diff --git a/CHANGELOG.md b/CHANGELOG.md index cb10f18..e921e80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,23 +1,23 @@ -# +# @vladmandic/face-api - Version: **undefined** - Description: **undefined** + Version: **1.6.7** + Description: **FaceAPI: AI-powered Face Detection & Rotation Tracking, Face Description & Recognition, Age & Gender & Emotion Prediction for Browser and NodeJS using TensorFlow/JS** - Author: **undefined** - License: **undefined** + Author: **Vladimir Mandic ** + License: **MIT** Repository: **** ## Changelog -### **HEAD -> master** 2022/03/07 mandic00@live.com +### **1.6.7** 2022/04/01 mandic00@live.com + + +### **origin/master** 2022/03/10 45914394+abdemirza@users.noreply.github.com ### **1.6.6** 2022/03/04 mandic00@live.com -### **origin/master** 2022/02/07 mandic00@live.com - - ### **1.6.5** 2022/02/07 mandic00@live.com diff --git a/README.md b/README.md index d499dcd..33f3598 100644 --- a/README.md +++ b/README.md @@ -443,7 +443,7 @@ Build process uses `@vladmandic/build` module that creates optimized build for e This is updated **face-api.js** with latest available TensorFlow/JS as the original is not compatible with **tfjs 2.0+**. Forked from [face-api.js](https://github.com/justadudewhohacks/face-api.js) version **0.22.2** which was released on March 22nd, 2020 -Currently using **`TensorFlow/JS` 3.14.0** +Currently using **`TensorFlow/JS` 3.15.0** *Why?* I needed FaceAPI that does not cause version conflict with newer versions of TensorFlow And since original FaceAPI was open-source, I've released this version as well diff --git a/demo/index.js b/demo/index.js index c723b2b..63e69b1 100644 --- a/demo/index.js +++ b/demo/index.js @@ -108,7 +108,7 @@ async function main() { const params = new URLSearchParams(location.search); if (params.has('backend')) { const backend = params.get('backend'); - await faceapi.tf.setWasmPaths('https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.14.0/dist/'); + await faceapi.tf.setWasmPaths('https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.15.0/dist/'); log(`Chosen backend: ${backend}`); await faceapi.tf.setBackend(backend); } else { diff --git a/dist/face-api.esm-nobundle.js b/dist/face-api.esm-nobundle.js index 83cbdb9..4d30f2c 100644 --- a/dist/face-api.esm-nobundle.js +++ b/dist/face-api.esm-nobundle.js @@ -4,4 +4,4 @@ author: ' */ -var ur=Object.defineProperty;var co=Object.getOwnPropertyDescriptor;var mo=Object.getOwnPropertyNames;var po=Object.prototype.hasOwnProperty;var uo=(o=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(o,{get:(t,e)=>(typeof require!="undefined"?require:t)[e]}):o)(function(o){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+o+'" is not supported')});var Fe=(o,t)=>{for(var e in t)ur(o,e,{get:t[e],enumerable:!0})},y=(o,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of mo(t))!po.call(o,a)&&(e||a!=="default")&&ur(o,a,{get:()=>t[a],enumerable:!(r=co(t,a))||r.enumerable});return o};var n={};Fe(n,{version:()=>To});y(n,un);y(n,fn);y(n,ln);import*as un from"@tensorflow/tfjs/dist/index.js";import*as fn from"@tensorflow/tfjs-backend-webgl/dist/index.js";import*as ln from"@tensorflow/tfjs-backend-wasm/dist/index.js";var fo="3.14.0",lo="3.14.0",ho="3.14.0",bo="3.14.0",go="3.14.0",xo="3.14.0",vo="3.14.0",yo="3.14.0",To={tfjs:fo,"tfjs-core":lo,"tfjs-data":ho,"tfjs-layers":bo,"tfjs-converter":go,"tfjs-backend-cpu":xo,"tfjs-backend-webgl":vo,"tfjs-backend-wasm":yo};var Ir={};Fe(Ir,{AnchorPosition:()=>Ae,DrawBox:()=>ue,DrawBoxOptions:()=>ke,DrawFaceLandmarks:()=>Oe,DrawFaceLandmarksOptions:()=>$e,DrawTextField:()=>st,DrawTextFieldOptions:()=>Vt,drawContour:()=>q,drawDetections:()=>Io,drawFaceExpressions:()=>No,drawFaceLandmarks:()=>So});function q(o,t,e=!1){if(o.beginPath(),t.slice(1).forEach(({x:r,y:a},s)=>{let i=t[s];o.moveTo(i.x,i.y),o.lineTo(r,a)}),e){let r=t[t.length-1],a=t[0];if(!r||!a)return;o.moveTo(r.x,r.y),o.lineTo(a.x,a.y)}o.stroke()}var fr={};Fe(fr,{computeReshapedDimensions:()=>Me,getCenterPoint:()=>ut,isDimensions:()=>se,isEven:()=>ae,isFloat:()=>Ee,isTensor:()=>mt,isTensor1D:()=>_o,isTensor2D:()=>De,isTensor3D:()=>Z,isTensor4D:()=>R,isValidNumber:()=>Y,isValidProbablitiy:()=>wt,range:()=>X,round:()=>pt});var S=class{constructor(t,e){if(!Y(t)||!Y(e))throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({width:t,height:e})}`);this._width=t,this._height=e}get width(){return this._width}get height(){return this._height}reverse(){return new S(1/this.width,1/this.height)}};function mt(o,t){return o instanceof n.Tensor&&o.shape.length===t}function _o(o){return mt(o,1)}function De(o){return mt(o,2)}function Z(o){return mt(o,3)}function R(o){return mt(o,4)}function Ee(o){return o%1!==0}function ae(o){return o%2===0}function pt(o,t=2){let e=10**t;return Math.floor(o*e)/e}function se(o){return o&&o.width&&o.height}function Me({width:o,height:t},e){let r=e/Math.max(t,o);return new S(Math.round(o*r),Math.round(t*r))}function ut(o){return o.reduce((t,e)=>t.add(e),new b(0,0)).div(new b(o.length,o.length))}function X(o,t,e){return Array(o).fill(0).map((r,a)=>t+a*e)}function Y(o){return!!o&&o!==1/0&&o!==-1/0&&!Number.isNaN(o)||o===0}function wt(o){return Y(o)&&o>=0&&o<=1}var b=class{constructor(t,e){this._x=t,this._y=e}get x(){return this._x}get y(){return this._y}add(t){return new b(this.x+t.x,this.y+t.y)}sub(t){return new b(this.x-t.x,this.y-t.y)}mul(t){return new b(this.x*t.x,this.y*t.y)}div(t){return new b(this.x/t.x,this.y/t.y)}abs(){return new b(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new b(Math.floor(this.x),Math.floor(this.y))}};var F=class{static isRect(t){return!!t&&[t.x,t.y,t.width,t.height].every(Y)}static assertIsValidBox(t,e,r=!1){if(!F.isRect(t))throw new Error(`${e} - invalid box: ${JSON.stringify(t)}, expected object with properties x, y, width, height`);if(!r&&(t.width<0||t.height<0))throw new Error(`${e} - width (${t.width}) and height (${t.height}) must be positive numbers`)}constructor(t,e=!0){let r=t||{},a=[r.left,r.top,r.right,r.bottom].every(Y),s=[r.x,r.y,r.width,r.height].every(Y);if(!s&&!a)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(r)}`);let[i,c,m,p]=s?[r.x,r.y,r.width,r.height]:[r.left,r.top,r.right-r.left,r.bottom-r.top];F.assertIsValidBox({x:i,y:c,width:m,height:p},"Box.constructor",e),this._x=i,this._y=c,this._width=m,this._height=p}get x(){return this._x}get y(){return this._y}get width(){return this._width}get height(){return this._height}get left(){return this.x}get top(){return this.y}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new b(this.left,this.top)}get topRight(){return new b(this.right,this.top)}get bottomLeft(){return new b(this.left,this.bottom)}get bottomRight(){return new b(this.right,this.bottom)}round(){let[t,e,r,a]=[this.x,this.y,this.width,this.height].map(s=>Math.round(s));return new F({x:t,y:e,width:r,height:a})}floor(){let[t,e,r,a]=[this.x,this.y,this.width,this.height].map(s=>Math.floor(s));return new F({x:t,y:e,width:r,height:a})}toSquare(){let{x:t,y:e,width:r,height:a}=this,s=Math.abs(r-a);return re&&(c=-f+e+r,f=e),l>t&&(m=-l+t+a,l=t),p<1&&(m=2-p,p=1),u<1&&(m=2-u,u=1),{dy:i,edy:m,dx:s,edx:c,y:u,ey:l,x:p,ex:f,w:r,h:a}}calibrate(t){return new F({left:this.left+t.left*this.width,top:this.top+t.top*this.height,right:this.right+t.right*this.width,bottom:this.bottom+t.bottom*this.height}).toSquare().round()}};var Ht=class extends F{constructor(t,e,r,a,s=!1){super({left:t,top:e,right:r,bottom:a},s)}};var ft=class{constructor(t,e,r,a,s){this._imageDims=new S(s.width,s.height),this._score=t,this._classScore=e,this._className=r,this._box=new F(a).rescale(this._imageDims)}get score(){return this._score}get classScore(){return this._classScore}get className(){return this._className}get box(){return this._box}get imageDims(){return this._imageDims}get imageWidth(){return this.imageDims.width}get imageHeight(){return this.imageDims.height}get relativeBox(){return new F(this._box).rescale(this.imageDims.reverse())}forSize(t,e){return new ft(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:e})}};var E=class extends ft{constructor(t,e,r){super(t,t,"",e,r)}forSize(t,e){let{score:r,relativeBox:a,imageDims:s}=super.forSize(t,e);return new E(r,a,s)}};function lr(o,t,e=!0){let r=Math.max(0,Math.min(o.right,t.right)-Math.max(o.left,t.left)),a=Math.max(0,Math.min(o.bottom,t.bottom)-Math.max(o.top,t.top)),s=r*a;return e?s/(o.area+t.area-s):s/Math.min(o.area,t.area)}function dr(o){let t=o.map(c=>c.x),e=o.map(c=>c.y),r=t.reduce((c,m)=>mmcc({score:i,boxIndex:c})).sort((i,c)=>i.score-c.score).map(i=>i.boxIndex),s=[];for(;a.length>0;){let i=a.pop();s.push(i);let c=a,m=[];for(let p=0;pm[u]<=e)}return s}function J(o,t){return n.tidy(()=>{let[e,r,a]=t,s=n.fill([...o.shape.slice(0,3),1],e,"float32"),i=n.fill([...o.shape.slice(0,3),1],r,"float32"),c=n.fill([...o.shape.slice(0,3),1],a,"float32"),m=n.concat([s,i,c],3);return n.sub(o,m)})}function br(o,t=!1){return n.tidy(()=>{let[e,r]=o.shape.slice(1);if(e===r)return o;let a=Math.abs(e-r),s=Math.round(a*(t?.5:1)),i=e>r?2:1,c=l=>{let d=o.shape.slice();return d[i]=l,n.fill(d,0,"float32")},m=c(s),p=a-m.shape[i],f=[t&&p?c(p):null,o,m].filter(l=>!!l).map(l=>n.cast(l,"float32"));return n.concat(f,i)})}function On(o){let t=o.slice();for(let e=t.length-1;e>0;e--){let r=Math.floor(Math.random()*(e+1)),a=t[e];t[e]=t[r],t[r]=a}return t}function ie(o){return 1/(1+Math.exp(-o))}function zn(o){return Math.log(o/(1-o))}var zt=class extends F{constructor(t,e,r,a,s=!1){super({x:t,y:e,width:r,height:a},s)}};var Po=.5,wo=.43,Fo=.45,O=class{constructor(t,e,r=new b(0,0)){let{width:a,height:s}=e;this._imgDims=new S(a,s),this._shift=r,this._positions=t.map(i=>i.mul(new b(a,s)).add(r))}get shift(){return new b(this._shift.x,this._shift.y)}get imageWidth(){return this._imgDims.width}get imageHeight(){return this._imgDims.height}get positions(){return this._positions}get relativePositions(){return this._positions.map(t=>t.sub(this._shift).div(new b(this.imageWidth,this.imageHeight)))}forSize(t,e){return new this.constructor(this.relativePositions,{width:t,height:e})}shiftBy(t,e){return new this.constructor(this.relativePositions,this._imgDims,new b(t,e))}shiftByPoint(t){return this.shiftBy(t.x,t.y)}align(t,e={}){if(t){let s=t instanceof E?t.box.floor():new F(t);return this.shiftBy(s.x,s.y).align(null,e)}let{useDlibAlignment:r,minBoxPadding:a}={useDlibAlignment:!1,minBoxPadding:.2,...e};return r?this.alignDlib():this.alignMinBbox(a)}alignDlib(){let t=this.getRefPointsForAlignment(),[e,r,a]=t,s=f=>a.sub(f).magnitude(),i=(s(e)+s(r))/2,c=Math.floor(i/Fo),m=ut(t),p=Math.floor(Math.max(0,m.x-Po*c)),u=Math.floor(Math.max(0,m.y-wo*c));return new zt(p,u,Math.min(c,this.imageWidth+p),Math.min(c,this.imageHeight+u))}alignMinBbox(t){let e=dr(this.positions);return e.pad(e.width*t,e.height*t)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}};var Do=class extends O{getRefPointsForAlignment(){let t=this.positions;return[t[0],t[1],ut([t[3],t[4]])]}};var Yt=class extends O{getJawOutline(){return this.positions.slice(0,17)}getLeftEyeBrow(){return this.positions.slice(17,22)}getRightEyeBrow(){return this.positions.slice(22,27)}getNose(){return this.positions.slice(27,36)}getLeftEye(){return this.positions.slice(36,42)}getRightEye(){return this.positions.slice(42,48)}getMouth(){return this.positions.slice(48,68)}getRefPointsForAlignment(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(ut)}};var ce=class{constructor(t,e){this._label=t,this._distance=e}get label(){return this._label}get distance(){return this._distance}toString(t=!0){return`${this.label}${t?` (${pt(this.distance)})`:""}`}};var me=class extends F{static assertIsValidLabeledBox(t,e){if(F.assertIsValidBox(t,e),!Y(t.label))throw new Error(`${e} - expected property label (${t.label}) to be a number`)}constructor(t,e){super(t);this._label=e}get label(){return this._label}};var at=class{constructor(t,e){if(typeof t!="string")throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(e)||e.some(r=>!(r instanceof Float32Array)))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=t,this._descriptors=e}get label(){return this._label}get descriptors(){return this._descriptors}toJSON(){return{label:this.label,descriptors:this.descriptors.map(t=>Array.from(t))}}static fromJSON(t){let e=t.descriptors.map(r=>new Float32Array(r));return new at(t.label,e)}};var Eo=class extends me{static assertIsValidPredictedBox(t,e){if(me.assertIsValidLabeledBox(t,e),!wt(t.score)||!wt(t.classScore))throw new Error(`${e} - expected properties score (${t.score}) and (${t.classScore}) to be a number between [0, 1]`)}constructor(t,e,r,a){super(t,e);this._score=r,this._classScore=a}get score(){return this._score}get classScore(){return this._classScore}};function K(o){return o.detection instanceof E}function Ft(o,t){return{...o,...{detection:t}}}function Ce(){let o=window.fetch;if(!o)throw new Error("fetch - missing fetch implementation for browser environment");return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D,Image:HTMLImageElement,ImageData,Video:HTMLVideoElement,createCanvasElement:()=>document.createElement("canvas"),createImageElement:()=>document.createElement("img"),createVideoElement:()=>document.createElement("video"),fetch:o,readFile:()=>{throw new Error("readFile - filesystem not available for browser environment")}}}function Gt(){return typeof global=="object"&&typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null}function pe(o){let t="";if(!o&&Gt())try{o=uo("fs")}catch(r){t=r.toString()}return{readFile:o?r=>new Promise((a,s)=>{o.readFile(r,(i,c)=>i?s(i):a(c))}):()=>{throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)}}}function Ie(){let o=global.Canvas||global.HTMLCanvasElement,t=global.Image||global.HTMLImageElement,e=global.Video||global.HTMLVideoElement,r=()=>{if(o)return new o;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},a=()=>{if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},s=()=>{if(e)return new e;throw new Error("createVideoElement - missing Video implementation for nodejs environment")},i=global.fetch,c=pe();return{Canvas:o||class{},CanvasRenderingContext2D:global.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:global.ImageData||class{},Video:global.HTMLVideoElement||class{},createCanvasElement:r,createImageElement:a,createVideoElement:s,fetch:i,...c}}function Ne(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}var C;function Mo(){if(!C)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return C}function Le(o){C=o}function Se(){return Ne()?Le(Ce()):Gt()?Le(Ie()):null}function Co(o){if(C||Se(),!C)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");let{Canvas:t=C.Canvas,Image:e=C.Image}=o;C.Canvas=t,C.Image=e,C.createCanvasElement=o.createCanvasElement||(()=>new t),C.createImageElement=o.createImageElement||(()=>new e),C.ImageData=o.ImageData||C.ImageData,C.Video=o.Video||C.Video,C.fetch=o.fetch||C.fetch,C.readFile=o.readFile||C.readFile}var P={getEnv:Mo,setEnv:Le,initialize:Se,createBrowserEnv:Ce,createFileSystem:pe,createNodejsEnv:Ie,monkeyPatch:Co,isBrowser:Ne,isNodejs:Gt};Se();function Dt(o){return!P.isNodejs()&&typeof o=="string"?document.getElementById(o):o}function k(o){let{Canvas:t,CanvasRenderingContext2D:e}=P.getEnv();if(o instanceof e)return o;let r=Dt(o);if(!(r instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");let a=r.getContext("2d");if(!a)throw new Error("resolveContext2d - canvas 2d context is null");return a}var Ae=(a=>(a.TOP_LEFT="TOP_LEFT",a.TOP_RIGHT="TOP_RIGHT",a.BOTTOM_LEFT="BOTTOM_LEFT",a.BOTTOM_RIGHT="BOTTOM_RIGHT",a))(Ae||{}),Vt=class{constructor(t={}){let{anchorPosition:e,backgroundColor:r,fontColor:a,fontSize:s,fontStyle:i,padding:c}=t;this.anchorPosition=e||"TOP_LEFT",this.backgroundColor=r||"rgba(0, 0, 0, 0.5)",this.fontColor=a||"rgba(255, 255, 255, 1)",this.fontSize=s||14,this.fontStyle=i||"Georgia",this.padding=c||4}},st=class{constructor(t,e,r={}){this.text=typeof t=="string"?[t]:t instanceof st?t.text:t,this.anchor=e,this.options=new Vt(r)}measureWidth(t){let{padding:e}=this.options;return this.text.map(r=>t.measureText(r).width).reduce((r,a)=>r{let g=m+f.x,_=m+f.y+(d+1)*i;r.fillText(l,g,_)})}};var ke=class{constructor(t={}){let{boxColor:e,lineWidth:r,label:a,drawLabelOptions:s}=t;this.boxColor=e||"rgba(0, 0, 255, 1)",this.lineWidth=r||2,this.label=a;let i={anchorPosition:"BOTTOM_LEFT",backgroundColor:this.boxColor};this.drawLabelOptions=new Vt({...i,...s})}},ue=class{constructor(t,e={}){this.box=new F(t),this.options=new ke(e)}draw(t){let e=k(t),{boxColor:r,lineWidth:a}=this.options,{x:s,y:i,width:c,height:m}=this.box;e.strokeStyle=r,e.lineWidth=a,e.strokeRect(s,i,c,m);let{label:p}=this.options;p&&new st([p],{x:s-a/2,y:i},this.options.drawLabelOptions).draw(t)}};function Io(o,t){(Array.isArray(t)?t:[t]).forEach(r=>{let a=r instanceof E?r.score:K(r)?r.detection.score:void 0,s=r instanceof E?r.box:K(r)?r.detection.box:new F(r),i=a?`${pt(a)}`:void 0;new ue(s,{label:i}).draw(o)})}function fe(o){let{Image:t,Video:e}=P.getEnv();return o instanceof t&&o.complete||o instanceof e&&o.readyState>=3}function gr(o){return new Promise((t,e)=>{(o instanceof P.getEnv().Canvas||fe(o))&&t(null);function r(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",a),s.currentTarget.removeEventListener("error",r),e(s))}function a(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",a),s.currentTarget.removeEventListener("error",r),t(s))}o.addEventListener("load",a),o.addEventListener("error",r)})}function xr(o){return new Promise((t,e)=>{o instanceof Blob||e(new Error("bufferToImage - expected buf to be of type: Blob"));let r=new FileReader;r.onload=()=>{typeof r.result!="string"&&e(new Error("bufferToImage - expected reader.result to be a string, in onload"));let a=P.getEnv().createImageElement();a.onload=()=>t(a),a.onerror=e,a.src=r.result},r.onerror=e,r.readAsDataURL(o)})}function Et(o){let{Image:t,Video:e}=P.getEnv();return o instanceof t?new S(o.naturalWidth,o.naturalHeight):o instanceof e?new S(o.videoWidth,o.videoHeight):new S(o.width,o.height)}function Mt({width:o,height:t}){let{createCanvasElement:e}=P.getEnv(),r=e();return r.width=o,r.height=t,r}function le(o,t){let{ImageData:e}=P.getEnv();if(!(o instanceof e)&&!fe(o))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:r,height:a}=t||Et(o),s=Mt({width:r,height:a});return o instanceof e?k(s).putImageData(o,0,0):k(s).drawImage(o,0,0,r,a),s}async function vr(o,t){let e=t||P.getEnv().createCanvasElement(),[r,a,s]=o.shape.slice(R(o)?1:0),i=n.tidy(()=>o.as3D(r,a,s).toInt());return await n.browser.toPixels(i,e),i.dispose(),e}function We(o){let{Image:t,Canvas:e,Video:r}=P.getEnv();return o instanceof t||o instanceof e||o instanceof r}function yr(o,t,e=!1){let{Image:r,Canvas:a}=P.getEnv();if(!(o instanceof r||o instanceof a))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return Mt({width:1,height:1});let s=Et(o),i=t/Math.max(s.height,s.width),c=i*s.width,m=i*s.height,p=Mt({width:t,height:t}),u=o instanceof a?o:le(o),f=Math.abs(c-m)/2,l=e&&c0&&u.height>0&&k(p).drawImage(u,l,d,c,m),p}var it=class{constructor(t,e=!1){this._imageTensors=[];this._canvases=[];this._treatAsBatchInput=!1;this._inputDimensions=[];this._inputSize=0;if(!Array.isArray(t))throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${t}`);this._treatAsBatchInput=e,this._batchSize=t.length,t.forEach((r,a)=>{if(Z(r)){this._imageTensors[a]=r,this._inputDimensions[a]=r.shape;return}if(R(r)){let i=r.shape[0];if(i!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${i} passed, but not supported in input array`);this._imageTensors[a]=r,this._inputDimensions[a]=r.shape.slice(1);return}let s=r instanceof P.getEnv().Canvas?r:le(r);this._canvases[a]=s,this._inputDimensions[a]=[s.height,s.width,3]})}get imageTensors(){return this._imageTensors}get canvases(){return this._canvases}get isBatchInput(){return this.batchSize>1||this._treatAsBatchInput}get batchSize(){return this._batchSize}get inputDimensions(){return this._inputDimensions}get inputSize(){return this._inputSize}get reshapedInputDimensions(){return X(this.batchSize,0,1).map((t,e)=>this.getReshapedInputDimensions(e))}getInput(t){return this.canvases[t]||this.imageTensors[t]}getInputDimensions(t){return this._inputDimensions[t]}getInputHeight(t){return this._inputDimensions[t][0]}getInputWidth(t){return this._inputDimensions[t][1]}getReshapedInputDimensions(t){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");let e=this.getInputWidth(t),r=this.getInputHeight(t);return Me({width:e,height:r},this.inputSize)}toBatchTensor(t,e=!0){return this._inputSize=t,n.tidy(()=>{let r=X(this.batchSize,0,1).map(s=>{let i=this.getInput(s);if(i instanceof n.Tensor){let c=R(i)?i:n.expandDims(i);return c=br(c,e),(c.shape[1]!==t||c.shape[2]!==t)&&(c=n.image.resizeBilinear(c,[t,t],!1,!1)),c.as3D(t,t,3)}if(i instanceof P.getEnv().Canvas)return n.browser.fromPixels(yr(i,t,e));throw new Error(`toBatchTensor - at batchIdx ${s}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${i}`)});return n.stack(r.map(s=>n.cast(s,"float32"))).as4D(this.batchSize,t,t,3)})}};async function D(o){if(o instanceof it)return o;let t=Array.isArray(o)?o:[o];if(!t.length)throw new Error("toNetInput - empty array passed as input");let e=a=>Array.isArray(o)?` at input index ${a}:`:"",r=t.map(Dt);return r.forEach((a,s)=>{if(!We(a)&&!Z(a)&&!R(a))throw typeof t[s]=="string"?new Error(`toNetInput -${e(s)} string passed, but could not resolve HTMLElement for element id ${t[s]}`):new Error(`toNetInput -${e(s)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(R(a)){let i=a.shape[0];if(i!==1)throw new Error(`toNetInput -${e(s)} tf.Tensor4D with batchSize ${i} passed, but not supported in input array`)}}),await Promise.all(r.map(a=>We(a)&&gr(a))),new it(r,Array.isArray(o))}async function jt(o,t){let{Canvas:e}=P.getEnv(),r=o;if(!(o instanceof e)){let i=await D(o);if(i.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");let c=i.getInput(0);r=c instanceof e?c:await vr(c)}let a=k(r);return t.map(i=>i instanceof E?i.forSize(r.width,r.height).box.floor():i).map(i=>i.clipAtImageBorders(r.width,r.height)).map(({x:i,y:c,width:m,height:p})=>{let u=Mt({width:m,height:p});return m>0&&p>0&&k(u).putImageData(a.getImageData(i,c,m,p),0,0),u})}async function Ut(o,t){if(!Z(o)&&!R(o))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(R(o)&&o.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return n.tidy(()=>{let[e,r,a]=o.shape.slice(R(o)?1:0);return t.map(c=>c instanceof E?c.forSize(r,e).box:c).map(c=>c.clipAtImageBorders(r,e)).map(({x:c,y:m,width:p,height:u})=>n.slice3d(o.as3D(e,r,a),[m,c,0],[u,p,a]))})}async function ct(o,t){let{fetch:e}=P.getEnv(),r=await e(o,t);if(!(r.status<400))throw new Error(`failed to fetch: (${r.status}) ${r.statusText}, from url: ${r.url}`);return r}async function _i(o){let t=await ct(o),e=await t.blob();if(!e.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${e.type}, for url: ${t.url}`);return xr(e)}async function Tr(o){return(await ct(o)).json()}async function Ei(o){return new Float32Array(await(await ct(o)).arrayBuffer())}function _r(o){return new Promise((t,e)=>{o instanceof Blob||e(new Error("bufferToVideo - expected buf to be of type: Blob"));let r=P.getEnv().createVideoElement();r.oncanplay=()=>t(r),r.onerror=e,r.playsInline=!0,r.muted=!0,r.src=URL.createObjectURL(o),r.play()})}async function Si(o){let t=await ct(o),e=await t.blob();if(!e.type.startsWith("video/"))throw new Error(`fetchVideo - expected blob type to be of type video/*, instead have: ${e.type}, for url: ${t.url}`);return _r(e)}function de(o,t){let e=`${t}-weights_manifest.json`;if(!o)return{modelBaseUri:"",manifestUri:e};if(o==="/")return{modelBaseUri:"/",manifestUri:`/${e}`};let r=o.startsWith("http://")?"http://":o.startsWith("https://")?"https://":"";o=o.replace(r,"");let a=o.split("/").filter(c=>c),s=o.endsWith(".json")?a[a.length-1]:e,i=r+(o.endsWith(".json")?a.slice(0,a.length-1):a).join("/");return i=o.startsWith("/")?`/${i}`:i,{modelBaseUri:i,manifestUri:i==="/"?`/${s}`:`${i}/${s}`}}async function Pr(o,t){let{manifestUri:e,modelBaseUri:r}=de(o,t),a=await Tr(e);return n.io.loadWeights(a,r)}function Oi(o,t,e=!1){let{width:r,height:a}=e?Et(t):t;return o.width=r,o.height=a,{width:r,height:a}}var I=class{constructor(t){this._params=void 0;this._paramMappings=[];this._name=t}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(t){let{obj:e,objProp:r}=this.traversePropertyPath(t);return e[r]}reassignParamFromPath(t,e){let{obj:r,objProp:a}=this.traversePropertyPath(t);r[a].dispose(),r[a]=e}getParamList(){return this._paramMappings.map(({paramPath:t})=>({path:t,tensor:this.getParamFromPath(t)}))}getTrainableParams(){return this.getParamList().filter(t=>t.tensor instanceof n.Variable)}getFrozenParams(){return this.getParamList().filter(t=>!(t.tensor instanceof n.Variable))}variable(){this.getFrozenParams().forEach(({path:t,tensor:e})=>{this.reassignParamFromPath(t,e.variable())})}freeze(){this.getTrainableParams().forEach(({path:t,tensor:e})=>{let r=n.tensor(e.dataSync());e.dispose(),this.reassignParamFromPath(t,r)})}dispose(t=!0){this.getParamList().forEach(e=>{if(t&&e.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${e.path}`);e.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:t})=>Array.from(t.dataSync())).reduce((t,e)=>t.concat(e)))}async load(t){if(t instanceof Float32Array){this.extractWeights(t);return}await this.loadFromUri(t)}async loadFromUri(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);let e=await Pr(t,this.getDefaultModelName());this.loadFromWeightMap(e)}async loadFromDisk(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);let{readFile:e}=P.getEnv(),{manifestUri:r,modelBaseUri:a}=de(t,this.getDefaultModelName()),s=p=>Promise.all(p.map(u=>e(u).then(f=>f.buffer))),i=n.io.weightsLoaderFactory(s),c=JSON.parse((await e(r)).toString()),m=await i(c,a);this.loadFromWeightMap(m)}loadFromWeightMap(t){let{paramMappings:e,params:r}=this.extractParamsFromWeightMap(t);this._paramMappings=e,this._params=r}extractWeights(t){let{paramMappings:e,params:r}=this.extractParams(t);this._paramMappings=e,this._params=r}traversePropertyPath(t){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");let e=t.split("/").reduce((s,i)=>{if(!s.nextObj.hasOwnProperty(i))throw new Error(`traversePropertyPath - object does not have property ${i}, for path ${t}`);return{obj:s.nextObj,objProp:i,nextObj:s.nextObj[i]}},{nextObj:this.params}),{obj:r,objProp:a}=e;if(!r||!a||!(r[a]instanceof n.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${t}`);return{obj:r,objProp:a}}};function A(o,t,e){return n.tidy(()=>{let r=n.separableConv2d(o,t.depthwise_filter,t.pointwise_filter,e,"same");return r=n.add(r,t.bias),r})}function he(o,t,e=!1){return n.tidy(()=>{let r=n.relu(e?n.add(n.conv2d(o,t.conv0.filters,[2,2],"same"),t.conv0.bias):A(o,t.conv0,[2,2])),a=A(r,t.conv1,[1,1]),s=n.relu(n.add(r,a)),i=A(s,t.conv2,[1,1]);return n.relu(n.add(r,n.add(a,i)))})}function Xt(o,t,e=!1,r=!0){return n.tidy(()=>{let a=n.relu(e?n.add(n.conv2d(o,t.conv0.filters,r?[2,2]:[1,1],"same"),t.conv0.bias):A(o,t.conv0,r?[2,2]:[1,1])),s=A(a,t.conv1,[1,1]),i=n.relu(n.add(a,s)),c=A(i,t.conv2,[1,1]),m=n.relu(n.add(a,n.add(s,c))),p=A(m,t.conv3,[1,1]);return n.relu(n.add(a,n.add(s,n.add(c,p))))})}function lt(o,t,e="same",r=!1){return n.tidy(()=>{let a=n.add(n.conv2d(o,t.filters,[1,1],e),t.bias);return r?n.relu(a):a})}function N(o,t){Object.keys(o).forEach(e=>{t.some(r=>r.originalPath===e)||o[e].dispose()})}function Ct(o,t){return(e,r,a,s)=>{let i=n.tensor4d(o(e*r*a*a),[a,a,e,r]),c=n.tensor1d(o(r));return t.push({paramPath:`${s}/filters`},{paramPath:`${s}/bias`}),{filters:i,bias:c}}}function be(o,t){return(e,r,a)=>{let s=n.tensor2d(o(e*r),[e,r]),i=n.tensor1d(o(r));return t.push({paramPath:`${a}/weights`},{paramPath:`${a}/bias`}),{weights:s,bias:i}}}var ge=class{constructor(t,e,r){this.depthwise_filter=t;this.pointwise_filter=e;this.bias=r}};function It(o,t){return(e,r,a)=>{let s=n.tensor4d(o(9*e),[3,3,e,1]),i=n.tensor4d(o(e*r),[1,1,e,r]),c=n.tensor1d(o(r));return t.push({paramPath:`${a}/depthwise_filter`},{paramPath:`${a}/pointwise_filter`},{paramPath:`${a}/bias`}),new ge(s,i,c)}}function Nt(o){return t=>{let e=o(`${t}/depthwise_filter`,4),r=o(`${t}/pointwise_filter`,4),a=o(`${t}/bias`,1);return new ge(e,r,a)}}function W(o,t){return(e,r,a)=>{let s=o[e];if(!mt(s,r))throw new Error(`expected weightMap[${e}] to be a Tensor${r}D, instead have ${s}`);return t.push({originalPath:e,paramPath:a||e}),s}}function L(o){let t=o;function e(a){let s=t.slice(0,a);return t=t.slice(a),s}function r(){return t}return{extractWeights:e,getRemainingWeights:r}}function xe(o,t){let e=Ct(o,t),r=It(o,t);function a(i,c,m,p=!1){let u=p?e(i,c,3,`${m}/conv0`):r(i,c,`${m}/conv0`),f=r(c,c,`${m}/conv1`),l=r(c,c,`${m}/conv2`);return{conv0:u,conv1:f,conv2:l}}function s(i,c,m,p=!1){let{conv0:u,conv1:f,conv2:l}=a(i,c,m,p),d=r(c,c,`${m}/conv3`);return{conv0:u,conv1:f,conv2:l,conv3:d}}return{extractDenseBlock3Params:a,extractDenseBlock4Params:s}}function wr(o){let t=[],{extractWeights:e,getRemainingWeights:r}=L(o),{extractDenseBlock4Params:a}=xe(e,t),s=a(3,32,"dense0",!0),i=a(32,64,"dense1"),c=a(64,128,"dense2"),m=a(128,256,"dense3");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:c,dense3:m}}}function ve(o){return t=>{let e=o(`${t}/filters`,4),r=o(`${t}/bias`,1);return{filters:e,bias:r}}}function ye(o,t){let e=W(o,t),r=ve(e),a=Nt(e);function s(c,m=!1){let p=m?r(`${c}/conv0`):a(`${c}/conv0`),u=a(`${c}/conv1`),f=a(`${c}/conv2`);return{conv0:p,conv1:u,conv2:f}}function i(c,m=!1){let p=m?r(`${c}/conv0`):a(`${c}/conv0`),u=a(`${c}/conv1`),f=a(`${c}/conv2`),l=a(`${c}/conv3`);return{conv0:p,conv1:u,conv2:f,conv3:l}}return{extractDenseBlock3Params:s,extractDenseBlock4Params:i}}function Fr(o){let t=[],{extractDenseBlock4Params:e}=ye(o,t),r={dense0:e("dense0",!0),dense1:e("dense1"),dense2:e("dense2"),dense3:e("dense3")};return N(o,t),{params:r,paramMappings:t}}var Jt=class extends I{constructor(){super("FaceFeatureExtractor")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("FaceFeatureExtractor - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(112,!0),"float32"),s=J(r,[122.782,117.001,104.298]).div(255),i=Xt(s,e.dense0,!0);return i=Xt(i,e.dense1),i=Xt(i,e.dense2),i=Xt(i,e.dense3),i=n.avgPool(i,[7,7],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await D(t))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeightMap(t){return Fr(t)}extractParams(t){return wr(t)}};function qt(o,t){return n.tidy(()=>n.add(n.matMul(o,t.weights),t.bias))}function Dr(o,t,e){let r=[],{extractWeights:a,getRemainingWeights:s}=L(o),c=be(a,r)(t,e,"fc");if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{paramMappings:r,params:{fc:c}}}function Er(o){let t=[],e=W(o,t);function r(s){let i=e(`${s}/weights`,2),c=e(`${s}/bias`,1);return{weights:i,bias:c}}let a={fc:r("fc")};return N(o,t),{params:a,paramMappings:t}}function Te(o){let t={},e={};return Object.keys(o).forEach(r=>{let a=r.startsWith("fc")?e:t;a[r]=o[r]}),{featureExtractorMap:t,classifierMap:e}}var Zt=class extends I{constructor(t,e){super(t);this._faceFeatureExtractor=e}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(t){let{params:e}=this;if(!e)throw new Error(`${this._name} - load model before inference`);return n.tidy(()=>{let r=t instanceof it?this.faceFeatureExtractor.forwardInput(t):t;return qt(r.as2D(r.shape[0],-1),e.fc)})}dispose(t=!0){this.faceFeatureExtractor.dispose(t),super.dispose(t)}loadClassifierParams(t){let{params:e,paramMappings:r}=this.extractClassifierParams(t);this._params=e,this._paramMappings=r}extractClassifierParams(t){return Dr(t,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(t){let{featureExtractorMap:e,classifierMap:r}=Te(t);return this.faceFeatureExtractor.loadFromWeightMap(e),Er(r)}extractParams(t){let e=this.getClassifierChannelsIn(),r=this.getClassifierChannelsOut(),a=r*e+r,s=t.slice(0,t.length-a),i=t.slice(t.length-a);return this.faceFeatureExtractor.extractWeights(s),this.extractClassifierParams(i)}};var Mr=["neutral","happy","sad","angry","fearful","disgusted","surprised"],dt=class{constructor(t){this.neutral=0;this.happy=0;this.sad=0;this.angry=0;this.fearful=0;this.disgusted=0;this.surprised=0;if(t.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${t.length}`);Mr.forEach((e,r)=>{this[e]=t[r]})}asSortedArray(){return Mr.map(t=>({expression:t,probability:this[t]})).sort((t,e)=>e.probability-t.probability)}};var Be=class extends Zt{constructor(t=new Jt){super("FaceExpressionNet",t)}forwardInput(t){return n.tidy(()=>n.softmax(this.runNet(t)))}async forward(t){return this.forwardInput(await D(t))}async predictExpressions(t){let e=await D(t),r=await this.forwardInput(e),a=await Promise.all(n.unstack(r).map(async i=>{let c=i.dataSync();return i.dispose(),c}));r.dispose();let s=a.map(i=>new dt(i));return e.isBatchInput?s:s[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}};function Cr(o){return o.expressions instanceof dt}function Re(o,t){return{...o,...{expressions:t}}}function No(o,t,e=.1,r){(Array.isArray(t)?t:[t]).forEach(s=>{let i=s instanceof dt?s:Cr(s)?s.expressions:void 0;if(!i)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");let m=i.asSortedArray().filter(f=>f.probability>e),p=K(s)?s.detection.box.bottomLeft:r||new b(0,0);new st(m.map(f=>`${f.expression} (${pt(f.probability)})`),p).draw(o)})}function Lt(o){return K(o)&&o.landmarks instanceof O&&o.unshiftedLandmarks instanceof O&&o.alignedRect instanceof E}function Lo(o){let t=(c,m,p,u)=>Math.atan2(u-m,p-c)%Math.PI,e=c=>c*180/Math.PI,r={roll:void 0,pitch:void 0,yaw:void 0};if(!o||!o._positions||o._positions.length!==68)return r;let a=o._positions;r.roll=-t(a[36]._x,a[36]._y,a[45]._x,a[45]._y),r.pitch=t(0,Math.abs(a[0]._x-a[30]._x)/a[30]._x,Math.PI,Math.abs(a[16]._x-a[30]._x)/a[30]._x);let s=a.reduce((c,m)=>cc>m._y?c:m._y,-1/0);return r.yaw=Math.PI*(o._imgDims._height/(i-s)/1.4-1),r}function Kt(o,t){let{box:e}=o.detection,r=t.shiftBy(e.x,e.y),a=r.align(),{imageDims:s}=o.detection,i=new E(o.detection.score,a.rescale(s.reverse()),s),c=Lo(t);return{...o,...{landmarks:r,unshiftedLandmarks:t,alignedRect:i,angle:c}}}var $e=class{constructor(t={}){let{drawLines:e=!0,drawPoints:r=!0,lineWidth:a,lineColor:s,pointSize:i,pointColor:c}=t;this.drawLines=e,this.drawPoints=r,this.lineWidth=a||1,this.pointSize=i||2,this.lineColor=s||"rgba(0, 255, 255, 1)",this.pointColor=c||"rgba(255, 0, 255, 1)"}},Oe=class{constructor(t,e={}){this.faceLandmarks=t,this.options=new $e(e)}draw(t){let e=k(t),{drawLines:r,drawPoints:a,lineWidth:s,lineColor:i,pointSize:c,pointColor:m}=this.options;if(r&&this.faceLandmarks instanceof Yt&&(e.strokeStyle=i,e.lineWidth=s,q(e,this.faceLandmarks.getJawOutline()),q(e,this.faceLandmarks.getLeftEyeBrow()),q(e,this.faceLandmarks.getRightEyeBrow()),q(e,this.faceLandmarks.getNose()),q(e,this.faceLandmarks.getLeftEye(),!0),q(e,this.faceLandmarks.getRightEye(),!0),q(e,this.faceLandmarks.getMouth(),!0)),a){e.strokeStyle=m,e.fillStyle=m;let p=u=>{e.beginPath(),e.arc(u.x,u.y,c,0,2*Math.PI),e.fill()};this.faceLandmarks.positions.forEach(p)}}};function So(o,t){(Array.isArray(t)?t:[t]).forEach(r=>{let a=r instanceof O?r:Lt(r)?r.landmarks:void 0;if(!a)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new Oe(a).draw(o)})}var Nr="1.6.6";function Wo(o,t){let e=Ct(o,t),r=It(o,t);function a(i,c,m){let p=r(i,c,`${m}/separable_conv0`),u=r(c,c,`${m}/separable_conv1`),f=e(i,c,1,`${m}/expansion_conv`);return{separable_conv0:p,separable_conv1:u,expansion_conv:f}}function s(i,c){let m=r(i,i,`${c}/separable_conv0`),p=r(i,i,`${c}/separable_conv1`),u=r(i,i,`${c}/separable_conv2`);return{separable_conv0:m,separable_conv1:p,separable_conv2:u}}return{extractConvParams:e,extractSeparableConvParams:r,extractReductionBlockParams:a,extractMainBlockParams:s}}function Lr(o,t){let e=[],{extractWeights:r,getRemainingWeights:a}=L(o),{extractConvParams:s,extractSeparableConvParams:i,extractReductionBlockParams:c,extractMainBlockParams:m}=Wo(r,e),p=s(3,32,3,"entry_flow/conv_in"),u=c(32,64,"entry_flow/reduction_block_0"),f=c(64,128,"entry_flow/reduction_block_1"),l={conv_in:p,reduction_block_0:u,reduction_block_1:f},d={};X(t,0,1).forEach(x=>{d[`main_block_${x}`]=m(128,`middle_flow/main_block_${x}`)});let g=c(128,256,"exit_flow/reduction_block"),_=i(256,512,"exit_flow/separable_conv"),h={reduction_block:g,separable_conv:_};if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:e,params:{entry_flow:l,middle_flow:d,exit_flow:h}}}function Bo(o,t){let e=W(o,t),r=ve(e),a=Nt(e);function s(c){let m=a(`${c}/separable_conv0`),p=a(`${c}/separable_conv1`),u=r(`${c}/expansion_conv`);return{separable_conv0:m,separable_conv1:p,expansion_conv:u}}function i(c){let m=a(`${c}/separable_conv0`),p=a(`${c}/separable_conv1`),u=a(`${c}/separable_conv2`);return{separable_conv0:m,separable_conv1:p,separable_conv2:u}}return{extractConvParams:r,extractSeparableConvParams:a,extractReductionBlockParams:s,extractMainBlockParams:i}}function Sr(o,t){let e=[],{extractConvParams:r,extractSeparableConvParams:a,extractReductionBlockParams:s,extractMainBlockParams:i}=Bo(o,e),c=r("entry_flow/conv_in"),m=s("entry_flow/reduction_block_0"),p=s("entry_flow/reduction_block_1"),u={conv_in:c,reduction_block_0:m,reduction_block_1:p},f={};X(t,0,1).forEach(_=>{f[`main_block_${_}`]=i(`middle_flow/main_block_${_}`)});let l=s("exit_flow/reduction_block"),d=a("exit_flow/separable_conv"),g={reduction_block:l,separable_conv:d};return N(o,e),{params:{entry_flow:u,middle_flow:f,exit_flow:g},paramMappings:e}}function Ar(o,t,e){return n.add(n.conv2d(o,t.filters,e,"same"),t.bias)}function He(o,t,e=!0){let r=e?n.relu(o):o;return r=A(r,t.separable_conv0,[1,1]),r=A(n.relu(r),t.separable_conv1,[1,1]),r=n.maxPool(r,[3,3],[2,2],"same"),r=n.add(r,Ar(o,t.expansion_conv,[2,2])),r}function Ro(o,t){let e=A(n.relu(o),t.separable_conv0,[1,1]);return e=A(n.relu(e),t.separable_conv1,[1,1]),e=A(n.relu(e),t.separable_conv2,[1,1]),e=n.add(e,o),e}var ze=class extends I{constructor(t){super("TinyXception");this._numMainBlocks=t}forwardInput(t){let{params:e}=this;if(!e)throw new Error("TinyXception - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(112,!0),"float32"),s=J(r,[122.782,117.001,104.298]).div(255),i=n.relu(Ar(s,e.entry_flow.conv_in,[2,2]));return i=He(i,e.entry_flow.reduction_block_0,!1),i=He(i,e.entry_flow.reduction_block_1),X(this._numMainBlocks,0,1).forEach(c=>{i=Ro(i,e.middle_flow[`main_block_${c}`])}),i=He(i,e.exit_flow.reduction_block),i=n.relu(A(i,e.exit_flow.separable_conv,[1,1])),i})}async forward(t){return this.forwardInput(await D(t))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeightMap(t){return Sr(t,this._numMainBlocks)}extractParams(t){return Lr(t,this._numMainBlocks)}};function kr(o){let t=[],{extractWeights:e,getRemainingWeights:r}=L(o),a=be(e,t),s=a(512,1,"fc/age"),i=a(512,2,"fc/gender");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{fc:{age:s,gender:i}}}}function Wr(o){let t=[],e=W(o,t);function r(s){let i=e(`${s}/weights`,2),c=e(`${s}/bias`,1);return{weights:i,bias:c}}let a={fc:{age:r("fc/age"),gender:r("fc/gender")}};return N(o,t),{params:a,paramMappings:t}}var Ye=(e=>(e.FEMALE="female",e.MALE="male",e))(Ye||{});var Ge=class extends I{constructor(t=new ze(2)){super("AgeGenderNet");this._faceFeatureExtractor=t}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(t){let{params:e}=this;if(!e)throw new Error(`${this._name} - load model before inference`);return n.tidy(()=>{let r=t instanceof it?this.faceFeatureExtractor.forwardInput(t):t,a=n.avgPool(r,[7,7],[2,2],"valid").as2D(r.shape[0],-1),s=qt(a,e.fc.age).as1D(),i=qt(a,e.fc.gender);return{age:s,gender:i}})}forwardInput(t){return n.tidy(()=>{let{age:e,gender:r}=this.runNet(t);return{age:e,gender:n.softmax(r)}})}async forward(t){return this.forwardInput(await D(t))}async predictAgeAndGender(t){let e=await D(t),r=await this.forwardInput(e),a=n.unstack(r.age),s=n.unstack(r.gender),i=a.map((m,p)=>({ageTensor:m,genderTensor:s[p]})),c=await Promise.all(i.map(async({ageTensor:m,genderTensor:p})=>{let u=m.dataSync()[0],f=p.dataSync()[0],l=f>.5,d=l?"male":"female",g=l?f:1-f;return m.dispose(),p.dispose(),{age:u,gender:d,genderProbability:g}}));return r.age.dispose(),r.gender.dispose(),e.isBatchInput?c:c[0]}getDefaultModelName(){return"age_gender_model"}dispose(t=!0){this.faceFeatureExtractor.dispose(t),super.dispose(t)}loadClassifierParams(t){let{params:e,paramMappings:r}=this.extractClassifierParams(t);this._params=e,this._paramMappings=r}extractClassifierParams(t){return kr(t)}extractParamsFromWeightMap(t){let{featureExtractorMap:e,classifierMap:r}=Te(t);return this.faceFeatureExtractor.loadFromWeightMap(e),Wr(r)}extractParams(t){let r=t.slice(0,t.length-1539),a=t.slice(t.length-1539);return this.faceFeatureExtractor.extractWeights(r),this.extractClassifierParams(a)}};var Qt=class extends Zt{postProcess(t,e,r){let a=r.map(({width:i,height:c})=>{let m=e/Math.max(c,i);return{width:i*m,height:c*m}}),s=a.length;return n.tidy(()=>{let i=(f,l)=>n.stack([n.fill([68],f,"float32"),n.fill([68],l,"float32")],1).as2D(1,136).as1D(),c=(f,l)=>{let{width:d,height:g}=a[f];return l(d,g)?Math.abs(d-g)/2:0},m=f=>c(f,(l,d)=>lc(f,(l,d)=>di(m(l),p(l))))).div(n.stack(Array.from(Array(s),(f,l)=>i(a[l].width,a[l].height))))})}forwardInput(t){return n.tidy(()=>{let e=this.runNet(t);return this.postProcess(e,t.inputSize,t.inputDimensions.map(([r,a])=>({height:r,width:a})))})}async forward(t){return this.forwardInput(await D(t))}async detectLandmarks(t){let e=await D(t),r=n.tidy(()=>n.unstack(this.forwardInput(e))),a=await Promise.all(r.map(async(s,i)=>{let c=Array.from(s.dataSync()),m=c.filter((u,f)=>ae(f)),p=c.filter((u,f)=>!ae(f));return new Yt(Array(68).fill(0).map((u,f)=>new b(m[f],p[f])),{height:e.getInputHeight(i),width:e.getInputWidth(i)})}));return r.forEach(s=>s.dispose()),e.isBatchInput?a:a[0]}getClassifierChannelsOut(){return 136}};var te=class extends Qt{constructor(t=new Jt){super("FaceLandmark68Net",t)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};function Br(o){let t=[],{extractDenseBlock3Params:e}=ye(o,t),r={dense0:e("dense0",!0),dense1:e("dense1"),dense2:e("dense2")};return N(o,t),{params:r,paramMappings:t}}function Rr(o){let t=[],{extractWeights:e,getRemainingWeights:r}=L(o),{extractDenseBlock3Params:a}=xe(e,t),s=a(3,32,"dense0",!0),i=a(32,64,"dense1"),c=a(64,128,"dense2");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:c}}}var Ve=class extends I{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("TinyFaceFeatureExtractor - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(112,!0),"float32"),s=J(r,[122.782,117.001,104.298]).div(255),i=he(s,e.dense0,!0);return i=he(i,e.dense1),i=he(i,e.dense2),i=n.avgPool(i,[14,14],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await D(t))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeightMap(t){return Br(t)}extractParams(t){return Rr(t)}};var je=class extends Qt{constructor(t=new Ve){super("FaceLandmark68TinyNet",t)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}};var $o=class extends te{};function $r(o,t){return n.add(n.mul(o,t.weights),t.biases)}function Ue(o,t,e,r,a="same"){let{filters:s,bias:i}=t.conv,c=n.conv2d(o,s,e,a);return c=n.add(c,i),c=$r(c,t.scale),r?n.relu(c):c}function Or(o,t){return Ue(o,t,[1,1],!0)}function Xe(o,t){return Ue(o,t,[1,1],!1)}function _e(o,t){return Ue(o,t,[2,2],!0,"valid")}function Oo(o,t){function e(c,m,p){let u=o(c),f=u.length/(m*p*p);if(Ee(f))throw new Error(`depth has to be an integer: ${f}, weights.length: ${u.length}, numFilters: ${m}, filterSize: ${p}`);return n.tidy(()=>n.transpose(n.tensor4d(u,[m,f,p,p]),[2,3,1,0]))}function r(c,m,p,u){let f=e(c,m,p),l=n.tensor1d(o(m));return t.push({paramPath:`${u}/filters`},{paramPath:`${u}/bias`}),{filters:f,bias:l}}function a(c,m){let p=n.tensor1d(o(c)),u=n.tensor1d(o(c));return t.push({paramPath:`${m}/weights`},{paramPath:`${m}/biases`}),{weights:p,biases:u}}function s(c,m,p,u){let f=r(c,m,p,`${u}/conv`),l=a(m,`${u}/scale`);return{conv:f,scale:l}}function i(c,m,p,u,f=!1){let l=s((f?.5:1)*c,m,p,`${u}/conv1`),d=s(c,m,p,`${u}/conv2`);return{conv1:l,conv2:d}}return{extractConvLayerParams:s,extractResidualLayerParams:i}}function Hr(o){let{extractWeights:t,getRemainingWeights:e}=L(o),r=[],{extractConvLayerParams:a,extractResidualLayerParams:s}=Oo(t,r),i=a(4704,32,7,"conv32_down"),c=s(9216,32,3,"conv32_1"),m=s(9216,32,3,"conv32_2"),p=s(9216,32,3,"conv32_3"),u=s(36864,64,3,"conv64_down",!0),f=s(36864,64,3,"conv64_1"),l=s(36864,64,3,"conv64_2"),d=s(36864,64,3,"conv64_3"),g=s(147456,128,3,"conv128_down",!0),_=s(147456,128,3,"conv128_1"),h=s(147456,128,3,"conv128_2"),x=s(589824,256,3,"conv256_down",!0),T=s(589824,256,3,"conv256_1"),v=s(589824,256,3,"conv256_2"),M=s(589824,256,3,"conv256_down_out"),B=n.tidy(()=>n.transpose(n.tensor2d(t(256*128),[128,256]),[1,0]));if(r.push({paramPath:"fc"}),e().length!==0)throw new Error(`weights remaing after extract: ${e().length}`);return{params:{conv32_down:i,conv32_1:c,conv32_2:m,conv32_3:p,conv64_down:u,conv64_1:f,conv64_2:l,conv64_3:d,conv128_down:g,conv128_1:_,conv128_2:h,conv256_down:x,conv256_1:T,conv256_2:v,conv256_down_out:M,fc:B},paramMappings:r}}function Ho(o,t){let e=W(o,t);function r(i){let c=e(`${i}/scale/weights`,1),m=e(`${i}/scale/biases`,1);return{weights:c,biases:m}}function a(i){let c=e(`${i}/conv/filters`,4),m=e(`${i}/conv/bias`,1),p=r(i);return{conv:{filters:c,bias:m},scale:p}}function s(i){return{conv1:a(`${i}/conv1`),conv2:a(`${i}/conv2`)}}return{extractConvLayerParams:a,extractResidualLayerParams:s}}function zr(o){let t=[],{extractConvLayerParams:e,extractResidualLayerParams:r}=Ho(o,t),a=e("conv32_down"),s=r("conv32_1"),i=r("conv32_2"),c=r("conv32_3"),m=r("conv64_down"),p=r("conv64_1"),u=r("conv64_2"),f=r("conv64_3"),l=r("conv128_down"),d=r("conv128_1"),g=r("conv128_2"),_=r("conv256_down"),h=r("conv256_1"),x=r("conv256_2"),T=r("conv256_down_out"),{fc:v}=o;if(t.push({originalPath:"fc",paramPath:"fc"}),!De(v))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${v}`);let M={conv32_down:a,conv32_1:s,conv32_2:i,conv32_3:c,conv64_down:m,conv64_1:p,conv64_2:u,conv64_3:f,conv128_down:l,conv128_1:d,conv128_2:g,conv256_down:_,conv256_1:h,conv256_2:x,conv256_down_out:T,fc:v};return N(o,t),{params:M,paramMappings:t}}function G(o,t){let e=Or(o,t.conv1);return e=Xe(e,t.conv2),e=n.add(e,o),e=n.relu(e),e}function ee(o,t){let e=_e(o,t.conv1);e=Xe(e,t.conv2);let r=n.avgPool(o,2,2,"valid"),a=n.zeros(r.shape),s=r.shape[3]!==e.shape[3];if(r.shape[1]!==e.shape[1]||r.shape[2]!==e.shape[2]){let c=[...e.shape];c[1]=1;let m=n.zeros(c);e=n.concat([e,m],1);let p=[...e.shape];p[2]=1;let u=n.zeros(p);e=n.concat([e,u],2)}return r=s?n.concat([r,a],3):r,e=n.add(r,e),e=n.relu(e),e}var re=class extends I{constructor(){super("FaceRecognitionNet")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("FaceRecognitionNet - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(150,!0),"float32"),s=J(r,[122.782,117.001,104.298]).div(255),i=_e(s,e.conv32_down);i=n.maxPool(i,3,2,"valid"),i=G(i,e.conv32_1),i=G(i,e.conv32_2),i=G(i,e.conv32_3),i=ee(i,e.conv64_down),i=G(i,e.conv64_1),i=G(i,e.conv64_2),i=G(i,e.conv64_3),i=ee(i,e.conv128_down),i=G(i,e.conv128_1),i=G(i,e.conv128_2),i=ee(i,e.conv256_down),i=G(i,e.conv256_1),i=G(i,e.conv256_2),i=ee(i,e.conv256_down_out);let c=i.mean([1,2]);return n.matMul(c,e.fc)})}async forward(t){return this.forwardInput(await D(t))}async computeFaceDescriptor(t){var s;if((s=t==null?void 0:t.shape)!=null&&s.some(i=>i<=0))return new Float32Array(128);let e=await D(t),r=n.tidy(()=>n.unstack(this.forwardInput(e))),a=await Promise.all(r.map(i=>i.data()));return r.forEach(i=>i.dispose()),e.isBatchInput?a:a[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeightMap(t){return zr(t)}extractParams(t){return Hr(t)}};function lf(o){let t=new re;return t.extractWeights(o),t}function Je(o,t){return{...o,...{descriptor:t}}}function gf(o){return typeof o.age=="number"}function qe(o,t){return{...o,...{age:t}}}function Tf(o){return(o.gender==="male"||o.gender==="female")&&wt(o.genderProbability)}function Ze(o,t,e){return{...o,...{gender:t,genderProbability:e}}}function zo(o,t){function e(m,p){let u=n.tensor4d(o(9*m),[3,3,m,1]),f=n.tensor1d(o(m)),l=n.tensor1d(o(m)),d=n.tensor1d(o(m)),g=n.tensor1d(o(m));return t.push({paramPath:`${p}/filters`},{paramPath:`${p}/batch_norm_scale`},{paramPath:`${p}/batch_norm_offset`},{paramPath:`${p}/batch_norm_mean`},{paramPath:`${p}/batch_norm_variance`}),{filters:u,batch_norm_scale:f,batch_norm_offset:l,batch_norm_mean:d,batch_norm_variance:g}}function r(m,p,u,f,l){let d=n.tensor4d(o(m*p*u*u),[u,u,m,p]),g=n.tensor1d(o(p));return t.push({paramPath:`${f}/filters`},{paramPath:`${f}/${l?"batch_norm_offset":"bias"}`}),{filters:d,bias:g}}function a(m,p,u,f){let{filters:l,bias:d}=r(m,p,u,f,!0);return{filters:l,batch_norm_offset:d}}function s(m,p,u){let f=e(m,`${u}/depthwise_conv`),l=a(m,p,1,`${u}/pointwise_conv`);return{depthwise_conv:f,pointwise_conv:l}}function i(){let m=a(3,32,3,"mobilenetv1/conv_0"),p=s(32,64,"mobilenetv1/conv_1"),u=s(64,128,"mobilenetv1/conv_2"),f=s(128,128,"mobilenetv1/conv_3"),l=s(128,256,"mobilenetv1/conv_4"),d=s(256,256,"mobilenetv1/conv_5"),g=s(256,512,"mobilenetv1/conv_6"),_=s(512,512,"mobilenetv1/conv_7"),h=s(512,512,"mobilenetv1/conv_8"),x=s(512,512,"mobilenetv1/conv_9"),T=s(512,512,"mobilenetv1/conv_10"),v=s(512,512,"mobilenetv1/conv_11"),M=s(512,1024,"mobilenetv1/conv_12"),B=s(1024,1024,"mobilenetv1/conv_13");return{conv_0:m,conv_1:p,conv_2:u,conv_3:f,conv_4:l,conv_5:d,conv_6:g,conv_7:_,conv_8:h,conv_9:x,conv_10:T,conv_11:v,conv_12:M,conv_13:B}}function c(){let m=a(1024,256,1,"prediction_layer/conv_0"),p=a(256,512,3,"prediction_layer/conv_1"),u=a(512,128,1,"prediction_layer/conv_2"),f=a(128,256,3,"prediction_layer/conv_3"),l=a(256,128,1,"prediction_layer/conv_4"),d=a(128,256,3,"prediction_layer/conv_5"),g=a(256,64,1,"prediction_layer/conv_6"),_=a(64,128,3,"prediction_layer/conv_7"),h=r(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),x=r(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),T=r(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),v=r(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),M=r(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),B=r(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),z=r(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),U=r(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$=r(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),rt=r(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),ot=r(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),nt=r(128,18,1,"prediction_layer/box_predictor_5/class_predictor");return{conv_0:m,conv_1:p,conv_2:u,conv_3:f,conv_4:l,conv_5:d,conv_6:g,conv_7:_,box_predictor_0:{box_encoding_predictor:h,class_predictor:x},box_predictor_1:{box_encoding_predictor:T,class_predictor:v},box_predictor_2:{box_encoding_predictor:M,class_predictor:B},box_predictor_3:{box_encoding_predictor:z,class_predictor:U},box_predictor_4:{box_encoding_predictor:$,class_predictor:rt},box_predictor_5:{box_encoding_predictor:ot,class_predictor:nt}}}return{extractMobilenetV1Params:i,extractPredictionLayerParams:c}}function Yr(o){let t=[],{extractWeights:e,getRemainingWeights:r}=L(o),{extractMobilenetV1Params:a,extractPredictionLayerParams:s}=zo(e,t),i=a(),c=s(),p={extra_dim:n.tensor3d(e(5118*4),[1,5118,4])};if(t.push({paramPath:"output_layer/extra_dim"}),r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{params:{mobilenetv1:i,prediction_layer:c,output_layer:p},paramMappings:t}}function Yo(o,t){let e=W(o,t);function r(p,u,f){let l=e(`${p}/Conv2d_${u}_pointwise/weights`,4,`${f}/filters`),d=e(`${p}/Conv2d_${u}_pointwise/convolution_bn_offset`,1,`${f}/batch_norm_offset`);return{filters:l,batch_norm_offset:d}}function a(p){let u=`mobilenetv1/conv_${p}`,f=`MobilenetV1/Conv2d_${p}_depthwise`,l=`${u}/depthwise_conv`,d=`${u}/pointwise_conv`,g=e(`${f}/depthwise_weights`,4,`${l}/filters`),_=e(`${f}/BatchNorm/gamma`,1,`${l}/batch_norm_scale`),h=e(`${f}/BatchNorm/beta`,1,`${l}/batch_norm_offset`),x=e(`${f}/BatchNorm/moving_mean`,1,`${l}/batch_norm_mean`),T=e(`${f}/BatchNorm/moving_variance`,1,`${l}/batch_norm_variance`);return{depthwise_conv:{filters:g,batch_norm_scale:_,batch_norm_offset:h,batch_norm_mean:x,batch_norm_variance:T},pointwise_conv:r("MobilenetV1",p,d)}}function s(){return{conv_0:r("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:a(1),conv_2:a(2),conv_3:a(3),conv_4:a(4),conv_5:a(5),conv_6:a(6),conv_7:a(7),conv_8:a(8),conv_9:a(9),conv_10:a(10),conv_11:a(11),conv_12:a(12),conv_13:a(13)}}function i(p,u){let f=e(`${p}/weights`,4,`${u}/filters`),l=e(`${p}/biases`,1,`${u}/bias`);return{filters:f,bias:l}}function c(p){let u=i(`Prediction/BoxPredictor_${p}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${p}/box_encoding_predictor`),f=i(`Prediction/BoxPredictor_${p}/ClassPredictor`,`prediction_layer/box_predictor_${p}/class_predictor`);return{box_encoding_predictor:u,class_predictor:f}}function m(){return{conv_0:r("Prediction",0,"prediction_layer/conv_0"),conv_1:r("Prediction",1,"prediction_layer/conv_1"),conv_2:r("Prediction",2,"prediction_layer/conv_2"),conv_3:r("Prediction",3,"prediction_layer/conv_3"),conv_4:r("Prediction",4,"prediction_layer/conv_4"),conv_5:r("Prediction",5,"prediction_layer/conv_5"),conv_6:r("Prediction",6,"prediction_layer/conv_6"),conv_7:r("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:c(0),box_predictor_1:c(1),box_predictor_2:c(2),box_predictor_3:c(3),box_predictor_4:c(4),box_predictor_5:c(5)}}return{extractMobilenetV1Params:s,extractPredictionLayerParams:m}}function Gr(o){let t=[],{extractMobilenetV1Params:e,extractPredictionLayerParams:r}=Yo(o,t),a=o["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Z(a))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${a}`);let s={mobilenetv1:e(),prediction_layer:r(),output_layer:{extra_dim:a}};return N(o,t),{params:s,paramMappings:t}}function H(o,t,e){return n.tidy(()=>{let r=n.conv2d(o,t.filters,e,"same");return r=n.add(r,t.batch_norm_offset),n.clipByValue(r,0,6)})}var Go=.0010000000474974513;function Vo(o,t,e){return n.tidy(()=>{let r=n.depthwiseConv2d(o,t.filters,e,"same");return r=n.batchNorm(r,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,Go),n.clipByValue(r,0,6)})}function jo(o){return[2,4,6,12].some(t=>t===o)?[2,2]:[1,1]}function Vr(o,t){return n.tidy(()=>{let e,r=H(o,t.conv_0,[2,2]);if([t.conv_1,t.conv_2,t.conv_3,t.conv_4,t.conv_5,t.conv_6,t.conv_7,t.conv_8,t.conv_9,t.conv_10,t.conv_11,t.conv_12,t.conv_13].forEach((s,i)=>{let c=i+1,m=jo(c);r=Vo(r,s.depthwise_conv,m),r=H(r,s.pointwise_conv,[1,1]),c===11&&(e=r)}),e===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:r,conv11:e}})}function Uo(o,t,e){let r=o.arraySync(),a=Math.min(r[t][0],r[t][2]),s=Math.min(r[t][1],r[t][3]),i=Math.max(r[t][0],r[t][2]),c=Math.max(r[t][1],r[t][3]),m=Math.min(r[e][0],r[e][2]),p=Math.min(r[e][1],r[e][3]),u=Math.max(r[e][0],r[e][2]),f=Math.max(r[e][1],r[e][3]),l=(i-a)*(c-s),d=(u-m)*(f-p);if(l<=0||d<=0)return 0;let g=Math.max(a,m),_=Math.max(s,p),h=Math.min(i,u),x=Math.min(c,f),T=Math.max(h-g,0)*Math.max(x-_,0);return T/(l+d-T)}function jr(o,t,e,r,a){let s=o.shape[0],i=Math.min(e,s),c=t.map((u,f)=>({score:u,boxIndex:f})).filter(u=>u.score>a).sort((u,f)=>f.score-u.score),m=u=>u<=r?1:0,p=[];return c.forEach(u=>{if(p.length>=i)return;let f=u.score;for(let l=p.length-1;l>=0;--l){let d=Uo(o,u.boxIndex,p[l]);if(d!==0&&(u.score*=m(d),u.score<=a))break}f===u.score&&p.push(u.boxIndex)}),p}function Xo(o){let t=n.unstack(n.transpose(o,[1,0])),e=[n.sub(t[2],t[0]),n.sub(t[3],t[1])],r=[n.add(t[0],n.div(e[0],2)),n.add(t[1],n.div(e[1],2))];return{sizes:e,centers:r}}function Jo(o,t){let{sizes:e,centers:r}=Xo(o),a=n.unstack(n.transpose(t,[1,0])),s=n.div(n.mul(n.exp(n.div(a[2],5)),e[0]),2),i=n.add(n.mul(n.div(a[0],10),e[0]),r[0]),c=n.div(n.mul(n.exp(n.div(a[3],5)),e[1]),2),m=n.add(n.mul(n.div(a[1],10),e[1]),r[1]);return n.transpose(n.stack([n.sub(i,s),n.sub(m,c),n.add(i,s),n.add(m,c)]),[1,0])}function Ur(o,t,e){return n.tidy(()=>{let r=o.shape[0],a=Jo(n.reshape(n.tile(e.extra_dim,[r,1,1]),[-1,4]),n.reshape(o,[-1,4]));a=n.reshape(a,[r,a.shape[0]/r,4]);let s=n.sigmoid(n.slice(t,[0,0,1],[-1,-1,-1])),i=n.slice(s,[0,0,0],[-1,-1,1]);i=n.reshape(i,[r,i.shape[1]]);let c=n.unstack(a),m=n.unstack(i);return{boxes:c,scores:m}})}function ht(o,t){return n.tidy(()=>{let e=o.shape[0],r=n.reshape(lt(o,t.box_encoding_predictor),[e,-1,1,4]),a=n.reshape(lt(o,t.class_predictor),[e,-1,3]);return{boxPredictionEncoding:r,classPrediction:a}})}function Xr(o,t,e){return n.tidy(()=>{let r=H(o,e.conv_0,[1,1]),a=H(r,e.conv_1,[2,2]),s=H(a,e.conv_2,[1,1]),i=H(s,e.conv_3,[2,2]),c=H(i,e.conv_4,[1,1]),m=H(c,e.conv_5,[2,2]),p=H(m,e.conv_6,[1,1]),u=H(p,e.conv_7,[2,2]),f=ht(t,e.box_predictor_0),l=ht(o,e.box_predictor_1),d=ht(a,e.box_predictor_2),g=ht(i,e.box_predictor_3),_=ht(m,e.box_predictor_4),h=ht(u,e.box_predictor_5),x=n.concat([f.boxPredictionEncoding,l.boxPredictionEncoding,d.boxPredictionEncoding,g.boxPredictionEncoding,_.boxPredictionEncoding,h.boxPredictionEncoding],1),T=n.concat([f.classPrediction,l.classPrediction,d.classPrediction,g.classPrediction,_.classPrediction,h.classPrediction],1);return{boxPredictions:x,classPredictions:T}})}var V=class{constructor({minConfidence:t,maxResults:e}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=t||.5,this._maxResults=e||100,typeof this._minConfidence!="number"||this._minConfidence<=0||this._minConfidence>=1)throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);if(typeof this._maxResults!="number")throw new Error(`${this._name} - expected maxResults to be a number`)}get minConfidence(){return this._minConfidence}get maxResults(){return this._maxResults}};var St=class extends I{constructor(){super("SsdMobilenetv1")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("SsdMobilenetv1 - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(512,!1),"float32"),a=n.sub(n.div(r,127.5),1),s=Vr(a,e.mobilenetv1),{boxPredictions:i,classPredictions:c}=Xr(s.out,s.conv11,e.prediction_layer);return Ur(i,c,e.output_layer)})}async forward(t){return this.forwardInput(await D(t))}async locateFaces(t,e={}){let{maxResults:r,minConfidence:a}=new V(e),s=await D(t),{boxes:i,scores:c}=this.forwardInput(s),m=i[0],p=c[0];for(let v=1;v{let[M,B]=[Math.max(0,x[v][0]),Math.min(1,x[v][2])].map($=>$*h),[z,U]=[Math.max(0,x[v][1]),Math.min(1,x[v][3])].map($=>$*_);return new E(u[v],new zt(z,M,U-z,B-M),{height:s.getInputHeight(0),width:s.getInputWidth(0)})});return m.dispose(),p.dispose(),T}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(t){return Gr(t)}extractParams(t){return Yr(t)}};function qo(o){let t=new St;return t.extractWeights(o),t}function ll(o){return qo(o)}var Zo=class extends St{};var Jr=.4,qr=[new b(.738768,.874946),new b(2.42204,2.65704),new b(4.30971,7.04493),new b(10.246,4.59428),new b(12.6868,11.8741)],Zr=[new b(1.603231,2.094468),new b(6.041143,7.080126),new b(2.882459,3.518061),new b(4.266906,5.178857),new b(9.041765,10.66308)],Kr=[117.001,114.697,97.404],Qr="tiny_yolov2_model",to="tiny_yolov2_separable_conv_model";var Pe=o=>typeof o=="number";function eo(o){if(!o)throw new Error(`invalid config: ${o}`);if(typeof o.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${o.withSeparableConvs}`);if(!Pe(o.iouThreshold)||o.iouThreshold<0||o.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${o.iouThreshold}`);if(!Array.isArray(o.classes)||!o.classes.length||!o.classes.every(t=>typeof t=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(o.classes)}`);if(!Array.isArray(o.anchors)||!o.anchors.length||!o.anchors.map(t=>t||{}).every(t=>Pe(t.x)&&Pe(t.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(o.anchors)}`);if(o.meanRgb&&(!Array.isArray(o.meanRgb)||o.meanRgb.length!==3||!o.meanRgb.every(Pe)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(o.meanRgb)}`)}function At(o){return n.tidy(()=>{let t=n.mul(o,n.scalar(.10000000149011612));return n.add(n.relu(n.sub(o,t)),t)})}function Q(o,t){return n.tidy(()=>{let e=n.pad(o,[[0,0],[1,1],[1,1],[0,0]]);return e=n.conv2d(e,t.conv.filters,[1,1],"valid"),e=n.sub(e,t.bn.sub),e=n.mul(e,t.bn.truediv),e=n.add(e,t.conv.bias),At(e)})}function tt(o,t){return n.tidy(()=>{let e=n.pad(o,[[0,0],[1,1],[1,1],[0,0]]);return e=n.separableConv2d(e,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),e=n.add(e,t.bias),At(e)})}function Ko(o,t){let e=Ct(o,t);function r(i,c){let m=n.tensor1d(o(i)),p=n.tensor1d(o(i));return t.push({paramPath:`${c}/sub`},{paramPath:`${c}/truediv`}),{sub:m,truediv:p}}function a(i,c,m){let p=e(i,c,3,`${m}/conv`),u=r(c,`${m}/bn`);return{conv:p,bn:u}}let s=It(o,t);return{extractConvParams:e,extractConvWithBatchNormParams:a,extractSeparableConvParams:s}}function ro(o,t,e,r){let{extractWeights:a,getRemainingWeights:s}=L(o),i=[],{extractConvParams:c,extractConvWithBatchNormParams:m,extractSeparableConvParams:p}=Ko(a,i),u;if(t.withSeparableConvs){let[f,l,d,g,_,h,x,T,v]=r,M=t.isFirstLayerConv2d?c(f,l,3,"conv0"):p(f,l,"conv0"),B=p(l,d,"conv1"),z=p(d,g,"conv2"),U=p(g,_,"conv3"),$=p(_,h,"conv4"),rt=p(h,x,"conv5"),ot=T?p(x,T,"conv6"):void 0,nt=v?p(T,v,"conv7"):void 0,Pt=c(v||T||x,5*e,1,"conv8");u={conv0:M,conv1:B,conv2:z,conv3:U,conv4:$,conv5:rt,conv6:ot,conv7:nt,conv8:Pt}}else{let[f,l,d,g,_,h,x,T,v]=r,M=m(f,l,"conv0"),B=m(l,d,"conv1"),z=m(d,g,"conv2"),U=m(g,_,"conv3"),$=m(_,h,"conv4"),rt=m(h,x,"conv5"),ot=m(x,T,"conv6"),nt=m(T,v,"conv7"),Pt=c(v,5*e,1,"conv8");u={conv0:M,conv1:B,conv2:z,conv3:U,conv4:$,conv5:rt,conv6:ot,conv7:nt,conv8:Pt}}if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{params:u,paramMappings:i}}function Qo(o,t){let e=W(o,t);function r(c){let m=e(`${c}/sub`,1),p=e(`${c}/truediv`,1);return{sub:m,truediv:p}}function a(c){let m=e(`${c}/filters`,4),p=e(`${c}/bias`,1);return{filters:m,bias:p}}function s(c){let m=a(`${c}/conv`),p=r(`${c}/bn`);return{conv:m,bn:p}}let i=Nt(e);return{extractConvParams:a,extractConvWithBatchNormParams:s,extractSeparableConvParams:i}}function oo(o,t){let e=[],{extractConvParams:r,extractConvWithBatchNormParams:a,extractSeparableConvParams:s}=Qo(o,e),i;if(t.withSeparableConvs){let c=t.filterSizes&&t.filterSizes.length||9;i={conv0:t.isFirstLayerConv2d?r("conv0"):s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:c>7?s("conv6"):void 0,conv7:c>8?s("conv7"):void 0,conv8:r("conv8")}}else i={conv0:a("conv0"),conv1:a("conv1"),conv2:a("conv2"),conv3:a("conv3"),conv4:a("conv4"),conv5:a("conv5"),conv6:a("conv6"),conv7:a("conv7"),conv8:r("conv8")};return N(o,e),{params:i,paramMappings:e}}var et=class{constructor({inputSize:t,scoreThreshold:e}={}){this._name="TinyYolov2Options";if(this._inputSize=t||416,this._scoreThreshold=e||.5,typeof this._inputSize!="number"||this._inputSize%32!==0)throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);if(typeof this._scoreThreshold!="number"||this._scoreThreshold<=0||this._scoreThreshold>=1)throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`)}get inputSize(){return this._inputSize}get scoreThreshold(){return this._scoreThreshold}};var Ke=class extends I{constructor(t){super("TinyYolov2");eo(t),this._config=t}get config(){return this._config}get withClassScores(){return this.config.withClassScores||this.config.classes.length>1}get boxEncodingSize(){return 5+(this.withClassScores?this.config.classes.length:0)}runTinyYolov2(t,e){let r=Q(t,e.conv0);return r=n.maxPool(r,[2,2],[2,2],"same"),r=Q(r,e.conv1),r=n.maxPool(r,[2,2],[2,2],"same"),r=Q(r,e.conv2),r=n.maxPool(r,[2,2],[2,2],"same"),r=Q(r,e.conv3),r=n.maxPool(r,[2,2],[2,2],"same"),r=Q(r,e.conv4),r=n.maxPool(r,[2,2],[2,2],"same"),r=Q(r,e.conv5),r=n.maxPool(r,[2,2],[1,1],"same"),r=Q(r,e.conv6),r=Q(r,e.conv7),lt(r,e.conv8,"valid",!1)}runMobilenet(t,e){let r=this.config.isFirstLayerConv2d?At(lt(t,e.conv0,"valid",!1)):tt(t,e.conv0);return r=n.maxPool(r,[2,2],[2,2],"same"),r=tt(r,e.conv1),r=n.maxPool(r,[2,2],[2,2],"same"),r=tt(r,e.conv2),r=n.maxPool(r,[2,2],[2,2],"same"),r=tt(r,e.conv3),r=n.maxPool(r,[2,2],[2,2],"same"),r=tt(r,e.conv4),r=n.maxPool(r,[2,2],[2,2],"same"),r=tt(r,e.conv5),r=n.maxPool(r,[2,2],[1,1],"same"),r=e.conv6?tt(r,e.conv6):r,r=e.conv7?tt(r,e.conv7):r,lt(r,e.conv8,"valid",!1)}forwardInput(t,e){let{params:r}=this;if(!r)throw new Error("TinyYolov2 - load model before inference");return n.tidy(()=>{let a=n.cast(t.toBatchTensor(e,!1),"float32");return a=this.config.meanRgb?J(a,this.config.meanRgb):a,a=a.div(255),this.config.withSeparableConvs?this.runMobilenet(a,r):this.runTinyYolov2(a,r)})}async forward(t,e){return this.forwardInput(await D(t),e)}async detect(t,e={}){let{inputSize:r,scoreThreshold:a}=new et(e),s=await D(t),i=await this.forwardInput(s,r),c=n.tidy(()=>n.unstack(i)[0].expandDims()),m={width:s.getInputWidth(0),height:s.getInputHeight(0)},p=await this.extractBoxes(c,s.getReshapedInputDimensions(0),a);i.dispose(),c.dispose();let u=p.map(h=>h.box),f=p.map(h=>h.score),l=p.map(h=>h.classScore),d=p.map(h=>this.config.classes[h.label]);return hr(u.map(h=>h.rescale(r)),f,this.config.iouThreshold,!0).map(h=>new ft(f[h],l[h],d[h],u[h],m))}getDefaultModelName(){return""}extractParamsFromWeightMap(t){return oo(t,this.config)}extractParams(t){let e=this.config.filterSizes||Ke.DEFAULT_FILTER_SIZES,r=e?e.length:void 0;if(r!==7&&r!==8&&r!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${r} filterSizes in config`);return ro(t,this.config,this.boxEncodingSize,e)}async extractBoxes(t,e,r){let{width:a,height:s}=e,i=Math.max(a,s),c=i/a,m=i/s,p=t.shape[1],u=this.config.anchors.length,[f,l,d]=n.tidy(()=>{let x=t.reshape([p,p,u,this.boxEncodingSize]),T=x.slice([0,0,0,0],[p,p,u,4]),v=x.slice([0,0,0,4],[p,p,u,1]),M=this.withClassScores?n.softmax(x.slice([0,0,0,5],[p,p,u,this.config.classes.length]),3):n.scalar(0);return[T,v,M]}),g=[],_=await l.array(),h=await f.array();for(let x=0;xr){let B=(T+ie(h[x][T][v][0]))/p*c,z=(x+ie(h[x][T][v][1]))/p*m,U=Math.exp(h[x][T][v][2])*this.config.anchors[v].x/p*c,$=Math.exp(h[x][T][v][3])*this.config.anchors[v].y/p*m,rt=B-U/2,ot=z-$/2,nt={row:x,col:T,anchor:v},{classScore:Pt,label:pr}=this.withClassScores?await this.extractPredictedClass(d,nt):{classScore:1,label:0};g.push({box:new Ht(rt,ot,rt+U,ot+$),score:M,classScore:M*Pt,label:pr,...nt})}}return f.dispose(),l.dispose(),d.dispose(),g}async extractPredictedClass(t,e){let{row:r,col:a,anchor:s}=e,i=await t.array();return Array(this.config.classes.length).fill(0).map((c,m)=>i[r][a][s][m]).map((c,m)=>({classScore:c,label:m})).reduce((c,m)=>c.classScore>m.classScore?c:m)}},kt=Ke;kt.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var oe=class extends kt{constructor(t=!0){let e={withSeparableConvs:t,iouThreshold:Jr,classes:["face"],...t?{anchors:Zr,meanRgb:Kr}:{anchors:qr,withClassScores:!0}};super(e)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(t,e){return(await this.detect(t,e)).map(a=>new E(a.score,a.relativeBox,{width:a.imageWidth,height:a.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?to:Qr}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};function nd(o,t=!0){let e=new oe(t);return e.extractWeights(o),e}var Qe=class extends et{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}};var j=class{async then(t){return t(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function bt(o,t,e,r,a=({alignedRect:s})=>s){let s=o.map(m=>Lt(m)?a(m):m.detection),i=r||(t instanceof n.Tensor?await Ut(t,s):await jt(t,s)),c=await e(i);return i.forEach(m=>m instanceof n.Tensor&&m.dispose()),c}async function Wt(o,t,e,r,a){return bt([o],t,async s=>e(s[0]),r,a)}var no=.4,ao=[new b(1.603231,2.094468),new b(6.041143,7.080126),new b(2.882459,3.518061),new b(4.266906,5.178857),new b(9.041765,10.66308)],so=[117.001,114.697,97.404];var ne=class extends kt{constructor(){let t={withSeparableConvs:!0,iouThreshold:no,classes:["face"],anchors:ao,meanRgb:so,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(t)}get anchors(){return this.config.anchors}async locateFaces(t,e){return(await this.detect(t,e)).map(a=>new E(a.score,a.relativeBox,{width:a.imageWidth,height:a.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};var w={ssdMobilenetv1:new St,tinyFaceDetector:new ne,tinyYolov2:new oe,faceLandmark68Net:new te,faceLandmark68TinyNet:new je,faceRecognitionNet:new re,faceExpressionNet:new Be,ageGenderNet:new Ge},tn=(o,t)=>w.ssdMobilenetv1.locateFaces(o,t),Ad=(o,t)=>w.tinyFaceDetector.locateFaces(o,t),kd=(o,t)=>w.tinyYolov2.locateFaces(o,t),en=o=>w.faceLandmark68Net.detectLandmarks(o),Wd=o=>w.faceLandmark68TinyNet.detectLandmarks(o),Bd=o=>w.faceRecognitionNet.computeFaceDescriptor(o),Rd=o=>w.faceExpressionNet.predictExpressions(o),$d=o=>w.ageGenderNet.predictAgeAndGender(o),rn=o=>w.ssdMobilenetv1.load(o),Od=o=>w.tinyFaceDetector.load(o),Hd=o=>w.tinyYolov2.load(o),zd=o=>w.faceLandmark68Net.load(o),Yd=o=>w.faceLandmark68TinyNet.load(o),Gd=o=>w.faceRecognitionNet.load(o),Vd=o=>w.faceExpressionNet.load(o),jd=o=>w.ageGenderNet.load(o),Ud=rn,Xd=tn,Jd=en;var tr=class extends j{constructor(t,e,r){super();this.parentTask=t;this.input=e;this.extractedFaces=r}},Bt=class extends tr{async run(){let t=await this.parentTask,e=await bt(t,this.input,async r=>Promise.all(r.map(a=>w.faceExpressionNet.predictExpressions(a))),this.extractedFaces);return t.map((r,a)=>Re(r,e[a]))}withAgeAndGender(){return new $t(this,this.input)}},Rt=class extends tr{async run(){let t=await this.parentTask;if(!t)return;let e=await Wt(t,this.input,r=>w.faceExpressionNet.predictExpressions(r),this.extractedFaces);return Re(t,e)}withAgeAndGender(){return new Ot(this,this.input)}},gt=class extends Bt{withAgeAndGender(){return new vt(this,this.input)}withFaceDescriptors(){return new Tt(this,this.input)}},xt=class extends Rt{withAgeAndGender(){return new yt(this,this.input)}withFaceDescriptor(){return new _t(this,this.input)}};var er=class extends j{constructor(t,e,r){super();this.parentTask=t;this.input=e;this.extractedFaces=r}},$t=class extends er{async run(){let t=await this.parentTask,e=await bt(t,this.input,async r=>Promise.all(r.map(a=>w.ageGenderNet.predictAgeAndGender(a))),this.extractedFaces);return t.map((r,a)=>{let{age:s,gender:i,genderProbability:c}=e[a];return qe(Ze(r,i,c),s)})}withFaceExpressions(){return new Bt(this,this.input)}},Ot=class extends er{async run(){let t=await this.parentTask;if(!t)return;let{age:e,gender:r,genderProbability:a}=await Wt(t,this.input,s=>w.ageGenderNet.predictAgeAndGender(s),this.extractedFaces);return qe(Ze(t,r,a),e)}withFaceExpressions(){return new Rt(this,this.input)}},vt=class extends $t{withFaceExpressions(){return new gt(this,this.input)}withFaceDescriptors(){return new Tt(this,this.input)}},yt=class extends Ot{withFaceExpressions(){return new xt(this,this.input)}withFaceDescriptor(){return new _t(this,this.input)}};var rr=class extends j{constructor(t,e){super();this.parentTask=t;this.input=e}},Tt=class extends rr{async run(){let t=await this.parentTask;return(await bt(t,this.input,r=>Promise.all(r.map(a=>w.faceRecognitionNet.computeFaceDescriptor(a))),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}))).map((r,a)=>Je(t[a],r))}withFaceExpressions(){return new gt(this,this.input)}withAgeAndGender(){return new vt(this,this.input)}},_t=class extends rr{async run(){let t=await this.parentTask;if(!t)return;let e=await Wt(t,this.input,r=>w.faceRecognitionNet.computeFaceDescriptor(r),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}));return Je(t,e)}withFaceExpressions(){return new xt(this,this.input)}withAgeAndGender(){return new yt(this,this.input)}};var or=class extends j{constructor(t,e,r){super();this.parentTask=t;this.input=e;this.useTinyLandmarkNet=r}get landmarkNet(){return this.useTinyLandmarkNet?w.faceLandmark68TinyNet:w.faceLandmark68Net}},nr=class extends or{async run(){let t=await this.parentTask,e=t.map(s=>s.detection),r=this.input instanceof n.Tensor?await Ut(this.input,e):await jt(this.input,e),a=await Promise.all(r.map(s=>this.landmarkNet.detectLandmarks(s)));return r.forEach(s=>s instanceof n.Tensor&&s.dispose()),t.map((s,i)=>Kt(s,a[i]))}withFaceExpressions(){return new gt(this,this.input)}withAgeAndGender(){return new vt(this,this.input)}withFaceDescriptors(){return new Tt(this,this.input)}},ar=class extends or{async run(){let t=await this.parentTask;if(!t)return;let{detection:e}=t,r=this.input instanceof n.Tensor?await Ut(this.input,[e]):await jt(this.input,[e]),a=await this.landmarkNet.detectLandmarks(r[0]);return r.forEach(s=>s instanceof n.Tensor&&s.dispose()),Kt(t,a)}withFaceExpressions(){return new xt(this,this.input)}withAgeAndGender(){return new yt(this,this.input)}withFaceDescriptor(){return new _t(this,this.input)}};var sr=class extends j{constructor(t,e=new V){super();this.input=t;this.options=e}},we=class extends sr{async run(){let{input:t,options:e}=this,r;if(e instanceof Qe)r=w.tinyFaceDetector.locateFaces(t,e);else if(e instanceof V)r=w.ssdMobilenetv1.locateFaces(t,e);else if(e instanceof et)r=w.tinyYolov2.locateFaces(t,e);else throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | TinyYolov2Options");return r}runAndExtendWithFaceDetections(){return new Promise((t,e)=>{this.run().then(r=>t(r.map(a=>Ft({},a)))).catch(r=>e(r))})}withFaceLandmarks(t=!1){return new nr(this.runAndExtendWithFaceDetections(),this.input,t)}withFaceExpressions(){return new Bt(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new $t(this.runAndExtendWithFaceDetections(),this.input)}},ir=class extends sr{async run(){let t=await new we(this.input,this.options),e=t[0];return t.forEach(r=>{r.score>e.score&&(e=r)}),e}runAndExtendWithFaceDetection(){return new Promise(async t=>{let e=await this.run();t(e?Ft({},e):void 0)})}withFaceLandmarks(t=!1){return new ar(this.runAndExtendWithFaceDetection(),this.input,t)}withFaceExpressions(){return new Rt(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Ot(this.runAndExtendWithFaceDetection(),this.input)}};function jh(o,t=new V){return new ir(o,t)}function cr(o,t=new V){return new we(o,t)}async function on(o,t){return cr(o,new V(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function Kh(o,t={}){return cr(o,new et(t)).withFaceLandmarks().withFaceDescriptors()}var Qh=on;function io(o,t){if(o.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");let e=Array.from(o),r=Array.from(t);return Math.sqrt(e.map((a,s)=>a-r[s]).reduce((a,s)=>a+s**2,0))}var mr=class{constructor(t,e=.6){this._distanceThreshold=e;let r=Array.isArray(t)?t:[t];if(!r.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let a=1,s=()=>`person ${a++}`;this._labeledDescriptors=r.map(i=>{if(i instanceof at)return i;if(i instanceof Float32Array)return new at(s(),[i]);if(i.descriptor&&i.descriptor instanceof Float32Array)return new at(s(),[i.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(t,e){return e.map(r=>io(r,t)).reduce((r,a)=>r+a,0)/(e.length||1)}matchDescriptor(t){return this.labeledDescriptors.map(({descriptors:e,label:r})=>new ce(r,this.computeMeanDistance(t,e))).reduce((e,r)=>e.distancet.toJSON())}}static fromJSON(t){let e=t.labeledDescriptors.map(r=>at.fromJSON(r));return new mr(e,t.distanceThreshold)}};function gb(o){let t=new ne;return t.extractWeights(o),t}function nn(o,t){let{width:e,height:r}=new S(t.width,t.height);if(e<=0||r<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:e,height:r})}`);if(Array.isArray(o))return o.map(a=>nn(a,{width:e,height:r}));if(Lt(o)){let a=o.detection.forSize(e,r),s=o.unshiftedLandmarks.forSize(a.box.width,a.box.height);return Kt(Ft(o,a),s)}return K(o)?Ft(o,o.detection.forSize(e,r)):o instanceof O||o instanceof E?o.forSize(e,r):o}var Mb=Nr;export{Ge as AgeGenderNet,Ht as BoundingBox,F as Box,j as ComposableTask,Tt as ComputeAllFaceDescriptorsTask,rr as ComputeFaceDescriptorsTaskBase,_t as ComputeSingleFaceDescriptorTask,nr as DetectAllFaceLandmarksTask,we as DetectAllFacesTask,or as DetectFaceLandmarksTaskBase,sr as DetectFacesTaskBase,ar as DetectSingleFaceLandmarksTask,ir as DetectSingleFaceTask,S as Dimensions,Mr as FACE_EXPRESSION_LABELS,E as FaceDetection,Zo as FaceDetectionNet,Be as FaceExpressionNet,dt as FaceExpressions,te as FaceLandmark68Net,je as FaceLandmark68TinyNet,$o as FaceLandmarkNet,O as FaceLandmarks,Do as FaceLandmarks5,Yt as FaceLandmarks68,ce as FaceMatch,mr as FaceMatcher,re as FaceRecognitionNet,Ye as Gender,me as LabeledBox,at as LabeledFaceDescriptors,it as NetInput,I as NeuralNetwork,ft as ObjectDetection,b as Point,Eo as PredictedBox,zt as Rect,St as SsdMobilenetv1,V as SsdMobilenetv1Options,ne as TinyFaceDetector,Qe as TinyFaceDetectorOptions,oe as TinyYolov2,et as TinyYolov2Options,Qh as allFaces,on as allFacesSsdMobilenetv1,Kh as allFacesTinyYolov2,gr as awaitMediaLoaded,xr as bufferToImage,Bd as computeFaceDescriptor,Mt as createCanvas,le as createCanvasFromMedia,ll as createFaceDetectionNet,lf as createFaceRecognitionNet,qo as createSsdMobilenetv1,gb as createTinyFaceDetector,nd as createTinyYolov2,cr as detectAllFaces,en as detectFaceLandmarks,Wd as detectFaceLandmarksTiny,Jd as detectLandmarks,jh as detectSingleFace,Ir as draw,P as env,io as euclideanDistance,qe as extendWithAge,Je as extendWithFaceDescriptor,Ft as extendWithFaceDetection,Re as extendWithFaceExpressions,Kt as extendWithFaceLandmarks,Ze as extendWithGender,Ut as extractFaceTensors,jt as extractFaces,_i as fetchImage,Tr as fetchJson,Ei as fetchNetWeights,ct as fetchOrThrow,Si as fetchVideo,k as getContext2dOrThrow,Et as getMediaDimensions,vr as imageTensorToCanvas,yr as imageToSquare,zn as inverseSigmoid,lr as iou,We as isMediaElement,fe as isMediaLoaded,gf as isWithAge,K as isWithFaceDetection,Cr as isWithFaceExpressions,Lt as isWithFaceLandmarks,Tf as isWithGender,jd as loadAgeGenderModel,Ud as loadFaceDetectionModel,Vd as loadFaceExpressionModel,zd as loadFaceLandmarkModel,Yd as loadFaceLandmarkTinyModel,Gd as loadFaceRecognitionModel,rn as loadSsdMobilenetv1Model,Od as loadTinyFaceDetectorModel,Hd as loadTinyYolov2Model,Pr as loadWeightMap,Xd as locateFaces,Oi as matchDimensions,dr as minBbox,w as nets,hr as nonMaxSuppression,J as normalize,br as padToSquare,$d as predictAgeAndGender,Rd as recognizeFaceExpressions,nn as resizeResults,Dt as resolveInput,On as shuffleArray,ie as sigmoid,tn as ssdMobilenetv1,n as tf,Ad as tinyFaceDetector,kd as tinyYolov2,D as toNetInput,fr as utils,eo as validateConfig,Mb as version}; +var fr=Object.defineProperty;var mo=Object.getOwnPropertyDescriptor;var po=Object.getOwnPropertyNames;var uo=Object.prototype.hasOwnProperty;var fo=(o=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(o,{get:(t,e)=>(typeof require!="undefined"?require:t)[e]}):o)(function(o){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+o+'" is not supported')});var Fe=(o,t)=>{for(var e in t)fr(o,e,{get:t[e],enumerable:!0})},ur=(o,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of po(t))!uo.call(o,a)&&a!==e&&fr(o,a,{get:()=>t[a],enumerable:!(r=mo(t,a))||r.enumerable});return o},y=(o,t,e)=>(ur(o,t,"default"),e&&ur(e,t,"default"));var n={};Fe(n,{version:()=>_o});y(n,fn);y(n,ln);y(n,dn);import*as fn from"@tensorflow/tfjs/dist/index.js";import*as ln from"@tensorflow/tfjs-backend-webgl/dist/index.js";import*as dn from"@tensorflow/tfjs-backend-wasm/dist/index.js";var lo="3.15.0",ho="3.15.0",bo="3.15.0",go="3.15.0",xo="3.15.0",vo="3.15.0",yo="3.15.0",To="3.15.0",_o={tfjs:lo,"tfjs-core":ho,"tfjs-data":bo,"tfjs-layers":go,"tfjs-converter":xo,"tfjs-backend-cpu":vo,"tfjs-backend-webgl":yo,"tfjs-backend-wasm":To};var Nr={};Fe(Nr,{AnchorPosition:()=>Ae,DrawBox:()=>ue,DrawBoxOptions:()=>ke,DrawFaceLandmarks:()=>Oe,DrawFaceLandmarksOptions:()=>$e,DrawTextField:()=>st,DrawTextFieldOptions:()=>Vt,drawContour:()=>q,drawDetections:()=>No,drawFaceExpressions:()=>Lo,drawFaceLandmarks:()=>Ao});function q(o,t,e=!1){if(o.beginPath(),t.slice(1).forEach(({x:r,y:a},s)=>{let i=t[s];o.moveTo(i.x,i.y),o.lineTo(r,a)}),e){let r=t[t.length-1],a=t[0];if(!r||!a)return;o.moveTo(r.x,r.y),o.lineTo(a.x,a.y)}o.stroke()}var lr={};Fe(lr,{computeReshapedDimensions:()=>Me,getCenterPoint:()=>ut,isDimensions:()=>se,isEven:()=>ae,isFloat:()=>Ee,isTensor:()=>mt,isTensor1D:()=>Po,isTensor2D:()=>De,isTensor3D:()=>Z,isTensor4D:()=>R,isValidNumber:()=>Y,isValidProbablitiy:()=>wt,range:()=>X,round:()=>pt});var S=class{constructor(t,e){if(!Y(t)||!Y(e))throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({width:t,height:e})}`);this._width=t,this._height=e}get width(){return this._width}get height(){return this._height}reverse(){return new S(1/this.width,1/this.height)}};function mt(o,t){return o instanceof n.Tensor&&o.shape.length===t}function Po(o){return mt(o,1)}function De(o){return mt(o,2)}function Z(o){return mt(o,3)}function R(o){return mt(o,4)}function Ee(o){return o%1!==0}function ae(o){return o%2===0}function pt(o,t=2){let e=10**t;return Math.floor(o*e)/e}function se(o){return o&&o.width&&o.height}function Me({width:o,height:t},e){let r=e/Math.max(t,o);return new S(Math.round(o*r),Math.round(t*r))}function ut(o){return o.reduce((t,e)=>t.add(e),new b(0,0)).div(new b(o.length,o.length))}function X(o,t,e){return Array(o).fill(0).map((r,a)=>t+a*e)}function Y(o){return!!o&&o!==1/0&&o!==-1/0&&!Number.isNaN(o)||o===0}function wt(o){return Y(o)&&o>=0&&o<=1}var b=class{constructor(t,e){this._x=t,this._y=e}get x(){return this._x}get y(){return this._y}add(t){return new b(this.x+t.x,this.y+t.y)}sub(t){return new b(this.x-t.x,this.y-t.y)}mul(t){return new b(this.x*t.x,this.y*t.y)}div(t){return new b(this.x/t.x,this.y/t.y)}abs(){return new b(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new b(Math.floor(this.x),Math.floor(this.y))}};var F=class{static isRect(t){return!!t&&[t.x,t.y,t.width,t.height].every(Y)}static assertIsValidBox(t,e,r=!1){if(!F.isRect(t))throw new Error(`${e} - invalid box: ${JSON.stringify(t)}, expected object with properties x, y, width, height`);if(!r&&(t.width<0||t.height<0))throw new Error(`${e} - width (${t.width}) and height (${t.height}) must be positive numbers`)}constructor(t,e=!0){let r=t||{},a=[r.left,r.top,r.right,r.bottom].every(Y),s=[r.x,r.y,r.width,r.height].every(Y);if(!s&&!a)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(r)}`);let[i,c,m,p]=s?[r.x,r.y,r.width,r.height]:[r.left,r.top,r.right-r.left,r.bottom-r.top];F.assertIsValidBox({x:i,y:c,width:m,height:p},"Box.constructor",e),this._x=i,this._y=c,this._width=m,this._height=p}get x(){return this._x}get y(){return this._y}get width(){return this._width}get height(){return this._height}get left(){return this.x}get top(){return this.y}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new b(this.left,this.top)}get topRight(){return new b(this.right,this.top)}get bottomLeft(){return new b(this.left,this.bottom)}get bottomRight(){return new b(this.right,this.bottom)}round(){let[t,e,r,a]=[this.x,this.y,this.width,this.height].map(s=>Math.round(s));return new F({x:t,y:e,width:r,height:a})}floor(){let[t,e,r,a]=[this.x,this.y,this.width,this.height].map(s=>Math.floor(s));return new F({x:t,y:e,width:r,height:a})}toSquare(){let{x:t,y:e,width:r,height:a}=this,s=Math.abs(r-a);return re&&(c=-f+e+r,f=e),l>t&&(m=-l+t+a,l=t),p<1&&(m=2-p,p=1),u<1&&(m=2-u,u=1),{dy:i,edy:m,dx:s,edx:c,y:u,ey:l,x:p,ex:f,w:r,h:a}}calibrate(t){return new F({left:this.left+t.left*this.width,top:this.top+t.top*this.height,right:this.right+t.right*this.width,bottom:this.bottom+t.bottom*this.height}).toSquare().round()}};var Ht=class extends F{constructor(t,e,r,a,s=!1){super({left:t,top:e,right:r,bottom:a},s)}};var ft=class{constructor(t,e,r,a,s){this._imageDims=new S(s.width,s.height),this._score=t,this._classScore=e,this._className=r,this._box=new F(a).rescale(this._imageDims)}get score(){return this._score}get classScore(){return this._classScore}get className(){return this._className}get box(){return this._box}get imageDims(){return this._imageDims}get imageWidth(){return this.imageDims.width}get imageHeight(){return this.imageDims.height}get relativeBox(){return new F(this._box).rescale(this.imageDims.reverse())}forSize(t,e){return new ft(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:e})}};var E=class extends ft{constructor(t,e,r){super(t,t,"",e,r)}forSize(t,e){let{score:r,relativeBox:a,imageDims:s}=super.forSize(t,e);return new E(r,a,s)}};function dr(o,t,e=!0){let r=Math.max(0,Math.min(o.right,t.right)-Math.max(o.left,t.left)),a=Math.max(0,Math.min(o.bottom,t.bottom)-Math.max(o.top,t.top)),s=r*a;return e?s/(o.area+t.area-s):s/Math.min(o.area,t.area)}function hr(o){let t=o.map(c=>c.x),e=o.map(c=>c.y),r=t.reduce((c,m)=>mmcc({score:i,boxIndex:c})).sort((i,c)=>i.score-c.score).map(i=>i.boxIndex),s=[];for(;a.length>0;){let i=a.pop();s.push(i);let c=a,m=[];for(let p=0;pm[u]<=e)}return s}function J(o,t){return n.tidy(()=>{let[e,r,a]=t,s=n.fill([...o.shape.slice(0,3),1],e,"float32"),i=n.fill([...o.shape.slice(0,3),1],r,"float32"),c=n.fill([...o.shape.slice(0,3),1],a,"float32"),m=n.concat([s,i,c],3);return n.sub(o,m)})}function gr(o,t=!1){return n.tidy(()=>{let[e,r]=o.shape.slice(1);if(e===r)return o;let a=Math.abs(e-r),s=Math.round(a*(t?.5:1)),i=e>r?2:1,c=l=>{let d=o.shape.slice();return d[i]=l,n.fill(d,0,"float32")},m=c(s),p=a-m.shape[i],f=[t&&p?c(p):null,o,m].filter(l=>!!l).map(l=>n.cast(l,"float32"));return n.concat(f,i)})}function Hn(o){let t=o.slice();for(let e=t.length-1;e>0;e--){let r=Math.floor(Math.random()*(e+1)),a=t[e];t[e]=t[r],t[r]=a}return t}function ie(o){return 1/(1+Math.exp(-o))}function Yn(o){return Math.log(o/(1-o))}var zt=class extends F{constructor(t,e,r,a,s=!1){super({x:t,y:e,width:r,height:a},s)}};var wo=.5,Fo=.43,Do=.45,O=class{constructor(t,e,r=new b(0,0)){let{width:a,height:s}=e;this._imgDims=new S(a,s),this._shift=r,this._positions=t.map(i=>i.mul(new b(a,s)).add(r))}get shift(){return new b(this._shift.x,this._shift.y)}get imageWidth(){return this._imgDims.width}get imageHeight(){return this._imgDims.height}get positions(){return this._positions}get relativePositions(){return this._positions.map(t=>t.sub(this._shift).div(new b(this.imageWidth,this.imageHeight)))}forSize(t,e){return new this.constructor(this.relativePositions,{width:t,height:e})}shiftBy(t,e){return new this.constructor(this.relativePositions,this._imgDims,new b(t,e))}shiftByPoint(t){return this.shiftBy(t.x,t.y)}align(t,e={}){if(t){let s=t instanceof E?t.box.floor():new F(t);return this.shiftBy(s.x,s.y).align(null,e)}let{useDlibAlignment:r,minBoxPadding:a}={useDlibAlignment:!1,minBoxPadding:.2,...e};return r?this.alignDlib():this.alignMinBbox(a)}alignDlib(){let t=this.getRefPointsForAlignment(),[e,r,a]=t,s=f=>a.sub(f).magnitude(),i=(s(e)+s(r))/2,c=Math.floor(i/Do),m=ut(t),p=Math.floor(Math.max(0,m.x-wo*c)),u=Math.floor(Math.max(0,m.y-Fo*c));return new zt(p,u,Math.min(c,this.imageWidth+p),Math.min(c,this.imageHeight+u))}alignMinBbox(t){let e=hr(this.positions);return e.pad(e.width*t,e.height*t)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}};var Eo=class extends O{getRefPointsForAlignment(){let t=this.positions;return[t[0],t[1],ut([t[3],t[4]])]}};var Yt=class extends O{getJawOutline(){return this.positions.slice(0,17)}getLeftEyeBrow(){return this.positions.slice(17,22)}getRightEyeBrow(){return this.positions.slice(22,27)}getNose(){return this.positions.slice(27,36)}getLeftEye(){return this.positions.slice(36,42)}getRightEye(){return this.positions.slice(42,48)}getMouth(){return this.positions.slice(48,68)}getRefPointsForAlignment(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(ut)}};var ce=class{constructor(t,e){this._label=t,this._distance=e}get label(){return this._label}get distance(){return this._distance}toString(t=!0){return`${this.label}${t?` (${pt(this.distance)})`:""}`}};var me=class extends F{static assertIsValidLabeledBox(t,e){if(F.assertIsValidBox(t,e),!Y(t.label))throw new Error(`${e} - expected property label (${t.label}) to be a number`)}constructor(t,e){super(t);this._label=e}get label(){return this._label}};var at=class{constructor(t,e){if(typeof t!="string")throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(e)||e.some(r=>!(r instanceof Float32Array)))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=t,this._descriptors=e}get label(){return this._label}get descriptors(){return this._descriptors}toJSON(){return{label:this.label,descriptors:this.descriptors.map(t=>Array.from(t))}}static fromJSON(t){let e=t.descriptors.map(r=>new Float32Array(r));return new at(t.label,e)}};var Mo=class extends me{static assertIsValidPredictedBox(t,e){if(me.assertIsValidLabeledBox(t,e),!wt(t.score)||!wt(t.classScore))throw new Error(`${e} - expected properties score (${t.score}) and (${t.classScore}) to be a number between [0, 1]`)}constructor(t,e,r,a){super(t,e);this._score=r,this._classScore=a}get score(){return this._score}get classScore(){return this._classScore}};function K(o){return o.detection instanceof E}function Ft(o,t){return{...o,...{detection:t}}}function Ce(){let o=window.fetch;if(!o)throw new Error("fetch - missing fetch implementation for browser environment");return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D,Image:HTMLImageElement,ImageData,Video:HTMLVideoElement,createCanvasElement:()=>document.createElement("canvas"),createImageElement:()=>document.createElement("img"),createVideoElement:()=>document.createElement("video"),fetch:o,readFile:()=>{throw new Error("readFile - filesystem not available for browser environment")}}}function Gt(){return typeof global=="object"&&typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null}function pe(o){let t="";if(!o&&Gt())try{o=fo("fs")}catch(r){t=r.toString()}return{readFile:o?r=>new Promise((a,s)=>{o.readFile(r,(i,c)=>i?s(i):a(c))}):()=>{throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)}}}function Ie(){let o=global.Canvas||global.HTMLCanvasElement,t=global.Image||global.HTMLImageElement,e=global.Video||global.HTMLVideoElement,r=()=>{if(o)return new o;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},a=()=>{if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},s=()=>{if(e)return new e;throw new Error("createVideoElement - missing Video implementation for nodejs environment")},i=global.fetch,c=pe();return{Canvas:o||class{},CanvasRenderingContext2D:global.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:global.ImageData||class{},Video:global.HTMLVideoElement||class{},createCanvasElement:r,createImageElement:a,createVideoElement:s,fetch:i,...c}}function Ne(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}var C;function Co(){if(!C)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return C}function Le(o){C=o}function Se(){return Ne()?Le(Ce()):Gt()?Le(Ie()):null}function Io(o){if(C||Se(),!C)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");let{Canvas:t=C.Canvas,Image:e=C.Image}=o;C.Canvas=t,C.Image=e,C.createCanvasElement=o.createCanvasElement||(()=>new t),C.createImageElement=o.createImageElement||(()=>new e),C.ImageData=o.ImageData||C.ImageData,C.Video=o.Video||C.Video,C.fetch=o.fetch||C.fetch,C.readFile=o.readFile||C.readFile}var P={getEnv:Co,setEnv:Le,initialize:Se,createBrowserEnv:Ce,createFileSystem:pe,createNodejsEnv:Ie,monkeyPatch:Io,isBrowser:Ne,isNodejs:Gt};Se();function Dt(o){return!P.isNodejs()&&typeof o=="string"?document.getElementById(o):o}function k(o){let{Canvas:t,CanvasRenderingContext2D:e}=P.getEnv();if(o instanceof e)return o;let r=Dt(o);if(!(r instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");let a=r.getContext("2d");if(!a)throw new Error("resolveContext2d - canvas 2d context is null");return a}var Ae=(a=>(a.TOP_LEFT="TOP_LEFT",a.TOP_RIGHT="TOP_RIGHT",a.BOTTOM_LEFT="BOTTOM_LEFT",a.BOTTOM_RIGHT="BOTTOM_RIGHT",a))(Ae||{}),Vt=class{constructor(t={}){let{anchorPosition:e,backgroundColor:r,fontColor:a,fontSize:s,fontStyle:i,padding:c}=t;this.anchorPosition=e||"TOP_LEFT",this.backgroundColor=r||"rgba(0, 0, 0, 0.5)",this.fontColor=a||"rgba(255, 255, 255, 1)",this.fontSize=s||14,this.fontStyle=i||"Georgia",this.padding=c||4}},st=class{constructor(t,e,r={}){this.text=typeof t=="string"?[t]:t instanceof st?t.text:t,this.anchor=e,this.options=new Vt(r)}measureWidth(t){let{padding:e}=this.options;return this.text.map(r=>t.measureText(r).width).reduce((r,a)=>r{let g=m+f.x,_=m+f.y+(d+1)*i;r.fillText(l,g,_)})}};var ke=class{constructor(t={}){let{boxColor:e,lineWidth:r,label:a,drawLabelOptions:s}=t;this.boxColor=e||"rgba(0, 0, 255, 1)",this.lineWidth=r||2,this.label=a;let i={anchorPosition:"BOTTOM_LEFT",backgroundColor:this.boxColor};this.drawLabelOptions=new Vt({...i,...s})}},ue=class{constructor(t,e={}){this.box=new F(t),this.options=new ke(e)}draw(t){let e=k(t),{boxColor:r,lineWidth:a}=this.options,{x:s,y:i,width:c,height:m}=this.box;e.strokeStyle=r,e.lineWidth=a,e.strokeRect(s,i,c,m);let{label:p}=this.options;p&&new st([p],{x:s-a/2,y:i},this.options.drawLabelOptions).draw(t)}};function No(o,t){(Array.isArray(t)?t:[t]).forEach(r=>{let a=r instanceof E?r.score:K(r)?r.detection.score:void 0,s=r instanceof E?r.box:K(r)?r.detection.box:new F(r),i=a?`${pt(a)}`:void 0;new ue(s,{label:i}).draw(o)})}function fe(o){let{Image:t,Video:e}=P.getEnv();return o instanceof t&&o.complete||o instanceof e&&o.readyState>=3}function xr(o){return new Promise((t,e)=>{(o instanceof P.getEnv().Canvas||fe(o))&&t(null);function r(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",a),s.currentTarget.removeEventListener("error",r),e(s))}function a(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",a),s.currentTarget.removeEventListener("error",r),t(s))}o.addEventListener("load",a),o.addEventListener("error",r)})}function vr(o){return new Promise((t,e)=>{o instanceof Blob||e(new Error("bufferToImage - expected buf to be of type: Blob"));let r=new FileReader;r.onload=()=>{typeof r.result!="string"&&e(new Error("bufferToImage - expected reader.result to be a string, in onload"));let a=P.getEnv().createImageElement();a.onload=()=>t(a),a.onerror=e,a.src=r.result},r.onerror=e,r.readAsDataURL(o)})}function Et(o){let{Image:t,Video:e}=P.getEnv();return o instanceof t?new S(o.naturalWidth,o.naturalHeight):o instanceof e?new S(o.videoWidth,o.videoHeight):new S(o.width,o.height)}function Mt({width:o,height:t}){let{createCanvasElement:e}=P.getEnv(),r=e();return r.width=o,r.height=t,r}function le(o,t){let{ImageData:e}=P.getEnv();if(!(o instanceof e)&&!fe(o))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:r,height:a}=t||Et(o),s=Mt({width:r,height:a});return o instanceof e?k(s).putImageData(o,0,0):k(s).drawImage(o,0,0,r,a),s}async function yr(o,t){let e=t||P.getEnv().createCanvasElement(),[r,a,s]=o.shape.slice(R(o)?1:0),i=n.tidy(()=>o.as3D(r,a,s).toInt());return await n.browser.toPixels(i,e),i.dispose(),e}function We(o){let{Image:t,Canvas:e,Video:r}=P.getEnv();return o instanceof t||o instanceof e||o instanceof r}function Tr(o,t,e=!1){let{Image:r,Canvas:a}=P.getEnv();if(!(o instanceof r||o instanceof a))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return Mt({width:1,height:1});let s=Et(o),i=t/Math.max(s.height,s.width),c=i*s.width,m=i*s.height,p=Mt({width:t,height:t}),u=o instanceof a?o:le(o),f=Math.abs(c-m)/2,l=e&&c0&&u.height>0&&k(p).drawImage(u,l,d,c,m),p}var it=class{constructor(t,e=!1){this._imageTensors=[];this._canvases=[];this._treatAsBatchInput=!1;this._inputDimensions=[];this._inputSize=0;if(!Array.isArray(t))throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${t}`);this._treatAsBatchInput=e,this._batchSize=t.length,t.forEach((r,a)=>{if(Z(r)){this._imageTensors[a]=r,this._inputDimensions[a]=r.shape;return}if(R(r)){let i=r.shape[0];if(i!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${i} passed, but not supported in input array`);this._imageTensors[a]=r,this._inputDimensions[a]=r.shape.slice(1);return}let s=r instanceof P.getEnv().Canvas?r:le(r);this._canvases[a]=s,this._inputDimensions[a]=[s.height,s.width,3]})}get imageTensors(){return this._imageTensors}get canvases(){return this._canvases}get isBatchInput(){return this.batchSize>1||this._treatAsBatchInput}get batchSize(){return this._batchSize}get inputDimensions(){return this._inputDimensions}get inputSize(){return this._inputSize}get reshapedInputDimensions(){return X(this.batchSize,0,1).map((t,e)=>this.getReshapedInputDimensions(e))}getInput(t){return this.canvases[t]||this.imageTensors[t]}getInputDimensions(t){return this._inputDimensions[t]}getInputHeight(t){return this._inputDimensions[t][0]}getInputWidth(t){return this._inputDimensions[t][1]}getReshapedInputDimensions(t){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");let e=this.getInputWidth(t),r=this.getInputHeight(t);return Me({width:e,height:r},this.inputSize)}toBatchTensor(t,e=!0){return this._inputSize=t,n.tidy(()=>{let r=X(this.batchSize,0,1).map(s=>{let i=this.getInput(s);if(i instanceof n.Tensor){let c=R(i)?i:n.expandDims(i);return c=gr(c,e),(c.shape[1]!==t||c.shape[2]!==t)&&(c=n.image.resizeBilinear(c,[t,t],!1,!1)),c.as3D(t,t,3)}if(i instanceof P.getEnv().Canvas)return n.browser.fromPixels(Tr(i,t,e));throw new Error(`toBatchTensor - at batchIdx ${s}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${i}`)});return n.stack(r.map(s=>n.cast(s,"float32"))).as4D(this.batchSize,t,t,3)})}};async function D(o){if(o instanceof it)return o;let t=Array.isArray(o)?o:[o];if(!t.length)throw new Error("toNetInput - empty array passed as input");let e=a=>Array.isArray(o)?` at input index ${a}:`:"",r=t.map(Dt);return r.forEach((a,s)=>{if(!We(a)&&!Z(a)&&!R(a))throw typeof t[s]=="string"?new Error(`toNetInput -${e(s)} string passed, but could not resolve HTMLElement for element id ${t[s]}`):new Error(`toNetInput -${e(s)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(R(a)){let i=a.shape[0];if(i!==1)throw new Error(`toNetInput -${e(s)} tf.Tensor4D with batchSize ${i} passed, but not supported in input array`)}}),await Promise.all(r.map(a=>We(a)&&xr(a))),new it(r,Array.isArray(o))}async function jt(o,t){let{Canvas:e}=P.getEnv(),r=o;if(!(o instanceof e)){let i=await D(o);if(i.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");let c=i.getInput(0);r=c instanceof e?c:await yr(c)}let a=k(r);return t.map(i=>i instanceof E?i.forSize(r.width,r.height).box.floor():i).map(i=>i.clipAtImageBorders(r.width,r.height)).map(({x:i,y:c,width:m,height:p})=>{let u=Mt({width:m,height:p});return m>0&&p>0&&k(u).putImageData(a.getImageData(i,c,m,p),0,0),u})}async function Ut(o,t){if(!Z(o)&&!R(o))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(R(o)&&o.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return n.tidy(()=>{let[e,r,a]=o.shape.slice(R(o)?1:0);return t.map(c=>c instanceof E?c.forSize(r,e).box:c).map(c=>c.clipAtImageBorders(r,e)).map(({x:c,y:m,width:p,height:u})=>n.slice3d(o.as3D(e,r,a),[m,c,0],[u,p,a]))})}async function ct(o,t){let{fetch:e}=P.getEnv(),r=await e(o,t);if(!(r.status<400))throw new Error(`failed to fetch: (${r.status}) ${r.statusText}, from url: ${r.url}`);return r}async function Pi(o){let t=await ct(o),e=await t.blob();if(!e.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${e.type}, for url: ${t.url}`);return vr(e)}async function _r(o){return(await ct(o)).json()}async function Mi(o){return new Float32Array(await(await ct(o)).arrayBuffer())}function Pr(o){return new Promise((t,e)=>{o instanceof Blob||e(new Error("bufferToVideo - expected buf to be of type: Blob"));let r=P.getEnv().createVideoElement();r.oncanplay=()=>t(r),r.onerror=e,r.playsInline=!0,r.muted=!0,r.src=URL.createObjectURL(o),r.play()})}async function Ai(o){let t=await ct(o),e=await t.blob();if(!e.type.startsWith("video/"))throw new Error(`fetchVideo - expected blob type to be of type video/*, instead have: ${e.type}, for url: ${t.url}`);return Pr(e)}function de(o,t){let e=`${t}-weights_manifest.json`;if(!o)return{modelBaseUri:"",manifestUri:e};if(o==="/")return{modelBaseUri:"/",manifestUri:`/${e}`};let r=o.startsWith("http://")?"http://":o.startsWith("https://")?"https://":"";o=o.replace(r,"");let a=o.split("/").filter(c=>c),s=o.endsWith(".json")?a[a.length-1]:e,i=r+(o.endsWith(".json")?a.slice(0,a.length-1):a).join("/");return i=o.startsWith("/")?`/${i}`:i,{modelBaseUri:i,manifestUri:i==="/"?`/${s}`:`${i}/${s}`}}async function wr(o,t){let{manifestUri:e,modelBaseUri:r}=de(o,t),a=await _r(e);return n.io.loadWeights(a,r)}function Hi(o,t,e=!1){let{width:r,height:a}=e?Et(t):t;return o.width=r,o.height=a,{width:r,height:a}}var I=class{constructor(t){this._params=void 0;this._paramMappings=[];this._name=t}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(t){let{obj:e,objProp:r}=this.traversePropertyPath(t);return e[r]}reassignParamFromPath(t,e){let{obj:r,objProp:a}=this.traversePropertyPath(t);r[a].dispose(),r[a]=e}getParamList(){return this._paramMappings.map(({paramPath:t})=>({path:t,tensor:this.getParamFromPath(t)}))}getTrainableParams(){return this.getParamList().filter(t=>t.tensor instanceof n.Variable)}getFrozenParams(){return this.getParamList().filter(t=>!(t.tensor instanceof n.Variable))}variable(){this.getFrozenParams().forEach(({path:t,tensor:e})=>{this.reassignParamFromPath(t,e.variable())})}freeze(){this.getTrainableParams().forEach(({path:t,tensor:e})=>{let r=n.tensor(e.dataSync());e.dispose(),this.reassignParamFromPath(t,r)})}dispose(t=!0){this.getParamList().forEach(e=>{if(t&&e.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${e.path}`);e.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:t})=>Array.from(t.dataSync())).reduce((t,e)=>t.concat(e)))}async load(t){if(t instanceof Float32Array){this.extractWeights(t);return}await this.loadFromUri(t)}async loadFromUri(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);let e=await wr(t,this.getDefaultModelName());this.loadFromWeightMap(e)}async loadFromDisk(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);let{readFile:e}=P.getEnv(),{manifestUri:r,modelBaseUri:a}=de(t,this.getDefaultModelName()),s=p=>Promise.all(p.map(u=>e(u).then(f=>f.buffer))),i=n.io.weightsLoaderFactory(s),c=JSON.parse((await e(r)).toString()),m=await i(c,a);this.loadFromWeightMap(m)}loadFromWeightMap(t){let{paramMappings:e,params:r}=this.extractParamsFromWeightMap(t);this._paramMappings=e,this._params=r}extractWeights(t){let{paramMappings:e,params:r}=this.extractParams(t);this._paramMappings=e,this._params=r}traversePropertyPath(t){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");let e=t.split("/").reduce((s,i)=>{if(!s.nextObj.hasOwnProperty(i))throw new Error(`traversePropertyPath - object does not have property ${i}, for path ${t}`);return{obj:s.nextObj,objProp:i,nextObj:s.nextObj[i]}},{nextObj:this.params}),{obj:r,objProp:a}=e;if(!r||!a||!(r[a]instanceof n.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${t}`);return{obj:r,objProp:a}}};function A(o,t,e){return n.tidy(()=>{let r=n.separableConv2d(o,t.depthwise_filter,t.pointwise_filter,e,"same");return r=n.add(r,t.bias),r})}function he(o,t,e=!1){return n.tidy(()=>{let r=n.relu(e?n.add(n.conv2d(o,t.conv0.filters,[2,2],"same"),t.conv0.bias):A(o,t.conv0,[2,2])),a=A(r,t.conv1,[1,1]),s=n.relu(n.add(r,a)),i=A(s,t.conv2,[1,1]);return n.relu(n.add(r,n.add(a,i)))})}function Xt(o,t,e=!1,r=!0){return n.tidy(()=>{let a=n.relu(e?n.add(n.conv2d(o,t.conv0.filters,r?[2,2]:[1,1],"same"),t.conv0.bias):A(o,t.conv0,r?[2,2]:[1,1])),s=A(a,t.conv1,[1,1]),i=n.relu(n.add(a,s)),c=A(i,t.conv2,[1,1]),m=n.relu(n.add(a,n.add(s,c))),p=A(m,t.conv3,[1,1]);return n.relu(n.add(a,n.add(s,n.add(c,p))))})}function lt(o,t,e="same",r=!1){return n.tidy(()=>{let a=n.add(n.conv2d(o,t.filters,[1,1],e),t.bias);return r?n.relu(a):a})}function N(o,t){Object.keys(o).forEach(e=>{t.some(r=>r.originalPath===e)||o[e].dispose()})}function Ct(o,t){return(e,r,a,s)=>{let i=n.tensor4d(o(e*r*a*a),[a,a,e,r]),c=n.tensor1d(o(r));return t.push({paramPath:`${s}/filters`},{paramPath:`${s}/bias`}),{filters:i,bias:c}}}function be(o,t){return(e,r,a)=>{let s=n.tensor2d(o(e*r),[e,r]),i=n.tensor1d(o(r));return t.push({paramPath:`${a}/weights`},{paramPath:`${a}/bias`}),{weights:s,bias:i}}}var ge=class{constructor(t,e,r){this.depthwise_filter=t;this.pointwise_filter=e;this.bias=r}};function It(o,t){return(e,r,a)=>{let s=n.tensor4d(o(9*e),[3,3,e,1]),i=n.tensor4d(o(e*r),[1,1,e,r]),c=n.tensor1d(o(r));return t.push({paramPath:`${a}/depthwise_filter`},{paramPath:`${a}/pointwise_filter`},{paramPath:`${a}/bias`}),new ge(s,i,c)}}function Nt(o){return t=>{let e=o(`${t}/depthwise_filter`,4),r=o(`${t}/pointwise_filter`,4),a=o(`${t}/bias`,1);return new ge(e,r,a)}}function W(o,t){return(e,r,a)=>{let s=o[e];if(!mt(s,r))throw new Error(`expected weightMap[${e}] to be a Tensor${r}D, instead have ${s}`);return t.push({originalPath:e,paramPath:a||e}),s}}function L(o){let t=o;function e(a){let s=t.slice(0,a);return t=t.slice(a),s}function r(){return t}return{extractWeights:e,getRemainingWeights:r}}function xe(o,t){let e=Ct(o,t),r=It(o,t);function a(i,c,m,p=!1){let u=p?e(i,c,3,`${m}/conv0`):r(i,c,`${m}/conv0`),f=r(c,c,`${m}/conv1`),l=r(c,c,`${m}/conv2`);return{conv0:u,conv1:f,conv2:l}}function s(i,c,m,p=!1){let{conv0:u,conv1:f,conv2:l}=a(i,c,m,p),d=r(c,c,`${m}/conv3`);return{conv0:u,conv1:f,conv2:l,conv3:d}}return{extractDenseBlock3Params:a,extractDenseBlock4Params:s}}function Fr(o){let t=[],{extractWeights:e,getRemainingWeights:r}=L(o),{extractDenseBlock4Params:a}=xe(e,t),s=a(3,32,"dense0",!0),i=a(32,64,"dense1"),c=a(64,128,"dense2"),m=a(128,256,"dense3");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:c,dense3:m}}}function ve(o){return t=>{let e=o(`${t}/filters`,4),r=o(`${t}/bias`,1);return{filters:e,bias:r}}}function ye(o,t){let e=W(o,t),r=ve(e),a=Nt(e);function s(c,m=!1){let p=m?r(`${c}/conv0`):a(`${c}/conv0`),u=a(`${c}/conv1`),f=a(`${c}/conv2`);return{conv0:p,conv1:u,conv2:f}}function i(c,m=!1){let p=m?r(`${c}/conv0`):a(`${c}/conv0`),u=a(`${c}/conv1`),f=a(`${c}/conv2`),l=a(`${c}/conv3`);return{conv0:p,conv1:u,conv2:f,conv3:l}}return{extractDenseBlock3Params:s,extractDenseBlock4Params:i}}function Dr(o){let t=[],{extractDenseBlock4Params:e}=ye(o,t),r={dense0:e("dense0",!0),dense1:e("dense1"),dense2:e("dense2"),dense3:e("dense3")};return N(o,t),{params:r,paramMappings:t}}var Jt=class extends I{constructor(){super("FaceFeatureExtractor")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("FaceFeatureExtractor - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(112,!0),"float32"),s=J(r,[122.782,117.001,104.298]).div(255),i=Xt(s,e.dense0,!0);return i=Xt(i,e.dense1),i=Xt(i,e.dense2),i=Xt(i,e.dense3),i=n.avgPool(i,[7,7],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await D(t))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeightMap(t){return Dr(t)}extractParams(t){return Fr(t)}};function qt(o,t){return n.tidy(()=>n.add(n.matMul(o,t.weights),t.bias))}function Er(o,t,e){let r=[],{extractWeights:a,getRemainingWeights:s}=L(o),c=be(a,r)(t,e,"fc");if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{paramMappings:r,params:{fc:c}}}function Mr(o){let t=[],e=W(o,t);function r(s){let i=e(`${s}/weights`,2),c=e(`${s}/bias`,1);return{weights:i,bias:c}}let a={fc:r("fc")};return N(o,t),{params:a,paramMappings:t}}function Te(o){let t={},e={};return Object.keys(o).forEach(r=>{let a=r.startsWith("fc")?e:t;a[r]=o[r]}),{featureExtractorMap:t,classifierMap:e}}var Zt=class extends I{constructor(t,e){super(t);this._faceFeatureExtractor=e}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(t){let{params:e}=this;if(!e)throw new Error(`${this._name} - load model before inference`);return n.tidy(()=>{let r=t instanceof it?this.faceFeatureExtractor.forwardInput(t):t;return qt(r.as2D(r.shape[0],-1),e.fc)})}dispose(t=!0){this.faceFeatureExtractor.dispose(t),super.dispose(t)}loadClassifierParams(t){let{params:e,paramMappings:r}=this.extractClassifierParams(t);this._params=e,this._paramMappings=r}extractClassifierParams(t){return Er(t,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(t){let{featureExtractorMap:e,classifierMap:r}=Te(t);return this.faceFeatureExtractor.loadFromWeightMap(e),Mr(r)}extractParams(t){let e=this.getClassifierChannelsIn(),r=this.getClassifierChannelsOut(),a=r*e+r,s=t.slice(0,t.length-a),i=t.slice(t.length-a);return this.faceFeatureExtractor.extractWeights(s),this.extractClassifierParams(i)}};var Cr=["neutral","happy","sad","angry","fearful","disgusted","surprised"],dt=class{constructor(t){this.neutral=0;this.happy=0;this.sad=0;this.angry=0;this.fearful=0;this.disgusted=0;this.surprised=0;if(t.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${t.length}`);Cr.forEach((e,r)=>{this[e]=t[r]})}asSortedArray(){return Cr.map(t=>({expression:t,probability:this[t]})).sort((t,e)=>e.probability-t.probability)}};var Be=class extends Zt{constructor(t=new Jt){super("FaceExpressionNet",t)}forwardInput(t){return n.tidy(()=>n.softmax(this.runNet(t)))}async forward(t){return this.forwardInput(await D(t))}async predictExpressions(t){let e=await D(t),r=await this.forwardInput(e),a=await Promise.all(n.unstack(r).map(async i=>{let c=i.dataSync();return i.dispose(),c}));r.dispose();let s=a.map(i=>new dt(i));return e.isBatchInput?s:s[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}};function Ir(o){return o.expressions instanceof dt}function Re(o,t){return{...o,...{expressions:t}}}function Lo(o,t,e=.1,r){(Array.isArray(t)?t:[t]).forEach(s=>{let i=s instanceof dt?s:Ir(s)?s.expressions:void 0;if(!i)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");let m=i.asSortedArray().filter(f=>f.probability>e),p=K(s)?s.detection.box.bottomLeft:r||new b(0,0);new st(m.map(f=>`${f.expression} (${pt(f.probability)})`),p).draw(o)})}function Lt(o){return K(o)&&o.landmarks instanceof O&&o.unshiftedLandmarks instanceof O&&o.alignedRect instanceof E}function So(o){let t=(c,m,p,u)=>Math.atan2(u-m,p-c)%Math.PI,e=c=>c*180/Math.PI,r={roll:void 0,pitch:void 0,yaw:void 0};if(!o||!o._positions||o._positions.length!==68)return r;let a=o._positions;r.roll=-t(a[36]._x,a[36]._y,a[45]._x,a[45]._y),r.pitch=t(0,Math.abs(a[0]._x-a[30]._x)/a[30]._x,Math.PI,Math.abs(a[16]._x-a[30]._x)/a[30]._x);let s=a.reduce((c,m)=>cc>m._y?c:m._y,-1/0);return r.yaw=Math.PI*(o._imgDims._height/(i-s)/1.4-1),r}function Kt(o,t){let{box:e}=o.detection,r=t.shiftBy(e.x,e.y),a=r.align(),{imageDims:s}=o.detection,i=new E(o.detection.score,a.rescale(s.reverse()),s),c=So(t);return{...o,...{landmarks:r,unshiftedLandmarks:t,alignedRect:i,angle:c}}}var $e=class{constructor(t={}){let{drawLines:e=!0,drawPoints:r=!0,lineWidth:a,lineColor:s,pointSize:i,pointColor:c}=t;this.drawLines=e,this.drawPoints=r,this.lineWidth=a||1,this.pointSize=i||2,this.lineColor=s||"rgba(0, 255, 255, 1)",this.pointColor=c||"rgba(255, 0, 255, 1)"}},Oe=class{constructor(t,e={}){this.faceLandmarks=t,this.options=new $e(e)}draw(t){let e=k(t),{drawLines:r,drawPoints:a,lineWidth:s,lineColor:i,pointSize:c,pointColor:m}=this.options;if(r&&this.faceLandmarks instanceof Yt&&(e.strokeStyle=i,e.lineWidth=s,q(e,this.faceLandmarks.getJawOutline()),q(e,this.faceLandmarks.getLeftEyeBrow()),q(e,this.faceLandmarks.getRightEyeBrow()),q(e,this.faceLandmarks.getNose()),q(e,this.faceLandmarks.getLeftEye(),!0),q(e,this.faceLandmarks.getRightEye(),!0),q(e,this.faceLandmarks.getMouth(),!0)),a){e.strokeStyle=m,e.fillStyle=m;let p=u=>{e.beginPath(),e.arc(u.x,u.y,c,0,2*Math.PI),e.fill()};this.faceLandmarks.positions.forEach(p)}}};function Ao(o,t){(Array.isArray(t)?t:[t]).forEach(r=>{let a=r instanceof O?r:Lt(r)?r.landmarks:void 0;if(!a)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new Oe(a).draw(o)})}var Lr="1.6.7";function Bo(o,t){let e=Ct(o,t),r=It(o,t);function a(i,c,m){let p=r(i,c,`${m}/separable_conv0`),u=r(c,c,`${m}/separable_conv1`),f=e(i,c,1,`${m}/expansion_conv`);return{separable_conv0:p,separable_conv1:u,expansion_conv:f}}function s(i,c){let m=r(i,i,`${c}/separable_conv0`),p=r(i,i,`${c}/separable_conv1`),u=r(i,i,`${c}/separable_conv2`);return{separable_conv0:m,separable_conv1:p,separable_conv2:u}}return{extractConvParams:e,extractSeparableConvParams:r,extractReductionBlockParams:a,extractMainBlockParams:s}}function Sr(o,t){let e=[],{extractWeights:r,getRemainingWeights:a}=L(o),{extractConvParams:s,extractSeparableConvParams:i,extractReductionBlockParams:c,extractMainBlockParams:m}=Bo(r,e),p=s(3,32,3,"entry_flow/conv_in"),u=c(32,64,"entry_flow/reduction_block_0"),f=c(64,128,"entry_flow/reduction_block_1"),l={conv_in:p,reduction_block_0:u,reduction_block_1:f},d={};X(t,0,1).forEach(x=>{d[`main_block_${x}`]=m(128,`middle_flow/main_block_${x}`)});let g=c(128,256,"exit_flow/reduction_block"),_=i(256,512,"exit_flow/separable_conv"),h={reduction_block:g,separable_conv:_};if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:e,params:{entry_flow:l,middle_flow:d,exit_flow:h}}}function Ro(o,t){let e=W(o,t),r=ve(e),a=Nt(e);function s(c){let m=a(`${c}/separable_conv0`),p=a(`${c}/separable_conv1`),u=r(`${c}/expansion_conv`);return{separable_conv0:m,separable_conv1:p,expansion_conv:u}}function i(c){let m=a(`${c}/separable_conv0`),p=a(`${c}/separable_conv1`),u=a(`${c}/separable_conv2`);return{separable_conv0:m,separable_conv1:p,separable_conv2:u}}return{extractConvParams:r,extractSeparableConvParams:a,extractReductionBlockParams:s,extractMainBlockParams:i}}function Ar(o,t){let e=[],{extractConvParams:r,extractSeparableConvParams:a,extractReductionBlockParams:s,extractMainBlockParams:i}=Ro(o,e),c=r("entry_flow/conv_in"),m=s("entry_flow/reduction_block_0"),p=s("entry_flow/reduction_block_1"),u={conv_in:c,reduction_block_0:m,reduction_block_1:p},f={};X(t,0,1).forEach(_=>{f[`main_block_${_}`]=i(`middle_flow/main_block_${_}`)});let l=s("exit_flow/reduction_block"),d=a("exit_flow/separable_conv"),g={reduction_block:l,separable_conv:d};return N(o,e),{params:{entry_flow:u,middle_flow:f,exit_flow:g},paramMappings:e}}function kr(o,t,e){return n.add(n.conv2d(o,t.filters,e,"same"),t.bias)}function He(o,t,e=!0){let r=e?n.relu(o):o;return r=A(r,t.separable_conv0,[1,1]),r=A(n.relu(r),t.separable_conv1,[1,1]),r=n.maxPool(r,[3,3],[2,2],"same"),r=n.add(r,kr(o,t.expansion_conv,[2,2])),r}function $o(o,t){let e=A(n.relu(o),t.separable_conv0,[1,1]);return e=A(n.relu(e),t.separable_conv1,[1,1]),e=A(n.relu(e),t.separable_conv2,[1,1]),e=n.add(e,o),e}var ze=class extends I{constructor(t){super("TinyXception");this._numMainBlocks=t}forwardInput(t){let{params:e}=this;if(!e)throw new Error("TinyXception - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(112,!0),"float32"),s=J(r,[122.782,117.001,104.298]).div(255),i=n.relu(kr(s,e.entry_flow.conv_in,[2,2]));return i=He(i,e.entry_flow.reduction_block_0,!1),i=He(i,e.entry_flow.reduction_block_1),X(this._numMainBlocks,0,1).forEach(c=>{i=$o(i,e.middle_flow[`main_block_${c}`])}),i=He(i,e.exit_flow.reduction_block),i=n.relu(A(i,e.exit_flow.separable_conv,[1,1])),i})}async forward(t){return this.forwardInput(await D(t))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeightMap(t){return Ar(t,this._numMainBlocks)}extractParams(t){return Sr(t,this._numMainBlocks)}};function Wr(o){let t=[],{extractWeights:e,getRemainingWeights:r}=L(o),a=be(e,t),s=a(512,1,"fc/age"),i=a(512,2,"fc/gender");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{fc:{age:s,gender:i}}}}function Br(o){let t=[],e=W(o,t);function r(s){let i=e(`${s}/weights`,2),c=e(`${s}/bias`,1);return{weights:i,bias:c}}let a={fc:{age:r("fc/age"),gender:r("fc/gender")}};return N(o,t),{params:a,paramMappings:t}}var Ye=(e=>(e.FEMALE="female",e.MALE="male",e))(Ye||{});var Ge=class extends I{constructor(t=new ze(2)){super("AgeGenderNet");this._faceFeatureExtractor=t}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(t){let{params:e}=this;if(!e)throw new Error(`${this._name} - load model before inference`);return n.tidy(()=>{let r=t instanceof it?this.faceFeatureExtractor.forwardInput(t):t,a=n.avgPool(r,[7,7],[2,2],"valid").as2D(r.shape[0],-1),s=qt(a,e.fc.age).as1D(),i=qt(a,e.fc.gender);return{age:s,gender:i}})}forwardInput(t){return n.tidy(()=>{let{age:e,gender:r}=this.runNet(t);return{age:e,gender:n.softmax(r)}})}async forward(t){return this.forwardInput(await D(t))}async predictAgeAndGender(t){let e=await D(t),r=await this.forwardInput(e),a=n.unstack(r.age),s=n.unstack(r.gender),i=a.map((m,p)=>({ageTensor:m,genderTensor:s[p]})),c=await Promise.all(i.map(async({ageTensor:m,genderTensor:p})=>{let u=m.dataSync()[0],f=p.dataSync()[0],l=f>.5,d=l?"male":"female",g=l?f:1-f;return m.dispose(),p.dispose(),{age:u,gender:d,genderProbability:g}}));return r.age.dispose(),r.gender.dispose(),e.isBatchInput?c:c[0]}getDefaultModelName(){return"age_gender_model"}dispose(t=!0){this.faceFeatureExtractor.dispose(t),super.dispose(t)}loadClassifierParams(t){let{params:e,paramMappings:r}=this.extractClassifierParams(t);this._params=e,this._paramMappings=r}extractClassifierParams(t){return Wr(t)}extractParamsFromWeightMap(t){let{featureExtractorMap:e,classifierMap:r}=Te(t);return this.faceFeatureExtractor.loadFromWeightMap(e),Br(r)}extractParams(t){let r=t.slice(0,t.length-1539),a=t.slice(t.length-1539);return this.faceFeatureExtractor.extractWeights(r),this.extractClassifierParams(a)}};var Qt=class extends Zt{postProcess(t,e,r){let a=r.map(({width:i,height:c})=>{let m=e/Math.max(c,i);return{width:i*m,height:c*m}}),s=a.length;return n.tidy(()=>{let i=(f,l)=>n.stack([n.fill([68],f,"float32"),n.fill([68],l,"float32")],1).as2D(1,136).as1D(),c=(f,l)=>{let{width:d,height:g}=a[f];return l(d,g)?Math.abs(d-g)/2:0},m=f=>c(f,(l,d)=>lc(f,(l,d)=>di(m(l),p(l))))).div(n.stack(Array.from(Array(s),(f,l)=>i(a[l].width,a[l].height))))})}forwardInput(t){return n.tidy(()=>{let e=this.runNet(t);return this.postProcess(e,t.inputSize,t.inputDimensions.map(([r,a])=>({height:r,width:a})))})}async forward(t){return this.forwardInput(await D(t))}async detectLandmarks(t){let e=await D(t),r=n.tidy(()=>n.unstack(this.forwardInput(e))),a=await Promise.all(r.map(async(s,i)=>{let c=Array.from(s.dataSync()),m=c.filter((u,f)=>ae(f)),p=c.filter((u,f)=>!ae(f));return new Yt(Array(68).fill(0).map((u,f)=>new b(m[f],p[f])),{height:e.getInputHeight(i),width:e.getInputWidth(i)})}));return r.forEach(s=>s.dispose()),e.isBatchInput?a:a[0]}getClassifierChannelsOut(){return 136}};var te=class extends Qt{constructor(t=new Jt){super("FaceLandmark68Net",t)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};function Rr(o){let t=[],{extractDenseBlock3Params:e}=ye(o,t),r={dense0:e("dense0",!0),dense1:e("dense1"),dense2:e("dense2")};return N(o,t),{params:r,paramMappings:t}}function $r(o){let t=[],{extractWeights:e,getRemainingWeights:r}=L(o),{extractDenseBlock3Params:a}=xe(e,t),s=a(3,32,"dense0",!0),i=a(32,64,"dense1"),c=a(64,128,"dense2");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:c}}}var Ve=class extends I{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("TinyFaceFeatureExtractor - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(112,!0),"float32"),s=J(r,[122.782,117.001,104.298]).div(255),i=he(s,e.dense0,!0);return i=he(i,e.dense1),i=he(i,e.dense2),i=n.avgPool(i,[14,14],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await D(t))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeightMap(t){return Rr(t)}extractParams(t){return $r(t)}};var je=class extends Qt{constructor(t=new Ve){super("FaceLandmark68TinyNet",t)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}};var Oo=class extends te{};function Or(o,t){return n.add(n.mul(o,t.weights),t.biases)}function Ue(o,t,e,r,a="same"){let{filters:s,bias:i}=t.conv,c=n.conv2d(o,s,e,a);return c=n.add(c,i),c=Or(c,t.scale),r?n.relu(c):c}function Hr(o,t){return Ue(o,t,[1,1],!0)}function Xe(o,t){return Ue(o,t,[1,1],!1)}function _e(o,t){return Ue(o,t,[2,2],!0,"valid")}function Ho(o,t){function e(c,m,p){let u=o(c),f=u.length/(m*p*p);if(Ee(f))throw new Error(`depth has to be an integer: ${f}, weights.length: ${u.length}, numFilters: ${m}, filterSize: ${p}`);return n.tidy(()=>n.transpose(n.tensor4d(u,[m,f,p,p]),[2,3,1,0]))}function r(c,m,p,u){let f=e(c,m,p),l=n.tensor1d(o(m));return t.push({paramPath:`${u}/filters`},{paramPath:`${u}/bias`}),{filters:f,bias:l}}function a(c,m){let p=n.tensor1d(o(c)),u=n.tensor1d(o(c));return t.push({paramPath:`${m}/weights`},{paramPath:`${m}/biases`}),{weights:p,biases:u}}function s(c,m,p,u){let f=r(c,m,p,`${u}/conv`),l=a(m,`${u}/scale`);return{conv:f,scale:l}}function i(c,m,p,u,f=!1){let l=s((f?.5:1)*c,m,p,`${u}/conv1`),d=s(c,m,p,`${u}/conv2`);return{conv1:l,conv2:d}}return{extractConvLayerParams:s,extractResidualLayerParams:i}}function zr(o){let{extractWeights:t,getRemainingWeights:e}=L(o),r=[],{extractConvLayerParams:a,extractResidualLayerParams:s}=Ho(t,r),i=a(4704,32,7,"conv32_down"),c=s(9216,32,3,"conv32_1"),m=s(9216,32,3,"conv32_2"),p=s(9216,32,3,"conv32_3"),u=s(36864,64,3,"conv64_down",!0),f=s(36864,64,3,"conv64_1"),l=s(36864,64,3,"conv64_2"),d=s(36864,64,3,"conv64_3"),g=s(147456,128,3,"conv128_down",!0),_=s(147456,128,3,"conv128_1"),h=s(147456,128,3,"conv128_2"),x=s(589824,256,3,"conv256_down",!0),T=s(589824,256,3,"conv256_1"),v=s(589824,256,3,"conv256_2"),M=s(589824,256,3,"conv256_down_out"),B=n.tidy(()=>n.transpose(n.tensor2d(t(256*128),[128,256]),[1,0]));if(r.push({paramPath:"fc"}),e().length!==0)throw new Error(`weights remaing after extract: ${e().length}`);return{params:{conv32_down:i,conv32_1:c,conv32_2:m,conv32_3:p,conv64_down:u,conv64_1:f,conv64_2:l,conv64_3:d,conv128_down:g,conv128_1:_,conv128_2:h,conv256_down:x,conv256_1:T,conv256_2:v,conv256_down_out:M,fc:B},paramMappings:r}}function zo(o,t){let e=W(o,t);function r(i){let c=e(`${i}/scale/weights`,1),m=e(`${i}/scale/biases`,1);return{weights:c,biases:m}}function a(i){let c=e(`${i}/conv/filters`,4),m=e(`${i}/conv/bias`,1),p=r(i);return{conv:{filters:c,bias:m},scale:p}}function s(i){return{conv1:a(`${i}/conv1`),conv2:a(`${i}/conv2`)}}return{extractConvLayerParams:a,extractResidualLayerParams:s}}function Yr(o){let t=[],{extractConvLayerParams:e,extractResidualLayerParams:r}=zo(o,t),a=e("conv32_down"),s=r("conv32_1"),i=r("conv32_2"),c=r("conv32_3"),m=r("conv64_down"),p=r("conv64_1"),u=r("conv64_2"),f=r("conv64_3"),l=r("conv128_down"),d=r("conv128_1"),g=r("conv128_2"),_=r("conv256_down"),h=r("conv256_1"),x=r("conv256_2"),T=r("conv256_down_out"),{fc:v}=o;if(t.push({originalPath:"fc",paramPath:"fc"}),!De(v))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${v}`);let M={conv32_down:a,conv32_1:s,conv32_2:i,conv32_3:c,conv64_down:m,conv64_1:p,conv64_2:u,conv64_3:f,conv128_down:l,conv128_1:d,conv128_2:g,conv256_down:_,conv256_1:h,conv256_2:x,conv256_down_out:T,fc:v};return N(o,t),{params:M,paramMappings:t}}function G(o,t){let e=Hr(o,t.conv1);return e=Xe(e,t.conv2),e=n.add(e,o),e=n.relu(e),e}function ee(o,t){let e=_e(o,t.conv1);e=Xe(e,t.conv2);let r=n.avgPool(o,2,2,"valid"),a=n.zeros(r.shape),s=r.shape[3]!==e.shape[3];if(r.shape[1]!==e.shape[1]||r.shape[2]!==e.shape[2]){let c=[...e.shape];c[1]=1;let m=n.zeros(c);e=n.concat([e,m],1);let p=[...e.shape];p[2]=1;let u=n.zeros(p);e=n.concat([e,u],2)}return r=s?n.concat([r,a],3):r,e=n.add(r,e),e=n.relu(e),e}var re=class extends I{constructor(){super("FaceRecognitionNet")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("FaceRecognitionNet - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(150,!0),"float32"),s=J(r,[122.782,117.001,104.298]).div(255),i=_e(s,e.conv32_down);i=n.maxPool(i,3,2,"valid"),i=G(i,e.conv32_1),i=G(i,e.conv32_2),i=G(i,e.conv32_3),i=ee(i,e.conv64_down),i=G(i,e.conv64_1),i=G(i,e.conv64_2),i=G(i,e.conv64_3),i=ee(i,e.conv128_down),i=G(i,e.conv128_1),i=G(i,e.conv128_2),i=ee(i,e.conv256_down),i=G(i,e.conv256_1),i=G(i,e.conv256_2),i=ee(i,e.conv256_down_out);let c=i.mean([1,2]);return n.matMul(c,e.fc)})}async forward(t){return this.forwardInput(await D(t))}async computeFaceDescriptor(t){var s;if((s=t==null?void 0:t.shape)!=null&&s.some(i=>i<=0))return new Float32Array(128);let e=await D(t),r=n.tidy(()=>n.unstack(this.forwardInput(e))),a=await Promise.all(r.map(i=>i.data()));return r.forEach(i=>i.dispose()),e.isBatchInput?a:a[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeightMap(t){return Yr(t)}extractParams(t){return zr(t)}};function df(o){let t=new re;return t.extractWeights(o),t}function Je(o,t){return{...o,...{descriptor:t}}}function xf(o){return typeof o.age=="number"}function qe(o,t){return{...o,...{age:t}}}function _f(o){return(o.gender==="male"||o.gender==="female")&&wt(o.genderProbability)}function Ze(o,t,e){return{...o,...{gender:t,genderProbability:e}}}function Yo(o,t){function e(m,p){let u=n.tensor4d(o(9*m),[3,3,m,1]),f=n.tensor1d(o(m)),l=n.tensor1d(o(m)),d=n.tensor1d(o(m)),g=n.tensor1d(o(m));return t.push({paramPath:`${p}/filters`},{paramPath:`${p}/batch_norm_scale`},{paramPath:`${p}/batch_norm_offset`},{paramPath:`${p}/batch_norm_mean`},{paramPath:`${p}/batch_norm_variance`}),{filters:u,batch_norm_scale:f,batch_norm_offset:l,batch_norm_mean:d,batch_norm_variance:g}}function r(m,p,u,f,l){let d=n.tensor4d(o(m*p*u*u),[u,u,m,p]),g=n.tensor1d(o(p));return t.push({paramPath:`${f}/filters`},{paramPath:`${f}/${l?"batch_norm_offset":"bias"}`}),{filters:d,bias:g}}function a(m,p,u,f){let{filters:l,bias:d}=r(m,p,u,f,!0);return{filters:l,batch_norm_offset:d}}function s(m,p,u){let f=e(m,`${u}/depthwise_conv`),l=a(m,p,1,`${u}/pointwise_conv`);return{depthwise_conv:f,pointwise_conv:l}}function i(){let m=a(3,32,3,"mobilenetv1/conv_0"),p=s(32,64,"mobilenetv1/conv_1"),u=s(64,128,"mobilenetv1/conv_2"),f=s(128,128,"mobilenetv1/conv_3"),l=s(128,256,"mobilenetv1/conv_4"),d=s(256,256,"mobilenetv1/conv_5"),g=s(256,512,"mobilenetv1/conv_6"),_=s(512,512,"mobilenetv1/conv_7"),h=s(512,512,"mobilenetv1/conv_8"),x=s(512,512,"mobilenetv1/conv_9"),T=s(512,512,"mobilenetv1/conv_10"),v=s(512,512,"mobilenetv1/conv_11"),M=s(512,1024,"mobilenetv1/conv_12"),B=s(1024,1024,"mobilenetv1/conv_13");return{conv_0:m,conv_1:p,conv_2:u,conv_3:f,conv_4:l,conv_5:d,conv_6:g,conv_7:_,conv_8:h,conv_9:x,conv_10:T,conv_11:v,conv_12:M,conv_13:B}}function c(){let m=a(1024,256,1,"prediction_layer/conv_0"),p=a(256,512,3,"prediction_layer/conv_1"),u=a(512,128,1,"prediction_layer/conv_2"),f=a(128,256,3,"prediction_layer/conv_3"),l=a(256,128,1,"prediction_layer/conv_4"),d=a(128,256,3,"prediction_layer/conv_5"),g=a(256,64,1,"prediction_layer/conv_6"),_=a(64,128,3,"prediction_layer/conv_7"),h=r(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),x=r(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),T=r(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),v=r(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),M=r(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),B=r(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),z=r(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),U=r(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$=r(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),rt=r(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),ot=r(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),nt=r(128,18,1,"prediction_layer/box_predictor_5/class_predictor");return{conv_0:m,conv_1:p,conv_2:u,conv_3:f,conv_4:l,conv_5:d,conv_6:g,conv_7:_,box_predictor_0:{box_encoding_predictor:h,class_predictor:x},box_predictor_1:{box_encoding_predictor:T,class_predictor:v},box_predictor_2:{box_encoding_predictor:M,class_predictor:B},box_predictor_3:{box_encoding_predictor:z,class_predictor:U},box_predictor_4:{box_encoding_predictor:$,class_predictor:rt},box_predictor_5:{box_encoding_predictor:ot,class_predictor:nt}}}return{extractMobilenetV1Params:i,extractPredictionLayerParams:c}}function Gr(o){let t=[],{extractWeights:e,getRemainingWeights:r}=L(o),{extractMobilenetV1Params:a,extractPredictionLayerParams:s}=Yo(e,t),i=a(),c=s(),p={extra_dim:n.tensor3d(e(5118*4),[1,5118,4])};if(t.push({paramPath:"output_layer/extra_dim"}),r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{params:{mobilenetv1:i,prediction_layer:c,output_layer:p},paramMappings:t}}function Go(o,t){let e=W(o,t);function r(p,u,f){let l=e(`${p}/Conv2d_${u}_pointwise/weights`,4,`${f}/filters`),d=e(`${p}/Conv2d_${u}_pointwise/convolution_bn_offset`,1,`${f}/batch_norm_offset`);return{filters:l,batch_norm_offset:d}}function a(p){let u=`mobilenetv1/conv_${p}`,f=`MobilenetV1/Conv2d_${p}_depthwise`,l=`${u}/depthwise_conv`,d=`${u}/pointwise_conv`,g=e(`${f}/depthwise_weights`,4,`${l}/filters`),_=e(`${f}/BatchNorm/gamma`,1,`${l}/batch_norm_scale`),h=e(`${f}/BatchNorm/beta`,1,`${l}/batch_norm_offset`),x=e(`${f}/BatchNorm/moving_mean`,1,`${l}/batch_norm_mean`),T=e(`${f}/BatchNorm/moving_variance`,1,`${l}/batch_norm_variance`);return{depthwise_conv:{filters:g,batch_norm_scale:_,batch_norm_offset:h,batch_norm_mean:x,batch_norm_variance:T},pointwise_conv:r("MobilenetV1",p,d)}}function s(){return{conv_0:r("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:a(1),conv_2:a(2),conv_3:a(3),conv_4:a(4),conv_5:a(5),conv_6:a(6),conv_7:a(7),conv_8:a(8),conv_9:a(9),conv_10:a(10),conv_11:a(11),conv_12:a(12),conv_13:a(13)}}function i(p,u){let f=e(`${p}/weights`,4,`${u}/filters`),l=e(`${p}/biases`,1,`${u}/bias`);return{filters:f,bias:l}}function c(p){let u=i(`Prediction/BoxPredictor_${p}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${p}/box_encoding_predictor`),f=i(`Prediction/BoxPredictor_${p}/ClassPredictor`,`prediction_layer/box_predictor_${p}/class_predictor`);return{box_encoding_predictor:u,class_predictor:f}}function m(){return{conv_0:r("Prediction",0,"prediction_layer/conv_0"),conv_1:r("Prediction",1,"prediction_layer/conv_1"),conv_2:r("Prediction",2,"prediction_layer/conv_2"),conv_3:r("Prediction",3,"prediction_layer/conv_3"),conv_4:r("Prediction",4,"prediction_layer/conv_4"),conv_5:r("Prediction",5,"prediction_layer/conv_5"),conv_6:r("Prediction",6,"prediction_layer/conv_6"),conv_7:r("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:c(0),box_predictor_1:c(1),box_predictor_2:c(2),box_predictor_3:c(3),box_predictor_4:c(4),box_predictor_5:c(5)}}return{extractMobilenetV1Params:s,extractPredictionLayerParams:m}}function Vr(o){let t=[],{extractMobilenetV1Params:e,extractPredictionLayerParams:r}=Go(o,t),a=o["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Z(a))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${a}`);let s={mobilenetv1:e(),prediction_layer:r(),output_layer:{extra_dim:a}};return N(o,t),{params:s,paramMappings:t}}function H(o,t,e){return n.tidy(()=>{let r=n.conv2d(o,t.filters,e,"same");return r=n.add(r,t.batch_norm_offset),n.clipByValue(r,0,6)})}var Vo=.0010000000474974513;function jo(o,t,e){return n.tidy(()=>{let r=n.depthwiseConv2d(o,t.filters,e,"same");return r=n.batchNorm(r,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,Vo),n.clipByValue(r,0,6)})}function Uo(o){return[2,4,6,12].some(t=>t===o)?[2,2]:[1,1]}function jr(o,t){return n.tidy(()=>{let e,r=H(o,t.conv_0,[2,2]);if([t.conv_1,t.conv_2,t.conv_3,t.conv_4,t.conv_5,t.conv_6,t.conv_7,t.conv_8,t.conv_9,t.conv_10,t.conv_11,t.conv_12,t.conv_13].forEach((s,i)=>{let c=i+1,m=Uo(c);r=jo(r,s.depthwise_conv,m),r=H(r,s.pointwise_conv,[1,1]),c===11&&(e=r)}),e===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:r,conv11:e}})}function Xo(o,t,e){let r=o.arraySync(),a=Math.min(r[t][0],r[t][2]),s=Math.min(r[t][1],r[t][3]),i=Math.max(r[t][0],r[t][2]),c=Math.max(r[t][1],r[t][3]),m=Math.min(r[e][0],r[e][2]),p=Math.min(r[e][1],r[e][3]),u=Math.max(r[e][0],r[e][2]),f=Math.max(r[e][1],r[e][3]),l=(i-a)*(c-s),d=(u-m)*(f-p);if(l<=0||d<=0)return 0;let g=Math.max(a,m),_=Math.max(s,p),h=Math.min(i,u),x=Math.min(c,f),T=Math.max(h-g,0)*Math.max(x-_,0);return T/(l+d-T)}function Ur(o,t,e,r,a){let s=o.shape[0],i=Math.min(e,s),c=t.map((u,f)=>({score:u,boxIndex:f})).filter(u=>u.score>a).sort((u,f)=>f.score-u.score),m=u=>u<=r?1:0,p=[];return c.forEach(u=>{if(p.length>=i)return;let f=u.score;for(let l=p.length-1;l>=0;--l){let d=Xo(o,u.boxIndex,p[l]);if(d!==0&&(u.score*=m(d),u.score<=a))break}f===u.score&&p.push(u.boxIndex)}),p}function Jo(o){let t=n.unstack(n.transpose(o,[1,0])),e=[n.sub(t[2],t[0]),n.sub(t[3],t[1])],r=[n.add(t[0],n.div(e[0],2)),n.add(t[1],n.div(e[1],2))];return{sizes:e,centers:r}}function qo(o,t){let{sizes:e,centers:r}=Jo(o),a=n.unstack(n.transpose(t,[1,0])),s=n.div(n.mul(n.exp(n.div(a[2],5)),e[0]),2),i=n.add(n.mul(n.div(a[0],10),e[0]),r[0]),c=n.div(n.mul(n.exp(n.div(a[3],5)),e[1]),2),m=n.add(n.mul(n.div(a[1],10),e[1]),r[1]);return n.transpose(n.stack([n.sub(i,s),n.sub(m,c),n.add(i,s),n.add(m,c)]),[1,0])}function Xr(o,t,e){return n.tidy(()=>{let r=o.shape[0],a=qo(n.reshape(n.tile(e.extra_dim,[r,1,1]),[-1,4]),n.reshape(o,[-1,4]));a=n.reshape(a,[r,a.shape[0]/r,4]);let s=n.sigmoid(n.slice(t,[0,0,1],[-1,-1,-1])),i=n.slice(s,[0,0,0],[-1,-1,1]);i=n.reshape(i,[r,i.shape[1]]);let c=n.unstack(a),m=n.unstack(i);return{boxes:c,scores:m}})}function ht(o,t){return n.tidy(()=>{let e=o.shape[0],r=n.reshape(lt(o,t.box_encoding_predictor),[e,-1,1,4]),a=n.reshape(lt(o,t.class_predictor),[e,-1,3]);return{boxPredictionEncoding:r,classPrediction:a}})}function Jr(o,t,e){return n.tidy(()=>{let r=H(o,e.conv_0,[1,1]),a=H(r,e.conv_1,[2,2]),s=H(a,e.conv_2,[1,1]),i=H(s,e.conv_3,[2,2]),c=H(i,e.conv_4,[1,1]),m=H(c,e.conv_5,[2,2]),p=H(m,e.conv_6,[1,1]),u=H(p,e.conv_7,[2,2]),f=ht(t,e.box_predictor_0),l=ht(o,e.box_predictor_1),d=ht(a,e.box_predictor_2),g=ht(i,e.box_predictor_3),_=ht(m,e.box_predictor_4),h=ht(u,e.box_predictor_5),x=n.concat([f.boxPredictionEncoding,l.boxPredictionEncoding,d.boxPredictionEncoding,g.boxPredictionEncoding,_.boxPredictionEncoding,h.boxPredictionEncoding],1),T=n.concat([f.classPrediction,l.classPrediction,d.classPrediction,g.classPrediction,_.classPrediction,h.classPrediction],1);return{boxPredictions:x,classPredictions:T}})}var V=class{constructor({minConfidence:t,maxResults:e}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=t||.5,this._maxResults=e||100,typeof this._minConfidence!="number"||this._minConfidence<=0||this._minConfidence>=1)throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);if(typeof this._maxResults!="number")throw new Error(`${this._name} - expected maxResults to be a number`)}get minConfidence(){return this._minConfidence}get maxResults(){return this._maxResults}};var St=class extends I{constructor(){super("SsdMobilenetv1")}forwardInput(t){let{params:e}=this;if(!e)throw new Error("SsdMobilenetv1 - load model before inference");return n.tidy(()=>{let r=n.cast(t.toBatchTensor(512,!1),"float32"),a=n.sub(n.div(r,127.5),1),s=jr(a,e.mobilenetv1),{boxPredictions:i,classPredictions:c}=Jr(s.out,s.conv11,e.prediction_layer);return Xr(i,c,e.output_layer)})}async forward(t){return this.forwardInput(await D(t))}async locateFaces(t,e={}){let{maxResults:r,minConfidence:a}=new V(e),s=await D(t),{boxes:i,scores:c}=this.forwardInput(s),m=i[0],p=c[0];for(let v=1;v{let[M,B]=[Math.max(0,x[v][0]),Math.min(1,x[v][2])].map($=>$*h),[z,U]=[Math.max(0,x[v][1]),Math.min(1,x[v][3])].map($=>$*_);return new E(u[v],new zt(z,M,U-z,B-M),{height:s.getInputHeight(0),width:s.getInputWidth(0)})});return m.dispose(),p.dispose(),T}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(t){return Vr(t)}extractParams(t){return Gr(t)}};function Zo(o){let t=new St;return t.extractWeights(o),t}function dl(o){return Zo(o)}var Ko=class extends St{};var qr=.4,Zr=[new b(.738768,.874946),new b(2.42204,2.65704),new b(4.30971,7.04493),new b(10.246,4.59428),new b(12.6868,11.8741)],Kr=[new b(1.603231,2.094468),new b(6.041143,7.080126),new b(2.882459,3.518061),new b(4.266906,5.178857),new b(9.041765,10.66308)],Qr=[117.001,114.697,97.404],to="tiny_yolov2_model",eo="tiny_yolov2_separable_conv_model";var Pe=o=>typeof o=="number";function ro(o){if(!o)throw new Error(`invalid config: ${o}`);if(typeof o.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${o.withSeparableConvs}`);if(!Pe(o.iouThreshold)||o.iouThreshold<0||o.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${o.iouThreshold}`);if(!Array.isArray(o.classes)||!o.classes.length||!o.classes.every(t=>typeof t=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(o.classes)}`);if(!Array.isArray(o.anchors)||!o.anchors.length||!o.anchors.map(t=>t||{}).every(t=>Pe(t.x)&&Pe(t.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(o.anchors)}`);if(o.meanRgb&&(!Array.isArray(o.meanRgb)||o.meanRgb.length!==3||!o.meanRgb.every(Pe)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(o.meanRgb)}`)}function At(o){return n.tidy(()=>{let t=n.mul(o,n.scalar(.10000000149011612));return n.add(n.relu(n.sub(o,t)),t)})}function Q(o,t){return n.tidy(()=>{let e=n.pad(o,[[0,0],[1,1],[1,1],[0,0]]);return e=n.conv2d(e,t.conv.filters,[1,1],"valid"),e=n.sub(e,t.bn.sub),e=n.mul(e,t.bn.truediv),e=n.add(e,t.conv.bias),At(e)})}function tt(o,t){return n.tidy(()=>{let e=n.pad(o,[[0,0],[1,1],[1,1],[0,0]]);return e=n.separableConv2d(e,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),e=n.add(e,t.bias),At(e)})}function Qo(o,t){let e=Ct(o,t);function r(i,c){let m=n.tensor1d(o(i)),p=n.tensor1d(o(i));return t.push({paramPath:`${c}/sub`},{paramPath:`${c}/truediv`}),{sub:m,truediv:p}}function a(i,c,m){let p=e(i,c,3,`${m}/conv`),u=r(c,`${m}/bn`);return{conv:p,bn:u}}let s=It(o,t);return{extractConvParams:e,extractConvWithBatchNormParams:a,extractSeparableConvParams:s}}function oo(o,t,e,r){let{extractWeights:a,getRemainingWeights:s}=L(o),i=[],{extractConvParams:c,extractConvWithBatchNormParams:m,extractSeparableConvParams:p}=Qo(a,i),u;if(t.withSeparableConvs){let[f,l,d,g,_,h,x,T,v]=r,M=t.isFirstLayerConv2d?c(f,l,3,"conv0"):p(f,l,"conv0"),B=p(l,d,"conv1"),z=p(d,g,"conv2"),U=p(g,_,"conv3"),$=p(_,h,"conv4"),rt=p(h,x,"conv5"),ot=T?p(x,T,"conv6"):void 0,nt=v?p(T,v,"conv7"):void 0,Pt=c(v||T||x,5*e,1,"conv8");u={conv0:M,conv1:B,conv2:z,conv3:U,conv4:$,conv5:rt,conv6:ot,conv7:nt,conv8:Pt}}else{let[f,l,d,g,_,h,x,T,v]=r,M=m(f,l,"conv0"),B=m(l,d,"conv1"),z=m(d,g,"conv2"),U=m(g,_,"conv3"),$=m(_,h,"conv4"),rt=m(h,x,"conv5"),ot=m(x,T,"conv6"),nt=m(T,v,"conv7"),Pt=c(v,5*e,1,"conv8");u={conv0:M,conv1:B,conv2:z,conv3:U,conv4:$,conv5:rt,conv6:ot,conv7:nt,conv8:Pt}}if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{params:u,paramMappings:i}}function tn(o,t){let e=W(o,t);function r(c){let m=e(`${c}/sub`,1),p=e(`${c}/truediv`,1);return{sub:m,truediv:p}}function a(c){let m=e(`${c}/filters`,4),p=e(`${c}/bias`,1);return{filters:m,bias:p}}function s(c){let m=a(`${c}/conv`),p=r(`${c}/bn`);return{conv:m,bn:p}}let i=Nt(e);return{extractConvParams:a,extractConvWithBatchNormParams:s,extractSeparableConvParams:i}}function no(o,t){let e=[],{extractConvParams:r,extractConvWithBatchNormParams:a,extractSeparableConvParams:s}=tn(o,e),i;if(t.withSeparableConvs){let c=t.filterSizes&&t.filterSizes.length||9;i={conv0:t.isFirstLayerConv2d?r("conv0"):s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:c>7?s("conv6"):void 0,conv7:c>8?s("conv7"):void 0,conv8:r("conv8")}}else i={conv0:a("conv0"),conv1:a("conv1"),conv2:a("conv2"),conv3:a("conv3"),conv4:a("conv4"),conv5:a("conv5"),conv6:a("conv6"),conv7:a("conv7"),conv8:r("conv8")};return N(o,e),{params:i,paramMappings:e}}var et=class{constructor({inputSize:t,scoreThreshold:e}={}){this._name="TinyYolov2Options";if(this._inputSize=t||416,this._scoreThreshold=e||.5,typeof this._inputSize!="number"||this._inputSize%32!==0)throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);if(typeof this._scoreThreshold!="number"||this._scoreThreshold<=0||this._scoreThreshold>=1)throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`)}get inputSize(){return this._inputSize}get scoreThreshold(){return this._scoreThreshold}};var Ke=class extends I{constructor(t){super("TinyYolov2");ro(t),this._config=t}get config(){return this._config}get withClassScores(){return this.config.withClassScores||this.config.classes.length>1}get boxEncodingSize(){return 5+(this.withClassScores?this.config.classes.length:0)}runTinyYolov2(t,e){let r=Q(t,e.conv0);return r=n.maxPool(r,[2,2],[2,2],"same"),r=Q(r,e.conv1),r=n.maxPool(r,[2,2],[2,2],"same"),r=Q(r,e.conv2),r=n.maxPool(r,[2,2],[2,2],"same"),r=Q(r,e.conv3),r=n.maxPool(r,[2,2],[2,2],"same"),r=Q(r,e.conv4),r=n.maxPool(r,[2,2],[2,2],"same"),r=Q(r,e.conv5),r=n.maxPool(r,[2,2],[1,1],"same"),r=Q(r,e.conv6),r=Q(r,e.conv7),lt(r,e.conv8,"valid",!1)}runMobilenet(t,e){let r=this.config.isFirstLayerConv2d?At(lt(t,e.conv0,"valid",!1)):tt(t,e.conv0);return r=n.maxPool(r,[2,2],[2,2],"same"),r=tt(r,e.conv1),r=n.maxPool(r,[2,2],[2,2],"same"),r=tt(r,e.conv2),r=n.maxPool(r,[2,2],[2,2],"same"),r=tt(r,e.conv3),r=n.maxPool(r,[2,2],[2,2],"same"),r=tt(r,e.conv4),r=n.maxPool(r,[2,2],[2,2],"same"),r=tt(r,e.conv5),r=n.maxPool(r,[2,2],[1,1],"same"),r=e.conv6?tt(r,e.conv6):r,r=e.conv7?tt(r,e.conv7):r,lt(r,e.conv8,"valid",!1)}forwardInput(t,e){let{params:r}=this;if(!r)throw new Error("TinyYolov2 - load model before inference");return n.tidy(()=>{let a=n.cast(t.toBatchTensor(e,!1),"float32");return a=this.config.meanRgb?J(a,this.config.meanRgb):a,a=a.div(255),this.config.withSeparableConvs?this.runMobilenet(a,r):this.runTinyYolov2(a,r)})}async forward(t,e){return this.forwardInput(await D(t),e)}async detect(t,e={}){let{inputSize:r,scoreThreshold:a}=new et(e),s=await D(t),i=await this.forwardInput(s,r),c=n.tidy(()=>n.unstack(i)[0].expandDims()),m={width:s.getInputWidth(0),height:s.getInputHeight(0)},p=await this.extractBoxes(c,s.getReshapedInputDimensions(0),a);i.dispose(),c.dispose();let u=p.map(h=>h.box),f=p.map(h=>h.score),l=p.map(h=>h.classScore),d=p.map(h=>this.config.classes[h.label]);return br(u.map(h=>h.rescale(r)),f,this.config.iouThreshold,!0).map(h=>new ft(f[h],l[h],d[h],u[h],m))}getDefaultModelName(){return""}extractParamsFromWeightMap(t){return no(t,this.config)}extractParams(t){let e=this.config.filterSizes||Ke.DEFAULT_FILTER_SIZES,r=e?e.length:void 0;if(r!==7&&r!==8&&r!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${r} filterSizes in config`);return oo(t,this.config,this.boxEncodingSize,e)}async extractBoxes(t,e,r){let{width:a,height:s}=e,i=Math.max(a,s),c=i/a,m=i/s,p=t.shape[1],u=this.config.anchors.length,[f,l,d]=n.tidy(()=>{let x=t.reshape([p,p,u,this.boxEncodingSize]),T=x.slice([0,0,0,0],[p,p,u,4]),v=x.slice([0,0,0,4],[p,p,u,1]),M=this.withClassScores?n.softmax(x.slice([0,0,0,5],[p,p,u,this.config.classes.length]),3):n.scalar(0);return[T,v,M]}),g=[],_=await l.array(),h=await f.array();for(let x=0;xr){let B=(T+ie(h[x][T][v][0]))/p*c,z=(x+ie(h[x][T][v][1]))/p*m,U=Math.exp(h[x][T][v][2])*this.config.anchors[v].x/p*c,$=Math.exp(h[x][T][v][3])*this.config.anchors[v].y/p*m,rt=B-U/2,ot=z-$/2,nt={row:x,col:T,anchor:v},{classScore:Pt,label:pr}=this.withClassScores?await this.extractPredictedClass(d,nt):{classScore:1,label:0};g.push({box:new Ht(rt,ot,rt+U,ot+$),score:M,classScore:M*Pt,label:pr,...nt})}}return f.dispose(),l.dispose(),d.dispose(),g}async extractPredictedClass(t,e){let{row:r,col:a,anchor:s}=e,i=await t.array();return Array(this.config.classes.length).fill(0).map((c,m)=>i[r][a][s][m]).map((c,m)=>({classScore:c,label:m})).reduce((c,m)=>c.classScore>m.classScore?c:m)}},kt=Ke;kt.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var oe=class extends kt{constructor(t=!0){let e={withSeparableConvs:t,iouThreshold:qr,classes:["face"],...t?{anchors:Kr,meanRgb:Qr}:{anchors:Zr,withClassScores:!0}};super(e)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(t,e){return(await this.detect(t,e)).map(a=>new E(a.score,a.relativeBox,{width:a.imageWidth,height:a.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?eo:to}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};function ad(o,t=!0){let e=new oe(t);return e.extractWeights(o),e}var Qe=class extends et{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}};var j=class{async then(t){return t(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function bt(o,t,e,r,a=({alignedRect:s})=>s){let s=o.map(m=>Lt(m)?a(m):m.detection),i=r||(t instanceof n.Tensor?await Ut(t,s):await jt(t,s)),c=await e(i);return i.forEach(m=>m instanceof n.Tensor&&m.dispose()),c}async function Wt(o,t,e,r,a){return bt([o],t,async s=>e(s[0]),r,a)}var ao=.4,so=[new b(1.603231,2.094468),new b(6.041143,7.080126),new b(2.882459,3.518061),new b(4.266906,5.178857),new b(9.041765,10.66308)],io=[117.001,114.697,97.404];var ne=class extends kt{constructor(){let t={withSeparableConvs:!0,iouThreshold:ao,classes:["face"],anchors:so,meanRgb:io,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(t)}get anchors(){return this.config.anchors}async locateFaces(t,e){return(await this.detect(t,e)).map(a=>new E(a.score,a.relativeBox,{width:a.imageWidth,height:a.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};var w={ssdMobilenetv1:new St,tinyFaceDetector:new ne,tinyYolov2:new oe,faceLandmark68Net:new te,faceLandmark68TinyNet:new je,faceRecognitionNet:new re,faceExpressionNet:new Be,ageGenderNet:new Ge},en=(o,t)=>w.ssdMobilenetv1.locateFaces(o,t),kd=(o,t)=>w.tinyFaceDetector.locateFaces(o,t),Wd=(o,t)=>w.tinyYolov2.locateFaces(o,t),rn=o=>w.faceLandmark68Net.detectLandmarks(o),Bd=o=>w.faceLandmark68TinyNet.detectLandmarks(o),Rd=o=>w.faceRecognitionNet.computeFaceDescriptor(o),$d=o=>w.faceExpressionNet.predictExpressions(o),Od=o=>w.ageGenderNet.predictAgeAndGender(o),on=o=>w.ssdMobilenetv1.load(o),Hd=o=>w.tinyFaceDetector.load(o),zd=o=>w.tinyYolov2.load(o),Yd=o=>w.faceLandmark68Net.load(o),Gd=o=>w.faceLandmark68TinyNet.load(o),Vd=o=>w.faceRecognitionNet.load(o),jd=o=>w.faceExpressionNet.load(o),Ud=o=>w.ageGenderNet.load(o),Xd=on,Jd=en,qd=rn;var tr=class extends j{constructor(t,e,r){super();this.parentTask=t;this.input=e;this.extractedFaces=r}},Bt=class extends tr{async run(){let t=await this.parentTask,e=await bt(t,this.input,async r=>Promise.all(r.map(a=>w.faceExpressionNet.predictExpressions(a))),this.extractedFaces);return t.map((r,a)=>Re(r,e[a]))}withAgeAndGender(){return new $t(this,this.input)}},Rt=class extends tr{async run(){let t=await this.parentTask;if(!t)return;let e=await Wt(t,this.input,r=>w.faceExpressionNet.predictExpressions(r),this.extractedFaces);return Re(t,e)}withAgeAndGender(){return new Ot(this,this.input)}},gt=class extends Bt{withAgeAndGender(){return new vt(this,this.input)}withFaceDescriptors(){return new Tt(this,this.input)}},xt=class extends Rt{withAgeAndGender(){return new yt(this,this.input)}withFaceDescriptor(){return new _t(this,this.input)}};var er=class extends j{constructor(t,e,r){super();this.parentTask=t;this.input=e;this.extractedFaces=r}},$t=class extends er{async run(){let t=await this.parentTask,e=await bt(t,this.input,async r=>Promise.all(r.map(a=>w.ageGenderNet.predictAgeAndGender(a))),this.extractedFaces);return t.map((r,a)=>{let{age:s,gender:i,genderProbability:c}=e[a];return qe(Ze(r,i,c),s)})}withFaceExpressions(){return new Bt(this,this.input)}},Ot=class extends er{async run(){let t=await this.parentTask;if(!t)return;let{age:e,gender:r,genderProbability:a}=await Wt(t,this.input,s=>w.ageGenderNet.predictAgeAndGender(s),this.extractedFaces);return qe(Ze(t,r,a),e)}withFaceExpressions(){return new Rt(this,this.input)}},vt=class extends $t{withFaceExpressions(){return new gt(this,this.input)}withFaceDescriptors(){return new Tt(this,this.input)}},yt=class extends Ot{withFaceExpressions(){return new xt(this,this.input)}withFaceDescriptor(){return new _t(this,this.input)}};var rr=class extends j{constructor(t,e){super();this.parentTask=t;this.input=e}},Tt=class extends rr{async run(){let t=await this.parentTask;return(await bt(t,this.input,r=>Promise.all(r.map(a=>w.faceRecognitionNet.computeFaceDescriptor(a))),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}))).map((r,a)=>Je(t[a],r))}withFaceExpressions(){return new gt(this,this.input)}withAgeAndGender(){return new vt(this,this.input)}},_t=class extends rr{async run(){let t=await this.parentTask;if(!t)return;let e=await Wt(t,this.input,r=>w.faceRecognitionNet.computeFaceDescriptor(r),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}));return Je(t,e)}withFaceExpressions(){return new xt(this,this.input)}withAgeAndGender(){return new yt(this,this.input)}};var or=class extends j{constructor(t,e,r){super();this.parentTask=t;this.input=e;this.useTinyLandmarkNet=r}get landmarkNet(){return this.useTinyLandmarkNet?w.faceLandmark68TinyNet:w.faceLandmark68Net}},nr=class extends or{async run(){let t=await this.parentTask,e=t.map(s=>s.detection),r=this.input instanceof n.Tensor?await Ut(this.input,e):await jt(this.input,e),a=await Promise.all(r.map(s=>this.landmarkNet.detectLandmarks(s)));return r.forEach(s=>s instanceof n.Tensor&&s.dispose()),t.map((s,i)=>Kt(s,a[i]))}withFaceExpressions(){return new gt(this,this.input)}withAgeAndGender(){return new vt(this,this.input)}withFaceDescriptors(){return new Tt(this,this.input)}},ar=class extends or{async run(){let t=await this.parentTask;if(!t)return;let{detection:e}=t,r=this.input instanceof n.Tensor?await Ut(this.input,[e]):await jt(this.input,[e]),a=await this.landmarkNet.detectLandmarks(r[0]);return r.forEach(s=>s instanceof n.Tensor&&s.dispose()),Kt(t,a)}withFaceExpressions(){return new xt(this,this.input)}withAgeAndGender(){return new yt(this,this.input)}withFaceDescriptor(){return new _t(this,this.input)}};var sr=class extends j{constructor(t,e=new V){super();this.input=t;this.options=e}},we=class extends sr{async run(){let{input:t,options:e}=this,r;if(e instanceof Qe)r=w.tinyFaceDetector.locateFaces(t,e);else if(e instanceof V)r=w.ssdMobilenetv1.locateFaces(t,e);else if(e instanceof et)r=w.tinyYolov2.locateFaces(t,e);else throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | TinyYolov2Options");return r}runAndExtendWithFaceDetections(){return new Promise((t,e)=>{this.run().then(r=>t(r.map(a=>Ft({},a)))).catch(r=>e(r))})}withFaceLandmarks(t=!1){return new nr(this.runAndExtendWithFaceDetections(),this.input,t)}withFaceExpressions(){return new Bt(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new $t(this.runAndExtendWithFaceDetections(),this.input)}},ir=class extends sr{async run(){let t=await new we(this.input,this.options),e=t[0];return t.forEach(r=>{r.score>e.score&&(e=r)}),e}runAndExtendWithFaceDetection(){return new Promise(async t=>{let e=await this.run();t(e?Ft({},e):void 0)})}withFaceLandmarks(t=!1){return new ar(this.runAndExtendWithFaceDetection(),this.input,t)}withFaceExpressions(){return new Rt(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Ot(this.runAndExtendWithFaceDetection(),this.input)}};function Uh(o,t=new V){return new ir(o,t)}function cr(o,t=new V){return new we(o,t)}async function nn(o,t){return cr(o,new V(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function Qh(o,t={}){return cr(o,new et(t)).withFaceLandmarks().withFaceDescriptors()}var tb=nn;function co(o,t){if(o.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");let e=Array.from(o),r=Array.from(t);return Math.sqrt(e.map((a,s)=>a-r[s]).reduce((a,s)=>a+s**2,0))}var mr=class{constructor(t,e=.6){this._distanceThreshold=e;let r=Array.isArray(t)?t:[t];if(!r.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let a=1,s=()=>`person ${a++}`;this._labeledDescriptors=r.map(i=>{if(i instanceof at)return i;if(i instanceof Float32Array)return new at(s(),[i]);if(i.descriptor&&i.descriptor instanceof Float32Array)return new at(s(),[i.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(t,e){return e.map(r=>co(r,t)).reduce((r,a)=>r+a,0)/(e.length||1)}matchDescriptor(t){return this.labeledDescriptors.map(({descriptors:e,label:r})=>new ce(r,this.computeMeanDistance(t,e))).reduce((e,r)=>e.distancet.toJSON())}}static fromJSON(t){let e=t.labeledDescriptors.map(r=>at.fromJSON(r));return new mr(e,t.distanceThreshold)}};function xb(o){let t=new ne;return t.extractWeights(o),t}function an(o,t){let{width:e,height:r}=new S(t.width,t.height);if(e<=0||r<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:e,height:r})}`);if(Array.isArray(o))return o.map(a=>an(a,{width:e,height:r}));if(Lt(o)){let a=o.detection.forSize(e,r),s=o.unshiftedLandmarks.forSize(a.box.width,a.box.height);return Kt(Ft(o,a),s)}return K(o)?Ft(o,o.detection.forSize(e,r)):o instanceof O||o instanceof E?o.forSize(e,r):o}var Cb=Lr;export{Ge as AgeGenderNet,Ht as BoundingBox,F as Box,j as ComposableTask,Tt as ComputeAllFaceDescriptorsTask,rr as ComputeFaceDescriptorsTaskBase,_t as ComputeSingleFaceDescriptorTask,nr as DetectAllFaceLandmarksTask,we as DetectAllFacesTask,or as DetectFaceLandmarksTaskBase,sr as DetectFacesTaskBase,ar as DetectSingleFaceLandmarksTask,ir as DetectSingleFaceTask,S as Dimensions,Cr as FACE_EXPRESSION_LABELS,E as FaceDetection,Ko as FaceDetectionNet,Be as FaceExpressionNet,dt as FaceExpressions,te as FaceLandmark68Net,je as FaceLandmark68TinyNet,Oo as FaceLandmarkNet,O as FaceLandmarks,Eo as FaceLandmarks5,Yt as FaceLandmarks68,ce as FaceMatch,mr as FaceMatcher,re as FaceRecognitionNet,Ye as Gender,me as LabeledBox,at as LabeledFaceDescriptors,it as NetInput,I as NeuralNetwork,ft as ObjectDetection,b as Point,Mo as PredictedBox,zt as Rect,St as SsdMobilenetv1,V as SsdMobilenetv1Options,ne as TinyFaceDetector,Qe as TinyFaceDetectorOptions,oe as TinyYolov2,et as TinyYolov2Options,tb as allFaces,nn as allFacesSsdMobilenetv1,Qh as allFacesTinyYolov2,xr as awaitMediaLoaded,vr as bufferToImage,Rd as computeFaceDescriptor,Mt as createCanvas,le as createCanvasFromMedia,dl as createFaceDetectionNet,df as createFaceRecognitionNet,Zo as createSsdMobilenetv1,xb as createTinyFaceDetector,ad as createTinyYolov2,cr as detectAllFaces,rn as detectFaceLandmarks,Bd as detectFaceLandmarksTiny,qd as detectLandmarks,Uh as detectSingleFace,Nr as draw,P as env,co as euclideanDistance,qe as extendWithAge,Je as extendWithFaceDescriptor,Ft as extendWithFaceDetection,Re as extendWithFaceExpressions,Kt as extendWithFaceLandmarks,Ze as extendWithGender,Ut as extractFaceTensors,jt as extractFaces,Pi as fetchImage,_r as fetchJson,Mi as fetchNetWeights,ct as fetchOrThrow,Ai as fetchVideo,k as getContext2dOrThrow,Et as getMediaDimensions,yr as imageTensorToCanvas,Tr as imageToSquare,Yn as inverseSigmoid,dr as iou,We as isMediaElement,fe as isMediaLoaded,xf as isWithAge,K as isWithFaceDetection,Ir as isWithFaceExpressions,Lt as isWithFaceLandmarks,_f as isWithGender,Ud as loadAgeGenderModel,Xd as loadFaceDetectionModel,jd as loadFaceExpressionModel,Yd as loadFaceLandmarkModel,Gd as loadFaceLandmarkTinyModel,Vd as loadFaceRecognitionModel,on as loadSsdMobilenetv1Model,Hd as loadTinyFaceDetectorModel,zd as loadTinyYolov2Model,wr as loadWeightMap,Jd as locateFaces,Hi as matchDimensions,hr as minBbox,w as nets,br as nonMaxSuppression,J as normalize,gr as padToSquare,Od as predictAgeAndGender,$d as recognizeFaceExpressions,an as resizeResults,Dt as resolveInput,Hn as shuffleArray,ie as sigmoid,en as ssdMobilenetv1,n as tf,kd as tinyFaceDetector,Wd as tinyYolov2,D as toNetInput,lr as utils,ro as validateConfig,Cb as version}; diff --git a/dist/face-api.esm.js b/dist/face-api.esm.js index 21ddcd7..9ed8dd4 100644 --- a/dist/face-api.esm.js +++ b/dist/face-api.esm.js @@ -4,63 +4,63 @@ author: ' */ -var f$=Object.defineProperty;var g$=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,n)=>(typeof require!="undefined"?require:t)[n]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var Ry=(e,t)=>{for(var n in t)f$(e,n,{get:t[n],enumerable:!0})};var Le={};Ry(Le,{Abs:()=>fl,Acos:()=>gl,Acosh:()=>yl,AdadeltaOptimizer:()=>nf,AdagradOptimizer:()=>af,AdamOptimizer:()=>rf,AdamaxOptimizer:()=>sf,Add:()=>ls,AddN:()=>pi,All:()=>bl,Any:()=>xl,ArgMax:()=>ci,ArgMin:()=>Kp,Asin:()=>vl,Asinh:()=>wl,Atan:()=>kl,Atan2:()=>Sl,Atanh:()=>Il,AvgPool:()=>di,AvgPool3D:()=>Xp,AvgPool3DGrad:()=>Kh,AvgPoolGrad:()=>qh,BackendWasm:()=>S_,BatchMatMul:()=>hi,BatchToSpaceND:()=>Nl,Bincount:()=>Xh,BroadcastArgs:()=>Yh,BroadcastTo:()=>eI,Callback:()=>aN,CallbackList:()=>o2,Cast:()=>mi,Ceil:()=>fi,ClipByValue:()=>us,Complex:()=>Jh,ComplexAbs:()=>Yp,Concat:()=>Tl,Conv2D:()=>gi,Conv2DBackpropFilter:()=>Zh,Conv2DBackpropInput:()=>yi,Conv3D:()=>Jp,Conv3DBackpropFilterV2:()=>Qh,Conv3DBackpropInputV2:()=>em,Cos:()=>bi,Cosh:()=>xi,CropAndResize:()=>Cl,Cumsum:()=>vi,CustomCallback:()=>u2,DataStorage:()=>Gh,DenseBincount:()=>tm,DepthToSpace:()=>El,DepthwiseConv2dNative:()=>wi,DepthwiseConv2dNativeBackpropFilter:()=>nm,DepthwiseConv2dNativeBackpropInput:()=>am,Diag:()=>rm,Dilation2D:()=>Zp,Dilation2DBackpropFilter:()=>bh,Dilation2DBackpropInput:()=>yh,ENV:()=>Qb,EarlyStopping:()=>rN,Einsum:()=>sm,Elu:()=>Ii,EluGrad:()=>im,Environment:()=>Zk,Equal:()=>Al,Erf:()=>_l,Exp:()=>Si,ExpandDims:()=>$l,Expm1:()=>Fl,FFT:()=>om,Fill:()=>Qp,FlipLeftRight:()=>Dl,Floor:()=>Ni,FloorDiv:()=>Ti,FromPixels:()=>xh,FusedBatchNorm:()=>Ci,FusedConv2D:()=>qs,FusedDepthwiseConv2D:()=>Ks,GPGPUContext:()=>dh,GatherNd:()=>Ml,GatherV2:()=>Rl,GraphModel:()=>EN,Greater:()=>Pl,GreaterEqual:()=>Ei,History:()=>l2,IFFT:()=>lm,Identity:()=>_i,Imag:()=>um,InputSpec:()=>Bt,IsFinite:()=>Ol,IsInf:()=>Ll,IsNan:()=>zl,KernelBackend:()=>qp,LRN:()=>nc,LRNGrad:()=>cm,LayerVariable:()=>a2,LayersModel:()=>Nr,LeakyRelu:()=>Ai,Less:()=>Bl,LessEqual:()=>Wl,LinSpace:()=>pm,Log:()=>$i,Log1p:()=>Ul,LogSoftmax:()=>tI,LogicalAnd:()=>Vl,LogicalNot:()=>ec,LogicalOr:()=>tc,MathBackendWebGL:()=>$f,Max:()=>Fi,MaxPool:()=>Ri,MaxPool3D:()=>ac,MaxPool3DGrad:()=>hm,MaxPoolGrad:()=>dm,MaxPoolWithArgmax:()=>mm,Maximum:()=>Di,Mean:()=>Mi,Min:()=>Pi,Minimum:()=>Oi,MirrorPad:()=>Li,Mod:()=>Gl,MomentumOptimizer:()=>of,Multinomial:()=>fm,Multiply:()=>zi,Neg:()=>Hl,NonMaxSuppressionV3:()=>ql,NonMaxSuppressionV4:()=>Kl,NonMaxSuppressionV5:()=>Xl,NotEqual:()=>jl,OP_SCOPE_SUFFIX:()=>cI,OneHot:()=>Bi,OnesLike:()=>Yl,Optimizer:()=>_r,OptimizerConstructors:()=>Ur,Pack:()=>Jl,PadV2:()=>Wi,Pool:()=>dF,Pow:()=>Ui,Prelu:()=>Vi,Prod:()=>Zl,RMSPropOptimizer:()=>lf,RNN:()=>fr,Range:()=>rc,Rank:()=>Qy,Real:()=>gm,RealDiv:()=>ki,Reciprocal:()=>Ql,Reduction:()=>wn,Relu:()=>Gi,Relu6:()=>ji,Reshape:()=>eu,ResizeBilinear:()=>Hi,ResizeBilinearGrad:()=>bm,ResizeNearestNeighbor:()=>sc,ResizeNearestNeighborGrad:()=>ym,Reverse:()=>qi,RotateWithOffset:()=>gu,Round:()=>Ki,Rsqrt:()=>Xi,SGDOptimizer:()=>Tc,ScatterNd:()=>tu,Select:()=>nu,Selu:()=>au,Sequential:()=>ll,Sigmoid:()=>Ji,Sign:()=>iu,Sin:()=>Yi,Sinh:()=>su,Slice:()=>ru,Softmax:()=>eo,Softplus:()=>ou,SpaceToBatchND:()=>lu,SparseFillEmptyRows:()=>ic,SparseReshape:()=>pu,SparseSegmentMean:()=>oc,SparseSegmentSum:()=>lc,SparseToDense:()=>xm,SplitV:()=>uu,Sqrt:()=>Zi,Square:()=>uc,SquaredDifference:()=>to,Step:()=>cs,StridedSlice:()=>cu,StringNGrams:()=>vm,StringSplit:()=>wm,StringToHashBucketFast:()=>km,Sub:()=>no,Sum:()=>Qi,SymbolicTensor:()=>Ba,Tan:()=>ao,Tanh:()=>ro,Tensor:()=>Ae,TensorBuffer:()=>jt,Tile:()=>ps,TopK:()=>du,Transform:()=>hu,Transpose:()=>so,Unique:()=>Im,Unpack:()=>mu,UnsortedSegmentSum:()=>pc,Variable:()=>Zr,ZerosLike:()=>fu,_FusedMatMul:()=>js,abs:()=>zt,acos:()=>fx,acosh:()=>gx,add:()=>J,addN:()=>GI,all:()=>_m,any:()=>Pp,argMax:()=>Js,argMin:()=>yx,asin:()=>bx,asinh:()=>xx,atan:()=>vx,atan2:()=>wx,atanh:()=>kx,avgPool:()=>ma,avgPool3d:()=>Sx,backend:()=>VI,backend_util:()=>E,basicLSTMCell:()=>rM,batchNorm:()=>Tr,batchNorm2d:()=>KI,batchNorm3d:()=>XI,batchNorm4d:()=>YI,batchToSpaceND:()=>yc,bincount:()=>Nx,booleanMaskAsync:()=>u3,broadcastArgs:()=>JI,broadcastTo:()=>Zo,broadcast_util:()=>yu,browser:()=>io,buffer:()=>He,callbacks:()=>MG,cast:()=>oe,ceil:()=>Tx,clipByValue:()=>nn,clone:()=>Sr,complex:()=>Qr,concat:()=>Qe,concat1d:()=>ZI,concat2d:()=>QI,concat3d:()=>eS,concat4d:()=>tS,constraints:()=>GS,conv1d:()=>Am,conv2d:()=>Rt,conv2dTranspose:()=>$m,conv3d:()=>Ex,conv3dTranspose:()=>aS,copyRegisteredKernels:()=>gF,cos:()=>bc,cosh:()=>Fm,cosineWindow:()=>ev,cumsum:()=>Dm,customGrad:()=>ur,data:()=>_N,denseBincount:()=>rS,deprecationWarn:()=>mx,depthToSpace:()=>_x,depthwiseConv2d:()=>ms,deregisterOp:()=>LG,device_util:()=>mc,diag:()=>RM,dilation2d:()=>Ax,disableDeprecationWarnings:()=>gR,dispose:()=>De,disposeVariables:()=>yR,div:()=>fe,divNoNan:()=>$x,dot:()=>sS,dropout:()=>TS,einsum:()=>iS,elu:()=>bu,enableDebugMode:()=>fR,enableProdMode:()=>mR,enclosingPowerOfTwo:()=>CS,engine:()=>ar,env:()=>Y,equal:()=>Jn,erf:()=>Fx,exp:()=>mn,expandDims:()=>dn,expm1:()=>Dx,eye:()=>Rx,fft:()=>Sc,fill:()=>Cn,findBackend:()=>SR,findBackendFactory:()=>NR,floor:()=>xu,floorDiv:()=>Em,forceHalfFloat:()=>qC,fused:()=>ts,gather:()=>Qs,gatherND:()=>NS,gather_util:()=>lx,getBackend:()=>kR,getGradient:()=>Jy,getKernel:()=>vh,getKernelsForBackend:()=>wh,getThreadsCount:()=>Rle,gpgpu_util:()=>NC,grad:()=>uP,grads:()=>pP,greater:()=>Bn,greaterEqual:()=>fs,ifft:()=>sl,imag:()=>Rm,image:()=>Xn,inTopKAsync:()=>v3,initializers:()=>KS,input:()=>I2,io:()=>Qt,irfft:()=>Km,isFinite:()=>oS,isInf:()=>lS,isNaN:()=>Mx,keep:()=>en,kernel_impls:()=>mr,layers:()=>t2,leakyRelu:()=>xc,less:()=>Mm,lessEqual:()=>gs,linalg:()=>OS,linspace:()=>uS,loadGraphModel:()=>W6,loadLayersModel:()=>HU,localResponseNormalization:()=>Px,log:()=>Zn,log1p:()=>vc,logSigmoid:()=>cS,logSoftmax:()=>Om,logSumExp:()=>zx,logicalAnd:()=>Sa,logicalNot:()=>wc,logicalOr:()=>Lm,logicalXor:()=>fS,losses:()=>nz,matMul:()=>Fe,math:()=>NI,max:()=>ka,maxPool:()=>Pt,maxPool3d:()=>Bx,maxPoolWithArgmax:()=>gS,maximum:()=>hr,mean:()=>_t,memory:()=>Sh,meshgrid:()=>FP,metrics:()=>eN,min:()=>Op,minimum:()=>vu,mirrorPad:()=>Wx,mod:()=>Ux,model:()=>VU,models:()=>tN,moments:()=>zm,movingAverage:()=>d3,mul:()=>B,multiRNNCell:()=>BP,multinomial:()=>yS,neg:()=>It,nextFrame:()=>LS,norm:()=>Jm,notEqual:()=>ti,oneHot:()=>al,ones:()=>Kn,onesLike:()=>Qn,op:()=>z,outerProduct:()=>HP,pad:()=>fa,pad1d:()=>KP,pad2d:()=>YP,pad3d:()=>ZP,pad4d:()=>eO,pool:()=>bS,pow:()=>Cr,prelu:()=>Ic,print:()=>wI,prod:()=>Bm,profile:()=>bR,rand:()=>uO,randomGamma:()=>hO,randomNormal:()=>xS,randomUniform:()=>wu,range:()=>rl,ready:()=>wR,real:()=>Lp,reciprocal:()=>Hx,registerBackend:()=>Cm,registerCallbackConstructor:()=>jU,registerGradient:()=>nI,registerKernel:()=>cc,registerOp:()=>OG,regularizers:()=>nN,relu:()=>Xe,relu6:()=>Wm,removeBackend:()=>IR,reshape:()=>W,reverse:()=>ea,reverse1d:()=>kO,reverse2d:()=>SO,reverse3d:()=>TO,reverse4d:()=>EO,rfft:()=>Nc,round:()=>Um,rsqrt:()=>Vm,scalar:()=>ke,scatterND:()=>SS,scatter_util:()=>ux,selu:()=>Gm,separableConv2d:()=>lo,sequential:()=>GU,serialization:()=>se,setBackend:()=>vR,setPlatform:()=>TR,setThreadsCount:()=>Dle,setWasmPath:()=>$le,setWasmPaths:()=>Fle,setWebGLContext:()=>YT,setdiff1dAsync:()=>vS,sigmoid:()=>da,sign:()=>jx,signal:()=>tz,sin:()=>Hm,sinh:()=>jm,slice:()=>Ge,slice1d:()=>qm,slice2d:()=>qx,slice3d:()=>ku,slice4d:()=>zp,slice_util:()=>qt,softmax:()=>Xa,softplus:()=>oo,spaceToBatchND:()=>kc,sparse:()=>xp,sparseToDense:()=>Qx,spectral:()=>ez,split:()=>On,sqrt:()=>ln,square:()=>lt,squaredDifference:()=>Xm,squeeze:()=>pr,stack:()=>Mt,step:()=>Iu,stridedSlice:()=>Kx,string:()=>sh,sub:()=>ce,sum:()=>be,sumOutType:()=>Nm,tan:()=>Xx,tanh:()=>Zs,tensor:()=>Yn,tensor1d:()=>qe,tensor2d:()=>Ua,tensor3d:()=>Tm,tensor4d:()=>Ya,tensor5d:()=>e3,tensor6d:()=>t3,tensor_util:()=>Wa,test_util:()=>BI,tidy:()=>O,tile:()=>Pn,time:()=>xR,topk:()=>Yx,train:()=>Rs,transpose:()=>Me,truncatedNormal:()=>Ym,unique:()=>Th,unregisterGradient:()=>fF,unregisterKernel:()=>mF,unsortedSegmentSum:()=>Jx,unstack:()=>dt,upcastType:()=>Ia,util:()=>k,valueAndGrad:()=>cP,valueAndGrads:()=>dP,variable:()=>wS,variableGrads:()=>pS,version:()=>Hle,version_converter:()=>U6,version_core:()=>hR,version_layers:()=>Sv,version_wasm:()=>Mle,version_webgl:()=>YY,webgl:()=>JY,webgl_util:()=>XT,where:()=>hn,whereAsync:()=>Zx,zeros:()=>wt,zerosLike:()=>Ke});var y$=Object.create,Vh=Object.defineProperty,b$=Object.getOwnPropertyDescriptor,x$=Object.getOwnPropertyNames,v$=Object.getPrototypeOf,w$=Object.prototype.hasOwnProperty,k$=e=>Vh(e,"__esModule",{value:!0}),mt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Re=(e,t)=>{for(var n in t)Vh(e,n,{get:t[n],enumerable:!0})},I$=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of x$(t))!w$.call(e,r)&&(n||r!=="default")&&Vh(e,r,{get:()=>t[r],enumerable:!(a=b$(t,r))||a.enumerable});return e},li=(e,t)=>I$(k$(Vh(e!=null?y$(v$(e)):{},"default",!t&&e&&e.__esModule?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e),S$=mt((e,t)=>{t.exports=a;var n=null;try{n=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(S){}function a(S,M,V){this.low=S|0,this.high=M|0,this.unsigned=!!V}a.prototype.__isLong__,Object.defineProperty(a.prototype,"__isLong__",{value:!0});function r(S){return(S&&S.__isLong__)===!0}a.isLong=r;var s={},i={};function o(S,M){var V,j,q;return M?(S>>>=0,(q=0<=S&&S<256)&&(j=i[S],j)?j:(V=u(S,(S|0)<0?-1:0,!0),q&&(i[S]=V),V)):(S|=0,(q=-128<=S&&S<128)&&(j=s[S],j)?j:(V=u(S,S<0?-1:0,!1),q&&(s[S]=V),V))}a.fromInt=o;function l(S,M){if(isNaN(S))return M?v:x;if(M){if(S<0)return v;if(S>=g)return $}else{if(S<=-y)return P;if(S+1>=y)return _}return S<0?l(-S,M).neg():u(S%f|0,S/f|0,M)}a.fromNumber=l;function u(S,M,V){return new a(S,M,V)}a.fromBits=u;var p=Math.pow;function d(S,M,V){if(S.length===0)throw Error("empty string");if(S==="NaN"||S==="Infinity"||S==="+Infinity"||S==="-Infinity")return x;if(typeof M=="number"?(V=M,M=!1):M=!!M,V=V||10,V<2||360)throw Error("interior hyphen");if(j===0)return d(S.substring(1),M,V).neg();for(var q=l(p(V,8)),K=x,Q=0;Q>>0:this.low},F.toNumber=function(){return this.unsigned?(this.high>>>0)*f+(this.low>>>0):this.high*f+(this.low>>>0)},F.toString=function(S){if(S=S||10,S<2||36>>0,Z=re.toString(S);if(K=ee,K.isZero())return Z+Q;for(;Z.length<6;)Z="0"+Z;Q=""+Z+Q}},F.getHighBits=function(){return this.high},F.getHighBitsUnsigned=function(){return this.high>>>0},F.getLowBits=function(){return this.low},F.getLowBitsUnsigned=function(){return this.low>>>0},F.getNumBitsAbs=function(){if(this.isNegative())return this.eq(P)?64:this.neg().getNumBitsAbs();for(var S=this.high!=0?this.high:this.low,M=31;M>0&&(S&1<=0},F.isOdd=function(){return(this.low&1)===1},F.isEven=function(){return(this.low&1)===0},F.equals=function(S){return r(S)||(S=c(S)),this.unsigned!==S.unsigned&&this.high>>>31===1&&S.high>>>31===1?!1:this.high===S.high&&this.low===S.low},F.eq=F.equals,F.notEquals=function(S){return!this.eq(S)},F.neq=F.notEquals,F.ne=F.notEquals,F.lessThan=function(S){return this.comp(S)<0},F.lt=F.lessThan,F.lessThanOrEqual=function(S){return this.comp(S)<=0},F.lte=F.lessThanOrEqual,F.le=F.lessThanOrEqual,F.greaterThan=function(S){return this.comp(S)>0},F.gt=F.greaterThan,F.greaterThanOrEqual=function(S){return this.comp(S)>=0},F.gte=F.greaterThanOrEqual,F.ge=F.greaterThanOrEqual,F.compare=function(S){if(r(S)||(S=c(S)),this.eq(S))return 0;var M=this.isNegative(),V=S.isNegative();return M&&!V?-1:!M&&V?1:this.unsigned?S.high>>>0>this.high>>>0||S.high===this.high&&S.low>>>0>this.low>>>0?-1:1:this.sub(S).isNegative()?-1:1},F.comp=F.compare,F.negate=function(){return!this.unsigned&&this.eq(P)?P:this.not().add(w)},F.neg=F.negate,F.add=function(S){r(S)||(S=c(S));var M=this.high>>>16,V=this.high&65535,j=this.low>>>16,q=this.low&65535,K=S.high>>>16,Q=S.high&65535,ee=S.low>>>16,re=S.low&65535,Z=0,ie=0,ae=0,le=0;return le+=q+re,ae+=le>>>16,le&=65535,ae+=j+ee,ie+=ae>>>16,ae&=65535,ie+=V+Q,Z+=ie>>>16,ie&=65535,Z+=M+K,Z&=65535,u(ae<<16|le,Z<<16|ie,this.unsigned)},F.subtract=function(S){return r(S)||(S=c(S)),this.add(S.neg())},F.sub=F.subtract,F.multiply=function(S){if(this.isZero())return x;if(r(S)||(S=c(S)),n){var M=n.mul(this.low,this.high,S.low,S.high);return u(M,n.get_high(),this.unsigned)}if(S.isZero())return x;if(this.eq(P))return S.isOdd()?P:x;if(S.eq(P))return this.isOdd()?P:x;if(this.isNegative())return S.isNegative()?this.neg().mul(S.neg()):this.neg().mul(S).neg();if(S.isNegative())return this.mul(S.neg()).neg();if(this.lt(b)&&S.lt(b))return l(this.toNumber()*S.toNumber(),this.unsigned);var V=this.high>>>16,j=this.high&65535,q=this.low>>>16,K=this.low&65535,Q=S.high>>>16,ee=S.high&65535,re=S.low>>>16,Z=S.low&65535,ie=0,ae=0,le=0,ue=0;return ue+=K*Z,le+=ue>>>16,ue&=65535,le+=q*Z,ae+=le>>>16,le&=65535,le+=K*re,ae+=le>>>16,le&=65535,ae+=j*Z,ie+=ae>>>16,ae&=65535,ae+=q*re,ie+=ae>>>16,ae&=65535,ae+=K*ee,ie+=ae>>>16,ae&=65535,ie+=V*Z+j*re+q*ee+K*Q,ie&=65535,u(le<<16|ue,ie<<16|ae,this.unsigned)},F.mul=F.multiply,F.divide=function(S){if(r(S)||(S=c(S)),S.isZero())throw Error("division by zero");if(n){if(!this.unsigned&&this.high===-2147483648&&S.low===-1&&S.high===-1)return this;var M=(this.unsigned?n.div_u:n.div_s)(this.low,this.high,S.low,S.high);return u(M,n.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?v:x;var V,j,q;if(this.unsigned){if(S.unsigned||(S=S.toUnsigned()),S.gt(this))return v;if(S.gt(this.shru(1)))return T;q=v}else{if(this.eq(P)){if(S.eq(w)||S.eq(C))return P;if(S.eq(P))return w;var K=this.shr(1);return V=K.div(S).shl(1),V.eq(x)?S.isNegative()?w:C:(j=this.sub(S.mul(V)),q=V.add(j.div(S)),q)}else if(S.eq(P))return this.unsigned?v:x;if(this.isNegative())return S.isNegative()?this.neg().div(S.neg()):this.neg().div(S).neg();if(S.isNegative())return this.div(S.neg()).neg();q=x}for(j=this;j.gte(S);){V=Math.max(1,Math.floor(j.toNumber()/S.toNumber()));for(var Q=Math.ceil(Math.log(V)/Math.LN2),ee=Q<=48?1:p(2,Q-48),re=l(V),Z=re.mul(S);Z.isNegative()||Z.gt(j);)V-=ee,re=l(V,this.unsigned),Z=re.mul(S);re.isZero()&&(re=w),q=q.add(re),j=j.sub(Z)}return q},F.div=F.divide,F.modulo=function(S){if(r(S)||(S=c(S)),n){var M=(this.unsigned?n.rem_u:n.rem_s)(this.low,this.high,S.low,S.high);return u(M,n.get_high(),this.unsigned)}return this.sub(this.div(S).mul(S))},F.mod=F.modulo,F.rem=F.modulo,F.not=function(){return u(~this.low,~this.high,this.unsigned)},F.and=function(S){return r(S)||(S=c(S)),u(this.low&S.low,this.high&S.high,this.unsigned)},F.or=function(S){return r(S)||(S=c(S)),u(this.low|S.low,this.high|S.high,this.unsigned)},F.xor=function(S){return r(S)||(S=c(S)),u(this.low^S.low,this.high^S.high,this.unsigned)},F.shiftLeft=function(S){return r(S)&&(S=S.toInt()),(S&=63)===0?this:S<32?u(this.low<>>32-S,this.unsigned):u(0,this.low<>>S|this.high<<32-S,this.high>>S,this.unsigned):u(this.high>>S-32,this.high>=0?0:-1,this.unsigned)},F.shr=F.shiftRight,F.shiftRightUnsigned=function(S){if(r(S)&&(S=S.toInt()),S&=63,S===0)return this;var M=this.high;if(S<32){var V=this.low;return u(V>>>S|M<<32-S,M>>>S,this.unsigned)}else return S===32?u(M,0,this.unsigned):u(M>>>S-32,0,this.unsigned)},F.shru=F.shiftRightUnsigned,F.shr_u=F.shiftRightUnsigned,F.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},F.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},F.toBytes=function(S){return S?this.toBytesLE():this.toBytesBE()},F.toBytesLE=function(){var S=this.high,M=this.low;return[M&255,M>>>8&255,M>>>16&255,M>>>24,S&255,S>>>8&255,S>>>16&255,S>>>24]},F.toBytesBE=function(){var S=this.high,M=this.low;return[S>>>24,S>>>16&255,S>>>8&255,S&255,M>>>24,M>>>16&255,M>>>8&255,M&255]},a.fromBytes=function(S,M,V){return V?a.fromBytesLE(S,M):a.fromBytesBE(S,M)},a.fromBytesLE=function(S,M){return new a(S[0]|S[1]<<8|S[2]<<16|S[3]<<24,S[4]|S[5]<<8|S[6]<<16|S[7]<<24,M)},a.fromBytesBE=function(S,M){return new a(S[4]<<24|S[5]<<16|S[6]<<8|S[7],S[0]<<24|S[1]<<16|S[2]<<8|S[3],M)}}),N$=mt(()=>{}),T$=mt(()=>{}),C$=mt((e,t)=>{(function(n,a,r){function s(u){var p=this,d=l();p.next=function(){var c=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=c-(p.c=c|0)},p.c=1,p.s0=d(" "),p.s1=d(" "),p.s2=d(" "),p.s0-=d(u),p.s0<0&&(p.s0+=1),p.s1-=d(u),p.s1<0&&(p.s1+=1),p.s2-=d(u),p.s2<0&&(p.s2+=1),d=null}function i(u,p){return p.c=u.c,p.s0=u.s0,p.s1=u.s1,p.s2=u.s2,p}function o(u,p){var d=new s(u),c=p&&p.state,h=d.next;return h.int32=function(){return d.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,c&&(typeof c=="object"&&i(c,d),h.state=function(){return i(d,{})}),h}function l(){var u=4022871197,p=function(d){d=d.toString();for(var c=0;c>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return p}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),E$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var c=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^c^c>>>8},l===(l|0)?u.x=l:p+=l;for(var d=0;d>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),_$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(c^c<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:p+=l;for(var d=0;d>>4),u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function o(l,u){var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),A$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.x,c=u.i,h,m,f;return h=d[c],h^=h>>>7,m=h^h<<24,h=d[c+1&7],m^=h^h>>>10,h=d[c+3&7],m^=h^h>>>3,h=d[c+4&7],m^=h^h<<7,h=d[c+7&7],h=h^h<<13,m^=h^h<<9,d[c]=m,u.i=c+1&7,m};function p(d,c){var h,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=""+c,h=0;h0;--h)d.next()}p(u,l)}function i(l,u){return u.x=l.x.slice(),u.i=l.i,u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.x&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),$$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.w,c=u.X,h=u.i,m,f;return u.w=d=d+1640531527|0,f=c[h+34&127],m=c[h=h+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=c[h]=f^m,u.i=h,f+(d^d>>>16)|0};function p(d,c){var h,m,f,g,y,b=[],x=128;for(c===(c|0)?(m=c,c=null):(c=c+"\0",m=0,x=Math.max(x,c.length)),f=0,g=-32;g>>15,m^=m<<4,m^=m>>>13,g>=0&&(y=y+1640531527|0,h=b[g&127]^=m+y,f=h==0?f+1:0);for(f>=128&&(b[(c&&c.length||0)&127]=-1),f=127,g=4*128;g>0;--g)m=b[f+34&127],h=b[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,b[f]=m^h;d.w=y,d.X=b,d.i=f}p(u,l)}function i(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.X&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),F$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.b,h=u.c,m=u.d,f=u.a;return c=c<<25^c>>>7^h,h=h-m|0,m=m<<24^m>>>8^f,f=f-c|0,u.b=c=c<<20^c>>>12^h,u.c=h=h-m|0,u.d=m<<16^h>>>16^f,u.a=f-c|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):p+=l;for(var d=0;d>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),Lk=mt(()=>{}),D$=mt((e,t)=>{(function(n,a){var r=this,s=256,i=6,o=52,l="random",u=a.pow(s,i),p=a.pow(2,o),d=p*2,c=s-1,h;function m(w,T,C){var _=[];T=T==!0?{entropy:!0}:T||{};var $=b(y(T.entropy?[w,v(n)]:w==null?x():w,3),_),P=new f(_),F=function(){for(var S=P.g(i),M=u,V=0;S=d;)S/=2,M/=2,V>>>=1;return(S+V)/M};return F.int32=function(){return P.g(4)|0},F.quick=function(){return P.g(4)/4294967296},F.double=F,b(v(P.S),n),(T.pass||C||function(S,M,V,j){return j&&(j.S&&g(j,P),S.state=function(){return g(P,{})}),V?(a[l]=S,M):S})(F,$,"global"in T?T.global:this==a,T.state)}a["seed"+l]=m;function f(w){var T,C=w.length,_=this,$=0,P=_.i=_.j=0,F=_.S=[];for(C||(w=[C++]);${var n=C$(),a=E$(),r=_$(),s=A$(),i=$$(),o=F$(),l=D$();l.alea=n,l.xor128=a,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),R$=mt((e,t)=>{(function(n,a,r){function s(u){var p=this,d=l();p.next=function(){var c=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=c-(p.c=c|0)},p.c=1,p.s0=d(" "),p.s1=d(" "),p.s2=d(" "),p.s0-=d(u),p.s0<0&&(p.s0+=1),p.s1-=d(u),p.s1<0&&(p.s1+=1),p.s2-=d(u),p.s2<0&&(p.s2+=1),d=null}function i(u,p){return p.c=u.c,p.s0=u.s0,p.s1=u.s1,p.s2=u.s2,p}function o(u,p){var d=new s(u),c=p&&p.state,h=d.next;return h.int32=function(){return d.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,c&&(typeof c=="object"&&i(c,d),h.state=function(){return i(d,{})}),h}function l(){var u=4022871197,p=function(d){d=String(d);for(var c=0;c>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return p}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),M$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var c=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^c^c>>>8},l===(l|0)?u.x=l:p+=l;for(var d=0;d>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),P$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(c^c<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:p+=l;for(var d=0;d>>4),u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function o(l,u){var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),O$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.x,c=u.i,h,m,f;return h=d[c],h^=h>>>7,m=h^h<<24,h=d[c+1&7],m^=h^h>>>10,h=d[c+3&7],m^=h^h>>>3,h=d[c+4&7],m^=h^h<<7,h=d[c+7&7],h=h^h<<13,m^=h^h<<9,d[c]=m,u.i=c+1&7,m};function p(d,c){var h,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=""+c,h=0;h0;--h)d.next()}p(u,l)}function i(l,u){return u.x=l.x.slice(),u.i=l.i,u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.x&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),L$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.w,c=u.X,h=u.i,m,f;return u.w=d=d+1640531527|0,f=c[h+34&127],m=c[h=h+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=c[h]=f^m,u.i=h,f+(d^d>>>16)|0};function p(d,c){var h,m,f,g,y,b=[],x=128;for(c===(c|0)?(m=c,c=null):(c=c+"\0",m=0,x=Math.max(x,c.length)),f=0,g=-32;g>>15,m^=m<<4,m^=m>>>13,g>=0&&(y=y+1640531527|0,h=b[g&127]^=m+y,f=h==0?f+1:0);for(f>=128&&(b[(c&&c.length||0)&127]=-1),f=127,g=4*128;g>0;--g)m=b[f+34&127],h=b[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,b[f]=m^h;d.w=y,d.X=b,d.i=f}p(u,l)}function i(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.X&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),z$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.b,h=u.c,m=u.d,f=u.a;return c=c<<25^c>>>7^h,h=h-m|0,m=m<<24^m>>>8^f,f=f-c|0,u.b=c=c<<20^c>>>12^h,u.c=h=h-m|0,u.d=m<<16^h>>>16^f,u.a=f-c|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):p+=l;for(var d=0;d>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),B$=mt((e,t)=>{(function(n,a,r){var s=256,i=6,o=52,l="random",u=r.pow(s,i),p=r.pow(2,o),d=p*2,c=s-1,h;function m(w,T,C){var _=[];T=T==!0?{entropy:!0}:T||{};var $=b(y(T.entropy?[w,v(a)]:w==null?x():w,3),_),P=new f(_),F=function(){for(var S=P.g(i),M=u,V=0;S=d;)S/=2,M/=2,V>>>=1;return(S+V)/M};return F.int32=function(){return P.g(4)|0},F.quick=function(){return P.g(4)/4294967296},F.double=F,b(v(P.S),a),(T.pass||C||function(S,M,V,j){return j&&(j.S&&g(j,P),S.state=function(){return g(P,{})}),V?(r[l]=S,M):S})(F,$,"global"in T?T.global:this==r,T.state)}function f(w){var T,C=w.length,_=this,$=0,P=_.i=_.j=0,F=_.S=[];for(C||(w=[C++]);${var n=R$(),a=M$(),r=P$(),s=O$(),i=L$(),o=z$(),l=B$();l.alea=n,l.xor128=a,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),Wk=mt(()=>{}),Xb=mt(()=>{}),mh=mt(()=>{}),W$=mt(()=>{}),U$=mt(()=>{}),V$=mt(()=>{}),G$=mt((e,t)=>{var n=(()=>{var a=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(a=a||__filename),function(r){r=r||{};function s(){return Te.buffer!=yn&&$a(Te.buffer),dd}function i(){return Te.buffer!=yn&&$a(Te.buffer),hd}function o(){return Te.buffer!=yn&&$a(Te.buffer),tp}function l(){return Te.buffer!=yn&&$a(Te.buffer),md}function u(){return Te.buffer!=yn&&$a(Te.buffer),fd}function p(){return Te.buffer!=yn&&$a(Te.buffer),gd}function d(){return Te.buffer!=yn&&$a(Te.buffer),yd}var c=typeof r!="undefined"?r:{},h,m;c.ready=new Promise(function(N,D){h=N,m=D});var f;typeof process!="undefined"&&process.listeners&&(f={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},c),y=[],b="./this.program",x=(N,D)=>{throw D},v=typeof window=="object",w=typeof importScripts=="function",T=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",C=c.ENVIRONMENT_IS_PTHREAD||!1,_="";function $(N){return c.locateFile?c.locateFile(N,_):_+N}var P,F,S,M;function V(N){N instanceof cp||Z("exiting due to exception: "+N)}var j,q,K;if(T){w?_=mh().dirname(_)+"/":_=__dirname+"/",K=()=>{q||(j=Xb(),q=mh())},P=function(D,U){return K(),D=q.normalize(D),j.readFileSync(D,U?void 0:"utf8")},S=D=>{var U=P(D,!0);return U.buffer||(U=new Uint8Array(U)),U},F=(D,U,X)=>{K(),D=q.normalize(D),j.readFile(D,function(pe,he){pe?X(pe):U(he.buffer)})},process.argv.length>1&&(b=process.argv[1].replace(/\\/g,"/")),y=process.argv.slice(2),process.on("uncaughtException",function(D){if(!(D instanceof cp))throw D}),process.on("unhandledRejection",function(D){throw D}),x=(D,U)=>{if(Ts())throw process.exitCode=D,U;V(U),process.exit(D)},c.inspect=function(){return"[Emscripten Module object]"};let N;try{N=W$()}catch(D){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),D}global.Worker=N.Worker}else(v||w)&&(w?_=self.location.href:typeof document!="undefined"&&document.currentScript&&(_=document.currentScript.src),typeof a!="undefined"&&a&&(_=a),_.indexOf("blob:")!==0?_=_.substr(0,_.replace(/[?#].*/,"").lastIndexOf("/")+1):_="",T||(P=N=>{var D=new XMLHttpRequest;return D.open("GET",N,!1),D.send(null),D.responseText},w&&(S=N=>{var D=new XMLHttpRequest;return D.open("GET",N,!1),D.responseType="arraybuffer",D.send(null),new Uint8Array(D.response)}),F=(N,D,U)=>{var X=new XMLHttpRequest;X.open("GET",N,!0),X.responseType="arraybuffer",X.onload=()=>{if(X.status==200||X.status==0&&X.response){D(X.response);return}U()},X.onerror=U,X.send(null)}),M=N=>document.title=N);T&&typeof performance=="undefined"&&(global.performance=U$().performance);var Q=console.log.bind(console),ee=console.warn.bind(console);T&&(K(),Q=N=>j.writeSync(1,N+` +var S$=Object.defineProperty;var N$=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,n)=>(typeof require!="undefined"?require:t)[n]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var My=(e,t)=>{for(var n in t)S$(e,n,{get:t[n],enumerable:!0})};var Le={};My(Le,{Abs:()=>fl,Acos:()=>gl,Acosh:()=>yl,AdadeltaOptimizer:()=>nf,AdagradOptimizer:()=>af,AdamOptimizer:()=>rf,AdamaxOptimizer:()=>sf,Add:()=>us,AddN:()=>ci,All:()=>bl,Any:()=>xl,ArgMax:()=>di,ArgMin:()=>Xp,Asin:()=>vl,Asinh:()=>wl,Atan:()=>kl,Atan2:()=>Sl,Atanh:()=>Il,AvgPool:()=>hi,AvgPool3D:()=>Yp,AvgPool3DGrad:()=>Kh,AvgPoolGrad:()=>qh,BackendWasm:()=>DE,BatchMatMul:()=>mi,BatchToSpaceND:()=>Nl,Bincount:()=>Xh,BroadcastArgs:()=>Yh,BroadcastTo:()=>lI,Callback:()=>pN,CallbackList:()=>m2,Cast:()=>fi,Ceil:()=>gi,ClipByValue:()=>ps,Complex:()=>Jh,ComplexAbs:()=>Jp,Concat:()=>Tl,Conv2D:()=>yi,Conv2DBackpropFilter:()=>Qh,Conv2DBackpropInput:()=>bi,Conv3D:()=>Qp,Conv3DBackpropFilterV2:()=>Zh,Conv3DBackpropInputV2:()=>em,Cos:()=>xi,Cosh:()=>vi,CropAndResize:()=>_l,Cumprod:()=>Cl,Cumsum:()=>wi,CustomCallback:()=>g2,DataStorage:()=>Gh,DenseBincount:()=>tm,DepthToSpace:()=>El,DepthwiseConv2dNative:()=>ki,DepthwiseConv2dNativeBackpropFilter:()=>nm,DepthwiseConv2dNativeBackpropInput:()=>am,Diag:()=>rm,Dilation2D:()=>Zp,Dilation2DBackpropFilter:()=>xh,Dilation2DBackpropInput:()=>bh,ENV:()=>tx,EarlyStopping:()=>cN,Einsum:()=>sm,Elu:()=>Si,EluGrad:()=>im,Environment:()=>iI,Equal:()=>$l,Erf:()=>Al,Exp:()=>Ni,ExpandDims:()=>Fl,Expm1:()=>Dl,FFT:()=>om,Fill:()=>ec,FlipLeftRight:()=>Rl,Floor:()=>Ti,FloorDiv:()=>Ci,FromPixels:()=>vh,FusedBatchNorm:()=>_i,FusedConv2D:()=>Ks,FusedDepthwiseConv2D:()=>Xs,GPGPUContext:()=>hh,GatherNd:()=>Pl,GatherV2:()=>Ml,GraphModel:()=>MN,Greater:()=>Ol,GreaterEqual:()=>Ei,History:()=>f2,IFFT:()=>lm,Identity:()=>Ai,Imag:()=>um,InputSpec:()=>Wt,IsFinite:()=>Ll,IsInf:()=>zl,IsNan:()=>Wl,KernelBackend:()=>Kp,LRN:()=>ac,LRNGrad:()=>cm,LayerVariable:()=>p2,LayersModel:()=>Nr,LeakyRelu:()=>$i,Less:()=>Bl,LessEqual:()=>Vl,LinSpace:()=>pm,Log:()=>Fi,Log1p:()=>Ul,LogSoftmax:()=>uI,LogicalAnd:()=>Gl,LogicalNot:()=>tc,LogicalOr:()=>nc,MathBackendWebGL:()=>$f,Max:()=>Di,MaxPool:()=>Mi,MaxPool3D:()=>rc,MaxPool3DGrad:()=>hm,MaxPoolGrad:()=>dm,MaxPoolWithArgmax:()=>mm,Maximum:()=>Ri,Mean:()=>Pi,Min:()=>Oi,Minimum:()=>Li,MirrorPad:()=>zi,Mod:()=>Hl,MomentumOptimizer:()=>of,Multinomial:()=>fm,Multiply:()=>Wi,Neg:()=>jl,NonMaxSuppressionV3:()=>Kl,NonMaxSuppressionV4:()=>Xl,NonMaxSuppressionV5:()=>Yl,NotEqual:()=>ql,OP_SCOPE_SUFFIX:()=>xI,OneHot:()=>Bi,OnesLike:()=>Jl,Optimizer:()=>Er,OptimizerConstructors:()=>Vr,Pack:()=>Ql,PadV2:()=>Vi,Pool:()=>vF,Pow:()=>Ui,Prelu:()=>Gi,Prod:()=>Zl,RMSPropOptimizer:()=>lf,RNN:()=>fr,Range:()=>sc,Rank:()=>eb,Real:()=>gm,RealDiv:()=>Ii,Reciprocal:()=>eu,Reduction:()=>kn,Relu:()=>Hi,Relu6:()=>qi,Reshape:()=>tu,ResizeBilinear:()=>ji,ResizeBilinearGrad:()=>bm,ResizeNearestNeighbor:()=>ic,ResizeNearestNeighborGrad:()=>ym,Reverse:()=>Ki,RotateWithOffset:()=>yu,Round:()=>Xi,Rsqrt:()=>Yi,SGDOptimizer:()=>Cc,ScatterNd:()=>nu,Select:()=>au,Selu:()=>ru,Sequential:()=>ul,Sigmoid:()=>Qi,Sign:()=>ou,Sin:()=>Ji,Sinh:()=>iu,Slice:()=>su,Softmax:()=>to,Softplus:()=>lu,SpaceToBatchND:()=>uu,SparseFillEmptyRows:()=>oc,SparseReshape:()=>cu,SparseSegmentMean:()=>lc,SparseSegmentSum:()=>uc,SparseToDense:()=>xm,SplitV:()=>pu,Sqrt:()=>Zi,Square:()=>pc,SquaredDifference:()=>no,Step:()=>ds,StridedSlice:()=>du,StringNGrams:()=>vm,StringSplit:()=>wm,StringToHashBucketFast:()=>km,Sub:()=>ao,Sum:()=>eo,SymbolicTensor:()=>Ba,Tan:()=>ro,Tanh:()=>so,Tensor:()=>Ae,TensorBuffer:()=>jt,Tile:()=>cs,TopK:()=>hu,Transform:()=>mu,Transpose:()=>io,Unique:()=>Im,Unpack:()=>fu,UnsortedSegmentSum:()=>cc,Variable:()=>Qr,ZerosLike:()=>gu,_FusedMatMul:()=>qs,abs:()=>zt,acos:()=>yx,acosh:()=>bx,add:()=>J,addN:()=>QI,all:()=>Em,any:()=>Op,argMax:()=>Qs,argMin:()=>xx,asin:()=>vx,asinh:()=>wx,atan:()=>kx,atan2:()=>Ix,atanh:()=>Sx,avgPool:()=>fa,avgPool3d:()=>Tx,backend:()=>JI,backend_util:()=>_,basicLSTMCell:()=>dM,batchNorm:()=>Tr,batchNorm2d:()=>nS,batchNorm3d:()=>aS,batchNorm4d:()=>rS,batchToSpaceND:()=>bc,bincount:()=>Cx,booleanMaskAsync:()=>b3,broadcastArgs:()=>sS,broadcastTo:()=>Zo,broadcast_util:()=>bu,browser:()=>oo,buffer:()=>He,callbacks:()=>GG,cast:()=>oe,ceil:()=>_x,clipByValue:()=>nn,clone:()=>Sr,complex:()=>Zr,concat:()=>Ze,concat1d:()=>iS,concat2d:()=>oS,concat3d:()=>lS,concat4d:()=>uS,constraints:()=>JS,conv1d:()=>Am,conv2d:()=>Rt,conv2dTranspose:()=>$m,conv3d:()=>Ax,conv3dTranspose:()=>cS,copyRegisteredKernels:()=>SF,cos:()=>xc,cosh:()=>Fm,cosineWindow:()=>av,cumprod:()=>$x,cumsum:()=>Dm,customGrad:()=>ur,data:()=>PN,denseBincount:()=>dS,deprecationWarn:()=>gx,depthToSpace:()=>Fx,depthwiseConv2d:()=>fs,deregisterOp:()=>qG,device_util:()=>fc,diag:()=>UM,dilation2d:()=>Dx,disableDeprecationWarnings:()=>SR,dispose:()=>De,disposeVariables:()=>NR,div:()=>fe,divNoNan:()=>Rx,dot:()=>hS,dropout:()=>RS,einsum:()=>mS,elu:()=>xu,enableDebugMode:()=>IR,enableProdMode:()=>kR,enclosingPowerOfTwo:()=>MS,engine:()=>ar,env:()=>X,equal:()=>Zn,erf:()=>Mx,exp:()=>fn,expandDims:()=>hn,expm1:()=>Px,eye:()=>Ox,fft:()=>Nc,fill:()=>Cn,findBackend:()=>FR,findBackendFactory:()=>DR,floor:()=>vu,floorDiv:()=>_m,forceHalfFloat:()=>t_,fused:()=>ts,gather:()=>ei,gatherND:()=>DS,gather_util:()=>px,getBackend:()=>AR,getGradient:()=>Qy,getKernel:()=>wh,getKernelsForBackend:()=>kh,getThreadsCount:()=>Xle,gpgpu_util:()=>DC,grad:()=>bP,grads:()=>xP,greater:()=>Un,greaterEqual:()=>gs,ifft:()=>il,imag:()=>Rm,image:()=>On,inTopKAsync:()=>E3,initializers:()=>t2,input:()=>A2,io:()=>Zt,irfft:()=>Km,isFinite:()=>fS,isInf:()=>gS,isNaN:()=>Lx,keep:()=>en,kernel_impls:()=>mr,layers:()=>l2,leakyRelu:()=>vc,less:()=>Mm,lessEqual:()=>ys,linalg:()=>HS,linspace:()=>yS,loadGraphModel:()=>Y6,loadLayersModel:()=>eU,localResponseNormalization:()=>zx,log:()=>ea,log1p:()=>wc,logSigmoid:()=>xS,logSoftmax:()=>Om,logSumExp:()=>Vx,logicalAnd:()=>Na,logicalNot:()=>kc,logicalOr:()=>Lm,logicalXor:()=>IS,losses:()=>cz,matMul:()=>Fe,math:()=>DI,max:()=>Ia,maxPool:()=>Pt,maxPool3d:()=>Ux,maxPoolWithArgmax:()=>SS,maximum:()=>hr,mean:()=>Et,memory:()=>Nh,meshgrid:()=>BP,metrics:()=>oN,min:()=>Lp,minimum:()=>wu,mirrorPad:()=>Gx,mod:()=>Hx,model:()=>QV,models:()=>lN,moments:()=>zm,movingAverage:()=>w3,mul:()=>W,multiRNNCell:()=>XP,multinomial:()=>NS,neg:()=>It,nextFrame:()=>iv,norm:()=>Jm,notEqual:()=>ni,oneHot:()=>rl,ones:()=>Jn,onesLike:()=>ta,op:()=>z,outerProduct:()=>eO,pad:()=>ga,pad1d:()=>aO,pad2d:()=>sO,pad3d:()=>oO,pad4d:()=>uO,pool:()=>TS,pow:()=>Cr,prelu:()=>Sc,print:()=>EI,prod:()=>Wm,profile:()=>TR,rand:()=>bO,randomGamma:()=>kO,randomNormal:()=>CS,randomUniform:()=>ku,range:()=>sl,ready:()=>ER,real:()=>zp,reciprocal:()=>Kx,registerBackend:()=>Cm,registerCallbackConstructor:()=>tU,registerGradient:()=>pI,registerKernel:()=>dc,registerOp:()=>jG,regularizers:()=>uN,relu:()=>Xe,relu6:()=>Bm,removeBackend:()=>$R,reshape:()=>B,reverse:()=>na,reverse1d:()=>$O,reverse2d:()=>DO,reverse3d:()=>MO,reverse4d:()=>OO,rfft:()=>Tc,round:()=>Vm,rsqrt:()=>Um,scalar:()=>ke,scatterND:()=>FS,scatter_util:()=>cx,selu:()=>Gm,separableConv2d:()=>uo,sequential:()=>ZV,serialization:()=>se,setBackend:()=>_R,setPlatform:()=>RR,setThreadsCount:()=>Kle,setWasmPath:()=>jle,setWasmPaths:()=>qle,setWebGLContext:()=>aC,setdiff1dAsync:()=>_S,sigmoid:()=>ha,sign:()=>Xx,signal:()=>pz,sin:()=>Hm,sinh:()=>jm,slice:()=>Ge,slice1d:()=>qm,slice2d:()=>Yx,slice3d:()=>Iu,slice4d:()=>Wp,slice_util:()=>qt,softmax:()=>Xa,softplus:()=>lo,spaceToBatchND:()=>Ic,sparse:()=>vp,sparseToDense:()=>nv,spectral:()=>uz,split:()=>Ln,sqrt:()=>ln,square:()=>lt,squaredDifference:()=>Xm,squeeze:()=>pr,stack:()=>Mt,step:()=>Su,stridedSlice:()=>Jx,string:()=>ih,sub:()=>ce,sum:()=>be,sumOutType:()=>Nm,tan:()=>Qx,tanh:()=>Zs,tensor:()=>Qn,tensor1d:()=>qe,tensor2d:()=>Ua,tensor3d:()=>Tm,tensor4d:()=>Ya,tensor5d:()=>u3,tensor6d:()=>p3,tensor_util:()=>Va,test_util:()=>KI,tidy:()=>O,tile:()=>Pn,time:()=>CR,topk:()=>Zx,train:()=>Ms,transpose:()=>Me,truncatedNormal:()=>Ym,unique:()=>Ch,unregisterGradient:()=>IF,unregisterKernel:()=>kF,unsortedSegmentSum:()=>ev,unstack:()=>ht,upcastType:()=>ma,util:()=>k,valueAndGrad:()=>vP,valueAndGrads:()=>wP,variable:()=>ES,variableGrads:()=>bS,version:()=>iue,version_converter:()=>J6,version_core:()=>wR,version_layers:()=>_v,version_wasm:()=>Yle,version_webgl:()=>i9,webgl:()=>o9,webgl_util:()=>nC,where:()=>mn,whereAsync:()=>tv,zeros:()=>wt,zerosLike:()=>Ke});var T$=Object.create,Yb=Object.defineProperty,C$=Object.getOwnPropertyDescriptor,_$=Object.getOwnPropertyNames,E$=Object.getPrototypeOf,A$=Object.prototype.hasOwnProperty,mt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Re=(e,t)=>{for(var n in t)Yb(e,n,{get:t[n],enumerable:!0})},$$=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of _$(t))!A$.call(e,r)&&r!==n&&Yb(e,r,{get:()=>t[r],enumerable:!(a=C$(t,r))||a.enumerable});return e},ui=(e,t,n)=>(n=e!=null?T$(E$(e)):{},$$(t||!e||!e.__esModule?Yb(n,"default",{value:e,enumerable:!0}):n,e)),F$=mt((e,t)=>{t.exports=a;var n=null;try{n=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(S){}function a(S,M,U){this.low=S|0,this.high=M|0,this.unsigned=!!U}a.prototype.__isLong__,Object.defineProperty(a.prototype,"__isLong__",{value:!0});function r(S){return(S&&S.__isLong__)===!0}a.isLong=r;var s={},i={};function o(S,M){var U,j,q;return M?(S>>>=0,(q=0<=S&&S<256)&&(j=i[S],j)?j:(U=u(S,(S|0)<0?-1:0,!0),q&&(i[S]=U),U)):(S|=0,(q=-128<=S&&S<128)&&(j=s[S],j)?j:(U=u(S,S<0?-1:0,!1),q&&(s[S]=U),U))}a.fromInt=o;function l(S,M){if(isNaN(S))return M?v:x;if(M){if(S<0)return v;if(S>=g)return $}else{if(S<=-y)return P;if(S+1>=y)return E}return S<0?l(-S,M).neg():u(S%f|0,S/f|0,M)}a.fromNumber=l;function u(S,M,U){return new a(S,M,U)}a.fromBits=u;var p=Math.pow;function d(S,M,U){if(S.length===0)throw Error("empty string");if(S==="NaN"||S==="Infinity"||S==="+Infinity"||S==="-Infinity")return x;if(typeof M=="number"?(U=M,M=!1):M=!!M,U=U||10,U<2||360)throw Error("interior hyphen");if(j===0)return d(S.substring(1),M,U).neg();for(var q=l(p(U,8)),K=x,Z=0;Z>>0:this.low},F.toNumber=function(){return this.unsigned?(this.high>>>0)*f+(this.low>>>0):this.high*f+(this.low>>>0)},F.toString=function(S){if(S=S||10,S<2||36>>0,Q=re.toString(S);if(K=ee,K.isZero())return Q+Z;for(;Q.length<6;)Q="0"+Q;Z=""+Q+Z}},F.getHighBits=function(){return this.high},F.getHighBitsUnsigned=function(){return this.high>>>0},F.getLowBits=function(){return this.low},F.getLowBitsUnsigned=function(){return this.low>>>0},F.getNumBitsAbs=function(){if(this.isNegative())return this.eq(P)?64:this.neg().getNumBitsAbs();for(var S=this.high!=0?this.high:this.low,M=31;M>0&&(S&1<=0},F.isOdd=function(){return(this.low&1)===1},F.isEven=function(){return(this.low&1)===0},F.equals=function(S){return r(S)||(S=c(S)),this.unsigned!==S.unsigned&&this.high>>>31===1&&S.high>>>31===1?!1:this.high===S.high&&this.low===S.low},F.eq=F.equals,F.notEquals=function(S){return!this.eq(S)},F.neq=F.notEquals,F.ne=F.notEquals,F.lessThan=function(S){return this.comp(S)<0},F.lt=F.lessThan,F.lessThanOrEqual=function(S){return this.comp(S)<=0},F.lte=F.lessThanOrEqual,F.le=F.lessThanOrEqual,F.greaterThan=function(S){return this.comp(S)>0},F.gt=F.greaterThan,F.greaterThanOrEqual=function(S){return this.comp(S)>=0},F.gte=F.greaterThanOrEqual,F.ge=F.greaterThanOrEqual,F.compare=function(S){if(r(S)||(S=c(S)),this.eq(S))return 0;var M=this.isNegative(),U=S.isNegative();return M&&!U?-1:!M&&U?1:this.unsigned?S.high>>>0>this.high>>>0||S.high===this.high&&S.low>>>0>this.low>>>0?-1:1:this.sub(S).isNegative()?-1:1},F.comp=F.compare,F.negate=function(){return!this.unsigned&&this.eq(P)?P:this.not().add(w)},F.neg=F.negate,F.add=function(S){r(S)||(S=c(S));var M=this.high>>>16,U=this.high&65535,j=this.low>>>16,q=this.low&65535,K=S.high>>>16,Z=S.high&65535,ee=S.low>>>16,re=S.low&65535,Q=0,ie=0,ae=0,le=0;return le+=q+re,ae+=le>>>16,le&=65535,ae+=j+ee,ie+=ae>>>16,ae&=65535,ie+=U+Z,Q+=ie>>>16,ie&=65535,Q+=M+K,Q&=65535,u(ae<<16|le,Q<<16|ie,this.unsigned)},F.subtract=function(S){return r(S)||(S=c(S)),this.add(S.neg())},F.sub=F.subtract,F.multiply=function(S){if(this.isZero())return x;if(r(S)||(S=c(S)),n){var M=n.mul(this.low,this.high,S.low,S.high);return u(M,n.get_high(),this.unsigned)}if(S.isZero())return x;if(this.eq(P))return S.isOdd()?P:x;if(S.eq(P))return this.isOdd()?P:x;if(this.isNegative())return S.isNegative()?this.neg().mul(S.neg()):this.neg().mul(S).neg();if(S.isNegative())return this.mul(S.neg()).neg();if(this.lt(b)&&S.lt(b))return l(this.toNumber()*S.toNumber(),this.unsigned);var U=this.high>>>16,j=this.high&65535,q=this.low>>>16,K=this.low&65535,Z=S.high>>>16,ee=S.high&65535,re=S.low>>>16,Q=S.low&65535,ie=0,ae=0,le=0,ue=0;return ue+=K*Q,le+=ue>>>16,ue&=65535,le+=q*Q,ae+=le>>>16,le&=65535,le+=K*re,ae+=le>>>16,le&=65535,ae+=j*Q,ie+=ae>>>16,ae&=65535,ae+=q*re,ie+=ae>>>16,ae&=65535,ae+=K*ee,ie+=ae>>>16,ae&=65535,ie+=U*Q+j*re+q*ee+K*Z,ie&=65535,u(le<<16|ue,ie<<16|ae,this.unsigned)},F.mul=F.multiply,F.divide=function(S){if(r(S)||(S=c(S)),S.isZero())throw Error("division by zero");if(n){if(!this.unsigned&&this.high===-2147483648&&S.low===-1&&S.high===-1)return this;var M=(this.unsigned?n.div_u:n.div_s)(this.low,this.high,S.low,S.high);return u(M,n.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?v:x;var U,j,q;if(this.unsigned){if(S.unsigned||(S=S.toUnsigned()),S.gt(this))return v;if(S.gt(this.shru(1)))return T;q=v}else{if(this.eq(P)){if(S.eq(w)||S.eq(C))return P;if(S.eq(P))return w;var K=this.shr(1);return U=K.div(S).shl(1),U.eq(x)?S.isNegative()?w:C:(j=this.sub(S.mul(U)),q=U.add(j.div(S)),q)}else if(S.eq(P))return this.unsigned?v:x;if(this.isNegative())return S.isNegative()?this.neg().div(S.neg()):this.neg().div(S).neg();if(S.isNegative())return this.div(S.neg()).neg();q=x}for(j=this;j.gte(S);){U=Math.max(1,Math.floor(j.toNumber()/S.toNumber()));for(var Z=Math.ceil(Math.log(U)/Math.LN2),ee=Z<=48?1:p(2,Z-48),re=l(U),Q=re.mul(S);Q.isNegative()||Q.gt(j);)U-=ee,re=l(U,this.unsigned),Q=re.mul(S);re.isZero()&&(re=w),q=q.add(re),j=j.sub(Q)}return q},F.div=F.divide,F.modulo=function(S){if(r(S)||(S=c(S)),n){var M=(this.unsigned?n.rem_u:n.rem_s)(this.low,this.high,S.low,S.high);return u(M,n.get_high(),this.unsigned)}return this.sub(this.div(S).mul(S))},F.mod=F.modulo,F.rem=F.modulo,F.not=function(){return u(~this.low,~this.high,this.unsigned)},F.and=function(S){return r(S)||(S=c(S)),u(this.low&S.low,this.high&S.high,this.unsigned)},F.or=function(S){return r(S)||(S=c(S)),u(this.low|S.low,this.high|S.high,this.unsigned)},F.xor=function(S){return r(S)||(S=c(S)),u(this.low^S.low,this.high^S.high,this.unsigned)},F.shiftLeft=function(S){return r(S)&&(S=S.toInt()),(S&=63)===0?this:S<32?u(this.low<>>32-S,this.unsigned):u(0,this.low<>>S|this.high<<32-S,this.high>>S,this.unsigned):u(this.high>>S-32,this.high>=0?0:-1,this.unsigned)},F.shr=F.shiftRight,F.shiftRightUnsigned=function(S){if(r(S)&&(S=S.toInt()),S&=63,S===0)return this;var M=this.high;if(S<32){var U=this.low;return u(U>>>S|M<<32-S,M>>>S,this.unsigned)}else return S===32?u(M,0,this.unsigned):u(M>>>S-32,0,this.unsigned)},F.shru=F.shiftRightUnsigned,F.shr_u=F.shiftRightUnsigned,F.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},F.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},F.toBytes=function(S){return S?this.toBytesLE():this.toBytesBE()},F.toBytesLE=function(){var S=this.high,M=this.low;return[M&255,M>>>8&255,M>>>16&255,M>>>24,S&255,S>>>8&255,S>>>16&255,S>>>24]},F.toBytesBE=function(){var S=this.high,M=this.low;return[S>>>24,S>>>16&255,S>>>8&255,S&255,M>>>24,M>>>16&255,M>>>8&255,M&255]},a.fromBytes=function(S,M,U){return U?a.fromBytesLE(S,M):a.fromBytesBE(S,M)},a.fromBytesLE=function(S,M){return new a(S[0]|S[1]<<8|S[2]<<16|S[3]<<24,S[4]|S[5]<<8|S[6]<<16|S[7]<<24,M)},a.fromBytesBE=function(S,M){return new a(S[4]<<24|S[5]<<16|S[6]<<8|S[7],S[0]<<24|S[1]<<16|S[2]<<8|S[3],M)}}),D$=mt(()=>{}),R$=mt(()=>{}),M$=mt((e,t)=>{(function(n,a,r){function s(u){var p=this,d=l();p.next=function(){var c=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=c-(p.c=c|0)},p.c=1,p.s0=d(" "),p.s1=d(" "),p.s2=d(" "),p.s0-=d(u),p.s0<0&&(p.s0+=1),p.s1-=d(u),p.s1<0&&(p.s1+=1),p.s2-=d(u),p.s2<0&&(p.s2+=1),d=null}function i(u,p){return p.c=u.c,p.s0=u.s0,p.s1=u.s1,p.s2=u.s2,p}function o(u,p){var d=new s(u),c=p&&p.state,h=d.next;return h.int32=function(){return d.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,c&&(typeof c=="object"&&i(c,d),h.state=function(){return i(d,{})}),h}function l(){var u=4022871197,p=function(d){d=d.toString();for(var c=0;c>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return p}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),P$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var c=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^c^c>>>8},l===(l|0)?u.x=l:p+=l;for(var d=0;d>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),O$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(c^c<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:p+=l;for(var d=0;d>>4),u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function o(l,u){var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),L$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.x,c=u.i,h,m,f;return h=d[c],h^=h>>>7,m=h^h<<24,h=d[c+1&7],m^=h^h>>>10,h=d[c+3&7],m^=h^h>>>3,h=d[c+4&7],m^=h^h<<7,h=d[c+7&7],h=h^h<<13,m^=h^h<<9,d[c]=m,u.i=c+1&7,m};function p(d,c){var h,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=""+c,h=0;h0;--h)d.next()}p(u,l)}function i(l,u){return u.x=l.x.slice(),u.i=l.i,u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.x&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),z$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.w,c=u.X,h=u.i,m,f;return u.w=d=d+1640531527|0,f=c[h+34&127],m=c[h=h+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=c[h]=f^m,u.i=h,f+(d^d>>>16)|0};function p(d,c){var h,m,f,g,y,b=[],x=128;for(c===(c|0)?(m=c,c=null):(c=c+"\0",m=0,x=Math.max(x,c.length)),f=0,g=-32;g>>15,m^=m<<4,m^=m>>>13,g>=0&&(y=y+1640531527|0,h=b[g&127]^=m+y,f=h==0?f+1:0);for(f>=128&&(b[(c&&c.length||0)&127]=-1),f=127,g=4*128;g>0;--g)m=b[f+34&127],h=b[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,b[f]=m^h;d.w=y,d.X=b,d.i=f}p(u,l)}function i(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.X&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),W$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.b,h=u.c,m=u.d,f=u.a;return c=c<<25^c>>>7^h,h=h-m|0,m=m<<24^m>>>8^f,f=f-c|0,u.b=c=c<<20^c>>>12^h,u.c=h=h-m|0,u.d=m<<16^h>>>16^f,u.a=f-c|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):p+=l;for(var d=0;d>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),jk=mt(()=>{}),B$=mt((e,t)=>{(function(n,a){var r=this,s=256,i=6,o=52,l="random",u=a.pow(s,i),p=a.pow(2,o),d=p*2,c=s-1,h;function m(w,T,C){var E=[];T=T==!0?{entropy:!0}:T||{};var $=b(y(T.entropy?[w,v(n)]:w==null?x():w,3),E),P=new f(E),F=function(){for(var S=P.g(i),M=u,U=0;S=d;)S/=2,M/=2,U>>>=1;return(S+U)/M};return F.int32=function(){return P.g(4)|0},F.quick=function(){return P.g(4)/4294967296},F.double=F,b(v(P.S),n),(T.pass||C||function(S,M,U,j){return j&&(j.S&&g(j,P),S.state=function(){return g(P,{})}),U?(a[l]=S,M):S})(F,$,"global"in T?T.global:this==a,T.state)}a["seed"+l]=m;function f(w){var T,C=w.length,E=this,$=0,P=E.i=E.j=0,F=E.S=[];for(C||(w=[C++]);${var n=M$(),a=P$(),r=O$(),s=L$(),i=z$(),o=W$(),l=B$();l.alea=n,l.xor128=a,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),V$=mt((e,t)=>{(function(n,a,r){function s(u){var p=this,d=l();p.next=function(){var c=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=c-(p.c=c|0)},p.c=1,p.s0=d(" "),p.s1=d(" "),p.s2=d(" "),p.s0-=d(u),p.s0<0&&(p.s0+=1),p.s1-=d(u),p.s1<0&&(p.s1+=1),p.s2-=d(u),p.s2<0&&(p.s2+=1),d=null}function i(u,p){return p.c=u.c,p.s0=u.s0,p.s1=u.s1,p.s2=u.s2,p}function o(u,p){var d=new s(u),c=p&&p.state,h=d.next;return h.int32=function(){return d.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,c&&(typeof c=="object"&&i(c,d),h.state=function(){return i(d,{})}),h}function l(){var u=4022871197,p=function(d){d=String(d);for(var c=0;c>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return p}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),U$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var c=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^c^c>>>8},l===(l|0)?u.x=l:p+=l;for(var d=0;d>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),G$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(c^c<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:p+=l;for(var d=0;d>>4),u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function o(l,u){var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),H$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.x,c=u.i,h,m,f;return h=d[c],h^=h>>>7,m=h^h<<24,h=d[c+1&7],m^=h^h>>>10,h=d[c+3&7],m^=h^h>>>3,h=d[c+4&7],m^=h^h<<7,h=d[c+7&7],h=h^h<<13,m^=h^h<<9,d[c]=m,u.i=c+1&7,m};function p(d,c){var h,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=""+c,h=0;h0;--h)d.next()}p(u,l)}function i(l,u){return u.x=l.x.slice(),u.i=l.i,u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.x&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),j$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.w,c=u.X,h=u.i,m,f;return u.w=d=d+1640531527|0,f=c[h+34&127],m=c[h=h+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=c[h]=f^m,u.i=h,f+(d^d>>>16)|0};function p(d,c){var h,m,f,g,y,b=[],x=128;for(c===(c|0)?(m=c,c=null):(c=c+"\0",m=0,x=Math.max(x,c.length)),f=0,g=-32;g>>15,m^=m<<4,m^=m>>>13,g>=0&&(y=y+1640531527|0,h=b[g&127]^=m+y,f=h==0?f+1:0);for(f>=128&&(b[(c&&c.length||0)&127]=-1),f=127,g=4*128;g>0;--g)m=b[f+34&127],h=b[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,b[f]=m^h;d.w=y,d.X=b,d.i=f}p(u,l)}function i(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.X&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),q$=mt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.b,h=u.c,m=u.d,f=u.a;return c=c<<25^c>>>7^h,h=h-m|0,m=m<<24^m>>>8^f,f=f-c|0,u.b=c=c<<20^c>>>12^h,u.c=h=h-m|0,u.d=m<<16^h>>>16^f,u.a=f-c|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):p+=l;for(var d=0;d>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),K$=mt((e,t)=>{(function(n,a,r){var s=256,i=6,o=52,l="random",u=r.pow(s,i),p=r.pow(2,o),d=p*2,c=s-1,h;function m(w,T,C){var E=[];T=T==!0?{entropy:!0}:T||{};var $=b(y(T.entropy?[w,v(a)]:w==null?x():w,3),E),P=new f(E),F=function(){for(var S=P.g(i),M=u,U=0;S=d;)S/=2,M/=2,U>>>=1;return(S+U)/M};return F.int32=function(){return P.g(4)|0},F.quick=function(){return P.g(4)/4294967296},F.double=F,b(v(P.S),a),(T.pass||C||function(S,M,U,j){return j&&(j.S&&g(j,P),S.state=function(){return g(P,{})}),U?(r[l]=S,M):S})(F,$,"global"in T?T.global:this==r,T.state)}function f(w){var T,C=w.length,E=this,$=0,P=E.i=E.j=0,F=E.S=[];for(C||(w=[C++]);${var n=V$(),a=U$(),r=G$(),s=H$(),i=j$(),o=q$(),l=K$();l.alea=n,l.xor128=a,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),Xk=mt(()=>{}),Jb=mt(()=>{}),fh=mt(()=>{}),X$=mt(()=>{}),Y$=mt(()=>{}),J$=mt(()=>{}),Q$=mt((e,t)=>{var n=(()=>{var a=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(a=a||__filename),function(r){r=r||{};function s(){return Te.buffer!=bn&&Fa(Te.buffer),hd}function i(){return Te.buffer!=bn&&Fa(Te.buffer),md}function o(){return Te.buffer!=bn&&Fa(Te.buffer),np}function l(){return Te.buffer!=bn&&Fa(Te.buffer),fd}function u(){return Te.buffer!=bn&&Fa(Te.buffer),gd}function p(){return Te.buffer!=bn&&Fa(Te.buffer),yd}function d(){return Te.buffer!=bn&&Fa(Te.buffer),bd}var c=typeof r!="undefined"?r:{},h,m;c.ready=new Promise(function(N,D){h=N,m=D});var f;typeof process!="undefined"&&process.listeners&&(f={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},c),y=[],b="./this.program",x=(N,D)=>{throw D},v=typeof window=="object",w=typeof importScripts=="function",T=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",C=c.ENVIRONMENT_IS_PTHREAD||!1,E="";function $(N){return c.locateFile?c.locateFile(N,E):E+N}var P,F,S,M;function U(N){N instanceof dp||Q("exiting due to exception: "+N)}var j,q,K;if(T){w?E=fh().dirname(E)+"/":E=__dirname+"/",K=()=>{q||(j=Jb(),q=fh())},P=function(D,V){return K(),D=q.normalize(D),j.readFileSync(D,V?void 0:"utf8")},S=D=>{var V=P(D,!0);return V.buffer||(V=new Uint8Array(V)),V},F=(D,V,Y)=>{K(),D=q.normalize(D),j.readFile(D,function(pe,he){pe?Y(pe):V(he.buffer)})},process.argv.length>1&&(b=process.argv[1].replace(/\\/g,"/")),y=process.argv.slice(2),process.on("uncaughtException",function(D){if(!(D instanceof dp))throw D}),process.on("unhandledRejection",function(D){throw D}),x=(D,V)=>{if(Cs())throw process.exitCode=D,V;U(V),process.exit(D)},c.inspect=function(){return"[Emscripten Module object]"};let N;try{N=X$()}catch(D){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),D}global.Worker=N.Worker}else(v||w)&&(w?E=self.location.href:typeof document!="undefined"&&document.currentScript&&(E=document.currentScript.src),typeof a!="undefined"&&a&&(E=a),E.indexOf("blob:")!==0?E=E.substr(0,E.replace(/[?#].*/,"").lastIndexOf("/")+1):E="",T||(P=N=>{var D=new XMLHttpRequest;return D.open("GET",N,!1),D.send(null),D.responseText},w&&(S=N=>{var D=new XMLHttpRequest;return D.open("GET",N,!1),D.responseType="arraybuffer",D.send(null),new Uint8Array(D.response)}),F=(N,D,V)=>{var Y=new XMLHttpRequest;Y.open("GET",N,!0),Y.responseType="arraybuffer",Y.onload=()=>{if(Y.status==200||Y.status==0&&Y.response){D(Y.response);return}V()},Y.onerror=V,Y.send(null)}),M=N=>document.title=N);T&&typeof performance=="undefined"&&(global.performance=Y$().performance);var Z=console.log.bind(console),ee=console.warn.bind(console);T&&(K(),Z=N=>j.writeSync(1,N+` `),ee=N=>j.writeSync(2,N+` -`));var re=c.print||Q,Z=c.printErr||ee;Object.assign(c,g),g=null,c.arguments&&(y=c.arguments),c.thisProgram&&(b=c.thisProgram),c.quit&&(x=c.quit);var ie=4;function ae(N){ae.shown||(ae.shown={}),ae.shown[N]||(ae.shown[N]=1,Z(N))}function le(N,D){if(typeof WebAssembly.Function=="function"){for(var U={i:"i32",j:"i64",f:"f32",d:"f64"},X={parameters:[],results:D[0]=="v"?[]:[U[D[0]]]},pe=1;pe{_e=N},Be=Atomics.load,je=Atomics.store,st=Atomics.compareExchange,et;c.wasmBinary&&(et=c.wasmBinary);var tt=c.noExitRuntime||!0;typeof WebAssembly!="object"&&Fo("no native wasm support detected");var Te,gt,ut=!1,gn;function Yt(N,D){N||Fo(D)}function Fn(N){var D=c["_"+N];return D}function Vt(N,D,U,X,pe){var he={string:function(oa){var Uo=0;if(oa!=null&&oa!==0){var c1=(oa.length<<2)+1;Uo=Wo(c1),Ss(oa,Uo,c1)}return Uo},array:function(oa){var Uo=Wo(oa.length);return br(oa,Uo),Uo}};function xe(oa){return D==="string"?sa(oa):D==="boolean"?Boolean(oa):oa}var Ce=Fn(N),Et=[],Ma=0;if(X)for(var Pa=0;Pa(U.buffer instanceof SharedArrayBuffer&&(U=new Uint8Array(U)),D.decode.call(D,U))}var Gt=typeof TextDecoder!="undefined"?new Dn("utf8"):void 0;function ra(N,D,U){for(var X=D+U,pe=D;N[pe]&&!(pe>=X);)++pe;if(pe-D>16&&N.subarray&&Gt)return Gt.decode(N.subarray(D,pe));for(var he="";D>10,56320|Ma&1023)}}return he}function sa(N,D){return N?ra(i(),N,D):""}function Or(N,D,U,X){if(!(X>0))return 0;for(var pe=U,he=U+X-1,xe=0;xe=55296&&Ce<=57343){var Et=N.charCodeAt(++xe);Ce=65536+((Ce&1023)<<10)|Et&1023}if(Ce<=127){if(U>=he)break;D[U++]=Ce}else if(Ce<=2047){if(U+1>=he)break;D[U++]=192|Ce>>6,D[U++]=128|Ce&63}else if(Ce<=65535){if(U+2>=he)break;D[U++]=224|Ce>>12,D[U++]=128|Ce>>6&63,D[U++]=128|Ce&63}else{if(U+3>=he)break;D[U++]=240|Ce>>18,D[U++]=128|Ce>>12&63,D[U++]=128|Ce>>6&63,D[U++]=128|Ce&63}}return D[U]=0,U-pe}function Ss(N,D,U){return Or(N,i(),D,U)}function cd(N){for(var D=0,U=0;U=55296&&X<=57343&&(X=65536+((X&1023)<<10)|N.charCodeAt(++U)&1023),X<=127?++D:X<=2047?D+=2:X<=65535?D+=3:D+=4}return D}var Lr=typeof TextDecoder!="undefined"?new Dn("utf-16le"):void 0;function br(N,D){s().set(N,D)}function ep(N,D,U){for(var X=0;X>0]=N.charCodeAt(X);U||(s()[D>>0]=0)}function Ao(N,D){return N%D>0&&(N+=D-N%D),N}var yn,dd,hd,tp,md,fd,H0,gd,yd;C&&(yn=c.buffer);function $a(N){yn=N,c.HEAP8=dd=new Int8Array(N),c.HEAP16=tp=new Int16Array(N),c.HEAP32=fd=new Int32Array(N),c.HEAPU8=hd=new Uint8Array(N),c.HEAPU16=md=new Uint16Array(N),c.HEAPU32=H0=new Uint32Array(N),c.HEAPF32=gd=new Float32Array(N),c.HEAPF64=yd=new Float64Array(N)}var bd=c.INITIAL_MEMORY||16777216;if(C)Te=c.wasmMemory,yn=c.buffer;else if(c.wasmMemory)Te=c.wasmMemory;else if(Te=new WebAssembly.Memory({initial:bd/65536,maximum:32768,shared:!0}),!(Te.buffer instanceof SharedArrayBuffer))throw Z("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),T&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");Te&&(yn=Te.buffer),bd=yn.byteLength,$a(yn);var ia,$o=[],zr=[],rg=[],xd=[],Ns=!1,sg=!1,vd=0;function Ts(){return tt||vd>0}function bn(){if(c.preRun)for(typeof c.preRun=="function"&&(c.preRun=[c.preRun]);c.preRun.length;)j0(c.preRun.shift());Sd($o)}function np(){Ns=!0,!C&&Sd(zr)}function ig(){C||(Ee.terminateAllThreads(),sg=!0)}function og(){if(!C){if(c.postRun)for(typeof c.postRun=="function"&&(c.postRun=[c.postRun]);c.postRun.length;)ap(c.postRun.shift());Sd(xd)}}function j0(N){$o.unshift(N)}function q0(N){zr.unshift(N)}function ap(N){xd.unshift(N)}var Br=0,wd=null,Fa=null;function rp(N){Br++,c.monitorRunDependencies&&c.monitorRunDependencies(Br)}function K0(N){if(Br--,c.monitorRunDependencies&&c.monitorRunDependencies(Br),Br==0&&(wd!==null&&(clearInterval(wd),wd=null),Fa)){var D=Fa;Fa=null,D()}}c.preloadedImages={},c.preloadedAudios={};function Fo(N){C?postMessage({cmd:"onAbort",arg:N}):c.onAbort&&c.onAbort(N),N="Aborted("+N+")",Z(N),ut=!0,gn=1,N+=". Build with -s ASSERTIONS=1 for more info.";var D=new WebAssembly.RuntimeError(N);throw m(D),D}var lg="data:application/octet-stream;base64,";function sp(N){return N.startsWith(lg)}function kd(N){return N.startsWith("file://")}var xn;xn="tfjs-backend-wasm-threaded-simd.wasm",sp(xn)||(xn=$(xn));function Id(N){try{if(N==xn&&et)return new Uint8Array(et);if(S)return S(N);throw"both async and sync fetching of the wasm failed"}catch(D){Fo(D)}}function Do(){if(!et&&(v||w)){if(typeof fetch=="function"&&!kd(xn))return fetch(xn,{credentials:"same-origin"}).then(function(N){if(!N.ok)throw"failed to load wasm binary file at '"+xn+"'";return N.arrayBuffer()}).catch(function(){return Id(xn)});if(F)return new Promise(function(N,D){F(xn,function(U){N(new Uint8Array(U))},D)})}return Promise.resolve().then(function(){return Id(xn)})}function ug(){var N={env:Pd,wasi_snapshot_preview1:Pd};function D(xe,Ce){var Et=xe.exports;if(c.asm=Et,gg(c.asm.emscripten_tls_init),ia=c.asm.__indirect_function_table,q0(c.asm.__wasm_call_ctors),gt=Ce,!C){var Ma=Ee.unusedWorkers.length;Ee.unusedWorkers.forEach(function(Pa){Ee.loadWasmModuleToWorker(Pa,function(){--Ma||K0("wasm-instantiate")})})}}C||rp("wasm-instantiate");function U(xe){D(xe.instance,xe.module)}function X(xe){return Do().then(function(Ce){return WebAssembly.instantiate(Ce,N)}).then(function(Ce){return Ce}).then(xe,function(Ce){Z("failed to asynchronously prepare wasm: "+Ce),Fo(Ce)})}function pe(){return!et&&typeof WebAssembly.instantiateStreaming=="function"&&!sp(xn)&&!kd(xn)&&typeof fetch=="function"?fetch(xn,{credentials:"same-origin"}).then(function(xe){var Ce=WebAssembly.instantiateStreaming(xe,N);return Ce.then(U,function(Et){return Z("wasm streaming compile failed: "+Et),Z("falling back to ArrayBuffer instantiation"),X(U)})}):X(U)}if(c.instantiateWasm)try{var he=c.instantiateWasm(N,D);return he}catch(xe){return Z("Module.instantiateWasm callback failed with error: "+xe),!1}return pe().catch(m),{}}var X0,Y0,pg={};function Sd(N){for(;N.length>0;){var D=N.shift();if(typeof D=="function"){D(c);continue}var U=D.func;typeof U=="number"?D.arg===void 0?Mo(U)():Mo(U)(D.arg):U(D.arg===void 0?null:D.arg)}}function Ro(N){var D=Fy(),U=N();return Wd(D),U}function kA(N){return N}function J0(N){var D=/\b_Z[\w\d_]+/g;return N.replace(D,function(U){var X=U;return U===X?U:X+" ["+U+"]"})}function cg(N){u()[N>>2]=0;var D=Ee.pthreads[N];delete Ee.pthreads[N],D.worker.terminate(),$y(N),Ee.runningWorkers.splice(Ee.runningWorkers.indexOf(D.worker),1),D.worker.pthread=void 0}function dg(N){var D=Ee.pthreads[N];D.worker.postMessage({cmd:"cancel"})}function Nd(N){var D=Ee.pthreads[N];if(D){u()[N>>2]=0;var U=D.worker;Ee.returnWorkerToPool(U)}}function Td(N){c$(N)}function hg(N){if(N instanceof cp||N=="unwind")return gn;x(1,N)}var Ee={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],init:function(){C?Ee.initWorker():Ee.initMainThread()},initMainThread:function(){for(var N=8,D=0;D>2]=0;try{N()}finally{u()[p1>>2]=1}},receiveObjectTransfer:function(N){},threadInit:function(){for(var N in Ee.tlsInitFunctions)Ee.tlsInitFunctions[N]()},loadWasmModuleToWorker:function(N,D){N.onmessage=U=>{var X=U.data,pe=X.cmd;if(N.pthread&&(Ee.currentProxiedOperationCallerThread=N.pthread.threadInfoStruct),X.targetThread&&X.targetThread!=Bd()){var he=Ee.pthreads[X.targetThread];he?he.worker.postMessage(X,X.transferList):Z('Internal error! Worker sent a message "'+pe+'" to target pthread '+X.targetThread+", but that thread no longer exists!"),Ee.currentProxiedOperationCallerThread=void 0;return}pe==="processQueuedMainThreadWork"?s1():pe==="spawnThread"?Ed(X):pe==="cleanupThread"?Nd(X.thread):pe==="killThread"?cg(X.thread):pe==="cancelThread"?dg(X.thread):pe==="loaded"?(N.loaded=!0,D&&D(N),N.runPthread&&(N.runPthread(),delete N.runPthread)):pe==="print"?re("Thread "+X.threadId+": "+X.text):pe==="printErr"?Z("Thread "+X.threadId+": "+X.text):pe==="alert"?alert("Thread "+X.threadId+": "+X.text):X.target==="setimmediate"?N.postMessage(X):pe==="onAbort"?c.onAbort&&c.onAbort(X.arg):Z("worker sent an unknown command "+pe),Ee.currentProxiedOperationCallerThread=void 0},N.onerror=U=>{var X="worker sent an error!";throw Z(X+" "+U.filename+":"+U.lineno+": "+U.message),U},T&&(N.on("message",function(U){N.onmessage({data:U})}),N.on("error",function(U){N.onerror(U)}),N.on("detachedExit",function(){})),N.postMessage({cmd:"load",urlOrBlob:c.mainScriptUrlOrBlob||a,wasmMemory:Te,wasmModule:gt})},allocateUnusedWorker:function(){var N=$("tfjs-backend-wasm-threaded-simd.worker.js");Ee.unusedWorkers.push(new Worker(N))},getNewWorker:function(){return Ee.unusedWorkers.length==0&&(Ee.allocateUnusedWorker(),Ee.loadWasmModuleToWorker(Ee.unusedWorkers[0])),Ee.unusedWorkers.pop()}};function mg(){var N=Bd(),D=u()[N+44>>2],U=u()[N+48>>2],X=D-U;u1(D,X),Wd(D)}c.establishStackSpace=mg;function Cd(N){if(C)return _s(1,0,N);try{Td(N)}catch(D){hg(D)}}var Cs=[];function Mo(N){var D=Cs[N];return D||(N>=Cs.length&&(Cs.length=N+1),Cs[N]=D=ia.get(N)),D}function fg(N,D){return Mo(N)(D)}c.invokeEntryPoint=fg;function Z0(){var N=new Error;if(!N.stack){try{throw new Error}catch(D){N=D}if(!N.stack)return"(no stack trace available)"}return N.stack.toString()}function gg(N,D,U){Ee.tlsInitFunctions.push(N)}function Q0(N,D){ia.set(N,D),Cs[N]=D}var Es;T?Es=()=>{var N=process.hrtime();return N[0]*1e3+N[1]/1e6}:C?Es=()=>performance.now()-c.__performance_now_clock_drift:Es=()=>performance.now();var yg=!0;function bg(N){return u()[r1()>>2]=N,N}function xg(N,D){var U;if(N===0)U=Date.now();else if((N===1||N===4)&&yg)U=Es();else return bg(28),-1;return u()[D>>2]=U/1e3|0,u()[D+4>>2]=U%1e3*1e3*1e3|0,0}function vg(N,D){return xg(N,D)}function wg(N){i1(N,!w,1,!v),Ee.threadInit()}function kg(N){C?postMessage({cmd:"cleanupThread",thread:N}):Nd(N)}function Ed(N){var D=Ee.getNewWorker();if(!D)return 6;Ee.runningWorkers.push(D);var U=Ee.pthreads[N.pthread_ptr]={worker:D,threadInfoStruct:N.pthread_ptr};D.pthread=U;var X={cmd:"run",start_routine:N.startRoutine,arg:N.arg,threadInfoStruct:N.pthread_ptr};return D.runPthread=()=>{X.time=performance.now(),D.postMessage(X,N.transferList)},D.loaded&&(D.runPthread(),delete D.runPthread),0}function Ig(N,D,U,X){if(typeof SharedArrayBuffer=="undefined")return Z("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var pe=[],he=0;if(C&&(pe.length===0||he))return o1(687865856,N,D,U,X);if(he)return he;var xe={startRoutine:U,pthread_ptr:N,arg:X,transferList:pe};return C?(xe.cmd="spawnThread",postMessage(xe,pe),0):Ed(xe)}function Sg(){return 2097152}function Ng(N,D){if(N==D)postMessage({cmd:"processQueuedMainThreadWork"});else if(C)postMessage({targetThread:N,cmd:"processThreadQueue"});else{var U=Ee.pthreads[N],X=U&&U.worker;if(!X)return;X.postMessage({cmd:"processThreadQueue"})}return 1}function Tg(){Fo("")}function Cg(){T||w||ae("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function _d(){return 2147483648}function Eg(N,D,U){i().copyWithin(N,D,D+U)}function _g(){return T?V$().cpus().length:navigator.hardwareConcurrency}function _s(N,D){var U=arguments.length-2,X=arguments;return Ro(function(){for(var pe=U,he=Wo(pe*8),xe=he>>3,Ce=0;Ce>3,pe=0;pe>>16),$a(Te.buffer),1}catch(D){}}function Fg(N){var D=i().length;if(N=N>>>0,N<=D)return!1;var U=_d();if(N>U)return!1;for(var X=1;X<=4;X*=2){var pe=D*(1+.2/X);pe=Math.min(pe,N+100663296);var he=Math.min(U,Ao(Math.max(N,pe),65536)),xe=$g(he);if(xe)return!0}return!1}var Ue={inEventHandler:0,removeAllEventListeners:function(){for(var N=Ue.eventHandlers.length-1;N>=0;--N)Ue._removeHandler(N);Ue.eventHandlers=[],Ue.deferredCalls=[]},registerRemoveEventListeners:function(){Ue.removeEventListenersRegistered||(rg.push(Ue.removeAllEventListeners),Ue.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(N,D,U){function X(xe,Ce){if(xe.length!=Ce.length)return!1;for(var Et in xe)if(xe[Et]!=Ce[Et])return!1;return!0}for(var pe in Ue.deferredCalls){var he=Ue.deferredCalls[pe];if(he.targetFunction==N&&X(he.argsList,U))return}Ue.deferredCalls.push({targetFunction:N,precedence:D,argsList:U}),Ue.deferredCalls.sort(function(xe,Ce){return xe.precedence>2]=U,u()[he+4>>2]=X,u()[he+8>>2]=pe,Ay(N,637534208,D,X,he)})},getTargetThreadForEventCallback:function(N){switch(N){case 1:return 0;case 2:return Ee.currentProxiedOperationCallerThread;default:return N}},getNodeNameForTarget:function(N){return N?N==window?"#window":N==screen?"#screen":N&&N.nodeName?N.nodeName:"":""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function Dg(N){var D=cd(N)+1,U=_y(D);return Ss(N,U,D),U}function Rg(N,D,U,X){Ro(function(){var pe=Wo(12),he=0;D&&(he=Dg(D)),u()[pe>>2]=he,u()[pe+4>>2]=U,u()[pe+8>>2]=X,Ay(N,657457152,0,he,pe)})}function Mg(N,D,U,X){D=D?sa(D):"",Rg(N,D,U,X)}function Pg(N){return N>2?sa(N):N}var Og=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function Lg(N){N=Pg(N);var D=Og[N]||(typeof document!="undefined"?document.querySelector(N):void 0);return D}function op(N){return Lg(N)}function Ad(N,D,U){var X=op(N);if(!X)return-4;if(X.canvasSharedPtr&&(u()[X.canvasSharedPtr>>2]=D,u()[X.canvasSharedPtr+4>>2]=U),X.offscreenCanvas||!X.controlTransferredOffscreen){X.offscreenCanvas&&(X=X.offscreenCanvas);var pe=!1;if(X.GLctxObject&&X.GLctxObject.GLctx){var he=X.GLctxObject.GLctx.getParameter(2978);pe=he[0]===0&&he[1]===0&&he[2]===X.width&&he[3]===X.height}X.width=D,X.height=U,pe&&X.GLctxObject.GLctx.viewport(0,0,D,U)}else if(X.canvasSharedPtr){var xe=u()[X.canvasSharedPtr+8>>2];return Mg(xe,N,D,U),1}else return-4;return 0}function $d(N,D,U){return C?_s(2,1,N,D,U):Ad(N,D,U)}function zg(N,D,U){var X=op(N);return X?Ad(N,D,U):$d(N,D,U)}function Bg(){throw"unwind"}function Wg(N){var D=N.getExtension("ANGLE_instanced_arrays");if(D)return N.vertexAttribDivisor=function(U,X){D.vertexAttribDivisorANGLE(U,X)},N.drawArraysInstanced=function(U,X,pe,he){D.drawArraysInstancedANGLE(U,X,pe,he)},N.drawElementsInstanced=function(U,X,pe,he,xe){D.drawElementsInstancedANGLE(U,X,pe,he,xe)},1}function Ug(N){var D=N.getExtension("OES_vertex_array_object");if(D)return N.createVertexArray=function(){return D.createVertexArrayOES()},N.deleteVertexArray=function(U){D.deleteVertexArrayOES(U)},N.bindVertexArray=function(U){D.bindVertexArrayOES(U)},N.isVertexArray=function(U){return D.isVertexArrayOES(U)},1}function Vg(N){var D=N.getExtension("WEBGL_draw_buffers");if(D)return N.drawBuffers=function(U,X){D.drawBuffersWEBGL(U,X)},1}function Gg(N){return!!(N.multiDrawWebgl=N.getExtension("WEBGL_multi_draw"))}var Ct={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function(N){Ct.lastError||(Ct.lastError=N)},getNewId:function(N){for(var D=Ct.counter++,U=N.length;U>2]:-1;pe+=sa(u()[U+he*4>>2],xe<0?void 0:xe)}return pe},createContext:function(N,D){N.getContextSafariWebGL2Fixed||(N.getContextSafariWebGL2Fixed=N.getContext,N.getContext=function(pe,he){var xe=N.getContextSafariWebGL2Fixed(pe,he);return pe=="webgl"==xe instanceof WebGLRenderingContext?xe:null});var U=N.getContext("webgl",D);if(!U)return 0;var X=Ct.registerContext(U,D);return X},registerContext:function(N,D){var U=_y(8);u()[U+4>>2]=Bd();var X={handle:U,attributes:D,version:D.majorVersion,GLctx:N};return N.canvas&&(N.canvas.GLctxObject=X),Ct.contexts[U]=X,(typeof D.enableExtensionsByDefault=="undefined"||D.enableExtensionsByDefault)&&Ct.initExtensions(X),U},makeContextCurrent:function(N){return Ct.currentContext=Ct.contexts[N],c.ctx=Md=Ct.currentContext&&Ct.currentContext.GLctx,!(N&&!Md)},getContext:function(N){return Ct.contexts[N]},deleteContext:function(N){Ct.currentContext===Ct.contexts[N]&&(Ct.currentContext=null),typeof Ue=="object"&&Ue.removeAllHandlersOnTarget(Ct.contexts[N].GLctx.canvas),Ct.contexts[N]&&Ct.contexts[N].GLctx.canvas&&(Ct.contexts[N].GLctx.canvas.GLctxObject=void 0),a1(Ct.contexts[N].handle),Ct.contexts[N]=null},initExtensions:function(N){if(N||(N=Ct.currentContext),!N.initExtensionsDone){N.initExtensionsDone=!0;var D=N.GLctx;Wg(D),Ug(D),Vg(D),D.disjointTimerQueryExt=D.getExtension("EXT_disjoint_timer_query"),Gg(D);var U=D.getSupportedExtensions()||[];U.forEach(function(X){!X.includes("lose_context")&&!X.includes("debug")&&D.getExtension(X)})}}},Hg=["default","low-power","high-performance"];function jg(N,D){var U=D>>2,X=u()[U+6],pe={alpha:!!u()[U+0],depth:!!u()[U+1],stencil:!!u()[U+2],antialias:!!u()[U+3],premultipliedAlpha:!!u()[U+4],preserveDrawingBuffer:!!u()[U+5],powerPreference:Hg[X],failIfMajorPerformanceCaveat:!!u()[U+7],majorVersion:u()[U+8],minorVersion:u()[U+9],enableExtensionsByDefault:u()[U+10],explicitSwapControl:u()[U+11],proxyContextToMainThread:u()[U+12],renderViaOffscreenBackBuffer:u()[U+13]},he=op(N);if(!he||pe.explicitSwapControl)return 0;var xe=Ct.createContext(he,pe);return xe}function qg(N,D){return jg(N,D)}var Po={mappings:{},buffers:[null,[],[]],printChar:function(N,D){var U=Po.buffers[N];D===0||D===10?((N===1?re:Z)(ra(U,0)),U.length=0):U.push(D)},varargs:void 0,get:function(){Po.varargs+=4;var N=u()[Po.varargs-4>>2];return N},getStr:function(N){var D=sa(N);return D},get64:function(N,D){return N}};function Fd(N){return C?_s(3,1,N):0}function Dd(N,D,U,X,pe){if(C)return _s(4,1,N,D,U,X,pe)}function Rd(N,D,U,X){if(C)return _s(5,1,N,D,U,X);for(var pe=0,he=0;he>2],Ce=u()[D+4>>2];D+=8;for(var Et=0;Et>2]=pe,0}function Kg(N){$e(N)}Ee.init();var Md,Xg=[null,Cd,$d,Fd,Dd,Rd],e1=!1,Pd={__clock_gettime:vg,__emscripten_init_main_thread_js:wg,__emscripten_thread_cleanup:kg,__pthread_create_js:Ig,_emscripten_default_pthread_stack_size:Sg,_emscripten_notify_thread_queue:Ng,abort:Tg,emscripten_check_blocking_allowed:Cg,emscripten_get_heap_max:_d,emscripten_get_now:Es,emscripten_memcpy_big:Eg,emscripten_num_logical_cores:_g,emscripten_receive_on_main_thread_js:Ag,emscripten_resize_heap:Fg,emscripten_set_canvas_element_size:zg,emscripten_unwind_to_js_event_loop:Bg,emscripten_webgl_create_context:qg,exit:Td,fd_close:Fd,fd_seek:Dd,fd_write:Rd,memory:Te||c.wasmMemory,setTempRet0:Kg},t1=ug(),Yg=c.___wasm_call_ctors=function(){return(Yg=c.___wasm_call_ctors=c.asm.__wasm_call_ctors).apply(null,arguments)},Jg=c._init=function(){return(Jg=c._init=c.asm.init).apply(null,arguments)},Zg=c._init_with_threads_count=function(){return(Zg=c._init_with_threads_count=c.asm.init_with_threads_count).apply(null,arguments)},Qg=c._get_threads_count=function(){return(Qg=c._get_threads_count=c.asm.get_threads_count).apply(null,arguments)},ey=c._register_tensor=function(){return(ey=c._register_tensor=c.asm.register_tensor).apply(null,arguments)},ty=c._dispose_data=function(){return(ty=c._dispose_data=c.asm.dispose_data).apply(null,arguments)},ny=c._dispose=function(){return(ny=c._dispose=c.asm.dispose).apply(null,arguments)},ay=c._Abs=function(){return(ay=c._Abs=c.asm.Abs).apply(null,arguments)},ry=c._Add=function(){return(ry=c._Add=c.asm.Add).apply(null,arguments)},sy=c._AddN=function(){return(sy=c._AddN=c.asm.AddN).apply(null,arguments)},iy=c._All=function(){return(iy=c._All=c.asm.All).apply(null,arguments)},oy=c._Any=function(){return(oy=c._Any=c.asm.Any).apply(null,arguments)},ly=c._ArgMax=function(){return(ly=c._ArgMax=c.asm.ArgMax).apply(null,arguments)},uy=c._AvgPool=function(){return(uy=c._AvgPool=c.asm.AvgPool).apply(null,arguments)},py=c._BatchMatMul=function(){return(py=c._BatchMatMul=c.asm.BatchMatMul).apply(null,arguments)},cy=c._Ceil=function(){return(cy=c._Ceil=c.asm.Ceil).apply(null,arguments)},dy=c._ClipByValue=function(){return(dy=c._ClipByValue=c.asm.ClipByValue).apply(null,arguments)},hy=c._Conv2D=function(){return(hy=c._Conv2D=c.asm.Conv2D).apply(null,arguments)},my=c._Conv2DBackpropInput=function(){return(my=c._Conv2DBackpropInput=c.asm.Conv2DBackpropInput).apply(null,arguments)},fy=c._Cos=function(){return(fy=c._Cos=c.asm.Cos).apply(null,arguments)},gy=c._Cosh=function(){return(gy=c._Cosh=c.asm.Cosh).apply(null,arguments)},yy=c._CropAndResize=function(){return(yy=c._CropAndResize=c.asm.CropAndResize).apply(null,arguments)},by=c._Cumsum=function(){return(by=c._Cumsum=c.asm.Cumsum).apply(null,arguments)},xy=c._DepthToSpace=function(){return(xy=c._DepthToSpace=c.asm.DepthToSpace).apply(null,arguments)},vy=c._DepthwiseConv2dNative=function(){return(vy=c._DepthwiseConv2dNative=c.asm.DepthwiseConv2dNative).apply(null,arguments)},wy=c._Elu=function(){return(wy=c._Elu=c.asm.Elu).apply(null,arguments)},ky=c._Equal=function(){return(ky=c._Equal=c.asm.Equal).apply(null,arguments)},Iy=c._Exp=function(){return(Iy=c._Exp=c.asm.Exp).apply(null,arguments)},Sy=c._FlipLeftRight=function(){return(Sy=c._FlipLeftRight=c.asm.FlipLeftRight).apply(null,arguments)},Od=c._Floor=function(){return(Od=c._Floor=c.asm.Floor).apply(null,arguments)},Ld=c._FloorDiv=function(){return(Ld=c._FloorDiv=c.asm.FloorDiv).apply(null,arguments)},lp=c._FusedBatchNorm=function(){return(lp=c._FusedBatchNorm=c.asm.FusedBatchNorm).apply(null,arguments)},Ny=c._FusedConv2D=function(){return(Ny=c._FusedConv2D=c.asm.FusedConv2D).apply(null,arguments)},Ty=c._FusedDepthwiseConv2D=function(){return(Ty=c._FusedDepthwiseConv2D=c.asm.FusedDepthwiseConv2D).apply(null,arguments)},Oo=c._Gather=function(){return(Oo=c._Gather=c.asm.Gather).apply(null,arguments)},up=c._GatherNd=function(){return(up=c._GatherNd=c.asm.GatherNd).apply(null,arguments)},pp=c._Greater=function(){return(pp=c._Greater=c.asm.Greater).apply(null,arguments)},n1=c._GreaterEqual=function(){return(n1=c._GreaterEqual=c.asm.GreaterEqual).apply(null,arguments)},Lo=c._LeakyRelu=function(){return(Lo=c._LeakyRelu=c.asm.LeakyRelu).apply(null,arguments)},zo=c._Less=function(){return(zo=c._Less=c.asm.Less).apply(null,arguments)},Cy=c._LessEqual=function(){return(Cy=c._LessEqual=c.asm.LessEqual).apply(null,arguments)},G=c._Log=function(){return(G=c._Log=c.asm.Log).apply(null,arguments)},te=c._LogicalAnd=function(){return(te=c._LogicalAnd=c.asm.LogicalAnd).apply(null,arguments)},de=c._Max=function(){return(de=c._Max=c.asm.Max).apply(null,arguments)},Se=c._MaxPool=function(){return(Se=c._MaxPool=c.asm.MaxPool).apply(null,arguments)},Ze=c._Maximum=function(){return(Ze=c._Maximum=c.asm.Maximum).apply(null,arguments)},nt=c._Mean=function(){return(nt=c._Mean=c.asm.Mean).apply(null,arguments)},Ve=c._Min=function(){return(Ve=c._Min=c.asm.Min).apply(null,arguments)},We=c._Minimum=function(){return(We=c._Minimum=c.asm.Minimum).apply(null,arguments)},Lt=c._MirrorPad=function(){return(Lt=c._MirrorPad=c.asm.MirrorPad).apply(null,arguments)},Da=c._Multiply=function(){return(Da=c._Multiply=c.asm.Multiply).apply(null,arguments)},Ra=c._Neg=function(){return(Ra=c._Neg=c.asm.Neg).apply(null,arguments)},Bo=c._NonMaxSuppressionV3=function(){return(Bo=c._NonMaxSuppressionV3=c.asm.NonMaxSuppressionV3).apply(null,arguments)},As=c._NonMaxSuppressionV4=function(){return(As=c._NonMaxSuppressionV4=c.asm.NonMaxSuppressionV4).apply(null,arguments)},Ey=c._NonMaxSuppressionV5=function(){return(Ey=c._NonMaxSuppressionV5=c.asm.NonMaxSuppressionV5).apply(null,arguments)},Rn=c._NotEqual=function(){return(Rn=c._NotEqual=c.asm.NotEqual).apply(null,arguments)},Wr=c._OneHot=function(){return(Wr=c._OneHot=c.asm.OneHot).apply(null,arguments)},zd=c._PadV2=function(){return(zd=c._PadV2=c.asm.PadV2).apply(null,arguments)},IA=c._Pow=function(){return(IA=c._Pow=c.asm.Pow).apply(null,arguments)},SA=c._Prelu=function(){return(SA=c._Prelu=c.asm.Prelu).apply(null,arguments)},NA=c._Prod=function(){return(NA=c._Prod=c.asm.Prod).apply(null,arguments)},TA=c._RealDiv=function(){return(TA=c._RealDiv=c.asm.RealDiv).apply(null,arguments)},CA=c._Relu=function(){return(CA=c._Relu=c.asm.Relu).apply(null,arguments)},EA=c._Relu6=function(){return(EA=c._Relu6=c.asm.Relu6).apply(null,arguments)},_A=c._ResizeBilinear=function(){return(_A=c._ResizeBilinear=c.asm.ResizeBilinear).apply(null,arguments)},AA=c._Reverse=function(){return(AA=c._Reverse=c.asm.Reverse).apply(null,arguments)},$A=c._RotateWithOffset=function(){return($A=c._RotateWithOffset=c.asm.RotateWithOffset).apply(null,arguments)},FA=c._Round=function(){return(FA=c._Round=c.asm.Round).apply(null,arguments)},DA=c._Rsqrt=function(){return(DA=c._Rsqrt=c.asm.Rsqrt).apply(null,arguments)},RA=c._ScatterNd=function(){return(RA=c._ScatterNd=c.asm.ScatterNd).apply(null,arguments)},MA=c._SelectV2=function(){return(MA=c._SelectV2=c.asm.SelectV2).apply(null,arguments)},PA=c._Sigmoid=function(){return(PA=c._Sigmoid=c.asm.Sigmoid).apply(null,arguments)},OA=c._Sin=function(){return(OA=c._Sin=c.asm.Sin).apply(null,arguments)},LA=c._Softmax=function(){return(LA=c._Softmax=c.asm.Softmax).apply(null,arguments)},zA=c._SparseFillEmptyRows=function(){return(zA=c._SparseFillEmptyRows=c.asm.SparseFillEmptyRows).apply(null,arguments)},BA=c._SparseReshape=function(){return(BA=c._SparseReshape=c.asm.SparseReshape).apply(null,arguments)},WA=c._SparseSegmentReduction=function(){return(WA=c._SparseSegmentReduction=c.asm.SparseSegmentReduction).apply(null,arguments)},UA=c._Sqrt=function(){return(UA=c._Sqrt=c.asm.Sqrt).apply(null,arguments)},VA=c._Square=function(){return(VA=c._Square=c.asm.Square).apply(null,arguments)},GA=c._SquaredDifference=function(){return(GA=c._SquaredDifference=c.asm.SquaredDifference).apply(null,arguments)},HA=c._Step=function(){return(HA=c._Step=c.asm.Step).apply(null,arguments)},jA=c._StridedSlice=function(){return(jA=c._StridedSlice=c.asm.StridedSlice).apply(null,arguments)},qA=c._Sub=function(){return(qA=c._Sub=c.asm.Sub).apply(null,arguments)},KA=c._Sum=function(){return(KA=c._Sum=c.asm.Sum).apply(null,arguments)},XA=c._Tan=function(){return(XA=c._Tan=c.asm.Tan).apply(null,arguments)},YA=c._Tanh=function(){return(YA=c._Tanh=c.asm.Tanh).apply(null,arguments)},JA=c._Tile=function(){return(JA=c._Tile=c.asm.Tile).apply(null,arguments)},ZA=c._TopK=function(){return(ZA=c._TopK=c.asm.TopK).apply(null,arguments)},QA=c._Transform=function(){return(QA=c._Transform=c.asm.Transform).apply(null,arguments)},e$=c._Transpose=function(){return(e$=c._Transpose=c.asm.Transpose).apply(null,arguments)},t$=c.__FusedMatMul=function(){return(t$=c.__FusedMatMul=c.asm._FusedMatMul).apply(null,arguments)},_y=c._malloc=function(){return(_y=c._malloc=c.asm.malloc).apply(null,arguments)},a1=c._free=function(){return(a1=c._free=c.asm.free).apply(null,arguments)},n$=c._emscripten_tls_init=function(){return(n$=c._emscripten_tls_init=c.asm.emscripten_tls_init).apply(null,arguments)},r1=c.___errno_location=function(){return(r1=c.___errno_location=c.asm.__errno_location).apply(null,arguments)},Bd=c._pthread_self=function(){return(Bd=c._pthread_self=c.asm.pthread_self).apply(null,arguments)},s1=c._emscripten_main_thread_process_queued_calls=function(){return(s1=c._emscripten_main_thread_process_queued_calls=c.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},a$=c.__emscripten_thread_crashed=function(){return(a$=c.__emscripten_thread_crashed=c.asm._emscripten_thread_crashed).apply(null,arguments)},i1=c.__emscripten_thread_init=function(){return(i1=c.__emscripten_thread_init=c.asm._emscripten_thread_init).apply(null,arguments)},r$=c._emscripten_current_thread_process_queued_calls=function(){return(r$=c._emscripten_current_thread_process_queued_calls=c.asm.emscripten_current_thread_process_queued_calls).apply(null,arguments)},s$=c._emscripten_main_browser_thread_id=function(){return(s$=c._emscripten_main_browser_thread_id=c.asm.emscripten_main_browser_thread_id).apply(null,arguments)},i$=c._emscripten_sync_run_in_main_thread_2=function(){return(i$=c._emscripten_sync_run_in_main_thread_2=c.asm.emscripten_sync_run_in_main_thread_2).apply(null,arguments)},o1=c._emscripten_sync_run_in_main_thread_4=function(){return(o1=c._emscripten_sync_run_in_main_thread_4=c.asm.emscripten_sync_run_in_main_thread_4).apply(null,arguments)},l1=c._emscripten_run_in_main_runtime_thread_js=function(){return(l1=c._emscripten_run_in_main_runtime_thread_js=c.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},Ay=c._emscripten_dispatch_to_thread_=function(){return(Ay=c._emscripten_dispatch_to_thread_=c.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},$y=c.__emscripten_thread_free_data=function(){return($y=c.__emscripten_thread_free_data=c.asm._emscripten_thread_free_data).apply(null,arguments)},o$=c.__emscripten_thread_exit=function(){return(o$=c.__emscripten_thread_exit=c.asm._emscripten_thread_exit).apply(null,arguments)},l$=c._memalign=function(){return(l$=c._memalign=c.asm.memalign).apply(null,arguments)},u1=c._emscripten_stack_set_limits=function(){return(u1=c._emscripten_stack_set_limits=c.asm.emscripten_stack_set_limits).apply(null,arguments)},Fy=c.stackSave=function(){return(Fy=c.stackSave=c.asm.stackSave).apply(null,arguments)},Wd=c.stackRestore=function(){return(Wd=c.stackRestore=c.asm.stackRestore).apply(null,arguments)},Wo=c.stackAlloc=function(){return(Wo=c.stackAlloc=c.asm.stackAlloc).apply(null,arguments)},u$=c.dynCall_iijjiiii=function(){return(u$=c.dynCall_iijjiiii=c.asm.dynCall_iijjiiii).apply(null,arguments)},p$=c.dynCall_jiji=function(){return(p$=c.dynCall_jiji=c.asm.dynCall_jiji).apply(null,arguments)},p1=c.__emscripten_allow_main_runtime_queued_calls=21416;c.cwrap=Jt,c.keepRuntimeAlive=Ts,c.PThread=Ee,c.PThread=Ee,c.wasmMemory=Te,c.ExitStatus=cp;var Ud;function cp(N){this.name="ExitStatus",this.message="Program terminated with exit("+N+")",this.status=N}Fa=function N(){Ud||Dy(),Ud||(Fa=N)};function Dy(N){if(N=N||y,Br>0)return;if(C){h(c),np(),postMessage({cmd:"loaded"});return}if(bn(),Br>0)return;function D(){Ud||(Ud=!0,c.calledRun=!0,!ut&&(np(),h(c),c.onRuntimeInitialized&&c.onRuntimeInitialized(),og()))}c.setStatus?(c.setStatus("Running..."),setTimeout(function(){setTimeout(function(){c.setStatus("")},1),D()},1)):D()}c.run=Dy;function c$(N,D){if(gn=N,!D&&C)throw Cd(N),"unwind";Ts()||ig(),d$(N)}function d$(N){gn=N,Ts()||(Ee.terminateAllThreads(),c.onExit&&c.onExit(N),ut=!0),x(N,new cp(N))}if(c.preInit)for(typeof c.preInit=="function"&&(c.preInit=[c.preInit]);c.preInit.length>0;)c.preInit.pop()();Dy();var Vd;f&&(Vd={uncaughtException:process.listeners("uncaughtException").filter(function(N){return!f.uncaughtException.indexOf(N)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(N){return!f.unhandledRejection.indexOf(N)>-1})});var Gd;if(typeof WasmBackendModule!="undefined")Gd=WasmBackendModule;else if(typeof r!="undefined")Gd=r;else throw new Error("Could not find wasm module in post.js");if(Vd){var h$=Gd._dispose;Gd._dispose=function(){h$(),Vd.uncaughtException.forEach(function(N){process.removeListener("uncaughtException",N)}),Vd.unhandledRejection.forEach(function(N){process.removeListener("unhandledRejection",N)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModuleThreadedSimd=n)}),H$=mt((e,t)=>{var n=(()=>{var a=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(a=a||__filename),function(r){r=r||{};var s=typeof r!="undefined"?r:{},i,o;s.ready=new Promise(function(G,te){i=G,o=te});var l;typeof process!="undefined"&&process.listeners&&(l={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var u=Object.assign({},s),p=[],d="./this.program",c=(G,te)=>{throw te},h=typeof window=="object",m=typeof importScripts=="function",f=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function y(G){return s.locateFile?s.locateFile(G,g):g+G}var b,x,v,w;function T(G){G instanceof up||F("exiting due to exception: "+G)}var C,_,$;f?(m?g=mh().dirname(g)+"/":g=__dirname+"/",$=()=>{_||(C=Xb(),_=mh())},b=function(G,te){return $(),G=_.normalize(G),C.readFileSync(G,te?void 0:"utf8")},v=G=>{var te=b(G,!0);return te.buffer||(te=new Uint8Array(te)),te},x=(G,te,de)=>{$(),G=_.normalize(G),C.readFile(G,function(Se,Ze){Se?de(Se):te(Ze.buffer)})},process.argv.length>1&&(d=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),process.on("uncaughtException",function(G){if(!(G instanceof up))throw G}),process.on("unhandledRejection",function(G){throw G}),c=(G,te)=>{if(tp())throw process.exitCode=G,te;T(te),process.exit(G)},s.inspect=function(){return"[Emscripten Module object]"}):(h||m)&&(m?g=self.location.href:typeof document!="undefined"&&document.currentScript&&(g=document.currentScript.src),a&&(g=a),g.indexOf("blob:")!==0?g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1):g="",b=G=>{var te=new XMLHttpRequest;return te.open("GET",G,!1),te.send(null),te.responseText},m&&(v=G=>{var te=new XMLHttpRequest;return te.open("GET",G,!1),te.responseType="arraybuffer",te.send(null),new Uint8Array(te.response)}),x=(G,te,de)=>{var Se=new XMLHttpRequest;Se.open("GET",G,!0),Se.responseType="arraybuffer",Se.onload=()=>{if(Se.status==200||Se.status==0&&Se.response){te(Se.response);return}de()},Se.onerror=de,Se.send(null)},w=G=>document.title=G);var P=s.print||console.log.bind(console),F=s.printErr||console.warn.bind(console);Object.assign(s,u),u=null,s.arguments&&(p=s.arguments),s.thisProgram&&(d=s.thisProgram),s.quit&&(c=s.quit);var S=4;function M(G){M.shown||(M.shown={}),M.shown[G]||(M.shown[G]=1,F(G))}function V(G,te){if(typeof WebAssembly.Function=="function"){for(var de={i:"i32",j:"i64",f:"f32",d:"f64"},Se={parameters:[],results:te[0]=="v"?[]:[de[te[0]]]},Ze=1;Ze{ee=G},Z;s.wasmBinary&&(Z=s.wasmBinary);var ie=s.noExitRuntime||!0;typeof WebAssembly!="object"&&Ns("no native wasm support detected");var ae,le=!1,ue;function we(G,te){G||Ns(te)}function ye(G){var te=s["_"+G];return te}function Ie(G,te,de,Se,Ze){var nt={string:function(Rn){var Wr=0;if(Rn!=null&&Rn!==0){var zd=(Rn.length<<2)+1;Wr=lp(zd),tt(Rn,Wr,zd)}return Wr},array:function(Rn){var Wr=lp(Rn.length);return ut(Rn,Wr),Wr}};function Ve(Rn){return te==="string"?st(Rn):te==="boolean"?Boolean(Rn):Rn}var We=ye(G),Lt=[],Da=0;if(Se)for(var Ra=0;Ra=Se);)++Ze;if(Ze-te>16&&G.subarray&&Be)return Be.decode(G.subarray(te,Ze));for(var nt="";te>10,56320|Da&1023)}}return nt}function st(G,te){return G?je(Jt,G,te):""}function et(G,te,de,Se){if(!(Se>0))return 0;for(var Ze=de,nt=de+Se-1,Ve=0;Ve=55296&&We<=57343){var Lt=G.charCodeAt(++Ve);We=65536+((We&1023)<<10)|Lt&1023}if(We<=127){if(de>=nt)break;te[de++]=We}else if(We<=2047){if(de+1>=nt)break;te[de++]=192|We>>6,te[de++]=128|We&63}else if(We<=65535){if(de+2>=nt)break;te[de++]=224|We>>12,te[de++]=128|We>>6&63,te[de++]=128|We&63}else{if(de+3>=nt)break;te[de++]=240|We>>18,te[de++]=128|We>>12&63,te[de++]=128|We>>6&63,te[de++]=128|We&63}}return te[de]=0,de-Ze}function tt(G,te,de){return et(G,Jt,te,de)}function Te(G){for(var te=0,de=0;de=55296&&Se<=57343&&(Se=65536+((Se&1023)<<10)|G.charCodeAt(++de)&1023),Se<=127?++te:Se<=2047?te+=2:Se<=65535?te+=3:te+=4}return te}var gt=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):void 0;function ut(G,te){Vt.set(G,te)}function gn(G,te,de){for(var Se=0;Se>0]=G.charCodeAt(Se);de||(Vt[te>>0]=0)}function Yt(G,te){return G%te>0&&(G+=te-G%te),G}var Fn,Vt,Jt,Aa,Dn,Gt,ra,sa,Or;function Ss(G){Fn=G,s.HEAP8=Vt=new Int8Array(G),s.HEAP16=Aa=new Int16Array(G),s.HEAP32=Gt=new Int32Array(G),s.HEAPU8=Jt=new Uint8Array(G),s.HEAPU16=Dn=new Uint16Array(G),s.HEAPU32=ra=new Uint32Array(G),s.HEAPF32=sa=new Float32Array(G),s.HEAPF64=Or=new Float64Array(G)}var cd=s.INITIAL_MEMORY||16777216,Lr,br=[],ep=[],Ao=[],yn=!1,dd=!1,hd=0;function tp(){return ie||hd>0}function md(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)yd(s.preRun.shift());ap(br)}function fd(){yn=!0,ap(ep)}function H0(){dd=!0}function gd(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)bd(s.postRun.shift());ap(Ao)}function yd(G){br.unshift(G)}function $a(G){ep.unshift(G)}function bd(G){Ao.unshift(G)}var ia=0,$o=null,zr=null;function rg(G){ia++,s.monitorRunDependencies&&s.monitorRunDependencies(ia)}function xd(G){if(ia--,s.monitorRunDependencies&&s.monitorRunDependencies(ia),ia==0&&($o!==null&&(clearInterval($o),$o=null),zr)){var te=zr;zr=null,te()}}s.preloadedImages={},s.preloadedAudios={};function Ns(G){s.onAbort&&s.onAbort(G),G="Aborted("+G+")",F(G),le=!0,ue=1,G+=". Build with -s ASSERTIONS=1 for more info.";var te=new WebAssembly.RuntimeError(G);throw o(te),te}var sg="data:application/octet-stream;base64,";function vd(G){return G.startsWith(sg)}function Ts(G){return G.startsWith("file://")}var bn;bn="tfjs-backend-wasm.wasm",vd(bn)||(bn=y(bn));function np(G){try{if(G==bn&&Z)return new Uint8Array(Z);if(v)return v(G);throw"both async and sync fetching of the wasm failed"}catch(te){Ns(te)}}function ig(){if(!Z&&(h||m)){if(typeof fetch=="function"&&!Ts(bn))return fetch(bn,{credentials:"same-origin"}).then(function(G){if(!G.ok)throw"failed to load wasm binary file at '"+bn+"'";return G.arrayBuffer()}).catch(function(){return np(bn)});if(x)return new Promise(function(G,te){x(bn,function(de){G(new Uint8Array(de))},te)})}return Promise.resolve().then(function(){return np(bn)})}function og(){var G={env:Ro,wasi_snapshot_preview1:Ro};function te(Ve,We){var Lt=Ve.exports;s.asm=Lt,ae=s.asm.memory,Ss(ae.buffer),Lr=s.asm.__indirect_function_table,$a(s.asm.__wasm_call_ctors),xd("wasm-instantiate")}rg("wasm-instantiate");function de(Ve){te(Ve.instance)}function Se(Ve){return ig().then(function(We){return WebAssembly.instantiate(We,G)}).then(function(We){return We}).then(Ve,function(We){F("failed to asynchronously prepare wasm: "+We),Ns(We)})}function Ze(){return!Z&&typeof WebAssembly.instantiateStreaming=="function"&&!vd(bn)&&!Ts(bn)&&typeof fetch=="function"?fetch(bn,{credentials:"same-origin"}).then(function(Ve){var We=WebAssembly.instantiateStreaming(Ve,G);return We.then(de,function(Lt){return F("wasm streaming compile failed: "+Lt),F("falling back to ArrayBuffer instantiation"),Se(de)})}):Se(de)}if(s.instantiateWasm)try{var nt=s.instantiateWasm(G,te);return nt}catch(Ve){return F("Module.instantiateWasm callback failed with error: "+Ve),!1}return Ze().catch(o),{}}var j0,q0;function ap(G){for(;G.length>0;){var te=G.shift();if(typeof te=="function"){te(s);continue}var de=te.func;typeof de=="number"?te.arg===void 0?rp(de)():rp(de)(te.arg):de(te.arg===void 0?null:te.arg)}}function Br(G){return G}function wd(G){var te=/\b_Z[\w\d_]+/g;return G.replace(te,function(de){var Se=de;return de===Se?de:Se+" ["+de+"]"})}var Fa=[];function rp(G){var te=Fa[G];return te||(G>=Fa.length&&(Fa.length=G+1),Fa[G]=te=Lr.get(G)),te}function K0(){var G=new Error;if(!G.stack){try{throw new Error}catch(te){G=te}if(!G.stack)return"(no stack trace available)"}return G.stack.toString()}function Fo(G,te){Lr.set(G,te),Fa[G]=te}function lg(){Ns("")}function sp(){return 2147483648}function kd(G,te,de){Jt.copyWithin(G,te,te+de)}function xn(G){try{return ae.grow(G-Fn.byteLength+65535>>>16),Ss(ae.buffer),1}catch(te){}}function Id(G){var te=Jt.length;G=G>>>0;var de=sp();if(G>de)return!1;for(var Se=1;Se<=4;Se*=2){var Ze=te*(1+.2/Se);Ze=Math.min(Ze,G+100663296);var nt=Math.min(de,Yt(Math.max(G,Ze),65536)),Ve=xn(nt);if(Ve)return!0}return!1}var Do={mappings:{},buffers:[null,[],[]],printChar:function(G,te){var de=Do.buffers[G];te===0||te===10?((G===1?P:F)(je(de,0)),de.length=0):de.push(te)},varargs:void 0,get:function(){Do.varargs+=4;var G=Gt[Do.varargs-4>>2];return G},getStr:function(G){var te=st(G);return te},get64:function(G,te){return G}};function ug(G){return 0}function X0(G,te,de,Se,Ze){}function Y0(G,te,de,Se){for(var Ze=0,nt=0;nt>2],We=Gt[te+4>>2];te+=8;for(var Lt=0;Lt>2]=Ze,0}function pg(G){re(G)}var Sd=!1,Ro={abort:lg,emscripten_get_heap_max:sp,emscripten_memcpy_big:kd,emscripten_resize_heap:Id,fd_close:ug,fd_seek:X0,fd_write:Y0,setTempRet0:pg},kA=og(),J0=s.___wasm_call_ctors=function(){return(J0=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},cg=s._init=function(){return(cg=s._init=s.asm.init).apply(null,arguments)},dg=s._init_with_threads_count=function(){return(dg=s._init_with_threads_count=s.asm.init_with_threads_count).apply(null,arguments)},Nd=s._get_threads_count=function(){return(Nd=s._get_threads_count=s.asm.get_threads_count).apply(null,arguments)},Td=s._register_tensor=function(){return(Td=s._register_tensor=s.asm.register_tensor).apply(null,arguments)},hg=s._dispose_data=function(){return(hg=s._dispose_data=s.asm.dispose_data).apply(null,arguments)},Ee=s._dispose=function(){return(Ee=s._dispose=s.asm.dispose).apply(null,arguments)},mg=s._Abs=function(){return(mg=s._Abs=s.asm.Abs).apply(null,arguments)},Cd=s._Add=function(){return(Cd=s._Add=s.asm.Add).apply(null,arguments)},Cs=s._AddN=function(){return(Cs=s._AddN=s.asm.AddN).apply(null,arguments)},Mo=s._All=function(){return(Mo=s._All=s.asm.All).apply(null,arguments)},fg=s._Any=function(){return(fg=s._Any=s.asm.Any).apply(null,arguments)},Z0=s._ArgMax=function(){return(Z0=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},gg=s._AvgPool=function(){return(gg=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},Q0=s._BatchMatMul=function(){return(Q0=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},Es=s._Ceil=function(){return(Es=s._Ceil=s.asm.Ceil).apply(null,arguments)},yg=s._ClipByValue=function(){return(yg=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},bg=s._Conv2D=function(){return(bg=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},xg=s._Conv2DBackpropInput=function(){return(xg=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},vg=s._Cos=function(){return(vg=s._Cos=s.asm.Cos).apply(null,arguments)},wg=s._Cosh=function(){return(wg=s._Cosh=s.asm.Cosh).apply(null,arguments)},kg=s._CropAndResize=function(){return(kg=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},Ed=s._Cumsum=function(){return(Ed=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},Ig=s._DepthToSpace=function(){return(Ig=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},Sg=s._DepthwiseConv2dNative=function(){return(Sg=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},Ng=s._Elu=function(){return(Ng=s._Elu=s.asm.Elu).apply(null,arguments)},Tg=s._Equal=function(){return(Tg=s._Equal=s.asm.Equal).apply(null,arguments)},Cg=s._Exp=function(){return(Cg=s._Exp=s.asm.Exp).apply(null,arguments)},_d=s._FlipLeftRight=function(){return(_d=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},Eg=s._Floor=function(){return(Eg=s._Floor=s.asm.Floor).apply(null,arguments)},_g=s._FloorDiv=function(){return(_g=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},_s=s._FusedBatchNorm=function(){return(_s=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},ip=s._FusedConv2D=function(){return(ip=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},Ag=s._FusedDepthwiseConv2D=function(){return(Ag=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},$g=s._Gather=function(){return($g=s._Gather=s.asm.Gather).apply(null,arguments)},Fg=s._GatherNd=function(){return(Fg=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},Ue=s._Greater=function(){return(Ue=s._Greater=s.asm.Greater).apply(null,arguments)},Dg=s._GreaterEqual=function(){return(Dg=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},Rg=s._LeakyRelu=function(){return(Rg=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},Mg=s._Less=function(){return(Mg=s._Less=s.asm.Less).apply(null,arguments)},Pg=s._LessEqual=function(){return(Pg=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},Og=s._Log=function(){return(Og=s._Log=s.asm.Log).apply(null,arguments)},Lg=s._LogicalAnd=function(){return(Lg=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},op=s._Max=function(){return(op=s._Max=s.asm.Max).apply(null,arguments)},Ad=s._MaxPool=function(){return(Ad=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},$d=s._Maximum=function(){return($d=s._Maximum=s.asm.Maximum).apply(null,arguments)},zg=s._Mean=function(){return(zg=s._Mean=s.asm.Mean).apply(null,arguments)},Bg=s._Min=function(){return(Bg=s._Min=s.asm.Min).apply(null,arguments)},Wg=s._Minimum=function(){return(Wg=s._Minimum=s.asm.Minimum).apply(null,arguments)},Ug=s._MirrorPad=function(){return(Ug=s._MirrorPad=s.asm.MirrorPad).apply(null,arguments)},Vg=s._Multiply=function(){return(Vg=s._Multiply=s.asm.Multiply).apply(null,arguments)},Gg=s._Neg=function(){return(Gg=s._Neg=s.asm.Neg).apply(null,arguments)},Ct=s._NonMaxSuppressionV3=function(){return(Ct=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},Hg=s._NonMaxSuppressionV4=function(){return(Hg=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},jg=s._NonMaxSuppressionV5=function(){return(jg=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},qg=s._NotEqual=function(){return(qg=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},Po=s._OneHot=function(){return(Po=s._OneHot=s.asm.OneHot).apply(null,arguments)},Fd=s._PadV2=function(){return(Fd=s._PadV2=s.asm.PadV2).apply(null,arguments)},Dd=s._Pow=function(){return(Dd=s._Pow=s.asm.Pow).apply(null,arguments)},Rd=s._Prelu=function(){return(Rd=s._Prelu=s.asm.Prelu).apply(null,arguments)},Kg=s._Prod=function(){return(Kg=s._Prod=s.asm.Prod).apply(null,arguments)},Md=s._RealDiv=function(){return(Md=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},Xg=s._Relu=function(){return(Xg=s._Relu=s.asm.Relu).apply(null,arguments)},e1=s._Relu6=function(){return(e1=s._Relu6=s.asm.Relu6).apply(null,arguments)},Pd=s._ResizeBilinear=function(){return(Pd=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},t1=s._Reverse=function(){return(t1=s._Reverse=s.asm.Reverse).apply(null,arguments)},Yg=s._RotateWithOffset=function(){return(Yg=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},Jg=s._Round=function(){return(Jg=s._Round=s.asm.Round).apply(null,arguments)},Zg=s._Rsqrt=function(){return(Zg=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},Qg=s._ScatterNd=function(){return(Qg=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},ey=s._SelectV2=function(){return(ey=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},ty=s._Sigmoid=function(){return(ty=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},ny=s._Sin=function(){return(ny=s._Sin=s.asm.Sin).apply(null,arguments)},ay=s._Softmax=function(){return(ay=s._Softmax=s.asm.Softmax).apply(null,arguments)},ry=s._SparseFillEmptyRows=function(){return(ry=s._SparseFillEmptyRows=s.asm.SparseFillEmptyRows).apply(null,arguments)},sy=s._SparseReshape=function(){return(sy=s._SparseReshape=s.asm.SparseReshape).apply(null,arguments)},iy=s._SparseSegmentReduction=function(){return(iy=s._SparseSegmentReduction=s.asm.SparseSegmentReduction).apply(null,arguments)},oy=s._Sqrt=function(){return(oy=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},ly=s._Square=function(){return(ly=s._Square=s.asm.Square).apply(null,arguments)},uy=s._SquaredDifference=function(){return(uy=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},py=s._Step=function(){return(py=s._Step=s.asm.Step).apply(null,arguments)},cy=s._StridedSlice=function(){return(cy=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},dy=s._Sub=function(){return(dy=s._Sub=s.asm.Sub).apply(null,arguments)},hy=s._Sum=function(){return(hy=s._Sum=s.asm.Sum).apply(null,arguments)},my=s._Tan=function(){return(my=s._Tan=s.asm.Tan).apply(null,arguments)},fy=s._Tanh=function(){return(fy=s._Tanh=s.asm.Tanh).apply(null,arguments)},gy=s._Tile=function(){return(gy=s._Tile=s.asm.Tile).apply(null,arguments)},yy=s._TopK=function(){return(yy=s._TopK=s.asm.TopK).apply(null,arguments)},by=s._Transform=function(){return(by=s._Transform=s.asm.Transform).apply(null,arguments)},xy=s._Transpose=function(){return(xy=s._Transpose=s.asm.Transpose).apply(null,arguments)},vy=s.__FusedMatMul=function(){return(vy=s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},wy=s._malloc=function(){return(wy=s._malloc=s.asm.malloc).apply(null,arguments)},ky=s._free=function(){return(ky=s._free=s.asm.free).apply(null,arguments)},Iy=s.___errno_location=function(){return(Iy=s.___errno_location=s.asm.__errno_location).apply(null,arguments)},Sy=s._emscripten_main_thread_process_queued_calls=function(){return(Sy=s._emscripten_main_thread_process_queued_calls=s.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},Od=s.stackSave=function(){return(Od=s.stackSave=s.asm.stackSave).apply(null,arguments)},Ld=s.stackRestore=function(){return(Ld=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},lp=s.stackAlloc=function(){return(lp=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},Ny=s.dynCall_iijjiiii=function(){return(Ny=s.dynCall_iijjiiii=s.asm.dynCall_iijjiiii).apply(null,arguments)},Ty=s.dynCall_jiji=function(){return(Ty=s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)};s.cwrap=_e;var Oo;function up(G){this.name="ExitStatus",this.message="Program terminated with exit("+G+")",this.status=G}zr=function G(){Oo||pp(),Oo||(zr=G)};function pp(G){if(G=G||p,ia>0||(md(),ia>0))return;function te(){Oo||(Oo=!0,s.calledRun=!0,!le&&(fd(),i(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),gd()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),te()},1)):te()}s.run=pp;function n1(G){ue=G,tp()||(s.onExit&&s.onExit(G),le=!0),c(G,new up(G))}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();pp();var Lo;l&&(Lo={uncaughtException:process.listeners("uncaughtException").filter(function(G){return!l.uncaughtException.indexOf(G)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(G){return!l.unhandledRejection.indexOf(G)>-1})});var zo;if(typeof r!="undefined")zo=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")zo=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Lo){var Cy=zo._dispose;zo._dispose=function(){Cy(),Lo.uncaughtException.forEach(function(G){process.removeListener("uncaughtException",G)}),Lo.unhandledRejection.forEach(function(G){process.removeListener("unhandledRejection",G)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModule=n)}),Gh=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},qp=class{refCount(e){return la("refCount")}incRef(e){return la("incRef")}timerAvailable(){return!0}time(e){return la("time")}read(e){return la("read")}readSync(e){return la("readSync")}readToGPU(e,t){return la("readToGPU")}numDataIds(){return la("numDataIds")}disposeData(e,t){return la("disposeData")}write(e,t,n){return la("write")}move(e,t,n,a,r){return la("move")}memory(){return la("memory")}floatPrecision(){return la("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return la("dispose")}};function la(e){throw new Error(`'${e}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function Uk(e){let t=e.length,n=0;for(;t>0;)n=Math.random()*t|0,t--,fh(e,t,n)}function j$(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let n=e.length,a=0;for(;n>0;)a=Math.random()*n|0,n--,fh(e,n,a),fh(t,n,a)}function $p(e,t,n){return Math.max(e,Math.min(t,n))}function q$(e){return e%2===0?e:e+1}function fh(e,t,n){let a=e[t];e[t]=e[n],e[n]=a}function K$(e){let t=0;for(let n=0;nn+` Shapes ${e} and ${t} must match`)}function ui(e){R(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function Hs(e,t=[],n=!1){if(t==null&&(t=[]),Array.isArray(e)||cn(e)&&!n)for(let a=0;a0,n){return new Promise((a,r)=>{let s=0,i=()=>{if(e()){a();return}s++;let o=t(s);if(n!=null&&s>=n){r();return}setTimeout(i,o)};i()})}function nF(e,t){let n=1,a=-1;for(let s=0;s=0)n*=e[s];else if(e[s]===-1){if(a!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${a} and dim ${s}`);a=s}else if(e[s]<0)throw Error(`Shapes can not be < 0. Found ${e[s]} at dim ${s}`);if(a===-1){if(t>0&&t!==n)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(n===0)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%n!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${n}`);let r=e.slice();return r[a]=t/n,r}function Na(e,t){let n=t.length;return e=e==null?t.map((a,r)=>r):[].concat(e),R(e.every(a=>a>=-n&&a`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`),R(e.every(a=>el(a)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(a=>a<0?n+a:a)}function Vk(e,t){let n=[],a=[],r=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||r?null:Na(t,e).sort(),i=0;for(let o=0;oo)&&e[o]===1&&(n.push(e[o]),a.push(o)),s[i]<=o&&i++}e[o]!==1&&(n.push(e[o]),a.push(o))}return{newShape:n,keptDims:a}}function Gk(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else throw new Error(`Unknown data type ${e}`);return n}function Hk(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else if(e==="string")n=new Array(t);else throw new Error(`Unknown data type ${e}`);return n}function jk(e,t){for(let n=0;nt+=n.length),t}function Hr(e){return typeof e=="string"||e instanceof String}function Xk(e){return typeof e=="boolean"}function Yk(e){return typeof e=="number"}function Hh(e){return Array.isArray(e)?Hh(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":Yk(e)?"float32":Hr(e)?"string":Xk(e)?"bool":"float32"}function Jr(e){return!!(e&&e.constructor&&e.call&&e.apply)}function gh(e,t){for(let n=t;n=0;--a)n[a]=n[a+1]*e[a+1];return n}function Jk(e,t,n,a=!1){let r=new Array;if(t.length===1){let s=t[0]*(a?2:1);for(let i=0;il*u)*(a?2:1);for(let l=0;lr*s)*(n?2:1);if(a===0)return[];if(a!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${n?" for a complex tensor":""}.`);return Jk(0,e,t,n)}function Yb(e,t){let n=jh(e,t);for(let a=0;aa*r,1);if(t==null||t==="float32")return Xo(e,new Float32Array(n));if(t==="int32")return Xo(e,new Int32Array(n));if(t==="bool")return Xo(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function Jb(e){e.forEach(t=>{R(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function sF(e,t,n){if(t===0)return 0;if(t===1)return e[0];let a=e[e.length-1];for(let r=0;r{let[n,a]=t.split(":");this.urlFlags[n]=uF(n,a)})}};function oF(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(n,...a)=>(lF(t,a[0],a[1]),a.join("="))),t}function lF(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}function uF(e,t){if(t=t.toLowerCase(),t==="true"||t==="false")return t==="true";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${e}.`)}function Y(){return Qb}var Qb=null;function pF(e){Qb=e}var My;function Qk(){if(My==null){let e;if(typeof window!="undefined")e=window;else if(typeof global!="undefined")e=global;else if(typeof process!="undefined")e=process;else if(typeof self!="undefined")e=self;else throw new Error("Could not find a global object");My=e}return My}function cF(){let e=Qk();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function ex(e,t){let n=cF();if(n.has(e))return n.get(e);{let a=t();return n.set(e,a),n.get(e)}}var fl="Abs",gl="Acos",yl="Acosh",ls="Add",pi="AddN",bl="All",xl="Any",ci="ArgMax",Kp="ArgMin",vl="Asin",wl="Asinh",kl="Atan",Il="Atanh",Sl="Atan2",di="AvgPool",qh="AvgPoolGrad",Xp="AvgPool3D",Kh="AvgPool3DGrad",hi="BatchMatMul",Nl="BatchToSpaceND",Xh="Bincount",eI="BroadcastTo",Yh="BroadcastArgs",mi="Cast",fi="Ceil",us="ClipByValue",Jh="Complex",Yp="ComplexAbs",Tl="Concat",gi="Conv2D",Zh="Conv2DBackpropFilter",yi="Conv2DBackpropInput",Jp="Conv3D",Qh="Conv3DBackpropFilterV2",em="Conv3DBackpropInputV2",bi="Cos",xi="Cosh",vi="Cumsum",Cl="CropAndResize",tm="DenseBincount",El="DepthToSpace",wi="DepthwiseConv2dNative",nm="DepthwiseConv2dNativeBackpropFilter",am="DepthwiseConv2dNativeBackpropInput",rm="Diag",Zp="Dilation2D",yh="Dilation2DBackpropInput",bh="Dilation2DBackpropFilter",ki="RealDiv",sm="Einsum",Ii="Elu",im="EluGrad",_l="Erf",Al="Equal",Si="Exp",$l="ExpandDims",Fl="Expm1",om="FFT",Qp="Fill",Dl="FlipLeftRight",Ni="Floor",Ti="FloorDiv",Ci="FusedBatchNorm",Rl="GatherV2",Ml="GatherNd",Pl="Greater",Ei="GreaterEqual",_i="Identity",lm="IFFT",um="Imag",Ol="IsFinite",Ll="IsInf",zl="IsNan",Ai="LeakyRelu",Bl="Less",Wl="LessEqual",pm="LinSpace",$i="Log",Ul="Log1p",Vl="LogicalAnd",ec="LogicalNot",tc="LogicalOr",tI="LogSoftmax",nc="LRN",cm="LRNGrad",Fi="Max",Di="Maximum",Ri="MaxPool",dm="MaxPoolGrad",ac="MaxPool3D",hm="MaxPool3DGrad",mm="MaxPoolWithArgmax",Mi="Mean",Pi="Min",Oi="Minimum",Li="MirrorPad",Gl="Mod",fm="Multinomial",zi="Multiply",Hl="Neg",jl="NotEqual",ql="NonMaxSuppressionV3",Kl="NonMaxSuppressionV4",Xl="NonMaxSuppressionV5",Yl="OnesLike",Bi="OneHot",Jl="Pack",Wi="PadV2",dF="Pool",Ui="Pow",Vi="Prelu",Zl="Prod",rc="Range",gm="Real",Ql="Reciprocal",Gi="Relu",eu="Reshape",sc="ResizeNearestNeighbor",ym="ResizeNearestNeighborGrad",Hi="ResizeBilinear",bm="ResizeBilinearGrad",ji="Relu6",qi="Reverse",Ki="Round",Xi="Rsqrt",tu="ScatterNd",nu="Select",au="Selu",ru="Slice",Yi="Sin",su="Sinh",iu="Sign",Ji="Sigmoid",ou="Softplus",Zi="Sqrt",Qi="Sum",lu="SpaceToBatchND",uu="SplitV",eo="Softmax",ic="SparseFillEmptyRows",pu="SparseReshape",oc="SparseSegmentMean",lc="SparseSegmentSum",xm="SparseToDense",to="SquaredDifference",uc="Square",cu="StridedSlice",vm="StringNGrams",wm="StringSplit",km="StringToHashBucketFast",no="Sub",ao="Tan",ro="Tanh",ps="Tile",du="TopK",hu="Transform",so="Transpose",Im="Unique",mu="Unpack",pc="UnsortedSegmentSum",fu="ZerosLike",cs="Step",xh="FromPixels",gu="RotateWithOffset",js="_FusedMatMul",qs="FusedConv2D",Ks="FusedDepthwiseConv2D";function Gr(...e){Y().getBool("IS_TEST")||Y().getBool("PROD")||console.warn(...e)}function hF(...e){Y().getBool("IS_TEST")||Y().getBool("PROD")||console.log(...e)}var tl=ex("kernelRegistry",()=>new Map),Fp=ex("gradRegistry",()=>new Map);function vh(e,t){let n=tx(e,t);return tl.get(n)}function Jy(e){return Fp.get(e)}function wh(e){let t=tl.entries(),n=[];for(;;){let{done:a,value:r}=t.next();if(a)break;let[s,i]=r,[o]=s.split("_");o===e&&n.push(i)}return n}function cc(e){let{kernelName:t,backendName:n}=e,a=tx(t,n);tl.has(a)&&Gr(`The kernel '${t}' for backend '${n}' is already registered`),tl.set(a,e)}function nI(e){let{kernelName:t}=e;Fp.has(t)&&Y().getBool("DEBUG")&&Gr(`Overriding the gradient for '${t}'`),Fp.set(t,e)}function mF(e,t){let n=tx(e,t);if(!tl.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);tl.delete(n)}function fF(e){if(!Fp.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Fp.delete(e)}function gF(e,t){wh(e).forEach(n=>{let a=Object.assign({},n,{backendName:t});cc(a)})}function tx(e,t){return`${t}_${e}`}var k={};Re(k,{arraysEqual:()=>os,assert:()=>R,assertNonNegativeIntegerDimensions:()=>Jb,assertNonNull:()=>ui,assertShapesMatch:()=>Nn,bytesFromStringArray:()=>Kk,bytesPerElement:()=>Yy,checkConversionForErrors:()=>jk,clamp:()=>$p,computeStrides:()=>ml,createScalarValue:()=>kF,createShuffledIndices:()=>eF,decodeString:()=>kh,distSquared:()=>Y$,encodeString:()=>hc,fetch:()=>SF,fingerPrint64:()=>wF,flatten:()=>Hs,getArrayFromDType:()=>Hk,getTypedArrayFromDType:()=>Gk,hasEncodingLoss:()=>aF,hexToLong:()=>dc,indexToLoc:()=>iF,inferDtype:()=>Hh,inferFromImplicitShape:()=>nF,isBoolean:()=>Xk,isFunction:()=>Jr,isInt:()=>el,isNumber:()=>Yk,isPromise:()=>Zb,isScalarShape:()=>J$,isString:()=>Hr,isTypedArray:()=>cn,isValidDtype:()=>qk,locToIndex:()=>sF,makeOnesTypedArray:()=>Yb,makeZerosNestedTypedArray:()=>rF,makeZerosTypedArray:()=>jh,nearestDivisor:()=>gh,nearestLargerEven:()=>q$,now:()=>Dp,parseAxisParam:()=>Na,randUniform:()=>X$,repeatedTry:()=>tF,rightPad:()=>Cp,shuffle:()=>Uk,shuffleCombo:()=>j$,sizeFromShape:()=>xt,sizeToSquarishShape:()=>Q$,squeezeShape:()=>Vk,sum:()=>K$,swap:()=>fh,tanh:()=>Z$,toNestedArray:()=>Xo,toTypedArray:()=>Sm});var h1=li(S$()),Ms=h1.default||h1;function dc(e){return Ms.fromString(e,!0,16)}var aI=dc("c3a5c85c97cb3127"),Ds=dc("b492b66fbe98f273"),vn=dc("9ae16a3b2f90404f");function Zy(e){return e.xor(e.shru(47))}function rI(e,t,n){let a=e.slice(t,t+n);return Ms.fromBytes(Array.from(a),!0,!0)}function yt(e,t){return rI(e,t,8)}function m1(e,t){return rI(e,t,4)}function Zt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function Kr(e,t,n=dc("9ddfea08eb382d69")){let a=e.xor(t).mul(n);a=a.xor(a.shru(47));let r=t.xor(a).mul(n);return r=r.xor(r.shru(47)),r=r.mul(n),r}function yF(e,t,n,a,r,s){r=r.add(e),s=Zt(s.add(r).add(a),21);let i=r;return r=r.add(t),r=r.add(n),s=s.add(Zt(r,44)),[r.add(a),s.add(i)]}function jd(e,t,n,a){return yF(yt(e,t),yt(e,t+8),yt(e,t+16),yt(e,t+24),n,a)}function bF(e,t=e.length){if(t>=8){let n=vn.add(t*2),a=yt(e,0).add(vn),r=yt(e,t-8),s=Zt(r,37).mul(n).add(a),i=Zt(a,25).add(r).mul(n);return Kr(s,i,n)}if(t>=4){let n=vn.add(t*2),a=m1(e,0);return Kr(a.shl(3).add(t),m1(e,t-4),n)}if(t>0){let n=e[0],a=e[t>>1],r=e[t-1],s=n+(a<<8),i=t+(r<<2);return Zy(vn.mul(s).xor(aI.mul(i))).mul(vn)}return vn}function xF(e,t=e.length){let n=vn.add(t*2),a=yt(e,0).mul(Ds),r=yt(e,8),s=yt(e,t-8).mul(n),i=yt(e,t-16).mul(vn);return Kr(Zt(a.add(r),43).add(Zt(s,30)).add(i),a.add(Zt(r.add(vn),18)).add(s),n)}function vF(e,t=e.length){let n=vn.add(t*2),a=yt(e,0).mul(vn),r=yt(e,8),s=yt(e,t-8).mul(n),i=yt(e,t-16).mul(vn),o=Zt(a.add(r),43).add(Zt(s,30)).add(i),l=Kr(o,a.add(Zt(r.add(vn),18)).add(s),n),u=yt(e,16).mul(n),p=yt(e,24),d=o.add(yt(e,t-32)).mul(n),c=l.add(yt(e,t-24)).mul(n);return Kr(Zt(u.add(p),43).add(Zt(d,30)).add(c),u.add(Zt(p.add(a),18)).add(d),n)}function wF(e,t=e.length){let n=Ms.fromNumber(81,!0);if(t<=32)return t<=16?bF(e,t):xF(e,t);if(t<=64)return vF(e,t);let a=n,r=n.mul(Ds).add(113),s=Zy(r.mul(vn).add(113)).mul(vn),i=[Ms.UZERO,Ms.UZERO],o=[Ms.UZERO,Ms.UZERO];a=a.mul(vn).add(yt(e,0));let l=0,u=(t-1>>6)*64,p=u+(t-1&63)-63;do a=Zt(a.add(r).add(i[0]).add(yt(e,l+8)),37).mul(Ds),r=Zt(r.add(i[1]).add(yt(e,l+48)),42).mul(Ds),a=a.xor(o[1]),r=r.add(i[0]).add(yt(e,l+40)),s=Zt(s.add(o[0]),33).mul(Ds),i=jd(e,l,i[1].mul(Ds),a.add(o[0])),o=jd(e,l+32,s.add(o[1]),r.add(yt(e,l+16))),[s,a]=[a,s],l+=64;while(l!==u);let d=Ds.add(s.and(255).shl(1));return l=p,o[0]=o[0].add(t-1&63),i[0]=i[0].add(o[0]),o[0]=o[0].add(i[0]),a=Zt(a.add(r).add(i[0]).add(yt(e,l+8)),37).mul(d),r=Zt(r.add(i[1]).add(yt(e,l+48)),42).mul(d),a=a.xor(o[1].mul(9)),r=r.add(i[0].mul(9).add(yt(e,l+40))),s=Zt(s.add(o[0]),33).mul(d),i=jd(e,l,i[1].mul(d),a.add(o[0])),o=jd(e,l+32,s.add(o[1]),r.add(yt(e,l+16))),[s,a]=[a,s],Kr(Kr(i[0],o[0],d).add(Zy(r).mul(aI)).add(s),Kr(i[1],o[1],d).add(a),d)}function kF(e,t){return t==="string"?hc(e):Sm([e],t)}function IF(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function Sm(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=Hs(e)),Y().getBool("DEBUG")&&jk(e,t),IF(e,t))return e;if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool"){let n=new Uint8Array(e.length);for(let a=0;a{a=n()},s,i=Dp();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(r);else{r();for(let o of a)o.dataSync();s=Promise.resolve({kernelMs:Dp()-i})}if(Y().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o{TF(u,l.dtype,e)})}return{kernelName:e,outputs:a,inputs:t,timeMs:s.then(o=>o.kernelMs),extraInfo:s.then(o=>o.getExtraProfileInfo!=null?o.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:n,timeMs:a,inputs:r,extraInfo:s}=e;n.forEach(i=>{Promise.all([i.data(),a,s]).then(o=>{this.logger.logKernelProfile(t,i,o[0],o[1],r,o[2])})})}};function TF(e,t,n){if(t!=="float32")return!1;for(let a=0;a0?m:""} `}}console.log(`%c${o} %c${i} %c${l}D ${p} %c${u} %c${d} %c${s}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function EF(e,t,n){let a={},r={};for(let l=0;la[f.id]=!0),h=!0,r[u.id]=!0;break}if(h)break}}let s={};s[n.id]=!0;let i={};for(let l=e.length-1;l>=0;l--){let u=e[l],p=u.inputs;for(let d=0;d=0;r--){let s=t[r],i=[];if(s.outputs.forEach(l=>{let u=e[l.id];u!=null?i.push(u):i.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let o=s.gradient(i);for(let l in s.inputs){if(!(l in o))throw new Error(`Cannot backprop through input ${l}. Available gradients found: ${Object.keys(o)}.`);let u=n(()=>o[l]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${u.dtype}'`);let p=s.inputs[l];if(!os(u.shape,p.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${l}' has shape '${u.shape}', which does not match the shape of the input '${p.shape}'`);if(e[p.id]==null)e[p.id]=u;else{let d=e[p.id];e[p.id]=a(d,u),d.dispose()}}}}var f1=20,hp=3,Py=7;function AF(e,t,n,a){let r=ml(t),s=$F(e,t,n,r),i=t.length,o=ah(e,t,n,r,s),l=["Tensor"];return a&&(l.push(` dtype: ${n}`),l.push(` rank: ${i}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(o.map(u=>" "+u).join(` +`));var re=c.print||Z,Q=c.printErr||ee;Object.assign(c,g),g=null,c.arguments&&(y=c.arguments),c.thisProgram&&(b=c.thisProgram),c.quit&&(x=c.quit);var ie=4;function ae(N){ae.shown||(ae.shown={}),ae.shown[N]||(ae.shown[N]=1,Q(N))}function le(N,D){if(typeof WebAssembly.Function=="function"){for(var V={i:"i32",j:"i64",f:"f32",d:"f64"},Y={parameters:[],results:D[0]=="v"?[]:[V[D[0]]]},pe=1;pe{Ee=N},We=Atomics.load,je=Atomics.store,st=Atomics.compareExchange,et;c.wasmBinary&&(et=c.wasmBinary);var tt=c.noExitRuntime||!0;typeof WebAssembly!="object"&&Do("no native wasm support detected");var Te,gt,pt=!1,yn;function Yt(N,D){N||Do(D)}function Fn(N){var D=c["_"+N];return D}function Ut(N,D,V,Y,pe){var he={string:function(la){var Uo=0;if(la!=null&&la!==0){var g1=(la.length<<2)+1;Uo=Vo(g1),Ns(la,Uo,g1)}return Uo},array:function(la){var Uo=Vo(la.length);return br(la,Uo),Uo}};function ve(la){return D==="string"?ia(la):D==="boolean"?Boolean(la):la}var Ce=Fn(N),_t=[],Pa=0;if(Y)for(var Oa=0;Oa(V.buffer instanceof SharedArrayBuffer&&(V=new Uint8Array(V)),D.decode.call(D,V))}var Gt=typeof TextDecoder!="undefined"?new Dn("utf8"):void 0;function sa(N,D,V){for(var Y=D+V,pe=D;N[pe]&&!(pe>=Y);)++pe;if(pe-D>16&&N.subarray&&Gt)return Gt.decode(N.subarray(D,pe));for(var he="";D>10,56320|Pa&1023)}}return he}function ia(N,D){return N?sa(i(),N,D):""}function Or(N,D,V,Y){if(!(Y>0))return 0;for(var pe=V,he=V+Y-1,ve=0;ve=55296&&Ce<=57343){var _t=N.charCodeAt(++ve);Ce=65536+((Ce&1023)<<10)|_t&1023}if(Ce<=127){if(V>=he)break;D[V++]=Ce}else if(Ce<=2047){if(V+1>=he)break;D[V++]=192|Ce>>6,D[V++]=128|Ce&63}else if(Ce<=65535){if(V+2>=he)break;D[V++]=224|Ce>>12,D[V++]=128|Ce>>6&63,D[V++]=128|Ce&63}else{if(V+3>=he)break;D[V++]=240|Ce>>18,D[V++]=128|Ce>>12&63,D[V++]=128|Ce>>6&63,D[V++]=128|Ce&63}}return D[V]=0,V-pe}function Ns(N,D,V){return Or(N,i(),D,V)}function dd(N){for(var D=0,V=0;V=55296&&Y<=57343&&(Y=65536+((Y&1023)<<10)|N.charCodeAt(++V)&1023),Y<=127?++D:Y<=2047?D+=2:Y<=65535?D+=3:D+=4}return D}var Lr=typeof TextDecoder!="undefined"?new Dn("utf-16le"):void 0;function br(N,D){s().set(N,D)}function tp(N,D,V){for(var Y=0;Y>0]=N.charCodeAt(Y);V||(s()[D>>0]=0)}function $o(N,D){return N%D>0&&(N+=D-N%D),N}var bn,hd,md,np,fd,gd,Y0,yd,bd;C&&(bn=c.buffer);function Fa(N){bn=N,c.HEAP8=hd=new Int8Array(N),c.HEAP16=np=new Int16Array(N),c.HEAP32=gd=new Int32Array(N),c.HEAPU8=md=new Uint8Array(N),c.HEAPU16=fd=new Uint16Array(N),c.HEAPU32=Y0=new Uint32Array(N),c.HEAPF32=yd=new Float32Array(N),c.HEAPF64=bd=new Float64Array(N)}var xd=c.INITIAL_MEMORY||16777216;if(C)Te=c.wasmMemory,bn=c.buffer;else if(c.wasmMemory)Te=c.wasmMemory;else if(Te=new WebAssembly.Memory({initial:xd/65536,maximum:32768,shared:!0}),!(Te.buffer instanceof SharedArrayBuffer))throw Q("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),T&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");Te&&(bn=Te.buffer),xd=bn.byteLength,Fa(bn);var oa,Fo=[],zr=[],rg=[],vd=[],Ts=!1,sg=!1,wd=0;function Cs(){return tt||wd>0}function xn(){if(c.preRun)for(typeof c.preRun=="function"&&(c.preRun=[c.preRun]);c.preRun.length;)J0(c.preRun.shift());Nd(Fo)}function ap(){Ts=!0,!C&&Nd(zr)}function ig(){C||(_e.terminateAllThreads(),sg=!0)}function og(){if(!C){if(c.postRun)for(typeof c.postRun=="function"&&(c.postRun=[c.postRun]);c.postRun.length;)rp(c.postRun.shift());Nd(vd)}}function J0(N){Fo.unshift(N)}function Q0(N){zr.unshift(N)}function rp(N){vd.unshift(N)}var Wr=0,kd=null,Da=null;function sp(N){Wr++,c.monitorRunDependencies&&c.monitorRunDependencies(Wr)}function Z0(N){if(Wr--,c.monitorRunDependencies&&c.monitorRunDependencies(Wr),Wr==0&&(kd!==null&&(clearInterval(kd),kd=null),Da)){var D=Da;Da=null,D()}}c.preloadedImages={},c.preloadedAudios={};function Do(N){C?postMessage({cmd:"onAbort",arg:N}):c.onAbort&&c.onAbort(N),N="Aborted("+N+")",Q(N),pt=!0,yn=1,N+=". Build with -s ASSERTIONS=1 for more info.";var D=new WebAssembly.RuntimeError(N);throw m(D),D}var lg="data:application/octet-stream;base64,";function ip(N){return N.startsWith(lg)}function Id(N){return N.startsWith("file://")}var vn;vn="tfjs-backend-wasm-threaded-simd.wasm",ip(vn)||(vn=$(vn));function Sd(N){try{if(N==vn&&et)return new Uint8Array(et);if(S)return S(N);throw"both async and sync fetching of the wasm failed"}catch(D){Do(D)}}function Ro(){if(!et&&(v||w)){if(typeof fetch=="function"&&!Id(vn))return fetch(vn,{credentials:"same-origin"}).then(function(N){if(!N.ok)throw"failed to load wasm binary file at '"+vn+"'";return N.arrayBuffer()}).catch(function(){return Sd(vn)});if(F)return new Promise(function(N,D){F(vn,function(V){N(new Uint8Array(V))},D)})}return Promise.resolve().then(function(){return Sd(vn)})}function ug(){var N={env:Od,wasi_snapshot_preview1:Od};function D(ve,Ce){var _t=ve.exports;if(c.asm=_t,gg(c.asm.emscripten_tls_init),oa=c.asm.__indirect_function_table,Q0(c.asm.__wasm_call_ctors),gt=Ce,!C){var Pa=_e.unusedWorkers.length;_e.unusedWorkers.forEach(function(Oa){_e.loadWasmModuleToWorker(Oa,function(){--Pa||Z0("wasm-instantiate")})})}}C||sp("wasm-instantiate");function V(ve){D(ve.instance,ve.module)}function Y(ve){return Ro().then(function(Ce){return WebAssembly.instantiate(Ce,N)}).then(function(Ce){return Ce}).then(ve,function(Ce){Q("failed to asynchronously prepare wasm: "+Ce),Do(Ce)})}function pe(){return!et&&typeof WebAssembly.instantiateStreaming=="function"&&!ip(vn)&&!Id(vn)&&typeof fetch=="function"?fetch(vn,{credentials:"same-origin"}).then(function(ve){var Ce=WebAssembly.instantiateStreaming(ve,N);return Ce.then(V,function(_t){return Q("wasm streaming compile failed: "+_t),Q("falling back to ArrayBuffer instantiation"),Y(V)})}):Y(V)}if(c.instantiateWasm)try{var he=c.instantiateWasm(N,D);return he}catch(ve){return Q("Module.instantiateWasm callback failed with error: "+ve),!1}return pe().catch(m),{}}var e1,t1,pg={};function Nd(N){for(;N.length>0;){var D=N.shift();if(typeof D=="function"){D(c);continue}var V=D.func;typeof V=="number"?D.arg===void 0?Po(V)():Po(V)(D.arg):V(D.arg===void 0?null:D.arg)}}function Mo(N){var D=Dy(),V=N();return Vd(D),V}function $A(N){return N}function n1(N){var D=/\b_Z[\w\d_]+/g;return N.replace(D,function(V){var Y=V;return V===Y?V:Y+" ["+V+"]"})}function cg(N){u()[N>>2]=0;var D=_e.pthreads[N];delete _e.pthreads[N],D.worker.terminate(),Fy(N),_e.runningWorkers.splice(_e.runningWorkers.indexOf(D.worker),1),D.worker.pthread=void 0}function dg(N){var D=_e.pthreads[N];D.worker.postMessage({cmd:"cancel"})}function Td(N){var D=_e.pthreads[N];if(D){u()[N>>2]=0;var V=D.worker;_e.returnWorkerToPool(V)}}function Cd(N){v$(N)}function hg(N){if(N instanceof dp||N=="unwind")return yn;x(1,N)}var _e={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],init:function(){C?_e.initWorker():_e.initMainThread()},initMainThread:function(){for(var N=8,D=0;D>2]=0;try{N()}finally{u()[f1>>2]=1}},receiveObjectTransfer:function(N){},threadInit:function(){for(var N in _e.tlsInitFunctions)_e.tlsInitFunctions[N]()},loadWasmModuleToWorker:function(N,D){N.onmessage=V=>{var Y=V.data,pe=Y.cmd;if(N.pthread&&(_e.currentProxiedOperationCallerThread=N.pthread.threadInfoStruct),Y.targetThread&&Y.targetThread!=Bd()){var he=_e.pthreads[Y.targetThread];he?he.worker.postMessage(Y,Y.transferList):Q('Internal error! Worker sent a message "'+pe+'" to target pthread '+Y.targetThread+", but that thread no longer exists!"),_e.currentProxiedOperationCallerThread=void 0;return}pe==="processQueuedMainThreadWork"?p1():pe==="spawnThread"?Ed(Y):pe==="cleanupThread"?Td(Y.thread):pe==="killThread"?cg(Y.thread):pe==="cancelThread"?dg(Y.thread):pe==="loaded"?(N.loaded=!0,D&&D(N),N.runPthread&&(N.runPthread(),delete N.runPthread)):pe==="print"?re("Thread "+Y.threadId+": "+Y.text):pe==="printErr"?Q("Thread "+Y.threadId+": "+Y.text):pe==="alert"?alert("Thread "+Y.threadId+": "+Y.text):Y.target==="setimmediate"?N.postMessage(Y):pe==="onAbort"?c.onAbort&&c.onAbort(Y.arg):Q("worker sent an unknown command "+pe),_e.currentProxiedOperationCallerThread=void 0},N.onerror=V=>{var Y="worker sent an error!";throw Q(Y+" "+V.filename+":"+V.lineno+": "+V.message),V},T&&(N.on("message",function(V){N.onmessage({data:V})}),N.on("error",function(V){N.onerror(V)}),N.on("detachedExit",function(){})),N.postMessage({cmd:"load",urlOrBlob:c.mainScriptUrlOrBlob||a,wasmMemory:Te,wasmModule:gt})},allocateUnusedWorker:function(){var N=$("tfjs-backend-wasm-threaded-simd.worker.js");_e.unusedWorkers.push(new Worker(N))},getNewWorker:function(){return _e.unusedWorkers.length==0&&(_e.allocateUnusedWorker(),_e.loadWasmModuleToWorker(_e.unusedWorkers[0])),_e.unusedWorkers.pop()}};function mg(){var N=Bd(),D=u()[N+44>>2],V=u()[N+48>>2],Y=D-V;m1(D,Y),Vd(D)}c.establishStackSpace=mg;function _d(N){if(C)return As(1,0,N);try{Cd(N)}catch(D){hg(D)}}var _s=[];function Po(N){var D=_s[N];return D||(N>=_s.length&&(_s.length=N+1),_s[N]=D=oa.get(N)),D}function fg(N,D){return Po(N)(D)}c.invokeEntryPoint=fg;function a1(){var N=new Error;if(!N.stack){try{throw new Error}catch(D){N=D}if(!N.stack)return"(no stack trace available)"}return N.stack.toString()}function gg(N,D,V){_e.tlsInitFunctions.push(N)}function r1(N,D){oa.set(N,D),_s[N]=D}var Es;T?Es=()=>{var N=process.hrtime();return N[0]*1e3+N[1]/1e6}:C?Es=()=>performance.now()-c.__performance_now_clock_drift:Es=()=>performance.now();var yg=!0;function bg(N){return u()[u1()>>2]=N,N}function xg(N,D){var V;if(N===0)V=Date.now();else if((N===1||N===4)&&yg)V=Es();else return bg(28),-1;return u()[D>>2]=V/1e3|0,u()[D+4>>2]=V%1e3*1e3*1e3|0,0}function vg(N,D){return xg(N,D)}function wg(N){c1(N,!w,1,!v),_e.threadInit()}function kg(N){C?postMessage({cmd:"cleanupThread",thread:N}):Td(N)}function Ed(N){var D=_e.getNewWorker();if(!D)return 6;_e.runningWorkers.push(D);var V=_e.pthreads[N.pthread_ptr]={worker:D,threadInfoStruct:N.pthread_ptr};D.pthread=V;var Y={cmd:"run",start_routine:N.startRoutine,arg:N.arg,threadInfoStruct:N.pthread_ptr};return D.runPthread=()=>{Y.time=performance.now(),D.postMessage(Y,N.transferList)},D.loaded&&(D.runPthread(),delete D.runPthread),0}function Ig(N,D,V,Y){if(typeof SharedArrayBuffer=="undefined")return Q("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var pe=[],he=0;if(C&&(pe.length===0||he))return d1(687865856,N,D,V,Y);if(he)return he;var ve={startRoutine:V,pthread_ptr:N,arg:Y,transferList:pe};return C?(ve.cmd="spawnThread",postMessage(ve,pe),0):Ed(ve)}function Sg(){return 2097152}function Ng(N,D){if(N==D)postMessage({cmd:"processQueuedMainThreadWork"});else if(C)postMessage({targetThread:N,cmd:"processThreadQueue"});else{var V=_e.pthreads[N],Y=V&&V.worker;if(!Y)return;Y.postMessage({cmd:"processThreadQueue"})}return 1}function Tg(){Do("")}function Cg(){T||w||ae("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function Ad(){return 2147483648}function _g(N,D,V){i().copyWithin(N,D,D+V)}function Eg(){return T?J$().cpus().length:navigator.hardwareConcurrency}function As(N,D){var V=arguments.length-2,Y=arguments;return Mo(function(){for(var pe=V,he=Vo(pe*8),ve=he>>3,Ce=0;Ce>3,pe=0;pe>>16),Fa(Te.buffer),1}catch(D){}}function Fg(N){var D=i().length;if(N=N>>>0,N<=D)return!1;var V=Ad();if(N>V)return!1;for(var Y=1;Y<=4;Y*=2){var pe=D*(1+.2/Y);pe=Math.min(pe,N+100663296);var he=Math.min(V,$o(Math.max(N,pe),65536)),ve=$g(he);if(ve)return!0}return!1}var Ve={inEventHandler:0,removeAllEventListeners:function(){for(var N=Ve.eventHandlers.length-1;N>=0;--N)Ve._removeHandler(N);Ve.eventHandlers=[],Ve.deferredCalls=[]},registerRemoveEventListeners:function(){Ve.removeEventListenersRegistered||(rg.push(Ve.removeAllEventListeners),Ve.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(N,D,V){function Y(ve,Ce){if(ve.length!=Ce.length)return!1;for(var _t in ve)if(ve[_t]!=Ce[_t])return!1;return!0}for(var pe in Ve.deferredCalls){var he=Ve.deferredCalls[pe];if(he.targetFunction==N&&Y(he.argsList,V))return}Ve.deferredCalls.push({targetFunction:N,precedence:D,argsList:V}),Ve.deferredCalls.sort(function(ve,Ce){return ve.precedence>2]=V,u()[he+4>>2]=Y,u()[he+8>>2]=pe,$y(N,637534208,D,Y,he)})},getTargetThreadForEventCallback:function(N){switch(N){case 1:return 0;case 2:return _e.currentProxiedOperationCallerThread;default:return N}},getNodeNameForTarget:function(N){return N?N==window?"#window":N==screen?"#screen":N&&N.nodeName?N.nodeName:"":""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function Dg(N){var D=dd(N)+1,V=Ay(D);return Ns(N,V,D),V}function Rg(N,D,V,Y){Mo(function(){var pe=Vo(12),he=0;D&&(he=Dg(D)),u()[pe>>2]=he,u()[pe+4>>2]=V,u()[pe+8>>2]=Y,$y(N,657457152,0,he,pe)})}function Mg(N,D,V,Y){D=D?ia(D):"",Rg(N,D,V,Y)}function Pg(N){return N>2?ia(N):N}var Og=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function Lg(N){N=Pg(N);var D=Og[N]||(typeof document!="undefined"?document.querySelector(N):void 0);return D}function lp(N){return Lg(N)}function $d(N,D,V){var Y=lp(N);if(!Y)return-4;if(Y.canvasSharedPtr&&(u()[Y.canvasSharedPtr>>2]=D,u()[Y.canvasSharedPtr+4>>2]=V),Y.offscreenCanvas||!Y.controlTransferredOffscreen){Y.offscreenCanvas&&(Y=Y.offscreenCanvas);var pe=!1;if(Y.GLctxObject&&Y.GLctxObject.GLctx){var he=Y.GLctxObject.GLctx.getParameter(2978);pe=he[0]===0&&he[1]===0&&he[2]===Y.width&&he[3]===Y.height}Y.width=D,Y.height=V,pe&&Y.GLctxObject.GLctx.viewport(0,0,D,V)}else if(Y.canvasSharedPtr){var ve=u()[Y.canvasSharedPtr+8>>2];return Mg(ve,N,D,V),1}else return-4;return 0}function Fd(N,D,V){return C?As(2,1,N,D,V):$d(N,D,V)}function zg(N,D,V){var Y=lp(N);return Y?$d(N,D,V):Fd(N,D,V)}function Wg(){throw"unwind"}function Bg(N){var D=N.getExtension("ANGLE_instanced_arrays");if(D)return N.vertexAttribDivisor=function(V,Y){D.vertexAttribDivisorANGLE(V,Y)},N.drawArraysInstanced=function(V,Y,pe,he){D.drawArraysInstancedANGLE(V,Y,pe,he)},N.drawElementsInstanced=function(V,Y,pe,he,ve){D.drawElementsInstancedANGLE(V,Y,pe,he,ve)},1}function Vg(N){var D=N.getExtension("OES_vertex_array_object");if(D)return N.createVertexArray=function(){return D.createVertexArrayOES()},N.deleteVertexArray=function(V){D.deleteVertexArrayOES(V)},N.bindVertexArray=function(V){D.bindVertexArrayOES(V)},N.isVertexArray=function(V){return D.isVertexArrayOES(V)},1}function Ug(N){var D=N.getExtension("WEBGL_draw_buffers");if(D)return N.drawBuffers=function(V,Y){D.drawBuffersWEBGL(V,Y)},1}function Gg(N){return!!(N.multiDrawWebgl=N.getExtension("WEBGL_multi_draw"))}var Ct={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function(N){Ct.lastError||(Ct.lastError=N)},getNewId:function(N){for(var D=Ct.counter++,V=N.length;V>2]:-1;pe+=ia(u()[V+he*4>>2],ve<0?void 0:ve)}return pe},createContext:function(N,D){N.getContextSafariWebGL2Fixed||(N.getContextSafariWebGL2Fixed=N.getContext,N.getContext=function(pe,he){var ve=N.getContextSafariWebGL2Fixed(pe,he);return pe=="webgl"==ve instanceof WebGLRenderingContext?ve:null});var V=N.getContext("webgl",D);if(!V)return 0;var Y=Ct.registerContext(V,D);return Y},registerContext:function(N,D){var V=Ay(8);u()[V+4>>2]=Bd();var Y={handle:V,attributes:D,version:D.majorVersion,GLctx:N};return N.canvas&&(N.canvas.GLctxObject=Y),Ct.contexts[V]=Y,(typeof D.enableExtensionsByDefault=="undefined"||D.enableExtensionsByDefault)&&Ct.initExtensions(Y),V},makeContextCurrent:function(N){return Ct.currentContext=Ct.contexts[N],c.ctx=Pd=Ct.currentContext&&Ct.currentContext.GLctx,!(N&&!Pd)},getContext:function(N){return Ct.contexts[N]},deleteContext:function(N){Ct.currentContext===Ct.contexts[N]&&(Ct.currentContext=null),typeof Ve=="object"&&Ve.removeAllHandlersOnTarget(Ct.contexts[N].GLctx.canvas),Ct.contexts[N]&&Ct.contexts[N].GLctx.canvas&&(Ct.contexts[N].GLctx.canvas.GLctxObject=void 0),l1(Ct.contexts[N].handle),Ct.contexts[N]=null},initExtensions:function(N){if(N||(N=Ct.currentContext),!N.initExtensionsDone){N.initExtensionsDone=!0;var D=N.GLctx;Bg(D),Vg(D),Ug(D),D.disjointTimerQueryExt=D.getExtension("EXT_disjoint_timer_query"),Gg(D);var V=D.getSupportedExtensions()||[];V.forEach(function(Y){!Y.includes("lose_context")&&!Y.includes("debug")&&D.getExtension(Y)})}}},Hg=["default","low-power","high-performance"];function jg(N,D){var V=D>>2,Y=u()[V+6],pe={alpha:!!u()[V+0],depth:!!u()[V+1],stencil:!!u()[V+2],antialias:!!u()[V+3],premultipliedAlpha:!!u()[V+4],preserveDrawingBuffer:!!u()[V+5],powerPreference:Hg[Y],failIfMajorPerformanceCaveat:!!u()[V+7],majorVersion:u()[V+8],minorVersion:u()[V+9],enableExtensionsByDefault:u()[V+10],explicitSwapControl:u()[V+11],proxyContextToMainThread:u()[V+12],renderViaOffscreenBackBuffer:u()[V+13]},he=lp(N);if(!he||pe.explicitSwapControl)return 0;var ve=Ct.createContext(he,pe);return ve}function qg(N,D){return jg(N,D)}var Oo={mappings:{},buffers:[null,[],[]],printChar:function(N,D){var V=Oo.buffers[N];D===0||D===10?((N===1?re:Q)(sa(V,0)),V.length=0):V.push(D)},varargs:void 0,get:function(){Oo.varargs+=4;var N=u()[Oo.varargs-4>>2];return N},getStr:function(N){var D=ia(N);return D},get64:function(N,D){return N}};function Dd(N){return C?As(3,1,N):0}function Rd(N,D,V,Y,pe){if(C)return As(4,1,N,D,V,Y,pe)}function Md(N,D,V,Y){if(C)return As(5,1,N,D,V,Y);for(var pe=0,he=0;he>2],Ce=u()[D+4>>2];D+=8;for(var _t=0;_t>2]=pe,0}function Kg(N){$e(N)}_e.init();var Pd,Xg=[null,_d,Fd,Dd,Rd,Md],s1=!1,Od={__clock_gettime:vg,__emscripten_init_main_thread_js:wg,__emscripten_thread_cleanup:kg,__pthread_create_js:Ig,_emscripten_default_pthread_stack_size:Sg,_emscripten_notify_thread_queue:Ng,abort:Tg,emscripten_check_blocking_allowed:Cg,emscripten_get_heap_max:Ad,emscripten_get_now:Es,emscripten_memcpy_big:_g,emscripten_num_logical_cores:Eg,emscripten_receive_on_main_thread_js:Ag,emscripten_resize_heap:Fg,emscripten_set_canvas_element_size:zg,emscripten_unwind_to_js_event_loop:Wg,emscripten_webgl_create_context:qg,exit:Cd,fd_close:Dd,fd_seek:Rd,fd_write:Md,memory:Te||c.wasmMemory,setTempRet0:Kg},i1=ug(),Yg=c.___wasm_call_ctors=function(){return(Yg=c.___wasm_call_ctors=c.asm.__wasm_call_ctors).apply(null,arguments)},Jg=c._init=function(){return(Jg=c._init=c.asm.init).apply(null,arguments)},Qg=c._init_with_threads_count=function(){return(Qg=c._init_with_threads_count=c.asm.init_with_threads_count).apply(null,arguments)},Zg=c._get_threads_count=function(){return(Zg=c._get_threads_count=c.asm.get_threads_count).apply(null,arguments)},ey=c._register_tensor=function(){return(ey=c._register_tensor=c.asm.register_tensor).apply(null,arguments)},ty=c._dispose_data=function(){return(ty=c._dispose_data=c.asm.dispose_data).apply(null,arguments)},ny=c._dispose=function(){return(ny=c._dispose=c.asm.dispose).apply(null,arguments)},ay=c._Abs=function(){return(ay=c._Abs=c.asm.Abs).apply(null,arguments)},ry=c._Add=function(){return(ry=c._Add=c.asm.Add).apply(null,arguments)},sy=c._AddN=function(){return(sy=c._AddN=c.asm.AddN).apply(null,arguments)},iy=c._All=function(){return(iy=c._All=c.asm.All).apply(null,arguments)},oy=c._Any=function(){return(oy=c._Any=c.asm.Any).apply(null,arguments)},ly=c._ArgMax=function(){return(ly=c._ArgMax=c.asm.ArgMax).apply(null,arguments)},uy=c._AvgPool=function(){return(uy=c._AvgPool=c.asm.AvgPool).apply(null,arguments)},py=c._BatchMatMul=function(){return(py=c._BatchMatMul=c.asm.BatchMatMul).apply(null,arguments)},cy=c._Ceil=function(){return(cy=c._Ceil=c.asm.Ceil).apply(null,arguments)},dy=c._ClipByValue=function(){return(dy=c._ClipByValue=c.asm.ClipByValue).apply(null,arguments)},hy=c._Conv2D=function(){return(hy=c._Conv2D=c.asm.Conv2D).apply(null,arguments)},my=c._Conv2DBackpropInput=function(){return(my=c._Conv2DBackpropInput=c.asm.Conv2DBackpropInput).apply(null,arguments)},fy=c._Cos=function(){return(fy=c._Cos=c.asm.Cos).apply(null,arguments)},gy=c._Cosh=function(){return(gy=c._Cosh=c.asm.Cosh).apply(null,arguments)},yy=c._CropAndResize=function(){return(yy=c._CropAndResize=c.asm.CropAndResize).apply(null,arguments)},by=c._Cumprod=function(){return(by=c._Cumprod=c.asm.Cumprod).apply(null,arguments)},xy=c._Cumsum=function(){return(xy=c._Cumsum=c.asm.Cumsum).apply(null,arguments)},vy=c._DepthToSpace=function(){return(vy=c._DepthToSpace=c.asm.DepthToSpace).apply(null,arguments)},wy=c._DepthwiseConv2dNative=function(){return(wy=c._DepthwiseConv2dNative=c.asm.DepthwiseConv2dNative).apply(null,arguments)},ky=c._Elu=function(){return(ky=c._Elu=c.asm.Elu).apply(null,arguments)},Iy=c._Equal=function(){return(Iy=c._Equal=c.asm.Equal).apply(null,arguments)},Sy=c._Exp=function(){return(Sy=c._Exp=c.asm.Exp).apply(null,arguments)},Ny=c._FlipLeftRight=function(){return(Ny=c._FlipLeftRight=c.asm.FlipLeftRight).apply(null,arguments)},Ld=c._Floor=function(){return(Ld=c._Floor=c.asm.Floor).apply(null,arguments)},zd=c._FloorDiv=function(){return(zd=c._FloorDiv=c.asm.FloorDiv).apply(null,arguments)},up=c._FusedBatchNorm=function(){return(up=c._FusedBatchNorm=c.asm.FusedBatchNorm).apply(null,arguments)},Ty=c._FusedConv2D=function(){return(Ty=c._FusedConv2D=c.asm.FusedConv2D).apply(null,arguments)},Cy=c._FusedDepthwiseConv2D=function(){return(Cy=c._FusedDepthwiseConv2D=c.asm.FusedDepthwiseConv2D).apply(null,arguments)},Lo=c._Gather=function(){return(Lo=c._Gather=c.asm.Gather).apply(null,arguments)},pp=c._GatherNd=function(){return(pp=c._GatherNd=c.asm.GatherNd).apply(null,arguments)},cp=c._Greater=function(){return(cp=c._Greater=c.asm.Greater).apply(null,arguments)},o1=c._GreaterEqual=function(){return(o1=c._GreaterEqual=c.asm.GreaterEqual).apply(null,arguments)},zo=c._LeakyRelu=function(){return(zo=c._LeakyRelu=c.asm.LeakyRelu).apply(null,arguments)},Wo=c._Less=function(){return(Wo=c._Less=c.asm.Less).apply(null,arguments)},_y=c._LessEqual=function(){return(_y=c._LessEqual=c.asm.LessEqual).apply(null,arguments)},G=c._Log=function(){return(G=c._Log=c.asm.Log).apply(null,arguments)},te=c._LogicalAnd=function(){return(te=c._LogicalAnd=c.asm.LogicalAnd).apply(null,arguments)},de=c._Max=function(){return(de=c._Max=c.asm.Max).apply(null,arguments)},Se=c._MaxPool=function(){return(Se=c._MaxPool=c.asm.MaxPool).apply(null,arguments)},Qe=c._Maximum=function(){return(Qe=c._Maximum=c.asm.Maximum).apply(null,arguments)},nt=c._Mean=function(){return(nt=c._Mean=c.asm.Mean).apply(null,arguments)},Ue=c._Min=function(){return(Ue=c._Min=c.asm.Min).apply(null,arguments)},Be=c._Minimum=function(){return(Be=c._Minimum=c.asm.Minimum).apply(null,arguments)},Lt=c._MirrorPad=function(){return(Lt=c._MirrorPad=c.asm.MirrorPad).apply(null,arguments)},Ra=c._Multiply=function(){return(Ra=c._Multiply=c.asm.Multiply).apply(null,arguments)},Ma=c._Neg=function(){return(Ma=c._Neg=c.asm.Neg).apply(null,arguments)},Bo=c._NonMaxSuppressionV3=function(){return(Bo=c._NonMaxSuppressionV3=c.asm.NonMaxSuppressionV3).apply(null,arguments)},$s=c._NonMaxSuppressionV4=function(){return($s=c._NonMaxSuppressionV4=c.asm.NonMaxSuppressionV4).apply(null,arguments)},Ey=c._NonMaxSuppressionV5=function(){return(Ey=c._NonMaxSuppressionV5=c.asm.NonMaxSuppressionV5).apply(null,arguments)},Rn=c._NotEqual=function(){return(Rn=c._NotEqual=c.asm.NotEqual).apply(null,arguments)},Br=c._OneHot=function(){return(Br=c._OneHot=c.asm.OneHot).apply(null,arguments)},Wd=c._PadV2=function(){return(Wd=c._PadV2=c.asm.PadV2).apply(null,arguments)},FA=c._Pow=function(){return(FA=c._Pow=c.asm.Pow).apply(null,arguments)},DA=c._Prelu=function(){return(DA=c._Prelu=c.asm.Prelu).apply(null,arguments)},RA=c._Prod=function(){return(RA=c._Prod=c.asm.Prod).apply(null,arguments)},MA=c._RealDiv=function(){return(MA=c._RealDiv=c.asm.RealDiv).apply(null,arguments)},PA=c._Relu=function(){return(PA=c._Relu=c.asm.Relu).apply(null,arguments)},OA=c._Relu6=function(){return(OA=c._Relu6=c.asm.Relu6).apply(null,arguments)},LA=c._ResizeBilinear=function(){return(LA=c._ResizeBilinear=c.asm.ResizeBilinear).apply(null,arguments)},zA=c._Reverse=function(){return(zA=c._Reverse=c.asm.Reverse).apply(null,arguments)},WA=c._RotateWithOffset=function(){return(WA=c._RotateWithOffset=c.asm.RotateWithOffset).apply(null,arguments)},BA=c._Round=function(){return(BA=c._Round=c.asm.Round).apply(null,arguments)},VA=c._Rsqrt=function(){return(VA=c._Rsqrt=c.asm.Rsqrt).apply(null,arguments)},UA=c._ScatterNd=function(){return(UA=c._ScatterNd=c.asm.ScatterNd).apply(null,arguments)},GA=c._SelectV2=function(){return(GA=c._SelectV2=c.asm.SelectV2).apply(null,arguments)},HA=c._Sigmoid=function(){return(HA=c._Sigmoid=c.asm.Sigmoid).apply(null,arguments)},jA=c._Sin=function(){return(jA=c._Sin=c.asm.Sin).apply(null,arguments)},qA=c._Softmax=function(){return(qA=c._Softmax=c.asm.Softmax).apply(null,arguments)},KA=c._SparseFillEmptyRows=function(){return(KA=c._SparseFillEmptyRows=c.asm.SparseFillEmptyRows).apply(null,arguments)},XA=c._SparseReshape=function(){return(XA=c._SparseReshape=c.asm.SparseReshape).apply(null,arguments)},YA=c._SparseSegmentReduction=function(){return(YA=c._SparseSegmentReduction=c.asm.SparseSegmentReduction).apply(null,arguments)},JA=c._Sqrt=function(){return(JA=c._Sqrt=c.asm.Sqrt).apply(null,arguments)},QA=c._Square=function(){return(QA=c._Square=c.asm.Square).apply(null,arguments)},ZA=c._SquaredDifference=function(){return(ZA=c._SquaredDifference=c.asm.SquaredDifference).apply(null,arguments)},e$=c._Step=function(){return(e$=c._Step=c.asm.Step).apply(null,arguments)},t$=c._StridedSlice=function(){return(t$=c._StridedSlice=c.asm.StridedSlice).apply(null,arguments)},n$=c._Sub=function(){return(n$=c._Sub=c.asm.Sub).apply(null,arguments)},a$=c._Sum=function(){return(a$=c._Sum=c.asm.Sum).apply(null,arguments)},r$=c._Tan=function(){return(r$=c._Tan=c.asm.Tan).apply(null,arguments)},s$=c._Tanh=function(){return(s$=c._Tanh=c.asm.Tanh).apply(null,arguments)},i$=c._Tile=function(){return(i$=c._Tile=c.asm.Tile).apply(null,arguments)},o$=c._TopK=function(){return(o$=c._TopK=c.asm.TopK).apply(null,arguments)},l$=c._Transform=function(){return(l$=c._Transform=c.asm.Transform).apply(null,arguments)},u$=c._Transpose=function(){return(u$=c._Transpose=c.asm.Transpose).apply(null,arguments)},p$=c.__FusedMatMul=function(){return(p$=c.__FusedMatMul=c.asm._FusedMatMul).apply(null,arguments)},Ay=c._malloc=function(){return(Ay=c._malloc=c.asm.malloc).apply(null,arguments)},l1=c._free=function(){return(l1=c._free=c.asm.free).apply(null,arguments)},c$=c._emscripten_tls_init=function(){return(c$=c._emscripten_tls_init=c.asm.emscripten_tls_init).apply(null,arguments)},u1=c.___errno_location=function(){return(u1=c.___errno_location=c.asm.__errno_location).apply(null,arguments)},Bd=c._pthread_self=function(){return(Bd=c._pthread_self=c.asm.pthread_self).apply(null,arguments)},p1=c._emscripten_main_thread_process_queued_calls=function(){return(p1=c._emscripten_main_thread_process_queued_calls=c.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},d$=c.__emscripten_thread_crashed=function(){return(d$=c.__emscripten_thread_crashed=c.asm._emscripten_thread_crashed).apply(null,arguments)},c1=c.__emscripten_thread_init=function(){return(c1=c.__emscripten_thread_init=c.asm._emscripten_thread_init).apply(null,arguments)},h$=c._emscripten_current_thread_process_queued_calls=function(){return(h$=c._emscripten_current_thread_process_queued_calls=c.asm.emscripten_current_thread_process_queued_calls).apply(null,arguments)},m$=c._emscripten_main_browser_thread_id=function(){return(m$=c._emscripten_main_browser_thread_id=c.asm.emscripten_main_browser_thread_id).apply(null,arguments)},f$=c._emscripten_sync_run_in_main_thread_2=function(){return(f$=c._emscripten_sync_run_in_main_thread_2=c.asm.emscripten_sync_run_in_main_thread_2).apply(null,arguments)},d1=c._emscripten_sync_run_in_main_thread_4=function(){return(d1=c._emscripten_sync_run_in_main_thread_4=c.asm.emscripten_sync_run_in_main_thread_4).apply(null,arguments)},h1=c._emscripten_run_in_main_runtime_thread_js=function(){return(h1=c._emscripten_run_in_main_runtime_thread_js=c.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},$y=c._emscripten_dispatch_to_thread_=function(){return($y=c._emscripten_dispatch_to_thread_=c.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},Fy=c.__emscripten_thread_free_data=function(){return(Fy=c.__emscripten_thread_free_data=c.asm._emscripten_thread_free_data).apply(null,arguments)},g$=c.__emscripten_thread_exit=function(){return(g$=c.__emscripten_thread_exit=c.asm._emscripten_thread_exit).apply(null,arguments)},y$=c._memalign=function(){return(y$=c._memalign=c.asm.memalign).apply(null,arguments)},m1=c._emscripten_stack_set_limits=function(){return(m1=c._emscripten_stack_set_limits=c.asm.emscripten_stack_set_limits).apply(null,arguments)},Dy=c.stackSave=function(){return(Dy=c.stackSave=c.asm.stackSave).apply(null,arguments)},Vd=c.stackRestore=function(){return(Vd=c.stackRestore=c.asm.stackRestore).apply(null,arguments)},Vo=c.stackAlloc=function(){return(Vo=c.stackAlloc=c.asm.stackAlloc).apply(null,arguments)},b$=c.dynCall_iijjiiii=function(){return(b$=c.dynCall_iijjiiii=c.asm.dynCall_iijjiiii).apply(null,arguments)},x$=c.dynCall_jiji=function(){return(x$=c.dynCall_jiji=c.asm.dynCall_jiji).apply(null,arguments)},f1=c.__emscripten_allow_main_runtime_queued_calls=21464;c.cwrap=Jt,c.keepRuntimeAlive=Cs,c.PThread=_e,c.PThread=_e,c.wasmMemory=Te,c.ExitStatus=dp;var Ud;function dp(N){this.name="ExitStatus",this.message="Program terminated with exit("+N+")",this.status=N}Da=function N(){Ud||Ry(),Ud||(Da=N)};function Ry(N){if(N=N||y,Wr>0)return;if(C){h(c),ap(),postMessage({cmd:"loaded"});return}if(xn(),Wr>0)return;function D(){Ud||(Ud=!0,c.calledRun=!0,!pt&&(ap(),h(c),c.onRuntimeInitialized&&c.onRuntimeInitialized(),og()))}c.setStatus?(c.setStatus("Running..."),setTimeout(function(){setTimeout(function(){c.setStatus("")},1),D()},1)):D()}c.run=Ry;function v$(N,D){if(yn=N,!D&&C)throw _d(N),"unwind";Cs()||ig(),w$(N)}function w$(N){yn=N,Cs()||(_e.terminateAllThreads(),c.onExit&&c.onExit(N),pt=!0),x(N,new dp(N))}if(c.preInit)for(typeof c.preInit=="function"&&(c.preInit=[c.preInit]);c.preInit.length>0;)c.preInit.pop()();Ry();var Gd;f&&(Gd={uncaughtException:process.listeners("uncaughtException").filter(function(N){return!f.uncaughtException.indexOf(N)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(N){return!f.unhandledRejection.indexOf(N)>-1})});var Hd;if(typeof WasmBackendModule!="undefined")Hd=WasmBackendModule;else if(typeof r!="undefined")Hd=r;else throw new Error("Could not find wasm module in post.js");if(Gd){var k$=Hd._dispose;Hd._dispose=function(){k$(),Gd.uncaughtException.forEach(function(N){process.removeListener("uncaughtException",N)}),Gd.unhandledRejection.forEach(function(N){process.removeListener("unhandledRejection",N)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModuleThreadedSimd=n)}),Z$=mt((e,t)=>{var n=(()=>{var a=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(a=a||__filename),function(r){r=r||{};var s=typeof r!="undefined"?r:{},i,o;s.ready=new Promise(function(G,te){i=G,o=te});var l;typeof process!="undefined"&&process.listeners&&(l={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var u=Object.assign({},s),p=[],d="./this.program",c=(G,te)=>{throw te},h=typeof window=="object",m=typeof importScripts=="function",f=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function y(G){return s.locateFile?s.locateFile(G,g):g+G}var b,x,v,w;function T(G){G instanceof pp||F("exiting due to exception: "+G)}var C,E,$;f?(m?g=fh().dirname(g)+"/":g=__dirname+"/",$=()=>{E||(C=Jb(),E=fh())},b=function(G,te){return $(),G=E.normalize(G),C.readFileSync(G,te?void 0:"utf8")},v=G=>{var te=b(G,!0);return te.buffer||(te=new Uint8Array(te)),te},x=(G,te,de)=>{$(),G=E.normalize(G),C.readFile(G,function(Se,Qe){Se?de(Se):te(Qe.buffer)})},process.argv.length>1&&(d=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),process.on("uncaughtException",function(G){if(!(G instanceof pp))throw G}),process.on("unhandledRejection",function(G){throw G}),c=(G,te)=>{if(np())throw process.exitCode=G,te;T(te),process.exit(G)},s.inspect=function(){return"[Emscripten Module object]"}):(h||m)&&(m?g=self.location.href:typeof document!="undefined"&&document.currentScript&&(g=document.currentScript.src),a&&(g=a),g.indexOf("blob:")!==0?g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1):g="",b=G=>{var te=new XMLHttpRequest;return te.open("GET",G,!1),te.send(null),te.responseText},m&&(v=G=>{var te=new XMLHttpRequest;return te.open("GET",G,!1),te.responseType="arraybuffer",te.send(null),new Uint8Array(te.response)}),x=(G,te,de)=>{var Se=new XMLHttpRequest;Se.open("GET",G,!0),Se.responseType="arraybuffer",Se.onload=()=>{if(Se.status==200||Se.status==0&&Se.response){te(Se.response);return}de()},Se.onerror=de,Se.send(null)},w=G=>document.title=G);var P=s.print||console.log.bind(console),F=s.printErr||console.warn.bind(console);Object.assign(s,u),u=null,s.arguments&&(p=s.arguments),s.thisProgram&&(d=s.thisProgram),s.quit&&(c=s.quit);var S=4;function M(G){M.shown||(M.shown={}),M.shown[G]||(M.shown[G]=1,F(G))}function U(G,te){if(typeof WebAssembly.Function=="function"){for(var de={i:"i32",j:"i64",f:"f32",d:"f64"},Se={parameters:[],results:te[0]=="v"?[]:[de[te[0]]]},Qe=1;Qe{ee=G},Q;s.wasmBinary&&(Q=s.wasmBinary);var ie=s.noExitRuntime||!0;typeof WebAssembly!="object"&&Ts("no native wasm support detected");var ae,le=!1,ue;function we(G,te){G||Ts(te)}function ye(G){var te=s["_"+G];return te}function Ie(G,te,de,Se,Qe){var nt={string:function(Rn){var Br=0;if(Rn!=null&&Rn!==0){var Wd=(Rn.length<<2)+1;Br=up(Wd),tt(Rn,Br,Wd)}return Br},array:function(Rn){var Br=up(Rn.length);return pt(Rn,Br),Br}};function Ue(Rn){return te==="string"?st(Rn):te==="boolean"?Boolean(Rn):Rn}var Be=ye(G),Lt=[],Ra=0;if(Se)for(var Ma=0;Ma=Se);)++Qe;if(Qe-te>16&&G.subarray&&We)return We.decode(G.subarray(te,Qe));for(var nt="";te>10,56320|Ra&1023)}}return nt}function st(G,te){return G?je(Jt,G,te):""}function et(G,te,de,Se){if(!(Se>0))return 0;for(var Qe=de,nt=de+Se-1,Ue=0;Ue=55296&&Be<=57343){var Lt=G.charCodeAt(++Ue);Be=65536+((Be&1023)<<10)|Lt&1023}if(Be<=127){if(de>=nt)break;te[de++]=Be}else if(Be<=2047){if(de+1>=nt)break;te[de++]=192|Be>>6,te[de++]=128|Be&63}else if(Be<=65535){if(de+2>=nt)break;te[de++]=224|Be>>12,te[de++]=128|Be>>6&63,te[de++]=128|Be&63}else{if(de+3>=nt)break;te[de++]=240|Be>>18,te[de++]=128|Be>>12&63,te[de++]=128|Be>>6&63,te[de++]=128|Be&63}}return te[de]=0,de-Qe}function tt(G,te,de){return et(G,Jt,te,de)}function Te(G){for(var te=0,de=0;de=55296&&Se<=57343&&(Se=65536+((Se&1023)<<10)|G.charCodeAt(++de)&1023),Se<=127?++te:Se<=2047?te+=2:Se<=65535?te+=3:te+=4}return te}var gt=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):void 0;function pt(G,te){Ut.set(G,te)}function yn(G,te,de){for(var Se=0;Se>0]=G.charCodeAt(Se);de||(Ut[te>>0]=0)}function Yt(G,te){return G%te>0&&(G+=te-G%te),G}var Fn,Ut,Jt,$a,Dn,Gt,sa,ia,Or;function Ns(G){Fn=G,s.HEAP8=Ut=new Int8Array(G),s.HEAP16=$a=new Int16Array(G),s.HEAP32=Gt=new Int32Array(G),s.HEAPU8=Jt=new Uint8Array(G),s.HEAPU16=Dn=new Uint16Array(G),s.HEAPU32=sa=new Uint32Array(G),s.HEAPF32=ia=new Float32Array(G),s.HEAPF64=Or=new Float64Array(G)}var dd=s.INITIAL_MEMORY||16777216,Lr,br=[],tp=[],$o=[],bn=!1,hd=!1,md=0;function np(){return ie||md>0}function fd(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)bd(s.preRun.shift());rp(br)}function gd(){bn=!0,rp(tp)}function Y0(){hd=!0}function yd(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)xd(s.postRun.shift());rp($o)}function bd(G){br.unshift(G)}function Fa(G){tp.unshift(G)}function xd(G){$o.unshift(G)}var oa=0,Fo=null,zr=null;function rg(G){oa++,s.monitorRunDependencies&&s.monitorRunDependencies(oa)}function vd(G){if(oa--,s.monitorRunDependencies&&s.monitorRunDependencies(oa),oa==0&&(Fo!==null&&(clearInterval(Fo),Fo=null),zr)){var te=zr;zr=null,te()}}s.preloadedImages={},s.preloadedAudios={};function Ts(G){s.onAbort&&s.onAbort(G),G="Aborted("+G+")",F(G),le=!0,ue=1,G+=". Build with -s ASSERTIONS=1 for more info.";var te=new WebAssembly.RuntimeError(G);throw o(te),te}var sg="data:application/octet-stream;base64,";function wd(G){return G.startsWith(sg)}function Cs(G){return G.startsWith("file://")}var xn;xn="tfjs-backend-wasm.wasm",wd(xn)||(xn=y(xn));function ap(G){try{if(G==xn&&Q)return new Uint8Array(Q);if(v)return v(G);throw"both async and sync fetching of the wasm failed"}catch(te){Ts(te)}}function ig(){if(!Q&&(h||m)){if(typeof fetch=="function"&&!Cs(xn))return fetch(xn,{credentials:"same-origin"}).then(function(G){if(!G.ok)throw"failed to load wasm binary file at '"+xn+"'";return G.arrayBuffer()}).catch(function(){return ap(xn)});if(x)return new Promise(function(G,te){x(xn,function(de){G(new Uint8Array(de))},te)})}return Promise.resolve().then(function(){return ap(xn)})}function og(){var G={env:Mo,wasi_snapshot_preview1:Mo};function te(Ue,Be){var Lt=Ue.exports;s.asm=Lt,ae=s.asm.memory,Ns(ae.buffer),Lr=s.asm.__indirect_function_table,Fa(s.asm.__wasm_call_ctors),vd("wasm-instantiate")}rg("wasm-instantiate");function de(Ue){te(Ue.instance)}function Se(Ue){return ig().then(function(Be){return WebAssembly.instantiate(Be,G)}).then(function(Be){return Be}).then(Ue,function(Be){F("failed to asynchronously prepare wasm: "+Be),Ts(Be)})}function Qe(){return!Q&&typeof WebAssembly.instantiateStreaming=="function"&&!wd(xn)&&!Cs(xn)&&typeof fetch=="function"?fetch(xn,{credentials:"same-origin"}).then(function(Ue){var Be=WebAssembly.instantiateStreaming(Ue,G);return Be.then(de,function(Lt){return F("wasm streaming compile failed: "+Lt),F("falling back to ArrayBuffer instantiation"),Se(de)})}):Se(de)}if(s.instantiateWasm)try{var nt=s.instantiateWasm(G,te);return nt}catch(Ue){return F("Module.instantiateWasm callback failed with error: "+Ue),!1}return Qe().catch(o),{}}var J0,Q0;function rp(G){for(;G.length>0;){var te=G.shift();if(typeof te=="function"){te(s);continue}var de=te.func;typeof de=="number"?te.arg===void 0?sp(de)():sp(de)(te.arg):de(te.arg===void 0?null:te.arg)}}function Wr(G){return G}function kd(G){var te=/\b_Z[\w\d_]+/g;return G.replace(te,function(de){var Se=de;return de===Se?de:Se+" ["+de+"]"})}var Da=[];function sp(G){var te=Da[G];return te||(G>=Da.length&&(Da.length=G+1),Da[G]=te=Lr.get(G)),te}function Z0(){var G=new Error;if(!G.stack){try{throw new Error}catch(te){G=te}if(!G.stack)return"(no stack trace available)"}return G.stack.toString()}function Do(G,te){Lr.set(G,te),Da[G]=te}function lg(){Ts("")}function ip(){return 2147483648}function Id(G,te,de){Jt.copyWithin(G,te,te+de)}function vn(G){try{return ae.grow(G-Fn.byteLength+65535>>>16),Ns(ae.buffer),1}catch(te){}}function Sd(G){var te=Jt.length;G=G>>>0;var de=ip();if(G>de)return!1;for(var Se=1;Se<=4;Se*=2){var Qe=te*(1+.2/Se);Qe=Math.min(Qe,G+100663296);var nt=Math.min(de,Yt(Math.max(G,Qe),65536)),Ue=vn(nt);if(Ue)return!0}return!1}var Ro={mappings:{},buffers:[null,[],[]],printChar:function(G,te){var de=Ro.buffers[G];te===0||te===10?((G===1?P:F)(je(de,0)),de.length=0):de.push(te)},varargs:void 0,get:function(){Ro.varargs+=4;var G=Gt[Ro.varargs-4>>2];return G},getStr:function(G){var te=st(G);return te},get64:function(G,te){return G}};function ug(G){return 0}function e1(G,te,de,Se,Qe){}function t1(G,te,de,Se){for(var Qe=0,nt=0;nt>2],Be=Gt[te+4>>2];te+=8;for(var Lt=0;Lt>2]=Qe,0}function pg(G){re(G)}var Nd=!1,Mo={abort:lg,emscripten_get_heap_max:ip,emscripten_memcpy_big:Id,emscripten_resize_heap:Sd,fd_close:ug,fd_seek:e1,fd_write:t1,setTempRet0:pg},$A=og(),n1=s.___wasm_call_ctors=function(){return(n1=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},cg=s._init=function(){return(cg=s._init=s.asm.init).apply(null,arguments)},dg=s._init_with_threads_count=function(){return(dg=s._init_with_threads_count=s.asm.init_with_threads_count).apply(null,arguments)},Td=s._get_threads_count=function(){return(Td=s._get_threads_count=s.asm.get_threads_count).apply(null,arguments)},Cd=s._register_tensor=function(){return(Cd=s._register_tensor=s.asm.register_tensor).apply(null,arguments)},hg=s._dispose_data=function(){return(hg=s._dispose_data=s.asm.dispose_data).apply(null,arguments)},_e=s._dispose=function(){return(_e=s._dispose=s.asm.dispose).apply(null,arguments)},mg=s._Abs=function(){return(mg=s._Abs=s.asm.Abs).apply(null,arguments)},_d=s._Add=function(){return(_d=s._Add=s.asm.Add).apply(null,arguments)},_s=s._AddN=function(){return(_s=s._AddN=s.asm.AddN).apply(null,arguments)},Po=s._All=function(){return(Po=s._All=s.asm.All).apply(null,arguments)},fg=s._Any=function(){return(fg=s._Any=s.asm.Any).apply(null,arguments)},a1=s._ArgMax=function(){return(a1=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},gg=s._AvgPool=function(){return(gg=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},r1=s._BatchMatMul=function(){return(r1=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},Es=s._Ceil=function(){return(Es=s._Ceil=s.asm.Ceil).apply(null,arguments)},yg=s._ClipByValue=function(){return(yg=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},bg=s._Conv2D=function(){return(bg=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},xg=s._Conv2DBackpropInput=function(){return(xg=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},vg=s._Cos=function(){return(vg=s._Cos=s.asm.Cos).apply(null,arguments)},wg=s._Cosh=function(){return(wg=s._Cosh=s.asm.Cosh).apply(null,arguments)},kg=s._CropAndResize=function(){return(kg=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},Ed=s._Cumprod=function(){return(Ed=s._Cumprod=s.asm.Cumprod).apply(null,arguments)},Ig=s._Cumsum=function(){return(Ig=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},Sg=s._DepthToSpace=function(){return(Sg=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},Ng=s._DepthwiseConv2dNative=function(){return(Ng=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},Tg=s._Elu=function(){return(Tg=s._Elu=s.asm.Elu).apply(null,arguments)},Cg=s._Equal=function(){return(Cg=s._Equal=s.asm.Equal).apply(null,arguments)},Ad=s._Exp=function(){return(Ad=s._Exp=s.asm.Exp).apply(null,arguments)},_g=s._FlipLeftRight=function(){return(_g=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},Eg=s._Floor=function(){return(Eg=s._Floor=s.asm.Floor).apply(null,arguments)},As=s._FloorDiv=function(){return(As=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},op=s._FusedBatchNorm=function(){return(op=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},Ag=s._FusedConv2D=function(){return(Ag=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},$g=s._FusedDepthwiseConv2D=function(){return($g=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},Fg=s._Gather=function(){return(Fg=s._Gather=s.asm.Gather).apply(null,arguments)},Ve=s._GatherNd=function(){return(Ve=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},Dg=s._Greater=function(){return(Dg=s._Greater=s.asm.Greater).apply(null,arguments)},Rg=s._GreaterEqual=function(){return(Rg=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},Mg=s._LeakyRelu=function(){return(Mg=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},Pg=s._Less=function(){return(Pg=s._Less=s.asm.Less).apply(null,arguments)},Og=s._LessEqual=function(){return(Og=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},Lg=s._Log=function(){return(Lg=s._Log=s.asm.Log).apply(null,arguments)},lp=s._LogicalAnd=function(){return(lp=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},$d=s._Max=function(){return($d=s._Max=s.asm.Max).apply(null,arguments)},Fd=s._MaxPool=function(){return(Fd=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},zg=s._Maximum=function(){return(zg=s._Maximum=s.asm.Maximum).apply(null,arguments)},Wg=s._Mean=function(){return(Wg=s._Mean=s.asm.Mean).apply(null,arguments)},Bg=s._Min=function(){return(Bg=s._Min=s.asm.Min).apply(null,arguments)},Vg=s._Minimum=function(){return(Vg=s._Minimum=s.asm.Minimum).apply(null,arguments)},Ug=s._MirrorPad=function(){return(Ug=s._MirrorPad=s.asm.MirrorPad).apply(null,arguments)},Gg=s._Multiply=function(){return(Gg=s._Multiply=s.asm.Multiply).apply(null,arguments)},Ct=s._Neg=function(){return(Ct=s._Neg=s.asm.Neg).apply(null,arguments)},Hg=s._NonMaxSuppressionV3=function(){return(Hg=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},jg=s._NonMaxSuppressionV4=function(){return(jg=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},qg=s._NonMaxSuppressionV5=function(){return(qg=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},Oo=s._NotEqual=function(){return(Oo=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},Dd=s._OneHot=function(){return(Dd=s._OneHot=s.asm.OneHot).apply(null,arguments)},Rd=s._PadV2=function(){return(Rd=s._PadV2=s.asm.PadV2).apply(null,arguments)},Md=s._Pow=function(){return(Md=s._Pow=s.asm.Pow).apply(null,arguments)},Kg=s._Prelu=function(){return(Kg=s._Prelu=s.asm.Prelu).apply(null,arguments)},Pd=s._Prod=function(){return(Pd=s._Prod=s.asm.Prod).apply(null,arguments)},Xg=s._RealDiv=function(){return(Xg=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},s1=s._Relu=function(){return(s1=s._Relu=s.asm.Relu).apply(null,arguments)},Od=s._Relu6=function(){return(Od=s._Relu6=s.asm.Relu6).apply(null,arguments)},i1=s._ResizeBilinear=function(){return(i1=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},Yg=s._Reverse=function(){return(Yg=s._Reverse=s.asm.Reverse).apply(null,arguments)},Jg=s._RotateWithOffset=function(){return(Jg=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},Qg=s._Round=function(){return(Qg=s._Round=s.asm.Round).apply(null,arguments)},Zg=s._Rsqrt=function(){return(Zg=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},ey=s._ScatterNd=function(){return(ey=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},ty=s._SelectV2=function(){return(ty=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},ny=s._Sigmoid=function(){return(ny=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},ay=s._Sin=function(){return(ay=s._Sin=s.asm.Sin).apply(null,arguments)},ry=s._Softmax=function(){return(ry=s._Softmax=s.asm.Softmax).apply(null,arguments)},sy=s._SparseFillEmptyRows=function(){return(sy=s._SparseFillEmptyRows=s.asm.SparseFillEmptyRows).apply(null,arguments)},iy=s._SparseReshape=function(){return(iy=s._SparseReshape=s.asm.SparseReshape).apply(null,arguments)},oy=s._SparseSegmentReduction=function(){return(oy=s._SparseSegmentReduction=s.asm.SparseSegmentReduction).apply(null,arguments)},ly=s._Sqrt=function(){return(ly=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},uy=s._Square=function(){return(uy=s._Square=s.asm.Square).apply(null,arguments)},py=s._SquaredDifference=function(){return(py=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},cy=s._Step=function(){return(cy=s._Step=s.asm.Step).apply(null,arguments)},dy=s._StridedSlice=function(){return(dy=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},hy=s._Sub=function(){return(hy=s._Sub=s.asm.Sub).apply(null,arguments)},my=s._Sum=function(){return(my=s._Sum=s.asm.Sum).apply(null,arguments)},fy=s._Tan=function(){return(fy=s._Tan=s.asm.Tan).apply(null,arguments)},gy=s._Tanh=function(){return(gy=s._Tanh=s.asm.Tanh).apply(null,arguments)},yy=s._Tile=function(){return(yy=s._Tile=s.asm.Tile).apply(null,arguments)},by=s._TopK=function(){return(by=s._TopK=s.asm.TopK).apply(null,arguments)},xy=s._Transform=function(){return(xy=s._Transform=s.asm.Transform).apply(null,arguments)},vy=s._Transpose=function(){return(vy=s._Transpose=s.asm.Transpose).apply(null,arguments)},wy=s.__FusedMatMul=function(){return(wy=s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},ky=s._malloc=function(){return(ky=s._malloc=s.asm.malloc).apply(null,arguments)},Iy=s._free=function(){return(Iy=s._free=s.asm.free).apply(null,arguments)},Sy=s.___errno_location=function(){return(Sy=s.___errno_location=s.asm.__errno_location).apply(null,arguments)},Ny=s._emscripten_main_thread_process_queued_calls=function(){return(Ny=s._emscripten_main_thread_process_queued_calls=s.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},Ld=s.stackSave=function(){return(Ld=s.stackSave=s.asm.stackSave).apply(null,arguments)},zd=s.stackRestore=function(){return(zd=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},up=s.stackAlloc=function(){return(up=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},Ty=s.dynCall_iijjiiii=function(){return(Ty=s.dynCall_iijjiiii=s.asm.dynCall_iijjiiii).apply(null,arguments)},Cy=s.dynCall_jiji=function(){return(Cy=s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)};s.cwrap=Ee;var Lo;function pp(G){this.name="ExitStatus",this.message="Program terminated with exit("+G+")",this.status=G}zr=function G(){Lo||cp(),Lo||(zr=G)};function cp(G){if(G=G||p,oa>0||(fd(),oa>0))return;function te(){Lo||(Lo=!0,s.calledRun=!0,!le&&(gd(),i(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),yd()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),te()},1)):te()}s.run=cp;function o1(G){ue=G,np()||(s.onExit&&s.onExit(G),le=!0),c(G,new pp(G))}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();cp();var zo;l&&(zo={uncaughtException:process.listeners("uncaughtException").filter(function(G){return!l.uncaughtException.indexOf(G)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(G){return!l.unhandledRejection.indexOf(G)>-1})});var Wo;if(typeof r!="undefined")Wo=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")Wo=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(zo){var _y=Wo._dispose;Wo._dispose=function(){_y(),zo.uncaughtException.forEach(function(G){process.removeListener("uncaughtException",G)}),zo.unhandledRejection.forEach(function(G){process.removeListener("unhandledRejection",G)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModule=n)}),Gh=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},Kp=class{refCount(e){return ua("refCount")}incRef(e){return ua("incRef")}timerAvailable(){return!0}time(e){return ua("time")}read(e){return ua("read")}readSync(e){return ua("readSync")}readToGPU(e,t){return ua("readToGPU")}numDataIds(){return ua("numDataIds")}disposeData(e,t){return ua("disposeData")}write(e,t,n){return ua("write")}move(e,t,n,a,r){return ua("move")}memory(){return ua("memory")}floatPrecision(){return ua("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return ua("dispose")}};function ua(e){throw new Error(`'${e}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function Yk(e){let t=e.length,n=0;for(;t>0;)n=Math.random()*t|0,t--,gh(e,t,n)}function eF(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let n=e.length,a=0;for(;n>0;)a=Math.random()*n|0,n--,gh(e,n,a),gh(t,n,a)}function Fp(e,t,n){return Math.max(e,Math.min(t,n))}function tF(e){return e%2===0?e:e+1}function gh(e,t,n){let a=e[t];e[t]=e[n],e[n]=a}function nF(e){let t=0;for(let n=0;nn+` Shapes ${e} and ${t} must match`)}function pi(e){R(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function js(e,t=[],n=!1){if(t==null&&(t=[]),Array.isArray(e)||dn(e)&&!n)for(let a=0;a0,n){return new Promise((a,r)=>{let s=0,i=()=>{if(e()){a();return}s++;let o=t(s);if(n!=null&&s>=n){r();return}setTimeout(i,o)};i()})}function pF(e,t){let n=1,a=-1;for(let s=0;s=0)n*=e[s];else if(e[s]===-1){if(a!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${a} and dim ${s}`);a=s}else if(e[s]<0)throw Error(`Shapes can not be < 0. Found ${e[s]} at dim ${s}`);if(a===-1){if(t>0&&t!==n)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(n===0)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%n!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${n}`);let r=e.slice();return r[a]=t/n,r}function Ta(e,t){let n=t.length;return e=e==null?t.map((a,r)=>r):[].concat(e),R(e.every(a=>a>=-n&&a`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`),R(e.every(a=>tl(a)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(a=>a<0?n+a:a)}function Jk(e,t){let n=[],a=[],r=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||r?null:Ta(t,e).sort(),i=0;for(let o=0;oo)&&e[o]===1&&(n.push(e[o]),a.push(o)),s[i]<=o&&i++}e[o]!==1&&(n.push(e[o]),a.push(o))}return{newShape:n,keptDims:a}}function Qk(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else throw new Error(`Unknown data type ${e}`);return n}function Zk(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else if(e==="string")n=new Array(t);else throw new Error(`Unknown data type ${e}`);return n}function eI(e,t){for(let n=0;nt+=n.length),t}function Hr(e){return typeof e=="string"||e instanceof String}function aI(e){return typeof e=="boolean"}function rI(e){return typeof e=="number"}function Hh(e){return Array.isArray(e)?Hh(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":rI(e)?"float32":Hr(e)?"string":aI(e)?"bool":"float32"}function Jr(e){return!!(e&&e.constructor&&e.call&&e.apply)}function yh(e,t){for(let n=t;n=0;--a)n[a]=n[a+1]*e[a+1];return n}function sI(e,t,n,a=!1){let r=new Array;if(t.length===1){let s=t[0]*(a?2:1);for(let i=0;il*u)*(a?2:1);for(let l=0;lr*s)*(n?2:1);if(a===0)return[];if(a!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${n?" for a complex tensor":""}.`);return sI(0,e,t,n)}function Qb(e,t){let n=jh(e,t);for(let a=0;aa*r,1);if(t==null||t==="float32")return Yo(e,new Float32Array(n));if(t==="int32")return Yo(e,new Int32Array(n));if(t==="bool")return Yo(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function Zb(e){e.forEach(t=>{R(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function hF(e,t,n){if(t===0)return 0;if(t===1)return e[0];let a=e[e.length-1];for(let r=0;r{let[n,a]=t.split(":");this.urlFlags[n]=yF(n,a)})}};function fF(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(n,...a)=>(gF(t,a[0],a[1]),a.join("="))),t}function gF(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}function yF(e,t){if(t=t.toLowerCase(),t==="true"||t==="false")return t==="true";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${e}.`)}function X(){return tx}var tx=null;function bF(e){tx=e}var Py;function oI(){if(Py==null){let e;if(typeof window!="undefined")e=window;else if(typeof global!="undefined")e=global;else if(typeof process!="undefined")e=process;else if(typeof self!="undefined")e=self;else throw new Error("Could not find a global object");Py=e}return Py}function xF(){let e=oI();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function nx(e,t){let n=xF();if(n.has(e))return n.get(e);{let a=t();return n.set(e,a),n.get(e)}}var fl="Abs",gl="Acos",yl="Acosh",us="Add",ci="AddN",bl="All",xl="Any",di="ArgMax",Xp="ArgMin",vl="Asin",wl="Asinh",kl="Atan",Il="Atanh",Sl="Atan2",hi="AvgPool",qh="AvgPoolGrad",Yp="AvgPool3D",Kh="AvgPool3DGrad",mi="BatchMatMul",Nl="BatchToSpaceND",Xh="Bincount",lI="BroadcastTo",Yh="BroadcastArgs",fi="Cast",gi="Ceil",ps="ClipByValue",Jh="Complex",Jp="ComplexAbs",Tl="Concat",yi="Conv2D",Qh="Conv2DBackpropFilter",bi="Conv2DBackpropInput",Qp="Conv3D",Zh="Conv3DBackpropFilterV2",em="Conv3DBackpropInputV2",xi="Cos",vi="Cosh",Cl="Cumprod",wi="Cumsum",_l="CropAndResize",tm="DenseBincount",El="DepthToSpace",ki="DepthwiseConv2dNative",nm="DepthwiseConv2dNativeBackpropFilter",am="DepthwiseConv2dNativeBackpropInput",rm="Diag",Zp="Dilation2D",bh="Dilation2DBackpropInput",xh="Dilation2DBackpropFilter",Ii="RealDiv",sm="Einsum",Si="Elu",im="EluGrad",Al="Erf",$l="Equal",Ni="Exp",Fl="ExpandDims",Dl="Expm1",om="FFT",ec="Fill",Rl="FlipLeftRight",Ti="Floor",Ci="FloorDiv",_i="FusedBatchNorm",Ml="GatherV2",Pl="GatherNd",Ol="Greater",Ei="GreaterEqual",Ai="Identity",lm="IFFT",um="Imag",Ll="IsFinite",zl="IsInf",Wl="IsNan",$i="LeakyRelu",Bl="Less",Vl="LessEqual",pm="LinSpace",Fi="Log",Ul="Log1p",Gl="LogicalAnd",tc="LogicalNot",nc="LogicalOr",uI="LogSoftmax",ac="LRN",cm="LRNGrad",Di="Max",Ri="Maximum",Mi="MaxPool",dm="MaxPoolGrad",rc="MaxPool3D",hm="MaxPool3DGrad",mm="MaxPoolWithArgmax",Pi="Mean",Oi="Min",Li="Minimum",zi="MirrorPad",Hl="Mod",fm="Multinomial",Wi="Multiply",jl="Neg",ql="NotEqual",Kl="NonMaxSuppressionV3",Xl="NonMaxSuppressionV4",Yl="NonMaxSuppressionV5",Jl="OnesLike",Bi="OneHot",Ql="Pack",Vi="PadV2",vF="Pool",Ui="Pow",Gi="Prelu",Zl="Prod",sc="Range",gm="Real",eu="Reciprocal",Hi="Relu",tu="Reshape",ic="ResizeNearestNeighbor",ym="ResizeNearestNeighborGrad",ji="ResizeBilinear",bm="ResizeBilinearGrad",qi="Relu6",Ki="Reverse",Xi="Round",Yi="Rsqrt",nu="ScatterNd",au="Select",ru="Selu",su="Slice",Ji="Sin",iu="Sinh",ou="Sign",Qi="Sigmoid",lu="Softplus",Zi="Sqrt",eo="Sum",uu="SpaceToBatchND",pu="SplitV",to="Softmax",oc="SparseFillEmptyRows",cu="SparseReshape",lc="SparseSegmentMean",uc="SparseSegmentSum",xm="SparseToDense",no="SquaredDifference",pc="Square",du="StridedSlice",vm="StringNGrams",wm="StringSplit",km="StringToHashBucketFast",ao="Sub",ro="Tan",so="Tanh",cs="Tile",hu="TopK",mu="Transform",io="Transpose",Im="Unique",fu="Unpack",cc="UnsortedSegmentSum",gu="ZerosLike",ds="Step",vh="FromPixels",yu="RotateWithOffset",qs="_FusedMatMul",Ks="FusedConv2D",Xs="FusedDepthwiseConv2D";function Gr(...e){X().getBool("IS_TEST")||X().getBool("PROD")||console.warn(...e)}function wF(...e){X().getBool("IS_TEST")||X().getBool("PROD")||console.log(...e)}var nl=nx("kernelRegistry",()=>new Map),Dp=nx("gradRegistry",()=>new Map);function wh(e,t){let n=ax(e,t);return nl.get(n)}function Qy(e){return Dp.get(e)}function kh(e){let t=nl.entries(),n=[];for(;;){let{done:a,value:r}=t.next();if(a)break;let[s,i]=r,[o]=s.split("_");o===e&&n.push(i)}return n}function dc(e){let{kernelName:t,backendName:n}=e,a=ax(t,n);nl.has(a)&&Gr(`The kernel '${t}' for backend '${n}' is already registered`),nl.set(a,e)}function pI(e){let{kernelName:t}=e;Dp.has(t)&&X().getBool("DEBUG")&&Gr(`Overriding the gradient for '${t}'`),Dp.set(t,e)}function kF(e,t){let n=ax(e,t);if(!nl.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);nl.delete(n)}function IF(e){if(!Dp.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Dp.delete(e)}function SF(e,t){kh(e).forEach(n=>{let a=Object.assign({},n,{backendName:t});dc(a)})}function ax(e,t){return`${t}_${e}`}var k={};Re(k,{arraysEqual:()=>ls,assert:()=>R,assertNonNegativeIntegerDimensions:()=>Zb,assertNonNull:()=>pi,assertShapesMatch:()=>Nn,bytesFromStringArray:()=>nI,bytesPerElement:()=>Jy,checkConversionForErrors:()=>eI,clamp:()=>Fp,computeStrides:()=>ml,createScalarValue:()=>AF,createShuffledIndices:()=>lF,decodeString:()=>Ih,distSquared:()=>rF,encodeString:()=>mc,fetch:()=>FF,fingerPrint64:()=>EF,flatten:()=>js,getArrayFromDType:()=>Zk,getTypedArrayFromDType:()=>Qk,hasEncodingLoss:()=>cF,hexToLong:()=>hc,indexToLoc:()=>mF,inferDtype:()=>Hh,inferFromImplicitShape:()=>pF,isBoolean:()=>aI,isFunction:()=>Jr,isInt:()=>tl,isNumber:()=>rI,isPromise:()=>ex,isScalarShape:()=>sF,isString:()=>Hr,isTypedArray:()=>dn,isValidDtype:()=>tI,locToIndex:()=>hF,makeOnesTypedArray:()=>Qb,makeZerosNestedTypedArray:()=>dF,makeZerosTypedArray:()=>jh,nearestDivisor:()=>yh,nearestLargerEven:()=>tF,now:()=>Rp,parseAxisParam:()=>Ta,randUniform:()=>aF,repeatedTry:()=>uF,rightPad:()=>_p,shuffle:()=>Yk,shuffleCombo:()=>eF,sizeFromShape:()=>xt,sizeToSquarishShape:()=>oF,squeezeShape:()=>Jk,sum:()=>nF,swap:()=>gh,tanh:()=>iF,toNestedArray:()=>Yo,toTypedArray:()=>Sm});var b1=ui(F$()),Ps=b1.default||b1;function hc(e){return Ps.fromString(e,!0,16)}var cI=hc("c3a5c85c97cb3127"),Rs=hc("b492b66fbe98f273"),wn=hc("9ae16a3b2f90404f");function Zy(e){return e.xor(e.shru(47))}function dI(e,t,n){let a=e.slice(t,t+n);return Ps.fromBytes(Array.from(a),!0,!0)}function yt(e,t){return dI(e,t,8)}function x1(e,t){return dI(e,t,4)}function Qt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function Kr(e,t,n=hc("9ddfea08eb382d69")){let a=e.xor(t).mul(n);a=a.xor(a.shru(47));let r=t.xor(a).mul(n);return r=r.xor(r.shru(47)),r=r.mul(n),r}function NF(e,t,n,a,r,s){r=r.add(e),s=Qt(s.add(r).add(a),21);let i=r;return r=r.add(t),r=r.add(n),s=s.add(Qt(r,44)),[r.add(a),s.add(i)]}function qd(e,t,n,a){return NF(yt(e,t),yt(e,t+8),yt(e,t+16),yt(e,t+24),n,a)}function TF(e,t=e.length){if(t>=8){let n=wn.add(t*2),a=yt(e,0).add(wn),r=yt(e,t-8),s=Qt(r,37).mul(n).add(a),i=Qt(a,25).add(r).mul(n);return Kr(s,i,n)}if(t>=4){let n=wn.add(t*2),a=x1(e,0);return Kr(a.shl(3).add(t),x1(e,t-4),n)}if(t>0){let n=e[0],a=e[t>>1],r=e[t-1],s=n+(a<<8),i=t+(r<<2);return Zy(wn.mul(s).xor(cI.mul(i))).mul(wn)}return wn}function CF(e,t=e.length){let n=wn.add(t*2),a=yt(e,0).mul(Rs),r=yt(e,8),s=yt(e,t-8).mul(n),i=yt(e,t-16).mul(wn);return Kr(Qt(a.add(r),43).add(Qt(s,30)).add(i),a.add(Qt(r.add(wn),18)).add(s),n)}function _F(e,t=e.length){let n=wn.add(t*2),a=yt(e,0).mul(wn),r=yt(e,8),s=yt(e,t-8).mul(n),i=yt(e,t-16).mul(wn),o=Qt(a.add(r),43).add(Qt(s,30)).add(i),l=Kr(o,a.add(Qt(r.add(wn),18)).add(s),n),u=yt(e,16).mul(n),p=yt(e,24),d=o.add(yt(e,t-32)).mul(n),c=l.add(yt(e,t-24)).mul(n);return Kr(Qt(u.add(p),43).add(Qt(d,30)).add(c),u.add(Qt(p.add(a),18)).add(d),n)}function EF(e,t=e.length){let n=Ps.fromNumber(81,!0);if(t<=32)return t<=16?TF(e,t):CF(e,t);if(t<=64)return _F(e,t);let a=n,r=n.mul(Rs).add(113),s=Zy(r.mul(wn).add(113)).mul(wn),i=[Ps.UZERO,Ps.UZERO],o=[Ps.UZERO,Ps.UZERO];a=a.mul(wn).add(yt(e,0));let l=0,u=(t-1>>6)*64,p=u+(t-1&63)-63;do a=Qt(a.add(r).add(i[0]).add(yt(e,l+8)),37).mul(Rs),r=Qt(r.add(i[1]).add(yt(e,l+48)),42).mul(Rs),a=a.xor(o[1]),r=r.add(i[0]).add(yt(e,l+40)),s=Qt(s.add(o[0]),33).mul(Rs),i=qd(e,l,i[1].mul(Rs),a.add(o[0])),o=qd(e,l+32,s.add(o[1]),r.add(yt(e,l+16))),[s,a]=[a,s],l+=64;while(l!==u);let d=Rs.add(s.and(255).shl(1));return l=p,o[0]=o[0].add(t-1&63),i[0]=i[0].add(o[0]),o[0]=o[0].add(i[0]),a=Qt(a.add(r).add(i[0]).add(yt(e,l+8)),37).mul(d),r=Qt(r.add(i[1]).add(yt(e,l+48)),42).mul(d),a=a.xor(o[1].mul(9)),r=r.add(i[0].mul(9).add(yt(e,l+40))),s=Qt(s.add(o[0]),33).mul(d),i=qd(e,l,i[1].mul(d),a.add(o[0])),o=qd(e,l+32,s.add(o[1]),r.add(yt(e,l+16))),[s,a]=[a,s],Kr(Kr(i[0],o[0],d).add(Zy(r).mul(cI)).add(s),Kr(i[1],o[1],d).add(a),d)}function AF(e,t){return t==="string"?mc(e):Sm([e],t)}function $F(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function Sm(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=js(e)),X().getBool("DEBUG")&&eI(e,t),$F(e,t))return e;if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool"){let n=new Uint8Array(e.length);for(let a=0;a{a=n()},s,i=Rp();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(r);else{r();for(let o of a)o.dataSync();s=Promise.resolve({kernelMs:Rp()-i})}if(X().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o{RF(u,l.dtype,e)})}return{kernelName:e,outputs:a,inputs:t,timeMs:s.then(o=>o.kernelMs),extraInfo:s.then(o=>o.getExtraProfileInfo!=null?o.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:n,timeMs:a,inputs:r,extraInfo:s}=e;n.forEach(i=>{Promise.all([i.data(),a,s]).then(o=>{this.logger.logKernelProfile(t,i,o[0],o[1],r,o[2])})})}};function RF(e,t,n){if(t!=="float32")return!1;for(let a=0;a0?m:""} `}}console.log(`%c${o} %c${i} %c${l}D ${p} %c${u} %c${d} %c${s}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function PF(e,t,n){let a={},r={};for(let l=0;la[f.id]=!0),h=!0,r[u.id]=!0;break}if(h)break}}let s={};s[n.id]=!0;let i={};for(let l=e.length-1;l>=0;l--){let u=e[l],p=u.inputs;for(let d=0;d=0;r--){let s=t[r],i=[];if(s.outputs.forEach(l=>{let u=e[l.id];u!=null?i.push(u):i.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let o=s.gradient(i);for(let l in s.inputs){if(!(l in o))throw new Error(`Cannot backprop through input ${l}. Available gradients found: ${Object.keys(o)}.`);let u=n(()=>o[l]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${u.dtype}'`);let p=s.inputs[l];if(!ls(u.shape,p.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${l}' has shape '${u.shape}', which does not match the shape of the input '${p.shape}'`);if(e[p.id]==null)e[p.id]=u;else{let d=e[p.id];e[p.id]=a(d,u),d.dispose()}}}}var v1=20,mp=3,Oy=7;function LF(e,t,n,a){let r=ml(t),s=zF(e,t,n,r),i=t.length,o=rh(e,t,n,r,s),l=["Tensor"];return a&&(l.push(` dtype: ${n}`),l.push(` rank: ${i}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(o.map(u=>" "+u).join(` `)),l.join(` -`)}function $F(e,t,n,a){let r=xt(t),s=a[a.length-1],i=new Array(s).fill(0),o=t.length,l=n==="complex64"?bp(e):e;if(o>1)for(let u=0;uf1){let g=hp*i,y=Array.from(e.slice(0,g)),b=Array.from(e.slice((o-hp)*i,o*i));return n==="complex64"&&(y=bp(y),b=bp(b)),["["+y.map((x,v)=>yp(x,r[v],n)).join(", ")+", ..., "+b.map((x,v)=>yp(x,r[o-hp+v],n)).join(", ")+"]"]}let f=n==="complex64"?bp(e):Array.from(e);return["["+f.map((g,y)=>yp(g,r[y],n)).join(", ")+"]"]}let u=t.slice(1),p=a.slice(1),d=a[0]*i,c=[];if(o>f1){for(let f=0;f1)for(let u=0;uv1){let g=mp*i,y=Array.from(e.slice(0,g)),b=Array.from(e.slice((o-mp)*i,o*i));return n==="complex64"&&(y=xp(y),b=xp(b)),["["+y.map((x,v)=>bp(x,r[v],n)).join(", ")+", ..., "+b.map((x,v)=>bp(x,r[o-mp+v],n)).join(", ")+"]"]}let f=n==="complex64"?xp(e):Array.from(e);return["["+f.map((g,y)=>bp(g,r[y],n)).join(", ")+"]"]}let u=t.slice(1),p=a.slice(1),d=a[0]*i,c=[];if(o>v1){for(let f=0;f`Length of values '${a}' does not match the size inferred by the shape '${this.size}'.`)}if(t==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=n||Hk(t,this.size),this.strides=ml(e)}set(e,...t){t.length===0&&(t=[0]),R(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let n=this.locToIndex(t);this.values[n]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let a of e){if(a<0||a>=this.shape[t]){let r=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(r)}t++}let n=e[e.length-1];for(let a=0;akh(n))}catch(n){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataToGPU(e){return this.throwIfDisposed(),Oa().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Oa().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>kh(t))}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return e}async bytes(){this.throwIfDisposed();let e=await Oa().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(Oa().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return jo.print(this,e)}clone(){return this.throwIfDisposed(),jo.clone(this)}toString(e=!1){let t=this.dataSync();return AF(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),jo.cast(this,e)}variable(e=!0,t,n){return this.throwIfDisposed(),Oa().makeVariable(this,e,t,n)}};Object.defineProperty(Ae,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function ne(){return ex("Tensor",()=>Ae)}ne();var Zr=class extends Ae{constructor(e,t,n,a){super(e.shape,e.dtype,e.dataId,a);this.trainable=t,this.name=n}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!os(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Oa().disposeTensor(this),this.dataId=e.dataId,Oa().incRef(this,null)}dispose(){Oa().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(Zr,Symbol.hasInstance,{value:e=>e instanceof Ae&&e.assign!=null&&e.assign instanceof Function});var Wa={};Re(Wa,{assertTypesMatch:()=>iI,getTensorsInContainer:()=>nx,isTensorInList:()=>OF,makeTypesMatch:()=>$t});var Qy;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(Qy||(Qy={}));var eb;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(eb||(eb={}));var tb;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(tb||(tb={}));var nb;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(nb||(nb={}));var ab;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(ab||(ab={}));var PF={float32:nb,int32:eb,bool:tb,complex64:ab};function Ia(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return PF[e][t]}function Nm(e){return Ia(e,"int32")}function $t(e,t){if(e.dtype===t.dtype)return[e,t];let n=Ia(e.dtype,t.dtype);return[e.cast(n),t.cast(n)]}function iI(e,t){R(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function OF(e,t){return t.some(n=>n.id===e.id)}function nx(e){let t=[];return oI(e,t,new Set),t}function oI(e,t,n){if(e==null)return;if(e instanceof Ae){t.push(e);return}if(!LF(e))return;let a=e;for(let r in a){let s=a[r];n.has(s)||(n.add(s),oI(s,t,n))}}function LF(e){return Array.isArray(e)||typeof e=="object"}function Oy(e){return e.kernelName!=null}var g1=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(e=>e.name)))}}}dispose(){for(let e in this.registeredVariables)this.registeredVariables[e].dispose()}},Rp=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new g1}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){wh(e).forEach(t=>{t.disposeFunc!=null&&t.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let n=t.factory();if(n&&!(n instanceof qp)&&typeof n.then=="function"){let a=++this.pendingBackendInitId,r=n.then(s=>a(athis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(n),()=>this.endScope(a),()=>(a=t(),a instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),a))}scopedRun(e,t,n){e();try{let a=n();return t(),a}catch(a){throw t(),a}}nextTensorId(){return Rp.nextTensorId++}nextVariableId(){return Rp.nextVariableId++}clone(e){let t=L.runKernel(_i,{x:e}),n={x:e},a=s=>({x:()=>{let i="float32",o={x:s},l={dtype:i};return L.runKernel(mi,o,l)}}),r=[];return this.addTapeNode(this.state.activeScope.name,n,[t],a,r,{}),t}runKernel(e,t,n){if(this.backendName==null&&this.backend,vh(e,this.backendName)==null)throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,n){let a=this.backend.numDataIds(),r=0;n.forEach(o=>{r+=o.dtype==="complex64"?3:1});let s=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=a-t-r-s;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,n=[],a=this.isTapeOn(),r=this.state.numBytes,s=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let o,l=Oy(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(Oy(e)){let{kernelName:h,inputs:m,attrs:f}=e;this.backendName==null&&this.backend;let g=vh(h,this.backendName);R(g!=null,()=>`Cannot find registered kernel '${h}' for backend '${this.backendName}'`),i=()=>{let y=this.backend.numDataIds();o=g.kernelFunc({inputs:m,attrs:f,backend:this.backend});let b=Array.isArray(o)?o:[o];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(h,y,b);let x=b.map(v=>{if(v.rank!=null)return v;let{dataId:w,shape:T,dtype:C}=v;return this.makeTensorFromDataId(w,T,C)});if(a){let v=this.getTensorsForGradient(h,m,x);n=this.saveTensorsForBackwardMode(v)}return x}}else{let{forwardFunc:h}=e,m=f=>{!a||(n=f.map(g=>this.keep(this.clone(g))))};i=()=>{let f=this.backend.numDataIds();o=this.tidy(()=>h(this.backend,m));let g=Array.isArray(o)?o:[o];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(l,f,g),g}}let{inputs:u,attrs:p}=e,d=Oy(e)?null:e.backwardsFunc,c;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?t=i():(c=this.profiler.profileKernel(l,u,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(c),t=c.outputs)}),a&&this.addTapeNode(l,u,t,d,n,p),this.state.profiling&&this.state.activeProfile.kernels.push({name:l,bytesAdded:this.state.numBytes-r,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-s,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(u).map(h=>u[h]!=null?u[h].shape:null),outputShapes:t.map(h=>h.shape),kernelTimeMs:c.timeMs,extraInfo:c.extraInfo}),Array.isArray(o)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(t=>this.keep(this.clone(t)))}getTensorsForGradient(e,t,n){let a=Jy(e);if(a!=null){let r=a.inputsToSave||[],s=a.outputsToSave||[],i;a.saveAllInputs?(R(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(l=>t[l])):i=r.map(l=>t[l]);let o=n.filter((l,u)=>s[u]);return i.concat(o)}return[]}makeTensor(e,t,n,a){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",a=a||this.backend;let r=e;n==="string"&&Hr(e[0])&&(r=e.map(o=>hc(o)));let s=a.write(r,t,n),i=new Ae(t,n,s,this.nextTensorId());if(this.trackTensor(i,a),n==="string"){let o=this.state.tensorInfo.get(s),l=Kk(r);this.state.numBytes+=l-o.bytes,o.bytes=l}return i}makeTensorFromDataId(e,t,n,a){n=n||"float32";let r=new Ae(t,n,e,this.nextTensorId());return this.trackTensor(r,a),r}makeVariable(e,t=!0,n,a){n=n||this.nextVariableId().toString(),a!=null&&a!==e.dtype&&(e=e.cast(a));let r=new Zr(e,t,n,this.nextTensorId());if(this.state.registeredVariables[r.name]!=null)throw new Error(`Variable with name ${r.name} was already registered`);return this.state.registeredVariables[r.name]=r,this.incRef(r,this.backend),r}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let n=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(n=e.size*Yy(e.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:n})),e instanceof Zr||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!=="complex64"&&e.dtype!=="string"){let n=e.size*Yy(e.dtype);this.state.numBytes-=n}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(a=>a.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-n;for(let a of this.state.activeProfile.kernels)a.kernelTimeMs=await a.kernelTimeMs,a.extraInfo=await a.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,n,a,r,s){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:n,saved:r},o=Jy(e);o!=null&&(a=o.gradFunc),a!=null&&(i.gradient=l=>(l=l.map((u,p)=>{if(u==null){let d=n[p],c=jh(d.size,d.dtype);return this.makeTensor(c,d.shape,d.dtype)}return u}),a(l.length>1?l:l[0],r,s))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=nx(e),n=new Set(t.map(r=>r.id));for(let r=0;r{!r.kept&&r.scopeId===a.id&&this.track(r)})}gradients(e,t,n,a=!1){if(R(t.length>0,()=>"gradients() received an empty list of xs."),n!=null&&n.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${n.dtype}'`);let r=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));R(r instanceof Ae,()=>"The result y returned by f() must be a tensor.");let s=EF(this.state.activeTape,t,r);if(!a&&s.length===0&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let i={};i[r.id]=n==null?zF(r.shape):n,_F(i,s,l=>this.tidy(l),BF);let o=t.map(l=>i[l.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(l=>{for(let u of l.saved)u.dispose()}),this.state.activeTape=null),{value:r,grads:o}})}customGrad(e){return R(Jr(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{R(t.every(i=>i instanceof Ae),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,a={};t.forEach((i,o)=>{a[o]=i});let r=(i,o)=>(n=e(...t,o),R(n.value instanceof Ae,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),R(Jr(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),s=(i,o)=>{let l=n.gradFunc(i,o),u=Array.isArray(l)?l:[l];R(u.length===t.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),R(u.every(d=>d instanceof Ae),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let p={};return u.forEach((d,c)=>{p[c]=()=>d}),p};return this.runKernelFunc({forwardFunc:r,backwardsFunc:s,inputs:a})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=Dp(),n=await this.backend.time(e);return n.wallMs=Dp()-t,n}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new g1;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};Rp.nextTensorId=0;Rp.nextVariableId=0;function zF(e){let t=Yb(xt(e),"float32");return L.makeTensor(t,e,"float32")}function lI(){let e=Qk();if(e._tfengine==null){let t=new Zk(e);e._tfengine=new Rp(t)}return pF(e._tfengine.ENV),DF(()=>e._tfengine),e._tfengine}var L=lI();function BF(e,t){let n={a:e,b:t};return L.runKernel(ls,n)}var mc={};Re(mc,{isBrowser:()=>uI,isMobile:()=>VF,mockIsMobile:()=>UF});function WF(){return typeof navigator!="undefined"&&navigator!=null}var rb;function UF(e){rb=e}function VF(e){if(rb!==void 0)return rb;if(e||WF()){if(e||(e=navigator),e.product==="ReactNative")return!0;let t=e.userAgent||e.vendor||(typeof window!="undefined"?window.opera:"");if(!t){let n=e;return n.userAgentData&&n.userAgentData.mobile}return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))}return!1}function uI(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Ha=Y();Ha.registerFlag("DEBUG",()=>!1,e=>{e&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")});Ha.registerFlag("IS_BROWSER",()=>uI());Ha.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Ha.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Ha.registerFlag("PROD",()=>!1);Ha.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Ha.getBool("DEBUG"));Ha.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Ha.registerFlag("IS_TEST",()=>!1);Ha.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);Ha.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);function lr(e,t){let n=e;if(cn(e))return t==="string"?[]:[e.length];if(!Array.isArray(e))return[];let a=[];for(;Array.isArray(n)||cn(n)&&t!=="string";)a.push(n.length),n=n[0];return Array.isArray(e)&&Y().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&pI(e,a,[]),a}function pI(e,t,n){if(n=n||[],!Array.isArray(e)&&!cn(e)){R(t.length===0,()=>`Element arr[${n.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}R(t.length>0,()=>`Element arr[${n.join("][")}] should be a primitive, but is an array of ${e.length} elements`),R(e.length===t[0],()=>`Element arr[${n.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`);let a=t.slice(1);for(let r=0;r=0&&(r=a),y1(a,r,t,n),e==null||!cn(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string"){let o=e==null?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${n}' must be a Tensor or TensorLike, but got '${o}'`)}let s=lr(e,r);!cn(e)&&!Array.isArray(e)&&(e=[e]);let i=r!=="string"?Sm(e,r):Hs(e,[],!0);return L.makeTensor(i,s,r)}function Mp(e,t,n,a="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${n} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map((r,s)=>A(r,`${t}[${s}]`,n,a))}var cI="__op";function z(e){let t=Object.keys(e);if(t.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t.length} keys.`);let n=t[0],a=e[n];n.endsWith("_")&&(n=n.substring(0,n.length-1)),n=n+cI;let r=(...s)=>{L.startScope(n);try{let i=a(...s);return Zb(i)&&console.error("Cannot return a Promise inside of tidy."),L.endScope(i),i}catch(i){throw L.endScope(null),i}};return Object.defineProperty(r,"name",{value:n,configurable:!0}),r}function GF(e,t){let n=A(e,"real","complex"),a=A(t,"imag","complex");Nn(n.shape,a.shape,`real and imag shapes, ${n.shape} and ${a.shape}, must match in call to tf.complex().`);let r={real:n,imag:a};return L.runKernel(Jh,r)}var Qr=z({complex_:GF});function ds(e,t,n,a){if(a==null&&(a=Hh(e)),a==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!cn(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(t!=null){Jb(t);let r=xt(t),s=xt(n);R(r===s,()=>`Based on the provided shape, [${t}], the tensor should have ${r} values but has ${s}`);for(let i=0;i`Error creating a new Tensor. Inferred shape (${n}) does not match the provided shape (${t}). `)}}return!cn(e)&&!Array.isArray(e)&&(e=[e]),t=t||n,e=a!=="string"?Sm(e,a):Hs(e,[],!0),L.makeTensor(e,t,a)}function Yn(e,t,n){let a=lr(e,n);return ds(e,t,a,n)}var sb={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},Ih=4;async function HF(e,t){let n=[],a=[],r=Array.isArray(e)?e.map(i=>i.name):Object.keys(e);for(let i=0;i{let c=await l.bytes(),h=c.reduce((g,y)=>g+y.length,0)+Ih*c.length,m=new Uint8Array(h),f=0;for(let g=0;g{if(t+=s.byteLength,n.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let a=new Uint8Array(t),r=0;return n.forEach(s=>{a.set(new Uint8Array(s.buffer),r),r+=s.byteLength}),a.buffer}var ax=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function b1(e){return ax?Buffer.byteLength(e):new Blob([e]).size}function qF(e){if(ax)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),n="";for(let a=0,r=t.length;a{t+=r.byteLength});let n=new Uint8Array(t),a=0;return e.forEach(r=>{n.set(new Uint8Array(r),a),a+=r.byteLength}),n.buffer}function x1(e){let t="/";for(e=e.trim();e.endsWith(t);)e=e.slice(0,e.length-1);let n=e.split(t);return n[n.length-1]}function hI(e,t){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:t};return e.signature!=null&&(n.signature=e.signature),e.userDefinedMetadata!=null&&(n.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(n.modelInitializer=e.modelInitializer),e.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),n}async function sx(e,t){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};if(e.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),e.weightsManifest!=null){let[a,r]=await t(e.weightsManifest);n.weightSpecs=a,n.weightData=r}return e.signature!=null&&(n.signature=e.signature),e.userDefinedMetadata!=null&&(n.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(n.modelInitializer=e.modelInitializer),n}function fc(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:e.modelTopology==null?0:b1(JSON.stringify(e.modelTopology)),weightSpecsBytes:e.weightSpecs==null?0:b1(JSON.stringify(e.weightSpecs)),weightDataBytes:e.weightData==null?0:e.weightData.byteLength}}function XF(){let e=n=>{let a=n<<13,r=0;for(;(a&8388608)===0;)r-=8388608,a<<=1;return a&=-8388609,r+=947912704,a|r},t=new Uint32Array(2048);t[0]=0;for(let n=1;n<1024;n++)t[n]=e(n);for(let n=1024;n<2048;n++)t[n]=939524096+(n-1024<<13);return t}function YF(){let e=new Uint32Array(64);e[0]=0,e[31]=1199570944,e[32]=2147483648,e[63]=3347054592;for(let t=1;t<31;t++)e[t]=t<<23;for(let t=33;t<63;t++)e[t]=2147483648+(t-32<<23);return e}function JF(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function ZF(){let e=XF(),t=YF(),n=JF();return a=>{let r=new ArrayBuffer(4*a.length),s=new Uint32Array(r);for(let i=0;i>10]+(o&1023)]+t[o>>10];s[i]=l}return new Float32Array(r)}}var Ft=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Ft.instance==null&&(Ft.instance=new Ft),Ft.instance}static registerSaveRouter(e){Ft.getInstance().saveRouters.push(e)}static registerLoadRouter(e){Ft.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return Ft.getHandlers(e,"save")}static getLoadHandlers(e,t){return Ft.getHandlers(e,"load",t)}static getHandlers(e,t,n){let a=[];return(t==="load"?Ft.getInstance().loadRouters:Ft.getInstance().saveRouters).forEach(r=>{let s=r(e,n);s!==null&&a.push(s)}),a}},QF=e=>Ft.registerSaveRouter(e),eD=e=>Ft.registerLoadRouter(e),tD=e=>Ft.getSaveHandlers(e),nD=(e,t)=>Ft.getLoadHandlers(e,t),ib="tensorflowjs",ob=1,zs="models_store",jr="model_info_store";function mI(){if(!Y().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let e=typeof window=="undefined"?self:window,t=e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB||e.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function lb(e){let t=e.result;t.createObjectStore(zs,{keyPath:"modelPath"}),t.createObjectStore(jr,{keyPath:"modelPath"})}var Xs=class{constructor(e){if(this.indexedDB=mI(),e==null||!e)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise((n,a)=>{let r=this.indexedDB.open(ib,ob);r.onupgradeneeded=()=>lb(r),r.onsuccess=()=>{let s=r.result;if(t==null){let i=s.transaction(zs,"readonly"),o=i.objectStore(zs).get(this.modelPath);o.onsuccess=()=>{if(o.result==null)return s.close(),a(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));n(o.result.modelArtifacts)},o.onerror=l=>(s.close(),a(o.error)),i.oncomplete=()=>s.close()}else{let i=fc(t),o=s.transaction(jr,"readwrite"),l=o.objectStore(jr),u=l.put({modelPath:this.modelPath,modelArtifactsInfo:i}),p;u.onsuccess=()=>{p=s.transaction(zs,"readwrite");let d=p.objectStore(zs).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});d.onsuccess=()=>n({modelArtifactsInfo:i}),d.onerror=c=>{l=o.objectStore(jr);let h=l.delete(this.modelPath);h.onsuccess=()=>(s.close(),a(d.error)),h.onerror=m=>(s.close(),a(d.error))}},u.onerror=d=>(s.close(),a(u.error)),o.oncomplete=()=>{p==null?s.close():p.oncomplete=()=>s.close()}}},r.onerror=s=>a(r.error)})}};Xs.URL_SCHEME="indexeddb://";var fI=e=>Y().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Xs.URL_SCHEME)?aD(e.slice(Xs.URL_SCHEME.length)):null;Ft.registerSaveRouter(fI);Ft.registerLoadRouter(fI);function aD(e){return new Xs(e)}function rD(e){return e.startsWith(Xs.URL_SCHEME)?e.slice(Xs.URL_SCHEME.length):e}var sD=class{constructor(){this.indexedDB=mI()}async listModels(){return new Promise((e,t)=>{let n=this.indexedDB.open(ib,ob);n.onupgradeneeded=()=>lb(n),n.onsuccess=()=>{let a=n.result,r=a.transaction(jr,"readonly"),s=r.objectStore(jr).getAll();s.onsuccess=()=>{let i={};for(let o of s.result)i[o.modelPath]=o.modelArtifactsInfo;e(i)},s.onerror=i=>(a.close(),t(s.error)),r.oncomplete=()=>a.close()},n.onerror=a=>t(n.error)})}async removeModel(e){return e=rD(e),new Promise((t,n)=>{let a=this.indexedDB.open(ib,ob);a.onupgradeneeded=()=>lb(a),a.onsuccess=()=>{let r=a.result,s=r.transaction(jr,"readwrite"),i=s.objectStore(jr),o=i.get(e),l;o.onsuccess=()=>{if(o.result==null)return r.close(),n(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let u=i.delete(e),p=()=>{l=r.transaction(zs,"readwrite");let d=l.objectStore(zs).delete(e);d.onsuccess=()=>t(o.result.modelArtifactsInfo),d.onerror=c=>n(o.error)};u.onsuccess=p,u.onerror=d=>(p(),r.close(),n(o.error))}},o.onerror=u=>(r.close(),n(o.error)),s.oncomplete=()=>{l==null?r.close():l.oncomplete=()=>r.close()}},a.onerror=r=>n(a.error)})}},kr="/",qo="tensorflowjs_models",gI="info",iD="model_topology",oD="weight_specs",lD="weight_data",uD="model_metadata";function yI(e){return{info:[qo,e,gI].join(kr),topology:[qo,e,iD].join(kr),weightSpecs:[qo,e,oD].join(kr),weightData:[qo,e,lD].join(kr),modelMetadata:[qo,e,uD].join(kr)}}function bI(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function pD(e){let t=e.split(kr);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(kr)}function cD(e){return e.startsWith(Ys.URL_SCHEME)?e.slice(Ys.URL_SCHEME.length):e}var Ys=class{constructor(e){if(!Y().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,e==null||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=yI(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let t=JSON.stringify(e.modelTopology),n=JSON.stringify(e.weightSpecs),a=fc(e);try{this.LS.setItem(this.keys.info,JSON.stringify(a)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,qF(e.weightData));let r={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(r)),{modelArtifactsInfo:a}}catch(r){throw bI(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${a.modelTopologyBytes}, weightSpecsBytes=${a.weightSpecsBytes}, weightDataBytes=${a.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(e==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(e.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let t={},n=JSON.parse(this.LS.getItem(this.keys.topology));if(n==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=n;let a=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(a==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=a;let r=this.LS.getItem(this.keys.modelMetadata);if(r!=null){let i=JSON.parse(r);t.format=i.format,t.generatedBy=i.generatedBy,t.convertedBy=i.convertedBy,i.signature!=null&&(t.signature=i.signature),i.userDefinedMetadata!=null&&(t.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(t.modelInitializer=i.modelInitializer),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}let s=this.LS.getItem(this.keys.weightData);if(s==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=KF(s),t}};Ys.URL_SCHEME="localstorage://";var xI=e=>Y().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Ys.URL_SCHEME)?dD(e.slice(Ys.URL_SCHEME.length)):null;Ft.registerSaveRouter(xI);Ft.registerLoadRouter(xI);function dD(e){return new Ys(e)}var hD=class{constructor(){R(Y().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),R(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=qo+kr,n=kr+gI;for(let a=0;a"scheme must not be undefined or null."),e.endsWith(Yo)&&(e=e.slice(0,e.indexOf(Yo))),R(e.length>0,()=>"scheme must not be an empty string.");let n=ua.getInstance();R(n.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),n.managers[e]=t}static getManager(e){let t=this.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(this.getInstance().managers)}};function rh(e){if(e.indexOf(Yo)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${ua.getSchemes().join(",")}`);return{scheme:e.split(Yo)[0],path:e.split(Yo)[1]}}async function vI(e,t,n=!1){R(e!==t,()=>`Old path and new path are the same: '${e}'`);let a=Ft.getLoadHandlers(e);R(a.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),R(a.length<2,()=>`Copying failed because more than one (${a.length}) load handlers for source URL ${e}.`);let r=a[0],s=Ft.getSaveHandlers(t);R(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),R(s.length<2,()=>`Copying failed because more than one (${a.length}) save handlers for destination URL ${t}.`);let i=s[0],o=rh(e).scheme,l=rh(e).path,u=o===rh(e).scheme,p=await r.load();n&&u&&await ua.getManager(o).removeModel(l);let d=await i.save(p);return n&&!u&&await ua.getManager(o).removeModel(l),d.modelArtifactsInfo}async function mD(){let e=ua.getSchemes(),t={};for(let n of e){let a=await ua.getManager(n).listModels();for(let r in a){let s=n+Yo+r;t[s]=a[r]}}return t}async function fD(e){let t=rh(e);return ua.getManager(t.scheme).removeModel(t.path)}async function gD(e,t){return vI(e,t,!1)}async function yD(e,t){return vI(e,t,!0)}var bD=class{fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}};if(Y().get("IS_BROWSER")){Y().setPlatform("browser",new bD);try{ua.registerManager(Ys.URL_SCHEME,new hD)}catch(e){}try{ua.registerManager(Xs.URL_SCHEME,new sD)}catch(e){}}var xD={importFetch:()=>N$()},Ly,vD=class{constructor(){this.util=T$(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return Y().global.fetch!=null?Y().global.fetch(e,t):(Ly==null&&(Ly=xD.importFetch()),Ly(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?"":new this.util.TextDecoder(t).decode(e)}};Y().get("IS_NODE")&&!Y().get("IS_BROWSER")&&Y().setPlatform("node",new vD);function He(e,t="float32",n){return t=t||"float32",Jb(e),new jt(e,t,n)}function wD(e,t){let n=A(e,"x","cast");if(!qk(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&n.dtype!=="string"||t!=="string"&&n.dtype==="string")throw new Error("Only strings can be casted to strings");let a={x:n},r={dtype:t};return L.runKernel(mi,a,r)}var oe=z({cast_:wD});function kD(e){let t={x:A(e,"x","clone","string_or_numeric")};return L.runKernel(_i,t)}var Sr=z({clone_:kD});function wI(e,t=!1){console.log(e.toString(t))}lI();var ID={buffer:He,cast:oe,clone:Sr,print:wI};RF(ID);var Qt={};Re(Qt,{browserFiles:()=>AD,browserHTTPRequest:()=>MD,concatenateArrayBuffers:()=>rx,copyModel:()=>gD,decodeWeights:()=>dI,encodeWeights:()=>HF,fromMemory:()=>OD,getLoadHandlers:()=>nD,getModelArtifactsForJSON:()=>sx,getModelArtifactsInfoForJSON:()=>fc,getSaveHandlers:()=>tD,http:()=>ox,isHTTPScheme:()=>ub,listModels:()=>mD,loadWeights:()=>$D,moveModel:()=>yD,registerLoadRouter:()=>eD,registerSaveRouter:()=>QF,removeModel:()=>fD,weightsLoaderFactory:()=>II,withSaveHandler:()=>LD});var SD="model",ND=".json",TD=".weights.bin";function v1(e){return new Promise(t=>setTimeout(t)).then(e)}var nl=class{constructor(e){if(!Y().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(nl.URL_SCHEME)&&(e=e.slice(nl.URL_SCHEME.length)),(e==null||e.length===0)&&(e=SD),this.modelJsonFileName=e+ND,this.weightDataFileName=e+TD}async save(e){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let n=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],a=hI(e,n),r=window.URL.createObjectURL(new Blob([JSON.stringify(a)],{type:"application/json"})),s=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(s.download=this.modelJsonFileName,s.href=r,await v1(()=>s.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let i=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=t,await v1(()=>i.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:fc(e)}}}};nl.URL_SCHEME="downloads://";var CD=class{constructor(e){if(e==null||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let n=new FileReader;n.onload=a=>{let r=JSON.parse(a.target.result),s=r.modelTopology;if(s==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(r.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:s});return}let i=sx(r,o=>this.loadWeights(o));e(i)},n.onerror=a=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),n.readAsText(this.jsonFile)})}loadWeights(e){let t=[],n=[];for(let s of e)t.push(...s.weights),n.push(...s.paths);let a=this.checkManifestAndWeightFiles(e),r=n.map(s=>this.loadWeightsFile(s,a[s]));return Promise.all(r).then(s=>[t,rx(s)])}loadWeightsFile(e,t){return new Promise((n,a)=>{let r=new FileReader;r.onload=s=>{let i=s.target.result;n(i)},r.onerror=s=>a(`Failed to weights data from file of path '${e}'.`),r.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],n=this.weightsFiles.map(r=>x1(r.name)),a={};for(let r of e)r.paths.forEach(s=>{let i=x1(s);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),n.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);a[s]=this.weightsFiles[n.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return a}},ED=e=>Y().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(nl.URL_SCHEME)?_D(e.slice(nl.URL_SCHEME.length)):null;Ft.registerSaveRouter(ED);function _D(e="model"){return new nl(e)}function AD(e){return new CD(e)}function w1(e,t,n,a){i(e),n=n==null?0:n,a=a==null?1:a,o(n,a);let r=0,s=l=>(l.then(u=>{let p=n+ ++r/e.length*(a-n);return t(p),u}),l);function i(l){R(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function o(l,u){R(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),R(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),R(u>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${u}`)}return Promise.all(e.map(s))}async function kI(e,t){t==null&&(t={});let n=t.fetchFunc==null?Y().platform.fetch:t.fetchFunc,a=e.map(u=>n(u,t.requestInit,{isBinary:!0})),r=0,s=.5,i=(t.onProgress==null?await Promise.all(a):await w1(a,t.onProgress,r,s)).map(u=>u.arrayBuffer()),o=.5,l=1;return t.onProgress==null?await Promise.all(i):await w1(i,t.onProgress,o,l)}async function $D(e,t="",n,a){return II(r=>kI(r,{requestInit:a}))(e,t,n)}function II(e){return async(t,n="",a)=>{let r=t.map(()=>!1),s={},i=a!=null?a.map(()=>!1):[],o=[];if(t.forEach((h,m)=>{let f=0;h.weights.forEach(g=>{let y="quantization"in g?g.quantization.dtype:g.dtype,b=sb[y]*xt(g.shape),x=()=>{r[m]=!0,s[m]==null&&(s[m]=[]),s[m].push({manifestEntry:g,groupOffset:f,sizeBytes:b})};a!=null?a.forEach((v,w)=>{v===g.name&&(x(),i[w]=!0)}):x(),o.push(g.name),f+=b})}),!i.every(h=>h)){let h=a.filter((m,f)=>!i[f]);throw new Error(`Could not find weights in manifest with names: ${h.join(", ")}. -Manifest JSON has weights with names: ${o.join(", ")}.`)}let l=r.reduce((h,m,f)=>(m&&h.push(f),h),[]),u=[];l.forEach(h=>{t[h].paths.forEach(m=>{let f=n+(n.endsWith("/")?"":"/")+m;u.push(f)})});let p=await e(u),d={},c=0;return l.forEach(h=>{let m=t[h].paths.length,f=0;for(let x=0;x{let v=g.slice(x.groupOffset,x.groupOffset+x.sizeBytes),w=dI(v,[x.manifestEntry]);for(let T in w)d[T]=w[T]}),c+=m}),d}}var FD="application/octet-stream",DD="application/json",ix=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(R(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=Y().platform.fetch,R(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&R(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let n=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],a=hI(e,n);t.body.append("model.json",new Blob([JSON.stringify(a)],{type:DD}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:FD}),"model.weights.bin");let r=await this.fetch(this.path,t);if(r.ok)return{modelArtifactsInfo:fc(e),responses:[r]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${r.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(r){let s=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?s+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":s+=" Please make sure the server is serving valid JSON for this request.",new Error(s)}let n=t.modelTopology,a=t.weightsManifest;if(n==null&&a==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return sx(t,r=>this.loadWeights(r))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[n,a]=RD(t),r=this.weightPathPrefix||n,s=[];for(let u of e)s.push(...u.weights);let i=[],o=[];for(let u of e)for(let p of u.paths)this.weightUrlConverter!=null?o.push(this.weightUrlConverter(p)):i.push(r+p+a);this.weightUrlConverter&&i.push(...await Promise.all(o));let l=await kI(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[s,rx(l)]}};ix.URL_SCHEME_REGEX=/^https?:\/\//;function RD(e){let t=e.lastIndexOf("/"),n=e.lastIndexOf("?"),a=e.substring(0,t),r=n>t?e.substring(n):"";return[a+"/",r]}function ub(e){return e.match(ix.URL_SCHEME_REGEX)!=null}var SI=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let n=!0;if(Array.isArray(e)?n=e.every(a=>ub(a)):n=ub(e),n)return ox(e,t)}return null};Ft.registerSaveRouter(SI);Ft.registerLoadRouter(SI);function ox(e,t){return new ix(e,t)}function MD(e,t){return ox(e,t)}var zy=class{constructor(e){this.modelArtifacts=e}async load(){return this.modelArtifacts}},PD=class{constructor(e){this.saveHandler=e}async save(e){return this.saveHandler(e)}};function OD(e,t,n,a){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new zy(e):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new zy({modelTopology:e})):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new zy({modelTopology:e,weightSpecs:t,weightData:n,trainingConfig:a}))}function LD(e){return new PD(e)}var NI={};Re(NI,{confusionMatrix:()=>VD});function zD(e,t,n=!1,a=!1){let r=A(e,"a","matMul"),s=A(t,"b","matMul");[r,s]=$t(r,s);let i={a:r,b:s},o={transposeA:n,transposeB:a};return L.runKernel(hi,i,o)}var Fe=z({matMul_:zD});function BD(e,t,n=1,a=0){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let r={indices:A(e,"indices","oneHot","int32")},s={depth:t,onValue:n,offValue:a};return L.runKernel(Bi,r,s)}var al=z({oneHot_:BD});function WD(e,t){let n=A(e,"x","transpose");if(t==null&&(t=n.shape.map((s,i)=>i).reverse()),R(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(s=>{R(s>=0&&s`All entries in 'perm' must be between 0 and ${n.rank-1} but got ${t}`)}),n.rank<=1)return n.clone();let a={x:n},r={perm:t};return L.runKernel(so,a,r)}var Me=z({transpose_:WD});function UD(e,t,n){let a=A(e,"labels","confusionMatrix"),r=A(t,"predictions","confusionMatrix");R(n==null||n>0&&Number.isInteger(n),()=>`If provided, numClasses must be a positive integer, but got ${n}`),R(a.rank===1,()=>`Expected the rank of labels to be 1, but got ${a.rank}`),R(r.rank===1,()=>`Expected the rank of predictions to be 1, but got ${r.rank}`),R(a.shape[0]===r.shape[0],()=>`Mismatch in the number of examples: ${a.shape[0]} vs. ${r.shape[0]}. Labels and predictions should have the same number of elements.`),R(n>0&&Number.isInteger(n),()=>`numClasses is required to be a positive integer, but got ${n}`);let s=al(oe(a,"int32"),n),i=al(oe(r,"int32"),n),o=Me(s),l=Fe(o,i);return oe(l,"int32")}var VD=z({confusionMatrix_:UD}),yu={};Re(yu,{assertAndGetBroadcastShape:()=>ct,getBroadcastDims:()=>TI,getReductionAxes:()=>Wt});function TI(e,t){let n=e.length,a=[];for(let r=0;r1&&i===1&&a.unshift(s)}return a}function Wt(e,t){let n=[];for(let a=0;a1)&&n.unshift(s)}return n}function ct(e,t){let n=[],a=Math.max(e.length,t.length);for(let r=0;rYD,fromPixelsAsync:()=>KD,toPixels:()=>XD});function Tm(e,t,n){if(ui(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let a=lr(e,n);if(a.length!==3&&a.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(a.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return ds(e,t,a,n)}var $s;function CI(e,t=3){if(t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(e==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let n=!1,a=!1,r=!1,s=!1,i=!1,o=!1;if(e.data instanceof Uint8Array)n=!0;else if(typeof ImageData!="undefined"&&e instanceof ImageData)a=!0;else if(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)r=!0;else if(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)s=!0;else if(e.getContext!=null)i=!0;else if(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)o=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${e.constructor.name}`);if(r&&r&&e.readyState<2)throw new Error("The video element has not loaded data yet. Please wait for `loadeddata` event on the