{
  "version": 3,
  "sources": ["/cdn/shop/t/22/assets/ardor-yardsign3d.js?t=1791578991605"],
  "sourcesContent": ["/* Ardor Yard Sign Builder: 3D viewer of a corrugated plastic yard sign on a patch of lawn (three.js r147 classic build).\n   Global: window.ArdorYardSign3D.create(hostDiv, opts) -> viewer or null.\n   Needs global THREE + THREE.OrbitControls (load ardor-yardsign-three.js, then ardor-yardsign-three-orbit.js, before this file).\n   Units: 1 scene unit = 1 inch.\n\n   viewer.set({ w, h, sides, stake })   board size in inches, sides = 1 | 2, stake = true | false (wire H-stake)\n   viewer.setFace('front' | 'back', canvas | null)   the 2D drawings. With 2 sides and no back drawing,\n                                        the front drawing is shown on both sides. With 1 side the back is white.\n   viewer.refresh()                     read the drawings again after they were redrawn\n   viewer.view('home' | 'front' | 'back' | 'left' | 'right' | 'side'), viewer.zoom(1 | -1), viewer.resize(),\n   viewer.snapshot(w, h), viewer.dispose() */\n(function (root) {\n  'use strict';\n\n  var FOV = 28;\n  var THICK = 0.16;        // the board: 4 mm\n  var GAP = 6;             // space between the lawn and the board when it is on a stake\n  var WIRE = 0.085;        // radius of the stake wire\n  var FLUTE = 0.2;         // spacing of the flutes seen on the top and bottom edges\n  var EL_MAX = 1.05;       // look from above, up to about 60 degrees\n  var EL_MIN = 0.02;       // never from under the lawn\n  var FILL_SMALL = 0.88;   // share of the view the scene takes in the standard views, smallest sign\n  var FILL_LARGE = 0.95;   // and the largest sign, so bigger signs look a little bigger\n  var FILL_NEAR = 0.97;    // zoomed all the way in: the board just fits the view\n  var FILL_FAR = 0.45;     // zoomed all the way out\n  var DEFAULT_BG = '#f4f6f5';\n  var BOARD_EDGE = '#e2e5e8';\n  var OUTLINE = '#b4bac1';\n  var STEEL = '#868d95';\n\n  function hasThree() {\n    var T = root.THREE;\n    return !!(T && T.WebGLRenderer && T.OrbitControls && T.BufferGeometry && T.MeshBasicMaterial && T.LineSegments);\n  }\n\n  function create(host, opts) {\n    try {\n      if (!host || !hasThree()) return null;\n      return build(host, opts || {});\n    } catch (e) {\n      return null;\n    }\n  }\n\n  function inches(v, lo, hi) {\n    var n = Number(v);\n    return (v !== null && v !== '' && v !== true && v !== false && isFinite(n) && n >= lo && n <= hi) ? n : null;\n  }\n\n  // 1 or 2; also reads labels such as \"2 sides (double-sided)\". 0 = not understood.\n  function sidesOf(v) {\n    if (v === 1 || v === 2) return v;\n    var s = String(v === undefined || v === null ? '' : v).toLowerCase().replace(/^\\s+/, '');\n    if (s.charAt(0) === '2' || s.indexOf('double') >= 0 || s.indexOf('two') === 0) return 2;\n    if (s.charAt(0) === '1' || s.indexOf('single') >= 0 || s.indexOf('one') === 0) return 1;\n    return 0;\n  }\n\n  // true / false; null = not understood.\n  function flag(v) {\n    if (v === true || v === false) return v;\n    if (v === 1 || v === 0) return v === 1;\n    var s = String(v).toLowerCase();\n    if (/^(true|yes|on|1)$/.test(s)) return true;\n    if (/^(false|no|off|0|none)$/.test(s)) return false;\n    return null;\n  }\n\n  function bgColor(v) {\n    if (typeof v !== 'string') return DEFAULT_BG;\n    if (/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(v)) return v;\n    if (/^rgb\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*\\)$/i.test(v)) return v;\n    return DEFAULT_BG;\n  }\n\n  /* YARD3D (Oct 20, 2026): poster() draws a still, flat picture of the sign on its patch of lawn, framed like the 3D view's\n     first (home) frame, with a 2D canvas only (no WebGL). The yard sign builder shows it in the 3D box until the 3D view starts\n     (first touch, scroll, key or mouse move, or 8 s after load). Its numbers mirror rebuild(), makeGroundTexture(),\n     makeShadowTexture(), homeShare(), fitDistance() and VIEWS.home below. o = { w, h, stake } as for viewer.set();\n     face = the front drawing; bg = background. Undo: restore assets/ardor-yardsign3d-backup-oct20y3.js. */\n  var posterLawn = null;\n  function posterGround() { // the same lawn picture as makeGroundTexture() (same seed), made once\n    if (posterLawn) return posterLawn;\n    var n = 512, c = root.document.createElement('canvas'), g, i, a, r, x, y, seed = 7;\n    var rnd = function () { seed = (seed * 16807) % 2147483647; return seed / 2147483647; };\n    c.width = n; c.height = n; g = c.getContext('2d');\n    if (!g) return null;\n    g.fillStyle = '#84ba5b'; g.fillRect(0, 0, n, n);\n    for (i = 0; i < 2600; i++) {\n      a = rnd() * Math.PI * 2; r = Math.sqrt(rnd()) * n / 2; x = n / 2 + Math.cos(a) * r; y = n / 2 + Math.sin(a) * r;\n      g.fillStyle = (i % 2) ? 'rgba(108,164,72,0.3)' : 'rgba(156,204,112,0.3)';\n      g.fillRect(x, y, 1.5 + rnd() * 1.5, 3 + rnd() * 5);\n    }\n    var fade = g.createRadialGradient(n / 2, n / 2, 0, n / 2, n / 2, n / 2);\n    fade.addColorStop(0, 'rgba(0,0,0,1)'); fade.addColorStop(0.6, 'rgba(0,0,0,1)'); fade.addColorStop(0.79, 'rgba(0,0,0,0.5)');\n    fade.addColorStop(0.95, 'rgba(0,0,0,0)'); fade.addColorStop(1, 'rgba(0,0,0,0)');\n    g.globalCompositeOperation = 'destination-in'; g.fillStyle = fade; g.fillRect(0, 0, n, n);\n    g.globalCompositeOperation = 'source-over';\n    posterLawn = c;\n    return c;\n  }\n  function posterShadow(w, stake, padX, padZ, ppi) { // the same picture as makeShadowTexture()\n    var c = root.document.createElement('canvas');\n    c.width = Math.max(8, Math.round((w + 2 * padX) * ppi)); c.height = Math.max(8, Math.round(2 * padZ * ppi));\n    var g = c.getContext('2d');\n    if (!g) return null;\n    var far = c.width * 3, cx = c.width / 2, cy = c.height / 2;\n    g.fillStyle = '#000';\n    var add = function (blur, alpha, x, rw, rh) {\n      g.shadowColor = 'rgba(0,0,0,' + alpha + ')'; g.shadowBlur = blur * ppi; g.shadowOffsetX = far; g.shadowOffsetY = 0;\n      g.fillRect(cx + (x - rw / 2) * ppi - far, cy - rh * ppi / 2, rw * ppi, rh * ppi);\n    };\n    if (stake) {\n      var s = Math.max(4, Math.min(10, w * 0.5)) / 2;\n      add(4, 0.26, 0, w * 0.94, 3.5); add(0.7, 0.7, -s, 0.6, 0.6); add(0.7, 0.7, s, 0.6, 0.6);\n    } else { add(3, 0.3, 0, w * 0.96, 3); add(0.6, 0.36, 0, w, 0.5); }\n    return c;\n  }\n  function poster(cv, o, face, bg) {\n    o = o || {};\n    var vw = cv.clientWidth, vh = cv.clientHeight, dpr = Math.min(2, Math.max(1, root.devicePixelRatio || 1)),\n      cw = Math.round(vw * dpr), ch = Math.round(vh * dpr);\n    if (cw < 8 || ch < 8) return false;\n    if (cv.width !== cw) cv.width = cw;\n    if (cv.height !== ch) cv.height = ch;\n    var g = cv.getContext('2d');\n    if (!g) return false;\n    var w = inches(o.w, 2, 120) || 18, h = inches(o.h, 2, 120) || 24, stake = flag(o.stake) === true, i, k, a,\n      y0 = stake ? GAP : 0, top = y0 + h, R = Math.max(10.5, w * 0.55 + 3.5), baseY = top / 2 - R * 0.08,\n      t = Math.max(0, Math.min(1, (Math.max(w, h) - 18) / 18)), m = 1 / (FILL_SMALL + (FILL_LARGE - FILL_SMALL) * t),\n      az = 0.5, el = 0.17, tv = Math.tan(FOV * Math.PI / 360), th = tv * vw / vh,\n      ca = Math.cos(az), sa = Math.sin(az), ce = Math.cos(el), se = Math.sin(el), r = 1;\n    // camera space for the home view, aimed at the middle of the scene (as setSph, fitDistance and aim)\n    var cam = function (x, y, z) {\n      y -= baseY;\n      return [x * ca - z * sa, -x * se * sa + y * ce - z * se * ca, x * ce * sa + y * se + z * ce * ca];\n    };\n    var fit = function (x, y, z) { var q = cam(x, y, z); r = Math.max(r, q[2] + Math.max(Math.abs(q[0]) * m / th, Math.abs(q[1]) * m / tv)); };\n    for (i = 0; i < 8; i++) fit(i & 1 ? w / 2 : -w / 2, i & 2 ? top : y0, i & 4 ? THICK / 2 : -THICK / 2);\n    for (i = 0; i < 16; i++) { a = i * Math.PI / 8; fit(Math.cos(a) * R * 0.88, 0, Math.sin(a) * R * 0.88); }\n    var P = function (x, y, z) {\n      var q = cam(x, y, z), d = Math.max(1e-3, r - q[2]);\n      return [(1 + q[0] / (d * th)) * cw / 2, (1 - q[1] / (d * tv)) * ch / 2];\n    };\n    var s0 = ch / 2 / (r * tv); // canvas pixels per inch at the aim point\n    // a picture laid flat on a rectangle in the scene: c0 = where its top-left goes, cu = its top-right, cv2 = its bottom-left\n    var lay = function (img, sx, sy, sw, sh, c0, cu, cv2) {\n      var A = P(c0[0], c0[1], c0[2]), U = P(cu[0], cu[1], cu[2]), V = P(cv2[0], cv2[1], cv2[2]);\n      g.setTransform((U[0] - A[0]) / sw, (U[1] - A[1]) / sw, (V[0] - A[0]) / sh, (V[1] - A[1]) / sh, A[0], A[1]);\n      g.drawImage(img, sx, sy, sw, sh, 0, 0, sw, sh);\n      g.setTransform(1, 0, 0, 1, 0, 0);\n    };\n    var path = function (pts, close) {\n      g.beginPath();\n      for (var j = 0; j < pts.length; j++) { var q = P(pts[j][0], pts[j][1], pts[j][2]); if (j) g.lineTo(q[0], q[1]); else g.moveTo(q[0], q[1]); }\n      if (close) g.closePath();\n    };\n    g.setTransform(1, 0, 0, 1, 0, 0); g.globalAlpha = 1;\n    g.fillStyle = bgColor(bg); g.fillRect(0, 0, cw, ch);\n    // the lawn: the same picture as the 3D view's, turned to the camera and seen at its angle\n    var lawn = posterGround();\n    if (lawn) {\n      var gL = P(-ca * R, 0, sa * R), gR = P(ca * R, 0, -sa * R), gN = P(sa * R, 0, ca * R), gF = P(-sa * R, 0, -ca * R),\n        ga = Math.max(2, Math.abs(gR[0] - gL[0]) / 2), gb = Math.max(1, Math.abs(gN[1] - gF[1]) / 2);\n      g.save(); g.translate((gL[0] + gR[0]) / 2, (gN[1] + gF[1]) / 2); g.scale(1, gb / ga); g.rotate(az);\n      try { g.drawImage(lawn, -ga, -ga, 2 * ga, 2 * ga); } catch (e) { }\n      g.restore();\n    }\n    // soft shadows on the lawn (the 3D view's shadow plane: w + 18 by 18 inches, 0.02 in above the lawn)\n    var padX = 9, padZ = 9, sh = posterShadow(w, stake, padX, padZ, Math.min(10, 512 / (w + 2 * padX)));\n    if (sh) { try { lay(sh, 0, 0, sh.width, sh.height, [-w / 2 - padX, 0.02, -padZ], [w / 2 + padX, 0.02, -padZ], [-w / 2 - padX, 0.02, padZ]); } catch (e) { } }\n    // wire H-stake: two legs into the bottom edge, joined by two cross wires\n    if (stake) {\n      var sp = Math.max(4, Math.min(10, w * 0.5));\n      g.lineWidth = Math.max(1, 2 * 0.085 * s0); g.lineCap = 'butt'; g.strokeStyle = STEEL;\n      [[[-sp / 2, 0, 0], [-sp / 2, GAP + 0.04, 0]], [[sp / 2, 0, 0], [sp / 2, GAP + 0.04, 0]],\n        [[-sp / 2, GAP - 0.085, 0], [sp / 2, GAP - 0.085, 0]], [[-sp / 2, GAP * 0.42, 0], [sp / 2, GAP * 0.42, 0]]].forEach(function (L) { path(L, false); g.stroke(); });\n    }\n    // the board: top edge (open flutes) and right edge, then the printed front, then the fine grey outline\n    var xl = -w / 2, xr = w / 2, zf = THICK / 2, zb = -THICK / 2;\n    path([[xl, top, zb], [xr, top, zb], [xr, top, zf], [xl, top, zf]], true); g.fillStyle = '#eef0f2'; g.fill();\n    path([[xr, y0, zf], [xr, y0, zb], [xr, top, zb], [xr, top, zf]], true); g.fillStyle = BOARD_EDGE; g.fill();\n    path([[xl, top, zf], [xr, top, zf], [xr, y0, zf], [xl, y0, zf]], true); g.fillStyle = '#ffffff'; g.fill();\n    if (face && face.width > 0 && face.height > 0) {\n      var N = 16, M = 8, fw = face.width, fh = face.height, pl = P(xl, top, zf), pr = P(xr, top, zf),\n        ov = Math.ceil(2 * fw / Math.max(8, Math.abs(pr[0] - pl[0]))); // cells overlap by about 2 screen pixels: no hairline seams\n      for (k = 0; k < N; k++) for (i = 0; i < M; i++) { // small cells, so the board keeps its perspective (far side a little smaller), as in 3D\n        var u0 = fw * k / N, u1 = Math.min(fw, fw * (k + 1) / N + ov), v0 = fh * i / M, v1 = Math.min(fh, fh * (i + 1) / M + ov),\n          xa = xl + w * u0 / fw, xb = xl + w * u1 / fw, ya = top - h * v0 / fh, yb = top - h * v1 / fh;\n        try { lay(face, u0, v0, u1 - u0, v1 - v0, [xa, ya, zf], [xb, ya, zf], [xa, yb, zf]); } catch (e) { }\n      }\n    }\n    g.lineWidth = 1; g.strokeStyle = OUTLINE; g.lineJoin = 'round';\n    path([[xl, top, zf], [xr, top, zf], [xr, y0, zf], [xl, y0, zf]], true); g.stroke();\n    path([[xl, top, zf], [xl, top, zb], [xr, top, zb], [xr, y0, zb], [xr, y0, zf]], false); g.stroke();\n    path([[xr, top, zb], [xr, top, zf]], false); g.stroke();\n    return true;\n  }\n\n  function build(host, opts) {\n    var THREE = root.THREE;\n    var doc = host.ownerDocument || document;\n    var win = doc.defaultView || root;\n    var bg = bgColor(opts.background);\n\n    /* ---------- canvas + GL context (probe first so three never logs an error) ---------- */\n    var canvas = doc.createElement('canvas');\n    canvas.setAttribute('aria-label', '3D preview of your yard sign. Drag to turn it.');\n    canvas.style.cssText = 'position:absolute;top:0;left:0;right:0;bottom:0;inset:0;width:100%;height:100%;display:block;touch-action:none;outline:none;cursor:grab;';\n    var attrs = {\n      alpha: false, antialias: true, depth: true, stencil: false, premultipliedAlpha: true,\n      preserveDrawingBuffer: false\n    };\n    var gl = null;\n    try { gl = canvas.getContext('webgl2', attrs); } catch (e1) { gl = null; }\n    if (!gl) { try { gl = canvas.getContext('webgl', attrs) || canvas.getContext('experimental-webgl', attrs); } catch (e2) { gl = null; } }\n    if (!gl) return null;\n\n    var renderer = new THREE.WebGLRenderer({\n      canvas: canvas, context: gl, antialias: true, alpha: false, stencil: false, preserveDrawingBuffer: false\n    });\n    renderer.outputEncoding = THREE.sRGBEncoding;\n    renderer.toneMapping = THREE.NoToneMapping; // print colours stay exactly as drawn\n    renderer.setClearColor(new THREE.Color(bg), 1);\n\n    try {\n      if (win.getComputedStyle && win.getComputedStyle(host).position === 'static') host.style.position = 'relative';\n    } catch (e3) { /* ignore */ }\n    host.appendChild(canvas);\n\n    var maxAniso = 1;\n    try { maxAniso = renderer.capabilities.getMaxAnisotropy() || 1; } catch (e4) { maxAniso = 1; }\n    var canMip = !!renderer.capabilities.isWebGL2; // WebGL 1 cannot mipmap odd-sized pictures\n\n    /* ---------- scene ---------- */\n    var scene = new THREE.Scene();\n    var camera = new THREE.PerspectiveCamera(FOV, 1, 1, 3000);\n    var disposed = false;\n\n    /* ---------- materials (live for the whole viewer) ----------\n       Nothing in the scene is lit: every surface shows its own colour, so both printed faces keep\n       the exact colours of the 2D drawings from every angle. */\n    function lin(hex) { var c = new THREE.Color(hex); c.convertSRGBToLinear(); return c; }\n    var WHITE = lin('#ffffff');\n\n    // Any part of a drawing that is see-through shows the white board, not black.\n    function whiteUnderPicture(shader) {\n      shader.fragmentShader = shader.fragmentShader.replace('#include <map_fragment>', [\n        '#ifdef USE_MAP',\n        '  vec4 sampledDiffuseColor = texture2D( map, vUv );',\n        '  sampledDiffuseColor = vec4( sampledDiffuseColor.rgb + vec3( 1.0 - sampledDiffuseColor.a ), 1.0 );',\n        '  diffuseColor *= sampledDiffuseColor;',\n        '#endif'\n      ].join('\\n'));\n    }\n\n    function boardMat(color) {\n      // pushed back a hair so the outline drawn on the board's corners always wins\n      return new THREE.MeshBasicMaterial({ color: color, toneMapped: false, polygonOffset: true, polygonOffsetFactor: 1, polygonOffsetUnits: 1 });\n    }\n    var frontMat = boardMat(WHITE.clone());\n    var backMat = boardMat(WHITE.clone());\n    frontMat.onBeforeCompile = whiteUnderPicture;\n    backMat.onBeforeCompile = whiteUnderPicture;\n    var fluteMat = boardMat(WHITE.clone());           // top and bottom edges: the open ends of the flutes\n    var edgeMat = boardMat(lin(BOARD_EDGE));          // left and right edges: plain\n    var lineMat = new THREE.LineBasicMaterial({ color: lin(OUTLINE), toneMapped: false });\n    var stakeMat = new THREE.MeshBasicMaterial({ color: lin(STEEL), toneMapped: false });\n    var groundMat = new THREE.MeshBasicMaterial({ color: 0xffffff, transparent: true, depthWrite: false, toneMapped: false });\n    var shadowMat = new THREE.MeshBasicMaterial({ color: 0xffffff, transparent: true, depthWrite: false, toneMapped: false });\n\n    function plainTexture(c, repeat) {\n      var t = new THREE.CanvasTexture(c);\n      t.encoding = THREE.sRGBEncoding;\n      t.anisotropy = maxAniso;\n      t.wrapS = repeat ? THREE.RepeatWrapping : THREE.ClampToEdgeWrapping;\n      t.wrapT = THREE.ClampToEdgeWrapping;\n      t.magFilter = THREE.LinearFilter;\n      t.minFilter = THREE.LinearMipmapLinearFilter; // these pictures are power-of-two sized\n      t.generateMipmaps = true;\n      return t;\n    }\n\n    // One flute: a white rib and the two white skins around a slightly darker hollow.\n    function makeFluteTexture() {\n      var c = doc.createElement('canvas');\n      c.width = 32; c.height = 32;\n      var g = c.getContext('2d');\n      g.fillStyle = '#f6f7f8';\n      g.fillRect(0, 0, 32, 32);\n      g.fillStyle = '#ccd1d6';\n      g.fillRect(7, 7, 25, 18);\n      return plainTexture(c, true);\n    }\n\n    // A round patch of lawn that fades out at its rim, so it sits on any background colour.\n    function makeGroundTexture() {\n      var n = 512, c = doc.createElement('canvas');\n      c.width = n; c.height = n;\n      var g = c.getContext('2d');\n      var i, a, r, x, y, seed = 7;\n      function rnd() { seed = (seed * 16807) % 2147483647; return seed / 2147483647; }\n      g.fillStyle = '#84ba5b';\n      g.fillRect(0, 0, n, n);\n      // short strokes in lighter and darker greens: a quiet hint of mown grass\n      for (i = 0; i < 2600; i++) {\n        a = rnd() * Math.PI * 2;\n        r = Math.sqrt(rnd()) * n / 2;\n        x = n / 2 + Math.cos(a) * r;\n        y = n / 2 + Math.sin(a) * r;\n        g.fillStyle = (i % 2) ? 'rgba(108,164,72,0.3)' : 'rgba(156,204,112,0.3)';\n        g.fillRect(x, y, 1.5 + rnd() * 1.5, 3 + rnd() * 5);\n      }\n      // fade to nothing at the rim\n      var fade = g.createRadialGradient(n / 2, n / 2, 0, n / 2, n / 2, n / 2);\n      fade.addColorStop(0, 'rgba(0,0,0,1)');\n      fade.addColorStop(0.6, 'rgba(0,0,0,1)');\n      fade.addColorStop(0.79, 'rgba(0,0,0,0.5)');\n      fade.addColorStop(0.95, 'rgba(0,0,0,0)');\n      fade.addColorStop(1, 'rgba(0,0,0,0)');\n      g.globalCompositeOperation = 'destination-in';\n      g.fillStyle = fade;\n      g.fillRect(0, 0, n, n);\n      g.globalCompositeOperation = 'source-over';\n      return plainTexture(c, false);\n    }\n\n    var fluteTex = makeFluteTexture();\n    var groundTex = makeGroundTexture();\n    fluteMat.map = fluteTex;\n    groundMat.map = groundTex;\n    var shadowTex = null;\n\n    // the builder's 2D drawings and their textures\n    var faces = {\n      front: { src: null, tex: null, w: 0, h: 0 },\n      back: { src: null, tex: null, w: 0, h: 0 }\n    };\n\n    /* ---------- state ---------- */\n    var state = { w: 18, h: 24, sides: 1, stake: false };\n    var modelRoot = null;\n    var geos = [];\n    var ptsAll = [];    // points the standard views must show (board, lawn), relative to the middle of the scene\n    var ptsBoard = [];  // the corners of the board, relative to the middle of the board\n    var baseY = 12;     // height the camera aims at in the standard views: the middle of the whole scene\n    var boardY = 12;    // height it aims at when zoomed all the way in: the middle of the board\n    var target = new THREE.Vector3(0, 12, 0);\n    var fitHome = 100;\n    var size = { w: 0, h: 0 };\n\n    var VIEWS = {\n      home: { az: 0.5, el: 0.17 },\n      front: { az: 0, el: 0.09 },\n      back: { az: Math.PI, el: 0.09 },\n      left: { az: -1.2, el: 0.1 },\n      right: { az: 1.2, el: 0.1 },\n      side: { az: 1.4, el: 0.1 }\n    };\n\n    /* ---------- controls ---------- */\n    var controls = new THREE.OrbitControls(camera, canvas);\n    controls.enablePan = false;\n    controls.enableDamping = true;\n    controls.dampingFactor = 0.12;\n    controls.rotateSpeed = 0.8;\n    controls.zoomSpeed = 0.9;\n    // all the way around the sign, from above, never from under the lawn\n    controls.minPolarAngle = Math.PI / 2 - EL_MAX;\n    controls.maxPolarAngle = Math.PI / 2 - EL_MIN;\n    controls.target.copy(target);\n\n    var raf = 0;\n    var tween = null;\n\n    function now() { return (win.performance && win.performance.now) ? win.performance.now() : Date.now(); }\n\n    function invalidate() {\n      if (disposed || raf) return;\n      raf = win.requestAnimationFrame(frame);\n    }\n\n    // A picture the browser will not let WebGL read must never stop the viewer: show a blank board instead.\n    function draw() {\n      try {\n        renderer.render(scene, camera);\n      } catch (e) {\n        if (faces.front.tex || faces.back.tex) {\n          faces.front.src = null;\n          faces.back.src = null;\n          applyTexture('front');\n          applyTexture('back');\n          try { renderer.render(scene, camera); } catch (e2) { /* ignore */ }\n        }\n      }\n    }\n\n    function frame() {\n      raf = 0;\n      if (disposed) return;\n      if (!size.w && !measure()) return; // the host has no size yet: wait for it\n      if (tween) stepTween();\n      controls.update(); // fires \"change\" (-> invalidate) while damping is still moving\n      holdInView();\n      aim();\n      draw();\n    }\n\n    function renderNow() {\n      if (disposed) return;\n      draw();\n    }\n\n    function onControlsChange() { invalidate(); }\n    function onControlsStart() { tween = null; canvas.style.cursor = 'grabbing'; }\n    function onControlsEnd() { canvas.style.cursor = 'grab'; }\n    controls.addEventListener('change', onControlsChange);\n    controls.addEventListener('start', onControlsStart);\n    controls.addEventListener('end', onControlsEnd);\n\n    /* ---------- camera helpers ---------- */\n    function getSph() {\n      var ox = camera.position.x - target.x, oy = camera.position.y - target.y, oz = camera.position.z - target.z;\n      var r = Math.sqrt(ox * ox + oy * oy + oz * oz) || 1;\n      return { az: Math.atan2(ox, oz), el: Math.asin(Math.max(-1, Math.min(1, oy / r))), r: r };\n    }\n\n    function setSph(az, el, r) {\n      var ce = Math.cos(el);\n      camera.position.set(target.x + r * ce * Math.sin(az), target.y + r * Math.sin(el), target.z + r * ce * Math.cos(az));\n      camera.lookAt(target);\n    }\n\n    // Camera distance at which the given points take the given share of the view, for a view direction.\n    function fitDistance(az, el, aspect, share, pts) {\n      var tv = Math.tan(FOV * Math.PI / 360), th = tv * (aspect || 1);\n      var ce = Math.cos(el), se = Math.sin(el), sa = Math.sin(az), ca = Math.cos(az);\n      var dx = ce * sa, dy = se, dz = ce * ca;\n      var m = 1 / (share || 1);\n      var best = 1, i, x, y, z, cx, cy, cz, d;\n      for (i = 0; i < pts.length; i += 3) {\n        x = pts[i]; y = pts[i + 1]; z = pts[i + 2];\n        cx = x * ca - z * sa;\n        cy = -x * se * sa + y * ce - z * se * ca;\n        cz = x * dx + y * dy + z * dz;\n        d = cz + Math.max(Math.abs(cx) * m / th, Math.abs(cy) * m / tv);\n        if (d > best) best = d;\n      }\n      return best;\n    }\n\n    function aspectNow() { return (size.w > 0 && size.h > 0) ? size.w / size.h : 1.4; }\n\n    // Small signs sit a little smaller in the view than large ones: a simple cue for size.\n    function homeShare() {\n      var t = (Math.max(state.w, state.h) - 18) / 18;\n      t = Math.max(0, Math.min(1, t));\n      return FILL_SMALL + (FILL_LARGE - FILL_SMALL) * t;\n    }\n\n    function viewDistance(v) { return fitDistance(v.az, v.el, aspectNow(), homeShare(), ptsAll); }\n\n    // Closest the camera may come for a view direction: the whole board, centred, still fits the view.\n    function nearFor(az, el) { return fitDistance(az, el, aspectNow(), FILL_NEAR, ptsBoard); }\n\n    // Zooming in moves the aim from the middle of the scene (sign, stake and lawn) up to the middle of the\n    // board, so at the closest zoom the board fills the view. Camera and aim move together: the angle and\n    // the distance stay as they are.\n    function aim() {\n      var s = getSph();\n      var far = fitDistance(s.az, s.el, aspectNow(), homeShare(), ptsAll);\n      var near = nearFor(s.az, s.el);\n      var t = (far - near > 0.01) ? (far - s.r) / (far - near) : 0;\n      t = Math.max(0, Math.min(1, t));\n      var dy = baseY + (boardY - baseY) * t - target.y;\n      if (Math.abs(dy) < 0.0005) return;\n      target.y += dy;\n      camera.position.y += dy;\n      controls.target.copy(target);\n    }\n\n    function updateLimits() {\n      var s = getSph();\n      fitHome = viewDistance(VIEWS.home);\n      controls.minDistance = nearFor(s.az, s.el);\n      controls.maxDistance = Math.max(fitDistance(0, 0.09, aspectNow(), FILL_FAR, ptsAll), fitHome * 1.2);\n    }\n\n    function clampR(r, az, el) { return Math.max(nearFor(az, el), Math.min(controls.maxDistance, r)); }\n\n    // The near limit depends on the angle (a board seen from the side comes closer on one edge),\n    // so it follows the camera, and the camera is moved back when a turn would push the board out of view.\n    function holdInView() {\n      var s = getSph(), near = nearFor(s.az, s.el);\n      controls.minDistance = near;\n      if (!tween && s.r < near - 0.01) setSph(s.az, s.el, near);\n    }\n\n    function stepTween() {\n      var t = (now() - tween.t0) / tween.ms;\n      if (t >= 1) t = 1;\n      var k = t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;\n      setSph(tween.a.az + (tween.b.az - tween.a.az) * k, tween.a.el + (tween.b.el - tween.a.el) * k, tween.a.r + (tween.b.r - tween.a.r) * k);\n      if (t >= 1) tween = null; else invalidate();\n    }\n\n    function tweenTo(az, el, r, ms) {\n      var a = getSph();\n      var d = az - a.az;\n      while (d > Math.PI) d -= Math.PI * 2;\n      while (d < -Math.PI) d += Math.PI * 2;\n      tween = { a: a, b: { az: a.az + d, el: el, r: r }, t0: now(), ms: ms || 520 };\n      invalidate();\n    }\n\n    /* ---------- the sign ---------- */\n    function track(g) { geos.push(g); return g; }\n\n    // A thin box. Picture coordinates: u runs left to right as the reader sees that side, v runs bottom to top,\n    // so the back reads correctly from behind.\n    function boardGeometry(w, h, y0) {\n      var x0 = -w / 2, x1 = w / 2, y1 = y0 + h, z0 = -THICK / 2, z1 = THICK / 2;\n      var n = w / FLUTE;\n      var pos = [], nor = [], uv = [], idx = [];\n      function quad(a, b, c, e, nrm, ta, tb, tc, te) {\n        var i = pos.length / 3;\n        pos.push(a[0], a[1], a[2], b[0], b[1], b[2], c[0], c[1], c[2], e[0], e[1], e[2]);\n        nor.push(nrm[0], nrm[1], nrm[2], nrm[0], nrm[1], nrm[2], nrm[0], nrm[1], nrm[2], nrm[0], nrm[1], nrm[2]);\n        uv.push(ta[0], ta[1], tb[0], tb[1], tc[0], tc[1], te[0], te[1]);\n        idx.push(i, i + 1, i + 2, i, i + 2, i + 3);\n      }\n      // front\n      quad([x0, y0, z1], [x1, y0, z1], [x1, y1, z1], [x0, y1, z1], [0, 0, 1], [0, 0], [1, 0], [1, 1], [0, 1]);\n      // back (seen from behind, its left is at x1)\n      quad([x1, y0, z0], [x0, y0, z0], [x0, y1, z0], [x1, y1, z0], [0, 0, -1], [0, 0], [1, 0], [1, 1], [0, 1]);\n      // top edge\n      quad([x0, y1, z1], [x1, y1, z1], [x1, y1, z0], [x0, y1, z0], [0, 1, 0], [0, 0], [n, 0], [n, 1], [0, 1]);\n      // bottom edge\n      quad([x0, y0, z0], [x1, y0, z0], [x1, y0, z1], [x0, y0, z1], [0, -1, 0], [0, 0], [n, 0], [n, 1], [0, 1]);\n      // right edge\n      quad([x1, y0, z1], [x1, y0, z0], [x1, y1, z0], [x1, y1, z1], [1, 0, 0], [0, 0], [1, 0], [1, 1], [0, 1]);\n      // left edge\n      quad([x0, y0, z0], [x0, y0, z1], [x0, y1, z1], [x0, y1, z0], [-1, 0, 0], [0, 0], [1, 0], [1, 1], [0, 1]);\n      var g = new THREE.BufferGeometry();\n      g.setAttribute('position', new THREE.Float32BufferAttribute(pos, 3));\n      g.setAttribute('normal', new THREE.Float32BufferAttribute(nor, 3));\n      g.setAttribute('uv', new THREE.Float32BufferAttribute(uv, 2));\n      g.setIndex(idx);\n      g.addGroup(0, 6, 0);    // front -> frontMat\n      g.addGroup(6, 6, 1);    // back -> backMat\n      g.addGroup(12, 12, 2);  // top and bottom edges -> fluteMat\n      g.addGroup(24, 12, 3);  // left and right edges -> edgeMat\n      return g;\n    }\n\n    // A fine line along every corner of the board, so a white sign still reads on a white background\n    // and the thin edge shows from the side.\n    function outlineGeometry(w, h, y0) {\n      var x0 = -w / 2, x1 = w / 2, y1 = y0 + h, z0 = -THICK / 2, z1 = THICK / 2;\n      var p = [], zs = [z0, z1], i, z;\n      for (i = 0; i < 2; i++) {\n        z = zs[i];\n        p.push(x0, y0, z, x1, y0, z, x1, y0, z, x1, y1, z, x1, y1, z, x0, y1, z, x0, y1, z, x0, y0, z);\n      }\n      p.push(x0, y0, z0, x0, y0, z1, x1, y0, z0, x1, y0, z1, x1, y1, z0, x1, y1, z1, x0, y1, z0, x0, y1, z1);\n      var g = new THREE.BufferGeometry();\n      g.setAttribute('position', new THREE.Float32BufferAttribute(p, 3));\n      return g;\n    }\n\n    // Distance between the two legs of the stake: a generic H-stake, narrower under a narrow sign.\n    function legSpacing(w) { return Math.max(4, Math.min(10, w * 0.5)); }\n\n    function wire(len, x, y, flat) {\n      var m = new THREE.Mesh(track(new THREE.CylinderGeometry(WIRE, WIRE, len, 10, 1)), stakeMat);\n      if (flat) m.rotation.z = Math.PI / 2;\n      m.position.set(x, y, 0);\n      return m;\n    }\n\n    // Soft shadows on the lawn, drawn in a picture that lies flat under the sign.\n    // The black shapes themselves are drawn off the picture, so only their blurred shadows land on it.\n    function makeShadowTexture(w, padX, padZ, ppi) {\n      var c = doc.createElement('canvas');\n      c.width = Math.max(8, Math.round((w + 2 * padX) * ppi));\n      c.height = Math.max(8, Math.round(2 * padZ * ppi));\n      var g = c.getContext('2d');\n      var far = c.width * 3;\n      var cx = c.width / 2, cy = c.height / 2;\n      g.fillStyle = '#000';\n      function add(blur, alpha, x, rw, rh) { // inches, x = centre of the shape left to right\n        g.shadowColor = 'rgba(0,0,0,' + alpha + ')';\n        g.shadowBlur = blur * ppi;\n        g.shadowOffsetX = far;\n        g.shadowOffsetY = 0;\n        g.fillRect(cx + (x - rw / 2) * ppi - far, cy - rh * ppi / 2, rw * ppi, rh * ppi);\n      }\n      if (state.stake) {\n        var s = legSpacing(w) / 2;\n        add(4, 0.26, 0, w * 0.94, 3.5);    // the board, a hand above the lawn: wide and soft\n        add(0.7, 0.7, -s, 0.6, 0.6);       // where each leg goes into the ground\n        add(0.7, 0.7, s, 0.6, 0.6);\n      } else {\n        add(3, 0.3, 0, w * 0.96, 3);       // the board standing on the lawn\n        add(0.6, 0.36, 0, w, 0.5);         // tighter, right where it touches\n      }\n      var t = new THREE.CanvasTexture(c);\n      t.generateMipmaps = false;\n      t.minFilter = THREE.LinearFilter;\n      t.magFilter = THREE.LinearFilter;\n      t.wrapS = t.wrapT = THREE.ClampToEdgeWrapping;\n      return t;\n    }\n\n    function clearModel() {\n      var i;\n      if (modelRoot) scene.remove(modelRoot);\n      for (i = 0; i < geos.length; i++) geos[i].dispose();\n      geos = [];\n      modelRoot = null;\n      if (shadowTex) { shadowTex.dispose(); shadowTex = null; }\n      shadowMat.map = null;\n    }\n\n    function rebuild() {\n      clearModel();\n      var w = state.w, h = state.h;\n      var y0 = state.stake ? GAP : 0;        // bottom edge of the board\n      var top = y0 + h;\n      var R = Math.max(10.5, w * 0.55 + 3.5); // the lawn\n      var grp = new THREE.Group();\n      var i, a;\n\n      grp.add(new THREE.Mesh(track(boardGeometry(w, h, y0)), [frontMat, backMat, fluteMat, edgeMat]));\n      var lines = new THREE.LineSegments(track(outlineGeometry(w, h, y0)), lineMat);\n      lines.renderOrder = 1;\n      grp.add(lines);\n\n      if (state.stake) {\n        var s = legSpacing(w);\n        // two legs from the ground into the bottom edge of the board, joined by two cross wires\n        grp.add(wire(GAP + 0.04, -s / 2, (GAP + 0.04) / 2, false));\n        grp.add(wire(GAP + 0.04, s / 2, (GAP + 0.04) / 2, false));\n        grp.add(wire(s, 0, GAP - WIRE, true));\n        grp.add(wire(s, 0, GAP * 0.42, true));\n      }\n\n      var ground = new THREE.Mesh(track(new THREE.CircleGeometry(R, 56)), groundMat);\n      ground.rotation.x = -Math.PI / 2;\n      ground.renderOrder = 2;\n      grp.add(ground);\n\n      var padX = 9, padZ = 9;\n      shadowTex = makeShadowTexture(w, padX, padZ, Math.min(10, 512 / (w + 2 * padX)));\n      shadowMat.map = shadowTex;\n      shadowMat.needsUpdate = true;\n      var shadow = new THREE.Mesh(track(new THREE.PlaneGeometry(w + 2 * padX, 2 * padZ)), shadowMat);\n      shadow.rotation.x = -Math.PI / 2;\n      shadow.position.y = 0.02;\n      shadow.renderOrder = 3;\n      grp.add(shadow);\n\n      modelRoot = grp;\n      scene.add(grp);\n\n      // what the camera frames: the board and most of the lawn (its rim is see-through).\n      // The camera looks down a little, so the near side of the lawn shows below the sign:\n      // aim slightly under the middle to keep the picture centred.\n      baseY = top / 2 - R * 0.08;\n      boardY = y0 + h / 2;\n      target.set(0, baseY, 0);\n      ptsBoard = [];\n      ptsAll = [];\n      for (i = 0; i < 8; i++) {\n        ptsBoard.push((i & 1) ? w / 2 : -w / 2, (i & 2) ? h / 2 : -h / 2, (i & 4) ? THICK / 2 : -THICK / 2);\n        ptsAll.push((i & 1) ? w / 2 : -w / 2, ((i & 2) ? top : y0) - baseY, (i & 4) ? THICK / 2 : -THICK / 2);\n      }\n      for (i = 0; i < 16; i++) {\n        a = i * Math.PI / 8;\n        ptsAll.push(Math.cos(a) * R * 0.88, -baseY, Math.sin(a) * R * 0.88);\n      }\n      bindTextures();\n    }\n\n    /* ---------- the pictures ---------- */\n    function bindTextures() {\n      var ft = faces.front.tex;\n      var bt = state.sides === 2 ? (faces.back.tex || ft) : null; // 2 sides without a back drawing: same on both sides\n      if (frontMat.map !== ft) { frontMat.map = ft; frontMat.needsUpdate = true; }\n      if (backMat.map !== bt) { backMat.map = bt; backMat.needsUpdate = true; }\n    }\n\n    function applyTexture(name) {\n      var f = faces[name];\n      if (f.tex) { f.tex.dispose(); f.tex = null; }\n      f.w = 0; f.h = 0;\n      if (f.src && f.src.width > 0 && f.src.height > 0) {\n        var t = new THREE.CanvasTexture(f.src);\n        t.encoding = THREE.sRGBEncoding; // same colours as the 2D drawing\n        t.premultiplyAlpha = true;       // goes with whiteUnderPicture\n        t.anisotropy = maxAniso;         // stays sharp when seen at an angle\n        t.generateMipmaps = canMip;\n        t.minFilter = canMip ? THREE.LinearMipmapLinearFilter : THREE.LinearFilter;\n        t.magFilter = THREE.LinearFilter;\n        t.wrapS = t.wrapT = THREE.ClampToEdgeWrapping;\n        t.needsUpdate = true;\n        f.tex = t;\n        f.w = f.src.width; f.h = f.src.height;\n      }\n      bindTextures();\n    }\n\n    /* ---------- sizing ---------- */\n    function measure() {\n      var w = host.clientWidth | 0, h = host.clientHeight | 0;\n      if (w < 2 || h < 2) return false;\n      var pr = Math.min(2, Math.max(1, win.devicePixelRatio || 1));\n      if (w === size.w && h === size.h && pr === renderer.getPixelRatio()) return false;\n      var oldFit = fitHome, had = size.w > 0;\n      size.w = w; size.h = h;\n      renderer.setPixelRatio(pr);\n      renderer.setSize(w, h, false);\n      camera.aspect = w / h;\n      camera.updateProjectionMatrix();\n      updateLimits();\n      var s = getSph();\n      if (had && !tween) setSph(s.az, s.el, clampR(s.r * fitHome / oldFit, s.az, s.el));\n      else if (!had) setSph(VIEWS.home.az, VIEWS.home.el, fitHome);\n      else if (tween) tween.b.r = tween.b.r * fitHome / oldFit;\n      aim();\n      controls.update();\n      return true;\n    }\n\n    /* ---------- public API ---------- */\n    var api = {\n      set: function (o) {\n        if (disposed || !o) return;\n        var changed = false, v;\n        v = inches(o.w, 2, 120);\n        if (v !== null && v !== state.w) { state.w = v; changed = true; }\n        v = inches(o.h, 2, 120);\n        if (v !== null && v !== state.h) { state.h = v; changed = true; }\n        v = sidesOf(o.sides);\n        if (v && v !== state.sides) { state.sides = v; changed = true; }\n        v = flag(o.stake);\n        if (v !== null && v !== state.stake) { state.stake = v; changed = true; }\n        if (!changed && modelRoot) return;\n        var oldFit = fitHome, s = getSph();\n        rebuild();\n        controls.target.copy(target);\n        updateLimits();\n        if (tween) tween.b.r = tween.b.r * fitHome / oldFit;\n        setSph(s.az, s.el, clampR(s.r * fitHome / oldFit, s.az, s.el));\n        controls.minDistance = nearFor(s.az, s.el);\n        aim();\n        controls.update();\n        invalidate();\n      },\n      setFace: function (face, cv) {\n        if (disposed || (face !== 'front' && face !== 'back')) return;\n        faces[face].src = cv || null;\n        applyTexture(face);\n        invalidate();\n      },\n      refresh: function () {\n        if (disposed) return;\n        var names = ['front', 'back'], i, f;\n        for (i = 0; i < 2; i++) {\n          f = faces[names[i]];\n          if (f.src && (f.src.width !== f.w || f.src.height !== f.h)) applyTexture(names[i]); // the drawing changed size\n          else if (f.tex) f.tex.needsUpdate = true;\n        }\n        invalidate();\n      },\n      view: function (name) {\n        if (disposed) return;\n        var v = (typeof name === 'string' && VIEWS.hasOwnProperty(name)) ? VIEWS[name] : VIEWS.home;\n        tweenTo(v.az, v.el, viewDistance(v), 560);\n      },\n      zoom: function (dir) {\n        if (disposed) return;\n        var s = tween ? tween.b : getSph();\n        var r = clampR(s.r * Math.pow(0.8, dir > 0 ? 1 : -1), s.az, s.el);\n        tweenTo(s.az, s.el, r, 240);\n      },\n      resize: function () {\n        if (disposed) return;\n        if (measure()) { raf && win.cancelAnimationFrame(raf); raf = 0; renderNow(); if (tween) invalidate(); }\n      },\n      snapshot: function (w, h, viewName) {\n        if (disposed) return null;\n        var out = null;\n        var oldPR = renderer.getPixelRatio();\n        var oldSize = renderer.getSize(new THREE.Vector2());\n        var oldAspect = camera.aspect;\n        var oldPos = camera.position.clone();\n        try {\n          var cap = Math.min(4096, renderer.capabilities.maxTextureSize || 4096);\n          w = Math.max(16, Math.min(cap, Math.round(w || size.w || 800)));\n          h = Math.max(16, Math.min(cap, Math.round(h || size.h || 600)));\n          var s = getSph();\n          var k = fitDistance(s.az, s.el, w / h, 1, ptsAll) / fitDistance(s.az, s.el, oldAspect || 1, 1, ptsAll);\n          renderer.setPixelRatio(1);\n          renderer.setSize(w, h, false);\n          camera.aspect = w / h;\n          camera.updateProjectionMatrix();\n          var sv = (typeof viewName === 'string' && VIEWS.hasOwnProperty(viewName)) ? VIEWS[viewName] : null; // proof sheet (ardor-proofsheet.js): a named view, fitted to the picture\nif (sv) setSph(sv.az, sv.el, fitDistance(sv.az, sv.el, w / h, homeShare(), ptsAll)); else setSph(s.az, s.el, s.r * k);\n          renderer.render(scene, camera);\n          out = doc.createElement('canvas');\n          out.width = w; out.height = h;\n          var ctx = out.getContext('2d');\n          ctx.fillStyle = bg;\n          ctx.fillRect(0, 0, w, h);\n          ctx.drawImage(canvas, 0, 0, w, h);\n        } catch (e) {\n          out = null;\n        }\n        try {\n          renderer.setPixelRatio(oldPR);\n          renderer.setSize(oldSize.x, oldSize.y, false);\n          camera.aspect = oldAspect;\n          camera.updateProjectionMatrix();\n          camera.position.copy(oldPos);\n          camera.lookAt(target);\n          renderer.render(scene, camera);\n        } catch (e2) { /* ignore */ }\n        return out;\n      },\n      dispose: function () {\n        if (disposed) return;\n        disposed = true;\n        if (raf) win.cancelAnimationFrame(raf);\n        raf = 0; tween = null;\n        try { if (ro) ro.disconnect(); } catch (e) { /* ignore */ }\n        win.removeEventListener('resize', onWinResize);\n        canvas.removeEventListener('webglcontextlost', onLost, false);\n        canvas.removeEventListener('webglcontextrestored', onRestored, false);\n        controls.removeEventListener('change', onControlsChange);\n        controls.removeEventListener('start', onControlsStart);\n        controls.removeEventListener('end', onControlsEnd);\n        controls.dispose();\n        clearModel();\n        var list = [frontMat, backMat, fluteMat, edgeMat, lineMat, stakeMat, groundMat, shadowMat, fluteTex, groundTex, faces.front.tex, faces.back.tex];\n        for (var i = 0; i < list.length; i++) { try { if (list[i]) list[i].dispose(); } catch (e3) { /* ignore */ } }\n        faces.front.tex = null; faces.front.src = null;\n        faces.back.tex = null; faces.back.src = null;\n        try { renderer.dispose(); renderer.forceContextLoss(); } catch (e4) { /* ignore */ }\n        if (canvas.parentNode) canvas.parentNode.removeChild(canvas);\n      }\n    };\n\n    function onWinResize() { api.resize(); }\n    function onLost(e) { e.preventDefault(); }\n    function onRestored() { invalidate(); }\n    canvas.addEventListener('webglcontextlost', onLost, false);\n    canvas.addEventListener('webglcontextrestored', onRestored, false);\n\n    var ro = null;\n    if (win.ResizeObserver) {\n      ro = new win.ResizeObserver(function () { api.resize(); });\n      ro.observe(host);\n    }\n    win.addEventListener('resize', onWinResize);\n\n    rebuild();\n    controls.target.copy(target);\n    setSph(VIEWS.home.az, VIEWS.home.el, fitHome);\n    updateLimits();\n    setSph(VIEWS.home.az, VIEWS.home.el, fitHome);\n    if (!measure()) controls.update();\n    invalidate();\n\n    return api;\n  }\n\n  root.ArdorYardSign3D = { create: create, poster: poster };\n})(typeof window !== 'undefined' ? window : this);\n"],
  "mappings": "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",
  "names": ["sh"]
}
