{
  "version": 3,
  "sources": ["/cdn/shop/t/70/assets/mt-carte-peintre.js?correcteur=1792059594349"],
  "sourcesContent": ["/* MyTomette \u00B7 carte grav\u00E9e \u2014 le peintre de l'aper\u00E7u (fiche guid\u00E9e, Lot F, 15/10/2026).\n *\n * COPIE ADAPT\u00C9E DE mtp-photo-engine.js (th\u00E8me en ligne, peintre isol\u00E9 de la tomette photo) :\n * m\u00EAmes photos de la pi\u00E8ce et m\u00EAmes bo\u00EEtes de face, m\u00EAme projection des millim\u00E8tres sur la face\n * photographi\u00E9e, m\u00EAme teinte #6f5331 multipli\u00E9e, m\u00EAme masque hexagonal, m\u00EAmes trous.\n * Toute retouche du rendu de la photo qui concerne la projection ou la teinte doit \u00EAtre report\u00E9e ici.\n *\n * Ce qui change pour la carte :\n *  - polices : celles du gabarit carte (Inter 600 pour le lieu et les coordonn\u00E9es, DM Sans 400 pour la\n *    date depuis le correcteur final du 15/10 ; Marcellus et DM Sans capitales restent connues pour les\n *    recettes plus anciennes), servies PAR LES M\u00CAMES\n *    FICHIERS que le moteur (@fontsource sur jsDelivr, woff latin 400). Le moteur ne sert DM Sans\n *    qu'en 400 (mesur\u00E9 au Lot 0) : une graisse 700 se peint comme lui, contour 400 plus un trait de\n *    compensation (syntheticStroke), pour que l'aper\u00E7u ne mente pas sur la largeur des lettres ;\n *  - `dmcaps` s'\u00E9crit en capitales, comme dans le moteur ;\n *  - la carte (logo `custom_map`) est un SVG de surfaces pleines, d\u00E9j\u00E0 d\u00E9coup\u00E9 \u00E0 la pi\u00E8ce : on la\n *    peint telle quelle, \u00E0 l'\u00E9chelle 1 (viewBox en mm) ; le peintre n'y touche jamais ;\n *  - `face(shape, width, height)` donne la face en pixels sans rien peindre : le studio y cale\n *    l'aper\u00E7u vivant du geste (CarteRendu.apercu) et la cam\u00E9ra de texte.\n * Aucune recette n'est modifi\u00E9e, aucun fichier laser n'est produit ici : le `_Gravure SVG` et\n * l'`_Aper\u00E7u` du panier viennent du moteur expert cach\u00E9 (mt-carte-produit.js).\n *\n *   const p = CartePeintre.create();\n *   await p.render(canvas, recette, {width: 600, height: 600, dpr: 2});\n *   \u2192 {face, facePixels, physical}   (face en pixels logiques)\n */\n(function (root) {\n  'use strict';\n  // COPIE DE mtp-photo-engine.js \u203A PHOTOS (m\u00EAmes fichiers, m\u00EAmes bo\u00EEtes de face).\n  const PHOTOS = {\n    hexa: { url: 'https://cdn.shopify.com/s/files/1/1039/8665/9668/files/file_00000000fec87243a998a236f69b846b.webp?v=1782338066', box: { x0: .0726, y0: .0909, x1: .9306, y1: .8628 } },\n    carree: { url: 'https://cdn.shopify.com/s/files/1/1039/8665/9668/files/file_0000000095b071f48d1938042d6500fb.webp?v=1782929936', box: { x0: .0583, y0: .0575, x1: .9333, y1: .9325 } }\n  };\n  // Les trois polices du gabarit carte (CarteRendu.GABARITS). `weights` = graisses R\u00C9ELLEMENT servies\n  // par le moteur : au-del\u00E0, trait de compensation, exactement comme mteSyntheticStroke.\n  const FONTS = {\n    Marcellus: { family: 'Carte Marcellus', canonical: 'Marcellus', weights: '400', source: 'google' },\n    dmsans: { family: 'Carte DM Sans', canonical: 'DM Sans', weights: '400', source: 'google' },\n    dmcaps: { family: 'Carte DM Sans', canonical: 'DM Sans', weights: '400', source: 'google', caps: true },\n    // Correcteur final (15/10) : le moteur sert Inter dans ses vraies graisses (FONTDEFS 400;500;600;700).\n    Inter: { family: 'Carte Inter', canonical: 'Inter', weights: '400;500;600;700', source: 'google', charger: 600 }\n  };\n  const fontLoads = new Map();\n  const shapeOf = r => r.shape === 'carree' ? 'carree' : 'hexa';\n  const dimensions = shape => shape === 'carree' ? { width: 130, height: 130 } : { width: 120, height: 100 };\n  const finite = (v, f) => Number.isFinite(Number(v)) ? Number(v) : f;\n  function normRot(r) { r = Math.round(+r || 0) % 360; if (r > 180) r -= 360; if (r < -180) r += 360; if (Math.abs(r) < 4) r = 0; return r; }\n  function nearestWeight(f, w) {\n    const list = (String(f.weights || '400').match(/\\d+/g) || ['400']).map(Number);\n    return list.reduce((best, v) => Math.abs(v - w) < Math.abs(best - w) ? v : best, list[0]);\n  }\n  function fontsourceWoff(family, weight) { const slug = family.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, ''); return 'https://cdn.jsdelivr.net/npm/@fontsource/' + slug + '@5/files/' + slug + '-latin-' + weight + '-normal.woff'; }\n  // COPIE DE mteSyntheticStroke (moteur) : fontSize \u00D7 0,055 \u00D7 (\u00E9cart de graisse \u00F7 400).\n  function syntheticStroke(weight, faceWeight, size) { return Math.max(0, weight - faceWeight) * size * .055 / 400; }\n  function contain(iw, ih, W, H) { const k = Math.min(W / iw, H / ih), w = iw * k, h = ih * k; return { x: (W - w) / 2, y: (H - h) / 2, width: w, height: h }; }\n  function geometry(shape, W, H, options = {}) {\n    const physical = dimensions(shape), p = PHOTOS[shape === 'carree' ? 'carree' : 'hexa'], box = options.box || p.box;\n    // Enqu\u00EAte ovale (16/10/2026) : la face photographi\u00E9e de l'hexagone mesure 1,11 de large pour 1 de haut, la pi\u00E8ce\n    // r\u00E9elle 1,2 (120 \u00D7 100). On ram\u00E8ne la PHOTO aux proportions de la pi\u00E8ce (tass\u00E9e en hauteur de 7,4 %), jamais la\n    // gravure : ainsi mm \u2192 px garde une seule \u00E9chelle et le cercle du ciel reste un cercle. Carreau : 1 = 1, rien ne change.\n    const iw = options.imageWidth || 1, ih = options.imageHeight || 1, rPhoto = (box.x1 - box.x0) * iw / ((box.y1 - box.y0) * ih);\n    const t = options.mode === 'face' || !(rPhoto > 0) ? 1 : rPhoto / (physical.width / physical.height);\n    const image = contain(iw, ih * t, W, H);\n    const face = options.mode === 'face' ? contain(physical.width, physical.height, W, H) : { x: image.x + box.x0 * image.width, y: image.y + box.y0 * image.height, width: (box.x1 - box.x0) * image.width, height: (box.y1 - box.y0) * image.height };\n    return { physical, image, face };\n  }\n  function canvas(W, H) { const c = document.createElement('canvas'); c.width = Math.max(1, Math.round(W)); c.height = Math.max(1, Math.round(H)); return c; }\n  function quality(ctx) { ctx.imageSmoothingEnabled = true; try { ctx.imageSmoothingQuality = 'high'; } catch { /* ancien navigateur */ } }\n  function image(url, timeout = 15000) {\n    return new Promise((resolve, reject) => {\n      const im = new Image(); let timer = setTimeout(() => finish(Error('Une image de l\u2019aper\u00E7u ne r\u00E9pond pas.')), timeout);\n      function finish(error) { if (!timer) return; clearTimeout(timer); timer = null; im.onload = im.onerror = null; error ? reject(error) : resolve(im); }\n      im.crossOrigin = 'anonymous'; im.onload = () => finish(); im.onerror = () => finish(Error('Une image de l\u2019aper\u00E7u est indisponible.')); im.src = url;\n    });\n  }\n  function viewBox(svg) { const m = String(svg).match(/\\bviewBox\\s*=\\s*[\"']([^\"']+)[\"']/i), v = m && m[1].trim().split(/[\\s,]+/).map(Number); if (!v || v.length !== 4 || !v.every(Number.isFinite) || v[2] <= 0 || v[3] <= 0) throw Error('Le dessin ne poss\u00E8de pas de dimensions valides.'); return v; }\n  // COPIE DE mtp-photo-engine.js \u203A inkSvg : liste blanche vectorielle, aucune ressource externe.\n  function inkSvg(raw) {\n    const doc = new DOMParser().parseFromString(String(raw), 'image/svg+xml');\n    if (doc.querySelector('parsererror') || doc.documentElement.localName !== 'svg') throw Error('Le dessin SVG est illisible.');\n    const allowed = new Set(['svg', 'g', 'path', 'rect', 'circle', 'ellipse', 'polygon', 'polyline', 'line', 'defs', 'clipPath', 'title', 'desc']);\n    for (const n of Array.from(doc.querySelectorAll('*'))) {\n      if (!allowed.has(n.localName)) throw Error('Le dessin contient un \u00E9l\u00E9ment non pris en charge : ' + n.localName + '.');\n      for (const a of Array.from(n.attributes)) {\n        if (/^on/i.test(a.name) || ['href', 'xlink:href', 'style', 'class', 'filter', 'mask'].includes(a.name)) throw Error('Le dessin doit \u00EAtre un SVG autonome sans ressources externes.');\n        if (/url\\(/i.test(a.value) && !/^url\\(\\s*#[\\w-]+\\s*\\)$/.test(a.value)) throw Error('Une ressource externe est interdite dans le dessin.');\n        if (['fill', 'stroke'].includes(a.name) && !['none', 'transparent'].includes(a.value.toLowerCase())) n.setAttribute(a.name, '#000');\n      }\n    }\n    // La carte porte ses marques (data-mtcx-*, jusqu'\u00E0 quelques centaines d'octets) : inutiles \u00E0 l'image.\n    const svg = doc.documentElement, v = viewBox(raw);\n    for (const a of Array.from(svg.attributes)) if (/^data-/.test(a.name)) svg.removeAttribute(a.name);\n    svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); svg.setAttribute('width', v[2]); svg.setAttribute('height', v[3]); if (!svg.hasAttribute('fill')) svg.setAttribute('fill', '#000'); svg.setAttribute('color', '#000');\n    return { svg: new XMLSerializer().serializeToString(svg), viewBox: v };\n  }\n  function shapePath(ctx, shape, W, H) {\n    ctx.beginPath(); if (shape === 'hexa') { ctx.moveTo(W * .25, 0); ctx.lineTo(W * .75, 0); ctx.lineTo(W, H * .5); ctx.lineTo(W * .75, H); ctx.lineTo(W * .25, H); ctx.lineTo(0, H * .5); }\n    else { const r = W * .03; ctx.moveTo(r, 0); ctx.arcTo(W, 0, W, H, r); ctx.arcTo(W, H, 0, H, r); ctx.arcTo(0, H, 0, 0, r); ctx.arcTo(0, 0, W, 0, r); } ctx.closePath();\n  }\n  function cssFont(f, weight, size) { return weight + ' ' + size + 'px ' + JSON.stringify(f.family); }\n  function fontDef(e) {\n    const known = FONTS[e.font];\n    if (!known) throw Error('Police non pr\u00E9vue pour la carte : ' + e.font + '.');\n    const weight = Number(e.weight) || 400, faceWeight = nearestWeight(known, weight);\n    return { ...known, url: fontsourceWoff(known.canonical, faceWeight), weight, faceWeight };\n  }\n  // COPIE DE mtp-photo-engine.js \u203A loadFont.\n  function loadFont(f, timeout = 15000) {\n    const key = [f.family, f.url || '', f.faceWeight].join('|'); if (fontLoads.has(key)) return fontLoads.get(key);\n    const work = (async () => {\n      if (!document.fonts) throw Error('Ce navigateur ne peut pas charger les polices de gravure.');\n      const query = cssFont(f, f.faceWeight, 24);\n      let timer; const limit = new Promise((_, reject) => { timer = setTimeout(() => reject(Error('La police ' + f.family + ' ne r\u00E9pond pas.')), timeout); });\n      try {\n        await Promise.race([(async () => {\n          const existing = await document.fonts.load(query); if (existing.some(face => face.family.replace(/[\"']/g, '') === f.family && String(face.weight) === String(f.faceWeight))) return;\n          const face = new FontFace(f.family, 'url(' + JSON.stringify(f.url) + ')', { weight: String(f.faceWeight), style: 'normal' });\n          await face.load(); document.fonts.add(face); await document.fonts.load(query);\n        })(), limit]);\n      } finally { clearTimeout(timer); } return true;\n    })().catch(error => { fontLoads.delete(key); throw error; }); fontLoads.set(key, work); return work;\n  }\n  /** Les trois polices du gabarit, charg\u00E9es une fois : le studio mesure ses textes avec elles (CarteRendu.mise). */\n  function polices(timeout) { return Promise.all(Object.keys(FONTS).map(id => loadFont(fontDef({ font: id, weight: FONTS[id].charger || 400 }), timeout))); }\n  /** Famille CSS pour mesurer un texte comme il sera peint (option `css` de CarteRendu.mise). */\n  function cssFamille(fontId) { const f = FONTS[fontId]; return f ? JSON.stringify(f.family) + (fontId === 'Marcellus' ? ',serif' : ',sans-serif') : ''; }\n  // COPIE DE mtp-photo-engine.js \u203A drawText (sans le texte courb\u00E9 : le gabarit carte n'en pose pas).\n  function drawText(ctx, e, f, fs) {\n    const caps = f.caps || e.smallcaps;\n    const text = caps ? String(e.text || '').toUpperCase() : String(e.text || ''), ls = finite(e.ls, 0) * fs, syn = syntheticStroke(f.weight, f.faceWeight, fs);\n    ctx.fillStyle = '#000'; ctx.textAlign = ['left', 'right'].includes(e.align) ? e.align : 'center'; ctx.textBaseline = 'middle'; ctx.font = cssFont(f, f.faceWeight, fs);\n    function write(t, x, y) { if (syn > 0) { ctx.save(); ctx.lineJoin = 'round'; ctx.miterLimit = 2; ctx.lineWidth = syn; ctx.strokeStyle = '#000'; ctx.strokeText(t, x, y); ctx.restore(); } ctx.fillText(t, x, y); }\n    try { ctx.letterSpacing = ls + 'px'; } catch { /* ancien navigateur */ }\n    const lines = Array.isArray(e.lines) && e.lines.length ? e.lines.map(t => caps ? String(t).toUpperCase() : String(t)) : text.split('\\n'), lh = fs * 1.12;\n    lines.forEach((line, i) => write(line, 0, (i - (lines.length - 1) / 2) * lh));\n    try { ctx.letterSpacing = '0px'; } catch { /* idem */ }\n  }\n  function elementBox(e, shape, face, box) {\n    const mm = dimensions(shape), size = finite(e.size, 6) * 1.2 / mm.width * face.width, k = size / Math.max(box[2], box[3]);\n    return { x: finite(e.x, .5) * face.width, y: finite(e.y, .5) * face.height, width: box[2] * k, height: box[3] * k, size, rotation: normRot(e.rot) };\n  }\n  // COPIE DE mtp-photo-engine.js \u203A cleanHexMask.\n  function cleanHexMask(im, box) {\n    const iw = im.naturalWidth || im.width, ih = im.naturalHeight || im.height;\n    const x = Math.round(box.x0 * iw), y = Math.round(box.y0 * ih), w = Math.max(2, Math.round((box.x1 - box.x0) * iw)), h = Math.max(2, Math.round((box.y1 - box.y0) * ih));\n    const mask = canvas(w, h), ctx = mask.getContext('2d', { willReadFrequently: true }); ctx.drawImage(im, x, y, w, h, 0, 0, w, h);\n    try {\n      const pixels = ctx.getImageData(0, 0, w, h), p = pixels.data;\n      for (let i = 0; i < p.length; i += 4) { const r = p[i], g = p[i + 1], b = p[i + 2], spread = Math.max(r, g, b) - Math.min(r, g, b); p[i + 3] = r >= g && g >= b && r > 90 ? (spread <= 12 ? 0 : spread >= 38 ? 255 : Math.round((spread - 12) / 26 * 255)) : 0; p[i] = p[i + 1] = p[i + 2] = 0; }\n      ctx.putImageData(pixels, 0, 0);\n    } catch { ctx.clearRect(0, 0, w, h); shapePath(ctx, 'hexa', w, h); ctx.fillStyle = '#000'; ctx.fill(); }\n    return mask;\n  }\n  // COPIE DE mtp-photo-engine.js \u203A drawHoles (m\u00EAmes centres que holeCenters du moteur).\n  function drawHoles(ctx, shape, face, physical) {\n    const centers = shape === 'carree' ? [[15, 15], [115, 15]] : [[60, 15]], sx = face.width / physical.width, sy = face.height / physical.height;\n    ctx.save(); ctx.translate(face.x, face.y);\n    for (const [mmX, mmY] of centers) {\n      const x = mmX * sx, y = mmY * sy, r = 2 * sx;\n      const grad = ctx.createRadialGradient(x, y - .5 * sx, .05 * sx, x, y, r); grad.addColorStop(0, '#f4f4f4'); grad.addColorStop(.8, '#e3e3e3'); grad.addColorStop(1, '#b4a99f'); ctx.fillStyle = grad; ctx.beginPath(); ctx.arc(x, y, r, 0, Math.PI * 2); ctx.fill(); ctx.strokeStyle = 'rgba(13,13,13,.2)'; ctx.lineWidth = .15 * sx; ctx.stroke();\n    } ctx.restore();\n  }\n  function create(options = {}) {\n    const bgCache = new Map(), svgCache = new Map(), latest = new WeakMap();\n    function photo(shape) { const custom = options.photos?.[shape], base = PHOTOS[shape]; return typeof custom === 'string' ? { ...base, url: custom } : { ...base, ...custom }; }\n    function background(shape) {\n      const p = photo(shape), key = shape + '|' + p.url + '|' + JSON.stringify(p.box); if (!bgCache.has(key)) bgCache.set(key, image(p.url, options.timeout).then(im => ({ im, box: p.box, mask: shape === 'hexa' ? cleanHexMask(im, p.box) : null })).catch(error => { bgCache.delete(key); throw error; })); return bgCache.get(key);\n    }\n    function logo(raw) {\n      if (!raw) throw Error('Le dessin \u00E0 graver est absent.'); if (svgCache.has(raw)) return svgCache.get(raw);\n      const clean = inkSvg(raw), job = image('data:image/svg+xml;charset=utf-8,' + encodeURIComponent(clean.svg), options.timeout).then(im => ({ im, viewBox: clean.viewBox })).catch(error => { svgCache.delete(raw); throw error; });\n      svgCache.set(raw, job); while (svgCache.size > 10) svgCache.delete(svgCache.keys().next().value); return job;\n    }\n    async function ready(recipe) {\n      if (!recipe || !Array.isArray(recipe.elements)) throw Error('La composition est absente.');\n      const [bg, entries] = await Promise.all([background(shapeOf(recipe)), Promise.all(recipe.elements.map(async e => {\n        if (e.type === 'text') { const font = fontDef(e); await loadFont(font, options.timeout); return { e, font }; }\n        if (e.type !== 'logo' && e.type !== 'icon') throw Error('\u00C9l\u00E9ment de composition non pris en charge.');\n        return { e, ...await logo(e.svg) };\n      }))]); return { bg, entries };\n    }\n    function paint(target, recipe, resources, settings) {\n      const shape = shapeOf(recipe), im = resources.bg.im, g = geometry(shape, target.width, target.height, { ...settings, box: resources.bg.box, imageWidth: im.naturalWidth || im.width, imageHeight: im.naturalHeight || im.height }), { face, physical } = g, ctx = target.getContext('2d');\n      ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.clearRect(0, 0, target.width, target.height); quality(ctx);\n      if (settings.background) { ctx.fillStyle = settings.background; ctx.fillRect(0, 0, target.width, target.height); }\n      ctx.drawImage(im, g.image.x, g.image.y, g.image.width, g.image.height);\n      const mask = canvas(target.width, target.height), mc = mask.getContext('2d'); quality(mc); mc.save(); mc.translate(face.x, face.y);\n      // Carte et textes partagent les millim\u00E8tres de l'atelier, projet\u00E9s sur la face photographi\u00E9e (COPIE DE la photo).\n      mc.scale(face.width / physical.width, face.height / physical.height);\n      for (const slot of resources.entries) {\n        const e = slot.e, b = elementBox(e, shape, physical, slot.viewBox || [0, 0, 1, 1]); mc.save(); mc.translate(b.x, b.y); mc.rotate(b.rotation * Math.PI / 180);\n        if (e.type === 'text') drawText(mc, e, slot.font, b.size);\n        else mc.drawImage(slot.im, -b.width / 2, -b.height / 2, b.width, b.height);\n        mc.restore();\n      } mc.restore();\n      mc.globalCompositeOperation = 'source-in'; mc.fillStyle = '#6f5331'; mc.fillRect(0, 0, mask.width, mask.height); mc.globalCompositeOperation = 'source-over';\n      const ink = canvas(target.width, target.height), ic = ink.getContext('2d'); quality(ic); ic.save();\n      if (shape === 'carree' || !resources.bg.mask) { ic.translate(face.x, face.y); shapePath(ic, shape, face.width, face.height); ic.clip(); ic.translate(-face.x, -face.y); }\n      if ('filter' in ic) ic.filter = 'blur(' + Math.max(.3, face.width * .0004).toFixed(2) + 'px)'; ic.drawImage(mask, 0, 0); ic.restore();\n      if (shape === 'hexa' && resources.bg.mask) { ic.globalCompositeOperation = 'destination-in'; ic.drawImage(resources.bg.mask, face.x, face.y, face.width, face.height); ic.globalCompositeOperation = 'source-over'; }\n      ctx.globalCompositeOperation = 'multiply'; ctx.drawImage(ink, 0, 0); ctx.globalCompositeOperation = 'source-over';\n      if (recipe.hole && settings.holes !== false) drawHoles(ctx, shape, face, physical);\n      return g;\n    }\n    async function render(target, recipe, settings = {}) {\n      if (!target?.getContext) throw Error('Un canvas est n\u00E9cessaire pour l\u2019aper\u00E7u.');\n      const token = {}; latest.set(target, token);\n      const width = Math.max(1, Math.round(finite(settings.width, target.clientWidth || target.width || 600))), height = Math.max(1, Math.round(finite(settings.height, width))), dpr = Math.max(1, Math.min(3, finite(settings.dpr, 1)));\n      // Une demande immuable : une police ou une image en retard ne peint jamais une recette p\u00E9rim\u00E9e (COPIE DE la photo).\n      const snapshot = { ...recipe, elements: (recipe?.elements || []).map(e => ({ ...e, lines: e.lines?.slice() })) };\n      const resources = await ready(snapshot); if (latest.get(target) !== token) return { stale: true };\n      const output = canvas(width * dpr, height * dpr), g = paint(output, snapshot, resources, settings);\n      target.width = output.width; target.height = output.height; target.getContext('2d').drawImage(output, 0, 0);\n      const face = Object.fromEntries(Object.entries(g.face).map(([k, v]) => [k, v / dpr]));\n      return { canvas: target, stale: false, width, height, dpr, face, facePixels: g.face, physical: g.physical };\n    }\n    /** La face (pixels logiques) d'une pi\u00E8ce peinte en width \u00D7 height, sans rien peindre (photo d\u00E9j\u00E0 charg\u00E9e par render). */\n    async function face(shape, width, height) {\n      const bg = await background(shape === 'carree' ? 'carree' : 'hexa'), im = bg.im;\n      return geometry(shape, width, height, { box: bg.box, imageWidth: im.naturalWidth || im.width, imageHeight: im.naturalHeight || im.height });\n    }\n    async function png(recipe, settings = {}) { const output = canvas(1, 1); await render(output, recipe, { width: 1200, height: 1200, ...settings, dpr: 1 }); return output.toDataURL('image/png'); }\n    return { ready, render, png, face, prechauffer: shape => background(shape === 'carree' ? 'carree' : 'hexa').then(() => true, () => false) };\n  }\n  const api = { create, geometry, dimensions, photos: PHOTOS, fonts: FONTS, polices, cssFamille, elementBox, normRot, fontDef, syntheticStroke, version: 'mtcx-peintre-1' };\n  if (typeof module === 'object' && module.exports) module.exports = api; else root.CartePeintre = api;\n})(typeof window === 'object' ? window : this);\n"],
  "mappings": "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",
  "names": ["image", "face"]
}
