(self.webpackChunk_aidoop_aidoop_r=self.webpackChunk_aidoop_aidoop_r||[]).push([[6054],{34865:(t,e,o)=>{"use strict";o.d(e,{Z:()=>a}),o(51266).log("%c\n  ▄▄  ▄▄▄  ▄▄▄ ▄▄▄   ▄▄  ▄▄▄  ▄▄     ▄▄▄   ▄▄  ▄▄▄   ▄▄  ▄▄▄ \n ▓  ▓ ▓  ▓ ▓   ▓  ▓ ▓  ▓  ▓  ▓  ▓    ▓  ▓ ▓  ▓ ▓  ▓ ▓  ▓  ▓  \n ▓  ▓ ▓▀▀  ▓▀▀ ▓▀▀▄ ▓▀▀▓  ▓  ▓  ▓ ▀▀ ▓▀▀▄ ▓  ▓ ▓▀▀▄ ▓  ▓  ▓  \n ▓  ▓ ▓    ▓   ▓  ▓ ▓  ▓  ▓  ▓  ▓    ▓  ▓ ▓  ▓ ▓  ▓ ▓  ▓  ▓  \n  ▀▀  ▀    ▀▀▀ ▀  ▀ ▀  ▀  ▀   ▀▀     ▀  ▀  ▀▀  ▀▀▀   ▀▀   ▀  \n","background: #222; color: #bada55");const a={bootstrap:function(){}}},38243:(t,e,o)=>{"use strict";o.d(e,{Z:()=>a});const a={}},41856:(t,e,o)=>{"use strict";o.d(e,{Z:()=>a});const a={}},600:(t,e,o)=>{"use strict";o.d(e,{Z:()=>a});const a={}},78706:(t,e,o)=>{"use strict";o.d(e,{Z:()=>a});const a={}},67062:(t,e,o)=>{"use strict";o.d(e,{Z:()=>a});const a={}},51039:(t,e,o)=>{"use strict";o.d(e,{Z:()=>a});const a={}},87400:(t,e,o)=>{"use strict";o.d(e,{Z:()=>a});const a={}},84233:(t,e,o)=>{"use strict";o.d(e,{Z:()=>K});o(77198),o(14735),o(18477),o(58095),o(39663);var a=o(94430),i=o(15494),n=o(9201);const r=[{option:"exposure",value:8500,range:{minValue:1,maxValue:165e3,step:1,defaultValue:8500}},{option:"gain",value:16,range:{minValue:16,maxValue:248,step:1,defaultValue:16}},{option:"enable-auto-exposure",value:1},{option:"visual-preset",value:0,range:{minValue:0,maxValue:6,step:1,defaultValue:0}},{option:"laser-power",value:150,range:{minValue:0,maxValue:360,step:30,defaultValue:150}},{option:"emitter-enabled",value:1,values:[0,1,2]},{option:"frames-queue-size",value:16,range:{minValue:0,maxValue:32,step:1,defaultValue:16}},{option:"error-polling-enabled",value:1},{option:"output-trigger-enabled",value:0},{option:"depth-units",value:.0010000000474974513,range:{minValue:9.999999974752427e-7,maxValue:.009999999776482582,step:9.999999974752427e-7,defaultValue:.0010000000474974513}},{option:"stereo-baseline",value:50.123226165771484,range:{minValue:50.123226165771484,maxValue:50.123226165771484,step:0,defaultValue:50.123226165771484}},{option:"inter-cam-sync-mode",value:0,values:[0,1,2]},{option:"emitter-on-off",value:0},{option:"global-time-enabled",value:1}];class s extends a.oi{static get styles(){return[n.Ix,a.iv`
        :host {
          display: flex;
          flex-direction: column;

          align-items: stretch;
          background-color: #fff;

          width: var(--overlay-center-normal-width, 50%);
          height: var(--overlay-center-normal-height, 50%);

          font-size: 14px;
        }

        content {
          flex: 1;

          display: flex;
          flex-direction: row;

          overflow: auto;
          padding: 20px 20px 20px 0;
        }

        [settings] {
          flex: 2;
          overflow: auto;
        }

        fieldset {
          border-width: 0 0 1px 0;
          border-bottom: 1px solid rgba(0, 0, 0, 0.1);
          padding: 0 20px 10px 20px;
        }
        label {
          display: block;
          text-align: right;
          color: var(--secondary-text-color);
          text-transform: capitalize;
        }
        fieldset [column1],
        fieldset [column2] {
          display: grid;
          grid-template-columns: repeat(6, 1fr);
          gap: 10px 5px;
          padding-bottom: 10px;
        }
        fieldset [column1] label,
        fieldset [column2] label {
          grid-column: span 1 / auto;
        }
        fieldset [column2] select {
          grid-column: span 2 / auto;
        }
        fieldset [column1] > *:not(label) {
          grid-column: span 5 / auto;
        }

        mwc-slider {
          display: block;
        }

        [stream] {
          flex: 2;
          position: relative;
        }

        .button-container {
          display: flex;
          margin-left: auto;
        }
        [msg] {
          background-color: #303030;
          width: 100%;
          min-height: 180px;
          padding-top: 20%;
          text-align: center;
          font-size: 0.8em;
          color: rgba(255, 255, 255, 0.5);
          text-transform: capitalize;
        }
        [msg] mwc-icon {
          display: block;
          font-size: 36px;
        }
        canvas {
          display: block;
          min-height: 300px;
          position: absolute;
          top: 0px;
          left: 0px;
          width: 100%;
        }
      `]}static get properties(){return{value:Object}}disconnectedCallback(){this.webcamClient.disconnect()}render(){var{sensor:t="0"}=this.value||{};return a.dy`
      <content>
        <div settings>
          <fieldset>
            <div column2>
              <label>sensor</label>
              <select>
                <option value="0">RGB Camera</option>
                <option value="1">Stereo Camera</option>
              </select>
            </div>
            ${"0"==t?a.dy`
                  <div column2>
                    <label>stream</label>
                    <select>
                      <option>color</option>
                    </select>

                    <label>resolution</label>
                    <select>
                      <option>1920x1080</option>
                      <option>1280x720</option>
                      <option>960x540</option>
                      <option>848x480</option>
                      <option>640x480</option>
                      <option>640x360</option>
                      <option>424x240</option>
                      <option>320x240</option>
                      <option>320x180</option>
                    </select>

                    <label>format</label>
                    <select>
                      <option>rgb8</option>
                      <option>raw16</option>
                      <option>y16</option>
                      <option>bgra8</option>
                      <option>rgba8</option>
                      <option>bgr8</option>
                      <option>yuyv</option>
                      <option>rgb8</option>
                    </select>

                    <label>FPS</label>
                    <select>
                      <option>60</option>
                      <option>30</option>
                      <option>15</option>
                      <option>6</option>
                    </select>
                  </div>
                `:a.dy`
                  <div column2>
                    <label>stream</label>
                    <select>
                      <option>depth</option>
                      <option>infrared-1</option>
                      <option>infrared-2</option>
                    </select>

                    <label>resolution</label>
                    <select>
                      <option>1280x800</option>
                      <option>1280x720</option>
                      <option>848x480</option>
                      <option>848x100</option>
                      <option>640x480</option>
                      <option>640x400</option>
                      <option>640x360</option>
                      <option>480x270</option>
                      <option>424x240</option>
                      <option>256x144</option>
                    </select>

                    <label>format</label>
                    <select>
                      <option>z16</option>
                      <option>y8</option>
                      <option>y16</option>
                    </select>

                    <label>FPS</label>
                    <select>
                      <option>100</option>
                      <option>90</option>
                      <option>60</option>
                      <option>30</option>
                      <option>25</option>
                      <option>15</option>
                    </select>
                  </div>
                `}
            ${r.map((t=>a.dy`
               <div column1>
                  <label>${t.option}</label>
                  ${t.range?a.dy`
                          <mwc-slider
                            pin
                            markers
                            max=${t.range.maxValue}
                            min=${t.range.minValue}
                            value=${t.value}
                            step=${t.range.step}
                          ></mwc-slider>
                        `:t.values?t.values.map((e=>a.dy`
                              <mwc-radio name=${t.option} .checked=${e==t.value}>${e}</mwc-radio>
                            `)):a.dy` <mwc-checkbox .checked=${1==t.value}></mwc-checkbox> </div>`}
                </fieldset>
              `))}
          </fieldset>
        </div>

        <div stream>
          <div msg><mwc-icon>camera</mwc-icon>turn on the camera.</div>
          <canvas></canvas>
        </div>
      </content>

      <div class="button-container">
        <mwc-button @click=${this.oncancel.bind(this)}>${i.z.t("button.cancel")}</mwc-button>
        <mwc-button @click=${this.onconfirm.bind(this)}>${i.z.t("button.confirm")}</mwc-button>
      </div>
    `}onchange(t){t.stopPropagation(),this.value||(this.value={});for(let t in this.value)delete this.value[t];Object.assign(this.value,t.detail)}oncancel(t){history.back()}onconfirm(t){this.confirmCallback&&this.confirmCallback(this.value?JSON.stringify(this.value):""),history.back()}}customElements.define("camera-setting-popup",s);var l=o(74688),c=o(70374);class p extends l.O{static get styles(){return[...l.O.styles]}static get properties(){return{value:Object}}editorTemplate(t){return a.dy`<mwc-button @click=${t=>this.openSettingSetup()}>${i.z.t("text.camera setting")}</mwc-button>`}async openSettingSetup(){this.popup&&delete this.popup;var t=a.dy`
      <camera-setting-popup .value=${this.value} .confirmCallback=${t=>{this.dispatchEvent(new CustomEvent("change",{bubbles:!0,composed:!0,detail:this.value}))}}> </camera-setting-popup>
    `;this.popup=(0,c.Mw)(t,{backdrop:!0,size:"large",title:i.z.t("text.camera setting")})}}customElements.define("camera-setting-editor",p);var d=o(16682),u=o(80692);const m=new Array(9).fill(0);class h extends a.oi{static get styles(){return[n.Ix,a.iv`
        :host {
          display: flex;
          flex-direction: column;

          align-items: stretch;
          background-color: #fff;

          width: var(--overlay-center-normal-width, 50%);
          height: var(--overlay-center-normal-height, 50%);
        }

        content {
          flex: 1;

          display: flex;
          flex-direction: row;

          overflow: auto;
          padding: 20px 20px 20px 0;
        }

        [calibration] {
          flex: 2;

          overflow: auto;
        }
        fieldset {
          border-width: 0 0 1px 0;
          border-bottom: 1px solid rgba(0, 0, 0, 0.1);
          padding: 10px 20px;
        }
        fieldset:first-child {
          padding-top: 0px;
        }
        fieldset:nth-child(even) {
          background-color: var(--main-section-background-color);
        }
        legend {
          float: left;
          padding: 0;
          margin-top: -5px;
          margin-bottom: 5px;
          text-transform: capitalize;
          font-weight: bold;
          color: var(--secondary-text-color);
        }
        fieldset > div {
          clear: both;
        }
        label {
          display: block;
          text-align: right;
          text-transform: capitalize;
        }

        [stream] {
          flex: 2;
          position: relative;
        }

        [matrix] {
          display: grid;
          grid-template-columns: repeat(3, 1fr);
          gap: 10px 5px;
        }

        [matrix] * {
          min-width: 100px;
        }

        [coeff] {
          display: grid;
          grid-template-columns: repeat(12, 1fr);
          gap: 10px 5px;
        }
        [coeff] label {
          grid-column: span 2 / auto;
          color: var(--secondary-text-color);
        }
        [coeff] input {
          grid-column: span 4 / auto;
        }

        .button-container {
          display: flex;
          margin-left: auto;
        }

        [msg] {
          background-color: #303030;
          width: 100%;
          min-height: 180px;
          padding-top: 120px;
          text-align: center;
          font-size: 0.8em;
          color: rgba(255, 255, 255, 0.5);
          text-transform: capitalize;
        }
        [msg] mwc-icon {
          display: block;
          font-size: 36px;
        }
        canvas {
          display: block;
          min-height: 300px;
          position: absolute;
          top: 0px;
          left: 0px;
          width: 100%;
        }
        [button-group] {
          padding: 10px 20px 0 15px;
          text-align: right;
        }
        [button-group] mwc-button {
          --mdc-theme-primary: #fff;
          background-color: var(--secondary-color);
          border-radius: var(--border-radius);
          margin: 0 0 5px 5px;
          padding-bottom: 2px;
        }
        [button-group] .alignL {
          float: left;
          background-color: #747474;
        }
      `]}static get properties(){return{value:Object,host:Object}}async disconnectedCallback(){var t=this.host?.name;if(!(await u.Lp.mutate({mutation:d.ZP`
        mutation ($name: String!) {
          finishCameraCalibrate(name: $name)
        }
      `,variables:{name:t}})).data.finishCameraCalibrate)throw new Error("finishCameraCalibrate error");await this.stopSubscribe()}async firstUpdated(){var t=this.host?.name;this.name="cameracalib:"+t,await this.startSubscribe(this.name)}render(){var{distortionCoefficient:t=[],cameraMatrix:e={}}=this.value||{},{rows:o=3,columns:n=3,data:r=[...m]}=e,s=[...r||[],...m].slice(0,9),l=[...t,...m].slice(0,5);return a.dy`
      <content>
        <div calibration>
          <fieldset>
            <legend>camera matrix</legend>
            <div matrix @change=${t=>this.onchange(t)}>
              ${s.map((t=>a.dy` <input type="number" .value=${t} /> `))}
            </div>
          </fieldset>

          <fieldset>
            <legend>distortion coeffeicients</legend>
            <div coeff @change=${t=>this.onchange(t)}>
              <label>k1</label>
              <input type="number" .value=${l[0]} />
              <label>k2</label>
              <input type="number" .value=${l[1]} />
              <label>p1</label>
              <input type="number" .value=${l[2]} />
              <label>p2</label>
              <input type="number" .value=${l[3]} />
              <label>k3</label>
              <input type="number" .value=${l[4]} />
            </div>
          </fieldset>

          <div button-group>
            <mwc-button
              dense
              label="Take Snapshot"
              @click=${this.takeSnapshot.bind(this)}
              icon="wallpaper"
            ></mwc-button>
            <mwc-button dense label="Get Result" @click=${this.getResult.bind(this)} icon="wallpaper"></mwc-button>
            <mwc-button
              dense
              label="Calibrate"
              icon="exposure"
              @click=${this.calibrateCameraParameter.bind(this)}
            ></mwc-button>
          </div>
        </div>

        <div stream>
          <div msg><mwc-icon>camera</mwc-icon>turn on the camera.</div>
          <canvas></canvas>
        </div>
      </content>

      <div class="button-container">
        <mwc-button @click=${this.oncancel.bind(this)}>${i.z.t("button.cancel")}</mwc-button>
        <mwc-button @click=${this.onconfirm.bind(this)}>${i.z.t("button.confirm")}</mwc-button>
      </div>
    `}async takeSnapshot(){var t=this.host?.name;if(!(await u.Lp.mutate({mutation:d.ZP`
        mutation ($name: String!) {
          captureCalibrateResult(name: $name)
        }
      `,variables:{name:t}})).data.captureCalibrateResult)throw new Error("takeSnapshot error")}async getResult(){var t=this.host?.name;if(!(await u.Lp.mutate({mutation:d.ZP`
        mutation ($name: String!) {
          getCalibrateResult(name: $name)
        }
      `,variables:{name:t}})).data.getCalibrateResult)throw new Error("getCalibrateResult error")}async calibrateCameraParameter(){var t=this.host?.name;const e=await u.Lp.query({query:d.ZP`
        mutation ($name: String!) {
          calibrateCameraParameter(name: $name) {
            distortionCoefficient
            cameraMatrix {
              rows
              columns
              data
            }
          }
        }
      `,variables:{name:t}});var o=e?.data?.calibrateCameraParameter;null!=o&&(this.value=o)}onchange(t){t.stopPropagation();var e=this.renderRoot.querySelectorAll("[coeff] input"),o=this.renderRoot.querySelectorAll("[matrix] input");this.value={distortionCoefficient:Array.from(e).map((t=>t.value)),cameraMatrix:{rows:3,columns:3,data:Array.from(o).map((t=>t.value))}}}oncancel(t){history.back()}onconfirm(t){this.confirmCallback&&this.confirmCallback(this.value),history.back()}async startSubscribe(t){if(this.subscription)return;const e=t;var o=this.renderRoot.querySelector("canvas"),a=o.getContext("2d");o.width=640,o.height=480,this.subscription=await(0,u.Ld)({query:d.ZP`
          subscription {
            data(tag: "${e}") {
              tag
              data
            }
          }`},{next:({data:t})=>{if(t){var e=t.data.data;if("video"===e?.type){var o=new Image;o.src=e?.frame,o.onload=()=>{a.drawImage(o,0,0),URL.revokeObjectURL(t)}}else if("object"===e?.type){var i=e?.objectData;this.value=JSON.parse(i?.toString())}else"error"===e?.type&&document.dispatchEvent(new CustomEvent("notify",{detail:{level:"error",message:e?.message}}))}}})}async stopSubscribe(){await(this.subscription?.unsubscribe()),delete this.subscription}}customElements.define("camera-calibration-popup",h);const b=new Array(9).fill(0);class v extends l.O{static get styles(){return[...l.O.styles,a.iv`
        :host {
          margin-top: 20px;
        }

        [matrix] {
          display: grid;
          grid-template-columns: repeat(3, 1fr);
          column-gap: 4px;
          row-gap: 4px;
        }

        [coeff] {
          display: grid;
          grid-template-columns: repeat(5, 1fr);
          column-gap: 4px;
          row-gap: 4px;
        }

        input {
          min-width: 100px;
        }

        mwc-button {
          display: block;
          text-align: center;
        }
      `]}static get properties(){return{value:Object}}editorTemplate(t){var{distortionCoefficient:e=[],cameraMatrix:o={}}=this.value||{},{rows:n=3,columns:r=3,data:s=[...b]}=o,l=[...s||[],...b].slice(0,9),c=[...e,...b].slice(0,5);return a.dy`
      <div>
        <label>distortion coefficients</label>
        <div coeff @change=${t=>this.onchange(t)}>
          ${c.map((t=>a.dy` <input type="number" value=${t} /> `))}
        </div>

        <label>camera matrix</label>
        <div matrix @change=${t=>this.onchange(t)}>
          ${l.map((t=>a.dy` <input type="number" value=${t} /> `))}
        </div>

        <mwc-button @click=${t=>this.openCameraCalibration()}>${i.z.t("text.camera calibration")}</mwc-button>
      </div>
    `}onchange(t){var e=this.renderRoot.querySelectorAll("[coeff] input"),o=this.renderRoot.querySelectorAll("[matrix] input");this.value={distortionCoefficient:Array.from(e).map((t=>t.value)),cameraMatrix:{rows:3,columns:3,data:Array.from(o).map((t=>t.value))}},t.stopPropagation(),this.dispatchEvent(new CustomEvent("change",{bubbles:!0,detail:this.value}))}async openCameraCalibration(){this.popup&&delete this.popup;var t=a.dy`
      <camera-calibration-popup .value=${this.value} .host=${this.host} .confirmCallback=${t=>{this.value=t,this.dispatchEvent(new CustomEvent("change",{bubbles:!0,composed:!0,detail:this.value}))}}>
      </camera-calibration-popup>
    `;this.popup=(0,c.Mw)(t,{backdrop:!0,size:"large",title:i.z.t("text.camera calibration")})}}customElements.define("camera-calibration-editor",v);var g=o(51266);class f extends a.oi{static get styles(){return[n.Ix,a.iv`
        :host {
          display: flex;
          flex-direction: column;

          align-items: stretch;
          background-color: #fff;

          width: var(--overlay-center-normal-width, 50%);
          height: var(--overlay-center-normal-height, 50%);
        }

        content {
          flex: 1;

          display: flex;
          flex-direction: row;

          overflow: auto;
          padding: 20px 20px 20px 0;
        }

        [roi-setting] {
          flex: 2;

          overflow-y: auto;
          overflow-x: none;
        }

        fieldset {
          border-width: 0 0 1px 0;
          border-bottom: 1px solid rgba(0, 0, 0, 0.1);
          padding: 10px 20px;
        }
        fieldset:first-child {
          padding-top: 0px;
        }
        fieldset:nth-child(even) {
          background-color: var(--main-section-background-color);
        }
        legend {
          float: left;
          padding: 0;
          margin-top: -5px;
          margin-bottom: 5px;
          text-transform: capitalize;
          font-weight: bold;
          color: var(--secondary-text-color);
        }
        fieldset [roi-cell] {
          clear: both;
          display: grid;
          grid-template-columns: repeat(8, 1fr);
          gap: 10px 5px;
        }
        fieldset mwc-button {
          --mdc-theme-primary: #666;
          float: right;
        }
        .mdc-button .mdc-button__icon {
          margin-right: 0px;
        }

        [roi] input {
          min-width: 100px;
          grid-column: span 3 / auto;
        }
        [roi] span {
          grid-column: span 3 / auto;
        }

        label {
          display: block;
          text-align: right;
          grid-column: span 2 / auto;
          color: var(--secondary-text-color);
        }

        [stream] {
          flex: 2;
          position: relative;
        }

        .button-container {
          display: flex;
          margin-left: auto;
        }

        [msg] {
          background-color: #303030;
          width: 100%;
          min-height: 180px;
          padding-top: 120px;
          text-align: center;
          font-size: 0.8em;
          color: rgba(255, 255, 255, 0.5);
          text-transform: capitalize;
        }
        [msg] mwc-icon {
          display: block;
          font-size: 36px;
        }
        canvas {
          display: block;
          min-height: 300px;
          position: absolute;
          top: 0px;
          left: 0px;
          width: 100%;
        }
        [button-group] {
          padding: 10px 20px 0 15px;
          text-align: right;
        }
        [button-group] mwc-button {
          --mdc-theme-primary: #fff;
          background-color: var(--secondary-color);
          border-radius: var(--border-radius);
          margin: 0 0 5px 5px;
          padding-bottom: 2px;
        }
        [button-group] .alignL {
          float: left;
          background-color: #747474;
        }
      `]}static get properties(){return{value:Array,host:Object}}disconnectedCallback(){this.webcamClient.disconnect()}render(){var t=this.value instanceof Array?this.value:[];return a.dy`
      <content>
        <div roi-setting>
          <div @change=${t=>this.onchange(t)}>
            ${t.map((t=>{var{id:e="",region:o={}}=t,n=o.lt?.x||0,r=o.lt?.y||0,s=o.rb?.x||0,l=o.rb?.y||0;return a.dy`
                <fieldset roi added>
                  <legend>camera #</legend>
                  <mwc-button dense @click=${t=>this.onClickDelete(t)} icon="highlight_off"
                    >${i.z.t("button.delete")}</mwc-button
                  >
                  <div roi-cell>
                    <label>ID</label>
                    <input type="text" value=${e} />
                    <span></span>
                    <label>Left-Top</label>
                    <input type="number" .value=${n} placeholder="X" />
                    <input type="number" .value=${r} placeholder="Y" />
                    <label>Right-Bottom</label>
                    <input type="number" .value=${s} placeholder="X" />
                    <input type="number" .value=${l} placeholder="Y" />
                  </div>
                </fieldset>
              `}))}

            <fieldset roi add>
              <legend>camera #</legend>
              <mwc-button dense @click=${t=>this.onClickAdd()} icon="add_circle_outline"
                >${i.z.t("button.add")}</mwc-button
              >
              <div roi-cell>
                <label>ID</label>
                <input type="text" />
                <span></span>
                <label>Left-Top</label>
                <input type="number" placeholder="X" />
                <input type="number" placeholder="Y" />
                <label>Right-Bottom</label>
                <input type="number" placeholder="X" />
                <input type="number" placeholder="Y" />
              </div>
            </fieldset>
          </div>

          <div button-group>
            <mwc-button dense label="Take Snapshot" icon="wallpaper"></mwc-button>
            <mwc-button dense label="Reset" class="alignL"></mwc-button>
            <mwc-button dense label="Detect" icon="exposure" @click=${this.detectROIs.bind(this)}></mwc-button>
          </div>
        </div>

        <div stream>
          <div msg><mwc-icon>camera</mwc-icon>turn on the camera.</div>
          <canvas></canvas>
        </div>
      </content>

      <div class="button-container">
        <mwc-button @click=${this.oncancel.bind(this)}>${i.z.t("button.cancel")}</mwc-button>
        <mwc-button @click=${this.onconfirm.bind(this)}>${i.z.t("button.confirm")}</mwc-button>
      </div>
    `}async detectROIs(){var t=this.host?.name;var e=(await u.Lp.query({query:d.ZP`
        mutation ($name: String!) {
          detectTrackingCameraROIs(name: $name) {
            id
            region {
              lt {
                x
                y
              }
              rb {
                x
                y
              }
            }
          }
        }
      `,variables:{name:t}})).data.detectTrackingCameraROIs;g.log("detected rois",e),this.value=e}extractRoi(t){var e=t.querySelectorAll("input"),[o,a,i,n,r]=Array.from(e).map((t=>t.value));return{id:o,region:{lt:{x:a,y:i},rb:{x:n,y:r}}}}onClickAdd(){this.value=[...this.value||[],this.extractRoi(this.renderRoot.querySelector("fieldset[add]"))];var t=this.renderRoot.querySelectorAll("fieldset[add] input");Array.from(t).forEach((t=>t.value=""))}onClickDelete(t){var e=t.target.parentElement,o=this.renderRoot.querySelectorAll("fieldset[added]"),a=Array.from(o).filter((t=>e!==t)).map((t=>this.extractRoi(t)));this.value=a}onchange(t){t.stopPropagation();var e=this.renderRoot.querySelectorAll("fieldset[added]");this.value=Array.from(e).map((t=>this.extractRoi(t)))}oncancel(t){history.back()}onconfirm(t){this.confirmCallback&&this.confirmCallback(this.value||[]),history.back()}}customElements.define("camera-roi-popup",f);class x extends l.O{static get styles(){return[...l.O.styles]}static get properties(){return{value:Object}}editorTemplate(t){return a.dy`<mwc-button @click=${t=>this.openROISetup()}>${i.z.t("text.camera roi")}</mwc-button>`}async openROISetup(){this.popup&&delete this.popup;var t=a.dy`
      <camera-roi-popup .value=${this.value} .host=${this.host} .confirmCallback=${t=>{this.value=t,this.dispatchEvent(new CustomEvent("change",{bubbles:!0,composed:!0,detail:this.value}))}}> </camera-roi-popup>
    `;this.popup=(0,c.Mw)(t,{backdrop:!0,size:"large",title:i.z.t("text.camera roi")})}}customElements.define("camera-roi-editor",x);var y=o(71277),w=o(51266);async function $(t){const e=await u.Lp.query({query:d.ZP`
      query($name: String!) {
        robotArmGetPose(name: $name) {
          x
          y
          z
          u
          v
          w
        }
      }
    `,variables:{name:t}});return w.log("detected pose",e.data?.robotArmGetPose),e.data?.robotArmGetPose}async function k(t,e){const o=await u.Lp.mutate({mutation:d.ZP`
      mutation($name: String!, $pose: PoseInput!) {
        robotArmTaskMoveTo(name: $name, pose: $pose) {
          x
          y
          z
          u
          v
          w
        }
      }
    `,variables:{name:t,pose:e}});return o.data?.robotArmTaskMoveTo}const j=["x","y","z","u","v","w"];class C extends a.oi{static get properties(){return{value:Object,connection:String}}static get styles(){return a.iv`
      :host {
        display: flex;
        flex-direction: row;
      }

      [inputs] {
        flex: 1;

        display: flex;
        flex-direction: column;
      }

      [pose-values] {
        flex: 1;

        display: grid;
        grid-template-columns: repeat(3, 20px 1fr);
        grid-gap: 4px 4px;
        padding: 4px 0;
      }

      [pose-values] input {
        min-width: 50px;
      }
    `}render(){const t=this.value||{};return a.dy`
      <div inputs>
        <div @change=${t=>this.onChangePose(t)} pose-values>
          ${j.map((e=>a.dy`
              <label for=${e}>${e.toUpperCase()}</label>
              <input id=${e} type="number" .value=${t&&t[e]||0} placeholder=${e} />
            `))}
        </div>
      </div>

      <mwc-button dense @click=${t=>this.onClickSet(t)} icon="edit_location"></mwc-button>
      <mwc-button dense @click=${t=>this.onClickMove(t)} icon="my_location"></mwc-button>
    `}async setByCurrentPose(){return this.value=await $(this.connection),(0,y.TL)(this,this.value),this.value}setByInputs(){var t=this.renderRoot.querySelectorAll("[pose-values] input"),e=Array.from(t).map((t=>t.value));return this.value=j.reduce(((t,o,a)=>(t[o]=e[a],t)),{}),(0,y.TL)(this,this.value),this.value}onChangePose(t){t.stopPropagation(),this.setByInputs()}async onClickSet(t){await this.setByCurrentPose()}async onClickMove(t){const{connection:e,value:o}=this;return e&&o&&await k(e,o||{})}}customElements.define("robot-arm-pose-input",C);class S extends a.oi{static get styles(){return a.iv`
      :host {
        display: flex;
        flex-direction: row;
      }
      mwc-button {
        --mdc-theme-primary: #fff;
        background-color: var(--secondary-color);
        border-radius: var(--border-radius);
        margin: 0 0 5px 5px;
        padding-bottom: 2px;
      }
      [modeSwitch] span {
        width: 16px;
        height: 16px;
        background-color: #efefef;
        border-radius: 10px;
        border-style: solid;
        border-color: #2b2e3a;
        border-width: 2px 30px 2px 2px;
        margin: 2px 0 0 7px;
      }
      [modeSwitch] span::before {
        content: 'off';
        position: relative;
        top: -5px;
        margin-left: 20px;
        font-size: 9px;
      }
      [modeSwitch][switchOn] span {
        background-color: #fff;
        border-color: #8bc34a;
        border-width: 2px 2px 2px 30px;
      }
      [modeSwitch][switchOn] span::before {
        content: 'on';
        margin-left: -40px;
        font-size: 10px;
        font-weight: bold;
      }
    `}static get properties(){return{connection:String,program:Array,teachingMode:Boolean}}render(){return a.dy`
      <mwc-button
        dense
        label="Mode Change"
        @click=${t=>this.changeTeachingMode()}
        modeSwitch
        ?switchOn=${this.teachingMode}
        ><span></span
      ></mwc-button>
      <mwc-button
        dense
        label="Reset"
        icon="published_with_changes"
        @click=${t=>async function(t){const e=await u.Lp.mutate({mutation:d.ZP`
      mutation($name: String!) {
        robotArmReset(name: $name)
      }
    `,variables:{name:t}});return e.data?.robotArmReset}(this.connection)}
      ></mwc-button>
      <mwc-button dense label="Home" @click=${t=>async function(t){const e=await u.Lp.mutate({mutation:d.ZP`
      mutation($name: String!) {
        robotArmGoHome(name: $name)
      }
    `,variables:{name:t}});return e.data?.robotArmGoHome}(this.connection)}></mwc-button>
      ${this.program?a.dy`<mwc-button
            dense
            label="Play"
            icon="play_circle_outline"
            @click=${t=>this.playProgram()}
          ></mwc-button>`:a.dy``}
    `}async firstUpdated(){if(this.connection){const t=await async function(t){const e=await u.Lp.query({query:d.ZP`
      query($name: String!) {
        robotArmGetStatus(name: $name) {
          running
          ready
          busy
          home
          zero
          teachingMode
          error
          collided
          emergency
        }
      }
    `,variables:{name:t}});return w.log("detected status",e.data?.robotArmGetStatus),e.data?.robotArmGetStatus}(this.connection);this.teachingMode=t?.teachingMode}}async playProgram(){for(let t of this.program||[])await k(this.connection,t)}async changeTeachingMode(){const t=this.connection||"",e=this.teachingMode?await async function(t){const e=await u.Lp.mutate({mutation:d.ZP`
      mutation($name: String!) {
        robotArmFinishTeachingMode(name: $name)
      }
    `,variables:{name:t}});return e.data?.robotArmFinishTeachingMode}(t):await async function(t){const e=await u.Lp.mutate({mutation:d.ZP`
      mutation($name: String!) {
        robotArmStartTeachingMode(name: $name)
      }
    `,variables:{name:t}});return e.data?.robotArmStartTeachingMode}(t);e&&(this.teachingMode=!this.teachingMode)}}customElements.define("robot-arm-controller",S);class z extends l.O{static get styles(){return[...l.O.styles]}static get properties(){return{value:Object,host:Object}}editorTemplate(t){if("connection"in this.host)var e=this.host.connection;else e=this.host.name;return a.dy`
      <div fullwidth>
        <robot-arm-pose-input .connection=${e} .value=${this.value}></robot-arm-pose-input>
        <robot-arm-controller .connection=${e}></robot-arm-controller>
      </div>
    `}}customElements.define("pose-editor",z);class O extends l.O{static get styles(){return[...l.O.styles]}static get properties(){return{value:Object,host:Object}}editorTemplate(t){if("connection"in this.host)var e=this.host.connection;else e=this.host.name;return a.dy`
      <div fullwidth>
        <robot-arm-pose-input .connection=${e} .value=${this.value}></robot-arm-pose-input>
        <robot-arm-controller .connection=${e}></robot-arm-controller>
      </div>
    `}}customElements.define("offset-pose-editor",O);const A=["j1","j2","j3","j4","j5","j6"];class R extends a.oi{static get properties(){return{value:Object,connection:String}}static get styles(){return a.iv`
      :host {
        display: flex;
        flex-direction: row;
      }

      [inputs] {
        flex: 1;

        display: flex;
        flex-direction: column;
      }

      [pose-values] {
        flex: 1;

        display: grid;
        grid-template-columns: repeat(3, 20px 1fr);
        grid-gap: 4px 4px;
        padding: 4px 0;
      }

      [pose-values] input {
        min-width: 50px;
      }
    `}render(){const t=this.value||{};return a.dy`
      <div inputs>
        <div @change=${t=>this.onChangePose(t)} pose-values>
          ${A.map((e=>a.dy`
              <label for=${e}>${e.toUpperCase()}</label>
              <input id=${e} type="number" .value=${t&&t[e]||0} placeholder=${e} />
            `))}
        </div>
      </div>

      <mwc-button dense @click=${t=>this.onClickSet(t)} icon="edit_location"></mwc-button>
      <mwc-button dense @click=${t=>this.onClickMove(t)} icon="my_location"></mwc-button>
      <mwc-button dense @click=${t=>this.onClickSetHome(t)} icon="home"></mwc-button>
    `}async setByCurrentPose(){return this.value=await async function(t){const e=await u.Lp.query({query:d.ZP`
      query($name: String!) {
        robotArmGetJoints(name: $name) {
          j1
          j2
          j3
          j4
          j5
          j6
        }
      }
    `,variables:{name:t}});return w.log("detected joints",e.data?.robotArmGetJoints),e.data?.robotArmGetJoints}(this.connection),(0,y.TL)(this,this.value),this.value}setByInputs(){var t=this.renderRoot.querySelectorAll("[pose-values] input"),e=Array.from(t).map((t=>t.value));return this.value=A.reduce(((t,o,a)=>(t[o]=e[a],t)),{}),(0,y.TL)(this,this.value),this.value}onChangePose(t){t.stopPropagation(),this.setByInputs()}async onClickSet(t){await this.setByCurrentPose()}async onClickMove(t){const{connection:e,value:o}=this;return e&&o&&await async function(t,e){const o=await u.Lp.mutate({mutation:d.ZP`
      mutation($name: String!, $joints: JointsInput!) {
        robotArmJointMoveTo(name: $name, joints: $joints) {
          j1
          j2
          j3
          j4
          j5
          j6
        }
      }
    `,variables:{name:t,joints:e}});return o.data?.robotArmJointMoveTo}(e,o||{})}async onClickSetHome(t){const{connection:e,value:o}=this;return e&&o&&await async function(t,e){const o=await u.Lp.mutate({mutation:d.ZP`
      mutation($name: String!, $joints: JointsInput!) {
        robotArmSetHome(name: $name, joints: $joints) {
          j1
          j2
          j3
          j4
          j5
          j6
        }
      }
    `,variables:{name:t,joints:e}});return o.data?.robotArmSetHome}(e,o||{})}}customElements.define("robot-arm-joints-input",R);class P extends l.O{static get styles(){return[...l.O.styles]}static get properties(){return{value:Object,host:Object}}editorTemplate(t){if("connection"in this.host)var e=this.host.connection;else e=this.host.name;return a.dy`
      <div fullwidth>
        <robot-arm-joints-input .connection=${e} .value=${this.value}></robot-arm-joints-input>
        <robot-arm-controller .connection=${e}></robot-arm-controller>
      </div>
    `}}customElements.define("offset-joints-editor",P);const E=["x","y","z","u","v","w"];class M extends a.oi{static get properties(){return{value:Object,connection:String}}static get styles(){return a.iv`
      :host {
        display: flex;
        flex-direction: row;
      }

      [inputs] {
        flex: 1;

        display: flex;
        flex-direction: column;
      }

      [pose-values] {
        flex: 1;

        display: grid;
        grid-template-columns: repeat(3, 20px 1fr);
        grid-gap: 4px 4px;
        padding: 4px 0;
      }

      [pose-values] input {
        min-width: 50px;
      }
    `}render(){const t=this.value||{};return a.dy`
      <div inputs>
        <div @change=${t=>this.onChangePose(t)} pose-values>
          ${E.map((e=>a.dy`
              <label for=${e}>${e.toUpperCase()}</label>
              <input id=${e} type="number" .value=${t&&t[e]||0} placeholder=${e} />
            `))}
        </div>
      </div>
    `}setByInputs(){var t=this.renderRoot.querySelectorAll("[pose-values] input"),e=Array.from(t).map((t=>t.value));return this.value=E.reduce(((t,o,a)=>(t[o]=e[a],t)),{}),(0,y.TL)(this,this.value),this.value}onChangePose(t){t.stopPropagation(),this.setByInputs()}}customElements.define("robot-arm-pose-simple-input",M);class T extends l.O{static get styles(){return[...l.O.styles]}static get properties(){return{value:Object,host:Object}}editorTemplate(t){if("connection"in this.host)var e=this.host.connection;else e=this.host.name;return a.dy`
      <div>
        <robot-arm-pose-simple-input .connection=${e} .value=${this.value}></robot-arm-pose-simple-input>
      </div>
    `}}customElements.define("offset-pose-simple-editor",T);const L=new Array(16).fill(0);class q extends a.oi{static get styles(){return[n.Ix,a.iv`
        :host {
          display: flex;
          flex-direction: column;

          align-items: stretch;
          background-color: #fff;

          width: var(--overlay-center-normal-width, 50%);
          height: var(--overlay-center-normal-height, 50%);
        }

        content {
          flex: 1;

          display: flex;
          flex-direction: row;

          overflow: auto;
          padding: 20px 20px 20px 0;
        }

        [calibration] {
          flex: 2;

          overflow-y: auto;
          overflow-x: none;
        }
        fieldset {
          border-width: 0 0 1px 0;
          border-bottom: 1px solid rgba(0, 0, 0, 0.1);
          padding: 10px 20px;
        }
        fieldset:first-child {
          padding-top: 0px;
        }

        legend {
          float: left;
          padding: 0;
          margin-top: -5px;
          margin-bottom: 5px;
          text-transform: capitalize;
          font-weight: bold;
          color: var(--secondary-text-color);
        }

        [stream] {
          flex: 2;
          position: relative;
        }

        [matrix] {
          clear: both;
          display: grid;
          grid-template-columns: repeat(4, 1fr);
          gap: 10px 5px;
        }

        [matrix] * {
          min-width: 100px;
        }

        .button-container {
          display: flex;
          margin-left: auto;
        }
        [msg] {
          background-color: #303030;
          width: 100%;
          min-height: 180px;
          padding-top: 120px;
          text-align: center;
          font-size: 0.8em;
          color: rgba(255, 255, 255, 0.5);
          text-transform: capitalize;
        }
        [msg] mwc-icon {
          display: block;
          font-size: 36px;
        }
        canvas {
          display: block;
          min-height: 300px;
          position: absolute;
          top: 0px;
          left: 0px;
          width: 100%;
        }
        [button-group] {
          padding: 10px 20px 0 15px;
          text-align: right;
        }
        [button-group] mwc-button {
          --mdc-theme-primary: #fff;
          background-color: var(--secondary-color);
          border-radius: var(--border-radius);
          margin: 0 0 5px 5px;
          padding-bottom: 2px;
        }
        [button-group] .alignL {
          float: left;
          background-color: #747474;
        }
      `]}static get properties(){return{value:Object,host:Object}}async disconnectedCallback(){var t=this.host?.name;if(!(await u.Lp.mutate({mutation:d.ZP`
        mutation ($name: String!) {
          finishHandeyeCalibrate(name: $name)
        }
      `,variables:{name:t}})).data.finishHandeyeCalibrate)throw new Error("finishHandeyeCalibrate error");await this.stopSubscribe()}async firstUpdated(){var t=this.host?.name;this.name="handeyecalib:"+t,await this.startSubscribe(this.name)}render(){var{rows:t=4,columns:e=4,data:o=[...L]}=this.value||{},n=[...o||[],...L].slice(0,16);return a.dy`
      <content>
        <div calibration>
          <fieldset>
            <legend>handeye matrix</legend>
            <div matrix @change=${t=>this.onchange(t)}>
              ${n.map((t=>a.dy` <input type="number" .value=${t} /> `))}
            </div>
          </fieldset>

          <div button-group>
            <mwc-button
              dense
              label="Start Teaching"
              icon="play_circle_outline"
              @click=${this.startTeachingMode.bind(this)}
            ></mwc-button>
            <mwc-button
              dense
              label="Finish Teaching"
              icon="pause_circle_outline"
              @click=${this.finishTeachingMode.bind(this)}
            ></mwc-button>
            <mwc-button
              dense
              label="Start Calibration"
              @click=${this.startHandeye.bind(this)}
              icon="wallpaper"
            ></mwc-button>
            <mwc-button dense label="Get Result" @click=${this.getResult.bind(this)} icon="wallpaper"></mwc-button>
            <mwc-button
              dense
              label="Calibrate"
              icon="exposure"
              @click=${this.calibrateHandeyeMatrix.bind(this)}
            ></mwc-button>
          </div>
        </div>

        <div stream>
          <div msg><mwc-icon>camera</mwc-icon>turn on the camera.</div>
          <canvas></canvas>
        </div>
      </content>

      <div class="button-container">
        <mwc-button @click=${this.oncancel.bind(this)}>${i.z.t("button.cancel")}</mwc-button>
        <mwc-button @click=${this.onconfirm.bind(this)}>${i.z.t("button.confirm")}</mwc-button>
      </div>
    `}async calibrateHandeyeMatrix(){var t=this.host?.name;var e=(await u.Lp.mutate({mutation:d.ZP`
        mutation ($name: String!) {
          calibrateHandeyeMatrix(name: $name) {
            rows
            columns
            data
          }
        }
      `,variables:{name:t}})).data.calibrateHandeyeMatrix;this.value=e}async startHandeye(){var t=this.host?.name;if(!(await u.Lp.mutate({mutation:d.ZP`
        mutation ($name: String!) {
          startHandeyeCalibrate(name: $name)
        }
      `,variables:{name:t}})).data.startHandeyeCalibrate)throw new Error("starHandeyeCalibrate error")}async getResult(){var t=this.host?.name;if(!(await u.Lp.mutate({mutation:d.ZP`
        mutation ($name: String!) {
          getHandeyeResult(name: $name)
        }
      `,variables:{name:t}})).data.getHandeyeResult)throw new Error("getHandeyeResult error")}async startTeachingMode(){var{params:t}=this.host,{baseRobotArm:e}=JSON.parse(t);await u.Lp.mutate({mutation:d.ZP`
        mutation ($name: String!) {
          robotArmStartTeachingMode(name: $name)
        }
      `,variables:{name:e}})}async finishTeachingMode(){var{params:t}=this.host,{baseRobotArm:e}=JSON.parse(t);await u.Lp.mutate({mutation:d.ZP`
        mutation ($name: String!) {
          robotArmFinishTeachingMode(name: $name)
        }
      `,variables:{name:e}})}onchange(t){t.stopPropagation();var e=this.renderRoot.querySelectorAll("input");this.value={rows:4,columns:4,data:Array.from(e).map((t=>t.value))}}oncancel(t){history.back()}onconfirm(t){this.confirmCallback&&this.confirmCallback(this.value),history.back()}async startSubscribe(t){if(this.subscription)return;const e=t;var o=this.renderRoot.querySelector("canvas"),a=o.getContext("2d");o.width=640,o.height=480,this.subscription=await(0,u.Ld)({query:d.ZP`
        subscription {
          data(tag: "${e}") {
            tag
            data
          }
        }`},{next:({data:t})=>{if(t){var e=t.data.data;if("video"===e?.type){var o=new Image;o.src=e?.frame,o.onload=()=>{a.drawImage(o,0,0),URL.revokeObjectURL(t)}}else if("object"===e.type){var i=e?.objectData;this.value=JSON.parse(i?.toString())}else"error"===e?.type&&document.dispatchEvent(new CustomEvent("notify",{detail:{level:"error",message:e?.message}}))}}})}async stopSubscribe(){await(this.subscription?.unsubscribe()),delete this.subscription}}customElements.define("handeye-calibration-popup",q);const V=new Array(16).fill(0);class I extends l.O{static get styles(){return[...l.O.styles,a.iv`
        :host {
          margin-top: 20px;
        }

        [matrix] {
          display: grid;
          grid-template-columns: repeat(4, 1fr);
          column-gap: 4px;
          row-gap: 4px;
        }

        [matrix] input {
          min-width: 100px;
        }

        [autohandeye] input {
          min-width: 100px;
        }

        mwc-button {
          display: block;
          text-align: center;
        }
      `]}static get properties(){return{value:Object}}editorTemplate(t){var{rows:e=4,columns:o=4,data:n=[...V]}=this.value||{},r=[...n||[],...V].slice(0,16);return a.dy`
      <div>
        <div matrix @change=${t=>this.onchange(t)}>
          ${r.map((t=>a.dy` <input type="number" value=${t} /> `))}
        </div>
        <mwc-button @click=${t=>this.openHandEyeCalibration()}>${i.z.t("text.handeye calibration")}</mwc-button>
      </div>
    `}onchange(t){var e=this.renderRoot.querySelector("div[matrix]").querySelectorAll("input");this.value={rows:4,columns:4,data:Array.from(e).map((t=>t.value))},t.stopPropagation(),this.dispatchEvent(new CustomEvent("change",{bubbles:!0,detail:this.value}))}async openHandEyeCalibration(){this.popup&&delete this.popup;var t=a.dy`
      <handeye-calibration-popup .value=${this.value} .host=${this.host} .confirmCallback=${t=>{this.value=t,this.dispatchEvent(new CustomEvent("change",{bubbles:!0,composed:!0,detail:this.value}))}}>
      </handeye-calibration-popup>
    `;this.popup=(0,c.Mw)(t,{backdrop:!0,size:"large",title:i.z.t("text.handeye calibration")})}}customElements.define("handeye-calibration-editor",I);const Z=[{option:"exposure",value:8500,range:{minValue:1,maxValue:165e3,step:1,defaultValue:8500}},{option:"gain",value:16,range:{minValue:16,maxValue:248,step:1,defaultValue:16}},{option:"enable-auto-exposure",value:1},{option:"visual-preset",value:0,range:{minValue:0,maxValue:6,step:1,defaultValue:0}},{option:"laser-power",value:150,range:{minValue:0,maxValue:360,step:30,defaultValue:150}},{option:"emitter-enabled",value:1,values:[0,1,2]},{option:"frames-queue-size",value:16,range:{minValue:0,maxValue:32,step:1,defaultValue:16}},{option:"error-polling-enabled",value:1},{option:"output-trigger-enabled",value:0},{option:"depth-units",value:.0010000000474974513,range:{minValue:9.999999974752427e-7,maxValue:.009999999776482582,step:9.999999974752427e-7,defaultValue:.0010000000474974513}},{option:"stereo-baseline",value:50.123226165771484,range:{minValue:50.123226165771484,maxValue:50.123226165771484,step:0,defaultValue:50.123226165771484}},{option:"inter-cam-sync-mode",value:0,values:[0,1,2]},{option:"emitter-on-off",value:0},{option:"global-time-enabled",value:1}];class B extends a.oi{static get styles(){return[n.Ix,a.iv`
        :host {
          display: flex;
          flex-direction: column;

          align-items: stretch;
          background-color: #fff;

          width: var(--overlay-center-normal-width, 50%);
          height: var(--overlay-center-normal-height, 50%);
        }

        content {
          flex: 1;

          display: flex;
          flex-direction: row;

          overflow: auto;
        }

        [settings] {
          flex: 2;

          padding: 20px;

          overflow-y: auto;
          overflow-x: none;
        }

        label {
          display: block;
        }

        mwc-slider {
          display: block;
        }

        [stream] {
          flex: 3;

          margin: auto;
        }

        .button-container {
          display: flex;
          margin-left: auto;
        }

        canvas {
          display: block;
          width: 90%;

          margin: auto;
          border: 3px solid #73ad21;
          padding: 10px;
        }
      `]}static get properties(){return{value:Object,device:Number,sensor:Number,stream:String}}disconnectedCallback(){this.rs2client?.disconnect()}firstUpdated(){}render(){var t=this.sensor||"0",e=Z;return a.dy`
      <content>
        <div settings>
          <label>sensor</label>
          <select name="sensor">
            <option value="0">RGB Camera</option>
            <option value="1">Stereo Camera</option>
          </select>

          ${"0"==t?a.dy`
                <label>stream</label>
                <select name="stream">
                  <option value="" selected></option>
                  <option>color</option>
                </select>

                <label>resolution</label>
                <select>
                  <option>1920x1080</option>
                  <option>1280x720</option>
                  <option>960x540</option>
                  <option>848x480</option>
                  <option>640x480</option>
                  <option>640x360</option>
                  <option>424x240</option>
                  <option>320x240</option>
                  <option>320x180</option>
                </select>

                <label>format</label>
                <select>
                  <option>rgb8</option>
                  <option>raw16</option>
                  <option>y16</option>
                  <option>bgra8</option>
                  <option>rgba8</option>
                  <option>bgr8</option>
                  <option>yuyv</option>
                  <option>rgb8</option>
                </select>

                <label>FPS</label>
                <select>
                  <option>60</option>
                  <option>30</option>
                  <option>15</option>
                  <option>6</option>
                </select>
              `:a.dy`
                <label>stream</label>
                <select name="stream">
                  <option value="" selected></option>
                  <option>depth</option>
                  <option>infrared-1</option>
                  <option>infrared-2</option>
                </select>

                <label>resolution</label>
                <select>
                  <option>1280x800</option>
                  <option>1280x720</option>
                  <option>848x480</option>
                  <option>848x100</option>
                  <option>640x480</option>
                  <option>640x400</option>
                  <option>640x360</option>
                  <option>480x270</option>
                  <option>424x240</option>
                  <option>256x144</option>
                </select>

                <label>format</label>
                <select>
                  <option>z16</option>
                  <option>y8</option>
                  <option>y16</option>
                </select>

                <label>FPS</label>
                <select>
                  <option>100</option>
                  <option>90</option>
                  <option>60</option>
                  <option>30</option>
                  <option>25</option>
                  <option>15</option>
                </select>
              `}
          <div
            @change=${t=>{var e=t.target.getAttribute("name"),o=t.target.getAttribute("checkbox")?t.target.selected?1:0:t.target.value;this.rs2client.sendRequest({tag:"set-setting",setting:{[e]:o}})}}
            options
          >
            ${e.map((t=>a.dy`
                <label>${t.option}</label>
                ${t.range?a.dy`
                      <mwc-slider
                        name=${t.option}
                        pin
                        markers
                        max=${t.range.maxValue}
                        min=${t.range.minValue}
                        value=${t.value}
                        step=${t.range.step}
                      ></mwc-slider>
                    `:t.values?t.values.map((e=>a.dy`
                          <mwc-radio name=${t.option} .checked=${e==t.value} value=${e}
                            >${e}</mwc-radio
                          >
                        `)):a.dy` <mwc-checkbox name=${t.option} .checked=${1==t.value} checkbox></mwc-checkbox> `}
              `))}
          </div>
        </div>

        <div stream>
          <canvas></canvas>
        </div>
      </content>

      <div class="button-container">
        <mwc-button @click=${this.oncancel.bind(this)}>${i.z.t("button.cancel")}</mwc-button>
        <mwc-button @click=${this.onconfirm.bind(this)}>${i.z.t("button.confirm")}</mwc-button>
      </div>
    `}onchange(t){t.stopPropagation(),this.value||(this.value={});for(let t in this.value)delete this.value[t];Object.assign(this.value,t.detail)}onStreamChange(t){var e=this.device||0,o=this.sensor=this.renderRoot.querySelector("[name=sensor]").value,a=this.stream=this.renderRoot.querySelector("[name=stream]").value,i=this.renderRoot.querySelector("canvas"),n=i.cloneNode(!1);if(i.parentNode.replaceChild(n,i),this.rs2client&&this.rs2client.disconnect(),o&&a){var r={};switch(a){case"color":this.stream=new RealsenseColorStream(n),r={stream:"color",index:0};break;case"depth":this.stream=new RealsenseDepthStream(n),r={stream:"depth",index:0};break;case"infrared-1":this.stream=new RealsenseInfraredStream(n),r={stream:"infrared",index:1};break;case"infrared-2":this.stream=new RealsenseInfraredStream(n),r={stream:"infrared",index:2};break;default:this.stream=null}this.stream&&(this.rs2client=new RealsenseClient(3001,e,r,(t=>{if("string"==typeof t){var e=JSON.parse(t);this.stream.configure(e)}else t instanceof Blob&&this.stream.stream(t)})),this.rs2client.connect())}}oncancel(t){history.back()}onconfirm(t){this.confirmCallback&&this.confirmCallback(this.value?JSON.stringify(this.value):""),history.back()}}customElements.define("realsense-camera-setting-popup",B);class _ extends l.O{static get styles(){return[...l.O.styles]}static get properties(){return{value:Object}}editorTemplate(t){return a.dy`<mwc-button @click=${t=>this.openSettingSetup()}>${i.z.t("text.camera setting")}</mwc-button>`}async openSettingSetup(){this.popup&&delete this.popup;var t=a.dy`
      <realsense-camera-setting-popup .value=${this.value} .confirmCallback=${t=>{this.dispatchEvent(new CustomEvent("change",{bubbles:!0,composed:!0,detail:this.value}))}}>
      </realsense-camera-setting-popup>
    `;this.popup=(0,c.Mw)(t,{backdrop:!0,size:"large",title:i.z.t("text.camera setting")})}}customElements.define("realsense-camera-setting-editor",_);const H=["x","y","z","u","v","w"];class U extends a.oi{static get properties(){return{value:Object,connection:String,showInputs:Boolean}}static get styles(){return a.iv`
      :host {
        display: flex;
        flex-direction: row;
      }

      [inputs] {
        flex: 1;

        display: flex;
        flex-direction: column;
        margin-bottom: 5px;
        position: relative;
        margin-right: -3px;
      }

      [pose-values] {
        flex: 1;

        display: grid;
        grid-template-columns: repeat(3, 25px 1fr);
        grid-gap: 4px 4px;
        margin-top: 5px;
        padding: 9px;
        background-color: #f6f6f6;
        border-radius: 4px;
      }
      input {
        padding: 4px 9px;
        border: 1px solid rgba(0, 0, 0, 0.15);
        border-radius: 4px;
        font: normal var(--fontsize-default) var(--theme-font);
      }
      [pose-values] label {
        font-size: 14px;
        line-height: 2.3;
        color: var(--secondary-text-color);
        font-weight: bold;
        text-align: right;
      }
      [pose-values] input {
        min-width: 50px;
      }
      mwc-icon-button {
        --mdc-icon-button-size: 32px;
        --mdc-icon-size: 18px;
        max-height: 32px;
        background-color: #f6f6f6;
        border: 1px solid rgba(0, 0, 0, 0.2);
        margin-right: -1px;
        color: #747474;
      }
      mwc-icon-button:last-child {
        border-top-right-radius: 4px;
        border-bottom-right-radius: 4px;
        position: relative;
        margin-right: -2px;
      }
    `}render(){var{name:t,pose:e}=this.value||{};return a.dy`
      <div inputs>
        <input
          id="name"
          type="text"
          .value=${t||""}
          placeholder=${"Key-in pose's name"}
          @change=${t=>this.onChangeName(t)}
        />
        ${this.showInputs?a.dy`
              <div @change=${t=>this.onChangePose(t)} pose-values>
                ${H.map((t=>a.dy`
                    <label for=${t}>${t.toUpperCase()}</label>
                    <input id=${t} type="number" .value=${e&&e[t]||0} placeholder=${t} />
                  `))}
              </div>
            `:a.dy``}
      </div>

      <mwc-icon-button dense @click=${t=>this.showInputs=!this.showInputs} icon="expand_more"></mwc-icon-button>
      <mwc-icon-button dense @click=${t=>this.onClickSet(t)} icon="edit"></mwc-icon-button>
      <mwc-icon-button dense @click=${t=>this.onClickMove(t)} icon="my_location"></mwc-icon-button>
    `}async setByCurrentPose(){return this.value={...this.value,pose:await $(this.connection)},(0,y.TL)(this,this.value),this.value}setByInputs(){var t=this.renderRoot.querySelectorAll("[pose-values] input"),e=Array.from(t).map((t=>t.value));return this.value={...this.value,pose:H.reduce(((t,o,a)=>(t[o]=e[a],t)),{})},(0,y.TL)(this,this.value),this.value}onChangeName(t){t.stopPropagation(),this.value={...this.value,name:t.target.value},(0,y.TL)(this,this.value)}onChangePose(t){t.stopPropagation(),this.setByInputs()}async onClickSet(t){await this.setByCurrentPose()}async onClickMove(t){const{pose:e}=this.value||{};return this.connection&&e&&await k(this.connection,e)}}customElements.define("robot-arm-pose-list-item",U);const D={x:0,y:0,z:0,u:0,v:0,w:0};class G extends a.oi{static get styles(){return a.iv`
      :host {
        flex: 1;

        display: block;
        overflow: auto;
      }

      [pose] {
        display: flex;
        flex-direction: row;
      }

      [pose] robot-arm-pose-list-item {
        flex: 1;
      }
      mwc-icon-button {
        width: 34px;
        --mdc-icon-button-size: 34px;
        max-height: 32px;
      }
      [moveBtn] {
        width: 18px;
        height: 18px;
        --mdc-icon-button-size: 18px;
        --mdc-icon-size: 14px;
        border: 1px solid rgba(0, 0, 0, 0.2);
        border-radius: 15px;
        margin: 5px 4px 0 0;
        background-color: var(--primary-color);
        color: #fff;
      }
      [listFunctionBtn] {
        width: 32px;
        --mdc-icon-button-size: 32px;
        --mdc-icon-size: 22px;
        max-height: 32px;
        background-color: #777;
        border: 1px solid rgba(0, 0, 0, 0.2);
        border-top-right-radius: 4px;
        border-bottom-right-radius: 4px;
        color: #fff;
      }
    `}static get properties(){return{value:Array,connection:String}}render(){const t=this.value||[],e=this.connection;return a.dy`
      ${t.map(((t,o)=>a.dy`
          <div pose added @change=${t=>this.onchange(t)}>
            <mwc-icon-button
              dense
              @click=${t=>this.onMoveDown(t,o)}
              icon="arrow_downward"
              moveBtn
            ></mwc-icon-button>
            <mwc-icon-button dense @click=${t=>this.onMoveUp(t,o)} icon="arrow_upward" moveBtn></mwc-icon-button>
            <robot-arm-pose-list-item .connection=${e} .value=${t}></robot-arm-pose-list-item>
            <mwc-icon-button
              dense
              @click=${t=>this.onClickDelete(t)}
              icon="delete_forever"
              listFunctionBtn
            ></mwc-icon-button>
          </div>
        `))}

      <div pose add>
        <mwc-icon-button dense></mwc-icon-button>
        <mwc-icon-button dense></mwc-icon-button>

        <robot-arm-pose-list-item
          id="add-pose-id"
          .connection=${e}
          .value=${{pose:{...D}}}
          @change=${t=>t.stopPropagation()}
        ></robot-arm-pose-list-item>

        <mwc-icon-button dense @click=${t=>this.onClickAdd()} icon="playlist_add" listFunctionBtn></mwc-icon-button>
      </div>
    `}extractPose(t){return t.querySelector("robot-arm-pose-list-item")?.value}async onClickAdd(t){const e=this.renderRoot.querySelector("#add-pose-id").value;this.value=[...this.value||[],e],(0,y.TL)(this,this.value)}onClickDelete(t){var e=t.target.parentElement,o=this.renderRoot.querySelectorAll("div[added]");this.value=Array.from(o).filter((t=>e!==t)).map((t=>this.extractPose(t))),(0,y.TL)(this,this.value)}onMoveUp(t,e){if(0==e)return;const o=this.value.splice(e-1,2);this.value.splice(e-1,0,o[1],o[0]),this.value=[...this.value],(0,y.TL)(this,this.value)}onMoveDown(t,e){if(e==this.value.length-1)return;const o=this.value.splice(e,2);this.value.splice(e,0,o[1],o[0]),this.value=[...this.value],(0,y.TL)(this,this.value)}onchange(t){t.stopPropagation();var e=this.renderRoot.querySelectorAll("div[added]");this.value=Array.from(e).map((t=>this.extractPose(t))),(0,y.TL)(this,this.value)}}customElements.define("robot-arm-pose-list-input",G);class N extends l.O{static get styles(){return[...l.O.styles]}static get properties(){return{value:Object,host:Object}}editorTemplate(t){var e=(this.value instanceof Array?this.value:[]).map((t=>t?.pose||{})),{connection:o}=this.host;return a.dy`
      <div fullwidth>
        <robot-arm-pose-list-input .value=${this.value} .connection=${o}></robot-arm-pose-list-input>
        <robot-arm-controller .connection=${o} .program=${e}></robot-arm-controller>
      </div>
    `}}customElements.define("pose-program-editor",N);new Array(9).fill(0);class J extends a.oi{static get styles(){return[n.Ix,a.iv`
        :host {
          display: flex;
          flex-direction: column;

          align-items: stretch;
          background-color: #fff;

          width: var(--overlay-center-normal-width, 50%);
          height: var(--overlay-center-normal-height, 50%);
        }

        content {
          flex: 1;

          display: flex;
          flex-direction: row;

          overflow: auto;
          padding: 20px 20px 20px 0;
        }

        label {
          display: block;
          text-align: right;
          text-transform: capitalize;
        }

        [stream] {
          flex: 2;
          position: relative;
        }

        .button-container {
          display: flex;
          margin-left: auto;
        }

        [msg] {
          background-color: #303030;
          width: 100%;
          min-height: 180px;
          padding-top: 120px;
          text-align: center;
          font-size: 0.8em;
          color: rgba(255, 255, 255, 0.5);
          text-transform: capitalize;
        }
        [msg] mwc-icon {
          display: block;
          font-size: 36px;
        }
        canvas {
          display: block;
          min-height: 300px;
          position: absolute;
          top: 0px;
          left: 0px;
          width: 100%;
        }
      `]}static get properties(){return{value:Object,host:Object}}async disconnectedCallback(){await this.stopSubscribe()}async firstUpdated(){this.name="objtracking",this.value="Ready",await this.startSubscribe(this.name)}render(){return a.dy`
      <div>
        <p>Status: ${this.value}</p>
      </div>
      <content>
        <div stream>
          <div msg><mwc-icon>camera</mwc-icon>turn on the camera.</div>
          <canvas></canvas>
        </div>
      </content>
      <div class="button-container">
        <mwc-button @click=${this.oncancel.bind(this)}>${i.z.t("button.cancel")}</mwc-button>
        <mwc-button @click=${this.onconfirm.bind(this)}>${i.z.t("button.confirm")}</mwc-button>
      </div>
    `}onchange(t){t.stopPropagation()}oncancel(t){history.back()}onconfirm(t){this.confirmCallback&&this.confirmCallback(),history.back()}async startSubscribe(t){this.subscription&&returncontent;const e=t;var o=this.renderRoot.querySelector("canvas"),a=o.getContext("2d");o.width=1280,o.height=720,this.subscription=await(0,u.Ld)({query:gql`
          subscription {
            data(tag: "${e}") {
              tag
              data
            }
          }`},{next:({data:t})=>{if(t){var e=t.data.data;if("video"===e?.type){var o=new Image;o.src=e?.frame,o.onload=()=>{a.drawImage(o,0,0),URL.revokeObjectURL(t)},this.value="Processing"}else if("object"===e?.type){var i=e?.objectData;this.value=i}else"error"===e?.type&&(alert(e?.message),this.value="Error: "+e?.message)}}})}async stopSubscribe(){await(this.subscription?.unsubscribe()),delete this.subscription}}customElements.define("workspace-status-popup",J);new Array(9).fill(0);class F extends l.O{static get styles(){return[...l.O.styles,a.iv`
        :host {
          margin-top: 20px;
        }
        fieldset {
          border-width: 0 0 1px 0;
          border-bottom: 1px solid rgba(0, 0, 0, 0.1);
          padding: 10px 20px;
        }
        fieldset:first-child {
          padding-top: 0px;
        }
        fieldset:nth-child(even) {
          background-color: var(--main-section-background-color);
        }
        legend {
          float: left;
          padding: 0;
          margin-top: -5px;
          margin-bottom: 5px;
          text-transform: capitalize;
          font-weight: bold;
          color: var(--secondary-text-color);
        }
        fieldset > div {
          clear: both;
        }
        label {
          display: block;
          text-align: right;
          text-transform: capitalize;
        }

        input {
          min-width: 100px;
        }
      `]}static get properties(){return{}}editorTemplate(t){return a.dy`
      <div>
        <mwc-button @click=${t=>this.openCameraView()}>${i.z.t("text.workspace video view")}</mwc-button>
      </div>
    `}onchange(t){t.stopPropagation(),this.dispatchEvent(new CustomEvent("change",{bubbles:!0,detail:this.value}))}async openCameraView(){this.popup&&delete this.popup;var t=a.dy` <workspace-status-popup .host=${this.host}> </workspace-status-popup> `;this.popup=(0,c.Mw)(t,{backdrop:!0,size:"large",title:i.z.t("text.workspace video view")})}}customElements.define("workspace-status-editor",F);var X=o(51266);class Y extends l.O{static get styles(){return[...l.O.styles,a.iv`
        :host {
          margin-top: 20px;
        }
        [matrix] {
          display: grid;
          grid-template-columns: repeat(4, 1fr);
          column-gap: 4px;
          row-gap: 4px;
        }
        [modeselect] {
          display: flex;
          flex-direction: column;
        }
        [autohandeye] {
          display: flex;
          flex-direction: column;
        }
      `]}static get properties(){return{value:Object}}editorTemplate(t){return a.dy`
      <div>
        <div modeselect @change=${t=>this.onchange(t)}>
          <label for="handeyeMode">${i.z.t("text.handeye mode")}</label>
          <select id="handeyeMode" .value=${this.value?.mode||"hand-to-eye"}>
            <option value="hand-to-eye" ?selected=${"hand-to-eye"===this.value?.mode}>
              ${i.z.t("text.hand to eye")}
            </option>
            <option value="hand-in-eye" ?selected=${"hand-in-eye"===this.value?.mode}>
              ${i.z.t("text.hand in eye")}
            </option>
          </select>
        </div>
        <div autohandeye @change=${t=>this.onchange(t)}>
          <label for="autoTotalIter">${i.z.t("text.auto-handeye total iterations")}</label>
          <input id="autoTotalIter" type="number" .value=${this.value?.autoTotalIter||30} />
          <label for="autoMoveXyz">${i.z.t("text.auto-handeye move xyz")}</label>
          <input id="autoMoveXyz" type="number" .value=${this.value?.autoMoveXyz||.05} />
          <label for="autoMoveUvw">${i.z.t("text.auto-handeye move uvw")}</label>
          <input id="autoMoveUvw" type="number" .value=${this.value?.autoMoveUvw||10} />
        </div>
      </div>
    `}onchange(t){var e=this.renderRoot.getElementById("handeyeMode").value,o=this.renderRoot.getElementById("autoTotalIter").value,a=this.renderRoot.getElementById("autoMoveXyz").value,i=this.renderRoot.getElementById("autoMoveUvw").value;X.log(this.value),this.value={mode:e,autoTotalIter:o,autoMoveXyz:a,autoMoveUvw:i},t.stopPropagation(),this.dispatchEvent(new CustomEvent("change",{bubbles:!0,detail:this.value}))}}customElements.define("handeye-config-editor",Y);const K={bootstrap:function(){l.O.register({pose:"pose-editor","offset-pose":"offset-pose-editor","offset-pose-simple":"offset-pose-simple-editor","pose-program":"pose-program-editor","camera-setting":"camera-setting-editor","camera-calibration":"camera-calibration-editor","camera-roi":"camera-roi-editor","handeye-config":"handeye-config-editor","handeye-calibration":"handeye-calibration-editor","realsense-camera-setting":"realsense-camera-setting-editor","workspace-status":"workspace-status-editor","offset-joints":"offset-joints-editor"})}}},96616:(t,e,o)=>{var a={"./af":4313,"./af.js":4313,"./ar":25353,"./ar-dz":26425,"./ar-dz.js":26425,"./ar-kw":45615,"./ar-kw.js":45615,"./ar-ly":15253,"./ar-ly.js":15253,"./ar-ma":86444,"./ar-ma.js":86444,"./ar-sa":4831,"./ar-sa.js":4831,"./ar-tn":24643,"./ar-tn.js":24643,"./ar.js":25353,"./az":7637,"./az.js":7637,"./be":5658,"./be.js":5658,"./bg":38041,"./bg.js":38041,"./bm":9466,"./bm.js":9466,"./bn":88522,"./bn-bd":61402,"./bn-bd.js":61402,"./bn.js":88522,"./bo":97429,"./bo.js":97429,"./br":90690,"./br.js":90690,"./bs":54480,"./bs.js":54480,"./ca":8721,"./ca.js":8721,"./cs":52501,"./cs.js":52501,"./cv":62737,"./cv.js":62737,"./cy":66638,"./cy.js":66638,"./da":35816,"./da.js":35816,"./de":775,"./de-at":17458,"./de-at.js":17458,"./de-ch":97405,"./de-ch.js":97405,"./de.js":775,"./dv":41131,"./dv.js":41131,"./el":64639,"./el.js":64639,"./en-au":58472,"./en-au.js":58472,"./en-ca":22167,"./en-ca.js":22167,"./en-gb":38133,"./en-gb.js":38133,"./en-ie":5573,"./en-ie.js":5573,"./en-il":13084,"./en-il.js":13084,"./en-in":58930,"./en-in.js":58930,"./en-nz":60899,"./en-nz.js":60899,"./en-sg":61978,"./en-sg.js":61978,"./eo":31635,"./eo.js":31635,"./es":22074,"./es-do":46740,"./es-do.js":46740,"./es-mx":36071,"./es-mx.js":36071,"./es-us":7383,"./es-us.js":7383,"./es.js":22074,"./et":87883,"./et.js":87883,"./eu":12743,"./eu.js":12743,"./fa":12977,"./fa.js":12977,"./fi":53049,"./fi.js":53049,"./fil":69987,"./fil.js":69987,"./fo":5550,"./fo.js":5550,"./fr":57126,"./fr-ca":49537,"./fr-ca.js":49537,"./fr-ch":63554,"./fr-ch.js":63554,"./fr.js":57126,"./fy":30956,"./fy.js":30956,"./ga":27677,"./ga.js":27677,"./gd":50291,"./gd.js":50291,"./gl":88807,"./gl.js":88807,"./gom-deva":1018,"./gom-deva.js":1018,"./gom-latn":99153,"./gom-latn.js":99153,"./gu":97721,"./gu.js":97721,"./he":71823,"./he.js":71823,"./hi":87650,"./hi.js":87650,"./hr":73865,"./hr.js":73865,"./hu":28800,"./hu.js":28800,"./hy-am":40342,"./hy-am.js":40342,"./id":32202,"./id.js":32202,"./is":58302,"./is.js":58302,"./it":94258,"./it-ch":30904,"./it-ch.js":30904,"./it.js":94258,"./ja":12995,"./ja.js":12995,"./jv":22009,"./jv.js":22009,"./ka":95643,"./ka.js":95643,"./kk":59377,"./kk.js":59377,"./km":80122,"./km.js":80122,"./kn":44108,"./kn.js":44108,"./ko":98893,"./ko.js":98893,"./ku":63321,"./ku.js":63321,"./ky":62214,"./ky.js":62214,"./lb":27572,"./lb.js":27572,"./lo":95653,"./lo.js":95653,"./lt":39458,"./lt.js":39458,"./lv":62241,"./lv.js":62241,"./me":86377,"./me.js":86377,"./mi":97529,"./mi.js":97529,"./mk":40403,"./mk.js":40403,"./ml":969,"./ml.js":969,"./mn":22529,"./mn.js":22529,"./mr":28209,"./mr.js":28209,"./ms":57692,"./ms-my":35448,"./ms-my.js":35448,"./ms.js":57692,"./mt":89365,"./mt.js":89365,"./my":95552,"./my.js":95552,"./nb":19954,"./nb.js":19954,"./ne":84957,"./ne.js":84957,"./nl":97099,"./nl-be":49156,"./nl-be.js":49156,"./nl.js":97099,"./nn":54960,"./nn.js":54960,"./oc-lnc":2333,"./oc-lnc.js":2333,"./pa-in":91344,"./pa-in.js":91344,"./pl":81886,"./pl.js":81886,"./pt":43926,"./pt-br":44884,"./pt-br.js":44884,"./pt.js":43926,"./ro":33464,"./ro.js":33464,"./ru":1529,"./ru.js":1529,"./sd":85918,"./sd.js":85918,"./se":843,"./se.js":843,"./si":92433,"./si.js":92433,"./sk":70,"./sk.js":70,"./sl":22094,"./sl.js":22094,"./sq":72307,"./sq.js":72307,"./sr":19449,"./sr-cyrl":22424,"./sr-cyrl.js":22424,"./sr.js":19449,"./ss":93586,"./ss.js":93586,"./sv":40902,"./sv.js":40902,"./sw":58466,"./sw.js":58466,"./ta":82953,"./ta.js":82953,"./te":22598,"./te.js":22598,"./tet":92586,"./tet.js":92586,"./tg":35115,"./tg.js":35115,"./th":6506,"./th.js":6506,"./tk":77084,"./tk.js":77084,"./tl-ph":61080,"./tl-ph.js":61080,"./tlh":54205,"./tlh.js":54205,"./tr":17825,"./tr.js":17825,"./tzl":99191,"./tzl.js":99191,"./tzm":94394,"./tzm-latn":22503,"./tzm-latn.js":22503,"./tzm.js":94394,"./ug-cn":95800,"./ug-cn.js":95800,"./uk":74409,"./uk.js":74409,"./ur":55096,"./ur.js":55096,"./uz":63133,"./uz-latn":64546,"./uz-latn.js":64546,"./uz.js":63133,"./vi":73985,"./vi.js":73985,"./x-pseudo":15170,"./x-pseudo.js":15170,"./yo":52876,"./yo.js":52876,"./zh-cn":23390,"./zh-cn.js":23390,"./zh-hk":2358,"./zh-hk.js":2358,"./zh-mo":67908,"./zh-mo.js":67908,"./zh-tw":44,"./zh-tw.js":44};function i(t){var e=n(t);return o(e)}function n(t){if(!o.o(a,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return a[t]}i.keys=function(){return Object.keys(a)},i.resolve=n,t.exports=i,i.id=96616},74854:()=>{},66602:()=>{}}]);