@ray-js/robot-map-sdk 0.0.15-beta.9 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/bin/mcp-server.js +29 -29
  2. package/dist/constant/methods.js +1 -1
  3. package/dist/index.d.ts +40 -4
  4. package/dist/index.rjs.js +1 -1
  5. package/dist-app/assets/index-DMEnUYiD.js +1 -0
  6. package/dist-app/index.html +1 -2
  7. package/dist-docs/404.html +2 -2
  8. package/dist-docs/agents/domain.html +3 -3
  9. package/dist-docs/agents/issue-tracker.html +3 -3
  10. package/dist-docs/agents/triage-labels.html +5 -5
  11. package/dist-docs/assets/agents_triage-labels.md.Cmw0b5xB.js +1 -0
  12. package/dist-docs/assets/{agents_triage-labels.md.BqHb16T-.lean.js → agents_triage-labels.md.Cmw0b5xB.lean.js} +1 -1
  13. package/dist-docs/assets/{app.Bq9VgHDr.js → app.BXGPC0v4.js} +1 -1
  14. package/dist-docs/assets/chunks/@localSearchIndexroot.D-feMZmG.js +1 -0
  15. package/dist-docs/assets/chunks/{BitmapFont.gpsydROl.js → BitmapFont.DzUyMNlJ.js} +1 -1
  16. package/dist-docs/assets/chunks/{BufferResource.T6Cz6g-w.js → BufferResource.Drg97r2Z.js} +1 -1
  17. package/dist-docs/assets/chunks/{CanvasRenderer.IdOUfdnP.js → CanvasRenderer.vfz9sPE6.js} +1 -1
  18. package/dist-docs/assets/chunks/{RenderTargetSystem.D3fIMotr.js → RenderTargetSystem.Bkr0oS6j.js} +1 -1
  19. package/dist-docs/assets/chunks/{VPLocalSearchBox.DFGCpIRc.js → VPLocalSearchBox.C7HJ4UkB.js} +1 -1
  20. package/dist-docs/assets/chunks/{WebGLRenderer.Co7oet6q.js → WebGLRenderer.D4Dgosvx.js} +1 -1
  21. package/dist-docs/assets/chunks/{WebGPURenderer.wb8rIKnB.js → WebGPURenderer.CT3AUgw3.js} +1 -1
  22. package/dist-docs/assets/chunks/{browserAll.Dff4Vb8P.js → browserAll.NKEQOzVE.js} +1 -1
  23. package/dist-docs/assets/chunks/index.CvitVYBK.js +744 -0
  24. package/dist-docs/assets/chunks/theme.DUpgtHaE.js +4 -0
  25. package/dist-docs/assets/chunks/{webworkerAll.oMn27HhV.js → webworkerAll.JQUyAE7k.js} +1 -1
  26. package/dist-docs/assets/{guide_getting-started.md.B_JyRwPU.js → guide_getting-started.md.s0ecK_5b.js} +2 -2
  27. package/dist-docs/assets/guide_getting-started.md.s0ecK_5b.lean.js +1 -0
  28. package/dist-docs/assets/{reference_config.md.DJr6BhNY.js → reference_config.md.B45KsJB6.js} +3 -3
  29. package/dist-docs/assets/{reference_config.md.DJr6BhNY.lean.js → reference_config.md.B45KsJB6.lean.js} +1 -1
  30. package/dist-docs/guide/advanced-usage.html +3 -3
  31. package/dist-docs/guide/concepts.html +3 -3
  32. package/dist-docs/guide/getting-started.html +5 -5
  33. package/dist-docs/guide/mcp.html +3 -3
  34. package/dist-docs/hashmap.json +1 -1
  35. package/dist-docs/index.html +3 -3
  36. package/dist-docs/plans/2026-03-04-detected-objects-visibility-design.html +3 -3
  37. package/dist-docs/plans/2026-03-04-show-detected-objects-implementation-plan.html +3 -3
  38. package/dist-docs/plans/2026-03-10-simulator-debug-design.html +3 -3
  39. package/dist-docs/plans/2026-03-10-simulator-events-console-design.html +3 -3
  40. package/dist-docs/plans/2026-03-10-simulator-events-console-implementation-plan.html +3 -3
  41. package/dist-docs/plans/2026-03-10-simulator-runtime-controls-design.html +3 -3
  42. package/dist-docs/plans/2026-03-10-simulator-runtime-controls-implementation-plan.html +3 -3
  43. package/dist-docs/plans/2026-03-10-testing-rollout-next-steps-plan.html +3 -3
  44. package/dist-docs/plans/2026-03-11-simulator-logger-dump-implementation-plan.html +3 -3
  45. package/dist-docs/reference/callbacks.html +3 -3
  46. package/dist-docs/reference/config.html +6 -6
  47. package/dist-docs/reference/data.html +3 -3
  48. package/dist-docs/reference/methods.html +3 -3
  49. package/dist-docs/reference/runtime.html +3 -3
  50. package/dist-docs/reference/types.html +3 -3
  51. package/dist-docs/reference/utils.html +3 -3
  52. package/dist-docs/simulator/index.html +3 -3
  53. package/package.json +2 -1
  54. package/dist-app/assets/index-ctYqCQ1f.js +0 -1
  55. package/dist-docs/assets/agents_triage-labels.md.BqHb16T-.js +0 -1
  56. package/dist-docs/assets/chunks/@localSearchIndexroot.DIdh9pnG.js +0 -1
  57. package/dist-docs/assets/chunks/index.CKdv9PR-.js +0 -744
  58. package/dist-docs/assets/chunks/theme.BiVQsQs4.js +0 -4
  59. package/dist-docs/assets/guide_getting-started.md.B_JyRwPU.lean.js +0 -1
@@ -0,0 +1 @@
1
+ var __defProp=Object.defineProperty,__defProps=Object.defineProperties,__getOwnPropDescs=Object.getOwnPropertyDescriptors,__getOwnPropSymbols=Object.getOwnPropertySymbols,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__reflectGet=Reflect.get,__pow=Math.pow,__defNormalProp=(c,e,t)=>e in c?__defProp(c,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):c[e]=t,__spreadValues=(c,e)=>{for(var t in e||(e={}))__hasOwnProp.call(e,t)&&__defNormalProp(c,t,e[t]);if(__getOwnPropSymbols)for(var t of __getOwnPropSymbols(e))__propIsEnum.call(e,t)&&__defNormalProp(c,t,e[t]);return c},__spreadProps=(c,e)=>__defProps(c,__getOwnPropDescs(e)),__objRest=(c,e)=>{var t={};for(var i in c)__hasOwnProp.call(c,i)&&e.indexOf(i)<0&&(t[i]=c[i]);if(null!=c&&__getOwnPropSymbols)for(var i of __getOwnPropSymbols(c))e.indexOf(i)<0&&__propIsEnum.call(c,i)&&(t[i]=c[i]);return t},__publicField=(c,e,t)=>__defNormalProp(c,"symbol"!=typeof e?e+"":e,t),__superGet=(c,e,t)=>__reflectGet(__getProtoOf(c),t,e),__async=(c,e,t)=>new Promise((i,n)=>{var r=c=>{try{a(t.next(c))}catch(e){n(e)}},s=c=>{try{a(t.throw(c))}catch(e){n(e)}},a=c=>c.done?i(c.value):Promise.resolve(c.value).then(r,s);a((t=t.apply(c,e)).next())});!function(){"use strict";var c,e,t,i=document.createElement("style");i.textContent='/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}#debug-panel{--mp-bg: #f8faf9;--mp-card-bg: #ffffff;--mp-card-border: #e3e7e5;--mp-border-strong: #d4ddd8;--mp-border-hover: #bcc8c2;--mp-accent: #2f6f4f;--mp-accent-soft: #e8f4ee;--mp-accent-border: #c3d7cb;--mp-accent-border-hover: #a7c2b4;--mp-accent-text: #1f5a40;--mp-danger-soft: #fbeaea;--mp-danger-border: #e3b8b8;--mp-danger-border-hover: #d49a9a;--mp-danger-text: #9f2d2d;--mp-text-main: #0f172a;--mp-text-strong: #334155;--mp-text-muted: #64748b;--mp-transition: .14s ease;--mp-radius-sm: 8px;--mp-radius-pill: 999px;--mp-space-1: 4px;--mp-space-2: 6px;--mp-space-3: 8px;--mp-space-4: 10px;--mp-space-5: 12px;--mp-space-7: 16px;--mp-font-2xs: 11px;--mp-font-xs: 12px}#debug-panel [hidden]{display:none!important}body.debug-panel-layout{display:flex;flex-direction:row;width:100vw;height:100vh;overflow:hidden}body.debug-panel-layout #container{position:relative;flex:1 1 auto;min-width:0;height:100%}#debug-panel{flex:0 0 300px;width:300px;height:100%;box-sizing:border-box;display:flex;flex-direction:column;background:var(--mp-bg);border-right:1px solid var(--mp-card-border);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;color:var(--mp-text-main)}#debug-panel.debug-panel--collapsed{flex:0 0 36px;width:36px}@media (max-width: 640px){#debug-panel{position:fixed;top:0;left:0;bottom:0;height:auto;z-index:10;box-shadow:2px 0 12px #0f172a1f}}.debug-panel__header{display:flex;align-items:center;justify-content:space-between;gap:var(--mp-space-2);padding:var(--mp-space-4) var(--mp-space-5);border-bottom:1px solid var(--mp-card-border)}#debug-panel.debug-panel--collapsed .debug-panel__header{justify-content:center;padding:var(--mp-space-4) var(--mp-space-1);border-bottom:none}.debug-panel__title{font-size:var(--mp-font-xs);font-weight:600;color:var(--mp-accent-text)}.debug-panel__toggle{height:22px;min-width:22px;padding:0 var(--mp-space-2);border:1px solid var(--mp-accent-border);border-radius:var(--mp-radius-pill);background:var(--mp-card-bg);color:var(--mp-accent-text);font-size:var(--mp-font-xs);font-weight:600;line-height:1;cursor:pointer;transition:border-color var(--mp-transition),background var(--mp-transition)}.debug-panel__toggle:hover{border-color:var(--mp-accent-border-hover);background:var(--mp-accent-soft)}.debug-panel__readout{margin:0;padding:var(--mp-space-3) var(--mp-space-5);border-bottom:1px solid var(--mp-card-border);display:flex;flex-direction:column;gap:var(--mp-space-1)}.debug-panel__readout-row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--mp-space-3);min-height:16px}.debug-panel__readout-label{flex:0 0 auto;font-size:var(--mp-font-2xs);font-weight:600;color:var(--mp-text-muted)}.debug-panel__readout-value{margin:0;min-width:0;overflow-wrap:anywhere;text-align:right;font-size:var(--mp-font-2xs);font-weight:600;font-variant-numeric:tabular-nums;color:var(--mp-accent-text)}.debug-panel__filter{padding:var(--mp-space-3) var(--mp-space-5);border-bottom:1px solid var(--mp-card-border)}.debug-panel__filter-input{width:100%;height:24px;box-sizing:border-box;padding:0 var(--mp-space-5);border:1px solid var(--mp-border-strong);border-radius:var(--mp-radius-pill);background:var(--mp-card-bg);color:var(--mp-text-main);font-size:var(--mp-font-xs);font-weight:600;line-height:1;outline:none;transition:border-color var(--mp-transition)}.debug-panel__filter-input::placeholder{color:var(--mp-text-muted);font-weight:400}.debug-panel__filter-input:hover{border-color:var(--mp-border-hover)}.debug-panel__filter-input:focus{border-color:var(--mp-accent-border-hover)}.debug-panel__body{flex:1 1 auto;overflow-y:auto;padding:var(--mp-space-4) var(--mp-space-5);display:flex;flex-direction:column;gap:var(--mp-space-4)}.debug-panel__group{flex-shrink:0;background:var(--mp-card-bg);border:1px solid var(--mp-card-border);border-radius:var(--mp-radius-sm);overflow:hidden}.debug-panel__group-header{display:block;width:100%;padding:var(--mp-space-3) var(--mp-space-4);border:none;background:transparent;text-align:left;font-size:var(--mp-font-xs);font-weight:600;color:var(--mp-text-strong);cursor:pointer;transition:background var(--mp-transition)}.debug-panel__group-header:hover{background:var(--mp-accent-soft)}.debug-panel__group--collapsed .debug-panel__group-header{color:var(--mp-text-muted)}.debug-panel__group-items{display:flex;flex-wrap:wrap;gap:var(--mp-space-2);padding:var(--mp-space-2) var(--mp-space-4) var(--mp-space-4)}.debug-panel__action{height:24px;padding:0 var(--mp-space-5);border:1px solid var(--mp-border-strong);border-radius:var(--mp-radius-pill);background:var(--mp-card-bg);color:var(--mp-text-strong);font-size:var(--mp-font-xs);font-weight:600;line-height:1;cursor:pointer;transition:border-color var(--mp-transition),background var(--mp-transition),color var(--mp-transition)}.debug-panel__action:hover{border-color:var(--mp-accent-border-hover);background:var(--mp-accent-soft);color:var(--mp-accent-text)}.debug-panel__action--danger{border-color:var(--mp-danger-border);color:var(--mp-danger-text)}.debug-panel__action--danger:hover{border-color:var(--mp-danger-border-hover);background:var(--mp-danger-soft);color:var(--mp-danger-text)}.debug-panel__badge{display:inline-block;margin-left:var(--mp-space-2);padding:0 var(--mp-space-1);border:1px solid var(--mp-border-strong);border-radius:var(--mp-radius-pill);font-size:var(--mp-font-2xs);font-weight:600;line-height:1.3;color:var(--mp-text-muted);vertical-align:middle}.debug-panel__control{flex:1 0 100%;display:flex;align-items:center;justify-content:space-between;gap:var(--mp-space-3);min-height:24px}.debug-panel__control-label{font-size:var(--mp-font-xs);font-weight:600;color:var(--mp-text-strong)}.debug-panel__switch{flex:0 0 auto;width:32px;height:18px;padding:0;position:relative;border:1px solid var(--mp-border-strong);border-radius:var(--mp-radius-pill);background:var(--mp-card-bg);cursor:pointer;transition:border-color var(--mp-transition),background var(--mp-transition)}.debug-panel__switch:after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:var(--mp-radius-pill);background:var(--mp-text-muted);transition:left var(--mp-transition),background var(--mp-transition)}.debug-panel__switch:hover{border-color:var(--mp-accent-border-hover)}.debug-panel__switch--on{border-color:var(--mp-accent-border);background:var(--mp-accent-soft)}.debug-panel__switch--on:after{left:16px;background:var(--mp-accent)}.debug-panel__segmented{flex:0 0 auto;display:inline-flex;border:1px solid var(--mp-border-strong);border-radius:var(--mp-radius-pill);background:var(--mp-card-bg);overflow:hidden}.debug-panel__segment{height:22px;padding:0 var(--mp-space-4);border:none;background:transparent;color:var(--mp-text-muted);font-size:var(--mp-font-2xs);font-weight:600;line-height:1;cursor:pointer;transition:background var(--mp-transition),color var(--mp-transition)}.debug-panel__segment:hover{color:var(--mp-accent-text)}.debug-panel__segment--active{background:var(--mp-accent-soft);color:var(--mp-accent-text)}.debug-panel__control--custom{flex-wrap:wrap}.debug-panel__datasets{flex:1 0 100%;display:flex;flex-direction:column;gap:var(--mp-space-2)}.debug-panel__dataset{display:flex;align-items:stretch;gap:var(--mp-space-2)}.debug-panel__dataset-select{flex:1 1 auto;min-width:0;height:24px;padding:0 var(--mp-space-5);border:1px solid var(--mp-border-strong);border-radius:var(--mp-radius-pill);background:var(--mp-card-bg);color:var(--mp-text-strong);font-size:var(--mp-font-xs);font-weight:600;line-height:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;transition:border-color var(--mp-transition),background var(--mp-transition),color var(--mp-transition)}.debug-panel__dataset-select:hover{border-color:var(--mp-accent-border-hover);background:var(--mp-accent-soft);color:var(--mp-accent-text)}.debug-panel__dataset--active .debug-panel__dataset-select{border-color:var(--mp-accent-border);background:var(--mp-accent-soft);color:var(--mp-accent-text)}.debug-panel__dataset-delete{flex:0 0 auto;width:24px;height:24px;padding:0;border:1px solid var(--mp-border-strong);border-radius:var(--mp-radius-pill);background:var(--mp-card-bg);color:var(--mp-text-muted);font-size:var(--mp-font-xs);font-weight:600;line-height:1;cursor:pointer;transition:border-color var(--mp-transition),background var(--mp-transition),color var(--mp-transition)}.debug-panel__dataset-delete:hover{border-color:var(--mp-danger-border-hover);background:var(--mp-danger-soft);color:var(--mp-danger-text)}.debug-panel-snapshot-overlay{--mp-card-bg: #ffffff;--mp-card-border: #e3e7e5;--mp-border-strong: #d4ddd8;--mp-accent-text: #1f5a40;--mp-danger-text: #9f2d2d;--mp-text-main: #0f172a;--mp-text-muted: #64748b;--mp-transition: .14s ease;--mp-radius-sm: 8px;--mp-space-1: 4px;--mp-space-3: 8px;--mp-space-5: 12px;--mp-font-2xs: 11px;--mp-font-xs: 12px;position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;background:#0f172a73}.debug-panel-snapshot-overlay__card{display:flex;flex-direction:column;gap:var(--mp-space-3);max-width:min(80vw,720px);max-height:80vh;padding:var(--mp-space-5);border:1px solid var(--mp-card-border);border-radius:var(--mp-radius-sm);background:var(--mp-card-bg);box-shadow:0 12px 32px #0f172a40}.debug-panel-snapshot-overlay__header{display:flex;align-items:center;justify-content:space-between;gap:var(--mp-space-5)}.debug-panel-snapshot-overlay__title{font-size:var(--mp-font-xs);font-weight:600;color:var(--mp-text-main)}.debug-panel-snapshot-overlay__close{width:20px;height:20px;padding:0;border:1px solid var(--mp-border-strong);border-radius:999px;background:var(--mp-card-bg);color:var(--mp-text-muted);font-size:var(--mp-font-xs);line-height:1;cursor:pointer;transition:color var(--mp-transition),border-color var(--mp-transition)}.debug-panel-snapshot-overlay__close:hover{color:var(--mp-accent-text);border-color:var(--mp-accent-text)}.debug-panel-snapshot-overlay__image{min-height:0;max-width:100%;max-height:60vh;object-fit:contain;border:1px solid var(--mp-card-border);border-radius:var(--mp-radius-sm)}.debug-panel-snapshot-overlay__meta{font-size:var(--mp-font-2xs);font-weight:600;font-variant-numeric:tabular-nums;color:var(--mp-accent-text);text-align:right}.debug-panel-snapshot-overlay__failure{padding:var(--mp-space-3) 0;font-size:var(--mp-font-xs);font-weight:600;color:var(--mp-danger-text)}.debug-panel-injection{--mp-card-bg: #ffffff;--mp-card-border: #e3e7e5;--mp-border-strong: #d4ddd8;--mp-border-hover: #bcc8c2;--mp-accent-soft: #e8f4ee;--mp-accent-border: #c3d7cb;--mp-accent-border-hover: #a7c2b4;--mp-accent-text: #1f5a40;--mp-danger-soft: #fbeaea;--mp-danger-border: #e3b8b8;--mp-danger-text: #9f2d2d;--mp-text-main: #0f172a;--mp-text-strong: #334155;--mp-text-muted: #64748b;--mp-transition: .14s ease;--mp-radius-sm: 8px;--mp-radius-pill: 999px;--mp-space-1: 4px;--mp-space-2: 6px;--mp-space-3: 8px;--mp-space-4: 10px;--mp-space-5: 12px;--mp-font-2xs: 11px;--mp-font-xs: 12px;position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;background:#0f172a73}.debug-panel-injection__card{display:flex;flex-direction:column;gap:var(--mp-space-3);width:min(86vw,560px);max-height:80vh;padding:var(--mp-space-5);border:1px solid var(--mp-card-border);border-radius:var(--mp-radius-sm);background:var(--mp-card-bg);box-shadow:0 12px 32px #0f172a40}.debug-panel-injection__header{display:flex;align-items:center;justify-content:space-between;gap:var(--mp-space-5)}.debug-panel-injection__title{font-size:var(--mp-font-xs);font-weight:600;color:var(--mp-text-main)}.debug-panel-injection__close{width:20px;height:20px;padding:0;border:1px solid var(--mp-border-strong);border-radius:var(--mp-radius-pill);background:var(--mp-card-bg);color:var(--mp-text-muted);font-size:var(--mp-font-xs);line-height:1;cursor:pointer;transition:color var(--mp-transition),border-color var(--mp-transition)}.debug-panel-injection__close:hover{color:var(--mp-accent-text);border-color:var(--mp-accent-text)}.debug-panel-injection__section{display:flex;flex-direction:column;gap:var(--mp-space-2)}.debug-panel-injection__section-head{display:flex;align-items:center;justify-content:space-between;gap:var(--mp-space-3)}.debug-panel-injection__section-title{font-size:var(--mp-font-2xs);font-weight:600;color:var(--mp-text-muted)}.debug-panel-injection__ref{height:22px;max-width:200px;padding:0 var(--mp-space-3);border:1px solid var(--mp-border-strong);border-radius:var(--mp-radius-pill);background:var(--mp-card-bg);color:var(--mp-text-muted);font-size:var(--mp-font-2xs);font-weight:600;cursor:pointer;outline:none;transition:border-color var(--mp-transition),color var(--mp-transition)}.debug-panel-injection__ref:hover{border-color:var(--mp-accent-border-hover);color:var(--mp-accent-text)}.debug-panel-injection__payload{width:100%;box-sizing:border-box;padding:var(--mp-space-3) var(--mp-space-4);border:1px solid var(--mp-border-strong);border-radius:var(--mp-radius-sm);background:var(--mp-card-bg);color:var(--mp-text-main);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--mp-font-2xs);line-height:1.5;resize:vertical;outline:none;overflow-wrap:anywhere;transition:border-color var(--mp-transition)}.debug-panel-injection__payload:hover{border-color:var(--mp-border-hover)}.debug-panel-injection__payload:focus{border-color:var(--mp-accent-border-hover)}.debug-panel-injection__payload--map{min-height:120px}.debug-panel-injection__payload--path{min-height:64px}.debug-panel-injection__error{padding:var(--mp-space-2) var(--mp-space-4);border:1px solid var(--mp-danger-border);border-radius:var(--mp-radius-sm);background:var(--mp-danger-soft);color:var(--mp-danger-text);font-size:var(--mp-font-2xs);font-weight:600;overflow-wrap:anywhere}.debug-panel-injection__status{font-size:var(--mp-font-2xs);font-weight:600;color:var(--mp-accent-text)}.debug-panel-injection__footer{display:flex;align-items:center;gap:var(--mp-space-3)}.debug-panel-injection__apply{flex:0 0 auto;height:24px;padding:0 var(--mp-space-5);border:1px solid var(--mp-accent-border);border-radius:var(--mp-radius-pill);background:var(--mp-card-bg);color:var(--mp-accent-text);font-size:var(--mp-font-xs);font-weight:600;line-height:1;cursor:pointer;transition:border-color var(--mp-transition),background var(--mp-transition)}.debug-panel-injection__apply:hover{border-color:var(--mp-accent-border-hover);background:var(--mp-accent-soft)}.debug-panel-injection__name{flex:1 1 auto;min-width:0;height:24px;box-sizing:border-box;padding:0 var(--mp-space-5);border:1px solid var(--mp-border-strong);border-radius:var(--mp-radius-pill);background:var(--mp-card-bg);color:var(--mp-text-main);font-size:var(--mp-font-xs);font-weight:600;line-height:1;outline:none;transition:border-color var(--mp-transition)}.debug-panel-injection__name::placeholder{color:var(--mp-text-muted);font-weight:400}.debug-panel-injection__name:hover{border-color:var(--mp-border-hover)}.debug-panel-injection__name:focus{border-color:var(--mp-accent-border-hover)}*{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body{overflow:hidden}#container{position:fixed;top:0;left:0;height:100%;width:100%}canvas{touch-action:none;-webkit-touch-callout:none;user-select:none;-webkit-user-select:none}\n/*$vite$:1*/',document.head.appendChild(i);var n="undefined"!=typeof document?document.currentScript:null;const r=function(c,e,t){let i=Promise.resolve();function n(c){const e=new Event("vite:preloadError",{cancelable:!0});if(e.payload=c,window.dispatchEvent(e),!e.defaultPrevented)throw c}return i.then(e=>{for(const c of e||[])"rejected"===c.status&&n(c.reason);return c().catch(n)})};var s=(c=>(c.Application="application",c.WebGLPipes="webgl-pipes",c.WebGLPipesAdaptor="webgl-pipes-adaptor",c.WebGLSystem="webgl-system",c.WebGPUPipes="webgpu-pipes",c.WebGPUPipesAdaptor="webgpu-pipes-adaptor",c.WebGPUSystem="webgpu-system",c.CanvasSystem="canvas-system",c.CanvasPipesAdaptor="canvas-pipes-adaptor",c.CanvasPipes="canvas-pipes",c.Asset="asset",c.LoadParser="load-parser",c.ResolveParser="resolve-parser",c.CacheParser="cache-parser",c.DetectionParser="detection-parser",c.MaskEffect="mask-effect",c.BlendMode="blend-mode",c.TextureSource="texture-source",c.Environment="environment",c.ShapeBuilder="shape-builder",c.Batcher="batcher",c))(s||{});const a=c=>{if("function"==typeof c||"object"==typeof c&&c.extension){if(!c.extension)throw new Error("Extension class must have an extension object");const e="object"!=typeof c.extension?{type:c.extension}:c.extension;c=__spreadProps(__spreadValues({},e),{ref:c})}if("object"!=typeof c)throw new Error("Invalid extension type");return"string"==typeof(c=__spreadValues({},c)).type&&(c.type=[c.type]),c},o=(c,e)=>{var t;return null!=(t=a(c).priority)?t:e},f={_addHandlers:{},_removeHandlers:{},_queue:{},remove(...c){return c.map(a).forEach(c=>{c.type.forEach(e=>{var t,i;return null==(i=(t=this._removeHandlers)[e])?void 0:i.call(t,c)})}),this},add(...c){return c.map(a).forEach(c=>{c.type.forEach(e=>{var t,i;const n=this._addHandlers,r=this._queue;n[e]?null==(i=n[e])||i.call(n,c):(r[e]=r[e]||[],null==(t=r[e])||t.push(c))})}),this},handle(c,e,t){var i;const n=this._addHandlers,r=this._removeHandlers;if(n[c]||r[c])throw new Error(`Extension type ${c} already has a handler`);n[c]=e,r[c]=t;const s=this._queue;return s[c]&&(null==(i=s[c])||i.forEach(c=>e(c)),delete s[c]),this},handleByMap(c,e){return this.handle(c,c=>{c.name&&(e[c.name]=c.ref)},c=>{c.name&&delete e[c.name]})},handleByNamedList(c,e,t=-1){return this.handle(c,c=>{e.findIndex(e=>e.name===c.name)>=0||(e.push({name:c.name,value:c.ref}),e.sort((c,e)=>o(e.value,t)-o(c.value,t)))},c=>{const t=e.findIndex(e=>e.name===c.name);-1!==t&&e.splice(t,1)})},handleByList(c,e,t=-1){return this.handle(c,c=>{e.includes(c.ref)||(e.push(c.ref),e.sort((c,e)=>o(e,t)-o(c,t)))},c=>{const t=e.indexOf(c.ref);-1!==t&&e.splice(t,1)})},mixin(c,...e){for(const t of e)Object.defineProperties(c.prototype,Object.getOwnPropertyDescriptors(t))}},l={extension:{type:s.Environment,name:"browser",priority:-1},test:()=>!0,load:()=>__async(null,null,function*(){yield r(()=>Promise.resolve().then(()=>qA),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href)})},d={extension:{type:s.Environment,name:"webworker",priority:0},test:()=>"undefined"!=typeof self&&void 0!==self.WorkerGlobalScope,load:()=>__async(null,null,function*(){yield r(()=>Promise.resolve().then(()=>KA),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href)})};class h{constructor(c,e,t){this._x=e||0,this._y=t||0,this._observer=c}clone(c){return new h(null!=c?c:this._observer,this._x,this._y)}set(c=0,e=c){return this._x===c&&this._y===e||(this._x=c,this._y=e,this._observer._onUpdate(this)),this}copyFrom(c){return this._x===c.x&&this._y===c.y||(this._x=c.x,this._y=c.y,this._observer._onUpdate(this)),this}copyTo(c){return c.set(this._x,this._y),c}equals(c){return c.x===this._x&&c.y===this._y}toString(){return`[pixi.js/math:ObservablePoint x=${this._x} y=${this._y} scope=${this._observer}]`}get x(){return this._x}set x(c){this._x!==c&&(this._x=c,this._observer._onUpdate(this))}get y(){return this._y}set y(c){this._y!==c&&(this._y=c,this._observer._onUpdate(this))}}function u(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}var p,g={exports:{}};var m=(p||(p=1,function(c){var e=Object.prototype.hasOwnProperty,t="~";function i(){}function n(c,e,t){this.fn=c,this.context=e,this.once=t||!1}function r(c,e,i,r,s){if("function"!=typeof i)throw new TypeError("The listener must be a function");var a=new n(i,r||c,s),o=t?t+e:e;return c._events[o]?c._events[o].fn?c._events[o]=[c._events[o],a]:c._events[o].push(a):(c._events[o]=a,c._eventsCount++),c}function s(c,e){0===--c._eventsCount?c._events=new i:delete c._events[e]}function a(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),(new i).__proto__||(t=!1)),a.prototype.eventNames=function(){var c,i,n=[];if(0===this._eventsCount)return n;for(i in c=this._events)e.call(c,i)&&n.push(t?i.slice(1):i);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(c)):n},a.prototype.listeners=function(c){var e=t?t+c:c,i=this._events[e];if(!i)return[];if(i.fn)return[i.fn];for(var n=0,r=i.length,s=new Array(r);n<r;n++)s[n]=i[n].fn;return s},a.prototype.listenerCount=function(c){var e=t?t+c:c,i=this._events[e];return i?i.fn?1:i.length:0},a.prototype.emit=function(c,e,i,n,r,s){var a=t?t+c:c;if(!this._events[a])return!1;var o,f,l=this._events[a],d=arguments.length;if(l.fn){switch(l.once&&this.removeListener(c,l.fn,void 0,!0),d){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,i),!0;case 4:return l.fn.call(l.context,e,i,n),!0;case 5:return l.fn.call(l.context,e,i,n,r),!0;case 6:return l.fn.call(l.context,e,i,n,r,s),!0}for(f=1,o=new Array(d-1);f<d;f++)o[f-1]=arguments[f];l.fn.apply(l.context,o)}else{var h,u=l.length;for(f=0;f<u;f++)switch(l[f].once&&this.removeListener(c,l[f].fn,void 0,!0),d){case 1:l[f].fn.call(l[f].context);break;case 2:l[f].fn.call(l[f].context,e);break;case 3:l[f].fn.call(l[f].context,e,i);break;case 4:l[f].fn.call(l[f].context,e,i,n);break;default:if(!o)for(h=1,o=new Array(d-1);h<d;h++)o[h-1]=arguments[h];l[f].fn.apply(l[f].context,o)}}return!0},a.prototype.on=function(c,e,t){return r(this,c,e,t,!1)},a.prototype.once=function(c,e,t){return r(this,c,e,t,!0)},a.prototype.removeListener=function(c,e,i,n){var r=t?t+c:c;if(!this._events[r])return this;if(!e)return s(this,r),this;var a=this._events[r];if(a.fn)a.fn!==e||n&&!a.once||i&&a.context!==i||s(this,r);else{for(var o=0,f=[],l=a.length;o<l;o++)(a[o].fn!==e||n&&!a[o].once||i&&a[o].context!==i)&&f.push(a[o]);f.length?this._events[r]=1===f.length?f[0]:f:s(this,r)}return this},a.prototype.removeAllListeners=function(c){var e;return c?(e=t?t+c:c,this._events[e]&&s(this,e)):(this._events=new i,this._eventsCount=0),this},a.prototype.off=a.prototype.removeListener,a.prototype.addListener=a.prototype.on,a.prefixed=t,a.EventEmitter=a,c.exports=a}(g)),g.exports);const b=u(m),v=2*Math.PI,y=180/Math.PI,_=Math.PI/180;class x{constructor(c=0,e=0){this.x=0,this.y=0,this.x=c,this.y=e}clone(){return new x(this.x,this.y)}copyFrom(c){return this.set(c.x,c.y),this}copyTo(c){return c.set(this.x,this.y),c}equals(c){return c.x===this.x&&c.y===this.y}set(c=0,e=c){return this.x=c,this.y=e,this}toString(){return`[pixi.js/math:Point x=${this.x} y=${this.y}]`}static get shared(){return S.x=0,S.y=0,S}}const S=new x;class w{constructor(c=1,e=0,t=0,i=1,n=0,r=0){this.array=null,this.a=c,this.b=e,this.c=t,this.d=i,this.tx=n,this.ty=r}fromArray(c){this.a=c[0],this.b=c[1],this.c=c[3],this.d=c[4],this.tx=c[2],this.ty=c[5]}set(c,e,t,i,n,r){return this.a=c,this.b=e,this.c=t,this.d=i,this.tx=n,this.ty=r,this}toArray(c,e){this.array||(this.array=new Float32Array(9));const t=e||this.array;return c?(t[0]=this.a,t[1]=this.b,t[2]=0,t[3]=this.c,t[4]=this.d,t[5]=0,t[6]=this.tx,t[7]=this.ty,t[8]=1):(t[0]=this.a,t[1]=this.c,t[2]=this.tx,t[3]=this.b,t[4]=this.d,t[5]=this.ty,t[6]=0,t[7]=0,t[8]=1),t}apply(c,e){e=e||new x;const t=c.x,i=c.y;return e.x=this.a*t+this.c*i+this.tx,e.y=this.b*t+this.d*i+this.ty,e}applyInverse(c,e){e=e||new x;const t=this.a,i=this.b,n=this.c,r=this.d,s=this.tx,a=this.ty,o=1/(t*r+n*-i),f=c.x,l=c.y;return e.x=r*o*f+-n*o*l+(a*n-s*r)*o,e.y=t*o*l+-i*o*f+(-a*t+s*i)*o,e}translate(c,e){return this.tx+=c,this.ty+=e,this}scale(c,e){return this.a*=c,this.d*=e,this.c*=c,this.b*=e,this.tx*=c,this.ty*=e,this}rotate(c){const e=Math.cos(c),t=Math.sin(c),i=this.a,n=this.c,r=this.tx;return this.a=i*e-this.b*t,this.b=i*t+this.b*e,this.c=n*e-this.d*t,this.d=n*t+this.d*e,this.tx=r*e-this.ty*t,this.ty=r*t+this.ty*e,this}append(c){const e=this.a,t=this.b,i=this.c,n=this.d;return this.a=c.a*e+c.b*i,this.b=c.a*t+c.b*n,this.c=c.c*e+c.d*i,this.d=c.c*t+c.d*n,this.tx=c.tx*e+c.ty*i+this.tx,this.ty=c.tx*t+c.ty*n+this.ty,this}appendFrom(c,e){const t=c.a,i=c.b,n=c.c,r=c.d,s=c.tx,a=c.ty,o=e.a,f=e.b,l=e.c,d=e.d;return this.a=t*o+i*l,this.b=t*f+i*d,this.c=n*o+r*l,this.d=n*f+r*d,this.tx=s*o+a*l+e.tx,this.ty=s*f+a*d+e.ty,this}setTransform(c,e,t,i,n,r,s,a,o){return this.a=Math.cos(s+o)*n,this.b=Math.sin(s+o)*n,this.c=-Math.sin(s-a)*r,this.d=Math.cos(s-a)*r,this.tx=c-(t*this.a+i*this.c),this.ty=e-(t*this.b+i*this.d),this}prepend(c){const e=this.tx;if(1!==c.a||0!==c.b||0!==c.c||1!==c.d){const e=this.a,t=this.c;this.a=e*c.a+this.b*c.c,this.b=e*c.b+this.b*c.d,this.c=t*c.a+this.d*c.c,this.d=t*c.b+this.d*c.d}return this.tx=e*c.a+this.ty*c.c+c.tx,this.ty=e*c.b+this.ty*c.d+c.ty,this}decompose(c){const e=this.a,t=this.b,i=this.c,n=this.d,r=c.pivot,s=-Math.atan2(-i,n),a=Math.atan2(t,e),o=Math.abs(s+a);return o<1e-5||Math.abs(v-o)<1e-5?(c.rotation=a,c.skew.x=c.skew.y=0):(c.rotation=0,c.skew.x=s,c.skew.y=a),c.scale.x=Math.sqrt(e*e+t*t),c.scale.y=Math.sqrt(i*i+n*n),c.position.x=this.tx+(r.x*e+r.y*i),c.position.y=this.ty+(r.x*t+r.y*n),c}invert(){const c=this.a,e=this.b,t=this.c,i=this.d,n=this.tx,r=c*i-e*t;return this.a=i/r,this.b=-e/r,this.c=-t/r,this.d=c/r,this.tx=(t*this.ty-i*n)/r,this.ty=-(c*this.ty-e*n)/r,this}isIdentity(){return 1===this.a&&0===this.b&&0===this.c&&1===this.d&&0===this.tx&&0===this.ty}identity(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this}clone(){const c=new w;return c.a=this.a,c.b=this.b,c.c=this.c,c.d=this.d,c.tx=this.tx,c.ty=this.ty,c}copyTo(c){return c.a=this.a,c.b=this.b,c.c=this.c,c.d=this.d,c.tx=this.tx,c.ty=this.ty,c}copyFrom(c){return this.a=c.a,this.b=c.b,this.c=c.c,this.d=c.d,this.tx=c.tx,this.ty=c.ty,this}equals(c){return c.a===this.a&&c.b===this.b&&c.c===this.c&&c.d===this.d&&c.tx===this.tx&&c.ty===this.ty}toString(){return`[pixi.js:Matrix a=${this.a} b=${this.b} c=${this.c} d=${this.d} tx=${this.tx} ty=${this.ty}]`}static get IDENTITY(){return A.identity()}static get shared(){return C.identity()}}const C=new w,A=new w,T=[1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1,0,1],P=[0,1,1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1],M=[0,-1,-1,-1,0,1,1,1,0,1,1,1,0,-1,-1,-1],E=[1,1,0,-1,-1,-1,0,1,-1,-1,0,1,1,1,0,-1],R=[],k=[],F=Math.sign;!function(){for(let c=0;c<16;c++){const e=[];R.push(e);for(let t=0;t<16;t++){const i=F(T[c]*T[t]+M[c]*P[t]),n=F(P[c]*T[t]+E[c]*P[t]),r=F(T[c]*M[t]+M[c]*E[t]),s=F(P[c]*M[t]+E[c]*E[t]);for(let c=0;c<16;c++)if(T[c]===i&&P[c]===n&&M[c]===r&&E[c]===s){e.push(c);break}}}for(let c=0;c<16;c++){const e=new w;e.set(T[c],P[c],M[c],E[c],0,0),k.push(e)}}();const I={E:0,SE:1,S:2,SW:3,W:4,NW:5,N:6,NE:7,MIRROR_VERTICAL:8,MAIN_DIAGONAL:10,MIRROR_HORIZONTAL:12,REVERSE_DIAGONAL:14,uX:c=>T[c],uY:c=>P[c],vX:c=>M[c],vY:c=>E[c],inv:c=>8&c?15&c:7&-c,add:(c,e)=>R[c][e],sub:(c,e)=>R[c][I.inv(e)],rotate180:c=>4^c,isVertical:c=>2==(3&c),byDirection:(c,e)=>2*Math.abs(c)<=Math.abs(e)?e>=0?I.S:I.N:2*Math.abs(e)<=Math.abs(c)?c>0?I.E:I.W:e>0?c>0?I.SE:I.SW:c>0?I.NE:I.NW,matrixAppendRotationInv:(c,e,t=0,i=0,n=0,r=0)=>{const s=k[I.inv(e)],a=s.a,o=s.b,f=s.c,l=s.d,d=t-Math.min(0,a*n,f*r,a*n+f*r),h=i-Math.min(0,o*n,l*r,o*n+l*r),u=c.a,p=c.b,g=c.c,m=c.d;c.a=a*u+o*g,c.b=a*p+o*m,c.c=f*u+l*g,c.d=f*p+l*m,c.tx=d*u+h*g+c.tx,c.ty=d*p+h*m+c.ty},transformRectCoords:(c,e,t,i)=>{const{x:n,y:r,width:s,height:a}=c,{x:o,y:f,width:l,height:d}=e;return t===I.E?(i.set(n+o,r+f,s,a),i):t===I.S?i.set(l-r-a+o,n+f,a,s):t===I.W?i.set(l-n-s+o,d-r-a+f,s,a):t===I.N?i.set(r+o,d-n-s+f,a,s):i.set(n+o,r+f,s,a)}},B=[new x,new x,new x,new x];class D{constructor(c=0,e=0,t=0,i=0){this.type="rectangle",this.x=Number(c),this.y=Number(e),this.width=Number(t),this.height=Number(i)}get left(){return this.x}get right(){return this.x+this.width}get top(){return this.y}get bottom(){return this.y+this.height}isEmpty(){return this.left===this.right||this.top===this.bottom}static get EMPTY(){return new D(0,0,0,0)}clone(){return new D(this.x,this.y,this.width,this.height)}copyFromBounds(c){return this.x=c.minX,this.y=c.minY,this.width=c.maxX-c.minX,this.height=c.maxY-c.minY,this}copyFrom(c){return this.x=c.x,this.y=c.y,this.width=c.width,this.height=c.height,this}copyTo(c){return c.copyFrom(this),c}contains(c,e){return!(this.width<=0||this.height<=0)&&(c>=this.x&&c<this.x+this.width&&e>=this.y&&e<this.y+this.height)}strokeContains(c,e,t,i=.5){const{width:n,height:r}=this;if(n<=0||r<=0)return!1;const s=this.x,a=this.y,o=t*(1-i),f=t-o;return c>=s-o&&c<=s+n+o&&e>=a-o&&e<=a+r+o&&!(c>s+f&&c<s+n-f&&e>a+f&&e<a+r-f)}intersects(c,e){if(!e){const e=this.x<c.x?c.x:this.x;if((this.right>c.right?c.right:this.right)<=e)return!1;const t=this.y<c.y?c.y:this.y;return(this.bottom>c.bottom?c.bottom:this.bottom)>t}const t=this.left,i=this.right,n=this.top,r=this.bottom;if(i<=t||r<=n)return!1;const s=B[0].set(c.left,c.top),a=B[1].set(c.left,c.bottom),o=B[2].set(c.right,c.top),f=B[3].set(c.right,c.bottom);if(o.x<=s.x||a.y<=s.y)return!1;const l=Math.sign(e.a*e.d-e.b*e.c);if(0===l)return!1;if(e.apply(s,s),e.apply(a,a),e.apply(o,o),e.apply(f,f),Math.max(s.x,a.x,o.x,f.x)<=t||Math.min(s.x,a.x,o.x,f.x)>=i||Math.max(s.y,a.y,o.y,f.y)<=n||Math.min(s.y,a.y,o.y,f.y)>=r)return!1;const d=l*(a.y-s.y),h=l*(s.x-a.x),u=d*t+h*n,p=d*i+h*n,g=d*t+h*r,m=d*i+h*r;if(Math.max(u,p,g,m)<=d*s.x+h*s.y||Math.min(u,p,g,m)>=d*f.x+h*f.y)return!1;const b=l*(s.y-o.y),v=l*(o.x-s.x),y=b*t+v*n,_=b*i+v*n,x=b*t+v*r,S=b*i+v*r;return!(Math.max(y,_,x,S)<=b*s.x+v*s.y||Math.min(y,_,x,S)>=b*f.x+v*f.y)}pad(c=0,e=c){return this.x-=c,this.y-=e,this.width+=2*c,this.height+=2*e,this}fit(c){const e=Math.max(this.x,c.x),t=Math.min(this.x+this.width,c.x+c.width),i=Math.max(this.y,c.y),n=Math.min(this.y+this.height,c.y+c.height);return this.x=e,this.width=Math.max(t-e,0),this.y=i,this.height=Math.max(n-i,0),this}ceil(c=1,e=.001){const t=Math.ceil((this.x+this.width-e)*c)/c,i=Math.ceil((this.y+this.height-e)*c)/c;return this.x=Math.floor((this.x+e)*c)/c,this.y=Math.floor((this.y+e)*c)/c,this.width=t-this.x,this.height=i-this.y,this}scale(c,e=c){return this.x*=c,this.y*=e,this.width*=c,this.height*=e,this}enlarge(c){const e=Math.min(this.x,c.x),t=Math.max(this.x+this.width,c.x+c.width),i=Math.min(this.y,c.y),n=Math.max(this.y+this.height,c.y+c.height);return this.x=e,this.width=t-e,this.y=i,this.height=n-i,this}getBounds(c){return c||(c=new D),c.copyFrom(this),c}containsRect(c){if(this.width<=0||this.height<=0)return!1;const e=c.x,t=c.y,i=c.x+c.width,n=c.y+c.height;return e>=this.x&&e<this.x+this.width&&t>=this.y&&t<this.y+this.height&&i>=this.x&&i<this.x+this.width&&n>=this.y&&n<this.y+this.height}set(c,e,t,i){return this.x=c,this.y=e,this.width=t,this.height=i,this}toString(){return`[pixi.js/math:Rectangle x=${this.x} y=${this.y} width=${this.width} height=${this.height}]`}}const O={default:-1};function L(c="default"){return void 0===O[c]&&(O[c]=-1),++O[c]}const z=new Set,G="8.0.0",U={quiet:!1,noColor:!1},V=(c,e,t=3)=>{if(U.quiet||z.has(e))return;let i=(new Error).stack;const n=`${e}\nDeprecated since v${c}`,r="function"==typeof console.groupCollapsed&&!U.noColor;void 0===i?console.warn("PixiJS Deprecation Warning: ",n):(i=i.split("\n").splice(t).join("\n"),r?(console.groupCollapsed("%cPixiJS Deprecation Warning: %c%s","color:#614108;background:#fffbe6","font-weight:normal;color:#614108;background:#fffbe6",n),console.warn(i),console.groupEnd()):(console.warn("PixiJS Deprecation Warning: ",n),console.warn(i))),z.add(e)};Object.defineProperties(V,{quiet:{get:()=>U.quiet,set:c=>{U.quiet=c},enumerable:!0,configurable:!1},noColor:{get:()=>U.noColor,set:c=>{U.noColor=c},enumerable:!0,configurable:!1}});const N=()=>{};function W(c){return c+=0===c?1:0,--c,c|=c>>>1,c|=c>>>2,c|=c>>>4,c|=c>>>8,(c|=c>>>16)+1}function H(c){return!(c&c-1||!c)}function j(c){const e={};for(const t in c)void 0!==c[t]&&(e[t]=c[t]);return e}const Y=Object.create(null);const X=class c extends b{constructor(e={}){var t,i,n,r,s,a,o;super(),this._resourceType="textureSampler",this._touched=0,this._maxAnisotropy=1,this.destroyed=!1,e=__spreadValues(__spreadValues({},c.defaultOptions),e),this.addressMode=e.addressMode,this.addressModeU=null!=(t=e.addressModeU)?t:this.addressModeU,this.addressModeV=null!=(i=e.addressModeV)?i:this.addressModeV,this.addressModeW=null!=(n=e.addressModeW)?n:this.addressModeW,this.scaleMode=e.scaleMode,this.magFilter=null!=(r=e.magFilter)?r:this.magFilter,this.minFilter=null!=(s=e.minFilter)?s:this.minFilter,this.mipmapFilter=null!=(a=e.mipmapFilter)?a:this.mipmapFilter,this.lodMinClamp=e.lodMinClamp,this.lodMaxClamp=e.lodMaxClamp,this.compare=e.compare,this.maxAnisotropy=null!=(o=e.maxAnisotropy)?o:1}set addressMode(c){this.addressModeU=c,this.addressModeV=c,this.addressModeW=c}get addressMode(){return this.addressModeU}set wrapMode(c){V(G,"TextureStyle.wrapMode is now TextureStyle.addressMode"),this.addressMode=c}get wrapMode(){return this.addressMode}set scaleMode(c){this.magFilter=c,this.minFilter=c,this.mipmapFilter=c}get scaleMode(){return this.magFilter}set maxAnisotropy(c){this._maxAnisotropy=Math.min(c,16),this._maxAnisotropy>1&&(this.scaleMode="linear")}get maxAnisotropy(){return this._maxAnisotropy}get _resourceId(){return this._sharedResourceId||this._generateResourceId()}update(){this._sharedResourceId=null,this.emit("change",this)}_generateResourceId(){const c=`${this.addressModeU}-${this.addressModeV}-${this.addressModeW}-${this.magFilter}-${this.minFilter}-${this.mipmapFilter}-${this.lodMinClamp}-${this.lodMaxClamp}-${this.compare}-${this._maxAnisotropy}`;return this._sharedResourceId=function(c){const e=Y[c];return void 0===e&&(Y[c]=L("resource")),e}(c),this._resourceId}destroy(){this.destroyed=!0,this.emit("destroy",this),this.emit("change",this),this.removeAllListeners()}};X.defaultOptions={addressMode:"clamp-to-edge",scaleMode:"linear"};let Z=X;const q=class c extends b{constructor(e={}){var t,i,n,r;super(),this.options=e,this._gpuData=Object.create(null),this._gcLastUsed=-1,this.uid=L("textureSource"),this._resourceType="textureSource",this._resourceId=L("resource"),this.uploadMethodId="unknown",this._resolution=1,this.pixelWidth=1,this.pixelHeight=1,this.width=1,this.height=1,this.sampleCount=1,this.mipLevelCount=1,this.autoGenerateMipmaps=!1,this.format="rgba8unorm",this.dimension="2d",this.viewDimension="2d",this.arrayLayerCount=1,this.antialias=!1,this._touched=0,this._batchTick=-1,this._textureBindLocation=-1,e=__spreadValues(__spreadValues({},c.defaultOptions),e),this.label=null!=(t=e.label)?t:"",this.resource=e.resource,this.autoGarbageCollect=e.autoGarbageCollect,this._resolution=e.resolution,e.width?this.pixelWidth=e.width*this._resolution:this.pixelWidth=this.resource&&null!=(i=this.resourceWidth)?i:1,e.height?this.pixelHeight=e.height*this._resolution:this.pixelHeight=this.resource&&null!=(n=this.resourceHeight)?n:1,this.width=this.pixelWidth/this._resolution,this.height=this.pixelHeight/this._resolution,this.format=e.format,this.dimension=e.dimensions,this.viewDimension=null!=(r=e.viewDimension)?r:e.dimensions,this.arrayLayerCount=e.arrayLayerCount,this.mipLevelCount=e.mipLevelCount,this.autoGenerateMipmaps=e.autoGenerateMipmaps,this.sampleCount=e.sampleCount,this.antialias=e.antialias,this.alphaMode=e.alphaMode,this.style=new Z(j(e)),this.destroyed=!1,this._refreshPOT()}get source(){return this}get style(){return this._style}set style(c){var e,t;this.style!==c&&(null==(e=this._style)||e.off("change",this._onStyleChange,this),this._style=c,null==(t=this._style)||t.on("change",this._onStyleChange,this),this._onStyleChange())}set maxAnisotropy(c){this._style.maxAnisotropy=c}get maxAnisotropy(){return this._style.maxAnisotropy}get addressMode(){return this._style.addressMode}set addressMode(c){this._style.addressMode=c}get repeatMode(){return this._style.addressMode}set repeatMode(c){this._style.addressMode=c}get magFilter(){return this._style.magFilter}set magFilter(c){this._style.magFilter=c}get minFilter(){return this._style.minFilter}set minFilter(c){this._style.minFilter=c}get mipmapFilter(){return this._style.mipmapFilter}set mipmapFilter(c){this._style.mipmapFilter=c}get lodMinClamp(){return this._style.lodMinClamp}set lodMinClamp(c){this._style.lodMinClamp=c}get lodMaxClamp(){return this._style.lodMaxClamp}set lodMaxClamp(c){this._style.lodMaxClamp=c}_onStyleChange(){this.emit("styleChange",this)}update(){if(this.resource){const c=this._resolution;if(this.resize(this.resourceWidth/c,this.resourceHeight/c))return}this.emit("update",this)}destroy(){this.destroyed=!0,this.unload(),this.emit("destroy",this),this._style&&(this._style.destroy(),this._style=null),this.uploadMethodId=null,this.resource=null,this.removeAllListeners()}unload(){var c,e;this._resourceId=L("resource"),this.emit("change",this),this.emit("unload",this);for(const t in this._gpuData)null==(e=null==(c=this._gpuData[t])?void 0:c.destroy)||e.call(c);this._gpuData=Object.create(null)}get resourceWidth(){const{resource:c}=this;return c.naturalWidth||c.videoWidth||c.displayWidth||c.width}get resourceHeight(){const{resource:c}=this;return c.naturalHeight||c.videoHeight||c.displayHeight||c.height}get resolution(){return this._resolution}set resolution(c){this._resolution!==c&&(this._resolution=c,this.width=this.pixelWidth/c,this.height=this.pixelHeight/c)}resize(c,e,t){t||(t=this._resolution),c||(c=this.width),e||(e=this.height);const i=Math.round(c*t),n=Math.round(e*t);return this.width=i/t,this.height=n/t,this._resolution=t,(this.pixelWidth!==i||this.pixelHeight!==n)&&(this._refreshPOT(),this.pixelWidth=i,this.pixelHeight=n,this.emit("resize",this),this._resourceId=L("resource"),this.emit("change",this),!0)}updateMipmaps(){this.autoGenerateMipmaps&&this.mipLevelCount>1&&this.emit("updateMipmaps",this)}set wrapMode(c){this._style.wrapMode=c}get wrapMode(){return this._style.wrapMode}set scaleMode(c){this._style.scaleMode=c}get scaleMode(){return this._style.scaleMode}_refreshPOT(){this.isPowerOfTwo=H(this.pixelWidth)&&H(this.pixelHeight)}static test(c){throw new Error("Unimplemented")}};q.defaultOptions={resolution:1,format:"bgra8unorm",alphaMode:"premultiply-alpha-on-upload",dimensions:"2d",viewDimension:"2d",arrayLayerCount:1,mipLevelCount:1,autoGenerateMipmaps:!1,sampleCount:1,antialias:!1,autoGarbageCollect:!1};let K=q;class Q extends K{constructor(c){const e=c.resource||new Float32Array(c.width*c.height*4);let t=c.format;t||(t=e instanceof Float32Array?"rgba32float":e instanceof Int32Array||e instanceof Uint32Array?"rgba32uint":e instanceof Int16Array||e instanceof Uint16Array?"rgba16uint":(Int8Array,"bgra8unorm")),super(__spreadProps(__spreadValues({},c),{resource:e,format:t})),this.uploadMethodId="buffer"}static test(c){return c instanceof Int8Array||c instanceof Uint8Array||c instanceof Uint8ClampedArray||c instanceof Int16Array||c instanceof Uint16Array||c instanceof Int32Array||c instanceof Uint32Array||c instanceof Float32Array}}Q.extension=s.TextureSource;const J=new w;class ${constructor(c,e){this.mapCoord=new w,this.uClampFrame=new Float32Array(4),this.uClampOffset=new Float32Array(2),this._textureID=-1,this._updateID=0,this.clampOffset=0,this.clampMargin=void 0===e?c.width<10?0:.5:e,this.isSimple=!1,this.texture=c}get texture(){return this._texture}set texture(c){var e;this.texture!==c&&(null==(e=this._texture)||e.removeListener("update",this.update,this),this._texture=c,this._texture.addListener("update",this.update,this),this.update())}multiplyUvs(c,e){void 0===e&&(e=c);const t=this.mapCoord;for(let i=0;i<c.length;i+=2){const n=c[i],r=c[i+1];e[i]=n*t.a+r*t.c+t.tx,e[i+1]=n*t.b+r*t.d+t.ty}return e}update(){const c=this._texture;this._updateID++;const e=c.uvs;this.mapCoord.set(e.x1-e.x0,e.y1-e.y0,e.x3-e.x0,e.y3-e.y0,e.x0,e.y0);const t=c.orig,i=c.trim;i&&(J.set(t.width/i.width,0,0,t.height/i.height,-i.x/i.width,-i.y/i.height),this.mapCoord.append(J));const n=c.source,r=this.uClampFrame,s=this.clampMargin/n._resolution,a=this.clampOffset/n._resolution;return r[0]=(c.frame.x+s+a)/n.width,r[1]=(c.frame.y+s+a)/n.height,r[2]=(c.frame.x+c.frame.width-s+a)/n.width,r[3]=(c.frame.y+c.frame.height-s+a)/n.height,this.uClampOffset[0]=this.clampOffset/n.pixelWidth,this.uClampOffset[1]=this.clampOffset/n.pixelHeight,this.isSimple=c.frame.width===n.width&&c.frame.height===n.height&&0===c.rotate,!0}}class cc extends b{constructor({source:c,label:e,frame:t,orig:i,trim:n,defaultAnchor:r,defaultBorders:s,rotate:a,dynamic:o}={}){var f;if(super(),this.uid=L("texture"),this.uvs={x0:0,y0:0,x1:0,y1:0,x2:0,y2:0,x3:0,y3:0},this.frame=new D,this.noFrame=!1,this.dynamic=!1,this.isTexture=!0,this.label=e,this.source=null!=(f=null==c?void 0:c.source)?f:new K,this.noFrame=!t,t)this.frame.copyFrom(t);else{const{width:c,height:e}=this._source;this.frame.width=c,this.frame.height=e}this.orig=i||this.frame,this.trim=n,this.rotate=null!=a?a:0,this.defaultAnchor=r,this.defaultBorders=s,this.destroyed=!1,this.dynamic=o||!1,this.updateUvs()}set source(c){this._source&&this._source.off("resize",this.update,this),this._source=c,c.on("resize",this.update,this),this.emit("update",this)}get source(){return this._source}get textureMatrix(){return this._textureMatrix||(this._textureMatrix=new $(this)),this._textureMatrix}get width(){return this.orig.width}get height(){return this.orig.height}updateUvs(){const{uvs:c,frame:e}=this,{width:t,height:i}=this._source,n=e.x/t,r=e.y/i,s=e.width/t,a=e.height/i;let o=this.rotate;if(o){const e=s/2,t=a/2,i=n+e,f=r+t;o=I.add(o,I.NW),c.x0=i+e*I.uX(o),c.y0=f+t*I.uY(o),o=I.add(o,2),c.x1=i+e*I.uX(o),c.y1=f+t*I.uY(o),o=I.add(o,2),c.x2=i+e*I.uX(o),c.y2=f+t*I.uY(o),o=I.add(o,2),c.x3=i+e*I.uX(o),c.y3=f+t*I.uY(o)}else c.x0=n,c.y0=r,c.x1=n+s,c.y1=r,c.x2=n+s,c.y2=r+a,c.x3=n,c.y3=r+a}destroy(c=!1){this._source&&(this._source.off("resize",this.update,this),c&&(this._source.destroy(),this._source=null)),this._textureMatrix=null,this.destroyed=!0,this.emit("destroy",this),this.removeAllListeners()}update(){this.noFrame&&(this.frame.width=this._source.width,this.frame.height=this._source.height),this.updateUvs(),this.emit("update",this)}get baseTexture(){return V(G,"Texture.baseTexture is now Texture.source"),this._source}}function ec(c,e,t){const{width:i,height:n}=t.orig,r=t.trim;if(r){const t=r.width,s=r.height;c.minX=r.x-e._x*i,c.maxX=c.minX+t,c.minY=r.y-e._y*n,c.maxY=c.minY+s}else c.minX=-e._x*i,c.maxX=c.minX+i,c.minY=-e._y*n,c.maxY=c.minY+n}cc.EMPTY=new cc({label:"EMPTY",source:new K({label:"EMPTY"})}),cc.EMPTY.destroy=N,cc.WHITE=new cc({source:new Q({resource:new Uint8Array([255,255,255,255]),width:1,height:1,alphaMode:"premultiply-alpha-on-upload",label:"WHITE"}),label:"WHITE"}),cc.WHITE.destroy=N;const tc=new w;class ic{constructor(c=1/0,e=1/0,t=-1/0,i=-1/0){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,this.matrix=tc,this.minX=c,this.minY=e,this.maxX=t,this.maxY=i}isEmpty(){return this.minX>this.maxX||this.minY>this.maxY}get rectangle(){this._rectangle||(this._rectangle=new D);const c=this._rectangle;return this.minX>this.maxX||this.minY>this.maxY?(c.x=0,c.y=0,c.width=0,c.height=0):c.copyFromBounds(this),c}clear(){return this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,this.matrix=tc,this}set(c,e,t,i){this.minX=c,this.minY=e,this.maxX=t,this.maxY=i}addFrame(c,e,t,i,n){n||(n=this.matrix);const r=n.a,s=n.b,a=n.c,o=n.d,f=n.tx,l=n.ty;let d=this.minX,h=this.minY,u=this.maxX,p=this.maxY,g=r*c+a*e+f,m=s*c+o*e+l;g<d&&(d=g),m<h&&(h=m),g>u&&(u=g),m>p&&(p=m),g=r*t+a*e+f,m=s*t+o*e+l,g<d&&(d=g),m<h&&(h=m),g>u&&(u=g),m>p&&(p=m),g=r*c+a*i+f,m=s*c+o*i+l,g<d&&(d=g),m<h&&(h=m),g>u&&(u=g),m>p&&(p=m),g=r*t+a*i+f,m=s*t+o*i+l,g<d&&(d=g),m<h&&(h=m),g>u&&(u=g),m>p&&(p=m),this.minX=d,this.minY=h,this.maxX=u,this.maxY=p}addRect(c,e){this.addFrame(c.x,c.y,c.x+c.width,c.y+c.height,e)}addBounds(c,e){this.addFrame(c.minX,c.minY,c.maxX,c.maxY,e)}addBoundsMask(c){this.minX=this.minX>c.minX?this.minX:c.minX,this.minY=this.minY>c.minY?this.minY:c.minY,this.maxX=this.maxX<c.maxX?this.maxX:c.maxX,this.maxY=this.maxY<c.maxY?this.maxY:c.maxY}applyMatrix(c){const e=this.minX,t=this.minY,i=this.maxX,n=this.maxY,{a:r,b:s,c:a,d:o,tx:f,ty:l}=c;let d=r*e+a*t+f,h=s*e+o*t+l;this.minX=d,this.minY=h,this.maxX=d,this.maxY=h,d=r*i+a*t+f,h=s*i+o*t+l,this.minX=d<this.minX?d:this.minX,this.minY=h<this.minY?h:this.minY,this.maxX=d>this.maxX?d:this.maxX,this.maxY=h>this.maxY?h:this.maxY,d=r*e+a*n+f,h=s*e+o*n+l,this.minX=d<this.minX?d:this.minX,this.minY=h<this.minY?h:this.minY,this.maxX=d>this.maxX?d:this.maxX,this.maxY=h>this.maxY?h:this.maxY,d=r*i+a*n+f,h=s*i+o*n+l,this.minX=d<this.minX?d:this.minX,this.minY=h<this.minY?h:this.minY,this.maxX=d>this.maxX?d:this.maxX,this.maxY=h>this.maxY?h:this.maxY}fit(c){return this.minX<c.left&&(this.minX=c.left),this.maxX>c.right&&(this.maxX=c.right),this.minY<c.top&&(this.minY=c.top),this.maxY>c.bottom&&(this.maxY=c.bottom),this}fitBounds(c,e,t,i){return this.minX<c&&(this.minX=c),this.maxX>e&&(this.maxX=e),this.minY<t&&(this.minY=t),this.maxY>i&&(this.maxY=i),this}pad(c,e=c){return this.minX-=c,this.maxX+=c,this.minY-=e,this.maxY+=e,this}ceil(){return this.minX=Math.floor(this.minX),this.minY=Math.floor(this.minY),this.maxX=Math.ceil(this.maxX),this.maxY=Math.ceil(this.maxY),this}clone(){return new ic(this.minX,this.minY,this.maxX,this.maxY)}scale(c,e=c){return this.minX*=c,this.minY*=e,this.maxX*=c,this.maxY*=e,this}get x(){return this.minX}set x(c){const e=this.maxX-this.minX;this.minX=c,this.maxX=c+e}get y(){return this.minY}set y(c){const e=this.maxY-this.minY;this.minY=c,this.maxY=c+e}get width(){return this.maxX-this.minX}set width(c){this.maxX=this.minX+c}get height(){return this.maxY-this.minY}set height(c){this.maxY=this.minY+c}get left(){return this.minX}get right(){return this.maxX}get top(){return this.minY}get bottom(){return this.maxY}get isPositive(){return this.maxX-this.minX>0&&this.maxY-this.minY>0}get isValid(){return this.minX+this.minY!==1/0}addVertexData(c,e,t,i){let n=this.minX,r=this.minY,s=this.maxX,a=this.maxY;i||(i=this.matrix);const o=i.a,f=i.b,l=i.c,d=i.d,h=i.tx,u=i.ty;for(let p=e;p<t;p+=2){const e=c[p],t=c[p+1],i=o*e+l*t+h,g=f*e+d*t+u;n=i<n?i:n,r=g<r?g:r,s=i>s?i:s,a=g>a?g:a}this.minX=n,this.minY=r,this.maxX=s,this.maxY=a}containsPoint(c,e){return this.minX<=c&&this.minY<=e&&this.maxX>=c&&this.maxY>=e}toString(){return`[pixi.js:Bounds minX=${this.minX} minY=${this.minY} maxX=${this.maxX} maxY=${this.maxY} width=${this.width} height=${this.height}]`}copyFrom(c){return this.minX=c.minX,this.minY=c.minY,this.maxX=c.maxX,this.maxY=c.maxY,this}}var nc={grad:.9,turn:360,rad:360/(2*Math.PI)},rc=function(c){return"string"==typeof c?c.length>0:"number"==typeof c},sc=function(c,e,t){return void 0===e&&(e=0),void 0===t&&(t=Math.pow(10,e)),Math.round(t*c)/t+0},ac=function(c,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),c>t?t:c>e?c:e},oc=function(c){return(c=isFinite(c)?c%360:0)>0?c:c+360},fc=function(c){return{r:ac(c.r,0,255),g:ac(c.g,0,255),b:ac(c.b,0,255),a:ac(c.a)}},lc=function(c){return{r:sc(c.r),g:sc(c.g),b:sc(c.b),a:sc(c.a,3)}},dc=/^#([0-9a-f]{3,8})$/i,hc=function(c){var e=c.toString(16);return e.length<2?"0"+e:e},uc=function(c){var e=c.r,t=c.g,i=c.b,n=c.a,r=Math.max(e,t,i),s=r-Math.min(e,t,i),a=s?r===e?(t-i)/s:r===t?2+(i-e)/s:4+(e-t)/s:0;return{h:60*(a<0?a+6:a),s:r?s/r*100:0,v:r/255*100,a:n}},pc=function(c){var e=c.h,t=c.s,i=c.v,n=c.a;e=e/360*6,t/=100,i/=100;var r=Math.floor(e),s=i*(1-t),a=i*(1-(e-r)*t),o=i*(1-(1-e+r)*t),f=r%6;return{r:255*[i,a,s,s,o,i][f],g:255*[o,i,i,a,s,s][f],b:255*[s,s,o,i,i,a][f],a:n}},gc=function(c){return{h:oc(c.h),s:ac(c.s,0,100),l:ac(c.l,0,100),a:ac(c.a)}},mc=function(c){return{h:sc(c.h),s:sc(c.s),l:sc(c.l),a:sc(c.a,3)}},bc=function(c){return pc((t=(e=c).s,{h:e.h,s:(t*=((i=e.l)<50?i:100-i)/100)>0?2*t/(i+t)*100:0,v:i+t,a:e.a}));var e,t,i},vc=function(c){return{h:(e=uc(c)).h,s:(n=(200-(t=e.s))*(i=e.v)/100)>0&&n<200?t*i/100/(n<=100?n:200-n)*100:0,l:n/2,a:e.a};var e,t,i,n},yc=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,_c=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,xc=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Sc=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,wc={string:[[function(c){var e=dc.exec(c);return e?(c=e[1]).length<=4?{r:parseInt(c[0]+c[0],16),g:parseInt(c[1]+c[1],16),b:parseInt(c[2]+c[2],16),a:4===c.length?sc(parseInt(c[3]+c[3],16)/255,2):1}:6===c.length||8===c.length?{r:parseInt(c.substr(0,2),16),g:parseInt(c.substr(2,2),16),b:parseInt(c.substr(4,2),16),a:8===c.length?sc(parseInt(c.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(c){var e=xc.exec(c)||Sc.exec(c);return e?e[2]!==e[4]||e[4]!==e[6]?null:fc({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:void 0===e[7]?1:Number(e[7])/(e[8]?100:1)}):null},"rgb"],[function(c){var e=yc.exec(c)||_c.exec(c);if(!e)return null;var t,i,n=gc({h:(t=e[1],i=e[2],void 0===i&&(i="deg"),Number(t)*(nc[i]||1)),s:Number(e[3]),l:Number(e[4]),a:void 0===e[5]?1:Number(e[5])/(e[6]?100:1)});return bc(n)},"hsl"]],object:[[function(c){var e=c.r,t=c.g,i=c.b,n=c.a,r=void 0===n?1:n;return rc(e)&&rc(t)&&rc(i)?fc({r:Number(e),g:Number(t),b:Number(i),a:Number(r)}):null},"rgb"],[function(c){var e=c.h,t=c.s,i=c.l,n=c.a,r=void 0===n?1:n;if(!rc(e)||!rc(t)||!rc(i))return null;var s=gc({h:Number(e),s:Number(t),l:Number(i),a:Number(r)});return bc(s)},"hsl"],[function(c){var e=c.h,t=c.s,i=c.v,n=c.a,r=void 0===n?1:n;if(!rc(e)||!rc(t)||!rc(i))return null;var s,a=(s={h:Number(e),s:Number(t),v:Number(i),a:Number(r)},{h:oc(s.h),s:ac(s.s,0,100),v:ac(s.v,0,100),a:ac(s.a)});return pc(a)},"hsv"]]},Cc=function(c,e){for(var t=0;t<e.length;t++){var i=e[t][0](c);if(i)return[i,e[t][1]]}return[null,void 0]},Ac=function(c,e){var t=vc(c);return{h:t.h,s:ac(t.s+100*e,0,100),l:t.l,a:t.a}},Tc=function(c){return(299*c.r+587*c.g+114*c.b)/1e3/255},Pc=function(c,e){var t=vc(c);return{h:t.h,s:t.s,l:ac(t.l+100*e,0,100),a:t.a}},Mc=function(){function c(c){this.parsed=function(c){return"string"==typeof c?Cc(c.trim(),wc.string):"object"==typeof c&&null!==c?Cc(c,wc.object):[null,void 0]}(c)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return c.prototype.isValid=function(){return null!==this.parsed},c.prototype.brightness=function(){return sc(Tc(this.rgba),2)},c.prototype.isDark=function(){return Tc(this.rgba)<.5},c.prototype.isLight=function(){return Tc(this.rgba)>=.5},c.prototype.toHex=function(){return e=(c=lc(this.rgba)).r,t=c.g,i=c.b,r=(n=c.a)<1?hc(sc(255*n)):"","#"+hc(e)+hc(t)+hc(i)+r;var c,e,t,i,n,r},c.prototype.toRgb=function(){return lc(this.rgba)},c.prototype.toRgbString=function(){return e=(c=lc(this.rgba)).r,t=c.g,i=c.b,(n=c.a)<1?"rgba("+e+", "+t+", "+i+", "+n+")":"rgb("+e+", "+t+", "+i+")";var c,e,t,i,n},c.prototype.toHsl=function(){return mc(vc(this.rgba))},c.prototype.toHslString=function(){return e=(c=mc(vc(this.rgba))).h,t=c.s,i=c.l,(n=c.a)<1?"hsla("+e+", "+t+"%, "+i+"%, "+n+")":"hsl("+e+", "+t+"%, "+i+"%)";var c,e,t,i,n},c.prototype.toHsv=function(){return c=uc(this.rgba),{h:sc(c.h),s:sc(c.s),v:sc(c.v),a:sc(c.a,3)};var c},c.prototype.invert=function(){return Ec({r:255-(c=this.rgba).r,g:255-c.g,b:255-c.b,a:c.a});var c},c.prototype.saturate=function(c){return void 0===c&&(c=.1),Ec(Ac(this.rgba,c))},c.prototype.desaturate=function(c){return void 0===c&&(c=.1),Ec(Ac(this.rgba,-c))},c.prototype.grayscale=function(){return Ec(Ac(this.rgba,-1))},c.prototype.lighten=function(c){return void 0===c&&(c=.1),Ec(Pc(this.rgba,c))},c.prototype.darken=function(c){return void 0===c&&(c=.1),Ec(Pc(this.rgba,-c))},c.prototype.rotate=function(c){return void 0===c&&(c=15),this.hue(this.hue()+c)},c.prototype.alpha=function(c){return"number"==typeof c?Ec({r:(e=this.rgba).r,g:e.g,b:e.b,a:c}):sc(this.rgba.a,3);var e},c.prototype.hue=function(c){var e=vc(this.rgba);return"number"==typeof c?Ec({h:c,s:e.s,l:e.l,a:e.a}):sc(e.h)},c.prototype.isEqual=function(c){return this.toHex()===Ec(c).toHex()},c}(),Ec=function(c){return c instanceof Mc?c:new Mc(c)},Rc=[];[function(c,e){var t={white:"#ffffff",bisque:"#ffe4c4",blue:"#0000ff",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",antiquewhite:"#faebd7",aqua:"#00ffff",azure:"#f0ffff",whitesmoke:"#f5f5f5",papayawhip:"#ffefd5",plum:"#dda0dd",blanchedalmond:"#ffebcd",black:"#000000",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",cornsilk:"#fff8dc",cornflowerblue:"#6495ed",burlywood:"#deb887",aquamarine:"#7fffd4",beige:"#f5f5dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkkhaki:"#bdb76b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",peachpuff:"#ffdab9",darkmagenta:"#8b008b",darkred:"#8b0000",darkorchid:"#9932cc",darkorange:"#ff8c00",darkslateblue:"#483d8b",gray:"#808080",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",deeppink:"#ff1493",deepskyblue:"#00bfff",wheat:"#f5deb3",firebrick:"#b22222",floralwhite:"#fffaf0",ghostwhite:"#f8f8ff",darkviolet:"#9400d3",magenta:"#ff00ff",green:"#008000",dodgerblue:"#1e90ff",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",blueviolet:"#8a2be2",forestgreen:"#228b22",lawngreen:"#7cfc00",indianred:"#cd5c5c",indigo:"#4b0082",fuchsia:"#ff00ff",brown:"#a52a2a",maroon:"#800000",mediumblue:"#0000cd",lightcoral:"#f08080",darkturquoise:"#00ced1",lightcyan:"#e0ffff",ivory:"#fffff0",lightyellow:"#ffffe0",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",linen:"#faf0e6",mediumaquamarine:"#66cdaa",lemonchiffon:"#fffacd",lime:"#00ff00",khaki:"#f0e68c",mediumseagreen:"#3cb371",limegreen:"#32cd32",mediumspringgreen:"#00fa9a",lightskyblue:"#87cefa",lightblue:"#add8e6",midnightblue:"#191970",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",mintcream:"#f5fffa",lightslategray:"#778899",lightslategrey:"#778899",navajowhite:"#ffdead",navy:"#000080",mediumvioletred:"#c71585",powderblue:"#b0e0e6",palegoldenrod:"#eee8aa",oldlace:"#fdf5e6",paleturquoise:"#afeeee",mediumturquoise:"#48d1cc",mediumorchid:"#ba55d3",rebeccapurple:"#663399",lightsteelblue:"#b0c4de",mediumslateblue:"#7b68ee",thistle:"#d8bfd8",tan:"#d2b48c",orchid:"#da70d6",mediumpurple:"#9370db",purple:"#800080",pink:"#ffc0cb",skyblue:"#87ceeb",springgreen:"#00ff7f",palegreen:"#98fb98",red:"#ff0000",yellow:"#ffff00",slateblue:"#6a5acd",lavenderblush:"#fff0f5",peru:"#cd853f",palevioletred:"#db7093",violet:"#ee82ee",teal:"#008080",slategray:"#708090",slategrey:"#708090",aliceblue:"#f0f8ff",darkseagreen:"#8fbc8f",darkolivegreen:"#556b2f",greenyellow:"#adff2f",seagreen:"#2e8b57",seashell:"#fff5ee",tomato:"#ff6347",silver:"#c0c0c0",sienna:"#a0522d",lavender:"#e6e6fa",lightgreen:"#90ee90",orange:"#ffa500",orangered:"#ff4500",steelblue:"#4682b4",royalblue:"#4169e1",turquoise:"#40e0d0",yellowgreen:"#9acd32",salmon:"#fa8072",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",darksalmon:"#e9967a",lightgoldenrodyellow:"#fafad2",snow:"#fffafa",lightgrey:"#d3d3d3",lightgray:"#d3d3d3",dimgray:"#696969",dimgrey:"#696969",olivedrab:"#6b8e23",olive:"#808000"},i={};for(var n in t)i[t[n]]=n;var r={};c.prototype.toName=function(e){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return"transparent";var n,s,a=i[this.toHex()];if(a)return a;if(null==e?void 0:e.closest){var o=this.toRgb(),f=1/0,l="black";if(!r.length)for(var d in t)r[d]=new c(t[d]).toRgb();for(var h in t){var u=(n=o,s=r[h],Math.pow(n.r-s.r,2)+Math.pow(n.g-s.g,2)+Math.pow(n.b-s.b,2));u<f&&(f=u,l=h)}return l}},e.string.push([function(e){var i=e.toLowerCase(),n="transparent"===i?"#0000":t[i];return n?new c(n).toRgb():null},"name"])}].forEach(function(c){Rc.indexOf(c)<0&&(c(Mc,wc),Rc.push(c))});const kc=class c{constructor(c=16777215){this._value=null,this._components=new Float32Array(4),this._components.fill(1),this._int=16777215,this.value=c}get red(){return this._components[0]}get green(){return this._components[1]}get blue(){return this._components[2]}get alpha(){return this._components[3]}setValue(c){return this.value=c,this}set value(e){if(e instanceof c)this._value=this._cloneSource(e._value),this._int=e._int,this._components.set(e._components);else{if(null===e)throw new Error("Cannot set Color#value to null");null!==this._value&&this._isSourceEqual(this._value,e)||(this._value=this._cloneSource(e),this._normalize(this._value))}}get value(){return this._value}_cloneSource(c){return"string"==typeof c||"number"==typeof c||c instanceof Number||null===c?c:Array.isArray(c)||ArrayBuffer.isView(c)?c.slice(0):"object"==typeof c&&null!==c?__spreadValues({},c):c}_isSourceEqual(c,e){const t=typeof c;if(t!==typeof e)return!1;if("number"===t||"string"===t||c instanceof Number)return c===e;if(Array.isArray(c)&&Array.isArray(e)||ArrayBuffer.isView(c)&&ArrayBuffer.isView(e))return c.length===e.length&&c.every((c,t)=>c===e[t]);if(null!==c&&null!==e){const t=Object.keys(c),i=Object.keys(e);return t.length===i.length&&t.every(t=>c[t]===e[t])}return c===e}toRgba(){const[c,e,t,i]=this._components;return{r:c,g:e,b:t,a:i}}toRgb(){const[c,e,t]=this._components;return{r:c,g:e,b:t}}toRgbaString(){const[c,e,t]=this.toUint8RgbArray();return`rgba(${c},${e},${t},${this.alpha})`}toUint8RgbArray(c){const[e,t,i]=this._components;return this._arrayRgb||(this._arrayRgb=[]),c||(c=this._arrayRgb),c[0]=Math.round(255*e),c[1]=Math.round(255*t),c[2]=Math.round(255*i),c}toArray(c){this._arrayRgba||(this._arrayRgba=[]),c||(c=this._arrayRgba);const[e,t,i,n]=this._components;return c[0]=e,c[1]=t,c[2]=i,c[3]=n,c}toRgbArray(c){this._arrayRgb||(this._arrayRgb=[]),c||(c=this._arrayRgb);const[e,t,i]=this._components;return c[0]=e,c[1]=t,c[2]=i,c}toNumber(){return this._int}toBgrNumber(){const[c,e,t]=this.toUint8RgbArray();return(t<<16)+(e<<8)+c}toLittleEndianNumber(){const c=this._int;return(c>>16)+(65280&c)+((255&c)<<16)}multiply(e){const[t,i,n,r]=c._temp.setValue(e)._components;return this._components[0]*=t,this._components[1]*=i,this._components[2]*=n,this._components[3]*=r,this._refreshInt(),this._value=null,this}premultiply(c,e=!0){return e&&(this._components[0]*=c,this._components[1]*=c,this._components[2]*=c),this._components[3]=c,this._refreshInt(),this._value=null,this}toPremultiplied(c,e=!0){if(1===c)return(255<<24)+this._int;if(0===c)return e?0:this._int;let t=this._int>>16&255,i=this._int>>8&255,n=255&this._int;return e&&(t=t*c+.5|0,i=i*c+.5|0,n=n*c+.5|0),(255*c<<24)+(t<<16)+(i<<8)+n}toHex(){const c=this._int.toString(16);return`#${"000000".substring(0,6-c.length)+c}`}toHexa(){const c=Math.round(255*this._components[3]).toString(16);return this.toHex()+"00".substring(0,2-c.length)+c}setAlpha(c){return this._components[3]=this._clamp(c),this}_normalize(e){let t,i,n,r;if(("number"==typeof e||e instanceof Number)&&e>=0&&e<=16777215){t=(e>>16&255)/255,i=(e>>8&255)/255,n=(255&e)/255,r=1}else if((Array.isArray(e)||e instanceof Float32Array)&&e.length>=3&&e.length<=4)e=this._clamp(e),[t,i,n,r=1]=e;else if((e instanceof Uint8Array||e instanceof Uint8ClampedArray)&&e.length>=3&&e.length<=4)e=this._clamp(e,0,255),[t,i,n,r=255]=e,t/=255,i/=255,n/=255,r/=255;else if("string"==typeof e||"object"==typeof e){if("string"==typeof e){const t=c.HEX_PATTERN.exec(e);t&&(e=`#${t[2]}`)}const s=Ec(e);s.isValid()&&(({r:t,g:i,b:n,a:r}=s.rgba),t/=255,i/=255,n/=255)}if(void 0===t)throw new Error(`Unable to convert color ${e}`);this._components[0]=t,this._components[1]=i,this._components[2]=n,this._components[3]=r,this._refreshInt()}_refreshInt(){this._clamp(this._components);const[c,e,t]=this._components;this._int=(255*c<<16)+(255*e<<8)+(255*t|0)}_clamp(c,e=0,t=1){return"number"==typeof c?Math.min(Math.max(c,e),t):(c.forEach((i,n)=>{c[n]=Math.min(Math.max(i,e),t)}),c)}static isColorLike(e){return"number"==typeof e||"string"==typeof e||e instanceof Number||e instanceof c||Array.isArray(e)||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Float32Array||void 0!==e.r&&void 0!==e.g&&void 0!==e.b||void 0!==e.r&&void 0!==e.g&&void 0!==e.b&&void 0!==e.a||void 0!==e.h&&void 0!==e.s&&void 0!==e.l||void 0!==e.h&&void 0!==e.s&&void 0!==e.l&&void 0!==e.a||void 0!==e.h&&void 0!==e.s&&void 0!==e.v||void 0!==e.h&&void 0!==e.s&&void 0!==e.v&&void 0!==e.a}};kc.shared=new kc,kc._temp=new kc,kc.HEX_PATTERN=/^(#|0x)?(([a-f0-9]{3}){1,2}([a-f0-9]{2})?)$/i;let Fc=kc;let Ic=0;function Bc(...c){500!==Ic&&(Ic++,500===Ic?console.warn("PixiJS Warning: too many warnings, no more warnings will be reported to the console by PixiJS."):console.warn("PixiJS Warning: ",...c))}const Dc={_registeredResources:new Set,register(c){this._registeredResources.add(c)},unregister(c){this._registeredResources.delete(c)},release(){this._registeredResources.forEach(c=>c.clear())},get registeredCount(){return this._registeredResources.size},isRegistered(c){return this._registeredResources.has(c)},reset(){this._registeredResources.clear()}};class Oc{constructor(c,e){this._pool=[],this._count=0,this._index=0,this._classType=c,e&&this.prepopulate(e)}prepopulate(c){for(let e=0;e<c;e++)this._pool[this._index++]=new this._classType;this._count+=c}get(c){var e;let t;return this._index>0?t=this._pool[--this._index]:(t=new this._classType,this._count++),null==(e=t.init)||e.call(t,c),t}return(c){var e;null==(e=c.reset)||e.call(c),this._pool[this._index++]=c}get totalSize(){return this._count}get totalFree(){return this._index}get totalUsed(){return this._count-this._index}clear(){if(this._pool.length>0&&this._pool[0].destroy)for(let c=0;c<this._index;c++)this._pool[c].destroy();this._pool.length=0,this._count=0,this._index=0}}const Lc=new class{constructor(){this._poolsByClass=new Map}prepopulate(c,e){this.getPool(c).prepopulate(e)}get(c,e){return this.getPool(c).get(e)}return(c){this.getPool(c.constructor).return(c)}getPool(c){return this._poolsByClass.has(c)||this._poolsByClass.set(c,new Oc(c)),this._poolsByClass.get(c)}stats(){const c={};return this._poolsByClass.forEach(e=>{const t=c[e._classType.name]?e._classType.name+e._classType.ID:e._classType.name;c[t]={free:e.totalFree,used:e.totalUsed,size:e.totalSize}}),c}clear(){this._poolsByClass.forEach(c=>c.clear()),this._poolsByClass.clear()}};Dc.register(Lc);const zc={get isCachedAsTexture(){var c;return!!(null==(c=this.renderGroup)?void 0:c.isCachedAsTexture)},cacheAsTexture(c){"boolean"==typeof c&&!1===c?this.disableRenderGroup():(this.enableRenderGroup(),this.renderGroup.enableCacheAsTexture(!0===c?{}:c))},updateCacheTexture(){var c;null==(c=this.renderGroup)||c.updateCacheTexture()},get cacheAsBitmap(){return this.isCachedAsTexture},set cacheAsBitmap(c){V("v8.6.0","cacheAsBitmap is deprecated, use cacheAsTexture instead."),this.cacheAsTexture(c)}};function Gc(c,e,t){const i=c.length;let n;if(e>=i||0===t)return;const r=i-(t=e+t>i?i-e:t);for(n=e;n<r;++n)c[n]=c[n+t];c.length=r}const Uc={allowChildren:!0,removeChildren(c=0,e){var t;const i=null!=e?e:this.children.length,n=i-c,r=[];if(n>0&&n<=i){for(let t=i-1;t>=c;t--){const c=this.children[t];c&&(r.push(c),c.parent=null)}Gc(this.children,c,i);const e=this.renderGroup||this.parentRenderGroup;e&&e.removeChildren(r);for(let c=0;c<r.length;++c){const e=r[c];null==(t=e.parentRenderLayer)||t.detach(e),this.emit("childRemoved",e,this,c),r[c].emit("removed",this)}return r.length>0&&this._didViewChangeTick++,r}if(0===n&&0===this.children.length)return r;throw new RangeError("removeChildren: numeric values are outside the acceptable range.")},removeChildAt(c){const e=this.getChildAt(c);return this.removeChild(e)},getChildAt(c){if(c<0||c>=this.children.length)throw new Error(`getChildAt: Index (${c}) does not exist.`);return this.children[c]},setChildIndex(c,e){if(e<0||e>=this.children.length)throw new Error(`The index ${e} supplied is out of bounds ${this.children.length}`);this.getChildIndex(c),this.addChildAt(c,e)},getChildIndex(c){const e=this.children.indexOf(c);if(-1===e)throw new Error("The supplied Container must be a child of the caller");return e},addChildAt(c,e){this.allowChildren||V(G,"addChildAt: Only Containers will be allowed to add children in v8.0.0");const{children:t}=this;if(e<0||e>t.length)throw new Error(`${c}addChildAt: The index ${e} supplied is out of bounds ${t.length}`);if(c.parent){const t=c.parent.children.indexOf(c);if(c.parent===this&&t===e)return c;-1!==t&&c.parent.children.splice(t,1)}e===t.length?t.push(c):t.splice(e,0,c),c.parent=this,c.didChange=!0,c._updateFlags=15;const i=this.renderGroup||this.parentRenderGroup;return i&&i.addChild(c),this.sortableChildren&&(this.sortDirty=!0),this.emit("childAdded",c,this,e),c.emit("added",this),c},swapChildren(c,e){if(c===e)return;const t=this.getChildIndex(c),i=this.getChildIndex(e);this.children[t]=e,this.children[i]=c;const n=this.renderGroup||this.parentRenderGroup;n&&(n.structureDidChange=!0),this._didContainerChangeTick++},removeFromParent(){var c;null==(c=this.parent)||c.removeChild(this)},reparentChild(...c){return 1===c.length?this.reparentChildAt(c[0],this.children.length):(c.forEach(c=>this.reparentChildAt(c,this.children.length)),c[0])},reparentChildAt(c,e){if(c.parent===this)return this.setChildIndex(c,e),c;const t=c.worldTransform.clone();c.removeFromParent(),this.addChildAt(c,e);const i=this.worldTransform.clone();return i.invert(),t.prepend(i),c.setFromMatrix(t),c},replaceChild(c,e){c.updateLocalTransform(),this.addChildAt(e,this.getChildIndex(c)),e.setFromMatrix(c.localTransform),e.updateLocalTransform(),this.removeChild(c)}},Vc={collectRenderables(c,e,t){this.parentRenderLayer&&this.parentRenderLayer!==t||this.globalDisplayStatus<7||!this.includeInBuild||(this.sortableChildren&&this.sortChildren(),this.isSimple?this.collectRenderablesSimple(c,e,t):this.renderGroup?e.renderPipes.renderGroup.addRenderGroup(this.renderGroup,c):this.collectRenderablesWithEffects(c,e,t))},collectRenderablesSimple(c,e,t){const i=this.children,n=i.length;for(let r=0;r<n;r++)i[r].collectRenderables(c,e,t)},collectRenderablesWithEffects(c,e,t){const{renderPipes:i}=e;for(let n=0;n<this.effects.length;n++){const e=this.effects[n];i[e.pipe].push(e,this,c)}this.collectRenderablesSimple(c,e,t);for(let n=this.effects.length-1;n>=0;n--){const e=this.effects[n];i[e.pipe].pop(e,this,c)}}};class Nc{constructor(){this.pipe="filter",this.priority=1}destroy(){for(let c=0;c<this.filters.length;c++)this.filters[c].destroy();this.filters=null,this.filterArea=null}}const Wc=new class{constructor(){this._effectClasses=[],this._tests=[],this._initialized=!1}init(){this._initialized||(this._initialized=!0,this._effectClasses.forEach(c=>{this.add({test:c.test,maskClass:c})}))}add(c){this._tests.push(c)}getMaskEffect(c){this._initialized||this.init();for(let e=0;e<this._tests.length;e++){const t=this._tests[e];if(t.test(c))return Lc.get(t.maskClass,c)}return c}returnMaskEffect(c){Lc.return(c)}};f.handleByList(s.MaskEffect,Wc._effectClasses);const Hc={_maskEffect:null,_maskOptions:{inverse:!1},_filterEffect:null,effects:[],_markStructureAsChanged(){const c=this.renderGroup||this.parentRenderGroup;c&&(c.structureDidChange=!0)},addEffect(c){-1===this.effects.indexOf(c)&&(this.effects.push(c),this.effects.sort((c,e)=>c.priority-e.priority),this._markStructureAsChanged(),this._updateIsSimple())},removeEffect(c){const e=this.effects.indexOf(c);-1!==e&&(this.effects.splice(e,1),this._markStructureAsChanged(),this._updateIsSimple())},set mask(c){const e=this._maskEffect;(null==e?void 0:e.mask)!==c&&(e&&(this.removeEffect(e),Wc.returnMaskEffect(e),this._maskEffect=null),null!=c&&(this._maskEffect=Wc.getMaskEffect(c),this.addEffect(this._maskEffect)))},get mask(){var c;return null==(c=this._maskEffect)?void 0:c.mask},setMask(c){this._maskOptions=__spreadValues(__spreadValues({},this._maskOptions),c),c.mask&&(this.mask=c.mask),this._markStructureAsChanged()},set filters(c){var e;!Array.isArray(c)&&c&&(c=[c]);const t=this._filterEffect||(this._filterEffect=new Nc),i=(null==c?void 0:c.length)>0,n=i!==(null==(e=t.filters)?void 0:e.length)>0;c=Array.isArray(c)?c.slice(0):c,t.filters=Object.freeze(c),n&&(i?this.addEffect(t):(this.removeEffect(t),t.filters=null!=c?c:null))},get filters(){var c;return null==(c=this._filterEffect)?void 0:c.filters},set filterArea(c){this._filterEffect||(this._filterEffect=new Nc),this._filterEffect.filterArea=c},get filterArea(){var c;return null==(c=this._filterEffect)?void 0:c.filterArea}},jc={label:null,get name(){return V(G,"Container.name property has been removed, use Container.label instead"),this.label},set name(c){V(G,"Container.name property has been removed, use Container.label instead"),this.label=c},getChildByName(c,e=!1){return this.getChildByLabel(c,e)},getChildByLabel(c,e=!1){const t=this.children;for(let i=0;i<t.length;i++){const e=t[i];if(e.label===c||c instanceof RegExp&&c.test(e.label))return e}if(e)for(let i=0;i<t.length;i++){const e=t[i].getChildByLabel(c,!0);if(e)return e}return null},getChildrenByLabel(c,e=!1,t=[]){const i=this.children;for(let n=0;n<i.length;n++){const e=i[n];(e.label===c||c instanceof RegExp&&c.test(e.label))&&t.push(e)}if(e)for(let n=0;n<i.length;n++)i[n].getChildrenByLabel(c,!0,t);return t}},Yc=Lc.getPool(w),Xc=Lc.getPool(ic),Zc=new w,qc={getFastGlobalBounds(c,e){e||(e=new ic),e.clear(),this._getGlobalBoundsRecursive(!!c,e,this.parentRenderLayer),e.isValid||e.set(0,0,0,0);const t=this.renderGroup||this.parentRenderGroup;return e.applyMatrix(t.worldTransform),e},_getGlobalBoundsRecursive(c,e,t){let i=e;if(c&&this.parentRenderLayer&&this.parentRenderLayer!==t)return;if(7!==this.localDisplayStatus||!this.measurable)return;const n=!!this.effects.length;if((this.renderGroup||n)&&(i=Xc.get().clear()),this.boundsArea)e.addRect(this.boundsArea,this.worldTransform);else{if(this.renderPipeId){const c=this.bounds;i.addFrame(c.minX,c.minY,c.maxX,c.maxY,this.groupTransform)}const e=this.children;for(let n=0;n<e.length;n++)e[n]._getGlobalBoundsRecursive(c,i,t)}if(n){let c=!1;const t=this.renderGroup||this.parentRenderGroup;for(let e=0;e<this.effects.length;e++)this.effects[e].addBounds&&(c||(c=!0,i.applyMatrix(t.worldTransform)),this.effects[e].addBounds(i,!0));c&&i.applyMatrix(t.worldTransform.copyTo(Zc).invert()),e.addBounds(i),Xc.return(i)}else this.renderGroup&&(e.addBounds(i,this.relativeGroupTransform),Xc.return(i))}};function Kc(c,e,t){let i,n;return t.clear(),c.parent?e?i=c.parent.worldTransform:(n=Yc.get().identity(),i=Jc(c,n)):i=w.IDENTITY,Qc(c,t,i,e),n&&Yc.return(n),t.isValid||t.set(0,0,0,0),t}function Qc(c,e,t,i){var n,r;if(!c.visible||!c.measurable)return;let s;i?s=c.worldTransform:(c.updateLocalTransform(),s=Yc.get(),s.appendFrom(c.localTransform,t));const a=e,o=!!c.effects.length;if(o&&(e=Xc.get().clear()),c.boundsArea)e.addRect(c.boundsArea,s);else{const t=c.bounds;t&&!t.isEmpty()&&(e.matrix=s,e.addBounds(t));for(let n=0;n<c.children.length;n++)Qc(c.children[n],e,s,i)}if(o){for(let t=0;t<c.effects.length;t++)null==(r=(n=c.effects[t]).addBounds)||r.call(n,e);a.addBounds(e,w.IDENTITY),Xc.return(e)}i||Yc.return(s)}function Jc(c,e){const t=c.parent;return t&&(Jc(t,e),t.updateLocalTransform(),e.append(t.localTransform)),e}function $c(c,e){if(16777215===c||!e)return e;if(16777215===e||!c)return c;return(((c>>16&255)*(e>>16&255)/255|0)<<16)+(((c>>8&255)*(e>>8&255)/255|0)<<8)+((255&c)*(255&e)/255|0)}const ce=16777215;function ee(c,e){return c===ce?e:e===ce?c:$c(c,e)}function te(c){return((255&c)<<16)+(65280&c)+(c>>16&255)}const ie={getGlobalAlpha(c){if(c)return this.renderGroup?this.renderGroup.worldAlpha:this.parentRenderGroup?this.parentRenderGroup.worldAlpha*this.alpha:this.alpha;let e=this.alpha,t=this.parent;for(;t;)e*=t.alpha,t=t.parent;return e},getGlobalTransform(c=new w,e){if(e)return c.copyFrom(this.worldTransform);this.updateLocalTransform();const t=Jc(this,Yc.get().identity());return c.appendFrom(this.localTransform,t),Yc.return(t),c},getGlobalTint(c){if(c)return this.renderGroup?te(this.renderGroup.worldColor):this.parentRenderGroup?te(ee(this.localColor,this.parentRenderGroup.worldColor)):this.tint;let e=this.localColor,t=this.parent;for(;t;)e=ee(e,t.localColor),t=t.parent;return te(e)}};function ne(c,e,t){return e.clear(),t||(t=w.IDENTITY),re(c,e,t,c,!0),e.isValid||e.set(0,0,0,0),e}function re(c,e,t,i,n){var r,s;let a;if(n)a=Yc.get(),a=t.copyTo(a);else{if(!c.visible||!c.measurable)return;c.updateLocalTransform();const e=c.localTransform;a=Yc.get(),a.appendFrom(e,t)}const o=e,f=!!c.effects.length;if(f&&(e=Xc.get().clear()),c.boundsArea)e.addRect(c.boundsArea,a);else{c.renderPipeId&&(e.matrix=a,e.addBounds(c.bounds));const t=c.children;for(let c=0;c<t.length;c++)re(t[c],e,a,i,!1)}if(f){for(let t=0;t<c.effects.length;t++)null==(s=(r=c.effects[t]).addLocalBounds)||s.call(r,e,i);o.addBounds(e,w.IDENTITY),Xc.return(e)}Yc.return(a)}function se(c,e){const t=c.children;for(let i=0;i<t.length;i++){const c=t[i],n=c.uid,r=(65535&c._didViewChangeTick)<<16|65535&c._didContainerChangeTick,s=e.index;e.data[s]===n&&e.data[s+1]===r||(e.data[e.index]=n,e.data[e.index+1]=r,e.didChange=!0),e.index=s+2,c.children.length&&se(c,e)}return e.didChange}const ae=new w,oe={_localBoundsCacheId:-1,_localBoundsCacheData:null,_setWidth(c,e){const t=Math.sign(this.scale.x)||1;this.scale.x=0!==e?c/e*t:t},_setHeight(c,e){const t=Math.sign(this.scale.y)||1;this.scale.y=0!==e?c/e*t:t},getLocalBounds(){this._localBoundsCacheData||(this._localBoundsCacheData={data:[],index:1,didChange:!1,localBounds:new ic});const c=this._localBoundsCacheData;return c.index=1,c.didChange=!1,c.data[0]!==this._didViewChangeTick&&(c.didChange=!0,c.data[0]=this._didViewChangeTick),se(this,c),c.didChange&&ne(this,c.localBounds,ae),c.localBounds},getBounds(c,e){return Kc(this,c,e||new ic)}},fe={_onRender:null,set onRender(c){const e=this.renderGroup||this.parentRenderGroup;if(!c)return this._onRender&&(null==e||e.removeOnRender(this)),void(this._onRender=null);this._onRender||null==e||e.addOnRender(this),this._onRender=c},get onRender(){return this._onRender}},le={_zIndex:0,sortDirty:!1,sortableChildren:!1,get zIndex(){return this._zIndex},set zIndex(c){this._zIndex!==c&&(this._zIndex=c,this.depthOfChildModified())},depthOfChildModified(){this.parent&&(this.parent.sortableChildren=!0,this.parent.sortDirty=!0),this.parentRenderGroup&&(this.parentRenderGroup.structureDidChange=!0)},sortChildren(){this.sortDirty&&(this.sortDirty=!1,this.children.sort(de))}};function de(c,e){return c._zIndex-e._zIndex}const he={getGlobalPosition(c=new x,e=!1){return this.parent?this.parent.toGlobal(this._position,c,e):(c.x=this._position.x,c.y=this._position.y),c},toGlobal(c,e,t=!1){const i=this.getGlobalTransform(Yc.get(),t);return e=i.apply(c,e),Yc.return(i),e},toLocal(c,e,t,i){e&&(c=e.toGlobal(c,t,i));const n=this.getGlobalTransform(Yc.get(),i);return t=n.applyInverse(c,t),Yc.return(n),t}};class ue{constructor(){this.uid=L("instructionSet"),this.instructions=[],this.instructionSize=0,this.renderables=[],this.gcTick=0}reset(){this.instructionSize=0}destroy(){this.instructions.length=0,this.renderables.length=0,this.renderPipes=null,this.gcTick=0}add(c){this.instructions[this.instructionSize++]=c}log(){this.instructions.length=this.instructionSize,console.table(this.instructions,["type","action"])}}let pe=0;const ge=new class{constructor(c){this._poolKeyHash=Object.create(null),this._texturePool={},this.textureOptions=c||{},this.enableFullScreen=!1,this.textureStyle=new Z(this.textureOptions)}createTexture(c,e,t){const i=new K(__spreadProps(__spreadValues({},this.textureOptions),{width:c,height:e,resolution:1,antialias:t,autoGarbageCollect:!1}));return new cc({source:i,label:"texturePool_"+pe++})}getOptimalTexture(c,e,t=1,i){let n=Math.ceil(c*t-1e-6),r=Math.ceil(e*t-1e-6);n=W(n),r=W(r);const s=(n<<17)+(r<<1)+(i?1:0);this._texturePool[s]||(this._texturePool[s]=[]);let a=this._texturePool[s].pop();return a||(a=this.createTexture(n,r,i)),a.source._resolution=t,a.source.width=n/t,a.source.height=r/t,a.source.pixelWidth=n,a.source.pixelHeight=r,a.frame.x=0,a.frame.y=0,a.frame.width=c,a.frame.height=e,a.updateUvs(),this._poolKeyHash[a.uid]=s,a}getSameSizeTexture(c,e=!1){const t=c.source;return this.getOptimalTexture(c.width,c.height,t._resolution,e)}returnTexture(c,e=!1){const t=this._poolKeyHash[c.uid];e&&(c.source.style=this.textureStyle),this._texturePool[t].push(c)}clear(c){if(c=!1!==c)for(const e in this._texturePool){const c=this._texturePool[e];if(c)for(let e=0;e<c.length;e++)c[e].destroy(!0)}this._texturePool={}}};Dc.register(ge);class me{constructor(){this.renderPipeId="renderGroup",this.root=null,this.canBundle=!1,this.renderGroupParent=null,this.renderGroupChildren=[],this.worldTransform=new w,this.worldColorAlpha=4294967295,this.worldColor=16777215,this.worldAlpha=1,this.childrenToUpdate=Object.create(null),this.updateTick=0,this.gcTick=0,this.childrenRenderablesToUpdate={list:[],index:0},this.structureDidChange=!0,this.instructionSet=new ue,this._onRenderContainers=[],this.textureNeedsUpdate=!0,this.isCachedAsTexture=!1,this._matrixDirty=7}init(c){this.root=c,c._onRender&&this.addOnRender(c),c.didChange=!0;const e=c.children;for(let t=0;t<e.length;t++){const c=e[t];c._updateFlags=15,this.addChild(c)}}enableCacheAsTexture(c={}){this.textureOptions=c,this.isCachedAsTexture=!0,this.textureNeedsUpdate=!0}disableCacheAsTexture(){this.isCachedAsTexture=!1,this.texture&&(ge.returnTexture(this.texture,!0),this.texture=null)}updateCacheTexture(){this.textureNeedsUpdate=!0;const c=this._parentCacheAsTextureRenderGroup;c&&!c.textureNeedsUpdate&&c.updateCacheTexture()}reset(){this.renderGroupChildren.length=0;for(const c in this.childrenToUpdate){const e=this.childrenToUpdate[c];e.list.fill(null),e.index=0}this.childrenRenderablesToUpdate.index=0,this.childrenRenderablesToUpdate.list.fill(null),this.root=null,this.updateTick=0,this.structureDidChange=!0,this._onRenderContainers.length=0,this.renderGroupParent=null,this.disableCacheAsTexture()}get localTransform(){return this.root.localTransform}addRenderGroupChild(c){c.renderGroupParent&&c.renderGroupParent._removeRenderGroupChild(c),c.renderGroupParent=this,this.renderGroupChildren.push(c)}_removeRenderGroupChild(c){const e=this.renderGroupChildren.indexOf(c);e>-1&&this.renderGroupChildren.splice(e,1),c.renderGroupParent=null}addChild(c){if(this.structureDidChange=!0,c.parentRenderGroup=this,c.updateTick=-1,c.parent===this.root?c.relativeRenderGroupDepth=1:c.relativeRenderGroupDepth=c.parent.relativeRenderGroupDepth+1,c.didChange=!0,this.onChildUpdate(c),c.renderGroup)return void this.addRenderGroupChild(c.renderGroup);c._onRender&&this.addOnRender(c);const e=c.children;for(let t=0;t<e.length;t++)this.addChild(e[t])}removeChild(c){if(this.structureDidChange=!0,c._onRender&&(c.renderGroup||this.removeOnRender(c)),c.parentRenderGroup=null,c.renderGroup)return void this._removeRenderGroupChild(c.renderGroup);const e=c.children;for(let t=0;t<e.length;t++)this.removeChild(e[t])}removeChildren(c){for(let e=0;e<c.length;e++)this.removeChild(c[e])}onChildUpdate(c){let e=this.childrenToUpdate[c.relativeRenderGroupDepth];e||(e=this.childrenToUpdate[c.relativeRenderGroupDepth]={index:0,list:[]}),e.list[e.index++]=c}updateRenderable(c){c.globalDisplayStatus<7||(this.instructionSet.renderPipes[c.renderPipeId].updateRenderable(c),c.didViewUpdate=!1)}onChildViewUpdate(c){this.childrenRenderablesToUpdate.list[this.childrenRenderablesToUpdate.index++]=c}get isRenderable(){return 7===this.root.localDisplayStatus&&this.worldAlpha>0}addOnRender(c){this._onRenderContainers.push(c)}removeOnRender(c){this._onRenderContainers.splice(this._onRenderContainers.indexOf(c),1)}runOnRender(c){for(let e=0;e<this._onRenderContainers.length;e++)this._onRenderContainers[e]._onRender(c)}destroy(){this.disableCacheAsTexture(),this.renderGroupParent=null,this.root=null,this.childrenRenderablesToUpdate=null,this.childrenToUpdate=null,this.renderGroupChildren=null,this._onRenderContainers=null,this.instructionSet=null}getChildren(c=[]){const e=this.root.children;for(let t=0;t<e.length;t++)this._getChildren(e[t],c);return c}_getChildren(c,e=[]){if(e.push(c),c.renderGroup)return e;const t=c.children;for(let i=0;i<t.length;i++)this._getChildren(t[i],e);return e}invalidateMatrices(){this._matrixDirty=7}get inverseWorldTransform(){return 1&this._matrixDirty?(this._matrixDirty&=-2,this._inverseWorldTransform||(this._inverseWorldTransform=new w),this._inverseWorldTransform.copyFrom(this.worldTransform).invert()):this._inverseWorldTransform}get textureOffsetInverseTransform(){return 2&this._matrixDirty?(this._matrixDirty&=-3,this._textureOffsetInverseTransform||(this._textureOffsetInverseTransform=new w),this._textureOffsetInverseTransform.copyFrom(this.inverseWorldTransform).translate(-this._textureBounds.x,-this._textureBounds.y)):this._textureOffsetInverseTransform}get inverseParentTextureTransform(){if(!(4&this._matrixDirty))return this._inverseParentTextureTransform;this._matrixDirty&=-5;const c=this._parentCacheAsTextureRenderGroup;return c?(this._inverseParentTextureTransform||(this._inverseParentTextureTransform=new w),this._inverseParentTextureTransform.copyFrom(this.worldTransform).prepend(c.inverseWorldTransform).translate(-c._textureBounds.x,-c._textureBounds.y)):this.worldTransform}get cacheToLocalTransform(){return this.isCachedAsTexture?this.textureOffsetInverseTransform:this._parentCacheAsTextureRenderGroup?this._parentCacheAsTextureRenderGroup.textureOffsetInverseTransform:null}}const be=new h(null),ve=new h(null),ye=new h(null,1,1),_e=new h(null);class xe extends b{constructor(c={}){var e,t;super(),this.uid=L("renderable"),this._updateFlags=15,this.renderGroup=null,this.parentRenderGroup=null,this.parentRenderGroupIndex=0,this.didChange=!1,this.didViewUpdate=!1,this.relativeRenderGroupDepth=0,this.children=[],this.parent=null,this.includeInBuild=!0,this.measurable=!0,this.isSimple=!0,this.parentRenderLayer=null,this.updateTick=-1,this.localTransform=new w,this.relativeGroupTransform=new w,this.groupTransform=this.relativeGroupTransform,this.destroyed=!1,this._position=new h(this,0,0),this._scale=ye,this._pivot=ve,this._origin=_e,this._skew=be,this._cx=1,this._sx=0,this._cy=0,this._sy=1,this._rotation=0,this.localColor=16777215,this.localAlpha=1,this.groupAlpha=1,this.groupColor=16777215,this.groupColorAlpha=4294967295,this.localBlendMode="inherit",this.groupBlendMode="normal",this.localDisplayStatus=7,this.globalDisplayStatus=7,this._didContainerChangeTick=0,this._didViewChangeTick=0,this._didLocalTransformChangeId=-1,this.effects=[],function(c,e,t={}){for(const i in e)t[i]||void 0===e[i]||(c[i]=e[i])}(this,c,{children:!0,parent:!0,effects:!0}),null==(e=c.children)||e.forEach(c=>this.addChild(c)),null==(t=c.parent)||t.addChild(this)}static mixin(c){V("8.8.0","Container.mixin is deprecated, please use extensions.mixin instead."),f.mixin(xe,c)}set _didChangeId(c){this._didViewChangeTick=c>>12&4095,this._didContainerChangeTick=4095&c}get _didChangeId(){return 4095&this._didContainerChangeTick|(4095&this._didViewChangeTick)<<12}addChild(...c){if(this.allowChildren||V(G,"addChild: Only Containers will be allowed to add children in v8.0.0"),c.length>1){for(let e=0;e<c.length;e++)this.addChild(c[e]);return c[0]}const e=c[0],t=this.renderGroup||this.parentRenderGroup;return e.parent===this?(this.children.splice(this.children.indexOf(e),1),this.children.push(e),t&&(t.structureDidChange=!0),e):(e.parent&&e.parent.removeChild(e),this.children.push(e),this.sortableChildren&&(this.sortDirty=!0),e.parent=this,e.didChange=!0,e._updateFlags=15,t&&t.addChild(e),this.emit("childAdded",e,this,this.children.length-1),e.emit("added",this),this._didViewChangeTick++,0!==e._zIndex&&e.depthOfChildModified(),e)}removeChild(...c){if(c.length>1){for(let e=0;e<c.length;e++)this.removeChild(c[e]);return c[0]}const e=c[0],t=this.children.indexOf(e);return t>-1&&(this._didViewChangeTick++,this.children.splice(t,1),this.renderGroup?this.renderGroup.removeChild(e):this.parentRenderGroup&&this.parentRenderGroup.removeChild(e),e.parentRenderLayer&&e.parentRenderLayer.detach(e),e.parent=null,this.emit("childRemoved",e,this,t),e.emit("removed",this)),e}_onUpdate(c){c&&c===this._skew&&this._updateSkew(),this._didContainerChangeTick++,this.didChange||(this.didChange=!0,this.parentRenderGroup&&this.parentRenderGroup.onChildUpdate(this))}set isRenderGroup(c){!!this.renderGroup!==c&&(c?this.enableRenderGroup():this.disableRenderGroup())}get isRenderGroup(){return!!this.renderGroup}enableRenderGroup(){if(this.renderGroup)return;const c=this.parentRenderGroup;null==c||c.removeChild(this),this.renderGroup=Lc.get(me,this),this.groupTransform=w.IDENTITY,null==c||c.addChild(this),this._updateIsSimple()}disableRenderGroup(){if(!this.renderGroup)return;const c=this.parentRenderGroup;null==c||c.removeChild(this),Lc.return(this.renderGroup),this.renderGroup=null,this.groupTransform=this.relativeGroupTransform,null==c||c.addChild(this),this._updateIsSimple()}_updateIsSimple(){this.isSimple=!this.renderGroup&&0===this.effects.length}get worldTransform(){return this._worldTransform||(this._worldTransform=new w),this.renderGroup?this._worldTransform.copyFrom(this.renderGroup.worldTransform):this.parentRenderGroup&&this._worldTransform.appendFrom(this.relativeGroupTransform,this.parentRenderGroup.worldTransform),this._worldTransform}get x(){return this._position.x}set x(c){this._position.x=c}get y(){return this._position.y}set y(c){this._position.y=c}get position(){return this._position}set position(c){this._position.copyFrom(c)}get rotation(){return this._rotation}set rotation(c){this._rotation!==c&&(this._rotation=c,this._onUpdate(this._skew))}get angle(){return this.rotation*y}set angle(c){this.rotation=c*_}get pivot(){return this._pivot===ve&&(this._pivot=new h(this,0,0)),this._pivot}set pivot(c){this._pivot===ve&&(this._pivot=new h(this,0,0),this._origin!==_e&&Bc("Setting both a pivot and origin on a Container is not recommended. This can lead to unexpected behavior if not handled carefully.")),"number"==typeof c?this._pivot.set(c):this._pivot.copyFrom(c)}get skew(){return this._skew===be&&(this._skew=new h(this,0,0)),this._skew}set skew(c){this._skew===be&&(this._skew=new h(this,0,0)),this._skew.copyFrom(c)}get scale(){return this._scale===ye&&(this._scale=new h(this,1,1)),this._scale}set scale(c){this._scale===ye&&(this._scale=new h(this,0,0)),"string"==typeof c&&(c=parseFloat(c)),"number"==typeof c?this._scale.set(c):this._scale.copyFrom(c)}get origin(){return this._origin===_e&&(this._origin=new h(this,0,0)),this._origin}set origin(c){this._origin===_e&&(this._origin=new h(this,0,0),this._pivot!==ve&&Bc("Setting both a pivot and origin on a Container is not recommended. This can lead to unexpected behavior if not handled carefully.")),"number"==typeof c?this._origin.set(c):this._origin.copyFrom(c)}get width(){return Math.abs(this.scale.x*this.getLocalBounds().width)}set width(c){const e=this.getLocalBounds().width;this._setWidth(c,e)}get height(){return Math.abs(this.scale.y*this.getLocalBounds().height)}set height(c){const e=this.getLocalBounds().height;this._setHeight(c,e)}getSize(c){c||(c={});const e=this.getLocalBounds();return c.width=Math.abs(this.scale.x*e.width),c.height=Math.abs(this.scale.y*e.height),c}setSize(c,e){var t;const i=this.getLocalBounds();"object"==typeof c?(e=null!=(t=c.height)?t:c.width,c=c.width):null!=e||(e=c),void 0!==c&&this._setWidth(c,i.width),void 0!==e&&this._setHeight(e,i.height)}_updateSkew(){const c=this._rotation,e=this._skew;this._cx=Math.cos(c+e._y),this._sx=Math.sin(c+e._y),this._cy=-Math.sin(c-e._x),this._sy=Math.cos(c-e._x)}updateTransform(c){return this.position.set("number"==typeof c.x?c.x:this.position.x,"number"==typeof c.y?c.y:this.position.y),this.scale.set("number"==typeof c.scaleX?c.scaleX||1:this.scale.x,"number"==typeof c.scaleY?c.scaleY||1:this.scale.y),this.rotation="number"==typeof c.rotation?c.rotation:this.rotation,this.skew.set("number"==typeof c.skewX?c.skewX:this.skew.x,"number"==typeof c.skewY?c.skewY:this.skew.y),this.pivot.set("number"==typeof c.pivotX?c.pivotX:this.pivot.x,"number"==typeof c.pivotY?c.pivotY:this.pivot.y),this.origin.set("number"==typeof c.originX?c.originX:this.origin.x,"number"==typeof c.originY?c.originY:this.origin.y),this}setFromMatrix(c){c.decompose(this)}updateLocalTransform(){const c=this._didContainerChangeTick;if(this._didLocalTransformChangeId===c)return;this._didLocalTransformChangeId=c;const e=this.localTransform,t=this._scale,i=this._pivot,n=this._origin,r=this._position,s=t._x,a=t._y,o=i._x,f=i._y,l=-n._x,d=-n._y;e.a=this._cx*s,e.b=this._sx*s,e.c=this._cy*a,e.d=this._sy*a,e.tx=r._x-(o*e.a+f*e.c)+(l*e.a+d*e.c)-l,e.ty=r._y-(o*e.b+f*e.d)+(l*e.b+d*e.d)-d}set alpha(c){c!==this.localAlpha&&(this.localAlpha=c,this._updateFlags|=1,this._onUpdate())}get alpha(){return this.localAlpha}set tint(c){const e=Fc.shared.setValue(null!=c?c:16777215).toBgrNumber();e!==this.localColor&&(this.localColor=e,this._updateFlags|=1,this._onUpdate())}get tint(){return te(this.localColor)}set blendMode(c){this.localBlendMode!==c&&(this.parentRenderGroup&&(this.parentRenderGroup.structureDidChange=!0),this._updateFlags|=2,this.localBlendMode=c,this._onUpdate())}get blendMode(){return this.localBlendMode}get visible(){return!!(2&this.localDisplayStatus)}set visible(c){const e=c?2:0;(2&this.localDisplayStatus)!==e&&(this.parentRenderGroup&&(this.parentRenderGroup.structureDidChange=!0),this._updateFlags|=4,this.localDisplayStatus^=2,this._onUpdate())}get culled(){return!(4&this.localDisplayStatus)}set culled(c){const e=c?0:4;(4&this.localDisplayStatus)!==e&&(this.parentRenderGroup&&(this.parentRenderGroup.structureDidChange=!0),this._updateFlags|=4,this.localDisplayStatus^=4,this._onUpdate())}get renderable(){return!!(1&this.localDisplayStatus)}set renderable(c){const e=c?1:0;(1&this.localDisplayStatus)!==e&&(this._updateFlags|=4,this.localDisplayStatus^=1,this.parentRenderGroup&&(this.parentRenderGroup.structureDidChange=!0),this._onUpdate())}get isRenderable(){return 7===this.localDisplayStatus&&this.groupAlpha>0}destroy(c=!1){var e;if(this.destroyed)return;let t;this.destroyed=!0,this.children.length&&(t=this.removeChildren(0,this.children.length)),this.removeFromParent(),this.parent=null,this._maskEffect=null,this._filterEffect=null,this.effects=null,this._position=null,this._scale=null,this._pivot=null,this._origin=null,this._skew=null,this.emit("destroyed",this),this.removeAllListeners();if(("boolean"==typeof c?c:null==c?void 0:c.children)&&t)for(let i=0;i<t.length;++i)t[i].destroy(c);null==(e=this.renderGroup)||e.destroy(),this.renderGroup=null}}f.mixin(xe,Uc,qc,he,fe,oe,Hc,jc,le,{cullArea:null,cullable:!1,cullableChildren:!0},zc,ie,Vc);class Se extends xe{constructor(c){var e;super(c),this.canBundle=!0,this.allowChildren=!1,this._roundPixels=0,this._lastUsed=-1,this._gpuData=Object.create(null),this.autoGarbageCollect=!0,this._gcLastUsed=-1,this._bounds=new ic(0,1,0,0),this._boundsDirty=!0,this.autoGarbageCollect=null==(e=c.autoGarbageCollect)||e}get bounds(){return this._boundsDirty?(this.updateBounds(),this._boundsDirty=!1,this._bounds):this._bounds}get roundPixels(){return!!this._roundPixels}set roundPixels(c){this._roundPixels=c?1:0}containsPoint(c){const e=this.bounds,{x:t,y:i}=c;return t>=e.minX&&t<=e.maxX&&i>=e.minY&&i<=e.maxY}onViewUpdate(){if(this._didViewChangeTick++,this._boundsDirty=!0,this.didViewUpdate)return;this.didViewUpdate=!0;const c=this.renderGroup||this.parentRenderGroup;c&&c.onChildViewUpdate(this)}unload(){var c;this.emit("unload",this);for(const e in this._gpuData)null==(c=this._gpuData[e])||c.destroy();this._gpuData=Object.create(null),this.onViewUpdate()}destroy(c){this.unload(),super.destroy(c),this._bounds=null}collectRenderablesSimple(c,e,t){const{renderPipes:i}=e;i.blendMode.pushBlendMode(this,this.groupBlendMode,c);const n=i[this.renderPipeId];(null==n?void 0:n.addRenderable)&&n.addRenderable(this,c),this.didViewUpdate=!1;const r=this.children,s=r.length;for(let a=0;a<s;a++)r[a].collectRenderables(c,e,t);i.blendMode.popBlendMode(c)}}class we extends Se{constructor(c=cc.EMPTY){c instanceof cc&&(c={texture:c});const e=c,{texture:t=cc.EMPTY,anchor:i,roundPixels:n,width:r,height:s}=e,a=__objRest(e,["texture","anchor","roundPixels","width","height"]);super(__spreadValues({label:"Sprite"},a)),this.renderPipeId="sprite",this.batched=!0,this._visualBounds={minX:0,maxX:1,minY:0,maxY:0},this._anchor=new h({_onUpdate:()=>{this.onViewUpdate()}}),i?this.anchor=i:t.defaultAnchor&&(this.anchor=t.defaultAnchor),this.texture=t,this.allowChildren=!1,this.roundPixels=null!=n&&n,void 0!==r&&(this.width=r),void 0!==s&&(this.height=s)}static from(c,e=!1){return new we(c instanceof cc?c:cc.from(c,e))}set texture(c){c||(c=cc.EMPTY);const e=this._texture;e!==c&&(e&&e.dynamic&&e.off("update",this.onViewUpdate,this),c.dynamic&&c.on("update",this.onViewUpdate,this),this._texture=c,this._width&&this._setWidth(this._width,this._texture.orig.width),this._height&&this._setHeight(this._height,this._texture.orig.height),this.onViewUpdate())}get texture(){return this._texture}get visualBounds(){return ec(this._visualBounds,this._anchor,this._texture),this._visualBounds}get sourceBounds(){return V("8.6.1","Sprite.sourceBounds is deprecated, use visualBounds instead."),this.visualBounds}updateBounds(){const c=this._anchor,e=this._texture,t=this._bounds,{width:i,height:n}=e.orig;t.minX=-c._x*i,t.maxX=t.minX+i,t.minY=-c._y*n,t.maxY=t.minY+n}destroy(c=!1){super.destroy(c);if("boolean"==typeof c?c:null==c?void 0:c.texture){const e="boolean"==typeof c?c:null==c?void 0:c.textureSource;this._texture.destroy(e)}this._texture=null,this._visualBounds=null,this._bounds=null,this._anchor=null}get anchor(){return this._anchor}set anchor(c){"number"==typeof c?this._anchor.set(c):this._anchor.copyFrom(c)}get width(){return Math.abs(this.scale.x)*this._texture.orig.width}set width(c){this._setWidth(c,this._texture.orig.width),this._width=c}get height(){return Math.abs(this.scale.y)*this._texture.orig.height}set height(c){this._setHeight(c,this._texture.orig.height),this._height=c}getSize(c){return c||(c={}),c.width=Math.abs(this.scale.x)*this._texture.orig.width,c.height=Math.abs(this.scale.y)*this._texture.orig.height,c}setSize(c,e){var t;"object"==typeof c?(e=null!=(t=c.height)?t:c.width,c=c.width):null!=e||(e=c),void 0!==c&&this._setWidth(c,this._texture.orig.width),void 0!==e&&this._setHeight(e,this._texture.orig.height)}}const Ce=new ic;function Ae(c,e,t){const i=Ce;c.measurable=!0,Kc(c,t,i),e.addBoundsMask(i),c.measurable=!1}function Te(c,e,t){const i=Xc.get();c.measurable=!0;const n=Yc.get().identity();ne(c,i,Pe(c,t,n)),c.measurable=!1,e.addBoundsMask(i),Yc.return(n),Xc.return(i)}function Pe(c,e,t){return c?(c!==e&&(Pe(c.parent,e,t),c.updateLocalTransform(),t.append(c.localTransform)),t):(Bc("Mask bounds, renderable is not inside the root container"),t)}class Me{constructor(c){this.priority=0,this.inverse=!1,this.pipe="alphaMask",(null==c?void 0:c.mask)&&this.init(c.mask)}init(c){this.mask=c,this.renderMaskToTexture=!(c instanceof we),this.mask.renderable=this.renderMaskToTexture,this.mask.includeInBuild=!this.renderMaskToTexture,this.mask.measurable=!1}reset(){null!==this.mask&&(this.mask.measurable=!0,this.mask=null)}addBounds(c,e){this.inverse||Ae(this.mask,c,e)}addLocalBounds(c,e){Te(this.mask,c,e)}containsPoint(c,e){return e(this.mask,c)}destroy(){this.reset()}static test(c){return c instanceof we}}Me.extension=s.MaskEffect;class Ee{constructor(c){this.priority=0,this.pipe="colorMask",(null==c?void 0:c.mask)&&this.init(c.mask)}init(c){this.mask=c}destroy(){}static test(c){return"number"==typeof c}}Ee.extension=s.MaskEffect;class Re{constructor(c){this.priority=0,this.pipe="stencilMask",(null==c?void 0:c.mask)&&this.init(c.mask)}init(c){this.mask=c,this.mask.includeInBuild=!1,this.mask.measurable=!1}reset(){null!==this.mask&&(this.mask.measurable=!0,this.mask.includeInBuild=!0,this.mask=null)}addBounds(c,e){Ae(this.mask,c,e)}addLocalBounds(c,e){Te(this.mask,c,e)}containsPoint(c,e){return e(this.mask,c)}destroy(){this.reset()}static test(c){return c instanceof xe}}Re.extension=s.MaskEffect;let ke={createCanvas:(c,e)=>{const t=document.createElement("canvas");return t.width=c,t.height=e,t},createImage:()=>new Image,getCanvasRenderingContext2D:()=>CanvasRenderingContext2D,getWebGLRenderingContext:()=>WebGLRenderingContext,getNavigator:()=>navigator,getBaseUrl:()=>{var c;return null!=(c=document.baseURI)?c:window.location.href},getFontFaceSet:()=>document.fonts,fetch:(c,e)=>fetch(c,e),parseXML:c=>(new DOMParser).parseFromString(c,"text/xml")};const Fe={get:()=>ke,set(c){ke=c}};class Ie extends K{constructor(c){c.resource||(c.resource=Fe.get().createCanvas()),c.width||(c.width=c.resource.width,c.autoDensity||(c.width/=c.resolution)),c.height||(c.height=c.resource.height,c.autoDensity||(c.height/=c.resolution)),super(c),this.uploadMethodId="image",this.autoDensity=c.autoDensity,this.resizeCanvas(),this.transparent=!!c.transparent}resizeCanvas(){this.autoDensity&&"style"in this.resource&&(this.resource.style.width=`${this.width}px`,this.resource.style.height=`${this.height}px`),this.resource.width===this.pixelWidth&&this.resource.height===this.pixelHeight||(this.resource.width=this.pixelWidth,this.resource.height=this.pixelHeight)}resize(c=this.width,e=this.height,t=this._resolution){const i=super.resize(c,e,t);return i&&this.resizeCanvas(),i}static test(c){return globalThis.HTMLCanvasElement&&c instanceof HTMLCanvasElement||globalThis.OffscreenCanvas&&c instanceof OffscreenCanvas}get context2D(){return this._context2D||(this._context2D=this.resource.getContext("2d"))}}Ie.extension=s.TextureSource;class Be extends K{constructor(c){super(c),this.uploadMethodId="image",this.autoGarbageCollect=!0}static test(c){return globalThis.HTMLImageElement&&c instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&c instanceof ImageBitmap||globalThis.VideoFrame&&c instanceof VideoFrame}}Be.extension=s.TextureSource;var De=(c=>(c[c.INTERACTION=50]="INTERACTION",c[c.HIGH=25]="HIGH",c[c.NORMAL=0]="NORMAL",c[c.LOW=-25]="LOW",c[c.UTILITY=-50]="UTILITY",c))(De||{});class Oe{constructor(c,e=null,t=0,i=!1){this.next=null,this.previous=null,this._destroyed=!1,this._fn=c,this._context=e,this.priority=t,this._once=i}match(c,e=null){return this._fn===c&&this._context===e}emit(c){this._fn&&(this._context?this._fn.call(this._context,c):this._fn(c));const e=this.next;return this._once&&this.destroy(!0),this._destroyed&&(this.next=null),e}connect(c){this.previous=c,c.next&&(c.next.previous=this),this.next=c.next,c.next=this}destroy(c=!1){this._destroyed=!0,this._fn=null,this._context=null,this.previous&&(this.previous.next=this.next),this.next&&(this.next.previous=this.previous);const e=this.next;return this.next=c?null:e,this.previous=null,e}}const Le=class c{constructor(){this.autoStart=!1,this.deltaTime=1,this.lastTime=-1,this.speed=1,this.started=!1,this._requestId=null,this._maxElapsedMS=100,this._minElapsedMS=0,this._protected=!1,this._lastFrame=-1,this._head=new Oe(null,null,1/0),this.deltaMS=1/c.targetFPMS,this.elapsedMS=1/c.targetFPMS,this._tick=c=>{this._requestId=null,this.started&&(this.update(c),this.started&&null===this._requestId&&this._head.next&&(this._requestId=requestAnimationFrame(this._tick)))}}_requestIfNeeded(){null===this._requestId&&this._head.next&&(this.lastTime=performance.now(),this._lastFrame=this.lastTime,this._requestId=requestAnimationFrame(this._tick))}_cancelIfNeeded(){null!==this._requestId&&(cancelAnimationFrame(this._requestId),this._requestId=null)}_startIfPossible(){this.started?this._requestIfNeeded():this.autoStart&&this.start()}add(c,e,t=De.NORMAL){return this._addListener(new Oe(c,e,t))}addOnce(c,e,t=De.NORMAL){return this._addListener(new Oe(c,e,t,!0))}_addListener(c){let e=this._head.next,t=this._head;if(e){for(;e;){if(c.priority>e.priority){c.connect(t);break}t=e,e=e.next}c.previous||c.connect(t)}else c.connect(t);return this._startIfPossible(),this}remove(c,e){let t=this._head.next;for(;t;)t=t.match(c,e)?t.destroy():t.next;return this._head.next||this._cancelIfNeeded(),this}get count(){if(!this._head)return 0;let c=0,e=this._head;for(;e=e.next;)c++;return c}start(){this.started||(this.started=!0,this._requestIfNeeded())}stop(){this.started&&(this.started=!1,this._cancelIfNeeded())}destroy(){if(!this._protected){this.stop();let c=this._head.next;for(;c;)c=c.destroy(!0);this._head.destroy(),this._head=null}}update(e=performance.now()){let t;if(e>this.lastTime){if(t=this.elapsedMS=e-this.lastTime,t>this._maxElapsedMS&&(t=this._maxElapsedMS),t*=this.speed,this._minElapsedMS){const c=e-this._lastFrame|0;if(c<this._minElapsedMS)return;this._lastFrame=e-c%this._minElapsedMS}this.deltaMS=t,this.deltaTime=this.deltaMS*c.targetFPMS;const i=this._head;let n=i.next;for(;n;)n=n.emit(this);i.next||this._cancelIfNeeded()}else this.deltaTime=this.deltaMS=this.elapsedMS=0;this.lastTime=e}get FPS(){return 1e3/this.elapsedMS}get minFPS(){return 1e3/this._maxElapsedMS}set minFPS(e){const t=Math.min(this.maxFPS,e),i=Math.min(Math.max(0,t)/1e3,c.targetFPMS);this._maxElapsedMS=1/i}get maxFPS(){return this._minElapsedMS?Math.round(1e3/this._minElapsedMS):0}set maxFPS(c){if(0===c)this._minElapsedMS=0;else{const e=Math.max(this.minFPS,c);this._minElapsedMS=1/(e/1e3)}}static get shared(){if(!c._shared){const e=c._shared=new c;e.autoStart=!0,e._protected=!0}return c._shared}static get system(){if(!c._system){const e=c._system=new c;e.autoStart=!0,e._protected=!0}return c._system}};Le.targetFPMS=.06;let ze,Ge=Le;function Ue(){return __async(this,null,function*(){return null!=ze||(ze=__async(null,null,function*(){var c;const e=Fe.get().createCanvas(1,1).getContext("webgl");if(!e)return"premultiply-alpha-on-upload";const t=yield new Promise(c=>{const e=document.createElement("video");e.onloadeddata=()=>c(e),e.onerror=()=>c(null),e.autoplay=!1,e.crossOrigin="anonymous",e.preload="auto",e.src="data:video/webm;base64,GkXfo59ChoEBQveBAULygQRC84EIQoKEd2VibUKHgQJChYECGFOAZwEAAAAAAAHTEU2bdLpNu4tTq4QVSalmU6yBoU27i1OrhBZUrmtTrIHGTbuMU6uEElTDZ1OsggEXTbuMU6uEHFO7a1OsggG97AEAAAAAAABZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmoCrXsYMPQkBNgIRMYXZmV0GETGF2ZkSJiEBEAAAAAAAAFlSua8yuAQAAAAAAAEPXgQFzxYgAAAAAAAAAAZyBACK1nIN1bmSIgQCGhVZfVlA5g4EBI+ODhAJiWgDglLCBArqBApqBAlPAgQFVsIRVuYEBElTDZ9Vzc9JjwItjxYgAAAAAAAAAAWfInEWjh0VOQ09ERVJEh49MYXZjIGxpYnZweC12cDlnyKJFo4hEVVJBVElPTkSHlDAwOjAwOjAwLjA0MDAwMDAwMAAAH0O2dcfngQCgwqGggQAAAIJJg0IAABAAFgA4JBwYSgAAICAAEb///4r+AAB1oZ2mm+6BAaWWgkmDQgAAEAAWADgkHBhKAAAgIABIQBxTu2uRu4+zgQC3iveBAfGCAXHwgQM=",e.load()});if(!t)return"premultiply-alpha-on-upload";const i=e.createTexture();e.bindTexture(e.TEXTURE_2D,i);const n=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,n),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,i,0),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,e.NONE),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t);const r=new Uint8Array(4);return e.readPixels(0,0,1,1,e.RGBA,e.UNSIGNED_BYTE,r),e.deleteFramebuffer(n),e.deleteTexture(i),null==(c=e.getExtension("WEBGL_lose_context"))||c.loseContext(),r[0]<=r[3]?"premultiplied-alpha":"premultiply-alpha-on-upload"})),ze})}const Ve=class c extends K{constructor(e){var t;super(e),this.isReady=!1,this.uploadMethodId="video",e=__spreadValues(__spreadValues({},c.defaultOptions),e),this._autoUpdate=!0,this._isConnectedToTicker=!1,this._updateFPS=e.updateFPS||0,this._msToNextUpdate=0,this.autoPlay=!1!==e.autoPlay,this.alphaMode=null!=(t=e.alphaMode)?t:"premultiply-alpha-on-upload",this._videoFrameRequestCallback=this._videoFrameRequestCallback.bind(this),this._videoFrameRequestCallbackHandle=null,this._load=null,this._resolve=null,this._reject=null,this._onCanPlay=this._onCanPlay.bind(this),this._onCanPlayThrough=this._onCanPlayThrough.bind(this),this._onError=this._onError.bind(this),this._onPlayStart=this._onPlayStart.bind(this),this._onPlayStop=this._onPlayStop.bind(this),this._onSeeked=this._onSeeked.bind(this),!1!==e.autoLoad&&this.load()}updateFrame(){if(!this.destroyed){if(this._updateFPS){const c=Ge.shared.elapsedMS*this.resource.playbackRate;this._msToNextUpdate=Math.floor(this._msToNextUpdate-c)}(!this._updateFPS||this._msToNextUpdate<=0)&&(this._msToNextUpdate=this._updateFPS?Math.floor(1e3/this._updateFPS):0),this.isValid&&this.update()}}_videoFrameRequestCallback(){this.updateFrame(),this.destroyed?this._videoFrameRequestCallbackHandle=null:this._videoFrameRequestCallbackHandle=this.resource.requestVideoFrameCallback(this._videoFrameRequestCallback)}get isValid(){return!!this.resource.videoWidth&&!!this.resource.videoHeight}load(){return __async(this,null,function*(){if(this._load)return this._load;const c=this.resource,e=this.options;return(c.readyState===c.HAVE_ENOUGH_DATA||c.readyState===c.HAVE_FUTURE_DATA)&&c.width&&c.height&&(c.complete=!0),c.addEventListener("play",this._onPlayStart),c.addEventListener("pause",this._onPlayStop),c.addEventListener("seeked",this._onSeeked),this._isSourceReady()?this._mediaReady():(e.preload||c.addEventListener("canplay",this._onCanPlay),c.addEventListener("canplaythrough",this._onCanPlayThrough),c.addEventListener("error",this._onError,!0)),this.alphaMode=yield Ue(),this._load=new Promise((t,i)=>{this.isValid?t(this):(this._resolve=t,this._reject=i,void 0!==e.preloadTimeoutMs&&(this._preloadTimeout=setTimeout(()=>{this._onError(new ErrorEvent(`Preload exceeded timeout of ${e.preloadTimeoutMs}ms`))})),c.load())}),this._load})}_onError(c){this.resource.removeEventListener("error",this._onError,!0),this.emit("error",c),this._reject&&(this._reject(c),this._reject=null,this._resolve=null)}_isSourcePlaying(){const c=this.resource;return!c.paused&&!c.ended}_isSourceReady(){return this.resource.readyState>2}_onPlayStart(){this.isValid||this._mediaReady(),this._configureAutoUpdate()}_onPlayStop(){this._configureAutoUpdate()}_onSeeked(){this._autoUpdate&&!this._isSourcePlaying()&&(this._msToNextUpdate=0,this.updateFrame(),this._msToNextUpdate=0)}_onCanPlay(){this.resource.removeEventListener("canplay",this._onCanPlay),this._mediaReady()}_onCanPlayThrough(){this.resource.removeEventListener("canplaythrough",this._onCanPlay),this._preloadTimeout&&(clearTimeout(this._preloadTimeout),this._preloadTimeout=void 0),this._mediaReady()}_mediaReady(){const c=this.resource;this.isValid&&(this.isReady=!0,this.resize(c.videoWidth,c.videoHeight)),this._msToNextUpdate=0,this.updateFrame(),this._msToNextUpdate=0,this._resolve&&(this._resolve(this),this._resolve=null,this._reject=null),this._isSourcePlaying()?this._onPlayStart():this.autoPlay&&this.resource.play()}destroy(){this._configureAutoUpdate();const c=this.resource;c&&(c.removeEventListener("play",this._onPlayStart),c.removeEventListener("pause",this._onPlayStop),c.removeEventListener("seeked",this._onSeeked),c.removeEventListener("canplay",this._onCanPlay),c.removeEventListener("canplaythrough",this._onCanPlayThrough),c.removeEventListener("error",this._onError,!0),c.pause(),c.src="",c.load()),super.destroy()}get autoUpdate(){return this._autoUpdate}set autoUpdate(c){c!==this._autoUpdate&&(this._autoUpdate=c,this._configureAutoUpdate())}get updateFPS(){return this._updateFPS}set updateFPS(c){c!==this._updateFPS&&(this._updateFPS=c,this._configureAutoUpdate())}_configureAutoUpdate(){this._autoUpdate&&this._isSourcePlaying()?!this._updateFPS&&this.resource.requestVideoFrameCallback?(this._isConnectedToTicker&&(Ge.shared.remove(this.updateFrame,this),this._isConnectedToTicker=!1,this._msToNextUpdate=0),null===this._videoFrameRequestCallbackHandle&&(this._videoFrameRequestCallbackHandle=this.resource.requestVideoFrameCallback(this._videoFrameRequestCallback))):(null!==this._videoFrameRequestCallbackHandle&&(this.resource.cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle),this._videoFrameRequestCallbackHandle=null),this._isConnectedToTicker||(Ge.shared.add(this.updateFrame,this),this._isConnectedToTicker=!0,this._msToNextUpdate=0)):(null!==this._videoFrameRequestCallbackHandle&&(this.resource.cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle),this._videoFrameRequestCallbackHandle=null),this._isConnectedToTicker&&(Ge.shared.remove(this.updateFrame,this),this._isConnectedToTicker=!1,this._msToNextUpdate=0))}static test(c){return globalThis.HTMLVideoElement&&c instanceof HTMLVideoElement}};Ve.extension=s.TextureSource,Ve.defaultOptions=__spreadProps(__spreadValues({},K.defaultOptions),{autoLoad:!0,autoPlay:!0,updateFPS:0,crossorigin:!0,loop:!1,muted:!0,playsinline:!0,preload:!1}),Ve.MIME_TYPES={ogv:"video/ogg",mov:"video/quicktime",m4v:"video/mp4"};let Ne=Ve;const We=(c,e,t=!1)=>(Array.isArray(c)||(c=[c]),e?c.map(c=>"string"==typeof c||t?e(c):c):c);const He=new class{constructor(){this._parsers=[],this._cache=new Map,this._cacheMap=new Map}reset(){this._cacheMap.clear(),this._cache.clear()}has(c){return this._cache.has(c)}get(c){const e=this._cache.get(c);return e||Bc(`[Assets] Asset id ${c} was not found in the Cache`),e}set(c,e){const t=We(c);let i;for(let a=0;a<this.parsers.length;a++){const c=this.parsers[a];if(c.test(e)){i=c.getCacheableAssets(t,e);break}}const n=new Map(Object.entries(i||{}));i||t.forEach(c=>{n.set(c,e)});const r=[...n.keys()],s={cacheKeys:r,keys:t};t.forEach(c=>{this._cacheMap.set(c,s)}),r.forEach(c=>{const t=i?i[c]:e;this._cache.has(c)&&this._cache.get(c)!==t&&Bc("[Cache] already has key:",c),this._cache.set(c,n.get(c))})}remove(c){if(!this._cacheMap.has(c))return void Bc(`[Assets] Asset id ${c} was not found in the Cache`);const e=this._cacheMap.get(c);e.cacheKeys.forEach(c=>{this._cache.delete(c)}),e.keys.forEach(c=>{this._cacheMap.delete(c)})}get parsers(){return this._parsers}},je=[];function Ye(c={}){const e=c&&c.resource,t=e?c.resource:c,i=e?c:{resource:c};for(let n=0;n<je.length;n++){const c=je[n];if(c.test(t))return new c(i)}throw new Error(`Could not find a source type for resource: ${i.resource}`)}f.handleByList(s.TextureSource,je),cc.from=function(c,e=!1){return"string"==typeof c?He.get(c):c instanceof K?new cc({source:c}):function(c={},e=!1){const t=c&&c.resource,i=t?c.resource:c,n=t?c:{resource:c};if(!e&&He.has(i))return He.get(i);const r=new cc({source:Ye(n)});return r.on("destroy",()=>{He.has(i)&&He.remove(i)}),e||He.set(i,r),r}(c,e)},K.from=Ye,f.add(Me,Ee,Re,Ne,Be,Ie,Q);var Xe=(c=>(c[c.Low=0]="Low",c[c.Normal=1]="Normal",c[c.High=2]="High",c))(Xe||{});function Ze(c){if("string"!=typeof c)throw new TypeError(`Path must be a string. Received ${JSON.stringify(c)}`)}function qe(c){return c.split("?")[0].split("#")[0]}const Ke={toPosix(c){return e="\\",t="/",c.replace(new RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),t);var e,t},isUrl(c){return/^https?:/.test(this.toPosix(c))},isDataUrl:c=>/^data:([a-z]+\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s<>]*?)$/i.test(c),isBlobUrl:c=>c.startsWith("blob:"),hasProtocol(c){return/^[^/:]+:/.test(this.toPosix(c))},getProtocol(c){Ze(c),c=this.toPosix(c);const e=/^file:\/\/\//.exec(c);if(e)return e[0];const t=/^[^/:]+:\/{0,2}/.exec(c);return t?t[0]:""},toAbsolute(c,e,t){if(Ze(c),this.isDataUrl(c)||this.isBlobUrl(c))return c;const i=qe(this.toPosix(null!=e?e:Fe.get().getBaseUrl())),n=qe(this.toPosix(null!=t?t:this.rootname(i)));if((c=this.toPosix(c)).startsWith("/"))return Ke.join(n,c.slice(1));return this.isAbsolute(c)?c:this.join(i,c)},normalize(c){if(Ze(c),0===c.length)return".";if(this.isDataUrl(c)||this.isBlobUrl(c))return c;let e="";const t=(c=this.toPosix(c)).startsWith("/");this.hasProtocol(c)&&(e=this.rootname(c),c=c.slice(e.length));const i=c.endsWith("/");return(c=function(c){let e="",t=0,i=-1,n=0,r=-1;for(let s=0;s<=c.length;++s){if(s<c.length)r=c.charCodeAt(s);else{if(47===r)break;r=47}if(47===r){if(i===s-1||1===n);else if(i!==s-1&&2===n){if(e.length<2||2!==t||46!==e.charCodeAt(e.length-1)||46!==e.charCodeAt(e.length-2))if(e.length>2){const c=e.lastIndexOf("/");if(c!==e.length-1){-1===c?(e="",t=0):(e=e.slice(0,c),t=e.length-1-e.lastIndexOf("/")),i=s,n=0;continue}}else if(2===e.length||1===e.length){e="",t=0,i=s,n=0;continue}}else e.length>0?e+=`/${c.slice(i+1,s)}`:e=c.slice(i+1,s),t=s-i-1;i=s,n=0}else 46===r&&-1!==n?++n:n=-1}return e}(c)).length>0&&i&&(c+="/"),t?`/${c}`:e+c},isAbsolute(c){return Ze(c),c=this.toPosix(c),!!this.hasProtocol(c)||c.startsWith("/")},join(...c){var e;if(0===c.length)return".";let t;for(let i=0;i<c.length;++i){const n=c[i];if(Ze(n),n.length>0)if(void 0===t)t=n;else{const r=null!=(e=c[i-1])?e:"";this.joinExtensions.includes(this.extname(r).toLowerCase())?t+=`/../${n}`:t+=`/${n}`}}return void 0===t?".":this.normalize(t)},dirname(c){if(Ze(c),0===c.length)return".";let e=(c=this.toPosix(c)).charCodeAt(0);const t=47===e;let i=-1,n=!0;const r=this.getProtocol(c),s=c;for(let a=(c=c.slice(r.length)).length-1;a>=1;--a)if(e=c.charCodeAt(a),47===e){if(!n){i=a;break}}else n=!1;return-1===i?t?"/":this.isUrl(s)?r+c:r:t&&1===i?"//":r+c.slice(0,i)},rootname(c){Ze(c);let e="";if(e=(c=this.toPosix(c)).startsWith("/")?"/":this.getProtocol(c),this.isUrl(c)){const t=c.indexOf("/",e.length);e=-1!==t?c.slice(0,t):c,e.endsWith("/")||(e+="/")}return e},basename(c,e){Ze(c),e&&Ze(e),c=qe(this.toPosix(c));let t,i=0,n=-1,r=!0;if(void 0!==e&&e.length>0&&e.length<=c.length){if(e.length===c.length&&e===c)return"";let s=e.length-1,a=-1;for(t=c.length-1;t>=0;--t){const o=c.charCodeAt(t);if(47===o){if(!r){i=t+1;break}}else-1===a&&(r=!1,a=t+1),s>=0&&(o===e.charCodeAt(s)?-1===--s&&(n=t):(s=-1,n=a))}return i===n?n=a:-1===n&&(n=c.length),c.slice(i,n)}for(t=c.length-1;t>=0;--t)if(47===c.charCodeAt(t)){if(!r){i=t+1;break}}else-1===n&&(r=!1,n=t+1);return-1===n?"":c.slice(i,n)},extname(c){Ze(c);let e=-1,t=0,i=-1,n=!0,r=0;for(let s=(c=qe(this.toPosix(c))).length-1;s>=0;--s){const a=c.charCodeAt(s);if(47!==a)-1===i&&(n=!1,i=s+1),46===a?-1===e?e=s:1!==r&&(r=1):-1!==e&&(r=-1);else if(!n){t=s+1;break}}return-1===e||-1===i||0===r||1===r&&e===i-1&&e===t+1?"":c.slice(e,i)},parse(c){Ze(c);const e={root:"",dir:"",base:"",ext:"",name:""};if(0===c.length)return e;let t=(c=qe(this.toPosix(c))).charCodeAt(0);const i=this.isAbsolute(c);let n;e.root=this.rootname(c),n=i||this.hasProtocol(c)?1:0;let r=-1,s=0,a=-1,o=!0,f=c.length-1,l=0;for(;f>=n;--f)if(t=c.charCodeAt(f),47!==t)-1===a&&(o=!1,a=f+1),46===t?-1===r?r=f:1!==l&&(l=1):-1!==r&&(l=-1);else if(!o){s=f+1;break}return-1===r||-1===a||0===l||1===l&&r===a-1&&r===s+1?-1!==a&&(e.base=e.name=0===s&&i?c.slice(1,a):c.slice(s,a)):(0===s&&i?(e.name=c.slice(1,r),e.base=c.slice(1,a)):(e.name=c.slice(s,r),e.base=c.slice(s,a)),e.ext=c.slice(r,a)),e.dir=this.dirname(c),e},sep:"/",delimiter:":",joinExtensions:[".html"]};function Qe(c,e,t,i,n){const r=e[t];for(let s=0;s<r.length;s++){const a=r[s];t<e.length-1?Qe(c.replace(i[t],a),e,t+1,i,n):n.push(c.replace(i[t],a))}}function Je(c){const e=c.match(/\{(.*?)\}/g),t=[];if(e){const i=[];e.forEach(c=>{const e=c.substring(1,c.length-1).split(",");i.push(e)}),Qe(c,i,0,e,t)}else t.push(c);return t}const $e=c=>!Array.isArray(c);class ct{constructor(){this._defaultBundleIdentifierOptions={connector:"-",createBundleAssetId:(c,e)=>`${c}${this._bundleIdConnector}${e}`,extractAssetIdFromBundle:(c,e)=>e.replace(`${c}${this._bundleIdConnector}`,"")},this._bundleIdConnector=this._defaultBundleIdentifierOptions.connector,this._createBundleAssetId=this._defaultBundleIdentifierOptions.createBundleAssetId,this._extractAssetIdFromBundle=this._defaultBundleIdentifierOptions.extractAssetIdFromBundle,this._assetMap={},this._preferredOrder=[],this._parsers=[],this._resolverHash={},this._bundles={}}setBundleIdentifier(c){var e,t,i;if(this._bundleIdConnector=null!=(e=c.connector)?e:this._bundleIdConnector,this._createBundleAssetId=null!=(t=c.createBundleAssetId)?t:this._createBundleAssetId,this._extractAssetIdFromBundle=null!=(i=c.extractAssetIdFromBundle)?i:this._extractAssetIdFromBundle,"bar"!==this._extractAssetIdFromBundle("foo",this._createBundleAssetId("foo","bar")))throw new Error("[Resolver] GenerateBundleAssetId are not working correctly")}prefer(...c){c.forEach(c=>{this._preferredOrder.push(c),c.priority||(c.priority=Object.keys(c.params))}),this._resolverHash={}}set basePath(c){this._basePath=c}get basePath(){return this._basePath}set rootPath(c){this._rootPath=c}get rootPath(){return this._rootPath}get parsers(){return this._parsers}reset(){this.setBundleIdentifier(this._defaultBundleIdentifierOptions),this._assetMap={},this._preferredOrder=[],this._resolverHash={},this._rootPath=null,this._basePath=null,this._manifest=null,this._bundles={},this._defaultSearchParams=null}setDefaultSearchParams(c){if("string"==typeof c)this._defaultSearchParams=c;else{const e=c;this._defaultSearchParams=Object.keys(e).map(c=>`${encodeURIComponent(c)}=${encodeURIComponent(e[c])}`).join("&")}}getAlias(c){const{alias:e,src:t}=c;return We(e||t,c=>"string"==typeof c?c:Array.isArray(c)?c.map(c=>{var e;return null!=(e=null==c?void 0:c.src)?e:c}):(null==c?void 0:c.src)?c.src:c,!0)}addManifest(c){this._manifest&&Bc("[Resolver] Manifest already exists, this will be overwritten"),this._manifest=c,c.bundles.forEach(c=>{this.addBundle(c.name,c.assets)})}addBundle(c,e){const t=[];let i=e;Array.isArray(e)||(i=Object.entries(e).map(([c,e])=>"string"==typeof e||Array.isArray(e)?{alias:c,src:e}:__spreadValues({alias:c},e))),i.forEach(e=>{const i=e.src,n=e.alias;let r;if("string"==typeof n){const e=this._createBundleAssetId(c,n);t.push(e),r=[n,e]}else{const e=n.map(e=>this._createBundleAssetId(c,e));t.push(...e),r=[...n,...e]}this.add(__spreadValues(__spreadValues({},e),{alias:r,src:i}))}),this._bundles[c]=t}add(c){const e=[];let t;Array.isArray(c)?e.push(...c):e.push(c),t=c=>{this.hasKey(c)&&Bc(`[Resolver] already has key: ${c} overwriting`)};We(e).forEach(c=>{const{src:e}=c;let{data:i,format:n,loadParser:r,parser:s}=c;const a=We(e).map(c=>"string"==typeof c?Je(c):Array.isArray(c)?c:[c]),o=this.getAlias(c);Array.isArray(o)?o.forEach(t):t(o);const f=[],l=c=>{const e=this._parsers.find(e=>e.test(c));return __spreadValues({src:c},null==e?void 0:e.parse(c))};a.forEach(e=>{e.forEach(e=>{var t,a,d,h;let u={};if("object"!=typeof e?u=l(e):(i=null!=(t=e.data)?t:i,n=null!=(a=e.format)?a:n,(e.loadParser||e.parser)&&(r=null!=(d=e.loadParser)?d:r,s=null!=(h=e.parser)?h:s),u=__spreadValues(__spreadValues({},l(e.src)),e)),!o)throw new Error(`[Resolver] alias is undefined for this asset: ${u.src}`);u=this._buildResolvedAsset(u,{aliases:o,data:i,format:n,loadParser:r,parser:s,progressSize:c.progressSize}),f.push(u)})}),o.forEach(c=>{this._assetMap[c]=f})})}resolveBundle(c){const e=$e(c);c=We(c);const t={};return c.forEach(c=>{const e=this._bundles[c];if(e){const i=this.resolve(e),n={};for(const e in i){const t=i[e];n[this._extractAssetIdFromBundle(c,e)]=t}t[c]=n}}),e?t[c[0]]:t}resolveUrl(c){const e=this.resolve(c);if("string"!=typeof c){const c={};for(const t in e)c[t]=e[t].src;return c}return e.src}resolve(c){const e=$e(c);c=We(c);const t={};return c.forEach(c=>{if(!this._resolverHash[c])if(this._assetMap[c]){let e=this._assetMap[c];const t=this._getPreferredOrder(e);null==t||t.priority.forEach(c=>{t.params[c].forEach(t=>{const i=e.filter(e=>!!e[c]&&e[c]===t);i.length&&(e=i)})}),this._resolverHash[c]=e[0]}else this._resolverHash[c]=this._buildResolvedAsset({alias:[c],src:c},{});t[c]=this._resolverHash[c]}),e?t[c[0]]:t}hasKey(c){return!!this._assetMap[c]}hasBundle(c){return!!this._bundles[c]}_getPreferredOrder(c){for(let e=0;e<c.length;e++){const t=c[e],i=this._preferredOrder.find(c=>c.params.format.includes(t.format));if(i)return i}return this._preferredOrder[0]}_appendDefaultSearchParams(c){if(!this._defaultSearchParams)return c;return`${c}${/\?/.test(c)?"&":"?"}${this._defaultSearchParams}`}_buildResolvedAsset(c,e){var t,i;const{aliases:n,data:r,loadParser:s,parser:a,format:o,progressSize:f}=e;return(this._basePath||this._rootPath)&&(c.src=Ke.toAbsolute(c.src,this._basePath,this._rootPath)),c.alias=null!=(t=null!=n?n:c.alias)?t:[c.src],c.src=this._appendDefaultSearchParams(c.src),c.data=__spreadValues(__spreadValues({},r||{}),c.data),c.loadParser=null!=s?s:c.loadParser,c.parser=null!=a?a:c.parser,c.format=null!=(i=null!=o?o:c.format)?i:c.src.split(".").pop().split("?").shift().split("#").shift(),void 0!==f&&(c.progressSize=f),c}}ct.RETINA_PREFIX=/@([0-9\.]+)x/;const et=(c,e)=>{const t=e.split("?")[1];return t&&(c+=`?${t}`),c},tt=class c{constructor(c,e){this.linkedSheets=[];let t=c;(null==c?void 0:c.source)instanceof K&&(t={texture:c,data:e});const{texture:i,data:n,cachePrefix:r=""}=t;this.cachePrefix=r,this._texture=i instanceof cc?i:null,this.textureSource=i.source,this.textures={},this.animations={},this.data=n;const s=parseFloat(n.meta.scale);s?(this.resolution=s,i.source.resolution=this.resolution):this.resolution=i.source._resolution,this._frames=this.data.frames,this._frameKeys=Object.keys(this._frames),this._batchIndex=0,this._callback=null}parse(){return new Promise(e=>{this._callback=e,this._batchIndex=0,this._frameKeys.length<=c.BATCH_SIZE?(this._processFrames(0),this._processAnimations(),this._parseComplete()):this._nextBatch()})}parseSync(){return this._processFrames(0,!0),this._processAnimations(),this.textures}_processFrames(e,t=!1){let i=e;const n=t?1/0:c.BATCH_SIZE;for(;i-e<n&&i<this._frameKeys.length;){const c=this._frameKeys[i],e=this._frames[c],t=e.frame;if(t){let i=null,n=null;const r=!1!==e.trimmed&&e.sourceSize?e.sourceSize:e.frame,s=new D(0,0,Math.floor(r.w)/this.resolution,Math.floor(r.h)/this.resolution);i=e.rotated?new D(Math.floor(t.x)/this.resolution,Math.floor(t.y)/this.resolution,Math.floor(t.h)/this.resolution,Math.floor(t.w)/this.resolution):new D(Math.floor(t.x)/this.resolution,Math.floor(t.y)/this.resolution,Math.floor(t.w)/this.resolution,Math.floor(t.h)/this.resolution),!1!==e.trimmed&&e.spriteSourceSize&&(n=new D(Math.floor(e.spriteSourceSize.x)/this.resolution,Math.floor(e.spriteSourceSize.y)/this.resolution,Math.floor(t.w)/this.resolution,Math.floor(t.h)/this.resolution)),this.textures[c]=new cc({source:this.textureSource,frame:i,orig:s,trim:n,rotate:e.rotated?2:0,defaultAnchor:e.anchor,defaultBorders:e.borders,label:c.toString()})}i++}}_processAnimations(){const c=this.data.animations||{};for(const e in c){this.animations[e]=[];for(let t=0;t<c[e].length;t++){const i=c[e][t];this.animations[e].push(this.textures[i])}}}_parseComplete(){const c=this._callback;this._callback=null,this._batchIndex=0,c.call(this,this.textures)}_nextBatch(){this._processFrames(this._batchIndex*c.BATCH_SIZE),this._batchIndex++,setTimeout(()=>{this._batchIndex*c.BATCH_SIZE<this._frameKeys.length?this._nextBatch():(this._processAnimations(),this._parseComplete())},0)}destroy(c=!1){var e;for(const t in this.textures)this.textures[t].destroy();this._frames=null,this._frameKeys=null,this.data=null,this.textures=null,c&&(null==(e=this._texture)||e.destroy(),this.textureSource.destroy()),this._texture=null,this.textureSource=null,this.linkedSheets=[]}};tt.BATCH_SIZE=1e3;let it=tt;const nt=["jpg","png","jpeg","avif","webp","basis","etc2","bc7","bc6h","bc5","bc4","bc3","bc2","bc1","eac","astc"];function rt(c,e,t){const i={};if(c.forEach(c=>{i[c]=e}),Object.keys(e.textures).forEach(c=>{i[`${e.cachePrefix}${c}`]=e.textures[c]}),!t){const t=Ke.dirname(c[0]);e.linkedSheets.forEach((c,n)=>{const r=rt([`${t}/${e.data.meta.related_multi_packs[n]}`],c,!0);Object.assign(i,r)})}return i}const st={extension:s.Asset,cache:{test:c=>c instanceof it,getCacheableAssets:(c,e)=>rt(c,e,!1)},resolver:{extension:{type:s.ResolveParser,name:"resolveSpritesheet"},test:c=>{const e=c.split("?")[0].split("."),t=e.pop(),i=e.pop();return"json"===t&&nt.includes(i)},parse:c=>{var e,t;const i=c.split(".");return{resolution:parseFloat(null!=(t=null==(e=ct.RETINA_PREFIX.exec(c))?void 0:e[1])?t:"1"),format:i[i.length-2],src:c}}},loader:{name:"spritesheetLoader",id:"spritesheet",extension:{type:s.LoadParser,priority:Xe.Normal,name:"spritesheetLoader"},testParse(c,e){return __async(this,null,function*(){return".json"===Ke.extname(e.src).toLowerCase()&&!!c.frames})},parse(c,e,t){return __async(this,null,function*(){var i,n,r;const{texture:s,imageFilename:a,textureOptions:o,cachePrefix:f}=null!=(i=null==e?void 0:e.data)?i:{};let l,d=Ke.dirname(e.src);if(d&&d.lastIndexOf("/")!==d.length-1&&(d+="/"),s instanceof cc)l=s;else{const i=et(d+(null!=a?a:c.meta.image),e.src);l=(yield t.load([{src:i,data:o}]))[i]}const h=new it({texture:l.source,data:c,cachePrefix:f});yield h.parse();const u=null==(n=null==c?void 0:c.meta)?void 0:n.related_multi_packs;if(Array.isArray(u)){const c=[];for(const n of u){if("string"!=typeof n)continue;let i=d+n;(null==(r=e.data)?void 0:r.ignoreMultiPack)||(i=et(i,e.src),c.push(t.load({src:i,data:{textureOptions:o,ignoreMultiPack:!0}})))}const i=yield Promise.all(c);h.linkedSheets=i,i.forEach(c=>{c.linkedSheets=[h].concat(h.linkedSheets.filter(e=>e!==c))})}return h})},unload(c,e,t){return __async(this,null,function*(){yield t.unload(c.textureSource._sourceOrigin),c.destroy(!1)})}}};f.add(st);class at{constructor(c){this._lastTransform="",this._observer=null,this._tickerAttached=!1,this.updateTranslation=()=>{if(!this._canvas)return;const c=this._canvas.getBoundingClientRect(),e=this._canvas.width,t=this._canvas.height,i=c.width/e*this._renderer.resolution,n=c.height/t*this._renderer.resolution,r=`translate(${c.left}px, ${c.top}px) scale(${i}, ${n})`;r!==this._lastTransform&&(this._domElement.style.transform=r,this._lastTransform=r)},this._domElement=c.domElement,this._renderer=c.renderer,globalThis.OffscreenCanvas&&this._renderer.canvas instanceof OffscreenCanvas||(this._canvas=this._renderer.canvas,this._attachObserver())}get canvas(){return this._canvas}ensureAttached(){!this._domElement.parentNode&&this._canvas.parentNode&&(this._canvas.parentNode.appendChild(this._domElement),this.updateTranslation())}_attachObserver(){"ResizeObserver"in globalThis?(this._observer&&(this._observer.disconnect(),this._observer=null),this._observer=new ResizeObserver(c=>{for(const e of c){if(e.target!==this._canvas)continue;const c=this.canvas.width,t=this.canvas.height,i=e.contentRect.width/c*this._renderer.resolution,n=e.contentRect.height/t*this._renderer.resolution;(this._lastScaleX!==i||this._lastScaleY!==n)&&(this.updateTranslation(),this._lastScaleX=i,this._lastScaleY=n)}}),this._observer.observe(this._canvas)):this._tickerAttached||Ge.shared.add(this.updateTranslation,this,De.HIGH)}destroy(){this._observer?(this._observer.disconnect(),this._observer=null):this._tickerAttached&&Ge.shared.remove(this.updateTranslation),this._domElement=null,this._renderer=null,this._canvas=null,this._tickerAttached=!1,this._lastTransform="",this._lastScaleX=null,this._lastScaleY=null}}class ot{constructor(c){this.bubbles=!0,this.cancelBubble=!0,this.cancelable=!1,this.composed=!1,this.defaultPrevented=!1,this.eventPhase=ot.prototype.NONE,this.propagationStopped=!1,this.propagationImmediatelyStopped=!1,this.layer=new x,this.page=new x,this.NONE=0,this.CAPTURING_PHASE=1,this.AT_TARGET=2,this.BUBBLING_PHASE=3,this.manager=c}get layerX(){return this.layer.x}get layerY(){return this.layer.y}get pageX(){return this.page.x}get pageY(){return this.page.y}get data(){return this}composedPath(){return!this.manager||this.path&&this.path[this.path.length-1]===this.target||(this.path=this.target?this.manager.propagationPath(this.target):[]),this.path}initEvent(c,e,t){throw new Error("initEvent() is a legacy DOM API. It is not implemented in the Federated Events API.")}initUIEvent(c,e,t,i,n){throw new Error("initUIEvent() is a legacy DOM API. It is not implemented in the Federated Events API.")}preventDefault(){this.nativeEvent instanceof Event&&this.nativeEvent.cancelable&&this.nativeEvent.preventDefault(),this.defaultPrevented=!0}stopImmediatePropagation(){this.propagationImmediatelyStopped=!0}stopPropagation(){this.propagationStopped=!0}}var ft=/iPhone/i,lt=/iPod/i,dt=/iPad/i,ht=/\biOS-universal(?:.+)Mac\b/i,ut=/\bAndroid(?:.+)Mobile\b/i,pt=/Android/i,gt=/(?:SD4930UR|\bSilk(?:.+)Mobile\b)/i,mt=/Silk/i,bt=/Windows Phone/i,vt=/\bWindows(?:.+)ARM\b/i,yt=/BlackBerry/i,_t=/BB10/i,xt=/Opera Mini/i,St=/\b(CriOS|Chrome)(?:.+)Mobile/i,wt=/Mobile(?:.+)Firefox\b/i,Ct=function(c){return void 0!==c&&"MacIntel"===c.platform&&"number"==typeof c.maxTouchPoints&&c.maxTouchPoints>1&&"undefined"==typeof MSStream};function At(c){var e={userAgent:"",platform:"",maxTouchPoints:0};c||"undefined"==typeof navigator?"string"==typeof c?e.userAgent=c:c&&c.userAgent&&(e={userAgent:c.userAgent,platform:c.platform,maxTouchPoints:c.maxTouchPoints||0}):e={userAgent:navigator.userAgent,platform:navigator.platform,maxTouchPoints:navigator.maxTouchPoints||0};var t=e.userAgent,i=t.split("[FBAN");void 0!==i[1]&&(t=i[0]),void 0!==(i=t.split("Twitter"))[1]&&(t=i[0]);var n=function(c){return function(e){return e.test(c)}}(t),r={apple:{phone:n(ft)&&!n(bt),ipod:n(lt),tablet:!n(ft)&&(n(dt)||Ct(e))&&!n(bt),universal:n(ht),device:(n(ft)||n(lt)||n(dt)||n(ht)||Ct(e))&&!n(bt)},amazon:{phone:n(gt),tablet:!n(gt)&&n(mt),device:n(gt)||n(mt)},android:{phone:!n(bt)&&n(gt)||!n(bt)&&n(ut),tablet:!n(bt)&&!n(gt)&&!n(ut)&&(n(mt)||n(pt)),device:!n(bt)&&(n(gt)||n(mt)||n(ut)||n(pt))||n(/\bokhttp\b/i)},windows:{phone:n(bt),tablet:n(vt),device:n(bt)||n(vt)},other:{blackberry:n(yt),blackberry10:n(_t),opera:n(xt),firefox:n(wt),chrome:n(St),device:n(yt)||n(_t)||n(xt)||n(wt)||n(St)},any:!1,phone:!1,tablet:!1};return r.any=r.apple.device||r.android.device||r.windows.device||r.other.device,r.phone=r.apple.phone||r.android.phone||r.windows.phone,r.tablet=r.apple.tablet||r.android.tablet||r.windows.tablet,r}const Tt=(null!=(c=At.default)?c:At)(globalThis.navigator),Pt=class c{constructor(c,e=Tt){this._mobileInfo=e,this.debug=!1,this._activateOnTab=!0,this._deactivateOnMouseMove=!0,this._isActive=!1,this._isMobileAccessibility=!1,this._div=null,this._pools={},this._renderId=0,this._children=[],this._androidUpdateCount=0,this._androidUpdateFrequency=500,this._isRunningTests=!1,this._boundOnKeyDown=this._onKeyDown.bind(this),this._boundOnMouseMove=this._onMouseMove.bind(this),this._hookDiv=null,(e.tablet||e.phone)&&this._createTouchHook(),this._renderer=c}get isActive(){return this._isActive}get isMobileAccessibility(){return this._isMobileAccessibility}get hookDiv(){return this._hookDiv}get div(){return this._div}_createTouchHook(){const c=document.createElement("button");c.style.width="1px",c.style.height="1px",c.style.position="absolute",c.style.top="-1000px",c.style.left="-1000px",c.style.zIndex=2..toString(),c.style.backgroundColor="#FF0000",c.title="select to enable accessibility for this content",c.addEventListener("focus",()=>{this._isMobileAccessibility=!0,this._activate(),this._destroyTouchHook()}),document.body.appendChild(c),this._hookDiv=c}_destroyTouchHook(){this._hookDiv&&(document.body.removeChild(this._hookDiv),this._hookDiv=null)}_activate(){if(this._isActive)return;this._isActive=!0,this._div||(this._div=document.createElement("div"),this._div.style.position="absolute",this._div.style.top="0px",this._div.style.left="0px",this._div.style.pointerEvents="none",this._div.style.zIndex=2..toString(),this._canvasObserver=new at({domElement:this._div,renderer:this._renderer})),this._activateOnTab&&globalThis.addEventListener("keydown",this._boundOnKeyDown,!1),this._deactivateOnMouseMove&&globalThis.document.addEventListener("mousemove",this._boundOnMouseMove,!0);const c=this._renderer.view.canvas;if(c.parentNode)this._canvasObserver.ensureAttached(),this._initAccessibilitySetup();else{const e=new MutationObserver(()=>{c.parentNode&&(e.disconnect(),this._canvasObserver.ensureAttached(),this._initAccessibilitySetup())});e.observe(document.body,{childList:!0,subtree:!0})}}_initAccessibilitySetup(){this._renderer.runners.postrender.add(this),this._renderer.lastObjectRendered&&this._updateAccessibleObjects(this._renderer.lastObjectRendered)}_deactivate(){var c,e;if(this._isActive&&!this._isMobileAccessibility){this._isActive=!1,globalThis.document.removeEventListener("mousemove",this._boundOnMouseMove,!0),this._activateOnTab&&globalThis.addEventListener("keydown",this._boundOnKeyDown,!1),this._renderer.runners.postrender.remove(this);for(const e of this._children)(null==(c=e._accessibleDiv)?void 0:c.parentNode)&&(e._accessibleDiv.parentNode.removeChild(e._accessibleDiv),e._accessibleDiv=null),e._accessibleActive=!1;for(const c in this._pools){this._pools[c].forEach(c=>{c.parentNode&&c.parentNode.removeChild(c)}),delete this._pools[c]}(null==(e=this._div)?void 0:e.parentNode)&&this._div.parentNode.removeChild(this._div),this._pools={},this._children=[]}}_updateAccessibleObjects(c){if(!c.visible||!c.accessibleChildren)return;c.accessible&&(c._accessibleActive||this._addChild(c),c._renderId=this._renderId);const e=c.children;if(e)for(let t=0;t<e.length;t++)this._updateAccessibleObjects(e[t])}init(e){const t=c.defaultOptions,i={accessibilityOptions:__spreadValues(__spreadValues({},t),(null==e?void 0:e.accessibilityOptions)||{})};this.debug=i.accessibilityOptions.debug,this._activateOnTab=i.accessibilityOptions.activateOnTab,this._deactivateOnMouseMove=i.accessibilityOptions.deactivateOnMouseMove,i.accessibilityOptions.enabledByDefault&&this._activate(),this._renderer.runners.postrender.remove(this)}postrender(){const c=performance.now();if(this._mobileInfo.android.device&&c<this._androidUpdateCount)return;if(this._androidUpdateCount=c+this._androidUpdateFrequency,!(this._renderer.renderingToScreen&&this._renderer.view.canvas||this._isRunningTests))return;const e=new Set;if(this._renderer.lastObjectRendered){this._updateAccessibleObjects(this._renderer.lastObjectRendered);for(const c of this._children)c._renderId===this._renderId&&e.add(this._children.indexOf(c))}for(let t=this._children.length-1;t>=0;t--){const c=this._children[t];if(!e.has(t)){if(c._accessibleDiv&&c._accessibleDiv.parentNode){c._accessibleDiv.parentNode.removeChild(c._accessibleDiv);this._getPool(c.accessibleType).push(c._accessibleDiv),c._accessibleDiv=null}c._accessibleActive=!1,Gc(this._children,t,1)}}this._renderer.renderingToScreen&&this._canvasObserver.ensureAttached();for(let t=0;t<this._children.length;t++){const c=this._children[t];if(!c._accessibleActive||!c._accessibleDiv)continue;const e=c._accessibleDiv,i=c.hitArea||c.getBounds().rectangle;if(c.hitArea){const t=c.worldTransform;e.style.left=`${t.tx+i.x*t.a}px`,e.style.top=`${t.ty+i.y*t.d}px`,e.style.width=i.width*t.a+"px",e.style.height=i.height*t.d+"px"}else this._capHitArea(i),e.style.left=`${i.x}px`,e.style.top=`${i.y}px`,e.style.width=`${i.width}px`,e.style.height=`${i.height}px`}this._renderId++}_updateDebugHTML(c){c.innerHTML=`type: ${c.type}</br> title : ${c.title}</br> tabIndex: ${c.tabIndex}`}_capHitArea(c){c.x<0&&(c.width+=c.x,c.x=0),c.y<0&&(c.height+=c.y,c.y=0);const{width:e,height:t}=this._renderer;c.x+c.width>e&&(c.width=e-c.x),c.y+c.height>t&&(c.height=t-c.y)}_addChild(c){let e=this._getPool(c.accessibleType).pop();e?(e.innerHTML="",e.removeAttribute("title"),e.removeAttribute("aria-label"),e.tabIndex=0):("button"===c.accessibleType?e=document.createElement("button"):(e=document.createElement(c.accessibleType),e.style.cssText="\n color: transparent;\n pointer-events: none;\n padding: 0;\n margin: 0;\n border: 0;\n outline: 0;\n background: transparent;\n box-sizing: border-box;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n ",c.accessibleText&&(e.innerText=c.accessibleText)),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,255,255,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2..toString(),e.style.borderStyle="none",navigator.userAgent.toLowerCase().includes("chrome")?e.setAttribute("aria-live","off"):e.setAttribute("aria-live","polite"),navigator.userAgent.match(/rv:.*Gecko\//)?e.setAttribute("aria-relevant","additions"):e.setAttribute("aria-relevant","text"),e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.style.pointerEvents=c.accessiblePointerEvents,e.type=c.accessibleType,c.accessibleTitle&&null!==c.accessibleTitle?e.title=c.accessibleTitle:c.accessibleHint&&null!==c.accessibleHint||(e.title=`container ${c.tabIndex}`),c.accessibleHint&&null!==c.accessibleHint&&e.setAttribute("aria-label",c.accessibleHint),c.interactive?e.tabIndex=c.tabIndex:e.tabIndex=0,this.debug&&this._updateDebugHTML(e),c._accessibleActive=!0,c._accessibleDiv=e,e.container=c,this._children.push(c),this._div.appendChild(c._accessibleDiv)}_dispatchEvent(c,e){const{container:t}=c.target,i=this._renderer.events.rootBoundary,n=Object.assign(new ot(i),{target:t});i.rootTarget=this._renderer.lastObjectRendered,e.forEach(c=>i.dispatchEvent(n,c))}_onClick(c){this._dispatchEvent(c,["click","pointertap","tap"])}_onFocus(c){c.target.getAttribute("aria-live")||c.target.setAttribute("aria-live","assertive"),this._dispatchEvent(c,["mouseover"])}_onFocusOut(c){c.target.getAttribute("aria-live")||c.target.setAttribute("aria-live","polite"),this._dispatchEvent(c,["mouseout"])}_onKeyDown(c){9===c.keyCode&&this._activateOnTab&&this._activate()}_onMouseMove(c){0===c.movementX&&0===c.movementY||this._deactivate()}destroy(){var c;this._deactivate(),this._destroyTouchHook(),null==(c=this._canvasObserver)||c.destroy(),this._canvasObserver=null,this._div=null,this._pools=null,this._children=null,this._renderer=null,this._hookDiv=null,globalThis.removeEventListener("keydown",this._boundOnKeyDown),this._boundOnKeyDown=null,globalThis.document.removeEventListener("mousemove",this._boundOnMouseMove,!0),this._boundOnMouseMove=null}setAccessibilityEnabled(c){c?this._activate():this._deactivate()}_getPool(c){return this._pools[c]||(this._pools[c]=[]),this._pools[c]}};Pt.extension={type:[s.WebGLSystem,s.WebGPUSystem],name:"accessibility"},Pt.defaultOptions={enabledByDefault:!1,debug:!1,activateOnTab:!0,deactivateOnMouseMove:!0};let Mt=Pt;const Et=Object.create(null),Rt=Object.create(null);function kt(c,e){let t=Rt[c];return void 0===t&&(void 0===Et[e]&&(Et[e]=1),Rt[c]=t=Et[e]++),t}let Ft,It;function Bt(){if(!Ft||(null==Ft?void 0:Ft.isContextLost())){const c=Fe.get().createCanvas();Ft=c.getContext("webgl",{})}return Ft}function Dt(){if(!It){It="mediump";const c=Bt();if(c&&c.getShaderPrecisionFormat){const e=c.getShaderPrecisionFormat(c.FRAGMENT_SHADER,c.HIGH_FLOAT);It=e.precision?"highp":"mediump"}}return It}const Ot={},Lt={};const zt={stripVersion:function(c,e){return e?c.replace("#version 300 es",""):c},ensurePrecision:function(c,e,t){const i=t?e.maxSupportedFragmentPrecision:e.maxSupportedVertexPrecision;if("precision"!==c.substring(0,9)){let n=t?e.requestedFragmentPrecision:e.requestedVertexPrecision;return"highp"===n&&"highp"!==i&&(n="mediump"),`precision ${n} float;\n${c}`}return"highp"!==i&&"precision highp"===c.substring(0,15)?c.replace("precision highp","precision mediump"):c},addProgramDefines:function(c,e,t){return e?c:t?`\n\n #ifdef GL_ES // This checks if it is WebGL1\n #define in varying\n #define finalColor gl_FragColor\n #define texture texture2D\n #endif\n ${c=c.replace("out vec4 finalColor;","")}\n `:`\n\n #ifdef GL_ES // This checks if it is WebGL1\n #define in attribute\n #define out varying\n #endif\n ${c}\n `},setProgramName:function(c,{name:e="pixi-program"},t=!0){e=e.replace(/\s+/g,"-");const i=t?Ot:Lt;return i[e+=t?"-fragment":"-vertex"]?(i[e]++,e+=`-${i[e]}`):i[e]=1,-1!==c.indexOf("#define SHADER_NAME")?c:`${`#define SHADER_NAME ${e}`}\n${c}`},insertVersion:function(c,e){return e?`#version 300 es\n${c}`:c}},Gt=Object.create(null),Ut=class c{constructor(e){const t=-1!==(e=__spreadValues(__spreadValues({},c.defaultOptions),e)).fragment.indexOf("#version 300 es"),i={stripVersion:t,ensurePrecision:{requestedFragmentPrecision:e.preferredFragmentPrecision,requestedVertexPrecision:e.preferredVertexPrecision,maxSupportedVertexPrecision:"highp",maxSupportedFragmentPrecision:Dt()},setProgramName:{name:e.name},addProgramDefines:t,insertVersion:t};let n=e.fragment,r=e.vertex;Object.keys(zt).forEach(c=>{const e=i[c];n=zt[c](n,e,!0),r=zt[c](r,e,!1)}),this.fragment=n,this.vertex=r,this.transformFeedbackVaryings=e.transformFeedbackVaryings,this._key=kt(`${this.vertex}:${this.fragment}`,"gl-program")}destroy(){this.fragment=null,this.vertex=null,this._attributeData=null,this._uniformData=null,this._uniformBlockData=null,this.transformFeedbackVaryings=null,Gt[this._cacheKey]=null}static from(e){const t=`${e.vertex}:${e.fragment}`;return Gt[t]||(Gt[t]=new c(e),Gt[t]._cacheKey=t),Gt[t]}};Ut.defaultOptions={preferredVertexPrecision:"highp",preferredFragmentPrecision:"mediump"};let Vt=Ut;const Nt={uint8x2:{size:2,stride:2,normalised:!1},uint8x4:{size:4,stride:4,normalised:!1},sint8x2:{size:2,stride:2,normalised:!1},sint8x4:{size:4,stride:4,normalised:!1},unorm8x2:{size:2,stride:2,normalised:!0},unorm8x4:{size:4,stride:4,normalised:!0},snorm8x2:{size:2,stride:2,normalised:!0},snorm8x4:{size:4,stride:4,normalised:!0},uint16x2:{size:2,stride:4,normalised:!1},uint16x4:{size:4,stride:8,normalised:!1},sint16x2:{size:2,stride:4,normalised:!1},sint16x4:{size:4,stride:8,normalised:!1},unorm16x2:{size:2,stride:4,normalised:!0},unorm16x4:{size:4,stride:8,normalised:!0},snorm16x2:{size:2,stride:4,normalised:!0},snorm16x4:{size:4,stride:8,normalised:!0},float16x2:{size:2,stride:4,normalised:!1},float16x4:{size:4,stride:8,normalised:!1},float32:{size:1,stride:4,normalised:!1},float32x2:{size:2,stride:8,normalised:!1},float32x3:{size:3,stride:12,normalised:!1},float32x4:{size:4,stride:16,normalised:!1},uint32:{size:1,stride:4,normalised:!1},uint32x2:{size:2,stride:8,normalised:!1},uint32x3:{size:3,stride:12,normalised:!1},uint32x4:{size:4,stride:16,normalised:!1},sint32:{size:1,stride:4,normalised:!1},sint32x2:{size:2,stride:8,normalised:!1},sint32x3:{size:3,stride:12,normalised:!1},sint32x4:{size:4,stride:16,normalised:!1}};function Wt(c){var e;return null!=(e=Nt[c])?e:Nt.float32}const Ht={f32:"float32","vec2<f32>":"float32x2","vec3<f32>":"float32x3","vec4<f32>":"float32x4",vec2f:"float32x2",vec3f:"float32x3",vec4f:"float32x4",i32:"sint32","vec2<i32>":"sint32x2","vec3<i32>":"sint32x3","vec4<i32>":"sint32x4",vec2i:"sint32x2",vec3i:"sint32x3",vec4i:"sint32x4",u32:"uint32","vec2<u32>":"uint32x2","vec3<u32>":"uint32x3","vec4<u32>":"uint32x4",vec2u:"uint32x2",vec3u:"uint32x3",vec4u:"uint32x4",bool:"uint32","vec2<bool>":"uint32x2","vec3<bool>":"uint32x3","vec4<bool>":"uint32x4"},jt=/@location\((\d+)\)\s+([a-zA-Z0-9_]+)\s*:\s*([a-zA-Z0-9_<>]+)(?:,|\s|\)|$)/g;function Yt(c,e){var t;let i;for(;null!==(i=jt.exec(c));){const c=null!=(t=Ht[i[3]])?t:"float32";e[i[2]]={location:parseInt(i[1],10),format:c,stride:Wt(c).stride,offset:0,instance:!1,start:0}}jt.lastIndex=0}function Xt(c){var e,t,i;const n=/@group\((\d+)\)/,r=/@binding\((\d+)\)/,s=/var(<[^>]+>)? (\w+)/,a=/:\s*([\w<>]+)/,o=/(\w+)\s*:\s*([\w\<\>]+)/g,f=/struct\s+(\w+)/,l=null==(e=c.match(/(^|[^/])@(group|binding)\(\d+\)[^;]+;/g))?void 0:e.map(c=>({group:parseInt(c.match(n)[1],10),binding:parseInt(c.match(r)[1],10),name:c.match(s)[2],isUniform:"<uniform>"===c.match(s)[1],type:c.match(a)[1]}));if(!l)return{groups:[],structs:[]};const d=null!=(i=null==(t=c.match(/struct\s+(\w+)\s*{([^}]+)}/g))?void 0:t.map(c=>{const e=c.match(f)[1],t=c.match(o).reduce((c,e)=>{const[t,i]=e.split(":");return c[t.trim()]=i.trim(),c},{});return t?{name:e,members:t}:null}).filter(({name:c})=>l.some(e=>e.type===c||e.type.includes(`<${c}>`))))?i:[];return{groups:l,structs:d}}var Zt=(c=>(c[c.VERTEX=1]="VERTEX",c[c.FRAGMENT=2]="FRAGMENT",c[c.COMPUTE=4]="COMPUTE",c))(Zt||{});const qt=Object.create(null);class Kt{constructor(c){var e,t;this._layoutKey=0,this._attributeLocationsKey=0;const{fragment:i,vertex:n,layout:r,gpuLayout:s,name:a}=c;if(this.name=a,this.fragment=i,this.vertex=n,i.source===n.source){const c=Xt(i.source);this.structsAndGroups=c}else{const c=Xt(n.source),e=Xt(i.source);this.structsAndGroups=function(c,e){const t=new Set,i=new Set;return{structs:[...c.structs,...e.structs].filter(c=>!t.has(c.name)&&(t.add(c.name),!0)),groups:[...c.groups,...e.groups].filter(c=>{const e=`${c.name}-${c.binding}`;return!i.has(e)&&(i.add(e),!0)})}}(c,e)}this.layout=null!=r?r:function({groups:c}){const e=[];for(let t=0;t<c.length;t++){const i=c[t];e[i.group]||(e[i.group]={}),e[i.group][i.name]=i.binding}return e}(this.structsAndGroups),this.gpuLayout=null!=s?s:function({groups:c}){const e=[];for(let t=0;t<c.length;t++){const i=c[t];e[i.group]||(e[i.group]=[]),i.isUniform?e[i.group].push({binding:i.binding,visibility:Zt.VERTEX|Zt.FRAGMENT,buffer:{type:"uniform"}}):"sampler"===i.type?e[i.group].push({binding:i.binding,visibility:Zt.FRAGMENT,sampler:{type:"filtering"}}):"texture_2d"===i.type||i.type.startsWith("texture_2d<")?e[i.group].push({binding:i.binding,visibility:Zt.FRAGMENT,texture:{sampleType:"float",viewDimension:"2d",multisampled:!1}}):"texture_2d_array"===i.type||i.type.startsWith("texture_2d_array<")?e[i.group].push({binding:i.binding,visibility:Zt.FRAGMENT,texture:{sampleType:"float",viewDimension:"2d-array",multisampled:!1}}):("texture_cube"===i.type||i.type.startsWith("texture_cube<"))&&e[i.group].push({binding:i.binding,visibility:Zt.FRAGMENT,texture:{sampleType:"float",viewDimension:"cube",multisampled:!1}})}for(let t=0;t<e.length;t++)e[t]||(e[t]=[]);return e}(this.structsAndGroups),this.autoAssignGlobalUniforms=!(void 0===(null==(e=this.layout[0])?void 0:e.globalUniforms)),this.autoAssignLocalUniforms=!(void 0===(null==(t=this.layout[1])?void 0:t.localUniforms)),this._generateProgramKey()}_generateProgramKey(){const{vertex:c,fragment:e}=this,t=c.source+e.source+c.entryPoint+e.entryPoint;this._layoutKey=kt(t,"program")}get attributeData(){return null!=this._attributeData||(this._attributeData=function({source:c,entryPoint:e}){const t={},i=function(c){return c.replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"")}(c),n=i.indexOf(`fn ${e}(`);if(-1===n)return t;const r=i.indexOf("->",n);if(-1===r)return t;const s=i.substring(n,r);if(Yt(s,t),0===Object.keys(t).length){const c=s.match(/\(\s*\w+\s*:\s*(\w+)/);if(c){const e=c[1],n=new RegExp(`struct\\s+${e}\\s*\\{([^}]+)\\}`,"s"),r=i.match(n);r&&Yt(r[1],t)}}return t}(this.vertex)),this._attributeData}destroy(){this.gpuLayout=null,this.layout=null,this.structsAndGroups=null,this.fragment=null,this.vertex=null,qt[this._cacheKey]=null}static from(c){const e=`${c.vertex.source}:${c.fragment.source}:${c.fragment.entryPoint}:${c.vertex.entryPoint}`;return qt[e]||(qt[e]=new Kt(c),qt[e]._cacheKey=e),qt[e]}}const Qt=["f32","i32","vec2<f32>","vec3<f32>","vec4<f32>","mat2x2<f32>","mat3x3<f32>","mat4x4<f32>","mat3x2<f32>","mat4x2<f32>","mat2x3<f32>","mat4x3<f32>","mat2x4<f32>","mat3x4<f32>","vec2<i32>","vec3<i32>","vec4<i32>"],Jt=Qt.reduce((c,e)=>(c[e]=!0,c),{});function $t(c,e){switch(c){case"f32":return 0;case"vec2<f32>":return new Float32Array(2*e);case"vec3<f32>":return new Float32Array(3*e);case"vec4<f32>":return new Float32Array(4*e);case"mat2x2<f32>":return new Float32Array([1,0,0,1]);case"mat3x3<f32>":return new Float32Array([1,0,0,0,1,0,0,0,1]);case"mat4x4<f32>":return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}return null}const ci=class c{constructor(e,t){var i;this._touched=0,this.uid=L("uniform"),this._resourceType="uniformGroup",this._resourceId=L("resource"),this.isUniformGroup=!0,this._dirtyId=0,this.destroyed=!1,t=__spreadValues(__spreadValues({},c.defaultOptions),t),this.uniformStructures=e;const n={};for(const c in e){const t=e[c];if(t.name=c,t.size=null!=(i=t.size)?i:1,!Jt[t.type]){const c=t.type.match(/^array<(\w+(?:<\w+>)?),\s*(\d+)>$/);if(c){const[,e,i]=c;throw new Error(`Uniform type ${t.type} is not supported. Use type: '${e}', size: ${i} instead.`)}throw new Error(`Uniform type ${t.type} is not supported. Supported uniform types are: ${Qt.join(", ")}`)}null!=t.value||(t.value=$t(t.type,t.size)),n[c]=t.value}this.uniforms=n,this._dirtyId=1,this.ubo=t.ubo,this.isStatic=t.isStatic,this._signature=kt(Object.keys(n).map(c=>`${c}-${e[c].type}`).join("-"),"uniform-group")}update(){this._dirtyId++}};ci.defaultOptions={ubo:!1,isStatic:!1};let ei=ci;class ti{constructor(c){this.resources=Object.create(null),this._dirty=!0;let e=0;for(const t in c){const i=c[t];this.setResource(i,e++)}this._updateKey()}_updateKey(){if(!this._dirty)return;this._dirty=!1;const c=[];let e=0;for(const t in this.resources)c[e++]=this.resources[t]._resourceId;this._key=c.join("|")}setResource(c,e){var t,i;const n=this.resources[e];c!==n&&(n&&(null==(t=n.off)||t.call(n,"change",this.onResourceChange,this)),null==(i=c.on)||i.call(c,"change",this.onResourceChange,this),this.resources[e]=c,this._dirty=!0)}getResource(c){return this.resources[c]}_touch(c,e){const t=this.resources;for(const i in t)t[i]._gcLastUsed=c,t[i]._touched=e}destroy(){var c;const e=this.resources;for(const t in e){const i=e[t];null==(c=null==i?void 0:i.off)||c.call(i,"change",this.onResourceChange,this)}this.resources=null}onResourceChange(c){if(this._dirty=!0,c.destroyed){const e=this.resources;for(const t in e)e[t]===c&&(e[t]=null)}else this._updateKey()}}var ii=(c=>(c[c.WEBGL=1]="WEBGL",c[c.WEBGPU=2]="WEBGPU",c[c.CANVAS=4]="CANVAS",c[c.BOTH=3]="BOTH",c))(ii||{});class ni extends b{constructor(c){super(),this.uid=L("shader"),this._uniformBindMap=Object.create(null),this._ownedBindGroups=[],this._destroyed=!1;let{gpuProgram:e,glProgram:t,groups:i,resources:n,compatibleRenderers:r,groupMap:s}=c;this.gpuProgram=e,this.glProgram=t,void 0===r&&(r=0,e&&(r|=ii.WEBGPU),t&&(r|=ii.WEBGL)),this.compatibleRenderers=r;const a={};if(n||i||(n={}),n&&i)throw new Error("[Shader] Cannot have both resources and groups");if(!e&&i&&!s)throw new Error("[Shader] No group map or WebGPU shader provided - consider using resources instead.");if(!e&&i&&s)for(const o in s)for(const c in s[o]){const e=s[o][c];a[e]={group:o,binding:c,name:e}}else if(e&&i&&!s){const c=e.structsAndGroups.groups;s={},c.forEach(c=>{s[c.group]=s[c.group]||{},s[c.group][c.binding]=c.name,a[c.name]=c})}else if(n){if(i={},s={},e){e.structsAndGroups.groups.forEach(c=>{s[c.group]=s[c.group]||{},s[c.group][c.binding]=c.name,a[c.name]=c})}let c=0;for(const e in n)a[e]||(i[99]||(i[99]=new ti,this._ownedBindGroups.push(i[99])),a[e]={group:99,binding:c,name:e},s[99]=s[99]||{},s[99][c]=e,c++);for(const e in n){const c=e;let t=n[e];t.source||t._resourceType||(t=new ei(t));const r=a[c];r&&(i[r.group]||(i[r.group]=new ti,this._ownedBindGroups.push(i[r.group])),i[r.group].setResource(t,r.binding))}}this.groups=i,this._uniformBindMap=s,this.resources=this._buildResourceAccessor(i,a)}addResource(c,e,t){var i,n;(i=this._uniformBindMap)[e]||(i[e]={}),(n=this._uniformBindMap[e])[t]||(n[t]=c),this.groups[e]||(this.groups[e]=new ti,this._ownedBindGroups.push(this.groups[e]))}_buildResourceAccessor(c,e){const t={};for(const i in e){const n=e[i];Object.defineProperty(t,n.name,{get:()=>c[n.group].getResource(n.binding),set(e){c[n.group].setResource(e,n.binding)}})}return t}destroy(c=!1){var e,t;this._destroyed||(this._destroyed=!0,this.emit("destroy",this),c&&(null==(e=this.gpuProgram)||e.destroy(),null==(t=this.glProgram)||t.destroy()),this.gpuProgram=null,this.glProgram=null,this.removeAllListeners(),this._uniformBindMap=null,this._ownedBindGroups.forEach(c=>{c.destroy()}),this._ownedBindGroups=null,this.resources=null,this.groups=null)}static from(c){const e=c,{gpu:t,gl:i}=e,n=__objRest(e,["gpu","gl"]);let r,s;return t&&(r=Kt.from(t)),i&&(s=Vt.from(i)),new ni(__spreadValues({gpuProgram:r,glProgram:s},n))}}const ri={normal:0,add:1,multiply:2,screen:3,overlay:4,erase:5,"normal-npm":6,"add-npm":7,"screen-npm":8,min:9,max:10},si=class c{constructor(){this.data=0,this.blendMode="normal",this.polygonOffset=0,this.blend=!0,this.depthMask=!0}get blend(){return!!(1&this.data)}set blend(c){!!(1&this.data)!==c&&(this.data^=1)}get offsets(){return!!(2&this.data)}set offsets(c){!!(2&this.data)!==c&&(this.data^=2)}set cullMode(c){"none"!==c?(this.culling=!0,this.clockwiseFrontFace="front"===c):this.culling=!1}get cullMode(){return this.culling?this.clockwiseFrontFace?"front":"back":"none"}get culling(){return!!(4&this.data)}set culling(c){!!(4&this.data)!==c&&(this.data^=4)}get depthTest(){return!!(8&this.data)}set depthTest(c){!!(8&this.data)!==c&&(this.data^=8)}get depthMask(){return!!(32&this.data)}set depthMask(c){!!(32&this.data)!==c&&(this.data^=32)}get clockwiseFrontFace(){return!!(16&this.data)}set clockwiseFrontFace(c){!!(16&this.data)!==c&&(this.data^=16)}get blendMode(){return this._blendMode}set blendMode(c){this.blend="none"!==c,this._blendMode=c,this._blendModeId=ri[c]||0}get polygonOffset(){return this._polygonOffset}set polygonOffset(c){this.offsets=!!c,this._polygonOffset=c}toString(){return`[pixi.js/core:State blendMode=${this.blendMode} clockwiseFrontFace=${this.clockwiseFrontFace} culling=${this.culling} depthMask=${this.depthMask} polygonOffset=${this.polygonOffset}]`}static for2d(){const e=new c;return e.depthTest=!1,e.blend=!0,e}};si.default2d=si.for2d();let ai=si;const oi=class c extends ni{constructor(e){super(e=__spreadValues(__spreadValues({},c.defaultOptions),e)),this.enabled=!0,this._state=ai.for2d(),this.blendMode=e.blendMode,this.padding=e.padding,"boolean"==typeof e.antialias?this.antialias=e.antialias?"on":"off":this.antialias=e.antialias,this.resolution=e.resolution,this.blendRequired=e.blendRequired,this.clipToViewport=e.clipToViewport,this.addResource("uTexture",0,1),e.blendRequired&&this.addResource("uBackTexture",0,3)}apply(c,e,t,i){c.applyFilter(this,e,t,i)}get blendMode(){return this._state.blendMode}set blendMode(c){this._state.blendMode=c}static from(e){const t=e,{gpu:i,gl:n}=t,r=__objRest(t,["gpu","gl"]);let s,a;return i&&(s=Kt.from(i)),n&&(a=Vt.from(n)),new c(__spreadValues({gpuProgram:s,glProgram:a},r))}};oi.defaultOptions={blendMode:"normal",resolution:1,padding:0,antialias:"off",blendRequired:!1,clipToViewport:!0};let fi=oi;const li=[];let di;function hi(){if("boolean"==typeof di)return di;try{const c=new Function("param1","param2","param3","return param1[param2] === param3;");di=!0===c({a:"b"},"a","b")}catch(c){di=!1}return di}function ui(c,e,t=2){const i=e&&e.length,n=i?e[0]*t:c.length;let r=pi(c,0,n,t,!0);const s=[];if(!r||r.next===r.prev)return s;let a,o,f;if(i&&(r=function(c,e,t,i){const n=[];for(let r=0,s=e.length;r<s;r++){const t=pi(c,e[r]*i,r<s-1?e[r+1]*i:c.length,i,!1);t===t.next&&(t.steiner=!0),n.push(Ai(t))}n.sort(xi);for(let r=0;r<n.length;r++)t=Si(n[r],t);return t}(c,e,r,t)),c.length>80*t){a=c[0],o=c[1];let e=a,i=o;for(let r=t;r<n;r+=t){const t=c[r],n=c[r+1];t<a&&(a=t),n<o&&(o=n),t>e&&(e=t),n>i&&(i=n)}f=Math.max(e-a,i-o),f=0!==f?32767/f:0}return mi(r,s,t,a,o,f,0),s}function pi(c,e,t,i,n){let r;if(n===function(c,e,t,i){let n=0;for(let r=e,s=t-i;r<t;r+=i)n+=(c[s]-c[r])*(c[r+1]+c[s+1]),s=r;return n}(c,e,t,i)>0)for(let s=e;s<t;s+=i)r=Oi(s/i|0,c[s],c[s+1],r);else for(let s=t-i;s>=e;s-=i)r=Oi(s/i|0,c[s],c[s+1],r);return r&&Ri(r,r.next)&&(Li(r),r=r.next),r}function gi(c,e){if(!c)return c;e||(e=c);let t,i=c;do{if(t=!1,i.steiner||!Ri(i,i.next)&&0!==Ei(i.prev,i,i.next))i=i.next;else{if(Li(i),i=e=i.prev,i===i.next)break;t=!0}}while(t||i!==e);return e}function mi(c,e,t,i,n,r,s){if(!c)return;!s&&r&&function(c,e,t,i){let n=c;do{0===n.z&&(n.z=Ci(n.x,n.y,e,t,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next}while(n!==c);n.prevZ.nextZ=null,n.prevZ=null,function(c){let e,t=1;do{let i,n=c;c=null;let r=null;for(e=0;n;){e++;let s=n,a=0;for(let c=0;c<t&&(a++,s=s.nextZ,s);c++);let o=t;for(;a>0||o>0&&s;)0!==a&&(0===o||!s||n.z<=s.z)?(i=n,n=n.nextZ,a--):(i=s,s=s.nextZ,o--),r?r.nextZ=i:c=i,i.prevZ=r,r=i;n=s}r.nextZ=null,t*=2}while(e>1)}(n)}(c,i,n,r);let a=c;for(;c.prev!==c.next;){const o=c.prev,f=c.next;if(r?vi(c,i,n,r):bi(c))e.push(o.i,c.i,f.i),Li(c),c=f.next,a=f.next;else if((c=f)===a){s?1===s?mi(c=yi(gi(c),e),e,t,i,n,r,2):2===s&&_i(c,e,t,i,n,r):mi(gi(c),e,t,i,n,r,1);break}}}function bi(c){const e=c.prev,t=c,i=c.next;if(Ei(e,t,i)>=0)return!1;const n=e.x,r=t.x,s=i.x,a=e.y,o=t.y,f=i.y,l=Math.min(n,r,s),d=Math.min(a,o,f),h=Math.max(n,r,s),u=Math.max(a,o,f);let p=i.next;for(;p!==e;){if(p.x>=l&&p.x<=h&&p.y>=d&&p.y<=u&&Pi(n,a,r,o,s,f,p.x,p.y)&&Ei(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function vi(c,e,t,i){const n=c.prev,r=c,s=c.next;if(Ei(n,r,s)>=0)return!1;const a=n.x,o=r.x,f=s.x,l=n.y,d=r.y,h=s.y,u=Math.min(a,o,f),p=Math.min(l,d,h),g=Math.max(a,o,f),m=Math.max(l,d,h),b=Ci(u,p,e,t,i),v=Ci(g,m,e,t,i);let y=c.prevZ,_=c.nextZ;for(;y&&y.z>=b&&_&&_.z<=v;){if(y.x>=u&&y.x<=g&&y.y>=p&&y.y<=m&&y!==n&&y!==s&&Pi(a,l,o,d,f,h,y.x,y.y)&&Ei(y.prev,y,y.next)>=0)return!1;if(y=y.prevZ,_.x>=u&&_.x<=g&&_.y>=p&&_.y<=m&&_!==n&&_!==s&&Pi(a,l,o,d,f,h,_.x,_.y)&&Ei(_.prev,_,_.next)>=0)return!1;_=_.nextZ}for(;y&&y.z>=b;){if(y.x>=u&&y.x<=g&&y.y>=p&&y.y<=m&&y!==n&&y!==s&&Pi(a,l,o,d,f,h,y.x,y.y)&&Ei(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;_&&_.z<=v;){if(_.x>=u&&_.x<=g&&_.y>=p&&_.y<=m&&_!==n&&_!==s&&Pi(a,l,o,d,f,h,_.x,_.y)&&Ei(_.prev,_,_.next)>=0)return!1;_=_.nextZ}return!0}function yi(c,e){let t=c;do{const i=t.prev,n=t.next.next;!Ri(i,n)&&ki(i,t,t.next,n)&&Bi(i,n)&&Bi(n,i)&&(e.push(i.i,t.i,n.i),Li(t),Li(t.next),t=c=n),t=t.next}while(t!==c);return gi(t)}function _i(c,e,t,i,n,r){let s=c;do{let c=s.next.next;for(;c!==s.prev;){if(s.i!==c.i&&Mi(s,c)){let a=Di(s,c);return s=gi(s,s.next),a=gi(a,a.next),mi(s,e,t,i,n,r,0),void mi(a,e,t,i,n,r,0)}c=c.next}s=s.next}while(s!==c)}function xi(c,e){let t=c.x-e.x;if(0===t&&(t=c.y-e.y,0===t)){t=(c.next.y-c.y)/(c.next.x-c.x)-(e.next.y-e.y)/(e.next.x-e.x)}return t}function Si(c,e){const t=function(c,e){let t=e;const i=c.x,n=c.y;let r,s=-1/0;if(Ri(c,t))return t;do{if(Ri(c,t.next))return t.next;if(n<=t.y&&n>=t.next.y&&t.next.y!==t.y){const c=t.x+(n-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(c<=i&&c>s&&(s=c,r=t.x<t.next.x?t:t.next,c===i))return r}t=t.next}while(t!==e);if(!r)return null;const a=r,o=r.x,f=r.y;let l=1/0;t=r;do{if(i>=t.x&&t.x>=o&&i!==t.x&&Ti(n<f?i:s,n,o,f,n<f?s:i,n,t.x,t.y)){const e=Math.abs(n-t.y)/(i-t.x);Bi(t,c)&&(e<l||e===l&&(t.x>r.x||t.x===r.x&&wi(r,t)))&&(r=t,l=e)}t=t.next}while(t!==a);return r}(c,e);if(!t)return e;const i=Di(t,c);return gi(i,i.next),gi(t,t.next)}function wi(c,e){return Ei(c.prev,c,e.prev)<0&&Ei(e.next,c,c.next)<0}function Ci(c,e,t,i,n){return(c=1431655765&((c=858993459&((c=252645135&((c=16711935&((c=(c-t)*n|0)|c<<8))|c<<4))|c<<2))|c<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-i)*n|0)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Ai(c){let e=c,t=c;do{(e.x<t.x||e.x===t.x&&e.y<t.y)&&(t=e),e=e.next}while(e!==c);return t}function Ti(c,e,t,i,n,r,s,a){return(n-s)*(e-a)>=(c-s)*(r-a)&&(c-s)*(i-a)>=(t-s)*(e-a)&&(t-s)*(r-a)>=(n-s)*(i-a)}function Pi(c,e,t,i,n,r,s,a){return!(c===s&&e===a)&&Ti(c,e,t,i,n,r,s,a)}function Mi(c,e){return c.next.i!==e.i&&c.prev.i!==e.i&&!function(c,e){let t=c;do{if(t.i!==c.i&&t.next.i!==c.i&&t.i!==e.i&&t.next.i!==e.i&&ki(t,t.next,c,e))return!0;t=t.next}while(t!==c);return!1}(c,e)&&(Bi(c,e)&&Bi(e,c)&&function(c,e){let t=c,i=!1;const n=(c.x+e.x)/2,r=(c.y+e.y)/2;do{t.y>r!=t.next.y>r&&t.next.y!==t.y&&n<(t.next.x-t.x)*(r-t.y)/(t.next.y-t.y)+t.x&&(i=!i),t=t.next}while(t!==c);return i}(c,e)&&(Ei(c.prev,c,e.prev)||Ei(c,e.prev,e))||Ri(c,e)&&Ei(c.prev,c,c.next)>0&&Ei(e.prev,e,e.next)>0)}function Ei(c,e,t){return(e.y-c.y)*(t.x-e.x)-(e.x-c.x)*(t.y-e.y)}function Ri(c,e){return c.x===e.x&&c.y===e.y}function ki(c,e,t,i){const n=Ii(Ei(c,e,t)),r=Ii(Ei(c,e,i)),s=Ii(Ei(t,i,c)),a=Ii(Ei(t,i,e));return n!==r&&s!==a||(!(0!==n||!Fi(c,t,e))||(!(0!==r||!Fi(c,i,e))||(!(0!==s||!Fi(t,c,i))||!(0!==a||!Fi(t,e,i)))))}function Fi(c,e,t){return e.x<=Math.max(c.x,t.x)&&e.x>=Math.min(c.x,t.x)&&e.y<=Math.max(c.y,t.y)&&e.y>=Math.min(c.y,t.y)}function Ii(c){return c>0?1:c<0?-1:0}function Bi(c,e){return Ei(c.prev,c,c.next)<0?Ei(c,e,c.next)>=0&&Ei(c,c.prev,e)>=0:Ei(c,e,c.prev)<0||Ei(c,c.next,e)<0}function Di(c,e){const t=zi(c.i,c.x,c.y),i=zi(e.i,e.x,e.y),n=c.next,r=e.prev;return c.next=e,e.prev=c,t.next=n,n.prev=t,i.next=t,t.prev=i,r.next=i,i.prev=r,i}function Oi(c,e,t,i){const n=zi(c,e,t);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function Li(c){c.next.prev=c.prev,c.prev.next=c.next,c.prevZ&&(c.prevZ.nextZ=c.nextZ),c.nextZ&&(c.nextZ.prevZ=c.prevZ)}function zi(c,e,t){return{i:c,x:e,y:t,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}f.handleByNamedList(s.Environment,li);const Gi=ui.default||ui;var Ui=(c=>(c[c.NONE=0]="NONE",c[c.COLOR=16384]="COLOR",c[c.STENCIL=1024]="STENCIL",c[c.DEPTH=256]="DEPTH",c[c.COLOR_DEPTH=16640]="COLOR_DEPTH",c[c.COLOR_STENCIL=17408]="COLOR_STENCIL",c[c.DEPTH_STENCIL=1280]="DEPTH_STENCIL",c[c.ALL=17664]="ALL",c))(Ui||{});class Vi{constructor(c){this.items=[],this._name=c}emit(c,e,t,i,n,r,s,a){const{name:o,items:f}=this;for(let l=0,d=f.length;l<d;l++)f[l][o](c,e,t,i,n,r,s,a);return this}add(c){return c[this._name]&&(this.remove(c),this.items.push(c)),this}remove(c){const e=this.items.indexOf(c);return-1!==e&&this.items.splice(e,1),this}contains(c){return-1!==this.items.indexOf(c)}removeAll(){return this.items.length=0,this}destroy(){this.removeAll(),this.items=null,this._name=null}get empty(){return 0===this.items.length}get name(){return this._name}}const Ni=["init","destroy","contextChange","resolutionChange","resetState","renderEnd","renderStart","render","update","postrender","prerender"],Wi=class c extends b{constructor(c){var e;super(),this.tick=0,this.uid=L("renderer"),this.runners=Object.create(null),this.renderPipes=Object.create(null),this._initOptions={},this._systemsHash=Object.create(null),this.type=c.type,this.name=c.name,this.config=c;const t=[...Ni,...null!=(e=this.config.runners)?e:[]];this._addRunners(...t),this._unsafeEvalCheck()}init(){return __async(this,arguments,function*(e={}){const t=!0===e.skipExtensionImports||!1===e.manageImports;yield function(c){return __async(this,null,function*(){if(!c)for(let c=0;c<li.length;c++){const e=li[c];if(e.value.test())return void(yield e.value.load())}})}(t),this._addSystems(this.config.systems),this._addPipes(this.config.renderPipes,this.config.renderPipeAdaptors);for(const c in this._systemsHash){const t=this._systemsHash[c].constructor.defaultOptions;e=__spreadValues(__spreadValues({},t),e)}e=__spreadValues(__spreadValues({},c.defaultOptions),e),this._roundPixels=e.roundPixels?1:0;for(let c=0;c<this.runners.init.items.length;c++)yield this.runners.init.items[c].init(e);this._initOptions=e})}render(c,e){this.tick++;let t=c;if(t instanceof xe&&(t={container:t},e&&(V(G,"passing a second argument is deprecated, please use render options instead"),t.target=e.renderTexture)),t.target||(t.target=this.view.renderTarget),t.target===this.view.renderTarget&&(this._lastObjectRendered=t.container,null!=t.clearColor||(t.clearColor=this.background.colorRgba),null!=t.clear||(t.clear=this.background.clearBeforeRender)),t.clearColor){const c=Array.isArray(t.clearColor)&&4===t.clearColor.length;t.clearColor=c?t.clearColor:Fc.shared.setValue(t.clearColor).toArray()}t.transform||(t.container.updateLocalTransform(),t.transform=t.container.localTransform),t.container.visible&&(t.container.enableRenderGroup(),this.runners.prerender.emit(t),this.runners.renderStart.emit(t),this.runners.render.emit(t),this.runners.renderEnd.emit(t),this.runners.postrender.emit(t))}resize(c,e,t){const i=this.view.resolution;this.view.resize(c,e,t),this.emit("resize",this.view.screen.width,this.view.screen.height,this.view.resolution),void 0!==t&&t!==i&&this.runners.resolutionChange.emit(t)}clear(c={}){c.target||(c.target=this.renderTarget.renderTarget),c.clearColor||(c.clearColor=this.background.colorRgba),null!=c.clear||(c.clear=Ui.ALL);const{clear:e,clearColor:t,target:i,mipLevel:n,layer:r}=c;Fc.shared.setValue(null!=t?t:this.background.colorRgba),this.renderTarget.clear(i,e,Fc.shared.toArray(),null!=n?n:0,null!=r?r:0)}get resolution(){return this.view.resolution}set resolution(c){this.view.resolution=c,this.runners.resolutionChange.emit(c)}get width(){return this.view.texture.frame.width}get height(){return this.view.texture.frame.height}get canvas(){return this.view.canvas}get lastObjectRendered(){return this._lastObjectRendered}get renderingToScreen(){return this.renderTarget.renderingToScreen}get screen(){return this.view.screen}_addRunners(...c){c.forEach(c=>{this.runners[c]=new Vi(c)})}_addSystems(c){let e;for(e in c){const t=c[e];this._addSystem(t.value,t.name)}}_addSystem(c,e){const t=new c(this);if(this[e])throw new Error(`Whoops! The name "${e}" is already in use`);this[e]=t,this._systemsHash[e]=t;for(const i in this.runners)this.runners[i].add(t);return this}_addPipes(c,e){const t=e.reduce((c,e)=>(c[e.name]=e.value,c),{});c.forEach(c=>{const e=c.value,i=c.name,n=t[i];this.renderPipes[i]=new e(this,n?new n:null),this.runners.destroy.add(this.renderPipes[i])})}destroy(c=!1){this.runners.destroy.items.reverse(),this.runners.destroy.emit(c),(!0===c||"object"==typeof c&&c.releaseGlobalResources)&&Dc.release(),Object.values(this.runners).forEach(c=>{c.destroy()}),this._systemsHash=null,this.renderPipes=null}generateTexture(c){return this.textureGenerator.generateTexture(c)}get roundPixels(){return!!this._roundPixels}_unsafeEvalCheck(){if(!hi())throw new Error("Current environment does not allow unsafe-eval, please use pixi.js/unsafe-eval module to enable support.")}resetState(){this.runners.resetState.emit()}};Wi.defaultOptions={resolution:1,failIfMajorPerformanceCaveat:!1,roundPixels:!1};let Hi,ji,Yi=Wi;function Xi(c){return void 0!==Hi||(Hi=(()=>{var e;const t={stencil:!0,failIfMajorPerformanceCaveat:null!=c?c:Yi.defaultOptions.failIfMajorPerformanceCaveat};try{if(!Fe.get().getWebGLRenderingContext())return!1;let c=Fe.get().createCanvas().getContext("webgl",t);const i=!!(null==(e=null==c?void 0:c.getContextAttributes())?void 0:e.stencil);if(c){const e=c.getExtension("WEBGL_lose_context");e&&e.loseContext()}return c=null,i}catch(i){return!1}})()),Hi}function Zi(){return __async(this,arguments,function*(c={}){return void 0!==ji||(ji=yield __async(null,null,function*(){const e=Fe.get().getNavigator().gpu;if(!e)return!1;try{const t=yield e.requestAdapter(c);return yield t.requestDevice(),!0}catch(t){return!1}})),ji})}const qi=["webgl","webgpu","canvas"];const Ki="8.16.0";class Qi{static init(){var c;null==(c=globalThis.__PIXI_APP_INIT__)||c.call(globalThis,this,Ki)}static destroy(){}}Qi.extension=s.Application;class Ji{constructor(c){this._renderer=c}init(){var c;null==(c=globalThis.__PIXI_RENDERER_INIT__)||c.call(globalThis,this._renderer,Ki)}destroy(){this._renderer=null}}Ji.extension={type:[s.WebGLSystem,s.WebGPUSystem],name:"initHook",priority:-10};class $i{static init(c){Object.defineProperty(this,"resizeTo",{configurable:!0,set(c){globalThis.removeEventListener("resize",this.queueResize),this._resizeTo=c,c&&(globalThis.addEventListener("resize",this.queueResize),this.resize())},get(){return this._resizeTo}}),this.queueResize=()=>{this._resizeTo&&(this._cancelResize(),this._resizeId=requestAnimationFrame(()=>this.resize()))},this._cancelResize=()=>{this._resizeId&&(cancelAnimationFrame(this._resizeId),this._resizeId=null)},this.resize=()=>{if(!this._resizeTo)return;let c,e;if(this._cancelResize(),this._resizeTo===globalThis.window)c=globalThis.innerWidth,e=globalThis.innerHeight;else{const{clientWidth:t,clientHeight:i}=this._resizeTo;c=t,e=i}this.renderer.resize(c,e),this.render()},this._resizeId=null,this._resizeTo=null,this.resizeTo=c.resizeTo||null}static destroy(){globalThis.removeEventListener("resize",this.queueResize),this._cancelResize(),this._cancelResize=null,this.queueResize=null,this.resizeTo=null,this.resize=null}}$i.extension=s.Application;class cn{static init(c){c=Object.assign({autoStart:!0,sharedTicker:!1},c),Object.defineProperty(this,"ticker",{configurable:!0,set(c){this._ticker&&this._ticker.remove(this.render,this),this._ticker=c,c&&c.add(this.render,this,De.LOW)},get(){return this._ticker}}),this.stop=()=>{this._ticker.stop()},this.start=()=>{this._ticker.start()},this._ticker=null,this.ticker=c.sharedTicker?Ge.shared:new Ge,c.autoStart&&this.start()}static destroy(){if(this._ticker){const c=this._ticker;this.ticker=null,c.destroy()}}}cn.extension=s.Application,f.add($i),f.add(cn);const en=class c{constructor(...c){this.stage=new xe,void 0!==c[0]&&V(G,"Application constructor options are deprecated, please use Application.init() instead.")}init(e){return __async(this,null,function*(){e=__spreadValues({},e),this.stage||(this.stage=new xe),this.renderer=yield function(c){return __async(this,null,function*(){var e;let t,i=[];c.preference?(i.push(c.preference),qi.forEach(e=>{e!==c.preference&&i.push(e)})):i=qi.slice();let s={};for(let o=0;o<i.length;o++){const a=i[o];if("webgpu"===a&&(yield Zi())){const{WebGPURenderer:e}=yield r(()=>__async(null,null,function*(){const{WebGPURenderer:c}=yield Promise.resolve().then(()=>Uu);return{WebGPURenderer:c}}),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href);t=e,s=__spreadValues(__spreadValues({},c),c.webgpu);break}if("webgl"===a&&Xi(null!=(e=c.failIfMajorPerformanceCaveat)?e:Yi.defaultOptions.failIfMajorPerformanceCaveat)){const{WebGLRenderer:e}=yield r(()=>__async(null,null,function*(){const{WebGLRenderer:c}=yield Promise.resolve().then(()=>Qh);return{WebGLRenderer:c}}),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href);t=e,s=__spreadValues(__spreadValues({},c),c.webgl);break}if("canvas"===a){const{CanvasRenderer:e}=yield r(()=>__async(null,null,function*(){const{CanvasRenderer:c}=yield Promise.resolve().then(()=>Ad);return{CanvasRenderer:c}}),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href);t=e,s=__spreadValues(__spreadValues({},c),c.canvasOptions);break}}if(delete s.webgpu,delete s.webgl,delete s.canvasOptions,!t)throw new Error("No available renderer for the current environment");const a=new t;return yield a.init(s),a})}(e),c._plugins.forEach(c=>{c.init.call(this,e)})})}render(){this.renderer.render({container:this.stage})}get canvas(){return this.renderer.canvas}get view(){return V(G,"Application.view is deprecated, please use Application.canvas instead."),this.renderer.canvas}get screen(){return this.renderer.screen}destroy(e=!1,t=!1){const i=c._plugins.slice(0);i.reverse(),i.forEach(c=>{c.destroy.call(this)}),this.stage.destroy(t),this.stage=null,this.renderer.destroy(e),this.renderer=null}};en._plugins=[];let tn=en;f.handleByList(s.Application,tn._plugins),f.add(Qi);const nn={test:c=>"string"==typeof c&&c.startsWith("info face="),parse(c){var e,t,i;const n=c.match(/^[a-z]+\s+.+$/gm),r={info:[],common:[],page:[],char:[],chars:[],kerning:[],kernings:[],distanceField:[]};for(const p in n){const c=n[p].match(/^[a-z]+/gm)[0],e=n[p].match(/[a-zA-Z]+=([^\s"']+|"([^"]*)")/gm),t={};for(const i in e){const c=e[i].split("="),n=c[0],r=c[1].replace(/"/gm,""),s=parseFloat(r),a=isNaN(s)?r:s;t[n]=a}r[c].push(t)}const s={chars:{},pages:[],lineHeight:0,fontSize:0,fontFamily:"",distanceField:null,baseLineOffset:0},[a]=r.info,[o]=r.common,[f]=null!=(e=r.distanceField)?e:[];f&&(s.distanceField={range:parseInt(f.distanceRange,10),type:f.fieldType}),s.fontSize=parseInt(a.size,10),s.fontFamily=a.face,s.lineHeight=parseInt(o.lineHeight,10);const l=r.page;for(let p=0;p<l.length;p++)s.pages.push({id:parseInt(l[p].id,10)||0,file:l[p].file});const d={};s.baseLineOffset=s.lineHeight-parseInt(o.base,10);const h=r.char;for(let p=0;p<h.length;p++){const c=h[p],e=parseInt(c.id,10);let n=null!=(i=null!=(t=c.letter)?t:c.char)?i:String.fromCharCode(e);"space"===n&&(n=" "),d[e]=n,s.chars[n]={id:e,page:parseInt(c.page,10)||0,x:parseInt(c.x,10),y:parseInt(c.y,10),width:parseInt(c.width,10),height:parseInt(c.height,10),xOffset:parseInt(c.xoffset,10),yOffset:parseInt(c.yoffset,10),xAdvance:parseInt(c.xadvance,10),kerning:{}}}const u=r.kerning||[];for(let p=0;p<u.length;p++){const c=parseInt(u[p].first,10),e=parseInt(u[p].second,10),t=parseInt(u[p].amount,10);s.chars[d[e]].kerning[d[c]]=t}return s}},rn={test(c){const e=c;return"string"!=typeof e&&"getElementsByTagName"in e&&e.getElementsByTagName("page").length&&null!==e.getElementsByTagName("info")[0].getAttribute("face")},parse(c){var e,t;const i={chars:{},pages:[],lineHeight:0,fontSize:0,fontFamily:"",distanceField:null,baseLineOffset:0},n=c.getElementsByTagName("info")[0],r=c.getElementsByTagName("common")[0],s=c.getElementsByTagName("distanceField")[0];s&&(i.distanceField={type:s.getAttribute("fieldType"),range:parseInt(s.getAttribute("distanceRange"),10)});const a=c.getElementsByTagName("page"),o=c.getElementsByTagName("char"),f=c.getElementsByTagName("kerning");i.fontSize=parseInt(n.getAttribute("size"),10),i.fontFamily=n.getAttribute("face"),i.lineHeight=parseInt(r.getAttribute("lineHeight"),10);for(let d=0;d<a.length;d++)i.pages.push({id:parseInt(a[d].getAttribute("id"),10)||0,file:a[d].getAttribute("file")});const l={};i.baseLineOffset=i.lineHeight-parseInt(r.getAttribute("base"),10);for(let d=0;d<o.length;d++){const c=o[d],n=parseInt(c.getAttribute("id"),10);let r=null!=(t=null!=(e=c.getAttribute("letter"))?e:c.getAttribute("char"))?t:String.fromCharCode(n);"space"===r&&(r=" "),l[n]=r,i.chars[r]={id:n,page:parseInt(c.getAttribute("page"),10)||0,x:parseInt(c.getAttribute("x"),10),y:parseInt(c.getAttribute("y"),10),width:parseInt(c.getAttribute("width"),10),height:parseInt(c.getAttribute("height"),10),xOffset:parseInt(c.getAttribute("xoffset"),10),yOffset:parseInt(c.getAttribute("yoffset"),10),xAdvance:parseInt(c.getAttribute("xadvance"),10),kerning:{}}}for(let d=0;d<f.length;d++){const c=parseInt(f[d].getAttribute("first"),10),e=parseInt(f[d].getAttribute("second"),10),t=parseInt(f[d].getAttribute("amount"),10);i.chars[l[e]].kerning[l[c]]=t}return i}},sn={test:c=>!("string"!=typeof c||!c.match(/<font(\s|>)/))&&rn.test(Fe.get().parseXML(c)),parse:c=>rn.parse(Fe.get().parseXML(c))},an=[".xml",".fnt"],on={extension:{type:s.CacheParser,name:"cacheBitmapFont"},test:c=>!!(null==c?void 0:c.pages)&&!!(null==c?void 0:c.chars)&&"string"==typeof(null==c?void 0:c.fontFamily),getCacheableAssets(c,e){const t={};return c.forEach(c=>{t[c]=e,t[`${c}-bitmap`]=e}),t[`${e.fontFamily}-bitmap`]=e,t}},fn={extension:{type:s.LoadParser,priority:Xe.Normal},name:"loadBitmapFont",id:"bitmap-font",test:c=>an.includes(Ke.extname(c).toLowerCase()),testParse(c){return __async(this,null,function*(){return nn.test(c)||sn.test(c)})},parse(c,e,t){return __async(this,null,function*(){const i=nn.test(c)?nn.parse(c):sn.parse(c),{src:s}=e,{pages:a}=i,o=[],f=i.distanceField?{scaleMode:"linear",alphaMode:"premultiply-alpha-on-upload",autoGenerateMipmaps:!1,resolution:1}:{};for(let c=0;c<a.length;++c){const e=a[c].file;let t=Ke.join(Ke.dirname(s),e);t=et(t,s),o.push({src:t,data:f})}const[l,{BitmapFont:d}]=yield Promise.all([t.load(o),r(()=>Promise.resolve().then(()=>Vu),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href)]);return new d({data:i,textures:o.map(c=>l[c.src])},s)})},load(c,e){return __async(this,null,function*(){const e=yield Fe.get().fetch(c);return yield e.text()})},unload(c,e,t){return __async(this,null,function*(){yield Promise.all(c.pages.map(c=>t.unload(c.texture.source._sourceOrigin))),c.destroy()})}};class ln{constructor(c,e=!1){this._loader=c,this._assetList=[],this._isLoading=!1,this._maxConcurrent=1,this.verbose=e}add(c){c.forEach(c=>{this._assetList.push(c)}),this.verbose&&console.log("[BackgroundLoader] assets: ",this._assetList),this._isActive&&!this._isLoading&&this._next()}_next(){return __async(this,null,function*(){if(this._assetList.length&&this._isActive){this._isLoading=!0;const c=[],e=Math.min(this._assetList.length,this._maxConcurrent);for(let t=0;t<e;t++)c.push(this._assetList.pop());yield this._loader.load(c),this._isLoading=!1,this._next()}})}get active(){return this._isActive}set active(c){this._isActive!==c&&(this._isActive=c,c&&!this._isLoading&&this._next())}}const dn={extension:{type:s.CacheParser,name:"cacheTextureArray"},test:c=>Array.isArray(c)&&c.every(c=>c instanceof cc),getCacheableAssets:(c,e)=>{const t={};return c.forEach(c=>{e.forEach((e,i)=>{t[c+(0===i?"":i+1)]=e})}),t}};function hn(c){return __async(this,null,function*(){if("Image"in globalThis)return new Promise(e=>{const t=new Image;t.onload=()=>{e(!0)},t.onerror=()=>{e(!1)},t.src=c});if("createImageBitmap"in globalThis&&"fetch"in globalThis){try{const e=yield(yield fetch(c)).blob();yield createImageBitmap(e)}catch(e){return!1}return!0}return!1})}const un={extension:{type:s.DetectionParser,priority:1},test:()=>__async(null,null,function*(){return hn("data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=")}),add:c=>__async(null,null,function*(){return[...c,"avif"]}),remove:c=>__async(null,null,function*(){return c.filter(c=>"avif"!==c)})},pn=["png","jpg","jpeg"],gn={extension:{type:s.DetectionParser,priority:-1},test:()=>Promise.resolve(!0),add:c=>__async(null,null,function*(){return[...c,...pn]}),remove:c=>__async(null,null,function*(){return c.filter(c=>!pn.includes(c))})},mn="WorkerGlobalScope"in globalThis&&globalThis instanceof globalThis.WorkerGlobalScope;function bn(c){if(mn)return!1;return""!==document.createElement("video").canPlayType(c)}const vn={extension:{type:s.DetectionParser,priority:0},test:()=>__async(null,null,function*(){return bn("video/mp4")}),add:c=>__async(null,null,function*(){return[...c,"mp4","m4v"]}),remove:c=>__async(null,null,function*(){return c.filter(c=>"mp4"!==c&&"m4v"!==c)})},yn={extension:{type:s.DetectionParser,priority:0},test:()=>__async(null,null,function*(){return bn("video/ogg")}),add:c=>__async(null,null,function*(){return[...c,"ogv"]}),remove:c=>__async(null,null,function*(){return c.filter(c=>"ogv"!==c)})},_n={extension:{type:s.DetectionParser,priority:0},test:()=>__async(null,null,function*(){return bn("video/webm")}),add:c=>__async(null,null,function*(){return[...c,"webm"]}),remove:c=>__async(null,null,function*(){return c.filter(c=>"webm"!==c)})},xn={extension:{type:s.DetectionParser,priority:0},test:()=>__async(null,null,function*(){return hn("data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=")}),add:c=>__async(null,null,function*(){return[...c,"webp"]}),remove:c=>__async(null,null,function*(){return c.filter(c=>"webp"!==c)})},Sn=class c{constructor(){this.loadOptions=__spreadValues({},c.defaultOptions),this._parsers=[],this._parsersValidated=!1,this.parsers=new Proxy(this._parsers,{set:(c,e,t)=>(this._parsersValidated=!1,c[e]=t,!0)}),this.promiseCache={}}reset(){this._parsersValidated=!1,this.promiseCache={}}_getLoadPromiseAndParser(c,e){const t={promise:null,parser:null};return t.promise=(()=>__async(this,null,function*(){var i,n;let r=null,s=null;if((e.parser||e.loadParser)&&(s=this._parserHash[e.parser||e.loadParser],e.loadParser&&Bc(`[Assets] "loadParser" is deprecated, use "parser" instead for ${c}`),s||Bc(`[Assets] specified load parser "${e.parser||e.loadParser}" not found while loading ${c}`)),!s){for(let t=0;t<this.parsers.length;t++){const n=this.parsers[t];if(n.load&&(null==(i=n.test)?void 0:i.call(n,c,e,this))){s=n;break}}if(!s)return Bc(`[Assets] ${c} could not be loaded as we don't know how to parse it, ensure the correct parser has been added`),null}r=yield s.load(c,e,this),t.parser=s;for(let c=0;c<this.parsers.length;c++){const i=this.parsers[c];i.parse&&i.parse&&(yield null==(n=i.testParse)?void 0:n.call(i,r,e,this))&&(r=(yield i.parse(r,e,this))||r,t.parser=i)}return r}))(),t}load(e,t){return __async(this,null,function*(){this._parsersValidated||this._validateParsers();const i="function"==typeof t?__spreadProps(__spreadValues(__spreadValues({},c.defaultOptions),this.loadOptions),{onProgress:t}):__spreadValues(__spreadValues(__spreadValues({},c.defaultOptions),this.loadOptions),t||{}),{onProgress:n,onError:r,strategy:s,retryCount:a,retryDelay:o}=i;let f=0;const l={},d=$e(e),h=We(e,c=>({alias:[c],src:c,data:{}})),u=h.reduce((c,e)=>c+(e.progressSize||1),0),p=h.map(c=>__async(this,null,function*(){const e=Ke.toAbsolute(c.src);l[c.src]||(yield this._loadAssetWithRetry(e,c,{onProgress:n,onError:r,strategy:s,retryCount:a,retryDelay:o},l),f+=c.progressSize||1,n&&n(f/u))}));return yield Promise.all(p),d?l[h[0].src]:l})}unload(c){return __async(this,null,function*(){const e=We(c,c=>({alias:[c],src:c})).map(c=>__async(this,null,function*(){var e,t;const i=Ke.toAbsolute(c.src),n=this.promiseCache[i];if(n){const r=yield n.promise;delete this.promiseCache[i],yield null==(t=null==(e=n.parser)?void 0:e.unload)?void 0:t.call(e,r,c,this)}}));yield Promise.all(e)})}_validateParsers(){this._parsersValidated=!0,this._parserHash=this._parsers.filter(c=>c.name||c.id).reduce((c,e)=>(e.name||e.id?(c[e.name]||c[e.id])&&Bc(`[Assets] parser id conflict "${e.id}"`):Bc("[Assets] parser should have an id"),c[e.name]=e,e.id&&(c[e.id]=e),c),{})}_loadAssetWithRetry(c,e,t,i){return __async(this,null,function*(){let n=0;const{onError:r,strategy:s,retryCount:a,retryDelay:o}=t,f=c=>new Promise(e=>setTimeout(e,c));for(;;)try{return this.promiseCache[c]||(this.promiseCache[c]=this._getLoadPromiseAndParser(c,e)),void(i[e.src]=yield this.promiseCache[c].promise)}catch(l){delete this.promiseCache[c],delete i[e.src],n++;if("retry"===s&&!("retry"!==s||n>a)){r&&r(l,e),yield f(o);continue}if("skip"===s)return void(r&&r(l,e));r&&r(l,e);const t=new Error(`[Loader.load] Failed to load ${c}.\n${l}`);throw l instanceof Error&&l.stack&&(t.stack=l.stack),t}})}};Sn.defaultOptions={onProgress:void 0,onError:void 0,strategy:"throw",retryCount:3,retryDelay:250};let wn=Sn;function Cn(c,e){if(Array.isArray(e)){for(const t of e)if(c.startsWith(`data:${t}`))return!0;return!1}return c.startsWith(`data:${e}`)}function An(c,e){const t=c.split("?")[0],i=Ke.extname(t).toLowerCase();return Array.isArray(e)?e.includes(i):i===e}const Tn={extension:{type:s.LoadParser,priority:Xe.Low},name:"loadJson",id:"json",test:c=>Cn(c,"application/json")||An(c,".json"),load(c){return __async(this,null,function*(){const e=yield Fe.get().fetch(c);return yield e.json()})}},Pn={name:"loadTxt",id:"text",extension:{type:s.LoadParser,priority:Xe.Low,name:"loadTxt"},test:c=>Cn(c,"text/plain")||An(c,".txt"),load(c){return __async(this,null,function*(){const e=yield Fe.get().fetch(c);return yield e.text()})}},Mn=["normal","bold","100","200","300","400","500","600","700","800","900"],En=[".ttf",".otf",".woff",".woff2"],Rn=["font/ttf","font/otf","font/woff","font/woff2"],kn=/^(--|-?[A-Z_])[0-9A-Z_-]*$/i;const Fn=/^[0-9A-Za-z%:/?#\[\]@!\$&'()\*\+,;=\-._~]*$/;function In(c){return Fn.test(c)?c:encodeURI(c)}const Bn={extension:{type:s.LoadParser,priority:Xe.Low},name:"loadWebFont",id:"web-font",test:c=>Cn(c,Rn)||An(c,En),load(c,e){return __async(this,null,function*(){var t,i,n,r,s,a;const o=Fe.get().getFontFaceSet();if(o){const f=[],l=null!=(i=null==(t=e.data)?void 0:t.family)?i:function(c){const e=Ke.extname(c),t=Ke.basename(c,e).replace(/(-|_)/g," ").toLowerCase().split(" ").map(c=>c.charAt(0).toUpperCase()+c.slice(1));let i=t.length>0;for(const r of t)if(!r.match(kn)){i=!1;break}let n=t.join(" ");return i||(n=`"${n.replace(/[\\"]/g,"\\$&")}"`),n}(c),d=null!=(s=null==(r=null==(n=e.data)?void 0:n.weights)?void 0:r.filter(c=>Mn.includes(c)))?s:["normal"],h=null!=(a=e.data)?a:{};for(let e=0;e<d.length;e++){const t=d[e],i=new FontFace(l,`url(${In(c)})`,__spreadProps(__spreadValues({},h),{weight:t}));yield i.load(),o.add(i),f.push(i)}if(He.has(`${l}-and-url`)){He.get(`${l}-and-url`).entries.push({url:c,faces:f})}else He.set(`${l}-and-url`,{entries:[{url:c,faces:f}]});return 1===f.length?f[0]:f}return Bc("[loadWebFont] FontFace API is not supported. Skipping loading font"),null})},unload(c){const e=Array.isArray(c)?c:[c],t=e[0].family,i=He.get(`${t}-and-url`),n=i.entries.find(c=>c.faces.some(c=>-1!==e.indexOf(c)));n.faces=n.faces.filter(c=>-1===e.indexOf(c)),0===n.faces.length&&(i.entries=i.entries.filter(c=>c!==n)),e.forEach(c=>{Fe.get().getFontFaceSet().delete(c)}),0===i.entries.length&&He.remove(`${t}-and-url`)}};var Dn,On;const Ln=u(function(){if(On)return Dn;On=1,Dn=function(i){var n=[];return i.replace(e,function(e,i,r){var s=i.toLowerCase();for(r=function(c){var e=c.match(t);return e?e.map(Number):[]}(r),"m"==s&&r.length>2&&(n.push([i].concat(r.splice(0,2))),s="l",i="m"==i?"l":"L");;){if(r.length==c[s])return r.unshift(i),n.push(r);if(r.length<c[s])throw new Error("malformed path data");n.push([i].concat(r.splice(0,c[s])))}}),n};var c={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},e=/([astvzqmhlc])([^astvzqmhlc]*)/gi,t=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi;return Dn}());class zn{constructor(c=0,e=0,t=0){this.type="circle",this.x=c,this.y=e,this.radius=t}clone(){return new zn(this.x,this.y,this.radius)}contains(c,e){if(this.radius<=0)return!1;const t=this.radius*this.radius;let i=this.x-c,n=this.y-e;return i*=i,n*=n,i+n<=t}strokeContains(c,e,t,i=.5){if(0===this.radius)return!1;const n=this.x-c,r=this.y-e,s=this.radius,a=(1-i)*t,o=Math.sqrt(n*n+r*r);return o<=s+a&&o>s-(t-a)}getBounds(c){return c||(c=new D),c.x=this.x-this.radius,c.y=this.y-this.radius,c.width=2*this.radius,c.height=2*this.radius,c}copyFrom(c){return this.x=c.x,this.y=c.y,this.radius=c.radius,this}copyTo(c){return c.copyFrom(this),c}toString(){return`[pixi.js/math:Circle x=${this.x} y=${this.y} radius=${this.radius}]`}}class Gn{constructor(c=0,e=0,t=0,i=0){this.type="ellipse",this.x=c,this.y=e,this.halfWidth=t,this.halfHeight=i}clone(){return new Gn(this.x,this.y,this.halfWidth,this.halfHeight)}contains(c,e){if(this.halfWidth<=0||this.halfHeight<=0)return!1;let t=(c-this.x)/this.halfWidth,i=(e-this.y)/this.halfHeight;return t*=t,i*=i,t+i<=1}strokeContains(c,e,t,i=.5){const{halfWidth:n,halfHeight:r}=this;if(n<=0||r<=0)return!1;const s=t*(1-i),a=t-s,o=n-a,f=r-a,l=n+s,d=r+s,h=c-this.x,u=e-this.y;return h*h/(o*o)+u*u/(f*f)>1&&h*h/(l*l)+u*u/(d*d)<=1}getBounds(c){return c||(c=new D),c.x=this.x-this.halfWidth,c.y=this.y-this.halfHeight,c.width=2*this.halfWidth,c.height=2*this.halfHeight,c}copyFrom(c){return this.x=c.x,this.y=c.y,this.halfWidth=c.halfWidth,this.halfHeight=c.halfHeight,this}copyTo(c){return c.copyFrom(this),c}toString(){return`[pixi.js/math:Ellipse x=${this.x} y=${this.y} halfWidth=${this.halfWidth} halfHeight=${this.halfHeight}]`}}function Un(c,e,t,i,n,r){const s=n-t,a=r-i,o=s*s+a*a;let f,l,d=-1;0!==o&&(d=((c-t)*s+(e-i)*a)/o),d<0?(f=t,l=i):d>1?(f=n,l=r):(f=t+d*s,l=i+d*a);const h=c-f,u=e-l;return h*h+u*u}class Vn{constructor(...c){this.type="polygon";let e=Array.isArray(c[0])?c[0]:c;if("number"!=typeof e[0]){const c=[];for(let t=0,i=e.length;t<i;t++)c.push(e[t].x,e[t].y);e=c}this.points=e,this.closePath=!0}isClockwise(){let c=0;const e=this.points,t=e.length;for(let i=0;i<t;i+=2){const n=e[i],r=e[i+1];c+=(e[(i+2)%t]-n)*(e[(i+3)%t]+r)}return c<0}containsPolygon(c){const e=this.getBounds(undefined),t=c.getBounds(undefined);if(!e.containsRect(t))return!1;const i=c.points;for(let n=0;n<i.length;n+=2){const c=i[n],e=i[n+1];if(!this.contains(c,e))return!1}return!0}clone(){const c=this.points.slice(),e=new Vn(c);return e.closePath=this.closePath,e}contains(c,e){let t=!1;const i=this.points.length/2;for(let n=0,r=i-1;n<i;r=n++){const i=this.points[2*n],s=this.points[2*n+1],a=this.points[2*r],o=this.points[2*r+1];s>e!=o>e&&c<(e-s)/(o-s)*(a-i)+i&&(t=!t)}return t}strokeContains(c,e,t,i=.5){const n=t*t,r=n*(1-i),s=n-r,{points:a}=this,o=a.length-(this.closePath?0:2);for(let f=0;f<o;f+=2){const t=a[f],i=a[f+1],n=a[(f+2)%a.length],o=a[(f+3)%a.length];if(Un(c,e,t,i,n,o)<=(Math.sign((n-t)*(e-i)-(o-i)*(c-t))<0?s:r))return!0}return!1}getBounds(c){c||(c=new D);const e=this.points;let t=1/0,i=-1/0,n=1/0,r=-1/0;for(let s=0,a=e.length;s<a;s+=2){const c=e[s],a=e[s+1];t=c<t?c:t,i=c>i?c:i,n=a<n?a:n,r=a>r?a:r}return c.x=t,c.width=i-t,c.y=n,c.height=r-n,c}copyFrom(c){return this.points=c.points.slice(),this.closePath=c.closePath,this}copyTo(c){return c.copyFrom(this),c}toString(){return`[pixi.js/math:PolygoncloseStroke=${this.closePath}points=${this.points.reduce((c,e)=>`${c}, ${e}`,"")}]`}get lastX(){return this.points[this.points.length-2]}get lastY(){return this.points[this.points.length-1]}get x(){return V("8.11.0","Polygon.lastX is deprecated, please use Polygon.lastX instead."),this.points[this.points.length-2]}get y(){return V("8.11.0","Polygon.y is deprecated, please use Polygon.lastY instead."),this.points[this.points.length-1]}get startX(){return this.points[0]}get startY(){return this.points[1]}}const Nn=(c,e,t,i,n,r,s)=>{const a=c-t,o=e-i,f=Math.sqrt(a*a+o*o);return f>=n-r&&f<=n+s};class Wn{constructor(c=0,e=0,t=0,i=0,n=20){this.type="roundedRectangle",this.x=c,this.y=e,this.width=t,this.height=i,this.radius=n}getBounds(c){return c||(c=new D),c.x=this.x,c.y=this.y,c.width=this.width,c.height=this.height,c}clone(){return new Wn(this.x,this.y,this.width,this.height,this.radius)}copyFrom(c){return this.x=c.x,this.y=c.y,this.width=c.width,this.height=c.height,this}copyTo(c){return c.copyFrom(this),c}contains(c,e){if(this.width<=0||this.height<=0)return!1;if(c>=this.x&&c<=this.x+this.width&&e>=this.y&&e<=this.y+this.height){const t=Math.max(0,Math.min(this.radius,Math.min(this.width,this.height)/2));if(e>=this.y+t&&e<=this.y+this.height-t||c>=this.x+t&&c<=this.x+this.width-t)return!0;let i=c-(this.x+t),n=e-(this.y+t);const r=t*t;if(i*i+n*n<=r)return!0;if(i=c-(this.x+this.width-t),i*i+n*n<=r)return!0;if(n=e-(this.y+this.height-t),i*i+n*n<=r)return!0;if(i=c-(this.x+t),i*i+n*n<=r)return!0}return!1}strokeContains(c,e,t,i=.5){const{x:n,y:r,width:s,height:a,radius:o}=this,f=t*(1-i),l=t-f,d=n+o,h=r+o,u=n+s,p=r+a;return(c>=n-f&&c<=n+l||c>=u-l&&c<=u+f)&&e>=h&&e<=h+(a-2*o)||((e>=r-f&&e<=r+l||e>=p-l&&e<=p+f)&&c>=d&&c<=d+(s-2*o)||(c<d&&e<h&&Nn(c,e,d,h,o,l,f)||c>u-o&&e<h&&Nn(c,e,u-o,h,o,l,f)||c>u-o&&e>p-o&&Nn(c,e,u-o,p-o,o,l,f)||c<d&&e>p-o&&Nn(c,e,d,p-o,o,l,f)))}toString(){return`[pixi.js/math:RoundedRectangle x=${this.x} y=${this.y}width=${this.width} height=${this.height} radius=${this.radius}]`}}const Hn={};function jn(c,e,t){let i=2166136261;for(let n=0;n<e;n++)i^=c[n].uid,i=Math.imul(i,16777619),i>>>=0;return Hn[i]||function(c,e,t,i){const n={};let r=0;for(let a=0;a<i;a++){const t=a<e?c[a]:cc.EMPTY.source;n[r++]=t.source,n[r++]=t.style}const s=new ti(n);return Hn[t]=s,s}(c,e,i,t)}class Yn{constructor(c){"number"==typeof c?this.rawBinaryData=new ArrayBuffer(c):c instanceof Uint8Array?this.rawBinaryData=c.buffer:this.rawBinaryData=c,this.uint32View=new Uint32Array(this.rawBinaryData),this.float32View=new Float32Array(this.rawBinaryData),this.size=this.rawBinaryData.byteLength}get int8View(){return this._int8View||(this._int8View=new Int8Array(this.rawBinaryData)),this._int8View}get uint8View(){return this._uint8View||(this._uint8View=new Uint8Array(this.rawBinaryData)),this._uint8View}get int16View(){return this._int16View||(this._int16View=new Int16Array(this.rawBinaryData)),this._int16View}get int32View(){return this._int32View||(this._int32View=new Int32Array(this.rawBinaryData)),this._int32View}get float64View(){return this._float64Array||(this._float64Array=new Float64Array(this.rawBinaryData)),this._float64Array}get bigUint64View(){return this._bigUint64Array||(this._bigUint64Array=new BigUint64Array(this.rawBinaryData)),this._bigUint64Array}view(c){return this[`${c}View`]}destroy(){this.rawBinaryData=null,this.uint32View=null,this.float32View=null,this.uint16View=null,this._int8View=null,this._uint8View=null,this._int16View=null,this._int32View=null,this._float64Array=null,this._bigUint64Array=null}static sizeOf(c){switch(c){case"int8":case"uint8":return 1;case"int16":case"uint16":return 2;case"int32":case"uint32":case"float32":return 4;default:throw new Error(`${c} isn't a valid view type`)}}}function Xn(c,e,t,i){if(null!=t||(t=0),null!=i||(i=Math.min(c.byteLength-t,e.byteLength)),7&t||7&i)if(3&t||3&i)new Uint8Array(e).set(new Uint8Array(c,t,i));else{const n=i/4;new Float32Array(e,0,n).set(new Float32Array(c,t,n))}else{const n=i/8;new Float64Array(e,0,n).set(new Float64Array(c,t,n))}}const Zn={normal:"normal-npm",add:"add-npm",screen:"screen-npm"};var qn=(c=>(c[c.DISABLED=0]="DISABLED",c[c.RENDERING_MASK_ADD=1]="RENDERING_MASK_ADD",c[c.MASK_ACTIVE=2]="MASK_ACTIVE",c[c.INVERSE_MASK_ACTIVE=3]="INVERSE_MASK_ACTIVE",c[c.RENDERING_MASK_REMOVE=4]="RENDERING_MASK_REMOVE",c[c.NONE=5]="NONE",c))(qn||{});function Kn(c,e){return"no-premultiply-alpha"===e.alphaMode&&Zn[c]||c}const Qn=["precision mediump float;","void main(void){","float test = 0.1;","%forloop%","gl_FragColor = vec4(0.0);","}"].join("\n");function Jn(c){let e="";for(let t=0;t<c;++t)t>0&&(e+="\nelse "),t<c-1&&(e+=`if(test == ${t}.0){}`);return e}function $n(c,e){if(0===c)throw new Error("Invalid value of `0` passed to `checkMaxIfStatementsInShader`");const t=e.createShader(e.FRAGMENT_SHADER);try{for(;;){const i=Qn.replace(/%forloop%/gi,Jn(c));if(e.shaderSource(t,i),e.compileShader(t),e.getShaderParameter(t,e.COMPILE_STATUS))break;c=c/2|0}}finally{e.deleteShader(t)}return c}let cr=null;class er{constructor(){this.ids=Object.create(null),this.textures=[],this.count=0}clear(){for(let c=0;c<this.count;c++){const e=this.textures[c];this.textures[c]=null,this.ids[e.uid]=null}this.count=0}}class tr{constructor(){this.renderPipeId="batch",this.action="startBatch",this.start=0,this.size=0,this.textures=new er,this.blendMode="normal",this.topology="triangle-strip",this.canBundle=!0}destroy(){this.textures=null,this.gpuBindGroup=null,this.bindGroup=null,this.batcher=null,this.elements=null}}const ir=[];let nr=0;function rr(){return nr>0?ir[--nr]:new tr}function sr(c){c.elements=null,ir[nr++]=c}Dc.register({clear:()=>{if(ir.length>0)for(const c of ir)c&&c.destroy();ir.length=0,nr=0}});let ar=0;const or=class c{constructor(e){this.uid=L("batcher"),this.dirty=!0,this.batchIndex=0,this.batches=[],this._elements=[],(e=__spreadValues(__spreadValues({},c.defaultOptions),e)).maxTextures||(V("v8.8.0","maxTextures is a required option for Batcher now, please pass it in the options"),e.maxTextures=function(){var c;if(cr)return cr;const e=Bt();return cr=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),cr=$n(cr,e),null==(c=e.getExtension("WEBGL_lose_context"))||c.loseContext(),cr}());const{maxTextures:t,attributesInitialSize:i,indicesInitialSize:n}=e;this.attributeBuffer=new Yn(4*i),this.indexBuffer=new Uint16Array(n),this.maxTextures=t}begin(){this.elementSize=0,this.elementStart=0,this.indexSize=0,this.attributeSize=0;for(let c=0;c<this.batchIndex;c++)sr(this.batches[c]);this.batchIndex=0,this._batchIndexStart=0,this._batchIndexSize=0,this.dirty=!0}add(c){this._elements[this.elementSize++]=c,c._indexStart=this.indexSize,c._attributeStart=this.attributeSize,c._batcher=this,this.indexSize+=c.indexSize,this.attributeSize+=c.attributeSize*this.vertexSize}checkAndUpdateTexture(c,e){const t=c._batch.textures.ids[e._source.uid];return!(!t&&0!==t)&&(c._textureId=t,c.texture=e,!0)}updateElement(c){this.dirty=!0;const e=this.attributeBuffer;c.packAsQuad?this.packQuadAttributes(c,e.float32View,e.uint32View,c._attributeStart,c._textureId):this.packAttributes(c,e.float32View,e.uint32View,c._attributeStart,c._textureId)}break(c){const e=this._elements;if(!e[this.elementStart])return;let t=rr(),i=t.textures;i.clear();const n=e[this.elementStart];let r=Kn(n.blendMode,n.texture._source),s=n.topology;4*this.attributeSize>this.attributeBuffer.size&&this._resizeAttributeBuffer(4*this.attributeSize),this.indexSize>this.indexBuffer.length&&this._resizeIndexBuffer(this.indexSize);const a=this.attributeBuffer.float32View,o=this.attributeBuffer.uint32View,f=this.indexBuffer;let l=this._batchIndexSize,d=this._batchIndexStart,h="startBatch",u=[];const p=this.maxTextures;for(let g=this.elementStart;g<this.elementSize;++g){const n=e[g];e[g]=null;const m=n.texture._source,b=Kn(n.blendMode,m),v=r!==b||s!==n.topology;m._batchTick!==ar||v?(m._batchTick=ar,(i.count>=p||v)&&(this._finishBatch(t,d,l-d,i,r,s,c,h,u),h="renderBatch",d=l,r=b,s=n.topology,t=rr(),i=t.textures,i.clear(),u=[],++ar),n._textureId=m._textureBindLocation=i.count,i.ids[m.uid]=i.count,i.textures[i.count++]=m,n._batch=t,u.push(n),l+=n.indexSize,n.packAsQuad?(this.packQuadAttributes(n,a,o,n._attributeStart,n._textureId),this.packQuadIndex(f,n._indexStart,n._attributeStart/this.vertexSize)):(this.packAttributes(n,a,o,n._attributeStart,n._textureId),this.packIndex(n,f,n._indexStart,n._attributeStart/this.vertexSize))):(n._textureId=m._textureBindLocation,l+=n.indexSize,n.packAsQuad?(this.packQuadAttributes(n,a,o,n._attributeStart,n._textureId),this.packQuadIndex(f,n._indexStart,n._attributeStart/this.vertexSize)):(this.packAttributes(n,a,o,n._attributeStart,n._textureId),this.packIndex(n,f,n._indexStart,n._attributeStart/this.vertexSize)),n._batch=t,u.push(n))}i.count>0&&(this._finishBatch(t,d,l-d,i,r,s,c,h,u),d=l,++ar),this.elementStart=this.elementSize,this._batchIndexStart=d,this._batchIndexSize=l}_finishBatch(c,e,t,i,n,r,s,a,o){c.gpuBindGroup=null,c.bindGroup=null,c.action=a,c.batcher=this,c.textures=i,c.blendMode=n,c.topology=r,c.start=e,c.size=t,c.elements=o,++ar,this.batches[this.batchIndex++]=c,s.add(c)}finish(c){this.break(c)}ensureAttributeBuffer(c){4*c<=this.attributeBuffer.size||this._resizeAttributeBuffer(4*c)}ensureIndexBuffer(c){c<=this.indexBuffer.length||this._resizeIndexBuffer(c)}_resizeAttributeBuffer(c){const e=Math.max(c,2*this.attributeBuffer.size),t=new Yn(e);Xn(this.attributeBuffer.rawBinaryData,t.rawBinaryData),this.attributeBuffer=t}_resizeIndexBuffer(c){const e=this.indexBuffer;let t=Math.max(c,1.5*e.length);t+=t%2;const i=t>65535?new Uint32Array(t):new Uint16Array(t);if(i.BYTES_PER_ELEMENT!==e.BYTES_PER_ELEMENT)for(let n=0;n<e.length;n++)i[n]=e[n];else Xn(e.buffer,i.buffer);this.indexBuffer=i}packQuadIndex(c,e,t){c[e]=t+0,c[e+1]=t+1,c[e+2]=t+2,c[e+3]=t+0,c[e+4]=t+2,c[e+5]=t+3}packIndex(c,e,t,i){const n=c.indices,r=c.indexSize,s=c.indexOffset,a=c.attributeOffset;for(let o=0;o<r;o++)e[t++]=i+n[o+s]-a}destroy(c={}){var e;if(null!==this.batches){for(let c=0;c<this.batchIndex;c++)sr(this.batches[c]);this.batches=null,this.geometry.destroy(!0),this.geometry=null,c.shader&&(null==(e=this.shader)||e.destroy(),this.shader=null);for(let c=0;c<this._elements.length;c++)this._elements[c]&&(this._elements[c]._batch=null);this._elements=null,this.indexBuffer=null,this.attributeBuffer.destroy(),this.attributeBuffer=null}}};or.defaultOptions={maxTextures:null,attributesInitialSize:4,indicesInitialSize:6};let fr=or;var lr=(c=>(c[c.MAP_READ=1]="MAP_READ",c[c.MAP_WRITE=2]="MAP_WRITE",c[c.COPY_SRC=4]="COPY_SRC",c[c.COPY_DST=8]="COPY_DST",c[c.INDEX=16]="INDEX",c[c.VERTEX=32]="VERTEX",c[c.UNIFORM=64]="UNIFORM",c[c.STORAGE=128]="STORAGE",c[c.INDIRECT=256]="INDIRECT",c[c.QUERY_RESOLVE=512]="QUERY_RESOLVE",c[c.STATIC=1024]="STATIC",c))(lr||{});let dr=class extends b{constructor(c){let{data:e,size:t}=c;const{usage:i,label:n,shrinkToFit:r}=c;super(),this._gpuData=Object.create(null),this._gcLastUsed=-1,this.autoGarbageCollect=!0,this.uid=L("buffer"),this._resourceType="buffer",this._resourceId=L("resource"),this._touched=0,this._updateID=1,this._dataInt32=null,this.shrinkToFit=!0,this.destroyed=!1,e instanceof Array&&(e=new Float32Array(e)),this._data=e,null!=t||(t=null==e?void 0:e.byteLength);const s=!!e;this.descriptor={size:t,usage:i,mappedAtCreation:s,label:n},this.shrinkToFit=null==r||r}get data(){return this._data}set data(c){this.setDataWithSize(c,c.length,!0)}get dataInt32(){return this._dataInt32||(this._dataInt32=new Int32Array(this.data.buffer)),this._dataInt32}get static(){return!!(this.descriptor.usage&lr.STATIC)}set static(c){c?this.descriptor.usage|=lr.STATIC:this.descriptor.usage&=~lr.STATIC}setDataWithSize(c,e,t){if(this._updateID++,this._updateSize=e*c.BYTES_PER_ELEMENT,this._data===c)return void(t&&this.emit("update",this));const i=this._data;this._data=c,this._dataInt32=null,i&&i.length===c.length||!this.shrinkToFit&&i&&c.byteLength<i.byteLength?t&&this.emit("update",this):(this.descriptor.size=c.byteLength,this._resourceId=L("resource"),this.emit("change",this))}update(c){this._updateSize=null!=c?c:this._updateSize,this._updateID++,this.emit("update",this)}unload(){var c;this.emit("unload",this);for(const e in this._gpuData)null==(c=this._gpuData[e])||c.destroy();this._gpuData=Object.create(null)}destroy(){this.destroyed=!0,this.unload(),this.emit("destroy",this),this.emit("change",this),this._data=null,this.descriptor=null,this.removeAllListeners()}};function hr(c,e){if(!(c instanceof dr)){let t=e?lr.INDEX:lr.VERTEX;c instanceof Array&&(e?(c=new Uint32Array(c),t=lr.INDEX|lr.COPY_DST):(c=new Float32Array(c),t=lr.VERTEX|lr.COPY_DST)),c=new dr({data:c,label:e?"index-mesh-buffer":"vertex-mesh-buffer",usage:t})}return c}class ur extends b{constructor(c={}){var e;super(),this._gpuData=Object.create(null),this.autoGarbageCollect=!0,this._gcLastUsed=-1,this.uid=L("geometry"),this._layoutKey=0,this.instanceCount=1,this._bounds=new ic,this._boundsDirty=!0;const{attributes:t,indexBuffer:i,topology:n}=c;if(this.buffers=[],this.attributes={},t)for(const r in t)this.addAttribute(r,t[r]);this.instanceCount=null!=(e=c.instanceCount)?e:1,i&&this.addIndex(i),this.topology=n||"triangle-list"}onBufferUpdate(){this._boundsDirty=!0,this.emit("update",this)}getAttribute(c){return this.attributes[c]}getIndex(){return this.indexBuffer}getBuffer(c){return this.getAttribute(c).buffer}getSize(){for(const c in this.attributes){const e=this.attributes[c];return e.buffer.data.length/(e.stride/4||e.size)}return 0}addAttribute(c,e){const t=function(c){return(c instanceof dr||Array.isArray(c)||c.BYTES_PER_ELEMENT)&&(c={buffer:c}),c.buffer=hr(c.buffer,!1),c}(e);-1===this.buffers.indexOf(t.buffer)&&(this.buffers.push(t.buffer),t.buffer.on("update",this.onBufferUpdate,this),t.buffer.on("change",this.onBufferUpdate,this)),this.attributes[c]=t}addIndex(c){this.indexBuffer=hr(c,!0),this.buffers.push(this.indexBuffer)}get bounds(){return this._boundsDirty?(this._boundsDirty=!1,function(c,e,t){const i=c.getAttribute(e);if(!i)return t.minX=0,t.minY=0,t.maxX=0,t.maxY=0,t;const n=i.buffer.data;let r=1/0,s=1/0,a=-1/0,o=-1/0;const f=n.BYTES_PER_ELEMENT,l=(i.offset||0)/f,d=(i.stride||8)/f;for(let h=l;h<n.length;h+=d){const c=n[h],e=n[h+1];c>a&&(a=c),e>o&&(o=e),c<r&&(r=c),e<s&&(s=e)}return t.minX=r,t.minY=s,t.maxX=a,t.maxY=o,t}(this,"aPosition",this._bounds)):this._bounds}unload(){var c;this.emit("unload",this);for(const e in this._gpuData)null==(c=this._gpuData[e])||c.destroy();this._gpuData=Object.create(null)}destroy(c=!1){var e;this.emit("destroy",this),this.removeAllListeners(),c&&this.buffers.forEach(c=>c.destroy()),this.unload(),null==(e=this.indexBuffer)||e.destroy(),this.attributes=null,this.buffers=null,this.indexBuffer=null,this._bounds=null}}const pr=new Float32Array(1),gr=new Uint32Array(1);class mr extends ur{constructor(){const c=new dr({data:pr,label:"attribute-batch-buffer",usage:lr.VERTEX|lr.COPY_DST,shrinkToFit:!1});super({attributes:{aPosition:{buffer:c,format:"float32x2",stride:24,offset:0},aUV:{buffer:c,format:"float32x2",stride:24,offset:8},aColor:{buffer:c,format:"unorm8x4",stride:24,offset:16},aTextureIdAndRound:{buffer:c,format:"uint16x2",stride:24,offset:20}},indexBuffer:new dr({data:gr,label:"index-batch-buffer",usage:lr.INDEX|lr.COPY_DST,shrinkToFit:!1})})}}function br(c,e,t){if(c)for(const i in c){const n=e[i.toLocaleLowerCase()];if(n){let e=c[i];"header"===i&&(e=e.replace(/@in\s+[^;]+;\s*/g,"").replace(/@out\s+[^;]+;\s*/g,"")),t&&n.push(`//----${t}----//`),n.push(e)}else Bc(`${i} placement hook does not exist in shader`)}}const vr=/\{\{(.*?)\}\}/g;function yr(c){var e,t;const i={};return(null!=(t=null==(e=c.match(vr))?void 0:e.map(c=>c.replace(/[{()}]/g,"")))?t:[]).forEach(c=>{i[c]=[]}),i}function _r(c,e){let t;const i=/@in\s+([^;]+);/g;for(;null!==(t=i.exec(c));)e.push(t[1])}function xr(c,e,t=!1){const i=[];_r(e,i),c.forEach(c=>{c.header&&_r(c.header,i)});const n=i;t&&n.sort();const r=n.map((c,e)=>` @location(${e}) ${c},`).join("\n");let s=e.replace(/@in\s+[^;]+;\s*/g,"");return s=s.replace("{{in}}",`\n${r}\n`),s}function Sr(c,e){let t;const i=/@out\s+([^;]+);/g;for(;null!==(t=i.exec(c));)e.push(t[1])}function wr(c,e){let t=c;for(const i in e){const c=e[i];t=c.join("\n").length?t.replace(`{{${i}}}`,`//-----${i} START-----//\n${c.join("\n")}\n//----${i} FINISH----//`):t.replace(`{{${i}}}`,"")}return t}const Cr=Object.create(null),Ar=new Map;let Tr=0;function Pr({template:c,bits:e}){const t=Mr(c,e);if(Cr[t])return Cr[t];const{vertex:i,fragment:n}=function(c,e){const t=e.map(c=>c.vertex).filter(c=>!!c),i=e.map(c=>c.fragment).filter(c=>!!c);let n=xr(t,c.vertex,!0);n=function(c,e){const t=[];Sr(e,t),c.forEach(c=>{c.header&&Sr(c.header,t)});let i=0;const n=t.sort().map(c=>c.indexOf("builtin")>-1?c:`@location(${i++}) ${c}`).join(",\n"),r=t.sort().map(c=>{return` var ${e=c,e.replace(/@.*?\s+/g,"")};`;var e}).join("\n"),s=`return VSOutput(\n ${t.sort().map(c=>` ${function(c){const e=/\b(\w+)\s*:/g.exec(c);return e?e[1]:""}(c)}`).join(",\n")});`;let a=e.replace(/@out\s+[^;]+;\s*/g,"");return a=a.replace("{{struct}}",`\n${n}\n`),a=a.replace("{{start}}",`\n${r}\n`),a=a.replace("{{return}}",`\n${s}\n`),a}(t,n);const r=xr(i,c.fragment,!0);return{vertex:n,fragment:r}}(c,e);return Cr[t]=Er(i,n,e),Cr[t]}function Mr(c,e){return e.map(c=>(Ar.has(c)||Ar.set(c,Tr++),Ar.get(c))).sort((c,e)=>c-e).join("-")+c.vertex+c.fragment}function Er(c,e,t){const i=yr(c),n=yr(e);return t.forEach(c=>{br(c.vertex,i,c.name),br(c.fragment,n,c.name)}),{vertex:wr(c,i),fragment:wr(e,n)}}const Rr={name:"global-uniforms-bit",vertex:{header:"\n struct GlobalUniforms {\n uProjectionMatrix:mat3x3<f32>,\n uWorldTransformMatrix:mat3x3<f32>,\n uWorldColorAlpha: vec4<f32>,\n uResolution: vec2<f32>,\n }\n\n @group(0) @binding(0) var<uniform> globalUniforms : GlobalUniforms;\n "}},kr={name:"global-uniforms-bit",vertex:{header:"\n uniform mat3 uProjectionMatrix;\n uniform mat3 uWorldTransformMatrix;\n uniform vec4 uWorldColorAlpha;\n uniform vec2 uResolution;\n "}};function Fr({bits:c,name:e}){const t=Pr({template:{fragment:"\n @in vUV : vec2<f32>;\n @in vColor : vec4<f32>;\n\n {{header}}\n\n @fragment\n fn main(\n {{in}}\n ) -> @location(0) vec4<f32> {\n\n {{start}}\n\n var outColor:vec4<f32>;\n\n {{main}}\n\n var finalColor:vec4<f32> = outColor * vColor;\n\n {{end}}\n\n return finalColor;\n };\n",vertex:"\n @in aPosition: vec2<f32>;\n @in aUV: vec2<f32>;\n\n @out @builtin(position) vPosition: vec4<f32>;\n @out vUV : vec2<f32>;\n @out vColor : vec4<f32>;\n\n {{header}}\n\n struct VSOutput {\n {{struct}}\n };\n\n @vertex\n fn main( {{in}} ) -> VSOutput {\n\n var worldTransformMatrix = globalUniforms.uWorldTransformMatrix;\n var modelMatrix = mat3x3<f32>(\n 1.0, 0.0, 0.0,\n 0.0, 1.0, 0.0,\n 0.0, 0.0, 1.0\n );\n var position = aPosition;\n var uv = aUV;\n\n {{start}}\n\n vColor = vec4<f32>(1., 1., 1., 1.);\n\n {{main}}\n\n vUV = uv;\n\n var modelViewProjectionMatrix = globalUniforms.uProjectionMatrix * worldTransformMatrix * modelMatrix;\n\n vPosition = vec4<f32>((modelViewProjectionMatrix * vec3<f32>(position, 1.0)).xy, 0.0, 1.0);\n\n vColor *= globalUniforms.uWorldColorAlpha;\n\n {{end}}\n\n {{return}}\n };\n"},bits:[Rr,...c]});return Kt.from({name:e,vertex:{source:t.vertex,entryPoint:"main"},fragment:{source:t.fragment,entryPoint:"main"}})}function Ir({bits:c,name:e}){return new Vt(__spreadValues({name:e},function({template:c,bits:e}){const t=Mr(c,e);return Cr[t]||(Cr[t]=Er(c.vertex,c.fragment,e)),Cr[t]}({template:{vertex:"\n in vec2 aPosition;\n in vec2 aUV;\n\n out vec4 vColor;\n out vec2 vUV;\n\n {{header}}\n\n void main(void){\n\n mat3 worldTransformMatrix = uWorldTransformMatrix;\n mat3 modelMatrix = mat3(\n 1.0, 0.0, 0.0,\n 0.0, 1.0, 0.0,\n 0.0, 0.0, 1.0\n );\n vec2 position = aPosition;\n vec2 uv = aUV;\n\n {{start}}\n\n vColor = vec4(1.);\n\n {{main}}\n\n vUV = uv;\n\n mat3 modelViewProjectionMatrix = uProjectionMatrix * worldTransformMatrix * modelMatrix;\n\n gl_Position = vec4((modelViewProjectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n\n vColor *= uWorldColorAlpha;\n\n {{end}}\n }\n",fragment:"\n\n in vec4 vColor;\n in vec2 vUV;\n\n out vec4 finalColor;\n\n {{header}}\n\n void main(void) {\n\n {{start}}\n\n vec4 outColor;\n\n {{main}}\n\n finalColor = outColor * vColor;\n\n {{end}}\n }\n"},bits:[kr,...c]})))}const Br={name:"color-bit",vertex:{header:"\n @in aColor: vec4<f32>;\n ",main:"\n vColor *= vec4<f32>(aColor.rgb * aColor.a, aColor.a);\n "}},Dr={name:"color-bit",vertex:{header:"\n in vec4 aColor;\n ",main:"\n vColor *= vec4(aColor.rgb * aColor.a, aColor.a);\n "}},Or={};function Lr(c){const e=[];if(1===c)e.push("@group(1) @binding(0) var textureSource1: texture_2d<f32>;"),e.push("@group(1) @binding(1) var textureSampler1: sampler;");else{let t=0;for(let i=0;i<c;i++)e.push(`@group(1) @binding(${t++}) var textureSource${i+1}: texture_2d<f32>;`),e.push(`@group(1) @binding(${t++}) var textureSampler${i+1}: sampler;`)}return e.join("\n")}function zr(c){const e=[];if(1===c)e.push("outColor = textureSampleGrad(textureSource1, textureSampler1, vUV, uvDx, uvDy);");else{e.push("switch vTextureId {");for(let t=0;t<c;t++)t===c-1?e.push(" default:{"):e.push(` case ${t}:{`),e.push(` outColor = textureSampleGrad(textureSource${t+1}, textureSampler${t+1}, vUV, uvDx, uvDy);`),e.push(" break;}");e.push("}")}return e.join("\n")}function Gr(c){return Or[c]||(Or[c]={name:"texture-batch-bit",vertex:{header:"\n @in aTextureIdAndRound: vec2<u32>;\n @out @interpolate(flat) vTextureId : u32;\n ",main:"\n vTextureId = aTextureIdAndRound.y;\n ",end:"\n if(aTextureIdAndRound.x == 1)\n {\n vPosition = vec4<f32>(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);\n }\n "},fragment:{header:`\n @in @interpolate(flat) vTextureId: u32;\n\n ${Lr(c)}\n `,main:`\n var uvDx = dpdx(vUV);\n var uvDy = dpdy(vUV);\n\n ${zr(c)}\n `}}),Or[c]}const Ur={};function Vr(c){const e=[];for(let t=0;t<c;t++)t>0&&e.push("else"),t<c-1&&e.push(`if(vTextureId < ${t}.5)`),e.push("{"),e.push(`\toutColor = texture(uTextures[${t}], vUV);`),e.push("}");return e.join("\n")}function Nr(c){return Ur[c]||(Ur[c]={name:"texture-batch-bit",vertex:{header:"\n in vec2 aTextureIdAndRound;\n out float vTextureId;\n\n ",main:"\n vTextureId = aTextureIdAndRound.y;\n ",end:"\n if(aTextureIdAndRound.x == 1.)\n {\n gl_Position.xy = roundPixels(gl_Position.xy, uResolution);\n }\n "},fragment:{header:`\n in float vTextureId;\n\n uniform sampler2D uTextures[${c}];\n\n `,main:`\n\n ${Vr(c)}\n `}}),Ur[c]}const Wr={name:"round-pixels-bit",vertex:{header:"\n fn roundPixels(position: vec2<f32>, targetSize: vec2<f32>) -> vec2<f32>\n {\n return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;\n }\n "}},Hr={name:"round-pixels-bit",vertex:{header:"\n vec2 roundPixels(vec2 position, vec2 targetSize)\n {\n return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;\n }\n "}},jr={};function Yr(c){let e=jr[c];if(e)return e;const t=new Int32Array(c);for(let i=0;i<c;i++)t[i]=i;return e=jr[c]=new ei({uTextures:{value:t,type:"i32",size:c}},{isStatic:!0}),e}class Xr extends ni{constructor(c){super({glProgram:Ir({name:"batch",bits:[Dr,Nr(c),Hr]}),gpuProgram:Fr({name:"batch",bits:[Br,Gr(c),Wr]}),resources:{batchSamplers:Yr(c)}}),this.maxTextures=c}}let Zr=null;const qr=class c extends fr{constructor(e){super(e),this.geometry=new mr,this.name=c.extension.name,this.vertexSize=6,null!=Zr||(Zr=new Xr(e.maxTextures)),this.shader=Zr}packAttributes(c,e,t,i,n){const r=n<<16|65535&c.roundPixels,s=c.transform,a=s.a,o=s.b,f=s.c,l=s.d,d=s.tx,h=s.ty,{positions:u,uvs:p}=c,g=c.color,m=c.attributeOffset,b=m+c.attributeSize;for(let v=m;v<b;v++){const c=2*v,n=u[c],s=u[c+1];e[i++]=a*n+f*s+d,e[i++]=l*s+o*n+h,e[i++]=p[c],e[i++]=p[c+1],t[i++]=g,t[i++]=r}}packQuadAttributes(c,e,t,i,n){const r=c.texture,s=c.transform,a=s.a,o=s.b,f=s.c,l=s.d,d=s.tx,h=s.ty,u=c.bounds,p=u.maxX,g=u.minX,m=u.maxY,b=u.minY,v=r.uvs,y=c.color,_=n<<16|65535&c.roundPixels;e[i+0]=a*g+f*b+d,e[i+1]=l*b+o*g+h,e[i+2]=v.x0,e[i+3]=v.y0,t[i+4]=y,t[i+5]=_,e[i+6]=a*p+f*b+d,e[i+7]=l*b+o*p+h,e[i+8]=v.x1,e[i+9]=v.y1,t[i+10]=y,t[i+11]=_,e[i+12]=a*p+f*m+d,e[i+13]=l*m+o*p+h,e[i+14]=v.x2,e[i+15]=v.y2,t[i+16]=y,t[i+17]=_,e[i+18]=a*g+f*m+d,e[i+19]=l*m+o*g+h,e[i+20]=v.x3,e[i+21]=v.y3,t[i+22]=y,t[i+23]=_}_updateMaxTextures(c){this.shader.maxTextures!==c&&(Zr=new Xr(c),this.shader=Zr)}destroy(){this.shader=null,super.destroy()}};qr.extension={type:[s.Batcher],name:"default"};let Kr=qr;class Qr{constructor(c){this.items=Object.create(null);const{renderer:e,type:t,onUnload:i,priority:n,name:r}=c;this._renderer=e,e.gc.addResourceHash(this,"items",t,null!=n?n:0),this._onUnload=i,this.name=r}add(c){return!this.items[c.uid]&&(this.items[c.uid]=c,c.once("unload",this.remove,this),c._gcLastUsed=this._renderer.gc.now,!0)}remove(c,...e){var t;if(!this.items[c.uid])return;const i=c._gpuData[this._renderer.uid];i&&(null==(t=this._onUnload)||t.call(this,c,...e),i.destroy(),c._gpuData[this._renderer.uid]=null,this.items[c.uid]=null)}removeAll(...c){Object.values(this.items).forEach(e=>e&&this.remove(e,...c))}destroy(...c){this.removeAll(...c),this.items=Object.create(null),this._renderer=null,this._onUnload=null}}function Jr(c,e,t,i,n){const r=e.a,s=e.b,a=e.c,o=e.d,f=e.tx,l=e.ty;t||(t=0),i||(i=2),n||(n=c.length/i-t);let d=t*i;for(let h=0;h<n;h++){const e=c[d],t=c[d+1];c[d]=r*e+a*t+f,c[d+1]=s*e+o*t+l,d+=i}}const $r=new w;class cs{constructor(){this.packAsQuad=!1,this.batcherName="default",this.topology="triangle-list",this.applyTransform=!0,this.roundPixels=0,this._batcher=null,this._batch=null}get uvs(){return this.geometryData.uvs}get positions(){return this.geometryData.vertices}get indices(){return this.geometryData.indices}get blendMode(){return this.renderable&&this.applyTransform?this.renderable.groupBlendMode:"normal"}get color(){const c=this.baseColor,e=c>>16|65280&c|(255&c)<<16,t=this.renderable;return t?$c(e,t.groupColor)+(this.alpha*t.groupAlpha*255<<24):e+(255*this.alpha<<24)}get transform(){var c;return(null==(c=this.renderable)?void 0:c.groupTransform)||$r}copyTo(c){c.indexOffset=this.indexOffset,c.indexSize=this.indexSize,c.attributeOffset=this.attributeOffset,c.attributeSize=this.attributeSize,c.baseColor=this.baseColor,c.alpha=this.alpha,c.texture=this.texture,c.geometryData=this.geometryData,c.topology=this.topology}reset(){this.applyTransform=!0,this.renderable=null,this.topology="triangle-list"}destroy(){this.renderable=null,this.texture=null,this.geometryData=null,this._batcher=null,this._batch=null}}const es={extension:{type:s.ShapeBuilder,name:"circle"},build(c,e){let t,i,n,r,s,a;if("circle"===c.type){const e=c;if(s=a=e.radius,s<=0)return!1;t=e.x,i=e.y,n=r=0}else if("ellipse"===c.type){const e=c;if(s=e.halfWidth,a=e.halfHeight,s<=0||a<=0)return!1;t=e.x,i=e.y,n=r=0}else{const e=c,o=e.width/2,f=e.height/2;t=e.x+o,i=e.y+f,s=a=Math.max(0,Math.min(e.radius,Math.min(o,f))),n=o-s,r=f-a}if(n<0||r<0)return!1;const o=Math.ceil(2.3*Math.sqrt(s+a)),f=8*o+(n?4:0)+(r?4:0);if(0===f)return!1;if(0===o)return e[0]=e[6]=t+n,e[1]=e[3]=i+r,e[2]=e[4]=t-n,e[5]=e[7]=i-r,!0;let l=0,d=4*o+(n?2:0)+2,h=d,u=f,p=n+s,g=r,m=t+p,b=t-p,v=i+g;if(e[l++]=m,e[l++]=v,e[--d]=v,e[--d]=b,r){const c=i-g;e[h++]=b,e[h++]=c,e[--u]=c,e[--u]=m}for(let _=1;_<o;_++){const c=Math.PI/2*(_/o),f=n+Math.cos(c)*s,p=r+Math.sin(c)*a,g=t+f,m=t-f,b=i+p,v=i-p;e[l++]=g,e[l++]=b,e[--d]=b,e[--d]=m,e[h++]=m,e[h++]=v,e[--u]=v,e[--u]=g}p=n,g=r+a,m=t+p,b=t-p,v=i+g;const y=i-g;return e[l++]=m,e[l++]=v,e[--u]=y,e[--u]=m,n&&(e[l++]=b,e[l++]=v,e[--u]=y,e[--u]=b),!0},triangulate(c,e,t,i,n,r){if(0===c.length)return;let s=0,a=0;for(let l=0;l<c.length;l+=2)s+=c[l],a+=c[l+1];s/=c.length/2,a/=c.length/2;let o=i;e[o*t]=s,e[o*t+1]=a;const f=o++;for(let l=0;l<c.length;l+=2)e[o*t]=c[l],e[o*t+1]=c[l+1],l>0&&(n[r++]=o,n[r++]=f,n[r++]=o-1),o++;n[r++]=f+1,n[r++]=f,n[r++]=o-1}},ts=__spreadProps(__spreadValues({},es),{extension:__spreadProps(__spreadValues({},es.extension),{name:"ellipse"})}),is=__spreadProps(__spreadValues({},es),{extension:__spreadProps(__spreadValues({},es.extension),{name:"roundedRectangle"})}),ns=1e-4;function rs(c,e,t,i,n,r,s,a){let o,f;s?(o=i,f=-t):(o=-i,f=t);const l=c-t*n+o,d=e-i*n+f,h=c+t*r+o,u=e+i*r+f;return a.push(l,d),a.push(h,u),2}function ss(c,e,t,i,n,r,s,a){const o=t-c,f=i-e;let l=Math.atan2(o,f),d=Math.atan2(n-c,r-e);a&&l<d?l+=2*Math.PI:!a&&l>d&&(d+=2*Math.PI);let h=l;const u=d-l,p=Math.abs(u),g=Math.sqrt(o*o+f*f),m=1+(15*p*Math.sqrt(g)/Math.PI|0),b=u/m;if(h+=b,a){s.push(c,e),s.push(t,i);for(let t=1,i=h;t<m;t++,i+=b)s.push(c,e),s.push(c+Math.sin(i)*g,e+Math.cos(i)*g);s.push(c,e),s.push(n,r)}else{s.push(t,i),s.push(c,e);for(let t=1,i=h;t<m;t++,i+=b)s.push(c+Math.sin(i)*g,e+Math.cos(i)*g),s.push(c,e);s.push(n,r),s.push(c,e)}return 2*m}function as(c,e,t,i,n,r){const s=ns;if(0===c.length)return;const a=e;let o=a.alignment;if(.5!==e.alignment){let e=function(c){const e=c.length;if(e<6)return 1;let t=0;for(let i=0,n=c[e-2],r=c[e-1];i<e;i+=2){const e=c[i],s=c[i+1];t+=(e-n)*(s+r),n=e,r=s}return t<0?-1:1}(c);o=(o-.5)*e+.5}const f=new x(c[0],c[1]),l=new x(c[c.length-2],c[c.length-1]),d=i,h=Math.abs(f.x-l.x)<s&&Math.abs(f.y-l.y)<s;if(d){c=c.slice(),h&&(c.pop(),c.pop(),l.set(c[c.length-2],c[c.length-1]));const e=.5*(f.x+l.x),t=.5*(l.y+f.y);c.unshift(e,t),c.push(e,t)}const u=n,p=c.length/2;let g=c.length;const m=u.length/2,b=a.width/2,v=b*b,y=a.miterLimit*a.miterLimit;let _=c[0],S=c[1],w=c[2],C=c[3],A=0,T=0,P=-(S-C),M=_-w,E=0,R=0,k=Math.sqrt(P*P+M*M);P/=k,M/=k,P*=b,M*=b;const F=2*(1-o),I=2*o;d||("round"===a.cap?g+=ss(_-P*(F-I)*.5,S-M*(F-I)*.5,_-P*F,S-M*F,_+P*I,S+M*I,u,!0)+2:"square"===a.cap&&(g+=rs(_,S,P,M,F,I,!0,u))),u.push(_-P*F,S-M*F),u.push(_+P*I,S+M*I);for(let x=1;x<p-1;++x){_=c[2*(x-1)],S=c[2*(x-1)+1],w=c[2*x],C=c[2*x+1],A=c[2*(x+1)],T=c[2*(x+1)+1],P=-(S-C),M=_-w,k=Math.sqrt(P*P+M*M),P/=k,M/=k,P*=b,M*=b,E=-(C-T),R=w-A,k=Math.sqrt(E*E+R*R),E/=k,R/=k,E*=b,R*=b;const e=w-_,t=S-C,i=w-A,n=T-C,r=e*i+t*n,s=t*i-n*e,o=s<0;if(Math.abs(s)<.001*Math.abs(r)){u.push(w-P*F,C-M*F),u.push(w+P*I,C+M*I),r>=0&&("round"===a.join?g+=ss(w,C,w-P*F,C-M*F,w-E*F,C-R*F,u,!1)+4:g+=2,u.push(w-E*I,C-R*I),u.push(w+E*F,C+R*F));continue}const f=(-P+_)*(-M+C)-(-P+w)*(-M+S),l=(-E+A)*(-R+C)-(-E+w)*(-R+T),d=(e*l-i*f)/s,h=(n*f-t*l)/s,p=(d-w)*(d-w)+(h-C)*(h-C),m=w+(d-w)*F,B=C+(h-C)*F,D=w-(d-w)*I,O=C-(h-C)*I,L=o?F:I;p<=Math.min(e*e+t*t,i*i+n*n)+L*L*v?"bevel"===a.join||p/v>y?(o?(u.push(m,B),u.push(w+P*I,C+M*I),u.push(m,B),u.push(w+E*I,C+R*I)):(u.push(w-P*F,C-M*F),u.push(D,O),u.push(w-E*F,C-R*F),u.push(D,O)),g+=2):"round"===a.join?o?(u.push(m,B),u.push(w+P*I,C+M*I),g+=ss(w,C,w+P*I,C+M*I,w+E*I,C+R*I,u,!0)+4,u.push(m,B),u.push(w+E*I,C+R*I)):(u.push(w-P*F,C-M*F),u.push(D,O),g+=ss(w,C,w-P*F,C-M*F,w-E*F,C-R*F,u,!1)+4,u.push(w-E*F,C-R*F),u.push(D,O)):(u.push(m,B),u.push(D,O)):(u.push(w-P*F,C-M*F),u.push(w+P*I,C+M*I),"round"===a.join?g+=o?ss(w,C,w+P*I,C+M*I,w+E*I,C+R*I,u,!0)+2:ss(w,C,w-P*F,C-M*F,w-E*F,C-R*F,u,!1)+2:"miter"===a.join&&p/v<=y&&(o?(u.push(D,O),u.push(D,O)):(u.push(m,B),u.push(m,B)),g+=2),u.push(w-E*F,C-R*F),u.push(w+E*I,C+R*I),g+=2)}_=c[2*(p-2)],S=c[2*(p-2)+1],w=c[2*(p-1)],C=c[2*(p-1)+1],P=-(S-C),M=_-w,k=Math.sqrt(P*P+M*M),P/=k,M/=k,P*=b,M*=b,u.push(w-P*F,C-M*F),u.push(w+P*I,C+M*I),d||("round"===a.cap?g+=ss(w-P*(F-I)*.5,C-M*(F-I)*.5,w-P*F,C-M*F,w+P*I,C+M*I,u,!1)+2:"square"===a.cap&&(g+=rs(w,C,P,M,F,I,!1,u)));for(let x=m;x<g+m-2;++x)_=u[2*x],S=u[2*x+1],w=u[2*(x+1)],C=u[2*(x+1)+1],A=u[2*(x+2)],T=u[2*(x+2)+1],Math.abs(_*(C-T)+w*(T-S)+A*(S-C))<1e-8||r.push(x,x+1,x+2)}function os(c,e,t,i,n,r,s){const a=Gi(c,e,2);if(!a)return;for(let f=0;f<a.length;f+=3)r[s++]=a[f]+n,r[s++]=a[f+1]+n,r[s++]=a[f+2]+n;let o=n*i;for(let f=0;f<c.length;f+=2)t[o]=c[f],t[o+1]=c[f+1],o+=i}const fs=[],ls={extension:{type:s.ShapeBuilder,name:"polygon"},build(c,e){for(let t=0;t<c.points.length;t++)e[t]=c.points[t];return!0},triangulate(c,e,t,i,n,r){os(c,fs,e,t,i,n,r)}},ds={extension:{type:s.ShapeBuilder,name:"rectangle"},build(c,e){const t=c,i=t.x,n=t.y,r=t.width,s=t.height;return r>0&&s>0&&(e[0]=i,e[1]=n,e[2]=i+r,e[3]=n,e[4]=i+r,e[5]=n+s,e[6]=i,e[7]=n+s,!0)},triangulate(c,e,t,i,n,r){let s=0;e[(i*=t)+s]=c[0],e[i+s+1]=c[1],s+=t,e[i+s]=c[2],e[i+s+1]=c[3],s+=t,e[i+s]=c[6],e[i+s+1]=c[7],s+=t,e[i+s]=c[4],e[i+s+1]=c[5],s+=t;const a=i/t;n[r++]=a,n[r++]=a+1,n[r++]=a+2,n[r++]=a+1,n[r++]=a+3,n[r++]=a+2}},hs={extension:{type:s.ShapeBuilder,name:"triangle"},build:(c,e)=>(e[0]=c.x,e[1]=c.y,e[2]=c.x2,e[3]=c.y2,e[4]=c.x3,e[5]=c.y3,!0),triangulate(c,e,t,i,n,r){let s=0;e[(i*=t)+s]=c[0],e[i+s+1]=c[1],s+=t,e[i+s]=c[2],e[i+s+1]=c[3],s+=t,e[i+s]=c[4],e[i+s+1]=c[5];const a=i/t;n[r++]=a,n[r++]=a+1,n[r++]=a+2}},us=[{offset:0,color:"white"},{offset:1,color:"black"}],ps=class c{constructor(...e){var t;this.uid=L("fillGradient"),this._tick=0,this.type="linear",this.colorStops=[];let i=function(c){var e,t;let i=null!=(e=c[0])?e:{};("number"==typeof i||c[1])&&(V("8.5.2","use options object instead"),i={type:"linear",start:{x:c[0],y:c[1]},end:{x:c[2],y:c[3]},textureSpace:c[4],textureSize:null!=(t=c[5])?t:gs.defaultLinearOptions.textureSize});return i}(e);const n="radial"===i.type?c.defaultRadialOptions:c.defaultLinearOptions;i=__spreadValues(__spreadValues({},n),j(i)),this._textureSize=i.textureSize,this._wrapMode=i.wrapMode,"radial"===i.type?(this.center=i.center,this.outerCenter=null!=(t=i.outerCenter)?t:this.center,this.innerRadius=i.innerRadius,this.outerRadius=i.outerRadius,this.scale=i.scale,this.rotation=i.rotation):(this.start=i.start,this.end=i.end),this.textureSpace=i.textureSpace,this.type=i.type,i.colorStops.forEach(c=>{this.addColorStop(c.offset,c.color)})}addColorStop(c,e){return this.colorStops.push({offset:c,color:Fc.shared.setValue(e).toHexa()}),this}buildLinearGradient(){if(this.texture)return;let{x:c,y:e}=this.start,{x:t,y:i}=this.end,n=t-c,r=i-e;const s=n<0||r<0;if("clamp-to-edge"===this._wrapMode){if(n<0){const e=c;c=t,t=e,n*=-1}if(r<0){const c=e;e=i,i=c,r*=-1}}const a=this.colorStops.length?this.colorStops:us,o=this._textureSize,{canvas:f,context:l}=bs(o,1),d=s?l.createLinearGradient(this._textureSize,0,0,0):l.createLinearGradient(0,0,this._textureSize,0);ms(d,a),l.fillStyle=d,l.fillRect(0,0,o,1),this.texture=new cc({source:new Be({resource:f,addressMode:this._wrapMode})});const h=Math.sqrt(n*n+r*r),u=Math.atan2(r,n),p=new w;p.scale(h/o,1),p.rotate(u),p.translate(c,e),"local"===this.textureSpace&&p.scale(o,o),this.transform=p}buildGradient(){this.texture||this._tick++,"linear"===this.type?this.buildLinearGradient():this.buildRadialGradient()}buildRadialGradient(){if(this.texture)return;const c=this.colorStops.length?this.colorStops:us,e=this._textureSize,{canvas:t,context:i}=bs(e,e),{x:n,y:r}=this.center,{x:s,y:a}=this.outerCenter,o=this.innerRadius,f=this.outerRadius,l=s-f,d=a-f,h=e/(2*f),u=(n-l)*h,p=(r-d)*h,g=i.createRadialGradient(u,p,o*h,(s-l)*h,(a-d)*h,f*h);ms(g,c),i.fillStyle=c[c.length-1].color,i.fillRect(0,0,e,e),i.fillStyle=g,i.translate(u,p),i.rotate(this.rotation),i.scale(1,this.scale),i.translate(-u,-p),i.fillRect(0,0,e,e),this.texture=new cc({source:new Be({resource:t,addressMode:this._wrapMode})});const m=new w;m.scale(1/h,1/h),m.translate(l,d),"local"===this.textureSpace&&m.scale(e,e),this.transform=m}destroy(){var c;null==(c=this.texture)||c.destroy(!0),this.texture=null,this.transform=null,this.colorStops=[],this.start=null,this.end=null,this.center=null,this.outerCenter=null}get styleKey(){return`fill-gradient-${this.uid}-${this._tick}`}};ps.defaultLinearOptions={start:{x:0,y:0},end:{x:0,y:1},colorStops:[],textureSpace:"local",type:"linear",textureSize:256,wrapMode:"clamp-to-edge"},ps.defaultRadialOptions={center:{x:.5,y:.5},innerRadius:0,outerRadius:.5,colorStops:[],scale:1,textureSpace:"local",type:"radial",textureSize:256,wrapMode:"clamp-to-edge"};let gs=ps;function ms(c,e){for(let t=0;t<e.length;t++){const i=e[t];c.addColorStop(i.offset,i.color)}}function bs(c,e){const t=Fe.get().createCanvas(c,e),i=t.getContext("2d");return{canvas:t,context:i}}const vs=new w,ys=new D;function _s(c,e,t,i){const n=e.matrix?c.copyFrom(e.matrix).invert():c.identity();if("local"===e.textureSpace){const c=t.getBounds(ys);e.width&&c.pad(e.width);const{x:i,y:r}=c,s=1/c.width,a=1/c.height,o=-i*s,f=-r*a,l=n.a,d=n.b,h=n.c,u=n.d;n.a*=s,n.b*=s,n.c*=a,n.d*=a,n.tx=o*l+f*h+n.tx,n.ty=o*d+f*u+n.ty}else n.translate(e.texture.frame.x,e.texture.frame.y),n.scale(1/e.texture.source.width,1/e.texture.source.height);const r=e.texture.source.style;return e.fill instanceof gs||"clamp-to-edge"!==r.addressMode||(r.addressMode="repeat",r.update()),i&&n.append(vs.copyFrom(i).invert()),n}const xs={};f.handleByMap(s.ShapeBuilder,xs),f.add(ds,ls,hs,es,ts,is);const Ss=new D,ws=new w;function Cs(c,e,t){const i=[],n=xs.rectangle,r=Ss;r.x=c.dx,r.y=c.dy,r.width=c.dw,r.height=c.dh;const s=c.transform;if(!n.build(r,i))return;const{vertices:a,uvs:o,indices:f}=t,l=f.length,d=a.length/2;s&&Jr(i,s),n.triangulate(i,a,2,d,f,l);const h=c.image,u=h.uvs;o.push(u.x0,u.y0,u.x1,u.y1,u.x3,u.y3,u.x2,u.y2);const p=Lc.get(cs);p.indexOffset=l,p.indexSize=f.length-l,p.attributeOffset=d,p.attributeSize=a.length/2-d,p.baseColor=c.style,p.alpha=c.alpha,p.texture=h,p.geometryData=t,e.push(p)}function As(c,e,t,i,n){const{vertices:r,uvs:s,indices:a}=n;c.shapePrimitives.forEach(({shape:c,transform:o,holes:f})=>{var l;const d=[],h=xs[c.type];if(!h.build(c,d))return;const u=a.length,p=r.length/2;let g="triangle-list";if(o&&Jr(d,o),t){const t=null==(l=c.closePath)||l,i=e;i.pixelLine?(!function(c,e,t,i){const n=ns;if(0===c.length)return;const r=c[0],s=c[1],a=c[c.length-2],o=c[c.length-1],f=e||Math.abs(r-a)<n&&Math.abs(s-o)<n,l=t,d=c.length/2,h=l.length/2;for(let u=0;u<d;u++)l.push(c[2*u]),l.push(c[2*u+1]);for(let u=0;u<d-1;u++)i.push(h+u,h+u+1);f&&i.push(h+d-1,h)}(d,t,r,a),g="line-list"):as(d,i,0,t,r,a)}else if(f){const c=[],e=d.slice();(function(c){const e=[];for(let t=0;t<c.length;t++){const i=c[t].shape,n=[];xs[i.type].build(i,n)&&e.push(n)}return e})(f).forEach(t=>{c.push(e.length/2),e.push(...t)}),os(e,c,r,2,p,a,u)}else h.triangulate(d,r,2,p,a,u);const m=s.length/2,b=e.texture;if(b!==cc.WHITE){const t=_s(ws,e,c,o);!function(c,e,t,i,n,r,s,a=null){let o=0;t*=e,n*=r;const f=a.a,l=a.b,d=a.c,h=a.d,u=a.tx,p=a.ty;for(;o<s;){const s=c[t],a=c[t+1];i[n]=f*s+d*a+u,i[n+1]=l*s+h*a+p,n+=r,t+=e,o++}}(r,2,p,s,m,2,r.length/2-p,t)}else!function(c,e,t,i){let n=0;for(e*=t;n<i;)c[e]=0,c[e+1]=0,e+=t,n++}(s,m,2,r.length/2-p);const v=Lc.get(cs);v.indexOffset=u,v.indexSize=a.length-u,v.attributeOffset=p,v.attributeSize=r.length/2-p,v.baseColor=e.color,v.alpha=e.alpha,v.texture=b,v.geometryData=n,v.topology=g,i.push(v)})}class Ts{constructor(){this.batches=[],this.geometryData={vertices:[],uvs:[],indices:[]}}reset(){this.batches&&this.batches.forEach(c=>{Lc.return(c)}),this.graphicsData&&Lc.return(this.graphicsData),this.isBatchable=!1,this.context=null,this.batches.length=0,this.geometryData.indices.length=0,this.geometryData.vertices.length=0,this.geometryData.uvs.length=0,this.graphicsData=null}destroy(){this.reset(),this.batches=null,this.geometryData=null}}class Ps{constructor(){this.instructions=new ue}init(c){const e=c.maxTextures;this.batcher?this.batcher._updateMaxTextures(e):this.batcher=new Kr({maxTextures:e}),this.instructions.reset()}get geometry(){return V("8.3.4","GraphicsContextRenderData#geometry is deprecated, please use batcher.geometry instead."),this.batcher.geometry}destroy(){this.batcher.destroy(),this.instructions.destroy(),this.batcher=null,this.instructions=null}}const Ms=class c{constructor(c){this._renderer=c,this._managedContexts=new Qr({renderer:c,type:"resource",name:"graphicsContext"})}init(e){var t;c.defaultOptions.bezierSmoothness=null!=(t=null==e?void 0:e.bezierSmoothness)?t:c.defaultOptions.bezierSmoothness}getContextRenderData(c){return c._gpuData[this._renderer.uid].graphicsData||this._initContextRenderData(c)}updateGpuContext(c){const e=!!c._gpuData[this._renderer.uid],t=c._gpuData[this._renderer.uid]||this._initContext(c);if(c.dirty||!e){e&&t.reset(),function(c,e){const{geometryData:t,batches:i}=e;i.length=0,t.indices.length=0,t.vertices.length=0,t.uvs.length=0;for(let n=0;n<c.instructions.length;n++){const e=c.instructions[n];if("texture"===e.action)Cs(e.data,i,t);else if("fill"===e.action||"stroke"===e.action){const c="stroke"===e.action,n=e.data.path.shapePath,r=e.data.style,s=e.data.hole;c&&s&&As(s.shapePath,r,!0,i,t),s&&(n.shapePrimitives[n.shapePrimitives.length-1].holes=s.shapePath.shapePrimitives),As(n,r,c,i,t)}}}(c,t);const i=c.batchMode;c.customShader||"no-batch"===i?t.isBatchable=!1:t.isBatchable="auto"!==i||t.geometryData.vertices.length<400,c.dirty=!1}return t}getGpuContext(c){return c._gpuData[this._renderer.uid]||this._initContext(c)}_initContextRenderData(c){const e=Lc.get(Ps,{maxTextures:this._renderer.limits.maxBatchableTextures}),t=c._gpuData[this._renderer.uid],{batches:i,geometryData:n}=t;t.graphicsData=e;const r=n.vertices.length,s=n.indices.length;for(let l=0;l<i.length;l++)i[l].applyTransform=!1;const a=e.batcher;a.ensureAttributeBuffer(r),a.ensureIndexBuffer(s),a.begin();for(let l=0;l<i.length;l++){const c=i[l];a.add(c)}a.finish(e.instructions);const o=a.geometry;o.indexBuffer.setDataWithSize(a.indexBuffer,a.indexSize,!0),o.buffers[0].setDataWithSize(a.attributeBuffer.float32View,a.attributeSize,!0);const f=a.batches;for(let l=0;l<f.length;l++){const c=f[l];c.bindGroup=jn(c.textures.textures,c.textures.count,this._renderer.limits.maxBatchableTextures)}return e}_initContext(c){const e=new Ts;return e.context=c,c._gpuData[this._renderer.uid]=e,this._managedContexts.add(c),e}destroy(){this._managedContexts.destroy(),this._renderer=null}};Ms.extension={type:[s.WebGLSystem,s.WebGPUSystem],name:"graphicsContext"},Ms.defaultOptions={bezierSmoothness:.5};let Es=Ms;const Rs=1.1920929e-7;function ks(c,e,t,i,n,r,s,a,o,f){let l=(1-Math.min(.99,Math.max(0,null!=f?f:Es.defaultOptions.bezierSmoothness)))/1;return l*=l,function(c,e,t,i,n,r,s,a,o,f){Fs(c,e,t,i,n,r,s,a,o,f,0),o.push(s,a)}(e,t,i,n,r,s,a,o,c,l),c}function Fs(c,e,t,i,n,r,s,a,o,f,l){if(l>8)return;const d=(c+t)/2,h=(e+i)/2,u=(t+n)/2,p=(i+r)/2,g=(n+s)/2,m=(r+a)/2,b=(d+u)/2,v=(h+p)/2,y=(u+g)/2,_=(p+m)/2,x=(b+y)/2,S=(v+_)/2;if(l>0){let l=s-c,d=a-e;const h=Math.abs((t-s)*d-(i-a)*l),u=Math.abs((n-s)*d-(r-a)*l);if(h>Rs&&u>Rs){if((h+u)*(h+u)<=f*(l*l+d*d))return void o.push(x,S)}else if(h>Rs){if(h*h<=f*(l*l+d*d))return void o.push(x,S)}else if(u>Rs){if(u*u<=f*(l*l+d*d))return void o.push(x,S)}else if(l=x-(c+s)/2,d=S-(e+a)/2,l*l+d*d<=f)return void o.push(x,S)}Fs(c,e,d,h,b,v,x,S,o,f,l+1),Fs(x,S,y,_,g,m,s,a,o,f,l+1)}function Is(c,e,t,i,n,r,s,a){let o=(1-Math.min(.99,Math.max(0,null!=a?a:Es.defaultOptions.bezierSmoothness)))/1;return o*=o,function(c,e,t,i,n,r,s,a){Bs(s,c,e,t,i,n,r,a,0),s.push(n,r)}(e,t,i,n,r,s,c,o),c}function Bs(c,e,t,i,n,r,s,a,o){if(o>8)return;const f=(e+i)/2,l=(t+n)/2,d=(i+r)/2,h=(n+s)/2,u=(f+d)/2,p=(l+h)/2;let g=r-e,m=s-t;const b=Math.abs((i-r)*m-(n-s)*g);if(b>1.1920929e-7){if(b*b<=a*(g*g+m*m))return void c.push(u,p)}else if(g=u-(e+r)/2,m=p-(t+s)/2,g*g+m*m<=a)return void c.push(u,p);Bs(c,e,t,f,l,u,p,a,o+1),Bs(c,u,p,d,h,r,s,a,o+1)}function Ds(c,e,t,i,n,r,s,a){let o=Math.abs(n-r);(!s&&n>r||s&&r>n)&&(o=2*Math.PI-o),a||(a=Math.max(6,Math.floor(6*Math.pow(i,1/3)*(o/Math.PI))));let f=o/(a=Math.max(a,3)),l=n;f*=s?-1:1;for(let d=0;d<a+1;d++){const n=e+Math.cos(l)*i,r=t+Math.sin(l)*i;c.push(n,r),l+=f}}const Os=2*Math.PI,Ls={centerX:0,centerY:0,ang1:0,ang2:0},zs=({x:c,y:e},t,i,n,r,s,a,o)=>{const f=n*(c*=t)-r*(e*=i),l=r*c+n*e;return o.x=f+s,o.y=l+a,o};function Gs(c,e){const t=-1.5707963267948966===e?-.551915024494:4/3*Math.tan(e/4),i=1.5707963267948966===e?.551915024494:t,n=Math.cos(c),r=Math.sin(c),s=Math.cos(c+e),a=Math.sin(c+e);return[{x:n-r*i,y:r+n*i},{x:s+a*i,y:a-s*i},{x:s,y:a}]}const Us=(c,e,t,i)=>{let n=c*t+e*i;return n>1&&(n=1),n<-1&&(n=-1),(c*i-e*t<0?-1:1)*Math.acos(n)};function Vs(c,e,t,i,n,r,s,a=0,o=0,f=0){if(0===r||0===s)return;const l=Math.sin(a*Os/360),d=Math.cos(a*Os/360),h=d*(e-i)/2+l*(t-n)/2,u=-l*(e-i)/2+d*(t-n)/2;if(0===h&&0===u)return;r=Math.abs(r),s=Math.abs(s);const p=Math.pow(h,2)/Math.pow(r,2)+Math.pow(u,2)/Math.pow(s,2);p>1&&(r*=Math.sqrt(p),s*=Math.sqrt(p)),((c,e,t,i,n,r,s,a,o,f,l,d,h)=>{const u=Math.pow(n,2),p=Math.pow(r,2),g=Math.pow(l,2),m=Math.pow(d,2);let b=u*p-u*m-p*g;b<0&&(b=0),b/=u*m+p*g,b=Math.sqrt(b)*(s===a?-1:1);const v=b*n/r*d,y=b*-r/n*l,_=f*v-o*y+(c+t)/2,x=o*v+f*y+(e+i)/2,S=(l-v)/n,w=(d-y)/r,C=(-l-v)/n,A=(-d-y)/r,T=Us(1,0,S,w);let P=Us(S,w,C,A);0===a&&P>0&&(P-=Os),1===a&&P<0&&(P+=Os),h.centerX=_,h.centerY=x,h.ang1=T,h.ang2=P})(e,t,i,n,r,s,o,f,l,d,h,u,Ls);let{ang1:g,ang2:m}=Ls;const{centerX:b,centerY:v}=Ls;let y=Math.abs(m)/(Os/4);Math.abs(1-y)<1e-7&&(y=1);const _=Math.max(Math.ceil(y),1);m/=_;let x=c[c.length-2],S=c[c.length-1];const w={x:0,y:0};for(let C=0;C<_;C++){const e=Gs(g,m),{x:t,y:i}=zs(e[0],r,s,d,l,b,v,w),{x:n,y:a}=zs(e[1],r,s,d,l,b,v,w),{x:o,y:f}=zs(e[2],r,s,d,l,b,v,w);ks(c,x,S,t,i,n,a,o,f),x=o,S=f,g+=m}}const Ns=new D;class Ws{constructor(c){this.shapePrimitives=[],this._currentPoly=null,this._bounds=new ic,this._graphicsPath2D=c,this.signed=c.checkForHoles}moveTo(c,e){return this.startPoly(c,e),this}lineTo(c,e){this._ensurePoly();const t=this._currentPoly.points,i=t[t.length-2],n=t[t.length-1];return i===c&&n===e||t.push(c,e),this}arc(c,e,t,i,n,r){this._ensurePoly(!1);return Ds(this._currentPoly.points,c,e,t,i,n,r),this}arcTo(c,e,t,i,n){this._ensurePoly();return function(c,e,t,i,n,r){const s=c[c.length-2],a=c[c.length-1]-t,o=s-e,f=n-t,l=i-e,d=Math.abs(a*l-o*f);if(d<1e-8||0===r)return void(c[c.length-2]===e&&c[c.length-1]===t||c.push(e,t));const h=a*a+o*o,u=f*f+l*l,p=a*f+o*l,g=r*Math.sqrt(h)/d,m=r*Math.sqrt(u)/d,b=g*p/h,v=m*p/u,y=g*l+m*o,_=g*f+m*a,x=o*(m+b),S=a*(m+b),w=l*(g+v),C=f*(g+v);Ds(c,y+e,_+t,r,Math.atan2(S-_,x-y),Math.atan2(C-_,w-y),o*f>l*a)}(this._currentPoly.points,c,e,t,i,n),this}arcToSvg(c,e,t,i,n,r,s){return Vs(this._currentPoly.points,this._currentPoly.lastX,this._currentPoly.lastY,r,s,c,e,t,i,n),this}bezierCurveTo(c,e,t,i,n,r,s){this._ensurePoly();const a=this._currentPoly;return ks(this._currentPoly.points,a.lastX,a.lastY,c,e,t,i,n,r,s),this}quadraticCurveTo(c,e,t,i,n){this._ensurePoly();const r=this._currentPoly;return Is(this._currentPoly.points,r.lastX,r.lastY,c,e,t,i,n),this}closePath(){return this.endPoly(!0),this}addPath(c,e){this.endPoly(),e&&!e.isIdentity()&&(c=c.clone(!0)).transform(e);const t=this.shapePrimitives,i=t.length;for(let n=0;n<c.instructions.length;n++){const e=c.instructions[n];this[e.action](...e.data)}if(c.checkForHoles&&t.length-i>1){let c=null;for(let e=i;e<t.length;e++){const i=t[e];if("polygon"===i.shape.type){const n=i.shape,r=null==c?void 0:c.shape;r&&r.containsPolygon(n)?(c.holes||(c.holes=[]),c.holes.push(i),t.copyWithin(e,e+1),t.length--,e--):c=i}}}return this}finish(c=!1){this.endPoly(c)}rect(c,e,t,i,n){return this.drawShape(new D(c,e,t,i),n),this}circle(c,e,t,i){return this.drawShape(new zn(c,e,t),i),this}poly(c,e,t){const i=new Vn(c);return i.closePath=e,this.drawShape(i,t),this}regularPoly(c,e,t,i,n=0,r){i=Math.max(0|i,3);const s=-1*Math.PI/2+n,a=2*Math.PI/i,o=[];for(let f=0;f<i;f++){const i=s-f*a;o.push(c+t*Math.cos(i),e+t*Math.sin(i))}return this.poly(o,!0,r),this}roundPoly(c,e,t,i,n,r=0,s){if(i=Math.max(0|i,3),n<=0)return this.regularPoly(c,e,t,i,r);const a=t*Math.sin(Math.PI/i)-.001;n=Math.min(n,a);const o=-1*Math.PI/2+r,f=2*Math.PI/i,l=(i-2)*Math.PI/i/2;for(let d=0;d<i;d++){const i=d*f+o,r=c+t*Math.cos(i),a=e+t*Math.sin(i),h=i+Math.PI+l,u=i-Math.PI-l,p=r+n*Math.cos(h),g=a+n*Math.sin(h),m=r+n*Math.cos(u),b=a+n*Math.sin(u);0===d?this.moveTo(p,g):this.lineTo(p,g),this.quadraticCurveTo(r,a,m,b,s)}return this.closePath()}roundShape(c,e,t=!1,i){return c.length<3?this:(t?function(c,e,t,i){var n;const r=(c,e)=>Math.sqrt(__pow(c.x-e.x,2)+__pow(c.y-e.y,2)),s=(c,e,t)=>({x:c.x+(e.x-c.x)*t,y:c.y+(e.y-c.y)*t}),a=e.length;for(let o=0;o<a;o++){const f=e[(o+1)%a],l=null!=(n=f.radius)?n:t;if(l<=0){0===o?c.moveTo(f.x,f.y):c.lineTo(f.x,f.y);continue}const d=e[o],h=e[(o+2)%a],u=r(d,f);let p;p=u<1e-4?f:s(f,d,Math.min(u/2,l)/u);const g=r(h,f);let m;m=g<1e-4?f:s(f,h,Math.min(g/2,l)/g),0===o?c.moveTo(p.x,p.y):c.lineTo(p.x,p.y),c.quadraticCurveTo(f.x,f.y,m.x,m.y,i)}}(this,c,e,i):function(c,e,t){var i;const n=(c,e)=>{const t=e.x-c.x,i=e.y-c.y,n=Math.sqrt(t*t+i*i);return{len:n,nx:t/n,ny:i/n}},r=(e,t)=>{0===e?c.moveTo(t.x,t.y):c.lineTo(t.x,t.y)};let s=e[e.length-1];for(let a=0;a<e.length;a++){const o=e[a%e.length],f=null!=(i=o.radius)?i:t;if(f<=0){r(a,o),s=o;continue}const l=e[(a+1)%e.length],d=n(o,s),h=n(o,l);if(d.len<1e-4||h.len<1e-4){r(a,o),s=o;continue}let u=Math.asin(d.nx*h.ny-d.ny*h.nx),p=1,g=!1;d.nx*h.nx-d.ny*-h.ny<0?u<0?u=Math.PI+u:(u=Math.PI-u,p=-1,g=!0):u>0&&(p=-1,g=!0);const m=u/2;let b,v=Math.abs(Math.cos(m)*f/Math.sin(m));v>Math.min(d.len/2,h.len/2)?(v=Math.min(d.len/2,h.len/2),b=Math.abs(v*Math.sin(m)/Math.cos(m))):b=f;const y=o.x+h.nx*v+-h.ny*b*p,_=o.y+h.ny*v+h.nx*b*p,x=Math.atan2(d.ny,d.nx)+Math.PI/2*p,S=Math.atan2(h.ny,h.nx)-Math.PI/2*p;0===a&&c.moveTo(y+Math.cos(x)*b,_+Math.sin(x)*b),c.arc(y,_,b,x,S,g),s=o}}(this,c,e),this.closePath())}filletRect(c,e,t,i,n){if(0===n)return this.rect(c,e,t,i);const r=Math.min(t,i)/2,s=Math.min(r,Math.max(-r,n)),a=c+t,o=e+i,f=s<0?-s:0,l=Math.abs(s);return this.moveTo(c,e+l).arcTo(c+f,e+f,c+l,e,l).lineTo(a-l,e).arcTo(a-f,e+f,a,e+l,l).lineTo(a,o-l).arcTo(a-f,o-f,c+t-l,o,l).lineTo(c+l,o).arcTo(c+f,o-f,c,o-l,l).closePath()}chamferRect(c,e,t,i,n,r){if(n<=0)return this.rect(c,e,t,i);const s=Math.min(n,Math.min(t,i)/2),a=c+t,o=e+i,f=[c+s,e,a-s,e,a,e+s,a,o-s,a-s,o,c+s,o,c,o-s,c,e+s];for(let l=f.length-1;l>=2;l-=2)f[l]===f[l-2]&&f[l-1]===f[l-3]&&f.splice(l-1,2);return this.poly(f,!0,r)}ellipse(c,e,t,i,n){return this.drawShape(new Gn(c,e,t,i),n),this}roundRect(c,e,t,i,n,r){return this.drawShape(new Wn(c,e,t,i,n),r),this}drawShape(c,e){return this.endPoly(),this.shapePrimitives.push({shape:c,transform:e}),this}startPoly(c,e){let t=this._currentPoly;return t&&this.endPoly(),t=new Vn,t.points.push(c,e),this._currentPoly=t,this}endPoly(c=!1){const e=this._currentPoly;return e&&e.points.length>2&&(e.closePath=c,this.shapePrimitives.push({shape:e})),this._currentPoly=null,this}_ensurePoly(c=!0){if(!this._currentPoly&&(this._currentPoly=new Vn,c)){const c=this.shapePrimitives[this.shapePrimitives.length-1];if(c){let e=c.shape.x,t=c.shape.y;if(c.transform&&!c.transform.isIdentity()){const i=c.transform,n=e;e=i.a*e+i.c*t+i.tx,t=i.b*n+i.d*t+i.ty}this._currentPoly.points.push(e,t)}else this._currentPoly.points.push(0,0)}}buildPath(){const c=this._graphicsPath2D;this.shapePrimitives.length=0,this._currentPoly=null;for(let e=0;e<c.instructions.length;e++){const t=c.instructions[e];this[t.action](...t.data)}this.finish()}get bounds(){const c=this._bounds;c.clear();const e=this.shapePrimitives;for(let t=0;t<e.length;t++){const i=e[t],n=i.shape.getBounds(Ns);i.transform?c.addRect(n,i.transform):c.addRect(n)}return c}}class Hs{constructor(c,e=!1){var t;this.instructions=[],this.uid=L("graphicsPath"),this._dirty=!0,this.checkForHoles=e,"string"==typeof c?function(c,e){const t=Ln(c),i=[];let n=null,r=0,s=0;for(let a=0;a<t.length;a++){const c=t[a],o=c[0],f=c;switch(o){case"M":r=f[1],s=f[2],e.moveTo(r,s);break;case"m":r+=f[1],s+=f[2],e.moveTo(r,s);break;case"H":r=f[1],e.lineTo(r,s);break;case"h":r+=f[1],e.lineTo(r,s);break;case"V":s=f[1],e.lineTo(r,s);break;case"v":s+=f[1],e.lineTo(r,s);break;case"L":r=f[1],s=f[2],e.lineTo(r,s);break;case"l":r+=f[1],s+=f[2],e.lineTo(r,s);break;case"C":r=f[5],s=f[6],e.bezierCurveTo(f[1],f[2],f[3],f[4],r,s);break;case"c":e.bezierCurveTo(r+f[1],s+f[2],r+f[3],s+f[4],r+f[5],s+f[6]),r+=f[5],s+=f[6];break;case"S":r=f[3],s=f[4],e.bezierCurveToShort(f[1],f[2],r,s);break;case"s":e.bezierCurveToShort(r+f[1],s+f[2],r+f[3],s+f[4]),r+=f[3],s+=f[4];break;case"Q":r=f[3],s=f[4],e.quadraticCurveTo(f[1],f[2],r,s);break;case"q":e.quadraticCurveTo(r+f[1],s+f[2],r+f[3],s+f[4]),r+=f[3],s+=f[4];break;case"T":r=f[1],s=f[2],e.quadraticCurveToShort(r,s);break;case"t":r+=f[1],s+=f[2],e.quadraticCurveToShort(r,s);break;case"A":r=f[6],s=f[7],e.arcToSvg(f[1],f[2],f[3],f[4],f[5],r,s);break;case"a":r+=f[6],s+=f[7],e.arcToSvg(f[1],f[2],f[3],f[4],f[5],r,s);break;case"Z":case"z":e.closePath(),i.length>0&&(n=i.pop(),n?(r=n.startX,s=n.startY):(r=0,s=0)),n=null;break;default:Bc(`Unknown SVG path command: ${o}`)}"Z"!==o&&"z"!==o&&null===n&&(n={startX:r,startY:s},i.push(n))}}(c,this):this.instructions=null!=(t=null==c?void 0:c.slice())?t:[]}get shapePath(){return this._shapePath||(this._shapePath=new Ws(this)),this._dirty&&(this._dirty=!1,this._shapePath.buildPath()),this._shapePath}addPath(c,e){return c=c.clone(),this.instructions.push({action:"addPath",data:[c,e]}),this._dirty=!0,this}arc(...c){return this.instructions.push({action:"arc",data:c}),this._dirty=!0,this}arcTo(...c){return this.instructions.push({action:"arcTo",data:c}),this._dirty=!0,this}arcToSvg(...c){return this.instructions.push({action:"arcToSvg",data:c}),this._dirty=!0,this}bezierCurveTo(...c){return this.instructions.push({action:"bezierCurveTo",data:c}),this._dirty=!0,this}bezierCurveToShort(c,e,t,i,n){const r=this.instructions[this.instructions.length-1],s=this.getLastPoint(x.shared);let a=0,o=0;if(r&&"bezierCurveTo"===r.action){a=r.data[2],o=r.data[3];const c=s.x,e=s.y;a=c+(c-a),o=e+(e-o)}else a=s.x,o=s.y;return this.instructions.push({action:"bezierCurveTo",data:[a,o,c,e,t,i,n]}),this._dirty=!0,this}closePath(){return this.instructions.push({action:"closePath",data:[]}),this._dirty=!0,this}ellipse(...c){return this.instructions.push({action:"ellipse",data:c}),this._dirty=!0,this}lineTo(...c){return this.instructions.push({action:"lineTo",data:c}),this._dirty=!0,this}moveTo(...c){return this.instructions.push({action:"moveTo",data:c}),this}quadraticCurveTo(...c){return this.instructions.push({action:"quadraticCurveTo",data:c}),this._dirty=!0,this}quadraticCurveToShort(c,e,t){const i=this.instructions[this.instructions.length-1],n=this.getLastPoint(x.shared);let r=0,s=0;if(i&&"quadraticCurveTo"===i.action){r=i.data[0],s=i.data[1];const c=n.x,e=n.y;r=c+(c-r),s=e+(e-s)}else r=n.x,s=n.y;return this.instructions.push({action:"quadraticCurveTo",data:[r,s,c,e,t]}),this._dirty=!0,this}rect(c,e,t,i,n){return this.instructions.push({action:"rect",data:[c,e,t,i,n]}),this._dirty=!0,this}circle(c,e,t,i){return this.instructions.push({action:"circle",data:[c,e,t,i]}),this._dirty=!0,this}roundRect(...c){return this.instructions.push({action:"roundRect",data:c}),this._dirty=!0,this}poly(...c){return this.instructions.push({action:"poly",data:c}),this._dirty=!0,this}regularPoly(...c){return this.instructions.push({action:"regularPoly",data:c}),this._dirty=!0,this}roundPoly(...c){return this.instructions.push({action:"roundPoly",data:c}),this._dirty=!0,this}roundShape(...c){return this.instructions.push({action:"roundShape",data:c}),this._dirty=!0,this}filletRect(...c){return this.instructions.push({action:"filletRect",data:c}),this._dirty=!0,this}chamferRect(...c){return this.instructions.push({action:"chamferRect",data:c}),this._dirty=!0,this}star(c,e,t,i,n,r,s){n||(n=i/2);const a=-1*Math.PI/2+r,o=2*t,f=2*Math.PI/o,l=[];for(let d=0;d<o;d++){const t=d%2?n:i,r=d*f+a;l.push(c+t*Math.cos(r),e+t*Math.sin(r))}return this.poly(l,!0,s),this}clone(c=!1){const e=new Hs;if(e.checkForHoles=this.checkForHoles,c)for(let t=0;t<this.instructions.length;t++){const c=this.instructions[t];e.instructions.push({action:c.action,data:c.data.slice()})}else e.instructions=this.instructions.slice();return e}clear(){return this.instructions.length=0,this._dirty=!0,this}transform(c){if(c.isIdentity())return this;const e=c.a,t=c.b,i=c.c,n=c.d,r=c.tx,s=c.ty;let a=0,o=0,f=0,l=0,d=0,h=0,u=0,p=0;for(let g=0;g<this.instructions.length;g++){const m=this.instructions[g],b=m.data;switch(m.action){case"moveTo":case"lineTo":a=b[0],o=b[1],b[0]=e*a+i*o+r,b[1]=t*a+n*o+s;break;case"bezierCurveTo":f=b[0],l=b[1],d=b[2],h=b[3],a=b[4],o=b[5],b[0]=e*f+i*l+r,b[1]=t*f+n*l+s,b[2]=e*d+i*h+r,b[3]=t*d+n*h+s,b[4]=e*a+i*o+r,b[5]=t*a+n*o+s;break;case"quadraticCurveTo":f=b[0],l=b[1],a=b[2],o=b[3],b[0]=e*f+i*l+r,b[1]=t*f+n*l+s,b[2]=e*a+i*o+r,b[3]=t*a+n*o+s;break;case"arcToSvg":a=b[5],o=b[6],u=b[0],p=b[1],b[0]=e*u+i*p,b[1]=t*u+n*p,b[5]=e*a+i*o+r,b[6]=t*a+n*o+s;break;case"circle":b[4]=js(b[3],c);break;case"rect":b[4]=js(b[4],c);break;case"ellipse":b[8]=js(b[8],c);break;case"roundRect":b[5]=js(b[5],c);break;case"addPath":b[0].transform(c);break;case"poly":b[2]=js(b[2],c);break;default:Bc("unknown transform action",m.action)}}return this._dirty=!0,this}get bounds(){return this.shapePath.bounds}getLastPoint(c){let e=this.instructions.length-1,t=this.instructions[e];if(!t)return c.x=0,c.y=0,c;for(;"closePath"===t.action;){if(e--,e<0)return c.x=0,c.y=0,c;t=this.instructions[e]}switch(t.action){case"moveTo":case"lineTo":c.x=t.data[0],c.y=t.data[1];break;case"quadraticCurveTo":c.x=t.data[2],c.y=t.data[3];break;case"bezierCurveTo":c.x=t.data[4],c.y=t.data[5];break;case"arc":case"arcToSvg":c.x=t.data[5],c.y=t.data[6];break;case"addPath":t.data[0].getLastPoint(c)}return c}}function js(c,e){return c?c.prepend(e):e.clone()}function Ys(c,e,t){const i=c.getAttribute(e);return i?Number(i):t}function Xs(c){const e=Ys(c,"x1",0),t=Ys(c,"y1",0),i=Ys(c,"x2",1),n=Ys(c,"y2",0),r=c.getAttribute("gradientUnits")||"objectBoundingBox",s=new gs(e,t,i,n,"objectBoundingBox"===r?"local":"global");for(let a=0;a<c.children.length;a++){const e=c.children[a],t=Ys(e,"offset",0),i=Fc.shared.setValue(e.getAttribute("stop-color")).toNumber();s.addColorStop(t,i)}return s}function Zs(c){return Bc("[SVG Parser] Radial gradients are not yet supported"),new gs(0,0,1,0)}function qs(c){const e=c.match(/url\s*\(\s*['"]?\s*#([^'"\s)]+)\s*['"]?\s*\)/i);return e?e[1]:""}const Ks={fill:{type:"paint",default:0},"fill-opacity":{type:"number",default:1},stroke:{type:"paint",default:0},"stroke-width":{type:"number",default:1},"stroke-opacity":{type:"number",default:1},"stroke-linecap":{type:"string",default:"butt"},"stroke-linejoin":{type:"string",default:"miter"},"stroke-miterlimit":{type:"number",default:10},"stroke-dasharray":{type:"string",default:"none"},"stroke-dashoffset":{type:"number",default:0},opacity:{type:"number",default:1}};function Qs(c,e){const t=c.getAttribute("style"),i={},n={},r={strokeStyle:i,fillStyle:n,useFill:!1,useStroke:!1};for(const s in Ks){const t=c.getAttribute(s);t&&Js(e,r,s,t.trim())}if(t){const c=t.split(";");for(let t=0;t<c.length;t++){const i=c[t].trim(),[n,s]=i.split(":");Ks[n]&&Js(e,r,n,s.trim())}}return{strokeStyle:r.useStroke?i:null,fillStyle:r.useFill?n:null,useFill:r.useFill,useStroke:r.useStroke}}function Js(c,e,t,i){switch(t){case"stroke":if("none"!==i){if(i.startsWith("url(")){const t=qs(i);e.strokeStyle.fill=c.defs[t]}else e.strokeStyle.color=Fc.shared.setValue(i).toNumber();e.useStroke=!0}break;case"stroke-width":e.strokeStyle.width=Number(i);break;case"fill":if("none"!==i){if(i.startsWith("url(")){const t=qs(i);e.fillStyle.fill=c.defs[t]}else e.fillStyle.color=Fc.shared.setValue(i).toNumber();e.useFill=!0}break;case"fill-opacity":e.fillStyle.alpha=Number(i);break;case"stroke-opacity":e.strokeStyle.alpha=Number(i);break;case"opacity":e.fillStyle.alpha=Number(i),e.strokeStyle.alpha=Number(i)}}function $s(c){const e=c.match(/[-+]?[0-9]*\.?[0-9]+/g);if(!e||e.length<4)return 0;const t=e.map(Number),i=[],n=[];for(let o=0;o<t.length;o+=2)o+1<t.length&&(i.push(t[o]),n.push(t[o+1]));if(0===i.length||0===n.length)return 0;const r=Math.min(...i),s=Math.max(...i),a=Math.min(...n);return(s-r)*(Math.max(...n)-a)}function ca(c,e){const t=new Hs(c,!1);for(const i of t.instructions)e.instructions.push(i)}function ea(c,e){if("string"==typeof c){const e=document.createElement("div");e.innerHTML=c.trim(),c=e.querySelector("svg")}const t={context:e,defs:{},path:new Hs};!function(c,e){const t=c.querySelectorAll("defs");for(let i=0;i<t.length;i++){const c=t[i];for(let t=0;t<c.children.length;t++){const i=c.children[t];switch(i.nodeName.toLowerCase()){case"lineargradient":e.defs[i.id]=Xs(i);break;case"radialgradient":e.defs[i.id]=Zs()}}}}(c,t);const i=c.children,{fillStyle:n,strokeStyle:r}=Qs(c,t);for(let s=0;s<i.length;s++){const c=i[s];"defs"!==c.nodeName.toLowerCase()&&ta(c,t,n,r)}return e}function ta(c,e,t,i){const n=c.children,{fillStyle:r,strokeStyle:s}=Qs(c,e);r&&t?t=__spreadValues(__spreadValues({},t),r):r&&(t=r),s&&i?i=__spreadValues(__spreadValues({},i),s):s&&(i=s);const a=!t&&!i;let o,f,l,d,h,u,p,g,m,b,v,y,_,x,S,w,C;switch(a&&(t={color:0}),c.nodeName.toLowerCase()){case"path":{x=c.getAttribute("d");const n=c.getAttribute("fill-rule"),r=x.split(/(?=[Mm])/).filter(c=>c.trim().length>0),s="evenodd"===n,a=r.length>1;if(s&&a){const c=r.map(c=>({path:c,area:$s(c)}));c.sort((c,e)=>e.area-c.area);const n=r.length>3||!function(c){if(c.length<=2)return!0;const e=c.map(c=>c.area).sort((c,e)=>e-c),[t,i]=e,n=e[e.length-1];return!(t/i>3&&i/n<2)}(c);if(n)for(let r=0;r<c.length;r++){const n=c[r],s=0===r;e.context.beginPath();const a=new Hs(void 0,!0);ca(n.path,a),e.context.path(a),s?(t&&e.context.fill(t),i&&e.context.stroke(i)):e.context.cut()}else for(let r=0;r<c.length;r++){const n=c[r],s=r%2==1;e.context.beginPath();const a=new Hs(void 0,!0);ca(n.path,a),e.context.path(a),s?e.context.cut():(t&&e.context.fill(t),i&&e.context.stroke(i))}}else{S=new Hs(x,!n||"evenodd"===n),e.context.path(S),t&&e.context.fill(t),i&&e.context.stroke(i)}break}case"circle":p=Ys(c,"cx",0),g=Ys(c,"cy",0),m=Ys(c,"r",0),e.context.ellipse(p,g,m,m),t&&e.context.fill(t),i&&e.context.stroke(i);break;case"rect":o=Ys(c,"x",0),f=Ys(c,"y",0),w=Ys(c,"width",0),C=Ys(c,"height",0),b=Ys(c,"rx",0),v=Ys(c,"ry",0),b||v?e.context.roundRect(o,f,w,C,b||v):e.context.rect(o,f,w,C),t&&e.context.fill(t),i&&e.context.stroke(i);break;case"ellipse":p=Ys(c,"cx",0),g=Ys(c,"cy",0),b=Ys(c,"rx",0),v=Ys(c,"ry",0),e.context.beginPath(),e.context.ellipse(p,g,b,v),t&&e.context.fill(t),i&&e.context.stroke(i);break;case"line":l=Ys(c,"x1",0),d=Ys(c,"y1",0),h=Ys(c,"x2",0),u=Ys(c,"y2",0),e.context.beginPath(),e.context.moveTo(l,d),e.context.lineTo(h,u),i&&e.context.stroke(i);break;case"polygon":_=c.getAttribute("points"),y=_.match(/-?\d+/g).map(c=>parseInt(c,10)),e.context.poly(y,!0),t&&e.context.fill(t),i&&e.context.stroke(i);break;case"polyline":_=c.getAttribute("points"),y=_.match(/-?\d+/g).map(c=>parseInt(c,10)),e.context.poly(y,!1),i&&e.context.stroke(i);break;case"g":case"svg":break;default:Bc(`[SVG parser] <${c.nodeName}> elements unsupported`)}a&&(t=null);for(let A=0;A<n.length;A++)ta(n[A],e,t,i)}const ia={repeat:{addressModeU:"repeat",addressModeV:"repeat"},"repeat-x":{addressModeU:"repeat",addressModeV:"clamp-to-edge"},"repeat-y":{addressModeU:"clamp-to-edge",addressModeV:"repeat"},"no-repeat":{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}};class na{constructor(c,e){this.uid=L("fillPattern"),this._tick=0,this.transform=new w,this.texture=c,this.transform.scale(1/c.frame.width,1/c.frame.height),e&&(c.source.style.addressModeU=ia[e].addressModeU,c.source.style.addressModeV=ia[e].addressModeV)}setTransform(c){const e=this.texture;this.transform.copyFrom(c),this.transform.invert(),this.transform.scale(1/e.frame.width,1/e.frame.height),this._tick++}get texture(){return this._texture}set texture(c){this._texture!==c&&(this._texture=c,this._tick++)}get styleKey(){return`fill-pattern-${this.uid}-${this._tick}`}destroy(){this.texture.destroy(!0),this.texture=null}}function ra(c){return c instanceof na}function sa(c){return c instanceof gs}function aa(c,e,t){return c.fill=e,c.color=16777215,c.texture=e.texture,c.matrix=e.transform,__spreadValues(__spreadValues({},t),c)}function oa(c,e,t){return e.buildGradient(),c.fill=e,c.color=16777215,c.texture=e.texture,c.matrix=e.transform,c.textureSpace=e.textureSpace,__spreadValues(__spreadValues({},t),c)}function fa(c,e){if(null==c)return null;const t={},i=c;return function(c){return Fc.isColorLike(c)}(c)?function(c,e,t){const i=Fc.shared.setValue(null!=e?e:0);return c.color=i.toNumber(),c.alpha=1===i.alpha?t.alpha:i.alpha,c.texture=cc.WHITE,__spreadValues(__spreadValues({},t),c)}(t,c,e):function(c){return c instanceof cc}(c)?function(c,e,t){return c.texture=e,__spreadValues(__spreadValues({},t),c)}(t,c,e):ra(c)?aa(t,c,e):sa(c)?oa(t,c,e):i.fill&&ra(i.fill)?aa(i,i.fill,e):i.fill&&sa(i.fill)?oa(i,i.fill,e):function(c,e){const t=__spreadValues(__spreadValues({},e),c),i=Fc.shared.setValue(t.color);return t.alpha*=i.alpha,t.color=i.toNumber(),t}(i,e)}function la(c,e){const t=e,{width:i,alignment:n,miterLimit:r,cap:s,join:a,pixelLine:o}=t,f=fa(c,__objRest(t,["width","alignment","miterLimit","cap","join","pixelLine"]));return f?__spreadValues({width:i,alignment:n,miterLimit:r,cap:s,join:a,pixelLine:o},f):null}const da=new x,ha=new w,ua=class c extends b{constructor(){super(...arguments),this._gpuData=Object.create(null),this.autoGarbageCollect=!0,this._gcLastUsed=-1,this.uid=L("graphicsContext"),this.dirty=!0,this.batchMode="auto",this.instructions=[],this.destroyed=!1,this._activePath=new Hs,this._transform=new w,this._fillStyle=__spreadValues({},c.defaultFillStyle),this._strokeStyle=__spreadValues({},c.defaultStrokeStyle),this._stateStack=[],this._tick=0,this._bounds=new ic,this._boundsDirty=!0}clone(){const e=new c;return e.batchMode=this.batchMode,e.instructions=this.instructions.slice(),e._activePath=this._activePath.clone(),e._transform=this._transform.clone(),e._fillStyle=__spreadValues({},this._fillStyle),e._strokeStyle=__spreadValues({},this._strokeStyle),e._stateStack=this._stateStack.slice(),e._bounds=this._bounds.clone(),e._boundsDirty=!0,e}get fillStyle(){return this._fillStyle}set fillStyle(e){this._fillStyle=fa(e,c.defaultFillStyle)}get strokeStyle(){return this._strokeStyle}set strokeStyle(e){this._strokeStyle=la(e,c.defaultStrokeStyle)}setFillStyle(e){return this._fillStyle=fa(e,c.defaultFillStyle),this}setStrokeStyle(e){return this._strokeStyle=fa(e,c.defaultStrokeStyle),this}texture(c,e,t,i,n,r){return this.instructions.push({action:"texture",data:{image:c,dx:t||0,dy:i||0,dw:n||c.frame.width,dh:r||c.frame.height,transform:this._transform.clone(),alpha:this._fillStyle.alpha,style:e||0===e?Fc.shared.setValue(e).toNumber():16777215}}),this.onUpdate(),this}beginPath(){return this._activePath=new Hs,this}fill(e,t){let i;const n=this.instructions[this.instructions.length-1];return i=0===this._tick&&"stroke"===(null==n?void 0:n.action)?n.data.path:this._activePath.clone(),i?(null!=e&&(void 0!==t&&"number"==typeof e&&(V(G,"GraphicsContext.fill(color, alpha) is deprecated, use GraphicsContext.fill({ color, alpha }) instead"),e={color:e,alpha:t}),this._fillStyle=fa(e,c.defaultFillStyle)),this.instructions.push({action:"fill",data:{style:this.fillStyle,path:i}}),this.onUpdate(),this._initNextPathLocation(),this._tick=0,this):this}_initNextPathLocation(){const{x:c,y:e}=this._activePath.getLastPoint(x.shared);this._activePath.clear(),this._activePath.moveTo(c,e)}stroke(e){let t;const i=this.instructions[this.instructions.length-1];return t=0===this._tick&&"fill"===(null==i?void 0:i.action)?i.data.path:this._activePath.clone(),t?(null!=e&&(this._strokeStyle=la(e,c.defaultStrokeStyle)),this.instructions.push({action:"stroke",data:{style:this.strokeStyle,path:t}}),this.onUpdate(),this._initNextPathLocation(),this._tick=0,this):this}cut(){for(let c=0;c<2;c++){const e=this.instructions[this.instructions.length-1-c],t=this._activePath.clone();if(e&&("stroke"===e.action||"fill"===e.action)){if(!e.data.hole){e.data.hole=t;break}e.data.hole.addPath(t)}}return this._initNextPathLocation(),this}arc(c,e,t,i,n,r){this._tick++;const s=this._transform;return this._activePath.arc(s.a*c+s.c*e+s.tx,s.b*c+s.d*e+s.ty,t,i,n,r),this}arcTo(c,e,t,i,n){this._tick++;const r=this._transform;return this._activePath.arcTo(r.a*c+r.c*e+r.tx,r.b*c+r.d*e+r.ty,r.a*t+r.c*i+r.tx,r.b*t+r.d*i+r.ty,n),this}arcToSvg(c,e,t,i,n,r,s){this._tick++;const a=this._transform;return this._activePath.arcToSvg(c,e,t,i,n,a.a*r+a.c*s+a.tx,a.b*r+a.d*s+a.ty),this}bezierCurveTo(c,e,t,i,n,r,s){this._tick++;const a=this._transform;return this._activePath.bezierCurveTo(a.a*c+a.c*e+a.tx,a.b*c+a.d*e+a.ty,a.a*t+a.c*i+a.tx,a.b*t+a.d*i+a.ty,a.a*n+a.c*r+a.tx,a.b*n+a.d*r+a.ty,s),this}closePath(){var c;return this._tick++,null==(c=this._activePath)||c.closePath(),this}ellipse(c,e,t,i){return this._tick++,this._activePath.ellipse(c,e,t,i,this._transform.clone()),this}circle(c,e,t){return this._tick++,this._activePath.circle(c,e,t,this._transform.clone()),this}path(c){return this._tick++,this._activePath.addPath(c,this._transform.clone()),this}lineTo(c,e){this._tick++;const t=this._transform;return this._activePath.lineTo(t.a*c+t.c*e+t.tx,t.b*c+t.d*e+t.ty),this}moveTo(c,e){this._tick++;const t=this._transform,i=this._activePath.instructions,n=t.a*c+t.c*e+t.tx,r=t.b*c+t.d*e+t.ty;return 1===i.length&&"moveTo"===i[0].action?(i[0].data[0]=n,i[0].data[1]=r,this):(this._activePath.moveTo(n,r),this)}quadraticCurveTo(c,e,t,i,n){this._tick++;const r=this._transform;return this._activePath.quadraticCurveTo(r.a*c+r.c*e+r.tx,r.b*c+r.d*e+r.ty,r.a*t+r.c*i+r.tx,r.b*t+r.d*i+r.ty,n),this}rect(c,e,t,i){return this._tick++,this._activePath.rect(c,e,t,i,this._transform.clone()),this}roundRect(c,e,t,i,n){return this._tick++,this._activePath.roundRect(c,e,t,i,n,this._transform.clone()),this}poly(c,e){return this._tick++,this._activePath.poly(c,e,this._transform.clone()),this}regularPoly(c,e,t,i,n=0,r){return this._tick++,this._activePath.regularPoly(c,e,t,i,n,r),this}roundPoly(c,e,t,i,n,r){return this._tick++,this._activePath.roundPoly(c,e,t,i,n,r),this}roundShape(c,e,t,i){return this._tick++,this._activePath.roundShape(c,e,t,i),this}filletRect(c,e,t,i,n){return this._tick++,this._activePath.filletRect(c,e,t,i,n),this}chamferRect(c,e,t,i,n,r){return this._tick++,this._activePath.chamferRect(c,e,t,i,n,r),this}star(c,e,t,i,n=0,r=0){return this._tick++,this._activePath.star(c,e,t,i,n,r,this._transform.clone()),this}svg(c){return this._tick++,ea(c,this),this}restore(){const c=this._stateStack.pop();return c&&(this._transform=c.transform,this._fillStyle=c.fillStyle,this._strokeStyle=c.strokeStyle),this}save(){return this._stateStack.push({transform:this._transform.clone(),fillStyle:__spreadValues({},this._fillStyle),strokeStyle:__spreadValues({},this._strokeStyle)}),this}getTransform(){return this._transform}resetTransform(){return this._transform.identity(),this}rotate(c){return this._transform.rotate(c),this}scale(c,e=c){return this._transform.scale(c,e),this}setTransform(c,e,t,i,n,r){return c instanceof w?(this._transform.set(c.a,c.b,c.c,c.d,c.tx,c.ty),this):(this._transform.set(c,e,t,i,n,r),this)}transform(c,e,t,i,n,r){return c instanceof w?(this._transform.append(c),this):(ha.set(c,e,t,i,n,r),this._transform.append(ha),this)}translate(c,e=c){return this._transform.translate(c,e),this}clear(){return this._activePath.clear(),this.instructions.length=0,this.resetTransform(),this.onUpdate(),this}onUpdate(){this._boundsDirty=!0,this.dirty||(this.emit("update",this,16),this.dirty=!0)}get bounds(){if(!this._boundsDirty)return this._bounds;this._boundsDirty=!1;const c=this._bounds;c.clear();for(let e=0;e<this.instructions.length;e++){const t=this.instructions[e],i=t.action;if("fill"===i){const e=t.data;c.addBounds(e.path.bounds)}else if("texture"===i){const e=t.data;c.addFrame(e.dx,e.dy,e.dx+e.dw,e.dy+e.dh,e.transform)}if("stroke"===i){const e=t.data,i=e.style.alignment,n=e.style.width*(1-i),r=e.path.bounds;c.addFrame(r.minX-n,r.minY-n,r.maxX+n,r.maxY+n)}}return c}containsPoint(c){var e;if(!this.bounds.containsPoint(c.x,c.y))return!1;const t=this.instructions;let i=!1;for(let n=0;n<t.length;n++){const r=t[n],s=r.data,a=s.path;if(!r.action||!a)continue;const o=s.style,f=a.shapePath.shapePrimitives;for(let t=0;t<f.length;t++){const n=f[t].shape;if(!o||!n)continue;const a=f[t].transform,l=a?a.applyInverse(c,da):c;if("fill"===r.action)i=n.contains(l.x,l.y);else{const c=o;i=n.strokeContains(l.x,l.y,c.width,c.alignment)}const d=s.hole;if(d){const c=null==(e=d.shapePath)?void 0:e.shapePrimitives;if(c)for(let e=0;e<c.length;e++)c[e].shape.contains(l.x,l.y)&&(i=!1)}if(i)return!0}}return i}unload(){var c;this.emit("unload",this);for(const e in this._gpuData)null==(c=this._gpuData[e])||c.destroy();this._gpuData=Object.create(null)}destroy(c=!1){if(this.destroyed)return;this.destroyed=!0,this._stateStack.length=0,this._transform=null,this.unload(),this.emit("destroy",this),this.removeAllListeners();if("boolean"==typeof c?c:null==c?void 0:c.texture){const e="boolean"==typeof c?c:null==c?void 0:c.textureSource;this._fillStyle.texture&&(this._fillStyle.fill&&"uid"in this._fillStyle.fill?this._fillStyle.fill.destroy():this._fillStyle.texture.destroy(e)),this._strokeStyle.texture&&(this._strokeStyle.fill&&"uid"in this._strokeStyle.fill?this._strokeStyle.fill.destroy():this._strokeStyle.texture.destroy(e))}this._fillStyle=null,this._strokeStyle=null,this.instructions=null,this._activePath=null,this._bounds=null,this._stateStack=null,this.customShader=null,this._transform=null}};ua.defaultFillStyle={color:16777215,alpha:1,texture:cc.WHITE,matrix:null,fill:null,textureSpace:"local"},ua.defaultStrokeStyle={width:1,color:16777215,alpha:1,alignment:.5,miterLimit:10,cap:"butt",join:"miter",texture:cc.WHITE,matrix:null,fill:null,textureSpace:"local",pixelLine:!1};let pa=ua;function ga(c,e=1){var t;const i=null==(t=ct.RETINA_PREFIX)?void 0:t.exec(c);return i?parseFloat(i[1]):e}function ma(c,e,t){c.label=t,c._sourceOrigin=t;const i=new cc({source:c,label:t}),n=()=>{delete e.promiseCache[t],He.has(t)&&He.remove(t)};return i.source.once("destroy",()=>{e.promiseCache[t]&&(Bc("[Assets] A TextureSource managed by Assets was destroyed instead of unloaded! Use Assets.unload() instead of destroying the TextureSource."),n())}),i.once("destroy",()=>{c.destroyed||(Bc("[Assets] A Texture managed by Assets was destroyed instead of unloaded! Use Assets.unload() instead of destroying the Texture."),n())}),i}const ba="image/svg+xml",va={extension:{type:s.LoadParser,priority:Xe.Low,name:"loadSVG"},name:"loadSVG",id:"svg",config:{crossOrigin:"anonymous",parseAsGraphicsContext:!1},test:c=>Cn(c,ba)||An(c,".svg"),load(c,e,t){return __async(this,null,function*(){var i,n;return(null!=(n=null==(i=e.data)?void 0:i.parseAsGraphicsContext)?n:this.config.parseAsGraphicsContext)?function(c){return __async(this,null,function*(){let e;if(Cn(c,ba))if(c.includes(";base64,")){e=function(c){const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";let t="",i=0;c=c.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(;i<c.length;){const n=e.indexOf(c.charAt(i++)),r=e.indexOf(c.charAt(i++)),s=e.indexOf(c.charAt(i++)),a=e.indexOf(c.charAt(i++)),o=n<<2|r>>4,f=(15&r)<<4|s>>2,l=(3&s)<<6|a;t+=String.fromCharCode(o),64!==s&&(t+=String.fromCharCode(f)),64!==a&&(t+=String.fromCharCode(l))}return t}(c.split(";base64,")[1])}else{const t=c.split(",")[1];e=decodeURIComponent(t)}else{const t=yield Fe.get().fetch(c);e=yield t.text()}const t=new pa;return t.svg(e),t})}(c):function(c,e,t,i){return __async(this,null,function*(){var n,r,s,a,o,f;Cn(c,ba);const l=Fe.get().createImage();l.crossOrigin=i,l.src=c,yield new Promise((c,e)=>{l.complete?c(l):(l.onload=()=>c(l),l.onerror=e)}),yield l.decode();const d=null!=(r=null==(n=e.data)?void 0:n.width)?r:l.width,h=null!=(a=null==(s=e.data)?void 0:s.height)?a:l.height,u=(null==(o=e.data)?void 0:o.resolution)||ga(c),p=Math.ceil(d*u),g=Math.ceil(h*u),m=Fe.get().createCanvas(p,g),b=m.getContext("2d");b.imageSmoothingEnabled=!0,b.imageSmoothingQuality="high",b.drawImage(l,0,0,d*u,h*u);const v=null!=(f=e.data)?f:{},{parseAsGraphicsContext:y}=v,_=__objRest(v,["parseAsGraphicsContext"]);return ma(new Be(__spreadValues({resource:m,alphaMode:"premultiply-alpha-on-upload",resolution:u},_)),t,c)})}(c,e,t,this.config.crossOrigin)})},unload(c){c.destroy(!0)}};let ya=null,_a=class{constructor(){ya||(ya=URL.createObjectURL(new Blob(['(function () {\n \'use strict\';\n\n const WHITE_PNG = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=";\n async function checkImageBitmap() {\n try {\n if (typeof createImageBitmap !== "function") return false;\n const response = await fetch(WHITE_PNG);\n const imageBlob = await response.blob();\n const imageBitmap = await createImageBitmap(imageBlob);\n return imageBitmap.width === 1 && imageBitmap.height === 1;\n } catch (_e) {\n return false;\n }\n }\n void checkImageBitmap().then((result) => {\n self.postMessage(result);\n });\n\n})();\n'],{type:"application/javascript"}))),this.worker=new Worker(ya)}};_a.revokeObjectURL=function(){ya&&(URL.revokeObjectURL(ya),ya=null)};let xa=null;class Sa{constructor(){xa||(xa=URL.createObjectURL(new Blob(['(function () {\n \'use strict\';\n\n async function loadImageBitmap(url, alphaMode) {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`[WorkerManager.loadImageBitmap] Failed to fetch ${url}: ${response.status} ${response.statusText}`);\n }\n const imageBlob = await response.blob();\n return alphaMode === "premultiplied-alpha" ? createImageBitmap(imageBlob, { premultiplyAlpha: "none" }) : createImageBitmap(imageBlob);\n }\n self.onmessage = async (event) => {\n try {\n const imageBitmap = await loadImageBitmap(event.data.data[0], event.data.data[1]);\n self.postMessage({\n data: imageBitmap,\n uuid: event.data.uuid,\n id: event.data.id\n }, [imageBitmap]);\n } catch (e) {\n self.postMessage({\n error: e,\n uuid: event.data.uuid,\n id: event.data.id\n });\n }\n };\n\n})();\n'],{type:"application/javascript"}))),this.worker=new Worker(xa)}}Sa.revokeObjectURL=function(){xa&&(URL.revokeObjectURL(xa),xa=null)};let wa,Ca=0;const Aa=new class{constructor(){this._initialized=!1,this._createdWorkers=0,this._workerPool=[],this._queue=[],this._resolveHash={}}isImageBitmapSupported(){return void 0!==this._isImageBitmapSupported||(this._isImageBitmapSupported=new Promise(c=>{const{worker:e}=new _a;e.addEventListener("message",t=>{e.terminate(),_a.revokeObjectURL(),c(t.data)})})),this._isImageBitmapSupported}loadImageBitmap(c,e){var t;return this._run("loadImageBitmap",[c,null==(t=null==e?void 0:e.data)?void 0:t.alphaMode])}_initWorkers(){return __async(this,null,function*(){this._initialized||(this._initialized=!0)})}_getWorker(){void 0===wa&&(wa=navigator.hardwareConcurrency||4);let c=this._workerPool.pop();return!c&&this._createdWorkers<wa&&(this._createdWorkers++,c=(new Sa).worker,c.addEventListener("message",c=>{this._complete(c.data),this._returnWorker(c.target),this._next()})),c}_returnWorker(c){this._workerPool.push(c)}_complete(c){this._resolveHash[c.uuid]&&(void 0!==c.error?this._resolveHash[c.uuid].reject(c.error):this._resolveHash[c.uuid].resolve(c.data),delete this._resolveHash[c.uuid])}_run(c,e){return __async(this,null,function*(){yield this._initWorkers();const t=new Promise((t,i)=>{this._queue.push({id:c,arguments:e,resolve:t,reject:i})});return this._next(),t})}_next(){if(!this._queue.length)return;const c=this._getWorker();if(!c)return;const e=this._queue.pop(),t=e.id;this._resolveHash[Ca]={resolve:e.resolve,reject:e.reject},c.postMessage({data:e.arguments,uuid:Ca++,id:t})}reset(){this._workerPool.forEach(c=>c.terminate()),this._workerPool.length=0,Object.values(this._resolveHash).forEach(({reject:c})=>{null==c||c(new Error("WorkerManager has been reset before completion"))}),this._resolveHash={},this._queue.length=0,this._initialized=!1,this._createdWorkers=0}},Ta=[".jpeg",".jpg",".png",".webp",".avif"],Pa=["image/jpeg","image/png","image/webp","image/avif"];const Ma={name:"loadTextures",id:"texture",extension:{type:s.LoadParser,priority:Xe.High,name:"loadTextures"},config:{preferWorkers:!0,preferCreateImageBitmap:!0,crossOrigin:"anonymous"},test:c=>Cn(c,Pa)||An(c,Ta),load(c,e,t){return __async(this,null,function*(){var i;let n=null;n=globalThis.createImageBitmap&&this.config.preferCreateImageBitmap?this.config.preferWorkers&&(yield Aa.isImageBitmapSupported())?yield Aa.loadImageBitmap(c,e):yield function(c,e){return __async(this,null,function*(){var t;const i=yield Fe.get().fetch(c);if(!i.ok)throw new Error(`[loadImageBitmap] Failed to fetch ${c}: ${i.status} ${i.statusText}`);const n=yield i.blob();return"premultiplied-alpha"===(null==(t=null==e?void 0:e.data)?void 0:t.alphaMode)?createImageBitmap(n,{premultiplyAlpha:"none"}):createImageBitmap(n)})}(c,e):yield new Promise((e,t)=>{n=Fe.get().createImage(),n.crossOrigin=this.config.crossOrigin,n.src=c,n.complete?e(n):(n.onload=()=>{e(n)},n.onerror=t)});return ma(new Be(__spreadValues({resource:n,alphaMode:"premultiply-alpha-on-upload",resolution:(null==(i=e.data)?void 0:i.resolution)||ga(c)},e.data)),t,c)})},unload(c){c.destroy(!0)}},Ea=[".mp4",".m4v",".webm",".ogg",".ogv",".h264",".avi",".mov"];let Ra,ka;function Fa(c,e,t){void 0!==t||e.startsWith("data:")?!1!==t&&(c.crossOrigin="string"==typeof t?t:"anonymous"):c.crossOrigin=function(c,e=globalThis.location){if(c.startsWith("data:"))return"";e||(e=globalThis.location);const t=new URL(c,document.baseURI);if(t.hostname!==e.hostname||t.port!==e.port||t.protocol!==e.protocol)return"anonymous";return""}(e)}const Ia={name:"loadVideo",id:"video",extension:{type:s.LoadParser,name:"loadVideo"},test(c){if(!Ra||!ka){const{validVideoExtensions:c,validVideoMime:e}=function(){const c=[],e=[];for(const t of Ea){const i=Ne.MIME_TYPES[t.substring(1)]||`video/${t.substring(1)}`;bn(i)&&(c.push(t),e.includes(i)||e.push(i))}return{validVideoExtensions:c,validVideoMime:e}}();Ra=c,ka=e}const e=Cn(c,ka),t=An(c,Ra);return e||t},load(c,e,t){return __async(this,null,function*(){var i,n;const r=__spreadValues(__spreadProps(__spreadValues({},Ne.defaultOptions),{resolution:(null==(i=e.data)?void 0:i.resolution)||ga(c),alphaMode:(null==(n=e.data)?void 0:n.alphaMode)||(yield Ue())}),e.data),s=document.createElement("video"),a={preload:!1!==r.autoLoad?"auto":void 0,"webkit-playsinline":!1!==r.playsinline?"":void 0,playsinline:!1!==r.playsinline?"":void 0,muted:!0===r.muted?"":void 0,loop:!0===r.loop?"":void 0,autoplay:!1!==r.autoPlay?"":void 0};Object.keys(a).forEach(c=>{const e=a[c];void 0!==e&&s.setAttribute(c,e)}),!0===r.muted&&(s.muted=!0),Fa(s,c,r.crossorigin);const o=document.createElement("source");let f;if(r.mime)f=r.mime;else if(c.startsWith("data:"))f=c.slice(5,c.indexOf(";"));else if(!c.startsWith("blob:")){const e=c.split("?")[0].slice(c.lastIndexOf(".")+1).toLowerCase();f=Ne.MIME_TYPES[e]||`video/${e}`}return o.src=c,f&&(o.type=f),new Promise((i,n)=>{function a(){return __async(this,null,function*(){const n=new Ne(__spreadProps(__spreadValues({},r),{resource:s}));var a;l(),e.data.preload&&(yield(a=s,new Promise((c,e)=>{function t(){n(),c()}function i(c){n(),e(c)}function n(){a.removeEventListener("canplaythrough",t),a.removeEventListener("error",i)}a.addEventListener("canplaythrough",t),a.addEventListener("error",i),a.load()}))),i(ma(n,t,c))})}function f(c){l(),n(c)}function l(){s.removeEventListener("canplay",a),s.removeEventListener("error",f),o.removeEventListener("error",f)}r.preload&&!r.autoPlay&&s.load(),s.addEventListener("canplay",a),s.addEventListener("error",f),o.addEventListener("error",f),s.appendChild(o)})})},unload(c){c.destroy(!0)}},Ba={extension:{type:s.ResolveParser,name:"resolveTexture"},test:Ma.test,parse:c=>{var e,t;return{resolution:parseFloat(null!=(t=null==(e=ct.RETINA_PREFIX.exec(c))?void 0:e[1])?t:"1"),format:c.split(".").pop(),src:c}}},Da={extension:{type:s.ResolveParser,priority:-2,name:"resolveJson"},test:c=>ct.RETINA_PREFIX.test(c)&&c.endsWith(".json"),parse:Ba.parse};const Oa=new class{constructor(){this._detections=[],this._initialized=!1,this.resolver=new ct,this.loader=new wn,this.cache=He,this._backgroundLoader=new ln(this.loader),this._backgroundLoader.active=!0,this.reset()}init(){return __async(this,arguments,function*(c={}){var e,t,i;if(this._initialized)return void Bc("[Assets]AssetManager already initialized, did you load before calling this Assets.init()?");if(this._initialized=!0,c.defaultSearchParams&&this.resolver.setDefaultSearchParams(c.defaultSearchParams),c.basePath&&(this.resolver.basePath=c.basePath),c.bundleIdentifier&&this.resolver.setBundleIdentifier(c.bundleIdentifier),c.manifest){let e=c.manifest;"string"==typeof e&&(e=yield this.load(e)),this.resolver.addManifest(e)}const n=null!=(t=null==(e=c.texturePreference)?void 0:e.resolution)?t:1,r="number"==typeof n?[n]:n,s=yield this._detectFormats({preferredFormats:null==(i=c.texturePreference)?void 0:i.format,skipDetections:c.skipDetections,detections:this._detections});this.resolver.prefer({params:{format:s,resolution:r}}),c.preferences&&this.setPreferences(c.preferences),c.loadOptions&&(this.loader.loadOptions=__spreadValues(__spreadValues({},this.loader.loadOptions),c.loadOptions))})}add(c){this.resolver.add(c)}load(c,e){return __async(this,null,function*(){this._initialized||(yield this.init());const t=$e(c),i=We(c).map(c=>{if("string"!=typeof c){const e=this.resolver.getAlias(c);return e.some(c=>!this.resolver.hasKey(c))&&this.add(c),Array.isArray(e)?e[0]:e}return this.resolver.hasKey(c)||this.add({alias:c,src:c}),c}),n=this.resolver.resolve(i),r=yield this._mapLoadToResolve(n,e);return t?r[i[0]]:r})}addBundle(c,e){this.resolver.addBundle(c,e)}loadBundle(c,e){return __async(this,null,function*(){this._initialized||(yield this.init());let t=!1;"string"==typeof c&&(t=!0,c=[c]);const i=this.resolver.resolveBundle(c),n={},r=Object.keys(i);let s=0;const a=[],o=r.map((c,t)=>{const r=i[c],o=Object.values(r),f=[...new Set(o.flat())].reduce((c,e)=>c+(e.progressSize||1),0);return a.push(0),s+=f,this._mapLoadToResolve(r,c=>{a[t]=c*f,null==e||e(a.reduce((c,e)=>c+e,0)/s)}).then(e=>{n[c]=e})});return yield Promise.all(o),t?n[c[0]]:n})}backgroundLoad(c){return __async(this,null,function*(){this._initialized||(yield this.init()),"string"==typeof c&&(c=[c]);const e=this.resolver.resolve(c);this._backgroundLoader.add(Object.values(e))})}backgroundLoadBundle(c){return __async(this,null,function*(){this._initialized||(yield this.init()),"string"==typeof c&&(c=[c]);const e=this.resolver.resolveBundle(c);Object.values(e).forEach(c=>{this._backgroundLoader.add(Object.values(c))})})}reset(){this.resolver.reset(),this.loader.reset(),this.cache.reset(),this._initialized=!1}get(c){if("string"==typeof c)return He.get(c);const e={};for(let t=0;t<c.length;t++)e[t]=He.get(c[t]);return e}_mapLoadToResolve(c,e){return __async(this,null,function*(){const t=[...new Set(Object.values(c))];this._backgroundLoader.active=!1;const i=yield this.loader.load(t,e);this._backgroundLoader.active=!0;const n={};return t.forEach(c=>{const e=i[c.src],t=[c.src];c.alias&&t.push(...c.alias),t.forEach(c=>{n[c]=e}),He.set(t,e)}),n})}unload(c){return __async(this,null,function*(){this._initialized||(yield this.init());const e=We(c).map(c=>"string"!=typeof c?c.src:c),t=this.resolver.resolve(e);yield this._unloadFromResolved(t)})}unloadBundle(c){return __async(this,null,function*(){this._initialized||(yield this.init()),c=We(c);const e=this.resolver.resolveBundle(c),t=Object.keys(e).map(c=>this._unloadFromResolved(e[c]));yield Promise.all(t)})}_unloadFromResolved(c){return __async(this,null,function*(){const e=Object.values(c);e.forEach(c=>{He.remove(c.src)}),yield this.loader.unload(e)})}_detectFormats(c){return __async(this,null,function*(){let e=[];c.preferredFormats&&(e=Array.isArray(c.preferredFormats)?c.preferredFormats:[c.preferredFormats]);for(const t of c.detections)c.skipDetections||(yield t.test())?e=yield t.add(e):c.skipDetections||(e=yield t.remove(e));return e=e.filter((c,t)=>e.indexOf(c)===t),e})}get detections(){return this._detections}setPreferences(c){this.loader.parsers.forEach(e=>{e.config&&Object.keys(e.config).filter(e=>e in c).forEach(t=>{e.config[t]=c[t]})})}};f.handleByList(s.LoadParser,Oa.loader.parsers).handleByList(s.ResolveParser,Oa.resolver.parsers).handleByList(s.CacheParser,Oa.cache.parsers).handleByList(s.DetectionParser,Oa.detections),f.add(dn,gn,un,xn,vn,yn,_n,Tn,Pn,Bn,va,Ma,Ia,fn,on,Ba,Da);const La={loader:s.LoadParser,resolver:s.ResolveParser,cache:s.CacheParser,detection:s.DetectionParser};f.handle(s.Asset,c=>{const e=c.ref;Object.entries(La).filter(([c])=>!!e[c]).forEach(([c,t])=>{var i;return f.add(Object.assign(e[c],{extension:null!=(i=e[c].extension)?i:t}))})},c=>{const e=c.ref;Object.keys(La).filter(c=>!!e[c]).forEach(c=>f.remove(e[c]))});class za{constructor(c){this._attachedDomElements=[],this._renderer=c,this._renderer.runners.postrender.add(this),this._renderer.runners.init.add(this),this._domElement=document.createElement("div"),this._domElement.style.position="absolute",this._domElement.style.top="0",this._domElement.style.left="0",this._domElement.style.pointerEvents="none",this._domElement.style.zIndex="1000"}init(){this._canvasObserver=new at({domElement:this._domElement,renderer:this._renderer})}addRenderable(c,e){this._attachedDomElements.includes(c)||this._attachedDomElements.push(c)}updateRenderable(c){}validateRenderable(c){return!0}postrender(){const c=this._attachedDomElements;if(0!==c.length){this._canvasObserver.ensureAttached();for(let e=0;e<c.length;e++){const t=c[e],i=t.element;if(!t.parent||t.globalDisplayStatus<7)null==i||i.remove(),c.splice(e,1),e--;else{this._domElement.contains(i)||(i.style.position="absolute",i.style.pointerEvents="auto",this._domElement.appendChild(i));const c=t.worldTransform,e=t._anchor,n=t.width*e.x,r=t.height*e.y;i.style.transformOrigin=`${n}px ${r}px`,i.style.transform=`matrix(${c.a}, ${c.b}, ${c.c}, ${c.d}, ${c.tx-n}, ${c.ty-r})`,i.style.opacity=t.groupAlpha.toString()}}}else this._domElement.remove()}destroy(){var c;this._renderer.runners.postrender.remove(this);for(let e=0;e<this._attachedDomElements.length;e++){null==(c=this._attachedDomElements[e].element)||c.remove()}this._attachedDomElements.length=0,this._domElement.remove(),this._canvasObserver.destroy(),this._renderer=null}}za.extension={type:[s.WebGLPipes,s.WebGPUPipes,s.CanvasPipes],name:"dom"},f.add(za);class Ga extends Se{constructor(c={}){const e=c,{element:t,anchor:i}=e,n=__objRest(e,["element","anchor"]);super(__spreadValues({label:"DOMContainer"},n)),this.renderPipeId="dom",this.batched=!1,this._anchor=new x(0,0),i&&(this.anchor=i),this.element=c.element||document.createElement("div")}get anchor(){return this._anchor}set anchor(c){"number"==typeof c?this._anchor.set(c):this._anchor.copyFrom(c)}set element(c){this._element!==c&&(this._element=c,this.onViewUpdate())}get element(){return this._element}updateBounds(){const c=this._bounds,e=this._element;if(!e)return c.minX=0,c.minY=0,c.maxX=0,void(c.maxY=0);const{offsetWidth:t,offsetHeight:i}=e;c.minX=0,c.maxX=t,c.minY=0,c.maxY=i}destroy(c=!1){var e,t;super.destroy(c),null==(t=null==(e=this._element)?void 0:e.parentNode)||t.removeChild(this._element),this._element=null,this._anchor=null}}const Ua=new class{constructor(){this.interactionFrequency=10,this._deltaTime=0,this._didMove=!1,this._tickerAdded=!1,this._pauseUpdate=!0}init(c){this.removeTickerListener(),this.events=c,this.interactionFrequency=10,this._deltaTime=0,this._didMove=!1,this._tickerAdded=!1,this._pauseUpdate=!0}get pauseUpdate(){return this._pauseUpdate}set pauseUpdate(c){this._pauseUpdate=c}addTickerListener(){!this._tickerAdded&&this.domElement&&(Ge.system.add(this._tickerUpdate,this,De.INTERACTION),this._tickerAdded=!0)}removeTickerListener(){this._tickerAdded&&(Ge.system.remove(this._tickerUpdate,this),this._tickerAdded=!1)}pointerMoved(){this._didMove=!0}_update(){if(!this.domElement||this._pauseUpdate)return;if(this._didMove)return void(this._didMove=!1);const c=this.events._rootPointerEvent;this.events.supportsTouchEvents&&"touch"===c.pointerType||globalThis.document.dispatchEvent(this.events.supportsPointerEvents?new PointerEvent("pointermove",{clientX:c.clientX,clientY:c.clientY,pointerType:c.pointerType,pointerId:c.pointerId}):new MouseEvent("mousemove",{clientX:c.clientX,clientY:c.clientY}))}_tickerUpdate(c){this._deltaTime+=c.deltaTime,this._deltaTime<this.interactionFrequency||(this._deltaTime=0,this._update())}destroy(){this.removeTickerListener(),this.events=null,this.domElement=null,this._deltaTime=0,this._didMove=!1,this._tickerAdded=!1,this._pauseUpdate=!0}};class Va extends ot{constructor(){super(...arguments),this.client=new x,this.movement=new x,this.offset=new x,this.global=new x,this.screen=new x}get clientX(){return this.client.x}get clientY(){return this.client.y}get x(){return this.clientX}get y(){return this.clientY}get movementX(){return this.movement.x}get movementY(){return this.movement.y}get offsetX(){return this.offset.x}get offsetY(){return this.offset.y}get globalX(){return this.global.x}get globalY(){return this.global.y}get screenX(){return this.screen.x}get screenY(){return this.screen.y}getLocalPosition(c,e,t){return c.worldTransform.applyInverse(t||this.global,e)}getModifierState(c){return"getModifierState"in this.nativeEvent&&this.nativeEvent.getModifierState(c)}initMouseEvent(c,e,t,i,n,r,s,a,o,f,l,d,h,u,p){throw new Error("Method not implemented.")}}class Na extends Va{constructor(){super(...arguments),this.width=0,this.height=0,this.isPrimary=!1}getCoalescedEvents(){return"pointermove"===this.type||"mousemove"===this.type||"touchmove"===this.type?[this]:[]}getPredictedEvents(){throw new Error("getPredictedEvents is not supported!")}}class Wa extends Va{constructor(){super(...arguments),this.DOM_DELTA_PIXEL=0,this.DOM_DELTA_LINE=1,this.DOM_DELTA_PAGE=2}}Wa.DOM_DELTA_PIXEL=0,Wa.DOM_DELTA_LINE=1,Wa.DOM_DELTA_PAGE=2;const Ha=new x,ja=new x;class Ya{constructor(c){this.dispatch=new b,this.moveOnAll=!1,this.enableGlobalMoveEvents=!0,this.mappingState={trackingData:{}},this.eventPool=new Map,this._allInteractiveElements=[],this._hitElements=[],this._isPointerMoveEvent=!1,this.rootTarget=c,this.hitPruneFn=this.hitPruneFn.bind(this),this.hitTestFn=this.hitTestFn.bind(this),this.mapPointerDown=this.mapPointerDown.bind(this),this.mapPointerMove=this.mapPointerMove.bind(this),this.mapPointerOut=this.mapPointerOut.bind(this),this.mapPointerOver=this.mapPointerOver.bind(this),this.mapPointerUp=this.mapPointerUp.bind(this),this.mapPointerUpOutside=this.mapPointerUpOutside.bind(this),this.mapWheel=this.mapWheel.bind(this),this.mappingTable={},this.addEventMapping("pointerdown",this.mapPointerDown),this.addEventMapping("pointermove",this.mapPointerMove),this.addEventMapping("pointerout",this.mapPointerOut),this.addEventMapping("pointerleave",this.mapPointerOut),this.addEventMapping("pointerover",this.mapPointerOver),this.addEventMapping("pointerup",this.mapPointerUp),this.addEventMapping("pointerupoutside",this.mapPointerUpOutside),this.addEventMapping("wheel",this.mapWheel)}addEventMapping(c,e){this.mappingTable[c]||(this.mappingTable[c]=[]),this.mappingTable[c].push({fn:e,priority:0}),this.mappingTable[c].sort((c,e)=>c.priority-e.priority)}dispatchEvent(c,e){c.propagationStopped=!1,c.propagationImmediatelyStopped=!1,this.propagate(c,e),this.dispatch.emit(e||c.type,c)}mapEvent(c){if(!this.rootTarget)return;const e=this.mappingTable[c.type];if(e)for(let t=0,i=e.length;t<i;t++)e[t].fn(c);else Bc(`[EventBoundary]: Event mapping not defined for ${c.type}`)}hitTest(c,e){Ua.pauseUpdate=!0;const t=this[this._isPointerMoveEvent&&this.enableGlobalMoveEvents?"hitTestMoveRecursive":"hitTestRecursive"](this.rootTarget,this.rootTarget.eventMode,Ha.set(c,e),this.hitTestFn,this.hitPruneFn);return t&&t[0]}propagate(c,e){if(!c.target)return;const t=c.composedPath();c.eventPhase=c.CAPTURING_PHASE;for(let i=0,n=t.length-1;i<n;i++)if(c.currentTarget=t[i],this.notifyTarget(c,e),c.propagationStopped||c.propagationImmediatelyStopped)return;if(c.eventPhase=c.AT_TARGET,c.currentTarget=c.target,this.notifyTarget(c,e),!c.propagationStopped&&!c.propagationImmediatelyStopped){c.eventPhase=c.BUBBLING_PHASE;for(let i=t.length-2;i>=0;i--)if(c.currentTarget=t[i],this.notifyTarget(c,e),c.propagationStopped||c.propagationImmediatelyStopped)return}}all(c,e,t=this._allInteractiveElements){if(0===t.length)return;c.eventPhase=c.BUBBLING_PHASE;const i=Array.isArray(e)?e:[e];for(let n=t.length-1;n>=0;n--)i.forEach(e=>{c.currentTarget=t[n],this.notifyTarget(c,e)})}propagationPath(c){const e=[c];for(let t=0;t<2048&&c!==this.rootTarget&&c.parent;t++){if(!c.parent)throw new Error("Cannot find propagation path to disconnected target");e.push(c.parent),c=c.parent}return e.reverse(),e}hitTestMoveRecursive(c,e,t,i,n,r=!1){let s=!1;if(this._interactivePrune(c))return null;if("dynamic"!==c.eventMode&&"dynamic"!==e||(Ua.pauseUpdate=!1),c.interactiveChildren&&c.children){const a=c.children;for(let o=a.length-1;o>=0;o--){const f=a[o],l=this.hitTestMoveRecursive(f,this._isInteractive(e)?e:f.eventMode,t,i,n,r||n(c,t));if(l){if(l.length>0&&!l[l.length-1].parent)continue;const e=c.isInteractive();(l.length>0||e)&&(e&&this._allInteractiveElements.push(c),l.push(c)),0===this._hitElements.length&&(this._hitElements=l),s=!0}}}const a=this._isInteractive(e),o=c.isInteractive();return o&&o&&this._allInteractiveElements.push(c),r||this._hitElements.length>0?null:s?this._hitElements:a&&!n(c,t)&&i(c,t)?o?[c]:[]:null}hitTestRecursive(c,e,t,i,n){if(this._interactivePrune(c)||n(c,t))return null;if("dynamic"!==c.eventMode&&"dynamic"!==e||(Ua.pauseUpdate=!1),c.interactiveChildren&&c.children){const r=c.children,s=t;for(let t=r.length-1;t>=0;t--){const a=r[t],o=this.hitTestRecursive(a,this._isInteractive(e)?e:a.eventMode,s,i,n);if(o){if(o.length>0&&!o[o.length-1].parent)continue;const e=c.isInteractive();return(o.length>0||e)&&o.push(c),o}}}const r=this._isInteractive(e),s=c.isInteractive();return r&&i(c,t)?s?[c]:[]:null}_isInteractive(c){return"static"===c||"dynamic"===c}_interactivePrune(c){return!(c&&c.visible&&c.renderable&&c.measurable)||("none"===c.eventMode||"passive"===c.eventMode&&!c.interactiveChildren)}hitPruneFn(c,e){if(c.hitArea&&(c.worldTransform.applyInverse(e,ja),!c.hitArea.contains(ja.x,ja.y)))return!0;if(c.effects&&c.effects.length)for(let t=0;t<c.effects.length;t++){const i=c.effects[t];if(i.containsPoint){if(!i.containsPoint(e,this.hitTestFn))return!0}}return!1}hitTestFn(c,e){return!!c.hitArea||!!(null==c?void 0:c.containsPoint)&&(c.worldTransform.applyInverse(e,ja),c.containsPoint(ja))}notifyTarget(c,e){var t,i;if(!c.currentTarget.isInteractive())return;null!=e||(e=c.type);const n=`on${e}`;null==(i=(t=c.currentTarget)[n])||i.call(t,c);const r=c.eventPhase===c.CAPTURING_PHASE||c.eventPhase===c.AT_TARGET?`${e}capture`:e;this._notifyListeners(c,r),c.eventPhase===c.AT_TARGET&&this._notifyListeners(c,e)}mapPointerDown(c){if(!(c instanceof Na))return void Bc("EventBoundary cannot map a non-pointer event as a pointer event");const e=this.createPointerEvent(c);if(this.dispatchEvent(e,"pointerdown"),"touch"===e.pointerType)this.dispatchEvent(e,"touchstart");else if("mouse"===e.pointerType||"pen"===e.pointerType){const c=2===e.button;this.dispatchEvent(e,c?"rightdown":"mousedown")}this.trackingData(c.pointerId).pressTargetsByButton[c.button]=e.composedPath(),this.freeEvent(e)}mapPointerMove(c){var e,t,i;if(!(c instanceof Na))return void Bc("EventBoundary cannot map a non-pointer event as a pointer event");this._allInteractiveElements.length=0,this._hitElements.length=0,this._isPointerMoveEvent=!0;const n=this.createPointerEvent(c);this._isPointerMoveEvent=!1;const r="mouse"===n.pointerType||"pen"===n.pointerType,s=this.trackingData(c.pointerId),a=this.findMountedTarget(s.overTargets);if((null==(e=s.overTargets)?void 0:e.length)>0&&a!==n.target){const e="mousemove"===c.type?"mouseout":"pointerout",t=this.createPointerEvent(c,e,a);if(this.dispatchEvent(t,"pointerout"),r&&this.dispatchEvent(t,"mouseout"),!n.composedPath().includes(a)){const e=this.createPointerEvent(c,"pointerleave",a);for(e.eventPhase=e.AT_TARGET;e.target&&!n.composedPath().includes(e.target);)e.currentTarget=e.target,this.notifyTarget(e),r&&this.notifyTarget(e,"mouseleave"),e.target=e.target.parent;this.freeEvent(e)}this.freeEvent(t)}if(a!==n.target){const e="mousemove"===c.type?"mouseover":"pointerover",t=this.clonePointerEvent(n,e);this.dispatchEvent(t,"pointerover"),r&&this.dispatchEvent(t,"mouseover");let i=null==a?void 0:a.parent;for(;i&&i!==this.rootTarget.parent&&i!==n.target;)i=i.parent;if(!i||i===this.rootTarget.parent){const c=this.clonePointerEvent(n,"pointerenter");for(c.eventPhase=c.AT_TARGET;c.target&&c.target!==a&&c.target!==this.rootTarget.parent;)c.currentTarget=c.target,this.notifyTarget(c),r&&this.notifyTarget(c,"mouseenter"),c.target=c.target.parent;this.freeEvent(c)}this.freeEvent(t)}const o=[],f=null==(t=this.enableGlobalMoveEvents)||t;this.moveOnAll?o.push("pointermove"):this.dispatchEvent(n,"pointermove"),f&&o.push("globalpointermove"),"touch"===n.pointerType&&(this.moveOnAll?o.splice(1,0,"touchmove"):this.dispatchEvent(n,"touchmove"),f&&o.push("globaltouchmove")),r&&(this.moveOnAll?o.splice(1,0,"mousemove"):this.dispatchEvent(n,"mousemove"),f&&o.push("globalmousemove"),this.cursor=null==(i=n.target)?void 0:i.cursor),o.length>0&&this.all(n,o),this._allInteractiveElements.length=0,this._hitElements.length=0,s.overTargets=n.composedPath(),this.freeEvent(n)}mapPointerOver(c){var e;if(!(c instanceof Na))return void Bc("EventBoundary cannot map a non-pointer event as a pointer event");const t=this.trackingData(c.pointerId),i=this.createPointerEvent(c),n="mouse"===i.pointerType||"pen"===i.pointerType;this.dispatchEvent(i,"pointerover"),n&&this.dispatchEvent(i,"mouseover"),"mouse"===i.pointerType&&(this.cursor=null==(e=i.target)?void 0:e.cursor);const r=this.clonePointerEvent(i,"pointerenter");for(r.eventPhase=r.AT_TARGET;r.target&&r.target!==this.rootTarget.parent;)r.currentTarget=r.target,this.notifyTarget(r),n&&this.notifyTarget(r,"mouseenter"),r.target=r.target.parent;t.overTargets=i.composedPath(),this.freeEvent(i),this.freeEvent(r)}mapPointerOut(c){if(!(c instanceof Na))return void Bc("EventBoundary cannot map a non-pointer event as a pointer event");const e=this.trackingData(c.pointerId);if(e.overTargets){const t="mouse"===c.pointerType||"pen"===c.pointerType,i=this.findMountedTarget(e.overTargets),n=this.createPointerEvent(c,"pointerout",i);this.dispatchEvent(n),t&&this.dispatchEvent(n,"mouseout");const r=this.createPointerEvent(c,"pointerleave",i);for(r.eventPhase=r.AT_TARGET;r.target&&r.target!==this.rootTarget.parent;)r.currentTarget=r.target,this.notifyTarget(r),t&&this.notifyTarget(r,"mouseleave"),r.target=r.target.parent;e.overTargets=null,this.freeEvent(n),this.freeEvent(r)}this.cursor=null}mapPointerUp(c){if(!(c instanceof Na))return void Bc("EventBoundary cannot map a non-pointer event as a pointer event");const e=performance.now(),t=this.createPointerEvent(c);if(this.dispatchEvent(t,"pointerup"),"touch"===t.pointerType)this.dispatchEvent(t,"touchend");else if("mouse"===t.pointerType||"pen"===t.pointerType){const c=2===t.button;this.dispatchEvent(t,c?"rightup":"mouseup")}const i=this.trackingData(c.pointerId),n=this.findMountedTarget(i.pressTargetsByButton[c.button]);let r=n;if(n&&!t.composedPath().includes(n)){let e=n;for(;e&&!t.composedPath().includes(e);){if(t.currentTarget=e,this.notifyTarget(t,"pointerupoutside"),"touch"===t.pointerType)this.notifyTarget(t,"touchendoutside");else if("mouse"===t.pointerType||"pen"===t.pointerType){const c=2===t.button;this.notifyTarget(t,c?"rightupoutside":"mouseupoutside")}e=e.parent}delete i.pressTargetsByButton[c.button],r=e}if(r){const n=this.clonePointerEvent(t,"click");n.target=r,n.path=null,i.clicksByButton[c.button]||(i.clicksByButton[c.button]={clickCount:0,target:n.target,timeStamp:e});const s=i.clicksByButton[c.button];if(s.target===n.target&&e-s.timeStamp<200?++s.clickCount:s.clickCount=1,s.target=n.target,s.timeStamp=e,n.detail=s.clickCount,"mouse"===n.pointerType){const c=2===n.button;this.dispatchEvent(n,c?"rightclick":"click")}else"touch"===n.pointerType&&this.dispatchEvent(n,"tap");this.dispatchEvent(n,"pointertap"),this.freeEvent(n)}this.freeEvent(t)}mapPointerUpOutside(c){if(!(c instanceof Na))return void Bc("EventBoundary cannot map a non-pointer event as a pointer event");const e=this.trackingData(c.pointerId),t=this.findMountedTarget(e.pressTargetsByButton[c.button]),i=this.createPointerEvent(c);if(t){let n=t;for(;n;)i.currentTarget=n,this.notifyTarget(i,"pointerupoutside"),"touch"===i.pointerType?this.notifyTarget(i,"touchendoutside"):"mouse"!==i.pointerType&&"pen"!==i.pointerType||this.notifyTarget(i,2===i.button?"rightupoutside":"mouseupoutside"),n=n.parent;delete e.pressTargetsByButton[c.button]}this.freeEvent(i)}mapWheel(c){if(!(c instanceof Wa))return void Bc("EventBoundary cannot map a non-wheel event as a wheel event");const e=this.createWheelEvent(c);this.dispatchEvent(e),this.freeEvent(e)}findMountedTarget(c){if(!c)return null;let e=c[0];for(let t=1;t<c.length&&c[t].parent===e;t++)e=c[t];return e}createPointerEvent(c,e,t){var i;const n=this.allocateEvent(Na);return this.copyPointerData(c,n),this.copyMouseData(c,n),this.copyData(c,n),n.nativeEvent=c.nativeEvent,n.originalEvent=c,n.target=null!=(i=null!=t?t:this.hitTest(n.global.x,n.global.y))?i:this._hitElements[0],"string"==typeof e&&(n.type=e),n}createWheelEvent(c){const e=this.allocateEvent(Wa);return this.copyWheelData(c,e),this.copyMouseData(c,e),this.copyData(c,e),e.nativeEvent=c.nativeEvent,e.originalEvent=c,e.target=this.hitTest(e.global.x,e.global.y),e}clonePointerEvent(c,e){const t=this.allocateEvent(Na);return t.nativeEvent=c.nativeEvent,t.originalEvent=c.originalEvent,this.copyPointerData(c,t),this.copyMouseData(c,t),this.copyData(c,t),t.target=c.target,t.path=c.composedPath().slice(),t.type=null!=e?e:t.type,t}copyWheelData(c,e){e.deltaMode=c.deltaMode,e.deltaX=c.deltaX,e.deltaY=c.deltaY,e.deltaZ=c.deltaZ}copyPointerData(c,e){c instanceof Na&&e instanceof Na&&(e.pointerId=c.pointerId,e.width=c.width,e.height=c.height,e.isPrimary=c.isPrimary,e.pointerType=c.pointerType,e.pressure=c.pressure,e.tangentialPressure=c.tangentialPressure,e.tiltX=c.tiltX,e.tiltY=c.tiltY,e.twist=c.twist)}copyMouseData(c,e){c instanceof Va&&e instanceof Va&&(e.altKey=c.altKey,e.button=c.button,e.buttons=c.buttons,e.client.copyFrom(c.client),e.ctrlKey=c.ctrlKey,e.metaKey=c.metaKey,e.movement.copyFrom(c.movement),e.screen.copyFrom(c.screen),e.shiftKey=c.shiftKey,e.global.copyFrom(c.global))}copyData(c,e){e.isTrusted=c.isTrusted,e.srcElement=c.srcElement,e.timeStamp=performance.now(),e.type=c.type,e.detail=c.detail,e.view=c.view,e.which=c.which,e.layer.copyFrom(c.layer),e.page.copyFrom(c.page)}trackingData(c){return this.mappingState.trackingData[c]||(this.mappingState.trackingData[c]={pressTargetsByButton:{},clicksByButton:{},overTarget:null}),this.mappingState.trackingData[c]}allocateEvent(c){this.eventPool.has(c)||this.eventPool.set(c,[]);const e=this.eventPool.get(c).pop()||new c(this);return e.eventPhase=e.NONE,e.currentTarget=null,e.defaultPrevented=!1,e.path=null,e.target=null,e}freeEvent(c){if(c.manager!==this)throw new Error("It is illegal to free an event not managed by this EventBoundary!");const e=c.constructor;this.eventPool.has(e)||this.eventPool.set(e,[]),this.eventPool.get(e).push(c)}_notifyListeners(c,e){const t=c.currentTarget._events[e];if(t)if("fn"in t)t.once&&c.currentTarget.removeListener(e,t.fn,void 0,!0),t.fn.call(t.context,c);else for(let i=0,n=t.length;i<n&&!c.propagationImmediatelyStopped;i++)t[i].once&&c.currentTarget.removeListener(e,t[i].fn,void 0,!0),t[i].fn.call(t[i].context,c)}}const Xa={touchstart:"pointerdown",touchend:"pointerup",touchendoutside:"pointerupoutside",touchmove:"pointermove",touchcancel:"pointercancel"},Za=class c{constructor(e){this.supportsTouchEvents="ontouchstart"in globalThis,this.supportsPointerEvents=!!globalThis.PointerEvent,this.domElement=null,this.resolution=1,this.renderer=e,this.rootBoundary=new Ya(null),Ua.init(this),this.autoPreventDefault=!0,this._eventsAdded=!1,this._rootPointerEvent=new Na(null),this._rootWheelEvent=new Wa(null),this.cursorStyles={default:"inherit",pointer:"pointer"},this.features=new Proxy(__spreadValues({},c.defaultEventFeatures),{set:(c,e,t)=>("globalMove"===e&&(this.rootBoundary.enableGlobalMoveEvents=t),c[e]=t,!0)}),this._onPointerDown=this._onPointerDown.bind(this),this._onPointerMove=this._onPointerMove.bind(this),this._onPointerUp=this._onPointerUp.bind(this),this._onPointerOverOut=this._onPointerOverOut.bind(this),this.onWheel=this.onWheel.bind(this)}static get defaultEventMode(){return this._defaultEventMode}init(e){var t,i;const{canvas:n,resolution:r}=this.renderer;this.setTargetElement(n),this.resolution=r,c._defaultEventMode=null!=(t=e.eventMode)?t:"passive",Object.assign(this.features,null!=(i=e.eventFeatures)?i:{}),this.rootBoundary.enableGlobalMoveEvents=this.features.globalMove}resolutionChange(c){this.resolution=c}destroy(){Ua.destroy(),this.setTargetElement(null),this.renderer=null,this._currentCursor=null}setCursor(c){c||(c="default");let e=!0;if(globalThis.OffscreenCanvas&&this.domElement instanceof OffscreenCanvas&&(e=!1),this._currentCursor===c)return;this._currentCursor=c;const t=this.cursorStyles[c];if(t)switch(typeof t){case"string":e&&(this.domElement.style.cursor=t);break;case"function":t(c);break;case"object":e&&Object.assign(this.domElement.style,t)}else e&&"string"==typeof c&&!Object.prototype.hasOwnProperty.call(this.cursorStyles,c)&&(this.domElement.style.cursor=c)}get pointer(){return this._rootPointerEvent}_onPointerDown(c){if(!this.features.click)return;this.rootBoundary.rootTarget=this.renderer.lastObjectRendered;const e=this._normalizeToPointerData(c);if(this.autoPreventDefault&&e[0].isNormalized){(c.cancelable||!("cancelable"in c))&&c.preventDefault()}for(let t=0,i=e.length;t<i;t++){const c=e[t],i=this._bootstrapEvent(this._rootPointerEvent,c);this.rootBoundary.mapEvent(i)}this.setCursor(this.rootBoundary.cursor)}_onPointerMove(c){if(!this.features.move)return;this.rootBoundary.rootTarget=this.renderer.lastObjectRendered,Ua.pointerMoved();const e=this._normalizeToPointerData(c);for(let t=0,i=e.length;t<i;t++){const c=this._bootstrapEvent(this._rootPointerEvent,e[t]);this.rootBoundary.mapEvent(c)}this.setCursor(this.rootBoundary.cursor)}_onPointerUp(c){if(!this.features.click)return;this.rootBoundary.rootTarget=this.renderer.lastObjectRendered;let e=c.target;c.composedPath&&c.composedPath().length>0&&(e=c.composedPath()[0]);const t=e!==this.domElement?"outside":"",i=this._normalizeToPointerData(c);for(let n=0,r=i.length;n<r;n++){const c=this._bootstrapEvent(this._rootPointerEvent,i[n]);c.type+=t,this.rootBoundary.mapEvent(c)}this.setCursor(this.rootBoundary.cursor)}_onPointerOverOut(c){if(!this.features.click)return;this.rootBoundary.rootTarget=this.renderer.lastObjectRendered;const e=this._normalizeToPointerData(c);for(let t=0,i=e.length;t<i;t++){const c=this._bootstrapEvent(this._rootPointerEvent,e[t]);this.rootBoundary.mapEvent(c)}this.setCursor(this.rootBoundary.cursor)}onWheel(c){if(!this.features.wheel)return;const e=this.normalizeWheelEvent(c);this.rootBoundary.rootTarget=this.renderer.lastObjectRendered,this.rootBoundary.mapEvent(e)}setTargetElement(c){this._removeEvents(),this.domElement=c,Ua.domElement=c,this._addEvents()}_addEvents(){if(this._eventsAdded||!this.domElement)return;Ua.addTickerListener();const c=this.domElement.style;c&&(globalThis.navigator.msPointerEnabled?(c.msContentZooming="none",c.msTouchAction="none"):this.supportsPointerEvents&&(c.touchAction="none")),this.supportsPointerEvents?(globalThis.document.addEventListener("pointermove",this._onPointerMove,!0),this.domElement.addEventListener("pointerdown",this._onPointerDown,!0),this.domElement.addEventListener("pointerleave",this._onPointerOverOut,!0),this.domElement.addEventListener("pointerover",this._onPointerOverOut,!0),globalThis.addEventListener("pointerup",this._onPointerUp,!0)):(globalThis.document.addEventListener("mousemove",this._onPointerMove,!0),this.domElement.addEventListener("mousedown",this._onPointerDown,!0),this.domElement.addEventListener("mouseout",this._onPointerOverOut,!0),this.domElement.addEventListener("mouseover",this._onPointerOverOut,!0),globalThis.addEventListener("mouseup",this._onPointerUp,!0),this.supportsTouchEvents&&(this.domElement.addEventListener("touchstart",this._onPointerDown,!0),this.domElement.addEventListener("touchend",this._onPointerUp,!0),this.domElement.addEventListener("touchmove",this._onPointerMove,!0))),this.domElement.addEventListener("wheel",this.onWheel,{passive:!0,capture:!0}),this._eventsAdded=!0}_removeEvents(){if(!this._eventsAdded||!this.domElement)return;Ua.removeTickerListener();const c=this.domElement.style;c&&(globalThis.navigator.msPointerEnabled?(c.msContentZooming="",c.msTouchAction=""):this.supportsPointerEvents&&(c.touchAction="")),this.supportsPointerEvents?(globalThis.document.removeEventListener("pointermove",this._onPointerMove,!0),this.domElement.removeEventListener("pointerdown",this._onPointerDown,!0),this.domElement.removeEventListener("pointerleave",this._onPointerOverOut,!0),this.domElement.removeEventListener("pointerover",this._onPointerOverOut,!0),globalThis.removeEventListener("pointerup",this._onPointerUp,!0)):(globalThis.document.removeEventListener("mousemove",this._onPointerMove,!0),this.domElement.removeEventListener("mousedown",this._onPointerDown,!0),this.domElement.removeEventListener("mouseout",this._onPointerOverOut,!0),this.domElement.removeEventListener("mouseover",this._onPointerOverOut,!0),globalThis.removeEventListener("mouseup",this._onPointerUp,!0),this.supportsTouchEvents&&(this.domElement.removeEventListener("touchstart",this._onPointerDown,!0),this.domElement.removeEventListener("touchend",this._onPointerUp,!0),this.domElement.removeEventListener("touchmove",this._onPointerMove,!0))),this.domElement.removeEventListener("wheel",this.onWheel,!0),this.domElement=null,this._eventsAdded=!1}mapPositionToPoint(c,e,t){const i=this.domElement.isConnected?this.domElement.getBoundingClientRect():{width:this.domElement.width,height:this.domElement.height,left:0,top:0},n=1/this.resolution;c.x=(e-i.left)*(this.domElement.width/i.width)*n,c.y=(t-i.top)*(this.domElement.height/i.height)*n}_normalizeToPointerData(c){const e=[];if(this.supportsTouchEvents&&c instanceof TouchEvent)for(let t=0,i=c.changedTouches.length;t<i;t++){const i=c.changedTouches[t];void 0===i.button&&(i.button=0),void 0===i.buttons&&(i.buttons=1),void 0===i.isPrimary&&(i.isPrimary=1===c.touches.length&&"touchstart"===c.type),void 0===i.width&&(i.width=i.radiusX||1),void 0===i.height&&(i.height=i.radiusY||1),void 0===i.tiltX&&(i.tiltX=0),void 0===i.tiltY&&(i.tiltY=0),void 0===i.pointerType&&(i.pointerType="touch"),void 0===i.pointerId&&(i.pointerId=i.identifier||0),void 0===i.pressure&&(i.pressure=i.force||.5),void 0===i.twist&&(i.twist=0),void 0===i.tangentialPressure&&(i.tangentialPressure=0),void 0===i.layerX&&(i.layerX=i.offsetX=i.clientX),void 0===i.layerY&&(i.layerY=i.offsetY=i.clientY),i.isNormalized=!0,i.type=c.type,e.push(i)}else if(globalThis.MouseEvent&&(!(c instanceof MouseEvent)||this.supportsPointerEvents&&c instanceof globalThis.PointerEvent))e.push(c);else{const t=c;void 0===t.isPrimary&&(t.isPrimary=!0),void 0===t.width&&(t.width=1),void 0===t.height&&(t.height=1),void 0===t.tiltX&&(t.tiltX=0),void 0===t.tiltY&&(t.tiltY=0),void 0===t.pointerType&&(t.pointerType="mouse"),void 0===t.pointerId&&(t.pointerId=1),void 0===t.pressure&&(t.pressure=.5),void 0===t.twist&&(t.twist=0),void 0===t.tangentialPressure&&(t.tangentialPressure=0),t.isNormalized=!0,e.push(t)}return e}normalizeWheelEvent(c){const e=this._rootWheelEvent;return this._transferMouseData(e,c),e.deltaX=c.deltaX,e.deltaY=c.deltaY,e.deltaZ=c.deltaZ,e.deltaMode=c.deltaMode,this.mapPositionToPoint(e.screen,c.clientX,c.clientY),e.global.copyFrom(e.screen),e.offset.copyFrom(e.screen),e.nativeEvent=c,e.type=c.type,e}_bootstrapEvent(c,e){return c.originalEvent=null,c.nativeEvent=e,c.pointerId=e.pointerId,c.width=e.width,c.height=e.height,c.isPrimary=e.isPrimary,c.pointerType=e.pointerType,c.pressure=e.pressure,c.tangentialPressure=e.tangentialPressure,c.tiltX=e.tiltX,c.tiltY=e.tiltY,c.twist=e.twist,this._transferMouseData(c,e),this.mapPositionToPoint(c.screen,e.clientX,e.clientY),c.global.copyFrom(c.screen),c.offset.copyFrom(c.screen),c.isTrusted=e.isTrusted,"pointerleave"===c.type&&(c.type="pointerout"),c.type.startsWith("mouse")&&(c.type=c.type.replace("mouse","pointer")),c.type.startsWith("touch")&&(c.type=Xa[c.type]||c.type),c}_transferMouseData(c,e){c.isTrusted=e.isTrusted,c.srcElement=e.srcElement,c.timeStamp=performance.now(),c.type=e.type,c.altKey=e.altKey,c.button=e.button,c.buttons=e.buttons,c.client.x=e.clientX,c.client.y=e.clientY,c.ctrlKey=e.ctrlKey,c.metaKey=e.metaKey,c.movement.x=e.movementX,c.movement.y=e.movementY,c.page.x=e.pageX,c.page.y=e.pageY,c.relatedTarget=null,c.shiftKey=e.shiftKey}};Za.extension={name:"events",type:[s.WebGLSystem,s.CanvasSystem,s.WebGPUSystem],priority:-1},Za.defaultEventFeatures={move:!0,globalMove:!0,click:!0,wheel:!0};let qa=Za;const Ka={onclick:null,onmousedown:null,onmouseenter:null,onmouseleave:null,onmousemove:null,onglobalmousemove:null,onmouseout:null,onmouseover:null,onmouseup:null,onmouseupoutside:null,onpointercancel:null,onpointerdown:null,onpointerenter:null,onpointerleave:null,onpointermove:null,onglobalpointermove:null,onpointerout:null,onpointerover:null,onpointertap:null,onpointerup:null,onpointerupoutside:null,onrightclick:null,onrightdown:null,onrightup:null,onrightupoutside:null,ontap:null,ontouchcancel:null,ontouchend:null,ontouchendoutside:null,ontouchmove:null,onglobaltouchmove:null,ontouchstart:null,onwheel:null,get interactive(){return"dynamic"===this.eventMode||"static"===this.eventMode},set interactive(c){this.eventMode=c?"static":"passive"},_internalEventMode:void 0,get eventMode(){var c;return null!=(c=this._internalEventMode)?c:qa.defaultEventMode},set eventMode(c){this._internalEventMode=c},isInteractive(){return"static"===this.eventMode||"dynamic"===this.eventMode},interactiveChildren:!0,hitArea:null,addEventListener(c,e,t){const i="boolean"==typeof t&&t||"object"==typeof t&&t.capture,n="object"==typeof t?t.signal:void 0,r="object"==typeof t&&!0===t.once,s="function"==typeof e?void 0:e;c=i?`${c}capture`:c;const a="function"==typeof e?e:e.handleEvent,o=this;n&&n.addEventListener("abort",()=>{o.off(c,a,s)}),r?o.once(c,a,s):o.on(c,a,s)},removeEventListener(c,e,t){const i="function"==typeof e?void 0:e;c="boolean"==typeof t&&t||"object"==typeof t&&t.capture?`${c}capture`:c,e="function"==typeof e?e:e.handleEvent,this.off(c,e,i)},dispatchEvent(c){if(!(c instanceof ot))throw new Error("Container cannot propagate events outside of the Federated Events API");return c.defaultPrevented=!1,c.path=null,c.target=this,c.manager.dispatchEvent(c),!c.defaultPrevented}};var Qa="in vec2 aPosition;\nout vec2 vTextureCoord;\n\nuniform vec4 uInputSize;\nuniform vec4 uOutputFrame;\nuniform vec4 uOutputTexture;\n\nvec4 filterVertexPosition( void )\n{\n vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;\n \n position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0*uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nvec2 filterTextureCoord( void )\n{\n return aPosition * (uOutputFrame.zw * uInputSize.zw);\n}\n\nvoid main(void)\n{\n gl_Position = filterVertexPosition();\n vTextureCoord = filterTextureCoord();\n}\n",Ja="struct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\nstruct AlphaUniforms {\n uAlpha:f32,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n@group(0) @binding(1) var uTexture: texture_2d<f32>;\n@group(0) @binding(2) var uSampler : sampler;\n\n@group(1) @binding(0) var<uniform> alphaUniforms : AlphaUniforms;\n\nstruct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n };\n\nfn filterVertexPosition(aPosition:vec2<f32>) -> vec4<f32>\n{\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0*gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nfn filterTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{\n return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n}\n\nfn globalTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{\n return (aPosition.xy / gfu.uGlobalFrame.zw) + (gfu.uGlobalFrame.xy / gfu.uGlobalFrame.zw); \n}\n\nfn getSize() -> vec2<f32>\n{\n return gfu.uGlobalFrame.zw;\n}\n \n@vertex\nfn mainVertex(\n @location(0) aPosition : vec2<f32>, \n) -> VSOutput {\n return VSOutput(\n filterVertexPosition(aPosition),\n filterTextureCoord(aPosition)\n );\n}\n\n@fragment\nfn mainFragment(\n @location(0) uv: vec2<f32>,\n @builtin(position) position: vec4<f32>\n) -> @location(0) vec4<f32> {\n \n var sample = textureSample(uTexture, uSampler, uv);\n \n return sample * alphaUniforms.uAlpha;\n}";const $a=class c extends fi{constructor(e){e=__spreadValues(__spreadValues({},c.defaultOptions),e);const t=Kt.from({vertex:{source:Ja,entryPoint:"mainVertex"},fragment:{source:Ja,entryPoint:"mainFragment"}}),i=Vt.from({vertex:Qa,fragment:"\nin vec2 vTextureCoord;\n\nout vec4 finalColor;\n\nuniform float uAlpha;\nuniform sampler2D uTexture;\n\nvoid main()\n{\n finalColor = texture(uTexture, vTextureCoord) * uAlpha;\n}\n",name:"alpha-filter"}),n=e,{alpha:r}=n,s=__objRest(n,["alpha"]),a=new ei({uAlpha:{value:r,type:"f32"}});super(__spreadProps(__spreadValues({},s),{gpuProgram:t,glProgram:i,resources:{alphaUniforms:a}}))}get alpha(){return this.resources.alphaUniforms.uniforms.uAlpha}set alpha(c){this.resources.alphaUniforms.uniforms.uAlpha=c}};$a.defaultOptions={alpha:1};let co=$a;var eo="struct GlobalFilterUniforms {\n uInputSize: vec4<f32>,\n uInputPixel: vec4<f32>,\n uInputClamp: vec4<f32>,\n uOutputFrame: vec4<f32>,\n uGlobalFrame: vec4<f32>,\n uOutputTexture: vec4<f32>,\n};\n\n@group(0) @binding(0) var <uniform> gfu: GlobalFilterUniforms;\n@group(0) @binding(1) var uTexture: texture_2d<f32>;\n@group(0) @binding(2) var uSampler: sampler;\n\nstruct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv: vec2<f32>\n};\n\nfn filterVertexPosition(aPosition: vec2<f32>) -> vec4<f32>\n{\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nfn filterTextureCoord(aPosition: vec2<f32>) -> vec2<f32>\n{\n return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n}\n\n@vertex\nfn mainVertex(\n @location(0) aPosition: vec2<f32>,\n) -> VSOutput {\n return VSOutput(\n filterVertexPosition(aPosition),\n filterTextureCoord(aPosition)\n );\n}\n\n@fragment\nfn mainFragment(\n @location(0) uv: vec2<f32>,\n) -> @location(0) vec4<f32> {\n return textureSample(uTexture, uSampler, uv);\n}\n";class to extends fi{constructor(){super({gpuProgram:Kt.from({vertex:{source:eo,entryPoint:"mainVertex"},fragment:{source:eo,entryPoint:"mainFragment"},name:"passthrough-filter"}),glProgram:Vt.from({vertex:Qa,fragment:"in vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uTexture;\nvoid main() {\n finalColor = texture(uTexture, vTextureCoord);\n}\n",name:"passthrough-filter"})})}}class io{constructor(c){this._renderer=c}push(c,e,t){this._renderer.renderPipes.batch.break(t),t.add({renderPipeId:"filter",canBundle:!1,action:"pushFilter",container:e,filterEffect:c})}pop(c,e,t){this._renderer.renderPipes.batch.break(t),t.add({renderPipeId:"filter",action:"popFilter",canBundle:!1})}execute(c){"pushFilter"===c.action?this._renderer.filter.push(c):"popFilter"===c.action&&this._renderer.filter.pop()}destroy(){this._renderer=null}}function no(c,e,t,i,n,r,s,a){const o=s-t,f=a-i,l=n-t,d=r-i,h=c-t,u=e-i,p=o*o+f*f,g=o*l+f*d,m=o*h+f*u,b=l*l+d*d,v=l*h+d*u,y=1/(p*b-g*g),_=(b*m-g*v)*y,x=(p*v-g*m)*y;return _>=0&&x>=0&&_+x<1}io.extension={type:[s.WebGLPipes,s.WebGPUPipes,s.CanvasPipes],name:"filter"};const ro=new w;const so=new ur({attributes:{aPosition:{buffer:new Float32Array([0,0,1,0,1,1,0,1]),format:"float32x2",stride:8,offset:0}},indexBuffer:new Uint32Array([0,1,2,0,2,3])});class ao{constructor(){this.skip=!1,this.inputTexture=null,this.backTexture=null,this.filters=null,this.bounds=new ic,this.container=null,this.blendRequired=!1,this.outputRenderSurface=null,this.globalFrame={x:0,y:0,width:0,height:0},this.firstEnabledIndex=-1,this.lastEnabledIndex=-1}}class oo{constructor(c){this._filterStackIndex=0,this._filterStack=[],this._filterGlobalUniforms=new ei({uInputSize:{value:new Float32Array(4),type:"vec4<f32>"},uInputPixel:{value:new Float32Array(4),type:"vec4<f32>"},uInputClamp:{value:new Float32Array(4),type:"vec4<f32>"},uOutputFrame:{value:new Float32Array(4),type:"vec4<f32>"},uGlobalFrame:{value:new Float32Array(4),type:"vec4<f32>"},uOutputTexture:{value:new Float32Array(4),type:"vec4<f32>"}}),this._globalFilterBindGroup=new ti({}),this.renderer=c}get activeBackTexture(){var c;return null==(c=this._activeFilterData)?void 0:c.backTexture}push(c){const e=this.renderer,t=c.filterEffect.filters,i=this._pushFilterData();i.skip=!1,i.filters=t,i.container=c.container,i.outputRenderSurface=e.renderTarget.renderSurface;const n=e.renderTarget.renderTarget.colorTexture.source,r=n.resolution,s=n.antialias;if(t.every(c=>!c.enabled))return void(i.skip=!0);const a=i.bounds;if(this._calculateFilterArea(c,a),this._calculateFilterBounds(i,e.renderTarget.rootViewPort,s,r,1),i.skip)return;const o=this._getPreviousFilterData(),f=this._findFilterResolution(r);let l=0,d=0;o&&(l=o.bounds.minX,d=o.bounds.minY),this._calculateGlobalFrame(i,l,d,f,n.width,n.height),this._setupFilterTextures(i,a,e,o)}generateFilteredTexture({texture:c,filters:e}){const t=this._pushFilterData();this._activeFilterData=t,t.skip=!1,t.filters=e;const i=c.source,n=i.resolution,r=i.antialias;if(e.every(c=>!c.enabled))return t.skip=!0,c;const s=t.bounds;if(s.addRect(c.frame),this._calculateFilterBounds(t,s.rectangle,r,n,0),t.skip)return c;const a=n;this._calculateGlobalFrame(t,0,0,a,i.width,i.height),t.outputRenderSurface=ge.getOptimalTexture(s.width,s.height,t.resolution,t.antialias),t.backTexture=cc.EMPTY,t.inputTexture=c;this.renderer.renderTarget.finishRenderPass(),this._applyFiltersToTexture(t,!0);const o=t.outputRenderSurface;return o.source.alphaMode="premultiplied-alpha",o}pop(){const c=this.renderer,e=this._popFilterData();e.skip||(c.globalUniforms.pop(),c.renderTarget.finishRenderPass(),this._activeFilterData=e,this._applyFiltersToTexture(e,!1),e.blendRequired&&ge.returnTexture(e.backTexture),ge.returnTexture(e.inputTexture))}getBackTexture(c,e,t){const i=c.colorTexture.source._resolution,n=ge.getOptimalTexture(e.width,e.height,i,!1);let r=e.minX,s=e.minY;t&&(r-=t.minX,s-=t.minY),r=Math.floor(r*i),s=Math.floor(s*i);const a=Math.ceil(e.width*i),o=Math.ceil(e.height*i);return this.renderer.renderTarget.copyToTexture(c,n,{x:r,y:s},{width:a,height:o},{x:0,y:0}),n}applyFilter(c,e,t,i){const n=this.renderer,r=this._activeFilterData,s=r.outputRenderSurface===t,a=n.renderTarget.rootRenderTarget.colorTexture.source._resolution,o=this._findFilterResolution(a);let f=0,l=0;if(s){const c=this._findPreviousFilterOffset();f=c.x,l=c.y}this._updateFilterUniforms(e,t,r,f,l,o,s,i);const d=c.enabled?c:this._getPassthroughFilter();this._setupBindGroupsAndRender(d,e,n)}calculateSpriteMatrix(c,e){const t=this._activeFilterData,i=c.set(t.inputTexture._source.width,0,0,t.inputTexture._source.height,t.bounds.minX,t.bounds.minY),n=e.worldTransform.copyTo(w.shared),r=e.renderGroup||e.parentRenderGroup;return r&&r.cacheToLocalTransform&&n.prepend(r.cacheToLocalTransform),n.invert(),i.prepend(n),i.scale(1/e.texture.orig.width,1/e.texture.orig.height),i.translate(e.anchor.x,e.anchor.y),i}destroy(){var c;null==(c=this._passthroughFilter)||c.destroy(!0),this._passthroughFilter=null}_getPassthroughFilter(){return null!=this._passthroughFilter||(this._passthroughFilter=new to),this._passthroughFilter}_setupBindGroupsAndRender(c,e,t){if(t.renderPipes.uniformBatch){const c=t.renderPipes.uniformBatch.getUboResource(this._filterGlobalUniforms);this._globalFilterBindGroup.setResource(c,0)}else this._globalFilterBindGroup.setResource(this._filterGlobalUniforms,0);this._globalFilterBindGroup.setResource(e.source,1),this._globalFilterBindGroup.setResource(e.source.style,2),c.groups[0]=this._globalFilterBindGroup,t.encoder.draw({geometry:so,shader:c,state:c._state,topology:"triangle-list"}),t.type===ii.WEBGL&&t.renderTarget.finishRenderPass()}_setupFilterTextures(c,e,t,i){if(c.backTexture=cc.EMPTY,c.inputTexture=ge.getOptimalTexture(e.width,e.height,c.resolution,c.antialias),c.blendRequired){t.renderTarget.finishRenderPass();const n=t.renderTarget.getRenderTarget(c.outputRenderSurface);c.backTexture=this.getBackTexture(n,e,null==i?void 0:i.bounds)}t.renderTarget.bind(c.inputTexture,!0),t.globalUniforms.push({offset:e})}_calculateGlobalFrame(c,e,t,i,n,r){const s=c.globalFrame;s.x=e*i,s.y=t*i,s.width=n*i,s.height=r*i}_updateFilterUniforms(c,e,t,i,n,r,s,a){const o=this._filterGlobalUniforms.uniforms,f=o.uOutputFrame,l=o.uInputSize,d=o.uInputPixel,h=o.uInputClamp,u=o.uGlobalFrame,p=o.uOutputTexture;s?(f[0]=t.bounds.minX-i,f[1]=t.bounds.minY-n):(f[0]=0,f[1]=0),f[2]=c.frame.width,f[3]=c.frame.height,l[0]=c.source.width,l[1]=c.source.height,l[2]=1/l[0],l[3]=1/l[1],d[0]=c.source.pixelWidth,d[1]=c.source.pixelHeight,d[2]=1/d[0],d[3]=1/d[1],h[0]=.5*d[2],h[1]=.5*d[3],h[2]=c.frame.width*l[2]-.5*d[2],h[3]=c.frame.height*l[3]-.5*d[3];const g=this.renderer.renderTarget.rootRenderTarget.colorTexture;u[0]=i*r,u[1]=n*r,u[2]=g.source.width*r,u[3]=g.source.height*r,e instanceof cc&&(e.source.resource=null);const m=this.renderer.renderTarget.getRenderTarget(e);this.renderer.renderTarget.bind(e,!!a),e instanceof cc?(p[0]=e.frame.width,p[1]=e.frame.height):(p[0]=m.width,p[1]=m.height),p[2]=m.isRoot?-1:1,this._filterGlobalUniforms.update()}_findFilterResolution(c){let e=this._filterStackIndex-1;for(;e>0&&this._filterStack[e].skip;)--e;return e>0&&this._filterStack[e].inputTexture?this._filterStack[e].inputTexture.source._resolution:c}_findPreviousFilterOffset(){let c=0,e=0,t=this._filterStackIndex;for(;t>0;){t--;const i=this._filterStack[t];if(!i.skip){c=i.bounds.minX,e=i.bounds.minY;break}}return{x:c,y:e}}_calculateFilterArea(c,e){if(c.renderables?function(c,e){var t;e.clear();const i=e.matrix;for(let n=0;n<c.length;n++){const i=c[n];if(i.globalDisplayStatus<7)continue;const r=null!=(t=i.renderGroup)?t:i.parentRenderGroup;(null==r?void 0:r.isCachedAsTexture)?e.matrix=ro.copyFrom(r.textureOffsetInverseTransform).append(i.worldTransform):(null==r?void 0:r._parentCacheAsTextureRenderGroup)?e.matrix=ro.copyFrom(r._parentCacheAsTextureRenderGroup.inverseWorldTransform).append(i.groupTransform):e.matrix=i.worldTransform,e.addBounds(i.bounds)}e.matrix=i}(c.renderables,e):c.filterEffect.filterArea?(e.clear(),e.addRect(c.filterEffect.filterArea),e.applyMatrix(c.container.worldTransform)):c.container.getFastGlobalBounds(!0,e),c.container){const t=(c.container.renderGroup||c.container.parentRenderGroup).cacheToLocalTransform;t&&e.applyMatrix(t)}}_applyFiltersToTexture(c,e){const t=c.inputTexture,i=c.bounds,n=c.filters,r=c.firstEnabledIndex,s=c.lastEnabledIndex;if(this._globalFilterBindGroup.setResource(t.source.style,2),this._globalFilterBindGroup.setResource(c.backTexture.source,3),r===s)n[r].apply(this,t,c.outputRenderSurface,e);else{let t=c.inputTexture;const a=ge.getOptimalTexture(i.width,i.height,t.source._resolution,!1);let o=a;for(let c=r;c<s;c++){const e=n[c];if(!e.enabled)continue;e.apply(this,t,o,!0);const i=t;t=o,o=i}n[s].apply(this,t,c.outputRenderSurface,e),ge.returnTexture(a)}}_calculateFilterBounds(c,e,t,i,n){var r,s;const a=this.renderer,o=c.bounds,f=c.filters;let l=1/0,d=0,h=!0,u=!1,p=!1,g=!0,m=-1,b=-1;for(let v=0;v<f.length;v++){const c=f[v];if(!c.enabled)continue;-1===m&&(m=v),b=v,l=Math.min(l,"inherit"===c.resolution?i:c.resolution),d+=c.padding,"off"===c.antialias?h=!1:"inherit"===c.antialias&&h&&(h=t),c.clipToViewport||(g=!1);if(!!!(c.compatibleRenderers&a.type)){p=!1;break}if(c.blendRequired&&null!=(s=null==(r=a.backBuffer)?void 0:r.useBackBuffer)&&!s){Bc("Blend filter requires backBuffer on WebGL renderer to be enabled. Set `useBackBuffer: true` in the renderer options."),p=!1;break}p=!0,u||(u=c.blendRequired)}p?(g&&o.fitBounds(0,e.width/i,0,e.height/i),o.scale(l).ceil().scale(1/l).pad((0|d)*n),o.isPositive?(c.antialias=h,c.resolution=l,c.blendRequired=u,c.firstEnabledIndex=m,c.lastEnabledIndex=b):c.skip=!0):c.skip=!0}_popFilterData(){return this._filterStackIndex--,this._filterStack[this._filterStackIndex]}_getPreviousFilterData(){let c,e=this._filterStackIndex-1;for(;e>0&&(e--,c=this._filterStack[e],c.skip););return c}_pushFilterData(){let c=this._filterStack[this._filterStackIndex];return c||(c=this._filterStack[this._filterStackIndex]=new ao),this._filterStackIndex++,c}}oo.extension={type:[s.WebGLSystem,s.WebGPUSystem],name:"filter"};var fo="struct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\nstruct MaskUniforms {\n uFilterMatrix:mat3x3<f32>,\n uMaskClamp:vec4<f32>,\n uAlpha:f32,\n uInverse:f32,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n@group(0) @binding(1) var uTexture: texture_2d<f32>;\n@group(0) @binding(2) var uSampler : sampler;\n\n@group(1) @binding(0) var<uniform> filterUniforms : MaskUniforms;\n@group(1) @binding(1) var uMaskTexture: texture_2d<f32>;\n\nstruct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>,\n @location(1) filterUv : vec2<f32>,\n};\n\nfn filterVertexPosition(aPosition:vec2<f32>) -> vec4<f32>\n{\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0*gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nfn filterTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{\n return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n}\n\nfn globalTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{\n return (aPosition.xy / gfu.uGlobalFrame.zw) + (gfu.uGlobalFrame.xy / gfu.uGlobalFrame.zw);\n}\n\nfn getFilterCoord(aPosition:vec2<f32> ) -> vec2<f32>\n{\n return ( filterUniforms.uFilterMatrix * vec3( filterTextureCoord(aPosition), 1.0) ).xy;\n}\n\nfn getSize() -> vec2<f32>\n{\n return gfu.uGlobalFrame.zw;\n}\n\n@vertex\nfn mainVertex(\n @location(0) aPosition : vec2<f32>,\n) -> VSOutput {\n return VSOutput(\n filterVertexPosition(aPosition),\n filterTextureCoord(aPosition),\n getFilterCoord(aPosition)\n );\n}\n\n@fragment\nfn mainFragment(\n @location(0) uv: vec2<f32>,\n @location(1) filterUv: vec2<f32>,\n @builtin(position) position: vec4<f32>\n) -> @location(0) vec4<f32> {\n\n var maskClamp = filterUniforms.uMaskClamp;\n var uAlpha = filterUniforms.uAlpha;\n\n var clip = step(3.5,\n step(maskClamp.x, filterUv.x) +\n step(maskClamp.y, filterUv.y) +\n step(filterUv.x, maskClamp.z) +\n step(filterUv.y, maskClamp.w));\n\n var mask = textureSample(uMaskTexture, uSampler, filterUv);\n var source = textureSample(uTexture, uSampler, uv);\n var alphaMul = 1.0 - uAlpha * (1.0 - mask.a);\n\n var a: f32 = alphaMul * mask.r * uAlpha * clip;\n\n if (filterUniforms.uInverse == 1.0) {\n a = 1.0 - a;\n }\n\n return source * a;\n}\n";class lo extends fi{constructor(c){const e=c,{sprite:t}=e,i=__objRest(e,["sprite"]),n=new $(t.texture),r=new ei({uFilterMatrix:{value:new w,type:"mat3x3<f32>"},uMaskClamp:{value:n.uClampFrame,type:"vec4<f32>"},uAlpha:{value:1,type:"f32"},uInverse:{value:c.inverse?1:0,type:"f32"}}),s=Kt.from({vertex:{source:fo,entryPoint:"mainVertex"},fragment:{source:fo,entryPoint:"mainFragment"}}),a=Vt.from({vertex:"in vec2 aPosition;\n\nout vec2 vTextureCoord;\nout vec2 vMaskCoord;\n\n\nuniform vec4 uInputSize;\nuniform vec4 uOutputFrame;\nuniform vec4 uOutputTexture;\nuniform mat3 uFilterMatrix;\n\nvec4 filterVertexPosition( vec2 aPosition )\n{\n vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;\n \n position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0*uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nvec2 filterTextureCoord( vec2 aPosition )\n{\n return aPosition * (uOutputFrame.zw * uInputSize.zw);\n}\n\nvec2 getFilterCoord( vec2 aPosition )\n{\n return ( uFilterMatrix * vec3( filterTextureCoord(aPosition), 1.0) ).xy;\n} \n\nvoid main(void)\n{\n gl_Position = filterVertexPosition(aPosition);\n vTextureCoord = filterTextureCoord(aPosition);\n vMaskCoord = getFilterCoord(aPosition);\n}\n",fragment:"in vec2 vMaskCoord;\nin vec2 vTextureCoord;\n\nuniform sampler2D uTexture;\nuniform sampler2D uMaskTexture;\n\nuniform float uAlpha;\nuniform vec4 uMaskClamp;\nuniform float uInverse;\n\nout vec4 finalColor;\n\nvoid main(void)\n{\n float clip = step(3.5,\n step(uMaskClamp.x, vMaskCoord.x) +\n step(uMaskClamp.y, vMaskCoord.y) +\n step(vMaskCoord.x, uMaskClamp.z) +\n step(vMaskCoord.y, uMaskClamp.w));\n\n // TODO look into why this is needed\n float npmAlpha = uAlpha;\n vec4 original = texture(uTexture, vTextureCoord);\n vec4 masky = texture(uMaskTexture, vMaskCoord);\n float alphaMul = 1.0 - npmAlpha * (1.0 - masky.a);\n\n float a = alphaMul * masky.r * npmAlpha * clip;\n\n if (uInverse == 1.0) {\n a = 1.0 - a;\n }\n\n finalColor = original * a;\n}\n",name:"mask-filter"});super(__spreadProps(__spreadValues({},i),{gpuProgram:s,glProgram:a,clipToViewport:!1,resources:{filterUniforms:r,uMaskTexture:t.texture.source}})),this.sprite=t,this._textureMatrix=n}set inverse(c){this.resources.filterUniforms.uniforms.uInverse=c?1:0}get inverse(){return 1===this.resources.filterUniforms.uniforms.uInverse}apply(c,e,t,i){this._textureMatrix.texture=this.sprite.texture,c.calculateSpriteMatrix(this.resources.filterUniforms.uniforms.uFilterMatrix,this.sprite).prepend(this._textureMatrix.mapCoord),this.resources.uMaskTexture=this.sprite.texture.source,c.applyFilter(this,e,t,i)}}class ho{constructor(){this.isBatchable=!1}reset(){this.isBatchable=!1,this.context=null,this.graphicsData&&(this.graphicsData.destroy(),this.graphicsData=null)}destroy(){this.reset()}}class uo{constructor(){this.instructions=new ue}init(){this.instructions.reset()}destroy(){this.instructions.destroy(),this.instructions=null}}const po=class c{constructor(c){this._renderer=c,this._managedContexts=new Qr({renderer:c,type:"resource",name:"graphicsContext"})}init(e){var t;c.defaultOptions.bezierSmoothness=null!=(t=null==e?void 0:e.bezierSmoothness)?t:c.defaultOptions.bezierSmoothness}getContextRenderData(c){return this.getGpuContext(c).graphicsData||this._initContextRenderData(c)}updateGpuContext(c){const e=c._gpuData,t=!!e[this._renderer.uid],i=e[this._renderer.uid]||this._initContext(c);return!c.dirty&&t||(t&&i.reset(),i.isBatchable=!1,c.dirty=!1),i}getGpuContext(c){return c._gpuData[this._renderer.uid]||this._initContext(c)}_initContextRenderData(c){const e=new uo;return this.getGpuContext(c).graphicsData=e,e.init(),e}_initContext(c){const e=new ho;return e.context=c,c._gpuData[this._renderer.uid]=e,this._managedContexts.add(c),e}destroy(){this._managedContexts.destroy(),this._renderer=null}};po.extension={type:[s.CanvasSystem],name:"graphicsContext"},po.defaultOptions={bezierSmoothness:.5};let go=po;class mo{constructor(c,e){this.state=ai.for2d(),this.renderer=c,this._adaptor=e,this.renderer.runners.contextChange.add(this),this._managedGraphics=new Qr({renderer:c,type:"renderable",priority:-1,name:"graphics"})}contextChange(){this._adaptor.contextChange(this.renderer)}validateRenderable(c){return!1}addRenderable(c,e){this._managedGraphics.add(c),this.renderer.renderPipes.batch.break(e),e.add(c)}updateRenderable(c){}execute(c){c.isRenderable&&this._adaptor.execute(this,c)}destroy(){this._managedGraphics.destroy(),this.renderer=null,this._adaptor.destroy(),this._adaptor=null}}function bo(c,e,t){const i=(c>>24&255)/255;e[t++]=(255&c)/255*i,e[t++]=(c>>8&255)/255*i,e[t++]=(c>>16&255)/255*i,e[t++]=i}mo.extension={type:[s.CanvasPipes],name:"graphics"};class vo{constructor(){this.batches=[],this.batched=!1}destroy(){this.batches.forEach(c=>{Lc.return(c)}),this.batches.length=0}}class yo{constructor(c,e){this.state=ai.for2d(),this.renderer=c,this._adaptor=e,this.renderer.runners.contextChange.add(this),this._managedGraphics=new Qr({renderer:c,type:"renderable",priority:-1,name:"graphics"})}contextChange(){this._adaptor.contextChange(this.renderer)}validateRenderable(c){const e=c.context,t=!!c._gpuData,i=this.renderer.graphicsContext.updateGpuContext(e);return!(!i.isBatchable&&t===i.isBatchable)}addRenderable(c,e){const t=this.renderer.graphicsContext.updateGpuContext(c.context);c.didViewUpdate&&this._rebuild(c),t.isBatchable?this._addToBatcher(c,e):(this.renderer.renderPipes.batch.break(e),e.add(c))}updateRenderable(c){const e=this._getGpuDataForRenderable(c).batches;for(let t=0;t<e.length;t++){const c=e[t];c._batcher.updateElement(c)}}execute(c){if(!c.isRenderable)return;const e=this.renderer,t=c.context;if(!e.graphicsContext.getGpuContext(t).batches.length)return;const i=t.customShader||this._adaptor.shader;this.state.blendMode=c.groupBlendMode;const n=i.resources.localUniforms.uniforms;n.uTransformMatrix=c.groupTransform,n.uRound=e._roundPixels|c._roundPixels,bo(c.groupColorAlpha,n.uColor,0),this._adaptor.execute(this,c)}_rebuild(c){const e=this._getGpuDataForRenderable(c),t=this.renderer.graphicsContext.updateGpuContext(c.context);e.destroy(),t.isBatchable&&this._updateBatchesForRenderable(c,e)}_addToBatcher(c,e){const t=this.renderer.renderPipes.batch,i=this._getGpuDataForRenderable(c).batches;for(let n=0;n<i.length;n++){const c=i[n];t.addToBatch(c,e)}}_getGpuDataForRenderable(c){return c._gpuData[this.renderer.uid]||this._initGpuDataForRenderable(c)}_initGpuDataForRenderable(c){const e=new vo;return c._gpuData[this.renderer.uid]=e,this._managedGraphics.add(c),e}_updateBatchesForRenderable(c,e){const t=c.context,i=this.renderer.graphicsContext.getGpuContext(t),n=this.renderer._roundPixels|c._roundPixels;e.batches=i.batches.map(e=>{const t=Lc.get(cs);return e.copyTo(t),t.renderable=c,t.roundPixels=n,t})}destroy(){this._managedGraphics.destroy(),this.renderer=null,this._adaptor.destroy(),this._adaptor=null,this.state=null}}yo.extension={type:[s.WebGLPipes,s.WebGPUPipes],name:"graphics"},f.add(mo),f.add(yo),f.add(go),f.add(Es);class _o extends Se{constructor(c){c instanceof pa&&(c={context:c});const e=c||{},{context:t,roundPixels:i}=e,n=__objRest(e,["context","roundPixels"]);super(__spreadValues({label:"Graphics"},n)),this.renderPipeId="graphics",t?this.context=t:(this.context=this._ownedContext=new pa,this.context.autoGarbageCollect=this.autoGarbageCollect),this.didViewUpdate=!0,this.allowChildren=!1,this.roundPixels=null!=i&&i}set context(c){c!==this._context&&(this._context&&(this._context.off("update",this.onViewUpdate,this),this._context.off("unload",this.unload,this)),this._context=c,this._context.on("update",this.onViewUpdate,this),this._context.on("unload",this.unload,this),this.onViewUpdate())}get context(){return this._context}get bounds(){return this._context.bounds}updateBounds(){}containsPoint(c){return this._context.containsPoint(c)}destroy(c){this._ownedContext&&!c?this._ownedContext.destroy(c):!0!==c&&!0!==(null==c?void 0:c.context)||this._context.destroy(c),this._ownedContext=null,this._context=null,super.destroy(c)}_onTouch(c){this._gcLastUsed=c,this._context._gcLastUsed=c}_callContextMethod(c,e){return this.context[c](...e),this}setFillStyle(...c){return this._callContextMethod("setFillStyle",c)}setStrokeStyle(...c){return this._callContextMethod("setStrokeStyle",c)}fill(...c){return this._callContextMethod("fill",c)}stroke(...c){return this._callContextMethod("stroke",c)}texture(...c){return this._callContextMethod("texture",c)}beginPath(){return this._callContextMethod("beginPath",[])}cut(){return this._callContextMethod("cut",[])}arc(...c){return this._callContextMethod("arc",c)}arcTo(...c){return this._callContextMethod("arcTo",c)}arcToSvg(...c){return this._callContextMethod("arcToSvg",c)}bezierCurveTo(...c){return this._callContextMethod("bezierCurveTo",c)}closePath(){return this._callContextMethod("closePath",[])}ellipse(...c){return this._callContextMethod("ellipse",c)}circle(...c){return this._callContextMethod("circle",c)}path(...c){return this._callContextMethod("path",c)}lineTo(...c){return this._callContextMethod("lineTo",c)}moveTo(...c){return this._callContextMethod("moveTo",c)}quadraticCurveTo(...c){return this._callContextMethod("quadraticCurveTo",c)}rect(...c){return this._callContextMethod("rect",c)}roundRect(...c){return this._callContextMethod("roundRect",c)}poly(...c){return this._callContextMethod("poly",c)}regularPoly(...c){return this._callContextMethod("regularPoly",c)}roundPoly(...c){return this._callContextMethod("roundPoly",c)}roundShape(...c){return this._callContextMethod("roundShape",c)}filletRect(...c){return this._callContextMethod("filletRect",c)}chamferRect(...c){return this._callContextMethod("chamferRect",c)}star(...c){return this._callContextMethod("star",c)}svg(...c){return this._callContextMethod("svg",c)}restore(...c){return this._callContextMethod("restore",c)}save(){return this._callContextMethod("save",[])}getTransform(){return this.context.getTransform()}resetTransform(){return this._callContextMethod("resetTransform",[])}rotateTransform(...c){return this._callContextMethod("rotate",c)}scaleTransform(...c){return this._callContextMethod("scale",c)}setTransform(...c){return this._callContextMethod("setTransform",c)}transform(...c){return this._callContextMethod("transform",c)}translateTransform(...c){return this._callContextMethod("translate",c)}clear(){return this._callContextMethod("clear",[])}get fillStyle(){return this._context.fillStyle}set fillStyle(c){this._context.fillStyle=c}get strokeStyle(){return this._context.strokeStyle}set strokeStyle(c){this._context.strokeStyle=c}clone(c=!1){if(c)return new _o(this._context.clone());this._ownedContext=null;return new _o(this._context)}lineStyle(c,e,t){V(G,"Graphics#lineStyle is no longer needed. Use Graphics#setStrokeStyle to set the stroke style.");const i={};return c&&(i.width=c),e&&(i.color=e),t&&(i.alpha=t),this.context.strokeStyle=i,this}beginFill(c,e){V(G,"Graphics#beginFill is no longer needed. Use Graphics#fill to fill the shape with the desired style.");const t={};return void 0!==c&&(t.color=c),void 0!==e&&(t.alpha=e),this.context.fillStyle=t,this}endFill(){V(G,"Graphics#endFill is no longer needed. Use Graphics#fill to fill the shape with the desired style."),this.context.fill();const c=this.context.strokeStyle;return c.width===pa.defaultStrokeStyle.width&&c.color===pa.defaultStrokeStyle.color&&c.alpha===pa.defaultStrokeStyle.alpha||this.context.stroke(),this}drawCircle(...c){return V(G,"Graphics#drawCircle has been renamed to Graphics#circle"),this._callContextMethod("circle",c)}drawEllipse(...c){return V(G,"Graphics#drawEllipse has been renamed to Graphics#ellipse"),this._callContextMethod("ellipse",c)}drawPolygon(...c){return V(G,"Graphics#drawPolygon has been renamed to Graphics#poly"),this._callContextMethod("poly",c)}drawRect(...c){return V(G,"Graphics#drawRect has been renamed to Graphics#rect"),this._callContextMethod("rect",c)}drawRoundedRect(...c){return V(G,"Graphics#drawRoundedRect has been renamed to Graphics#roundRect"),this._callContextMethod("roundRect",c)}drawStar(...c){return V(G,"Graphics#drawStar has been renamed to Graphics#star"),this._callContextMethod("star",c)}}const xo=class c extends ur{constructor(...e){var t;let i=null!=(t=e[0])?t:{};i instanceof Float32Array&&(V(G,"use new MeshGeometry({ positions, uvs, indices }) instead"),i={positions:i,uvs:e[1],indices:e[2]}),i=__spreadValues(__spreadValues({},c.defaultOptions),i);const n=i.positions||new Float32Array([0,0,1,0,1,1,0,1]);let r=i.uvs;r||(r=i.positions?new Float32Array(n.length):new Float32Array([0,0,1,0,1,1,0,1]));const s=i.indices||new Uint32Array([0,1,2,0,2,3]),a=i.shrinkBuffersToFit;super({attributes:{aPosition:{buffer:new dr({data:n,label:"attribute-mesh-positions",shrinkToFit:a,usage:lr.VERTEX|lr.COPY_DST}),format:"float32x2",stride:8,offset:0},aUV:{buffer:new dr({data:r,label:"attribute-mesh-uvs",shrinkToFit:a,usage:lr.VERTEX|lr.COPY_DST}),format:"float32x2",stride:8,offset:0}},indexBuffer:new dr({data:s,label:"index-mesh-buffer",shrinkToFit:a,usage:lr.INDEX|lr.COPY_DST}),topology:i.topology}),this.batchMode="auto"}get positions(){return this.attributes.aPosition.buffer.data}set positions(c){this.attributes.aPosition.buffer.data=c}get uvs(){return this.attributes.aUV.buffer.data}set uvs(c){this.attributes.aUV.buffer.data=c}get indices(){return this.indexBuffer.data}set indices(c){this.indexBuffer.data=c}};xo.defaultOptions={topology:"triangle-list",shrinkBuffersToFit:!1};let So,wo=xo;class Co{constructor(){this.batcherName="default",this.packAsQuad=!1,this.indexOffset=0,this.attributeOffset=0,this.roundPixels=0,this._batcher=null,this._batch=null,this._textureMatrixUpdateId=-1,this._uvUpdateId=-1}get blendMode(){return this.renderable.groupBlendMode}get topology(){return this._topology||this.geometry.topology}set topology(c){this._topology=c}reset(){this.renderable=null,this.texture=null,this._batcher=null,this._batch=null,this.geometry=null,this._uvUpdateId=-1,this._textureMatrixUpdateId=-1}setTexture(c){this.texture!==c&&(this.texture=c,this._textureMatrixUpdateId=-1)}get uvs(){const c=this.geometry.getBuffer("aUV"),e=c.data;let t=e;const i=this.texture.textureMatrix;return i.isSimple||(t=this._transformedUvs,this._textureMatrixUpdateId===i._updateID&&this._uvUpdateId===c._updateID||((!t||t.length<e.length)&&(t=this._transformedUvs=new Float32Array(e.length)),this._textureMatrixUpdateId=i._updateID,this._uvUpdateId=c._updateID,i.multiplyUvs(e,t))),t}get positions(){return this.geometry.positions}get indices(){return this.geometry.indices}get color(){return this.renderable.groupColorAlpha}get groupTransform(){return this.renderable.groupTransform}get attributeSize(){return this.geometry.positions.length/2}get indexSize(){return this.geometry.indices.length}}class Ao{destroy(){}}class To{constructor(c,e){this.localUniforms=new ei({uTransformMatrix:{value:new w,type:"mat3x3<f32>"},uColor:{value:new Float32Array([1,1,1,1]),type:"vec4<f32>"},uRound:{value:0,type:"f32"}}),this.localUniformsBindGroup=new ti({0:this.localUniforms}),this.renderer=c,this._adaptor=e,this._adaptor.init()}validateRenderable(c){const e=this._getMeshData(c),t=e.batched,i=c.batched;if(e.batched=i,t!==i)return!0;if(i){const t=c._geometry;if(t.indices.length!==e.indexSize||t.positions.length!==e.vertexSize)return e.indexSize=t.indices.length,e.vertexSize=t.positions.length,!0;const i=this._getBatchableMesh(c);return i.texture.uid!==c._texture.uid&&(i._textureMatrixUpdateId=-1),!i._batcher.checkAndUpdateTexture(i,c._texture)}return!1}addRenderable(c,e){var t,i;const n=this.renderer.renderPipes.batch,r=this._getMeshData(c);if(c.didViewUpdate&&(r.indexSize=null==(t=c._geometry.indices)?void 0:t.length,r.vertexSize=null==(i=c._geometry.positions)?void 0:i.length),r.batched){const t=this._getBatchableMesh(c);t.setTexture(c._texture),t.geometry=c._geometry,n.addToBatch(t,e)}else n.break(e),e.add(c)}updateRenderable(c){if(c.batched){const e=this._getBatchableMesh(c);e.setTexture(c._texture),e.geometry=c._geometry,e._batcher.updateElement(e)}}execute(c){if(!c.isRenderable)return;c.state.blendMode=Kn(c.groupBlendMode,c.texture._source);const e=this.localUniforms;e.uniforms.uTransformMatrix=c.groupTransform,e.uniforms.uRound=this.renderer._roundPixels|c._roundPixels,e.update(),bo(c.groupColorAlpha,e.uniforms.uColor,0),this._adaptor.execute(this,c)}_getMeshData(c){var e,t;return(e=c._gpuData)[t=this.renderer.uid]||(e[t]=new Ao),c._gpuData[this.renderer.uid].meshData||this._initMeshData(c)}_initMeshData(c){return c._gpuData[this.renderer.uid].meshData={batched:c.batched,indexSize:0,vertexSize:0},c._gpuData[this.renderer.uid].meshData}_getBatchableMesh(c){var e,t;return(e=c._gpuData)[t=this.renderer.uid]||(e[t]=new Ao),c._gpuData[this.renderer.uid].batchableMesh||this._initBatchableMesh(c)}_initBatchableMesh(c){const e=new Co;return e.renderable=c,e.setTexture(c._texture),e.transform=c.groupTransform,e.roundPixels=this.renderer._roundPixels|c._roundPixels,c._gpuData[this.renderer.uid].batchableMesh=e,e}destroy(){this.localUniforms=null,this.localUniformsBindGroup=null,this._adaptor.destroy(),this._adaptor=null,this.renderer=null}}To.extension={type:[s.WebGLPipes,s.WebGPUPipes],name:"mesh"},f.add(To);class Po extends Se{constructor(...c){var e;let t=c[0];t instanceof ur&&(V(G,"Mesh: use new Mesh({ geometry, shader }) instead"),t={geometry:t,shader:c[1]},c[3]&&(V(G,"Mesh: drawMode argument has been removed, use geometry.topology instead"),t.geometry.topology=c[3]));const i=t,{geometry:n,shader:r,texture:s,roundPixels:a,state:o}=i,f=__objRest(i,["geometry","shader","texture","roundPixels","state"]);super(__spreadValues({label:"Mesh"},f)),this.renderPipeId="mesh",this._shader=null,this.allowChildren=!1,this.shader=null!=r?r:null,this.texture=null!=(e=null!=s?s:null==r?void 0:r.texture)?e:cc.WHITE,this.state=null!=o?o:ai.for2d(),this._geometry=n,this._geometry.on("update",this.onViewUpdate,this),this.roundPixels=null!=a&&a}get material(){return V(G,"mesh.material property has been removed, use mesh.shader instead"),this._shader}set shader(c){this._shader!==c&&(this._shader=c,this.onViewUpdate())}get shader(){return this._shader}set geometry(c){var e;this._geometry!==c&&(null==(e=this._geometry)||e.off("update",this.onViewUpdate,this),c.on("update",this.onViewUpdate,this),this._geometry=c,this.onViewUpdate())}get geometry(){return this._geometry}set texture(c){c||(c=cc.EMPTY);const e=this._texture;e!==c&&(e&&e.dynamic&&e.off("update",this.onViewUpdate,this),c.dynamic&&c.on("update",this.onViewUpdate,this),this.shader&&(this.shader.texture=c),this._texture=c,this.onViewUpdate())}get texture(){return this._texture}get batched(){return!this._shader&&(!(12&this.state.data)&&(this._geometry instanceof wo&&("auto"===this._geometry.batchMode?this._geometry.positions.length/2<=100:"batch"===this._geometry.batchMode)))}get bounds(){return this._geometry.bounds}updateBounds(){this._bounds=this._geometry.bounds}containsPoint(c){const{x:e,y:t}=c;if(!this.bounds.containsPoint(e,t))return!1;const i=this.geometry.getBuffer("aPosition").data,n="triangle-strip"===this.geometry.topology?3:1;if(this.geometry.getIndex()){const c=this.geometry.getIndex().data,r=c.length;for(let s=0;s+2<r;s+=n){const n=2*c[s],r=2*c[s+1],a=2*c[s+2];if(no(e,t,i[n],i[n+1],i[r],i[r+1],i[a],i[a+1]))return!0}}else{const c=i.length/2;for(let r=0;r+2<c;r+=n){const c=2*r,n=2*(r+1),s=2*(r+2);if(no(e,t,i[c],i[c+1],i[n],i[n+1],i[s],i[s+1]))return!0}}return!1}destroy(c){var e;super.destroy(c);if("boolean"==typeof c?c:null==c?void 0:c.texture){const e="boolean"==typeof c?c:null==c?void 0:c.textureSource;this._texture.destroy(e)}null==(e=this._geometry)||e.off("update",this.onViewUpdate,this),this._texture=null,this._geometry=null,this._shader=null}}class Mo extends we{constructor(...c){let e=c[0];Array.isArray(c[0])&&(e={textures:c[0],autoUpdate:c[1]});const t=e,{animationSpeed:i=1,autoPlay:n=!1,autoUpdate:r=!0,loop:s=!0,onComplete:a=null,onFrameChange:o=null,onLoop:f=null,textures:l,updateAnchor:d=!1}=t,h=__objRest(t,["animationSpeed","autoPlay","autoUpdate","loop","onComplete","onFrameChange","onLoop","textures","updateAnchor"]),[u]=l;super(__spreadProps(__spreadValues({},h),{texture:u instanceof cc?u:u.texture})),this._textures=null,this._durations=null,this._autoUpdate=r,this._isConnectedToTicker=!1,this.animationSpeed=i,this.loop=s,this.updateAnchor=d,this.onComplete=a,this.onFrameChange=o,this.onLoop=f,this._currentTime=0,this._playing=!1,this._previousFrame=null,this.textures=l,n&&this.play()}stop(){this._playing&&(this._playing=!1,this._autoUpdate&&this._isConnectedToTicker&&(Ge.shared.remove(this.update,this),this._isConnectedToTicker=!1))}play(){this._playing||(this._playing=!0,this._autoUpdate&&!this._isConnectedToTicker&&(Ge.shared.add(this.update,this,De.HIGH),this._isConnectedToTicker=!0))}gotoAndStop(c){this.stop(),this.currentFrame=c}gotoAndPlay(c){this.currentFrame=c,this.play()}update(c){if(!this._playing)return;const e=c.deltaTime,t=this.animationSpeed*e,i=this.currentFrame;if(null!==this._durations){let c=this._currentTime%1*this._durations[this.currentFrame];for(c+=t/60*1e3;c<0;)this._currentTime--,c+=this._durations[this.currentFrame];const i=Math.sign(this.animationSpeed*e);for(this._currentTime=Math.floor(this._currentTime);c>=this._durations[this.currentFrame];)c-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=c/this._durations[this.currentFrame]}else this._currentTime+=t;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):i!==this.currentFrame&&(this.loop&&this.onLoop&&(this.animationSpeed>0&&this.currentFrame<i||this.animationSpeed<0&&this.currentFrame>i)&&this.onLoop(),this._updateTexture())}_updateTexture(){const c=this.currentFrame;this._previousFrame!==c&&(this._previousFrame=c,this.texture=this._textures[c],this.updateAnchor&&this.texture.defaultAnchor&&this.anchor.copyFrom(this.texture.defaultAnchor),this.onFrameChange&&this.onFrameChange(this.currentFrame))}destroy(c=!1){if("boolean"==typeof c?c:null==c?void 0:c.texture){const e="boolean"==typeof c?c:null==c?void 0:c.textureSource;this._textures.forEach(c=>{this.texture!==c&&c.destroy(e)})}this._textures=[],this._durations=null,this.stop(),super.destroy(c),this.onComplete=null,this.onFrameChange=null,this.onLoop=null}static fromFrames(c){const e=[];for(let t=0;t<c.length;++t)e.push(cc.from(c[t]));return new Mo(e)}static fromImages(c){const e=[];for(let t=0;t<c.length;++t)e.push(cc.from(c[t]));return new Mo(e)}get totalFrames(){return this._textures.length}get textures(){return this._textures}set textures(c){if(c[0]instanceof cc)this._textures=c,this._durations=null;else{this._textures=[],this._durations=[];for(let e=0;e<c.length;e++)this._textures.push(c[e].texture),this._durations.push(c[e].time)}this._previousFrame=null,this.gotoAndStop(0),this._updateTexture()}get currentFrame(){let c=Math.floor(this._currentTime)%this._textures.length;return c<0&&(c+=this._textures.length),c}set currentFrame(c){if(c<0||c>this.totalFrames-1)throw new Error(`[AnimatedSprite]: Invalid frame index value ${c}, expected to be between 0 and totalFrames ${this.totalFrames}.`);const e=this.currentFrame;this._currentTime=c,e!==this.currentFrame&&this._updateTexture()}get playing(){return this._playing}get autoUpdate(){return this._autoUpdate}set autoUpdate(c){c!==this._autoUpdate&&(this._autoUpdate=c,!this._autoUpdate&&this._isConnectedToTicker?(Ge.shared.remove(this.update,this),this._isConnectedToTicker=!1):this._autoUpdate&&!this._isConnectedToTicker&&this._playing&&(Ge.shared.add(this.update,this),this._isConnectedToTicker=!0))}}class Eo{constructor({matrix:c,observer:e}={}){this.dirty=!0,this._matrix=null!=c?c:new w,this.observer=e,this.position=new h(this,0,0),this.scale=new h(this,1,1),this.pivot=new h(this,0,0),this.skew=new h(this,0,0),this._rotation=0,this._cx=1,this._sx=0,this._cy=0,this._sy=1}get matrix(){const c=this._matrix;return this.dirty?(c.a=this._cx*this.scale.x,c.b=this._sx*this.scale.x,c.c=this._cy*this.scale.y,c.d=this._sy*this.scale.y,c.tx=this.position.x-(this.pivot.x*c.a+this.pivot.y*c.c),c.ty=this.position.y-(this.pivot.x*c.b+this.pivot.y*c.d),this.dirty=!1,c):c}_onUpdate(c){var e;this.dirty=!0,c===this.skew&&this.updateSkew(),null==(e=this.observer)||e._onUpdate(this)}updateSkew(){this._cx=Math.cos(this._rotation+this.skew.y),this._sx=Math.sin(this._rotation+this.skew.y),this._cy=-Math.sin(this._rotation-this.skew.x),this._sy=Math.cos(this._rotation-this.skew.x),this.dirty=!0}toString(){return`[pixi.js/math:Transform position=(${this.position.x}, ${this.position.y}) rotation=${this.rotation} scale=(${this.scale.x}, ${this.scale.y}) skew=(${this.skew.x}, ${this.skew.y}) ]`}setFromMatrix(c){c.decompose(this),this.dirty=!0}get rotation(){return this._rotation}set rotation(c){this._rotation!==c&&(this._rotation=c,this._onUpdate(this.skew))}}function Ro(c){const e=Fe.get().createCanvas(6,1),t=e.getContext("2d");return t.fillStyle=c,t.fillRect(0,0,6,1),e}function ko(){if(void 0!==So)return So;try{const c=Ro("#ff00ff"),e=Ro("#ffff00"),t=Fe.get().createCanvas(6,1).getContext("2d");t.globalCompositeOperation="multiply",t.drawImage(c,0,0),t.drawImage(e,2,0);const i=t.getImageData(2,0,1,1);if(i){const c=i.data;So=255===c[0]&&0===c[1]&&0===c[2]}else So=!1}catch(c){So=!1}return So}const Fo={canvas:null,convertTintToImage:!1,cacheStepsPerColorChannel:8,canUseMultiply:ko(),tintMethod:null,_canvasSourceCache:new WeakMap,_unpremultipliedCache:new WeakMap,getCanvasSource:c=>{var e,t;const i=c.source,n=null==i?void 0:i.resource;if(!n)return null;const r="premultiplied-alpha"===i.alphaMode,s=null!=(e=i.resourceWidth)?e:i.pixelWidth,a=null!=(t=i.resourceHeight)?t:i.pixelHeight,o=s!==i.pixelWidth||a!==i.pixelHeight;if(r){if((n instanceof HTMLCanvasElement||"undefined"!=typeof OffscreenCanvas&&n instanceof OffscreenCanvas)&&!o)return n;const c=Fo._unpremultipliedCache.get(i);if((null==c?void 0:c.resourceId)===i._resourceId)return c.canvas}if(n instanceof Uint8Array||n instanceof Uint8ClampedArray||n instanceof Int8Array||n instanceof Uint16Array||n instanceof Int16Array||n instanceof Uint32Array||n instanceof Int32Array||n instanceof Float32Array||n instanceof ArrayBuffer){const c=Fo._canvasSourceCache.get(i);if((null==c?void 0:c.resourceId)===i._resourceId)return c.canvas;const e=Fe.get().createCanvas(i.pixelWidth,i.pixelHeight),t=e.getContext("2d"),r=t.createImageData(i.pixelWidth,i.pixelHeight),s=r.data,a=n instanceof ArrayBuffer?new Uint8Array(n):new Uint8Array(n.buffer,n.byteOffset,n.byteLength);if("bgra8unorm"===i.format)for(let i=0;i<s.length&&i+3<a.length;i+=4)s[i]=a[i+2],s[i+1]=a[i+1],s[i+2]=a[i],s[i+3]=a[i+3];else s.set(a.subarray(0,s.length));return t.putImageData(r,0,0),Fo._canvasSourceCache.set(i,{canvas:e,resourceId:i._resourceId}),e}if(r){const c=Fe.get().createCanvas(i.pixelWidth,i.pixelHeight),e=c.getContext("2d",{willReadFrequently:!0});c.width=i.pixelWidth,c.height=i.pixelHeight,e.drawImage(n,0,0);const t=e.getImageData(0,0,c.width,c.height),r=t.data;for(let i=0;i<r.length;i+=4){const c=r[i+3];if(c>0){const e=255/c;r[i]=Math.min(255,r[i]*e+.5),r[i+1]=Math.min(255,r[i+1]*e+.5),r[i+2]=Math.min(255,r[i+2]*e+.5)}}return e.putImageData(t,0,0),Fo._unpremultipliedCache.set(i,{canvas:c,resourceId:i._resourceId}),c}if(o){const c=Fo._canvasSourceCache.get(i);if((null==c?void 0:c.resourceId)===i._resourceId)return c.canvas;const e=Fe.get().createCanvas(i.pixelWidth,i.pixelHeight),t=e.getContext("2d");return e.width=i.pixelWidth,e.height=i.pixelHeight,t.drawImage(n,0,0),Fo._canvasSourceCache.set(i,{canvas:e,resourceId:i._resourceId}),e}return n},getTintedCanvas:(c,e)=>{const t=c.texture,i=Fc.shared.setValue(e).toHex(),n=t.tintCache||(t.tintCache={}),r=n[i],s=t.source._resourceId;if((null==r?void 0:r.tintId)===s)return r;const a=r&&"getContext"in r?r:Fe.get().createCanvas();return Fo.tintMethod(t,e,a),a.tintId=s,n[i]=a,n[i]},getTintedPattern:(c,e)=>{const t=Fc.shared.setValue(e).toHex(),i=c.patternCache||(c.patternCache={}),n=c.source._resourceId;let r=i[t];if((null==r?void 0:r.tintId)===n)return r;Fo.canvas||(Fo.canvas=Fe.get().createCanvas()),Fo.tintMethod(c,e,Fo.canvas);return r=Fo.canvas.getContext("2d").createPattern(Fo.canvas,"repeat"),r.tintId=n,i[t]=r,r},applyPatternTransform:(c,e,t=!0)=>{if(!e)return;const i=c;if(!i.setTransform)return;const n=globalThis.DOMMatrix;if(!n)return;const r=new n([e.a,e.b,e.c,e.d,e.tx,e.ty]);i.setTransform(t?r.inverse():r)},tintWithMultiply:(c,e,t)=>{var i,n;const r=t.getContext("2d"),s=c.frame.clone(),a=null!=(n=null!=(i=c.source._resolution)?i:c.source.resolution)?n:1,o=c.rotate;s.x*=a,s.y*=a,s.width*=a,s.height*=a;const f=I.isVertical(o),l=f?s.height:s.width,d=f?s.width:s.height;t.width=Math.ceil(l),t.height=Math.ceil(d),r.save(),r.fillStyle=Fc.shared.setValue(e).toHex(),r.fillRect(0,0,l,d),r.globalCompositeOperation="multiply";const h=Fo.getCanvasSource(c);h?(o&&Fo._applyInverseRotation(r,o,s.width,s.height),r.drawImage(h,s.x,s.y,s.width,s.height,0,0,s.width,s.height),r.globalCompositeOperation="destination-atop",r.drawImage(h,s.x,s.y,s.width,s.height,0,0,s.width,s.height),r.restore()):r.restore()},tintWithOverlay:(c,e,t)=>{var i,n;const r=t.getContext("2d"),s=c.frame.clone(),a=null!=(n=null!=(i=c.source._resolution)?i:c.source.resolution)?n:1,o=c.rotate;s.x*=a,s.y*=a,s.width*=a,s.height*=a;const f=I.isVertical(o),l=f?s.height:s.width,d=f?s.width:s.height;t.width=Math.ceil(l),t.height=Math.ceil(d),r.save(),r.globalCompositeOperation="copy",r.fillStyle=Fc.shared.setValue(e).toHex(),r.fillRect(0,0,l,d),r.globalCompositeOperation="destination-atop";const h=Fo.getCanvasSource(c);h?(o&&Fo._applyInverseRotation(r,o,s.width,s.height),r.drawImage(h,s.x,s.y,s.width,s.height,0,0,s.width,s.height),r.restore()):r.restore()},tintWithPerPixel:(c,e,t)=>{var i,n;const r=t.getContext("2d"),s=c.frame.clone(),a=null!=(n=null!=(i=c.source._resolution)?i:c.source.resolution)?n:1,o=c.rotate;s.x*=a,s.y*=a,s.width*=a,s.height*=a;const f=I.isVertical(o),l=f?s.height:s.width,d=f?s.width:s.height;t.width=Math.ceil(l),t.height=Math.ceil(d),r.save(),r.globalCompositeOperation="copy";const h=Fo.getCanvasSource(c);if(!h)return void r.restore();o&&Fo._applyInverseRotation(r,o,s.width,s.height),r.drawImage(h,s.x,s.y,s.width,s.height,0,0,s.width,s.height),r.restore();const u=e>>16&255,p=e>>8&255,g=255&e,m=r.getImageData(0,0,l,d),b=m.data;for(let v=0;v<b.length;v+=4)b[v]=b[v]*u/255,b[v+1]=b[v+1]*p/255,b[v+2]=b[v+2]*g/255;r.putImageData(m,0,0)},_applyInverseRotation:(c,e,t,i)=>{const n=I.inv(e),r=I.uX(n),s=I.uY(n),a=I.vX(n),o=I.vY(n),f=-Math.min(0,r*t,a*i,r*t+a*i),l=-Math.min(0,s*t,o*i,s*t+o*i);c.transform(r,s,a,o,f,l)}};Fo.tintMethod=Fo.canUseMultiply?Fo.tintWithMultiply:Fo.tintWithPerPixel;const Io=new w,Bo=new w,Do=[new x,new x,new x,new x];class Oo{constructor(c){this._renderer=c}validateRenderable(c){return!1}addRenderable(c,e){this._renderer.renderPipes.batch.break(e),e.add(c)}updateRenderable(c){}execute(c){var e,t,i,n,r,s;const a=this._renderer,o=a.canvasContext,f=o.activeContext;f.save(),o.setBlendMode(c.groupBlendMode);const l=null!=(t=null==(e=a.globalUniforms.globalUniformData)?void 0:e.worldColor)?t:4294967295,d=c.groupColorAlpha,h=(l>>>24&255)/255*((d>>>24&255)/255)*(null!=(n=null==(i=a.filter)?void 0:i.alphaMultiplier)?n:1);if(h<=0)return void f.restore();f.globalAlpha=h;const u=te($c(16777215&d,16777215&l)),p=c.texture,g=Fo.getTintedPattern(p,u),m=c.width,b=c.height,v=c.groupTransform,y=null!=(s=null!=(r=p.source._resolution)?r:p.source.resolution)?s:1;Bo.copyFrom(c._tileTransform.matrix),c.applyAnchorToTexture||Bo.translate(-c.anchor.x*m,-c.anchor.y*b),Bo.scale(1/y,1/y),Io.identity(),Io.prepend(Bo),Io.prepend(v);const _=a._roundPixels|c._roundPixels;o.setContextTransform(Io,1===_),f.fillStyle=g;const x=c.anchor.x*-m,S=c.anchor.y*-b;Do[0].set(x,S),Do[1].set(x+m,S),Do[2].set(x+m,S+b),Do[3].set(x,S+b);for(let w=0;w<4;w++)Bo.applyInverse(Do[w],Do[w]);f.beginPath(),f.moveTo(Do[0].x,Do[0].y);for(let w=1;w<4;w++)f.lineTo(Do[w].x,Do[w].y);f.closePath(),f.fill(),f.restore()}destroy(){this._renderer=null}}Oo.extension={type:[s.CanvasPipes],name:"tilingSprite"};const Lo={name:"local-uniform-bit",vertex:{header:"\n\n struct LocalUniforms {\n uTransformMatrix:mat3x3<f32>,\n uColor:vec4<f32>,\n uRound:f32,\n }\n\n @group(1) @binding(0) var<uniform> localUniforms : LocalUniforms;\n ",main:"\n vColor *= localUniforms.uColor;\n modelMatrix *= localUniforms.uTransformMatrix;\n ",end:"\n if(localUniforms.uRound == 1)\n {\n vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);\n }\n "}},zo=__spreadProps(__spreadValues({},Lo),{vertex:__spreadProps(__spreadValues({},Lo.vertex),{header:Lo.vertex.header.replace("group(1)","group(2)")})}),Go={name:"local-uniform-bit",vertex:{header:"\n\n uniform mat3 uTransformMatrix;\n uniform vec4 uColor;\n uniform float uRound;\n ",main:"\n vColor *= uColor;\n modelMatrix = uTransformMatrix;\n ",end:"\n if(uRound == 1.)\n {\n gl_Position.xy = roundPixels(gl_Position.xy, uResolution);\n }\n "}},Uo={name:"tiling-bit",vertex:{header:"\n struct TilingUniforms {\n uMapCoord:mat3x3<f32>,\n uClampFrame:vec4<f32>,\n uClampOffset:vec2<f32>,\n uTextureTransform:mat3x3<f32>,\n uSizeAnchor:vec4<f32>\n };\n\n @group(2) @binding(0) var<uniform> tilingUniforms: TilingUniforms;\n @group(2) @binding(1) var uTexture: texture_2d<f32>;\n @group(2) @binding(2) var uSampler: sampler;\n ",main:"\n uv = (tilingUniforms.uTextureTransform * vec3(uv, 1.0)).xy;\n\n position = (position - tilingUniforms.uSizeAnchor.zw) * tilingUniforms.uSizeAnchor.xy;\n "},fragment:{header:"\n struct TilingUniforms {\n uMapCoord:mat3x3<f32>,\n uClampFrame:vec4<f32>,\n uClampOffset:vec2<f32>,\n uTextureTransform:mat3x3<f32>,\n uSizeAnchor:vec4<f32>\n };\n\n @group(2) @binding(0) var<uniform> tilingUniforms: TilingUniforms;\n @group(2) @binding(1) var uTexture: texture_2d<f32>;\n @group(2) @binding(2) var uSampler: sampler;\n ",main:"\n\n var coord = vUV + ceil(tilingUniforms.uClampOffset - vUV);\n coord = (tilingUniforms.uMapCoord * vec3(coord, 1.0)).xy;\n var unclamped = coord;\n coord = clamp(coord, tilingUniforms.uClampFrame.xy, tilingUniforms.uClampFrame.zw);\n\n var bias = 0.;\n\n if(unclamped.x == coord.x && unclamped.y == coord.y)\n {\n bias = -32.;\n }\n\n outColor = textureSampleBias(uTexture, uSampler, coord, bias);\n "}},Vo={name:"tiling-bit",vertex:{header:"\n uniform mat3 uTextureTransform;\n uniform vec4 uSizeAnchor;\n\n ",main:"\n uv = (uTextureTransform * vec3(aUV, 1.0)).xy;\n\n position = (position - uSizeAnchor.zw) * uSizeAnchor.xy;\n "},fragment:{header:"\n uniform sampler2D uTexture;\n uniform mat3 uMapCoord;\n uniform vec4 uClampFrame;\n uniform vec2 uClampOffset;\n ",main:"\n\n vec2 coord = vUV + ceil(uClampOffset - vUV);\n coord = (uMapCoord * vec3(coord, 1.0)).xy;\n vec2 unclamped = coord;\n coord = clamp(coord, uClampFrame.xy, uClampFrame.zw);\n\n outColor = texture(uTexture, coord, unclamped == coord ? 0.0 : -32.0);// lod-bias very negative to force lod 0\n\n "}};let No,Wo;class Ho extends ni{constructor(){null!=No||(No=Fr({name:"tiling-sprite-shader",bits:[Lo,Uo,Wr]})),null!=Wo||(Wo=Ir({name:"tiling-sprite-shader",bits:[Go,Vo,Hr]}));const c=new ei({uMapCoord:{value:new w,type:"mat3x3<f32>"},uClampFrame:{value:new Float32Array([0,0,1,1]),type:"vec4<f32>"},uClampOffset:{value:new Float32Array([0,0]),type:"vec2<f32>"},uTextureTransform:{value:new w,type:"mat3x3<f32>"},uSizeAnchor:{value:new Float32Array([100,100,.5,.5]),type:"vec4<f32>"}});super({glProgram:Wo,gpuProgram:No,resources:{localUniforms:new ei({uTransformMatrix:{value:new w,type:"mat3x3<f32>"},uColor:{value:new Float32Array([1,1,1,1]),type:"vec4<f32>"},uRound:{value:0,type:"f32"}}),tilingUniforms:c,uTexture:cc.EMPTY.source,uSampler:cc.EMPTY.source.style}})}updateUniforms(c,e,t,i,n,r){const s=this.resources.tilingUniforms,a=r.width,o=r.height,f=r.textureMatrix,l=s.uniforms.uTextureTransform;l.set(t.a*a/c,t.b*a/e,t.c*o/c,t.d*o/e,t.tx/c,t.ty/e),l.invert(),s.uniforms.uMapCoord=f.mapCoord,s.uniforms.uClampFrame=f.uClampFrame,s.uniforms.uClampOffset=f.uClampOffset,s.uniforms.uTextureTransform=l,s.uniforms.uSizeAnchor[0]=c,s.uniforms.uSizeAnchor[1]=e,s.uniforms.uSizeAnchor[2]=i,s.uniforms.uSizeAnchor[3]=n,r&&(this.resources.uTexture=r.source,this.resources.uSampler=r.source.style)}}const jo=new class extends wo{constructor(){super({positions:new Float32Array([0,0,1,0,1,1,0,1]),uvs:new Float32Array([0,0,1,0,1,1,0,1]),indices:new Uint32Array([0,1,2,0,2,3])})}};class Yo{constructor(){this.canBatch=!0,this.geometry=new wo({indices:jo.indices.slice(),positions:jo.positions.slice(),uvs:jo.uvs.slice()})}destroy(){var c;this.geometry.destroy(),null==(c=this.shader)||c.destroy()}}class Xo{constructor(c){this._state=ai.default2d,this._renderer=c,this._managedTilingSprites=new Qr({renderer:c,type:"renderable",name:"tilingSprite"})}validateRenderable(c){const e=this._getTilingSpriteData(c),t=e.canBatch;this._updateCanBatch(c);const i=e.canBatch;if(i&&i===t){const{batchableMesh:t}=e;return!t._batcher.checkAndUpdateTexture(t,c.texture)}return t!==i}addRenderable(c,e){const t=this._renderer.renderPipes.batch;this._updateCanBatch(c);const i=this._getTilingSpriteData(c),{geometry:n,canBatch:r}=i;if(r){i.batchableMesh||(i.batchableMesh=new Co);const r=i.batchableMesh;c.didViewUpdate&&(this._updateBatchableMesh(c),r.geometry=n,r.renderable=c,r.transform=c.groupTransform,r.setTexture(c._texture)),r.roundPixels=this._renderer._roundPixels|c._roundPixels,t.addToBatch(r,e)}else t.break(e),i.shader||(i.shader=new Ho),this.updateRenderable(c),e.add(c)}execute(c){const e=this._renderer,{shader:t}=this._getTilingSpriteData(c);t.groups[0]=e.globalUniforms.bindGroup;const i=t.resources.localUniforms.uniforms;i.uTransformMatrix=c.groupTransform,i.uRound=e._roundPixels|c._roundPixels,bo(c.groupColorAlpha,i.uColor,0),this._state.blendMode=Kn(c.groupBlendMode,c.texture._source),e.encoder.draw({geometry:jo,shader:t,state:this._state})}updateRenderable(c){const e=this._getTilingSpriteData(c),{canBatch:t}=e;if(t){const{batchableMesh:t}=e;c.didViewUpdate&&this._updateBatchableMesh(c),t._batcher.updateElement(t)}else if(c.didViewUpdate){const{shader:t}=e;t.updateUniforms(c.width,c.height,c._tileTransform.matrix,c.anchor.x,c.anchor.y,c.texture)}}_getTilingSpriteData(c){return c._gpuData[this._renderer.uid]||this._initTilingSpriteData(c)}_initTilingSpriteData(c){const e=new Yo;return e.renderable=c,c._gpuData[this._renderer.uid]=e,this._managedTilingSprites.add(c),e}_updateBatchableMesh(c){const e=this._getTilingSpriteData(c),{geometry:t}=e,i=c.texture.source.style;"repeat"!==i.addressMode&&(i.addressMode="repeat",i.update()),function(c,e){const t=c.texture,i=t.frame.width,n=t.frame.height;let r=0,s=0;c.applyAnchorToTexture&&(r=c.anchor.x,s=c.anchor.y),e[0]=e[6]=-r,e[2]=e[4]=1-r,e[1]=e[3]=-s,e[5]=e[7]=1-s;const a=w.shared;a.copyFrom(c._tileTransform.matrix),a.tx/=c.width,a.ty/=c.height,a.invert(),a.scale(c.width/i,c.height/n),function(c,e,t,i){let n=0;const r=c.length/e,s=i.a,a=i.b,o=i.c,f=i.d,l=i.tx,d=i.ty;for(t*=e;n<r;){const i=c[t],r=c[t+1];c[t]=s*i+o*r+l,c[t+1]=a*i+f*r+d,t+=e,n++}}(e,2,0,a)}(c,t.uvs),function(c,e){const t=c.anchor.x,i=c.anchor.y;e[0]=-t*c.width,e[1]=-i*c.height,e[2]=(1-t)*c.width,e[3]=-i*c.height,e[4]=(1-t)*c.width,e[5]=(1-i)*c.height,e[6]=-t*c.width,e[7]=(1-i)*c.height}(c,t.positions)}destroy(){this._managedTilingSprites.destroy(),this._renderer=null}_updateCanBatch(c){const e=this._getTilingSpriteData(c),t=c.texture;let i=!0;return this._renderer.type===ii.WEBGL&&(i=this._renderer.context.supports.nonPowOf2wrapping),e.canBatch=t.textureMatrix.isSimple&&(i||t.source.isPowerOfTwo),e.canBatch}}Xo.extension={type:[s.WebGLPipes,s.WebGPUPipes],name:"tilingSprite"},f.add(Oo),f.add(Xo);const Zo=class c extends Se{constructor(...e){let t=e[0]||{};t instanceof cc&&(t={texture:t}),e.length>1&&(V(G,"use new TilingSprite({ texture, width:100, height:100 }) instead"),t.width=e[1],t.height=e[2]),t=__spreadValues(__spreadValues({},c.defaultOptions),t);const i=null!=t?t:{},{texture:n,anchor:r,tilePosition:s,tileScale:a,tileRotation:o,width:f,height:l,applyAnchorToTexture:d,roundPixels:u}=i,p=__objRest(i,["texture","anchor","tilePosition","tileScale","tileRotation","width","height","applyAnchorToTexture","roundPixels"]);super(__spreadValues({label:"TilingSprite"},p)),this.renderPipeId="tilingSprite",this.batched=!0,this.allowChildren=!1,this._anchor=new h({_onUpdate:()=>{this.onViewUpdate()}}),this.applyAnchorToTexture=d,this.texture=n,this._width=null!=f?f:n.width,this._height=null!=l?l:n.height,this._tileTransform=new Eo({observer:{_onUpdate:()=>this.onViewUpdate()}}),r&&(this.anchor=r),this.tilePosition=s,this.tileScale=a,this.tileRotation=o,this.roundPixels=null!=u&&u}static from(e,t={}){return new c(__spreadValues("string"==typeof e?{texture:He.get(e)}:{texture:e},t))}get uvRespectAnchor(){return V(G,"uvRespectAnchor is deprecated, please use applyAnchorToTexture instead"),this.applyAnchorToTexture}set uvRespectAnchor(c){V(G,"uvRespectAnchor is deprecated, please use applyAnchorToTexture instead"),this.applyAnchorToTexture=c}get clampMargin(){return this._texture.textureMatrix.clampMargin}set clampMargin(c){this._texture.textureMatrix.clampMargin=c}get anchor(){return this._anchor}set anchor(c){"number"==typeof c?this._anchor.set(c):this._anchor.copyFrom(c)}get tilePosition(){return this._tileTransform.position}set tilePosition(c){this._tileTransform.position.copyFrom(c)}get tileScale(){return this._tileTransform.scale}set tileScale(c){"number"==typeof c?this._tileTransform.scale.set(c):this._tileTransform.scale.copyFrom(c)}set tileRotation(c){this._tileTransform.rotation=c}get tileRotation(){return this._tileTransform.rotation}get tileTransform(){return this._tileTransform}set texture(c){c||(c=cc.EMPTY);const e=this._texture;e!==c&&(e&&e.dynamic&&e.off("update",this.onViewUpdate,this),c.dynamic&&c.on("update",this.onViewUpdate,this),this._texture=c,this.onViewUpdate())}get texture(){return this._texture}set width(c){this._width=c,this.onViewUpdate()}get width(){return this._width}set height(c){this._height=c,this.onViewUpdate()}get height(){return this._height}setSize(c,e){var t;"object"==typeof c&&(e=null!=(t=c.height)?t:c.width,c=c.width),this._width=c,this._height=null!=e?e:c,this.onViewUpdate()}getSize(c){return c||(c={}),c.width=this._width,c.height=this._height,c}updateBounds(){const c=this._bounds,e=this._anchor,t=this._width,i=this._height;c.minX=-e._x*t,c.maxX=c.minX+t,c.minY=-e._y*i,c.maxY=c.minY+i}containsPoint(c){const e=this._width,t=this._height,i=-e*this._anchor._x;let n=0;return c.x>=i&&c.x<=i+e&&(n=-t*this._anchor._y,c.y>=n&&c.y<=n+t)}destroy(c=!1){super.destroy(c),this._anchor=null,this._tileTransform=null,this._bounds=null;if("boolean"==typeof c?c:null==c?void 0:c.texture){const e="boolean"==typeof c?c:null==c?void 0:c.textureSource;this._texture.destroy(e)}this._texture=null}};Zo.defaultOptions={texture:cc.EMPTY,anchor:{x:0,y:0},tilePosition:{x:0,y:0},tileScale:{x:1,y:1},tileRotation:0,applyAnchorToTexture:!1};let qo=Zo;class Ko extends Se{constructor(c,e){const t=c,{text:i,resolution:n,style:r,anchor:s,width:a,height:o,roundPixels:f}=t,l=__objRest(t,["text","resolution","style","anchor","width","height","roundPixels"]);super(__spreadValues({},l)),this.batched=!0,this._resolution=null,this._autoResolution=!0,this._didTextUpdate=!0,this._styleClass=e,this.text=null!=i?i:"",this.style=r,this.resolution=null!=n?n:null,this.allowChildren=!1,this._anchor=new h({_onUpdate:()=>{this.onViewUpdate()}}),s&&(this.anchor=s),this.roundPixels=null!=f&&f,void 0!==a&&(this.width=a),void 0!==o&&(this.height=o)}get anchor(){return this._anchor}set anchor(c){"number"==typeof c?this._anchor.set(c):this._anchor.copyFrom(c)}set text(c){c=c.toString(),this._text!==c&&(this._text=c,this.onViewUpdate())}get text(){return this._text}set resolution(c){this._autoResolution=null===c,this._resolution=c,this.onViewUpdate()}get resolution(){return this._resolution}get style(){return this._style}set style(c){var e;c||(c={}),null==(e=this._style)||e.off("update",this.onViewUpdate,this),c instanceof this._styleClass?this._style=c:this._style=new this._styleClass(c),this._style.on("update",this.onViewUpdate,this),this.onViewUpdate()}get width(){return Math.abs(this.scale.x)*this.bounds.width}set width(c){this._setWidth(c,this.bounds.width)}get height(){return Math.abs(this.scale.y)*this.bounds.height}set height(c){this._setHeight(c,this.bounds.height)}getSize(c){return c||(c={}),c.width=Math.abs(this.scale.x)*this.bounds.width,c.height=Math.abs(this.scale.y)*this.bounds.height,c}setSize(c,e){var t;"object"==typeof c?(e=null!=(t=c.height)?t:c.width,c=c.width):null!=e||(e=c),void 0!==c&&this._setWidth(c,this.bounds.width),void 0!==e&&this._setHeight(e,this.bounds.height)}containsPoint(c){const e=this.bounds.width,t=this.bounds.height,i=-e*this.anchor.x;let n=0;return c.x>=i&&c.x<=i+e&&(n=-t*this.anchor.y,c.y>=n&&c.y<=n+t)}onViewUpdate(){this.didViewUpdate||(this._didTextUpdate=!0),super.onViewUpdate()}destroy(c=!1){super.destroy(c),this.owner=null,this._bounds=null,this._anchor=null,("boolean"==typeof c?c:null==c?void 0:c.style)&&this._style.destroy(c),this._style=null,this._text=null}get styleKey(){return`${this._text}:${this._style.styleKey}:${this._resolution}`}}const Qo=new class{constructor(c){this._canvasPool=Object.create(null),this.canvasOptions=c||{},this.enableFullScreen=!1}_createCanvasAndContext(c,e){const t=Fe.get().createCanvas();t.width=c,t.height=e;const i=t.getContext("2d");return{canvas:t,context:i}}getOptimalCanvasAndContext(c,e,t=1){c=Math.ceil(c*t-1e-6),e=Math.ceil(e*t-1e-6);const i=((c=W(c))<<17)+((e=W(e))<<1);this._canvasPool[i]||(this._canvasPool[i]=[]);let n=this._canvasPool[i].pop();return n||(n=this._createCanvasAndContext(c,e)),n}returnCanvasAndContext(c){const e=c.canvas,{width:t,height:i}=e,n=(t<<17)+(i<<1);c.context.resetTransform(),c.context.clearRect(0,0,t,i),this._canvasPool[n].push(c)}clear(){this._canvasPool={}}};Dc.register(Qo);let Jo=null,$o=null;function cf(c,e,t){for(let i=0,n=4*t*e;i<e;++i,n+=4)if(0!==c[n+3])return!1;return!0}function ef(c,e,t,i,n){const r=4*e;for(let s=i,a=i*r+4*t;s<=n;++s,a+=r)if(0!==c[a+3])return!1;return!0}function tf(...c){var e,t,i;let n=c[0];n.canvas||(n={canvas:c[0],resolution:c[1]});const{canvas:r}=n,s=Math.min(null!=(e=n.resolution)?e:1,1),a=null!=(t=n.width)?t:r.width,o=null!=(i=n.height)?i:r.height;let f=n.output;if(function(c,e){Jo||(Jo=Fe.get().createCanvas(256,128),$o=Jo.getContext("2d",{willReadFrequently:!0}),$o.globalCompositeOperation="copy",$o.globalAlpha=1),(Jo.width<c||Jo.height<e)&&(Jo.width=W(c),Jo.height=W(e))}(a,o),!$o)throw new TypeError("Failed to get canvas 2D context");$o.drawImage(r,0,0,a,o,0,0,a*s,o*s);const l=$o.getImageData(0,0,a,o).data;let d=0,h=0,u=a-1,p=o-1;for(;h<o&&cf(l,a,h);)++h;if(h===o)return D.EMPTY;for(;cf(l,a,p);)--p;for(;ef(l,a,d,h,p);)++d;for(;ef(l,a,u,h,p);)--u;return++u,++p,$o.globalCompositeOperation="source-over",$o.strokeRect(d,h,u-d,p-h),$o.globalCompositeOperation="copy",null!=f||(f=new D),f.set(d/s,h/s,(u-d)/s,(p-h)/s),f}class nf{constructor(c=0,e=0,t=!1){this.first=null,this.items=Object.create(null),this.last=null,this.max=c,this.resetTtl=t,this.size=0,this.ttl=e}clear(){return this.first=null,this.items=Object.create(null),this.last=null,this.size=0,this}delete(c){if(this.has(c)){const e=this.items[c];delete this.items[c],this.size--,null!==e.prev&&(e.prev.next=e.next),null!==e.next&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),this.last===e&&(this.last=e.prev)}return this}entries(c=this.keys()){const e=new Array(c.length);for(let t=0;t<c.length;t++){const i=c[t];e[t]=[i,this.get(i)]}return e}evict(c=!1){if(c||this.size>0){const c=this.first;delete this.items[c.key],0===--this.size?(this.first=null,this.last=null):(this.first=c.next,this.first.prev=null)}return this}expiresAt(c){let e;return this.has(c)&&(e=this.items[c].expiry),e}get(c){const e=this.items[c];if(void 0!==e)return this.ttl>0&&e.expiry<=Date.now()?void this.delete(c):(this.moveToEnd(e),e.value)}has(c){return c in this.items}moveToEnd(c){this.last!==c&&(null!==c.prev&&(c.prev.next=c.next),null!==c.next&&(c.next.prev=c.prev),this.first===c&&(this.first=c.next),c.prev=this.last,c.next=null,null!==this.last&&(this.last.next=c),this.last=c,null===this.first&&(this.first=c))}keys(){const c=new Array(this.size);let e=this.first,t=0;for(;null!==e;)c[t++]=e.key,e=e.next;return c}setWithEvicted(c,e,t=this.resetTtl){let i=null;if(this.has(c))this.set(c,e,!0,t);else{this.max>0&&this.size===this.max&&(i=__spreadValues({},this.first),this.evict(!0));let t=this.items[c]={expiry:this.ttl>0?Date.now()+this.ttl:this.ttl,key:c,prev:this.last,next:null,value:e};1===++this.size?this.first=t:this.last.next=t,this.last=t}return i}set(c,e,t=!1,i=this.resetTtl){let n=this.items[c];return t||void 0!==n?(n.value=e,!1===t&&i&&(n.expiry=this.ttl>0?Date.now()+this.ttl:this.ttl),this.moveToEnd(n)):(this.max>0&&this.size===this.max&&this.evict(!0),n=this.items[c]={expiry:this.ttl>0?Date.now()+this.ttl:this.ttl,key:c,prev:this.last,next:null,value:e},1===++this.size?this.first=n:this.last.next=n,this.last=n),this}values(c=this.keys()){const e=new Array(c.length);for(let t=0;t<c.length;t++)e[t]=this.get(c[t]);return e}}function rf(c=1e3,e=0,t=!1){if(isNaN(c)||c<0)throw new TypeError("Invalid max value");if(isNaN(e)||e<0)throw new TypeError("Invalid ttl value");if("boolean"!=typeof t)throw new TypeError("Invalid resetTtl value");return new nf(c,e,t)}function sf(c){return!!c.tagStyles&&Object.keys(c.tagStyles).length>0}function af(c){return c.includes("<")}function of(c,e){return c.clone().assign(e)}const ff=new Set([10,13]),lf=new Set([9,32,8192,8193,8194,8195,8196,8197,8198,8200,8201,8202,8287,12288]),df=/(\r\n|\r|\n)/,hf=/(?:\r\n|\r|\n)/;function uf(c){return"string"==typeof c&&ff.has(c.charCodeAt(0))}function pf(c,e){return"string"==typeof c&&lf.has(c.charCodeAt(0))}function gf(c){return"normal"===c||"pre-line"===c}function mf(c){return"normal"===c}function bf(c){if("string"!=typeof c)return"";let e=c.length-1;for(;e>=0&&pf(c[e]);)e--;return e<c.length-1?c.slice(0,e+1):c}function vf(c){const e=[],t=[];if("string"!=typeof c)return e;for(let i=0;i<c.length;i++){const n=c[i],r=c[i+1];pf(n)||uf(n)?(t.length>0&&(e.push(t.join("")),t.length=0),"\r"===n&&"\n"===r?(e.push("\r\n"),i++):e.push(n)):t.push(n)}return t.length>0&&e.push(t.join("")),e}function yf(c,e,t,i){const n=t(c),r=[];for(let s=0;s<n.length;s++){let t=n[s],a=t,o=1;for(;n[s+o];){const r=n[s+o];if(i(a,r,c,s,e))break;t+=r,a=r,o++}s+=o-1,r.push(t)}return r}const _f=/\r\n|\r|\n/g;function xf(c,e,t,i,n,r,s,a){var o;const f=function(c,e){const t=[],i=e.tagStyles;if(!sf(e)||!af(c))return t.push({text:c,style:e}),t;const n=[e],r=[];let s="",a=0;for(;a<c.length;){const e=c[a];if("<"===e){const o=c.indexOf(">",a);if(-1===o){s+=e,a++;continue}const f=c.slice(a+1,o);if(f.startsWith("/")){const e=f.slice(1).trim();if(r.length>0&&r[r.length-1]===e){s.length>0&&(t.push({text:s,style:n[n.length-1]}),s=""),n.pop(),r.pop(),a=o+1;continue}s+=c.slice(a,o+1),a=o+1;continue}{const e=f.trim();if(i[e]){s.length>0&&(t.push({text:s,style:n[n.length-1]}),s="");const c=of(n[n.length-1],i[e]);n.push(c),r.push(e),a=o+1;continue}s+=c.slice(a,o+1),a=o+1;continue}}s+=e,a++}return s.length>0&&t.push({text:s,style:n[n.length-1]}),t}(c,e);if(mf(e.whiteSpace))for(let A=0;A<f.length;A++){const c=f[A];f[A]={text:c.text.replace(_f," "),style:c.style}}const l=[];let d=[];for(const A of f){const c=A.text.split(df);for(let e=0;e<c.length;e++){const t=c[e];"\r\n"===t||"\r"===t||"\n"===t?(l.push(d),d=[]):t.length>0&&d.push({text:t,style:A.style})}}(d.length>0||0===l.length)&&l.push(d);const h=t?function(c,e,t,i,n,r){var s,a,o;const{letterSpacing:f,whiteSpace:l,wordWrapWidth:d,breakWords:h}=e,u=gf(l),p=d+f,g={};let m="";const b=(c,e)=>{const n=`${c}|${e.styleKey}`;let r=g[n];if(void 0===r){const s=e._fontString;s!==m&&(t.font=s,m=s),r=i(c,e.letterSpacing,t)+e.letterSpacing,g[n]=r}return r},v=[];for(const y of c){const c=Sf(y),e=v.length,t=e=>{let t=0,i=e;do{const{token:e,style:n}=c[i];t+=b(e,n),i++}while(i<c.length&&c[i].continuesFromPrevious);return t},i=e=>{const t=[];let i=e;do{t.push({token:c[i].token,style:c[i].style}),i++}while(i<c.length&&c[i].continuesFromPrevious);return t};let f=[],l=0,d=!u,g=null;const m=()=>{g&&g.text.length>0&&f.push(g),g=null},_=()=>{if(m(),f.length>0){const c=f[f.length-1];c.text=bf(c.text),0===c.text.length&&f.pop()}v.push(f),f=[],l=0,d=!1};for(let y=0;y<c.length;y++){const{token:e,style:x,continuesFromPrevious:S}=c[y],w=b(e,x);if(u){const c=pf(e),t=null!=(o=null!=(a=null==g?void 0:g.text[g.text.length-1])?a:null==(s=f[f.length-1])?void 0:s.text.slice(-1))?o:"",i=!!t&&pf(t);if(c&&i)continue}const C=!S,A=C?t(y):w;if(A>p&&C)if(l>0&&_(),h){const c=i(y);for(let e=0;e<c.length;e++){const t=c[e].token,i=c[e].style,s=yf(t,h,r,n);for(const c of s){const e=b(c,i);e+l>p&&_(),g&&g.style===i?g.text+=c:(m(),g={text:c,style:i}),l+=e}}y+=c.length-1}else{const c=i(y);m(),v.push(c.map(c=>({text:c.token,style:c.style}))),d=!1,y+=c.length-1}else if(A+l>p&&C){if(pf(e)){d=!1;continue}_(),g={text:e,style:x},l=w}else if(S&&!h)g&&g.style===x?g.text+=e:(m(),g={text:e,style:x}),l+=w;else{const c=pf(e);if(0===l&&c&&!d)continue;g&&g.style===x?g.text+=e:(m(),g={text:e,style:x}),l+=w}}if(m(),f.length>0){const c=f[f.length-1];c.text=bf(c.text),0===c.text.length&&f.pop()}(f.length>0||v.length===e)&&v.push(f)}return v}(l,e,i,n,s,a):l,u=[],p=[],g=[],m=[],b=[];let v=0;const y=r(e._fontString);0===y.fontSize&&(y.fontSize=e.fontSize,y.ascent=e.fontSize);let _="",x=!!e.dropShadow;for(const A of h){let c=0,t=y.ascent,s=y.descent,a="";for(const e of A){const o=e.style._fontString,f=r(o);o!==_&&(i.font=o,_=o);c+=n(e.text,e.style.letterSpacing,i),t=Math.max(t,f.ascent),s=Math.max(s,f.descent),a+=e.text,!x&&e.style.dropShadow&&(x=!0)}0===A.length&&(t=y.ascent,s=y.descent),u.push(c),p.push(t),g.push(s),b.push(a);const o=e.lineHeight||t+s;m.push(o+e.leading),v=Math.max(v,c)}const S=(null==(o=e._stroke)?void 0:o.width)||0,w=(t&&"left"!==e.align&&"justify"!==e.align?Math.max(v,e.wordWrapWidth):v)+S+(e.dropShadow?e.dropShadow.distance:0);let C=0;for(let A=0;A<m.length;A++)C+=m[A];C=Math.max(C,m[0]+S);return{width:w,height:C+(e.dropShadow?e.dropShadow.distance:0),lines:b,lineWidths:u,lineHeight:(e.lineHeight||y.fontSize)+e.leading,maxLineWidth:v,fontProperties:y,runsByLine:h,lineAscents:p,lineDescents:g,lineHeights:m,hasDropShadow:x}}function Sf(c){const e=[];let t=!1;for(const i of c){const c=vf(i.text);let n=!0;for(const r of c){const c=pf(r)||uf(r),s=n&&t&&!c;e.push({token:r,style:i.style,continuesFromPrevious:s}),t=!c,n=!1}}return e}const wf={willReadFrequently:!0};function Cf(c,e,t,i,n){let r=t[c];return"number"!=typeof r&&(r=n(c,e,i)+e,t[c]=r),r}const Af={willReadFrequently:!0},Tf=class c{static get experimentalLetterSpacingSupported(){let e=c._experimentalLetterSpacingSupported;if(void 0===e){const t=Fe.get().getCanvasRenderingContext2D().prototype;e=c._experimentalLetterSpacingSupported="letterSpacing"in t||"textLetterSpacing"in t}return e}constructor(c,e,t,i,n,r,s,a,o,f){this.text=c,this.style=e,this.width=t,this.height=i,this.lines=n,this.lineWidths=r,this.lineHeight=s,this.maxLineWidth=a,this.fontProperties=o,f&&(this.runsByLine=f.runsByLine,this.lineAscents=f.lineAscents,this.lineDescents=f.lineDescents,this.lineHeights=f.lineHeights,this.hasDropShadow=f.hasDropShadow)}static measureText(e=" ",t,i=c._canvas,n=t.wordWrap){var r,s;const a=`${e}-${t.styleKey}-wordWrap-${n}`;if(c._measurementCache.has(a))return c._measurementCache.get(a);if(sf(t)&&af(e)){const i=xf(e,t,n,c._context,c._measureText,c.measureFont,c.canBreakChars,c.wordWrapSplit),r=new c(e,t,i.width,i.height,i.lines,i.lineWidths,i.lineHeight,i.maxLineWidth,i.fontProperties,{runsByLine:i.runsByLine,lineAscents:i.lineAscents,lineDescents:i.lineDescents,lineHeights:i.lineHeights,hasDropShadow:i.hasDropShadow});return c._measurementCache.set(a,r),r}const o=t._fontString,f=c.measureFont(o);0===f.fontSize&&(f.fontSize=t.fontSize,f.ascent=t.fontSize,f.descent=0);const l=c._context;l.font=o;const d=(n?c._wordWrap(e,t,i):e).split(hf),h=new Array(d.length);let u=0;for(let x=0;x<d.length;x++){const e=c._measureText(d[x],t.letterSpacing,l);h[x]=e,u=Math.max(u,e)}const p=null!=(s=null==(r=t._stroke)?void 0:r.width)?s:0,g=t.lineHeight||f.fontSize,m=c._getAlignWidth(u,t,n),b=c._adjustWidthForStyle(m,t),v=Math.max(g,f.fontSize+p)+(d.length-1)*(g+t.leading),y=c._adjustHeightForStyle(v,t),_=new c(e,t,b,y,d,h,g+t.leading,u,f);return c._measurementCache.set(a,_),_}static _adjustWidthForStyle(c,e){var t;let i=c+((null==(t=e._stroke)?void 0:t.width)||0);return e.dropShadow&&(i+=e.dropShadow.distance),i}static _adjustHeightForStyle(c,e){let t=c;return e.dropShadow&&(t+=e.dropShadow.distance),t}static _getAlignWidth(c,e,t){return t&&"left"!==e.align&&"justify"!==e.align?Math.max(c,e.wordWrapWidth):c}static _measureText(e,t,i){var n,r;let s=!1;c.experimentalLetterSpacingSupported&&(c.experimentalLetterSpacing?(i.letterSpacing=`${t}px`,i.textLetterSpacing=`${t}px`,s=!0):(i.letterSpacing="0px",i.textLetterSpacing="0px"));const a=i.measureText(e);let o=a.width;const f=-(null!=(n=a.actualBoundingBoxLeft)?n:0);let l=(null!=(r=a.actualBoundingBoxRight)?r:0)-f;if(o>0)if(s)o-=t,l-=t;else{const i=(c.graphemeSegmenter(e).length-1)*t;o+=i,l+=i}return Math.max(o,l)}static _wordWrap(e,t,i=c._canvas){return function(c,e,t,i,n,r,s){const a=t.getContext("2d",wf);a.font=e._fontString;let o=0,f="";const l=[],d=Object.create(null),{letterSpacing:h,whiteSpace:u}=e,p=gf(u),g=mf(u);let m=!p;const b=e.wordWrapWidth+h,v=vf(c);for(let _=0;_<v.length;_++){let c=v[_];if(uf(c)){if(!g){l.push(bf(f)),m=!p,f="",o=0;continue}c=" "}if(p){const e=pf(c),t=pf(f[f.length-1]);if(e&&t)continue}const t=Cf(c,h,d,a,i);if(t>b)if(""!==f&&(l.push(bf(f)),f="",o=0),n(c,e.breakWords)){const t=yf(c,e.breakWords,s,r);for(const c of t){const e=Cf(c,h,d,a,i);e+o>b&&(l.push(bf(f)),m=!1,f="",o=0),f+=c,o+=e}}else f.length>0&&(l.push(bf(f)),f="",o=0),l.push(bf(c)),m=!1,f="",o=0;else t+o>b&&(m=!1,l.push(bf(f)),f="",o=0),(f.length>0||!pf(c)||m)&&(f+=c,o+=t)}const y=bf(f);return y.length>0&&l.push(y),l.join("\n")}(e,t,i,c._measureText,c.canBreakWords,c.canBreakChars,c.wordWrapSplit)}static isBreakingSpace(c,e){return pf(c)}static canBreakWords(c,e){return e}static canBreakChars(c,e,t,i,n){return!0}static wordWrapSplit(e){return c.graphemeSegmenter(e)}static measureFont(e){var t,i;if(c._fonts[e])return c._fonts[e];const n=c._context;n.font=e;const r=n.measureText(c.METRICS_STRING+c.BASELINE_SYMBOL),s=null!=(t=r.actualBoundingBoxAscent)?t:0,a=null!=(i=r.actualBoundingBoxDescent)?i:0,o={ascent:s,descent:a,fontSize:s+a};return c._fonts[e]=o,o}static clearMetrics(e=""){e?delete c._fonts[e]:c._fonts={}}static get _canvas(){if(!c.__canvas){let t;try{const e=new OffscreenCanvas(0,0),i=e.getContext("2d",Af);if(null==i?void 0:i.measureText)return c.__canvas=e,e;t=Fe.get().createCanvas()}catch(e){t=Fe.get().createCanvas()}t.width=t.height=10,c.__canvas=t}return c.__canvas}static get _context(){return c.__context||(c.__context=c._canvas.getContext("2d",Af)),c.__context}};Tf.METRICS_STRING="|ÉqÅ",Tf.BASELINE_SYMBOL="M",Tf.BASELINE_MULTIPLIER=1.4,Tf.HEIGHT_MULTIPLIER=2,Tf.graphemeSegmenter=(()=>c=>[...c])(),Tf.experimentalLetterSpacing=!1,Tf._fonts={},Tf._measurementCache=rf(1e3);let Pf=Tf;const Mf=["serif","sans-serif","monospace","cursive","fantasy","system-ui"];function Ef(c){const e="number"==typeof c.fontSize?`${c.fontSize}px`:c.fontSize;let t=c.fontFamily;Array.isArray(c.fontFamily)||(t=c.fontFamily.split(","));for(let i=t.length-1;i>=0;i--){let c=t[i].trim();/([\"\'])[^\'\"]+\1/.test(c)||Mf.includes(c)||(c=`"${c}"`),t[i]=c}return`${c.fontStyle} ${c.fontVariant} ${c.fontWeight} ${e} ${t.join(",")}`}const Rf=1e5;function kf(c,e,t,i=0,n=0,r=0){var s;if(c.texture===cc.WHITE&&!c.fill)return Fc.shared.setValue(c.color).setAlpha(null!=(s=c.alpha)?s:1).toHexa();if(!c.fill){const t=e.createPattern(c.texture.source.resource,"repeat"),i=c.matrix.copyTo(w.shared);return i.scale(c.texture.source.pixelWidth,c.texture.source.pixelHeight),t.setTransform(i),t}if(c.fill instanceof na){const t=c.fill,i=e.createPattern(t.texture.source.resource,"repeat"),n=t.transform.copyTo(w.shared);return n.scale(t.texture.source.pixelWidth,t.texture.source.pixelHeight),i.setTransform(n),i}if(c.fill instanceof gs){const s=c.fill,a="linear"===s.type,o="local"===s.textureSpace;let f,l=1,d=1;o&&t&&(l=t.width+i,d=t.height+i);let h=!1;if(a){const{start:c,end:t}=s;f=e.createLinearGradient(c.x*l+n,c.y*d+r,t.x*l+n,t.y*d+r),h=Math.abs(t.x-c.x)<Math.abs(.1*(t.y-c.y))}else{const{center:c,innerRadius:t,outerCenter:i,outerRadius:a}=s;f=e.createRadialGradient(c.x*l+n,c.y*d+r,t*l,i.x*l+n,i.y*d+r,a*l)}if(h&&o&&t){const c=t.lineHeight/d;for(let e=0;e<t.lines.length;e++){const n=(e*t.lineHeight+i/2)/d;s.colorStops.forEach(e=>{let t=n+e.offset*c;t=Math.max(0,Math.min(1,t)),f.addColorStop(Math.floor(t*Rf)/Rf,Fc.shared.setValue(e.color).toHex())})}}else s.colorStops.forEach(c=>{f.addColorStop(c.offset,Fc.shared.setValue(c.color).toHex())});return f}return Bc("FillStyle not recognised",c),"red"}const Ff=new D;const If=new class{getCanvasAndContext(c){const{text:e,style:t,resolution:i=1}=c,n=t._getFinalPadding(),r=Pf.measureText(e||" ",t),s=Math.ceil(Math.ceil(Math.max(1,r.width)+2*n)*i),a=Math.ceil(Math.ceil(Math.max(1,r.height)+2*n)*i),o=Qo.getOptimalCanvasAndContext(s,a);this._renderTextToCanvas(t,n,i,o,r);return{canvasAndContext:o,frame:t.trim?tf({canvas:o.canvas,width:s,height:a,resolution:1,output:Ff}):Ff.set(0,0,s,a)}}returnCanvasAndContext(c){Qo.returnCanvasAndContext(c)}_renderTextToCanvas(c,e,t,i,n){var r,s,a,o,f,l;if(n.runsByLine&&n.runsByLine.length>0)return void this._renderTaggedTextToCanvas(n,c,e,t,i);const{canvas:d,context:h}=i,u=Ef(c),p=n.lines,g=n.lineHeight,m=n.lineWidths,b=n.maxLineWidth,v=n.fontProperties,y=d.height;if(h.resetTransform(),h.scale(t,t),h.textBaseline=c.textBaseline,null==(r=c._stroke)?void 0:r.width){const e=c._stroke;h.lineWidth=e.width,h.miterLimit=e.miterLimit,h.lineJoin=e.join,h.lineCap=e.cap}let _,x;h.font=u;const S=c.dropShadow?2:1,w=c.wordWrap?c.wordWrapWidth:b,C=(null!=(a=null==(s=c._stroke)?void 0:s.width)?a:0)/2;let A=(g-v.fontSize)/2;g-v.fontSize<0&&(A=0);for(let T=0;T<S;++T){const r=c.dropShadow&&0===T,s=r?Math.ceil(Math.max(1,y)+2*e):0,a=s*t;if(r)this._setupDropShadow(h,c,t,a);else{const t=c._gradientBounds,i=c._gradientOffset;if(t){const r={width:t.width,height:t.height,lineHeight:t.height,lines:n.lines};this._setFillAndStrokeStyles(h,c,r,e,C,null!=(o=null==i?void 0:i.x)?o:0,null!=(f=null==i?void 0:i.y)?f:0)}else i?this._setFillAndStrokeStyles(h,c,n,e,C,i.x,i.y):this._setFillAndStrokeStyles(h,c,n,e,C);h.shadowColor="black"}for(let t=0;t<p.length;t++)_=C,x=C+t*g+v.ascent+A,_+=this._getAlignmentOffset(m[t],w,c.align),(null==(l=c._stroke)?void 0:l.width)&&this._drawLetterSpacing(p[t],c,i,_+e,x+e-s,!0),void 0!==c._fill&&this._drawLetterSpacing(p[t],c,i,_+e,x+e-s)}}_renderTaggedTextToCanvas(c,e,t,i,n){var r,s,a;const{canvas:o,context:f}=n,{runsByLine:l,lineWidths:d,maxLineWidth:h,lineAscents:u,lineHeights:p,hasDropShadow:g}=c,m=o.height;f.resetTransform(),f.scale(i,i),f.textBaseline=e.textBaseline;const b=g?2:1,v=e.wordWrap?e.wordWrapWidth:h,y=(null!=(s=null==(r=e._stroke)?void 0:r.width)?s:0)/2,_=[];for(let x=0;x<l.length;x++){const c=l[x],e=[];for(const t of c){const c=Ef(t.style);f.font=c,e.push({width:Pf._measureText(t.text,t.style.letterSpacing,f),font:c})}_.push(e)}for(let x=0;x<b;++x){const c=g&&0===x,r=c?Math.ceil(Math.max(1,m)+2*t):0,s=r*i;c||(f.shadowColor="black");let o=y;for(let h=0;h<l.length;h++){const g=l[h],m=d[h],b=u[h],x=p[h],S=_[h];let w=y;w+=this._getAlignmentOffset(m,v,e.align);const C=o+b;let A=w+t;for(let e=0;e<g.length;e++){const l=g[e],{width:d,font:h}=S[e];if(f.font=h,f.textBaseline=l.style.textBaseline,null==(a=l.style._stroke)?void 0:a.width){const e=l.style._stroke;if(f.lineWidth=e.width,f.miterLimit=e.miterLimit,f.lineJoin=e.join,f.lineCap=e.cap,c){if(!l.style.dropShadow){A+=d;continue}this._setupDropShadow(f,l.style,i,s)}else{const c=Pf.measureFont(h),i=l.style.lineHeight||c.fontSize,n={width:d,height:i,lineHeight:i,lines:[l.text]};f.strokeStyle=kf(e,f,n,2*t,A-t,o)}this._drawLetterSpacing(l.text,l.style,n,A,C+t-r,!0)}A+=d}A=w+t;for(let e=0;e<g.length;e++){const a=g[e],{width:l,font:d}=S[e];if(f.font=d,f.textBaseline=a.style.textBaseline,void 0!==a.style._fill){if(c){if(!a.style.dropShadow){A+=l;continue}this._setupDropShadow(f,a.style,i,s)}else{const c=Pf.measureFont(d),e=a.style.lineHeight||c.fontSize,i={width:l,height:e,lineHeight:e,lines:[a.text]};f.fillStyle=kf(a.style._fill,f,i,2*t,A-t,o)}this._drawLetterSpacing(a.text,a.style,n,A,C+t-r,!1)}A+=l}o+=x}}}_setFillAndStrokeStyles(c,e,t,i,n,r=0,s=0){var a;if(c.fillStyle=e._fill?kf(e._fill,c,t,2*i,r,s):null,null==(a=e._stroke)?void 0:a.width){const a=n+2*i;c.strokeStyle=kf(e._stroke,c,t,a,r,s)}}_setupDropShadow(c,e,t,i){c.fillStyle="black",c.strokeStyle="black";const n=e.dropShadow,r=n.color,s=n.alpha;c.shadowColor=Fc.shared.setValue(r).setAlpha(s).toRgbaString();const a=n.blur*t,o=n.distance*t;c.shadowBlur=a,c.shadowOffsetX=Math.cos(n.angle)*o,c.shadowOffsetY=Math.sin(n.angle)*o+i}_getAlignmentOffset(c,e,t){return"right"===t?e-c:"center"===t?(e-c)/2:0}_drawLetterSpacing(c,e,t,i,n,r=!1){const{context:s}=t,a=e.letterSpacing;let o=!1;if(Pf.experimentalLetterSpacingSupported&&(Pf.experimentalLetterSpacing?(s.letterSpacing=`${a}px`,s.textLetterSpacing=`${a}px`,o=!0):(s.letterSpacing="0px",s.textLetterSpacing="0px")),0===a||o)return void(r?s.strokeText(c,i,n):s.fillText(c,i,n));let f=i;const l=Pf.graphemeSegmenter(c);let d=s.measureText(c).width,h=0;for(let u=0;u<l.length;++u){const c=l[u];r?s.strokeText(c,f,n):s.fillText(c,f,n);let e="";for(let t=u+1;t<l.length;++t)e+=l[t];h=s.measureText(e).width,f+=d-h+a,d=h}}},Bf=class c extends b{constructor(e={}){var t;super(),this.uid=L("textStyle"),this._tick=0,this._cachedFontString=null,function(c){var e,t,i,n,r;const s=c;if("boolean"==typeof s.dropShadow&&s.dropShadow){const a=Df.defaultDropShadow;c.dropShadow={alpha:null!=(e=s.dropShadowAlpha)?e:a.alpha,angle:null!=(t=s.dropShadowAngle)?t:a.angle,blur:null!=(i=s.dropShadowBlur)?i:a.blur,color:null!=(n=s.dropShadowColor)?n:a.color,distance:null!=(r=s.dropShadowDistance)?r:a.distance}}if(void 0!==s.strokeThickness){V(G,"strokeThickness is now a part of stroke");const e=s.stroke;let t={};if(Fc.isColorLike(e))t.color=e;else if(e instanceof gs||e instanceof na)t.fill=e;else{if(!Object.hasOwnProperty.call(e,"color")&&!Object.hasOwnProperty.call(e,"fill"))throw new Error("Invalid stroke value.");t=e}c.stroke=__spreadProps(__spreadValues({},t),{width:s.strokeThickness})}if(Array.isArray(s.fillGradientStops)){if(V(G,"gradient fill is now a fill pattern: `new FillGradient(...)`"),!Array.isArray(s.fill)||0===s.fill.length)throw new Error("Invalid fill value. Expected an array of colors for gradient fill.");s.fill.length!==s.fillGradientStops.length&&Bc("The number of fill colors must match the number of fill gradient stops.");const e=new gs({start:{x:0,y:0},end:{x:0,y:1},textureSpace:"local"}),t=s.fillGradientStops.slice(),i=s.fill.map(c=>Fc.shared.setValue(c).toNumber());t.forEach((c,t)=>{e.addColorStop(c,i[t])}),c.fill={fill:e}}}(e);e instanceof c&&(e=e._toObject());const i=__spreadValues(__spreadValues({},c.defaultTextStyle),e);for(const c in i){this[c]=i[c]}this._tagStyles=null!=(t=e.tagStyles)?t:void 0,this.update(),this._tick=0}get align(){return this._align}set align(c){this._align!==c&&(this._align=c,this.update())}get breakWords(){return this._breakWords}set breakWords(c){this._breakWords!==c&&(this._breakWords=c,this.update())}get dropShadow(){return this._dropShadow}set dropShadow(e){this._dropShadow!==e&&(this._dropShadow=null!==e&&"object"==typeof e?this._createProxy(__spreadValues(__spreadValues({},c.defaultDropShadow),e)):e?this._createProxy(__spreadValues({},c.defaultDropShadow)):null,this.update())}get fontFamily(){return this._fontFamily}set fontFamily(c){this._fontFamily!==c&&(this._fontFamily=c,this.update())}get fontSize(){return this._fontSize}set fontSize(c){this._fontSize!==c&&(this._fontSize="string"==typeof c?parseInt(c,10):c,this.update())}get fontStyle(){return this._fontStyle}set fontStyle(c){this._fontStyle!==c&&(this._fontStyle=c.toLowerCase(),this.update())}get fontVariant(){return this._fontVariant}set fontVariant(c){this._fontVariant!==c&&(this._fontVariant=c,this.update())}get fontWeight(){return this._fontWeight}set fontWeight(c){this._fontWeight!==c&&(this._fontWeight=c,this.update())}get leading(){return this._leading}set leading(c){this._leading!==c&&(this._leading=c,this.update())}get letterSpacing(){return this._letterSpacing}set letterSpacing(c){this._letterSpacing!==c&&(this._letterSpacing=c,this.update())}get lineHeight(){return this._lineHeight}set lineHeight(c){this._lineHeight!==c&&(this._lineHeight=c,this.update())}get padding(){return this._padding}set padding(c){this._padding!==c&&(this._padding=c,this.update())}get filters(){return this._filters}set filters(c){this._filters!==c&&(this._filters=Object.freeze(c),this.update())}get trim(){return this._trim}set trim(c){this._trim!==c&&(this._trim=c,this.update())}get textBaseline(){return this._textBaseline}set textBaseline(c){this._textBaseline!==c&&(this._textBaseline=c,this.update())}get whiteSpace(){return this._whiteSpace}set whiteSpace(c){this._whiteSpace!==c&&(this._whiteSpace=c,this.update())}get wordWrap(){return this._wordWrap}set wordWrap(c){this._wordWrap!==c&&(this._wordWrap=c,this.update())}get wordWrapWidth(){return this._wordWrapWidth}set wordWrapWidth(c){this._wordWrapWidth!==c&&(this._wordWrapWidth=c,this.update())}get fill(){return this._originalFill}set fill(c){c!==this._originalFill&&(this._originalFill=c,this._isFillStyle(c)&&(this._originalFill=this._createProxy(__spreadValues(__spreadValues({},pa.defaultFillStyle),c),()=>{this._fill=fa(__spreadValues({},this._originalFill),pa.defaultFillStyle)})),this._fill=fa(0===c?"black":c,pa.defaultFillStyle),this.update())}get stroke(){return this._originalStroke}set stroke(c){c!==this._originalStroke&&(this._originalStroke=c,this._isFillStyle(c)&&(this._originalStroke=this._createProxy(__spreadValues(__spreadValues({},pa.defaultStrokeStyle),c),()=>{this._stroke=la(__spreadValues({},this._originalStroke),pa.defaultStrokeStyle)})),this._stroke=la(c,pa.defaultStrokeStyle),this.update())}get tagStyles(){return this._tagStyles}set tagStyles(c){this._tagStyles!==c&&(this._tagStyles=null!=c?c:void 0,this.update())}update(){this._tick++,this._cachedFontString=null,this.emit("update",this)}reset(){const e=c.defaultTextStyle;for(const c in e)this[c]=e[c]}assign(c){for(const e in c){this[e]=c[e]}return this}get styleKey(){return`${this.uid}-${this._tick}`}get _fontString(){return null===this._cachedFontString&&(this._cachedFontString=Ef(this)),this._cachedFontString}_toObject(){return{align:this.align,breakWords:this.breakWords,dropShadow:this._dropShadow?__spreadValues({},this._dropShadow):null,fill:this._fill?__spreadValues({},this._fill):void 0,fontFamily:this.fontFamily,fontSize:this.fontSize,fontStyle:this.fontStyle,fontVariant:this.fontVariant,fontWeight:this.fontWeight,leading:this.leading,letterSpacing:this.letterSpacing,lineHeight:this.lineHeight,padding:this.padding,stroke:this._stroke?__spreadValues({},this._stroke):void 0,textBaseline:this.textBaseline,trim:this.trim,whiteSpace:this.whiteSpace,wordWrap:this.wordWrap,wordWrapWidth:this.wordWrapWidth,filters:this._filters?[...this._filters]:void 0,tagStyles:this._tagStyles?__spreadValues({},this._tagStyles):void 0}}clone(){return new c(this._toObject())}_getFinalPadding(){let c=0;if(this._filters)for(let e=0;e<this._filters.length;e++)c+=this._filters[e].padding;return Math.max(this._padding,c)}destroy(c=!1){var e,t,i,n;this.removeAllListeners();if("boolean"==typeof c?c:null==c?void 0:c.texture){const r="boolean"==typeof c?c:null==c?void 0:c.textureSource;(null==(e=this._fill)?void 0:e.texture)&&this._fill.texture.destroy(r),(null==(t=this._originalFill)?void 0:t.texture)&&this._originalFill.texture.destroy(r),(null==(i=this._stroke)?void 0:i.texture)&&this._stroke.texture.destroy(r),(null==(n=this._originalStroke)?void 0:n.texture)&&this._originalStroke.texture.destroy(r)}this._fill=null,this._stroke=null,this.dropShadow=null,this._originalStroke=null,this._originalFill=null}_createProxy(c,e){return new Proxy(c,{set:(c,t,i)=>(c[t]===i||(c[t]=i,null==e||e(t,i),this.update()),!0)})}_isFillStyle(c){return null!==(null!=c?c:null)&&!(Fc.isColorLike(c)||c instanceof gs||c instanceof na)}};Bf.defaultDropShadow={alpha:1,angle:Math.PI/6,blur:0,color:"black",distance:5},Bf.defaultTextStyle={align:"left",breakWords:!1,dropShadow:null,fill:"black",fontFamily:"Arial",fontSize:26,fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",leading:0,letterSpacing:0,lineHeight:0,padding:0,stroke:null,textBaseline:"alphabetic",trim:!1,whiteSpace:"pre",wordWrap:!1,wordWrapWidth:100};let Df=Bf;class Of{constructor(){this.batcherName="default",this.topology="triangle-list",this.attributeSize=4,this.indexSize=6,this.packAsQuad=!0,this.roundPixels=0,this._attributeStart=0,this._batcher=null,this._batch=null}get blendMode(){return this.renderable.groupBlendMode}get color(){return this.renderable.groupColorAlpha}reset(){this.renderable=null,this.texture=null,this._batcher=null,this._batch=null,this.bounds=null}destroy(){this.reset()}}class Lf extends Of{}class zf{constructor(c){this._renderer=c,c.runners.resolutionChange.add(this),this._managedTexts=new Qr({renderer:c,type:"renderable",onUnload:this.onTextUnload.bind(this),name:"canvasText"})}resolutionChange(){for(const c in this._managedTexts.items){const e=this._managedTexts.items[c];(null==e?void 0:e._autoResolution)&&e.onViewUpdate()}}validateRenderable(c){const e=this._getGpuText(c),t=c.styleKey;return e.currentKey!==t||c._didTextUpdate}addRenderable(c,e){const t=this._getGpuText(c);if(c._didTextUpdate){const e=c._autoResolution?this._renderer.resolution:c.resolution;t.currentKey===c.styleKey&&c._resolution===e||this._updateGpuText(c),c._didTextUpdate=!1,function(c,e){const{texture:t,bounds:i}=c,n=e._style._getFinalPadding();ec(i,e._anchor,t);const r=e._anchor._x*n*2,s=e._anchor._y*n*2;i.minX-=n-r,i.minY-=n-s,i.maxX-=n-r,i.maxY-=n-s}(t,c)}this._renderer.renderPipes.batch.addToBatch(t,e)}updateRenderable(c){const e=this._getGpuText(c);e._batcher.updateElement(e)}_updateGpuText(c){const e=this._getGpuText(c);e.texture&&this._renderer.canvasText.decreaseReferenceCount(e.currentKey),c._resolution=c._autoResolution?this._renderer.resolution:c.resolution,e.texture=this._renderer.canvasText.getManagedTexture(c),e.currentKey=c.styleKey}_getGpuText(c){return c._gpuData[this._renderer.uid]||this.initGpuText(c)}initGpuText(c){const e=new Lf;return e.currentKey="--",e.renderable=c,e.transform=c.groupTransform,e.bounds={minX:0,maxX:1,minY:0,maxY:0},e.roundPixels=this._renderer._roundPixels|c._roundPixels,c._gpuData[this._renderer.uid]=e,this._managedTexts.add(c),e}onTextUnload(c){const e=c._gpuData[this._renderer.uid];if(!e)return;const{canvasText:t}=this._renderer;t.getReferenceCount(e.currentKey)>0?t.decreaseReferenceCount(e.currentKey):e.texture&&t.returnTexture(e.texture)}destroy(){this._managedTexts.destroy(),this._renderer=null}}zf.extension={type:[s.WebGLPipes,s.WebGPUPipes,s.CanvasPipes],name:"text"};const Gf=new ic;class Uf{constructor(c,e){this._activeTextures={},this._renderer=c,this._retainCanvasContext=e}getTexture(c,e,t,i){var n;"string"==typeof c&&(V("8.0.0","CanvasTextSystem.getTexture: Use object TextOptions instead of separate arguments"),c={text:c,style:t,resolution:e}),c.style instanceof Df||(c.style=new Df(c.style)),c.textureStyle instanceof Z||(c.textureStyle=new Z(c.textureStyle)),"string"!=typeof c.text&&(c.text=c.text.toString());const{text:r,style:s,textureStyle:a}=c,o=null!=(n=c.resolution)?n:this._renderer.resolution,{frame:f,canvasAndContext:l}=If.getCanvasAndContext({text:r,style:s,resolution:o}),d=function(c,e,t,i){const n=Gf;n.minX=0,n.minY=0,n.maxX=c.width/i|0,n.maxY=c.height/i|0;const r=ge.getOptimalTexture(n.width,n.height,i,!1);return r.source.uploadMethodId="image",r.source.resource=c,r.source.alphaMode="premultiply-alpha-on-upload",r.frame.width=e/i,r.frame.height=t/i,r.source.emit("update",r.source),r.updateUvs(),r}(l.canvas,f.width,f.height,o);if(a&&(d.source.style=a),s.trim&&(f.pad(s.padding),d.frame.copyFrom(f),d.frame.scale(1/o),d.updateUvs()),s.filters){const c=this._applyFilters(d,s.filters);return this.returnTexture(d),If.returnCanvasAndContext(l),c}return this._renderer.texture.initSource(d._source),this._retainCanvasContext||If.returnCanvasAndContext(l),d}returnTexture(c){const e=c.source,t=e.resource;if(this._retainCanvasContext&&(null==t?void 0:t.getContext)){const c=t.getContext("2d");c&&If.returnCanvasAndContext({canvas:t,context:c})}e.resource=null,e.uploadMethodId="unknown",e.alphaMode="no-premultiply-alpha",ge.returnTexture(c,!0)}renderTextToCanvas(){V("8.10.0","CanvasTextSystem.renderTextToCanvas: no longer supported, use CanvasTextSystem.getTexture instead")}getManagedTexture(c){c._resolution=c._autoResolution?this._renderer.resolution:c.resolution;const e=c.styleKey;if(this._activeTextures[e])return this._increaseReferenceCount(e),this._activeTextures[e].texture;const t=this.getTexture({text:c.text,style:c.style,resolution:c._resolution,textureStyle:c.textureStyle});return this._activeTextures[e]={texture:t,usageCount:1},t}decreaseReferenceCount(c){const e=this._activeTextures[c];e&&(e.usageCount--,0===e.usageCount&&(this.returnTexture(e.texture),this._activeTextures[c]=null))}getReferenceCount(c){var e,t;return null!=(t=null==(e=this._activeTextures[c])?void 0:e.usageCount)?t:0}_increaseReferenceCount(c){this._activeTextures[c].usageCount++}_applyFilters(c,e){const t=this._renderer.renderTarget.renderTarget,i=this._renderer.filter.generateFilteredTexture({texture:c,filters:e});return this._renderer.renderTarget.bind(t,!1),i}destroy(){this._renderer=null;for(const c in this._activeTextures)this._activeTextures[c]&&this.returnTexture(this._activeTextures[c].texture);this._activeTextures=null}}class Vf extends Uf{constructor(c){super(c,!0)}}Vf.extension={type:[s.CanvasSystem],name:"canvasText"};class Nf extends Uf{constructor(c){super(c,!1)}}Nf.extension={type:[s.WebGLSystem,s.WebGPUSystem],name:"canvasText"},f.add(Vf),f.add(Nf),f.add(zf);class Wf extends Ko{constructor(...c){const e=function(c,e){var t;let i=null!=(t=c[0])?t:{};return("string"==typeof i||c[1])&&(V(G,`use new ${e}({ text: "hi!", style }) instead`),i={text:i,style:c[1]}),i}(c,"Text");super(e,Df),this.renderPipeId="text",e.textureStyle&&(this.textureStyle=e.textureStyle instanceof Z?e.textureStyle:new Z(e.textureStyle))}updateBounds(){const c=this._bounds,e=this._anchor;let t=0,i=0;if(this._style.trim){const{frame:c,canvasAndContext:e}=If.getCanvasAndContext({text:this.text,style:this._style,resolution:1});If.returnCanvasAndContext(e),t=c.width,i=c.height}else{const c=Pf.measureText(this._text,this._style);t=c.width,i=c.height}c.minX=-e._x*t,c.maxX=c.minX+t,c.minY=-e._y*i,c.maxY=c.minY+i}}class Hf extends b{constructor(){super(...arguments),this.chars=Object.create(null),this.lineHeight=0,this.fontFamily="",this.fontMetrics={fontSize:0,ascent:0,descent:0},this.baseLineOffset=0,this.distanceField={type:"none",range:0},this.pages=[],this.applyFillAsTint=!0,this.baseMeasurementFontSize=100,this.baseRenderedFontSize=100}get font(){return V(G,"BitmapFont.font is deprecated, please use BitmapFont.fontFamily instead."),this.fontFamily}get pageTextures(){return V(G,"BitmapFont.pageTextures is deprecated, please use BitmapFont.pages instead."),this.pages}get size(){return V(G,"BitmapFont.size is deprecated, please use BitmapFont.fontMetrics.fontSize instead."),this.fontMetrics.fontSize}get distanceFieldRange(){return V(G,"BitmapFont.distanceFieldRange is deprecated, please use BitmapFont.distanceField.range instead."),this.distanceField.range}get distanceFieldType(){return V(G,"BitmapFont.distanceFieldType is deprecated, please use BitmapFont.distanceField.type instead."),this.distanceField.type}destroy(c=!1){var e;this.emit("destroy",this),this.removeAllListeners();for(const t in this.chars)null==(e=this.chars[t].texture)||e.destroy();this.chars=null,c&&(this.pages.forEach(c=>c.texture.destroy(!0)),this.pages=null)}}const jf=class c extends Hf{constructor(e){var t,i,n;super(),this.resolution=1,this.pages=[],this._padding=0,this._measureCache=Object.create(null),this._currentChars=[],this._currentX=0,this._currentY=0,this._currentMaxCharHeight=0,this._currentPageIndex=-1,this._skipKerning=!1;const r=__spreadValues(__spreadValues({},c.defaultOptions),e);this._textureSize=r.textureSize,this._mipmap=r.mipmap;const s=r.style.clone();r.overrideFill&&(s._fill.color=16777215,s._fill.alpha=1,s._fill.texture=cc.WHITE,s._fill.fill=null),this.applyFillAsTint=r.overrideFill;const a=s.fontSize;s.fontSize=this.baseMeasurementFontSize;const o=Ef(s);r.overrideSize?s._stroke&&(s._stroke.width*=this.baseRenderedFontSize/a):s.fontSize=this.baseRenderedFontSize=a,this._style=s,this._skipKerning=null!=(t=r.skipKerning)&&t,this.resolution=null!=(i=r.resolution)?i:1,this._padding=null!=(n=r.padding)?n:4,r.textureStyle&&(this._textureStyle=r.textureStyle instanceof Z?r.textureStyle:new Z(r.textureStyle)),this.fontMetrics=Pf.measureFont(o),this.lineHeight=s.lineHeight||this.fontMetrics.fontSize||s.fontSize}ensureCharacters(c){var e,t,i,n;const r=Pf.graphemeSegmenter(c).filter(c=>!this._currentChars.includes(c)).filter((c,e,t)=>t.indexOf(c)===e);if(!r.length)return;let s;this._currentChars=[...this._currentChars,...r],s=-1===this._currentPageIndex?this._nextPage():this.pages[this._currentPageIndex];let{canvas:a,context:o}=s.canvasAndContext,f=s.texture.source;const l=this._style;let d=this._currentX,h=this._currentY,u=this._currentMaxCharHeight;const p=this.baseRenderedFontSize/this.baseMeasurementFontSize,g=this._padding*p;let m=!1;const b=a.width/this.resolution,v=a.height/this.resolution;for(let y=0;y<r.length;y++){const c=r[y],s=Pf.measureText(c,l,a,!1);s.lineHeight=s.height;const _=s.width*p,x=Math.ceil(("italic"===l.fontStyle?2:1)*_)+2*g,S=s.height*p+2*g;if(m=!1,"\n"!==c&&"\r"!==c&&"\t"!==c&&" "!==c&&(m=!0,u=Math.ceil(Math.max(S,u))),d+x>b&&(h+=u,u=S,d=0,h+u>v)){f.update();const c=this._nextPage();a=c.canvasAndContext.canvas,o=c.canvasAndContext.context,f=c.texture.source,d=0,h=0,u=0}const w=_/p-(null!=(t=null==(e=l.dropShadow)?void 0:e.distance)?t:0)-(null!=(n=null==(i=l._stroke)?void 0:i.width)?n:0);if(this.chars[c]={id:c.codePointAt(0),xOffset:-this._padding,yOffset:-this._padding,xAdvance:w,kerning:{}},m){this._drawGlyph(o,s,d+g,h+g,p,l);const e=f.width*p,t=f.height*p,i=new D(d/e*f.width,h/t*f.height,x/e*f.width,S/t*f.height);this.chars[c].texture=new cc({source:f,frame:i}),d+=Math.ceil(x)}}f.update(),this._currentX=d,this._currentY=h,this._currentMaxCharHeight=u,this._skipKerning&&this._applyKerning(r,o)}get pageTextures(){return V(G,"BitmapFont.pageTextures is deprecated, please use BitmapFont.pages instead."),this.pages}_applyKerning(c,e){const t=this._measureCache;for(let i=0;i<c.length;i++){const n=c[i];for(let c=0;c<this._currentChars.length;c++){const i=this._currentChars[c];let r=t[n];r||(r=t[n]=e.measureText(n).width);let s=t[i];s||(s=t[i]=e.measureText(i).width);let a=e.measureText(n+i).width,o=a-(r+s);o&&(this.chars[n].kerning[i]=o),a=e.measureText(n+i).width,o=a-(r+s),o&&(this.chars[i].kerning[n]=o)}}}_nextPage(){this._currentPageIndex++;const c=this.resolution,e=Qo.getOptimalCanvasAndContext(this._textureSize,this._textureSize,c);this._setupContext(e.context,this._style,c);const t=c*(this.baseRenderedFontSize/this.baseMeasurementFontSize),i=new cc({source:new Be({resource:e.canvas,resolution:t,alphaMode:"premultiply-alpha-on-upload",autoGenerateMipmaps:this._mipmap})});this._textureStyle&&(i.source.style=this._textureStyle);const n={canvasAndContext:e,texture:i};return this.pages[this._currentPageIndex]=n,n}_setupContext(c,e,t){var i;e.fontSize=this.baseRenderedFontSize,c.scale(t,t),c.font=Ef(e),e.fontSize=this.baseMeasurementFontSize,c.textBaseline=e.textBaseline;const n=e._stroke,r=null!=(i=null==n?void 0:n.width)?i:0;if(n&&(c.lineWidth=r,c.lineJoin=n.join,c.miterLimit=n.miterLimit,c.strokeStyle=kf(n,c)),e._fill&&(c.fillStyle=kf(e._fill,c)),e.dropShadow){const i=e.dropShadow,n=Fc.shared.setValue(i.color).toArray(),r=i.blur*t,s=i.distance*t;c.shadowColor=`rgba(${255*n[0]},${255*n[1]},${255*n[2]},${i.alpha})`,c.shadowBlur=r,c.shadowOffsetX=Math.cos(i.angle)*s,c.shadowOffsetY=Math.sin(i.angle)*s}else c.shadowColor="black",c.shadowBlur=0,c.shadowOffsetX=0,c.shadowOffsetY=0}_drawGlyph(c,e,t,i,n,r){var s;const a=e.text,o=e.fontProperties,f=r._stroke,l=(null!=(s=null==f?void 0:f.width)?s:0)*n,d=t+l/2,h=i-l/2,u=o.descent*n,p=e.lineHeight*n;let g=!1;r.stroke&&l&&(g=!0,c.strokeText(a,d,h+p-u));const{shadowBlur:m,shadowOffsetX:b,shadowOffsetY:v}=c;r._fill&&(g&&(c.shadowBlur=0,c.shadowOffsetX=0,c.shadowOffsetY=0),c.fillText(a,d,h+p-u)),g&&(c.shadowBlur=m,c.shadowOffsetX=b,c.shadowOffsetY=v)}destroy(){super.destroy();for(let c=0;c<this.pages.length;c++){const{canvasAndContext:e,texture:t}=this.pages[c];Qo.returnCanvasAndContext(e),t.destroy(!0)}this.pages=null}};jf.defaultOptions={textureSize:512,style:new Df,mipmap:!0};let Yf=jf;let Xf=0;const Zf=new class{constructor(){this.ALPHA=[["a","z"],["A","Z"]," "],this.NUMERIC=[["0","9"]],this.ALPHANUMERIC=[["a","z"],["A","Z"],["0","9"]," "],this.ASCII=[[" ","~"]],this.defaultOptions={chars:this.ALPHANUMERIC,resolution:1,padding:4,skipKerning:!1,textureStyle:null},this.measureCache=rf(1e3)}getFont(c,e){var t;let i=`${e.fontFamily}-bitmap`,n=!0;if(e._fill.fill&&!e._stroke?(i+=e._fill.fill.styleKey,n=!1):(e._stroke||e.dropShadow)&&(i=`${e.styleKey}-bitmap`,n=!1),!He.has(i)){const c=Object.create(e);c._lineHeight=0;const t=new Yf(__spreadValues({style:c,overrideFill:n,overrideSize:!0},this.defaultOptions));Xf++,Xf>50&&Bc("BitmapText",`You have dynamically created ${Xf} bitmap fonts, this can be inefficient. Try pre installing your font styles using \`BitmapFont.install({name:"style1", style})\``),t.once("destroy",()=>{Xf--,He.remove(i)}),He.set(i,t)}const r=He.get(i);return null==(t=r.ensureCharacters)||t.call(r,c),r}getLayout(c,e,t=!0){const i=this.getFont(c,e),n=`${c}-${e.styleKey}-${t}`;if(this.measureCache.has(n))return this.measureCache.get(n);const r=function(c,e,t,i){const n={width:0,height:0,offsetY:0,scale:e.fontSize/t.baseMeasurementFontSize,lines:[{width:0,charPositions:[],spaceWidth:0,spacesIndex:[],chars:[]}]};n.offsetY=t.baseLineOffset;let r=n.lines[0],s=null,a=!0;const o={width:0,start:0,index:0,positions:[],chars:[]},f=t.baseMeasurementFontSize/e.fontSize,l=e.letterSpacing*f,d=e.wordWrapWidth*f,h=e.lineHeight?e.lineHeight*f:t.lineHeight,u=e.wordWrap&&e.breakWords,p=c=>{const e=r.width;for(let t=0;t<o.index;t++){const i=c.positions[t];r.chars.push(c.chars[t]),r.charPositions.push(i+e)}r.width+=c.width,a=!1,o.width=0,o.index=0,o.chars.length=0},g=()=>{let c=r.chars.length-1;if(i){let e=r.chars[c];for(;" "===e;)r.width-=t.chars[e].xAdvance,e=r.chars[--c]}n.width=Math.max(n.width,r.width),r={width:0,charPositions:[],chars:[],spaceWidth:0,spacesIndex:[]},a=!0,n.lines.push(r),n.height+=h},m=c=>c-l>d;for(let b=0;b<c.length+1;b++){let i;const n=b===c.length;n||(i=c[b]);const f=t.chars[i]||t.chars[" "];if(/(?:\s)/.test(i)||"\r"===i||"\n"===i||n){if(!a&&e.wordWrap&&m(r.width+o.width)?(g(),p(o),n||r.charPositions.push(0)):(o.start=r.width,p(o),n||r.charPositions.push(0)),"\r"===i||"\n"===i)g();else if(!n){const c=f.xAdvance+(f.kerning[s]||0)+l;r.width+=c,r.spaceWidth=c,r.spacesIndex.push(r.charPositions.length),r.chars.push(i)}}else{const c=f.kerning[s]||0,e=f.xAdvance+c+l;u&&m(r.width+o.width+e)&&(p(o),g()),o.positions[o.index++]=o.width+c,o.chars.push(i),o.width+=e}s=i}return g(),"center"===e.align?function(c){for(let e=0;e<c.lines.length;e++){const t=c.lines[e],i=c.width/2-t.width/2;for(let c=0;c<t.charPositions.length;c++)t.charPositions[c]+=i}}(n):"right"===e.align?function(c){for(let e=0;e<c.lines.length;e++){const t=c.lines[e],i=c.width-t.width;for(let c=0;c<t.charPositions.length;c++)t.charPositions[c]+=i}}(n):"justify"===e.align&&function(c){const e=c.width;for(let t=0;t<c.lines.length;t++){const i=c.lines[t];let n=0,r=i.spacesIndex[n++],s=0;const a=i.spacesIndex.length,o=(e-i.width)/a;for(let c=0;c<i.charPositions.length;c++)c===r&&(r=i.spacesIndex[n++],s+=o),i.charPositions[c]+=s}}(n),n}(Pf.graphemeSegmenter(c),e,i,t);return this.measureCache.set(n,r),r}measureText(c,e,t=!0){return this.getLayout(c,e,t)}install(...c){var e,t,i,n,r;let s=c[0];"string"==typeof s&&(s={name:s,style:c[1],chars:null==(e=c[2])?void 0:e.chars,resolution:null==(t=c[2])?void 0:t.resolution,padding:null==(i=c[2])?void 0:i.padding,skipKerning:null==(n=c[2])?void 0:n.skipKerning},V(G,"BitmapFontManager.install(name, style, options) is deprecated, use BitmapFontManager.install({name, style, ...options})"));const a=null==s?void 0:s.name;if(!a)throw new Error("[BitmapFontManager] Property `name` is required.");s=__spreadValues(__spreadValues({},this.defaultOptions),s);const o=s.style,f=o instanceof Df?o:new Df(o),l=null!=(r=s.dynamicFill)?r:this._canUseTintForStyle(f),d=new Yf({style:f,overrideFill:l,skipKerning:s.skipKerning,padding:s.padding,resolution:s.resolution,overrideSize:!1,textureStyle:s.textureStyle}),h=function(c){if(""===c)return[];"string"==typeof c&&(c=[c]);const e=[];for(let t=0,i=c.length;t<i;t++){const i=c[t];if(Array.isArray(i)){if(2!==i.length)throw new Error(`[BitmapFont]: Invalid character range length, expecting 2 got ${i.length}.`);if(0===i[0].length||0===i[1].length)throw new Error("[BitmapFont]: Invalid character delimiter.");const c=i[0].charCodeAt(0),t=i[1].charCodeAt(0);if(t<c)throw new Error("[BitmapFont]: Invalid character range.");for(let i=c,n=t;i<=n;i++)e.push(String.fromCharCode(i))}else e.push(...Array.from(i))}if(0===e.length)throw new Error("[BitmapFont]: Empty set when resolving characters.");return e}(s.chars);return d.ensureCharacters(h.join("")),He.set(`${a}-bitmap`,d),d.once("destroy",()=>He.remove(`${a}-bitmap`)),d}uninstall(c){const e=`${c}-bitmap`,t=He.get(e);t&&t.destroy()}_canUseTintForStyle(c){return!(c._stroke||c.dropShadow&&0!==c.dropShadow.color||c._fill.fill||16777215!==c._fill.color)}};const qf=class c{static _getPatternRepeat(c,e){const t=c&&"clamp-to-edge"!==c,i=e&&"clamp-to-edge"!==e;return t&&i?"repeat":t?"repeat-x":i?"repeat-y":"no-repeat"}start(c,e,t){}execute(e,t){var i,n,r,s,a,o,f,l,d,h;const u=t.elements;if(!u||!u.length)return;const p=e.renderer,g=p.canvasContext,m=g.activeContext;for(let b=0;b<u.length;b++){const e=u[b];if(!e.packAsQuad)continue;const v=e,y=v.texture,_=y?Fo.getCanvasSource(y):null;if(!_)continue;const x=y.source.style,S=g.smoothProperty,w="nearest"!==x.scaleMode;m[S]!==w&&(m[S]=w),g.setBlendMode(t.blendMode);const C=null!=(n=null==(i=p.globalUniforms.globalUniformData)?void 0:i.worldColor)?n:4294967295,A=v.color,T=(C>>>24&255)/255*((A>>>24&255)/255)*(null!=(s=null==(r=p.filter)?void 0:r.alphaMultiplier)?s:1);if(T<=0)continue;m.globalAlpha=T;const P=te($c(16777215&A,16777215&C)),M=y.frame,E=null!=(a=x.addressModeU)?a:x.addressMode,R=null!=(o=x.addressModeV)?o:x.addressMode,k=c._getPatternRepeat(E,R),F=null!=(l=null!=(f=y.source._resolution)?f:y.source.resolution)?l:1,B=null==(h=null==(d=v.renderable)?void 0:d.renderGroup)?void 0:h.isCachedAsTexture,D=M.x*F,O=M.y*F,L=M.width*F,z=M.height*F,G=v.bounds,U=p.renderTarget.renderTarget.isRoot,V=G.minX,N=G.minY,W=G.maxX-G.minX,H=G.maxY-G.minY,j=y.rotate,Y=y.uvs,X=Math.min(Y.x0,Y.x1,Y.x2,Y.x3,Y.y0,Y.y1,Y.y2,Y.y3),Z=Math.max(Y.x0,Y.x1,Y.x2,Y.x3,Y.y0,Y.y1,Y.y2,Y.y3),q="no-repeat"!==k&&(X<0||Z>1),K=j&&!(!q&&(16777215!==P||j));K?(c._tempPatternMatrix.copyFrom(v.transform),I.matrixAppendRotationInv(c._tempPatternMatrix,j,V,N,W,H),g.setContextTransform(c._tempPatternMatrix,1===v.roundPixels,void 0,B&&U)):g.setContextTransform(v.transform,1===v.roundPixels,void 0,B&&U);const Q=K?0:V,J=K?0:N,$=W,cc=H;if(q){let e=_;const t=16777215!==P&&!j,i=M.width<=y.source.width&&M.height<=y.source.height;t&&i&&(e=Fo.getTintedCanvas({texture:y},P));const n=m.createPattern(e,k);if(!n)continue;const r=$,s=cc;if(0===r||0===s)continue;const a=1/r,o=1/s,f=(Y.x1-Y.x0)*a,l=(Y.y1-Y.y0)*a,d=(Y.x3-Y.x0)*o,h=(Y.y3-Y.y0)*o,u=Y.x0-f*Q-d*J,p=Y.y0-l*Q-h*J,g=y.source.pixelWidth,b=y.source.pixelHeight;c._tempPatternMatrix.set(f*g,l*b,d*g,h*b,u*g,p*b),Fo.applyPatternTransform(n,c._tempPatternMatrix),m.fillStyle=n,m.fillRect(Q,J,$,cc)}else{const c=16777215!==P||j?Fo.getTintedCanvas({texture:y},P):_,e=c!==_;m.drawImage(c,e?0:D,e?0:O,e?c.width:L,e?c.height:z,Q,J,$,cc)}}}};qf._tempPatternMatrix=new w,qf.extension={type:[s.CanvasPipesAdaptor],name:"batch"};let Kf=qf;class Qf{constructor(){this._tempState=ai.for2d(),this._didUploadHash={}}init(c){c.renderer.runners.contextChange.add(this)}contextChange(){this._didUploadHash={}}start(c,e,t){const i=c.renderer,n=this._didUploadHash[t.uid];i.shader.bind(t,n),n||(this._didUploadHash[t.uid]=!0),i.shader.updateUniformGroup(i.globalUniforms.uniformGroup),i.geometry.bind(e,t.glProgram)}execute(c,e){const t=c.renderer;this._tempState.blendMode=e.blendMode,t.state.set(this._tempState);const i=e.textures.textures;for(let n=0;n<e.textures.count;n++)t.texture.bind(i[n],n);t.geometry.draw(e.topology,e.size,e.start)}}Qf.extension={type:[s.WebGLPipesAdaptor],name:"batch"};const Jf=ai.for2d();class $f{start(c,e,t){const i=c.renderer,n=i.encoder,r=t.gpuProgram;this._shader=t,this._geometry=e,n.setGeometry(e,r),Jf.blendMode="normal",i.pipeline.getPipeline(e,r,Jf);const s=i.globalUniforms.bindGroup;n.resetBindGroup(1),n.setBindGroup(0,s,r)}execute(c,e){const t=this._shader.gpuProgram,i=c.renderer,n=i.encoder;if(!e.bindGroup){const c=e.textures;e.bindGroup=jn(c.textures,c.count,i.limits.maxBatchableTextures)}Jf.blendMode=e.blendMode;const r=i.bindGroup.getBindGroup(e.bindGroup,t,1),s=i.pipeline.getPipeline(this._geometry,t,Jf,e.topology);e.bindGroup._touch(i.gc.now,i.tick),n.setPipeline(s),n.renderPassEncoder.setBindGroup(1,r),n.renderPassEncoder.drawIndexed(e.size,1,e.start)}}$f.extension={type:[s.WebGPUPipesAdaptor],name:"batch"};const cl=class c{constructor(c,e){var t,i;this.state=ai.for2d(),this._batchersByInstructionSet=Object.create(null),this._activeBatches=Object.create(null),this.renderer=c,this._adaptor=e,null==(i=(t=this._adaptor).init)||i.call(t,this)}static getBatcher(c){return new this._availableBatchers[c]}buildStart(c){let e=this._batchersByInstructionSet[c.uid];e||(e=this._batchersByInstructionSet[c.uid]=Object.create(null),e.default||(e.default=new Kr({maxTextures:this.renderer.limits.maxBatchableTextures}))),this._activeBatches=e,this._activeBatch=this._activeBatches.default;for(const t in this._activeBatches)this._activeBatches[t].begin()}addToBatch(e,t){if(this._activeBatch.name!==e.batcherName){this._activeBatch.break(t);let i=this._activeBatches[e.batcherName];i||(i=this._activeBatches[e.batcherName]=c.getBatcher(e.batcherName),i.begin()),this._activeBatch=i}this._activeBatch.add(e)}break(c){this._activeBatch.break(c)}buildEnd(c){this._activeBatch.break(c);const e=this._activeBatches;for(const t in e){const c=e[t],i=c.geometry;i.indexBuffer.setDataWithSize(c.indexBuffer,c.indexSize,!0),i.buffers[0].setDataWithSize(c.attributeBuffer.float32View,c.attributeSize,!1)}}upload(c){const e=this._batchersByInstructionSet[c.uid];for(const t in e){const c=e[t],i=c.geometry;c.dirty&&(c.dirty=!1,i.buffers[0].update(4*c.attributeSize))}}execute(c){if("startBatch"===c.action){const e=c.batcher,t=e.geometry,i=e.shader;this._adaptor.start(this,t,i)}this._adaptor.execute(this,c)}destroy(){this.state=null,this.renderer=null,this._adaptor=null;for(const c in this._activeBatches)this._activeBatches[c].destroy();this._activeBatches=null}};cl.extension={type:[s.WebGLPipes,s.WebGPUPipes,s.CanvasPipes],name:"batch"},cl._availableBatchers=Object.create(null);let el=cl;f.handleByMap(s.Batcher,el._availableBatchers),f.add(Kr);const tl={name:"texture-bit",vertex:{header:"\n\n struct TextureUniforms {\n uTextureMatrix:mat3x3<f32>,\n }\n\n @group(2) @binding(2) var<uniform> textureUniforms : TextureUniforms;\n ",main:"\n uv = (textureUniforms.uTextureMatrix * vec3(uv, 1.0)).xy;\n "},fragment:{header:"\n @group(2) @binding(0) var uTexture: texture_2d<f32>;\n @group(2) @binding(1) var uSampler: sampler;\n\n\n ",main:"\n outColor = textureSample(uTexture, uSampler, vUV);\n "}},il={name:"texture-bit",vertex:{header:"\n uniform mat3 uTextureMatrix;\n ",main:"\n uv = (uTextureMatrix * vec3(uv, 1.0)).xy;\n "},fragment:{header:"\n uniform sampler2D uTexture;\n\n\n ",main:"\n outColor = texture(uTexture, vUV);\n "}},nl=new ic;class rl extends Nc{constructor(){super(),this.filters=[new lo({sprite:new we(cc.EMPTY),inverse:!1,resolution:"inherit",antialias:"inherit"})]}get sprite(){return this.filters[0].sprite}set sprite(c){this.filters[0].sprite=c}get inverse(){return this.filters[0].inverse}set inverse(c){this.filters[0].inverse=c}}class sl{constructor(c){this._activeMaskStage=[],this._renderer=c}push(c,e,t){const i=this._renderer;if(i.renderPipes.batch.break(t),t.add({renderPipeId:"alphaMask",action:"pushMaskBegin",mask:c,inverse:e._maskOptions.inverse,canBundle:!1,maskedContainer:e}),c.inverse=e._maskOptions.inverse,c.renderMaskToTexture){const e=c.mask;e.includeInBuild=!0,e.collectRenderables(t,i,null),e.includeInBuild=!1}i.renderPipes.batch.break(t),t.add({renderPipeId:"alphaMask",action:"pushMaskEnd",mask:c,maskedContainer:e,inverse:e._maskOptions.inverse,canBundle:!1})}pop(c,e,t){this._renderer.renderPipes.batch.break(t),t.add({renderPipeId:"alphaMask",action:"popMaskEnd",mask:c,inverse:e._maskOptions.inverse,canBundle:!1})}execute(c){const e=this._renderer,t=c.mask.renderMaskToTexture;if("pushMaskBegin"===c.action){const i=Lc.get(rl);if(i.inverse=c.inverse,t){c.mask.mask.measurable=!0;const t=Kc(c.mask.mask,!0,nl);c.mask.mask.measurable=!1,t.ceil();const n=e.renderTarget.renderTarget.colorTexture.source,r=ge.getOptimalTexture(t.width,t.height,n._resolution,n.antialias);e.renderTarget.push(r,!0),e.globalUniforms.push({offset:t,worldColor:4294967295});const s=i.sprite;s.texture=r,s.worldTransform.tx=t.minX,s.worldTransform.ty=t.minY,this._activeMaskStage.push({filterEffect:i,maskedContainer:c.maskedContainer,filterTexture:r})}else i.sprite=c.mask.mask,this._activeMaskStage.push({filterEffect:i,maskedContainer:c.maskedContainer})}else if("pushMaskEnd"===c.action){const c=this._activeMaskStage[this._activeMaskStage.length-1];t&&(e.type===ii.WEBGL&&e.renderTarget.finishRenderPass(),e.renderTarget.pop(),e.globalUniforms.pop()),e.filter.push({renderPipeId:"filter",action:"pushFilter",container:c.maskedContainer,filterEffect:c.filterEffect,canBundle:!1})}else if("popMaskEnd"===c.action){e.filter.pop();const c=this._activeMaskStage.pop();t&&ge.returnTexture(c.filterTexture),Lc.return(c.filterEffect)}}destroy(){this._renderer=null,this._activeMaskStage=null}}sl.extension={type:[s.WebGLPipes,s.WebGPUPipes,s.CanvasPipes],name:"alphaMask"};class al{constructor(c){this._colorStack=[],this._colorStackIndex=0,this._currentColor=0,this._renderer=c}buildStart(){this._colorStack[0]=15,this._colorStackIndex=1,this._currentColor=15}push(c,e,t){this._renderer.renderPipes.batch.break(t);const i=this._colorStack;i[this._colorStackIndex]=i[this._colorStackIndex-1]&c.mask;const n=this._colorStack[this._colorStackIndex];n!==this._currentColor&&(this._currentColor=n,t.add({renderPipeId:"colorMask",colorMask:n,canBundle:!1})),this._colorStackIndex++}pop(c,e,t){this._renderer.renderPipes.batch.break(t);const i=this._colorStack;this._colorStackIndex--;const n=i[this._colorStackIndex-1];n!==this._currentColor&&(this._currentColor=n,t.add({renderPipeId:"colorMask",colorMask:n,canBundle:!1}))}execute(c){}destroy(){this._renderer=null,this._colorStack=null}}al.extension={type:[s.CanvasPipes],name:"colorMask"};class ol{constructor(c){this._colorStack=[],this._colorStackIndex=0,this._currentColor=0,this._renderer=c}buildStart(){this._colorStack[0]=15,this._colorStackIndex=1,this._currentColor=15}push(c,e,t){this._renderer.renderPipes.batch.break(t);const i=this._colorStack;i[this._colorStackIndex]=i[this._colorStackIndex-1]&c.mask;const n=this._colorStack[this._colorStackIndex];n!==this._currentColor&&(this._currentColor=n,t.add({renderPipeId:"colorMask",colorMask:n,canBundle:!1})),this._colorStackIndex++}pop(c,e,t){this._renderer.renderPipes.batch.break(t);const i=this._colorStack;this._colorStackIndex--;const n=i[this._colorStackIndex-1];n!==this._currentColor&&(this._currentColor=n,t.add({renderPipeId:"colorMask",colorMask:n,canBundle:!1}))}execute(c){this._renderer.colorMask.setMask(c.colorMask)}destroy(){this._renderer=null,this._colorStack=null}}function fl(c,e){switch(e.type){case"rectangle":{const t=e;c.rect(t.x,t.y,t.width,t.height);break}case"roundedRectangle":{const t=e;!function(c,e,t,i,n,r){r=Math.max(0,Math.min(r,Math.min(i,n)/2)),c.moveTo(e+r,t),c.lineTo(e+i-r,t),c.quadraticCurveTo(e+i,t,e+i,t+r),c.lineTo(e+i,t+n-r),c.quadraticCurveTo(e+i,t+n,e+i-r,t+n),c.lineTo(e+r,t+n),c.quadraticCurveTo(e,t+n,e,t+n-r),c.lineTo(e,t+r),c.quadraticCurveTo(e,t,e+r,t)}(c,t.x,t.y,t.width,t.height,t.radius);break}case"circle":{const t=e;c.moveTo(t.x+t.radius,t.y),c.arc(t.x,t.y,t.radius,0,2*Math.PI);break}case"ellipse":{const t=e;c.ellipse?(c.moveTo(t.x+t.halfWidth,t.y),c.ellipse(t.x,t.y,t.halfWidth,t.halfHeight,0,0,2*Math.PI)):(c.save(),c.translate(t.x,t.y),c.scale(t.halfWidth,t.halfHeight),c.moveTo(1,0),c.arc(0,0,1,0,2*Math.PI),c.restore());break}case"triangle":{const t=e;c.moveTo(t.x,t.y),c.lineTo(t.x2,t.y2),c.lineTo(t.x3,t.y3),c.closePath();break}default:{const t=e,i=t.points;if(!(null==i?void 0:i.length))break;c.moveTo(i[0],i[1]);for(let e=2;e<i.length;e+=2)c.lineTo(i[e],i[e+1]);t.closePath&&c.closePath();break}}}function ll(c,e){if(!(null==e?void 0:e.length))return!1;for(let t=0;t<e.length;t++){const i=e[t];if(!(null==i?void 0:i.shape))continue;const n=i.transform,r=n&&!n.isIdentity();r&&(c.save(),c.transform(n.a,n.b,n.c,n.d,n.tx,n.ty)),fl(c,i.shape),r&&c.restore()}return!0}ol.extension={type:[s.WebGLPipes,s.WebGPUPipes],name:"colorMask"};class dl{constructor(c){this._warnedMaskTypes=new Set,this._canvasMaskStack=[],this._renderer=c}push(c,e,t){this._renderer.renderPipes.batch.break(t),t.add({renderPipeId:"stencilMask",action:"pushMaskBegin",mask:c,inverse:e._maskOptions.inverse,canBundle:!1})}pop(c,e,t){this._renderer.renderPipes.batch.break(t),t.add({renderPipeId:"stencilMask",action:"popMaskEnd",mask:c,inverse:e._maskOptions.inverse,canBundle:!1})}execute(c){var e,t,i;if("pushMaskBegin"!==c.action&&"popMaskEnd"!==c.action)return;const n=this._renderer,r=n.canvasContext,s=null==r?void 0:r.activeContext;if(!s)return;if("popMaskEnd"===c.action){return void(this._canvasMaskStack.pop()&&s.restore())}c.inverse&&this._warnOnce("inverse","CanvasRenderer: inverse masks are not supported on Canvas2D; ignoring inverse flag.");const a=c.mask.mask;if(!(a instanceof _o))return this._warnOnce("nonGraphics","CanvasRenderer: only Graphics masks are supported in Canvas2D; skipping mask."),void this._canvasMaskStack.push(!1);const o=a,f=null==(e=o.context)?void 0:e.instructions;if(!(null==f?void 0:f.length))return void this._canvasMaskStack.push(!1);s.save(),r.setContextTransform(o.groupTransform,1===(n._roundPixels|o._roundPixels)),s.beginPath();let l=!1,d=!1;for(let h=0;h<f.length;h++){const c=f[h],e=c.action;if("fill"!==e&&"stroke"!==e)continue;const n=c.data,r=null==(t=null==n?void 0:n.path)?void 0:t.shapePath;if(!(null==(i=null==r?void 0:r.shapePrimitives)?void 0:i.length))continue;const a=r.shapePrimitives;for(let t=0;t<a.length;t++){const c=a[t];if(!(null==c?void 0:c.shape))continue;const e=c.transform,i=e&&!e.isIdentity();i&&(s.save(),s.transform(e.a,e.b,e.c,e.d,e.tx,e.ty)),fl(s,c.shape),d=ll(s,c.holes)||d,l=!0,i&&s.restore()}}if(!l)return s.restore(),void this._canvasMaskStack.push(!1);d?s.clip("evenodd"):s.clip(),this._canvasMaskStack.push(!0)}destroy(){this._renderer=null,this._warnedMaskTypes=null,this._canvasMaskStack=null}_warnOnce(c,e){this._warnedMaskTypes.has(c)||(this._warnedMaskTypes.add(c),Bc(e))}}dl.extension={type:[s.CanvasPipes],name:"stencilMask"};class hl{constructor(c){this._maskStackHash={},this._maskHash=new WeakMap,this._renderer=c}push(c,e,t){var i;const n=c,r=this._renderer;r.renderPipes.batch.break(t),r.renderPipes.blendMode.setBlendMode(n.mask,"none",t),t.add({renderPipeId:"stencilMask",action:"pushMaskBegin",mask:c,inverse:e._maskOptions.inverse,canBundle:!1});const s=n.mask;s.includeInBuild=!0,this._maskHash.has(n)||this._maskHash.set(n,{instructionsStart:0,instructionsLength:0});const a=this._maskHash.get(n);a.instructionsStart=t.instructionSize,s.collectRenderables(t,r,null),s.includeInBuild=!1,r.renderPipes.batch.break(t),t.add({renderPipeId:"stencilMask",action:"pushMaskEnd",mask:c,inverse:e._maskOptions.inverse,canBundle:!1});const o=t.instructionSize-a.instructionsStart-1;a.instructionsLength=o;const f=r.renderTarget.renderTarget.uid;null!=(i=this._maskStackHash)[f]||(i[f]=0)}pop(c,e,t){const i=c,n=this._renderer;n.renderPipes.batch.break(t),n.renderPipes.blendMode.setBlendMode(i.mask,"none",t),t.add({renderPipeId:"stencilMask",action:"popMaskBegin",inverse:e._maskOptions.inverse,canBundle:!1});const r=this._maskHash.get(c);for(let s=0;s<r.instructionsLength;s++)t.instructions[t.instructionSize++]=t.instructions[r.instructionsStart++];t.add({renderPipeId:"stencilMask",action:"popMaskEnd",canBundle:!1})}execute(c){var e,t;const i=this._renderer,n=i,r=i.renderTarget.renderTarget.uid;let s=null!=(e=(t=this._maskStackHash)[r])?e:t[r]=0;"pushMaskBegin"===c.action?(n.renderTarget.ensureDepthStencil(),n.stencil.setStencilMode(qn.RENDERING_MASK_ADD,s),s++,n.colorMask.setMask(0)):"pushMaskEnd"===c.action?(c.inverse?n.stencil.setStencilMode(qn.INVERSE_MASK_ACTIVE,s):n.stencil.setStencilMode(qn.MASK_ACTIVE,s),n.colorMask.setMask(15)):"popMaskBegin"===c.action?(n.colorMask.setMask(0),0!==s?n.stencil.setStencilMode(qn.RENDERING_MASK_REMOVE,s):(n.renderTarget.clear(null,Ui.STENCIL),n.stencil.setStencilMode(qn.DISABLED,s)),s--):"popMaskEnd"===c.action&&(c.inverse?n.stencil.setStencilMode(qn.INVERSE_MASK_ACTIVE,s):n.stencil.setStencilMode(qn.MASK_ACTIVE,s),n.colorMask.setMask(15)),this._maskStackHash[r]=s}destroy(){this._renderer=null,this._maskStackHash=null,this._maskHash=null}}hl.extension={type:[s.WebGLPipes,s.WebGPUPipes],name:"stencilMask"};const ul="source-over";const pl=new w;class gl{constructor(c){this.activeResolution=1,this.smoothProperty="imageSmoothingEnabled",this.blendModes=function(){const c=ko(),e=Object.create(null);return e.inherit=ul,e.none=ul,e.normal="source-over",e.add="lighter",e.multiply=c?"multiply":ul,e.screen=c?"screen":ul,e.overlay=c?"overlay":ul,e.darken=c?"darken":ul,e.lighten=c?"lighten":ul,e["color-dodge"]=c?"color-dodge":ul,e["color-burn"]=c?"color-burn":ul,e["hard-light"]=c?"hard-light":ul,e["soft-light"]=c?"soft-light":ul,e.difference=c?"difference":ul,e.exclusion=c?"exclusion":ul,e.saturation=c?"saturation":ul,e.color=c?"color":ul,e.luminosity=c?"luminosity":ul,e["linear-burn"]=c?"color-burn":ul,e["linear-dodge"]=c?"color-dodge":ul,e["linear-light"]=c?"hard-light":ul,e["pin-light"]=c?"hard-light":ul,e["vivid-light"]=c?"hard-light":ul,e["hard-mix"]=ul,e.negation=c?"difference":ul,e["normal-npm"]=e.normal,e["add-npm"]=e.add,e["screen-npm"]=e.screen,e.erase="destination-out",e.subtract=ul,e.divide=ul,e.min=ul,e.max=ul,e}(),this._activeBlendMode="normal",this._projTransform=null,this._outerBlend=!1,this._warnedBlendModes=new Set,this._renderer=c}resolutionChange(c){this.activeResolution=c}init(){const c=this._renderer.background.alpha<1;if(this.rootContext=this._renderer.canvas.getContext("2d",{alpha:c}),this.activeContext=this.rootContext,this.activeResolution=this._renderer.resolution,!this.rootContext.imageSmoothingEnabled){const c=this.rootContext;c.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":c.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":c.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":c.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")}}setContextTransform(c,e,t,i){var n;const r=i?w.IDENTITY:(null==(n=this._renderer.globalUniforms.globalUniformData)?void 0:n.worldTransformMatrix)||w.IDENTITY;let s=pl;s.copyFrom(r),s.append(c);const a=this._projTransform,o=this.activeResolution;if(t=t||o,a){const c=w.shared;c.copyFrom(s),c.prepend(a),s=c}e?this.activeContext.setTransform(s.a*t,s.b*t,s.c*t,s.d*t,s.tx*o|0,s.ty*o|0):this.activeContext.setTransform(s.a*t,s.b*t,s.c*t,s.d*t,s.tx*o,s.ty*o)}clear(c,e){const t=this.activeContext,i=this._renderer;if(t.clearRect(0,0,i.width,i.height),c){const n=Fc.shared.setValue(c);t.globalAlpha=null!=e?e:n.alpha,t.fillStyle=n.toHex(),t.fillRect(0,0,i.width,i.height),t.globalAlpha=1}}setBlendMode(c){if(this._activeBlendMode===c)return;this._activeBlendMode=c,this._outerBlend=!1;const e=this.blendModes[c];if(!e)return this._warnedBlendModes.has(c)||(console.warn(`CanvasRenderer: blend mode "${c}" is not supported in Canvas2D; falling back to "source-over".`),this._warnedBlendModes.add(c)),void(this.activeContext.globalCompositeOperation="source-over");this.activeContext.globalCompositeOperation=e}destroy(){this.rootContext=null,this.activeContext=null,this._warnedBlendModes.clear()}}gl.extension={type:[s.CanvasSystem],name:"canvasContext"};class ml{constructor(){this.maxTextures=16,this.maxBatchableTextures=16,this.maxUniformBindings=0}init(){}}ml.extension={type:[s.CanvasSystem],name:"limits"};class bl{constructor(c){this._renderer=c}updateRenderable(){}destroyRenderable(){}validateRenderable(){return!1}addRenderable(c,e){this._renderer.renderPipes.batch.break(e),e.add(c)}execute(c){c.isRenderable&&c.render(this._renderer)}destroy(){this._renderer=null}}function vl(c,e){const t=c.instructionSet,i=t.instructions;for(let n=0;n<t.instructionSize;n++){const c=i[n];e[c.renderPipeId].execute(c)}}bl.extension={type:[s.WebGLPipes,s.WebGPUPipes,s.CanvasPipes],name:"customRender"};class yl{constructor(c){this._renderer=c}addRenderGroup(c,e){c.isCachedAsTexture?this._addRenderableCacheAsTexture(c,e):this._addRenderableDirect(c,e)}execute(c){c.isRenderable&&(c.isCachedAsTexture?this._executeCacheAsTexture(c):this._executeDirect(c))}destroy(){this._renderer=null}_addRenderableDirect(c,e){this._renderer.renderPipes.batch.break(e),c._batchableRenderGroup&&(Lc.return(c._batchableRenderGroup),c._batchableRenderGroup=null),e.add(c)}_addRenderableCacheAsTexture(c,e){var t;const i=null!=(t=c._batchableRenderGroup)?t:c._batchableRenderGroup=Lc.get(Of);i.renderable=c.root,i.transform=c.root.relativeGroupTransform,i.texture=c.texture,i.bounds=c._textureBounds,e.add(c),this._renderer.renderPipes.blendMode.pushBlendMode(c,c.root.groupBlendMode,e),this._renderer.renderPipes.batch.addToBatch(i,e),this._renderer.renderPipes.blendMode.popBlendMode(e)}_executeCacheAsTexture(c){if(c.textureNeedsUpdate){c.textureNeedsUpdate=!1;const e=(new w).translate(-c._textureBounds.x,-c._textureBounds.y);this._renderer.renderTarget.push(c.texture,!0,null,c.texture.frame),this._renderer.globalUniforms.push({worldTransformMatrix:e,worldColor:4294967295,offset:{x:0,y:0}}),vl(c,this._renderer.renderPipes),this._renderer.renderTarget.finishRenderPass(),this._renderer.renderTarget.pop(),this._renderer.globalUniforms.pop()}c._batchableRenderGroup._batcher.updateElement(c._batchableRenderGroup),c._batchableRenderGroup._batcher.geometry.buffers[0].update()}_executeDirect(c){this._renderer.globalUniforms.push({worldTransformMatrix:c.inverseParentTextureTransform,worldColor:c.worldColorAlpha}),vl(c,this._renderer.renderPipes),this._renderer.globalUniforms.pop()}}yl.extension={type:[s.WebGLPipes,s.WebGPUPipes,s.CanvasPipes],name:"renderGroup"};const _l=new w,xl=new w,Sl=new w,wl=new w;function Cl(c,e,t){c.beginPath();for(let i=0;i<t.length;i+=3){const n=2*t[i],r=2*t[i+1],s=2*t[i+2];c.moveTo(e[n],e[n+1]),c.lineTo(e[r],e[r+1]),c.lineTo(e[s],e[s+1]),c.closePath()}c.fill()}function Al(c,e){switch(e.type){case"rectangle":{const t=e;c.rect(t.x,t.y,t.width,t.height);break}case"roundedRectangle":{const t=e;!function(c,e,t,i,n,r){r=Math.max(0,Math.min(r,Math.min(i,n)/2)),c.moveTo(e+r,t),c.lineTo(e+i-r,t),c.quadraticCurveTo(e+i,t,e+i,t+r),c.lineTo(e+i,t+n-r),c.quadraticCurveTo(e+i,t+n,e+i-r,t+n),c.lineTo(e+r,t+n),c.quadraticCurveTo(e,t+n,e,t+n-r),c.lineTo(e,t+r),c.quadraticCurveTo(e,t,e+r,t)}(c,t.x,t.y,t.width,t.height,t.radius);break}case"circle":{const t=e;c.arc(t.x,t.y,t.radius,0,2*Math.PI);break}case"ellipse":{const t=e;c.ellipse?c.ellipse(t.x,t.y,t.halfWidth,t.halfHeight,0,0,2*Math.PI):(c.save(),c.translate(t.x,t.y),c.scale(t.halfWidth,t.halfHeight),c.arc(0,0,1,0,2*Math.PI),c.restore());break}case"triangle":{const t=e;c.moveTo(t.x,t.y),c.lineTo(t.x2,t.y2),c.lineTo(t.x3,t.y3),c.closePath();break}default:{const t=e,i=t.points;if(!(null==i?void 0:i.length))break;c.moveTo(i[0],i[1]);for(let e=2;e<i.length;e+=2)c.lineTo(i[e],i[e+1]);t.closePath&&c.closePath();break}}}function Tl(c,e){if(!(null==e?void 0:e.length))return!1;for(let t=0;t<e.length;t++){const i=e[t];if(!(null==i?void 0:i.shape))continue;const n=i.transform,r=n&&!n.isIdentity();r&&(c.save(),c.transform(n.a,n.b,n.c,n.d,n.tx,n.ty)),Al(c,i.shape),r&&c.restore()}return!0}function Pl(c,e,t,i){const n=c.fill;if(n instanceof gs){n.buildGradient();const r=n.texture;if(r){const s=Fo.getTintedPattern(r,e),a=t?wl.copyFrom(t).scale(r.source.pixelWidth,r.source.pixelHeight):wl.copyFrom(n.transform);return i&&!c.textureSpace&&a.append(i),Fo.applyPatternTransform(s,a),s}}if(n instanceof na){const c=Fo.getTintedPattern(n.texture,e);return Fo.applyPatternTransform(c,n.transform),c}const r=c.texture;if(r&&r!==cc.WHITE){if(!r.source.resource)return"#808080";const i=Fo.getTintedPattern(r,e),n=t?wl.copyFrom(t).scale(r.source.pixelWidth,r.source.pixelHeight):c.matrix;return Fo.applyPatternTransform(i,n),i}return`#${(16777215&e).toString(16).padStart(6,"0")}`}class Ml{constructor(){this.shader=null}contextChange(c){}execute(c,e){var t,i,n,r,s,a,o,f,l,d,h,u;const p=c.renderer,g=p.canvasContext,m=g.activeContext,b=e.groupTransform,v=null!=(i=null==(t=p.globalUniforms.globalUniformData)?void 0:t.worldColor)?i:4294967295,y=e.groupColorAlpha,_=(v>>>24&255)/255*((y>>>24&255)/255)*(null!=(r=null==(n=p.filter)?void 0:n.alphaMultiplier)?r:1);if(_<=0)return;const x=te($c(16777215&y,16777215&v)),S=p._roundPixels|e._roundPixels;m.save(),g.setContextTransform(b,1===S),g.setBlendMode(e.groupBlendMode);const w=e.context.instructions;for(let C=0;C<w.length;C++){const c=w[C];if("texture"===c.action){const e=c.data,t=e.image,i=t?Fo.getCanvasSource(t):null;if(!i)continue;const n=e.alpha*_;if(n<=0)continue;const r=$c(e.style,x);m.globalAlpha=n;let o=i;16777215!==r&&(o=Fo.getTintedCanvas({texture:t},r));const f=t.frame,l=null!=(a=null!=(s=t.source._resolution)?s:t.source.resolution)?a:1;let d=f.x*l,h=f.y*l;const u=f.width*l,p=f.height*l;o!==i&&(d=0,h=0);const v=e.transform,y=v&&!v.isIdentity(),w=t.rotate;y||w?(_l.copyFrom(b),y&&_l.append(v),w&&I.matrixAppendRotationInv(_l,w,e.dx,e.dy,e.dw,e.dh),g.setContextTransform(_l,1===S)):g.setContextTransform(b,1===S),m.drawImage(o,d,h,o===i?u:o.width,o===i?p:o.height,w?0:e.dx,w?0:e.dy,e.dw,e.dh),(y||w)&&g.setContextTransform(b,1===S);continue}const e=c.data,t=null==(o=null==e?void 0:e.path)?void 0:o.shapePath;if(!(null==(f=null==t?void 0:t.shapePrimitives)?void 0:f.length))continue;const i=e.style,n=$c(i.color,x),r=i.alpha*_;if(r<=0)continue;const p="stroke"===c.action;if(m.globalAlpha=r,p){const c=i;m.lineWidth=c.width,m.lineCap=c.cap,m.lineJoin=c.join,m.miterLimit=c.miterLimit}const v=t.shapePrimitives;if(!p&&(null==(h=null==(d=null==(l=e.hole)?void 0:l.shapePath)?void 0:d.shapePrimitives)?void 0:h.length)){v[v.length-1].holes=e.hole.shapePath.shapePrimitives}for(let s=0;s<v.length;s++){const c=v[s];if(!(null==c?void 0:c.shape))continue;const e=c.transform,t=e&&!e.isIdentity(),r=i.texture&&i.texture!==cc.WHITE,a="global"===i.textureSpace?e:null,o=Pl(i,n,r?_s(xl,i,c.shape,a):null,t?Sl.copyFrom(b).append(e):b);if(t&&(m.save(),m.transform(e.a,e.b,e.c,e.d,e.tx,e.ty)),p){const e=i;if(.5!==e.alignment&&!e.pixelLine){const t=[],i=[],n=[],r=xs[c.shape.type];if(null==r?void 0:r.build(c.shape,t)){as(t,e,0,null==(u=c.shape.closePath)||u,i,n),m.fillStyle=o,Cl(m,i,n)}else m.strokeStyle=o,m.beginPath(),Al(m,c.shape),m.stroke()}else m.strokeStyle=o,m.beginPath(),Al(m,c.shape),m.stroke()}else{m.fillStyle=o,m.beginPath(),Al(m,c.shape);Tl(m,c.holes)?m.fill("evenodd"):m.fill()}t&&m.restore()}}m.restore()}destroy(){this.shader=null}}Ml.extension={type:[s.CanvasPipesAdaptor],name:"graphics"};class El{constructor(c){this._renderer=c}addRenderable(c,e){const t=this._getGpuSprite(c);c.didViewUpdate&&this._updateBatchableSprite(c,t),this._renderer.renderPipes.batch.addToBatch(t,e)}updateRenderable(c){const e=this._getGpuSprite(c);c.didViewUpdate&&this._updateBatchableSprite(c,e),e._batcher.updateElement(e)}validateRenderable(c){const e=this._getGpuSprite(c);return!e._batcher.checkAndUpdateTexture(e,c._texture)}_updateBatchableSprite(c,e){e.bounds=c.visualBounds,e.texture=c._texture}_getGpuSprite(c){return c._gpuData[this._renderer.uid]||this._initGPUSprite(c)}_initGPUSprite(c){const e=new Of;return e.renderable=c,e.transform=c.groupTransform,e.texture=c._texture,e.bounds=c.visualBounds,e.roundPixels=this._renderer._roundPixels|c._roundPixels,c._gpuData[this._renderer.uid]=e,e}destroy(){this._renderer=null}}El.extension={type:[s.WebGLPipes,s.WebGPUPipes,s.CanvasPipes],name:"sprite"};const Rl={};f.handle(s.BlendMode,c=>{if(!c.name)throw new Error("BlendMode extension must have a name property");Rl[c.name]=c.ref},c=>{delete Rl[c.name]});class kl{constructor(c){this._blendModeStack=[],this._isAdvanced=!1,this._filterHash=Object.create(null),this._renderer=c,this._renderer.runners.prerender.add(this)}prerender(){this._activeBlendMode="normal",this._isAdvanced=!1}pushBlendMode(c,e,t){this._blendModeStack.push(e),this.setBlendMode(c,e,t)}popBlendMode(c){var e;this._blendModeStack.pop();const t=null!=(e=this._blendModeStack[this._activeBlendMode.length-1])?e:"normal";this.setBlendMode(null,t,c)}setBlendMode(c,e,t){var i;const n=c instanceof me;this._activeBlendMode!==e?(this._isAdvanced&&this._endAdvancedBlendMode(t),this._activeBlendMode=e,c&&(this._isAdvanced=!!Rl[e],this._isAdvanced&&this._beginAdvancedBlendMode(c,t))):this._isAdvanced&&c&&!n&&(null==(i=this._renderableList)||i.push(c))}_beginAdvancedBlendMode(c,e){this._renderer.renderPipes.batch.break(e);const t=this._activeBlendMode;if(!Rl[t])return void Bc(`Unable to assign BlendMode: '${t}'. You may want to include: import 'pixi.js/advanced-blend-modes'`);const i=this._ensureFilterEffect(t),n=c instanceof me,r={renderPipeId:"filter",action:"pushFilter",filterEffect:i,renderables:n?null:[c],container:n?c.root:null,canBundle:!1};this._renderableList=r.renderables,e.add(r)}_ensureFilterEffect(c){let e=this._filterHash[c];return e||(e=this._filterHash[c]=new Nc,e.filters=[new Rl[c]]),e}_endAdvancedBlendMode(c){this._isAdvanced=!1,this._renderableList=null,this._renderer.renderPipes.batch.break(c),c.add({renderPipeId:"filter",action:"popFilter",canBundle:!1})}buildStart(){this._isAdvanced=!1}buildEnd(c){this._isAdvanced&&this._endAdvancedBlendMode(c)}destroy(){this._renderer=null,this._renderableList=null;for(const c in this._filterHash)this._filterHash[c].destroy();this._filterHash=null}}function Fl(c,e){e||(e=0);for(let t=e;t<c.length&&c[t];t++)c[t]=null}kl.extension={type:[s.WebGLPipes,s.WebGPUPipes,s.CanvasPipes],name:"blendMode"};const Il=new xe;function Bl(c,e=!1){!function(c){const e=c.root;let t;if(c.renderGroupParent){const i=c.renderGroupParent;c.worldTransform.appendFrom(e.relativeGroupTransform,i.worldTransform),c.worldColor=ee(e.groupColor,i.worldColor),t=e.groupAlpha*i.worldAlpha}else c.worldTransform.copyFrom(e.localTransform),c.worldColor=e.localColor,t=e.localAlpha;t=t<0?0:t>1?1:t,c.worldAlpha=t,c.worldColorAlpha=c.worldColor+(255*t<<24)}(c);const t=c.childrenToUpdate,i=c.updateTick++;for(const n in t){const e=Number(n),r=t[n],s=r.list,a=r.index;for(let t=0;t<a;t++){const n=s[t];n.parentRenderGroup===c&&n.relativeRenderGroupDepth===e&&Dl(n,i,0)}Fl(s,a),r.index=0}if(e)for(let n=0;n<c.renderGroupChildren.length;n++)Bl(c.renderGroupChildren[n],e)}function Dl(c,e,t){if(e===c.updateTick)return;c.updateTick=e,c.didChange=!1;const i=c.localTransform;c.updateLocalTransform();const n=c.parent;if(n&&!n.renderGroup?(t|=c._updateFlags,c.relativeGroupTransform.appendFrom(i,n.relativeGroupTransform),7&t&&Ol(c,n,t)):(t=c._updateFlags,c.relativeGroupTransform.copyFrom(i),7&t&&Ol(c,Il,t)),!c.renderGroup){const i=c.children,n=i.length;for(let c=0;c<n;c++)Dl(i[c],e,t);const r=c.parentRenderGroup,s=c;s.renderPipeId&&!r.structureDidChange&&r.updateRenderable(s)}}function Ol(c,e,t){if(1&t){c.groupColor=ee(c.localColor,e.groupColor);let t=c.localAlpha*e.groupAlpha;t=t<0?0:t>1?1:t,c.groupAlpha=t,c.groupColorAlpha=c.groupColor+(255*t<<24)}2&t&&(c.groupBlendMode="inherit"===c.localBlendMode?e.groupBlendMode:c.localBlendMode),4&t&&(c.globalDisplayStatus=c.localDisplayStatus&e.globalDisplayStatus),c._updateFlags=0}const Ll=new w;class zl{constructor(c){this._renderer=c}render({container:c,transform:e}){const t=c.parent,i=c.renderGroup.renderGroupParent;c.parent=null,c.renderGroup.renderGroupParent=null;const n=this._renderer,r=Ll;e&&(r.copyFrom(c.renderGroup.localTransform),c.renderGroup.localTransform.copyFrom(e));const s=n.renderPipes;this._updateCachedRenderGroups(c.renderGroup,null),this._updateRenderGroups(c.renderGroup),n.globalUniforms.start({worldTransformMatrix:e?c.renderGroup.localTransform:c.renderGroup.worldTransform,worldColor:c.renderGroup.worldColorAlpha}),vl(c.renderGroup,s),s.uniformBatch&&s.uniformBatch.renderEnd(),e&&c.renderGroup.localTransform.copyFrom(r),c.parent=t,c.renderGroup.renderGroupParent=i}destroy(){this._renderer=null}_updateCachedRenderGroups(c,e){var t,i;if(c._parentCacheAsTextureRenderGroup=e,c.isCachedAsTexture){if(!c.textureNeedsUpdate)return;e=c}for(let n=c.renderGroupChildren.length-1;n>=0;n--)this._updateCachedRenderGroups(c.renderGroupChildren[n],e);if(c.invalidateMatrices(),c.isCachedAsTexture){if(c.textureNeedsUpdate){const e=c.root.getLocalBounds(),n=this._renderer,r=c.textureOptions.resolution||n.view.resolution,s=null!=(t=c.textureOptions.antialias)?t:n.view.antialias,a=null!=(i=c.textureOptions.scaleMode)?i:"linear",o=c.texture;e.ceil(),c.texture&&ge.returnTexture(c.texture,!0);const f=ge.getOptimalTexture(e.width,e.height,r,s);f._source.style=new Z({scaleMode:a}),c.texture=f,c._textureBounds||(c._textureBounds=new ic),c._textureBounds.copyFrom(e),o!==c.texture&&c.renderGroupParent&&(c.renderGroupParent.structureDidChange=!0)}}else c.texture&&(ge.returnTexture(c.texture,!0),c.texture=null)}_updateRenderGroups(c){const e=this._renderer,t=e.renderPipes;if(c.runOnRender(e),c.instructionSet.renderPipes=t,c.structureDidChange?Fl(c.childrenRenderablesToUpdate.list,0):function(c,e){const{list:t}=c.childrenRenderablesToUpdate;let i=!1;for(let n=0;n<c.childrenRenderablesToUpdate.index;n++){const c=t[n];if(i=e[c.renderPipeId].validateRenderable(c),i)break}c.structureDidChange=i}(c,t),Bl(c),c.structureDidChange?(c.structureDidChange=!1,this._buildInstructions(c,e)):this._updateRenderables(c),c.childrenRenderablesToUpdate.index=0,e.renderPipes.batch.upload(c.instructionSet),!c.isCachedAsTexture||c.textureNeedsUpdate)for(let i=0;i<c.renderGroupChildren.length;i++)this._updateRenderGroups(c.renderGroupChildren[i])}_updateRenderables(c){const{list:e,index:t}=c.childrenRenderablesToUpdate;for(let i=0;i<t;i++){const t=e[i];t.didViewUpdate&&c.updateRenderable(t)}Fl(e,t)}_buildInstructions(c,e){const t=c.root,i=c.instructionSet;i.reset();const n=e.renderPipes?e:e.batch.renderer,r=n.renderPipes;r.batch.buildStart(i),r.blendMode.buildStart(),r.colorMask.buildStart(),t.sortableChildren&&t.sortChildren(),t.collectRenderablesWithEffects(i,n,null),r.batch.buildEnd(i),r.blendMode.buildEnd(i)}}zl.extension={type:[s.WebGLSystem,s.WebGPUSystem,s.CanvasSystem],name:"renderGroup"};const Gl=class c{constructor(){this.clearBeforeRender=!0,this._backgroundColor=new Fc(0),this.color=this._backgroundColor,this.alpha=1}init(e){e=__spreadValues(__spreadValues({},c.defaultOptions),e),this.clearBeforeRender=e.clearBeforeRender,this.color=e.background||e.backgroundColor||this._backgroundColor,this.alpha=e.backgroundAlpha,this._backgroundColor.setAlpha(e.backgroundAlpha)}get color(){return this._backgroundColor}set color(c){Fc.shared.setValue(c).alpha<1&&1===this._backgroundColor.alpha&&Bc("Cannot set a transparent background on an opaque canvas. To enable transparency, set backgroundAlpha < 1 when initializing your Application."),this._backgroundColor.setValue(c)}get alpha(){return this._backgroundColor.alpha}set alpha(c){this._backgroundColor.setAlpha(c)}get colorRgba(){return this._backgroundColor.toArray()}destroy(){}};Gl.extension={type:[s.WebGLSystem,s.WebGPUSystem,s.CanvasSystem],name:"background",priority:0},Gl.defaultOptions={backgroundAlpha:1,backgroundColor:0,clearBeforeRender:!0};let Ul=Gl;const Vl={png:"image/png",jpg:"image/jpeg",webp:"image/webp"},Nl=class c{constructor(c){this._renderer=c}_normalizeOptions(c,e={}){return c instanceof xe||c instanceof cc?__spreadValues({target:c},e):__spreadValues(__spreadValues({},e),c)}image(c){return __async(this,null,function*(){const e=Fe.get().createImage();return e.src=yield this.base64(c),e})}base64(e){return __async(this,null,function*(){e=this._normalizeOptions(e,c.defaultImageOptions);const{format:t,quality:i}=e,n=this.canvas(e);if(void 0!==n.toBlob)return new Promise((c,e)=>{n.toBlob(t=>{if(!t)return void e(new Error("ICanvas.toBlob failed!"));const i=new FileReader;i.onload=()=>c(i.result),i.onerror=e,i.readAsDataURL(t)},Vl[t],i)});if(void 0!==n.toDataURL)return n.toDataURL(Vl[t],i);if(void 0!==n.convertToBlob){const c=yield n.convertToBlob({type:Vl[t],quality:i});return new Promise((e,t)=>{const i=new FileReader;i.onload=()=>e(i.result),i.onerror=t,i.readAsDataURL(c)})}throw new Error("Extract.base64() requires ICanvas.toDataURL, ICanvas.toBlob, or ICanvas.convertToBlob to be implemented")})}canvas(c){const e=(c=this._normalizeOptions(c)).target,t=this._renderer;if(e instanceof cc)return t.texture.generateCanvas(e);const i=t.textureGenerator.generateTexture(c),n=t.texture.generateCanvas(i);return i.destroy(!0),n}pixels(c){const e=(c=this._normalizeOptions(c)).target,t=this._renderer,i=e instanceof cc?e:t.textureGenerator.generateTexture(c),n=t.texture.getPixels(i);return e instanceof xe&&i.destroy(!0),n}texture(c){return(c=this._normalizeOptions(c)).target instanceof cc?c.target:this._renderer.textureGenerator.generateTexture(c)}download(c){var e;c=this._normalizeOptions(c);const t=this.canvas(c),i=document.createElement("a");i.download=null!=(e=c.filename)?e:"image.png",i.href=t.toDataURL("image/png"),document.body.appendChild(i),i.click(),document.body.removeChild(i)}log(c){var e;const t=null!=(e=c.width)?e:200;c=this._normalizeOptions(c);const i=this.canvas(c),n=i.toDataURL();console.log(`[Pixi Texture] ${i.width}px ${i.height}px`);const r=["font-size: 1px;",`padding: ${t}px 300px;`,`background: url(${n}) no-repeat;`,"background-size: contain;"].join(" ");console.log("%c ",r)}destroy(){this._renderer=null}};Nl.extension={type:[s.WebGLSystem,s.WebGPUSystem,s.CanvasSystem],name:"extract"},Nl.defaultImageOptions={format:"png",quality:1};let Wl=Nl;class Hl extends cc{static create(c){const e=c,{dynamic:t}=e,i=__objRest(e,["dynamic"]);return new Hl({source:new K(i),dynamic:null!=t&&t})}resize(c,e,t){return this.source.resize(c,e,t),this}}const jl=new D,Yl=new ic,Xl=[0,0,0,0];class Zl{constructor(c){this._renderer=c}generateTexture(c){var e;c instanceof xe&&(c={target:c,frame:void 0,textureSourceOptions:{},resolution:void 0});const t=c.resolution||this._renderer.resolution,i=c.antialias||this._renderer.view.antialias,n=c.target;let r=c.clearColor;if(r){r=Array.isArray(r)&&4===r.length?r:Fc.shared.setValue(r).toArray()}else r=Xl;const s=(null==(e=c.frame)?void 0:e.copyTo(jl))||ne(n,Yl).rectangle;s.width=0|Math.max(s.width,1/t),s.height=0|Math.max(s.height,1/t);const a=Hl.create(__spreadProps(__spreadValues({},c.textureSourceOptions),{width:s.width,height:s.height,resolution:t,antialias:i})),o=w.shared.translate(-s.x,-s.y);return this._renderer.render({container:n,transform:o,target:a,clearColor:r}),a.source.updateMipmaps(),a}destroy(){this._renderer=null}}function ql(c){let e=!1;for(const i in c)if(null==c[i]){e=!0;break}if(!e)return c;const t=Object.create(null);for(const i in c){const e=c[i];e&&(t[i]=e)}return t}function Kl(c){let e=0;for(let t=0;t<c.length;t++)null==c[t]?e++:c[t-e]=c[t];return c.length-=e,c}Zl.extension={type:[s.WebGLSystem,s.WebGPUSystem,s.CanvasSystem],name:"textureGenerator"};const Ql=class c{constructor(c){this._managedResources=[],this._managedResourceHashes=[],this._managedCollections=[],this._ready=!1,this._renderer=c}init(e){e=__spreadValues(__spreadValues({},c.defaultOptions),e),this.maxUnusedTime=e.gcMaxUnusedTime,this._frequency=e.gcFrequency,this.enabled=e.gcActive,this.now=performance.now()}get enabled(){return!!this._handler}set enabled(c){this.enabled!==c&&(c?(this._handler=this._renderer.scheduler.repeat(()=>{this._ready=!0},this._frequency,!1),this._collectionsHandler=this._renderer.scheduler.repeat(()=>{for(const c of this._managedCollections){const{context:e,collection:t,type:i}=c;e[t]="hash"===i?ql(e[t]):Kl(e[t])}},this._frequency)):(this._renderer.scheduler.cancel(this._handler),this._renderer.scheduler.cancel(this._collectionsHandler),this._handler=0,this._collectionsHandler=0))}prerender({container:c}){this.now=performance.now(),c.renderGroup.gcTick=this._renderer.tick++,this._updateInstructionGCTick(c.renderGroup,c.renderGroup.gcTick)}postrender(){this._ready&&this.enabled&&(this.run(),this._ready=!1)}_updateInstructionGCTick(c,e){c.instructionSet.gcTick=e,c.gcTick=e;for(const t of c.renderGroupChildren)this._updateInstructionGCTick(t,e)}addCollection(c,e,t){this._managedCollections.push({context:c,collection:e,type:t})}addResource(c,e){var t,i;if(-1!==c._gcLastUsed)return c._gcLastUsed=this.now,void(null==(t=c._onTouch)||t.call(c,this.now));const n=this._managedResources.length;c._gcData={index:n,type:e},c._gcLastUsed=this.now,null==(i=c._onTouch)||i.call(c,this.now),c.once("unload",this.removeResource,this),this._managedResources.push(c)}removeResource(c){const e=c._gcData;if(!e)return;const t=e.index,i=this._managedResources.length-1;if(t!==i){const c=this._managedResources[i];this._managedResources[t]=c,c._gcData.index=t}this._managedResources.length--,c._gcData=null,c._gcLastUsed=-1}addResourceHash(c,e,t,i=0){this._managedResourceHashes.push({context:c,hash:e,type:t,priority:i}),this._managedResourceHashes.sort((c,e)=>c.priority-e.priority)}run(){const c=performance.now(),e=this._managedResourceHashes;for(const i of e)this.runOnHash(i,c);let t=0;for(let i=0;i<this._managedResources.length;i++){const e=this._managedResources[i];t=this.runOnResource(e,c,t)}this._managedResources.length=t}updateRenderableGCTick(c,e){var t,i,n,r,s;const a=null!=(t=c.renderGroup)?t:c.parentRenderGroup,o=null!=(n=null==(i=null==a?void 0:a.instructionSet)?void 0:i.gcTick)?n:-1;(null!=(r=null==a?void 0:a.gcTick)?r:0)===o&&(c._gcLastUsed=e,null==(s=c._onTouch)||s.call(c,e))}runOnResource(c,e,t){const i=c._gcData;"renderable"===i.type&&this.updateRenderableGCTick(c,e);return e-c._gcLastUsed<this.maxUnusedTime||!c.autoGarbageCollect?(this._managedResources[t]=c,i.index=t,t++):(c.unload(),c._gcData=null,c._gcLastUsed=-1,c.off("unload",this.removeResource,this)),t}_createHashClone(c,e){const t=Object.create(null);for(const i in c){if(i===e)break;null!==c[i]&&(t[i]=c[i])}return t}runOnHash(c,e){var t,i;const{context:n,hash:r,type:s}=c,a=n[r];let o=null,f=0;for(const l in a){const c=a[l];if(null===c){f++,1e4!==f||o||(o=this._createHashClone(a,l));continue}if(-1===c._gcLastUsed){c._gcLastUsed=e,null==(t=c._onTouch)||t.call(c,e),o&&(o[l]=c);continue}"renderable"===s&&this.updateRenderableGCTick(c,e);if(!(e-c._gcLastUsed<this.maxUnusedTime)&&c.autoGarbageCollect){if(o||(f+1!==1e4?(a[l]=null,f++):o=this._createHashClone(a,l)),"renderable"===s){const e=c,t=null!=(i=e.renderGroup)?i:e.parentRenderGroup;t&&(t.structureDidChange=!0)}c.unload(),c._gcData=null,c._gcLastUsed=-1}else o&&(o[l]=c)}o&&(n[r]=o)}destroy(){this.enabled=!1,this._managedResources.forEach(c=>{c.off("unload",this.removeResource,this)}),this._managedResources.length=0,this._managedResourceHashes.length=0,this._managedCollections.length=0,this._renderer=null}};Ql.extension={type:[s.WebGLSystem,s.WebGPUSystem,s.CanvasSystem],name:"gc",priority:0},Ql.defaultOptions={gcActive:!0,gcMaxUnusedTime:6e4,gcFrequency:3e4};let Jl=Ql;class $l{constructor(c){this._stackIndex=0,this._globalUniformDataStack=[],this._uniformsPool=[],this._activeUniforms=[],this._bindGroupPool=[],this._activeBindGroups=[],this._renderer=c}reset(){this._stackIndex=0;for(let c=0;c<this._activeUniforms.length;c++)this._uniformsPool.push(this._activeUniforms[c]);for(let c=0;c<this._activeBindGroups.length;c++)this._bindGroupPool.push(this._activeBindGroups[c]);this._activeUniforms.length=0,this._activeBindGroups.length=0}start(c){this.reset(),this.push(c)}bind({size:c,projectionMatrix:e,worldTransformMatrix:t,worldColor:i,offset:n}){const r=this._renderer.renderTarget.renderTarget,s=this._stackIndex?this._globalUniformDataStack[this._stackIndex-1]:{worldTransformMatrix:new w,worldColor:4294967295,offset:new x},a={projectionMatrix:e||this._renderer.renderTarget.projectionMatrix,resolution:c||r.size,worldTransformMatrix:t||s.worldTransformMatrix,worldColor:i||s.worldColor,offset:n||s.offset,bindGroup:null},o=this._uniformsPool.pop()||this._createUniforms();this._activeUniforms.push(o);const f=o.uniforms;let l;f.uProjectionMatrix=a.projectionMatrix,f.uResolution=a.resolution,f.uWorldTransformMatrix.copyFrom(a.worldTransformMatrix),f.uWorldTransformMatrix.tx-=a.offset.x,f.uWorldTransformMatrix.ty-=a.offset.y,bo(a.worldColor,f.uWorldColorAlpha,0),o.update(),this._renderer.renderPipes.uniformBatch?l=this._renderer.renderPipes.uniformBatch.getUniformBindGroup(o,!1):(l=this._bindGroupPool.pop()||new ti,this._activeBindGroups.push(l),l.setResource(o,0)),a.bindGroup=l,this._currentGlobalUniformData=a}push(c){this.bind(c),this._globalUniformDataStack[this._stackIndex++]=this._currentGlobalUniformData}pop(){this._currentGlobalUniformData=this._globalUniformDataStack[--this._stackIndex-1],this._renderer.type===ii.WEBGL&&this._currentGlobalUniformData.bindGroup.resources[0].update()}get bindGroup(){return this._currentGlobalUniformData.bindGroup}get globalUniformData(){return this._currentGlobalUniformData}get uniformGroup(){return this._currentGlobalUniformData.bindGroup.resources[0]}_createUniforms(){return new ei({uProjectionMatrix:{value:new w,type:"mat3x3<f32>"},uWorldTransformMatrix:{value:new w,type:"mat3x3<f32>"},uWorldColorAlpha:{value:new Float32Array(4),type:"vec4<f32>"},uResolution:{value:[0,0],type:"vec2<f32>"}},{isStatic:!0})}destroy(){this._renderer=null,this._globalUniformDataStack.length=0,this._uniformsPool.length=0,this._activeUniforms.length=0,this._bindGroupPool.length=0,this._activeBindGroups.length=0,this._currentGlobalUniformData=null}}$l.extension={type:[s.WebGLSystem,s.WebGPUSystem,s.CanvasSystem],name:"globalUniforms"};let cd=1;class ed{constructor(){this._tasks=[],this._offset=0}init(){Ge.system.add(this._update,this)}repeat(c,e,t=!0){const i=cd++;let n=0;return t&&(this._offset+=1e3,n=this._offset),this._tasks.push({func:c,duration:e,start:performance.now(),offset:n,last:performance.now(),repeat:!0,id:i}),i}cancel(c){for(let e=0;e<this._tasks.length;e++)if(this._tasks[e].id===c)return void this._tasks.splice(e,1)}_update(){const c=performance.now();for(let e=0;e<this._tasks.length;e++){const t=this._tasks[e];if(c-t.offset-t.last>=t.duration){const e=c-t.start;t.func(e),t.last=c}}}destroy(){Ge.system.remove(this._update,this),this._tasks.length=0}}ed.extension={type:[s.WebGLSystem,s.WebGPUSystem,s.CanvasSystem],name:"scheduler",priority:0};let td=!1;class id{constructor(c){this._renderer=c}init(c){if(c.hello){let c=this._renderer.name;this._renderer.type===ii.WEBGL&&(c+=` ${this._renderer.context.webGLVersion}`),function(c){if(!td){if(Fe.get().getNavigator().userAgent.toLowerCase().indexOf("chrome")>-1){const e=[`%c %c %c %c %c PixiJS %c v${Ki} (${c}) http://www.pixijs.com/\n\n`,"background: #E72264; padding:5px 0;","background: #6CA2EA; padding:5px 0;","background: #B5D33D; padding:5px 0;","background: #FED23F; padding:5px 0;","color: #FFFFFF; background: #E72264; padding:5px 0;","color: #E72264; background: #FFFFFF; padding:5px 0;"];globalThis.console.log(...e)}else globalThis.console&&globalThis.console.log(`PixiJS ${Ki} - ${c} - http://www.pixijs.com/`);td=!0}}(c)}}}id.extension={type:[s.WebGLSystem,s.WebGPUSystem,s.CanvasSystem],name:"hello",priority:-2},id.defaultOptions={hello:!1};const nd=class c{constructor(c){this._renderer=c}init(e){e=__spreadValues(__spreadValues({},c.defaultOptions),e),this.maxUnusedTime=e.renderableGCMaxUnusedTime}get enabled(){return V("8.15.0","RenderableGCSystem.enabled is deprecated, please use the GCSystem.enabled instead."),this._renderer.gc.enabled}set enabled(c){V("8.15.0","RenderableGCSystem.enabled is deprecated, please use the GCSystem.enabled instead."),this._renderer.gc.enabled=c}addManagedHash(c,e){V("8.15.0","RenderableGCSystem.addManagedHash is deprecated, please use the GCSystem.addCollection instead."),this._renderer.gc.addCollection(c,e,"hash")}addManagedArray(c,e){V("8.15.0","RenderableGCSystem.addManagedArray is deprecated, please use the GCSystem.addCollection instead."),this._renderer.gc.addCollection(c,e,"array")}addRenderable(c){V("8.15.0","RenderableGCSystem.addRenderable is deprecated, please use the GCSystem instead."),this._renderer.gc.addResource(c,"renderable")}run(){V("8.15.0","RenderableGCSystem.run is deprecated, please use the GCSystem instead."),this._renderer.gc.run()}destroy(){this._renderer=null}};nd.extension={type:[s.WebGLSystem,s.WebGPUSystem,s.CanvasSystem],name:"renderableGC",priority:0},nd.defaultOptions={renderableGCActive:!0,renderableGCMaxUnusedTime:6e4,renderableGCFrequency:3e4};let rd=nd;const sd=class c{get count(){return this._renderer.tick}get checkCount(){return this._checkCount}set checkCount(c){V("8.15.0","TextureGCSystem.run is deprecated, please use the GCSystem instead."),this._checkCount=c}get maxIdle(){return this._renderer.gc.maxUnusedTime/1e3*60}set maxIdle(c){V("8.15.0","TextureGCSystem.run is deprecated, please use the GCSystem instead."),this._renderer.gc.maxUnusedTime=c/60*1e3}get checkCountMax(){return Math.floor(this._renderer.gc._frequency/1e3)}set checkCountMax(c){V("8.15.0","TextureGCSystem.run is deprecated, please use the GCSystem instead.")}get active(){return this._renderer.gc.enabled}set active(c){V("8.15.0","TextureGCSystem.run is deprecated, please use the GCSystem instead."),this._renderer.gc.enabled=c}constructor(c){this._renderer=c,this._checkCount=0}init(e){e.textureGCActive!==c.defaultOptions.textureGCActive&&(this.active=e.textureGCActive),e.textureGCMaxIdle!==c.defaultOptions.textureGCMaxIdle&&(this.maxIdle=e.textureGCMaxIdle),e.textureGCCheckCountMax!==c.defaultOptions.textureGCCheckCountMax&&(this.checkCountMax=e.textureGCCheckCountMax)}run(){V("8.15.0","TextureGCSystem.run is deprecated, please use the GCSystem instead."),this._renderer.gc.run()}destroy(){this._renderer=null}};sd.extension={type:[s.WebGLSystem,s.WebGPUSystem],name:"textureGC"},sd.defaultOptions={textureGCActive:!0,textureGCAMaxIdle:null,textureGCMaxIdle:3600,textureGCCheckCountMax:600};let ad=sd;const od=class c{constructor(e={}){if(this.uid=L("renderTarget"),this.colorTextures=[],this.dirtyId=0,this.isRoot=!1,this._size=new Float32Array(2),this._managedColorTextures=!1,e=__spreadValues(__spreadValues({},c.defaultOptions),e),this.stencil=e.stencil,this.depth=e.depth,this.isRoot=e.isRoot,"number"==typeof e.colorTextures){this._managedColorTextures=!0;for(let c=0;c<e.colorTextures;c++)this.colorTextures.push(new K({width:e.width,height:e.height,resolution:e.resolution,antialias:e.antialias}))}else{this.colorTextures=[...e.colorTextures.map(c=>c.source)];const c=this.colorTexture.source;this.resize(c.width,c.height,c._resolution)}this.colorTexture.source.on("resize",this.onSourceResize,this),(e.depthStencilTexture||this.stencil)&&(e.depthStencilTexture instanceof cc||e.depthStencilTexture instanceof K?this.depthStencilTexture=e.depthStencilTexture.source:this.ensureDepthStencilTexture())}get size(){const c=this._size;return c[0]=this.pixelWidth,c[1]=this.pixelHeight,c}get width(){return this.colorTexture.source.width}get height(){return this.colorTexture.source.height}get pixelWidth(){return this.colorTexture.source.pixelWidth}get pixelHeight(){return this.colorTexture.source.pixelHeight}get resolution(){return this.colorTexture.source._resolution}get colorTexture(){return this.colorTextures[0]}onSourceResize(c){this.resize(c.width,c.height,c._resolution,!0)}ensureDepthStencilTexture(){this.depthStencilTexture||(this.depthStencilTexture=new K({width:this.width,height:this.height,resolution:this.resolution,format:"depth24plus-stencil8",autoGenerateMipmaps:!1,antialias:!1,mipLevelCount:1}))}resize(c,e,t=this.resolution,i=!1){this.dirtyId++,this.colorTextures.forEach((n,r)=>{i&&0===r||n.source.resize(c,e,t)}),this.depthStencilTexture&&this.depthStencilTexture.source.resize(c,e,t)}destroy(){this.colorTexture.source.off("resize",this.onSourceResize,this),this._managedColorTextures&&this.colorTextures.forEach(c=>{c.destroy()}),this.depthStencilTexture&&(this.depthStencilTexture.destroy(),delete this.depthStencilTexture)}};od.defaultOptions={width:0,height:0,resolution:1,colorTextures:1,stencil:!1,depth:!1,antialias:!1,isRoot:!1};let fd=od;const ld=new Map;function dd(c,e){if(!ld.has(c)){const t=new cc({source:new Ie(__spreadValues({resource:c},e))}),i=()=>{ld.get(c)===t&&ld.delete(c)};t.once("destroy",i),t.source.once("destroy",i),ld.set(c,t)}return ld.get(c)}Dc.register(ld);const hd=class c{get autoDensity(){return this.texture.source.autoDensity}set autoDensity(c){this.texture.source.autoDensity=c}get resolution(){return this.texture.source._resolution}set resolution(c){this.texture.source.resize(this.texture.source.width,this.texture.source.height,c)}init(e){(e=__spreadValues(__spreadValues({},c.defaultOptions),e)).view&&(V(G,"ViewSystem.view has been renamed to ViewSystem.canvas"),e.canvas=e.view),this.screen=new D(0,0,e.width,e.height),this.canvas=e.canvas||Fe.get().createCanvas(),this.antialias=!!e.antialias,this.texture=dd(this.canvas,e),this.renderTarget=new fd({colorTextures:[this.texture],depth:!!e.depth,isRoot:!0}),this.texture.source.transparent=e.backgroundAlpha<1,this.resolution=e.resolution}resize(c,e,t){this.texture.source.resize(c,e,t),this.screen.width=this.texture.frame.width,this.screen.height=this.texture.frame.height}destroy(c=!1){("boolean"==typeof c?c:!!(null==c?void 0:c.removeView))&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.texture.destroy()}};hd.extension={type:[s.WebGLSystem,s.WebGPUSystem,s.CanvasSystem],name:"view",priority:0},hd.defaultOptions={width:800,height:600,autoDensity:!1,antialias:!1};const ud=[Ul,$l,id,hd,zl,Jl,ad,Zl,Wl,Ji,rd,ed],pd=[kl,el,El,yl,sl,hl,ol,bl];class gd{constructor(c){this.rootViewPort=new D,this.viewport=new D,this.mipLevel=0,this.layer=0,this.onRenderTargetChange=new Vi("onRenderTargetChange"),this.projectionMatrix=new w,this.defaultClearColor=[0,0,0,0],this._renderSurfaceToRenderTargetHash=new Map,this._gpuRenderTargetHash=Object.create(null),this._renderTargetStack=[],this._renderer=c,c.gc.addCollection(this,"_gpuRenderTargetHash","hash")}finishRenderPass(){this.adaptor.finishRenderPass(this.renderTarget)}renderStart({target:c,clear:e,clearColor:t,frame:i,mipLevel:n,layer:r}){var s,a;this._renderTargetStack.length=0,this.push(c,e,t,i,null!=n?n:0,null!=r?r:0),this.rootViewPort.copyFrom(this.viewport),this.rootRenderTarget=this.renderTarget,this.renderingToScreen=function(c){const e=c.colorTexture.source.resource;return globalThis.HTMLCanvasElement&&e instanceof HTMLCanvasElement&&document.body.contains(e)}(this.rootRenderTarget),null==(a=(s=this.adaptor).prerender)||a.call(s,this.rootRenderTarget)}postrender(){var c,e;null==(e=(c=this.adaptor).postrender)||e.call(c,this.rootRenderTarget)}bind(c,e=!0,t,i,n=0,r=0){const s=this.getRenderTarget(c),a=this.renderTarget!==s;this.renderTarget=s,this.renderSurface=c;const o=this.getGpuRenderTarget(s);s.pixelWidth===o.width&&s.pixelHeight===o.height||(this.adaptor.resizeGpuRenderTarget(s),o.width=s.pixelWidth,o.height=s.pixelHeight);const f=s.colorTexture,l=this.viewport,d=f.arrayLayerCount||1;if((0|r)!==r&&(r|=0),r<0||r>=d)throw new Error(`[RenderTargetSystem] layer ${r} is out of bounds (arrayLayerCount=${d}).`);this.mipLevel=0|n,this.layer=0|r;const h=Math.max(f.pixelWidth>>n,1),u=Math.max(f.pixelHeight>>n,1);if(!i&&c instanceof cc&&(i=c.frame),i){const c=f._resolution,e=1<<Math.max(0|n,0),t=i.x*c+.5|0,r=i.y*c+.5|0,s=i.width*c+.5|0,a=i.height*c+.5|0;let o=Math.floor(t/e),d=Math.floor(r/e),p=Math.ceil(s/e),g=Math.ceil(a/e);o=Math.min(Math.max(o,0),h-1),d=Math.min(Math.max(d,0),u-1),p=Math.min(Math.max(p,1),h-o),g=Math.min(Math.max(g,1),u-d),l.x=o,l.y=d,l.width=p,l.height=g}else l.x=0,l.y=0,l.width=h,l.height=u;return function(c,e,t,i,n,r){const s=r?1:-1;c.identity(),c.a=1/i*2,c.d=s*(1/n*2),c.tx=-1-e*c.a,c.ty=-s-t*c.d}(this.projectionMatrix,0,0,l.width/f.resolution,l.height/f.resolution,!s.isRoot),this.adaptor.startRenderPass(s,e,t,l,n,r),a&&this.onRenderTargetChange.emit(s),s}clear(c,e=Ui.ALL,t,i=this.mipLevel,n=this.layer){e&&(c&&(c=this.getRenderTarget(c)),this.adaptor.clear(c||this.renderTarget,e,t,this.viewport,i,n))}contextChange(){this._gpuRenderTargetHash=Object.create(null)}push(c,e=Ui.ALL,t,i,n=0,r=0){const s=this.bind(c,e,t,i,n,r);return this._renderTargetStack.push({renderTarget:s,frame:i,mipLevel:n,layer:r}),s}pop(){this._renderTargetStack.pop();const c=this._renderTargetStack[this._renderTargetStack.length-1];this.bind(c.renderTarget,!1,null,c.frame,c.mipLevel,c.layer)}getRenderTarget(c){var e;return c.isTexture&&(c=c.source),null!=(e=this._renderSurfaceToRenderTargetHash.get(c))?e:this._initRenderTarget(c)}copyToTexture(c,e,t,i,n){t.x<0&&(i.width+=t.x,n.x-=t.x,t.x=0),t.y<0&&(i.height+=t.y,n.y-=t.y,t.y=0);const{pixelWidth:r,pixelHeight:s}=c;return i.width=Math.min(i.width,r-t.x),i.height=Math.min(i.height,s-t.y),this.adaptor.copyToTexture(c,e,t,i,n)}ensureDepthStencil(){this.renderTarget.stencil||(this.renderTarget.stencil=!0,this.adaptor.startRenderPass(this.renderTarget,!1,null,this.viewport,0,this.layer))}destroy(){this._renderer=null,this._renderSurfaceToRenderTargetHash.forEach((c,e)=>{c!==e&&c.destroy()}),this._renderSurfaceToRenderTargetHash.clear(),this._gpuRenderTargetHash=Object.create(null)}_initRenderTarget(c){let e=null;return Ie.test(c)&&(c=dd(c).source),c instanceof fd?e=c:c instanceof K&&(e=new fd({colorTextures:[c]}),c.source instanceof Ie&&(e.isRoot=!0),c.once("destroy",()=>{e.destroy(),this._renderSurfaceToRenderTargetHash.delete(c);const t=this._gpuRenderTargetHash[e.uid];t&&(this._gpuRenderTargetHash[e.uid]=null,this.adaptor.destroyGpuRenderTarget(t))})),this._renderSurfaceToRenderTargetHash.set(c,e),e}getGpuRenderTarget(c){return this._gpuRenderTargetHash[c.uid]||(this._gpuRenderTargetHash[c.uid]=this.adaptor.initGpuRenderTarget(c))}resetState(){this.renderTarget=null,this.renderSurface=null}}class md{init(c,e){this._renderer=c,this._renderTargetSystem=e}initGpuRenderTarget(c){const e=c.colorTexture,{canvas:t,context:i}=this._ensureCanvas(e);return{canvas:t,context:i,width:t.width,height:t.height}}resizeGpuRenderTarget(c){const e=c.colorTexture,{canvas:t}=this._ensureCanvas(e);t.width=c.pixelWidth,t.height=c.pixelHeight}startRenderPass(c,e,t,i){const n=this._renderTargetSystem.getGpuRenderTarget(c);this._renderer.canvasContext.activeContext=n.context,this._renderer.canvasContext.activeResolution=c.resolution,e&&this.clear(c,e,t,i)}clear(c,e,t,i){const n=this._renderTargetSystem.getGpuRenderTarget(c).context,r=i||{x:0,y:0,width:c.pixelWidth,height:c.pixelHeight};if(n.setTransform(1,0,0,1,0,0),n.clearRect(r.x,r.y,r.width,r.height),t){const c=Fc.shared.setValue(t);c.alpha>0&&(n.globalAlpha=c.alpha,n.fillStyle=c.toHex(),n.fillRect(r.x,r.y,r.width,r.height),n.globalAlpha=1)}}finishRenderPass(){}copyToTexture(c,e,t,i,n){var r,s;const a=this._renderTargetSystem.getGpuRenderTarget(c).canvas,o=e.source,{context:f}=this._ensureCanvas(o),l=null!=(r=null==n?void 0:n.x)?r:0,d=null!=(s=null==n?void 0:n.y)?s:0;return f.drawImage(a,t.x,t.y,i.width,i.height,l,d,i.width,i.height),o.update(),e}destroyGpuRenderTarget(c){}_ensureCanvas(c){let e=c.resource;e&&Ie.test(e)||(e=Fe.get().createCanvas(c.pixelWidth,c.pixelHeight),c.resource=e),e.width===c.pixelWidth&&e.height===c.pixelHeight||(e.width=c.pixelWidth,e.height=c.pixelHeight);const t=e.getContext("2d");return{canvas:e,context:t}}}class bd extends gd{constructor(c){super(c),this.adaptor=new md,this.adaptor.init(c,this)}}bd.extension={type:[s.CanvasSystem],name:"renderTarget"};class vd{constructor(c){}init(){}initSource(c){}generateCanvas(c){var e,t;const i=Fe.get().createCanvas(),n=i.getContext("2d"),r=Fo.getCanvasSource(c);if(!r)return i;const s=c.frame,a=null!=(t=null!=(e=c.source._resolution)?e:c.source.resolution)?t:1,o=s.x*a,f=s.y*a,l=s.width*a,d=s.height*a;return i.width=Math.ceil(l),i.height=Math.ceil(d),n.drawImage(r,o,f,l,d,0,0,l,d),i}getPixels(c){const e=this.generateCanvas(c);return{pixels:e.getContext("2d",{willReadFrequently:!0}).getImageData(0,0,e.width,e.height).data,width:e.width,height:e.height}}destroy(){}}vd.extension={type:[s.CanvasSystem],name:"texture"};const yd=[...ud,gl,ml,vd,bd],_d=[kl,el,El,yl,sl,dl,al,bl],xd=[Kf,Ml],Sd=[],wd=[],Cd=[];f.handleByNamedList(s.CanvasSystem,Sd),f.handleByNamedList(s.CanvasPipes,wd),f.handleByNamedList(s.CanvasPipesAdaptor,Cd),f.add(...yd,..._d,...xd);const Ad=Object.freeze(Object.defineProperty({__proto__:null,CanvasRenderer:class extends Yi{constructor(){super({name:"canvas",type:ii.CANVAS,systems:Sd,renderPipes:wd,renderPipeAdaptors:Cd})}}},Symbol.toStringTag,{value:"Module"}));var Td=(c=>(c[c.ELEMENT_ARRAY_BUFFER=34963]="ELEMENT_ARRAY_BUFFER",c[c.ARRAY_BUFFER=34962]="ARRAY_BUFFER",c[c.UNIFORM_BUFFER=35345]="UNIFORM_BUFFER",c))(Td||{});class Pd{constructor(c,e){this._lastBindBaseLocation=-1,this._lastBindCallId=-1,this.buffer=c||null,this.updateID=-1,this.byteLength=-1,this.type=e}destroy(){this.buffer=null,this.updateID=-1,this.byteLength=-1,this.type=-1,this._lastBindBaseLocation=-1,this._lastBindCallId=-1}}class Md{constructor(c){this._boundBufferBases=Object.create(null),this._minBaseLocation=0,this._nextBindBaseIndex=this._minBaseLocation,this._bindCallId=0,this._renderer=c,this._managedBuffers=new Qr({renderer:c,type:"resource",onUnload:this.onBufferUnload.bind(this),name:"glBuffer"})}destroy(){this._managedBuffers.destroy(),this._renderer=null,this._gl=null,this._boundBufferBases={}}contextChange(){this._gl=this._renderer.gl,this.destroyAll(!0),this._maxBindings=this._renderer.limits.maxUniformBindings}getGlBuffer(c){return c._gcLastUsed=this._renderer.gc.now,c._gpuData[this._renderer.uid]||this.createGLBuffer(c)}bind(c){const{_gl:e}=this,t=this.getGlBuffer(c);e.bindBuffer(t.type,t.buffer)}bindBufferBase(c,e){const{_gl:t}=this;this._boundBufferBases[e]!==c&&(this._boundBufferBases[e]=c,c._lastBindBaseLocation=e,t.bindBufferBase(t.UNIFORM_BUFFER,e,c.buffer))}nextBindBase(c){this._bindCallId++,this._minBaseLocation=0,c&&(this._boundBufferBases[0]=null,this._minBaseLocation=1,this._nextBindBaseIndex<1&&(this._nextBindBaseIndex=1))}freeLocationForBufferBase(c){let e=this.getLastBindBaseLocation(c);if(e>=this._minBaseLocation)return c._lastBindCallId=this._bindCallId,e;let t=0,i=this._nextBindBaseIndex;for(;t<2;){i>=this._maxBindings&&(i=this._minBaseLocation,t++);const c=this._boundBufferBases[i];if(!c||c._lastBindCallId!==this._bindCallId)break;i++}return e=i,this._nextBindBaseIndex=i+1,t>=2?-1:(c._lastBindCallId=this._bindCallId,this._boundBufferBases[e]=null,e)}getLastBindBaseLocation(c){const e=c._lastBindBaseLocation;return this._boundBufferBases[e]===c?e:-1}bindBufferRange(c,e,t,i){const{_gl:n}=this;t||(t=0),e||(e=0),this._boundBufferBases[e]=null,n.bindBufferRange(n.UNIFORM_BUFFER,e||0,c.buffer,256*t,i||256)}updateBuffer(c){const{_gl:e}=this,t=this.getGlBuffer(c);if(c._updateID===t.updateID)return t;t.updateID=c._updateID,e.bindBuffer(t.type,t.buffer);const i=c.data,n=c.descriptor.usage&lr.STATIC?e.STATIC_DRAW:e.DYNAMIC_DRAW;return i?t.byteLength>=i.byteLength?e.bufferSubData(t.type,0,i,0,c._updateSize/i.BYTES_PER_ELEMENT):(t.byteLength=i.byteLength,e.bufferData(t.type,i,n)):(t.byteLength=c.descriptor.size,e.bufferData(t.type,t.byteLength,n)),t}destroyAll(c=!1){this._managedBuffers.removeAll(c)}onBufferUnload(c,e=!1){const t=c._gpuData[this._renderer.uid];t&&(e||this._gl.deleteBuffer(t.buffer))}createGLBuffer(c){const{_gl:e}=this;let t=Td.ARRAY_BUFFER;c.descriptor.usage&lr.INDEX?t=Td.ELEMENT_ARRAY_BUFFER:c.descriptor.usage&lr.UNIFORM&&(t=Td.UNIFORM_BUFFER);const i=new Pd(e.createBuffer(),t);return c._gpuData[this._renderer.uid]=i,this._managedBuffers.add(c),i}resetState(){this._boundBufferBases=Object.create(null)}}Md.extension={type:[s.WebGLSystem],name:"buffer"};const Ed=class c{constructor(c){this.supports={uint32Indices:!0,uniformBufferObject:!0,vertexArrayObject:!0,srgbTextures:!0,nonPowOf2wrapping:!0,msaa:!0,nonPowOf2mipmaps:!0},this._renderer=c,this.extensions=Object.create(null),this.handleContextLost=this.handleContextLost.bind(this),this.handleContextRestored=this.handleContextRestored.bind(this)}get isLost(){return!this.gl||this.gl.isContextLost()}contextChange(c){this.gl=c,this._renderer.gl=c}init(e){var t,i;e=__spreadValues(__spreadValues({},c.defaultOptions),e);let n=this.multiView=e.multiView;if(e.context&&n&&(Bc("Renderer created with both a context and multiview enabled. Disabling multiView as both cannot work together."),n=!1),this.canvas=n?Fe.get().createCanvas(this._renderer.canvas.width,this._renderer.canvas.height):this._renderer.view.canvas,e.context)this.initFromContext(e.context);else{const c=this._renderer.background.alpha<1,n=null==(t=e.premultipliedAlpha)||t,r=e.antialias&&!this._renderer.backBuffer.useBackBuffer;this.createContext(e.preferWebGLVersion,{alpha:c,premultipliedAlpha:n,antialias:r,stencil:!0,preserveDrawingBuffer:e.preserveDrawingBuffer,powerPreference:null!=(i=e.powerPreference)?i:"default"})}}ensureCanvasSize(c){if(!this.multiView)return void(c!==this.canvas&&Bc("multiView is disabled, but targetCanvas is not the main canvas"));const{canvas:e}=this;(e.width<c.width||e.height<c.height)&&(e.width=Math.max(c.width,c.width),e.height=Math.max(c.height,c.height))}initFromContext(c){this.gl=c,this.webGLVersion=c instanceof Fe.get().getWebGLRenderingContext()?1:2,this.getExtensions(),this.validateContext(c),this._renderer.runners.contextChange.emit(c);const e=this._renderer.view.canvas;e.addEventListener("webglcontextlost",this.handleContextLost,!1),e.addEventListener("webglcontextrestored",this.handleContextRestored,!1)}createContext(c,e){let t;const i=this.canvas;if(2===c&&(t=i.getContext("webgl2",e)),!t&&(t=i.getContext("webgl",e),!t))throw new Error("This browser does not support WebGL. Try using the canvas renderer");this.gl=t,this.initFromContext(this.gl)}getExtensions(){const{gl:c}=this,e={anisotropicFiltering:c.getExtension("EXT_texture_filter_anisotropic"),floatTextureLinear:c.getExtension("OES_texture_float_linear"),s3tc:c.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:c.getExtension("WEBGL_compressed_texture_s3tc_srgb"),etc:c.getExtension("WEBGL_compressed_texture_etc"),etc1:c.getExtension("WEBGL_compressed_texture_etc1"),pvrtc:c.getExtension("WEBGL_compressed_texture_pvrtc")||c.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),atc:c.getExtension("WEBGL_compressed_texture_atc"),astc:c.getExtension("WEBGL_compressed_texture_astc"),bptc:c.getExtension("EXT_texture_compression_bptc"),rgtc:c.getExtension("EXT_texture_compression_rgtc"),loseContext:c.getExtension("WEBGL_lose_context")};if(1===this.webGLVersion)this.extensions=__spreadProps(__spreadValues({},e),{drawBuffers:c.getExtension("WEBGL_draw_buffers"),depthTexture:c.getExtension("WEBGL_depth_texture"),vertexArrayObject:c.getExtension("OES_vertex_array_object")||c.getExtension("MOZ_OES_vertex_array_object")||c.getExtension("WEBKIT_OES_vertex_array_object"),uint32ElementIndex:c.getExtension("OES_element_index_uint"),floatTexture:c.getExtension("OES_texture_float"),floatTextureLinear:c.getExtension("OES_texture_float_linear"),textureHalfFloat:c.getExtension("OES_texture_half_float"),textureHalfFloatLinear:c.getExtension("OES_texture_half_float_linear"),vertexAttribDivisorANGLE:c.getExtension("ANGLE_instanced_arrays"),srgb:c.getExtension("EXT_sRGB")});else{this.extensions=__spreadProps(__spreadValues({},e),{colorBufferFloat:c.getExtension("EXT_color_buffer_float")});const t=c.getExtension("WEBGL_provoking_vertex");t&&t.provokingVertexWEBGL(t.FIRST_VERTEX_CONVENTION_WEBGL)}}handleContextLost(c){c.preventDefault(),this._contextLossForced&&(this._contextLossForced=!1,setTimeout(()=>{var c;this.gl.isContextLost()&&(null==(c=this.extensions.loseContext)||c.restoreContext())},0))}handleContextRestored(){this.getExtensions(),this._renderer.runners.contextChange.emit(this.gl)}destroy(){var c;const e=this._renderer.view.canvas;this._renderer=null,e.removeEventListener("webglcontextlost",this.handleContextLost),e.removeEventListener("webglcontextrestored",this.handleContextRestored),this.gl.useProgram(null),null==(c=this.extensions.loseContext)||c.loseContext()}forceContextLoss(){var c;null==(c=this.extensions.loseContext)||c.loseContext(),this._contextLossForced=!0}validateContext(c){const e=c.getContextAttributes();e&&!e.stencil&&Bc("Provided WebGL context does not have a stencil buffer, masks may not render correctly");const t=this.supports,i=2===this.webGLVersion,n=this.extensions;t.uint32Indices=i||!!n.uint32ElementIndex,t.uniformBufferObject=i,t.vertexArrayObject=i||!!n.vertexArrayObject,t.srgbTextures=i||!!n.srgb,t.nonPowOf2wrapping=i,t.nonPowOf2mipmaps=i,t.msaa=i,t.uint32Indices||Bc("Provided WebGL context does not support 32 index buffer, large scenes may not render correctly")}};Ed.extension={type:[s.WebGLSystem],name:"context"},Ed.defaultOptions={context:null,premultipliedAlpha:!0,preserveDrawingBuffer:!1,powerPreference:void 0,preferWebGLVersion:2,multiView:!1};let Rd=Ed;function kd(c,e){for(const t in c.attributes){const i=c.attributes[t],n=e[t];n?(null!=i.format||(i.format=n.format),null!=i.offset||(i.offset=n.offset),null!=i.instance||(i.instance=n.instance)):Bc(`Attribute ${t} is not present in the shader, but is present in the geometry. Unable to infer attribute details.`)}!function(c){const{buffers:e,attributes:t}=c,i={},n={};for(const r in e){const c=e[r];i[c.uid]=0,n[c.uid]=0}for(const r in t){const c=t[r];i[c.buffer.uid]+=Wt(c.format).stride}for(const r in t){const c=t[r];null!=c.stride||(c.stride=i[c.buffer.uid]),null!=c.start||(c.start=n[c.buffer.uid]),n[c.buffer.uid]+=Wt(c.format).stride}}(c)}var Fd=(c=>(c[c.RGBA=6408]="RGBA",c[c.RGB=6407]="RGB",c[c.RG=33319]="RG",c[c.RED=6403]="RED",c[c.RGBA_INTEGER=36249]="RGBA_INTEGER",c[c.RGB_INTEGER=36248]="RGB_INTEGER",c[c.RG_INTEGER=33320]="RG_INTEGER",c[c.RED_INTEGER=36244]="RED_INTEGER",c[c.ALPHA=6406]="ALPHA",c[c.LUMINANCE=6409]="LUMINANCE",c[c.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",c[c.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",c[c.DEPTH_STENCIL=34041]="DEPTH_STENCIL",c))(Fd||{}),Id=(c=>(c[c.TEXTURE_2D=3553]="TEXTURE_2D",c[c.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",c[c.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",c[c.TEXTURE_CUBE_MAP_POSITIVE_X=34069]="TEXTURE_CUBE_MAP_POSITIVE_X",c[c.TEXTURE_CUBE_MAP_NEGATIVE_X=34070]="TEXTURE_CUBE_MAP_NEGATIVE_X",c[c.TEXTURE_CUBE_MAP_POSITIVE_Y=34071]="TEXTURE_CUBE_MAP_POSITIVE_Y",c[c.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072]="TEXTURE_CUBE_MAP_NEGATIVE_Y",c[c.TEXTURE_CUBE_MAP_POSITIVE_Z=34073]="TEXTURE_CUBE_MAP_POSITIVE_Z",c[c.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074]="TEXTURE_CUBE_MAP_NEGATIVE_Z",c))(Id||{}),Bd=(c=>(c[c.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",c[c.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",c[c.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",c[c.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",c[c.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",c[c.UNSIGNED_INT=5125]="UNSIGNED_INT",c[c.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",c[c.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",c[c.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",c[c.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",c[c.BYTE=5120]="BYTE",c[c.SHORT=5122]="SHORT",c[c.INT=5124]="INT",c[c.FLOAT=5126]="FLOAT",c[c.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",c[c.HALF_FLOAT=36193]="HALF_FLOAT",c))(Bd||{});const Dd={uint8x2:Bd.UNSIGNED_BYTE,uint8x4:Bd.UNSIGNED_BYTE,sint8x2:Bd.BYTE,sint8x4:Bd.BYTE,unorm8x2:Bd.UNSIGNED_BYTE,unorm8x4:Bd.UNSIGNED_BYTE,snorm8x2:Bd.BYTE,snorm8x4:Bd.BYTE,uint16x2:Bd.UNSIGNED_SHORT,uint16x4:Bd.UNSIGNED_SHORT,sint16x2:Bd.SHORT,sint16x4:Bd.SHORT,unorm16x2:Bd.UNSIGNED_SHORT,unorm16x4:Bd.UNSIGNED_SHORT,snorm16x2:Bd.SHORT,snorm16x4:Bd.SHORT,float16x2:Bd.HALF_FLOAT,float16x4:Bd.HALF_FLOAT,float32:Bd.FLOAT,float32x2:Bd.FLOAT,float32x3:Bd.FLOAT,float32x4:Bd.FLOAT,uint32:Bd.UNSIGNED_INT,uint32x2:Bd.UNSIGNED_INT,uint32x3:Bd.UNSIGNED_INT,uint32x4:Bd.UNSIGNED_INT,sint32:Bd.INT,sint32x2:Bd.INT,sint32x3:Bd.INT,sint32x4:Bd.INT};function Od(c){var e;return null!=(e=Dd[c])?e:Dd.float32}const Ld={"point-list":0,"line-list":1,"line-strip":3,"triangle-list":4,"triangle-strip":5};class zd{constructor(){this.vaoCache=Object.create(null)}destroy(){this.vaoCache=Object.create(null)}}class Gd{constructor(c){this._renderer=c,this._activeGeometry=null,this._activeVao=null,this.hasVao=!0,this.hasInstance=!0,this._managedGeometries=new Qr({renderer:c,type:"resource",onUnload:this.onGeometryUnload.bind(this),name:"glGeometry"})}contextChange(){const c=this.gl=this._renderer.gl;if(!this._renderer.context.supports.vertexArrayObject)throw new Error("[PixiJS] Vertex Array Objects are not supported on this device");this.destroyAll(!0);const e=this._renderer.context.extensions.vertexArrayObject;e&&(c.createVertexArray=()=>e.createVertexArrayOES(),c.bindVertexArray=c=>e.bindVertexArrayOES(c),c.deleteVertexArray=c=>e.deleteVertexArrayOES(c));const t=this._renderer.context.extensions.vertexAttribDivisorANGLE;t&&(c.drawArraysInstanced=(c,e,i,n)=>{t.drawArraysInstancedANGLE(c,e,i,n)},c.drawElementsInstanced=(c,e,i,n,r)=>{t.drawElementsInstancedANGLE(c,e,i,n,r)},c.vertexAttribDivisor=(c,e)=>t.vertexAttribDivisorANGLE(c,e)),this._activeGeometry=null,this._activeVao=null}bind(c,e){const t=this.gl;this._activeGeometry=c;const i=this.getVao(c,e);this._activeVao!==i&&(this._activeVao=i,t.bindVertexArray(i)),this.updateBuffers()}resetState(){this.unbind()}updateBuffers(){const c=this._activeGeometry,e=this._renderer.buffer;for(let t=0;t<c.buffers.length;t++){const i=c.buffers[t];e.updateBuffer(i)}c._gcLastUsed=this._renderer.gc.now}checkCompatibility(c,e){const t=c.attributes,i=e._attributeData;for(const n in i)if(!t[n])throw new Error(`shader and geometry incompatible, geometry missing the "${n}" attribute`)}getSignature(c,e){const t=c.attributes,i=e._attributeData,n=["g",c.uid];for(const r in t)i[r]&&n.push(r,i[r].location);return n.join("-")}getVao(c,e){var t;return(null==(t=c._gpuData[this._renderer.uid])?void 0:t.vaoCache[e._key])||this.initGeometryVao(c,e)}initGeometryVao(c,e,t=!0){const i=this._renderer.gl,n=this._renderer.buffer;this._renderer.shader._getProgramData(e),this.checkCompatibility(c,e);const r=this.getSignature(c,e);let s=c._gpuData[this._renderer.uid];s||(s=new zd,c._gpuData[this._renderer.uid]=s,this._managedGeometries.add(c));const a=s.vaoCache;let o=a[r];if(o)return a[e._key]=o,o;kd(c,e._attributeData);const f=c.buffers;o=i.createVertexArray(),i.bindVertexArray(o);for(let l=0;l<f.length;l++){const c=f[l];n.bind(c)}return this.activateVao(c,e),a[e._key]=o,a[r]=o,i.bindVertexArray(null),o}onGeometryUnload(c,e=!1){const t=c._gpuData[this._renderer.uid];if(!t)return;const i=t.vaoCache;if(!e)for(const n in i)this._activeVao!==i[n]&&this.resetState(),this.gl.deleteVertexArray(i[n])}destroyAll(c=!1){this._managedGeometries.removeAll(c)}activateVao(c,e){var t,i;const n=this._renderer.gl,r=this._renderer.buffer,s=c.attributes;c.indexBuffer&&r.bind(c.indexBuffer);let a=null;for(const o in s){const c=s[o],f=c.buffer,l=r.getGlBuffer(f),d=e._attributeData[o];if(d){a!==l&&(r.bind(f),a=l);const e=d.location;n.enableVertexAttribArray(e);const s=Wt(c.format),o=Od(c.format);if("int"===(null==(t=d.format)?void 0:t.substring(1,4))?n.vertexAttribIPointer(e,s.size,o,c.stride,c.offset):n.vertexAttribPointer(e,s.size,o,s.normalised,c.stride,c.offset),c.instance){if(!this.hasInstance)throw new Error("geometry error, GPU Instancing is not supported on this device");{const t=null!=(i=c.divisor)?i:1;n.vertexAttribDivisor(e,t)}}}}}draw(c,e,t,i){const{gl:n}=this._renderer,r=this._activeGeometry,s=Ld[c||r.topology];if(null!=i||(i=r.instanceCount),r.indexBuffer){const c=r.indexBuffer.data.BYTES_PER_ELEMENT,a=2===c?n.UNSIGNED_SHORT:n.UNSIGNED_INT;1!==i?n.drawElementsInstanced(s,e||r.indexBuffer.data.length,a,(t||0)*c,i):n.drawElements(s,e||r.indexBuffer.data.length,a,(t||0)*c)}else 1!==i?n.drawArraysInstanced(s,t||0,e||r.getSize(),i):n.drawArrays(s,t||0,e||r.getSize());return this}unbind(){this.gl.bindVertexArray(null),this._activeVao=null,this._activeGeometry=null}destroy(){this._managedGeometries.destroy(),this._renderer=null,this.gl=null,this._activeVao=null,this._activeGeometry=null}}Gd.extension={type:[s.WebGLSystem],name:"geometry"};const Ud=new ur({attributes:{aPosition:[-1,-1,3,-1,-1,3]}}),Vd=class c{constructor(c){this.useBackBuffer=!1,this._useBackBufferThisRender=!1,this._renderer=c}init(e={}){const{useBackBuffer:t,antialias:i}=__spreadValues(__spreadValues({},c.defaultOptions),e);this.useBackBuffer=t,this._antialias=i,this._renderer.context.supports.msaa||(Bc("antialiasing, is not supported on when using the back buffer"),this._antialias=!1),this._state=ai.for2d();const n=new Vt({vertex:"\n attribute vec2 aPosition;\n out vec2 vUv;\n\n void main() {\n gl_Position = vec4(aPosition, 0.0, 1.0);\n\n vUv = (aPosition + 1.0) / 2.0;\n\n // flip dem UVs\n vUv.y = 1.0 - vUv.y;\n }",fragment:"\n in vec2 vUv;\n out vec4 finalColor;\n\n uniform sampler2D uTexture;\n\n void main() {\n finalColor = texture(uTexture, vUv);\n }",name:"big-triangle"});this._bigTriangleShader=new ni({glProgram:n,resources:{uTexture:cc.WHITE.source}})}renderStart(c){const e=this._renderer.renderTarget.getRenderTarget(c.target);if(this._useBackBufferThisRender=this.useBackBuffer&&!!e.isRoot,this._useBackBufferThisRender){const e=this._renderer.renderTarget.getRenderTarget(c.target);this._targetTexture=e.colorTexture,c.target=this._getBackBufferTexture(e.colorTexture)}}renderEnd(){this._presentBackBuffer()}_presentBackBuffer(){const c=this._renderer;c.renderTarget.finishRenderPass(),this._useBackBufferThisRender&&(c.renderTarget.bind(this._targetTexture,!1),this._bigTriangleShader.resources.uTexture=this._backBufferTexture.source,c.encoder.draw({geometry:Ud,shader:this._bigTriangleShader,state:this._state}))}_getBackBufferTexture(c){return this._backBufferTexture=this._backBufferTexture||new cc({source:new K({width:c.width,height:c.height,resolution:c._resolution,antialias:this._antialias})}),this._backBufferTexture.source.resize(c.width,c.height,c._resolution),this._backBufferTexture}destroy(){this._backBufferTexture&&(this._backBufferTexture.destroy(),this._backBufferTexture=null)}};Vd.extension={type:[s.WebGLSystem],name:"backBuffer",priority:1},Vd.defaultOptions={useBackBuffer:!1};let Nd=Vd;class Wd{constructor(c){this._colorMaskCache=15,this._renderer=c}setMask(c){this._colorMaskCache!==c&&(this._colorMaskCache=c,this._renderer.gl.colorMask(!!(8&c),!!(4&c),!!(2&c),!!(1&c)))}}Wd.extension={type:[s.WebGLSystem],name:"colorMask"};class Hd{constructor(c){this.commandFinished=Promise.resolve(),this._renderer=c}setGeometry(c,e){this._renderer.geometry.bind(c,e.glProgram)}finishRenderPass(){}draw(c){const e=this._renderer,{geometry:t,shader:i,state:n,skipSync:r,topology:s,size:a,start:o,instanceCount:f}=c;e.shader.bind(i,r),e.geometry.bind(t,e.shader._activeProgram),n&&e.state.set(n),e.geometry.draw(s,a,o,null!=f?f:t.instanceCount)}destroy(){this._renderer=null}}Hd.extension={type:[s.WebGLSystem],name:"encoder"};class jd{constructor(c){this._renderer=c}contextChange(){const c=this._renderer.gl;this.maxTextures=c.getParameter(c.MAX_TEXTURE_IMAGE_UNITS),this.maxBatchableTextures=$n(this.maxTextures,c);const e=2===this._renderer.context.webGLVersion;this.maxUniformBindings=e?c.getParameter(c.MAX_UNIFORM_BUFFER_BINDINGS):0}destroy(){}}jd.extension={type:[s.WebGLSystem],name:"limits"};class Yd{constructor(){this.width=-1,this.height=-1,this.msaa=!1,this._attachedMipLevel=0,this._attachedLayer=0,this.msaaRenderBuffer=[]}}const Xd=[];Xd[qn.NONE]=void 0,Xd[qn.DISABLED]={stencilWriteMask:0,stencilReadMask:0},Xd[qn.RENDERING_MASK_ADD]={stencilFront:{compare:"equal",passOp:"increment-clamp"},stencilBack:{compare:"equal",passOp:"increment-clamp"}},Xd[qn.RENDERING_MASK_REMOVE]={stencilFront:{compare:"equal",passOp:"decrement-clamp"},stencilBack:{compare:"equal",passOp:"decrement-clamp"}},Xd[qn.MASK_ACTIVE]={stencilWriteMask:0,stencilFront:{compare:"equal",passOp:"keep"},stencilBack:{compare:"equal",passOp:"keep"}},Xd[qn.INVERSE_MASK_ACTIVE]={stencilWriteMask:0,stencilFront:{compare:"not-equal",passOp:"keep"},stencilBack:{compare:"not-equal",passOp:"keep"}};class Zd{constructor(c){this._stencilCache={enabled:!1,stencilReference:0,stencilMode:qn.NONE},this._renderTargetStencilState=Object.create(null),c.renderTarget.onRenderTargetChange.add(this)}contextChange(c){this._gl=c,this._comparisonFuncMapping={always:c.ALWAYS,never:c.NEVER,equal:c.EQUAL,"not-equal":c.NOTEQUAL,less:c.LESS,"less-equal":c.LEQUAL,greater:c.GREATER,"greater-equal":c.GEQUAL},this._stencilOpsMapping={keep:c.KEEP,zero:c.ZERO,replace:c.REPLACE,invert:c.INVERT,"increment-clamp":c.INCR,"decrement-clamp":c.DECR,"increment-wrap":c.INCR_WRAP,"decrement-wrap":c.DECR_WRAP},this.resetState()}onRenderTargetChange(c){if(this._activeRenderTarget===c)return;this._activeRenderTarget=c;let e=this._renderTargetStencilState[c.uid];e||(e=this._renderTargetStencilState[c.uid]={stencilMode:qn.DISABLED,stencilReference:0}),this.setStencilMode(e.stencilMode,e.stencilReference)}resetState(){this._stencilCache.enabled=!1,this._stencilCache.stencilMode=qn.NONE,this._stencilCache.stencilReference=0}setStencilMode(c,e){const t=this._renderTargetStencilState[this._activeRenderTarget.uid],i=this._gl,n=Xd[c],r=this._stencilCache;t.stencilMode=c,t.stencilReference=e,c!==qn.DISABLED?(this._stencilCache.enabled||(this._stencilCache.enabled=!0,i.enable(i.STENCIL_TEST)),c===r.stencilMode&&r.stencilReference===e||(r.stencilMode=c,r.stencilReference=e,i.stencilFunc(this._comparisonFuncMapping[n.stencilBack.compare],e,255),i.stencilOp(i.KEEP,i.KEEP,this._stencilOpsMapping[n.stencilBack.passOp]))):this._stencilCache.enabled&&(this._stencilCache.enabled=!1,i.disable(i.STENCIL_TEST))}}Zd.extension={type:[s.WebGLSystem],name:"stencil"};class qd{constructor(c){this._syncFunctionHash=Object.create(null),this._adaptor=c,this._systemCheck()}_systemCheck(){if(!hi())throw new Error("Current environment does not allow unsafe-eval, please use pixi.js/unsafe-eval module to enable support.")}ensureUniformGroup(c){const e=this.getUniformGroupData(c);c.buffer||(c.buffer=new dr({data:new Float32Array(e.layout.size/4),usage:lr.UNIFORM|lr.COPY_DST}))}getUniformGroupData(c){return this._syncFunctionHash[c._signature]||this._initUniformGroup(c)}_initUniformGroup(c){const e=c._signature;let t=this._syncFunctionHash[e];if(!t){const i=Object.keys(c.uniformStructures).map(e=>c.uniformStructures[e]),n=this._adaptor.createUboElements(i),r=this._generateUboSync(n.uboElements);t=this._syncFunctionHash[e]={layout:n,syncFunction:r}}return this._syncFunctionHash[e]}_generateUboSync(c){return this._adaptor.generateUboSync(c)}syncUniformGroup(c,e,t){const i=this.getUniformGroupData(c);c.buffer||(c.buffer=new dr({data:new Float32Array(i.layout.size/4),usage:lr.UNIFORM|lr.COPY_DST}));let n=null;return e||(e=c.buffer.data,n=c.buffer.dataInt32),t||(t=0),i.syncFunction(c.uniforms,e,n,t),!0}updateUniformGroup(c){if(c.isStatic&&!c._dirtyId)return!1;c._dirtyId=0;const e=this.syncUniformGroup(c);return c.buffer.update(),e}destroy(){this._syncFunctionHash=null}}const Kd={f32:4,i32:4,"vec2<f32>":8,"vec3<f32>":12,"vec4<f32>":16,"vec2<i32>":8,"vec3<i32>":12,"vec4<i32>":16,"mat2x2<f32>":32,"mat3x3<f32>":48,"mat4x4<f32>":64};function Qd(c){const e=c.map(c=>({data:c,offset:0,size:0}));let t=0,i=0;for(let n=0;n<e.length;n++){const c=e[n];if(t=Kd[c.data.type],!t)throw new Error(`Unknown type ${c.data.type}`);c.data.size>1&&(t=Math.max(t,16)*c.data.size);const r=12===t?16:t;c.size=t;const s=i%16;i+=s>0&&16-s<r?(16-s)%16:(t-s%t)%t,c.offset=i,i+=t}return i=16*Math.ceil(i/16),{uboElements:e,size:i}}const Jd=[{type:"mat3x3<f32>",test:c=>void 0!==c.value.a,ubo:"\n var matrix = uv[name].toArray(true);\n data[offset] = matrix[0];\n data[offset + 1] = matrix[1];\n data[offset + 2] = matrix[2];\n data[offset + 4] = matrix[3];\n data[offset + 5] = matrix[4];\n data[offset + 6] = matrix[5];\n data[offset + 8] = matrix[6];\n data[offset + 9] = matrix[7];\n data[offset + 10] = matrix[8];\n ",uniform:"\n gl.uniformMatrix3fv(ud[name].location, false, uv[name].toArray(true));\n "},{type:"vec4<f32>",test:c=>"vec4<f32>"===c.type&&1===c.size&&void 0!==c.value.width,ubo:"\n v = uv[name];\n data[offset] = v.x;\n data[offset + 1] = v.y;\n data[offset + 2] = v.width;\n data[offset + 3] = v.height;\n ",uniform:"\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.x || cv[1] !== v.y || cv[2] !== v.width || cv[3] !== v.height) {\n cv[0] = v.x;\n cv[1] = v.y;\n cv[2] = v.width;\n cv[3] = v.height;\n gl.uniform4f(ud[name].location, v.x, v.y, v.width, v.height);\n }\n "},{type:"vec2<f32>",test:c=>"vec2<f32>"===c.type&&1===c.size&&void 0!==c.value.x,ubo:"\n v = uv[name];\n data[offset] = v.x;\n data[offset + 1] = v.y;\n ",uniform:"\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.x || cv[1] !== v.y) {\n cv[0] = v.x;\n cv[1] = v.y;\n gl.uniform2f(ud[name].location, v.x, v.y);\n }\n "},{type:"vec4<f32>",test:c=>"vec4<f32>"===c.type&&1===c.size&&void 0!==c.value.red,ubo:"\n v = uv[name];\n data[offset] = v.red;\n data[offset + 1] = v.green;\n data[offset + 2] = v.blue;\n data[offset + 3] = v.alpha;\n ",uniform:"\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.alpha) {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n cv[3] = v.alpha;\n gl.uniform4f(ud[name].location, v.red, v.green, v.blue, v.alpha);\n }\n "},{type:"vec3<f32>",test:c=>"vec3<f32>"===c.type&&1===c.size&&void 0!==c.value.red,ubo:"\n v = uv[name];\n data[offset] = v.red;\n data[offset + 1] = v.green;\n data[offset + 2] = v.blue;\n ",uniform:"\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue) {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n gl.uniform3f(ud[name].location, v.red, v.green, v.blue);\n }\n "}];function $d(c,e,t,i){const n=["\n var v = null;\n var v2 = null;\n var t = 0;\n var index = 0;\n var name = null;\n var arrayOffset = null;\n "];let r=0;for(let a=0;a<c.length;a++){const s=c[a],o=s.data.name;let f=!1,l=0;for(let c=0;c<Jd.length;c++){if(Jd[c].test(s.data)){l=s.offset/4,n.push(`name = "${o}";`,`offset += ${l-r};`,Jd[c][e]||Jd[c].ubo),f=!0;break}}if(!f)if(s.data.size>1)l=s.offset/4,n.push(t(s,l-r));else{const c=i[s.data.type];l=s.offset/4,n.push(`\n v = uv.${o};\n offset += ${l-r};\n ${c};\n `)}r=l}const s=n.join("\n");return new Function("uv","data","dataInt32","offset",s)}function ch(c,e){return`\n for (let i = 0; i < ${c*e}; i++) {\n data[offset + (((i / ${c})|0) * 4) + (i % ${c})] = v[i];\n }\n `}const eh={f32:"\n data[offset] = v;",i32:"\n dataInt32[offset] = v;","vec2<f32>":"\n data[offset] = v[0];\n data[offset + 1] = v[1];","vec3<f32>":"\n data[offset] = v[0];\n data[offset + 1] = v[1];\n data[offset + 2] = v[2];","vec4<f32>":"\n data[offset] = v[0];\n data[offset + 1] = v[1];\n data[offset + 2] = v[2];\n data[offset + 3] = v[3];","vec2<i32>":"\n dataInt32[offset] = v[0];\n dataInt32[offset + 1] = v[1];","vec3<i32>":"\n dataInt32[offset] = v[0];\n dataInt32[offset + 1] = v[1];\n dataInt32[offset + 2] = v[2];","vec4<i32>":"\n dataInt32[offset] = v[0];\n dataInt32[offset + 1] = v[1];\n dataInt32[offset + 2] = v[2];\n dataInt32[offset + 3] = v[3];","mat2x2<f32>":"\n data[offset] = v[0];\n data[offset + 1] = v[1];\n data[offset + 4] = v[2];\n data[offset + 5] = v[3];","mat3x3<f32>":"\n data[offset] = v[0];\n data[offset + 1] = v[1];\n data[offset + 2] = v[2];\n data[offset + 4] = v[3];\n data[offset + 5] = v[4];\n data[offset + 6] = v[5];\n data[offset + 8] = v[6];\n data[offset + 9] = v[7];\n data[offset + 10] = v[8];","mat4x4<f32>":"\n for (let i = 0; i < 16; i++) {\n data[offset + i] = v[i];\n }","mat3x2<f32>":ch(3,2),"mat4x2<f32>":ch(4,2),"mat2x3<f32>":ch(2,3),"mat4x3<f32>":ch(4,3),"mat2x4<f32>":ch(2,4),"mat3x4<f32>":ch(3,4)},th=__spreadProps(__spreadValues({},eh),{"mat2x2<f32>":"\n data[offset] = v[0];\n data[offset + 1] = v[1];\n data[offset + 2] = v[2];\n data[offset + 3] = v[3];\n "});function ih(c,e){const t=Math.max(Kd[c.data.type]/16,1),i=c.data.value.length/c.data.size,n=(4-i%4)%4,r=c.data.type.indexOf("i32")>=0?"dataInt32":"data";return`\n v = uv.${c.data.name};\n offset += ${e};\n\n arrayOffset = offset;\n\n t = 0;\n\n for(var i=0; i < ${c.data.size*t}; i++)\n {\n for(var j = 0; j < ${i}; j++)\n {\n ${r}[arrayOffset++] = v[t++];\n }\n ${0!==n?`arrayOffset += ${n};`:""}\n }\n `}function nh(c){return $d(c,"uboStd40",ih,eh)}class rh extends qd{constructor(){super({createUboElements:Qd,generateUboSync:nh})}}rh.extension={type:[s.WebGLSystem],name:"ubo"};class sh{constructor(){this._clearColorCache=[0,0,0,0],this._viewPortCache=new D}init(c,e){this._renderer=c,this._renderTargetSystem=e,c.runners.contextChange.add(this)}contextChange(){this._clearColorCache=[0,0,0,0],this._viewPortCache=new D;const c=this._renderer.gl;this._drawBuffersCache=[];for(let e=1;e<=16;e++)this._drawBuffersCache[e]=Array.from({length:e},(e,t)=>c.COLOR_ATTACHMENT0+t)}copyToTexture(c,e,t,i,n){const r=this._renderTargetSystem,s=this._renderer,a=r.getGpuRenderTarget(c),o=s.gl;return this.finishRenderPass(c),o.bindFramebuffer(o.FRAMEBUFFER,a.resolveTargetFramebuffer),s.texture.bind(e,0),o.copyTexSubImage2D(o.TEXTURE_2D,0,n.x,n.y,t.x,t.y,i.width,i.height),e}startRenderPass(c,e=!0,t,i,n=0,r=0){const s=this._renderTargetSystem,a=c.colorTexture,o=s.getGpuRenderTarget(c);if(0!==r&&this._renderer.context.webGLVersion<2)throw new Error("[RenderTargetSystem] Rendering to array layers requires WebGL2.");if(n>0){if(o.msaa)throw new Error("[RenderTargetSystem] Rendering to mip levels is not supported with MSAA render targets.");if(this._renderer.context.webGLVersion<2)throw new Error("[RenderTargetSystem] Rendering to mip levels requires WebGL2.")}let f=i.y;c.isRoot&&(f=a.pixelHeight-i.height-i.y),c.colorTextures.forEach(c=>{this._renderer.texture.unbind(c)});const l=this._renderer.gl;l.bindFramebuffer(l.FRAMEBUFFER,o.framebuffer),c.isRoot||o._attachedMipLevel===n&&o._attachedLayer===r||(c.colorTextures.forEach((c,e)=>{const t=this._renderer.texture.getGlSource(c);if(t.target===l.TEXTURE_2D){if(0!==r)throw new Error("[RenderTargetSystem] layer must be 0 when rendering to 2D textures in WebGL.");l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0+e,l.TEXTURE_2D,t.texture,n)}else if(t.target===l.TEXTURE_2D_ARRAY){if(this._renderer.context.webGLVersion<2)throw new Error("[RenderTargetSystem] Rendering to 2D array textures requires WebGL2.");l.framebufferTextureLayer(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0+e,t.texture,n,r)}else{if(t.target!==l.TEXTURE_CUBE_MAP)throw new Error("[RenderTargetSystem] Unsupported texture target for render-to-layer in WebGL.");if(r<0||r>5)throw new Error("[RenderTargetSystem] Cube map layer must be between 0 and 5.");l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0+e,l.TEXTURE_CUBE_MAP_POSITIVE_X+r,t.texture,n)}}),o._attachedMipLevel=n,o._attachedLayer=r),c.colorTextures.length>1&&this._setDrawBuffers(c,l);const d=this._viewPortCache;d.x===i.x&&d.y===f&&d.width===i.width&&d.height===i.height||(d.x=i.x,d.y=f,d.width=i.width,d.height=i.height,l.viewport(i.x,f,i.width,i.height)),o.depthStencilRenderBuffer||!c.stencil&&!c.depth||this._initStencil(o),this.clear(c,e,t)}finishRenderPass(c){const e=this._renderTargetSystem.getGpuRenderTarget(c);if(!e.msaa)return;const t=this._renderer.gl;t.bindFramebuffer(t.FRAMEBUFFER,e.resolveTargetFramebuffer),t.bindFramebuffer(t.READ_FRAMEBUFFER,e.framebuffer),t.blitFramebuffer(0,0,e.width,e.height,0,0,e.width,e.height,t.COLOR_BUFFER_BIT,t.NEAREST),t.bindFramebuffer(t.FRAMEBUFFER,e.framebuffer)}initGpuRenderTarget(c){const e=this._renderer.gl,t=new Yd;t._attachedMipLevel=0,t._attachedLayer=0;return c.colorTexture instanceof Ie?(this._renderer.context.ensureCanvasSize(c.colorTexture.resource),t.framebuffer=null,t):(this._initColor(c,t),e.bindFramebuffer(e.FRAMEBUFFER,null),t)}destroyGpuRenderTarget(c){const e=this._renderer.gl;c.framebuffer&&(e.deleteFramebuffer(c.framebuffer),c.framebuffer=null),c.resolveTargetFramebuffer&&(e.deleteFramebuffer(c.resolveTargetFramebuffer),c.resolveTargetFramebuffer=null),c.depthStencilRenderBuffer&&(e.deleteRenderbuffer(c.depthStencilRenderBuffer),c.depthStencilRenderBuffer=null),c.msaaRenderBuffer.forEach(c=>{e.deleteRenderbuffer(c)}),c.msaaRenderBuffer=null}clear(c,e,t,i,n=0,r=0){if(!e)return;if(0!==r)throw new Error("[RenderTargetSystem] Clearing array layers is not supported in WebGL renderer.");const s=this._renderTargetSystem;"boolean"==typeof e&&(e=e?Ui.ALL:Ui.NONE);const a=this._renderer.gl;if(e&Ui.COLOR){null!=t||(t=s.defaultClearColor);const c=this._clearColorCache,e=t;c[0]===e[0]&&c[1]===e[1]&&c[2]===e[2]&&c[3]===e[3]||(c[0]=e[0],c[1]=e[1],c[2]=e[2],c[3]=e[3],a.clearColor(e[0],e[1],e[2],e[3]))}a.clear(e)}resizeGpuRenderTarget(c){if(c.isRoot)return;const e=this._renderTargetSystem.getGpuRenderTarget(c);this._resizeColor(c,e),(c.stencil||c.depth)&&this._resizeStencil(e)}_initColor(c,e){const t=this._renderer,i=t.gl,n=i.createFramebuffer();e.resolveTargetFramebuffer=n,i.bindFramebuffer(i.FRAMEBUFFER,n),e.width=c.colorTexture.source.pixelWidth,e.height=c.colorTexture.source.pixelHeight;if(c.colorTextures.forEach((c,n)=>{const r=c.source;r.antialias&&(t.context.supports.msaa?e.msaa=!0:Bc("[RenderTexture] Antialiasing on textures is not supported in WebGL1")),t.texture.bindSource(r,0);const s=t.texture.getGlSource(r),a=s.texture;if(s.target===i.TEXTURE_2D)i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+n,i.TEXTURE_2D,a,0);else if(s.target===i.TEXTURE_2D_ARRAY){if(t.context.webGLVersion<2)throw new Error("[RenderTargetSystem] TEXTURE_2D_ARRAY requires WebGL2.");i.framebufferTextureLayer(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+n,a,0,0)}else{if(s.target!==i.TEXTURE_CUBE_MAP)throw new Error("[RenderTargetSystem] Unsupported texture target for framebuffer attachment.");i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+n,i.TEXTURE_CUBE_MAP_POSITIVE_X,a,0)}}),e.msaa){const t=i.createFramebuffer();e.framebuffer=t,i.bindFramebuffer(i.FRAMEBUFFER,t),c.colorTextures.forEach((c,t)=>{const n=i.createRenderbuffer();e.msaaRenderBuffer[t]=n})}else e.framebuffer=n;this._resizeColor(c,e)}_resizeColor(c,e){const t=c.colorTexture.source;if(e.width=t.pixelWidth,e.height=t.pixelHeight,e._attachedMipLevel=0,e._attachedLayer=0,c.colorTextures.forEach((c,e)=>{0!==e&&c.source.resize(t.width,t.height,t._resolution)}),e.msaa){const t=this._renderer,i=t.gl,n=e.framebuffer;i.bindFramebuffer(i.FRAMEBUFFER,n),c.colorTextures.forEach((c,n)=>{const r=c.source;t.texture.bindSource(r,0);const s=t.texture.getGlSource(r).internalFormat,a=e.msaaRenderBuffer[n];i.bindRenderbuffer(i.RENDERBUFFER,a),i.renderbufferStorageMultisample(i.RENDERBUFFER,4,s,r.pixelWidth,r.pixelHeight),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+n,i.RENDERBUFFER,a)})}}_initStencil(c){if(null===c.framebuffer)return;const e=this._renderer.gl,t=e.createRenderbuffer();c.depthStencilRenderBuffer=t,e.bindRenderbuffer(e.RENDERBUFFER,t),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_STENCIL_ATTACHMENT,e.RENDERBUFFER,t),this._resizeStencil(c)}_resizeStencil(c){const e=this._renderer.gl;e.bindRenderbuffer(e.RENDERBUFFER,c.depthStencilRenderBuffer),c.msaa?e.renderbufferStorageMultisample(e.RENDERBUFFER,4,e.DEPTH24_STENCIL8,c.width,c.height):e.renderbufferStorage(e.RENDERBUFFER,2===this._renderer.context.webGLVersion?e.DEPTH24_STENCIL8:e.DEPTH_STENCIL,c.width,c.height)}prerender(c){const e=c.colorTexture.resource;this._renderer.context.multiView&&Ie.test(e)&&this._renderer.context.ensureCanvasSize(e)}postrender(c){if(this._renderer.context.multiView&&Ie.test(c.colorTexture.resource)){const e=this._renderer.context.canvas,t=c.colorTexture;t.context2D.drawImage(e,0,t.pixelHeight-e.height)}}_setDrawBuffers(c,e){const t=c.colorTextures.length,i=this._drawBuffersCache[t];if(1===this._renderer.context.webGLVersion){const c=this._renderer.context.extensions.drawBuffers;c?c.drawBuffersWEBGL(i):Bc("[RenderTexture] This WebGL1 context does not support rendering to multiple targets")}else e.drawBuffers(i)}}class ah extends gd{constructor(c){super(c),this.adaptor=new sh,this.adaptor.init(c,this)}}ah.extension={type:[s.WebGLSystem],name:"renderTarget"};class oh extends b{constructor({buffer:c,offset:e,size:t}){super(),this.uid=L("buffer"),this._resourceType="bufferResource",this._touched=0,this._resourceId=L("resource"),this._bufferResource=!0,this.destroyed=!1,this.buffer=c,this.offset=0|e,this.size=t,this.buffer.on("change",this.onBufferChange,this)}onBufferChange(){this._resourceId=L("resource"),this.emit("change",this)}destroy(c=!1){this.destroyed=!0,c&&this.buffer.destroy(),this.emit("change",this),this.buffer=null,this.removeAllListeners()}}class fh{constructor(c,e){this.program=c,this.uniformData=e,this.uniformGroups={},this.uniformDirtyGroups={},this.uniformBlockBindings={}}destroy(){this.uniformData=null,this.uniformGroups=null,this.uniformDirtyGroups=null,this.uniformBlockBindings=null,this.program=null}}function lh(c,e,t){const i=c.createShader(e);return c.shaderSource(i,t),c.compileShader(i),i}function dh(c){const e=new Array(c);for(let t=0;t<e.length;t++)e[t]=!1;return e}function hh(c,e){switch(c){case"float":case"int":case"uint":case"sampler2D":case"sampler2DArray":return 0;case"vec2":return new Float32Array(2*e);case"vec3":return new Float32Array(3*e);case"vec4":return new Float32Array(4*e);case"ivec2":return new Int32Array(2*e);case"ivec3":return new Int32Array(3*e);case"ivec4":return new Int32Array(4*e);case"uvec2":return new Uint32Array(2*e);case"uvec3":return new Uint32Array(3*e);case"uvec4":return new Uint32Array(4*e);case"bool":return!1;case"bvec2":return dh(2*e);case"bvec3":return dh(3*e);case"bvec4":return dh(4*e);case"mat2":return new Float32Array([1,0,0,1]);case"mat3":return new Float32Array([1,0,0,0,1,0,0,0,1]);case"mat4":return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}return null}let uh=null;const ph={FLOAT:"float",FLOAT_VEC2:"vec2",FLOAT_VEC3:"vec3",FLOAT_VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",UNSIGNED_INT:"uint",UNSIGNED_INT_VEC2:"uvec2",UNSIGNED_INT_VEC3:"uvec3",UNSIGNED_INT_VEC4:"uvec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",FLOAT_MAT2:"mat2",FLOAT_MAT3:"mat3",FLOAT_MAT4:"mat4",SAMPLER_2D:"sampler2D",INT_SAMPLER_2D:"sampler2D",UNSIGNED_INT_SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube",INT_SAMPLER_CUBE:"samplerCube",UNSIGNED_INT_SAMPLER_CUBE:"samplerCube",SAMPLER_2D_ARRAY:"sampler2DArray",INT_SAMPLER_2D_ARRAY:"sampler2DArray",UNSIGNED_INT_SAMPLER_2D_ARRAY:"sampler2DArray"},gh={float:"float32",vec2:"float32x2",vec3:"float32x3",vec4:"float32x4",int:"sint32",ivec2:"sint32x2",ivec3:"sint32x3",ivec4:"sint32x4",uint:"uint32",uvec2:"uint32x2",uvec3:"uint32x3",uvec4:"uint32x4",bool:"uint32",bvec2:"uint32x2",bvec3:"uint32x3",bvec4:"uint32x4"};function mh(c,e){if(!uh){const e=Object.keys(ph);uh={};for(let t=0;t<e.length;++t){const i=e[t];uh[c[i]]=ph[i]}}return uh[e]}function bh(c,e){const t=mh(c,e);return gh[t]||"float32"}function vh(c,e){const t=c.getShaderSource(e).split("\n").map((c,e)=>`${e}: ${c}`),i=c.getShaderInfoLog(e),n=i.split("\n"),r={},s=n.map(c=>parseFloat(c.replace(/^ERROR\: 0\:([\d]+)\:.*$/,"$1"))).filter(c=>!(!c||r[c])&&(r[c]=!0,!0)),a=[""];s.forEach(c=>{t[c-1]=`%c${t[c-1]}%c`,a.push("background: #FF0000; color:#FFFFFF; font-size: 10px","font-size: 10px")});const o=t.join("\n");a[0]=o,console.error(i),console.groupCollapsed("click to view full shader code"),console.warn(...a),console.groupEnd()}function yh(c,e){const t=lh(c,c.VERTEX_SHADER,e.vertex),i=lh(c,c.FRAGMENT_SHADER,e.fragment),n=c.createProgram();c.attachShader(n,t),c.attachShader(n,i);const r=e.transformFeedbackVaryings;r&&("function"!=typeof c.transformFeedbackVaryings?Bc("TransformFeedback is not supported but TransformFeedbackVaryings are given."):c.transformFeedbackVaryings(n,r.names,"separate"===r.bufferMode?c.SEPARATE_ATTRIBS:c.INTERLEAVED_ATTRIBS)),c.linkProgram(n),c.getProgramParameter(n,c.LINK_STATUS)||function(c,e,t,i){c.getProgramParameter(e,c.LINK_STATUS)||(c.getShaderParameter(t,c.COMPILE_STATUS)||vh(c,t),c.getShaderParameter(i,c.COMPILE_STATUS)||vh(c,i),console.error("PixiJS Error: Could not initialize shader."),""!==c.getProgramInfoLog(e)&&console.warn("PixiJS Warning: gl.getProgramInfoLog()",c.getProgramInfoLog(e)))}(c,n,t,i),e._attributeData=function(c,e,t=!1){const i={},n=e.getProgramParameter(c,e.ACTIVE_ATTRIBUTES);for(let s=0;s<n;s++){const t=e.getActiveAttrib(c,s);if(t.name.startsWith("gl_"))continue;const n=bh(e,t.type);i[t.name]={location:0,format:n,stride:Wt(n).stride,offset:0,instance:!1,start:0}}const r=Object.keys(i);if(t){r.sort((c,e)=>c>e?1:-1);for(let t=0;t<r.length;t++)i[r[t]].location=t,e.bindAttribLocation(c,t,r[t]);e.linkProgram(c)}else for(let s=0;s<r.length;s++)i[r[s]].location=e.getAttribLocation(c,r[s]);return i}(n,c,!/^[ \t]*#[ \t]*version[ \t]+300[ \t]+es[ \t]*$/m.test(e.vertex)),e._uniformData=function(c,e){const t={},i=e.getProgramParameter(c,e.ACTIVE_UNIFORMS);for(let n=0;n<i;n++){const i=e.getActiveUniform(c,n),r=i.name.replace(/\[.*?\]$/,""),s=!!i.name.match(/\[.*?\]$/),a=mh(e,i.type);t[r]={name:r,index:n,type:a,size:i.size,isArray:s,value:hh(a,i.size)}}return t}(n,c),e._uniformBlockData=function(c,e){if(!e.ACTIVE_UNIFORM_BLOCKS)return{};const t={},i=e.getProgramParameter(c,e.ACTIVE_UNIFORM_BLOCKS);for(let n=0;n<i;n++){const i=e.getActiveUniformBlockName(c,n),r=e.getUniformBlockIndex(c,i),s=e.getActiveUniformBlockParameter(c,n,e.UNIFORM_BLOCK_DATA_SIZE);t[i]={name:i,index:r,size:s}}return t}(n,c),c.deleteShader(t),c.deleteShader(i);const s={};for(const a in e._uniformData){const t=e._uniformData[a];s[a]={location:c.getUniformLocation(n,a),value:hh(t.type,t.size)}}return new fh(n,s)}const _h={textureCount:0,blockIndex:0};class xh{constructor(c){this._activeProgram=null,this._programDataHash=Object.create(null),this._shaderSyncFunctions=Object.create(null),this._renderer=c}contextChange(c){this._gl=c,this._programDataHash=Object.create(null),this._shaderSyncFunctions=Object.create(null),this._activeProgram=null}bind(c,e){if(this._setProgram(c.glProgram),e)return;_h.textureCount=0,_h.blockIndex=0;let t=this._shaderSyncFunctions[c.glProgram._key];t||(t=this._shaderSyncFunctions[c.glProgram._key]=this._generateShaderSync(c,this)),this._renderer.buffer.nextBindBase(!!c.glProgram.transformFeedbackVaryings),t(this._renderer,c,_h)}updateUniformGroup(c){this._renderer.uniformGroup.updateUniformGroup(c,this._activeProgram,_h)}bindUniformBlock(c,e,t=0){const i=this._renderer.buffer,n=this._getProgramData(this._activeProgram),r=c._bufferResource;r||this._renderer.ubo.updateUniformGroup(c);const s=c.buffer,a=i.updateBuffer(s),o=i.freeLocationForBufferBase(a);if(r){const{offset:e,size:t}=c;0===e&&t===s.data.byteLength?i.bindBufferBase(a,o):i.bindBufferRange(a,o,e)}else i.getLastBindBaseLocation(a)!==o&&i.bindBufferBase(a,o);const f=this._activeProgram._uniformBlockData[e].index;n.uniformBlockBindings[t]!==o&&(n.uniformBlockBindings[t]=o,this._renderer.gl.uniformBlockBinding(n.program,f,o))}_setProgram(c){if(this._activeProgram===c)return;this._activeProgram=c;const e=this._getProgramData(c);this._gl.useProgram(e.program)}_getProgramData(c){return this._programDataHash[c._key]||this._createProgramData(c)}_createProgramData(c){const e=c._key;return this._programDataHash[e]=yh(this._gl,c),this._programDataHash[e]}destroy(){for(const c of Object.keys(this._programDataHash))this._programDataHash[c].destroy();this._programDataHash=null,this._shaderSyncFunctions=null,this._activeProgram=null,this._renderer=null,this._gl=null}_generateShaderSync(c,e){return function(c,e){const t=[],i=["\n var g = s.groups;\n var sS = r.shader;\n var p = s.glProgram;\n var ugS = r.uniformGroup;\n var resources;\n "];let n=!1,r=0;const s=e._getProgramData(c.glProgram);for(const o in c.groups){const a=c.groups[o];t.push(`\n resources = g[${o}].resources;\n `);for(const f in a.resources){const l=a.resources[f];if(l instanceof ei)if(l.ubo){const e=c._uniformBindMap[o][Number(f)];t.push(`\n sS.bindUniformBlock(\n resources[${f}],\n '${e}',\n ${c.glProgram._uniformBlockData[e].index}\n );\n `)}else t.push(`\n ugS.updateUniformGroup(resources[${f}], p, sD);\n `);else if(l instanceof oh){const e=c._uniformBindMap[o][Number(f)];t.push(`\n sS.bindUniformBlock(\n resources[${f}],\n '${e}',\n ${c.glProgram._uniformBlockData[e].index}\n );\n `)}else if(l instanceof K){const a=c._uniformBindMap[o][f],l=s.uniformData[a];l&&(n||(n=!0,i.push("\n var tS = r.texture;\n ")),e._gl.uniform1i(l.location,r),t.push(`\n tS.bind(resources[${f}], ${r});\n `),r++)}}}const a=[...i,...t].join("\n");return new Function("r","s","sD",a)}(c,e)}resetState(){this._activeProgram=null}}xh.extension={type:[s.WebGLSystem],name:"shader"};const Sh={f32:"if (cv !== v) {\n cu.value = v;\n gl.uniform1f(location, v);\n }","vec2<f32>":"if (cv[0] !== v[0] || cv[1] !== v[1]) {\n cv[0] = v[0];\n cv[1] = v[1];\n gl.uniform2f(location, v[0], v[1]);\n }","vec3<f32>":"if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n gl.uniform3f(location, v[0], v[1], v[2]);\n }","vec4<f32>":"if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n gl.uniform4f(location, v[0], v[1], v[2], v[3]);\n }",i32:"if (cv !== v) {\n cu.value = v;\n gl.uniform1i(location, v);\n }","vec2<i32>":"if (cv[0] !== v[0] || cv[1] !== v[1]) {\n cv[0] = v[0];\n cv[1] = v[1];\n gl.uniform2i(location, v[0], v[1]);\n }","vec3<i32>":"if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n gl.uniform3i(location, v[0], v[1], v[2]);\n }","vec4<i32>":"if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n gl.uniform4i(location, v[0], v[1], v[2], v[3]);\n }",u32:"if (cv !== v) {\n cu.value = v;\n gl.uniform1ui(location, v);\n }","vec2<u32>":"if (cv[0] !== v[0] || cv[1] !== v[1]) {\n cv[0] = v[0];\n cv[1] = v[1];\n gl.uniform2ui(location, v[0], v[1]);\n }","vec3<u32>":"if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n gl.uniform3ui(location, v[0], v[1], v[2]);\n }","vec4<u32>":"if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n gl.uniform4ui(location, v[0], v[1], v[2], v[3]);\n }",bool:"if (cv !== v) {\n cu.value = v;\n gl.uniform1i(location, v);\n }","vec2<bool>":"if (cv[0] !== v[0] || cv[1] !== v[1]) {\n cv[0] = v[0];\n cv[1] = v[1];\n gl.uniform2i(location, v[0], v[1]);\n }","vec3<bool>":"if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n gl.uniform3i(location, v[0], v[1], v[2]);\n }","vec4<bool>":"if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n gl.uniform4i(location, v[0], v[1], v[2], v[3]);\n }","mat2x2<f32>":"gl.uniformMatrix2fv(location, false, v);","mat3x3<f32>":"gl.uniformMatrix3fv(location, false, v);","mat4x4<f32>":"gl.uniformMatrix4fv(location, false, v);"},wh={f32:"gl.uniform1fv(location, v);","vec2<f32>":"gl.uniform2fv(location, v);","vec3<f32>":"gl.uniform3fv(location, v);","vec4<f32>":"gl.uniform4fv(location, v);","mat2x2<f32>":"gl.uniformMatrix2fv(location, false, v);","mat3x3<f32>":"gl.uniformMatrix3fv(location, false, v);","mat4x4<f32>":"gl.uniformMatrix4fv(location, false, v);",i32:"gl.uniform1iv(location, v);","vec2<i32>":"gl.uniform2iv(location, v);","vec3<i32>":"gl.uniform3iv(location, v);","vec4<i32>":"gl.uniform4iv(location, v);",u32:"gl.uniform1iv(location, v);","vec2<u32>":"gl.uniform2iv(location, v);","vec3<u32>":"gl.uniform3iv(location, v);","vec4<u32>":"gl.uniform4iv(location, v);",bool:"gl.uniform1iv(location, v);","vec2<bool>":"gl.uniform2iv(location, v);","vec3<bool>":"gl.uniform3iv(location, v);","vec4<bool>":"gl.uniform4iv(location, v);"};class Ch{constructor(c){this._cache={},this._uniformGroupSyncHash={},this._renderer=c,this.gl=null,this._cache={}}contextChange(c){this.gl=c}updateUniformGroup(c,e,t){const i=this._renderer.shader._getProgramData(e);if(!c.isStatic||c._dirtyId!==i.uniformDirtyGroups[c.uid]){i.uniformDirtyGroups[c.uid]=c._dirtyId;this._getUniformSyncFunction(c,e)(i.uniformData,c.uniforms,this._renderer,t)}}_getUniformSyncFunction(c,e){var t;return(null==(t=this._uniformGroupSyncHash[c._signature])?void 0:t[e._key])||this._createUniformSyncFunction(c,e)}_createUniformSyncFunction(c,e){const t=this._uniformGroupSyncHash[c._signature]||(this._uniformGroupSyncHash[c._signature]={}),i=this._getSignature(c,e._uniformData,"u");return this._cache[i]||(this._cache[i]=this._generateUniformsSync(c,e._uniformData)),t[e._key]=this._cache[i],t[e._key]}_generateUniformsSync(c,e){return function(c,e){const t=["\n var v = null;\n var cv = null;\n var cu = null;\n var t = 0;\n var gl = renderer.gl;\n var name = null;\n "];for(const i in c.uniforms){if(!e[i]){c.uniforms[i]instanceof ei?c.uniforms[i].ubo?t.push(`\n renderer.shader.bindUniformBlock(uv.${i}, "${i}");\n `):t.push(`\n renderer.shader.updateUniformGroup(uv.${i});\n `):c.uniforms[i]instanceof oh&&t.push(`\n renderer.shader.bindBufferResource(uv.${i}, "${i}");\n `);continue}const n=c.uniformStructures[i];let r=!1;for(let c=0;c<Jd.length;c++){const e=Jd[c];if(n.type===e.type&&e.test(n)){t.push(`name = "${i}";`,Jd[c].uniform),r=!0;break}}if(!r){const c=(1===n.size?Sh:wh)[n.type].replace("location",`ud["${i}"].location`);t.push(`\n cu = ud["${i}"];\n cv = cu.value;\n v = uv["${i}"];\n ${c};`)}}return new Function("ud","uv","renderer","syncData",t.join("\n"))}(c,e)}_getSignature(c,e,t){const i=c.uniforms,n=[`${t}-`];for(const r in i)n.push(r),e[r]&&n.push(e[r].type);return n.join("-")}destroy(){this._renderer=null,this._cache=null}}Ch.extension={type:[s.WebGLSystem],name:"uniformGroup"};const Ah=class c{constructor(c){this._invertFrontFace=!1,this.gl=null,this.stateId=0,this.polygonOffset=0,this.blendMode="none",this._blendEq=!1,this.map=[],this.map[0]=this.setBlend,this.map[1]=this.setOffset,this.map[2]=this.setCullFace,this.map[3]=this.setDepthTest,this.map[4]=this.setFrontFace,this.map[5]=this.setDepthMask,this.checks=[],this.defaultState=ai.for2d(),c.renderTarget.onRenderTargetChange.add(this)}onRenderTargetChange(c){this._invertFrontFace=!c.isRoot,this._cullFace?this.setFrontFace(this._frontFace):this._frontFaceDirty=!0}contextChange(c){this.gl=c,this.blendModesMap=function(c){const e={};if(e.normal=[c.ONE,c.ONE_MINUS_SRC_ALPHA],e.add=[c.ONE,c.ONE],e.multiply=[c.DST_COLOR,c.ONE_MINUS_SRC_ALPHA,c.ONE,c.ONE_MINUS_SRC_ALPHA],e.screen=[c.ONE,c.ONE_MINUS_SRC_COLOR,c.ONE,c.ONE_MINUS_SRC_ALPHA],e.none=[0,0],e["normal-npm"]=[c.SRC_ALPHA,c.ONE_MINUS_SRC_ALPHA,c.ONE,c.ONE_MINUS_SRC_ALPHA],e["add-npm"]=[c.SRC_ALPHA,c.ONE,c.ONE,c.ONE],e["screen-npm"]=[c.SRC_ALPHA,c.ONE_MINUS_SRC_COLOR,c.ONE,c.ONE_MINUS_SRC_ALPHA],e.erase=[c.ZERO,c.ONE_MINUS_SRC_ALPHA],c instanceof Fe.get().getWebGLRenderingContext()){const t=c.getExtension("EXT_blend_minmax");t&&(e.min=[c.ONE,c.ONE,c.ONE,c.ONE,t.MIN_EXT,t.MIN_EXT],e.max=[c.ONE,c.ONE,c.ONE,c.ONE,t.MAX_EXT,t.MAX_EXT])}else e.min=[c.ONE,c.ONE,c.ONE,c.ONE,c.MIN,c.MIN],e.max=[c.ONE,c.ONE,c.ONE,c.ONE,c.MAX,c.MAX];return e}(c),this.resetState()}set(c){if(c||(c=this.defaultState),this.stateId!==c.data){let e=this.stateId^c.data,t=0;for(;e;)1&e&&this.map[t].call(this,!!(c.data&1<<t)),e>>=1,t++;this.stateId=c.data}for(let e=0;e<this.checks.length;e++)this.checks[e](this,c)}forceState(c){c||(c=this.defaultState);for(let e=0;e<this.map.length;e++)this.map[e].call(this,!!(c.data&1<<e));for(let e=0;e<this.checks.length;e++)this.checks[e](this,c);this.stateId=c.data}setBlend(e){this._updateCheck(c._checkBlendMode,e),this.gl[e?"enable":"disable"](this.gl.BLEND)}setOffset(e){this._updateCheck(c._checkPolygonOffset,e),this.gl[e?"enable":"disable"](this.gl.POLYGON_OFFSET_FILL)}setDepthTest(c){this.gl[c?"enable":"disable"](this.gl.DEPTH_TEST)}setDepthMask(c){this.gl.depthMask(c)}setCullFace(c){this._cullFace=c,this.gl[c?"enable":"disable"](this.gl.CULL_FACE),this._cullFace&&this._frontFaceDirty&&this.setFrontFace(this._frontFace)}setFrontFace(c){this._frontFace=c,this._frontFaceDirty=!1;const e=this._invertFrontFace?!c:c;this._glFrontFace!==e&&(this._glFrontFace=e,this.gl.frontFace(this.gl[e?"CW":"CCW"]))}setBlendMode(c){if(this.blendModesMap[c]||(c="normal"),c===this.blendMode)return;this.blendMode=c;const e=this.blendModesMap[c],t=this.gl;2===e.length?t.blendFunc(e[0],e[1]):t.blendFuncSeparate(e[0],e[1],e[2],e[3]),6===e.length?(this._blendEq=!0,t.blendEquationSeparate(e[4],e[5])):this._blendEq&&(this._blendEq=!1,t.blendEquationSeparate(t.FUNC_ADD,t.FUNC_ADD))}setPolygonOffset(c,e){this.gl.polygonOffset(c,e)}resetState(){this._glFrontFace=!1,this._frontFace=!1,this._cullFace=!1,this._frontFaceDirty=!1,this._invertFrontFace=!1,this.gl.frontFace(this.gl.CCW),this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL,!1),this.forceState(this.defaultState),this._blendEq=!0,this.blendMode="",this.setBlendMode("normal")}_updateCheck(c,e){const t=this.checks.indexOf(c);e&&-1===t?this.checks.push(c):e||-1===t||this.checks.splice(t,1)}static _checkBlendMode(c,e){c.setBlendMode(e.blendMode)}static _checkPolygonOffset(c,e){c.setPolygonOffset(1,e.polygonOffset)}destroy(){this.gl=null,this.checks.length=0}};Ah.extension={type:[s.WebGLSystem],name:"state"};let Th=Ah;class Ph{constructor(c){this.target=Id.TEXTURE_2D,this._layerInitMask=0,this.texture=c,this.width=-1,this.height=-1,this.type=Bd.UNSIGNED_BYTE,this.internalFormat=Fd.RGBA,this.format=Fd.RGBA,this.samplerType=0}destroy(){}}const Mh={id:"buffer",upload(c,e,t,i,n,r=!1){const s=n||e.target;r||e.width!==c.width||e.height!==c.height?t.texImage2D(s,0,e.internalFormat,c.width,c.height,0,e.format,e.type,c.resource):t.texSubImage2D(s,0,0,0,c.width,c.height,e.format,e.type,c.resource),e.width=c.width,e.height=c.height}},Eh={"bc1-rgba-unorm":!0,"bc1-rgba-unorm-srgb":!0,"bc2-rgba-unorm":!0,"bc2-rgba-unorm-srgb":!0,"bc3-rgba-unorm":!0,"bc3-rgba-unorm-srgb":!0,"bc4-r-unorm":!0,"bc4-r-snorm":!0,"bc5-rg-unorm":!0,"bc5-rg-snorm":!0,"bc6h-rgb-ufloat":!0,"bc6h-rgb-float":!0,"bc7-rgba-unorm":!0,"bc7-rgba-unorm-srgb":!0,"etc2-rgb8unorm":!0,"etc2-rgb8unorm-srgb":!0,"etc2-rgb8a1unorm":!0,"etc2-rgb8a1unorm-srgb":!0,"etc2-rgba8unorm":!0,"etc2-rgba8unorm-srgb":!0,"eac-r11unorm":!0,"eac-r11snorm":!0,"eac-rg11unorm":!0,"eac-rg11snorm":!0,"astc-4x4-unorm":!0,"astc-4x4-unorm-srgb":!0,"astc-5x4-unorm":!0,"astc-5x4-unorm-srgb":!0,"astc-5x5-unorm":!0,"astc-5x5-unorm-srgb":!0,"astc-6x5-unorm":!0,"astc-6x5-unorm-srgb":!0,"astc-6x6-unorm":!0,"astc-6x6-unorm-srgb":!0,"astc-8x5-unorm":!0,"astc-8x5-unorm-srgb":!0,"astc-8x6-unorm":!0,"astc-8x6-unorm-srgb":!0,"astc-8x8-unorm":!0,"astc-8x8-unorm-srgb":!0,"astc-10x5-unorm":!0,"astc-10x5-unorm-srgb":!0,"astc-10x6-unorm":!0,"astc-10x6-unorm-srgb":!0,"astc-10x8-unorm":!0,"astc-10x8-unorm-srgb":!0,"astc-10x10-unorm":!0,"astc-10x10-unorm-srgb":!0,"astc-12x10-unorm":!0,"astc-12x10-unorm-srgb":!0,"astc-12x12-unorm":!0,"astc-12x12-unorm-srgb":!0},Rh={id:"compressed",upload(c,e,t,i,n,r){const s=null!=n?n:e.target;t.pixelStorei(t.UNPACK_ALIGNMENT,4);let a=c.pixelWidth,o=c.pixelHeight;const f=!!Eh[c.format];for(let l=0;l<c.resource.length;l++){const i=c.resource[l];f?t.compressedTexImage2D(s,l,e.internalFormat,a,o,0,i):t.texImage2D(s,l,e.internalFormat,a,o,0,e.format,e.type,i),a=Math.max(a>>1,1),o=Math.max(o>>1,1)}}},kh=["right","left","top","bottom","front","back"];const Fh={id:"image",upload(c,e,t,i,n,r=!1){const s=n||e.target,a=c.pixelWidth,o=c.pixelHeight,f=c.resourceWidth,l=c.resourceHeight,d=2===i,h=r||e.width!==a||e.height!==o,u=f>=a&&l>=o;(d?Ih:Bh)(t,s,e,a,o,f,l,c.resource,h,u),e.width=a,e.height=o}};function Ih(c,e,t,i,n,r,s,a,o,f){if(!f)return o&&c.texImage2D(e,0,t.internalFormat,i,n,0,t.format,t.type,null),void c.texSubImage2D(e,0,0,0,r,s,t.format,t.type,a);o?c.texImage2D(e,0,t.internalFormat,i,n,0,t.format,t.type,a):c.texSubImage2D(e,0,0,0,t.format,t.type,a)}function Bh(c,e,t,i,n,r,s,a,o,f){if(!f)return o&&c.texImage2D(e,0,t.internalFormat,i,n,0,t.format,t.type,null),void c.texSubImage2D(e,0,0,0,t.format,t.type,a);o?c.texImage2D(e,0,t.internalFormat,t.format,t.type,a):c.texSubImage2D(e,0,0,0,t.format,t.type,a)}const Dh=function(){const{userAgent:c}=Fe.get().getNavigator();return/^((?!chrome|android).)*safari/i.test(c)}(),Oh={id:"video",upload(c,e,t,i,n,r=Dh){if(!c.isValid){const c=null!=n?n:e.target;return void t.texImage2D(c,0,e.internalFormat,1,1,0,e.format,e.type,null)}Fh.upload(c,e,t,i,n,r)}},Lh={linear:9729,nearest:9728},zh={linear:{linear:9987,nearest:9985},nearest:{linear:9986,nearest:9984}},Gh={"clamp-to-edge":33071,repeat:10497,"mirror-repeat":33648},Uh={never:512,less:513,equal:514,"less-equal":515,greater:516,"not-equal":517,"greater-equal":518,always:519};function Vh(c,e,t,i,n,r,s,a){const o=r;if(!a||"repeat"!==c.addressModeU||"repeat"!==c.addressModeV||"repeat"!==c.addressModeW){const t=Gh[s?"clamp-to-edge":c.addressModeU],i=Gh[s?"clamp-to-edge":c.addressModeV],r=Gh[s?"clamp-to-edge":c.addressModeW];e[n](o,e.TEXTURE_WRAP_S,t),e[n](o,e.TEXTURE_WRAP_T,i),e.TEXTURE_WRAP_R&&e[n](o,e.TEXTURE_WRAP_R,r)}if(a&&"linear"===c.magFilter||e[n](o,e.TEXTURE_MAG_FILTER,Lh[c.magFilter]),t){if(!a||"linear"!==c.mipmapFilter){const t=zh[c.minFilter][c.mipmapFilter];e[n](o,e.TEXTURE_MIN_FILTER,t)}}else e[n](o,e.TEXTURE_MIN_FILTER,Lh[c.minFilter]);if(i&&c.maxAnisotropy>1){const t=Math.min(c.maxAnisotropy,e.getParameter(i.MAX_TEXTURE_MAX_ANISOTROPY_EXT));e[n](o,i.TEXTURE_MAX_ANISOTROPY_EXT,t)}c.compare&&e[n](o,e.TEXTURE_COMPARE_FUNC,Uh[c.compare])}class Nh{constructor(c){this._glSamplers=Object.create(null),this._boundTextures=[],this._activeTextureLocation=-1,this._boundSamplers=Object.create(null),this._premultiplyAlpha=!1,this._useSeparateSamplers=!1,this._renderer=c,this._managedTextures=new Qr({renderer:c,type:"resource",onUnload:this.onSourceUnload.bind(this),name:"glTexture"});const e={image:Fh,buffer:Mh,video:Oh,compressed:Rh};var t;this._uploads=__spreadProps(__spreadValues({},e),{cube:(t=e,{id:"cube",upload(c,e,i,n){const r=c.faces;for(let s=0;s<kh.length;s++){const c=r[kh[s]];(t[c.uploadMethodId]||t.image).upload(c,e,i,n,Id.TEXTURE_CUBE_MAP_POSITIVE_X+s,!(e._layerInitMask&1<<s)),e._layerInitMask|=1<<s}e.width=c.pixelWidth,e.height=c.pixelHeight}})})}get managedTextures(){return Object.values(this._managedTextures.items)}contextChange(c){this._gl=c,this._mapFormatToInternalFormat||(this._mapFormatToInternalFormat=function(c,e){let t={},i=c.RGBA;return c instanceof Fe.get().getWebGLRenderingContext()?e.srgb&&(t={"rgba8unorm-srgb":e.srgb.SRGB8_ALPHA8_EXT,"bgra8unorm-srgb":e.srgb.SRGB8_ALPHA8_EXT}):(t={"rgba8unorm-srgb":c.SRGB8_ALPHA8,"bgra8unorm-srgb":c.SRGB8_ALPHA8},i=c.RGBA8),__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadProps(__spreadValues({r8unorm:c.R8,r8snorm:c.R8_SNORM,r8uint:c.R8UI,r8sint:c.R8I,r16uint:c.R16UI,r16sint:c.R16I,r16float:c.R16F,rg8unorm:c.RG8,rg8snorm:c.RG8_SNORM,rg8uint:c.RG8UI,rg8sint:c.RG8I,r32uint:c.R32UI,r32sint:c.R32I,r32float:c.R32F,rg16uint:c.RG16UI,rg16sint:c.RG16I,rg16float:c.RG16F,rgba8unorm:c.RGBA},t),{rgba8snorm:c.RGBA8_SNORM,rgba8uint:c.RGBA8UI,rgba8sint:c.RGBA8I,bgra8unorm:i,rgb9e5ufloat:c.RGB9_E5,rgb10a2unorm:c.RGB10_A2,rg11b10ufloat:c.R11F_G11F_B10F,rg32uint:c.RG32UI,rg32sint:c.RG32I,rg32float:c.RG32F,rgba16uint:c.RGBA16UI,rgba16sint:c.RGBA16I,rgba16float:c.RGBA16F,rgba32uint:c.RGBA32UI,rgba32sint:c.RGBA32I,rgba32float:c.RGBA32F,stencil8:c.STENCIL_INDEX8,depth16unorm:c.DEPTH_COMPONENT16,depth24plus:c.DEPTH_COMPONENT24,"depth24plus-stencil8":c.DEPTH24_STENCIL8,depth32float:c.DEPTH_COMPONENT32F,"depth32float-stencil8":c.DEPTH32F_STENCIL8}),e.s3tc?{"bc1-rgba-unorm":e.s3tc.COMPRESSED_RGBA_S3TC_DXT1_EXT,"bc2-rgba-unorm":e.s3tc.COMPRESSED_RGBA_S3TC_DXT3_EXT,"bc3-rgba-unorm":e.s3tc.COMPRESSED_RGBA_S3TC_DXT5_EXT}:{}),e.s3tc_sRGB?{"bc1-rgba-unorm-srgb":e.s3tc_sRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,"bc2-rgba-unorm-srgb":e.s3tc_sRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,"bc3-rgba-unorm-srgb":e.s3tc_sRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}:{}),e.rgtc?{"bc4-r-unorm":e.rgtc.COMPRESSED_RED_RGTC1_EXT,"bc4-r-snorm":e.rgtc.COMPRESSED_SIGNED_RED_RGTC1_EXT,"bc5-rg-unorm":e.rgtc.COMPRESSED_RED_GREEN_RGTC2_EXT,"bc5-rg-snorm":e.rgtc.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}:{}),e.bptc?{"bc6h-rgb-float":e.bptc.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT,"bc6h-rgb-ufloat":e.bptc.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT,"bc7-rgba-unorm":e.bptc.COMPRESSED_RGBA_BPTC_UNORM_EXT,"bc7-rgba-unorm-srgb":e.bptc.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT}:{}),e.etc?{"etc2-rgb8unorm":e.etc.COMPRESSED_RGB8_ETC2,"etc2-rgb8unorm-srgb":e.etc.COMPRESSED_SRGB8_ETC2,"etc2-rgb8a1unorm":e.etc.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,"etc2-rgb8a1unorm-srgb":e.etc.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,"etc2-rgba8unorm":e.etc.COMPRESSED_RGBA8_ETC2_EAC,"etc2-rgba8unorm-srgb":e.etc.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,"eac-r11unorm":e.etc.COMPRESSED_R11_EAC,"eac-rg11unorm":e.etc.COMPRESSED_SIGNED_RG11_EAC}:{}),e.astc?{"astc-4x4-unorm":e.astc.COMPRESSED_RGBA_ASTC_4x4_KHR,"astc-4x4-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,"astc-5x4-unorm":e.astc.COMPRESSED_RGBA_ASTC_5x4_KHR,"astc-5x4-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,"astc-5x5-unorm":e.astc.COMPRESSED_RGBA_ASTC_5x5_KHR,"astc-5x5-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,"astc-6x5-unorm":e.astc.COMPRESSED_RGBA_ASTC_6x5_KHR,"astc-6x5-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,"astc-6x6-unorm":e.astc.COMPRESSED_RGBA_ASTC_6x6_KHR,"astc-6x6-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,"astc-8x5-unorm":e.astc.COMPRESSED_RGBA_ASTC_8x5_KHR,"astc-8x5-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,"astc-8x6-unorm":e.astc.COMPRESSED_RGBA_ASTC_8x6_KHR,"astc-8x6-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,"astc-8x8-unorm":e.astc.COMPRESSED_RGBA_ASTC_8x8_KHR,"astc-8x8-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,"astc-10x5-unorm":e.astc.COMPRESSED_RGBA_ASTC_10x5_KHR,"astc-10x5-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,"astc-10x6-unorm":e.astc.COMPRESSED_RGBA_ASTC_10x6_KHR,"astc-10x6-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,"astc-10x8-unorm":e.astc.COMPRESSED_RGBA_ASTC_10x8_KHR,"astc-10x8-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,"astc-10x10-unorm":e.astc.COMPRESSED_RGBA_ASTC_10x10_KHR,"astc-10x10-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,"astc-12x10-unorm":e.astc.COMPRESSED_RGBA_ASTC_12x10_KHR,"astc-12x10-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,"astc-12x12-unorm":e.astc.COMPRESSED_RGBA_ASTC_12x12_KHR,"astc-12x12-unorm-srgb":e.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR}:{})}(c,this._renderer.context.extensions),this._mapFormatToType=function(c){return{r8unorm:c.UNSIGNED_BYTE,r8snorm:c.BYTE,r8uint:c.UNSIGNED_BYTE,r8sint:c.BYTE,r16uint:c.UNSIGNED_SHORT,r16sint:c.SHORT,r16float:c.HALF_FLOAT,rg8unorm:c.UNSIGNED_BYTE,rg8snorm:c.BYTE,rg8uint:c.UNSIGNED_BYTE,rg8sint:c.BYTE,r32uint:c.UNSIGNED_INT,r32sint:c.INT,r32float:c.FLOAT,rg16uint:c.UNSIGNED_SHORT,rg16sint:c.SHORT,rg16float:c.HALF_FLOAT,rgba8unorm:c.UNSIGNED_BYTE,"rgba8unorm-srgb":c.UNSIGNED_BYTE,rgba8snorm:c.BYTE,rgba8uint:c.UNSIGNED_BYTE,rgba8sint:c.BYTE,bgra8unorm:c.UNSIGNED_BYTE,"bgra8unorm-srgb":c.UNSIGNED_BYTE,rgb9e5ufloat:c.UNSIGNED_INT_5_9_9_9_REV,rgb10a2unorm:c.UNSIGNED_INT_2_10_10_10_REV,rg11b10ufloat:c.UNSIGNED_INT_10F_11F_11F_REV,rg32uint:c.UNSIGNED_INT,rg32sint:c.INT,rg32float:c.FLOAT,rgba16uint:c.UNSIGNED_SHORT,rgba16sint:c.SHORT,rgba16float:c.HALF_FLOAT,rgba32uint:c.UNSIGNED_INT,rgba32sint:c.INT,rgba32float:c.FLOAT,stencil8:c.UNSIGNED_BYTE,depth16unorm:c.UNSIGNED_SHORT,depth24plus:c.UNSIGNED_INT,"depth24plus-stencil8":c.UNSIGNED_INT_24_8,depth32float:c.FLOAT,"depth32float-stencil8":c.FLOAT_32_UNSIGNED_INT_24_8_REV}}(c),this._mapFormatToFormat=function(c){return{r8unorm:c.RED,r8snorm:c.RED,r8uint:c.RED,r8sint:c.RED,r16uint:c.RED,r16sint:c.RED,r16float:c.RED,rg8unorm:c.RG,rg8snorm:c.RG,rg8uint:c.RG,rg8sint:c.RG,r32uint:c.RED,r32sint:c.RED,r32float:c.RED,rg16uint:c.RG,rg16sint:c.RG,rg16float:c.RG,rgba8unorm:c.RGBA,"rgba8unorm-srgb":c.RGBA,rgba8snorm:c.RGBA,rgba8uint:c.RGBA,rgba8sint:c.RGBA,bgra8unorm:c.RGBA,"bgra8unorm-srgb":c.RGBA,rgb9e5ufloat:c.RGB,rgb10a2unorm:c.RGBA,rg11b10ufloat:c.RGB,rg32uint:c.RG,rg32sint:c.RG,rg32float:c.RG,rgba16uint:c.RGBA,rgba16sint:c.RGBA,rgba16float:c.RGBA,rgba32uint:c.RGBA,rgba32sint:c.RGBA,rgba32float:c.RGBA,stencil8:c.STENCIL_INDEX8,depth16unorm:c.DEPTH_COMPONENT,depth24plus:c.DEPTH_COMPONENT,"depth24plus-stencil8":c.DEPTH_STENCIL,depth32float:c.DEPTH_COMPONENT,"depth32float-stencil8":c.DEPTH_STENCIL}}(c),this._mapViewDimensionToGlTarget=function(c){return{"2d":c.TEXTURE_2D,cube:c.TEXTURE_CUBE_MAP,"1d":null,"3d":(null==c?void 0:c.TEXTURE_3D)||null,"2d-array":(null==c?void 0:c.TEXTURE_2D_ARRAY)||null,"cube-array":(null==c?void 0:c.TEXTURE_CUBE_MAP_ARRAY)||null}}(c)),this._managedTextures.removeAll(!0),this._glSamplers=Object.create(null),this._boundSamplers=Object.create(null),this._premultiplyAlpha=!1;for(let e=0;e<16;e++)this.bind(cc.EMPTY,e)}initSource(c){this.bind(c)}bind(c,e=0){const t=c.source;c?(this.bindSource(t,e),this._useSeparateSamplers&&this._bindSampler(t.style,e)):(this.bindSource(null,e),this._useSeparateSamplers&&this._bindSampler(null,e))}bindSource(c,e=0){const t=this._gl;if(c._gcLastUsed=this._renderer.gc.now,this._boundTextures[e]!==c){this._boundTextures[e]=c,this._activateLocation(e),c||(c=cc.EMPTY.source);const i=this.getGlSource(c);t.bindTexture(i.target,i.texture)}}_bindSampler(c,e=0){const t=this._gl;if(!c)return this._boundSamplers[e]=null,void t.bindSampler(e,null);const i=this._getGlSampler(c);this._boundSamplers[e]!==i&&(this._boundSamplers[e]=i,t.bindSampler(e,i))}unbind(c){const e=c.source,t=this._boundTextures,i=this._gl;for(let n=0;n<t.length;n++)if(t[n]===e){this._activateLocation(n);const c=this.getGlSource(e);i.bindTexture(c.target,null),t[n]=null}}_activateLocation(c){this._activeTextureLocation!==c&&(this._activeTextureLocation=c,this._gl.activeTexture(this._gl.TEXTURE0+c))}_initSource(c){const e=this._gl,t=new Ph(e.createTexture());if(t.type=this._mapFormatToType[c.format],t.internalFormat=this._mapFormatToInternalFormat[c.format],t.format=this._mapFormatToFormat[c.format],t.target=this._mapViewDimensionToGlTarget[c.viewDimension],null===t.target)throw new Error(`Unsupported view dimension: ${c.viewDimension} with this webgl version: ${this._renderer.context.webGLVersion}`);if("cube"===c.uploadMethodId&&(t.target=e.TEXTURE_CUBE_MAP),c.autoGenerateMipmaps&&(this._renderer.context.supports.nonPowOf2mipmaps||c.isPowerOfTwo)){const e=Math.max(c.width,c.height);c.mipLevelCount=Math.floor(Math.log2(e))+1}c._gpuData[this._renderer.uid]=t;return this._managedTextures.add(c)&&(c.on("update",this.onSourceUpdate,this),c.on("resize",this.onSourceUpdate,this),c.on("styleChange",this.onStyleChange,this),c.on("updateMipmaps",this.onUpdateMipmaps,this)),this.onSourceUpdate(c),this.updateStyle(c,!1),t}onStyleChange(c){this.updateStyle(c,!1)}updateStyle(c,e){const t=this._gl,i=this.getGlSource(c);t.bindTexture(i.target,i.texture),this._boundTextures[this._activeTextureLocation]=c,Vh(c.style,t,c.mipLevelCount>1,this._renderer.context.extensions.anisotropicFiltering,"texParameteri",i.target,!this._renderer.context.supports.nonPowOf2wrapping&&!c.isPowerOfTwo,e)}onSourceUnload(c,e=!1){const t=c._gpuData[this._renderer.uid];t&&(e||(this.unbind(c),this._gl.deleteTexture(t.texture)),c.off("update",this.onSourceUpdate,this),c.off("resize",this.onSourceUpdate,this),c.off("styleChange",this.onStyleChange,this),c.off("updateMipmaps",this.onUpdateMipmaps,this))}onSourceUpdate(c){const e=this._gl,t=this.getGlSource(c);e.bindTexture(t.target,t.texture),this._boundTextures[this._activeTextureLocation]=c;const i="premultiply-alpha-on-upload"===c.alphaMode;if(this._premultiplyAlpha!==i&&(this._premultiplyAlpha=i,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i)),this._uploads[c.uploadMethodId])this._uploads[c.uploadMethodId].upload(c,t,e,this._renderer.context.webGLVersion);else if(t.target===e.TEXTURE_2D)this._initEmptyTexture2D(t,c);else if(t.target===e.TEXTURE_2D_ARRAY)this._initEmptyTexture2DArray(t,c);else{if(t.target!==e.TEXTURE_CUBE_MAP)throw new Error("[GlTextureSystem] Unsupported texture target for empty allocation.");this._initEmptyTextureCube(t,c)}this._applyMipRange(t,c),c.autoGenerateMipmaps&&c.mipLevelCount>1&&this.onUpdateMipmaps(c,!1)}onUpdateMipmaps(c,e=!0){e&&this.bindSource(c,0);const t=this.getGlSource(c);this._gl.generateMipmap(t.target)}_initEmptyTexture2D(c,e){const t=this._gl;t.texImage2D(t.TEXTURE_2D,0,c.internalFormat,e.pixelWidth,e.pixelHeight,0,c.format,c.type,null);let i=Math.max(e.pixelWidth>>1,1),n=Math.max(e.pixelHeight>>1,1);for(let r=1;r<e.mipLevelCount;r++)t.texImage2D(t.TEXTURE_2D,r,c.internalFormat,i,n,0,c.format,c.type,null),i=Math.max(i>>1,1),n=Math.max(n>>1,1)}_initEmptyTexture2DArray(c,e){if(2!==this._renderer.context.webGLVersion)throw new Error("[GlTextureSystem] TEXTURE_2D_ARRAY requires WebGL2.");const t=this._gl,i=Math.max(0|e.arrayLayerCount,1);t.texImage3D(t.TEXTURE_2D_ARRAY,0,c.internalFormat,e.pixelWidth,e.pixelHeight,i,0,c.format,c.type,null);let n=Math.max(e.pixelWidth>>1,1),r=Math.max(e.pixelHeight>>1,1);for(let s=1;s<e.mipLevelCount;s++)t.texImage3D(t.TEXTURE_2D_ARRAY,s,c.internalFormat,n,r,i,0,c.format,c.type,null),n=Math.max(n>>1,1),r=Math.max(r>>1,1)}_initEmptyTextureCube(c,e){const t=this._gl;for(let r=0;r<6;r++)t.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+r,0,c.internalFormat,e.pixelWidth,e.pixelHeight,0,c.format,c.type,null);let i=Math.max(e.pixelWidth>>1,1),n=Math.max(e.pixelHeight>>1,1);for(let r=1;r<e.mipLevelCount;r++){for(let e=0;e<6;e++)t.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,r,c.internalFormat,i,n,0,c.format,c.type,null);i=Math.max(i>>1,1),n=Math.max(n>>1,1)}}_applyMipRange(c,e){if(2!==this._renderer.context.webGLVersion)return;const t=this._gl,i=Math.max((0|e.mipLevelCount)-1,0);t.texParameteri(c.target,t.TEXTURE_BASE_LEVEL,0),t.texParameteri(c.target,t.TEXTURE_MAX_LEVEL,i)}_initSampler(c){const e=this._gl,t=this._gl.createSampler();return this._glSamplers[c._resourceId]=t,Vh(c,e,this._boundTextures[this._activeTextureLocation].mipLevelCount>1,this._renderer.context.extensions.anisotropicFiltering,"samplerParameteri",t,!1,!0),this._glSamplers[c._resourceId]}_getGlSampler(c){return this._glSamplers[c._resourceId]||this._initSampler(c)}getGlSource(c){return c._gcLastUsed=this._renderer.gc.now,c._gpuData[this._renderer.uid]||this._initSource(c)}generateCanvas(c){const{pixels:e,width:t,height:i}=this.getPixels(c),n=Fe.get().createCanvas();n.width=t,n.height=i;const r=n.getContext("2d");if(r){const c=r.createImageData(t,i);c.data.set(e),r.putImageData(c,0,0)}return n}getPixels(c){const e=c.source.resolution,t=c.frame,i=Math.max(Math.round(t.width*e),1),n=Math.max(Math.round(t.height*e),1),r=new Uint8Array(4*i*n),s=this._renderer,a=s.renderTarget.getRenderTarget(c),o=s.renderTarget.getGpuRenderTarget(a),f=s.gl;return f.bindFramebuffer(f.FRAMEBUFFER,o.resolveTargetFramebuffer),f.readPixels(Math.round(t.x*e),Math.round(t.y*e),i,n,f.RGBA,f.UNSIGNED_BYTE,r),{pixels:new Uint8ClampedArray(r.buffer),width:i,height:n}}destroy(){this._managedTextures.destroy(),this._glSamplers=null,this._boundTextures=null,this._boundSamplers=null,this._mapFormatToInternalFormat=null,this._mapFormatToType=null,this._mapFormatToFormat=null,this._uploads=null,this._renderer=null}resetState(){this._activeTextureLocation=-1,this._boundTextures.fill(cc.EMPTY.source),this._boundSamplers=Object.create(null);const c=this._gl;this._premultiplyAlpha=!1,c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this._premultiplyAlpha)}}Nh.extension={type:[s.WebGLSystem],name:"texture"};class Wh{contextChange(c){const e=new ei({uColor:{value:new Float32Array([1,1,1,1]),type:"vec4<f32>"},uTransformMatrix:{value:new w,type:"mat3x3<f32>"},uRound:{value:0,type:"f32"}}),t=c.limits.maxBatchableTextures,i=Ir({name:"graphics",bits:[Dr,Nr(t),Go,Hr]});this.shader=new ni({glProgram:i,resources:{localUniforms:e,batchSamplers:Yr(t)}})}execute(c,e){const t=e.context,i=t.customShader||this.shader,n=c.renderer,r=n.graphicsContext,{batcher:s,instructions:a}=r.getContextRenderData(t);i.groups[0]=n.globalUniforms.bindGroup,n.state.set(c.state),n.shader.bind(i),n.geometry.bind(s.geometry,i.glProgram);const o=a.instructions;for(let f=0;f<a.instructionSize;f++){const c=o[f];if(c.size){for(let e=0;e<c.textures.count;e++)n.texture.bind(c.textures.textures[e],e);n.geometry.draw(c.topology,c.size,c.start)}}}destroy(){this.shader.destroy(!0),this.shader=null}}Wh.extension={type:[s.WebGLPipesAdaptor],name:"graphics"};class Hh{init(){const c=Ir({name:"mesh",bits:[Go,il,Hr]});this._shader=new ni({glProgram:c,resources:{uTexture:cc.EMPTY.source,textureUniforms:{uTextureMatrix:{type:"mat3x3<f32>",value:new w}}}})}execute(c,e){const t=c.renderer;let i=e._shader;if(i){if(!i.glProgram)return void Bc("Mesh shader has no glProgram",e.shader)}else{i=this._shader;const c=e.texture,t=c.source;i.resources.uTexture=t,i.resources.uSampler=t.style,i.resources.textureUniforms.uniforms.uTextureMatrix=c.textureMatrix.mapCoord}i.groups[100]=t.globalUniforms.bindGroup,i.groups[101]=c.localUniformsBindGroup,t.encoder.draw({geometry:e._geometry,shader:i,state:e.state})}destroy(){this._shader.destroy(!0),this._shader=null}}Hh.extension={type:[s.WebGLPipesAdaptor],name:"mesh"};const jh=[...ud,rh,Nd,Rd,jd,Md,Nh,ah,Gd,Ch,xh,Hd,Th,Zd,Wd],Yh=[...pd],Xh=[Qf,Hh,Wh],Zh=[],qh=[],Kh=[];f.handleByNamedList(s.WebGLSystem,Zh),f.handleByNamedList(s.WebGLPipes,qh),f.handleByNamedList(s.WebGLPipesAdaptor,Kh),f.add(...jh,...Yh,...Xh);const Qh=Object.freeze(Object.defineProperty({__proto__:null,WebGLRenderer:class extends Yi{constructor(){super({name:"webgl",type:ii.WEBGL,systems:Zh,renderPipes:qh,renderPipeAdaptors:Kh})}}},Symbol.toStringTag,{value:"Module"}));class Jh{constructor(c){this._hash=Object.create(null),this._renderer=c}contextChange(c){this._gpu=c}getBindGroup(c,e,t){c._updateKey();return this._hash[c._key]||this._createBindGroup(c,e,t)}_createBindGroup(c,e,t){var i;const n=this._gpu.device,r=e.layout[t],s=[],a=this._renderer;for(const l in r){const e=null!=(i=c.resources[l])?i:c.resources[r[l]];let t;if("uniformGroup"===e._resourceType){const c=e;a.ubo.updateUniformGroup(c);const i=c.buffer;t={buffer:a.buffer.getGPUBuffer(i),offset:0,size:i.descriptor.size}}else if("buffer"===e._resourceType){const c=e;t={buffer:a.buffer.getGPUBuffer(c),offset:0,size:c.descriptor.size}}else if("bufferResource"===e._resourceType){const c=e;t={buffer:a.buffer.getGPUBuffer(c.buffer),offset:c.offset,size:c.size}}else if("textureSampler"===e._resourceType){const c=e;t=a.texture.getGpuSampler(c)}else if("textureSource"===e._resourceType){const c=e;t=a.texture.getTextureView(c)}s.push({binding:r[l],resource:t})}const o=a.shader.getProgramData(e).bindGroups[t],f=n.createBindGroup({layout:o,entries:s});return this._hash[c._key]=f,f}destroy(){this._hash=null,this._renderer=null}}Jh.extension={type:[s.WebGPUSystem],name:"bindGroup"};class $h{constructor(c){this.gpuBuffer=c}destroy(){this.gpuBuffer.destroy(),this.gpuBuffer=null}}class cu{constructor(c){this._renderer=c,this._managedBuffers=new Qr({renderer:c,type:"resource",onUnload:this.onBufferUnload.bind(this),name:"gpuBuffer"})}contextChange(c){this._gpu=c}getGPUBuffer(c){var e;return c._gcLastUsed=this._renderer.gc.now,(null==(e=c._gpuData[this._renderer.uid])?void 0:e.gpuBuffer)||this.createGPUBuffer(c)}updateBuffer(c){const e=this.getGPUBuffer(c),t=c.data;return c._updateID&&t&&(c._updateID=0,this._gpu.device.queue.writeBuffer(e,0,t.buffer,0,(c._updateSize||t.byteLength)+3&-4)),e}destroyAll(){this._managedBuffers.removeAll()}onBufferUnload(c){c.off("update",this.updateBuffer,this),c.off("change",this.onBufferChange,this)}createGPUBuffer(c){const e=this._gpu.device.createBuffer(c.descriptor);return c._updateID=0,c._resourceId=L("resource"),c.data&&(Xn(c.data.buffer,e.getMappedRange(),c.data.byteOffset,c.data.byteLength),e.unmap()),c._gpuData[this._renderer.uid]=new $h(e),this._managedBuffers.add(c)&&(c.on("update",this.updateBuffer,this),c.on("change",this.onBufferChange,this)),e}onBufferChange(c){this._managedBuffers.remove(c),c._updateID=0,this.createGPUBuffer(c)}destroy(){this._managedBuffers.destroy(),this._renderer=null,this._gpu=null}}cu.extension={type:[s.WebGPUSystem],name:"buffer"};class eu{constructor({minUniformOffsetAlignment:c}){this._minUniformOffsetAlignment=256,this.byteIndex=0,this._minUniformOffsetAlignment=c,this.data=new Float32Array(65535)}clear(){this.byteIndex=0}addEmptyGroup(c){if(c>this._minUniformOffsetAlignment/4)throw new Error("UniformBufferBatch: array is too large: "+4*c);const e=this.byteIndex;let t=e+4*c;if(t=Math.ceil(t/this._minUniformOffsetAlignment)*this._minUniformOffsetAlignment,t>4*this.data.length)throw new Error("UniformBufferBatch: ubo batch got too big");return this.byteIndex=t,e}addGroup(c){const e=this.addEmptyGroup(c.length);for(let t=0;t<c.length;t++)this.data[e/4+t]=c[t];return e}destroy(){this.data=null}}class tu{constructor(c){this._colorMaskCache=15,this._renderer=c}setMask(c){this._colorMaskCache!==c&&(this._colorMaskCache=c,this._renderer.pipeline.setColorMask(c))}destroy(){this._renderer=null,this._colorMaskCache=null}}tu.extension={type:[s.WebGPUSystem],name:"colorMask"};class iu{constructor(c){this._renderer=c}init(c){return __async(this,null,function*(){return this._initPromise||(this._initPromise=(c.gpu?Promise.resolve(c.gpu):this._createDeviceAndAdaptor(c)).then(c=>{this.gpu=c,this._renderer.runners.contextChange.emit(this.gpu)})),this._initPromise})}contextChange(c){this._renderer.gpu=c}_createDeviceAndAdaptor(c){return __async(this,null,function*(){const e=yield Fe.get().getNavigator().gpu.requestAdapter({powerPreference:c.powerPreference,forceFallbackAdapter:c.forceFallbackAdapter}),t=["texture-compression-bc","texture-compression-astc","texture-compression-etc2"].filter(c=>e.features.has(c)),i=yield e.requestDevice({requiredFeatures:t});return{adapter:e,device:i}})}destroy(){this.gpu=null,this._renderer=null}}iu.extension={type:[s.WebGPUSystem],name:"device"},iu.defaultOptions={powerPreference:void 0,forceFallbackAdapter:!1};class nu{constructor(c){this._boundBindGroup=Object.create(null),this._boundVertexBuffer=Object.create(null),this._renderer=c}renderStart(){this.commandFinished=new Promise(c=>{this._resolveCommandFinished=c}),this.commandEncoder=this._renderer.gpu.device.createCommandEncoder()}beginRenderPass(c){this.endRenderPass(),this._clearCache(),this.renderPassEncoder=this.commandEncoder.beginRenderPass(c.descriptor)}endRenderPass(){this.renderPassEncoder&&this.renderPassEncoder.end(),this.renderPassEncoder=null}setViewport(c){this.renderPassEncoder.setViewport(c.x,c.y,c.width,c.height,0,1)}setPipelineFromGeometryProgramAndState(c,e,t,i){const n=this._renderer.pipeline.getPipeline(c,e,t,i);this.setPipeline(n)}setPipeline(c){this._boundPipeline!==c&&(this._boundPipeline=c,this.renderPassEncoder.setPipeline(c))}_setVertexBuffer(c,e){this._boundVertexBuffer[c]!==e&&(this._boundVertexBuffer[c]=e,this.renderPassEncoder.setVertexBuffer(c,this._renderer.buffer.updateBuffer(e)))}_setIndexBuffer(c){if(this._boundIndexBuffer===c)return;this._boundIndexBuffer=c;const e=2===c.data.BYTES_PER_ELEMENT?"uint16":"uint32";this.renderPassEncoder.setIndexBuffer(this._renderer.buffer.updateBuffer(c),e)}resetBindGroup(c){this._boundBindGroup[c]=null}setBindGroup(c,e,t){if(this._boundBindGroup[c]===e)return;this._boundBindGroup[c]=e,e._touch(this._renderer.gc.now,this._renderer.tick);const i=this._renderer.bindGroup.getBindGroup(e,t,c);this.renderPassEncoder.setBindGroup(c,i)}setGeometry(c,e){const t=this._renderer.pipeline.getBufferNamesToBind(c,e);for(const i in t)this._setVertexBuffer(parseInt(i,10),c.attributes[t[i]].buffer);c.indexBuffer&&this._setIndexBuffer(c.indexBuffer)}_setShaderBindGroups(c,e){for(const t in c.groups){const i=c.groups[t];e||this._syncBindGroup(i),this.setBindGroup(t,i,c.gpuProgram)}}_syncBindGroup(c){for(const e in c.resources){const t=c.resources[e];t.isUniformGroup&&this._renderer.ubo.updateUniformGroup(t)}}draw(c){const{geometry:e,shader:t,state:i,topology:n,size:r,start:s,instanceCount:a,skipSync:o}=c;this.setPipelineFromGeometryProgramAndState(e,t.gpuProgram,i,n),this.setGeometry(e,t.gpuProgram),this._setShaderBindGroups(t,o),e.indexBuffer?this.renderPassEncoder.drawIndexed(r||e.indexBuffer.data.length,null!=a?a:e.instanceCount,s||0):this.renderPassEncoder.draw(r||e.getSize(),null!=a?a:e.instanceCount,s||0)}finishRenderPass(){this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null)}postrender(){this.finishRenderPass(),this._gpu.device.queue.submit([this.commandEncoder.finish()]),this._resolveCommandFinished(),this.commandEncoder=null}restoreRenderPass(){const c=this._renderer.renderTarget.adaptor.getDescriptor(this._renderer.renderTarget.renderTarget,!1,[0,0,0,1],this._renderer.renderTarget.mipLevel,this._renderer.renderTarget.layer);this.renderPassEncoder=this.commandEncoder.beginRenderPass(c);const e=this._boundPipeline,t=__spreadValues({},this._boundVertexBuffer),i=this._boundIndexBuffer,n=__spreadValues({},this._boundBindGroup);this._clearCache();const r=this._renderer.renderTarget.viewport;this.renderPassEncoder.setViewport(r.x,r.y,r.width,r.height,0,1),this.setPipeline(e);for(const s in t)this._setVertexBuffer(s,t[s]);for(const s in n)this.setBindGroup(s,n[s],null);this._setIndexBuffer(i)}_clearCache(){for(let c=0;c<16;c++)this._boundBindGroup[c]=null,this._boundVertexBuffer[c]=null;this._boundIndexBuffer=null,this._boundPipeline=null}destroy(){this._renderer=null,this._gpu=null,this._boundBindGroup=null,this._boundVertexBuffer=null,this._boundIndexBuffer=null,this._boundPipeline=null}contextChange(c){this._gpu=c}}nu.extension={type:[s.WebGPUSystem],name:"encoder",priority:1};class ru{constructor(c){this._renderer=c}contextChange(){this.maxTextures=this._renderer.device.gpu.device.limits.maxSampledTexturesPerShaderStage,this.maxBatchableTextures=this.maxTextures}destroy(){}}ru.extension={type:[s.WebGPUSystem],name:"limits"};class su{constructor(c){this._renderTargetStencilState=Object.create(null),this._renderer=c,c.renderTarget.onRenderTargetChange.add(this)}onRenderTargetChange(c){let e=this._renderTargetStencilState[c.uid];e||(e=this._renderTargetStencilState[c.uid]={stencilMode:qn.DISABLED,stencilReference:0}),this._activeRenderTarget=c,this.setStencilMode(e.stencilMode,e.stencilReference)}setStencilMode(c,e){const t=this._renderTargetStencilState[this._activeRenderTarget.uid];t.stencilMode=c,t.stencilReference=e;const i=this._renderer;i.pipeline.setStencilMode(c),i.encoder.renderPassEncoder.setStencilReference(e)}destroy(){this._renderer.renderTarget.onRenderTargetChange.remove(this),this._renderer=null,this._activeRenderTarget=null,this._renderTargetStencilState=null}}su.extension={type:[s.WebGPUSystem],name:"stencil"};const au={i32:{align:4,size:4},u32:{align:4,size:4},f32:{align:4,size:4},f16:{align:2,size:2},"vec2<i32>":{align:8,size:8},"vec2<u32>":{align:8,size:8},"vec2<f32>":{align:8,size:8},"vec2<f16>":{align:4,size:4},"vec3<i32>":{align:16,size:12},"vec3<u32>":{align:16,size:12},"vec3<f32>":{align:16,size:12},"vec3<f16>":{align:8,size:6},"vec4<i32>":{align:16,size:16},"vec4<u32>":{align:16,size:16},"vec4<f32>":{align:16,size:16},"vec4<f16>":{align:8,size:8},"mat2x2<f32>":{align:8,size:16},"mat2x2<f16>":{align:4,size:8},"mat3x2<f32>":{align:8,size:24},"mat3x2<f16>":{align:4,size:12},"mat4x2<f32>":{align:8,size:32},"mat4x2<f16>":{align:4,size:16},"mat2x3<f32>":{align:16,size:32},"mat2x3<f16>":{align:8,size:16},"mat3x3<f32>":{align:16,size:48},"mat3x3<f16>":{align:8,size:24},"mat4x3<f32>":{align:16,size:64},"mat4x3<f16>":{align:8,size:32},"mat2x4<f32>":{align:16,size:32},"mat2x4<f16>":{align:8,size:16},"mat3x4<f32>":{align:16,size:48},"mat3x4<f16>":{align:8,size:24},"mat4x4<f32>":{align:16,size:64},"mat4x4<f16>":{align:8,size:32}};function ou(c){const e=c.map(c=>({data:c,offset:0,size:0}));let t=0;for(let i=0;i<e.length;i++){const c=e[i];let n=au[c.data.type].size;const r=au[c.data.type].align;if(!au[c.data.type])throw new Error(`[Pixi.js] WebGPU UniformBuffer: Unknown type ${c.data.type}`);c.data.size>1&&(n=Math.max(n,r)*c.data.size),t=Math.ceil(t/r)*r,c.size=n,c.offset=t,t+=n}return t=16*Math.ceil(t/16),{uboElements:e,size:t}}function fu(c,e){const{size:t,align:i}=au[c.data.type],n=(i-t)/4,r=c.data.type.indexOf("i32")>=0?"dataInt32":"data";return`\n v = uv.${c.data.name};\n ${0!==e?`offset += ${e};`:""}\n\n arrayOffset = offset;\n\n t = 0;\n\n for(var i=0; i < ${c.data.size*(t/4)}; i++)\n {\n for(var j = 0; j < ${t/4}; j++)\n {\n ${r}[arrayOffset++] = v[t++];\n }\n ${0!==n?`arrayOffset += ${n};`:""}\n }\n `}function lu(c){return $d(c,"uboWgsl",fu,th)}class du extends qd{constructor(){super({createUboElements:ou,generateUboSync:lu})}}du.extension={type:[s.WebGPUSystem],name:"ubo"};const hu=128;class uu{constructor(c){this._bindGroupHash=Object.create(null),this._buffers=[],this._bindGroups=[],this._bufferResources=[],this._renderer=c,this._batchBuffer=new eu({minUniformOffsetAlignment:hu});for(let e=0;e<2;e++){let c=lr.UNIFORM|lr.COPY_DST;0===e&&(c|=lr.COPY_SRC),this._buffers.push(new dr({data:this._batchBuffer.data,usage:c}))}}renderEnd(){this._uploadBindGroups(),this._resetBindGroups()}_resetBindGroups(){this._bindGroupHash=Object.create(null),this._batchBuffer.clear()}getUniformBindGroup(c,e){if(!e&&this._bindGroupHash[c.uid])return this._bindGroupHash[c.uid];this._renderer.ubo.ensureUniformGroup(c);const t=c.buffer.data,i=this._batchBuffer.addEmptyGroup(t.length);return this._renderer.ubo.syncUniformGroup(c,this._batchBuffer.data,i/4),this._bindGroupHash[c.uid]=this._getBindGroup(i/hu),this._bindGroupHash[c.uid]}getUboResource(c){this._renderer.ubo.updateUniformGroup(c);const e=c.buffer.data,t=this._batchBuffer.addGroup(e);return this._getBufferResource(t/hu)}getArrayBindGroup(c){const e=this._batchBuffer.addGroup(c);return this._getBindGroup(e/hu)}getArrayBufferResource(c){const e=this._batchBuffer.addGroup(c)/hu;return this._getBufferResource(e)}_getBufferResource(c){if(!this._bufferResources[c]){const e=this._buffers[c%2];this._bufferResources[c]=new oh({buffer:e,offset:256*(c/2|0),size:hu})}return this._bufferResources[c]}_getBindGroup(c){if(!this._bindGroups[c]){const e=new ti({0:this._getBufferResource(c)});this._bindGroups[c]=e}return this._bindGroups[c]}_uploadBindGroups(){const c=this._renderer.buffer,e=this._buffers[0];e.update(this._batchBuffer.byteIndex),c.updateBuffer(e);const t=this._renderer.gpu.device.createCommandEncoder();for(let i=1;i<this._buffers.length;i++){const n=this._buffers[i];t.copyBufferToBuffer(c.getGPUBuffer(e),hu,c.getGPUBuffer(n),0,this._batchBuffer.byteIndex)}this._renderer.gpu.device.queue.submit([t.finish()])}destroy(){var c;for(let e=0;e<this._bindGroups.length;e++)null==(c=this._bindGroups[e])||c.destroy();this._bindGroups=null,this._bindGroupHash=null;for(let e=0;e<this._buffers.length;e++)this._buffers[e].destroy();this._buffers=null;for(let e=0;e<this._bufferResources.length;e++)this._bufferResources[e].destroy();this._bufferResources=null,this._batchBuffer.destroy(),this._renderer=null}}uu.extension={type:[s.WebGPUPipes],name:"uniformBatch"};const pu={"point-list":0,"line-list":1,"line-strip":2,"triangle-list":3,"triangle-strip":4};class gu{constructor(c){this._moduleCache=Object.create(null),this._bufferLayoutsCache=Object.create(null),this._bindingNamesCache=Object.create(null),this._pipeCache=Object.create(null),this._pipeStateCaches=Object.create(null),this._colorMask=15,this._multisampleCount=1,this._colorTargetCount=1,this._renderer=c}contextChange(c){this._gpu=c,this.setStencilMode(qn.DISABLED),this._updatePipeHash()}setMultisampleCount(c){this._multisampleCount!==c&&(this._multisampleCount=c,this._updatePipeHash())}setRenderTarget(c){this._multisampleCount=c.msaaSamples,this._depthStencilAttachment=c.descriptor.depthStencilAttachment?1:0,this._colorTargetCount=c.colorTargetCount,this._updatePipeHash()}setColorMask(c){this._colorMask!==c&&(this._colorMask=c,this._updatePipeHash())}setStencilMode(c){this._stencilMode!==c&&(this._stencilMode=c,this._stencilState=Xd[c],this._updatePipeHash())}setPipeline(c,e,t,i){const n=this.getPipeline(c,e,t);i.setPipeline(n)}getPipeline(c,e,t,i){c._layoutKey||(kd(c,e.attributeData),this._generateBufferKey(c)),i||(i=c.topology);const n=function(c,e,t,i,n){return c<<24|e<<16|t<<10|i<<5|n}(c._layoutKey,e._layoutKey,t.data,t._blendModeId,pu[i]);return this._pipeCache[n]||(this._pipeCache[n]=this._createPipeline(c,e,t,i)),this._pipeCache[n]}_createPipeline(c,e,t,i){const n=this._gpu.device,r=this._createVertexBufferLayouts(c,e),s=this._renderer.state.getColorTargets(t,this._colorTargetCount),a=this._stencilMode===qn.RENDERING_MASK_ADD?0:this._colorMask;for(let l=0;l<s.length;l++)s[l].writeMask=a;const o=this._renderer.shader.getProgramData(e).pipeline,f={vertex:{module:this._getModule(e.vertex.source),entryPoint:e.vertex.entryPoint,buffers:r},fragment:{module:this._getModule(e.fragment.source),entryPoint:e.fragment.entryPoint,targets:s},primitive:{topology:i,cullMode:t.cullMode},layout:o,multisample:{count:this._multisampleCount},label:"PIXI Pipeline"};this._depthStencilAttachment&&(f.depthStencil=__spreadProps(__spreadValues({},this._stencilState),{format:"depth24plus-stencil8",depthWriteEnabled:t.depthTest,depthCompare:t.depthTest?"less":"always"}));return n.createRenderPipeline(f)}_getModule(c){return this._moduleCache[c]||this._createModule(c)}_createModule(c){const e=this._gpu.device;return this._moduleCache[c]=e.createShaderModule({code:c}),this._moduleCache[c]}_generateBufferKey(c){const e=[];let t=0;const i=Object.keys(c.attributes).sort();for(let r=0;r<i.length;r++){const n=c.attributes[i[r]];e[t++]=n.offset,e[t++]=n.format,e[t++]=n.stride,e[t++]=n.instance}const n=e.join("|");return c._layoutKey=kt(n,"geometry"),c._layoutKey}_generateAttributeLocationsKey(c){const e=[];let t=0;const i=Object.keys(c.attributeData).sort();for(let r=0;r<i.length;r++){const n=c.attributeData[i[r]];e[t++]=n.location}const n=e.join("|");return c._attributeLocationsKey=kt(n,"programAttributes"),c._attributeLocationsKey}getBufferNamesToBind(c,e){const t=c._layoutKey<<16|e._attributeLocationsKey;if(this._bindingNamesCache[t])return this._bindingNamesCache[t];const i=this._createVertexBufferLayouts(c,e),n=Object.create(null),r=e.attributeData;for(let s=0;s<i.length;s++){const c=Object.values(i[s].attributes)[0].shaderLocation;for(const e in r)if(r[e].location===c){n[s]=e;break}}return this._bindingNamesCache[t]=n,n}_createVertexBufferLayouts(c,e){e._attributeLocationsKey||this._generateAttributeLocationsKey(e);const t=c._layoutKey<<16|e._attributeLocationsKey;if(this._bufferLayoutsCache[t])return this._bufferLayoutsCache[t];const i=[];return c.buffers.forEach(t=>{var n;const r={arrayStride:0,stepMode:"vertex",attributes:[]},s=r.attributes;for(const i in e.attributeData){const a=c.attributes[i];1!==(null!=(n=a.divisor)?n:1)&&Bc(`Attribute ${i} has an invalid divisor value of '${a.divisor}'. WebGPU only supports a divisor value of 1`),a.buffer===t&&(r.arrayStride=a.stride,r.stepMode=a.instance?"instance":"vertex",s.push({shaderLocation:e.attributeData[i].location,offset:a.offset,format:a.format}))}s.length&&i.push(r)}),this._bufferLayoutsCache[t]=i,i}_updatePipeHash(){const c=(e=this._stencilMode,t=this._multisampleCount,i=this._colorMask,n=this._depthStencilAttachment,r=this._colorTargetCount,i<<8|e<<5|n<<3|r<<1|t);var e,t,i,n,r;this._pipeStateCaches[c]||(this._pipeStateCaches[c]=Object.create(null)),this._pipeCache=this._pipeStateCaches[c]}destroy(){this._renderer=null,this._bufferLayoutsCache=null}}gu.extension={type:[s.WebGPUSystem],name:"pipeline"};class mu{constructor(){this.contexts=[],this.msaaTextures=[],this.msaaSamples=1}}class bu{init(c,e){this._renderer=c,this._renderTargetSystem=e}copyToTexture(c,e,t,i,n){const r=this._renderer,s=this._getGpuColorTexture(c),a=r.texture.getGpuSource(e.source);return r.encoder.commandEncoder.copyTextureToTexture({texture:s,origin:t},{texture:a,origin:n},i),e}startRenderPass(c,e=!0,t,i,n=0,r=0){var s,a;const o=this._renderTargetSystem.getGpuRenderTarget(c);if(0!==r&&(null==(s=o.msaaTextures)?void 0:s.length))throw new Error("[RenderTargetSystem] Rendering to array layers is not supported with MSAA render targets.");if(n>0&&(null==(a=o.msaaTextures)?void 0:a.length))throw new Error("[RenderTargetSystem] Rendering to mip levels is not supported with MSAA render targets.");const f=this.getDescriptor(c,e,t,n,r);o.descriptor=f,this._renderer.pipeline.setRenderTarget(o),this._renderer.encoder.beginRenderPass(o),this._renderer.encoder.setViewport(i)}finishRenderPass(){this._renderer.encoder.endRenderPass()}_getGpuColorTexture(c){const e=this._renderTargetSystem.getGpuRenderTarget(c);return e.contexts[0]?e.contexts[0].getCurrentTexture():this._renderer.texture.getGpuSource(c.colorTextures[0].source)}getDescriptor(c,e,t,i=0,n=0){"boolean"==typeof e&&(e=e?Ui.ALL:Ui.NONE);const r=this._renderTargetSystem,s=r.getGpuRenderTarget(c),a=c.colorTextures.map((c,a)=>{const o=s.contexts[a];let f,l;if(o){if(0!==n)throw new Error("[RenderTargetSystem] Rendering to array layers is not supported for canvas targets.");f=o.getCurrentTexture().createView()}else f=this._renderer.texture.getGpuSource(c).createView({dimension:"2d",baseMipLevel:i,mipLevelCount:1,baseArrayLayer:n,arrayLayerCount:1});s.msaaTextures[a]&&(l=f,f=this._renderer.texture.getTextureView(s.msaaTextures[a]));const d=e&Ui.COLOR?"clear":"load";return null!=t||(t=r.defaultClearColor),{view:f,resolveTarget:l,clearValue:t,storeOp:"store",loadOp:d}});let o;if(!c.stencil&&!c.depth||c.depthStencilTexture||(c.ensureDepthStencilTexture(),c.depthStencilTexture.source.sampleCount=s.msaa?4:1),c.depthStencilTexture){const t=e&Ui.STENCIL?"clear":"load",r=e&Ui.DEPTH?"clear":"load";o={view:this._renderer.texture.getGpuSource(c.depthStencilTexture.source).createView({dimension:"2d",baseMipLevel:i,mipLevelCount:1,baseArrayLayer:n,arrayLayerCount:1}),stencilStoreOp:"store",stencilLoadOp:t,depthClearValue:1,depthLoadOp:r,depthStoreOp:"store"}}return{colorAttachments:a,depthStencilAttachment:o}}clear(c,e=!0,t,i,n=0,r=0){if(!e)return;const{gpu:s,encoder:a}=this._renderer,o=s.device;if(null===a.commandEncoder){const s=o.createCommandEncoder(),a=this.getDescriptor(c,e,t,n,r),f=s.beginRenderPass(a);f.setViewport(i.x,i.y,i.width,i.height,0,1),f.end();const l=s.finish();o.queue.submit([l])}else this.startRenderPass(c,e,t,i,n,r)}initGpuRenderTarget(c){c.isRoot=!0;const e=new mu;return e.colorTargetCount=c.colorTextures.length,c.colorTextures.forEach((c,t)=>{if(c instanceof Ie){const n=c.resource.getContext("webgpu"),r=c.transparent?"premultiplied":"opaque";try{n.configure({device:this._renderer.gpu.device,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC,format:"bgra8unorm",alphaMode:r})}catch(i){console.error(i)}e.contexts[t]=n}if(e.msaa=c.source.antialias,c.source.antialias){const i=new K({width:0,height:0,sampleCount:4,arrayLayerCount:c.source.arrayLayerCount});e.msaaTextures[t]=i}}),e.msaa&&(e.msaaSamples=4,c.depthStencilTexture&&(c.depthStencilTexture.source.sampleCount=4)),e}destroyGpuRenderTarget(c){c.contexts.forEach(c=>{c.unconfigure()}),c.msaaTextures.forEach(c=>{c.destroy()}),c.msaaTextures.length=0,c.contexts.length=0}ensureDepthStencilTexture(c){const e=this._renderTargetSystem.getGpuRenderTarget(c);c.depthStencilTexture&&e.msaa&&(c.depthStencilTexture.source.sampleCount=4)}resizeGpuRenderTarget(c){const e=this._renderTargetSystem.getGpuRenderTarget(c);e.width=c.width,e.height=c.height,e.msaa&&c.colorTextures.forEach((c,t)=>{const i=e.msaaTextures[t];null==i||i.resize(c.source.width,c.source.height,c.source._resolution)})}}class vu extends gd{constructor(c){super(c),this.adaptor=new bu,this.adaptor.init(c,this)}}vu.extension={type:[s.WebGPUSystem],name:"renderTarget"};class yu{constructor(){this._gpuProgramData=Object.create(null)}contextChange(c){this._gpu=c}getProgramData(c){return this._gpuProgramData[c._layoutKey]||this._createGPUProgramData(c)}_createGPUProgramData(c){const e=this._gpu.device,t=c.gpuLayout.map(c=>e.createBindGroupLayout({entries:c})),i={bindGroupLayouts:t};return this._gpuProgramData[c._layoutKey]={bindGroups:t,pipeline:e.createPipelineLayout(i)},this._gpuProgramData[c._layoutKey]}destroy(){this._gpu=null,this._gpuProgramData=null}}yu.extension={type:[s.WebGPUSystem],name:"shader"};const _u={normal:{alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}},add:{alpha:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"one",dstFactor:"one",operation:"add"}},multiply:{alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"dst",dstFactor:"one-minus-src-alpha",operation:"add"}},screen:{alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"one",dstFactor:"one-minus-src",operation:"add"}},overlay:{alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"one",dstFactor:"one-minus-src",operation:"add"}},none:{alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"zero",dstFactor:"zero",operation:"add"}},"normal-npm":{alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"}},"add-npm":{alpha:{srcFactor:"one",dstFactor:"one",operation:"add"},color:{srcFactor:"src-alpha",dstFactor:"one",operation:"add"}},"screen-npm":{alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"src-alpha",dstFactor:"one-minus-src",operation:"add"}},erase:{alpha:{srcFactor:"zero",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"zero",dstFactor:"one-minus-src",operation:"add"}},min:{alpha:{srcFactor:"one",dstFactor:"one",operation:"min"},color:{srcFactor:"one",dstFactor:"one",operation:"min"}},max:{alpha:{srcFactor:"one",dstFactor:"one",operation:"max"},color:{srcFactor:"one",dstFactor:"one",operation:"max"}}};class xu{constructor(){this.defaultState=new ai,this.defaultState.blend=!0}contextChange(c){this.gpu=c}getColorTargets(c,e){const t=[],i={format:"bgra8unorm",writeMask:0,blend:_u[c.blendMode]||_u.normal};for(let n=0;n<e;n++)t[n]=i;return t}destroy(){this.gpu=null}}xu.extension={type:[s.WebGPUSystem],name:"state"};const Su={type:"image",upload(c,e,t,i=0){const n=c.resource,r=(0|c.pixelWidth)*(0|c.pixelHeight),s=n.byteLength/r;t.device.queue.writeTexture({texture:e,origin:{x:0,y:0,z:i}},n,{offset:0,rowsPerImage:c.pixelHeight,bytesPerRow:c.pixelWidth*s},{width:c.pixelWidth,height:c.pixelHeight,depthOrArrayLayers:1})}},wu={"bc1-rgba-unorm":{blockBytes:8,blockWidth:4,blockHeight:4},"bc2-rgba-unorm":{blockBytes:16,blockWidth:4,blockHeight:4},"bc3-rgba-unorm":{blockBytes:16,blockWidth:4,blockHeight:4},"bc7-rgba-unorm":{blockBytes:16,blockWidth:4,blockHeight:4},"etc1-rgb-unorm":{blockBytes:8,blockWidth:4,blockHeight:4},"etc2-rgba8unorm":{blockBytes:16,blockWidth:4,blockHeight:4},"astc-4x4-unorm":{blockBytes:16,blockWidth:4,blockHeight:4}},Cu={blockBytes:4,blockWidth:1,blockHeight:1},Au={type:"compressed",upload(c,e,t,i=0){let n=c.pixelWidth,r=c.pixelHeight;const s=wu[c.format]||Cu;for(let a=0;a<c.resource.length;a++){const o=c.resource[a],f=Math.ceil(n/s.blockWidth)*s.blockBytes;t.device.queue.writeTexture({texture:e,mipLevel:a,origin:{x:0,y:0,z:i}},o,{offset:0,bytesPerRow:f},{width:Math.ceil(n/s.blockWidth)*s.blockWidth,height:Math.ceil(r/s.blockHeight)*s.blockHeight,depthOrArrayLayers:1}),n=Math.max(n>>1,1),r=Math.max(r>>1,1)}}},Tu=["right","left","top","bottom","front","back"];const Pu={type:"image",upload(c,e,t,i=0){const n=c.resource;if(!n)return;if(globalThis.HTMLImageElement&&n instanceof HTMLImageElement){const e=Fe.get().createCanvas(n.width,n.height);e.getContext("2d").drawImage(n,0,0,n.width,n.height),c.resource=e,Bc("ImageSource: Image element passed, converting to canvas and replacing resource.")}const r=Math.min(e.width,c.resourceWidth||c.pixelWidth),s=Math.min(e.height,c.resourceHeight||c.pixelHeight),a="premultiply-alpha-on-upload"===c.alphaMode;t.device.queue.copyExternalImageToTexture({source:n},{texture:e,origin:{x:0,y:0,z:i},premultipliedAlpha:a},{width:r,height:s})}},Mu={type:"video",upload(c,e,t,i){Pu.upload(c,e,t,i)}};class Eu{constructor(c){this.device=c,this.sampler=c.createSampler({minFilter:"linear"}),this.pipelines={}}_getMipmapPipeline(c){let e=this.pipelines[c];return e||(this.mipmapShaderModule||(this.mipmapShaderModule=this.device.createShaderModule({code:"\n var<private> pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(\n vec2<f32>(-1.0, -1.0), vec2<f32>(-1.0, 3.0), vec2<f32>(3.0, -1.0));\n\n struct VertexOutput {\n @builtin(position) position : vec4<f32>,\n @location(0) texCoord : vec2<f32>,\n };\n\n @vertex\n fn vertexMain(@builtin(vertex_index) vertexIndex : u32) -> VertexOutput {\n var output : VertexOutput;\n output.texCoord = pos[vertexIndex] * vec2<f32>(0.5, -0.5) + vec2<f32>(0.5);\n output.position = vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n return output;\n }\n\n @group(0) @binding(0) var imgSampler : sampler;\n @group(0) @binding(1) var img : texture_2d<f32>;\n\n @fragment\n fn fragmentMain(@location(0) texCoord : vec2<f32>) -> @location(0) vec4<f32> {\n return textureSample(img, imgSampler, texCoord);\n }\n "})),e=this.device.createRenderPipeline({layout:"auto",vertex:{module:this.mipmapShaderModule,entryPoint:"vertexMain"},fragment:{module:this.mipmapShaderModule,entryPoint:"fragmentMain",targets:[{format:c}]}}),this.pipelines[c]=e),e}generateMipmap(c){const e=this._getMipmapPipeline(c.format);if("3d"===c.dimension||"1d"===c.dimension)throw new Error("Generating mipmaps for non-2d textures is currently unsupported!");let t=c;const i=c.depthOrArrayLayers||1,n=c.usage&GPUTextureUsage.RENDER_ATTACHMENT;if(!n){const e={size:{width:Math.ceil(c.width/2),height:Math.ceil(c.height/2),depthOrArrayLayers:i},format:c.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.RENDER_ATTACHMENT,mipLevelCount:c.mipLevelCount-1};t=this.device.createTexture(e)}const r=this.device.createCommandEncoder({}),s=e.getBindGroupLayout(0);for(let a=0;a<i;++a){let i=c.createView({baseMipLevel:0,mipLevelCount:1,dimension:"2d",baseArrayLayer:a,arrayLayerCount:1}),o=n?1:0;for(let n=1;n<c.mipLevelCount;++n){const c=t.createView({baseMipLevel:o++,mipLevelCount:1,dimension:"2d",baseArrayLayer:a,arrayLayerCount:1}),n=r.beginRenderPass({colorAttachments:[{view:c,storeOp:"store",loadOp:"clear",clearValue:{r:0,g:0,b:0,a:0}}]}),f=this.device.createBindGroup({layout:s,entries:[{binding:0,resource:this.sampler},{binding:1,resource:i}]});n.setPipeline(e),n.setBindGroup(0,f),n.draw(3,1,0,0),n.end(),i=c}}if(!n){const e={width:Math.ceil(c.width/2),height:Math.ceil(c.height/2),depthOrArrayLayers:i};for(let i=1;i<c.mipLevelCount;++i)r.copyTextureToTexture({texture:t,mipLevel:i-1},{texture:c,mipLevel:i},e),e.width=Math.ceil(e.width/2),e.height=Math.ceil(e.height/2)}return this.device.queue.submit([r.finish()]),n||t.destroy(),c}}class Ru{constructor(c){this.textureView=null,this.gpuTexture=c}destroy(){this.gpuTexture.destroy(),this.textureView=null,this.gpuTexture=null}}class ku{constructor(c){this._gpuSamplers=Object.create(null),this._bindGroupHash=Object.create(null),this._renderer=c,c.gc.addCollection(this,"_bindGroupHash","hash"),this._managedTextures=new Qr({renderer:c,type:"resource",onUnload:this.onSourceUnload.bind(this),name:"gpuTextureSource"});const e={image:Pu,buffer:Su,video:Mu,compressed:Au};var t;this._uploads=__spreadProps(__spreadValues({},e),{cube:(t=e,{type:"cube",upload(c,e,i){const n=c.faces;for(let r=0;r<Tu.length;r++){const c=n[Tu[r]];(t[c.uploadMethodId]||t.image).upload(c,e,i,r)}}})})}get managedTextures(){return Object.values(this._managedTextures.items)}contextChange(c){this._gpu=c}initSource(c){var e;return(null==(e=c._gpuData[this._renderer.uid])?void 0:e.gpuTexture)||this._initSource(c)}_initSource(c){if(c.autoGenerateMipmaps){const e=Math.max(c.pixelWidth,c.pixelHeight);c.mipLevelCount=Math.floor(Math.log2(e))+1}let e=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST;"compressed"!==c.uploadMethodId&&(e|=GPUTextureUsage.RENDER_ATTACHMENT,e|=GPUTextureUsage.COPY_SRC);const t=wu[c.format]||{blockWidth:1,blockHeight:1},i=Math.ceil(c.pixelWidth/t.blockWidth)*t.blockWidth,n=Math.ceil(c.pixelHeight/t.blockHeight)*t.blockHeight,r={label:c.label,size:{width:i,height:n,depthOrArrayLayers:c.arrayLayerCount},format:c.format,sampleCount:c.sampleCount,mipLevelCount:c.mipLevelCount,dimension:c.dimension,usage:e},s=this._gpu.device.createTexture(r);c._gpuData[this._renderer.uid]=new Ru(s);return this._managedTextures.add(c)&&(c.on("update",this.onSourceUpdate,this),c.on("resize",this.onSourceResize,this),c.on("updateMipmaps",this.onUpdateMipmaps,this)),this.onSourceUpdate(c),s}onSourceUpdate(c){const e=this.getGpuSource(c);e&&(this._uploads[c.uploadMethodId]&&this._uploads[c.uploadMethodId].upload(c,e,this._gpu),c.autoGenerateMipmaps&&c.mipLevelCount>1&&this.onUpdateMipmaps(c))}onUpdateMipmaps(c){this._mipmapGenerator||(this._mipmapGenerator=new Eu(this._gpu.device));const e=this.getGpuSource(c);this._mipmapGenerator.generateMipmap(e)}onSourceUnload(c){c.off("update",this.onSourceUpdate,this),c.off("resize",this.onSourceResize,this),c.off("updateMipmaps",this.onUpdateMipmaps,this)}onSourceResize(c){c._gcLastUsed=this._renderer.gc.now;const e=c._gpuData[this._renderer.uid],t=null==e?void 0:e.gpuTexture;t?t.width===c.pixelWidth&&t.height===c.pixelHeight||(e.destroy(),this._bindGroupHash[c.uid]=null,c._gpuData[this._renderer.uid]=null,this.initSource(c)):this.initSource(c)}_initSampler(c){return this._gpuSamplers[c._resourceId]=this._gpu.device.createSampler(c),this._gpuSamplers[c._resourceId]}getGpuSampler(c){return this._gpuSamplers[c._resourceId]||this._initSampler(c)}getGpuSource(c){var e;return c._gcLastUsed=this._renderer.gc.now,(null==(e=c._gpuData[this._renderer.uid])?void 0:e.gpuTexture)||this.initSource(c)}getTextureBindGroup(c){return this._bindGroupHash[c.uid]||this._createTextureBindGroup(c)}_createTextureBindGroup(c){const e=c.source;return this._bindGroupHash[c.uid]=new ti({0:e,1:e.style,2:new ei({uTextureMatrix:{type:"mat3x3<f32>",value:c.textureMatrix.mapCoord}})}),this._bindGroupHash[c.uid]}getTextureView(c){const e=c.source;e._gcLastUsed=this._renderer.gc.now;let t=e._gpuData[this._renderer.uid];return t||(this.initSource(e),t=e._gpuData[this._renderer.uid]),t.textureView||(t.textureView=t.gpuTexture.createView({dimension:e.viewDimension})),t.textureView}generateCanvas(c){const e=this._renderer,t=e.gpu.device.createCommandEncoder(),i=Fe.get().createCanvas();i.width=c.source.pixelWidth,i.height=c.source.pixelHeight;const n=i.getContext("webgpu");return n.configure({device:e.gpu.device,usage:GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC,format:Fe.get().getNavigator().gpu.getPreferredCanvasFormat(),alphaMode:"premultiplied"}),t.copyTextureToTexture({texture:e.texture.getGpuSource(c.source),origin:{x:0,y:0}},{texture:n.getCurrentTexture()},{width:i.width,height:i.height}),e.gpu.device.queue.submit([t.finish()]),i}getPixels(c){const e=this.generateCanvas(c),t=Qo.getOptimalCanvasAndContext(e.width,e.height),i=t.context;i.drawImage(e,0,0);const{width:n,height:r}=e,s=i.getImageData(0,0,n,r),a=new Uint8ClampedArray(s.data.buffer);return Qo.returnCanvasAndContext(t),{pixels:a,width:n,height:r}}destroy(){this._managedTextures.destroy();for(const c of Object.keys(this._bindGroupHash)){const e=Number(c),t=this._bindGroupHash[e];null==t||t.destroy()}this._renderer=null,this._gpu=null,this._mipmapGenerator=null,this._gpuSamplers=null,this._bindGroupHash=null}}ku.extension={type:[s.WebGPUSystem],name:"texture"};class Fu{constructor(){this._maxTextures=0}contextChange(c){const e=new ei({uTransformMatrix:{value:new w,type:"mat3x3<f32>"},uColor:{value:new Float32Array([1,1,1,1]),type:"vec4<f32>"},uRound:{value:0,type:"f32"}});this._maxTextures=c.limits.maxBatchableTextures;const t=Fr({name:"graphics",bits:[Br,Gr(this._maxTextures),zo,Wr]});this.shader=new ni({gpuProgram:t,resources:{localUniforms:e}})}execute(c,e){const t=e.context,i=t.customShader||this.shader,n=c.renderer,r=n.graphicsContext,{batcher:s,instructions:a}=r.getContextRenderData(t),o=n.encoder;o.setGeometry(s.geometry,i.gpuProgram);const f=n.globalUniforms.bindGroup;o.setBindGroup(0,f,i.gpuProgram);const l=n.renderPipes.uniformBatch.getUniformBindGroup(i.resources.localUniforms,!0);o.setBindGroup(2,l,i.gpuProgram);const d=a.instructions;let h=null;for(let u=0;u<a.instructionSize;u++){const e=d[u];if(e.topology!==h&&(h=e.topology,o.setPipelineFromGeometryProgramAndState(s.geometry,i.gpuProgram,c.state,e.topology)),i.groups[1]=e.bindGroup,!e.gpuBindGroup){const c=e.textures;e.bindGroup=jn(c.textures,c.count,this._maxTextures),e.gpuBindGroup=n.bindGroup.getBindGroup(e.bindGroup,i.gpuProgram,1)}o.setBindGroup(1,e.bindGroup,i.gpuProgram),o.renderPassEncoder.drawIndexed(e.size,1,e.start)}}destroy(){this.shader.destroy(!1),this.shader=null}}Fu.extension={type:[s.WebGPUPipesAdaptor],name:"graphics"};class Iu{init(){const c=Fr({name:"mesh",bits:[Lo,tl,Wr]});this._shader=new ni({gpuProgram:c,resources:{uTexture:cc.EMPTY._source,uSampler:cc.EMPTY._source.style,textureUniforms:{uTextureMatrix:{type:"mat3x3<f32>",value:new w}}}})}execute(c,e){const t=c.renderer;let i=e._shader;if(i){if(!i.gpuProgram)return void Bc("Mesh shader has no gpuProgram",e.shader)}else i=this._shader,i.groups[2]=t.texture.getTextureBindGroup(e.texture);const n=i.gpuProgram;if(n.autoAssignGlobalUniforms&&(i.groups[0]=t.globalUniforms.bindGroup),n.autoAssignLocalUniforms){const e=c.localUniforms;i.groups[1]=t.renderPipes.uniformBatch.getUniformBindGroup(e,!0)}t.encoder.draw({geometry:e._geometry,shader:i,state:e.state})}destroy(){this._shader.destroy(!1),this._shader=null}}Iu.extension={type:[s.WebGPUPipesAdaptor],name:"mesh"};const Bu=[...ud,du,nu,iu,ru,cu,ku,vu,yu,xu,gu,tu,su,Jh],Du=[...pd,uu],Ou=[$f,Iu,Fu],Lu=[],zu=[],Gu=[];f.handleByNamedList(s.WebGPUSystem,Lu),f.handleByNamedList(s.WebGPUPipes,zu),f.handleByNamedList(s.WebGPUPipesAdaptor,Gu),f.add(...Bu,...Du,...Ou);const Uu=Object.freeze(Object.defineProperty({__proto__:null,WebGPURenderer:class extends Yi{constructor(){super({name:"webgpu",type:ii.WEBGPU,systems:Lu,renderPipes:zu,renderPipeAdaptors:Gu})}}},Symbol.toStringTag,{value:"Module"}));const Vu=Object.freeze(Object.defineProperty({__proto__:null,BitmapFont:class extends Hf{constructor(c,e){var t;super();const{textures:i,data:n}=c;Object.keys(n.pages).forEach(c=>{const e=n.pages[parseInt(c,10)],t=i[e.id];this.pages.push({texture:t})}),Object.keys(n.chars).forEach(c=>{var e;const t=n.chars[c],{frame:r,source:s,rotate:a}=i[t.page],o=I.transformRectCoords(t,r,a,new D),f=new cc({frame:o,orig:new D(0,0,t.width,t.height),source:s,rotate:a});this.chars[c]={id:c.codePointAt(0),xOffset:t.xOffset,yOffset:t.yOffset,xAdvance:t.xAdvance,kerning:null!=(e=t.kerning)?e:{},texture:f}}),this.baseRenderedFontSize=n.fontSize,this.baseMeasurementFontSize=n.fontSize,this.fontMetrics={ascent:0,descent:0,fontSize:n.fontSize},this.baseLineOffset=n.baseLineOffset,this.lineHeight=n.lineHeight,this.fontFamily=n.fontFamily,this.distanceField=null!=(t=n.distanceField)?t:{type:"none",range:0},this.url=e}destroy(){super.destroy();for(let c=0;c<this.pages.length;c++){const{texture:e}=this.pages[c];e.destroy(!0)}this.pages=null}static install(c){Zf.install(c)}static uninstall(c){Zf.uninstall(c)}}},Symbol.toStringTag,{value:"Module"}));f.add(l,d);var Nu=(c,e,t=" ")=>{let i=String(c);if(i.length>=e)return i;let n=e-i.length;return t.repeat(Math.ceil(n/t.length)).slice(0,n)+i},Wu=(c,e=1)=>{let t=6;switch(e){case 1:default:t=6;break;case 2:case 3:t=5}let i=Nu(parseInt(c,16).toString(2),8,"0");return parseInt(i.slice(0,t),2)},Hu=(c,e=1)=>((c,e)=>{if((c=>void 0===c)(c)||(c=>null===c)(c))return"";let t=Number(c).toString(2)+e,i=parseInt(t,2);return Nu(i.toString(16),2,"0")})(c,1===e?bp.sweep:vp.sweep),ju=(c,e=2)=>{let t=Number(c).toString(16);return Nu(t,e,"0")},Yu=(c,e)=>Number((e/__pow(10,c)).toFixed(c)),Xu=c=>c>32767?c-65535:c,Zu=(c,e)=>e+(c<<8),qu=(c,e)=>Yu(c,Xu(e)),Ku=(c,e)=>{let t=c;return"string"==typeof c&&(t=parseFloat(c)),Number(t.toFixed(e))*Math.pow(10,e)},Qu=c=>c.map(c=>`${(c>>>4).toString(16)}${(15&c).toString(16)}`).join(""),Ju=c=>{try{let e=c.match(/.{1,2}/g);if(!e||0===e.length)return"";let t=new Uint8Array(e.length),i=0;for(let c=0;c<e.length;c++){let n=parseInt(e[c],16);n>31&&127!==n&&(t[i++]=n)}let n=t.slice(0,i);return Array.from(n).map(c=>String.fromCharCode(c)).join("")}catch(e){return console.error(e),""}},$u=c=>{if(!c)return"";try{let e=c.match(/.{1,2}/g);if(!e)return"";let t=e.filter(c=>{let e=parseInt(c,16);return e>31&&127!==e});return 0===t.length?"":decodeURIComponent("%"+t.join("%"))}catch(e){return console.error("传入的房间名称数据有误",c),""}},cp=c=>{let e,t=[],i=c.length;for(let n=0;n<i;n++)e=c.charCodeAt(n),e>=65536&&e<=1114111?(t.push(e>>18&7|240),t.push(e>>12&63|128),t.push(e>>6&63|128),t.push(63&e|128)):e>=2048&&e<=65535?(t.push(e>>12&15|224),t.push(e>>6&63|128),t.push(63&e|128)):e>=128&&e<=2047?(t.push(e>>6&31|192),t.push(63&e|128)):t.push(255&e);return t},ep=c=>{let e="";for(let t=0;t<c.length;t++){let i=c[t].toString(16);1===i.length&&(i=`0${i}`),e+=i}return e},tp=(c,e)=>{let t=c.length;return c+"0000000000000000000000000000000000000000".slice(0,2*e-t)},ip=c=>{let e=Number(c).toString(2),t=e.length,i="";i=t>=8?e.slice(8):"00000000".slice(0,8-t)+e;let n=i.split("").map(c=>"1"===c?"0":"1").join("");return parseInt(n,2)+1},np=({x:c,y:e},t,i=1)=>{let n=t.x*Math.pow(10,i),r=t.y*Math.pow(10,i);return{hexX:ju((65535+Ku(c,i)-n)%65535,4),hexY:ju((65535+r-Ku(e,i))%65535,4)}},rp=c=>{let e=c.length,t=new Uint8Array(e/2);for(let i=0;i<e;i+=2)t[i>>1]=parseInt(c.slice(i,i+2),16);return t},sp=(c,e=1)=>{let t=[];for(let i=0;i<c.length;i+=2*e){let n=c.slice(i,i+2*e),r=parseInt(n,16);t.push(r)}return t},ap=({chargeX:c,chargeY:e},{originX:t,originY:i})=>{if(c<=0&&e<=0)return null;return{x:c-t,y:e-i}},op=(c,e)=>parseInt((c+e).slice(-8),2).toString(16).padStart(2,"0"),fp=(c,e,t=2)=>parseInt(c.slice(e,e+t),16)||0,lp=(c,e=7)=>Nu(parseInt(c,16).toString(2),e,"0"),dp=c=>{let e=parseInt(c,16);if(e<0){let c=Math.abs(e).toString(2);c=c.padStart(16,"0");let t=c.split("").map(c=>"0"===c?"1":"0").join(""),i=(parseInt(t,2)+1).toString(2).padStart(16,"0");return parseInt(i,2).toString(16).toUpperCase()}return c.substring(4,8)},hp=(c="",e=1)=>{var t,i;let n=(null!=(i=(null!=(t=c.match(/\w{8}/g))?t:[]).map(c=>dp(c)).join("").match(/\w{2}/g))?i:[]).map(c=>{let e=parseInt(c,16);return e>32767?e-65535:e}),r=Zu(n[0],n[1]),s=Zu(n[2],n[3]);return{x:qu(e,r),y:-qu(e,s)}},up=c=>{let e="";for(let i=0;i<c.length;i++){let t=c[i].toString(16);t=1===t.length?`0${t}`:t,e+=t}let t="";for(let i=0;i<e.length;i+=2)t+=String.fromCharCode(parseInt(e.substr(i,2),16));return`data:image/png;base64,${t}`},pp=()=>{let c=(new Date).getTimezoneOffset(),e=Math.floor(Math.abs(c)/60),t=Math.abs(c)%60;return`${c<=0?"+":"-"}${e.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`},gp=c=>{let e=parseInt(c.slice(0,2),16),t=c.slice(0,3===e?52:48),i=2,n=parseInt(t.slice(i,i+4),16);i+=4;let r=1===parseInt(t.slice(i,i+2),16);i+=2;let s=parseInt(t.slice(i,i+4),16);i+=4;let a=parseInt(t.slice(i,i+4),16);i+=4;let o=Yu(1,parseInt(t.slice(i,i+4),16));i+=4;let f=Yu(1,parseInt(t.slice(i,i+4),16));i+=4;let l=Yu(2,parseInt(t.slice(i,i+4),16));i+=4;let d=Yu(1,parseInt(t.slice(i,i+4),16));i+=4;let h,u=Yu(1,parseInt(t.slice(i,i+4),16));3===e&&(i+=4,h=parseInt(t.slice(i,i+4),16)),i+=4;let p=parseInt(t.slice(i,i+8),16);i+=8;let g=parseInt(t.slice(i,i+4),16);return{mapHeaderStr:t,version:e,id:n,mapStable:r,mapWidth:s,mapHeight:a,originX:o,originY:f,mapResolution:l,chargeX:d,chargeY:u,chargeDirection:h,chargePositionTransformed:ap({chargeX:d,chargeY:u},{originX:o,originY:f}),dataLengthBeforeCompress:p,dataLengthAfterCompress:g}},mp={"00":"00","01":"f1",10:"f2",11:"ff"},bp={sweep:"00",barrier:"01",battery:"10",unknown:"11"},vp={sweep:"111",barrier:"001",carpet:"010",unknown:"000"},yp={0:{typeMap:bp},1:{typeMap:bp},2:{typeMap:vp},3:{typeMap:vp}},_p={NO_ROOM_DATA:"NO_ROOM_DATA",ROOM_GAP:"ROOM_GAP",OBSTACLE_ROOM:"OBSTACLE_ROOM",UNKNOWN_ROOM:"UNKNOWN_ROOM",VERSION0_ROOM:"VERSION0_ROOM"};Math.imul||(Math.imul=function(c,e){let t=65535&c,i=65535&e;return t*i+((c>>>16)*i+t*(e>>>16)<<16)|0});var xp=(c,e=1048576)=>{let t=c instanceof Uint8Array?c:new Uint8Array(c),i=1073741824,n=e;if(e>i)return n=i,console.warn("uncompress所需空间过大,强制设定为1G",e),null;let r=new Uint8Array(n),s=function(c,e,t,i){for(var n=t=t||0,r=i=i||c.length-t,s=0;n<r;){let t=c[n++],i=t>>4;if(i>0){for(var a=i+240;255===a;)i+=a=c[n++];for(var o=n+i;n<o;)e[s++]=c[n++];if(n===r)return s}let f=c[n++]|c[n++]<<8;if(0===f||f>s)return-(n-2);let l=15&t;for(a=l+240;255===a;)l+=a=c[n++];let d=s-f;for(o=s+l+4;s<o;)e[s++]=e[d++]}return s}(t,r);return r.subarray(0,s)},Sp="0123456789abcdef";function wp(c){return Sp[c>>4]+Sp[15&c]}function Cp(c,e){return mp[(c>>e&3).toString(2).padStart(2,"0")]}var Ap=(c,e=1)=>{if(!c||"string"==typeof c&&!c)return[];let t="string"==typeof c?rp(c):c;if(t.length<2)return[];let i=t[1],n=2,r=[];for(let s=0;s<i&&!(n+26+20+1>t.length);s++){let c=t[n]<<8|t[n+1],i=t[n+2]<<8|t[n+3],s=t[n+4]<<8|t[n+5],a=t[n+6]<<8|t[n+7],o=t[n+8],f=1===t[n+9],l=1===t[n+10],d=t[n+11],h=t[n+12],u=1===t[n+13],p=t[n+14],g=t.subarray(n+15,n+26),m="";for(let e=0;e<g.length;e++)m+=wp(g[e]);let b=t[n+26],v=n+26+1,y="";if(b>0&&v+b<=t.length){let c=t.subarray(v,v+b),e="";for(let t=0;t<c.length;t++)e+=wp(c[t]);y=$u(e)}let _=47+4*t[n+26+20],x=47,S=t.subarray(n,n+x),w="";for(let e=0;e<S.length;e++)w+=wp(S[e]);let C=op(c.toString(2),yp[e].typeMap.sweep);r.push({roomId:c,pointHex:C,name:y,order:i,suction:d,cistern:h,colorOrder:o,sweepTimes:s,mopTimes:a,sweepForbidden:f,mopForbidden:l,yMop:u,floorMaterial:p,originStr:w,reservedStr:m}),n+=_}return r};function Tp(c,e,t,i){let n=3&c,r=c>>2&63;if(1===n&&t.push(e),0===n){let c=r;60===r?c=_p.NO_ROOM_DATA:61===r?c=_p.ROOM_GAP:62===r?c=_p.OBSTACLE_ROOM:63===r&&(c=_p.UNKNOWN_ROOM),i.has(c)||i.set(c,[]),i.get(c).push(e)}}function Pp(c,e,t,i,n){var r;let s=7&c,a=c>>3&31;if(1===s?t.push(e):2===s&&i.push(e),2===s||7===s){let c=null!=(r=function(c){switch(c){case 28:return _p.NO_ROOM_DATA;case 29:return _p.ROOM_GAP;case 30:return _p.OBSTACLE_ROOM;case 31:return _p.UNKNOWN_ROOM;default:return}}(a))?r:a;n.has(c)||n.set(c,[]),n.get(c).push(e)}}var Mp=(c,e,t={})=>{let{mapWidth:i,mapHeight:n,dataLengthAfterCompress:r,dataLengthBeforeCompress:s,mapHeaderStr:a,version:o}=e,f=a.length,{pointsStructured:l=!1}=t,d=!l,h=l,u="",p="",g=i*n,m=[],b=[],v=new Map,y=null;if(r>0){let e=Math.max(1048576,10*g),t=s;s>e&&(console.warn(`<ray-robot-protocol> abnormal dataLengthBeforeCompress: ${s}, capping for safety`),t=e);let a=4*t,l=rp(c.slice(f,f+2*r)),_=xp(l,a);if(!_)return{mapRooms:[],mapPointsStr:"",parsed:{obstacles:new Uint32Array,carpet:new Uint32Array,rooms:new Map,width:i,height:n,totalPixels:g}};let x=_;if(0===o){let c=[];h&&v.set(_p.VERSION0_ROOM,[]);let e=h?v.get(_p.VERSION0_ROOM):null;for(let t=0;t<x.length;t++){let i=x[t];for(let n=0;n<4;n++){let r=6-2*n,s=4*t+n;if(s>=g)break;let a=i>>r&3;if(d&&c.push(Cp(i,r)),h)switch(a){case 0:e.push(s);break;case 1:m.push(s)}}}d&&(u=c.join("").slice(0,2*g)),p=""}else{let c=x.subarray(0,g),e=[];for(let r=0;r<c.length;r++){let t=c[r];d&&e.push(wp(t)),h&&(1===o?Tp(t,r,m,v):Pp(t,r,m,b,v))}d&&(u=e.join(""));let t=x.subarray(g),i=102400,n=t.length>i?t.subarray(0,i):t;y=Ap(n,o)}}else if(0===o){let e=[],t=c.slice(f).match(/.{2}/g)||[];h&&v.set(_p.VERSION0_ROOM,[]);let i=h?v.get(_p.VERSION0_ROOM):null;for(let c=0;c<t.length;c++){let n=parseInt(t[c],16);for(let t=0;t<4;t++){let r=6-2*t,s=4*c+t;if(s>=g)break;let a=n>>r&3;if(d&&e.push(Cp(n,r)),h)switch(a){case 0:i.push(s);break;case 1:m.push(s)}}}d&&(u=e.join("")),p=""}else{let e=c.slice(f,f+2*g),t=[];for(let c=0;c<g;c++){let i=e.slice(2*c,2*c+2);if(d&&t.push(i),h){let e=parseInt(i,16);1===o?Tp(e,c,m,v):Pp(e,c,m,b,v)}}d&&(u=t.join("")),p=c.slice(f+2*g)}d&&(u=u.toLowerCase(),i*n*2>u.length&&(u=u.padStart(i*n*2,"f")),i*n*2<u.length&&(u=u.slice(u.length-i*n*2)));let _=y||Ap(p,o),x=new Map;return h&&v.forEach((c,e)=>{c.length>0&&x.set(e,new Uint32Array(c))}),{mapRooms:_,mapPointsStr:u,parsed:{obstacles:h?new Uint32Array(m):new Uint32Array,carpet:h?new Uint32Array(b):new Uint32Array,rooms:x,width:i,height:n,totalPixels:g}}},Ep=c=>{try{return JSON.parse(Ju(c))}catch(e){return console.error(e),{}}},Rp=(c,e)=>{try{if(!c)return console.error("<ray-robot-protocol> decodeMap: map data is empty"),null;let t=gp(c);return{mapHeader:t,mapData:Mp(c,t,e)}}catch(t){return console.error("<ray-robot-protocol> decodeMap:",t),null}},kp=c=>{try{if(!c)return console.error("<ray-robot-protocol> decodeMapRooms: map data is empty"),null;let e=gp(c),{mapWidth:t,mapHeight:i,dataLengthAfterCompress:n,dataLengthBeforeCompress:r,mapHeaderStr:s,version:a}=e,o=s.length,f=t*i;if(n>0){let e=Math.max(1048576,10*f),t=r;r>e&&(t=e);let i=4*t,s=rp(c.slice(o,o+2*n)),l=xp(s,i);if(!l)return[];if(0===a)return[];let d=l.subarray(f),h=102400,u=d.length>h?d.subarray(0,h):d;return Ap(u,a)}if(0===a)return[];let l=f*(0===a?.25:1),d=rp(c).subarray(o/2+l);return Ap(d,a)}catch(e){return console.error("<ray-robot-protocol> decodeMapRooms:",e),null}},Fp={"00":"common",10:"charge","01":"transitions",11:"mop"},Ip=c=>{let e=c.slice(0,26);return{version:parseInt(e.slice(0,2),16),pathId:parseInt(e.slice(2,6),16),initFlag:parseInt(e.slice(6,8),16),type:parseInt(e.slice(8,10),16),count:parseInt(e.slice(10,18),16),direction:parseInt(e.slice(18,22),16),dataLengthAfterCompress:parseInt(e.slice(22,26),16)}},Bp=(c,e)=>{let{dataLengthAfterCompress:t,count:i}=e,n=[];if(t>0){let e=4*i,t=sp(c.slice(26)),r=xp(t,e);if(!r)return[];let s=Array.from(r);for(let c=0;c<s.length;c+=4){let e=Zu(s[c],s[c+1]),t=Zu(s[c+2],s[c+3]);n.push([e,t])}}else n=((c,e)=>{if(!Array.isArray(c)||e<1)return[];let t=[];for(let i=0;i<c.length;i+=e)t.push(c.slice(i,i+e));return t})(sp(c.slice(26),2),2);let r=[];for(let s=0;s<n.length;s++){let[c,e]=n[s],t=`${1&c}${1&e}`;r.push({x:qu(1,-2&c),y:-qu(1,-2&e),type:Fp[t]})}return r},Dp=c=>{let e=Ip(c);return{pathHeader:e,pathPoints:Bp(c,e)}},Op="13",Lp="49",zp="1b",Gp="39",Up="15",Vp="57",Np="26",Wp="27",Hp="17",jp="3f",Yp="1d",Xp="1f",Zp="23",qp="59",Kp="25",Qp="29",Jp="3b",$p="33",cg="41",eg="31",tg="37",ig="3d",ng="43",rg="2b",sg="2d",ag="2f",og="35",fg={[Op]:"decodeVirtualWall0x13",[Lp]:"decodeVirtualWall0x49",[zp]:"decodeVirtualArea0x1b",[Gp]:"decodeVirtualArea0x39",[Up]:"decodeRoomClean0x15",[Vp]:"decodeRoomClean0x57",[Hp]:"decodeSpotClean0x17",[jp]:"decodeSpotClean0x3f",[Qp]:"decodeZoneClean0x29",[Jp]:"decodeZoneClean0x3b",[Yp]:"decodePartitionDivision0x1d",[Xp]:"decodePartitionMerge0x1f",[Zp]:"decodeSetRoomProperty0x23",[qp]:"decodeSetRoomProperty0x59",[Kp]:"decodeSetRoomName0x25",[rg]:"decodeSaveMap0x2b",[sg]:"decodeDeleteMap0x2d",[ag]:"decodeUseMap0x2f",[Wp]:"decodeRoomOrder0x27",[$p]:"decodeDoNotDisturb0x33",[cg]:"decodeDoNotDisturb0x41",[ig]:"decodeQuickMap0x3d",[ng]:"decodeResetMap0x43",[eg]:"decodeDeviceTimer0x31",[og]:"decodeVoice0x35"},lg=(c,e,t)=>{let i=c+e;return`aa${"1"===t?"01":"00"}${ju(i.length/2,"1"===t?8:2)}${c}${e}${pg(i)}`},dg=(c,e)=>{let t=c+e;return`ab00${ju(t.length/2,8)}${c}${e}${pg(t)}`},hg=(c,e,t="1")=>{let i=ug(c,t);if(i!==e)return console.warn("<ray-robot-protocol>: 传入的数据与需要解析的指令不匹配"),{valid:!1};let n="1"===t?c.slice(4,12):c.slice(4,6),r=parseInt(n,16),s="1"===t?c.slice(14,14+2*(r-1)):c.slice(8,8+2*(r-1));return s.length!==2*(r-1)?(console.warn("<ray-robot-protocol>: 数据长度字段与实际的数据长度不匹配"),{valid:!1}):{dataLength:r,cmdStr:i,dataStr:s,valid:!0}},ug=(c,e="1")=>"1"===e||c.startsWith("ab")?c.slice(12,14):c.slice(6,8),pg=c=>{let e=c.match(/.{2}/g).reduce((c,e)=>c+parseInt(e,16),0);return ju(e%256,2)},gg=c=>c.reduce((c,e)=>{if("number"==typeof e)return c+ju(e);if("string"==typeof e)return c+e;if("object"==typeof e){let{value:t,byte:i=1}=e;return c+ju(t,2*i)}return c},""),mg=(c={})=>{let{version:e="1"}=c;return lg(Op,"",e)},bg=mg,vg=c=>{let{walls:e,origin:t={x:0,y:0},mapScale:i=1,version:n="1"}=c,r=[];return r.push(e.length),e.forEach(c=>{c.forEach(c=>{let{hexX:e,hexY:n}=np(c,t,i);r.push(e,n)})}),lg("12",gg(r),n)},yg=vg,_g=c=>{var e,t;let{command:i,mapScale:n=1,version:r="1"}=c,{dataStr:s,valid:a}=hg(i,Op,r);return a?null!=(t=null==(e=s.slice(2).match(/.{16}/g))?void 0:e.map(c=>c.match(/.{8}/g).map(c=>({x:qu(n,parseInt(c.slice(0,4),16)),y:-qu(n,parseInt(c.slice(4),16))}))))?t:[]:null},xg=_g,Sg=(c={})=>{let{version:e="1"}=c;return lg(Up,"",e)},wg=Sg,Cg=c=>{let{roomHexIds:e,roomIds:t,cleanTimes:i,mapVersion:n=2,version:r="1"}=c,s=[];if(s.push(i),(null==e?void 0:e.length)>0){let c=e.map(c=>Wu(c,n));s.push(e.length),c.forEach(c=>{s.push(c)})}else(null==t?void 0:t.length)>0&&(s.push(t.length),t.forEach(c=>{s.push(c)}));return lg("14",gg(s),r)},Ag=Cg,Tg=c=>{let{command:e,mapVersion:t=2,version:i="1"}=c,{dataStr:n,valid:r}=hg(e,Up,i);if(!r)return null;let s=parseInt(n.slice(0,2),16),a=n.slice(4).match(/.{2}/g),o=[],f=[];return null==a||a.forEach(c=>{let e=parseInt(c,16);o.push(e),f.push(Hu(e,t))}),{roomIds:o,roomHexIds:f,cleanTimes:s}},Pg=Tg,Mg=(c={})=>{let{version:e="1"}=c;return lg(Vp,"",e)},Eg=Mg,Rg=c=>{let{rooms:e,mapVersion:t=2,version:i="1"}=c,n=[];return n.push(e.length),e.forEach(({roomHexId:c,roomId:e,cleanTimes:i,yMop:r,suction:s,cistern:a})=>{void 0!==e?n.push(e):c&&n.push(Wu(c,t)),n.push(s,a,r,i)}),lg("56",gg(n),i)},kg=Rg,Fg=c=>{let{command:e,mapVersion:t=2,version:i="1"}=c,{dataStr:n,valid:r}=hg(e,Vp,i);if(!r)return null;let s=[];return n.slice(2).match(/.{10}/g).forEach(c=>{let e=parseInt(c.slice(0,2),16),i=Hu(e,t),n=parseInt(c.slice(2,4),16),r=parseInt(c.slice(4,6),16),a=parseInt(c.slice(6,8),16),o=parseInt(c.slice(8,10),16);s.push({roomHexId:i,roomId:e,suction:n,cistern:r,yMop:a,cleanTimes:o})}),s},Ig=Fg,Bg=(c={})=>{let{version:e="1"}=c;return lg(Np,"",e)},Dg=Bg,Og=c=>{var e;let{roomIds:t,roomIdHexs:i,version:n,mapVersion:r}=c,s=[{value:null!=(e=null==t?void 0:t.length)?e:i.length,byte:1}];t?t.forEach(c=>{s.push({value:c,byte:1})}):i&&i.forEach(c=>{s.push({value:Wu(c,r),byte:1})});let a=gg(s);return lg(Np,a,n)},Lg=Og,zg=c=>{let{command:e,version:t="1"}=c,{dataStr:i,valid:n}=hg(e,Wp,t);return n?i.match(/\w{2}/g).slice(1).map(c=>parseInt(c,16)):null},Gg=zg,Ug=(c={})=>{let{version:e="1"}=c;return lg(Hp,"",e)},Vg=Ug,Ng=c=>{let{point:e,origin:t={x:0,y:0},mapScale:i=1,version:n="1"}=c,r=[],{hexX:s,hexY:a}=np(e,t,i);return r.push(s,a),lg("16",gg(r),n)},Wg=Ng,Hg=c=>{let{command:e,mapScale:t=1,version:i="1"}=c,{dataStr:n,valid:r}=hg(e,Hp,i);return r?{point:{x:qu(t,parseInt(n.slice(0,4),16)),y:-qu(t,parseInt(n.slice(4,8),16))}}:null},jg=Hg,Yg=(c={})=>{let{version:e="1"}=c;return lg(jp,"",e)},Xg=Yg,Zg=c=>{let{protocolVersion:e,points:t,origin:i={x:0,y:0},cleanMode:n,suction:r,cistern:s,cleanTimes:a,mapScale:o=1,version:f="1"}=c;if(![1,2].includes(e))return console.error(`<ray-robot-protocol>: 定点清扫0x3e/0x3f Protocol version不支持${e}`),"";if(t.length<1)return console.error("<ray-robot-protocol>: 定点清扫0x3e/0x3f 传入的定点信息有误"),"";let l=[];if(1===e){l.push(1,n,r,s,a);let c=t[0],{hexX:e,hexY:f}=np(c,i,o);l.push(e,f)}return 2===e&&(l.push(2,t.length),t.forEach(c=>{let{hexX:e,hexY:t}=np(c,i,o);l.push(e,t)})),lg("3e",gg(l),f)},qg=Zg,Kg=c=>{let{command:e,mapScale:t=1,version:i="1"}=c,{dataStr:n,valid:r}=hg(e,jp,i),s=parseInt(n.slice(0,2),16);if(!r)return null;if(1===s){let c=parseInt(n.slice(2,4),16),e=parseInt(n.slice(4,6),16),i=parseInt(n.slice(6,8),16),r=parseInt(n.slice(8,10),16);return{protocolVersion:s,points:[{x:qu(t,parseInt(n.slice(10,14),16)),y:-qu(t,parseInt(n.slice(14,18),16))}],cleanMode:c,suction:e,cistern:i,cleanTimes:r}}if(2===s){let c=[];return n.slice(4).match(/.{8}/g).forEach(e=>{let i=qu(t,parseInt(e.slice(0,4),16)),n=-qu(t,parseInt(e.slice(4),16));c.push({x:i,y:n})}),{protocolVersion:s,points:c}}return null},Qg=Kg,Jg=(c={})=>{let{version:e="1"}=c;return lg(Gp,"",e)},$g=Jg,cm=c=>{let{protocolVersion:e,virtualAreas:t,origin:i={x:0,y:0},mapScale:n=1,version:r="1"}=c;if(![1,2].includes(e))return console.error(`<ray-robot-protocol>: 禁区设置0x38/0x39 Protocol version不支持${e}`),"";let s=[];return s.push(e,t.length),t.forEach(({points:c,mode:t,name:r=""})=>{s.push(t),2===e&&s.push(4===c.length?0:1),s.push(c.length),c.forEach(c=>{let{hexX:e,hexY:t}=np(c,i,n);s.push(e,t)}),s.push(r.length,tp(ep(cp(r)),19))}),lg("38",gg(s),r)},em=cm,tm=c=>{let{command:e,mapScale:t=1,version:i="1"}=c,{dataStr:n,valid:r}=hg(e,Gp,i);if(!r)return null;let s=parseInt(n.slice(0,2),16),a=[],o=n.slice(4),f=0;for(;f<o.length-1;){let c=parseInt(o.slice(f,f+2),16);f+=2,2===s&&(f+=2);let e=parseInt(o.slice(f,f+2),16);f+=2;let i=o.slice(f,f+8*e).match(/.{8}/g),n=[];i.forEach(c=>{let e=qu(t,parseInt(c.slice(0,4),16)),i=-qu(t,parseInt(c.slice(4),16));n.push({x:e,y:i})}),f+=8*e,f+=2;let r=Ju(Qu(o.slice(f,f+38).match(/.{2}/g).map(c=>parseInt(c,16))))||"";f+=38,a.push({mode:c,points:n,name:r})}return{protocolVersion:s,virtualAreas:a}},im=tm,nm=c=>{let{roomId:e,points:t,origin:i={x:0,y:0},mapScale:n=1,version:r="1"}=c,s=[];return s.push(e),t.forEach(c=>{let{hexX:e,hexY:t}=np(c,i,n);s.push(e,t)}),lg("1c",gg(s),r)},rm=nm,sm=c=>{let{command:e,version:t="1"}=c,{dataStr:i,valid:n}=hg(e,Yp,t);if(!n)return null;let r=parseInt(i.slice(0,2),16);return{ret:r,success:1===r}},am=sm,om=c=>{let{roomIds:e,version:t="1"}=c,i=[];return e.forEach(c=>{i.push(c)}),lg("1e",gg(i),t)},fm=om,lm=c=>{let{command:e,version:t="1"}=c,{dataStr:i,valid:n}=hg(e,Xp,t);if(!n)return null;let r=parseInt(i.slice(0,2),16);return{ret:r,success:1===r}},dm=lm,hm=c=>{let{rooms:e,mapVersion:t=2,version:i="1"}=c,n=[];return n.push(e.length),e.forEach(({roomHexId:c,roomId:e,name:i=""})=>{null!=e?n.push(e):c&&n.push(Wu(c,t));let r=cp(i);n.push(r.length,tp(ep(r),19))}),lg("24",gg(n),i)},um=hm,pm=c=>{let{command:e,mapVersion:t=2,version:i="1"}=c,{dataStr:n,valid:r}=hg(e,Kp,i);if(!r)return null;let s=[];return n.slice(2).match(/.{42}/g).forEach(c=>{let e=parseInt(c.slice(0,2),16),i=Hu(e,t),n=$u(Qu(c.slice(4).match(/.{2}/g).map(c=>parseInt(c,16))))||"";s.push({roomHexId:i,roomId:e,name:n})}),s},gm=pm,mm=c=>{let{rooms:e,mapVersion:t=2,version:i="1"}=c,n=[];return n.push(e.length),e.forEach(({roomHexId:c,roomId:e,cleanTimes:i,yMop:r,suction:s,cistern:a})=>{void 0!==e?n.push(e):c&&n.push(Wu(c,t)),n.push(s,a,r,i)}),lg("22",gg(n),i)},bm=mm,vm=c=>{let{command:e,mapVersion:t=2,version:i="1"}=c,{dataStr:n,valid:r}=hg(e,Zp,i);if(!r)return null;let s=[];return n.slice(2).match(/.{10}/g).forEach(c=>{let e=parseInt(c.slice(0,2),16),i=Hu(e,t),n=parseInt(c.slice(2,4),16),r=parseInt(c.slice(4,6),16),a=parseInt(c.slice(6,8),16),o=parseInt(c.slice(8,10),16);s.push({roomHexId:i,roomId:e,suction:n,cistern:r,yMop:a,cleanTimes:o})}),s},ym=vm,_m=(c={})=>{let{version:e="1"}=c;return lg(Jp,"",e)},xm=_m,Sm=c=>{let{protocolVersion:e,zones:t,origin:i={x:0,y:0},cleanMode:n=0,suction:r=0,cistern:s=0,cleanTimes:a=1,mapScale:o=1,version:f="1"}=c;if(![1,2,3].includes(e))return console.error(`<ray-robot-protocol>: 划区清扫0x3a/0x3b Protocol version不支持${e}`),"";let l=[];return l.push(e),3===e?(l.push(t.length),t.forEach(({points:c,name:e="",advanced:t})=>{let{id:n,localSave:r,order:s,cleanMode:a,cleanTimes:f,suction:d,cistern:h}=null!=t?t:{};l.push(n,r,4===(null==c?void 0:c.length)?0:1,c.length),c.forEach(c=>{let{hexX:e,hexY:t}=np(c,i,o);l.push(e,t)}),l.push(f,s,a,d,h,{value:0,byte:5},e.length,tp(ep(cp(e)),19))})):(2===e&&l.push(n,r,s),l.push(a,t.length),t.forEach(({points:c,name:e=""})=>{l.push(c.length),c.forEach(c=>{let{hexX:e,hexY:t}=np(c,i,o);l.push(e,t)}),l.push(e.length,tp(ep(cp(e)),19))})),lg("3a",gg(l),f)},wm=Sm,Cm=c=>{let{command:e,mapScale:t=1,version:i="1"}=c,{dataStr:n,valid:r}=hg(e,Jp,i);if(!r)return null;let s={},a=parseInt(n.slice(0,2),16);s.protocolVersion=a;let o=[];if(3===a){let c=n.slice(4,-2),e=0;for(;e<c.length-1;){let i=parseInt(c.slice(e,e+2),16);e+=2;let n=parseInt(c.slice(e,e+2),16);e+=2,e+=2;let r=parseInt(c.slice(e,e+2),16);e+=2;let s=c.slice(e,e+8*r).match(/.{8}/g),a=[];s.forEach(c=>{let e=qu(t,parseInt(c.slice(0,4),16)),i=-qu(t,parseInt(c.slice(4),16));a.push({x:e,y:i})}),e+=8*r;let f=parseInt(c.slice(e,e+2),16);e+=2;let l=parseInt(c.slice(e,e+2),16);e+=2;let d=parseInt(c.slice(e,e+2),16);e+=2;let h=parseInt(c.slice(e,e+2),16);e+=2;let u=parseInt(c.slice(e,e+2),16);e+=2,e+=10,e+=2;let p=Ju(Qu(c.slice(e,e+38).match(/.{2}/g).map(c=>parseInt(c,16))))||"";e+=38,o.push({points:a,name:p,advanced:{id:i,order:l,localSave:n,cleanMode:d,cleanTimes:f,cistern:u,suction:h}})}}else{let c=2;2===a&&(s.cleanMode=parseInt(n.slice(c,c+2),16),c+=2,s.suction=parseInt(n.slice(c,c+2),16),c+=2,s.cistern=parseInt(n.slice(c,c+2),16),c+=2),s.cleanTimes=parseInt(n.slice(c,c+2),16),c+=2,c+=2;let e=n.slice(c,-2);for(c=0;c<e.length-1;){let i=parseInt(e.slice(c,c+2),16);c+=2;let n=e.slice(c,c+8*i).match(/.{8}/g),r=[];n.forEach(c=>{let e=qu(t,parseInt(c.slice(0,4),16)),i=-qu(t,parseInt(c.slice(4),16));r.push({x:e,y:i})}),c+=8*i,c+=2;let s=Ju(Qu(e.slice(c,c+38).match(/.{2}/g).map(c=>parseInt(c,16))))||"";c+=38,o.push({points:r,name:s})}}return s.zones=o,s},Am=Cm,Tm=c=>{let{enable:e,startHour:t,startMinute:i,endHour:n,endMinute:r,timeZone:s=Math.round((new Date).getTimezoneOffset()/-60),version:a="1"}=c,o=[];return o.push(1,e?1:0,s<0?ip(s):s,t,i,0,n,r,60*t+i>60*n+r?1:0),lg("40",gg(o),a)},Pm=Tm,Mm=c=>{let{command:e,version:t="1"}=c,{dataStr:i,valid:n}=hg(e,cg,t);if(!n)return null;let r=1===parseInt(i.slice(2,4),16),s=parseInt(i.slice(4,6),16);return{enable:r,timeZone:s>200?s-256:s,startHour:parseInt(i.slice(6,8),16),startMinute:parseInt(i.slice(8,10),16),endHour:parseInt(i.slice(12,14),16),endMinute:parseInt(i.slice(14,16),16)}},Em=Mm,Rm=(c={})=>{let{version:e="1"}=c;return lg("42","01",e)},km=Rm,Fm=(c={})=>{let{version:e="1"}=c;return lg("3c","01",e)},Im=Fm,Bm=(c=1)=>{let e=[];return e.push(c),dg("2a",gg(e))},Dm=Bm,Om=c=>{let{command:e}=c,{dataStr:t,valid:i}=hg(e,rg);if(!i)return null;let n=parseInt(t.slice(0,2),16);return{ret:n,success:1===n}},Lm=Om,zm=c=>{let{id:e}=c,t=[];return t.push({value:e,byte:4}),dg("2c",gg(t))},Gm=zm,Um=c=>{let{command:e}=c,{dataStr:t,valid:i}=hg(e,sg);if(!i)return null;let n=parseInt(t.slice(0,2),16);return{ret:n,success:1===n}},Vm=Um,Nm=c=>{let{mapId:e,url:t}=c,i=[],n=cp(t),r=n.length;return i.push({value:e,byte:4},{value:r,byte:4},...n),dg("2e",gg(i))},Wm=Nm,Hm=c=>{let{command:e}=c,{dataStr:t,valid:i}=hg(e,ag);if(!i)return null;let n=parseInt(t.slice(0,2),16);return{ret:n,success:1===n}},jm=Hm,Ym=(c,e,t,i)=>{let n=0;return n=Math.sqrt((c-t)*(c-t)+(e-i)*(e-i)),n},Xm=(c,e,t,i,n,r)=>{let s=0,a=Ym(c,e,t,i),o=Ym(c,e,n,r),f=Ym(t,i,n,r);if(f<=1e-6||o<=1e-6)return s=0,s;if(a<=1e-6||f*f>=a*a+o*o)return s=o,s;if(o*o>=a*a+f*f)return s=f,s;let l=(a+o+f)/2;return s=2*Math.sqrt(l*(l-a)*(l-o)*(l-f))/a,s},Zm=({x:c,y:e},{x:t,y:i})=>__pow(t-c,2)+__pow(i-e,2),qm=(c,e,t)=>{let{radius:i}=c,n=__pow(i,2),r=__pow(Xm(e[0].x,e[0].y,e[1].x,e[1].y,c.x,c.y),2),s=Zm(c,e[0]),a=Zm(c,e[1]);return s<n||a<n||r<n||((c,e)=>{let t=c.x,i=c.y,n=0;for(let r=0,s=e.length,a=s-1;r<s;a=r,r++){let c=e[r].x,s=e[r].y,o=e[a].x,f=e[a].y;if((c-t)*(t-o)>=0&&(s-i)*(i-f)>=0&&(t-c)*(f-s)===(i-s)*(o-c))return!0;let l=Math.atan2(s-i,c-t)-Math.atan2(f-i,o-t);l>=Math.PI?l-=2*Math.PI:l<=-Math.PI&&(l+=2*Math.PI),n+=l}return 0!==Math.round(n/Math.PI)})(c,t)};const Km=Object.freeze(Object.defineProperty({__proto__:null,AI_OBJECT_CMD_APP_V1:"36",AI_OBJECT_CMD_ROBOT_V1:tg,BITMAP_TYPE_HEX_MAP:mp,BITMAP_TYPE_MAP:bp,BITMAP_TYPE_MAP_REFLECTION:{"00":"sweep","01":"barrier",10:"battery",11:"unknown",111:"sweep","001":"barrier","000":"unknown","010":"carpet"},BITMAP_TYPE_MAP_V2:vp,DEFAULT_HIGHLIGHT_MAP_COLOR:["#FDE4CF","#8EECF5","#CFBAF0","#F1C0E8","#A3C4F3","#98F5E1","#FFCFD2","#90DBF4","#E1C1EB","#8ECCF5","#EDDDDE","#A3B8F3","#EFCFE1","#B2F2BE","#AEE6F8","#90C2F4"],DEFAULT_NORMAL_MAP_COLOR:["#EBEBEB","#E4E4E4","#DCDCDC","#D5D5D5","#CECECE","#C6C6C6","#C2C2C2","#BABABA","#E2E2E2","#DBDBDB","#D3D3D3","#CCCCCC","#C6C6C6","#BEBEBE","#BABABA","#B3B3B3"],DELETE_MAP_CMD_APP_V1:"2c",DELETE_MAP_CMD_ROBOT_V1:sg,DO_NOT_DISTURB_CMD_APP_V1:"32",DO_NOT_DISTURB_CMD_APP_V2:"40",DO_NOT_DISTURB_CMD_ROBOT_V1:$p,DO_NOT_DISTURB_CMD_ROBOT_V2:cg,EXTEND_FEATURE_HEADER:"ab",FEATURE_DECODE_MAP:fg,LOCAL_TIMER_CMD_APP_30:"30",LOCAL_TIMER_CMD_APP_44:"44",LOCAL_TIMER_CMD_ROBOT_31:eg,LOCAL_TIMER_CMD_ROBOT_45:"45",MAP_VERSION_MAP:yp,PARTITION_DIVISION_CMD_APP_V1:"1c",PARTITION_DIVISION_CMD_ROBOT_V1:Yp,PARTITION_MERGE_CMD_APP_V1:"1e",PARTITION_MERGE_CMD_ROBOT_V1:Xp,PATH_HEADER_LENGTH:13,PATH_POINT_TYPE_MAP:Fp,POINT_HEX_TOTAL:255,QUICK_MAP_CMD_APP_V1:"3c",QUICK_MAP_CMD_ROBOT_V1:"3d",RESET_MAP_CMD_APP_V1:"42",RESET_MAP_CMD_ROBOT_V1:"43",ROOM_CLEAN_CMD_APP_V1:"14",ROOM_CLEAN_CMD_APP_V2:"56",ROOM_CLEAN_CMD_ROBOT_V1:Up,ROOM_CLEAN_CMD_ROBOT_V2:Vp,ROOM_NAME_LENGTH:20,ROOM_ORDER_CMD_APP_V1:Np,ROOM_ORDER_CMD_ROBOT_V1:Wp,ROOM_PROPERTY_LENGTH:26,ROOM_VERTICES_NUM_LENGTH:1,SAVE_MAP_CMD_APP_V1:"2a",SAVE_MAP_CMD_ROBOT_V1:rg,SET_FLOOR_MATERIAL_CMD_APP_V1:"52",SET_FLOOR_MATERIAL_CMD_ROBOT_V1:"53",SET_ROOM_NAME_CMD_APP_V1:"24",SET_ROOM_NAME_CMD_ROBOT_V1:Kp,SET_ROOM_PROPERTY_CMD_APP_V1:"22",SET_ROOM_PROPERTY_CMD_APP_V2:"58",SET_ROOM_PROPERTY_CMD_ROBOT_V1:Zp,SET_ROOM_PROPERTY_CMD_ROBOT_V2:qp,SPECIAL_ROOM_IDS:_p,SPOT_CLEAN_CMD_APP_V1:"16",SPOT_CLEAN_CMD_APP_V2:"3e",SPOT_CLEAN_CMD_ROBOT_V1:Hp,SPOT_CLEAN_CMD_ROBOT_V2:jp,STANDARD_FEATURE_HEADER:"aa",UNKNOWN_AREA_ID:[60,61,62,63],UNKNOWN_AREA_ID_V2:[28,29,30,31],USE_MAP_CMD_APP_V1:"2e",USE_MAP_CMD_ROBOT_V1:ag,VIRTUAL_AREA_CMD_APP_V1:"1a",VIRTUAL_AREA_CMD_APP_V2:"38",VIRTUAL_AREA_CMD_ROBOT_V1:zp,VIRTUAL_AREA_CMD_ROBOT_V2:Gp,VIRTUAL_WALL_CMD_APP_V1:"12",VIRTUAL_WALL_CMD_APP_V2:"48",VIRTUAL_WALL_CMD_ROBOT_V1:Op,VIRTUAL_WALL_CMD_ROBOT_V2:Lp,VOICE_APP_V1:"34",VOICE_ROBOT_V1:og,ZONE_CLEAN_CMD_APP_V1:"28",ZONE_CLEAN_CMD_APP_V2:"3a",ZONE_CLEAN_CMD_ROBOT_V1:Qp,ZONE_CLEAN_CMD_ROBOT_V2:Jp,addHex:c=>c.match(/\w{2}/g).map(c=>parseInt(c,16)).reduce((c,e)=>c+e,0),arrayBufferToOctetStream:up,bytes2Str:ep,bytesToHexString:Qu,circleIntersectRect:(c,e)=>{let t=(c=>{let e,t,i,{length:n}=c,r=[];for(let s=0;s<n;s++)t=c[s],0===s?i=t:s>0&&r.push([e,t]),s===n-1&&r.push([t,i]),e=t;return r})(e),{length:i}=t;for(let n=0;n<i;n++){let i=t[n];if(qm(c,i,e))return!0}return!1},combineTwoBinaryToHex:op,completionTimeZone:ip,convertDataArrayToDataStr:gg,dealPL:Xu,dealScale:Ku,decodeAIObject0x37:c=>{var e,t;let{command:i,mapScale:n=1,version:r="1"}=c,{dataStr:s,valid:a}=hg(i,tg,r);return a?null!=(t=null==(e=s.slice(2).match(/.{10}/g))?void 0:e.map(c=>({point:{x:qu(n,parseInt(c.slice(0,4),16)),y:-qu(n,parseInt(c.slice(4,8),16))},type:parseInt(c.slice(8,10),16)})))?t:[]:null},decodeAiPicData:c=>{let{str:e,mapScale:t=1}=c,i=[],n=fp(e,2,4),r=fp(e,6,2);if(0===r)return i;let s=8;for(let a=0;a<r;a++){let c=e.slice(s,s+16),r=hp(c,t);s+=16;let o=fp(e,s);s+=2;let f=fp(e,s);s+=2;let l=fp(e,s,8);s+=8,i.push({id:`pic_${a}`,mapId:n,position:{x:r.x,y:r.y},object:o,accuracy:f,reserved:l,xHex:c.slice(0,8),yHex:c.slice(8)})}return i},decodeAiPicHDData:c=>{if(""===c)return{source:""};let e=sp(c),t=xp(e);return t?{source:up(t)}:{source:""}},decodeDeleteMap0x2d:Um,decodeDeleteMapV1:Vm,decodeDeviceTimer0x31:c=>{let{command:e,version:t="1"}=c,{dataStr:i,valid:n}=hg(e,eg,t);if(!n)return null;let r=[],s=fp(i,0),a=fp(i,2),o=4;for(let f=0;f<a;f++){let c=fp(i,o);o+=2;let e=lp(i.slice(o,o+2)).split("").reverse().map(c=>parseInt(c,10));o+=2;let t=fp(i,o);o+=2;let n=fp(i,o);o+=2;let s=fp(i,o),a=2*s;o+=2;let f=i.slice(o,o+a),l=[];for(let i=0;i<f.length;i+=2)l.push(fp(f,i));o+=a;let d=fp(i,o);o+=2;let h=fp(i,o);o+=2;let u=fp(i,o);o+=2;let p=fp(i,o);o+=2,r.push({effectiveness:c,week:e,time:{hour:t,minute:n},roomNum:s,roomIds:l,cleanMode:d,fanLevel:h,waterLevel:u,sweepCount:p})}return{number:a,timeZone:s,list:r}},decodeDeviceTimer0x45:c=>{let{command:e,version:t="1"}=c,{dataStr:i,valid:n}=hg(e,"45",t);if(!n)return null;let r=[],s=fp(i,2),a=fp(i,4),o=6;for(let f=0;f<a;f++){let c=fp(i,o);o+=2;let e=lp(i.slice(o,o+2)).split("").reverse().map(c=>parseInt(c,10));o+=2;let t=fp(i,o);o+=2;let n=fp(i,o);o+=2;let s=fp(i,o,4);o+=4;let a=fp(i,o),f=2*a;o+=2;let l=i.slice(o,o+f),d=[];for(let i=0;i<l.length;i+=2)d.push(fp(l,i));o+=f;let h=8*fp(i,o);o+=2;let u=i.slice(o,o+h),p=[];for(let i=0;i<u.length;i+=8)p.push(fp(u,i));o+=h;let g=fp(i,o);o+=2;let m=fp(i,o);o+=2;let b=fp(i,o);o+=2;let v=fp(i,o);o+=2,r.push({effectiveness:c,week:e,time:{hour:t,minute:n},roomNum:a,roomIds:d,cleanMode:g,fanLevel:m,waterLevel:b,sweepCount:v,mapId:s,zoneIds:p})}return{number:a,timeZone:s,list:r}},decodeDoNotDisturb0x33:c=>{let{command:e,version:t="1"}=c,{dataStr:i,valid:n}=hg(e,$p,t);if(!n)return null;let r=parseInt(i.slice(0,2),16);return{timeZone:r>200?r-256:r,startHour:parseInt(i.slice(2,4),16),startMinute:parseInt(i.slice(4,6),16),endHour:parseInt(i.slice(8,10),16),endMinute:parseInt(i.slice(10,12),16)}},decodeDoNotDisturb0x41:Mm,decodeDoNotDisturbV2:Em,decodeMap:Rp,decodeMapData:Mp,decodeMapHeader:gp,decodeMapRooms:kp,decodeMapStructured:Ep,decodePartitionDivision0x1d:sm,decodePartitionDivisionV1:am,decodePartitionMerge0x1f:lm,decodePartitionMergeV1:dm,decodePath:Dp,decodePathData:Bp,decodePathHeader:Ip,decodeRoomClean0x15:Tg,decodeRoomClean0x57:Fg,decodeRoomCleanV1:Pg,decodeRoomCleanV2:Ig,decodeRoomOrder0x27:zg,decodeRoomOrderV1:Gg,decodeSaveMap0x2b:Om,decodeSaveMapV1:Lm,decodeSetRoomFloorMaterial0x53:c=>{let{command:e,version:t="1"}=c,{dataStr:i,valid:n}=hg(e,"53",t);if(!n)return null;let r=[],s=parseInt(i.slice(2,4),16);for(let a=0;a<s;a++){let c=i.slice(4+4*a,8+4*a),e=parseInt(c.slice(0,2),16),t=parseInt(c.slice(2,4),16);r.push({roomId:e,material:t})}return r},decodeSetRoomName0x25:pm,decodeSetRoomNameV1:gm,decodeSetRoomProperty0x23:vm,decodeSetRoomProperty0x59:c=>{let{command:e,mapVersion:t=2,version:i="1"}=c,{dataStr:n,valid:r}=hg(e,qp,i);if(!r)return null;let s=[];return n.slice(2).match(/.{12}/g).forEach(c=>{let e=parseInt(c.slice(0,2),16),i=Hu(e,t),n=parseInt(c.slice(2,4),16),r=parseInt(c.slice(4,6),16),a=parseInt(c.slice(6,8),16),o=parseInt(c.slice(8,10),16),f=parseInt(c.slice(10,12),16);s.push({roomHexId:i,roomId:e,cleanMode:n,suction:r,cistern:a,yMop:o,cleanTimes:f})}),s},decodeSetRoomPropertyV1:ym,decodeSpotClean0x17:Hg,decodeSpotClean0x3f:Kg,decodeSpotCleanV1:jg,decodeSpotCleanV2:Qg,decodeStandardFeatureCommand:hg,decodeUseMap0x2f:Hm,decodeUseMapV1:jm,decodeVirtualArea0x1b:c=>{let{command:e,mapScale:t=1,version:i="1"}=c,{dataStr:n,valid:r}=hg(e,zp,i);if(!r)return null;let s=[],a=n.slice(2),o=0;for(;o<a.length-1;){let c=parseInt(a.slice(o,o+2),16);o+=2;let e=parseInt(a.slice(o,o+2),16);o+=2;let i=a.slice(o,o+8*e).match(/.{8}/g),n=[];i.forEach(c=>{let e=qu(t,parseInt(c.slice(0,4),16)),i=-qu(t,parseInt(c.slice(4),16));n.push({x:e,y:i})}),o+=8*e,s.push({mode:c,points:n})}return s},decodeVirtualArea0x39:tm,decodeVirtualAreaV2:im,decodeVirtualWall0x13:_g,decodeVirtualWall0x49:c=>{var e,t;let{command:i,mapScale:n=1,version:r="1"}=c,{dataStr:s,valid:a}=hg(i,Lp,r);return a?{protocolVersion:parseInt(s.slice(0,2),16),walls:null!=(t=null==(e=s.slice(4).match(/.{18}/g))?void 0:e.map(c=>({mode:parseInt(c.slice(0,2),16),points:c.slice(2).match(/.{8}/g).map(c=>({x:qu(n,parseInt(c.slice(0,4),16)),y:-qu(n,parseInt(c.slice(4),16))}))})))?t:[]}:null},decodeVirtualWallV1:xg,decodeVoice0x35:c=>{let{command:e}=c,{dataStr:t,valid:i}=hg(e,og);return i?{languageId:parseInt(t.slice(0,8),16),status:parseInt(t.slice(8,10),16),progress:parseInt(t.slice(10,12),16)}:null},decodeZoneClean0x29:c=>{var e,t;let{command:i,mapScale:n=1,version:r="1"}=c,{dataStr:s,valid:a}=hg(i,Qp,r);if(!a)return null;let o=parseInt(s.slice(0,2),16);return{zones:null!=(t=null==(e=s.slice(4).match(/.{34}/g))?void 0:e.map(c=>({points:c.slice(2).match(/.{8}/g).map(c=>({x:qu(n,parseInt(c.slice(0,4),16)),y:-qu(n,parseInt(c.slice(4),16))}))})))?t:[],cleanTimes:o}},decodeZoneClean0x3b:Cm,decodeZoneCleanV2:Am,encodeDeleteMap0x2c:zm,encodeDeleteMapV1:Gm,encodeDeviceTimer0x30:c=>{let{list:e,number:t,version:i="1"}=c,n=pp(),[r]=n.match(/([+-])\d(\d)/)||["+08","+","8"],s=Number(r);s<0&&(s=ip(s));let a=[s,t];for(let o=0;o<t;o++){let{effectiveness:c,week:t,time:i,roomIds:n,cleanMode:r,fanLevel:s,waterLevel:f,sweepCount:l,roomNum:d}=e[o],h=[...t];a.push(c,parseInt(h.reverse().join(""),2),i.hour,i.minute,d,...n,r,s,f,l)}return lg("30",gg(a),i)},encodeDeviceTimer0x44:c=>{let{list:e,number:t,version:i="1"}=c,n=pp(),[r]=n.match(/([+-])\d(\d)/)||["+08","+","8"],s=Number(r);s<0&&(s=ip(s));let a=[1,s,t];for(let o=0;o<t;o++){let{effectiveness:c,week:t,time:i,roomIds:n,cleanMode:r,fanLevel:s,waterLevel:f,sweepCount:l,roomNum:d,zoneIds:h=[],mapId:u=0}=e[o],p=[...t];a.push(c,parseInt(p.reverse().join(""),2),i.hour,i.minute,{value:u,byte:2},d,...n,h.length,...h.map(c=>({value:c,byte:4})),r,s,f,l)}return lg("44",gg(a),i)},encodeDoNotDisturb0x32:c=>{let{startHour:e,startMinute:t,endHour:i,endMinute:n,timeZone:r=Math.round((new Date).getTimezoneOffset()/-60),version:s="1"}=c,a=[];return a.push(r<0?ip(r):r,e,t,0,i,n,60*e+t>60*i+n?1:0),lg("32",gg(a),s)},encodeDoNotDisturb0x40:Tm,encodeDoNotDisturbV2:Pm,encodeExtendFeatureCommand:dg,encodePartitionDivision0x1c:nm,encodePartitionDivisionV1:rm,encodePartitionMerge0x1e:om,encodePartitionMergeV1:fm,encodeQuickMap0x3c:Fm,encodeQuickMapV1:Im,encodeResetMap0x42:Rm,encodeResetMapV1:km,encodeRoomClean0x14:Cg,encodeRoomClean0x56:Rg,encodeRoomCleanV1:Ag,encodeRoomCleanV2:kg,encodeRoomOrder0x26:Og,encodeRoomOrderV1:Lg,encodeSaveMap0x2a:Bm,encodeSaveMapV1:Dm,encodeSetRoomFloorMaterial0x52:c=>{let{rooms:e,version:t="1"}=c,i=[1,e.length];return e.forEach(c=>{i.push(c.roomId,c.material)}),lg("52",gg(i),t)},encodeSetRoomName0x24:hm,encodeSetRoomNameV1:um,encodeSetRoomProperty0x22:mm,encodeSetRoomProperty0x58:c=>{let{rooms:e,mapVersion:t=2,version:i="1"}=c,n=[];return n.push(e.length),e.forEach(({cleanMode:c,roomHexId:e,roomId:i,cleanTimes:r,yMop:s,suction:a,cistern:o})=>{void 0!==i?n.push(i):e&&n.push(Wu(e,t)),n.push(c,a,o,s,r)}),lg("58",gg(n),i)},encodeSetRoomPropertyV1:bm,encodeSpotClean0x16:Ng,encodeSpotClean0x3e:Zg,encodeSpotCleanV1:Wg,encodeSpotCleanV2:qg,encodeStandardFeatureCommand:lg,encodeUseMap0x2e:Nm,encodeUseMapV1:Wm,encodeVirtualArea0x1a:c=>{let{virtualAreas:e,origin:t={x:0,y:0},mapScale:i=1,version:n="1"}=c,r=[];return r.push(e.length),e.forEach(({points:c,mode:e})=>{r.push(e),r.push(c.length),c.forEach(c=>{let{hexX:e,hexY:n}=np(c,t,i);r.push(e,n)})}),lg("1a",gg(r),n)},encodeVirtualArea0x38:cm,encodeVirtualAreaV2:em,encodeVirtualWall0x12:vg,encodeVirtualWall0x48:c=>{let{protocolVersion:e=1,walls:t,origin:i={x:0,y:0},mapScale:n=1,version:r="1"}=c,s=[];return[1].includes(e)?(s.push(e),s.push(t.length),t.forEach(({mode:c,points:e})=>{s.push(c),e.forEach(c=>{let{hexX:e,hexY:t}=np(c,i,n);s.push(e,t)})}),lg("48",gg(s),r)):(console.error(`<ray-robot-protocol>: 虚拟墙设置0x48/0x49 Protocol version不支持${e}`),"")},encodeVirtualWallV1:yg,encodeVoice0x34:c=>{let{id:e,md5:t,url:i}=c,n=[],r=cp(t),s=r.length,a=cp(i),o=a.length;return n.push({value:e,byte:4},s,...r,{value:o,byte:4},...a),dg("34",gg(n))},encodeZoneClean0x28:c=>{let{zones:e,origin:t={x:0,y:0},cleanTimes:i=1,mapScale:n=1,version:r="1"}=c,s=[];return s.push(i,e.length),e.forEach(({points:c})=>{s.push(c.length),c.forEach(c=>{let{hexX:e,hexY:i}=np(c,t,n);s.push(e,i)})}),lg("28",gg(s),r)},encodeZoneClean0x3a:Sm,encodeZoneCleanV2:wm,from16To2:lp,getCmdStrFromStandardFeatureCommand:ug,getFeatureProtocolVersion:c=>"01"===c.slice(2,4)?"1":"0",getHexXYFromXY:np,getMapProtocolVersion:c=>parseInt(c.slice(0,2),16),getTimezoneOffset:pp,hexPlusLen:tp,hexStringToNumber:sp,hexToUTF8:Ju,hexToUint8Array:rp,hexToUriDecodedString:$u,highLowToInt:Zu,isAdjacent:(c,e,t=5)=>{var i;c.length<e.length&&([c,e]=[e,c]);let n=c.length,r=e.length,s=t*t,a=new Map;for(let o=0;o<n;o++){let{x:e,y:t}=c[o];a.has(e)||a.set(e,new Map),a.get(e).set(t,o)}for(let o=0;o<r;o++){let{x:c,y:n}=e[o];for(let r=-t;r<=t;r++)for(let f=-t;f<=t;f++){let t=c+r,l=n+f;if((null==(i=null==a?void 0:a.get(t))?void 0:i.has(l))&&Math.pow(t-e[o].x,2)+Math.pow(l-e[o].y,2)<=s)return!0}}return!1},isBorder:(c,e)=>{if(!(Array.isArray(c)&&Array.isArray(e)&&c.length&&e.length))return!0;let t,i=0,n=c.length,r=e.length;if(n>0&&r>0)for(let s=1;s<n;s++)for(let a=0;a<r;a++)if(t=s===n-1?Xm(1*c[0].x,1*c[0].y,1*c[s].x,1*c[s].y,1*e[a].x,1*e[a].y):Xm(1*c[s-1].x,1*c[s-1].y,1*c[s].x,1*c[s].y,1*e[a].x,1*e[a].y),t<=5){i++;break}return i>0},lastChar:(c,e=2)=>{let t=c.toString(16);return t=t.length<e?"0".repeat(e-t.length)+t:t.slice(t.length-e,t.length),t},lineInCircle:qm,lineIntersectCircle:(c,e)=>{let{radius:t}=c,i=__pow(t,2),n=__pow(Xm(e[0].x,e[0].y,e[1].x,e[1].y,c.x,c.y),2),r=Zm(c,e[0]),s=Zm(c,e[1]);return r<i||s<i||n<i},makeXYArray:hp,numToHexString:ju,parseRoomHexId:Hu,parseRoomId:Wu,pointToLine:Xm,processHex:dp,requestAIObject0x37:(c={})=>{let{version:e="1"}=c;return lg(tg,"",e)},requestRoomClean0x15:Sg,requestRoomClean0x57:Mg,requestRoomCleanV1:wg,requestRoomCleanV2:Eg,requestRoomOrder0x26:Bg,requestRoomOrderV1:Dg,requestSpotClean0x17:Ug,requestSpotClean0x3f:Yg,requestSpotCleanV1:Vg,requestSpotCleanV2:Xg,requestVirtualArea0x1b:(c={})=>{let{version:e="1"}=c;return lg(zp,"",e)},requestVirtualArea0x39:Jg,requestVirtualAreaV2:$g,requestVirtualWall0x13:mg,requestVirtualWall0x49:(c={})=>{let{version:e="1"}=c;return lg(Lp,"",e)},requestVirtualWallV1:bg,requestZoneClean0x29:(c={})=>{let{version:e="1"}=c;return lg(Qp,"",e)},requestZoneClean0x3b:_m,requestZoneCleanV2:xm,scaleNumber:Yu,stringToAtHex:c=>{let e="";for(let t=0;t<c.length;t++)""===e?e=c.charCodeAt(t).toString(16):e+=`${c.charCodeAt(t).toString(16)}`;return e},stringToByte:cp,subStrToInt:fp,transformChargeXY:ap,transformXY:qu},Symbol.toStringTag,{value:"Module"}));var Qm="object"==typeof global&&global&&global.Object===Object&&global,Jm="object"==typeof self&&self&&self.Object===Object&&self,$m=Qm||Jm||Function("return this")(),cb=$m.Symbol,eb=Object.prototype,tb=eb.hasOwnProperty,ib=eb.toString,nb=cb?cb.toStringTag:void 0;var rb=Object.prototype.toString;var sb=cb?cb.toStringTag:void 0;function ab(c){return null==c?void 0===c?"[object Undefined]":"[object Null]":sb&&sb in Object(c)?function(c){var e=tb.call(c,nb),t=c[nb];try{c[nb]=void 0;var i=!0}catch(r){}var n=ib.call(c);return i&&(e?c[nb]=t:delete c[nb]),n}(c):function(c){return rb.call(c)}(c)}function ob(c){return null!=c&&"object"==typeof c}function fb(c){return"symbol"==typeof c||ob(c)&&"[object Symbol]"==ab(c)}function lb(c,e){for(var t=-1,i=null==c?0:c.length,n=Array(i);++t<i;)n[t]=e(c[t],t,c);return n}var db=Array.isArray,hb=cb?cb.prototype:void 0,ub=hb?hb.toString:void 0;function pb(c){if("string"==typeof c)return c;if(db(c))return lb(c,pb)+"";if(fb(c))return ub?ub.call(c):"";var e=c+"";return"0"==e&&1/c==-1/0?"-0":e}var gb=/\s/;var mb=/^\s+/;function bb(c){return c?c.slice(0,function(c){for(var e=c.length;e--&&gb.test(c.charAt(e)););return e}(c)+1).replace(mb,""):c}function vb(c){var e=typeof c;return null!=c&&("object"==e||"function"==e)}var yb=/^[-+]0x[0-9a-f]+$/i,_b=/^0b[01]+$/i,xb=/^0o[0-7]+$/i,Sb=parseInt;function wb(c){if("number"==typeof c)return c;if(fb(c))return NaN;if(vb(c)){var e="function"==typeof c.valueOf?c.valueOf():c;c=vb(e)?e+"":e}if("string"!=typeof c)return 0===c?c:+c;c=bb(c);var t=_b.test(c);return t||xb.test(c)?Sb(c.slice(2),t?2:8):yb.test(c)?NaN:+c}var Cb=1/0;function Ab(c){var e=function(c){return c?(c=wb(c))===Cb||c===-1/0?17976931348623157e292*(c<0?-1:1):c==c?c:0:0===c?c:0}(c),t=e%1;return e==e?t?e-t:e:0}function Tb(c){return c}function Pb(c){if(!vb(c))return!1;var e=ab(c);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}var Mb,Eb=$m["__core-js_shared__"],Rb=(Mb=/[^.]+$/.exec(Eb&&Eb.keys&&Eb.keys.IE_PROTO||""))?"Symbol(src)_1."+Mb:"";var kb=Function.prototype.toString;function Fb(c){if(null!=c){try{return kb.call(c)}catch(e){}try{return c+""}catch(e){}}return""}var Ib=/^\[object .+?Constructor\]$/,Bb=Function.prototype,Db=Object.prototype,Ob=Bb.toString,Lb=Db.hasOwnProperty,zb=RegExp("^"+Ob.call(Lb).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Gb(c){return!(!vb(c)||(e=c,Rb&&Rb in e))&&(Pb(c)?zb:Ib).test(Fb(c));var e}function Ub(c,e){var t=function(c,e){return null==c?void 0:c[e]}(c,e);return Gb(t)?t:void 0}var Vb=Ub($m,"WeakMap"),Nb=Object.create,Wb=function(){function c(){}return function(e){if(!vb(e))return{};if(Nb)return Nb(e);c.prototype=e;var t=new c;return c.prototype=void 0,t}}();var Hb=Date.now;var jb,Yb,Xb,Zb=function(){try{var c=Ub(Object,"defineProperty");return c({},"",{}),c}catch(e){}}(),qb=Zb?function(c,e){return Zb(c,"toString",{configurable:!0,enumerable:!1,value:(t=e,function(){return t}),writable:!0});var t}:Tb,Kb=(jb=qb,Yb=0,Xb=0,function(){var c=Hb(),e=16-(c-Xb);if(Xb=c,e>0){if(++Yb>=800)return arguments[0]}else Yb=0;return jb.apply(void 0,arguments)}),Qb=/^(?:0|[1-9]\d*)$/;function Jb(c,e){var t=typeof c;return!!(e=null==e?9007199254740991:e)&&("number"==t||"symbol"!=t&&Qb.test(c))&&c>-1&&c%1==0&&c<e}function $b(c,e,t){"__proto__"==e&&Zb?Zb(c,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):c[e]=t}function cv(c,e){return c===e||c!=c&&e!=e}var ev=Object.prototype.hasOwnProperty;function tv(c,e,t){var i=c[e];ev.call(c,e)&&cv(i,t)&&(void 0!==t||e in c)||$b(c,e,t)}var iv=Math.max;function nv(c,e,t){return e=iv(void 0===e?c.length-1:e,0),function(){for(var i=arguments,n=-1,r=iv(i.length-e,0),s=Array(r);++n<r;)s[n]=i[e+n];n=-1;for(var a=Array(e+1);++n<e;)a[n]=i[n];return a[e]=t(s),function(c,e,t){switch(t.length){case 0:return c.call(e);case 1:return c.call(e,t[0]);case 2:return c.call(e,t[0],t[1]);case 3:return c.call(e,t[0],t[1],t[2])}return c.apply(e,t)}(c,this,a)}}function rv(c){return"number"==typeof c&&c>-1&&c%1==0&&c<=9007199254740991}function sv(c){return null!=c&&rv(c.length)&&!Pb(c)}var av=Object.prototype;function ov(c){var e=c&&c.constructor;return c===("function"==typeof e&&e.prototype||av)}function fv(c){return ob(c)&&"[object Arguments]"==ab(c)}var lv=Object.prototype,dv=lv.hasOwnProperty,hv=lv.propertyIsEnumerable,uv=fv(function(){return arguments}())?fv:function(c){return ob(c)&&dv.call(c,"callee")&&!hv.call(c,"callee")};var pv="object"==typeof exports&&exports&&!exports.nodeType&&exports,gv=pv&&"object"==typeof module&&module&&!module.nodeType&&module,mv=gv&&gv.exports===pv?$m.Buffer:void 0,bv=(mv?mv.isBuffer:void 0)||function(){return!1},vv={};vv["[object Float32Array]"]=vv["[object Float64Array]"]=vv["[object Int8Array]"]=vv["[object Int16Array]"]=vv["[object Int32Array]"]=vv["[object Uint8Array]"]=vv["[object Uint8ClampedArray]"]=vv["[object Uint16Array]"]=vv["[object Uint32Array]"]=!0,vv["[object Arguments]"]=vv["[object Array]"]=vv["[object ArrayBuffer]"]=vv["[object Boolean]"]=vv["[object DataView]"]=vv["[object Date]"]=vv["[object Error]"]=vv["[object Function]"]=vv["[object Map]"]=vv["[object Number]"]=vv["[object Object]"]=vv["[object RegExp]"]=vv["[object Set]"]=vv["[object String]"]=vv["[object WeakMap]"]=!1;var yv="object"==typeof exports&&exports&&!exports.nodeType&&exports,_v=yv&&"object"==typeof module&&module&&!module.nodeType&&module,xv=_v&&_v.exports===yv&&Qm.process,Sv=function(){try{var c=_v&&_v.require&&_v.require("util").types;return c||xv&&xv.binding&&xv.binding("util")}catch(e){}}(),wv=Sv&&Sv.isTypedArray,Cv=wv?function(c){return function(e){return c(e)}}(wv):function(c){return ob(c)&&rv(c.length)&&!!vv[ab(c)]},Av=Object.prototype.hasOwnProperty;function Tv(c,e){var t=db(c),i=!t&&uv(c),n=!t&&!i&&bv(c),r=!t&&!i&&!n&&Cv(c),s=t||i||n||r,a=s?function(c,e){for(var t=-1,i=Array(c);++t<c;)i[t]=e(t);return i}(c.length,String):[],o=a.length;for(var f in c)!e&&!Av.call(c,f)||s&&("length"==f||n&&("offset"==f||"parent"==f)||r&&("buffer"==f||"byteLength"==f||"byteOffset"==f)||Jb(f,o))||a.push(f);return a}function Pv(c,e){return function(t){return c(e(t))}}var Mv=Pv(Object.keys,Object),Ev=Object.prototype.hasOwnProperty;function Rv(c){return sv(c)?Tv(c):function(c){if(!ov(c))return Mv(c);var e=[];for(var t in Object(c))Ev.call(c,t)&&"constructor"!=t&&e.push(t);return e}(c)}var kv=Object.prototype.hasOwnProperty;function Fv(c){if(!vb(c))return function(c){var e=[];if(null!=c)for(var t in Object(c))e.push(t);return e}(c);var e=ov(c),t=[];for(var i in c)("constructor"!=i||!e&&kv.call(c,i))&&t.push(i);return t}function Iv(c){return sv(c)?Tv(c,!0):Fv(c)}var Bv=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Dv=/^\w*$/;function Ov(c,e){if(db(c))return!1;var t=typeof c;return!("number"!=t&&"symbol"!=t&&"boolean"!=t&&null!=c&&!fb(c))||(Dv.test(c)||!Bv.test(c)||null!=e&&c in Object(e))}var Lv=Ub(Object,"create");var zv=Object.prototype.hasOwnProperty;var Gv=Object.prototype.hasOwnProperty;function Uv(c){var e=-1,t=null==c?0:c.length;for(this.clear();++e<t;){var i=c[e];this.set(i[0],i[1])}}function Vv(c,e){for(var t=c.length;t--;)if(cv(c[t][0],e))return t;return-1}Uv.prototype.clear=function(){this.__data__=Lv?Lv(null):{},this.size=0},Uv.prototype.delete=function(c){var e=this.has(c)&&delete this.__data__[c];return this.size-=e?1:0,e},Uv.prototype.get=function(c){var e=this.__data__;if(Lv){var t=e[c];return"__lodash_hash_undefined__"===t?void 0:t}return zv.call(e,c)?e[c]:void 0},Uv.prototype.has=function(c){var e=this.__data__;return Lv?void 0!==e[c]:Gv.call(e,c)},Uv.prototype.set=function(c,e){var t=this.__data__;return this.size+=this.has(c)?0:1,t[c]=Lv&&void 0===e?"__lodash_hash_undefined__":e,this};var Nv=Array.prototype.splice;function Wv(c){var e=-1,t=null==c?0:c.length;for(this.clear();++e<t;){var i=c[e];this.set(i[0],i[1])}}Wv.prototype.clear=function(){this.__data__=[],this.size=0},Wv.prototype.delete=function(c){var e=this.__data__,t=Vv(e,c);return!(t<0)&&(t==e.length-1?e.pop():Nv.call(e,t,1),--this.size,!0)},Wv.prototype.get=function(c){var e=this.__data__,t=Vv(e,c);return t<0?void 0:e[t][1]},Wv.prototype.has=function(c){return Vv(this.__data__,c)>-1},Wv.prototype.set=function(c,e){var t=this.__data__,i=Vv(t,c);return i<0?(++this.size,t.push([c,e])):t[i][1]=e,this};var Hv=Ub($m,"Map");function jv(c,e){var t,i,n=c.__data__;return("string"==(i=typeof(t=e))||"number"==i||"symbol"==i||"boolean"==i?"__proto__"!==t:null===t)?n["string"==typeof e?"string":"hash"]:n.map}function Yv(c){var e=-1,t=null==c?0:c.length;for(this.clear();++e<t;){var i=c[e];this.set(i[0],i[1])}}Yv.prototype.clear=function(){this.size=0,this.__data__={hash:new Uv,map:new(Hv||Wv),string:new Uv}},Yv.prototype.delete=function(c){var e=jv(this,c).delete(c);return this.size-=e?1:0,e},Yv.prototype.get=function(c){return jv(this,c).get(c)},Yv.prototype.has=function(c){return jv(this,c).has(c)},Yv.prototype.set=function(c,e){var t=jv(this,c),i=t.size;return t.set(c,e),this.size+=t.size==i?0:1,this};function Xv(c,e){if("function"!=typeof c||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var t=function(){var i=arguments,n=e?e.apply(this,i):i[0],r=t.cache;if(r.has(n))return r.get(n);var s=c.apply(this,i);return t.cache=r.set(n,s)||r,s};return t.cache=new(Xv.Cache||Yv),t}Xv.Cache=Yv;var Zv=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,qv=/\\(\\)?/g,Kv=function(c){var e=Xv(c,function(c){return 500===t.size&&t.clear(),c}),t=e.cache;return e}(function(c){var e=[];return 46===c.charCodeAt(0)&&e.push(""),c.replace(Zv,function(c,t,i,n){e.push(i?n.replace(qv,"$1"):t||c)}),e});function Qv(c){return null==c?"":pb(c)}function Jv(c,e){return db(c)?c:Ov(c,e)?[c]:Kv(Qv(c))}function $v(c){if("string"==typeof c||fb(c))return c;var e=c+"";return"0"==e&&1/c==-1/0?"-0":e}function cy(c,e){for(var t=0,i=(e=Jv(e,c)).length;null!=c&&t<i;)c=c[$v(e[t++])];return t&&t==i?c:void 0}function ey(c,e){for(var t=-1,i=e.length,n=c.length;++t<i;)c[n+t]=e[t];return c}var ty=cb?cb.isConcatSpreadable:void 0;function iy(c){return db(c)||uv(c)||!!(ty&&c&&c[ty])}function ny(c){return(null==c?0:c.length)?function(c,e,t,i,n){var r=-1,s=c.length;for(t||(t=iy),n||(n=[]);++r<s;){var a=c[r];t(a)?ey(n,a):n[n.length]=a}return n}(c):[]}var ry=Pv(Object.getPrototypeOf,Object),sy=Function.prototype,ay=Object.prototype,oy=sy.toString,fy=ay.hasOwnProperty,ly=oy.call(Object);var dy=$m.isFinite,hy=Math.min;function uy(c){var e=this.__data__=new Wv(c);this.size=e.size}uy.prototype.clear=function(){this.__data__=new Wv,this.size=0},uy.prototype.delete=function(c){var e=this.__data__,t=e.delete(c);return this.size=e.size,t},uy.prototype.get=function(c){return this.__data__.get(c)},uy.prototype.has=function(c){return this.__data__.has(c)},uy.prototype.set=function(c,e){var t=this.__data__;if(t instanceof Wv){var i=t.__data__;if(!Hv||i.length<199)return i.push([c,e]),this.size=++t.size,this;t=this.__data__=new Yv(i)}return t.set(c,e),this.size=t.size,this};var py="object"==typeof exports&&exports&&!exports.nodeType&&exports,gy=py&&"object"==typeof module&&module&&!module.nodeType&&module,my=gy&&gy.exports===py?$m.Buffer:void 0;my&&my.allocUnsafe;var by=Object.prototype.propertyIsEnumerable,vy=Object.getOwnPropertySymbols,yy=vy?function(c){return null==c?[]:(c=Object(c),function(c,e){for(var t=-1,i=null==c?0:c.length,n=0,r=[];++t<i;){var s=c[t];e(s,t,c)&&(r[n++]=s)}return r}(vy(c),function(e){return by.call(c,e)}))}:function(){return[]};function _y(c){return function(c,e,t){var i=e(c);return db(c)?i:ey(i,t(c))}(c,Rv,yy)}var xy=Ub($m,"DataView"),Sy=Ub($m,"Promise"),wy=Ub($m,"Set"),Cy="[object Map]",Ay="[object Promise]",Ty="[object Set]",Py="[object WeakMap]",My="[object DataView]",Ey=Fb(xy),Ry=Fb(Hv),ky=Fb(Sy),Fy=Fb(wy),Iy=Fb(Vb),By=ab;(xy&&By(new xy(new ArrayBuffer(1)))!=My||Hv&&By(new Hv)!=Cy||Sy&&By(Sy.resolve())!=Ay||wy&&By(new wy)!=Ty||Vb&&By(new Vb)!=Py)&&(By=function(c){var e=ab(c),t="[object Object]"==e?c.constructor:void 0,i=t?Fb(t):"";if(i)switch(i){case Ey:return My;case Ry:return Cy;case ky:return Ay;case Fy:return Ty;case Iy:return Py}return e});var Dy=$m.Uint8Array;function Oy(c,e){var t,i,n=(t=c.buffer,i=new t.constructor(t.byteLength),new Dy(i).set(new Dy(t)),i);return new c.constructor(n,c.byteOffset,c.length)}function Ly(c){var e=-1,t=null==c?0:c.length;for(this.__data__=new Yv;++e<t;)this.add(c[e])}function zy(c,e){for(var t=-1,i=null==c?0:c.length;++t<i;)if(e(c[t],t,c))return!0;return!1}Ly.prototype.add=Ly.prototype.push=function(c){return this.__data__.set(c,"__lodash_hash_undefined__"),this},Ly.prototype.has=function(c){return this.__data__.has(c)};function Gy(c,e,t,i,n,r){var s=1&t,a=c.length,o=e.length;if(a!=o&&!(s&&o>a))return!1;var f=r.get(c),l=r.get(e);if(f&&l)return f==e&&l==c;var d=-1,h=!0,u=2&t?new Ly:void 0;for(r.set(c,e),r.set(e,c);++d<a;){var p=c[d],g=e[d];if(i)var m=s?i(g,p,d,e,c,r):i(p,g,d,c,e,r);if(void 0!==m){if(m)continue;h=!1;break}if(u){if(!zy(e,function(c,e){if(s=e,!u.has(s)&&(p===c||n(p,c,t,i,r)))return u.push(e);var s})){h=!1;break}}else if(p!==g&&!n(p,g,t,i,r)){h=!1;break}}return r.delete(c),r.delete(e),h}function Uy(c){var e=-1,t=Array(c.size);return c.forEach(function(c,i){t[++e]=[i,c]}),t}function Vy(c){var e=-1,t=Array(c.size);return c.forEach(function(c){t[++e]=c}),t}var Ny=cb?cb.prototype:void 0,Wy=Ny?Ny.valueOf:void 0;var Hy=Object.prototype.hasOwnProperty;var jy="[object Arguments]",Yy="[object Array]",Xy="[object Object]",Zy=Object.prototype.hasOwnProperty;function qy(c,e,t,i,n,r){var s=db(c),a=db(e),o=s?Yy:By(c),f=a?Yy:By(e),l=(o=o==jy?Xy:o)==Xy,d=(f=f==jy?Xy:f)==Xy,h=o==f;if(h&&bv(c)){if(!bv(e))return!1;s=!0,l=!1}if(h&&!l)return r||(r=new uy),s||Cv(c)?Gy(c,e,t,i,n,r):function(c,e,t,i,n,r,s){switch(t){case"[object DataView]":if(c.byteLength!=e.byteLength||c.byteOffset!=e.byteOffset)return!1;c=c.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(c.byteLength!=e.byteLength||!r(new Dy(c),new Dy(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return cv(+c,+e);case"[object Error]":return c.name==e.name&&c.message==e.message;case"[object RegExp]":case"[object String]":return c==e+"";case"[object Map]":var a=Uy;case"[object Set]":var o=1&i;if(a||(a=Vy),c.size!=e.size&&!o)return!1;var f=s.get(c);if(f)return f==e;i|=2,s.set(c,e);var l=Gy(a(c),a(e),i,n,r,s);return s.delete(c),l;case"[object Symbol]":if(Wy)return Wy.call(c)==Wy.call(e)}return!1}(c,e,o,t,i,n,r);if(!(1&t)){var u=l&&Zy.call(c,"__wrapped__"),p=d&&Zy.call(e,"__wrapped__");if(u||p){var g=u?c.value():c,m=p?e.value():e;return r||(r=new uy),n(g,m,t,i,r)}}return!!h&&(r||(r=new uy),function(c,e,t,i,n,r){var s=1&t,a=_y(c),o=a.length;if(o!=_y(e).length&&!s)return!1;for(var f=o;f--;){var l=a[f];if(!(s?l in e:Hy.call(e,l)))return!1}var d=r.get(c),h=r.get(e);if(d&&h)return d==e&&h==c;var u=!0;r.set(c,e),r.set(e,c);for(var p=s;++f<o;){var g=c[l=a[f]],m=e[l];if(i)var b=s?i(m,g,l,e,c,r):i(g,m,l,c,e,r);if(!(void 0===b?g===m||n(g,m,t,i,r):b)){u=!1;break}p||(p="constructor"==l)}if(u&&!p){var v=c.constructor,y=e.constructor;v==y||!("constructor"in c)||!("constructor"in e)||"function"==typeof v&&v instanceof v&&"function"==typeof y&&y instanceof y||(u=!1)}return r.delete(c),r.delete(e),u}(c,e,t,i,n,r))}function Ky(c,e,t,i,n){return c===e||(null==c||null==e||!ob(c)&&!ob(e)?c!=c&&e!=e:qy(c,e,t,i,Ky,n))}function Qy(c){return c==c&&!vb(c)}function Jy(c,e){return function(t){return null!=t&&(t[c]===e&&(void 0!==e||c in Object(t)))}}function $y(c){var e=function(c){for(var e=Rv(c),t=e.length;t--;){var i=e[t],n=c[i];e[t]=[i,n,Qy(n)]}return e}(c);return 1==e.length&&e[0][2]?Jy(e[0][0],e[0][1]):function(t){return t===c||function(c,e,t,i){var n=t.length,r=n;if(null==c)return!r;for(c=Object(c);n--;){var s=t[n];if(s[2]?s[1]!==c[s[0]]:!(s[0]in c))return!1}for(;++n<r;){var a=(s=t[n])[0],o=c[a],f=s[1];if(s[2]){if(void 0===o&&!(a in c))return!1}else if(!Ky(f,o,3,i,new uy))return!1}return!0}(t,0,e)}}function c_(c,e){return null!=c&&e in Object(c)}function e_(c,e){return null!=c&&function(c,e,t){for(var i=-1,n=(e=Jv(e,c)).length,r=!1;++i<n;){var s=$v(e[i]);if(!(r=null!=c&&t(c,s)))break;c=c[s]}return r||++i!=n?r:!!(n=null==c?0:c.length)&&rv(n)&&Jb(s,n)&&(db(c)||uv(c))}(c,e,c_)}function t_(c,e){return Ov(c)&&Qy(e)?Jy($v(c),e):function(t){var i=function(c,e,t){var i=null==c?void 0:cy(c,e);return void 0===i?t:i}(t,c);return void 0===i&&i===e?e_(t,c):Ky(e,i,3)}}function i_(c){return Ov(c)?(e=$v(c),function(c){return null==c?void 0:c[e]}):function(c){return function(e){return cy(e,c)}}(c);var e}function n_(c){return"function"==typeof c?c:null==c?Tb:"object"==typeof c?db(c)?t_(c[0],c[1]):$y(c):i_(c)}var r_=function(c,e,t){for(var i=-1,n=Object(c),r=t(c),s=r.length;s--;){var a=r[++i];if(!1===e(n[a],a,n))break}return c};function s_(c,e){return c&&r_(c,e,Rv)}var a_,o_=(a_=s_,function(c,e){if(null==c)return c;if(!sv(c))return a_(c,e);for(var t=c.length,i=-1,n=Object(c);++i<t&&!1!==e(n[i],i,n););return c}),f_=function(){return $m.Date.now()},l_=Math.max,d_=Math.min;function h_(c,e,t){var i,n,r,s,a,o,f=0,l=!1,d=!1,h=!0;if("function"!=typeof c)throw new TypeError("Expected a function");function u(e){var t=i,r=n;return i=n=void 0,f=e,s=c.apply(r,t)}function p(c){var t=c-o;return void 0===o||t>=e||t<0||d&&c-f>=r}function g(){var c=f_();if(p(c))return m(c);a=setTimeout(g,function(c){var t=e-(c-o);return d?d_(t,r-(c-f)):t}(c))}function m(c){return a=void 0,h&&i?u(c):(i=n=void 0,s)}function b(){var c=f_(),t=p(c);if(i=arguments,n=this,o=c,t){if(void 0===a)return function(c){return f=c,a=setTimeout(g,e),l?u(c):s}(o);if(d)return clearTimeout(a),a=setTimeout(g,e),u(o)}return void 0===a&&(a=setTimeout(g,e)),s}return e=wb(e)||0,vb(t)&&(l=!!t.leading,r=(d="maxWait"in t)?l_(wb(t.maxWait)||0,e):r,h="trailing"in t?!!t.trailing:h),b.cancel=function(){void 0!==a&&clearTimeout(a),f=0,i=o=n=a=void 0},b.flush=function(){return void 0===a?s:m(f_())},b}function u_(c,e,t){(void 0!==t&&!cv(c[e],t)||void 0===t&&!(e in c))&&$b(c,e,t)}function p_(c,e){if(("constructor"!==e||"function"!=typeof c[e])&&"__proto__"!=e)return c[e]}function g_(c){return function(c,e,t){var i=!t;t||(t={});for(var n=-1,r=e.length;++n<r;){var s=e[n],a=void 0;void 0===a&&(a=c[s]),i?$b(t,s,a):tv(t,s,a)}return t}(c,Iv(c))}function m_(c,e,t,i,n,r,s){var a=p_(c,t),o=p_(e,t),f=s.get(o);if(f)u_(c,t,f);else{var l,d=r?r(a,o,t+"",c,e,s):void 0,h=void 0===d;if(h){var u=db(o),p=!u&&bv(o),g=!u&&!p&&Cv(o);d=o,u||p||g?db(a)?d=a:ob(l=a)&&sv(l)?d=function(c,e){var t=-1,i=c.length;for(e||(e=Array(i));++t<i;)e[t]=c[t];return e}(a):p?(h=!1,d=o.slice()):g?(h=!1,d=Oy(o)):d=[]:function(c){if(!ob(c)||"[object Object]"!=ab(c))return!1;var e=ry(c);if(null===e)return!0;var t=fy.call(e,"constructor")&&e.constructor;return"function"==typeof t&&t instanceof t&&oy.call(t)==ly}(o)||uv(o)?(d=a,uv(a)?d=g_(a):vb(a)&&!Pb(a)||(d=function(c){return"function"!=typeof c.constructor||ov(c)?{}:Wb(ry(c))}(o))):h=!1}h&&(s.set(o,d),n(d,o,i,r,s),s.delete(o)),u_(c,t,d)}}function b_(c,e,t,i,n){c!==e&&r_(e,function(r,s){if(n||(n=new uy),vb(r))m_(c,e,s,t,b_,i,n);else{var a=i?i(p_(c,s),r,s+"",c,e,n):void 0;void 0===a&&(a=r),u_(c,s,a)}},Iv)}var v_,y_=(v_=function(c,e,t,i){b_(c,e,t,i)},function(c,e){return Kb(nv(c,e,Tb),c+"")}(function(c,e){var t=-1,i=e.length,n=i>1?e[i-1]:void 0,r=i>2?e[2]:void 0;for(n=v_.length>3&&"function"==typeof n?(i--,n):void 0,r&&function(c,e,t){if(!vb(t))return!1;var i=typeof e;return!!("number"==i?sv(t)&&Jb(e,t.length):"string"==i&&e in t)&&cv(t[e],c)}(e[0],e[1],r)&&(n=i<3?void 0:n,i=1),c=Object(c);++t<i;){var s=e[t];s&&v_(c,s,t,n)}return c}));function __(c,e){var t=-1,i=sv(c)?Array(c.length):[];return o_(c,function(c,n,r){i[++t]=e(c,n,r)}),i}function x_(c,e){return Ky(c,e)}function S_(c){return"number"==typeof c||ob(c)&&"[object Number]"==ab(c)}function w_(c,e,t,i){if(!vb(c))return c;for(var n=-1,r=(e=Jv(e,c)).length,s=r-1,a=c;null!=a&&++n<r;){var o=$v(e[n]),f=t;if("__proto__"===o||"constructor"===o||"prototype"===o)return c;if(n!=s){var l=a[o];void 0===(f=void 0)&&(f=vb(l)?l:Jb(e[n+1])?[]:{})}tv(a,o,f),a=a[o]}return c}function C_(c,e){return function(c,e,t){for(var i=-1,n=e.length,r={};++i<n;){var s=e[i],a=cy(c,s);t(a,s)&&w_(r,Jv(s,c),a)}return r}(c,e,function(e,t){return e_(c,t)})}var A_=function(c){return Kb(nv(c,void 0,ny),c+"")}(function(c,e){return null==c?{}:C_(c,e)}),T_=function(c){var e=Math[c];return function(c,t){if(c=wb(c),(t=null==t?0:hy(Ab(t),292))&&dy(c)){var i=(Qv(c)+"e").split("e");return+((i=(Qv(e(i[0]+"e"+(+i[1]+t)))+"e").split("e"))[0]+"e"+(+i[1]-t))}return e(c)}}("round");function P_(c,e,t){var i=!0,n=!0;if("function"!=typeof c)throw new TypeError("Expected a function");return vb(t)&&(i="leading"in t?!!t.leading:i,n="trailing"in t?!!t.trailing:n),h_(c,e,{leading:i,maxWait:e,trailing:n})}function M_(c){return c<.5?4*c*c*c:(c-1)*(2*c-2)*(2*c-2)+1}function E_(c,e=2){if(null==c)return c;if(S_(c))return T_(c,e);if(db(c))return i=c=>E_(c,e),(db(t=c)?lb:__)(t,n_(i));var t,i;if(vb(c)){const t=["x","y","rotation"];return function(c,e){var t={};return e=n_(e),s_(c,function(c,i,n){$b(t,i,e(c,i,n))}),t}(c,(c,i)=>S_(c)&&t.includes(i)?T_(c,e):c)}return c}const R_=Object.freeze(Object.defineProperty({__proto__:null,convertStructuredRoomPropertyToRoomPropertyArray:c=>{const{ids:e,yMops:t,orders:i,cleanCounts:n,names:r,floorTypes:s,num:a}=c,o=[],f=a||e.length;for(let l=0;l<f;l++)o.push({id:null==e?void 0:e[l],yMop:null==t?void 0:t[l],order:null==i?void 0:i[l],cleanTimes:null==n?void 0:n[l],suction:1,cistern:1,name:null==r?void 0:r[l],floorType:null==s?void 0:s[l],cleanMode:0});return o},decodeRoomProperties:(c,e)=>{var t;return(null!=(t=kp(c))?t:[]).map(c=>{var t;return __spreadValues({id:c.roomId,name:c.name,cleanTimes:c.sweepTimes,order:c.order,floorType:c.floorMaterial,yMop:c.yMop?1:0,suction:c.suction,cistern:c.cistern,cleanMode:c.sweepForbidden||c.mopForbidden?c.sweepForbidden?2:1:0},null!=(t=null==e?void 0:e(c.reservedStr))?t:{})})},easeIn:function(c){return c*c},easeInOut:function(c){return c<.5?2*c*c:(4-2*c)*c-1},easeInOutCubic:M_,easeOut:function(c){return c*(2-c)},fixPrecision:E_,offsetPointsToAvoidOverlap:(c,e,t=20)=>{const i=[...c];let n=0;for(;n<t;){if(!e.some(c=>{return t=c,(e=i).length===t.length&&e.every((c,e)=>{const i=t[e];return c.x===i.x&&c.y===i.y});var e,t}))break;n++,i.forEach(c=>{c.x+=5,c.y+=5})}return i}},Symbol.toStringTag,{value:"Module"})),k_=["warn","error"],F_="%c[ray-2d-laser-map-sdk]%c ";let I_={},B_=!1;function D_(c){if(c)try{return c()}catch(e){return}}function O_(c){I_=__spreadValues(__spreadValues({},I_),c),B_=!1}function L_(){const c=D_(I_.getLoggerConfig);if("string"==typeof(null==c?void 0:c.tag)&&c.tag.length>0)return c.tag;const e=D_(I_.getTag);return"string"==typeof e&&e.length>0?e:"ray-robot-map-sdk"}function z_(c,e,t){return{level:c,message:e,data:t,tag:L_(),ts:Date.now()}}function G_(c){if(!function(c){var e,t;const i=D_(I_.getLoggerConfig);if("boolean"==typeof(null==i?void 0:i.appLogEnabled))return!!i.appLogEnabled&&(null!=(e=i.appLogLevels)?e:k_).includes(c);return!!D_(I_.isAppLogEnabled)&&(null!=(t=D_(I_.getAppLogLevels))?t:k_).includes(c)}(c.level))return;const{appLogSink:e}=I_;if("function"==typeof e)try{e(c)}catch(t){if(B_)return;B_=!0,console.warn("[ray-robot-map-sdk] app logger bridge failed",t)}}function U_(c,e,t,i,n,r){(function(){const c=D_(I_.getLoggerConfig);if("boolean"==typeof(null==c?void 0:c.enabled))return c.enabled;const e=D_(I_.isEnabled);if("boolean"==typeof e)return e;const t=D_(I_.getLegacyEnabled);return"boolean"==typeof t&&t})()&&console[c](`${e}${n}`,t,i,...r)}const V_={log(c,...e){const t=z_("info",c,e);U_("log",F_,"background: #2196F3; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;","color: #2196F3;",c,e),G_(t)},warn(c,...e){const t=z_("warn",c,e);U_("warn",F_,"background: #FF9800; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;","color: #FF9800;",c,e),G_(t)},error(c,...e){const t=z_("error",c,e);U_("error",F_,"background: #F44336; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;","color: #F44336;",c,e),G_(t)},debug(c,...e){const t=z_("debug",c,e);U_("log","%c[ray-2d-laser-map-sdk:DEBUG]%c ","background: #9C27B0; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;","color: #9C27B0;",c,e),G_(t)},success(c,...e){U_("log",F_,"background: #4CAF50; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;","color: #4CAF50;",c,e)}},N_=c=>c.map(c=>({x:c.x,y:c.y})),W_=(c,e)=>({x:c,y:e}),H_=c=>{if(c.length<=1)return[...c];const e=j_(c),t=e.slice(1).map((c,t)=>({prev:e[t],current:c})),i=new Map;return t.forEach(({prev:c,current:e})=>{Y_(c,e).forEach(c=>{const e=`${c.x},${c.y}`;i.has(e)||i.set(e,c)})}),Array.from(i.values())},j_=c=>{if(c.length<=1)return[...c];const e=c[0],t=c[c.length-1];return e.x===t.x&&e.y===t.y?[...c]:[...c,e]},Y_=(c,e)=>{const t=[],i=Math.abs(e.x-c.x),n=Math.abs(e.y-c.y),r=c.x<e.x?1:-1,s=c.y<e.y?1:-1;let a=i-n,o=c.x,f=c.y;for(;t.push({x:o,y:f}),o!==e.x||f!==e.y;){const c=2*a;c>-n&&(a-=n,o+=r),c<i&&(a+=i,f+=s)}return t},X_=(c,e)=>{let t=0,i=c.length-1;for(;t<=i;){const n=Math.floor((t+i)/2),r=c[n];if(r===e)return!0;r<e?t=n+1:i=n-1}return!1},Z_=(c,e,t=1,i=2e3)=>{const n=[],r=e.x-c.x,s=e.y-c.y,a=Math.sqrt(r*r+s*s);if(0===a)return[c];const o=Math.min(Math.max(Math.ceil(a/t),2),i);for(let f=0;f<=o;f++){const e=f/o,t={x:c.x+e*r,y:c.y+e*s};n.push(t)}return n},q_=c=>{if(c=c.replace(/\s/g,""),!/^[0-9a-fA-F]+$/.test(c))throw new Error("Invalid hex string");const e=c.substring(0,8),t=parseInt(e,16),i=[],n=new Set;let r=8;for(let s=0;s<t&&r+10<=c.length;s++){const e=c.substring(r,r+2),t=parseInt(e,16);r+=2;const s=c.substring(r,r+4);let a=parseInt(s,16);a>32767&&(a-=65536),r+=4;const o=c.substring(r,r+4);let f=parseInt(o,16);f>32767&&(f-=65536),r+=4,a&=-2,f&=-2;const l=Number((a/10).toFixed(1)),d=Number((-f/10).toFixed(1)),h=`${l},${d}`;n.has(h)||(n.add(h),i.push({signal:t,x:l,y:d}))}return i.length<t&&V_.debug(`Info: Filtered ${t-i.length} duplicate points. Original: ${t}, Unique: ${i.length}`),i},K_=(c,e,t,i,n,r=8)=>{const s={x:(e+i)/2,y:(t+n)/2},a=i-e,o=n-t,f=Math.min(r,.2*Math.min(a,o));if(ex(s,c)){if(J_(s,c)>=f)return s}return Q_(c,s,f)},Q_=(c,e,t)=>{const{minX:i,minY:n,maxX:r,maxY:s}=nx(c),a=r-i,o=s-n,f=e.x,l=e.y,d=Math.min(.5,.05*Math.min(a,o)),h=[];if(ex({x:f,y:l},c)){const e=J_({x:f,y:l},c);h.push({point:{x:f,y:l},distance:e,centerDistance:0})}const u=.6*Math.max(a,o),p=Math.PI/16;let g=0;let m=!1;for(let b=d;b<=u&&!m;b+=d){const e=p*(1+b/u);for(let d=0;d<2*Math.PI;d+=e){if(g++,g>1e4){V_.error(`[findBestInnerPoint] Iteration limit reached (${g}). Room size: ${a}x${o}`),m=!0;break}const e=f+b*Math.cos(d),u=l+b*Math.sin(d);if(e>=i&&e<=r&&u>=n&&u<=s){const i={x:e,y:u};if(ex(i,c)){const n=J_(i,c),r=fx({x:e,y:u},{x:f,y:l});n>=t&&h.push({point:i,distance:n,centerDistance:r})}}}if(h.length>=15)break}if(h.length>0){const c=h.map(c=>__spreadProps(__spreadValues({},c),{score:1.5*c.distance-.5*c.centerDistance}));return c.sort((c,e)=>e.score-c.score),c[0].point}if(0===h.length){let e={x:f,y:l},t=0;const h=2*d;let u=0;const p=5e3;let g=!1;for(let f=i;f<=r&&!g;f+=h)for(let i=n;i<=s;i+=h){if(u++,u>p){V_.error(`[findBestInnerPoint] Coarse search iteration limit reached. Room size: ${a}x${o}`),g=!0;break}const n={x:f,y:i};if(ex(n,c)){const i=J_(n,c);i>t&&(t=i,e=n)}}return e}return{x:f,y:l}},J_=(c,e)=>{let t=1/0;for(let i=0,n=e.length-1;i<e.length;n=i++){const r=e[n],s=e[i],a=cx(c,r,s);t=Math.min(t,a)}return t},$_=(c,e)=>1===e.length?fx(c,e[0]):2===e.length?cx(c,e[0],e[1]):4===e.length?ex(c,e)?0:J_(c,e):(V_.warn(`[Distance] Invalid geometry: expected 1, 2 or 4 points, got ${e.length}`),1/0),cx=(c,e,t)=>{const i=__pow(e.x-t.x,2)+__pow(e.y-t.y,2);if(0===i)return fx(c,e);const n=Math.max(0,Math.min(1,((c.x-e.x)*(t.x-e.x)+(c.y-e.y)*(t.y-e.y))/i)),r=e.x+n*(t.x-e.x),s=e.y+n*(t.y-e.y);return fx(c,{x:r,y:s})},ex=(c,e,t=!1)=>{if(e.length<3)return!1;if(t&&tx(c,e))return!0;let i=!1;for(let n=0,r=e.length-1;n<e.length;r=n++){const t=e[n].x,s=e[n].y,a=e[r].x,o=e[r].y;s>c.y!=o>c.y&&c.x<(a-t)*(c.y-s)/(o-s)+t&&(i=!i)}return i},tx=(c,e)=>{if(e.length<2)return!1;for(let t=0;t<e.length;t++){const i=(t+1)%e.length;if(ix(c,e[t],e[i]))return!0}return!1},ix=(c,e,t,i=.5)=>{if(cx(c,e,t)>i)return!1;const n=Math.min(e.x,t.x)-i,r=Math.max(e.x,t.x)+i,s=Math.min(e.y,t.y)-i,a=Math.max(e.y,t.y)+i;return c.x>=n&&c.x<=r&&c.y>=s&&c.y<=a},nx=c=>{if(0===c.length)return{minX:0,minY:0,maxX:0,maxY:0};let e=1/0,t=1/0,i=-1/0,n=-1/0;for(const r of c)e=Math.min(e,r.x),t=Math.min(t,r.y),i=Math.max(i,r.x),n=Math.max(n,r.y);return{minX:e,minY:t,maxX:i,maxY:n}},rx=c=>{const e=c.reduce((c,e)=>({x:c.x+e.x,y:c.y+e.y}),{x:0,y:0});return{x:e.x/c.length,y:e.y/c.length}},sx=(c,e,t)=>{if(c.length<4)return c;const[i,n,,r]=c,s=fx(i,n),a=fx(i,r);if(!(s<e||a<e)&&!(null!=t&&(s>t||a>t)))return c;const o=rx(c),f=hx(dx(i,n)),l=hx(dx(i,r)),d=c=>{let i=c;return null!=t&&(i=Math.min(i,t)),Math.max(i,e)},h=d(s)/2,u=d(a)/2;return[W_(o.x-f.x*h-l.x*u,o.y-f.y*h-l.y*u),W_(o.x+f.x*h-l.x*u,o.y+f.y*h-l.y*u),W_(o.x+f.x*h+l.x*u,o.y+f.y*h+l.y*u),W_(o.x-f.x*h+l.x*u,o.y-f.y*h+l.y*u)]},ax=c=>{if(4!==c.length)return c;const e=rx(c),t=fx(c[0],c[1]),i=fx(c[1],c[2]),n=Math.atan2(c[1].y-c[0].y,c[1].x-c[0].x),r=[{x:-t/2,y:-i/2},{x:t/2,y:-i/2},{x:t/2,y:i/2},{x:-t/2,y:i/2}],s=Math.cos(n),a=Math.sin(n);return r.map(c=>W_(c.x*s-c.y*a+e.x,c.x*a+c.y*s+e.y))},ox=(c,e,t,i=10,n)=>{if(0===t)return 1;const r=(c.x*e.x+c.y*e.y)/t/t,s=i/t;if(r<=0)return s;let a=r;if(null!=n){const c=n/t;a=Math.min(a,c)}return Math.max(a,s)},fx=(c,e)=>{const t=c.x-e.x,i=c.y-e.y;return Math.sqrt(t*t+i*i)},lx=c=>Math.sqrt(c.x*c.x+c.y*c.y),dx=(c,e)=>({x:e.x-c.x,y:e.y-c.y}),hx=c=>{const e=lx(c);return 0===e?{x:0,y:0}:{x:c.x/e,y:c.y/e}},ux=(c,e)=>{const t=dx(c,e);return hx(t)},px=c=>({x:-c.y,y:c.x}),gx=(c,e)=>{const t=ux(c,e);return px(t)},mx=(c,e)=>{const t=hx(c),i=hx(e),n={x:(t.x+i.x)/2,y:(t.y+i.y)/2};return hx(n)},bx=(c,e,t=0)=>{const i=dx(c,e);let n=Math.atan2(i.y,i.x);let r=(n+t)%(2*Math.PI);return r>Math.PI&&(r-=2*Math.PI),r<-Math.PI&&(r+=2*Math.PI),(r>Math.PI/2||r<-Math.PI/2)&&(n+=Math.PI),n},vx=(c,e,t)=>{const i=rx([c,e]),n=gx(c,e);return{x:i.x+n.x*t,y:i.y+n.y*t}},yx=(c,e,t)=>{const i=Math.cos(t),n=Math.sin(t),r=c.x-e.x,s=c.y-e.y;return{x:r*i-s*n+e.x,y:r*n+s*i+e.y}},_x=(c,e,t)=>c.map(c=>yx(c,e,t)),xx=(c,e,t)=>{if(0===fx(c,e))return[c,c,c,c];const i=ux(c,e),n=px(i),r=c.x-i.x*t,s=c.y-i.y*t,a=e.x+i.x*t,o=e.y+i.y*t;return[{x:r+n.x*t,y:s+n.y*t},{x:a+n.x*t,y:o+n.y*t},{x:a-n.x*t,y:o-n.y*t},{x:r-n.x*t,y:s-n.y*t}]},Sx=(c,e)=>{if(c.length<3)return c;const t=[];for(let i=0;i<c.length;i++){const n=c[i],r=c[(i+1)%c.length],s=c[(i-1+c.length)%c.length],a=dx(n,r);if(0===lx(a)){t.push(n);continue}const o=hx(a),f={x:o.y,y:-o.x},l=dx(s,n);let d={x:0,y:0};if(lx(l)>0){const c=hx(l);d={x:c.y,y:-c.x}}const h=mx(d,f),u=d.x*f.x+d.y*f.y,p=1/Math.max(.1,Math.sqrt((1+u)/2)),g={x:n.x+h.x*e*p,y:n.y+h.y*e*p};t.push(g)}return t},wx=(c,e,t)=>{if(0===fx(c,e))return[];const i=gx(c,e),n=t/2;return[c.x+i.x*n,c.y+i.y*n,e.x+i.x*n,e.y+i.y*n,e.x-i.x*n,e.y-i.y*n,c.x-i.x*n,c.y-i.y*n]},Cx=(c,e,t,i)=>{const n=dx(c,e),r=dx(c,t),s=mx(n,r),a=-s.x,o=-s.y;return{x:c.x+a*i,y:c.y+o*i}},Ax=(c,e,t,i,n,r)=>{const s=new Set(c),a=Tx(c,e),o=Px(a,s,e,t,i,n,r);return o||a},Tx=(c,e)=>{let t=0,i=0;for(let n=0;n<c.length;n++){const r=c[n];t+=r%e,i+=Math.floor(r/e)}return{x:t/c.length,y:i/c.length}},Px=(c,e,t,i,n,r,s)=>{const a={x:i-10,y:c.y},o={x:r+10,y:c.y},f={x:r,y:n},l={x:r,y:s},d=Mx(a,o,{x:i,y:n},{x:i,y:s}),h=Mx(a,o,f,l);if(!d||!h)return null;const u=[],p=Math.max(i,Math.min(d.x,h.x)),g=Math.min(r,Math.max(d.x,h.x)),m=Math.round(c.y);for(let b=Math.round(p);b<=Math.round(g);b++){const c=m*t+b;e.has(c)&&u.push({x:b,y:m})}if(u.length>=2){const c=Ex(u),i={x:(c.min.x+c.max.x)/2,y:(c.min.y+c.max.y)/2},n=Math.round(i.y)*t+Math.round(i.x);if(e.has(n))return i}return null},Mx=(c,e,t,i)=>{const n=(c.x-t.x)*(e.y-t.y)-(c.y-t.y)*(e.x-t.x),r=(c.x-i.x)*(e.y-i.y)-(c.y-i.y)*(e.x-i.x);if(n*r>=0)return null;const s=(t.x-c.x)*(i.y-c.y)-(t.y-c.y)*(i.x-c.x);if(s*(s+n-r)>=0)return null;const a=s/(r-n),o=a*(e.x-c.x),f=a*(e.y-c.y);return{x:c.x+o,y:c.y+f}},Ex=c=>{if(!c||0===c.length)return{min:{x:0,y:0},max:{x:0,y:0}};let e=c[0],t=c[0];const i=c=>c.x-c.y;for(let n=1;n<c.length;n++){const r=c[n];i(r)<i(e)&&(e=r),i(r)>i(t)&&(t=r)}return{min:e,max:t}},Rx=(c,e)=>({minX:Math.min(c.minX,e.minX),minY:Math.min(c.minY,e.minY),maxX:Math.max(c.maxX,e.maxX),maxY:Math.max(c.maxY,e.maxY)}),kx=c=>{if(0===c.length)return{x:0,y:0,width:0,height:0};let e=c[0].x,t=c[0].y,i=c[0].x+c[0].width,n=c[0].y+c[0].height;return c.forEach(c=>{e=Math.min(e,c.x),t=Math.min(t,c.y),i=Math.max(i,c.x+c.width),n=Math.max(n,c.y+c.height)}),{x:e,y:t,width:i-e,height:n-t}},Fx=(c,e,t)=>{let i=1/0,n=1/0,r=-1/0,s=-1/0;for(let a=0;a<c.obstacles.length;a++){const t=c.obstacles[a],o=t%e,f=Math.floor(t/e);i=Math.min(i,o),n=Math.min(n,f),r=Math.max(r,o),s=Math.max(s,f)}return c.rooms.forEach(c=>{for(let t=0;t<c.length;t++){const a=c[t],o=a%e,f=Math.floor(a/e);i=Math.min(i,o),n=Math.min(n,f),r=Math.max(r,o),s=Math.max(s,f)}}),i===1/0?{minX:0,minY:0,maxX:e,maxY:t}:{minX:Math.max(0,i),minY:Math.max(0,n),maxX:Math.min(e,r),maxY:Math.min(t,s)}},Ix=(c,e,t,i,n,r)=>{const s=t+n,a=i+r,o=Math.min(c.x,e.x),f=Math.max(c.x,e.x),l=Math.min(c.y,e.y),d=Math.max(c.y,e.y);if(f<t||o>s||d<i||l>a)return!1;if(Bx(c,t,i,n,r)||Bx(e,t,i,n,r))return!0;const h=[{x:t,y:i},{x:s,y:i},{x:s,y:a},{x:t,y:a}];for(let u=0;u<4;u++){if(Mx(c,e,h[u],h[(u+1)%4]))return!0}return!1},Bx=(c,e,t,i,n)=>c.x>=e&&c.x<=e+i&&c.y>=t&&c.y<=t+n,Dx=(c,e,t,i)=>{const n=t/2;return"horizontal"===i?[{x:c-n,y:e},{x:c+n,y:e}]:[{x:c,y:e-n},{x:c,y:e+n}]},Ox=(c,e,t)=>{const i=e.x-c.x,n=e.y-c.y,r=Math.sqrt(i*i+n*n);if(0===r)return[c,e];const s=i/r,a=n/r;return[{x:c.x-s*t,y:c.y-a*t},{x:e.x+s*t,y:e.y+a*t}]},Lx=(c,e,t)=>{const i=nx(c),n=nx(e),r=Math.max(0,Math.max(i.minX,n.minX)-Math.min(i.maxX,n.maxX)),s=Math.max(0,Math.max(i.minY,n.minY)-Math.min(i.maxY,n.maxY));if(r>t||s>t)return!1;let[a,o]=[c,e];e.length>c.length&&([a,o]=[e,c]);const f=Math.max(1,Math.floor(t)),l=new Map;for(const h of a){const c=`${Math.floor(h.x/f)},${Math.floor(h.y/f)}`;l.has(c)||l.set(c,[]),l.get(c).push(h)}const d=t*t;for(const h of o){const c=Math.floor(h.x/f),e=Math.floor(h.y/f);for(let t=-1;t<=1;t++)for(let i=-1;i<=1;i++){const n=`${c+t},${e+i}`,r=l.get(n);if(r)for(const c of r){const e=h.x-c.x,t=h.y-c.y;if(e*e+t*t<=d)return!0}}}return!1},zx=(c,e,t,i)=>{let[n,r]=[c,e];e.length>c.length&&([n,r]=[e,c]);const s=new Set(n),a=i*i;for(let o=0;o<r.length;o++){const c=r[o],e=c%t,n=Math.floor(c/t);for(let r=-i;r<=i;r++)for(let c=-i;c<=i;c++){const i=(n+c)*t+(e+r);if(s.has(i)){if(r*r+c*c<=a)return!0}}}return!1},Gx=(c,e)=>{if(c<=1)return!0;if(0===e.length)return!1;const t=Array.from({length:c},(c,e)=>e),i=Array(c).fill(0),n=c=>(t[c]!==c&&(t[c]=n(t[c])),t[c]),r=(c,e)=>{const r=n(c),s=n(e);r!==s&&(i[r]<i[s]?t[r]=s:i[r]>i[s]?t[s]=r:(t[s]=r,i[r]++))};for(const[a,o]of e)r(a,o);const s=n(0);for(let a=1;a<c;a++)if(n(a)!==s)return!1;return!0},Ux=(c,e,t,i="priority")=>{const n=new Map;if(0===c.length)return n;if(1===c.length)return n.set(c[0].id,0),n;const r=new Map;for(let f=0;f<c.length;f++){const t=c[f];r.has(t.id)||r.set(t.id,new Set);for(let i=f+1;i<c.length;i++){const n=c[i];e(t,n)&&(r.get(t.id).add(n.id),r.has(n.id)||r.set(n.id,new Set),r.get(n.id).add(t.id))}}const s=new Array(t).fill(0),a=[...c].sort((e,t)=>{const i=(r.get(e.id)||new Set).size,n=(r.get(t.id)||new Set).size,s=c.indexOf(e);return.5*-c.indexOf(t)+.5*n-(.5*-s+.5*i)}),o=c=>{const e=r.get(c)||new Set,i=new Map;for(const t of e){const c=n.get(t);void 0!==c&&(i.has(c)||i.set(c,[]),i.get(c).push(t))}for(const[a,o]of i){if(1!==o.length)continue;const e=o[0],i=r.get(e)||new Set,f=new Set;for(const t of i){if(t===c)continue;const e=n.get(t);void 0!==e&&f.add(e)}for(let c=0;c<t;c++)if(c!==a&&!f.has(c))return s[a]--,s[c]++,n.set(e,c),a}return-1};for(const f of a){const c=r.get(f.id)||new Set,e=new Set;for(const t of c){const c=n.get(t);void 0!==c&&e.add(c)}let a=-1;if("priority"===i){let i=-1,r=-1/0;for(let c=0;c<t;c++)if(!e.has(c)){const e=t-c-.7*s[c];(e>r||e===r&&c<i)&&(r=e,i=c)}if(a=i,-1===a&&(a=o(f.id)),-1===a){V_.warn(`[FourColor] Room ${f.id}: recolor failed, falling back to least-conflict color`);let e=1/0;for(let i=0;i<t;i++){let t=0;for(const e of c)n.get(e)===i&&t++;(t<e||t===e&&i<a)&&(e=t,a=i)}}s[a]++}else{const c=[];for(let i=0;i<t;i++)e.has(i)||c.push(i);if(0===c.length){if(a=o(f.id),-1===a){V_.warn(`[FourColor] Room ${f.id}: recolor failed, falling back to least-conflict color`);let c=1/0,e=0;for(let i=0;i<t;i++)(s[i]<c||s[i]===c&&i<e)&&(c=s[i],e=i);a=e}}else{a=c[0];let e=s[a];for(const t of c)(s[t]<e||s[t]===e&&t<a)&&(a=t,e=s[t])}s[a]++}n.set(f.id,a)}return n},Vx=Object.freeze(Object.defineProperty({__proto__:null,areMultipleRoomsConnected:Gx,areRasterRoomsAdjacent:zx,areStructuredRoomsAdjacent:Lx,binarySearch:X_,calculateBoundingBox:nx,calculateCenter:rx,calculateCoordinatesBetweenPoints:Y_,calculateCornerExtension:Cx,calculateLineEndpoints:Dx,calculateLineMidpointOffset:vx,calculateLineSegmentHitArea:wx,calculateLineSegmentOutline:xx,calculateMergedBounds:kx,calculateMinDistanceToBoundary:J_,calculateMinDistanceToGeometry:$_,calculatePixelWeightedCenter:Tx,calculatePolygonOutline:Sx,calculateRasterMapBounds:Fx,calculateRasterRoomCenter:Ax,calculateRoomCenterPoint:K_,calculateScaleRatio:ox,calculateUprightLineAngle:bx,createVector:dx,ensureClosedPath:j_,extendLineSegment:Ox,findBestInnerPoint:Q_,findExtremePoints:Ex,fourColorGreedyAlgorithm:Ux,generateOutlineData:H_,getBisectorDirection:mx,getDistance:fx,getPerpendicularUnitVector:gx,getPerpendicularVector:px,getUnitVector:ux,getVectorLength:lx,isPointInBox:Bx,isPointInPolygon:ex,isPointOnLineSegment:ix,isPointOnPolygonBoundary:tx,lineIntersectsBox:Ix,lineSegmentsIntersection:Mx,mergeBounds:Rx,normalizeToRectangle:ax,normalizeVector:hx,optimizeRasterCenterWithLineIntersection:Px,parseWIFIHexToCoordinates:q_,pointToSegmentDistance:cx,rotatePointAroundCenter:yx,rotatePointsAroundCenter:_x,sampleLinePoints:Z_,validateAndCorrectPoints:sx},Symbol.toStringTag,{value:"Module"})),Nx=Symbol(),Wx=Object.getPrototypeOf,Hx=new WeakMap,jx=c=>(c=>c&&(Hx.has(c)?Hx.get(c):Wx(c)===Object.prototype||Wx(c)===Array.prototype))(c)&&c[Nx]||null,Yx=(c,e=!0)=>{Hx.set(c,e)},Xx={},Zx=c=>"object"==typeof c&&null!==c,qx=(c,e)=>{const t=Jx.get(c);if((null==t?void 0:t[0])===e)return t[1];const i=Array.isArray(c)?[]:Object.create(Object.getPrototypeOf(c));return Yx(i,!0),Jx.set(c,[e,i]),Reflect.ownKeys(c).forEach(e=>{if(Object.getOwnPropertyDescriptor(i,e))return;const t=Reflect.get(c,e),{enumerable:n}=Reflect.getOwnPropertyDescriptor(c,e),r={value:t,enumerable:n,configurable:!0};if(Qx.has(t))Yx(t,!1);else if(Kx.has(t)){const[c,e]=Kx.get(t);r.value=qx(c,e())}Object.defineProperty(i,e,r)}),Object.preventExtensions(i)},Kx=new WeakMap,Qx=new WeakSet,Jx=new WeakMap,$x=[1],cS=new WeakMap;let eS=Object.is,tS=(c,e)=>new Proxy(c,e),iS=c=>Zx(c)&&!Qx.has(c)&&(Array.isArray(c)||!(Symbol.iterator in c))&&!(c instanceof WeakMap)&&!(c instanceof WeakSet)&&!(c instanceof Error)&&!(c instanceof Number)&&!(c instanceof Date)&&!(c instanceof String)&&!(c instanceof RegExp)&&!(c instanceof ArrayBuffer)&&!(c instanceof Promise),nS=qx,rS=(c,e,t,i)=>({deleteProperty(c,e){const n=Reflect.get(c,e);t(e);const r=Reflect.deleteProperty(c,e);return r&&i(["delete",[e],n]),r},set(n,r,s,a){const o=!c()&&Reflect.has(n,r),f=Reflect.get(n,r,a);if(o&&(eS(f,s)||cS.has(s)&&eS(f,cS.get(s))))return!0;t(r),Zx(s)&&(s=jx(s)||s);const l=!Kx.has(s)&&iS(s)?sS(s):s;return e(r,l),Reflect.set(n,r,l,a),i(["set",[r],s,f]),!0}});function sS(c={}){if(!Zx(c))throw new Error("object required");const e=cS.get(c);if(e)return e;let t=$x[0];const i=new Set,n=(c,e=++$x[0])=>{t!==e&&(r=t=e,i.forEach(t=>t(c,e)))};let r=t;const s=c=>(e,t)=>{const i=[...e];i[1]=[c,...i[1]],n(i,t)},a=new Map;let o=!0;const f=rS(()=>o,(c,e)=>{const t=!Qx.has(e)&&Kx.get(e);if(t){if("production"!==(Xx?"production":void 0)&&a.has(c))throw new Error("prop listener already exists");if(i.size){const e=t[2](s(c));a.set(c,[t,e])}else a.set(c,[t])}},c=>{var e;const t=a.get(c);t&&(a.delete(c),null==(e=t[1])||e.call(t))},n),l=tS(c,f);cS.set(c,l);const d=[c,(c=$x[0])=>(r!==c&&(r=c,a.forEach(([e])=>{const i=e[1](c);i>t&&(t=i)})),t),c=>{i.add(c),1===i.size&&a.forEach(([c,e],t)=>{if("production"!==(Xx?"production":void 0)&&e)throw new Error("remove already exists");const i=c[2](s(t));a.set(t,[c,i])});return()=>{i.delete(c),0===i.size&&a.forEach(([c,e],t)=>{e&&(e(),a.set(t,[c]))})}}];return Kx.set(l,d),Reflect.ownKeys(c).forEach(e=>{const t=Object.getOwnPropertyDescriptor(c,e);"value"in t&&t.writable&&(l[e]=c[e])}),o=!1,l}function aS(c,e,t){const i=Kx.get(c);let n;"production"===(Xx?"production":void 0)||i||console.warn("Please use proxy object");const r=[],s=i[2];let a=!1;const o=s(c=>{r.push(c),n||(n=Promise.resolve().then(()=>{n=void 0,a&&e(r.splice(0))}))});return a=!0,()=>{a=!1,o()}}function oS(c,e,t,i){let n=c[e];return aS(c,()=>{const i=c[e];Object.is(n,i)||t(n=i)})}class fS extends xe{constructor(c){super(),__publicField(this,"dragStart",null),__publicField(this,"initialTouchDistance",null),__publicField(this,"initialScale",null),__publicField(this,"activeTouches",new Map),__publicField(this,"firstTouchId",null),__publicField(this,"secondTouchId",null),__publicField(this,"taintedPointers",new Set),__publicField(this,"zoomFactor",.8),__publicField(this,"scaleMin",.2),__publicField(this,"scaleMax",5),__publicField(this,"originalPosition",{x:0,y:0}),__publicField(this,"targetPosition",{x:0,y:0}),__publicField(this,"centerPosition",{x:0,y:0}),__publicField(this,"originalScale",{x:1,y:1}),__publicField(this,"targetScale",{x:1,y:1}),__publicField(this,"defaultScale",{x:1,y:1}),__publicField(this,"transitionDuration",500),__publicField(this,"transitionStartTime",null),__publicField(this,"initialPinchCenter",null),__publicField(this,"isGestureValid",!0),__publicField(this,"lastTapTime",0),__publicField(this,"doubleTapDelay",300),__publicField(this,"doubleTapZoomFactor",1.5),__publicField(this,"lastTapPosition",null),__publicField(this,"tapDistanceThreshold",20),__publicField(this,"tapDetectionEnabled",!0),__publicField(this,"mapClickStartPosition",null),__publicField(this,"mapClickStartTime",0),__publicField(this,"mapClickTimeThreshold",300),__publicField(this,"mapClickMoveThreshold",10),__publicField(this,"shouldSuppressMapClick",!1),__publicField(this,"isGestureHijacked",!1),__publicField(this,"hijackedPointerId",null),__publicField(this,"isHijackPaused",!1),__publicField(this,"activeGestureSession",null),__publicField(this,"interactionGraphics"),__publicField(this,"viewportBounds"),__publicField(this,"boundResetAnimation"),__publicField(this,"debouncedStopWheelRender"),__publicField(this,"debouncedLogWheelScale"),__publicField(this,"interactionState",{isInteracting:!1,isAnimating:!1,interactionTimer:null,renderReasons:new Set}),__publicField(this,"throttledAntiScale"),__publicField(this,"unsubscribeEnableInteraction",null),__publicField(this,"suppressMapClick",()=>{this.shouldSuppressMapClick=!0}),__publicField(this,"handleGestureHijacked",c=>{var e,t;this.isGestureHijacked=!0,this.hijackedPointerId=c.pointerId,this.isHijackPaused=!1,this.clearTouches();const i=c.global.x-this.viewportBounds.x,n=c.global.y-this.viewportBounds.y;this.activeTouches.set(c.pointerId,{x:i,y:n}),this.firstTouchId=c.pointerId,this.dragStart={x:i,y:n},null==(t=null==(e=this.appService.events)?void 0:e.onGestureStart)||t.call(e)}),this.appService=c;const e=c.getApp();this.viewportBounds=e.getViewportBounds(),this.eventMode="static",this.unsubscribeEnableInteraction=oS(c.runtime,"enableInteraction",c=>{this.updateInteractionMode(c)}),this.updateInteractionMode(c.runtimeSnapshot.enableInteraction),this.interactionGraphics=new _o,this.interactionGraphics.rect(0,0,this.viewportBounds.width,this.viewportBounds.height).fill({color:"#ffffff",alpha:0}),this.addChild(this.interactionGraphics),this.scaleMax=e.scaleMax,this.scaleMin=e.scaleMin,this.centerPosition={x:Math.round(this.viewportBounds.width/2),y:Math.round(this.viewportBounds.height/2)},this.originalPosition={x:Math.round(this.viewportBounds.width/2),y:Math.round(this.viewportBounds.height/2)},this.targetPosition={x:Math.round(this.viewportBounds.width/2),y:Math.round(this.viewportBounds.height/2)},this.throttledAntiScale=P_(c=>{this.appService.emitter.emit("antiScale",c)},16,{leading:!0,trailing:!0}),this.boundResetAnimation=this.resetAnimation.bind(this),this.debouncedStopWheelRender=h_(()=>{e.stopRender("wheel")},300),this.debouncedLogWheelScale=h_(c=>{V_.debug("[Interaction] 滚轮缩放完成 - Scale:",c.toFixed(3))},500),this.setupInteraction()}updateInteractionMode(c){this.eventMode=c?"static":"none",V_.debug("[Interaction] 交互模式已更新: "+(c?"启用":"禁用"))}setupInteraction(){this.on("pointerdown",c=>this.onPointerDown(c)),this.on("pointerup",c=>this.onPointerUp(c)),this.on("pointerupoutside",c=>this.onPointerUp(c)),this.on("pointermove",c=>this.onPointerMove(c)),this.on("wheel",c=>this.onWheel(c)),document.addEventListener("pointercancel",c=>{V_.debug("[Interaction] Received global pointercancel"),this.handleGlobalCancel(c)})}handleGlobalCancel(c){const e=this.appService;if(this.isGestureHijacked){V_.debug("[Interaction] 系统取消或移出视口,强制结束劫持手势");const t=e.getApp(),i=new Na(t.renderer.events);i.pointerId=c.pointerId,this.dispatchGestureEnd(i),this.exitGestureHijacked()}this.clearTouches()}resetPan(c){const e=this.appService,t=e.getApp(),i=e.appContainer;null!==this.transitionStartTime&&(t.ticker.remove(this.boundResetAnimation),this.transitionStartTime=null);const n=this.centerPosition.x-c.x*i.scale.x,r=this.centerPosition.y-c.y*i.scale.y;this.originalPosition={x:i.x,y:i.y},this.targetPosition={x:n,y:r},this.originalScale={x:i.scale.x,y:i.scale.y},this.targetScale={x:i.scale.x,y:i.scale.y};const s=Math.sqrt(__pow(i.x-n,2)+__pow(i.y-r,2)),a=(o=s,Math.pow(Math.min(1,o/1e3),.5));var o;this.transitionDuration=500+1e3*Math.min(1,Math.pow(a,2)),this.transitionStartTime=t.ticker.lastTime,t.ticker.add(this.boundResetAnimation)}setPanZoom({targetPosition:c,targetScale:e,setCenter:t=!1,setScale:i=!1}={},n=!0){const r=this.appService,s=r.getApp(),a=r.appContainer;if(t&&c&&(this.centerPosition={x:c.x,y:c.y},V_.debug("[Interaction] Set center position:",this.centerPosition)),i&&e&&(this.defaultScale={x:e.x,y:e.y},V_.debug("[Interaction] Set scale:",this.defaultScale)),this.originalPosition={x:a.x,y:a.y},this.originalScale={x:a.scale.x,y:a.scale.y},this.targetPosition=c||{x:this.centerPosition.x,y:this.centerPosition.y},this.targetScale=e||this.defaultScale,!n)return a.position.set(this.targetPosition.x,this.targetPosition.y),a.scale.set(this.targetScale.x,this.targetScale.y),this.antiScale(this.targetScale.x),null!==this.transitionStartTime&&(s.ticker.remove(this.boundResetAnimation),this.transitionStartTime=null),void V_.debug("[Interaction] 直接设置缩放完成 - Scale:",this.targetScale.x.toFixed(3));const o=Math.sqrt(__pow(a.x-this.targetPosition.x,2)+__pow(a.y-this.targetPosition.y,2));var f;var l,d;const h=.8*(f=o,Math.pow(Math.min(1,f/1e3),.5))+.2*(l=a.scale.x,d=this.targetScale.x,Math.pow(Math.min(1,Math.abs(l-d)/Math.abs(-.8)),.5));this.transitionDuration=500+1e3*Math.min(1,Math.pow(h,2)),null!==this.transitionStartTime&&(s.ticker.remove(this.boundResetAnimation),this.interactionState.isAnimating=!1,s.stopRender("animation")),this.interactionState.isAnimating=!0,s.requestRender("animation",!0),this.transitionStartTime=s.ticker.lastTime,s.ticker.add(this.boundResetAnimation)}clearTouches(){var c,e;const t=this.appService.getApp();this.activeTouches.clear(),this.firstTouchId=null,this.secondTouchId=null,this.dragStart=null,this.initialTouchDistance=null,this.initialScale=null,this.initialPinchCenter=null,this.isGestureValid=!0,this.taintedPointers.clear(),null!==this.transitionStartTime&&(t.ticker.remove(this.boundResetAnimation),this.transitionStartTime=null),this.interactionState.isInteracting&&(this.interactionState.isInteracting=!1,null==(e=null==(c=this.appService.events)?void 0:c.onGestureEnd)||e.call(c)),t.stopRender("interaction")}checkEventListeners(){return{wheel:this.listenerCount("wheel"),pointerdown:this.listenerCount("pointerdown"),pointerup:this.listenerCount("pointerup"),pointerupoutside:this.listenerCount("pointerupoutside"),pointermove:this.listenerCount("pointermove")}}destroy(){this.checkEventListeners(),this.interactionState.interactionTimer&&clearTimeout(this.interactionState.interactionTimer),this.interactionState.renderReasons.clear(),this.interactionState.isInteracting=!1,this.interactionState.isAnimating=!1,this.debouncedStopWheelRender.cancel(),this.debouncedLogWheelScale.cancel(),this.unsubscribeEnableInteraction&&(this.unsubscribeEnableInteraction(),this.unsubscribeEnableInteraction=null),this.releaseGestureSession(),super.destroy()}hijack(c){if(this.activeGestureSession)throw new Error("[Interaction] A gesture session is already live; hijack is exclusive");this.handleGestureHijacked(c);const e={moveCallbacks:[],endCallbacks:[],ended:!1,session:null},t={onMove:c=>{e.ended||e.moveCallbacks.push(c)},onEnd:c=>{e.ended||e.endCallbacks.push(c)},cancel:()=>{this.activeGestureSession!==e||e.ended||(this.dispatchGestureEnd(c),this.exitGestureHijacked())}};return e.session=t,this.activeGestureSession=e,t}dispatchGestureMove(c){const e=this.activeGestureSession;if(e&&!e.ended)for(const t of e.moveCallbacks)t(c)}dispatchGestureEnd(c){const e=this.activeGestureSession;if(!e||e.ended)return;e.ended=!0;const t=e.endCallbacks;this.activeGestureSession=null;for(const i of t)i(c)}releaseGestureSession(){this.activeGestureSession&&(this.activeGestureSession.ended=!0,this.activeGestureSession=null)}exitGestureHijacked(){var c,e;const t=this.appService;null===this.hijackedPointerId||this.isHijackPaused||(this.activeTouches.delete(this.hijackedPointerId),this.firstTouchId===this.hijackedPointerId&&(this.firstTouchId=null,this.dragStart=null),this.secondTouchId===this.hijackedPointerId&&(this.secondTouchId=null)),this.isGestureHijacked=!1,this.hijackedPointerId=null,this.isHijackPaused=!1,null==(e=null==(c=t.events)?void 0:c.onGestureEnd)||e.call(c)}forceEndGesture(){if(this.isGestureHijacked){V_.debug("[Interaction] 强制结束劫持手势");const c=this.appService.getApp(),e=new Na(c.renderer.events);e.pointerId=this.hijackedPointerId,this.dispatchGestureEnd(e),this.exitGestureHijacked()}this.clearTouches()}pauseGestureHijack(){this.isHijackPaused=!0}resumeGestureHijack(){this.isHijackPaused=!1}antiScale(c){this.throttledAntiScale(c)}resetAnimation(){const c=this.appService,e=c.getApp(),t=c.appContainer;if(null===this.transitionStartTime)return;const{targetPosition:i,targetScale:n}=this,r=e.ticker.lastTime,s=Math.min(1,(r-this.transitionStartTime)/this.transitionDuration);if(s>=1)t.position.set(i.x,i.y),t.scale.set(n.x,n.y),this.antiScale(n.x),e.ticker.remove(this.boundResetAnimation),this.transitionStartTime=null,this.interactionState.isAnimating=!1,e.stopRender("animation"),V_.debug("[Interaction] 动画缩放完成 - Scale:",t.scale.x.toFixed(3));else{const c=M_(s),e=this.originalPosition.x+(i.x-this.originalPosition.x)*c,r=this.originalPosition.y+(i.y-this.originalPosition.y)*c,a=this.originalScale.x+(n.x-this.originalScale.x)*c,o=this.originalScale.y+(n.y-this.originalScale.y)*c;t.position.set(e,r),t.scale.set(a,o),this.antiScale(a)}}onWheel(c){const e=this.appService;if(this.isGestureHijacked)return void V_.warn("⚠️ [onWheel] 被手势劫持阻止执行",{isGestureHijacked:this.isGestureHijacked,hijackedPointerId:this.hijackedPointerId,isHijackPaused:this.isHijackPaused});e.getApp().requestRender("wheel",!0),this.debouncedStopWheelRender();const{scaleMin:t,scaleMax:i}=this,n=e.appContainer;c.preventDefault();const r=c.global.x-this.viewportBounds.x,s=c.global.y-this.viewportBounds.y,a=(r-n.x)/n.scale.x,o=(s-n.y)/n.scale.y,f=c.deltaY>0?.95:1.05;let l=n.scale.x*f,d=n.scale.y*f;l=Math.max(t,Math.min(i,l)),d=Math.max(t,Math.min(i,d));if(!(l!==n.scale.x||d!==n.scale.y))return;const h=r-a*l,u=s-o*d;try{n.scale.set(l,d),n.position.set(h,u),this.antiScale(l),this.debouncedLogWheelScale(l)}catch(p){V_.error("❌ [onWheel] 应用缩放时发生错误:",p)}}onPointerDown(c){var e,t;const i=this.appService;this.interactionState.isInteracting||(this.interactionState.isInteracting=!0,i.getApp().requestRender("interaction",!0),null==(t=null==(e=i.events)?void 0:e.onGestureStart)||t.call(e)),this.isGestureHijacked&&(c.pointerId===this.hijackedPointerId||this.isHijackPaused||this.pauseGestureHijack());const n=i.getApp(),r=i.appContainer;null!==this.transitionStartTime&&(n.ticker.remove(this.boundResetAnimation),this.transitionStartTime=null),0===this.activeTouches.size&&this.taintedPointers.size>0&&(V_.debug("[Interaction] 清除污染指针列表,准备新手势",Array.from(this.taintedPointers)),this.taintedPointers.clear()),0===this.activeTouches.size&&(this.isGestureValid=!0,this.initialTouchDistance=null,this.initialScale=null,this.initialPinchCenter=null,this.dragStart=null,this.firstTouchId=null,this.secondTouchId=null),this.activeTouches.has(c.pointerId)&&1===this.activeTouches.size&&(this.isGestureValid=!0);const s=c.global.x-this.viewportBounds.x,a=c.global.y-this.viewportBounds.y;this.activeTouches.set(c.pointerId,{x:s,y:a});const o=this.activeTouches.size-this.taintedPointers.size;if(this.taintedPointers.size>0)return V_.debug("[Interaction] 存在污染指针,阻止多点触摸手势",Array.from(this.taintedPointers)),void(1!==o||this.taintedPointers.has(c.pointerId)||(this.firstTouchId=c.pointerId,this.dragStart={x:s,y:a}));if(1===this.activeTouches.size)this.firstTouchId=c.pointerId,this.dragStart={x:s,y:a},this.mapClickStartPosition={x:s,y:a},this.mapClickStartTime=performance.now();else if(2===this.activeTouches.size){const e=Array.from(this.activeTouches.keys());this.secondTouchId=e.find(c=>c!==this.firstTouchId)||c.pointerId,this.setInitialScaleAndDistance(r),this.tapDetectionEnabled=!1}}onPointerUp(c){var e,t;const i=this.appService;if(this.taintedPointers.has(c.pointerId)&&(V_.debug("[Interaction] 移除污染指针",c.pointerId),this.taintedPointers.delete(c.pointerId)),this.isGestureHijacked){if(c.pointerId===this.hijackedPointerId)return this.dispatchGestureEnd(c),void this.exitGestureHijacked();this.isHijackPaused}if(!this.activeTouches.has(c.pointerId))return;const n=null!==this.initialTouchDistance&&null!==this.initialScale;if(this.activeTouches.delete(c.pointerId),V_.debug(`[Interaction] onPointerUp, remaining touches: ${this.activeTouches.size}`),n&&1===this.activeTouches.size){this.isGestureValid=!1;const c=Array.from(this.activeTouches.keys());setTimeout(()=>{var e,t;!this.isGestureValid&&this.activeTouches.size>0&&(V_.debug("[Interaction] 100ms 缓冲结束,检测到真正的幽灵指针,标记为污染并清理",c),c.forEach(c=>{this.activeTouches.has(c)&&(this.taintedPointers.add(c),this.activeTouches.delete(c),this.firstTouchId===c&&(this.firstTouchId=null,this.dragStart=null),this.secondTouchId===c&&(this.secondTouchId=null))}),0===this.activeTouches.size&&this.interactionState.isInteracting&&(V_.debug("[Interaction] 清理幽灵指针后所有触摸点已释放,结束手势"),this.interactionState.isInteracting=!1,i.getApp().stopRender("interaction"),null==(t=null==(e=i.events)?void 0:e.onGestureEnd)||t.call(e)))},100),this.initialTouchDistance=null,this.initialScale=null,this.initialPinchCenter=null}if(c.pointerId===this.firstTouchId?(this.firstTouchId=null,this.dragStart=null,0===this.activeTouches.size&&this.tapDetectionEnabled&&this.detectDoubleTap(c),0!==this.activeTouches.size||n||this.detectMapClick(c)):c.pointerId===this.secondTouchId&&(this.secondTouchId=null),this.isGestureHijacked&&this.isHijackPaused&&1===this.activeTouches.size){Array.from(this.activeTouches.keys())[0]===this.hijackedPointerId&&this.resumeGestureHijack()}0===this.activeTouches.size&&(this.isGestureValid=!0,this.initialTouchDistance=null,this.initialScale=null,this.initialPinchCenter=null,this.firstTouchId=null,this.secondTouchId=null,this.dragStart=null,this.tapDetectionEnabled=!0,this.interactionState.isInteracting&&(this.interactionState.isInteracting=!1,i.getApp().stopRender("interaction"),null==(t=null==(e=i.events)?void 0:e.onGestureEnd)||t.call(e)))}detectDoubleTap(c){const e=this.appService,{interactionConfig:t}=e;if(!t.enableDoubleTapZoom)return;const i=performance.now(),n={x:c.global.x-this.viewportBounds.x,y:c.global.y-this.viewportBounds.y};i-this.lastTapTime<this.doubleTapDelay&&this.lastTapPosition&&fx(n,this.lastTapPosition)<this.tapDistanceThreshold?(this.handleDoubleTap(n),this.lastTapTime=0,this.lastTapPosition=null):(this.lastTapTime=i,this.lastTapPosition=n)}detectMapClick(c){var e;const t=this.appService;if(!t.runtimeSnapshot.enableMapClickCapture)return;if(!(null==(e=t.events)?void 0:e.onClickMap))return;if(!this.mapClickStartPosition)return;const i=performance.now()-this.mapClickStartTime,n={x:c.global.x-this.viewportBounds.x,y:c.global.y-this.viewportBounds.y},r=fx(this.mapClickStartPosition,n);if(i<=this.mapClickTimeThreshold&&r<=this.mapClickMoveThreshold&&!this.shouldSuppressMapClick){const c=t.appContainer,e=t.mapState,s=(n.x-c.x)/c.scale.x,a=(n.y-c.y)/c.scale.y,o={x:s-((null==e?void 0:e.origin.x)||0),y:a-((null==e?void 0:e.origin.y)||0)};V_.debug("[Interaction] 地图点击捕获",{screenPosition:n,containerPosition:{x:s,y:a},origin:null==e?void 0:e.origin,mapPosition:o,clickDuration:i,moveDistance:r}),t.events.onClickMap(o)}this.mapClickStartPosition=null,this.mapClickStartTime=0,this.shouldSuppressMapClick=!1}handleDoubleTap(c){const e=this.appService,t=e.getApp(),i=e.appContainer,{scaleMin:n,scaleMax:r,doubleTapZoomFactor:s}=this,a=c.x,o=c.y,f=(a-i.x)/i.scale.x,l=(o-i.y)/i.scale.y;let d=i.scale.x*s,h=i.scale.y*s;d=Math.max(n,Math.min(r,d)),h=Math.max(n,Math.min(r,h)),this.originalPosition={x:i.x,y:i.y},this.originalScale={x:i.scale.x,y:i.scale.y};const u=a-f*d,p=o-l*h;this.targetPosition={x:u,y:p},this.targetScale={x:d,y:h},this.interactionState.isAnimating=!0,t.requestRender("animation",!0),this.transitionDuration=300,this.transitionStartTime=t.ticker.lastTime,t.ticker.add(this.boundResetAnimation)}onPointerMove(c){if(this.isGestureHijacked&&!this.isHijackPaused){if(c.pointerId===this.hijackedPointerId){const e=c.global.x-this.viewportBounds.x,t=c.global.y-this.viewportBounds.y;return this.activeTouches.set(c.pointerId,{x:e,y:t}),void this.dispatchGestureMove(c)}return}if(!this.activeTouches.has(c.pointerId)||!this.isGestureValid)return;if(this.taintedPointers.size>0&&(null!==this.initialTouchDistance||null!==this.initialScale))return void V_.debug("[Interaction] 存在污染指针,阻止多点触摸手势移动");const e=c.global.x-this.viewportBounds.x,t=c.global.y-this.viewportBounds.y;this.activeTouches.set(c.pointerId,{x:e,y:t}),2===this.activeTouches.size&&null!==this.initialTouchDistance&&null!==this.initialScale&&this.applyPinchZoom(),1!==this.activeTouches.size||null===this.initialTouchDistance&&null===this.initialScale||(this.initialTouchDistance=null,this.initialScale=null,this.initialPinchCenter=null,this.secondTouchId=null),1!==this.activeTouches.size||c.pointerId!==this.firstTouchId||null===this.dragStart||this.taintedPointers.has(c.pointerId)||this.applyPan(c)}applyPan(c){const e=this.appService,t=this.activeTouches.get(c.pointerId),i=e.appContainer,{x:n,y:r}=this.dragStart;i.position.set(i.x+t.x-n,i.y+t.y-r),this.dragStart={x:t.x,y:t.y}}applyPinchZoom(){const c=this.appService.appContainer,e=Array.from(this.activeTouches.values());if(e.length<2||!this.initialTouchDistance||!this.initialScale||!this.initialPinchCenter)return;const t=fx(e[0],e[1]),i={x:(e[0].x+e[1].x)/2,y:(e[0].y+e[1].y)/2},n=(i.x-c.position.x)/c.scale.x,r=(i.y-c.position.y)/c.scale.y,s=__pow(t/this.initialTouchDistance,this.zoomFactor),a=Math.max(this.scaleMin,Math.min(this.scaleMax,this.initialScale.x*s)),o=Math.max(this.scaleMin,Math.min(this.scaleMax,this.initialScale.y*s));c.scale.set(a,o);let f=i.x-n*a,l=i.y-r*o;f+=i.x-this.initialPinchCenter.x,l+=i.y-this.initialPinchCenter.y,c.position.set(f,l),this.antiScale(a),this.initialPinchCenter=i}setInitialScaleAndDistance(c){const e=Array.from(this.activeTouches.values());e.length<2||(this.initialTouchDistance=fx(e[0],e[1]),this.initialScale={x:c.scale.x,y:c.scale.y},this.initialPinchCenter={x:(e[0].x+e[1].x)/2,y:(e[0].y+e[1].y)/2})}}const lS=["forbiddenSweepZone","forbiddenMopZone","cleanZone"];function dS(c){return lS.includes(c)}const hS={forbiddenSweepZone:{minSize:1,iconWrapperFillColor:"#ff4444",strokeColor:"#ff4444",strokeWidth:2,fillColor:"rgba(255, 68, 68, 0.1)",outlineOffset:16,outlineStrokeColor:"#ff4444",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(255, 68, 68, 0.05)",showRotateButton:!0,textColor:"#ff4444",textPosition:"bottom",textOffset:8,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}},forbiddenMopZone:{minSize:1,iconWrapperFillColor:"#fe8a07",strokeColor:"#fe8a07",strokeWidth:2,fillColor:"rgba(254, 138, 7, 0.1)",outlineOffset:16,outlineStrokeColor:"#fe8a07",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(254, 138, 7, 0.05)",showRotateButton:!0,textColor:"#fe8a07",textPosition:"bottom",textOffset:8,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}},cleanZone:{minSize:1,iconWrapperFillColor:"#5d68fe",strokeColor:"#5d68fe",strokeWidth:2,fillColor:"rgba(93, 104, 254, 0.1)",outlineOffset:16,outlineStrokeColor:"#5d68fe",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(93, 104, 254, 0.05)",showRotateButton:!0,textColor:"#5d68fe",textPosition:"bottom",textOffset:8,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}}},uS=""+new URL("robot-CSiuukeH.png",document.currentScript&&"SCRIPT"===document.currentScript.tagName.toUpperCase()&&document.currentScript.src||document.baseURI).href,pS=""+new URL("doubleBed-CzextF6m.png",document.currentScript&&"SCRIPT"===document.currentScript.tagName.toUpperCase()&&document.currentScript.src||document.baseURI).href,gS=""+new URL("sleep-C_YKDk6M.json",document.currentScript&&"SCRIPT"===document.currentScript.tagName.toUpperCase()&&document.currentScript.src||document.baseURI).href,mS=""+new URL("sleep-CRKZ3XeQ.png",document.currentScript&&"SCRIPT"===document.currentScript.tagName.toUpperCase()&&document.currentScript.src||document.baseURI).href,bS="system-ui, -apple-system, sans-serif",vS=["#2563b8","#26966b","#7c3fb8","#d97706"],yS={global:{containerTop:"0px",containerLeft:"0px",containerWidth:"100%",containerHeight:"100%",backgroundColor:"#f6f6f6",backgroundAlpha:1,performanceMode:!1,resolution:window.devicePixelRatio||1,enableLogger:!1,rendererPreference:"webgl"},logger:{enabled:!1,appLogEnabled:!0,appLogLevels:["debug","warn","error"],tag:"ray-robot-map-sdk"},map:{autoPaddingHorizontalPercent:.05,autoPaddingVerticalPercent:.05,adjacencyThreshold:3,originChangeAutoFitThreshold:2,sizeChangeAutoFitThreshold:10,obstacleColor:"#999999",freeColor:"#ebebeb",autoFitOffset:{x:0,y:0}},room:{colors:{sortBy:"index",strategy:"priority",active:["#a8c8f5","#9de5c7","#d4b9f7","#ffd399"],inactive:["#d6e7fc","#d1f4e5","#ece0fb","#fff0d9"],name:[...vS],propertyTheme:[...vS],selectionIndicatorBackground:[...vS],selectionIndicatorIcon:["#ffffff","#ffffff","#ffffff","#ffffff"],[_p.NO_ROOM_DATA]:"#ebebeb",[_p.ROOM_GAP]:"#ebebeb",[_p.OBSTACLE_ROOM]:"#ebebeb",[_p.UNKNOWN_ROOM]:"#ebebeb",[_p.VERSION0_ROOM]:""},nameLabel:{fontSize:12,fontFamily:bS,fontWeight:"500"},type:{assets:["data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M3%209.5L12%203L21%209.5V20C21%2020.5523%2020.5523%2021%2020%2021H4C3.44772%2021%203%2020.5523%203%2020V9.5Z'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M9%2021V12H15V21'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M3%2014H21'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M3%2011V14C3%2015.1046%203.89543%2016%205%2016H19C20.1046%2016%2021%2015.1046%2021%2014V11'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M6%2016V18'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M18%2016V18'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M4%2011C4%209.34315%205.34315%208%207%208H17C18.6569%208%2020%209.34315%2020%2011'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3ccircle%20cx='12'%20cy='12'%20r='5'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M5%2010V14'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M19%2010V14'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M3%2012H7'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M17%2012H21'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M3%2018V7C3%205.89543%203.89543%205%205%205H19C20.1046%205%2021%205.89543%2021%207V18'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M3%2014H21'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M7%2010H10V14'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M14%2010H17V14'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M2%2018H22'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M4%2018V7C4%205.89543%204.89543%205%206%205H18C19.1046%205%2020%205.89543%2020%207V18'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M4%2014H20'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M9%2010H15V14'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M3%2018H21'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M4%2019.5C4%2018.1193%205.11929%2017%206.5%2017H20'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M6.5%202H20V22H6.5C5.11929%2022%204%2020.8807%204%2019.5V4.5C4%203.11929%205.11929%202%206.5%202Z'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M8%206H16'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M8%2010H16'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M6%208V18C6%2019.6569%207.34315%2021%209%2021H15C16.6569%2021%2018%2019.6569%2018%2018V8H6Z'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M4%208H20'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M9%205V8'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M15%205V8'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M12%203V8'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M7%207C7%204.23858%209.23858%202%2012%202C14.7614%202%2017%204.23858%2017%207V17H7V7Z'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M7%2013H17'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3ccircle%20cx='12'%20cy='10'%20r='1'%20fill='white'/%3e%3cpath%20d='M5%2017H19V20C19%2021.1046%2018.1046%2022%2017%2022H7C5.89543%2022%205%2021.1046%205%2020V17Z'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20x='5'%20y='4'%20width='14'%20height='16'%20rx='2'%20stroke='white'%20stroke-width='1.5'/%3e%3ccircle%20cx='12'%20cy='12'%20r='3'%20stroke='white'%20stroke-width='1.5'/%3e%3ccircle%20cx='12'%20cy='7'%20r='1'%20fill='white'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M7%2010H17V15C17%2016.1046%2016.1046%2017%2015%2017H9C7.89543%2017%207%2016.1046%207%2015V10Z'%20stroke='white'%20stroke-width='1.5'%20stroke-linejoin='round'/%3e%3cpath%20d='M5%2010V14C5%2015.1046%205.89543%2016%207%2016'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3cpath%20d='M19%2010V14C19%2015.1046%2018.1046%2016%2017%2016'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3cpath%20d='M8%2017V19'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3cpath%20d='M16%2017V19'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M4%206H20V18H4V6Z'%20stroke='white'%20stroke-width='1.5'%20stroke-linejoin='round'/%3e%3cpath%20d='M10%206V18'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3cpath%20d='M4%2012H20'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3ccircle%20cx='12'%20cy='8'%20r='4'%20stroke='white'%20stroke-width='1.5'/%3e%3cpath%20d='M8%2012L5%2018H19L16%2012'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3ccircle%20cx='9'%20cy='8'%20r='0.5'%20fill='white'/%3e%3ccircle%20cx='15'%20cy='8'%20r='0.5'%20fill='white'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M12%203V5M12%2019V21M21%2012H19M5%2012H3M18.36%205.64L16.95%207.05M7.05%2016.95L5.64%2018.36M18.36%2018.36L16.95%2016.95M7.05%207.05L5.64%205.64M16%2012C16%2014.2091%2014.2091%2016%2012%2016C9.79086%2016%208%2014.2091%208%2012C8%209.79086%209.79086%208%2012%208C14.2091%208%2016%209.79086%2016%2012Z'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M6%203V21M18%203V21'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3cpath%20d='M6%2012H18'%20stroke='white'%20stroke-width='1.5'%20stroke-dasharray='2%202'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M4%2011V17H20V11'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M8%2011V17M12%2011V17M16%2011V17'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3cpath%20d='M4%2011H20'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3cpath%20d='M6%207L18%207'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M6%207H4V17H6V7Z'%20fill='white'/%3e%3cpath%20d='M20%207H18V17H20V7Z'%20fill='white'/%3e%3crect%20x='6'%20y='11'%20width='12'%20height='2'%20fill='white'/%3e%3crect%20x='16'%20y='8'%20width='2'%20height='8'%20fill='white'/%3e%3crect%20x='6'%20y='8'%20width='2'%20height='8'%20fill='white'/%3e%3c/svg%3e","data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M12%205V19'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3cpath%20d='M8%208H16'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3cpath%20d='M8%2012H16'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'/%3e%3cpath%20d='M10%205L12%203L14%205'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e"],iconSize:12,gap:4,position:"left",container:{visible:!0,size:16,borderRadius:16}},property:{displayOrders:["cleanMode","suction","cistern","cleanTimes"],iconWidth:14,iconHeight:14,foldable:!0,offsetX:0,offsetY:6,iconGap:0,container:{backgroundColor:"#ffffff",paddingVertical:2,paddingHorizontal:2,borderRadius:16,tailHeight:2,tailWidth:8},suction:{assets:["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAOVBMVEUAAAD///////////////////////////////////////////////////////////////////////8KOjVvAAAAEnRSTlMAgH/fIL9gcEDvoBDPsJCPUDD8BuiCAAACCklEQVRo3u3Zza6bMBCG4Y/434aQzP1fbCt14SOZSac+zPQs/C4jwaME7ICN1Wq1Wq1W87VYd0dEe9gy7MqBvuQi9OusHp3PenqMPeiix31uZU5YiVTlB3PCk5jSTXChS9kTV2m3uG/mR0zEtt0Ce7qWKw873FK5livx+VvgRJdyIr6IW9ou5Ux8T2jKgYcrNOXMwwGq8qYM83IqLKws+8rB2jISA+vLkbmr9eUnM1mry819+GO0Hs8ZPdPx3NCzlB16pvKBnqkc0TOVPXqWskPPVH6iZyp79CzlHUM2csSQiewwZCNHDJnIAUM2cgOTosy35CUvecn/W37H83C/C8nbyT6FMhjqcnsE6pnJOdBFTVPu7FiEqvwOxJTAyeN1KrQf8Z/ck9gyZPLL0Z+cF7N+l6yX8rL3r7P0z8tb6jreLV7pLba77K01IWcR/MlNwIycxDsS/Er8lFwFrv/szslBAEeJK5fl8CFx5bIc3jn3AKblQwBzrmuYl5/fgD0wL78EcOEv8Lzsp6cPB3xDDhBUmZlyWpYenZgvPC8Lj27cfta8HCEq0Fi2eN7OzFjSlwMDq8u+MLC6nAYYsJGfw3aWlVyH6cNK3obpw0qOrrsehnLfN9299Zu7j4FKiD97zeBvcgKfqlwaDNukI1JT3mBalyNs26RzgZb8gnlxpxIyVqvVarVarb70C7CyrCEVukMsAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAPFBMVEUAAAD////////////////////////////////////////////////////////////////////////////YSWgTAAAAE3RSTlMA3yC/EECAYM+f73CQr1Awj6BvNXOp4gAAAlpJREFUaN7s1t1ugzAMhmE7TgghgdL5/u91ndBK11SYfFonTcpzXl7yR0Nd13Vd13Xd/+VWVk6OAD7PzCxDIMCHbtrTQfQbR2o1oD/2q97A6agPBjrPsd4BU+ZZgfLehQcd9acMdKEXF31yoVNYX0uewAewb9mRtfFkmaHZcroDy1qZfMMCweULtEGCHprJlrU2kiXpsRXanPbG9mrJZIjQzxY12O/O0BoVNbFHTiPDe3q32lu6NtnzZAv257Zmn32bGP9LaBgfsh9VwameoCHbXRVgjWtTc1eLEZ71FNfa1WCEIxS2u0wWAcOO9UiknblBphLdTViKTMb7W12mEyJv2cHTLpRRd0PjRLGjU0IecvDVoLLo5ko3IY0yx2prGF2Qi/PI8lVzsj/TvLbg3YMl3cp6oHgC2MddjsMS6Bddnj8NAmQRw/OlJgBZxFUfpNf3Dsme6P1hCqx3k5SloYpO9XA//SWlVPLi6G1Cdev8K/I407Z3fUBweFnQLi5+tmcGOQzCMBA0EBKSllz4/1/b+x6QVXmqVp4PrBDGeHfP7ei7JX9LmXM1nlKHIwUK+JaMQbfHw1C6RCoMTQ57iEUMAkOTIwDiEGsCoGddMYouthdiiNFnmBJtQHQNohkWV7YRYJrol6wZ+DCE05kjBawteK4d0VnAbEGPfF8cTAvhPnAcq0VTHTkWIKwdLySsBQkgDBxBsjHJ2W6qB9zYskDADVbGpSB+Zru+NF4TEHb3UtUi2aHhUqq3aPn9H4XV4MLDU06PWgyhbaCsNlDjrbmcz8wzkyRJkuRDXlF2skMkf3lIAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAPFBMVEUAAAD////////////////////////////////////////////////////////////////////////////YSWgTAAAAE3RSTlMA359AIL+QYBDvMIBwr6CPz1BvDk7raQAAAplJREFUaN7t2tuO3CAMBmDbQALkOOv3f9dKrVbWMiSQTHGqiu96oz94OGeh67qu67rP+JF2ZObdTQb0GMcscAQdnlgoRkfkdxM0ZyVXN5k4b4bGkPOChbb4yAAJreDgoSnkIwaaGpif6V6RjxAktJq8QGMr5zlobUTdYGFRsdTlZAIFRm+dKPewF2iw/CaCioVToMMojyYRdJdFMagsTuVaB9DilacP4RQqXf6REfSMCtuP8uRlQRE2GcTezLQ4t9D0isWFAu1fK+MWmIXbzOlIHuFA3JAZqfq9vgKnAr1nY6nQ23dFIlSZOAu/bNKecJ5L8qi/lSu2n9F2RSRTM97o6vj84PBv8eLMhnxqu5XL7n6D02QzE80WDpj0/f1HDZaq+YV/I59tLnFqLC6zRSSFzHdYs+Seutel05WIjk4Q3myBc3Y456qCY3Zfa8fNnTx1bq8q9fC+JBpCPgXnuCjYZFdNcu3WKFjm3TUJtoHbBn9PkGmpiYv228PYDaPNDjorT51wtzpXGIw/6vwEVcHTjRuOxUDK/5xAVi4yl6fq/P7BrjJl1sx3ePGAwHj4pnYmmqNsss+NFw8I5W1cXTJCkbmUK0a812Cx1vy9IUw3j3a43aXTDsvr+fYxxPRXxxu5ItZvWyFl1szOeIZKdkVmHGJ5yGX3+YP7OffYBvd6dFS01/TnADTLjPe5rXqU/CfH0zkZn2pQ9XZLmGSVVUPpAUFL+Dcu9J67wgygxPFDl6dqH1/KX/gsaHjpfvYRk9732/K2GzWKvfBDya7yEkohWKmHLfXXX206l/oXvvmp/wMxfAShKR/4CLQ1PBVsg26py92LoLWJ9abNcjJGUPB++CcPGtJoZ0CPmdzOzLjT6KHruq7ruo/8Ani9wIJR4hr/AAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAOVBMVEUAAAD///////////////////////////////////////////////////////////////////////8KOjVvAAAAEnRSTlMAIN9A7xC/gGDPn3BQkK8wj6DdtO0oAAADPElEQVRo3u2Z2Y7rIAyGwWYnS8fv/7BHlTpi0gacsuTc8N1VivqDF2yMmEwmk8lk0h9nFJHfohT90HEDIlLG5f810C/GdZJFQwkrznnQH3yPXUtDB0CefkVHbLPuooguKAd649GoaylRUlb0TmjW/cQwlm7fc6RzHleEKdbHFeXYr3ypdK0wUA7D+LgttB3lceLI2nPLQHlAHEHqt2WkEu6KrU2V8EolzBXzqCphQ0XwyteyRthTkfXK11gj/EMJPmRVP2Ekuh5emk7RI5wc+FWCqEJC2dZ8NQliiDKy1kFRi/OUJ3LlxIgGtJRyX34YQzqmhtUjLZRCB5iFtSA/d12OaZCiEw5yB2KoOC5bolwyjU8/9HYq7NhS3I49OxAhoztKGVJo8brtxA8vhqH+TaBK6XJqaYViDBKOaUpHvBTDWNYQdaYHWMVtGEp4FPeBybtR3IBecH9ZHuiJt7pbGDkbjIcnxjwifgwKAF/S1kbsN3BR9M62vB/brrffDJ0T9DF3Vdfk2Q1l8U/lZUz6RCphj/cqKFsuQBqPcVgqot5uGaU4Mb+rW+rv4wl5EPbXGgdsaaZTGV4utHS7/a7VDZQn/QUc2xBtN2NMeESHuD/7YffwXzb3WrGWPtjFpl9lLFd4qIxyL49sf04uIJ6tzdJ+T8GwuD0tlgVa7qYqZvOPhxFWJWtJMU6YsgAymT9IeNUioa0hCDplAg/UmVrhySEDOo3EWEzVHNHLE900PtZADHwV27KlMGE+LjE7b+yloiR6nYsldz2+uMqI/A0bziqEqzi4uOjCfPLA4bmmBH7fBoRS+Gm2nvLJlEtKLFWR5fNprHoAZMsz562QJLYul86Tciu+t5hL7YsXl8BiaDHvHQ4aBk+xEFobF63SQv2F2eYXq3jvyeOubc0sbdMZNzB5gj/wcsUqvx0gKlIbZr3AnwwanXO76MXGZMowPPMoMgzmTXcYO3P+D2D0YLrqnuGHKXPlHhYxGFdxJRsrTFEMZaEcaqyfJdM3j0MVZjJDMUzjPIzI9HPD0IoRHoZlfDwOzzygD0MC/adKIf1tdYL3s9XiFuSriUyd5H3gap7iYFbUYjKZTCaTSRP/AEYn9FrTdrbUAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAOVBMVEUAAAD///////////////////////////////////////////////////////////////////////8KOjVvAAAAEnRSTlMA3yCAEGC/759AcFDPkDCvoI+BJCYaAAADo0lEQVRo3u2a2barIAyGCSQMjpX3f9izzunqoYoxbhD3jd9d6/CXEDJA1cPDw8PDw0MNYZkhxgh26VHdBhoXv/Ba3UPn4obljlGjjzlww6BtjL+iTHEfaG1tGxkW1RaIHIyx2wuPiqG1MKimvCJLW/cKvHCvmmJZYVJN0Y4T7lRbJs6/zOY+6vXFY36dEO6HusSlQ5hybzXiHC9VOTMsb6ta2j49Cl5tatKHtnyyx715DvuZxE0/06W190InLmdkwpugLE6j1cfL2SV/LkrWvPtArxJ9/sOSsbhLMr24YNDxF7vioKZPxIiR9y1TnLl85PC8e+Fq/ouGrGOUlZGdR4w5tmDAnLUtNyYqTdYYDzH7k6yPixQqqGCZ0NgztjTFFZkXhJ3eMQwJDjKX1xgJm5sUpJU4KBkXJbpU920GjEMsF44iDpMvrAc8C1aqFI7jZjZJdI+53tRpyHbzVpyF2RFI0yS8J6S0l+a3orMyp2yd7rQ6+XPNFKeMJ4fs6WV9yNdRaZKYkrIbvDHeDkINLen6s/l4/hRa+LFCP67Ew490B1Rn0Z33Y8D1d2TZEXhBt5ik7WJ0b0MHD2BJTmgjqkvQeuX8Fo+bVwjqWug7emg20hhUFwMrR3P3yK6NO+7Xw85eYuSJusV7b/q88vb/PsN6Zj3VDxb7ZciaqGkbPnX3vsnBPJJW1WBnd8MQup32VGuNF83k7LjAaxrubwV7lGperfZttRX28GhosmDIyckV9X//62hSMpXVAO0fFoDv2+qOfDfttssXzQzDfH55kZjk+A7AmoD/t40+XmFKG/PEC9+3LNYSWw8P1nu/Woq+dsCv790Gn7olkVNjHqTHzfdHPCXsUNbVki6t3+ZOKYeKzXCT5+J1i15Z4ZKgS5ulNV01ySSsX8jCdlNh2Lvssl37mrZtYjcgcp+fsr28irMSPPzBeu/rWRaeyk61gNlL9OsNbB5XmCKIiS5u1ejV9m3TQWOtmbjQV0xxwvKGImaVCA4G6hSB7+hn9oqR45bMyL5+EPapK49acWCiFh55TXfBqbaG/WGFw5dOwIbLMmV/dFphmadEXVkZ9KE1jRADTGmpOWih/DRHBZvrSs5NIVWImbuzJ4AE2TlZgTbK/xHIOyiaP3V2UBdhzv7zJfR0RVcjL1Wj2kJ82muLFhJ9O4BPA20xvyWMrqBTaOnXoJpjCpZTO2Wj7oCA2RtuDhIwm7TtCaP9Kw6zCerh4eHh4eFq/gDsgRtLdqAVbwAAAABJRU5ErkJggg=="]},cistern:{assets:["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMA3yBgv58Q74BwQK+PzzBQHgQBUQAAAqhJREFUaN7t2etu8yAMBmBO4ZgQ7v9qv2na+kpVEgKOqfQN/1vK+hRjE9KKGTNmzJgxYwY9VCrOKDE8lCxfIR+SYwjx3ki7le+Qz03iXvrW8hOe7tov9276QnlFJMO+lLuycoDpyyxvvBdyg1iocLk3CyzwU8u83ZKxwAhispdyS8YCYzC1m27JyMy6INn8MhbYCPxD5Jfj78tO4Q+MZZPRSTt6Hz3FJ6fXAr81v2aV0Umb/RmPoYwyOsm9rgfUGqNsfi+Ho2t8MmZ3NNwpLjmXQ0JjA+ORcXk/2Ws9s7yejlassrQY15BsuhwvbmyBUV6vBjvFJ9ujwRqNxiPXTxF6rIyxUg2WNW6Qg2Uke7CMZNvBssYZYayMZKvBsnLYOcfKHvU1WEYzD5YVmnmwjPoaK2OcEYNl/VR9GdUoy2dayhfZKOdHDiPWlWZ5wQDKhEurjJbypAl3yJ56l8Ijy9ZU21aSC9sgaS2yxuftCayWs439LInbl8eEW2QUdiBmOopGORP3TYc9qEVGrl2fm3GEapOR69wFa3RFq7zjQZpQW1k0y5mweSFfVjTLlnQQWVAhbTLqMlG6SYpWGWVt6HBdHgBXZCKM70tFh0wqrhVV3SLTq9pjq26QyX2M7Sf0fweoSXv1IrplRbw79cpOCFJZx145dcL6MtdaVeVAOHOdLlUosipb8imz7xkDbm+unTp6qSKTQp6usikccv1p15fCKWPKbn93eWVMuSR0c4TBJ0u8l1l1jDEsuMQp53IQQ+TwMdl/TE6fku32B+XlD1ZYdJ+SbRosI2K1xozgukte0lJXToCUiOaMTfvV2VPQw4bk3lGXtLo+9UbxSGS9Jim/p7KZVef6eTuIAQGZDNPlKMYF/TcZuiyVGB3Wy7ItSsyYMWPG/xD/AIrSnldXeREbAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEXRSTlMA5cgdcw7XjzlWrIFkup0rSDjdhakAAAKOSURBVGje7ZnbkqQgDEAj95va//+1W7u1NVGpHiEJPHEep0ZPJyYBERaLxWKxWPDRaXPphOnE7S8uwmTM9p9JZvT+YGAG6J1rRu9cM3rnmtE714zeuWb0zjWjl2vme5XaLhQYSLx5tUbz2Bl23r0Ad/MJg9Du4X2YnYYRoAS99R8HYGtFbbYgz1F7a/MB4pjKi2ZCO5MayZ2PYndDmqq+d4AHn2GlbdXvMZW6wOQLy7xVgAcxyvtt84aUERNr/5ZINeAx71Ujvcw1Jd/BoW0FMdJLUmn9gVo20eml9kWTXdo7VCvBAWbd6wNGAmmFfO3P3PXfHliEvlFolVR9paZEIx+hkEP3fbxMyBiws93j1TMCJswiIxFyrgN+R/FDto4yfCM/5HILmBByZJeWoe0LE5DQtIBBc3Nd6mHZ28uRmekAXQRmrt1PpgHpLC/eziMDUHMdWI/4A53gUlFYY8tCJ5aQLORg7J8UVhfj4oPREDunqD1047Eh+sF5yXkHWOIGOC2ROc9YSRSX4rwzJdYM4PTi3BkAmV4glrXfK/QlJlSLBPFq1m9m5CvR9y4WCOzUy60jFTV/zxar2UPdR6Qpu0TE0fbHodqP03PtaZcd/LdUTboqABGFR5ikl3mgEgknskXkYFF1n8hqxygtxPSemFnFChhRt5Pqd+8u9Ykgbk1m9CIBWPir+SXb+uo9RD8ofo9C/mNf2K5k2/gtPUh/nFfxSzFguNj2ImZUlypqjdqqk/gFhrgU9dV6bA88gLQZ5bvPxmSfcFJJejHbHRgQpLhmbwFRTtWmVRqEsbkpzRbkCelNmzDcmeoUYBwhf6syH2AsNvrKrXy0MAMd87Grf8r9yJ8TFovFYrFYcPgDfFESW2IpAiAAAAAASUVORK5CYII=","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMAgN8g7xBgcECfj6+/zzBQ4swJLwAAAaxJREFUaN7t2lluwzAMBFBq9SLbnfuftigQYD5SZLGpaQPoXWBgiqQdKDYMwzAMw3Wp5dySyVX8yNXEAm5kycy9CabAXG0yc7XJzNUmM1ebzFxtMnPVyczVJzP33mQdVRD132EHHjqsk5TxUE7WRYp4InZJLhFPxWL+Gl7QjPoMkmycK0DCoToySNjabCxxgzW8YTE3E94yeW8s+THveFNUTrD/NB84IWkLTdG9o2ULrGSc4PCGXAESrpEZJO2vDact4gempH1gWsS7g5K2pWkRzzAV7dKiqm0t2k5WGpclbaWpOlRaWOuMy7J4e9ChPWKatGuL1vO/HvTdFeFg9whWfW3CxQj+z2f8Z8G7Y7B+gbRPWpkTHFTtrwiatZ9cVOyEXfuOoFXbW/QlPmLKuCgXO2XRVppmcaUpahc1VfG3LUWX1lLv62AXRO0JU3VoafEsN9cLReVdzCEuNAWcMH3ynQRfzPorr1X8vBTEuTRlvChP5ojzrP+bQAl4QSjmL214oiXrY34Yvc3Wz7xm/Couyfoq8xLvU6tJpBqWPUYgx72Fr2TDMAzDMFzxDf7xFoVjSQNhAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMAgN8g72AQn0Bwv4+vMM9QQt7wKQAAArJJREFUaN7tmtHOpCAMhbUgoqL2/Z92s5t/0/wtkRE4c8V3eTKZMy2lRZlpMBgMBoNBLS55n5zSdvb7OUFZ+C9+yWpAZv5hedRwvszzfy1mNKCvuNhfA/XFO1tf63IoDeVrXZLSwL7iEkhpYF9xccoZ5mudvdJAvsL285Hbau0snEH3q1lr7Zz8yCmbSmmNOM+PeCelrbQmHHEBcvaT1OwciItQkFpQWj2JPyBlljmBNlJ+O5PSABspv6mc0mo5PStKpT0rDVVYtphIaajCElZJttJes/ErNkm2aP06VnmZqXWZL34JZXYCYXZwfjfvSmseSWWc1JdosETbxK5KA1W0bVZOaS8InqsgJyFXTciDK1kl5Jo2ErkaCbmmvnbmtpCj0tABS3iX0sABS3iL0kC9w4bnlIYqaRteUhpuDwvB5podqGnZVhWUhistYZevUdojgZtxmcQ5cKYlr1Fp6ExLXrVWwnMzPhcBsHsIpx0UHMFLLKfaTWm4tiUc8lZEtPLTQ6fqiu+qi7gDV2ZOXN8wpkwn8gVj7kLuq4YxZo2tsf+asdPaMxfQGN9AUqaBpK+1zMWcAfFDYqkYEpE7ECvGYmCh7YC7aw1f1lfmKEPg5wipLae1EnenJV60hj/t+SC1xaIVWbtkeqLXT22xS6ad0cpQj9E0m9FUZulwtp12rnixSO2lFa2GfEKW4GatwUMmeaugrgjAqxwlZ7akgXs5ZVKWel0olu9iFqWB35NLUklpyJuB8kUM/k4i+MI47DuYZRAkpWGdpUtE6wvINuiPGdvnt6lb5nXVhvuDgL3wOJRWS5g/SnOw82WeGnE7F0jOnhR30eqJj9Z7tDfs+zL1IR6es9DqJu3r1zj1I8SVrOvvwG7/TwtTb9wyrxcRs6crzbdexXs/7nMaDAaDwWDwnj/NQlzrb+J5OQAAAABJRU5ErkJggg=="]},cleanMode:{assets:["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAPFBMVEUAAAD////////////////////////////////////////////////////////////////////////////YSWgTAAAAE3RSTlMAYN+fgL9AIO8QcFDPfzCQr49fa1RRAwAAAnlJREFUaN7t2NmumzAQgOHxvhEgnfd/17ZKDhMMSmobz+mR/F1Fraq/jAeywDAMwzAMwzB8N6EfHPBS+ORn4GRxY4CToLCED9jD4bYa8Q3hMOEfU+AMUxdRcYdXfFK8YYWbO2f4hi9uPGHqUpkrHDHziydsMednjrDz21/J7ZXrH3YvNXo9he5h83qV83b1qneYFnren3fsGxYUyjfc9gzTYml40jT6juFtmZaTp6fpFqYDlgE2QdL0O4UdTfV0/t71CdOgE+wkGnaXcKTFyiw07B5hQ3+Sm76GHa4P06QdkPyY79eFJ/iij4M+HoO7LGyy+2YCcjJs1SEMTk2TDh++e4Qrw5/R6mnusKPFZg3TJVveMJ2y4g3Tfe6Zw/TgdLxheq9IvGHaa8EdBnzQPyEsVvO0qr8Mhb3au7sLR33HAvLTjZwKtqKIhXORPukXPHMKxA/PTOgV1u/nNsE/c3oTxVGye+79oizAy3k6YlaKlp7VDWsemLN9ECf0UTjrVl0wlklnXbrgXrfTcW+dwbpfJBYsY7Kfjz1Wfjk3WCjQdkSDxJd1A5ay9NBo+Z0tYSlNO9XQBYWlTPb9sfR86Z8X8ie34RqgkMNyNt9KaWs+X5WL++0wAiqsWG79+k9LxElbqCKxnKeDClBpxhoOmkWsEaGZwRoKmmEVCa0sEtZDXrCOgEYT1lmgTUDCesgJa4XWT8PEKLXuLkotBonX2iNJ0ETu98Vm96rYD1dedsgOq8MGWogsnLK3IJuFLzvkNQuL7AOOexO20MBkYV0QTpeNWh/DkIWve5uIk5TSPCQAoV7cAOD5ctFaR4CotXhIMwzDMAzDMAz/j98ceskaOhA77AAAAABJRU5ErkJggg==","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMAYJ+Av0Df7xBwIJBQz68wzE7woAAAAVNJREFUaN7t2d1ugzAMhmHHSUj4Kfj+r3asmxrIClKYlwzpe8446XuQgi0gAAAAgNuIxj4ZqmsI8s1RVSwvnmpyKWzpBMIII4zwWdjQCYQRRhhhhBE+hDDCCCOMMHX/IOzpxG3D0fJeSGHHe0b35VKBntSMUqLTvHlKhFZhGUiLsVu9ecNvENxP9MlkfurtzkRaeml0I89SJpKSIGUM6fBSaCQdVgo99J6YTQ45SjFPGiYpNtaexrofox5SLGgc8iDS5pCNJFX3LpYLnOIKXXvvWuSSRWMktjnkWS5hjZHY5JC9XDTUHYmJqTsSE1YciczcycbMHCRxlvU2vin7Kc4eyJ0klrzeMsBZ2GVhdxw2eiPxTXg+Do8KIzGFuyzMWVhr41vycMjCYxZW+3e5LCxZ2B6Gw0S/Mbjuk3tar3lrDfvXhbWeol2ZL5EAAAAAAOCvfQALwYE8tktFzgAAAABJRU5ErkJggg==","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAANlBMVEUAAAD////////////////////////////////////////////////////////////////////xY8b8AAAAEnRSTlMA5VZzrI86yR0O12VHK4GeumR+Sig+AAAB1ElEQVRo3u3aYW+jMAyAYTuExEkItP//z550VHCVOGMzl02an6+b+i4hIRQNnHPOOed+KkoruNmAL7nAnQg3M9wp7OEMDA972MMe9vDvDkdgeNjDHvawhz38Xx72sIc9/H1hasNfLazGPZzDu8R8StG/XFIY4FCPFfERlC+XVBJ3cWZNeNKFA/u3N91S+upcx+2ntShGHDfLeGB4dzTVbxNyI2ImhGEbbnCnvIc7qNAUJFKBQ8+tu2iqZcgoNRIAs6wzKbpJluU/el7v7PSJbcy/tKcwtASqrtZotBP0ikG3ZNSbDMIjXtBOBkPCiba9yBQR61yAF9F6xJQlT0wJLyHBtZvsrzA+gVFFe66iXg3AwZdoPdO5y1bNDIym71YC3iQ5LGZ9OMielWs33kxZ9u2gFetdPIOJaH2z7LGKwos+fLqwPnRCzGePfLIRN9vFlcT/UjChWuKeZcSLr+jDD2ZIHbFOadXLyUVRG4twl0SyvXVhDvxZvAvW53FdhjCld+s8lLDEl4qIXb2hDBYdPdivMyUbh3eF39S9Xm6N/+qHKxe48jZm64Oq8mGgi+Vwfi7H01+5YuBFyVMDjfgJA5yj8LDO1qf8ZYSlVMA555xz7rv9AZlKFXj5dr43AAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAOVBMVEUAAAD///////////////////////////////////////////////////////////////////////8KOjVvAAAAEnRSTlMAQCBggN+/nxDvcM8wkFCwoI+ASc+UAAACfUlEQVRo3u3Z7XajIBCAYWAAAVET7v9iN6my6CR0lmo+Np3nV3vSkzcKQmkFY4wxxhhj78EFfQVOPJDr05cgCpNmVjyQuo3IlEVRPDUsxePEV4UlhzmcfVy44zCHPzkMnx2GV4eHV4X1W4WVKDjMYQ6/fRh+TTiswnJ2TtkoVw7+FLqEVfqeFjecNsl3amc4JoKrnOq93BeWVFgKpEsz7/bdav0lwOzUmw1rI77glIU94XblFnXPDZdJMfw8HBTiBM3n8Eh+xuu4pYycw6MttKovAkZQhku3t4su0xlk8kJcwug5rtwvq8TBZKLKSneDFIeLxIN8BJVFuQCAgMLTkUX7zagPKGzEsxhqtc5gsnBk+ITCorhdtI07aNTLg0qtjJBnfRXo2blbTHZhspIZ8bTua5e0zAVLjBmtLMAeff/DsGrIzu9j18tHlaQ2GmgK+zzI9M6niU82pSYyXwv9G6cKQRLbWIMghCuXXxcVuebT8ArZ5xldv1ibB5eYfG2DPJBXbBIZ7lMjtdqSVf02Do76T08rWA2yrocjeUxq1ZU1p/r2LiWjZ6BqK3krs94nPNSeYWqRMamZ2+wT5jxGtTHfyd7MKuWY2o3EzECTqL+7YwcyQ+8T2O30Dbdhm9rZO+tsDwVu5HuNT1j7Bpk+7MC9M8VIJKh9IvOySvtkHPEwGV++vOjt3+9td+VX+4RvmY31hykot3n6DFpOYfPTU9PksPG2q9AQDShscbjsDU7V0QdMQOEJhU8ofNhfnCYUtv8YDnvDHoV7FB62r/uyT+wjEwobFNbb1w87LgW8geBlbzTLmV2Kq+XcBiB3ht0IMMqL6ARjjDHGGGP/qT+Hf7FSTq027wAAAABJRU5ErkJggg=="]},cleanTimes:{assets:["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMA378ggBAw78+fYECPcFCv86Xy/gAAAk9JREFUaN7t2WlPwzAMgGGnjnP2yP//tWgg0GavaVCOCpH3K1WfHWnjMpjNZrPZbDabzf5cZg8BYXTGq/TIBRgYBpd+8jAoCkt6aYURRZ9EBmQdvliZh77tKr3PQdd0Og16FtNNsL8LVv8OXu6C17tgfJYWNQ6G7ZtRHgEHwhDVJxsIAMAxuG8m7ObdWoMR/TkYg9Y7Qb6o143awto+DrQRMqFKj1ZqB9P34Raz7leOqmG5w6hTmRybLKpguaUqKtj+Yj0sb7dHwZyxNoKP9JyGN4X03NIFThuIjE3PHY3gcDUPI9vtdSOY2HkVigX9kqUy2MJVaJlM2XkuQBms4DLD5CM3OG/QDJayPl8BGlrCYOTbyr+keji/tOWCroelLJc2Oe42h6VMckGv0AOG7VVxyBe0hz4wc0QeKuAK2UEFXCE76gmDrnElXC8rhB6wlKXbHYY143aF4eCuRRgCo7yAx8B0F6w5rMbAxiaeHgGjTTLdB5ajrJS7wNKVbV1g6cpCF1i6sr0HLF2ZNV1gOdmpsDsm94GJMSieqhQ2gqXLH/uRyx1g//byMYnJzWF/csPYuNwY9qf7kWYyNYV1ZrJb+d8awjr7eTomN4Kla03+vuJbwVreG/Py2gaO1/uQ4RtGE/j6Z195UTWBXyeOpejrwBZw2WXq28Ou6MZEruhfbAf78HKFso0PVckFFX4zp6my8QZtyQ17+cWDDzr+EvMDtzL5k5UPaaTt43w7XGQ+347HgpOlA6EkMtEUHbdHhMtMjASz2Ww2m81ms9mIPgCfVZZTXlzW2AAAAABJRU5ErkJggg==","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMAgCDf7xAwz0BwYL+fj1CvJC6qIwAAAtFJREFUaN7tmUlu7CAURelbg9n/av/kKyX7GnjGppRInGmED/AaoMIWi8VisVgsFou/gnE5hOAE+yIi7Lb8YLesGTLBassZFR2bjNjKNXPVmpc6cV64hSwtlGdz4KUHZ8BUL5rne+ebfaERXva6QkSKd+tIQvHw7FxIEczb1ABv4lPaqhx5dcnHj++Hb4s4b8m5nbnpGOUXxYcGnRiwH8xuzk5L3eul/jWvgPU0N3t/TRzKh9ifWpzStTghGAzJPAXd0TjOvatWsWGXxPJB4ZbJ/rEpIp7qHD7azutq+2mYtb3oubmfOBuuGL1FiWbFYqTkz0jTWzHGWCvCEcKvDzhh/4/LrIItHyyk5qkLIKFaFTyqYrkgtZit1VATu8CogZ6LdeybJxvvXiLl6P3EtO8QHhN66Hjrl7E9mQ0m9Ogh45oTFrJ5O+IP7osbTBjM1dQO4B1MLaVZ17xDQoOXRIR66Zl57Q9p/MotGMXsbyc0IlR/KG6pgeToeBELC6aYpcCEtvqON0HwiGb3zOuhUKrkAox7HUSuQXjv0SUU5CrF/Nwrbyaln+ClBYm/4dUSBg+a1T2vhcGDZmVu7bOFwaNmdy++w5NW5wKe40XkSRy/5HWYWjO9OPbD/kXv0HFo1HPvyEXLPfBq8NLNAZrdvZ4zavYPvaNm/qS5x9LCT/NuJ1Hey4HwHW/ALchTvAk2ltwQtideDi8Gmhm9asCLTdLAYrql4B94rSaXJ5ZCGPdKQU+chPeVxK/wWTebDkYytcyu3CCd1KGzV7bxbI/lDrb5cuF4YlWHa7IT16RV9endf52bm+JYD2FEL35fQIiJSIhg5znpK/ddcVOsQEz7ERVDJcdXvHdbIkbEQEUQSZViCrRfNCJuRR9s41u9kDC18XnvFX2j3bHLR/A2zSqzAzpzGh/tYdKy29xFhH9cPsZkxwho5wRbLBaLxWKxWCx+I/8ANf2/u2NhQhAAAAAASUVORK5CYII="]},cleanOrder:{color:"#ffffff",fontFamily:bS,fontWeight:"400",fontSize:10,gapRight:2}},selectionIndicator:{iconSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGBAMAAACDAP+3AAAALVBMVEUAAAD///////////////////////////////////////////////////////+hSKubAAAADnRSTlMAEN+AIO/Pn2AwUI+/cOwbbqMAAAEBSURBVEjH7dJBTsJAFMbxj0Ci4GZCjF7AdeMJTHXjBdy4afQCRC9gOEHjxj1H8AiewCOwKGmBEL4zwLSEB0x5bweb/nZdzL+vb4pG43w6MSy3LEbQtQbkErobkpkzM+TIzJBDaL5odi7o5c7OzKC4Yun+4DseseOB3gR7elH+KU/t2kxKZk7PtBKSf3qmx7WFmsHl9qBkfhF05GRKbxrcYERvKE1+4NCY3vxoRmbI4m3mHZVws3fAD73CHb3ozHUTyQQG9N4kU6NfjZps3lmrE7G0mb3eEyuSCXWNTCnVM6W2lZE98sX+0/NvaP659gpVX83IHmcwPCdFDMu1Q6NxeivVcQUNhbcOPQAAAABJRU5ErkJggg==",iconWidth:14,iconHeight:14,containerWidth:16,containerHeight:16,strokeWidth:2,strokeColor:"#ffffff",borderRadius:16,offsetY:4,offsetX:0,tailHeight:2,tailWidth:6},floorType:{assets:["","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAPElEQVR4AezXMQoAMAgDwND//9n2B51EhxNcQ7gtJ7NX0wWiAAECBAgQIECAAAECBAgQWCFQb6G3/Sc7FwAA//+f4+OPAAAABklEQVQDAI04ICFaxIVcAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAwAgMAAACTeJdcAAAACVBMVEUAAAAAAAAAAACDY+nAAAAAAnRSTlMAgJsrThgAAAAiSURBVDjLY2hgwA5GJUYliJBYhQMwOAwWF45KDEUJXOkKAA7xNyG+w0wTAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAABgAgMAAAAm4hnjAAAACVBMVEUAAAAAAAAAAACDY+nAAAAAAnRSTlMAgJsrThgAAAAjSURBVDjLY1gFBg4MQMAExGBqlDPKoS0HkuoGjXNGOcOVAwDBxwm1N3ts8gAAAABJRU5ErkJggg=="],opacity:.1,scale:.2},enableElasticScale:!1,elasticMinScale:.6,elasticMaxScale:1.5},path:{lineWidthFixed:!1,incrementalThreshold:5,commonPath:{visible:!0,color:"#ffffff",width:.5},transitionPath:{visible:!1,color:"#ffffff",width:.5},chargePath:{visible:!1,color:"#ffffff",width:.5},mopPath:{lineVisible:!0,lineColor:"#ffffff",lineWidth:.5,trackVisible:!0,trackColor:"#ffffff",trackAlpha:.4,trackWidth:4}},carpet:{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAOklEQVR4AeySSQoAMAgDp/3/n9v4ABc8eRCSUyAwmgu8xIp9WYGfFpItgBk3OPpW5HAnMxBE0NciwAcAAP//bVPdOAAAAAZJREFUAwDM4hAZDjaEjwAAAABJRU5ErkJggg==",opacity:.5,scale:.2},robot:{icon:{sizeFixed:!1,width:8,height:8,src:uS},speed:0,rotationCorrection:0,sleepAnimation:{jsonSrc:gS,imageSrc:mS,framePrefix:"sleep_",width:16,height:16,sizeFixed:!1,frameCount:96,offsetX:8,offsetY:-8},ring:{size:1,color:"rgba(255, 68, 68, 0.2)",strokeWidth:1,strokeColor:"#ffffff",strokeDashed:!0,strokeDashArray:[4,4]},pulseCircle:{size:12,color:"#4cd964",strokeWidth:0,strokeColor:"#ffffff",duration:1e3,sizeFixed:!1,minScale:.5,maxScale:1,minAlpha:.5,maxAlpha:1}},chargingStation:{icon:{sizeFixed:!1,width:8,height:8,src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAaVBMVEUAAAA3yFI4x1E3yFM4x1Q3yFI4x1I3yFM3ylVAz1BEzF44yFI3ylI3yFI2yVNGzF9GzGA3yFM4x1JKzWJY0nB62or///83yFL///+b46hQz2jN8dRp1n1Ey13y+/SC3ZPm+Om06r6n57PA80FIAAAAF3RSTlMA3yC/QO9grzAQ75+PcFDfz8+Ar2AwEAVwkmAAAANrSURBVGje1ZtpktowEEZbkiVvmG1m+Ixg1vsfMqnUVPWPkLG6W+DKu8CrJ7UBG5nEnLrtsQ1h5yIwOLcP45ReerovXWoPuIlrJ0/3wad2wI/Ep1S/PLUoIjQ13X4cUEzcNJW0TYCQUEP9zNpHqr2DHLvajzCwUY9ZcjARJ13uAWaCl3u3DhWI4p0+opTrwk7LlnmHYi74mb2/z0V0nbGAKzZ3DoLgRTFcVzhWUeB9n+daI5Yg4aNEDKRlbwOIgsvE2C7ub5QFl4pjV2WeOZjFgtk2e1/fWGwz7yHiPAvE2P3buwFkwSIxjtaB5mAWW0bb80ALglms3uYARhAsEONwyzuBEQSzWPkJ1kcwgmCZ2Hn1RHOwRoxRPdEcrBLDKyeLg5ViZw5WivFsDFaLgyn4a1aL0RiC82wQB0Pwp0UMr76G82wSj+oPrU+beNCudJ5tYiTlaF2s4vZ7pSHjOpvEPF4JMi42Ma/1EwRwsFbMay2c6YtNzHPtIYCDTWJ08p88F6OYN7mFAA7WinmTHSRc6ogP0quYg5nzDV6xwIleIOEyF3EpmK4kCy7jWnA3M60SjCONAu97tWC0oq+mj2rBCLR/bDCL3SrB2JFbJRiOBhTyWjMYkVDKuWYwQMXBb1WCWRzXCR7IrRPsaPfYYBaHVYKxp7BKMAK1qwRjpOMqwZhou0owEnWrBOOFTljm/fw3X6Zg9EQHqMimYCf+Qc9iU3ArvktlsSUY029xBxVZG8x35gM0ZEtwJFJvcrYEPxGpNzlrg/lRhIeGbAhGT/q1zobgQKRf66wL5ue32rnO+uDY0zcj5GRVMB+UUI9XVgej0TwoZ7E6OKj+GmCxJdiSnC3BzDOkZFMw4yAk24L1g52twdprOSuvYfPpvGz80GISRGRV8EQ3OEBCVn8tGRc7K4Kjp5tsISArghvbQT0Wc7Buopkdisni4H2dQ0ZZEFz1eFPmYInXfpAsy4Jjxw7baGdZcFPtsGAWPgAooIlFYkFw3FY8EJrLg11X8whsLg52ksO3+2VxafDOk4TNorgw+CiQ8oiZcVsS4wPMHDxpmKIxN5GSfgMDo6/7OoroInq4Ojz/vy/h/FFvBGM2jJ7q0Zdmt4lq06enuNDapru91za1Djc5tKmj+9K/pGkMe+cGILpdCO1x251Iyi/g4vimU9Z1kQAAAABJRU5ErkJggg=="},rotationCorrection:0,ring:{size:1,color:"rgba(255, 68, 68, 0.2)",strokeWidth:1,strokeColor:"#ffffff",strokeDashed:!0,strokeDashArray:[4,4]}},interaction:{zoomRange:{min:.5,max:8},fitMinScale:1,fitMaxScale:4,enable:!0,enableDoubleTapZoom:!0,enableRobotClick:!1,enableChargingStationClick:!1},controls:{iconWrapperWidth:24,iconWrapperHeight:24,iconWrapperBorderRadius:16,iconWidth:12,iconHeight:12,deleteIconSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8BAMAAADI0sRBAAAAG1BMVEUAAAD////////////////////////////////rTT7CAAAACHRSTlMAgL9g36+fQGFJCmkAAADFSURBVDjL3dS7DcJAEIRhniJ1SIgEBSAqQFRARguEJBTgxJqy7cDeX7ZGmtwX+fbu8+t2d7Pqsb99lqHH617XX6mZr26lrrCkdr58ljTxnTRxsHQZJwfBwXqWhoP1rmfDwfrVFA5mO3Ozm4DHRCwmZDExjwlaDPcYDrYcbDnYcrDlYM/BnoM9b+Jyvnl+tfxh+beA4elIwoGmdAjJlFIxJHIqg1hEuQRzAZ9c+dN6jmB4bj2hcYW2F5omLfe6PMH/0HLXPHpWgenjpk040QAAAABJRU5ErkJggg==",rotateIconSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMA32CAIEAQ779wz4+fUDCvilaH/gAAAZdJREFUSMftltuOxCAIhsWiVqst7/+0m5jsEIUqm72d/64M33BSWvfVP9WgzKZ4wqRyayhWojwbMwlVhfVAdAnrIeHmVK/TGWAvfOJDRAn3cGqSLURc8AJOSrcqcdIrGBT26r8EFd4FbsSBN2kDzgUnnsAOJohKwZSiBZ6PQpBG+5xP6gpWGGRgiksYDhGax0TFrWBAVzn03GqqK7igcwgces46L+DSS/IfuHDWopBBvrNdHBrdaAnuRdlH/p8xzfj7fLutkLr4JN+cyV7P535MqQQDzHnff4eRRu+DZ2dQ4Y4N8GGBK3sPa/mxwJnhoWawwG2EAxlnNXpnbqC5Yzg5Jz41VpgHe3LeVpg3hxebLV7HDgZ+Hi1YiNqmYZX339B/hNXlnpvrOTR2dgFfYlnCh66dXcCPGIwnThxoCSd5A4FYSzhwYLZZ4UO7+pcRTupRBBMciLQPFwQLfL68HTDt4fD2Jr4N8Ply91oSaeuBS9SO7BaOoLMHGeCq15tJwppTyk6qGuBG9KC6Hk6Y9ERRGXj31f/0A2zyPsVxnMRtAAAAAElFTkSuQmCC",scaleIconSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8BAMAAADI0sRBAAAAIVBMVEUAAAD////////////////////////////////////////PIev5AAAACnRSTlMA7zC/QN+fgCAQTQcGNgAAAMRJREFUOMvd0jEKwkAURdFPBEkdsLFKyAYk2UIqO1uXYOUSXIJbCCiCqzTDe8Ei3qmDrz3caebH+7tHLLZ6fvZpHfFYhwaPV8jOiZ0zn5QTd3vlwIdGOXGhnDiUIytHdk7sHNk5sXNi53dg5a9lPQxDHc6vQUu5YlqjmFbGv++W1W2V5ctY5+L534vpt37E89lspr9eaKmzIfbVIfvqzJSbKTdjLsZczLkYczHmrZjyXWLKtaDcTLkZc+K2TzsTH/Xu2vkDlC8AMDsTJN8AAAAASUVORK5CYII=",moveIconSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8BAMAAADI0sRBAAAAJFBMVEUAAAD///////////////////////////////////////////+0CY3pAAAAC3RSTlMAYIDvMBDPv4+fcLUOqFYAAAEWSURBVDjLvZW9isJAFIXHkLCw1S5ss9ikt00h2ETyAqn0CaxsbHwCSyvfwN7KEUQ8L2dilJPE4Z5GPFXgy5efOzP3um6i1FkZeYtGQGrJgDflSrfkSjdk6kGZekimHpTHwIZ6Xz5Ngb9JWB8C2QD4KYBrAM9wymscT7AI4GSZuRq74ly6QOZ5g+O1C6fBzHvwd9nHSfu20aKPZ75dsHPZxckSKWVg1cVfgG9XO+/iuK485az/7uKpUyamTpmYOmVi6o18+X3kH9g9r7d3PYKRtJKNeIHFw8WniR8TZRFFFUsiFlRsB7mZ9FZ0g9eNvP/AIdIHWB9/3TwObD1H0bhE2xNNU7Rc0bAN3ethoUeNHlR6zIkheQMcOzccp+sDkgAAAABJRU5ErkJggg==",horizontalScaleIconSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAUCAYAAACTQC2+AAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAEYSURBVEiJpZVRccMwEERvgsAMagiBYAiBEAgpAzEwBEEIhEAQBKUIUgavH4pnXM2tJTv7qdm7XelWkpkAMAIJeAF3YHA4AxApeACj6qdEBiDzH8HhhYqTPUNmZiehNZtZ7e7L4dVr47u2DcflgovDvQpuaIlMolC6BOZeY0vBSBl8jdRxCtmpy9ThoAw/dZG1SSU2rIlRbH9qiax6nEWPeSHcBOHWK7ISU0EKhj+Xvoj6Yl448snMfo823YFhe7s70RyD2C7AeYeIuoNxTfLeNvg83on67dsidwh5d/AlTQIXsf0jT9DUcqfCcd1hLLROYWkQneJ4lGem/6NvM3tWaz8Or157vmv7QQnHY3GJ/srvlMEnNhL6B6cIZVSNSYqvAAAAAElFTkSuQmCC",verticalScaleIconSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAaCAYAAAC3g3x9AAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAEPSURBVEiJ7ZVdbcMwFIWPGYRBA6EMFgYthEEIBDPIGGQMuiGohiAQrCEIhG8PSdTKtW/srY87Ul6i60++5/5Y2hHQAzMQAL8Xb4EaYORRA9DUwlpgSsA2BaAthXVrinsKwHkP5gtAsXyNX5uG9ctpZPOVxa9gBPeFGQSgFXnzA9AlsjkaF7iKdAEmjCpidIGAS/RvKGqHBRz7OjoWM3tJB0mfzrmPUuAKfZX0Iulb0lvN2X+lFRflyzn3XgNgmeeTtqLwOHJ/aZuLMh0fftnYs4CrAT0mYB350ZtKloO/g/VG3C0rnrm+onSes2Aj6Bnbgk0zifVmVdGCmustB21I+zZS+4xGYL/edubuOcjpBwCFxkKYDWbkAAAAAElFTkSuQmCC",moveButtonOffset:30,textFontSize:12,textFontFamily:bS,textFontWeight:"400",renderOrder:["forbiddenSweepZone","forbiddenMopZone","cleanZone","virtualWall","spot","wayPoint","divider"],forbiddenSweepZone:hS.forbiddenSweepZone,forbiddenMopZone:hS.forbiddenMopZone,carpet:{minSize:1,iconWrapperFillColor:"#5d68fe",deleteIconWrapperFillColor:"#ff4444",rotateMode:"step",scaleMode:"ratioLocked",fillColor:"rgba(93, 104, 254, 0.1)",outlineOffset:30,outlineStrokeColor:"rgba(0, 0, 0, 0.7)",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(93, 104, 254, 0.05)",showRotateButton:!0,textColor:"#5d68fe",textPosition:"bottom",textOffset:20,editing:{isDashed:!0,dashArray:[4,3]},normal:{isDashed:!1,dashArray:[0,0]}},cleanZone:hS.cleanZone,virtualWall:{iconWrapperFillColor:"#ff4444",lineWidth:2,lineColor:"#ff4444",hitAreaThickness:30,outlineOffset:16,outlineStrokeColor:"#ff4444",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(255, 68, 68, 0.05)",minWidth:1,textColor:"#ff4444",textOffset:8,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}},spot:{iconSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAMAAAC8EZcfAAAAqFBMVEUAAAD////////////////////////////////////////////////09P////+vt//Kzv/f4f/z9P/y8//o6P/HzP/////z9P/i5P/////v8f/t7//k5P/m6P/w8v/q6//o6f/S1f/X2v9gbP/b3/+vs/+Vmv9daP7///+us/+aof7r7P9xe/719f+Fjv7W2f9ncv7Cxv+4vf+kqv57hP7h4/+Ql/7M0P8zzBhqAAAAJ3RSTlMAn4Ag3xC/70Bgz3Aw748gMJ/iv3BeUM+/r5+PYHCvgN+FQBWPQDAOL4ZsAAAGb0lEQVR42s2b2XbaMBCGbWzMvmUpJXuatpJteQXM+79ZOTZkKAeiGdlW9F9zlM+zSTNSrEY0vx9NV97SnUScRxP3zVtNn58cywjNn+xhxC8qunl4nlvfKWfwMuESTeznrvUtcu48jpQ30s84uOUURd5AJ6OzcM/+fpL7QRxvhGBMiE1cBOtsdxaZvY4uRMfmp0r8OGUXlRZ+8t9nLP5aJNXHC7MC4K5A5iEH/Wy79swWJ3T+hqEk/BNvP7bq6DuIvV3BCIoTiMU7qy05N+BawYhKwYxe32pFnU+8gIGUEH9bzct54wf5DKSKuGw8WZ6Oexo4VwkxO0bifTvuDQWrqfhYdaZNFpclr5SnrLbS/Jgr3cbCz8UkB92IN06TfBB99ZXueCm3kdPieALJ25j8w2Fx3ABfj5cKWKMKoiqZaxPOK75wwxrW5kA4r8k3gerSsERYedmplx/A1zzhtsqUGoTdAx9UvzZs6M6UAT2K/dQJPVW+3+3yAWFHje++aiTo+UvP5XulDbhK4Ji1qlg9UTz6/qG+p9zS+UZVT8laV6IWhk6PkiD1EyWiOvkWArBtFVXHrJLBOdOi6gT7RN9CopS1LnCyS29BAqZJATVPuj3IYC3aQZ4QDCiYNonyDy5oBvSZRmVlUfugGJCeIfVN+E4xYMa0KiMk8kh3BIIJB/hTwk6t4d3ExUaom/AGw/dLbZMT6ySE8WGQqpkQ0+M9qtTAYMvPlKxThVPNAwKwTJE16eP9kF9QtKZ9IzJN+uXiKWXlkF9RGJN9LJ8OT6kezjmoN/RWQ5eDcup+Z+M8XFC674OG0/6nF6afkFvRsI//0HYRcXSv7ZzNnGzOqVOdssP7JQF8JXlYRIB3rr53yBVBymPZLcpPSg6nB/uNrtyI9mid/xrT3/UoVTqRNLXjKhR3lB55Ihm3lU4h5a/rSKdjPiUIvx5pPhNCMK4qi4OY3wmCR0byKugjl8NU1nE1fydMGabydjggGHCEax9wUV3Ih3HlwGiDMyBy7yydvMXNuqRHrg/8RhwfHCzVAG/CtPzphyyJQ1wKgzswJsybSeMf+CSO4IiOMeEWHzY/ZGtleA93MYAOvtJksq9+RwOuwcO4JidAx82r7Ljvo791hGwT0UHoy2Y0CzTg7jxaZJG9QwHKJiA22hlbyDdcF5GgA8duBLA8aDk4QAddvILmAMvMtJAqf6wZMIIqo82CkCT0GKwPCDH4ULfMQM3va8/iTht1EPan+nXwmbbUCgdo0z77TvatO/Re3CMMRONG9uI++uCRcnQQ9vGN2FbWus9gLdwkBe3hDH+Gm1lfqPyFwF++ONjTVoEecEXWV1riO5wQaUIPP+0p5GPgFX7y4eNM2OewJMorL/ImMaNcATqYlzchYVTxKC/6W8Kshw8lDqZcS4byQ+aMMqkI5S8pp5SHBSmmzxlCymGnl/bVJbtT0vwtwFyVPFCuwTaH4a9zLf5oL29yzEXEEwQhOgy5O7i4b5Z8hCuNEF4G1A5CqDWVhv2LeKRrXQEhKA3CnPKSspLXOWEcd454UcGw8nGt9h3ULXSmHNSzp53BoDNdlXSQHxQPvyK3zpihlSb8qjJBfcU1s6Rakq+z4yuICeA1OS4bgI9rISYxoyiN4DQtyeNI5c2M8P9j3AVC5e1Mr4s+YIYq1+3B2s8yf13EjK4QTjIyzfU9O6JPlOE6LGRalVBe297rNiEYEKk3zSYEA5pqwjUYECcXtikdSiOKASGRM6ZJOcmAUAv5hmlRrPCI1Znoy5N0W24iM4ukd32vbHO4NqXI1ZHJMENZWlQ5ETzZaFMiUv3fpleuIwzTLTiYqhcdYZhBBpM1gycbrcmv9U9DDm+TEPiisaWoEbHzpm/BqgEI07g2i03A4Ym8qh6BsC2+hVVLD0DYDp9t1dQtELbBd2vVVXcIhM3zDbuWmYQnfEYSnvAZSSjjoxPaB0JD+fY6EppUXy4TmsoHhKbyAaGpfEBoKt8noV/zfAV8xhH653yGEV7gM4rwIp9BhFf4jCG8ymcI4Rd8RhB+yWcAoYTv2wl18wGhqXxAaCofEJrKB4Sm8gGhqXxAaCqfZXWkhD5tftUaoal8QGgqHxCaygeEpvIBoal8QGgqHxCaygeEpvIBoal8QGgqHxCaygeEpvIBoal8n4TG8u0JDefbExrOtyc0nG9PaDjfntBwvj1h03z/ABD9FUIpArU6AAAAAElFTkSuQmCC",iconSize:8,iconSizeFixed:!1,size:1,strokeColor:"#5d68fe",strokeWidth:2,fillColor:"rgba(93, 104, 254, 0.1)",showText:!0,textColor:"#5d68fe",textPosition:"bottom",textOffset:8,nameLabel:{fontSize:12,fontFamily:bS,fontWeight:"400",color:"#5d68fe",position:"top",offset:-8,editing:{visible:!0},normal:{visible:!0}},editing:{isDashed:!1,dashArray:[0,0],showIcon:!0,showFrame:!0},normal:{isDashed:!1,dashArray:[0,0],showIcon:!1,showFrame:!0}},wayPoint:{showOrder:!0,normal:{iconSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAACMCAMAAACZHrEMAAAAeFBMVEUAAAD///////////////////////////////////////////////////////////////////+Kior///+ZmZmRkZHw8PDFxcXT09Onp6fq6uq2trb4+Pjx8fG9vb2goKDi4uLMzMyvr6/39/fg4OC+vr7b29uYmJjRFtxTAAAAEnRSTlMAIN+A778QcGDPMJ9AkKCwUH/CxK06AAAEhUlEQVR42u2biZLaMAyGc5BACEcrxXEOjgW2u+//hjUsRdPJDLEti810+j3BP9Kvw04ccVgu0nKbJDM0zJIiK9Mfy+gbyBfr4iZiQLb+kUcvJP6Z4VOyeRy9hHyeoQXFQl7PqpyhLaWsnNXfQakb3Z8/PxUY1Oex7fVH93e6VhEhJ2X3fmgVEER7eEcik4lOXpKSxgh5xrnZiSZr/vDK+0HBKKp/JCyZR2GJs4eUFixpm4ecWCAsJMWO6o+cWbjg5Gv8Yt+CI+c9frEOlaLiblsNHuigqVomeKOrwItqH07N8m6XExB+wZmxJ/rinqIeGPQXvLEIomVPKWKkiqlmSVrCqGFkKv7yS6eAjeqYvokT0hJADa+mSEtANYXfTrr+8ouCQKi9fy+eD7wbyMVzX/PuKghIdbmZOPY0TA9B6fFK5pckDYE5UaJcq3oPweluiXKrqBKvkGEC26Z0CoxMkmiEuxxhMkpScPaOHl7hlTOI0FJo7APTgBBvTqGJ7d0rH5pSLjAUmtIlMC2I0VKvsVs1OxDkzb4NFzSUhDiQhW2ytFMgiLq14dh2RDYgSoOG1LbJnEGU1jJPOV4BOShP4/X0Aw3vIAfV08JuDT+AMAe71TyT6nhD0xTRGGQZSdStCVudrjsQp6aT94h/P0CcxsbBKe2bomibtreRG0zDE1Q5iWICOKNhazOyjyBOhYbE5lT7CTbIi5mhQYEo1Ggm0fMMeOW/mH9BzKSqKbHvM/I7xFZ+A6YOnE1i0fuz6k3goHLlgw6VI1czNYjT2dxE5PiSeaDQ6qxSSDuY/FvYHVVOIExD/h01zQ6Eqe0ur/LZC3a9Iy0Qz8lkV3LK0tbq4ko+T/X9oDKFPDlc6m3Ez3GN/XXnSrrvVS4XwYWwhTXtMuOk/CtGvn3JwqJ7RO/2oTIVHd21vX1pdPcgQo90CWzFRig0FBjnz4K/wPDtgTGhkSoodQ/MJL6YatfAUK+pIDAVugaGek0DgWn8/qFJJb7HHZHuFV3IE4Eb4Zqmkhur8OWt/X9Jy4J6mP6DYPyL9hbQvVTW7qRhE9WTe30oQiaqGrjXx8NvE0jSlXW4RB0YSaJmEyZR1eWRpO9PVE1J4ibqBEw0JYlDEWJGtchPErW+WrEMQ0liMufb5oN+FeSy5da3HmxUnPrm2eY4+CuZX991xTLMMuLDt01HVR2GzL/baBxcmbFt42viw8AwoR6J7I5+RxOMo6DMvUxc1SMdhjWkOiVkXnkTn3DsEwHzfYZ2LSQyb3gTY++2gM/iSIQFupRUdSHzSpA6lFRVk3ll2KDtcqNqepgiRF7YTqlOqpCGJdWMFrVcIQ0fg+mARc1/JqfHteAyEmeBY+2mRypqaVJ8voYekYpanvRp8ztePLTw2031pNltopdRkJqBlkGDkSb/S81QS5JHXPjvPVXNaTB8NQFfkfLf5QIQTC38XashLQ37jThfzRS0PAZDQ1rYr9X5ak60NLC18NVoAM0YjoGHptY+w1FKzSS0GDUT0mLUTEiLUTMhLUbNhLQYNRPSYtSE0fIbFg3xTdS8kE8AAAAASUVORK5CYII=",iconSize:32,orderText:{fontSize:10,fontFamily:bS,fontWeight:"600",color:"#8a8a8a"},orderContainer:{size:12,backgroundColor:"#ffffff",offsetY:20,offsetX:0}},editing:{iconSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAACMCAMAAACZHrEMAAAAdVBMVEUAAAD/////////////////////////////////////////////////////////////////RET/////W1v/6Oj/oqL/ubn/c3P/UFD/8/P/3Nz/ior/0ND/5+f/ra3/f3//T0//lZX/lpb/Z2f/xcX/9PT/aGguCk8uAAAAEXRSTlMAIN+A77+fEHDPMEBgkLBfUGJvpxAAAASDSURBVHja7ZyJkpswDIa5Cbla2WAI5Gqyu+//iCUhjaYzmdhGEst0+j3BP9KvwyZOQGG5jrNtFCWqJ4mKNIt/LoNvIF9vikS9It38zIMJCeNUvSVdhMEk5ItUOVCs5fWsskS5ksnKWf0dlNJU3UnrM/Sc9bXuqo/273StAkROym5/qc/wivqyV0gqE508QyUGhbzkZHaiyVo8vbK/nMHKuXsmLFoEvITpU0oNjtTmKScUCAtKcUP/kZPwBSffqIFDDZ6cDmpgw5Wi4mHbCkZQsaZqGak7rYZR6AOfmuXDLke4QwhOQp7oPx4p6oBA9+g6P1i0HDSQ0AcGNUvUwqOGkKlw8Et7BjJNS/RNGKEWBjW0mkItjGqKcTvpZvDLGZhoDuN78eKNd0kuXow1704DI3p3N3E40jAdsNIN29+4JFXAzBET5VvVB2CnvSfKr6KGfRcNw2ybzCswMknCEe5zhEkxSewcPD28UjdOIEKNoXEPjAEh9l6hCd3dKx+aTC4wGJrMJzA1iFF79Jq16mlBkL17Gy5wKAlxQQu7ZGnXgCDNvQ2HriPSgChG9cSuTeYEotSOecrVDZAD82Svp5+qZw9yYD2t3dbwXyDMxW01T107Ht00RWADLSNJc2/CTqfrFsQp8eRt8e8HiGNcHBzjvilK5dL2MvfBRD9BZbMoJoCT6tm6jOwriKNVT+RyqtXggryYRPU0IAo2mln0vB5147+Yf0HMrKopcu8z8jvEVn4Dxg6czmLR+7PqzeCgcuMDD5WWq5kSxGldbiJyNck8aJTTWaWYxMEnLCarg48gjEH/Wk2zA2FKt8urPJlg17sOC4SddIKV3AxLp531BHkqHweVOeTJ41IvEz/HGffrzpV039M+F8GFsIUr3GXsxPQrRrp90cKie0Tn96EyFh3dpbt9cXR3IEKn8BLYiYwaGnpgkFA9XfPtgelDI1VQzSMws/hiWvkGBnuNBma08g0M9hoDzJhxv6GJJb7HXRXeK/qQRwI3wqVlKlmG9y9+966DEaTcHtaf6F5fwoT5a4/BsvYn5k1Uh+4dQ8GZKG1xr5uH9zNI0o0NX6IuhCRhs+FJlP58Jun7E1VikqiJOgKRCpNEoeCYUbWiJwlbX9mQDINJIrKg2+YDfypIZUut7wo3KjJ5RLPNF9sv/bG+S00yzDKgQ7dNi1XNQ4rdZpxhtgEfeTTWxJc3hqE9Etld/Y8m2GH4WIwysS4tHYY0pNpGyLzyJj4q/ETASxj5nr8ri3npJlad3wKehIEIa+VTUvoTzStB7FFSukTzypAp1+WmGbRsAjnywnVKta6FRC8pYy1qj0IiPwarGIua/kyusmtRy0CctbK1m05hUUsTq/dr6JfCopYnftv8vj4n1ILtRr9pdlkwGQWqea2lCKYjRzUvtUTT/mdG9HLXakpKg6GrYXxFSn+XC4AQtdB3LYNaDPmNOF3NHLQ8B4NBLR6X8VJqjrg0kLXQ1VQAFWE4Mg/NqiIMR3Y1s9DSq5mRll7NjLT0amakpVczIy29mhlp6dXwaPkN5W7InuRCZwAAAAAASUVORK5CYII=",iconSize:38,orderText:{fontSize:14,fontFamily:bS,fontWeight:"600",color:"#ff4444"},orderContainer:{size:16,backgroundColor:"#ffffff",offsetY:23,offsetX:0}}}},furniture:{assets:[{type:1,src:pS,width:1.8,height:2}],opacity:1,iconWrapperFillColor:"#26a69a",outlineOffset:16,outlineStrokeColor:"#26a69a",outlineStrokeWidth:1.5,outlineFillColor:"rgba(38, 166, 154, 0.05)",outlineDashed:!0,outlineDashArray:[4,3],showSizeText:!0,textColor:"#26a69a",textPosition:"bottom",textOffset:8,minScaleRatio:.5,maxScaleRatio:2,rotateDirection:"cw",lockAspectRatio:!1},divider:{lineColor:"#ff4444",dashLineWidth:2,dashLineDashArray:[4,3],solidLineWidth:2,endPointSize:12,endPointColor:"#ff4444",endPointStrokeColor:"#ffffff",endPointStrokeWidth:2,hitAreaThickness:30,resetDividerWhenOutOfRoom:!1,defaultExtension:20,defaultDirection:"horizontal"},detectedObject:{height:43,width:38,interactive:!1,anchor:{x:.5,y:.5}},heatmap:{cellSize:2,maxDistance:14,smoothIterations:10,heatmapAlpha:.8,useGradient:!0,colorGradients:["#FF3B30","#FF7A00","#FFA100","#FFD700","#99DD70","#2EC070","#40E0D0","#88D0E9"]},snapshot:{format:"png",quality:1,antialias:!0,resolution:4}},_S={dividingRoomId:-1,enableRoomSelection:!1,enableInteraction:!0,enableMapClickCapture:!1,editingForbiddenSweepZoneIds:[],editingForbiddenMopZoneIds:[],editingCleanZoneIds:[],editingCustomZoneIds:{},editingVirtualWallIds:[],editingSpotIds:[],editingWayPointIds:[],editingCarpetIds:[],editingFurnitureIds:[],roomPropertyFoldIds:[],roomSelectionMode:"checkmark",mapRotation:0,selectRoomIds:[],showRoomProperty:!1,showRoomOrder:!0,showRoomName:!0,showRoomType:!0,showPath:!0,showRobot:!0,showChargingStation:!0,showRoomFloorType:!0,showCarpet:!0,showDetectedObjects:!0,showFurnitures:!0,showCustomCarpets:!0,showChargingStationRing:!1,showRobotRing:!1,showRobotSleepAnimation:!1,showRobotPulseCircle:!1,unit:"meter",unitLabel:"m",selectedCarpetIds:[]},xS=["areRoomsAdjacent","getForbiddenSweepZones","getForbiddenMopZones","getCleanZones","getVirtualWalls","getSpots","getWayPoints","getViewportCenterPoint","getMapCenterPoint","getWallPointsByViewportCenter","getForbiddenSweepZonePointsByViewportCenter","getForbiddenMopZonePointsByViewportCenter","getCleanZonePointsByViewportCenter","getSpotPointByViewportCenter","getEffectiveDividerPoints","getDividerEndPoints","isNearChargerOrRobot","isPointInAnyRoom","isWallIntersectsAnyRoom","isZoneIntersectsAnyRoom","resetPanZoom","snapshot","snapshotByData","getCustomCarpets","forceEndGesture","getFurniturePointsByViewportCenter","getCustomCarpetPointsByViewportCenter","getRectPointsByCenter","getFurnitures","drawCustomZones","getCustomZones","clearCustomZones","setEditingCustomZones"],SS=["onMapFirstDrawed","onMapDrawed","onPathDrawed","onRoomPropertiesDrawed","onRoomsDrawed","onClickRoom","onClickRoomProperties","onRemoveForbiddenSweepZone","onRemoveForbiddenMopZone","onRemoveCleanZone","onRemoveVirtualWall","onUpdateForbiddenSweepZone","onUpdateForbiddenMopZone","onUpdateCleanZone","onUpdateVirtualWall","onUpdateSpot","onUpdateWayPoint","onUpdateDivider","onClickForbiddenSweepZone","onClickForbiddenMopZone","onClickCleanZone","onClickVirtualWall","onClickSpot","onClickWayPoint","onClickDetectedObject","onClickCustomElement","onClickMap","onClickCarpet","onDeleteCarpet","onUpdateCustomCarpet","onDeleteCustomCarpet","onGestureStart","onGestureEnd","onClickRobot","onClickChargingStation","onRemoveFurniture","onUpdateFurniture","onClickFurniture","onRemoveCustomZone","onUpdateCustomZone","onClickCustomZone"],wS="MAIN",CS=5e3;const AS="__ray_robot_map_late_lifecycle_markers__";function TS(){return Date.now()}function PS(){var c;try{return null!=(c=globalThis.localStorage)?c:null}catch(e){return null}}function MS(){var c,e;try{return null!=(e=null==(c=globalThis.document)?void 0:c.visibilityState)?e:null}catch(t){return null}}function ES(c,e){if(!c)return[];try{const t=c.getItem(e);if(!t)return[];const i=JSON.parse(t);return Array.isArray(i)?i.map(c=>function(c){var e,t,i,n;if(!c||"object"!=typeof c)return null;const r=c;return"number"!=typeof r.seq||"number"!=typeof r.ts||"string"!=typeof r.event||"string"!=typeof r.sessionId?null:{seq:r.seq,ts:r.ts,event:r.event,sessionId:r.sessionId,instanceId:null!=(e=r.instanceId)?e:null,visibilityState:null!=(t=r.visibilityState)?t:null,rendererType:null!=(i=r.rendererType)?i:null,mapId:null!=(n=r.mapId)?n:null,detail:r.detail}}(c)).filter(c=>null!==c):[]}catch(t){return[]}}function RS(c){if(!c)return{};try{const e=c.getItem(AS);if(!e)return{};const t=JSON.parse(e);return"object"==typeof t&&t?t:{}}catch(e){return{}}}function kS(c,e=PS()){!function(c,e){if(c)try{c.setItem(AS,JSON.stringify(e))}catch(t){}}(e,__spreadProps(__spreadValues({},RS(e)),{[c.event]:c}))}function FS(c={}){var e,t,i,n,r,s;const a=void 0===c.storage?PS():c.storage,o=null!=(e=c.storageKey)?e:"__ray_robot_map_debug_ring__",f=null!=(t=c.maxEntries)?t:200,l=null!=(i=c.previousTailSize)?i:20,d=null!=(n=c.now)?n:TS,h=null!=(s=null==(r=c.createSessionId)?void 0:r.call(c))?s:`session-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,u=ES(a,o),p=u.length>0?u[u.length-1].sessionId:null;let g=u.length>0?u[u.length-1].seq:0;const m=()=>ES(a,o);return{getSessionId:()=>h,hasStorage:()=>null!==a,readAll:m,readCurrentSession:()=>m().filter(c=>c.sessionId===h),readPreviousSessionTail:()=>p?m().filter(c=>c.sessionId===p).slice(-l):[],readLateLifecycleMarkers:()=>function(c=PS()){return RS(c)}(a),clear:()=>{if(function(c=PS()){if(c)try{c.removeItem(AS)}catch(e){}}(a),a)try{a.removeItem(o)}catch(c){}},record:c=>{var e,t,i,n;g+=1;const r={seq:g,ts:d(),event:c.event,sessionId:h,instanceId:null!=(e=c.instanceId)?e:null,visibilityState:null!=(t=c.visibilityState)?t:MS(),rendererType:null!=(i=c.rendererType)?i:null,mapId:null!=(n=c.mapId)?n:null,detail:c.detail},s=[...m(),r].slice(-f);return function(c,e,t){if(c)try{c.setItem(e,JSON.stringify(t))}catch(i){}}(a,o,s),null==BS||BS(r),r}}}let IS=null,BS=null;function DS(){return IS||(IS=FS()),IS}class OS{constructor(c){this.app=c}getApp(){return this.app}getConfig(){return this.getApp().config}getDebuggerMode(){return!1}getRoomData(c){return this.getApp().managers.roomsManager.getRoomPropertyById(c)}get coords(){return this.getApp().coords}get ticker(){return this.getApp().ticker}get mapState(){return this.getApp().mapState}get isMapDrawn(){return this.getApp().isMapDrawn}get config(){return this.getConfig()}get gloalConfig(){return this.getConfig().global}get mapConfig(){return this.getConfig().map}get roomConfig(){return this.getConfig().room}get heatMapConfig(){return this.getConfig().heatmap}get pathConfig(){return this.getConfig().path}get carpetConfig(){return this.getConfig().carpet}get robotConfig(){return this.getConfig().robot}get chargingStationConfig(){return this.getConfig().chargingStation}get interactionConfig(){return this.getConfig().interaction}get controlsConfig(){return this.getConfig().controls}get furnitureConfig(){return this.getConfig().furniture}get dividerConfig(){return this.getConfig().divider}get detectedObjectConfig(){return this.getConfig().detectedObject}get snapshotConfig(){return this.getConfig().snapshot}get appContainer(){return this.getApp().components.appContainer}get interaction(){return this.getApp().components.interaction}get gestureController(){return this.getApp().components.interaction}get viewportContainer(){return this.getApp().components.viewportContainer}get mapManager(){return this.getApp().managers.mapManager}get pathManager(){return this.getApp().managers.pathManager}get heatmapManager(){return this.getApp().managers.heatmapManager}get controlsManager(){return this.getApp().managers.controlsManager}get detectedObjectManager(){return this.getApp().managers.detectedObjectManager}get customElementsManager(){return this.getApp().managers.customElementsManager}get roomsManager(){return this.getApp().managers.roomsManager}get editControlManager(){return this.getApp().managers.editControlManager}get furnitureManager(){return this.getApp().managers.furnitureManager}get runtime(){return this.getApp().runtime}get runtimeSnapshot(){return function(c){const e=Kx.get(c);"production"===(Xx?"production":void 0)||e||console.warn("Please use proxy object");const[t,i]=e;return nS(t,i())}(this.getApp().runtime)}isInteractionEnabled(){return this.runtimeSnapshot.enableInteraction}fixPrecision(c,e){return E_(c,e)}get events(){return this.getApp().events}get baseScale(){return this.getApp().components.interaction.targetScale.x}get currentScale(){return this.getApp().components.appContainer.scale.x}get emitter(){return this.getApp().emitter}getChargerPosition(){const c=this.mapState;return c?this.fixPrecision({x:c.charger.x-c.origin.x,y:c.charger.y-c.origin.y}):null}getRobotPosition(){const c=this.pathManager.robot;return c?c.getCurrentPosition():null}}class LS{constructor(c=()=>"meter"){__publicField(this,"cmPerPixel",null),__publicField(this,"getDisplayUnit"),this.getDisplayUnit=c}setResolution(c){!Number.isFinite(c)||c<=0?V_.warn("[CoordinateSpace] Ignoring invalid resolution",c):this.cmPerPixel=c}isReady(){return null!=this.cmPerPixel}toPixels(c){return c*(100/this.requireResolution("toPixels"))}toMeters(c){return c*(this.requireResolution("toMeters")/100)}toDisplayUnit(c){switch(this.getDisplayUnit()){case"feet":return 3.28084*c;case"centimeter":return 100*c;default:return c}}validateShape(c,e){const t=this.toPixels(e.minSize),i=null!=e.maxSize?this.toPixels(e.maxSize):void 0,n=sx(c,t,i);return ax(n)}requireResolution(c){if(null==this.cmPerPixel)throw new Error(`[CoordinateSpace] ${c} called before map resolution is ready. Call setResolution(cmPerPixel) (done by MapApplication on map draw) before converting between meters and pixels.`);return this.cmPerPixel}}let zS=(c=21)=>{let e="",t=0|c;for(;t--;)e+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[64*Math.random()|0];return e};const GS=Object.freeze(Object.defineProperty({__proto__:null,nanoid:zS},Symbol.toStringTag,{value:"Module"})),US=(c,e,t)=>{if(null!=e){if("number"==typeof e&&Number.isFinite(e)&&!(e<=c))return e;V_.warn(`[${t}] maxSize (${String(e)}) must be a finite number greater than minSize (${c}); ignoring.`)}};class VS extends xe{constructor(c,e){super(),__publicField(this,"viewportBounds",{x:0,y:0,width:0,height:0}),__publicField(this,"maskGraphics",null),__publicField(this,"containerElement",null),this.containerElement=e||window,this.calculateViewportBounds(c.global),this.position.set(this.viewportBounds.x,this.viewportBounds.y),this.createMask()}calculateViewportBounds(c){const{containerTop:e,containerLeft:t,containerWidth:i,containerHeight:n}=c,{width:r,height:s}=this.getContainerSize(),a=this.parseSize(t,r),o=this.parseSize(e,s),f=this.parseSize(i,r),l=this.parseSize(n,s);this.viewportBounds={x:a,y:o,width:f,height:l}}getContainerSize(){if(!this.containerElement)return{width:window.innerWidth,height:window.innerHeight};if(this.containerElement===window)return{width:window.innerWidth,height:window.innerHeight};const c=this.containerElement;return{width:c.clientWidth||window.innerWidth,height:c.clientHeight||window.innerHeight}}createMask(){this.maskGraphics=new _o,this.maskGraphics.rect(0,0,this.viewportBounds.width,this.viewportBounds.height).fill(16777215),this.addChild(this.maskGraphics),this.mask=this.maskGraphics}parseSize(c,e){if(!isNaN(Number(c)))return Number(c);if((c=c.trim()).endsWith("%")){return e*(parseFloat(c)/100)}if(c.endsWith("vw")){const e=parseFloat(c)/100;return window.innerWidth*e}if(c.endsWith("vh")){const e=parseFloat(c)/100;return window.innerHeight*e}if(c.endsWith("rpx")){return parseFloat(c)*(window.innerWidth/750)}return c.endsWith("px")||!isNaN(parseFloat(c))?parseFloat(c):(V_.warn(`Cannot parse size value: ${c}`),0)}getViewportBounds(){return __spreadValues({},this.viewportBounds)}updateViewport(c){var e,t;this.calculateViewportBounds(c.global),this.position.set(this.viewportBounds.x,this.viewportBounds.y),null==(e=this.maskGraphics)||e.clear(),null==(t=this.maskGraphics)||t.rect(0,0,this.viewportBounds.width,this.viewportBounds.height).fill(16777215)}addContent(c){this.addChild(c)}}const NS="roomFill",WS="free",HS="roomFloorType",jS="carpet",YS="obstacle",XS="heatmap",ZS="path",qS="furniture",KS="controls",QS="roomInfo",JS="detectedObject",$S="customElement",cw="customElementGif",ew="chargingStation",tw="robot",iw="customCarpet",nw="editControls",rw=["interaction",NS,WS,HS,jS,iw,YS,XS,ZS,qS,QS,JS,$S,cw,ew,tw,KS,nw],sw=[KS,nw,iw,$S,cw,JS,qS];class aw extends xe{constructor(c){super(),__publicField(this,"layers",new Map),__publicField(this,"mapRotation",0),__publicField(this,"backgroundGraphics"),__publicField(this,"lastBackgroundState",null),this.appService=c;const e=this.appService.getApp().getViewportBounds();this.position.set(Math.round(e.width/2),Math.round(e.height/2)),this.pivot.set(0,0),this.backgroundGraphics=new _o,this.backgroundGraphics.label="snapshotBackground",this.backgroundGraphics.visible=!1,this.addChild(this.backgroundGraphics),this.initializeLayers()}initializeLayers(){Object.values(rw).forEach(c=>{const e=new xe;e.label=c,c===KS&&(e.isRenderGroup=!0),c===nw&&(e.isRenderGroup=!0),c===HS&&(e.eventMode="none"),this.layers.set(c,e),this.addChild(e)})}getLayer(c){return this.layers.get(c)}addToLayer(c,e,t){const i=this.layers.get(c);return i?(void 0!==t&&(e.zIndex=t),i.addChild(e),!0):(V_.warn("[AppContainer Debug] Layer not found:",c),!1)}removeFromLayer(c,e){const t=this.layers.get(c);return!!t&&(e.parent===t&&(t.removeChild(e),!0))}clearLayer(c){const e=this.layers.get(c);return!!e&&(e.removeChildren(),!0)}setLayerVisibility(c,e){const t=this.layers.get(c);return!!t&&(t.visible=e,!0)}updateOriginTrackedLayers(c,e){sw.forEach(t=>{const i=this.layers.get(t);i&&i.position.set(c,e)})}getLayerVisibility(c){const e=this.layers.get(c);return!!e&&e.visible}setMapRotation(c){this.mapRotation=c*Math.PI/180,this.rotation=this.mapRotation}getMapRotation(){return 180*this.mapRotation/Math.PI}getMapRotationRadians(){return this.mapRotation}getSnapshotBounds(){this.layers.forEach(c=>{});const c=this.backgroundGraphics.visible;this.backgroundGraphics.visible=!1;const e=this.getLocalBounds();return this.backgroundGraphics.visible=c,new D(e.x,e.y,e.width,e.height)}updateBackground(c,e){if(!e)return this.backgroundGraphics.visible=!1,void(this.lastBackgroundState=null);const t=this.getSnapshotBounds(),{x:i,y:n,width:r,height:s}=t;this.lastBackgroundState&&this.lastBackgroundState.color===c&&this.lastBackgroundState.width===r&&this.lastBackgroundState.height===s&&this.lastBackgroundState.x===i&&this.lastBackgroundState.y===n?this.backgroundGraphics.visible=!0:(this.backgroundGraphics.clear(),this.backgroundGraphics.rect(i,n,r,s).fill(c),this.backgroundGraphics.visible=!0,this.lastBackgroundState={color:c,x:i,y:n,width:r,height:s})}}class ow extends we{constructor(c,e){super(e),__publicField(this,"throttledUpdateScale"),__publicField(this,"fixedWidth",0),__publicField(this,"fixedHeight",0),__publicField(this,"isFixedSizeSet",!1),__publicField(this,"sizeFixed",!0),__publicField(this,"baselineScale",1),this.appService=c,this.anchor.set(.5),this.visible=!1,this.throttledUpdateScale=P_(this.updateScale.bind(this),30,{leading:!0,trailing:!0}),this.registerScaleListener()}setFixedSize(c,e){this.fixedWidth=c,this.fixedHeight=e,this.isFixedSizeSet=!0,this.applySize()}setSizeFixed(c){this.sizeFixed=c,this.baselineScale=1,(c&&this.isFixedSizeSet||!c&&this.isFixedSizeSet)&&this.applySize()}set width(c){this.isFixedSizeSet?V_.warn("EnhancedSprite: 使用 setFixedSize() 方法来设置宽度"):this.setFixedSize(c,this.fixedHeight||c)}set height(c){this.isFixedSizeSet?V_.warn("EnhancedSprite: 使用 setFixedSize() 方法来设置高度"):this.setFixedSize(this.fixedWidth||c,c)}get width(){return this.fixedWidth||super.width}get height(){return this.fixedHeight||super.height}registerScaleListener(){this.appService.emitter.on("antiScale",this.throttledUpdateScale)}applySize(){if(this.destroyed||!this.scale)return;if(!this.isFixedSizeSet||!this.texture||0===this.texture.width||0===this.texture.height)return;const c=this.appService,e=this.fixedWidth/this.texture.width,t=this.fixedHeight/this.texture.height;if(this.sizeFixed){const i=c.currentScale;if(0===i)return;const n=e/i,r=t/i;this.scale&&super.scale.set(n,r)}else this.scale&&super.scale.set(e/this.baselineScale,t/this.baselineScale)}updateScale(c){!this.destroyed&&this.scale&&this.sizeFixed&&(this.isFixedSizeSet?this.applySize():0!==c&&super.scale.set(1/c))}loadTextureAndSetSize(c,e){return __async(this,null,function*(){try{const t=this.appService,i=yield Oa.load(c);if(this.destroyed)return;if(this.texture=i,this.destroyed)return;if(void 0!==e.sizeFixed&&this.setSizeFixed(e.sizeFixed),this.setFixedSize(e.width,e.height),this.destroyed)return;t.getApp().renderOnceNextFrame()}catch(t){V_.error(`Failed to load texture "${c}":`,t)}})}draw(c,e){const{x:t,y:i,rotation:n=0}=c;e&&!this.visible?this.visible=e():e||this.visible||(this.visible=!0),this.rotation=n,this.position.set(t,i)}set texture(c){super.texture=c,this.isFixedSizeSet&&c&&c.width>0&&c.height>0&&this.applySize()}get texture(){return super.texture}destroy(c){this.appService.emitter.off("antiScale",this.throttledUpdateScale),this.throttledUpdateScale.cancel(),super.destroy(c)}}class fw extends ow{constructor(c){super(c),this.appService=c,this.initializeSprite()}initializeSprite(){return __async(this,null,function*(){const c=this.appService;yield this.loadTextureAndSetSize("chargingStation",c.chargingStationConfig.icon)})}draw(c){return __async(this,arguments,function*({x:c,y:e,rotation:t}){const i=this.appService;__superGet(fw.prototype,this,"draw").call(this,{x:c,y:e,rotation:t},()=>i.runtimeSnapshot.showChargingStation)})}}class lw extends _o{constructor(c,e){super(),__publicField(this,"currentPosition",null),__publicField(this,"config"),__publicField(this,"handleScaleChange",()=>{this.redraw()}),this.appService=c,this.setupAntiScaleListener(),this.config=e.config}setupAntiScaleListener(){this.appService.emitter.on("antiScale",this.handleScaleChange)}draw(c){const e=this.appService;this.currentPosition=c;const{size:t,color:i,strokeWidth:n,strokeColor:r,strokeDashed:s,strokeDashArray:a}=this.config;this.clear();const o=e.coords.toPixels(t),f=e.getApp().toFixedSize(n);this.setFillStyle({color:i}),s&&a.length>=2?this.drawDashedCircle(c,o,r,f,a):this.circle(c.x,c.y,o).fill().stroke({color:r,width:f,cap:"round",join:"round"})}drawDashedCircle(c,e,t,i,n){const r=this.appService;this.circle(c.x,c.y,e).fill();const s=r.getApp().toFixedSize(n[0]),a=r.getApp().toFixedSize(n[1]),o=2*Math.PI*e,f=s+a,l=Math.floor(o/f);if(0===l)return void this.circle(c.x,c.y,e).stroke({color:t,width:i,cap:"round",join:"round"});const d=o/l,h=d*(s/f);for(let u=0;u<l;u++){const t=u*d/e,i=(u*d+h)/e,n=Math.max(4,Math.ceil(Math.abs(i-t)*e/2)),r=(i-t)/n;for(let s=0;s<=n;s++){const i=t+r*s,n=c.x+e*Math.cos(i),a=c.y+e*Math.sin(i);0===s?this.moveTo(n,a):this.lineTo(n,a)}}this.stroke({color:t,width:i,cap:"round",join:"round"})}redraw(){this.currentPosition&&this.draw(this.currentPosition)}destroy(){this.appService.emitter.off("antiScale",this.handleScaleChange),super.destroy()}}class dw{constructor(c,e={}){var t,i;__publicField(this,"target"),__publicField(this,"isPointerDown",!1),__publicField(this,"pointerDownPos",null),__publicField(this,"clickThreshold"),__publicField(this,"stopPropagation"),__publicField(this,"clickCallback",null),this.target=c,this.clickThreshold=null!=(t=e.clickThreshold)?t:10,this.stopPropagation=null!=(i=e.stopPropagation)&&i,this.clickCallback=e.onClick||null,this.setup()}setup(){this.target.interactive=!0,this.target.eventMode="static",this.target.on("pointerdown",this.handlePointerDown.bind(this)),this.target.on("pointermove",this.handlePointerMove.bind(this)),this.target.on("pointerup",this.handlePointerUp.bind(this)),this.target.on("pointerupoutside",this.handlePointerUpOutside.bind(this))}handlePointerDown(c){this.stopPropagation&&c.stopPropagation(),this.isPointerDown=!0,this.pointerDownPos={x:c.globalX,y:c.globalY}}handlePointerMove(c){if(this.stopPropagation&&c.stopPropagation(),this.isPointerDown&&this.pointerDownPos){const e=c.globalX-this.pointerDownPos.x,t=c.globalY-this.pointerDownPos.y;Math.sqrt(e*e+t*t)>this.clickThreshold&&(this.isPointerDown=!1,this.pointerDownPos=null)}}handlePointerUp(c){if(this.stopPropagation&&c.stopPropagation(),this.isPointerDown&&this.pointerDownPos){const e=c.globalX-this.pointerDownPos.x,t=c.globalY-this.pointerDownPos.y;Math.sqrt(e*e+t*t)<=this.clickThreshold&&this.clickCallback&&this.clickCallback(c,this.target)}this.isPointerDown=!1,this.pointerDownPos=null}handlePointerUpOutside(){this.isPointerDown=!1,this.pointerDownPos=null}setClickCallback(c){return this.clickCallback=c,this}setClickThreshold(c){return this.clickThreshold=c,this}getTarget(){return this.target}isInteracting(){return this.isPointerDown}destroy(){this.target.off("pointerdown",this.handlePointerDown),this.target.off("pointermove",this.handlePointerMove),this.target.off("pointerup",this.handlePointerUp),this.target.off("pointerupoutside",this.handlePointerUpOutside),this.clickCallback=null}}class hw extends xe{constructor(c){super(),__publicField(this,"chargingStation"),__publicField(this,"ring"),__publicField(this,"unsubscribeFns",[]),__publicField(this,"clickHandler"),this.appService=c,c.appContainer.addToLayer(ew,this),this.ring=new lw(this.appService,{config:this.appService.chargingStationConfig.ring}),this.ring.visible=this.appService.runtimeSnapshot.showChargingStationRing,this.addChild(this.ring),this.chargingStation=new fw(this.appService),this.addChild(this.chargingStation);const e=oS(this.appService.runtime,"showChargingStationRing",c=>{V_.log(`[runtime] showChargingStationRing: ${c}`),this.ring.visible=c});this.unsubscribeFns.push(e),this.initClickInteraction()}draw(c){return __async(this,arguments,function*({x:c,y:e,rotation:t}){0!==c||0!==e?(this.visible=!0,this.ring.draw({x:c,y:e}),yield this.chargingStation.draw({x:c,y:e,rotation:t})):this.visible=!1})}initClickInteraction(){const{enableChargingStationClick:c}=this.appService.interactionConfig;c&&(this.clickHandler||(this.clickHandler=new dw(this.chargingStation,{onClick:()=>{var c,e;if(null==(c=this.appService.events)?void 0:c.onClickChargingStation){const c=null!=(e=this.appService.getChargerPosition())?e:{x:0,y:0};this.appService.events.onClickChargingStation(__spreadValues({rotation:this.chargingStation.rotation},c))}}})))}destroy(){this.unsubscribeFns.forEach(c=>c()),this.unsubscribeFns=[],this.ring.destroy(),this.clickHandler&&this.clickHandler.destroy(),super.destroy()}}class uw extends xe{constructor(c){super({isRenderGroup:!0}),__publicField(this,"carpetSprite",null),__publicField(this,"carpetMask",null),this.appService=c,this.appService.appContainer.addToLayer(jS,this)}createCarpetFromRasterData(c,e){return __async(this,null,function*(){const t=this.appService;if(!t.runtimeSnapshot.showCarpet)return;if(this.clearCarpet(),0===c.length)return;const{src:i,opacity:n,scale:r}=t.carpetConfig,s=yield Oa.load(i);if(!s)return void V_.warn(`Carpet texture not found: ${i}`);const a=this.createCarpetGraphics(c,e),o=a.getLocalBounds();if(0===o.width||0===o.height)return;const f=new qo({texture:s,width:o.width,height:o.height});f.x=o.x,f.y=o.y,f.alpha=n,f.tileScale.set(r);const l=new xe;l.addChild(a),f.mask=l,this.addChild(f),this.carpetSprite=f,this.carpetMask=l,t.getApp().renderOnceNextFrame()})}createCarpetGraphics(c,e){const t=new _o;for(let i=0;i<c.length;i++){const n=c[i],r=n%e,s=Math.floor(n/e);t.rect(r,s,1,1)}return t.fill(16777215),t}clearCarpet(){this.carpetSprite&&(this.removeChild(this.carpetSprite),this.carpetSprite.destroy(),this.carpetSprite=null),this.carpetMask&&(this.carpetMask.destroy({children:!0}),this.carpetMask=null)}createCarpetFromStructuredData(c){return __async(this,null,function*(){const e=this.appService;if(!e.runtimeSnapshot.showCarpet||!c)return;if(this.clearCarpet(),0===c.length)return;const{src:t,opacity:i,scale:n}=e.carpetConfig,r=yield Oa.load(t);if(!r)return void V_.warn(`Carpet texture not found: ${t}`);const s=this.createCarpetGraphicsFromStructuredData(c),a=s.getLocalBounds();if(0===a.width||0===a.height)return;const o=new qo({texture:r,width:a.width,height:a.height});o.x=a.x,o.y=a.y,o.alpha=i,o.tileScale.set(n);const f=new xe;f.addChild(s),o.mask=f,this.addChild(o),this.carpetSprite=o,this.carpetMask=f,e.getApp().renderOnceNextFrame()})}createCarpetGraphicsFromStructuredData(c){const e=new _o;for(const t of c){const c=t.coordinates;for(let t=0;t<c.length;t+=2){const i=c[t],n=c[t+1];e.rect(i,n,1,1)}}return e.fill(16777215),e}destroy(){this.clearCarpet(),super.destroy()}}class pw extends _o{constructor(c){super(),this.appService=c,this.appService.appContainer.addToLayer(WS,this)}draw(c){const e=this.appService;this.clear(),this.setFillStyle({color:e.mapConfig.freeColor});for(const t of c){const c=t.coordinates;for(let e=0;e<c.length;e+=2){const t=c[e],i=c[e+1];this.rect(t,i,1,1)}}this.fill()}destroy(c){super.destroy(c)}}class gw extends _o{constructor(c){super(),this.appService=c,this.appService.appContainer.addToLayer(YS,this)}draw(c){const e=this.appService;this.clear(),this.setFillStyle({color:e.mapConfig.obstacleColor});for(const t of c){const c=t.coordinates;for(let e=0;e<c.length;e+=2){const t=c[e],i=c[e+1];this.rect(t,i,1,1)}}this.fill()}drawRaster(c,e){const t=this.appService;if(this.clear(),0!==c.length){this.setFillStyle({color:t.mapConfig.obstacleColor});for(let i=0;i<c.length;i+=CS){const n=Math.min(i+CS,c.length);for(let t=i;t<n;t++){const i=c[t],n=i%e,r=Math.floor(i/e);this.rect(n,r,1,1)}this.fill(),n<c.length&&this.setFillStyle({color:t.mapConfig.obstacleColor})}}}destroy(c){super.destroy(c)}}class mw extends xe{constructor(c){super({isRenderGroup:!0}),__publicField(this,"roomGraphicsMap",new Map),__publicField(this,"roomContextMap",new Map),__publicField(this,"roomClickHandlerMap",new Map),__publicField(this,"unsubscribeFns",[]),__publicField(this,"mapWidth",0),__publicField(this,"rasterRoomDataMap",new Map),__publicField(this,"structuredRoomGeometry",new Map),this.appService=c,this.appService.appContainer.addToLayer(NS,this);const e=aS(this.appService.config.room.colors,()=>{this.refreshRoomColors()});this.unsubscribeFns.push(e)}draw(c){const e=this.appService;this.clearRooms();const t=e.roomConfig,{selectRoomIds:i,enableRoomSelection:n}=e.runtimeSnapshot;c.forEach(c=>{var e,r;const s=c.id>=255,a=new _o,o=new pa,f=new pa,l=new pa;if(s)o.setFillStyle({color:c.color}),f.setFillStyle({color:c.color}),l.setFillStyle({color:c.color});else{const i=null!=(e=c.colorIndex)?e:0,n=t.colors.active[i%t.colors.active.length],r=t.colors.inactive[i%t.colors.inactive.length],s=(t.colors.normal||t.colors.active)[i%(t.colors.normal||t.colors.active).length];o.setFillStyle({color:n}),f.setFillStyle({color:r}),l.setFillStyle({color:s})}if(o.poly(c.polyPoints).fill(),f.poly(c.polyPoints).fill(),l.poly(c.polyPoints).fill(),c.outlinePoints.forEach(c=>{o.rect(c.x,c.y,1,1).fill(),f.rect(c.x,c.y,1,1).fill(),l.rect(c.x,c.y,1,1).fill()}),a.context=s?o:n?i.includes(c.id)?o:f:l,!s){const e=new dw(a,{clickThreshold:10,onClick:()=>{this.handleRoomClick(c.id)}});this.roomClickHandlerMap.set(c.id,e),this.structuredRoomGeometry.set(c.id,{polyPoints:c.polyPoints,outlinePoints:c.outlinePoints,colorIndex:null!=(r=c.colorIndex)?r:0})}this.roomGraphicsMap.set(c.id,a),this.roomContextMap.set(c.id,{activeContext:o,inactiveContext:f,normalContext:l}),this.addChild(a)})}drawRaster(c){const e=this.appService;if(this.clearRooms(),this.mapWidth=c.width,0===c.sortedRooms.length)return;const{selectRoomIds:t,enableRoomSelection:i}=e.runtimeSnapshot;c.sortedRooms.forEach(c=>{this.drawRasterRoom(c,i,t)})}drawRasterRoom(c,e,t){var i;const{roomId:n,pixelIndices:r,activeColor:s,inactiveColor:a}=c,o=this.appService.roomConfig;let f=s;const l="number"==typeof n;if(l){const e=null!=(i=c.colorIndex)?i:0;f=(o.colors.normal||o.colors.active)[e%(o.colors.normal||o.colors.active).length]}const d=new _o,h=new pa,u=new pa,p=new pa;h.setFillStyle({color:s}),u.setFillStyle({color:a}),p.setFillStyle({color:f}),this.drawPixelPointsInBatches(h,r,CS,this.mapWidth),this.drawPixelPointsInBatches(u,r,CS,this.mapWidth),this.drawPixelPointsInBatches(p,r,CS,this.mapWidth);const g=l&&t.includes(n);if(d.context=e?l&&g?h:u:p,l){const c=new dw(d,{clickThreshold:10,onClick:()=>{this.handleRoomClick(n)}});this.roomClickHandlerMap.set(n,c)}this.roomGraphicsMap.set(n,d),this.roomContextMap.set(n,{activeContext:h,inactiveContext:u,normalContext:p}),this.rasterRoomDataMap.set(n,c),this.addChild(d)}drawPixelPointsInBatches(c,e,t,i){for(let n=0;n<e.length;n+=t){const r=Math.min(n+t,e.length);for(let t=n;t<r;t++){const n=e[t],r=n%i,s=Math.floor(n/i);c.rect(r,s,1,1)}c.fill()}}handleRoomClick(c){var e,t,i;const n=this.appService;null==(i=null==(e=n.events)?void 0:e.onClickRoom)||i.call(e,null!=(t=n.getRoomData(c))?t:{id:c})}setRoomStateBySelectIds(c){const e=this.appService,{enableRoomSelection:t}=e.runtimeSnapshot;this.roomGraphicsMap.forEach((e,i)=>{if("number"==typeof i){const n=this.roomContextMap.get(i);if(n)if(t){const t=c.includes(i);e.context=t?n.activeContext:n.inactiveContext}else e.context=n.normalContext}})}setRoomState(c,e){const t=this.roomGraphicsMap.get(c),i=this.roomContextMap.get(c);t&&i?"number"==typeof c&&(t.context=e?i.activeContext:i.inactiveContext):V_.warn(`Room ${c} not found`)}setAllRoomsState(c){this.roomGraphicsMap.forEach((e,t)=>{"number"==typeof t&&this.setRoomState(t,c)})}getRoomGraphicsMap(){const c=new Map;return this.roomGraphicsMap.forEach((e,t)=>{"number"==typeof t&&c.set(t,e)}),c}getRasterRoomData(c){return this.rasterRoomDataMap.get(c)||null}getMapWidth(){return this.mapWidth}isWallIntersectsAnyRoom(c){const e=this.appService.getApp().mapState;if(!e)return V_.warn("[RoomFill] Map state not available"),!1;if(!c||2!==c.length)return V_.warn("[RoomFill] Invalid wall points provided"),!1;const[t,i]=c,n={x:t.x+e.origin.x,y:t.y+e.origin.y},r={x:i.x+e.origin.x,y:i.y+e.origin.y};return"raster"===e.mapType?this.isWallIntersectsAnyRoomRaster(n,r):this.isWallIntersectsAnyRoomStructured(n,r)}isZoneIntersectsAnyRoom(c){const e=this.appService.getApp().mapState;if(!e)return V_.warn("[RoomFill] Map state not available"),!1;if(!c||4!==c.length)return V_.warn("[RoomFill] Invalid zone points provided"),!1;const t=c.map(c=>({x:c.x+e.origin.x,y:c.y+e.origin.y}));return"raster"===e.mapType?this.isZoneIntersectsAnyRoomRaster(t):this.isZoneIntersectsAnyRoomStructured(t)}isWallIntersectsAnyRoomRaster(c,e){if(0===this.mapWidth||0===this.rasterRoomDataMap.size)return!1;const t=this.getLinePixels(c,e);for(const i of this.rasterRoomDataMap.values())for(const c of t)if(X_(i.pixelIndices,c))return!0;return!1}isWallIntersectsAnyRoomStructured(c,e){const t=this.appService.mapManager.getAllRooms();for(const i of t)if(i.outlinePoints&&!(i.outlinePoints.length<3)){if(ex(c,i.outlinePoints,!0)||ex(e,i.outlinePoints,!0))return!0;for(let t=0;t<i.outlinePoints.length;t++){const n=i.outlinePoints[t],r=i.outlinePoints[(t+1)%i.outlinePoints.length];if(Mx(c,e,n,r))return!0}}return!1}isZoneIntersectsAnyRoomRaster(c){if(0===this.mapWidth||0===this.rasterRoomDataMap.size)return!1;const e=[[c[0],c[1]],[c[1],c[2]],[c[2],c[3]],[c[3],c[0]]];for(const[i,n]of e)if(this.isWallIntersectsAnyRoomRaster(i,n))return!0;const t=this.rasterRoomDataMap.values().next().value;if(t&&t.pixelIndices.length>0){const e=t.pixelIndices[0],i=e%this.mapWidth,n=Math.floor(e/this.mapWidth);if(ex({x:i,y:n},c,!0))return!0}return!1}isZoneIntersectsAnyRoomStructured(c){const e=this.appService.mapManager.getAllRooms(),t=[[c[0],c[1]],[c[1],c[2]],[c[2],c[3]],[c[3],c[0]]];for(const i of e)if(i.outlinePoints&&!(i.outlinePoints.length<3)){for(const e of c)if(ex(e,i.outlinePoints,!0))return!0;for(const e of i.outlinePoints)if(ex(e,c,!0))return!0;for(const[c,e]of t)for(let t=0;t<i.outlinePoints.length;t++){const n=i.outlinePoints[t],r=i.outlinePoints[(t+1)%i.outlinePoints.length];if(Mx(c,e,n,r))return!0}}return!1}getLinePixels(c,e){const t=this.appService.getApp().mapState;if(!t)return[];const i=t.height,n=[],r=Math.round(c.x),s=Math.round(c.y),a=Math.round(e.x),o=Math.round(e.y),f=Math.abs(a-r),l=Math.abs(o-s),d=r<a?1:-1,h=s<o?1:-1;let u=f-l,p=r,g=s;for(;;){if(p>=0&&p<this.mapWidth&&g>=0&&g<i){const c=g*this.mapWidth+p;n.push(c)}if(p===a&&g===o)break;const c=2*u;c>-l&&(u-=l,p+=d),c<f&&(u+=f,g+=h)}return n}getZonePixels(c,e,t,i){const n=this.appService.getApp().mapState;if(!n)return[];const r=n.height,s=[],a=Math.max(0,Math.floor(c)),o=Math.min(this.mapWidth-1,Math.ceil(t)),f=Math.max(0,Math.floor(e)),l=Math.min(r-1,Math.ceil(i));for(let d=f;d<=l;d++)for(let c=a;c<=o;c++){const e=d*this.mapWidth+c;s.push(e)}return s}refreshRoomColors(){const{selectRoomIds:c,enableRoomSelection:e}=this.appService.runtimeSnapshot,t=this.appService.roomConfig;this.roomGraphicsMap.forEach((i,n)=>{var r;if("number"!=typeof n)return;const s=this.roomContextMap.get(n),a=this.structuredRoomGeometry.get(n);if(s&&a){const r=a.colorIndex,o=t.colors.active[r%t.colors.active.length],f=t.colors.inactive[r%t.colors.inactive.length],l=(t.colors.normal||t.colors.active)[r%(t.colors.normal||t.colors.active).length];s.activeContext.clear(),s.activeContext.setFillStyle({color:o}),s.activeContext.poly(a.polyPoints).fill(),a.outlinePoints.forEach(c=>{s.activeContext.rect(c.x,c.y,1,1).fill()}),s.inactiveContext.clear(),s.inactiveContext.setFillStyle({color:f}),s.inactiveContext.poly(a.polyPoints).fill(),a.outlinePoints.forEach(c=>{s.inactiveContext.rect(c.x,c.y,1,1).fill()}),s.normalContext.clear(),s.normalContext.setFillStyle({color:l}),s.normalContext.poly(a.polyPoints).fill(),a.outlinePoints.forEach(c=>{s.normalContext.rect(c.x,c.y,1,1).fill()}),i.context=e?c.includes(n)?s.activeContext:s.inactiveContext:s.normalContext}else if(s){const a=this.rasterRoomDataMap.get(n);if(a){const o=null!=(r=a.colorIndex)?r:0,f=t.colors.active[o%t.colors.active.length],l=t.colors.inactive[o%t.colors.inactive.length],d=(t.colors.normal||t.colors.active)[o%(t.colors.normal||t.colors.active).length];s.activeContext.clear(),s.activeContext.setFillStyle({color:f}),this.drawPixelPointsInBatches(s.activeContext,a.pixelIndices,CS,this.mapWidth),s.inactiveContext.clear(),s.inactiveContext.setFillStyle({color:l}),this.drawPixelPointsInBatches(s.inactiveContext,a.pixelIndices,CS,this.mapWidth),s.normalContext.clear(),s.normalContext.setFillStyle({color:d}),this.drawPixelPointsInBatches(s.normalContext,a.pixelIndices,CS,this.mapWidth),i.context=e?c.includes(n)?s.activeContext:s.inactiveContext:s.normalContext}}}),this.appService.getApp().renderOnceNextFrame()}clearRooms(){0===this.children.length&&0===this.roomGraphicsMap.size||(this.roomGraphicsMap.forEach(c=>{try{c.destroy()}catch(e){V_.warn("Error destroying room graphics:",e)}}),this.roomGraphicsMap.clear(),this.roomContextMap.forEach(c=>{try{c.activeContext.destroy(),c.inactiveContext.destroy(),c.normalContext.destroy()}catch(e){V_.warn("Error destroying graphics context:",e)}}),this.roomContextMap.clear(),this.roomClickHandlerMap.forEach(c=>{try{c.destroy()}catch(e){V_.warn("Error destroying click handler:",e)}}),this.roomClickHandlerMap.clear(),this.removeChildren(),this.rasterRoomDataMap.clear(),this.structuredRoomGeometry.clear())}destroy(){this.unsubscribeFns.forEach(c=>c()),this.unsubscribeFns=[],this.clearRooms(),super.destroy()}}class bw{constructor(c){__publicField(this,"obstacle"),__publicField(this,"free"),__publicField(this,"roomFill"),__publicField(this,"carpet"),__publicField(this,"chargingStation"),__publicField(this,"mapBounds",{minX:0,minY:0,maxX:0,maxY:0}),__publicField(this,"lastMapId",null),__publicField(this,"lastOrigin",null),__publicField(this,"lastSize",null),__publicField(this,"lastStatus",null),__publicField(this,"roomGeometryMap",new Map),__publicField(this,"rasterRoomPixelsMap",new Map),__publicField(this,"fourColorCache",null),__publicField(this,"carpetData",null),__publicField(this,"unsubscribeFns",[]),this.appService=c,this.obstacle=new gw(this.appService),this.free=new pw(this.appService),this.roomFill=new mw(this.appService),this.carpet=new uw(this.appService),this.chargingStation=new hw(this.appService),this.validateColorConfig();const e=oS(c.runtime,"enableRoomSelection",c=>{if(V_.log(`[runtime] enableRoomSelection: ${c}`),c){this.roomFill.setAllRoomsState(!1);const c=this.appService.runtimeSnapshot.selectRoomIds;this.roomFill.setRoomStateBySelectIds(c)}else this.roomFill.setAllRoomsState(!0)}),t=oS(c.runtime,"selectRoomIds",c=>{V_.log(`[runtime] selectRoomIds: ${c}`),this.roomFill.setRoomStateBySelectIds(c)}),i=oS(c.runtime,"showChargingStation",c=>{V_.log(`[runtime] showChargingStation: ${c}`),this.chargingStation.visible=c}),n=oS(c.runtime,"showCarpet",e=>{if(V_.log(`[runtime] showCarpet: ${e}`),e){0===c.getApp().managers.customCarpetManager.getCustomCarpets().length&&this.createCarpet()}else this.carpet.clearCarpet()});this.unsubscribeFns.push(e,t,i,n)}drawMap(c){return __async(this,null,function*(){var e;const t=this.appService,{id:i,obstacles:n,free:r,rooms:s,charger:a,carpet:o,status:f,origin:l,size:d}=c;this.clearComponents(),this.resetGeometryData();const h=this.processRoomsGeometry(s);this.roomFill.draw(h),r&&this.free.draw(r),n&&this.obstacle.draw(n),this.carpetData=o,this.createCarpet();const u=this.mergeLayerBounds();if(!x_(u,this.mapBounds)){V_.debug("[Map] Map bounds updated:",u),this.mapBounds=u;this.shouldFitMapToView(i,1===f,{x:l[0],y:l[1]},{x:d[0],y:d[1]})&&(t.getApp().fitMapToView(this.mapBounds),this.lastMapId=i,this.lastOrigin={x:l[0],y:l[1]},this.lastSize={x:d[0],y:d[1]},this.lastStatus=1===f)}const p=((null!=(e=c.charger.angle)?e:0)+t.chargingStationConfig.rotationCorrection)*Math.PI/180;return yield this.chargingStation.draw({x:a.coordinate[0],y:a.coordinate[1],rotation:p}),yield t.roomsManager.refresh(),!0})}drawRasterMap(c,e){return __async(this,null,function*(){const t=this.appService;this.clearComponents();const{id:i,width:n,height:r,charger:s,chargerDirection:a,status:o,origin:f}=e;V_.debug("[Map] Parsed Raster Map Data",c),this.obstacle.drawRaster(c.obstacles,n),this.carpetData=this.convertRasterToStructuredData(c.carpet,n);0===t.getApp().managers.customCarpetManager.getCustomCarpets().length&&this.createCarpet();const l=this.processRasterData(c);this.roomFill.drawRaster(l);const d=Fx(c,n,r);if(!x_(d,this.mapBounds)){V_.debug("[Map] Raster map bounds updated:",d),this.mapBounds=d;this.shouldFitMapToView(i,o,f,{x:n,y:r})&&(t.getApp().fitMapToView(this.mapBounds),this.lastMapId=i,this.lastOrigin=__spreadValues({},f),this.lastSize={x:n,y:r},this.lastStatus=o)}const h=(a+t.chargingStationConfig.rotationCorrection)*Math.PI/180;return yield this.chargingStation.draw({x:s.x,y:s.y,rotation:h}),this.generateRoomGeometryFromRaster(c),yield t.roomsManager.refresh(),!0})}resetGeometryData(){this.roomGeometryMap.clear(),this.rasterRoomPixelsMap.clear(),this.fourColorCache=null,this.mapBounds={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}shouldFitMapToView(c,e,t,i){const n=this.appService,{originChangeAutoFitThreshold:r,sizeChangeAutoFitThreshold:s}=n.getApp().config.map;if(this.lastMapId!==c)return V_.debug("[Map] Map ID changed, triggering fitMapToView"),!0;if(null!==this.lastStatus&&this.lastStatus!==e)return V_.debug(`[Map] Map status changed (${this.lastStatus} -> ${e}), triggering fitMapToView`),!0;if(this.lastOrigin&&t){const c=Math.abs(t.x-this.lastOrigin.x),e=Math.abs(t.y-this.lastOrigin.y);if(c>r||e>r)return V_.debug(`[Map] Origin change exceeded threshold (deltaX: ${c}, deltaY: ${e}, threshold: ${r}), triggering fitMapToView`),!0}if(this.lastSize&&i){const c=Math.abs(i.x-this.lastSize.x),e=Math.abs(i.y-this.lastSize.y);if(c>s||e>s)return V_.debug(`[Map] Size change exceeded threshold (deltaX: ${c}, deltaY: ${e}, threshold: ${s}), triggering fitMapToView`),!0}return!1}convertRasterToStructuredData(c,e){if(0===c.length)return[];const t=[];for(let i=0;i<c.length;i++){const n=c[i],r=n%e,s=Math.floor(n/e);t.push(r,s)}return[{coordinates:t}]}createCarpet(){return __async(this,null,function*(){this.appService.runtimeSnapshot.showCarpet&&this.carpetData&&(yield this.carpet.createCarpetFromStructuredData(this.carpetData))})}processRoomsGeometry(c){if(!c)return[];const e=this.appService,{active:t}=e.roomConfig.colors,i=e.roomConfig.colors[_p.UNKNOWN_ROOM];if(0===Object.keys(c).length)return this.mapBounds={minX:0,minY:0,maxX:0,maxY:0},[];const n=Object.keys(c).sort((c,e)=>Number(c)-Number(e)),r=n.filter(c=>Number(c)<255),s=n.filter(c=>Number(c)>=255),a=[],o=[];r.forEach(e=>{const{coordinates:t}=c[e];if(t.length<4)return;const i=t.filter(c=>!isFinite(c));if(i.length>0)return void V_.error(`[Room ${e}] Contains ${i.length} invalid coordinates (NaN/Infinity)`);const n=Number(e);let r=1/0,s=1/0,a=-1/0,f=-1/0;const l=[];for(let c=0;c<t.length;c+=2){const e=t[c],i=t[c+1];r=Math.min(r,e),s=Math.min(s,i),a=Math.max(a,e),f=Math.max(f,i),l.push({x:e,y:i})}const d=a-r,h=f-s;if(0===d||0===h)return void V_.error(`[Room ${e}] Degenerate polygon (${d}x${h}). Skipping.`);if(d<2||h<2)return void V_.warn(`[Room ${e}] Room too small (${d}x${h}), skipping`);const u=new D(r,s,a-r+1,f-s+1),p=H_(l),g=p.flatMap(c=>[c.x+.5,c.y+.5]),m=K_(p,r,s,a,f);o.push({id:n,points:l,outlinePoints:p,polyPoints:g,centerPoint:m,boundingBox:u}),this.mapBounds.minX=Math.min(this.mapBounds.minX,r),this.mapBounds.minY=Math.min(this.mapBounds.minY,s),this.mapBounds.maxX=Math.max(this.mapBounds.maxX,a),this.mapBounds.maxY=Math.max(this.mapBounds.maxY,f)});const f=[...o].sort((c,t)=>{if("area"===e.roomConfig.colors.sortBy){const e=c.outlinePoints.length;return t.outlinePoints.length-e}return c.id-t.id}),l=this.assignColorsUsingFourColorAlgorithm(f,t.length,"structured");return o.forEach(c=>{const e=l.get(c.id)||0,i=t[e],n={id:c.id,color:i,colorIndex:e,boundingBox:c.boundingBox,points:c.points,outlinePoints:c.outlinePoints,polyPoints:c.polyPoints,centerPoint:c.centerPoint};this.roomGeometryMap.set(c.id,n),a.push(n)}),s.forEach(e=>{const{coordinates:t}=c[e];if(t.length<4)return;const n=Number(e);let r=1/0,s=1/0,o=-1/0,f=-1/0;const l=[];for(let c=0;c<t.length;c+=2){const e=t[c],i=t[c+1];r=Math.min(r,e),s=Math.min(s,i),o=Math.max(o,e),f=Math.max(f,i),l.push({x:e,y:i})}const d=o-r,h=f-s;if(0===d||0===h)return void V_.error(`[Unknown Room ${e}] Degenerate polygon (${d}x${h}). Skipping.`);if(d<2||h<2)return void V_.warn(`[Unknown Room ${e}] Room too small (${d}x${h}), skipping`);const u=new D(r,s,o-r+1,f-s+1),p=H_(l),g=p.flatMap(c=>[c.x+.5,c.y+.5]),m=K_(p,r,s,o,f),b={id:n,color:i,boundingBox:u,points:l,outlinePoints:p,polyPoints:g,centerPoint:m};a.push(b),this.mapBounds.minX=Math.min(this.mapBounds.minX,r),this.mapBounds.minY=Math.min(this.mapBounds.minY,s),this.mapBounds.maxX=Math.max(this.mapBounds.maxX,o),this.mapBounds.maxY=Math.max(this.mapBounds.maxY,f)}),a}mergeLayerBounds(){let c=__spreadValues({},this.mapBounds);if(this.obstacle.bounds&&(c=Rx(c,this.obstacle.bounds)),this.free.bounds&&(c=Rx(c,this.free.bounds)),this.roomFill.children.length>0){const e=this.roomFill.getLocalBounds();e.width>0&&e.height>0&&(c=Rx(c,{minX:e.x,minY:e.y,maxX:e.x+e.width,maxY:e.y+e.height}))}return c}getRoomById(c){return this.roomGeometryMap.get(c)}getAllRooms(){return Array.from(this.roomGeometryMap.values())}isWallIntersectsAnyRoom(c){return this.roomFill.isWallIntersectsAnyRoom(c)}isZoneIntersectsAnyRoom(c){return this.roomFill.isZoneIntersectsAnyRoom(c)}areRoomsAdjacent(c){var e;const t=this.appService,i=t.mapConfig.adjacencyThreshold;if(!c||0===c.length)return V_.warn("[MapManager] No room IDs provided"),!1;if(1===c.length)return!0;const n=Array.from(new Set(c));if(1===n.length)return!0;const r=t.getApp().mapState;return"raster"===(null!=(e=null==r?void 0:r.mapType)?e:"structured")?this.areRasterRoomsAdjacentInternal(n,i):this.areStructuredRoomsAdjacentInternal(n,i)}areStructuredRoomsAdjacentInternal(c,e){const t=[];for(const n of c){const c=this.getRoomById(n);if(!c)return V_.warn(`[MapManager] Room ${n} not found in map`),!1;if(!c.outlinePoints||0===c.outlinePoints.length)return V_.warn(`[MapManager] Room ${n} has no outline points`),!1;t.push({id:n,points:c.outlinePoints})}const i=[];for(let n=0;n<t.length;n++)for(let c=n+1;c<t.length;c++){const r=t[n],s=t[c];Lx(r.points,s.points,e)&&i.push([n,c])}return Gx(t.length,i)}areRasterRoomsAdjacentInternal(c,e){const t=this.appService.getApp().mapState;if(!t)return V_.warn("[MapManager] Map state not available"),!1;const i=t.width,n=[];for(const s of c){const c=this.getRasterRoomPixels(s);if(!c)return V_.warn(`[MapManager] Room ${s} pixel data not found in raster map`),!1;n.push({id:s,pixels:c})}const r=[];for(let s=0;s<n.length;s++)for(let c=s+1;c<n.length;c++){const t=n[s],a=n[c];zx(t.pixels,a.pixels,i,e)&&r.push([s,c])}return Gx(n.length,r)}isPointInAnyRoom(c){var e;const t=this.appService.getApp().mapState;if(!t)return V_.warn("[MapManager] Map state not available"),null;return"raster"===(null!=(e=t.mapType)?e:"structured")?this.isPointInAnyRoomRasterInternal(c,t):this.isPointInAnyRoomStructuredInternal(c,t)}isPointInAnyRoomStructuredInternal(c,e){const t={x:c.x+e.origin.x,y:c.y+e.origin.y},i=this.getAllRooms();for(const n of i)if(n.outlinePoints&&n.outlinePoints.length>=3&&ex(t,n.outlinePoints)){const c=this.appService.roomsManager.getRoomPropertyById(n.id);return c||(V_.warn(`[MapManager] Room ${n.id} found in geometry but not in RoomManager`),null)}return null}isPointInAnyRoomRasterInternal(c,e){const t=e.width,i=e.height,n=c.x+e.origin.x,r=c.y+e.origin.y,s=Math.round(n),a=Math.round(r);if(s<0||s>=t||a<0||a>=i)return V_.warn(`[MapManager] Point (${s}, ${a}) is out of map bounds (${t}x${i})`),null;const o=a*t+s,f=this.getAllRooms();for(const l of f){const c=this.getRasterRoomPixels(l.id);if(c&&c.length>0&&X_(c,o)){const c=this.appService.roomsManager.getRoomPropertyById(l.id);return c||(V_.warn(`[MapManager] Room ${l.id} found in geometry but not in RoomManager`),null)}}return null}clearComponents(){this.obstacle.clear(),this.obstacle.destroy(),this.obstacle=new gw(this.appService),this.free.clear(),this.free.destroy(),this.free=new pw(this.appService),this.carpet.clearCarpet(),this.carpetData=null,this.roomFill.clearRooms(),this.roomFill.isRenderGroup&&(this.roomFill.isRenderGroup=!1),this.roomFill.removeChildren(),this.roomFill.destroy(),this.roomFill=new mw(this.appService)}processRasterData(c){const e=this.appService.roomConfig,t=[],i=[];c.rooms.forEach((c,e)=>{"number"==typeof e?t.push([e,c]):i.push([e,c])}),t.sort(([c],[e])=>c-e);const n=t.map(([c,e])=>({id:c,pixels:e})).sort((c,t)=>"area"===e.colors.sortBy?t.pixels.length-c.pixels.length:c.id-t.id),r=this.assignColorsUsingFourColorAlgorithm(n,e.colors.active.length,"raster"),s=[...t.map(([c,t])=>{const i=r.get(c)||0;return{roomId:c,pixelIndices:t,activeColor:e.colors.active[i],inactiveColor:e.colors.inactive[i%e.colors.inactive.length],colorIndex:i}}),...i.map(([c,t])=>{let i=e.colors[c];return c!==_p.VERSION0_ROOM||i||(i=e.colors[_p.NO_ROOM_DATA]),{roomId:c,pixelIndices:t,activeColor:i,inactiveColor:i}})];return{obstacles:c.obstacles,carpet:c.carpet,sortedRooms:s,width:c.width,height:c.height,totalPixels:c.totalPixels}}generateRoomGeometryFromRaster(c){const e=this.appService;this.roomGeometryMap.clear(),this.rasterRoomPixelsMap.clear();const{active:t}=e.roomConfig.colors,i=[];c.rooms.forEach((c,e)=>{"number"==typeof e&&i.push(e)}),i.sort((c,e)=>c-e);const n=[];i.forEach(e=>{const t=c.rooms.get(e);this.rasterRoomPixelsMap.set(e,t);let i=1/0,r=1/0,s=-1/0,a=-1/0;for(let n=0;n<t.length;n++){const e=t[n],o=e%c.width,f=Math.floor(e/c.width);i=Math.min(i,o),r=Math.min(r,f),s=Math.max(s,o),a=Math.max(a,f)}const o=Ax(t,c.width,i,r,s,a),f=new D(i,r,s-i+1,a-r+1);n.push({id:e,pixelIndices:t,boundingBox:f,centerPoint:o})});const r=[...n].sort((c,t)=>"area"===e.roomConfig.colors.sortBy?t.pixelIndices.length-c.pixelIndices.length:c.id-t.id),s=this.assignColorsUsingFourColorAlgorithm(r,t.length,"raster");n.forEach(c=>{const e=s.get(c.id)||0,i=t[e],n={id:c.id,color:i,colorIndex:e,boundingBox:c.boundingBox,points:[],outlinePoints:[],polyPoints:[],centerPoint:c.centerPoint};this.roomGeometryMap.set(c.id,n)})}getRasterRoomPixels(c){return this.rasterRoomPixelsMap.get(c)}validateColorConfig(){const c=this.appService.roomConfig.colors,e=c.active.length,t=c.inactive.length,i=c.name.length,n=c.propertyTheme.length,r=c.selectionIndicatorBackground.length,s=c.selectionIndicatorIcon.length;e<4&&V_.warn(`[FourColor] room.colors.active requires at least 4 colors for the four-color theorem, but got ${e}. Adjacent rooms may have the same color.`),t!==e&&V_.warn(`[FourColor] room.colors.inactive length (${t}) does not match room.colors.active length (${e}). Using modulo for color assignment.`),i!==e&&V_.warn(`[FourColor] room.colors.name length (${i}) does not match room.colors.active length (${e}). Using modulo for color assignment.`),n!==e&&V_.warn(`[FourColor] room.colors.propertyTheme length (${n}) does not match room.colors.active length (${e}). Using modulo for color assignment.`),r!==e&&V_.warn(`[FourColor] room.colors.selectionIndicatorBackground length (${r}) does not match room.colors.active length (${e}). Using modulo for color assignment.`),s!==e&&V_.warn(`[FourColor] room.colors.selectionIndicatorIcon length (${s}) does not match room.colors.active length (${e}). Using modulo for color assignment.`)}assignColorsUsingFourColorAlgorithm(c,e,t){var i,n;const r=this.appService,s=null!=(n=null==(i=r.mapState)?void 0:i.id)?n:null;if(this.fourColorCache&&this.fourColorCache.mapId===s&&this.fourColorCache.colorMap.size===c.length)return V_.debug("[FourColor] Using cached color map"),this.fourColorCache.colorMap;const a=r.getApp().config.map.adjacencyThreshold||3,o=r.roomConfig.colors.strategy,f=Ux(c,(c,e)=>{var i;if("structured"===t){const t=c.outlinePoints,i=e.outlinePoints;return!(!t||!i)&&Lx(t,i,a)}{const t=c.pixels,n=e.pixels;if(!t||!n)return!1;const s=(null==(i=r.mapState)?void 0:i.width)||0;return zx(t,n,s,a)}},e,o);this.fourColorCache={mapId:s,colorMap:f};const l=new Array(e).fill(0);return f.forEach(c=>{l[c]++}),V_.debug("[FourColor] Color distribution:",l),f}destroy(){this.unsubscribeFns.forEach(c=>c()),this.unsubscribeFns=[],this.obstacle.destroy(),this.free.destroy(),this.roomFill.destroy(),this.carpet.destroy(),this.chargingStation.destroy(),this.fourColorCache=null}}class vw extends xe{constructor(c){super({isRenderGroup:!0}),__publicField(this,"commonPath"),__publicField(this,"chargePath"),__publicField(this,"transitionsPath"),__publicField(this,"mopPath"),__publicField(this,"mopPathTrack"),__publicField(this,"mopPathTrackContainer"),__publicField(this,"debugPoints"),__publicField(this,"pathData",null),__publicField(this,"lastPointCount",0),__publicField(this,"lastDrawnPosition",null),__publicField(this,"isRealTimeDrawing",!1),__publicField(this,"throttledUpdateLineWidth"),__publicField(this,"throttledHandleRobotPosition"),__publicField(this,"unsubscribeFns",[]),__publicField(this,"handleRobotAnimationComplete",()=>{this.isRealTimeDrawing&&this.stopRealTimeDrawing()}),this.appService=c,this.appService.appContainer.addToLayer(ZS,this),this.eventMode="none",this.commonPath=new _o,this.chargePath=new _o,this.transitionsPath=new _o,this.mopPathTrackContainer=new xe,this.mopPathTrackContainer.filters=[new co],this.mopPathTrack=new _o,this.mopPath=new _o,this.debugPoints=new _o,this.mopPathTrackContainer.addChild(this.mopPathTrack),this.addChild(this.mopPathTrackContainer),this.addChild(this.commonPath),this.addChild(this.chargePath),this.addChild(this.transitionsPath),this.addChild(this.mopPath),this.addChild(this.debugPoints),this.visible=c.runtimeSnapshot.showPath,this.commonPath.visible=c.pathConfig.commonPath.visible,this.chargePath.visible=c.pathConfig.chargePath.visible,this.transitionsPath.visible=c.pathConfig.transitionPath.visible,this.mopPathTrackContainer.visible=c.pathConfig.mopPath.trackVisible,this.mopPath.visible=c.pathConfig.mopPath.lineVisible,this.throttledUpdateLineWidth=P_(()=>{this.updateLineWidth()},50,{leading:!0,trailing:!0}),this.throttledHandleRobotPosition=P_(this.handleRobotPositionUpdate.bind(this),0),this.registerEventListeners()}registerEventListeners(){const{emitter:c}=this.appService;c.on("antiScale",this.throttledUpdateLineWidth),c.on("robotPositionUpdate",this.throttledHandleRobotPosition),c.on("robotAnimationComplete",this.handleRobotAnimationComplete);const e=aS(this.appService.config.path,()=>{this.pathData&&(this.redrawPaths(this.pathData),this.appService.getApp().renderOnceNextFrame())});this.unsubscribeFns.push(e)}handleRobotPositionUpdate(c){if(!this.isRealTimeDrawing||!this.lastDrawnPosition)return;let e=[];switch(c.pathType||"common"){case"common":default:e=[this.commonPath];break;case"charge":e=[this.chargePath];break;case"transitions":e=[this.transitionsPath];break;case"mop":e=[this.mopPathTrack,this.mopPath]}e.forEach(e=>{e.moveTo(this.lastDrawnPosition.x,this.lastDrawnPosition.y),e.lineTo(c.x,c.y),e.stroke()}),this.lastDrawnPosition={x:c.x,y:c.y}}updateLineWidth(){const c=this.appService;this.pathData&&c.pathConfig.lineWidthFixed&&this.redrawPaths(this.pathData)}redrawPaths(c){const{pathPoints:e}=c;if(this.commonPath.clear(),this.chargePath.clear(),this.transitionsPath.clear(),this.mopPathTrack.clear(),this.mopPath.clear(),this.debugPoints.clear(),!e||0===e.length)return;this.setupPathStyles(),this.drawPathSegments(e),this.commonPath.stroke(),this.chargePath.stroke(),this.transitionsPath.stroke(),this.mopPathTrack.stroke(),this.mopPath.stroke();this.appService.getDebuggerMode()&&this.drawDebugPoints(e)}setupPathStyles(){var c;const e=this.appService,t=e.pathConfig,i=c=>t.lineWidthFixed?e.getApp().toFixedSize(c):c;this.commonPath.setStrokeStyle({width:i(t.commonPath.width),color:t.commonPath.color,join:"round",cap:"round"}),this.chargePath.setStrokeStyle({width:i(t.chargePath.width),color:t.chargePath.color,join:"round",cap:"round"}),this.transitionsPath.setStrokeStyle({width:i(t.transitionPath.width),color:t.transitionPath.color,join:"round",cap:"round"}),this.mopPathTrack.setStrokeStyle({width:i(t.mopPath.trackWidth),color:t.mopPath.trackColor,alpha:1,join:"round",cap:"round"}),(null==(c=this.mopPathTrackContainer.filters)?void 0:c[0])&&(this.mopPathTrackContainer.filters[0].alpha=t.mopPath.trackAlpha),this.mopPathTrackContainer.visible=t.mopPath.trackVisible,this.mopPath.setStrokeStyle({width:i(t.mopPath.lineWidth),color:t.mopPath.lineColor,join:"round",cap:"round"}),this.mopPath.visible=t.mopPath.lineVisible}drawPathSegments(c){let e=null,t=null;for(let i=0;i<c.length;i++){const n=c[i],r=n.type||"common";let s;switch(r){case"common":default:s=[this.commonPath];break;case"charge":s=[this.chargePath];break;case"transitions":s=[this.transitionsPath];break;case"mop":s=[this.mopPathTrack,this.mopPath]}0===i||r!==e?s.forEach(c=>c.moveTo(n.x,n.y)):t&&s.length===t.length&&s.every((c,e)=>c===t[e])&&s.forEach(c=>c.lineTo(n.x,n.y)),e=r,t=s}}drawDebugPoints(c){const e={common:16711935,charge:65535,transitions:16776960,mop:65280};for(const t of c){const c=e[t.type||"common"];this.debugPoints.rect(t.x-.5,t.y-.5,1,1),this.debugPoints.fill(c)}}updatePositionByOrigin(c,e){this.position.set(c,e)}drawFull(c){var e;V_.debug("[Path] Draw Full Path",c),this.pathData=c,this.redrawPaths(c),this.lastPointCount=(null==(e=c.pathPoints)?void 0:e.length)||0}drawIncremental(c){var e,t,i,n;const r=this.appService,s=this.lastPointCount,a=(null==(e=c.pathPoints)?void 0:e.slice(s))||[];if(a.length>0){this.setupPathStyles(),V_.debug("[Path] Draw Incremental Path",a);if(r.robotConfig.speed>0){if(this.isRealTimeDrawing=!0,s>0&&(null==(t=this.pathData)?void 0:t.pathPoints)){const c=this.pathData.pathPoints[s-1];this.lastDrawnPosition={x:c.x,y:c.y}}}else this.drawNewPathSegments(a,s,c.pathPoints,null==(i=this.pathData)?void 0:i.pathPoints)}this.pathData=c,this.lastPointCount=(null==(n=c.pathPoints)?void 0:n.length)||0}drawNewPathSegments(c,e,t,i){if(!t||0===c.length)return;let n=null;e>0&&(i&&i[e-1]?n=i[e-1]:t[e-1]&&(n=t[e-1]));let r=null,s=null,a=!1;for(let o=0;o<c.length;o++){const e=c[o],t=e.type||"common";let i;switch(t){case"common":default:i=[this.commonPath];break;case"charge":i=[this.chargePath];break;case"transitions":i=[this.transitionsPath];break;case"mop":i=[this.mopPathTrack,this.mopPath]}t!==r||0===o?(s&&a&&s.forEach(c=>c.stroke()),r=t,s=i,a=!0,n&&0===o&&n.type===t?i.forEach(c=>{c.moveTo(n.x,n.y),c.lineTo(e.x,e.y)}):i.forEach(c=>c.moveTo(e.x,e.y))):i.forEach(c=>c.lineTo(e.x,e.y))}s&&a&&s.forEach(c=>c.stroke())}stopRealTimeDrawing(){this.isRealTimeDrawing=!1,this.lastDrawnPosition=null}clear(){this.commonPath.clear(),this.chargePath.clear(),this.transitionsPath.clear(),this.mopPathTrack.clear(),this.mopPath.clear(),this.debugPoints.clear(),this.pathData=null,this.lastPointCount=0,this.lastDrawnPosition=null,this.isRealTimeDrawing=!1}destroy(c){const{emitter:e}=this.appService;e.off("antiScale",this.throttledUpdateLineWidth),e.off("robotPositionUpdate",this.throttledHandleRobotPosition),e.off("robotAnimationComplete",this.handleRobotAnimationComplete),this.unsubscribeFns.forEach(c=>c()),this.unsubscribeFns=[],this.stopRealTimeDrawing(),super.destroy(c)}}class yw extends ow{constructor(c){super(c),this.appService=c,this.initializeSprite()}initializeSprite(){return __async(this,null,function*(){yield this.loadTextureAndSetSize("robot",this.appService.robotConfig.icon)})}draw(c){return __async(this,arguments,function*({x:c,y:e,rotation:t}){__superGet(yw.prototype,this,"draw").call(this,{x:c,y:e,rotation:t})})}}const _w=class c extends Mo{constructor(c,e){super(e||[]),__publicField(this,"throttledUpdateScale"),__publicField(this,"fixedWidth",0),__publicField(this,"fixedHeight",0),__publicField(this,"isFixedSizeSet",!1),__publicField(this,"sizeFixed",!0),__publicField(this,"baselineScale",1),this.appService=c,this.anchor.set(.5),this.visible=!1,this.throttledUpdateScale=P_(this.updateScale.bind(this),30,{leading:!0,trailing:!0}),this.registerScaleListener()}setFixedSize(c,e){this.fixedWidth=c,this.fixedHeight=e,this.isFixedSizeSet=!0,this.applySize()}setSizeFixed(c){this.sizeFixed=c,this.baselineScale=1,(c&&this.isFixedSizeSet||!c&&this.isFixedSizeSet)&&this.applySize()}set width(c){this.isFixedSizeSet||this.setFixedSize(c,this.fixedHeight||c)}set height(c){this.isFixedSizeSet||this.setFixedSize(this.fixedWidth||c,c)}get width(){return this.fixedWidth||super.width}get height(){return this.fixedHeight||super.height}registerScaleListener(){this.appService.emitter.on("antiScale",this.throttledUpdateScale)}applySize(){if(!this.isFixedSizeSet||!this.textures||0===this.textures.length||!this.textures[0]||0===this.textures[0].width||0===this.textures[0].height)return;const c=this.textures[0],e=this.fixedWidth/c.width,t=this.fixedHeight/c.height;if(this.sizeFixed){const c=this.appService.currentScale;if(0===c||!isFinite(c)){const c=e,i=t;return void super.scale.set(c,i)}const i=e/c,n=t/c;super.scale.set(i,n)}else super.scale.set(e/this.baselineScale,t/this.baselineScale)}updateScale(c){this.sizeFixed&&(this.isFixedSizeSet?this.applySize():0!==c&&super.scale.set(1/c))}static loadAnimationTextures(c,e,t="sleep_",i=96){return __async(this,null,function*(){try{const n=yield fetch(c),r=yield n.json();r.meta&&(r.meta.image=e),yield Oa.load(e);const s=cc.from(e),a=new it(s.source,r);yield a.parse();const o=[];for(let c=0;c<i;c++){const e=c.toString().padStart(3,"0"),i=`${t}${e}.png`,n=a.textures[i];n?o.push(n):V_.warn(`[EnhancedAnimatedSprite] Frame not found: ${i}`)}return o}catch(n){return V_.error("[EnhancedAnimatedSprite] Failed to load textures:",n),[]}})}setupAnimation(c){void 0!==c.sizeFixed&&this.setSizeFixed(c.sizeFixed),this.setFixedSize(c.width,c.height),this.animationSpeed=.5,this.loop=!0,V_.log(`Animation setup complete, visible=${this.visible}, scale=(${this.scale.x.toFixed(3)}, ${this.scale.y.toFixed(3)})`)}draw(c,e){const{x:t,y:i}=c;e&&!this.visible?this.visible=e():e||this.visible||(this.visible=!0),this.position.set(t,i)}play(){this.textures&&this.textures.length>0&&(super.play(),c.animatedSprites.add(this),c.startAnimationTicker())}stop(){super.stop(),c.animatedSprites.delete(this),c.updateAnimationTicker()}set textures(c){super.textures=c,this.isFixedSizeSet&&c&&c.length>0&&c[0]&&c[0].width>0&&c[0].height>0&&this.applySize()}get textures(){return super.textures}static startAnimationTicker(){var e;(null==(e=c.animationTicker)?void 0:e.started)||(c.animationTicker||(c.animationTicker=new Ge,c.animationTicker.maxFPS=24,c.animationTicker.add(()=>{const e=c.animatedSprites.values().next().value;e&&c.updateAnimations(e.appService)})),c.animationTicker.start(),V_.log("🎬 [AnimationTicker] Started animation ticker"))}static updateAnimationTicker(){c.animatedSprites.size>0?c.startAnimationTicker():c.stopAnimationTicker()}static stopAnimationTicker(){var e;(null==(e=c.animationTicker)?void 0:e.started)&&(V_.log("⏸️ [AnimationTicker] Stopped animation ticker"),c.animationTicker.stop())}static updateAnimations(e){if(0===c.animatedSprites.size)return;const t=e.getApp();t.renderer.render(t.stage)}destroy(e){c.animatedSprites.delete(this),c.updateAnimationTicker(),this.appService.emitter.off("antiScale",this.throttledUpdateScale),super.destroy(e)}};__publicField(_w,"animationTicker",null),__publicField(_w,"animatedSprites",new Set);let xw=_w;class Sw extends xw{constructor(c,e){super(c,e),__publicField(this,"unsubscribeFns",[]),__publicField(this,"throttledUpdateOffset"),__publicField(this,"fixedOffsetX",0),__publicField(this,"fixedOffsetY",0),this.appService=c,this.throttledUpdateOffset=P_(this.updateOffset.bind(this),30,{leading:!0,trailing:!0}),this.initializeAnimation()}static create(c){return __async(this,null,function*(){const e=c.robotConfig,t=yield xw.loadAnimationTextures(e.sleepAnimation.jsonSrc,e.sleepAnimation.imageSrc,e.sleepAnimation.framePrefix,e.sleepAnimation.frameCount);0===t.length&&(V_.warn("No textures loaded for sleep animation"),t.push(cc.EMPTY));const i=new Sw(c,t);return i.setupAnimation({width:e.sleepAnimation.width,height:e.sleepAnimation.height,sizeFixed:e.sleepAnimation.sizeFixed}),i})}initializeAnimation(){this.visible=!1,this.fixedOffsetX=this.appService.robotConfig.sleepAnimation.offsetX,this.fixedOffsetY=this.appService.robotConfig.sleepAnimation.offsetY,this.appService.emitter.on("antiScale",this.throttledUpdateOffset);const c=oS(this.appService.runtime,"showRobotSleepAnimation",c=>{V_.log(`[runtime] showRobotSleepAnimation: ${c}`),this.updateVisibility()});this.unsubscribeFns.push(c)}shouldShow(){const c=this.appService.runtimeSnapshot.showRobotSleepAnimation,e=this.parent,t=!!e&&e.visible,i=e&&(0!==e.x||0!==e.y);return c&&t&&!!i}updateVisibility(){const c=this.shouldShow();c&&!this.visible?(this.visible=!0,this.textures&&this.textures.length>0&&this.play()):!c&&this.visible?(this.visible=!1,this.stop()):!c&&this.playing&&this.stop()}updateOffset(){}draw(c){const e=this.appService.getApp().toFixedSize(this.appService.robotConfig.sleepAnimation.offsetX),t=this.appService.getApp().toFixedSize(this.appService.robotConfig.sleepAnimation.offsetY),i=__spreadProps(__spreadValues({},c),{x:c.x+e,y:c.y+t});super.draw(i,()=>this.shouldShow()),this.updateVisibility()}onRobotVisibilityChanged(){this.updateVisibility()}set visible(c){const e=super.visible;super.visible=c,c&&!e&&this.textures&&this.textures.length>0?this.play():!c&&e&&this.playing&&this.stop()}get visible(){return super.visible}destroy(c){this.appService.emitter.off("antiScale",this.throttledUpdateOffset),this.unsubscribeFns.forEach(c=>c()),this.unsubscribeFns=[],this.stop(),super.destroy(c)}}class ww extends _o{constructor(c){super(),__publicField(this,"currentPosition",null),__publicField(this,"animationStartTime",0),__publicField(this,"isAnimating",!1),__publicField(this,"handleScaleChange",()=>{this.redraw()}),__publicField(this,"updateAnimation",()=>{if(!this.currentPosition||!this.isAnimating||!this.visible)return;const c=this.appService,e=c.robotConfig.pulseCircle,t=(Date.now()-this.animationStartTime)%e.duration/e.duration,{minScale:i,maxScale:n,minAlpha:r,maxAlpha:s}=e,a=i+(n-i)*(.5*Math.sin(t*Math.PI*2)+.5),o=s-(s-r)*(a-i)/(n-i);super.clear();const{size:f,color:l,strokeWidth:d,strokeColor:h,sizeFixed:u}=e,p=(u?c.getApp().toFixedSize(f/2):f/2)*a,g=c.getApp().toFixedSize(d);this.setFillStyle({color:l,alpha:o}),this.circle(this.currentPosition.x,this.currentPosition.y,p).fill().stroke({color:h,width:g,alpha:o,cap:"round",join:"round"})}),this.appService=c,this.setupAntiScaleListener()}setupAntiScaleListener(){this.appService.emitter.on("antiScale",this.handleScaleChange)}draw(c){this.currentPosition=c,this.isAnimating||this.startAnimation(),this.redraw()}startAnimation(){const c=this.appService;this.isAnimating||(this.isAnimating=!0,this.animationStartTime=Date.now(),c.getApp().ticker.add(this.updateAnimation,this),c.getApp().requestRender("pulse-circle-animation",!0))}stopAnimation(){const c=this.appService;this.isAnimating&&(this.isAnimating=!1,c.getApp().ticker.remove(this.updateAnimation,this),c.getApp().stopRender("pulse-circle-animation"))}redraw(){this.currentPosition&&this.isAnimating&&this.updateAnimation()}clearCircle(){super.clear()}remove(){this.stopAnimation(),this.clearCircle(),this.currentPosition=null}destroy(){this.stopAnimation();this.appService.emitter.off("antiScale",this.handleScaleChange),super.destroy()}}class Cw extends xe{constructor(c){super(),__publicField(this,"robot"),__publicField(this,"ring"),__publicField(this,"pulseCircle"),__publicField(this,"sleepAnimation",null),__publicField(this,"unsubscribeFns",[]),__publicField(this,"clickHandler"),__publicField(this,"targetPosition",null),__publicField(this,"targetRotation",null),__publicField(this,"isMoving",!1),__publicField(this,"pathQueue",[]),__publicField(this,"lastPosition",null),__publicField(this,"currentPathType"),__publicField(this,"lastUpdateTime",0),__publicField(this,"isCleared",!1),this.appService=c,c.appContainer.addToLayer(tw,this),this.visible=c.runtime.showRobot,this.ring=new lw(this.appService,{config:this.appService.robotConfig.ring}),this.ring.visible=this.appService.runtime.showRobotRing,this.addChild(this.ring),this.pulseCircle=new ww(this.appService),this.pulseCircle.visible=c.runtime.showRobotPulseCircle,this.addChild(this.pulseCircle),this.robot=new yw(this.appService),this.addChild(this.robot),this.lastUpdateTime=Date.now();this.appService.robotConfig.speed>0&&this.appService.getApp().ticker.add(this.update,this);const e=oS(this.appService.runtime,"showRobotRing",c=>{V_.log(`[runtime] showRobotRing: ${c}`),this.ring.visible=c});this.unsubscribeFns.push(e);const t=oS(this.appService.runtime,"showRobotPulseCircle",c=>{V_.log(`[runtime] showRobotPulseCircle: ${c}`),c?(this.lastPosition&&this.pulseCircle.draw(this.lastPosition),this.pulseCircle.visible=!0):(this.pulseCircle.remove(),this.pulseCircle.visible=!1)});this.unsubscribeFns.push(t),this.initClickInteraction()}initializeSleepAnimation(){return __async(this,null,function*(){try{this.sleepAnimation=yield Sw.create(this.appService),this.addChild(this.sleepAnimation),V_.log("Sleep animation added to robot")}catch(c){V_.error("Failed to initialize sleep animation:",c)}})}updatePositionByOrigin(c,e){this.position.set(c,e)}draw(c){return __async(this,arguments,function*({x:c,y:e,rotation:t}){this.isCleared&&(this.robot.visible=!0,this.ring.visible=this.appService.runtime.showRobotRing,this.pulseCircle.visible=this.appService.runtime.showRobotPulseCircle,this.sleepAnimation&&(this.sleepAnimation.visible=!0),this.isCleared=!1),this.ring.draw({x:c,y:e}),this.pulseCircle.draw({x:c,y:e}),yield this.robot.draw({x:c,y:e,rotation:t}),this.sleepAnimation||(yield this.initializeSleepAnimation()),this.sleepAnimation.draw({x:c,y:e}),this.lastPosition={x:c,y:e},this.sleepAnimation.draw({x:c,y:e}),this.lastPosition={x:c,y:e}})}initClickInteraction(){const{enableRobotClick:c}=this.appService.interactionConfig;c?this.clickHandler||(this.clickHandler=new dw(this.robot,{onClick:()=>{var c;const e=this.getCurrentPosition();e&&(null==(c=this.appService.events)?void 0:c.onClickRobot)&&this.appService.events.onClickRobot(__spreadProps(__spreadValues({},e),{rotation:this.robot.rotation}))}})):this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=void 0,this.robot.interactive=!1,this.robot.eventMode="none")}getCurrentPosition(){return this.lastPosition?this.appService.fixPrecision(__spreadValues({},this.lastPosition)):null}moveTo(c){this.pathQueue.push(c),this.isMoving||this.processNextPathPoint()}batchProcessQueue(c=!1){if(0===this.pathQueue.length)return;const e=[...this.pathQueue];if(c){const c=e[e.length-1];this.robot.position.set(c.x,c.y),void 0!==c.rotation&&(this.robot.rotation=c.rotation),this.lastPosition={x:c.x,y:c.y},this.pathQueue=[],this.isMoving=!1,this.targetPosition=null}else this.pathQueue.splice(0,e.length),0===this.pathQueue.length?(this.isMoving=!1,this.targetPosition=null):this.processNextPathPoint()}processNextPathPoint(){if(0===this.pathQueue.length)return this.isMoving=!1,this.currentPathType=void 0,this.stopRobotAnimation(),void this.appService.emitter.emit("robotAnimationComplete");this.isMoving||this.startRobotAnimation(),this.isMoving=!0;const c=this.pathQueue[0];this.targetPosition={x:c.x,y:c.y},this.currentPathType=c.type,void 0!==c.rotation&&(this.targetRotation=c.rotation),this.lastPosition||(this.lastPosition={x:this.robot.x,y:this.robot.y})}update(){const c=Date.now();if(0===this.lastUpdateTime)return void(this.lastUpdateTime=c);let e=c-this.lastUpdateTime;if(this.lastUpdateTime=c,e>500&&(e=16.67),this.targetPosition){const c=this.targetPosition.x-this.robot.x,t=this.targetPosition.y-this.robot.y,i=Math.sqrt(c*c+t*t),n=this.appService.robotConfig.speed,r=this.appService.coords.toPixels(n);if(0===n)return this.robot.position.set(this.targetPosition.x,this.targetPosition.y),null!==this.targetRotation&&(this.robot.rotation=this.targetRotation,this.targetRotation=null),this.targetPosition=null,this.lastPosition={x:this.robot.x,y:this.robot.y},this.pathQueue.shift(),void this.processNextPathPoint();const s=r*(e/1e3);i<s?(this.robot.position.set(this.targetPosition.x,this.targetPosition.y),null!==this.targetRotation&&(this.robot.rotation=this.targetRotation,this.targetRotation=null),this.targetPosition=null,this.lastPosition={x:this.robot.x,y:this.robot.y},this.pathQueue.shift(),this.processNextPathPoint()):(this.robot.x+=c*(s/i),this.robot.y+=t*(s/i),this.appService.emitter.emit("robotPositionUpdate",{x:this.robot.x,y:this.robot.y,pathType:this.currentPathType}),this.lastPosition={x:this.robot.x,y:this.robot.y})}}startRobotAnimation(){this.appService.getApp().requestRender("robot-animation",!0)}set visible(c){super.visible=c,this.sleepAnimation&&this.sleepAnimation.onRobotVisibilityChanged()}get visible(){return super.visible}stopRobotAnimation(){this.appService.getApp().stopRender("robot-animation")}remove(){this.pathQueue=[],this.isMoving=!1,this.targetPosition=null,this.stopRobotAnimation()}clear(){this.remove(),this.robot.visible=!1,this.ring.visible=!1,this.pulseCircle.remove(),this.sleepAnimation&&(this.sleepAnimation.visible=!1),this.lastPosition=null,this.isCleared=!0}destroy(c){this.unsubscribeFns.forEach(c=>c()),this.unsubscribeFns=[],this.stopRobotAnimation();this.appService.robotConfig.speed>0&&this.appService.getApp().ticker.remove(this.update,this),this.ring.destroy(),this.pulseCircle.destroy(),this.clickHandler&&this.clickHandler.destroy(),super.destroy(c)}}class Aw{constructor(c){__publicField(this,"path"),__publicField(this,"robot"),__publicField(this,"unsubscribeFns",[]),__publicField(this,"lastDrawnPathData",null),this.appService=c,this.path=new vw(this.appService),this.robot=new Cw(this.appService);const e=oS(c.runtime,"showPath",c=>{V_.log(`[runtime] showPath: ${c}`),this.path.visible=c}),t=oS(c.runtime,"showRobot",c=>{V_.log(`[runtime] showRobot: ${c}`),this.robot.visible=c});this.unsubscribeFns.push(e,t)}draw(c){var e,t,i;const n=null==(e=c.pathHeader)?void 0:e.pathId,r=null==(i=null==(t=this.lastDrawnPathData)?void 0:t.pathHeader)?void 0:i.pathId;this.lastDrawnPathData&&n!==r&&(this.path.clear(),this.lastDrawnPathData=null),this.shouldUseIncrementalDraw(c)?this.incrementalDraw(c):this.fullDraw(c),this.lastDrawnPathData=c}shouldUseIncrementalDraw(c){var e,t,i,n;if(!this.lastDrawnPathData)return!1;if((null==(e=c.pathHeader)?void 0:e.pathId)!==(null==(t=this.lastDrawnPathData.pathHeader)?void 0:t.pathId))return!1;const r=((null==(i=c.pathPoints)?void 0:i.length)||0)-((null==(n=this.lastDrawnPathData.pathPoints)?void 0:n.length)||0),s=this.appService.pathConfig.incrementalThreshold;return!(r<=0||r>s)}fullDraw(c){if(this.path.stopRealTimeDrawing(),this.path.drawFull(c),c.pathPoints&&c.pathPoints.length>0){const e=c.pathPoints[c.pathPoints.length-1];this.moveRobotToPoint(e,c.pathHeader.direction,!1)}else this.robot.clear()}convertToRobotPoint(c,e){const t=e+this.appService.robotConfig.rotationCorrection;return{x:c.x,y:c.y,rotation:t*Math.PI/180,type:c.type}}moveRobotToPoint(c,e,t=!0){const i=this.convertToRobotPoint(c,e);t?this.robot.moveTo(i):(this.robot.remove(),this.robot.draw(i))}incrementalDraw(c){var e;if(!this.lastDrawnPathData||!c.pathPoints)return;this.path.drawIncremental(c);const t=(null==(e=this.lastDrawnPathData.pathPoints)?void 0:e.length)||0,i=c.pathPoints.slice(t);if(0===i.length)return;if(this.appService.robotConfig.speed>0)i.forEach(e=>{this.moveRobotToPoint(e,c.pathHeader.direction,!0)});else{const e=i[i.length-1];this.moveRobotToPoint(e,c.pathHeader.direction,!1)}}batchProcessRobotQueue(c=!1){this.robot.batchProcessQueue(c)}updatePositionByOrigin(c,e){this.path.updatePositionByOrigin(c,e),this.robot.updatePositionByOrigin(c,e)}clear(){this.lastDrawnPathData=null,this.path.clear(),this.robot.clear()}destroy(){this.unsubscribeFns.forEach(c=>c()),this.unsubscribeFns=[],this.path.destroy(),this.robot.destroy()}}class Tw extends xe{constructor(c){super(),__publicField(this,"colorGradients",[]),__publicField(this,"cellSize",2),this.appService=c,this.appService.appContainer.addToLayer(XS,this);const e=this.appService.heatMapConfig;this.colorGradients=e.colorGradients.map(c=>new Fc(c).toArray().slice(0,3).join(",")),this.cellSize=e.cellSize}draw(c,e=.8){this.removeChildren();const{useGradient:t}=this.appService.heatMapConfig,i=t?this.gradientDrawing(c):this.gridDrawing(c);this.croppingHeatmap(i),i.alpha=e,this.addChild(i)}croppingHeatmap(c){var e;const t=(null==(e=this.appService.mapState)?void 0:e.origin)||{x:0,y:0},i=this.appService.mapManager.roomFill.children.filter(c=>c instanceof _o),n=new _o;for(const r of i)n.context.instructions.push(...r.context.instructions);n.context.dirty=!0,n.position.set(-t.x,-t.y),c.setMask({mask:n}),this.addChild(n)}gridDrawing(c){const e=[],t=[],i=c.length,n=c[0].length;for(let o=0;o<i;o++)for(let i=0;i<n;i++){const n=c[o][i],r=this.cellSize/2,s=n.x-r,a=n.y-r,f=n.x+r,l=n.y+r;e.push(s,a),t.push(n.signal),e.push(f,a),t.push(n.signal),e.push(f,l),t.push(n.signal),e.push(s,a),t.push(n.signal),e.push(f,l),t.push(n.signal),e.push(s,l),t.push(n.signal)}const r=new ur({attributes:{aPosition:new Float32Array(e),aSignal:new Float32Array(t)}}),s=new ni({glProgram:new Vt({vertex:"\n in vec2 aPosition;\n in float aSignal;\n uniform mat3 uProjectionMatrix;\n uniform mat3 uWorldTransformMatrix;\n uniform mat3 uTransformMatrix;\n\n out float vSignal;\n\n void main() {\n mat3 mvp = uProjectionMatrix * uWorldTransformMatrix * uTransformMatrix;\n gl_Position = vec4((mvp * vec3(aPosition, 1.0)).xy, 0.0, 1.0);\n vSignal = aSignal;\n }\n ",fragment:`\n precision mediump float;\n\n in float vSignal;\n\n void main() {\n vec3 color;\n\n if (vSignal > 0.875) {\n color = vec3(${this.colorGradients[0]});\n } else if (vSignal > 0.75) {\n color = vec3(${this.colorGradients[1]});\n } else if (vSignal > 0.625) {\n color = vec3(${this.colorGradients[2]});\n } else if (vSignal > 0.5) {\n color = vec3(${this.colorGradients[3]});\n } else if (vSignal > 0.375) {\n color = vec3(${this.colorGradients[4]});\n } else if (vSignal > 0.25) {\n color = vec3(${this.colorGradients[5]});\n } else if (vSignal > 0.125) {\n color = vec3(${this.colorGradients[6]});\n } else {\n color = vec3(${this.colorGradients[7]});\n }\n gl_FragColor = vec4(color, 1.0);\n }\n `}),gpuProgram:new Kt({vertex:{source:"\n struct GlobalUniforms {\n uProjectionMatrix: mat3x3<f32>,\n uWorldTransformMatrix: mat3x3<f32>,\n uWorldColorAlpha: vec4<f32>,\n uResolution: vec2<f32>,\n };\n\n struct LocalUniforms {\n uTransformMatrix: mat3x3<f32>,\n uColor: vec4<f32>,\n uRound: f32,\n };\n\n @group(0) @binding(0) var<uniform> globalUniforms: GlobalUniforms;\n @group(1) @binding(0) var<uniform> localUniforms: LocalUniforms;\n\n struct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) vSignal: f32,\n };\n\n @vertex\n fn main(\n @location(0) aPosition: vec2<f32>,\n @location(1) aSignal: f32\n ) -> VSOutput {\n var output: VSOutput;\n let mvp = globalUniforms.uProjectionMatrix * globalUniforms.uWorldTransformMatrix * localUniforms.uTransformMatrix;\n output.position = vec4((mvp * vec3<f32>(aPosition, 1.0)).xy, 0.0, 1.0);\n output.vSignal = aSignal;\n return output;\n }\n ",entryPoint:"main"},fragment:{source:`\n @fragment\n fn main(@location(0) vSignal: f32) -> @location(0) vec4<f32> {\n var color: vec3<f32>;\n\n if (vSignal > 0.875) {\n color = vec3<f32>(${this.colorGradients[0]});\n } else if (vSignal > 0.75) {\n color = vec3<f32>(${this.colorGradients[1]});\n } else if (vSignal > 0.625) {\n color = vec3<f32>(${this.colorGradients[2]});\n } else if (vSignal > 0.5) {\n color = vec3<f32>(${this.colorGradients[3]});\n } else if (vSignal > 0.375) {\n color = vec3<f32>(${this.colorGradients[4]});\n } else if (vSignal > 0.25) {\n color = vec3<f32>(${this.colorGradients[5]});\n } else if (vSignal > 0.125) {\n color = vec3<f32>(${this.colorGradients[6]});\n } else {\n color = vec3<f32>(${this.colorGradients[7]});\n }\n\n return vec4<f32>(color, 1.0);\n }\n `,entryPoint:"main"}})}),a=new Po({geometry:r,shader:s});return a.alpha=.8,a}gradientDrawing(c){const e=[],t=[],i=c.length,n=c[0].length;for(let o=0;o<i;o++)for(let r=0;r<n;r++){const s=c[o][r],a=this.cellSize/2,f=(e,t)=>e<0||e>=i||t<0||t>=n?s.signal:c[e][t].signal,l=(f(o-1,r-1)+f(o-1,r)+f(o,r-1)+s.signal)/4,d=(f(o-1,r)+f(o-1,r+1)+s.signal+f(o,r+1))/4,h=(s.signal+f(o,r+1)+f(o+1,r)+f(o+1,r+1))/4,u=(f(o,r-1)+s.signal+f(o+1,r-1)+f(o+1,r))/4,p=s.x-a,g=s.y-a,m=s.x+a,b=s.y+a;e.push(p,g,m,g,m,b),t.push(l,d,h),e.push(p,g,m,b,p,b),t.push(l,h,u)}const r=new ur({attributes:{aPosition:new Float32Array(e),aSignal:new Float32Array(t)}}),s=new ni({glProgram:new Vt({vertex:"\n in vec2 aPosition;\n in float aSignal;\n uniform mat3 uProjectionMatrix;\n uniform mat3 uWorldTransformMatrix;\n uniform mat3 uTransformMatrix;\n\n out float vSignal;\n\n void main() {\n mat3 mvp = uProjectionMatrix * uWorldTransformMatrix * uTransformMatrix;\n gl_Position = vec4((mvp * vec3(aPosition, 1.0)).xy, 0.0, 1.0);\n vSignal = aSignal;\n }\n ",fragment:`\n precision mediump float;\n\n in float vSignal;\n\n // 颜色插值函数\n vec3 interpolateColor(vec3 color1, vec3 color2, float t) {\n return mix(color1, color2, t);\n }\n\n void main() {\n vec3 color;\n float signal = clamp(vSignal, 0.0, 1.0);\n\n vec3 color1 = vec3(${this.colorGradients[7]});\n vec3 color2 = vec3(${this.colorGradients[6]});\n vec3 color3 = vec3(${this.colorGradients[5]});\n vec3 color4 = vec3(${this.colorGradients[4]});\n vec3 color5 = vec3(${this.colorGradients[3]});\n vec3 color6 = vec3(${this.colorGradients[2]});\n vec3 color7 = vec3(${this.colorGradients[1]});\n vec3 color8 = vec3(${this.colorGradients[0]});\n\n if (signal <= 0.125) {\n float t = signal / 0.125;\n color = interpolateColor(color1, color2, t);\n } else if (signal <= 0.25) {\n float t = (signal - 0.125) / 0.125;\n color = interpolateColor(color2, color3, t);\n } else if (signal <= 0.375) {\n float t = (signal - 0.25) / 0.125;\n color = interpolateColor(color3, color4, t);\n } else if (signal <= 0.5) {\n float t = (signal - 0.375) / 0.125;\n color = interpolateColor(color4, color5, t);\n } else if (signal <= 0.625) {\n float t = (signal - 0.5) / 0.125;\n color = interpolateColor(color5, color6, t);\n } else if (signal <= 0.75) {\n float t = (signal - 0.625) / 0.125;\n color = interpolateColor(color6, color7, t);\n } else if (signal <= 0.875) {\n float t = (signal - 0.75) / 0.125;\n color = interpolateColor(color7, color8, t);\n } else {\n color = color8;\n }\n\n gl_FragColor = vec4(color, 1.0);\n }\n `}),gpuProgram:new Kt({vertex:{source:"\n struct GlobalUniforms {\n uProjectionMatrix: mat3x3<f32>,\n uWorldTransformMatrix: mat3x3<f32>,\n uWorldColorAlpha: vec4<f32>,\n uResolution: vec2<f32>,\n };\n\n struct LocalUniforms {\n uTransformMatrix: mat3x3<f32>,\n uColor: vec4<f32>,\n uRound: f32,\n };\n\n @group(0) @binding(0) var<uniform> globalUniforms: GlobalUniforms;\n @group(1) @binding(0) var<uniform> localUniforms: LocalUniforms;\n\n struct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) vSignal: f32,\n };\n\n @vertex\n fn main(\n @location(0) aPosition: vec2<f32>,\n @location(1) aSignal: f32\n ) -> VSOutput {\n var output: VSOutput;\n let mvp = globalUniforms.uProjectionMatrix * globalUniforms.uWorldTransformMatrix * localUniforms.uTransformMatrix;\n output.position = vec4((mvp * vec3<f32>(aPosition, 1.0)).xy, 0.0, 1.0);\n output.vSignal = aSignal;\n return output;\n }\n ",entryPoint:"main"},fragment:{source:`\n fn interpolateColor(color1: vec3<f32>, color2: vec3<f32>, t: f32) -> vec3<f32> {\n return mix(color1, color2, t);\n }\n\n @fragment\n fn main(@location(0) vSignal: f32) -> @location(0) vec4<f32> {\n var color: vec3<f32>;\n let signal = clamp(vSignal, 0.0, 1.0);\n\n let color1 = vec3<f32>(${this.colorGradients[7]});\n let color2 = vec3<f32>(${this.colorGradients[6]});\n let color3 = vec3<f32>(${this.colorGradients[5]});\n let color4 = vec3<f32>(${this.colorGradients[4]});\n let color5 = vec3<f32>(${this.colorGradients[3]});\n let color6 = vec3<f32>(${this.colorGradients[2]});\n let color7 = vec3<f32>(${this.colorGradients[1]});\n let color8 = vec3<f32>(${this.colorGradients[0]});\n\n if (signal <= 0.125) {\n let t = signal / 0.125;\n color = interpolateColor(color1, color2, t);\n } else if (signal <= 0.25) {\n let t = (signal - 0.125) / 0.125;\n color = interpolateColor(color2, color3, t);\n } else if (signal <= 0.375) {\n let t = (signal - 0.25) / 0.125;\n color = interpolateColor(color3, color4, t);\n } else if (signal <= 0.5) {\n let t = (signal - 0.375) / 0.125;\n color = interpolateColor(color4, color5, t);\n } else if (signal <= 0.625) {\n let t = (signal - 0.5) / 0.125;\n color = interpolateColor(color5, color6, t);\n } else if (signal <= 0.75) {\n let t = (signal - 0.625) / 0.125;\n color = interpolateColor(color6, color7, t);\n } else if (signal <= 0.875) {\n let t = (signal - 0.75) / 0.125;\n color = interpolateColor(color7, color8, t);\n } else {\n color = color8;\n }\n\n return vec4<f32>(color, 1.0);\n }\n `,entryPoint:"main"}})}),a=new Po({geometry:r,shader:s});return a.alpha=.8,a}updatePositionByOrigin(c,e){this.position.set(c,e)}clear(){this.removeChildren()}destroy(){this.removeChildren(),this.cacheAsTexture(!1)}}class Pw{constructor(c){__publicField(this,"heatmap"),__publicField(this,"pointsTopLeftOrigin",[]),__publicField(this,"signalGrid",[]),__publicField(this,"cellSize",2),__publicField(this,"maxDistance",14),__publicField(this,"smoothIterations",10),__publicField(this,"heatmapAlpha",.8),__publicField(this,"isHeatmapDrawn",!1),__publicField(this,"loadTimer",null),__publicField(this,"pendingPoints",null),this.appService=c,this.heatmap=new Tw(c);const e=c.heatMapConfig;this.cellSize=e.cellSize,this.maxDistance=e.maxDistance,this.smoothIterations=e.smoothIterations,this.heatmapAlpha=e.heatmapAlpha}draw(c){if(0===c.length)return void this.clear();const e=this.appService;if(!e.isMapDrawn)return void(this.pendingPoints=c);this.pendingPoints=null;const{minX:t,minY:i}=e.mapManager.mapBounds,n=c.map(c=>({x:+(c.x-t).toFixed(0),y:+(c.y-i).toFixed(0),signal:c.signal}));this.signalGrid=this.calculateInterpolatedSignal(n),this.heatmap.draw(this.signalGrid,this.heatmapAlpha),this.isHeatmapDrawn=!0}clear(){this.pendingPoints=null,this.pointsTopLeftOrigin=[],this.signalGrid=[],this.heatmap.clear(),this.isHeatmapDrawn=!1}onMapLoaded(){this.loadTimer||(this.pendingPoints&&this.draw(this.pendingPoints),this.loadTimer=setTimeout(()=>{this.loadTimer=null},200))}calculateInterpolatedSignal(c){var e;const t=this.appService,i=(null==(e=t.mapState)?void 0:e.origin)||{x:0,y:0};let{minX:n,minY:r,maxX:s,maxY:a}=t.mapManager.mapBounds;r-=i.y,n-=i.x,a-=i.y,s-=i.x;const o=Math.ceil((a-r)/this.cellSize),f=Math.ceil((s-n)/this.cellSize),l=Array(o).fill(null).map(()=>Array(f).fill(null));for(let h=0;h<o;h++){const e=r+h*this.cellSize+this.cellSize/2,t=Math.min(this.cellSize,a-(e-this.cellSize/2));for(let i=0;i<f;i++){const r=n+i*this.cellSize+this.cellSize/2,a=Math.min(this.cellSize,s-(r-this.cellSize/2));let o=0,f=!1;for(let i=0;i<c.length;i++){const n=c[i];if(Math.abs(r-n.x)<=a/2&&Math.abs(e-n.y)<=t/2){const c=1-n.signal/7;o=Math.round(10*Math.max(o,c))/10,f=!0}}l[h][i]={x:r,y:e,signal:o,hasPoint:f}}}const d=(e,t)=>{if(0===c.length)return 0;let i=0,n=0;for(const r of c){const c=Math.sqrt(__pow(e-r.x,2)+__pow(t-r.y,2));if(c<=this.maxDistance){const e=1/(1+c);n+=e*(1-r.signal/7),i+=e}}return 0===i?0:Math.round(n/i*1e3)/1e3};for(let h=0;h<o;h++)for(let c=0;c<f;c++){const e=l[h][c];e.hasPoint||(e.signal=d(e.x,e.y))}return((c,e=1)=>{for(let t=0;t<e;t++){const e=c.map(c=>[...c]);for(let t=1;t<o-1;t++)for(let i=1;i<f-1;i++)if(!c[t][i].hasPoint){let n=0,r=0;const s=4;for(let e=-s;e<=s;e++)for(let a=-s;a<=s;a++){if(0===e&&0===a)continue;const s=t+e,l=i+a;if(s>=0&&s<o&&l>=0&&l<f){const t=1/(1+.3*Math.sqrt(e*e+a*a));n+=c[s][l].signal*t,r+=t}}if(r>0){const s=n/r,a=.6,o=.4;e[t][i].signal=c[t][i].signal*a+s*o,e[t][i].signal>.1&&(e[t][i].signal=Math.max(e[t][i].signal,.2))}}for(let t=0;t<o;t++)for(let i=0;i<f;i++)c[t][i].signal=e[t][i].signal}})(l,this.smoothIterations),l}updatePositionByOrigin(c,e){this.heatmap.updatePositionByOrigin(c,e)}destroy(){this.heatmap.destroy()}}class Mw extends _o{constructor(c,e){super(),__publicField(this,"fillOptions"),__publicField(this,"isDragging",!1),__publicField(this,"dragStartPosition",null),__publicField(this,"gestureSession",null),__publicField(this,"handlePointerDown",c=>{c.stopPropagation(),this.startDragging(c)}),__publicField(this,"handleDragPointerMove",c=>{var e,t;this.isDragging&&this.dragStartPosition&&(null==(t=(e=this.fillOptions).onDragMove)||t.call(e,c))}),__publicField(this,"handleDragPointerUp",()=>{var c,e;this.gestureSession=null,this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null,null==(e=(c=this.fillOptions).onDragEnd)||e.call(c))}),this.appService=c,this.fillOptions=e,this.setupInteraction(),this.draw()}setupInteraction(){this.fillOptions.enableInteraction&&(this.eventMode="static",this.on("pointerdown",this.handlePointerDown))}startDragging(c){var e,t;this.isDragging=!0;const i=this.parent.toLocal(c.global);this.dragStartPosition={x:i.x,y:i.y},null==(t=(e=this.fillOptions).onDragStart)||t.call(e,c),this.gestureSession=this.appService.gestureController.hijack(c),this.gestureSession.onMove(this.handleDragPointerMove),this.gestureSession.onEnd(this.handleDragPointerUp)}draw(){const{points:c,fillColor:e}=this.fillOptions;if(c.length<3)return;this.clear();const t=c.flatMap(c=>[c.x,c.y]);this.setFillStyle({color:e}).poly(t).fill()}getDragStartPosition(){return this.dragStartPosition}updateOptions(c){this.fillOptions=__spreadValues(__spreadValues({},this.fillOptions),c),void 0!==c.enableInteraction&&(this.off("pointerdown",this.handlePointerDown),this.setupInteraction()),this.draw()}updatePoints(c){this.fillOptions.points=c,this.draw()}updateFillColor(c){this.fillOptions.fillColor=c,this.draw()}stopDragging(){var c;this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null,null==(c=this.gestureSession)||c.cancel(),this.gestureSession=null)}isCurrentlyDragging(){return this.isDragging}setInteractionEnabled(c){this.fillOptions.enableInteraction=c,c?(this.eventMode="static",this.on("pointerdown",this.handlePointerDown)):(this.eventMode="auto",this.off("pointerdown",this.handlePointerDown),this.isDragging&&this.stopDragging())}destroy(){this.stopDragging(),this.gestureSession=null,this.off("pointerdown",this.handlePointerDown),super.destroy()}}class Ew extends xe{constructor(c,e){super(),__publicField(this,"borderOptions"),__publicField(this,"solidLine",null),__publicField(this,"dashGraphics",null),__publicField(this,"fillGraphics",null),__publicField(this,"handleAntiScale",()=>{this.drawBorder()}),this.appService=c,this.borderOptions=__spreadValues({},e),this.drawBorder(),this.setupAntiScaleListener(),this.eventMode="none"}setupAntiScaleListener(){this.appService.emitter.on("antiScale",this.handleAntiScale)}drawBorder(){const{points:c=[],closePath:e=!1,style:t}=this.borderOptions;c.length<2||(this.clearBorder(),void 0!==t.fillColor&&e&&this.drawFill(c,t),t.isDashed?this.drawContinuousDashedBorder(c,e,t):this.drawSolidBorder(c,e,t))}drawFill(c,e){if(e.fillColor&&!(c.length<3)){this.fillGraphics&&(this.removeChild(this.fillGraphics),this.fillGraphics.destroy()),this.fillGraphics=new _o,this.fillGraphics.setFillStyle({color:e.fillColor}),this.fillGraphics.moveTo(c[0].x,c[0].y);for(let e=1;e<c.length;e++)this.fillGraphics.lineTo(c[e].x,c[e].y);this.fillGraphics.closePath(),this.fillGraphics.fill(),this.addChild(this.fillGraphics)}}drawSolidBorder(c,e,t){const i=this.appService;this.solidLine&&(this.removeChild(this.solidLine),this.solidLine.destroy()),this.solidLine=new _o;const n=i.getApp().toFixedSize(t.width);this.solidLine.setStrokeStyle({color:t.color,width:n}),this.solidLine.moveTo(c[0].x,c[0].y);for(let r=1;r<c.length;r++)this.solidLine.lineTo(c[r].x,c[r].y);e&&this.solidLine.lineTo(c[0].x,c[0].y),this.solidLine.stroke(),this.addChild(this.solidLine)}drawContinuousDashedBorder(c,e,t){if(c.length<2)return;if(!t.dashArray||2!==t.dashArray.length||t.dashArray[0]<=0||t.dashArray[1]<=0)return void V_.warn("Invalid dashArray:",t.dashArray);const i=this.appService;this.dashGraphics=new _o;const n=i.getApp().toFixedSize(t.width);this.dashGraphics.setStrokeStyle({color:t.color,width:n});const r=Math.max(i.getApp().toFixedSize(t.dashArray[0]),1),s=Math.max(i.getApp().toFixedSize(t.dashArray[1]),1),a=e?[...c,c[0]]:c;this.drawContinuousPathDashes(this.dashGraphics,a,r,s),this.dashGraphics.stroke(),this.addChild(this.dashGraphics)}drawContinuousPathDashes(c,e,t,i){if(e.length<2)return;if(t<=0||i<=0)return void V_.warn("Invalid dash parameters:",{dashLength:t,gapLength:i});const n=this.calculatePathSegments(e),r=n.reduce((c,e)=>c+e.length,0);if(0===r)return;const s=t+i;let a=0;for(;a<r;){const e=a+t;e<=r?this.drawContinuousDashSegment(c,n,a,e):this.drawContinuousDashSegment(c,n,a,r),a+=s}}calculatePathSegments(c){const e=[];for(let t=0;t<c.length-1;t++){const i=c[t],n=c[t+1],r=n.x-i.x,s=n.y-i.y,a=Math.sqrt(r*r+s*s);e.push({start:i,end:n,length:a})}return e}drawContinuousDashSegment(c,e,t,i){if(t>=i)return;let n=0,r=!1,s=null;for(const a of e){const e=n,o=n+a.length;if(o>t&&e<i){const n=Math.max(t,e),f=Math.min(i,o),l=(n-e)/a.length,d=(f-e)/a.length,h={x:a.start.x+(a.end.x-a.start.x)*l,y:a.start.y+(a.end.y-a.start.y)*l},u={x:a.start.x+(a.end.x-a.start.x)*d,y:a.start.y+(a.end.y-a.start.y)*d};if(r){if(s){Math.sqrt(Math.pow(h.x-s.x,2)+Math.pow(h.y-s.y,2))>.1&&c.lineTo(h.x,h.y)}}else c.moveTo(h.x,h.y),r=!0;c.lineTo(u.x,u.y),s=u}if(n+=a.length,n>=i)break}}clearBorder(){this.fillGraphics&&(this.removeChild(this.fillGraphics),this.fillGraphics.destroy(),this.fillGraphics=null),this.solidLine&&(this.removeChild(this.solidLine),this.solidLine.destroy(),this.solidLine=null),this.dashGraphics&&(this.removeChild(this.dashGraphics),this.dashGraphics.destroy(),this.dashGraphics=null)}updateStyle(c){this.borderOptions.style=__spreadValues(__spreadValues({},this.borderOptions.style),c),this.drawBorder()}updatePoints(c){this.borderOptions.points=c,this.drawBorder()}setClosePath(c){this.borderOptions.closePath=c,this.drawBorder()}getOptions(){return __spreadValues({},this.borderOptions)}destroy(){this.appService.emitter.off("antiScale",this.handleAntiScale),this.clearBorder(),super.destroy()}}class Rw{constructor(c){__publicField(this,"id",null),__publicField(this,"layer",null),__publicField(this,"editingState",{}),__publicField(this,"idleState",{}),__publicField(this,"host",null),__publicField(this,"onHostDestroyed",null),__publicField(this,"detached",!1),this.deps=c}attach(c,e){var t;this.layer&&this.detach(),this.detached=!1,this.host=c,this.id=e.id,this.editingState=e.editingState,this.idleState=null!=(t=e.idleState)?t:{},this.layer=this.deps.editControls.registerEditControl(e.id,e.layerOptions);const i=()=>this.detach();return this.onHostDestroyed=i,c.once("destroyed",i),this.layer}detach(){this.detached||(this.detached=!0,this.host&&this.onHostDestroyed&&this.host.off("destroyed",this.onHostDestroyed),this.onHostDestroyed=null,this.host=null,null!=this.id&&this.deps.editControls.unregisterEditControl(this.id),this.id=null,this.layer=null)}setEditing(c){null!=this.id?this.deps.editControls.updateEditState(this.id,c?this.editingState:this.idleState):V_.warn("[EditableShape] setEditing called before attach; ignoring")}applyEditState(c){null!=this.id?this.deps.editControls.updateEditState(this.id,c):V_.warn("[EditableShape] applyEditState called before attach; ignoring")}updatePoints(c,e=!0){var t;null==(t=this.layer)||t.updatePoints(c,e)}getLayer(){return this.layer}getMoveButton(){var c,e;return null!=(e=null==(c=this.layer)?void 0:c.getMoveButton())?e:null}}class kw extends Wf{constructor(c,{text:e,style:t}){super({text:e,style:t}),__publicField(this,"throttledUpdateScale"),this.appService=c,this.throttledUpdateScale=P_(this.updateScale.bind(this),20,{leading:!0,trailing:!0}),this.registerScaleListener(),this.updateScale(this.appService.currentScale)}registerScaleListener(){this.appService.emitter.on("antiScale",this.throttledUpdateScale)}updateScale(c){c<=0||this.scale.set(1/c)}setBaseFontSize(c){this.style.fontSize=c}updateText(c){this.text=c}destroy(c){this.appService.emitter.off("antiScale",this.throttledUpdateScale),super.destroy(c)}}class Fw extends xe{constructor(c){super(),__publicField(this,"throttledUpdateScale"),this.appService=c,this.throttledUpdateScale=P_(this.updateScale.bind(this),30,{leading:!0,trailing:!0}),this.updateScale(this.appService.currentScale),this.registerScaleListener()}registerScaleListener(){this.appService.emitter.on("antiScale",this.throttledUpdateScale)}updateScale(c){0!==c&&this.scale.set(1/c)}destroy(c){this.appService.emitter.off("antiScale",this.throttledUpdateScale),super.destroy(c)}}class Iw extends Fw{constructor(c,e){super(c),__publicField(this,"background"),__publicField(this,"icon"),__publicField(this,"options"),this.appService=c,this.options=e,this.background=new _o,this.addChild(this.background),this.icon=new ow(c),this.addChild(this.icon),this.eventMode="static",this.render(),this.setupHitArea(),this.setupEvents()}setupHitArea(){const c=this.appService,e=this.options.config||c.controlsConfig,t=e.iconWrapperWidth+16,i=e.iconWrapperHeight+16;this.hitArea=new D(-t/2,-i/2,t,i)}render(){return __async(this,null,function*(){this.renderBackground(),this.renderIcon()})}renderBackground(){const c=this.appService,e=this.options.config||c.controlsConfig;this.background.clear(),this.background.roundRect(-e.iconWrapperWidth/2,-e.iconWrapperHeight/2,e.iconWrapperWidth,e.iconWrapperHeight,e.iconWrapperBorderRadius).fill(this.options.backgroundColor)}renderIcon(){return __async(this,null,function*(){try{const c=this.appService,e=this.options.config||c.controlsConfig;yield this.icon.loadTextureAndSetSize(this.options.iconAlias,{width:e.iconWidth,height:e.iconHeight,sizeFixed:!1}),this.icon.visible=!0}catch(c){V_.error(`Failed to load icon: ${this.options.iconAlias}`,c)}})}destroy(){super.destroy()}}class Bw extends Iw{constructor(c,e){super(c,e),__publicField(this,"isMoving",!1),__publicField(this,"dragStartPosition",null),__publicField(this,"gestureSession",null),__publicField(this,"handleMovePointerMove",c=>{var e,t;this.isMoving&&this.dragStartPosition&&(null==(t=(e=this.options).onMoveMove)||t.call(e,c))}),__publicField(this,"handleMovePointerUp",()=>{var c,e;this.gestureSession=null,this.isMoving&&(this.isMoving=!1,this.dragStartPosition=null,null==(e=(c=this.options).onMoveEnd)||e.call(c))}),this.appService=c}setupEvents(){this.on("pointerdown",this.handlePointerDown.bind(this))}handlePointerDown(c){c.stopPropagation(),this.startMoving(c)}startMoving(c){var e,t;this.isMoving=!0,this.dragStartPosition=this.parent.toLocal(c.global),null==(t=(e=this.options).onMoveStart)||t.call(e),this.gestureSession=this.appService.gestureController.hijack(c),this.gestureSession.onMove(this.handleMovePointerMove),this.gestureSession.onEnd(this.handleMovePointerUp)}isCurrentlyMoving(){return this.isMoving}getDragStartPosition(){return this.dragStartPosition?__spreadValues({},this.dragStartPosition):null}stopMoving(){var c,e;this.isMoving&&(this.gestureSession?this.gestureSession.cancel():(this.isMoving=!1,this.dragStartPosition=null,null==(e=(c=this.options).onMoveEnd)||e.call(c)))}destroy(){this.stopMoving(),this.gestureSession=null,this.off("pointerdown",this.handlePointerDown),super.destroy()}}class Dw extends Iw{constructor(c,e){super(c,e),__publicField(this,"clickHandler",null),this.appService=c}setupEvents(){this.clickHandler=new dw(this,{onClick:this.options.onClick,stopPropagation:!0})}destroy(){var c;null==(c=this.clickHandler)||c.destroy(),super.destroy()}}class Ow extends Iw{constructor(c,e){super(c,e),__publicField(this,"isRotating",!1),__publicField(this,"hasRotated",!1),__publicField(this,"rotationCenter",{x:0,y:0}),__publicField(this,"lastAngle",0),__publicField(this,"clickHandler",null),__publicField(this,"gestureSession",null),__publicField(this,"handleRotationPointerMove",c=>{var e,t;if(!this.isRotating)return;this.hasRotated=!0;const i=this.parent.toLocal(c.global),n=Math.atan2(i.y-this.rotationCenter.y,i.x-this.rotationCenter.x),r=n-this.lastAngle;null==(t=(e=this.options).onRotationMove)||t.call(e,r),this.lastAngle=n}),__publicField(this,"handleRotationPointerUp",()=>{var c,e;this.gestureSession=null,this.isRotating&&(this.isRotating=!1,this.hasRotated&&(null==(e=(c=this.options).onRotationEnd)||e.call(c)),this.hasRotated=!1)}),this.appService=c}setupEvents(){this.options.onClick&&(this.clickHandler=new dw(this,{onClick:()=>{var c,e;this.hasRotated||null==(e=(c=this.options).onClick)||e.call(c)},stopPropagation:!1})),this.on("pointerdown",this.handlePointerDown.bind(this))}handlePointerDown(c){c.stopPropagation(),this.startRotation(c)}startRotation(c){var e,t;this.isRotating=!0,this.hasRotated=!1;const i=this.options.getTargetPoints();this.rotationCenter=rx(i);const n=this.parent.toLocal(c.global);this.lastAngle=Math.atan2(n.y-this.rotationCenter.y,n.x-this.rotationCenter.x),null==(t=(e=this.options).onRotationStart)||t.call(e,this.rotationCenter),this.gestureSession=this.appService.gestureController.hijack(c),this.gestureSession.onMove(this.handleRotationPointerMove),this.gestureSession.onEnd(this.handleRotationPointerUp)}isCurrentlyRotating(){return this.isRotating}stopRotation(){var c,e;this.isRotating&&(this.gestureSession?this.gestureSession.cancel():(this.isRotating=!1,this.hasRotated&&(null==(e=(c=this.options).onRotationEnd)||e.call(c)),this.hasRotated=!1))}destroy(){var c;this.stopRotation(),this.gestureSession=null,null==(c=this.clickHandler)||c.destroy(),this.off("pointerdown",this.handlePointerDown),super.destroy()}}class Lw extends Iw{constructor(c,e){super(c,e),__publicField(this,"isScaling",!1),__publicField(this,"initialButtonPosition",null),__publicField(this,"dragStartPosition",null),__publicField(this,"gestureSession",null),__publicField(this,"handleScalePointerMove",c=>{var e,t;if(!this.isScaling||!this.initialButtonPosition||!this.dragStartPosition)return;const i=this.parent.toLocal(c.global),n=i.x-this.dragStartPosition.x,r=i.y-this.dragStartPosition.y;null==(t=(e=this.options).onScaleMove)||t.call(e,{deltaX:n,deltaY:r})}),__publicField(this,"handleScalePointerUp",()=>{var c,e;this.gestureSession=null,this.isScaling&&(this.isScaling=!1,this.initialButtonPosition=null,this.dragStartPosition=null,null==(e=(c=this.options).onScaleEnd)||e.call(c))}),this.appService=c}setupEvents(){this.on("pointerdown",this.handlePointerDown.bind(this))}handlePointerDown(c){c.stopPropagation(),this.startScaling(c)}startScaling(c){var e,t,i,n;if(this.isScaling=!0,this.dragStartPosition=this.parent.toLocal(c.global),"initialButtonPosition"in this.options)this.initialButtonPosition={x:this.position.x,y:this.position.y},null==(t=(e=this.options).onScaleStart)||t.call(e);else{const c=this.options.getTargetPoints(),e=this.options.getButtonIndex();e>=0&&e<c.length&&(this.initialButtonPosition=__spreadValues({},c[e])),null==(n=(i=this.options).onScaleStart)||n.call(i,e)}this.gestureSession=this.appService.gestureController.hijack(c),this.gestureSession.onMove(this.handleScalePointerMove),this.gestureSession.onEnd(this.handleScalePointerUp)}isCurrentlyScaling(){return this.isScaling}stopScaling(){var c,e;this.isScaling&&(this.gestureSession?this.gestureSession.cancel():(this.isScaling=!1,this.initialButtonPosition=null,this.dragStartPosition=null,null==(e=(c=this.options).onScaleEnd)||e.call(c)))}destroy(){this.stopScaling(),this.gestureSession=null,this.off("pointerdown",this.handlePointerDown),super.destroy()}}const zw=0,Gw=1,Uw=2,Vw=3;class Nw extends xe{constructor(c,e){var t,i,n;super(),__publicField(this,"config"),__publicField(this,"events"),__publicField(this,"zonePoints",[]),__publicField(this,"outlinePoints"),__publicField(this,"minSize",.1),__publicField(this,"maxSize"),__publicField(this,"sizeConstraintPerEdge"),__publicField(this,"initialZonePoints",[]),__publicField(this,"scaleCache",null),__publicField(this,"rotationCache",null),__publicField(this,"outlineBorder"),__publicField(this,"moveLine"),__publicField(this,"sizeText"),__publicField(this,"controlButtons"),__publicField(this,"deleteButton",null),__publicField(this,"rotateButton",null),__publicField(this,"scaleButton",null),__publicField(this,"moveButton",null),__publicField(this,"horizontalScaleButton",null),__publicField(this,"verticalScaleButton",null),__publicField(this,"horizontalScaleInitialPosition",null),__publicField(this,"verticalScaleInitialPosition",null),__publicField(this,"clickHandler",null),__publicField(this,"throttledUpdateOutline"),this.appService=c,this.zonePoints=e.zonePoints,this.config=__spreadProps(__spreadValues({},e.config),{showScaleButton:void 0===e.config.showScaleButton||e.config.showScaleButton,showRadialScaleButton:void 0===e.config.showRadialScaleButton||e.config.showRadialScaleButton,showDeleteButton:void 0===e.config.showDeleteButton||e.config.showDeleteButton,showMoveButton:void 0===e.config.showMoveButton||e.config.showMoveButton,showRotateButton:void 0===e.config.showRotateButton||e.config.showRotateButton,rotateMode:null!=(t=e.config.rotateMode)?t:"step",scaleMode:null!=(i=e.config.scaleMode)?i:"free"}),this.events=e.events||{},this.minSize=null!=(n=e.minSize)?n:.1,this.maxSize=e.maxSize,this.sizeConstraintPerEdge=e.sizeConstraintPerEdge,this.throttledUpdateOutline=P_(this.updateOutlineForScale.bind(this),30,{leading:!0,trailing:!0}),this.initializeComponents(),this.registerScaleListener()}initializeComponents(){this.outlinePoints=this.calculateOutlinePoints(),this.outlineBorder=this.createOutlineBorder(),this.addChild(this.outlineBorder),this.moveLine=this.createMoveLine(),this.addChild(this.moveLine),this.moveLine.visible=this.config.showMoveButton||!1,this.sizeText=this.createSizeText(),this.addChild(this.sizeText),this.controlButtons=new xe,this.addChild(this.controlButtons),this.createControlButtons(),this.setupClickHandler()}createOutlineBorder(){const{outlineStrokeColor:c,outlineStrokeWidth:e,outlineDashed:t,outlineDashArray:i,outlineFillColor:n}=this.config;return new Ew(this.appService,{points:this.outlinePoints,closePath:!0,style:{color:c,width:e,isDashed:t,dashArray:i,fillColor:n}})}createMoveLine(){const{outlineStrokeColor:c,outlineStrokeWidth:e,outlineDashed:t,outlineDashArray:i}=this.config,n=this.calculateMoveLinePoints();return new Ew(this.appService,{points:n,closePath:!1,style:{color:c,width:e,isDashed:t,dashArray:i}})}createSizeText(){const c=this.calculateSizeText(),e=new kw(this.appService,{text:c,style:{fontSize:this.config.textFontSize,fontFamily:this.config.textFontFamily,fontWeight:this.config.textFontWeight,fill:this.config.textColor,align:"center"}});e.anchor.set(.5);const t=this.calculateSizeTextPosition();e.position.set(t.x,t.y);const i=this.calculateSizeTextRotation();return e.rotation=i,e.eventMode="none",e}createDeleteButton(){var c;const e=new Dw(this.appService,{iconAlias:"deleteIcon",backgroundColor:null!=(c=this.config.deleteIconWrapperFillColor)?c:this.config.iconWrapperFillColor,onClick:()=>{var c,e;return null==(e=(c=this.events).onRemove)?void 0:e.call(c)}});return e.position.set(this.outlinePoints[zw].x,this.outlinePoints[zw].y),e}createRotateButton(){const c="step"===this.config.rotateMode,e=new Ow(this.appService,{iconAlias:"rotateIcon",backgroundColor:this.config.iconWrapperFillColor,getTargetPoints:()=>this.zonePoints,onRotationStart:c=>{var e,t;this.initializeRotationCache(c),null==(t=(e=this.events).onRotateStart)||t.call(e,c)},onRotationMove:c?void 0:c=>{var e,t;const i=this.handleInternalRotationMove(c);null==(t=(e=this.events).onRotateMove)||t.call(e,null!=i?i:void 0)},onClick:c?()=>{var c,e,t,i,n;const r=null!=(c=this.config.stepRotateAngle)?c:Math.PI/2,s=this.onClickRotateButton(r);null==(t=(e=this.events).onRotateMove)||t.call(e,null!=s?s:void 0),null==(n=(i=this.events).onClickRotate)||n.call(i,null!=s?s:void 0)}:void 0,onRotationEnd:()=>{var c,e;this.resetRotationState(),null==(e=(c=this.events).onRotateEnd)||e.call(c)}});return e.position.set(this.outlinePoints[Gw].x,this.outlinePoints[Gw].y),e}onClickRotateButton(c){var e;const t=null!=(e=this.handleInternalRotationMove(c))?e:[];return this.resetRotationState(),t}createScaleButton(){const c=new Lw(this.appService,{iconAlias:"scaleIcon",backgroundColor:this.config.iconWrapperFillColor,initialButtonPosition:this.outlinePoints[Uw],onScaleStart:()=>{var c,e;this.initializeScaleCache(),null==(e=(c=this.events).onScaleStart)||e.call(c)},onScaleMove:({deltaX:c,deltaY:e})=>{var t,i;const n=this.handleInternalScaleMove(c,e);null==(i=(t=this.events).onScaleMove)||i.call(t,null!=n?n:void 0)},onScaleEnd:()=>{var c,e;this.resetScaleState(),this.initialZonePoints=[],null==(e=(c=this.events).onScaleEnd)||e.call(c)}});return c.position.set(this.outlinePoints[Uw].x,this.outlinePoints[Uw].y),c}createHorizontalScaleButton(){const[,c,e]=this.outlinePoints,t=this.getEdgeCenter(c,e),i=new Lw(this.appService,{iconAlias:"horizontalScaleIcon",backgroundColor:this.config.iconWrapperFillColor,config:{iconWrapperWidth:18,iconWrapperHeight:18,iconWrapperBorderRadius:18,iconWidth:10,iconHeight:8},initialButtonPosition:t,onScaleStart:()=>{var c,e;const[,t,i]=this.zonePoints;this.horizontalScaleInitialPosition=this.getEdgeCenter(t,i),this.initializeScaleCache(),null==(e=(c=this.events).onScaleStart)||e.call(c)},onScaleMove:({deltaX:c,deltaY:e})=>{var t,i;const n=this.handleInternalHorizontalScaleMove(c,e);null==(i=(t=this.events).onScaleMoveHorizontal)||i.call(t,null!=n?n:void 0)},onScaleEnd:()=>{var c,e;this.resetScaleState(),this.initialZonePoints=[],this.horizontalScaleInitialPosition=null,null==(e=(c=this.events).onScaleEnd)||e.call(c)}});return i.position.set(t.x,t.y),i}createVerticalScaleButton(){const[,,c,e]=this.outlinePoints,t=this.getEdgeCenter(c,e),i=new Lw(this.appService,{iconAlias:"verticalScaleIcon",backgroundColor:this.config.iconWrapperFillColor,config:{iconWrapperWidth:18,iconWrapperHeight:18,iconWrapperBorderRadius:18,iconWidth:8,iconHeight:10},initialButtonPosition:t,onScaleStart:()=>{var c,e;const[,,t,i]=this.zonePoints;this.verticalScaleInitialPosition=this.getEdgeCenter(t,i),this.initializeScaleCache(),null==(e=(c=this.events).onScaleStart)||e.call(c)},onScaleMove:({deltaX:c,deltaY:e})=>{var t,i;const n=this.handleInternalVerticalScaleMove(c,e);null==(i=(t=this.events).onScaleMoveVertical)||i.call(t,null!=n?n:void 0)},onScaleEnd:()=>{var c,e;this.resetScaleState(),this.initialZonePoints=[],this.verticalScaleInitialPosition=null,null==(e=(c=this.events).onScaleEnd)||e.call(c)}});return i.position.set(t.x,t.y),i}createMoveButton(){const c=this.calculateMoveButtonPosition(),e=new Bw(this.appService,{iconAlias:"moveIcon",backgroundColor:this.config.iconWrapperFillColor,onMoveStart:()=>{var c,e;return null==(e=(c=this.events).onMoveStart)?void 0:e.call(c)},onMoveMove:c=>{var e,t;return null==(t=(e=this.events).onMoveMove)?void 0:t.call(e,c)},onMoveEnd:()=>{var c,e;return null==(e=(c=this.events).onMoveEnd)?void 0:e.call(c)}});return e.position.set(c.x,c.y),e}createAndAddButton(c,e){return c.visible=e,this.controlButtons.addChild(c),c}createControlButtons(){var c,e,t,i,n,r;this.outlinePoints.length<4||(this.deleteButton=this.createAndAddButton(this.createDeleteButton(),null!=(c=this.config.showDeleteButton)&&c),this.moveButton=this.createAndAddButton(this.createMoveButton(),null!=(e=this.config.showMoveButton)&&e),this.rotateButton=this.createAndAddButton(this.createRotateButton(),null!=(t=this.config.showRotateButton)&&t),this.scaleButton=this.createAndAddButton(this.createScaleButton(),null!=(i=this.config.showScaleButton)&&i),this.horizontalScaleButton=this.createAndAddButton(this.createHorizontalScaleButton(),null!=(n=this.config.showRadialScaleButton)&&n),this.verticalScaleButton=this.createAndAddButton(this.createVerticalScaleButton(),null!=(r=this.config.showRadialScaleButton)&&r))}calculateOutlinePoints(){const c=this.zonePoints;if(c.length<4)return c;const e=this.appService.getApp().toFixedSize(this.config.outlineOffset);return Sx(c,e)}calculateMoveButtonPosition(){const c=this.calculateOutlinePoints();if(c.length<4)return{x:0,y:0};const e=this.appService.getApp().toFixedSize(this.config.moveButtonOffset),t=c[Vw],i=c[Uw],n=c[zw];return Cx(t,i,n,e)}calculateMoveLinePoints(){const c=this.calculateOutlinePoints();if(c.length<4)return[];return[c[Vw],this.calculateMoveButtonPosition()]}calculateSizeText(){const c=this.zonePoints;if(c.length<4)return"0m*0m";const[e,t,,i]=c,n=fx(e,t),r=fx(e,i),{coords:s}=this.appService,a=s.toMeters(n),o=s.toMeters(r),f=s.toDisplayUnit(a),l=s.toDisplayUnit(o),d=this.appService.runtimeSnapshot.unitLabel;return`${f.toFixed(1)}${d}*${l.toFixed(1)}${d}`}getEdgeCenter(c,e){return{x:(c.x+e.x)/2,y:(c.y+e.y)/2}}calculatePerpendicularOffset(c,e,t,i=!1){const n=hx(dx(e,c)),r=i?{x:-n.y,y:n.x}:{x:n.y,y:-n.x};return{x:r.x*t,y:r.y*t}}calculateSizeTextPosition(){if(this.zonePoints.length<4)return{x:0,y:0};const c=this.calculateOutlinePoints(),[e,t,i,n]=c,{textPosition:r,textOffset:s}=this.config,a=this.appService.getApp().toFixedSize(s);let o,f;switch(r){case"top":o=this.getEdgeCenter(e,t),f=this.calculatePerpendicularOffset(t,e,a);break;case"right":o=this.getEdgeCenter(t,i),f=this.calculatePerpendicularOffset(t,i,a);break;case"bottom":o=this.getEdgeCenter(n,i),f=this.calculatePerpendicularOffset(n,i,a,!0);break;case"left":o=this.getEdgeCenter(e,n),f=this.calculatePerpendicularOffset(n,e,a);break;default:o=this.getEdgeCenter(e,t),f={x:0,y:a}}return{x:o.x+f.x,y:o.y+f.y}}calculateSizeTextRotation(){const c=this.zonePoints;if(c.length<4)return 0;const[e,t,i,n]=c,{textPosition:r}=this.config;let s,a;switch(r){case"top":default:s=e,a=t;break;case"right":s=t,a=i;break;case"bottom":s=i,a=n;break;case"left":s=n,a=e}const o=this.appService.appContainer.getMapRotationRadians();return bx(s,a,o)}calculateHorizontalScaleButtonRotation(){const c=this.zonePoints;if(c.length<4)return 0;const[,e,t]=c,i=this.appService.appContainer.getMapRotationRadians();return bx(e,t,i)+Math.PI/2}calculateVerticalScaleButtonRotation(){const c=this.zonePoints;if(c.length<4)return 0;const[,,e,t]=c,i=this.appService.appContainer.getMapRotationRadians();return bx(t,e,i)}updatePoints(c,e=!0){this.zonePoints=c,this.updateOutlineBorder(),this.moveLine&&this.updateMoveLine(),this.updateControlButtonsPosition(),this.updateSizeText(e)}updateOutlineBorder(){const c=this.calculateOutlinePoints();this.outlinePoints=c,this.outlineBorder.updatePoints(c)}updateMoveLine(){if(!this.moveLine)return;const c=this.calculateMoveLinePoints();this.moveLine.updatePoints(c)}updateSizeText(c=!0){if(this.sizeText){if(c){const c=this.calculateSizeText();this.sizeText.updateText(c)}this.updateSizeTextPosition()}}updateSizeTextPosition(){if(!this.sizeText)return;const c=this.calculateSizeTextPosition();this.sizeText.position.set(c.x,c.y);const e=this.calculateSizeTextRotation();this.sizeText.rotation=e}updateControlButtonsPosition(){if(!this.deleteButton||!this.scaleButton||!this.moveButton)return;const c=this.calculateOutlinePoints();if(c.length<4)return;const e=this.calculateMoveButtonPosition(),t=[{button:this.deleteButton,point:c[zw]},{button:this.scaleButton,point:c[Uw]},{button:this.moveButton,point:e}];if(this.rotateButton&&t.push({button:this.rotateButton,point:c[Gw]}),this.horizontalScaleButton){const e=c[Gw],i=c[Uw],n=vx(e,i,0);t.push({button:this.horizontalScaleButton,point:n})}if(this.verticalScaleButton){const e=c[Uw],i=c[Vw],n=this.getEdgeCenter(e,i);t.push({button:this.verticalScaleButton,point:n})}t.forEach(({button:c,point:e})=>c.position.set(e.x,e.y)),this.horizontalScaleButton&&(this.horizontalScaleButton.rotation=this.calculateHorizontalScaleButtonRotation()),this.verticalScaleButton&&(this.verticalScaleButton.rotation=this.calculateVerticalScaleButtonRotation()),this.scaleButton&&this.scaleButton.visible&&(this.scaleButton.rotation=this.calculateVerticalScaleButtonRotation())}setupClickHandler(){this.clickHandler=new dw(this,{onClick:()=>{var c,e;null==(e=(c=this.events).onClick)||e.call(c)},stopPropagation:!1})}registerScaleListener(){this.appService.emitter.on("antiScale",this.throttledUpdateOutline),this.appService.emitter.on("mapRotationUpdate",this.throttledUpdateOutline)}updateOutlineForScale(){(this.outlineBorder.visible||this.controlButtons.visible)&&(this.updateOutlineBorder(),this.moveLine&&this.updateMoveLine(),this.updateControlButtonsPosition(),this.updateSizeTextPosition())}initializeScaleCache(){if(0===this.initialZonePoints.length&&(this.initialZonePoints=this.zonePoints.map(c=>__spreadValues({},c))),this.initialZonePoints.length<4)return;const c=__spreadValues({},this.initialZonePoints[Uw]);if(!c)return;const e=zw,{x:t,y:i}=this.initialZonePoints[e],[,n,,r]=this.initialZonePoints,s={x:t,y:i},a=dx(s,n),o=dx(s,r),f=lx(a),l=lx(o);0!==f&&0!==l&&(this.scaleCache={fixedPoint:s,edge1:a,edge2:o,edge1Len:f,edge2Len:l,initialButtonPosition:c})}sizeConstraintPixels(){const{coords:c}=this.appService,e=(e,t)=>({minSizePixels:c.toPixels(e),maxSizePixels:null!=t?c.toPixels(t):void 0});if(this.sizeConstraintPerEdge){const{edge1:c,edge2:t}=this.sizeConstraintPerEdge();return{edge1:e(c.min,c.max),edge2:e(t.min,t.max)}}const t=e(this.minSize,this.maxSize);return{edge1:t,edge2:t}}handleInternalScaleMove(c,e){if(4!==this.initialZonePoints.length||!this.scaleCache)return null;const{edge1:t,edge2:i}=this.sizeConstraintPixels(),{fixedPoint:n,edge1:r,edge2:s,edge1Len:a,edge2Len:o,initialButtonPosition:f}=this.scaleCache,l={x:f.x+c,y:f.y+e},d=dx(n,l);let h=ox(d,r,a,t.minSizePixels,t.maxSizePixels),u=ox(d,s,o,i.minSizePixels,i.maxSizePixels);if("ratioLocked"===this.config.scaleMode){const c=Math.min(h,u);h=c,u=c}return this.calculatePointsFromScale(n,r,s,h,u)}resetScaleState(){this.scaleCache=null}handleInternalHorizontalScaleMove(c,e){if(4!==this.initialZonePoints.length||!this.scaleCache||!this.horizontalScaleInitialPosition)return null;const{fixedPoint:t,edge1:i,edge2:n,edge1Len:r}=this.scaleCache,{edge1:s}=this.sizeConstraintPixels(),a={x:this.horizontalScaleInitialPosition.x+c,y:this.horizontalScaleInitialPosition.y+e},o=dx(t,a),f=ox(o,i,r,s.minSizePixels,s.maxSizePixels);return this.calculatePointsFromScale(t,i,n,f,1)}handleInternalVerticalScaleMove(c,e){if(4!==this.initialZonePoints.length||!this.scaleCache||!this.verticalScaleInitialPosition)return null;const{fixedPoint:t,edge1:i,edge2:n,edge2Len:r}=this.scaleCache,{edge2:s}=this.sizeConstraintPixels(),a={x:this.verticalScaleInitialPosition.x+c,y:this.verticalScaleInitialPosition.y+e},o=dx(t,a),f=ox(o,n,r,s.minSizePixels,s.maxSizePixels);return this.calculatePointsFromScale(t,i,n,1,f)}calculatePointsFromScale(c,e,t,i,n){const{x:r,y:s}=c;return[c,{x:r+e.x*i,y:s+e.y*i},{x:r+e.x*i+t.x*n,y:s+e.y*i+t.y*n},{x:r+t.x*n,y:s+t.y*n}]}initializeRotationCache(c){this.zonePoints.length<3||(this.rotationCache={rotationCenter:c,initialPoints:this.zonePoints.map(c=>__spreadValues({},c)),totalAngle:0})}handleInternalRotationMove(c){if(!this.rotationCache||this.rotationCache.initialPoints.length<3)return null;const{rotationCenter:e,initialPoints:t}=this.rotationCache;this.rotationCache.totalAngle+=c;return _x(t,e,this.rotationCache.totalAngle)}resetRotationState(){this.rotationCache=null}calculateRotationCenter(){return 0===this.zonePoints.length?{x:0,y:0}:rx(this.zonePoints)}updateEditState({showRotateButton:c=!1,showScaleButton:e=!1,showRadialScaleButton:t=!1,showDeleteButton:i=!1,showMoveButton:n=!1,showBorder:r=!1,showSizeText:s=!1,borderStyle:a}){this.rotateButton&&(this.rotateButton.visible=c),this.scaleButton&&(this.scaleButton.visible=e),this.horizontalScaleButton&&(this.horizontalScaleButton.visible=t),this.verticalScaleButton&&(this.verticalScaleButton.visible=t),this.deleteButton&&(this.deleteButton.visible=i),this.moveButton&&(this.moveButton.visible=n);const o=c||e||t||i||n;this.controlButtons.visible=o,!o&&this.getOperationState().hasAnyOperation&&this.stopAllOperations(),this.outlineBorder.visible=r,this.moveLine&&(this.moveLine.visible=n),this.sizeText&&(this.sizeText.visible=s),r&&(this.updateOutlineBorder(),o&&(this.moveLine&&n&&this.updateMoveLine(),this.updateControlButtonsPosition()),s&&this.updateSizeTextPosition()),a&&this.outlineBorder.updateStyle({isDashed:a.isDashed,dashArray:a.dashArray})}getOperationState(){var c,e,t;const i=(null==(c=this.scaleButton)?void 0:c.isCurrentlyScaling())||!1,n=(null==(e=this.rotateButton)?void 0:e.isCurrentlyRotating())||!1,r=(null==(t=this.moveButton)?void 0:t.isCurrentlyMoving())||!1;return{isDragging:!1,isScaling:i,isRotating:n,isMoving:r,hasAnyOperation:i||n||r}}stopAllOperations(){var c,e,t;null==(c=this.scaleButton)||c.stopScaling(),null==(e=this.rotateButton)||e.stopRotation(),null==(t=this.moveButton)||t.stopMoving()}getControlButtonsContainer(){return this.controlButtons}getMoveButton(){return this.moveButton}calculateEdgeMidpoint(c,e){const t=this.calculateOutlinePoints();if(t.length<4)return{x:0,y:0};const i=t[c],n=t[e];return{x:(i.x+n.x)/2,y:(i.y+n.y)/2}}destroy(){var c,e,t,i,n,r,s,a,o,f,l;this.appService.emitter.off("antiScale",this.throttledUpdateOutline),this.appService.emitter.off("mapRotationUpdate",this.throttledUpdateOutline),null==(c=this.clickHandler)||c.destroy(),this.clickHandler=null,null==(e=this.deleteButton)||e.destroy(),null==(t=this.rotateButton)||t.destroy(),null==(i=this.scaleButton)||i.destroy(),null==(n=this.moveButton)||n.destroy(),null==(r=this.horizontalScaleButton)||r.destroy(),null==(s=this.verticalScaleButton)||s.destroy(),this.deleteButton=null,this.rotateButton=null,this.scaleButton=null,this.moveButton=null,this.horizontalScaleButton=null,this.verticalScaleButton=null,null==(a=this.outlineBorder)||a.destroy(),null==(o=this.moveLine)||o.destroy(),null==(f=this.sizeText)||f.destroy(),null==(l=this.controlButtons)||l.destroy(),super.destroy()}}function Ww(c,e){return{coords:c.coords,editControls:c.editControlManager,getZoneConfig:e=>function(c,e){var t;const i=c.getConfig();if(dS(e)){const c=i.controls[e];if(c)return c}else{const c=null==(t=i.customZoneTypes)?void 0:t[e];if(c)return c}return hS.cleanZone}(c,e),controlsConfig:c.getConfig().controls,makeControlFill:e=>new Mw(c,e),makeBorder:e=>new Ew(c,e),render:{request:e=>c.getApp().requestRender(e,!0),stop:e=>c.getApp().stopRender(e)},events:e}}class Hw extends xe{constructor(c){super(),__publicField(this,"zoneData"),__publicField(this,"zoneType"),__publicField(this,"zoneConfig"),__publicField(this,"controlsConfig"),__publicField(this,"zoneEvents"),__publicField(this,"deps"),__publicField(this,"controlFill"),__publicField(this,"zoneBorder"),__publicField(this,"editableShape"),__publicField(this,"clickHandler",null),__publicField(this,"initialZonePoints",[]),__publicField(this,"dragStartPosition",null),__publicField(this,"editing",!1),__publicField(this,"resolvedMaxSizeCache",null),__publicField(this,"handleDragStart",()=>{this.editing&&(this.initialZonePoints=this.zoneData.points.map(c=>__spreadValues({},c)),this.dragStartPosition=this.controlFill.getDragStartPosition(),this.deps.render.request("zone-drag"))}),__publicField(this,"handleDragMove",c=>{if(!this.editing||0===this.initialZonePoints.length||!this.dragStartPosition)return;const e=this.parent.toLocal(c.global),t=e.x-this.dragStartPosition.x,i=e.y-this.dragStartPosition.y;this.applyTranslation(t,i)}),__publicField(this,"handleDragEnd",()=>{var c,e;this.initialZonePoints=[],this.dragStartPosition=null,this.deps.render.stop("zone-drag"),null==(e=(c=this.zoneEvents).onUpdate)||e.call(c,this.getZoneData())}),__publicField(this,"handleRotationStart",()=>{this.deps.render.request("zone-rotate")}),__publicField(this,"handleRotationMove",c=>{c&&(this.zoneData.points=c,this.drawZone(!1))}),__publicField(this,"handleScaleStart",()=>{this.deps.render.request("zone-scale")}),__publicField(this,"handleScaleMove",c=>{c&&(this.zoneData.points=c,this.drawZone())}),__publicField(this,"handleMoveStart",()=>{this.initialZonePoints=this.zoneData.points.map(c=>__spreadValues({},c)),this.deps.render.request("zone-move")}),__publicField(this,"handleMove",c=>{var e;if(!this.editing||0===this.initialZonePoints.length)return;const t=this.parent.toLocal(c.global),i=null==(e=this.editableShape.getMoveButton())?void 0:e.getDragStartPosition();if(!i)return;const n=t.x-i.x,r=t.y-i.y;this.applyTranslation(n,r)}),__publicField(this,"handleMoveEnd",()=>{var c,e;this.initialZonePoints=[],this.deps.render.stop("zone-move"),null==(e=(c=this.zoneEvents).onUpdate)||e.call(c,this.getZoneData())}),__publicField(this,"handleTransformEnd",()=>{var c,e;this.initialZonePoints=[],this.deps.render.stop("zone-rotate"),this.deps.render.stop("zone-scale"),null==(e=(c=this.zoneEvents).onUpdate)||e.call(c,this.getZoneData())}),__publicField(this,"handleDelete",()=>{var c,e;null==(e=(c=this.zoneEvents).onRemove)||e.call(c,this.zoneData.id)}),__publicField(this,"handleClick",()=>{var c,e;this.editing||null==(e=null==(c=this.zoneEvents)?void 0:c.onClick)||e.call(c,this.getZoneData())});const{deps:e,zoneData:t,zoneType:i}=c;this.deps=e,this.zoneType=i,this.zoneEvents=e.events,this.zoneConfig=e.getZoneConfig(i),this.controlsConfig=e.controlsConfig;const n=this.validateZoneShape(t.points);this.zoneData=__spreadProps(__spreadValues({},t),{points:n}),this.initializeComponents(),this.createEditControlLayer(),this.setupClickHandler(),this.applyEditing()}getResolvedMaxSize(){const c=this.zoneConfig.maxSize;if(this.resolvedMaxSizeCache&&this.resolvedMaxSizeCache.key===c)return this.resolvedMaxSizeCache.value;const e=US(this.zoneConfig.minSize,c,this.zoneType);return this.resolvedMaxSizeCache={key:c,value:e},e}validateZoneShape(c){if(c.length<4)return c;const e=this.getResolvedMaxSize();return this.deps.coords.validateShape(N_(c),{minSize:this.zoneConfig.minSize,maxSize:null!=e?e:void 0})}initializeComponents(){this.controlFill=this.createControlFill(),this.addChild(this.controlFill),this.zoneBorder=this.createBorder(),this.addChild(this.zoneBorder)}createControlFill(){return this.deps.makeControlFill({points:this.zoneData.points,fillColor:this.zoneConfig.fillColor,enableInteraction:this.editing,onDragStart:this.handleDragStart,onDragMove:this.handleDragMove,onDragEnd:this.handleDragEnd})}createBorder(){const c=this.editing?this.zoneConfig.editing:this.zoneConfig.normal;return this.deps.makeBorder({points:this.zoneData.points,closePath:!0,style:{color:this.zoneConfig.strokeColor,width:this.zoneConfig.strokeWidth,isDashed:c.isDashed,dashArray:c.dashArray}})}createEditControlLayer(){const c=(e=this.zoneConfig,t=this.controlsConfig,i={showRotateButton:this.zoneConfig.showRotateButton,showRadialScaleButton:!1,rotateMode:"free"},{outlineStrokeColor:String(e.outlineStrokeColor),outlineStrokeWidth:e.outlineStrokeWidth,outlineDashed:e.outlineDashed,outlineDashArray:e.outlineDashArray,outlineFillColor:e.outlineFillColor?String(e.outlineFillColor):void 0,outlineOffset:e.outlineOffset,iconWrapperFillColor:String(e.iconWrapperFillColor),deleteIconWrapperFillColor:"deleteIconWrapperFillColor"in e&&void 0!==e.deleteIconWrapperFillColor?String(e.deleteIconWrapperFillColor):void 0,showRotateButton:null!=(n=null==i?void 0:i.showRotateButton)?n:e.showRotateButton,showScaleButton:null==(r=null==i?void 0:i.showScaleButton)||r,showRadialScaleButton:null==i?void 0:i.showRadialScaleButton,showDeleteButton:null==(s=null==i?void 0:i.showDeleteButton)||s,showMoveButton:null==(a=null==i?void 0:i.showMoveButton)||a,rotateMode:null==i?void 0:i.rotateMode,scaleMode:"free",textColor:String(e.textColor),textPosition:e.textPosition,textOffset:e.textOffset,moveButtonOffset:t.moveButtonOffset,textFontSize:t.textFontSize,textFontFamily:t.textFontFamily,textFontWeight:t.textFontWeight});var e,t,i,n,r,s,a;this.editableShape=new Rw({editControls:this.deps.editControls});const o=this.getResolvedMaxSize(),f={config:c,zonePoints:this.zoneData.points,minSize:this.zoneConfig.minSize,maxSize:null!=o?o:void 0,contentLayer:KS,events:{onRemove:this.handleDelete,onRotateStart:this.handleRotationStart,onRotateMove:this.handleRotationMove,onRotateEnd:this.handleTransformEnd,onScaleStart:this.handleScaleStart,onScaleMove:this.handleScaleMove,onScaleEnd:this.handleTransformEnd,onMoveStart:this.handleMoveStart,onMoveMove:this.handleMove,onMoveEnd:this.handleMoveEnd,onClick:this.handleClick}};this.editableShape.attach(this,{id:this.zoneData.id,topology:"quad",layerOptions:f,editingState:{showRotateButton:this.zoneConfig.showRotateButton,showScaleButton:!0,showRadialScaleButton:!1,showDeleteButton:!0,showMoveButton:!0,showBorder:!0,showSizeText:!0,borderStyle:this.zoneConfig.editing},idleState:{showRotateButton:!1,showScaleButton:!1,showRadialScaleButton:!1,showDeleteButton:!1,showMoveButton:!1,showBorder:!1,showSizeText:!1}})}applyTranslation(c,e){this.zoneData.points=this.initialZonePoints.map(t=>({x:t.x+c,y:t.y+e})),this.drawZone()}setupClickHandler(){this.interactiveChildren=!0,this.clickHandler=new dw(this,{onClick:this.handleClick,stopPropagation:!1})}drawZone(c=!0){const{points:e}=this.zoneData;e.length<4||(this.controlFill.updatePoints(e),this.zoneBorder.updatePoints(e),this.editableShape.updatePoints(e,c))}applyEditing(){this.controlFill.setInteractionEnabled(this.editing),this.updateBorderStyle(this.editing?this.zoneConfig.editing:this.zoneConfig.normal),this.editableShape.setEditing(this.editing),this.zIndex=this.editing?1e3:0}updateBorderStyle(c){this.zoneBorder.updateStyle({isDashed:c.isDashed,dashArray:c.dashArray})}setEditing(c){this.editing!==c&&(this.editing=c,this.applyEditing())}isEditing(){return this.editing}updateZoneData(c){const e=this.validateZoneShape(c.points);this.zoneData=__spreadProps(__spreadValues({},c),{points:e}),this.drawZone()}getZoneData(){return __spreadValues({},this.zoneData)}refreshDisplay(){this.drawZone()}destroy(){var c,e,t;this.editableShape.detach(),null==(c=this.clickHandler)||c.destroy(),this.clickHandler=null,null==(e=this.zoneBorder)||e.destroy(),null==(t=this.controlFill)||t.destroy(),super.destroy()}}class jw extends Hw{constructor(c,e){super({deps:Ww(c,{onRemove:e=>{var t,i;null==(i=null==(t=c.events)?void 0:t.onRemoveForbiddenSweepZone)||i.call(t,e)},onUpdate:e=>{var t,i;null==(i=null==(t=c.events)?void 0:t.onUpdateForbiddenSweepZone)||i.call(t,e)},onClick:e=>{var t,i;null==(i=null==(t=c.events)?void 0:t.onClickForbiddenSweepZone)||i.call(t,e)}}),zoneData:e.zoneData,zoneType:"forbiddenSweepZone"})}static create(c,e){return new jw(c,{zoneData:e})}}class Yw extends Hw{constructor(c,e){super({deps:Ww(c,{onRemove:e=>{var t,i;null==(i=null==(t=c.events)?void 0:t.onRemoveForbiddenMopZone)||i.call(t,e)},onUpdate:e=>{var t,i;null==(i=null==(t=c.events)?void 0:t.onUpdateForbiddenMopZone)||i.call(t,e)},onClick:e=>{var t,i;null==(i=null==(t=c.events)?void 0:t.onClickForbiddenMopZone)||i.call(t,e)}}),zoneData:e.zoneData,zoneType:"forbiddenMopZone"})}static create(c,e){return new Yw(c,{zoneData:e})}}class Xw extends Hw{constructor(c,e){super({deps:Ww(c,{onRemove:e=>{var t,i;null==(i=null==(t=c.events)?void 0:t.onRemoveCleanZone)||i.call(t,e)},onUpdate:e=>{var t,i;null==(i=null==(t=c.events)?void 0:t.onUpdateCleanZone)||i.call(t,e)},onClick:e=>{var t,i;null==(i=null==(t=c.events)?void 0:t.onClickCleanZone)||i.call(t,e)}}),zoneData:e.zoneData,zoneType:"cleanZone"})}static create(c,e){return new Xw(c,{zoneData:e})}}class Zw extends _o{constructor(c,e){super(),__publicField(this,"lineOptions"),__publicField(this,"strokeContext",null),__publicField(this,"drawDashLine",()=>{const{start:c,end:e,style:t}=this.lineOptions;this.clear(),this.strokeContext&&this.strokeContext.destroy();const i=this.appService;this.strokeContext=new pa;const n=i.getApp().toFixedSize(t.width);this.strokeContext.setStrokeStyle({color:t.color,width:n}),this.drawDashedLineToContext(this.strokeContext,c.x,c.y,e.x,e.y,t.dashArray[0],t.dashArray[1]),this.strokeContext.stroke(),this.context=this.strokeContext}),this.appService=c,this.lineOptions=__spreadValues({},e),this.eventMode="static",this.drawDashLine(),this.setupAntiScaleListener()}setupAntiScaleListener(){this.appService.emitter.on("antiScale",this.drawDashLine)}drawDashedLineToContext(c,e,t,i,n,r,s){const a=i-e,o=n-t,f=Math.sqrt(a*a+o*o);if(0===f)return;const l=this.appService,d=l.getApp().toFixedSize(r),h=d+l.getApp().toFixedSize(s),u=f/h,p=Math.round(u);if(0===p)return c.moveTo(e,t),void c.lineTo(i,n);const g=f/p,m=g*(d/h),b=a/f,v=o/f;for(let y=0;y<p;y++){const i=y*g,n=i+m;if(i>=f)break;const r=Math.min(n,f),s=e+i*b,a=t+i*v,o=e+r*b,l=t+r*v;c.moveTo(s,a),c.lineTo(o,l)}}updatePoints(c,e){this.lineOptions.start=c,this.lineOptions.end=e,this.drawDashLine()}updateStyle(c){this.lineOptions.style=__spreadValues(__spreadValues({},this.lineOptions.style),c),this.drawDashLine()}getOptions(){return __spreadValues({},this.lineOptions)}destroy(){this.appService.emitter.off("antiScale",this.drawDashLine),this.strokeContext&&this.strokeContext.destroy(),super.destroy()}}const qw=class c extends xe{constructor(e){super(),__publicField(this,"wallData"),__publicField(this,"wallConfig"),__publicField(this,"controlsConfig"),__publicField(this,"wallEvents"),__publicField(this,"appService"),__publicField(this,"wallLine"),__publicField(this,"outlineBorder"),__publicField(this,"moveLine"),__publicField(this,"lengthText"),__publicField(this,"controlButtons"),__publicField(this,"removeButton",null),__publicField(this,"scaleButton",null),__publicField(this,"moveButton",null),__publicField(this,"initialWallPoints",[]),__publicField(this,"initialButtonPosition",null),__publicField(this,"isDragging",!1),__publicField(this,"dragStartPosition",null),__publicField(this,"gestureSession",null),__publicField(this,"resolvedMaxWidthCache",null),__publicField(this,"throttledUpdateOutline"),__publicField(this,"throttledHandleScaleChange"),__publicField(this,"wallLineClickHandler",null),__publicField(this,"handleRemove",()=>{var c,e;null==(e=(c=this.wallEvents).onRemove)||e.call(c,this.wallData.id)}),__publicField(this,"initializeOperation",()=>{this.initialWallPoints=this.wallData.points.map(c=>__spreadValues({},c))}),__publicField(this,"finalizeOperation",()=>{var c,e;this.initialWallPoints=[],null==(e=(c=this.wallEvents).onUpdate)||e.call(c,this.getWallData())}),__publicField(this,"handleScaleStart",()=>{this.initializeOperation();const e=this.calculateOutlinePoints();e.length>c.BUTTON_INDICES.SCALE&&(this.initialButtonPosition=__spreadValues({},e[c.BUTTON_INDICES.SCALE])),this.appService.getApp().requestRender("virtualwall-scale",!0)}),__publicField(this,"handleScaleMove",({deltaX:c,deltaY:e})=>{if(0===this.initialWallPoints.length||!this.initialButtonPosition)return;const t={x:this.initialButtonPosition.x+c,y:this.initialButtonPosition.y+e};this.applyScaleAndRotation(t)}),__publicField(this,"handleScaleEnd",()=>{this.finalizeOperation(),this.initialButtonPosition=null,this.appService.getApp().stopRender("virtualwall-scale")}),__publicField(this,"handleMoveStart",()=>{this.initializeOperation(),this.appService.getApp().requestRender("virtualwall-move",!0)}),__publicField(this,"handleMove",c=>{var e;if(0===this.initialWallPoints.length)return;const t=this.parent.toLocal(c.global),i=this.getDragStartPosition()||(null==(e=this.moveButton)?void 0:e.getDragStartPosition());if(!i)return;const n=t.x-i.x,r=t.y-i.y;this.applyTranslation(n,r)}),__publicField(this,"handleMoveEnd",()=>{this.finalizeOperation(),this.appService.getApp().stopRender("virtualwall-move")}),__publicField(this,"handleScaleChange",()=>{this.redrawSolidLine(),this.setupWallLineHitArea()}),__publicField(this,"handleWallLinePointerDown",c=>{this.isEditingEnabled()&&(c.stopPropagation(),this.startDragging(c))}),__publicField(this,"handleDragPointerMove",c=>{this.isDragging&&this.dragStartPosition&&this.handleMove(c)}),__publicField(this,"handleDragPointerUp",()=>{this.gestureSession=null,this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null,this.appService.getApp().stopRender("virtualwall-drag"),this.finalizeOperation())});const{appService:t,wallData:i,events:n={}}=e;this.appService=t,this.wallEvents=n,this.wallConfig=this.appService.controlsConfig.virtualWall,this.controlsConfig=this.appService.controlsConfig,this.wallData=__spreadProps(__spreadValues({},i),{points:this.validateAndCorrectWallLength(i.points)}),this.throttledHandleScaleChange=P_(this.handleScaleChange.bind(this),30,{leading:!0,trailing:!0}),this.throttledUpdateOutline=P_(this.updateOutlineForScale.bind(this),30,{leading:!0,trailing:!0}),this.initializeComponents(),this.updateEditState(),this.registerScaleListener()}registerScaleListener(){this.appService.emitter.on("antiScale",this.throttledUpdateOutline),this.appService.emitter.on("antiScale",this.throttledHandleScaleChange),this.appService.emitter.on("mapRotationUpdate",this.throttledUpdateOutline)}getResolvedMaxWidth(){const c=this.wallConfig.maxWidth;if(this.resolvedMaxWidthCache&&this.resolvedMaxWidthCache.key===c)return this.resolvedMaxWidthCache.value;const e=US(this.wallConfig.minWidth,c,"virtualWall");return this.resolvedMaxWidthCache={key:c,value:e},e}validateAndCorrectWallLength(c){if(c.length<2)return c;const[e,t]=c,{coords:i}=this.appService,n=i.toPixels(this.wallConfig.minWidth),r=this.getResolvedMaxWidth(),s=null!=r?i.toPixels(r):void 0,a=fx(e,t);if(!(a<n)&&!(null!=s&&a>s))return c;if(0===a)return[e,{x:e.x+n,y:e.y}];const o=hx(dx(e,t));let f=a;return null!=s&&(f=Math.min(f,s)),f=Math.max(f,n),[e,{x:e.x+o.x*f,y:e.y+o.y*f}]}isEditingEnabled(){return this.appService.runtimeSnapshot.editingVirtualWallIds.includes(this.wallData.id)}updateOutlineForScale(){this.isEditingEnabled()&&(this.updateOutlineComponents(),this.updateControlButtonsPosition(),this.updateLengthTextPosition())}initializeComponents(){this.outlineBorder=this.createOutlineBorder(),this.addChild(this.outlineBorder),this.createWallLine(!1),this.addChild(this.wallLine),this.lengthText=this.createLengthText(),this.addChild(this.lengthText),this.moveLine=this.createMoveLine(),this.addChild(this.moveLine),this.controlButtons=new xe,this.controlButtons.visible=this.isEditingEnabled(),this.addChild(this.controlButtons),this.createControlButtons()}createWallLine(c=!0){const{points:e}=this.wallData;if(e.length<2)return;const{lineWidth:t,lineColor:i,editing:n,normal:r}=this.wallConfig,s=this.isEditingEnabled()?n:r;s.isDashed?this.wallLine=new Zw(this.appService,{start:e[0],end:e[1],style:{color:i.toString(),width:t,dashArray:s.dashArray}}):this.wallLine=this.createSolidLine(e[0],e[1],t,i.toString()),c&&this.setupWallLineInteraction()}createLengthText(){const c=this.calculateWallLengthInMeters(),e=this.formatLengthText(c),t=new kw(this.appService,{text:e,style:{fontSize:this.controlsConfig.textFontSize,fontFamily:this.controlsConfig.textFontFamily,fontWeight:this.controlsConfig.textFontWeight,fill:this.wallConfig.textColor,align:"center"}});t.anchor.set(.5);const i=this.calculateTextPosition();t.position.set(i.x,i.y);const n=this.calculateTextRotation();return t.rotation=n,t.eventMode="none",t}calculateWallLengthInMeters(){const{points:c}=this.wallData;if(c.length<2)return 0;const e=fx(c[0],c[1]);return this.appService.coords.toMeters(e)}formatLengthText(c){const e=this.appService.coords.toDisplayUnit(c),t=this.appService.runtimeSnapshot.unitLabel;return`${e.toFixed(1)}${t}`}calculateTextPosition(){const{points:c}=this.wallData;if(c.length<2)return{x:0,y:0};const[e,t]=c,i=this.appService.getApp().toFixedSize(this.wallConfig.textOffset);return vx(e,t,i)}calculateTextRotation(){const{points:c}=this.wallData;if(c.length<2)return 0;const[e,t]=c,i=this.appService.appContainer.getMapRotationRadians();return bx(e,t,i)}getOutlineStyle(){return{color:this.wallConfig.outlineStrokeColor,width:this.wallConfig.outlineStrokeWidth,isDashed:this.wallConfig.outlineDashed,dashArray:this.wallConfig.outlineDashArray,fillColor:this.wallConfig.outlineFillColor}}createOutlineBorder(){const c=this.calculateOutlinePoints();return new Ew(this.appService,{points:c,closePath:!0,style:this.getOutlineStyle()})}createMoveLine(){const c=this.calculateOutlinePoints(),e=this.calculateMoveLinePoints(c);return new Ew(this.appService,{points:e,closePath:!1,style:this.getOutlineStyle()})}calculateOutlinePoints(c){const e=c||this.wallData.points;if(e.length<2)return e;const t=this.appService.getApp().toFixedSize(this.wallConfig.outlineOffset),i=xx(e[0],e[1],t);return[i[3],i[2],i[1],i[0]]}calculateMoveLinePoints(e){if(e.length<4)return[];const{MOVE:t}=c.BUTTON_INDICES;return[e[t],this.calculateMoveButtonPosition()]}calculateMoveButtonPosition(){const{moveButtonOffset:e}=this.controlsConfig,t=this.calculateOutlinePoints();if(t.length<4)return{x:0,y:0};const{MOVE:i}=c.BUTTON_INDICES,n=t[i],r=t[(i+3)%4],s=t[(i+1)%4],a=this.appService.getApp().toFixedSize(e);return Cx(n,s,r,a)}createControlButtons(){const e=this.calculateOutlinePoints();if(e.length<4)return;const{REMOVE:t,SCALE:i}=c.BUTTON_INDICES;this.removeButton=new Dw(this.appService,{iconAlias:"deleteIcon",backgroundColor:this.wallConfig.iconWrapperFillColor,onClick:this.handleRemove}),this.removeButton.position.set(e[t].x,e[t].y),this.scaleButton=new Lw(this.appService,{iconAlias:"scaleIcon",backgroundColor:this.wallConfig.iconWrapperFillColor,getTargetPoints:()=>this.calculateOutlinePoints(),getButtonIndex:()=>i,onScaleStart:this.handleScaleStart,onScaleMove:this.handleScaleMove,onScaleEnd:this.handleScaleEnd}),this.scaleButton.position.set(e[i].x,e[i].y);const n=this.calculateMoveButtonPosition();this.moveButton=new Bw(this.appService,{iconAlias:"moveIcon",backgroundColor:this.wallConfig.iconWrapperFillColor,onMoveStart:this.handleMoveStart,onMoveMove:this.handleMove,onMoveEnd:this.handleMoveEnd}),this.moveButton.position.set(n.x,n.y),this.controlButtons.addChild(this.removeButton),this.controlButtons.addChild(this.scaleButton),this.controlButtons.addChild(this.moveButton)}applyScaleAndRotation(e){if(this.initialWallPoints.length<2)return;const[t,i]=this.initialWallPoints,n=t,r=this.calculateOutlinePoints(this.initialWallPoints);if(r.length<4)return;const s=r[c.BUTTON_INDICES.SCALE],a=dx(i,s),o={x:e.x-a.x,y:e.y-a.y},f=dx(n,o),l=fx(n,o),{coords:d}=this.appService,h=d.toPixels(this.wallConfig.minWidth),u=this.getResolvedMaxWidth(),p=null!=u?d.toPixels(u):void 0;let g;if(l<h)if(0===l)g={x:n.x+h,y:n.y};else{const c=hx(f);g={x:n.x+c.x*h,y:n.y+c.y*h}}else if(null!=p&&l>p){const c=hx(f);g={x:n.x+c.x*p,y:n.y+c.y*p}}else g=o;this.wallData.points=[n,g],this.drawVirtualWall(),this.updateControlButtonsPosition()}applyTranslation(c,e){this.wallData.points=this.initialWallPoints.map(t=>({x:t.x+c,y:t.y+e})),this.drawVirtualWall(),this.updateControlButtonsPosition()}drawVirtualWall(){this.updateWallLine(),this.updateLengthText(),this.updateOutlineComponents()}updateWallLine(){const{points:c}=this.wallData;c.length<2||(this.wallLine instanceof Zw?this.wallLine.updatePoints(c[0],c[1]):this.redrawSolidLine(),this.setupWallLineHitArea())}updateLengthText(){if(!this.lengthText)return;const c=this.calculateWallLengthInMeters(),e=this.formatLengthText(c);this.lengthText.updateText(e),this.updateLengthTextPosition()}updateLengthTextPosition(){if(!this.lengthText)return;const c=this.calculateTextPosition();this.lengthText.position.set(c.x,c.y);const e=this.calculateTextRotation();this.lengthText.rotation=e}updateOutlineComponents(){const c=this.calculateOutlinePoints();this.outlineBorder.updatePoints(c);const e=this.calculateMoveLinePoints(c);this.moveLine.updatePoints(e)}updateControlButtonsPosition(){if(!this.removeButton||!this.scaleButton||!this.moveButton)return;const e=this.calculateOutlinePoints();if(e.length<4)return;const{REMOVE:t,SCALE:i}=c.BUTTON_INDICES,n=this.calculateMoveButtonPosition();this.removeButton.position.set(e[t].x,e[t].y),this.scaleButton.position.set(e[i].x,e[i].y),this.moveButton.position.set(n.x,n.y)}updateEditState(){const c=this.isEditingEnabled();this.controlButtons.visible=c,this.outlineBorder.visible=c,this.moveLine.visible=c,this.lengthText&&(this.lengthText.visible=c),c&&(this.updateOutlineComponents(),this.updateControlButtonsPosition(),this.updateLengthTextPosition()),this.updateWallLineStyle(),this.setupWallLineInteraction(),this.zIndex=c?1e3:0}createSolidLine(c,e,t,i){const n=new _o;n.eventMode="static";const r=this.appService.getApp().toFixedSize(t);return n.moveTo(c.x,c.y),n.lineTo(e.x,e.y),n.stroke({color:i,width:r}),n}updateWallLineStyle(){const c=this.isEditingEnabled(),{editing:e,normal:t,lineWidth:i,lineColor:n}=this.wallConfig,r=c?e:t;this.wallLine instanceof Zw!==r.isDashed?(this.removeChild(this.wallLine),this.wallLine.destroy(),this.createWallLine(!1),this.addChild(this.wallLine)):this.wallLine instanceof Zw?this.wallLine.updateStyle({color:n.toString(),width:i,dashArray:r.dashArray}):this.redrawSolidLine()}redrawSolidLine(){const c=this.appService;if(!this.wallLine||this.wallLine instanceof Zw)return;const{points:e}=this.wallData;if(e.length<2)return;const{lineWidth:t,lineColor:i}=this.wallConfig,n=c.getApp().toFixedSize(t);this.wallLine.clear(),this.wallLine.setStrokeStyle({color:i.toString(),width:n}).moveTo(e[0].x,e[0].y).lineTo(e[1].x,e[1].y).stroke()}setupWallLineInteraction(){var c;if(!this.wallLine)return;this.setupWallLineHitArea();const e=this.isEditingEnabled();null==(c=this.wallLineClickHandler)||c.destroy(),this.wallLineClickHandler=null,this.wallLine.off("pointerdown",this.handleWallLinePointerDown),e?this.wallLine.on("pointerdown",this.handleWallLinePointerDown):this.wallLineClickHandler=new dw(this.wallLine,{onClick:()=>{var c,e;this.appService.gestureController.suppressMapClick(),null==(e=null==(c=this.wallEvents)?void 0:c.onClick)||e.call(c,this.getWallData())},stopPropagation:!1})}startDragging(c){const e=this.appService;this.isDragging=!0;const t=this.parent.toLocal(c.global);this.dragStartPosition={x:t.x,y:t.y},this.initializeOperation(),e.getApp().requestRender("virtualwall-drag",!0),this.gestureSession=this.appService.gestureController.hijack(c),this.gestureSession.onMove(this.handleDragPointerMove),this.gestureSession.onEnd(this.handleDragPointerUp)}getDragStartPosition(){return this.dragStartPosition}setupWallLineHitArea(){if(!this.wallLine)return;const{points:c}=this.wallData;if(c.length<2)return;const{hitAreaThickness:e}=this.wallConfig,t=this.appService.getApp().toFixedSize(e),i=wx(c[0],c[1],t);if(0===i.length)return;const n=new Vn(i);this.wallLine.hitArea=n}getWallData(){return __spreadValues({},this.wallData)}updateWallData(c){this.wallData=__spreadProps(__spreadValues({},c),{points:this.validateAndCorrectWallLength(c.points)}),this.drawVirtualWall(),this.updateControlButtonsPosition()}updateEditingState(){this.updateEditState()}refreshDisplay(){this.drawVirtualWall()}destroy(){var c,e,t,i,n,r,s,a,o,f;this.appService.emitter.off("antiScale",this.throttledUpdateOutline),this.appService.emitter.off("antiScale",this.throttledHandleScaleChange),this.appService.emitter.off("mapRotationUpdate",this.throttledUpdateOutline),this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null),null==(c=this.gestureSession)||c.cancel(),this.gestureSession=null,this.wallLine&&this.wallLine.off("pointerdown",this.handleWallLinePointerDown),null==(e=this.wallLineClickHandler)||e.destroy(),this.wallLineClickHandler=null,null==(t=this.wallLine)||t.destroy(),null==(i=this.lengthText)||i.destroy(),null==(n=this.outlineBorder)||n.destroy(),null==(r=this.moveLine)||r.destroy(),null==(s=this.controlButtons)||s.destroy(),null==(a=this.removeButton)||a.destroy(),null==(o=this.scaleButton)||o.destroy(),null==(f=this.moveButton)||f.destroy(),this.removeButton=null,this.scaleButton=null,this.moveButton=null,super.destroy()}};__publicField(qw,"BUTTON_INDICES",{REMOVE:0,SCALE:2,MOVE:3});let Kw=qw;const Qw={fontSize:12,fontFamily:"system-ui, -apple-system, sans-serif",fontWeight:"400",color:"#5d68fe",position:"top",offset:-8,editing:{visible:!0},normal:{visible:!0}};class Jw extends xe{constructor(c){super(),__publicField(this,"spotData"),__publicField(this,"spotConfig"),__publicField(this,"controlsConfig"),__publicField(this,"spotEvents"),__publicField(this,"appService"),__publicField(this,"controlFill"),__publicField(this,"spotBorder"),__publicField(this,"centerIcon"),__publicField(this,"sizeText"),__publicField(this,"nameText"),__publicField(this,"clickHandler",null),__publicField(this,"initialSpotPoint",null),__publicField(this,"dragStartMousePosition",null),__publicField(this,"throttledUpdateScale"),__publicField(this,"unsubscribeMapRotation",null),__publicField(this,"handleDragStart",c=>{this.isEditingEnabled()&&(this.initialSpotPoint=__spreadValues({},this.spotData.point),this.dragStartMousePosition=this.parent.toLocal(c.global),this.appService.getApp().requestRender("spot-drag",!0))}),__publicField(this,"handleDragMove",c=>{if(!this.isEditingEnabled()||!this.initialSpotPoint||!this.dragStartMousePosition)return;if(!this.controlFill)return;const e=this.parent.toLocal(c.global),t=e.x-this.dragStartMousePosition.x,i=e.y-this.dragStartMousePosition.y;this.applyTranslation(t,i)}),__publicField(this,"handleDragEnd",()=>{var c,e;this.initialSpotPoint=null,this.dragStartMousePosition=null,this.appService.getApp().stopRender("spot-drag"),null==(e=(c=this.spotEvents).onUpdate)||e.call(c,this.getSpotData())});const{appService:e,spotData:t,events:i={}}=c;this.appService=e,this.spotData=t,this.spotEvents=i,this.controlsConfig=this.appService.controlsConfig,this.spotConfig=this.appService.controlsConfig.spot,this.position.set(t.point.x,t.point.y),this.throttledUpdateScale=P_(this.updateScale.bind(this),30,{leading:!0,trailing:!0}),this.initializeComponents(),this.updateEditState(),this.setupClickHandler(),this.registerScaleListener()}registerScaleListener(){this.appService.emitter.on("antiScale",this.throttledUpdateScale)}updateScale(){this.isEditingEnabled()&&this.sizeText&&this.updateSizeTextPosition(),this.nameText&&this.updateNameTextPosition()}isEditingEnabled(){return this.appService.runtimeSnapshot.editingSpotIds.includes(this.spotData.id)}shouldShowIcon(){return(this.isEditingEnabled()?this.spotConfig.editing:this.spotConfig.normal).showIcon}calculateRectanglePoints(){const{size:c}=this.spotConfig;if(0===c)return[{x:0,y:0},{x:0,y:0},{x:0,y:0},{x:0,y:0}];const e=this.appService.coords.toPixels(c)/2;return[{x:-e,y:-e},{x:e,y:-e},{x:e,y:e},{x:-e,y:e}]}initializeComponents(){const c=this.calculateRectanglePoints();this.spotConfig.size>0&&(this.controlFill=this.createControlFill(c),this.addChild(this.controlFill),this.spotBorder=this.createBorder(c),this.addChild(this.spotBorder)),this.centerIcon=this.createCenterIcon(),this.addChild(this.centerIcon),this.spotConfig.showText&&(this.sizeText=this.createSizeText(),this.addChild(this.sizeText)),this.calculateSpotNameText()&&(this.nameText=this.createNameText(),this.addChild(this.nameText)),this.drawSpot()}createControlFill(c){const e=this.isEditingEnabled();return new Mw(this.appService,{points:c,fillColor:this.spotConfig.fillColor,enableInteraction:e,onDragStart:this.handleDragStart,onDragMove:this.handleDragMove,onDragEnd:this.handleDragEnd})}createBorder(c){const e=this.isEditingEnabled()?this.spotConfig.editing:this.spotConfig.normal;return new Ew(this.appService,{points:c,closePath:!0,style:{color:this.spotConfig.strokeColor,width:this.spotConfig.strokeWidth,isDashed:e.isDashed,dashArray:e.dashArray}})}createCenterIcon(){const c=new ow(this.appService);return this.loadIconTexture(c),c.position.set(0,0),c.eventMode="static",this.setupIconDrag(c),c.visible=!1,c}loadIconTexture(c){return __async(this,null,function*(){const{iconSize:e,iconSizeFixed:t}=this.spotConfig;yield c.loadTextureAndSetSize("spotIcon",{width:e,height:e,sizeFixed:t}),this.applyAntiRotation(this.appService.runtime.mapRotation),this.unsubscribeMapRotation||(this.unsubscribeMapRotation=oS(this.appService.runtime,"mapRotation",c=>{this.applyAntiRotation(c)})),c.visible=this.shouldShowIcon()})}applyAntiRotation(c){const e=-c*Math.PI/180;this.rotation=e}setupIconDrag(c){let e=null,t=!1;const i=c=>{if(!t||!this.initialSpotPoint||!e)return;const i=this.parent.toLocal(c.global),n=i.x-e.x,r=i.y-e.y;this.applyTranslation(n,r)},n=()=>{var c,i;t&&(t=!1,this.initialSpotPoint=null,e=null,this.appService.getApp().stopRender("spot-drag"),null==(i=(c=this.spotEvents).onUpdate)||i.call(c,this.getSpotData()))};c.on("pointerdown",c=>{if(!this.isEditingEnabled())return;c.stopPropagation(),t=!0,this.initialSpotPoint=__spreadValues({},this.spotData.point),e=this.parent.toLocal(c.global),this.appService.getApp().requestRender("spot-drag",!0);const r=this.appService.gestureController.hijack(c);r.onMove(i),r.onEnd(n)})}createSizeText(){const c=this.calculateSpotSizeText(),e=new kw(this.appService,{text:c,style:{fontSize:this.controlsConfig.textFontSize,fontFamily:this.controlsConfig.textFontFamily,fontWeight:this.controlsConfig.textFontWeight,fill:this.spotConfig.textColor,align:"center"}});e.anchor.set(.5);const t=this.calculateSizeTextPosition();return e.position.set(t.x,t.y),e.eventMode="none",e}calculateSpotSizeText(){const{size:c}=this.spotConfig,e=this.appService.coords.toDisplayUnit(c),t=this.appService.runtimeSnapshot.unitLabel;return`${e.toFixed(1)}${t}*${e.toFixed(1)}${t}`}calculateSizeTextPosition(){const{textPosition:c,textOffset:e}=this.spotConfig;return this.calculateTextPosition(c,e)}calculateTextPosition(c,e){const t=this.calculateRectanglePoints();if(t.length<4)return{x:0,y:0};const[i,n,r,s]=t,a=this.appService.getApp().toFixedSize(e);let o,f;switch(c){case"top":default:o={x:(i.x+n.x)/2,y:(i.y+n.y)/2},f={x:o.x,y:o.y+a};break;case"right":o={x:(n.x+r.x)/2,y:(n.y+r.y)/2},f={x:o.x+a,y:o.y};break;case"bottom":o={x:(s.x+r.x)/2,y:(s.y+r.y)/2},f={x:o.x,y:o.y+a};break;case"left":o={x:(i.x+s.x)/2,y:(i.y+s.y)/2},f={x:o.x-a,y:o.y}}return f}getNameLabelConfig(){var c;return null!=(c=this.spotConfig.nameLabel)?c:Qw}createNameText(){const c=this.getNameLabelConfig(),e=new kw(this.appService,{text:this.calculateSpotNameText(),style:{fontSize:c.fontSize,fontFamily:c.fontFamily,fontWeight:c.fontWeight,fill:c.color,align:"center"}});e.anchor.set(.5);const t=this.calculateNameTextPosition();return e.position.set(t.x,t.y),e.eventMode="none",e}calculateSpotNameText(){var c,e;return null!=(e=null==(c=this.spotData.name)?void 0:c.trim())?e:""}calculateNameTextPosition(){const{position:c,offset:e}=this.getNameLabelConfig();return this.calculateTextPosition(c,e)}shouldShowNameText(){if(!this.calculateSpotNameText())return!1;const c=this.isEditingEnabled(),e=this.getNameLabelConfig();return(c?e.editing:e.normal).visible}applyTranslation(c,e){this.initialSpotPoint&&(this.spotData.point={x:this.initialSpotPoint.x+c,y:this.initialSpotPoint.y+e},this.drawSpot())}setupClickHandler(){const c=this.spotConfig.size>0?this:this.centerIcon;this.clickHandler=new dw(c,{onClick:()=>{var c,e;this.isEditingEnabled()||(this.appService.gestureController.suppressMapClick(),null==(e=null==(c=this.spotEvents)?void 0:c.onClick)||e.call(c,this.getSpotData()))},stopPropagation:!1}),this.eventMode="static"}drawSpot(){const c=this.calculateRectanglePoints();this.position.set(this.spotData.point.x,this.spotData.point.y),this.spotConfig.size>0&&(this.controlFill&&this.controlFill.updatePoints(c),this.spotBorder&&this.spotBorder.updatePoints(c)),this.spotConfig.showText&&this.sizeText&&this.updateSizeText(),this.nameText&&this.updateNameText()}updateSizeText(){if(!this.sizeText)return;const c=this.calculateSpotSizeText();this.sizeText.updateText(c),this.updateSizeTextPosition()}updateSizeTextPosition(){if(!this.sizeText)return;const c=this.calculateSizeTextPosition();this.sizeText.position.set(c.x,c.y)}updateNameText(){this.nameText&&(this.nameText.updateText(this.calculateSpotNameText()),this.updateNameTextPosition())}updateNameTextPosition(){if(!this.nameText)return;const c=this.calculateNameTextPosition();this.nameText.position.set(c.x,c.y)}updateEditState(){const c=this.isEditingEnabled(),e=c?this.spotConfig.editing:this.spotConfig.normal;this.sizeText&&(this.sizeText.visible=c&&this.spotConfig.showText),this.nameText&&(this.nameText.visible=this.shouldShowNameText()),this.centerIcon&&(this.centerIcon.visible=this.shouldShowIcon()),this.controlFill&&(this.controlFill.setInteractionEnabled(c),this.controlFill.visible=e.showFrame),this.spotBorder&&(this.spotBorder.updateStyle({isDashed:e.isDashed,dashArray:e.dashArray}),this.spotBorder.visible=e.showFrame),this.zIndex=c?1e3:0}updateSpotData(c){this.spotData=__spreadValues({},c),!this.nameText&&this.calculateSpotNameText()&&(this.nameText=this.createNameText(),this.addChild(this.nameText)),this.drawSpot(),this.updateEditState()}getSpotData(){return __spreadValues({},this.spotData)}refreshDisplay(){this.drawSpot()}destroy(){var c,e,t,i,n,r;this.appService.emitter.off("antiScale",this.throttledUpdateScale),this.unsubscribeMapRotation&&(this.unsubscribeMapRotation(),this.unsubscribeMapRotation=null),null==(c=this.clickHandler)||c.destroy(),this.clickHandler=null,this.centerIcon&&0===this.spotConfig.size&&this.centerIcon.removeAllListeners(),null==(e=this.controlFill)||e.destroy(),null==(t=this.spotBorder)||t.destroy(),null==(i=this.centerIcon)||i.destroy(),null==(n=this.sizeText)||n.destroy(),null==(r=this.nameText)||r.destroy(),super.destroy()}static create(c,e){return new Jw({appService:c,spotData:e,events:{onUpdate:e=>{var t,i;null==(i=null==(t=c.events)?void 0:t.onUpdateSpot)||i.call(t,e)},onClick:e=>{var t,i;null==(i=null==(t=c.events)?void 0:t.onClickSpot)||i.call(t,e)}}})}}class $w extends Fw{constructor(c){const{appService:e,wayPointData:t,order:i,events:n={}}=c;super(e),__publicField(this,"wayPointData"),__publicField(this,"order"),__publicField(this,"wayPointConfig"),__publicField(this,"controlsConfig"),__publicField(this,"wayPointEvents"),__publicField(this,"icon"),__publicField(this,"orderContainer"),__publicField(this,"orderBackground"),__publicField(this,"orderText"),__publicField(this,"clickHandler",null),__publicField(this,"initialWayPointPoint",null),__publicField(this,"unsubscribeMapRotation",null),this.wayPointData=t,this.order=i,this.wayPointEvents=n,this.controlsConfig=this.appService.controlsConfig,this.wayPointConfig=this.appService.controlsConfig.wayPoint,this.position.set(t.point.x,t.point.y),this.initializeComponents(),this.updateEditState(),this.setupClickHandler()}isEditingEnabled(){return(this.appService.runtimeSnapshot.editingWayPointIds||[]).includes(this.wayPointData.id)}initializeComponents(){this.icon=this.createIcon(),this.addChild(this.icon),this.wayPointConfig.showOrder&&(this.createOrderContainer(),this.addChild(this.orderContainer))}createIcon(){const c=new ow(this.appService);return this.loadIconTexture(c),c.position.set(0,0),c.anchor.set(.5,1),c.eventMode="static",this.setupIconDrag(c),c}loadIconTexture(c){return __async(this,null,function*(){const e=this.isEditingEnabled(),t=e?this.wayPointConfig.editing:this.wayPointConfig.normal,{iconSize:i}=t,n=e?"wayPointActive":"wayPoint";yield c.loadTextureAndSetSize(n,{width:i,height:i,sizeFixed:!1}),this.applyAntiRotation(this.appService.runtime.mapRotation),this.unsubscribeMapRotation||(this.unsubscribeMapRotation=oS(this.appService.runtime,"mapRotation",c=>{this.applyAntiRotation(c)})),c.visible=!0,this.orderContainer&&this.updateOrderPosition()})}applyAntiRotation(c){const e=-c*Math.PI/180;this.rotation=e}createOrderContainer(){const c=this.isEditingEnabled()?this.wayPointConfig.editing:this.wayPointConfig.normal,{orderContainer:e,orderText:t}=c;this.orderContainer=new xe,this.orderBackground=new _o,this.orderText=new Wf({text:this.order.toString(),style:new Df({fontSize:t.fontSize,fontFamily:t.fontFamily,fontWeight:t.fontWeight,fill:t.color,align:"center",trim:!0})}),this.orderBackground.clear(),this.orderBackground.circle(0,0,e.size/2),this.orderBackground.fill({color:e.backgroundColor}),this.orderText.anchor.set(.5,.5),this.orderContainer.addChild(this.orderBackground),this.orderContainer.addChild(this.orderText),this.orderContainer.eventMode="none",this.orderContainer.visible=this.wayPointConfig.showOrder,this.updateOrderPosition()}updateOrderPosition(){if(!this.orderContainer)return;const c=this.isEditingEnabled()?this.wayPointConfig.editing:this.wayPointConfig.normal,{offsetX:e,offsetY:t}=c.orderContainer;this.orderContainer.position.set(e,-t)}setupIconDrag(c){let e=null,t=null,i=!1;const n=c=>{if(i&&e&&t&&this.parent){const i=this.parent.toLocal(c.global),n=i.x-e.x,r=i.y-e.y,s={x:t.x+n,y:t.y+r};this.wayPointData.point=s,this.position.set(s.x,s.y),this.orderContainer&&this.updateOrderPosition()}},r=()=>{var c,n;i&&(i=!1,e=null,t=null,null==(n=(c=this.wayPointEvents).onUpdate)||n.call(c,this.wayPointData))};c.on("pointerdown",c=>{if(this.isEditingEnabled()&&(c.stopPropagation(),t=__spreadValues({},this.wayPointData.point),this.parent&&(e=this.parent.toLocal(c.global)),i=!0,this.parent)){const e=this.appService.gestureController.hijack(c);e.onMove(n),e.onEnd(r)}})}setupClickHandler(){this.clickHandler=new dw(this.icon,{stopPropagation:!1,onClick:()=>{var c,e;this.appService.gestureController.suppressMapClick(),null==(e=(c=this.wayPointEvents).onClick)||e.call(c,this.wayPointData)}})}updateWayPoint(c){this.wayPointData=c,this.drawWayPoint()}updateOrder(c){this.order=c,this.orderText&&(this.orderText.text=c.toString())}getWayPointData(){return __spreadValues({},this.wayPointData)}drawWayPoint(){this.position.set(this.wayPointData.point.x,this.wayPointData.point.y),this.orderContainer&&this.updateOrderPosition()}updateEditState(){if(this.loadIconTexture(this.icon),this.orderContainer&&this.orderText&&this.orderBackground){const c=this.isEditingEnabled()?this.wayPointConfig.editing:this.wayPointConfig.normal;this.orderText.style=new Df({fontSize:c.orderText.fontSize,fontFamily:c.orderText.fontFamily,fontWeight:c.orderText.fontWeight,fill:c.orderText.color,align:"center",trim:!0});const{size:e,backgroundColor:t}=c.orderContainer;this.orderBackground.clear(),this.orderBackground.circle(0,0,e/2).fill(t),this.orderContainer.visible=this.wayPointConfig.showOrder,this.updateOrderPosition()}}onEditStateChange(){this.updateEditState()}destroy(){this.unsubscribeMapRotation&&(this.unsubscribeMapRotation(),this.unsubscribeMapRotation=null),this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=null),this.icon&&this.icon.removeAllListeners(),super.destroy()}}class cC extends _o{constructor(c,e){super(),__publicField(this,"isDragging",!1),__publicField(this,"dragStartPosition",null),__publicField(this,"initialPosition"),__publicField(this,"gestureSession",null),__publicField(this,"handleDragPointerMove",c=>{var e,t;if(!this.isDragging||!this.dragStartPosition)return;const i=this.parent.toLocal(c.global),n=i.x-this.dragStartPosition.x,r=i.y-this.dragStartPosition.y,s={x:this.initialPosition.x+n,y:this.initialPosition.y+r};this.position.set(s.x,s.y),null==(t=(e=this.options).onDragMove)||t.call(e,s)}),__publicField(this,"handleDragPointerUp",()=>{var c,e;if(this.gestureSession=null,!this.isDragging)return;const t=this.appService;this.isDragging=!1,this.dragStartPosition=null,t.getApp().stopRender("endpoint-drag"),null==(e=(c=this.options).onDragEnd)||e.call(c)}),this.appService=c,this.options=e,this.initialPosition=__spreadValues({},e.position),this.position.set(e.position.x,e.position.y),this.eventMode="static",this.cursor="pointer",this.setupEvents(),this.draw()}draw(){const c=this.appService,{config:e}=this.options,t=c.getApp().toFixedSize(e.endPointSize),i=c.getApp().toFixedSize(e.endPointStrokeWidth);this.clear(),this.circle(0,0,t/2),this.fill({color:e.endPointColor}),this.stroke({color:e.endPointStrokeColor,width:i}),this.setupHitArea()}setupHitArea(){const c=this.appService,{config:e}=this.options,t=Math.max(e.endPointSize/2+10,20),i=c.getApp().toFixedSize(t);this.hitArea=new zn(0,0,i)}setupEvents(){this.on("pointerdown",this.handlePointerDown.bind(this))}handlePointerDown(c){c.stopPropagation(),this.startDragging(c)}startDragging(c){var e,t;const i=this.appService;this.isDragging=!0,this.dragStartPosition=this.parent.toLocal(c.global),this.initialPosition={x:this.x,y:this.y},null==(t=(e=this.options).onDragStart)||t.call(e),i.getApp().requestRender("endpoint-drag",!0),this.gestureSession=this.appService.gestureController.hijack(c),this.gestureSession.onMove(this.handleDragPointerMove),this.gestureSession.onEnd(this.handleDragPointerUp)}updatePosition(c){this.position.set(c.x,c.y),this.initialPosition=__spreadValues({},c)}getPosition(){return{x:this.x,y:this.y}}redraw(){this.draw()}destroy(){var c;this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null),null==(c=this.gestureSession)||c.cancel(),this.gestureSession=null,this.off("pointerdown",this.handlePointerDown),super.destroy()}}class eC extends xe{constructor(c){super(),__publicField(this,"endPoints"),__publicField(this,"dividerConfig"),__publicField(this,"dividerEvents"),__publicField(this,"roomId"),__publicField(this,"appService"),__publicField(this,"roomGeometry",null),__publicField(this,"dashLine"),__publicField(this,"solidLine",null),__publicField(this,"startEndPoint"),__publicField(this,"endEndPoint"),__publicField(this,"solidLinePoints",null),__publicField(this,"initialDividerPoints",[]),__publicField(this,"isDragging",!1),__publicField(this,"dragStartPosition",null),__publicField(this,"gestureSession",null),__publicField(this,"throttledHandleScaleChange"),__publicField(this,"handleEndPointDragStart",()=>{this.initialDividerPoints=this.endPoints.map(c=>__spreadValues({},c)),this.clearSolidLine(),this.appService.getApp().requestRender("divider-endpoint-drag",!0)}),__publicField(this,"handleEndPointDragMove",(c,e)=>{0!==this.initialDividerPoints.length&&(this.endPoints[c]=e,this.updateDashLine(),this.updateSolidLine(),this.setupDashLineHitArea())}),__publicField(this,"handleEndPointDragEnd",()=>{var c,e;this.initialDividerPoints=[],this.appService.getApp().stopRender("divider-endpoint-drag"),this.calculateAndCreateSolidLine(),this.checkAndResetIfOutOfRoom(),null==(e=(c=this.dividerEvents).onUpdate)||e.call(c,this.getDividerEndPoints())}),__publicField(this,"handleDashLinePointerDown",c=>{c.stopPropagation(),this.startDragging(c)}),__publicField(this,"handleDragPointerMove",c=>{if(!this.isDragging||!this.dragStartPosition||0===this.initialDividerPoints.length)return;const e=this.parent.toLocal(c.global),t=e.x-this.dragStartPosition.x,i=e.y-this.dragStartPosition.y;this.endPoints=this.initialDividerPoints.map(c=>({x:c.x+t,y:c.y+i})),this.updateAllComponents()}),__publicField(this,"handleDragPointerUp",()=>{var c,e;this.gestureSession=null,this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null,this.initialDividerPoints=[],this.appService.getApp().stopRender("divider-drag"),this.calculateAndCreateSolidLine(),this.checkAndResetIfOutOfRoom(),null==(e=(c=this.dividerEvents).onUpdate)||e.call(c,this.getDividerEndPoints()))}),__publicField(this,"handleScaleChange",()=>{var c,e;null==(c=this.startEndPoint)||c.redraw(),null==(e=this.endEndPoint)||e.redraw(),this.updateSolidLine(),this.setupDashLineHitArea()});const{appService:e,endPoints:t,roomId:i,events:n={}}=c;this.appService=e,this.dividerEvents=n,this.roomId=i,this.dividerConfig=this.appService.dividerConfig,this.roomGeometry=this.appService.mapManager.getRoomById(this.roomId)||null,this.endPoints=t?this.validateDividerPoints(t):this.createDefaultdividerPoints(),this.throttledHandleScaleChange=P_(this.handleScaleChange.bind(this),30,{leading:!0,trailing:!0}),this.initializeComponents(),this.calculateAndCreateSolidLine(),this.registerScaleListener()}validateDividerPoints(c){if(c.length>=2)return c.slice(0,2);const e=c[0]||{x:0,y:0};return[e,{x:e.x+50,y:e.y}]}createDefaultdividerPoints(){if(!this.roomGeometry)return V_.warn("Room geometry not available, creating fallback divider"),[{x:0,y:0},{x:100,y:0}];const c=this.appService.getApp().mapState;if(!c)return V_.warn("Map state not available, creating fallback divider"),[{x:0,y:0},{x:100,y:0}];const{boundingBox:e}=this.roomGeometry,t=this.appService.getApp().toFixedSize(this.dividerConfig.defaultExtension),i=this.dividerConfig.defaultDirection,n=e.x+e.width/2,r=e.y+e.height/2,s="horizontal"===i?e.width+2*t:e.height+2*t;return Dx(n,r,s,i).map(e=>({x:e.x-c.origin.x,y:e.y-c.origin.y}))}initializeComponents(){this.createDashLine(),this.addChild(this.dashLine),this.createEndPoints(),this.addChild(this.startEndPoint),this.addChild(this.endEndPoint),this.setupDashLineInteraction()}createDashLine(){const c=this.endPoints;if(c.length<2)return;const{dashLineWidth:e,dashLineDashArray:t,lineColor:i}=this.dividerConfig;this.dashLine=new Zw(this.appService,{start:c[0],end:c[1],style:{color:i.toString(),width:e,dashArray:t}})}createEndPoints(){const c=this.endPoints;this.startEndPoint=new cC(this.appService,{position:c[0],config:this.dividerConfig,onDragStart:this.handleEndPointDragStart,onDragMove:c=>this.handleEndPointDragMove(0,c),onDragEnd:this.handleEndPointDragEnd}),this.endEndPoint=new cC(this.appService,{position:c[1],config:this.dividerConfig,onDragStart:this.handleEndPointDragStart,onDragMove:c=>this.handleEndPointDragMove(1,c),onDragEnd:this.handleEndPointDragEnd})}setupDashLineInteraction(){this.dashLine&&(this.setupDashLineHitArea(),this.dashLine.off("pointerdown",this.handleDashLinePointerDown),this.dashLine.on("pointerdown",this.handleDashLinePointerDown))}setupDashLineHitArea(){if(!this.dashLine)return;const c=this.endPoints;if(c.length<2)return;const{hitAreaThickness:e}=this.dividerConfig,t=this.appService.getApp().toFixedSize(e),i=wx(c[0],c[1],t);if(0===i.length)return;const n=new Vn(i);this.dashLine.hitArea=n}startDragging(c){this.isDragging=!0;const e=this.parent.toLocal(c.global);this.dragStartPosition={x:e.x,y:e.y},this.initialDividerPoints=this.endPoints.map(c=>__spreadValues({},c)),this.clearSolidLine(),this.appService.getApp().requestRender("divider-drag",!0),this.gestureSession=this.appService.gestureController.hijack(c),this.gestureSession.onMove(this.handleDragPointerMove),this.gestureSession.onEnd(this.handleDragPointerUp)}updateAllComponents(){this.updateDashLine(),this.updateSolidLine(),this.updateEndPoints(),this.setupDashLineHitArea()}updateDashLine(){const c=this.endPoints;c.length<2||!this.dashLine||this.dashLine.updatePoints(c[0],c[1])}updateSolidLine(){if(!this.solidLine||!this.solidLinePoints)return;const{solidLineWidth:c,lineColor:e}=this.dividerConfig,t=this.appService.getApp().toFixedSize(c);this.solidLine.clear(),this.solidLine.setStrokeStyle({color:e.toString(),width:t}).moveTo(this.solidLinePoints[0].x,this.solidLinePoints[0].y).lineTo(this.solidLinePoints[1].x,this.solidLinePoints[1].y).stroke()}updateEndPoints(){const c=this.endPoints;this.startEndPoint&&this.startEndPoint.updatePosition(c[0]),this.endEndPoint&&this.endEndPoint.updatePosition(c[1])}registerScaleListener(){const{emitter:c}=this.appService;c.on("antiScale",this.throttledHandleScaleChange)}getDividerEndPoints(){return[...this.endPoints]}getEffectiveDividerPoints(){return this.solidLinePoints?[...this.solidLinePoints]:null}calculateAndCreateSolidLine(){if(this.clearSolidLine(),"number"!=typeof this.roomId)return;if(!this.getRoomGraphics())return;const c=this.calculateLineRoomIntersection();c&&c.length>=2&&(this.solidLinePoints=[c[0],c[c.length-1]],this.createSolidLine())}getRoomGraphics(){const c=this.appService.mapManager.roomFill;if(!c||"number"!=typeof this.roomId)return null;return c.getRoomGraphicsMap().get(this.roomId)||null}calculateLineRoomIntersection(){const c=this.endPoints;if(c.length<2)return null;if("number"!=typeof this.roomId)return null;const[e,t]=c,i=this.isPointInRoomFill(e),n=this.isPointInRoomFill(t);if(i||n)return null;const r=Z_(e,t),s=[];for(const f of r)this.isPointInRoomFill(f)&&s.push(f);if(0===s.length)return null;const a=s[0],o=s[s.length-1];if(fx(a,o)<3)return null;return Ox(a,o,.5)}isPointInRoomFill(c){if("number"!=typeof this.roomId)return!1;const e=this.appService.getApp().mapState;if(!e)return!1;const t={x:c.x+e.origin.x,y:c.y+e.origin.y};return"raster"===e.mapType?this.isPointInRasterRoomFill(t):this.isPointInStructuredRoomFill(t)}isPointInRasterRoomFill(c){c.x-=.5,c.y-=.5;const e=this.appService.getApp().mapState,t=this.appService.mapManager.roomFill;if(!e||!t)return!1;const i=t.getRasterRoomData(this.roomId);if(!i)return!1;const n=t.getMapWidth();if(0===n)return!1;const r=Math.round(c.x),s=Math.round(c.y);if(r<0||s<0||r>=n)return!1;const a=s*n+r;for(let o=0;o<i.pixelIndices.length;o++)if(i.pixelIndices[o]===a)return!0;return!1}isPointInStructuredRoomFill(c){const e={x:Math.round(c.x),y:Math.round(c.y)},t=this.appService.getApp().mapState,i=this.appService.mapManager.getRoomById(this.roomId);return!!(t&&i&&i.outlinePoints)&&ex(e,i.outlinePoints,!0)}isDividerCompletelyOutOfRoom(){if(!this.roomGeometry)return!1;const{boundingBox:c}=this.roomGeometry,e=this.endPoints;if(e.length<2)return!1;const t=this.appService.getApp().mapState;if(!t)return!1;const i={x:e[0].x+t.origin.x,y:e[0].y+t.origin.y},n={x:e[1].x+t.origin.x,y:e[1].y+t.origin.y};return!Ix(i,n,c.x,c.y,c.width,c.height)}checkAndResetIfOutOfRoom(){const{resetDividerWhenOutOfRoom:c}=this.appService.dividerConfig;c&&this.isDividerCompletelyOutOfRoom()&&this.resetToDefaultState()}resetToDefaultState(){var c,e;this.endPoints=this.createDefaultdividerPoints(),this.calculateAndCreateSolidLine(),this.updateComponents(),null==(e=(c=this.dividerEvents).onUpdate)||e.call(c,this.endPoints)}updateComponents(){const c=this.endPoints;c.length>=2&&(this.dashLine.updatePoints(c[0],c[1]),this.startEndPoint.position.set(c[0].x,c[0].y),this.endEndPoint.position.set(c[1].x,c[1].y),this.setupDashLineInteraction())}createSolidLine(){if(!this.solidLinePoints)return;const{solidLineWidth:c,lineColor:e}=this.dividerConfig;this.solidLine=new _o,this.solidLine.eventMode="none";const t=this.appService.getApp().toFixedSize(c);this.solidLine.setStrokeStyle({color:e.toString(),width:t}).moveTo(this.solidLinePoints[0].x,this.solidLinePoints[0].y).lineTo(this.solidLinePoints[1].x,this.solidLinePoints[1].y).stroke(),this.addChildAt(this.solidLine,0)}clearSolidLine(){this.solidLine&&(this.removeChild(this.solidLine),this.solidLine.destroy(),this.solidLine=null),this.solidLinePoints=null}updatedividerPoints(c){this.endPoints=this.validateDividerPoints(c),this.updateAllComponents(),this.calculateAndCreateSolidLine()}destroy(){var c,e,t,i;this.appService.emitter.off("antiScale",this.throttledHandleScaleChange),this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null,this.initialDividerPoints=[]),null==(c=this.gestureSession)||c.cancel(),this.gestureSession=null,this.dashLine&&this.dashLine.off("pointerdown",this.handleDashLinePointerDown),this.clearSolidLine(),null==(e=this.dashLine)||e.destroy(),null==(t=this.startEndPoint)||t.destroy(),null==(i=this.endEndPoint)||i.destroy(),super.destroy()}}const tC=["forbiddenSweepZone","forbiddenMopZone","cleanZone","virtualWall","spot","wayPoint","divider"];class iC{constructor(c){__publicField(this,"zoneMaps",new Map),__publicField(this,"virtualWallMap",new Map),__publicField(this,"spotMap",new Map),__publicField(this,"wayPointMap",new Map),__publicField(this,"divider",null),__publicField(this,"controlContainers",new Map),__publicField(this,"unsubscribeFns",[]),__publicField(this,"builtinZoneFactories",{forbiddenSweepZone:c=>jw.create(this.appService,c),forbiddenMopZone:c=>Yw.create(this.appService,c),cleanZone:c=>Xw.create(this.appService,c)}),this.appService=c,this.initializeControlContainers();const e=oS(c.runtime,"editingForbiddenSweepZoneIds",c=>{V_.log(`[runtime] editingForbiddenSweepZoneIds: ${c}`);const e=this.zoneMaps.get("forbiddenSweepZone");e&&this.updateZonesEditState("forbiddenSweepZone",e)}),t=oS(c.runtime,"editingForbiddenMopZoneIds",c=>{V_.log(`[runtime] editingForbiddenMopZoneIds: ${c}`);const e=this.zoneMaps.get("forbiddenMopZone");e&&this.updateZonesEditState("forbiddenMopZone",e)}),i=oS(c.runtime,"editingCleanZoneIds",c=>{V_.log(`[runtime] editingCleanZoneIds: ${c}`);const e=this.zoneMaps.get("cleanZone");e&&this.updateZonesEditState("cleanZone",e)}),n=oS(c.runtime,"editingCustomZoneIds",c=>{V_.log(`[runtime] editingCustomZoneIds: ${JSON.stringify(null!=c?c:{})}`);for(const[e,t]of this.zoneMaps)dS(e)||t.size&&this.updateZonesEditState(e,t)}),r=oS(c.runtime,"editingVirtualWallIds",c=>{V_.log(`[runtime] editingVirtualWallIds: ${c}`),this.updateVirtualWallsEditState(this.virtualWallMap)}),s=oS(c.runtime,"editingSpotIds",c=>{V_.log(`[runtime] editingSpotIds: ${c}`),this.updateSpotsEditState(this.spotMap)}),a=oS(c.runtime,"editingWayPointIds",c=>{V_.log(`[runtime] editingWayPointIds: ${c}`),this.updateWayPointsEditState(this.wayPointMap)}),o=oS(c.runtime,"dividingRoomId",c=>{V_.log(`[runtime] dividingRoomId: ${c}`),this.handleDividingRoomIdChange(c)}),f=oS(c.runtime,"unit",c=>{V_.log(`[runtime] unit changed: ${c}`),this.handleUnitChange()}),l=oS(c.runtime,"unitLabel",c=>{V_.log(`[runtime] unitLabel changed: ${c}`),this.handleUnitChange()});this.unsubscribeFns.push(e,t,i,n,r,s,a,o,f,l)}updateRenderOrder(){this.applyRenderOrder()}initializeControlContainers(){const c=this.appService.appContainer.getLayer(KS);if(c){for(const e of tC){const t=new xe;t.label=`controls:${e}`,this.controlContainers.set(e,t),c.addChild(t)}this.applyRenderOrder()}else V_.warn("[ControlsManager] LAYER_CONTROLS not found during init")}applyRenderOrder(){const c=this.appService.appContainer.getLayer(KS);if(!c)return;(function(c){if(!c||0===c.length)return[...tC];const e=new Set,t=[];for(const i of c)e.has(i)||(e.add(i),t.push(i));for(const i of tC)e.has(i)||t.push(i);return t})(this.appService.getConfig().controls.renderOrder).forEach((c,e)=>{const t=this.controlContainers.get(c);t&&(t.zIndex=e)}),c.sortableChildren=!0,c.sortChildren()}addToControlLayer(c,e){let t=this.controlContainers.get(c);if(!t){const e=this.appService.appContainer.getLayer(KS);if(!e)return void V_.warn("[ControlsManager] LAYER_CONTROLS not found");t=new xe,t.label=`controls:${c}`,this.controlContainers.set(c,t),e.addChild(t),this.applyRenderOrder()}t.addChild(e)}drawForbiddenSweepZones(c){this.drawZonesByType("forbiddenSweepZone",c)}getForbiddenSweepZones(){return this.getZonesDataByType("forbiddenSweepZone")}clearAllForbiddenSweepZones(){this.clearAllZonesByType("forbiddenSweepZone")}drawForbiddenMopZones(c){this.drawZonesByType("forbiddenMopZone",c)}getForbiddenMopZones(){return this.getZonesDataByType("forbiddenMopZone")}clearAllForbiddenMopZones(){this.clearAllZonesByType("forbiddenMopZone")}drawCleanZones(c){this.drawZonesByType("cleanZone",c)}getCleanZones(){return this.getZonesDataByType("cleanZone")}clearAllCleanZones(){this.clearAllZonesByType("cleanZone")}drawVirtualWalls(c){var e;const t=this.appService,i=this.virtualWallMap,n=new Set(c.map(c=>c.id));for(const[r,s]of i)n.has(r)||(null==(e=s.parent)||e.removeChild(s),s.destroy(),i.delete(r));c.forEach(c=>{const e=i.get(c.id);if(e)this.isWallDataEqual(e.getWallData(),c)||e.updateWallData(c);else{const e=new Kw({appService:t,wallData:c,events:{onRemove:c=>{var e,i;null==(i=null==(e=t.events)?void 0:e.onRemoveVirtualWall)||i.call(e,c)},onUpdate:c=>{var e,i;null==(i=null==(e=t.events)?void 0:e.onUpdateVirtualWall)||i.call(e,c)},onClick:c=>{var e,i;null==(i=null==(e=t.events)?void 0:e.onClickVirtualWall)||i.call(e,c)}}});i.set(c.id,e),this.addToControlLayer("virtualWall",e)}})}getVirtualWalls(){return this.getWallsData(this.virtualWallMap)}clearAllVirtualWalls(){this.clearAllWalls(this.virtualWallMap)}drawSpots(c){const e=this.spotMap;if(!c||0===c.length)return void this.clearAllSpotsInternal(e);const t=new Set(e.keys()),i=new Set(c.map(c=>c.id));for(const n of t)i.has(n)||this.removeSpot(n,e);c.forEach(c=>{const t=e.get(c.id);t?this.isSpotDataEqual(t.getSpotData(),c)||t.updateSpotData(c):this.addNewSpot(c,e)})}getSpots(){return this.getSpotsData(this.spotMap)}clearAllSpots(){this.clearAllSpotsInternal(this.spotMap)}getZoneMap(c){let e=this.zoneMaps.get(c);return e||(e=new Map,this.zoneMaps.set(c,e)),e}resolveZoneFactory(c){var e;const t=this.builtinZoneFactories[c];if(t)return t;return(null==(e=this.appService.getConfig().customZoneTypes)?void 0:e[c])?e=>new Hw({deps:Ww(this.appService,{onRemove:e=>{var t,i;return null==(i=null==(t=this.appService.events)?void 0:t.onRemoveCustomZone)?void 0:i.call(t,c,e)},onUpdate:e=>{var t,i;return null==(i=null==(t=this.appService.events)?void 0:t.onUpdateCustomZone)?void 0:i.call(t,c,e)},onClick:e=>{var t,i;return null==(i=null==(t=this.appService.events)?void 0:t.onClickCustomZone)?void 0:i.call(t,c,e)}}),zoneData:e,zoneType:c}):null}drawCustomZones(c,e){this.drawZonesByType(c,e)}getCustomZones(c){return this.getZonesDataByType(c)}clearCustomZones(c){this.clearAllZonesByType(c)}drawZonesByType(c,e){const t=this.resolveZoneFactory(c);if(!t)return void V_.warn(`[ControlsManager] Unknown zone type: ${c}`);const i=this.getZoneMap(c);this.drawZonesImpl(e,i,t,c)}getZonesDataByType(c){const e=this.zoneMaps.get(c);return e?this.getZonesData(e):[]}clearAllZonesByType(c){const e=this.zoneMaps.get(c);e&&this.clearAllZones(e)}drawZonesImpl(c,e,t,i){if(!c||0===c.length)return void this.clearAllZones(e);const n=new Set(e.keys()),r=new Set(c.map(c=>c.id));for(const s of n)r.has(s)||this.removeZone(s,e);c.forEach(c=>{const n=e.get(c.id);n?this.isZoneDataEqual(n.getZoneData(),c)||n.updateZoneData(c):this.addNewZone(c,e,t,i)})}addNewZone(c,e,t,i){const n=t(c);e.set(c.id,n),this.addToControlLayer(i,n),n.setEditing(this.getEditingZoneIds(String(i)).includes(c.id))}removeZone(c,e){var t;const i=e.get(c);i&&(null==(t=i.parent)||t.removeChild(i),i.destroy(),e.delete(c))}getZonesData(c){const e=[];return c.forEach(c=>{e.push(c.getZoneData())}),e}clearAllZones(c){c.forEach((e,t)=>{var i;const n=c.get(t);n&&(null==(i=n.parent)||i.removeChild(n),n.destroy())}),c.clear()}getEditingZoneIds(c){var e,t;const i=this.appService.runtimeSnapshot;switch(c){case"forbiddenSweepZone":return i.editingForbiddenSweepZoneIds;case"forbiddenMopZone":return i.editingForbiddenMopZoneIds;case"cleanZone":return i.editingCleanZoneIds;default:return null!=(t=null==(e=i.editingCustomZoneIds)?void 0:e[c])?t:[]}}updateZonesEditState(c,e){const t=this.getEditingZoneIds(c);e.forEach((c,e)=>{c.setEditing(t.includes(e))})}updateVirtualWallsEditState(c){c.forEach(c=>{c.updateEditingState()})}isZoneDataEqual(c,e){if(c.id!==e.id)return!1;if(c.points.length!==e.points.length)return!1;for(let t=0;t<c.points.length;t++){const i=c.points[t],n=e.points[t];if(Math.abs(i.x-n.x)>.1||Math.abs(i.y-n.y)>.1)return!1}return!0}getWallsData(c){return Array.from(c.values()).map(c=>c.getWallData())}clearAllWalls(c){for(const e of c.values())e.destroy();c.clear()}isWallDataEqual(c,e){if(c.id!==e.id)return!1;if(c.points.length!==e.points.length)return!1;for(let t=0;t<c.points.length;t++){const i=c.points[t],n=e.points[t];if(Math.abs(i.x-n.x)>.1||Math.abs(i.y-n.y)>.1)return!1}return!0}addNewSpot(c,e){const t=Jw.create(this.appService,c);e.set(c.id,t),this.addToControlLayer("spot",t)}removeSpot(c,e){var t;const i=e.get(c);i&&(null==(t=i.parent)||t.removeChild(i),i.destroy(),e.delete(c))}getSpotsData(c){const e=[];return c.forEach(c=>{e.push(c.getSpotData())}),e}clearAllSpotsInternal(c){c.forEach((e,t)=>{var i;const n=c.get(t);n&&(null==(i=n.parent)||i.removeChild(n),n.destroy())}),c.clear()}updateSpotsEditState(c){c.forEach(c=>{c.updateEditState()})}isSpotDataEqual(c,e){if(c.id!==e.id)return!1;const t=c.point,i=e.point;return!(Math.abs(t.x-i.x)>.1||Math.abs(t.y-i.y)>.1)&&c.name===e.name}drawWayPoints(c){V_.log("[ControlsManager] drawWayPoints",c);const e=Array.from(this.wayPointMap.keys()),t=c.map(c=>c.id);e.filter(c=>!t.includes(c)).forEach(c=>{this.removeWayPoint(c,this.wayPointMap)}),c.forEach((c,e)=>{const t=e+1,i=this.wayPointMap.get(c.id);i?(this.isWayPointDataEqual(i.getWayPointData(),c)||i.updateWayPoint(c),i.updateOrder(t)):this.addNewWayPoint(c,t,this.wayPointMap)})}clearAllWayPoints(){V_.log("[ControlsManager] clearAllWayPoints"),this.clearAllWayPointsInternal(this.wayPointMap)}getWayPoints(){return this.getWayPointsData(this.wayPointMap)}addNewWayPoint(c,e,t){var i,n;const r=this.appService,s=new $w({appService:r,wayPointData:c,order:e,events:{onUpdate:null==(i=r.events)?void 0:i.onUpdateWayPoint,onClick:null==(n=r.events)?void 0:n.onClickWayPoint}});t.set(c.id,s),this.addToControlLayer("wayPoint",s)}removeWayPoint(c,e){var t;const i=e.get(c);i&&(null==(t=i.parent)||t.removeChild(i),i.destroy(),e.delete(c))}getWayPointsData(c){const e=[];return c.forEach(c=>{e.push(c.getWayPointData())}),e}clearAllWayPointsInternal(c){c.forEach((e,t)=>{var i;const n=c.get(t);n&&(null==(i=n.parent)||i.removeChild(n),n.destroy())}),c.clear()}updateWayPointsEditState(c){c.forEach(c=>{c.onEditStateChange()})}isWayPointDataEqual(c,e){if(c.id!==e.id)return!1;const t=c.point,i=e.point;return!(Math.abs(t.x-i.x)>.1||Math.abs(t.y-i.y)>.1)}handleDividingRoomIdChange(c){if(null==c||-1===c)return void this.clearDivider();this.getRoomGeometry(c)?this.createDefaultDivider(c):this.clearDivider()}getRoomGeometry(c){return this.appService.mapManager.getRoomById(c)}createDefaultDivider(c){const e=this.appService;this.clearDivider(),this.divider=new eC({appService:this.appService,roomId:c,events:{onUpdate:c=>{var t,i;null==(i=null==(t=e.events)?void 0:t.onUpdateDivider)||i.call(t,c)}}}),this.addToControlLayer("divider",this.divider)}clearDivider(){var c;this.divider&&(null==(c=this.divider.parent)||c.removeChild(this.divider),this.divider.destroy(),this.divider=null)}getDividerEndPoints(){return this.divider?this.divider.getDividerEndPoints():null}getEffectiveDividerPoints(){return this.divider?this.divider.getEffectiveDividerPoints():null}handleUnitChange(){V_.debug("[ControlsManager] Unit changed, refreshing all size texts");for(const c of this.zoneMaps.values())c.forEach(c=>{c.refreshDisplay()});this.virtualWallMap.forEach(c=>{c.refreshDisplay()}),this.spotMap.forEach(c=>{c.refreshDisplay()})}destroy(){this.unsubscribeFns.forEach(c=>c()),this.unsubscribeFns=[];for(const c of this.zoneMaps.keys())this.clearAllZonesByType(c);this.clearAllVirtualWalls(),this.clearAllSpots(),this.clearDivider(),this.controlContainers.forEach(c=>{c.removeFromParent(),c.destroy({children:!0})}),this.controlContainers.clear()}}class nC extends ow{constructor(c,e){super(c),__publicField(this,"objectData"),__publicField(this,"clickHandler",null),__publicField(this,"unsubscribeMapRotation",null),this.appService=c,this.objectData=e}initializeSprite(){return __async(this,null,function*(){const c=this.appService.detectedObjectConfig,e=this.objectData.width||c.width,t=this.objectData.height||c.height;yield this.loadTextureAndSetSize(this.objectData.src,{width:e,height:t}),this.anchor.set(c.anchor.x,c.anchor.y),this.position.set(this.objectData.x,this.objectData.y),this.visible=!0,this.applyAntiRotation(this.appService.runtime.mapRotation),this.unsubscribeMapRotation=oS(this.appService.runtime,"mapRotation",c=>{this.applyAntiRotation(c)}),c.interactive?this.setupClickHandler():this.eventMode="none"})}applyAntiRotation(c){const e=-c*Math.PI/180;this.rotation=e}setupClickHandler(){this.clickHandler&&this.clickHandler.destroy(),this.clickHandler=new dw(this,{onClick:()=>this.handleClick(),stopPropagation:!1})}handleClick(){var c,e;null==(e=null==(c=this.appService.events)?void 0:c.onClickDetectedObject)||e.call(c,this.getObjectData())}getObjectData(){return __spreadValues({},this.objectData)}updateObjectData(c){return __async(this,null,function*(){const e=this.objectData;this.objectData=c;const t=this.appService.detectedObjectConfig;if(e.src!==c.src){const e=c.width||t.width,i=c.height||t.height;yield this.loadTextureAndSetSize(c.src,{width:e,height:i})}if(e.width!==c.width||e.height!==c.height){const e=c.width||t.width,i=c.height||t.height;this.setFixedSize(e,i)}this.position.set(c.x,c.y),t.interactive?this.clickHandler||this.setupClickHandler():this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=null)})}isSameData(c){return this.objectData.id===c.id&&this.objectData.src===c.src&&this.objectData.x===c.x&&this.objectData.y===c.y&&this.objectData.width===c.width&&this.objectData.height===c.height}destroy(){this.unsubscribeMapRotation&&(this.unsubscribeMapRotation(),this.unsubscribeMapRotation=null),this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=null),super.destroy()}}class rC{constructor(c){__publicField(this,"detectedObjectMap",new Map),__publicField(this,"unsubscribeShowDetectedObjects",null),this.appService=c,this.applyLayerVisibility(this.appService.runtime.showDetectedObjects),this.unsubscribeShowDetectedObjects=oS(this.appService.runtime,"showDetectedObjects",c=>{this.applyLayerVisibility(c)})}drawDetectedObjects(c){return __async(this,null,function*(){if(!c||0===c.length)return void this.clearAllDetectedObjects();const e=new Set(c.map(c=>c.id)),t=Array.from(this.detectedObjectMap.keys());for(const c of t)e.has(c)||this.removeDetectedObject(c);for(const i of c){const c=this.detectedObjectMap.get(i.id);c?c.isSameData(i)||(yield c.updateObjectData(i)):yield this.addNewDetectedObject(i)}})}applyLayerVisibility(c){const e=this.appService.appContainer.getLayer(JS);e&&(e.visible=c)}clearAllDetectedObjects(){const c=this.appService;this.detectedObjectMap.forEach(e=>{c.appContainer.removeFromLayer(JS,e),e.destroy()}),this.detectedObjectMap.clear()}addNewDetectedObject(c){return __async(this,null,function*(){const e=this.appService,t=new nC(this.appService,c);yield t.initializeSprite(),this.detectedObjectMap.set(c.id,t),e.appContainer.addToLayer(JS,t)})}removeDetectedObject(c){const e=this.appService,t=this.detectedObjectMap.get(c);t&&(e.appContainer.removeFromLayer(JS,t),t.destroy(),this.detectedObjectMap.delete(c))}destroy(){this.unsubscribeShowDetectedObjects&&(this.unsubscribeShowDetectedObjects(),this.unsubscribeShowDetectedObjects=null),this.clearAllDetectedObjects()}}var sC,aC={},oC={},fC={};function lC(){if(sC)return fC;sC=1,Object.defineProperty(fC,"__esModule",{value:!0}),fC.loop=fC.conditional=fC.parse=void 0;fC.parse=function c(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:i;if(Array.isArray(t))t.forEach(function(t){return c(e,t,i,n)});else if("function"==typeof t)t(e,i,n,c);else{var r=Object.keys(t)[0];Array.isArray(t[r])?(n[r]={},c(e,t[r],i,n[r])):n[r]=t[r](e,i,n,c)}return i};fC.conditional=function(c,e){return function(t,i,n,r){e(t,i,n)&&r(t,c,i,n)}};return fC.loop=function(c,e){return function(t,i,n,r){for(var s=[],a=t.pos;e(t,i,n);){var o={};if(r(t,c,i,o),t.pos===a)break;a=t.pos,s.push(o)}return s}},fC}var dC,hC,uC={};function pC(){if(dC)return uC;dC=1,Object.defineProperty(uC,"__esModule",{value:!0}),uC.readBits=uC.readArray=uC.readUnsigned=uC.readString=uC.peekBytes=uC.readBytes=uC.peekByte=uC.readByte=uC.buildStream=void 0;uC.buildStream=function(c){return{data:c,pos:0}};var c=function(){return function(c){return c.data[c.pos++]}};uC.readByte=c;uC.peekByte=function(){var c=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return function(e){return e.data[e.pos+c]}};var e=function(c){return function(e){return e.data.subarray(e.pos,e.pos+=c)}};uC.readBytes=e;uC.peekBytes=function(c){return function(e){return e.data.subarray(e.pos,e.pos+c)}};uC.readString=function(c){return function(t){return Array.from(e(c)(t)).map(function(c){return String.fromCharCode(c)}).join("")}};uC.readUnsigned=function(c){return function(t){var i=e(2)(t);return c?(i[1]<<8)+i[0]:(i[0]<<8)+i[1]}};uC.readArray=function(c,t){return function(i,n,r){for(var s="function"==typeof t?t(i,n,r):t,a=e(c),o=new Array(s),f=0;f<s;f++)o[f]=a(i);return o}};return uC.readBits=function(c){return function(e){for(var t=function(c){return c.data[c.pos++]}(e),i=new Array(8),n=0;n<8;n++)i[7-n]=!!(t&1<<n);return Object.keys(c).reduce(function(e,t){var n=c[t];return n.length?e[t]=function(c,e,t){for(var i=0,n=0;n<t;n++)i+=c[e+n]&&Math.pow(2,t-n-1);return i}(i,n.index,n.length):e[t]=i[n.index],e},{})}},uC}var gC,mC={};var bC,vC,yC={};var _C=function(){if(vC)return aC;vC=1,Object.defineProperty(aC,"__esModule",{value:!0}),aC.decompressFrames=aC.decompressFrame=aC.parseGIF=void 0;var c,e=(hC||(hC=1,function(c){Object.defineProperty(c,"__esModule",{value:!0}),c.default=void 0;var e=lC(),t=pC(),i={blocks:function(c){for(var e=[],i=c.data.length,n=0,r=(0,t.readByte)()(c);0!==r&&r;r=(0,t.readByte)()(c)){if(c.pos+r>=i){var s=i-c.pos;e.push((0,t.readBytes)(s)(c)),n+=s;break}e.push((0,t.readBytes)(r)(c)),n+=r}for(var a=new Uint8Array(n),o=0,f=0;f<e.length;f++)a.set(e[f],o),o+=e[f].length;return a}},n=(0,e.conditional)({gce:[{codes:(0,t.readBytes)(2)},{byteSize:(0,t.readByte)()},{extras:(0,t.readBits)({future:{index:0,length:3},disposal:{index:3,length:3},userInput:{index:6},transparentColorGiven:{index:7}})},{delay:(0,t.readUnsigned)(!0)},{transparentColorIndex:(0,t.readByte)()},{terminator:(0,t.readByte)()}]},function(c){var e=(0,t.peekBytes)(2)(c);return 33===e[0]&&249===e[1]}),r=(0,e.conditional)({image:[{code:(0,t.readByte)()},{descriptor:[{left:(0,t.readUnsigned)(!0)},{top:(0,t.readUnsigned)(!0)},{width:(0,t.readUnsigned)(!0)},{height:(0,t.readUnsigned)(!0)},{lct:(0,t.readBits)({exists:{index:0},interlaced:{index:1},sort:{index:2},future:{index:3,length:2},size:{index:5,length:3}})}]},(0,e.conditional)({lct:(0,t.readArray)(3,function(c,e,t){return Math.pow(2,t.descriptor.lct.size+1)})},function(c,e,t){return t.descriptor.lct.exists}),{data:[{minCodeSize:(0,t.readByte)()},i]}]},function(c){return 44===(0,t.peekByte)()(c)}),s=(0,e.conditional)({text:[{codes:(0,t.readBytes)(2)},{blockSize:(0,t.readByte)()},{preData:function(c,e,i){return(0,t.readBytes)(i.text.blockSize)(c)}},i]},function(c){var e=(0,t.peekBytes)(2)(c);return 33===e[0]&&1===e[1]}),a=(0,e.conditional)({application:[{codes:(0,t.readBytes)(2)},{blockSize:(0,t.readByte)()},{id:function(c,e,i){return(0,t.readString)(i.blockSize)(c)}},i]},function(c){var e=(0,t.peekBytes)(2)(c);return 33===e[0]&&255===e[1]}),o=(0,e.conditional)({comment:[{codes:(0,t.readBytes)(2)},i]},function(c){var e=(0,t.peekBytes)(2)(c);return 33===e[0]&&254===e[1]}),f=[{header:[{signature:(0,t.readString)(3)},{version:(0,t.readString)(3)}]},{lsd:[{width:(0,t.readUnsigned)(!0)},{height:(0,t.readUnsigned)(!0)},{gct:(0,t.readBits)({exists:{index:0},resolution:{index:1,length:3},sort:{index:4},size:{index:5,length:3}})},{backgroundColorIndex:(0,t.readByte)()},{pixelAspectRatio:(0,t.readByte)()}]},(0,e.conditional)({gct:(0,t.readArray)(3,function(c,e){return Math.pow(2,e.lsd.gct.size+1)})},function(c,e){return e.lsd.gct.exists}),{frames:(0,e.loop)([n,a,o,r,s],function(c){var e=(0,t.peekByte)()(c);return 33===e||44===e})}];c.default=f}(oC)),(c=oC)&&c.__esModule?c:{default:c}),t=lC(),i=pC(),n=(gC||(gC=1,Object.defineProperty(mC,"__esModule",{value:!0}),mC.deinterlace=void 0,mC.deinterlace=function(c,e){for(var t=new Array(c.length),i=c.length/e,n=function(i,n){var r=c.slice(n*e,(n+1)*e);t.splice.apply(t,[i*e,e].concat(r))},r=[0,4,2,1],s=[8,8,4,2],a=0,o=0;o<4;o++)for(var f=r[o];f<i;f+=s[o])n(f,a),a++;return t}),mC),r=(bC||(bC=1,Object.defineProperty(yC,"__esModule",{value:!0}),yC.lzw=void 0,yC.lzw=function(c,e,t){var i,n,r,s,a,o,f,l,d,h,u,p,g,m,b,v,y=4096,_=t,x=new Array(t),S=new Array(y),w=new Array(y),C=new Array(4097);for(a=1+(n=1<<(h=c)),i=n+2,f=-1,r=(1<<(s=h+1))-1,l=0;l<n;l++)S[l]=0,w[l]=l;for(u=p=g=m=b=v=0,d=0;d<_;){if(0===m){if(p<s){u+=e[v]<<p,p+=8,v++;continue}if(l=u&r,u>>=s,p-=s,l>i||l==a)break;if(l==n){r=(1<<(s=h+1))-1,i=n+2,f=-1;continue}if(-1==f){C[m++]=w[l],f=l,g=l;continue}for(o=l,l==i&&(C[m++]=g,l=f);l>n;)C[m++]=w[l],l=S[l];g=255&w[l],C[m++]=g,i<y&&(S[i]=f,w[i]=g,0===(++i&r)&&i<y&&(s++,r+=i)),f=o}m--,x[b++]=C[m],d++}for(d=b;d<_;d++)x[d]=0;return x}),yC);aC.parseGIF=function(c){var n=new Uint8Array(c);return(0,t.parse)((0,i.buildStream)(n),e.default)};var s=function(c,e,t){if(c.image){var i=c.image,s=i.descriptor.width*i.descriptor.height,a=(0,r.lzw)(i.data.minCodeSize,i.data.blocks,s);i.descriptor.lct.interlaced&&(a=(0,n.deinterlace)(a,i.descriptor.width));var o={pixels:a,dims:{top:c.image.descriptor.top,left:c.image.descriptor.left,width:c.image.descriptor.width,height:c.image.descriptor.height}};return i.descriptor.lct&&i.descriptor.lct.exists?o.colorTable=i.lct:o.colorTable=e,c.gce&&(o.delay=10*(c.gce.delay||10),o.disposalType=c.gce.extras.disposal,c.gce.extras.transparentColorGiven&&(o.transparentIndex=c.gce.transparentColorIndex)),t&&(o.patch=function(c){for(var e=c.pixels.length,t=new Uint8ClampedArray(4*e),i=0;i<e;i++){var n=4*i,r=c.pixels[i],s=c.colorTable[r]||[0,0,0];t[n]=s[0],t[n+1]=s[1],t[n+2]=s[2],t[n+3]=r!==c.transparentIndex?255:0}return t}(o)),o}console.warn("gif frame does not have associated image.")};return aC.decompressFrame=s,aC.decompressFrames=function(c,e){return c.frames.filter(function(c){return c.image}).map(function(t){return s(t,c.gct,e)})},aC}();class xC{constructor(c){if(!c||!c.length)throw new Error("Invalid frames");const[{texture:{width:e,height:t}}]=c;this.width=e,this.height=t,this.frames=c,this.textures=this.frames.map(c=>c.texture),this.totalFrames=this.frames.length,this.duration=this.frames[this.totalFrames-1].end}destroy(){for(const c of this.textures)c.destroy(!0);for(const c of this.frames)c.texture=null;this.frames.length=0,this.textures.length=0,Object.assign(this,{frames:null,textures:null,width:0,height:0,duration:0,totalFrames:0})}static from(c,e){if(!c||0===c.byteLength)throw new Error("Invalid buffer");const t=_C.parseGIF(c);(c=>{var e;let t=null;for(const i of c.frames)t=null!=(e=i.gce)?e:t,"image"in i&&!("gce"in i)&&(i.gce=t)})(t);const i=_C.decompressFrames(t,!0),n=[],r=t.lsd.width,s=t.lsd.height,a=Fe.get().createCanvas(r,s),o=a.getContext("2d",{willReadFrequently:!0}),f=Fe.get().createCanvas(),l=f.getContext("2d");let d=0,h=null;const u=null!=e?e:{},{fps:p=30}=u,g=__objRest(u,["fps"]),m=1e3/p;for(let b=0;b<i.length;b++){const{disposalType:c=2,delay:e=m,patch:t,dims:{width:a,height:u,left:p,top:v}}=i[b];f.width=a,f.height=u,l.clearRect(0,0,a,u);const y=l.createImageData(a,u);y.data.set(t),l.putImageData(y,0,0),3===c&&(h=o.getImageData(0,0,r,s)),o.drawImage(f,p,v);const _=o.getImageData(0,0,r,s);2===c?o.clearRect(0,0,r,s):3===c&&o.putImageData(h,0,0);const x=Fe.get().createCanvas(_.width,_.height);x.getContext("2d").putImageData(_,0,0),n.push({start:d,end:d+e,texture:new cc({source:new Ie(__spreadValues({resource:x},g))})}),d+=e}return a.width=a.height=0,f.width=f.height=0,new xC(n)}}const SC={extension:s.Asset,detection:{test:()=>__async(null,null,function*(){return!0}),add:c=>__async(null,null,function*(){return[...c,"gif"]}),remove:c=>__async(null,null,function*(){return c.filter(c=>"gif"!==c)})},loader:{name:"gifLoader",id:"gif",test:c=>".gif"===Ke.extname(c)||c.startsWith("data:image/gif"),load:(c,e)=>__async(null,null,function*(){const t=yield Fe.get().fetch(c),i=yield t.arrayBuffer();return xC.from(i,null==e?void 0:e.data)}),unload:c=>__async(null,null,function*(){c.destroy()})}},wC=class c extends we{constructor(...e){const t=e[0]instanceof xC?{source:e[0]}:e[0],i=Object.assign({},c.defaultOptions,t),{source:n,fps:r,loop:s,animationSpeed:a,autoPlay:o,autoUpdate:f,onComplete:l,onFrameChange:d,onLoop:h}=i,u=__objRest(i,["source","fps","loop","animationSpeed","autoPlay","autoUpdate","onComplete","onFrameChange","onLoop"]);super(__spreadValues({texture:cc.EMPTY},u)),this.animationSpeed=1,this.loop=!0,this.duration=0,this.autoPlay=!0,this.dirty=!1,this._currentFrame=0,this._autoUpdate=!1,this._isConnectedToTicker=!1,this._playing=!1,this._currentTime=0,this.onRender=()=>this._updateFrame(),this.texture=n.textures[0],this.duration=n.frames[n.frames.length-1].end,this._source=n,this._playing=!1,this._currentTime=0,this._isConnectedToTicker=!1,Object.assign(this,{fps:r,loop:s,animationSpeed:a,autoPlay:o,autoUpdate:f,onComplete:l,onFrameChange:d,onLoop:h}),this.currentFrame=0,o&&this.play()}stop(){this._playing&&(this._playing=!1,this._autoUpdate&&this._isConnectedToTicker&&(Ge.shared.remove(this.update,this),this._isConnectedToTicker=!1))}play(){this._playing||(this._playing=!0,this._autoUpdate&&!this._isConnectedToTicker&&(Ge.shared.add(this.update,this,De.HIGH),this._isConnectedToTicker=!0),this.loop||this.currentFrame!==this._source.frames.length-1||(this._currentTime=0))}get progress(){return this._currentTime/this.duration}get playing(){return this._playing}update(c){var e,t;if(!this._playing)return;const i=this.animationSpeed*c.deltaTime/Ge.targetFPMS,n=this._currentTime+i,r=n%this.duration,s=this._source.frames.findIndex(c=>c.start<=r&&c.end>r);n>=this.duration?this.loop?(this._currentTime=r,this._updateFrameIndex(s),null==(e=this.onLoop)||e.call(this)):(this._currentTime=this.duration,this._updateFrameIndex(this.totalFrames-1),null==(t=this.onComplete)||t.call(this),this.stop()):(this._currentTime=r,this._updateFrameIndex(s))}_updateFrame(){this.dirty&&(this.texture=this._source.frames[this._currentFrame].texture,this.dirty=!1)}get autoUpdate(){return this._autoUpdate}set autoUpdate(c){c!==this._autoUpdate&&(this._autoUpdate=c,!this._autoUpdate&&this._isConnectedToTicker?(Ge.shared.remove(this.update,this),this._isConnectedToTicker=!1):this._autoUpdate&&!this._isConnectedToTicker&&this._playing&&(Ge.shared.add(this.update,this),this._isConnectedToTicker=!0))}get currentFrame(){return this._currentFrame}set currentFrame(c){this._updateFrameIndex(c),this._currentTime=this._source.frames[c].start}get source(){return this._source}_updateFrameIndex(c){var e;if(c<0||c>=this.totalFrames)throw new Error(`Frame index out of range, expecting 0 to ${this.totalFrames}, got ${c}`);this._currentFrame!==c&&(this._currentFrame=c,this.dirty=!0,null==(e=this.onFrameChange)||e.call(this,c))}get totalFrames(){return this._source.totalFrames}destroy(c=!1){this.stop(),super.destroy(),c&&this._source.destroy();const e=null;this._source=e,this.onComplete=e,this.onFrameChange=e,this.onLoop=e}clone(){const e=new c({source:this._source,autoUpdate:this._autoUpdate,loop:this.loop,autoPlay:this.autoPlay,animationSpeed:this.animationSpeed,onComplete:this.onComplete,onFrameChange:this.onFrameChange,onLoop:this.onLoop});return e.dirty=!0,e}};wC.defaultOptions={fps:30,loop:!0,animationSpeed:1,autoPlay:!0,autoUpdate:!0,onComplete:null,onFrameChange:null,onLoop:null};let CC=wC;f.add(SC);class AC extends CC{constructor(c,e){super(e),__publicField(this,"throttledUpdateScale"),__publicField(this,"fixedWidth",0),__publicField(this,"fixedHeight",0),__publicField(this,"isFixedSizeSet",!1),__publicField(this,"sizeFixed",!0),__publicField(this,"baselineScale",1),this.appService=c,this.anchor.set(.5),this.visible=!1,this.throttledUpdateScale=P_(this.updateScale.bind(this),30,{leading:!0,trailing:!0}),this.registerScaleListener()}setFixedSize(c,e){this.fixedWidth=c,this.fixedHeight=e,this.isFixedSizeSet=!0,this.applySize()}setSizeFixed(c){this.sizeFixed=c,this.baselineScale=1,(c&&this.isFixedSizeSet||!c&&this.isFixedSizeSet)&&this.applySize()}set width(c){this.isFixedSizeSet?V_.warn("EnhancedGifSprite: 使用 setFixedSize() 方法来设置宽度"):this.setFixedSize(c,this.fixedHeight||c)}set height(c){this.isFixedSizeSet?V_.warn("EnhancedGifSprite: 使用 setFixedSize() 方法来设置高度"):this.setFixedSize(this.fixedWidth||c,c)}get width(){return this.fixedWidth||super.width}get height(){return this.fixedHeight||super.height}registerScaleListener(){this.appService.emitter.on("antiScale",this.throttledUpdateScale)}applySize(){if(!this.isFixedSizeSet||!this.texture||0===this.texture.width||0===this.texture.height)return;const c=this.fixedWidth/this.texture.width,e=this.fixedHeight/this.texture.height;if(this.sizeFixed){const t=this.appService.currentScale;if(0===t)return;const i=c/t,n=e/t;super.scale.set(i,n)}else super.scale.set(c/this.baselineScale,e/this.baselineScale)}updateScale(c){this.sizeFixed&&(this.isFixedSizeSet?this.applySize():0!==c&&super.scale.set(1/c))}static createFromSrc(c,e,t){return __async(this,null,function*(){try{const i=yield Oa.load(e),n=new AC(c,{source:i});return void 0!==t.sizeFixed&&n.setSizeFixed(t.sizeFixed),n.setFixedSize(t.width,t.height),n}catch(i){throw V_.error(`Failed to load GIF "${e}":`,i),i}})}draw(c,e){const{x:t,y:i,rotation:n=0}=c;e&&!this.visible?this.visible=e():e||this.visible||(this.visible=!0),this.rotation=n,this.position.set(t,i)}destroy(c){this.appService.emitter.off("antiScale",this.throttledUpdateScale),super.destroy(c)}}class TC extends AC{constructor(c,e,t){super(c,{source:e}),__publicField(this,"elementData"),__publicField(this,"clickHandler",null),__publicField(this,"unsubscribeMapRotation",null),__publicField(this,"userRotation",0),this.elementData=t}initialize(){return __async(this,null,function*(){void 0!==this.elementData.sizeFixed&&this.setSizeFixed(this.elementData.sizeFixed),this.setFixedSize(this.elementData.width,this.elementData.height);const c=this.elementData.anchor||{x:.5,y:.5};this.anchor.set(c.x,c.y),this.position.set(this.elementData.x,this.elementData.y),void 0!==this.elementData.rotation&&(this.userRotation=this.elementData.rotation),void 0!==this.elementData.opacity&&(this.alpha=this.elementData.opacity),this.applyRotation(this.appService.runtime.mapRotation),this.unsubscribeMapRotation=oS(this.appService.runtime,"mapRotation",c=>{this.applyRotation(c)}),this.visible=!0,this.elementData.interactive?this.setupClickHandler():this.eventMode="none"})}applyRotation(c){const e=-c*Math.PI/180;this.rotation=this.userRotation+e}setupClickHandler(){this.clickHandler&&this.clickHandler.destroy(),this.clickHandler=new dw(this,{onClick:()=>this.handleClick(),stopPropagation:!1})}handleClick(){var c,e;null==(e=null==(c=this.appService.events)?void 0:c.onClickCustomElement)||e.call(c,this.getElementData())}getElementData(){return __spreadValues({},this.elementData)}updateElementData(c){return __async(this,null,function*(){const e=this.elementData;if(this.elementData=c,e.src!==c.src)throw new Error("GIF source change requires recreation of instance");e.sizeFixed!==c.sizeFixed&&void 0!==c.sizeFixed&&this.setSizeFixed(c.sizeFixed),e.width===c.width&&e.height===c.height||this.setFixedSize(c.width,c.height);const t=c.anchor||{x:.5,y:.5},i=e.anchor||{x:.5,y:.5};t.x===i.x&&t.y===i.y||this.anchor.set(t.x,t.y),this.position.set(c.x,c.y),void 0!==c.rotation&&(this.userRotation=c.rotation,this.applyRotation(this.appService.runtime.mapRotation)),void 0!==c.opacity&&(this.alpha=c.opacity),c.interactive?this.clickHandler||this.setupClickHandler():(this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=null),this.eventMode="none")})}isSameData(c){const e=this.elementData.anchor||{x:.5,y:.5},t=c.anchor||{x:.5,y:.5};return this.elementData.id===c.id&&this.elementData.type===c.type&&this.elementData.src===c.src&&this.elementData.x===c.x&&this.elementData.y===c.y&&this.elementData.width===c.width&&this.elementData.height===c.height&&this.elementData.rotation===c.rotation&&this.elementData.opacity===c.opacity&&this.elementData.interactive===c.interactive&&this.elementData.sizeFixed===c.sizeFixed&&e.x===t.x&&e.y===t.y}destroy(){this.unsubscribeMapRotation&&(this.unsubscribeMapRotation(),this.unsubscribeMapRotation=null),this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=null),super.destroy()}}class PC extends ow{constructor(c,e){super(c),__publicField(this,"elementData"),__publicField(this,"clickHandler",null),__publicField(this,"unsubscribeMapRotation",null),__publicField(this,"userRotation",0),this.appService=c,this.elementData=e}initialize(){return __async(this,null,function*(){yield this.loadTextureAndSetSize(this.elementData.src,{width:this.elementData.width,height:this.elementData.height,sizeFixed:this.elementData.sizeFixed});const c=this.elementData.anchor||{x:.5,y:.5};this.anchor.set(c.x,c.y),this.position.set(this.elementData.x,this.elementData.y),void 0!==this.elementData.rotation&&(this.userRotation=this.elementData.rotation),void 0!==this.elementData.opacity&&(this.alpha=this.elementData.opacity),this.applyRotation(this.appService.runtime.mapRotation),this.unsubscribeMapRotation=oS(this.appService.runtime,"mapRotation",c=>{this.applyRotation(c)}),this.visible=!0,this.elementData.interactive?this.setupClickHandler():this.eventMode="none"})}applyRotation(c){const e=-c*Math.PI/180;this.rotation=this.userRotation+e}setupClickHandler(){this.clickHandler&&this.clickHandler.destroy(),this.clickHandler=new dw(this,{onClick:()=>this.handleClick(),stopPropagation:!1})}handleClick(){var c,e;null==(e=null==(c=this.appService.events)?void 0:c.onClickCustomElement)||e.call(c,this.getElementData())}getElementData(){return __spreadValues({},this.elementData)}updateElementData(c){return __async(this,null,function*(){const e=this.elementData;this.elementData=c,e.src!==c.src?yield this.loadTextureAndSetSize(c.src,{width:c.width,height:c.height,sizeFixed:c.sizeFixed}):(e.sizeFixed!==c.sizeFixed&&void 0!==c.sizeFixed&&this.setSizeFixed(c.sizeFixed),e.width===c.width&&e.height===c.height||this.setFixedSize(c.width,c.height));const t=c.anchor||{x:.5,y:.5},i=e.anchor||{x:.5,y:.5};t.x===i.x&&t.y===i.y||this.anchor.set(t.x,t.y),this.position.set(c.x,c.y),void 0!==c.rotation&&(this.userRotation=c.rotation,this.applyRotation(this.appService.runtime.mapRotation)),void 0!==c.opacity&&(this.alpha=c.opacity),c.interactive?this.clickHandler||this.setupClickHandler():(this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=null),this.eventMode="none")})}isSameData(c){const e=this.elementData.anchor||{x:.5,y:.5},t=c.anchor||{x:.5,y:.5};return this.elementData.id===c.id&&this.elementData.type===c.type&&this.elementData.src===c.src&&this.elementData.x===c.x&&this.elementData.y===c.y&&this.elementData.width===c.width&&this.elementData.height===c.height&&this.elementData.rotation===c.rotation&&this.elementData.opacity===c.opacity&&this.elementData.interactive===c.interactive&&this.elementData.sizeFixed===c.sizeFixed&&e.x===t.x&&e.y===t.y}destroy(){this.unsubscribeMapRotation&&(this.unsubscribeMapRotation(),this.unsubscribeMapRotation=null),this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=null),super.destroy()}}class MC extends Ga{constructor(c,e){super(e),__publicField(this,"throttledUpdateScale"),__publicField(this,"fixedWidth",0),__publicField(this,"fixedHeight",0),__publicField(this,"isFixedSizeSet",!1),__publicField(this,"userCenterX",0),__publicField(this,"userCenterY",0),__publicField(this,"sizeFixed",!0),this.appService=c,this.anchor.set(0,0),this.throttledUpdateScale=P_(this.updateScale.bind(this),30,{leading:!0,trailing:!0}),this.registerScaleListener()}setFixedSize(c,e){this.fixedWidth=c,this.fixedHeight=e,this.isFixedSizeSet=!0,this.applyFixedSize(),this.updatePositionFromCenter()}setCenterPosition(c,e){this.userCenterX=c,this.userCenterY=e,this.updatePositionFromCenter()}setSizeFixed(c){this.sizeFixed=c,this.isFixedSizeSet&&(this.applyFixedSize(),this.updatePositionFromCenter())}getIsFixedSizeSet(){return this.isFixedSizeSet}updatePositionFromCenter(){if(!this.isFixedSizeSet)return void this.position.set(this.userCenterX,this.userCenterY);const c=this.appService.currentScale;let e,t;this.sizeFixed?(e=this.fixedWidth/2/c,t=this.fixedHeight/2/c):(e=this.fixedWidth/2,t=this.fixedHeight/2),this.position.set(this.userCenterX-e,this.userCenterY-t)}registerScaleListener(){this.appService.emitter.on("antiScale",this.throttledUpdateScale)}applyFixedSize(){if(!this.isFixedSizeSet)return;const c=this.appService.currentScale;if(0!==c){if(this.sizeFixed){const e=1/c;this.scale.set(e)}else this.scale.set(1);this.element&&(this.element.style.width=`${this.fixedWidth}px`,this.element.style.height=`${this.fixedHeight}px`)}}updateScale(c){this.isFixedSizeSet&&0!==c&&(this.applyFixedSize(),this.updatePositionFromCenter())}updateTransform(c){return super.updateTransform(c)}destroy(c){this.appService.emitter.off("antiScale",this.throttledUpdateScale),super.destroy(c)}}class EC extends MC{constructor(c,e){const t=document.createElement("div");EC.setupDefaultStyles(t,e),t.innerHTML=e.htmlContent,super(c,{element:t}),__publicField(this,"elementData"),__publicField(this,"domClickHandler",null),__publicField(this,"resizeObserver",null),__publicField(this,"debugMarker",null),__publicField(this,"unsubscribeMapRotation",null),__publicField(this,"userRotation",0),this.elementData=e}initialize(){return __async(this,null,function*(){var c;this.alpha=0,this.elementData.width&&this.elementData.height?(this.setFixedSize(this.elementData.width,this.elementData.height),this.setCenterPosition(this.elementData.x,this.elementData.y),this.setSizeFixed(null==(c=this.elementData.sizeFixed)||c),this.waitForElementInsertion()):(this.position.set(this.elementData.x,this.elementData.y),this.setupAutoSize()),void 0!==this.elementData.rotation&&(this.userRotation=this.elementData.rotation),this.applyRotation(this.appService.runtime.mapRotation),this.unsubscribeMapRotation=oS(this.appService.runtime,"mapRotation",c=>{this.applyRotation(c)}),this.elementData.interactive?this.setupClickHandler():this.eventMode="none"})}applyRotation(c){const e=-c*Math.PI/180;this.rotation=this.userRotation+e}setupAutoSize(){this.element&&(this.element.style.width="auto",this.element.style.height="auto",this.waitForElementDimensions())}waitForElementInsertion(){if(!this.element)return;const c=()=>{this.element&&(this.element.isConnected?this.showElement():requestAnimationFrame(c))};requestAnimationFrame(c)}waitForElementDimensions(){this.element&&("undefined"!=typeof ResizeObserver?(this.resizeObserver=new ResizeObserver(c=>{var e,t;const i=c[0];i&&i.contentRect.width>0&&i.contentRect.height>0&&(this.setFixedSize(i.contentRect.width,i.contentRect.height),this.setCenterPosition(this.elementData.x,this.elementData.y),this.setSizeFixed(null==(e=this.elementData.sizeFixed)||e),0===this.alpha&&this.showElement(),null==(t=this.resizeObserver)||t.disconnect(),this.resizeObserver=null)}),this.resizeObserver.observe(this.element)):this.pollForElementDimensions())}pollForElementDimensions(){if(!this.element)return;const c=()=>{var e;if(!this.element)return;if(!this.element.isConnected)return void requestAnimationFrame(c);const t=this.element.getBoundingClientRect();t.width>0&&t.height>0?(this.setFixedSize(t.width,t.height),this.setCenterPosition(this.elementData.x,this.elementData.y),this.setSizeFixed(null==(e=this.elementData.sizeFixed)||e),0===this.alpha&&this.showElement()):requestAnimationFrame(c)};requestAnimationFrame(c)}showElement(){var c,e;this.alpha=null!=(c=this.elementData.opacity)?c:1,this.element.style.pointerEvents=this.elementData.interactive?"auto":"none",this.interactive=null!=(e=this.elementData.interactive)&&e,this.elementData.interactive&&this.element&&(this.element.style.setProperty("-webkit-tap-highlight-color","transparent"),this.element.style.setProperty("-webkit-touch-callout","none")),this.appService.getApp().renderOnceNextFrame()}setupClickHandler(){this.element&&(this.domClickHandler=c=>{c.preventDefault(),c.stopPropagation(),this.handleClick()},this.element.addEventListener("click",this.domClickHandler))}handleClick(){var c,e;null==(e=null==(c=this.appService.events)?void 0:c.onClickCustomElement)||e.call(c,this.getElementData())}getElementData(){return __spreadValues({},this.elementData)}updateElementData(c){return __async(this,null,function*(){var e,t;const i=this.elementData;this.elementData=c,i.htmlContent!==c.htmlContent&&this.element&&(this.element.innerHTML=c.htmlContent,c.width&&c.height||this.waitForElementDimensions()),i.width===c.width&&i.height===c.height||(c.width&&c.height?(this.setFixedSize(c.width,c.height),this.element&&(this.element.style.width=`${c.width}px`,this.element.style.height=`${c.height}px`)):this.setupAutoSize()),c.width&&c.height||this.getIsFixedSizeSet()?this.setCenterPosition(c.x,c.y):this.position.set(c.x,c.y),i.sizeFixed!==c.sizeFixed&&void 0!==c.sizeFixed&&this.setSizeFixed(c.sizeFixed),this.userRotation=null!=(e=c.rotation)?e:0,this.applyRotation(this.appService.runtime.mapRotation),this.alpha=null!=(t=c.opacity)?t:1,c.interactive?this.domClickHandler||this.setupClickHandler():(this.eventMode="none",this.domClickHandler&&this.element&&(this.element.removeEventListener("click",this.domClickHandler),this.domClickHandler=null))})}isSameData(c){return this.elementData.id===c.id&&this.elementData.type===c.type&&this.elementData.htmlContent===c.htmlContent&&this.elementData.x===c.x&&this.elementData.y===c.y&&this.elementData.width===c.width&&this.elementData.height===c.height&&this.elementData.rotation===c.rotation&&this.elementData.opacity===c.opacity&&this.elementData.interactive===c.interactive&&this.elementData.sizeFixed===c.sizeFixed}static setupDefaultStyles(c,e){const t={position:"relative",boxSizing:"border-box",webkitFontSmoothing:"antialiased",textRendering:"optimizeLegibility",background:"transparent",userSelect:"auto",webkitUserSelect:"auto"};e.width&&e.height?(t.width=`${e.width}px`,t.height=`${e.height}px`,t.overflow="hidden"):(t.width=e.width?`${e.width}px`:"auto",t.height=e.height?`${e.height}px`:"auto",t.overflow="visible"),Object.assign(c.style,t),c.style.setProperty("-webkit-tap-highlight-color","transparent"),c.style.setProperty("-webkit-touch-callout","none")}destroy(){this.unsubscribeMapRotation&&(this.unsubscribeMapRotation(),this.unsubscribeMapRotation=null),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),this.domClickHandler&&this.element&&(this.element.removeEventListener("click",this.domClickHandler),this.domClickHandler=null),this.debugMarker&&(this.debugMarker.destroy(),this.debugMarker=null),super.destroy()}}class RC{constructor(c){__publicField(this,"customElementsMap",new Map),__publicField(this,"gifTicker",null),__publicField(this,"gifElements",new Set),this.appService=c}drawCustomElements(c){return __async(this,null,function*(){if(!c||0===c.length)return void this.clearAllCustomElements();const e=new Set(c.map(c=>c.id)),t=Array.from(this.customElementsMap.keys());for(const c of t)e.has(c)||this.removeCustomElement(c);const i=c.map(c=>__async(this,null,function*(){const e=this.customElementsMap.get(c.id);e?this.isSameData(e,c)||("gif"===c.type&&e.getElementData().src!==c.src?(this.removeCustomElement(c.id),yield this.addNewCustomElement(c)):yield this.updateElementData(e,c)):yield this.addNewCustomElement(c)}));yield Promise.all(i),this.updateGifTicker()})}clearAllCustomElements(){const c=this.appService;this.customElementsMap.forEach(e=>{e instanceof TC?c.appContainer.removeFromLayer(cw,e):c.appContainer.removeFromLayer($S,e),e.destroy()}),this.customElementsMap.clear(),this.gifElements.clear(),this.stopGifTicker()}addNewCustomElement(c){return __async(this,null,function*(){const e=this.appService;let t;switch(c.type){case"image":t=new PC(this.appService,c);break;case"gif":{const e=yield Oa.load(c.src);t=new TC(this.appService,e,c);break}case"html":t=new EC(this.appService,c);break;default:throw new Error(`Unsupported custom element type: ${c.type}`)}yield t.initialize(),this.customElementsMap.set(c.id,t),t instanceof TC?(e.appContainer.addToLayer(cw,t),this.gifElements.add(t)):e.appContainer.addToLayer($S,t)})}removeCustomElement(c){const e=this.appService,t=this.customElementsMap.get(c);t&&(t instanceof TC?(this.gifElements.delete(t),e.appContainer.removeFromLayer(cw,t)):e.appContainer.removeFromLayer($S,t),t.destroy(),this.customElementsMap.delete(c))}isSameData(c,e){return c.getElementData().type===e.type&&(("image"===e.type&&c instanceof PC||"gif"===e.type&&c instanceof TC||"html"===e.type&&c instanceof EC)&&c.isSameData(e))}updateElementData(c,e){return __async(this,null,function*(){if("image"===e.type&&c instanceof PC)yield c.updateElementData(e);else if("gif"===e.type&&c instanceof TC)yield c.updateElementData(e);else{if(!("html"===e.type&&c instanceof EC))throw new Error("Element type mismatch during update");yield c.updateElementData(e)}})}updateGifTicker(){this.gifElements.size>0?this.startGifTicker():this.stopGifTicker()}startGifTicker(){var c;(null==(c=this.gifTicker)?void 0:c.started)||(this.gifTicker?this.gifTicker.maxFPS=1:(this.gifTicker=new Ge,this.gifTicker.maxFPS=1,this.gifTicker.add(()=>{this.renderGifContainer()})),this.gifTicker.start())}stopGifTicker(){var c;(null==(c=this.gifTicker)?void 0:c.started)&&(V_.log("⏸️ [GifTicker] 停止 GIF 专用渲染"),this.gifTicker.stop())}renderGifContainer(){const c=this.appService;if(0===this.gifElements.size)return;const e=c.getApp();e.renderer.render(e.stage)}destroy(){this.stopGifTicker(),this.gifTicker&&(this.gifTicker.destroy(),this.gifTicker=null),this.clearAllCustomElements()}}class kC extends xe{constructor(c,e){var t;super(),__publicField(this,"roomId"),__publicField(this,"roomIndex"),__publicField(this,"appService"),__publicField(this,"nameText"),__publicField(this,"iconSprite",null),__publicField(this,"iconWrapper",null),__publicField(this,"iconBg",null),this.appService=c,this.roomId=e.id,this.roomIndex=e.index;const{nameLabel:i,type:n}=c.roomConfig,{showRoomType:r}=c.runtime,s=null!=(t=e.colorIndex)?t:e.index,a=this.getRoomNameColor(s),o=new Df({fontSize:i.fontSize,fontFamily:i.fontFamily,fontWeight:i.fontWeight,fill:a,align:"center"}),f=e.name||"Unknown";this.nameText=new Wf({text:f,style:o}),this.nameText.anchor.set(.5),r&&null!=e.type&&(null==n?void 0:n.assets)&&n.assets[e.type]&&this.createIcon(e.type,a),this.addChild(this.nameText),this.layout()}createIcon(c,e){const{type:t}=this.appService.roomConfig,i=t.iconSize||14;this.iconWrapper||(this.iconWrapper=new xe,this.addChild(this.iconWrapper)),t.container.visible?(this.iconBg||(this.iconBg=new _o,this.iconWrapper.addChild(this.iconBg)),this.drawIconBg(e)):this.iconBg&&(this.iconBg.destroy(),this.iconBg=null),this.iconSprite||(this.iconSprite=new ow(this.appService),this.iconSprite.anchor.set(.5),this.iconWrapper.addChild(this.iconSprite)),this.iconSprite.visible=!0,this.iconSprite.tint=t.container.visible?"#ffffff":e,this.iconSprite.setFixedSize(i,i),this.iconSprite.loadTextureAndSetSize(t.assets[c],{width:i,height:i,sizeFixed:!1}).then(()=>{this.iconSprite&&(this.iconSprite.visible=this.appService.runtime.showRoomType,this.layout())}),t.container&&this.iconSprite.position.set(0,0)}drawIconBg(c){const{type:e}=this.appService.roomConfig;if(!this.iconBg||!e.container.visible)return;const{size:t,borderRadius:i}=e.container;this.iconBg.clear().roundRect(-t/2,-t/2,t,t,i).fill(c)}layout(){if(!this.iconWrapper||!this.iconWrapper.visible)return void this.nameText.position.set(0,0);if(!(this.iconSprite&&this.iconSprite.visible||this.iconBg&&this.iconBg.visible))return void this.nameText.position.set(0,0);const{gap:c=4,position:e="left"}=this.appService.roomConfig.type,t=this.nameText.width,i=this.iconWrapper.width,n=-(i+c+t)/2;"left"===e?(this.iconWrapper.x=n+i/2,this.nameText.x=n+i+c+t/2):(this.nameText.x=n+t/2,this.iconWrapper.x=n+t+c+i/2),this.iconWrapper.y=0,this.nameText.y=0}updateName(c){this.nameText.text=c,this.layout()}refreshColor(c){var e;const{type:t}=this.appService.roomConfig,i=this.appService.getRoomData(this.roomId),n=null!=(e=null==i?void 0:i.colorIndex)?e:this.roomIndex,r=this.getRoomNameColor(n,c);this.nameText.style.fill=r,this.iconBg&&this.drawIconBg(r),this.iconSprite&&(this.iconSprite.tint=t.container.visible?"#ffffff":r)}getRoomNameColor(c,e){const{colors:t}=this.appService.roomConfig,{enableRoomSelection:i,selectRoomIds:n}=this.appService.runtime;if(e)return e;if(i)return!n.includes(this.roomId)&&t.nameInactive?t.nameInactive[c%t.nameInactive.length]:t.name[c%t.name.length];const r=t.nameNormal||t.name;return r[c%r.length]}updateRoomType(c){return __async(this,null,function*(){var e;const{type:t}=this.appService.roomConfig;if(this.appService.runtime.showRoomType&&null!=c&&(null==t?void 0:t.assets)&&t.assets[c]){const t=this.appService.getRoomData(this.roomId),i=null!=(e=null==t?void 0:t.colorIndex)?e:this.roomIndex,n=this.getRoomNameColor(i);this.createIcon(c,n),this.iconWrapper&&(this.iconWrapper.visible=!0)}else this.iconWrapper&&(this.iconWrapper.visible=!1);this.layout()})}updateRoomTypeVisibility(c){var e;if(this.iconWrapper)this.iconWrapper.visible=c,this.layout();else if(c){const c=this.appService.getRoomData(this.roomId);c&&this.updateRoomType(null!=(e=c.type)?e:null)}}destroy(c){this.iconBg&&(this.iconBg.destroy(),this.iconBg=null),this.iconSprite&&(this.iconSprite.destroy(),this.iconSprite=null),this.iconWrapper&&(this.iconWrapper.destroy(),this.iconWrapper=null),super.destroy(c)}}class FC extends xe{constructor(c,e){var t;super(),__publicField(this,"background"),__publicField(this,"foldedIndicator"),__publicField(this,"propertyIcons",new Map),__publicField(this,"orderContainer"),__publicField(this,"orderBackground"),__publicField(this,"orderText"),__publicField(this,"isFolded",!1),__publicField(this,"roomId"),__publicField(this,"roomIndex"),__publicField(this,"isDestroyed",!1),this.appService=c;const i=this.appService.roomConfig;this.roomId=e.id,this.roomIndex=e.index,this.background=new _o,this.foldedIndicator=new _o,this.foldedIndicator.visible=!1;const{property:n}=i,r=null!=(t=e.colorIndex)?t:e.index,s=this.getIconColor(r);this.initializePropertyIcons(n.displayOrders,s);const a="auto"===n.cleanOrder.color?i.colors.active[r%i.colors.active.length]:n.cleanOrder.color;this.orderContainer=new xe,this.orderBackground=new _o,this.orderText=new Wf({text:"",style:new Df({fontSize:n.cleanOrder.fontSize,fontFamily:n.cleanOrder.fontFamily,fontWeight:n.cleanOrder.fontWeight,fill:a,align:"center",trim:!0})}),this.orderText.anchor.set(.5,.5),this.orderContainer.addChild(this.orderBackground),this.orderContainer.addChild(this.orderText),this.addChild(this.background),this.addChild(this.foldedIndicator),this.propertyIcons.forEach(({sprite:c})=>{this.addChild(c)}),this.addChild(this.orderContainer),this.visible=this.appService.runtimeSnapshot.showRoomProperty}initializePropertyIcons(c,e){const t=["cleanMode","suction","cistern","cleanTimes"];c.forEach(c=>{const i=t.includes(c),n=new ow(this.appService);n.tint=e,n.anchor.set(0,0),this.propertyIcons.set(c,{fieldName:c,sprite:n,isBuiltin:i})})}updateProperty(c){return __async(this,null,function*(){this.isDestroyed||this.destroyed||(yield this.updateIcons(c),this.isDestroyed||this.destroyed||this.updateBackground())})}getFieldValue(c,e){if(["cleanMode","suction","cistern","cleanTimes"].includes(e)){const t=c[e];return null!=t?t:null}if(c.customData&&e in c.customData){const t=c.customData[e];return"number"==typeof t?t:null}return null}getAssetAlias(c,e){const t={cleanMode:c=>`cleanMode_${c}`,suction:c=>`fan_${c}`,cistern:c=>`water_${c}`,cleanTimes:c=>`cleanTimes${c}`};return c in t?t[c](e):`custom_${c}_${e}`}shouldShowField(c,e,t){const{showRoomProperty:i}=this.appService.runtimeSnapshot;return null!==t&&(!!i&&!("cleanTimes"===e&&t<=0))}getDisplayElements(c){const{displayOrders:e}=this.appService.roomConfig.property,{showRoomOrder:t}=this.appService.runtimeSnapshot,i=c.order||0,n=[];return t&&i>0&&n.push({element:this.orderContainer,show:!0,isOrder:!0,fieldName:"order"}),e.forEach(e=>{const t=this.propertyIcons.get(e);if(!t||!t.sprite)return;const i=this.getFieldValue(c,e);this.shouldShowField(c,e,i)&&null!==i&&n.push({element:t.sprite,show:!0,isOrder:!1,fieldName:e,value:i})}),{elementsToShow:n,orderValue:i}}updateIcons(c){return __async(this,null,function*(){if(this.isDestroyed||this.destroyed)return;if(this.isFolded)return;const{iconWidth:e,iconHeight:t,container:i,cleanOrder:n,iconGap:r}=this.appService.roomConfig.property,{paddingHorizontal:s,paddingVertical:a}=i,{elementsToShow:o,orderValue:f}=this.getDisplayElements(c);this.orderContainer.visible=!1,this.propertyIcons.forEach(({sprite:c})=>{c.visible=!1});const l=[];if(o.forEach(i=>{var n;if(i.isOrder){this.orderContainer.visible=!0,this.orderText.text=f.toString();const i=null!=(n=c.colorIndex)?n:this.roomIndex,r=this.getIconColor(i);this.orderBackground.clear(),this.orderBackground.setFillStyle({color:r}),this.orderBackground.circle(e/2,t/2,e/2).fill();const s=this.resolveOrderTextColor(i);this.orderText.style.fill=s,this.orderText.position.set(e/2,t/2)}else{const c=this.propertyIcons.get(i.fieldName);if(c&&c.sprite){c.sprite.visible=!0;const n=this.getAssetAlias(i.fieldName,i.value);l.push(c.sprite.loadTextureAndSetSize(n,{width:e,height:t,sizeFixed:!1}))}}}),yield Promise.all(l),this.isDestroyed||this.destroyed)return;let d=s;o.forEach((c,t)=>{const{element:i,isOrder:s}=c;i&&i.position&&(i.position.set(d,a),d+=e,t<o.length-1&&(d+=s?n.gapRight:r))})})}updateBackground(){if(this.isDestroyed||this.destroyed)return;const c=this.appService.roomConfig,{container:e,foldable:t}=c.property,{borderRadius:i,tailHeight:n,tailWidth:r,backgroundColor:s}=e,a=this.calculateContentWidth(),o=this.calculateContentHeight(),f=Math.min(i,a/2,o/2),l=.8*f,d=Math.max(a-2*l,.5*r),h=Math.min(r,a/2,d);if(this.background.clear(),this.background.setFillStyle({color:s}),t){const c=(a-h)/2,e=o+n;this.background.moveTo(f,0),this.background.lineTo(a-f,0),this.background.arcTo(a,0,a,f,f),this.background.lineTo(a,o-f),this.background.arcTo(a,o,a-f,o,f),this.background.lineTo(c+h,o),this.background.lineTo(c+h/2,e),this.background.lineTo(c,o),this.background.lineTo(f,o),this.background.arcTo(0,o,0,o-f,f),this.background.lineTo(0,f),this.background.arcTo(0,0,f,0,f),this.background.closePath()}else this.background.roundRect(0,0,a,o,f);this.background.fill()}calculateContentWidth(){const{iconWidth:c,container:e,cleanOrder:t,iconGap:i}=this.appService.roomConfig.property,{paddingHorizontal:n}=e,r=this.appService.getRoomData(this.roomId);if(!r)return 2*n;const{elementsToShow:s}=this.getDisplayElements(r);let a=n;return s.forEach((e,n)=>{const{isOrder:r}=e;a+=c,n<s.length-1&&(a+=r?t.gapRight:i)}),a+=n,a}calculateContentHeight(){const c=this.appService.roomConfig,{iconHeight:e,container:t}=c.property;return t.paddingVertical+e+t.paddingVertical}getTotalHeight(){const{foldable:c,container:e}=this.appService.roomConfig.property,{tailHeight:t}=e;if(this.isFolded)return t;return this.calculateContentHeight()+(c?t:0)}getTotalWidth(){if(this.isFolded){const{tailWidth:c}=this.appService.roomConfig.property.container,e=this.calculateContentWidth();return Math.min(c,e/2)}return this.calculateContentWidth()}setFolded(c){return __async(this,null,function*(){const{foldable:e}=this.appService.roomConfig.property;if(e)if(this.isFolded=c,c)this.background.visible=!1,this.orderContainer.visible=!1,this.propertyIcons.forEach(({sprite:c})=>{c.visible=!1}),this.foldedIndicator.visible=!0,this.updateFoldedIndicator();else{this.background.visible=!0,this.foldedIndicator.visible=!1,this.foldedIndicator.position.set(0,0),this.updateBackground();const c=this.appService.getRoomData(this.roomId);c&&(yield this.updateIcons(c))}})}isFoldedState(){const{foldable:c}=this.appService.roomConfig.property;return!!c&&this.isFolded}updateFoldedIndicator(){const c=this.appService.roomConfig,{tailHeight:e,tailWidth:t,backgroundColor:i}=c.property.container,n=this.calculateContentWidth(),r=Math.min(t,n/2);this.foldedIndicator.clear(),this.foldedIndicator.setFillStyle({color:i}),this.foldedIndicator.poly([0,e,r,e,r/2,0]).fill(),this.foldedIndicator.position.set(0,0)}resolveOrderTextColor(c){const{property:e,colors:t}=this.appService.roomConfig,{enableRoomSelection:i}=this.appService.runtime;if("auto"===e.cleanOrder.color){const e=i?t.active:t.normal||t.active;return e[c%e.length]}return e.cleanOrder.color}getIconColor(c){const{colors:e}=this.appService.roomConfig,{propertyTheme:t,propertyThemeInactive:i,propertyThemeNormal:n}=e,{enableRoomSelection:r,selectRoomIds:s}=this.appService.runtime;if(r)return!s.includes(this.roomId)&&i?i[c%i.length]:t[c%t.length];const a=n||t;return a[c%a.length]}refreshColor(){var c;const e=this.appService.getRoomData(this.roomId),t=null!=(c=null==e?void 0:e.colorIndex)?c:this.roomIndex,i=this.getIconColor(t);if(this.propertyIcons.forEach(({sprite:c})=>{c.tint=i}),this.orderBackground&&this.orderBackground.visible){const{property:c}=this.appService.roomConfig,e=c.iconWidth,n=c.iconHeight;this.orderBackground.clear(),this.orderBackground.setFillStyle({color:i}),this.orderBackground.circle(e/2,n/2,e/2).fill();const r=this.resolveOrderTextColor(t);this.orderText.style.fill=r}}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.propertyIcons.forEach(({sprite:c})=>{c.destroy()}),this.propertyIcons.clear(),super.destroy({children:!0}))}}class IC extends xe{constructor(c,e){var t;super(),__publicField(this,"background"),__publicField(this,"checkmarkIcon"),__publicField(this,"bubble"),__publicField(this,"roomIndex"),__publicField(this,"roomId"),this.appService=c;const i=this.appService.roomConfig;this.roomId=e.id,this.roomIndex=e.index,this.background=new _o,this.bubble=new _o;const{colors:{selectionIndicatorIcon:n}}=i;this.checkmarkIcon=new ow(this.appService);const r=null!=(t=e.colorIndex)?t:e.index;this.checkmarkIcon.tint=n[r%n.length],this.checkmarkIcon.anchor.set(0,0),this.addChild(this.background),this.addChild(this.bubble),this.addChild(this.checkmarkIcon)}updateIndicator(c){return __async(this,null,function*(){const{roomSelectionMode:e,enableRoomSelection:t,selectRoomIds:i}=this.appService.runtimeSnapshot;if(!t||"checkmark"!==e)return void(this.visible=!1);const n=i.includes(c.id);yield this.showCheckmarkMode(n),this.updateBackground()})}showCheckmarkMode(c){return __async(this,null,function*(){const{selectionIndicator:e}=this.appService.roomConfig,{iconWidth:t,iconHeight:i}=e;if(c){this.visible=!0,this.checkmarkIcon.visible=!0,yield this.checkmarkIcon.loadTextureAndSetSize("checkmark",{width:t,height:i,sizeFixed:!1});const c=e.containerWidth/2,n=e.containerHeight/2;this.checkmarkIcon.position.set(c-t/2,n-i/2)}else this.visible=!1})}updateBackground(){var c;const{selectionIndicator:e,colors:t}=this.appService.roomConfig,{containerWidth:i,containerHeight:n,strokeWidth:r,strokeColor:s,borderRadius:a,tailHeight:o,tailWidth:f}=e,l=this.appService.getRoomData(this.roomId),d=null!=(c=null==l?void 0:l.colorIndex)?c:this.roomIndex,h=t.selectionIndicatorBackground[d%t.selectionIndicatorBackground.length],u="auto"===s?h:s;if(this.checkmarkIcon.tint=t.selectionIndicatorIcon[d%t.selectionIndicatorIcon.length],this.background.clear(),this.bubble.clear(),this.background.setFillStyle({color:h}).roundRect(0,0,i,n,a).fill().setStrokeStyle({color:u,width:r,alignment:0}).stroke(),o>0&&f>0){const c=(i-f)/2;this.bubble.setFillStyle({color:u});const e=n+r;this.bubble.poly([c,e-1,c+f,e-1,c+f/2,e+o]).fill()}}getTotalHeight(){const{selectionIndicator:c}=this.appService.roomConfig,{containerHeight:e,tailHeight:t,strokeWidth:i}=c;return e+i+(t>0?t:0)}getTotalWidth(){const{selectionIndicator:c}=this.appService.roomConfig;return c.containerWidth}refreshColor(){return __async(this,null,function*(){const c=this.appService.getRoomData(this.roomId);c&&(yield this.updateIndicator(c))})}destroy(){var c;null==(c=this.checkmarkIcon)||c.destroy(),super.destroy({children:!0})}}class BC extends xe{constructor(c,e){super(),__publicField(this,"roomId"),__publicField(this,"roomName"),__publicField(this,"roomProperty",null),__publicField(this,"roomSelectionIndicator",null),__publicField(this,"clickHandler",null),__publicField(this,"unsubscribeMapRotation",null),__publicField(this,"targetElasticScale",1),__publicField(this,"currentElasticScale",1),__publicField(this,"isAnimatingScale",!1),__publicField(this,"scaleAnimationBound",null),__publicField(this,"updateScaleBound",null),this.appService=c,this.enableRenderGroup(),this.roomId=e.id,this.initializeElasticScale(c.currentScale),this.updateScaleBound=c=>this.updateScale(c),this.appService.emitter.on("antiScale",this.updateScaleBound),this.updateScale(this.appService.currentScale),e.centerPoint&&this.position.set(e.centerPoint.x,e.centerPoint.y),this.roomName=new kC(this.appService,e),this.roomName.visible=this.appService.runtimeSnapshot.showRoomName,this.applyAntiRotation(this.appService.runtime.mapRotation),this.unsubscribeMapRotation=oS(this.appService.runtime,"mapRotation",c=>{this.applyAntiRotation(c)}),this.clickHandler=new dw(this,{onClick:()=>{var c,t;null==(t=null==(c=this.appService.events)?void 0:c.onClickRoomProperties)||t.call(c,e)}})}initialize(c){return __async(this,null,function*(){yield this.createRoomProperty(c),yield this.createRoomSelectionIndicator(c),this.updateLayout()})}applyAntiRotation(c){const e=-c*Math.PI/180;this.rotation=e}initializeElasticScale(c){const{enableElasticScale:e,elasticMinScale:t,elasticMaxScale:i}=this.appService.roomConfig;if(!e)return;let n;n=c<=1?t:c>=5?i:1,this.targetElasticScale=n,this.currentElasticScale=n}updateScale(c){const{enableElasticScale:e,elasticMinScale:t,elasticMaxScale:i}=this.appService.roomConfig;if(!e)return void(0!==c&&this.scale.set(1/c));if(0===c)return;let n;n=c<=1?t:c>=5?i:1;const r=1/c*n;Math.abs(this.targetElasticScale-n)>.01?(this.targetElasticScale=n,this.startScaleAnimation()):this.scale.set(r)}startScaleAnimation(){this.scaleAnimationBound||(this.scaleAnimationBound=this.animateScale.bind(this)),this.isAnimatingScale||(this.isAnimatingScale=!0,this.appService.getApp().ticker.add(this.scaleAnimationBound))}animateScale(){this.currentElasticScale+=.3*(this.targetElasticScale-this.currentElasticScale);const c=1/this.appService.currentScale*this.currentElasticScale;this.scale.set(c),Math.abs(this.currentElasticScale-this.targetElasticScale)<.001&&(this.currentElasticScale=this.targetElasticScale,this.isAnimatingScale=!1,this.scaleAnimationBound&&this.appService.getApp().ticker.remove(this.scaleAnimationBound))}shouldShowRoomProperty(){const{showRoomOrder:c,showRoomProperty:e,selectRoomIds:t,enableRoomSelection:i,roomSelectionMode:n}=this.appService.runtimeSnapshot,r=this.appService.getRoomData(this.roomId);if(!r)return!1;if(i&&"checkmark"===n&&t.includes(this.roomId))return!1;const s=c&&(r.order||0)>0;let a=!1;if(e){const{displayOrders:c}=this.appService.roomConfig.property;a=c.some(c=>"suction"===c&&null!=r.suction||("cistern"===c&&null!=r.cistern||("cleanMode"===c&&null!=r.cleanMode||("cleanTimes"===c&&r.cleanTimes>0||!(!r.customData||!(c in r.customData)||"number"!=typeof r.customData[c]||null==r.customData[c])))))}return s||a}shouldShowRoomSelectionIndicator(){const{enableRoomSelection:c,roomSelectionMode:e}=this.appService.runtimeSnapshot;return c&&"checkmark"===e}updateRoomPropertyVisibility(){return __async(this,null,function*(){if(!this.roomProperty)return;if(this.shouldShowRoomProperty()){this.roomProperty.visible=!0;const c=this.appService.runtimeSnapshot.roomPropertyFoldIds.includes(this.roomId);yield this.roomProperty.setFolded(c);const e=this.appService.getRoomData(this.roomId);e&&(yield this.roomProperty.updateProperty(e))}else this.roomProperty.visible=!1;this.updateLayout()})}updateRoomSelectionIndicatorVisibility(){return __async(this,null,function*(){if(!this.roomSelectionIndicator)return;if(this.shouldShowRoomSelectionIndicator()){const c=this.appService.getRoomData(this.roomId);c&&(yield this.roomSelectionIndicator.updateIndicator(c))}else this.roomSelectionIndicator.visible=!1;this.updateLayout()})}createRoomProperty(c){return __async(this,null,function*(){this.roomProperty&&(this.removeChild(this.roomProperty),this.roomProperty.destroy()),this.roomProperty=new FC(this.appService,c),yield this.roomProperty.updateProperty(c),this.addChild(this.roomProperty),this.addChild(this.roomName),yield this.updateRoomPropertyVisibility(),this.updateLayout()})}createRoomSelectionIndicator(c){return __async(this,null,function*(){this.roomSelectionIndicator&&(this.removeChild(this.roomSelectionIndicator),this.roomSelectionIndicator.destroy()),this.roomSelectionIndicator=new IC(this.appService,c),yield this.updateRoomSelectionIndicatorVisibility(),this.addChild(this.roomSelectionIndicator)})}updateLayout(){var c,e,t,i,n,r;if(this.destroyed)return;const{property:{offsetY:s,offsetX:a},selectionIndicator:{offsetY:o,offsetX:f}}=this.appService.roomConfig,l=(null==(c=this.roomProperty)?void 0:c.visible)||!1,d=(null==(e=this.roomName)?void 0:e.visible)||!1,h=(null==(t=this.roomSelectionIndicator)?void 0:t.visible)||!1;if(l&&this.roomProperty){const c=this.roomProperty.getTotalHeight(),e=this.roomProperty.getTotalWidth();if(this.roomProperty.isFoldedState()){const t=-e/2+a,i=-c/2-s;this.roomProperty.position.set(t,i)}else d&&(null==(i=this.roomName)?void 0:i.position)?(this.roomProperty.position.set(-e/2+a,-s-c),this.roomName.position.set(0,0)):this.roomProperty.position.set(-e/2+a,-c/2-s)}if(h&&this.roomSelectionIndicator){const c=this.roomSelectionIndicator.getTotalHeight(),e=this.roomSelectionIndicator.getTotalWidth();d&&(null==(n=this.roomName)?void 0:n.position)?(this.roomSelectionIndicator.position.set(-e/2+f,-o-c),this.roomName.position.set(0,0)):this.roomSelectionIndicator.position.set(-e/2+f,-c/2-o)}d&&!l&&!h&&(null==(r=this.roomName)?void 0:r.position)&&this.roomName.position.set(0,0)}updateName(c){this.roomName.updateName(c)}updateRoomType(c){return __async(this,null,function*(){yield this.roomName.updateRoomType(c),this.updateLayout()})}updateRoomNameVisibility(c){this.roomName.visible=c,this.updateLayout()}updateRoomTypeVisibility(c){this.roomName.updateRoomTypeVisibility(c),this.updateLayout()}updatePosition(c){this.position.set(c.x,c.y)}refreshColor(){return __async(this,null,function*(){this.roomName&&this.roomName.refreshColor(),this.roomProperty&&this.roomProperty.refreshColor(),this.roomSelectionIndicator&&(yield this.roomSelectionIndicator.refreshColor())})}destroy(){var c,e,t,i;null==(c=this.clickHandler)||c.destroy(),this.clickHandler=null,this.unsubscribeMapRotation&&(this.unsubscribeMapRotation(),this.unsubscribeMapRotation=null),this.isAnimatingScale&&this.scaleAnimationBound&&(this.appService.getApp().ticker.remove(this.scaleAnimationBound),this.isAnimatingScale=!1),this.scaleAnimationBound=null,this.updateScaleBound&&(this.appService.emitter.off("antiScale",this.updateScaleBound),this.updateScaleBound=null),null==(e=this.roomProperty)||e.destroy(),this.roomProperty=null,null==(t=this.roomSelectionIndicator)||t.destroy(),this.roomSelectionIndicator=null,null==(i=this.roomName)||i.destroy(),super.destroy()}}class DC extends xe{constructor(c){super({isRenderGroup:!0}),__publicField(this,"floorTypeMap",new Map),__publicField(this,"floorTypeMasks",new Map),__publicField(this,"floorTypeContexts",new Map),__publicField(this,"floorTypeToRooms",new Map),this.appService=c,this.appService.appContainer.addToLayer(HS,this)}createFloorTypes(c){return __async(this,null,function*(){if(!this.appService.runtimeSnapshot.showRoomFloorType)return;this.clearFloorTypes();const e=this.groupRoomsByFloorType(c),t=[];for(const[c,i]of e)t.push(this.createMergedFloorType(c,i));yield Promise.all(t)})}groupRoomsByFloorType(c){const e=new Map,t=this.appService;return c.forEach((c,i)=>{const n=t.getRoomData(i),r=(null==n?void 0:n.floorType)||0;r>=0&&(e.has(r)||e.set(r,[]),e.get(r).push({roomId:i,graphics:c}))}),e}createMergedFloorType(c,e){return __async(this,null,function*(){const t=this.appService,{assets:i,opacity:n,scale:r}=t.roomConfig.floorType,s=c%i.length,a=`floorType${s}`;if(!i[s])return void V_.warn(`No texture asset configured for floorType: ${c}`);const o=yield Oa.load(a);if(!o)return void V_.warn(`Floor material texture not found: ${a}`);const f=e.map(({graphics:c})=>c.getLocalBounds()),l=kx(f),d=new qo({texture:o,width:l.width,height:l.height});d.x=l.x,d.y=l.y,d.alpha=n,d.tileScale.set(r);const{maskContainer:h,contexts:u}=this.createMergedMask(e.map(({graphics:c})=>c));d.mask=h,this.addChild(d),this.floorTypeMap.set(c,d),this.floorTypeMasks.set(c,h),this.floorTypeContexts.set(c,u),this.floorTypeToRooms.set(c,new Set(e.map(({roomId:c})=>c)))})}createMergedMask(c){const e=new xe,t=[];return c.forEach(c=>{const i=new _o,n=c.context.clone();i.context=n,t.push(n),e.addChild(i)}),{maskContainer:e,contexts:t}}clearFloorTypes(){this.floorTypeMasks.forEach(c=>{try{c.destroy({children:!0})}catch(e){V_.warn("Error destroying floor mask:",e)}}),this.floorTypeMasks.clear(),this.floorTypeContexts.forEach(c=>{try{c.forEach(c=>{try{c.destroy()}catch(e){V_.warn("Error destroying cloned graphics context:",e)}})}catch(e){V_.warn("Error destroying graphics contexts:",e)}}),this.floorTypeContexts.clear(),this.floorTypeMap.forEach(c=>{try{this.removeChild(c),c.destroy()}catch(e){V_.warn("Error destroying floor material:",e)}}),this.floorTypeMap.clear(),this.floorTypeToRooms.clear()}destroy(){this.clearFloorTypes(),super.destroy()}}const OC=(c,e)=>c&&e?{x:c.x-e.x,y:c.y-e.y}:null;class LC{constructor(c){__publicField(this,"unsubscribeFns",[]),__publicField(this,"roomInfoContainer",new xe),__publicField(this,"roomInfoMap",new Map),__publicField(this,"roomDisplayMap",new Map),__publicField(this,"roomFloorType"),this.appService=c,this.roomFloorType=new DC(c),c.appContainer.addToLayer(QS,this.roomInfoContainer);const e=oS(c.runtime,"showRoomFloorType",c=>{V_.log(`[runtime] showRoomFloorType: ${c}`),c?this.updateFloorTypes():this.roomFloorType.clearFloorTypes()}),t=oS(c.runtime,"showRoomProperty",c=>{V_.log(`[runtime] showRoomProperty: ${c}`),this.updateAllRoomPropertyVisibility()}),i=oS(c.runtime,"showRoomOrder",c=>{V_.log(`[runtime] showRoomOrder: ${c}`),this.updateAllRoomPropertyVisibility()}),n=oS(c.runtime,"roomPropertyFoldIds",c=>{V_.log(`[runtime] roomPropertyFoldIds: ${c}`),this.updateAllRoomPropertyVisibility()}),r=oS(c.runtime,"showRoomName",c=>{V_.log(`[runtime] showRoomName: ${c}`),this.updateAllRoomNameVisibility(c)}),s=oS(c.runtime,"showRoomType",c=>{V_.log(`[runtime] showRoomType: ${c}`),this.updateAllRoomTypeVisibility(c)}),a=oS(c.runtime,"enableRoomSelection",c=>{V_.log(`[runtime] enableRoomSelection: ${c}`),this.updateAllRoomPropertyVisibility(),this.updateAllRoomSelectionIndicatorVisibility(),this.refreshAllRoomColors()}),o=oS(c.runtime,"selectRoomIds",c=>{V_.log(`[runtime] selectRoomIds: ${c}`),this.updateAllRoomPropertyVisibility(),this.updateAllRoomSelectionIndicatorVisibility(),this.refreshAllRoomColors()}),f=oS(c.runtime,"roomSelectionMode",c=>{V_.log(`[runtime] roomSelectionMode: ${c}`),this.updateAllRoomPropertyVisibility(),this.updateAllRoomSelectionIndicatorVisibility(),this.refreshAllRoomColors()});this.unsubscribeFns.push(e,t,i,n,r,s,a,o,f)}drawRoomProperty(c){return __async(this,null,function*(){var e,t;const i=this.appService;this.roomDisplayMap.clear();const n=null!=(t=null==(e=i.getApp().mapState)?void 0:e.origin)?t:null;return c.forEach((c,e)=>{const t=i.mapManager.getRoomById(c.id),r=(null==t?void 0:t.centerPoint)||null,s=__spreadProps(__spreadValues({},c),{centerPoint:r,relativeCenterPoint:OC(r,n),index:e,colorIndex:null==t?void 0:t.colorIndex});this.roomDisplayMap.set(c.id,s)}),yield this.updateRoomInfoDisplay(),yield this.updateFloorTypes(),!0})}updateRoomInfoDisplay(){return __async(this,null,function*(){if(0===this.roomDisplayMap.size){return void(0===this.appService.mapManager.getAllRooms().length&&this.clearRoomInfos())}const c=Array.from(this.roomDisplayMap.values()).filter(c=>null!==c.centerPoint);this.clearRoomInfos(),yield Promise.all(c.map(c=>this.createRoomInfo(c)))})}createRoomInfo(c){return __async(this,null,function*(){const e=new BC(this.appService,c);this.roomInfoContainer.addChild(e),this.roomInfoMap.set(c.id,e),yield e.initialize(c)})}updateRoomName(c,e){const t=this.roomInfoMap.get(c);t&&t.updateName(e)}updateRoomType(c,e){return __async(this,null,function*(){const t=this.roomDisplayMap.get(c);t&&(t.type=e);const i=this.roomInfoMap.get(c);i&&(yield i.updateRoomType(e))})}updateRoomPosition(c,e){var t,i;const n=this.roomDisplayMap.get(c);if(n){n.centerPoint=e;const c=null!=(i=null==(t=this.appService.getApp().mapState)?void 0:t.origin)?i:null;n.relativeCenterPoint=OC(e,c)}const r=this.roomInfoMap.get(c);r&&r.updatePosition(e)}clearRoomInfos(){if(0===this.roomInfoMap.size)return;const c=Array.from(this.roomInfoMap.values());this.roomInfoContainer.removeChildren(),c.forEach(c=>{try{c.destroy()}catch(e){V_.warn(`[RoomManager] Error destroying RoomInfo for room ${c.roomId}:`,e)}}),this.roomInfoMap.clear()}getRoomPropertyById(c){return this.roomDisplayMap.get(c)}refresh(){return __async(this,null,function*(){var c,e;const t=this.appService;this.roomFloorType.clearFloorTypes();const i=null!=(e=null==(c=t.getApp().mapState)?void 0:c.origin)?e:null;this.roomDisplayMap.forEach((c,e)=>{const n=t.mapManager.getRoomById(e),r=(null==n?void 0:n.centerPoint)||null;if(c.centerPoint!==r){c.centerPoint=r,c.relativeCenterPoint=OC(r,i);const t=this.roomInfoMap.get(e);t&&r&&t.updatePosition(r)}const s=null==n?void 0:n.colorIndex;if(c.colorIndex!==s&&void 0!==s){c.colorIndex=s;const t=this.roomInfoMap.get(e);t&&t.refreshColor()}}),yield this.updateRoomInfoDisplay(),yield this.updateFloorTypes()})}updateAllRoomPropertyVisibility(){return __async(this,null,function*(){0!==this.roomInfoMap.size&&(yield Promise.all(Array.from(this.roomInfoMap.values()).map(c=>__async(this,null,function*(){try{yield c.updateRoomPropertyVisibility()}catch(e){console.warn(`[RoomManager] Failed to update room property visibility for room ${c.roomId}`,e)}}))))})}updateAllRoomNameVisibility(c){0!==this.roomInfoMap.size&&this.roomInfoMap.forEach(e=>{e.updateRoomNameVisibility(c)})}updateAllRoomTypeVisibility(c){0!==this.roomInfoMap.size&&this.roomInfoMap.forEach(e=>{e.updateRoomTypeVisibility(c)})}updateAllRoomSelectionIndicatorVisibility(){0!==this.roomInfoMap.size&&this.roomInfoMap.forEach(c=>{c.updateRoomSelectionIndicatorVisibility()})}refreshAllRoomColors(){0!==this.roomInfoMap.size&&this.roomInfoMap.forEach(c=>{c.refreshColor()})}updateFloorTypes(){return __async(this,null,function*(){const c=this.appService,e=c.mapManager.roomFill.getRoomGraphicsMap();if(e.size>0)yield this.roomFloorType.createFloorTypes(e),c.getApp().renderOnceNextFrame();else{0===c.mapManager.getAllRooms().length&&this.roomFloorType.clearFloorTypes()}})}clear(){this.clearRoomInfos(),this.roomInfoContainer.removeChildren(),this.roomInfoMap.clear(),this.roomDisplayMap.clear(),this.roomFloorType.clearFloorTypes()}destroy(){this.unsubscribeFns.forEach(c=>c()),this.unsubscribeFns=[],this.clearRoomInfos(),this.roomInfoContainer.destroy(),this.roomFloorType.destroy()}}(null==(e=null==navigator?void 0:navigator.userAgent)?void 0:e.includes("tuya-ark-ide"))||null==(t=null==navigator?void 0:navigator.userAgent)||t.includes("miniProgram");const zC=()=>{var c,e;if(!Tt.any)return!0;const t=navigator.userAgent.toLowerCase();let i=!1;if(/iphone|ipad|ipod/.test(t)){const e=null==(c=t.match(/os (\d+)_/))?void 0:c[1];i=(e?parseInt(e):0)>=12}else if(/android/.test(t)){const c=null==(e=t.match(/android (\d+)/))?void 0:e[1];i=(c?parseInt(c):0)>=10}return i&&(()=>{const c=navigator.deviceMemory;return!c||c>=4})()};class GC extends xe{constructor(c,e,t){super(),__publicField(this,"graphics"),__publicField(this,"sprite",null),__publicField(this,"viewportBounds"),__publicField(this,"lastConfig",null),__publicField(this,"onImageLoaded"),this.label="background",this.viewportBounds=e,this.onImageLoaded=t,this.graphics=new _o,this.graphics.label="backgroundGraphics",this.addChild(this.graphics),this.render(c)}render(c){return __async(this,null,function*(){this.lastConfig=c,this.clear(),c.backgroundImage?yield this.renderImage(c.backgroundImage,c.backgroundAlpha):c.backgroundGradient?this.renderGradient(c.backgroundGradient):void 0===c.backgroundColor?V_.warn("[Background] No background configuration provided"):this.renderSolidColor(c.backgroundColor,c.backgroundAlpha)})}clear(){this.graphics.clear(),this.sprite&&(this.removeChild(this.sprite),this.sprite.destroy(),this.sprite=null)}renderSolidColor(c,e){this.graphics.clear(),this.graphics.rect(0,0,this.viewportBounds.width,this.viewportBounds.height).fill({color:c,alpha:e}),V_.debug("[Background] Rendered solid color background",{color:c,alpha:e})}renderGradient(c){var e,t,i,n,r,s,a;const{width:o,height:f}=this.viewportBounds;if(this.graphics.clear(),"linear"===c.type){const r=null!=(e=c.x0)?e:0,s=null!=(t=c.y0)?t:0,a=null!=(i=c.x1)?i:1,l=null!=(n=c.y1)?n:1,d=new gs({type:"linear",start:{x:r,y:s},end:{x:a,y:l},colorStops:c.colorStops});this.graphics.rect(0,0,o,f).fill(d),V_.debug("[Background] Rendered linear gradient background",{x0:r,y0:s,x1:a,y1:l,colorStops:c.colorStops.length})}else if("radial"===c.type){const e=null!=(r=c.cx)?r:.5,t=null!=(s=c.cy)?s:.5,i=null!=(a=c.r)?a:.5,n=new gs({type:"radial",center:{x:e,y:t},innerRadius:0,outerCenter:{x:e,y:t},outerRadius:i,colorStops:c.colorStops});this.graphics.rect(0,0,o,f).fill(n),V_.debug("[Background] Rendered radial gradient background",{cx:e,cy:t,r:i,colorStops:c.colorStops.length})}}renderImage(c,e){return __async(this,null,function*(){var t,i,n,r,s,a;try{const a=yield Oa.load(c.src);if(!a)return V_.error("[Background] Failed to load image:",c.src),void((null==(t=this.lastConfig)?void 0:t.backgroundColor)&&this.renderSolidColor(this.lastConfig.backgroundColor,e));this.sprite=new we(a),this.sprite.label="backgroundSprite",this.sprite.alpha=e;const{width:o,height:f}=this.viewportBounds,l=c.fit||"cover",d=null!=(n=null==(i=c.position)?void 0:i.x)?n:.5,h=null!=(s=null==(r=c.position)?void 0:r.y)?s:.5,u=a.width,p=a.height,g=u/p,m=o/f;switch(l){case"fill":this.sprite.width=o,this.sprite.height=f,this.sprite.x=0,this.sprite.y=0;break;case"contain":g>m?(this.sprite.width=o,this.sprite.height=o/g):(this.sprite.height=f,this.sprite.width=f*g),this.sprite.x=(o-this.sprite.width)*d,this.sprite.y=(f-this.sprite.height)*h;break;case"cover":g>m?(this.sprite.height=f,this.sprite.width=f*g):(this.sprite.width=o,this.sprite.height=o/g),this.sprite.x=(o-this.sprite.width)*d,this.sprite.y=(f-this.sprite.height)*h;break;case"none":this.sprite.width=u,this.sprite.height=p,this.sprite.x=(o-u)*d,this.sprite.y=(f-p)*h}c.repeat&&V_.warn("[Background] Repeat mode not yet implemented"),this.addChild(this.sprite),V_.debug("[Background] Rendered image background",{src:c.src,fit:l,position:{x:d,y:h},spriteSize:{width:this.sprite.width,height:this.sprite.height}}),this.onImageLoaded&&this.onImageLoaded()}catch(o){V_.error("[Background] Error loading background image:",o),(null==(a=this.lastConfig)?void 0:a.backgroundColor)&&this.renderSolidColor(this.lastConfig.backgroundColor,e)}})}update(c){return __async(this,null,function*(){yield this.render(c)})}updateViewportBounds(c){return __async(this,null,function*(){this.viewportBounds=c,this.lastConfig&&(yield this.render(this.lastConfig))})}destroy(){this.clear(),super.destroy()}}class UC extends xe{constructor(c){super(),__publicField(this,"carpetData"),__publicField(this,"carpetConfig"),__publicField(this,"controlsConfig"),__publicField(this,"carpetEvents"),__publicField(this,"appService"),__publicField(this,"controlFill"),__publicField(this,"editableShape"),__publicField(this,"clickHandler",null),__publicField(this,"maskContainer",null),__publicField(this,"maskGraphics",null),__publicField(this,"texture",null),__publicField(this,"textureMap",new Map),__publicField(this,"tilingSprite",null),__publicField(this,"initialZonePoints",[]),__publicField(this,"unsubscribeFns",[]),__publicField(this,"resolvedMaxSizeCache",null),__publicField(this,"handleDragStart",()=>{this.isEditingEnabled()&&(this.carpetData.points&&this.carpetData.points.length>0?this.initialZonePoints=this.carpetData.points.map(c=>__spreadValues({},c)):this.initialZonePoints=[],this.appService.getApp().requestRender("zone-drag",!0))}),__publicField(this,"handleDragMove",c=>{if(!this.isEditingEnabled()||0===this.initialZonePoints.length||"custom"===this.carpetData.shape)return;const e=this.parent.toLocal(c.global),t=this.controlFill.getDragStartPosition();if(!t)return;const i=e.x-t.x,n=e.y-t.y;this.applyTranslation(i,n)}),__publicField(this,"handleDragEnd",()=>{var c,e;this.initialZonePoints=[],this.appService.getApp().stopRender("zone-drag"),null==(e=(c=this.carpetEvents).onUpdate)||e.call(c,this.getCarpetData())}),__publicField(this,"handleMoveStart",()=>{this.carpetData.points&&this.carpetData.points.length>0?this.initialZonePoints=this.carpetData.points.map(c=>__spreadValues({},c)):this.initialZonePoints=[],this.appService.getApp().requestRender("zone-move",!0)}),__publicField(this,"handleMove",c=>{var e,t;if(!this.isEditingEnabled()||0===this.initialZonePoints.length)return;const i=this.parent.toLocal(c.global),n=null==(t=null==(e=this.editableShape)?void 0:e.getMoveButton())?void 0:t.getDragStartPosition();if(!n)return;const r=i.x-n.x,s=i.y-n.y;this.applyTranslation(r,s)}),__publicField(this,"handleMoveEnd",()=>{var c,e;this.initialZonePoints=[],this.appService.getApp().stopRender("zone-move"),null==(e=(c=this.carpetEvents).onUpdate)||e.call(c,this.getCarpetData())}),__publicField(this,"handleRotationStart",()=>{this.appService.getApp().requestRender("zone-rotate",!0)}),__publicField(this,"handleRotationMove",c=>{c&&(this.carpetData.points=c,this.drawCarpet())}),__publicField(this,"handleRotationEnd",()=>{var c,e;this.appService.getApp().stopRender("zone-rotate"),null==(e=(c=this.carpetEvents).onUpdate)||e.call(c,this.getCarpetData())}),__publicField(this,"handleScaleStart",()=>{this.appService.getApp().requestRender("zone-scale",!0)}),__publicField(this,"handleScaleMove",c=>{c&&(this.carpetData.points=c,this.drawCarpet())}),__publicField(this,"handleScaleMoveHorizontal",c=>{c&&(this.carpetData.points=c,this.drawCarpet())}),__publicField(this,"handleScaleMoveVertical",c=>{c&&(this.carpetData.points=c,this.drawCarpet())}),__publicField(this,"handleScaleEnd",()=>{var c,e;this.appService.getApp().stopRender("zone-scale"),null==(e=(c=this.carpetEvents).onUpdate)||e.call(c,this.getCarpetData())}),__publicField(this,"handleDelete",()=>{var c,e;null==(e=(c=this.carpetEvents).onRemove)||e.call(c,this.carpetData.id)}),__publicField(this,"handleClick",()=>{var c,e;this.isEditingEnabled()||null==(e=null==(c=this.carpetEvents)?void 0:c.onClick)||e.call(c,this.getCarpetData())}),__publicField(this,"handlePointsUpdate",c=>{this.carpetData.points=c,this.drawCarpet()});const{appService:e,carpetData:t,events:i={},textureMap:n}=c;this.appService=e,this.textureMap=n,this.carpetEvents=i,this.controlsConfig=this.getControlsConfig(),this.carpetConfig=this.controlsConfig.carpet,this.processCarpetData(t),this.initializeComponents(),this.createEditControlLayer(),this.setupClickHandler(),this.setupEnableRoomSelectionListener(),this.updateEditState(),this.loadTexture()}getResolvedMaxSize(){const c=this.carpetConfig.maxSize;if(this.resolvedMaxSizeCache&&this.resolvedMaxSizeCache.key===c)return this.resolvedMaxSizeCache.value;const e=US(this.carpetConfig.minSize,c,"carpet");return this.resolvedMaxSizeCache={key:c,value:e},e}validateCarpetShape(c){const e=this.getResolvedMaxSize();return this.appService.coords.validateShape(N_(c),{minSize:this.carpetConfig.minSize,maxSize:null!=e?e:void 0})}processCarpetData(c){if(c.points&&c.points.length>=2)if("custom"===c.shape)this.carpetData=__spreadProps(__spreadValues({},c),{points:c.points});else{const e=this.validateCarpetShape(c.points);this.carpetData=__spreadProps(__spreadValues({},c),{points:e})}else this.carpetData=__spreadProps(__spreadValues({},c),{points:[],shape:c.shape||"rectangle"})}getControlsConfig(){const{controls:c}=this.appService.getConfig();return c}isEditingEnabled(){return this.appService.runtimeSnapshot.editingCarpetIds.includes(this.carpetData.id)}isSelected(){return this.appService.runtimeSnapshot.selectedCarpetIds.includes(this.carpetData.id)}shouldShowEditControl(){return this.isEditingEnabled()||this.isSelected()}initializeComponents(){this.maskContainer=this.createMaskContainer(),this.controlFill=this.createControlFill(),this.addChild(this.maskContainer),this.addChild(this.controlFill),this.drawCarpet()}createMaskContainer(){const c=new xe;return this.maskGraphics=new _o,this.updateMaskShape(),c.addChild(this.maskGraphics),c.mask=this.maskGraphics,c}createControlFill(){const c=this.isEditingEnabled();return new Mw(this.appService,{points:this.carpetData.points||[],fillColor:this.carpetConfig.fillColor,enableInteraction:c,onDragStart:this.handleDragStart,onDragMove:this.handleDragMove,onDragEnd:this.handleDragEnd})}createEditControlLayer(){const c=this.isEditingEnabled(),e="custom"===this.carpetData.shape,t=!!c&&!e&&"ratioLocked"===this.carpetConfig.scaleMode,i=__spreadProps(__spreadValues(__spreadValues(__spreadValues({},A_(this.carpetConfig,["outlineStrokeWidth","outlineDashed","outlineDashArray","outlineFillColor","outlineOffset","outlineStrokeColor"])),A_(this.carpetConfig,["textColor","textPosition","textOffset"])),A_(this.controlsConfig,["textFontSize","textFontFamily","textFontWeight"])),{showRotateButton:!!c&&!e&&this.carpetConfig.showRotateButton,showScaleButton:!!c&&!e,showDeleteButton:!!c,showMoveButton:!!c&&!e,showRadialScaleButton:t,iconWrapperFillColor:this.carpetConfig.iconWrapperFillColor,deleteIconWrapperFillColor:this.carpetConfig.deleteIconWrapperFillColor,rotateMode:this.carpetConfig.rotateMode,scaleMode:this.carpetConfig.scaleMode,moveButtonOffset:this.controlsConfig.moveButtonOffset}),n=e?this.calculateBoundingRectanglePoints():this.carpetData.points||[];this.editableShape=new Rw({editControls:this.appService.editControlManager});const r=this.getResolvedMaxSize();this.editableShape.attach(this,{id:this.carpetData.id,topology:"quad",layerOptions:{config:i,zonePoints:n,minSize:this.carpetConfig.minSize,maxSize:null!=r?r:void 0,contentLayer:iw,events:{onRemove:this.handleDelete,onRotateStart:this.handleRotationStart,onRotateMove:this.handleRotationMove,onRotateEnd:this.handleRotationEnd,onScaleStart:this.handleScaleStart,onScaleMove:this.handleScaleMove,onScaleMoveHorizontal:this.handleScaleMoveHorizontal,onScaleMoveVertical:this.handleScaleMoveVertical,onScaleEnd:this.handleScaleEnd,onMoveStart:this.handleMoveStart,onMoveMove:this.handleMove,onMoveEnd:this.handleMoveEnd,onClick:this.handleClick,onPointsUpdate:this.handlePointsUpdate}},editingState:{showRotateButton:!e&&this.carpetConfig.showRotateButton,showScaleButton:!e,showDeleteButton:!0,showMoveButton:!e,showBorder:!0,showSizeText:!0,borderStyle:this.carpetConfig.editing,showRadialScaleButton:!e&&"ratioLocked"===this.carpetConfig.scaleMode},idleState:{showRotateButton:!1,showScaleButton:!1,showDeleteButton:!1,showMoveButton:!1,showBorder:!1,showSizeText:!1}})}setupClickHandler(){this.interactiveChildren=!0,this.clickHandler=new dw(this,{onClick:()=>{var c,e;this.isEditingEnabled()||null==(e=null==(c=this.carpetEvents)?void 0:c.onClick)||e.call(c,this.getCarpetData())},stopPropagation:!1})}setupEnableRoomSelectionListener(){const c=oS(this.appService.runtime,"enableRoomSelection",c=>{this.updateClickHandlerState(c)});this.unsubscribeFns.push(c);const e=this.appService.runtimeSnapshot.enableRoomSelection;this.updateClickHandlerState(e)}isRoomSelectionEnabled(){return this.appService.runtimeSnapshot.enableRoomSelection}updateClickHandlerState(c){if(c){if(this.eventMode="none",this.clickHandler){this.clickHandler.getTarget().eventMode="none"}}else if(this.eventMode="static",this.clickHandler){this.clickHandler.getTarget().eventMode="static"}}calculateBounds(){const{points:c}=this.carpetData;let e=1/0,t=1/0,i=-1/0,n=-1/0;if(c&&c.length>0)for(const r of c)e=Math.min(e,r.x),t=Math.min(t,r.y),i=Math.max(i,r.x),n=Math.max(n,r.y);return{minX:e,minY:t,maxX:i,maxY:n}}calculateBoundingRectanglePoints(){const{points:c}=this.carpetData;if(!c||0===c.length)return[];const{minX:e,minY:t,maxX:i,maxY:n}=nx(c);return[{x:e,y:t},{x:i,y:t},{x:i,y:n},{x:e,y:n}]}updateMaskShape(){if(!this.maskGraphics)return;this.maskGraphics.clear();const{points:c,shape:e}=this.carpetData;if(!c||!Array.isArray(c))return;if(!(c.length<2)){if("round"===e){if(c.length<4)return;const e=rx(c),[t,i,,n]=c,r=fx(t,i),s=fx(t,n),a=Math.atan2(i.y-t.y,i.x-t.x);this.maskGraphics.position.set(e.x,e.y),this.maskGraphics.rotation=a,this.maskGraphics.ellipse(0,0,r/2,s/2)}else{const e=c.flatMap(c=>[c.x,c.y]);this.maskGraphics.poly(e),this.maskGraphics.position.set(0,0),this.maskGraphics.rotation=0}this.maskGraphics.fill(16777215)}}loadTexture(){const{opacity:c,scale:e}=this.appService.carpetConfig,{type:t}=this.carpetData;try{this.texture=this.textureMap.get(t)||this.textureMap.get(-1)||null,this.texture&&this.maskContainer&&(this.tilingSprite&&(this.maskContainer.removeChild(this.tilingSprite),this.tilingSprite.destroy(),this.tilingSprite=null),this.createTilingSprite(e,c),this.appService.getApp().renderOnce())}catch(i){console.warn("Failed to load carpet texture:",i)}}createTilingSprite(c,e){if(!this.texture||!this.maskContainer)return;const t=this.calculateBounds();this.tilingSprite=new qo({texture:this.texture,width:t.maxX-t.minX+100,height:t.maxY-t.minY+100}),this.tilingSprite.position.set(t.minX-50,t.minY-50),this.tilingSprite.tileScale.set(c),this.tilingSprite.alpha=e,this.maskContainer.addChild(this.tilingSprite)}updateTilingSprite(){if(!this.tilingSprite)return;const c=this.calculateBounds();this.tilingSprite.position.set(c.minX-50,c.minY-50),this.tilingSprite.width=c.maxX-c.minX+100,this.tilingSprite.height=c.maxY-c.minY+100}applyTranslation(c,e){this.carpetData.points=this.initialZonePoints.map(t=>({x:t.x+c,y:t.y+e})),this.drawCarpet()}drawCarpet(){const{points:c}=this.carpetData;if(c&&!(c.length<2)&&(this.updateMaskShape(),this.updateTilingSprite(),this.controlFill.updatePoints(c),this.editableShape)){const e="custom"===this.carpetData.shape?this.calculateBoundingRectanglePoints():c;this.editableShape.updatePoints(e)}}updateEditState(){const c=this.isEditingEnabled(),e=this.isSelected(),t=this.shouldShowEditControl();this.controlFill.setInteractionEnabled(c),this.editableShape&&(e&&!c?this.editableShape.applyEditState({showRotateButton:!1,showScaleButton:!1,showDeleteButton:!1,showMoveButton:!1,showBorder:!0,showSizeText:!1,borderStyle:this.carpetConfig.normal}):this.editableShape.setEditing(c)),this.zIndex=t?1e3:0}refreshConfig(){this.controlsConfig=this.getControlsConfig(),this.carpetConfig=this.controlsConfig.carpet,this.resolvedMaxSizeCache=null,this.controlFill.updateFillColor(this.carpetConfig.fillColor),this.editableShape.detach(),this.createEditControlLayer(),this.drawCarpet(),this.updateEditState()}updateCarpetData(c){const e=this.carpetData.type;if(c.points&&c.points.length>=2)if("custom"===c.shape)this.carpetData=__spreadProps(__spreadValues({},c),{points:c.points});else{const e=this.validateCarpetShape(c.points);this.carpetData=__spreadProps(__spreadValues({},c),{points:e})}else this.carpetData=__spreadProps(__spreadValues({},c),{points:c.points||[]});e!==this.carpetData.type&&this.loadTexture(),this.drawCarpet(),this.updateEditState()}getCarpetData(){return __spreadValues({},this.carpetData)}refreshDisplay(){this.drawCarpet()}destroy(){var c,e,t,i,n;this.editableShape.detach(),this.unsubscribeFns.forEach(c=>c()),this.unsubscribeFns=[],null==(c=this.tilingSprite)||c.destroy(),null==(e=this.maskGraphics)||e.destroy(),null==(t=this.maskContainer)||t.destroy(),this.tilingSprite=null,this.maskGraphics=null,this.maskContainer=null,this.texture=null,null==(i=this.controlFill)||i.destroy(),null==(n=this.clickHandler)||n.destroy(),super.destroy()}}class VC{constructor(c){__publicField(this,"customCarpetMap",new Map),__publicField(this,"unsubscribeFns",[]),__publicField(this,"textureMap",new Map),__publicField(this,"texturesLoaded",!1),__publicField(this,"texturesLoadingPromise",null),this.appService=c,this.applyLayerVisibility(c.runtime.showCustomCarpets);const e=oS(c.runtime,"editingCarpetIds",c=>{V_.log(`[runtime] editingCarpetIds: ${c}`),this.updateCarpetsEditState()}),t=oS(c.runtime,"selectedCarpetIds",c=>{V_.log(`[runtime] selectedCarpetIds: ${c}`),this.updateCarpetsEditState()}),i=oS(c.runtime,"showCustomCarpets",c=>{V_.log(`[runtime] showCustomCarpets: ${c}`),this.applyLayerVisibility(c)});this.unsubscribeFns.push(e,t,i)}loadTextures(){return __async(this,null,function*(){if(!this.texturesLoaded){if(this.texturesLoadingPromise)return this.texturesLoadingPromise;this.texturesLoadingPromise=this._loadTextures(),yield this.texturesLoadingPromise,this.texturesLoaded=!0,this.texturesLoadingPromise=null}})}_loadTextures(){return __async(this,null,function*(){const c=this.appService,{material:e,src:t}=c.carpetConfig;if(e)for(const i of e){const c=yield Oa.load(i.src);this.textureMap.set(i.type,c)}if(t){const c=yield Oa.load(t);this.textureMap.set(-1,c)}})}drawCustomCarpets(c){return __async(this,null,function*(){if(yield this.loadTextures(),!c||0===c.length)return void this.clearAllCustomCarpets();const e=new Set(this.customCarpetMap.keys()),t=new Set(c.map(c=>c.id));for(const c of e)t.has(c)||this.removeCustomCarpet(c);c.forEach(c=>{const e=this.customCarpetMap.get(c.id.toString());e?this.isCarpetDataEqual(e.getCarpetData(),c)||e.updateCarpetData(c):this.addNewCustomCarpet(c)})})}getCustomCarpets(){const c=[];return this.customCarpetMap.forEach(e=>{c.push(e.getCarpetData())}),c}getCustomCarpetById(c){return this.customCarpetMap.get(c)}clearAllCustomCarpets(){this.customCarpetMap.forEach((c,e)=>{var t;const i=this.customCarpetMap.get(e);i&&(null==(t=i.parent)||t.removeChild(i),i.destroy())}),this.customCarpetMap.clear()}addNewCustomCarpet(c){const e=this.appService,t=new UC({appService:e,carpetData:c,textureMap:this.textureMap,events:{onRemove:c=>{var t,i;null==(i=null==(t=e.events)?void 0:t.onDeleteCustomCarpet)||i.call(t,{id:c})},onUpdate:c=>{var t,i;null==(i=null==(t=e.events)?void 0:t.onUpdateCustomCarpet)||i.call(t,c)},onClick:c=>{var t,i;null==(i=null==(t=e.events)?void 0:t.onClickCarpet)||i.call(t,{id:c.id})}}});this.customCarpetMap.set(c.id.toString(),t),e.appContainer.addToLayer(iw,t)}removeCustomCarpet(c){const e=this.appService,t=this.customCarpetMap.get(c);t&&(e.appContainer.removeFromLayer(iw,t),t.destroy(),this.customCarpetMap.delete(c))}updateCarpetsEditState(){this.customCarpetMap.forEach(c=>{c.updateEditState()})}applyLayerVisibility(c){const e=this.appService.appContainer.getLayer(iw);e&&(e.visible=c)}isCarpetDataEqual(c,e){if(c.id!==e.id)return!1;if(c.type!==e.type)return!1;if(c.shape!==e.shape)return!1;const t=c.points||[],i=e.points||[];if(t.length!==i.length)return!1;for(let n=0;n<t.length;n++){const c=t[n],e=i[n];if(Math.abs(c.x-e.x)>.1||Math.abs(c.y-e.y)>.1)return!1}return!0}refreshDisplay(){this.customCarpetMap.forEach(c=>{c.refreshDisplay()})}refreshConfig(){this.customCarpetMap.forEach(c=>{c.refreshConfig()})}destroy(){this.unsubscribeFns.forEach(c=>c()),this.unsubscribeFns=[],this.clearAllCustomCarpets()}}const NC="furniture-drag",WC="furniture-scale",HC="furniture-move",jC="furniture-rotate";class YC extends xe{constructor(c){super(),__publicField(this,"deps"),__publicField(this,"config"),__publicField(this,"controlsConfig"),__publicField(this,"furnitureEvents"),__publicField(this,"data"),__publicField(this,"textureAlias"),__publicField(this,"sprite"),__publicField(this,"editableShape"),__publicField(this,"editing",!1),__publicField(this,"clickHandler",null),__publicField(this,"dragStartPosition",null),__publicField(this,"initialPoints",[]),__publicField(this,"isDragging",!1),__publicField(this,"gestureSession",null),__publicField(this,"originalSizeMeters",null),__publicField(this,"resolveSizeConstraintPerEdge",()=>{var c,e;const{minScaleRatio:t,maxScaleRatio:i}=this.config,n=i===1/0||null==i?void 0:i,r=c=>{if(!c||c<=0)return{min:.1,max:void 0};const e=c*(t||0);return{min:e>0?e:.1,max:null!=n?c*n:void 0}};return{edge1:r(null==(c=this.originalSizeMeters)?void 0:c.width),edge2:r(null==(e=this.originalSizeMeters)?void 0:e.height)}}),__publicField(this,"onDragStart",c=>{if(!this.editing||!this.parent)return;if(c.target!==this&&c.target!==this.sprite)return;c.stopPropagation();const e=this.parent.toLocal(c.global);this.dragStartPosition={x:e.x,y:e.y},this.initialPoints=this.data.points.map(c=>__spreadValues({},c)),this.isDragging=!1,this.gestureSession=this.deps.gestures.hijack(c),this.gestureSession.onMove(this.onDragMove),this.gestureSession.onEnd(this.onDragEnd)}),__publicField(this,"onDragMove",c=>{if(!this.dragStartPosition||!this.parent)return;const e=this.parent.toLocal(c.global),t=e.x-this.dragStartPosition.x,i=e.y-this.dragStartPosition.y;!this.isDragging&&Math.abs(t)+Math.abs(i)<3||(this.isDragging||(this.isDragging=!0,this.deps.render.request(NC)),this.data.points=this.initialPoints.map(c=>({x:c.x+t,y:c.y+i})),this.redraw())}),__publicField(this,"onDragEnd",()=>{var c,e;this.gestureSession=null,this.dragStartPosition&&(this.isDragging&&(null==(e=(c=this.furnitureEvents).onUpdate)||e.call(c,this.getData()),this.deps.render.stop(NC)),this.dragStartPosition=null,this.initialPoints=[],this.isDragging=!1)}),__publicField(this,"handleRotateStart",()=>{this.deps.render.request(jC)}),__publicField(this,"handleRotateMove",c=>{c&&(this.data.points=c,this.redraw())}),__publicField(this,"handleTapRotate",c=>{var e,t;c&&(this.data.points=c,this.redraw()),this.captureOriginalSize(),null==(t=(e=this.furnitureEvents).onUpdate)||t.call(e,this.getData())}),__publicField(this,"handleScaleStart",()=>{this.deps.render.request(WC)}),__publicField(this,"handleScaleMove",c=>{c&&(this.data.points=c,this.redraw())}),__publicField(this,"handleMoveStart",()=>{this.initialPoints=this.data.points.map(c=>__spreadValues({},c)),this.deps.render.request(HC)}),__publicField(this,"handleMove",c=>{var e;if(!this.editing||0===this.initialPoints.length||!this.parent)return;const t=this.parent.toLocal(c.global),i=null==(e=this.editableShape.getMoveButton())?void 0:e.getDragStartPosition();if(!i)return;const n=t.x-i.x,r=t.y-i.y;this.data.points=this.initialPoints.map(c=>({x:c.x+n,y:c.y+r})),this.redraw()}),__publicField(this,"handleMoveEnd",()=>{var c,e;this.initialPoints=[],this.deps.render.stop(HC),null==(e=(c=this.furnitureEvents).onUpdate)||e.call(c,this.getData())}),__publicField(this,"handleTransformEnd",()=>{var c,e;this.deps.render.stop(jC),this.deps.render.stop(WC),null==(e=(c=this.furnitureEvents).onUpdate)||e.call(c,this.getData())}),__publicField(this,"handleDelete",()=>{var c,e;null==(e=(c=this.furnitureEvents).onRemove)||e.call(c,this.data.id)}),__publicField(this,"handleClick",()=>{var c,e;this.editing||null==(e=(c=this.furnitureEvents).onClick)||e.call(c,this.getData())});const{deps:e,data:t,textureAlias:i}=c;this.deps=e,this.config=e.furnitureConfig,this.controlsConfig=e.controlsConfig,this.furnitureEvents=e.events,this.data=__spreadProps(__spreadValues({},t),{points:t.points.map(c=>__spreadValues({},c))}),this.textureAlias=i,this.captureOriginalSize(),this.createSprite(),this.updateSpriteTransform(),this.createEditControlLayer(),this.eventMode="static",this.cursor="pointer",this.setupInteraction(),this.applyEditing()}captureOriginalSize(){const c=this.data.points;if(c.length<4)return void(this.originalSizeMeters=null);const e=fx(c[0],c[1]),t=fx(c[1],c[2]);this.originalSizeMeters={width:this.deps.coords.toMeters(e),height:this.deps.coords.toMeters(t)}}createSprite(){const c=Oa.get(this.textureAlias);this.sprite=new we(c),this.sprite.anchor.set(.5),this.sprite.alpha=this.config.opacity,this.sprite.eventMode="passive",this.addChild(this.sprite)}updateSpriteTransform(){const c=this.data.points;if(c.length<4)return;const e=rx(c),t=c[1].x-c[0].x,i=c[1].y-c[0].y,n=Math.atan2(i,t),r=fx(c[0],c[1]),s=fx(c[1],c[2]);this.sprite.position.set(e.x,e.y),this.sprite.rotation=n,this.sprite.width=r,this.sprite.height=s}createEditControlLayer(){const c={outlineStrokeColor:String(this.config.outlineStrokeColor),outlineStrokeWidth:this.config.outlineStrokeWidth,outlineDashed:this.config.outlineDashed,outlineDashArray:this.config.outlineDashArray,outlineFillColor:this.config.outlineFillColor?String(this.config.outlineFillColor):void 0,outlineOffset:this.config.outlineOffset,iconWrapperFillColor:String(this.config.iconWrapperFillColor),showRotateButton:!0,showScaleButton:!0,showRadialScaleButton:!1,showDeleteButton:!0,showMoveButton:!0,rotateMode:"step",stepRotateAngle:"ccw"===this.config.rotateDirection?-Math.PI/2:Math.PI/2,scaleMode:this.config.lockAspectRatio?"ratioLocked":"free",textColor:String(this.config.textColor),textPosition:this.config.textPosition,textOffset:this.config.textOffset,moveButtonOffset:this.controlsConfig.moveButtonOffset,textFontSize:this.controlsConfig.textFontSize,textFontFamily:this.controlsConfig.textFontFamily,textFontWeight:this.controlsConfig.textFontWeight};this.editableShape=new Rw({editControls:this.deps.editControls});const e={config:c,zonePoints:this.data.points,sizeConstraintPerEdge:this.resolveSizeConstraintPerEdge,contentLayer:qS,events:{onRemove:this.handleDelete,onRotateStart:this.handleRotateStart,onRotateMove:this.handleRotateMove,onClickRotate:this.handleTapRotate,onRotateEnd:this.handleTransformEnd,onScaleStart:this.handleScaleStart,onScaleMove:this.handleScaleMove,onScaleEnd:this.handleTransformEnd,onMoveStart:this.handleMoveStart,onMoveMove:this.handleMove,onMoveEnd:this.handleMoveEnd,onClick:this.handleClick}};this.editableShape.attach(this,{id:this.data.id,topology:"quad",layerOptions:e,editingState:{showRotateButton:!0,showScaleButton:!0,showRadialScaleButton:!1,showDeleteButton:!0,showMoveButton:!0,showBorder:!0,showSizeText:this.config.showSizeText},idleState:{showRotateButton:!1,showScaleButton:!1,showRadialScaleButton:!1,showDeleteButton:!1,showMoveButton:!1,showBorder:!1,showSizeText:!1}})}setupInteraction(){this.clickHandler=new dw(this,{onClick:c=>{this.isDragging||(null==c?void 0:c.target)!==this&&(null==c?void 0:c.target)!==this.sprite||this.handleClick()}}),this.on("pointerdown",this.onDragStart,this)}redraw(){this.data.points.length<4||(this.updateSpriteTransform(),this.editableShape.updatePoints(this.data.points))}applyEditing(){this.editableShape.setEditing(this.editing),this.zIndex=this.editing?1e3:0}updateEditState(c){this.editing!==c&&(this.editing=c,this.applyEditing())}isEditing(){return this.editing}getData(){return{id:this.data.id,furnitureType:this.data.furnitureType,points:this.data.points.map(c=>__spreadValues({},c))}}updateData(c){this.data=__spreadProps(__spreadValues({},c),{points:c.points.map(c=>__spreadValues({},c))}),this.captureOriginalSize(),this.data.points.length>=4&&(this.updateSpriteTransform(),this.editableShape.updatePoints(this.data.points))}destroy(){var c,e,t;null==(c=this.editableShape)||c.detach(),null==(e=this.gestureSession)||e.cancel(),this.gestureSession=null,null==(t=this.clickHandler)||t.destroy(),this.clickHandler=null,super.destroy({children:!0})}}class XC{constructor(c){__publicField(this,"furnitureMap",new Map),__publicField(this,"unsubscribeFns",[]),this.appService=c,this.applyLayerVisibility(c.runtime.showFurnitures);const e=oS(c.runtime,"editingFurnitureIds",c=>{V_.log(`[runtime] editingFurnitureIds: ${c}`),this.updateEditState()}),t=oS(c.runtime,"showFurnitures",c=>{V_.log(`[runtime] showFurnitures: ${c}`),this.applyLayerVisibility(c)});this.unsubscribeFns.push(e,t)}drawFurnitures(c){return __async(this,null,function*(){if(!c||0===c.length)return void this.clearAll();const e=new Set(this.furnitureMap.keys()),t=new Set(c.map(c=>c.id));for(const c of e)t.has(c)||this.removeFurniture(c);const i=[];for(const n of c){const c=this.furnitureMap.get(n.id);c?this.isDataEqual(c.getData(),n)||c.updateData(n):i.push(this.addFurniture(n))}yield Promise.all(i)})}addFurniture(c){return __async(this,null,function*(){const e=this.appService;if(!e.furnitureConfig.assets.find(e=>e.type===c.furnitureType))return void V_.warn(`[FurnitureManager] No asset found for furnitureType: ${c.furnitureType}`);const t=`furniture_${c.furnitureType}`;yield Oa.load(t);const i=function(c,e){return{coords:c.coords,editControls:c.editControlManager,furnitureConfig:c.furnitureConfig,controlsConfig:c.controlsConfig,gestures:c.gestureController,render:{request:e=>c.getApp().requestRender(e,!0),stop:e=>c.getApp().stopRender(e)},events:e}}(e,{onRemove:c=>{var t,i;null==(i=null==(t=e.events)?void 0:t.onRemoveFurniture)||i.call(t,c)},onUpdate:c=>{var t,i;null==(i=null==(t=e.events)?void 0:t.onUpdateFurniture)||i.call(t,c)},onClick:c=>{var t,i;null==(i=null==(t=e.events)?void 0:t.onClickFurniture)||i.call(t,c)}}),n=new YC({deps:i,data:c,textureAlias:t});this.furnitureMap.set(c.id,n),e.appContainer.addToLayer(qS,n);e.runtime.editingFurnitureIds.includes(c.id)&&(n.updateEditState(!0),this.moveToEditLayer(n))})}removeFurniture(c){var e;const t=this.furnitureMap.get(c);t&&(null==(e=t.parent)||e.removeChild(t),t.destroy(),this.furnitureMap.delete(c))}clearAll(){var c;for(const[,e]of this.furnitureMap)null==(c=e.parent)||c.removeChild(e),e.destroy();this.furnitureMap.clear()}applyLayerVisibility(c){const e=this.appService.appContainer.getLayer(qS);e&&(e.visible=c),this.furnitureMap.forEach(e=>{e.visible=c})}updateEditState(){const c=this.appService.runtime.editingFurnitureIds,{appContainer:e}=this.appService,t=e.getLayer(qS);this.furnitureMap.forEach((e,i)=>{const n=c.includes(i);e.updateEditState(n),n?this.moveToEditLayer(e):e.parent!==t&&this.moveToFurnitureLayer(e)})}moveToEditLayer(c){var e;null==(e=c.parent)||e.removeChild(c),this.appService.appContainer.addToLayer(nw,c)}moveToFurnitureLayer(c){var e;null==(e=c.parent)||e.removeChild(c),this.appService.appContainer.addToLayer(qS,c)}getFurnitures(){const c=[];return this.furnitureMap.forEach(e=>{c.push(e.getData())}),c}isDataEqual(c,e){if(c.id!==e.id)return!1;if(c.furnitureType!==e.furnitureType)return!1;if(c.points.length!==e.points.length)return!1;for(let t=0;t<c.points.length;t++)if(Math.abs(c.points[t].x-e.points[t].x)>.1||Math.abs(c.points[t].y-e.points[t].y)>.1)return!1;return!0}destroy(){this.unsubscribeFns.forEach(c=>c()),this.unsubscribeFns=[],this.clearAll()}}class ZC{constructor(c){__publicField(this,"editControlLayers",new Map),this.appService=c}registerEditControl(c,e){const t=this.appService;this.editControlLayers.has(c)&&this.unregisterEditControl(c);const i=new Nw(t,e);if(!t.appContainer.addToLayer(nw,i))throw V_.warn(`[EditControlManager] Failed to add edit control layer for id: ${c}`),i.destroy(),new Error(`Failed to register edit control for id: ${c}`);if(this.editControlLayers.set(c,i),e.contentLayer){const c=t.appContainer.getLayer(nw),i=t.appContainer.getLayer(e.contentLayer);c&&i&&(c.position.x!==i.position.x||c.position.y!==i.position.y)&&V_.warn(`[EditControlManager] Edit layer position does not match content layer "${e.contentLayer}" position — edit controls will appear misaligned. Ensure "${e.contentLayer}" is in ORIGIN_TRACKED_LAYERS.`,{edit:c.position,content:i.position})}return i}unregisterEditControl(c){const e=this.editControlLayers.get(c);if(!e)return;this.appService.appContainer.removeFromLayer(nw,e),e.destroy(),this.editControlLayers.delete(c)}getEditControl(c){return this.editControlLayers.get(c)}updateEditState(c,e){const t=this.editControlLayers.get(c);t&&t.updateEditState(e)}clearAll(){Array.from(this.editControlLayers.keys()).forEach(c=>this.unregisterEditControl(c))}getAllEditControls(){return Array.from(this.editControlLayers.values())}hasEditControl(c){return this.editControlLayers.has(c)}}function qC(c){return c.charAt(0).toUpperCase()+c.slice(1)}const KC=class c extends tn{constructor(c=wS){var e;super(),__publicField(this,"mapState",null),__publicField(this,"components",{}),__publicField(this,"managers",{}),__publicField(this,"config",yS),__publicField(this,"runtime"),__publicField(this,"appService"),__publicField(this,"coords"),__publicField(this,"scaleMin",.5),__publicField(this,"scaleMax",5),__publicField(this,"events",{}),__publicField(this,"instanceKey"),__publicField(this,"debugInstanceId"),__publicField(this,"previousLoggerRuntimeState",null),__publicField(this,"isDestroying",!1),__publicField(this,"hasActiveContextLoss",!1),__publicField(this,"createdAtMs",Date.now()),__publicField(this,"lastMapDataAtMs",null),__publicField(this,"lastMapDrawAtMs",null),__publicField(this,"lastPathDataAtMs",null),__publicField(this,"lastVisibilityChangeAtMs",null),__publicField(this,"containerElement"),__publicField(this,"onWebGLContextLost",c=>{var e,t;const i=c;if(null==(e=i.preventDefault)||e.call(i),this.hasActiveContextLoss)return;this.hasActiveContextLoss=!0;const n=this.getContextLossDiagnostics(c);V_.error("[Pixi] WebGL context lost",n.summary),V_.error("[Pixi] WebGL context lost tail",n.recentLifecycleTail),this.recordDebugLifecycleEvent("webglcontextlost",{eventType:c.type,statusMessage:null!=(t=i.statusMessage)?t:null})}),__publicField(this,"onWebGLContextRestored",c=>{this.hasActiveContextLoss=!1,V_.warn("[Pixi] WebGL context restored, scheduling render",this.getRendererDiagnostics({eventType:c.type})),this.recordDebugLifecycleEvent("webglcontextrestored",{eventType:c.type}),this.renderOnceNextFrame()}),__publicField(this,"emitter",{all:e=e||new Map,on:function(c,t){var i=e.get(c);i?i.push(t):e.set(c,[t])},off:function(c,t){var i=e.get(c);i&&(t?i.splice(i.indexOf(t)>>>0,1):e.set(c,[]))},emit:function(c,t){var i=e.get(c);i&&i.slice().map(function(c){c(t)}),(i=e.get("*"))&&i.slice().map(function(e){e(c,t)})}}),__publicField(this,"tickerState",{renderReasons:new Set,renderTimer:null,lastRequestReason:null,lastStopReason:null}),__publicField(this,"customCarpetResolvedMaxSizeCache",null),__publicField(this,"pendingAsyncRender",!1),__publicField(this,"isFirstMapDraw",!0),__publicField(this,"isMapDrawn",!1),__publicField(this,"onVisibilityChange",()=>{var c;this.lastVisibilityChangeAtMs=Date.now();"visible"===document.visibilityState||null==(c=this.components.interaction)||c.clearTouches()}),__publicField(this,"onRendererResize",()=>{var c,e;this.isDestroying||(null==(c=this.components.viewportContainer)||c.updateViewport(this.config),null==(e=this.components.background)||e.updateViewportBounds(this.getViewportBounds()),this.renderOnceNextFrame())}),this.instanceKey=c,this.debugInstanceId=zS(),this.coords=new LS(()=>{var c,e;return null!=(e=null==(c=this.runtime)?void 0:c.unit)?e:"meter"}),this.appService=new OS(this),globalThis.__PIXI_APP__=this,this.recordDebugLifecycleEvent("app:create",{instanceKey:c})}getRendererDiagnostics(c={}){var e,t,i,n,r,s,a,o,f,l,d,h,u,p,g,m,b,v,y,_,x,S;const w=this.containerElement&&"getBoundingClientRect"in this.containerElement&&"function"==typeof this.containerElement.getBoundingClientRect?this.containerElement.getBoundingClientRect():null,C=(null==(e=this.renderer)?void 0:e.type)===ii.WEBGPU?"webgpu":(null==(t=this.renderer)?void 0:t.type)===ii.WEBGL?"webgl":"unknown";return __spreadValues({sessionId:DS().getSessionId(),instanceId:this.debugInstanceId,requestedPreference:this.config.global.rendererPreference,rendererType:C,rendererWidth:null!=(n=null==(i=this.renderer)?void 0:i.width)?n:null,rendererHeight:null!=(s=null==(r=this.renderer)?void 0:r.height)?s:null,canvasWidth:null!=(o=null==(a=this.canvas)?void 0:a.width)?o:null,canvasHeight:null!=(l=null==(f=this.canvas)?void 0:f.height)?l:null,canvasClientWidth:null!=(h=null==(d=this.canvas)?void 0:d.clientWidth)?h:null,canvasClientHeight:null!=(p=null==(u=this.canvas)?void 0:u.clientHeight)?p:null,containerWidth:null!=(g=null==w?void 0:w.width)?g:null,containerHeight:null!=(m=null==w?void 0:w.height)?m:null,mapId:null!=(v=null==(b=this.mapState)?void 0:b.id)?v:null,mapWidth:null!=(_=null==(y=this.mapState)?void 0:y.width)?_:null,mapHeight:null!=(S=null==(x=this.mapState)?void 0:x.height)?S:null,isMapDrawn:this.isMapDrawn,visibilityState:document.visibilityState},c)}getElapsedMsSince(c){return"number"==typeof c?Math.max(0,Date.now()-c):null}getDeviceDiagnostics(){var c,e,t,i;const n=globalThis.navigator;return{devicePixelRatio:null!=(c=globalThis.devicePixelRatio)?c:null,userAgent:null!=(e=null==n?void 0:n.userAgent)?e:null,hardwareConcurrency:null!=(t=null==n?void 0:n.hardwareConcurrency)?t:null,deviceMemory:null!=(i=null==n?void 0:n.deviceMemory)?i:null,documentWasDiscarded:"wasDiscarded"in document?document.wasDiscarded:null}}getWebGLDiagnostics(){var c,e,t,i;const n=null==(c=this.renderer)?void 0:c.gl;if(!n)return{contextAttributes:null,isContextLost:null,drawingBufferWidth:null,drawingBufferHeight:null,vendor:null,renderer:null,version:null,shadingLanguageVersion:null,maxTextureSize:null,maxRenderbufferSize:null};const r=c=>{var e;if("number"!=typeof c||"function"!=typeof n.getParameter)return null;try{return null!=(e=n.getParameter(c))?e:null}catch(t){return null}},s="function"==typeof n.getExtension?n.getExtension("WEBGL_debug_renderer_info"):null;return{contextAttributes:"function"==typeof n.getContextAttributes&&null!=(e=n.getContextAttributes())?e:null,isContextLost:"function"==typeof n.isContextLost?n.isContextLost():null,drawingBufferWidth:null!=(t=n.drawingBufferWidth)?t:null,drawingBufferHeight:null!=(i=n.drawingBufferHeight)?i:null,vendor:s&&"number"==typeof s.UNMASKED_VENDOR_WEBGL?r(s.UNMASKED_VENDOR_WEBGL):null,renderer:s&&"number"==typeof s.UNMASKED_RENDERER_WEBGL?r(s.UNMASKED_RENDERER_WEBGL):null,version:r(n.VERSION),shadingLanguageVersion:r(n.SHADING_LANGUAGE_VERSION),maxTextureSize:r(n.MAX_TEXTURE_SIZE),maxRenderbufferSize:r(n.MAX_RENDERBUFFER_SIZE)}}getRecentLifecycleTail(){return DS().readCurrentSession().slice(-8).map(c=>{var e,t,i,n;return{seq:c.seq,ts:c.ts,event:c.event,sessionId:c.sessionId,instanceId:null!=(e=c.instanceId)?e:null,visibilityState:null!=(t=c.visibilityState)?t:null,rendererType:null!=(i=c.rendererType)?i:null,mapId:null!=(n=c.mapId)?n:null,detail:c.detail}})}getContextLossDiagnostics(c){var e;const t=c;return{summary:this.getRendererDiagnostics({eventType:c.type,statusMessage:null!=(e=t.statusMessage)?e:null,uptimeMs:this.getElapsedMsSince(this.createdAtMs),timeSinceLastMapDataMs:this.getElapsedMsSince(this.lastMapDataAtMs),timeSinceLastMapDrawMs:this.getElapsedMsSince(this.lastMapDrawAtMs),timeSinceLastPathDataMs:this.getElapsedMsSince(this.lastPathDataAtMs),timeSinceLastVisibilityChangeMs:this.getElapsedMsSince(this.lastVisibilityChangeAtMs),device:this.getDeviceDiagnostics(),webgl:this.getWebGLDiagnostics()}),recentLifecycleTail:this.getRecentLifecycleTail()}}attachRendererDiagnostics(){var c,e;(null==(c=this.renderer)?void 0:c.type)===ii.WEBGL&&"function"==typeof(null==(e=this.canvas)?void 0:e.addEventListener)?(this.canvas.addEventListener("webglcontextlost",this.onWebGLContextLost),this.canvas.addEventListener("webglcontextrestored",this.onWebGLContextRestored),V_.debug("[Pixi] Renderer diagnostics initialized",this.getRendererDiagnostics({contextListeners:!0}))):V_.debug("[Pixi] Renderer diagnostics initialized",this.getRendererDiagnostics({contextListeners:!1}))}detachRendererDiagnostics(){var c;"function"==typeof(null==(c=this.canvas)?void 0:c.removeEventListener)&&(this.canvas.removeEventListener("webglcontextlost",this.onWebGLContextLost),this.canvas.removeEventListener("webglcontextrestored",this.onWebGLContextRestored))}getDebugRendererType(){var c,e;return(null==(c=this.renderer)?void 0:c.type)===ii.WEBGPU?"webgpu":(null==(e=this.renderer)?void 0:e.type)===ii.WEBGL?"webgl":"unknown"}recordDebugLifecycleEvent(c,e){var t,i;DS().record({event:c,instanceId:this.debugInstanceId,visibilityState:"undefined"!=typeof document?document.visibilityState:null,rendererType:this.getDebugRendererType(),mapId:null!=(i=null==(t=this.mapState)?void 0:t.id)?i:null,detail:e})}initialize(c){return __async(this,null,function*(){const e=c,{resizeTo:t,events:i,config:n,runtime:r={}}=e,s=__objRest(e,["resizeTo","events","config","runtime"]);this.config=sS(y_({},yS,null!=n?n:{},(c,e)=>{if(Array.isArray(e))return e})),this.validateCustomZoneTypes(this.config),this.previousLoggerRuntimeState={config:__spreadValues({},I_),appLogSinkWarned:B_},O_({getLoggerConfig:()=>this.config.logger,getLegacyEnabled:()=>this.config.global.enableLogger}),V_.log("Applying config",this.config,n),this.runtime=sS(Object.assign({},_S,r));const a=this.instanceKey===wS;this.containerElement=t;const o=a&&this.config.interaction.enable,f=this.config.global.performanceMode||!a,l={gcActive:!1,autoStart:!1,sharedTicker:f,eventFeatures:{move:o,globalMove:!1,click:o,wheel:o}},d=__spreadValues(__spreadValues({resizeTo:a?t:void 0,resolution:this.config.global.resolution,antialias:!f&&zC(),depth:!f,autoDensity:!0,backgroundColor:0,backgroundAlpha:0},l),s),h=this.config.global.rendererPreference;if("webgpu"===h)try{yield this.init(__spreadProps(__spreadValues({},d),{preference:"webgpu"}))}catch(u){V_.warn("[Pixi] WebGPU initialization failed, falling back to WebGL:",u),yield this.init(__spreadProps(__spreadValues({},d),{preference:"webgl"}))}else yield this.init(__spreadProps(__spreadValues({},d),{preference:h}));this.attachRendererDiagnostics(),this.recordDebugLifecycleEvent("app:initialized",{isMainInstance:a,isPerformanceMode:f,requestedPreference:h}),V_.debug("[Pixi] Renderer initialized",this.getRendererDiagnostics({isMainInstance:a,isPerformanceMode:f})),this.preloadAssets(),this.scaleMax=this.config.interaction.zoomRange.max,this.scaleMin=this.config.interaction.zoomRange.min,this.events=i,this.initializeViewportContainer(),this.initializeInteraction(),this.initializeAppContainer(),this.renderer.on("resize",this.onRendererResize),this.managers.mapManager=new bw(this.appService),this.managers.heatmapManager=new Pw(this.appService),this.managers.pathManager=new Aw(this.appService),this.managers.controlsManager=new iC(this.appService),this.managers.detectedObjectManager=new rC(this.appService),this.managers.customElementsManager=new RC(this.appService),this.managers.roomsManager=new LC(this.appService),this.managers.customCarpetManager=new VC(this.appService),this.managers.furnitureManager=new XC(this.appService),this.managers.editControlManager=new ZC(this.appService),this.setupMapRotationListener(),document.addEventListener("visibilitychange",this.onVisibilityChange)})}drawMap(c){return __async(this,null,function*(){var e,t,i,n,r,s,a,o;this.lastMapDataAtMs=Date.now(),this.isMapDrawn=!1,V_.log("[Map] drawMap",c);const{size:f,resolution:l,origin:d,id:h}=c;void 0!==(null==(e=this.mapState)?void 0:e.id)&&this.mapState.id!==h&&this.managers.pathManager.clear(),d[0]===(null==(t=this.mapState)?void 0:t.origin.x)&&d[1]===(null==(i=this.mapState)?void 0:i.origin.y)||(this.appService.appContainer.updateOriginTrackedLayers(...d),this.managers.pathManager.updatePositionByOrigin(...d),this.managers.heatmapManager.updatePositionByOrigin(...d)),this.mapState={id:c.id,status:1===c.status,origin:{x:d[0],y:d[1]},charger:{x:c.charger.coordinate[0],y:c.charger.coordinate[1]},chargerDirection:null!=(n=c.charger.angle)?n:0,resolution:l,width:f[0],height:f[1],mapType:"structured"},this.coords.setResolution(l),V_.debug("[Map] Structured map state updated",{mapId:h,mapWidth:f[0],mapHeight:f[1],mapResolution:l,mapStatus:1===c.status,originX:d[0],originY:d[1]}),this.isFirstMapDraw&&(this.isFirstMapDraw=!1,null==(s=null==(r=this.events)?void 0:r.onMapFirstDrawed)||s.call(r,this.mapState)),null==(o=null==(a=this.events)?void 0:a.onMapDrawed)||o.call(a,this.mapState),this.emitter.emit("mapStateUpdate",this.mapState),yield this.managers.mapManager.drawMap(c),0===f[0]||0===f[1]?(V_.warn("[Map] Structured map cleared by incoming data",this.getRendererDiagnostics({mapId:h,mapWidth:f[0],mapHeight:f[1],mapResolution:l,mapStatus:1===c.status,originX:d[0],originY:d[1]})),this.managers.pathManager.clear(),this.managers.roomsManager.clear(),this.isMapDrawn=!1):(this.isMapDrawn=!0,this.lastMapDrawAtMs=Date.now(),this.managers.heatmapManager.onMapLoaded()),this.emitRoomsDrawed(),this.renderOnce()})}drawRasterMap(c){return __async(this,null,function*(){var e,t,i,n,r,s,a,o,f;this.lastMapDataAtMs=Date.now(),this.isMapDrawn=!1,V_.log("[Map] drawRasterMap",c);const{mapHeader:l,mapData:d}=c,{originX:h,originY:u}=l;h===(null==(e=this.mapState)?void 0:e.origin.x)&&u===(null==(t=this.mapState)?void 0:t.origin.y)||(this.appService.appContainer.updateOriginTrackedLayers(h,u),this.managers.pathManager.updatePositionByOrigin(h,u),this.managers.heatmapManager.updatePositionByOrigin(h,u)),this.mapState={id:l.id,status:l.mapStable,origin:{x:h,y:u},charger:{x:l.chargeX,y:l.chargeY},chargerDirection:null!=(i=l.chargeDirection)?i:0,resolution:100*l.mapResolution,width:l.mapWidth,height:l.mapHeight,version:l.version,mapType:"raster"},this.coords.setResolution(100*l.mapResolution),V_.debug("[Map] Raster map state updated",{mapId:l.id,mapWidth:l.mapWidth,mapHeight:l.mapHeight,mapResolution:100*l.mapResolution,mapStatus:l.mapStable,originX:h,originY:u,version:null!=(n=l.version)?n:null}),this.isFirstMapDraw&&(this.isFirstMapDraw=!1,null==(s=null==(r=this.events)?void 0:r.onMapFirstDrawed)||s.call(r,this.mapState)),null==(o=null==(a=this.events)?void 0:a.onMapDrawed)||o.call(a,this.mapState),this.emitter.emit("mapStateUpdate",this.mapState),yield this.managers.mapManager.drawRasterMap(d.parsed,this.mapState),0===l.mapWidth||0===l.mapHeight?(V_.warn("[Map] Raster map cleared by incoming data",this.getRendererDiagnostics({mapId:l.id,mapWidth:l.mapWidth,mapHeight:l.mapHeight,mapResolution:100*l.mapResolution,mapStatus:l.mapStable,originX:h,originY:u,version:null!=(f=l.version)?f:null})),this.managers.pathManager.clear(),this.managers.roomsManager.clear(),this.isMapDrawn=!1):(this.isMapDrawn=!0,this.lastMapDrawAtMs=Date.now(),this.managers.heatmapManager.onMapLoaded()),this.emitRoomsDrawed(),this.renderOnce()})}emitRoomsDrawed(){var c,e,t;const i=null==(c=this.events)?void 0:c.onRoomsDrawed;if(!i)return;const n=null!=(t=null==(e=this.mapState)?void 0:e.origin)?t:{x:0,y:0};i(this.managers.mapManager.getAllRooms().map(c=>({id:c.id,centerPoint:c.centerPoint,relativeCenterPoint:{x:c.centerPoint.x-n.x,y:c.centerPoint.y-n.y}})))}drawPath(c){var e,t,i;this.lastPathDataAtMs=Date.now(),V_.log("[Path] drawPath",c),null==(i=null==(e=this.events)?void 0:e.onPathDrawed)||i.call(e,{id:c.pathHeader.pathId,type:c.pathHeader.type,direction:c.pathHeader.direction,count:c.pathHeader.count,initFlag:c.pathHeader.initFlag,robotPosition:null!=(t=c.pathPoints[c.pathPoints.length-1])?t:null}),this.managers.pathManager.draw(c),this.renderOnce()}drawRoomProperty(c){return __async(this,null,function*(){var e,t;V_.log("[Room] drawRoomProperty",c),null==(t=null==(e=this.events)?void 0:e.onRoomPropertiesDrawed)||t.call(e,c),yield this.managers.roomsManager.drawRoomProperty(c),this.renderOnceNextFrame()})}drawCustomCarpets(c){return __async(this,null,function*(){V_.log("[CustomCarpets] drawCustomCarpets",c),yield this.managers.customCarpetManager.drawCustomCarpets(c),this.renderOnceNextFrame()})}drawFurnitures(c){return __async(this,null,function*(){V_.log("[Furniture] drawFurnitures",c),yield this.managers.furnitureManager.drawFurnitures(c),this.renderOnceNextFrame()})}drawHeatmap(c){V_.log("[Heatmap] drawHeatmap",c),this.managers.heatmapManager.draw(c),this.renderOnce()}drawForbiddenSweepZones(c){V_.log("[Controls] drawForbiddenSweepZones",c),this.managers.controlsManager.drawForbiddenSweepZones(c),this.renderOnceNextFrame()}drawForbiddenMopZones(c){V_.log("[Controls] drawForbiddenMopZones",c),this.managers.controlsManager.drawForbiddenMopZones(c),this.renderOnceNextFrame()}drawCleanZones(c){V_.log("[Controls] drawCleanZones",c),this.managers.controlsManager.drawCleanZones(c),this.renderOnceNextFrame()}drawCustomZones(c,e){dS(c)?V_.warn(`[MapApplication] drawCustomZones: '${c}' is a built-in type; use draw${qC(c)}s() instead`):(V_.log("[Controls] drawCustomZones",c,e),this.managers.controlsManager.drawCustomZones(c,e),this.renderOnceNextFrame())}getCustomZones(c){return dS(c)?(V_.warn(`[MapApplication] getCustomZones: '${c}' is a built-in type; use get${qC(c)}s() instead`),[]):this.managers.controlsManager.getCustomZones(c)}clearCustomZones(c){dS(c)?V_.warn(`[MapApplication] clearCustomZones: '${c}' is a built-in type; use clearAll${qC(c)}s() instead`):(V_.log("[Controls] clearCustomZones",c),this.managers.controlsManager.clearCustomZones(c),this.renderOnceNextFrame())}setEditingCustomZones(c,e){var t;dS(c)?V_.warn(`[MapApplication] setEditingCustomZones: '${c}' is a built-in type; use runtime.editing${qC(c)}Ids instead`):this.runtime.editingCustomZoneIds=__spreadProps(__spreadValues({},null!=(t=this.runtime.editingCustomZoneIds)?t:{}),{[c]:[...e]})}drawVirtualWalls(c){V_.log("[Controls] drawVirtualWalls",c),this.managers.controlsManager.drawVirtualWalls(c),this.renderOnceNextFrame()}drawSpots(c){V_.log("[Controls] drawSpots",c),this.managers.controlsManager.drawSpots(c),this.renderOnceNextFrame()}drawWayPoints(c){V_.log("[Controls] drawWayPoints",c),this.managers.controlsManager.drawWayPoints(c),this.renderOnceNextFrame()}drawDetectedObjects(c){return __async(this,null,function*(){V_.log("[DetectedObject] drawDetectedObjects",c),yield this.managers.detectedObjectManager.drawDetectedObjects(c),this.renderOnceNextFrame()})}drawCustomCarpet(c){V_.log("[CustomCarpet] drawCustomCarpet",c),this.managers.customCarpetManager.drawCustomCarpets(c),this.renderOnceNextFrame()}drawCustomElements(c){return __async(this,null,function*(){V_.log("[CustomElements] drawCustomElements",c),yield this.managers.customElementsManager.drawCustomElements(c),this.renderOnceNextFrame()})}getForbiddenSweepZones(){return this.managers.controlsManager.getForbiddenSweepZones()}getForbiddenMopZones(){return this.managers.controlsManager.getForbiddenMopZones()}getCleanZones(){return this.managers.controlsManager.getCleanZones()}getVirtualWalls(){return this.managers.controlsManager.getVirtualWalls()}getSpots(){return this.managers.controlsManager.getSpots()}getWayPoints(){return this.managers.controlsManager.getWayPoints()}getEffectiveDividerPoints(){return this.managers.controlsManager.getEffectiveDividerPoints()}getCustomCarpets(){return this.managers.customCarpetManager.getCustomCarpets()}getFurnitures(){return this.managers.furnitureManager.getFurnitures()}getDividerEndPoints(){return this.managers.controlsManager.getDividerEndPoints()}resetPanZoom(){this.components.interaction.setPanZoom()}forceEndGesture(){V_.log("[Map] forceEndGesture"),this.components.interaction.forceEndGesture()}fitMapToView(c,e=!1){if(!c||c.minX===c.maxX||c.minY===c.maxY)return;const t=this.config.map.autoPaddingVerticalPercent,i=this.config.map.autoPaddingHorizontalPercent,n=this.getViewportBounds(),r=this.components.appContainer.getMapRotationRadians(),s=this.calculateRotatedBounds(c,r),a=s.maxX-s.minX,o=s.maxY-s.minY,f=n.width,l=n.height,d=f*(1-2*i)/a,h=l*(1-2*t)/o,u=Math.min(d,h),p=this.config.interaction.fitMinScale,g=this.config.interaction.fitMaxScale,m=Math.max(p,Math.min(g,u));this.setScaleBounds(this.config.interaction.zoomRange.min,this.config.interaction.zoomRange.max),m<this.scaleMin&&(this.setScaleBounds(m,this.scaleMax),V_.debug("[MapApplication] scaleMin lowered for fit:",{configured:this.config.interaction.zoomRange.min,adjusted:m})),m>this.scaleMax&&(this.setScaleBounds(this.scaleMin,m),V_.debug("[MapApplication] scaleMax raised for fit:",{configured:this.config.interaction.zoomRange.max,adjusted:m}));const b=c.minX+(c.maxX-c.minX)/2,v=c.minY+(c.maxY-c.minY)/2,y=this.config.map.autoFitOffset||{x:0,y:0},_=f/2+(y.x||0),x=l/2+(y.y||0),S=Math.cos(r),w=Math.sin(r),C=_-(b*S-v*w)*m,A=x-(b*w+v*S)*m;V_.debug("[MapApplication] fitMapToView calculated:",{rotation:this.components.appContainer.getMapRotation(),originalBounds:c,rotatedBounds:s,finalScale:m,position:{x:C,y:A}}),this.components.interaction.setPanZoom({targetPosition:{x:C,y:A},targetScale:{x:m,y:m},setCenter:!0,setScale:!0},e)}setScaleBounds(c,e){this.scaleMin=c,this.scaleMax=e,this.components.interaction.scaleMin=c,this.components.interaction.scaleMax=e}validateCustomZoneTypes(c){var e;const t=["minSize","strokeColor","strokeWidth","fillColor","outlineOffset","outlineStrokeColor","outlineStrokeWidth","outlineDashed","outlineDashArray","outlineFillColor","iconWrapperFillColor","textColor","textPosition","textOffset","showRotateButton","editing","normal"],i=null!=(e=c.customZoneTypes)?e:{},n=hS.cleanZone;for(const[,r]of Object.entries(i))for(const c of t)void 0===r[c]&&(r[c]=n[c])}calculateRotatedBounds(c,e){if(0===e)return c;const t=(c.minX+c.maxX)/2,i=(c.minY+c.maxY)/2,n=[{x:c.minX-t,y:c.minY-i},{x:c.maxX-t,y:c.minY-i},{x:c.maxX-t,y:c.maxY-i},{x:c.minX-t,y:c.maxY-i}],r=Math.cos(e),s=Math.sin(e),a=n.map(c=>({x:c.x*r-c.y*s,y:c.x*s+c.y*r}));let o=1/0,f=1/0,l=-1/0,d=-1/0;return a.forEach(c=>{o=Math.min(o,c.x),f=Math.min(f,c.y),l=Math.max(l,c.x),d=Math.max(d,c.y)}),{minX:o+t,minY:f+i,maxX:l+t,maxY:d+i}}getViewportBounds(){var c;return(null==(c=this.components.viewportContainer)?void 0:c.getViewportBounds())||{x:0,y:0,width:this.renderer.width,height:this.renderer.height}}updateRuntime(c){Object.assign(this.runtime,c),V_.log("[runtime] runtime updated",c),this.renderOnceNextFrame()}updateConfig(c){var e,t,i;y_(this.config,c,(c,e)=>{if(Array.isArray(e))return e}),c.customZoneTypes&&this.validateCustomZoneTypes(this.config),null==(e=this.managers.controlsManager)||e.updateRenderOrder();void 0!==(null==(t=c.controls)?void 0:t.carpet)&&(null==(i=this.managers.customCarpetManager)||i.refreshConfig()),V_.log("[Config] Configuration updated",c),this.renderOnceNextFrame()}metersToPixels(c){return this.coords.toPixels(c)}pixelsToMeters(c){return this.coords.toMeters(c)}toFixedSize(c,e){return c/(null!=e?e:this.components.appContainer.scale.x)}fromFixedSize(c,e){return c*(null!=e?e:this.components.appContainer.scale.x)}getViewportCenterPoint(){if(!this.mapState)return V_.warn("Map state not available, cannot calculate center point"),null;const c=this.getViewportBounds(),e=c.x+c.width/2,t=c.y+c.height/2,i=this.components.appContainer,n=i.scale.x,r=i.getMapRotationRadians(),s=(e-i.x)/n,a=(t-i.y)/n,o=Math.cos(r),f=Math.sin(r),l=-s*f+a*o;return{x:s*o+a*f-this.mapState.origin.x,y:l-this.mapState.origin.y}}getMapCenterPoint(){if(!this.mapState)return V_.warn("Map state not available, cannot calculate map center point"),null;const c=this.managers.mapManager.mapBounds;if(c.minX===1/0||c.minY===1/0||c.maxX===-1/0||c.maxY===-1/0)return V_.warn("Invalid map bounds, cannot calculate map center point"),null;const e=(c.minX+c.maxX)/2,t=(c.minY+c.maxY)/2;return{x:e-this.mapState.origin.x,y:t-this.mapState.origin.y}}getWallPointsByViewportCenter(c){var e;const{width:t=this.config.controls.virtualWall.minWidth,direction:i="horizontal",offsetX:n=0,offsetY:r=0}=c||{},s=this.getViewportCenterPoint()||{x:0,y:0},a=this.coords.toPixels(t)/2,o=(null==(e=this.components.appContainer)?void 0:e.getMapRotationRadians())||0,f=Math.cos(o),l=Math.sin(o);let d;return d="horizontal"===i?[{vx:-a+n,vy:r},{vx:a+n,vy:r}]:[{vx:n,vy:-a+r},{vx:n,vy:a+r}],d.map(c=>({x:s.x+c.vx*f+c.vy*l,y:s.y-c.vx*l+c.vy*f}))}getForbiddenSweepZonePointsByViewportCenter(c){const e=this.config.controls.forbiddenSweepZone,{size:t=e.minSize,offsetX:i=0,offsetY:n=0}=c||{};return this.generateZonePoints(t,i,n)}getForbiddenMopZonePointsByViewportCenter(c){const e=this.config.controls.forbiddenMopZone,{size:t=e.minSize,offsetX:i=0,offsetY:n=0}=c||{};return this.generateZonePoints(t,i,n)}getCleanZonePointsByViewportCenter(c){const e=this.config.controls.cleanZone,{size:t=e.minSize,offsetX:i=0,offsetY:n=0}=c||{};return this.generateZonePoints(t,i,n)}getSpotPointByViewportCenter(c){const{offsetX:e=0,offsetY:t=0}=c||{},i=this.getViewportCenterPoint()||{x:0,y:0};return{x:i.x+e,y:i.y+t}}getFurniturePointsByViewportCenter(c){var e,t;const{furnitureType:i=1,offsetX:n=0,offsetY:r=0}=c||{},s=this.config.furniture.assets.find(c=>c.type===i),a=this.getViewportCenterPoint()||{x:0,y:0};return this.buildRectPoints({center:a,widthMeters:null!=(e=null==s?void 0:s.width)?e:1.8,heightMeters:null!=(t=null==s?void 0:s.height)?t:2,applyMapRotation:!0,visualOffsetX:n,visualOffsetY:r})}getResolvedCustomCarpetMaxSize(){const c=this.config.controls.carpet.maxSize;if(this.customCarpetResolvedMaxSizeCache&&this.customCarpetResolvedMaxSizeCache.key===c)return this.customCarpetResolvedMaxSizeCache.value;const e=US(this.config.controls.carpet.minSize,c,"carpet");return this.customCarpetResolvedMaxSizeCache={key:c,value:e},e}getCustomCarpetPointsByViewportCenter(c){var e,t;const i=this.config.controls.carpet.minSize,n=this.getResolvedCustomCarpetMaxSize(),{offsetX:r=0,offsetY:s=0}=c||{},a=(c,e)=>{const t="number"==typeof c&&Number.isFinite(c)?c:e;return null!=n?Math.min(Math.max(t,i),n):Math.max(t,i)},o=null!=(e=null==c?void 0:c.width)?e:null==c?void 0:c.height,f=null!=(t=null==c?void 0:c.height)?t:null==c?void 0:c.width,l=a(o,i),d=a(f,i),h=this.getViewportCenterPoint()||{x:0,y:0};return this.buildRectPoints({center:h,widthMeters:l,heightMeters:d,applyMapRotation:!0,visualOffsetX:r,visualOffsetY:s})}getRectPointsByCenter(c){const{center:e,width:t,height:i,applyMapRotation:n=!0}=c;return this.buildRectPoints({center:e,widthMeters:t,heightMeters:i,applyMapRotation:n})}areRoomsAdjacent(c){return c&&0!==c.length?this.managers.mapManager.areRoomsAdjacent(c):(V_.warn("[Room] No room IDs provided"),!1)}isPointInAnyRoom(c){return c&&"number"==typeof c.x&&"number"==typeof c.y?this.mapState?this.managers.mapManager.isPointInAnyRoom(c):(V_.warn("[Room] Map state not available"),null):(V_.warn("[Room] Invalid point provided"),null)}isWallIntersectsAnyRoom(c){return c&&2===c.length&&c[0]&&c[1]&&"number"==typeof c[0].x&&"number"==typeof c[0].y&&"number"==typeof c[1].x&&"number"==typeof c[1].y?this.mapState?this.managers.mapManager.isWallIntersectsAnyRoom(c):(V_.warn("[Room] Map state not available"),!1):(V_.warn("[Room] Invalid wall points provided"),!1)}isZoneIntersectsAnyRoom(c){return c&&4===c.length&&c[0]&&c[1]&&c[2]&&c[3]&&"number"==typeof c[0].x&&"number"==typeof c[0].y&&"number"==typeof c[1].x&&"number"==typeof c[1].y&&"number"==typeof c[2].x&&"number"==typeof c[2].y&&"number"==typeof c[3].x&&"number"==typeof c[3].y?this.mapState?this.managers.mapManager.isZoneIntersectsAnyRoom(c):(V_.warn("[Room] Map state not available"),!1):(V_.warn("[Room] Invalid zone points provided"),!1)}isNearChargerOrRobot(c,e,t){var i,n;if(!c||c.length<1)return V_.warn("[Distance] Invalid points array: must have at least 1 point"),!1;if(1!==c.length&&2!==c.length&&4!==c.length)return V_.warn("[Distance] Invalid points array: must have exactly 1 (point), 2 (wall) or 4 (zone) points"),!1;if(e<=0)return V_.warn("[Distance] Invalid threshold: must be greater than 0"),!1;if(!this.mapState)return V_.warn("[Distance] Map state not available"),!1;const{checkCharger:r=!0,checkRobot:s=!1}=t||{};if(!r&&!s)return V_.warn("[Distance] At least one of checkCharger or checkRobot must be true"),!1;const a=this.coords.toPixels(e);if(r){const e=this.appService.getChargerPosition();if(e){const t=null==(i=this.mapState)?void 0:i.charger.x,r=null==(n=this.mapState)?void 0:n.charger.y;if(0===t&&0===r)return V_.warn("[Distance] Charger position not available"),!1;const s=$_(e,c);if(s<=a)return V_.log(`[Distance] Too close to charger: ${s.toFixed(2)} pixels (threshold: ${a.toFixed(2)} pixels)`),!0}else V_.warn("[Distance] Charger position not available")}if(s){const e=this.appService.getRobotPosition();if(e){const t=$_(e,c);if(t<=a)return V_.log(`[Distance] Too close to robot: ${t.toFixed(2)} pixels (threshold: ${a.toFixed(2)} pixels)`),!0}else V_.warn("[Distance] Robot position not available")}return!1}snapshot(c){return __async(this,null,function*(){var e;this.render();const{snapshot:t,global:i}=this.config,n=null!=(e=null==c?void 0:c.backgroundColor)?e:i.backgroundColor,r=this.components.appContainer,s=r.getSnapshotBounds(),a=Math.floor(s.x),o=Math.floor(s.y),f=Math.ceil(s.x+s.width)-a,l=Math.ceil(s.y+s.height)-o;if(f<=0||l<=0)return V_.error("[MapApplication] Snapshot failed: invalid bounds",s),"";const d=t.resolution||window.devicePixelRatio||2,h=Hl.create({width:f,height:l,resolution:d}),u=new _o;u.rect(0,0,f,l).fill(n);const p=new w;p.translate(-a,-o);try{this.renderer.render({container:u,target:h}),this.renderer.render({container:r,target:h,transform:p,clear:!1});return yield this.renderer.extract.base64({target:h,format:t.format,quality:t.quality,antialias:t.antialias})}catch(g){return V_.error("[MapApplication] Snapshot failed:",g),""}finally{u.destroy(),h.destroy(!0)}})}snapshotByData(e){return __async(this,arguments,function*({map:e,path:t,roomProperties:i,customElements:s,forbiddenSweepZones:a,forbiddenMopZones:o,virtualWalls:f,detectedObjects:l,furnitures:d,carpets:h},u={},p){const g=`SNAPSHOT_${zS()}`;V_.log(`[MapApplication] ${g} snapshot start`);const m=new c(g);try{if(yield m.initialize({config:this.config,runtime:u}),!e)throw new Error("Map data is required");if(e.startsWith("7b22")){const c=Ep(e);yield m.drawMap(c)}else{const c=Rp(e,{pointsStructured:!0});if(!c)throw new Error("Failed to decode raster map data");yield m.drawRasterMap(c)}if(t){const{decodePath:c}=yield r(()=>__async(this,null,function*(){const{decodePath:c}=yield Promise.resolve().then(()=>Km);return{decodePath:c}}),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href),e=c(t);m.drawPath(e)}i&&i.length>0&&(yield m.drawRoomProperty(i)),a&&a.length>0&&m.drawForbiddenSweepZones(a),o&&o.length>0&&m.drawForbiddenMopZones(o),f&&f.length>0&&m.drawVirtualWalls(f),h&&h.length>0&&(yield m.drawCustomCarpets(h)),d&&d.length>0&&(yield m.drawFurnitures(d)),l&&l.length>0&&(yield m.drawDetectedObjects(l)),s&&s.length>0&&(yield m.drawCustomElements(s));const c=yield m.snapshot(p);return V_.log(`[MapApplication] ${g} snapshot completed successfully`),c}catch(b){throw V_.error(`[MapApplication] ${g} snapshot other map failed:`,b),b}finally{V_.log(`[MapApplication] ${g} destroy`),m.destroy()}})}renderOnce(){V_.debug("[Pixi] renderOnce");try{this.render()}catch(c){V_.error("[Pixi] renderOnce failed",this.getRendererDiagnostics({error:c}))}}renderOnceNextFrame(){this.pendingAsyncRender||(this.pendingAsyncRender=!0,requestAnimationFrame(()=>{V_.debug("[Pixi] renderOnceNextFrame");try{this.render()}catch(c){V_.error("[Pixi] renderOnceNextFrame failed",this.getRendererDiagnostics({error:c}))}finally{this.pendingAsyncRender=!1}}))}requestRender(c,e=!1){if(this.tickerState.lastRequestReason=c,!e)return this.renderOnceNextFrame(),void this.emitRenderStateUpdate();this.tickerState.renderReasons.add(c),this.ticker.started||(V_.debug(`🎬 [Ticker] START: ${c}`),this.ticker.start()),this.emitRenderStateUpdate()}stopRender(c){this.tickerState.lastStopReason=c,this.tickerState.renderReasons.delete(c),0===this.tickerState.renderReasons.size&&this.scheduleStopRender("final",100),this.emitRenderStateUpdate()}getRenderState(){var c;const e=Boolean(null==(c=this.ticker)?void 0:c.started);return{continuous:e,fps:e?Math.round(this.ticker.FPS):0,lastRequestReason:this.tickerState.lastRequestReason,lastStopReason:this.tickerState.lastStopReason,activeReasons:[...this.tickerState.renderReasons]}}emitRenderStateUpdate(){this.emitter.emit("renderStateUpdate",this.getRenderState())}destroy(){var c,e,t,i,n,r,s,a,o,f,l,d,h;if(!this.isDestroying){this.isDestroying=!0,V_.log("[MapApplication] destroy"),this.recordDebugLifecycleEvent("destroy:start");try{this.tickerState.renderTimer&&(clearTimeout(this.tickerState.renderTimer),this.tickerState.renderTimer=null),this.tickerState.renderReasons.clear(),this.emitter.all.clear(),null==(c=this.renderer)||c.off("resize",this.onRendererResize),document.removeEventListener("visibilitychange",this.onVisibilityChange),null==(e=this.managers.pathManager)||e.destroy(),null==(t=this.managers.mapManager)||t.destroy(),null==(i=this.managers.controlsManager)||i.destroy(),null==(n=this.managers.furnitureManager)||n.destroy(),null==(r=this.managers.detectedObjectManager)||r.destroy(),null==(s=this.managers.customElementsManager)||s.destroy(),null==(a=this.managers.roomsManager)||a.destroy(),null==(o=this.components.interaction)||o.destroy(),null==(f=this.components.background)||f.destroy(),null==(l=this.components.viewportContainer)||l.destroy(),null==(d=this.components.appContainer)||d.destroy(),null==(h=this.managers.heatmapManager)||h.destroy(),this.detachRendererDiagnostics(),function(c){var e;I_=c?__spreadValues({},c.config):{},B_=null!=(e=null==c?void 0:c.appLogSinkWarned)&&e}(this.previousLoggerRuntimeState),this.previousLoggerRuntimeState=null,globalThis.__PIXI_APP__===this&&delete globalThis.__PIXI_APP__,super.destroy({removeView:!0},{children:!0,texture:!0,textureSource:!0,context:!0})}finally{globalThis.__PIXI_APP__===this&&delete globalThis.__PIXI_APP__,this.recordDebugLifecycleEvent("destroy:end")}}}initializeViewportContainer(){this.components.viewportContainer=new VS(this.config,this.containerElement),this.stage.addChild(this.components.viewportContainer);const c=this.getViewportBounds();this.components.background=new GC(this.config.global,c,()=>{this.renderOnceNextFrame()}),this.components.viewportContainer.addChild(this.components.background),this.components.viewportContainer.setChildIndex(this.components.background,0),aS(this.config.global,()=>{var c;null==(c=this.components.background)||c.update(this.config.global)})}initializeAppContainer(){this.components.appContainer=new aw(this.appService),this.components.interaction.addChild(this.components.appContainer)}initializeInteraction(){this.components.interaction=new fS(this.appService),this.components.viewportContainer.addChild(this.components.interaction)}scheduleStopRender(c,e){this.tickerState.renderTimer&&clearTimeout(this.tickerState.renderTimer),this.tickerState.renderTimer=setTimeout(()=>{this.tickerState.renderReasons.delete(c),0===this.tickerState.renderReasons.size&&(V_.debug("⏸️ [Ticker] STOP"),this.ticker&&(this.ticker.stop(),this.emitRenderStateUpdate()))},e)}generateZonePoints(c,e,t){const i=this.getViewportCenterPoint()||{x:0,y:0};return this.buildRectPoints({center:i,widthMeters:c,heightMeters:c,applyMapRotation:!0,visualOffsetX:e,visualOffsetY:t})}buildRectPoints(c){var e;const{center:t,widthMeters:i,heightMeters:n,applyMapRotation:r,visualOffsetX:s=0,visualOffsetY:a=0}=c,o=this.coords.toPixels(i)/2,f=this.coords.toPixels(n)/2,l=r&&(null==(e=this.components.appContainer)?void 0:e.getMapRotationRadians())||0,d=Math.cos(l),h=Math.sin(l);return[{vx:-o+s,vy:-f+a},{vx:o+s,vy:-f+a},{vx:o+s,vy:f+a},{vx:-o+s,vy:f+a}].map(c=>({x:t.x+c.vx*d+c.vy*h,y:t.y-c.vx*h+c.vy*d}))}preloadAssets(){const c=this.config.robot.icon.src,e=this.config.chargingStation.icon.src,t=[];Oa.add({alias:"robot",src:c}),t.push("robot"),Oa.add({alias:"chargingStation",src:e}),t.push("chargingStation"),Oa.add({alias:"deleteIcon",src:this.config.controls.deleteIconSrc}),t.push("deleteIcon"),Oa.add({alias:"rotateIcon",src:this.config.controls.rotateIconSrc}),t.push("rotateIcon"),Oa.add({alias:"scaleIcon",src:this.config.controls.scaleIconSrc}),t.push("scaleIcon"),Oa.add({alias:"moveIcon",src:this.config.controls.moveIconSrc}),t.push("moveIcon"),Oa.add({alias:"checkmark",src:this.config.room.selectionIndicator.iconSrc}),t.push("checkmark"),Oa.add({alias:"spotIcon",src:this.config.controls.spot.iconSrc}),t.push("spotIcon"),Oa.add({alias:"wayPoint",src:this.config.controls.wayPoint.normal.iconSrc}),t.push("wayPoint"),Oa.add({alias:"wayPointActive",src:this.config.controls.wayPoint.editing.iconSrc}),t.push("wayPointActive"),Oa.add({alias:"horizontalScaleIcon",src:this.config.controls.horizontalScaleIconSrc}),t.push("horizontalScaleIcon"),Oa.add({alias:"verticalScaleIcon",src:this.config.controls.verticalScaleIconSrc}),t.push("verticalScaleIcon"),this.config.room.property.cleanMode.assets.forEach((c,e)=>{const i=`cleanMode_${e}`;Oa.add({alias:i,src:c}),t.push(i)}),this.config.room.property.suction.assets.forEach((c,e)=>{const i=`fan_${e}`;Oa.add({alias:i,src:c}),t.push(i)}),this.config.room.property.cistern.assets.forEach((c,e)=>{const i=`water_${e}`;Oa.add({alias:i,src:c}),t.push(i)}),this.config.room.property.cleanTimes.assets.forEach((c,e)=>{const i=`cleanTimes${e+1}`;Oa.add({alias:i,src:c}),t.push(i)}),this.config.room.floorType.assets.forEach((c,e)=>{if(!c)return;const i=`floorType${e}`;Oa.add({alias:i,src:c}),t.push(i)}),this.config.room.property.customAssets&&Object.entries(this.config.room.property.customAssets).forEach(([c,e])=>{e.forEach((e,i)=>{const n=`custom_${c}_${i}`;Oa.add({alias:n,src:e}),t.push(n)})}),this.config.furniture.assets.forEach(c=>{const e=`furniture_${c.type}`;Oa.add({alias:e,src:c.src}),t.push(e)}),Oa.backgroundLoad(t)}setupMapRotationListener(){this.applyMapRotation(this.runtime.mapRotation),oS(this.runtime,"mapRotation",c=>{this.applyMapRotation(c)})}applyMapRotation(c){const e=(c%360+360)%360;V_.log(`[MapApplication] Applying map rotation: ${e}°`),this.components.appContainer.setMapRotation(e);const t=this.managers.mapManager.mapBounds;t&&t.minX!==1/0&&t.maxX!==-1/0&&this.fitMapToView(t,!1),this.emitter.emit("mapRotationUpdate",e),this.renderOnce()}};__publicField(KC,"CONTEXT_LOSS_TAIL_SIZE",8);let QC=KC;var JC,$C,cA,eA={exports:{}};function tA(){if($C)return JC;function c(c,e){var t=Object.keys(c);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(c);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(c,e).enumerable})),t.push.apply(t,i)}return t}function e(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?c(Object(i),!0).forEach(function(c){n(e,c,i[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):c(Object(i)).forEach(function(c){Object.defineProperty(e,c,Object.getOwnPropertyDescriptor(i,c))})}return e}function t(c){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(c){return typeof c}:function(c){return c&&"function"==typeof Symbol&&c.constructor===Symbol&&c!==Symbol.prototype?"symbol":typeof c})(c)}function i(c,e,t){return Object.defineProperty(c,"prototype",{writable:!1}),c}function n(c,e,t){return(e=function(c){var e=function(c,e){if("object"!=typeof c||null===c)return c;var t=c[Symbol.toPrimitive];if(void 0!==t){var i=t.call(c,e);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(c)}(c,"string");return"symbol"==typeof e?e:String(e)}(e))in c?Object.defineProperty(c,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):c[e]=t,c}function r(c){return function(c){if(Array.isArray(c))return s(c)}(c)||function(c){if("undefined"!=typeof Symbol&&null!=c[Symbol.iterator]||null!=c["@@iterator"])return Array.from(c)}(c)||function(c,e){if(!c)return;if("string"==typeof c)return s(c,e);var t=Object.prototype.toString.call(c).slice(8,-1);"Object"===t&&c.constructor&&(t=c.constructor.name);if("Map"===t||"Set"===t)return Array.from(c);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return s(c,e)}(c)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(c,e){(null==e||e>c.length)&&(e=c.length);for(var t=0,i=new Array(e);t<e;t++)i[t]=c[t];return i}$C=1;var a="RNWV:sync",o="success",f="fail",l=0,d=i(function c(){var e=this;!function(c,e){if(!(c instanceof e))throw new TypeError("Cannot call a class as a function")}(this,c),this.promise=new Promise(function(c,t){e.resolve=c,e.reject=t})});function h(c){return"".concat(c.command,"(").concat(c.id,")")}var u=null,p="undefined"!=typeof window,g=function(c){var e,t=[],i=(e={send:[],receive:[],ready:[]},{addEventListener:function(c,t){if(c in e){var i=e[c];i.indexOf(t)<0&&i.push(t)}},removeEventListener:function(c,t){if(c in e){var i=e[c],n=i.indexOf(t);n>=0&&i.splice(n,1)}},emitEvent:function(c,t){c in e&&e[c].forEach(function(c){return c(t)})}}),n={},s={},u={};function p(c){return function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];return r=function(c,e){return{id:l++,command:c,data:e,reply:!1,status:o}}(c,t),s=new d,n[h(r)]=s,m(r),s.promise;var r,s}}function g(c,e){return s[c]=function(c){return e.apply(void 0,r(c))},!t&&_(),{define:g,bind:p}}function m(e){!(e.command===a)&&t?t.push(e):c(e),i.emitEvent("send",e)}function b(c,e,t){c.reply=!0,c.data=e,c.status=t,m(c)}var v=p(a);function y(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).filter(function(c){return!u[c]}).map(function(c){u[c]=p(c)}),function(){if(t){var c=t;t=null,c.forEach(function(c){m(c)}),i.emitEvent("ready")}}(),Object.keys(s)}function _(){v(Object.keys(s)).then(y)}return g(a,y),{bind:p,define:g,listener:function(c){var e=c.detail&&JSON.parse(c.detail.data[0])||c;if(e.reply){var t=h(e);n[t]&&(e.status===f?n[t].reject(e.data):n[t].resolve(e.data))}else if(s[e.command]){var r=s[e.command](e.data);r&&r.then?r.then(function(c){b(e,c,o)}).catch(function(c){b(e,c,f)}):b(e,r,o)}else b(e,"function ".concat(e.command," is not defined"),f);i.emitEvent("receive",e)},ready:_,fn:u,addEventListener:i.addEventListener,removeEventListener:i.removeEventListener,isConnect:function(){return!t}}}(function(c){var e="string"==typeof c?c:JSON.stringify(c);p&&u&&u(e)}),m=g.bind,b=g.define,v=g.listener,y=g.ready,_=g.fn,x=g.addEventListener,S=g.removeEventListener,w=g.isConnect,C=function(c){var e;if("object"===t(c))e=c;else if("string"==typeof c)try{e=JSON.parse(c)}catch(i){}e&&(e.command||e.reply)&&v(e)},A=function(c){var e=new MessageEvent("message",{data:c});C(e.data)};if(p){var T=window.originalPostMessage;if(T)u=function(){var c;window&&"function"==typeof window.postMessage&&(c=window).postMessage.apply(c,arguments)},y();else{var P={get:function(){return T},set:function(c){(T=c)&&(u=function(){var c;window&&"function"==typeof window.postMessage&&(c=window).postMessage.apply(c,arguments)},setTimeout(y,50))}};Object.defineProperty(window,"originalPostMessage",P)}var M=window.ReactNativeWebView;if(M)u=function(){var c;window&&window.ReactNativeWebView&&"function"==typeof window.ReactNativeWebView.postMessage?(c=window.ReactNativeWebView).postMessage.apply(c,arguments):console.error("ReactNativeWebView has been dispose")},y();else{var E={get:function(){return M},set:function(c){(M=c)&&(u=function(){var c;window&&window.ReactNativeWebView&&"function"==typeof window.ReactNativeWebView.postMessage?(c=window.ReactNativeWebView).postMessage.apply(c,arguments):console.error("ReactNativeWebView has been dispose")},setTimeout(y,50))}};Object.defineProperty(window,"ReactNativeWebView",E)}var R=window.gzlJSBridge;if(R)u=function(){try{if(window&&window.gzlJSBridge&&"function"==typeof window.gzlJSBridge.webviewMessage){for(var c=arguments.length,t=new Array(c),i=0;i<c;i++)t[i]=arguments[i];var n={data:e({},t)};window.gzlJSBridge.webviewMessage("postMessage",JSON.stringify(n))}else console.error("gzlJSBridge has been dispose")}catch(r){console.error("gzlJSBridge postMessage error ==>",r)}window.gzlJSBridge.receiveMessageHandler=function(c){A(c.data)}},y();else{var k={get:function(){return R},set:function(c){(R=c)&&(u=function(){try{if(window&&window.gzlJSBridge&&"function"==typeof window.gzlJSBridge.webviewMessage){for(var c=arguments.length,t=new Array(c),i=0;i<c;i++)t[i]=arguments[i];var n={data:e({},t)};window.gzlJSBridge.webviewMessage("postMessage",JSON.stringify(n))}else console.error("gzlJSBridge has been dispose")}catch(r){console.error("gzlJSBridge postMessage error ==>",r)}},window.gzlJSBridge.receiveMessageHandler=function(c){A(c.data)},setTimeout(y,50))}};Object.defineProperty(window,"gzlJSBridge",k)}T||M||R||(u=function(){if(window&&"function"==typeof window.postMessage){for(var c=arguments.length,t=new Array(c),i=0;i<c;i++)t[i]=arguments[i];var n={data:e({},t)};window.parent.postMessage(n,"*")}else console.error("browser mini program has been dispose")},y()),window.document.addEventListener("message",function(c){return T&&C(c.data)}),window.addEventListener("message",function(c){return M&&C(c.data)}),window.document.addEventListener("message",function(c){return M&&C(c.data)}),window.addEventListener("message",function(c){return!M&&A(c.data)})}return JC={bind:m,define:b,fn:_,addEventListener:x,removeEventListener:S,isConnect:w}}const iA=u(function(){if(cA)return eA.exports;cA=1;var c=tA();return eA.exports=c,eA.exports.default=c,eA.exports}()),nA={global:{backgroundColor:"#f6f6f6"},map:{obstacleColor:"#999999",freeColor:"#ebebeb"},room:{colors:{active:["#a8c8f5","#9de5c7","#d4b9f7","#ffd399"],inactive:["#d6e7fc","#d1f4e5","#ece0fb","#fff0d9"],name:["#2563b8","#26966b","#7c3fb8","#d97706"],propertyTheme:["#2563b8","#26966b","#7c3fb8","#d97706"],selectionIndicatorBackground:["#2563b8","#26966b","#7c3fb8","#d97706"],[_p.NO_ROOM_DATA]:"#ebebeb",[_p.ROOM_GAP]:"#ebebeb",[_p.OBSTACLE_ROOM]:"#ebebeb",[_p.UNKNOWN_ROOM]:"#ebebeb"}},path:{commonPath:{color:"#ffffff"},transitionPath:{color:"#ffffff"},chargePath:{color:"#ffffff"},mopPath:{lineColor:"#ffffff",trackColor:"#ffffff"}}},rA={global:{backgroundColor:"#1a1a1a"},map:{obstacleColor:"#404040",freeColor:"#2a2a2a"},room:{colors:{active:["#3b5998","#2d6a4f","#6a1b9a","#d97706"],inactive:["#2c4570","#234d3a","#4a1270","#a85600"],name:["#6b9bf7","#4ade80","#b794f6","#fbbf24"],propertyTheme:["#6b9bf7","#4ade80","#b794f6","#fbbf24"],selectionIndicatorBackground:["#3b5998","#2d6a4f","#6a1b9a","#d97706"],[_p.NO_ROOM_DATA]:"#2a2a2a",[_p.ROOM_GAP]:"#2a2a2a",[_p.OBSTACLE_ROOM]:"#2a2a2a",[_p.UNKNOWN_ROOM]:"#2a2a2a"}},path:{commonPath:{color:"#64748b"},transitionPath:{color:"#64748b"},chargePath:{color:"#64748b"},mopPath:{lineColor:"#64748b",trackColor:"#64748b"}}},sA=sS({theme:"light"}),aA=sS({armed:!1,result:"",restoreCaptureTo:null}),oA=c=>{const e=aA.restoreCaptureTo;aA.armed=!1,aA.restoreCaptureTo=null,null!==e&&c.runtime.enableMapClickCapture!==e&&c.updateRuntime({enableMapClickCapture:e})},fA=sS({result:""}),lA="debug-panel-snapshot-overlay",dA=(c,e)=>{document.querySelectorAll(`.${lA}`).forEach(c=>c.remove());const t=document.createElement("div");t.className=lA,t.setAttribute("role","dialog"),t.setAttribute("aria-label",e);const i=document.createElement("div");i.className=`${lA}__card`;const n=document.createElement("div");n.className=`${lA}__header`;const r=document.createElement("span");r.className=`${lA}__title`,r.textContent=e;const s=document.createElement("button");if(s.type="button",s.className=`${lA}__close`,s.textContent="×",s.title="关闭快照预览",s.addEventListener("click",()=>t.remove()),n.append(r,s),i.appendChild(n),c){const t=document.createElement("img");t.className=`${lA}__image`,t.alt=e,t.src=c;const n=document.createElement("div");n.className=`${lA}__meta`,n.textContent="尺寸读取中…",t.addEventListener("load",()=>{n.textContent=`${t.naturalWidth} × ${t.naturalHeight} px`}),i.append(t,n)}else{const c=document.createElement("div");c.className=`${lA}__failure`,c.textContent="快照生成失败:返回了空数据",i.appendChild(c)}return t.addEventListener("click",c=>{c.target===t&&t.remove()}),t.appendChild(i),document.body.appendChild(t),t},hA="debug-panel:custom-datasets",uA={structured:"自定义结构化数据",raster:"自定义栅格数据"},pA=c=>{if("object"!=typeof c||null===c)return!1;const e=c;return!("string"!=typeof e.id||"string"!=typeof e.name||"structured"!==e.protocol&&"raster"!==e.protocol||"string"!=typeof e.mapHex||void 0!==e.pathHex&&"string"!=typeof e.pathHex)},gA=sS({datasets:(()=>{try{const c=window.localStorage.getItem(hA);if(!c)return[];const e=JSON.parse(c);return Array.isArray(e)?e.filter(pA):[]}catch(c){return[]}})()}),mA=c=>{window.localStorage.setItem(hA,JSON.stringify(c))},bA=c=>gA.datasets.find(e=>e.id===c),vA=c=>{var e;const t=(null==(e=c.name)?void 0:e.trim())||(c=>{const e=uA[c],t=new RegExp(`^${e}(\\d+)$`);return`${e}${gA.datasets.reduce((c,e)=>{const i=t.exec(e.name);return i?Math.max(c,Number(i[1])):c},0)+1}`})(c.protocol),i=__spreadValues({id:`custom-${zS(8)}`,name:t,protocol:c.protocol,mapHex:c.mapHex},c.pathHex?{pathHex:c.pathHex}:{}),n=[...gA.datasets,i];return mA(n),gA.datasets=n,i},yA="structured",_A=c=>__async(null,null,function*(){const[{convertStructuredRoomPropertyToRoomPropertyArray:e},{mockRoomProperties2:t}]=yield Promise.all([r(()=>Promise.resolve().then(()=>R_),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href),r(()=>Promise.resolve().then(()=>QA),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href)]),i=e(t),s=c.config.room.floorType.assets.flatMap((c,e)=>c?[e]:[]);i.forEach((c,e)=>{c.floorType=s.length>0?s[e%s.length]:0,c.type=e%17,c.customData={zzz:1,bbb:2}}),yield c.drawRoomProperty(i)}),xA=[{id:"structured",label:"结构化",loadBootScene:c=>__async(null,null,function*(){var e;const[{decodeMapStructured:t,decodePath:i},{mockMapData2:s,mockPathData2:a}]=yield Promise.all([r(()=>Promise.resolve().then(()=>Km),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href),r(()=>Promise.resolve().then(()=>QA),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href)]);c.drawMap(t(s));const o=i(a);null==(e=o.pathPoints)||e.forEach(c=>{c.type="mop"}),c.drawPath(o),yield _A(c)})},{id:"raster",label:"栅格",loadBootScene:c=>__async(null,null,function*(){const[{decodeMap:e,decodePath:t},{mockRasterMapData:i,mockRasterPathData:s}]=yield Promise.all([r(()=>Promise.resolve().then(()=>Km),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href),r(()=>Promise.resolve().then(()=>QA),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href)]),a=e(i,{pointsStructured:!0});if(!a)throw new Error("Failed to decode the built-in raster dataset");c.drawRasterMap(a),c.drawPath(t(s)),yield c.drawRoomProperty(a.mapData.mapRooms.map(c=>({id:c.roomId,name:c.name,cleanTimes:c.sweepTimes,order:c.order,floorType:c.floorMaterial,yMop:1,suction:0,cistern:0,cleanMode:0})))})}],SA=sS({activeDatasetId:yA}),wA=(c,e)=>__async(null,null,function*(){var t,i,s,a,o,f,l,d;const{decodeMap:h,decodeMapStructured:u,decodePath:p,hexToUriDecodedString:g}=yield r(()=>__async(null,null,function*(){const{decodeMap:c,decodeMapStructured:e,decodePath:t,hexToUriDecodedString:i}=yield Promise.resolve().then(()=>Km);return{decodeMap:c,decodeMapStructured:e,decodePath:t,hexToUriDecodedString:i}}),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href);if("structured-map"===e){JSON.parse(g(c));const n=u(c);if(!(n&&Number.isFinite(n.id)&&Number.isFinite(n.resolution)&&Number.isFinite(null==(t=n.size)?void 0:t[0])&&Number.isFinite(null==(i=n.size)?void 0:i[1])&&Number.isFinite(null==(s=n.origin)?void 0:s[0])&&Number.isFinite(null==(a=n.origin)?void 0:a[1])))throw new Error("结构化地图解码失败:缺少地图关键字段(id/size/origin/resolution)");return{type:e,draw:c=>c.drawMap(n)}}if("raster-map"===e){const t=h(c,{pointsStructured:!0});if(!t||!Number.isFinite(null==(o=t.mapHeader)?void 0:o.mapWidth)||!Number.isFinite(null==(l=null==(f=t.mapData)?void 0:f.parsed)?void 0:l.width))throw new Error("栅格地图解码失败:未解析出地图尺寸与点云数据");return{type:e,draw:c=>c.drawRasterMap(t)}}const m=p(c);if(!m||!Number.isFinite(null==(d=m.pathHeader)?void 0:d.count))throw new Error("路径解码失败:无法解析路径头");return{type:e,draw:c=>__async(null,null,function*(){c.drawPath(m)})}}),CA="debug-panel-injection",AA="debug-panel:injection:payload",TA=c=>c instanceof Error?c.message:String(c),PA=c=>{try{window.localStorage.setItem(AA,JSON.stringify(c))}catch(e){}},MA=c=>{document.querySelectorAll(`.${CA}`).forEach(c=>c.remove());const e=(()=>{let c=null;try{if(c=window.localStorage.getItem(AA),!c)return{map:"",path:""};const e=JSON.parse(c);if("object"==typeof e&&null!==e&&!Array.isArray(e)){const c=e;return{map:"string"==typeof c.map?c.map:"",path:"string"==typeof c.path?c.path:""}}return{map:c,path:""}}catch(e){return{map:null!=c?c:"",path:""}}})(),t=document.createElement("div");t.className=CA,t.setAttribute("role","dialog"),t.setAttribute("aria-label","注入数据");const i=document.createElement("div");i.className=`${CA}__card`;const s=document.createElement("div");s.className=`${CA}__header`;const a=document.createElement("span");a.className=`${CA}__title`,a.textContent="注入数据";const o=document.createElement("button");o.type="button",o.className=`${CA}__close`,o.textContent="×",o.title="关闭注入弹窗(已粘贴的数据会保留)",o.addEventListener("click",()=>t.remove()),s.append(a,o);const f=document.createElement("div");f.className=`${CA}__section`;const l=document.createElement("div");l.className=`${CA}__section-head`;const d=document.createElement("span");d.className=`${CA}__section-title`,d.textContent="地图(必填)",d.title="地图协议 hex:结构化 / 栅格按数据自动识别";const h=document.createElement("select");h.className=`${CA}__ref`,h.title="将已有数据集的地图 hex 填入下方输入框(填入后仍可编辑)";const u=document.createElement("option");u.value="",u.textContent="引用已有地图…",h.appendChild(u);[{value:"builtin:structured",label:"结构化(内置)"},{value:"builtin:raster",label:"栅格(内置)"}].forEach(({value:c,label:e})=>{const t=document.createElement("option");t.value=c,t.textContent=e,h.appendChild(t)}),gA.datasets.forEach(c=>{const e=document.createElement("option");e.value=`custom:${c.id}`,e.textContent=c.name,h.appendChild(e)}),l.append(d,h);const p=document.createElement("textarea");p.className=`${CA}__payload ${CA}__payload--map`,p.placeholder="粘贴地图协议 hex(结构化 / 栅格自动识别)…",p.value=e.map,p.addEventListener("input",()=>{e.map=p.value,PA(e)}),h.addEventListener("change",()=>{const c=h.value;h.value="",c&&__async(null,null,function*(){var t;let i;"builtin:structured"===c?i=(yield r(()=>__async(null,null,function*(){const{mockMapData2:c}=yield Promise.resolve().then(()=>QA);return{mockMapData2:c}}),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href)).mockMapData2:"builtin:raster"===c?i=(yield r(()=>__async(null,null,function*(){const{mockRasterMapData:c}=yield Promise.resolve().then(()=>QA);return{mockRasterMapData:c}}),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href)).mockRasterMapData:c.startsWith("custom:")&&(i=null==(t=bA(c.slice(7)))?void 0:t.mapHex),void 0!==i&&(p.value=i,e.map=i,PA(e))})}),f.append(l,p);const g=document.createElement("div");g.className=`${CA}__section`;const m=document.createElement("div");m.className=`${CA}__section-head`;const b=document.createElement("span");b.className=`${CA}__section-title`,b.textContent="路径(可选)",b.title="路径协议 hex:与地图一同构成数据集",m.append(b);const v=document.createElement("textarea");v.className=`${CA}__payload ${CA}__payload--path`,v.placeholder="粘贴路径协议 hex(可选,与地图一同生效)…",v.value=e.path,v.addEventListener("input",()=>{e.path=v.value,PA(e)}),g.append(m,v);const y=document.createElement("div");y.className=`${CA}__error`,y.hidden=!0;const _=document.createElement("div");_.className=`${CA}__status`,_.hidden=!0;const x=c=>{y.textContent=c,y.hidden=!1,_.hidden=!0},S=document.createElement("input");S.type="text",S.className=`${CA}__name`,S.placeholder="数据集名称(留空自动命名)",S.title="新数据集的名称,留空则按协议自动命名";const w=document.createElement("button");w.type="button",w.className=`${CA}__apply`,w.textContent="应用",w.title="保存为新数据集并重建会话加载它(地图必填,路径可选;不需要的数据集可在选择器中删除)",w.addEventListener("click",()=>{__async(null,null,function*(){const t=e.map.trim(),i=e.path.trim();if(!t)return void x("请输入地图数据(地图必填,路径可选)");const n=t.startsWith("7b22")?"structured-map":"raster-map";let r,s=null;try{r=yield wA(t,n),i&&(s=yield wA(i,"path"))}catch(l){return void x(TA(l))}const a="structured-map"===n?"structured":"raster";let o;try{o=vA(__spreadValues({name:S.value,protocol:a,mapHex:t},i?{pathHex:i}:{}))}catch(d){return void x(TA(d))}try{c.session?yield c.session.reset(o.id):(yield r.draw(c.map),s&&(yield s.draw(c.map)))}catch(h){return void x(TA(h))}var f;S.value="",f=`已应用并保存为数据集:${o.name}`,_.textContent=f,_.hidden=!1,y.hidden=!0})});const C=document.createElement("div");return C.className=`${CA}__footer`,C.append(S,w),t.addEventListener("click",c=>{c.target===t&&t.remove()}),i.append(s,f,g,y,_,C),t.appendChild(i),document.body.appendChild(t),t},EA="—",RA=c=>({get:({map:e})=>c(e.mapState),subscribe:({map:c},e)=>(c.emitter.on("mapStateUpdate",e),()=>c.emitter.off("mapStateUpdate",e))}),kA=[{key:"editingForbiddenSweepZoneIds",label:"禁扫区"},{key:"editingForbiddenMopZoneIds",label:"禁拖区"},{key:"editingCleanZoneIds",label:"划区"},{key:"editingVirtualWallIds",label:"虚拟墙"},{key:"editingSpotIds",label:"定点"},{key:"editingWayPointIds",label:"路点"},{key:"editingCarpetIds",label:"地毯"},{key:"editingFurnitureIds",label:"家具"}],FA=(RA(c=>"structured"===(null==c?void 0:c.mapType)?"结构化":"raster"===(null==c?void 0:c.mapType)?"栅格":EA),RA(c=>c?String(c.id):EA),RA(c=>c?`${c.width} × ${c.height}`:EA),c=>({get:({map:e})=>e.runtime[c],subscribe:({map:e},t)=>oS(e.runtime,c,t)})),IA=c=>`toggle-${c.replace(/^show/,"").replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}`,BA=[{key:"showRoomProperty",label:"房间属性",hint:"显示 / 隐藏房间属性标签(runtime.showRoomProperty)。需先有房间属性数据:测试元素 → 房间信息"},{key:"showRoomOrder",label:"房间顺序",hint:"显示 / 隐藏房间清扫顺序(runtime.showRoomOrder)。需先有房间属性数据:测试元素 → 房间信息"},{key:"showRoomName",label:"房间名称",hint:"显示 / 隐藏房间名称(runtime.showRoomName)"},{key:"showRoomType",label:"房间类型",hint:"显示 / 隐藏房间类型图标(runtime.showRoomType)。需先有房间属性数据:测试元素 → 房间信息"},{key:"showRoomFloorType",label:"地板材质",hint:"显示 / 隐藏房间地板材质(runtime.showRoomFloorType)。需先有房间属性数据:测试元素 → 房间信息"},{key:"showRobot",label:"机器人",hint:"显示 / 隐藏扫地机器人图标(runtime.showRobot)"},{key:"showRobotRing",label:"机器人预警圈",hint:"显示 / 隐藏机器人预警圈(runtime.showRobotRing)"},{key:"showRobotSleepAnimation",label:"休眠动画",hint:"显示 / 隐藏机器人休眠动画(runtime.showRobotSleepAnimation)"},{key:"showRobotPulseCircle",label:"脉冲圈",hint:"显示 / 隐藏机器人脉冲圈(runtime.showRobotPulseCircle)"},{key:"showPath",label:"路径",hint:"显示 / 隐藏清扫路径(runtime.showPath)。注意:开启选房模式会把它置为 false,这里可手动恢复"},{key:"showChargingStation",label:"充电桩",hint:"显示 / 隐藏充电桩图标(runtime.showChargingStation)"},{key:"showChargingStationRing",label:"充电桩光环",hint:"显示 / 隐藏充电桩预警圈(runtime.showChargingStationRing)"},{key:"showCarpet",label:"地毯",hint:"显示 / 隐藏地毯(runtime.showCarpet)"},{key:"showCustomCarpets",label:"自定义地毯",hint:"显示 / 隐藏自定义地毯(runtime.showCustomCarpets)。需先有数据:测试元素 → 自定义地毯"},{key:"showDetectedObjects",label:"识别物体",hint:"显示 / 隐藏 AI 识别物体图标(runtime.showDetectedObjects)。需先有数据:测试元素 → 识别物体"},{key:"showFurnitures",label:"家具",hint:"显示 / 隐藏家具(runtime.showFurnitures)。需先有数据:测试元素 → 家具"}].map(({key:c,label:e,hint:t})=>({kind:"toggle",id:IA(c),label:e,hint:t,group:"display-toggles",source:FA(c),set:({map:e},t)=>{e.updateRuntime({[c]:t})}})),DA=["editingForbiddenSweepZoneIds","editingCleanZoneIds","editingForbiddenMopZoneIds","editingVirtualWallIds"],OA=c=>{var e;c.drawForbiddenSweepZones([]),c.drawForbiddenMopZones([]),c.drawCleanZones([]),Object.keys(null!=(e=c.config.customZoneTypes)?e:{}).forEach(e=>{c.clearCustomZones(e)})},LA=c=>{c.drawVirtualWalls([])},zA=c=>{c.drawSpots([]),c.drawWayPoints([])},GA=c=>__async(null,null,function*(){yield c.drawCustomElements([])}),UA=c=>__async(null,null,function*(){yield c.drawDetectedObjects([])}),VA=c=>__async(null,null,function*(){yield c.drawFurnitures([])}),NA=c=>{c.drawCustomCarpet([])},WA=c=>{c.drawHeatmap([])},HA={id:"sweep-zone-1",points:[{x:-147,y:92},{x:-190,y:107},{x:-202,y:69},{x:-160,y:54}]},jA={id:"spot-1",name:"原点定点",point:{x:0,y:0}},YA=c=>({id:"wall-3",points:c.getWallPointsByViewportCenter({width:1})}),XA=[{kind:"custom",id:"dataset-selector",label:"数据集",hint:"选择数据集:内置(结构化 / 栅格)在上,自定义数据集在下;切换即重置会话并加载所选数据集的启动场景(自定义仅地图与路径);自定义条目可单独删除,选择不持久化,刷新后始终以结构化启动",group:"map-data",local:!0,render:c=>{const e=document.createElement("div");e.className="debug-panel__datasets";const t=({id:t,name:i,deletable:n})=>{const r=document.createElement("div");r.className="debug-panel__dataset",r.dataset.datasetId=t;const s=SA.activeDatasetId===t;s&&r.classList.add("debug-panel__dataset--active"),n&&r.classList.add("debug-panel__dataset--custom");const a=document.createElement("button");if(a.type="button",a.className="debug-panel__dataset-select",a.textContent=i,a.title=n?`切换到自定义数据集「${i}」:重置会话,仅绘制其地图与路径`:`切换到内置数据集「${i}」:重置会话并加载其启动场景`,a.setAttribute("aria-pressed",String(s)),a.addEventListener("click",()=>{var e;SA.activeDatasetId!==t&&(null==(e=c.session)||e.reset(t))}),r.appendChild(a),n){const c=document.createElement("button");c.type="button",c.className="debug-panel__dataset-delete",c.textContent="×",c.title=`删除自定义数据集「${i}」(删除即持久化,内置数据集不可删除)`,c.addEventListener("click",()=>{(c=>{const e=gA.datasets.filter(e=>e.id!==c);e.length!==gA.datasets.length&&(mA(e),gA.datasets=e)})(t)}),r.appendChild(c)}e.appendChild(r)},i=()=>{e.innerHTML="",xA.forEach(({id:c,label:e})=>t({id:c,name:e,deletable:!1})),gA.datasets.forEach(({id:c,name:e})=>t({id:c,name:e,deletable:!0}))};i();const n=[oS(gA,"datasets",i),oS(SA,"activeDatasetId",i)];return{element:e,dispose:()=>n.forEach(c=>c())}}},{kind:"action",id:"inject-data",label:"注入数据…",hint:"打开注入弹窗:按地图 / 路径分页粘贴协议 hex(结构化 / 栅格自动识别),应用即保存为新数据集并重建会话",group:"map-data",run:c=>{MA(c)}},{kind:"action",id:"session-reset",label:"会话重置",hint:"真实重建:销毁地图实例并重新初始化,重新加载当前数据集的启动场景;主题保留,面板折叠 / 筛选状态不受影响",group:"map-data",danger:!0,run:c=>__async(null,[c],function*({session:c}){yield null==c?void 0:c.reset()})},{kind:"action",id:"inject-all",label:"全部注入",hint:"按组内顺序依次执行全部测试元素注入项(热力图除外——它会替换整张地图,单独注入),与清空全部元素 / 会话重置对称",group:"test-elements",run:c=>__async(null,null,function*(){const e=XA.filter(c=>"test-elements"===c.group&&"action"===c.kind&&"inject-all"!==c.id&&"test-heatmap"!==c.id);for(const t of e)yield t.run(c)})},{kind:"action",id:"test-room-info",label:"房间信息",hint:"加载 mock 房间属性并绘制房间信息(循环设置 0-16 房间类型图标与可用地板材质)",group:"test-elements",run:c=>__async(null,[c],function*({map:c}){yield _A(c)})},{kind:"action",id:"test-zone",label:"禁区",hint:"绘制扫地禁区(sweep-zone-1 固定矩形、sweep-zone-2 取自视口中心)、拖地禁区与划区清扫框 mock 数据",group:"test-elements",run:({map:c})=>{const e=[HA,{id:"sweep-zone-2",points:c.getForbiddenSweepZonePointsByViewportCenter()}];c.drawForbiddenSweepZones(e),c.drawForbiddenMopZones([{points:[{x:-50,y:-50},{x:-20,y:-50},{x:-20,y:-30},{x:-50,y:-30}],id:"forbidden-mop-zone-1"}]),c.drawCleanZones([{points:[{x:-80,y:-80},{x:-120,y:80},{x:-120,y:120},{x:-80,y:120}],id:"clean-zone-1"}])}},{kind:"action",id:"test-virtual-wall",label:"虚拟墙",hint:"绘制三面虚拟墙:两面固定坐标,一面取自视口中心",group:"test-elements",run:({map:c})=>{const e=[{id:"wall-1",points:[{x:-30,y:100},{x:30,y:100}]},{id:"wall-2",points:[{x:-60,y:30},{x:-80,y:50}]},YA(c)];c.drawVirtualWalls(e)}},{kind:"action",id:"test-spot",label:"定点",hint:"在地图原点与视口中心绘制两个定点清扫标记",group:"test-elements",run:({map:c})=>{const e=[jA,{id:"spot-2",name:"视口中心",point:c.getSpotPointByViewportCenter()}];c.drawSpots(e)}},{kind:"action",id:"test-waypoints",label:"路点",hint:"在原点与视口中心绘制两个路点,并将 wayPoint-1 置为编辑态",group:"test-elements",run:({map:c})=>{c.drawWayPoints([{id:"wayPoint-1",point:{x:0,y:0}},{id:"wayPoint-2",point:c.getSpotPointByViewportCenter()}]),c.updateRuntime({editingWayPointIds:["wayPoint-1"]})}},{kind:"action",id:"test-divider",label:"分割线",hint:"当前选中房间(无选中时取地图上实际存在的第一个房间)进入分割线编辑模式",group:"test-elements",run:({map:c})=>{var e;const[t]=c.runtime.selectRoomIds,i=null!=t?t:null==(e=c.managers.mapManager.getAllRooms()[0])?void 0:e.id;void 0!==i&&c.updateRuntime({dividingRoomId:i})}},{kind:"action",id:"test-detected-objects",label:"识别物体",hint:"绘制四个识别物体图标,3 秒后用新位置重绘",group:"test-elements",run:c=>__async(null,[c],function*({map:c}){const{mockDetectedObjectSrc1:e,mockDetectedObjectSrc2:t,mockDetectedObjectSrc3:i,mockDetectedObjectSrc4:s,mockDetectedObjectSrc5:a}=yield r(()=>__async(null,null,function*(){const{mockDetectedObjectSrc1:c,mockDetectedObjectSrc2:e,mockDetectedObjectSrc3:t,mockDetectedObjectSrc4:i,mockDetectedObjectSrc5:n}=yield Promise.resolve().then(()=>QA);return{mockDetectedObjectSrc1:c,mockDetectedObjectSrc2:e,mockDetectedObjectSrc3:t,mockDetectedObjectSrc4:i,mockDetectedObjectSrc5:n}}),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href);c.drawDetectedObjects([{id:"object1",x:0,y:0,src:e},{id:"object2",x:10,y:20,src:t},{id:"object3",x:-30,y:65,src:i},{id:"object4",x:-118,y:10,src:s}]),setTimeout(()=>{c.drawDetectedObjects([{id:"object1",x:0,y:0,src:e},{id:"object2",x:10,y:20,src:t},{id:"object3",x:-68,y:15,src:i},{id:"object4",x:-132,y:20,src:a}])},3e3)})},{kind:"action",id:"test-custom-elements",label:"自定义元素",hint:"绘制图片 / GIF / HTML 三类自定义元素 mock 数据",group:"test-elements",run:({map:c})=>{c.drawCustomElements([{id:"custom-1",type:"image",src:"https://images.tuyacn.com/smart/miniapp/static/bay1591069675815HNkH/1745321602e071b46228c.png",x:-32,y:0,width:24,height:24,rotation:1.3,opacity:.8,interactive:!0,customData:{xxx:123}},{id:"custom-2",type:"gif",src:"https://userland.pixijs.io/gif/examples/chew.gif",x:-100,y:30,width:100,height:100,interactive:!0,customData:{xxx:123}},{id:"custom-3",type:"html",htmlContent:'<div style="width: 32px; height: 32px; background-color: red;font-size: 10px;">Hello, World!</div>',x:0,y:0},{id:"custom-4",type:"html",width:24,height:24,htmlContent:'<img style="width: 100%; height: 100%;" src="https://images.tuyacn.com/smart/miniapp/static/bay1591069675815HNkH/1745321602e071b46228c.png" />',x:-30,y:60,interactive:!0}])}},{kind:"action",id:"test-custom-carpet",label:"自定义地毯",hint:"绘制自定义多边形、矩形与圆形三块 mock 地毯",group:"test-elements",run:({map:c})=>{c.drawCustomCarpet([{id:"1",type:1,points:[{x:32,y:-26},{x:37,y:-25},{x:42,y:-25},{x:47,y:-25},{x:52,y:-25},{x:56,y:-23},{x:80,y:-18},{x:80,y:-13},{x:50,y:-13},{x:45,y:-12},{x:40,y:-12},{x:35,y:-12},{x:30,y:-12},{x:25,y:-12},{x:23,y:-15},{x:22,y:-20},{x:23,y:-24},{x:28,y:-24}],shape:"custom"},{id:"carpet-rect",type:1,points:[{x:-80,y:-30},{x:-40,y:-30},{x:-40,y:0},{x:-80,y:0}],shape:"rectangle"},{id:"carpet-round",type:1,points:[{x:-20,y:10},{x:20,y:10},{x:20,y:40},{x:-20,y:40}],shape:"round"}])}},{kind:"action",id:"test-furniture",label:"家具",hint:"在视口中心绘制一件类型 1 家具,并立即进入编辑态",group:"test-elements",run:c=>__async(null,[c],function*({map:c}){const{nanoid:e}=yield r(()=>__async(null,null,function*(){const{nanoid:c}=yield Promise.resolve().then(()=>GS);return{nanoid:c}}),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href),t=c.getFurniturePointsByViewportCenter({furnitureType:1}),i=`furniture-${e(6)}`;c.drawFurnitures([{id:i,furnitureType:1,points:t}]),c.updateRuntime({editingFurnitureIds:[i]})})},{kind:"action",id:"test-pet-clean",label:"宠物清洁区",hint:"注册 petClean 自定义区域样式,并在视口中心两侧绘制两个宠物清洁区",group:"test-elements",run:({map:c})=>{c.updateConfig({customZoneTypes:{petClean:{minSize:.3,showRotateButton:!0,strokeColor:"#7c3aed",strokeWidth:2,fillColor:"rgba(124, 58, 237, 0.15)",outlineOffset:16,outlineStrokeColor:"#7c3aed",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(124, 58, 237, 0.05)",textColor:"#7c3aed"}}}),c.drawCustomZones("petClean",[{id:"pet-clean-1",points:c.getCleanZonePointsByViewportCenter({offsetX:80}),metadata:{petType:"cat",cleaningLevel:2}},{id:"pet-clean-2",points:c.getCleanZonePointsByViewportCenter({offsetX:-80}),metadata:{petType:"dog",cleaningLevel:1}}])}},{kind:"action",id:"test-heatmap",label:"热力图",hint:"解析 WiFi 信号 mock 数据绘制渐变热力图,并加载对应结构化地图",group:"test-elements",run:c=>__async(null,[c],function*({map:c}){const[{parseWIFIHexToCoordinates:e},{decodeMapStructured:t},{mockMapDataWiFi:i,mockWiFiSignalPath:s}]=yield Promise.all([r(()=>Promise.resolve().then(()=>Vx),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href),r(()=>Promise.resolve().then(()=>Km),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href),r(()=>Promise.resolve().then(()=>QA),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href)]);c.drawHeatmap(e(s)),c.drawMap(t(i))})},...BA,{kind:"segmented",id:"segmented-theme",label:"主题",hint:"切换示例应用亮 / 暗主题配色(demo 本地状态,SDK 无对应 runtime 字段)",group:"display-toggles",local:!0,options:[{value:"light",label:"亮"},{value:"dark",label:"暗"}],source:{get:()=>sA.theme,subscribe:(c,e)=>oS(sA,"theme",e)},set:({map:c},e)=>{const t=e;sA.theme=t,c.updateConfig("light"===t?nA:rA)}},{kind:"segmented",id:"segmented-unit",label:"单位",hint:"切换测量单位:米(m)或英尺(ft),同时更新单位标签",group:"display-toggles",options:[{value:"meter",label:"米"},{value:"feet",label:"英尺"}],source:{get:({map:c})=>c.runtime.unit,subscribe:({map:c},e)=>oS(c.runtime,"unit",e)},set:({map:c},e)=>{c.updateRuntime({unit:"feet"===e?"feet":"meter",unitLabel:"feet"===e?"ft":"m"})}},{kind:"toggle",id:"toggle-room-selection",label:"选房模式",hint:"开启选房模式(隐藏房间属性与路径并清空已选房间);关闭恢复普通模式",group:"interaction-editing",source:FA("enableRoomSelection"),set:({map:c},e)=>{e?c.updateRuntime({showRoomProperty:!1,enableRoomSelection:!0,selectRoomIds:[],showPath:!1}):c.updateRuntime({enableRoomSelection:!1})}},{kind:"segmented",id:"segmented-room-selection-style",label:"选择样式",hint:"选房模式下已选房间的标记样式:勾选图标或选中序号",group:"interaction-editing",options:[{value:"checkmark",label:"勾选"},{value:"order",label:"序号"}],source:{get:({map:c})=>c.runtime.roomSelectionMode,subscribe:({map:c},e)=>oS(c.runtime,"roomSelectionMode",e)},set:({map:c},e)=>{c.updateRuntime({roomSelectionMode:"order"===e?"order":"checkmark"})}},{kind:"toggle",id:"toggle-map-click-capture",label:"地图点击捕获",hint:"开启后点击地图触发 onClickMap 回调(demo 会在点击位置添加一个路点)",group:"interaction-editing",source:FA("enableMapClickCapture"),set:({map:c},e)=>{(c=>{aA.armed&&(aA.restoreCaptureTo=c)})(e),c.updateRuntime({enableMapClickCapture:e}),console.log("[Debug] 地图点击捕获已"+(e?"开启":"关闭"))}},{kind:"toggle",id:"toggle-controls-editing",label:"控件编辑态",hint:"开启时自动补齐缺失的 sweep-zone-1 / wall-3 / spot-1 并使其进入编辑态;关闭仅清空控件编辑态,元素保留",group:"interaction-editing",source:{get:({map:c})=>DA.some(e=>c.runtime[e].length>0),subscribe:({map:c},e)=>{const t=DA.map(t=>oS(c.runtime,t,e));return()=>t.forEach(c=>c())}},set:({map:c},e)=>{e?((c=>{const e=c.getForbiddenSweepZones();e.some(c=>c.id===HA.id)||c.drawForbiddenSweepZones([...e,HA]);const t=c.getVirtualWalls();t.some(c=>"wall-3"===c.id)||c.drawVirtualWalls([...t,YA(c)]);const i=c.getSpots();i.some(c=>c.id===jA.id)||c.drawSpots([...i,jA])})(c),c.updateRuntime({editingForbiddenSweepZoneIds:[HA.id],editingCleanZoneIds:[],editingForbiddenMopZoneIds:[],editingVirtualWallIds:["wall-3"],editingSpotIds:[jA.id]})):c.updateRuntime({editingForbiddenSweepZoneIds:[],editingCleanZoneIds:[],editingForbiddenMopZoneIds:[],editingVirtualWallIds:[],editingSpotIds:[]})}},{kind:"segmented",id:"segmented-forbidden-zone-max-size",label:"禁区尺寸上限",hint:"禁扫 / 禁拖区域的最大尺寸:1.5m 上限或 100m(等同不限制)",group:"interaction-editing",options:[{value:"1.5",label:"1.5m"},{value:"100",label:"100m"}],source:{get:({map:c})=>1.5===c.config.controls.forbiddenSweepZone.maxSize?"1.5":"100",subscribe:({map:c},e)=>oS(c.config.controls.forbiddenSweepZone,"maxSize",()=>e())},set:({map:c},e)=>{const t="1.5"===e?1.5:100;c.updateConfig({controls:{forbiddenSweepZone:{maxSize:t},forbiddenMopZone:{maxSize:t}}})}},{kind:"toggle",id:"toggle-interaction",label:"全局交互",hint:"全局交互总开关(runtime.enableInteraction):关闭后地图忽略所有手势与点击",group:"interaction-editing",source:FA("enableInteraction"),set:({map:c},e)=>{c.updateRuntime({enableInteraction:e})}},{kind:"action",id:"force-end-gesture",label:"强制结束手势",hint:"调用 forceEndGesture() 立即结束当前手势——手势卡死时的逃生通道",group:"interaction-editing",run:({map:c})=>{c.forceEndGesture()}},{kind:"action",id:"rotate-map",label:"旋转地图",hint:"在当前角度基础上顺时针旋转地图 90°",group:"view-tools",run:({map:c})=>{c.updateRuntime({mapRotation:c.components.appContainer.getMapRotation()+90})}},{kind:"action",id:"reset-pan-zoom",label:"重置缩放",hint:"重置地图平移与缩放到初始视图",group:"view-tools",run:({map:c})=>{c.resetPanZoom()}},{kind:"action",id:"clear-zones",label:"清空区域",hint:"仅清空扫地禁区 / 拖地禁区 / 划区与全部已注册自定义区域,其余元素保留",group:"clear",run:({map:c})=>{OA(c)}},{kind:"action",id:"clear-virtual-walls",label:"清空虚拟墙",hint:"仅清空虚拟墙,其余元素保留",group:"clear",run:({map:c})=>{LA(c)}},{kind:"action",id:"clear-spots-waypoints",label:"清空定点与路点",hint:"仅清空定点清扫标记与路点,其余元素保留",group:"clear",run:({map:c})=>{zA(c)}},{kind:"action",id:"clear-custom-elements",label:"清空自定义元素",hint:"仅清空图片 / GIF / HTML 自定义元素,其余元素保留",group:"clear",run:c=>__async(null,[c],function*({map:c}){yield GA(c)})},{kind:"action",id:"clear-detected-objects",label:"清空识别物体",hint:"仅清空识别物体图标,其余元素保留",group:"clear",run:c=>__async(null,[c],function*({map:c}){yield UA(c)})},{kind:"action",id:"clear-furniture",label:"清空家具",hint:"仅清空家具,其余元素保留",group:"clear",run:c=>__async(null,[c],function*({map:c}){yield VA(c)})},{kind:"action",id:"clear-carpets",label:"清空地毯",hint:"仅清空自定义地毯,其余元素保留",group:"clear",run:({map:c})=>{NA(c)}},{kind:"action",id:"clear-heatmap",label:"清空热力图",hint:"仅清空热力图(drawHeatmap([]) 的空数组即清空语义),其余元素保留",group:"clear",run:({map:c})=>{WA(c)}},{kind:"action",id:"clear-all-elements",label:"清空全部元素",hint:"组合执行全部分类清空并清空所有编辑态 ID,get*() 与编辑中元素读数同步归零",group:"clear",danger:!0,run:c=>__async(null,[c],function*({map:c}){OA(c),LA(c),zA(c),yield GA(c),yield UA(c),yield VA(c),NA(c),WA(c),(c=>{c.updateRuntime({editingForbiddenSweepZoneIds:[],editingForbiddenMopZoneIds:[],editingCleanZoneIds:[],editingVirtualWallIds:[],editingSpotIds:[],editingWayPointIds:[],editingCarpetIds:[],editingFurnitureIds:[],editingCustomZoneIds:{}})})(c)})},{kind:"action",id:"point-in-room",label:"点在房间检测",hint:"点击后进入选点模式:下一次地图点击检测该点是否在某个房间内,结果显示在顶部状态区;再次点击取消选点",group:"view-tools",run:({map:c})=>{aA.armed?(c=>{aA.armed&&(aA.result="",oA(c))})(c):(c=>{aA.armed||(aA.restoreCaptureTo=c.runtime.enableMapClickCapture,aA.armed=!0,aA.result="等待地图点击…",c.updateRuntime({enableMapClickCapture:!0}))})(c)}},{kind:"action",id:"snapshot-current",label:"快照当前",hint:"以白色背景导出当前地图快照,并在预览浮层中显示结果",group:"view-tools",run:c=>__async(null,[c],function*({map:c}){const e=yield c.snapshot({backgroundColor:16777215});dA(e,"快照当前")})},{kind:"action",id:"snapshot-other-map",label:"快照其他地图",hint:"用栅格 mock 地图数据离屏生成另一张地图的黑底快照,并在预览浮层中显示结果",group:"view-tools",run:c=>__async(null,[c],function*({map:c}){const[{decodeMap:e},{mockRasterMapData:t,mockRasterPathData:i}]=yield Promise.all([r(()=>Promise.resolve().then(()=>Km),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href),r(()=>Promise.resolve().then(()=>QA),0,n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("assets/index-DMEnUYiD.js",document.baseURI).href)]),{mapRooms:s}=e(t).mapData,a=yield c.snapshotByData({map:t,path:i,roomProperties:s.map(c=>({id:c.roomId,name:c.name,cleanTimes:c.sweepTimes,order:c.order,floorType:c.floorMaterial,yMop:1,suction:0,cistern:0,cleanMode:0})),forbiddenSweepZones:[{id:"0",points:[{x:0,y:0},{x:0,y:100},{x:100,y:100},{x:100,y:0}]}]},{showRoomName:!1,showRoomProperty:!1},{backgroundColor:"#000000"});dA(a,"快照其他地图")})}];function ZA(c){let e=!1;const t=c=>{e||(e=!0,console.warn("[ray-robot-map-sdk] host logger bridge failed",c))};return e=>{var i;if("function"==typeof c)try{const n=c(e);"object"==typeof(i=n)&&null!==i&&"then"in i&&"function"==typeof i.then&&Promise.resolve(n).catch(t)}catch(n){t(n)}}}document.addEventListener("DOMContentLoaded",()=>__async(null,null,function*(){let c=null;const e=DS(),t=e.readPreviousSessionTail(),i=(c,t)=>{e.record({event:c,detail:t})},n=(c,t)=>{kS({event:c,sessionId:e.getSessionId(),ts:Date.now(),visibilityState:document.visibilityState,detail:t})},r=t=>{if(!c)return;e.getSessionId();const i=c;c=null,i.destroy()};!function(c=DS()){const e={getSessionId:c.getSessionId,readAll:c.readAll,readCurrentSession:c.readCurrentSession,readPreviousSessionTail:c.readPreviousSessionTail,readLateLifecycleMarkers:c.readLateLifecycleMarkers,clear:c.clear};globalThis.__RAY_MAP_DEBUG_RING__=e}(e),BS=c=>{},e.getSessionId(),e.hasStorage(),e.readAll().length,t.length,"wasDiscarded"in document&&document.wasDiscarded,t.length,O_({appLogSink:ZA(iA.bind("onAppLogger"))}),window.addEventListener("focus",()=>{i("focus",{source:"window"})}),window.addEventListener("blur",()=>{i("blur",{source:"window"})}),window.addEventListener("pageshow",c=>{var e;i("pageshow",{source:"window",persisted:null!=(e=c.persisted)?e:null})}),window.addEventListener("pagehide",c=>{var e,t;const r=c;n("pagehide",{source:"window",persisted:null!=(e=r.persisted)?e:null}),i("pagehide",{source:"window",persisted:null!=(t=r.persisted)?t:null})}),window.addEventListener("beforeunload",()=>{n("beforeunload",{source:"window"}),i("beforeunload",{source:"window"})}),window.addEventListener("unload",()=>{n("unload",{source:"window"}),i("unload",{source:"window"}),r()}),document.addEventListener("visibilitychange",()=>{i("visibilitychange",{source:"document"})}),document.addEventListener("freeze",()=>{i("freeze",{source:"document"})}),document.addEventListener("resume",()=>{i("resume",{source:"document"})});try{iA.define("destroyApp",(c="host.destroyApp")=>{r()}),iA.bind("onDocumentReady")();const e=e=>__async(null,[e],function*({options:e,runtime:t}){const i=__objRest(e,[]),n=document.getElementById("container");var r,s;c=yield __async(null,null,function*(){const c=new QC;return yield c.initialize({resizeTo:null!=n?n:window,events:SS.reduce((c,e)=>((c=null!=c?c:{})[e]=function(c,e){return(...t)=>(V_.log(`[Event] ${c}`,...t),e(...t))}(e,iA.bind(e)),c),{}),config:i,runtime:t}),n?n.appendChild(c.canvas):document.body.appendChild(c.canvas),c}),iA.define("onUpdateRuntime",e=>{null==c||c.updateRuntime(e)}),iA.define("onUpdateConfig",e=>{null==c||c.updateConfig(e)}),iA.define("onReceiveMap",e=>{if(e)if(e.startsWith("7b22"))null==c||c.drawMap(Ep(e));else{const t=Rp(e,{pointsStructured:!0});t?null==c||c.drawRasterMap(t):V_.error("Failed to decode raster map data")}}),iA.define("onReceivePath",e=>{e&&(null==c||c.drawPath(Dp(e)))}),iA.define("onReceiveRoomProperties",e=>{e&&(null==c||c.drawRoomProperty(e))}),iA.define("onReceiveHeatmap",e=>{e&&(null==c||c.drawHeatmap(q_(e)))}),iA.define("onReceiveForbiddenSweepZones",e=>{e&&(null==c||c.drawForbiddenSweepZones(e))}),iA.define("onReceiveCustomCarpets",e=>{e&&(null==c||c.drawCustomCarpets(e))}),iA.define("onReceiveForbiddenMopZones",e=>{e&&(null==c||c.drawForbiddenMopZones(e))}),iA.define("onReceiveCleanZones",e=>{e&&(null==c||c.drawCleanZones(e))}),iA.define("onReceiveCustomZones",(e,t)=>{e&&t&&(null==c||c.drawCustomZones(e,t))}),iA.define("onReceiveFurnitures",e=>{e&&(null==c||c.drawFurnitures(e))}),iA.define("onReceiveVirtualWalls",e=>{e&&(null==c||c.drawVirtualWalls(e))}),iA.define("onReceiveSpots",e=>{e&&(null==c||c.drawSpots(e))}),iA.define("onReceiveWayPoints",e=>{e&&(null==c||c.drawWayPoints(e))}),iA.define("onReceiveDetectedObjects",e=>{e&&(null==c||c.drawDetectedObjects(e))}),iA.define("onReceiveCustomElements",e=>{e&&(null==c||c.drawCustomElements(e))}),r=c,s=iA,xS.forEach(c=>{"function"==typeof r[c]?s.define(c,r[c].bind(r)):V_.warn(`Method ${c} not found on target object`)}),yield iA.bind("onInitialized")()});document.body?iA.define("initApp",e):V_.error("document.body is null")}catch(s){console.error(s)}})),f.add(Mt),f.mixin(xe,{accessible:!1,accessibleTitle:null,accessibleHint:null,tabIndex:0,accessibleType:"button",accessibleText:null,accessiblePointerEvents:"auto",accessibleChildren:!0,_accessibleActive:!1,_accessibleDiv:null,_renderId:-1}),f.add(qa),f.mixin(xe,Ka),f.add(oo),f.add(io);const qA=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),KA=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),QA=Object.freeze(Object.defineProperty({__proto__:null,mockDetectedObjectSrc1:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEwAAABWCAYAAABl2nDWAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAvNSURBVHic7ZtfaBzHHce/s/f/TvKplmU7JLrKba0QHMlJSAk0ETFJIfgPKW1fGgdcXAjlHFraNIHTQ5WGPshEgfSvDH6o8YNNWkopRTYkBjtUVksgaVMperBTY/suUYgUBZ0d393u3e704XZOs3Oze7t7e1Ya7gvL3s7uzv72c9/5zczuHdBVV1119f8rspEXp5QOAdgDYDeA+wD0mcsQgDVzAYB3AVwD8B8AbxJCrt3WQDdSlNIhSumrlNKr1L+uUkp/YQL/YopSuodSeqENSHa6QCnds9H3F5jK5fIOwzD+2gFQMnBDnb6fTuYwQil9EcCLTgfput5YKKUwDMNaCSEIhUJQFAWhUAihUKjVdV8ihLwEgLYVvY06AYyUy+WheDz+F9QTeZMMw4CmadB1vQlQy8oJQSQSQTgcdoL3ZqVS+UEikbiGgMEFDYzBOo96T2eRrutQVRW6rgdysVAohFgsZgfuWqVSeSxoaEEBIwCgadp9kUjkPOpDg4aYo6rVakCXsyocDiMWi0FRFHHXWrVafSwajb5rbrcNLghgBABMZ/0LAqxarQZVVT03Pa9SFAXxeFzmtrVKpfKA6TSgTWhNX4lH8bCanKVpGsrlcsdhAXUXl0olaJom7uqLx+Pny+XyEB+zX7VzcuNcwzAuEEIe5XdqmgZVVduo3r9isRii0ahY/C4h5AFu25fT/DqsAUvX9Z98nmABgKqqMqfdZw5zmHyZxc9JjXPW1tZ2pNPpK/xOXddRKpX8xBK4EokEwuGwpaxYLH61r6/vKlfkyWleHcYDJps2bfoDv9MwDFQqFY9Vdk6yzqa3t3cCwn14qdMLMMtFyuXyHrEp3o7e0IvYcIaXoijfL5fLe+ATmp8cRgAgFotN8IW6rqNWq/morrOqVqtNX2I0Gj1kfvScktyeQPj1xx9/vGPr1q3/5Q8olUqBjOCnp6dx7Nixlsc98sgjro4D6jOCZDJpKVteXv7atm3bWC6jwtpWboCJ1iW6rk8oitJwWJCJfv/+/ZidnXV17I0bN1zXm0qlLDOBWq32s0gk8mvUIfGgHKGFnXYKImxRFOUQv6MTTfHo0aPYv39/U3k+n5eWt5KmaYjH443tUCh0CMBvuENc9ZatgDU58O2332aPkBvqxBxxampK2uT8fjliuiCE7C4UCkODg4NXhUMJHOC5dVjDXbt27fqWGAilwT1BYcOS1dVVrK6uBlavYRjQdd0y1+zv79+N+rsCppY34gRMlt9IKBTazRcE9aiGiTWb5557Do8//njT/uXlZRw+fNhX3SKwcDj8KIC/oRmUrcvcOIxwCxRF+bIYRCe0c+dOjI2NNZVfv37dd51irIqisC+fN4evpC91F+oJ3+KwoAeqxWLRdt/8/LzroYRMYqyKoqSxfq+BJn1x3VCQ+Wt2dhbz8/PSfZOTk5icnGyrfkmsfVhvfnZri9yM9HlYhBBiaZJBAcvn88hmswCATCaDAwcONPbxsPhyrxJjNe+lkW4gb1nWc1qUs8oUtqaUlvkDb9686T5iGy0sLOCpp55CPp9HJpPB2bNnkclkANSb6ODgIID1sdnIyAgAbwNXpt7eXss2ISQBwEDdTWxtO/L3OvkmlFJL1iWkvafcCwsL2LdvH/L5PEZGRiywAGBmZgYAkE6nceTIEZw+fdr3tcRYzXvhHdZSMmCiuyxTI0qpJSu3A2xmZgYPP/wwisWiFBaw3gmMjo4in89jenoaAKQ9qFeZ99I09YNDE3XrsEYlhmEEAozPWU8//TTm5uaQTqebjmPNb35+vgE3k8n46i3FFyS1Wi1vfnTtMs8PEDVNW3AKwq0mJycbznK6+bGxMWQyGRSLxcbxc3NzTU50I/E1nPnlB/4A0WJPVVUt/b5fYBcvXgQAjI+POx536tQp5PN1I7BmK3OiG4nAVFVlX77rXtJLkwQAXL9+/T2nINxqba3+0y+nm5+ennbVbN1KfL7/1ltvneE2O9Ikcf/99y8YhsHafuNHIl41OjoKADhz5ox0/+TkJHK5HADgyJEjbY3wgXpL4POtYRj5J554Iu9wilS+7KGq6kV+OxKJeK7j4MGDAOouYj0fUO8Vc7lcY6A6Pj6Oo0eP+gnTIjHGUqkk/6ZayG7OyNZs0MovocuXL4/t3Llzhj/p1q1bnueVuVyuASudTqOvr88yuR4fH2+Z49yIEIJUKmVx2Pvvv39geHh4FoCO+oCVX2wHr36AKQBC1Wr17+FweISdVK1Wfb1iO3XqFHK5nGXSPTo6itOnT/vqCWWKRqOIxWKNbVVV5+Lx+AHIYQUCjK1DbP3RRx8d3L59++/5E/24jKlYLGJ+fh6jo6NtJXZRiqIglUpZyhYXF5+89957eXexdcvpkRtgossa0HRd/7eiKA0bfJ7eejMlk0lLp0QpLSqK8hU0wxLdJQXmJ+k3KlpaWprid7AfuH1eFI1Gm3rwK1eu/AgeXquJauUwwNokLQ4DoNy8efN3PT093+MrCOodZTuSvYusVCpnE4nEIVidxTuMNUnAg8PEA8VvgS+nMzMzL+u6XuAPSCQSvge0QUhRFCQSCUuZruuFiYmJH8Pa5JzuDZL9rp+H2eUxBUDo0qVL+4aHh09arkwpSqXSbf+thaIoSCaTTQ8F3nnnnW8/+OCDF2F1lKf8BXgHRiDAYp+XlpZ+eMcdd/ySr4RSCk3TZL/V6oii0Sii0WgTrE8//XSqv7//ZdQBiJB0NPeOvoGxz2Iek7mNrK6uvrB58+YXxMoYtCCf//NSFAWRSET2q0MGawrrUOzGXuJwAvAAjN9n1yybgAFQVlZWXtiyZcvzYmWdchsDJcuZn3zyySsDAwNTsCb0VoNVxx7UKzA7aPxCFhcX991zzz2/IoQ0jUANw0C1WkW1WvXtOEIIwuGwLShd1wuFQuGVHTt2vIZ1UE6LrCOQBuemKxMra7ns2rXr7IkTJ74p9p5AvfnEYjGkUikkk0lpzpEGaja7RCKBnp4exONxW1gnT578DgfL69KWeFeFUH+PGQEQA5AAkALQCyAN4EsA+gFsATAAYNuzzz47vLKyMmUYxpqbf1fpuk5rtRqtVqu0VqvRWq1GdV13/e+slZWVKQDbzGXAjGWzGVvajDUFIG7eQ8S8Jz6ttPVWR2yKDFrUBbStLPhsNnv36urqcdd37lHFYvG148ePf52DtdWMoV8CK2HGHg0algiNT/IR84JxAEkAPQA2SaANcOC2Z7PZuwuFwkS5XJ5rF5Kqqu8VCoUJE9R2DhRzFg9rkxlj0ow5at4DP0RyBcwtUbsOQNYJEDQH0fT6am5u7hsPPfTQq6FQaNBlDKhUKv9YWlr60xtvvPHPbDZbgDDrEBZxuuOU5AP9yaZ4nAyYCE4sl77vO3bsWOaZZ575sxtoN27c+GM6nf6puSmbwvCgxLUIzy7RtwTmdsInm3PJApR9k7aDw2w2mz937tzhVhfXNG0xl8u9CLkz3FwzEFh+JMtnfM/J5zTWEfRBntcaue2DDz74uV2uqtVqeSFP8blKzFd9WE/wfM6S9Yi+Er3XXkFsmmwta55ic7TLaQQAVlZWnhdnCJTS4uuvv/7dvXv3sld7Yr5xaop2ZbJ85dpdfrrRVtCcQDlBI7du3TqRTCb3sso//PDDibvuuus47CGJYJw+tw0LqNvTj2TQ2q0Hn3322YWxsbEBQgiWl5d/e+eddx43dzmBEqHY9YJtw2oKuI1znYYdbt0n9qJeXCXbJ54LtAkL8O8wJjvgfoIRIbG1G1e1cpSsl/eldoExOTnVa3CtILSCBclnv7E0KShggByaH1hs7RUYJJ/biUWqIIEBzdD47VYBi05wCwwOa7fXdq2ggTG1O+t3k5+cgMFmu211ChiT3fDDjdvc5ipZfYGDYuo0MMCb25xymFjOHy+e3zHdDmBMToPdVrmolas6DoopkCeMPq8ne2Qk04Y1P5luNzDZNVtNs+ycdFtBMW0EMLtrexn8bggsYGOB+bn+hoFi2mhgTK3i2HBQXXXVVVddddVVV1111dUXWf8DXWuWeeJ/o5cAAAAASUVORK5CYII=",mockDetectedObjectSrc2:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEwAAABWCAYAAABl2nDWAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAp4SURBVHic7ZtbiBTZGcf/51R39cVxejKX3RV1nEkYFxkGZTEIgWFlyYtrYEnyEvLgkoCERhISWMGXjFnylJ2FTUjAMA8RX2QTQghBF1TQJTgJgibuuj5IFJ3pcWTsGZketbvrevLQVT2nTte9q2dml/5DUV1V5/LVr77znUtVA1111VVXX16RzaycMTYC4DCA/QAOAOizthEAq9YGALcBPALwGYBPCSGPNtTQzRRjbIQx9hFj7CGLr4eMsV9ZwL+aYowdZoxdawOSl64xxg5v9v0lplqtNmqa5t87AMoN3Ein76eTMYwwxk4DOO2XyDCM5sYYg2mazkIIgSRJoJRCkiRIkhRU7/uEkPcBsLas91AngJFarTaSzWb/hkYgb5FpmlBVFYZhtAAKLJwQpNNppFIpP3if1uv1H+dyuUdIGFzSwGxYV9Ho6RwyDAOKosAwjEQqkyQJmUzGC9yjer3+VtLQkgJGAEBV1QPpdPoqGkODpmyP0jQtoeqcSqVSyGQyoJSKl1Y1TXtLluXb1nHb4JIARgDA8qz/QICl6zoURYnc9KKKUopsNuvmbav1ev0Ny9OANqG1PJKI4mG1eJaqqqjVah2HBTS8uFqtQlVV8VJfNpu9WqvVRnib46qdzM28pmleI4S8yV9UVRWKorRRfHxlMhnIsiyevk0IeYM7juVpcT2sCcswjJ9vJVgAoCiKm6cdsIY5tmI5S5xMzTyrq6ujhULhAX/RMAxUq9U4tiSuXC6HVCrlOFepVL7R19f3kDsVydOiehgPmPT29v6Jv2iaJur1esQiOye3zmb79u1TEO4jSplRgDkqqdVqh8WmuBG9YRTZwxlelNJ3a7XaYcSEFieGEQDIZDJT/EnDMKDreoziOitN01oeoizLx6yfkUNSWGCE3y8tLY26eddWlRgmKKXvLi0tjVqHRNj7KhWcpKUgMjg4eIw/YU+eg1QsFnH9+vUwdoXWxMQEzp8/75vGnrPyM4H+/v53APwOzqBPENAJhKHKPwGCxirE/8DNFT268Rb19vaGqC661tbWAtOk02lks9nmMWPsM0rpQTQA2RsQACzIw1qA3rx5015CbirqHPHOnTuR0ntpYmIidFqxBRBC9pdKpZHdu3c/FJL6elmYJmkXQgCQ8fHxd0RDGIs2aN6zZ0+k9EnINE0YhuGYaw4MDOxH412BrcAb8QPm1lyJJEn7+RNxlmrGxsag6zp6enoi5wUaQTxOjywCS6VSbwL4B1pBeXpZ2KBvb6CUOtwjCrDh4WHMz89jaWkJALCyshI6r1+ZYSXaSim1Hz7vHLFimKt3ASBcJQAQaaA6OzuL1dXVZuyJG8v4/H19fQGp1yXaSiktYP1eQ8WVsEHfc6wSJX4VCgUUCoXmcbuxLGp+F1v7sN78vPYORRmHEQCEEOKwMmrA5xWll0tCoq3WvdjhxhMSryi9ZOKam5vrRLFxFQgLCA/MLpAwxuZ4LyOExPayixcvxsp39OjRWPkIcT53xtgcnB4WKDdgLSN7/hpjrMJX3A6wycnJWPmSEmOsAu9VC9cmGmXyTQDANM2K4wLpSGvtiMQXJLquz1s/RcfwVOQFRFVVHWOBEG+it4zE13DWw098AdExpFAU5XP+4pcZmKIo9sMPvcQTdT0Mc3NzX/gZsZUlru/fuHGD73VCeZrXiN7eEzSg8ptkGMYdSmlzTlKtViNNkexlnjDLMknllyQJ+Xy+eWya5rwkSRMADACmsHku98RyD0VRHKuA6XQ6Uv7h4WHHiD+q4uQXbaxWq7HGNFHGYU0tLCycHxsb+yFvjKqqoeeVs7OzqFQqwQkTyk8IaWmOT548iQUsTpOkACRN0/6ZSqWacxtN07bUKzZesiwjk8k0jxVFmc1ms9+Be3NMpEnyBQAAlpeX/8gfp9PpLdkBUEodsADg/v37vxGStdyfl8J4mOhlEtaD/3/54L+V3nrbyufzjqEPY6xCKf061r1L9DLfNf44LtEsaHFxcZq/YH/gtlUky3LLOPHBgwc/RcgXHm4K8jCgAZX3MonfP3/+/A89PT0/4AuIOszohMRhBADU6/VPcrncMTg9i/cwZu2BCB4mJhSfAn+eXbhw4QPDMEp8glwut6nxjFKKXC7nOGcYRmlqaupncDY5v3uDy3XP0W3YOEYBSPfu3Xt779695xw1M4Zqtbrh31pQSpHP51sWBW7duvXdgwcPXofToyLFLyA6MAIBlv17cXHxJzt27Pg1XwhjDKqqhnrJm4RkWYYsyy2wnj17Nj0wMPABGgBESAbWm2LbwOzfYhxz8zaysrJysr+//6RYmA2tneVsP1FKkU6n3b46tGFNYx2K19hLHH8BEYDx17yaZQswALRcLp8cHBx8TyysU95mg3KLmcvLyx8ODQ1NwxnQgwarvj1oVGBe0PiN3L179+19+/b9lhDSMuEzTROapkHTtNgeZ091vEAZhlEqlUofjo6Ofox1UH6bW0fgalyYrkwsLHAbHx//5OzZs98We09gfeS9bds25PN515jjaqjV7HK5HHp6epDNZj1hnTt37nscrKhbW+K9SkJjsp4GkAGQA7ANwHYABQBfAzAAYBDAEIBXT5w4sbdcLk+bprka5t9VhmEwXdeZpmlM13Wm6zozDCP0v7PK5fI0gFetbciypd+yrWDZug1A1rqHtHVPfFhpa81dbIo2NDkEtFds44vF4usrKyszoe88oiqVysczMzPf5GC9Ytkw4AIrZ9kuJw1LhMYH+bRVYRZAHkAPgF4XaEMcuNeKxeLrpVJpqlarzbYLSVGUL0ql0pQF6jUOlO1ZPKxey8a8ZbNs3QM/RAoFLCxRrw7ArRMgaDVCfGVHZmdnv3Xo0KGPJEnaHdIG1Ov1fy0uLv7l8uXL/y4WiyUIsw5hE6c7fkE+9NwyKjD7t9uA1g0av3cAA4AzZ84MHz9+/K9hoK2trf25UCj8wjp0m8LwoMS9CM8r0AcCi7IeJh67Gej2JD0Hh8Vicf7KlSs/CqpcVdW7p06dOg13zwhTZyKw4sgtnvE9Jx/T7I6gD+5xrRnbFhYWfukVq3RdnxfiFB+rxHjVh/UAz8cstx4xVqCP2iu4vVb3ap5ic/SKaQQAyuXye+IMgTFWuXTp0vePHDliv9oT441fU/Q65xavQntXnG40CJofKD9o5OXLl2fz+fwRu/DHjx9P7dq1awbekEQwfr/bhgU03DOO3KC1Ww5evHhxbXJycogQgqdPn/5+586dM9YlP1AiFK9esG1YLQa3kddv2BHW+8ReNIpXuV0T8wJtwgLie5gtL+BxjBEh2fswXhXkUW69fCwl9SWJn6dGNS4IQhAsuPyOa0uLkvz0xg1aHFj2PiowuPxuxxZXJf2tkgiNPw4yWPSEsMDgsw9bd2h16uOudmf9YeKTHzB4HLetTn8N5zX8CONtYWOVW3mJg7K1EZ8PRvE2vxgmnufTi/k7po383tJvsBsUi4K8quOgbCWywhizPrclIzdtWvNz00YDc6szaJrl5UkbCsrWZgDzqjvK4HdTYAGbCyxO/ZsGytZmA7MVZMemg+qqq6666qqrrrrqqquuvsr6P6HS+6jomtr/AAAAAElFTkSuQmCC",mockDetectedObjectSrc3:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEwAAABWCAYAAABl2nDWAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAxnSURBVHic7ZtdaBzXFcf/d2a/V/KolmU7JF3LbaMQHOEQXAINS0zoiyXT0valkSGlhVBWoaWlCew+VGnow5o4kJa2u+CHGj/YpKWUPiiGJBCHrNQSSNpEKz0krom1myjEioMmsfd75vZh947v3J2ZnZldSWnYPwyzOx/3nvntueecuVcChhpqqKH+f0V2s3NK6SSA4wCOArgfwFhnmwSw1dkA4G0A1wC8A+A1Qsi1HTV0N0UpnaSUPk8pfZ/61/uU0t90gH85RSk9Tim93AckO12mlB7f7ecbmKrV6mFd1/+xDaCswE1u9/NsZwwjlNKnATztdJGmacZGKYWu6+ZGCIEsy5AkCbIsQ5blXv0+Qwh5BgDty3obbQcwUq1WJyORyN/RDuRd0nUdjUYDmqZ1AerZOCEIBoMIBAJO8F6r1Wo/iUaj1zBgcIMGxmC9inamM0nTNNTrdWiaNpDOZFlGOBy2A3etVqs9MmhogwJGAKDRaNwfDAZfRbs0MMQ8qtlsDqg7swKBAMLhMCRJEk9tNZvNR0Kh0Nud732DGwQwAgAdz/o3BFitVgv1et3z0PMqSZIQiUSsvG2rVqs90PE0oE9oXT+JR/Gwujyr0WigWq1uOyyg7cWVSgWNRkM8NRaJRF6tVquTvM1+1c/Nxr26rl8mhDzMn2w0GqjX630071/hcBihUEg8/DYh5AHuuy9P8+thBixN037xRYIFAPV63crT7u+UOUy+nMXPTcY9W1tbhxVFucqf1DQNlUrFjy0DVzQaRSAQMB1TVfXrY2Nj73OHPHmaVw/jAZM9e/b8mT+p6zpqtZrHJrdPVslmdHR0AcJzeGnTCzBTJ9Vq9bg4FHciG3oRK2d4SZL0o2q1ehw+oQV6X9IlAgDhcHiBP6hpGlqtlo/m2lpcXMTS0hKKxSJUVYWqqpienoaiKJibm0MymfTVbrPZRCgUMtVooVDoMQCvdZ7F05B0S5bw+48//vjw/v37/8tfUKlUfFXwFy5cQDabRalUcrxOURRkMhnMz8977kOWZcRiMdOx69evf+PAgQMsllFhbys3wETXJZqmLUiSZHiYn0BfKpWQTqexuLhoOp7JZDA7OwtVVVEsFlEsFlEoFAygyWQSFy9ehKIonvqLx+MmL2u1Wr8KBoO/RxsSD8oRmhdghG2U0ivg3hVt0ritVFXFQw89ZEDIZDJQVRW5XA6ZTAaZTKbrnmw2i2w2CwBIJBK4dOkSEomE6z6DwSAikYjxnVL6jiRJx3AbmCsv6xX0u4C++eabbArZkNd3xLm5OZRKJSQSCayurpoA2XlOJpPB8vIyEokESqUSUqmUpz7FcEEIOVoulyctLnV0IrdZ0vCuI0eOfFc0hFL3cTObzaJQKEBRFJOXFItFAPbAAGB6etq4p1AoGB7nRrqud0EbHx8/Cu7Z3LTjBMyqASLL8lH+gJdAz4Yd0PYYfkitrKwAaENxUiKRQD6fB9BOGF4k2hoIBB6GzXPateHGw0y/gCRJh5yMcNKFCxegqiqSyaQp262srEBVVSiKgkOHDjm00FYymUQymUSpVPIETbRVkiT247v2MjtgdtQJ1wkAeCpUl5aWAACzs7Om4yyGzc/Pu85+rI2LFy+67l+0VZIkBR6GI9C7cCU2e0Ne4heLU/xQ5GOamxqrVCohm80anqWqquv+LWwdw+3i1W5vkptK31RWEEJMY8YLsK2t9rosq9pZ0Qq0vayXd+VyOWSzWROk9fV11/2LtnaehXmYLSReXrLkwLS+vo5UKmWUBvPz8z29K5fLIZ1OQ1VVJBIJvPjii4M0CRhAlrRqkFBKTT8pIe5ZsoA+OztrDKlMJoPTp0873lcoFJBOp43rV1dXDS9zkyTsbO08i6cYZgWsq7Lnz1FKTUHDCzAWu5iX5PN5y6qel6qqmJubA9D2RHY9SyBeqn1RnWfpevWDQ8x2O1thNKLrusq/k3kBNjs7i8XFRSiKgtXVVVf35HI5AzAPlyUQBtONxAWSVqvF3vj5OOYozxOIjUaj6GSEk06dOoVEIgFVVV1X6azQzefzRlLI5XJGZj158qTr/sVlOF3XRQ/r3YaLa0zuWa/XV/iTXoABbWgAXE3p8AUty6zFYtEUz7xIBFav19mPbzsEu9pw2ZfR0Pr6umksWSyeOoqf05qZmUGhULC9lg07FtgLhQIeffRRAG3wXufGxPn9N954g0+1rjzN6T2KjWtJ2GRN04qSJBnR1uvkoaqqmJmZMYCwYC7WYayUOHXqFBRFMYZnIpHA8vKypzkxcRJR1/WSLMvTADQAurDZTvf4AlapVPLRaNSIts1m09fiRzqdNiCwYZdIJDA9PW1kUXGCcX5+vmcZYqVIJIJgMGh8v3nzZn50dDSNnQD23nvvJe+++27Tk9y6dcvXAkihUMDp06cdhybQfjuYm5szYqAXEUIQj8dNGf3KlSsnp6amCtgBYBIAudlsvh4IBIy5GL9exlQoFIwpaXERhGVXvwqFQgiHw8b3er2+HIlETsIa1kCAsb3M9h999NHcwYMH/8Tf6NfLtlOSJCEej5uOra2tfee+++7jvYvtKQYATPQyA5qmaf/hg/8XadWbKRaLmUofSqkqSdLX0A1L9C5LYH7+tsJoaGNj4wx/gv2B2xdFoVCoq068evXqz+BhWU1ULw8DzEPS5GEApM8///yPIyMjP+Qb8LtGOUhZrUXWarVL0Wj0MZg9i/cwNiQBDx4mXij+Cvxxuri4+KymaWX+gmg06rmgHaQkSUI0GjUd0zStvLCw8HOYh5zTs8HivG116zaOSQDkd999d2Zqauq8qWdKUalUdjwJSJKEWCzWNSnw1ltvfe/YsWNLMHuUp/gFeAdGIMBinzc2Nn56xx13/JZvhFKKRqPhaZG3H4VCIYRCoS5Yn3766Znx8fFn0QYgQtLQnR19A2OfxThm5W3kxo0bT+3du/cpsTEGzct0thdJkoRgMGj1V4cM1hnchmJXe4nlBOABGH/Oblh2AQMgbW5uPrVv374nxca2y9sYKKuY+cknnzw3MTFxBuaA3qtYdcygXoHZQeM3sra2NnPvvff+jhDS9Xas6zqazSaazaZvjyOEIBAI2ILSNK1cLpefO3z48Au4Dcpps0oElsa5SWViYz23I0eOXDp37ty3xewJtIdPOBxGPB5HLBazjDmWhnaGXTQaxcjICCKRiC2s8+fPf5+D5XXrS7xXyWhPaQcBhAFEAcQBjAJQAHwFwDiAfQAmABx44oknpjY3N8/our7l5r+rNE2jrVaLNptN2mq1aKvVopqmuf7vrM3NzTMADnS2iY4tezu2KR1b4wAinWcIdp6JDyt9rZCJQ5FBC7mAtp8Zn0ql7rlx48ZZ10/uUaqqvnD27NlvcrD2d2wYt4AV7dgeGjQsERof5IOdDiMAYgBGAOyxgDbBgTuYSqXuKZfLC9VqdblfSPV6fbVcLi90QB3kQDHP4mHt6dgY69gc6jwDXyK5AuaWqF0CsEoCBN1GdC1fLS8vf+vBBx98Xpblr7q0AbVa7Z8bGxt/ffnll/+VSqXKEN46hE183XEK8q7fLb0CY5+tCloraPy+a70vn88nHn/88b+5gfbZZ5/9RVGUX3a+Wr3C8KDEvQjPLtAPbJnN6p3LykCrX9K2OEylUqVXXnnlx706bzQaa+l0+mlYe4abPgcCy4+s4hmfOfmYxhLBGKzjmhHbPvjgg1/bxapWq1US4hQfq8R4NYbbAZ6PWVYZ0Veg95oVxKHJ9lbDUxyOdjGNAMDm5uaT4hsCpVR96aWXfnDixAm2tCfGG6ehaHfMKl659i4/abQXNCdQTtDIrVu3zsVisROs8Q8//HDhrrvuOgt7SCIYp899wwLa7ulHVtD6bQc3b968nEwmJwghuH79+h/uvPPOs51TTqBEKHZZsG9YXQb3ca9T2eHW+8Qs6sWrrM6J9wJ9wgL8exiTHXA/xoiQ2N6NV/XyKKss70v9AmNy8lSvxvWC0AsWLD77taVLgwIGWEPzA4vtvQKDxed+bLHUIIEB3dD4770MFj3BLTA47N327VqDBsbU71u/m/jkBAw23/vWdgFjsis/3Hib21hl1d7AQTFtNzDAm7c5xTDxOH+9eP+2aSeAMTkVu71iUS+v2nZQTAOZYfTZn9WUkZV2bfhZaaeBWfXZ6zXLzpN2FBTTbgCz69tL8bsrsIDdBean/10DxbTbwJh62bHroIYaaqihhhpqqKGGGmqoL7P+B/h9IrO/QZ2GAAAAAElFTkSuQmCC",mockDetectedObjectSrc4:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEwAAABWCAYAAABl2nDWAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAv2SURBVHic7ZtbaBzXGcf/Z2bvknZVXXIh0VpqiUOwJYeQNrTsEhPyYls0tH1oscChhVBmQ0sLCSgPVRr6IDUOpNCiFD/U+GGdtITSB0U0CdghkhoCSZus5IeUGFu7joIjO2jseC+zO3P6oJ3VmTMzO5fdldywfxhmzpyZc/npO9/5zpkV0FVXXXX1/yuyl5VTSkcBHAZwCMCDAPrrxyiArfoBAB8BuAzgYwDvEEIu72pD91KU0lFK6cuU0kvUvy5RSn9bB/71FKX0MKX0fAuQ7HSeUnp4r/vXNpVKpTFN0/7RAVBW4EY73Z9O+jBCKX0ewPPNHlJVtXFQSqFpmrEQQiCKIgRBgCiKEEXRqd4XCCEvAKAttd5GnQBGSqXSaCQS+Tu2HblJmqZBURSoqmoC5Fg4IQgGgwgEAs3gvVMul38WjUYvo83g2g1Mh3UO2zOdQaqqolKpQFXVtlQmiiLC4bAduMvlcvmxdkNrFzACAIqiPBgMBs9hOzRoSLeoarXapuqMCgQCCIfDEASBz9qqVquPhUKhj+rplsG1AxgBgLpl/RscrFqthkql4nnoeZUgCIhEIlbWtlUulx+qWxrQIjTTn8SjWFgmy1IUBaVSqeOwgG0rLhaLUBSFz+qPRCLnSqXSKNtmv2rl5ca7mqadJ4Q8ymYqioJKpdJC8f4VDocRCoX42x8RQh5i0r4sza+FNWCpqvqr2wkWAFQqFStLe7Ae5ujyZSx+Xmq8s7W1NZZIJC6ymaqqolgs+mlL2xWNRhEIBAz3ZFn+Vn9//yXmlidL82phLGASj8f/wmZqmoZyueyxyM7JarLp6+ubAdcPL2V6AWaopFQqHeaH4m7Mhl6khzOsBEF4slQqHYZPaH58GAGAcDg8w95UVRW1Ws1HcZ1VtVo1/RFDodCJ+qVnl+QWGGHPV69eHbOyrttVvJsQBOHJq1evjtWThDs3lRtgfEFkaGjoBHtDXzzfrrJasw4MDDwBi745leXVhxEARBAEA7BODMV8Pg9JknD8+HHk8/mWy+N9mSiKJ8D0yW05AYd8U0EffPCBvoXcULvXiLOzs5ifn4csywCAXC6HxcVFJJNJ32XyI4AQcqhQKIyOjIxc4h4laBJqePFhBAA5cODAE3xDKG3PZkA2m8XBgwcxOzsLWZYbgPL5PI4ePWqA6FWappmgDQ4OHoJHK2sGzKoAIoriIfZGq75raWkJkiTh4MGDkCSpMfympqawuLiIlZUVJJNJ5PN5TE9PY2RkBPF4HPF4HJIkeaqLb2sgEHgUNv20K6MZVXb2aBy1Wu11URS/rz9UKpV8+TB+2OmamprCc889Zxh+uj9bWloylXPjxg3XdQYCAUSj0UZaVdV3A4HA49geguwB2AxLO2B8UEewbY1E07T/EkL26Zm3bt3yHKweO3bM0PlkMonJyUlkMpmmfkqWZeRyOSwvL2N2dhaAN2CCIKCnp6eRppR+LAjCd7ANR4MLYE4+jI9RTIC9+q/5+fkGrEwmg7W1NaytrWFubs4EK5/P49ixY0ilUlhdXUUikUA6ncbU1BQAeJ4ELNraD/s+WhqTk4Wxw1EAIFBKS+yDN2/edN9iAKlUCrlcDplMBnNzc5bPyLKM+fl5w5BNJpOGmXJhYQETExOeofX19RnShJAotq2LtTBbK3MLTNDPrQIbGRmBLMtYXV3Fvn37DHlWoCYnJ7G+vt6wsLm5OYyPjyORSACAqQwnNQHmalg6xWGGsrH96Wyd9WGEEE/DMpPJIJ/PNzoqyzIWFhawvLyMhYWFBqh0Oo3p6Wmk02nIstyYJPiZMZ1O44033nDXAWK0D0rpOnaMwlUnmk2pBOYhKaqq+p4gCBP6w36cvq7p6WnMz88b7rGgeGWzWZw9e7YReqyvrwNw7/gJIejt7W2kNU3LiaL4XQAqzEPS0srcAhP0o1qt/jMQCDR6UywWfcVi7EyZTqeRSqWQSqUsQdkpHo8DcA+MDysURVkIh8M/xo4Pc/RjXoYkABBFUVZZYKIoegaWzWaxtLSEZDKJV199FePj4x6b4U/8ZzhN02R0YAPRMM1WKpUcm+ni071Jus/JZDK7BgswA6tUKqv1S9dbPF73w7C+vr7WrBFuxIYKuyl+f//9999nZwtXlubGhwncIaqquioIQqO3Xv2YJEnIZrOYmJhohAd+pPtANz5MFEXEYrFGWtO0vCiK49hx+FZ+DGjRhwEAKpXKcjQaPa6ng8GgJ2CpVArZbBa5XM75YQe5tdJgMGhIF4tFd7EIJ1/Arly5cva+++4zAFMUxXV4MTU11bbhODEx4fgMIcQ0HD///HNfwPwMSQGAWK1W3w0EAg2PXa1Wb6tPbKxCoRDC4XAjXalUViKRyCSsh2PTIenWY7MFAACuXbv2ZzYdDAZ9TQCdliAIBlgA8Omnn/6ee8zUPzt5DlwBiNhx/v9hnf/t9NVbVywWM4Q+lFJZEIRvYse6eCtrGrj6MYlGQRsbGyfZDP0HbreLQqGQKU68ePHiL+Cw59VMThYGMDsV4CwMgHDz5s0/9fb2/oQtwO9yqZ3iwwgAKJfLi9Fo9ASMlsVamL5jAXiwMP5B/q/A3qcLCwsvqqpaYB+IRqN76s8EQTCsGQFAVdXCzMzML2G9wNbl1HfvG4gwWpkAQPzkk0+O7t+//4yhZkpRLBZ3/bcWgiAgFouZtnI+/PDDHzz88MPLMFqUJ/8FeAdGwMHSrzc2Nn5+9913/44thFIKRVGsfqvVEYVCIYRCIROsL7/88uTg4OCL2AbAQ1Jh3jz0DUy/5v2YlbWR69evPzswMPAsX5gOrV3fL3kJgoBgMGj1q0Md1knsQLGLvfj4C/AAjM2zG5YmYACEzc3NZ4eGhp7hC+uUtemgrHzmtWvXXhoeHj4Jo0N3ClZ9fWZj86x2Xpsd5MKFC0cfeOCBPxBCTCtrTdNQrVZRrVZ9W5y+1LEDpapqoVAovDQ2NvYadkA1O1x/l3QzlfGFOR4HDhxYPH369OP87AnsRN49PT2IxWKWPseyofVhF41G0dvbi0gkYgvrzJkzP2RgeT1akmE/H9uL9SCAMIAogB4AfQASAL4BYBDAEIBhAHc+/fTT+zc3N09qmrbl5r+rVFWltVqNVqtVWqvVaK1Wo6qquv7vrM3NzZMA7qwfw/W2DNTblqi3tQdApN6HYL1PrFvx/CM7K2A8tJALaHfojZck6f7r16+fct1zj5Jl+bVTp059m4F1R70NgxawovW2h9oNi4fGOvlgvcIIgBiAXgBxC2jDDLi7JEm6v1AozJRKpZVWIVUqlbVCoTBTB3UXA0q3LBZWvN7GWL3NoXof2BDJFTC3RO0mAKtJgMDcCP4nRWRlZeV7jzzyyMuiKI64bAPK5fK/NjY2/vbWW2+9J0lSAdyqgzv45U4zJ+96bekVmH5tFdBaQWPPBmAA8MorrySfeuqp191Au3Hjxl8TicSv60mrJQwLij/z8OwcvSMwL/thfNqqgVZ/SdvgUJKk/Ntvv/1Tp8oVRbkwPT39PKwtw02dbYHlR1b+jJ05WZ+mTwT9sPZrDd925cqV39j5qlqtluf8FOureH/Vjx0Hz/osqxnRl6P3OivwQ1M/Ww1Pfjja+TQCAJubm8/wKwRKqfzmm2/+6MiRI/qnPd7fNBuKdves/JVr6/IzjTpBawaqGTRy69at07FY7Ihe+GeffTZz7733noI9JB5Ms+uWYQHb5ulHVtBaLQdfffXV+XQ6PUwIwRdffPHHe+6551Q9qxkoHordLNgyLFODW3i3Wdjh1vr4WdSLVVnl8e8CLcIC/FuYLjvgfhrDQ9LPbqzKyaKsZnlfahWYrmaW6rVxThCcYMHi2m9bTGoXMMAamh9Y+tkrMFhct9IWS7UTGGCGxqadGsxbgltgaHJ2W7drtRuYrlZX/W78UzNgsEm3rE4B02UXfrixNre+yqq8toPS1WlggDdra+bD+Pvs8/z7HdNuANPVLNh18kVOVtVxULrassPosz6rLSMr7dnws9JuA7Oq02mZZWdJuwpK114As6vbS/C7J7CAvQXmp/49A6Vrr4HpcmrHnoPqqquuuuqqq6666qqrrr7O+h8/Z9kQqKjX4gAAAABJRU5ErkJggg==",mockDetectedObjectSrc5:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEwAAABWCAYAAABl2nDWAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAArkSURBVHic7ZtfaFTZHce/5975n5jE/PEPakxsdZGwKItFKISVpS9uAkvblxKppQUpo7S0sII+NHbpg7BZ2Ja2CeSh4kPKtpTSh8mCCrrU2EXQ1k30QVqJycQEEyOZaGbm3pl7Tx9yz3jmzLkz989Most84XLvPfeec37nM7/zO39uAtRVV111vbkim1k5pbQLwDEAhwAcBtBiHV0AVqwDAO4BeAzgKwBfEEIeb6ihmylKaRel9FNK6TT1rmlK6a8t4F9PUUqPUUpv+IBkpxuU0mOb3b6qKZPJdJum+Y8agJKB66p1e2oZwwil9AKAC+VeMgyjcFBKYZpmcSGEQFVVKIoCVVWhqmqlej8ihHwEgPqy3ka1AEYymUxXJBL5O9YDeYlM04Su6zAMowRQxcIJQTAYRCAQKAfvi2w2+5NoNPoYVQZXbWAM1nWsj3RFMgwDmqbBMIyqVKaqKsLhsB24x9ls9r1qQ6sWMAIAuq4fDgaD17E+NSiIeVQul6tSdcUKBAIIh8NQFEV8tJLL5d4LhUL3rHvf4KoBjACA5Vn/hgArn89D0zTXXc+tFEVBJBKRedtKNpt9x/I0wCe0kp/EpXhYJZ6l6zoymUzNYQHrXpxOp6HruvioJRKJXM9kMl28zV7lJ3Mhr2maNwgh7/IPdV2Hpmk+iveucDiMUCgkJt8jhLzD3XvyNK8eVoBlGMYvXidYAKBpmszTDlvTHCZPzuIlUyHPyspKd3Nz8yP+oWEYSKfTXmypuqLRKAKBQFFaKpX6RktLyzSX5MrT3HoYD5g0NTX9iX9omiay2azLImsn2WCzZcuWQQjtcFOmG2BFlWQymWNiV9yI0dCN2HSGl6IoP8pkMsfgEZqXGEYAIBwOD/KJhmEgn897KK62yuVyJT9iKBQ6aV26DklOMxD+/PTp0+5t27b9j38hnU67nsEnEgmkUilXeTo7O9Hb2+sqj6qqiMViRWmLi4vf3L59O4tlVDjbKlDpBZRCJe3t7Sf5BLZ4dqO+vj7cvHnTVR6m3t5ejI+PO36frVn5lUBra+sHAH6HYkgEFaA58TDeuwjWdyH+C26taDOMl1VTUxM6Oztx4sQJV/nGxsYwOzuL1dVVV/mCwSAikUjhnlL6laIoR7AOiB1ABWCVPKwE6J07d9gWckFe14h79+7F+fPnXeWZmJjA7Oys67rEHkAIOZRMJrv27NkzLbxa1sucBv2Cd/X09HwgGkJpTbaeqirTNEugtbW1HQLXNifllAMmK4CoqnqIT6jWVo2dUqkUBgYGPHmVKNHWQCDwLmzaaVeGEw8r+gUURdlbzohqK5FIIJFIYGxszHdZoq2KorAf37GX2QGzo064SgDgtZqoVpJoq6IozXDRHYHKHkZszgW9CfGLSWJrC+zbKIXotEuyMyGEFHXJNxmY1Rbewzx3SVGb+oV8g+R7lJQVSCilM0WJ5M1hKdpqtcVVDJNNXEtm9vwzSmmKr5gQ4qtbplIpDA8PS6cNfX19nst1IkppCva7FhSSSayTtSQriACAaZopfk3m18Nu3ryJixcvSp9NTU0hHo/7Kp+X+IEkn8+zX4m1ryqLb15E1/WpQCBQ2C5QVdXXXKy3txcjIyNSD+vv78fk5KTnskWJn+FM0xQ9rKLc7FYQANA0bZLfKnHw6d5Wk5OTGBgYsH0+MTFR2P5pbm72XA+TCEzTtCnrkm+jr8U3U+FXmJmZub9161ZbI5zq9OnTGB4edrTF42VXQyZxf//27dv8HpGjLlluHcX6tSIcqmEYU4qidLIMXjYPgfX41dfXh/7+fts4BqzvajCxfTS32zviJqJpmrOqqr4NwABgCoftdo/bGAYA0DRtIhqNFvpSMBis6ZpyZubVTMbtDi1TMBgsuk+n0853IDl5AjY3N/fn/fv3FwHTdd31upJ5DltgO5XbeEYIKemOCwsLnoB56ZIKADWXy/0zEAi8zTLlcjlPn9jGxsYwPj7uynPi8Tj6+/sdvx8KhRAOhwv3mqbdikQi/ZB3x7Jd0ikwdlbZeWFhYWDHjh1/5DOura29drsXiqKgoaGhKG16evqH+/btS+AVMHamqAIw0csK0AzD+A8f/F+nr95MsVisaOpDKU0pirIPpbBE75IC8zInKBQ0Pz8/xD9gf+D2uigUCpXMEx89evQzuPisJqqShwHFXbLIwwAoL168+ENjY+MP+AK8TjOqKdm3yGw2+3k0Gj2JYs/iPYx1ScCFh4kvir8Cn04TicTHhmEk+Rei0ajnCW01pCgKotFoUZphGMnBwcGfo7jLlWsbJM9t11FO45gCQH348OH7Bw4cuFxUM6VIp9MbPggoioJYLFayKXD37t3vHjlyZALFHuUqfgHugREIsNj1/Pz8T3fu3PkbvhBKKXRdd/2R16tCoRBCoVAJrOfPnw+1tbV9jHUAIiQDpaOjZ2DsWoxjMm8jy8vLZ1tbW8+KhTFotdrOVhQFwWBQ9leHDNYQXkGxm3uJ0wnABTD+mV23LAEGQFlaWjrb3t7+oVhYrbyNgZLFzGfPnn3S0dExhOKAXmmyWnYEdQvMDhp/kAcPHrx/8ODB3xJCStYwpmkil8shl8t59ji21LEDZRhGMplMftLd3f0ZXoEqd8gGAqlxToYysbCKR09Pz+eXLl36jjh6AuvdJxwOo6GhAbFYTBpzpIZa3S4ajaKxsRGRSMQW1uXLl7/HwXJ7+BLvVSrWF+tBAGEAUQANALYAaAawFUAbgHYAHQC2nzlz5sDS0tKQaZorTv67yjAMms/naS6Xo/l8nubzeWoYhuP/zlpaWhoCsN06OixbWi3bmi1bGwBErDYErTbxYcXXnrvYFRm0kANo25jx8Xj8reXl5VHHLXepVCr12ejo6Lc4WNssG9oksKKW7aFqwxKh8UE+aFUYARAD0AigSQKtgwO3Ix6Pv5VMJgczmcwtv5A0TbufTCYHLVA7OFDMs3hYTZaNMcvmkNUGforkCJhTonYDgGwQICg1QvxkR27duvXto0ePfqqq6h6HNiCbzf5rfn7+r1evXv0yHo8nIaw6hENc7pQL8o7Xlm6BsWvZhFYGjT+XfJIfGRnpPHXq1N+cQFtdXf1Lc3PzL61b2RKGByWeRXh2gb4iMKcLPtmaS2ag7Je0nRzG4/HZa9eu/bhS5bquPzh37twFyD3DSZ1VgeVFsnjGj5x8TGMDQQvkca0Q2+bm5n5lF6vy+fysEKf4WCXGqxa8CvB8zJKNiJ4CvdtRQfZZ3a57it3RLqYRAFhaWvpQXCFQSlNXrlz5/vHjx++zJNjHLZkX2XkW4NG7vAyjlaCVA1UOGllbW7sUi8WOs8KfPHkyuHv37lHYQxLBlLv2DQtYd08vkkHzWw5evnx5o7e3t4MQgsXFxd/v2rVr1HpUDpQIxW4U9A2rxGAfectNO5x6nziKuvEq2TMxL+ATFuDdw5jsgHsxRoTEzk68qpJHyUZ5T/ILjKmcp7o1rhKESrAgufZqS4mqBQyQQ/MCi53dAoPk2o8tUlUTGFAKjb+vZLDoCU6BoczZad2OVW1gTH5X/U7iUzlgsLn3rVoBY7KbfjjxNqexSlZe1UEx1RoY4M7bysUwMZ1/X8xfM20EMKZyk91KsaiSV9UcFFNVdhg91ifbMpJp07qfTBsNTFZnpWWWnSdtKCimzQBmV7ebye+mwAI2F5iX+jcNFNNmA2OqZMemg6qrrrrqqquuuuqqq666vs76P4k+MEEax9RYAAAAAElFTkSuQmCC",mockHugeRasterMapData:"01d8cc01025801ed3a98133800050b5407760004857f68091fff0100ffffff6536f9f9f978031df90100061c000f0200ffff1e3600000032021e000100061d000f02008f0216030fa8008f0f0200d1015802045b020e57020f59029a130401000fb801d10f02008d08580213f958020408000102000fc1008d070200035702170413000f0200ff6707580219f950020302000f9901990f5802ff7d32f9ff009a08034b020902000f5802902304047d0c0f5802ff7d0f02000a0f58029211045b020108000f0807ff761fff56020a0f5802970802000f0c03900f0200cf0f5802af0601070f5302ff750102000f5802b008ac040f5d02ff770f58020b017b020f02008d024e020602000fb0008d0f0200d20f5802ffffff1b0f1915ff730f110e0b0fb305920602070302000fb600920f0200cc0f080702057a170ffd0092034e020602000fb600920f0200cc0f5802020402000ffc00930651020302000fb700930f0200cb0443020f0200020ffb0094034f020502000fb700940f0200ca0f5002020302000ff900950551020302000fb800950f0200c90343020f0200030ff90094034f020402000fb600940f0200cb0f5102030302000ffb00940451020302000fb600940f0200c5021d2305fb0d0f0200020ffc008b22f9ffab120350020402000fb5008b0f0200ce0f52020b0202000f05018c0344020451020302000fb5008c0f0200cb0238020f02000d0f0401880245020acf200102000fb400880f0200d10f53020d01020013ff8b290f0200800144020f0807ff810138020f0200130f5602800458020f5902010faf00820f0200d70754020f6b090d0f15018201b104029a00010b00060200021500070200027e020f0200ff550758020f5b020c0f910183024802019c00020b000502000114000802000f5802ff5b0fca200b08020008a3010f0200770347020714070402000ca4001ff95802ffff260450020402000773420202000f5802ff5c0fb10415029c010f02007f0147020408000802000ac50e011a000fbe007f0f0200c808ec060d0200068b170f020185013102140408000a020006b400011800060f000f0200ff530d4d020f0200010f8a01860132020f02000406b500012100060f000f0200ff530f4702010d02000f8a01870133020f020003066309012000060f000f0200ff530d44020f0200000f8901890134020f02000304b70013f91f000410000f0200ff540f4802000c02000f8901870332020f02000301b70017f9b7410111000f0200ff560c45020f0200000f8b01890f530203010200020624010b000202000fc800890f0200bf0f4902000b02000ff400880231020f0200030954020f5e3fff600b45020f0200000f58028812ff32020f0200120fc700890f0200c00f4902000b02000ff500890f5202120202000fc700890f0200c10b46020e02000ff5008a0234020f0200110fc7008a0f0200c00e49020b02000ff4008a0f5202110fc012ff610fe62e100125000f0200860236020f02000f0fc100860f0200c50b9d040d02000fa9168c0f52020f0202000fbf01c50f0200471f0c5b002c0d4a020b02000f5f002c0f02004c0236020f02000f0f87004c0f0200a32f2020b800081f0c59022c0b47020e02000f7c00080f02006f0f52020f0202000faa006f0f02007f1f2058024a0f85250d0f09078b0236020f02000f0fc6008b0f0200630f57020a0f09072d0f32310d043b670f9901840f52020f0202000fbf00840f02006a0f58024402411b0f58020e0297690108000f02007e1ff97117160f5802ff220f6109250e4b090f0200020629000f58027e0f5702160f5802ff020f5f090b0fb90b230f4102020f0200040581090e57025e181818181817000f0200522f04045602170fb004330ffe0bbc0f5802094ff9f9f9f9af04210f4302040f02000a0f2e02010f5802681fff58021a0fbd00010f02001b014a2f0f0200b90f5f0908120c01000fee00200f42020a0f0200020f6500010fb004690fae04190f58023101b0040f4900330f0200730f58020911ff59020fa800210f3c02020f0200090f6500010f5802d606f6330fa909b70f0807090f5802570f5702010f5802970fbe00020f02001702ac100102000f5802b90f01010701af040f6109270f65100f0402000f8300030f58026a0f0907190f4e7c2a18046c000f0901030f0200a00faf040f0f5802210f0907130543750f3801040158020f110e650f5802190f68102801a6040502000f0901040f0200a00f5802100f5902210489040fb3040a041d000f3701050f5802d109bf020f0901050f0200a00f58020a0260090f580221049612043b020f02000a0f3701050f5802ce05a8040102000f0701050f0200a20f5802110f5902090f1c00050f49020a0a02000f3801060258020f09073c111803000f02001101ed010f0200130f6f0b240a5d000f9400110f0200960fb70b090fb90b110f8710060840090f02000a0f2b01080259020f2100080f0200203f18ffff5300140af6010f02000a0f5802090f1c00060c52000fcd00200f0200870fb004110fbe00090fce040706970b0f02000c0f5f00070f5802450f7200070902000cf9010f0200070f3c0206029c120f0200010e4d000f4500080f02009e1f2058020b08610909f206050d000f7602070f4e020c0502000f3401080f5802420f1d1a160efa010f0200060f1302070f8704050f4b00000f4500070f02009f0f57020c035802013d02054b0201210701070001e012010a000f020001053a020f02000a0f3a00010402000f5802420f0707150ffc01020f0200040f1302060f5702040f4700020f4500060f0200a00f58021343ffffff0c4b020302000265021f0c07070806140e0f02000b012a000f0200040258020fb90b3b0faf04160ffe01040f0200020f1302050f5702030f4300020f4500070f0200a10f5802142f0c0c58020201b2040ff700080f52020b0202000f93010500b0990f5802951fffc500020f481e040f5602040f5802db02090701970402a304030200034f020faf040a0f58022f020d090fb0048f0315010a02000fe820040f5702061f049d02020f0200a40fb0040d0258021e0cb0040266020f58020c041e150f0200090f4e010a02b1040f5c013a0f080718090c170f0200090fa100030f2659000f4500091f040a010a0f02009c0f58021703a204030200030e000c17000c02000151020f7417083ff9f9004e010a0f58026c0f5902150cf70002a6270e18000f57020a1f040a010a0f02009c0f68100d023b0202020008db00030e001f0cb1040c0139310fc8120b0f4e010b0159020879000f02002d0faf04190f09020d0502000c950004190023ff04c2700102000416000f0200050f0a010b0f02009b0f58020e12f9540201020007db000507070916000f0200001ff91f150d0f4e010b0158020f6109390f58021a0f0202050c02000bf800091f00021c000fd62c110f0a010b0f02005c1f0870000c1f2020000a1f2058022403a704016e020f0f010b1ff90707091100ed190102000fa700030257020f58023d0f5000170922020f0200070abd000b28000ff804160f49010b0f02005c0f58020e0f59020a0158020fd80108033b0203020006db0005580221f90c3e000f1802050f5802100294690f5401040f58026c0b22020f020006061901025c090a02000fa609150f0401040f0200633f08ffffd5010700b4ab0f58020f010200022d000e0200035302010200051e00055702050200051b000c02000fae040c0102000f5802070f69100b0f78041706020001aa02040f00060a000f02000204445b0f02000e083e000f2d000e0f0200060f58027c2f0808b4040a0ff20d0a015302010200081b01080200053a02034c02010200030c000115000202000117000f0200010258020206000f02000511f9d6640ff604020107020fff01052a1818aa660f0200110151000429002f1818841e0a0f5802ee0f5902090f42090a015302010200046b010c0200023702010200071b00020d00011600010200071b000b02000230020f58020204280e071f000b3d000307020609020a02000124020fe6031c094e00090d000f0200000f5b04060b0200073b000b1a000f0200190fca001c0f02004b0f56020c023b020f8300060153020f7a020a0137020202000646000fb004170f5702080226a40bc4040c5c01013b020f5802050226070697000f020011084e00080c000f0200020f16020f02d30406b6000f32000f0f0200070646000f0200710f5802290254020f58020202110227fff9681007ee00390c0cff1b000e13010240000d38020b02000d20000c49000f58020a021d000797000f020010080e0e0e580204b6000387000f0402070a0200032f000fa10b150f0200030fbd00100f0200580fb0040b3ff9fff93602020302000254020f220003310c0c0cec0d02ac04020200033700032c1c021400020200031a000602000ffa06020f02000f04a2010202000239020dff0103b00b021a00030d000e02000f1900030831000d590012ff7f040202000f5702171404b6000239000f0200240ec2000f020068110801000f8100044f20ff20ff3502030302000254020f2300030230020a020003370001e0200a0200031a000602000f5802500f07070c084202060200081600080c000202000a5802080e000f02000a0358020f24000a0f02000e0345000f0200730157020fb70b040232020f360203010200021d000f2100040a3802010200013500028c250110000702000118000702000de1060f0200140a5d010392040c00020410000e1a0009020004270009020007a404070b00040200084a0213ffab640814000f02000402b6000f1d00040f0200150484000f0200720158020f8a00040233020102000f220003011b000102000f200001073602030200042600012207031400020200041a00010a1501a5080f480215070d0e017e17024400040200013a020d0002045409011b00042b000e02000f58022c0a02000365020f0200030f5802c30e52010202000132020302000212000b0200031c000fe21204023202080200043f00017909081900022e1c0302000f0207130326000b5702095802013a33030200035c00020200043a09011c000213000f0200010f5802300f8a0b140158020f7302030f0200170120500f2228030f02005f0fb00409015c0904020001fb000b0200041c000f770203093902030200034100030e000602000318000102000332020f02002308a7002218184209010200015b0002778a0230020476020219000f0200010228000b0200074d000f20000007f40604a1040263700719000f0200001ff90c0e2d0602000801010f0200680f5802160fcf19010558020fc10003063702050200012900050e000502000117000402000f58023807020047fffffff96702111800310d22070902000135000c02000135000172150f58020c05020016f964020f0200051ff9ae042f0402000f5802730157020fb70b040738020102000c62010720000e1b000c731e0202000f1600030218000502000f5802210590090857010103020402000b0f000f58022d03570005b5000302000e97040e12000d020001811a0d16000f0200240389000f02006c0158020f840006014f020502000e831e071b000f020002024d0208020008992c070200093e00085802080c000f02000a045902085802089f04081307010200051d00097c000902000ffe1b01023c000308000e3d000f4602100f0200010434070f02003009c2000f0200660f58020b0961090e47090214000e1800050200073a020402000f1500040802000f4c02160f0200010f580207054902020200040f00087a000c02000fe90600013d000307000f3d00000f5802240f0200380cc4000f0200630f58024b0ea7121f0c150005070200075802070b000f02001409580241fff9f9f909020104020207000c02000779000d0200043700071900093f000718000302000f5802ff1d01cd190b9904028b170102000355010e020004a6040602000f58021a0f57021f09681001092305090204a1040b02000eb5000602000f58020d04b0100602000f5802ff1508090739f920f942020152020202000658010c020006510203020004cc560902000a3600054e020434090f02001201360005f11d0202000943020f580224015c02024f0002aa020802000214000702000f58027101cc330f02006c0f761e0b093d0202020006b0000210000102000615000c0200093f020107070f1c1c0f0122020f02001e0136000a06070f4a02040902000cb100090200042a000715000413000202000719000202000f58026f010200028d000f0200670f5f090c093d0202020006ac000210000102000615000c0200014d020802000fb004010b35000122020f0200171ff91c670702fd010f0200090b7b000b0200043a000717000413000102000718000b02000fe10d380f0200210b8e000f02005e0f58021f061f150152020202000fb8000808540201aa120207000802000b65040f58021e0f7e000801fe010f02000a0f3d000807f104010d00010200094d000112000f0200030fb9046b0f9400030f0200580f08070d086109020200059d00020f000102000514000e02000841020f0200040c35000f5802550f3017010b02000446020517000411000202000517000e02000f58026b0cab030f02005d0fb0040e0f5802cd08930b0f020000023f020741020411000202000f3200000402000f5802650480000f02006b0faf040e09970401020004b100010d000302000414000f0200000fa404040802000c36000fb004550102000c7d000a0200012300087e02010e000302000a2b000b02000f58022d13ff7304045e09060a000f02000a0b86000f0200650f5802200461090353020102000fbf00090842020f02000303420105020006b6350fe02e0f0db2120b02000303020f0200070b30000b02000438000517000411000102000516000f0200001bf9952c0f02001c0c14010f020009075b000f2700090f0200580f07070f0f0a07000115000f5802170738310f0200040f4401000613000fbd040f062c000e0200066e170f0200050e34000802000436000514000411000102000516000f0200040f150e260f293c0b0f02008f0f5802510f4d02040702000f19020a0f58022b0fc2120f0f7d000906470205cb010150020402000fff010e0f0d07230f57000e0f02008e0f58021101e90608020004d60007140001f50502b7060da8010741020f020004033900012e22045d000402000f57020f018a2c0e39000302000403020f0200060328000f020004043700051f000411000202000fb300020702000f5802210f5602af0f5802130d120e04380108580233f9f9f9431c041e000502000f4d02040f0200020535000502000f58021008d62e0d62020200020f02000d056f000c0200053900041900051100050200041a000f0200010f58021f0f5602b10258020f100101090200074002010200021d00010b000f020000021e000602000f4002020f0200050637000402000237020f02000e21f9f925e10dc60b05fe010f02000b046e000d0200043700051900041100060200051b000e02000f60091e0f5602b30758020f322a060fb0040002110e0f5302000bf0200302000f4402050f0200020334000702000f53020e01af040153020102000b12070600020f020008076f000b02000535000418000511000402000419000f0200010faf041c0f5602b50f5802520f3f02020f020005099d0101d4060f0807140602000a58020f100e0f09f6140e0200022100063f020410000602000e34000502000f58021a0f5602b707b70b0fb00419023701029f040c0200021c000702000cd0350f02000b02390002c30b0292560f5802250444000600020f02000801c2020d020001950b023600061c00021000070200061b0001020022f9043900013d000fe535140102000a10030f0200ab0558020f660904021f010d3c021f201d0701010200070f01023c0001e8800f4c020b080200024000054c02014000068b040f02001203a00107fa010f0200110279000802000c3600031c000c17000c081a0fa3041a0502000fd902030f0200a6056e170faf0405012d020e02000f58020f082d020f020018024a010558020f0200210f5802230c1f0208bc120202000170380e5802022b000602000f5802240641000f0200b10f58020d0e52020102001fff5802050714010f4d0218050200043f000f5802310f11150f080200047a00080200082000017902017c02010c000702000832000104400584040102000f670214030d030f0200b40f07070b0143020f0200020f5802100ffd06190502000457010f5802110123070f25070105a30107fd010d02000ccf0b047a000902000a36000f5802ff210f993a020f5202020302000fb004040796010f580214092700053f000f5802110f0200000237000f580210015602010500030200057a00090200031d00040200011e6e040d000402000931000fb004003f04f9f9b4041105b5000f0200b30351020307000a02000343020f0200010f57020f19ff31020f020013067f000221020f02002406a3011f18010009092a0e067b000902000a40000f5802210f53021001020006b5000f0200b1065f090fb80b010f5202010302000f1d00030913010f4c0213070200073e000f58021c0a2f0006a3010a17020a020019f95938077c000802000a33000f580201082e000202000f4a02150a020006b5000f02007a0f9700240458020fb004020d171c0702000f1c00020b12010733020f02000013f90400060200073f000a29020c39020f02000c060c010a17020f020009077c000902000934000f580200092d000202000d5802024e460f02000c06b5000f02007a0f6f04010f0200100658020f2d00020749020f0200110b44000632020f020012083e000f5802190de66407a3010917020f020008087c000902000934000f5802000f2317000d58020f0e071207b5000f0200751f08d85f0e014f3e0807000302000f0f0e0b0f58021d0355000602000f4f02120502000638000e58020f02001a07a301089b0b0f020008087b000a020009350001110e0912000fbd25010f5802010f02000f07b5000f020074011d020f7104040602000326000bd8040411000f3f000502a6040300230f02000c066c000502000534020f0200110536000fe8351f0a020008a3010b06020f0200040174000f0200030b32000d11000e28170f5802bb0f160103060200045802092a00040f00045f020e0200014c02055a250f02000a0e3d000f59021a093f000c08070f02001a0758020b16020f020004097b000b02000b33000f6d1500030a060502000a58022ff9042b231307b5000f0200730331020f8d000d0327000a42020f58020f07a00b0fb6040c0f8100030fa904110102000a3f000f5802340b15020f0200050a7c000a02000b34000f5802000c4d0e0a58020f0200150f5802c40a4d010702000fa3040a0802000734000702000134020f0200100733000f6009390b16020f0200040274000f0200030b33000f5802dd0f15010307020001ab0402020006160004be040814000c0200083c020f0200090c38000302000f540210020d440902000fb0041c03d319040200084b000b18020f0200001fff2b040b0f3200000a0200086e000114030fa304150902000f85000b0f0200600c2c020f02000502280004fa060202000358020f5702090f5902150f1801060238020f02000b0a0b0201be0e0ff91b010f0200060f7d00060f1702100cc7060c02000a45020f0200000c7d000f0807b30c2b020f020006022900095802040d00035f020f0200040fa504090602000c5e010602000f53020b0202000f3e00000f5902190f3f00000402000f0902000c0200042b000f0200030c2e000d02000c7d000f5802ba0df2030d0200025402044b02010200040d000fb0040b07bb0b0f0200080c5e01070200023b020f02000a0f3e00010f0c07180f3f00010302000d07020d02000329000f0200050d30000c02000c7d000f58024e0f5483000f02003f022b022f08085902210f5802140f5902120c5e010702000f52020a0202000f3e00010f5802330f690b010a02000f7c00010602000f5a150f0c40000f58024f0f2d3f510458021c08df000d0200052a00051c15040b000fb0040c0f0b07130d7000060200023c020f0200090fbd000104860b0f1107100f3f00010402000f19020e0f3d00090faf04100d400006b8000fba12130202000c46000f02000501ed800f1d00050f020037062d020f99000f052c00047f000358020307000f0200070fff06080702000f4000070f33230f0fbd000a0fb9040f0f3f00090f58025e0702000fbb04180fc300090802000186020811000f020043052c020fb0040f15f92c00038b0006070705c2040f020004073e020f0200060f3b0004017a0f0fab04090102000f56010a0f5802120f0808060f58020f0f7d000a0a34070f0200010f3f00080f58023f015702010588025b010f0200362908ff0502052c020916000e02003ff9f9f95802020402000e32000802000f6b170c4f20202020d801060fe327120f3e00090f15520f017a060fb604050f58020e11183f0005020001b2000602000f4a02010a0200053a00010200063a000fa6481b0f9e02080702000357020fb304400b42020418020f1a020c2708085702042c00063c0021080814010e441d040200023c020f020009013e000502000438000202000f08070f01ae77045b010d3f000fb8120604020002d204026d000c02000f58020f010200042700048500050200011e000f0200160a3f000fb0043e01530201b10405a0000f0200340a5802071b020c8e010902000728000f5802030302000935000602000f5102090f0200010a5e010f0807100102000336000509000402000236020a02000dcd0b033d000e02000431020f0200140d48000f3800140302000a3f000f58023d0254020fae044001220207c727030f02010200022d040e59010336000802000f1500020102000a18010502000f3d02010f0200080b46000fb0041004627c011c3d0c3f000a53020202000c6d020b34000602000f5802ff1401fd01068e2e010f000902000651010802000923000425000b15000202000f2e1b010ef13c0f02000c0be5010f5802140502000c3f00024a020b02000a59020f5103050f5802ba01ab040f060742025041060c07010c00090200084e020602000923000325000b14000502000636000402000fb70b100a02000c19020532020f0200130c3f000b52020f0200010b3300040200091d310f02001212f935000602000f3600120502000479000202000f08073c0255020fb40b3f11ff712c01020002b800010b000902000218000d02000924000326000b1400060200033e00065b010f580220073d000ff8431b0111070382000302000a9a040402000a16000fb004040f05071c02e6140108000f02002303b2000402000f58023b0f57024605ae0404fc01060c020402000eb80301d744041f000402000f7409000702000351200a84040f02001915f9a3040130090f02001c0c24020a420205020001170004347c01c80b2cffff150e0f5802220ffb190f0f020004044f020502000f58023a0457021f04ab08010f02002b06fc01024800061000040200021800090200041b000802000f58020d0f5502290758020f5602210f08071611f95954046702050a0009fc000f5802230f5902230979000202000f5802430f09073f061b0202b800061000040200021800090200041b0008020009fc040c02000f5209210a020006b0040f0200220b75050199040f020001054c020762020a3c000f5802240f5902200973010402000f58023905af040202000463000f020032060202024f000610000402000218000702000666170802000f18000504120c0f5209020fc504170f5802550152020302000fd46b020f5802240fe806040f0200070771010802000f580238024e020502000866000f02002f01f901010200014c00010a000902000117000902000f58020301a29a098317050200013e000f5802020f0200170258020f5f101d0502000a74040fc15d1102020001bb000902000f5802230f4002020f4b00090c120a0302000fd020390552020102000361000f02003505fd01020e1c060f000402000e69000f5802040302000e1e000242001ff97425120f0200060f58022e0750702ff9f9691012170033000602000f0d02090f0200031ff90607210b09030402000faf04181f04430004040200014e020502000416000f020035030e020f5802060f6800000e3a020f02000a0542000f3402060f0200110258020f0200260738090183bb0710000f0200071ff9b00428077f020f7425020720000f0200020f1502050509020f02000f0f4300050302000a41000315000f020036061302015300060f000302000116000a02000858020ff90603090200053d000f3f02110f0200060f58022e09ab0b0b0f000f020003017c020c9d010fd614100a330202ff000a3c0227f9f97a7c0f0200030c78000402000a0e020f02000a0f4300050202000a3b000214000f0200380603020f2910020f6a00010633000f0200100741000f340206015a620f1e00070102000f58022d0ffa06160602000129230c9d010a35020f02000e04ff000929000f4400110c78000402000f0907180f4300050102000f57024c0b18150c29020183000a02000c23000f02000c073d000120020d020006ad640f02000a0f58023b09bd040f0200060f0807010f14021105020006fd000513000f020015063b000a02000f5802420a63000f0200330518020fb004010f6300000330000f0107090729070941000f3902010195190f1900010b02000f5802380ff135160f5802020f201c1402800205ff000f4f0215050200053a000b02000f58023409af040b63000f020033032802020302050d000202000f620001021a000f0200140941000b2a020f02001b0f5802340391000fb004150ee01815f934020f02000e036c000102000f2d000e0a02000ac30617f974270f580233095702075e000f0200370621020915070202000adf00030200021b000f0200130333000202000f49021b090200019e220f0d0e26620c0cfff9fff9dbe70202000f5802140f00010008eb510f0200090b3b000f2b00090f0200000a3e0012f9fc010209a50a13020f0200090a4500090200093700091a000f020034061f020f07071402020004682c063f000f020002022d00040200092a02016c170f2c1510043d000f73251f0802000646000202000f580210015d1f022e000a020002e2060f02000a2af91833000f58021d0b790005a4040fff51120502000b46000702000523000f1a1c4132ffff082102020200011100020b00050200078b000802000340090838310f0200020834000e8c3a0f57090f013600080200082b020f02000d0fb116040202000143100e02000717000f9501070f5802110266000702000f87020a0c02000cbb000558020f02001b0fc3000708480007a5000f02003401f9010511020f0707000283170e02000358020f02000c1ff93f00060bb9040f0200050f18010015f9aab60f57020d0c72250b02000fb104030716000f7d00000302000f580250036a000402000f58023d0857020f5d093f013802061c020f5802000f5c01050f5802150f4000040ffe06100102000e3f00044d020fd827100cf4030b02000f19150e0e7d000402000f5802ae0f57024b12ff7033055902070b000402000f5c01050ed5270f0200010f58020a0f5c02110b7f0006741e0f5702100d6a1e0d020007f4060f0200010b7d000602000f7117100d71040f08071d066e000102000fb0043c085802010aed0165000f0200360b22090111000a02000f5c01060d89090f0200030f4000040f58022d0661020f0200091f592901090f211c0f0fbc00040f431e130e3d000580980f4100110c3f0001e41303467d0815020f02000c0c47000302000836000131a40318000f0200360a0d020c10000f483f0b0120000f02000b0fb004060fd920150f18010104f39c0f5c020f0f3e00010502000749090f0200040f3f00090f0a070e0f3d00090f3f002c0fbc04180f86000408580208a4d00f2f00040f02001f0a17020f8404000f6a00090f6409110f9300061f203623120f7f000a0f59020e5ff9ffffff2d8200050f5802140f8200040f58026a0f5902170fbe000309570207b80b0f2f00040f0200200f58026701b6030f63090e0fe9000a0f58020f0f8112060fa0411101408304ac1e0c040c0f58020f0f7c00090f3f001201a6000f0200020f58022c014c020702000464000f8702050f0200200a58020f0200000fd901090fb004100217080263010f9c46000f58020f023d000402000ae2000f58020e0fbc0b0a0fb0040f01dd800427000b09010f19020e0f3662030402000f3f0012020200018f620a02000f58022b075202010200035c000188d70be6000f0200260f4a02000a02000ccc010802000f5802100602001fffa402010f58020e0a02000bf6000f58028f0bb1000602000f5802180f5c59000f58023a01950001584d0712070f02002d06f8010f020005012b040f6700030f58021a0f040c020f58024f0fbc00050fb0041505e5120b23020f1902130f3d01060f3f000d0b20000c7d000104020f0200110b39000102000a3800091300010d000f02003101f0010f02000e0f6a00040f5802910f74170704e1060f02000901d9930221000ba2010bf9010f02000a2effff8f120f31000a0f58022f01d102027f080c0200095702021d00031300020d000f0200320f53020e0202000f6c00030f58022e0f1f1c0f0a02000adc010fc919020d1c070a34000702000f580210022e2a03580202a8010502000f19020c0b0200037a12058d000f9702190e65150f08070c0f500203030200034402020200021400020c0015049d000f0200300237020f02000d0f6900040f58022f0a37020f02000e03fa0022f9ffea0d02990b0f02000c03340001fa060515020102000230020f02000a08b0040f0b021c0a020001860005df870f69231505020001b000070200030a020f020004016d000f0200050a340017ffe4850f37000a0f02001c0f52020d0202000f5500040f24230e0b02000d55450f5f091c1220fa000349020f58021f0f43020a0f02000207553f0fa2041d0a020014f9fa06014b010f1828170302000f4a020d0a02000227010f0200030a2a00091c730f3700090f02001d0bfa010f0200040f5600050fb104090f1c00001ff9a90b1e0b020018f917b21b15f3060b0f00040200072e010f3b02020f02000e0330070f6404170fd9040105580204b2b60f2500010f0200070f580236014b020f020004072a010f02002b0f9c3c050c02000f6600021108ba280c2b000f02000a0f580237021306043b020f02000807d3080f58022307100e0f0b021d082702063e0001821e0fa502170202000f58029b0fb719000202000a6c040f57020211f9db120a29000f02000d0f5802370f0200160984030f9b040e0f0200000f58022702120203020007f03c3bffffff75020f02000f0f252a420c0200092c010f0200290f08020d0202000f6200031bf90b210f0200110f5802a10502000672040f02001a03e5040758020db0bb0f020004033a000102001ff9b312180f2102090c4b020902000f58025b0f5702030358020f4e02110602001ff9111c100f02000a0160090548090509000f020008092c010524020f02002109580208f4010f02000a0429000858020f0200100437000302001fff5802340947020d0200092c010f02002a06f3010f0200060f6000030fd72e0e015531020700060200033bd50f02002701fa0005580908580211050d000105000902000132000402000f4f02210502000958020f02000d0b18020f58022e1fffb004320d4a020a0200092c010f02002a06f3010f0200050f5f00040f5809120d25000f580233048712150c61020f020008092c0105240204020003eb0d0f020012052a100f02000c0453020408000202000f3e00150202000a3c000193090f0b150c09020009f5000702000925000e02000f3700050f02001f0f4e02050502000f5300030fae04120f0200000f5802340202000f130e13092c010c40020f5702191800c30d2ff9f97a0b10099c0b18f90bcc091a000f0200110fbc641b0f3917050e4a020a0200092c010f02002a0ffc01000902000f5d00050925000f0200170f58023a0102000ff906000abd04092c010b48020b0f000f02000c0f0d021e0902000960090c8f040f02000e03580201f3000f12071009f5000602000a46020e02000f3700040f0200200f13020c0f52000011f9f1220f0200240f5802400e59020a0200092c0103bb19033b100f5702140427000f5802171ff94f17000f580230048e010f12070f09f5000402000f3700240f0200220f20020b0f5300010d34090802000f1d000a0128230fb9191d0b02000e31010f58021b0f93040c0f020001026f070102000f57040e0402000b900402480104aaa10d1f000f0200100242000302000f2102250ea1040b02000e5e010f02002501ee010f0200050f5500020fdf350c0f5a020b0f58022801f40003201c0802000f58020b096e170b08070488040f02000a0841000b2e020f02000e023c00055c20053f000fa1021301ca020243000b02000f5802200b41020f020004046e000fca5d300f54020501b03a0f0200030f5a020c0f02000221ff08d4620f580220015c01059c010e02000f58020c0a3100044b020152000f50020a02020001cd020502000519020f0200130c5128053f000509000f02000a0a7c000802000f58024606a0910f7d00070f0200140f0602020202000f4200080221000f0200000d290e1bf9e9350f71251d0fa204000a02000f6c1003130565090b20010f58025b0aa90006a6100f58024e0cd2020feda81902020001e2040305000f0200010f1e41050502000f1c02000302000523000f0200000323000f0200000c08070c58020f61091e0b1a020e02000fb1040a0b3e000458020f0200150a3f000fc006130502000a3d0007b0040f0200130c3f000602000fb0040e0d3b00022d020f0200220677000702000f1e020b0f3d4601050200021f000f0200030fbf19180f5802b90672040f0200120cde010fa704130502000c3f000602000f58021e0f5102220302000677000702000f1f020b0f580209021e000f02000601562b0584020f0200080f58024b01280903f3060f0200020b9d013ff90019ab04150102000c3f0005f5010f0200110c8e060f5802340fda20100bb7000f07071f0702000f0302020f20020e0f2923050f4e00020b02000cf3060f0200020f58024a0f03070a0102000b62010f08071c0f1a02090f1507100c7d00078d020f3e001f0502000fae040e07580202e10d0726020f02001f0bc5000202000fd60d080302000f0d02020f96090e0102000f0e07120f58026d0a4a0e0989020fea040b03757c01ea00030200090d020f7e04100293010544000f320010080200023e000e020016f9b60d0f02000501c70501020001d2190f2700050f0200120f8700020f23020f0f5802020ecd000f02000201ba000d020e0b02000b100e09b80b0f1d0e110fd800020302000927020f02000221f9f9c4120502000f2500020f020007094a020a0200082e1c0f02000403760001e6220b2be80f59000203300004020003e5000c02000fb004100702001ff931001d0c020001bb000c02000f5802230c46000f02000c3ff9f9081307080426010502000742170864020f0200050338000f840003031d000102000f1e02010b244b0b88020b0f000f0200000fff01020302000f1c0009010200077a0204be0005cd190f3d00020fc301020d02000f58021c0f8f09100f02000a0d800003960b0209000f0200070b5f040f8a020f0e02000f5602080f0b150b0f9033170f73010f0f2502030f1600030171020f8a020307020001ae020122020f02002f0935010f1107050fe5000f01af100f07020a0f02003e0275000b02000f260210014b020702000fdd00130802000f68090b0f3c020a0fb104110102000f96000f0f4202030f1600033f0c15f93100050202000320050f50022f010200082d010302000f5b02020fe5000f0f580249025e000408000f02000b04ea5f0f0200070752020202000fdd00130802000faf040a1f083b02160f0200071ff958023e01d00b0243020f02000103570209c20d0f020026082b010502000f58027e059a000f02001201db300f2a000a024d020702000f5802070f260e050f58020b1f083002070f0200150ad40d0f0200040f9a04030f160003110c5159015d020f2100020404010ffe01020f02001b0fae00050f4600010477000f02000b0f60091b0f0200120f71000b0f020000019b220f1800000602000d15020f3000070f5802650faf04120f89621c014f020f1665060404010f58022e0fd503060f5a00020477000f02000b0f58023e0f6f000b0f0200020188040f1a00020402000f5802310d44000502001ff9b004320f0707110f58021d0180100f35000504e1010ffe01020f0200180f5702060fb004770408020f02001b01e1010f33000a0122000802000454010e02000fb004050fd1190c1f2062092e1ff9d5200e0f58021e010c070f3d0705055e230f58022f0f4e01050f5a00020f2d00050a02000fb004390a5a000f0200170131020f2f000a0122000802000fdd00070374930e4f000fb004070f5802311ff908074101bb0b0f5802070305010782120f0200240349000142340839010f5802740f5a022502da0108d1000c0200022200070200040a010e02000325000e19000f580201061400090a150c02000fcc04140f9500070502000132090c02000ff50d0a0f35000507b10402601f0318020d02000f6c020c12f9b00405280007c5000fbf70030721000f0200020381000f8b0b120f0200120f6600020f020011020b020f2a00090222000702000fdd0007032500074e00032c000fc112030306010f58020a0f1c000905020021f920a0010f02000c0f5802040a1700080e0001716d0146020e020003d9000f02000b0f74040207020012f95e5405270004e02e09aaf80802000f76000d0f0207390f55022805ae20010b000f020004032d020602000fdd0007032400074900045569069d040a020001af460f3c02120f02000d0f9600070402000833020f02000637f90c291c0001fa020710000602000ab5060f0200040531020f02000701ef040499ff01c4000f2c00070321000f0200080f5802380f6600080f02001102e7010f2a000902220007020001fe000f02000203250001f4150242040353460fb004030402000f33020d0f0200120f9600070402000f5802040917000a46020a0e000a020001730202e5000f0200060f58021104430008370204b8040d02000fe5000d0f5802350fd200060f02001602dc010f2f00090d6b040fdd0006012a0012f9210012f9211a02fb430119000f0200070f3802120f02000d0f960006050200094102050200011d02050c1c0124000f4f02090c02000f77000a0f58021005195408580201af09011c000b02000f6e000a0f903a120f020010014a000f02002d02ee010fb000090d6c040f2d0006043f0201dc050658020f02000e0f33020d0f0200120f9600060502000134020d02000438000169090452020f2b00030f020001043f000f0200020f58020f21f9f9d62002a60b095c070f3c00020f6e000a0f5802320147000f02003002f50109d2000a02000d57020f13620003020006580201a304010f070260000f02000b0f3802120f02000d0f73010d0f58020d11ff081505510205c2040f02000c0f77000a0f1c0202090200099704084c000919000502000822000f0200010f08072c0f5300010f02002406f20109410004f6070e5602028f040f02000207580204ae270413000f02000a0f33020d0f0200120f73010d0f580213064602014504060f000f0200040591030f7f00010f1c02030902000923000844000f9302030822000f0200010f5802290f5000010f02002704f1010b420013f9e3140f1802010fdd00060485020137000342000460000f0200090f3802120f02000d0f960006050200058c040902000538000d1f003cf9f9f923440d0200033e001df90b3801c9020943020f0200020d580201b9410217070f020000036f000f0200060f58022406d9410f02003604f001019f030702000418000f0200000fdd00060485020f3e000a0f0200000f33020d0f0200120f9600060502000d3902010200053800081f000411070408000f0200060132010f580236014e00014f020faf04030fbe02020802000f5802210f0c22120f02001e0fe701000f02000d058a010b0200054f020460020f0200150b38020f6217140b02000f9600050602000839020602000438000af506032c000fd02006070200010f020ff201020f1d0204080200012300034c0202090003ca0b08250006020004ad000b02000190020102000fef0d100c02000f5400040f02002c0ffc01150702000f890005044f020408000f0200160b22020f02002305ea080f020006032c020b020004ce000f1e00020f58021201f70101d6010c0200011a000f0200180f32000e04ad000b02000fa704210502000f5400040f02002c0ffd01160602000f8900050450020408000f0200160f4902230c020001860e0202000f1401030f3a020201051c010d0901b1040105000602000f08070e0558020f0200530f7b01040f5802d60513070f0200120c22020f02002306272f0f7e01050107020b02000685020177020a58020f5702110f580266251818036c0f5802cc03a90401bc190f5102120302000f4802230f0200070f580219026b2c01b1040b7202021c000108000f02000a0faa0453020200028f05030200020f2101020005d5060f0200200f2e01040f020019781cffff1c1cff1c330003db010f0200190f89000301421e1108b8190fb00463060200016b010f0200000f1f0206022c000e9f040f33000806020002f2010f02005301e70b0e02000f4e022006020002fd000f02002a781cf9f9f91c1c1c19020f510219030200083f000702000133150f58027206f4010f02001e0a4a020a0e000f0200040ee7010f02005e0625020f0200211f1c010035081902032c020f0200190fdb02040358020215150313070f020013066a040f0200330f0102040f020013074c02070b000f0200080f46025e0e02000f4e02210602000f5702350fb0042d0f0200080273020f2100080f0200020f4e02330602000f0502080f020010061a1c0f5802ff7c0f3b02020f02000a0612020f0200330f3d02100f02000a0268090206000f02000f0e3f040f02005e067c040f0200210fb0049001b80b0f02001e0f4e02330602000f0c020f0f02000e0179050f26000e0f67105d0f0200050f4e02210602000f5802910f0200220612020f02003302f1010f02002b0f5602140faf0472161824020f0200210f5802ff5b0f0200160f4404050f0200590f4e02210602000f5802ffff8301b8120402000f68102c0f02003e0ffe06330602000f6c04160f0200310f9804590f020005067c040f0200210417020f0200210211150302000f5802ffff3b23fff955020fc0124a0f020023066a040f0200330f8704310f0200160f4404050f0200590fa604210602000114020f0200240f5802ffffffffa208b90b0f6009ffff3a1f1c5802ffffffffa207f10b0f0807ffff3b0802000f5802ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf0fcf35590f02000606b4350f020020089a270f02002b0fd827f60136460102000f2f38160d02000fed01060f0200310ff851040c02000f4e02200602000f4c022b0802000f5802f502b05601b456015d020f020069015e60060200023a0203080001070001050004ba560509000f020041082b020f02001a0f580274032c520f2e75150f43012d0d6a0408b004025f020f0200680d62e3021d6501dbb60602000f2600000f02003e07193f0f02001c0f58021205794f03ff01013f54011e88020c000e02001c2c13001f2cf4000b0529021f2c01001208b6000f0200202ff9140100000415000f5902700f0200760f58023302dd010c120201400204020004375402e37b0f0200081b2c1c000c10000f0200050f5702120f580242050200069b000fe001760f0200650f5802330102000f590201016a01018f05048c700185020130000f0200000f1d02140f0200000f5802720502000fdb00000f0200dc0f5802380fd774050f5201180f5802b50f5b02ef0f58023a0745090b02000f5c02140f5802b80102000372850f0200e00f5802390f5902090f5b02130f5802bd0fb804e70f58023a0f0a07050402000fb8030e0f58022021f92c35000f60097b0902000ff6000e0f0200c10f58023c0f0a07070402000f45010a0123020f02001d0135000f5802ffcb01d6660f0200100f5c02060123020f02001c0252020206000f02000f0f68104a0f0200030fee00060f0200c90fb0043a1ff92b69180f5501020f5802210f0807ffd1033b700f0200160d5c020f5802220102000fb00473047a170a02000de7000f0200d00fb0043c0fb104180f240e010f58027a0f3507010f3902030502000f1f00030f7c072c0f0200a20f58023d01fe1b0f0200020fd30b010c72010f5802500102180f0200110ff519020f3902030f0200110f1e02a20f0200270f58023f0f400201012a1c0107000a02000db800412c2c2cffd8060f02001d0209020f02003c0cf7020f5802290fcb12dc0f58022807f503032002013c020105000d02000124000d16000338000f0200020f24023c0f0200210f58023c1e1450000f0200c60f580227080200041f010199790fb1040004751e0d59020f5b020a0f8304410f02001a0e08020f0807270fb004ff170802000858020e590201ac040302001f08e2bd00031b000e02000f6f09270f0200330f5802374effffff14e0000f0200c80fb0042c033f0004210102ab040206000d02000325000f5a02010fb3a8040f5802ba0f0200db0319020f020025033f000434010252020f6209030424000358b90b02000218000b02000f5802a531fffffff9060602000bd9000f0200cf0319020f02002c0428010258020f6c100418ff96040b57020f5902030f5802a51d1458020114000f0200d90f58022c0378310532010359020f020005052800059ca60502000114000b02000f58027e0121020f0200111effb3040215000f0200d50f58022b03570206548a0f58020a0c54010554020102000c1e000f5802ae0f0c07ea0f580258012b020902000150020502000f7e0d000fd70d330f0200260d92000fab0411079a04020d0003020009fa000f0200ce0f58022b0402000527010fb0041a0102000457020fb5a0010f08077d0fbe121704561003540201020001ef000f0200d50f58023c0426020f0200030f550103012c00021b000b21040f5802590f8515010b8f000f58021805a80b010b0007c3040f0200d50f58025a08110e08020005100e1bf9181e0fc206260f02001f0fc402010f58022a060815080c000f0200d50f58023b017b040f0200090f5701050372020fdd01010f0200540f7b00010f58022b06fa060618070f0200d60f58023a0f5202090302000f59010b0fdd01010f0200680f58022c06ec000fb204df0f58025d0399040f0200040f5802c52fffffcc20d901512404d30d0f02002a024c000393040f02000b022b000f0200040f5802c70f0200dd0fb004390f51020b0402000f6201090f58026b0d7e000f08072c080a070f0200dd0f5802380439020f02000d0f6301080dda010f02005a0d7e000f58022d0fea00080f0200cd0f5802600f6309080dda010f02005a0d7e000f58022d066b100f0200de0f58024e0f3523020f6701050dda010f02006b0f5802ff730fc319050f1800020f5902040158020105000f0200720f58022e0fb104e70fb004370f4002020f0200060f59020401a30e0f5902760f58022f0f6409e60f5802650f6509080fc7206e0502000f5802310fb304e40f5802660f5902080fb004ba0fb204e40f5802ff1b029a200f02001d02de070f0200dc0f5802800fc7205a0f02000a0c08070f52021d0302000f5302dc0102000f58027b2ff92c5702790d955b0328020f02001f016b010f0200da0f58022b043e0001c70d0ffc0d060f02000409a0330202000f5a09760202000bb0041f14d8271a09020002df000f0200d8041a020f02002b0f5802220f6d10000f58028c092b020f02001b0f5302d80102000f5802370f213f000f02000d018200080200065802060a000f0200680cb0040f4b021b09020008e6000f0200d10f58024d0fc719020302000e6001064e02060a000f0200680a58020f394d010f6c02160eec000f0200cb0f5802380fd220030f8717070f590100064e02060a000f0200680a5802018c6538f9f9f966090f5802ff510f9a04090f020001086646040200064e02060a000f0200680b58020102000957020f020016013b000f0200d90fb004380f3d02010f0200080f660101064e02060a000f0200680f5802010fa204160802001ff9ce19de0f5802670f5a0201064e020f1d15720f5802120f6902140f4703010f0200c80f5802850f0200720f58021102d00b0a02000f2c07000f4302c80f0200020f5802690e7b1e06b0040f0200720f58020208b70b01af2001070008020001db0b0d27000f0200db0f58026a0d59020f5802910842020f5802031114d2650959020f5502db0f5802ff340d6b0204a50b017802030200016d010f0200d80fb004600891100b6a0106b004060a000f0200680f0807010328020602000b230e21f9f91300096f020613000f0200d60f58025f0857020c5902064e02060a000f0200680f58020f019048066402040200033f0207a2170312000f0200d60f5802370fab12080702000a56020f5802070f02001513f991100408000f02003a0f5802010937090358020b6b1006ae120468020f5802ff2a0f781e200d59020fa6041e24f9f967310360020f02003a0f58020205ca19017c04029a5d064002020200011b000a21070110000f0200d70fb004370f58022409140e0f58021f01b71b0586700f02003c0f580201063909020c00020200024f0204020015ff390004120006cd0b0f0200d40f580237027f040f020020076a010f58022202c0330f3b001e0f020010051f020a020001270204f50d0202000213000402000214000682020202000212000f0200d40f5802370fb004250859020f1d021e01fa0101af040f3b001e0f020010015e000f0200000128020a1800011300040200071b000413000c89020f0200cd0f580237015e690faf0420080b070f1d021e22f9f957020f58025a0126020ab0040bba0b073602022d000102000716000f0200ce0f58022b08c05d3ff9f9f9e42e1f0202000566010f58021e162c58020f3c001f0f02000e0fb004040125020b58020a590205d100022d0002440e0715000f0200cf0f5802370102000228020f02001e013c00042a090f02001701e5f6026c2712f966090f02003b0f58023104710201e0000f0200d70f58022b04f1c40430010f51021e0402000341000f74041b0a1a280f3c001b0f0200120f5802320f5902e30f58022c030200031702010d070302000432020f0200140242000f1c021c09f8010f3c001c0f0200110960000602000f080702043f02010200062c00061900010c000f0200d60f58023c0502000fd72e070f0200020338000f1c022023ffff79980f3c00200f02000d0f5802040f2f090301510203020003cf00030200021500030d000f0200d40f5802450f76101b04c25d0f1c0225012b050f26020d0f02001f0f580204029b040c2102023e020202000b1c000215000cea0b0f0200ca0f5802732108ff5c020f1c02280fb80b590f5802030216000302000a34020f1500020f0200cb0f5802260322f60261090f2401000fef06020f02000a0f5802c70573020f2801000f0200c40f58022735fffff9ec800f1d01000f43020a01020013ffa50407020003f40b0f0200210fec04280f0200060f08070907b60003020003960401020001e8200602000331230611000f0200ce0f58022a0f1e01090f1c020f0115090f4300090f02001b0f9c09250f0200080f58021b0596040102000abd000113000c15000f0200c90f5802290f02007b0f58028a11ffac250f5902d80f5802ff470bfe0d0211360f8a037b0f0200490f5802ff5601b4730b6c020f0200c90f5802ff220118150f1502000345090302000f2100010f1400000f0200c40f5802ff220139020f1002000118000502000f2100000fa70c390f02008c0f5802ff1c078e410fd801000553020ffb0ddb0f0200020f5802ff1c074b100f4e01000251020302000f2000000f0200d90f5802ff390351020202000f4402d90f0200010f5802ff4011f937590f6c01010f0200d90f5802ff3d0a5d380f0200e80f5802ff1d0661090e340202010704fc4a0e20000f0200da0f5802ff260e25020257020502000e21000f0200da0f5802ffffff9e12ffae210f0200e80fb004ff1e0461090d33020501070f1515f00f5802ff3a0471020102001fff7902000f0200db0fb004ff440f5702ee0f5802e308cc2a0f2f2a080106490c02000190040f3802000318000402000c37000f0200dd0f5802df28f9ff612c0c72960a02000f0e02000339020c1a000317000402000c1f000f0200de0f5802ed0f02001e033a020d38000318000302000d1f000f0200dd0f5802ff1f03a00b0c28020350020402000c1f000f0200de0f5802ff260b532c0450020302000f4702de0d02000f5802ff3503c6040402000d67010f0200de0f5802ff1f043b020ab1040516000202000f4702de0d02000f5802ff1f059a04084b01024e02050200081b000f0200e40f5802ffffff3e03334b0f020022049604083d00041400030200081b000f0200e40fb004e112ff314b0f0200250e3d020312000402000f5900250f0200b90f5802e40fb1042705b564070602045102030200071a000f0200e60f5802ff3305cc0b0102000f4c02e60802000f5802e2041fca0f02002104b004073c00041300030200071a000f0200e70f5802e20f0200290445020744000350020302000719000f0200e80f5802ff310350020402000f4d02e80702000f5802ff20064002037317041100030200075d010f0200e80f5802ff1f0548020f580205036e020f0200ec0f5802ff200397040558020410000502000f5202ec0202000f5802ffffff7a13ff738503b00405a70404020002b0030f0200ed0fb004ff200963090c14150120070f0200f10f5802ff2b018d7e014d020502000f5402f101a6570289640f02001f0f345f050f0200660fc05d150fb900310447020daf040ffe00660f02007d0fb004ff2c047d170502000fdf017d0f0200660f5802ff3d0fbd12f30ff03ce20f0807390c02000153010f0200f20fb004ff2d0b02000f5302f20102000f5802ff230171620f0200010153010f0200f20f5802ff3b0f5202f20202000f5802ff3a0252010f0200f30f5802ffffff7901c9480f5c09010f6310f60102000fb004ff200f5402020102000151010f0200f40f5802ff1f0142020f0200030f5302f40102000f5802ff1e0f6310060f0907fc0f5802ff1e0fb1040801a8030f0200f50f5802ff380f5202f50202000f5802ff1f0f0907060250010f0200f50f5802ffffff9104a9040fc712f40fb004ff370158020fc164f00302000f5802ff36012a0e02ed2e015a0101fb2e010a000f0200e30f5802ff360b020021ff1415810f5402e30f3831ff230f100e060e02000262010f0200e30fb004ff460f0507ea0fe02eff220fb00413015c010f0200e90fb004ff440f5202e90202000f5802ff400258010f0200ed0f5802ff3d0f4f02ed0502000f5802ff390554010f0200682f24241f39310f0200300f5802ff370fd001510f3602046324ffffffff2401000fe575020f02005f0f5802ff2003c0010802000fb70143014a2f0502000164001124c2b701781402050008860005020051ff2424ff246f020272021fffa200450f0200080f5802ff3305fd010f0200370525020f0200330f0202080f0200430f5802b81f105b7e090602000ffc012d0fe901330f0200580f3902430f02000b0ff84a1f040200028f0504020001c2610fb2012d0f02002c1f100100370ff601580f0200470fff06610302000425020f02002009580202d20112f907000f0200af0fec01470f02005503e0010f0200640f4f02200502000f5802000f0200b60ffe01550f0200430f4d02640602000524020f0200210f5802ff820ffa06680702000f4e021f0501090f5802ff8407dc010f0200680f57021f141cae00016002040d000660090f0200b60fa006430f02004b0289010f02006f0f5702200afc060802000f5202b60202000f02024b0f020040088c010f02006c0f5802200f57020612ff8f010f0200b60ffa01400f0200470f48026c0b02000f5702200f6fc2020202000f5202b60202000f0502470f02003c027e010f0200780f5702220560090d0200028f010f0200b60ffe013c0f0200440d86010f02006f0f57023c0f0807ff5d0f4f10730f0200000f57021801fb0d017cc90f6009ff770fd101000f0200730f570218131c50100eb3120902000f0207b60202000fb906440f0200310977010f02007d0f59021903bc000fb70b0a0f0807ff5a0390010f0200810f5702200135000fcc000702e7030f0200b60f5904310f0200490f8901070f0200690f57021906030e0fb1040a0f5202b60202000f1402490f0200370f4402690f0200000f57020c02a60b0202000f5802ff8c0602000fe601000f02005c1f1c57020d09ac1907a4040137000fad000602e7030f0200b606b2010f02009c0f821065011e020f02000b073c020129000410000764020e02000f5202b60202000f4e029c0f0200010ea4010f0200480129020f02000c087f00070807013600081c00090200028f010f0200b60fa901010f02009c0fcc1d070f02003f011c020d0200024b09024e0907490203040e05b90b0fb004ff9d0f5802580137020e0200048200035902025202020200080e000f5802ff9c04d5010f0200500e5202020200057b000b0f000282840108000104390513390f0200000f0207b60202000ff4069c0e02000f57027005e9060359020f3602000f02000f028f010f0200b60ea9010f02009b0f57027b0f93040b0f02000a0f5202b60202000f46029b06020003a74102653f0f02005302e5060f0200000f7f0032028f010f0200b606aa010f02009607b2080f02005a01f20d0f0200010f8600320f5202b60202000f4e02960602000ffb06580f020058028f010f0200b606af010f0200960f5802ffff3e0f4f02c30502000faa043244f9f9f910aa070f5100320f0200260fa604960f9e4f750f0200450fc2012608020043f9ffff10a1000f42446c0f5802ffbf0402000f5802e301ad0506d2510f0200110f0807ff130456020f5802a40f744d25014f0208ce18065102080c000f0200030fac12590f02005f08cf060f020026077c0301b004026d010f6d09170f2a00000148000f02001f0fc301030f02000c2ff9f97c54010f6c020f01934e0a0200014d00033f090f76000c0202000a3f000f0200b70fbb011f0f0200000b5802050f000f1d021201f0030d5a020294020206000f0200090b390002ad0104020014f909000f020005023c022ff9ff580223013a000b020002fc00041a000f7800050c02000b45000f0200b001b4011fffc001090f1d02040190040402000609010a58020bf6010f020002033e00044b00042400010a000105000f02000a0b620009b1010236020f02000b017700057e00032c0013f975040f02000e0246020f02000001cf5808455b0f02000512f97d02022d000f0200b84410101010611c0a42020172010d16000502000f53010412f950000302000a52000f020004094a0006b1100f3c00120c02000fbf01050f0200060a7d0003e10413f9af1b0f02000e093e000f0200040f450006016d000f4200110f0200a10156020302000aca010215000a14000702000f1101040f58022e03bf04024a000f02001e0fc501060f0200050bc7000227000f6904110102000b3e000f020003012a000f0200000f2e00030f0200b40478120dca010213000f58021e01e93a033c000f1c02140f9d01040f7a00060602000e4e050fbf01000f02000a05c602030200022d000f58023b0ffd0405011a000f0200d109ca0103f1000914000802000f0e02041fff08072c060200086d000f0200030119090a1b000218020f0200170cc600023a001fffc90b020f0200000c3f000f0200070f3d00000f2d00070f0200bb0a250b03dc000f5802210604050f3e00060802000f9d01040823000f02000311f9190a091c000fbf01000f02000a0b7c00032c000f210e030f0200000b3f000f0200090e3e000f2e00090f0200b909050204d9000915000802000f5301050957020f3e00060802000f4a00030f890e06060200023900015d0c0415000ebe010f02000b024300060200022e000f58021605f70d0f020011025c00152417070f3400110f0200b109050204d1000915000802000c920104020003610e0f1457180f4a0003086c000f02000502670001b604035b0203bc010f0200160b7c0003380012f9ae02030e000f0200060122000180000f020014014a00012c000361020f0200d308bf0104f2000f580227084e000f0200090c3b0b040200032a020f020009042b0001230c01aa0001ba010f0200180b580202f1010315000108100f02000a0329000f020018014f000130000f5902d60ac10101fc000f100e28034e000c580b0e02000f0d19000402000fc4120f042a0004a9000114070702000455040f0200060c1a02023c0001510005ce120f0200070228000f02001b014e000133000f45071a0f0200a507f10101591904c8000fdc01060623000a02000496015f10ff10ff10f004080602000f4a000501db010627000f0200020126000202001810ea170302003f2424ff541e0c0329000f0200020fb1040f0f1c02210159020f3800200f0200a307b6010ce801071b000702000c26000c020012f9b01f019e060f02000b0f4a00090f3f000f0478000164000c4b00013e270f5a020c0fe301070f58020f0f98020b0f020005015a020f1d00050f0200bd0198011a108117020200021a000d0200021d000f02000d0f19020f0f4a000a0f3f001003820001a0000b58020433020111070f0200080343000c02000f5802110463000f02001a028b000f33001a0f0200a501970101821e0dc200031b000d02000d29000f0200010f1902100178000f3c00010436090f02000b01280003a600030c0003020006bb010f59020d0f1e02030f5802120f3b00030f02000d0feb04250f02009c05ba010fb80001051d000c02000f2d00010c02000f5802130c36000502000f3f0011012d00029c00010b0004020008f4010222040f02000a0437000602000f5802130f5902230f9a09210f02009f0296010b9801040200041d000d02000421000f0200090f1902110180070f0200030f3f0010013900014500030c0004020008f3010f52020a0402000439000402000f5802140868000f0200fb0396010b9801040200051e000b02000420000f02000a0f1902100202000f4600030f3f0011050607020b00070200054b0401fd010f02000e073a000102000f580214012c000f0200ff0302da010d9701030200041e000c0200031f000f02000b0f1902110102000f4700030f3f00130145210fc100070f5802250f89020e0302000fbb00030f0200f10296010f3e0b04031d000d02000f3901130d37000f0200050f4f00020f2d00050f0200040f4400020f2102160c4e0e0337020f02000e0f7600040f0200ef03a6010f090103031d000e02000f2f00030b02000e37000f0200050583380802000f2d00050f020004083b000702000f1a020e020200073200051d1e0f0200030b22070130000f0200ff0202a7010f1a0102021b000c02000a172a0f0200070c38000f02000b0d48000f2f000b0e02000d41000202000f1d02030d0200022d000502000d20000702001af96d150534000f0200fb03a1010f150102031c000e02000b36060f0200031ff9fc30110402000e4300041a000f0200150e42000f07071805e60b0402000fe72e080a57020d3a000f0200f402b7010f0d0103021c000f0200000f5802130f59020d09021c0d820001f41b0f7c00000332050dbd1c0d41000102000768040f02000a012d000a02000bf10602020001b91c020b000202000a34000f0200f701a9010f0f0105011d000f0200000f3000050c02000c3d020f0200080c3b0002e80d097b020402000572250902000d41000faf0418022d000b020002e020023e02060200097e091fffb004ff0801c0010b52010502000fed22060522000f02000a01f801019f01010a000602000175000802001fff53000201b3040f6f10130f4000020fd70d160fc60003017e3a0bb6040fad02000f3d00030f0200ee0f64100602020008fe01060200021c000f02000d05300009590211f9cd020913000b1d340502000241000fa004030c02000535000702000667040f02000c0734000502000f330005027764051e000530000f0200fb0feb03050202000cbd01040200021e000f02000c042d000d02000f551e000f4b00040d3b000f0200070f42000105fd010f02000e0f3e00000f340005010605061f000f3a00000f0200f10f58020b0db1060402000f3b0111042c000e02000f5900000f5100030f2a00010f0200040e41000f1902050f0200020b3f0006e3300f020004015e020f5f09ff0c0b53010a02000fc601160c02000f3900040202000fb002000c40000502000232000f02000e0ef10f01f8010f020014056e000302000f37000e0f5802ff0d0faf040c0f2f0407011c000f0200090f09020e0b02000f4c0002015f1a0b29000f0200030f3f00010f1d020e0602000b3f000619000f0200040b30000f0200fe0fb60b0c0121000f0200020f4a010e01e52e0f3b00020f0200030f5100020217000f3100030902000f3e00010f1302040f0200010d3f000f2500010702000d30000f0200fe0112040f02000809be010702000f330008010200013b150730000f02000101cd480502000137000a0200024e050f3b00010283100702000a39000102000708020f020001073d000d3f000f300001070200015f000f0200ff2c02c3010f0200000f57010f0f3500000a02000f43000d012e000ff5040701bb020f0200070708020f0200020f3f00090f3100020702000f7600070f0200ff120fd501090fe8040d0f9a09070602000126000f020008012a000f5802610742020f0200040fb600080f0200ff0f0fd5010a0f1602140f02000a0f82010c0f3c000a0f3238000a02000f1102040602000fb004080625000f0200040a6b000f0200ff1d01bd010f0200080f4f010d0f3b00080102000f40002d0f1902080fc419110f3f00070b0a230f0200010163000f0200ff250f8306080102000f57010e0126000f0200070f40000d0f3a00070202000f1902070102000f0f02010802000f3f000b022a0004a6120d02000162000f0200ff2802c1010f0200050f58010c0f321e090f3b000c0202000978000b0f000f08072f0264000f02000412f954020f5802ff830fef040802693f0f02000c013d020502000e4e000f71040b0f1302060502000f40000a0f5402080f593ad40f02004905d6010f0200030f7b000d0f3600030f4d0e120d97020f9707000126000f0200060201020f0200070f3900060402000f3b00070f181cff090f0200130105020f0200070f45000d0f3a00270e57020d12000f9f020d01ff010f0200090166000f0200080f3c00090e8e1c0f0200ff1b01be010f0200070f4c010c0f3900070127020f02000d093f000f541a020f42000a0f17020a0102000f3f000a0d48070b11000f3d000b0f0200ff0d09db010d02000f3d010e0d32000602000f3c000e0a3e00012f00063e000302000116000f020005013b020f02000b0f3b00050102000c3b000f5802ff3a0e2d0b070200017e010f02000a072d00014a150207000102000f38000a0202000128000302000e12000102000217000f0200030c18020135bd0a15000f3900030302000a2b000d58020f0a07ff2b01bd010f0200060381010f020007073a0001e21e0710000f0a07100e2e000812000202000f7c00070b5f04011a020d2d020f3f00190c3d000f3c00080f0200ff0f02bd010f0200050f3f010f063a0001580209ff040f3e000d063c00068602010c000802000f450007024b02070200032b000712000f75040a011f000702000caa02034f000f0200ff2408c3010b02000a5e620f0200030733000321000512000310000f020008052b000657020998020202000f410006071302020200032a00020d000402000315000e02000421000502000c58020ffe120a0f0200ff0e02bc010f02000002e4010f3f010d063900042a000e12000f020005062a000f5802480f7d00050f58020b0f3738ff0a0f02001201d4010d0200023b00011700020b000f020005012300020200042300020e0001c50b0413000f0200040226000102000717440110000902000f3f000405680401ed060105000102000111000602000114000f02000106230003020007b0040257310f0200ff2909c101050200018e060f070710053100074702020d000102000f98010b012300020200082900021200090200081f00060200030e02010200019619041b000112000502000416000c0200021a000527000183cb0610000f871a120f0200ff0909c0010f0200010f3c010a093100032a000714000312000f0200050f2a00030716000202000f3f00050613020cb806081a00023f020f020001028e02040200032200030f000f5b09ff2b0242090f02000701b6040fce060a073c00014f0003020001170003012f0f020008012700020200072600021100050200071a000d020003050201aa04080a02011f3f06c84a0d3800080200084400050e00084d000f0200ff2305bf010f0200010f58020e12f922000202000880010a0e000f02000502380007430701020002120001cf62013b310115000f0200000702150d1e00022d0204e0120d1f00090200022c00019c02055a02020b000f0200ff2903c5010f02000111ff47600fb1040c0659020885010117020fe9040a010200079e1701100003020001a3460132040f7f000a0510020f070200031c000402000359000f0200020424000459020210000f2b00020f0200ff1a01bb010f02000205c01b0f4f01080639000825000316000813000f0200050e2b000912000ccc04070200020002061002090200011900060200091c000a0200042500041600031000040f000f0200ff2803c8010e02000172040faf040b0835000782010388040712000f0200060266000a0200015600021300070b000c02000301020f59020301180001e40d010700048c040f0200000220000649020c10000f0200ff2701bb0104020006d706010200011e000f5a01080125000302000727000358020f09070f02130502080006020007a504015c00061a000702000400020f3302040419000327000739000b02000321000547000c10000f0200ff2701bb01040200090f000153010f380b07092c000c44020151000141000f02001f074e000147000c5c000102000f00020c024b02042500020e000f020002042300051d000311000510000f0200ff2502ba010402000f890b050f0200030436000761040502000f1400010f020014084a020f5d00030919170f02000201800407a1120f25000205ff0d07b0040f3a070f0f0200ff1402b901040200085802010e000f0200090435000102000b29000f1400010f0200150858020262410d3a000564100d1a000202000519000240000f4200000402000155020f5802000199020f0200ff290101020502000f5802260d82010153000d16000f0200120858020f020004010b02053d020e02000f1602160349000730000e12000f0200ff230100020502000b36090f52010b0536000f290001011d000f40000b0f0200050f5100030a020001ce1b070e020f0200250e46020e12000f0200ff230100020502000f5802250f5b0b000f1e02110f0200040f5000020a02000f5302300102000e46020412000f6200350f0200e20551020302000f5802190333000202000d3e010117000d16000f0200140f3a00270f02001d0446020738000f1300000f0200ff2001ff010602000f58021909463a0c7a010353000c17000f0200140f3900260f02001d0f4402010f1400010f0200ff210302020202000a58020f4e01100237000f2b00000219000f4200100f0200020f5807000f02004204440209f5060315000f7100420f0200d61ef994200213020fe50810063e0e010c000902000141000f1f02260f5200010f0200410343020b45020316000f7100410f0200d902030201020001f700010a000f8504020e0200022900033900090200011a000912000f0200180f9102260f02001c0342020b44020316000f4c001c0f0200fe010202020200021c01020c000f6f04110126000f2900030f1800050f0200120f5802540341020c43020217000fa900120f0200e4f200010b0000000000010001000000010204000302008307526f6f6d2030310f00030200012900320001012b002301021700052f001532110001020012025e00035a000e2f001133260005020012032f0012032b000e2f0015342a0001020012042f0012042b000e2f001135260005020012052f0012052b000e2f0015362a0001020012062f0012062b000e2f001137260005020012072f0012072b000e2f0015382a0001020012082f0012082b000e2f001139260005020012092f0012092b000d2f002531302a00010200120b2f00120b2b000e2f0005a701500000000000",mockHugeRasterPathData:"0034940002000005750000114c4bd10c0baf040090aed10c0ba4d1020b9a0400e5d0f80b7cd0e40b5ed0da0b54d0d00400f1204ad0c60b2cd0bc0b0ed09e0ae6d0940ac8d0760aaad04e0aaad0300ab4d0120ad2cfea0adccfcc0af0cfae0af0cf860400f12efacf680af0cf4a0afacf400b04cf360b18cf400b40cf400b68cf4a0b7ccf360b9acf360bb8cf4a0bcccf540bcccf7c0bcccf900bc2cf9a0baecf9a0ba40400fb0ac20ba4cfd60b9acff40bc2d0080bc2d01c0bc2d0440ba4d04e0400b1440bc2d0300bead0300bf4040013260400b1080be0cffe0bd6cfd60be00400f32ccc0be0cfae0be0cf9a0be0cf900beacf7c0bd6cf680bd6cf4a0be0cf360bf4cf400c12cf4a0c3acf4a0c58cf540c80cf5e0c9ecf540cc6cf680ce4040011ee0400f5044a0d02cf400d16cf400d34cf400d3ecf400d5c0400fb0a220d5ccefa0d5ccedc0d52cebe0d52ce960d52ce6e0d52ce5a0400f158640d34ce5a0d2ace500d20ce460cf8ce460cdace460cbcce460ca8ce640c8ace6e0c62ce780c3ace780c30ce820c30cea00c26ceb40c1ccebe0bfecebe0be0ceb40bb8cebe0b9acebe0b72cebe0b4acebe0b2cceb40b04ceaa0af0ce8c0ae6ce820ae6ce640af00400f308500af0ce3c0af0ce140af0cdf60af0cdce0af0cdba0ae60400f112c8cdba0aaacdba0a8ccdba0a64cdba0a3ccdba0a1ecdba0a00cdba09d8cdba09ce0400f56ee209cece0009cece2809cece4609cece6e09cece8c09ceceaa09c4cec809bacef009b0cf0e09b0cf2209b0cf3609cecf5409d8cf7209cecf9009d8cfb809d8cfd609d8cffe09d8d02609d8d04409d8d06c09d8d09409d8d0b209d8d0da09d8d0f809d8d12009ced13e09ced16609ced18409d8d1ac09d8d1ca09d8d1d40400f112f6d1d40a14d1d40a3cd1d40a5ad1d40a82d1d40aa0d1d40abed1d40ae6d1d40b040400f124b60b04d1980b04d1700b04d1520b0ed1480b22d1480b40d1480b5ed1480b86d1480ba4d1520bccd1480bead1480c08d1480c120400932a0c12d10c0c12d0ee040031da0bfe0400d1f80bd6d1020bc2d1020ba4d0f82403139a080010903403f501d1200bb8d13e0be0d13e0bfed13e0c080400f7022a0c08d1160c08d1020c08d0ee0c08d0e4040014da0c00f0010bfed1020bfed1200bf4d1200bead13e940001040051e0d1480bd60400913e0bccd12a0bccd116040013c20400b1b8d1160baed1340baed148040011a4d800f102480b9ad1480b90d13e0b90d12a0b90d120a40001040021d0f804001186e403f106f80b7cd1020b72d1160b72d12a0b72d13e0b72d148040013682801002c01b254d1340b54d12a0b54d10c040089d0f80b4ad0e40b360400f102f80b36d10c0b36d1200b36d13e0b36d1480400132c7801007c01fd1018d1340b18d12a0b18d1160b18d1020b18d0ee0b18d0da0b18d0d00b18d0c604005f0ed0c60b04040003f1290afad0d00afad0e40af0d0e40afad0f80afad1160afad12a0afad13e0afad1520afad1660afad17a0afad18e0afad1a20afad1b60afad1c0040051f0d1c00ae6040053b60adcd1a20400f920840adcd1700adcd15c0adcd1480adcd1340adcd1200adcd10c0adcd0f80adcd0e40adcd0d00adcd0bc0ad2d0a80abe0400f322bc0abed0d00abed0e40abed0f80abed10c0abed12a0abed13e0abed1520abed1660abed17a0abed18e0abed1a20abed1b6040093c00ab4d1c00aa0d1b6040013ac0400f3228e0aa0d17a0aa0d1660aa0d15c0aa0d1480aa0d1340aa0d1200aa0d10c0aa0d0f80aa0d0e40aa0d0c60aa0d0bc0aa0d0a80400f17e940aa0d0760aa0d0620aa0d04e0aa0d03a0aa0d0260aa0d0120aa0d0080aa0cff40aa0cfe00aa0cfcc0aa0cfb80aa0cfa40aa0cf900aa0cf7c0aa0cf680aa0cf4a0aa0cf360aa0cf220aa0cf0e0aa0cefa0aa0cee60aa0ced20aa0cebe0aa0ceaa0aa0ce960aa0ce820aa0ce6e0aa0ce5a0aa0ce460aa0ce280aa0ce1e0aa0ce0a0aa0cdec0aa0cdd80aa0cdce04005396cdce0a8c0400f1b082cde20a82ce000a82ce140a82ce280a82ce3c0a82ce500a82ce640a82ce780a82ce8c0a82ceaa0a82cebe0a82ced20a82cee60a82cefa0a82cf0e0a82cf220a82cf360a82cf4a0a82cf5e0a82cf720a82cf860a82cf9a0a82cfae0a82cfc20a82cfd60a82cfea0a82cffe0a82d0120a82d0300a82d0440a82d0580a82d06c0a82d0800a82d0940a82d0a80a82d0c60a82d0da0a82d0ee0a82d1020a82d1160a82d12a0a82d13e0a82d1520a82d1660a82d1840a82d1980a82d1b60a82d1c004005378d1c00a6e04003364d1a20400f38a8e0a64d17a0a64d1660a64d1520a64d13e0a64d12a0a64d1160a64d1020a64d0ee0a64d0da0a64d0c60a64d0b20a64d09e0a64d08a0a64d0760a64d0620a64d04e0a64d03a0a64d0260a64d0120a64cffe0a64cfea0a64cfd60a64cfb80a64cfa40a64cf900a64cf7c0a64cf720a64cf5e0a64cf4a0a64cf360a64cf220a64cf0e0a64cefa0a64cee60a64ced20a64cebe0a64ceaa0a64ce8c040053780a64ce640400135a040013460400f30c320a64ce1e0a64ce140a64ce000a64cdec0a64cdd80a64cdce0a5a0400f3ffa950cdce0a46cdd80a46cdec0a46ce000a46ce140a46ce280a46ce3c0a46ce500a46ce640a46ce780a46ce8c0a46ceaa0a46cebe0a46ced20a46cee60a46cefa0a46cf0e0a46cf220a46cf360a46cf4a0a46cf5e0a46cf720a46cf860a46cf9a0a46cfb80a46cfcc0a46cfe00a46cff40a46d0080a46d01c0a46d0300a46d0440a46d0580a46d06c0a46d0800a46d0940a46d0b20a46d0c60a46d0da0a46d0ee0a46d1020a46d1160a46d12a0a46d13e0a46d1520a46d1660a46d17a0a46d18e0a46d1a20a46d1c00a46d1c00a3cd1c00a3cd1c00a32d1c00a28d1b60a28d1a20a28d18e0a28d17a0a28d1660a28d1660a28d1480a28d1340a28d1200a28d1160a28d1020a28d0ee0a28d0da0a28d0d00a28d0bc0a28d0a80a28d0940a28d0800a28d0620a28d04e0a28d03a0a28d0260a28d0120a28cffe0a28cfea0a28cfd60a28cfc20a28cfae0a28cfa40a28cfa40a28cfa40a28cf900a28cf900a28cf900a28cf860a28cf720a28cf5e0a28cf4a0a28cf360a28cf220a28cf180a28cf040a28cef00a28cedc0a28cec80a28ceb40a28ce960a28ce820a28ce6e0a28ce5a0a28ce460a28ce320a28ce1e0a28ce000a28cdf60a28cdd8040011ce0400531ecdce0a140400f1b00acde20a0ace000a0ace140a0ace280a0ace3c0a0ace500a0ace640a0ace780a0ace8c0a0acea00a0aceb40a0acec80a0acee60a0acefa0a0acf0e0a0acf220a0acf360a0acf4a0a0acf5e0a0acf720a0acf860a0acf9a0a0acfae0a0acfc20a0acfe00a0acff40a0ad0080a0ad01c0a0ad0300a0ad0440a0ad0580a0ad06c0a0ad0800a0ad09e0a0ad0b20a0ad0c60a0ad0da0a0ad0ee0a0ad1020a0ad1160a0ad12a0a0ad13e0a0ad1520a0ad1700a0ad1840a0ad1980a0ad1b60a0ad1c004005300d1c009f60400f7c4ecd1ac09ecd18e09ecd17a09ecd16609ecd15209ecd13e09ecd13409ecd12009ecd11609ecd10209ecd0ee09ecd0da09ecd0c609ecd0b209ecd09e09ecd08a09ecd07609ecd06209ecd04e09ecd03a09ecd02609ecd01209eccff409eccfe009eccfd609eccfc209eccfae09eccf9a09eccf7c09eccf6809eccf5409eccf4009eccf2c09eccf1809eccf0409eccef009eccedc09eccec809ecceb409eccea009ecce9609ecce8209ecce6e09ecce5a09ecce4609ecce2809ecce1409ecce0009eccdec09eccdec09eccdd809eccdd809eccdd80c00d3f609ecce0a09ecce1e09ecce323c00004400004c00005400f11e9609e2ceaa09ceceb409cecec809cecedc09cecef009cecf0e09cecf1809cecf2209cecf4a09f6cf680a1ecf906c037164cfe00a8cd008b40b11be04001908040015c80400131204003b080ad20400001400040400053c00f167cffe0abecff40abecfe00abecfcc0abecfb80abecfa40abecf900abecf7c0abecf680abecf540abecf360abecf220abecf0e0abecefa0abecee60abeced20abecebe0abeceaa0abece960abece820abece6e0abece5a0abece460abece320abece1e0abece0a0abece000abecde20abecdd80abecdce040051c8cdce0ad2040035d80adc040035e20ae604001fd8040008022400023000fb56ec0adccdf60adcce000adcce140adcce280adcce3c0adcce500adcce640adcce780adcce8c0adccea00adcceb40adcced20adccee60adccefa0adccf0e0adccf220adccf360adccf4a0adccf5e0adccf720adccf860adccf9a0adccfae0adccfc20adccfd6040013cc0400002000002800003000003800f302680adccf540ae6cf400afacf360afacf220400dc040afacef00afacedc0afacec80400650b04cec80b180400f102dc0b18cef00b18cf040b18cf220b18cf2c04005322cf2c0b2c0400ff0436cf180b36cf040b36cef00b36cee60b36cec804003413d20400f112c80b40cec80b54ced20b54cee60b5ecee60b54cefa0b54cf0e0b54cf220b54cf2c0400f3085ecf2c0b68cf2c0b72cf220b72cf0e0b72cefa0b72cee6040011dc0400537ccedc0b860400f10090cef00b90cf0e0b90cf220b90cf2c0400539acf2c0ba40400ff0aaecf180baecf0e0baecefa0baecef00baecedc0bb8cec80bc2040012ff06d20bc2cee60bcccefa0bcccf0e0bcccf2c0bcccf40040000f106220beacf220bf4cf0e0beacefa0beacee60beacedc040051f4cedc0bfe0400f102e60c08cefa0c08cf0e0c08cf220c08cf2c04005312cf2c0c1c0400f30426cf180c26cf0e0c26cefa0c26cee60c26ced20400dfbe0c30ceaa0c44cea00c44ce8c040004001c00f30ab40c44ced20c44cee60c44cefa0c44cf0e0c44cf220c44cf3604001d4004001f4e0400040828000024001f5804000815620400f1122c0c62cf0e0c62cefa0c62cee60c62ced20c62cebe0c62ceaa0c62ce8c0c62ce820400536cce820c760400f71480ce960c80ceaa0c80cebe0c80ced20c80cef00c80cf040c80cf180c80cf2c0c80cf400400714a0c8acf400c9e040053360c9ecf220400f3120e0c9ecefa0c9ecee60c9eced20c9ecebe0c9eceaa0c9ecea00c9ece820c9ece6e04001d640400118a640f000800735a0c80ce5a0c8108003780ce64040031780c950400b56e0ca9ce6e0cb3ce6e0cb2040031640cbc0400136e0400f302820cbcce960cbcceaa0cbccebe0cbccec80800000c00080400001800b1d20cb2cedc0ca8cedc0c94fc0000040111b41001df8acea00c94ceaa0ca8ceb40cbc04000a71960ca8ce8c0ca878001f7804000c04a4000008009f5a0cb2ce500cb2ce4604001239a8ce500400023c000f08000300b810043c0111810400716e0c8bce780c9f4401004801d1780c81cea00c63ceb40c4fcebe04001559040033aa0c4f0400f30245ced20c27cef00c1dcefa0c1dcef00c130400b109cee60c09cedc0c09ced20400130804001f120400163fc80c080400220268000e08000f4c00051fbe040034017400210bfe040011dcbc003126cedce8030068039180cee60ca8cee60cbc0400f106f00cbccefa0cbccf0e0cbccf220cbccf400cbccf4a040013c60400b7d0cf4a0cdacf360cdacf2c0400d3180cdacf040cdacee60cdaced20400f508be0cdaceaa0cdace960cdace8c0cdace780ceece6e0cf80400f81a780cf8ce8c0cf8cea00cf8ceb40cf8ced20cf8cee60cf8cefa0cf8cf0e0cf8cf220cf8cf360cf8cf400400013413003813000400510ccf220d160400120e0400f315cefa0d16cee60d16cec80d16cebe0d16ceaa0d16ce960d16ce820d16ce6e0d16ce640d200400f11c2ace640d34ce780d34ce8c0d34cea00d34ceb40d34cec80d34cedc0d34cef00d34cf040d34cf220d34cf2c0400533ecf2c0d480400f90252cf180d52cf0e0d52cef00d52cee60d53040035e70d520400f17cf10d48cefb0d20cf050cf8cf050cd0cf0f0cb2cf0f0c8acf0f0c62cf190c44cf190c1ccf0f0bf4cf0f0bd6cf0f0baecf190b90cf190b68cf190b40cf190b22cf410b04cf690ae6cf870ac8cfa50abecfc30ab4cfeb0ab4d0090aaad0310aa0d04f0a96d06d0a8cd08b0aaad0b30ad2d0d10af0d0ef0b18d0f90b36d10d0b54d1210b7cd12b0b9ad12b0ba404001b210400b0030baed0e50bb8d0c60bc3",mockMapData1:"7b226964223a312c22737461747573223a312c227265736f6c7574696f6e223a302c2273697a65223a5b3131332c38395d2c226f726967696e223a5b38312c33355d2c2263686172676572223a7b22636f6f7264696e617465223a5b38332c33385d2c22616e676c65223a307d2c22636172706574223a5b7b22636f6f7264696e61746573223a5b5d2c227479706573223a307d5d2c226f62737461636c6573223a5b7b22636f6f7264696e61746573223a5b36342c362c36352c362c36362c362c36372c362c36382c362c36392c362c37302c362c37312c362c37322c362c37332c362c37342c362c37352c362c37362c362c37372c362c37382c362c37392c362c38302c362c38312c362c38322c362c38332c362c38342c362c38352c362c38362c362c36302c372c36312c372c36322c372c36332c372c36342c372c38362c372c38372c372c36302c382c38372c382c36302c392c38372c392c36302c31302c38372c31302c33322c31312c33332c31312c33342c31312c33352c31312c33362c31312c36302c31312c38372c31312c392c31322c33312c31322c33322c31322c36302c31322c38372c31322c382c31332c392c31332c31302c31332c31312c31332c31392c31332c32302c31332c33312c31332c36302c31332c38372c31332c382c31342c32302c31342c32312c31342c33312c31342c33392c31342c36302c31342c36312c31342c36322c31342c36332c31342c38372c31342c382c31352c32312c31352c32322c31352c32332c31352c32342c31352c32352c31352c32362c31352c32372c31352c32382c31352c32392c31352c33302c31352c33312c31352c36302c31352c38362c31352c38372c31352c382c31362c32352c31362c32362c31362c34302c31362c34312c31362c34322c31362c34332c31362c34342c31362c36302c31362c38372c31362c382c31372c32352c31372c34342c31372c35342c31372c35352c31372c35362c31372c35372c31372c35382c31372c35392c31372c36302c31372c38372c31372c382c31382c34342c31382c35342c31382c38372c31382c382c31392c34342c31392c35342c31392c38372c31392c382c32302c34342c32302c35342c32302c38312c32302c38372c32302c382c32312c34342c32312c35332c32312c35342c32312c38302c32312c38312c32312c38322c32312c38372c32312c382c32322c34342c32322c34352c32322c34362c32322c34372c32322c34382c32322c34392c32322c35302c32322c35312c32322c35322c32322c35332c32322c38302c32322c38342c32322c38352c32322c38362c32322c38372c32322c382c32332c34322c32332c34332c32332c37342c32332c37352c32332c37362c32332c37372c32332c37382c32332c37392c32332c38302c32332c38342c32332c38352c32332c38362c32332c38372c32332c382c32342c38302c32342c38372c32342c382c32352c38302c32352c38372c32352c38382c32352c382c32362c382c32372c38342c32372c382c32382c38322c32382c38332c32382c38342c32382c382c32392c38322c32392c38342c32392c38352c32392c38362c32392c38372c32392c38382c32392c382c33302c38322c33302c382c33312c38322c33312c38332c33312c382c33322c38332c33322c38342c33322c38352c33322c38362c33322c382c33332c38362c33332c382c33342c38362c33342c382c33352c38362c33352c382c33362c38362c33362c382c33372c38362c33372c382c33382c38362c33382c382c33392c38302c33392c38312c33392c38322c33392c38332c33392c38342c33392c38352c33392c38362c33392c382c34302c38332c34302c38342c34302c382c34312c38342c34312c382c34322c38342c34322c38362c34322c382c34332c38362c34332c382c34342c38362c34342c382c34352c38362c34352c382c34362c37382c34362c38332c34362c38342c34362c38352c34362c38362c34362c382c34372c37382c34372c37392c34372c38302c34372c38312c34372c38322c34372c38332c34372c382c34382c37372c34382c37382c34382c382c34392c37372c34392c382c35302c37372c35302c382c35312c37372c35312c382c35322c37372c35322c382c35332c37372c35332c382c35342c31362c35342c36362c35342c36372c35342c36382c35342c36392c35342c37302c35342c37312c35342c37322c35342c37332c35342c37342c35342c37352c35342c37362c35342c37372c35342c382c35352c31362c35352c36362c35352c382c35362c392c35362c31362c35362c36362c35362c392c35372c31352c35372c31362c35372c36362c35372c392c35382c31302c35382c31352c35382c31362c35382c36362c35382c31302c35392c31312c35392c31322c35392c31332c35392c31342c35392c31352c35392c31362c35392c31372c35392c31382c35392c31392c35392c36362c35392c31392c36302c32302c36302c36362c36302c32302c36312c36362c36312c32302c36322c32312c36322c32322c36322c32332c36322c32392c36322c33332c36322c33342c36322c33352c36322c33362c36322c33372c36322c34322c36322c34332c36322c36362c36322c31362c36332c31372c36332c31382c36332c31392c36332c32302c36332c32332c36332c32342c36332c32352c36332c32362c36332c32372c36332c32382c36332c32392c36332c33302c36332c33312c36332c33322c36332c33332c36332c33342c36332c33352c36332c33362c36332c33372c36332c33382c36332c33392c36332c34302c36332c34312c36332c34322c36332c34332c36332c34342c36332c34352c36332c34362c36332c34372c36332c34382c36332c34392c36332c35302c36332c35312c36332c35362c36332c36362c36332c31362c36342c32302c36342c32312c36342c32322c36342c32332c36342c32342c36342c32352c36342c32362c36342c33322c36342c33332c36342c33342c36342c33392c36342c35312c36342c35362c36342c35372c36342c35382c36342c35392c36342c36302c36342c36312c36342c36322c36342c36332c36342c36342c36342c36352c36342c36362c36342c34392c36352c35302c36352c35312c36352c35362c36352c35372c36352c35382c36352c35392c36352c36302c36352c34392c36362c35362c36362c34382c36372c34392c36372c33332c37302c33322c37322c33322c38302c33322c38312c33322c38322c33322c38332c33322c38342c33322c38352c33322c38362c33322c38372c33322c38382c33332c38382c33342c38382c33342c38392c33342c39302c33352c39302c33352c39312c33352c39322c36352c3131322c36362c3131322c36372c3131322c36382c3131322c36392c3131325d2c227479706573223a307d5d2c2266726565223a5b7b22636f6f7264696e61746573223a5b5d2c227479706573223a307d5d2c22726f6f6d73223a7b2230223a7b22636f6f7264696e61746573223a5b36312c382c36312c392c36312c31302c36312c31312c36312c31322c36312c31332c36312c31332c36322c31342c36312c31352c36312c31352c36302c31352c35382c31362c35372c31362c35362c31362c35362c31372c35352c31372c35352c31382c35332c31392c35332c32302c35332c32312c35322c32322c35312c32332c35312c32332c35302c32332c34382c32332c34372c32332c34362c32332c34362c32332c34352c32332c34332c32332c34322c32322c34322c32312c34312c32302c34312c31392c34302c31382c34302c31372c34302c31362c33382c31362c33372c31372c33362c31382c33352c31382c33352c31392c33332c32302c33322c32312c33312c32322c33302c32332c33302c32332c32382c32342c32372c32352c32362c32362c32352c32372c32352c32382c32332c32382c32322c32392c32312c33302c32302c33312c32302c33322c31382c33332c31372c33332c31362c33342c31352c33352c31352c33362c31332c33372c31322c33382c31312c33382c31302c33392c392c34302c392c34312c392c34322c392c34332c392c34342c392c34352c392c34362c392c34372c382c34382c382c34392c382c35302c382c35312c382c35322c382c35332c382c35342c382c35352c382c35362c382c35372c392c35372c31302c35372c31312c35372c31322c35372c31332c35382c31352c35382c31352c35382c31362c35382c31372c35382c31382c35392c31382c36302c32302c36312c32302c36312c32312c36312c32322c36312c32332c36312c32352c36312c32352c36312c32362c36312c32372c36312c32382c36312c33302c36312c33302c36312c33312c36312c33322c36312c33332c36312c33352c36312c33352c36312c33362c36312c33372c36312c33382c36312c34302c36312c34302c36312c34312c36312c34322c36312c34332c36312c34352c36322c34362c36322c34362c36322c34372c36332c34382c36332c35302c36332c35312c36342c35312c36352c35302c36362c34382c36372c34372c36382c34362c36392c34362c37302c34362c37312c34352c37322c34332c37332c34322c37342c34312c37352c34302c37362c34302c37372c33382c37382c33372c37392c33362c38302c33362c38312c33352c38322c33352c38332c33332c38342c33322c38352c33312c38362c33312c38372c33322c38382c33332c38372c33352c38372c33352c38362c33362c38352c33372c38362c33372c38372c33362c38382c33362c38392c33352c39302c33352c39312c33352c39322c33352c39332c33332c39342c33332c39352c33322c39362c33322c39372c33322c39382c33322c39392c33322c3130302c33322c3130312c33322c3130322c33332c3130322c33352c3130322c33352c3130322c33362c3130322c33362c3130312c33372c3130302c33372c39392c33382c39382c33382c39372c34302c39362c34302c39352c34302c39342c34302c39332c34312c39322c34312c39312c34322c39302c34322c38392c34332c38382c34332c38372c34352c38362c34352c38352c34362c38342c34362c38332c34362c38322c34362c38312c34372c38302c34372c37392c34382c37382c34382c37372c35302c37362c35302c37352c35312c37342c35312c37352c35312c37362c35312c37372c35312c37382c35312c37392c35312c38302c35322c38312c35322c38322c35322c38332c35322c38342c35322c38352c35322c38362c35322c38372c35322c38382c35322c38392c35322c39302c35322c39312c35322c39322c35322c39332c35322c39342c35322c39352c35322c39362c35322c39372c35322c39382c35332c39392c35332c3130302c35332c3130312c35332c3130322c35332c3130332c35332c3130342c35332c3130352c35332c3130362c35332c3130372c35352c3130372c35362c3130372c35362c3130372c35362c3130362c35362c3130352c35362c3130342c35362c3130332c35362c3130322c35362c3130312c35372c3130302c35382c39392c36302c3130302c36302c3130312c36302c3130322c36302c3130332c36312c3130342c36312c3130352c36312c3130362c36312c3130372c36312c3130382c36312c3130392c36322c3130392c36332c3131302c36352c3131302c36362c3131312c36372c3131312c36372c3131322c36382c3131322c36382c3131312c36372c3131302c36372c3130392c36372c3130382c36372c3130372c36372c3130362c36372c3130352c36372c3130342c36362c3130332c36362c3130322c36362c3130312c36362c3130302c36352c39392c36352c39382c36352c39372c36332c39362c36332c39352c36332c39342c36332c39332c36322c39322c36322c39312c36322c39302c36312c38392c36312c38382c36312c38372c36312c38362c36312c38352c36312c38342c36312c38332c36302c38322c36302c38312c36302c38302c36302c37392c35382c37382c35382c37372c35382c37362c35372c37352c35372c37342c35372c37332c35372c37322c35362c37312c35362c37302c35362c36392c35362c36382c35362c36372c35362c36362c35362c36352c35352c36342c35362c36332c35362c36332c35372c36332c35382c36332c36302c36332c36312c36332c36312c36332c36322c36332c36332c36332c36352c36332c36352c36322c36352c36312c36352c36302c36352c35392c36352c35382c36362c35372c36362c35362c36362c35352c36362c35342c36372c35332c36372c35332c36382c35332c37302c35332c37312c35332c37322c35332c37322c35332c37332c35332c37352c35322c37362c35322c37372c35322c37372c35322c37382c35322c38302c35322c38312c35322c38322c35322c38322c35312c38322c35302c38322c34392c38322c34382c38322c34372c38322c34362c38322c34352c38322c34342c38322c34332c38322c34322c38322c34312c38322c34302c38332c34302c38332c33392c38332c33382c38332c33372c38352c33362c38352c33352c38352c33342c38352c33332c38332c33322c38322c33312c38322c33302c38312c32392c38302c32382c37382c32372c38302c32362c38312c32352c38322c32342c38322c32332c38332c32342c38352c32352c38352c32362c38362c32372c38372c32382c38372c32372c38372c32362c38372c32352c38372c32342c38372c32332c38372c32322c38372c32312c38372c32302c38372c31392c38372c31382c38362c31372c38362c31362c38362c31352c38362c31342c38362c31332c38362c31322c38362c31312c38362c31302c38362c392c38362c382c38352c382c38332c382c38322c382c38322c382c38312c382c38302c382c37382c382c37372c382c37372c382c37362c382c37352c382c37332c382c37322c382c37322c382c37312c382c37302c382c36382c382c36372c382c36372c382c36362c382c36352c382c36332c382c36322c382c36312c385d7d2c2231223a7b22636f6f7264696e61746573223a5b31302c31322c31302c31332c31302c31342c31302c31352c31302c31362c31302c31372c31302c31382c31302c31392c31302c32302c31302c32312c31302c32322c31302c32332c31302c32342c31302c32352c392c32362c392c32372c392c32382c392c32392c392c33302c392c33312c392c33322c392c33332c392c33342c392c33352c392c33362c392c33372c392c33382c392c33392c31302c33382c31312c33372c31322c33372c31332c33362c31352c33352c31352c33342c31362c33332c31372c33322c31382c33322c32302c33312c32302c33302c32312c32392c32322c32382c32332c32372c32352c32372c32352c32362c32362c32352c32372c32342c32382c32332c33302c32322c33302c32322c33312c32312c33322c32302c33332c31392c33352c31382c33352c31372c33362c31372c33372c31362c33382c31352c33382c31342c33372c31332c33372c31322c33362c31322c33352c31332c33352c31332c33332c31332c33322c31332c33312c31342c33302c31342c33302c31342c32382c31342c32372c31352c32362c31352c32352c31352c32352c31352c32332c31362c32322c31362c32312c31362c32302c31362c32302c31352c31382c31352c31372c31352c31362c31342c31352c31342c31352c31332c31332c31332c31322c31332c31312c31325d7d2c22323536223a7b22636f6f7264696e61746573223a5b31302c3130322c31302c3130312c31302c3130302c31302c39392c31312c39382c31312c39372c31312c39362c31322c39352c31322c39342c31312c39332c31302c39322c392c39322c382c39312c372c39302c362c39302c362c38392c362c38382c362c38372c372c38362c382c38352c382c38342c382c38332c382c38322c382c38312c372c38302c372c37392c372c37382c372c37372c372c37362c372c37352c372c37342c372c37332c372c37322c372c37312c382c37312c392c37302c31302c36392c31312c36382c31322c36372c31332c36362c31342c36362c31352c36352c31362c36352c31372c36342c31382c36342c31392c36342c32302c36352c32312c36352c32322c36352c32332c36352c32342c36352c32352c36352c32362c36352c32372c36342c32382c36342c32392c36342c33302c36342c33312c36342c33322c36352c33332c36352c33342c36352c33352c36342c33362c36342c33372c36342c33382c36342c33382c36352c33382c36362c33372c36372c33372c36382c33362c36392c33352c36392c33342c36392c33332c36392c33322c37302c33322c37312c33312c37322c33312c37332c33312c37342c33312c37352c33302c37362c33302c37372c32392c37382c32382c37392c32382c38302c32372c38312c32362c38322c32352c38332c32352c38342c32342c38352c32332c38362c32322c38372c32322c38382c32312c38392c32302c39302c32302c39312c31392c39322c31382c39332c31372c39342c31372c39352c31362c39362c31352c39372c31352c39382c31342c39392c31332c3130302c31322c3130312c31322c3130322c31312c3130325d7d7d2c2276657273696f6e223a22312e302e30227d",mockMapData2:"7b226964223a332c22737461747573223a312c227265736f6c7574696f6e223a352c2273697a65223a5b3234332c3331305d2c226f726967696e223a5b3239322c35385d2c2263686172676572223a7b22636f6f7264696e617465223a5b3239322c3130335d2c22616e676c65223a307d2c22636172706574223a5b7b22636f6f7264696e61746573223a5b5d2c227479706573223a307d5d2c226f62737461636c6573223a5b7b22636f6f7264696e61746573223a5b35392c322c36302c322c36312c322c36322c322c36332c322c36342c322c36352c322c36362c322c36372c322c36382c322c36392c322c37302c322c37312c322c37322c322c37332c322c37342c322c37352c322c37362c322c37372c322c37382c322c37392c322c38302c322c38312c322c38322c322c38332c322c38342c322c38352c322c38362c322c38372c322c38382c322c38392c322c39302c322c39312c322c39322c322c39332c322c39342c322c39352c322c39362c322c39372c322c39382c322c39392c322c3130302c322c3130312c322c3130322c322c3130332c322c3130342c322c3130352c322c3130362c322c3130372c322c3130382c322c3130392c322c3131302c322c3131312c322c3131322c322c3131332c322c3131342c322c3131352c322c3131362c322c3131372c322c3131382c322c3131392c322c3132302c322c3132312c322c3132322c322c3132332c322c3132342c322c3132352c322c3132372c322c3132382c322c3132392c322c3133302c322c3133312c322c3133322c322c3133332c322c3133342c322c3133352c322c35392c332c3131362c332c3131372c332c3132352c332c3132372c332c3133352c332c3134312c332c3134322c332c3134332c332c3134342c332c3134352c332c3134362c332c3134372c332c3134382c332c3134392c332c3135302c332c3135312c332c3135322c332c3135332c332c3135342c332c3135352c332c3135362c332c3135372c332c3135382c332c35392c342c3131362c342c3131372c342c3132352c342c3132362c342c3132372c342c3133352c342c3134312c342c3135382c342c3138342c342c3138352c342c3138362c342c3138372c342c3138382c342c3138392c342c3139302c342c3139312c342c3139322c342c3139332c342c3139342c342c3139352c342c3139362c342c3139372c342c3139382c342c3139392c342c3230302c342c3230312c342c3230322c342c3230332c342c3230342c342c3230352c342c3230362c342c3230372c342c3230382c342c3230392c342c3231302c342c3231312c342c3231322c342c3231332c342c3231342c342c3231352c342c3231362c342c3231372c342c3231382c342c3231392c342c3232302c342c3232312c342c3232322c342c3232332c342c3232342c342c3232352c342c3232362c342c3232372c342c3232382c342c3232392c342c3233302c342c3233312c342c3233322c342c3233332c342c3233342c342c3233352c342c3233362c342c3233372c342c3233382c342c3233392c342c3234302c342c3234312c342c3234322c342c3234332c342c3234342c342c3234352c342c3234362c342c3234372c342c3234382c342c3234392c342c3235302c342c3235312c342c3235322c342c3235332c342c3235342c342c3235352c342c3235362c342c3235372c342c3235382c342c3235392c342c3236302c342c3236312c342c35392c352c3133352c352c3134312c352c3135382c352c3138342c352c3236312c352c35392c362c3133352c362c3134312c362c3135382c362c3135392c362c3136302c362c3136312c362c3136322c362c3136332c362c3136342c362c3136352c362c3136362c362c3136372c362c3136382c362c3136392c362c3137302c362c3137312c362c3137322c362c3137332c362c3137342c362c3137352c362c3137362c362c3137372c362c3137382c362c3137392c362c3138302c362c3138312c362c3138322c362c3138342c362c3236312c362c3236322c362c3236332c362c3236342c362c3236352c362c3236362c362c3236372c362c3236382c362c3236392c362c3237302c362c3237312c362c3237322c362c3237332c362c3237342c362c3237352c362c3237362c362c3237372c362c3237382c362c3237392c362c3238302c362c3238312c362c3238322c362c3238332c362c3238342c362c3238352c362c3238362c362c3238372c362c3238382c362c3238392c362c3239302c362c3239312c362c3239322c362c3239332c362c3239342c362c3239352c362c3239362c362c35392c372c3133352c372c3134312c372c3138322c372c3138342c372c3239362c372c35392c382c3133352c382c3134312c382c3138312c382c3138342c382c3239362c382c35392c392c3133352c392c3134312c392c3138312c392c3138342c392c3239362c392c35392c31302c3133352c31302c3134312c31302c3138312c31302c3138342c31302c3239362c31302c3239372c31302c3239382c31302c3239392c31302c3330302c31302c3330312c31302c3330322c31302c3330332c31302c35392c31312c3133352c31312c3134312c31312c3138312c31312c3138342c31312c3330332c31312c35392c31322c3131362c31322c3131372c31322c3132352c31322c3132362c31322c3132372c31322c3133352c31322c3134312c31322c3138312c31322c3138342c31322c3330332c31322c35392c31332c3131362c31332c3131372c31332c3132352c31332c3132362c31332c3132372c31332c3133352c31332c3134312c31332c3138312c31332c3138342c31332c3231352c31332c3330332c31332c35392c31342c3133352c31342c3134312c31342c3138312c31342c3138342c31342c3231352c31342c3330332c31342c35392c31352c3133352c31352c3134312c31352c3138312c31352c3138342c31352c3231352c31352c3330332c31352c35392c31362c36302c31362c36312c31362c36322c31362c36332c31362c36342c31362c36352c31362c36362c31362c36372c31362c36382c31362c36392c31362c37302c31362c37312c31362c37322c31362c37332c31362c37342c31362c37352c31362c37362c31362c37372c31362c37382c31362c37392c31362c38302c31362c38312c31362c38322c31362c38332c31362c38342c31362c38352c31362c38362c31362c38372c31362c38382c31362c38392c31362c39302c31362c39312c31362c39322c31362c39332c31362c39342c31362c39352c31362c39362c31362c39372c31362c39382c31362c39392c31362c3130302c31362c3130312c31362c3130322c31362c3130332c31362c3133352c31362c3134312c31362c3138312c31362c3138342c31362c3231352c31362c3330332c31362c3130332c31372c3133352c31372c3134312c31372c3138312c31372c3138342c31372c3231332c31372c3231342c31372c3231352c31372c3231362c31372c3231372c31372c3231382c31372c3330332c31372c3130332c31382c3133352c31382c3134312c31382c3138312c31382c3138342c31382c3231332c31382c3231382c31382c3235342c31382c3330332c31382c3130332c31392c3133352c31392c3134312c31392c3138312c31392c3138342c31392c3231332c31392c3231342c31392c3231352c31392c3231362c31392c3231372c31392c3231382c31392c3235342c31392c3236322c31392c3330332c31392c3130332c32302c3133352c32302c3134312c32302c3138312c32302c3138342c32302c3235342c32302c3236322c32302c3236392c32302c3330332c32302c3130332c32312c3133352c32312c3133392c32312c3134302c32312c3134312c32312c3138312c32312c3138342c32312c3231302c32312c3231312c32312c3231392c32312c3232362c32312c3233342c32312c3233352c32312c3234352c32312c3236392c32312c3237302c32312c3237372c32312c3237382c32312c3330332c32312c3130332c32322c3133352c32322c3133392c32322c3138312c32322c3138342c32322c3231302c32322c3231312c32322c3231392c32322c3232362c32322c3233342c32322c3233352c32322c3234352c32322c3235342c32322c3235352c32322c3235362c32322c3235372c32322c3235382c32322c3235392c32322c3236302c32322c3236312c32322c3236322c32322c3236332c32322c3236342c32322c3236352c32322c3236362c32322c3236372c32322c3236382c32322c3236392c32322c3237302c32322c3237312c32322c3237322c32322c3237372c32322c3237382c32322c3238362c32322c3330332c32322c3130332c32332c3133352c32332c3133392c32332c3138312c32332c3138342c32332c3230332c32332c3230342c32332c3230352c32332c3230362c32332c3230372c32332c3230382c32332c3230392c32332c3231302c32332c3231312c32332c3231322c32332c3231332c32332c3231342c32332c3231352c32332c3231362c32332c3231372c32332c3231382c32332c3231392c32332c3232302c32332c3232312c32332c3232322c32332c3232332c32332c3232342c32332c3232352c32332c3232362c32332c3232372c32332c3232382c32332c3232392c32332c3233302c32332c3233312c32332c3233322c32332c3233332c32332c3233342c32332c3233352c32332c3233362c32332c3233372c32332c3233382c32332c3233392c32332c3234302c32332c3234312c32332c3234322c32332c3234332c32332c3234342c32332c3234352c32332c3234362c32332c3234372c32332c3234382c32332c3234392c32332c3235302c32332c3235312c32332c3235322c32332c3235332c32332c3235342c32332c3237322c32332c3237332c32332c3237342c32332c3237352c32332c3237362c32332c3237372c32332c3237382c32332c3237392c32332c3238302c32332c3238312c32332c3238362c32332c3239332c32332c3239342c32332c3330332c32332c3130332c32342c3133352c32342c3133392c32342c3138312c32342c3138342c32342c3230322c32342c3230332c32342c3231312c32342c3231322c32342c3231332c32342c3231342c32342c3231352c32342c3231362c32342c3231372c32342c3231382c32342c3231392c32342c3232302c32342c3232312c32342c3232322c32342c3232332c32342c3232342c32342c3232352c32342c3232362c32342c3232372c32342c3232382c32342c3232392c32342c3233302c32342c3233312c32342c3233322c32342c3233332c32342c3233342c32342c3233352c32342c3233362c32342c3233372c32342c3236312c32342c3236322c32342c3236332c32342c3236342c32342c3236352c32342c3236362c32342c3236372c32342c3236382c32342c3236392c32342c3237302c32342c3237312c32342c3237322c32342c3237332c32342c3237342c32342c3237352c32342c3237362c32342c3237372c32342c3237382c32342c3237392c32342c3238302c32342c3238312c32342c3238322c32342c3238332c32342c3238342c32342c3238352c32342c3238362c32342c3238372c32342c3238382c32342c3238392c32342c3239302c32342c3239312c32342c3239322c32342c3239332c32342c3239342c32342c3239352c32342c3239362c32342c3239372c32342c3239382c32342c3239392c32342c3330302c32342c3330312c32342c3330332c32342c3130332c32352c3133352c32352c3133392c32352c3138312c32352c3138342c32352c3230322c32352c3231302c32352c3231312c32352c3233372c32352c3233382c32352c3233392c32352c3234302c32352c3236312c32352c3236372c32352c3236382c32352c3239342c32352c3239352c32352c3239362c32352c3239372c32352c3239382c32352c3239392c32352c3330302c32352c3330312c32352c3330332c32352c3130332c32362c3133352c32362c3133392c32362c3138312c32362c3138342c32362c3230322c32362c3230392c32362c3231302c32362c3234302c32362c3236312c32362c3236372c32362c3236382c32362c3330332c32362c3130332c32372c3133352c32372c3133392c32372c3138312c32372c3138342c32372c3230322c32372c3230382c32372c3230392c32372c3234302c32372c3236312c32372c3236372c32372c3236382c32372c3330332c32372c3130332c32382c3133352c32382c3133392c32382c3138312c32382c3138342c32382c3230322c32382c3230372c32382c3230382c32382c3234302c32382c3236312c32382c3330332c32382c3130332c32392c3133352c32392c3133392c32392c3134302c32392c3138312c32392c3138342c32392c3230322c32392c3230362c32392c3230372c32392c3234302c32392c3236312c32392c3330332c32392c3130332c33302c3133352c33302c3134302c33302c3138312c33302c3138342c33302c3230322c33302c3230352c33302c3230362c33302c3234302c33302c3236312c33302c3330332c33302c3130332c33312c3133352c33312c3134302c33312c3138312c33312c3138342c33312c3230302c33312c3230312c33312c3230322c33312c3230342c33312c3230352c33312c3234302c33312c3236312c33312c3330332c33312c3130332c33322c3133352c33322c3133392c33322c3134302c33322c3138312c33322c3138342c33322c3230312c33322c3230332c33322c3230342c33322c3234302c33322c3236312c33322c3330332c33322c3130332c33332c3133352c33332c3133392c33332c3138312c33332c3138342c33332c3230312c33332c3230322c33332c3230332c33332c3234302c33332c3236312c33332c3330332c33332c3130332c33342c3133352c33342c3133392c33342c3138312c33342c3138342c33342c3230312c33342c3230322c33342c3234302c33342c3236312c33342c3330332c33342c3130332c33352c3133352c33352c3133392c33352c3138312c33352c3138342c33352c3230312c33352c3230322c33352c3234302c33352c3234312c33352c3234322c33352c3234332c33352c3234342c33352c3234352c33352c3234362c33352c3234372c33352c3234382c33352c3234392c33352c3235302c33352c3235312c33352c3235322c33352c3235332c33352c3235342c33352c3235352c33352c3235362c33352c3235372c33352c3235382c33352c3235392c33352c3236302c33352c3236312c33352c3236362c33352c3330322c33352c3330332c33352c3130332c33362c3133352c33362c3133392c33362c3138312c33362c3138342c33362c3230312c33362c3230322c33362c3330322c33362c3130332c33372c3133352c33372c3133392c33372c3138312c33372c3138342c33372c3230312c33372c3230322c33372c3236352c33372c3330322c33372c3130332c33382c3133352c33382c3133392c33382c3138312c33382c3138342c33382c3230312c33382c3230322c33382c3236352c33382c3330322c33382c3130332c33392c3133352c33392c3133392c33392c3138312c33392c3138342c33392c3230302c33392c3230312c33392c3230322c33392c3330322c33392c3130332c34302c3133352c34302c3133392c34302c3138312c34302c3138342c34302c3230312c34302c3230322c34302c3330322c34302c3130332c34312c3133352c34312c3133392c34312c3138312c34312c3138342c34312c3230312c34312c3230322c34312c3236342c34312c3330322c34312c3130332c34322c3133352c34322c3133392c34322c3138312c34322c3138342c34322c3230312c34322c3230322c34322c3236342c34322c3330322c34322c3130332c34332c3133352c34332c3133392c34332c3138312c34332c3138342c34332c3230312c34332c3230322c34332c3231352c34332c3231362c34332c3330322c34332c3130332c34342c3133352c34342c3133392c34342c3138312c34342c3138342c34342c3230312c34342c3230322c34342c3230332c34342c3230342c34342c3231352c34342c3231362c34342c3234332c34342c3234342c34342c3235322c34342c3235332c34342c3330322c34342c3130332c34352c3133352c34352c3133392c34352c3138312c34352c3138342c34352c3230312c34352c3236332c34352c3330322c34352c3130332c34362c3133342c34362c3133352c34362c3133392c34362c3134302c34362c3134312c34362c3134322c34362c3138312c34362c3138342c34362c3230302c34362c3230312c34362c3236332c34362c3330322c34362c3130332c34372c3133342c34372c3134312c34372c3138312c34372c3138342c34372c3230302c34372c3230312c34372c3236332c34372c3330322c34372c3130332c34382c3133342c34382c3133352c34382c3134312c34382c3138312c34382c3138342c34382c3230312c34382c3236322c34382c3330322c34382c3130332c34392c3133352c34392c3133382c34392c3133392c34392c3134302c34392c3134312c34392c3138312c34392c3138342c34392c3230312c34392c3330322c34392c3130332c35302c3133352c35302c3133392c35302c3138312c35302c3138342c35302c3230312c35302c3330322c35302c3130332c35312c3133352c35312c3133392c35312c3138312c35312c3138342c35312c3230312c35312c3330322c35312c3130332c35322c3133352c35322c3133392c35322c3138312c35322c3138342c35322c3230312c35322c3230322c35322c3234332c35322c3234342c35322c3330322c35322c3130332c35332c3133352c35332c3133392c35332c3138312c35332c3138342c35332c3230312c35332c3230322c35332c3230332c35332c3230342c35332c3230352c35332c3234322c35332c3234332c35332c3234342c35332c3235322c35332c3235332c35332c3330322c35332c3130332c35342c3133352c35342c3133392c35342c3138312c35342c3138342c35342c3139392c35342c3230302c35342c3230312c35342c3230322c35342c3230332c35342c3230342c35342c3230352c35342c3234312c35342c3234322c35342c3235332c35342c3235342c35342c3330322c35342c3130332c35352c3133352c35352c3133392c35352c3138312c35352c3138342c35352c3139392c35352c3230302c35352c3230312c35352c3230322c35352c3235342c35352c3330322c35352c3130312c35362c3130322c35362c3130332c35362c3133352c35362c3133392c35362c3138312c35362c3138342c35362c3230312c35362c3330322c35362c3130302c35372c3130312c35372c3133352c35372c3133392c35372c3138312c35372c3138342c35372c3230312c35372c3330312c35372c3330322c35372c3130302c35382c3133352c35382c3133392c35382c3138312c35382c3138342c35382c3230312c35382c3235392c35382c3330312c35382c3330322c35382c3130302c35392c3133352c35392c3133392c35392c3138312c35392c3138342c35392c3230312c35392c3233312c35392c3233322c35392c3234312c35392c3235352c35392c3235392c35392c3236342c35392c3330322c35392c3130302c36302c3133352c36302c3133392c36302c3138312c36302c3138342c36302c3230312c36302c3233322c36302c3234312c36302c3235342c36302c3235352c36302c3235392c36302c3236342c36302c3330322c36302c3130302c36312c3133352c36312c3133382c36312c3133392c36312c3134302c36312c3134312c36312c3134322c36312c3134332c36312c3134342c36312c3134352c36312c3134362c36312c3134372c36312c3134382c36312c3134392c36312c3135302c36312c3135312c36312c3135322c36312c3135332c36312c3135342c36312c3135352c36312c3135362c36312c3135372c36312c3135382c36312c3135392c36312c3136302c36312c3136312c36312c3138312c36312c3138342c36312c3230312c36312c3231382c36312c3231392c36312c3235392c36312c3330322c36312c39392c36322c3130302c36322c3133352c36322c3136312c36322c3138312c36322c3138342c36322c3230312c36322c3230362c36322c3230372c36322c3231382c36322c3231392c36322c3235372c36322c3235382c36322c3330322c36322c36332c36332c36342c36332c36352c36332c36362c36332c36372c36332c36382c36332c36392c36332c37302c36332c37312c36332c37322c36332c37332c36332c37342c36332c37352c36332c37362c36332c37372c36332c37382c36332c37392c36332c38302c36332c38312c36332c38322c36332c38332c36332c38342c36332c38352c36332c38362c36332c38372c36332c38382c36332c38392c36332c39302c36332c39312c36332c39322c36332c39332c36332c39342c36332c39352c36332c39362c36332c39372c36332c39382c36332c39392c36332c3133352c36332c3136312c36332c3138312c36332c3138342c36332c3139392c36332c3230302c36332c3230312c36332c3230362c36332c3230372c36332c3231382c36332c3231392c36332c3235372c36332c3330322c36332c36332c36342c3133352c36342c3133372c36342c3136312c36342c3138312c36342c3138342c36342c3230302c36342c3230312c36342c3235362c36342c3235372c36342c3330322c36342c36332c36352c3133352c36352c3133372c36352c3133382c36352c3133392c36352c3134302c36352c3134312c36352c3134322c36352c3134332c36352c3134342c36352c3134352c36352c3134362c36352c3134372c36352c3134382c36352c3134392c36352c3135302c36352c3135312c36352c3135322c36352c3135332c36352c3135342c36352c3135352c36352c3135362c36352c3135372c36352c3135382c36352c3135392c36352c3136302c36352c3136312c36352c3138312c36352c3138342c36352c3230312c36352c3235362c36352c3330322c36352c36332c36362c3133352c36362c3133372c36362c3138312c36362c3138342c36362c3230312c36362c3330322c36362c36332c36372c36342c36372c3133352c36372c3133372c36372c3138312c36372c3138342c36372c3230312c36372c3330322c36372c36342c36382c3133352c36382c3133372c36382c3138312c36382c3138342c36382c3230312c36382c3233312c36382c3233322c36382c3234302c36382c3234312c36382c3235352c36382c3236342c36382c3330322c36382c36342c36392c3133352c36392c3133372c36392c3138312c36392c3138342c36392c3230312c36392c3233312c36392c3234302c36392c3234312c36392c3235342c36392c3235352c36392c3236332c36392c3236342c36392c3330322c36392c36332c37302c36342c37302c3133352c37302c3133372c37302c3138312c37302c3138342c37302c3139392c37302c3230302c37302c3230312c37302c3330322c37302c36332c37312c38352c37312c38362c37312c38372c37312c38382c37312c3133352c37312c3133372c37312c3138312c37312c3138342c37312c3139392c37312c3230302c37312c3230312c37312c3330322c37312c36332c37322c38352c37322c38382c37322c3133352c37322c3133372c37322c3138312c37322c3138342c37322c3230312c37322c3330322c37322c36332c37332c38352c37332c38382c37332c3133352c37332c3133372c37332c3133382c37332c3133392c37332c3134302c37332c3134312c37332c3134322c37332c3134332c37332c3134342c37332c3134352c37332c3134362c37332c3134372c37332c3134382c37332c3134392c37332c3135302c37332c3135312c37332c3135322c37332c3135332c37332c3135342c37332c3135352c37332c3135362c37332c3135372c37332c3135382c37332c3135392c37332c3136302c37332c3136312c37332c3138312c37332c3138342c37332c3230312c37332c3330322c37332c36332c37342c36342c37342c36352c37342c36362c37342c36372c37342c36382c37342c36392c37342c37302c37342c37312c37342c37322c37342c37332c37342c37342c37342c37352c37342c37362c37342c37372c37342c37382c37342c37392c37342c38302c37342c38312c37342c38322c37342c38332c37342c38342c37342c38352c37342c38382c37342c3130372c37342c3130382c37342c3130392c37342c3131302c37342c3131312c37342c3131322c37342c3131332c37342c3133352c37342c3136312c37342c3138312c37342c3138342c37342c3230312c37342c3234312c37342c3234322c37342c3234332c37342c3235332c37342c3235342c37342c3330322c37342c38382c37352c3130372c37352c3131332c37352c3133352c37352c3136312c37352c3138312c37352c3138342c37352c3230312c37352c3234322c37352c3234332c37352c3234342c37352c3235322c37352c3235332c37352c3235342c37352c3330322c37352c38382c37362c3130372c37362c3131332c37362c3133342c37362c3133352c37362c3133362c37362c3133372c37362c3133382c37362c3133392c37362c3134302c37362c3134312c37362c3134322c37362c3134332c37362c3134342c37362c3134352c37362c3134362c37362c3134372c37362c3134382c37362c3134392c37362c3135302c37362c3135312c37362c3135322c37362c3135332c37362c3135342c37362c3135352c37362c3135362c37362c3135372c37362c3135382c37362c3135392c37362c3136302c37362c3136312c37362c3138312c37362c3138342c37362c3230312c37362c3235322c37362c3330322c37362c35362c37372c35372c37372c35382c37372c35392c37372c36302c37372c36312c37372c36322c37372c36332c37372c36342c37372c36352c37372c36362c37372c36372c37372c36382c37372c36392c37372c37302c37372c37312c37372c37322c37372c37332c37372c37342c37372c37352c37372c37362c37372c37372c37372c37382c37372c37392c37372c38302c37372c38312c37372c38322c37372c38332c37372c38342c37372c38352c37372c38362c37372c38372c37372c38382c37372c3130372c37372c3131332c37372c3138312c37372c3138342c37372c3230312c37372c3231382c37372c3231392c37372c3232302c37372c3330322c37372c35362c37382c3130372c37382c3131332c37382c3138312c37382c3138342c37382c3230302c37382c3230312c37382c3230362c37382c3230372c37382c3231382c37382c3231392c37382c3234382c37382c3330322c37382c35362c37392c3130372c37392c3131332c37392c3138312c37392c3138342c37392c3139392c37392c3230302c37392c3230312c37392c3330322c37392c35362c38302c3130372c38302c3131332c38302c3138312c38302c3138342c38302c3230312c38302c3234362c38302c3238302c38302c3330322c38302c35362c38312c3130372c38312c3131332c38312c3138312c38312c3138342c38312c3230312c38312c3237392c38312c3238302c38312c3238312c38312c3238322c38312c3238332c38312c3238342c38312c3238352c38312c3238362c38312c3330322c38312c35362c38322c3130372c38322c3131332c38322c3138312c38322c3138342c38322c3230312c38322c3237392c38322c3238362c38322c3330322c38322c35362c38332c3130372c38332c3131332c38332c3138312c38332c3138342c38332c3230312c38332c3230322c38332c3230332c38332c3230342c38332c3231352c38332c3231362c38332c3237382c38332c3237392c38332c3238362c38332c3238372c38332c3238382c38332c3330322c38332c35362c38342c3130372c38342c3131332c38342c3138312c38342c3138342c38342c3230312c38342c3230322c38342c3230332c38342c3230342c38342c3231352c38342c3231362c38342c3234322c38342c3234332c38342c3235312c38342c3235322c38342c3235332c38342c3237382c38342c3238382c38342c3238392c38342c3330322c38342c35362c38352c3130372c38352c3131332c38352c3138312c38352c3138342c38352c3230312c38352c3234332c38352c3235322c38352c3237382c38352c3238382c38352c3238392c38352c3330322c38352c35362c38362c3130372c38362c3131332c38362c3138312c38362c3138342c38362c3230312c38362c3237372c38362c3237382c38362c3238382c38362c3330322c38362c35362c38372c3130372c38372c3131332c38372c3138312c38372c3138342c38372c3139392c38372c3230302c38372c3230312c38372c3237372c38372c3238382c38372c3330322c38372c35362c38382c3130372c38382c3131332c38382c3138312c38382c3138342c38382c3230302c38382c3230312c38382c3237362c38382c3237372c38382c3238382c38382c3330322c38382c35362c38392c3130372c38392c3131332c38392c3138312c38392c3138342c38392c3230312c38392c3237362c38392c3238382c38392c3330322c38392c35362c39302c3130372c39302c3131332c39302c3138312c39302c3138342c39302c3230312c39302c3237352c39302c3237362c39302c3238382c39302c3330322c39302c35362c39312c35372c39312c35382c39312c35392c39312c3130372c39312c3131332c39312c3138312c39312c3138342c39312c3230312c39312c3237352c39312c3238362c39312c3238372c39312c3238382c39312c3330322c39312c35382c39322c35392c39322c3130372c39322c3131332c39322c3138312c39322c3138342c39322c3230312c39322c3237352c39322c3238362c39322c3330322c39322c35362c39332c35372c39332c35382c39332c3130372c39332c3131332c39332c3138312c39332c3138342c39332c3230312c39332c3237342c39332c3237352c39332c3238352c39332c3238362c39332c3330322c39332c35362c39342c3130372c39342c3131332c39342c3138312c39342c3138342c39342c3139392c39342c3230302c39342c3230312c39342c3237342c39342c3238352c39342c3330322c39342c35362c39352c3130372c39352c3131332c39352c3138312c39352c3138342c39352c3139392c39352c3230302c39352c3230312c39352c3237332c39352c3237342c39352c3238352c39352c3330322c39352c35362c39362c3130372c39362c3131332c39362c3138312c39362c3138342c39362c3230302c39362c3230312c39362c3237332c39362c3238342c39362c3238352c39362c3330322c39362c35362c39372c3130372c39372c3131332c39372c3138312c39372c3138342c39372c3230302c39372c3230312c39372c3237322c39372c3237332c39372c3238342c39372c3330322c39372c35362c39382c37372c39382c37382c39382c37392c39382c38302c39382c38312c39382c38322c39382c38332c39382c38342c39382c38352c39382c38362c39382c38372c39382c38382c39382c38392c39382c39302c39382c39312c39382c39322c39382c39332c39382c39342c39382c39352c39382c39362c39382c39372c39382c39382c39382c39392c39382c3130302c39382c3130312c39382c3130322c39382c3130332c39382c3130342c39382c3130352c39382c3130362c39382c3130372c39382c3130382c39382c3130392c39382c3131302c39382c3131312c39382c3131332c39382c3131342c39382c3131352c39382c3131362c39382c3131372c39382c3131382c39382c3131392c39382c3132302c39382c3132312c39382c3132322c39382c3132332c39382c3132342c39382c3132352c39382c3132362c39382c3132372c39382c3132382c39382c3132392c39382c3133302c39382c3133312c39382c3133322c39382c3133332c39382c3133342c39382c3133352c39382c3133362c39382c3133372c39382c3133382c39382c3133392c39382c3134302c39382c3134312c39382c3134322c39382c3134332c39382c3134342c39382c3134352c39382c3134362c39382c3134372c39382c3134382c39382c3134392c39382c3135302c39382c3135312c39382c3135322c39382c3135332c39382c3135342c39382c3135352c39382c3135362c39382c3135372c39382c3135382c39382c3135392c39382c3136302c39382c3136312c39382c3137392c39382c3138302c39382c3138312c39382c3138322c39382c3138332c39382c3138342c39382c3230302c39382c3230312c39382c3237322c39382c3238332c39382c3238342c39382c3330322c39382c35362c39392c37372c39392c37382c39392c37392c39392c38302c39392c38312c39392c38322c39392c38332c39392c38342c39392c38352c39392c38362c39392c38372c39392c39352c39392c3130342c39392c3130352c39392c3131312c39392c3136312c39392c3137392c39392c3138322c39392c3230302c39392c3230312c39392c3237322c39392c3238332c39392c3330322c39392c35362c3130302c38362c3130302c38372c3130302c39352c3130302c3130342c3130302c3131312c3130302c3136312c3130302c3137392c3130302c3138302c3130302c3138312c3130302c3138322c3130302c3230302c3130302c3230312c3130302c3237322c3130302c3237332c3130302c3237342c3130302c3238322c3130302c3238332c3130302c3330322c3130302c35362c3130312c35372c3130312c35382c3130312c3131312c3130312c3131392c3130312c3136312c3130312c3230302c3130312c3230312c3130312c3237342c3130312c3238322c3130312c3330322c3130312c35382c3130322c35392c3130322c3131312c3130322c3131392c3130322c3132302c3130322c3132312c3130322c3132322c3130322c3132332c3130322c3132342c3130322c3132352c3130322c3132362c3130322c3132372c3130322c3132382c3130322c3132392c3130322c3133302c3130322c3133312c3130322c3133322c3130322c3133332c3130322c3133342c3130322c3133352c3130322c3133362c3130322c3133372c3130322c3133382c3130322c3133392c3130322c3134302c3130322c3134312c3130322c3134322c3130322c3134332c3130322c3134342c3130322c3134352c3130322c3134362c3130322c3134372c3130322c3134382c3130322c3134392c3130322c3135302c3130322c3135312c3130322c3135322c3130322c3135332c3130322c3135342c3130322c3135352c3130322c3135362c3130322c3135372c3130322c3135382c3130322c3135392c3130322c3136302c3130322c3136312c3130322c3230302c3130322c3230312c3130322c3237342c3130322c3238322c3130322c3330322c3130322c35392c3130332c36302c3130332c36312c3130332c36322c3130332c36332c3130332c36342c3130332c3131312c3130332c3131392c3130332c3139382c3130332c3139392c3130332c3230302c3130332c3230312c3130332c3237342c3130332c3238322c3130332c3330322c3130332c36342c3130342c3131312c3130342c3131392c3130342c3235332c3130342c3235342c3130342c3235352c3130342c3235362c3130342c3235372c3130342c3235382c3130342c3235392c3130342c3236302c3130342c3236312c3130342c3236322c3130342c3236332c3130342c3236342c3130342c3236352c3130342c3236362c3130342c3236372c3130342c3236382c3130342c3236392c3130342c3237302c3130342c3237312c3130342c3237322c3130342c3237332c3130342c3237342c3130342c3238322c3130342c3239302c3130342c3239312c3130342c3239322c3130342c3239332c3130342c3330322c3130342c36342c3130352c3131312c3130352c3131392c3130352c3235332c3130352c3238322c3130352c3238332c3130352c3238342c3130352c3238352c3130352c3238362c3130352c3238372c3130352c3238382c3130352c3238392c3130352c3239302c3130352c3239332c3130352c3239342c3130352c3239352c3130352c3239362c3130352c3239372c3130352c3239382c3130352c3239392c3130352c3330302c3130352c3330312c3130352c3330322c3130352c36342c3130362c3131312c3130362c3131392c3130362c3235332c3130362c36342c3130372c3131312c3130372c3131392c3130372c3235332c3130372c36342c3130382c3131312c3130382c3131392c3130382c3235332c3130382c3235342c3130382c3235352c3130382c3235362c3130382c3235372c3130382c3235382c3130382c3235392c3130382c3236302c3130382c3236312c3130382c3236322c3130382c3236332c3130382c3236342c3130382c3237322c3130382c3237332c3130382c3237342c3130382c3237352c3130382c3237362c3130382c36342c3130392c3131312c3130392c3131392c3130392c3236342c3130392c3237322c3130392c3237362c3130392c3237372c3130392c36342c3131302c3131312c3131302c3131392c3131302c3236342c3131302c3237322c3131302c3237372c3131302c36342c3131312c39302c3131312c3131312c3131312c3131392c3131312c3236342c3131312c3237322c3131312c3237372c3131312c36342c3131322c3131312c3131322c3131392c3131322c3132352c3131322c3233382c3131322c3233392c3131322c3234302c3131322c3234312c3131322c3234322c3131322c3234332c3131322c3234342c3131322c3236342c3131322c3236362c3131322c3236372c3131322c3236382c3131322c3236392c3131322c3237302c3131322c3237312c3131322c3237322c3131322c3237372c3131322c36342c3131332c3131312c3131332c3131392c3131332c3132352c3131332c3233372c3131332c3233382c3131332c3234342c3131332c3236342c3131332c3236352c3131332c3236362c3131332c3237312c3131332c3237322c3131332c3237372c3131332c36342c3131342c3131312c3131342c3131392c3131342c3132342c3131342c3233372c3131342c3234342c3131342c3236352c3131342c3237322c3131342c3237372c3131342c36342c3131352c3131312c3131352c3131392c3131352c3132342c3131352c3233372c3131352c3234342c3131352c3237372c3131352c35392c3131362c36302c3131362c36312c3131362c36322c3131362c36332c3131362c36342c3131362c3131312c3131362c3131392c3131362c3132342c3131362c3233372c3131362c3234342c3131362c3237372c3131362c35382c3131372c35392c3131372c3131312c3131372c3131392c3131372c3132342c3131372c3233372c3131372c3234342c3131372c3237372c3131372c35382c3131382c3131312c3131382c3131392c3131382c3132302c3131382c3132312c3131382c3132322c3131382c3132332c3131382c3132342c3131382c3133332c3131382c3133342c3131382c3133352c3131382c3133362c3131382c3133372c3131382c3233372c3131382c3234342c3131382c3237372c3131382c35382c3131392c3131312c3131392c3131392c3131392c3132342c3131392c3233372c3131392c3234342c3131392c3237372c3131392c35382c3132302c3131312c3132302c3131392c3132302c3230322c3132302c3230332c3132302c3230342c3132302c3230352c3132302c3233372c3132302c3234342c3132302c3237372c3132302c35382c3132312c3131312c3132312c3131392c3132312c3132362c3132312c3230322c3132312c3230352c3132312c3233372c3132312c3234342c3132312c3237372c3132312c35382c3132322c3131312c3132322c3131392c3132322c3132362c3132322c3132372c3132322c3132382c3132322c3230322c3132322c3230352c3132322c3233372c3132322c3234342c3132322c3237372c3132322c35382c3132332c3131312c3132332c3131392c3132332c3132302c3132332c3132312c3132332c3132322c3132332c3132332c3132332c3132342c3132332c3132352c3132332c3132362c3132332c3132372c3132332c3132382c3132332c3132392c3132332c3133302c3132332c3133312c3132332c3133322c3132332c3133332c3132332c3230322c3132332c3230352c3132332c3233372c3132332c3234342c3132332c3237362c3132332c3237372c3132332c35382c3132342c3131312c3132342c3132362c3132342c3135382c3132342c3135392c3132342c3136302c3132342c3136312c3132342c3136322c3132342c3136332c3132342c3136342c3132342c3136352c3132342c3136362c3132342c3136372c3132342c3136382c3132342c3136392c3132342c3137302c3132342c3137312c3132342c3137322c3132342c3137332c3132342c3137342c3132342c3137352c3132342c3137362c3132342c3137372c3132342c3137382c3132342c3230322c3132342c3230352c3132342c3233372c3132342c3234342c3132342c3237312c3132342c3237322c3132342c3237332c3132342c3237342c3132342c3237352c3132342c3237362c3132342c35382c3132352c35392c3132352c36302c3132352c3130372c3132352c3130382c3132352c3130392c3132352c3131302c3132352c3131312c3132352c3132362c3132352c3135382c3132352c3137382c3132352c3230322c3132352c3230352c3132352c3233372c3132352c3234342c3132352c3237312c3132352c36302c3132362c3130362c3132362c3130372c3132362c3132362c3132362c3135382c3132362c3137382c3132362c3230322c3132362c3230352c3132362c3233372c3132362c3234342c3132362c3237302c3132362c3237312c3132362c36302c3132372c3130352c3132372c3130362c3132372c3132362c3132372c3135382c3132372c3137382c3132372c3230322c3132372c3230352c3132372c3233372c3132372c3234342c3132372c3237312c3132372c36302c3132382c3130352c3132382c3132362c3132382c3132372c3132382c3132382c3132382c3132392c3132382c3133302c3132382c3133312c3132382c3133322c3132382c3133332c3132382c3135382c3132382c3137382c3132382c3230322c3132382c3230352c3132382c3233372c3132382c3234342c3132382c3237312c3132382c36302c3132392c3130352c3132392c3133332c3132392c3135342c3132392c3135352c3132392c3135362c3132392c3135372c3132392c3135382c3132392c3137382c3132392c3230322c3132392c3230352c3132392c3233372c3132392c3234342c3132392c3237312c3132392c3237322c3132392c36302c3133302c39302c3133302c3130352c3133302c3133332c3133302c3135342c3133302c3137382c3133302c3230322c3133302c3230352c3133302c3231312c3133302c3233372c3133302c3234342c3133302c3237322c3133302c3237332c3133302c36302c3133312c3130352c3133312c3133332c3133312c3135342c3133312c3135352c3133312c3135362c3133312c3135372c3133312c3135382c3133312c3135392c3133312c3136302c3133312c3136312c3133312c3136322c3133312c3136332c3133312c3136342c3133312c3136352c3133312c3136362c3133312c3136372c3133312c3136382c3133312c3136392c3133312c3137322c3133312c3137332c3133312c3137342c3133312c3137352c3133312c3137362c3133312c3137372c3133312c3137382c3133312c3230322c3133312c3230352c3133312c3231312c3133312c3233372c3133312c3234342c3133312c3237332c3133312c36302c3133322c3130352c3133322c3133332c3133322c3136392c3133322c3137322c3133322c3230322c3133322c3230352c3133322c3233372c3133322c3234342c3133322c3237332c3133322c36302c3133332c3130352c3133332c3133332c3133332c3136392c3133332c3137322c3133332c3230322c3133332c3230352c3133332c3233372c3133332c3234342c3133332c3234352c3133332c3234362c3133332c3234372c3133332c3234382c3133332c3234392c3133332c3235302c3133332c3235312c3133332c3235322c3133332c3235332c3133332c3237332c3133332c36302c3133342c3130352c3133342c3133332c3133342c3136392c3133342c3137322c3133342c3230322c3133342c3230352c3133342c3233372c3133342c3235332c3133342c3237322c3133342c3237332c3133342c36302c3133352c36312c3133352c3130352c3133352c3133332c3133352c3136392c3133352c3137322c3133352c3230322c3133352c3230352c3133352c3233372c3133352c3235332c3133352c3237322c3133352c36312c3133362c3130352c3133362c3133332c3133362c3135392c3133362c3136302c3133362c3136382c3133362c3136392c3133362c3137322c3133362c3230322c3133362c3230352c3133362c3233372c3133362c3235332c3133362c3237322c3133362c36312c3133372c3130352c3133372c3133332c3133372c3133342c3133372c3133352c3133372c3136382c3133372c3136392c3133372c3137322c3133372c3230322c3133372c3230352c3133372c3233372c3133372c3235332c3133372c3237322c3133372c3237332c3133372c36312c3133382c3130352c3133382c3133352c3133382c3133362c3133382c3136392c3133382c3137322c3133382c3137362c3133382c3230322c3133382c3230352c3133382c3233372c3133382c3235332c3133382c3237332c3133382c36312c3133392c3130352c3133392c3133362c3133392c3136392c3133392c3137322c3133392c3230322c3133392c3230352c3133392c3233372c3133392c3235332c3133392c3237332c3133392c36312c3134302c3130352c3134302c3133362c3134302c3136392c3134302c3137322c3134302c3230322c3134302c3230352c3134302c3233372c3134302c3235302c3134302c3235312c3134302c3235322c3134302c3235332c3134302c3237332c3134302c36312c3134312c3130352c3134312c3133352c3134312c3133362c3134312c3136392c3134312c3137322c3134312c3230322c3134312c3230352c3134312c3233372c3134312c3235302c3134312c3237332c3134312c36312c3134322c3130352c3134322c3133322c3134322c3133332c3134322c3133342c3134322c3133352c3134322c3136392c3134322c3137322c3134322c3230322c3134322c3230352c3134322c3233372c3134322c3235302c3134322c3237332c3134322c36312c3134332c36322c3134332c36332c3134332c36342c3134332c36352c3134332c36362c3134332c36372c3134332c36382c3134332c36392c3134332c37302c3134332c37312c3134332c37322c3134332c37332c3134332c37342c3134332c37352c3134332c37362c3134332c37372c3134332c37382c3134332c37392c3134332c38302c3134332c38312c3134332c38322c3134332c38332c3134332c38342c3134332c38352c3134332c38362c3134332c38372c3134332c38382c3134332c38392c3134332c39302c3134332c3130352c3134332c3130362c3134332c3130372c3134332c3133322c3134332c3136392c3134332c3137322c3134332c3230322c3134332c3230352c3134332c3233372c3134332c3235302c3134332c3237332c3134332c36362c3134342c38312c3134342c38392c3134342c39302c3134342c3130372c3134342c3130382c3134342c3131372c3134342c3131382c3134342c3131392c3134342c3132302c3134342c3132312c3134342c3132322c3134342c3132332c3134342c3132342c3134342c3132352c3134342c3132362c3134342c3132372c3134342c3132382c3134342c3132392c3134342c3133302c3134342c3133312c3134342c3133322c3134342c3136392c3134342c3137322c3134342c3230322c3134342c3230352c3134342c3233372c3134342c3235302c3134342c3237332c3134342c36362c3134352c38312c3134352c38392c3134352c39302c3134352c3130372c3134352c3131372c3134352c3136392c3134352c3137322c3134352c3230322c3134352c3230352c3134352c3233372c3134352c3235302c3134352c3237332c3134352c36362c3134362c3130372c3134362c3131372c3134362c3136392c3134362c3137322c3134362c3230322c3134362c3230352c3134362c3233372c3134362c3235302c3134362c3235312c3134362c3237332c3134362c36362c3134372c3130372c3134372c3131362c3134372c3131372c3134372c3136392c3134372c3137322c3134372c3230322c3134372c3230352c3134372c3233362c3134372c3233372c3134372c3235312c3134372c3235322c3134372c3237322c3134372c3237332c3134372c3237342c3134372c3237352c3134372c3237362c3134372c3237372c3134372c36362c3134382c3130372c3134382c3131362c3134382c3136392c3134382c3137322c3134382c3230322c3134382c3230352c3134382c3233362c3134382c3233372c3134382c3235322c3134382c3237362c3134382c3237372c3134382c3238312c3134382c36362c3134392c3130372c3134392c3131362c3134392c3136392c3134392c3137322c3134392c3230322c3134392c3230352c3134392c3233372c3134392c3235322c3134392c3238312c3134392c3130372c3135302c3131362c3135302c3136392c3135302c3137322c3135302c3230322c3135302c3230352c3135302c3233372c3135302c3235322c3135302c3238312c3135302c37302c3135312c3130372c3135312c3131362c3135312c3136392c3135312c3137322c3135312c3230322c3135312c3230352c3135312c3233372c3135312c3235312c3135312c3235322c3135312c3237302c3135312c3238312c3135312c37302c3135322c37312c3135322c37322c3135322c37332c3135322c37342c3135322c37352c3135322c37362c3135322c37372c3135322c37382c3135322c37392c3135322c38302c3135322c38342c3135322c38352c3135322c38362c3135322c38372c3135322c38382c3135322c38392c3135322c39302c3135322c39312c3135322c39322c3135322c39332c3135322c39342c3135322c39352c3135322c39362c3135322c39372c3135322c39382c3135322c39392c3135322c3130302c3135322c3130312c3135322c3130372c3135322c3131362c3135322c3136322c3135322c3136392c3135322c3137322c3135322c3230322c3135322c3230352c3135322c3233372c3135322c3235302c3135322c3235312c3135322c3236392c3135322c3237302c3135322c3237352c3135322c3237362c3135322c3237372c3135322c3238312c3135322c38302c3135332c3130372c3135332c3131362c3135332c3136392c3135332c3137322c3135332c3230322c3135332c3230352c3135332c3232342c3135332c3232352c3135332c3233372c3135332c3234352c3135332c3234362c3135332c3234372c3135332c3234382c3135332c3234392c3135332c3235302c3135332c3237342c3135332c3237352c3135332c3238312c3135332c3130362c3135342c3130372c3135342c3131362c3135342c3136392c3135342c3137322c3135342c3230322c3135342c3230352c3135342c3232332c3135342c3232342c3135342c3232352c3135342c3232362c3135342c3233372c3135342c3234352c3135342c3237332c3135342c3237342c3135342c3238302c3135342c3238312c3135342c3130362c3135352c3131362c3135352c3135302c3135352c3136392c3135352c3137322c3135352c3230322c3135352c3230352c3135352c3232352c3135352c3232362c3135352c3233372c3135352c3234352c3135352c3237332c3135352c3130362c3135362c3131362c3135362c3131372c3135362c3132332c3135362c3132342c3135362c3135352c3135362c3136392c3135362c3137322c3135362c3230322c3135362c3230352c3135362c3232352c3135362c3232362c3135362c3233372c3135362c3234352c3135362c3236372c3135362c3237332c3135362c3130362c3135372c3131362c3135372c3131372c3135372c3131382c3135372c3131392c3135372c3132302c3135372c3132312c3135372c3132322c3135372c3132332c3135372c3132342c3135372c3132352c3135372c3132362c3135372c3132372c3135372c3132382c3135372c3132392c3135372c3133302c3135372c3133312c3135372c3133322c3135372c3133332c3135372c3136392c3135372c3137322c3135372c3230322c3135372c3230352c3135372c3231362c3135372c3231372c3135372c3231382c3135372c3232352c3135372c3232362c3135372c3233372c3135372c3234352c3135372c3236372c3135372c3237332c3135372c3130362c3135382c3131362c3135382c3132342c3135382c3132352c3135382c3132362c3135382c3132372c3135382c3132382c3135382c3132392c3135382c3133302c3135382c3133312c3135382c3133332c3135382c3136392c3135382c3137322c3135382c3230322c3135382c3230352c3135382c3231382c3135382c3231392c3135382c3232352c3135382c3233372c3135382c3234352c3135382c3236372c3135382c3237332c3135382c3130362c3135392c3131362c3135392c3133312c3135392c3133332c3135392c3136392c3135392c3137322c3135392c3230322c3135392c3230352c3135392c3232352c3135392c3233372c3135392c3234352c3135392c3236372c3135392c3237322c3135392c3237332c3135392c3130362c3136302c3131362c3136302c3133312c3136302c3133332c3136302c3136392c3136302c3137322c3136302c3230312c3136302c3230322c3136302c3230352c3136302c3232342c3136302c3232352c3136302c3233372c3136302c3234352c3136302c3234362c3136302c3234372c3136302c3234382c3136302c3234392c3136302c3235302c3136302c3235312c3136302c3235322c3136302c3235332c3136302c3235342c3136302c3235352c3136302c3235362c3136302c3235372c3136302c3235382c3136302c3235392c3136302c3236302c3136302c3236312c3136302c3236322c3136302c3236332c3136302c3236342c3136302c3236352c3136302c3236362c3136302c3236372c3136302c3237312c3136302c3237322c3136302c3130362c3136312c3131362c3136312c3133312c3136312c3133332c3136312c3136372c3136312c3136382c3136312c3136392c3136312c3137322c3136312c3230322c3136312c3230352c3136312c3232342c3136312c3232352c3136312c3232362c3136312c3233372c3136312c3236372c3136312c3237312c3136312c3130362c3136322c3131362c3136322c3133312c3136322c3133322c3136322c3133332c3136322c3135382c3136322c3135392c3136322c3136392c3136322c3137322c3136322c3230322c3136322c3230352c3136322c3232352c3136322c3232362c3136322c3232372c3136322c3233372c3136322c3236372c3136322c3237312c3136322c3131362c3136332c3133322c3136332c3133332c3136332c3136392c3136332c3137322c3136332c3230322c3136332c3230352c3136332c3232352c3136332c3232362c3136332c3232372c3136332c3233372c3136332c3236372c3136332c3236382c3136332c3236392c3136332c3237302c3136332c3237312c3136332c3131362c3136342c3133322c3136342c3133332c3136342c3136392c3136342c3137322c3136342c3230322c3136342c3230352c3136342c3230362c3136342c3230372c3136342c3230382c3136342c3230392c3136342c3231302c3136342c3231312c3136342c3231322c3136342c3231332c3136342c3232352c3136342c3232362c3136342c3233372c3136342c3131362c3136352c3133322c3136352c3133332c3136352c3136392c3136352c3137322c3136352c3230322c3136352c3230352c3136352c3233372c3136352c3130342c3136362c3130352c3136362c3130362c3136362c3131362c3136362c3133322c3136362c3136392c3136362c3137322c3136362c3230322c3136362c3230352c3136362c3233372c3136362c3130332c3136372c3130342c3136372c3131362c3136372c3133312c3136372c3136392c3136372c3137322c3136372c3230322c3136372c3230352c3136372c3233372c3136372c3131362c3136382c3135302c3136382c3135312c3136382c3135322c3136382c3135332c3136382c3135342c3136382c3135352c3136382c3135362c3136382c3135372c3136382c3135382c3136382c3135392c3136382c3136302c3136382c3136312c3136382c3136322c3136382c3136332c3136382c3136342c3136382c3136352c3136382c3136362c3136382c3136372c3136382c3136382c3136382c3136392c3136382c3137322c3136382c3137332c3136382c3137342c3136382c3137352c3136382c3137362c3136382c3137372c3136382c3137382c3136382c3137392c3136382c3138302c3136382c3138312c3136382c3138322c3136382c3138332c3136382c3138342c3136382c3138352c3136382c3138362c3136382c3138372c3136382c3138382c3136382c3138392c3136382c3139302c3136382c3139312c3136382c3139322c3136382c3139332c3136382c3139342c3136382c3139352c3136382c3139362c3136382c3139372c3136382c3139382c3136382c3139392c3136382c3230302c3136382c3230312c3136382c3230322c3136382c3230352c3136382c3231332c3136382c3231342c3136382c3231352c3136382c3231362c3136382c3231372c3136382c3231382c3136382c3231392c3136382c3232352c3136382c3233372c3136382c3131362c3136392c3131372c3136392c3131382c3136392c3131392c3136392c3132302c3136392c3132312c3136392c3132322c3136392c3132332c3136392c3132342c3136392c3132352c3136392c3133352c3136392c3133362c3136392c3133372c3136392c3133382c3136392c3133392c3136392c3134302c3136392c3134312c3136392c3134322c3136392c3134332c3136392c3134342c3136392c3134352c3136392c3134362c3136392c3134372c3136392c3134382c3136392c3134392c3136392c3135302c3136392c3135312c3136392c3230352c3136392c3231312c3136392c3231322c3136392c3231332c3136392c3231342c3136392c3231352c3136392c3231362c3136392c3231392c3136392c3232302c3136392c3232312c3136392c3232322c3136392c3232332c3136392c3232342c3136392c3232352c3136392c3232362c3136392c3232372c3136392c3232382c3136392c3232392c3136392c3233302c3136392c3233312c3136392c3233322c3136392c3233332c3136392c3233342c3136392c3233352c3136392c3233362c3136392c3233372c3136392c3132332c3137302c3132342c3137302c3132352c3137302c3132362c3137302c3230352c3137302c3231362c3137302c3231372c3137302c3231382c3137302c3231392c3137302c3232342c3137302c3232372c3137302c3233372c3137302c3230352c3137312c3232342c3137312c3232372c3137312c3233372c3137312c3133312c3137322c3133322c3137322c3230352c3137322c3232342c3137322c3232352c3137322c3232362c3137322c3232372c3137322c3233372c3137322c3133322c3137332c3133332c3137332c3230352c3137332c3233372c3137332c3133322c3137342c3133332c3137342c3230352c3137342c3233372c3137342c3133332c3137352c3136362c3137352c3230352c3137352c3230362c3137352c3230372c3137352c3230382c3137352c3230392c3137352c3231302c3137352c3231312c3137352c3231322c3137352c3231332c3137352c3233372c3137352c3133332c3137362c3231322c3137362c3233372c3137362c3133332c3137372c3231322c3137372c3233372c3137372c3231322c3137382c3233372c3137382c3131372c3137392c3136382c3137392c3231332c3137392c3231342c3137392c3231352c3137392c3231362c3137392c3231372c3137392c3231382c3137392c3231392c3137392c3232332c3137392c3232342c3137392c3232352c3137392c3232362c3137392c3232372c3137392c3232382c3137392c3232392c3137392c3233302c3137392c3233312c3137392c3233322c3137392c3233332c3137392c3233342c3137392c3233352c3137392c3233362c3137392c3233372c3137392c3131372c3138302c3131372c3138312c3136392c3138312c3131372c3138322c3136392c3138322c3131372c3138332c3136392c3138332c3131372c3138342c3136392c3138342c3131372c3138352c3136392c3138352c3131372c3138362c3135352c3138362c3136382c3138362c3136392c3138362c3131372c3138372c3136382c3138372c3131372c3138382c3136382c3138382c3136392c3138382c3131372c3138392c3136392c3138392c3131372c3139302c3136392c3139302c3131372c3139312c3136392c3139312c3131372c3139322c3136392c3139322c3131372c3139332c3136392c3139332c3131372c3139342c3131382c3139342c3131392c3139342c3132302c3139342c3132312c3139342c3132322c3139342c3132332c3139342c3132342c3139342c3132352c3139342c3132362c3139342c3132372c3139342c3132382c3139342c3132392c3139342c3133302c3139342c3133312c3139342c3133322c3139342c3133332c3139342c3136392c3139342c3131372c3139352c3131382c3139352c3133332c3139352c3136392c3139352c3133332c3139362c3133372c3139362c3136392c3139362c3136392c3139372c3136392c3139382c3136392c3139392c3136392c3230302c3136322c3230312c3136392c3230312c3136322c3230322c3136392c3230322c3136322c3230332c3136392c3230332c3137302c3230332c3135362c3230342c3135372c3230342c3135382c3230342c3135392c3230342c3136302c3230342c3136312c3230342c3136322c3230342c3136332c3230342c3135362c3230352c3135352c3230362c3135362c3230362c3135372c3230362c3135382c3230362c3135392c3230362c3136302c3230362c3136312c3230362c3136322c3230362c3136332c3230362c3136372c3230362c3136382c3230362c3136392c3230362c3135362c3230372c3135322c3233312c3135332c3233322c3135352c3233332c3136312c3233332c3136322c3233332c3135382c3233342c3135392c3233342c3136302c3233342c3136312c3233342c3135312c3233362c3135322c3233362c3135332c3233362c3135342c3233365d2c227479706573223a307d5d2c2266726565223a5b7b22636f6f7264696e61746573223a5b5d2c227479706573223a307d5d2c22726f6f6d73223a7b2230223a7b22636f6f7264696e61746573223a5b3237302c3136332c3236392c3136322c3236382c3136322c3236382c3136312c3236372c3136302c3236362c3136302c3236352c3136302c3236342c3136302c3236332c3136302c3236322c3136302c3236312c3136302c3236302c3136302c3235392c3136302c3235382c3136302c3235372c3136302c3235362c3136302c3235352c3136302c3235342c3136302c3235332c3136302c3235322c3136302c3235312c3136302c3235302c3136302c3234392c3136302c3234382c3136302c3234372c3136302c3234362c3136302c3234362c3135392c3234362c3135382c3234362c3135372c3234362c3135362c3234362c3135352c3234362c3135342c3234372c3135332c3234382c3135332c3234392c3135322c3235302c3135322c3235312c3135312c3235322c3135312c3235332c3135302c3235332c3134392c3235322c3134382c3235322c3134372c3235322c3134362c3235312c3134352c3235312c3134342c3235312c3134332c3235312c3134322c3235312c3134312c3235322c3134302c3235322c3133392c3235332c3133382c3235332c3133372c3235342c3133362c3235332c3133352c3235322c3133352c3235312c3133352c3235302c3133352c3234392c3133342c3234382c3133342c3234372c3133342c3234362c3133342c3234352c3133342c3234352c3133332c3234352c3133322c3234352c3133312c3234352c3133302c3234342c3132392c3234342c3132382c3234342c3132372c3234342c3132362c3234342c3132352c3234342c3132342c3234342c3132332c3234342c3132322c3234332c3132312c3234332c3132302c3234332c3131392c3234332c3131382c3234332c3131372c3234332c3131362c3234332c3131352c3234332c3131342c3234332c3131332c3234332c3131322c3234332c3131312c3234332c3131302c3234332c3130392c3234332c3130382c3234342c3130382c3234352c3130382c3234362c3130382c3234372c3130382c3234382c3130382c3234392c3130382c3235302c3130382c3235312c3130382c3235322c3130382c3235332c3130392c3235342c3130392c3235352c3130392c3235362c3130392c3235372c3130392c3235382c3130392c3235392c3130392c3236302c3130392c3236312c3130392c3236322c3130392c3236332c3130392c3236332c3131302c3236332c3131312c3236342c3131322c3236342c3131332c3236352c3131342c3236362c3131342c3236372c3131332c3236382c3131332c3236392c3131332c3237302c3131332c3237312c3131342c3237322c3131332c3237332c3131322c3237332c3131312c3237332c3131302c3237332c3130392c3237342c3130392c3237352c3130392c3237362c3131302c3237362c3131312c3237362c3131322c3237362c3131332c3237362c3131342c3237362c3131352c3237362c3131362c3237362c3131372c3237362c3131382c3237362c3131392c3237362c3132302c3237362c3132312c3237362c3132322c3237352c3132332c3237352c3132342c3237342c3132352c3237332c3132352c3237322c3132362c3237312c3132372c3237302c3132382c3237302c3132392c3237312c3133302c3237322c3133312c3237322c3133322c3237322c3133332c3237322c3133342c3237322c3133352c3237322c3133362c3237322c3133372c3237322c3133382c3237322c3133392c3237322c3134302c3237322c3134312c3237322c3134322c3237322c3134332c3237322c3134342c3237322c3134352c3237322c3134362c3237332c3134372c3237342c3134372c3237352c3134382c3237362c3134382c3237372c3134382c3237382c3134382c3237392c3134382c3238302c3134382c3238302c3134392c3238302c3135302c3238302c3135312c3238302c3135322c3238302c3135332c3238302c3135342c3237392c3135332c3237382c3135332c3237372c3135322c3237362c3135322c3237352c3135332c3237352c3135342c3237342c3135352c3237342c3135362c3237332c3135372c3237332c3135382c3237322c3135392c3237322c3136302c3237312c3136312c3237312c3136325d7d2c2231223a7b22636f6f7264696e61746573223a5b3135312c3233372c3135312c3233362c3135312c3233352c3135302c3233342c3135302c3233332c3135302c3233322c3134392c3233312c3134392c3233302c3134392c3232392c3134392c3232382c3134392c3232372c3134382c3232362c3134382c3232352c3134382c3232342c3134382c3232332c3134372c3232322c3134372c3232312c3134372c3232302c3134372c3231392c3134362c3231382c3134362c3231372c3134362c3231362c3134362c3231352c3134352c3231342c3134352c3231332c3134352c3231322c3134352c3231312c3134342c3231302c3134342c3230392c3134342c3230382c3134342c3230372c3134332c3230362c3134332c3230352c3134332c3230342c3134332c3230332c3134322c3230322c3134322c3230312c3134322c3230302c3134322c3139392c3134312c3139382c3134312c3139372c3134302c3139362c3133392c3139362c3133382c3139362c3133372c3139362c3133362c3139362c3133352c3139362c3133342c3139362c3133332c3139362c3133322c3139362c3133312c3139362c3133302c3139362c3132392c3139362c3132382c3139362c3132372c3139362c3132362c3139362c3132352c3139362c3132342c3139362c3132332c3139362c3132322c3139362c3132312c3139362c3132302c3139362c3131392c3139362c3131382c3139362c3131372c3139362c3131372c3139352c3131372c3139342c3131372c3139332c3131372c3139322c3131372c3139312c3131372c3139302c3131372c3138392c3131372c3138382c3131372c3138372c3131372c3138362c3131372c3138352c3131372c3138342c3131372c3138332c3131372c3138322c3131372c3138312c3131372c3138302c3131372c3137392c3131372c3137382c3131372c3137372c3131372c3137362c3131382c3137352c3131392c3137352c3132302c3137342c3132312c3137332c3132322c3137322c3132332c3137322c3132342c3137312c3132352c3137302c3132362c3137302c3132372c3137302c3132382c3137302c3132392c3137302c3133302c3137302c3133312c3137302c3133322c3137302c3133332c3137302c3133342c3137302c3133352c3137302c3133362c3137302c3133372c3137302c3133382c3137302c3133392c3137302c3134302c3137302c3134312c3137302c3134322c3137302c3134332c3136392c3134342c3136392c3134352c3136392c3134362c3136392c3134372c3136392c3134382c3137302c3134392c3137302c3135302c3137302c3135312c3137302c3135322c3137302c3135332c3137302c3135342c3137302c3135352c3137312c3135362c3137312c3135372c3137312c3135382c3137322c3135392c3137322c3136302c3137322c3136312c3137332c3136322c3137332c3136332c3137332c3136342c3137342c3136352c3137342c3136352c3137352c3136362c3137362c3136372c3137362c3136382c3137362c3136382c3137372c3136382c3137382c3136372c3137392c3136382c3138302c3136382c3138312c3136382c3138322c3136382c3138332c3136382c3138342c3136382c3138352c3136372c3138362c3136372c3138372c3136372c3138382c3136382c3138392c3136382c3139302c3136382c3139312c3136382c3139322c3136392c3139332c3137302c3139342c3137312c3139352c3137322c3139352c3137332c3139362c3137342c3139372c3137352c3139372c3137362c3139382c3137372c3139392c3137382c3230302c3137392c3230302c3138302c3230312c3138312c3230322c3138322c3230322c3138332c3230332c3138342c3230342c3138352c3230342c3138362c3230352c3138362c3230362c3138362c3230372c3138372c3230382c3138372c3230392c3138372c3231302c3138372c3231312c3138362c3231302c3138352c3231302c3138342c3230392c3138332c3230382c3138322c3230382c3138312c3230372c3138302c3230372c3137392c3230362c3137382c3230352c3137372c3230352c3137362c3230342c3137352c3230352c3137342c3230352c3137332c3230362c3137322c3230362c3137312c3230352c3137302c3230342c3136392c3230332c3136382c3230342c3136382c3230352c3136372c3230362c3136362c3230362c3136352c3230372c3136352c3230382c3136352c3230392c3136362c3231302c3136372c3231302c3136372c3231312c3136372c3231322c3136362c3231332c3136372c3231342c3136372c3231352c3136372c3231362c3136382c3231372c3136392c3231382c3136392c3231392c3137302c3232302c3137302c3232312c3137302c3232322c3137302c3232332c3137302c3232342c3137302c3232352c3136392c3232342c3136382c3232342c3136372c3232332c3136362c3232332c3136352c3232322c3136342c3232322c3136332c3232312c3136322c3232322c3136312c3232332c3136312c3232342c3136312c3232352c3136302c3232362c3136312c3232372c3136322c3232372c3136322c3232382c3136332c3232392c3136332c3233302c3136332c3233312c3136332c3233322c3136322c3233332c3136312c3233332c3136302c3233342c3135392c3233342c3135382c3233342c3135372c3233352c3135372c3233362c3135362c3233362c3135352c3233362c3135342c3233362c3135332c3233362c3135322c3233375d7d2c2232223a7b22636f6f7264696e61746573223a5b3130322c3137372c3130312c3137362c3130302c3137362c3130302c3137352c3130302c3137342c3130302c3137332c3130302c3137322c3130302c3137312c3130302c3137302c3130302c3136392c3130302c3136382c3130302c3136372c3130302c3136362c3130302c3136352c3130302c3136342c3130302c3136332c3130302c3136322c3130302c3136312c3130302c3136302c3130302c3135392c3130302c3135382c3130302c3135372c3130302c3135362c3130302c3135352c3130302c3135342c3130302c3135332c39392c3135322c39382c3135322c39372c3135322c39362c3135322c39352c3135322c39342c3135322c39332c3135322c39322c3135322c39312c3135322c39302c3135322c38392c3135322c38382c3135322c38372c3135322c38362c3135322c38352c3135322c38342c3135322c38332c3135322c38322c3135322c38312c3135322c38302c3135322c37392c3135322c37382c3135322c37372c3135322c37362c3135322c37352c3135322c37342c3135322c37332c3135322c37322c3135322c37312c3135322c37302c3135322c36392c3135322c36382c3135322c36372c3135322c36362c3135322c36362c3135312c36362c3135302c36362c3134392c36362c3134382c36362c3134372c36362c3134362c36362c3134352c36372c3134342c36362c3134332c36352c3134332c36342c3134332c36332c3134332c36322c3134332c36322c3134322c36322c3134312c36312c3134302c36312c3133392c36312c3133382c36312c3133372c36312c3133362c36302c3133352c36302c3133342c36302c3133332c36302c3133322c35392c3133312c35392c3133302c35392c3132392c35392c3132382c35392c3132372c35382c3132362c35382c3132352c35382c3132342c35382c3132332c35382c3132322c35372c3132312c35372c3132302c35372c3131392c35382c3131392c35392c3131382c36302c3131372c36312c3131372c36322c3131372c36332c3131372c36342c3131362c36352c3131352c36352c3131342c36352c3131332c36352c3131322c36352c3131312c36352c3131302c36352c3130392c36352c3130382c36352c3130372c36352c3130362c36352c3130352c36342c3130342c36332c3130342c36322c3130332c36312c3130332c36302c3130322c35392c3130322c35382c3130312c35372c3130312c35372c3130302c35372c39392c35372c39382c35372c39372c35372c39362c35372c39352c35372c39342c35382c39342c35392c39332c35382c39322c35372c39312c35372c39302c35372c38392c35372c38382c35372c38372c35372c38362c35372c38352c35372c38342c35372c38332c35372c38322c35372c38312c35372c38302c35372c37392c35372c37382c35382c37382c35392c37382c36302c37382c36312c37382c36322c37382c36332c37382c36342c37382c36352c37382c36362c37382c36372c37382c36382c37382c36392c37382c37302c37382c37312c37382c37322c37382c37332c37382c37342c37382c37352c37382c37362c37382c37372c37382c37382c37382c37392c37382c38302c37372c38312c37372c38322c37372c38332c37372c38342c37372c38352c37372c38362c37372c38372c37362c38372c37352c38362c37342c38352c37332c38342c37342c38332c37342c38322c37352c38312c37352c38302c37352c37392c37352c37382c37352c37372c37352c37362c37352c37352c37352c37342c37352c37332c37352c37322c37352c37312c37352c37302c37352c36392c37352c36382c37352c36372c37352c36362c37352c36352c37352c36342c37352c36332c37352c36322c37352c36322c37342c36322c37332c36322c37322c36322c37312c36322c37302c36322c36392c36322c36382c36322c36372c36322c36362c36322c36352c36322c36342c36322c36332c36322c36322c36332c36322c36342c36322c36352c36322c36362c36322c36372c36322c36382c36322c36392c36322c37302c36322c37312c36332c37322c36342c37332c36342c37342c36342c37352c36342c37362c36342c37372c36342c37382c36342c37392c36342c38302c36342c38312c36342c38322c36342c38332c36342c38342c36342c38352c36342c38362c36342c38372c36342c38382c36342c38392c36342c39302c36342c39312c36342c39322c36342c39332c36342c39342c36342c39352c36342c39362c36342c39372c36342c39382c36342c39392c36332c3130302c36332c3130312c36332c3130322c36332c3130332c36332c3130342c36332c3130352c36342c3130362c36342c3130362c36352c3130362c36362c3130362c36372c3130362c36382c3130362c36392c3130362c37302c3130362c37312c3130362c37322c3130362c37332c3130362c37342c3130362c37352c3130372c37362c3130372c37372c3130372c37382c3130372c37392c3130372c38302c3130362c38312c3130362c38322c3130362c38332c3130362c38342c3130362c38352c3130362c38362c3130362c38372c3130362c38382c3130362c38392c3130362c39302c3130362c39312c3130362c39322c3130362c39332c3130362c39342c3130362c39352c3130362c39362c3130362c39372c3130362c39382c3130372c39392c3130382c39392c3130392c39392c3131302c39392c3131312c3130302c3131322c3130302c3131322c3130312c3131322c3130322c3131322c3130332c3131322c3130342c3131322c3130352c3131322c3130362c3131322c3130372c3131312c3130382c3131312c3130392c3131312c3131302c3131312c3131312c3131312c3131322c3131312c3131332c3131312c3131342c3131312c3131352c3131312c3131362c3131312c3131372c3131312c3131382c3131312c3131392c3131312c3132302c3131312c3132312c3131302c3132322c3131302c3132332c3131302c3132342c3131302c3132352c3131302c3132362c3131302c3132372c3131302c3132382c3131302c3132392c3130392c3132392c3130382c3132392c3130372c3132392c3130362c3133302c3130352c3133302c3130342c3133312c3130342c3133322c3130342c3133332c3130342c3133342c3130342c3133352c3130342c3133362c3130342c3133372c3130342c3133382c3130342c3133392c3130342c3134302c3130342c3134312c3130352c3134322c3130352c3134332c3130362c3134342c3130362c3134352c3130362c3134362c3130362c3134372c3130362c3134382c3130362c3134392c3130362c3135302c3130362c3135312c3130362c3135322c3130362c3135332c3130362c3135342c3130362c3135352c3130362c3135362c3130352c3135372c3130352c3135382c3130352c3135392c3130352c3136302c3130352c3136312c3130352c3136322c3130362c3136332c3130362c3136342c3130362c3136352c3130352c3136352c3130342c3136362c3130342c3136372c3130342c3136382c3130332c3136392c3130332c3137302c3130332c3137312c3130332c3137322c3130332c3137332c3130332c3137342c3130322c3137352c3130322c3137365d7d2c2233223a7b22636f6f7264696e61746573223a5b3134392c37342c3134382c37332c3134372c37332c3134362c37332c3134352c37332c3134342c37332c3134332c37332c3134322c37332c3134312c37332c3134302c37332c3133392c37332c3133382c37332c3133382c37322c3133382c37312c3133382c37302c3133382c36392c3133382c36382c3133382c36372c3133382c36362c3133392c36352c3134302c36352c3134312c36352c3134322c36352c3134332c36352c3134342c36352c3134352c36352c3134362c36352c3134372c36352c3134382c36352c3134392c36352c3135302c36352c3135312c36352c3135322c36352c3135332c36352c3135342c36352c3135352c36352c3135362c36352c3135372c36352c3135382c36352c3135392c36352c3136302c36352c3136312c36342c3136312c36332c3136302c36322c3135392c36312c3135382c36312c3135372c36312c3135362c36312c3135352c36312c3135342c36312c3135332c36312c3135322c36312c3135312c36312c3135302c36312c3134392c36312c3134382c36312c3134372c36312c3134362c36312c3134352c36312c3134342c36312c3134332c36312c3134322c36312c3134312c36312c3134302c36312c3133392c36312c3133392c36302c3133392c35392c3133392c35382c3133392c35372c3133392c35362c3133392c35352c3133382c35342c3133382c35332c3133382c35322c3133382c35312c3133382c35302c3133382c34392c3133382c34382c3133382c34372c3133382c34362c3133382c34352c3133382c34342c3133382c34332c3133372c34322c3133372c34312c3133372c34302c3133372c33392c3133372c33382c3133372c33372c3133372c33362c3133372c33352c3133382c33342c3133382c33332c3133382c33322c3133382c33312c3133392c33302c3133392c32392c3133392c32382c3133392c32372c3134302c32362c3134302c32352c3134302c32342c3134302c32332c3134302c32322c3134312c32312c3134312c32302c3134322c31392c3134312c31382c3134302c31372c3133392c31372c3133382c31372c3133382c31362c3133382c31352c3133372c31342c3133372c31332c3133372c31322c3133382c31322c3133392c31322c3134302c31312c3134312c31302c3134312c392c3134312c382c3134312c372c3134312c362c3134312c352c3134322c342c3134332c342c3134342c342c3134352c342c3134362c342c3134372c342c3134382c342c3134392c342c3135302c342c3135312c342c3135322c342c3135332c342c3135342c342c3135352c342c3135362c342c3135372c342c3135372c352c3135372c362c3135382c372c3135392c372c3136302c372c3136312c372c3136322c372c3136332c372c3136342c372c3136352c372c3136362c372c3136372c372c3136382c372c3136392c372c3137302c372c3137312c372c3137322c372c3137332c372c3137342c372c3137352c372c3137362c372c3137372c372c3137382c372c3137392c372c3138302c372c3138302c382c3138302c392c3138312c31302c3138312c31312c3138312c31322c3138312c31332c3138312c31342c3138312c31352c3138312c31362c3138312c31372c3138312c31382c3138312c31392c3138312c32302c3138312c32312c3138312c32322c3138312c32332c3138312c32342c3138312c32352c3138312c32362c3138302c32372c3138302c32382c3138302c32392c3138302c33302c3138302c33312c3138302c33322c3138302c33332c3138302c33342c3138302c33352c3138302c33362c3138302c33372c3138302c33382c3138302c33392c3138302c34302c3138302c34312c3138302c34322c3138302c34332c3138302c34342c3138302c34352c3138302c34362c3138302c34372c3138302c34382c3138302c34392c3138302c35302c3138302c35312c3138302c35322c3138302c35332c3138302c35342c3138302c35352c3138302c35362c3138302c35372c3138302c35382c3138302c35392c3138302c36302c3138302c36312c3138302c36322c3138302c36332c3138302c36342c3138302c36352c3138302c36362c3138302c36372c3138302c36382c3138302c36392c3138302c37302c3138302c37312c3138302c37322c3138302c37332c3137392c37342c3137382c37342c3137372c37342c3137362c37342c3137352c37342c3137342c37342c3137332c37342c3137322c37342c3137312c37342c3137302c37342c3136392c37342c3136382c37342c3136372c37342c3136362c37342c3136352c37342c3136342c37342c3136332c37342c3136322c37342c3136312c37342c3136302c37342c3135392c37342c3135382c37342c3135372c37342c3135362c37342c3135352c37342c3135342c37342c3135332c37342c3135322c37342c3135312c37342c3135302c37345d7d2c2234223a7b22636f6f7264696e61746573223a5b3136312c3130302c3136302c39392c3135392c39392c3135382c39392c3135372c39392c3135362c39392c3135352c39392c3135342c39392c3135332c39392c3135322c39392c3135312c39392c3135302c39392c3134392c39392c3134382c39392c3134372c39392c3134362c39392c3134352c39392c3134342c39392c3134332c39392c3134322c39392c3134312c39392c3134302c39392c3133392c39392c3133382c39392c3133372c39392c3133362c39392c3133352c39392c3133342c39392c3133332c39392c3133322c39392c3133312c39392c3133302c39392c3132392c39392c3132382c39382c3132372c39382c3132362c39382c3132352c39382c3132342c39382c3132332c39382c3132322c39382c3132312c39382c3132302c39382c3131392c39382c3131382c39382c3131372c39382c3131362c39382c3131352c39382c3131342c39382c3131332c39382c3131322c39382c3131322c39372c3131322c39362c3131322c39352c3131322c39342c3131322c39332c3131322c39322c3131322c39312c3131322c39302c3131322c38392c3131322c38382c3131322c38372c3131322c38362c3131322c38352c3131322c38342c3131322c38332c3131322c38322c3131322c38312c3131322c38302c3131322c37392c3131322c37382c3131322c37372c3131312c37362c3131302c37362c3130392c37352c3130382c37352c3130372c37352c3130372c37342c3130372c37332c3130372c37322c3130372c37312c3130372c37302c3130372c36392c3130372c36382c3130372c36372c3130372c36362c3130372c36352c3130372c36342c3130362c36332c3130352c36332c3130342c36322c3130332c36322c3130322c36322c3130312c36322c3130312c36312c3130312c36302c3130312c35392c3130312c35382c3130312c35372c3130312c35362c3130312c35352c3130312c35342c3130312c35332c3130312c35322c3130312c35312c3130312c35302c3130312c34392c3130312c34382c3130312c34372c3130312c34362c3130312c34352c3130312c34342c3130312c34332c3130312c34322c3130312c34312c3130312c34302c3130322c33392c3130322c33382c3130322c33372c3130322c33362c3130322c33352c3130322c33342c3130322c33332c3130322c33322c3130322c33312c3130322c33302c3130322c32392c3130322c32382c3130322c32372c3130322c32362c3130322c32352c3130322c32342c3130322c32332c3130322c32322c3130322c32312c3130322c32302c3130322c31392c3130312c31382c3130302c31382c39392c31382c39382c31382c39372c31382c39362c31382c39352c31382c39342c31382c39332c31382c39322c31382c39312c31372c39302c31372c38392c31372c38382c31372c38372c31372c38362c31372c38352c31372c38342c31372c38332c31372c38322c31372c38312c31372c38302c31372c37392c31372c37382c31372c37372c31372c37362c31372c37352c31372c37342c31372c37332c31372c37322c31372c37312c31372c37302c31362c36392c31362c36382c31362c36372c31362c36362c31362c36352c31362c36342c31362c36332c31362c36322c31362c36312c31362c36302c31362c36302c31352c36302c31342c36302c31332c36302c31322c36302c31312c36302c31302c36302c392c36302c382c36302c372c36302c362c36302c352c36302c342c36302c332c36312c332c36322c332c36332c332c36342c332c36352c332c36362c332c36372c332c36382c332c36392c332c37302c332c37312c332c37322c332c37332c332c37342c332c37352c332c37362c332c37372c332c37382c332c37392c332c38302c332c38312c332c38322c332c38332c332c38342c332c38352c332c38362c332c38372c332c38382c332c38392c332c39302c332c39312c332c39322c332c39332c332c39342c332c39352c332c39362c332c39372c332c39382c332c39392c332c3130302c332c3130312c332c3130322c332c3130332c332c3130342c332c3130352c332c3130362c332c3130372c332c3130382c332c3130392c332c3131302c332c3131312c332c3131322c332c3131332c332c3131342c332c3131352c332c3131362c342c3131372c342c3131382c332c3131392c332c3132302c332c3132312c332c3132322c332c3132332c332c3132342c332c3132352c342c3132362c342c3132372c342c3132382c332c3132392c332c3133302c332c3133312c332c3133322c332c3133332c332c3133342c332c3133342c342c3133342c352c3133342c362c3133342c372c3133342c382c3133342c392c3133342c31302c3133342c31312c3133342c31322c3133342c31332c3133342c31342c3133342c31352c3133342c31362c3133342c31372c3133342c31382c3133342c31392c3133342c32302c3133342c32312c3133342c32322c3133342c32332c3133342c32342c3133342c32352c3133342c32362c3133342c32372c3133342c32382c3133342c32392c3133342c33302c3133342c33312c3133342c33322c3133342c33332c3133342c33342c3133342c33352c3133342c33362c3133342c33372c3133342c33382c3133342c33392c3133342c34302c3133342c34312c3133342c34322c3133342c34332c3133342c34342c3133342c34352c3133342c34362c3133342c34372c3133342c34382c3133342c34392c3133342c35302c3133342c35312c3133342c35322c3133342c35332c3133342c35342c3133342c35352c3133342c35362c3133342c35372c3133342c35382c3133342c35392c3133342c36302c3133342c36312c3133342c36322c3133342c36332c3133342c36342c3133342c36352c3133342c36362c3133342c36372c3133342c36382c3133342c36392c3133342c37302c3133342c37312c3133342c37322c3133342c37332c3133342c37342c3133342c37352c3133352c37362c3133362c37362c3133372c37362c3133382c37362c3133392c37362c3134302c37362c3134312c37362c3134322c37362c3134332c37362c3134342c37362c3134352c37362c3134362c37362c3134372c37362c3134382c37362c3134392c37362c3135302c37362c3135312c37362c3135322c37362c3135332c37362c3135342c37362c3135352c37362c3135362c37362c3135372c37362c3135382c37352c3135392c37352c3136302c37352c3136312c37352c3136322c37352c3136332c37352c3136342c37352c3136352c37352c3136362c37352c3136372c37352c3136382c37352c3136392c37352c3137302c37352c3137312c37352c3137322c37352c3137332c37352c3137342c37352c3137352c37352c3137362c37352c3137372c37352c3137382c37352c3137392c37352c3138302c37342c3138302c37352c3138302c37362c3138302c37372c3138302c37382c3138302c37392c3138302c38302c3138302c38312c3138302c38322c3138302c38332c3138302c38342c3138302c38352c3138302c38362c3138302c38372c3138302c38382c3138302c38392c3138302c39302c3138302c39312c3138302c39322c3138302c39332c3138302c39342c3138302c39352c3138302c39362c3138302c39372c3137392c39372c3137382c39382c3137382c39392c3137382c3130302c3137372c3130302c3137362c3130302c3137352c3130302c3137342c3130302c3137332c3130302c3137322c3130302c3137312c3130302c3137302c3130302c3136392c3130302c3136382c3130302c3136372c3130302c3136362c3130302c3136352c3130302c3136342c3130302c3136332c3130302c3136322c3130305d7d2c2235223a7b22636f6f7264696e61746573223a5b3137322c3136382c3137322c3136372c3137322c3136362c3137322c3136352c3137322c3136342c3137322c3136332c3137322c3136322c3137322c3136312c3137322c3136302c3137322c3135392c3137322c3135382c3137322c3135372c3137322c3135362c3137322c3135352c3137322c3135342c3137322c3135332c3137322c3135322c3137322c3135312c3137322c3135302c3137322c3134392c3137322c3134382c3137322c3134372c3137322c3134362c3137322c3134352c3137322c3134342c3137322c3134332c3137322c3134322c3137322c3134312c3137322c3134302c3137322c3133392c3137322c3133382c3137322c3133372c3137322c3133362c3137322c3133352c3137322c3133342c3137332c3133332c3137332c3133322c3137342c3133322c3137352c3133322c3137362c3133322c3137372c3133322c3137382c3133312c3137392c3133302c3137382c3132392c3137382c3132382c3137372c3132372c3137372c3132362c3137362c3132352c3137352c3132342c3137342c3132342c3137332c3132342c3137322c3132342c3137312c3132342c3137302c3132342c3136392c3132342c3136382c3132342c3136372c3132342c3136362c3132342c3136352c3132342c3136342c3132342c3136332c3132342c3136322c3132342c3136312c3132342c3136302c3132342c3135392c3132342c3135382c3132352c3135372c3132362c3135372c3132372c3135372c3132382c3135362c3132382c3135352c3132392c3135342c3133302c3135332c3133312c3135342c3133322c3135342c3133332c3135352c3133342c3135342c3133352c3135342c3133362c3135342c3133372c3135342c3133382c3135332c3133392c3135322c3133392c3135312c3133392c3135302c3133392c3134392c3133392c3134382c3133392c3134372c3133392c3134362c3133392c3134352c3133392c3134342c3133392c3134332c3133392c3134322c3133392c3134312c3133392c3134302c3133392c3133392c3133392c3133382c3133392c3133372c3133392c3133372c3133382c3133362c3133372c3133352c3133362c3133342c3133362c3133342c3133352c3133342c3133342c3133342c3133332c3133342c3133322c3133332c3133312c3133332c3133302c3133322c3132392c3133312c3132382c3133302c3132372c3132392c3132372c3132382c3132372c3132372c3132372c3132362c3132362c3132352c3132362c3132342c3132352c3132332c3132352c3132322c3132352c3132312c3132342c3132302c3132342c3132302c3132332c3132302c3132322c3132302c3132312c3132302c3132302c3132302c3131392c3132302c3131382c3132302c3131372c3132302c3131362c3132302c3131352c3132302c3131342c3132302c3131332c3132302c3131322c3132302c3131312c3132302c3131302c3132302c3130392c3132302c3130382c3132302c3130372c3132302c3130362c3132302c3130352c3132302c3130342c3132302c3130332c3132312c3130332c3132322c3130332c3132332c3130332c3132342c3130332c3132352c3130332c3132362c3130332c3132372c3130332c3132382c3130332c3132392c3130332c3133302c3130332c3133312c3130332c3133322c3130332c3133332c3130332c3133342c3130332c3133352c3130332c3133362c3130332c3133372c3130332c3133382c3130332c3133392c3130332c3134302c3130332c3134312c3130332c3134322c3130332c3134332c3130332c3134342c3130332c3134352c3130332c3134362c3130332c3134372c3130332c3134382c3130332c3134392c3130332c3135302c3130332c3135312c3130332c3135322c3130332c3135332c3130332c3135342c3130332c3135352c3130332c3135362c3130332c3135372c3130332c3135382c3130332c3135392c3130332c3136302c3130332c3136312c3130322c3136322c3130312c3136332c3130312c3136342c3130312c3136352c3130312c3136362c3130312c3136372c3130312c3136382c3130312c3136392c3130312c3137302c3130312c3137312c3130312c3137322c3130312c3137332c3130312c3137342c3130312c3137352c3130312c3137362c3130312c3137372c3130312c3137382c3130312c3137392c3130312c3138302c3130312c3138312c3130312c3138322c3130312c3138332c3130302c3138332c39392c3138342c39392c3138352c39382c3138352c39372c3138352c39362c3138352c39352c3138352c39342c3138352c39332c3138352c39322c3138352c39312c3138352c39302c3138352c38392c3138352c38382c3138352c38372c3138352c38362c3138352c38352c3138352c38342c3138352c38332c3138352c38322c3138352c38312c3138352c38302c3138352c37392c3138352c37382c3138352c37372c3138352c37362c3138352c37352c3138352c37342c3138352c37332c3138352c37322c3138352c37312c3138352c37302c3138352c36392c3138352c36382c3138352c36372c3138352c36362c3138352c36352c3138352c36342c3138352c36332c3138352c36322c3138352c36312c3138352c36302c3138352c35392c3138352c35382c3138352c35372c3138352c35362c3138352c35352c3138352c35342c3138352c35332c3138352c35322c3138352c35312c3138352c35302c3138352c34392c3138352c34382c3138352c34372c3138352c34362c3138352c34352c3138352c34342c3138352c34332c3138352c34322c3138352c34312c3138352c34302c3138352c33392c3138352c33382c3138352c33372c3138352c33362c3138352c33352c3138352c33342c3138352c33332c3138352c33322c3138352c33312c3138352c33302c3138352c32392c3138352c32382c3138352c32372c3138352c32362c3138352c32352c3138352c32342c3138352c32332c3138352c32322c3138352c32312c3138352c32302c3138352c31392c3138352c31382c3138352c31372c3138352c31362c3138352c31352c3138352c31342c3138352c31332c3138352c31322c3138352c31312c3138352c31302c3138352c392c3138352c382c3138352c372c3138352c362c3138352c352c3138362c352c3138372c352c3138382c352c3138392c352c3139302c352c3139312c352c3139322c352c3139332c352c3139342c352c3139352c352c3139362c352c3139372c352c3139382c352c3139392c352c3230302c352c3230312c352c3230322c352c3230332c352c3230342c352c3230352c352c3230362c352c3230372c352c3230382c352c3230392c352c3231302c352c3231312c352c3231322c352c3231332c352c3231342c352c3231352c352c3231362c352c3231372c352c3231382c352c3231392c352c3232302c352c3232312c352c3232322c352c3232332c352c3232342c352c3232352c352c3232362c352c3232372c352c3232382c352c3232392c352c3233302c352c3233312c352c3233322c352c3233332c352c3233342c352c3233352c352c3233362c352c3233372c352c3233382c352c3233392c352c3234302c352c3234312c352c3234322c352c3234332c352c3234342c352c3234352c352c3234362c352c3234372c352c3234382c352c3234392c352c3235302c352c3235312c352c3235322c352c3235332c352c3235342c352c3235352c352c3235362c352c3235372c352c3235382c352c3235392c352c3236302c352c3236302c362c3236312c372c3236322c372c3236332c372c3236342c372c3236352c372c3236362c372c3236372c372c3236382c372c3236392c372c3237302c372c3237312c372c3237322c372c3237332c372c3237342c372c3237352c372c3237362c372c3237372c372c3237382c372c3237392c372c3238302c372c3238312c372c3238322c372c3238332c372c3238342c372c3238352c372c3238362c372c3238372c372c3238382c372c3238392c372c3239302c372c3239312c372c3239322c372c3239332c372c3239342c372c3239352c372c3239362c372c3239372c372c3239382c382c3239392c392c3330302c392c3330312c31302c3330322c31312c3330322c31322c3330322c31332c3330322c31342c3330322c31352c3330322c31362c3330322c31372c3330322c31382c3330322c31392c3330322c32302c3330322c32312c3330322c32322c3330322c32332c3330322c32342c3330322c32352c3330312c32352c3330302c32352c3239392c32342c3239382c32342c3239372c32342c3239362c32342c3239352c32342c3239342c32332c3239332c32332c3239322c32332c3239312c32332c3239302c32332c3238392c32332c3238382c32332c3238372c32332c3238362c32322c3238352c32332c3238342c32332c3238332c32332c3238322c32332c3238312c32322c3238302c32322c3237392c32322c3237382c32312c3237372c32312c3237362c32322c3237352c32322c3237342c32322c3237332c32332c3237322c32332c3237312c32322c3237302c32312c3236392c32302c3236382c32312c3236372c32312c3236362c32312c3236352c32312c3236342c32322c3236332c32322c3236332c32312c3236322c32302c3236312c32312c3236302c32312c3235392c32312c3235382c32312c3235372c32312c3235362c32312c3235352c32312c3235342c32312c3235332c32322c3235332c32332c3235322c32332c3235312c32332c3235302c32332c3234392c32332c3234382c32332c3234372c32332c3234362c32332c3234352c32332c3234342c32332c3234332c32332c3234322c32322c3234312c32322c3234302c32322c3233392c32322c3233382c32322c3233372c32322c3233362c32322c3233352c32322c3233342c32322c3233332c32322c3233322c32322c3233312c32322c3233302c32322c3232392c32322c3232382c32322c3232372c32322c3232362c32322c3232352c32322c3232342c32322c3232332c32322c3232322c32322c3232312c32322c3232302c32322c3231392c32312c3231382c32322c3231372c32322c3231362c32322c3231352c32322c3231342c32322c3231332c32322c3231322c32322c3231312c32312c3231302c32312c3230392c32322c3230382c32322c3230372c32332c3230362c32332c3230352c32342c3230342c32342c3230332c32352c3230322c32362c3230322c32372c3230322c32382c3230322c32392c3230322c33302c3230322c33312c3230312c33312c3230302c33322c3230302c33332c3230302c33342c3230302c33352c3230302c33362c3230302c33372c3230302c33382c3139392c33392c3230302c34302c3230302c34312c3230302c34322c3230302c34332c3230302c34342c3230302c34352c3139392c34362c3139392c34372c3230302c34382c3230302c34392c3230302c35302c3230302c35312c3230302c35322c3230302c35332c3139392c35342c3139382c35352c3139392c35362c3230302c35362c3230302c35372c3230302c35382c3230302c35392c3230302c36302c3230302c36312c3230302c36322c3139392c36322c3139382c36332c3139392c36342c3230302c36352c3230302c36362c3230302c36372c3230302c36382c3230302c36392c3139392c36392c3139382c37302c3139382c37312c3139392c37322c3230302c37322c3230302c37332c3230302c37342c3230302c37352c3230302c37362c3230302c37372c3230302c37382c3139392c37382c3139382c37392c3139392c38302c3230302c38302c3230302c38312c3230302c38322c3230302c38332c3230302c38342c3230302c38352c3230302c38362c3139392c38362c3139382c38372c3139392c38382c3230302c38392c3230302c39302c3230302c39312c3230302c39322c3230302c39332c3139392c39332c3139382c39342c3139382c39352c3139392c39362c3139392c39372c3139392c39382c3139392c39392c3139392c3130302c3139392c3130312c3139392c3130322c3230302c3130332c3230312c3130342c3230312c3130352c3230312c3130362c3230322c3130372c3230322c3130382c3230322c3130392c3230322c3131302c3230332c3131312c3230332c3131322c3230332c3131332c3230332c3131342c3230332c3131352c3230332c3131362c3230332c3131372c3230332c3131382c3230332c3131392c3230322c3132302c3230322c3132312c3230322c3132322c3230322c3132332c3230322c3132342c3230322c3132352c3230322c3132362c3230322c3132372c3230322c3132382c3230322c3132392c3230322c3133302c3230322c3133312c3230312c3133322c3230312c3133332c3230312c3133342c3230312c3133352c3230312c3133362c3230312c3133372c3230312c3133382c3230312c3133392c3230312c3134302c3230312c3134312c3230312c3134322c3230312c3134332c3230312c3134342c3230312c3134352c3230312c3134362c3230312c3134372c3230312c3134382c3230312c3134392c3230312c3135302c3230312c3135312c3230312c3135322c3230312c3135332c3230312c3135342c3230322c3135352c3230322c3135362c3230322c3135372c3230322c3135382c3230332c3135392c3230332c3136302c3230332c3136312c3230332c3136322c3230342c3136332c3230342c3136342c3230342c3136352c3230332c3136362c3230322c3136372c3230312c3136382c3230302c3136382c3139392c3136382c3139382c3136382c3139372c3136382c3139362c3136382c3139352c3136382c3139342c3136382c3139332c3136382c3139322c3136382c3139312c3136382c3139302c3136382c3138392c3136382c3138382c3136382c3138372c3136382c3138362c3136382c3138352c3136382c3138342c3136382c3138332c3136382c3138322c3136382c3138312c3136382c3138302c3136382c3137392c3136382c3137382c3136382c3137372c3136382c3137362c3136382c3137352c3136382c3137342c3136382c3137332c3136385d7d2c2236223a7b22636f6f7264696e61746573223a5b3131372c3136392c3131372c3136382c3131372c3136372c3131372c3136362c3131372c3136352c3131372c3136342c3131372c3136332c3131372c3136322c3131372c3136312c3131372c3136302c3131372c3135392c3131372c3135382c3131372c3135372c3131372c3135362c3131372c3135352c3131372c3135342c3131372c3135332c3131372c3135322c3131372c3135312c3131372c3135302c3131372c3134392c3131372c3134382c3131372c3134372c3131372c3134362c3131382c3134352c3131392c3134352c3132302c3134352c3132312c3134352c3132322c3134352c3132332c3134352c3132342c3134352c3132352c3134352c3132362c3134352c3132372c3134352c3132382c3134352c3132392c3134352c3133302c3134352c3133312c3134352c3133322c3134342c3133332c3134332c3133342c3134332c3133352c3134322c3133362c3134312c3133372c3134302c3133382c3134302c3133392c3134302c3134302c3134302c3134312c3134302c3134322c3134302c3134332c3134302c3134342c3134302c3134352c3134302c3134362c3134302c3134372c3134302c3134382c3134302c3134392c3134302c3135302c3134302c3135312c3134302c3135322c3134302c3135332c3134302c3135342c3133392c3135352c3133382c3135352c3133372c3135352c3133362c3135352c3133352c3135362c3133342c3135352c3133332c3135352c3133322c3135362c3133322c3135372c3133322c3135382c3133322c3135392c3133322c3136302c3133322c3136312c3133322c3136322c3133322c3136332c3133322c3136342c3133322c3136352c3133322c3136362c3133322c3136372c3133322c3136382c3133322c3136382c3133332c3136382c3133342c3136382c3133352c3136372c3133362c3136372c3133372c3136382c3133382c3136382c3133392c3136382c3134302c3136382c3134312c3136382c3134322c3136382c3134332c3136382c3134342c3136382c3134352c3136382c3134362c3136382c3134372c3136382c3134382c3136382c3134392c3136382c3135302c3136382c3135312c3136382c3135322c3136382c3135332c3136382c3135342c3136382c3135352c3136382c3135362c3136382c3135372c3136382c3135382c3136382c3135392c3136382c3136302c3136372c3136312c3136382c3136322c3136382c3136332c3136382c3136342c3136382c3136352c3136382c3136362c3136382c3136372c3136372c3136382c3136362c3136382c3136352c3136382c3136342c3136382c3136332c3136382c3136322c3136382c3136312c3136382c3136302c3136382c3135392c3136382c3135382c3136382c3135372c3136382c3135362c3136382c3135352c3136382c3135342c3136382c3135332c3136382c3135322c3136382c3135312c3136382c3135302c3136382c3134392c3136382c3134382c3136382c3134372c3136382c3134362c3136382c3134352c3136382c3134342c3136382c3134332c3136382c3134322c3136392c3134312c3136392c3134302c3136392c3133392c3136392c3133382c3136392c3133372c3136392c3133362c3136392c3133352c3136392c3133342c3136392c3133332c3136392c3133322c3136392c3133312c3136392c3133302c3136392c3132392c3136392c3132382c3136392c3132372c3136392c3132362c3136392c3132352c3136392c3132342c3136392c3132332c3136392c3132322c3136392c3132312c3136392c3132302c3136392c3131392c3136392c3131382c3136395d7d2c2237223a7b22636f6f7264696e61746573223a5b3139372c3139312c3139372c3139302c3139382c3138392c3139382c3138382c3139382c3138372c3139392c3138362c3139392c3138352c3230302c3138342c3230302c3138332c3230302c3138322c3230312c3138312c3230312c3138302c3230312c3137392c3230322c3137382c3230322c3137372c3230322c3137362c3230332c3137352c3230332c3137342c3230332c3137332c3230342c3137322c3230342c3137312c3230352c3137302c3230352c3136392c3230352c3136382c3230362c3136372c3230362c3136362c3230362c3136352c3230362c3136342c3230362c3136332c3230362c3136322c3230362c3136312c3230362c3136302c3230362c3135392c3230362c3135382c3230362c3135372c3230362c3135362c3230362c3135352c3230362c3135342c3230362c3135332c3230362c3135322c3230362c3135312c3230362c3135302c3230362c3134392c3230362c3134382c3230362c3134372c3230362c3134362c3230362c3134352c3230362c3134342c3230362c3134332c3230362c3134322c3230362c3134312c3230362c3134302c3230362c3133392c3230362c3133382c3230362c3133372c3230362c3133362c3230362c3133352c3230362c3133342c3230362c3133332c3230362c3133322c3230362c3133312c3230362c3133302c3230362c3132392c3230362c3132382c3230362c3132372c3230362c3132362c3230362c3132352c3230362c3132342c3230362c3132332c3230362c3132322c3230362c3132312c3230362c3132302c3230352c3131392c3230342c3131392c3230342c3131382c3230342c3131372c3230342c3131362c3230342c3131352c3230342c3131342c3230342c3131332c3230342c3131322c3230342c3131312c3230332c3131302c3230332c3130392c3230332c3130382c3230332c3130372c3230322c3130362c3230322c3130352c3230322c3130342c3230322c3130332c3230322c3130322c3230322c3130312c3230322c3130302c3230322c39392c3230322c39382c3230322c39372c3230322c39362c3230322c39352c3230322c39342c3230322c39332c3230322c39322c3230322c39312c3230322c39302c3230322c38392c3230322c38382c3230322c38372c3230322c38362c3230322c38352c3230322c38342c3230322c38332c3230322c38322c3230322c38312c3230322c38302c3230322c37392c3230322c37382c3230322c37372c3230322c37362c3230322c37352c3230322c37342c3230322c37332c3230322c37322c3230322c37312c3230322c37302c3230322c36392c3230322c36382c3230322c36372c3230322c36362c3230322c36352c3230322c36342c3230322c36332c3230322c36322c3230322c36312c3230322c36302c3230322c35392c3230322c35382c3230322c35372c3230322c35362c3230322c35352c3230322c35342c3230322c35332c3230322c35322c3230322c35312c3230322c35302c3230322c34392c3230322c34382c3230322c34372c3230322c34362c3230322c34352c3230332c34352c3230342c34352c3230352c34342c3230342c34332c3230332c34332c3230322c34322c3230322c34312c3230322c34302c3230332c33392c3230332c33382c3230332c33372c3230322c33362c3230322c33352c3230332c33342c3230342c33332c3230352c33322c3230362c33312c3230372c33302c3230382c32392c3230392c32382c3231302c32372c3231312c32362c3231322c32352c3231332c32352c3231342c32352c3231352c32352c3231362c32352c3231372c32352c3231382c32352c3231392c32352c3232302c32352c3232312c32352c3232322c32352c3232332c32352c3232342c32352c3232352c32352c3232362c32352c3232372c32352c3232382c32352c3232392c32352c3233302c32352c3233312c32352c3233322c32352c3233332c32352c3233342c32352c3233352c32352c3233362c32352c3233372c32362c3233382c32362c3233392c32362c3233392c32372c3233392c32382c3234302c32392c3234302c33302c3234302c33312c3234312c33322c3234312c33332c3234312c33342c3234312c33352c3234322c33362c3234332c33362c3234342c33362c3234352c33362c3234362c33362c3234372c33362c3234382c33362c3234392c33362c3235302c33362c3235312c33362c3235322c33362c3235332c33362c3235342c33362c3235352c33362c3235362c33362c3235372c33362c3235382c33362c3235392c33362c3236302c33352c3236302c33342c3236312c33332c3236312c33322c3236312c33312c3236312c33302c3236312c32392c3236312c32382c3236312c32372c3236322c32362c3236322c32352c3236322c32342c3236322c32332c3236332c32332c3236342c32332c3236352c32332c3236362c32332c3236372c32342c3236382c32342c3236392c32342c3237302c32342c3237312c32342c3237322c32342c3237332c32342c3237342c32342c3237352c32342c3237362c32342c3237372c32352c3237382c32352c3237392c32352c3238302c32352c3238312c32352c3238322c32352c3238332c32352c3238342c32352c3238352c32352c3238362c32352c3238372c32352c3238382c32352c3238392c32352c3239302c32362c3239312c32362c3239322c32362c3239332c32362c3239342c32362c3239352c32362c3239362c32362c3239372c32362c3239382c32362c3239392c32362c3330302c32362c3330312c32362c3330312c32372c3330312c32382c3330312c32392c3330312c33302c3330312c33312c3330312c33322c3330312c33332c3330312c33342c3330312c33352c3330312c33362c3330312c33372c3330312c33382c3330312c33392c3330312c34302c3330312c34312c3330312c34322c3330312c34332c3330312c34342c3330312c34352c3330312c34362c3330312c34372c3330312c34382c3330312c34392c3330312c35302c3330312c35312c3330312c35322c3330312c35332c3330312c35342c3330312c35352c3330312c35362c3330312c35372c3330312c35382c3330312c35392c3330312c36302c3330312c36312c3330312c36322c3330312c36332c3330312c36342c3330312c36352c3330312c36362c3330312c36372c3330312c36382c3330312c36392c3330312c37302c3330312c37312c3330312c37322c3330312c37332c3330312c37342c3330312c37352c3330312c37362c3330312c37372c3330312c37382c3330312c37392c3330312c38302c3330312c38312c3330312c38322c3330312c38332c3330312c38342c3330312c38352c3330312c38362c3330312c38372c3330312c38382c3330312c38392c3330312c39302c3330312c39312c3330312c39322c3330312c39332c3330312c39342c3330312c39352c3330312c39362c3330312c39372c3330312c39382c3330312c39392c3330312c3130302c3330312c3130312c3330312c3130322c3330312c3130332c3330312c3130342c3330312c3130352c3330302c3130352c3239392c3130352c3239382c3130352c3239372c3130352c3239362c3130352c3239352c3130352c3239342c3130352c3239332c3130352c3239322c3130352c3239312c3130352c3239302c3130352c3238392c3130352c3238382c3130352c3238372c3130352c3238362c3130352c3238352c3130352c3238342c3130352c3238332c3130352c3238322c3130352c3238322c3130342c3238332c3130332c3238332c3130322c3238332c3130312c3238342c3130302c3238342c39392c3238352c39382c3238352c39372c3238352c39362c3238362c39352c3238362c39342c3238362c39332c3238372c39322c3238372c39312c3238382c39302c3238382c38392c3238382c38382c3238392c38372c3238392c38362c3238382c38352c3238372c38352c3238362c38342c3238352c38342c3238342c38332c3238332c38332c3238322c38322c3238312c38322c3238302c38312c3237392c38322c3237392c38332c3237382c38342c3237382c38352c3237372c38362c3237372c38372c3237362c38382c3237362c38392c3237352c39302c3237352c39312c3237342c39322c3237342c39332c3237332c39342c3237332c39352c3237322c39362c3237322c39372c3237312c39382c3237322c39392c3237322c3130302c3237332c3130312c3237332c3130322c3237342c3130332c3237352c3130342c3237362c3130342c3237372c3130352c3237382c3130352c3237392c3130352c3237382c3130352c3237372c3130352c3237362c3130352c3237352c3130352c3237342c3130352c3237332c3130352c3237322c3130352c3237312c3130352c3237302c3130352c3236392c3130352c3236382c3130352c3236372c3130352c3236362c3130342c3236352c3130342c3236342c3130342c3236332c3130342c3236322c3130342c3236312c3130342c3236302c3130342c3235392c3130342c3235382c3130342c3235372c3130342c3235362c3130342c3235352c3130342c3235342c3130342c3235332c3130352c3235332c3130362c3235322c3130372c3235312c3130372c3235302c3130372c3234392c3130372c3234382c3130372c3234372c3130372c3234362c3130372c3234352c3130372c3234342c3130372c3234332c3130372c3234322c3130382c3234322c3130392c3234322c3131302c3234322c3131312c3234322c3131322c3234312c3131322c3234302c3131322c3233392c3131332c3233382c3131332c3233372c3131342c3233372c3131352c3233372c3131362c3233372c3131372c3233372c3131382c3233372c3131392c3233372c3132302c3233372c3132312c3233372c3132322c3233372c3132332c3233372c3132342c3233372c3132352c3233372c3132362c3233372c3132372c3233372c3132382c3233372c3132392c3233372c3133302c3233372c3133312c3233372c3133322c3233372c3133332c3233372c3133342c3233372c3133352c3233372c3133362c3233372c3133372c3233372c3133382c3233372c3133392c3233372c3134302c3233362c3134312c3233362c3134322c3233362c3134332c3233362c3134342c3233362c3134352c3233362c3134362c3233362c3134372c3233362c3134382c3233362c3134392c3233362c3135302c3233362c3135312c3233362c3135322c3233362c3135332c3233362c3135342c3233362c3135352c3233362c3135362c3233362c3135372c3233362c3135382c3233362c3135392c3233362c3136302c3233362c3136312c3233362c3136322c3233362c3136332c3233362c3136342c3233362c3136352c3233362c3136362c3233362c3136372c3233362c3136382c3233362c3136392c3233362c3137302c3233362c3137312c3233362c3137322c3233362c3137332c3233362c3137342c3233362c3137352c3233362c3137362c3233362c3137372c3233362c3137382c3233362c3137392c3233352c3137392c3233342c3137392c3233332c3137392c3233322c3137392c3233312c3137392c3233302c3137392c3232392c3137392c3232382c3137392c3232372c3137392c3232362c3137392c3232352c3137392c3232342c3137392c3232332c3137392c3232322c3137392c3232312c3137392c3232302c3137392c3231392c3137392c3231382c3137392c3231372c3137392c3231362c3137392c3231352c3137392c3231342c3137392c3231332c3137392c3231322c3137392c3231332c3137382c3231332c3137372c3231322c3137362c3231312c3137352c3231302c3137352c3230392c3137362c3230382c3137372c3230382c3137382c3230372c3137392c3230372c3138302c3230362c3138312c3230362c3138322c3230352c3138332c3230352c3138342c3230342c3138352c3230342c3138362c3230332c3138372c3230332c3138382c3230322c3138392c3230312c3138392c3230302c3139302c3139392c3139302c3139382c3139315d7d7d2c2276657273696f6e223a22312e302e30227d",mockMapData3:"7b226964223a322c22737461747573223a312c227265736f6c7574696f6e223a352c2273697a65223a5b3233372c3239325d2c226f726967696e223a5b3231302c3134375d2c2263686172676572223a7b22636f6f7264696e617465223a5b3231382c3134355d2c22616e676c65223a307d2c22636172706574223a5b7b22636f6f7264696e61746573223a5b5d2c227479706573223a307d5d2c226f62737461636c6573223a5b7b22636f6f7264696e61746573223a5b35362c312c3130382c312c3130392c312c3131302c312c3131312c312c3131322c312c3131332c312c33372c322c33382c322c33392c322c34302c322c34312c322c34322c322c34332c322c34342c322c34352c322c34362c322c34372c322c34382c322c34392c322c35302c322c35312c322c35322c322c35332c322c35342c322c35352c322c35362c322c35372c322c35382c322c35392c322c36302c322c36312c322c36322c322c36332c322c36342c322c36352c322c36362c322c36372c322c36382c322c36392c322c37302c322c37312c322c37322c322c37332c322c37342c322c37352c322c37362c322c37372c322c37382c322c37392c322c38302c322c38312c322c38322c322c38332c322c38342c322c38352c322c38362c322c38372c322c38382c322c38392c322c39302c322c39312c322c39322c322c39332c322c39342c322c39352c322c39362c322c39372c322c39382c322c39392c322c3130302c322c3130312c322c3130322c322c3130332c322c3130342c322c3130362c322c3130372c322c3130382c322c3131332c322c3131342c322c3131392c322c3132302c322c3132312c322c3132322c322c3132332c322c3132342c322c3132352c322c3132362c322c3132372c322c3132382c322c3132392c322c3133302c322c3133312c322c3133322c322c3133332c322c3133342c322c3133352c322c3133362c322c3133372c322c3133382c322c33372c332c39352c332c39362c332c3130342c332c3130352c332c3130362c332c3131342c332c3131352c332c3131392c332c3133382c332c3136372c332c33372c342c3131352c342c3131392c342c3133382c342c3136372c342c3136382c342c3136392c342c3137302c342c3137312c342c3137322c342c3137332c342c3137342c342c3137352c342c3137362c342c3137372c342c3137382c342c3137392c342c3138302c342c3138312c342c3138322c342c3138332c342c3138342c342c3138352c342c3138362c342c3138372c342c3138382c342c3138392c342c3139302c342c3139312c342c3139322c342c3139332c342c3139342c342c3139352c342c3139362c342c3139372c342c3139382c342c3139392c342c3230302c342c3230312c342c3230322c342c3230332c342c3230342c342c3230352c342c3230362c342c3230372c342c3230382c342c3230392c342c3231302c342c3231312c342c3231322c342c3231332c342c3231342c342c3231352c342c3231362c342c3231372c342c3231382c342c3231392c342c3232302c342c3232312c342c3232322c342c3232332c342c3232342c342c3232352c342c3232362c342c3232372c342c3232382c342c3232392c342c3233302c342c3233312c342c3233322c342c3233332c342c3233342c342c3233352c342c3233362c342c3233372c342c3233382c342c3233392c342c3234302c342c3234312c342c3234322c342c3234332c342c3234342c342c3234352c342c3234362c342c3234372c342c3234382c342c3234392c342c3235302c342c3235312c342c3235322c342c3235332c342c3235342c342c3235352c342c3235362c342c3235372c342c3235382c342c3235392c342c3236302c342c3236312c342c3236322c342c3236332c342c3236342c342c3236352c342c3236362c342c3236372c342c3236382c342c3236392c342c3237302c342c3237312c342c3237322c342c3237332c342c3237342c342c3237352c342c3237362c342c3237372c342c3237382c342c3237392c342c3238302c342c33372c352c3131352c352c3131392c352c3133382c352c3133392c352c3136372c352c3238302c352c33372c362c3131352c362c3131392c362c3133392c362c3134302c362c3134312c362c3134322c362c3134332c362c3134342c362c3134352c362c3134362c362c3134372c362c3134382c362c3134392c362c3135302c362c3135312c362c3135322c362c3135332c362c3135342c362c3135352c362c3135362c362c3135372c362c3135382c362c3135392c362c3136302c362c3136312c362c3136322c362c3136332c362c3136342c362c3136352c362c3136372c362c3238352c362c33372c372c3131352c372c3131392c372c3136352c372c3136362c372c3136372c372c3238342c372c3238352c372c3238362c372c33372c382c3131352c382c3131392c382c3136352c382c3136362c382c3238342c382c33372c392c3131352c392c3131392c392c3136352c392c3136362c392c3238342c392c33372c31302c3131352c31302c3131392c31302c3136352c31302c3136362c31302c3238342c31302c33372c31312c3131352c31312c3131392c31312c3136352c31312c3136362c31312c3136372c31312c3238342c31312c33372c31322c3130342c31322c3130352c31322c3130362c31322c3131342c31322c3131352c31322c3131392c31322c3136312c31322c3136352c31322c3136362c31322c3238342c31322c33372c31332c3131352c31332c3131392c31332c3136312c31332c3136352c31332c3136362c31332c3238342c31332c33372c31342c33382c31342c3131352c31342c3131392c31342c3136312c31342c3136352c31342c3238342c31342c33382c31352c33392c31352c34302c31352c34312c31352c34322c31352c34332c31352c34342c31352c34352c31352c34362c31352c34372c31352c34382c31352c34392c31352c35302c31352c35312c31352c35322c31352c35332c31352c35342c31352c35352c31352c35362c31352c35372c31352c35382c31352c35392c31352c36302c31352c36312c31352c36322c31352c36332c31352c36342c31352c36352c31352c36362c31352c36372c31352c36382c31352c36392c31352c37302c31352c37312c31352c37322c31352c37332c31352c37342c31352c37352c31352c37362c31352c37372c31352c37382c31352c37392c31352c38302c31352c38312c31352c3131352c31352c3131392c31352c3136312c31352c3136352c31352c3238342c31352c38322c31362c3131352c31362c3131392c31362c3136312c31362c3136352c31362c3139352c31362c3139362c31362c3139372c31362c3238342c31362c38322c31372c3131352c31372c3131392c31372c3136312c31372c3136352c31372c3139352c31372c3139362c31372c3139372c31372c3139382c31372c3139392c31372c3238342c31372c38322c31382c3131352c31382c3131392c31382c3136312c31382c3136352c31382c3139342c31382c3139352c31382c3139392c31382c3238342c31382c38322c31392c3131352c31392c3131392c31392c3136312c31392c3136352c31392c3139392c31392c3238342c31392c38322c32302c3131352c32302c3131392c32302c3136312c32302c3136352c32302c3139332c32302c3139392c32302c3238342c32302c38322c32312c3131352c32312c3131392c32312c3136312c32312c3136352c32312c3139332c32312c3139392c32312c3230302c32312c3230312c32312c3230382c32312c3231362c32312c3231372c32312c3233372c32312c3234352c32312c3236312c32312c3238342c32312c38322c32322c3131352c32322c3131392c32322c3136312c32322c3136352c32322c3138362c32322c3138372c32322c3138382c32322c3138392c32322c3139302c32322c3139312c32322c3139322c32322c3139332c32322c3139342c32322c3139352c32322c3139362c32322c3139372c32322c3139382c32322c3139392c32322c3230312c32322c3230322c32322c3230332c32322c3230342c32322c3230352c32322c3230362c32322c3230372c32322c3230382c32322c3230392c32322c3231302c32322c3231312c32322c3231362c32322c3231372c32322c3232372c32322c3233362c32322c3233372c32322c3234332c32322c3234342c32322c3234352c32322c3234362c32322c3234372c32322c3234382c32322c3234392c32322c3235302c32322c3235312c32322c3235322c32322c3235332c32322c3235342c32322c3235352c32322c3235362c32322c3235372c32322c3235382c32322c3235392c32322c3236302c32322c3236312c32322c3236322c32322c3236332c32322c3236342c32322c3236352c32322c3236362c32322c3236372c32322c3236382c32322c3236392c32322c3237302c32322c3237312c32322c3237322c32322c3237332c32322c3237342c32322c3237352c32322c3237362c32322c3237372c32322c3237382c32322c3237392c32322c3238302c32322c3238312c32322c3238322c32322c3238332c32322c3238342c32322c38322c32332c3131352c32332c3131392c32332c3136312c32332c3136352c32332c3138362c32332c3139342c32332c3139352c32332c3139362c32332c3139372c32332c3139382c32332c3139392c32332c3230302c32332c3230312c32332c3230322c32332c3230332c32332c3230342c32332c3230352c32332c3230362c32332c3230372c32332c3230382c32332c3230392c32332c3231302c32332c3231312c32332c3231322c32332c3231332c32332c3231342c32332c3231352c32332c3231362c32332c3231372c32332c3231382c32332c3231392c32332c3232302c32332c3232312c32332c3232322c32332c3232332c32332c3232342c32332c3232352c32332c3232362c32332c3232372c32332c3232382c32332c3232392c32332c3233302c32332c3233312c32332c3233322c32332c3233332c32332c3233342c32332c3233352c32332c3233362c32332c3233372c32332c3233382c32332c3233392c32332c3234302c32332c3234312c32332c3234322c32332c3234332c32332c3234342c32332c3234352c32332c3234362c32332c3234372c32332c3234382c32332c3234392c32332c3235302c32332c3235312c32332c3235322c32332c3235332c32332c3235342c32332c3235352c32332c3235362c32332c3235372c32332c3235382c32332c3235392c32332c3236302c32332c3236312c32332c3236322c32332c3236332c32332c3236342c32332c3236352c32332c3236362c32332c3236372c32332c3236382c32332c3236392c32332c3237302c32332c3237312c32332c3237322c32332c3237332c32332c3237342c32332c3237352c32332c3237362c32332c3237372c32332c3237382c32332c3237392c32332c3238302c32332c3238312c32332c3238322c32332c3238332c32332c3238342c32332c38322c32342c3131352c32342c3131392c32342c3136312c32342c3136352c32342c3138362c32342c3139322c32342c3139332c32342c3139342c32342c3230312c32342c3232312c32342c3232322c32342c3232332c32342c3234332c32342c3234342c32342c3238342c32342c38322c32352c3131352c32352c3131392c32352c3136312c32352c3136352c32352c3138362c32352c3139322c32352c3232332c32352c3232342c32352c3234332c32352c3238342c32352c38322c32362c3131352c32362c3131392c32362c3136312c32362c3136352c32362c3138352c32362c3138362c32362c3139322c32362c3232342c32362c3234332c32362c3238342c32362c38322c32372c3131352c32372c3131392c32372c3136312c32372c3136352c32372c3138352c32372c3139322c32372c3232342c32372c3234332c32372c3238342c32372c38322c32382c3131352c32382c3131392c32382c3136312c32382c3136352c32382c3138352c32382c3138362c32382c3138372c32382c3138382c32382c3138392c32382c3139302c32382c3139312c32382c3139322c32382c3232342c32382c3234332c32382c3238342c32382c38322c32392c3131352c32392c3131392c32392c3136312c32392c3136352c32392c3138342c32392c3138352c32392c3138362c32392c3232342c32392c3234332c32392c3238342c32392c38322c33302c3131352c33302c3131392c33302c3136312c33302c3136352c33302c3138322c33302c3138332c33302c3138342c33302c3138352c33302c3234332c33302c3238342c33302c38322c33312c3131352c33312c3131392c33312c3136312c33312c3136352c33312c3138342c33312c3138352c33312c3234332c33312c3238342c33312c38322c33322c3131352c33322c3131392c33322c3136312c33322c3136352c33322c3138342c33322c3234332c33322c3238342c33322c38322c33332c3131352c33332c3131392c33332c3136312c33332c3136352c33332c3138342c33332c3232342c33332c3232352c33332c3232372c33332c3232382c33332c3232392c33332c3233302c33332c3233312c33332c3233322c33332c3233332c33332c3233342c33332c3233352c33332c3233362c33332c3233372c33332c3233382c33332c3233392c33332c3234302c33332c3234312c33332c3234322c33332c3234332c33332c3238342c33332c38322c33342c3131352c33342c3131392c33342c3136312c33342c3136352c33342c3138342c33342c3232342c33342c3232352c33342c3232362c33342c3232372c33342c3238342c33342c38322c33352c3131352c33352c3131392c33352c3136312c33352c3136352c33352c3138342c33352c3238342c33352c38322c33362c3131352c33362c3131392c33362c3136312c33362c3136352c33362c3138342c33362c3238342c33362c38322c33372c3131352c33372c3131392c33372c3136312c33372c3136352c33372c3138342c33372c3238342c33372c38322c33382c3131312c33382c3131352c33382c3131392c33382c3136312c33382c3136352c33382c3138322c33382c3138332c33382c3138342c33382c3238342c33382c38322c33392c3131342c33392c3131352c33392c3131392c33392c3136312c33392c3136352c33392c3138332c33392c3138342c33392c3238342c33392c38322c34302c3131352c34302c3131392c34302c3136312c34302c3136352c34302c3138332c34302c3138342c34302c3238342c34302c38322c34312c3131352c34312c3131392c34312c3136312c34312c3136352c34312c3138332c34312c3138342c34312c3238342c34312c38322c34322c3131352c34322c3131392c34322c3136312c34322c3136352c34322c3138332c34322c3138342c34322c3138352c34322c3138362c34322c3238342c34322c38322c34332c3131352c34332c3131392c34332c3136312c34332c3136352c34332c3138332c34332c3138342c34332c3238342c34332c38322c34342c3131352c34342c3131392c34342c3136312c34342c3136352c34342c3138332c34342c3138342c34342c3238342c34342c38322c34352c3131352c34352c3131392c34352c3136312c34352c3136352c34352c3138332c34352c3238342c34352c38322c34362c3131352c34362c3131392c34362c3136312c34362c3136352c34362c3138322c34362c3138332c34362c3238342c34362c38322c34372c3131352c34372c3131392c34372c3136312c34372c3136352c34372c3138332c34372c3238342c34372c38322c34382c38362c34382c3131352c34382c3131392c34382c3136312c34382c3136352c34382c3138332c34382c3238342c34382c38322c34392c3131312c34392c3131322c34392c3131332c34392c3131342c34392c3131352c34392c3131392c34392c3136312c34392c3136352c34392c3138332c34392c3238342c34392c38322c35302c3131312c35302c3131392c35302c3136312c35302c3136352c35302c3138332c35302c3238342c35302c38322c35312c3131312c35312c3131392c35312c3136312c35312c3136352c35312c3138332c35312c3238342c35312c38322c35322c3131312c35322c3131392c35322c3136312c35322c3136352c35322c3138332c35322c3233362c35322c3238342c35322c38322c35332c3131312c35332c3131322c35332c3131392c35332c3136312c35332c3136352c35332c3138332c35332c3233362c35332c3238342c35332c38322c35342c3131322c35342c3131332c35342c3131342c35342c3131352c35342c3131392c35342c3136312c35342c3136352c35342c3138312c35342c3138322c35342c3138332c35342c3238342c35342c38322c35352c3131352c35352c3131392c35352c3136312c35352c3136352c35352c3138312c35352c3138322c35352c3138332c35352c3238342c35352c38312c35362c38322c35362c3131352c35362c3131392c35362c3136312c35362c3136352c35362c3138332c35362c3238342c35362c38302c35372c38312c35372c3131352c35372c3131392c35372c3136312c35372c3136352c35372c3138332c35372c3238342c35372c38302c35382c3131352c35382c3131392c35382c3136312c35382c3136352c35382c3138332c35382c3232332c35382c3233372c35382c3238342c35382c38302c35392c3131352c35392c3131392c35392c3136312c35392c3136352c35392c3138332c35392c3138342c35392c3234362c35392c3238342c35392c38302c36302c3131352c36302c3131382c36302c3131392c36302c3132342c36302c3136312c36302c3136352c36302c3138332c36302c3238342c36302c38302c36312c3131352c36312c3131392c36312c3132302c36312c3132312c36312c3132322c36312c3132332c36312c3132342c36312c3132352c36312c3132362c36312c3132372c36312c3132382c36312c3132392c36312c3133302c36312c3133312c36312c3133322c36312c3133332c36312c3133342c36312c3133352c36312c3133362c36312c3133372c36312c3133382c36312c3133392c36312c3134302c36312c3134312c36312c3134322c36312c3136312c36312c3136352c36312c3138332c36312c3139392c36312c3230302c36312c3230312c36312c3238342c36312c34332c36322c34342c36322c35322c36322c35332c36322c35342c36322c35352c36322c35362c36322c35372c36322c35382c36322c35392c36322c36302c36322c36312c36322c36322c36322c36332c36322c36342c36322c36352c36322c36362c36322c36372c36322c36382c36322c36392c36322c37302c36322c37312c36322c37322c36322c37332c36322c37342c36322c37352c36322c37362c36322c37372c36322c37382c36322c37392c36322c38302c36322c3131352c36322c3134322c36322c3136312c36322c3136352c36322c3138312c36322c3138322c36322c3138332c36322c3138382c36322c3238342c36322c34342c36332c3131352c36332c3132382c36332c3134322c36332c3136312c36332c3136352c36332c3138312c36332c3138322c36332c3138332c36332c3238342c36332c34342c36342c3131352c36342c3131382c36342c3132382c36342c3132392c36342c3133302c36342c3133312c36342c3133322c36342c3133332c36342c3133342c36342c3133352c36342c3133362c36342c3133372c36342c3133382c36342c3133392c36342c3134302c36342c3134312c36342c3134322c36342c3136312c36342c3136352c36342c3138332c36342c3238342c36342c34342c36352c3131342c36352c3131352c36352c3131382c36352c3136312c36352c3136352c36352c3138332c36352c3238342c36352c34342c36362c3131352c36362c3131382c36362c3136312c36362c3136352c36362c3138332c36362c3238342c36362c34342c36372c3131352c36372c3131382c36372c3136312c36372c3136352c36372c3138332c36372c3232332c36372c3233372c36372c3238342c36372c34342c36382c3131352c36382c3131382c36382c3136312c36382c3136352c36382c3138332c36382c3231332c36382c3232332c36382c3234362c36382c3238342c36382c34342c36392c3131352c36392c3131382c36392c3136312c36392c3136352c36392c3138332c36392c3238342c36392c34342c37302c3131352c37302c3131382c37302c3136312c37302c3136352c37302c3138312c37302c3138322c37302c3138332c37302c3238342c37302c34342c37312c36362c37312c36372c37312c36382c37312c36392c37312c3131352c37312c3131382c37312c3136312c37312c3136352c37312c3138332c37312c3238342c37312c34342c37322c36382c37322c36392c37322c3131342c37322c3131352c37322c3133312c37322c3133322c37322c3133332c37322c3133342c37322c3133352c37322c3133362c37322c3133372c37322c3133382c37322c3133392c37322c3134302c37322c3134312c37322c3134322c37322c3136312c37322c3136352c37322c3138332c37322c3232342c37322c3233362c37322c3238342c37322c34342c37332c36382c37332c36392c37332c38372c37332c38382c37332c38392c37332c39302c37332c39312c37332c39322c37332c39332c37332c39342c37332c3131342c37332c3131352c37332c3133312c37332c3134322c37332c3136312c37332c3136352c37332c3138332c37332c3232332c37332c3232342c37332c3232352c37332c3233352c37332c3233362c37332c3238342c37332c34342c37342c34352c37342c34362c37342c34372c37342c34382c37342c34392c37342c35302c37342c35312c37342c35322c37342c35332c37342c35342c37342c35352c37342c35362c37342c35372c37342c35382c37342c35392c37342c36302c37342c36312c37342c36322c37342c36332c37342c36342c37342c36382c37342c36392c37342c38372c37342c39342c37342c3131352c37342c3134322c37342c3136312c37342c3136352c37342c3138332c37342c3232352c37342c3233342c37342c3238342c37342c36342c37352c36382c37352c36392c37352c38372c37352c39342c37352c3131352c37352c3131362c37352c3131372c37352c3131382c37352c3131392c37352c3132302c37352c3132312c37352c3132322c37352c3132332c37352c3132342c37352c3132352c37352c3132362c37352c3132372c37352c3132382c37352c3132392c37352c3133302c37352c3133312c37352c3133322c37352c3133332c37352c3133342c37352c3133352c37352c3133362c37352c3133372c37352c3133382c37352c3133392c37352c3134302c37352c3134312c37352c3134322c37352c3136312c37352c3136352c37352c3138332c37352c3238342c37352c32382c37362c32392c37362c36342c37362c36382c37362c36392c37362c38372c37362c39342c37362c3136312c37362c3136352c37362c3138332c37362c3230312c37362c3238342c37362c32392c37372c33302c37372c33312c37372c33382c37372c33392c37372c34302c37372c34312c37372c34322c37372c34332c37372c34342c37372c34352c37372c34362c37372c34372c37372c34382c37372c34392c37372c35302c37372c35312c37372c35322c37372c35332c37372c35342c37372c35352c37372c35362c37372c35372c37372c35382c37372c35392c37372c36302c37372c36312c37372c36322c37372c36332c37372c36342c37372c36352c37372c36362c37372c36372c37372c36382c37372c38372c37372c39342c37372c3136312c37372c3136352c37372c3138332c37372c3138392c37372c3230302c37372c3230312c37372c3238342c37372c372c37382c31332c37382c31342c37382c31352c37382c31362c37382c31372c37382c31382c37382c31392c37382c32302c37382c32312c37382c32322c37382c32332c37382c32342c37382c33322c37382c33332c37382c33342c37382c33352c37382c33362c37382c33372c37382c33382c37382c38372c37382c39342c37382c3136312c37382c3136352c37382c3138312c37382c3138322c37382c3138332c37382c3236322c37382c3238342c37382c38372c37392c39342c37392c3136312c37392c3136352c37392c3138312c37392c3138322c37392c3138332c37392c3236312c37392c3236322c37392c3236332c37392c3236342c37392c3238342c37392c38372c38302c39342c38302c3136312c38302c3136352c38302c3138332c38302c3236312c38302c3236342c38302c3238342c38302c38372c38312c39342c38312c3136312c38312c3136352c38312c3138332c38312c3138342c38312c3138352c38312c3236312c38312c3236342c38312c3236352c38312c3236362c38312c3236372c38312c3236382c38312c3236392c38312c3237302c38312c3238342c38312c38372c38322c39342c38322c3136312c38322c3136352c38322c3138332c38322c3138352c38322c3233342c38322c3236302c38322c3236312c38322c3237302c38322c3237312c38322c3238342c38322c38372c38332c39342c38332c3136312c38332c3136352c38332c3136362c38332c3138332c38332c3138342c38332c3138352c38332c3138362c38332c3139372c38332c3139382c38332c3232342c38332c3232352c38332c3233332c38332c3233342c38332c3236302c38332c3237312c38332c3238342c38332c33362c38342c38372c38342c39342c38342c3136312c38342c3136352c38342c3138332c38342c3235392c38342c3236302c38342c3237302c38342c3237312c38342c3238342c38342c33362c38352c38372c38352c39342c38352c3136312c38352c3136352c38352c3138322c38352c3138332c38352c3235392c38352c3237302c38352c3238342c38352c33362c38362c38372c38362c39342c38362c3136312c38362c3136352c38362c3138312c38362c3138322c38362c3138332c38362c3235392c38362c3237302c38362c3238342c38362c33362c38372c38372c38372c39342c38372c3136312c38372c3136352c38372c3138312c38372c3138322c38372c3138332c38372c3235382c38372c3235392c38372c3238342c38372c33362c38382c38372c38382c39342c38382c3136312c38382c3136352c38382c3138322c38382c3138332c38382c3235382c38382c3236392c38382c3238342c38382c33362c38392c38372c38392c39342c38392c3136312c38392c3136352c38392c3138322c38392c3138332c38392c3235372c38392c3235382c38392c3236392c38392c3238342c38392c33362c39302c38372c39302c39342c39302c3136312c39302c3136352c39302c3138322c39302c3138332c39302c3235372c39302c3236382c39302c3236392c39302c3238342c39302c33362c39312c33372c39312c33382c39312c33392c39312c38372c39312c39342c39312c3136312c39312c3136352c39312c3138322c39312c3138332c39312c3235372c39312c3236382c39312c3238342c39312c33382c39322c33392c39322c38372c39322c39342c39322c3136312c39322c3136352c39322c3138322c39322c3138332c39322c3235372c39322c3236382c39322c3238342c39322c33382c39332c38372c39332c39342c39332c3136312c39332c3136352c39332c3138322c39332c3138332c39332c3235372c39332c3236382c39332c3238342c39332c33362c39342c33372c39342c33382c39342c38372c39342c39342c39342c3136312c39342c3136352c39342c3138302c39342c3138312c39342c3138322c39342c3138332c39342c3235372c39342c3236382c39342c3238342c39342c33362c39352c38372c39352c39342c39352c3136312c39352c3136352c39352c3138322c39352c3138332c39352c3235352c39352c3235362c39352c3235372c39352c3236372c39352c3236382c39352c3238342c39352c38372c39362c39342c39362c3136312c39362c3136352c39362c3138322c39362c3138332c39362c3235352c39362c3236352c39362c3236362c39362c3238342c39362c38372c39372c39342c39372c3136312c39372c3136352c39372c3138322c39372c3138332c39372c3235342c39372c3235352c39372c3236352c39372c3238342c39372c35382c39382c35392c39382c36302c39382c36312c39382c36322c39382c36332c39382c36342c39382c36352c39382c36362c39382c36372c39382c36382c39382c36392c39382c37302c39382c37312c39382c37322c39382c37332c39382c37342c39382c37352c39382c37362c39382c37372c39382c37382c39382c37392c39382c38302c39382c38312c39382c38322c39382c38332c39382c38342c39382c38352c39382c38362c39382c38372c39382c38382c39382c38392c39382c39302c39382c39312c39382c39322c39382c39342c39382c39352c39382c39362c39382c39372c39382c39382c39382c39392c39382c3130302c39382c3130312c39382c3130322c39382c3130332c39382c3130342c39382c3130352c39382c3130362c39382c3130372c39382c3130382c39382c3130392c39382c3131302c39382c3131312c39382c3131322c39382c3131332c39382c3131342c39382c3131352c39382c3131362c39382c3131372c39382c3131382c39382c3131392c39382c3132302c39382c3132312c39382c3132322c39382c3132332c39382c3132342c39382c3132352c39382c3132362c39382c3132372c39382c3132382c39382c3132392c39382c3133302c39382c3133312c39382c3133322c39382c3133332c39382c3133342c39382c3133352c39382c3133362c39382c3133372c39382c3133382c39382c3133392c39382c3134302c39382c3134312c39382c3134322c39382c3136312c39382c3136352c39382c3138322c39382c3138332c39382c3235342c39382c3236352c39382c3238342c39382c35382c39392c35392c39392c36302c39392c36312c39392c36322c39392c36332c39392c36342c39392c36352c39392c36362c39392c36372c39392c36382c39392c36392c39392c37302c39392c37312c39392c37322c39392c37332c39392c37342c39392c37352c39392c37362c39392c37372c39392c37382c39392c37392c39392c38302c39392c38312c39392c38352c39392c38362c39392c39322c39392c3134322c39392c3136312c39392c3136322c39392c3136332c39392c3136342c39392c3136352c39392c3138322c39392c3138332c39392c3235342c39392c3236352c39392c3238342c39392c36372c3130302c37362c3130302c38352c3130302c39322c3130302c3134322c3130302c3138322c3130302c3138332c3130302c3235342c3130302c3236352c3130302c3238342c3130302c33362c3130312c39322c3130312c3134322c3130312c3138322c3130312c3138332c3130312c3235342c3130312c3236352c3130312c3238342c3130312c33372c3130322c33382c3130322c39322c3130322c3130302c3130322c3130312c3130322c3130322c3130322c3130332c3130322c3130342c3130322c3130352c3130322c3130362c3130322c3130372c3130322c3130382c3130322c3130392c3130322c3131302c3130322c3131312c3130322c3131322c3130322c3131332c3130322c3131342c3130322c3131352c3130322c3131362c3130322c3131372c3130322c3131382c3130322c3131392c3130322c3132302c3130322c3132312c3130322c3132322c3130322c3132332c3130322c3132342c3130322c3132352c3130322c3132362c3130322c3132372c3130322c3132382c3130322c3132392c3130322c3133302c3130322c3133312c3130322c3133322c3130322c3133332c3130322c3133342c3130322c3133352c3130322c3133362c3130322c3133372c3130322c3133382c3130322c3133392c3130322c3134302c3130322c3134312c3130322c3134322c3130322c3138312c3130322c3138322c3130322c3138332c3130322c3233362c3130322c3233372c3130322c3233382c3130322c3233392c3130322c3234302c3130322c3234312c3130322c3234322c3130322c3234332c3130322c3234342c3130322c3234352c3130322c3234362c3130322c3234372c3130322c3234382c3130322c3234392c3130322c3235302c3130322c3235312c3130322c3235322c3130322c3235332c3130322c3235342c3130322c3236352c3130322c3238342c3130322c33382c3130332c33392c3130332c34302c3130332c34312c3130332c34322c3130332c34332c3130332c34342c3130332c34352c3130332c39322c3130332c3130302c3130332c3138322c3130332c3138332c3130332c3233362c3130332c3236352c3130332c3236392c3130332c3237302c3130332c3237312c3130332c3237322c3130332c3237332c3130332c3237342c3130332c3237352c3130332c3237362c3130332c3237372c3130332c3237382c3130332c3237392c3130332c3238302c3130332c3238312c3130332c3238322c3130332c3238332c3130332c3238342c3130332c34352c3130342c39322c3130342c3130302c3130342c3233352c3130342c3233362c3130342c34352c3130352c39322c3130352c3130302c3130352c3233352c3130352c34352c3130362c39322c3130362c3130302c3130362c3233352c3130362c34352c3130372c39322c3130372c3130302c3130372c3233352c3130372c3233362c3130372c3233372c3130372c3233382c3130372c3233392c3130372c3234302c3130372c3234312c3130372c3234322c3130372c3234332c3130372c3234342c3130372c3234352c3130372c3234362c3130372c34352c3130382c39322c3130382c3130302c3130382c3234362c3130382c34352c3130392c39322c3130392c3130302c3130392c3234362c3130392c3234372c3130392c3234382c3130392c3234392c3130392c3235302c3130392c3235312c3130392c3235322c3130392c3235332c3130392c3235392c3130392c34352c3131302c39322c3131302c3130302c3131302c3234362c3131302c3234372c3131302c3235332c3131302c3235342c3131302c3235392c3131302c34352c3131312c39322c3131312c3130302c3131312c3232302c3131312c3232312c3131312c3232322c3131312c3232332c3131312c3232342c3131312c3232352c3131312c3232362c3131312c3234362c3131312c3234372c3131312c3235342c3131312c3235392c3131312c34352c3131322c39322c3131322c3130302c3131322c3130362c3131322c3231392c3131322c3232302c3131322c3232362c3131322c3234362c3131322c3234372c3131322c3235342c3131322c3235392c3131322c34352c3131332c39322c3131332c3130302c3131332c3130362c3131332c3231392c3131332c3232362c3131332c3234372c3131332c3235342c3131332c3235392c3131332c34352c3131342c39322c3131342c3130302c3131342c3130362c3131342c3231392c3131342c3232362c3131342c3235392c3131342c34352c3131352c39322c3131352c3130302c3131352c3231392c3131352c3232362c3131352c3235392c3131352c34302c3131362c34312c3131362c34322c3131362c34332c3131362c34342c3131362c34352c3131362c39322c3131362c3130302c3131362c3231392c3131362c3232362c3131362c3235392c3131362c34302c3131372c39322c3131372c3130302c3131372c3231392c3131372c3232362c3131372c3235392c3131372c33382c3131382c39322c3131382c3130302c3131382c3130352c3131382c3231392c3131382c3232362c3131382c3235392c3131382c33382c3131392c39322c3131392c3130302c3131392c3130352c3131392c3130362c3131392c3131352c3131392c3131362c3131392c3131372c3131392c3138342c3131392c3138352c3131392c3138362c3131392c3138372c3131392c3231392c3131392c3232362c3131392c3235392c3131392c33382c3132302c39322c3132302c3130302c3132302c3138342c3132302c3138372c3132302c3231392c3132302c3232362c3132302c3235392c3132302c33382c3132312c39322c3132312c3130302c3132312c3138342c3132312c3138372c3132312c3231392c3132312c3232362c3132312c3235392c3132312c33382c3132322c39322c3132322c3130302c3132322c3130312c3132322c3130322c3132322c3130332c3132322c3130342c3132322c3130382c3132322c3138342c3132322c3138372c3132322c3231392c3132322c3232362c3132322c3235372c3132322c3235382c3132322c3235392c3132322c33382c3132332c39322c3132332c3130342c3132332c3134312c3132332c3134322c3132332c3134332c3132332c3134342c3132332c3134352c3132332c3134362c3132332c3134372c3132332c3134382c3132332c3134392c3132332c3135302c3132332c3135312c3132332c3135322c3132332c3135332c3132332c3135342c3132332c3135352c3132332c3135362c3132332c3135372c3132332c3135382c3132332c3135392c3132332c3136302c3132332c3138342c3132332c3138372c3132332c3138382c3132332c3231392c3132332c3232362c3132332c3235342c3132332c3235352c3132332c3235362c3132332c3235372c3132332c33382c3132342c39322c3132342c3130342c3132342c3134302c3132342c3134312c3132342c3136302c3132342c3138342c3132342c3138372c3132342c3138382c3132342c3231392c3132342c3232362c3132342c3235332c3132342c33382c3132352c38382c3132352c39322c3132352c3130342c3132352c3134302c3132352c3136302c3132352c3138342c3132352c3138372c3132352c3231392c3132352c3232362c3132352c3235332c3132352c33382c3132362c38362c3132362c38372c3132362c38382c3132362c39322c3132362c3130342c3132362c3134302c3132362c3136302c3132362c3138342c3132362c3138372c3132362c3231392c3132362c3232362c3132362c3235332c3132362c33382c3132372c38362c3132372c3130342c3132372c3131312c3132372c3131322c3132372c3131332c3132372c3131342c3132372c3134302c3132372c3136302c3132372c3138342c3132372c3138372c3132372c3231392c3132372c3232362c3132372c3235332c3132372c33382c3132382c38362c3132382c3130342c3132382c3130352c3132382c3130362c3132382c3130372c3132382c3130382c3132382c3130392c3132382c3131302c3132382c3131312c3132382c3131342c3132382c3133362c3132382c3133372c3132382c3133382c3132382c3133392c3132382c3134302c3132382c3136302c3132382c3138342c3132382c3138372c3132382c3231392c3132382c3232362c3132382c3235332c3132382c3235342c3132382c33382c3132392c38362c3132392c3131342c3132392c3133362c3132392c3136302c3132392c3138342c3132392c3138372c3132392c3139362c3132392c3231392c3132392c3232362c3132392c3235342c3132392c3235352c3132392c33382c3133302c38362c3133302c3131342c3133302c3133362c3133302c3135392c3133302c3136302c3133302c3138342c3133302c3138372c3133302c3231392c3133302c3232362c3133302c3235352c3133302c33382c3133312c38362c3133312c3131342c3133312c3133362c3133312c3133392c3133312c3134302c3133312c3134312c3133312c3134322c3133312c3134332c3133312c3134342c3133312c3134352c3133312c3134362c3133312c3134372c3133312c3134382c3133312c3134392c3133312c3135302c3133312c3135312c3133312c3135342c3133312c3135352c3133312c3135362c3133312c3135372c3133312c3135382c3133312c3138342c3133312c3138372c3133312c3231392c3133312c3232362c3133312c3235352c3133312c33382c3133322c33392c3133322c34302c3133322c34312c3133322c38362c3133322c3131342c3133322c3133362c3133322c3133372c3133322c3133382c3133322c3133392c3133322c3135312c3133322c3135342c3133322c3138342c3133322c3138372c3133322c3231392c3133322c3232362c3133322c3232372c3133322c3232382c3133322c3232392c3133322c3233302c3133322c3233312c3133322c3233322c3133322c3233332c3133322c3233342c3133322c3233352c3133322c3235352c3133322c34312c3133332c38362c3133332c3131342c3133332c3135312c3133332c3135342c3133332c3138342c3133332c3138372c3133332c3231392c3133332c3233352c3133332c3235352c3133332c34312c3133342c38362c3133342c3131342c3133342c3135312c3133342c3135342c3133342c3138342c3133342c3138372c3133342c3231392c3133342c3233352c3133342c3235352c3133342c34312c3133352c38362c3133352c3131342c3133352c3135302c3133352c3135312c3133352c3135342c3133352c3138342c3133352c3138372c3133352c3231392c3133352c3233352c3133352c3235342c3133352c3235352c3133352c34312c3133362c38362c3133362c3131342c3133362c3134392c3133362c3135302c3133362c3135312c3133362c3135342c3133362c3138342c3133362c3138372c3133362c3231392c3133362c3233352c3133362c3235352c3133362c34312c3133372c38362c3133372c3131342c3133372c3131352c3133372c3131362c3133372c3131372c3133372c3135312c3133372c3135342c3133372c3138342c3133372c3138372c3133372c3231392c3133372c3233352c3133372c3235352c3133372c34312c3133382c38362c3133382c3131372c3133382c3131382c3133382c3135312c3133382c3135342c3133382c3138342c3133382c3138372c3133382c3231392c3133382c3233352c3133382c3235352c3133382c34312c3133392c38362c3133392c3131372c3133392c3135312c3133392c3135342c3133392c3138342c3133392c3138372c3133392c3231392c3133392c3233322c3133392c3233332c3133392c3233342c3133392c3233352c3133392c3235352c3133392c34312c3134302c37302c3134302c38362c3134302c3131372c3134302c3135312c3134302c3135342c3134302c3138342c3134302c3138372c3134302c3231392c3134302c3233322c3134302c3235352c3134302c34312c3134312c35352c3134312c36322c3134312c37302c3134312c38362c3134312c3131372c3134312c3135312c3134312c3135342c3134312c3138342c3134312c3138372c3134312c3231392c3134312c3233322c3134312c3235352c3134312c34312c3134322c35352c3134322c36322c3134322c36372c3134322c36382c3134322c36392c3134322c37302c3134322c38362c3134322c3131352c3134322c3131362c3134322c3131372c3134322c3135312c3134322c3135342c3134322c3138342c3134322c3138372c3134322c3231392c3134322c3233322c3134322c3235352c3134322c34312c3134332c34322c3134332c34332c3134332c34342c3134332c34352c3134332c34362c3134332c34372c3134332c34382c3134332c34392c3134332c35302c3134332c35312c3134332c35322c3134332c35332c3134332c35342c3134332c35352c3134332c35362c3134332c35372c3134332c35382c3134332c35392c3134332c36302c3134332c36312c3134332c36322c3134332c36332c3134332c36342c3134332c36352c3134332c36362c3134332c36372c3134332c36382c3134332c38362c3134332c3131342c3134332c3131352c3134332c3133372c3134332c3135312c3134332c3135342c3134332c3138342c3134332c3138372c3134332c3231392c3134332c3233322c3134332c3235352c3134332c34362c3134342c38362c3134342c38372c3134342c3131342c3134342c3133372c3134342c3135312c3134342c3135342c3134342c3137342c3134342c3137352c3134342c3138342c3134342c3138372c3134342c3231392c3134342c3233322c3134342c3235352c3134342c34362c3134352c38382c3134352c39382c3134352c39392c3134352c3130302c3134352c3130312c3134352c3130322c3134352c3130332c3134352c3130342c3134352c3130352c3134352c3130362c3134352c3130372c3134352c3130382c3134352c3130392c3134352c3131302c3134352c3131312c3134352c3131322c3134352c3131332c3134352c3131342c3134352c3133372c3134352c3135312c3134352c3135342c3134352c3138342c3134352c3138372c3134352c3231382c3134352c3231392c3134352c3233322c3134352c3233332c3134352c3235352c3134352c34362c3134362c38382c3134362c39382c3134362c3135312c3134362c3135342c3134362c3138342c3134362c3138372c3134362c3231382c3134362c3231392c3134362c3233332c3134362c3233342c3134362c3235352c3134362c34362c3134372c38382c3134372c39382c3134372c3133322c3134372c3134332c3134372c3135312c3134372c3135342c3134372c3138342c3134372c3138372c3134372c3231392c3134372c3233342c3134372c3235352c3134372c38372c3134382c38382c3134382c39382c3134382c3133322c3134382c3134322c3134382c3135312c3134382c3135342c3134382c3138342c3134382c3138372c3134382c3231392c3134382c3233342c3134382c3235352c3134382c38382c3134392c39382c3134392c3133332c3134392c3133372c3134392c3135312c3134392c3135342c3134392c3138342c3134392c3138372c3134392c3231392c3134392c3233342c3134392c3235352c3134392c38382c3135302c39382c3135302c3133372c3135302c3135312c3135302c3135342c3135302c3138342c3135302c3138372c3135302c3231392c3135302c3233332c3135302c3233342c3135302c3235352c3135302c38382c3135312c39382c3135312c3135312c3135312c3135342c3135312c3138342c3135312c3138372c3135312c3231392c3135312c3233322c3135312c3235332c3135312c3235352c3135312c34392c3135322c35302c3135322c35312c3135322c35322c3135322c35332c3135322c35342c3135322c35352c3135322c35362c3135322c35372c3135322c35382c3135322c35392c3135322c36302c3135322c36312c3135322c36322c3135322c36332c3135322c36342c3135322c36352c3135322c36362c3135322c36372c3135322c36382c3135322c36392c3135322c37302c3135322c37312c3135322c37322c3135322c37332c3135322c37342c3135322c37352c3135322c37362c3135322c37372c3135322c37382c3135322c37392c3135322c38302c3135322c38312c3135322c38382c3135322c39382c3135322c3135312c3135322c3135342c3135322c3138342c3135322c3138372c3135322c3230362c3135322c3230372c3135322c3231392c3135322c3235332c3135322c3235352c3135322c38312c3135332c38382c3135332c39382c3135332c3130352c3135332c3133352c3135332c3135312c3135332c3135342c3135332c3138342c3135332c3138372c3135332c3230362c3135332c3230372c3135332c3230382c3135332c3231392c3135332c3235352c3135332c38382c3135342c39382c3135342c3130352c3135342c3133342c3135342c3134312c3135342c3135312c3135342c3135342c3135342c3138342c3135342c3138372c3135342c3230382c3135342c3231392c3135342c3232372c3135342c3235342c3135342c3235352c3135342c38382c3135352c39382c3135352c3130352c3135352c3135312c3135352c3135342c3135352c3138342c3135352c3138372c3135352c3231392c3135352c3232372c3135352c3234382c3135352c38382c3135362c39382c3135362c3130352c3135362c3135312c3135362c3135342c3135362c3138342c3135362c3138372c3135362c3139392c3135362c3230302c3135362c3231392c3135362c3232372c3135362c3234382c3135362c38382c3135372c39382c3135372c39392c3135372c3130302c3135372c3130312c3135372c3130322c3135372c3130332c3135372c3130342c3135372c3130352c3135372c3130362c3135372c3130372c3135372c3130382c3135372c3130392c3135372c3131302c3135372c3131312c3135372c3131322c3135372c3131332c3135372c3131342c3135372c3131352c3135372c3135312c3135372c3135342c3135372c3138342c3135372c3138372c3135372c3230302c3135372c3230312c3135372c3231392c3135372c3232372c3135372c3234382c3135372c38382c3135382c3131352c3135382c3135312c3135382c3135342c3135382c3138342c3135382c3138372c3135382c3230312c3135382c3230322c3135382c3231392c3135382c3232372c3135382c3234382c3135382c38382c3135392c3131352c3135392c3135312c3135392c3135342c3135392c3138332c3135392c3138342c3135392c3138372c3135392c3230372c3135392c3231392c3135392c3232372c3135392c3235342c3135392c3235352c3135392c3235362c3135392c3235372c3135392c3235382c3135392c3235392c3135392c38382c3136302c3131352c3136302c3135312c3136302c3135342c3136302c3138342c3136302c3138372c3136302c3230372c3136302c3230382c3136302c3230392c3136302c3231392c3136302c3232372c3136302c3232382c3136302c3232392c3136302c3233302c3136302c3233312c3136302c3233322c3136302c3233332c3136302c3233342c3136302c3233352c3136302c3233362c3136302c3233372c3136302c3233382c3136302c3233392c3136302c3234302c3136302c3234312c3136302c3234322c3136302c3234332c3136302c3234342c3136302c3234352c3136302c3234362c3136302c3234372c3136302c3234382c3136302c3234392c3136302c3235342c3136302c38372c3136312c38382c3136312c3131352c3136312c3134392c3136312c3135302c3136312c3135312c3136312c3135342c3136312c3138342c3136312c3138372c3136312c3231392c3136312c3234392c3136312c3235342c3136312c3131352c3136322c3134302c3136322c3134312c3136322c3135312c3136322c3135342c3136322c3138342c3136322c3138372c3136322c3231392c3136322c3235302c3136322c3235342c3136322c3131352c3136332c3135312c3136332c3135342c3136332c3138342c3136332c3138372c3136332c3231392c3136332c3235342c3136332c3131352c3136342c3135312c3136342c3135342c3136342c3138342c3136342c3138372c3136342c3231392c3136342c3235342c3136342c3131352c3136352c3135312c3136352c3135342c3136352c3138342c3136352c3138372c3136352c3231392c3136352c3131352c3136362c3135312c3136362c3135342c3136362c3138342c3136362c3138372c3136362c3231392c3136362c3135312c3136372c3135342c3136372c3138342c3136372c3138372c3136372c3230372c3136372c3230382c3136372c3231392c3136372c3131332c3136382c3133322c3136382c3133332c3136382c3133342c3136382c3133352c3136382c3133362c3136382c3133372c3136382c3133382c3136382c3133392c3136382c3134302c3136382c3134312c3136382c3134322c3136382c3134332c3136382c3134342c3136382c3134352c3136382c3134362c3136382c3134372c3136382c3134382c3136382c3134392c3136382c3135302c3136382c3135312c3136382c3135322c3136382c3135332c3136382c3135342c3136382c3135352c3136382c3135362c3136382c3135372c3136382c3135382c3136382c3135392c3136382c3136302c3136382c3136312c3136382c3136322c3136382c3136332c3136382c3136342c3136382c3136352c3136382c3136362c3136382c3136372c3136382c3136382c3136382c3136392c3136382c3137302c3136382c3137312c3136382c3137322c3136382c3137332c3136382c3137342c3136382c3137352c3136382c3137362c3136382c3137372c3136382c3137382c3136382c3137392c3136382c3138302c3136382c3138312c3136382c3138322c3136382c3138332c3136382c3138342c3136382c3138372c3136382c3138382c3136382c3139342c3136382c3139352c3136382c3139362c3136382c3139372c3136382c3139382c3136382c3139392c3136382c3230302c3136382c3230312c3136382c3230322c3136382c3230332c3136382c3230342c3136382c3230352c3136382c3230362c3136382c3230372c3136382c3230382c3136382c3230392c3136382c3231302c3136382c3231312c3136382c3231322c3136382c3231332c3136382c3231342c3136382c3231352c3136382c3231362c3136382c3231372c3136382c3231382c3136382c3231392c3136382c3131332c3136392c3132302c3136392c3132312c3136392c3132322c3136392c3132332c3136392c3132342c3136392c3132352c3136392c3132362c3136392c3132372c3136392c3132382c3136392c3132392c3136392c3133302c3136392c3133312c3136392c3133322c3136392c3133332c3136392c3136352c3136392c3136362c3136392c3136372c3136392c3136382c3136392c3137382c3136392c3138372c3136392c3131332c3137302c3131382c3137302c3138372c3137302c3131332c3137312c3138372c3137312c3131332c3137322c3138372c3137322c3131332c3137332c3131342c3137332c3131352c3137332c3137342c3137332c3138372c3137332c3138382c3137332c3131352c3137342c3136372c3137342c3136382c3137342c3136392c3137342c3137302c3137342c3137312c3137342c3137322c3137342c3137332c3137342c3138302c3137342c3138312c3137342c3138382c3137342c3131352c3137352c3131362c3137352c3138372c3137352c3138382c3137352c3131362c3137362c3138372c3137362c3138372c3137372c3132322c3137382c3136352c3137392c3133372c3138382c3135342c3139342c3131312c3139352c3131322c3139352c3131332c3139352c3131342c3139352c3131352c3139352c3131362c3139352c3131372c3139352c3135332c3139362c3135332c3230312c3134312c3230352c3134322c3230352c3134332c3230352c3134342c3230352c3134352c3230352c3133392c3230362c3134302c3231332c3134352c3233332c3134362c3233332c3134372c3233332c3134342c3233342c3134312c3233352c3134312c3233365d2c227479706573223a307d5d2c2266726565223a5b7b22636f6f7264696e61746573223a5b5d2c227479706573223a307d5d2c22726f6f6d73223a7b2230223a7b22636f6f7264696e61746573223a5b3131372c3136382c3131362c3136392c3131352c3136392c3131342c3137302c3131342c3137312c3131342c3137322c3131352c3137322c3131362c3137332c3131362c3137342c3131372c3137352c3131372c3137362c3131372c3137372c3131372c3137382c3131362c3137392c3131362c3138302c3131352c3138312c3131352c3138322c3131352c3138332c3131342c3138342c3131342c3138352c3131342c3138362c3131332c3138372c3131332c3138382c3131332c3138392c3131322c3139302c3131322c3139312c3131322c3139322c3131322c3139332c3131322c3139342c3131332c3139342c3131342c3139342c3131352c3139342c3131362c3139342c3131372c3139342c3131372c3139332c3131382c3139322c3131382c3139312c3131382c3139302c3131382c3138392c3131382c3138382c3131382c3138372c3131382c3138362c3131392c3138352c3131392c3138342c3131392c3138332c3131392c3138322c3132302c3138312c3132312c3138312c3132312c3138302c3132312c3137392c3132312c3137382c3132322c3137372c3132332c3137382c3132332c3137392c3132332c3138302c3132332c3138312c3132332c3138322c3132342c3138332c3132342c3138342c3132352c3138352c3132352c3138362c3132352c3138372c3132352c3138382c3132362c3138392c3132362c3139302c3132362c3139312c3132362c3139322c3132362c3139332c3132372c3139342c3132372c3139352c3132372c3139362c3132372c3139372c3132382c3139382c3132382c3139392c3132382c3230302c3132382c3230312c3132392c3230322c3132392c3230332c3132392c3230342c3132392c3230352c3133302c3230362c3133302c3230372c3133302c3230382c3133302c3230392c3133312c3231302c3133312c3231312c3133312c3231322c3133312c3231332c3133322c3231342c3133322c3231352c3133322c3231362c3133322c3231372c3133332c3231382c3133332c3231392c3133332c3232302c3133332c3232312c3133342c3232322c3133342c3232332c3133342c3232342c3133342c3232352c3133352c3232362c3133352c3232372c3133352c3232382c3133352c3232392c3133362c3233302c3133362c3233312c3133362c3233322c3133362c3233332c3133372c3233342c3133372c3233352c3133372c3233362c3133382c3233362c3133392c3233362c3134302c3233362c3134302c3233352c3134312c3233342c3134322c3233352c3134322c3233362c3134332c3233362c3134342c3233362c3134352c3233362c3134352c3233352c3134342c3233352c3134332c3233342c3134342c3233332c3134352c3233322c3134362c3233322c3134362c3233312c3134362c3233302c3134362c3232392c3134362c3232382c3134352c3232372c3134352c3232362c3134352c3232352c3134342c3232342c3134342c3232332c3134332c3232322c3134332c3232312c3134332c3232302c3134322c3231392c3134322c3231382c3134322c3231372c3134312c3231362c3134312c3231352c3134312c3231342c3134302c3231342c3133392c3231332c3134302c3231322c3134312c3231322c3134322c3231322c3134332c3231312c3134342c3231302c3134342c3230392c3134352c3230382c3134362c3230392c3134362c3231302c3134372c3231302c3134382c3231302c3134392c3231302c3134392c3230392c3134392c3230382c3135302c3230372c3135302c3230362c3135312c3230352c3135322c3230362c3135332c3230362c3135342c3230362c3135342c3230352c3135342c3230342c3135342c3230332c3135332c3230322c3135322c3230312c3135332c3230302c3135332c3139392c3135332c3139382c3135322c3139372c3135322c3139362c3135332c3139352c3135332c3139342c3135342c3139332c3135352c3139322c3135362c3139322c3135362c3139312c3135362c3139302c3135372c3138392c3135382c3138392c3135392c3138392c3136302c3138392c3136302c3138382c3136312c3138372c3136312c3138362c3136312c3138352c3136312c3138342c3136312c3138332c3136312c3138322c3136312c3138312c3136322c3138302c3136322c3137392c3136322c3137382c3136322c3137372c3136322c3137362c3136322c3137352c3136322c3137342c3136332c3137332c3136342c3137342c3136342c3137352c3136342c3137362c3136342c3137372c3136342c3137382c3136352c3137382c3136362c3137382c3136362c3137372c3136362c3137362c3136362c3137352c3136362c3137342c3136372c3137332c3136382c3137332c3136392c3137332c3137302c3137332c3137312c3137332c3137322c3137332c3137332c3137332c3137342c3137322c3137352c3137332c3137362c3137332c3137372c3137332c3137382c3137332c3137392c3137322c3138302c3137332c3138312c3137332c3138322c3137332c3138332c3137332c3138332c3137322c3138332c3137312c3138332c3137302c3138332c3136392c3138322c3136392c3138312c3136392c3138302c3136392c3137392c3136392c3137382c3137302c3137372c3136392c3137362c3136392c3137352c3136392c3137342c3136392c3137332c3136392c3137322c3136392c3137312c3136392c3137302c3136392c3136392c3136392c3136382c3137302c3136372c3137302c3136362c3137302c3136352c3137302c3136342c3136392c3136332c3136392c3136322c3136392c3136312c3136392c3136302c3136392c3135392c3136392c3135382c3136392c3135372c3136392c3135362c3136392c3135352c3136392c3135342c3136392c3135332c3136392c3135322c3136392c3135312c3136392c3135302c3136392c3134392c3137302c3134392c3137312c3134392c3137322c3134382c3137332c3134382c3137342c3134372c3137352c3134372c3137362c3134372c3137372c3134362c3137382c3134362c3137392c3134362c3138302c3134352c3138312c3134342c3138322c3134332c3138312c3134322c3138302c3134312c3137392c3134302c3137392c3133392c3137382c3133382c3137372c3133372c3137372c3133362c3137362c3133352c3137352c3133342c3137342c3133342c3137332c3133342c3137322c3133342c3137312c3133332c3137312c3133322c3137302c3133312c3137302c3133302c3137302c3132392c3137302c3132382c3137302c3132372c3137302c3132362c3137302c3132352c3137302c3132342c3137302c3132332c3137302c3132322c3137302c3132312c3137302c3132302c3137302c3131392c3136392c3132302c3136382c3131392c3136382c3131382c3136385d7d2c2231223a7b22636f6f7264696e61746573223a5b3232352c3130362c3232352c3130372c3232352c3130382c3232352c3130392c3232352c3131302c3232362c3131302c3232372c3131312c3232372c3131322c3232372c3131332c3232372c3131342c3232372c3131352c3232372c3131362c3232372c3131372c3232372c3131382c3232372c3131392c3232372c3132302c3232372c3132312c3232372c3132322c3232372c3132332c3232372c3132342c3232372c3132352c3232372c3132362c3232372c3132372c3232372c3132382c3232372c3132392c3232372c3133302c3232372c3133312c3232382c3133312c3232392c3133312c3233302c3133312c3233312c3133312c3233322c3133312c3233332c3133312c3233342c3133312c3233352c3133312c3233362c3133322c3233362c3133332c3233362c3133342c3233362c3133352c3233362c3133362c3233362c3133372c3233362c3133382c3233362c3133392c3233352c3134302c3233342c3134302c3233332c3134302c3233332c3134312c3233332c3134322c3233332c3134332c3233332c3134342c3233342c3134352c3233352c3134362c3233352c3134372c3233352c3134382c3233352c3134392c3233352c3135302c3233342c3135312c3233332c3135312c3233322c3135322c3233312c3135322c3233302c3135322c3232392c3135322c3232382c3135322c3232382c3135332c3232382c3135342c3232382c3135352c3232382c3135362c3232382c3135372c3232382c3135382c3232382c3135392c3232392c3135392c3233302c3135392c3233312c3135392c3233322c3135392c3233332c3135392c3233342c3135392c3233352c3135392c3233362c3135392c3233372c3135392c3233382c3135392c3233392c3135392c3234302c3135392c3234312c3135392c3234322c3135392c3234332c3135392c3234342c3135392c3234352c3135392c3234362c3135392c3234372c3135392c3234382c3135392c3234392c3135392c3235302c3136302c3235302c3136312c3235312c3136322c3235312c3136332c3235322c3136332c3235332c3136332c3235332c3136322c3235332c3136312c3235332c3136302c3235332c3135392c3235342c3135382c3235352c3135382c3235362c3135382c3235372c3135382c3235382c3135382c3235382c3135372c3235382c3135362c3235372c3135362c3235362c3135352c3235352c3135352c3235342c3135352c3235332c3135342c3235342c3135332c3235342c3135322c3235342c3135312c3235342c3135302c3235342c3134392c3235342c3134382c3235342c3134372c3235342c3134362c3235342c3134352c3235342c3134342c3235342c3134332c3235342c3134322c3235342c3134312c3235342c3134302c3235342c3133392c3235342c3133382c3235342c3133372c3235342c3133362c3235332c3133352c3235342c3133342c3235342c3133332c3235342c3133322c3235342c3133312c3235342c3133302c3235332c3132392c3235322c3132382c3235322c3132372c3235322c3132362c3235322c3132352c3235322c3132342c3235332c3132332c3235342c3132322c3235352c3132322c3235362c3132322c3235372c3132312c3235382c3132312c3235382c3132302c3235382c3131392c3235382c3131382c3235382c3131372c3235382c3131362c3235382c3131352c3235382c3131342c3235382c3131332c3235382c3131322c3235382c3131312c3235382c3131302c3235372c3131302c3235362c3131302c3235352c3131302c3235352c3131312c3235352c3131322c3235352c3131332c3235342c3131342c3235332c3131332c3235332c3131322c3235332c3131312c3235322c3131302c3235312c3131302c3235302c3131302c3234392c3131302c3234382c3131302c3234382c3131312c3234382c3131322c3234382c3131332c3234372c3131342c3234362c3131332c3234352c3131322c3234352c3131312c3234352c3131302c3234352c3130392c3234352c3130382c3234342c3130382c3234332c3130382c3234322c3130382c3234312c3130382c3234302c3130382c3233392c3130382c3233382c3130382c3233372c3130382c3233362c3130382c3233352c3130382c3233342c3130372c3233342c3130362c3233332c3130362c3233322c3130362c3233312c3130362c3233302c3130362c3232392c3130362c3232382c3130362c3232372c3130362c3232362c3130365d7d2c2232223a7b22636f6f7264696e61746573223a5b38312c36312c38312c36322c38302c36332c37392c36332c37382c36332c37372c36332c37362c36332c37352c36332c37342c36332c37332c36332c37322c36332c37312c36332c37302c36332c36392c36332c36382c36332c36372c36332c36362c36332c36352c36332c36342c36332c36332c36332c36322c36332c36312c36332c36302c36332c35392c36332c35382c36332c35372c36332c35362c36332c35352c36332c35342c36332c35332c36332c35322c36332c35312c36322c35302c36322c34392c36322c34382c36322c34372c36322c34362c36322c34352c36322c34352c36332c34352c36342c34352c36352c34352c36362c34352c36372c34352c36382c34352c36392c34352c37302c34352c37312c34352c37322c34352c37332c34362c37332c34372c37332c34382c37332c34392c37332c35302c37332c35312c37332c35322c37332c35332c37332c35342c37332c35352c37332c35362c37332c35372c37332c35382c37332c35392c37332c36302c37332c36312c37332c36322c37332c36332c37332c36342c37332c36352c37342c36352c37352c36352c37362c36362c37362c36372c37362c36372c37352c36372c37342c36372c37332c36372c37322c36362c37322c36352c37312c36362c37302c36372c37302c36382c37302c36392c37302c37302c37312c37302c37322c37302c37332c37302c37342c37302c37352c37302c37362c36392c37372c36382c37382c36372c37382c36362c37382c36352c37382c36342c37382c36332c37382c36322c37382c36312c37382c36302c37382c35392c37382c35382c37382c35372c37382c35362c37382c35352c37382c35342c37382c35332c37382c35322c37382c35312c37382c35302c37382c34392c37382c34382c37382c34372c37382c34362c37382c34352c37382c34342c37382c34332c37382c34322c37382c34312c37382c34302c37382c33392c37382c33382c37392c33372c37392c33362c37392c33352c37392c33342c37392c33332c37392c33322c37392c33312c37382c33302c37382c32392c37382c32382c37372c32372c37372c32362c37372c32352c37382c32342c37392c32332c37392c32322c37392c32312c37392c32302c37392c31392c37392c31382c37392c31372c37392c31362c37392c31352c37392c31342c37392c31332c37392c31322c37382c31312c37382c31302c37382c392c37382c382c37382c372c37392c372c38302c372c38312c382c38312c392c38322c31302c38322c31312c38332c31322c38342c31332c38342c31342c38352c31352c38352c31362c38362c31372c38362c31382c38372c31392c38372c32302c38382c32312c38382c32322c38392c32332c38392c32342c39302c32352c39302c32362c39312c32372c39312c32382c39322c32382c39332c32392c39332c33302c39332c33312c39332c33322c39332c33332c39332c33332c39322c33332c39312c33322c39312c33312c39312c33302c39302c32392c39302c32382c38392c32372c38382c32362c38382c32352c38372c32342c38362c32332c38362c32322c38352c32332c38342c32342c38342c32352c38342c32362c38352c32372c38352c32382c38352c32392c38362c33302c38362c33312c38362c33322c38372c33332c38372c33342c38372c33352c38372c33352c38362c33352c38352c33352c38342c33362c38332c33372c38342c33372c38352c33372c38362c33372c38372c33372c38382c33372c38392c33372c39302c33382c39302c33392c39302c34302c39312c34302c39322c33392c39332c33392c39342c33382c39352c33372c39352c33362c39362c33362c39372c33362c39382c33372c39392c33372c3130302c33372c3130312c33382c3130312c33392c3130322c34302c3130322c34312c3130322c34322c3130322c34332c3130322c34342c3130322c34352c3130322c34362c3130332c34362c3130342c34362c3130352c34362c3130362c34362c3130372c34362c3130382c34362c3130392c34362c3131302c34362c3131312c34362c3131322c34362c3131332c34362c3131342c34362c3131352c34362c3131362c34352c3131372c34342c3131372c34332c3131372c34322c3131372c34312c3131372c34302c3131382c33392c3131382c33392c3131392c33392c3132302c33392c3132312c33392c3132322c33392c3132332c33392c3132342c33392c3132352c33392c3132362c33392c3132372c33392c3132382c33392c3132392c33392c3133302c33392c3133312c34302c3133312c34312c3133312c34322c3133322c34322c3133332c34322c3133342c34322c3133352c34322c3133362c34322c3133372c34322c3133382c34322c3133392c34322c3134302c34322c3134312c34322c3134322c34332c3134322c34342c3134322c34352c3134322c34362c3134322c34372c3134322c34382c3134322c34392c3134322c35302c3134322c35312c3134322c35322c3134322c35332c3134322c35342c3134322c35342c3134312c35352c3134302c35362c3134312c35362c3134322c35372c3134322c35382c3134322c35392c3134322c36302c3134322c36312c3134322c36312c3134312c36322c3134302c36332c3134312c36332c3134322c36342c3134322c36352c3134322c36362c3134322c36372c3134312c36382c3134312c36392c3134312c36392c3134302c37302c3133392c37312c3134302c37312c3134312c37312c3134322c37302c3134332c36392c3134332c36382c3134342c36372c3134342c36362c3134342c36352c3134342c36342c3134342c36332c3134342c36322c3134342c36312c3134342c36302c3134342c35392c3134342c35382c3134342c35372c3134342c35362c3134342c35352c3134342c35342c3134342c35332c3134342c35322c3134342c35312c3134342c35302c3134342c34392c3134342c34382c3134342c34372c3134342c34372c3134352c34372c3134362c34372c3134372c34362c3134382c34362c3134392c34362c3135302c34362c3135312c34362c3135322c34372c3135322c34382c3135322c34392c3135312c35302c3135312c35312c3135312c35322c3135312c35332c3135312c35342c3135312c35352c3135312c35362c3135312c35372c3135312c35382c3135312c35392c3135312c36302c3135312c36312c3135312c36322c3135312c36332c3135312c36342c3135312c36352c3135312c36362c3135312c36372c3135312c36382c3135312c36392c3135312c37302c3135312c37312c3135312c37322c3135312c37332c3135312c37342c3135312c37352c3135312c37362c3135312c37372c3135312c37382c3135312c37392c3135312c38302c3135312c38312c3135312c38322c3135322c38322c3135332c38322c3135342c38322c3135352c38332c3135362c38332c3135372c38342c3135382c38342c3135392c38342c3136302c38352c3136302c38362c3136302c38372c3136302c38372c3135392c38372c3135382c38372c3135372c38372c3135362c38372c3135352c38372c3135342c38372c3135332c38372c3135322c38372c3135312c38372c3135302c38372c3134392c38362c3134382c38372c3134372c38372c3134362c38372c3134352c38362c3134352c38352c3134342c38352c3134332c38352c3134322c38352c3134312c38352c3134302c38352c3133392c38352c3133382c38352c3133372c38352c3133362c38352c3133352c38352c3133342c38352c3133332c38352c3133322c38352c3133312c38352c3133302c38352c3132392c38352c3132382c38352c3132372c38352c3132362c38362c3132352c38372c3132352c38382c3132342c38392c3132352c39302c3132352c39312c3132352c39312c3132342c39312c3132332c39312c3132322c39312c3132312c39312c3132302c39312c3131392c39312c3131382c39312c3131372c39312c3131362c39312c3131352c39312c3131342c39312c3131332c39312c3131322c39312c3131312c39312c3131302c39312c3130392c39312c3130382c39312c3130372c39312c3130362c39312c3130352c39312c3130342c39312c3130332c39312c3130322c39312c3130312c39312c3130302c39312c39392c39302c39392c38392c39392c38382c39392c38372c39392c38362c3130302c38352c3130312c38342c3130302c38342c39392c38332c39392c38322c39392c38312c3130302c38302c3130302c37392c3130302c37382c3130302c37372c3130302c37362c3130312c37352c3130302c37342c3130302c37332c3130302c37322c3130302c37312c3130302c37302c3130302c36392c3130302c36382c3130302c36372c3130312c36362c3130302c36352c3130302c36342c3130302c36332c3130302c36322c3130302c36312c3130302c36302c3130302c35392c3130302c35382c3130302c35372c39392c35372c39382c35382c39372c35392c39372c36302c39372c36312c39372c36322c39372c36332c39372c36342c39372c36352c39372c36362c39372c36372c39372c36382c39372c36392c39372c37302c39372c37312c39372c37322c39372c37332c39372c37342c39372c37352c39372c37362c39372c37372c39372c37382c39372c37392c39372c38302c39372c38312c39372c38322c39372c38332c39372c38342c39372c38352c39372c38362c39372c38362c39362c38362c39352c38362c39342c38362c39332c38362c39322c38362c39312c38362c39302c38362c38392c38362c38382c38362c38372c38362c38362c38362c38352c38362c38342c38362c38332c38362c38322c38362c38312c38362c38302c38362c37392c38362c37382c38362c37372c38362c37362c38362c37352c38362c37342c38362c37332c38372c37322c38382c37322c38382c37312c38382c37302c38382c36392c38382c36382c38382c36372c38382c36362c38382c36352c38382c36342c38382c36332c38382c36322c38382c36312c38372c36312c38362c36312c38352c36312c38342c36312c38332c36312c38322c36315d7d2c2233223a7b22636f6f7264696e61746573223a5b3139382c352c3139382c362c3139382c372c3139382c382c3139382c392c3139382c31302c3139382c31312c3139382c31322c3139382c31332c3139382c31342c3139382c31352c3139382c31362c3139392c31362c3230302c31372c3230302c31382c3230302c31392c3230302c32302c3230312c32302c3230322c32312c3230332c32312c3230342c32312c3230352c32312c3230362c32312c3230372c32312c3230382c32302c3230392c32312c3231302c32312c3231312c32312c3231322c32322c3231332c32322c3231342c32322c3231352c32322c3231352c32312c3231362c32302c3231372c32302c3231382c32312c3231382c32322c3231392c32322c3232302c32322c3232312c32322c3232322c32322c3232332c32322c3232342c32322c3232352c32322c3232362c32322c3232372c32312c3232382c32322c3232392c32322c3233302c32322c3233312c32322c3233322c32322c3233332c32322c3233342c32322c3233352c32322c3233362c32312c3233372c32302c3233382c32312c3233382c32322c3233392c32322c3234302c32322c3234312c32322c3234322c32322c3234332c32312c3234342c32312c3234352c32302c3234362c32312c3234372c32312c3234382c32312c3234392c32312c3235302c32312c3235312c32312c3235322c32312c3235332c32312c3235342c32312c3235352c32312c3235362c32312c3235372c32312c3235382c32312c3235392c32312c3236302c32312c3236312c32302c3236322c32312c3236332c32312c3236342c32312c3236352c32312c3236362c32312c3236372c32312c3236382c32312c3236392c32312c3237302c32312c3237312c32312c3237322c32312c3237332c32312c3237342c32312c3237352c32312c3237362c32312c3237372c32312c3237382c32312c3237392c32312c3238302c32312c3238312c32312c3238322c32312c3238332c32312c3238332c32302c3238332c31392c3238332c31382c3238332c31372c3238332c31362c3238332c31352c3238332c31342c3238332c31332c3238332c31322c3238332c31312c3238332c31302c3238332c392c3238332c382c3238332c372c3238342c362c3238332c362c3238322c362c3238312c362c3238302c362c3237392c352c3237382c352c3237372c352c3237362c352c3237352c352c3237342c352c3237332c352c3237322c352c3237312c352c3237302c352c3236392c352c3236382c352c3236372c352c3236362c352c3236352c352c3236342c352c3236332c352c3236322c352c3236312c352c3236302c352c3235392c352c3235382c352c3235372c352c3235362c352c3235352c352c3235342c352c3235332c352c3235322c352c3235312c352c3235302c352c3234392c352c3234382c352c3234372c352c3234362c352c3234352c352c3234342c352c3234332c352c3234322c352c3234312c352c3234302c352c3233392c352c3233382c352c3233372c352c3233362c352c3233352c352c3233342c352c3233332c352c3233322c352c3233312c352c3233302c352c3232392c352c3232382c352c3232372c352c3232362c352c3232352c352c3232342c352c3232332c352c3232322c352c3232312c352c3232302c352c3231392c352c3231382c352c3231372c352c3231362c352c3231352c352c3231342c352c3231332c352c3231322c352c3231312c352c3231302c352c3230392c352c3230382c352c3230372c352c3230362c352c3230352c352c3230342c352c3230332c352c3230322c352c3230312c352c3230302c352c3139392c355d7d2c2234223a7b22636f6f7264696e61746573223a5b3130392c322c3130382c332c3130372c332c3130362c342c3130352c342c3130342c342c3130332c332c3130322c332c3130312c332c3130302c332c39392c332c39382c332c39372c332c39362c342c39352c342c39342c332c39332c332c39322c332c39312c332c39302c332c38392c332c38382c332c38372c332c38362c332c38352c332c38342c332c38332c332c38322c332c38312c332c38302c332c37392c332c37382c332c37372c332c37362c332c37352c332c37342c332c37332c332c37322c332c37312c332c37302c332c36392c332c36382c332c36372c332c36362c332c36352c332c36342c332c36332c332c36322c332c36312c332c36302c332c35392c332c35382c332c35372c332c35362c332c35352c332c35342c332c35332c332c35322c332c35312c332c35302c332c34392c332c34382c332c34372c332c34362c332c34352c332c34342c332c34332c332c34322c332c34312c332c34302c332c33392c332c33382c332c33382c342c33382c352c33382c362c33382c372c33382c382c33382c392c33382c31302c33382c31312c33382c31322c33382c31332c33392c31342c34302c31342c34312c31342c34322c31342c34332c31342c34342c31342c34352c31342c34362c31342c34372c31342c34382c31342c34392c31342c35302c31342c35312c31342c35322c31342c35332c31342c35342c31342c35352c31342c35362c31342c35372c31342c35382c31342c35392c31342c36302c31342c36312c31342c36322c31342c36332c31342c36342c31342c36352c31342c36362c31342c36372c31342c36382c31342c36392c31342c37302c31342c37312c31342c37322c31342c37332c31342c37342c31342c37352c31342c37362c31342c37372c31342c37382c31342c37392c31342c38302c31342c38312c31342c38322c31352c38332c31362c38332c31372c38332c31382c38332c31392c38332c32302c38332c32312c38332c32322c38332c32332c38332c32342c38332c32352c38332c32362c38332c32372c38332c32382c38332c32392c38332c33302c38332c33312c38332c33322c38332c33332c38332c33342c38332c33352c38332c33362c38332c33372c38332c33382c38332c33392c38332c34302c38332c34312c38332c34322c38332c34332c38332c34342c38332c34352c38332c34362c38332c34372c38332c34382c38332c34392c38332c35302c38332c35312c38332c35322c38332c35332c38332c35342c38332c35352c38332c35362c38322c35372c38312c35382c38312c35392c38312c36302c38322c36302c38332c36302c38342c36302c38352c36302c38362c36302c38372c36302c38382c36302c38392c36312c38392c36322c38392c36332c38392c36342c38392c36352c38392c36362c38392c36372c38392c36382c38392c36392c38392c37302c38392c37312c38392c37322c39302c37322c39312c37322c39322c37322c39332c37322c39342c37322c39352c37332c39352c37342c39352c37352c39352c37362c39352c37372c39352c37382c39352c37392c39352c38302c39352c38312c39352c38322c39352c38332c39352c38342c39352c38352c39352c38362c39352c38372c39352c38382c39352c38392c39352c39302c39352c39312c39352c39322c39352c39332c39352c39342c39352c39352c39352c39362c39352c39372c39362c39372c39372c39372c39382c39372c39392c39372c3130302c39372c3130312c39372c3130322c39372c3130332c39372c3130342c39372c3130352c39372c3130362c39372c3130372c39372c3130382c39372c3130392c39372c3131302c39372c3131312c39372c3131322c39372c3131332c39372c3131342c39372c3131352c39372c3131362c39372c3131372c39372c3131382c39372c3131392c39372c3132302c39372c3132312c39372c3132322c39372c3132332c39372c3132342c39372c3132352c39372c3132362c39372c3132372c39372c3132382c39372c3132392c39372c3133302c39372c3133312c39372c3133322c39372c3133332c39372c3133342c39372c3133352c39372c3133362c39372c3133372c39372c3133382c39372c3133392c39372c3134302c39372c3134312c39372c3134322c39372c3134332c39382c3134332c39392c3134332c3130302c3134332c3130312c3134332c3130322c3134322c3130332c3134312c3130332c3134302c3130332c3133392c3130332c3133382c3130332c3133372c3130332c3133362c3130332c3133352c3130332c3133342c3130332c3133332c3130332c3133322c3130332c3133312c3130332c3133302c3130332c3132392c3130332c3132382c3130332c3132372c3130332c3132362c3130332c3132352c3130332c3132342c3130332c3132332c3130332c3132322c3130332c3132312c3130332c3132302c3130332c3131392c3130332c3131382c3130332c3131372c3130332c3131362c3130332c3131352c3130332c3131342c3130332c3131332c3130332c3131322c3130332c3131312c3130332c3131302c3130332c3130392c3130332c3130382c3130332c3130372c3130332c3130362c3130332c3130352c3130332c3130342c3130332c3130332c3130332c3130322c3130332c3130312c3130332c3130312c3130342c3130312c3130352c3130312c3130362c3130312c3130372c3130312c3130382c3130312c3130392c3130312c3131302c3130312c3131312c3130312c3131322c3130312c3131332c3130312c3131342c3130312c3131352c3130312c3131362c3130312c3131372c3130312c3131382c3130312c3131392c3130312c3132302c3130312c3132312c3130322c3132312c3130332c3132312c3130342c3132312c3130352c3132322c3130352c3132332c3130352c3132342c3130352c3132352c3130352c3132362c3130352c3132372c3130362c3132372c3130372c3132372c3130382c3132372c3130392c3132372c3131302c3132372c3131312c3132362c3131322c3132362c3131332c3132362c3131342c3132362c3131352c3132372c3131352c3132382c3131352c3132392c3131352c3133302c3131352c3133312c3131352c3133322c3131352c3133332c3131352c3133342c3131352c3133352c3131352c3133362c3131362c3133362c3131372c3133362c3131382c3133372c3131392c3133382c3131382c3133392c3131382c3134302c3131382c3134312c3131382c3134322c3131372c3134332c3131362c3134332c3131352c3134342c3131352c3134352c3131342c3134362c3131332c3134362c3131322c3134362c3131312c3134362c3131302c3134362c3130392c3134362c3130382c3134362c3130372c3134362c3130362c3134362c3130352c3134362c3130342c3134362c3130332c3134362c3130322c3134362c3130312c3134362c3130302c3134362c39392c3134362c39392c3134372c39392c3134382c39392c3134392c39392c3135302c39392c3135312c39392c3135322c39392c3135332c39392c3135342c39392c3135352c39392c3135362c3130302c3135362c3130312c3135362c3130322c3135362c3130332c3135362c3130342c3135362c3130342c3135352c3130342c3135342c3130342c3135332c3130352c3135322c3130362c3135332c3130362c3135342c3130362c3135352c3130362c3135362c3130372c3135362c3130382c3135362c3130392c3135362c3131302c3135362c3131312c3135362c3131322c3135362c3131332c3135362c3131342c3135362c3131352c3135362c3131362c3135372c3131362c3135382c3131362c3135392c3131362c3136302c3131362c3136312c3131362c3136322c3131362c3136332c3131362c3136342c3131362c3136352c3131362c3136362c3131352c3136372c3131342c3136372c3131342c3136382c3131342c3136392c3131352c3136382c3131362c3136382c3131372c3136372c3131382c3136372c3131392c3136372c3132302c3136372c3132312c3136382c3132322c3136382c3132332c3136382c3132342c3136382c3132352c3136382c3132362c3136382c3132372c3136382c3132382c3136382c3132392c3136382c3133302c3136382c3133312c3136382c3133322c3136372c3133332c3136372c3133342c3136372c3133352c3136372c3133362c3136372c3133372c3136372c3133382c3136372c3133392c3136372c3134302c3136372c3134312c3136372c3134322c3136372c3134332c3136372c3134342c3136372c3134352c3136372c3134362c3136372c3134372c3136372c3134382c3136372c3134392c3136372c3135302c3136372c3135302c3136362c3135302c3136352c3135302c3136342c3135302c3136332c3135302c3136322c3134392c3136322c3134382c3136312c3134392c3136302c3135302c3136302c3135302c3135392c3135302c3135382c3135302c3135372c3135302c3135362c3135302c3135352c3135302c3135342c3135302c3135332c3135302c3135322c3135302c3135312c3135302c3135302c3135302c3134392c3135302c3134382c3135302c3134372c3135302c3134362c3135302c3134352c3135302c3134342c3135302c3134332c3135302c3134322c3135302c3134312c3135302c3134302c3135302c3133392c3135302c3133382c3135302c3133372c3134392c3133372c3134382c3133362c3134392c3133352c3135302c3133342c3135302c3133332c3135302c3133322c3134392c3133322c3134382c3133322c3134372c3133322c3134362c3133322c3134352c3133322c3134342c3133322c3134332c3133322c3134322c3133322c3134312c3133322c3134302c3133322c3133392c3133332c3133382c3133332c3133372c3133332c3133362c3133332c3133352c3133322c3133352c3133312c3133352c3133302c3133352c3132392c3133352c3132382c3133362c3132372c3133372c3132372c3133382c3132372c3133392c3132372c3133392c3132362c3133392c3132352c3133392c3132342c3134302c3132332c3134312c3132322c3134322c3132322c3134332c3132322c3134342c3132322c3134352c3132322c3134362c3132322c3134372c3132322c3134382c3132322c3134392c3132322c3135302c3132322c3135312c3132322c3135322c3132322c3135332c3132322c3135342c3132322c3135352c3132322c3135362c3132322c3135372c3132322c3135382c3132322c3135392c3132322c3136302c3132322c3136312c3132332c3136312c3132342c3136312c3132352c3136312c3132362c3136312c3132372c3136312c3132382c3136312c3132392c3136312c3133302c3136302c3133312c3135392c3133312c3135382c3133312c3135372c3133322c3135362c3133322c3135352c3133332c3135352c3133342c3135352c3133352c3135352c3133362c3135352c3133372c3135352c3133382c3135352c3133392c3135352c3134302c3135352c3134312c3135352c3134322c3135352c3134332c3135352c3134342c3135352c3134352c3135352c3134362c3135352c3134372c3135352c3134382c3135352c3134392c3135352c3135302c3135352c3135312c3135352c3135322c3135352c3135332c3135352c3135342c3135352c3135352c3135352c3135362c3135352c3135372c3135352c3135382c3135352c3135392c3135352c3136302c3135342c3136312c3135332c3136312c3135322c3136312c3135322c3136322c3135322c3136332c3135322c3136342c3135322c3136352c3135322c3136362c3135322c3136372c3135332c3136372c3135342c3136372c3135352c3136372c3135362c3136372c3135372c3136372c3135382c3136372c3135392c3136372c3136302c3136372c3136312c3136372c3136322c3136372c3136332c3136372c3136342c3136372c3136352c3136372c3136362c3136372c3136372c3136372c3136382c3136372c3136392c3136372c3137302c3136372c3137312c3136372c3137322c3136372c3137332c3136372c3137342c3136372c3137352c3136372c3137362c3136372c3137372c3136372c3137382c3136372c3137392c3136372c3138302c3136372c3138312c3136372c3138322c3136372c3138332c3136372c3138332c3136362c3138342c3136352c3138342c3136342c3138342c3136332c3138342c3136322c3138342c3136312c3138342c3136302c3138332c3135392c3138332c3135382c3138332c3135372c3138332c3135362c3138322c3135352c3138332c3135342c3138332c3135332c3138332c3135322c3138332c3135312c3138332c3135302c3138332c3134392c3138332c3134382c3138332c3134372c3138332c3134362c3138332c3134352c3138332c3134342c3138332c3134332c3138332c3134322c3138332c3134312c3138332c3134302c3138332c3133392c3138332c3133382c3138332c3133372c3138332c3133362c3138332c3133352c3138332c3133342c3138332c3133332c3138332c3133322c3138332c3133312c3138332c3133302c3138332c3132392c3138332c3132382c3138332c3132372c3138332c3132362c3138332c3132352c3138332c3132342c3138332c3132332c3138332c3132322c3138332c3132312c3138332c3132302c3138332c3131392c3138342c3131382c3138352c3131382c3138352c3131372c3138352c3131362c3138352c3131352c3138352c3131342c3138352c3131332c3138352c3131322c3138352c3131312c3138352c3131302c3138352c3130392c3138352c3130382c3138352c3130372c3138352c3130362c3138352c3130352c3138352c3130342c3138352c3130332c3138352c3130322c3138342c3130322c3138342c3130332c3138332c3130342c3138322c3130342c3138312c3130332c3138302c3130322c3138312c3130312c3138312c3130302c3138312c39392c3138312c39382c3138312c39372c3138312c39362c3138312c39352c3138302c39352c3137392c39342c3138302c39332c3138312c39332c3138312c39322c3138312c39312c3138312c39302c3138312c38392c3138312c38382c3138302c38372c3138302c38362c3138312c38352c3138312c38342c3138322c38332c3138322c38322c3138322c38312c3138322c38302c3138312c38302c3138302c37392c3138302c37382c3138312c37372c3138322c37372c3138322c37362c3138322c37352c3138322c37342c3138322c37332c3138322c37322c3138322c37312c3138312c37312c3138302c37302c3138312c36392c3138322c36392c3138322c36382c3138322c36372c3138322c36362c3138322c36352c3138322c36342c3138312c36342c3138302c36332c3138302c36322c3138312c36312c3138322c36312c3138322c36302c3138322c35392c3138322c35382c3138322c35372c3138322c35362c3138312c35362c3138302c35352c3138302c35342c3138312c35332c3138322c35332c3138322c35322c3138322c35312c3138322c35302c3138322c34392c3138322c34382c3138322c34372c3138312c34362c3138322c34352c3138322c34342c3138322c34332c3138322c34322c3138322c34312c3138322c34302c3138322c33392c3138312c33382c3138322c33372c3138332c33372c3138332c33362c3138332c33352c3138332c33342c3138332c33332c3138332c33322c3138332c33312c3138322c33312c3138312c33302c3138322c32392c3138332c32392c3138342c32382c3138342c32372c3138342c32362c3138352c32352c3138352c32342c3138352c32332c3138352c32322c3138362c32312c3138372c32312c3138382c32312c3138392c32312c3139302c32312c3139312c32312c3139322c32312c3139322c32302c3139332c31392c3139342c32302c3139342c32312c3139352c32312c3139362c32312c3139372c32312c3139382c32312c3139382c32302c3139382c31392c3139382c31382c3139372c31382c3139362c31382c3139352c31392c3139342c31392c3139332c31382c3139342c31372c3139342c31362c3139352c31352c3139362c31352c3139372c31352c3139372c31342c3139372c31332c3139372c31322c3139372c31312c3139372c31302c3139372c392c3139372c382c3139372c372c3139372c362c3139372c352c3139362c352c3139352c352c3139342c352c3139332c352c3139322c352c3139312c352c3139302c352c3138392c352c3138382c352c3138372c352c3138362c352c3138352c352c3138342c352c3138332c352c3138322c352c3138312c352c3138302c352c3137392c352c3137382c352c3137372c352c3137362c352c3137352c352c3137342c352c3137332c352c3137322c352c3137312c352c3137302c352c3136392c352c3136382c352c3136382c362c3136382c372c3136372c382c3136372c392c3136372c31302c3136382c31312c3136372c31322c3136372c31332c3136362c31342c3136362c31352c3136362c31362c3136362c31372c3136362c31382c3136362c31392c3136362c32302c3136362c32312c3136362c32322c3136362c32332c3136362c32342c3136362c32352c3136362c32362c3136362c32372c3136362c32382c3136362c32392c3136362c33302c3136362c33312c3136362c33322c3136362c33332c3136362c33342c3136362c33352c3136362c33362c3136362c33372c3136362c33382c3136362c33392c3136362c34302c3136362c34312c3136362c34322c3136362c34332c3136362c34342c3136362c34352c3136362c34362c3136362c34372c3136362c34382c3136362c34392c3136362c35302c3136362c35312c3136362c35322c3136362c35332c3136362c35342c3136362c35352c3136362c35362c3136362c35372c3136362c35382c3136362c35392c3136362c36302c3136362c36312c3136362c36322c3136362c36332c3136362c36342c3136362c36352c3136362c36362c3136362c36372c3136362c36382c3136362c36392c3136362c37302c3136362c37312c3136362c37322c3136362c37332c3136362c37342c3136362c37352c3136362c37362c3136362c37372c3136362c37382c3136362c37392c3136362c38302c3136362c38312c3136362c38322c3136372c38332c3136362c38342c3136362c38352c3136362c38362c3136362c38372c3136362c38382c3136362c38392c3136362c39302c3136362c39312c3136362c39322c3136362c39332c3136362c39342c3136362c39352c3136362c39362c3136362c39372c3136362c39382c3136362c39392c3136352c3130302c3136342c3130302c3136332c3130302c3136322c3130302c3136312c3130302c3136302c39392c3136302c39382c3136302c39372c3136302c39362c3136302c39352c3136302c39342c3136302c39332c3136302c39322c3136302c39312c3136302c39302c3136302c38392c3136302c38382c3136302c38372c3136302c38362c3136302c38352c3136302c38342c3136302c38332c3136302c38322c3136302c38312c3136302c38302c3136302c37392c3136302c37382c3136302c37372c3136302c37362c3136302c37352c3136302c37342c3136302c37332c3136302c37322c3136302c37312c3136302c37302c3136302c36392c3136302c36382c3136302c36372c3136302c36362c3136302c36352c3136302c36342c3136302c36332c3136302c36322c3136302c36312c3136302c36302c3136302c35392c3136302c35382c3136302c35372c3136302c35362c3136302c35352c3136302c35342c3136302c35332c3136302c35322c3136302c35312c3136302c35302c3136302c34392c3136302c34382c3136302c34372c3136302c34362c3136302c34352c3136302c34342c3136302c34332c3136302c34322c3136302c34312c3136302c34302c3136302c33392c3136302c33382c3136302c33372c3136302c33362c3136302c33352c3136302c33342c3136302c33332c3136302c33322c3136302c33312c3136302c33302c3136302c32392c3136302c32382c3136302c32372c3136302c32362c3136302c32352c3136302c32342c3136302c32332c3136302c32322c3136302c32312c3136302c32302c3136302c31392c3136302c31382c3136302c31372c3136302c31362c3136302c31352c3136302c31342c3136302c31332c3136302c31322c3136312c31312c3136322c31322c3136322c31332c3136322c31342c3136322c31352c3136322c31362c3136322c31372c3136322c31382c3136322c31392c3136332c31392c3136342c31392c3136342c31382c3136342c31372c3136342c31362c3136342c31352c3136342c31342c3136342c31332c3136342c31322c3136342c31312c3136342c31302c3136342c392c3136342c382c3136342c372c3136332c372c3136322c372c3136312c372c3136302c372c3135392c372c3135382c372c3135372c372c3135362c372c3135352c372c3135342c372c3135332c372c3135322c372c3135312c372c3135302c372c3134392c372c3134382c372c3134372c372c3134362c372c3134352c372c3134342c372c3134332c372c3134322c372c3134312c372c3134302c372c3133392c372c3133382c362c3133372c352c3133372c342c3133372c332c3133362c332c3133352c332c3133342c332c3133332c332c3133322c332c3133312c332c3133302c332c3132392c332c3132382c332c3132372c332c3132362c332c3132352c332c3132342c332c3132332c332c3132322c332c3132312c332c3132302c332c3132302c342c3132302c352c3132302c362c3132302c372c3132302c382c3132302c392c3132302c31302c3132302c31312c3132302c31322c3132302c31332c3132302c31342c3132302c31352c3132302c31362c3132302c31372c3132302c31382c3132302c31392c3132302c32302c3132302c32312c3132302c32322c3132302c32332c3132302c32342c3132302c32352c3132302c32362c3132302c32372c3132302c32382c3132302c32392c3132302c33302c3132302c33312c3132302c33322c3132302c33332c3132302c33342c3132302c33352c3132302c33362c3132302c33372c3132302c33382c3132302c33392c3132302c34302c3132302c34312c3132302c34322c3132302c34332c3132302c34342c3132302c34352c3132302c34362c3132302c34372c3132302c34382c3132302c34392c3132302c35302c3132302c35312c3132302c35322c3132302c35332c3132302c35342c3132302c35352c3132302c35362c3132302c35372c3132302c35382c3132302c35392c3132302c36302c3132312c36302c3132322c36302c3132332c36302c3132342c35392c3132352c36302c3132362c36302c3132372c36302c3132382c36302c3132392c36302c3133302c36302c3133312c36302c3133322c36302c3133332c36302c3133342c36302c3133352c36302c3133362c36302c3133372c36302c3133382c36302c3133392c36302c3134302c36302c3134312c36302c3134322c36302c3134332c36312c3134332c36322c3134332c36332c3134332c36342c3134322c36352c3134312c36352c3134302c36352c3133392c36352c3133382c36352c3133372c36352c3133362c36352c3133352c36352c3133342c36352c3133332c36352c3133322c36352c3133312c36352c3133302c36352c3132392c36352c3132382c36352c3132372c36342c3132362c36342c3132352c36342c3132342c36342c3132332c36342c3132322c36342c3132312c36342c3132302c36342c3131392c36342c3131392c36352c3131392c36362c3131392c36372c3131392c36382c3131392c36392c3131392c37302c3131392c37312c3132302c37312c3132312c37312c3132322c37312c3132332c37312c3132342c37312c3132352c37322c3132362c37322c3132372c37322c3132382c37322c3132392c37322c3133302c37322c3133312c37312c3133322c37312c3133332c37312c3133342c37312c3133352c37312c3133362c37312c3133372c37312c3133382c37312c3133392c37312c3134302c37312c3134312c37312c3134322c37312c3134332c37322c3134332c37332c3134332c37342c3134332c37352c3134322c37362c3134312c37362c3134302c37362c3133392c37362c3133382c37362c3133372c37362c3133362c37362c3133352c37362c3133342c37362c3133332c37362c3133322c37362c3133312c37362c3133302c37362c3132392c37362c3132382c37362c3132372c37362c3132362c37362c3132352c37362c3132342c37362c3132332c37362c3132322c37362c3132312c37362c3132302c37362c3131392c37362c3131382c37362c3131372c37362c3131362c37362c3131352c37362c3131342c37352c3131342c37342c3131332c37332c3131332c37322c3131342c37312c3131342c37302c3131342c36392c3131342c36382c3131342c36372c3131342c36362c3131332c36352c3131342c36342c3131342c36332c3131342c36322c3131342c36312c3131342c36302c3131342c35392c3131342c35382c3131342c35372c3131342c35362c3131342c35352c3131332c35352c3131322c35352c3131312c35342c3131302c35332c3131302c35322c3131302c35312c3131302c35302c3131302c34392c3131312c34382c3131322c34382c3131332c34382c3131342c34382c3131342c34372c3131342c34362c3131342c34352c3131342c34342c3131342c34332c3131342c34322c3131342c34312c3131342c34302c3131332c33392c3131342c33382c3131342c33372c3131342c33362c3131342c33352c3131342c33342c3131342c33332c3131342c33322c3131342c33312c3131342c33302c3131342c32392c3131342c32382c3131342c32372c3131342c32362c3131342c32352c3131342c32342c3131342c32332c3131342c32322c3131342c32312c3131342c32302c3131342c31392c3131342c31382c3131342c31372c3131342c31362c3131342c31352c3131342c31342c3131342c31332c3131332c31322c3131342c31312c3131342c31302c3131342c392c3131342c382c3131342c372c3131342c362c3131342c352c3131342c342c3131332c332c3131322c322c3131312c322c3131302c325d7d2c2235223a7b22636f6f7264696e61746573223a5b3139352c32342c3139342c32352c3139332c32352c3139332c32362c3139332c32372c3139332c32382c3139322c32392c3139312c32392c3139302c32392c3138392c32392c3138382c32392c3138372c32392c3138362c33302c3138362c33312c3138352c33322c3138352c33332c3138352c33342c3138352c33352c3138352c33362c3138352c33372c3138352c33382c3138352c33392c3138352c34302c3138352c34312c3138362c34312c3138372c34322c3138362c34332c3138352c34332c3138352c34342c3138342c34352c3138342c34362c3138342c34372c3138342c34382c3138342c34392c3138342c35302c3138342c35312c3138342c35322c3138342c35332c3138342c35342c3138342c35352c3138342c35362c3138342c35372c3138342c35382c3138352c35392c3138342c36302c3138342c36312c3138342c36322c3138342c36332c3138342c36342c3138342c36352c3138342c36362c3138342c36372c3138342c36382c3138342c36392c3138342c37302c3138342c37312c3138342c37322c3138342c37332c3138342c37342c3138342c37352c3138342c37362c3138342c37372c3138342c37382c3138342c37392c3138342c38302c3138352c38302c3138362c38312c3138362c38322c3138372c38332c3138362c38342c3138352c38342c3138342c38342c3138342c38352c3138342c38362c3138342c38372c3138342c38382c3138342c38392c3138342c39302c3138342c39312c3138342c39322c3138342c39332c3138342c39342c3138342c39352c3138342c39362c3138342c39372c3138342c39382c3138342c39392c3138342c3130302c3138342c3130312c3138352c3130312c3138362c3130322c3138362c3130332c3138362c3130342c3138362c3130352c3138362c3130362c3138362c3130372c3138362c3130382c3138362c3130392c3138362c3131302c3138362c3131312c3138362c3131322c3138362c3131332c3138362c3131342c3138362c3131352c3138362c3131362c3138362c3131372c3138362c3131382c3138372c3131382c3138382c3131392c3138382c3132302c3138382c3132312c3138382c3132322c3138392c3132332c3138392c3132342c3138382c3132352c3138382c3132362c3138382c3132372c3138382c3132382c3138382c3132392c3138382c3133302c3138382c3133312c3138382c3133322c3138382c3133332c3138382c3133342c3138382c3133352c3138382c3133362c3138382c3133372c3138382c3133382c3138382c3133392c3138382c3134302c3138382c3134312c3138382c3134322c3138382c3134332c3138382c3134342c3138382c3134352c3138382c3134362c3138382c3134372c3138382c3134382c3138382c3134392c3138382c3135302c3138382c3135312c3138382c3135322c3138382c3135332c3138382c3135342c3138382c3135352c3138382c3135362c3138382c3135372c3138382c3135382c3138382c3135392c3138382c3136302c3138382c3136312c3138382c3136322c3138382c3136332c3138382c3136342c3138382c3136352c3138382c3136362c3138382c3136372c3138392c3136382c3138382c3136392c3138382c3137302c3138382c3137312c3138382c3137322c3138392c3137332c3138392c3137342c3138392c3137352c3138382c3137362c3138382c3137372c3138372c3137382c3138372c3137392c3138372c3138302c3138362c3138312c3138362c3138322c3138362c3138332c3138352c3138342c3138352c3138352c3138352c3138362c3138342c3138372c3138342c3138382c3138332c3138392c3138332c3139302c3138332c3139312c3138322c3139322c3138322c3139332c3138322c3139342c3138322c3139352c3138332c3139352c3138342c3139352c3138352c3139342c3138352c3139332c3138352c3139322c3138362c3139312c3138362c3139302c3138362c3138392c3138372c3138382c3138372c3138372c3138372c3138362c3138382c3138352c3138382c3138342c3138382c3138332c3138382c3138322c3138392c3138312c3138392c3138302c3138392c3137392c3139302c3137382c3139302c3137372c3139302c3137362c3139312c3137352c3139312c3137342c3139312c3137332c3139312c3137322c3139322c3137312c3139322c3137302c3139322c3136392c3139332c3136382c3139342c3136372c3139352c3136372c3139362c3136372c3139372c3136372c3139382c3136372c3139392c3136372c3230302c3136372c3230312c3136372c3230322c3136372c3230332c3136372c3230342c3136372c3230352c3136372c3230362c3136372c3230372c3136362c3230382c3136362c3230392c3136372c3231302c3136372c3231312c3136372c3231322c3136372c3231332c3136372c3231342c3136372c3231352c3136372c3231362c3136372c3231372c3136372c3231382c3136372c3231382c3136362c3231382c3136352c3231382c3136342c3231382c3136332c3231382c3136322c3231382c3136312c3231382c3136302c3231382c3135392c3231382c3135382c3231382c3135372c3231382c3135362c3231382c3135352c3231382c3135342c3231382c3135332c3231382c3135322c3231382c3135312c3231382c3135302c3231382c3134392c3231382c3134382c3231382c3134372c3231372c3134362c3231372c3134352c3231382c3134342c3231382c3134332c3231382c3134322c3231382c3134312c3231382c3134302c3231382c3133392c3231382c3133382c3231382c3133372c3231382c3133362c3231382c3133352c3231382c3133342c3231382c3133332c3231382c3133322c3231382c3133312c3231382c3133302c3231382c3132392c3231382c3132382c3231382c3132372c3231382c3132362c3231382c3132352c3231382c3132342c3231382c3132332c3231382c3132322c3231382c3132312c3231382c3132302c3231382c3131392c3231382c3131382c3231382c3131372c3231382c3131362c3231382c3131352c3231382c3131342c3231382c3131332c3231382c3131322c3231392c3131312c3232302c3131302c3232312c3131302c3232322c3131302c3232332c3131302c3232342c3131302c3232342c3130392c3232342c3130382c3232342c3130372c3232342c3130362c3232352c3130352c3232362c3130352c3232372c3130352c3232382c3130352c3232392c3130352c3233302c3130352c3233312c3130352c3233322c3130352c3233332c3130352c3233342c3130352c3233342c3130342c3233352c3130332c3233352c3130322c3233362c3130312c3233372c3130312c3233382c3130312c3233392c3130312c3234302c3130312c3234312c3130312c3234322c3130312c3234332c3130312c3234342c3130312c3234352c3130312c3234362c3130312c3234372c3130312c3234382c3130312c3234392c3130312c3235302c3130312c3235312c3130312c3235322c3130312c3235332c3130312c3235332c3130302c3235332c39392c3235332c39382c3235332c39372c3235342c39362c3235342c39352c3235352c39342c3235362c39342c3235362c39332c3235362c39322c3235362c39312c3235362c39302c3235362c38392c3235372c38382c3235372c38372c3235382c38362c3235382c38352c3235382c38342c3235392c38332c3235392c38322c3236302c38312c3236302c38302c3236302c37392c3236312c37382c3236322c37372c3236332c37382c3236342c37382c3236352c37392c3236352c38302c3236362c38302c3236372c38302c3236382c38302c3236392c38302c3237302c38302c3237312c38312c3237322c38322c3237322c38332c3237322c38342c3237312c38352c3237312c38362c3237302c38372c3237302c38382c3237302c38392c3237302c39302c3236392c39312c3236392c39322c3236392c39332c3236392c39342c3236392c39352c3236382c39362c3236372c39362c3236362c39372c3236362c39382c3236362c39392c3236362c3130302c3236362c3130312c3236362c3130322c3236362c3130332c3236372c3130332c3236382c3130332c3236392c3130322c3237302c3130322c3237312c3130322c3237322c3130322c3237332c3130322c3237342c3130322c3237352c3130322c3237362c3130322c3237372c3130322c3237382c3130322c3237392c3130322c3238302c3130322c3238312c3130322c3238322c3130322c3238332c3130322c3238332c3130312c3238332c3130302c3238332c39392c3238332c39382c3238332c39372c3238332c39362c3238332c39352c3238332c39342c3238332c39332c3238332c39322c3238332c39312c3238332c39302c3238332c38392c3238332c38382c3238332c38372c3238332c38362c3238332c38352c3238332c38342c3238332c38332c3238332c38322c3238332c38312c3238332c38302c3238332c37392c3238332c37382c3238332c37372c3238332c37362c3238332c37352c3238332c37342c3238332c37332c3238332c37322c3238332c37312c3238332c37302c3238332c36392c3238332c36382c3238332c36372c3238332c36362c3238332c36352c3238332c36342c3238332c36332c3238332c36322c3238332c36312c3238332c36302c3238332c35392c3238332c35382c3238332c35372c3238332c35362c3238332c35352c3238332c35342c3238332c35332c3238332c35322c3238332c35312c3238332c35302c3238332c34392c3238332c34382c3238332c34372c3238332c34362c3238332c34352c3238332c34342c3238332c34332c3238332c34322c3238332c34312c3238332c34302c3238332c33392c3238332c33382c3238332c33372c3238332c33362c3238332c33352c3238332c33342c3238332c33332c3238332c33322c3238332c33312c3238332c33302c3238332c32392c3238332c32382c3238332c32372c3238332c32362c3238332c32352c3238332c32342c3238322c32342c3238312c32342c3238302c32342c3237392c32342c3237382c32342c3237372c32342c3237362c32342c3237352c32342c3237342c32342c3237332c32342c3237322c32342c3237312c32342c3237302c32342c3236392c32342c3236382c32342c3236372c32342c3236362c32342c3236352c32342c3236342c32342c3236332c32342c3236322c32342c3236312c32342c3236302c32342c3235392c32342c3235382c32342c3235372c32342c3235362c32342c3235352c32342c3235342c32342c3235332c32342c3235322c32342c3235312c32342c3235302c32342c3234392c32342c3234382c32342c3234372c32342c3234362c32342c3234352c32342c3234342c32352c3234342c32362c3234342c32372c3234342c32382c3234342c32392c3234342c33302c3234342c33312c3234342c33322c3234342c33332c3234332c33342c3234322c33342c3234312c33342c3234302c33342c3233392c33342c3233382c33342c3233372c33342c3233362c33342c3233352c33342c3233342c33342c3233332c33342c3233322c33342c3233312c33342c3233302c33342c3232392c33342c3232382c33342c3232372c33352c3232362c33352c3232352c33352c3232342c33352c3232332c33342c3232332c33332c3232342c33322c3232342c33312c3232342c33302c3232332c32392c3232332c32382c3232332c32372c3232332c32362c3232322c32352c3232312c32352c3232302c32342c3231392c32342c3231382c32342c3231372c32342c3231362c32342c3231352c32342c3231342c32342c3231332c32342c3231322c32342c3231312c32342c3231302c32342c3230392c32342c3230382c32342c3230372c32342c3230362c32342c3230352c32342c3230342c32342c3230332c32342c3230322c32342c3230312c32352c3230302c32342c3139392c32342c3139382c32342c3139372c32342c3139362c32345d7d7d2c2276657273696f6e223a22312e302e30227d",mockMapDataWiFi:"7b226964223a302c22737461747573223a312c227265736f6c7574696f6e223a352c2273697a65223a5b3235362c3332365d2c226f726967696e223a5b3130362c3139395d2c2263686172676572223a7b22636f6f7264696e617465223a5b3131342c3139395d2c22616e676c65223a307d2c22636172706574223a5b7b22636f6f7264696e61746573223a5b5d2c227479706573223a307d5d2c226f62737461636c6573223a5b7b22636f6f7264696e61746573223a5b3135342c34372c3135352c34372c3135362c34372c3134342c34382c3134352c34382c3135302c34382c3135312c34382c3135322c34382c3135332c34382c3135342c34382c3135312c34392c3135312c35302c3135312c35312c3134332c35332c3134322c35342c3134332c35342c3137392c35372c3138302c35372c3138312c35372c3138322c35372c3138332c35372c3138342c35372c3138352c35372c3138362c35372c3138372c35372c3138382c35372c3138392c35372c3139302c35372c3139312c35372c3139322c35372c3139332c35372c3139342c35372c3138312c35382c3139352c36322c3139352c36332c3134342c36342c3139352c36342c3139352c36352c3139362c36352c3134332c36372c3134332c36382c3134332c36392c3139352c36392c3138382c38302c3138372c38312c3138382c38312c3138392c38312c3139302c38312c3139312c38312c3139322c38312c3139332c38312c3139342c38312c3139352c38312c3139362c38312c3139372c38312c3137342c38322c3137352c38322c3137362c38322c3137372c38322c3137382c38322c3139372c38322c3130352c38332c3135302c38332c3135312c38332c3135322c38332c3135332c38332c3135342c38332c3135352c38332c3135362c38332c3135372c38332c3135382c38332c3135392c38332c3136302c38332c3136312c38332c3136322c38332c3136332c38332c3136342c38332c3136352c38332c3136362c38332c3136372c38332c3136382c38332c3136392c38332c3137302c38332c3137312c38332c3137322c38332c3139372c38332c3130352c38342c3130362c38342c3130372c38342c3134302c38342c3134342c38342c3134352c38342c3134362c38342c3134372c38342c3134382c38342c3134392c38342c3135302c38342c3135312c38342c3135322c38342c3135332c38342c3135342c38342c3135352c38342c3139372c38342c3130372c38352c3131312c38352c3131322c38352c3131332c38352c3131342c38352c3131352c38352c3131362c38352c3131372c38352c3131382c38352c3131392c38352c3132302c38352c3132312c38352c3132322c38352c3132332c38352c3132342c38352c3132352c38352c3132362c38352c3132372c38352c3132382c38352c3132392c38352c3133302c38352c3133312c38352c3133322c38352c3133332c38352c3133342c38352c3133352c38352c3133362c38352c3133372c38352c3133382c38352c3133392c38352c3134302c38352c3134342c38352c3139372c38352c37342c38362c37352c38362c37362c38362c37372c38362c37382c38362c37392c38362c38302c38362c38312c38362c38322c38362c38332c38362c38342c38362c38352c38362c38362c38362c38372c38362c38382c38362c38392c38362c39302c38362c39312c38362c39322c38362c39332c38362c39342c38362c39352c38362c39362c38362c39372c38362c39382c38362c39392c38362c3130302c38362c3130372c38362c3131302c38362c3134302c38362c3134342c38362c3139372c38362c37342c38372c39392c38372c3130372c38372c3134302c38372c3134312c38372c3134342c38372c3139372c38372c37342c38382c3130372c38382c3134312c38382c3134322c38382c3134332c38382c3134342c38382c3139372c38382c37342c38392c3130372c38392c3134342c38392c3139372c38392c37342c39302c3130372c39302c3134342c39302c3134352c39302c3134362c39302c3139372c39302c37342c39312c3130322c39312c3130332c39312c3130342c39312c3130352c39312c3130372c39312c3134342c39312c3134352c39312c3134362c39312c3139372c39312c37342c39322c3130302c39322c3130372c39322c3134302c39322c3134342c39322c3139372c39322c37342c39332c3130372c39332c3134302c39332c3134312c39332c3134322c39332c3134332c39332c3134342c39332c3134352c39332c3139372c39332c3231322c39332c37342c39342c3130372c39342c3134302c39342c3134312c39342c3134352c39342c3139372c39342c3231322c39342c34302c39352c34312c39352c34322c39352c34332c39352c34342c39352c37342c39352c38362c39352c3130372c39352c3131302c39352c3134312c39352c3134352c39352c3139372c39352c3231312c39352c3231322c39352c34302c39362c34352c39362c36372c39362c37342c39362c3130372c39362c3131302c39362c3134312c39362c3134352c39362c3139372c39362c3231312c39362c33392c39372c34302c39372c34352c39372c34362c39372c34372c39372c34382c39372c34392c39372c35302c39372c35312c39372c35322c39372c35332c39372c35342c39372c35352c39372c35362c39372c35372c39372c35382c39372c35392c39372c36302c39372c36312c39372c36322c39372c36332c39372c36342c39372c36352c39372c36362c39372c36372c39372c37342c39372c39352c39372c3130372c39372c3131302c39372c3134312c39372c3134352c39372c3139372c39372c3231312c39372c3231372c39372c3233372c39372c3233382c39372c33332c39382c33342c39382c33352c39382c33362c39382c33372c39382c33382c39382c33392c39382c36372c39382c37342c39382c39332c39382c39342c39382c39352c39382c39362c39382c39372c39382c39382c39382c3130372c39382c3131312c39382c3134312c39382c3134352c39382c3139372c39382c3231312c39382c3231372c39382c3231382c39382c3231392c39382c3232302c39382c3232312c39382c3232322c39382c3232332c39382c3232342c39382c3232352c39382c3232362c39382c3232372c39382c3232382c39382c3232392c39382c3233302c39382c3233312c39382c3233322c39382c3233332c39382c3233382c39382c3233392c39382c36372c39392c37342c39392c3130372c39392c3131312c39392c3134312c39392c3134352c39392c3137312c39392c3137322c39392c3139372c39392c3231312c39392c36372c3130302c37342c3130302c3130372c3130302c3131312c3130302c3134312c3130302c3134352c3130302c3136362c3130302c3139372c3130302c3231312c3130302c37342c3130312c38382c3130312c3130372c3130312c3131312c3130312c3134312c3130312c3134352c3130312c3136362c3130312c3139372c3130312c3231312c3130312c34332c3130322c34342c3130322c37342c3130322c38362c3130322c38372c3130322c38382c3130322c3130372c3130322c3131312c3130322c3134312c3130322c3134352c3130322c3139372c3130322c3231312c3130322c34342c3130332c37342c3130332c3130372c3130332c3131312c3130332c3134312c3130332c3134352c3130332c3139372c3130332c3231312c3130332c33382c3130342c37342c3130342c3130372c3130342c3131312c3130342c3134312c3130342c3134352c3130342c3139372c3130342c3231312c3130342c33382c3130352c33392c3130352c36312c3130352c37342c3130352c3130372c3130352c3131312c3130352c3134312c3130352c3134352c3130352c3138372c3130352c3139372c3130352c3231312c3130352c3232382c3130352c33382c3130362c34322c3130362c36312c3130362c37342c3130362c3130372c3130362c3131312c3130362c3131392c3130362c3132302c3130362c3132312c3130362c3132322c3130362c3134312c3130362c3134352c3130362c3136392c3130362c3138322c3130362c3138332c3130362c3138342c3130362c3138352c3130362c3138362c3130362c3138372c3130362c3138382c3130362c3138392c3130362c3139302c3130362c3139312c3130362c3139322c3130362c3139332c3130362c3139342c3130362c3139352c3130362c3139362c3130362c3139372c3130362c3231312c3130362c3232382c3130362c33372c3130372c33382c3130372c36302c3130372c36312c3130372c37342c3130372c37352c3130372c37362c3130372c37372c3130372c37382c3130372c3130372c3130372c3131312c3130372c3132302c3130372c3132312c3130372c3132322c3130372c3134312c3130372c3134352c3130372c3136392c3130372c3138312c3130372c3138322c3130372c3231312c3130372c3232382c3130372c3232392c3130372c3233302c3130372c3233312c3130372c3233322c3130372c3233332c3130372c3233342c3130372c3233352c3130372c3233362c3130372c3233372c3130372c3233382c3130372c3233392c3130372c3234302c3130372c3234312c3130372c3234322c3130372c3234332c3130372c3234342c3130372c3234352c3130372c3234362c3130372c3234372c3130372c3234382c3130372c3234392c3130372c3235302c3130372c3235312c3130372c3235322c3130372c3235332c3130372c3235342c3130372c3235352c3130372c3235362c3130372c3235372c3130372c33372c3130382c36302c3130382c37382c3130382c37392c3130382c3130372c3130382c3131312c3130382c3134312c3130382c3134352c3130382c3138312c3130382c3231312c3130382c3235372c3130382c33362c3130392c33372c3130392c36302c3130392c37352c3130392c37362c3130392c37372c3130392c37382c3130392c37392c3130392c3130372c3130392c3131312c3130392c3134312c3130392c3134352c3130392c3137392c3130392c3138302c3130392c3138312c3130392c3231312c3130392c3235372c3130392c36302c3131302c36312c3131302c37362c3131302c37392c3131302c3130372c3131302c3131312c3131302c3134312c3131302c3134352c3131302c3137392c3131302c3231312c3131302c3235372c3131302c33392c3131312c34302c3131312c34312c3131312c36312c3131312c36322c3131312c37362c3131312c37392c3131312c38302c3131312c3130372c3131312c3131312c3131312c3134302c3131312c3134312c3131312c3134352c3131312c3137392c3131312c3231312c3131312c3235372c3131312c34302c3131322c34312c3131322c36322c3131322c36332c3131322c36342c3131322c36352c3131322c36362c3131322c36372c3131322c36382c3131322c37362c3131322c3130372c3131322c3131312c3131322c3134302c3131322c3134352c3131322c3137392c3131322c3231312c3131322c3235372c3131322c34302c3131332c34312c3131332c34322c3131332c36382c3131332c37362c3131332c3130372c3131332c3131312c3131332c3134302c3131332c3134352c3131332c3137382c3131332c3137392c3131332c3231312c3131332c3235372c3131332c34302c3131342c34322c3131342c36382c3131342c37362c3131342c3130372c3131342c3131312c3131342c3134302c3131342c3134312c3131342c3134352c3131342c3137382c3131342c3137392c3131342c3138302c3131342c3138312c3131342c3138322c3131342c3231312c3131342c3235372c3131342c34302c3131352c34312c3131352c34322c3131352c36382c3131352c37362c3131352c3130372c3131352c3131312c3131352c3134312c3131352c3134352c3131352c3138322c3131352c3231312c3131352c3235372c3131352c3235382c3131352c33372c3131362c33382c3131362c33392c3131362c34302c3131362c34312c3131362c35392c3131362c36302c3131362c36312c3131362c36322c3131362c36332c3131362c36342c3131362c36352c3131362c36362c3131362c36372c3131362c36382c3131362c37362c3131362c3130372c3131362c3131312c3131362c3134312c3131362c3134352c3131362c3134362c3131362c3135342c3131362c3138322c3131362c3231312c3131362c3235382c3131362c34302c3131372c34312c3131372c35392c3131372c37362c3131372c3130372c3131372c3131312c3131372c3134312c3131372c3134352c3131372c3138322c3131372c3231312c3131372c3235382c3131372c34302c3131382c35392c3131382c37362c3131382c3130372c3131382c3131312c3131382c3134312c3131382c3134352c3131382c3138322c3131382c3231312c3131382c3235382c3131382c34302c3131392c35392c3131392c37362c3131392c3130372c3131392c3131312c3131392c3134312c3131392c3134352c3131392c3138322c3131392c3231312c3131392c3235382c3131392c34302c3132302c35392c3132302c37362c3132302c3130372c3132302c3131312c3132302c3134312c3132302c3134352c3132302c3138302c3132302c3138312c3132302c3138322c3132302c3231312c3132302c3235382c3132302c34302c3132312c34312c3132312c35392c3132312c37362c3132312c3130372c3132312c3131312c3132312c3134352c3132312c3134362c3132312c3134372c3132312c3134382c3132312c3134392c3132312c3135302c3132312c3135312c3132312c3135322c3132312c3135332c3132312c3135342c3132312c3135352c3132312c3135362c3132312c3135372c3132312c3135382c3132312c3135392c3132312c3136302c3132312c3138312c3132312c3138322c3132312c3231312c3132312c3235382c3132312c34312c3132322c35392c3132322c36302c3132322c37362c3132322c39372c3132322c3130372c3132322c3131312c3132322c3131322c3132322c3133352c3132322c3136302c3132322c3138322c3132322c3231312c3132322c3235382c3132322c34312c3132332c36302c3132332c37362c3132332c39372c3132332c39382c3132332c3130372c3132332c3131312c3132332c3133352c3132332c3135392c3132332c3136302c3132332c3138322c3132332c3138332c3132332c3138342c3132332c3138352c3132332c3138362c3132332c3138372c3132332c3138382c3132332c3138392c3132332c3231312c3132332c3235382c3132332c34302c3132342c34312c3132342c36302c3132342c36312c3132342c36322c3132342c36332c3132342c36342c3132342c36352c3132342c36362c3132342c36372c3132342c36382c3132342c36392c3132342c37362c3132342c3130372c3132342c3131312c3132342c3133352c3132342c3135362c3132342c3135372c3132342c3135382c3132342c3135392c3132342c3138392c3132342c3231312c3132342c3235382c3132342c3235392c3132342c3236302c3132342c3236312c3132342c34302c3132352c36392c3132352c37362c3132352c3130372c3132352c3131312c3132352c3133352c3132352c3135362c3132352c3138392c3132352c3230362c3132352c3230372c3132352c3230382c3132352c3230392c3132352c3231302c3132352c3231312c3132352c3231322c3132352c3236312c3132352c34302c3132362c36392c3132362c37362c3132362c3130372c3132362c3131312c3132362c3133352c3132362c3135362c3132362c3138392c3132362c3139302c3132362c3139312c3132362c3139322c3132362c3230372c3132362c3236312c3132362c34302c3132372c36392c3132372c37362c3132372c3130372c3132372c3131312c3132372c3133352c3132372c3135362c3132372c3139322c3132372c3139332c3132372c3230372c3132372c3236312c3132372c34302c3132382c36392c3132382c37362c3132382c3130372c3132382c3131312c3132382c3133352c3132382c3135342c3132382c3135352c3132382c3135362c3132382c3139332c3132382c3139342c3132382c3230372c3132382c3235302c3132382c3236312c3132382c34302c3132392c34312c3132392c34322c3132392c36392c3132392c37362c3132392c3130372c3132392c3131312c3132392c3133352c3132392c3133362c3132392c3133372c3132392c3133382c3132392c3133392c3132392c3134302c3132392c3134312c3132392c3134322c3132392c3134332c3132392c3134342c3132392c3134352c3132392c3134362c3132392c3134372c3132392c3134382c3132392c3134392c3132392c3135302c3132392c3135312c3132392c3135322c3132392c3135332c3132392c3135342c3132392c3138372c3132392c3138382c3132392c3139342c3132392c3139352c3132392c3230372c3132392c3234392c3132392c3236312c3132392c34322c3133302c36392c3133302c37362c3133302c3130372c3133302c3131312c3133302c3139352c3133302c3230372c3133302c3236312c3133302c34322c3133312c36392c3133312c37362c3133312c3130372c3133312c3131312c3133312c3139352c3133312c3139362c3133312c3230372c3133312c3236312c3133312c34322c3133322c36392c3133322c37362c3133322c3130372c3133322c3131312c3133322c3139362c3133322c3230372c3133322c3235322c3133322c3236312c3133322c34312c3133332c34322c3133332c36392c3133332c37362c3133332c3130372c3133332c3131312c3133332c3137382c3133332c3137392c3133332c3138302c3133332c3138312c3133332c3139312c3133332c3139362c3133332c3230372c3133332c3235302c3133332c3235312c3133332c3235322c3133332c3235332c3133332c3235342c3133332c3235392c3133332c3236302c3133332c3236312c3133332c33392c3133342c34302c3133342c34312c3133342c36392c3133342c37362c3133342c3130372c3133342c3130382c3133342c3130392c3133342c3131302c3133342c3131312c3133342c3131322c3133342c3139312c3133342c3139362c3133342c3230372c3133342c3235342c3133342c3235352c3133342c3235362c3133342c3235372c3133342c3235382c3133342c3235392c3133342c33372c3133352c33382c3133352c33392c3133352c36392c3133352c37362c3133352c3139312c3133352c3139362c3133352c3230372c3133352c3235342c3133352c33372c3133362c36392c3133362c37362c3133362c3139312c3133362c3139362c3133362c3230372c3133362c3235342c3133362c33372c3133372c36392c3133372c37362c3133372c3139312c3133372c3139362c3133372c3230372c3133372c3235342c3133372c33372c3133382c36392c3133382c37362c3133382c3139302c3133382c3139362c3133382c3230372c3133382c3235342c3133382c33372c3133392c36392c3133392c37362c3133392c3139302c3133392c3139362c3133392c3230372c3133392c3235342c3133392c33372c3134302c36392c3134302c37362c3134302c3139362c3134302c3230372c3134302c3235342c3134302c33372c3134312c36392c3134312c37362c3134312c3139362c3134312c3230372c3134312c3235342c3134312c33372c3134322c34382c3134322c36392c3134322c37362c3134322c3139362c3134322c3230372c3134322c3235342c3134322c33372c3134332c34382c3134332c36392c3134332c37362c3134332c3139362c3134332c3230372c3134332c3235342c3134332c33372c3134342c34312c3134342c34382c3134342c34392c3134342c36392c3134342c37302c3134342c37312c3134342c37322c3134342c37332c3134342c37342c3134342c37352c3134342c37362c3134342c3139362c3134342c3230372c3134342c3235342c3134342c33372c3134352c34312c3134352c34322c3134352c34382c3134352c34392c3134352c3139362c3134352c3230372c3134352c3235342c3134352c33372c3134362c34322c3134362c34382c3134362c34392c3134362c3139362c3134362c3230372c3134362c3235342c3134362c33372c3134372c34322c3134372c34372c3134372c34382c3134372c34392c3134372c3139362c3134372c3230372c3134372c3235342c3134372c34322c3134382c34392c3134382c3139362c3134382c3230372c3134382c3235342c3134382c3235352c3134382c3235362c3134382c3235372c3134382c3235382c3134382c3235392c3134382c3236302c3134382c34322c3134392c34332c3134392c34342c3134392c34352c3134392c34362c3134392c34372c3134392c34392c3134392c35302c3134392c35312c3134392c35322c3134392c35332c3134392c35342c3134392c35352c3134392c35362c3134392c35372c3134392c35382c3134392c35392c3134392c36302c3134392c3139342c3134392c3139352c3134392c3139362c3134392c3230372c3134392c3236302c3134392c3236312c3134392c3236322c3134392c36302c3135302c36312c3135302c3135352c3135302c3135362c3135302c3135372c3135302c3135382c3135302c3135392c3135302c3136302c3135302c3136312c3135302c3136322c3135302c3136332c3135302c3136342c3135302c3136352c3135302c3136362c3135302c3136372c3135302c3136382c3135302c3136392c3135302c3137302c3135302c3137312c3135302c3137322c3135302c3137332c3135302c3137342c3135302c3137352c3135302c3137362c3135302c3137372c3135302c3137382c3135302c3137392c3135302c3138302c3135302c3138312c3135302c3138322c3135302c3138332c3135302c3138342c3135302c3138352c3135302c3138362c3135302c3138372c3135302c3138382c3135302c3138392c3135302c3139302c3135302c3139312c3135302c3139322c3135302c3139332c3135302c3139342c3135302c3230372c3135302c3236322c3135302c36312c3135312c3131342c3135312c3131352c3135312c3131362c3135312c3135342c3135312c3135352c3135312c3230372c3135312c3231332c3135312c3232332c3135312c3233312c3135312c3233322c3135312c3236322c3135312c3236332c3135312c34382c3135322c34392c3135322c35302c3135322c35312c3135322c35322c3135322c35332c3135322c35342c3135322c35352c3135322c35362c3135322c35372c3135322c35382c3135322c35392c3135322c36302c3135322c36312c3135322c3131342c3135322c3135342c3135322c3230372c3135322c3231332c3135322c3232302c3135322c3232312c3135322c3232322c3135322c3232332c3135322c3232342c3135322c3232352c3135322c3232362c3135322c3232372c3135322c3232382c3135322c3232392c3135322c3233302c3135322c3233312c3135322c3233322c3135322c3233332c3135322c3233342c3135322c3233352c3135322c3233362c3135322c3233372c3135322c3233382c3135322c3233392c3135322c3234302c3135322c3234312c3135322c3236332c3135322c33382c3135332c34382c3135332c3131342c3135332c3133332c3135332c3133342c3135332c3133352c3135332c3135342c3135332c3230372c3135332c3230382c3135332c3230392c3135332c3231302c3135332c3231312c3135332c3231322c3135332c3231332c3135332c3231342c3135332c3231352c3135332c3231362c3135332c3231372c3135332c3231382c3135332c3231392c3135332c3232302c3135332c3232312c3135332c3232322c3135332c3232332c3135332c3232342c3135332c3232352c3135332c3232362c3135332c3232372c3135332c3232382c3135332c3232392c3135332c3233302c3135332c3233312c3135332c3233322c3135332c3233332c3135332c3233342c3135332c3233352c3135332c3233362c3135332c3233372c3135332c3233382c3135332c3233392c3135332c3234302c3135332c3236332c3135332c31332c3135342c31342c3135342c31352c3135342c31362c3135342c31372c3135342c31382c3135342c31392c3135342c32302c3135342c32312c3135342c32322c3135342c32332c3135342c32342c3135342c32352c3135342c32362c3135342c32372c3135342c32382c3135342c32392c3135342c33302c3135342c33312c3135342c33322c3135342c33332c3135342c33382c3135342c33392c3135342c34302c3135342c34312c3135342c34322c3135342c34332c3135342c34342c3135342c34352c3135342c34362c3135342c34372c3135342c34382c3135342c3131342c3135342c3133332c3135342c3133352c3135342c3133362c3135342c3135342c3135342c3135352c3135342c3135362c3135342c3135372c3135342c3135382c3135342c3135392c3135342c3136302c3135342c3136312c3135342c3136322c3135342c3136332c3135342c3136342c3135342c3136352c3135342c3136362c3135342c3136372c3135342c3136382c3135342c3136392c3135342c3137302c3135342c3137312c3135342c3137322c3135342c3137332c3135342c3137342c3135342c3137352c3135342c3137362c3135342c3137372c3135342c3137382c3135342c3137392c3135342c3138302c3135342c3138312c3135342c3138322c3135342c3138332c3135342c3138342c3135342c3138352c3135342c3138362c3135342c3138372c3135342c3138382c3135342c3138392c3135342c3139302c3135342c3139312c3135342c3139322c3135342c3139332c3135342c3139342c3135342c3139352c3135342c3139362c3135342c3139372c3135342c3139382c3135342c3139392c3135342c3230302c3135342c3230312c3135342c3230322c3135342c3230332c3135342c3230342c3135342c3231312c3135342c3236332c3135342c31332c3135352c33382c3135352c3131342c3135352c3133332c3135352c3133362c3135352c3230342c3135352c3231312c3135352c3236322c3135352c3236332c3135352c31332c3135362c33382c3135362c3131342c3135362c3133332c3135362c3133362c3135362c3230342c3135362c3231312c3135362c3236322c3135362c3236332c3135362c31332c3135372c33382c3135372c33392c3135372c3131342c3135372c3133332c3135372c3133362c3135372c3230342c3135372c3231312c3135372c3236312c3135372c3236322c3135372c31332c3135382c33322c3135382c33392c3135382c34302c3135382c34312c3135382c3131342c3135382c3133332c3135382c3133362c3135382c3230342c3135382c3231312c3135382c3236302c3135382c3236312c3135382c3236322c3135382c31332c3135392c33302c3135392c33312c3135392c34312c3135392c34322c3135392c3131342c3135392c3131352c3135392c3131362c3135392c3133332c3135392c3133362c3135392c3230342c3135392c3231312c3135392c3235392c3135392c3236302c3135392c3236322c3135392c31332c3136302c33302c3136302c34312c3136302c3131342c3136302c3131352c3136302c3133332c3136302c3133362c3136302c3230342c3136302c3231312c3136302c3235392c3136302c3236302c3136302c3236312c3136302c3236322c3136302c3236332c3136302c31332c3136312c33302c3136312c34312c3136312c3131342c3136312c3131352c3136312c3133332c3136312c3133362c3136312c3230342c3136312c3231312c3136312c3236332c3136312c31332c3136322c33302c3136322c34312c3136322c3131342c3136322c3131352c3136322c3133332c3136322c3133362c3136322c3230342c3136322c3231312c3136322c3236332c3136322c31332c3136332c33302c3136332c34312c3136332c3131342c3136332c3131352c3136332c3133332c3136332c3133362c3136332c3230342c3136332c3231312c3136332c31332c3136342c33302c3136342c34312c3136342c3131342c3136342c3131352c3136342c3133332c3136342c3133362c3136342c3230342c3136342c3231312c3136342c31332c3136352c33302c3136352c33392c3136352c34302c3136352c34312c3136352c3131342c3136352c3131352c3136352c3133332c3136352c3133362c3136352c3230342c3136352c3231312c3136352c31332c3136362c33302c3136362c33392c3136362c3131342c3136362c3131352c3136362c3133332c3136362c3133362c3136362c3230342c3136362c3231312c3136362c31332c3136372c32382c3136372c32392c3136372c33302c3136372c33392c3136372c3131342c3136372c3131352c3136372c3131362c3136372c3131372c3136372c3133332c3136372c3133362c3136372c3230342c3136372c3231312c3136372c31332c3136382c32382c3136382c33392c3136382c3131342c3136382c3131352c3136382c3133332c3136382c3133362c3136382c3230342c3136382c3231312c3136382c31332c3136392c32372c3136392c32382c3136392c33392c3136392c3131342c3136392c3131352c3136392c3133332c3136392c3133362c3136392c3230342c3136392c3231312c3136392c31332c3137302c32372c3137302c33392c3137302c3131342c3137302c3131352c3137302c3133332c3137302c3133362c3137302c3230342c3137302c3231312c3137302c31332c3137312c32372c3137312c33372c3137312c33382c3137312c33392c3137312c3130302c3137312c3130312c3137312c3131322c3137312c3131332c3137312c3131342c3137312c3131352c3137312c3133332c3137312c3133362c3137312c3230342c3137312c3231312c3137312c31332c3137322c32362c3137322c32372c3137322c33372c3137322c37322c3137322c3130302c3137322c3130312c3137322c3131322c3137322c3131332c3137322c3131352c3137322c3133332c3137322c3133362c3137322c3230342c3137322c3231312c3137322c31332c3137332c32362c3137332c33372c3137332c36332c3137332c36342c3137332c37332c3137332c3130312c3137332c3131332c3137332c3131352c3137332c3133332c3137332c3133362c3137332c3230342c3137332c3231312c3137332c3236332c3137332c3236342c3137332c3236352c3137332c3236362c3137332c3237322c3137332c3237332c3137332c3237342c3137332c3237352c3137332c3237362c3137332c3237372c3137332c3237382c3137332c3237392c3137332c3238302c3137332c3238312c3137332c3238322c3137332c3238352c3137332c31332c3137342c32362c3137342c33372c3137342c36332c3137342c3130312c3137342c3130322c3137342c3131332c3137342c3131352c3137342c3133332c3137342c3133362c3137342c3230342c3137342c3231312c3137342c3233302c3137342c3233312c3137342c3233322c3137342c3233332c3137342c3233342c3137342c3233352c3137342c3233362c3137342c3233372c3137342c3233382c3137342c3233392c3137342c3234302c3137342c3234312c3137342c3234322c3137342c3234332c3137342c3234342c3137342c3234352c3137342c3234362c3137342c3234372c3137342c3234382c3137342c3234392c3137342c3235302c3137342c3235312c3137342c3235322c3137342c3235332c3137342c3235342c3137342c3235352c3137342c3235362c3137342c3235372c3137342c3235382c3137342c3235392c3137342c3236302c3137342c3236312c3137342c3236322c3137342c3236332c3137342c3236362c3137342c3237322c3137342c3239302c3137342c31332c3137352c32362c3137352c32372c3137352c32382c3137352c32392c3137352c33302c3137352c33312c3137352c33322c3137352c33332c3137352c33372c3137352c3130312c3137352c3130322c3137352c3131332c3137352c3131342c3137352c3131352c3137352c3131362c3137352c3131372c3137352c3133332c3137352c3133362c3137352c3230342c3137352c3231312c3137352c3233302c3137352c3236382c3137352c3236392c3137352c3237302c3137352c3237312c3137352c3237322c3137352c31332c3137362c33332c3137362c33372c3137362c3131342c3137362c3131352c3137362c3131362c3137362c3131372c3137362c3133332c3137362c3133362c3137362c3230342c3137362c3231312c3137362c3233302c3137362c31332c3137372c33332c3137372c33342c3137372c33352c3137372c33362c3137372c33372c3137372c3131352c3137372c3133332c3137372c3133362c3137372c3135352c3137372c3135362c3137372c3135372c3137372c3135382c3137372c3135392c3137372c3136302c3137372c3136312c3137372c3136322c3137372c3136332c3137372c3136342c3137372c3136352c3137372c3136362c3137372c3136372c3137372c3136382c3137372c3136392c3137372c3137302c3137372c3137312c3137372c3137322c3137372c3137332c3137372c3137342c3137372c3137352c3137372c3137362c3137372c3137372c3137372c3137382c3137372c3137392c3137372c3138302c3137372c3138312c3137372c3138322c3137372c3138332c3137372c3138342c3137372c3230342c3137372c3231312c3137372c3233302c3137372c3233332c3137372c3233342c3137372c3233352c3137372c3233362c3137372c3233372c3137372c3233382c3137372c3233392c3137372c3234302c3137372c3234312c3137372c3234322c3137372c3234332c3137372c3234342c3137372c3234352c3137372c3234362c3137372c3234372c3137372c3234382c3137372c3234392c3137372c3235302c3137372c3235312c3137372c3235322c3137372c3235332c3137372c3235342c3137372c3235352c3137372c31332c3137382c33352c3137382c3131352c3137382c3133332c3137382c3133362c3137382c3135352c3137382c3138332c3137382c3230342c3137382c3230352c3137382c3230362c3137382c3230372c3137382c3230382c3137382c3230392c3137382c3231302c3137382c3231312c3137382c3233302c3137382c3233332c3137382c3235352c3137382c31332c3137392c3131352c3137392c3133332c3137392c3133362c3137392c3135352c3137392c3138332c3137392c3230352c3137392c3230362c3137392c3233302c3137392c3233332c3137392c3235352c3137392c31332c3138302c3131352c3138302c3133332c3138302c3133362c3138302c3135352c3138302c3135362c3138302c3135372c3138302c3135382c3138302c3135392c3138302c3136302c3138302c3136312c3138302c3136322c3138302c3136332c3138302c3136342c3138302c3136352c3138302c3136362c3138302c3136372c3138302c3136382c3138302c3136392c3138302c3137302c3138302c3137312c3138302c3137322c3138302c3137332c3138302c3137342c3138302c3137352c3138302c3137362c3138302c3137372c3138302c3137382c3138302c3138332c3138302c3233302c3138302c3233312c3138302c3233322c3138302c3233332c3138302c3235352c3138302c31332c3138312c37322c3138312c37332c3138312c3131352c3138312c3133332c3138312c3133362c3138312c3137392c3138312c3138332c3138312c3235352c3138312c31332c3138322c36322c3138322c36332c3138322c36342c3138322c37322c3138322c37332c3138322c37342c3138322c3131352c3138322c3133332c3138322c3133362c3138322c3137392c3138322c3138332c3138322c3235342c3138322c3235352c3138322c31332c3138332c36312c3138332c36322c3138332c36332c3138332c37352c3138332c3131352c3138332c3131362c3138332c3133332c3138332c3133362c3138332c3137392c3138332c3138332c3138332c3235352c3138332c31332c3138342c36312c3138342c3131352c3138342c3131362c3138342c3131372c3138342c3133332c3138342c3133362c3138342c3137392c3138342c3138332c3138342c3235352c3138342c31332c3138352c3131352c3138352c3131362c3138352c3133332c3138352c3133362c3138352c3137392c3138352c3138332c3138352c3235352c3138352c31332c3138362c3131352c3138362c3133332c3138362c3133362c3138362c3137392c3138362c3138332c3138362c3235352c3138362c31332c3138372c3131352c3138372c3133332c3138372c3133362c3138372c3137392c3138372c3138332c3138372c3235352c3138372c31332c3138382c36302c3138382c36312c3138382c37342c3138382c37352c3138382c37362c3138382c38342c3138382c38352c3138382c3131352c3138382c3133332c3138382c3133362c3138382c3135352c3138382c3135362c3138382c3135372c3138382c3135382c3138382c3135392c3138382c3136302c3138382c3136312c3138382c3136322c3138382c3136332c3138382c3136342c3138382c3136352c3138382c3136362c3138382c3136372c3138382c3136382c3138382c3136392c3138382c3137302c3138382c3137312c3138382c3137322c3138382c3137332c3138382c3137342c3138382c3137352c3138382c3137362c3138382c3137372c3138382c3137382c3138382c3137392c3138382c3138332c3138382c3235352c3138382c31332c3138392c35322c3138392c36302c3138392c36312c3138392c36322c3138392c37362c3138392c3130322c3138392c3131332c3138392c3131342c3138392c3131352c3138392c3133332c3138392c3133362c3138392c3135352c3138392c3137312c3138392c3137392c3138392c3138332c3138392c3231392c3138392c3232302c3138392c3232312c3138392c3232322c3138392c3232332c3138392c3232342c3138392c3232352c3138392c3232362c3138392c3232372c3138392c3232382c3138392c3232392c3138392c3233302c3138392c3233312c3138392c3233322c3138392c3233332c3138392c3233342c3138392c3233352c3138392c3233362c3138392c3233372c3138392c3233382c3138392c3233392c3138392c3234302c3138392c3234312c3138392c3234322c3138392c3234332c3138392c3234342c3138392c3234352c3138392c3234362c3138392c3234372c3138392c3234382c3138392c3234392c3138392c3235302c3138392c3235312c3138392c3235322c3138392c3235332c3138392c3235342c3138392c3235352c3138392c31332c3139302c3130312c3139302c3130322c3139302c3130332c3139302c3131332c3139302c3131342c3139302c3131352c3139302c3133332c3139302c3133362c3139302c3135352c3139302c3137312c3139302c3137392c3139302c3138332c3139302c3231382c3139302c3231392c3139302c31332c3139312c3130312c3139312c3130322c3139312c3130332c3139312c3131352c3139312c3131362c3139312c3131372c3139312c3133332c3139312c3133362c3139312c3135352c3139312c3135362c3139312c3135382c3139312c3135392c3139312c3136302c3139312c3136312c3139312c3136322c3139312c3136332c3139312c3136342c3139312c3136352c3139312c3136362c3139312c3136372c3139312c3136382c3139312c3136392c3139312c3137302c3139312c3137312c3139312c3137392c3139312c3138332c3139312c3231382c3139312c31332c3139322c3130322c3139322c3131352c3139322c3131362c3139322c3131372c3139322c3133332c3139322c3133362c3139322c3135362c3139322c3135372c3139322c3135382c3139322c3137392c3139322c3138332c3139322c3231382c3139322c31332c3139332c3131352c3139332c3131362c3139332c3133332c3139332c3133362c3139332c3137392c3139332c3138332c3139332c3231382c3139332c31332c3139342c3131352c3139342c3131362c3139342c3133332c3139342c3133362c3139342c3137392c3139342c3138332c3139342c3231382c3139342c31332c3139352c3131352c3139352c3131362c3139352c3133332c3139352c3133362c3139352c3137392c3139352c3138332c3139352c3231372c3139352c3231382c3139352c31332c3139362c3131352c3139362c3131362c3139362c3133332c3139362c3133362c3139362c3137382c3139362c3137392c3139362c3138332c3139362c3231362c3139362c3231372c3139362c31332c3139372c36312c3139372c37362c3139372c38352c3139372c3131352c3139372c3131362c3139372c3133332c3139372c3133362c3139372c3137382c3139372c3138332c3139372c3231362c3139372c31332c3139382c3131352c3139382c3131362c3139382c3133332c3139382c3133362c3139382c3137382c3139382c3137392c3139382c3138332c3139382c3231362c3139382c31332c3139392c3131352c3139392c3131362c3139392c3131372c3139392c3133332c3139392c3133362c3139392c3137392c3139392c3138332c3139392c3231362c3139392c31332c3230302c3131352c3230302c3131362c3230302c3131372c3230302c3131382c3230302c3133332c3230302c3133362c3230302c3137392c3230302c3138332c3230302c3138372c3230302c3231362c3230302c31332c3230312c3131352c3230312c3131362c3230312c3133332c3230312c3133362c3230312c3137392c3230312c3138332c3230312c3231362c3230312c31332c3230322c3131362c3230322c3133332c3230322c3133362c3230322c3137392c3230322c3138332c3230322c3231362c3230322c31332c3230332c36322c3230332c37352c3230332c3131362c3230332c3133332c3230332c3133362c3230332c3137392c3230332c3138332c3230332c3231362c3230332c31332c3230342c36332c3230342c36342c3230342c36352c3230342c37322c3230342c37332c3230342c37342c3230342c3131362c3230342c3133332c3230342c3133362c3230342c3137392c3230342c3138332c3230342c3231362c3230342c31332c3230352c3131362c3230352c3133332c3230352c3133362c3230352c3137392c3230352c3138332c3230352c3231362c3230352c31332c3230362c3131362c3230362c3133332c3230362c3133362c3230362c3137392c3230362c3138332c3230362c3231362c3230362c31332c3230372c3131362c3230372c3133332c3230372c3133362c3230372c3137392c3230372c3138332c3230372c3231362c3230372c31332c3230382c3131362c3230382c3131372c3230382c3131382c3230382c3133332c3230382c3133362c3230382c3137392c3230382c3138332c3230382c3231362c3230382c31332c3230392c3131362c3230392c3131372c3230392c3133332c3230392c3133362c3230392c3137392c3230392c3138332c3230392c3231362c3230392c31332c3231302c3131362c3231302c3131372c3231302c3133332c3231302c3133362c3231302c3137392c3231302c3138332c3231302c3231362c3231302c31332c3231312c3131362c3231312c3131372c3231312c3133332c3231312c3133362c3231312c3137392c3231312c3138332c3231312c3231362c3231312c31332c3231322c3130322c3231322c3131362c3231322c3131372c3231322c3133332c3231322c3133362c3231322c3137392c3231322c3138332c3231322c3231362c3231322c31332c3231332c36352c3231332c37342c3231332c37352c3231332c3131352c3231332c3131362c3231332c3131372c3231332c3133332c3231332c3133362c3231332c3137362c3231332c3137372c3231332c3137382c3231332c3137392c3231332c3138332c3231332c3231362c3231332c31332c3231342c31342c3231342c3131352c3231342c3131362c3231342c3131372c3231342c3133332c3231342c3133362c3231342c3137362c3231342c3137372c3231342c3137382c3231342c3137392c3231342c3138302c3231342c3138312c3231342c3138322c3231342c3138332c3231342c3231362c3231342c31342c3231352c3131362c3231352c3131372c3231352c3133332c3231352c3133362c3231352c3137362c3231352c3137372c3231352c3138312c3231352c3138322c3231352c3231362c3231352c31342c3231362c3131362c3231362c3131372c3231362c3131382c3231362c3133332c3231362c3133362c3231362c3137362c3231362c3137372c3231362c3138312c3231362c3138322c3231362c3231362c3231362c31342c3231372c3131362c3231372c3133332c3231372c3133362c3231372c3137362c3231372c3138312c3231372c3138322c3231372c3231362c3231372c31342c3231382c3131352c3231382c3131362c3231382c3133332c3231382c3133362c3231382c3138312c3231382c3138322c3231382c3231362c3231382c31342c3231392c3131352c3231392c3131362c3231392c3133332c3231392c3133362c3231392c3138312c3231392c3138322c3231392c3231362c3231392c31342c3232302c3131362c3232302c3133332c3232302c3133362c3232302c3138312c3232302c3138322c3232302c3231362c3232302c31342c3232312c3131362c3232312c3133332c3232312c3133362c3232312c3137382c3232312c3137392c3232312c3138302c3232312c3138312c3232312c3138322c3232312c3231362c3232312c31342c3232322c37332c3232322c37342c3232322c37352c3232322c37362c3232322c37372c3232322c3131362c3232322c3133332c3232322c3133362c3232322c3137382c3232322c3138322c3232322c3231362c3232322c31342c3232332c35372c3232332c35382c3232332c35392c3232332c36302c3232332c36312c3232332c36322c3232332c36332c3232332c36342c3232332c36352c3232332c36362c3232332c36372c3232332c36382c3232332c36392c3232332c37302c3232332c37312c3232332c37322c3232332c37332c3232332c37372c3232332c3131352c3232332c3131362c3232332c3133332c3232332c3133362c3232332c3137382c3232332c3138322c3232332c3231362c3232332c31342c3232342c35362c3232342c35372c3232342c37372c3232342c37382c3232342c3131342c3232342c3131352c3232342c3131362c3232342c3131372c3232342c3131382c3232342c3133332c3232342c3133362c3232342c3137382c3232342c3138322c3232342c3231362c3232342c31342c3232352c35362c3232352c37382c3232352c3131332c3232352c3131342c3232352c3131352c3232352c3133332c3232352c3133362c3232352c3137382c3232352c3138322c3232352c3231362c3232352c31342c3232362c35352c3232362c35362c3232362c37382c3232362c3131322c3232362c3131332c3232362c3131352c3232362c3133332c3232362c3133362c3232362c3137382c3232362c3138322c3232362c3231362c3232362c31342c3232372c35352c3232372c37382c3232372c3131312c3232372c3131322c3232372c3131352c3232372c3133332c3232372c3133362c3232372c3137382c3232372c3138322c3232372c3231362c3232372c31342c3232382c35352c3232382c37382c3232382c3131302c3232382c3131312c3232382c3131352c3232382c3133332c3232382c3133362c3232382c3137382c3232382c3138322c3232382c3231362c3232382c31342c3232392c32322c3232392c32332c3232392c32342c3232392c32352c3232392c32362c3232392c32372c3232392c35352c3232392c37382c3232392c3130392c3232392c3131302c3232392c3131352c3232392c3133332c3232392c3133362c3232392c3137382c3232392c3138322c3232392c3231362c3232392c31342c3233302c32322c3233302c33302c3233302c33312c3233302c33322c3233302c33332c3233302c33342c3233302c33352c3233302c33362c3233302c33372c3233302c33382c3233302c33392c3233302c34302c3233302c34312c3233302c34322c3233302c34332c3233302c34372c3233302c34382c3233302c34392c3233302c35302c3233302c35312c3233302c35322c3233302c35332c3233302c35342c3233302c35352c3233302c37382c3233302c3130382c3233302c3130392c3233302c3131352c3233302c3133332c3233302c3133362c3233302c3137382c3233302c3138322c3233302c3138332c3233302c3138342c3233302c3231362c3233302c31342c3233312c32322c3233312c33302c3233312c33382c3233312c34362c3233312c35342c3233312c35352c3233312c35362c3233312c35372c3233312c35382c3233312c35392c3233312c36302c3233312c36312c3233312c36322c3233312c36332c3233312c36342c3233312c36352c3233312c36362c3233312c36372c3233312c36382c3233312c36392c3233312c37302c3233312c37312c3233312c37322c3233312c37332c3233312c37342c3233312c37352c3233312c37362c3233312c37372c3233312c37382c3233312c38332c3233312c38342c3233312c3130372c3233312c3130382c3233312c3131352c3233312c3133332c3233312c3133362c3233312c3137382c3233312c3138322c3233312c3231362c3233312c31342c3233322c33382c3233322c34362c3233322c35342c3233322c36322c3233322c36332c3233322c37312c3233322c37322c3233322c37372c3233322c37382c3233322c37392c3233322c38302c3233322c38312c3233322c38322c3233322c38332c3233322c38342c3233322c38352c3233322c38362c3233322c38372c3233322c38382c3233322c38392c3233322c39302c3233322c39312c3233322c39322c3233322c39332c3233322c39342c3233322c39352c3233322c39362c3233322c39372c3233322c39382c3233322c39392c3233322c3130302c3233322c3130312c3233322c3130322c3233322c3130332c3233322c3130342c3233322c3130352c3233322c3130362c3233322c3130372c3233322c3130382c3233322c3130392c3233322c3131302c3233322c3131312c3233322c3131322c3233322c3131332c3233322c3131342c3233322c3131352c3233322c3133332c3233322c3133362c3233322c3137382c3233322c3138322c3233322c3231362c3233322c31342c3233332c33382c3233332c34362c3233332c35342c3233332c36322c3233332c36332c3233332c37312c3233332c37322c3233332c37382c3233332c37392c3233332c38302c3233332c38312c3233332c38322c3233332c38332c3233332c38342c3233332c38352c3233332c38362c3233332c38372c3233332c38382c3233332c38392c3233332c39322c3233332c39332c3233332c39342c3233332c39352c3233332c39362c3233332c39372c3233332c39382c3233332c3130372c3233332c3133332c3233332c3133362c3233332c3137382c3233332c3138322c3233332c3231362c3233332c31342c3233342c33382c3233342c33392c3233342c34302c3233342c34312c3233342c34322c3233342c34332c3233342c34342c3233342c34352c3233342c34362c3233342c35332c3233342c35342c3233342c38312c3233342c38322c3233342c38392c3233342c39302c3233342c39312c3233342c39322c3233342c39382c3233342c39392c3233342c3130362c3233342c3130372c3233342c3133332c3233342c3133362c3233342c3137382c3233342c3138322c3233342c3231362c3233342c31342c3233352c31392c3233352c32302c3233352c32312c3233352c32322c3233352c32332c3233352c32342c3233352c32352c3233352c32362c3233352c32372c3233352c32382c3233352c32392c3233352c33302c3233352c33312c3233352c33322c3233352c33332c3233352c33342c3233352c33352c3233352c33362c3233352c33372c3233352c33382c3233352c33392c3233352c34302c3233352c34312c3233352c34322c3233352c34332c3233352c34342c3233352c34352c3233352c34362c3233352c34372c3233352c34382c3233352c34392c3233352c35302c3233352c35312c3233352c35322c3233352c35332c3233352c39392c3233352c3130332c3233352c3130342c3233352c3130352c3233352c3130362c3233352c3133332c3233352c3133362c3233352c3137382c3233352c3138322c3233352c3231362c3233352c31332c3233362c31342c3233362c31352c3233362c31362c3233362c39392c3233362c3130332c3233362c3133332c3233362c3133362c3233362c3137382c3233362c3138322c3233362c3231362c3233362c31332c3233372c39392c3233372c3130332c3233372c3133332c3233372c3133362c3233372c3137382c3233372c3138322c3233372c3231352c3233372c3231362c3233372c3231372c3233372c3231382c3233372c3231392c3233372c3232302c3233372c3232312c3233372c3232322c3233372c3232332c3233372c3232342c3233372c3232352c3233372c3232362c3233372c3232372c3233372c3232382c3233372c3232392c3233372c3233302c3233372c3233312c3233372c3233322c3233372c3233332c3233372c3233342c3233372c3233352c3233372c3233362c3233372c3233372c3233372c3233382c3233372c3233392c3233372c3234302c3233372c3234312c3233372c3234322c3233372c3234332c3233372c3234342c3233372c3234352c3233372c3234362c3233372c3234372c3233372c3234382c3233372c3234392c3233372c3235302c3233372c3235312c3233372c3235322c3233372c3235332c3233372c3235342c3233372c3235352c3233372c3235362c3233372c3235372c3233372c3235382c3233372c3235392c3233372c3236302c3233372c31332c3233382c39392c3233382c3130302c3233382c3130312c3233382c3130322c3233382c3130332c3233382c3133332c3233382c3133362c3233382c3137382c3233382c3138322c3233382c3236302c3233382c31332c3233392c3133332c3233392c3133362c3233392c3137382c3233392c3138322c3233392c3236302c3233392c31332c3234302c3133332c3234302c3133342c3234302c3133352c3234302c3133362c3234302c3137382c3234302c3138322c3234302c3138332c3234302c3139322c3234302c3139332c3234302c3230322c3234302c3230332c3234302c3236302c3234302c31332c3234312c3133332c3234312c3133342c3234312c3138322c3234312c3138332c3234312c3139332c3234312c3230322c3234312c3230332c3234312c3236302c3234312c31332c3234322c3133332c3234322c3133342c3234322c3138322c3234322c3236302c3234322c31332c3234332c3133332c3234332c3133342c3234332c3137382c3234332c3138322c3234332c3236302c3234332c31332c3234342c3133332c3234342c3133342c3234342c3137382c3234342c3138322c3234342c3236302c3234342c31332c3234352c3133332c3234352c3133342c3234352c3133352c3234352c3133362c3234352c3137382c3234352c3138322c3234352c3236302c3234352c31332c3234362c31342c3234362c3133332c3234362c3133362c3234362c3137382c3234362c3138322c3234362c3236302c3234362c31342c3234372c3133332c3234372c3133362c3234372c3137382c3234372c3138322c3234372c3236302c3234372c31342c3234382c31352c3234382c31362c3234382c31372c3234382c31382c3234382c31392c3234382c32302c3234382c32312c3234382c32322c3234382c32332c3234382c32342c3234382c32352c3234382c32362c3234382c32372c3234382c32382c3234382c32392c3234382c33302c3234382c33312c3234382c33322c3234382c33332c3234382c33342c3234382c33352c3234382c33362c3234382c33372c3234382c33382c3234382c33392c3234382c34302c3234382c34312c3234382c34322c3234382c34332c3234382c34342c3234382c34352c3234382c34362c3234382c3133332c3234382c3133362c3234382c3133372c3234382c3133382c3234382c3133392c3234382c3134302c3234382c3134312c3234382c3134322c3234382c3134332c3234382c3134342c3234382c3134352c3234382c3134362c3234382c3134372c3234382c3134382c3234382c3134392c3234382c3135302c3234382c3135312c3234382c3135322c3234382c3135332c3234382c3135342c3234382c3135352c3234382c3135362c3234382c3135372c3234382c3135382c3234382c3135392c3234382c3136302c3234382c3137382c3234382c3138322c3234382c3236302c3234382c34362c3234392c3133332c3234392c3137382c3234392c3138322c3234392c3138332c3234392c3139322c3234392c3139332c3234392c3230322c3234392c3230332c3234392c3236302c3234392c34362c3235302c34372c3235302c34382c3235302c34392c3235302c35302c3235302c35312c3235302c35322c3235302c35332c3235302c35342c3235302c35352c3235302c35362c3235302c35372c3235302c35382c3235302c35392c3235302c36302c3235302c36312c3235302c36322c3235302c36332c3235302c36342c3235302c36352c3235302c36362c3235302c36372c3235302c36382c3235302c36392c3235302c37302c3235302c37312c3235302c37322c3235302c37332c3235302c37342c3235302c37352c3235302c37362c3235302c37372c3235302c37382c3235302c37392c3235302c38302c3235302c38312c3235302c38322c3235302c38332c3235302c38342c3235302c38352c3235302c38362c3235302c38372c3235302c38382c3235302c38392c3235302c39302c3235302c39312c3235302c39322c3235302c39332c3235302c39342c3235302c39352c3235302c39362c3235302c39372c3235302c39382c3235302c39392c3235302c3130302c3235302c3130312c3235302c3130322c3235302c3130332c3235302c3130342c3235302c3130352c3235302c3130362c3235302c3130372c3235302c3130382c3235302c3130392c3235302c3131302c3235302c3131312c3235302c3131322c3235302c3131332c3235302c3131342c3235302c3131352c3235302c3131362c3235302c3131372c3235302c3131382c3235302c3131392c3235302c3132302c3235302c3132312c3235302c3132322c3235302c3132332c3235302c3132342c3235302c3132352c3235302c3132362c3235302c3132372c3235302c3132382c3235302c3132392c3235302c3133302c3235302c3133312c3235302c3133322c3235302c3133332c3235302c3136312c3235302c3136322c3235302c3137382c3235302c3138332c3235302c3139322c3235302c3139332c3235302c3230322c3235302c3230332c3235302c3233302c3235302c3236302c3235302c3133332c3235312c3136322c3235312c3136332c3235312c3136342c3235312c3136352c3235312c3136362c3235312c3136372c3235312c3136382c3235312c3136392c3235312c3137302c3235312c3137312c3235312c3137322c3235312c3137332c3235312c3137342c3235312c3137352c3235312c3137362c3235312c3137372c3235312c3137382c3235312c3138332c3235312c3138342c3235312c3138352c3235312c3138362c3235312c3138372c3235312c3138382c3235312c3138392c3235312c3139302c3235312c3139312c3235312c3139322c3235312c3139332c3235312c3139342c3235312c3139352c3235312c3139362c3235312c3139372c3235312c3139382c3235312c3139392c3235312c3230302c3235312c3230312c3235312c3230322c3235312c3230332c3235312c3230342c3235312c3230352c3235312c3230362c3235312c3230372c3235312c3230382c3235312c3230392c3235312c3231302c3235312c3231312c3235312c3231322c3235312c3231332c3235312c3231342c3235312c3231352c3235312c3231362c3235312c3231372c3235312c3231382c3235312c3231392c3235312c3232302c3235312c3232312c3235312c3232322c3235312c3232332c3235312c3232342c3235312c3232352c3235312c3232362c3235312c3232372c3235312c3232382c3235312c3232392c3235312c3233302c3235312c3233312c3235312c3233322c3235312c3233332c3235312c3233342c3235312c3233352c3235312c3233362c3235312c3233372c3235312c3233382c3235312c3233392c3235312c3234302c3235312c3234312c3235312c3234322c3235312c3234332c3235312c3234342c3235312c3234352c3235312c3234362c3235312c3234372c3235312c3234382c3235312c3234392c3235312c3235302c3235312c3235312c3235312c3235322c3235312c3235332c3235312c3235342c3235312c3235352c3235312c3235362c3235312c3235372c3235312c3235382c3235312c3235392c3235312c3236302c3235312c3236302c3235325d2c227479706573223a307d5d2c2266726565223a5b7b22636f6f7264696e61746573223a5b5d2c227479706573223a307d5d2c22726f6f6d73223a7b2230223a7b22636f6f7264696e61746573223a5b3133342c362c3133332c372c3133332c382c3133332c392c3133332c31302c3133332c31312c3133342c31322c3133352c31332c3133352c31342c3133362c31352c3133372c31362c3133372c31372c3133382c31382c3133392c31392c3133392c32302c3134302c32312c3134312c32322c3134312c32332c3134322c32342c3134332c32352c3134332c32362c3134342c32372c3134352c32382c3134352c32392c3134362c33302c3134372c33312c3134372c33322c3134382c33332c3134392c33342c3134392c33352c3135302c33362c3135312c33372c3135312c33382c3135322c33392c3135332c34302c3135332c34312c3135342c34322c3135352c34332c3135352c34342c3135362c34352c3135362c34362c3135372c34372c3135362c34382c3135352c34382c3135342c34392c3135332c34392c3135322c34392c3135322c35302c3135322c35312c3135312c35322c3135302c35312c3135302c35302c3135302c34392c3134392c34382c3134382c34372c3134372c34372c3134362c34372c3134362c34382c3134352c34392c3134342c34392c3134332c34382c3134332c34372c3134322c34372c3134312c34372c3134312c34382c3134312c34392c3134322c34392c3134332c35302c3134332c35312c3134332c35322c3134342c35332c3134342c35342c3134332c35352c3134322c35352c3134322c35362c3134312c35372c3134302c35382c3133392c35372c3133382c35372c3133372c35372c3133362c35362c3133352c35362c3133342c35352c3133332c35352c3133322c35352c3133312c35342c3133312c35332c3133302c35332c3132392c35322c3132382c35322c3132372c35322c3132372c35332c3132372c35342c3132382c35342c3132392c35352c3133302c35352c3133312c35352c3133322c35362c3133322c35372c3133332c35372c3133342c35382c3133352c35382c3133362c35392c3133362c36302c3133362c36312c3133372c36312c3133382c36322c3133392c36322c3134302c36322c3134312c36322c3134322c36322c3134332c36332c3134342c36332c3134352c36342c3134342c36352c3134342c36362c3134342c36372c3134342c36382c3134342c36392c3134332c37302c3134332c37312c3134332c37322c3134332c37332c3134332c37342c3134332c37352c3134342c37352c3134352c37362c3134342c37372c3134342c37382c3134342c37392c3134352c37392c3134362c38302c3134372c38312c3134382c38312c3134392c38312c3135302c38312c3135312c38322c3135322c38322c3135332c38322c3135342c38322c3135352c38322c3135362c38322c3135372c38322c3135382c38322c3135392c38322c3136302c38322c3136312c38322c3136322c38322c3136332c38322c3136342c38322c3136352c38322c3136362c38322c3136372c38322c3136382c38322c3136392c38322c3137302c38322c3137312c38322c3137322c38322c3137332c38332c3137322c38342c3137332c38342c3137342c38342c3137352c38342c3137352c38332c3137342c38332c3137332c38322c3137342c38312c3137352c38312c3137362c38312c3137372c38312c3137382c38312c3137392c38322c3137382c38332c3137392c38332c3138302c38332c3138312c38332c3138322c38332c3138332c38332c3138342c38332c3138352c38332c3138362c38332c3138372c38332c3138382c38332c3138382c38322c3138372c38322c3138362c38312c3138372c38302c3138382c37392c3138392c37392c3139302c37392c3139312c37382c3139322c37372c3139332c37362c3139342c37352c3139352c37342c3139362c37342c3139362c37332c3139362c37322c3139362c37312c3139362c37302c3139352c37302c3139342c36392c3139352c36382c3139352c36372c3139352c36362c3139342c36352c3139342c36342c3139342c36332c3139342c36322c3139352c36312c3139352c36302c3139352c35392c3139352c35382c3139342c35382c3139332c35382c3139322c35382c3139312c35382c3139302c35382c3138392c35382c3138382c35382c3138372c35382c3138362c35382c3138352c35382c3138342c35382c3138332c35382c3138322c35382c3138312c35392c3138302c35382c3137392c35382c3137382c35382c3137372c35382c3137372c35392c3137372c36302c3137362c36312c3137362c36322c3137362c36332c3137362c36342c3137362c36352c3137362c36362c3137362c36372c3137362c36382c3137362c36392c3137362c37302c3137352c37312c3137342c37302c3137332c36392c3137332c36382c3137322c36372c3137322c36362c3137312c36352c3137302c36342c3137302c36332c3137302c36322c3136392c36312c3136392c36302c3136392c35392c3136392c35382c3136382c35372c3136382c35362c3136382c35352c3136382c35342c3136372c35332c3136372c35322c3136372c35312c3136362c35302c3136362c34392c3136362c34382c3136362c34372c3136352c34362c3136352c34352c3136352c34342c3136342c34332c3136342c34322c3136342c34312c3136342c34302c3136332c33392c3136332c33382c3136332c33372c3136322c33362c3136322c33352c3136322c33342c3136322c33332c3136312c33322c3136312c33312c3136312c33302c3136312c32392c3136302c32382c3136302c32372c3136302c32362c3135392c32352c3135392c32342c3135392c32332c3135392c32322c3135382c32312c3135382c32302c3135382c31392c3135372c31382c3135372c31372c3135362c31372c3135352c31372c3135352c31382c3135352c31392c3135352c32302c3135352c32312c3135342c32322c3135332c32322c3135322c32312c3135322c32302c3135312c32302c3135302c31392c3135302c31382c3134392c31382c3134382c31382c3134382c31392c3134382c32302c3134392c32312c3134392c32322c3134392c32332c3135302c32342c3135302c32352c3135302c32362c3135312c32372c3135312c32382c3135302c32392c3134392c32382c3134382c32372c3134382c32362c3134372c32352c3134372c32342c3134362c32332c3134352c32322c3134352c32312c3134342c32302c3134342c31392c3134332c31382c3134322c31372c3134322c31362c3134312c31352c3134312c31342c3134302c31332c3133392c31322c3133392c31312c3133382c31302c3133382c392c3133372c382c3133362c372c3133362c362c3133352c365d7d2c2231223a7b22636f6f7264696e61746573223a5b34312c39362c34312c39372c34302c39382c33392c39392c33382c39392c33372c39392c33362c39392c33352c39392c33342c39392c33342c3130302c33342c3130312c33352c3130312c33362c3130322c33372c3130332c33382c3130332c33392c3130342c34302c3130352c33392c3130362c33392c3130372c33382c3130382c33382c3130392c33372c3131302c33362c3131302c33352c3131302c33352c3131312c33352c3131322c33352c3131332c33352c3131342c33362c3131352c33372c3131352c33382c3131352c33392c3131352c33392c3131342c33392c3131332c33392c3131322c33382c3131312c33392c3131302c34302c3131302c34312c3131302c34322c3131312c34322c3131322c34332c3131332c34332c3131342c34332c3131352c34322c3131362c34322c3131372c34312c3131382c34312c3131392c34312c3132302c34322c3132312c34322c3132322c34322c3132332c34322c3132342c34312c3132352c34312c3132362c34312c3132372c34312c3132382c34322c3132382c34332c3132392c34332c3133302c34332c3133312c34332c3133322c34332c3133332c34322c3133342c34312c3133352c34302c3133352c33392c3133362c33382c3133362c33382c3133372c33382c3133382c33382c3133392c33382c3134302c33382c3134312c33382c3134322c33382c3134332c33382c3134342c33382c3134352c33382c3134362c33392c3134362c34302c3134362c34302c3134352c34302c3134342c34312c3134332c34322c3134342c34332c3134352c34332c3134362c34332c3134372c34332c3134382c34342c3134382c34352c3134382c34362c3134382c34372c3134382c34362c3134372c34372c3134362c34372c3134352c34372c3134342c34372c3134332c34372c3134322c34382c3134312c34392c3134322c34392c3134332c35302c3134342c35302c3134352c35302c3134362c35302c3134372c35302c3134382c35312c3134382c35322c3134382c35332c3134382c35342c3134382c35352c3134382c35362c3134382c35372c3134382c35382c3134382c35392c3134382c36302c3134382c36312c3134392c36322c3135302c36332c3135302c36342c3135302c36352c3135302c36362c3135302c36372c3135302c36382c3135302c36392c3135302c37302c3135302c37302c3134392c37302c3134382c37302c3134372c37302c3134362c37302c3134352c36392c3134352c36382c3134342c36382c3134332c36382c3134322c36382c3134312c36382c3134302c36382c3133392c36382c3133382c36382c3133372c36382c3133362c36382c3133352c36382c3133342c36382c3133332c36382c3133322c36382c3133312c36382c3133302c36382c3132392c36382c3132382c36382c3132372c36382c3132362c36382c3132352c36372c3132352c36362c3132352c36352c3132352c36342c3132352c36332c3132352c36322c3132352c36312c3132352c36302c3132352c35392c3132342c35392c3132332c35382c3132322c35382c3132312c35382c3132302c35382c3131392c35382c3131382c35382c3131372c35382c3131362c35392c3131352c36302c3131352c36312c3131352c36322c3131352c36332c3131352c36342c3131352c36352c3131352c36362c3131352c36372c3131352c36372c3131342c36372c3131332c36362c3131332c36352c3131332c36342c3131332c36332c3131332c36322c3131332c36312c3131322c36302c3131312c35392c3131302c35392c3130392c35392c3130382c35392c3130372c36302c3130362c36302c3130352c36312c3130342c36322c3130342c36332c3130342c36342c3130332c36352c3130332c36352c3130322c36362c3130312c36362c3130302c36362c39392c36362c39382c36352c39382c36342c39382c36332c39382c36322c39382c36312c39382c36302c39382c35392c39382c35382c39382c35372c39382c35362c39382c35352c39382c35342c39382c35332c39382c35322c39382c35312c39382c35302c39382c34392c39382c34382c39382c34372c39382c34362c39382c34352c39382c34342c39372c34342c39362c34332c39362c34322c39365d7d2c2232223a7b22636f6f7264696e61746573223a5b3231332c39342c3231332c39352c3231322c39362c3231322c39372c3231322c39382c3231322c39392c3231322c3130302c3231322c3130312c3231322c3130322c3231322c3130332c3231322c3130342c3231322c3130352c3231322c3130362c3231322c3130372c3231322c3130382c3231322c3130392c3231322c3131302c3231322c3131312c3231322c3131322c3231322c3131332c3231322c3131342c3231322c3131352c3231322c3131362c3231322c3131372c3231322c3131382c3231322c3131392c3231322c3132302c3231322c3132312c3231322c3132322c3231322c3132332c3231322c3132342c3231332c3132352c3231322c3132362c3231312c3132362c3231302c3132362c3230392c3132362c3230382c3132362c3230382c3132372c3230382c3132382c3230382c3132392c3230382c3133302c3230382c3133312c3230382c3133322c3230382c3133332c3230382c3133342c3230382c3133352c3230382c3133362c3230382c3133372c3230382c3133382c3230382c3133392c3230382c3134302c3230382c3134312c3230382c3134322c3230382c3134332c3230382c3134342c3230382c3134352c3230382c3134362c3230382c3134372c3230382c3134382c3230382c3134392c3230382c3135302c3230382c3135312c3230382c3135322c3230392c3135322c3231302c3135322c3231312c3135322c3231322c3135322c3231322c3135312c3231332c3135302c3231342c3135312c3231342c3135322c3231352c3135322c3231362c3135322c3231372c3135322c3231382c3135322c3231392c3135322c3232302c3135312c3232312c3135312c3232322c3135312c3232332c3135302c3232342c3135312c3232352c3135312c3232362c3135312c3232372c3135312c3232382c3135312c3232392c3135312c3233302c3135312c3233312c3135302c3233322c3135302c3233332c3135312c3233342c3135312c3233352c3135312c3233362c3135312c3233372c3135312c3233382c3135312c3233392c3135312c3234302c3135312c3234312c3135312c3234322c3135322c3234312c3135332c3234302c3135342c3233392c3135342c3233382c3135342c3233372c3135342c3233362c3135342c3233352c3135342c3233342c3135342c3233332c3135342c3233322c3135342c3233312c3135342c3233302c3135342c3232392c3135342c3232382c3135342c3232372c3135342c3232362c3135342c3232352c3135342c3232342c3135342c3232332c3135342c3232322c3135342c3232312c3135342c3232302c3135342c3231392c3135342c3231382c3135342c3231372c3135342c3231362c3135342c3231352c3135342c3231342c3135342c3231332c3135342c3231322c3135342c3231322c3135352c3231322c3135362c3231322c3135372c3231322c3135382c3231322c3135392c3231322c3136302c3231322c3136312c3231322c3136322c3231322c3136332c3231322c3136342c3231322c3136352c3231322c3136362c3231322c3136372c3231322c3136382c3231322c3136392c3231322c3137302c3231322c3137312c3231322c3137322c3231322c3137332c3231322c3137342c3231322c3137352c3231322c3137362c3231322c3137372c3231322c3137382c3231312c3137392c3231302c3137392c3231302c3138302c3231302c3138312c3231302c3138322c3231302c3138332c3231302c3138342c3231302c3138352c3231302c3138362c3231302c3138372c3231302c3138382c3231302c3138392c3231302c3139302c3231312c3139302c3231322c3139302c3231332c3139302c3231342c3139302c3231352c3139302c3231362c3139302c3231372c3139302c3231382c3138392c3231392c3138382c3232302c3138382c3232312c3138382c3232322c3138382c3232332c3138382c3232342c3138382c3232352c3138382c3232362c3138382c3232372c3138382c3232382c3138382c3232392c3138382c3233302c3138382c3233312c3138382c3233322c3138382c3233332c3138382c3233342c3138382c3233352c3138382c3233362c3138382c3233372c3138382c3233382c3138382c3233392c3138382c3234302c3138382c3234312c3138382c3234322c3138382c3234332c3138382c3234342c3138382c3234352c3138382c3234362c3138382c3234372c3138382c3234382c3138382c3234392c3138382c3235302c3138382c3235312c3138382c3235322c3138382c3235332c3138382c3235342c3138382c3235342c3138372c3235342c3138362c3235342c3138352c3235342c3138342c3235342c3138332c3235332c3138322c3235342c3138312c3235342c3138302c3235342c3137392c3235342c3137382c3235332c3137382c3235322c3137382c3235312c3137382c3235302c3137382c3234392c3137382c3234382c3137382c3234372c3137382c3234362c3137382c3234352c3137382c3234342c3137382c3234332c3137382c3234322c3137382c3234312c3137382c3234302c3137382c3233392c3137382c3233382c3137382c3233372c3137382c3233362c3137382c3233352c3137382c3233342c3137382c3233342c3137392c3233342c3138302c3233332c3138312c3233322c3138312c3233312c3138312c3233302c3138312c3232392c3138302c3232392c3137392c3232392c3137382c3232392c3137372c3232392c3137362c3232392c3137352c3232392c3137342c3233302c3137332c3233312c3137332c3233322c3137332c3233332c3137332c3233342c3137332c3233352c3137332c3233362c3137332c3233372c3137332c3233382c3137332c3233392c3137332c3234302c3137332c3234312c3137332c3234322c3137332c3234332c3137332c3234342c3137332c3234352c3137332c3234362c3137332c3234372c3137332c3234382c3137332c3234392c3137332c3235302c3137332c3235312c3137332c3235322c3137332c3235332c3137332c3235342c3137332c3235352c3137332c3235362c3137332c3235372c3137332c3235382c3137332c3235392c3137332c3236302c3137332c3236312c3137332c3236322c3137332c3236332c3137322c3236342c3137322c3236352c3137322c3236362c3137322c3236372c3137332c3236372c3137342c3236382c3137342c3236392c3137342c3237302c3137342c3237312c3137342c3237312c3137332c3237322c3137322c3237332c3137322c3237342c3137322c3237352c3137322c3237362c3137322c3237372c3137322c3237382c3137322c3237392c3137322c3238302c3137322c3238312c3137322c3238312c3137312c3238312c3137302c3238302c3137302c3237392c3136392c3237382c3136392c3237372c3136392c3237362c3136382c3237352c3136382c3237342c3136382c3237332c3136372c3237322c3136372c3237312c3136362c3237302c3136362c3236392c3136352c3236382c3136352c3236372c3136352c3236362c3136342c3236372c3136332c3236382c3136332c3236392c3136322c3237302c3136322c3237312c3136322c3237322c3136332c3237332c3136332c3237342c3136342c3237352c3136342c3237362c3136352c3237372c3136362c3237382c3136362c3237392c3136372c3238302c3136372c3238312c3136382c3238322c3136382c3238332c3136392c3238342c3137302c3238352c3137302c3238362c3137312c3238362c3137322c3238362c3137332c3238362c3137342c3238372c3137342c3238382c3137342c3238392c3137342c3239302c3137332c3239312c3137342c3239322c3137342c3239332c3137342c3239342c3137342c3239352c3137342c3239352c3137332c3239352c3137322c3239342c3137322c3239332c3137312c3239322c3137312c3239312c3137302c3239302c3137302c3238392c3136392c3238382c3136392c3238372c3136382c3238362c3136382c3238352c3136372c3238362c3136362c3238372c3136362c3238382c3136362c3238392c3136372c3239302c3136372c3239312c3136372c3239322c3136382c3239332c3136382c3239342c3136382c3239352c3136392c3239362c3136392c3239372c3136392c3239382c3137302c3239392c3137302c3330302c3137302c3330312c3137302c3330322c3137312c3330332c3137312c3330342c3137312c3330352c3137322c3330362c3137322c3330372c3137322c3330382c3137332c3330392c3137332c3331302c3137332c3331312c3137342c3331322c3137342c3331332c3137342c3331342c3137352c3331352c3137352c3331362c3137352c3331372c3137362c3331382c3137362c3331392c3137362c3332302c3137362c3332312c3137362c3332312c3137352c3332312c3137342c3332302c3137342c3331392c3137332c3331392c3137322c3331392c3137312c3331392c3137302c3331382c3137302c3331372c3136392c3331362c3136392c3331352c3136392c3331342c3136392c3331332c3136382c3331322c3136382c3331312c3136382c3331302c3136382c3330392c3136372c3330382c3136372c3330372c3136372c3330362c3136372c3330352c3136362c3330342c3136362c3330332c3136362c3330322c3136362c3330312c3136362c3330302c3136352c3239392c3136352c3239382c3136352c3239372c3136352c3239362c3136342c3239352c3136342c3239342c3136342c3239332c3136342c3239322c3136332c3239312c3136332c3239302c3136332c3238392c3136332c3238382c3136332c3238372c3136322c3238362c3136322c3238352c3136322c3238342c3136322c3238332c3136312c3238322c3136312c3238312c3136312c3238302c3136312c3237392c3136302c3237382c3136302c3237372c3135392c3237382c3135382c3237392c3135382c3238302c3135372c3238312c3135372c3238322c3135372c3238332c3135362c3238342c3135362c3238352c3135352c3238362c3135352c3238372c3135342c3238382c3135342c3238392c3135342c3239302c3135332c3239312c3135332c3239312c3135322c3239312c3135312c3239302c3135312c3238392c3135312c3238382c3135312c3238372c3135312c3238362c3135312c3238352c3135312c3238342c3135312c3238332c3135312c3238322c3135322c3238312c3135322c3238302c3135332c3237392c3135342c3237382c3135342c3237372c3135352c3237362c3135352c3237352c3135362c3237342c3135372c3237332c3135372c3237322c3135382c3237312c3135372c3237302c3135372c3236392c3135372c3236382c3135362c3236372c3135362c3236362c3135352c3236352c3135352c3236342c3135352c3236342c3135362c3236332c3135372c3236332c3135382c3236332c3135392c3236342c3136302c3236342c3136312c3236342c3136322c3236332c3136332c3236322c3136322c3236322c3136312c3236312c3136312c3236302c3136312c3235392c3136312c3235382c3136302c3235382c3135392c3235392c3135382c3236302c3135372c3236312c3135362c3236312c3135352c3236322c3135342c3236322c3135332c3236322c3135322c3236312c3135312c3236312c3135302c3236302c3135302c3235392c3134392c3235382c3134392c3235372c3134392c3235362c3134392c3235352c3134392c3235342c3134392c3235332c3134382c3235332c3134372c3235332c3134362c3235332c3134352c3235332c3134342c3235332c3134332c3235332c3134322c3235332c3134312c3235332c3134302c3235332c3133392c3235332c3133382c3235332c3133372c3235332c3133362c3235332c3133352c3235332c3133342c3235322c3133342c3235312c3133342c3235302c3133342c3234392c3133332c3235302c3133322c3235312c3133322c3235322c3133312c3235332c3133322c3235342c3133322c3235352c3133332c3235362c3133332c3235372c3133332c3235382c3133332c3235392c3133322c3236302c3133322c3236302c3133312c3236302c3133302c3236302c3132392c3236302c3132382c3236302c3132372c3236302c3132362c3236302c3132352c3235392c3132352c3235382c3132352c3235372c3132342c3235372c3132332c3235372c3132322c3235372c3132312c3235372c3132302c3235372c3131392c3235372c3131382c3235372c3131372c3235372c3131362c3235362c3131352c3235362c3131342c3235362c3131332c3235362c3131322c3235362c3131312c3235362c3131302c3235362c3130392c3235362c3130382c3235352c3130382c3235342c3130382c3235332c3130382c3235322c3130382c3235312c3130382c3235302c3130382c3234392c3130382c3234382c3130382c3234372c3130382c3234362c3130382c3234352c3130382c3234342c3130382c3234332c3130382c3234322c3130382c3234312c3130382c3234302c3130382c3233392c3130382c3233382c3130382c3233372c3130382c3233362c3130382c3233352c3130382c3233342c3130382c3233332c3130382c3233322c3130382c3233312c3130382c3233302c3130382c3232392c3130382c3232382c3130382c3232372c3130372c3232372c3130362c3232372c3130352c3232382c3130342c3232392c3130352c3233302c3130352c3233312c3130352c3233322c3130352c3233332c3130352c3233342c3130352c3233352c3130352c3233362c3130352c3233372c3130342c3233382c3130342c3233392c3130342c3234302c3130342c3234302c3130332c3234302c3130322c3234302c3130312c3234312c3130302c3234322c3130302c3234332c3130302c3234332c39392c3234332c39382c3234322c39382c3234312c39382c3234302c39382c3233392c39392c3233382c39392c3233372c39382c3233362c39382c3233352c39382c3233342c39382c3233332c39392c3233322c39392c3233312c39392c3233302c39392c3232392c39392c3232382c39392c3232372c39392c3232362c39392c3232352c39392c3232342c39392c3232332c39392c3232322c39392c3232312c39392c3232302c39392c3231392c39392c3231382c39392c3231372c39392c3231362c39382c3231362c39372c3231362c39362c3231362c39352c3231352c39342c3231342c39345d7d2c2233223a7b22636f6f7264696e61746573223a5b3138392c38322c3138392c38332c3138382c38342c3138372c38342c3138362c38342c3138352c38342c3138342c38342c3138332c38342c3138322c38342c3138312c38342c3138302c38342c3137392c38342c3137382c38342c3137372c38332c3137362c38332c3137362c38342c3137352c38352c3137342c38352c3137332c38352c3137322c38352c3137312c38342c3137302c38342c3136392c38342c3136382c38342c3136372c38342c3136362c38342c3136352c38342c3136342c38342c3136332c38342c3136322c38342c3136312c38342c3136302c38342c3135392c38342c3135382c38342c3135372c38342c3135362c38342c3135352c38352c3135342c38352c3135332c38352c3135322c38352c3135312c38352c3135302c38352c3134392c38352c3134382c38352c3134372c38352c3134362c38352c3134352c38352c3134352c38362c3134352c38372c3134352c38382c3134352c38392c3134362c38392c3134372c39302c3134372c39312c3134362c39322c3134352c39322c3134362c39332c3134362c39342c3134362c39352c3134362c39362c3134362c39372c3134362c39382c3134362c39392c3134362c3130302c3134362c3130312c3134362c3130322c3134362c3130332c3134362c3130342c3134362c3130352c3134362c3130362c3134362c3130372c3134362c3130382c3134362c3130392c3134362c3131302c3134362c3131312c3134362c3131322c3134362c3131332c3134362c3131342c3134362c3131352c3134372c3131362c3134362c3131372c3134362c3131382c3134362c3131392c3134362c3132302c3134372c3132302c3134382c3132302c3134392c3132302c3135302c3132302c3135312c3132302c3135322c3132302c3135332c3132302c3135342c3132302c3135352c3132302c3135362c3132302c3135372c3132302c3135382c3132302c3135392c3132302c3136302c3132302c3136312c3132312c3136312c3132322c3136322c3132322c3136332c3132322c3136342c3132322c3136352c3132322c3136362c3132322c3136372c3132322c3136382c3132322c3136392c3132322c3137302c3132322c3137312c3132322c3137322c3132322c3137332c3132322c3137342c3132322c3137352c3132322c3137362c3132322c3137372c3132322c3137382c3132322c3137392c3132322c3137392c3132312c3137392c3132302c3138302c3131392c3138312c3131392c3138312c3131382c3138312c3131372c3138312c3131362c3138312c3131352c3138302c3131352c3137392c3131352c3137382c3131352c3137372c3131342c3137372c3131332c3137382c3131322c3137382c3131312c3137382c3131302c3137382c3130392c3137392c3130382c3138302c3130382c3138302c3130372c3138312c3130362c3138322c3130352c3138332c3130352c3138342c3130352c3138352c3130352c3138362c3130352c3138372c3130342c3138382c3130352c3138392c3130352c3139302c3130352c3139312c3130352c3139322c3130352c3139332c3130352c3139342c3130352c3139352c3130352c3139362c3130352c3139362c3130342c3139362c3130332c3139362c3130322c3139362c3130312c3139362c3130302c3139362c39392c3139362c39382c3139362c39372c3139362c39362c3139362c39352c3139362c39342c3139362c39332c3139362c39322c3139362c39312c3139362c39302c3139362c38392c3139362c38382c3139362c38372c3139362c38362c3139362c38352c3139362c38342c3139362c38332c3139362c38322c3139352c38322c3139342c38322c3139332c38322c3139322c38322c3139312c38322c3139302c38325d7d2c2234223a7b22636f6f7264696e61746573223a5b3131312c38362c3131302c38372c3131302c38382c3131302c38392c3131302c39302c3131302c39312c3131302c39322c3131302c39332c3131302c39342c3131312c39352c3131312c39362c3131312c39372c3131322c39382c3131322c39392c3131322c3130302c3131322c3130312c3131322c3130322c3131322c3130332c3131322c3130342c3131322c3130352c3131322c3130362c3131322c3130372c3131322c3130382c3131322c3130392c3131322c3131302c3131322c3131312c3131322c3131322c3131322c3131332c3131322c3131342c3131322c3131352c3131322c3131362c3131322c3131372c3131322c3131382c3131322c3131392c3131322c3132302c3131322c3132312c3131332c3132322c3131322c3132332c3131322c3132342c3131322c3132352c3131322c3132362c3131322c3132372c3131322c3132382c3131322c3132392c3131322c3133302c3131322c3133312c3131322c3133322c3131322c3133332c3131332c3133342c3131322c3133352c3131312c3133352c3131312c3133362c3131312c3133372c3131312c3133382c3131312c3133392c3131312c3134302c3131312c3134312c3131312c3134322c3131312c3134332c3131312c3134342c3131312c3134352c3131312c3134362c3131312c3134372c3131312c3134382c3131312c3134392c3131312c3135302c3131312c3135312c3131312c3135322c3131322c3135322c3131332c3135322c3131332c3135312c3131342c3135302c3131352c3135302c3131362c3135302c3131372c3135312c3131362c3135322c3131352c3135322c3131352c3135332c3131352c3135342c3131352c3135352c3131352c3135362c3131352c3135372c3131352c3135382c3131362c3135382c3131372c3135392c3131362c3136302c3131362c3136312c3131362c3136322c3131362c3136332c3131362c3136342c3131362c3136352c3131362c3136362c3131372c3136362c3131382c3136372c3131372c3136382c3131362c3136382c3131362c3136392c3131362c3137302c3131362c3137312c3131362c3137322c3131362c3137332c3131362c3137342c3131372c3137342c3131382c3137352c3131382c3137362c3131372c3137372c3131362c3137372c3131362c3137382c3131362c3137392c3131362c3138302c3131362c3138312c3131362c3138322c3131372c3138332c3131382c3138342c3131372c3138352c3131362c3138362c3131362c3138372c3131362c3138382c3131362c3138392c3131362c3139302c3131372c3139302c3131382c3139312c3131382c3139322c3131372c3139332c3131372c3139342c3131372c3139352c3131372c3139362c3131372c3139372c3131372c3139382c3131382c3139392c3131392c3230302c3131382c3230312c3131372c3230312c3131372c3230322c3131372c3230332c3131372c3230342c3131372c3230352c3131372c3230362c3131372c3230372c3131382c3230372c3131392c3230382c3131382c3230392c3131382c3231302c3131382c3231312c3131382c3231322c3131382c3231332c3131382c3231342c3131382c3231352c3131392c3231362c3131382c3231372c3131372c3231372c3131372c3231382c3131372c3231392c3131372c3232302c3131372c3232312c3131372c3232322c3131372c3232332c3131382c3232332c3131392c3232342c3131382c3232352c3131372c3232352c3131362c3232352c3131362c3232362c3131362c3232372c3131362c3232382c3131362c3232392c3131362c3233302c3131362c3233312c3131362c3233322c3131352c3233332c3131342c3233332c3131332c3233332c3131322c3233332c3131312c3233332c3131302c3233332c3130392c3233332c3130382c3233332c3130382c3233342c3130372c3233352c3130362c3233362c3130352c3233362c3130342c3233362c3130342c3233372c3130342c3233382c3130332c3233392c3130322c3233392c3130312c3233392c3130302c3233392c39392c3233392c39382c3233382c39382c3233372c39382c3233362c39382c3233352c39372c3233342c39362c3233342c39352c3233342c39342c3233342c39332c3233342c39322c3233352c39312c3233352c39302c3233352c38392c3233352c38382c3233342c38372c3233342c38362c3233342c38352c3233342c38342c3233342c38332c3233342c38322c3233352c38312c3233352c38302c3233342c37392c3233342c37382c3233342c37372c3233332c37362c3233322c37352c3233322c37342c3233322c37332c3233322c37332c3233332c37322c3233342c37312c3233342c37302c3233332c37302c3233322c36392c3233322c36382c3233322c36372c3233322c36362c3233322c36352c3233322c36342c3233322c36342c3233332c36332c3233342c36322c3233342c36312c3233332c36312c3233322c36302c3233322c35392c3233322c35382c3233322c35372c3233322c35362c3233322c35352c3233322c35352c3233332c35352c3233342c35342c3233352c35332c3233362c35322c3233362c35312c3233362c35302c3233362c34392c3233362c34382c3233362c34372c3233362c34362c3233362c34352c3233362c34342c3233362c34332c3233362c34322c3233362c34312c3233362c34302c3233362c33392c3233362c33382c3233362c33372c3233362c33362c3233362c33352c3233362c33342c3233362c33332c3233362c33322c3233362c33312c3233362c33302c3233362c32392c3233362c32382c3233362c32372c3233362c32362c3233362c32352c3233362c32342c3233362c32332c3233362c32322c3233362c32312c3233362c32302c3233362c31392c3233362c31382c3233362c31372c3233362c31362c3233372c31352c3233372c31342c3233372c31342c3233382c31342c3233392c31342c3234302c31342c3234312c31342c3234322c31342c3234332c31342c3234342c31342c3234352c31352c3234362c31352c3234372c31362c3234372c31372c3234372c31382c3234372c31392c3234372c32302c3234372c32312c3234372c32322c3234372c32332c3234372c32342c3234372c32352c3234372c32362c3234372c32372c3234372c32382c3234372c32392c3234372c33302c3234372c33312c3234372c33322c3234372c33332c3234372c33342c3234372c33352c3234372c33362c3234372c33372c3234372c33382c3234372c33392c3234372c34302c3234372c34312c3234372c34322c3234372c34332c3234372c34342c3234372c34352c3234372c34362c3234372c34372c3234382c34372c3234392c34382c3234392c34392c3234392c35302c3234392c35312c3234392c35322c3234392c35332c3234392c35342c3234392c35352c3234392c35362c3234392c35372c3234392c35382c3234392c35392c3234392c36302c3234392c36312c3234392c36322c3234392c36332c3234392c36342c3234392c36352c3234392c36362c3234392c36372c3234392c36382c3234392c36392c3234392c37302c3234392c37312c3234392c37322c3234392c37332c3234392c37342c3234392c37352c3234392c37362c3234392c37372c3234392c37382c3234392c37392c3234392c38302c3234392c38312c3234392c38322c3234392c38332c3234392c38342c3234392c38352c3234392c38362c3234392c38372c3234392c38382c3234392c38392c3234392c39302c3234392c39312c3234392c39322c3234392c39332c3234392c39342c3234392c39352c3234392c39362c3234392c39372c3234392c39382c3234392c39392c3234392c3130302c3234392c3130312c3234392c3130322c3234392c3130332c3234392c3130342c3234392c3130352c3234392c3130362c3234392c3130372c3234392c3130382c3234392c3130392c3234392c3131302c3234392c3131312c3234392c3131322c3234392c3131332c3234392c3131342c3234392c3131352c3234392c3131362c3234392c3131372c3234392c3131382c3234392c3131392c3234392c3132302c3234392c3132312c3234392c3132322c3234392c3132332c3234392c3132342c3234392c3132352c3234392c3132362c3234392c3132372c3234392c3132382c3234392c3132392c3234392c3133302c3234392c3133312c3234392c3133322c3234392c3133322c3234382c3133322c3234372c3133322c3234362c3133322c3234352c3133322c3234342c3133322c3234332c3133322c3234322c3133322c3234312c3133322c3234302c3133322c3233392c3133322c3233382c3133322c3233372c3133322c3233362c3133322c3233352c3133322c3233342c3133322c3233332c3133322c3233322c3133322c3233312c3133322c3233302c3133322c3232392c3133322c3232382c3133322c3232372c3133322c3232362c3133322c3232352c3133322c3232342c3133322c3232332c3133322c3232322c3133322c3232312c3133322c3232302c3133322c3231392c3133322c3231382c3133322c3231372c3133322c3231362c3133322c3231352c3133322c3231342c3133322c3231332c3133322c3231322c3133322c3231312c3133322c3231302c3133322c3230392c3133322c3230382c3133322c3230372c3133322c3230362c3133322c3230352c3133322c3230342c3133322c3230332c3133322c3230322c3133322c3230312c3133322c3230302c3133322c3139392c3133322c3139382c3133322c3139372c3133322c3139362c3133322c3139352c3133322c3139342c3133322c3139332c3133322c3139322c3133322c3139312c3133322c3139302c3133322c3138392c3133322c3138382c3133322c3138372c3133322c3138362c3133322c3138352c3133322c3138342c3133322c3138332c3133322c3138322c3133322c3138312c3133322c3138302c3133322c3137392c3133322c3137382c3133322c3137372c3133322c3137362c3133322c3137352c3133322c3137342c3133322c3137332c3133322c3137322c3133322c3137312c3133322c3137302c3133322c3136392c3133322c3136382c3133322c3136372c3133322c3136362c3133322c3136352c3133322c3136342c3133322c3136332c3133322c3136322c3133322c3136312c3133322c3136302c3133322c3135392c3133322c3135382c3133322c3135372c3133322c3135362c3133322c3135352c3133322c3135342c3133322c3135332c3133332c3135322c3133342c3135322c3133352c3135322c3133362c3135332c3133372c3135342c3133382c3135342c3133392c3135342c3134302c3135342c3134312c3135342c3134322c3135342c3134332c3135342c3134342c3135342c3134352c3135342c3134362c3135342c3134372c3135342c3134382c3135342c3134392c3135342c3135302c3135342c3135312c3135342c3135322c3135342c3135332c3135342c3135332c3135332c3135332c3135322c3135332c3135312c3135342c3135302c3135352c3134392c3135362c3134392c3135372c3134392c3135382c3134392c3135392c3134392c3136302c3134392c3136312c3134392c3136322c3134392c3136332c3134392c3136342c3134392c3136352c3134392c3136362c3134392c3136372c3134392c3136382c3134392c3136392c3134392c3137302c3134392c3137312c3134392c3137322c3134392c3137332c3134392c3137342c3134392c3137352c3134392c3137362c3134392c3137372c3134392c3137382c3134392c3137392c3134392c3138302c3134392c3138312c3134392c3138322c3134392c3138332c3134392c3138342c3134392c3138352c3134392c3138362c3134392c3138372c3134392c3138382c3134392c3138392c3134392c3139302c3134392c3139312c3134392c3139322c3134392c3139332c3134392c3139342c3134382c3139352c3134382c3139352c3134372c3139352c3134362c3139352c3134352c3139352c3134342c3139352c3134332c3139352c3134322c3139352c3134312c3139352c3134302c3139352c3133392c3139352c3133382c3139352c3133372c3139352c3133362c3139352c3133352c3139352c3133342c3139352c3133332c3139352c3133322c3139342c3133312c3139342c3133302c3139332c3132392c3139322c3132382c3139312c3132372c3139302c3132372c3138392c3132372c3138382c3132362c3138382c3132352c3138382c3132342c3138372c3132342c3138362c3132342c3138352c3132342c3138342c3132342c3138332c3132342c3138322c3132342c3138312c3132332c3138312c3132322c3138302c3132312c3138302c3132322c3137392c3132332c3137382c3132332c3137372c3132332c3137362c3132332c3137352c3132332c3137342c3132332c3137332c3132332c3137322c3132332c3137312c3132332c3137302c3132332c3136392c3132332c3136382c3132332c3136372c3132332c3136362c3132332c3136352c3132332c3136342c3132332c3136332c3132332c3136322c3132332c3136312c3132332c3136302c3132342c3135392c3132352c3135382c3132352c3135372c3132352c3135372c3132362c3135372c3132372c3135372c3132382c3135362c3132392c3135352c3132392c3135342c3133302c3135332c3133302c3135322c3133302c3135312c3133302c3135302c3133302c3134392c3133302c3134382c3133302c3134372c3133302c3134362c3133302c3134352c3133302c3134342c3133302c3134332c3133302c3134322c3133302c3134312c3133302c3134302c3133302c3133392c3133302c3133382c3133302c3133372c3133302c3133362c3133302c3133352c3133302c3133342c3132392c3133342c3132382c3133342c3132372c3133342c3132362c3133342c3132352c3133342c3132342c3133342c3132332c3133342c3132322c3133352c3132312c3133362c3132312c3133372c3132312c3133382c3132312c3133392c3132312c3134302c3132312c3134302c3132302c3134302c3131392c3134302c3131382c3134302c3131372c3134302c3131362c3134302c3131352c3133392c3131342c3133392c3131332c3133392c3131322c3133392c3131312c3134302c3131302c3134302c3130392c3134302c3130382c3134302c3130372c3134302c3130362c3134302c3130352c3134302c3130342c3134302c3130332c3134302c3130322c3134302c3130312c3134302c3130302c3134302c39392c3134302c39382c3134302c39372c3134302c39362c3134302c39352c3133392c39342c3133392c39332c3133392c39322c3134302c39312c3134312c39322c3134322c39322c3134332c39322c3134332c39312c3134332c39302c3134332c38392c3134322c38392c3134312c38392c3134302c38382c3133392c38372c3133392c38362c3133382c38362c3133372c38362c3133362c38362c3133352c38362c3133342c38362c3133332c38362c3133322c38362c3133312c38362c3133302c38362c3132392c38362c3132382c38362c3132372c38362c3132362c38362c3132352c38362c3132342c38362c3132332c38362c3132322c38362c3132312c38362c3132302c38362c3131392c38362c3131382c38362c3131372c38362c3131362c38362c3131352c38362c3131342c38362c3131332c38362c3131322c38365d7d2c2235223a7b22636f6f7264696e61746573223a5b3133372c3137392c3133372c3138302c3133372c3138312c3133372c3138322c3133372c3138332c3133372c3138342c3133372c3138352c3133372c3138362c3133372c3138372c3133372c3138382c3133372c3138392c3133372c3139302c3133372c3139312c3133372c3139322c3133372c3139332c3133372c3139342c3133372c3139352c3133372c3139362c3133372c3139372c3133372c3139382c3133372c3139392c3133372c3230302c3133372c3230312c3133372c3230322c3133372c3230332c3133372c3230342c3133372c3230352c3133372c3230362c3133372c3230372c3133372c3230382c3133372c3230392c3133372c3231302c3133372c3231312c3133372c3231322c3133372c3231332c3133372c3231342c3133372c3231352c3133372c3231362c3133372c3231372c3133372c3231382c3133372c3231392c3133372c3232302c3133372c3232312c3133372c3232322c3133372c3232332c3133372c3232342c3133372c3232352c3133372c3232362c3133372c3232372c3133372c3232382c3133372c3232392c3133372c3233302c3133372c3233312c3133372c3233322c3133372c3233332c3133372c3233342c3133372c3233352c3133372c3233362c3133372c3233372c3133372c3233382c3133372c3233392c3133372c3234302c3133362c3234312c3133352c3234312c3133352c3234322c3133352c3234332c3133352c3234342c3133362c3234342c3133372c3234352c3133372c3234362c3133372c3234372c3133382c3234372c3133392c3234372c3134302c3234372c3134312c3234372c3134322c3234372c3134332c3234372c3134342c3234372c3134352c3234372c3134362c3234372c3134372c3234372c3134382c3234372c3134392c3234372c3135302c3234372c3135312c3234372c3135322c3234372c3135332c3234372c3135342c3234372c3135352c3234372c3135362c3234372c3135372c3234372c3135382c3234372c3135392c3234372c3136302c3234372c3136312c3234382c3136312c3234392c3136322c3234392c3136332c3235302c3136342c3235302c3136352c3235302c3136362c3235302c3136372c3235302c3136382c3235302c3136392c3235302c3137302c3235302c3137312c3235302c3137322c3235302c3137332c3235302c3137342c3235302c3137352c3235302c3137362c3235302c3137372c3235302c3137372c3234392c3137372c3234382c3137372c3234372c3137372c3234362c3137372c3234352c3137372c3234342c3137372c3234332c3137372c3234322c3137372c3234312c3137372c3234302c3137372c3233392c3137372c3233382c3137372c3233372c3137372c3233362c3137372c3233352c3137372c3233342c3137372c3233332c3137372c3233322c3137372c3233312c3137372c3233302c3137372c3232392c3137372c3232382c3137372c3232372c3137372c3232362c3137372c3232352c3137372c3232342c3137372c3232332c3137372c3232322c3137372c3232312c3137382c3232302c3137392c3232302c3138302c3232302c3138302c3231392c3138302c3231382c3138302c3231372c3138302c3231362c3138302c3231352c3137392c3231352c3137382c3231352c3137382c3231362c3137372c3231372c3137362c3231382c3137352c3231372c3137352c3231362c3137352c3231352c3137352c3231342c3137352c3231332c3137362c3231322c3137372c3231322c3137382c3231322c3137382c3231312c3137382c3231302c3137382c3230392c3137382c3230382c3137382c3230372c3137382c3230362c3137382c3230352c3137382c3230342c3137382c3230332c3137382c3230322c3137382c3230312c3137382c3230302c3137382c3139392c3137372c3139382c3137372c3139372c3137372c3139362c3137382c3139352c3137382c3139342c3137382c3139332c3137382c3139322c3137382c3139312c3137382c3139302c3137382c3138392c3137372c3138392c3137362c3138392c3137352c3138392c3137342c3138392c3137332c3138392c3137322c3138392c3137322c3139302c3137322c3139312c3137312c3139322c3137302c3139322c3136392c3139322c3136382c3139322c3136372c3139322c3136362c3139322c3136352c3139322c3136342c3139322c3136332c3139322c3136322c3139322c3136312c3139322c3136302c3139322c3135392c3139322c3135382c3139332c3135372c3139332c3135362c3139332c3135352c3139322c3135342c3139312c3135342c3139302c3135342c3138392c3135342c3138382c3135352c3138372c3135362c3138372c3135372c3138372c3135382c3138372c3135392c3138372c3136302c3138372c3136312c3138372c3136322c3138372c3136332c3138372c3136342c3138372c3136352c3138372c3136362c3138372c3136372c3138372c3136382c3138372c3136392c3138372c3137302c3138372c3137312c3138372c3137322c3138372c3137332c3138372c3137342c3138372c3137352c3138372c3137362c3138372c3137372c3138372c3137382c3138372c3137382c3138362c3137382c3138352c3137382c3138342c3137382c3138332c3137382c3138322c3137382c3138312c3137372c3138312c3137362c3138312c3137352c3138312c3137342c3138312c3137332c3138312c3137322c3138312c3137312c3138312c3137302c3138312c3136392c3138312c3136382c3138312c3136372c3138312c3136362c3138312c3136352c3138312c3136342c3138312c3136332c3138312c3136322c3138312c3136312c3138312c3136302c3138312c3135392c3138312c3135382c3138312c3135372c3138312c3135362c3138312c3135352c3138312c3135342c3138302c3135342c3137392c3135332c3137392c3135322c3137392c3135312c3137392c3135302c3137392c3134392c3137392c3134382c3137392c3134372c3137392c3134362c3137392c3134352c3137392c3134342c3137392c3134332c3137392c3134322c3137392c3134312c3137392c3134302c3137392c3133392c3137392c3133382c3137395d7d2c2236223a7b22636f6f7264696e61746573223a5b3133372c3135352c3133372c3135362c3133372c3135372c3133372c3135382c3133372c3135392c3133372c3136302c3133372c3136312c3133372c3136322c3133372c3136332c3133372c3136342c3133372c3136352c3133372c3136362c3133372c3136372c3133372c3136382c3133372c3136392c3133372c3137302c3133372c3137312c3133372c3137322c3133372c3137332c3133372c3137342c3133372c3137352c3133372c3137362c3133372c3137372c3133372c3137382c3133382c3137382c3133392c3137382c3134302c3137382c3134312c3137382c3134322c3137382c3134332c3137382c3134342c3137382c3134352c3137382c3134362c3137382c3134372c3137382c3134382c3137382c3134392c3137382c3135302c3137382c3135312c3137382c3135322c3137382c3135332c3137382c3135342c3137382c3135342c3137372c3135352c3137362c3135362c3137362c3135372c3137362c3135382c3137362c3135392c3137362c3136302c3137362c3136312c3137362c3136322c3137362c3136332c3137362c3136342c3137362c3136352c3137362c3136362c3137362c3136372c3137362c3136382c3137362c3136392c3137362c3137302c3137362c3137312c3137362c3137322c3137362c3137332c3137362c3137342c3137362c3137352c3137362c3137362c3137362c3137372c3137362c3137382c3137362c3137392c3137362c3138302c3137362c3138312c3137362c3138322c3137362c3138332c3137362c3138342c3137362c3138352c3137372c3138342c3137382c3138342c3137392c3138342c3138302c3138342c3138312c3138342c3138322c3138342c3138332c3138342c3138342c3138342c3138352c3138342c3138362c3138342c3138372c3138342c3138382c3138342c3138392c3138342c3139302c3138342c3139312c3138342c3139322c3138342c3139332c3138342c3139342c3138342c3139352c3138342c3139362c3138342c3139372c3138342c3139382c3138342c3139392c3138342c3230302c3138342c3230312c3138342c3230322c3138342c3230332c3138342c3230342c3138342c3230352c3138342c3230362c3138342c3230372c3138342c3230382c3138342c3230392c3138342c3231302c3138342c3231312c3138342c3231322c3138342c3231332c3138342c3231342c3138332c3231352c3138332c3231362c3138332c3231372c3138332c3231382c3138332c3231392c3138332c3232302c3138332c3232312c3138332c3232322c3138332c3232332c3138332c3232342c3138332c3232352c3138332c3232362c3138332c3232372c3138332c3232382c3138332c3232392c3138342c3232392c3138352c3233302c3138342c3233312c3138332c3233312c3138332c3233322c3138332c3233332c3138332c3233342c3138332c3233352c3138332c3233362c3138332c3233372c3138332c3233382c3138332c3233392c3138342c3234302c3138342c3234312c3138332c3234322c3138332c3234332c3138332c3234342c3138332c3234352c3138332c3234362c3138332c3234372c3138332c3234382c3138342c3234392c3138342c3235302c3138352c3235302c3138362c3235302c3138372c3235302c3138382c3235302c3138392c3235302c3139302c3235302c3139312c3235302c3139312c3234392c3139322c3234382c3139332c3234382c3139342c3234392c3139342c3235302c3139352c3235302c3139362c3235302c3139372c3235302c3139382c3235302c3139392c3235302c3230302c3235302c3230312c3235302c3230312c3234392c3230322c3234382c3230332c3234382c3230342c3234392c3230342c3235302c3230352c3235302c3230362c3235302c3230372c3235302c3230382c3235302c3230392c3235302c3231302c3235302c3231312c3235302c3231322c3235302c3231332c3235302c3231342c3235302c3231352c3235302c3231362c3235302c3231372c3235302c3231382c3235302c3231392c3235302c3232302c3235302c3232312c3235302c3232322c3235302c3232332c3235302c3232342c3235302c3232352c3235302c3232362c3235302c3232372c3235302c3232382c3235302c3232392c3235302c3233302c3234392c3233312c3235302c3233322c3235302c3233332c3235302c3233342c3235302c3233352c3235302c3233362c3235302c3233372c3235302c3233382c3235302c3233392c3235302c3234302c3235302c3234312c3235302c3234322c3235302c3234332c3235302c3234342c3235302c3234352c3235302c3234362c3235302c3234372c3235302c3234382c3235302c3234392c3235302c3235302c3235302c3235312c3235302c3235322c3235302c3235332c3235302c3235342c3235302c3235352c3235302c3235362c3235302c3235372c3235302c3235382c3235302c3235392c3235302c3235392c3234392c3235392c3234382c3235392c3234372c3235392c3234362c3235392c3234352c3235392c3234342c3235392c3234332c3235392c3234322c3235392c3234312c3235392c3234302c3235392c3233392c3235392c3233382c3235382c3233382c3235372c3233382c3235362c3233382c3235352c3233382c3235342c3233382c3235332c3233382c3235322c3233382c3235312c3233382c3235302c3233382c3234392c3233382c3234382c3233382c3234372c3233382c3234362c3233382c3234352c3233382c3234342c3233382c3234332c3233382c3234322c3233382c3234312c3233382c3234302c3233382c3233392c3233382c3233382c3233382c3233372c3233382c3233362c3233382c3233352c3233382c3233342c3233382c3233332c3233382c3233322c3233382c3233312c3233382c3233302c3233382c3232392c3233382c3232382c3233382c3232372c3233382c3232362c3233382c3232352c3233382c3232342c3233382c3232332c3233382c3232322c3233382c3232312c3233382c3232302c3233382c3231392c3233382c3231382c3233382c3231372c3233382c3231362c3233382c3231352c3233382c3231342c3233372c3231352c3233362c3231352c3233352c3231352c3233342c3231352c3233332c3231352c3233322c3231352c3233312c3231352c3233302c3231352c3232392c3231352c3232382c3231352c3232372c3231352c3232362c3231352c3232352c3231352c3232342c3231352c3232332c3231352c3232322c3231352c3232312c3231352c3232302c3231352c3231392c3231352c3231382c3231352c3231372c3231352c3231362c3231352c3231352c3231352c3231342c3231352c3231332c3231352c3231322c3231352c3231312c3231352c3231302c3231352c3230392c3231352c3230382c3231352c3230372c3231352c3230362c3231352c3230352c3231352c3230342c3231352c3230332c3231352c3230322c3231352c3230312c3231352c3230302c3231352c3139392c3231352c3139382c3231352c3139372c3231352c3139362c3231362c3139352c3231372c3139342c3231372c3139332c3231372c3139322c3231372c3139312c3231362c3139312c3231352c3139312c3231342c3139312c3231332c3139312c3231322c3139312c3231312c3139312c3231302c3139312c3230392c3139302c3230392c3138392c3230392c3138382c3230392c3138372c3230392c3138362c3230392c3138352c3230392c3138342c3230392c3138332c3230392c3138322c3230392c3138312c3230392c3138302c3230392c3137392c3230382c3137392c3230372c3137392c3230362c3138302c3230352c3138302c3230342c3137392c3230332c3137382c3230332c3137372c3230332c3137362c3230332c3137352c3230332c3137342c3230332c3137332c3230332c3137322c3230332c3137312c3230332c3137302c3230332c3136392c3230332c3136382c3230332c3136372c3230332c3136362c3230332c3136352c3230332c3136342c3230332c3136332c3230332c3136322c3230332c3136312c3230332c3136302c3230332c3135392c3230332c3135382c3230332c3135372c3230332c3135362c3230332c3135352c3230322c3135352c3230312c3135352c3230302c3135352c3139392c3135352c3139382c3135352c3139372c3135352c3139362c3135352c3139352c3135352c3139342c3135352c3139332c3135352c3139322c3135352c3139312c3135352c3139302c3135352c3138392c3135352c3138382c3135352c3138372c3135352c3138362c3135352c3138352c3135352c3138342c3135352c3138332c3135352c3138322c3135352c3138312c3135352c3138302c3135352c3137392c3135352c3137382c3135352c3137372c3135352c3137362c3135352c3137352c3135352c3137342c3135352c3137332c3135352c3137322c3135352c3137312c3135352c3137302c3135352c3136392c3135352c3136382c3135352c3136372c3135352c3136362c3135352c3136352c3135352c3136342c3135352c3136332c3135352c3136322c3135352c3136312c3135352c3136302c3135352c3135392c3135352c3135382c3135352c3135372c3135352c3135362c3135352c3135352c3135352c3135342c3135352c3135332c3135352c3135322c3135352c3135312c3135352c3135302c3135352c3134392c3135352c3134382c3135352c3134372c3135352c3134362c3135352c3134352c3135352c3134342c3135352c3134332c3135352c3134322c3135352c3134312c3135352c3134302c3135352c3133392c3135352c3133382c3135355d7d2c2237223a7b22636f6f7264696e61746573223a5b3130322c38342c3130322c38352c3130312c38362c3130302c38372c39392c38382c39382c38372c39372c38372c39362c38372c39352c38372c39342c38372c39332c38372c39322c38372c39312c38372c39302c38372c38392c38372c38382c38372c38372c38372c38362c38372c38352c38372c38342c38372c38332c38372c38322c38372c38312c38372c38302c38372c37392c38372c37382c38372c37372c38372c37362c38372c37352c38372c37352c38382c37352c38392c37352c39302c37352c39312c37352c39322c37352c39332c37352c39342c37352c39352c37352c39362c37352c39372c37352c39382c37352c39392c37352c3130302c37352c3130312c37352c3130322c37352c3130332c37352c3130342c37352c3130352c37352c3130362c37362c3130362c37372c3130362c37382c3130362c37392c3130372c38302c3130382c38302c3130392c38302c3131302c38312c3131312c38302c3131322c37392c3131322c37382c3131312c37382c3131302c37372c3131302c37372c3131312c37372c3131322c37372c3131332c37372c3131342c37372c3131352c37372c3131362c37372c3131372c37372c3131382c37372c3131392c37372c3132302c37372c3132312c37372c3132322c37372c3132332c37372c3132342c37372c3132352c37372c3132362c37372c3132372c37372c3132382c37372c3132392c37372c3133302c37372c3133312c37372c3133322c37372c3133332c37372c3133342c37372c3133352c37372c3133362c37372c3133372c37372c3133382c37372c3133392c37372c3134302c37372c3134312c37372c3134322c37372c3134332c37372c3134342c37362c3134352c37352c3134352c37342c3134352c37332c3134352c37322c3134352c37312c3134352c37312c3134362c37312c3134372c37312c3134382c37312c3134392c37312c3135302c37302c3135312c36392c3135312c36382c3135312c36372c3135312c36362c3135312c36352c3135312c36342c3135312c36332c3135312c36322c3135312c36322c3135322c36312c3135332c36302c3135332c35392c3135332c35382c3135332c35372c3135332c35362c3135332c35352c3135332c35342c3135332c35332c3135332c35322c3135332c35312c3135332c35302c3135332c34392c3135332c34392c3135342c34382c3135352c34372c3135352c34362c3135352c34352c3135352c34342c3135352c34332c3135352c34322c3135352c34312c3135352c34302c3135352c33392c3135352c33392c3135362c34302c3135372c34312c3135372c34322c3135382c34332c3135392c34322c3136302c34322c3136312c34322c3136322c34322c3136332c34322c3136342c34322c3136352c34312c3136362c34302c3136362c34302c3136372c34302c3136382c34302c3136392c34302c3137302c34302c3137312c33392c3137322c33382c3137322c33382c3137332c33382c3137342c33382c3137352c33382c3137362c33382c3137372c33372c3137382c33362c3137382c33352c3137392c33342c3137382c33332c3137382c33322c3137372c33322c3137362c33312c3137362c33302c3137362c32392c3137362c32382c3137362c32372c3137362c32362c3137362c32352c3137352c32352c3137342c32352c3137332c32352c3137322c32362c3137312c32362c3137302c32362c3136392c32372c3136382c32372c3136372c32382c3136362c32392c3136362c32392c3136352c32392c3136342c32392c3136332c32392c3136322c32392c3136312c32392c3136302c32392c3135392c33302c3135382c33312c3135382c33322c3135382c33322c3135372c33332c3135362c33342c3135362c33342c3135352c33342c3135342c33332c3135342c33322c3135342c33312c3135352c33302c3135352c32392c3135352c32382c3135352c32372c3135352c32362c3135352c32352c3135352c32342c3135352c32332c3135352c32322c3135352c32312c3135352c32302c3135352c31392c3135352c31382c3135352c31372c3135352c31362c3135352c31352c3135352c31342c3135352c31342c3135362c31342c3135372c31342c3135382c31342c3135392c31342c3136302c31342c3136312c31342c3136322c31342c3136332c31342c3136342c31342c3136352c31342c3136362c31342c3136372c31342c3136382c31342c3136392c31342c3137302c31342c3137312c31342c3137322c31352c3137322c31362c3137322c31372c3137332c31362c3137342c31352c3137342c31342c3137342c31342c3137352c31342c3137362c31342c3137372c31342c3137382c31342c3137392c31342c3138302c31342c3138312c31342c3138322c31342c3138332c31342c3138342c31342c3138352c31342c3138362c31342c3138372c31342c3138382c31342c3138392c31342c3139302c31342c3139312c31342c3139322c31342c3139332c31342c3139342c31342c3139352c31342c3139362c31342c3139372c31342c3139382c31342c3139392c31342c3230302c31342c3230312c31342c3230322c31342c3230332c31342c3230342c31342c3230352c31342c3230362c31342c3230372c31342c3230382c31342c3230392c31342c3231302c31342c3231312c31342c3231322c31342c3231332c31352c3231342c31352c3231352c31352c3231362c31352c3231372c31352c3231382c31352c3231392c31352c3232302c31352c3232312c31352c3232322c31352c3232332c31352c3232342c31352c3232352c31352c3232362c31352c3232372c31352c3232382c31352c3232392c31352c3233302c31352c3233312c31352c3233322c31352c3233332c31352c3233342c31352c3233352c31362c3233352c31372c3233352c31382c3233352c31392c3233342c32302c3233342c32312c3233342c32322c3233342c32332c3233342c32342c3233342c32352c3233342c32362c3233342c32372c3233342c32382c3233342c32392c3233342c33302c3233342c33312c3233342c33322c3233342c33332c3233342c33342c3233342c33352c3233342c33362c3233342c33372c3233342c33372c3233332c33372c3233322c33372c3233312c33362c3233312c33352c3233312c33342c3233312c33332c3233312c33322c3233312c33312c3233312c33302c3233322c32392c3233312c32392c3233302c33302c3232392c33312c3232392c33322c3232392c33332c3232392c33342c3232392c33352c3232392c33362c3232392c33372c3232392c33382c3232392c33392c3232392c34302c3232392c34312c3232392c34322c3232392c34332c3232392c34342c3233302c34332c3233312c34322c3233312c34312c3233312c34302c3233312c33392c3233312c33392c3233322c33392c3233332c34302c3233332c34312c3233332c34322c3233332c34332c3233332c34342c3233332c34352c3233332c34352c3233322c34352c3233312c34362c3233302c34372c3232392c34382c3232392c34392c3232392c35302c3232392c35312c3232392c35322c3232392c35332c3232392c35342c3232392c35352c3232392c35352c3232382c35352c3232372c35342c3232362c35352c3232352c35352c3232342c35362c3232332c35372c3232322c35382c3232322c35392c3232322c36302c3232322c36312c3232322c36322c3232322c36332c3232322c36342c3232322c36352c3232322c36362c3232322c36372c3232322c36382c3232322c36392c3232322c37302c3232322c37312c3232322c37322c3232322c37332c3232312c37342c3232312c37352c3232312c37362c3232312c37372c3232312c37382c3232322c37382c3232332c37392c3232342c37392c3232352c37392c3232362c37392c3232372c37392c3232382c37392c3232392c37392c3233302c37392c3233312c38302c3233312c38312c3233312c38322c3233312c38332c3233302c38342c3233302c38352c3233312c38362c3233312c38372c3233312c38382c3233312c38392c3233312c39302c3233312c39312c3233312c39322c3233312c39332c3233312c39342c3233312c39352c3233312c39362c3233312c39372c3233312c39382c3233312c39392c3233312c3130302c3233312c3130312c3233312c3130322c3233312c3130332c3233312c3130342c3233312c3130352c3233312c3130362c3233312c3130372c3233302c3130382c3232392c3130392c3232382c3131302c3232372c3131312c3232362c3131322c3232352c3131332c3232342c3131342c3232332c3131352c3232322c3131352c3232312c3131352c3232302c3131342c3231392c3131342c3231382c3131352c3231372c3131352c3231362c3131352c3231352c3131342c3231342c3131342c3231332c3131352c3231322c3131352c3231312c3131352c3231302c3131352c3230392c3131352c3230382c3131352c3230372c3131352c3230362c3131352c3230352c3131352c3230342c3131352c3230332c3131352c3230322c3131342c3230312c3131342c3230302c3131342c3139392c3131342c3139382c3131342c3139372c3131342c3139362c3131342c3139352c3131342c3139342c3131342c3139332c3131342c3139322c3131342c3139312c3131332c3139312c3131322c3139302c3131322c3138392c3131332c3138382c3131342c3138382c3131342c3138372c3131342c3138362c3131342c3138352c3131342c3138342c3131342c3138332c3131342c3138322c3131342c3138312c3131342c3138302c3131342c3137392c3131342c3137382c3131342c3137372c3131332c3137362c3131322c3137352c3131322c3137342c3131322c3137332c3131312c3137322c3131312c3137312c3131322c3137302c3131332c3137302c3131332c3136392c3131332c3136382c3131332c3136372c3131332c3136362c3131332c3136352c3131332c3136342c3131332c3136332c3131332c3136322c3131332c3136312c3131332c3136302c3131332c3135392c3131332c3135382c3131332c3135372c3131332c3135362c3131332c3135352c3131332c3135342c3131332c3135332c3131322c3135332c3131312c3135332c3131302c3135322c3131302c3135312c3131302c3135302c3131302c3134392c3131302c3134382c3131302c3134372c3131302c3134362c3131302c3134352c3131302c3134342c3131302c3134332c3131302c3134322c3131302c3134312c3131302c3134302c3131302c3133392c3131302c3133382c3131302c3133372c3131302c3133362c3131302c3133352c3130392c3133352c3130382c3133352c3130372c3133352c3130362c3133342c3130362c3133332c3130362c3133322c3130362c3133312c3130362c3133302c3130362c3132392c3130362c3132382c3130362c3132372c3130362c3132362c3130362c3132352c3130362c3132342c3130362c3132332c3130362c3132322c3130362c3132312c3130362c3132302c3130362c3131392c3130362c3131382c3130362c3131372c3130362c3131362c3130362c3131352c3130362c3131342c3130362c3131332c3130362c3131322c3130362c3131312c3130362c3131302c3130362c3130392c3130362c3130382c3130362c3130372c3130362c3130362c3130362c3130352c3130362c3130342c3130362c3130332c3130362c3130322c3130362c3130312c3130362c3130302c3130362c39392c3130362c39382c3130362c39372c3130362c39362c3130362c39352c3130362c39342c3130362c39332c3130362c39322c3130362c39312c3130362c39302c3130362c38392c3130362c38382c3130362c38372c3130362c38362c3130362c38352c3130352c38352c3130342c38342c3130332c38345d7d7d2c2276657273696f6e223a22312e302e30227d",mockPathData1:"000000000300000023015f007aff4bff52ff82ff52ff66ff50ff68ff5aff6aff64ff6aff6eff6aff78ff6aff82ff6aff8cff6aff98ff68ffa2ff6affacff68ffb2ff68ffaeff72ffaaff7cffacff84ffb2ff8cffbaff94ffc0ff9cffc8ffa2ffd0ffa8ffdaffacffdc04000431cc000e0400f004ca0014ffcc0018ffce001cffd2001effd80020",mockPathData2:"00000000030000246a005c693d410002fe880400330cfe78040019740400ff483cfe78003efe82003efe8c003efe96003efea0003efeaa0040feb40040febe0040feca0040fed40042fede0042fee80042fef20042fefc0042ff080042ff120042ff1c0044ff260044ff300044ff3c0044ff460044ff48040002311aff460400f1ffffffff4016ff460012ff48000eff4a000aff4e000aff540004ffccfffeffd4fffeffdcfff6ffe0ffeeffe8ffeafff2ffeafffcffea0004ffee000efff40016fffc001c00060022fffc0022fff80026fff0002cffea0034ffe6003effea0048fff4004cfffe004e0006004c0010004800160040001a003400240034002a003c0032004200380044003e004e00420058003e0062003e006c0040007600400080004400880046008e004800980048009e004a00a8004a00b2004a00bc004c00c6004c00d0004c00dc004800d2004400c8003800c0003600b6003400b2003600a80034009e00300094002a008c0022008600180082000e008000040082fffa0086fff2008cffee0096ffe40096ffda0096ffd00098ffc6009cffbe00a0ffb400a6ffac00aaffa400b0ff9c00b6ff9400bcff9200c6ff9000d0ff9200daff9a00e2ff9600ecff9600f4ff9a00faffa000feffa20108ffa6010effac0112ffb60114ffba011effbe0122ffb40122ffaa0124ffa00124ff960122ff8a0124ff800124ff760124ff6a0124ff600124ff560126ff4c0128ff44012eff3a0130ff300130ff240130ff1a0132ff100132ff060132fefc0130fef40130fef20126fef2011cfef20112fef40108fef400fefef600f4fef200eafef200e0fef000d6fee800cefee200c6fed800c2fece00befec400befeba00befeb000befea600befe9a00befe9000befe8600bcfe7c00bcfe7000befe6600befe5c00befe5200befe4600befe3c00bcfe3200bcfe2600bcfe1c00bcfe1200bcfe0800bcfdfc00befdf400c0fdee00c6fde600cefde400d8fde000e2fde000ecfde000f6fde00102fde0010cfdde0116fdde0120fde00120fddc0124fdd40124fdc80124fdbe0126fdb40128fdaa0128fd9e0128fd940128fd8a0128fd80012afd76012afd6c012afd60012afd56012afd4c012afd42012afd38012afd2c012afd22012afd18012afd0c012afd02012afcf8012afcf6012efcf00126fce80120fce0011afcd80112fcd2010cfcca0104fcc200fcfcbc00f6fcb400f0fcb200e6fcac00dcfca600d4fc9e00cefc9e00c4fc9e00bafc9c00b2fca600aefcae00a8fcb4009efcb60094fcba008cfcba0082fcba0078fcb6006efcc0006afcca0064fcd40062fcdc005efce40058fcea0050fcec0048fcec0040fcea003afcee0030fcee0028fcec0020fcee0016fcec000cfcea0004fce4fffefcdefffafcd6fff8fccefff0fccaffeafcd2ffe2fcd8ffdcfcdaffd2fcdcffc6fcdaffbcfcd4ffb0fcd6ffa6fcd4ff9efcd8ff94fcdaff8afcd6ff80fcd4ff7cfcd6ff72fcd4ff6cfcd8ff62fcd8ff5afcd8ff50fcdaff46fcdcff3cfcdeff32fcdaff28fcd6ff20fcceff18fcc6ff14fcbaff0afcb8ff0cfcbaff02fcb8fef8fcb6feeefcb4fee4fcacfedcfca6fed4fc9afed0fc9afec6fc9afebafc9afeb0fc9afea6fc9afe9cfc9afe92fc9afe88fc9afe7cfc98fe72fc9afe68fc9afe5efc9afe52fc9afe48fc98fe3efc98fe34fc96fe2afc92fe22fc86fe1cfc86fe1cfc86fe1c0c00b592fdfcfc8afdfcfc92fdf80400f11c90fdc2fc86fdb6fc90fdb6fc9efdb0fca8fdb0fcb2fdaefcbafdaafcc2fda4fcc6fd9cfcc8fd96fcc8fd8c0c00ffffff0ac6fda2fccafda2fcd0fd9cfcd8fd94fcdefd8efce0fd84fce0fd7afcdefd74fcdafd6afcd2fd64fccafd60fcc4fd52fccefd56fcd8fd5afce2fd5cfcecfd5cfcf6fd5cfd00fd56fd08fd52fd10fd4cfd18fd44fd1cfd3cfd22fd32fd24fd28fd24fd1efd26fd14fd20fd0cfd1cfd02fd16fcfafd10fcf2fd08fcecfcfefce8fcf4fce4fceafce4fce0fce4fcd6fce6fccefceafcc8fcf0fcc2fceefcc4fce6fcc4fcdafcc6fcd2fcc6fcc6fcc2fcbcfcc2fcb2fcc2fca8fcc4fc9efcc4fc94fcc4fc88fcc2fc88fccafc86fcd4fc8afcdcfc8afce4fc88fcecfc84fcf4fc7cfcf8fc72fcf8fc6afcf6fc64fcfcfc5cfcfafc52fcf8fc48fcf2fc3efcecfc3afce4fc36fce2fc30fceafc2cfceefc32fcf6fc38fcfefc3efd08fc42fd12fc44fd1cfc42fd26fc40fd2cfc3efd2efc44fd32fc4cfd38fc54fd40fc5afd48fc60fd52fc64fd5efc66fd60fc70fd6afc76fd6cfc7cfd68fc86fd6afc90fd70fc9cfd70fca6fd72fcb0fd78fcb8fd80fcbefd8afcc2fd92fcc2fd96fcc4fda0fccafdaafcccfdb4fccafdbefcc8fdbafcd2fdbcfcdcfdbefce6fdbcfcf0fdbcfcfcfdbafd06fdbcfd10fdbefd1cfdbcfd26fdbcfd32fdbcfd3cfdbcfd46fdbcfd50fdbcfd5afdbcfd66fdbcfd70fdbcfd7afdbcfd84fdbcfd8efdbefd98fdc0fda2fdc0fdacfdc0fdb6fdbefdc0fdc0fdccfdc0fdd6fdc0fde0fdc2fde8fdcafdf0fdd2fdf8fddafdfcfde4fe00fdeefe00fdf8fe00fe0afe02040002ff2c00fe0cfe00fe14fe04fe1cfe0cfe22fe14fe28fe1efe2afe28fe2afe32fe28fe3cfe24fe42fe1cfe4afe16fe4efe0efe52fe04fe52fdfcfe50fdf4040016714efe02fe4cfe0a4c00f1003cfe2afe42fe32fe48fe34fe4efe360400fd0056fe2cfe5afe24fe5cfe1efe5cfe120400f8ff6560fe1afe5efe24fe5efe2efe60fe38fe66fe40fe6cfe48fe74fe4efe7efe52fe88fe52fe92fe50fe9cfe4efea0fe4afeaafe4cfeb4fe4afec2fe4cfecafe52fed4fe52fedefe52fee8fe52fef4fe54ff02fe52ff0afe54ff10fe5cff16fe64ff16fe6aff1afe74ff1afe7eff1cfe82ff1cfe8eff1cfe98ff22fea0ff2afea6ff3afeacff3afeb6ff3efec0ff44fec8ff48fed2ff4afedcff4efee6ff52feeeff56fef8ff5aff02ff5eff0cff62ff16ff66ff20ff6cff28ff70ff32ff76ff3aff7eff3cff88ff40ff92ff3eff9cff3cffa6ff3cff9cff3cff92ff3cff92ff42ff9eff44ff9eff4effa2ff54ffaaff58ffb2ff58ffbaff56ffc4ff52ffccff4cffd0ff44ffd4ff3affd4ff30ffd0ff26ffd8ff24ffe2ff1effecff1cfff4ff16fffeff120002ff0c0006ff020008fef8000afeee0008fee40006feda0000fed2fffcfec8fff8fec0fff4feb6fff0feacffecfea2ffeafe98ffe2fe8cffe0fe82ffdafe78ffd6fe6effd4fe72ffd4fe72ffd4fe720c004f0028fe7604000a3a30fe7e0400f11fff32002eff34002eff38002cff3c0028ff3e0026ff3e0022ff3e001eff3e001aff3c0018ff380018ff320018fe880400fd2016fe860014fe820012fe800010fe7e000cfe7e0008fe7e0004fe800002fe820000fe840000fe880000feba0004febe0400fb1c05febe001bfec6001ffecc0025fed40027fedc0023fefe001fff080015ff120003ff200002ff200000ff1e04009f460000ff46ffe8ffdc0400183f28ffe2040018fe04e6ff3cffe6ff48ffe0ff4effdaff56ffd0ff5a04002300860400ff1a88ffd2008cffd40090ffd80092ffdc0092ffe00092ffe20090ffe6008effe8008affe80086ffe800540400012f00000400061d7204003f16008004000c11620400ff1c1800600018005c001c0058001e00560022005600260056002a0058002c005a002e005c002e0062002c0082040016f30e2d0082002b00600023005800110044fff10030ffe90026ffe90022ffe804003fe600160400067fc0001affb80018040008552effba0036040031b60046040033b8004a04001d9a04003fa000a804000b2fff80040002718eff8aff8cff9804003f88ff96040014f9566effa4ff6eff94ff70ff88ff78ff84ff7eff82ff84ff7cff7eff74ff78ff6cff76ff60ff76ff58ff78ff50ff7eff4aff86ff46ff8eff46ff98ff48ffa2ff4cffa8ff52ffb0ff5affb4ff64ffb6ff6cffb6ff76ffb0ff7cffacff82ffa4ff86ff9aff88ff900400bfa8ff7affb2ff70ffb8ff640400136f0004ffbe000604000671940004ff8a000604003f8800040400032fffa00400172100ae04003f70011c04001723ffc80400ff5ac6ff6effc2ff6cffc0ff68ffbeff64ffbcff60ffbeff5effbeff5affc2ff58ffc4ff58ffc8ff5800d4ff5e00ceff5600d6ff5000dcff4800e4ff4000eaff3800f2ff3000f6ff2a00feff220106ff20010aff160110ff120118ff0a0110ff04010cfefa0108fef40106040041ff05ff1a010cff2c0110ff2c0116ff2a0120ff280126040014191c04003f4001160400081f200400061f580400052f00f80400021b4004003a2800e0040029feba04003b10fea204001f8404001bf95bff7cff16ff84ff12ff7aff0aff74ff02ff6cfef8ff6afef0ff66fee4ff68fedaff6afed2ff6efecaff72fec4ff7cfec2ff86fec0ff90fec2ff9afec6ffa2feccffacfed4ffb2fedeffb8fee6ffbcfef0ffbefefaffbaff04ffb6ff0affaeff12ffa6ff14ff9cff16ff920400bf2eff74ff3aff6cff40ff6e0400032ffed80400172f00e004000e3d5a00c60400f3006600caff7600d2ff8200dcff8800e6040012ea04002f011e040016ff2689011eff8700eaff8300ceff8100c6ff7700beff5500acff4900a4ff3f00a4ff2d00a8ff1f00aeff1900b6ff1100c0ff1100ccff10040016510cff0a000a86085112fffeff149a08ff4aeaff18ffe0ff14ffd6ff0effceff06ffc8fefcffc4fef4ffc2feeaffc2fee0ffc2fed6ffc6feceffccfecaffd4fec6ffdefec4ffe8fec4fff2fec8fffcfece0004fed6000afede0010fee80014fef20016fefc0014ff04000e0400154ffef800220400001fcc04000a3fe000be0400003f14feda04000033c8000804001f0404000813ae04009fb2fec600b6fece00bc04000671bc00aefeb200ac04003fb000ae0400041144d612ff98ae0038feb2002efeb40024feb2001afeac000efeb20006feb8fffefebafff4febcffeafebaffe0feb8ffd6feb0ffd0feaaffc8fea2ffc2fe98ffc0fe90ffbefe86ffc0fe7effc4fe74ffcafe6effd2fe6affd8fe66ffe2fe66ffecfe6afff6fe700000fe660004fe5e000afe560012fe54001cfe500026fe500030fe540038fe580042fe5e004afe68004efe720052fe7c0056fe860056fe900054fe9a0052fea2004cfeaa004604001671a20056fe9a006004003b98005e0400f15670fe920068fe8a0060fe82005cfe76005afe6c005cfe660060fe5e0066fe56006efe520078fe520082fe52008cfe540096fe5a009efe6000a8fe6800acfe7000b0fe7c00b0fe8400b0fe8e00aefe9600a8fe9e00a0fea0009afea40090fea60082fea600800400ff26a70080feb70076feb50070feb5006afeb30064fea1005cfe970056fe870056fe610062fe590068fe53006efe510076fe51007cfe50040016134a04005f48fe4a003e040012b1480050fe440058fe3c005c0400f5603a0068fe340068fe2c0060fe24005cfe1a005afe10005cfe08005efe000064fdfa006efdf80078fdf60082fdf6008cfdfa0094fdfe009efe0400a6fe0c00acfe1600aefe2000b0fe2a00aefe3400acfe3c00a6fe42009efe460096fe4a008efe4c0084fe4a007cfe460072fe40006a0400b116005cfe100058fe0c00520400f1a20e0052fe180054fe220056fe2c0056fe360052fe3e004efe440046fe48003cfe4a0032fe4a0028fe48001efe440014fe3e000cfe360004fe300000fe30fff6fe30ffecfe30ffe2fe2cffdafe26ffd0fe1effcafe16ffc6fe0cffc4fe02ffc4fdf8ffc6fdeeffccfde6ffd2fde0ffdafddcffe2fddaffecfddefff8fde20000fdea000efde80018fde40022fde4002cfde80036fdec003efdf00048fdf80050fe000056fe08005cfe0e0064fe060068fdfc1801f53276fdf40080fdf4008afdf60092fdfc009afe0200a2fe0a00aafe1200aefe1c00b0fe2600b0fe3000acfe3800a8fe4000a2fe440098fe480090fe4c0086fe4a007e180151380064fe2e8401545efe1a0060040041fdf2005404001ff004000a1972040039d6008c040033d800a004005da4fdd8011204003fc0012004000bff590022fdba0012fdc40010fdca0008fdd00000fdd2fff6fdd2ffecfdd0ffe4fdceffd8fdcaffd0fdc2ffcafdb8ffc4fdb2ffc2fda8ffc0fd9effc4fd96ffcafd8cffd0fd86ffd8fd82ffe2fd80ffecfd80fff6fd840000fd880008fd90000efd9a0014fda20018fdac04001433a8002004001a2204002301120400f91616fda6011afda2011cfda0011efd9c011efd98011efd94011cfd920118fd900112fd90001804003f78000004000f2f011804001b81fd86fd74fda0fd760400139e0400081000119c04003162fdb604001f6004000d2ffc8004001b2301120400ff5e16fd5e011afd5a011cfd58011efd54011efd50011efd4c011cfd4a011afd480112fd480000fd40fff8fd46fff0fd4cffe8fd52ffdefd52ffd4fd52ffcafd52ffc0fd50ffb8fd50ffaefd50ffa4fd52ff9afd52ff90fd4eff88fd4eff7cfd4cff76fd48ff72fd50ff76fd58ff78040006f55059ff78fd6dff68fd71ff60fd73ff56fd6fff2efd6dff16fd57fef2fd41fed0fd2bfebefd1dfeb8fcfbfeb4fceffeb6fce3febefcd9fecafcc9fef0fcc5fefafcc7ff02fccdff0efcd1ff14fce7ff22fcf7ff46fcffff4efcffff58fcfdff5c040011ff0c00155a1000ff80fcff5cfd00ff5afd00ff66fcfeff70fcfeff7afd02ff82fd08ff8afd0eff8efd04ff8afcfaff86fcf4ff8efceeff98fcecffa2fceaffacfce6ffb6fce8ffc0fce8ffcafceaffd4fcecffdefcf2ffe8fcf6fff2fcfcfff8fd020000fd0a0006fd14000cfd1c0010fd260014fd300016fd3a0018fd44001afd4e0018fd580016fd620014fd6c0010fd74000cfd7c0006040016f300720018fd6a001cfd420020fd30002404001e2204002301120400f58216fd2e011afd2a011cfd28011efd24011efd20011efd1c011cfd1a0118fd180112fd1800aefd1400b6fd1e00b0fd2600aafd2c00a2fd300098fd32008efd300084fd2c007cfd280072fd22006afd1a0064fd100062fd060060fcfa0060fcf20064fcea006cfce20072fcdc007afcda0084fcd8008efcda0098fcde00a0fce600aafcec00b0fcf600b4fd0000b6fd0a00b80400007400310200c40400360000c204006f011cfd06011e040012ff2c07011efd1100f8fd2500d4fd3d00b4fd4f0098fd510082fd4f0074fd490068fd370056fd25004cfd21004afd19004cfd050056fd040056fd0000540400081f0e04000a3f18001c0400001f580400023f32005c040002ff0633005cfd370036fd3b000efd390004fd31fffafd300400112f00040400063d2a00020400f5242b0002fd1b000afd17000cfd11000cfd0d000afd090004fcf5ffe2fcefffdafcefffd4fcf1ffcefcf3ffcafcf7ffc4fcfbffc2040017f90c0011fa0400f332ccfcfcffd6fcfeffe0fcfeffeafd04fff4fd08fffafd12fffefd1c0000fd260002fd300000fd3afffcfd42fff8fd4afff0fd4effe8fd54ffdcfd52ffdafd54ffda080011dc1400ff3e56ffdefd57ffdefd61fffcfd5f0000fd5f0006fd59000cfd470018fd330020fd270020fd1f001efd17001afd09000afcf3ffeafcefffe6fcedffdafcf3ffbefcf7ffb2fcfdffaafd01ffaafd0004000a51b4fcf6ffb80400f128f7ffb8fcefffd6fcf3ffe2fcf9fff2fd110012fd190016fd230018fd2d0018fd390014fd490004fd63ffe6fd79ffcafd91ffb4fd8fffb60800000c009791ffb6fd93ffb4fd920400ff0896ffc4fd9cffc6fd98ffc6fdc0ffcafdd0ffd6fdd8ffdc04000f23fe100400ff1e0efdd6fe0afdd4fe08fdd0fe06fdccfe06fdc8fe06fdc6fe06fdc2fe0afdc0fe0cfdc0fe10fdc0ff78fdc6ff6e040012ff04baff62fdb4ff60fdaeff60fdaaff62fda8ff6404000f2ffcda0400023f90fcd4040007f35fff6afd94ff70fd8cff76fd86ff80fd80ff88fd7eff90fd7eff9afd80ffa4fd86ffacfd8effb4fd94ffbafd9effbefda8ffbefdb2ffbefdbcffbafdc4ffb4fdccffb0fdd2ffa8fdd4ff9efdd4ff94fdd2ff8afdceff80fdc6ff7afdc0ff72fdb6ff6efdacff6cfda4ff6afd98ff7004001b6e0400116c1000f31899ff6efdb7ff52fdd1ff36fdd9ff32fddfff30fde7ff34fdedff36fdefff38fdf1ff3cfdefff3c0800f7a43efdeeff3efde8ff48fde4ff50fde2ff5afde0ff62fde6ff6cfde8ff72fde4ff7afde0ff84fddcff8cfddaff96fddcffa2fde2ffaafde8ffb2fdf0ffb8fdfaffbcfe00ffc0fe0affbefe14ffbcfe1effb6fe24ffb0fe2cffa8fe2eff9efe30ff94fe2eff8afe28ff7efe2cff7afe36ff76fe3eff6efe42ff64fe44ff5cfe44ff52fe44ff48fe40ff3efe3aff36fe32ff2efe28ff2cfe20ff28fe14ff28fe0aff28fe00ff2afdf8ff30fdeeff3afdecff3afdea0800000c0071eaff38fdeaff3604007bf0ff2efdf0ff280400f35c00fdf0fefefdf4ff08fdf8ff12fdfeff18fe08ff1cfe12ff20fe1cff20fe26ff1efe30ff1afe38ff16fe40ff0efe44ff04fe44fefafe46fef0fe42fee8fe3afee0fe36fed6fe2efed2fe24fecefe1afeccfe10feccfe06fed0fe00fed8fdf8fee0fdf4fee8fdf2fef2fdf26c0001740003040031eefefe0400ff10eafef8fde2fef2fde2feecfde2fee8fde4fee4fde6fedefdecfedcfdf0fed80400041f1004000d4bfe08fe300400d33cfe06fe4afe08fe4cfe08feba04009fbefe0afec2fe10fec80400023f20fec404000013420400fd163efe22fe3cfe26fe38fe2afe38fe2efe38fe30fe38fe34fe3afe36fe3efe38fe42fe38fece0400fd5850fedcfe4cfee4fe4afeeefe4afef8fe4cff02fe52ff0cfe58ff14fe60ff1afe6aff1efe74ff1efe7eff1efe88ff1afe90ff16fe98ff0efe9eff06fea0fefefea0fef4fe9efee8fe9afee0fe94fed6fe8afed2fe80fed0fe76feccfe6efeccfe64fed0fe5cfed404009152fedafe50fed6fe508400000400135604003152fe520a00f30e4cfe58fe4cfe5cfe4cfe60fe4cfe64fe4efe66fe50fe68fe56fe68feba04009fbefe6afec2fe70fec80400023f80fec4040000136a0400f51666fe84fe62fe86fe60fe8afe60fe8efe60fe90fe60fe94fe62fe96fe66fe98fe6afe98fed8040035b0ff020400f79cb2ff6efeb2ff76feacff72feacff6cfeaeff62feb0ff58feaeff4efeaaff44fea6ff3cfe9eff36fe96ff30fe8cff2afe82ff28fe78ff26fe6eff26fe66ff2afe5eff30fe56ff36fe52ff40fe4eff48fe4cff52fe4eff5cfe52ff66fe56ff70fe5cff78fe68ff80fe66ff8afe66ff94fe6aff9efe6affa6fe72ffaefe7affb4fe82ffbafe8cffbcfe96ffbcfea0ffbafeaaffb6feb0ffaefeb6ffa6febaff9afebcff90febaff86feb2ff7a0400117804007fbeff74fec8ff6e04000323fe600400ff1e5efec6fe5afec4fe58fec0fe56febcfe56febafe56feb6fe56feb2fe5afeb0fe5cfeb0fe60feb0fed8feb4feda0400065fdefed8fee004000a1f6004001b23ff500400ff1a54fee2ff58fee4ff5afee8ff5cfeecff5cfeeeff5cfef2ff5cfef6ff58fef8ff56fef8ff50fef8fe600400014fff12fe5e040006ff1613fe5eff01fe86fefffeaeff01fed6ff07fee4ff21ff02ff29ff08ff37ff0aff59ff0aff5804000613640400f30e68ff5aff6cff5eff6eff60ff70ff64ff70ff68ff70ff6cff6eff6eff6c120013500400ff1a4eff72ff4cff74ff48ff78ff46ff7aff46ff7eff46ff82ff46ff84ff48ff86ff4cff88ff50ff88ff640400060056000f0200013172ff8a04007f70ff8cff70ff960400023d56ff9a0400ff1657ff9aff51ffaaff4bffaeff47ffb0ff1fffb4ff01ffc4fed9ffc2fecbffc8fecaffc8fec804000a13b40400fd02b0fec6ffaefec2ffaafec0ffaafebeffa60400f104b4ffbafeaeffc0fe86ffbefe78ffc0fe6affc804001f6804000a15b404003f50ff6a0400176f0014fe5600160400127d42fff8fe38fff004003f36ff82040012f92837ff82fe43ffaafe4bffcefe29ffbcfdffffc2fdf1ffc4fdebffc8fde5ffd0fddfffdcfdd9fff4fddb0000fdda0000fdd80004fdda006a0400ff12db006afdc30082fdc10088fdc3008efdc70096fdd300a2fdeb00aefdf100aefdf004000c3fec009a040012ff1aed009afdf700aafdff00aefe0f00acfe2b00b8fe3100b6fe4100aefe4900b0fe5300b6fe5100b8fe50040010f15c4e0098fe4a0070fe4b0070fe49006afe430066fe370062fe27005efe03005afddd004cfdcd0042fdbb0040fd93003efd89003cfd750022fd690010fd65fffafd69ffd2fd6bffc4fd71ffaefd71ff86fd6fff5efd6fff36fd6dff2efd65ff26fd5bff1efd4fff1cfd4dff1e0400020c00001000f0ff1d1cfd4fff1efd4eff1efd44ff18fd3cff14fd32ff0efd2eff0cfd30ff02fd30fef8fd2cfeeefd2afee4fd26fedafd1cfed6fd14fed2fd0afecefd00fecefcf8fed2fceefed6fce6fedcfce0fee4fcdcfeeefcdafef8fcdaff02fcdeff0cfce2ff14fce8ff1cfcf2ff22fcfcff26fd02ff26fcfeff30fcfeff3cfd00ff44fd02ff4cfd02ff56fcfeff60fcfeff6afd04ff74fd04ff7efd08ff86fd10ff8efd06ff88fcfeff84fcf2ff80fcecff88fce8ff90fce4ff9afce2ffa4fce2ffaefce4ffb8fce8ffc2fceeffcafcf4ffd2fcfeffdafd00ffe4fd06ffeefd0cfff4fd16fffafd20fffefd26fffefd26fffefd27fffefd3d0000fd45fffefd4bfffcfd61ffe2fd6fffbcfd71ffa8fd71ff80fd71ff56fd6dff32fd67ff28fd49ff0efd49ff0afd48ff0afd48ff0afd480c002ffd9604000e3134fdb60400183004002ffee204001b23fc6c0400ff0268fd32fc66fd36fc62fd3afc62fd34fc5c040016ff0022fc5cfd1cfc58fd1afc54fd18fc4e0400141fe404000a3f00fcd80400005f56fcf8fc5404000eff22f9fc54fd1ffc74fd25fc7afd25fc80fd25fc84fd23fc8afd0dfc9efcfdfcaafcf7fca8fcf1fca4fce9fc9cfce9fc94fce804001671d0fce8fcd2fce82a2691d8fce2fcdcfce0fcdc0200ff04d8fcdcfcd4fcdafcd2fcd8fcd0fcd0fcd2fc9e04000af10ed3fc9efcedfca8fcf5fca8fd03fca4fd1ffc8efd3dfc74fd49fc6efd4804001f6c0400076ffd8efd4cfd900400127128fd6efd16fd5e04003f18fd5c04000bff23febafd18febcfd18fec0fd16fec2fd12fec6fd10fec6fd0cfec6fd08fec6fd04fec4fd02fec2fd00febafd00fd66fcfafd6204000eff10fbfd62fd0ffd78fd19fd7efd41fd82fd69fd82fd77fd82fd76fd82fd78fd840400034ffcc6fd7204000cf32073fcc6fd5bfce2fd3ffd00fd25fd20fd0bfd3efcf5fd60fcf1fd68fceffd80fceefd80fce8fd84fcecfd70fcecfd780400ff0a7efceefd84fcf6fd84fcf4fd88fceefd8efce8fd92fce8fd980400032ffece0400054ffd00fed0040011fa05fceefec6fce4fec4fcdafec6fcd2feccfcd0fece04002fff0a04001723fdb60400dfb4fccefdb0fcccfdaefcc4fda604000a91befdbefcbafdc6fcb60400f118bcfcaefdb2fcb4fdacfcbcfda4fcc0fd9cfcc4fd92fcc6fd88fcc4fd7efcc2fd74fcc2fd6afcc86c291f5604000aff54c5fd56fcd3fd50fcd9fd60fce1fd64fce5fd66fce9fd66fcfffd5efd07fd60fd2ffd6afd37fd6efd39fd74fd37fd4cfd39fd50fd1dfd6efd11fd80fd0bfd8afd25fd9cfd19fdc0fd17fdc8fd11fdccfd09fdcefce1fdd4fcbbfdd8fcbafdd8fcb8fdd404000235bcfee4040071ceff08fcd6ff10f8050204001b1e04005182fceeff840400ff26efff84fcf5ffa0fcefffc8fcf5ffe8fcf9fff0fd15000afd190014fd19001efd150034fd0b0048fceb0060fcdd0070fcd10072fcd00400021ff404000e39b800dc04003fb6009e04000e9fd600b6fce200b8fce80400083fea010a04000aff56eb010afd0700eefd2500d2fd4100b6fd4900a8fd4f0092fd57006afd5d0042fd65001afd67fff2fd67ffd2fd71ffacfd71ff82fd71ff5afd71ff30fd6dff22fd65ff14fd4dfef4fd35fed4fd19feb8fcfdfe9cfce7fe84fcd3fe7cfcabfe78fca1fe74fca00400014ffdcafc9a04000c7d8afdcafc88fdc80400ffffffffffffff567afe04fc80fe14fc76fe12fc6cfe12fc62fe14fc58fe14fc4efe12fc5cfe0cfc54fe0efc4cfe08fc42fdfafc48fe02fc4efe0afc52fe10fc4afe16fc44fe1efc3cfe24fc38fe2efc36fe38fc38fe42fc3cfe4cfc42fe54fc4afe5cfc4efe5efc4cfe6afc42fe6cfc3afe70fc30fe74fc2afe7cfc26fe86fc24fe90fc26fe9afc28fea4fc30feacfc38feb2fc40feb8fc42feb4fc40febcfc3cfec6fc3afed0fc3afedcfc36fee4fc36fef0fc36fefafc3aff02fc40ff06fc3eff10fc3cff1cfc36ff22fc30ff2cfc2eff36fc30ff40fc32ff4afc38ff54fc3eff5cfc42ff5cfc3eff6afc3aff74fc36ff7efc38ff88fc3cff90fc40ff9afc48ffa0fc4cffa4fc46ffacfc3effb6fc36ffbcfc30ffc4fc2effccfc2cffd6fc30ffe0fc34ffe8fc3afff0fc44fff4fc50fff4fc4cfffafc42fffefc3a0000fc320008fc300012fc2c001cfc2c0026fc300030fc34003afc3c0040fc440046fc50004cfc540048fc50004afc4a0052fc400054fc3a0058fc320060fc2e006afc2c0074fc2e007efc300088fc360090fc400098fc3a00a0fc3800aafc3800b4fc3c00befc4000c8fc4600d0fc5000d8fc5200defc5600e6fc5000ecfc4600f0fc3e00f4fc3a00fcfc360106fc360110fc36011afc3c0122fc44012afc4c0130fc540134fc640136fc620142fc64014afc660154fc66015efc66016afc680174fc6c017afc740182fc7e0184fc880188fc920186fc9a0182fca4017efcb4017efcba018afcbe0194fcca01a0fcc801acfcc401b6fcc201c0fcc201cafcc601d2fccc01dafcd401e2fce001e6fce801ecfcea01f0fce001f0fcd201f2fcca01ecfcc001e8fcb601eafcac01ecfca201f0fc9601f0fc9001f0fc8a01e8fc8001e4fc7601e4fc6c01e4fc6201eafc5a01eefc5001eefc4601f0fc3a01f0fc3001f0fc2601eefc1c01eefc1201f0fc0801f0fbfc01f0fbf001eefbf001e4fbf001dafbf001cefbf001c4fbf001bafbf001aefbf001a4fbf00198fbf2018efbf00184fbf0017afbf00170fbf00166fbf0015cfbf00150fbf00146fbf0013cfbf00132fbf00126fbf0011cfbee0112fbf00108fbf000fcfbf000f2fbf000e6fbee00dcfbee00d2fbee00c8fbee00bcfbee00b2fbee00a6fbee009cfbee0090fbee0086fbee007cfbee0070fbee0066fbec005cfbec0052fbec0046fbec003cfbec0032fbec0028fbec001cfbea0012fbea0008fbeafffefbeafff4fbeaffeafbeaffe0fbeaffd2fbeaffc8fbeaffbefbeaffb2fbeaffa8fbeaff9efbeaff94fbe8ff88fbe8ff7efbe8ff74fbe6ff6afbe6ff60fbe6ff56fbe8ff4cfbe8ff42fbe8ff38fbe8ff2cfbe6ff22fbe6ff16fbe6ff0cfbe8ff00fbe8fef6fbe8feecfbe6fee2fbe6fed8fbe6feccfbe6fec2fbe6feb8fbe6feaefbe6fea2fbe6fe98fbe4fe8efbe4fe84fbe4fe78fbe4fe6efbe4fe64fbe2fe5afbdefe52fbdcfe46fbdafe40fbd4fe38fbccfe34fbc2fe30fbb8fe30fbaefe30fba4fe34fb9cfe3afb92fe3efb88fe44fb84fe50fb84fe50fb84fe50fb18fe52fb0cfe56fb10fe54fb0cfe4afb08fe44fb0afe3afb04fe30fafcfe2afaf4fe24faeafe20fae0fe1efad4fe1cfacafe20fac0fe22fab6fe22faacfe20faa2fe20fa98fe20fa8cfe20fa82fe20fa78fe22fa6efe22fa64fe22fa58fe22fa4efe22fa44fe22fa38fe20fa2efe20fa24fe20fa1afe20fa0efe20fa04fe20f9fafe22f9f0fe24f9e6fe24f9dafe24f9d0fe24f9c6fe26f9bcfe28f9b2fe28f9a8fe2af99cfe28f992fe28f988fe28f97efe28f974fe28f964fe26f966fe1cf966fe12f966fe08f96cfe0af972fe10f97cfe14f984fe14f992fe10f99afe16f9a2fe1cf9acfe1cf9b6fe1cf9c0fe18f9cafe12f9d4fe10f9defe0cf9e4fe06f9eafdfef9ecfdf4f9eefdeaf9ecfde0f9e6fdd8f9ecfdd0f9f0fdcaf9fafdcafa04fdc8fa0cfdc2fa12fdb8fa1afdb2fa22fdaafa26fda2fa28fd98fa28fd8efa24fd86fa20fd80fa16fd7afa0cfd76fa02fd76f9f2fd78f9f4fd6ef9eefd5ef9fafd5cfa00fd58fa0afd58fa12fd54fa1efd48fa28fd46fa2efd40fa34fd38fa38fd2efa38fd24fa36fd1afa32fd12fa30fd0efa2efd04fa2afcfafa24fcf6fa22fcecfa20fce2fa20fcd8fa20fcd8fa20fcd8fa20fcd8fa20fcd8fa20fcd8fa20fcd8fa20fcd8fa9cfcd8faa4fcd6faacfccefab2fccefabafcd4faaefcdcfaaefcdcfaaefcdcfaaefcdcfaaefcdcfaaefcdcfaaefcdcfaaefcdcfaaefcd2faacfcd2faacfcd2faaefccefab4fccefabcfcd0fabafcd638000a51a8fcc8fab03c001fd4040002fd0092fceafa8efcecfa8cfceefa98fcea0400fbfffffe90fcfafa88fcfafa82fcfefa7cfd04fa78fd0efa76fd18fa76fd22fa7afd2cfa7efd36fa80fd3afa82fd44fa86fd4efa8afd54fa92fd5cfa9afd60faa2fd62faa6fd6cfaaafd74fab2fd7cfabafd82fac4fd86facefd88fad8fd88fae2fd86faecfd86faf6fd88fb02fd88fb0cfd88fb16fd8afb20fd8afb2afd8afb34fd8afb40fd8afb4afd8afb54fd8afb60fd8afb6afd8afb74fd8afb7efd8cfb8afd8cfb94fd8cfb9efd8afba6fd88fbaefd80fbb4fd78fbb6fd6efbb8fd64fbb6fd5afbb6fd4efbb4fd44fbb4fd3afbb4fd30fbb4fd26fbb6fd1cfbb2fd16fbb8fd0efbc2fd0afbcafd04fbd0fcfcfbd4fcf2fbd6fce8fbd4fcdefbd2fcd4fbccfccafbc4fcc4fbc0fcc2fbbefcb8fbb8fcb0fbb8fca6fbb6fc9cfbb4fc92fbaefc8afba6fc84fb9efc7efb92fc7efb88fc7efb78fc82fb7afc78fb78fc6efb76fc64fb78fc5afb7cfc4efb80fc58fb84fc60fb8cfc66fb94fc6afb9efc6cfbaafc6afbb4fc68fbbefc62fbc4fc5cfbcafc52fbcefc4afbd0fc40fbcefc34fbcafc2cfbc4fc22fbbcfc1afbb2fc16fba8fc14fb9efc14fb94fc16fb8afc18fb82fc1afb7efc20fb7afc26fb7afc1cfb78fc10fb78fc06fb7afbfcfb78fbf2fb78fbe8fb78fbdefb78fbd2fb82fbd4fb8cfbd2fb96fbd0fba0fbd0fbacfbd2fbb6fbd2fbc0fbd0fbcafbd0fbd4fbd0fbdefbd0fbeafbd0fbf4fbd0fc02fbccfc0cfbd0fc16fbd2fc20fbd0fc2afbd0fc36fbd0fc42fbd0fc4cfbd2fc56fbd2fc5efbd2fc5cfbdcfc5efbe6fc5efbecfc5afbf4fc58fbfefc5afc0afc5cfc12fc5cfc1efc5efc28fc5efc32fc5efc3cfc5cfc46fc5cfc50fc5efc5afc5cfc64fc5cfc6efc5efc7afc5efc7efc5cfc84fc58fc8cfc56fc96fc58fca0fc5cfca6fc5cfcb0fc5efcbcfc5efcc6fc5efcd0fc5efcdafc5efce4fc5efceefc5efcf8fc5efd02fc5efd0cfc5efd16fc5efd20fc5efd2cfc60fd36fc60fd40fc60fd4afc5efd54fc60fd5efc60fd68fc60fd74fc5efd7efc5efd8cfc60fd96fc64fda0fc6cfda8fc72fdaefc72fdaefc72fdaefc82fdb2fc7afdb8fc76fdb8fc70fdb6fc70fdb6fc70fdb6fc70fdb6fc70fdb6140015f204003b82fdf0040051f2fc80fdf40400117a040051f8fc5afdf204001f5804000125fcf80400ffd848fcbafc40fcb8fc3efcb2fc44fca8fc48fca0fc4afc96fc48fc8cfc44fc82fc3efc7cfc38fc72fc34fc6efc30fc6afc32fc62fc34fc58fc34fc4cfc30fc44fc2afc3cfc22fc34fc1afc30fc12fc2cfc08fc2afbfefc2efbf6fc32fbecfc3afbe6fc42fbe2fc4cfbe0fc56fbe0fc60fbe4fc68fbecfc70fbf2fc78fbfefc7efbf6fc8afbecfc8cfbe4fc92fbe0fc94fbd8fc9cfbd6fca6fbd4fcb0fbd2fcbafbd0fcc2fbd0fcccfbd6fcd4fbdcfcdcfbe4fce0fbeefce4fbfafce4fc02fce2fc0efce0fc16fcdcfc1efcd4fc22fcccfc26fcc4fc26fcc0fc30fcbcfc3afcb8fc3afcb8fc3afcb80c0002fa0044fccefc44fcd4fc42fcd8fc40fcda04002dfde804003d28fdf60400513afdf8fc3c040071fafc3cfdfcfc3a040011fe04007f2cfe02fc28fe0604000365fdfcfc24fdf604007328fe16fc28fe1a0400116a04003f10fec40400176ffde4fc0afdda04000d41fbfafdea04003ff8fde804000b2ffcee04001b65fe06fbfcfe0a04003af8fe1a040024011c040043fc10017604001fe404001725fed804003f28feb604000f2301d60400ff1adafc2a01dcfc2c01defc3001e0fc3401e2fc3801e2fc3c01e0fc3e01dcfc4001dafc4001d6fc40013604000e3b58014e04001fda0400021f70040006f31e94fc700192fc72018efc74018afc760188fc7a0188fc7e0188fc820188fc84018cfc86018efc880194fc8801d00400ff42d4fc8a01d8fc8e01dafc9201dcfc9401dcfc9801dafc9c01d8fc9e01d6fca001d0fca0019efca0019cfca00198fca20196fca60194fcaa0192fcac0192fcb00192fcb40194fcb60198fcb8019efcb601dc04000efc72b701dcfc9501bcfc7f01b6fc5701acfc3701a0fc2f0196fc190174fc19016afc190142fc15011afc1300f2fc1300c8fc1100a0fc03007cfbff0066fc03003efc070016fc07ffeefc05ffc6fc07ff9efc07ff76fc07ff4cfc05ff24fc09fefcfc09fed4fc03feacfbfffe82fbfffe5afbfbfe4efbeffe3cfbe3fe32fbe1fe2efbe004004ffce4fbda04000cff16dbfce4fc01fcf6fc09fcf8fc0ffcf8fc15fcf6fc1dfcf2fc23fce8fc27fcdafc29fcd0fc280400156ffddefc2efde204000e7314fdcefc10fdc6040012c004006ffce4fc0cfce2040011ff01fbf8fd04fbdafd18fbd0fd1afbc8fd160400072ffe240400021fb004000527fd9804005f94fbacfd8c04000a319afd9804001898040029fe2404007780fe3cfb8cfe3e04009140fb8afe40fb88fe3e04005184fe36fb7e2800121a040023fda20400dfa0fb7efd9efb7cfd9afb74fd9204000a3668fda20400f31ffe38fb68fe3afb68fe3efb66fe40fb62fe44fb5efe44fb5afe44fb58fe44fb54fe42fb52fe40fb50fe38fb50fda20400f142a0fb4efd9cfb4afd9afb48fd98fb44fd98fb40fd98fb3cfd9afb3afd9cfb38fda2fb38fe38fb38fe3afb38fe3efb36fe40fb32fe44fb30fe44fb2cfe44fb28fe44fb24fe42fb22fe40fb20fe38fb20fd9804003f1afd940400063f08fd8e040003ff07fe10fb08fe12fb08fe16fb06fe18fb02fe1cfb08fe2204000aff6000fe12faf6fe0afaf4fe0afaf2fe10faf6fe1afafafe20fb02fe24fb0cfe26fb14fe28fb1efe24fb24fe1efb28fe16fb2efe0efb2efe04fb2cfdfcfb26fdf4fb1efdeefb16fde8fb0cfde6fb02fde6faf8fdeafaeefdeefaeafdf6fae6fdfefae6fe08fae8fe12faecfe1afaf0fe1e04000231dafe1204003ad8fe10040023fd9804009f96fadafd92fad6fd8c04001233c0fd9204001f8e040003f91ffe06fac0fe08fac0fe0cfabefe0efabafe12fab8fe12fab4fe12fab0fe12faacfe10faaafe0efaa8fe06faa8fd8404003f90fd6c04000ff51ffe02fa90fe04fa90fe08fa8efe0afa8afe0efa88fe0efa84fe0efa80fe0efa7cfe0cfa7afe0afa78fe02fa78fd4404003f60fcec04001723fe0e0400f31612fa5efe16fa5afe18fa58fe18fa54fe1afa50fe18fa4cfe16fa4afe14fa48fe0efa48fcec0400f51ae8fa46fce6fa44fce2fa40fce0fa3cfce0fa38fce0fa36fce2fa32fce4fa30fce8fa30fcecfa2efcf80400fe1c2ffcf8fa4ffd10fa59fd1afa5dfd26fa61fd2efa5bfd36fa57fd3efa41fd4efa33fd54fa32fd54fa30fd520400effe10fa30fe12fa30fe16fa30fe1a04000abf24fe18fa1cfe16fa18fe1a04000b23fdd40400dfd2fa16fdcefa12fdccfa10fdc40400023104fdd40400140004002ffe1a0400012ff9e80400043fe6fe10040002ff2ae7fe10f9fffe0efa09fe0afa11fe04fa29fde2fa3dfdbefa47fd9afa47fd8cfa43fd82fa3bfd78fa2bfd6cfa21fd6cfa1dfd6cfa19fd70fa1804000a1f5c04000aff1619fd5cfa3dfd76fa61fd8afa85fd98faadfda2fad5fda0fadffd9efae9fd98faf1fd8efaf00400121fe004000ef5e4f1fde0fb07fdc8fb23fdb8fb49fdb0fb73fdb0fb9dfdaafbb9fd9afbd5fd7afbf3fd60fc0ffd42fc1dfd34fc29fd0cfc35fce6fc3bfcd0fc37fcb8fc3dfcc2fc3dfcd2fc39fcdafc2ffce2fc11fcfcfbf5fd1afbe7fd2cfbe3fd36fbe3fd5efbe1fd70fbd1fd96fbc7fdaafbabfdc6fb8ffde4fb83fdecfb79fe02fb69fe2afb61fe3efb61fe52fb67fe64fb6bfe6efb73fe74fb72fe74fb7afe7afb80fe7efb7efe88fb80fe92fb82fe9cfb82fea6fb82feb0fb82febcfb82fec6fb82fed0fb82fedafb82fee4fb82feeefb82fef8fb82ff02fb82ff0efb84ff1afb82ff26fb82ff32fb82ff3efb82ff4afb82ff4afb82ff4a0c00f1ffffffff461aff50fb0cff52fb08ff48fb06ff3efb02ff34fafeff2efaf6ff26faeeff22fae4ff20fadaff20fad0ff22fac6ff22fabaff24fab0ff22faa6ff22fa9cff22fa92ff24fa88ff24fa7eff24fa74ff24fa6aff24fa60ff26fa54ff26fa4aff28fa40ff28fa36ff28fa2cff28fa22ff2afa18ff2afa0eff2afa04ff2cf9faff2af9f0ff2af9e6ff28f9dcff2af9d0ff2af9c6ff2ef9c0ff34f9b8ff3cf9b4ff44f9b0ff4ef9b0ff5af9b2ff64f9b4ff6cf9b6ff78f9b4ff82f9b4ff8cf9b4ff96f9b8ffa0f9baffaaf9baffb4f9bcffbef9bcffc8f9bcffd2f9beffdcf9beffe8f9befff2f9befffcf9be0008f9be0012f9c0001cf9be002af9b60024f9ae0022f9a80022f99e0022f9940028f9900030f98a0038f980003af97a0042f972004af9700052f9700058f96c005ef9660066f9620070f962007af9660084f96a008cf9760092f97c009cf98200a4f98e00aaf99400b2f99a00b6f9a400baf9ae00b8f9b600b6f9ba00b4f9ca00b6f9c800c0f9c800caf9ca00d4f9c800def9c800e8f9c800f4f9c800fef9ca0108f9ca0112f9cc011ef9c60120f9bc011ef9b20120f9a60126f99c0124f9940126f98a012af9840130f97e0138f97c0142f97c014cf9800156f97c0160f97e0168f9800172f986017cf9880186f98c0190f98e0196f9840196f97a0198f972019ef96801a4f96201acf95c01b4f95801bef95601c8f95801d0f95e01daf96401e2f96c01eaf97601eef97a01f2f97601f2f96c01f8f9640200f95a01fef9500200f94601fef93e01faf93001f6f92e01f0f93801eef94201e8f94a01e2f94e01daf95201d0f95401c6f95401a4f95401a4f950019af94e0194f9500194f94c019ef94a01a6f944019ef93a019af9300198f9260198f91c019af912019ef90a01a4f90401acf8fe01b4f8fe01bef8fe01caf90001d4f90401def90a01e6f91201ecf91c01f0f91401f6f90a01faf9060202f9020202f8f80202f8ea0202f8e201fef8d801faf8ce01f8f8c401f8f8ba01f8f8b001f8f8a601f8f89c01f8f89001f8f88601faf87c01faf87401fcf87001f4f86a01eef86201e8f85801e4f84e01e4f84401e4f83a01e8f83201eef82a01f6f82a0200f82401fef81801fef80e01fef8020206f7f80206f7ee0208f7e40206f7da0204f7d00206f7c60206f7ba0206f7b00206f7a40208f79a0206f7900208f7860208f77c0206f7700206f7660206f75c0208f7500208f7460208f73c0208f732020af728020af71e020af714020af70a0208f70a01fef70c01f4f70a01eaf70c01e0f70c01d6f70e01ccf70e01c2f71801c2f72201c2f72c01c2f73601c2f74001c2f74a01c2f75601c2f76001c4f76a01c4f77401c4f77e01c4f78801c4f79201c4f79e01c4f7a801c2f7b401c2f7be01c2f7c801c4f7d201c2f7dc01c2f7e801c2f7f201c2f7fc01c2f80801c2f81201c2f81e01c2f82801c2f83201c2f83c01c2f84801c4f85201c2f85e01c2f86801c2f87201c2f87c01c2f88801c2f89801c0f89801c0f89601c0f89801c2f89801c2f8981800f210c4f89601c4f89701c4f87701def87101e4f86901e6f84101e2f83501def83404004ff71201e00400041fc8040012ff041e01dcf71e01e4f71e01eaf71a01f2f71201f804000d45f81801f40400f90c1901f4f82d01e2f83301e0f85b01e4f88101d8f89301d4f89901d00400319801d0d000f5c8a001caf8aa01ccf8b401caf8ba01c4f8c201bef8c601b4f8c801aaf8c801a0f8c60196f8c6018af8c60180f8c60176f8c6016cf8c60162f8c60158f8c6014cf8c60142f8c60138f8c6012ef8c80124f8c8011af8c6010ef8c60104f8c600f8f8c600eef8c600e4f8c800daf8c600d0f8c600c4f8c400baf8c200b0f8c200a6f8c2009cf8c00092f8c00088f8be007ef8be0074f8be0068f8be005ef8be0052f8bc0048f8bc003cf8ba0032f8ba0026f8b8001cf8b80012f8b80006f8b4fffef8b2fff4f8acffeaf8a4ffe4f8a6ffd0f8a6ffd0f8a6ffd00c00ff2cc6ffd0f8ccffd6f8d6ffd2f8dcffcaf8e2ffc2f8e4ffb8f8e6ffaef8e2ffa4f8deff9cf8d8ff94f8ceff90f8c4ff8cf8baff8af8b2ff8cf8a8ff90040012f5ff65ceff9af8daff9af8e4ff98f8eeff94f8f2ff8ef8f4ff8ef8f2ff88f8e6ff7ef8eeff82f8f8ff84f902ff84f90cff84f916ff80f91eff78f924ff72f92aff68f92cff5ef92eff54f92cff4af92aff40f928ff36f928ff2cf92aff22f92aff18f92cff10f932ff10f93aff10f946ff12f950ff0cf95aff10f964ff10f96cff0cf974ff06f97afefef97cfef4f97cfeecf97afee2f972fed4f978feccf97afec2f97afebaf976feb0f970feaaf96efea0f96afe98f962fe90f96cfe90f976fe90f980fe8ef98cfe8ef996fe8ef9a0fe90f9aafe8ef9b6fe90f9c0fe90f9cafe90f9d4fe90f9defe90f9e8fe90f9f4fe90f9fefe8efa08fe8cfa12fe8afa1cfe8afa26fe88fa30fe88fa3afe86fa44fe86fa4efe86fa5afe86fa64fe86fa6efe86fa78fe86fa82fe86fa8cfe86fa98fe86faa2fe86faacfe86fab8fe86fac2fe86faccfe88fad6fe88fae0fe86faeafe86faf4fe84fafcfe82fb04fe7cfb08fe74fb0cfe6afb0cfe60fb0efe5efb0efe5efb0efe5e0c007f78fe5efb7efe5c0400023160fe6c0400315efe6804001b2204003f0afe8004000e1b5a04003f72fe9804000d2ff9880400043f82feb0040005f31ffb6cfeb0fb6efeb0fb70feb0fb74feb2fb76feb6fb78feb8fb78febcfb78fec0fb76fec4fb74fec6fb6cfec8f9960400ff4694fec8f990fecaf98efeccf98cfed0f98afed4f98cfed8f98cfedcf990fedef992fee0f996fee0fb6cfee0fb6efee0fb70fee0fb74fee2fb76fee6fb78fee8fb78feecfb78fef0fb76fef4fb72fef6fb6cfef8f98c0400003d7eff1004001f560400178ffb7cff10fb7aff0a040012716cff1cfb6aff2404003968ff280400131804007f16ff28fb0cff2c0400023110ff3e0400390eff4004007f68ff40fb6aff3a040012ff366bff3afb43ff30fb1dff22fafdff0afaf1ff04fac7ff00fa9fff04fa75ff04fa4dff04fa25ff02f9fdff02f9d5ff02f9bdff0af9bbff10f9bbff16f9bbff26f9bbff28f9ba04000413420400f92c40ff28f93cff2af93aff2ef938ff30f938ff34f938ff38f938ff3af93cff3ef942ff40f99cff40f99eff40f9a2ff40f9a4ff42f9a8ff46f9aeff3e04003fa6ff5804000613420400f93040ff58f93cff5af93aff5ef938ff60f938ff64f938ff68f93aff6cf93cff6ef93eff70f942ff70f99cff70f99eff70f9a2ff72f9a6ff74f9a8ff76f9acff6e040033a6ff8404001d8804001e0604004df8faffa004001fe60400172ff9a40400007fb4ffb8f9b4ffb004000a70a6ffbaf99cffb804002ff8f20400003fe6ffd004000923f9a404003fa8ffca040006bfaaffdcf9acffe2f9b0ffe804000d23f8c004007fbeffe8f8baffee04000e34c00000040060f9a60000f9a804002ffffa04000b21001404003ca60016040041f8cc001804003fc6001a04000231c4002c04003fc0002e0400012ff97e04001038660046040041f8d000480400bfce0048f8ca0048f8c6005004000674d2005cf8d4005e0400f121f94c005ef94e0060f9520060f9540062f9580064f9580068f958006cf9580070f9560072f9540076f94c0076f8d400780400bfd20078f8ce007af8ca00800400041f8e0400012ff9600400003f6e00a604000941f8d800a804007fd600a8f8d200aa04000a74d600baf8d400be04002ff9b00400043fb800d604000541f8dc00d804007fd800d8f8d000de0400063cd400ee0400f121f9b000f0f9b200f0f9b600f0f9b800f2f9ba00f4f9bc00f8f9bc00fcf9bc0100f9ba0102f9b80104f9b00106f8de01080400ff1cdc0108f8d8010af8d6010cf8d40110f8d40112f8d40116f8d6011af8d8011cf8de0120f99c0120f99e011a040016ff0c8c0116f9840116f9800118f97a011af9780124f9760130f974013604000541f8de01380400f346dc0138f8d80138f8d6013cf8d4013ef8d40142f8d40146f8d4014af8d8014cf8da014ef8de0150f96a0150f96c0150f9700150f9720152f9760156f9760158f976015cf9760160f9740162f9720166f96a0168f8de0400f948dc0168f8d8016af8d6016cf8d40170f8d40172f8d40176f8d4017af8d8017cf8da017ef8de0180f96a0180f96c0180f9700180f9720182f9760184f9760188f976018cf9760190f9740192f9720194f96a0196f95e01900400fc08480180f93e0180f92a0182f91e0188f9160190f9100196040023f8de0400ff42dc0198f8d8019af8d6019cf8d401a0f8d401a4f8d401a6f8d601aaf8d801acf8de01aef8e801aef8ea01b0f8ee01b0f8f201b2f8f401b6f8f401b8f8f401bcf8f401c0f8f201c2f8ee01c6f8e801c6f8cc0400143ffa01de0400121f6e0400043f6a01ca040006ff4e6b01caf89101d8f8bb01d6f8c501d4f8cf01ccf8dd01baf8e501a6f8eb017ef8f30156f8f3012ef8f30106f8f300def8f300b4f8e9008ef8e70066f8dd003ef8d5001cf8d7fff6f8cfffcef8c9ffaef8c8ffaef8c2ffaef8c6ff80f8c2040002159e0400f100c4ffaef8beffaef8acffb0f8a2ffb40400f9c89cffbcf896ffb2f88effacf884ffa8f87affa6f870ffa6f866ffa8f85cffa8f852ffaaf848ffaaf83effaaf834ffa8f82affa8f81effa8f814ffa6f80affa6f800ffa6f7f6ffa6f7ecffa6f7e0ffa4f7d6ffa4f7ccffa4f7c0ffa2f7b6ffa2f7acffa4f7a4ffa8f79effacf794ffacf78affaef780ffb0f776ffb0f76cffaef762ffaef756ffacf74cffacf740ffa6f73cff9ef73eff94f740ff8af73eff7ef748ff80f752ff80f75cff7ef77aff80f784ff80f78eff80f798ff80f7a4ff80f7aeff80f7b8ff80f7c2ff80f7c8ff7ef7c8ff7ef7c8ff7e0c00f904baff8cf7b2ff8ef7aaff8ef7a6ff8cf79eff88040013580400f11c56ff88f752ff8af750ff8cf74eff90f74eff92f74eff96f74eff9af750ff9cf754ff9ef758ffa0f798ff9e0400f10e99ff9ef7b1ff96f7d9ff98f7ffffa2f827ff9cf833ff96f835ff94f8350800000c000f040003ffffffffffec34ff96f82aff98f82eff92f832ff88f834ff7ef832ff74f832ff6af830ff60f832ff56f834ff4af834ff40f832ff36f830ff2ef82aff26f822ff1ef818ff1af80eff18f804ff18f7faff1af7f0ff1cf7e6ff1af7daff1af7d0ff1af7c6ff1af7bcff1af7b2ff1af7aaff1af7a0ff18f796ff16f78aff18f780ff1af776ff1af76cff1af762ff1af758ff1af74cff1af742ff18f738ff1af72cff18f722ff18f718ff1af70aff1cf70aff12f70cff08f710fefef70cfef4f70afeecf70cfee2f70cfed8f708fecef70cfec4f710febaf712feb0f712fea6f710fe9cf70cfe92f706fe88f700fe82f6fefe76f700fe6cf700fe5ef70afe62f714fe62f71efe60f722fe60f72efe60f736fe5cf73cfe56f742fe4ef744fe44f746fe3af742fe2ef740fe28f742fe1ef742fe12f744fe0af748fdfef748fdf4f744fdeaf740fde4f744fddaf742fdd0f740fdc6f740fdbcf740fdb0f73efda8f738fda0f730fd9af728fd94f71afd94f710fd92f706fd94f704fd92f704fd88f702fd7cf706fd74f70cfd6af70efd60f70efd58f712fd4ef714fd44f716fd3af71afd30f71afd26f71cfd1cf71efd12f720fd08f722fcfef724fcf4f724fceaf724fce0f726fcd6f72afcd0f734fccef73efcccf748fcccf752fccaf75cfcccf766fcccf770fcccf77cfcccf786fcccf790fcccf79cfcccf7a6fcccf7b0fcccf7bafcccf7c4fccef7cefccef7dafccef7e4fccef7eefccef7f8fccef802fccef80efcd0f818fcd0f822fcd0f82afcccf832fcc8f838fcc0f83efcb8f840fcaef844fca4f846fc9af844fc90f842fc86f848fc7cf84afc74f856fc74f860fc74f86afc72f874fc72f87efc72f888fc72f892fc72f89efc6ef8a0fc78f8a6fc86f8a0fc8ef89cfc98f89afca2f896fcacf896fcb8f896fcc2f898fcccf89afcd6f89afce0f89afceaf89afcf4f89cfcfef89afd08f89afd14f89afd1ef898fd28f898fd32f898fd3cf89afd46f89afd50f89afd5af89efd66f8a4fd6ef8acfd74f8a6fd7af89efd86f894fd8af88cfd8ef886fd96f882fda0f882fdaaf884fdb4f88afdbcf892fdc4f894fdccf890fdd6f88efde0f890fdeaf894fdf2f89afdfaf8a4fe00f8acfe02f8b6fe02f8c0fdfef8c8fdfaf8d0fdfcf8cefe06f8cefe10f8d0fe1af8d0fe24f8d0fe2ef8d2fe32f8c8fe34f8c0fe2ef8b4fe2ef8aafe2ef8a0fe32f898fe36f892fe3ef88cfe46f882fe46f878fe48f872fe3cf870fe32f86efe2af86afe22f860fe1cf856fe1af84cfe1af842fe1af838fe20f830fe26f82afe2ef828fe38f822fe42f81cfe3af816fe32f80cfe2ef804fe2cf7fafe2cf7f0fe2ef7e8fe32f7e0fe3af7dafe44f7d0fe42f7c4fe42f7bafe42f7b0fe42f7a6fe40f79cfe40f792fe44f78cfe48f788fe50f784fe52f77cfe56f778fe5ef774fe64f774fe6ef776fe78f77cfe82f784fe88f78cfe8ef796fe92f7a0fe92f7aafe92f7b6fe8ef7c0fe8cf7cafe8cf7d6fe8cf7e0fe8cf7eafe8ef7f4fe8ef7fefe8ef80afe8ef814fe8ef81efe8ef828fe8ef832fe8ef83efe8ef848fe8ef852fe8ef85cfe8ef868fe8ef872fe8cf87cfe90f886fe8ef892fe8ef89afe96f8a8fe98f8a6fea2f8a8feacf8a8feb6f8a2febaf8a2feb0f8a0fea8f89afea0f892fe9af886fe98f886fe98f872fe9cf86cfe9cf864fe94f83efe9ef838fea8f838fea8f83afeaaf83efea4f848fea2f84efea0f858fe98f858fe8ef862fe90f86efe8ef86afe8ef86efe96f870fe9ef86cfe98f868fe90f868fe90f868fe900c000af10a54fe9ef846fea0f81efea4f818fea2f816fe9ef816fe98f81a1400ff22aaf822feb4f828fec2f824feccf820fed6f81efedef820fee8f826fef2f826fefef828ff08f82eff10f834ff14f838ff18040006f10842ff1ef82aff1cf820ff1cf81cff16f816ff0ef80efefc04003c0cfef804002ff71c040008391eff1204001f1f040004faffffff3d1eff13f73afee7f742fee7f76cfee5f794fee9f7bcfeeff7e4fef7f80aff03f814ff07f81eff0bf836ff2bf83cff33f844ff45f864ff5df886ff75f8a6ff8ff8bcff9df8e2ffa5f90affabf92cffa7f934ffa3f93cff9bf954ff7bf96cff59f98cff43f9aaff25f9c4ff07f9defee9f9fcfecbfa14feb9fa1efeb5fa46feb5fa6efeaffa96feabfabefeabfae6fea5fb0afe99fb16fe8bfb2efe6bfb4afe4ffb66fe2ffb84fe17fba6fdfffbb0fdf7fbbafdf3fbe4fdf3fc0cfdf3fc36fdf3fc5efdf3fc86fdf9fc96fe01fcb6fe19fccefe39fceefe51fd08fe71fd26fe8bfd2efe93fd38fe95fd60fe95fd88fe99fdb0fe99fdd8fe99fe00fe9ffe28fe9ffe54fea1fe7cfea5fea4fea5feb2fea7febefeaffed8fed1fef6feebff12ff09ff30ff25ff4cff43ff6aff5fff86ff7bff92ff81ff9cff7fff72ff83ff70ff87ff52ff87ff76ff9bff9affabffc2ffb3ffd2ffb5ffd6ffb1ffdaffa7fff8ffadfffcffad0000ff830006ff5d0012ff37001eff110022feef001cfec9000efead0004fea10004fe790000fe590000fe810001fe8c0005fe8c0015fea8001dfeb40025fedc0023ff060021ff16001dff20fffdff3affe1ff4effcbff52ffa3ff52ff85ff52ff79ff50ff6dff48ff53ff28ff33ff0eff17fef2fef9fed8fed5fec4feaffebafe87feb2fe6ffeaefe5ffe9cfe4bfe7efe37fe5cfe2ffe4efe29fe5cfe21fe7efe1dfe82fe17fe86fe13fe86fe0dfe84fe05fe80fdebfe70fdc3fe6afd9bfe5afd75fe4cfd4ffe3efd29fe32fd03fe24fcddfe18fcb5fe0cfc8ffdfefc69fdf4fc43fdf4fc1bfdfefc1ffe02fc31fe08fc2bfe00fc2bfdfafc25fde4fc1ffde2fc05fdd4fbf7fdc8fbf1fdc8fbedfdcafbe7fdccfbcffde0fbb3fdfafb8ffe10fb6dfe24fb4bfe3afb2ffe58fb29fe66fb21fe7efb17fe88faf7fea2fadbfebefacffec2faa5fecafa7ffed4fa57fedefa31fee8fa09fef2f9e1fefaf9cbff04f9b5ff12f99fff32f98fff44f971ff60f955ff7ef939ff9af929ffa8f91fffacf8f7ffaaf8d7ffa8f8b3ff98f89fff8cf885ff6ef873ff5ef84fff4ef843ff3ef831ff24f811ff0cf7ffff00f7f3feeef7effee6f7effedef7f1fed8f7f7fed0f805fec4f80bfec0f811fec0f815fec2f817fec8f816fec8f816fec8f816fec8f816fec8f81614002ff71c0400003f10fee004000a3ffefedc040005ff01f804fec6f808febcf810feb4f816feb0040011f303f75cfeb0f754feb2f740feb0f73afeb0f7260400f12624feb0f720feaef71efeacf71cfea8f71cfea4f71cfea0f71efe9cf720fe9af722fe98f726fe98f7dcfe98f7d0fe96f7d0fe94f7d204001592040070e8fe9af7eefe9804002ff810040010ff2a11fe98f7edfeacf7d5feb2f7adfeb2f783feb2f769feacf763fea8f75dfea2f759fe9af759fe94f75bfe8ef75ffe8af765fe86f76dfe80f76c040014131c0400ff1018fe80f716fe7ef712fe7af712fe78f70efe84f710fe7af70efe70f70afe6204000e5b18fe68f71c04001f6c04000a1f500400021f4e04000a1f3804000212c604004ff818fe200400158ff750fe20f74efe2404000ebf54fe16f752fe0ef74efe0804000af96492fe08f79cfe04f7a4fe0af7aafe12f7b2fe18f7bafe1af7c2fe1af7ccfe1af7d4fe12f7dcfe0cf7e2fe04f7e6fdfaf7e8fdf0f7e6fde6f7e4fddcf7defdd6f7d4fdd0f7d0fdc6f7cafdc2f7c0fdbef7b8fdbcf7acfdbef7a4fdc0f79efdc8f798fdd0f794fddaf794fde4f794fdeef796fdf80400719afdfef790fdf004001b8a040013580400ff1a56fdf0f752fdeef750fdeaf74efde8f74efde4f74efde0f750fddcf752fddaf754fdd8f758fdd8f78a0400083f8efdf004000ef10c7cfdeaf77afde4f77afddcf77afdd8f77cfdd2f782fdccf792fdc204003f94fdc004000e13580400f71c54fdc0f752fdbef74efdbaf74efdb6f74efdb4f74efdb0f750fdacf754fdaaf758fda8f7f0fda8f7ecfd9004001392040002140053e8fd90f7da04001b3004003f18fd7804000d2ff88c04000c3d7efd9004001e0404004ff7f8fda804000923f8700400f31674fda8f876fdaaf87afdaef87afdb0f87cfdb4f87afdb8f878fdbcf876fdbef870fdc0f7e40400bfe0fdc0f7dcfdc2f7d8fdc6040012bff2fdcaf7fcfdcef802fdd80400092ff7e404000c3df2fdf00400f160f8fdf0f7fefdeef800fdf8f804fe02f80afe0af812fe10f81cfe14f826fe16f830fe16f838fe12f840fe0cf846fe02f84afdfaf84cfdf0f84afde4f848fddcf844fdd2f83cfdcaf834fdc4f82cfdc0f822fdc0f818fdc0f810fdc4f808fdccf800fdd2f7fefddcf7fcfde6f7fafe040400f10cfefe0cf802fe12f80cfe18f818fe1cf82cfe1af83afe14f844fe0a04003548fe080400179804003fc2fe200400123f7cfe220400085102f882fdee04003f84fdf0040006135c04007f5afdf0f850fdf20400067f56fde0f852fdd80400061f88040010ff1289fdd8f86bfdc4f867fdbef867fdb2f86bfd8af86dfd7ef873fd76f88ffd60f88e04001323f7260400f51c22fd60f720fd5ef71cfd5af71cfd56f71cfd52f71cfd50f71efd4cf720fd4af726fd48f790fd48f796fd46040013a00400f154a6fd4af7acfd50f7b6fd56f7befd58f7c6fd58f7cefd54f7d6fd4ef7defd46f7e0fd3cf7e2fd34f7e2fd28f7e0fd1ef7dafd16f7d4fd10f7cafd0af7c0fd08f7b6fd06f7aefd08f7a4fd0ef79efd14f796fd1af792fd24f78efd2ef790fd38f794fd400400ff3095fd40f79dfd4af79bfd50f793fd60f78ffd64f789fd66f785fd66f77ffd66f779fd62f76ffd56f767fd44f763fd3cf763fd30f767fd2af766fd2af76cfd3004000a13300400ff1a2efd30f72cfd2ef728fd2cf726fd28f726fd26f726fd22f726fd1ef728fd1cf72cfd1af730fd18f78a04000a1f300400021f800400021f180400023f30fd0004001217a804003fd0fce80400121f300400172ff88e04000a1fd004000213480400fd0444fcd0f842fccef840fccaf83efcc8f836fccc04003348fcba040015b80400138404007d88fcb8f890fcb404007d8efca8f88efca00400135c0400ff185afca0f856fc9ef854fc9af852fc98f852fc94f852fc90f854fc8cf856fc8af85cfc88f892fc8a040012ff1a93fc8af87bfc96f86ffca4f869fcb0f869fcc2f86dfce4f871fceef87dfcf8f88bfd00f88ffd00f88e04000f4ff7c6fd0404001af100dafd04f7e2fd06f7eafd0ef7f0fd16040039eefd1804003ffefd1404000cf16e28f7f8fd2af7fafd34f7fefd3cf804fd44f80cfd4af812fd52f81cfd56f826fd5af830fd58f838fd54f840fd50f846fd46f84afd3ef84efd34f84cfd2af84afd20f846fd18f840fd10f838fd0af82efd06f824fd04f81afd04f810fd08f818fd04f810fcfef808fcf8f7fefcf4f7f8fcf0f7eefcf2f7e4fcf6f7defcfcc4003fd6fd1004000eff1ed7fd10f7f3fcecf801fcdef809fcd8f815fcd8f82bfcdef839fce4f84dfcfcf855fd0af857fd14f853fd18f85204000413840400f31688fd18f88cfd1af88efd1ef890fd20f890fd24f890fd28f88efd2cf88cfd2ef884fd30f85c0400ff1c58fd30f856fd32f854fd36f852fd38f852fd3cf852fd40f854fd44f856fd46f85cfd48f884fd48f88efd3c04000aff5c8ffd3cf875fd5cf869fd78f865fd9cf863fda4f845fda2f841fda4f83dfda8f839fdaef839fdc2f837fdbef82ffdb6f82bfda8f82bfda2f80ffd9ef7edfd8af7c5fd88f79ffd7af77dfd6ef761fd50f75bfd48f759fd36f759fd0ef759fce4f757fcd2f756fcd2f758fcd00400021f4e040008f1004ffcd0f75ffceef75ffcf8f759fd205c00ffb85dfd64f767fd8af771fdb2f76bfdd6f75dfde2f771fdf0f773fdfaf76ffe24f771fe48f769fe5ef759fe76f75bfe80f75ffe98f763fe9ef783febaf79ffed6f7b7fee4f7ddfef2f7ebfef4f80fff04f81bff0af835ff28f84bff3af84dff3ef84dff40f84cff40f858ff3ef858ff34f856ff28f860ff2cf86aff2cf874ff28f87eff26f888ff24f892ff20f89cff1af8a6ff10f8a6ff1af8a8ff26f8a8ff30f8a8ff3af8a6ff44f8a6ff4ef8a6ff58f8a6ff62f8a8ff6cf8aeff74f8b6ff7af8c2ff7cf8c2ff7c08000635b6ff88040013480400ff1a46ff88f842ff8af840ff8cf83eff90f83eff94f83eff98f83eff9af842ff9ef844ffa0f848ffa0f85e0400107146ff8ef842ff7204003f3eff70040002138e0400ff0092ff70f896ff6ef898ff6cf89eff680400063384ff5a0400115804001f3e0400143968ff4004001f9a04000a1f280400023f8eff26040002118f0400fb043ef885ff66f889ff8ef88dff9cf88fffa0f88e040071acffa0f8aeff9a0400fb66afff9af8d9ffa6f901ffb0f919ffaef92bffaaf947ff94f963ff76f977ff52f98fff32f9abff14f9cdff00f9d7fefcfa01ff00fa29ff00fa4ffefcfa5dff14fa63ff16fa69ff16fa93ff14fa9fff14faa7ff10fabffefefac7fefefaefff06faffff0cfb0bff16fb2dff38fb45ff56fb4bff62fb4a0400f1ffff2876ff62fb82ff60fb82ff6afb82ff74fb84ff7efb84ff8afb84ff94fb84ff9efb84ffa8fb84ffb2fb84ffbcfb84ffc8fb84ffd2fb84ffdcfb86ffe8fb86fff2fb86fffcfb880004fb860010fb84001afb840024fb84002efb84003afb840044fb84004efb840058fb860064fb88006efb880078fb8a0082fb8a008efb8a0098fb8800a2fb8a00acfb8a00b6fb8c00c0fb8c00cafb8a00d6fb8a00e0fb8a00eafb8a00f4fb8c0100fb8c010afb8c0116fb8c0120fb8c012afb8e0134fb8e0140fb90014afb900154fb920160fb92016afb940174fb94017efb940188fb940192fb94019efb9601a8fb9601b2fb9601bcfb9601c6fb9401d6fb8801d6fb7e01d6fb7401d8fb6a01dafb5e01dcfb5401dcfb4801dcfb3e01dcfb3401dcfb2a01defb1e01defb1401defb0a01defb0001dcfaf601defaea01defae001defad601defacc01dcfac201dcfaba01defab001e4faaa01ecfaa601f8faa201fafa9801f8fa8e01fafa8401fafa7a01fcfa7001fafa6601fafa5c01fcfa5201fefa4801fefa4201fcfa440202fa4201fafa4001eefa4001e4fa4201dafa4001d0fa4001c6fa4001bcfa4001b2fa3e01a8fa3e019cfa3c0192fa3c0188fa3c017efa3a0174fa3a016afa380160fa300150fa3a0154fa440152fa4e0150fa580150fa60014cfa6a0142fa74013efa7c013cfa820134fa88012cfa880122fa860114fa86010afa8a0100fa8400f8fa8200f4fa8000e8fa7e00e0fa7800d8fa7200d4fa6200d2fa5c00cafa5200c8fa4a00c8fa4000c8fa3600c6fa300400fdffbbbcfa2e00aefa3200a0fa3c00a2fa4200a0fa4c00a6fa5600a8fa5e00a6fa6800a2fa70009afa740092fa78008afa7c0082fa800078fa82006efa860064fa8a005afa8a0050fa880048fa80003efa780038fa720030fa6a002afa640026fa5e001efa580018fa4e0014fa440012fa3a0014fa300018fa22001efa240014fa22000afa240002fa2e0000fa3a0000fa440000fa4e0000fa580000fa620000fa6c0000fa780000fa820000fa8c0000fa960000faa00000faac0000fab6fffefac0fffefacafffefad4fffefae0fffefaea0000faf4fffefafcfffafb02fff6fb08ffecfb0cffe4fb10ffdafb10ffd0fb10ffc6fb0effbafb0effb4fb0effaafb0cffa0fb06ff98fb00ff92faf8ff8cfaeeff8cfae4ff8efadaff92fad0ff92fac6ff94fabcff94fab2ff94faa6ff94fa9cff96fa92ff96fa88ff96fa7cff96fa72ff94fa68ff94fa5cff94fa54ff9afa48ff9cfa3eff9afa34ff9afa2aff9afa1cff9afa1cff92fa26ff92fa30ff92fa3cff90fa46ff90fa50ff90fa5aff8efa66ff8efa70ff8efa7aff8efa84ff8cfa90ff8cfa9aff8cfaa4ff8afaaeff88fab8ff88fac4ff88faceff88fad8ff88fae4ff88faeeff88faf6ff84fafeff80fb04ff78fb08ff6efb0aff600400914cff62fb58ff5efb5a0400136004001162080011581c009a62fb52ff6afb50ff6e04002301c604009fc8fb5201ccfb5601d2040016bf4401cafb3a01ccfb3801d004000b23ff780400f31a76fb36ff72fb34ff70fb30ff6efb2cff6efb28ff6efb26ff6efb22ff72fb20ff74fb20ff78fb2001c60400f316cafb1e01cefb1a01d0fb1801d2fb1401d2fb1001d2fb0c01d0fb0a01ccfb0801c6fb08000e04009f0cfb060008fb0400000400014ffaf000040400032301c60400f116cafaee01cefaea01d0fae801d2fae401d2fae001d2fadc01d0fada01ccfad801c6fad8000e04003fd200060400027fc40008fac000040400032301c60400f316cafabe01cefaba01d0fab801d2fab401d2fab001d2faac01d0faaa01ccfaa801c6faa800180400ff1a16faa60012faa4000efaa0000cfa9c000cfa9a000cfa96000efa920010fa900014fa900018fa90003604000e3978001e04003f76000804000af518770008fa990022faab0032faad0036faaf003cfaad0042faa70048fa93005cfa92005cfa90005e04007194010afa94012c04003790013004001fee0400061fa4040010ff089801e0fa9201dcfa8801defa8201e2fa7e01e8fa7801ee04001413580400df56fa760152fa70014efa6a01440400147f54fa660158fa6004000213e40400ff1ae8fa5e01ecfa5a01eefa5801f0fa5401f0fa5001eefa4c01ecfa4a01eafa4801e4fa480162fa42016004000aff32430160fa6d0174fa730176fa770174fa7f0170fa9b0152faad013efab10124fab50100faa500dafa9f00c0fa9700b8fa9100b8fa8b00b8fa7f00befa7900c2fa7804000a13ae0400f102acfa7600a8fa7400a4fa7000a2fa6c00a2f005ff086400a4fa6200a6fa6000aafa6000aefa6000b8fa6400ba040002f1126500bafa8f00b0fab500aafadd00b0fb0500b8fb2f00b8fb5700b6fb6900b4fb6804001eb804002f01d004001723ff780400ff1674fb6aff72fb6eff6efb70ff6efb74ff6efb78ff6efb7cff70fb7eff72fb80ff78fb8401d204000ef19e8501d2fb6b01b4fb4d019efb470190fb43017cfb410154fb3b012cfb370104fb3700dcfb3100b2fb2f008afb2f0062fb2d003afb2b0010fb29ffeafb2bffc0fb2dff98fb2bff70fb27ff48fb29ff20fb29fef8fb27fed0fb21fea8fb1ffe9cfb21fe96fb2dfe7cfb2dfe54fb2dfe2cfb2bfe1efb23fe12fb05fdf8faebfdd8facffdbefab7fda8fa8ffd9efa7dfd94fa6bfd82fa5ffd6cfa5bfd4cfa5dfd22fa5dfd0cfa6bfce6fa6ffcd4fa6e04001fc8040006ff2e12fcc8fa0cfccafa0efcc0fa0efcb6fa0cfcacfa08fca4fa02fc9af9fafc94f9f0fc8ef9e6fc8af9defc84f9d4fc80f9cafc7cf9c0fc7af9b6fc7cf9b204000433b0fc520400ffff2b4ef9aefc4af9aafc46f9a6fc44f99efc3ef9a2fc3cf9acfc3cf9b2fc3af9bcfc3ef9c6fc40f9d0fc40f9dafc3cf9e2fc36f9eafc2ef9f0fc26f9f4fc1ef9f6fc14f9f8fc0af9f8fbfef9f4fbf4f9f0fbeaf9f4fbe0f9f2fbd6f9f0fbccf9f4fbcaf9fefbccfa08fbcefa12fbcefa1efbcefa28fbccfa32fbccfa3cfbccfa46fbc8fa50fbc8fa5afbc8fa68fbcafa70fbd0fa7afbd4fa84fbd6fa8efbd6fa98fbd4faa2fbd2faacfbd2faa8fbdcfaa8fbe6faa6fbeefa9afbf0fa90fbeefa86fbecfa7cfbf0fa74fbf4fa6efbfcfa68fc04fa64fc0efa5cfc14fa54fc1afa4cfc22fa4afc2cfa44fc3afa3efc40fa3afc48fa38fc52fa36fc5cfa3cfc64fa42fc6cfa4afc72fa54fc78fa5cfc7afa68fc7afa68fc7efa60fc84fa5afc8cfa58fc94fa5afc9efa5efca8fa64fcb0fa6cfcb6fa6cfcb6fa6cfcb60c0002fb0460fcc4fa58fcc6fa50fcc4fa4afcc4fa48fcbc0400198004003f30fc6804001013ae0400f316b2fa2efcb6fa2afcb8fa28fcbafa22fcbafa1efcbafa1cfcb8fa1afcb4fa18fcaefa18fbdc04005fdafa10fbd204000a3102fbe0040018000400f103fc80fa00fc82fa00fc86f9fefc88f9fafc8c64020068020f0400017fecfc7cf9e8fc76040000134e04009f4cf9e6fc48f9e8fc4204000631d2fc4e04001dd0040013620400ff1666f9cefc6af9cafc6cf9c8fc6ef9c4fc6ef9c0fc6ef9bcfc6cf9bafc6af9b8fc62f9bcfc56040002fc06bdfc56f9e3fc5cfa0bfc56fa23fc56fa31fc4efa300400ff1ffbe2fa30fbe0fa30fbdcfa32fbdafa36fbd6fa3afbd6fa3efbd6fa42fbd6fa44fbd8fa46fbdcfa48fbe2fa48fc1404000e3b60fbfc04001fd40400023f66fbd204000af5ff7b67fbd2fa4ffbf0fa3dfc06fa2ffc24fa19fc3efa15fc4afa19fc72fa1dfc84fa31fca6fa45fccafa55fceafa5bfd12fa5dfd3afa5dfd62fa63fd74fa6dfd84fa8dfd9afaabfda0fad1fdacfadbfdaefb03fdacfb2dfdaafb55fda8fb7dfdaafba5fda8fbb3fda4fbd1fd8cfbebfd6cfc09fd52fc25fd34fc2ffd22fc37fd06fc39fcdefc43fcb4fc4bfcb2fc55fccafc3dfce8fc45fcc0fc47fca8fc3bfcb4fc2ffcbafc23fcbcfc15fcbafc09fcb4fbf1fcb2fbf9fcb4fbe5fcb4fbdbfcaefbd1fca6fbcbfc9afbc9fc8cfbc9fc80fbd3fc70fbcdfc74fbdbfc60fbe9fc5afbf7fc56fc03fc58fc0ffc5efc1bfc68fc19fc62fc41fc62fc41fc5afc43fc46fc45fc4efc2dfc4cfc25fc46fc1bfc3cfc1ffc42fc2dfc30fc31fc26fc2dfc3afc23fc38fc19fc34fc07fc42fbfbfc46fbeffc44fbe5fc40fbdbfc3afbd3fc30fbd1fc24fbd1fc16fbd3fc0afbdbfc00fbe5fbf8fbf5fbf0fbfffbe8fc09fbe0fc17fbdafc25fbdafc31fbdefc35fbdefc3bfbcefc4ffbdafc59fbe4fc4dfc00fc4dfbfefc4dfc00fc4b040011020400134910007f4afc00fc44fbf8040006f1aa48fbf8fc4cfbf6fc4efbf2fc50fbf0fc50fbecfc50fbe8fc4efbe4fc4cfbe2fc4afbe0fc44fbe0fc40fbe4fc36fbdefc2cfbdafc22fbd6fc18fbd8fc10fbdcfc08fbe4fc02fbecfbfcfbf2fbf2fbf4fbe8fbf6fbe0fbfafbd8fc02fbd2fc0afbd0fc16fbd0fc1efbd0fc2afbd4fc32fbdafc3afbe2fc42fbeafc48fbf4fc4afbfefc4cfc0afc4afc12fc46fc1afc40fc20fc36fc22fc2cfc2cfc2afc32fc26fc3cfc26fc3efc30fc40fc3afc46fc44fc4cfc4cfc54fc52fc5c0400000600ff6a60fc48fc62fc40fc66fc38fc6efc34fc72fc2cfc6cfc20fc6efc18fc66fc10fc60fc06fc5cfbfcfc5afbf2fc5cfbe8fc5efbe0fc64fbd8fc6cfbd2fc74fbcafc7afbc6fc84fbc6fc8cfbc6fc96fbcafc9efbd2fca6fbdafcacfbe4fcb0fbeefcb0fbf8fcb2fc06fcb0fc0efcb6fc16fcbafc20fcbcfc2afcb804000eff222bfcb8fc39fcc0fc33fcc4fc27fcd2fc21fcd6fc1bfcd4fc11fcd4fc01fcc8fbe3fcacfbcdfc92fbbbfc70fbbafc70fbb80400081fcc0400103fb6fc8a040016ff12b7fc8afbd5fc70fbddfc66fbe1fc5afbe1fc48fbddfc38fbd7fc2efbb9fc10fbb804000c1bc204003fdafbf804000e1f8a0400083f8cfc12040016b190fbf4fb8efbeafb88fbe204003f86fbe00400067ffefbe0fc00fbda040016f1ffff8801fbdafbe7fbe4fbdffbeafbd7fbf2fbc7fc16fbc5fc1afbc7fc20fbc9fc26fbe1fc46fbe5fc52fbe5fc5afbcbfc6cfbc9fc72fbc9fc7cfbcdfc96fbd7fca8fbe9fcbafc0dfccefc21fcdcfc2bfceafc31fcf8fc37fd20fc3bfd4afc3bfd72fc3dfd84fc47fd9cfc61fdbcfc77fdccfc8bfdd4fca1fdd4fcbffdc8fcc3fddcfcc7fde0fcd1fde2fcfbfde8fd23fdf0fd49fdfafd71fe02fd99fe0cfdc1fe16fde7fe1efe11fe24fe25fe20fe2dfe1cfe47fe02fe4ffdfafe55fddcfe55fdd6fe53fdcefe4bfdc6fe49fdc8fe48fdc8fe48fdbefe46fdb4fe46fdaafe48fda0fe48fd94fe48fd8afe48fd80fe48fd76fe48fd6cfe48fd60fe4afd56fe4afd4cfe4afd42fe48fd38fe4cfd30fe56fd32fe60fd32fe6afd2efe70fd28fe7afd28fe84fd24fe8cfd20fe96fd1afe9cfd12fea0fd08fea2fcfefea4fcf4fea4fce8fea4fcdefea4fcd4fea2fccafea2fcc0fe9efcb6fe98fcaefe8efcaafe88fca6fe8cfc98fe90fc90fe96fc86fe9afc7efe9cfc74fe9afc6afe9afc5efe96fc56fe92fc4afe8efc40fe88fc38fe80fc32fe78fc2cfe70fc28fe66fc24fe5cfc24fe54fc22fe54fc1cfe60fc1efe6afc1cfe74fc1cfe7efc1efe88fc1efe92fc1efe9afc1cfea4fc1efeaefc20feb8fc22fec2fc24feccfc24fed6fc26fee4fc28feeafc30fef0fc38fefafc42fefafc4cfefcfc56ff00fc60ff04fc6aff0afc72ff10fc76ff12fc84ff10fc8eff0afc96ff08fca0ff08fcaaff0afcb4ff14fcbeff16fcc8ff1cfcccff1afcd6ff18fce0ff18fceaff16fcf4ff16fcfeff16fd08ff18fd14ff14fd1eff10fd28ff0cfd30ff08fd3aff06fd44ff08fd50ff0afd5aff0cfd64ff10fd6eff16fd74ff1efd7cff26fd82ff2efd88ff38fd8cff42fd8eff4afd90ff4afd9aff42fd96ff3efd8eff3efd90ff4a1800559cff40fd9404009128fd86ff00fd7efef80400ff5e7cfefcfd82ff02fd90fef8fd92fef0fd96fee8fd9efee2fda6fee0fdaafedafdb2fed4fdbafed0fdc2feccfdccfeccfdd6feccfde2fec2fde2feb8fde4feaefde4fea2fde4fe98fde2fe8efde4fe84fde2fe7afde8fe70fde8fe6afdecfe62fdf4fe5cfdfafe5afe04fe58fe08040016f10450fdfcfe52fdf6fe54fdeefe5efde8fe66fde204003b68fdde04001f3e0400063f4efd40040012ff0860fd46fe66fd46fe6cfd44fe76fd40fe7efd36fe80fd3404001413cc0400ff1ecefe82fdd2fe84fdd4fe88fdd6fe8cfdd6fe8efdd6fe92fdd6fe96fdd2fe98fdd0fe98fdccfe98fd22fe94fd260400027facfd1cfeb0fd160400101fd604001723fc3004005f2efeaafc2804000a319afc3a0400179804003f9afc46040006b1b0fc44febcfc3cfec6fc3204003fc8fc3004000a3fcafdcc040016f304c4fdbafec6fdb2fec8fdaefecefda8fee0fd980400159a040011dc9e5b0f040019ff024efee0fc54fee2fc5afeeafc60fef8fc620400036ffd70fefcfd74040002ff0efdfd74fedffd74febdfd8afeadfd92fe85fd96fe5dfd9afe51fd9afe500400003f54fdb004000af11e55fdb0fe6ffd92fe89fd74fe9ffd52feaffd2efec1fd08fecbfcecfecbfce4febffcc2feb5fcb8fe99fca2fe980400179e04001f9404000af1ff0d99fc94feb7fcaefec5fcbafec9fcc0fec7fcccfec5fcf6fec1fcfefeb7fd18feaffd36fea9fd42fe89fd5cfe73fd7afe6dfda2fe6bfdcafe59fdf0fe55fdfafe4ffe02fe2dfe20fe1ffe28fe17fe28fe0ffe26fdebfe14fdc5fe04fd9dfdfcfd75fdeefd51fddcfd2dfdccfd07fdcafcdffdd4fcbbfde4fc97fdf6fc71fdfafc4bfdf6fc41fdfcfc33fe04fc2ffe0efc25fe26fc1dfe4efc1bfe5afc21fe82fc1ffeaafc1ffed4fc1ffefcfc1fff24fc1fff4efc1fff76fc1fff9efc1fffc6fc1ffff0fc1f0016fc210040fc250068fc290090fc2900bafc2900e2fc2d010afc330138fc35014efc3b0160fc530180fc6d01a0fc7f01bafc9701c8fca701ccfcc701d2fcc901e2fccd01ecfccb01e8fcd301e6fcdb01ecfcd701f20c00f154d301eefccf01defccf01e8fcc901dcfcc301cefca701b2fc97019efc8f019afc87019afc7f019afc7701a0fc7301a6fc6f01acfc6f01b4fc7101bafc7301c0fc7901c2fc8501c8fc9501c8fcbd01cefcc701d2fcc901eefcc501eafcd701e2fcd301e4040053cf01e4fcd10400001000040c00f0ff75d001e5fcac01d1fc9601bdfc9001bbfc6801b5fc4c01abfc4601a5fc320181fc24015bfc140135fc12011ffc1200f7fc1400ebfc1a00d1fc1800c1fc10009bfc080073fc02004bfc020021fc06fffbfc0affd3fc0cffa9fc0cff81fc08ff59fc04ff31fc08ff09fc10fee1fc0efec7fbfcfea1fbfcfe97fc02fe6ffc0afe47fc0afe37fc10fe31fc2afe13fc32fdfbfc38fdf5fc42fdf3fc6cfdf5fc80fdf7fc8afdfdfca8fe19fcc4fe37fce2fe51fcfefe71fd1cfe8bfd28fe93fd34fe97fd5cfe97fd84fe99fdacfe9dfdd4fe9ffdfcfea3fe26fea5fe4efea9fe76feabfe9efeadfec6feb5fed0feb7fedafec1fef2fee1ff12fef9ff2cff19ff4aff35ff52ff3bff7aff45ff8eff53ff98ff53ff7cff55ff8eff69ff98ff69ff8aff67ff8aff6bff8cff73ff98ff79ff8aff7dff8aff83ffa2ff7bff90ff7dffb8ff8bffbcff8dffc8ff97ffccff93ffe2ff71fff8ff5b000eff3b001eff150022ff030020fedb001efecf0010fea9000cfea50006fea10004fe790000fe590001fe580001fe58",mockRasterMapData:"02000101013800e40490058d000507380559000121631dc91900010064efefefefe9ef01002fe9e80100ff166417171717111701002f11100100ff0f411717171101000434010410000f0200350f8201c30664020202000c10000f02002307460001bb020f8401190f6801940f1901230f0200170238011f270100082321211d000109003621212001001f21010041065f000f020001087f000f0200090f0201170f0200230f38011803020007ae002f213701003f2f313001000512070100190131070f02000b03140108e6040f0200340f38010f0c02000f38016d1f072b010b0f0200012f01012e01340602000f380197026e020f3801221f0038016b02e9040f7002650134010f3801a20202000f3801640234010f3801a609d0060f1806590234014f0707efef2c0d2016e999040f02003104900912114a020f0200110f3801630435014f070701015007190402000fe0043a0335010f3801271f2170025056efefefe8e837010f88081c0402000f38013b0134010f3801181b2170020f3701410cc0094fefefefe93801ac02300c0717060ff50a3f0d380101021201670205020007a8030f7e02160f70026b1b27700201e8000f02003d0a70020f38010003e4044f070707015e071631010101fc0a0f890f170f3f060801f30a0102000f1806240f33013d0102000938010f370102023a010108000fce09230f0200100fa102090f38012e0fe104420a380141070707ef1f010f0200060f0501100f0200200f3801ab0cdb040f02000008cf09017c070f0200330ff109090f70028f0f6b020c380707072b0118ef0d000f02002c0f38010a0539010fe004240fa8034e0f38010e082b01010c050f2f012c0502000f3801090281170fc009180c50070f38014307e1040f3801190137010f840d210f0200020f38010a01ad180f38017d07f90a113101000190030f020003076f020f37013b0f38014b08680d71303737373731314b080f02002b012d010f0200020c3d010d37010f201d370f38012c027213042c0c02a80307541806210101dc16093701090d000502000f1600030f0200120d38010d37010f38018102360101a00e0fb6090101380119306f020f2301000346020f2701120d02000c38010e37010f3a01380f70022c0e02000f3801030237010a380104260108020001bf040a26000f0200160b38010f3701020f18068a0f7002140a3a010110000204050f3801320f3701030f3801a3071e010f0200080480020f2300080f0200020970020f37014c0f5007420f7002011f313701160268080f7602200c380103780901d7040302000313000f0200300fe004540244020f2702020d02003f3130313601200a38010692030332010780020f0200320f3801520207010f3801140f350123012d0505c0090537010231010202000f3001320402000f3801521f37ea05240f02001b0638010f37014f0fe0042d04f80a0123170102000f8808030f0200510838010217020268020202000212000f0200360f7002340f38017a0425010231010202000f3101360302000f3801340602000f70026f04250102310102020003ee000f0200370f3801bf043a070231010102000f2f01370502000f3801be04290101080002020005ed000f0200380f3801bd022a010902000f2e01380602000f3801ba092f0104020006ec000f0200390f3801ce0f2d01390702000f3801cd07eb000f02003a0f38015508320c080c000f0200380fa803010f2c013a0802000f3801540f9c0e140f02002a0e380108e9000f02003c0f3801540f0200510d38010f2b013c0902000f3801c809e8000f02003d0f3801c70f2a013d0a02000f3801c60ae7000f02003e0f3801ba07e2040f29013e0b02000f3801ba04230c0fb61a360f0200070f3801c20fef00070f0200360f3801c10f1d01360f0200080f38017d054c0c0f2a0b1f04e0040fee00080f0200370f38017b02f91a010200070b000f0200141231282d0f1c01370f0200090f38016b055e020402000711000f71021e0750280f02004f12311e280f02000701ac2a0fa82a1b0fb01f010f0200500f3801d50f8a031f0f02000b0f3801582f31317002680f3801a90fa003070402000fa8033c07c10405b62a0814000f0200280f700259041e010f0200070f38013b0aed050331010307000c1e000602000521000f02000a0f3801c90f02001a0f2f01130502000f3801811f115207160fb01f680f7e08330273260f02000c0fa0030704020001a8031f1060380406df200502000f3801af04fa000f02002b033801010e030c0a030f4903011131b201012f000fc125550302000c9e000f0200240f62080e0f0200130f38012c0f5b01010f0200440f38017f31111111ec000df5030116000a0200193187020f3701580fe004360f5002130f02000d1511a6030c02000f3701020f3801ff110f0200030f38011b0190020105000fc009090f0200130fa8037f0fb800130202000f38011b01fa2b0f38010406d0020521000f02000a0f3801da0a02000a2101040e000408000f02000c0f3801e80f02002a0f3801ff850f33440a0e02000150070287080f0200120ff80a190f8103140f0200140f70024a2f111138012105ba0029efe9010005180006020009380106db050502000f130000060200091d000f56011d0f38014b0dbb560774560f02000101700205d11d0a323c16e9f2000502000950070908010202000f13000006020007cb14070b000f0200140f3801300151400f0601010e38010f7f020d05380102c65b096a3d0f380100193138010f02001e0556010509000f0200170f3801350fc410030c70020f380113099e030602000fd500000f9736260f02002e0f38012331171717034a01b742056b0202960f0a02000a99030f3801120dd4000f7c041d0f0200510f380122613117171710173d0108fa050f7402020556010102000a47010d020001a8030ff700510f02002e0f38012101ef000138010f02003d0f3801810ffd04030f380120026c130f3a020c0f0200230f3801803f31efef9d02010f3801201f301401230f0200110f3801810608140840010f3801ff10050217099f060f38012103e2040fb809070f0200260f700233081a020fd20a0a090a010f02000316312101092e000617000f0200130246070419010c2f070f02002d0192070fc100030f02001907e2000f3801090560010509000e02000720010756000918000f02001002180103a20901b44d0212000f0200361fef160c000f020069086f020f38012e0602000f38013e1f172501690f0200000f6f020507f7040f0200100282080702000f3801d80bcc030751010f02000f0f3801de08a7030a8e020f38011a0cba0908650d0f0200340a9e000f02006d071e0109de04091a000f02001a0127010cb70f0f0200300f2a016d090200076f020f70022b0d02000f2d23110f02001a09b8000f02006d076f020f38013c0f7d2a110f02001a0f2b016d07020018316f020f38013d0f72023d07b8000f02006d096e020b4f070f88081b0f0200000f37013c0fc009790938010cc501081d000f0200210d9b080f02002c0ca0000f020068081b010b4e070a1d000f0200210f3801ffff010f1606090f7002ff0a0838010c16060f3801ff0a0788080dde040f3801ff0b061d010f9d06000835060f020021011806016f14010200094e070fbb19210fa300000f020067031d010f6f02000fc0092e0a020006c4180f02002a0f2a01310fed00010f02001d0f3801560f0200330ff300010f88011f0f25011a0f5f000402d0000f1d0002021b000f02007a0f3801020fa2001d0f4500010f0200070fcd421e09f3230f0200740f6418010333030f0200170f38011b0f5f001e0f02006c0f0303022b311f01005f191919191801001c1f195d02070f0200000f38019e042201121909000307000a020057191918181901001a180f000f0200041f0f1f01000b0200152f01001529010015280a000f02000a1f2801006b1a2922010f02000347191818185101010f001f0f01000f0b25010f020000053701060200832928292f2f2f2f290400040c000c02001f2937016b0f3801801f293801b82f1919700256026b020102000141010778020802000f700292561fefe9e8e9c3030fa803440d2701027a0201fc040833010102000fb8081e0f02003c070f010f02000954191819efef21000f38014401d4040802000430010408000802000f3801f90e02000483020e02000fa803930f7002530e02000f3801ff17012901010500010200060a000c02000f7002fc08b7090ff204000602000f3801971519fa0a0f1806280b46281f2f01000b031806020200013e0c020b000f3801760513010f020005012b01041d00010d000f2f0c0f0f680d010f3801060713010602001f294a07010202000f7002730f3801560b02000204010f0200060f3701070f3801c9180901000b31010302000f3201060f02000e0f3801730f71020e019b030fa8031c2609080100130929010b02000d1f010f4107070502000223000f3801740f39010d0f3801780202000f3801760f72020b0f3801550f0200160f3801750f39010c0f3801ff080f02000b0f3801ff8d02f4050f0200110fa803760f02000b024318032400017d020ff80a0f0f50070e4f3131312f0100250f380178071a010f02000b0f38011706c2090b81080336230f3801a801f70d0202003f2828296f18170f700212110953430127010d020001047a0f6f02250f300c6e0b02000f38013e0d2f010502000f3801160bfe450302000ff8163c0f02002c0f3717120fa803180fe33d020202000f3801180fd5002c0f0200500f38013d0223010f0200020f3801ffffff7d0f8308030102000fa803ff0202b8090247120f4312040151270fc009120f1806d80f2b0c0e0f3801ff02066b024f08080808a803ee05a1130200270f300c0a0233010136010fa703050fa803df0f38011a0193030f0200020f1806ff020572020f6e02061137ee051fe9a00e11012a000f02008c0f300c3601a6030f3801ff1b1109fa040f3801ff250337010fe00408017e030fa803fa01f50a0339010fe004070f5007af03d1120202000fea150b0202000f48120f05f80a0f38011c0f601802019a020f0200800f0c06120802000f3801100439010f38011c0f0200020f3801a80a7a180f38010f140f330c0f3801c2029a030f9c03110ab1190f38011004ab030f38011e0faa03000f70027e0fa1031e0302000f3801490f0200000f3801ffda0aa1030302000f70025b0fc4366f0c02000ff51b120f0200000f38010f0fc0091e02c11d04020009ad030f9a1f6d0e02000f38014803f70a0f300c080bf80a081e010a1c06081a000f0200730f38011b0580130f7002100102000fd80f0b0f3801090972020f3801ad0602000f3801141f09700210055a230a1e010839010a1a000f0200710f70021b0602000f380137069a190b1e0107ab030b1a000f0200700f38012a2119198d030f0200080f70021007e03f0a684006e91a0f4e077e0f38011406d7040502000170020f3801070281130f3801140f0200040738010f6102700b02000f700218093e010138010f6902080302000f7002090c2c690c02000699130f7002a502020009000b0f3801300350070f0200060670020f7102800f7002180902000f3801ff6d1631e04d0d02000f7002c002bc460f4e070e0fe0040b040c750d31010302000f3801c101f0470f38012f01020004f79c0c02000618060fe0047f04460f07020009c7040bb735041b060229490f8708070502000f50070902020001362d0f3b010225e9e93a010ff80a7f0d0200063a0102b030049a2f020a000402000170020f8908080fc009140102000237010f3b01010539010f380190122865020c020001bd0902d7040602000446010f0200080f7f4a0803e004123734010302000aad0304c6170fe94d810c02000c32010a02000635010f0200110138010d0200291919d0300332010502000c91000f0200930a27010f0200020d09010f02001d13ef380102070004310114e809000f88466d0f0200210f2901020e02000f2a011d0a0200043801023901042f0118e814a30fbc00210f0200680e2201070200044e070f38012d17ef380107020002f7000611000210000f0200920114010f02000508791e0289080f0200240638012437302701081f010414000a16000f0200880f3201050202000153070402000f3901290838010339010b15010f3a019b0414010f0200110f38012801150101ba0922373771940f0b06010116000d51010f0200810f2f01110502000f380133018a0e0222010e12010118000e17000f02007d0513010f0200120f3801330739010f0f017d0f0200150f2e010d09de040f52072a01480206a80303ab030fa800150f02007c010c010f0200190f4c07240f3801023130303140010f0200a00f3301190102000103010f0200230950070f0200ab010b010f02000408b8090502000f32012302020001a90302063d0f3601ab0f38010b0f0200020f18062d03e2040f3801cf0b18060f3801330fd704a60302000efe5e0d02000f3801ff0306135f0f02000607d50f013d1702ab040f02002102df0401457a0f7002ad0f3801100b02000fa8032e02cb150f8e097c0f02001e02c6000102000b21010f0200040f380127036f020fa3001e0f02008c0f3901140f38012a0f3218940f02001b0f9a2f130f38012a0f91001b0f0200930f9803040c02000f3801ff601f187301270f0200890c59020f0200040ffd00c30f02002905e10a1d1833010712000f3801ff00052e01070b000302000412002f191930357e0f02006e064f070426010702000371020cf0200f0200f105a7030f38010202390102740d0f2e01f1060200083801022601080200084c010634000f0200f10f3801ff460284021118c8030f0200f90696030424010902000321000f3201f9020200052601010f00050e00050200021400011d000f0200fa0721010f7102070ff60aff0002bf04141fbf04020b0009020013187e3a0f0200fb062301011801060f000602000119000f0200fd0c1f010610000502000f3301fd010200051e01111f0f0006b70307c930021a000f0200fb012101010200021801010b0001020007b71f021b000f0200fa0123010517060871021119177b011d000119000f0200fc01190105a70306100003321d011c0003c4030f0200f80217010f70020103c3310a1d000f0200f60217010f3801020224010a1d000f0200f6021701083801025207062c81011e000f3001f60402000116010102000412000338010a0f00050e000f0200f601340109f80501120007910e098d020f0200f40124010102000711010d7f240745010f0200f40133010102000711010d38010f0200ff00013301010200071c010f3801ff110205060bc2040f3801ff260f7113ff040a02000d6d02036b0d0f0b06ff000a02000f3801ff2c0917060f0200ff130270020f3801ffff592218189b140f9d03ff130f0200ffff07f1000107000000000001000101000002010d000402007406726f6f6d20310f000102009338004e0044004e004304009142004d0042004d00410400734c0041004b00400400933f004b003f004a003e0400713d0049003e00480400133d0400f10e3c0048003c0049003b004e003b004f003a004f003300500033005200360400b1540038005400380057003c0400d559003e0059003f0058003f00570400713e0056003f00550400b33e0055003e0054003e005304009152003f0052003f00510400f100400051004000500041005100420052040031430051d800324400010f011f020f010411320701040200f1022d001f0011001e0010000e0010000efff90400b30ffff8000ffff8000efff7040051f5000efff40400531afff4001b0400951efff4001efffa001c040071fb001cfffb001d040091fd001dfffd001cfffe0400f1041bfffe001affff001bffff001cffff001d00000400151c0400f50001001b0001001a0001001b0002001c0400d103001e0003001e000a001f000bb0001202e3001f03e300041433de000102007171ffcd0046ffce04007345ffce0045ffcb0400f102ca0045ffca0044ffcc0044ffcd0043ffd00400f10044ffd10044ffd10043ffd1003fffd30400f30a3effd4003effd5003fffe9003fffea003effea002affe9002904007127ffe80027ffd704009121ffe10021ffe10022040091e20022ffe20023ffe304005122ffe3001f040015da04003520ffd604009121ffd40021ffd4001f040091d2001fffd1001fffd00400351effcf0400b520ffce0020ffce001fffcd0400711dffcd001dffce0400351cffd00400911bffcd001bffcc001c040055cb001cffca0400b11affce001affcf0019ffd10400131a0400711cffd2001dffd304007119ffd30019ffd40400f30818ffd40018ffd30017ffd30014ffd60014ffd70014ffda0400f312fa0014fffa001bfff9001cfff9003bfff8003bfff7003cfff70040fff70041fff80400f506f90041fff90045fff50045fff40044fff40045ffd30400ff0f46ffd40046ffd00046ffcf0045ffcf0046ffcd0046000300000001000104f301041134eb0104020051b6fffd00110400d1fb0011fffa0010fffa0011fff704007110fff60011fff30400f10606fff70006fff80007fff90007fffa0006fffafffe0400d1f4fffefff4fffdfff4fffcfff10400b5f5fff9fff5fff9fff4fffa040033f3fff9040073f4ffeefff4ffed0400f102ecfff4ffebfff4ffeafff9ffeafffaffe9040033f9ffe80400f31ae7fff9ffe7fffaffe7fff9ffe6fff9ffe4fff9ffe3fff9ffe2fff8ffe1fff8ffdffff9ffdffff8ffde040051ddfff8ffdc0400f10af7ffdcfff7ffdbfff8ffdafff8ffd7fff9ffd7fffaffd7fffb040091d8fffbffd8fffaffd9040051fbffdafffc040035dcfffb0400f302ddfffcffddfffcffdffffdffe0fffdffe30400d3e7fffeffe7ffffffe6ffffffe5040093e30000ffe30000ffe10400f104e00000ffdf0000ffde0000ffdd0000ffdc0001040013da0400d5d90002ffd90002ffdd0003ffde04007104ffdf0004ffe00400b105ffe00005ffe10006ffe00400f30007ffe00007ffdf0007ffde0008ffdd0400b1dc000affdc000affdf0009040051e00008ffe104005509ffe2000a040073e3000affe4000b0400d30cffe4000cffe5000bffe5000a0400d109ffe50009ffe6000affe7000b040013ed0400f304ee000bffef000bfff0000afff1000afff200090400f10e07fff20007fff30006fff30005fff30004fff30003fff40004fff400060400b1f50007fff50007fff4000a0400f100f5000afff6000bfff6000b0000000a0400b101000b0001000b00100006040071110005001100050c0051100006000f0400d107000f0007000e0007000700080600f2080600050006000400070004000e0003000f000300110004d00222000407031f05070304143502030102009118fffd0044fffd0028040051fe002800070400d3270010002700100041001100420400b3440011004400100044000f0400130e0400130b0400d10a0043000a004300090044000958003244000596031f067b070411368700040200f102340030001100300007003100060031fffa04009132fff90032fff900350400b1fb0035fffb003bfffb003c0400f108fa003cfffa003dfff9003dfff5003efff5003ffff40042040037f7004257043242fff90400f105000500430006004a0006004b0005004b0004004c04007105004c0005004d04001910ed005345000f0045f100154304003310003e0400713d000f003d00100400513500100035c80032110006ff001f07ff00041437fa00010200f102b600180044001800400017003f0017003e0400d118003e0018003b0017003a0013040075270014002600130400932300140022001300210400b120001200200011002000100400d1270007002700070026000600250400f10205002500000025ffff0026ffff0027fffd04007526fffd0025fffc0400b324fffc0022fffc002200000400130104001303040015070400712000070020fffc0400911ffffc001dfffc001c040002f107711bfffb0014fffc04003513fffd0400f30a12000500120005001300060013001e0013001f0012001f00110400b50b0023000b0023000a002404003509002504001107d2001324040095230006002300050021040033040021ae007123000300230001ca00912100000021fff4002b040075f3002bffed002c040093eb002effeb002effec040013ef040053f0002efff1040091f2002dfff2002efff30400512ffff200300400d3f40030fff4002ffff40030fff50400b5f6002ffff6002ffff5002e0400f100f7002dfff7002cfff7002dfff8002e0400b1ff002dffff002d0000002e04005106002e00070f0302170311115702913500130035001300400400d314003f0014003e0015003f0016040011174202714000190040001a04007341001b0041001c0400d11d0042001d0042001e0043001f0400d144001f0044001e0047001e00480400531c0047001b0400931a004700180046001704003315004504009144001400440013004d0400933a0042003a0041003b0400903c0041004400180044",mockRasterPathData:"0000000003000003a5000000000300002e0300002c0300002e0300002e0300002e0300002e0300002e0300002e0302002e0302002e02da002c02d8002c02da002e02e8002a02e4fffc02e4fffc02e2fffa02e2fff602defff202dafff002d4ffee02c2fff002baffee02b8ffe402b8ffda02b6ffce02b6ffc402b8ffba02b8ffae02b8ffa402baff9802bcff9002beff8802c4ff8002c8ff7602caff6c02caff6402c4ff5a02beff5202bcff4a02baff4402baff3802bcff2e02bcff2402bcff1a02caff1802d4ff1802e0ff1a02eaff1a02ecff1802ecff1802ecff1802ecff1802ecff1802ec005e02ec005e02ec005e02ec005e02ec005e02ec005e02ec005e02ec005e02ec005e02ed005e02f7004e02ff003002ff002802ef000202e7fff002ddffea02d9ffe802d7ffe802d7ffe802d6ffe802ccffe802ccffe802ccffe802ccffe802ccffe802beffd002beffd002beffd002beffd002beffd002beffd002beffd002beffd002d2ffd002d2ffd002d4ffd002d8ffce02dcffca02dcffc802deffc402dcffc002dcffbc02d8ffba02d6ffb802d2ffb802c8ffb802c8ffb802c4ffb802c2ffb602beffb402bcffb002bcffac02bcffaa02bcffa602c0ffa202c2ffa002c8ffa002dcffa002dcffa002dcffa002dcffa002dcffa002dcffa002dcffa002dcff8802dcff8802dcff8802dcff8802dcff8802dcff8802d0ff8602d0ff8602d0ff8602d0ff8602d0ff8602d0ff8602d0ff8602d0ff8602d0ff8602d0ff8602deff7e02ecff7a0304ff7a0304ff7a0306ff780306ff7a0306ff7a0306ff7a0306ff7a0306ff7a0306ff220308ff1a0312ff1a031cff1a0326ff1a0332ff180330ff220330ff2e0332ff360336ff42033cff480346ff4c034eff500354ff58035cff5e0362ff620366ff62036cff620374ff66037aff64037cff6e0382ff760384ff7c0386ff860386ff920386ff9c0384ffa60384ffb00384ffbc0384ffc60382ffd2037effdc037affe2037affee037afff8037e00000380000c03820016038200200384002a038200340382003e03840048038600500382005a038200640382006e03820078038200820382008c038400960388009c039000a4039800a803a200ac03ac00ac03b600ac03be00ac03be00ac03be00ac03be013403be013a03c0014403c2014a03c0015403c2015e03c4016803c8017003c6017a03c4018403c4017603c6017003cc017203d0017c03d4017203d6018203da017803dc017203da017c03dc018803d4019003d6019a03d601a403da01ae03de01b403de01b403de01b403de01b403de01b403de01b403de01b403de01b403de01b4031401b4031401b4031001b4030c01b2030801ae030601aa030601a60306018a0302019403020188030801800310017803120170031201660310015c030e01520306014a0306014a0306014a0306014a030600d6030600cc030800c2030a00b8030c00ae030c00a4030c009a030c0090030600860304007c0306007a0306ff7e0306ff7e0306ff7e0306ff7e0306ff7e0306ff7e031aff6e031aff6e031cff70031cff700362ff700362ff700364ff700368ff72036cff76036cff78036eff7c036cff80036aff840368ff860362ff880326ff880326ff880322ff88031eff8a031cff8e031aff90031aff94031aff98031cff9c031eff9e0326ffa00376ffa00376ffa0037affa0037cffa2037effa60380ffa80382ffac0380ffb0037effb4037cffb60376ffb8031cffb8031affb80318ffb80314ffba0312ffbe0310ffc00310ffc40310ffc80312ffcc0314ffce031cffd0036cffd0036cffd00370ffd00372ffd20374ffd60376ffd80378ffdc0376ffe00374ffe40372ffe6036cffe8031cffe8031affe80318ffe80314ffea0312ffee0310fff00310fff40310fff80312fffc0314fffe031c000003620000036200000366000003680002036a0004036c0008036e000c036c000e036a00120368001403620018031c0018031a0018031800180314001a0312001c0310002003100024031000260312002a0314002e031c0030036c0030036c0030037000300372003203760034037600380378003c037600400374004203720044036c0048031c0048031a0048031800480314004a0312004c0310005003100054031000560312005a0314005c031c0060036c0060036c0060037000600372006203740064037600680378006a0376006e0374007203720074036c0078032600780324007803220078031e007a031c007c031a0080031a0084031a0086031c008a031e008c03260090036c0090036c0090037000900372009203760094037600980378009c037600a0037400a2037200a6036c00a8032600a8032400a8032200a8031e00aa031c00ac031a00b0031a00b4031a00b8031c00ba031e00be032600c003a800c003a800c003ac00c003ae00c203b000c403b200c803b400cc03b200ce03b000d203ae00d603a800d8036200d4036200d4036200d4036200d4036200d4036200d4037200cc037000d4036a00ee036a00ec037200ee037a00ee037000e4037000da037200d0037000c6036c00bc036200b6035a00b4035000b4034600b4033e00b8033600be032e00c6032800c6031c00c6031400ca030c00ce030600d6030400de030200e8030400f0030600f8030e00fe03160102031801080322010c032c011003340114033e01180348011a03520116035c01120366010c036c0104037000fa037000fa037000fa037000fa037000fa037000fa037000fa037000fa037000fa037000fa037e00fc037e0102037801080376010603760106037601060376010603760106037601060376010603760106037601060376010603a8010603a8010603ac010603ae010403b2010203b200fe03b400fa03b200f603b000f403ae00f003a800f0039200f2039200f2039200f2039200f2039200f2039200f2039200f2039200f2039200f203aa011203b2011e03b2011e03b2011e03b2011e03b2011e03b2011e03b2011e03b2011e03b2011e0358011e0358011e0358011e0318013603180136031801360318013603180136031801360318013603180136031801360318013603a4013603a4013603a8013803aa013a03ac013c03ae014003b0014403ae014803ac014a03aa014e03a4014e0322015003220150031e0150031a015203180154031601580316015a0316015e03180162031a01640322016803a4016803a4016803a4016803a4016803a4016803a4016803a4016803a0017e03a8017403aa017803b0017c03be018203c0018a03be018c03c0018a03c0018a03c0018a03c0018e03c0018e03980198039401960394019603120196031201960312019603120196031201960312019603120196031001b0031001b0031001b0031001b0031001b0031001b0031001b0031001b0031001b0031001b0031001b0031a018a031c017e031c017e031c017e031c017e031c017e031c017e037e017c037e017c037e017c037e017c037e017c037e017c037e017c037f017c037b018a0379018e037101880375018c03670186036d018c0365018a03550184034d01840343019003370196032d01940323018e0315017c031101700313014803130122031201220312011e0312011e0312011e0312011e0312011e033a011e033a011e033a011e033a011e033a011e033a011e033a011e033a011e033a011e033a011e033b011e03270128031f012803170124030f011e030b01180305010c030b00e8030b00de032100be032f00ac033100a203310082032b0072031d00560319002c031900040317ffdc0315ffb40313ff8c0313ff620313ff580312ff580312ff580312ff580312ff580312ff580312ff580344ff580344ff580344ff580344ff580344ff580344ff580344ff580344ff580344ff580344ff580324ff400324ff400324ff400324ff400310ff400310ff400310ff400310ff400310ff400310ff400310ff400310ff280310ff280310ff280310ff280310ff280310ff280326ff280326ff280326ff280326ff280326ff280326ff280327ff280327ff500327ff780327ffa20327ffca0327fff40327001a032500440327006e03250096032500be032300c6030b00e602f1010402ed010c02e9011402ed011a02ed011a02ed011a02ec011a02ec01a402ec01a402ea01aa02e801ae02e401b202e001b402dc01b4ff9c01b4ff9c01b4ff9601b4ff9201b0ff8e01aeff8a01acff9401a6ff9801a8ffa401a6ffae01a6ffb801a6ffc201a4ffca01a0ffd00196ffd4018cffd80182ffda0178ffda016effda0168ffd8016cffd8016c000a016c000e01660018016800220168002c0168002e01660036016c004001720044017c004e018000560180005c0186005a0190006001960066019e006c01a6007601aa007601aa007601aa007601aa007601aa007601aa007601aa007601aa007601aa007601aa007601aa005a019c00560196005601960056019600560196ffde0196ffde0196ffde0196ffde0196ffde0196ffde0196ffde0196ffe001b2ffe001b2ffe001b2ffe001b2ffe001b2ffe001b2ffe001b2ffe001b2ffe001b2ffec01a4fff00198fff20192fff0018cffee0184ffe8017effe8017effe8017effe8017effe8017effe8017effe8017effe8017effe8017e00380180003801800038018000380180003801800038018000390180003b0196004301a2005b01b8006901c0008f01c800b701c800df01c6010901c8013101c6015901c8018101c601ab01c801d301c601fb01c8022301c8024b01c8026f01c4027b01be028301ba028701b2028901ac028901a6028901a2028701a2028701a2028501a2028401a2027a019e027001a0026601a0025a01a0025001a0024601a0023a01a0023001a0022601a0021e01a0020e01a6021801a2022201a4022c01a4023601a4023601a4023601a4023701a4025701c0026101c4026f01c8027f01c8028901c4029901b802a301aa02a301a602a501a002a1019a029d0192028b018402890184028701840289018402880184028c0180028c0176028c016c028a0162028801580284014e027e0146027e0146027e0146027e0146027e0146027e01470292012f029c012902ac012302d4011d02f4010b030400fb031400d7032a00b3032e00a503300091032e0083031800610312003f031400350316002f030a002f02e2003302d00033",mockRoomProperties2:{reqType:"roomPropertyQry",version:"1.0.0",num:8,sweepMopModes:["both_work","both_work","both_work","both_work","both_work","both_work","both_work","both_work"],suctions:["normal","","normal","","normal","normal","normal","normal"],cisterns:["","low","","low","low","low","low","low"],names:["room 0","room 1","room 2","room 3","room 4","room 5","room 6","room 7"],ids:[0,1,2,3,4,5,6,7],floorTypes:[-1,0,0,0,0,0,0,0],yMops:[0,0,0,0,0,0,0,0],cleanCounts:[1,1,1,1,1,1,1,1],orders:[1,2,3,4,5,6,7,8],mapId:3,success:!0,errCode:0,taskId:"1755049954595"},mockWiFiSignalPath:"000003aa020035fffc020035fffc020035fffc020035fffc020035fffc020035fffc020035fffc020035fffc020035fffc020035fffc020035fffc020035fffc020035fffc010035fffc010035fffc02002000440200320054020030008802003200ce010016010e020032016a01002401cc010022025e01fff2030401ffec037202ff40039e02ff36035e02fef4034602fef802ea01fefe026401fee4020202fea201fa01fe9601c401fe6201d002fe2a01a601fe3001a802fe2e01a802fe34019a01fe08016c02fdd0016002fdac017601fd9c015a01fd6c00f002fd3e00ac02fcd200d002fcd6013402fcf2019802fc9a019802fc88018202fc86011802fc86006a02fc86002a02fca4003402fcd8000601fcdcffd402fcbcffaa02fca4ff9002fc8aff3c02fc88feb602fcd0feb602fdb8fec002fdeafec802fdf8ff2002fe9aff3001ff0aff0201ff40fed001ffe6fed4020018fef0020008ff0202fffaff4201001aff6402002eff86020044ffb8020014ffec020000ffe6010008003002ffd4002401ffb2006a02ffb4009202ffb900a202ffa7009002ff97002e02001d004201000a005c02ffea002002ffd3002201001b004c010017007201000b007802001f005a010000008a01000200de02000200c002000400ae0100220078020004002002ff8e001602ff64007001ff9c00c001ffb000c401ffa400f601ffdc013601000600ea01000700ea010004018c01ffe8019401ffe8013a01ffff011c01000b015801ffcd018001ffef01d601000001dc01fffa026801fffc026801ffe802ac01ffe0025601ffe801ee01ffe301d801ff9b015e01ff8b005602ffe8000402ffe6ff9e01ffe8ff4c01ffcaff9e020000ffa0010002ffd4020018ffaa020010ff78010017ff9802ffd0ffb402ffb8fff001ffb8ff9602ffd3ffb002ffa0ffc202ffa0fff402ffa0fee202ff9dfed801ff88ff3201ff88000e01ff70001e01ff70fefa02ff58feec01ff58ffb402ff5a000001ff08000401ff54002402ff61ffdc02ff40ff7402ff40fed802ff5bfed802ff28fed801ff28ff6e01ff31ffd402ff10ffca01ff0efee202ff49fef801ffb8fee201ffc0ff5402ffd0ff3c01ffe8feec01ffedff3e02fff9fef201fffefeea02ffe9ff0a02ff9fffea01ffa0009c02ff80003402ff58002c01ff5800c001ff5801ec01ff58031c01ff70037801ff70024201ff70011602ff7000a402ff88011e01ff88025001ff8e02e401ff8802f201ff8803a601ffa0037a01ffa0032e01ffbe032201ffac02ce01ffa8032801ffdb031e01ffb8033801ffb8039201ffa2039802ffad03b201ff89039a01ffd0037401ffd0032e01ffe9031401ffe8034201ffe9036201ffe7030401ffe802c001ffd0026601ffd502c801ffb802c001ffb8023001ffb8014401ffa0012c01ffa0020c01ffa702c201ff4002c001ff40035601ff4002ce01ff4001a401ff3a009401ff58006c02ff1e003e02ff36009401ff28009a01ff28012a01ff28025801ff12033e01ff10027801ff10011201ff10009001fefc006002fea6005801fea0008001febe00d601feec008a02ff2300a201ff93009402ffaf009e02ffb7009802ffad008e01ffad008001ffb3007a01ff5700d801ff0400fc01fef800f401fef8018a01fee001ee01fee000cc01fece00dc02fe9000f001fec8012a01feb700d401fe8400ac01fe6a007602fe2e003801fe26008002fe5800ce01fe8100ae02fe8000f402fe84010801fe4800d802fe64012a01fe81011001fe80016601fe9801b201fe98013002feb001ca01fec801f401fec8013601fedf011a01fea9014a01fe68015001fe6d01be01fe50019401fe49012e02fe38014a02fe20017c01fe20010e01fe0800f602fe08015a01fe00008601fe04007802fdd0003802fdf6008802fdf0009002fdf0014402fdd800c402fdf2008c02fde500a002fdc000a402fdc0015802fda8014e02fda8002001fda8fef002fd90fec602fd90ff2a02fd90005802fd98011e02fd7800f402fd78006a02fd78ff3402fd71fec402fd60ff2802fd60005202fd4800a402fd48005402fd39006e02fd3700a002fd1800ae02fd14001802fd18ffb202fd1efec402fd30ff5802fd30005401fd48001c02fd48fef202fd41fec402fd00fec602fd00ff9602fd0600b402fce800c202fce8fff202fce8ffde02fce0fec002fcd0fec602fcd0ff5e02fcd1ffac02fcb8ff7402fcb1febe02fca0fee002fca5ff2002fcaaff4c02fc9eff6202fc9fff6602fcf1ffc002fcd0002202fcd000c202fcb800da02fcb8003002fca000d802fca0018802fc8b017c02fc89016002fcb8010802fcbe018e02fcd0018a02fccb013802fcc7016202fce8018c02fccf017002fcf3008801fd81003802fdb6000c02fdd0002602fe10fff602fdbc000002fdaffff802fdc0ffca01fdbafec602fdd8fed002fdd8ffa602fdf0ffd402fdf0ff6e02fe08ff3802fe08ffe202fe20fffa02fe34002a01fe6efffa01fe8affbc02fe3effa001fe2affe402fe0fffbe02fe20ff3e02fe38ff3402fe38ff9801fe4eff8802fe8aff6c02fe3aff5201fe41ff8202fe59ff9601fe80ffa201fe98ffb001feaafff202fed4003201ff02000002fef0ffba02feccff9002febcff4202febcff9602ff0bffac01feed003601fe98fffc02fe98007201fe80008a01fe80fff602fe9bfff202fe9d001e01fef9002802fef8ffb601fef8ff3e01fec4ff4002fec5ff4002ff91ffec02000d002002001600a401001f00f40100160144010016025201ffff025601ffe8020201ffd001ea01ffd0023a01ffd0014001ffb6014401ffe5015401002e014e0100310178010009010001002e00a401002b00a2010005010e01ff79015a01fe5b014e01fe3800d601fe2000c602fe2400fa02fe51014801ff0501e201ff1d021801ff6902b801ff9703ae01ffb103c202ffb503c001ff7b034201ffb3029a010034023c0100400200010074020c010084021a01007a01fe01007a01b4010094018601008e015c01009601280100ae01120200b400b401009a008c0100a2005e010096001602009cffda0100a2ffd80200bcff8e0200a4ff58020092ff2202008efedc010080feaa020046fe88020012fe7402ffc6fe5002ff94fe8802ff9efe7a02ff90fe8a02ff4cfe8602ff0afe7a02fefcfe7802fec8fe5402fe6cfe7202fe58fe7e02fe20fe9002fdf8fe9802fd8efe6c02fd94fe6202fd42fe4603fd0afe6002fcdafe5c02fcc6fe6202fc82fe6202fc7efe2a02fc7cfe0802fcc4fe0a02fd5cfe0c02fd88fe0c02fdc6fe0c02fe00fe0e02fe3cfe0e02fe70fe1002fe98fe1002fed0fe2002ff12fe2202ff34fe1a02ff7afe1a02ffacfe1802ffd4fe18020006fe18010042fe16020074fe1c0100a0fe160200d6fe160200f0fe440200f8ff160200f8ff7a0200f000480100ee00c40100ea01a201012a01e001017a01ba0101c601d20101da020601024a0206010310020801036a021a01035e021a01031602160102f802500102c0026a0102a202900102d602ba0102c602d201025e02f201023602d0010208029c000136029001010802de010124032c010140033401010c03260100ea037201012c035e0101400398010140039401013e039601014003940101420394020143039401014303940101430394010143039401011703800100fe039c0100f703b601010603ca01013c03d80101380434010138043a01012c043c01010a044a0100ac044c010050044401005c041401005803ae01005c035c00005e02ca010034025e01004a02580100d002580101f002580002d402580102d602400001a602400000580240010040022801013e022801027002280102eb02200102ac026e01021602700000ec0270010067027601009402880101c8028801028e029e010220029e01025002b60102b402d001024202d401025202e801029b02e201026702ae01016302740100fe029e01006902a801007c02b60100f402d001006702d601008a02e801010502e801007202fe0000b803160100f703140100d6032e010086034401008a034a01006c038001009c03b00100aa03f00100c603a00100bc038e0100cc03480000c8034e01007c036601008203a801007d03da01009903cc01008703b801009f03ba01006903b401006b03760100a703040100ac021001009a01f80100f201f80100fb01ea01009a01de01009201d601008301ac01009a01c60100e401b80100cc01ae0100e001960100e401b00100c9018a0100cc017e01009001680100d6016601009a01500100a801380100e701320100ae011e0100c601060100e901020100cc00ee0100d600d60100cc00be0100be00a60200ea008e0200ae008e0100a000760200ec005e0200b0005a0100ec00480200ea002e0100a400300200bc00180200ef00140200ae00000100c6ffe80200f3ffe40200b8ffca0200eaffa60200e0ff880200c2ff700200a7ff5e0100f2ff500200eaff400100b8ff400100ceff280200a0ff1001009dff160100c6fef80200e0fee00200a4fee002008cfec80200ccfeb002008dfeb6020086fe980200edfe920200c4fe8002007dfe860200cbff1c0200cfff960100d100d80100cf01c00100fe01f801014a01e601015b01d40101a001c60101bc01de00016c01de01015e01f60101b801f601018c020e0100b802140100e502180101eb022201024c020e010267020a010205022a01010f02060100b901880100a701520200b900680200d3ff4e0200affe90020068fe68020022fe680200e8fe640200e0fe50020046fe5002ffecfe380100a8fe380200cafe3802ff68fe3802fe38fe3802fd6cfe3e02fd84fe5002fe88fe5002fedcfe5002ffacfe4c02ff8cfe6802fef6fe6e02fea7fe6c02fdecfe6802fdd5fe6e02fe1afe8002fe3bfe7802ff0bfe5602ffddfe3c020040fe8001004dfe80020013fe4a02ff53fe4e02fe61fe5202fd9bfe5602fd36fe3802fd5cfe3602fd96fe3002fdd6fe2c02fe08fe2a02fe44fe3202fe80fe2402fec6fe2002feabfe5a02fde1fe6202fd2afe3802fcf0fe3c02fd1cfe3802fd2dfe3602fce4fe3802fca4fe4202fce0fe3a02fd14fe3a02fd16fe5002fc8cfe5602fc8cfe5602fc8cfe5602fc8dfe5602fd41fe6a02fe15fe6002feb9fe5802ff97fe3e020065fe4c0200c3fef40100cbffd60100bb00a80100bb01c401005e020e010041021401007702580100790332010072035e01007703440100dd033e0100e503780100c2038e0100dc03740100f403a60100df03aa01010803d80100e603f001012203f00100b8040c0100b204100100b3040401009e03f801006e04340100bc04160100bb040c010126041e01013004380100c204380100c304480100ab043c0100c7041001006603ee01005e03d801007403c001006103c801006a03a801006b03a80100670370010079033e0100f1028e01016b01ce010150018002015400c80101be00c40201c800e401020e00f801029400fa01032e00e601034400ce0103320096010328001001033200060203680002010386fff80203caffce0203c0ffac01038cff7602035cff7a02035effb2010360fff601039600120103ba00140103be001002039b00040103dd004a02041900180103b90078010347fffe010357fff6010357ffea02033d0000010363000e010357ffec020349fffc010353fff60203310000010347001a02034ffff802032d000401033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c01033b001c",test20260129_map1:"7b226964223a332c22737461747573223a312c227265736f6c7574696f6e223a352c2273697a65223a5b3333332c3235325d2c226f726967696e223a5b3130392c3139325d2c2263686172676572223a7b22636f6f7264696e617465223a5b38312c3132375d2c22616e676c65223a307d2c22636172706574223a5b7b22636f6f7264696e61746573223a5b5d2c227479706573223a307d5d2c226f62737461636c6573223a5b7b22636f6f7264696e61746573223a5b392c332c31302c332c34302c382c33362c392c33372c392c33382c392c33392c392c33382c31302c31392c31322c32362c31332c33302c31332c31342c34322c31352c34322c31362c34322c31372c34322c31382c34322c31392c34322c32302c34322c32312c34322c32322c34322c32332c34322c32342c34322c32352c34322c32362c34322c31342c34332c32302c34332c32312c34332c32322c34332c32332c34332c32342c34332c32352c34332c32362c34332c32372c34332c32382c34332c32392c34332c33302c34332c33312c34332c33322c34332c33332c34332c33342c34332c33352c34332c33362c34332c33372c34332c33382c34332c33392c34332c34302c34332c34312c34332c34322c34332c34332c34332c34342c34332c34352c34332c34362c34332c34372c34332c34382c34332c34392c34332c35302c34332c35312c34332c35322c34332c35332c34332c35342c34332c31342c34342c33392c34342c34302c34342c34312c34342c34322c34342c34332c34342c34342c34342c34352c34342c34362c34342c34372c34342c34382c34342c35342c34342c35352c34342c35362c34342c35372c34342c35382c34342c35392c34342c36302c34342c36312c34342c36322c34342c36332c34342c36362c34342c36372c34342c36382c34342c36392c34342c37302c34342c37312c34342c37322c34342c37332c34342c37342c34342c37352c34342c37362c34342c37372c34342c37382c34342c37392c34342c38302c34342c38312c34342c38322c34342c38332c34342c38342c34342c38372c34342c38382c34342c38392c34342c39302c34342c39312c34342c39322c34342c39332c34342c39342c34342c39352c34342c39362c34342c39372c34342c39382c34342c39392c34342c3130302c34342c3130312c34342c3130322c34342c3130332c34342c3130342c34342c31342c34352c36332c34352c36342c34352c36352c34352c36362c34352c38342c34352c38352c34352c38362c34352c38372c34352c3130342c34352c31342c34362c36352c34362c36362c34362c3130342c34362c31342c34372c3130342c34372c31342c34382c36372c34382c3130342c34382c31342c34392c36372c34392c36382c34392c3130342c34392c31342c35302c36312c35302c36322c35302c36372c35302c36382c35302c3130342c35302c31342c35312c36322c35312c36362c35312c36372c35312c36382c35312c3130342c35312c31342c35322c36322c35322c36332c35322c36342c35322c36352c35322c36362c35322c36372c35322c3130342c35322c31342c35332c36342c35332c36352c35332c36362c35332c3130342c35332c31342c35342c3130342c35342c31342c35352c3130342c35352c31342c35362c3130342c35362c31342c35372c3130342c35372c31342c35382c3130342c35382c31342c35392c3130342c35392c31342c36302c3130342c36302c31342c36312c3130342c36312c31342c36322c3130342c36322c31342c36332c3130342c36332c31342c36342c3130342c36342c31342c36352c3130342c36352c31342c36362c3130342c36362c31332c36372c31342c36372c3130342c36372c31332c36382c3130342c36382c31332c36392c3130342c36392c31332c37302c3130342c37302c31332c37312c3130342c37312c31332c37322c39342c37322c3130302c37322c3130312c37322c3130322c37322c3130332c37322c3130342c37322c31332c37332c39342c37332c3130302c37332c31332c37342c39342c37342c3130302c37342c31332c37352c39342c37352c3130302c37352c31332c37362c39352c37362c39362c37362c3130302c37362c3130312c37362c3130322c37362c3130332c37362c3130342c37362c31332c37372c3130342c37372c31332c37382c3130342c37382c31332c37392c3130342c37392c31332c38302c3130342c38302c31332c38312c35392c38312c36302c38312c36382c38312c36392c38312c3130342c38312c31332c38322c39312c38322c3130342c38322c31332c38332c38352c38332c3130342c38332c31332c38342c38372c38342c3130342c38342c31332c38352c3130342c38352c31332c38362c3130342c38362c31332c38372c3130342c38372c31332c38382c3130342c38382c31332c38392c3130342c38392c31332c39302c35392c39302c36302c39302c36372c39302c36382c39302c36392c39302c3130342c39302c31332c39312c35332c39312c35342c39312c3130302c39312c3130312c39312c3130322c39312c3130332c39312c3130342c39312c31332c39322c34342c39322c35332c39322c35342c39322c38332c39322c3130302c39322c31332c39332c38332c39332c3130302c39332c31332c39342c3130302c39342c31332c39352c3130302c39352c31332c39362c3130302c39362c31332c39372c3130302c39372c31332c39382c3130302c39382c31332c39392c3130302c39392c31332c3130302c35332c3130302c3130302c3130302c31332c3130312c34342c3130312c35322c3130312c35332c3130312c37342c3130312c38332c3130312c3130302c3130312c31332c3130322c35332c3130322c35342c3130322c37332c3130322c37342c3130322c38332c3130322c3130302c3130322c31332c3130332c35332c3130332c35342c3130332c35392c3130332c36372c3130332c36382c3130332c37332c3130332c37342c3130332c3130302c3130332c31332c3130342c35392c3130342c36372c3130342c36382c3130342c3130302c3130342c31332c3130352c39332c3130352c3130302c3130352c31332c3130362c39332c3130362c3130302c3130362c31332c3130372c39332c3130372c3130302c3130372c3131312c3130372c3131322c3130372c3131332c3130372c3131342c3130372c3131352c3130372c3131362c3130372c3131372c3130372c3131382c3130372c3131392c3130372c3132302c3130372c3132312c3130372c3132322c3130372c3132332c3130372c3132342c3130372c3132352c3130372c3132362c3130372c3132372c3130372c3132382c3130372c3132392c3130372c3133302c3130372c3133312c3130372c31322c3130382c31332c3130382c34372c3130382c34382c3130382c39342c3130382c3130302c3130382c3131312c3130382c3131382c3130382c3133312c3130382c31322c3130392c3130302c3130392c3131312c3130392c3133312c3130392c31322c3131302c3130302c3131302c3131302c3131302c3131312c3131302c3133312c3131302c31322c3131312c3130302c3131312c3130332c3131312c3130342c3131312c3130352c3131312c3130362c3131312c3130372c3131312c3130382c3131312c3130392c3131312c3131302c3131312c3133312c3131312c31322c3131322c31372c3131322c31382c3131322c35382c3131322c35392c3131322c3130302c3131322c3130332c3131322c3133312c3131322c31322c3131332c31332c3131332c31342c3131332c31352c3131332c31362c3131332c31372c3131332c31382c3131332c31392c3131332c35392c3131332c3130302c3131332c3130332c3131332c3132322c3131332c3133312c3131332c31382c3131342c31392c3131342c3130302c3131342c3130332c3131342c3132322c3131342c3133312c3131342c31322c3131352c31332c3131352c31342c3131352c31352c3131352c31362c3131352c31372c3131352c31382c3131352c3130302c3131352c3130332c3131352c3132332c3131352c3132342c3131352c3133312c3131352c3137312c3131352c31322c3131362c31362c3131362c3130302c3131362c3130332c3131362c3133312c3131362c3137312c3131362c31322c3131372c3130302c3131372c3130332c3131372c3133312c3131372c3137312c3131372c31322c3131382c3130302c3131382c3130332c3131382c3133312c3131382c3137312c3131382c31322c3131392c3130302c3131392c3130332c3131392c3133312c3131392c3137312c3131392c31322c3132302c3130302c3132302c3130332c3132302c3133312c3132302c3137312c3132302c31322c3132312c3130302c3132312c3130332c3132312c3133312c3132312c31322c3132322c3130302c3132322c3130332c3132322c3133312c3132322c3136362c3132322c31322c3132332c31332c3132332c3130302c3132332c3130332c3132332c3133312c3132332c3136362c3132332c31322c3132342c3130302c3132342c3130332c3132342c3133312c3132342c3136362c3132342c31322c3132352c3130302c3132352c3130332c3132352c3133312c3132352c3136362c3132352c31322c3132362c3130302c3132362c3130332c3132362c3133312c3132362c3136362c3132362c31322c3132372c3130302c3132372c3130332c3132372c3133312c3132372c3133322c3132372c3136362c3132372c31322c3132382c31332c3132382c31342c3132382c31352c3132382c31362c3132382c31372c3132382c31382c3132382c31392c3132382c32302c3132382c32312c3132382c34332c3132382c34342c3132382c38322c3132382c38332c3132382c3130302c3132382c3130332c3132382c3133312c3132382c32312c3132392c32322c3132392c38322c3132392c38332c3132392c3130302c3132392c3130332c3132392c3133302c3132392c3133312c3132392c32322c3133302c3130302c3133302c3130332c3133302c3133312c3133302c32322c3133312c3130302c3133312c3130332c3133312c32322c3133322c3130302c3133322c3130332c3133322c32322c3133332c39392c3133332c3130302c3133332c3130332c3133332c3133332c3133332c32322c3133342c32332c3133342c32342c3133342c39392c3133342c3130302c3133342c3130312c3133342c3130322c3133342c3130332c3133342c3133332c3133342c32322c3133352c32332c3133352c32342c3133352c32352c3133352c3130312c3133352c3132372c3133352c3133322c3133352c3133332c3133352c32352c3133362c32362c3133362c3132362c3133362c3132372c3133362c362c3133372c372c3133372c32362c3133372c32372c3133372c32382c3133372c3132362c3133372c3132372c3133372c32372c3133382c32382c3133382c32392c3133382c39352c3133382c3131392c3133382c3132302c3133382c3132312c3133382c3132322c3133382c3132332c3133382c3132342c3133382c3132352c3133382c3132362c3133382c32382c3133392c32392c3133392c34332c3133392c34342c3133392c39362c3133392c39372c3133392c3131382c3133392c3131392c3133392c32382c3134302c32392c3134302c33302c3134302c34332c3134302c34342c3134302c38312c3134302c38322c3134302c38332c3134302c39382c3134302c3130372c3134302c3130382c3134302c3131382c3134302c352c3134312c32382c3134312c33302c3134312c33312c3134312c3131382c3134312c3131392c3134312c3132302c3134312c3132312c3134312c3132322c3134312c3132332c3134312c3132342c3134312c3132352c3134312c3132362c3134312c3132372c3134312c3132382c3134312c3132392c3134312c3133302c3134312c3133312c3134312c3133322c3134312c3133332c3134312c3133342c3134312c3133352c3134312c3133362c3134312c3133372c3134312c3133382c3134312c3133392c3134312c3134302c3134312c3134312c3134312c3134322c3134312c3134332c3134312c3134342c3134312c3134352c3134312c3134362c3134312c3134372c3134312c3134382c3134312c3134392c3134312c3135302c3134312c3135312c3134312c3135322c3134312c3135332c3134312c3135342c3134312c3135352c3134312c3135362c3134312c3135372c3134312c3135382c3134312c3135392c3134312c3136302c3134312c3136312c3134312c3136322c3134312c3136332c3134312c3136342c3134312c3136352c3134312c3136362c3134312c352c3134322c32312c3134322c32352c3134322c32362c3134322c32372c3134322c32382c3134322c33312c3134322c33322c3134322c3133372c3134322c3133382c3134322c3136362c3134322c3136372c3134322c352c3134332c32302c3134332c32312c3134332c32322c3134332c32332c3134332c32342c3134332c32352c3134332c32362c3134332c32372c3134332c32382c3134332c32392c3134332c33302c3134332c33312c3134332c33322c3134332c33332c3134332c3136372c3134332c352c3134342c32302c3134342c32312c3134342c3136372c3134342c352c3134352c31392c3134352c32302c3134352c32312c3134352c3136372c3134352c352c3134362c31392c3134362c32312c3134362c3136372c3134362c352c3134372c31312c3134372c31322c3134372c31332c3134372c31342c3134372c31352c3134372c31362c3134372c31372c3134372c31382c3134372c31392c3134372c32312c3134372c3136372c3134372c352c3134382c362c3134382c31382c3134382c31392c3134382c32302c3134382c32312c3134382c3136372c3134382c362c3134392c32302c3134392c3136372c3134392c362c3135302c32302c3135302c3136372c3135302c352c3135312c362c3135312c32302c3135312c3136372c3135312c352c3135322c32302c3135322c3136372c3135322c352c3135332c3134352c3135332c3136372c3135332c352c3135342c3134352c3135342c3136372c3135342c352c3135352c3134372c3135352c3136372c3135352c352c3135362c3136372c3135362c352c3135372c3136372c3135372c352c3135382c362c3135382c3136372c3135382c362c3135392c34352c3135392c3136372c3135392c362c3136302c372c3136302c382c3136302c392c3136302c31302c3136302c31312c3136302c31322c3136302c31332c3136302c31342c3136302c31352c3136302c31362c3136302c31372c3136302c31382c3136302c31392c3136302c32302c3136302c32312c3136302c32322c3136302c32332c3136302c32342c3136302c32352c3136302c32362c3136302c32372c3136302c32382c3136302c32392c3136302c33302c3136302c33312c3136302c33322c3136302c33332c3136302c33342c3136302c33352c3136302c33362c3136302c33372c3136302c33382c3136302c33392c3136302c34302c3136302c34312c3136302c34322c3136302c34332c3136302c34342c3136302c34352c3136302c34362c3136302c34372c3136302c34382c3136302c34392c3136302c35302c3136302c35312c3136302c35322c3136302c35332c3136302c35342c3136302c35352c3136302c35362c3136302c35372c3136302c35382c3136302c35392c3136302c36302c3136302c36312c3136302c36322c3136302c36332c3136302c36342c3136302c36352c3136302c36362c3136302c36372c3136302c36382c3136302c36392c3136302c37302c3136302c37312c3136302c37322c3136302c37332c3136302c37342c3136302c37352c3136302c37362c3136302c37372c3136302c37382c3136302c37392c3136302c38302c3136302c38312c3136302c38322c3136302c38332c3136302c38342c3136302c38352c3136302c38362c3136302c38372c3136302c38382c3136302c38392c3136302c39302c3136302c39312c3136302c39322c3136302c39332c3136302c39342c3136302c39352c3136302c39362c3136302c39372c3136302c39382c3136302c3136372c3136302c39382c3136312c39392c3136312c3132312c3136312c3136372c3136312c39382c3136322c3132312c3136322c3136372c3136322c39382c3136332c3132312c3136332c3132322c3136332c3136372c3136332c362c3136342c372c3136342c382c3136342c392c3136342c31302c3136342c31312c3136342c31322c3136342c31332c3136342c31342c3136342c31352c3136342c31362c3136342c31372c3136342c31382c3136342c31392c3136342c32302c3136342c32312c3136342c32322c3136342c32332c3136342c32342c3136342c32352c3136342c32362c3136342c32372c3136342c32382c3136342c32392c3136342c33302c3136342c33312c3136342c33322c3136342c33332c3136342c33342c3136342c33352c3136342c33362c3136342c33372c3136342c33382c3136342c33392c3136342c34302c3136342c34312c3136342c34322c3136342c34332c3136342c34342c3136342c34352c3136342c34362c3136342c34372c3136342c34382c3136342c34392c3136342c35302c3136342c35312c3136342c35322c3136342c35332c3136342c35342c3136342c35352c3136342c35362c3136342c35372c3136342c35382c3136342c35392c3136342c36302c3136342c36312c3136342c36322c3136342c36332c3136342c36342c3136342c36352c3136342c36362c3136342c36372c3136342c36382c3136342c36392c3136342c37302c3136342c37312c3136342c37322c3136342c37332c3136342c37342c3136342c37352c3136342c37362c3136342c37372c3136342c37382c3136342c37392c3136342c38302c3136342c38312c3136342c38322c3136342c38332c3136342c38342c3136342c38352c3136342c38362c3136342c38372c3136342c38382c3136342c38392c3136342c39302c3136342c39342c3136342c39352c3136342c39362c3136342c39372c3136342c39382c3136342c3132312c3136342c3132322c3136342c3136372c3136342c362c3136352c39302c3136352c39352c3136352c3131382c3136352c3131392c3136352c3132302c3136352c3132312c3136352c3132322c3136352c3132332c3136352c3132342c3136352c3132352c3136352c3132362c3136352c3132372c3136352c3132382c3136352c3132392c3136352c3133302c3136352c3136372c3136352c362c3136362c39302c3136362c39312c3136362c39352c3136362c3131382c3136362c3136372c3136362c362c3136372c39312c3136372c39352c3136372c3131382c3136372c3136372c3136372c362c3136382c39312c3136382c39352c3136382c3131382c3136382c3136372c3136382c362c3136392c39312c3136392c39352c3136392c3131382c3136392c3136372c3136392c362c3137302c39312c3137302c39352c3137302c3131382c3137302c3136372c3137302c362c3137312c39312c3137312c39352c3137312c3131382c3137312c3133342c3137312c3133352c3137312c3133362c3137312c3133372c3137312c3133382c3137312c3133392c3137312c3134302c3137312c3134312c3137312c3134322c3137312c3134332c3137312c3134342c3137312c3134352c3137312c3134362c3137312c3134372c3137312c3134382c3137312c3134392c3137312c3135302c3137312c3135312c3137312c3135322c3137312c3135332c3137312c3135342c3137312c3135352c3137312c3135362c3137312c3135372c3137312c3135382c3137312c3135392c3137312c3136302c3137312c3136312c3137312c3136322c3137312c3136332c3137312c3136342c3137312c3136352c3137312c3136362c3137312c3136372c3137312c362c3137322c39312c3137322c39352c3137322c3131382c3137322c362c3137332c39312c3137332c39352c3137332c3131382c3137332c362c3137342c39312c3137342c39352c3137342c3131382c3137342c3132392c3137342c3133302c3137342c3133312c3137342c3133322c3137342c3133332c3137342c3133342c3137342c3133352c3137342c3133362c3137342c3133372c3137342c3133382c3137342c3133392c3137342c3134302c3137342c3134312c3137342c3134322c3137342c3134332c3137342c3134342c3137342c3134352c3137342c3134362c3137342c3134372c3137342c3134382c3137342c3134392c3137342c3135302c3137342c3135312c3137342c3135322c3137342c3135332c3137342c3135342c3137342c3135352c3137342c3135362c3137342c3135372c3137342c3135382c3137342c3135392c3137342c3136302c3137342c3136312c3137342c3136322c3137342c3136332c3137342c3136342c3137342c3136352c3137342c362c3137352c39312c3137352c39352c3137352c3131382c3137352c3132392c3137352c3133342c3137352c3135382c3137352c3135392c3137352c3136352c3137352c362c3137362c39312c3137362c39352c3137362c3131382c3137362c3132392c3137362c3135382c3137362c3136352c3137362c362c3137372c39312c3137372c39352c3137372c3131382c3137372c3132392c3137372c3135382c3137372c3136352c3137372c362c3137382c39312c3137382c39352c3137382c3131382c3137382c3132392c3137382c3136352c3137382c3233312c3137382c362c3137392c39312c3137392c39352c3137392c3131382c3137392c3132392c3137392c3136352c3137392c3233312c3137392c362c3138302c39312c3138302c39352c3138302c3131382c3138302c3132392c3138302c3136352c3138302c3233312c3138302c362c3138312c39312c3138312c39352c3138312c3131382c3138312c3132392c3138312c3136352c3138312c3139362c3138312c3233312c3138312c362c3138322c39312c3138322c39352c3138322c3131382c3138322c3132392c3138322c3134382c3138322c3134392c3138322c3136352c3138322c3230302c3138322c3233312c3138322c362c3138332c37312c3138332c37322c3138332c37332c3138332c37342c3138332c37352c3138332c39312c3138332c39352c3138332c3131382c3138332c3132392c3138332c3136352c3138332c3233312c3138332c362c3138342c37312c3138342c37342c3138342c39312c3138342c39352c3138342c3131382c3138342c3131392c3138342c3132302c3138342c3132312c3138342c3132322c3138342c3132332c3138342c3132342c3138342c3132352c3138342c3132362c3138342c3132392c3138342c3135322c3138342c3135392c3138342c3136352c3138342c362c3138352c37312c3138352c37342c3138352c39312c3138352c39352c3138352c3132362c3138352c3132392c3138352c3136352c3138352c362c3138362c37312c3138362c37342c3138362c39312c3138362c39352c3138362c3132362c3138362c3132392c3138362c3136352c3138362c3230302c3138362c362c3138372c37312c3138372c37342c3138372c39312c3138372c39352c3138372c3132362c3138372c3132392c3138372c3136332c3138372c3136342c3138372c3136352c3138372c362c3138382c37312c3138382c37342c3138382c39312c3138382c39352c3138382c3132362c3138382c3132372c3138382c3132382c3138382c3132392c3138382c3134362c3138382c3136332c3138382c362c3138392c37312c3138392c37342c3138392c39312c3138392c39322c3138392c39332c3138392c39342c3138392c39352c3138392c3136332c3138392c3136342c3138392c362c3139302c37312c3139302c37342c3139302c3136342c3139302c3136352c3139302c362c3139312c37312c3139312c37342c3139312c3136352c3139312c362c3139322c37312c3139322c37342c3139322c3136352c3139322c362c3139332c37312c3139332c37342c3139332c3134342c3139332c3136352c3139332c362c3139342c37312c3139342c37342c3139342c3134332c3139342c3136352c3139342c3136362c3139342c362c3139352c37312c3139352c37342c3139352c3136362c3139352c362c3139362c37312c3139362c37342c3139362c3136362c3139362c362c3139372c37312c3139372c37342c3139372c3136362c3139372c3136372c3139372c3136382c3139372c3137342c3139372c362c3139382c35352c3139382c35362c3139382c35372c3139382c35382c3139382c35392c3139382c37312c3139382c37342c3139382c3136352c3139382c3136362c3139382c3136382c3139382c3136392c3139382c3137372c3139382c362c3139392c35342c3139392c35352c3139392c35392c3139392c36302c3139392c37312c3139392c37342c3139392c3136312c3139392c3136362c3139392c3136382c3139392c3137372c3139392c352c3230302c362c3230302c35342c3230302c36302c3230302c37312c3230302c37342c3230302c3136362c3230302c3136372c3230302c3136382c3230302c342c3230312c35332c3230312c35342c3230312c36302c3230312c36312c3230312c37312c3230312c37342c3230312c3136362c3230312c3136372c3230312c3137362c3230312c342c3230322c35332c3230322c36312c3230322c37312c3230322c37342c3230322c3132382c3230322c3132392c3230322c3133302c3230322c3136362c3230322c3136372c3230322c342c3230332c35332c3230332c36312c3230332c37312c3230332c37342c3230332c3132372c3230332c3132382c3230332c3136362c3230332c3136372c3230332c3137372c3230332c3137382c3230332c3137392c3230332c342c3230342c35332c3230342c36312c3230342c37312c3230342c37342c3230342c3132372c3230342c3136362c3230342c3137392c3230342c342c3230352c32372c3230352c32382c3230352c32392c3230352c33302c3230352c33312c3230352c33322c3230352c33332c3230352c33342c3230352c33352c3230352c33362c3230352c33372c3230352c33382c3230352c33392c3230352c34302c3230352c34312c3230352c34322c3230352c34332c3230352c34342c3230352c34352c3230352c34362c3230352c34372c3230352c34382c3230352c34392c3230352c35302c3230352c35312c3230352c35322c3230352c35332c3230352c36312c3230352c37312c3230352c37342c3230352c3132372c3230352c3136332c3230352c3136342c3230352c3136352c3230352c3136362c3230352c3137352c3230352c342c3230362c352c3230362c362c3230362c372c3230362c382c3230362c392c3230362c31302c3230362c31312c3230362c31322c3230362c31332c3230362c31342c3230362c31352c3230362c31362c3230362c31372c3230362c31382c3230362c31392c3230362c32302c3230362c32312c3230362c32322c3230362c32332c3230362c32342c3230362c32352c3230362c32362c3230362c32372c3230362c36312c3230362c36322c3230362c36332c3230362c36342c3230362c36352c3230362c36362c3230362c36372c3230362c36382c3230362c36392c3230362c37302c3230362c37312c3230362c37342c3230362c37352c3230362c37362c3230362c37372c3230362c37382c3230362c37392c3230362c38302c3230362c38312c3230362c38322c3230362c38332c3230362c38342c3230362c38352c3230362c38362c3230362c38372c3230362c38382c3230362c38392c3230362c39302c3230362c39312c3230362c39322c3230362c39332c3230362c39342c3230362c39352c3230362c39362c3230362c39372c3230362c39382c3230362c3132372c3230362c3133352c3230362c3133362c3230362c3133372c3230362c3133382c3230362c3133392c3230362c3136332c3230362c3136362c3230362c3138372c3230362c342c3230372c352c3230372c362c3230372c372c3230372c382c3230372c392c3230372c31302c3230372c31312c3230372c31322c3230372c31332c3230372c31342c3230372c31352c3230372c31362c3230372c31372c3230372c31382c3230372c31392c3230372c32302c3230372c32312c3230372c32322c3230372c32332c3230372c32342c3230372c32352c3230372c32362c3230372c32372c3230372c32382c3230372c32392c3230372c33302c3230372c33312c3230372c33322c3230372c33332c3230372c33342c3230372c33352c3230372c39382c3230372c3132372c3230372c3133352c3230372c3133392c3230372c3136332c3230372c3136362c3230372c3136372c3230372c342c3230382c31332c3230382c33352c3230382c35332c3230382c39382c3230382c3132372c3230382c3132382c3230382c3133342c3230382c3133352c3230382c3133392c3230382c3136332c3230382c3136372c3230382c3136382c3230382c3139312c3230382c342c3230392c33352c3230392c35332c3230392c35342c3230392c35352c3230392c35362c3230392c35372c3230392c35382c3230392c35392c3230392c36302c3230392c36312c3230392c36322c3230392c36332c3230392c36342c3230392c36352c3230392c36362c3230392c36372c3230392c36382c3230392c36392c3230392c37302c3230392c37312c3230392c37322c3230392c37332c3230392c37342c3230392c37352c3230392c37362c3230392c37372c3230392c37382c3230392c37392c3230392c38302c3230392c38312c3230392c38322c3230392c38332c3230392c38342c3230392c38352c3230392c38362c3230392c38372c3230392c38382c3230392c38392c3230392c39302c3230392c39312c3230392c39322c3230392c39332c3230392c39342c3230392c39352c3230392c39362c3230392c39372c3230392c39382c3230392c3132352c3230392c3132362c3230392c3132372c3230392c3132382c3230392c3132392c3230392c3133302c3230392c3133312c3230392c3133322c3230392c3133332c3230392c3133342c3230392c3133392c3230392c3134302c3230392c3134312c3230392c3135352c3230392c3135362c3230392c3136332c3230392c3136382c3230392c3136392c3230392c3137342c3230392c3137352c3230392c3139312c3230392c342c3231302c33352c3231302c35332c3231302c3132312c3231302c3132362c3231302c3134312c3231302c3135342c3231302c3135352c3231302c3135362c3231302c3135372c3231302c3135382c3231302c3135392c3231302c3136302c3231302c3136312c3231302c3136322c3231302c3136332c3231302c3136392c3231302c3139312c3231302c342c3231312c33352c3231312c35322c3231312c35332c3231312c3132362c3231312c3134322c3231312c3135342c3231312c3136392c3231312c3137302c3231312c3139302c3231312c342c3231322c33352c3231322c33362c3231322c33372c3231322c33382c3231322c33392c3231322c34302c3231322c34312c3231322c34322c3231322c34332c3231322c34342c3231322c34352c3231322c34362c3231322c34372c3231322c34382c3231322c34392c3231322c35302c3231322c35312c3231322c35322c3231322c3132302c3231322c3132362c3231322c3134322c3231322c3135342c3231322c342c3231332c33372c3231332c34342c3231332c35312c3231332c35322c3231332c3131392c3231332c3132302c3231332c3132362c3231332c3134322c3231332c3135342c3231332c342c3231342c35322c3231342c3131392c3231342c3132302c3231342c3132312c3231342c3132322c3231342c3132332c3231342c3132342c3231342c3132352c3231342c3132362c3231342c3134322c3231342c3135342c3231342c342c3231352c35322c3231352c35332c3231352c3131392c3231352c3132302c3231352c3132312c3231352c3132322c3231352c3132332c3231352c3132342c3231352c3132352c3231352c3132362c3231352c3134322c3231352c3135342c3231352c342c3231362c352c3231362c31332c3231362c31342c3231362c33382c3231362c34322c3231362c34332c3231362c35322c3231362c35332c3231362c3131392c3231362c3132302c3231362c3132362c3231362c3134322c3231362c3135342c3231362c342c3231372c352c3231372c31332c3231372c31342c3231372c33392c3231372c34302c3231372c34312c3231372c34322c3231372c35322c3231372c3131312c3231372c3131322c3231372c3131382c3231372c3131392c3231372c3132302c3231372c3132362c3231372c3134322c3231372c3135342c3231372c342c3231382c31332c3231382c31342c3231382c35312c3231382c35322c3231382c3131322c3231382c3131332c3231382c3131342c3231382c3131352c3231382c3131362c3231382c3131372c3231382c3132362c3231382c3134322c3231382c3135342c3231382c342c3231392c35302c3231392c3131362c3231392c3132312c3231392c3132322c3231392c3132332c3231392c3132342c3231392c3132352c3231392c3132362c3231392c3134322c3231392c3134362c3231392c3134372c3231392c3134382c3231392c3134392c3231392c342c3232302c3132312c3232302c3134322c3232302c3134362c3232302c342c3232312c3132312c3232312c3134322c3232312c3134332c3232312c3134342c3232312c3134352c3232312c3135332c3232312c342c3232322c3132312c3232322c3134322c3232322c3135332c3232322c342c3232332c3131332c3232332c3131342c3232332c3131352c3232332c3131362c3232332c3131372c3232332c3131382c3232332c3131392c3232332c3132302c3232332c3132312c3232332c3135332c3232332c342c3232342c3131332c3232342c3135332c3232342c3135342c3232342c3135352c3232342c3135362c3232342c3135372c3232342c342c3232352c3131332c3232352c3134332c3232352c3134342c3232352c3134352c3232352c3134362c3232352c3134372c3232352c3134382c3232352c3134392c3232352c3135332c3232352c332c3232362c342c3232362c352c3232362c31332c3232362c3131332c3232362c3135332c3232362c332c3232372c31332c3232372c3131332c3232372c332c3232382c3131332c3232382c332c3232392c3130302c3232392c3130312c3232392c3130322c3232392c3130332c3232392c3130342c3232392c3130352c3232392c3130362c3232392c3130372c3232392c3130382c3232392c3130392c3232392c3131302c3232392c3131312c3232392c3131322c3232392c3131332c3232392c332c3233302c342c3233302c37322c3233302c37332c3233302c37342c3233302c37352c3233302c37362c3233302c37372c3233302c3130302c3233302c342c3233312c37312c3233312c37322c3233312c37372c3233312c3130302c3233312c3131342c3233312c3131352c3233312c3131362c3233312c3131372c3233312c3131382c3233312c3131392c3233312c3132302c3233312c3132312c3233312c3132322c3233312c3132332c3233312c3132342c3233312c332c3233322c342c3233322c37312c3233322c37372c3233322c3130302c3233322c3131342c3233322c3132342c3233322c332c3233332c37312c3233332c37372c3233332c3130302c3233332c3131342c3233332c3132342c3233332c332c3233342c37312c3233342c37372c3233342c3130302c3233342c3131342c3233342c3132342c3233342c332c3233352c37312c3233352c37372c3233352c3130302c3233352c3131342c3233352c3132342c3233352c3135302c3233352c332c3233362c37312c3233362c37372c3233362c3130302c3233362c3130312c3233362c3131342c3233362c3132342c3233362c3132352c3233362c3135312c3233362c3135322c3233362c3135332c3233362c332c3233372c32352c3233372c37312c3233372c37372c3233372c3130312c3233372c3131332c3233372c3131342c3233372c3132352c3233372c3132362c3233372c3132372c3233372c3132382c3233372c3132392c3233372c3133302c3233372c3133312c3233372c3133322c3233372c3133332c3233372c3133342c3233372c3133352c3233372c3133362c3233372c3133372c3233372c3133382c3233372c3133392c3233372c3134302c3233372c3134312c3233372c3135332c3233372c3135342c3233372c3135352c3233372c3135362c3233372c3135372c3233372c3135382c3233372c3136342c3233372c332c3233382c342c3233382c32342c3233382c32352c3233382c37312c3233382c37372c3233382c3130312c3233382c3130322c3233382c3130332c3233382c3130342c3233382c3130352c3233382c3130362c3233382c3130372c3233382c3130382c3233382c3130392c3233382c3131302c3233382c3131312c3233382c3134312c3233382c3136352c3233382c332c3233392c37312c3233392c37372c3233392c3136352c3233392c332c3234302c31362c3234302c31372c3234302c31382c3234302c31392c3234302c32302c3234302c32312c3234302c32322c3234302c32332c3234302c32342c3234302c32352c3234302c32362c3234302c32372c3234302c32382c3234302c32392c3234302c33302c3234302c33312c3234302c33322c3234302c33332c3234302c33342c3234302c33352c3234302c33362c3234302c33372c3234302c33382c3234302c33392c3234302c34302c3234302c34312c3234302c34322c3234302c34332c3234302c34342c3234302c34352c3234302c34362c3234302c34372c3234302c34382c3234302c34392c3234302c35302c3234302c35312c3234302c35322c3234302c35332c3234302c35342c3234302c35352c3234302c37312c3234302c37372c3234302c3136352c3234302c332c3234312c31362c3234312c35352c3234312c37312c3234312c37372c3234312c332c3234322c31362c3234322c35352c3234322c35362c3234322c37312c3234322c37372c3234322c3135312c3234322c332c3234332c31362c3234332c35362c3234332c36302c3234332c36312c3234332c36322c3234332c36332c3234332c36342c3234332c37312c3234332c37372c3234332c3135312c3234332c332c3234342c31362c3234342c35362c3234342c36302c3234342c36332c3234342c36342c3234342c36352c3234342c37312c3234342c37372c3234342c3135302c3234342c3135312c3234342c332c3234352c31362c3234352c35362c3234352c36302c3234352c37312c3234352c37372c3234352c3134302c3234352c332c3234362c31362c3234362c36302c3234362c37312c3234362c37372c3234362c3134302c3234362c332c3234372c31362c3234372c35372c3234372c35382c3234372c35392c3234372c36302c3234372c37312c3234372c37372c3234372c3134302c3234372c332c3234382c31362c3234382c35372c3234382c35382c3234382c35392c3234382c36302c3234382c37312c3234382c37372c3234382c3134302c3234382c332c3234392c31362c3234392c36302c3234392c37312c3234392c37372c3234392c3134302c3234392c332c3235302c31362c3235302c36302c3235302c37302c3235302c37312c3235302c37372c3235302c3134302c3235302c332c3235312c31362c3235312c36302c3235312c37372c3235312c3134302c3235312c332c3235322c31362c3235322c36302c3235322c37372c3235322c3132392c3235322c3134302c3235322c332c3235332c31362c3235332c37372c3235332c3134302c3235332c332c3235342c31362c3235342c35362c3235342c37372c3235342c3134312c3235342c3134322c3235342c332c3235352c31362c3235352c37372c3235352c3134312c3235352c322c3235362c332c3235362c31362c3235362c37372c3235362c3134312c3235362c322c3235372c31362c3235372c37372c3235372c3134312c3235372c322c3235382c31362c3235382c37372c3235382c3134312c3235382c322c3235392c31362c3235392c37372c3235392c3134312c3235392c322c3236302c31362c3236302c37372c3236302c3134312c3236302c322c3236312c31362c3236312c37372c3236312c3134312c3236312c322c3236322c31362c3236322c37372c3236322c3134312c3236322c322c3236332c31362c3236332c37372c3236332c3134312c3236332c322c3236342c31362c3236342c37372c3236342c3134312c3236342c322c3236352c31362c3236352c37372c3236352c3134312c3236352c322c3236362c31362c3236362c37372c3236362c3134312c3236362c322c3236372c31362c3236372c37372c3236372c3134312c3236372c322c3236382c37372c3236382c3134312c3236382c322c3236392c34302c3236392c37372c3236392c3134312c3236392c322c3237302c31362c3237302c37362c3237302c37372c3237302c3134312c3237302c322c3237312c31362c3237312c37362c3237312c3134312c3237312c322c3237322c31362c3237322c37362c3237322c3134312c3237322c322c3237332c31362c3237332c37362c3237332c3134312c3237332c322c3237342c31362c3237342c37362c3237342c3134312c3237342c322c3237352c31362c3237352c37362c3237352c3134312c3237352c322c3237362c31362c3237362c37362c3237362c3134312c3237362c322c3237372c31362c3237372c37362c3237372c3131342c3237372c3134312c3237372c322c3237382c31362c3237382c36332c3237382c36392c3237382c37362c3237382c3130322c3237382c3130332c3237382c3130342c3237382c3130352c3237382c3130362c3237382c3130372c3237382c3130382c3237382c3130392c3237382c3131302c3237382c3131312c3237382c3131322c3237382c3131332c3237382c3131342c3237382c3134312c3237382c322c3237392c37362c3237392c3130322c3237392c3131342c3237392c3134312c3237392c322c3238302c37362c3238302c3130322c3238302c3131342c3238302c3133392c3238302c3134302c3238302c3134312c3238302c322c3238312c37362c3238312c3130322c3238312c3131342c3238312c3133392c3238312c312c3238322c322c3238322c332c3238322c342c3238322c352c3238322c362c3238322c372c3238322c382c3238322c392c3238322c31302c3238322c31312c3238322c31322c3238322c31332c3238322c31342c3238322c31352c3238322c37362c3238322c37372c3238322c38382c3238322c38392c3238322c39302c3238322c39312c3238322c3130322c3238322c3131342c3238322c3131352c3238322c3132302c3238322c3132312c3238322c3132322c3238322c3132332c3238322c3132342c3238322c3132352c3238322c3132362c3238322c3132372c3238322c3132382c3238322c3132392c3238322c3133302c3238322c3133312c3238322c3133322c3238322c3133332c3238322c3133342c3238322c3133352c3238322c3133362c3238322c3133372c3238322c3133382c3238322c3133392c3238322c37352c3238332c37362c3238332c37372c3238332c38362c3238332c38372c3238332c38382c3238332c39312c3238332c39322c3238332c3130312c3238332c3132302c3238332c38362c3238342c39322c3238342c39332c3238342c39342c3238342c39352c3238342c39362c3238342c39372c3238342c39382c3238342c39392c3238342c3130302c3238342c3130312c3238342c3131392c3238342c3132302c3238342c38362c3238352c3131372c3238352c3131382c3238352c38302c3238362c38312c3238362c38322c3238362c38332c3238362c38342c3238362c38352c3238362c38362c3238362c38372c3238362c38382c3238362c38392c3238362c37352c3238382c37362c3238382c37362c3239332c37362c3239342c37372c3239342c37372c3239352c37362c3239362c37372c3239362c37362c3239372c37362c3239382c37362c3239392c37362c3330302c37372c3330322c37372c3330372c37382c3330372c38302c3332325d2c227479706573223a307d5d2c2266726565223a5b7b22636f6f7264696e61746573223a5b5d2c227479706573223a307d5d2c22726f6f6d73223a7b2230223a7b22636f6f7264696e61746573223a5b33362c34322c33352c34312c33342c34312c33332c34312c33322c34312c33312c34312c33302c34312c32392c34312c32382c34312c32372c34312c32362c34312c32352c34312c32342c34312c32332c34312c32322c34312c32312c34312c32302c34312c32302c34302c32302c33392c31392c33382c31392c33372c31392c33362c31392c33352c31392c33342c31382c33332c31382c33322c31382c33312c31382c33302c31372c32392c31372c32382c31372c32372c31372c32362c31372c32352c31362c32342c31362c32332c31362c32322c31362c32312c31352c32302c31352c31392c31342c31382c31342c31372c31332c31362c31332c31352c31322c31342c31322c31332c31322c31322c31312c31312c31312c31302c31302c392c31302c382c392c372c392c362c382c352c382c342c392c342c31302c342c31312c342c31322c352c31332c362c31342c362c31352c362c31352c372c31362c382c31372c382c31382c392c31392c392c32302c31302c32312c31302c32322c31312c32332c31312c32342c31312c32352c31322c32362c31332c32372c31332c32382c31332c32392c31322c33302c31312c33302c31302c33302c392c33312c382c33312c372c33312c362c33322c362c33332c362c33342c362c33352c372c33352c382c33352c392c33362c31302c33372c31302c33382c31312c33392c31302c34302c392c34312c392c34322c392c34332c392c34342c392c34352c392c34362c392c34362c31302c34362c31312c34372c31322c34372c31332c34372c31342c34372c31352c34372c31362c34372c31372c34382c31382c34382c31392c34382c32302c34382c32312c34382c32322c34392c32332c34392c32342c34392c32352c34392c32362c34392c32372c34392c32382c35302c32392c35302c33302c35302c33312c35302c33322c35312c33332c35312c33342c35312c33352c35312c33362c35322c33372c35322c33382c35322c33392c35322c34302c35322c34312c35322c34322c35312c34322c35302c34322c34392c34322c34382c34322c34372c34322c34362c34322c34352c34322c34342c34322c34332c34322c34322c34322c34312c34322c34302c34322c33392c34322c33382c34322c33372c34325d7d2c2231223a7b22636f6f7264696e61746573223a5b3136342c3133382c3136332c3133372c3136322c3133372c3136312c3133372c3136302c3133372c3135392c3133372c3135382c3133372c3135372c3133372c3135362c3133372c3135352c3133362c3135342c3133362c3135332c3133362c3135322c3133362c3135312c3133362c3135302c3133362c3134392c3133362c3134382c3133362c3134372c3133362c3134362c3133362c3134352c3133362c3134342c3133362c3134332c3133352c3134322c3133352c3134312c3133352c3134302c3133352c3133392c3133352c3133382c3133352c3133372c3133352c3133362c3133352c3133352c3133362c3133342c3133362c3133332c3133362c3133322c3133362c3133312c3133362c3133302c3133362c3132392c3133362c3133302c3133352c3133302c3133342c3133302c3133332c3133302c3133322c3133302c3133312c3133312c3133302c3133312c3132392c3133322c3132382c3133332c3132382c3133342c3132372c3133352c3132372c3133362c3132362c3133372c3132362c3133382c3132362c3133392c3132352c3134302c3132352c3134312c3132342c3134322c3132342c3134332c3132342c3134342c3132332c3134352c3132332c3134362c3132322c3134372c3132322c3134382c3132322c3134392c3132312c3135302c3132312c3135312c3132312c3135322c3132302c3135332c3131392c3135342c3131392c3135352c3131382c3135362c3131382c3135372c3131382c3135382c3131372c3135392c3131372c3136302c3131362c3136312c3131362c3136322c3131362c3136332c3131352c3136342c3131352c3136352c3131352c3136362c3131342c3136372c3131342c3136382c3131332c3136392c3131332c3137302c3131332c3137302c3131342c3137302c3131352c3137302c3131362c3137302c3131372c3137302c3131382c3137302c3131392c3137302c3132302c3137302c3132312c3137302c3132322c3136392c3132322c3136382c3132322c3136372c3132332c3136362c3132332c3136352c3132342c3136352c3132352c3136352c3132362c3136362c3132372c3136372c3132382c3136372c3132392c3136372c3133302c3136372c3133312c3136372c3133322c3136372c3133332c3136372c3133342c3136372c3133352c3136372c3133362c3136372c3133372c3136372c3133382c3136362c3133382c3136352c3133385d7d2c2232223a7b22636f6f7264696e61746573223a5b3138352c3232302c3138342c3231392c3138332c3231392c3138322c3231382c3138312c3231382c3138302c3231382c3137392c3231372c3137382c3231372c3137372c3231372c3137362c3231362c3137352c3231362c3137342c3231352c3137332c3231352c3137322c3231352c3137312c3231342c3137302c3231342c3137302c3231332c3136392c3231322c3136392c3231312c3136392c3231302c3136382c3230392c3136382c3230382c3136382c3230372c3136372c3230362c3136372c3230352c3136372c3230342c3136372c3230332c3136382c3230322c3136382c3230312c3136392c3230302c3136392c3139392c3137302c3139382c3136392c3139372c3136382c3139362c3136372c3139362c3136372c3139352c3136372c3139342c3136372c3139332c3136382c3139332c3136392c3139322c3137302c3139322c3137312c3139312c3137322c3139312c3137332c3139312c3137342c3139302c3137352c3139302c3137362c3138392c3137372c3138392c3137382c3138392c3137392c3138382c3138302c3138382c3138312c3138372c3138322c3138362c3138332c3138362c3138342c3138352c3138352c3138352c3138362c3138342c3138372c3138342c3138382c3138332c3138392c3138332c3139302c3138332c3139312c3138322c3139322c3138322c3139332c3138312c3139342c3138312c3139352c3138312c3139362c3138312c3139372c3138302c3139382c3138302c3139392c3138302c3230302c3138312c3230302c3138322c3230312c3138332c3230312c3138342c3230322c3138352c3230332c3138362c3230342c3138352c3230352c3138352c3230362c3138352c3230372c3138342c3230382c3138342c3230392c3138342c3231302c3138332c3231302c3138322c3231312c3138322c3231322c3138322c3231332c3138322c3231342c3138312c3231352c3138312c3231362c3138312c3231372c3138302c3231382c3138302c3231392c3138302c3232302c3137392c3232312c3137392c3232322c3137392c3232332c3137392c3232342c3137382c3232352c3137382c3232362c3137382c3232372c3137372c3232382c3137372c3232392c3137372c3233302c3137372c3233302c3137382c3233302c3137392c3233302c3138302c3233302c3138312c3233302c3138322c3233302c3138332c3233302c3138342c3233302c3138352c3232392c3138362c3233302c3138372c3233312c3138372c3233322c3138372c3233322c3138382c3233322c3138392c3233312c3138392c3233302c3138392c3232392c3139302c3232382c3139302c3232372c3139302c3232362c3139302c3232352c3139302c3232342c3139302c3232332c3139312c3232322c3139312c3232312c3139312c3232302c3139312c3231392c3139312c3231382c3139322c3231372c3139322c3231362c3139322c3231352c3139322c3231342c3139322c3231332c3139322c3231322c3139332c3231312c3139332c3231302c3139332c3230392c3139332c3230382c3139332c3230372c3139332c3230362c3139342c3230352c3139342c3230342c3139342c3230332c3139342c3230322c3139342c3230312c3139352c3230302c3139352c3139392c3139352c3139382c3139352c3139372c3139352c3139362c3139352c3139352c3139362c3139342c3139362c3139332c3139362c3139322c3139362c3139312c3139362c3139302c3139372c3138392c3139372c3138382c3139372c3138372c3139372c3138362c3139372c3138352c3139382c3138342c3139382c3138332c3139382c3138322c3139392c3138312c3139392c3138302c3139392c3137392c3139392c3137382c3139392c3137372c3139392c3137362c3230302c3137362c3230312c3137372c3230322c3137372c3230332c3137382c3230342c3137392c3230342c3138302c3230342c3138312c3230352c3138322c3230342c3138332c3230342c3138342c3230342c3138352c3230342c3138362c3230352c3138372c3230362c3138382c3230362c3138392c3230362c3139302c3230362c3139302c3230372c3139302c3230382c3139302c3230392c3139302c3231302c3138392c3231312c3139302c3231322c3139312c3231322c3139312c3231332c3139312c3231342c3139322c3231352c3139332c3231362c3139342c3231362c3139342c3231372c3139342c3231382c3139342c3231392c3139332c3231392c3139322c3231392c3139312c3231392c3139302c3232302c3138392c3232302c3138382c3232302c3138372c3232302c3138362c3232305d7d2c2233223a7b22636f6f7264696e61746573223a5b332c3232362c332c3232352c332c3232342c332c3232332c332c3232322c342c3232312c342c3232302c342c3231392c342c3231382c342c3231372c342c3231362c342c3231352c342c3231342c342c3231332c352c3231322c352c3231312c352c3231302c352c3230392c352c3230382c362c3230382c372c3230382c382c3230382c392c3230382c31302c3230382c31312c3230382c31322c3230382c31332c3230382c31342c3230382c31352c3230382c31362c3230382c31372c3230382c31382c3230372c31392c3230372c32302c3230372c32312c3230372c32322c3230372c32332c3230372c32342c3230372c32352c3230372c32362c3230372c32372c3230372c32382c3230372c32392c3230372c33302c3230372c33312c3230382c33322c3230382c33332c3230382c33342c3230382c33342c3230392c33342c3231302c33342c3231312c33352c3231322c33362c3231332c33372c3231342c33382c3231332c33392c3231332c34302c3231332c34312c3231332c34322c3231332c34332c3231332c34342c3231342c34352c3231332c34362c3231332c34372c3231332c34382c3231332c34392c3231332c35302c3231332c35312c3231332c35322c3231322c35322c3231312c35332c3231302c35342c3231302c35352c3231302c35362c3231302c35372c3231302c35382c3231302c35392c3231302c36302c3231302c36312c3230392c36322c3230392c36332c3230392c36342c3230392c36352c3230392c36362c3230392c36372c3230392c36382c3230392c36392c3230392c37302c3230392c37312c3230392c37322c3230392c37332c3230392c37342c3230392c37352c3230392c37362c3230382c37372c3230382c37382c3230382c37392c3230382c38302c3230382c38312c3230382c38322c3230382c38332c3230382c38342c3230382c38352c3230382c38362c3230382c38372c3230382c38382c3230382c38392c3230382c39302c3230382c39312c3230372c39322c3230372c39332c3230372c39342c3230372c39352c3230372c39362c3230372c39372c3230372c39382c3230372c39392c3230372c3130302c3230372c3130312c3230372c3130322c3230372c3130332c3230372c3130342c3230372c3130352c3230372c3130362c3230372c3130372c3230372c3130382c3230382c3130392c3230382c3131302c3230382c3131312c3230382c3131322c3230382c3131332c3230392c3131332c3231302c3131332c3231312c3131342c3231322c3131342c3231332c3131342c3231342c3131342c3231352c3131342c3231362c3131342c3231372c3131332c3231382c3131342c3231392c3131342c3232302c3131342c3232312c3131342c3232322c3131332c3232322c3131322c3232332c3131322c3232342c3131322c3232352c3131322c3232362c3131312c3232362c3131302c3232362c3130392c3232362c3130382c3232362c3130372c3232362c3130362c3232362c3130352c3232362c3130342c3232362c3130332c3232362c3130322c3232362c3130312c3232362c3130302c3232362c39392c3232362c39382c3232362c39372c3232362c39362c3232362c39352c3232362c39342c3232362c39332c3232362c39322c3232362c39312c3232362c39302c3232362c38392c3232362c38382c3232362c38372c3232362c38362c3232362c38352c3232362c38342c3232362c38332c3232362c38322c3232362c38312c3232362c38302c3232362c37392c3232362c37382c3232362c37372c3232362c37362c3232362c37352c3232362c37342c3232362c37332c3232362c37322c3232362c37312c3232362c37302c3232362c36392c3232362c36382c3232362c36372c3232362c36362c3232362c36352c3232362c36342c3232362c36332c3232362c36322c3232362c36312c3232362c36302c3232362c35392c3232362c35382c3232362c35372c3232362c35362c3232362c35352c3232362c35342c3232362c35332c3232362c35322c3232362c35312c3232362c35302c3232362c34392c3232362c34382c3232362c34372c3232362c34362c3232362c34352c3232362c34342c3232362c34332c3232362c34322c3232362c34312c3232362c34302c3232362c33392c3232362c33382c3232362c33372c3232362c33362c3232362c33352c3232362c33342c3232362c33332c3232362c33322c3232362c33312c3232362c33302c3232362c32392c3232362c32382c3232362c32372c3232362c32362c3232362c32352c3232362c32342c3232362c32332c3232362c32322c3232362c32312c3232362c32302c3232362c31392c3232362c31382c3232362c31372c3232362c31362c3232362c31352c3232362c31342c3232362c31332c3232362c31322c3232362c31312c3232362c31302c3232362c392c3232362c382c3232362c372c3232362c362c3232362c352c3232362c342c3232365d7d2c2234223a7b22636f6f7264696e61746573223a5b352c3230352c352c3230342c352c3230332c352c3230322c352c3230312c352c3230302c352c3139392c352c3139382c352c3139372c352c3139362c352c3139352c352c3139342c352c3139332c352c3139322c352c3139312c352c3139302c352c3138392c352c3138382c352c3138372c352c3138362c352c3138352c362c3138342c362c3138332c362c3138322c362c3138312c362c3138302c362c3137392c362c3137382c362c3137372c362c3137362c362c3137352c362c3137342c362c3137332c362c3137322c362c3137312c362c3137302c362c3136392c362c3136382c362c3136372c362c3136362c362c3136352c372c3136352c382c3136352c392c3136352c31302c3136352c31312c3136352c31322c3136352c31332c3136352c31342c3136352c31352c3136352c31362c3136352c31372c3136352c31382c3136352c31392c3136352c32302c3136352c32312c3136352c32322c3136352c32332c3136352c32342c3136352c32352c3136352c32362c3136352c32372c3136352c32382c3136352c32392c3136352c33302c3136352c33312c3136352c33322c3136352c33332c3136352c33342c3136352c33352c3136352c33362c3136352c33372c3136352c33382c3136352c33392c3136352c34302c3136352c34312c3136352c34322c3136352c34332c3136352c34342c3136352c34352c3136352c34352c3136362c34352c3136372c34352c3136382c34352c3136392c34352c3137302c34352c3137312c34352c3137322c34352c3137332c34352c3137342c34352c3137352c34352c3137362c34352c3137372c34352c3137382c34352c3137392c34352c3138302c34352c3138312c34352c3138322c34352c3138332c34352c3138342c34352c3138352c34352c3138362c34352c3138372c34352c3138382c34352c3138392c34352c3139302c34352c3139312c34352c3139322c34352c3139332c34352c3139342c34352c3139352c34352c3139362c34352c3139372c34352c3139382c34352c3139392c34352c3230302c34352c3230312c34352c3230322c34352c3230332c34352c3230342c34342c3230342c34332c3230342c34322c3230342c34312c3230342c34302c3230342c33392c3230342c33382c3230342c33372c3230342c33362c3230342c33352c3230342c33342c3230342c33332c3230342c33322c3230342c33312c3230342c33302c3230342c32392c3230342c32382c3230342c32372c3230352c32362c3230352c32352c3230352c32342c3230352c32332c3230352c32322c3230352c32312c3230352c32302c3230352c31392c3230352c31382c3230352c31372c3230352c31362c3230352c31352c3230352c31342c3230352c31332c3230352c31322c3230352c31312c3230352c31302c3230352c392c3230352c382c3230352c372c3230352c362c3230355d7d2c2235223a7b22636f6f7264696e61746573223a5b3135302c3232362c3135302c3232352c3134392c3232342c3134382c3232342c3134372c3232342c3134362c3232342c3134352c3232342c3134342c3232342c3134332c3232342c3134332c3232332c3134332c3232322c3134342c3232322c3134352c3232312c3134342c3232302c3134332c3232302c3134332c3231392c3134332c3231382c3134332c3231372c3134332c3231362c3134332c3231352c3134332c3231342c3134322c3231332c3134322c3231322c3134322c3231312c3134312c3231302c3134312c3230392c3134302c3230382c3134302c3230372c3133392c3230362c3133382c3230372c3133372c3230372c3133362c3230372c3133352c3230382c3133342c3230382c3133332c3230382c3133322c3230392c3133312c3230392c3133302c3230382c3132392c3230372c3132382c3230362c3132382c3230352c3132382c3230342c3132382c3230332c3132382c3230322c3132382c3230312c3132382c3230302c3132382c3139392c3132382c3139382c3132382c3139372c3132382c3139362c3132382c3139352c3132382c3139342c3132382c3139332c3132382c3139322c3132382c3139312c3132382c3139302c3132392c3138392c3132392c3138382c3132392c3138372c3132392c3138362c3132392c3138352c3132392c3138342c3132392c3138332c3133302c3138322c3133302c3138312c3133302c3138302c3133302c3137392c3133302c3137382c3133302c3137372c3133302c3137362c3133302c3137352c3133312c3137352c3133322c3137352c3133332c3137352c3133342c3137352c3133352c3137352c3133362c3137352c3133372c3137352c3133382c3137352c3133392c3137352c3134302c3137352c3134312c3137352c3134322c3137352c3134332c3137352c3134342c3137352c3134352c3137352c3134362c3137352c3134372c3137352c3134382c3137352c3134392c3137352c3135302c3137352c3135312c3137352c3135322c3137352c3135332c3137352c3135342c3137352c3135352c3137352c3135362c3137352c3135372c3137352c3135382c3137352c3135392c3137352c3136302c3137352c3136312c3137352c3136322c3137352c3136332c3137352c3136342c3137352c3136342c3137362c3136342c3137372c3136342c3137382c3136342c3137392c3136342c3138302c3136342c3138312c3136342c3138322c3136342c3138332c3136342c3138342c3136342c3138352c3136342c3138362c3136332c3138362c3136322c3138372c3136322c3138382c3136322c3138392c3136332c3139302c3136342c3139312c3136342c3139322c3136342c3139332c3136342c3139342c3136352c3139352c3136352c3139362c3136352c3139372c3136352c3139382c3136352c3139392c3136352c3230302c3136352c3230312c3136352c3230322c3136352c3230332c3136352c3230342c3136342c3230352c3136342c3230362c3136332c3230372c3136332c3230382c3136322c3230392c3136312c3230392c3136302c3230392c3135392c3231302c3135382c3231302c3135372c3231302c3135362c3231302c3135352c3231312c3135342c3231312c3135332c3231322c3135332c3231332c3135332c3231342c3135332c3231352c3135332c3231362c3135332c3231372c3135332c3231382c3135332c3231392c3135342c3232302c3135352c3232302c3135362c3232302c3135372c3232312c3135372c3232322c3135372c3232332c3135372c3232342c3135362c3232342c3135352c3232342c3135342c3232342c3135332c3232342c3135322c3232352c3135322c3232362c3135312c3232365d7d2c2236223a7b22636f6f7264696e61746573223a5b3136322c3137332c3136312c3137322c3136312c3137312c3136302c3137302c3135392c3137302c3135382c3137302c3135372c3137302c3135362c3137302c3135352c3137302c3135342c3137302c3135332c3137302c3135322c3137302c3135312c3137302c3135302c3137302c3134392c3137302c3134382c3137302c3134372c3137302c3134362c3137302c3134352c3137302c3134342c3137302c3134332c3137302c3134322c3137302c3134312c3137302c3134302c3137302c3133392c3137302c3133382c3137302c3133372c3137302c3133362c3137302c3133352c3137302c3133342c3137302c3133332c3137302c3133322c3137302c3133312c3137302c3133312c3136392c3133302c3136382c3133302c3136372c3132392c3136362c3132382c3136352c3132372c3136352c3132362c3136352c3132352c3136352c3132342c3136352c3132332c3136352c3132322c3136342c3132312c3136332c3132312c3136322c3132302c3136312c3132302c3136302c3132302c3135392c3132302c3135382c3132302c3135372c3132302c3135362c3132302c3135352c3132302c3135342c3132302c3135332c3132302c3135322c3131392c3135312c3131392c3135302c3131392c3134392c3131392c3134382c3131392c3134372c3131392c3134362c3131392c3134352c3131392c3134342c3131392c3134332c3131392c3134322c3132302c3134322c3132312c3134322c3132322c3134322c3132332c3134322c3132342c3134322c3132352c3134322c3132362c3134322c3132372c3134322c3132382c3134322c3132392c3134322c3133302c3134322c3133312c3134322c3133322c3134322c3133332c3134322c3133342c3134322c3133352c3134322c3133362c3134322c3133372c3134322c3133382c3134322c3133392c3134322c3134302c3134322c3134312c3134322c3134322c3134322c3134332c3134322c3134342c3134322c3134352c3134322c3134362c3134322c3134372c3134322c3134382c3134322c3134392c3134322c3135302c3134322c3135312c3134322c3135322c3134322c3135332c3134322c3135342c3134322c3135352c3134322c3135362c3134322c3135372c3134322c3135382c3134322c3135392c3134322c3136302c3134322c3136312c3134322c3136322c3134322c3136332c3134322c3136342c3134322c3136352c3134322c3136362c3134332c3136362c3134342c3136362c3134352c3136362c3134362c3136362c3134372c3136362c3134382c3136362c3134392c3136362c3135302c3136362c3135312c3136362c3135322c3136362c3135332c3136362c3135342c3136362c3135352c3136362c3135362c3136362c3135372c3136362c3135382c3136362c3135392c3136362c3136302c3136362c3136312c3136362c3136322c3136362c3136332c3136362c3136342c3136362c3136352c3136362c3136362c3136362c3136372c3136362c3136382c3136362c3136392c3136362c3137302c3136352c3137312c3136342c3137322c3136332c3137325d7d2c2237223a7b22636f6f7264696e61746573223a5b3131352c3232322c3131352c3232312c3131352c3232302c3131352c3231392c3131362c3231392c3131372c3231382c3131362c3231372c3131352c3231372c3131352c3231362c3131352c3231352c3131352c3231342c3131352c3231332c3131352c3231322c3131342c3231312c3131342c3231302c3131342c3230392c3131332c3230382c3131322c3230372c3131312c3230372c3131302c3230372c3130392c3230372c3130382c3230372c3130372c3230362c3130362c3230362c3130352c3230362c3130342c3230362c3130332c3230362c3130322c3230362c3130312c3230362c3130302c3230362c39392c3230362c39382c3230352c39372c3230352c39362c3230352c39352c3230352c39342c3230352c39342c3230342c39342c3230332c39342c3230322c39342c3230312c39342c3230302c39342c3139392c39332c3139382c39332c3139372c39342c3139362c39342c3139352c39342c3139342c39342c3139332c39342c3139322c39342c3139312c39342c3139302c39342c3138392c39342c3138382c39342c3138372c39342c3138362c39342c3138352c39342c3138342c39342c3138332c39342c3138322c39342c3138312c39352c3138302c39352c3137392c39352c3137382c39352c3137372c39352c3137362c39352c3137352c39352c3137342c39352c3137332c39352c3137322c39352c3137312c39362c3137302c39362c3136392c39362c3136382c39362c3136372c39362c3136362c39362c3136352c39372c3136352c39382c3136342c39382c3136332c39392c3136322c3130302c3136322c3130312c3136322c3130322c3136322c3130332c3136322c3130342c3136322c3130352c3136332c3130362c3136332c3130372c3136332c3130382c3136332c3130392c3136332c3131302c3136332c3131312c3136332c3131322c3136332c3131332c3136332c3131342c3136332c3131352c3136332c3131362c3136332c3131372c3136332c3131382c3136332c3131392c3136332c3132302c3136322c3132302c3136332c3132302c3136342c3131392c3136342c3131382c3136342c3131372c3136352c3131372c3136362c3131372c3136372c3131372c3136382c3131372c3136392c3131372c3137302c3131372c3137312c3131372c3137322c3131372c3137332c3131372c3137342c3131372c3137352c3131372c3137362c3131372c3137372c3131372c3137382c3131372c3137392c3131372c3138302c3131372c3138312c3131372c3138322c3131382c3138332c3131392c3138332c3132302c3138342c3132312c3138342c3132322c3138342c3132332c3138342c3132342c3138352c3132352c3138352c3132352c3138362c3132352c3138372c3132352c3138382c3132362c3138392c3132372c3139302c3132372c3139312c3132372c3139322c3132372c3139332c3132372c3139342c3132372c3139352c3132372c3139362c3132372c3139372c3132372c3139382c3132372c3139392c3132372c3230302c3132372c3230312c3132372c3230322c3132372c3230332c3132372c3230342c3132372c3230352c3132372c3230362c3132382c3230372c3132392c3230382c3133302c3230392c3132392c3230392c3132382c3230392c3132372c3231302c3132362c3231302c3132352c3231312c3132352c3231322c3132352c3231332c3132352c3231342c3132352c3231352c3132352c3231362c3132352c3231372c3132352c3231382c3132352c3231392c3132342c3232302c3132332c3232302c3132322c3232312c3132312c3232312c3132302c3232322c3131392c3232322c3131382c3232322c3131372c3232322c3131362c3232325d7d2c2238223a7b22636f6f7264696e61746573223a5b31332c3131382c31332c3131372c31332c3131362c31342c3131362c31352c3131362c31362c3131362c31372c3131362c31382c3131352c31372c3131342c31372c3131332c31362c3131322c31352c3131322c31342c3131322c31332c3131332c31332c3131322c31332c3131312c31332c3131302c31332c3130392c31332c3130382c31332c3130372c31332c3130362c31332c3130352c31332c3130342c31332c3130332c31332c3130322c31332c3130312c31332c3130302c31332c39392c31332c39382c31332c39372c31332c39362c31342c39352c31342c39342c31342c39332c31342c39322c31342c39312c31342c39302c31342c38392c31342c38382c31342c38372c31342c38362c31342c38352c31342c38342c31342c38332c31342c38322c31342c38312c31342c38302c31342c37392c31342c37382c31342c37372c31342c37362c31342c37352c31342c37342c31342c37332c31342c37322c31342c37312c31342c37302c31342c36392c31342c36382c31342c36372c31342c36362c31342c36352c31342c36342c31342c36332c31342c36322c31342c36312c31352c36302c31352c35392c31352c35382c31352c35372c31352c35362c31352c35352c31352c35342c31352c35332c31352c35322c31352c35312c31352c35302c31352c34392c31352c34382c31352c34372c31352c34362c31352c34352c31352c34342c31352c34332c31362c34332c31372c34332c31382c34332c31392c34332c32302c34332c32312c34332c32322c34332c32332c34332c32342c34332c32352c34332c32362c34332c32372c34322c32382c34322c32392c34322c33302c34322c33312c34322c33322c34322c33332c34322c33342c34322c33352c34322c33342c34332c33352c34342c33362c34342c33372c34342c33382c34342c33392c34342c34302c34342c34312c34342c34322c34342c34332c34342c34342c34342c34352c34342c34362c34342c34372c34342c34382c34342c34392c34342c35302c34342c35312c34342c35322c34342c35332c34342c35342c34342c35352c34342c35362c34352c35372c34352c35382c34352c35392c34352c36302c34352c36312c34352c36322c34352c36332c34362c36342c34362c36352c34372c36362c34372c36372c34362c36372c34352c36382c34352c36392c34352c37302c34352c37312c34352c37322c34352c37332c34352c37342c34352c37352c34352c37362c34352c37372c34352c37382c34352c37392c34352c38302c34352c38312c34352c38322c34352c38332c34352c38342c34362c38352c34362c38362c34362c38372c34362c38382c34352c38392c34352c39302c34352c39312c34352c39322c34352c39332c34352c39342c34352c39352c34352c39362c34352c39372c34352c39382c34352c39392c34352c3130302c34352c3130312c34352c3130322c34352c3130332c34352c3130332c34362c3130332c34372c3130332c34382c3130332c34392c3130332c35302c3130332c35312c3130332c35322c3130332c35332c3130332c35342c3130332c35352c3130332c35362c3130332c35372c3130332c35382c3130332c35392c3130332c36302c3130332c36312c3130332c36322c3130332c36332c3130332c36342c3130332c36352c3130332c36362c3130332c36372c3130332c36382c3130332c36392c3130332c37302c3130332c37312c3130322c37322c3130312c37332c3130302c37342c39392c37352c3130302c37362c3130312c37372c3130322c37372c3130332c37372c3130332c37382c3130332c37392c3130332c38302c3130332c38312c3130332c38322c3130332c38332c3130332c38342c3130332c38352c3130332c38362c3130332c38372c3130332c38382c3130332c38392c3130332c39302c3130322c39312c3130312c39322c3130302c39332c39392c39342c39392c39352c39382c39352c39372c39362c39362c39372c39352c39372c39342c39372c39332c39372c39322c39382c39312c39382c39302c39382c38392c39382c38382c39392c38372c39392c38362c39392c38352c3130302c38342c3130302c38332c3130302c38322c3130302c38312c3130312c38302c3130312c37392c3130312c37382c3130312c37372c3130322c37362c3130322c37352c3130322c37342c3130322c37332c3130332c37322c3130332c37312c3130332c37302c3130342c36392c3130342c36382c3130342c36372c3130342c36362c3130352c36352c3130352c36342c3130352c36332c3130352c36322c3130362c36312c3130362c36302c3130362c35392c3130372c35382c3130372c35372c3130372c35362c3130372c35352c3130382c35342c3130382c35332c3130382c35322c3130382c35312c3130392c35302c3130392c34392c3130392c34382c3130392c34372c3131302c34362c3131302c34352c3131302c34342c3131302c34332c3131312c34322c3131312c34312c3131312c34302c3131312c33392c3131322c33382c3131322c33372c3131322c33362c3131322c33352c3131332c33342c3131332c33332c3131332c33322c3131332c33312c3131342c33302c3131342c32392c3131342c32382c3131342c32372c3131352c32362c3131352c32352c3131352c32342c3131352c32332c3131362c32322c3131362c32312c3131362c32302c3131362c31392c3131372c31382c3131372c31372c3131372c31362c3131372c31352c3131382c31342c3131385d7d2c2239223a7b22636f6f7264696e61746573223a5b3130352c3136322c3130342c3136312c3130332c3136312c3130322c3136312c3130312c3136312c3130302c3136312c39392c3136312c39382c3136312c39372c3136312c39362c3136312c39352c3136312c39342c3136312c39332c3136312c39322c3136312c39312c3136312c39302c3136312c38392c3136312c38382c3136312c38372c3136312c38362c3136312c38352c3136312c38342c3136312c38332c3136312c38322c3136312c38312c3136312c38302c3136312c37392c3136312c37382c3136312c37372c3136312c37362c3136302c37352c3136302c37342c3136302c37332c3136302c37322c3136302c37312c3136302c37302c3136302c36392c3136302c36382c3136302c36372c3136302c36362c3136302c36352c3136302c36342c3136302c36332c3136302c36322c3136302c36312c3136302c36302c3136302c35392c3136302c35382c3136302c35372c3136302c35362c3136302c35352c3136302c35342c3136302c35332c3136302c35322c3136302c35312c3136302c35302c3136302c34392c3136302c34382c3135392c34372c3135392c34362c3135392c34352c3135392c34342c3135392c34332c3135392c34322c3135392c34312c3135392c34302c3135392c33392c3135392c33382c3135392c33372c3135392c33362c3135392c33352c3135392c33342c3135392c33332c3135392c33322c3135392c33312c3135392c33302c3135392c32392c3135392c32382c3135392c32372c3135392c32362c3135392c32352c3135392c32342c3135392c32332c3135392c32322c3135392c32312c3135392c32302c3135392c31392c3135392c31382c3135392c31372c3135392c31362c3135392c31352c3135392c31342c3135392c31332c3135392c31322c3135392c31312c3135392c31302c3135392c392c3135392c382c3135392c372c3135392c362c3135382c362c3135372c362c3135362c362c3135352c362c3135342c362c3135332c362c3135322c372c3135312c372c3135302c372c3134392c372c3134382c362c3134372c362c3134362c362c3134352c362c3134342c362c3134332c362c3134322c362c3134312c362c3134302c362c3133392c362c3133382c372c3133382c382c3133372c382c3133362c382c3133352c392c3133352c31302c3133352c31302c3133362c31302c3133372c31302c3133382c31302c3133392c31312c3134302c31312c3134312c31312c3134322c31322c3134332c31332c3134332c31342c3134332c31352c3134332c31362c3134332c31372c3134322c31372c3134312c31382c3134302c31392c3133392c32302c3133382c32302c3133372c32312c3133362c32322c3133362c32332c3133362c32342c3133362c32352c3133372c32362c3133382c32372c3133392c32382c3133382c32382c3133372c32372c3133362c32362c3133352c32352c3133342c32342c3133332c32332c3133332c32332c3133322c32332c3133312c32332c3133302c32342c3133302c32352c3133302c32362c3133312c32372c3133312c32382c3133312c32392c3133312c33302c3133312c33312c3133312c33322c3133312c33332c3133312c33342c3133312c33352c3133302c33362c3133302c33372c3133302c33382c3133302c33392c3133302c34302c3133302c34312c3133302c34322c3133302c34332c3133302c34342c3133302c34352c3133302c34362c3133302c34372c3133302c34382c3133302c34392c3132392c35302c3132392c35312c3132392c35322c3132392c35332c3132392c35342c3132392c35352c3132392c35362c3132392c35372c3132392c35382c3132392c35392c3132392c36302c3132392c36312c3132392c36322c3132392c36332c3132382c36342c3132382c36352c3132382c36362c3132382c36372c3132382c36382c3132382c36392c3132382c37302c3132382c37312c3132382c37322c3132382c37332c3132382c37342c3132382c37352c3132382c37362c3132382c37372c3132372c37382c3132372c37392c3132372c38302c3132372c38312c3132372c38322c3132372c38332c3132372c38342c3132372c38352c3132372c38362c3132372c38372c3132372c38382c3132372c38392c3132372c39302c3132372c39312c3132362c39322c3132362c39332c3132362c39342c3132362c39352c3132362c39362c3132362c39362c3132372c39362c3132382c39362c3132392c39362c3133302c39372c3133312c39372c3133322c39372c3133332c39372c3133342c39372c3133352c39382c3133362c39392c3133362c3130302c3133362c3130312c3133362c3130322c3133362c3130332c3133362c3130342c3133362c3130352c3133352c3130352c3133342c3130352c3133332c3130352c3133322c3130352c3133312c3130352c3133302c3130352c3132392c3130362c3132382c3130362c3132372c3130362c3132362c3130362c3132352c3130372c3132342c3130382c3132342c3130392c3132342c3131302c3132342c3131312c3132342c3131322c3132342c3131332c3132332c3131342c3132332c3131352c3132332c3131362c3132332c3131372c3132332c3131382c3132332c3131392c3132332c3132302c3132332c3132312c3132332c3132322c3132332c3132332c3132332c3132342c3132332c3132352c3132332c3132362c3132332c3132372c3132332c3132382c3132322c3132392c3132322c3133302c3132322c3133302c3132332c3133302c3132342c3133302c3132352c3133302c3132362c3133302c3132372c3133302c3132382c3132392c3132392c3133302c3133302c3132392c3133312c3132392c3133322c3132392c3133332c3132392c3133342c3132392c3133352c3132382c3133362c3132372c3133362c3132362c3133372c3132352c3133372c3132342c3133382c3132332c3133382c3132322c3133392c3132312c3133392c3132302c3134302c3131392c3134302c3131382c3134312c3131382c3134322c3131382c3134332c3131382c3134342c3131382c3134352c3131382c3134362c3131382c3134372c3131382c3134382c3131382c3134392c3131382c3135302c3131382c3135312c3131392c3135322c3131392c3135332c3131392c3135342c3131392c3135352c3131392c3135362c3131392c3135372c3131392c3135382c3131392c3135392c3131392c3136302c3131392c3136312c3131392c3136322c3131382c3136322c3131372c3136322c3131362c3136322c3131352c3136322c3131342c3136322c3131332c3136322c3131322c3136322c3131312c3136322c3131302c3136322c3130392c3136322c3130382c3136322c3130372c3136322c3130362c3136325d7d2c223130223a7b22636f6f7264696e61746573223a5b39382c3133352c39382c3133342c39382c3133332c39382c3133322c39382c3133312c39372c3133302c39372c3132392c39372c3132382c39372c3132372c39372c3132362c39362c3132352c39352c3132352c39342c3132352c39332c3132352c39322c3132352c39312c3132352c39302c3132362c38392c3132362c38382c3132362c38372c3132362c38362c3132362c38352c3132362c38342c3132362c38332c3132362c38322c3132362c38312c3132362c38302c3132362c37392c3132362c37382c3132362c37372c3132362c37362c3132372c37352c3132372c37342c3132372c37332c3132372c37322c3132372c37312c3132372c37302c3132372c36392c3132372c36382c3132372c36372c3132372c36362c3132372c36352c3132372c36342c3132372c36332c3132372c36322c3132382c36312c3132382c36302c3132382c35392c3132382c35382c3132382c35372c3132382c35362c3132382c35352c3132382c35342c3132382c35332c3132382c35322c3132382c35312c3132382c35302c3132382c34392c3132382c34382c3132392c34372c3132392c34362c3132392c34352c3132392c34342c3132392c34332c3132392c34322c3132392c34312c3132392c34302c3132392c33392c3132392c33382c3132392c33372c3132392c33362c3132392c33352c3132392c33342c3133302c33332c3133302c33322c3133302c33312c3133302c33302c3133302c32392c3133302c32382c3133302c32372c3133302c32362c3133302c32352c3132392c32342c3132392c32332c3132392c32322c3132392c32312c3132392c32302c3132382c31392c3132382c31382c3132382c31372c3132382c31362c3132382c31352c3132372c31342c3132372c31332c3132372c31332c3132362c31332c3132352c31332c3132342c31332c3132332c31332c3132322c31332c3132312c31332c3132302c31332c3131392c31342c3131392c31352c3131392c31362c3131382c31372c3131382c31382c3131382c31392c3131382c32302c3131372c32312c3131372c32322c3131372c32332c3131372c32342c3131362c32352c3131362c32362c3131362c32372c3131362c32382c3131352c32392c3131352c33302c3131352c33312c3131352c33322c3131342c33332c3131342c33342c3131342c33352c3131342c33362c3131332c33372c3131332c33382c3131332c33392c3131332c34302c3131322c34312c3131322c34322c3131322c34332c3131322c34342c3131312c34352c3131312c34362c3131312c34372c3131312c34382c3131302c34392c3131302c35302c3131302c35312c3131302c35322c3130392c35332c3130392c35342c3130392c35352c3130392c35362c3130382c35372c3130382c35382c3130382c35392c3130382c36302c3130372c36312c3130372c36322c3130372c36332c3130362c36342c3130362c36352c3130362c36362c3130362c36372c3130352c36382c3130352c36392c3130352c37302c3130352c37312c3130342c37322c3130342c37332c3130342c37342c3130332c37352c3130332c37362c3130332c37372c3130332c37382c3130322c37392c3130322c38302c3130322c38312c3130322c38322c3130312c38332c3130312c38342c3130312c38352c3130312c38362c3130302c38372c3130302c38382c3130302c38392c39392c39302c39392c39312c39392c39322c39392c39332c39382c39342c39382c39352c39382c39362c39382c39372c39372c39382c39362c39392c39362c39392c39372c39392c39382c39392c39392c39392c3130302c39392c3130312c39392c3130322c39392c3130332c39392c3130342c39392c3130352c39392c3130362c39392c3130372c39392c3130382c39392c3130392c39392c3131302c39392c3131312c39392c3131322c39392c3131332c39392c3131342c39392c3131352c39392c3131362c3130302c3131372c3130302c3131382c3130302c3131392c3130302c3132302c3130302c3132312c3130302c3132322c3130312c3132332c3130322c3132332c3130332c3132322c3130342c3132312c3130342c3132302c3130342c3131392c3130342c3131382c3130342c3131372c3130342c3131362c3130342c3131352c3130342c3131342c3130342c3131332c3130342c3131322c3130352c3131322c3130362c3131322c3130372c3131322c3130382c3131322c3130392c3131322c3131302c3131312c3131302c3131302c3131312c3130392c3131322c3130382c3131332c3130382c3131342c3130382c3131352c3130382c3131362c3130382c3131372c3130382c3131382c3130382c3131392c3130382c3132302c3130382c3132312c3130382c3132322c3130382c3132332c3130382c3132342c3130382c3132352c3130382c3132362c3130382c3132372c3130382c3132382c3130372c3132382c3130362c3132392c3130352c3132392c3130342c3132392c3130332c3133302c3130332c3133312c3130322c3133322c3130322c3133332c3130312c3133342c3130312c3133352c3130302c3133362c3130302c3133372c3130302c3133382c3130302c3133392c3130302c3134302c3130302c3134312c3130302c3134322c3130312c3134322c3130322c3134332c3130332c3134332c3130342c3134342c3130352c3134342c3130362c3134352c3130372c3134362c3130372c3134372c3130372c3134382c3130372c3134392c3130372c3135302c3130372c3134392c3130382c3134382c3130392c3134372c3131302c3134362c3131312c3134352c3131322c3134342c3131332c3134332c3131342c3134322c3131342c3134312c3131352c3134302c3131362c3133392c3131372c3133382c3131382c3133372c3131392c3133362c3132302c3133352c3132312c3133342c3132312c3133332c3132312c3133322c3132312c3133312c3132312c3133302c3132312c3132392c3132312c3132382c3132312c3132372c3132322c3132362c3132322c3132352c3132322c3132342c3132322c3132332c3132322c3132322c3132322c3132312c3132322c3132302c3132322c3131392c3132322c3131382c3132322c3131372c3132322c3131362c3132322c3131352c3132322c3131342c3132322c3131332c3132322c3131322c3132332c3131312c3132332c3131302c3132332c3130392c3132332c3130382c3132332c3130372c3132332c3130362c3132342c3130352c3132352c3130352c3132362c3130352c3132372c3130352c3132382c3130342c3132392c3130342c3133302c3130342c3133312c3130342c3133322c3130342c3133332c3130342c3133342c3130342c3133352c3130332c3133352c3130322c3133352c3130312c3133352c3130302c3133352c39392c3133355d7d2c223131223a7b22636f6f7264696e61746573223a5b3133382c3332392c3133382c3332382c3133372c3332372c3133362c3332362c3133362c3332352c3133352c3332342c3133352c3332332c3133352c3332322c3133352c3332312c3133342c3332302c3133342c3331392c3133342c3331382c3133332c3331372c3133332c3331362c3133332c3331352c3133332c3331342c3133322c3331332c3133322c3331322c3133322c3331312c3133312c3331302c3133312c3330392c3133312c3330382c3133312c3330372c3133302c3330362c3133302c3330352c3133302c3330342c3133302c3330332c3132392c3330322c3132392c3330312c3132392c3330302c3132382c3239392c3132382c3239382c3132382c3239372c3132382c3239362c3132372c3239352c3132362c3239342c3132352c3239342c3132342c3239332c3132332c3239332c3132322c3239332c3132312c3239332c3132302c3239332c3131392c3239322c3131382c3239322c3131372c3239322c3131372c3239312c3131372c3239302c3131372c3238392c3131382c3238382c3131382c3238372c3131382c3238362c3131372c3238352c3131362c3238342c3131362c3238332c3131362c3238322c3131352c3238312c3131352c3238302c3131342c3237392c3131342c3237382c3131332c3237372c3131322c3237372c3131312c3237372c3131302c3237372c3130392c3237372c3130382c3237372c3130372c3237372c3130362c3237372c3130352c3237372c3130342c3237372c3130332c3237382c3130332c3237392c3130322c3238302c3130322c3238312c3130312c3238322c3130312c3238332c3130302c3238342c39392c3238342c39382c3238342c39372c3238342c39362c3238352c39352c3238352c39342c3238352c39332c3238352c39322c3238352c39312c3238352c39302c3238352c38392c3238362c39302c3238372c39302c3238382c39302c3238392c38392c3239302c38382c3239302c38372c3239312c38372c3239322c38372c3239332c38372c3239342c38372c3239352c38362c3239362c38362c3239372c38362c3239382c38362c3239392c38352c3330302c38352c3330312c38352c3330322c38352c3330332c38352c3330342c38352c3330352c38342c3330362c38342c3330372c38342c3330382c38342c3330392c38342c3331302c38342c3331312c38342c3331322c38342c3331332c38332c3331342c38332c3331352c38332c3331362c38332c3331372c38332c3331382c38322c3331392c38322c3332302c38322c3332312c38312c3332312c38302c3332312c37392c3332312c37392c3332302c37382c3331392c37382c3331382c37382c3331372c37382c3331362c37372c3331352c37372c3331342c37372c3331332c37372c3331322c37372c3331312c37372c3331302c37382c3330392c37372c3330382c37362c3330372c37352c3330362c37352c3330352c37352c3330342c37352c3330332c37352c3330322c37352c3330312c37362c3330312c37372c3330302c37372c3239392c37372c3239382c37372c3239372c37382c3239362c37382c3239352c37372c3239342c37372c3239332c37362c3239322c37362c3239312c37352c3239302c37352c3238392c37362c3238382c37352c3238372c37352c3238362c37352c3238352c37362c3238342c37372c3238342c37382c3238332c37382c3238322c37372c3238312c37372c3238302c37372c3237392c37372c3237382c37372c3237372c37372c3237362c37372c3237352c37372c3237342c37372c3237332c37362c3237322c37362c3237312c37352c3237302c37342c3237302c37332c3237312c37322c3237322c37322c3237332c37322c3237342c37312c3237352c37312c3237362c37312c3237372c37302c3237372c36392c3237382c36382c3237392c36372c3237392c36362c3237392c36352c3237392c36342c3237392c36332c3237382c36322c3237382c36312c3237372c36302c3237372c36302c3237362c36302c3237352c36302c3237342c36302c3237332c36302c3237322c36302c3237312c36302c3237302c35392c3236392c35382c3236392c35372c3236392c35362c3236392c35352c3236392c35342c3236392c35332c3236392c35322c3236392c35312c3236392c35302c3236392c34392c3236392c34382c3236392c34372c3236392c34362c3236392c34352c3236392c34342c3236392c34332c3236392c34322c3236392c34312c3236392c34302c3236392c33392c3236392c33382c3236392c33372c3236392c33362c3236392c33352c3236392c33342c3236392c33332c3236392c33322c3236392c33312c3236392c33302c3236392c32392c3236392c32382c3236392c32372c3236392c32362c3236392c32352c3236392c32342c3236392c32332c3236392c32322c3236392c32312c3236392c32302c3236392c31392c3236392c31382c3236392c31372c3236392c31362c3237302c31362c3237312c31362c3237322c31362c3237332c31362c3237342c31352c3237352c31352c3237362c31352c3237372c31352c3237382c31352c3237392c31352c3238302c31352c3238312c31342c3238312c31332c3238312c31322c3238312c31312c3238312c31302c3238312c392c3238312c382c3238312c372c3238312c362c3238312c352c3238312c342c3238312c332c3238312c332c3238302c332c3237392c332c3237382c332c3237372c332c3237362c332c3237352c332c3237342c332c3237332c332c3237322c332c3237312c332c3237302c332c3236392c332c3236382c332c3236372c332c3236362c332c3236352c332c3236342c332c3236332c332c3236322c332c3236312c332c3236302c332c3235392c332c3235382c332c3235372c332c3235362c332c3235352c332c3235342c332c3235332c332c3235322c332c3235312c332c3235302c332c3234392c332c3234382c332c3234372c332c3234362c332c3234352c332c3234342c332c3234332c332c3234322c332c3234312c332c3234302c332c3233392c332c3233382c332c3233372c332c3233362c332c3233352c332c3233342c332c3233332c332c3233322c332c3233312c332c3233302c332c3232392c332c3232382c332c3232372c342c3232372c352c3232372c362c3232372c372c3232372c382c3232372c392c3232372c31302c3232372c31312c3232372c31322c3232372c31332c3232372c31342c3232372c31352c3232372c31362c3232372c31372c3232372c31382c3232372c31392c3232372c32302c3232372c32312c3232372c32322c3232372c32332c3232372c32342c3232372c32352c3232372c32362c3232372c32372c3232372c32382c3232372c32392c3232372c33302c3232372c33312c3232372c33322c3232372c33332c3232372c33342c3232372c33352c3232372c33362c3232372c33372c3232372c33382c3232372c33392c3232372c34302c3232372c34312c3232372c34322c3232372c34332c3232372c34342c3232372c34352c3232372c34362c3232372c34372c3232372c34382c3232372c34392c3232372c35302c3232372c35312c3232372c35322c3232372c35332c3232372c35342c3232372c35352c3232372c35362c3232372c35372c3232372c35382c3232372c35392c3232372c36302c3232372c36312c3232372c36322c3232372c36332c3232372c36342c3232372c36352c3232372c36362c3232372c36372c3232372c36382c3232372c36392c3232372c37302c3232372c37312c3232372c37322c3232372c37332c3232372c37342c3232372c37352c3232372c37362c3232372c37372c3232372c37382c3232372c37392c3232372c38302c3232372c38312c3232372c38322c3232372c38332c3232372c38342c3232372c38352c3232372c38362c3232372c38372c3232372c38382c3232372c38392c3232372c39302c3232372c39312c3232372c39322c3232372c39332c3232372c39342c3232372c39352c3232372c39362c3232372c39372c3232372c39382c3232372c39392c3232372c3130302c3232372c3130312c3232372c3130322c3232372c3130332c3232372c3130342c3232372c3130352c3232372c3130362c3232372c3130372c3232372c3130382c3232372c3130392c3232372c3131302c3232372c3131312c3232372c3131322c3232372c3131322c3232382c3131312c3232382c3131302c3232382c3130392c3232382c3130382c3232382c3130372c3232382c3130362c3232392c3130352c3232392c3130342c3232392c3130332c3232392c3130322c3233302c3130312c3233312c3130312c3233322c3130322c3233332c3130322c3233342c3130322c3233352c3130322c3233362c3130332c3233372c3130332c3233382c3130342c3233392c3130352c3233392c3130362c3233392c3130372c3233392c3130382c3233392c3130392c3233392c3131302c3233392c3131312c3233392c3131322c3233382c3131322c3233372c3131332c3233362c3131332c3233352c3131342c3233342c3131342c3233332c3131352c3233322c3131362c3233322c3131372c3233322c3131382c3233322c3131392c3233322c3132302c3233322c3132312c3233322c3132322c3233322c3132332c3233322c3132332c3233332c3132342c3233342c3132342c3233352c3132342c3233362c3132342c3233372c3132352c3233382c3132362c3233382c3132372c3233382c3132382c3233382c3132392c3233382c3133302c3233382c3133312c3233382c3133322c3233382c3133332c3233382c3133342c3233382c3133352c3233382c3133362c3233382c3133372c3233382c3133382c3233382c3133392c3233382c3134302c3233382c3134312c3233382c3134322c3233372c3134332c3233372c3134342c3233372c3134352c3233362c3134362c3233362c3134372c3233362c3134382c3233362c3134392c3233362c3135302c3233362c3135312c3233372c3135322c3233372c3135332c3233372c3135342c3233372c3135352c3233372c3135362c3233362c3135372c3233362c3135382c3233362c3135392c3233362c3136302c3233362c3136312c3233362c3136322c3233362c3136332c3233362c3136332c3233372c3136342c3233382c3136342c3233392c3136342c3234302c3136342c3234312c3136332c3234312c3136322c3234312c3136312c3234312c3136302c3234312c3135392c3234312c3135382c3234312c3135372c3234312c3135362c3234312c3135352c3234312c3135342c3234312c3135332c3234312c3135322c3234312c3135312c3234322c3135312c3234332c3135302c3234342c3134392c3234352c3134382c3234352c3134372c3234352c3134362c3234362c3134352c3234362c3134342c3234362c3134332c3234362c3134322c3234362c3134312c3234372c3134302c3234372c3133392c3234382c3133392c3234392c3133392c3235302c3133392c3235312c3133392c3235322c3133392c3235332c3134302c3235342c3134302c3235352c3134302c3235362c3134302c3235372c3134302c3235382c3134302c3235392c3134302c3236302c3134302c3236312c3134302c3236322c3134302c3236332c3134302c3236342c3134302c3236352c3134302c3236362c3134302c3236372c3134302c3236382c3134302c3236392c3134302c3237302c3134302c3237312c3134302c3237322c3134302c3237332c3134302c3237342c3134302c3237352c3134302c3237362c3134302c3237372c3134302c3237382c3134302c3237392c3133392c3237392c3133382c3238302c3133372c3238302c3133362c3238302c3133352c3238302c3133342c3238312c3133332c3238312c3133322c3238312c3133312c3238312c3133302c3238322c3133312c3238332c3133322c3238332c3133332c3238332c3133342c3238332c3133352c3238332c3133362c3238332c3133372c3238332c3133372c3238342c3133382c3238352c3133392c3238352c3134302c3238362c3134312c3238372c3134312c3238382c3134312c3238392c3134302c3239302c3134302c3239312c3133392c3239302c3133382c3239302c3133372c3238392c3133372c3238382c3133362c3238372c3133352c3238382c3133352c3238392c3133352c3239302c3133342c3239302c3133332c3239312c3133342c3239322c3133342c3239332c3133342c3239342c3133352c3239352c3133352c3239362c3133352c3239372c3133362c3239382c3133362c3239392c3133372c3330302c3133372c3330312c3133372c3330322c3133382c3330332c3133382c3330342c3133382c3330352c3133392c3330362c3133392c3330372c3134302c3330382c3134302c3330392c3134302c3331302c3134302c3331312c3134302c3331322c3134302c3331332c3134302c3331342c3134302c3331352c3134302c3331362c3134302c3331372c3134302c3331382c3134312c3331392c3134312c3332302c3134312c3332312c3134312c3332322c3134312c3332332c3134312c3332342c3134312c3332352c3134312c3332362c3134312c3332372c3134312c3332382c3134312c3332392c3134302c3332392c3133392c3332395d7d2c223132223a7b22636f6f7264696e61746573223a5b36312c3230352c36302c3230342c35392c3230332c35382c3230322c35382c3230312c35372c3230302c35362c3139392c35352c3230302c35342c3230312c35342c3230322c35332c3230332c35322c3230342c35312c3230342c35302c3230342c34392c3230342c34382c3230342c34372c3230342c34362c3230342c34362c3230332c34362c3230322c34362c3230312c34362c3230302c34362c3139392c34362c3139382c34362c3139372c34362c3139362c34362c3139352c34362c3139342c34362c3139332c34362c3139322c34362c3139312c34362c3139302c34362c3138392c34362c3138382c34362c3138372c34362c3138362c34362c3138352c34362c3138342c34362c3138332c34362c3138322c34362c3138312c34362c3138302c34362c3137392c34362c3137382c34362c3137372c34362c3137362c34362c3137352c34362c3137342c34362c3137332c34362c3137322c34362c3137312c34362c3137302c34362c3136392c34362c3136382c34362c3136372c34362c3136362c34362c3136352c34372c3136352c34382c3136352c34392c3136352c35302c3136352c35312c3136352c35322c3136352c35332c3136352c35342c3136352c35352c3136352c35362c3136352c35372c3136352c35382c3136352c35392c3136352c36302c3136352c36312c3136352c36322c3136352c36332c3136352c36342c3136352c36352c3136352c36362c3136352c36372c3136352c36382c3136352c36392c3136352c37302c3136352c37312c3136352c37322c3136352c37332c3136352c37342c3136352c37352c3136352c37362c3136352c37372c3136352c37382c3136352c37392c3136352c38302c3136352c38312c3136352c38322c3136352c38332c3136352c38342c3136352c38352c3136352c38362c3136352c38372c3136352c38382c3136352c38392c3136352c39302c3136352c39302c3136362c39302c3136372c39302c3136382c39302c3136392c39302c3137302c39302c3137312c39312c3137322c39312c3137332c39312c3137342c39312c3137352c39312c3137362c39312c3137372c39312c3137382c39312c3137392c39312c3138302c39312c3138312c39312c3138322c39312c3138332c39312c3138342c39322c3138352c39322c3138362c39322c3138372c39322c3138382c39322c3138392c39332c3139302c39332c3139312c39332c3139322c39332c3139332c39332c3139342c39332c3139352c39332c3139362c39322c3139372c39322c3139382c39332c3139392c39332c3230302c39332c3230312c39332c3230322c39332c3230332c39332c3230342c39332c3230352c39322c3230352c39312c3230352c39302c3230352c38392c3230352c38382c3230352c38372c3230352c38362c3230352c38352c3230352c38342c3230352c38332c3230352c38322c3230352c38312c3230352c38302c3230352c37392c3230352c37382c3230352c37372c3230352c37362c3230352c37352c3230352c37352c3230342c37352c3230332c37352c3230322c37342c3230312c37342c3230302c37342c3139392c37342c3139382c37342c3139372c37342c3139362c37342c3139352c37342c3139342c37332c3139332c37332c3139322c37332c3139312c37332c3139302c37332c3138392c37332c3138382c37322c3138372c37312c3138382c37312c3138392c37312c3139302c37312c3139312c37312c3139322c37312c3139332c37312c3139342c37312c3139352c37312c3139362c37312c3139372c37312c3139382c37312c3139392c37302c3230302c37302c3230312c37302c3230322c37302c3230332c37302c3230342c37302c3230352c36392c3230352c36382c3230352c36372c3230352c36362c3230352c36352c3230352c36342c3230352c36332c3230352c36322c3230355d7d7d2c2276657273696f6e223a22312e302e30227d",test20260129_map2:"7b226964223a332c22737461747573223a312c227265736f6c7574696f6e223a352c2273697a65223a5b3333332c3235325d2c226f726967696e223a5b3130392c3139325d2c2263686172676572223a7b22636f6f7264696e617465223a5b38352c34355d2c22616e676c65223a307d2c22636172706574223a5b7b22636f6f7264696e61746573223a5b5d2c227479706573223a307d5d2c226f62737461636c6573223a5b7b22636f6f7264696e61746573223a5b392c332c31302c332c34302c382c33362c392c33372c392c33382c392c33392c392c33382c31302c31392c31322c32362c31332c33302c31332c31332c34322c31342c34322c31352c34322c31362c34322c31372c34322c31382c34322c31392c34322c32302c34322c32312c34322c32322c34322c32332c34322c32342c34322c32352c34322c32362c34322c31332c34332c32302c34332c32312c34332c32322c34332c32332c34332c32342c34332c32352c34332c32362c34332c32372c34332c32382c34332c32392c34332c33302c34332c33312c34332c33322c34332c33332c34332c33342c34332c33352c34332c33362c34332c33372c34332c33382c34332c33392c34332c34302c34332c34312c34332c34322c34332c34332c34332c34342c34332c34352c34332c34362c34332c34372c34332c34382c34332c34392c34332c35302c34332c35312c34332c35322c34332c35332c34332c31332c34342c33392c34342c34302c34342c34312c34342c34322c34342c34332c34342c34342c34342c34352c34342c34362c34342c34372c34342c34382c34342c35322c34342c35332c34342c35342c34342c35352c34342c35362c34342c35372c34342c35382c34342c35392c34342c36302c34342c36312c34342c36322c34342c36332c34342c36362c34342c36372c34342c36382c34342c36392c34342c37302c34342c37312c34342c37322c34342c37332c34342c37342c34342c37352c34342c37362c34342c37372c34342c37382c34342c37392c34342c38302c34342c38312c34342c38322c34342c38332c34342c38342c34342c38372c34342c38382c34342c38392c34342c39302c34342c39312c34342c39322c34342c39332c34342c39342c34342c39352c34342c39362c34342c39372c34342c39382c34342c39392c34342c3130302c34342c3130312c34342c3130322c34342c3130332c34342c3130342c34342c31332c34352c36332c34352c36362c34352c38342c34352c38352c34352c38362c34352c38372c34352c3130342c34352c31332c34362c36332c34362c36362c34362c3130342c34362c31332c34372c36332c34372c36342c34372c36352c34372c36362c34372c3130342c34372c31332c34382c36372c34382c36382c34382c3130342c34382c31332c34392c36372c34392c36382c34392c3130342c34392c31332c35302c36322c35302c36372c35302c36382c35302c3130342c35302c31332c35312c36322c35312c36362c35312c36372c35312c36382c35312c3130342c35312c31332c35322c36332c35322c36342c35322c36352c35322c36362c35322c36372c35322c3130342c35322c31332c35332c36342c35332c36352c35332c36362c35332c3130342c35332c31332c35342c3130342c35342c31332c35352c3130342c35352c31332c35362c3130342c35362c31332c35372c3130342c35372c31332c35382c3130342c35382c31332c35392c3130342c35392c31332c36302c3130342c36302c31332c36312c3130342c36312c31332c36322c3130342c36322c31332c36332c3130342c36332c31332c36342c3130342c36342c31332c36352c3130342c36352c31332c36362c3130342c36362c31332c36372c3130342c36372c31332c36382c3130342c36382c31332c36392c3130342c36392c31332c37302c3130342c37302c31332c37312c3130342c37312c31332c37322c3130302c37322c3130312c37322c3130322c37322c3130332c37322c3130342c37322c31332c37332c3130302c37332c31332c37342c3130302c37342c31332c37352c39342c37352c3130302c37352c31332c37362c39352c37362c3130302c37362c3130312c37362c3130322c37362c3130332c37362c31332c37372c3130332c37372c31332c37382c3130332c37382c31332c37392c3130332c37392c31332c38302c3130332c38302c31332c38312c35392c38312c36302c38312c36382c38312c36392c38312c3130332c38312c31332c38322c36382c38322c3130332c38322c31332c38332c3130332c38332c31332c38342c3130332c38342c31332c38352c3130332c38352c31332c38362c3130332c38362c31332c38372c3130332c38372c31332c38382c3130332c38382c31332c38392c3130332c38392c31332c39302c35392c39302c36302c39302c36372c39302c36382c39302c36392c39302c3130332c39302c31332c39312c35332c39312c35342c39312c3130302c39312c3130312c39312c3130322c39312c3130332c39312c3130342c39312c31332c39322c34342c39322c34352c39322c35332c39322c35342c39322c38332c39322c3130302c39322c31332c39332c38322c39332c38332c39332c3130302c39332c31332c39342c35372c39342c35382c39342c3130302c39342c31332c39352c35372c39352c3130302c39352c31332c39362c35372c39362c3130302c39362c31332c39372c3130302c39372c31332c39382c3130302c39382c31332c39392c3130302c39392c31332c3130302c35332c3130302c3130302c3130302c31332c3130312c34342c3130312c35322c3130312c35332c3130312c37342c3130312c38332c3130312c3130302c3130312c3133322c3130312c3133332c3130312c3133342c3130312c31332c3130322c35332c3130322c35342c3130322c37332c3130322c37342c3130322c38332c3130322c3130302c3130322c31332c3130332c35332c3130332c35342c3130332c35392c3130332c36302c3130332c36382c3130332c37332c3130332c37342c3130332c3130302c3130332c31332c3130342c35392c3130342c36372c3130342c36382c3130342c39342c3130342c3130302c3130342c31332c3130352c39332c3130352c3130302c3130352c31332c3130362c39332c3130362c39372c3130362c39382c3130362c39392c3130362c3130302c3130362c31332c3130372c39332c3130372c3130302c3130372c3131312c3130372c3131322c3130372c3131332c3130372c3131342c3130372c3131352c3130372c3131362c3130372c3131372c3130372c3131382c3130372c3131392c3130372c3132302c3130372c3132312c3130372c3132322c3130372c3132332c3130372c3132342c3130372c3132352c3130372c3132362c3130372c3132372c3130372c3132382c3130372c3132392c3130372c3133302c3130372c31332c3130382c34372c3130382c34382c3130382c39342c3130382c39352c3130382c3130302c3130382c3131312c3130382c3131382c3130382c3133302c3130382c3133312c3130382c3136312c3130382c31332c3130392c39352c3130392c3130302c3130392c3131312c3130392c3133302c3130392c3133312c3130392c31332c3131302c3130302c3131302c3131302c3131302c3131312c3131302c3133302c3131302c3133312c3131302c31332c3131312c3130302c3131312c3130332c3131312c3130342c3131312c3130352c3131312c3130362c3131312c3130372c3131312c3130382c3131312c3130392c3131312c3131302c3131312c3133302c3131312c3133312c3131312c31332c3131322c31372c3131322c31382c3131322c31392c3131322c35382c3131322c35392c3131322c3130302c3131322c3130332c3131322c3133312c3131322c31332c3131332c31342c3131332c31352c3131332c31362c3131332c31372c3131332c31392c3131332c35392c3131332c3130302c3131332c3130332c3131332c3132322c3131332c3133312c3131332c31382c3131342c31392c3131342c3130302c3131342c3130332c3131342c3132322c3131342c3133312c3131342c31322c3131352c31332c3131352c31342c3131352c31352c3131352c31362c3131352c31372c3131352c31382c3131352c3130302c3131352c3130332c3131352c3132332c3131352c3132342c3131352c3133312c3131352c3137302c3131352c3137312c3131352c31332c3131362c31362c3131362c3130302c3131362c3130332c3131362c3133312c3131362c3137302c3131362c31332c3131372c3130302c3131372c3130332c3131372c3133312c3131372c3137302c3131372c31332c3131382c3130302c3131382c3130332c3131382c3133312c3131382c3137302c3131382c31332c3131392c3130302c3131392c3130332c3131392c3133312c3131392c3133322c3131392c31332c3132302c3130302c3132302c3130332c3132302c3133312c3132302c3133322c3132302c3137302c3132302c31332c3132312c3130302c3132312c3130332c3132312c3133312c3132312c3133322c3132312c3137302c3132312c31332c3132322c3130302c3132322c3130332c3132322c3133312c3132322c3133322c3132322c3136362c3132322c3137302c3132322c31332c3132332c3130302c3132332c3130332c3132332c3133312c3132332c3133322c3132332c3136362c3132332c3137302c3132332c31332c3132342c3130302c3132342c3130332c3132342c3133312c3132342c3133322c3132342c3137302c3132342c31332c3132352c3130302c3132352c3130332c3132352c3133312c3132352c3133322c3132352c3137302c3132352c31332c3132362c31372c3132362c3130302c3132362c3130332c3132362c3133312c3132362c3133322c3132362c3137302c3132362c31332c3132372c31372c3132372c3130302c3132372c3130332c3132372c3133312c3132372c3133322c3132372c3136362c3132372c31322c3132382c31332c3132382c31342c3132382c31352c3132382c31362c3132382c31372c3132382c31382c3132382c31392c3132382c32302c3132382c32312c3132382c34332c3132382c34342c3132382c38322c3132382c38332c3132382c3130302c3132382c3130332c3132382c3133312c3132382c32312c3132392c32322c3132392c34332c3132392c38322c3132392c38332c3132392c3130302c3132392c3130332c3132392c3133302c3132392c3133312c3132392c32322c3133302c3130302c3133302c3130332c3133302c3133312c3133302c32322c3133312c3130302c3133312c3130332c3133312c32322c3133322c3130302c3133322c3130332c3133322c32322c3133332c3130302c3133332c3130332c3133332c32322c3133342c32332c3133342c32342c3133342c39392c3133342c3130302c3133342c3130312c3133342c3130322c3133342c3130332c3133342c3133332c3133342c32322c3133352c32332c3133352c32342c3133352c32352c3133352c3133322c3133352c3133332c3133352c32352c3133362c32362c3133362c3132362c3133362c362c3133372c372c3133372c32362c3133372c32372c3133372c32382c3133372c3132362c3133372c32372c3133382c32382c3133382c32392c3133382c3131392c3133382c3132302c3133382c3132312c3133382c3132322c3133382c3132332c3133382c3132342c3133382c3132352c3133382c3132362c3133382c32382c3133392c32392c3133392c33302c3133392c34332c3133392c34342c3133392c38332c3133392c3131382c3133392c3131392c3133392c32382c3134302c33302c3134302c34332c3134302c34342c3134302c38312c3134302c38322c3134302c38332c3134302c3131382c3134302c352c3134312c32382c3134312c33302c3134312c33312c3134312c3131382c3134312c3131392c3134312c3132302c3134312c3132312c3134312c3132322c3134312c3132332c3134312c3132342c3134312c3132352c3134312c3132362c3134312c3132372c3134312c3132382c3134312c3132392c3134312c3133302c3134312c3133312c3134312c3133322c3134312c3133332c3134312c3133342c3134312c3133352c3134312c3133362c3134312c3133382c3134312c3133392c3134312c3134302c3134312c3134312c3134312c3134322c3134312c3134332c3134312c3134342c3134312c3134352c3134312c3134362c3134312c3134372c3134312c3134382c3134312c3134392c3134312c3135302c3134312c3135312c3134312c3135322c3134312c3135332c3134312c3135342c3134312c3135352c3134312c3135362c3134312c3135372c3134312c3135382c3134312c3135392c3134312c3136302c3134312c3136312c3134312c3136322c3134312c3136332c3134312c3136342c3134312c3136352c3134312c3136362c3134312c352c3134322c32312c3134322c32352c3134322c32362c3134322c32372c3134322c32382c3134322c33312c3134322c33322c3134322c3133362c3134322c3133372c3134322c3133382c3134322c3136362c3134322c352c3134332c32302c3134332c32312c3134332c32322c3134332c32332c3134332c32342c3134332c32352c3134332c32362c3134332c32372c3134332c32382c3134332c32392c3134332c33302c3134332c33312c3134332c33322c3134332c33332c3134332c3136362c3134332c352c3134342c32302c3134342c32312c3134342c3136362c3134342c352c3134352c31392c3134352c32302c3134352c32312c3134352c3136362c3134352c352c3134362c31392c3134362c32312c3134362c3136362c3134362c352c3134372c31312c3134372c31322c3134372c31332c3134372c31342c3134372c31352c3134372c31362c3134372c31372c3134372c31382c3134372c31392c3134372c32312c3134372c3136362c3134372c352c3134382c362c3134382c31382c3134382c31392c3134382c32302c3134382c32312c3134382c3136362c3134382c362c3134392c32302c3134392c3136362c3134392c362c3135302c32302c3135302c3136362c3135302c352c3135312c362c3135312c32302c3135312c3136362c3135312c352c3135322c32302c3135322c3136362c3135322c352c3135332c32302c3135332c3134352c3135332c3136362c3135332c3136372c3135332c3136382c3135332c352c3135342c3134352c3135342c3136382c3135342c352c3135352c3134372c3135352c3136382c3135352c352c3135362c3136382c3135362c352c3135372c3136382c3135372c352c3135382c362c3135382c3136382c3135382c362c3135392c34352c3135392c3136382c3135392c362c3136302c372c3136302c382c3136302c392c3136302c31302c3136302c31312c3136302c31322c3136302c31332c3136302c31342c3136302c31352c3136302c31362c3136302c31372c3136302c31382c3136302c31392c3136302c32302c3136302c32312c3136302c32322c3136302c32332c3136302c32342c3136302c32352c3136302c32362c3136302c32372c3136302c32382c3136302c32392c3136302c33302c3136302c33312c3136302c33322c3136302c33332c3136302c33342c3136302c33352c3136302c33362c3136302c33372c3136302c33382c3136302c33392c3136302c34302c3136302c34312c3136302c34322c3136302c34332c3136302c34342c3136302c34352c3136302c34362c3136302c34372c3136302c34382c3136302c34392c3136302c35302c3136302c35312c3136302c35322c3136302c35332c3136302c35342c3136302c35352c3136302c35362c3136302c35372c3136302c35382c3136302c35392c3136302c36302c3136302c36312c3136302c36322c3136302c36332c3136302c36342c3136302c36352c3136302c36362c3136302c36372c3136302c36382c3136302c36392c3136302c37302c3136302c37312c3136302c37322c3136302c37332c3136302c37342c3136302c37352c3136302c37362c3136302c37372c3136302c37382c3136302c37392c3136302c38302c3136302c38312c3136302c38322c3136302c38332c3136302c38342c3136302c38352c3136302c38362c3136302c38372c3136302c38382c3136302c38392c3136302c39302c3136302c39312c3136302c39322c3136302c39332c3136302c39342c3136302c39352c3136302c39362c3136302c39372c3136302c39382c3136302c3136382c3136302c39382c3136312c39392c3136312c3132312c3136312c3136382c3136312c39382c3136322c3132312c3136322c3136382c3136322c39382c3136332c3132312c3136332c3132322c3136332c3136382c3136332c362c3136342c372c3136342c382c3136342c392c3136342c31302c3136342c31312c3136342c31322c3136342c31332c3136342c31342c3136342c31352c3136342c31362c3136342c31372c3136342c31382c3136342c31392c3136342c32302c3136342c32312c3136342c32322c3136342c32332c3136342c32342c3136342c32352c3136342c32362c3136342c32372c3136342c32382c3136342c32392c3136342c33302c3136342c33312c3136342c33322c3136342c33332c3136342c33342c3136342c33352c3136342c33362c3136342c33372c3136342c33382c3136342c33392c3136342c34302c3136342c34312c3136342c34322c3136342c34332c3136342c34342c3136342c34352c3136342c34362c3136342c34372c3136342c34382c3136342c34392c3136342c35302c3136342c35312c3136342c35322c3136342c35332c3136342c35342c3136342c35352c3136342c35362c3136342c35372c3136342c35382c3136342c35392c3136342c36302c3136342c36312c3136342c36322c3136342c36332c3136342c36342c3136342c36352c3136342c36362c3136342c36372c3136342c36382c3136342c36392c3136342c37302c3136342c37312c3136342c37322c3136342c37332c3136342c37342c3136342c37352c3136342c37362c3136342c37372c3136342c37382c3136342c37392c3136342c38302c3136342c38312c3136342c38322c3136342c38332c3136342c38342c3136342c38352c3136342c38362c3136342c38372c3136342c38382c3136342c38392c3136342c39302c3136342c39312c3136342c39342c3136342c39352c3136342c39362c3136342c39372c3136342c39382c3136342c3132312c3136342c3132322c3136342c3136382c3136342c362c3136352c39312c3136352c39352c3136352c3131382c3136352c3131392c3136352c3132302c3136352c3132312c3136352c3132322c3136352c3132332c3136352c3132342c3136352c3132352c3136352c3132362c3136352c3132372c3136352c3132382c3136352c3132392c3136352c3133302c3136352c3136382c3136352c362c3136362c39312c3136362c39352c3136362c3131382c3136362c3136382c3136362c362c3136372c39312c3136372c39352c3136372c3131382c3136372c3136382c3136372c362c3136382c39312c3136382c39352c3136382c3131382c3136382c3136382c3136382c362c3136392c39312c3136392c39352c3136392c3131382c3136392c3136382c3136392c362c3137302c39312c3137302c39352c3137302c3131382c3137302c3136382c3137302c362c3137312c39312c3137312c39352c3137312c3131382c3137312c3133342c3137312c3133352c3137312c3133362c3137312c3133372c3137312c3133382c3137312c3133392c3137312c3134302c3137312c3134312c3137312c3134322c3137312c3134332c3137312c3134342c3137312c3134352c3137312c3134362c3137312c3134372c3137312c3134382c3137312c3134392c3137312c3135302c3137312c3135312c3137312c3135322c3137312c3135332c3137312c3135342c3137312c3135352c3137312c3135362c3137312c3135372c3137312c3135382c3137312c3135392c3137312c3136302c3137312c3136312c3137312c3136322c3137312c3136332c3137312c3136342c3137312c3136352c3137312c3136362c3137312c3136372c3137312c3136382c3137312c362c3137322c39312c3137322c39352c3137322c3131382c3137322c362c3137332c39312c3137332c39352c3137332c3131382c3137332c362c3137342c39312c3137342c39352c3137342c3131382c3137342c3132392c3137342c3133302c3137342c3133312c3137342c3133322c3137342c3133332c3137342c3133342c3137342c3133352c3137342c3133362c3137342c3133372c3137342c3133382c3137342c3133392c3137342c3134302c3137342c3134312c3137342c3134322c3137342c3134332c3137342c3134342c3137342c3134352c3137342c3134362c3137342c3134372c3137342c3134382c3137342c3134392c3137342c3135302c3137342c3135312c3137342c3135322c3137342c3135332c3137342c3135342c3137342c3135352c3137342c3135362c3137342c3135372c3137342c3135382c3137342c3135392c3137342c3136302c3137342c3136312c3137342c3136322c3137342c3136332c3137342c3136342c3137342c3136352c3137342c362c3137352c39312c3137352c39352c3137352c3131382c3137352c3132392c3137352c3133342c3137352c3135382c3137352c3135392c3137352c3136352c3137352c362c3137362c39312c3137362c39352c3137362c3131382c3137362c3132392c3137362c3135382c3137362c3136352c3137362c362c3137372c39312c3137372c39352c3137372c3131382c3137372c3132392c3137372c3135382c3137372c3136352c3137372c362c3137382c39312c3137382c39352c3137382c3131382c3137382c3132392c3137382c3136352c3137382c3233312c3137382c362c3137392c39312c3137392c39352c3137392c3131382c3137392c3132392c3137392c3136352c3137392c3233312c3137392c362c3138302c39312c3138302c39352c3138302c3131382c3138302c3132392c3138302c3136352c3138302c3233312c3138302c362c3138312c39312c3138312c39352c3138312c3131382c3138312c3132392c3138312c3136352c3138312c3139362c3138312c3233312c3138312c362c3138322c39312c3138322c39352c3138322c3131382c3138322c3132392c3138322c3136352c3138322c3230302c3138322c3233312c3138322c362c3138332c37312c3138332c37322c3138332c37332c3138332c37342c3138332c37352c3138332c39312c3138332c39352c3138332c3131382c3138332c3132392c3138332c3136352c3138332c3233312c3138332c362c3138342c37312c3138342c37342c3138342c39312c3138342c39352c3138342c3131382c3138342c3131392c3138342c3132302c3138342c3132312c3138342c3132322c3138342c3132332c3138342c3132342c3138342c3132352c3138342c3132362c3138342c3132392c3138342c3135392c3138342c3136352c3138342c362c3138352c37312c3138352c37342c3138352c39312c3138352c39352c3138352c3132362c3138352c3132392c3138352c3136352c3138352c362c3138362c37312c3138362c37342c3138362c39312c3138362c39352c3138362c39362c3138362c3132362c3138362c3132392c3138362c3136352c3138362c3230302c3138362c362c3138372c37312c3138372c37342c3138372c39312c3138372c39362c3138372c3132362c3138372c3132392c3138372c3136332c3138372c3136342c3138372c3136352c3138372c362c3138382c37312c3138382c37342c3138382c39312c3138382c39342c3138382c39352c3138382c39362c3138382c3132362c3138382c3132372c3138382c3132382c3138382c3132392c3138382c3134362c3138382c3136332c3138382c362c3138392c37312c3138392c37342c3138392c39312c3138392c39322c3138392c39332c3138392c39342c3138392c3132372c3138392c3132382c3138392c3136332c3138392c3136342c3138392c362c3139302c37312c3139302c37342c3139302c3136342c3139302c3136352c3139302c362c3139312c37312c3139312c37342c3139312c3136352c3139312c362c3139322c37312c3139322c37342c3139322c3136352c3139322c362c3139332c37312c3139332c37342c3139332c3136352c3139332c362c3139342c37312c3139342c37342c3139342c3136352c3139342c3136362c3139342c362c3139352c37312c3139352c37342c3139352c3136362c3139352c362c3139362c37312c3139362c37342c3139362c3136362c3139362c362c3139372c37312c3139372c37342c3139372c3136362c3139372c3136372c3139372c3136382c3139372c3137342c3139372c362c3139382c35352c3139382c35362c3139382c35372c3139382c37312c3139382c37342c3139382c3136362c3139382c3136382c3139382c3136392c3139382c3137372c3139382c362c3139392c35342c3139392c35352c3139392c35372c3139392c37312c3139392c37342c3139392c3136312c3139392c3136362c3139392c3136382c3139392c3137372c3139392c332c3230302c342c3230302c352c3230302c362c3230302c35342c3230302c35372c3230302c35382c3230302c35392c3230302c36302c3230302c37312c3230302c37342c3230302c3136362c3230302c3136372c3230302c3136382c3230302c342c3230312c35332c3230312c35342c3230312c36302c3230312c36312c3230312c37312c3230312c37342c3230312c3136362c3230312c3136372c3230312c3137362c3230312c342c3230322c35332c3230322c36312c3230322c37312c3230322c37342c3230322c3132392c3230322c3136362c3230322c3136372c3230322c342c3230332c35332c3230332c36312c3230332c37312c3230332c37342c3230332c3132372c3230332c3132382c3230332c3136362c3230332c3136372c3230332c3137372c3230332c3137382c3230332c3137392c3230332c3138302c3230332c342c3230342c35332c3230342c36312c3230342c37312c3230342c37342c3230342c3132372c3230342c3136362c3230342c342c3230352c32382c3230352c32392c3230352c33302c3230352c33312c3230352c33322c3230352c33332c3230352c33342c3230352c33352c3230352c33362c3230352c33372c3230352c33382c3230352c33392c3230352c34302c3230352c34312c3230352c34322c3230352c34332c3230352c34342c3230352c34352c3230352c34362c3230352c34372c3230352c34382c3230352c34392c3230352c35302c3230352c35312c3230352c35322c3230352c35332c3230352c36312c3230352c37312c3230352c37342c3230352c3132372c3230352c3136332c3230352c3136342c3230352c3136352c3230352c3136362c3230352c342c3230362c352c3230362c362c3230362c372c3230362c382c3230362c392c3230362c31302c3230362c31312c3230362c31322c3230362c31332c3230362c31342c3230362c31352c3230362c31362c3230362c31372c3230362c31382c3230362c31392c3230362c32302c3230362c32312c3230362c32322c3230362c32332c3230362c32342c3230362c32352c3230362c32362c3230362c32372c3230362c32382c3230362c36312c3230362c36322c3230362c36332c3230362c36342c3230362c36352c3230362c36362c3230362c36372c3230362c36382c3230362c36392c3230362c37302c3230362c37312c3230362c37342c3230362c37352c3230362c37362c3230362c37372c3230362c37382c3230362c37392c3230362c38302c3230362c38312c3230362c38322c3230362c38332c3230362c38342c3230362c38352c3230362c38362c3230362c38372c3230362c38382c3230362c38392c3230362c39302c3230362c39312c3230362c39322c3230362c39332c3230362c39342c3230362c39352c3230362c39362c3230362c39372c3230362c39382c3230362c3132372c3230362c3133352c3230362c3133362c3230362c3133372c3230362c3133382c3230362c3133392c3230362c3136332c3230362c3136362c3230362c3138372c3230362c342c3230372c352c3230372c362c3230372c372c3230372c382c3230372c392c3230372c31302c3230372c31312c3230372c31322c3230372c31332c3230372c31342c3230372c31352c3230372c31362c3230372c31372c3230372c31382c3230372c31392c3230372c32302c3230372c32312c3230372c32322c3230372c32332c3230372c32342c3230372c32352c3230372c32362c3230372c32372c3230372c32382c3230372c32392c3230372c33302c3230372c33312c3230372c33322c3230372c33332c3230372c33342c3230372c33352c3230372c39382c3230372c3132372c3230372c3133352c3230372c3133392c3230372c3136332c3230372c3136362c3230372c3136372c3230372c342c3230382c31332c3230382c33352c3230382c39382c3230382c3132372c3230382c3132382c3230382c3133352c3230382c3133392c3230382c3136332c3230382c3136372c3230382c3136382c3230382c3139312c3230382c342c3230392c33352c3230392c35322c3230392c35332c3230392c35342c3230392c35352c3230392c35362c3230392c35372c3230392c35382c3230392c35392c3230392c36302c3230392c36312c3230392c36322c3230392c36332c3230392c36342c3230392c36352c3230392c36362c3230392c36372c3230392c36382c3230392c36392c3230392c37302c3230392c37312c3230392c37322c3230392c37332c3230392c37342c3230392c37352c3230392c37362c3230392c37372c3230392c37382c3230392c37392c3230392c38302c3230392c38312c3230392c38322c3230392c38332c3230392c38342c3230392c38352c3230392c38362c3230392c38372c3230392c38382c3230392c38392c3230392c39302c3230392c39312c3230392c39322c3230392c39332c3230392c39342c3230392c39352c3230392c39362c3230392c39372c3230392c39382c3230392c3132362c3230392c3132372c3230392c3132382c3230392c3132392c3230392c3133332c3230392c3133342c3230392c3133352c3230392c3133392c3230392c3134302c3230392c3134312c3230392c3135352c3230392c3135362c3230392c3136332c3230392c3136382c3230392c3136392c3230392c3137342c3230392c3137352c3230392c3139312c3230392c342c3231302c33352c3231302c35322c3231302c3132312c3231302c3132362c3231302c3132392c3231302c3133302c3231302c3133312c3231302c3133322c3231302c3133332c3231302c3134312c3231302c3135342c3231302c3135352c3231302c3135362c3231302c3135372c3231302c3135382c3231302c3135392c3231302c3136302c3231302c3136312c3231302c3136322c3231302c3136332c3231302c3136392c3231302c3139312c3231302c342c3231312c33352c3231312c35322c3231312c3132312c3231312c3132362c3231312c3134322c3231312c3135342c3231312c3136392c3231312c3137302c3231312c3139302c3231312c342c3231322c33352c3231322c33362c3231322c33372c3231322c33382c3231322c33392c3231322c34302c3231322c34312c3231322c34322c3231322c34332c3231322c34342c3231322c34352c3231322c34362c3231322c34372c3231322c34382c3231322c34392c3231322c35302c3231322c35312c3231322c35322c3231322c3132302c3231322c3132312c3231322c3132362c3231322c3134322c3231322c3135342c3231322c342c3231332c33372c3231332c34342c3231332c35312c3231332c35322c3231332c3132302c3231332c3132312c3231332c3132362c3231332c3134322c3231332c3135332c3231332c3135342c3231332c342c3231342c35322c3231342c3132302c3231342c3132362c3231342c3134322c3231342c3135342c3231342c342c3231352c35322c3231352c3132302c3231352c3132352c3231352c3132362c3231352c3134322c3231352c3135342c3231352c342c3231362c352c3231362c31332c3231362c31342c3231362c33382c3231362c34322c3231362c34332c3231362c35322c3231362c3132302c3231362c3132362c3231362c3134322c3231362c3135342c3231362c342c3231372c352c3231372c31332c3231372c31342c3231372c33392c3231372c34302c3231372c34312c3231372c34322c3231372c35322c3231372c3131312c3231372c3132362c3231372c3134322c3231372c3135342c3231372c342c3231382c31332c3231382c31342c3231382c3131352c3231382c3131362c3231382c3131372c3231382c3132362c3231382c3134322c3231382c3135342c3231382c342c3231392c35302c3231392c3132312c3231392c3132322c3231392c3132332c3231392c3132342c3231392c3132352c3231392c3132362c3231392c3134322c3231392c3134362c3231392c3134372c3231392c3134382c3231392c3134392c3231392c342c3232302c3132312c3232302c3134322c3232302c3134362c3232302c342c3232312c3132312c3232312c3134322c3232312c3134332c3232312c3134342c3232312c3134352c3232312c3135332c3232312c342c3232322c3132312c3232322c3134322c3232322c3135332c3232322c342c3232332c3131332c3232332c3131342c3232332c3131352c3232332c3131362c3232332c3131372c3232332c3131382c3232332c3131392c3232332c3132302c3232332c3132312c3232332c3135332c3232332c342c3232342c3131332c3232342c3135332c3232342c3135342c3232342c3135352c3232342c3135362c3232342c3135372c3232342c342c3232352c3131332c3232352c3134332c3232352c3134342c3232352c3134352c3232352c3134362c3232352c3134372c3232352c3134382c3232352c3134392c3232352c3135332c3232352c332c3232362c342c3232362c352c3232362c31332c3232362c3131332c3232362c3135332c3232362c332c3232372c31332c3232372c3131332c3232372c332c3232382c3131332c3232382c332c3232392c3130302c3232392c3130312c3232392c3130322c3232392c3130332c3232392c3130342c3232392c3130352c3232392c3130362c3232392c3130372c3232392c3130382c3232392c3130392c3232392c3131302c3232392c3131312c3232392c3131322c3232392c3131332c3232392c332c3233302c342c3233302c37322c3233302c37332c3233302c37342c3233302c37352c3233302c37362c3233302c37372c3233302c3130302c3233302c342c3233312c37312c3233312c37322c3233312c37372c3233312c3130302c3233312c3131342c3233312c3131352c3233312c3131362c3233312c3131372c3233312c3131382c3233312c3131392c3233312c3132302c3233312c3132312c3233312c3132322c3233312c3132332c3233312c3132342c3233312c332c3233322c342c3233322c37312c3233322c37372c3233322c3130302c3233322c3131342c3233322c3132342c3233322c332c3233332c37312c3233332c37372c3233332c3130302c3233332c3131342c3233332c3132342c3233332c332c3233342c37312c3233342c37372c3233342c3130302c3233342c3131342c3233342c3132342c3233342c332c3233352c37312c3233352c37372c3233352c3130302c3233352c3131342c3233352c3132342c3233352c3135302c3233352c332c3233362c37312c3233362c37372c3233362c3130312c3233362c3131342c3233362c3132342c3233362c3132352c3233362c3135312c3233362c3135322c3233362c3135332c3233362c332c3233372c32352c3233372c37312c3233372c37372c3233372c3130312c3233372c3131332c3233372c3131342c3233372c3132352c3233372c3132362c3233372c3132372c3233372c3132382c3233372c3132392c3233372c3133302c3233372c3133312c3233372c3133322c3233372c3133332c3233372c3133342c3233372c3133352c3233372c3133362c3233372c3133372c3233372c3133382c3233372c3133392c3233372c3134302c3233372c3134312c3233372c3135332c3233372c3135342c3233372c3135352c3233372c3135362c3233372c3135372c3233372c3135382c3233372c3136342c3233372c332c3233382c342c3233382c32342c3233382c32352c3233382c37312c3233382c37372c3233382c3130312c3233382c3130322c3233382c3130332c3233382c3130342c3233382c3130352c3233382c3130362c3233382c3130372c3233382c3130382c3233382c3130392c3233382c3131302c3233382c3131312c3233382c3131322c3233382c3134312c3233382c3136352c3233382c332c3233392c37312c3233392c37372c3233392c3136352c3233392c332c3234302c31362c3234302c31372c3234302c31382c3234302c31392c3234302c32302c3234302c32312c3234302c32322c3234302c32332c3234302c32342c3234302c32352c3234302c32362c3234302c32372c3234302c32382c3234302c32392c3234302c33302c3234302c33312c3234302c33322c3234302c33332c3234302c33342c3234302c33352c3234302c33362c3234302c33372c3234302c33382c3234302c33392c3234302c34302c3234302c34312c3234302c34322c3234302c34332c3234302c34342c3234302c34352c3234302c34362c3234302c34372c3234302c34382c3234302c34392c3234302c35302c3234302c35312c3234302c35322c3234302c35332c3234302c35342c3234302c35352c3234302c37312c3234302c37372c3234302c3136352c3234302c332c3234312c31362c3234312c35352c3234312c37312c3234312c37372c3234312c332c3234322c31362c3234322c35352c3234322c35362c3234322c37312c3234322c37372c3234322c3135312c3234322c332c3234332c31362c3234332c35362c3234332c36302c3234332c36312c3234332c36322c3234332c36332c3234332c36342c3234332c37312c3234332c37372c3234332c3135312c3234332c332c3234342c31362c3234342c35362c3234342c36302c3234342c36332c3234342c36342c3234342c36352c3234342c37312c3234342c37372c3234342c3135302c3234342c3135312c3234342c332c3234352c31362c3234352c35362c3234352c36302c3234352c37312c3234352c37372c3234352c3134302c3234352c332c3234362c31362c3234362c36302c3234362c37312c3234362c37372c3234362c3134302c3234362c332c3234372c31362c3234372c35372c3234372c35382c3234372c35392c3234372c36302c3234372c37312c3234372c37372c3234372c3134302c3234372c332c3234382c31362c3234382c35372c3234382c35382c3234382c35392c3234382c36302c3234382c37312c3234382c37372c3234382c3134302c3234382c332c3234392c31362c3234392c36302c3234392c37312c3234392c37372c3234392c3134302c3234392c332c3235302c31362c3235302c36302c3235302c37302c3235302c37312c3235302c37372c3235302c3134302c3235302c332c3235312c31362c3235312c36302c3235312c37362c3235312c37372c3235312c3134302c3235312c332c3235322c31362c3235322c36302c3235322c37362c3235322c3132392c3235322c3134302c3235322c332c3235332c31362c3235332c37362c3235332c3132392c3235332c3134302c3235332c332c3235342c31362c3235342c35362c3235342c37362c3235342c3134312c3235342c3134322c3235342c332c3235352c31362c3235352c37362c3235352c3134312c3235352c322c3235362c332c3235362c31362c3235362c37362c3235362c3134312c3235362c322c3235372c31362c3235372c37362c3235372c3134312c3235372c322c3235382c31362c3235382c37362c3235382c3134312c3235382c322c3235392c31362c3235392c37362c3235392c3134312c3235392c322c3236302c31362c3236302c37362c3236302c3134312c3236302c322c3236312c31362c3236312c37362c3236312c3134312c3236312c322c3236322c31362c3236322c37362c3236322c3134312c3236322c322c3236332c31362c3236332c37362c3236332c3134312c3236332c322c3236342c31362c3236342c37362c3236342c3134312c3236342c322c3236352c31362c3236352c37362c3236352c3134312c3236352c322c3236362c31362c3236362c37362c3236362c3134312c3236362c322c3236372c31362c3236372c37362c3236372c3134312c3236372c322c3236382c37362c3236382c37372c3236382c3134312c3236382c322c3236392c34302c3236392c37372c3236392c3134312c3236392c322c3237302c31362c3237302c37362c3237302c37372c3237302c3134312c3237302c322c3237312c31362c3237312c37362c3237312c3134312c3237312c322c3237322c31362c3237322c37362c3237322c3134312c3237322c322c3237332c31362c3237332c37362c3237332c3134312c3237332c322c3237342c31362c3237342c37362c3237342c3134312c3237342c322c3237352c31362c3237352c37362c3237352c3134312c3237352c322c3237362c31362c3237362c37362c3237362c3134312c3237362c322c3237372c31362c3237372c37362c3237372c3131342c3237372c3134312c3237372c322c3237382c31362c3237382c36332c3237382c36392c3237382c37362c3237382c3130322c3237382c3130332c3237382c3130342c3237382c3130352c3237382c3130362c3237382c3130372c3237382c3130382c3237382c3130392c3237382c3131302c3237382c3131312c3237382c3131322c3237382c3131332c3237382c3131342c3237382c3134312c3237382c322c3237392c37362c3237392c3130322c3237392c3131342c3237392c3134312c3237392c322c3238302c37362c3238302c3130322c3238302c3131342c3238302c3133392c3238302c3134302c3238302c3134312c3238302c322c3238312c37362c3238312c3130322c3238312c3131342c3238312c3133352c3238312c3133362c3238312c3133372c3238312c3133382c3238312c3133392c3238312c312c3238322c322c3238322c332c3238322c342c3238322c352c3238322c362c3238322c372c3238322c382c3238322c392c3238322c31302c3238322c31312c3238322c31322c3238322c31332c3238322c31342c3238322c31352c3238322c37362c3238322c37372c3238322c38382c3238322c38392c3238322c39302c3238322c39312c3238322c39322c3238322c39332c3238322c3130322c3238322c3131342c3238322c3131352c3238322c3132372c3238322c3132382c3238322c3132392c3238322c3133302c3238322c3133312c3238322c3133322c3238322c3133332c3238322c3133342c3238322c3133352c3238322c3133362c3238322c3133372c3238322c3133382c3238322c37362c3238332c37372c3238332c38382c3238332c39332c3238332c3130312c3238332c3132302c3238332c3132312c3238332c3132322c3238332c3132332c3238332c3132342c3238332c3132352c3238332c3132362c3238332c3132372c3238332c3132382c3238332c3132392c3238332c3133302c3238332c3133312c3238332c3133322c3238332c38382c3238342c39332c3238342c39342c3238342c39352c3238342c39362c3238342c39372c3238342c39382c3238342c39392c3238342c3130302c3238342c3130312c3238342c3132302c3238342c3132312c3238342c3132322c3238342c3132332c3238342c3132342c3238342c3132352c3238342c3132362c3238342c3132372c3238342c3132382c3238342c38382c3238352c3131372c3238352c3131382c3238352c38372c3238362c38382c3238362c38392c3238362c37352c3238382c37362c3238382c37362c3238392c37362c3239302c3134312c3239302c37362c3239312c3132362c3239312c3133342c3239312c37362c3239322c37362c3239332c3131382c3239332c3132322c3239332c3132332c3239332c3132342c3239332c37362c3239342c37372c3239342c37372c3239352c37362c3239362c37372c3239362c37362c3239372c37362c3239382c37362c3239392c37362c3330302c37372c3330372c3134302c3331352c3134302c3331362c3134302c3331372c3134302c3331382c38302c3332325d2c227479706573223a307d5d2c2266726565223a5b7b22636f6f7264696e61746573223a5b5d2c227479706573223a307d5d2c22726f6f6d73223a7b2230223a7b22636f6f7264696e61746573223a5b33362c34322c33352c34312c33342c34312c33332c34312c33322c34312c33312c34312c33302c34312c32392c34312c32382c34312c32372c34312c32362c34312c32352c34312c32342c34312c32332c34312c32322c34312c32312c34312c32302c34312c32302c34302c32302c33392c31392c33382c31392c33372c31392c33362c31392c33352c31392c33342c31382c33332c31382c33322c31382c33312c31382c33302c31372c32392c31372c32382c31372c32372c31372c32362c31372c32352c31362c32342c31362c32332c31362c32322c31362c32312c31352c32302c31352c31392c31342c31382c31342c31372c31332c31362c31332c31352c31322c31342c31322c31332c31322c31322c31312c31312c31312c31302c31302c392c31302c382c392c372c392c362c382c352c382c342c392c342c31302c342c31312c342c31322c352c31332c362c31342c362c31352c362c31352c372c31362c382c31372c382c31382c392c31392c392c32302c31302c32312c31302c32322c31312c32332c31312c32342c31312c32352c31322c32362c31332c32372c31332c32382c31332c32392c31322c33302c31312c33302c31302c33302c392c33312c382c33312c372c33312c362c33322c362c33332c362c33342c362c33352c372c33352c382c33352c392c33362c31302c33372c31302c33382c31312c33392c31302c34302c392c34312c392c34322c392c34332c392c34342c392c34352c392c34362c392c34362c31302c34362c31312c34372c31322c34372c31332c34372c31342c34372c31352c34372c31362c34372c31372c34382c31382c34382c31392c34382c32302c34382c32312c34382c32322c34392c32332c34392c32342c34392c32352c34392c32362c34392c32372c34392c32382c35302c32392c35302c33302c35302c33312c35302c33322c35312c33332c35312c33342c35312c33352c35312c33362c35322c33372c35322c33382c35322c33392c35322c34302c35322c34312c35322c34322c35312c34322c35302c34322c34392c34322c34382c34322c34372c34322c34362c34322c34352c34322c34342c34322c34332c34322c34322c34322c34312c34322c34302c34322c33392c34322c33382c34322c33372c34325d7d2c2231223a7b22636f6f7264696e61746573223a5b3136342c3133382c3136332c3133372c3136322c3133372c3136312c3133372c3136302c3133372c3135392c3133372c3135382c3133372c3135372c3133372c3135362c3133372c3135352c3133362c3135342c3133362c3135332c3133362c3135322c3133362c3135312c3133362c3135302c3133362c3134392c3133362c3134382c3133362c3134372c3133362c3134362c3133362c3134352c3133362c3134342c3133362c3134332c3133352c3134322c3133352c3134312c3133352c3134302c3133352c3133392c3133352c3133382c3133352c3133372c3133352c3133362c3133352c3133352c3133362c3133342c3133362c3133332c3133362c3133322c3133362c3133312c3133362c3133302c3133362c3132392c3133362c3133302c3133352c3133302c3133342c3133302c3133332c3133302c3133322c3133302c3133312c3133312c3133302c3133312c3132392c3133322c3132382c3133332c3132372c3133332c3132362c3133332c3132352c3133332c3132342c3133342c3132342c3133352c3132342c3133362c3132342c3133372c3132332c3133382c3132332c3133392c3132322c3133382c3132332c3133392c3132342c3134302c3132342c3134312c3132342c3134322c3132332c3134332c3132332c3134342c3132332c3134352c3132322c3134362c3132322c3134372c3132322c3134382c3132312c3134392c3132312c3135302c3132302c3135312c3132302c3135322c3132302c3135332c3131392c3135342c3131392c3135352c3131382c3135362c3131382c3135372c3131382c3135382c3131372c3135392c3131372c3136302c3131362c3136312c3131362c3136322c3131362c3136332c3131352c3136342c3131352c3136352c3131352c3136362c3131342c3136372c3131342c3136382c3131342c3136392c3131332c3137302c3131332c3137302c3131342c3137302c3131352c3137302c3131362c3137302c3131372c3137302c3131382c3137302c3131392c3137302c3132302c3137302c3132312c3137302c3132322c3136392c3132332c3136392c3132342c3136392c3132352c3136392c3132362c3136392c3132372c3136382c3132372c3136372c3132382c3136372c3132392c3136372c3133302c3136372c3133312c3136372c3133322c3136372c3133332c3136372c3133342c3136372c3133352c3136372c3133362c3136372c3133372c3136372c3133382c3136362c3133382c3136352c3133385d7d2c2232223a7b22636f6f7264696e61746573223a5b3138352c3232302c3138342c3231392c3138332c3231392c3138322c3231382c3138312c3231382c3138302c3231382c3137392c3231372c3137382c3231372c3137372c3231372c3137362c3231362c3137352c3231362c3137342c3231352c3137332c3231352c3137322c3231352c3137312c3231342c3137302c3231342c3137302c3231332c3136392c3231322c3136392c3231312c3136392c3231302c3136382c3230392c3136382c3230382c3136382c3230372c3136372c3230362c3136372c3230352c3136372c3230342c3136372c3230332c3136382c3230322c3136382c3230312c3136392c3230302c3136392c3139392c3137302c3139382c3136392c3139372c3136382c3139362c3136372c3139362c3136372c3139352c3136372c3139342c3136372c3139332c3136382c3139332c3136392c3139322c3137302c3139322c3137312c3139312c3137322c3139312c3137332c3139312c3137342c3139302c3137352c3139302c3137362c3138392c3137372c3138392c3137382c3138392c3137392c3138382c3138302c3138382c3138312c3138372c3138322c3138362c3138332c3138362c3138342c3138352c3138352c3138352c3138362c3138342c3138372c3138342c3138382c3138332c3138392c3138332c3139302c3138332c3139312c3138322c3139322c3138322c3139332c3138312c3139342c3138312c3139352c3138312c3139362c3138312c3139372c3138302c3139382c3138302c3139392c3138302c3230302c3138312c3230302c3138322c3230312c3138332c3230312c3138342c3230322c3138352c3230332c3138362c3230342c3138352c3230352c3138352c3230362c3138352c3230372c3138342c3230382c3138342c3230392c3138342c3231302c3138332c3231302c3138322c3231312c3138322c3231322c3138322c3231332c3138322c3231342c3138312c3231352c3138312c3231362c3138312c3231372c3138302c3231382c3138302c3231392c3138302c3232302c3137392c3232312c3137392c3232322c3137392c3232332c3137392c3232342c3137382c3232352c3137382c3232362c3137382c3232372c3137372c3232382c3137372c3232392c3137372c3233302c3137372c3233302c3137382c3233302c3137392c3233302c3138302c3233302c3138312c3233302c3138322c3233302c3138332c3233302c3138342c3233302c3138352c3232392c3138362c3233302c3138372c3233312c3138372c3233322c3138372c3233322c3138382c3233322c3138392c3233312c3138392c3233302c3138392c3232392c3139302c3232382c3139302c3232372c3139302c3232362c3139302c3232352c3139302c3232342c3139302c3232332c3139312c3232322c3139312c3232312c3139312c3232302c3139312c3231392c3139312c3231382c3139322c3231372c3139322c3231362c3139322c3231352c3139322c3231342c3139322c3231332c3139322c3231322c3139332c3231312c3139332c3231302c3139332c3230392c3139332c3230382c3139332c3230372c3139332c3230362c3139342c3230352c3139342c3230342c3139342c3230332c3139342c3230322c3139342c3230312c3139352c3230302c3139352c3139392c3139352c3139382c3139352c3139372c3139352c3139362c3139352c3139352c3139362c3139342c3139362c3139332c3139362c3139322c3139362c3139312c3139362c3139302c3139372c3138392c3139372c3138382c3139372c3138372c3139372c3138362c3139372c3138352c3139382c3138342c3139382c3138332c3139382c3138322c3139392c3138312c3139392c3138302c3139392c3137392c3139392c3137382c3139392c3137372c3139392c3137362c3230302c3137362c3230312c3137372c3230322c3137372c3230332c3137382c3230342c3137392c3230342c3138302c3230342c3138312c3230352c3138322c3230342c3138332c3230342c3138342c3230342c3138352c3230342c3138362c3230352c3138372c3230362c3138382c3230362c3138392c3230362c3139302c3230362c3139302c3230372c3139302c3230382c3139302c3230392c3139302c3231302c3138392c3231312c3139302c3231322c3139312c3231322c3139312c3231332c3139312c3231342c3139322c3231352c3139332c3231362c3139342c3231362c3139342c3231372c3139342c3231382c3139342c3231392c3139332c3231392c3139322c3231392c3139312c3231392c3139302c3232302c3138392c3232302c3138382c3232302c3138372c3232302c3138362c3232305d7d2c2233223a7b22636f6f7264696e61746573223a5b332c3232362c332c3232352c332c3232342c332c3232332c332c3232322c342c3232312c342c3232302c342c3231392c342c3231382c342c3231372c342c3231362c342c3231352c342c3231342c342c3231332c352c3231322c352c3231312c352c3231302c352c3230392c352c3230382c362c3230382c372c3230382c382c3230382c392c3230382c31302c3230382c31312c3230382c31322c3230382c31332c3230382c31342c3230382c31352c3230382c31362c3230382c31372c3230382c31382c3230372c31392c3230372c32302c3230372c32312c3230372c32322c3230372c32332c3230372c32342c3230372c32352c3230372c32362c3230372c32372c3230372c32382c3230372c32392c3230372c33302c3230372c33312c3230382c33322c3230382c33332c3230382c33342c3230382c33342c3230392c33342c3231302c33342c3231312c33352c3231322c33362c3231332c33372c3231342c33382c3231332c33392c3231332c34302c3231332c34312c3231332c34322c3231332c34332c3231332c34342c3231342c34352c3231332c34362c3231332c34372c3231332c34382c3231332c34392c3231332c35302c3231332c35312c3231332c35322c3231322c35322c3231312c35332c3231302c35342c3231302c35352c3231302c35362c3231302c35372c3231302c35382c3231302c35392c3231302c36302c3231302c36312c3230392c36322c3230392c36332c3230392c36342c3230392c36352c3230392c36362c3230392c36372c3230392c36382c3230392c36392c3230392c37302c3230392c37312c3230392c37322c3230392c37332c3230392c37342c3230392c37352c3230392c37362c3230382c37372c3230382c37382c3230382c37392c3230382c38302c3230382c38312c3230382c38322c3230382c38332c3230382c38342c3230382c38352c3230382c38362c3230382c38372c3230382c38382c3230382c38392c3230382c39302c3230382c39312c3230372c39322c3230372c39332c3230372c39342c3230372c39352c3230372c39362c3230372c39372c3230372c39382c3230372c39392c3230372c3130302c3230372c3130312c3230372c3130322c3230372c3130332c3230372c3130342c3230372c3130352c3230372c3130362c3230372c3130372c3230372c3130382c3230382c3130392c3230382c3131302c3230382c3131312c3230382c3131322c3230382c3131332c3230392c3131332c3231302c3131332c3231312c3131342c3231322c3131342c3231332c3131342c3231342c3131342c3231352c3131342c3231362c3131342c3231372c3131342c3231382c3131342c3231392c3131342c3232302c3131342c3232312c3131342c3232322c3131332c3232322c3131322c3232332c3131322c3232342c3131322c3232352c3131322c3232362c3131312c3232362c3131302c3232362c3130392c3232362c3130382c3232362c3130372c3232362c3130362c3232362c3130352c3232362c3130342c3232362c3130332c3232362c3130322c3232362c3130312c3232362c3130302c3232362c39392c3232362c39382c3232362c39372c3232362c39362c3232362c39352c3232362c39342c3232362c39332c3232362c39322c3232362c39312c3232362c39302c3232362c38392c3232362c38382c3232362c38372c3232362c38362c3232362c38352c3232362c38342c3232362c38332c3232362c38322c3232362c38312c3232362c38302c3232362c37392c3232362c37382c3232362c37372c3232362c37362c3232362c37352c3232362c37342c3232362c37332c3232362c37322c3232362c37312c3232362c37302c3232362c36392c3232362c36382c3232362c36372c3232362c36362c3232362c36352c3232362c36342c3232362c36332c3232362c36322c3232362c36312c3232362c36302c3232362c35392c3232362c35382c3232362c35372c3232362c35362c3232362c35352c3232362c35342c3232362c35332c3232362c35322c3232362c35312c3232362c35302c3232362c34392c3232362c34382c3232362c34372c3232362c34362c3232362c34352c3232362c34342c3232362c34332c3232362c34322c3232362c34312c3232362c34302c3232362c33392c3232362c33382c3232362c33372c3232362c33362c3232362c33352c3232362c33342c3232362c33332c3232362c33322c3232362c33312c3232362c33302c3232362c32392c3232362c32382c3232362c32372c3232362c32362c3232362c32352c3232362c32342c3232362c32332c3232362c32322c3232362c32312c3232362c32302c3232362c31392c3232362c31382c3232362c31372c3232362c31362c3232362c31352c3232362c31342c3232362c31332c3232362c31322c3232362c31312c3232362c31302c3232362c392c3232362c382c3232362c372c3232362c362c3232362c352c3232362c342c3232365d7d2c2234223a7b22636f6f7264696e61746573223a5b352c3230352c352c3230342c352c3230332c352c3230322c352c3230312c352c3230302c352c3139392c352c3139382c352c3139372c352c3139362c352c3139352c352c3139342c352c3139332c352c3139322c352c3139312c352c3139302c352c3138392c352c3138382c352c3138372c352c3138362c352c3138352c362c3138342c362c3138332c362c3138322c362c3138312c362c3138302c362c3137392c362c3137382c362c3137372c362c3137362c362c3137352c362c3137342c362c3137332c362c3137322c362c3137312c362c3137302c362c3136392c362c3136382c362c3136372c362c3136362c362c3136352c372c3136352c382c3136352c392c3136352c31302c3136352c31312c3136352c31322c3136352c31332c3136352c31342c3136352c31352c3136352c31362c3136352c31372c3136352c31382c3136352c31392c3136352c32302c3136352c32312c3136352c32322c3136352c32332c3136352c32342c3136352c32352c3136352c32362c3136352c32372c3136352c32382c3136352c32392c3136352c33302c3136352c33312c3136352c33322c3136352c33332c3136352c33342c3136352c33352c3136352c33362c3136352c33372c3136352c33382c3136352c33392c3136352c34302c3136352c34312c3136352c34322c3136352c34332c3136352c34342c3136352c34352c3136352c34352c3136362c34352c3136372c34352c3136382c34352c3136392c34352c3137302c34352c3137312c34352c3137322c34352c3137332c34352c3137342c34352c3137352c34352c3137362c34352c3137372c34352c3137382c34352c3137392c34352c3138302c34352c3138312c34352c3138322c34352c3138332c34352c3138342c34352c3138352c34352c3138362c34352c3138372c34352c3138382c34352c3138392c34352c3139302c34352c3139312c34352c3139322c34352c3139332c34352c3139342c34352c3139352c34352c3139362c34352c3139372c34352c3139382c34352c3139392c34352c3230302c34352c3230312c34352c3230322c34352c3230332c34352c3230342c34342c3230342c34332c3230342c34322c3230342c34312c3230342c34302c3230342c33392c3230342c33382c3230342c33372c3230342c33362c3230342c33352c3230342c33342c3230342c33332c3230342c33322c3230342c33312c3230342c33302c3230342c32392c3230342c32382c3230342c32372c3230352c32362c3230352c32352c3230352c32342c3230352c32332c3230352c32322c3230352c32312c3230352c32302c3230352c31392c3230352c31382c3230352c31372c3230352c31362c3230352c31352c3230352c31342c3230352c31332c3230352c31322c3230352c31312c3230352c31302c3230352c392c3230352c382c3230352c372c3230352c362c3230355d7d2c2235223a7b22636f6f7264696e61746573223a5b3135302c3232362c3135302c3232352c3134392c3232342c3134382c3232342c3134372c3232342c3134362c3232342c3134352c3232342c3134342c3232342c3134332c3232342c3134332c3232332c3134332c3232322c3134342c3232322c3134352c3232312c3134342c3232302c3134332c3232302c3134332c3231392c3134332c3231382c3134332c3231372c3134332c3231362c3134332c3231352c3134332c3231342c3134322c3231332c3134322c3231322c3134322c3231312c3134312c3231302c3134312c3230392c3134302c3230382c3134302c3230372c3133392c3230362c3133382c3230372c3133372c3230372c3133362c3230372c3133352c3230382c3133342c3230382c3133332c3230382c3133322c3230392c3133312c3230392c3133302c3230382c3132392c3230372c3132382c3230362c3132382c3230352c3132382c3230342c3132382c3230332c3132382c3230322c3132382c3230312c3132382c3230302c3132382c3139392c3132382c3139382c3132382c3139372c3132382c3139362c3132382c3139352c3132382c3139342c3132382c3139332c3132382c3139322c3132382c3139312c3132382c3139302c3132392c3138392c3132392c3138382c3132392c3138372c3132392c3138362c3132392c3138352c3132392c3138342c3132392c3138332c3133302c3138322c3133302c3138312c3133302c3138302c3133302c3137392c3133302c3137382c3133302c3137372c3133302c3137362c3133302c3137352c3133312c3137352c3133322c3137352c3133332c3137352c3133342c3137352c3133352c3137352c3133362c3137352c3133372c3137352c3133382c3137352c3133392c3137352c3134302c3137352c3134312c3137352c3134322c3137352c3134332c3137352c3134342c3137352c3134352c3137352c3134362c3137352c3134372c3137352c3134382c3137352c3134392c3137352c3135302c3137352c3135312c3137352c3135322c3137352c3135332c3137352c3135342c3137352c3135352c3137352c3135362c3137352c3135372c3137352c3135382c3137352c3135392c3137352c3136302c3137352c3136312c3137352c3136322c3137352c3136332c3137352c3136342c3137352c3136342c3137362c3136342c3137372c3136342c3137382c3136342c3137392c3136342c3138302c3136342c3138312c3136342c3138322c3136342c3138332c3136342c3138342c3136342c3138352c3136342c3138362c3136332c3138362c3136322c3138372c3136322c3138382c3136322c3138392c3136332c3139302c3136342c3139312c3136342c3139322c3136342c3139332c3136342c3139342c3136352c3139352c3136352c3139362c3136352c3139372c3136352c3139382c3136352c3139392c3136352c3230302c3136352c3230312c3136352c3230322c3136352c3230332c3136352c3230342c3136342c3230352c3136342c3230362c3136332c3230372c3136332c3230382c3136322c3230392c3136312c3230392c3136302c3230392c3135392c3231302c3135382c3231302c3135372c3231302c3135362c3231302c3135352c3231312c3135342c3231312c3135332c3231322c3135332c3231332c3135332c3231342c3135332c3231352c3135332c3231362c3135332c3231372c3135332c3231382c3135332c3231392c3135342c3232302c3135352c3232302c3135362c3232302c3135372c3232312c3135372c3232322c3135372c3232332c3135372c3232342c3135362c3232342c3135352c3232342c3135342c3232342c3135332c3232342c3135322c3232352c3135322c3232362c3135312c3232365d7d2c2236223a7b22636f6f7264696e61746573223a5b3136322c3137332c3136312c3137322c3136312c3137312c3136302c3137302c3135392c3137302c3135382c3137302c3135372c3137302c3135362c3137302c3135352c3137302c3135342c3137302c3135332c3137302c3135322c3137302c3135312c3137302c3135302c3137302c3134392c3137302c3134382c3137302c3134372c3137302c3134362c3137302c3134352c3137302c3134342c3137302c3134332c3137302c3134322c3137302c3134312c3137302c3134302c3137302c3133392c3137302c3133382c3137302c3133372c3137302c3133362c3137302c3133352c3137302c3133342c3137302c3133332c3137302c3133322c3137302c3133312c3137302c3133312c3136392c3133302c3136382c3133302c3136372c3132392c3136362c3132382c3136352c3132372c3136352c3132362c3136352c3132352c3136352c3132342c3136352c3132332c3136352c3132322c3136342c3132312c3136332c3132312c3136322c3132302c3136312c3132302c3136302c3132302c3135392c3132302c3135382c3132302c3135372c3132302c3135362c3132302c3135352c3132302c3135342c3132302c3135332c3132302c3135322c3131392c3135312c3131392c3135302c3131392c3134392c3131392c3134382c3131392c3134372c3131392c3134362c3131392c3134352c3131392c3134342c3131392c3134332c3131392c3134322c3132302c3134322c3132312c3134322c3132322c3134322c3132332c3134322c3132342c3134322c3132352c3134322c3132362c3134322c3132372c3134322c3132382c3134322c3132392c3134322c3133302c3134322c3133312c3134322c3133322c3134322c3133332c3134322c3133342c3134322c3133352c3134322c3133362c3134322c3133372c3134322c3133382c3134322c3133392c3134322c3134302c3134322c3134312c3134322c3134322c3134322c3134332c3134322c3134342c3134322c3134352c3134322c3134362c3134322c3134372c3134322c3134382c3134322c3134392c3134322c3135302c3134322c3135312c3134322c3135322c3134322c3135332c3134322c3135342c3134322c3135352c3134322c3135362c3134322c3135372c3134322c3135382c3134322c3135392c3134322c3136302c3134322c3136312c3134322c3136322c3134322c3136332c3134322c3136342c3134322c3136352c3134322c3136352c3134332c3136352c3134342c3136352c3134352c3136352c3134362c3136352c3134372c3136352c3134382c3136352c3134392c3136352c3135302c3136352c3135312c3136352c3135322c3136352c3135332c3136362c3135342c3136372c3135342c3136372c3135352c3136372c3135362c3136372c3135372c3136372c3135382c3136372c3135392c3136372c3136302c3136372c3136312c3136372c3136322c3136372c3136332c3136372c3136342c3136372c3136352c3136372c3136362c3136372c3136372c3136372c3136382c3136372c3136392c3136372c3137302c3136362c3137302c3136352c3137312c3136342c3137322c3136332c3137325d7d2c2237223a7b22636f6f7264696e61746573223a5b3131352c3232322c3131352c3232312c3131352c3232302c3131352c3231392c3131362c3231392c3131372c3231382c3131362c3231372c3131352c3231372c3131352c3231362c3131352c3231352c3131352c3231342c3131352c3231332c3131352c3231322c3131342c3231312c3131342c3231302c3131342c3230392c3131332c3230382c3131322c3230372c3131312c3230372c3131302c3230372c3130392c3230372c3130382c3230372c3130372c3230362c3130362c3230362c3130352c3230362c3130342c3230362c3130332c3230362c3130322c3230362c3130312c3230362c3130302c3230362c39392c3230362c39382c3230352c39372c3230352c39362c3230352c39352c3230352c39342c3230352c39342c3230342c39342c3230332c39342c3230322c39342c3230312c39342c3230302c39342c3139392c39332c3139382c39332c3139372c39342c3139362c39342c3139352c39342c3139342c39342c3139332c39342c3139322c39342c3139312c39342c3139302c39342c3138392c39342c3138382c39342c3138372c39342c3138362c39342c3138352c39342c3138342c39342c3138332c39342c3138322c39342c3138312c39352c3138302c39352c3137392c39352c3137382c39352c3137372c39352c3137362c39352c3137352c39352c3137342c39352c3137332c39352c3137322c39352c3137312c39362c3137302c39362c3136392c39362c3136382c39362c3136372c39362c3136362c39362c3136352c39372c3136352c39382c3136342c39382c3136332c39392c3136322c3130302c3136322c3130312c3136322c3130322c3136322c3130332c3136322c3130342c3136322c3130352c3136332c3130362c3136332c3130372c3136332c3130382c3136332c3130392c3136332c3131302c3136332c3131312c3136332c3131322c3136332c3131332c3136332c3131342c3136332c3131352c3136332c3131362c3136332c3131372c3136332c3131382c3136332c3131392c3136332c3132302c3136322c3132302c3136332c3132302c3136342c3131392c3136342c3131382c3136342c3131372c3136352c3131372c3136362c3131372c3136372c3131372c3136382c3131372c3136392c3131372c3137302c3131372c3137312c3131372c3137322c3131372c3137332c3131372c3137342c3131372c3137352c3131372c3137362c3131372c3137372c3131372c3137382c3131372c3137392c3131372c3138302c3131372c3138312c3131372c3138322c3131382c3138332c3131392c3138332c3132302c3138342c3132312c3138342c3132322c3138342c3132332c3138342c3132342c3138352c3132352c3138352c3132352c3138362c3132352c3138372c3132352c3138382c3132362c3138392c3132372c3139302c3132372c3139312c3132372c3139322c3132372c3139332c3132372c3139342c3132372c3139352c3132372c3139362c3132372c3139372c3132372c3139382c3132372c3139392c3132372c3230302c3132372c3230312c3132372c3230322c3132372c3230332c3132372c3230342c3132372c3230352c3132372c3230362c3132382c3230372c3132392c3230382c3133302c3230392c3132392c3230392c3132382c3230392c3132372c3231302c3132362c3231302c3132352c3231312c3132352c3231322c3132352c3231332c3132352c3231342c3132352c3231352c3132352c3231362c3132352c3231372c3132352c3231382c3132352c3231392c3132342c3232302c3132332c3232302c3132322c3232312c3132312c3232312c3132302c3232322c3131392c3232322c3131382c3232322c3131372c3232322c3131362c3232325d7d2c2238223a7b22636f6f7264696e61746573223a5b31332c3131382c31342c3131372c31352c3131372c31362c3131362c31372c3131362c31382c3131352c31372c3131342c31372c3131332c31362c3131322c31352c3131322c31342c3131322c31332c3131332c31332c3131322c31332c3131312c31332c3131302c31332c3130392c31332c3130382c31332c3130372c31332c3130362c31332c3130352c31332c3130342c31332c3130332c31332c3130322c31332c3130312c31332c3130302c31332c39392c31332c39382c31332c39372c31332c39362c31342c39352c31342c39342c31342c39332c31342c39322c31342c39312c31342c39302c31342c38392c31342c38382c31342c38372c31342c38362c31342c38352c31342c38342c31342c38332c31342c38322c31342c38312c31342c38302c31342c37392c31342c37382c31342c37372c31342c37362c31342c37352c31342c37342c31342c37332c31342c37322c31342c37312c31342c37302c31342c36392c31342c36382c31342c36372c31342c36362c31342c36352c31342c36342c31342c36332c31342c36322c31342c36312c31342c36302c31342c35392c31342c35382c31342c35372c31342c35362c31342c35352c31342c35342c31342c35332c31342c35322c31342c35312c31342c35302c31342c34392c31342c34382c31342c34372c31342c34362c31342c34352c31342c34342c31342c34332c31352c34332c31362c34332c31372c34332c31382c34332c31392c34332c32302c34332c32312c34332c32322c34332c32332c34332c32342c34332c32352c34332c32362c34332c32372c34322c32382c34322c32392c34322c33302c34322c33312c34322c33322c34322c33332c34322c33342c34322c33352c34322c33342c34332c33352c34342c33362c34342c33372c34342c33382c34342c33392c34342c34302c34342c34312c34342c34322c34342c34332c34342c34342c34342c34352c34342c34362c34342c34372c34342c34382c34342c34392c34342c35302c34342c35312c34342c35322c34342c35332c34342c35342c34342c35352c34342c35362c34352c35372c34352c35382c34352c35392c34352c36302c34352c36312c34352c36322c34352c36332c34362c36342c34362c36352c34372c36362c34372c36372c34362c36372c34352c36382c34352c36392c34352c37302c34352c37312c34352c37322c34352c37332c34352c37342c34352c37352c34352c37362c34352c37372c34352c37382c34352c37392c34352c38302c34352c38312c34352c38322c34352c38332c34352c38342c34362c38352c34362c38362c34362c38372c34362c38382c34352c38392c34352c39302c34352c39312c34352c39322c34352c39332c34352c39342c34352c39352c34352c39362c34352c39372c34352c39382c34352c39392c34352c3130302c34352c3130312c34352c3130322c34352c3130332c34352c3130332c34362c3130332c34372c3130332c34382c3130332c34392c3130332c35302c3130332c35312c3130332c35322c3130332c35332c3130332c35342c3130332c35352c3130332c35362c3130332c35372c3130332c35382c3130332c35392c3130332c36302c3130332c36312c3130332c36322c3130332c36332c3130332c36342c3130332c36352c3130332c36362c3130332c36372c3130332c36382c3130332c36392c3130332c37302c3130332c37312c3130322c37322c3130312c37332c3130302c37342c39392c37352c3130302c37362c3130312c37372c3130322c37372c3130332c37372c3130332c37382c3130332c37392c3130332c38302c3130332c38312c3130332c38322c3130332c38332c3130332c38342c3130332c38352c3130332c38362c3130332c38372c3130332c38382c3130332c38392c3130332c39302c3130322c39312c3130312c39322c3130302c39332c39392c39342c39392c39352c39382c39352c39372c39362c39362c39372c39352c39372c39342c39372c39332c39372c39322c39382c39312c39382c39302c39382c38392c39382c38382c39392c38372c39392c38362c39392c38352c3130302c38342c3130302c38332c3130302c38322c3130302c38312c3130312c38302c3130312c37392c3130312c37382c3130312c37372c3130322c37362c3130322c37352c3130322c37342c3130322c37332c3130332c37322c3130332c37312c3130332c37302c3130342c36392c3130342c36382c3130342c36372c3130342c36362c3130352c36352c3130352c36342c3130352c36332c3130352c36322c3130362c36312c3130362c36302c3130362c35392c3130372c35382c3130372c35372c3130372c35362c3130372c35352c3130382c35342c3130382c35332c3130382c35322c3130382c35312c3130392c35302c3130392c34392c3130392c34382c3130392c34372c3131302c34362c3131302c34352c3131302c34342c3131302c34332c3131312c34322c3131312c34312c3131312c34302c3131312c33392c3131322c33382c3131322c33372c3131322c33362c3131322c33352c3131332c33342c3131332c33332c3131332c33322c3131332c33312c3131342c33302c3131342c32392c3131342c32382c3131342c32372c3131352c32362c3131352c32352c3131352c32342c3131352c32332c3131362c32322c3131362c32312c3131362c32302c3131362c31392c3131372c31382c3131372c31372c3131372c31362c3131372c31352c3131382c31342c3131385d7d2c2239223a7b22636f6f7264696e61746573223a5b3130352c3136322c3130342c3136312c3130332c3136312c3130322c3136312c3130312c3136312c3130302c3136312c39392c3136312c39382c3136312c39372c3136312c39362c3136312c39352c3136312c39342c3136312c39332c3136312c39322c3136312c39312c3136312c39302c3136312c38392c3136312c38382c3136312c38372c3136312c38362c3136312c38352c3136312c38342c3136312c38332c3136312c38322c3136312c38312c3136312c38302c3136312c37392c3136312c37382c3136312c37372c3136312c37362c3136302c37352c3136302c37342c3136302c37332c3136302c37322c3136302c37312c3136302c37302c3136302c36392c3136302c36382c3136302c36372c3136302c36362c3136302c36352c3136302c36342c3136302c36332c3136302c36322c3136302c36312c3136302c36302c3136302c35392c3136302c35382c3136302c35372c3136302c35362c3136302c35352c3136302c35342c3136302c35332c3136302c35322c3136302c35312c3136302c35302c3136302c34392c3136302c34382c3135392c34372c3135392c34362c3135392c34352c3135392c34342c3135392c34332c3135392c34322c3135392c34312c3135392c34302c3135392c33392c3135392c33382c3135392c33372c3135392c33362c3135392c33352c3135392c33342c3135392c33332c3135392c33322c3135392c33312c3135392c33302c3135392c32392c3135392c32382c3135392c32372c3135392c32362c3135392c32352c3135392c32342c3135392c32332c3135392c32322c3135392c32312c3135392c32302c3135392c31392c3135392c31382c3135392c31372c3135392c31362c3135392c31352c3135392c31342c3135392c31332c3135392c31322c3135392c31312c3135392c31302c3135392c392c3135392c382c3135392c372c3135392c362c3135382c362c3135372c362c3135362c362c3135352c362c3135342c362c3135332c362c3135322c372c3135312c372c3135302c372c3134392c372c3134382c362c3134372c362c3134362c362c3134352c362c3134342c362c3134332c362c3134322c362c3134312c362c3134302c362c3133392c362c3133382c372c3133382c382c3133372c382c3133362c382c3133352c392c3133352c31302c3133352c31302c3133362c31302c3133372c31302c3133382c31302c3133392c31312c3134302c31312c3134312c31312c3134322c31322c3134332c31332c3134332c31342c3134332c31352c3134332c31362c3134332c31372c3134322c31372c3134312c31382c3134302c31392c3133392c32302c3133382c32302c3133372c32312c3133362c32322c3133362c32332c3133362c32342c3133362c32352c3133372c32362c3133382c32372c3133392c32382c3133382c32382c3133372c32372c3133362c32362c3133352c32352c3133342c32342c3133332c32332c3133332c32332c3133322c32332c3133312c32332c3133302c32342c3133302c32352c3133302c32362c3133312c32372c3133312c32382c3133312c32392c3133312c33302c3133312c33312c3133312c33322c3133312c33332c3133312c33342c3133312c33352c3133302c33362c3133302c33372c3133302c33382c3133302c33392c3133302c34302c3133302c34312c3133302c34322c3133302c34332c3133302c34342c3133302c34352c3133302c34362c3133302c34372c3133302c34382c3133302c34392c3132392c35302c3132392c35312c3132392c35322c3132392c35332c3132392c35342c3132392c35352c3132392c35362c3132392c35372c3132392c35382c3132392c35392c3132392c36302c3132392c36312c3132392c36322c3132392c36332c3132382c36342c3132382c36352c3132382c36362c3132382c36372c3132382c36382c3132382c36392c3132382c37302c3132382c37312c3132382c37322c3132382c37332c3132382c37342c3132382c37352c3132382c37362c3132382c37372c3132372c37382c3132372c37392c3132372c38302c3132372c38312c3132372c38322c3132372c38332c3132372c38342c3132372c38352c3132372c38362c3132372c38372c3132372c38382c3132372c38392c3132372c39302c3132372c39312c3132362c39322c3132362c39332c3132362c39342c3132362c39352c3132362c39362c3132362c39362c3132372c39362c3132382c39362c3132392c39362c3133302c39372c3133312c39372c3133322c39372c3133332c39372c3133342c39372c3133352c39382c3133362c39392c3133362c3130302c3133362c3130312c3133362c3130322c3133362c3130332c3133362c3130342c3133362c3130352c3133352c3130352c3133342c3130352c3133332c3130352c3133322c3130352c3133312c3130352c3133302c3130352c3132392c3130362c3132382c3130362c3132372c3130362c3132362c3130362c3132352c3130372c3132342c3130382c3132342c3130392c3132342c3131302c3132342c3131312c3132342c3131322c3132342c3131332c3132332c3131342c3132332c3131352c3132332c3131362c3132332c3131372c3132332c3131382c3132332c3131392c3132332c3132302c3132332c3132312c3132332c3132322c3132332c3132332c3132332c3132342c3132332c3132352c3132332c3132362c3132332c3132372c3132332c3132382c3132322c3132392c3132322c3133302c3132322c3133302c3132332c3133302c3132342c3133302c3132352c3133302c3132362c3133302c3132372c3133302c3132382c3132392c3132392c3133302c3133302c3132392c3133312c3132392c3133322c3132392c3133332c3132392c3133342c3132392c3133352c3132382c3133362c3132372c3133362c3132362c3133372c3132352c3133372c3132342c3133382c3132332c3133382c3132322c3133392c3132312c3133392c3132302c3134302c3131392c3134302c3131382c3134312c3131382c3134322c3131382c3134332c3131382c3134342c3131382c3134352c3131382c3134362c3131382c3134372c3131382c3134382c3131382c3134392c3131382c3135302c3131382c3135312c3131392c3135322c3131392c3135332c3131392c3135342c3131392c3135352c3131392c3135362c3131392c3135372c3131392c3135382c3131392c3135392c3131392c3136302c3131392c3136312c3131392c3136322c3131382c3136322c3131372c3136322c3131362c3136322c3131352c3136322c3131342c3136322c3131332c3136322c3131322c3136322c3131312c3136322c3131302c3136322c3130392c3136322c3130382c3136322c3130372c3136322c3130362c3136325d7d2c223130223a7b22636f6f7264696e61746573223a5b39382c3133352c39382c3133342c39382c3133332c39382c3133322c39382c3133312c39372c3133302c39372c3132392c39372c3132382c39372c3132372c39372c3132362c39362c3132352c39352c3132352c39342c3132352c39332c3132352c39322c3132352c39312c3132352c39302c3132362c38392c3132362c38382c3132362c38372c3132362c38362c3132362c38352c3132362c38342c3132362c38332c3132362c38322c3132362c38312c3132362c38302c3132362c37392c3132362c37382c3132362c37372c3132362c37362c3132372c37352c3132372c37342c3132372c37332c3132372c37322c3132372c37312c3132372c37302c3132372c36392c3132372c36382c3132372c36372c3132372c36362c3132372c36352c3132372c36342c3132372c36332c3132372c36322c3132382c36312c3132382c36302c3132382c35392c3132382c35382c3132382c35372c3132382c35362c3132382c35352c3132382c35342c3132382c35332c3132382c35322c3132382c35312c3132382c35302c3132382c34392c3132382c34382c3132392c34372c3132392c34362c3132392c34352c3132392c34342c3132392c34332c3132392c34322c3132392c34312c3132392c34302c3132392c33392c3132392c33382c3132392c33372c3132392c33362c3132392c33352c3132392c33342c3133302c33332c3133302c33322c3133302c33312c3133302c33302c3133302c32392c3133302c32382c3133302c32372c3133302c32362c3133302c32352c3132392c32342c3132392c32332c3132392c32322c3132392c32312c3132392c32302c3132382c31392c3132382c31382c3132382c31372c3132382c31362c3132382c31352c3132372c31342c3132372c31332c3132372c31332c3132362c31332c3132352c31332c3132342c31332c3132332c31332c3132322c31332c3132312c31332c3132302c31342c3131392c31352c3131392c31362c3131382c31372c3131382c31382c3131382c31392c3131382c32302c3131372c32312c3131372c32322c3131372c32332c3131372c32342c3131362c32352c3131362c32362c3131362c32372c3131362c32382c3131352c32392c3131352c33302c3131352c33312c3131352c33322c3131342c33332c3131342c33342c3131342c33352c3131342c33362c3131332c33372c3131332c33382c3131332c33392c3131332c34302c3131322c34312c3131322c34322c3131322c34332c3131322c34342c3131312c34352c3131312c34362c3131312c34372c3131312c34382c3131302c34392c3131302c35302c3131302c35312c3131302c35322c3130392c35332c3130392c35342c3130392c35352c3130392c35362c3130382c35372c3130382c35382c3130382c35392c3130382c36302c3130372c36312c3130372c36322c3130372c36332c3130362c36342c3130362c36352c3130362c36362c3130362c36372c3130352c36382c3130352c36392c3130352c37302c3130352c37312c3130342c37322c3130342c37332c3130342c37342c3130332c37352c3130332c37362c3130332c37372c3130332c37382c3130322c37392c3130322c38302c3130322c38312c3130322c38322c3130312c38332c3130312c38342c3130312c38352c3130312c38362c3130302c38372c3130302c38382c3130302c38392c39392c39302c39392c39312c39392c39322c39392c39332c39382c39342c39382c39352c39382c39362c39382c39372c39372c39382c39362c39392c39362c39392c39372c39392c39382c39392c39392c39392c3130302c39392c3130312c39392c3130322c39392c3130332c39392c3130342c39392c3130352c39392c3130362c39392c3130372c39392c3130382c39392c3130392c39392c3131302c39392c3131312c39392c3131322c39392c3131332c39392c3131342c39392c3131352c39392c3131362c3130302c3131372c3130302c3131382c3130302c3131392c3130302c3132302c3130302c3132312c3130302c3132322c3130312c3132332c3130322c3132332c3130332c3132322c3130342c3132312c3130342c3132302c3130342c3131392c3130342c3131382c3130342c3131372c3130342c3131362c3130342c3131352c3130342c3131342c3130342c3131332c3130342c3131322c3130352c3131322c3130362c3131322c3130372c3131322c3130382c3131322c3130392c3131322c3131302c3131312c3131302c3131302c3131312c3130392c3131322c3130382c3131332c3130382c3131342c3130382c3131352c3130382c3131362c3130382c3131372c3130382c3131382c3130382c3131392c3130382c3132302c3130382c3132312c3130382c3132322c3130382c3132332c3130382c3132342c3130382c3132352c3130382c3132362c3130382c3132372c3130382c3132382c3130372c3132382c3130362c3132382c3130352c3132382c3130342c3132382c3130332c3132392c3130322c3132392c3130312c3133302c3130312c3133312c3130312c3133322c3130322c3133332c3130312c3133342c3130312c3133352c3130302c3133362c3130302c3133372c3130302c3133382c3130302c3133392c3130302c3134302c3130302c3134312c3130302c3134322c3130312c3134322c3130322c3134332c3130332c3134332c3130342c3134342c3130352c3134352c3130362c3134362c3130352c3134372c3130352c3134382c3130352c3134382c3130362c3134392c3130372c3135302c3130372c3135302c3130382c3135302c3130392c3134392c3130392c3134382c3131302c3134382c3131312c3134372c3131322c3134382c3131332c3134392c3131332c3135302c3131322c3135312c3131322c3135322c3131312c3135332c3131312c3135342c3131302c3135352c3131302c3135362c3130392c3135372c3130392c3135382c3130382c3135392c3130382c3136302c3130382c3136312c3130392c3136322c3130392c3136332c3130392c3136332c3131302c3136332c3131312c3136332c3131322c3136322c3131322c3136312c3131332c3136302c3131332c3135392c3131342c3135382c3131342c3135372c3131342c3135362c3131352c3135352c3131352c3135342c3131362c3135332c3131362c3135322c3131372c3135312c3131372c3135302c3131372c3134392c3131382c3134382c3131382c3134372c3131392c3134362c3131392c3134352c3132302c3134342c3132302c3134332c3132312c3134322c3132312c3134312c3132312c3134302c3132322c3133392c3132312c3133382c3132322c3133372c3132322c3133362c3132332c3133352c3132332c3133342c3132332c3133332c3132332c3133332c3132322c3133322c3132312c3133312c3132312c3133302c3132312c3132392c3132312c3132382c3132312c3132372c3132322c3132362c3132322c3132352c3132322c3132342c3132322c3132332c3132322c3132322c3132322c3132312c3132322c3132302c3132322c3131392c3132322c3131382c3132322c3131372c3132322c3131362c3132322c3131352c3132322c3131342c3132322c3131332c3132322c3131322c3132332c3131312c3132332c3131302c3132332c3130392c3132332c3130382c3132332c3130372c3132332c3130362c3132342c3130352c3132352c3130352c3132362c3130352c3132372c3130352c3132382c3130342c3132392c3130342c3133302c3130342c3133312c3130342c3133322c3130342c3133332c3130342c3133342c3130342c3133352c3130332c3133352c3130322c3133352c3130312c3133352c3130302c3133352c39392c3133355d7d2c223131223a7b22636f6f7264696e61746573223a5b3133382c3332392c3133382c3332382c3133372c3332372c3133362c3332362c3133362c3332352c3133352c3332342c3133352c3332332c3133352c3332322c3133352c3332312c3133342c3332302c3133342c3331392c3133342c3331382c3133332c3331372c3133332c3331362c3133332c3331352c3133332c3331342c3133322c3331332c3133322c3331322c3133322c3331312c3133312c3331302c3133312c3330392c3133312c3330382c3133312c3330372c3133302c3330362c3133302c3330352c3133302c3330342c3133302c3330332c3132392c3330322c3132392c3330312c3132392c3330302c3132382c3239392c3132382c3239382c3132382c3239372c3132382c3239362c3132372c3239352c3132362c3239342c3132352c3239342c3132342c3239332c3132332c3239332c3132322c3239332c3132312c3239332c3132302c3239332c3131392c3239322c3131382c3239322c3131372c3239322c3131372c3239312c3131372c3239302c3131372c3238392c3131382c3238382c3131382c3238372c3131382c3238362c3131372c3238352c3131362c3238342c3131362c3238332c3131362c3238322c3131352c3238312c3131352c3238302c3131342c3237392c3131342c3237382c3131332c3237372c3131322c3237372c3131312c3237372c3131302c3237372c3130392c3237372c3130382c3237372c3130372c3237372c3130362c3237372c3130352c3237372c3130342c3237372c3130332c3237382c3130332c3237392c3130322c3238302c3130322c3238312c3130312c3238322c3130312c3238332c3130302c3238342c39392c3238342c39382c3238342c39372c3238342c39362c3238352c39352c3238352c39342c3238352c39332c3238352c39322c3238352c39312c3238352c39302c3238352c38392c3238362c39302c3238372c39302c3238382c39302c3238392c38392c3239302c38382c3239302c38372c3239312c38372c3239322c38372c3239332c38372c3239342c38372c3239352c38362c3239362c38362c3239372c38362c3239382c38362c3239392c38352c3330302c38352c3330312c38352c3330322c38352c3330332c38352c3330342c38352c3330352c38342c3330362c38342c3330372c38342c3330382c38342c3330392c38342c3331302c38342c3331312c38342c3331322c38342c3331332c38332c3331342c38332c3331352c38332c3331362c38332c3331372c38332c3331382c38322c3331392c38322c3332302c38322c3332312c38312c3332312c38302c3332312c37392c3332312c37392c3332302c37382c3331392c37382c3331382c37382c3331372c37382c3331362c37372c3331352c37372c3331342c37372c3331332c37372c3331322c37372c3331312c37372c3331302c37382c3330392c37372c3330382c37362c3330372c37352c3330362c37352c3330352c37352c3330342c37352c3330332c37352c3330322c37352c3330312c37362c3330312c37372c3330302c37372c3239392c37372c3239382c37372c3239372c37382c3239362c37382c3239352c37372c3239342c37372c3239332c37362c3239322c37362c3239312c37352c3239302c37352c3238392c37362c3238382c37352c3238372c37352c3238362c37352c3238352c37362c3238342c37372c3238342c37382c3238332c37382c3238322c37372c3238312c37372c3238302c37372c3237392c37372c3237382c37372c3237372c37372c3237362c37372c3237352c37372c3237342c37372c3237332c37362c3237322c37362c3237312c37352c3237302c37342c3237302c37332c3237312c37322c3237322c37322c3237332c37322c3237342c37312c3237352c37312c3237362c37312c3237372c37302c3237372c36392c3237382c36382c3237392c36372c3237392c36362c3237392c36352c3237392c36342c3237392c36332c3237382c36322c3237382c36312c3237372c36302c3237372c36302c3237362c36302c3237352c36302c3237342c36302c3237332c36302c3237322c36302c3237312c36302c3237302c35392c3236392c35382c3236392c35372c3236392c35362c3236392c35352c3236392c35342c3236392c35332c3236392c35322c3236392c35312c3236392c35302c3236392c34392c3236392c34382c3236392c34372c3236392c34362c3236392c34352c3236392c34342c3236392c34332c3236392c34322c3236392c34312c3236392c34302c3236392c33392c3236392c33382c3236392c33372c3236392c33362c3236392c33352c3236392c33342c3236392c33332c3236392c33322c3236392c33312c3236392c33302c3236392c32392c3236392c32382c3236392c32372c3236392c32362c3236392c32352c3236392c32342c3236392c32332c3236392c32322c3236392c32312c3236392c32302c3236392c31392c3236392c31382c3236392c31372c3236392c31362c3237302c31362c3237312c31362c3237322c31362c3237332c31362c3237342c31352c3237352c31352c3237362c31352c3237372c31352c3237382c31352c3237392c31352c3238302c31352c3238312c31342c3238312c31332c3238312c31322c3238312c31312c3238312c31302c3238312c392c3238312c382c3238312c372c3238312c362c3238312c352c3238312c342c3238312c332c3238312c332c3238302c332c3237392c332c3237382c332c3237372c332c3237362c332c3237352c332c3237342c332c3237332c332c3237322c332c3237312c332c3237302c332c3236392c332c3236382c332c3236372c332c3236362c332c3236352c332c3236342c332c3236332c332c3236322c332c3236312c332c3236302c332c3235392c332c3235382c332c3235372c332c3235362c332c3235352c332c3235342c332c3235332c332c3235322c332c3235312c332c3235302c332c3234392c332c3234382c332c3234372c332c3234362c332c3234352c332c3234342c332c3234332c332c3234322c332c3234312c332c3234302c332c3233392c332c3233382c332c3233372c332c3233362c332c3233352c332c3233342c332c3233332c332c3233322c332c3233312c332c3233302c332c3232392c332c3232382c332c3232372c342c3232372c352c3232372c362c3232372c372c3232372c382c3232372c392c3232372c31302c3232372c31312c3232372c31322c3232372c31332c3232372c31342c3232372c31352c3232372c31362c3232372c31372c3232372c31382c3232372c31392c3232372c32302c3232372c32312c3232372c32322c3232372c32332c3232372c32342c3232372c32352c3232372c32362c3232372c32372c3232372c32382c3232372c32392c3232372c33302c3232372c33312c3232372c33322c3232372c33332c3232372c33342c3232372c33352c3232372c33362c3232372c33372c3232372c33382c3232372c33392c3232372c34302c3232372c34312c3232372c34322c3232372c34332c3232372c34342c3232372c34352c3232372c34362c3232372c34372c3232372c34382c3232372c34392c3232372c35302c3232372c35312c3232372c35322c3232372c35332c3232372c35342c3232372c35352c3232372c35362c3232372c35372c3232372c35382c3232372c35392c3232372c36302c3232372c36312c3232372c36322c3232372c36332c3232372c36342c3232372c36352c3232372c36362c3232372c36372c3232372c36382c3232372c36392c3232372c37302c3232372c37312c3232372c37322c3232372c37332c3232372c37342c3232372c37352c3232372c37362c3232372c37372c3232372c37382c3232372c37392c3232372c38302c3232372c38312c3232372c38322c3232372c38332c3232372c38342c3232372c38352c3232372c38362c3232372c38372c3232372c38382c3232372c38392c3232372c39302c3232372c39312c3232372c39322c3232372c39332c3232372c39342c3232372c39352c3232372c39362c3232372c39372c3232372c39382c3232372c39392c3232372c3130302c3232372c3130312c3232372c3130322c3232372c3130332c3232372c3130342c3232372c3130352c3232372c3130362c3232372c3130372c3232372c3130382c3232372c3130392c3232372c3131302c3232372c3131312c3232372c3131322c3232372c3131322c3232382c3131312c3232382c3131302c3232382c3130392c3232382c3130382c3232382c3130372c3232382c3130362c3232392c3130352c3232392c3130342c3232392c3130332c3232392c3130322c3233302c3130312c3233312c3130312c3233322c3130322c3233332c3130322c3233342c3130322c3233352c3130322c3233362c3130332c3233372c3130332c3233382c3130342c3233392c3130352c3233392c3130362c3233392c3130372c3233392c3130382c3233392c3130392c3233392c3131302c3233392c3131312c3233392c3131322c3233382c3131322c3233372c3131332c3233362c3131332c3233352c3131342c3233342c3131342c3233332c3131352c3233322c3131362c3233322c3131372c3233322c3131382c3233322c3131392c3233322c3132302c3233322c3132312c3233322c3132322c3233322c3132332c3233322c3132332c3233332c3132342c3233342c3132342c3233352c3132342c3233362c3132342c3233372c3132352c3233382c3132362c3233382c3132372c3233382c3132382c3233382c3132392c3233382c3133302c3233382c3133312c3233382c3133322c3233382c3133332c3233382c3133342c3233382c3133352c3233382c3133362c3233382c3133372c3233382c3133382c3233382c3133392c3233382c3134302c3233382c3134312c3233382c3134322c3233372c3134332c3233372c3134342c3233372c3134352c3233362c3134362c3233362c3134372c3233362c3134382c3233362c3134392c3233362c3135302c3233362c3135312c3233372c3135322c3233372c3135332c3233372c3135342c3233372c3135352c3233372c3135362c3233362c3135372c3233362c3135382c3233362c3135392c3233362c3136302c3233362c3136312c3233362c3136322c3233362c3136332c3233362c3136332c3233372c3136342c3233382c3136342c3233392c3136342c3234302c3136342c3234312c3136332c3234312c3136322c3234312c3136312c3234312c3136302c3234312c3135392c3234312c3135382c3234312c3135372c3234312c3135362c3234312c3135352c3234312c3135342c3234312c3135332c3234312c3135322c3234312c3135312c3234322c3135312c3234332c3135302c3234342c3134392c3234352c3134382c3234352c3134372c3234352c3134362c3234362c3134352c3234362c3134342c3234362c3134332c3234362c3134322c3234362c3134312c3234372c3134302c3234372c3133392c3234382c3133392c3234392c3133392c3235302c3133392c3235312c3133392c3235322c3133392c3235332c3134302c3235342c3134302c3235352c3134302c3235362c3134302c3235372c3134302c3235382c3134302c3235392c3134302c3236302c3134302c3236312c3134302c3236322c3134302c3236332c3134302c3236342c3134302c3236352c3134302c3236362c3134302c3236372c3134302c3236382c3134302c3236392c3134302c3237302c3134302c3237312c3134302c3237322c3134302c3237332c3134302c3237342c3134302c3237352c3134302c3237362c3134302c3237372c3134302c3237382c3134302c3237392c3133392c3237392c3133382c3238302c3133372c3238302c3133362c3238302c3133352c3238302c3133342c3238312c3133332c3238312c3133322c3238312c3133312c3238312c3133302c3238322c3133312c3238332c3133322c3238332c3133332c3238332c3133342c3238332c3133352c3238332c3133362c3238332c3133372c3238332c3133372c3238342c3133382c3238352c3133392c3238352c3134302c3238362c3134312c3238372c3134312c3238382c3134312c3238392c3134302c3239302c3134302c3239312c3133392c3239302c3133382c3239302c3133372c3238392c3133372c3238382c3133362c3238372c3133352c3238382c3133352c3238392c3133352c3239302c3133342c3239302c3133332c3239312c3133342c3239322c3133342c3239332c3133342c3239342c3133352c3239352c3133352c3239362c3133352c3239372c3133362c3239382c3133362c3239392c3133372c3330302c3133372c3330312c3133372c3330322c3133382c3330332c3133382c3330342c3133382c3330352c3133392c3330362c3133392c3330372c3134302c3330382c3134302c3330392c3134302c3331302c3134302c3331312c3134302c3331322c3134302c3331332c3134302c3331342c3134302c3331352c3134302c3331362c3134302c3331372c3134302c3331382c3134312c3331392c3134312c3332302c3134312c3332312c3134312c3332322c3134312c3332332c3134312c3332342c3134312c3332352c3134312c3332362c3134312c3332372c3134312c3332382c3134312c3332392c3134302c3332392c3133392c3332395d7d2c223132223a7b22636f6f7264696e61746573223a5b36312c3230352c36302c3230342c35392c3230332c35382c3230322c35382c3230312c35372c3230302c35362c3139392c35352c3230302c35342c3230312c35342c3230322c35332c3230332c35322c3230342c35312c3230342c35302c3230342c34392c3230342c34382c3230342c34372c3230342c34362c3230342c34362c3230332c34362c3230322c34362c3230312c34362c3230302c34362c3139392c34362c3139382c34362c3139372c34362c3139362c34362c3139352c34362c3139342c34362c3139332c34362c3139322c34362c3139312c34362c3139302c34362c3138392c34362c3138382c34362c3138372c34362c3138362c34362c3138352c34362c3138342c34362c3138332c34362c3138322c34362c3138312c34362c3138302c34362c3137392c34362c3137382c34362c3137372c34362c3137362c34362c3137352c34362c3137342c34362c3137332c34362c3137322c34362c3137312c34362c3137302c34362c3136392c34362c3136382c34362c3136372c34362c3136362c34362c3136352c34372c3136352c34382c3136352c34392c3136352c35302c3136352c35312c3136352c35322c3136352c35332c3136352c35342c3136352c35352c3136352c35362c3136352c35372c3136352c35382c3136352c35392c3136352c36302c3136352c36312c3136352c36322c3136352c36332c3136352c36342c3136352c36352c3136352c36362c3136352c36372c3136352c36382c3136352c36392c3136352c37302c3136352c37312c3136352c37322c3136352c37332c3136352c37342c3136352c37352c3136352c37362c3136352c37372c3136352c37382c3136352c37392c3136352c38302c3136352c38312c3136352c38322c3136352c38332c3136352c38342c3136352c38352c3136352c38362c3136352c38372c3136352c38382c3136352c38392c3136352c39302c3136352c39302c3136362c39302c3136372c39302c3136382c39302c3136392c39302c3137302c39302c3137312c39312c3137322c39312c3137332c39312c3137342c39312c3137352c39312c3137362c39312c3137372c39312c3137382c39312c3137392c39312c3138302c39312c3138312c39312c3138322c39312c3138332c39312c3138342c39322c3138352c39322c3138362c39322c3138372c39322c3138382c39322c3138392c39332c3139302c39332c3139312c39332c3139322c39332c3139332c39332c3139342c39332c3139352c39332c3139362c39322c3139372c39322c3139382c39332c3139392c39332c3230302c39332c3230312c39332c3230322c39332c3230332c39332c3230342c39332c3230352c39322c3230352c39312c3230352c39302c3230352c38392c3230352c38382c3230352c38372c3230352c38362c3230352c38352c3230352c38342c3230352c38332c3230352c38322c3230352c38312c3230352c38302c3230352c37392c3230352c37382c3230352c37372c3230352c37362c3230352c37352c3230352c37352c3230342c37352c3230332c37352c3230322c37342c3230312c37342c3230302c37342c3139392c37342c3139382c37342c3139372c37342c3139362c37342c3139352c37342c3139342c37332c3139332c37332c3139322c37332c3139312c37332c3139302c37332c3138392c37332c3138382c37322c3138372c37312c3138382c37312c3138392c37312c3139302c37312c3139312c37312c3139322c37312c3139332c37312c3139342c37312c3139352c37312c3139362c37312c3139372c37312c3139382c37312c3139392c37302c3230302c37302c3230312c37302c3230322c37302c3230332c37302c3230342c37302c3230352c36392c3230352c36382c3230352c36372c3230352c36362c3230352c36352c3230352c36342c3230352c36332c3230352c36322c3230355d7d7d7d"},Symbol.toStringTag,{value:"Module"}))}();