File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/GraphicView-GjVClkja.js.map
{"version":3,"file":"GraphicView-GjVClkja.js","sources":["../../src/modules/aleaFigure/coordinates.js","../../src/modules/aleaFigure/grandeurs.js","../../src/modules/aleaFigure/outils.js","../../src/modules/aleaFigure/elements.js","../../src/modules/aleaFigure/getMathalea2DExport.js","../../src/modules/aleaFigure/GraphicView.js"],"sourcesContent":["import { texNombre2 } from '../../lib/outils/texNombre.js'\nimport { round } from 'mathjs'\n/**\n * @class for coordinates\n */\nexport class GVCoordinates {\n r /** number */ = 0\n x /** number */ = 0\n y /** number */ = 0\n theta /** number */ = 0\n getCartesianCoordinates () /** GVCartesian */ {\n if (this instanceof GVPolar) {\n return new GVCartesian(\n this.r * Math.cos(this.theta),\n this.r * Math.sin(this.theta)\n )\n } else {\n return this\n }\n }\n\n getPolarCoordinates () /** GVPolar */{\n if (this instanceof GVCartesian) {\n return new GVPolar(\n Math.sqrt(this.x ** 2 + this.y ** 2),\n Math.atan(this.y / this.x))\n } else {\n return this\n }\n }\n\n format () {\n return `(${texNombre2(round(this.x, 3))}{;}${texNombre2(round(this.y, 3))})`.replaceAll(',', '{,}').replaceAll('{{,}}', '{,}')\n }\n}\n/**\n * @class for cartesian coordinates\n */\nexport class GVCartesian extends GVCoordinates {\n constructor (x /** number */, y /** number */) {\n super()\n this.x = x\n this.y = y\n }\n\n format () {\n return `(${texNombre2(round(this.x, 3))}{;}${texNombre2(round(this.y, 3))})`.replaceAll(',', '{,}').replaceAll('{{,}}', '{,}')\n }\n}\n/**\n * @class for polar coordinates\n */\nexport class GVPolar extends GVCoordinates {\n constructor (r /** number */, theta /** number */) {\n super()\n this.r = r\n this.theta = theta\n }\n\n format () {\n return `(${texNombre2(round(this.r, 3))}{;}${texNombre2(round(this.theta, 3))})`.replaceAll(',', '{,}').replaceAll('{{,}}', '{,}')\n }\n}\n","import { texNombre2 } from '../../lib/outils/texNombre.js'\nimport { simplify, parse, unit, max, add, subtract, abs, log10, random, round, isConstantNode } from 'mathjs'\nimport { aleaName } from '../outilsMathjs.js'\nimport { GVGraphicObject } from './elements.js'\n\n/**\n * Grandeur, methods for operations\n *\n */\nexport class GVGrandeur {\n value /** number */\n precision /** number */\n unit /** string */\n toFixed /** number */\n nameAndValue /** string */\n _name /** string */\n calcul /** string */\n constructor (name /** string | GVPoint[] */, value /** number */, precision /** number */ = 1, unit /** string */ = '') {\n this.value = round(value, precision)\n this.precision = precision\n this.unit = unit\n this.toFixed = round(this.value, this.precision)\n this.name = name\n }\n\n set name (newname /** string | GVPoint[] */) {\n if (typeof newname === 'string') {\n this._name = newname\n } else {\n this._name = (aleaName(newname).map(x => x.name)).join('')\n }\n this.nameAndValue = `$ {${this.name}=${texNombre2(this.toFixed).replace(',', '{,}')}~${this.unit.replace('deg', '\\\\degree')}}$`.replace('~\\\\degree', '\\\\degree')\n }\n\n get name () { return this._name }\n format () {\n return `{${texNombre2(this.toFixed).replace(',', '{,}')}~${this.unit.replace('deg', '\\\\degree')}}`.replace('~\\\\degree', '\\\\degree')\n }\n\n aleaName (...name/** (string | GVGraphicObject)[] */) {\n this.name = aleaName(name.map(x => {\n if (x instanceof GVGraphicObject) {\n return x.name\n } else {\n return x\n }\n }), name.length).join('')\n }\n\n multiply (a /** GVGrandeur */) {\n const expression = simplify([this.name, a.name].filter(x => x !== '').join('*').replaceAll('{', '(').replaceAll('}', ')')).toString()\n const calcul = parse(unit(this.toFixed + this.unit).multiply(unit(a.toFixed + a.unit)).toString())\n\n return new GVGrandeur(\n expression,\n\n parseFloat(isConstantNode(calcul) ? calcul.toString() : calcul.args[0].toString()),\n this.precision + a.precision,\n\n isConstantNode(calcul) ? '' : calcul.args[1].toString()\n )\n }\n\n divide (a /** GVGrandeur */) {\n const expression = simplify([this.name, a.name].filter(x => x !== '').join('/').replaceAll('{', '(').replaceAll('}', ')')).toString()\n const calcul = parse(unit(this.toFixed + this.unit).divide(unit(a.toFixed + a.unit)).toString())\n return new GVGrandeur(\n expression,\n\n parseFloat(isConstantNode(calcul) ? calcul.toString() : calcul.args[0].toString()),\n this.precision - a.precision,\n\n isConstantNode(calcul) ? '' : calcul.args[1].toString()\n )\n }\n\n add (a /** GVGrandeur */) {\n const expression = simplify([this.name, a.name].filter(x => x !== '').join('+').replaceAll('{', '(').replaceAll('}', ')')).toString()\n const calcul = parse(add(unit(this.toFixed + this.unit), unit(a.toFixed + a.unit)).toString())\n return new GVGrandeur(\n expression,\n\n parseFloat(isConstantNode(calcul) ? calcul.toString() : calcul.args[0].toString()),\n max(this.precision, a.precision),\n\n isConstantNode(calcul) ? '' : calcul.args[1].toString()\n )\n }\n\n subtract (a /** GVGrandeur */) {\n const expression = simplify([this.name, a.name].filter(x => x !== '').join('-').replaceAll('{', '(').replaceAll('}', ')')).toString()\n const calcul = parse(subtract(unit(this.toFixed + this.unit), unit(a.toFixed + a.unit)).toString())\n return new GVGrandeur(\n expression,\n\n parseFloat(isConstantNode(calcul) ? calcul.toString() : calcul.args[0].toString()),\n max(this.precision, a.precision),\n\n isConstantNode(calcul) ? '' : calcul.args[1].toString()\n )\n }\n\n hypotenuse (a /** GVGrandeur */) {\n return a.pow(2).add(this.pow(2)).sqrt()\n }\n\n /**\n * this^n\n * @param {number} n // Integer\n * @returns {GVGrandeur}\n */\n pow (n /** number */) /** GVGrandeur */ {\n return new GVGrandeur(this.name + '^{' + n + '}', Math.pow(this.toFixed, n), n * this.precision, this.unit + '^' + n)\n }\n\n /**\n * this^n\n * @param n // Integer\n * @returns {GVGrandeur}\n */\n sqrt () /** GVGrandeur */ {\n return new GVGrandeur('\\\\sqrt{' + this.name + '}', Math.pow(this.toFixed, 0.5), Math.floor(0.5 * this.precision), 'cm')\n }\n\n abs () /** GVGrandeur */ {\n return new GVGrandeur(\n this._name,\n abs(this.value),\n this.precision,\n this.unit\n )\n }\n\n neg () /** GVGrandeur */ {\n return new GVGrandeur(\n '-' + this.name,\n -this.value,\n this.precision,\n this.unit\n )\n }\n\n to (newUnit /** string */) /** GVGrandeur */ {\n const thenumber = abs(unit(this.value, this.unit))\n const conversion = abs(thenumber.to(newUnit))\n\n const precision = Math.max(0, this.precision - log10(parse(conversion.toString()).args[0].value / parse(thenumber.toString()).args[0].value))\n return new GVGrandeur(\n this.name,\n\n parse(conversion.toString()).args[0].value,\n precision,\n newUnit\n )\n }\n}\n/**\n * Quantity random\n * @param {number} nmin\n * @param {number} nmax\n * @param {number} digit\n * @param {string} name\n * @param {string} unit\n * @returns {GVGrandeur}\n */\nexport function qrandom (nmin /** number */ = 0, nmax /** number */ = 1, digit /** number */ = max(0, -log10(abs(nmax - nmin))), name /** string */ = '', unit /** string */ = '') /** GVGrandeur */ {\n return new GVGrandeur(\n name,\n round(random(nmin, nmax), max(digit, 0)),\n digit,\n unit\n )\n}\n","import { GVPoint, GVPolygon, GVSegment, GVLine } from './elements.js'\nimport { GVGrandeur } from './grandeurs.js'\nexport function circularPermutation (arg /** string | any[] */, n/** number */ = Math.random() * arg.length)/** any[] */ {\n if (typeof arg === 'string') {\n arg = arg.split('')\n }\n n = parseInt((n % arg.length).toString())\n return arg.concat(arg).splice(n, arg.length)\n}\nexport function getDimensions (...figures) {\n const listePoints = []\n const listeXPoints = []\n const listeYPoints = []\n for (const fig of figures) {\n if (fig instanceof GVPoint) {\n listePoints.push(fig)\n listeXPoints.push(fig.x)\n listeYPoints.push(fig.y)\n } else if (fig instanceof GVPolygon) {\n listePoints.push(...fig.vertices)\n listeXPoints.push(fig.getDimensions()[0], fig.getDimensions()[2])\n listeYPoints.push(fig.getDimensions()[1], fig.getDimensions()[3])\n }\n }\n const xmin = Math.min(...listeXPoints)\n const xmax = Math.max(...listeXPoints)\n const ymin = Math.min(...listeYPoints)\n const ymax = Math.max(...listeYPoints)\n return [xmin, ymin, xmax, ymax]\n}\n/**\n * Euclidean quotient\n * @param {number} x\n * @returns {number}\n */\nexport function quotient (x/** number */, y/** number */)/** number */ {\n return x - x % y\n}\nexport function name (s, ...p) {\n p = p.map((x, k) => {\n if (x instanceof GVGrandeur) {\n return String.raw`${s.raw[k]}` + x.name\n } else if (x instanceof GVSegment) {\n return String.raw`${s.raw[k]}` + `${x.name}` // `[${x.name}]`\n } else if (x instanceof GVLine) {\n return String.raw`${s.raw[k]}` + `${x.name}` // `(${x.name})`\n } else if (x instanceof GVPoint || x instanceof GVPolygon) {\n return String.raw`${s.raw[k]}` + `${x.name}`\n } else {\n return String.raw`${s.raw[k]}` + `${x}`\n }\n })\n return p.join('') + s.raw[s.length - 1]\n}\n","/* eslint-disable no-useless-constructor */\nimport { point, tracePoint } from '../../lib/2d/points.js'\nimport { latexParCoordonnees } from '../../lib/2d/textes.js'\n/* eslint-disable no-unused-vars */\nimport { context } from '../context.js'\nimport { GVCartesian, GVCoordinates } from './coordinates.js'\nimport { aleaName } from '../outilsMathjs.js'\nimport { dot, round, cross } from 'mathjs'\nimport { circularPermutation, getDimensions } from './outils.js'\n\n/**\n * @class\n * @classdesc Graphic object like Point, Line, Segment etc.\n */\nexport class GVGraphicObject {\n visible\n /** boolean */\n _name\n /** string */\n color /** string */ = 'black'\n\n constructor () {\n this.visible = false\n this.name = ''\n }\n\n aleaName (...name /** (string | GVGraphicObject)[] */) {\n this.name = aleaName(name.map(x => {\n if (x instanceof GVGraphicObject) {\n return x.name\n } else {\n return x\n }\n }), name.length).join('')\n }\n\n set name (newname) {\n this._name = newname\n }\n\n get name () {\n return this._name\n }\n\n getGGB () {\n return this.name\n }\n\n /**\n * Move this right to figures\n * @param figures\n */\n moveRight (...figures/** GVGraphicObject[] */) {\n const [xmin1, ymin1, ymax1] = getDimensions(this)\n const [, ymin2, xmax2, ymax2] = getDimensions(...figures)\n const P1 = new GVPoint(xmin1, ymin1)\n const P2 = new GVPoint(xmax2, ymax2)\n const t = new GVVector(P1, P2)\n this.move(t.add(new GVVector(4, 0)).sub(new GVVector(0, (ymax2 - ymin2 + ymax1 - ymin1) / 2)))\n }\n\n /**\n * Déplace l'objet\n * @param {GVVector} V\n */\n move (V /** GVVector */) {\n if (this instanceof GVPoint) {\n this.x = this.add(V).x\n this.y = this.add(V).y\n } else if (this instanceof GVPolygon) {\n for (const P of this.vertices) {\n P.x = P.add(V).x\n P.y = P.add(V).y\n }\n }\n }\n}\n\n/**\n * @class\n * @classdesc Caracteristics of a point in an euclidean plan\n */\nexport class GVPoint extends GVGraphicObject {\n coordinates\n /** GVCoordinates */\n polarCoordinates\n /** GVPolar */\n cartesianCoordinates\n /** GVCartesian */\n type\n /** string */\n x\n /** number */\n y\n /** number */\n r\n /** number */\n theta\n /** number */\n ggb\n /** string */\n dot\n /** any */\n labelPoints\n /** [GVPoint, GVPoint, GVPoint] */\n label /** boolean */ = false\n M2D\n\n /** any */\n constructor (arg1/** GVCoordinates | number */, arg2 /** number */ = 0) {\n super()\n if (arg1 instanceof GVCoordinates) {\n this.coordinates = arg1\n } else {\n this.coordinates = new GVCartesian(arg1, arg2)\n }\n this.polarCoordinates = this.getPolarCoordinates()\n this.cartesianCoordinates = this.getCartesianCoordinates()\n this.name = ''\n this.type = 'Point'\n this.x = this.cartesianCoordinates.x\n this.y = this.cartesianCoordinates.y\n this.r = this.polarCoordinates.r\n this.theta = this.polarCoordinates.theta\n this.ggb = `${this.name} = (${this.x},${this.y})`\n this.M2D = point(this.x, this.y, '', 'above right')\n }\n\n getPolarCoordinates ()/** GVCartesian */ {\n return this.coordinates.getPolarCoordinates()\n }\n\n getCartesianCoordinates () {\n return this.coordinates.getCartesianCoordinates()\n }\n\n xSVG = function (coeff) {\n return round(this.x * coeff, 3)\n }\n\n ySVG = function (coeff) {\n return -round(this.y * coeff, 3)\n }\n\n getRotate (O /** GVPoint */, angle /** number */) {\n return new GVPoint(\n new GVCartesian(\n (this.x - O.x) * Math.cos(angle) - (this.y - O.y) * Math.sin(angle) + O.x,\n (this.x - O.x) * Math.sin(angle) + (this.y - O.y) * Math.cos(angle) + O.y\n ))\n }\n\n /**\n *\n * @param {GVVector|GVPoint} X\n * @returns {GVPoint}\n */\n add (X) {\n return new GVPoint(new GVCartesian(this.x + X.x, this.y + X.y))\n }\n\n /**\n *\n * @param {GVVector|GVPoint} X\n * @returns {GVPoint}\n */\n sub (X) {\n return new GVPoint(new GVCartesian(this.x - X.x, this.y - X.y))\n }\n\n /**\n * homothétie de centre (0,0) de rapport k\n * @param {number} k\n * @returns {GVPoint}\n */\n multiply (k) {\n return new GVPoint(new GVCartesian(this.x * k, this.y * k))\n }\n\n /**\n * homothétie de centre (0,0) de rapport 1/k\n * @param {number} k\n * @returns {GVPoint}\n */\n divide (k) {\n if (k !== 0) return new GVPoint(new GVCartesian(this.x / k, this.y / k))\n }\n\n /**\n * retourne les coordonnées barycentrique du GVPoint dans le repère formé par les trois GVPoint en argument.\n * @param {GVPoint} A\n * @param {GVPoint} B\n * @param {GVPoint} C\n * @returns {[number,number,number]}\n */\n getBarycentriqueCoords (A, B, C) {\n const a = determinant(B.sub(this), C.sub(this))\n const b = determinant(C.sub(this), A.sub(this))\n const c = determinant(A.sub(this), B.sub(this))\n return [a, b, c]\n }\n\n /**\n * retourne true si le GVPoint est à l'intérieur du triangle formé par les 3 GVPoints en argument\n * @param {GVPoint} A\n * @param {GVPoint} B\n * @param {GVPoint} C\n * @returns {boolean}\n */\n isInTriangle (A /** GVPoint */, B /** GVPoint */, C /** GVPoint */) /** boolean */ {\n return Math.min(...this.getBarycentriqueCoords(A, B, C)) > 0 || Math.max(...this.getBarycentriqueCoords(A, B, C)) < 0\n }\n\n /**\n * Get the symetric of P with this\n * @param {GVPoint} P\n * @returns {GVPoint}\n */\n getSymetric (P) {\n return barycentre([this, P], [2, -1])\n }\n\n /**\n *\n * @param {GVPoint} O\n * @param {number} k\n * @returns {GVPoint}\n */\n getHomothetic (O, k) {\n return new GVPoint(\n new GVCartesian(\n k * this.x + (1 - k) * O.x,\n k * this.y + (1 - k) * O.y\n ))\n }\n\n /**\n * Retourne un vecteur position du GVPoint (origine (0;0) extrémité le GVPoint.\n * @returns {GVVector}\n */\n getVector () {\n return new GVVector(this.x, this.y)\n }\n\n /**\n * Retourne une déclaration pour geogebra utilisé par la méthode exportGGB() qui elle est inutilisée.\n * @returns {string}\n */\n getGGB () {\n this.ggb = `${this.name} = (${this.x},${this.y})`\n return `${this.name} = (${this.x},${this.y})`\n }\n\n showName (scaleppc /** number */ = 1) /** string */ {\n let label\n /** any */\n const splitname = this.name.split('_')\n const nameFormat = splitname.length === 1 ? splitname[0] : `${splitname[0]}_{${splitname[1]}}`\n if (this.labelPoints !== undefined) {\n const P1 = this.labelPoints[0]\n const P3 = this.labelPoints[2]\n const S = this.labelPoints[1]\n const v1 = P1.sub(S).getVector().getNormed()\n const v3 = P3.sub(S).getVector().getNormed()\n let P /** GVPoint */\n if (v1.colinear(v3)) { // Colinéaires\n P = S.add(v1.getNormal().multiply(scaleppc * 0.4))\n } else { // Non colinéaires\n P = S.getSymetric(S.add(v1.add(v3).getNormed().multiply(scaleppc * 0.4)))\n }\n label = latexParCoordonnees(nameFormat, P.x, P.y, 'black', 0, 0, '', 8)\n //\n this.labelPoints = [P1, S, P3]\n } else {\n label = latexParCoordonnees(nameFormat, this.x, this.y + 0.2 * scaleppc, 'black', 0, 0, '', 8)\n }\n this.label = true\n return label\n }\n\n showDot () {\n const splitname = this.name.split('_')\n let nameFormat = splitname.length === 1 ? splitname[0] : `${splitname[0]}_{${splitname[1]}}`\n if (context.isHtml) nameFormat = `$${nameFormat}$`\n this.dot = tracePoint(point(this.x, this.y, nameFormat, 'above'))\n return this\n }\n\n set name (newname) {\n this._name = newname\n this.ggb = `${this.name} = (${this.x},${this.y})`\n }\n\n get name () {\n return this._name\n }\n}\n\n/**\n * @class\n * @property {number} x\n * @property {number} y\n * @property {number} norme\n */\nexport class GVVector {\n x /** number */ = 0\n y /** number */ = 0\n norme\n\n /** number */\n constructor (arg1 /** number | GVPoint */, arg2 /** number | GVPoint */) {\n if (typeof arg1 === 'number' && typeof arg2 === 'number') {\n this.x = arg1\n this.y = arg2\n } else if (arg1 instanceof GVPoint && arg2 instanceof GVPoint) {\n this.x = arg2.x - arg1.x\n this.y = arg2.y - arg1.y\n }\n this.norme = Math.sqrt(this.x ** 2 + this.y ** 2)\n }\n\n /**\n * retourne un vecteur directeur colinéaire de norme 1\n * @returns {GVVector}\n */\n getNormed () {\n const xy = Math.sqrt(this.x ** 2 + this.y ** 2)\n return new GVVector(this.x / xy, this.y / xy)\n }\n\n /**\n * retourne le vecteur normal\n * @returns {GVVector}\n */\n getNormal () {\n return new GVVector(-this.y, this.x)\n }\n\n /**\n * Ajoute vectoriellement un GVPoint ou un GVVector\n * @param {GVPoint | GVVector} X\n * @returns {GVVector}\n */\n add (X) {\n return new GVVector(this.x + X.x, this.y + X.y)\n }\n\n /**\n * soustrait vectoriellement un GVPoint ou un GVVector\n * @param {GVPoint | GVVector} X\n * @returns {GVVector}\n */\n sub (X) {\n return new GVVector(this.x - X.x, this.y - X.y)\n }\n\n /**\n * multiplie le GVVector par k\n * @param {number} k\n * @returns {GVVector}\n */\n multiply (k) {\n return new GVVector(this.x * k, this.y * k)\n }\n\n /**\n * retoune l'opposé du GVVector\n * @returns {GVVector}\n */\n neg () {\n return new GVVector(-this.x, -this.y)\n }\n\n /**\n * Retourne lle produit scalaire du GVVector et de X\n * @param {GVVector|GVPoint} X\n * @returns {number}\n */\n dot (X) {\n return dot([this.x, this.y], [X.x, X.y]) // ne pas confondre ce dot qui vient de mathjs et le this.dot() de GVVector !\n }\n\n /**\n * retourne le produit vectoriel du GVVector avec X\n * @param {GVVector|GVPoint} X\n * @returns {math.MathCollection}\n */\n cross (X) {\n return cross([this.x, this.y, 0], [X.x, X.y, 0]) // ne pas confondre ce cross qui vient de mathjs et le this.cross() de GVVector !\n }\n\n /**\n * retourne true si le GVVector et V sont colinéaires\n * @param {GVVector} V\n * @returns {boolean}\n */\n colinear (V) {\n return parseFloat(cross([this.x, this.y, 0], [V.x, V.y, 0])[2].toFixed(15)) === 0\n }\n}\n\n/**\n * @class\n * @property {GVVector} direction\n * @property {GVPoint} A\n * @property {GVPoint|GVVector} B\n * @property {string} type\n * @property {number} a\n * @property{number} b\n * @property {number} c\n * @property {string} ggb\n * @classdesc Caracteristics of a line in an euclidean plan (ax+by=c)\n */\nexport class GVLine extends GVGraphicObject {\n direction\n A\n B\n type\n a = 0\n b = 0\n c = 0\n ggb\n // Une droite sera définie par deux points distincts ou un point et une direction\n // Il faudrait deux constructeurs ?\n constructor (A, B) {\n super()\n this.direction = B instanceof GVVector ? B : new GVVector(B.x - A.x, B.y - A.y)\n this.A = A\n this.B = B instanceof GVPoint ? B : new GVPoint(new GVCartesian(A.x + B.x, A.y + B.y))\n this.getEquation()\n this.type = 'Line'\n this.ggb = `${this.name}: ${this.a}*x+${this.b}*y=${this.c})`\n }\n\n /**\n * retourne l'ordonnée du point de la droite d'abscisse x si il existe\n * @param {number} x\n * @returns {undefined|number}\n */\n getYPoint (x) {\n return this.b === 0 ? undefined : (this.c - this.a * x) / this.b\n }\n\n /**\n * retourne l'abscisse du point de la droite d'ordonnée y si il existe\n * @param {number} y\n * @returns {undefined|number}\n */\n getXPoint (y) {\n return this.a === 0 ? undefined : (this.c - this.b * y) / this.a\n }\n\n /**\n * renseigne l'équation de la droite (ses propriétés a, b et c\n */\n getEquation () {\n const directionUnit = this.direction.getNormed()\n this.a = -directionUnit.y\n this.b = directionUnit.x\n this.c = this.a * this.A.x + this.b * this.A.y\n }\n\n /**\n * retourne le point d'intersection de la droite avec une autre\n * @param {GVLine} L\n * @returns {GVPoint|undefined}\n */\n getIntersect (L) {\n const delta = L.a * this.b - this.a * L.b\n if (delta.toFixed(15) !== '0') {\n const deltax = -(L.b * this.c - this.b * L.c)\n const deltay = L.a * this.c - this.a * L.c\n const point = new GVPoint(new GVCartesian(deltax / delta, deltay / delta))\n return point\n }\n }\n\n /**\n * Retourne la perpendiculaire à cette droite passant par P\n * @param {GVPoint} P\n * @returns {GVLine}\n */\n getPerpendicularLine (P) {\n return new GVLine(P, this.direction.getNormal())\n }\n\n /**\n * Get the symétric of P with this\n * @param {GVPoint} P\n * @returns {GVPoint}\n */\n getSymetric (P) {\n return barycentre([this.getIntersect(this.getPerpendicularLine(P)), P], [2, -1])\n }\n\n /**\n * Renseigne la propriété name de l'objet ainsi que sa propriété ggb\n * @param {string} newname\n */\n set name (newname) {\n this._name = newname\n this.ggb = `${this.name}: ${this.a}*x+${this.b}*y=${this.c})`\n }\n\n /**\n * récupère la propriété name de l'objet\n * @returns {*}\n */\n get name () {\n return this._name\n }\n}\n\n/**\n * Retourne le déterminant de deux vecteurs\n * @param {GVVector|GVPoint} X\n * @param {GVVector|GVPoint} Y\n * @returns {number}\n */\nexport function determinant (X, Y) {\n return X.x * Y.y - X.y * Y.x\n}\n\n/**\n * Retourne le baricentre d'une liste de GVPoint affectés des coefficients d'une liste de nombres\n * @param {GVPoint[]} P\n * @param {number[]} a\n * @returns {GVPoint}\n */\nexport function barycentre (P /** GVPoint[] */, a /** number[] */) /** GVPoint */ {\n if (Array.isArray(P) && Array.isArray(a) && P.length === a.length) {\n const pointsPonderes = P.map((x, i) => x.multiply(a[i]))\n return pointsPonderes.reduce((accumulator, curr) => accumulator.add(curr)).divide(a.reduce((accumulator, curr) => accumulator + curr))\n } else {\n window.notify('fonction barycentre() de AleaFigure mal employée', { points: P, coefficients: a })\n }\n}\n\n/**\n * @class\n * @property {boolean} label\n * @property {string} text\n * @property {string} textColor\n * @property {boolean} direct\n * @property {'Segment'} type\n * @param {GVPoint} A\n * @param {GVPoint} B\n * @classdesc Caracteristics of a segment in an euclidean plan\n */\nexport class GVSegment extends GVLine {\n label\n text = ''\n textColor = 'black'\n direct = true\n\n constructor (A, B) {\n super(A, B)\n this.type = 'Segment'\n this.A = A\n this.B = B\n this.aleaName(this.A, this.B)\n this.getEquation()\n }\n\n /**\n * Retourne le label de l'objet et fixe la propriété label de l'objet à true\n * @returns {Vide2d|LatexParCoordonnees}\n */\n showLabel () {\n let label\n const P = new GVPoint((this.A.x + this.B.x) / 2, (this.A.y + this.B.y) / 2)\n if (context.isHtml) {\n label = latexParCoordonnees(this.name, P.x, P.y, 'black', 0, 0, '')\n } else {\n label = latexParCoordonnees(this.name, P.x, P.y, 'black', 0, 0, '')\n }\n this.label = true\n return label\n }\n}\n\n/**\n * @class\n * @property {GVPoint} A // centre\n * @property {GVPoint|number} B point de passage ou rayon\n * @property {number} r rayon\n * @property {'Circle'} type\n * @classdesc Caracteristics of a circle in an euclidean plan\n */\nexport class GVCircle extends GVGraphicObject {\n A\n B\n type\n a = 0\n b = 0\n r = 0\n\n constructor (A, B) {\n super()\n this.type = 'Circle'\n this.A = A\n this.B = B instanceof GVPoint ? B : A\n this.r = B instanceof GVPoint ? Math.sqrt((A.x - B.x) ** 2 + (A.y - B.y) ** 2) : B\n }\n\n /**\n * Retourne un point du cercle correspondant à l'angle donné\n * @param {number} theta\n * @returns {GVPoint}\n */\n getPoint (theta) {\n return new GVPoint(\n new GVCartesian(\n this.A.x + this.r * Math.cos(theta),\n this.A.y + this.r * Math.sin(theta)\n )\n )\n }\n}\n\n/**\n * @class\n * @property {GVPoint} A\n * @property {GVPoint} B\n * @property {GVPoint} C\n * @property {number} angle\n * @property {'Angle'} type\n * @property {boolean} direct\n * @property {GVVector} vBA\n * @property {GVVector} vBC\n * @property {boolean} right = false\n * @property {strig} fillColor = 'none'\n * @property {number} fillOpacity = 0.2\n * @property {boolean} rayon = true\n * @classdesc Caracteristics of an angle\n */\nexport class GVAngle extends GVGraphicObject {\n A\n B\n C\n angle\n type\n direct\n vBA\n vBC\n right = false\n fillColor = 'none'\n fillOpacity = 0.2\n rayon = true\n\n constructor (A, B, C) {\n super()\n this.type = 'Angle'\n const vA = new GVVector(A.x, A.y)\n const vB = new GVVector(B.x, B.y)\n const vC = new GVVector(C.x, C.y)\n const vBA = vA.sub(vB).getNormed()\n const vBC = vC.sub(vB).getNormed()\n this.vBA = vBA\n this.vBC = vBC\n const cos = vBA.x * vBC.x + vBA.y * vBC.y\n this.angle = Math.acos(cos)\n this.A = B.add(vBA)\n this.B = B\n this.C = B.add(vBC)\n this.direct = cross([vBA.x, vBA.y, 0], [vBC.x, vBC.y, 0])[2] > 0\n }\n\n /**\n * Pour agrandir l'angle\n * @param {number} scale\n */\n scale (scale) {\n const vBA = this.vBA.multiply(scale)\n const vBC = this.vBC.multiply(scale)\n this.A = this.B.add(vBA)\n this.C = this.B.add(vBC)\n }\n}\n\n/**\n * @class\n * @property {GVPoint[]} vertices\n * @property {string} name\n * @classdesc Caracteristics of an angle\n */\nexport class GVPolygon extends GVGraphicObject {\n showLabels /** boolean */ = true\n\n constructor (...args /** GVPoint[] */) {\n super()\n this.vertices /** GVPoint[] */ = args\n this.name = circularPermutation(args.map(x => x.name)).join('')\n }\n\n /**\n * retourne les bordures d'un GVPolygon\n * @returns {[number,number,number,number]}\n */\n getDimensions () {\n const listXPoint = this.vertices.map(M => M.x)\n const listYPoint = this.vertices.map(M => M.y)\n const xmin = Math.min(...listXPoint)\n const xmax = Math.max(...listXPoint)\n const ymin = Math.min(...listYPoint)\n const ymax = Math.max(...listYPoint)\n return [xmin, ymin, xmax, ymax]\n }\n}\n\n/**\n * @class\n * @property {number} longueur\n * @property {number} largeur\n * @property {number} ratio\n * @classdesc Caracteristics of a triangle\n */\nexport class GVRectangle extends GVPolygon {\n longueur\n largeur\n ratio\n constructor (...args /** GVPoint[] */) {\n super(...args)\n const [A, B, C] = args\n const dimensions = [Math.sqrt((A.x - B.x) ** 2 + (A.y - B.y) ** 2), Math.sqrt((C.x - B.x) ** 2 + (C.y - B.y) ** 2)].sort()\n this.largeur = dimensions[0]\n this.longueur = dimensions[1]\n this.ratio = this.longueur / this.largeur\n }\n}\n\n/**\n * @class\n * @classdesc Caracteristics of a triangle\n */\nexport class GVTriangle extends GVPolygon {\n constructor (...args /** GVPoint[] */) {\n super(...args)\n }\n}\n","import { arcPointPointAngle, cercle } from '../../lib/2d/cercle.js'\nimport { texteSurSegment } from '../../lib/2d/codages.js'\nimport { point } from '../../lib/2d/points.js'\nimport { polygone } from '../../lib/2d/polygones.js'\nimport { segment } from '../../lib/2d/segmentsVecteurs.js'\nimport { GVPolygon, GVAngle, GVPoint, GVLine, GVSegment, GVCircle } from './elements.js'\nimport { mathalea2d } from '../2dGeneralites.js'\nexport function getMathalea2DExport (graphic /** GVGraphicView */) {\n if (graphic.allowResize) graphic.resize()\n const scaleppc = 20 / (graphic.ppc ?? 20)\n const clip = { xmin: graphic.xmin - scaleppc, xmax: graphic.xmax + scaleppc, ymin: graphic.ymin - scaleppc, ymax: graphic.ymax + scaleppc }\n\n // On ajoute tous les éléments\n const objs = []\n\n if (graphic.clipVisible) {\n const drawClip = polygone(\n point(clip.xmin, clip.ymin, '', 'above'),\n point(clip.xmax, clip.ymin, '', 'above'),\n point(clip.xmax, clip.ymax, '', 'above'),\n point(clip.xmin, clip.ymax, '', 'above')\n )\n if (drawClip != null) objs.push(drawClip)\n }\n\n for (const obj of graphic.geometricExport.filter(x => x.visible)) {\n if (obj instanceof GVPoint) {\n if (obj.dot != null) objs.push(obj.dot)\n if (obj.label) {\n const label = obj.showName(scaleppc)\n if (label != null) objs.push(label)\n }\n } else if (obj instanceof GVLine && !(obj instanceof GVSegment)) {\n // objs.push(droite(obj.a, obj.b, -obj.c))\n const points = graphic.getExtremPointGraphicLine(obj)\n if (points != null && Array.isArray(points)) objs.push(segment(points[0], points[1], obj.color ?? 'black'))\n } else if (obj instanceof GVSegment) {\n if (obj.A != null && obj.B != null) {\n objs.push(segment(obj.A, obj.B, obj.color ?? 'black'))\n }\n if (obj.label) {\n const label = obj.showLabel(scaleppc)\n if (label != null) objs.push()\n }\n if (obj.text !== '') {\n if (obj.A.M2D != null && obj.B.M2D != null) {\n const points = obj.direct ? [obj.A.M2D, obj.B.M2D] : [obj.B.M2D, obj.A.M2D]\n objs.push(texteSurSegment(obj.text, points[0], points[1], obj.textColor ?? 'black', 0.5 * scaleppc))\n }\n }\n } else if (obj instanceof GVCircle) {\n if (obj.A.M2D != null && obj.r > 0) {\n objs.push(cercle(obj.A.M2D, obj.r))\n }\n } else if (obj instanceof GVAngle) {\n if (Math.abs(obj.angle).toFixed(13) === (Math.PI / 2).toFixed(13) && obj.right) {\n const P1 = obj.A\n const P3 = obj.C\n const S = obj.B\n if (P1 instanceof GVPoint && P3 instanceof GVPoint && S instanceof GVPoint) {\n const v1 = P1.sub(S).getVector().getNormed().multiply(scaleppc * 0.7)\n const v3 = P3.sub(S).getVector().getNormed().multiply(scaleppc * 0.7)\n const P = S.add(v1.add(v3)) // .add(corr)\n P.showDot()\n objs.push(...graphic.addSidesPolygon(S, S.add(v1), P, S.add(v3)).map(x => segment(x.A, x.B, obj.color)))\n }\n } else if (obj instanceof GVPolygon) {\n if (obj.showLabels) {\n obj.vertices.forEach(P => {\n if (P instanceof GVPoint) {\n objs.push(P.showName(scaleppc))\n }\n })\n } /*\n else {\n }\n */\n } else {\n obj.scale(scaleppc)\n if (obj.A.M2D != null && obj.C.M2D != null) {\n const extrems = obj.direct ? [obj.A.M2D, obj.C.M2D] : [obj.C.M2D, obj.A.M2D]\n objs.push(arcPointPointAngle(...extrems, obj.angle / Math.PI * 180, obj.fillColor !== 'none' ? obj.rayon : true, obj.fillColor ?? 'none', obj.color ?? 'black', obj.fillOpacity ?? 0))\n }\n }\n } else {\n if (obj != null) objs.push(obj)\n }\n }\n for (const obj of graphic.grid) {\n const points = graphic.getExtremPointGraphicLine(obj)\n if (points !== undefined) objs.push(segment(...points, obj.color ?? 'black'))\n }\n for (const obj of graphic.axes) {\n const points = graphic.getExtremPointGraphicLine(obj)\n if (Array.isArray(points) && points.length >= 2) {\n const arrow = segment(...points, obj.color ?? 'black')\n arrow.styleExtremites = '->'\n objs.push(arrow)\n }\n }\n return mathalea2d(Object.assign({}, { mainlevee: false, pixelsParCm: graphic.ppc, scale: graphic.scale * 0.7 }, clip), objs)\n}\n","/* eslint-disable no-unused-vars */\nimport { randomInt } from 'mathjs'\nimport { GVCartesian } from './coordinates.js'\nimport { GVRectangle, GVTriangle, GVPolygon, GVVector, GVAngle, GVPoint, GVLine, GVSegment, GVCircle, barycentre } from './elements.js'\nimport { getMathalea2DExport } from './getMathalea2DExport.js'\nimport { circularPermutation, quotient } from './outils.js'\nimport { aleaName } from '../outilsMathjs.js'\n/**\n * Donne une liste d'entiers relatifs dont on connait la somme.\n * @example > listeEntiersSommeConnue(4,10,-2)\n * < [1,-2,6,5]\n * @param {int} nbElements Nombre d'éléments de la liste\n * @param {int} total Somme des éléments de la liste (peut être un nombre négatif)\n * @param {int} [valMin = 1] Valeur minimale de chaque élément (peut être un nombre négatif)\n * @return {Array} Liste d'entiers relatifs\n * @author Frédéric PIOU\n */\nexport function listeEntiersSommeConnue (nbElements, total, valMin = 1) {\n const liste = []\n liste.push(randomInt(valMin, total - (nbElements - 1) * valMin + 1))\n for (let j = 1; j < nbElements - 1; j++) {\n liste.push(randomInt(liste[j - 1] + valMin, total - (nbElements - j - 1) * valMin + 1))\n }\n liste.push(total)\n for (let j = nbElements - 1; j > 0; j--) {\n liste[j] = liste[j] - liste[j - 1]\n }\n return liste\n}\n/**\n * @class\n * @classdesc Caracteristics of a graphic view\n * @author Frédéric PIOU\n */\nexport class GVGraphicView {\n names/** string[] */\n ppc /** number */\n scale /** number */\n geometric /** GVGraphicObject[] */\n geometricExport /** GVGraphicObject[] */\n grid /** GVLine[] */\n axes /** GVLine[] */\n xmin /** number */ = 0\n ymin /** number */ = 0\n xmax /** number */ = 10\n ymax /** number */ = 10\n width /** number */\n height /** number */\n ratio /** number */\n clipVisible /** boolean */ = false\n saveRatio /** boolean */ = true\n allowResize /** boolean */ = true\n showLabelPoint /** boolean */ = false\n limit /** number */ = Infinity\n _namesAlea /** boolean */ = true\n constructor (xmin /** number */ = 0, ymin /** number */ = 0, xmax /** number */ = 10, ymax /** number */ = 10) {\n this.setDimensions(xmin, ymin, xmax, ymax)\n this.names = aleaName('ABCDEFGHIJKLMNOPRSTUVZ'.split(''))\n this.ppc = 20 // Pixels per Centimeter\n this.scale = 1 // Scale for Tikz\n this.geometric = []\n this.grid = []\n this.axes = []\n }\n\n set namesAlea (names /** string[] | boolean) */) {\n if (typeof names === 'string') this.names = aleaName(names)\n if (names === false) this.names = 'ABCDEFGHIJKLMNOPRSTUVZ'.split('')\n }\n\n get namesAlea () {\n return this.names\n }\n\n setDimensions (xmin = -5, ymin = -5, xmax = 5, ymax = 5) {\n this.xmin = xmin\n this.ymin = ymin\n this.xmax = xmax\n this.ymax = ymax\n this.width = this.xmax - this.xmin\n this.height = this.ymax - this.ymin\n this.ratio = this.height / this.width\n }\n\n /**\n * Show any Objects in Mathalea2D\n * @example\n * show(A,B,C,ABC)\n */\n show (...args /** GVGraphicObject[] */) /** GVGraphicObject[] */ {\n const group = []\n args.forEach(x => {\n if (Array.isArray(x)) {\n group.push(...x)\n } else if (x instanceof GVPolygon) {\n group.push(...x.vertices)\n group.push(...this.addSidesPolygon(...x.vertices))\n this.addLabelsPointsPolygon(...x.vertices)\n } else {\n group.push(x)\n }\n })\n group.forEach(x => { x.visible = true })\n return group\n }\n\n addGrid (step /** number */ = 1) {\n for (let i = this.xmin; i < quotient(this.width, step); i++) {\n const lineX = new GVLine(new GVPoint(i, 0), new GVVector(0, 1))\n lineX.color = 'gray'\n this.grid.push(lineX)\n }\n for (let i = this.ymin; i < quotient(this.height, step); i++) {\n const lineY = new GVLine(new GVPoint(0, i), new GVVector(1, 0))\n lineY.color = 'gray'\n this.grid.push(lineY)\n }\n }\n\n addAxes () {\n const lineX = new GVLine(new GVPoint(0, 0), new GVVector(0, 1))\n this.axes.push(lineX)\n const lineY = new GVLine(new GVPoint(0, 0), new GVVector(1, 0))\n this.axes.push(lineY)\n }\n\n getDimensions (...liste /** GVGraphicObject[] */)/** [number, number, number, number] */ {\n const listPoint = this.getListObjectTypeSelect('Point', liste)\n const listXPoint = listPoint.map((X/** { x } */) => { return X.x })\n const listYPoint = listPoint.map((Y/** { y } */) => { return Y.y })\n const xmin = Math.min(...listXPoint)\n const xmax = Math.max(...listXPoint)\n const ymin = Math.min(...listYPoint)\n const ymax = Math.max(...listYPoint)\n return [xmin, ymin, xmax, ymax]\n }\n\n getWidth (...liste /** GVGraphicObject[] */) /** number */ {\n const [xmin, , xmax] = this.getDimensions(...liste)\n return xmax - xmin\n }\n\n getHeight (...liste /** GVGraphicObject[] */) /** number */ {\n const [, ymin, , ymax] = this.getDimensions(...liste)\n return ymax - ymin\n }\n\n getUponPoint (...liste /** GVGraphicObject[] */) /** GVPoint */ {\n const listePoints = this.getListObjectTypeSelect('Point', liste)\n return this.getListObjectTypeSelect('Point', liste).sort((a, b) => b.y - a.y)[listePoints.length - 1]\n }\n\n geBelowPoint (...liste /** GVGraphicObject[] */) /** GVPoint */ {\n // const listePoints = this.getListObjectTypeSelect('Point', liste) @Fixme à quoi ça sert ?\n return this.getListObjectTypeSelect('Point', liste).sort((a, b) => b.y - a.y)[0]\n }\n\n getLeftPoint (...liste /** GVGraphicObject[] */) /** GVPoint */ {\n const listePoints = this.getListObjectTypeSelect('Point', liste)\n return this.getListObjectTypeSelect('Point', liste).sort((a, b) => b.x - a.x)[listePoints.length - 1]\n }\n\n getRightPoint (...liste /** GVGraphicObject[] */) /** GVPoint */ {\n const listePoints = this.getListObjectTypeSelect('Point', liste)\n return listePoints.sort((a, b) => b.x - a.x)[0]\n }\n\n /**\n * Resize window of graphic view to the created points\n * Keep the ratio\n */\n resize () {\n // On commence par déterminer les dimensions à partir des abscisses et des ordonnées extrèmes\n const [xmin, ymin, xmax, ymax] = this.getDimensions()\n const [width, height] = [xmax - xmin, ymax - ymin]\n // On fait une copie des dimensions obtenues\n let newheight = 0 + height\n let newwidth = 0 + width\n // On calcule le ratio obtenu\n const ratio = height / width\n const k = ratio / this.ratio\n // S'il faut conserver le ratio on ne modifie qu'une seule dimension\n if (this.saveRatio) {\n if (k < 1) { // La largeur est plus grande\n newheight = height / k\n } else { // La hauteur est plus grande\n newwidth = width * k\n }\n } else { // Sinon seul le ratio change\n this.ratio = newheight / newwidth\n }\n // La hauteur sera utilisée dans tous les cas pour le calcul de l'échelle.\n // Elle sera donc conservée si le ratio ne l'est pas.\n this.ppc = this.ppc * this.height / newheight\n this.scale = this.scale * this.height / newheight\n const deltaX = (newwidth - width) / 2\n const deltaY = (newheight - height) / 2\n this.setDimensions(xmin - deltaX, ymin - deltaY, xmax + deltaX, ymax + deltaY)\n }\n\n /**\n * Give the list sorted of object with a given type\n */\n getListObjectTypeSelect (typeSelect = 'Point', liste /** GVGraphicObject[] */ = this.geometric)/** any */ {\n if (liste.length === 0) liste = this.geometric\n switch (typeSelect) {\n case 'Point':\n return liste.filter(obj => obj instanceof GVPoint).sort(\n (a, b) => {\n const nameA = a.name.split('_')\n const nameB = b.name.split('_')\n if (nameA[0] === nameB[0]) {\n return parseInt(nameA[1]) - parseInt(nameB[1])\n } else {\n return (-1) ** (nameA[0] > nameB[0] ? 0 : 1)\n }\n }\n )\n default:\n return this.geometric.filter(obj => !(obj instanceof GVPoint)).sort(\n (a, b) => {\n const nameA = a.name.split('_')\n const nameB = b.name.split('_')\n if (nameA[0] === nameB[0]) {\n return parseInt(nameA[1]) - parseInt(nameB[1])\n } else {\n return (-1) ** (nameA[0] > nameB[0] ? 0 : 1)\n }\n }\n )\n }\n }\n\n /**\n * Search the last name not used and give a new name\n */\n getLastNameNotUsed (typeSelect = 'Point') {\n switch (typeSelect) {\n case 'Point': {\n const list = this.getListObjectTypeSelect('Point')\n let nonUseLetter\n let i = 0\n do {\n const indice = i === 0 ? '' : `_${i}`\n nonUseLetter = this.names.find(\n letter => list.filter(x => x.name[0] === letter).find(\n obj => obj.name === letter + indice\n )?.name !== letter + indice)\n if (nonUseLetter !== undefined) nonUseLetter += indice\n i += 1\n } while (nonUseLetter === undefined)\n return nonUseLetter\n }\n case 'Segment':\n case 'Circle':\n case 'Line': {\n const list = this.getListObjectTypeSelect('Segment').concat(this.getListObjectTypeSelect('Line'))\n let nonUseLetter\n let i = 0\n do {\n const indice = i === 0 ? '' : `_${i}`\n nonUseLetter = this.names.find(\n letter => list.filter(x => x.name[0] === letter.toLowerCase()).find(\n obj => obj.name === letter.toLowerCase() + indice\n )?.name !== letter.toLowerCase() + indice)\n if (nonUseLetter !== undefined) nonUseLetter = nonUseLetter.toLowerCase() + indice\n i += 1\n } while (nonUseLetter === undefined)\n return nonUseLetter\n // return this.names.find(letter => list.find(obj => obj.name.split('')[0] === letter.toLowerCase())?.name.split('_')[0] !== letter.toLowerCase()).toLowerCase()\n }\n }\n }\n\n /**\n * Give a new name\n */\n getNewName (typeSelect = 'Point') {\n switch (typeSelect) {\n case 'Point':\n return this.getLastNameNotUsed(typeSelect)\n case 'Segment':\n case 'Circle':\n case 'Line':\n return this.getLastNameNotUsed(typeSelect)\n }\n }\n\n aleaNameObject (...args /** GVGraphicObject[] */) {\n const names = aleaName(args.length)\n args.forEach((x, i) => { x.name = names[i] })\n }\n\n /**\n * Append new objects to the euclidean plan\n * @param {number} n Number of point to create\n * @param {number} step For coordinates\n * @example\n * this.addPoint(2,0.5) --> Add two points with coordinates step 0.5 precision\n */\n addPoint (n /** number */ = 1, step /** number */) /** GVPoint[] */ {\n // Il faudrait donner la possibilité d'ajouter des points définis par leurs coordonnées\n const newPoints = []\n for (let i = 0; i < n; i++) {\n let obj /** GVPoint */\n let cpt = 0\n do {\n cpt += 1\n obj = new GVPoint(\n new GVCartesian(\n step === undefined ? Math.random() * this.width + this.xmin : quotient(Math.random() * this.width + this.xmin, step),\n step === undefined ? Math.random() * this.height + this.ymin : quotient(Math.random() * this.height + this.ymin, step)\n )\n )\n } while (cpt < this.limit && (this.isCloseToExistingPoints(obj) || this.isCloseToLineThroughtExistingPoints(obj)))\n obj.name = this.getNewName(obj.type)\n if (this.showLabelPoint) {\n obj.showDot()\n obj.showName()\n }\n this.geometric.push(obj)\n newPoints.push(obj)\n }\n return newPoints\n }\n\n /**\n * Add intersect point of two lines in the view\n */\n addIntersectLine (line1/** GVLine | GVCircle */, line2/** GVLine | GVCircle */) {\n if (line1 instanceof GVLine && line2 instanceof GVLine) {\n const delta = line1.a * line2.b - line2.a * line1.b\n if (delta.toFixed(15) !== '0') {\n const deltax = -(line1.b * line2.c - line2.b * line1.c)\n const deltay = line1.a * line2.c - line2.a * line1.c\n const point = new GVPoint(new GVCartesian(deltax / delta, deltay / delta))\n point.name = this.getNewName(point.type)\n this.geometric.push(point)\n return [point]\n }\n } else if (line1 instanceof GVCircle && line2 instanceof GVCircle) {\n const d = this.distance(line1.A, line2.A)\n if (d > line1.r + line2.r || d < (Math.abs(line1.r - line2.r))) {\n return []\n } else {\n const a = (line1.r ** 2 - line2.r ** 2 + d ** 2) / (2 * d)\n const h = Math.sqrt(line1.r ** 2 - a ** 2)\n const x2 = line1.A.x + a * (line2.A.x - line1.A.x) / d\n const y2 = line1.A.y + a * (line2.A.y - line1.A.y) / d\n const x3 = x2 + h * (line2.A.y - line1.A.y) / d\n const y3 = y2 - h * (line2.A.x - line1.A.x) / d\n const P1 = new GVPoint(new GVCartesian(x3, y3))\n const x4 = x2 - h * (line2.A.y - line1.A.y) / d\n const y4 = y2 + h * (line2.A.x - line1.A.x) / d\n const P2 = new GVPoint(new GVCartesian(x4, y4))\n P1.name = P1.name || this.getNewName(P1.type)\n P2.name = P2.name || this.getNewName(P2.type)\n this.geometric.push(P1, P2)\n return [P1, P2]\n }\n }\n }\n\n /**\n * Zoom in or out\n */\n zoom (k /** number */ = 1.01) {\n const xmin = k * (this.xmin - (this.xmax + this.xmin) / 2) + (this.xmax + this.xmin) / 2\n const xmax = k * (this.xmax - (this.xmax + this.xmin) / 2) + (this.xmax + this.xmin) / 2\n const ymin = k * (this.ymin - (this.ymax + this.ymin) / 2) + (this.ymax + this.ymin) / 2\n const ymax = k * (this.ymax - (this.ymax + this.ymin) / 2) + (this.ymax + this.ymin) / 2\n this.setDimensions(xmin, ymin, xmax, ymax)\n }\n\n /**\n * Give the distance between tow points, a point and a line, two lines\n */\n distance (P /** GVPoint */, Y /** GVPoint | GVLine */) {\n if (Y instanceof GVPoint) {\n return Math.sqrt((P.x - Y.x) ** 2 + (P.y - Y.y) ** 2)\n } else {\n return Math.abs(Y.a * P.x + Y.b * P.y - Y.c) / Math.sqrt(Y.a ** 2 + Y.b ** 2)\n }\n }\n\n /**\n * Tempt to estimate if a point is close to the existing points\n */\n isCloseToExistingPoints (M /** GVPoint */) {\n const listExistingPoints = this.getListObjectTypeSelect('Point')\n const maxDistance = Math.min(this.height, this.width) / listExistingPoints.length / 3\n if (listExistingPoints.length > 0) { return listExistingPoints.some(X => this.distance(X, M) < maxDistance) }\n return false\n }\n\n /**\n * Tempt to estimate if a point is close to the line through the existing point\n */\n isCloseToLineThroughtExistingPoints (M /** GVPoint */) {\n const listExistingPoints = this.getListObjectTypeSelect('Point')\n const litsExistingLine = this.getListObjectTypeSelect('Line')\n // const numberOfPoints = listExistingPoints.length\n const numberOfObjects = listExistingPoints.length + litsExistingLine.length\n const result = []\n const minDimension = Math.min(this.height, this.width) / numberOfObjects / 3\n for (let i = 0; i < listExistingPoints.length; i++) {\n for (let j = i + 1; j < listExistingPoints.length; j++) {\n const d = new GVLine(listExistingPoints[i], listExistingPoints[j])\n result.push(this.distance(M, d))\n }\n }\n for (let i = 0; i < litsExistingLine.length; i++) {\n result.push(this.distance(M, litsExistingLine[i]))\n }\n return result.some(x => x < minDimension && parseFloat(x.toFixed(15)) !== 0)\n }\n\n /**\n * Add a new line to the view with new name\n */\n addLine (P1 = this.addPoint()[0], P2 = this.addPoint()[0]) {\n const line = new GVLine(P1, P2)\n line.name = this.getNewName(line.type)\n this.geometric.push(line)\n return line\n }\n\n /**\n * Add a new Segment to the view with new name\n */\n addSegment (P1 = this.addPoint()[0], P2 = this.addPoint()[0]) {\n const segment = new GVSegment(P1, P2)\n this.geometric.push(segment)\n return segment\n }\n\n /**\n * Add a new circle center\n * @param {GVPoint} C\n * @param {GVPoint} P\n * @returns {GVCircle}\n */\n addCircle (C = this.addPoint()[0], X /** GVPoint | number */)/** GVCircle */ {\n const circle = new GVCircle(C, X)\n circle.name = this.getNewName(circle.type)\n this.geometric.push(circle)\n return circle\n }\n\n /**\n * Get the intersect point of a line and the bordure\n */\n getExtremPointGraphicLine (L/** GVLine */) {\n const x = [\n [L.getXPoint(this.ymin), this.ymin], // [xmin,xmax]\n [L.getXPoint(this.ymax), this.ymax] // [xmin,xmax]\n ]\n const y = [\n [this.xmin, L.getYPoint(this.xmin)], // [ymin,ymax]\n [this.xmax, L.getYPoint(this.xmax)] // [ymin,ymax]\n ]\n const extremites = []\n for (const u of x) {\n if (u.every(v => v !== undefined) && u[0] >= this.xmin && u[0] <= this.xmax) { extremites.push(u) }\n }\n for (const u of y) {\n if (u.every(v => v !== undefined) && u[1] >= this.ymin && u[1] <= this.ymax) { extremites.push(u) }\n }\n if (extremites.length === 2) {\n return [\n new GVPoint(new GVCartesian(extremites[0][0], extremites[0][1])),\n new GVPoint(new GVCartesian(extremites[1][0], extremites[1][1]))\n ]\n } else {\n return undefined\n }\n }\n\n /**\n * get a point between two points\n * @param {GVPoint} point1\n * @param {GVPoint} point2\n * @returns {GVPoint}\n */\n getNewPointBetween (A, B) {\n const k = Math.random()\n return new GVPoint(\n new GVCartesian(\n (A.x - B.x) * k + B.x,\n (A.y - B.y) * k + B.y\n )\n )\n }\n\n /**\n * Add point between two but not too close to extrems\n * @param {GVPoint} A\n * @param {GVPoint} B\n * @returns {GVPoint}\n */\n addPointBetween (A /** GVPoint */, B /** GVPoint */) /** GVPoint */ {\n const barycentricsCoords = listeEntiersSommeConnue(2, 100, 15)\n const P = barycentre([A, B], barycentricsCoords)\n P.name = P.name || this.getNewName(P.type)\n this.geometric.push(P)\n return P\n }\n\n addPointDistance (A /** GVPoint */, r /** number */) {\n let P /** GVPoint */\n const circle = new GVCircle(A, r)\n do {\n const theta = Math.random() * Math.PI * 2\n P = circle.getPoint(theta)\n } while (this.isCloseToExistingPoints(P) || this.isCloseToLineThroughtExistingPoints(P))\n P.name = this.getNewName(P.type)\n this.geometric.push(P)\n return P\n }\n\n addPointInPolygon (...args /** GVPoint[] */) {\n const barycentricsCoords = listeEntiersSommeConnue(args.length, 100, 20 * 3 / args.length)\n const P = barycentre(args, barycentricsCoords)\n P.name = P.name || this.getNewName(P.type)\n this.geometric.push(P)\n return P\n }\n\n addPointOutPolygon (...args /** GVPoint[] */) /** GVPoint */ {\n const barycentricsCoords = listeEntiersSommeConnue(args.length, 100, 20 * 3 / args.length)\n const aleaI = Math.round(Math.random() * (barycentricsCoords.length - 2))\n const P = new GVLine(args[aleaI], args[aleaI + 1]).getSymetric(barycentre(args, barycentricsCoords))\n P.name = P.name || this.getNewName(P.type)\n this.geometric.push(P)\n return P\n }\n\n addPointOnPolygon (...args /** GVPoint[] */) /** GVPoint */ {\n const barycentricsCoords = listeEntiersSommeConnue(2, 100, 20 * 3 / 2)\n const P = barycentre(circularPermutation(args).slice(0, 2), barycentricsCoords)\n P.name = P.name || this.getNewName(P.type)\n this.geometric.push(P)\n return P\n /*\n const barycentricsCoords = listeEntiersSommeConnue(args.length,100,20*3/args.length)\n barycentricsCoords[Math.round(Math.random()*(barycentricsCoords.length-2))] = 0\n const P = barycentre(args,barycentricsCoords)\n P.name = P.name || this.getNewName(P.type)\n this.geometric.push(P)\n return P\n */\n }\n\n placeLabelsPolygon (...args /** GVPoint[] */) {\n for (let i = 1; i < args.length + 1; i++) {\n const names = [args[args.length - 1]].concat(args).concat([args[0]])\n names[i].showName()\n names[i].labelPoints = [names[i - 1], names[i], names[i + 1]]\n }\n }\n\n addSymetric (X /** GVPoint | GVLine */, ...args /** GVPoint[] */) /** GVPoint[] */ {\n return args.map(x => {\n const P = X.getSymetric(x)\n P.name = P.name || this.getNewName(P.type)\n this.geometric.push(P)\n return P\n })\n }\n\n addTranslate (V/** GVVector */, ...args /** GVPoint[] */) /** GVPoint[] */ {\n return args.map(X => {\n const P = X.add(V)\n P.name = P.name || this.getNewName(P.type)\n this.geometric.push(P)\n return P\n })\n }\n\n move (V/** GVVetor */, ...args /** GVPoint[] */) {\n for (const X of args) {\n X.x = X.add(V).x\n X.y = X.add(V).y\n }\n }\n\n /**\n * Add three point, two point or one point aligned to others\n * @param {Point} P1 // If no point or one point we creat new points\n * @param {Point} P2 // If no point or one point we creat new points\n * @returns {GVPoint[]}\n */\n addPointAligned (P1 = this.addPoint()[0], P2 = this.addPoint()[0])/** GVPoint[] */ {\n let P3\n do {\n const line = new GVLine(P1, P2)\n const [X1, X2] = this.getExtremPointGraphicLine(line)\n P3 = this.getNewPointBetween(X1, X2)\n } while (this.isCloseToExistingPoints(P3) || this.isCloseToLineThroughtExistingPoints(P3))\n P3.name = P3.name || this.getNewName(P3.type)\n this.geometric.push(P3)\n return [P1, P2, P3]\n }\n\n /**\n * P1, P2, P3 with P2P1P3 rectangular in P1\n * @param args\n * @returns {GVPoint[]}\n */\n addRectPoint (...args) /** GVPoint[] */ {\n let P3, P1, P2\n do {\n if (P1 !== undefined) {\n for (let i = 0; i < 2 - args.length; i++) {\n this.geometric.pop()\n this.geometric.pop()\n }\n }\n [P1, P2] = args.concat(this.addPoint(2 - args.length))\n const line = (new GVLine(P1, P2)).getPerpendicularLine(P1)\n const [X1, X2] = this.getExtremPointGraphicLine(line)\n P3 = this.getNewPointBetween(X1, X2)\n } while (this.isCloseToExistingPoints(P3) || this.isCloseToLineThroughtExistingPoints(P3))\n P3.name = P3.name || this.getNewName(P3.type)\n this.geometric.push(P3)\n return [P1, P2, P3]\n }\n\n /**\n * Distances to the sides of a triangle\n * @param {GVPoint} P1\n * @param {GVPoint} P2\n * @param {GVPoint} P3\n * @returns {number}\n */\n distanceMinSidesVertices (P1 /** GVPoint */, P2 /** GVPoint */, P3 /** GVPoint */) /** number */ {\n // A faire pour n'importe quel nombre de sommets ?\n return Math.min(\n this.distance(P1, new GVLine(P2, P3)),\n this.distance(P2, new GVLine(P1, P3)),\n this.distance(P3, new GVLine(P1, P2))\n )\n }\n\n /**\n * Add three points not aligned or one not aligned with the two others\n * @param {GVPoint} P1 If no point we create three new points\n * @param {GVPoint} P2 If no point we create three new points\n * @param {GVPoint} P3 If no point we create three new points\n * @returns {GVPoint}\n */\n addNotAlignedPoint (P1 = this.addPoint()[0], P2 = this.addPoint()[0], P3 /** GVPoint */) /** GVPoint[] */ {\n // Le troisième point est écrasé si existant\n // Réfléchir à un ensemble plus grand de points non alignés\n const minDimension = Math.min(this.height, this.width) / this.getListObjectTypeSelect('Point').length / 3\n do {\n if (P3 !== undefined) this.geometric.pop()\n P3 = this.addPoint()[0]\n } while (this.distanceMinSidesVertices(P1, P2, P3) < minDimension)\n P3.name = P3.name || this.getNewName(P3.type)\n return [P1, P2, P3]\n }\n\n /**\n * Add a parallel line to another one or two parallel lines\n * @param {GVPoint} P If no args we create two parallels\n * @param {GVLine} line If no args we create two parallels\n * @returns {GVLine}\n */\n addParallelLine (P = this.addPoint()[0], line = this.addLine()) {\n const parallel = new GVLine(P, line.direction)\n parallel.name = this.getNewName(parallel.type)\n this.geometric.push(parallel, P, line)\n return [line, parallel]\n }\n\n addPerpendicularLine (P = this.addPoint()[0], line = this.addLine()) {\n const perpendicular = new GVLine(P, line.direction.getNormal())\n perpendicular.name = this.getNewName(perpendicular.type)\n this.geometric.push(perpendicular)\n return [line, perpendicular]\n }\n\n /**\n * Add the sides of a polygon\n * @param {...any} args\n * @returns {}\n */\n addSidesPolygon (...args)/** GVSegment[] */ {\n const sides = []\n for (let i = 0; i < args.length - 1; i++) {\n // sides.push(this.addSegment(args[i], args[i + 1]))\n sides.push(this.addSegment(args[i], args[i + 1]))\n }\n sides.push(this.addSegment(args[args.length - 1], args[0]))\n return sides\n }\n\n /**\n * Add labels to the vertices of a polygon.\n * @param {GVPoint[]} args\n */\n addLabelsPointsPolygon (...args) {\n const last = args.length - 1\n const vertices = [args[last]].concat(args).concat(args[0])\n for (let i = 1; i < args.length + 1; i++) {\n vertices[i].labelPoints = [vertices[i - 1], vertices[i], vertices[i + 1]]\n vertices[i].showName(1.3)\n }\n }\n\n addTriangle (arg1 /** number | GVPoint */, arg2 /** number | GVPoint */, arg3 /** number | GVPoint */, arg4 /** number */)/** GVTriangle */ {\n let triangle\n if (arg1 instanceof GVPoint && arg2 !== undefined && arg2 instanceof GVPoint && arg3 instanceof GVPoint) {\n triangle = new GVTriangle(arg1, arg2, arg3)\n } else if (arg1 instanceof GVPoint && arg2 instanceof GVPoint && arg3 instanceof GVPoint) {\n triangle = new GVTriangle(...this.addNotAlignedPoint(...[arg1, arg2, arg3].filter(P => P !== undefined)))\n } else if (arg1 instanceof GVPoint && typeof arg2 === 'number' && arg3 instanceof GVPoint && typeof arg4 === 'number') {\n const cercle1 = this.addCircle(arg1, arg2)\n const cercle2 = this.addCircle(arg3, arg4)\n const [P] = this.addIntersectLine(cercle1, cercle2)\n triangle = new GVTriangle(arg1, arg3, P)\n } else if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'number') {\n const A = this.addPoint()[0]\n const B = this.addPointDistance(A, arg1)\n const cercle1 = this.addCircle(A, arg2)\n const cercle2 = this.addCircle(B, arg3)\n const [C] = this.addIntersectLine(cercle1, cercle2)\n triangle = new GVTriangle(A, B, C)\n } else if (arg1 === undefined) {\n triangle = new GVTriangle(...this.addNotAlignedPoint())\n }\n return triangle\n }\n\n /**\n * Add a group of 4 points making a parallelogram\n * @param {GVPoint} A // 0-3 point\n * @param {GVPoint} B // 0-3 point\n * @param {GVPoint} C // 0-3 point\n * @returns {GVPolygon}\n */\n addParallelogram (A /** GVPoint */ = this.addPoint()[0], B /** GVPoint */ = this.addPoint()[0], C /** GVPoint */ = this.addNotAlignedPoint(A, B)[2], D = undefined)/** GVPolygon */ {\n D = new GVPoint(\n new GVCartesian(\n A.x + C.x - B.x,\n A.y + C.y - B.y\n )\n )\n D.name = D.name || this.getNewName(D.type)\n this.geometric.push(D)\n return new GVPolygon(A, B, C, D)\n }\n\n addRegularPolygon (n /** number */, A /** GVPoint */ = this.addPoint()[0], B /** GVPoint */ = this.addPoint()[0])/** GVPolygon */ {\n const points /** GVPoint[] */ = [A, B]\n for (let i = 2; i < n; i++) {\n const P = points[i - 2].getRotate(points[i - 1], Math.PI - 2 * Math.PI / n)\n P.name = P.name || this.getNewName(P.type)\n this.geometric.push(P)\n points.push(P)\n }\n return new GVPolygon(...points)\n }\n\n /**\n *\n * @param {GVPoint} A\n * @returns {GVRectangle}\n */\n addRectangle (A) {\n let rectangle/** GVRectangle */\n if (A == null) {\n do {\n if (rectangle !== undefined) {\n this.geometric.pop()\n this.geometric.pop()\n this.geometric.pop()\n this.geometric.pop()\n }\n const [A, B, D] = this.addRectPoint()\n const C = this.addParallelogram(D, A, B).vertices[3]\n rectangle = new GVRectangle(A, B, C, D)\n } while (rectangle.ratio < 1.2 || rectangle.ratio > 1.7)\n }\n return rectangle\n }\n\n addRegularPolygonCenter (A /** GVPoint */ = this.addPoint()[0], B /** GVPoint */ = this.addPoint()[0], n /** number */) /** GVPoint */ {\n const angle = Math.PI * (1 / 2 - 1 / n)\n const coeff = 1 / (2 * Math.sin(Math.PI / n))\n const P = new GVPoint(\n new GVCartesian(\n ((A.x - B.x) * Math.cos(angle) - (A.y - B.y) * Math.sin(angle)) * coeff + B.x,\n ((A.x - B.x) * Math.sin(angle) + (A.y - B.y) * Math.cos(angle)) * coeff + B.y\n ))\n P.name = P.name || this.getNewName(P.type)\n this.geometric.push(P)\n return P\n }\n\n addHomothetic (O /** GVPoint */, k /** number */, ...args /** GVPoint[] */) /** GVPoint[] */ {\n const homotheticPoints = []\n args.map(M => {\n const point = new GVPoint(\n new GVCartesian(\n k * M.x + (1 - k) * O.x,\n k * M.y + (1 - k) * O.y\n ))\n point.name = point.name || this.getNewName(point.type)\n this.geometric.push(point)\n homotheticPoints.push(point)\n return point\n })\n return homotheticPoints\n }\n\n /**\n * Add the angle ABC to the graphic view\n * @param {Point} A\n * @param {Point} B\n * @param {Point} C\n */\n addAngle (A /** GVPoint */, B /** GVPoint */, C /** GVPoint */) {\n const newAngle = new GVAngle(A, B, C)\n this.geometric.push(newAngle)\n return newAngle\n }\n\n addAnglesPolygon (...args /** GVPoint[] */)/** GVAngle[] */ {\n const last = args.length - 1\n const vertices = [args[last]].concat(args).concat(args[0])\n const angles/** GVAngle[] */ = []\n for (let i = 1; i < args.length + 1; i++) {\n const newAngle = new GVAngle(vertices[i - 1], vertices[i], vertices[i + 1])\n angles.push(newAngle)\n this.geometric.push(newAngle)\n }\n return angles\n }\n\n /**\n * Rotate points\n * @param {Point} center\n * @param {number} angle // Angle in radians\n * @param {Point} args\n * @returns {Point[]}\n * @example\n * this.addRotate(O, Math.PI()/2, B)\n */\n addRotate (center /** GVPoint */, angle /** number */, ...args /** GVPoint[] */) /** GVPoint[] */ {\n const rotatePoints = []\n args.map(M => {\n const point = new GVPoint(\n new GVCartesian(\n (M.x - center.x) * Math.cos(angle) - (M.y - center.y) * Math.sin(angle) + center.x,\n (M.x - center.x) * Math.sin(angle) + (M.y - center.y) * Math.cos(angle) + center.y\n ))\n point.name = point.name || this.getNewName(point.type)\n this.geometric.push(point)\n rotatePoints.push(point)\n return point\n })\n return rotatePoints\n }\n\n exportGGB (arg = this.geometric) {\n const ggb = []\n arg.forEach(x => {\n ggb.push(x.getGGB())\n })\n return ggb.join('\\n')\n }\n\n /**\n * Export to Mathalea2D\n * @returns {Mathalea2D}\n */\n getFigure (...args) {\n this.geometricExport = this.show(...args)\n return getMathalea2DExport(this)\n }\n}\n"],"names":["GVCoordinates","__publicField","GVPolar","GVCartesian","texNombre2","round","x","y","r","theta","GVGrandeur","name","value","precision","unit","newname","aleaName","GVGraphicObject","a","expression","simplify","calcul","parse","isConstantNode","add","max","subtract","n","abs","newUnit","thenumber","conversion","log10","circularPermutation","arg","getDimensions","figures","listePoints","listeXPoints","listeYPoints","fig","GVPoint","GVPolygon","xmin","xmax","ymin","ymax","quotient","s","p","k","GVSegment","GVLine","xmin1","ymin1","ymax1","ymin2","xmax2","ymax2","P1","P2","t","GVVector","V","P","arg1","arg2","coeff","point","O","angle","X","A","B","C","determinant","b","barycentre","scaleppc","label","splitname","nameFormat","P3","S","v1","v3","latexParCoordonnees","context","tracePoint","xy","dot","cross","directionUnit","L","delta","deltax","deltay","Y","i","accumulator","curr","GVCircle","GVAngle","vA","vB","vC","vBA","vBC","cos","scale","args","listXPoint","M","listYPoint","GVRectangle","dimensions","GVTriangle","getMathalea2DExport","graphic","clip","objs","drawClip","polygone","obj","points","segment","texteSurSegment","cercle","extrems","arcPointPointAngle","arrow","mathalea2d","listeEntiersSommeConnue","nbElements","total","valMin","liste","randomInt","j","GVGraphicView","names","group","step","lineX","lineY","listPoint","width","height","newheight","newwidth","deltaX","deltaY","typeSelect","nameA","nameB","list","nonUseLetter","indice","letter","_a","newPoints","cpt","line1","line2","d","h","x2","y2","x3","y3","x4","y4","listExistingPoints","maxDistance","litsExistingLine","numberOfObjects","result","minDimension","line","circle","extremites","u","v","barycentricsCoords","aleaI","X1","X2","parallel","perpendicular","sides","last","vertices","arg3","arg4","triangle","cercle1","cercle2","D","rectangle","homotheticPoints","newAngle","angles","center","rotatePoints","ggb"],"mappings":"wbAKO,MAAMA,CAAc,CAApB,cACLC,EAAA,SAAkB,GAClBA,EAAA,SAAkB,GAClBA,EAAA,SAAkB,GAClBA,EAAA,aAAsB,GACtB,yBAA8C,CAC5C,OAAI,gBAAgBC,EACX,IAAIC,EACT,KAAK,EAAI,KAAK,IAAI,KAAK,KAAK,EAC5B,KAAK,EAAI,KAAK,IAAI,KAAK,KAAK,CAC7B,EAEM,IAEV,CAED,qBAAqC,CACnC,OAAI,gBAAgBA,EACX,IAAID,EACT,KAAK,KAAK,KAAK,GAAK,EAAI,KAAK,GAAK,CAAC,EACnC,KAAK,KAAK,KAAK,EAAI,KAAK,CAAC,CAAC,EAErB,IAEV,CAED,QAAU,CACR,MAAO,IAAIE,EAAWC,EAAM,KAAK,EAAG,CAAC,CAAC,CAAC,MAAMD,EAAWC,EAAM,KAAK,EAAG,CAAC,CAAC,CAAC,IAAI,WAAW,IAAK,KAAK,EAAE,WAAW,QAAS,KAAK,CAC9H,CACH,CAIO,MAAMF,UAAoBH,CAAc,CAC7C,YAAaM,EAAiBC,EAAiB,CAC7C,MAAO,EACP,KAAK,EAAID,EACT,KAAK,EAAIC,CACV,CAED,QAAU,CACR,MAAO,IAAIH,EAAWC,EAAM,KAAK,EAAG,CAAC,CAAC,CAAC,MAAMD,EAAWC,EAAM,KAAK,EAAG,CAAC,CAAC,CAAC,IAAI,WAAW,IAAK,KAAK,EAAE,WAAW,QAAS,KAAK,CAC9H,CACH,CAIO,MAAMH,UAAgBF,CAAc,CACzC,YAAaQ,EAAiBC,EAAqB,CACjD,MAAO,EACP,KAAK,EAAID,EACT,KAAK,MAAQC,CACd,CAED,QAAU,CACR,MAAO,IAAIL,EAAWC,EAAM,KAAK,EAAG,CAAC,CAAC,CAAC,MAAMD,EAAWC,EAAM,KAAK,MAAO,CAAC,CAAC,CAAC,IAAI,WAAW,IAAK,KAAK,EAAE,WAAW,QAAS,KAAK,CAClI,CACH,CCrDO,MAAMK,CAAW,CAQtB,YAAaC,EAAgCC,EAAqBC,EAA0B,EAAGC,EAAqB,GAAI,CAPxHb,EAAA,cACAA,EAAA,kBACAA,EAAA,aACAA,EAAA,gBACAA,EAAA,qBACAA,EAAA,cACAA,EAAA,eAEE,KAAK,MAAQI,EAAMO,EAAOC,CAAS,EACnC,KAAK,UAAYA,EACjB,KAAK,KAAOC,EACZ,KAAK,QAAUT,EAAM,KAAK,MAAO,KAAK,SAAS,EAC/C,KAAK,KAAOM,CACb,CAED,IAAI,KAAMI,EAAmC,CACvC,OAAOA,GAAY,SACrB,KAAK,MAAQA,EAEb,KAAK,MAASC,EAASD,CAAO,EAAE,IAAIT,GAAKA,EAAE,IAAI,EAAG,KAAK,EAAE,EAE3D,KAAK,aAAe,MAAM,KAAK,IAAI,IAAIF,EAAW,KAAK,OAAO,EAAE,QAAQ,IAAK,KAAK,CAAC,IAAI,KAAK,KAAK,QAAQ,MAAO,UAAU,CAAC,KAAK,QAAQ,YAAa,UAAU,CAChK,CAED,IAAI,MAAQ,CAAE,OAAO,KAAK,KAAO,CACjC,QAAU,CACR,MAAO,IAAIA,EAAW,KAAK,OAAO,EAAE,QAAQ,IAAK,KAAK,CAAC,IAAI,KAAK,KAAK,QAAQ,MAAO,UAAU,CAAC,IAAI,QAAQ,YAAa,UAAU,CACnI,CAED,YAAaO,EAAyC,CACpD,KAAK,KAAOK,EAASL,EAAK,IAAIL,GACxBA,aAAaW,EACRX,EAAE,KAEFA,CAEV,EAAGK,EAAK,MAAM,EAAE,KAAK,EAAE,CACzB,CAED,SAAUO,EAAqB,CAC7B,MAAMC,EAAaC,EAAS,CAAC,KAAK,KAAMF,EAAE,IAAI,EAAE,OAAOZ,GAAKA,IAAM,EAAE,EAAE,KAAK,GAAG,EAAE,WAAW,IAAK,GAAG,EAAE,WAAW,IAAK,GAAG,CAAC,EAAE,SAAU,EAC/He,EAASC,EAAMR,EAAK,KAAK,QAAU,KAAK,IAAI,EAAE,SAASA,EAAKI,EAAE,QAAUA,EAAE,IAAI,CAAC,EAAE,UAAU,EAEjG,OAAO,IAAIR,EACTS,EAEA,WAAWI,EAAeF,CAAM,EAAIA,EAAO,WAAaA,EAAO,KAAK,CAAC,EAAE,SAAQ,CAAE,EACjF,KAAK,UAAYH,EAAE,UAEnBK,EAAeF,CAAM,EAAI,GAAKA,EAAO,KAAK,CAAC,EAAE,SAAU,CACxD,CACF,CAED,OAAQH,EAAqB,CAC3B,MAAMC,EAAaC,EAAS,CAAC,KAAK,KAAMF,EAAE,IAAI,EAAE,OAAOZ,GAAKA,IAAM,EAAE,EAAE,KAAK,GAAG,EAAE,WAAW,IAAK,GAAG,EAAE,WAAW,IAAK,GAAG,CAAC,EAAE,SAAU,EAC/He,EAASC,EAAMR,EAAK,KAAK,QAAU,KAAK,IAAI,EAAE,OAAOA,EAAKI,EAAE,QAAUA,EAAE,IAAI,CAAC,EAAE,UAAU,EAC/F,OAAO,IAAIR,EACTS,EAEA,WAAWI,EAAeF,CAAM,EAAIA,EAAO,WAAaA,EAAO,KAAK,CAAC,EAAE,SAAQ,CAAE,EACjF,KAAK,UAAYH,EAAE,UAEnBK,EAAeF,CAAM,EAAI,GAAKA,EAAO,KAAK,CAAC,EAAE,SAAU,CACxD,CACF,CAED,IAAKH,EAAqB,CACxB,MAAMC,EAAaC,EAAS,CAAC,KAAK,KAAMF,EAAE,IAAI,EAAE,OAAOZ,GAAKA,IAAM,EAAE,EAAE,KAAK,GAAG,EAAE,WAAW,IAAK,GAAG,EAAE,WAAW,IAAK,GAAG,CAAC,EAAE,SAAU,EAC/He,EAASC,EAAME,EAAIV,EAAK,KAAK,QAAU,KAAK,IAAI,EAAGA,EAAKI,EAAE,QAAUA,EAAE,IAAI,CAAC,EAAE,UAAU,EAC7F,OAAO,IAAIR,EACTS,EAEA,WAAWI,EAAeF,CAAM,EAAIA,EAAO,WAAaA,EAAO,KAAK,CAAC,EAAE,SAAQ,CAAE,EACjFI,EAAI,KAAK,UAAWP,EAAE,SAAS,EAE/BK,EAAeF,CAAM,EAAI,GAAKA,EAAO,KAAK,CAAC,EAAE,SAAU,CACxD,CACF,CAED,SAAUH,EAAqB,CAC7B,MAAMC,EAAaC,EAAS,CAAC,KAAK,KAAMF,EAAE,IAAI,EAAE,OAAOZ,GAAKA,IAAM,EAAE,EAAE,KAAK,GAAG,EAAE,WAAW,IAAK,GAAG,EAAE,WAAW,IAAK,GAAG,CAAC,EAAE,SAAU,EAC/He,EAASC,EAAMI,EAASZ,EAAK,KAAK,QAAU,KAAK,IAAI,EAAGA,EAAKI,EAAE,QAAUA,EAAE,IAAI,CAAC,EAAE,UAAU,EAClG,OAAO,IAAIR,EACTS,EAEA,WAAWI,EAAeF,CAAM,EAAIA,EAAO,WAAaA,EAAO,KAAK,CAAC,EAAE,SAAQ,CAAE,EACjFI,EAAI,KAAK,UAAWP,EAAE,SAAS,EAE/BK,EAAeF,CAAM,EAAI,GAAKA,EAAO,KAAK,CAAC,EAAE,SAAU,CACxD,CACF,CAED,WAAYH,EAAqB,CAC/B,OAAOA,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE,KAAM,CACxC,CAOD,IAAKS,EAAmC,CACtC,OAAO,IAAIjB,EAAW,KAAK,KAAO,KAAOiB,EAAI,IAAK,KAAK,IAAI,KAAK,QAASA,CAAC,EAAGA,EAAI,KAAK,UAAW,KAAK,KAAO,IAAMA,CAAC,CACrH,CAOD,MAA0B,CACxB,OAAO,IAAIjB,EAAW,UAAY,KAAK,KAAO,IAAK,KAAK,IAAI,KAAK,QAAS,EAAG,EAAG,KAAK,MAAM,GAAM,KAAK,SAAS,EAAG,IAAI,CACvH,CAED,KAAyB,CACvB,OAAO,IAAIA,EACT,KAAK,MACLkB,EAAI,KAAK,KAAK,EACd,KAAK,UACL,KAAK,IACN,CACF,CAED,KAAyB,CACvB,OAAO,IAAIlB,EACT,IAAM,KAAK,KACX,CAAC,KAAK,MACN,KAAK,UACL,KAAK,IACN,CACF,CAED,GAAImB,EAAyC,CAC3C,MAAMC,EAAYF,EAAId,EAAK,KAAK,MAAO,KAAK,IAAI,CAAC,EAC3CiB,EAAaH,EAAIE,EAAU,GAAGD,CAAO,CAAC,EAEtChB,EAAY,KAAK,IAAI,EAAG,KAAK,UAAYmB,EAAMV,EAAMS,EAAW,SAAU,CAAA,EAAE,KAAK,CAAC,EAAE,MAAQT,EAAMQ,EAAU,SAAU,CAAA,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAC5I,OAAO,IAAIpB,EACT,KAAK,KAELY,EAAMS,EAAW,SAAQ,CAAE,EAAE,KAAK,CAAC,EAAE,MACrClB,EACAgB,CACD,CACF,CACH,CCzJO,SAASI,EAAqBC,EAA2BP,EAAiB,KAAK,OAAQ,EAAGO,EAAI,OAAoB,CACvH,OAAI,OAAOA,GAAQ,WACjBA,EAAMA,EAAI,MAAM,EAAE,GAEpBP,EAAI,UAAUA,EAAIO,EAAI,QAAQ,UAAU,EACjCA,EAAI,OAAOA,CAAG,EAAE,OAAOP,EAAGO,EAAI,MAAM,CAC7C,CACO,SAASC,KAAkBC,EAAS,CACzC,MAAMC,EAAc,CAAE,EAChBC,EAAe,CAAE,EACjBC,EAAe,CAAE,EACvB,UAAWC,KAAOJ,EACZI,aAAeC,GACjBJ,EAAY,KAAKG,CAAG,EACpBF,EAAa,KAAKE,EAAI,CAAC,EACvBD,EAAa,KAAKC,EAAI,CAAC,GACdA,aAAeE,IACxBL,EAAY,KAAK,GAAGG,EAAI,QAAQ,EAChCF,EAAa,KAAKE,EAAI,cAAe,EAAC,CAAC,EAAGA,EAAI,gBAAgB,CAAC,CAAC,EAChED,EAAa,KAAKC,EAAI,cAAe,EAAC,CAAC,EAAGA,EAAI,gBAAgB,CAAC,CAAC,GAGpE,MAAMG,EAAO,KAAK,IAAI,GAAGL,CAAY,EAC/BM,EAAO,KAAK,IAAI,GAAGN,CAAY,EAC/BO,EAAO,KAAK,IAAI,GAAGN,CAAY,EAC/BO,EAAO,KAAK,IAAI,GAAGP,CAAY,EACrC,MAAO,CAACI,EAAME,EAAMD,EAAME,CAAI,CAChC,CAMO,SAASC,EAAUzC,EAAgBC,EAA6B,CACrE,OAAOD,EAAIA,EAAIC,CACjB,CACO,SAASI,GAAMqC,KAAMC,EAAG,CAC7B,OAAAA,EAAIA,EAAE,IAAI,CAAC3C,EAAG4C,IACR5C,aAAaI,EACR,OAAO,MAAMsC,EAAE,IAAIE,CAAC,CAAC,GAAK5C,EAAE,KAC1BA,aAAa6C,EACf,OAAO,MAAMH,EAAE,IAAIE,CAAC,CAAC,GAAK,GAAG5C,EAAE,IAAI,GACjCA,aAAa8C,EACf,OAAO,MAAMJ,EAAE,IAAIE,CAAC,CAAC,GAAK,GAAG5C,EAAE,IAAI,GACjCA,aAAamC,GAAWnC,aAAaoC,EACvC,OAAO,MAAMM,EAAE,IAAIE,CAAC,CAAC,GAAK,GAAG5C,EAAE,IAAI,GAEnC,OAAO,MAAM0C,EAAE,IAAIE,CAAC,CAAC,GAAK,GAAG5C,CAAC,EAExC,EACM2C,EAAE,KAAK,EAAE,EAAID,EAAE,IAAIA,EAAE,OAAS,CAAC,CACxC,CCvCO,MAAM/B,CAAgB,CAO3B,aAAe,CANfhB,EAAA,gBAEAA,EAAA,cAEAA,EAAA,aAAsB,SAGpB,KAAK,QAAU,GACf,KAAK,KAAO,EACb,CAED,YAAaU,EAA0C,CACrD,KAAK,KAAOK,EAASL,EAAK,IAAIL,GACxBA,aAAaW,EACRX,EAAE,KAEFA,CAEV,EAAGK,EAAK,MAAM,EAAE,KAAK,EAAE,CACzB,CAED,IAAI,KAAMI,EAAS,CACjB,KAAK,MAAQA,CACd,CAED,IAAI,MAAQ,CACV,OAAO,KAAK,KACb,CAED,QAAU,CACR,OAAO,KAAK,IACb,CAMD,aAAcqB,EAAiC,CAC7C,KAAM,CAACiB,EAAOC,EAAOC,CAAK,EAAIpB,EAAc,IAAI,EAC1C,CAAA,CAAGqB,EAAOC,EAAOC,CAAK,EAAIvB,EAAc,GAAGC,CAAO,EAClDuB,EAAK,IAAIlB,EAAQY,EAAOC,CAAK,EAC7BM,EAAK,IAAInB,EAAQgB,EAAOC,CAAK,EAC7BG,EAAI,IAAIC,EAASH,EAAIC,CAAE,EAC7B,KAAK,KAAKC,EAAE,IAAI,IAAIC,EAAS,EAAG,CAAC,CAAC,EAAE,IAAI,IAAIA,EAAS,GAAIJ,EAAQF,EAAQD,EAAQD,GAAS,CAAC,CAAC,CAAC,CAC9F,CAMD,KAAMS,EAAmB,CACvB,GAAI,gBAAgBtB,EAClB,KAAK,EAAI,KAAK,IAAIsB,CAAC,EAAE,EACrB,KAAK,EAAI,KAAK,IAAIA,CAAC,EAAE,UACZ,gBAAgBrB,EACzB,UAAWsB,KAAK,KAAK,SACnBA,EAAE,EAAIA,EAAE,IAAID,CAAC,EAAE,EACfC,EAAE,EAAIA,EAAE,IAAID,CAAC,EAAE,CAGpB,CACH,CAMO,MAAMtB,UAAgBxB,CAAgB,CA2B3C,YAAagD,EAAmCC,EAAqB,EAAG,CACtE,MAAO,EA3BTjE,EAAA,oBAEAA,EAAA,yBAEAA,EAAA,6BAEAA,EAAA,aAEAA,EAAA,UAEAA,EAAA,UAEAA,EAAA,UAEAA,EAAA,cAEAA,EAAA,YAEAA,EAAA,YAEAA,EAAA,oBAEAA,EAAA,aAAuB,IACvBA,EAAA,YA8BAA,EAAA,YAAO,SAAUkE,EAAO,CACtB,OAAO9D,EAAM,KAAK,EAAI8D,EAAO,CAAC,CAC/B,GAEDlE,EAAA,YAAO,SAAUkE,EAAO,CACtB,MAAO,CAAC9D,EAAM,KAAK,EAAI8D,EAAO,CAAC,CAChC,GA/BKF,aAAgBjE,EAClB,KAAK,YAAciE,EAEnB,KAAK,YAAc,IAAI9D,EAAY8D,EAAMC,CAAI,EAE/C,KAAK,iBAAmB,KAAK,oBAAqB,EAClD,KAAK,qBAAuB,KAAK,wBAAyB,EAC1D,KAAK,KAAO,GACZ,KAAK,KAAO,QACZ,KAAK,EAAI,KAAK,qBAAqB,EACnC,KAAK,EAAI,KAAK,qBAAqB,EACnC,KAAK,EAAI,KAAK,iBAAiB,EAC/B,KAAK,MAAQ,KAAK,iBAAiB,MACnC,KAAK,IAAM,GAAG,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,IAC9C,KAAK,IAAME,EAAM,KAAK,EAAG,KAAK,EAAG,GAAI,aAAa,CACnD,CAED,qBAAyC,CACvC,OAAO,KAAK,YAAY,oBAAqB,CAC9C,CAED,yBAA2B,CACzB,OAAO,KAAK,YAAY,wBAAyB,CAClD,CAUD,UAAWC,EAAkBC,EAAqB,CAChD,OAAO,IAAI7B,EACT,IAAItC,GACD,KAAK,EAAIkE,EAAE,GAAK,KAAK,IAAIC,CAAK,GAAK,KAAK,EAAID,EAAE,GAAK,KAAK,IAAIC,CAAK,EAAID,EAAE,GACvE,KAAK,EAAIA,EAAE,GAAK,KAAK,IAAIC,CAAK,GAAK,KAAK,EAAID,EAAE,GAAK,KAAK,IAAIC,CAAK,EAAID,EAAE,CAChF,CAAO,CACJ,CAOD,IAAKE,EAAG,CACN,OAAO,IAAI9B,EAAQ,IAAItC,EAAY,KAAK,EAAIoE,EAAE,EAAG,KAAK,EAAIA,EAAE,CAAC,CAAC,CAC/D,CAOD,IAAKA,EAAG,CACN,OAAO,IAAI9B,EAAQ,IAAItC,EAAY,KAAK,EAAIoE,EAAE,EAAG,KAAK,EAAIA,EAAE,CAAC,CAAC,CAC/D,CAOD,SAAUrB,EAAG,CACX,OAAO,IAAIT,EAAQ,IAAItC,EAAY,KAAK,EAAI+C,EAAG,KAAK,EAAIA,CAAC,CAAC,CAC3D,CAOD,OAAQA,EAAG,CACT,GAAIA,IAAM,EAAG,OAAO,IAAIT,EAAQ,IAAItC,EAAY,KAAK,EAAI+C,EAAG,KAAK,EAAIA,CAAC,CAAC,CACxE,CASD,uBAAwBsB,EAAGC,EAAGC,EAAG,CAC/B,MAAMxD,EAAIyD,EAAYF,EAAE,IAAI,IAAI,EAAGC,EAAE,IAAI,IAAI,CAAC,EACxCE,EAAID,EAAYD,EAAE,IAAI,IAAI,EAAGF,EAAE,IAAI,IAAI,CAAC,EACxC,EAAIG,EAAYH,EAAE,IAAI,IAAI,EAAGC,EAAE,IAAI,IAAI,CAAC,EAC9C,MAAO,CAACvD,EAAG0D,EAAG,CAAC,CAChB,CASD,aAAcJ,EAAkBC,EAAkBC,EAAiC,CACjF,OAAO,KAAK,IAAI,GAAG,KAAK,uBAAuBF,EAAGC,EAAGC,CAAC,CAAC,EAAI,GAAK,KAAK,IAAI,GAAG,KAAK,uBAAuBF,EAAGC,EAAGC,CAAC,CAAC,EAAI,CACrH,CAOD,YAAaV,EAAG,CACd,OAAOa,EAAW,CAAC,KAAMb,CAAC,EAAG,CAAC,EAAG,EAAE,CAAC,CACrC,CAQD,cAAeK,EAAGnB,EAAG,CACnB,OAAO,IAAIT,EACT,IAAItC,EACF+C,EAAI,KAAK,GAAK,EAAIA,GAAKmB,EAAE,EACzBnB,EAAI,KAAK,GAAK,EAAIA,GAAKmB,EAAE,CACjC,CAAO,CACJ,CAMD,WAAa,CACX,OAAO,IAAIP,EAAS,KAAK,EAAG,KAAK,CAAC,CACnC,CAMD,QAAU,CACR,YAAK,IAAM,GAAG,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,IACvC,GAAG,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,GAC3C,CAED,SAAUgB,EAAyB,EAAiB,CAClD,IAAIC,EAEJ,MAAMC,EAAY,KAAK,KAAK,MAAM,GAAG,EAC/BC,EAAaD,EAAU,SAAW,EAAIA,EAAU,CAAC,EAAI,GAAGA,EAAU,CAAC,CAAC,KAAKA,EAAU,CAAC,CAAC,IAC3F,GAAI,KAAK,cAAgB,OAAW,CAClC,MAAMrB,EAAK,KAAK,YAAY,CAAC,EACvBuB,EAAK,KAAK,YAAY,CAAC,EACvBC,EAAI,KAAK,YAAY,CAAC,EACtBC,EAAKzB,EAAG,IAAIwB,CAAC,EAAE,UAAW,EAAC,UAAW,EACtCE,EAAKH,EAAG,IAAIC,CAAC,EAAE,UAAW,EAAC,UAAW,EAC5C,IAAInB,EACAoB,EAAG,SAASC,CAAE,EAChBrB,EAAImB,EAAE,IAAIC,EAAG,UAAS,EAAG,SAASN,EAAW,EAAG,CAAC,EAEjDd,EAAImB,EAAE,YAAYA,EAAE,IAAIC,EAAG,IAAIC,CAAE,EAAE,UAAS,EAAG,SAASP,EAAW,EAAG,CAAC,CAAC,EAE1EC,EAAQO,EAAoBL,EAAYjB,EAAE,EAAGA,EAAE,EAAG,QAAS,EAAG,EAAG,GAAI,CAAC,EAEtE,KAAK,YAAc,CAACL,EAAIwB,EAAGD,CAAE,CACnC,MACMH,EAAQO,EAAoBL,EAAY,KAAK,EAAG,KAAK,EAAI,GAAMH,EAAU,QAAS,EAAG,EAAG,GAAI,CAAC,EAE/F,YAAK,MAAQ,GACNC,CACR,CAED,SAAW,CACT,MAAMC,EAAY,KAAK,KAAK,MAAM,GAAG,EACrC,IAAIC,EAAaD,EAAU,SAAW,EAAIA,EAAU,CAAC,EAAI,GAAGA,EAAU,CAAC,CAAC,KAAKA,EAAU,CAAC,CAAC,IACzF,OAAIO,EAAQ,SAAQN,EAAa,IAAIA,CAAU,KAC/C,KAAK,IAAMO,GAAWpB,EAAM,KAAK,EAAG,KAAK,EAAGa,EAAY,OAAO,CAAC,EACzD,IACR,CAED,IAAI,KAAMlE,EAAS,CACjB,KAAK,MAAQA,EACb,KAAK,IAAM,GAAG,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,GAC/C,CAED,IAAI,MAAQ,CACV,OAAO,KAAK,KACb,CACH,CAQO,MAAM+C,CAAS,CAMpB,YAAaG,EAA8BC,EAA8B,CALzEjE,EAAA,SAAkB,GAClBA,EAAA,SAAkB,GAClBA,EAAA,cAIM,OAAOgE,GAAS,UAAY,OAAOC,GAAS,UAC9C,KAAK,EAAID,EACT,KAAK,EAAIC,GACAD,aAAgBxB,GAAWyB,aAAgBzB,IACpD,KAAK,EAAIyB,EAAK,EAAID,EAAK,EACvB,KAAK,EAAIC,EAAK,EAAID,EAAK,GAEzB,KAAK,MAAQ,KAAK,KAAK,KAAK,GAAK,EAAI,KAAK,GAAK,CAAC,CACjD,CAMD,WAAa,CACX,MAAMwB,EAAK,KAAK,KAAK,KAAK,GAAK,EAAI,KAAK,GAAK,CAAC,EAC9C,OAAO,IAAI3B,EAAS,KAAK,EAAI2B,EAAI,KAAK,EAAIA,CAAE,CAC7C,CAMD,WAAa,CACX,OAAO,IAAI3B,EAAS,CAAC,KAAK,EAAG,KAAK,CAAC,CACpC,CAOD,IAAKS,EAAG,CACN,OAAO,IAAIT,EAAS,KAAK,EAAIS,EAAE,EAAG,KAAK,EAAIA,EAAE,CAAC,CAC/C,CAOD,IAAKA,EAAG,CACN,OAAO,IAAIT,EAAS,KAAK,EAAIS,EAAE,EAAG,KAAK,EAAIA,EAAE,CAAC,CAC/C,CAOD,SAAUrB,EAAG,CACX,OAAO,IAAIY,EAAS,KAAK,EAAIZ,EAAG,KAAK,EAAIA,CAAC,CAC3C,CAMD,KAAO,CACL,OAAO,IAAIY,EAAS,CAAC,KAAK,EAAG,CAAC,KAAK,CAAC,CACrC,CAOD,IAAKS,EAAG,CACN,OAAOmB,GAAI,CAAC,KAAK,EAAG,KAAK,CAAC,EAAG,CAACnB,EAAE,EAAGA,EAAE,CAAC,CAAC,CACxC,CAOD,MAAOA,EAAG,CACR,OAAOoB,EAAM,CAAC,KAAK,EAAG,KAAK,EAAG,CAAC,EAAG,CAACpB,EAAE,EAAGA,EAAE,EAAG,CAAC,CAAC,CAChD,CAOD,SAAUR,EAAG,CACX,OAAO,WAAW4B,EAAM,CAAC,KAAK,EAAG,KAAK,EAAG,CAAC,EAAG,CAAC5B,EAAE,EAAGA,EAAE,EAAG,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAM,CACjF,CACH,CAcO,MAAMX,UAAenC,CAAgB,CAW1C,YAAauD,EAAGC,EAAG,CACjB,MAAO,EAXTxE,EAAA,kBACAA,EAAA,UACAA,EAAA,UACAA,EAAA,aACAA,EAAA,SAAI,GACJA,EAAA,SAAI,GACJA,EAAA,SAAI,GACJA,EAAA,YAKE,KAAK,UAAYwE,aAAaX,EAAWW,EAAI,IAAIX,EAASW,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAID,EAAE,CAAC,EAC9E,KAAK,EAAIA,EACT,KAAK,EAAIC,aAAahC,EAAUgC,EAAI,IAAIhC,EAAQ,IAAItC,EAAYqE,EAAE,EAAIC,EAAE,EAAGD,EAAE,EAAIC,EAAE,CAAC,CAAC,EACrF,KAAK,YAAa,EAClB,KAAK,KAAO,OACZ,KAAK,IAAM,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC,MAAM,KAAK,CAAC,GAC3D,CAOD,UAAWnE,EAAG,CACZ,OAAO,KAAK,IAAM,EAAI,QAAa,KAAK,EAAI,KAAK,EAAIA,GAAK,KAAK,CAChE,CAOD,UAAWC,EAAG,CACZ,OAAO,KAAK,IAAM,EAAI,QAAa,KAAK,EAAI,KAAK,EAAIA,GAAK,KAAK,CAChE,CAKD,aAAe,CACb,MAAMqF,EAAgB,KAAK,UAAU,UAAW,EAChD,KAAK,EAAI,CAACA,EAAc,EACxB,KAAK,EAAIA,EAAc,EACvB,KAAK,EAAI,KAAK,EAAI,KAAK,EAAE,EAAI,KAAK,EAAI,KAAK,EAAE,CAC9C,CAOD,aAAcC,EAAG,CACf,MAAMC,EAAQD,EAAE,EAAI,KAAK,EAAI,KAAK,EAAIA,EAAE,EACxC,GAAIC,EAAM,QAAQ,EAAE,IAAM,IAAK,CAC7B,MAAMC,EAAS,EAAEF,EAAE,EAAI,KAAK,EAAI,KAAK,EAAIA,EAAE,GACrCG,EAASH,EAAE,EAAI,KAAK,EAAI,KAAK,EAAIA,EAAE,EAEzC,OADc,IAAIpD,EAAQ,IAAItC,EAAY4F,EAASD,EAAOE,EAASF,CAAK,CAAC,CAE1E,CACF,CAOD,qBAAsB9B,EAAG,CACvB,OAAO,IAAIZ,EAAOY,EAAG,KAAK,UAAU,UAAS,CAAE,CAChD,CAOD,YAAaA,EAAG,CACd,OAAOa,EAAW,CAAC,KAAK,aAAa,KAAK,qBAAqBb,CAAC,CAAC,EAAGA,CAAC,EAAG,CAAC,EAAG,EAAE,CAAC,CAChF,CAMD,IAAI,KAAMjD,EAAS,CACjB,KAAK,MAAQA,EACb,KAAK,IAAM,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC,MAAM,KAAK,CAAC,GAC3D,CAMD,IAAI,MAAQ,CACV,OAAO,KAAK,KACb,CACH,CAQO,SAAS4D,EAAaJ,EAAG0B,EAAG,CACjC,OAAO1B,EAAE,EAAI0B,EAAE,EAAI1B,EAAE,EAAI0B,EAAE,CAC7B,CAQO,SAASpB,EAAYb,EAAoB9C,EAAkC,CAChF,GAAI,MAAM,QAAQ8C,CAAC,GAAK,MAAM,QAAQ9C,CAAC,GAAK8C,EAAE,SAAW9C,EAAE,OAEzD,OADuB8C,EAAE,IAAI,CAAC1D,EAAG4F,IAAM5F,EAAE,SAASY,EAAEgF,CAAC,CAAC,CAAC,EACjC,OAAO,CAACC,EAAaC,IAASD,EAAY,IAAIC,CAAI,CAAC,EAAE,OAAOlF,EAAE,OAAO,CAACiF,EAAaC,IAASD,EAAcC,CAAI,CAAC,EAErI,OAAO,OAAO,mDAAoD,CAAE,OAAQpC,EAAG,aAAc9C,EAAG,CAEpG,CAaO,MAAMiC,UAAkBC,CAAO,CAMpC,YAAaoB,EAAGC,EAAG,CACjB,MAAMD,EAAGC,CAAC,EANZxE,EAAA,cACAA,EAAA,YAAO,IACPA,EAAA,iBAAY,SACZA,EAAA,cAAS,IAIP,KAAK,KAAO,UACZ,KAAK,EAAIuE,EACT,KAAK,EAAIC,EACT,KAAK,SAAS,KAAK,EAAG,KAAK,CAAC,EAC5B,KAAK,YAAa,CACnB,CAMD,WAAa,CACX,IAAIM,EACJ,MAAMf,EAAI,IAAIvB,GAAS,KAAK,EAAE,EAAI,KAAK,EAAE,GAAK,GAAI,KAAK,EAAE,EAAI,KAAK,EAAE,GAAK,CAAC,EAC1E,OAAI8C,EAAQ,OACVR,EAAQO,EAAoB,KAAK,KAAMtB,EAAE,EAAGA,EAAE,EAAG,QAAS,EAAG,EAAG,EAAE,EAElEe,EAAQO,EAAoB,KAAK,KAAMtB,EAAE,EAAGA,EAAE,EAAG,QAAS,EAAG,EAAG,EAAE,EAEpE,KAAK,MAAQ,GACNe,CACR,CACH,CAUO,MAAMsB,UAAiBpF,CAAgB,CAQ5C,YAAauD,EAAGC,EAAG,CACjB,MAAO,EARTxE,EAAA,UACAA,EAAA,UACAA,EAAA,aACAA,EAAA,SAAI,GACJA,EAAA,SAAI,GACJA,EAAA,SAAI,GAIF,KAAK,KAAO,SACZ,KAAK,EAAIuE,EACT,KAAK,EAAIC,aAAahC,EAAUgC,EAAID,EACpC,KAAK,EAAIC,aAAahC,EAAU,KAAK,MAAM+B,EAAE,EAAIC,EAAE,IAAM,GAAKD,EAAE,EAAIC,EAAE,IAAM,CAAC,EAAIA,CAClF,CAOD,SAAUhE,EAAO,CACf,OAAO,IAAIgC,EACT,IAAItC,EACF,KAAK,EAAE,EAAI,KAAK,EAAI,KAAK,IAAIM,CAAK,EAClC,KAAK,EAAE,EAAI,KAAK,EAAI,KAAK,IAAIA,CAAK,CACnC,CACF,CACF,CACH,CAkBO,MAAM6F,UAAgBrF,CAAgB,CAc3C,YAAauD,EAAGC,EAAGC,EAAG,CACpB,MAAO,EAdTzE,EAAA,UACAA,EAAA,UACAA,EAAA,UACAA,EAAA,cACAA,EAAA,aACAA,EAAA,eACAA,EAAA,YACAA,EAAA,YACAA,EAAA,aAAQ,IACRA,EAAA,iBAAY,QACZA,EAAA,mBAAc,IACdA,EAAA,aAAQ,IAIN,KAAK,KAAO,QACZ,MAAMsG,EAAK,IAAIzC,EAASU,EAAE,EAAGA,EAAE,CAAC,EAC1BgC,EAAK,IAAI1C,EAASW,EAAE,EAAGA,EAAE,CAAC,EAC1BgC,EAAK,IAAI3C,EAASY,EAAE,EAAGA,EAAE,CAAC,EAC1BgC,EAAMH,EAAG,IAAIC,CAAE,EAAE,UAAW,EAC5BG,EAAMF,EAAG,IAAID,CAAE,EAAE,UAAW,EAClC,KAAK,IAAME,EACX,KAAK,IAAMC,EACX,MAAMC,EAAMF,EAAI,EAAIC,EAAI,EAAID,EAAI,EAAIC,EAAI,EACxC,KAAK,MAAQ,KAAK,KAAKC,CAAG,EAC1B,KAAK,EAAInC,EAAE,IAAIiC,CAAG,EAClB,KAAK,EAAIjC,EACT,KAAK,EAAIA,EAAE,IAAIkC,CAAG,EAClB,KAAK,OAAShB,EAAM,CAACe,EAAI,EAAGA,EAAI,EAAG,CAAC,EAAG,CAACC,EAAI,EAAGA,EAAI,EAAG,CAAC,CAAC,EAAE,CAAC,EAAI,CAChE,CAMD,MAAOE,EAAO,CACZ,MAAMH,EAAM,KAAK,IAAI,SAASG,CAAK,EAC7BF,EAAM,KAAK,IAAI,SAASE,CAAK,EACnC,KAAK,EAAI,KAAK,EAAE,IAAIH,CAAG,EACvB,KAAK,EAAI,KAAK,EAAE,IAAIC,CAAG,CACxB,CACH,CAQO,MAAMjE,UAAkBzB,CAAgB,CAG7C,eAAgB6F,EAAuB,CACrC,MAAO,EAHT7G,EAAA,kBAA4B,IAI1B,KAAK,SAA4B6G,EACjC,KAAK,KAAO7E,EAAoB6E,EAAK,IAAIxG,GAAKA,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,CAC/D,CAMD,eAAiB,CACf,MAAMyG,EAAa,KAAK,SAAS,IAAIC,GAAKA,EAAE,CAAC,EACvCC,EAAa,KAAK,SAAS,IAAID,GAAKA,EAAE,CAAC,EACvCrE,EAAO,KAAK,IAAI,GAAGoE,CAAU,EAC7BnE,EAAO,KAAK,IAAI,GAAGmE,CAAU,EAC7BlE,EAAO,KAAK,IAAI,GAAGoE,CAAU,EAC7BnE,EAAO,KAAK,IAAI,GAAGmE,CAAU,EACnC,MAAO,CAACtE,EAAME,EAAMD,EAAME,CAAI,CAC/B,CACH,CASO,MAAMoE,WAAoBxE,CAAU,CAIzC,eAAgBoE,EAAuB,CACrC,MAAM,GAAGA,CAAI,EAJf7G,EAAA,iBACAA,EAAA,gBACAA,EAAA,cAGE,KAAM,CAACuE,EAAGC,EAAGC,CAAC,EAAIoC,EACZK,EAAa,CAAC,KAAK,MAAM3C,EAAE,EAAIC,EAAE,IAAM,GAAKD,EAAE,EAAIC,EAAE,IAAM,CAAC,EAAG,KAAK,MAAMC,EAAE,EAAID,EAAE,IAAM,GAAKC,EAAE,EAAID,EAAE,IAAM,CAAC,CAAC,EAAE,KAAM,EAC1H,KAAK,QAAU0C,EAAW,CAAC,EAC3B,KAAK,SAAWA,EAAW,CAAC,EAC5B,KAAK,MAAQ,KAAK,SAAW,KAAK,OACnC,CACH,CAMO,MAAMC,UAAmB1E,CAAU,CACxC,eAAgBoE,EAAuB,CACrC,MAAM,GAAGA,CAAI,CACd,CACH,CC5tBO,SAASO,GAAqBC,EAA8B,CAC7DA,EAAQ,aAAaA,EAAQ,OAAQ,EACzC,MAAMxC,EAAW,IAAMwC,EAAQ,KAAO,IAChCC,EAAO,CAAE,KAAMD,EAAQ,KAAOxC,EAAU,KAAMwC,EAAQ,KAAOxC,EAAU,KAAMwC,EAAQ,KAAOxC,EAAU,KAAMwC,EAAQ,KAAOxC,CAAU,EAGrI0C,EAAO,CAAE,EAEf,GAAIF,EAAQ,YAAa,CACvB,MAAMG,EAAWC,GACftD,EAAMmD,EAAK,KAAMA,EAAK,KAAM,GAAI,OAAO,EACvCnD,EAAMmD,EAAK,KAAMA,EAAK,KAAM,GAAI,OAAO,EACvCnD,EAAMmD,EAAK,KAAMA,EAAK,KAAM,GAAI,OAAO,EACvCnD,EAAMmD,EAAK,KAAMA,EAAK,KAAM,GAAI,OAAO,CACxC,EACGE,GAAY,MAAMD,EAAK,KAAKC,CAAQ,CACzC,CAED,UAAWE,KAAOL,EAAQ,gBAAgB,OAAOhH,GAAKA,EAAE,OAAO,EAC7D,GAAIqH,aAAelF,GAEjB,GADIkF,EAAI,KAAO,MAAMH,EAAK,KAAKG,EAAI,GAAG,EAClCA,EAAI,MAAO,CACb,MAAM5C,EAAQ4C,EAAI,SAAS7C,CAAQ,EAC/BC,GAAS,MAAMyC,EAAK,KAAKzC,CAAK,CACnC,UACQ4C,aAAevE,GAAU,EAAEuE,aAAexE,GAAY,CAE/D,MAAMyE,EAASN,EAAQ,0BAA0BK,CAAG,EAChDC,GAAU,MAAQ,MAAM,QAAQA,CAAM,GAAGJ,EAAK,KAAKK,EAAQD,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAGD,EAAI,OAAS,OAAO,CAAC,CAChH,SAAeA,aAAexE,GAQxB,GAPIwE,EAAI,GAAK,MAAQA,EAAI,GAAK,MAC5BH,EAAK,KAAKK,EAAQF,EAAI,EAAGA,EAAI,EAAGA,EAAI,OAAS,OAAO,CAAC,EAEnDA,EAAI,OACQA,EAAI,UAAU7C,CAAQ,GACvB,MAAM0C,EAAK,KAAM,EAE5BG,EAAI,OAAS,IACXA,EAAI,EAAE,KAAO,MAAQA,EAAI,EAAE,KAAO,KAAM,CAC1C,MAAMC,EAASD,EAAI,OAAS,CAACA,EAAI,EAAE,IAAKA,EAAI,EAAE,GAAG,EAAI,CAACA,EAAI,EAAE,IAAKA,EAAI,EAAE,GAAG,EAC1EH,EAAK,KAAKM,GAAgBH,EAAI,KAAMC,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAGD,EAAI,WAAa,QAAS,GAAM7C,CAAQ,CAAC,CACpG,UAEM6C,aAAetB,EACpBsB,EAAI,EAAE,KAAO,MAAQA,EAAI,EAAI,GAC/BH,EAAK,KAAKO,GAAOJ,EAAI,EAAE,IAAKA,EAAI,CAAC,CAAC,UAE3BA,aAAerB,GACxB,GAAI,KAAK,IAAIqB,EAAI,KAAK,EAAE,QAAQ,EAAE,KAAO,KAAK,GAAK,GAAG,QAAQ,EAAE,GAAKA,EAAI,MAAO,CAC9E,MAAMhE,EAAKgE,EAAI,EACTzC,EAAKyC,EAAI,EACTxC,EAAIwC,EAAI,EACd,GAAIhE,aAAclB,GAAWyC,aAAczC,GAAW0C,aAAa1C,EAAS,CAC1E,MAAM2C,EAAKzB,EAAG,IAAIwB,CAAC,EAAE,UAAW,EAAC,UAAW,EAAC,SAASL,EAAW,EAAG,EAC9DO,EAAKH,EAAG,IAAIC,CAAC,EAAE,UAAW,EAAC,UAAW,EAAC,SAASL,EAAW,EAAG,EAC9Dd,EAAImB,EAAE,IAAIC,EAAG,IAAIC,CAAE,CAAC,EAC1BrB,EAAE,QAAS,EACXwD,EAAK,KAAK,GAAGF,EAAQ,gBAAgBnC,EAAGA,EAAE,IAAIC,CAAE,EAAGpB,EAAGmB,EAAE,IAAIE,CAAE,CAAC,EAAE,IAAI,GAAKwC,EAAQ,EAAE,EAAG,EAAE,EAAGF,EAAI,KAAK,CAAC,CAAC,CACxG,CACT,SAAiBA,aAAejF,EACpBiF,EAAI,YACNA,EAAI,SAAS,QAAQ3D,GAAK,CACpBA,aAAavB,GACf+E,EAAK,KAAKxD,EAAE,SAASc,CAAQ,CAAC,CAE5C,CAAW,UAMH6C,EAAI,MAAM7C,CAAQ,EACd6C,EAAI,EAAE,KAAO,MAAQA,EAAI,EAAE,KAAO,KAAM,CAC1C,MAAMK,EAAUL,EAAI,OAAS,CAACA,EAAI,EAAE,IAAKA,EAAI,EAAE,GAAG,EAAI,CAACA,EAAI,EAAE,IAAKA,EAAI,EAAE,GAAG,EAC3EH,EAAK,KAAKS,GAAmB,GAAGD,EAASL,EAAI,MAAQ,KAAK,GAAK,IAAKA,EAAI,YAAc,OAASA,EAAI,MAAQ,GAAMA,EAAI,WAAa,OAAQA,EAAI,OAAS,QAASA,EAAI,aAAe,CAAC,CAAC,CACtL,OAGCA,GAAO,MAAMH,EAAK,KAAKG,CAAG,EAGlC,UAAWA,KAAOL,EAAQ,KAAM,CAC9B,MAAMM,EAASN,EAAQ,0BAA0BK,CAAG,EAChDC,IAAW,QAAWJ,EAAK,KAAKK,EAAQ,GAAGD,EAAQD,EAAI,OAAS,OAAO,CAAC,CAC7E,CACD,UAAWA,KAAOL,EAAQ,KAAM,CAC9B,MAAMM,EAASN,EAAQ,0BAA0BK,CAAG,EACpD,GAAI,MAAM,QAAQC,CAAM,GAAKA,EAAO,QAAU,EAAG,CAC/C,MAAMM,EAAQL,EAAQ,GAAGD,EAAQD,EAAI,OAAS,OAAO,EACrDO,EAAM,gBAAkB,KACxBV,EAAK,KAAKU,CAAK,CAChB,CACF,CACD,OAAOC,GAAW,OAAO,OAAO,CAAE,EAAE,CAAE,UAAW,GAAO,YAAab,EAAQ,IAAK,MAAOA,EAAQ,MAAQ,IAAOC,CAAI,EAAGC,CAAI,CAC7H,CCpFO,SAASY,EAAyBC,EAAYC,EAAOC,EAAS,EAAG,CACtE,MAAMC,EAAQ,CAAE,EAChBA,EAAM,KAAKC,EAAUF,EAAQD,GAASD,EAAa,GAAKE,EAAS,CAAC,CAAC,EACnE,QAASG,EAAI,EAAGA,EAAIL,EAAa,EAAGK,IAClCF,EAAM,KAAKC,EAAUD,EAAME,EAAI,CAAC,EAAIH,EAAQD,GAASD,EAAaK,EAAI,GAAKH,EAAS,CAAC,CAAC,EAExFC,EAAM,KAAKF,CAAK,EAChB,QAASI,EAAIL,EAAa,EAAGK,EAAI,EAAGA,IAClCF,EAAME,CAAC,EAAIF,EAAME,CAAC,EAAIF,EAAME,EAAI,CAAC,EAEnC,OAAOF,CACT,CAMO,MAAMG,EAAc,CAqBzB,YAAahG,EAAqB,EAAGE,EAAqB,EAAGD,EAAqB,GAAIE,EAAqB,GAAI,CApB/G7C,EAAA,cACAA,EAAA,YACAA,EAAA,cACAA,EAAA,kBACAA,EAAA,wBACAA,EAAA,aACAA,EAAA,aACAA,EAAA,YAAqB,GACrBA,EAAA,YAAqB,GACrBA,EAAA,YAAqB,IACrBA,EAAA,YAAqB,IACrBA,EAAA,cACAA,EAAA,eACAA,EAAA,cACAA,EAAA,mBAA6B,IAC7BA,EAAA,iBAA2B,IAC3BA,EAAA,mBAA6B,IAC7BA,EAAA,sBAAgC,IAChCA,EAAA,aAAsB,KACtBA,EAAA,kBAA4B,IAE1B,KAAK,cAAc0C,EAAME,EAAMD,EAAME,CAAI,EACzC,KAAK,MAAQ9B,EAAS,yBAAyB,MAAM,EAAE,CAAC,EACxD,KAAK,IAAM,GACX,KAAK,MAAQ,EACb,KAAK,UAAY,CAAE,EACnB,KAAK,KAAO,CAAE,EACd,KAAK,KAAO,CAAE,CACf,CAED,IAAI,UAAW4H,EAAkC,CAC3C,OAAOA,GAAU,WAAU,KAAK,MAAQ5H,EAAS4H,CAAK,GACtDA,IAAU,KAAO,KAAK,MAAQ,yBAAyB,MAAM,EAAE,EACpE,CAED,IAAI,WAAa,CACf,OAAO,KAAK,KACb,CAED,cAAejG,EAAO,GAAIE,EAAO,GAAID,EAAO,EAAGE,EAAO,EAAG,CACvD,KAAK,KAAOH,EACZ,KAAK,KAAOE,EACZ,KAAK,KAAOD,EACZ,KAAK,KAAOE,EACZ,KAAK,MAAQ,KAAK,KAAO,KAAK,KAC9B,KAAK,OAAS,KAAK,KAAO,KAAK,KAC/B,KAAK,MAAQ,KAAK,OAAS,KAAK,KACjC,CAOD,QAASgE,EAA0D,CACjE,MAAM+B,EAAQ,CAAE,EAChB,OAAA/B,EAAK,QAAQxG,GAAK,CACZ,MAAM,QAAQA,CAAC,EACjBuI,EAAM,KAAK,GAAGvI,CAAC,EACNA,aAAaoC,GACtBmG,EAAM,KAAK,GAAGvI,EAAE,QAAQ,EACxBuI,EAAM,KAAK,GAAG,KAAK,gBAAgB,GAAGvI,EAAE,QAAQ,CAAC,EACjD,KAAK,uBAAuB,GAAGA,EAAE,QAAQ,GAEzCuI,EAAM,KAAKvI,CAAC,CAEpB,CAAK,EACDuI,EAAM,QAAQvI,GAAK,CAAEA,EAAE,QAAU,GAAM,EAChCuI,CACR,CAED,QAASC,EAAqB,EAAG,CAC/B,QAAS5C,EAAI,KAAK,KAAMA,EAAInD,EAAS,KAAK,MAAO+F,CAAI,EAAG5C,IAAK,CAC3D,MAAM6C,EAAQ,IAAI3F,EAAO,IAAIX,EAAQyD,EAAG,CAAC,EAAG,IAAIpC,EAAS,EAAG,CAAC,CAAC,EAC9DiF,EAAM,MAAQ,OACd,KAAK,KAAK,KAAKA,CAAK,CACrB,CACD,QAAS7C,EAAI,KAAK,KAAMA,EAAInD,EAAS,KAAK,OAAQ+F,CAAI,EAAG5C,IAAK,CAC5D,MAAM8C,EAAQ,IAAI5F,EAAO,IAAIX,EAAQ,EAAGyD,CAAC,EAAG,IAAIpC,EAAS,EAAG,CAAC,CAAC,EAC9DkF,EAAM,MAAQ,OACd,KAAK,KAAK,KAAKA,CAAK,CACrB,CACF,CAED,SAAW,CACT,MAAMD,EAAQ,IAAI3F,EAAO,IAAIX,EAAQ,EAAG,CAAC,EAAG,IAAIqB,EAAS,EAAG,CAAC,CAAC,EAC9D,KAAK,KAAK,KAAKiF,CAAK,EACpB,MAAMC,EAAQ,IAAI5F,EAAO,IAAIX,EAAQ,EAAG,CAAC,EAAG,IAAIqB,EAAS,EAAG,CAAC,CAAC,EAC9D,KAAK,KAAK,KAAKkF,CAAK,CACrB,CAED,iBAAkBR,EAAwE,CACxF,MAAMS,EAAY,KAAK,wBAAwB,QAAST,CAAK,EACvDzB,EAAakC,EAAU,IAAK1E,GAA2BA,EAAE,CAAG,EAC5D0C,EAAagC,EAAU,IAAKhD,GAA2BA,EAAE,CAAG,EAC5DtD,EAAO,KAAK,IAAI,GAAGoE,CAAU,EAC7BnE,EAAO,KAAK,IAAI,GAAGmE,CAAU,EAC7BlE,EAAO,KAAK,IAAI,GAAGoE,CAAU,EAC7BnE,EAAO,KAAK,IAAI,GAAGmE,CAAU,EACnC,MAAO,CAACtE,EAAME,EAAMD,EAAME,CAAI,CAC/B,CAED,YAAa0F,EAA+C,CAC1D,KAAM,CAAC7F,EAAI,CAAIC,CAAI,EAAI,KAAK,cAAc,GAAG4F,CAAK,EAClD,OAAO5F,EAAOD,CACf,CAED,aAAc6F,EAA+C,CAC3D,KAAM,CAAA,CAAG3F,EAAI,CAAIC,CAAI,EAAI,KAAK,cAAc,GAAG0F,CAAK,EACpD,OAAO1F,EAAOD,CACf,CAED,gBAAiB2F,EAAgD,CAC/D,MAAMnG,EAAc,KAAK,wBAAwB,QAASmG,CAAK,EAC/D,OAAO,KAAK,wBAAwB,QAASA,CAAK,EAAE,KAAK,CAACtH,EAAG0D,IAAMA,EAAE,EAAI1D,EAAE,CAAC,EAAEmB,EAAY,OAAS,CAAC,CACrG,CAED,gBAAiBmG,EAAgD,CAE/D,OAAO,KAAK,wBAAwB,QAASA,CAAK,EAAE,KAAK,CAACtH,EAAG0D,IAAMA,EAAE,EAAI1D,EAAE,CAAC,EAAE,CAAC,CAChF,CAED,gBAAiBsH,EAAgD,CAC/D,MAAMnG,EAAc,KAAK,wBAAwB,QAASmG,CAAK,EAC/D,OAAO,KAAK,wBAAwB,QAASA,CAAK,EAAE,KAAK,CAACtH,EAAG0D,IAAMA,EAAE,EAAI1D,EAAE,CAAC,EAAEmB,EAAY,OAAS,CAAC,CACrG,CAED,iBAAkBmG,EAAgD,CAEhE,OADoB,KAAK,wBAAwB,QAASA,CAAK,EAC5C,KAAK,CAACtH,EAAG0D,IAAMA,EAAE,EAAI1D,EAAE,CAAC,EAAE,CAAC,CAC/C,CAMD,QAAU,CAER,KAAM,CAACyB,EAAME,EAAMD,EAAME,CAAI,EAAI,KAAK,cAAe,EAC/C,CAACoG,EAAOC,CAAM,EAAI,CAACvG,EAAOD,EAAMG,EAAOD,CAAI,EAEjD,IAAIuG,EAAY,EAAID,EAChBE,EAAW,EAAIH,EAGnB,MAAMhG,EADQiG,EAASD,EACL,KAAK,MAEnB,KAAK,UACHhG,EAAI,EACNkG,EAAYD,EAASjG,EAErBmG,EAAWH,EAAQhG,EAGrB,KAAK,MAAQkG,EAAYC,EAI3B,KAAK,IAAM,KAAK,IAAM,KAAK,OAASD,EACpC,KAAK,MAAQ,KAAK,MAAQ,KAAK,OAASA,EACxC,MAAME,GAAUD,EAAWH,GAAS,EAC9BK,GAAUH,EAAYD,GAAU,EACtC,KAAK,cAAcxG,EAAO2G,EAAQzG,EAAO0G,EAAQ3G,EAAO0G,EAAQxG,EAAOyG,CAAM,CAC9E,CAKD,wBAAyBC,EAAa,QAAShB,EAAkC,KAAK,UAAqB,CAEzG,OADIA,EAAM,SAAW,IAAGA,EAAQ,KAAK,WAC7BgB,EAAU,CAChB,IAAK,QACH,OAAOhB,EAAM,OAAOb,GAAOA,aAAelF,CAAO,EAAE,KACjD,CAACvB,EAAG0D,IAAM,CACR,MAAM6E,EAAQvI,EAAE,KAAK,MAAM,GAAG,EACxBwI,EAAQ9E,EAAE,KAAK,MAAM,GAAG,EAC9B,OAAI6E,EAAM,CAAC,IAAMC,EAAM,CAAC,EACf,SAASD,EAAM,CAAC,CAAC,EAAI,SAASC,EAAM,CAAC,CAAC,EAErC,OAAQD,EAAM,CAAC,EAAIC,EAAM,CAAC,EAAI,EAAI,EAE7C,CACF,EACH,QACE,OAAO,KAAK,UAAU,OAAO/B,GAAO,EAAEA,aAAelF,EAAQ,EAAE,KAC7D,CAACvB,EAAG0D,IAAM,CACR,MAAM6E,EAAQvI,EAAE,KAAK,MAAM,GAAG,EACxBwI,EAAQ9E,EAAE,KAAK,MAAM,GAAG,EAC9B,OAAI6E,EAAM,CAAC,IAAMC,EAAM,CAAC,EACf,SAASD,EAAM,CAAC,CAAC,EAAI,SAASC,EAAM,CAAC,CAAC,EAErC,OAAQD,EAAM,CAAC,EAAIC,EAAM,CAAC,EAAI,EAAI,EAE7C,CACF,CACJ,CACF,CAKD,mBAAoBF,EAAa,QAAS,CACxC,OAAQA,EAAU,CAChB,IAAK,QAAS,CACZ,MAAMG,EAAO,KAAK,wBAAwB,OAAO,EACjD,IAAIC,EACA1D,EAAI,EACR,EAAG,CACD,MAAM2D,EAAS3D,IAAM,EAAI,GAAK,IAAIA,CAAC,GACnC0D,EAAe,KAAK,MAAM,KACxBE,GAAU,OAAA,QAAAC,EAAAJ,EAAK,OAAOrJ,GAAKA,EAAE,KAAK,CAAC,IAAMwJ,CAAM,EAAE,KAC/CnC,GAAOA,EAAI,OAASmC,EAASD,CAC3C,IAFsB,YAAAE,EAEP,QAASD,EAASD,EAAM,EACzBD,IAAiB,SAAWA,GAAgBC,GAChD3D,GAAK,CACf,OAAiB0D,IAAiB,QAC1B,OAAOA,CACR,CACD,IAAK,UACL,IAAK,SACL,IAAK,OAAQ,CACX,MAAMD,EAAO,KAAK,wBAAwB,SAAS,EAAE,OAAO,KAAK,wBAAwB,MAAM,CAAC,EAChG,IAAIC,EACA1D,EAAI,EACR,EAAG,CACD,MAAM2D,EAAS3D,IAAM,EAAI,GAAK,IAAIA,CAAC,GACnC0D,EAAe,KAAK,MAAM,KACxBE,UAAU,QAAAC,EAAAJ,EAAK,OAAOrJ,GAAKA,EAAE,KAAK,CAAC,IAAMwJ,EAAO,YAAW,CAAE,EAAE,KAC7DnC,GAAOA,EAAI,OAASmC,EAAO,YAAa,EAAGD,CAC5C,IAFS,YAAAE,EAEP,QAASD,EAAO,YAAW,EAAKD,EAAM,EACvCD,IAAiB,SAAWA,EAAeA,EAAa,YAAa,EAAGC,GAC5E3D,GAAK,CACf,OAAiB0D,IAAiB,QAC1B,OAAOA,CAER,CACF,CACF,CAKD,WAAYJ,EAAa,QAAS,CAChC,OAAQA,EAAU,CAChB,IAAK,QACH,OAAO,KAAK,mBAAmBA,CAAU,EAC3C,IAAK,UACL,IAAK,SACL,IAAK,OACH,OAAO,KAAK,mBAAmBA,CAAU,CAC5C,CACF,CAED,kBAAmB1C,EAAgC,CACjD,MAAM8B,EAAQ5H,EAAS8F,EAAK,MAAM,EAClCA,EAAK,QAAQ,CAACxG,EAAG4F,IAAM,CAAE5F,EAAE,KAAOsI,EAAM1C,CAAC,EAAG,CAC7C,CASD,SAAUvE,EAAkB,EAAGmH,EAAqC,CAElE,MAAMkB,EAAY,CAAE,EACpB,QAAS9D,EAAI,EAAGA,EAAIvE,EAAGuE,IAAK,CAC1B,IAAIyB,EACAsC,EAAM,EACV,GACEA,GAAO,EACPtC,EAAM,IAAIlF,EACR,IAAItC,EACF2I,IAAS,OAAY,KAAK,OAAQ,EAAG,KAAK,MAAQ,KAAK,KAAO/F,EAAS,KAAK,SAAW,KAAK,MAAQ,KAAK,KAAM+F,CAAI,EACnHA,IAAS,OAAY,KAAK,OAAQ,EAAG,KAAK,OAAS,KAAK,KAAO/F,EAAS,KAAK,SAAW,KAAK,OAAS,KAAK,KAAM+F,CAAI,CACtH,CACF,QACMmB,EAAM,KAAK,QAAU,KAAK,wBAAwBtC,CAAG,GAAK,KAAK,oCAAoCA,CAAG,IAC/GA,EAAI,KAAO,KAAK,WAAWA,EAAI,IAAI,EAC/B,KAAK,iBACPA,EAAI,QAAS,EACbA,EAAI,SAAU,GAEhB,KAAK,UAAU,KAAKA,CAAG,EACvBqC,EAAU,KAAKrC,CAAG,CACnB,CACD,OAAOqC,CACR,CAKD,iBAAkBE,EAA+BC,EAA+B,CAC9E,GAAID,aAAiB9G,GAAU+G,aAAiB/G,EAAQ,CACtD,MAAM0C,EAAQoE,EAAM,EAAIC,EAAM,EAAIA,EAAM,EAAID,EAAM,EAClD,GAAIpE,EAAM,QAAQ,EAAE,IAAM,IAAK,CAC7B,MAAMC,EAAS,EAAEmE,EAAM,EAAIC,EAAM,EAAIA,EAAM,EAAID,EAAM,GAC/ClE,EAASkE,EAAM,EAAIC,EAAM,EAAIA,EAAM,EAAID,EAAM,EAC7C9F,EAAQ,IAAI3B,EAAQ,IAAItC,EAAY4F,EAASD,EAAOE,EAASF,CAAK,CAAC,EACzE,OAAA1B,EAAM,KAAO,KAAK,WAAWA,EAAM,IAAI,EACvC,KAAK,UAAU,KAAKA,CAAK,EAClB,CAACA,CAAK,CACd,CACF,SAAU8F,aAAiB7D,GAAY8D,aAAiB9D,EAAU,CACjE,MAAM+D,EAAI,KAAK,SAASF,EAAM,EAAGC,EAAM,CAAC,EACxC,GAAIC,EAAIF,EAAM,EAAIC,EAAM,GAAKC,EAAK,KAAK,IAAIF,EAAM,EAAIC,EAAM,CAAC,EAC1D,MAAO,CAAE,EACJ,CACL,MAAMjJ,GAAKgJ,EAAM,GAAK,EAAIC,EAAM,GAAK,EAAIC,GAAK,IAAM,EAAIA,GAClDC,EAAI,KAAK,KAAKH,EAAM,GAAK,EAAIhJ,GAAK,CAAC,EACnCoJ,EAAKJ,EAAM,EAAE,EAAIhJ,GAAKiJ,EAAM,EAAE,EAAID,EAAM,EAAE,GAAKE,EAC/CG,EAAKL,EAAM,EAAE,EAAIhJ,GAAKiJ,EAAM,EAAE,EAAID,EAAM,EAAE,GAAKE,EAC/CI,EAAKF,EAAKD,GAAKF,EAAM,EAAE,EAAID,EAAM,EAAE,GAAKE,EACxCK,EAAKF,EAAKF,GAAKF,EAAM,EAAE,EAAID,EAAM,EAAE,GAAKE,EACxCzG,EAAK,IAAIlB,EAAQ,IAAItC,EAAYqK,EAAIC,CAAE,CAAC,EACxCC,EAAKJ,EAAKD,GAAKF,EAAM,EAAE,EAAID,EAAM,EAAE,GAAKE,EACxCO,EAAKJ,EAAKF,GAAKF,EAAM,EAAE,EAAID,EAAM,EAAE,GAAKE,EACxCxG,EAAK,IAAInB,EAAQ,IAAItC,EAAYuK,EAAIC,CAAE,CAAC,EAC9C,OAAAhH,EAAG,KAAOA,EAAG,MAAQ,KAAK,WAAWA,EAAG,IAAI,EAC5CC,EAAG,KAAOA,EAAG,MAAQ,KAAK,WAAWA,EAAG,IAAI,EAC5C,KAAK,UAAU,KAAKD,EAAIC,CAAE,EACnB,CAACD,EAAIC,CAAE,CACf,CACF,CACF,CAKD,KAAMV,EAAkB,KAAM,CAC5B,MAAMP,EAAOO,GAAK,KAAK,MAAQ,KAAK,KAAO,KAAK,MAAQ,IAAM,KAAK,KAAO,KAAK,MAAQ,EACjFN,EAAOM,GAAK,KAAK,MAAQ,KAAK,KAAO,KAAK,MAAQ,IAAM,KAAK,KAAO,KAAK,MAAQ,EACjFL,EAAOK,GAAK,KAAK,MAAQ,KAAK,KAAO,KAAK,MAAQ,IAAM,KAAK,KAAO,KAAK,MAAQ,EACjFJ,EAAOI,GAAK,KAAK,MAAQ,KAAK,KAAO,KAAK,MAAQ,IAAM,KAAK,KAAO,KAAK,MAAQ,EACvF,KAAK,cAAcP,EAAME,EAAMD,EAAME,CAAI,CAC1C,CAKD,SAAUkB,EAAkBiC,EAA2B,CACrD,OAAIA,aAAaxD,EACR,KAAK,MAAMuB,EAAE,EAAIiC,EAAE,IAAM,GAAKjC,EAAE,EAAIiC,EAAE,IAAM,CAAC,EAE7C,KAAK,IAAIA,EAAE,EAAIjC,EAAE,EAAIiC,EAAE,EAAIjC,EAAE,EAAIiC,EAAE,CAAC,EAAI,KAAK,KAAKA,EAAE,GAAK,EAAIA,EAAE,GAAK,CAAC,CAE/E,CAKD,wBAAyBe,EAAkB,CACzC,MAAM4D,EAAqB,KAAK,wBAAwB,OAAO,EACzDC,EAAc,KAAK,IAAI,KAAK,OAAQ,KAAK,KAAK,EAAID,EAAmB,OAAS,EACpF,OAAIA,EAAmB,OAAS,EAAYA,EAAmB,KAAKrG,GAAK,KAAK,SAASA,EAAGyC,CAAC,EAAI6D,CAAW,EACnG,EACR,CAKD,oCAAqC7D,EAAkB,CACrD,MAAM4D,EAAqB,KAAK,wBAAwB,OAAO,EACzDE,EAAmB,KAAK,wBAAwB,MAAM,EAEtDC,EAAkBH,EAAmB,OAASE,EAAiB,OAC/DE,EAAS,CAAE,EACXC,EAAe,KAAK,IAAI,KAAK,OAAQ,KAAK,KAAK,EAAIF,EAAkB,EAC3E,QAAS7E,EAAI,EAAGA,EAAI0E,EAAmB,OAAQ1E,IAC7C,QAASwC,EAAIxC,EAAI,EAAGwC,EAAIkC,EAAmB,OAAQlC,IAAK,CACtD,MAAM0B,EAAI,IAAIhH,EAAOwH,EAAmB1E,CAAC,EAAG0E,EAAmBlC,CAAC,CAAC,EACjEsC,EAAO,KAAK,KAAK,SAAShE,EAAGoD,CAAC,CAAC,CAChC,CAEH,QAASlE,EAAI,EAAGA,EAAI4E,EAAiB,OAAQ5E,IAC3C8E,EAAO,KAAK,KAAK,SAAShE,EAAG8D,EAAiB5E,CAAC,CAAC,CAAC,EAEnD,OAAO8E,EAAO,KAAK1K,GAAKA,EAAI2K,GAAgB,WAAW3K,EAAE,QAAQ,EAAE,CAAC,IAAM,CAAC,CAC5E,CAKD,QAASqD,EAAK,KAAK,SAAQ,EAAG,CAAC,EAAGC,EAAK,KAAK,SAAU,EAAC,CAAC,EAAG,CACzD,MAAMsH,EAAO,IAAI9H,EAAOO,EAAIC,CAAE,EAC9B,OAAAsH,EAAK,KAAO,KAAK,WAAWA,EAAK,IAAI,EACrC,KAAK,UAAU,KAAKA,CAAI,EACjBA,CACR,CAKD,WAAYvH,EAAK,KAAK,SAAQ,EAAG,CAAC,EAAGC,EAAK,KAAK,SAAU,EAAC,CAAC,EAAG,CAC5D,MAAMiE,EAAU,IAAI1E,EAAUQ,EAAIC,CAAE,EACpC,YAAK,UAAU,KAAKiE,CAAO,EACpBA,CACR,CAQD,UAAWnD,EAAI,KAAK,SAAQ,EAAG,CAAC,EAAGH,EAA0C,CAC3E,MAAM4G,EAAS,IAAI9E,EAAS3B,EAAGH,CAAC,EAChC,OAAA4G,EAAO,KAAO,KAAK,WAAWA,EAAO,IAAI,EACzC,KAAK,UAAU,KAAKA,CAAM,EACnBA,CACR,CAKD,0BAA2BtF,EAAgB,CACzC,MAAMvF,EAAI,CACR,CAACuF,EAAE,UAAU,KAAK,IAAI,EAAG,KAAK,IAAI,EAClC,CAACA,EAAE,UAAU,KAAK,IAAI,EAAG,KAAK,IAAI,CACnC,EACKtF,EAAI,CACR,CAAC,KAAK,KAAMsF,EAAE,UAAU,KAAK,IAAI,CAAC,EAClC,CAAC,KAAK,KAAMA,EAAE,UAAU,KAAK,IAAI,CAAC,CACnC,EACKuF,EAAa,CAAE,EACrB,UAAWC,KAAK/K,EACV+K,EAAE,MAAMC,GAAKA,IAAM,MAAS,GAAKD,EAAE,CAAC,GAAK,KAAK,MAAQA,EAAE,CAAC,GAAK,KAAK,MAAQD,EAAW,KAAKC,CAAC,EAElG,UAAWA,KAAK9K,EACV8K,EAAE,MAAMC,GAAKA,IAAM,MAAS,GAAKD,EAAE,CAAC,GAAK,KAAK,MAAQA,EAAE,CAAC,GAAK,KAAK,MAAQD,EAAW,KAAKC,CAAC,EAElG,GAAID,EAAW,SAAW,EACxB,MAAO,CACL,IAAI3I,EAAQ,IAAItC,EAAYiL,EAAW,CAAC,EAAE,CAAC,EAAGA,EAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAC/D,IAAI3I,EAAQ,IAAItC,EAAYiL,EAAW,CAAC,EAAE,CAAC,EAAGA,EAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAChE,CAIJ,CAQD,mBAAoB5G,EAAGC,EAAG,CACxB,MAAMvB,EAAI,KAAK,OAAQ,EACvB,OAAO,IAAIT,EACT,IAAItC,GACDqE,EAAE,EAAIC,EAAE,GAAKvB,EAAIuB,EAAE,GACnBD,EAAE,EAAIC,EAAE,GAAKvB,EAAIuB,EAAE,CACrB,CACF,CACF,CAQD,gBAAiBD,EAAkBC,EAAiC,CAClE,MAAM8G,EAAqBnD,EAAwB,EAAG,IAAK,EAAE,EACvDpE,EAAIa,EAAW,CAACL,EAAGC,CAAC,EAAG8G,CAAkB,EAC/C,OAAAvH,EAAE,KAAOA,EAAE,MAAQ,KAAK,WAAWA,EAAE,IAAI,EACzC,KAAK,UAAU,KAAKA,CAAC,EACdA,CACR,CAED,iBAAkBQ,EAAkBhE,EAAiB,CACnD,IAAIwD,EACJ,MAAMmH,EAAS,IAAI9E,EAAS7B,EAAGhE,CAAC,EAChC,EAAG,CACD,MAAMC,EAAQ,KAAK,OAAQ,EAAG,KAAK,GAAK,EACxCuD,EAAImH,EAAO,SAAS1K,CAAK,CAC/B,OAAa,KAAK,wBAAwBuD,CAAC,GAAK,KAAK,oCAAoCA,CAAC,GACtF,OAAAA,EAAE,KAAO,KAAK,WAAWA,EAAE,IAAI,EAC/B,KAAK,UAAU,KAAKA,CAAC,EACdA,CACR,CAED,qBAAsB8C,EAAuB,CAC3C,MAAMyE,EAAqBnD,EAAwBtB,EAAK,OAAQ,IAAK,GAASA,EAAK,MAAM,EACnF9C,EAAIa,EAAWiC,EAAMyE,CAAkB,EAC7C,OAAAvH,EAAE,KAAOA,EAAE,MAAQ,KAAK,WAAWA,EAAE,IAAI,EACzC,KAAK,UAAU,KAAKA,CAAC,EACdA,CACR,CAED,sBAAuB8C,EAAsC,CAC3D,MAAMyE,EAAqBnD,EAAwBtB,EAAK,OAAQ,IAAK,GAASA,EAAK,MAAM,EACnF0E,EAAQ,KAAK,MAAM,KAAK,OAAM,GAAMD,EAAmB,OAAS,EAAE,EAClEvH,EAAI,IAAIZ,EAAO0D,EAAK0E,CAAK,EAAG1E,EAAK0E,EAAQ,CAAC,CAAC,EAAE,YAAY3G,EAAWiC,EAAMyE,CAAkB,CAAC,EACnG,OAAAvH,EAAE,KAAOA,EAAE,MAAQ,KAAK,WAAWA,EAAE,IAAI,EACzC,KAAK,UAAU,KAAKA,CAAC,EACdA,CACR,CAED,qBAAsB8C,EAAsC,CAC1D,MAAMyE,EAAqBnD,EAAwB,EAAG,IAAK,EAAU,EAC/DpE,EAAIa,EAAW5C,EAAoB6E,CAAI,EAAE,MAAM,EAAG,CAAC,EAAGyE,CAAkB,EAC9E,OAAAvH,EAAE,KAAOA,EAAE,MAAQ,KAAK,WAAWA,EAAE,IAAI,EACzC,KAAK,UAAU,KAAKA,CAAC,EACdA,CASR,CAED,sBAAuB8C,EAAuB,CAC5C,QAASZ,EAAI,EAAGA,EAAIY,EAAK,OAAS,EAAGZ,IAAK,CACxC,MAAM0C,EAAQ,CAAC9B,EAAKA,EAAK,OAAS,CAAC,CAAC,EAAE,OAAOA,CAAI,EAAE,OAAO,CAACA,EAAK,CAAC,CAAC,CAAC,EACnE8B,EAAM1C,CAAC,EAAE,SAAU,EACnB0C,EAAM1C,CAAC,EAAE,YAAc,CAAC0C,EAAM1C,EAAI,CAAC,EAAG0C,EAAM1C,CAAC,EAAG0C,EAAM1C,EAAI,CAAC,CAAC,CAC7D,CACF,CAED,YAAa3B,KAA8BuC,EAAwC,CACjF,OAAOA,EAAK,IAAIxG,GAAK,CACnB,MAAM0D,EAAIO,EAAE,YAAYjE,CAAC,EACzB,OAAA0D,EAAE,KAAOA,EAAE,MAAQ,KAAK,WAAWA,EAAE,IAAI,EACzC,KAAK,UAAU,KAAKA,CAAC,EACdA,CACb,CAAK,CACF,CAED,aAAcD,KAAqB+C,EAAwC,CACzE,OAAOA,EAAK,IAAIvC,GAAK,CACnB,MAAMP,EAAIO,EAAE,IAAIR,CAAC,EACjB,OAAAC,EAAE,KAAOA,EAAE,MAAQ,KAAK,WAAWA,EAAE,IAAI,EACzC,KAAK,UAAU,KAAKA,CAAC,EACdA,CACb,CAAK,CACF,CAED,KAAMD,KAAoB+C,EAAuB,CAC/C,UAAWvC,KAAKuC,EACdvC,EAAE,EAAIA,EAAE,IAAIR,CAAC,EAAE,EACfQ,EAAE,EAAIA,EAAE,IAAIR,CAAC,EAAE,CAElB,CAQD,gBAAiBJ,EAAK,KAAK,SAAQ,EAAG,CAAC,EAAGC,EAAK,KAAK,SAAU,EAAC,CAAC,EAAmB,CACjF,IAAIsB,EACJ,EAAG,CACD,MAAMgG,EAAO,IAAI9H,EAAOO,EAAIC,CAAE,EACxB,CAAC6H,EAAIC,CAAE,EAAI,KAAK,0BAA0BR,CAAI,EACpDhG,EAAK,KAAK,mBAAmBuG,EAAIC,CAAE,CACzC,OAAa,KAAK,wBAAwBxG,CAAE,GAAK,KAAK,oCAAoCA,CAAE,GACxF,OAAAA,EAAG,KAAOA,EAAG,MAAQ,KAAK,WAAWA,EAAG,IAAI,EAC5C,KAAK,UAAU,KAAKA,CAAE,EACf,CAACvB,EAAIC,EAAIsB,CAAE,CACnB,CAOD,gBAAiB4B,EAAuB,CACtC,IAAI5B,EAAIvB,EAAIC,EACZ,EAAG,CACD,GAAID,IAAO,OACT,QAASuC,EAAI,EAAGA,EAAI,EAAIY,EAAK,OAAQZ,IACnC,KAAK,UAAU,IAAK,EACpB,KAAK,UAAU,IAAK,EAGxB,CAACvC,EAAIC,CAAE,EAAIkD,EAAK,OAAO,KAAK,SAAS,EAAIA,EAAK,MAAM,CAAC,EACrD,MAAMoE,EAAQ,IAAI9H,EAAOO,EAAIC,CAAE,EAAG,qBAAqBD,CAAE,EACnD,CAAC8H,EAAIC,CAAE,EAAI,KAAK,0BAA0BR,CAAI,EACpDhG,EAAK,KAAK,mBAAmBuG,EAAIC,CAAE,CACzC,OAAa,KAAK,wBAAwBxG,CAAE,GAAK,KAAK,oCAAoCA,CAAE,GACxF,OAAAA,EAAG,KAAOA,EAAG,MAAQ,KAAK,WAAWA,EAAG,IAAI,EAC5C,KAAK,UAAU,KAAKA,CAAE,EACf,CAACvB,EAAIC,EAAIsB,CAAE,CACnB,CASD,yBAA0BvB,EAAmBC,EAAmBsB,EAAiC,CAE/F,OAAO,KAAK,IACV,KAAK,SAASvB,EAAI,IAAIP,EAAOQ,EAAIsB,CAAE,CAAC,EACpC,KAAK,SAAStB,EAAI,IAAIR,EAAOO,EAAIuB,CAAE,CAAC,EACpC,KAAK,SAASA,EAAI,IAAI9B,EAAOO,EAAIC,CAAE,CAAC,CACrC,CACF,CASD,mBAAoBD,EAAK,KAAK,SAAU,EAAC,CAAC,EAAGC,EAAK,KAAK,SAAQ,EAAG,CAAC,EAAGsB,EAAoC,CAGxG,MAAM+F,EAAe,KAAK,IAAI,KAAK,OAAQ,KAAK,KAAK,EAAI,KAAK,wBAAwB,OAAO,EAAE,OAAS,EACxG,GACM/F,IAAO,QAAW,KAAK,UAAU,IAAK,EAC1CA,EAAK,KAAK,SAAU,EAAC,CAAC,QACf,KAAK,yBAAyBvB,EAAIC,EAAIsB,CAAE,EAAI+F,GACrD,OAAA/F,EAAG,KAAOA,EAAG,MAAQ,KAAK,WAAWA,EAAG,IAAI,EACrC,CAACvB,EAAIC,EAAIsB,CAAE,CACnB,CAQD,gBAAiBlB,EAAI,KAAK,SAAQ,EAAG,CAAC,EAAGkH,EAAO,KAAK,UAAW,CAC9D,MAAMS,EAAW,IAAIvI,EAAOY,EAAGkH,EAAK,SAAS,EAC7C,OAAAS,EAAS,KAAO,KAAK,WAAWA,EAAS,IAAI,EAC7C,KAAK,UAAU,KAAKA,EAAU3H,EAAGkH,CAAI,EAC9B,CAACA,EAAMS,CAAQ,CACvB,CAED,qBAAsB3H,EAAI,KAAK,SAAQ,EAAG,CAAC,EAAGkH,EAAO,KAAK,UAAW,CACnE,MAAMU,EAAgB,IAAIxI,EAAOY,EAAGkH,EAAK,UAAU,WAAW,EAC9D,OAAAU,EAAc,KAAO,KAAK,WAAWA,EAAc,IAAI,EACvD,KAAK,UAAU,KAAKA,CAAa,EAC1B,CAACV,EAAMU,CAAa,CAC5B,CAOD,mBAAoB9E,EAAwB,CAC1C,MAAM+E,EAAQ,CAAE,EAChB,QAAS3F,EAAI,EAAGA,EAAIY,EAAK,OAAS,EAAGZ,IAEnC2F,EAAM,KAAK,KAAK,WAAW/E,EAAKZ,CAAC,EAAGY,EAAKZ,EAAI,CAAC,CAAC,CAAC,EAElD,OAAA2F,EAAM,KAAK,KAAK,WAAW/E,EAAKA,EAAK,OAAS,CAAC,EAAGA,EAAK,CAAC,CAAC,CAAC,EACnD+E,CACR,CAMD,0BAA2B/E,EAAM,CAC/B,MAAMgF,EAAOhF,EAAK,OAAS,EACrBiF,EAAW,CAACjF,EAAKgF,CAAI,CAAC,EAAE,OAAOhF,CAAI,EAAE,OAAOA,EAAK,CAAC,CAAC,EACzD,QAASZ,EAAI,EAAGA,EAAIY,EAAK,OAAS,EAAGZ,IACnC6F,EAAS7F,CAAC,EAAE,YAAc,CAAC6F,EAAS7F,EAAI,CAAC,EAAG6F,EAAS7F,CAAC,EAAG6F,EAAS7F,EAAI,CAAC,CAAC,EACxE6F,EAAS7F,CAAC,EAAE,SAAS,GAAG,CAE3B,CAED,YAAajC,EAA8BC,EAA8B8H,EAA8BC,EAAqC,CAC1I,IAAIC,EACJ,GAAIjI,aAAgBxB,GAAWyB,IAAS,QAAaA,aAAgBzB,GAAWuJ,aAAgBvJ,EAC9FyJ,EAAW,IAAI9E,EAAWnD,EAAMC,EAAM8H,CAAI,UACjC/H,aAAgBxB,GAAWyB,aAAgBzB,GAAWuJ,aAAgBvJ,EAC/EyJ,EAAW,IAAI9E,EAAW,GAAG,KAAK,mBAAmB,GAAG,CAACnD,EAAMC,EAAM8H,CAAI,EAAE,OAAOhI,GAAKA,IAAM,MAAS,CAAC,CAAC,UAC/FC,aAAgBxB,GAAW,OAAOyB,GAAS,UAAY8H,aAAgBvJ,GAAW,OAAOwJ,GAAS,SAAU,CACrH,MAAME,EAAU,KAAK,UAAUlI,EAAMC,CAAI,EACnCkI,EAAU,KAAK,UAAUJ,EAAMC,CAAI,EACnC,CAACjI,CAAC,EAAI,KAAK,iBAAiBmI,EAASC,CAAO,EAClDF,EAAW,IAAI9E,EAAWnD,EAAM+H,EAAMhI,CAAC,CAC7C,SAAe,OAAOC,GAAS,UAAY,OAAOC,GAAS,UAAY,OAAO8H,GAAS,SAAU,CAC3F,MAAMxH,EAAI,KAAK,SAAQ,EAAG,CAAC,EACrBC,EAAI,KAAK,iBAAiBD,EAAGP,CAAI,EACjCkI,EAAU,KAAK,UAAU3H,EAAGN,CAAI,EAChCkI,EAAU,KAAK,UAAU3H,EAAGuH,CAAI,EAChC,CAACtH,CAAC,EAAI,KAAK,iBAAiByH,EAASC,CAAO,EAClDF,EAAW,IAAI9E,EAAW5C,EAAGC,EAAGC,CAAC,CACvC,MAAeT,IAAS,SAClBiI,EAAW,IAAI9E,EAAW,GAAG,KAAK,mBAAkB,CAAE,GAExD,OAAO8E,CACR,CASD,iBAAkB1H,EAAmB,KAAK,SAAQ,EAAG,CAAC,EAAGC,EAAmB,KAAK,SAAU,EAAC,CAAC,EAAGC,EAAmB,KAAK,mBAAmBF,EAAGC,CAAC,EAAE,CAAC,EAAG4H,EAAI,OAA2B,CAClL,OAAAA,EAAI,IAAI5J,EACN,IAAItC,EACFqE,EAAE,EAAIE,EAAE,EAAID,EAAE,EACdD,EAAE,EAAIE,EAAE,EAAID,EAAE,CACf,CACF,EACD4H,EAAE,KAAOA,EAAE,MAAQ,KAAK,WAAWA,EAAE,IAAI,EACzC,KAAK,UAAU,KAAKA,CAAC,EACd,IAAI3J,EAAU8B,EAAGC,EAAGC,EAAG2H,CAAC,CAChC,CAED,kBAAmB1K,EAAiB6C,EAAmB,KAAK,SAAU,EAAC,CAAC,EAAGC,EAAmB,KAAK,SAAU,EAAC,CAAC,EAAmB,CAChI,MAAMmD,EAA0B,CAACpD,EAAGC,CAAC,EACrC,QAASyB,EAAI,EAAGA,EAAIvE,EAAGuE,IAAK,CAC1B,MAAMlC,EAAI4D,EAAO1B,EAAI,CAAC,EAAE,UAAU0B,EAAO1B,EAAI,CAAC,EAAG,KAAK,GAAK,EAAI,KAAK,GAAKvE,CAAC,EAC1EqC,EAAE,KAAOA,EAAE,MAAQ,KAAK,WAAWA,EAAE,IAAI,EACzC,KAAK,UAAU,KAAKA,CAAC,EACrB4D,EAAO,KAAK5D,CAAC,CACd,CACD,OAAO,IAAItB,EAAU,GAAGkF,CAAM,CAC/B,CAOD,aAAcpD,EAAG,CACf,IAAI8H,EACJ,GAAI9H,GAAK,KACP,EAAG,CACG8H,IAAc,SAChB,KAAK,UAAU,IAAK,EACpB,KAAK,UAAU,IAAK,EACpB,KAAK,UAAU,IAAK,EACpB,KAAK,UAAU,IAAK,GAEtB,KAAM,CAAC9H,EAAGC,EAAG4H,CAAC,EAAI,KAAK,aAAc,EAC/B3H,EAAI,KAAK,iBAAiB2H,EAAG7H,EAAGC,CAAC,EAAE,SAAS,CAAC,EACnD6H,EAAY,IAAIpF,GAAY1C,EAAGC,EAAGC,EAAG2H,CAAC,CAC9C,OAAeC,EAAU,MAAQ,KAAOA,EAAU,MAAQ,KAEtD,OAAOA,CACR,CAED,wBAAyB9H,EAAmB,KAAK,SAAU,EAAC,CAAC,EAAGC,EAAmB,KAAK,SAAQ,EAAG,CAAC,EAAG9C,EAAgC,CACrI,MAAM2C,EAAQ,KAAK,IAAM,GAAQ,EAAI3C,GAC/BwC,EAAQ,GAAK,EAAI,KAAK,IAAI,KAAK,GAAKxC,CAAC,GACrCqC,EAAI,IAAIvB,EACZ,IAAItC,IACAqE,EAAE,EAAIC,EAAE,GAAK,KAAK,IAAIH,CAAK,GAAKE,EAAE,EAAIC,EAAE,GAAK,KAAK,IAAIH,CAAK,GAAKH,EAAQM,EAAE,IAC1ED,EAAE,EAAIC,EAAE,GAAK,KAAK,IAAIH,CAAK,GAAKE,EAAE,EAAIC,EAAE,GAAK,KAAK,IAAIH,CAAK,GAAKH,EAAQM,EAAE,CACpF,CAAO,EACH,OAAAT,EAAE,KAAOA,EAAE,MAAQ,KAAK,WAAWA,EAAE,IAAI,EACzC,KAAK,UAAU,KAAKA,CAAC,EACdA,CACR,CAED,cAAeK,EAAkBnB,KAAoB4D,EAAwC,CAC3F,MAAMyF,EAAmB,CAAE,EAC3B,OAAAzF,EAAK,IAAIE,GAAK,CACZ,MAAM5C,EAAQ,IAAI3B,EAChB,IAAItC,EACF+C,EAAI8D,EAAE,GAAK,EAAI9D,GAAKmB,EAAE,EACtBnB,EAAI8D,EAAE,GAAK,EAAI9D,GAAKmB,EAAE,CAChC,CAAS,EACH,OAAAD,EAAM,KAAOA,EAAM,MAAQ,KAAK,WAAWA,EAAM,IAAI,EACrD,KAAK,UAAU,KAAKA,CAAK,EACzBmI,EAAiB,KAAKnI,CAAK,EACpBA,CACb,CAAK,EACMmI,CACR,CAQD,SAAU/H,EAAkBC,EAAkBC,EAAkB,CAC9D,MAAM8H,EAAW,IAAIlG,EAAQ9B,EAAGC,EAAGC,CAAC,EACpC,YAAK,UAAU,KAAK8H,CAAQ,EACrBA,CACR,CAED,oBAAqB1F,EAAuC,CAC1D,MAAMgF,EAAOhF,EAAK,OAAS,EACrBiF,EAAW,CAACjF,EAAKgF,CAAI,CAAC,EAAE,OAAOhF,CAAI,EAAE,OAAOA,EAAK,CAAC,CAAC,EACnD2F,EAAyB,CAAE,EACjC,QAASvG,EAAI,EAAGA,EAAIY,EAAK,OAAS,EAAGZ,IAAK,CACxC,MAAMsG,EAAW,IAAIlG,EAAQyF,EAAS7F,EAAI,CAAC,EAAG6F,EAAS7F,CAAC,EAAG6F,EAAS7F,EAAI,CAAC,CAAC,EAC1EuG,EAAO,KAAKD,CAAQ,EACpB,KAAK,UAAU,KAAKA,CAAQ,CAC7B,CACD,OAAOC,CACR,CAWD,UAAWC,EAAuBpI,KAAwBwC,EAAwC,CAChG,MAAM6F,EAAe,CAAE,EACvB,OAAA7F,EAAK,IAAIE,GAAK,CACZ,MAAM5C,EAAQ,IAAI3B,EAChB,IAAItC,GACD6G,EAAE,EAAI0F,EAAO,GAAK,KAAK,IAAIpI,CAAK,GAAK0C,EAAE,EAAI0F,EAAO,GAAK,KAAK,IAAIpI,CAAK,EAAIoI,EAAO,GAChF1F,EAAE,EAAI0F,EAAO,GAAK,KAAK,IAAIpI,CAAK,GAAK0C,EAAE,EAAI0F,EAAO,GAAK,KAAK,IAAIpI,CAAK,EAAIoI,EAAO,CAC3F,CAAS,EACH,OAAAtI,EAAM,KAAOA,EAAM,MAAQ,KAAK,WAAWA,EAAM,IAAI,EACrD,KAAK,UAAU,KAAKA,CAAK,EACzBuI,EAAa,KAAKvI,CAAK,EAChBA,CACb,CAAK,EACMuI,CACR,CAED,UAAWzK,EAAM,KAAK,UAAW,CAC/B,MAAM0K,EAAM,CAAE,EACd,OAAA1K,EAAI,QAAQ5B,GAAK,CACfsM,EAAI,KAAKtM,EAAE,QAAQ,CACzB,CAAK,EACMsM,EAAI,KAAK;AAAA,CAAI,CACrB,CAMD,aAAc9F,EAAM,CAClB,YAAK,gBAAkB,KAAK,KAAK,GAAGA,CAAI,EACjCO,GAAoB,IAAI,CAChC,CACH"}