-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathface-api.min.js
More file actions
1 lines (1 loc) · 634 KB
/
face-api.min.js
File metadata and controls
1 lines (1 loc) · 634 KB
1
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).faceapi=t.faceapi||{})}(this,function(c){"use strict";var r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function t(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var M=function(){return(M=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)};function p(i,a,s,u){return new(s=s||Promise)(function(t,e){function n(t){try{o(u.next(t))}catch(t){e(t)}}function r(t){try{o(u.throw(t))}catch(t){e(t)}}function o(e){e.done?t(e.value):new s(function(t){t(e.value)}).then(n,r)}o((u=u.apply(i,a||[])).next())})}function P(n,r){var o,i,a,t,s={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return t={next:e(0),throw:e(1),return:e(2)},"function"==typeof Symbol&&(t[Symbol.iterator]=function(){return this}),t;function e(e){return function(t){return function(e){if(o)throw new TypeError("Generator is already executing.");for(;s;)try{if(o=1,i&&(a=2&e[0]?i.return:e[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,e[1])).done)return a;switch(i=0,a&&(e=[2&e[0],a.value]),e[0]){case 0:case 1:a=e;break;case 4:return s.label++,{value:e[1],done:!1};case 5:s.label++,i=e[1],e=[0];continue;case 7:e=s.ops.pop(),s.trys.pop();continue;default:if(!(a=0<(a=s.trys).length&&a[a.length-1])&&(6===e[0]||2===e[0])){s=0;continue}if(3===e[0]&&(!a||e[1]>a[0]&&e[1]<a[3])){s.label=e[1];break}if(6===e[0]&&s.label<a[1]){s.label=a[1],a=e;break}if(a&&s.label<a[2]){s.label=a[2],s.ops.push(e);break}a[2]&&s.ops.pop(),s.trys.pop();continue}e=r.call(n,s)}catch(t){e=[6,t],i=0}finally{o=a=0}if(5&e[0])throw e[1];return{value:e[0]?e[1]:void 0,done:!0}}([e,t])}}}function l(){for(var t=0,e=0,n=arguments.length;e<n;e++)t+=arguments[e].length;var r=Array(t),o=0;for(e=0;e<n;e++)for(var i=arguments[e],a=0,s=i.length;a<s;a++,o++)r[o]=i[a];return r}var o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function e(t,e){function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}function y(i,a,s,u){return new(s=s||Promise)(function(t,e){function n(t){try{o(u.next(t))}catch(t){e(t)}}function r(t){try{o(u.throw(t))}catch(t){e(t)}}function o(e){e.done?t(e.value):new s(function(t){t(e.value)}).then(n,r)}o((u=u.apply(i,a||[])).next())})}function I(n,r){var o,i,a,t,s={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return t={next:e(0),throw:e(1),return:e(2)},"function"==typeof Symbol&&(t[Symbol.iterator]=function(){return this}),t;function e(e){return function(t){return function(e){if(o)throw new TypeError("Generator is already executing.");for(;s;)try{if(o=1,i&&(a=2&e[0]?i.return:e[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,e[1])).done)return a;switch(i=0,a&&(e=[2&e[0],a.value]),e[0]){case 0:case 1:a=e;break;case 4:return s.label++,{value:e[1],done:!1};case 5:s.label++,i=e[1],e=[0];continue;case 7:e=s.ops.pop(),s.trys.pop();continue;default:if(!(a=0<(a=s.trys).length&&a[a.length-1])&&(6===e[0]||2===e[0])){s=0;continue}if(3===e[0]&&(!a||e[1]>a[0]&&e[1]<a[3])){s.label=e[1];break}if(6===e[0]&&s.label<a[1]){s.label=a[1],a=e;break}if(a&&s.label<a[2]){s.label=a[2],s.ops.push(e);break}a[2]&&s.ops.pop(),s.trys.pop();continue}e=r.call(n,s)}catch(t){e=[6,t],i=0}finally{o=a=0}if(5&e[0])throw e[1];return{value:e[0]?e[1]:void 0,done:!0}}([e,t])}}}var n=(i.prototype.setPlatform=function(t,e){null!=this.platform&&console.warn("Platform "+this.platformName+" has already been set. Overwriting the platform with "+e+"."),this.platformName=t,this.platform=e},i.prototype.registerFlag=function(t,e,n){if(this.flagRegistry[t]={evaluationFn:e,setHook:n},null!=this.urlFlags[t]){var r=this.urlFlags[t];console.warn("Setting feature override from URL "+t+": "+r+"."),this.set(t,r)}},i.prototype.get=function(t){return t in this.flags||(this.flags[t]=this.evaluateFlag(t)),this.flags[t]},i.prototype.getNumber=function(t){return this.get(t)},i.prototype.getBool=function(t){return this.get(t)},i.prototype.getFlags=function(){return this.flags},Object.defineProperty(i.prototype,"features",{get:function(){return this.flags},enumerable:!0,configurable:!0}),i.prototype.set=function(t,e){if(null==this.flagRegistry[t])throw new Error("Cannot set flag "+t+" as it has not been registered.");this.flags[t]=e,null!=this.flagRegistry[t].setHook&&this.flagRegistry[t].setHook(e)},i.prototype.evaluateFlag=function(t){if(null==this.flagRegistry[t])throw new Error("Cannot evaluate flag '"+t+"': no evaluation function found.");return this.flagRegistry[t].evaluationFn()},i.prototype.setFlags=function(t){this.flags=Object.assign({},t)},i.prototype.reset=function(){this.flags={},this.urlFlags={},this.populateURLFlags()},i.prototype.populateURLFlags=function(){var o=this;if(void 0!==this.global&&void 0!==this.global.location&&void 0!==this.global.location.search){var t=a(this.global.location.search);"tfjsflags"in t&&t.tfjsflags.split(",").forEach(function(t){var e=t.split(":"),n=e[0],r=e[1];o.urlFlags[n]=function(t,e){if("true"===(e=e.toLowerCase())||"false"===e)return"true"===e;if(""+ +e===e)return+e;throw new Error("Could not parse value flag value "+e+" for flag "+t+".")}(n,r)})}},i);function i(t){this.global=t,this.flags={},this.flagRegistry={},this.urlFlags={},this.populateURLFlags()}function a(t){var a={};return t.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return r=a,o=e[0],i=e[1],r[decodeURIComponent(o)]=decodeURIComponent(i||""),e.join("=");var r,o,i}),a}var _=null;function s(t){_=t}var u=Object.freeze({Environment:n,getQueryParams:a,get ENV(){return _},setEnvironmentGlobal:s});function h(t){for(var e=t.length,n=0,r=0;0<e;)r=Math.random()*e|0,n=t[--e],t[e]=t[r],t[r]=n}function f(t,e,n){return Math.max(t,Math.min(e,n))}function g(t){return t%2==0?t:t+1}function d(t){for(var e=0,n=0;n<t.length;n++)e+=t[n];return e}function O(t,e){if(!t)throw new Error("string"==typeof e?e:e())}function x(t,e,n){void 0===n&&(n=""),O(k(t,e),function(){return n+" Shapes "+t+" and "+e+" must match"})}function v(t){O(null!=t,function(){return"The input to the tensor constructor must be a non-null value."})}function m(t,e,n){if(void 0===e&&(e=[]),void 0===n&&(n=!1),null==e&&(e=[]),Array.isArray(t)||z(t)&&!n)for(var r=0;r<t.length;++r)m(t[r],e,n);else e.push(t);return e}function L(t){if(0===t.length)return 1;for(var e=t[0],n=1;n<t.length;n++)e*=t[n];return e}function k(t,e){if(t===e)return!0;if(null==t||null==e)return!1;if(t.length!==e.length)return!1;for(var n=0;n<t.length;n++)if(t[n]!==e[n])return!1;return!0}function B(t){return t%1==0}function b(t){if(null!=Math.tanh)return Math.tanh(t);if(t===1/0)return 1;if(t===-1/0)return-1;var e=Math.exp(2*t);return(e-1)/(e+1)}function w(t){var e=Math.ceil(Math.sqrt(t));return[e,Math.ceil(t/e)]}function C(t,e){return e<=t.length?t:t+" ".repeat(e-t.length)}function E(i,a,s){return void 0===a&&(a=function(t){return 0}),new Promise(function(e,n){var r=0,o=function(){if(i())e();else{var t=a(++r);null!=s&&s<=r?n():setTimeout(o,t)}};o()})}function R(t,e){for(var n=1,r=-1,o=0;o<t.length;++o)if(0<=t[o])n*=t[o];else if(-1===t[o]){if(-1!==r)throw Error("Shapes can only have 1 implicit size. Found -1 at dim "+r+" and dim "+o);r=o}else if(t[o]<0)throw Error("Shapes can not be < 0. Found "+t[o]+" at dim "+o);if(-1===r){if(0<e&&e!==n)throw Error("Size("+e+") must match the product of shape "+t);return t}if(0===n)throw Error("Cannot infer the missing size in ["+t+"] when there are 0 elements");if(e%n!=0)throw Error("The implicit shape can't be a fractional number. Got "+e+" / "+n);var i=t.slice();return i[r]=e/n,i}function S(t,e){var n=e.length;return O((t=null==t?e.map(function(t,e){return e}):[].concat(t)).every(function(t){return-n<=t&&t<n}),function(){return"All values in axis param must be in range [-"+n+", "+n+") but got axis "+t}),O(t.every(function(t){return B(t)}),function(){return"All values in axis param must be integers but got axis "+t}),t.map(function(t){return t<0?n+t:t})}function N(t,e){for(var n=[],r=[],o=null!=e&&Array.isArray(e)&&0===e.length,i=null==e||o?null:S(e,t).sort(),a=0,s=0;s<t.length;++s){if(null!=i){if(i[a]===s&&1!==t[s])throw new Error("Can't squeeze axis "+s+" since its dim '"+t[s]+"' is not 1");(null==i[a]||i[a]>s)&&1===t[s]&&(n.push(t[s]),r.push(s)),i[a]<=s&&a++}1!==t[s]&&(n.push(t[s]),r.push(s))}return{newShape:n,keptDims:r}}function A(t,e){var n=null;if(null==t||"float32"===t)n=new Float32Array(e);else if("int32"===t)n=new Int32Array(e);else{if("bool"!==t)throw new Error("Unknown data type "+t);n=new Uint8Array(e)}return n}function T(t,e){var n=null;if(null==t||"float32"===t)n=new Float32Array(e);else if("int32"===t)n=new Int32Array(e);else if("bool"===t)n=new Uint8Array(e);else{if("string"!==t)throw new Error("Unknown data type "+t);n=new Array(e)}return n}function D(t,e){for(var n=0;n<t.length;n++){var r=t[n];if(isNaN(r)||!isFinite(r))throw Error("A tensor of type "+e+" being uploaded contains "+r+".")}}function F(t){return"bool"===t||"complex64"===t||"float32"===t||"int32"===t||"string"===t}function W(t,e){return!("complex64"===e||"float32"===e&&"complex64"!==t||"int32"===e&&"float32"!==t&&"complex64"!==t||"bool"===e&&"bool"===t)}function z(t){return t instanceof Float32Array||t instanceof Int32Array||t instanceof Uint8Array}function U(t){if("float32"===t||"int32"===t)return 4;if("complex64"===t)return 8;if("bool"===t)return 1;throw new Error("Unknown dtype "+t)}function V(t){if(null==t)return 0;var e=0;return t.forEach(function(t){return e+=t.length}),e}function G(t){return"string"==typeof t||t instanceof String}function H(t){return"boolean"==typeof t}function j(t){return"number"==typeof t}function q(t){return Array.isArray(t)?q(t[0]):t instanceof Float32Array?"float32":t instanceof Int32Array||t instanceof Uint8Array?"int32":j(t)?"float32":G(t)?"string":H(t)?"bool":"float32"}function $(t){return!!(t&&t.constructor&&t.call&&t.apply)}function K(t,e){for(var n=e;n<t;++n)if(t%n==0)return n;return t}function X(t){var e=t.length;if(e<2)return[];var n=new Array(e-1);n[e-2]=t[e-1];for(var r=e-3;0<=r;--r)n[r]=n[r+1]*t[r+1];return n}function Y(t,e,n){if("string"===e)throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(t)&&(t=m(t)),n&&D(t,e),t instanceof Float32Array&&"float32"===e||t instanceof Int32Array&&"int32"===e||t instanceof Uint8Array&&"bool"===e)return t;if(null==e||"float32"===e||"complex64"===e)return new Float32Array(t);if("int32"===e)return new Int32Array(t);if("bool"!==e)throw new Error("Unknown data type "+e);for(var r=new Uint8Array(t.length),o=0;o<r.length;++o)0!==Math.round(t[o])&&(r[o]=1);return r}function J(t,e){if(0===t.length)return e[0];var n=t.reduce(function(t,e){return t*e});if(0===n)return[];if(n!==e.length)throw new Error("["+t+"] does not match the input size.");return function t(e,n,r){var o=new Array;if(1===n.length)for(var i=n[0],a=0;a<i;a++)o[a]=r[e+a];else{i=n[0];var s=n.slice(1),u=s.reduce(function(t,e){return t*e});for(a=0;a<i;a++)o[a]=t(e+a*u,s,r)}return o}(0,t,e)}function Q(t,e){for(var n=Z(t,e),r=0;r<n.length;r++)n[r]=1;return n}function Z(t,e){if(null==e||"float32"===e||"complex64"===e)return new Float32Array(t);if("int32"===e)return new Int32Array(t);if("bool"===e)return new Uint8Array(t);throw new Error("Unknown data type "+e)}function tt(){return _.platform.now()}function et(e){e.forEach(function(t){O(Number.isInteger(t)&&0<=t,function(){return"Tensor must have a shape comprised of positive integers but got shape ["+e+"]."})})}function nt(t,e){return void 0===e&&(e="utf-8"),e=e||"utf-8",_.platform.encode(t,e)}function rt(t,e){return void 0===e&&(e="utf-8"),e=e||"utf-8",_.platform.decode(t,e)}var ot=Object.freeze({shuffle:h,clamp:f,nearestLargerEven:g,sum:d,randUniform:function(t,e){var n=Math.random();return e*n+(1-n)*t},distSquared:function(t,e){for(var n=0,r=0;r<t.length;r++){var o=Number(t[r])-Number(e[r]);n+=o*o}return n},assert:O,assertShapesMatch:x,assertNonNull:v,flatten:m,sizeFromShape:L,isScalarShape:function(t){return 0===t.length},arraysEqual:k,isInt:B,tanh:b,sizeToSquarishShape:w,createShuffledIndices:function(t){for(var e=new Uint32Array(t),n=0;n<t;++n)e[n]=n;return h(e),e},rightPad:C,repeatedTry:E,inferFromImplicitShape:R,parseAxisParam:S,squeezeShape:N,getTypedArrayFromDType:A,getArrayFromDType:T,checkConversionForErrors:D,isValidDtype:F,hasEncodingLoss:W,isTypedArray:z,bytesPerElement:U,bytesFromStringArray:V,isString:G,isBoolean:H,isNumber:j,inferDtype:q,isFunction:$,nearestDivisor:K,computeStrides:X,toTypedArray:Y,toNestedArray:J,makeOnesTypedArray:Q,makeZerosTypedArray:Z,now:tt,assertNonNegativeIntegerDimensions:et,fetch:function(t,e){return _.platform.fetch(t,e)},encodeString:nt,decodeString:rt}),it=(at.prototype.profileKernel=function(o,i,t){var e,a=this,s=this.backendTimer.time(function(){e=t()});return(Array.isArray(e)?e:[e]).forEach(function(r){r.data().then(function(n){!function(t,e,n){if("float32"===e)for(var r=0;r<t.length;r++){var o=t[r];if(isNaN(o)||!isFinite(o))return console.warn("Found "+o+" in the result of '"+n+"'")}}(n,r.dtype,o),s.then(function(t){var e="";null!=t.getExtraProfileInfo&&(e=t.getExtraProfileInfo()),a.logger.logKernelProfile(o,r,n,t.kernelMs,i,e)})})}),e},at);function at(t,e){this.backendTimer=t,null==(this.logger=e)&&(this.logger=new st)}var st=(ct.prototype.logKernelProfile=function(t,e,n,r,o,i){var a=C(r+"ms",9),s=C(t,25),u=e.rank,c=e.size,l=C(e.shape.toString(),14),h="";for(var p in o){var f=o[p].shape,d=f.length;h+=p+": "+d+"D "+(0<d?f:"")+" "}console.log("%c"+s+"\t%c"+a+"\t%c"+u+"D "+l+"\t%c"+c+"\t%c"+h+"\t%c"+i,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")},ct),ut=7;function ct(){}function lt(t,e,n){return C(Array.isArray(t)?parseFloat(t[0].toFixed(ut))+" + "+parseFloat(t[1].toFixed(ut))+"j":G(t)?"'"+t+"'":"bool"===n?ht(t):parseFloat(t.toFixed(ut)).toString(),e)}function ht(t){return 0===t?"false":"true"}function pt(t){for(var e=[],n=0;n<t.length;n+=2)e.push([t[n],t[n+1]]);return e}var ft=(gt.prototype.set=function(t){for(var e=this,n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];0===n.length&&(n=[0]),O(n.length===this.rank,function(){return"The number of provided coordinates ("+n.length+") must match the rank ("+e.rank+")"});var o=this.locToIndex(n);this.values[o]=t},gt.prototype.get=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];0===t.length&&(t=[0]);for(var n=0,r=0,o=t;r<o.length;r++){var i=o[r];if(i<0||i>=this.shape[n]){var a="Requested out of range element at "+t+". Buffer shape="+this.shape;throw new Error(a)}n++}for(var s=t[t.length-1],u=0;u<t.length-1;++u)s+=this.strides[u]*t[u];return this.values[s]},gt.prototype.locToIndex=function(t){if(0===this.rank)return 0;if(1===this.rank)return t[0];for(var e=t[t.length-1],n=0;n<t.length-1;++n)e+=this.strides[n]*t[n];return e},gt.prototype.indexToLoc=function(t){if(0===this.rank)return[];if(1===this.rank)return[t];for(var e=new Array(this.shape.length),n=0;n<e.length-1;++n)e[n]=Math.floor(t/this.strides[n]),t-=e[n]*this.strides[n];return e[e.length-1]=t,e},Object.defineProperty(gt.prototype,"rank",{get:function(){return this.shape.length},enumerable:!0,configurable:!0}),gt.prototype.toTensor=function(){return yt.make(this.shape,{values:this.values},this.dtype)},gt),dt=null,vt=null,mt=null;function gt(t,e,n){var r=this;if(this.dtype=e,this.shape=t.slice(),this.size=L(t),null!=n){var o=n.length;O(o===this.size,function(){return"Length of values '"+o+"' does not match the size inferred by the shape '"+r.size+"'."})}if("complex64"===e)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||T(e,this.size),this.strides=X(t)}var yt=(xt.make=function(t,e,n,r){var o=e.values;return null!=e.values&&"string"===n&&G(e.values[0])&&(o=e.values.map(function(t){return nt(t)})),new xt(t,n,o,e.dataId,r)},xt.prototype.flatten=function(){return this.throwIfDisposed(),this.as1D()},xt.prototype.asScalar=function(){return this.throwIfDisposed(),O(1===this.size,function(){return"The array must have only 1 element."}),this.reshape([])},xt.prototype.as1D=function(){return this.throwIfDisposed(),this.reshape([this.size])},xt.prototype.as2D=function(t,e){return this.throwIfDisposed(),this.reshape([t,e])},xt.prototype.as3D=function(t,e,n){return this.throwIfDisposed(),this.reshape([t,e,n])},xt.prototype.as4D=function(t,e,n,r){return this.throwIfDisposed(),this.reshape([t,e,n,r])},xt.prototype.as5D=function(t,e,n,r,o){return this.throwIfDisposed(),this.reshape([t,e,n,r,o])},xt.prototype.asType=function(t){return this.throwIfDisposed(),vt.cast(this,t)},Object.defineProperty(xt.prototype,"rank",{get:function(){return this.shape.length},enumerable:!0,configurable:!0}),xt.prototype.buffer=function(){return y(this,void 0,void 0,function(){var e;return I(this,function(t){switch(t.label){case 0:return[4,this.data()];case 1:return e=t.sent(),[2,vt.buffer(this.shape,this.dtype,e)]}})})},xt.prototype.bufferSync=function(){return vt.buffer(this.shape,this.dtype,this.dataSync())},xt.prototype.array=function(){return y(this,void 0,void 0,function(){var e;return I(this,function(t){switch(t.label){case 0:return[4,this.data()];case 1:return e=t.sent(),[2,J(this.shape,e)]}})})},xt.prototype.arraySync=function(){return J(this.shape,this.dataSync())},xt.prototype.data=function(){return y(this,void 0,void 0,function(){var e,n;return I(this,function(t){switch(t.label){case 0:return this.throwIfDisposed(),e=dt().read(this.dataId),"string"!==this.dtype?[3,2]:[4,e];case 1:n=t.sent();try{return[2,n.map(function(t){return rt(t)})]}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}t.label=2;case 2:return[2,e]}})})},xt.prototype.dataSync=function(){this.throwIfDisposed();var t=dt().readSync(this.dataId);if("string"===this.dtype)try{return t.map(function(t){return rt(t)})}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return t},xt.prototype.bytes=function(){return y(this,void 0,void 0,function(){var e;return I(this,function(t){switch(t.label){case 0:return this.throwIfDisposed(),[4,dt().read(this.dataId)];case 1:return e=t.sent(),"string"===this.dtype?[2,e]:[2,new Uint8Array(e.buffer)]}})})},xt.prototype.dispose=function(){this.isDisposed||(dt().disposeTensor(this),this.isDisposedInternal=!0)},Object.defineProperty(xt.prototype,"isDisposed",{get:function(){return this.isDisposedInternal},enumerable:!0,configurable:!0}),xt.prototype.throwIfDisposed=function(){if(this.isDisposed)throw new Error("Tensor is disposed.")},xt.prototype.toFloat=function(){return this.asType("float32")},xt.prototype.toInt=function(){return this.asType("int32")},xt.prototype.toBool=function(){return this.asType("bool")},xt.prototype.print=function(t){return void 0===t&&(t=!1),vt.print(this,t)},xt.prototype.reshape=function(t){return this.throwIfDisposed(),vt.reshape(this,t)},xt.prototype.reshapeAs=function(t){return this.throwIfDisposed(),this.reshape(t.shape)},xt.prototype.expandDims=function(t){return void 0===t&&(t=0),vt.expandDims(this,t)},xt.prototype.cumsum=function(t,e,n){return void 0===t&&(t=0),void 0===e&&(e=!1),void 0===n&&(n=!1),vt.cumsum(this,t,e,n)},xt.prototype.squeeze=function(t){return this.throwIfDisposed(),vt.squeeze(this,t)},xt.prototype.clone=function(){return this.throwIfDisposed(),vt.clone(this)},xt.prototype.oneHot=function(t,e,n){return this.throwIfDisposed(),vt.oneHot(this,t,e,n)},xt.prototype.toString=function(t){return void 0===t&&(t=!1),function(t,e,n,r){var o=X(e),i=function(t,e,n,r){var o=L(e),i=r[r.length-1],a=new Array(i).fill(0),s=e.length,u="complex64"===n?pt(t):t;if(1<s)for(var c=0;c<o/i;c++)for(var l=c*i,h=0;h<i;h++)a[h]=Math.max(a[h],lt(u[l+h],0,n).length);return a}(t,e,n,o),a=e.length,s=function t(e,n,r,o,i,a){void 0===a&&(a=!0);var s="complex64"===r?2:1,u=n[0],c=n.length;if(0===c)return"complex64"!==r?"bool"===r?[ht(e[0])]:[e[0].toString()]:[lt(pt(e)[0],0,r)];if(1===c){if(20<u){var l=3*s,h=Array.from(e.slice(0,l)),p=Array.from(e.slice(u-3*s,u));return"complex64"===r&&(h=pt(h),p=pt(p)),["["+h.map(function(t,e){return lt(t,i[e],r)}).join(", ")+", ..., "+p.map(function(t,e){return lt(t,i[u-3+e],r)}).join(", ")+"]"]}return["["+("complex64"===r?pt(e):Array.from(e)).map(function(t,e){return lt(t,i[e],r)}).join(", ")+"]"]}var f=n.slice(1),d=o.slice(1),v=o[0]*s,m=[];if(20<u){for(var g=0;g<3;g++){var y=(x=g*v)+v;m.push.apply(m,t(e.slice(x,y),f,r,d,i,!1))}for(m.push("..."),g=u-3;g<u;g++)y=(x=g*v)+v,m.push.apply(m,t(e.slice(x,y),f,r,d,i,g===u-1))}else for(g=0;g<u;g++){var x;y=(x=g*v)+v,m.push.apply(m,t(e.slice(x,y),f,r,d,i,g===u-1))}var b=2===c?",":"";for(m[0]="["+m[0]+b,g=1;g<m.length-1;g++)m[g]=" "+m[g]+b;var w=",\n";for(g=2;g<c;g++)w+="\n";return m[m.length-1]=" "+m[m.length-1]+"]"+(a?"":w),m}(t,e,n,o,i),u=["Tensor"];return r&&(u.push(" dtype: "+n),u.push(" rank: "+a),u.push(" shape: ["+e+"]"),u.push(" values:")),u.push(s.map(function(t){return" "+t}).join("\n")),u.join("\n")}(this.dataSync(),this.shape,this.dtype,t)},xt.prototype.tile=function(t){return this.throwIfDisposed(),vt.tile(this,t)},xt.prototype.gather=function(t,e){return void 0===e&&(e=0),this.throwIfDisposed(),vt.gather(this,t,e)},xt.prototype.matMul=function(t,e,n){return void 0===e&&(e=!1),void 0===n&&(n=!1),this.throwIfDisposed(),vt.matMul(this,t,e,n)},xt.prototype.dot=function(t){return this.throwIfDisposed(),vt.dot(this,t)},xt.prototype.norm=function(t,e,n){return void 0===t&&(t="euclidean"),void 0===e&&(e=null),void 0===n&&(n=!1),this.throwIfDisposed(),vt.norm(this,t,e,n)},xt.prototype.slice=function(t,e){return this.throwIfDisposed(),vt.slice(this,t,e)},xt.prototype.reverse=function(t){return this.throwIfDisposed(),vt.reverse(this,t)},xt.prototype.concat=function(t,e){return void 0===e&&(e=0),this.throwIfDisposed(),t instanceof xt&&(t=[t]),vt.concat([this].concat(t),e)},xt.prototype.split=function(t,e){return void 0===e&&(e=0),this.throwIfDisposed(),vt.split(this,t,e)},xt.prototype.stack=function(t,e){return void 0===e&&(e=0),vt.stack([this,t],e)},xt.prototype.unstack=function(t){return void 0===t&&(t=0),vt.unstack(this,t)},xt.prototype.pad=function(t,e){return void 0===e&&(e=0),vt.pad(this,t,e)},xt.prototype.batchNormalization=function(t,e,n,r,o){return void 0===n&&(n=.001),mt("tf.batchNormalization() is going away. Use tf.batchNorm() instead, and note the positional argument change of scale, offset, and varianceEpsilon"),this.batchNorm(t,e,o,r,n)},xt.prototype.batchNorm=function(t,e,n,r,o){return void 0===o&&(o=.001),this.throwIfDisposed(),vt.batchNorm(this,t,e,n,r,o)},xt.prototype.all=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),vt.all(this,t,e)},xt.prototype.any=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),vt.any(this,t,e)},xt.prototype.logSumExp=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),vt.logSumExp(this,t,e)},xt.prototype.sum=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),vt.sum(this,t,e)},xt.prototype.prod=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),vt.prod(this,t,e)},xt.prototype.mean=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),vt.mean(this,t,e)},xt.prototype.min=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),vt.min(this,t,e)},xt.prototype.max=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),vt.max(this,t,e)},xt.prototype.argMin=function(t){return void 0===t&&(t=null),this.throwIfDisposed(),vt.argMin(this,t)},xt.prototype.argMax=function(t){return void 0===t&&(t=null),this.throwIfDisposed(),vt.argMax(this,t)},xt.prototype.cast=function(t){return this.throwIfDisposed(),vt.cast(this,t)},xt.prototype.add=function(t){return this.throwIfDisposed(),vt.add(this,t)},xt.prototype.addStrict=function(t){return this.throwIfDisposed(),vt.addStrict(this,t)},xt.prototype.atan2=function(t){return this.throwIfDisposed(),vt.atan2(this,t)},xt.prototype.sub=function(t){return this.throwIfDisposed(),vt.sub(this,t)},xt.prototype.subStrict=function(t){return this.throwIfDisposed(),vt.subStrict(this,t)},xt.prototype.pow=function(t){return this.throwIfDisposed(),vt.pow(this,t)},xt.prototype.powStrict=function(t){return this.throwIfDisposed(),vt.powStrict(this,t)},xt.prototype.mul=function(t){return this.throwIfDisposed(),vt.mul(this,t)},xt.prototype.mulStrict=function(t){return this.throwIfDisposed(),vt.mulStrict(this,t)},xt.prototype.div=function(t){return this.throwIfDisposed(),vt.div(this,t)},xt.prototype.floorDiv=function(t){return this.throwIfDisposed(),vt.floorDiv(this,t)},xt.prototype.divStrict=function(t){return this.throwIfDisposed(),vt.divStrict(this,t)},xt.prototype.minimum=function(t){return this.throwIfDisposed(),vt.minimum(this,t)},xt.prototype.minimumStrict=function(t){return this.throwIfDisposed(),vt.minimumStrict(this,t)},xt.prototype.maximum=function(t){return this.throwIfDisposed(),vt.maximum(this,t)},xt.prototype.maximumStrict=function(t){return this.throwIfDisposed(),vt.maximumStrict(this,t)},xt.prototype.mod=function(t){return this.throwIfDisposed(),vt.mod(this,t)},xt.prototype.modStrict=function(t){return this.throwIfDisposed(),vt.modStrict(this,t)},xt.prototype.squaredDifference=function(t){return this.throwIfDisposed(),vt.squaredDifference(this,t)},xt.prototype.squaredDifferenceStrict=function(t){return this.throwIfDisposed(),vt.squaredDifferenceStrict(this,t)},xt.prototype.transpose=function(t){return this.throwIfDisposed(),vt.transpose(this,t)},xt.prototype.notEqual=function(t){return this.throwIfDisposed(),vt.notEqual(this,t)},xt.prototype.notEqualStrict=function(t){return this.throwIfDisposed(),vt.notEqualStrict(this,t)},xt.prototype.less=function(t){return this.throwIfDisposed(),vt.less(this,t)},xt.prototype.lessStrict=function(t){return this.throwIfDisposed(),vt.lessStrict(this,t)},xt.prototype.equal=function(t){return this.throwIfDisposed(),vt.equal(this,t)},xt.prototype.equalStrict=function(t){return this.throwIfDisposed(),vt.equalStrict(this,t)},xt.prototype.lessEqual=function(t){return this.throwIfDisposed(),vt.lessEqual(this,t)},xt.prototype.lessEqualStrict=function(t){return this.throwIfDisposed(),vt.lessEqualStrict(this,t)},xt.prototype.greater=function(t){return this.throwIfDisposed(),vt.greater(this,t)},xt.prototype.greaterStrict=function(t){return this.throwIfDisposed(),vt.greaterStrict(this,t)},xt.prototype.greaterEqual=function(t){return this.throwIfDisposed(),vt.greaterEqual(this,t)},xt.prototype.greaterEqualStrict=function(t){return this.throwIfDisposed(),vt.greaterEqualStrict(this,t)},xt.prototype.logicalAnd=function(t){return this.throwIfDisposed(),vt.logicalAnd(this,t)},xt.prototype.logicalOr=function(t){return this.throwIfDisposed(),vt.logicalOr(this,t)},xt.prototype.logicalNot=function(){return this.throwIfDisposed(),vt.logicalNot(this)},xt.prototype.logicalXor=function(t){return this.throwIfDisposed(),vt.logicalXor(this,t)},xt.prototype.where=function(t,e){return this.throwIfDisposed(),vt.where(t,this,e)},xt.prototype.neg=function(){return this.throwIfDisposed(),vt.neg(this)},xt.prototype.ceil=function(){return this.throwIfDisposed(),vt.ceil(this)},xt.prototype.floor=function(){return this.throwIfDisposed(),vt.floor(this)},xt.prototype.sign=function(){return this.throwIfDisposed(),vt.sign(this)},xt.prototype.isNaN=function(){return this.throwIfDisposed(),vt.isNaN(this)},xt.prototype.isInf=function(){return this.throwIfDisposed(),vt.isInf(this)},xt.prototype.isFinite=function(){return this.throwIfDisposed(),vt.isFinite(this)},xt.prototype.exp=function(){return this.throwIfDisposed(),vt.exp(this)},xt.prototype.expm1=function(){return this.throwIfDisposed(),vt.expm1(this)},xt.prototype.log=function(){return this.throwIfDisposed(),vt.log(this)},xt.prototype.log1p=function(){return this.throwIfDisposed(),vt.log1p(this)},xt.prototype.sqrt=function(){return this.throwIfDisposed(),vt.sqrt(this)},xt.prototype.rsqrt=function(){return this.throwIfDisposed(),vt.rsqrt(this)},xt.prototype.square=function(){return this.throwIfDisposed(),vt.square(this)},xt.prototype.reciprocal=function(){return this.throwIfDisposed(),vt.reciprocal(this)},xt.prototype.abs=function(){return this.throwIfDisposed(),vt.abs(this)},xt.prototype.clipByValue=function(t,e){return this.throwIfDisposed(),vt.clipByValue(this,t,e)},xt.prototype.relu=function(){return this.throwIfDisposed(),vt.relu(this)},xt.prototype.elu=function(){return this.throwIfDisposed(),vt.elu(this)},xt.prototype.selu=function(){return this.throwIfDisposed(),vt.selu(this)},xt.prototype.leakyRelu=function(t){return void 0===t&&(t=.2),this.throwIfDisposed(),vt.leakyRelu(this,t)},xt.prototype.prelu=function(t){return this.throwIfDisposed(),vt.prelu(this,t)},xt.prototype.sigmoid=function(){return this.throwIfDisposed(),vt.sigmoid(this)},xt.prototype.logSigmoid=function(){return this.throwIfDisposed(),vt.logSigmoid(this)},xt.prototype.softplus=function(){return this.throwIfDisposed(),vt.softplus(this)},xt.prototype.zerosLike=function(){return this.throwIfDisposed(),vt.zerosLike(this)},xt.prototype.onesLike=function(){return this.throwIfDisposed(),vt.onesLike(this)},xt.prototype.sin=function(){return this.throwIfDisposed(),vt.sin(this)},xt.prototype.cos=function(){return this.throwIfDisposed(),vt.cos(this)},xt.prototype.tan=function(){return this.throwIfDisposed(),vt.tan(this)},xt.prototype.asin=function(){return this.throwIfDisposed(),vt.asin(this)},xt.prototype.acos=function(){return this.throwIfDisposed(),vt.acos(this)},xt.prototype.atan=function(){return this.throwIfDisposed(),vt.atan(this)},xt.prototype.sinh=function(){return this.throwIfDisposed(),vt.sinh(this)},xt.prototype.cosh=function(){return this.throwIfDisposed(),vt.cosh(this)},xt.prototype.tanh=function(){return this.throwIfDisposed(),vt.tanh(this)},xt.prototype.asinh=function(){return this.throwIfDisposed(),vt.asinh(this)},xt.prototype.acosh=function(){return this.throwIfDisposed(),vt.acosh(this)},xt.prototype.atanh=function(){return this.throwIfDisposed(),vt.atanh(this)},xt.prototype.erf=function(){return this.throwIfDisposed(),vt.erf(this)},xt.prototype.round=function(){return this.throwIfDisposed(),vt.round(this)},xt.prototype.step=function(t){return void 0===t&&(t=0),this.throwIfDisposed(),vt.step(this,t)},xt.prototype.softmax=function(t){return void 0===t&&(t=-1),this.throwIfDisposed(),vt.softmax(this,t)},xt.prototype.logSoftmax=function(t){return void 0===t&&(t=-1),this.throwIfDisposed(),vt.logSoftmax(this,t)},xt.prototype.resizeBilinear=function(t,e){return void 0===e&&(e=!1),this.throwIfDisposed(),vt.image.resizeBilinear(this,t,e)},xt.prototype.resizeNearestNeighbor=function(t,e){return void 0===e&&(e=!1),this.throwIfDisposed(),vt.image.resizeNearestNeighbor(this,t,e)},xt.prototype.conv1d=function(t,e,n,r,o,i){return void 0===r&&(r="NWC"),void 0===o&&(o=1),this.throwIfDisposed(),vt.conv1d(this,t,e,n,r,o,i)},xt.prototype.conv2d=function(t,e,n,r,o,i){return void 0===r&&(r="NHWC"),void 0===o&&(o=[1,1]),this.throwIfDisposed(),vt.conv2d(this,t,e,n,r,o,i)},xt.prototype.conv2dTranspose=function(t,e,n,r,o){return this.throwIfDisposed(),vt.conv2dTranspose(this,t,e,n,r,o)},xt.prototype.depthwiseConv2D=function(t,e,n,r,o,i){return void 0===r&&(r="NHWC"),void 0===o&&(o=[1,1]),this.throwIfDisposed(),vt.depthwiseConv2d(this,t,e,n,r,o,i)},xt.prototype.separableConv2d=function(t,e,n,r,o,i){return void 0===o&&(o=[1,1]),void 0===i&&(i="NHWC"),this.throwIfDisposed(),vt.separableConv2d(this,t,e,n,r,o,i)},xt.prototype.avgPool=function(t,e,n,r){return this.throwIfDisposed(),vt.avgPool(this,t,e,n,r)},xt.prototype.maxPool=function(t,e,n,r){return this.throwIfDisposed(),vt.maxPool(this,t,e,n,r)},xt.prototype.localResponseNormalization=function(t,e,n,r){return void 0===t&&(t=5),void 0===e&&(e=1),void 0===n&&(n=1),void 0===r&&(r=.5),vt.localResponseNormalization(this,t,e,n,r)},xt.prototype.pool=function(t,e,n,r,o){return this.throwIfDisposed(),vt.pool(this,t,e,n,r,o)},xt.prototype.variable=function(t,e,n){return void 0===t&&(t=!0),this.throwIfDisposed(),wt.variable(this,t,e,n)},xt.prototype.unsortedSegmentSum=function(t,e){return this.throwIfDisposed(),vt.unsortedSegmentSum(this,t,e)},xt.prototype.batchToSpaceND=function(t,e){return this.throwIfDisposed(),vt.batchToSpaceND(this,t,e)},xt.prototype.spaceToBatchND=function(t,e){return this.throwIfDisposed(),vt.spaceToBatchND(this,t,e)},xt.prototype.topk=function(t,e){return void 0===t&&(t=1),void 0===e&&(e=!0),this.throwIfDisposed(),vt.topk(this,t,e)},xt.prototype.stridedSlice=function(t,e,n,r,o,i,a,s){return void 0===r&&(r=0),void 0===o&&(o=0),void 0===i&&(i=0),void 0===a&&(a=0),void 0===s&&(s=0),this.throwIfDisposed(),vt.stridedSlice(this,t,e,n,r,o,i,a,s)},xt.prototype.depthToSpace=function(t,e){return this.throwIfDisposed(),vt.depthToSpace(this,t,e)},xt.prototype.fft=function(){return this.throwIfDisposed(),vt.spectral.fft(this)},xt.prototype.ifft=function(){return this.throwIfDisposed(),vt.spectral.ifft(this)},xt.prototype.rfft=function(){return this.throwIfDisposed(),vt.spectral.rfft(this)},xt.prototype.irfft=function(){return this.throwIfDisposed(),vt.spectral.irfft(this)},xt);function xt(t,e,n,r,o){this.kept=!1,this.isDisposedInternal=!1,this.shape=t.slice(),this.dtype=e||"float32",this.size=L(t),this.strides=X(t),this.dataId=null!=r?r:{},this.id=dt().nextTensorId(),this.rankType=this.rank<5?this.rank.toString():"higher",dt().registerTensor(this,o),null!=n&&dt().write(o,this.dataId,n)}Object.defineProperty(yt,Symbol.hasInstance,{value:function(t){return!!t&&null!=t.dataId&&null!=t.shape&&null!=t.dtype}});var bt,wt=(e(Ct,bt=yt),Ct.variable=function(t,e,n,r){return void 0===e&&(e=!0),null!=r&&r!==t.dtype&&(t=t.asType(r)),new Ct(t,e,n)},Ct.prototype.assign=function(t){if(t.dtype!==this.dtype)throw new Error("dtype of the new value ("+t.dtype+") and previous value ("+this.dtype+") must match");if(!k(t.shape,this.shape))throw new Error("shape of the new value ("+t.shape+") and previous value ("+this.shape+") must match");dt().disposeTensor(this),this.dataId=t.dataId,dt().registerTensor(this)},Ct.prototype.dispose=function(){dt().disposeVariable(this),this.isDisposedInternal=!0},Ct);function Ct(t,e,n){void 0===e&&(e=!0);var r=bt.call(this,t.shape,t.dtype,null,t.dataId)||this;r.trainable=e,r.name=n,null==r.name&&(r.name=dt().nextVariableId().toString());try{dt().registerVariable(r)}catch(t){throw dt().disposeTensor(r),t}return r}Object.defineProperty(wt,Symbol.hasInstance,{value:function(t){return t instanceof yt&&null!=t.assign&&t.assign instanceof Function}});var Et,_t,Rt,It,St,kt,Nt,At,Tt,Dt,Ft=wt.variable;(Dt=Et=Et||{}).R0="R0",Dt.R1="R1",Dt.R2="R2",Dt.R3="R3",Dt.R4="R4",Dt.R5="R5",Dt.R6="R6",(Tt=_t=_t||{}).float32="float32",Tt.int32="int32",Tt.bool="int32",Tt.complex64="complex64",(At=Rt=Rt||{}).float32="float32",At.int32="int32",At.bool="bool",At.complex64="complex64",(Nt=It=It||{}).float32="float32",Nt.int32="float32",Nt.bool="float32",Nt.complex64="complex64",(kt=St=St||{}).float32="complex64",kt.int32="complex64",kt.bool="complex64",kt.complex64="complex64";var Mt={float32:It,int32:_t,bool:Rt,complex64:St};function Pt(t,e){if("string"!==t&&"string"!==e)return Mt[t][e];if("string"===t&&"string"===e)return"string";throw new Error("Can not upcast "+t+" with "+e)}function Ot(t){return Pt(t,"int32")}function Bt(t,e){if(t.dtype===e.dtype)return[t,e];var n=Pt(t.dtype,e.dtype);return[t.cast(n),e.cast(n)]}function Lt(t,e){O(t.dtype===e.dtype,function(){return"The dtypes of the first("+t.dtype+") and second("+e.dtype+") input must match"})}function Wt(t){var e=[];return function t(e,n,r){if(null!=e)if(e instanceof yt)n.push(e);else if(o=e,Array.isArray(o)||"object"==typeof o){var o,i=e;for(var a in i){var s=i[a];r.has(s)||(r.add(s),t(s,n,r))}}}(t,e,new Set),e}var zt,Ut=Object.freeze({makeTypesMatch:Bt,assertTypesMatch:Lt,isTensorInList:function(t,e){for(var n=0;n<e.length;n++)if(e[n].id===t.id)return!0;return!1},getTensorsInContainer:Wt}),Vt=(jt.prototype.dispose=function(){for(var t in this.registeredVariables)this.registeredVariables[t].dispose()},jt),Gt=(Ht.prototype.ready=function(){return y(this,void 0,void 0,function(){var e,n,r;return I(this,function(t){switch(t.label){case 0:if(null!=this.pendingBackendInit)return[2,this.pendingBackendInit.then(function(){})];if(null!=this.backendInstance)return[2];e=this.getSortedBackends(),n=0,t.label=1;case 1:return n<e.length?(r=e[n],[4,this.initializeBackend(r).success]):[3,5];case 2:return t.sent()?[4,this.setBackend(r)]:[3,4];case 3:return t.sent(),[2];case 4:return n++,[3,1];case 5:throw new Error("Could not initialize any backends, all backend initializations failed.")}})})},Object.defineProperty(Ht.prototype,"backend",{get:function(){if(null!=this.pendingBackendInit)throw new Error("Backend '"+this.backendName+"' has not yet been initialized. Make sure to await tf.ready() before calling other methods");if(null==this.backendInstance){var t=this.initializeBackendsAndReturnBest(),e=t.name;if(t.asyncInit)throw new Error("The highest priority backend '"+e+"' has not yet been initialized. Make sure to await tf.ready() before calling other methods");this.setBackend(e)}return this.backendInstance},enumerable:!0,configurable:!0}),Ht.prototype.backendNames=function(){return Object.keys(this.registryFactory)},Ht.prototype.findBackend=function(t){if(!(t in this.registry)){if(!(t in this.registryFactory))return null;if(this.initializeBackend(t).asyncInit)return null}return this.registry[t]},Ht.prototype.findBackendFactory=function(t){return t in this.registryFactory?this.registryFactory[t].factory:null},Ht.prototype.registerBackend=function(t,e,n){return void 0===n&&(n=1),t in this.registryFactory?(console.warn(t+" backend was already registered. Reusing existing backend factory."),!1):(this.registryFactory[t]={factory:e,priority:n},!0)},Ht.prototype.setBackend=function(o){return y(this,void 0,void 0,function(){var e,n,r;return I(this,function(t){switch(t.label){case 0:if(null==this.registryFactory[o])throw new Error("Backend name '"+o+"' not found in registry");return this.backendName=o,null!=this.registry[o]?[3,4]:(this.backendInstance=null,e=this.initializeBackend(o),n=e.success,e.asyncInit?[4,n]:[3,2]);case 1:return r=t.sent(),[3,3];case 2:r=n,t.label=3;case 3:if(!r)return[2,!1];t.label=4;case 4:return this.backendInstance=this.registry[o],this.profiler=new it(this.backendInstance),[2,!0]}})})},Ht.prototype.initializeBackend=function(e){var n=this,t=this.registryFactory[e];if(null==t)throw new Error("Cannot initialize backend "+e+", no registration found.");try{var r=t.factory();if(Promise.resolve(r)!==r)return this.registry[e]=r,{success:!0,asyncInit:!1};var o=++this.pendingBackendInitId,i=r.then(function(t){return!(o<n.pendingBackendInitId||(n.registry[e]=t,n.pendingBackendInit=null))}).catch(function(t){return!(o<n.pendingBackendInitId||(n.pendingBackendInit=null,console.warn("Initialization of backend "+e+" failed"),console.warn(t.stack||t.message),1))});return{success:this.pendingBackendInit=i,asyncInit:!0}}catch(n){return console.warn("Initialization of backend "+e+" failed"),console.warn(n.stack||n.message),{success:!1,asyncInit:!1}}},Ht.prototype.removeBackend=function(t){if(!(t in this.registryFactory))throw new Error(t+" backend not found in registry");this.backendName===t&&null!=this.pendingBackendInit&&this.pendingBackendInitId++,t in this.registry&&(this.registry[t].dispose(),delete this.registry[t]),delete this.registryFactory[t],this.backendName===t&&(this.pendingBackendInit=null,this.backendName=null,this.backendInstance=null)},Ht.prototype.getSortedBackends=function(){var n=this;if(0===Object.keys(this.registryFactory).length)throw new Error("No backend found in registry.");return Object.keys(this.registryFactory).sort(function(t,e){return n.registryFactory[e].priority-n.registryFactory[t].priority})},Ht.prototype.initializeBackendsAndReturnBest=function(){for(var t=this.getSortedBackends(),e=0;e<t.length;e++){var n=t[e],r=this.initializeBackend(n),o=r.success,i=r.asyncInit;if(i||o)return{name:n,asyncInit:i}}throw new Error("Could not initialize any backends, all backend initializations failed.")},Ht.prototype.moveData=function(t,e){this.write(t,e,this.readSync(e))},Ht.prototype.tidy=function(t,e){var n,r=this,o=null;if(null==e){if("function"!=typeof t)throw new Error("Please provide a function to tidy()");e=t}else{if("string"!=typeof t&&!(t instanceof String))throw new Error("When calling with two arguments, the first argument to tidy() must be a string");if("function"!=typeof e)throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function");o=t}return this.scopedRun(function(){return r.startScope(o)},function(){return r.endScope(n)},function(){return(n=e())instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n})},Ht.prototype.scopedRun=function(t,e,n){t();try{var r=n();return e(),r}catch(t){throw e(),t}},Ht.prototype.nextTensorId=function(){return Ht.nextTensorId++},Ht.prototype.nextVariableId=function(){return Ht.nextVariableId++},Ht.prototype.clone=function(t){var e=yt.make(t.shape,{dataId:t.dataId},t.dtype);return this.addTapeNode([t],e,function(t){return[t.toFloat()]}),e},Ht.prototype.runKernel=function(t,e,n){function r(t){s&&(a=t.map(function(t){return i.keep(i.clone(t))}))}var o,i=this,a=[],s=this.isTapeOn(),u=null!=this.state.activeScope?this.state.activeScope.name:"",c=this.state.numBytes,l=this.state.numTensors;if(this.scopedRun(function(){return i.state.kernelDepth++},function(){return i.state.kernelDepth--},function(){o=i.ENV.getBool("DEBUG")?i.profiler.profileKernel(u,e,function(){return t(i.backend,r)}):t(i.backend,r)}),s){var h={id:this.state.nextTapeNodeId++,name:u,inputs:e,outputs:Array.isArray(o)?o:[o],saved:a};null!=n&&(h.gradient=function(t){return n(t,a)}),this.state.activeTape.push(h)}return this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-c,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-l,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(e).map(function(t){return e[t].shape}),outputShape:Array.isArray(o)?o.map(function(t){return t.shape}):o.shape}),o},Ht.prototype.registerTensor=function(t,e){var n=this.state.tensorInfo.has(t.dataId)?this.state.tensorInfo.get(t.dataId).refCount:0;if(this.state.numTensors++,"string"===t.dtype&&this.state.numStringTensors++,0===n){this.state.numDataBuffers++;var r=0;"complex64"!==t.dtype&&"string"!==t.dtype&&(r=t.size*U(t.dtype)),this.state.tensorInfo.set(t.dataId,{backend:null!=e?e:this.backend,dtype:t.dtype,shape:t.shape,bytes:r,refCount:0}),this.state.numBytes+=r,null!=e?e.register(t.dataId,t.shape,t.dtype):this.backend.register(t.dataId,t.shape,t.dtype)}this.state.tensorInfo.get(t.dataId).refCount++,t instanceof wt||this.track(t)},Ht.prototype.registerVariable=function(t){if(null!=this.state.registeredVariables[t.name])throw new Error("Variable with name "+t.name+" was already registered");this.state.registeredVariables[t.name]=t},Ht.prototype.disposeTensor=function(t){if(this.state.tensorInfo.has(t.dataId)){this.state.numTensors--,"string"===t.dtype&&this.state.numStringTensors--;var e=this.state.tensorInfo.get(t.dataId);e.refCount<=1?("complex64"!==t.dtype&&(this.state.numBytes-=e.bytes),this.state.numDataBuffers--,e.backend.disposeData(t.dataId),this.state.tensorInfo.delete(t.dataId)):this.state.tensorInfo.get(t.dataId).refCount--}},Ht.prototype.disposeVariables=function(){for(var t in this.state.registeredVariables){var e=this.state.registeredVariables[t];this.disposeVariable(e)}},Ht.prototype.disposeVariable=function(t){this.disposeTensor(t),null!=this.state.registeredVariables[t.name]&&delete this.state.registeredVariables[t.name]},Ht.prototype.memory=function(){var t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,0<this.state.numStringTensors&&(t.unreliable=!0,null==t.reasons&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t},Ht.prototype.profile=function(r){return y(this,void 0,void 0,function(){var e,n;return I(this,function(t){return this.state.profiling=!0,e=this.state.numBytes,n=this.state.numTensors,this.state.activeProfile.kernels=[],this.state.activeProfile.result=r(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max.apply(Math,this.state.activeProfile.kernels.map(function(t){return t.totalBytesSnapshot})),this.state.activeProfile.newBytes=this.state.numBytes-e,this.state.activeProfile.newTensors=this.state.numTensors-n,[2,this.state.activeProfile]})})},Ht.prototype.isTapeOn=function(){return 0<this.state.gradientDepth&&0===this.state.kernelDepth},Ht.prototype.addTapeNode=function(t,e,r){var n={};t.forEach(function(t,e){n[e]=t});var o={id:this.state.nextTapeNodeId++,name:this.state.activeScope.name,inputs:n,outputs:[e],gradient:function(t){var e=r(t),n={};return e.forEach(function(t,e){n[e]=function(){return t}}),n}};this.state.activeTape.push(o)},Ht.prototype.keep=function(t){return t.kept=!0,t},Ht.prototype.startTape=function(){0===this.state.gradientDepth&&(this.state.activeTape=[]),this.state.gradientDepth++},Ht.prototype.endTape=function(){this.state.gradientDepth--},Ht.prototype.startScope=function(t){var e={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e},Ht.prototype.endScope=function(t){for(var e=this,n=Wt(t),r=new Set(n.map(function(t){return t.id})),o=0;o<this.state.activeScope.track.length;o++){var i=this.state.activeScope.track[o];i.kept||r.has(i.id)||i.dispose()}var a=this.state.scopeStack.pop();this.state.activeScope=0===this.state.scopeStack.length?null:this.state.scopeStack[this.state.scopeStack.length-1],n.forEach(function(t){t.kept||t.scopeId!==a.id||e.track(t)})},Ht.prototype.gradients=function(t,o,i,e){var u=this;if(void 0===e&&(e=!1),O(0<o.length,function(){return"gradients() received an empty list of xs."}),null!=i&&"float32"!==i.dtype)throw new Error("dy must have 'float32' dtype, but has '"+i.dtype+"'");var a=this.scopedRun(function(){return u.startTape()},function(){return u.endTape()},function(){return u.tidy("forward",t)});O(a instanceof yt,function(){return"The result y returned by f() must be a tensor."});var s=function(t,e,n){for(var r={},o={},i=0;i<e.length;i++)r[e[i].id]=!0;for(i=0;i<t.length;i++){var a=(d=t[i]).inputs;for(var s in a){for(var u=a[s],c=!1,l=0;l<e.length;l++)if(r[u.id]){d.outputs.forEach(function(t){return r[t.id]=!0}),c=!0,o[d.id]=!0;break}if(c)break}}var h={};h[n.id]=!0;var p={};for(i=t.length-1;0<=i;i--)for(a=(d=t[i]).inputs,l=0;l<d.outputs.length;l++)if(h[d.outputs[l].id]){for(var s in a)h[a[s].id]=!0,p[d.id]=!0;break}var f=[];for(i=0;i<t.length;i++){var d;if(o[(d=t[i]).id]&&p[d.id]){var v={};for(var s in d.inputs){var m=d.inputs[s];r[m.id]&&(v[s]=m)}var g=Object.assign({},d);g.inputs=v,g.outputs=d.outputs,f.push(g)}}return f}(this.state.activeTape,o,a);if(!e&&0===s.length&&0<o.length)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",function(){var t,e,n={};n[a.id]=null==i?(e=Q(L(t=a.shape),"float32"),yt.make(t,{values:e})):i,function(a,s){for(var t=function(t){var o=s[t],r=[];if(o.outputs.forEach(function(t){var e=a[t.id];if(null!=e)r.push(e);else{var n=yt.make(t.shape,{values:Z(t.size,t.dtype)},t.dtype);r.push(n)}}),null==o.gradient)throw new Error("Cannot compute gradient: gradient function not found for "+o.name+".");function e(t){if(!(t in i))throw new Error("Cannot backprop through input "+t+". Available gradients found: "+Object.keys(i)+".");var e=function(t){return u.tidy(t)}(function(){return i[t]()});if("float32"!==e.dtype)throw new Error("Error in gradient for op "+o.name+". The gradient of input "+t+" must have 'float32' dtype, but has '"+e.dtype+"'");var n=o.inputs[t];if(!k(e.shape,n.shape))throw new Error("Error in gradient for op "+o.name+". The gradient of input '"+t+"' has shape '"+e.shape+"', which does not match the shape of the input '"+n.shape+"'");if(null==a[n.id])a[n.id]=e;else{var r=a[n.id];a[n.id]=r.add(e),r.dispose()}}var i=o.gradient(1===o.outputs.length?r[0]:r);for(var n in o.inputs)e(n)},e=s.length-1;0<=e;e--)t(e)}(n,s);var r=o.map(function(t){return n[t.id]});return 0===u.state.gradientDepth&&(u.state.activeTape.forEach(function(t){for(var e in t.saved)t.saved[e].dispose()}),u.state.activeTape=null),{value:a,grads:r}})},Ht.prototype.customGrad=function(r){var e=this;return O($(r),function(){return"The f passed in customGrad(f) must be a function."}),function(){for(var i,a=[],t=0;t<arguments.length;t++)a[t]=arguments[t];O(a.every(function(t){return t instanceof yt}),function(){return"The args passed in customGrad(f)(x1, x2,...) must all be tensors"});var n={};return a.forEach(function(t,e){n[e]=t}),e.runKernel(function(t,e){return O((i=r.apply(void 0,a.concat([e]))).value instanceof yt,function(){return"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"}),O($(i.gradFunc),function(){return"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."}),i.value},n,function(t,e){var n=i.gradFunc(t,e),r=Array.isArray(n)?n:[n];O(r.length===a.length,function(){return"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(...)."}),O(r.every(function(t){return t instanceof yt}),function(){return"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors."});var o={};return r.forEach(function(t,e){o[e]=function(){return t}}),o})}},Ht.prototype.write=function(t,e,n){var r=this.state.tensorInfo.get(e),o=r.backend;if(t=t||this.backend,"string"===r.dtype){var i=V(n);this.state.numBytes+=i-r.bytes,r.bytes=i}t!==o&&(o.disposeData(e),(r.backend=t).register(e,r.shape,r.dtype)),t.write(e,n)},Ht.prototype.readSync=function(t){return this.state.tensorInfo.get(t).backend.readSync(t)},Ht.prototype.read=function(t){return this.state.tensorInfo.get(t).backend.read(t)},Ht.prototype.fromPixels=function(t,e){return this.backend.fromPixels(t,e)},Ht.prototype.time=function(r){return y(this,void 0,void 0,function(){var e,n;return I(this,function(t){switch(t.label){case 0:return e=tt(),[4,this.backend.time(r)];case 1:return(n=t.sent()).wallMs=tt()-e,[2,n]}})})},Ht.prototype.track=function(t){return null!=this.state.activeScope&&(t.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(t)),t},Object.defineProperty(Ht.prototype,"registeredVariables",{get:function(){return this.state.registeredVariables},enumerable:!0,configurable:!0}),Ht.prototype.reset=function(){for(var t in this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new Vt,this.registry)this.registry[t].dispose(),delete this.registry[t];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null},Ht.nextTensorId=0,Ht.nextVariableId=0,Ht);function Ht(t){this.ENV=t,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new Vt}function jt(){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.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null}}var qt=function(){var t=function(){if(null==zt){var t=void 0;if("undefined"!=typeof window)t=window;else if("undefined"!=typeof global)t=global;else if("undefined"!=typeof process)t=process;else{if("undefined"==typeof self)throw new Error("Could not find a global object");t=self}zt=t}return zt}();if(null==t._tfengine){var e=new n(t);t._tfengine=new Gt(e)}return s(t._tfengine.ENV),dt=function(){return t._tfengine},t._tfengine}();function $t(){return"undefined"!=typeof window&&null!=window.document||"undefined"!=typeof WorkerGlobalScope}_.registerFlag("DEBUG",function(){return!1},function(t){t&&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.")}),_.registerFlag("IS_BROWSER",function(){return $t()}),_.registerFlag("IS_NODE",function(){return"undefined"!=typeof process&&void 0!==process.versions&&void 0!==process.versions.node}),_.registerFlag("IS_CHROME",function(){return"undefined"!=typeof navigator&&null!=navigator&&null!=navigator.userAgent&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)}),_.registerFlag("PROD",function(){return!1}),_.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",function(){return _.getBool("DEBUG")}),_.registerFlag("DEPRECATION_WARNINGS_ENABLED",function(){return!0}),_.registerFlag("IS_TEST",function(){return!1});var Kt,Xt,Yt,Jt,Qt={},Zt={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function te(t,e){Qt[t]=e}function ee(t){t in Qt||(Qt[t]=function(e){if(1!==e&&2!==e)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");var t=ne(e);return t.addEventListener("webglcontextlost",function(t){t.preventDefault(),delete Qt[e]},!1),1===e?t.getContext("webgl",Zt)||t.getContext("experimental-webgl",Zt):t.getContext("webgl2",Zt)}(t));var e=Qt[t];return e.isContextLost()?(delete Qt[t],ee(t)):(e.disable(e.DEPTH_TEST),e.disable(e.STENCIL_TEST),e.disable(e.BLEND),e.disable(e.DITHER),e.disable(e.POLYGON_OFFSET_FILL),e.disable(e.SAMPLE_COVERAGE),e.enable(e.SCISSOR_TEST),e.enable(e.CULL_FACE),e.cullFace(e.BACK),Qt[t])}function ne(t){if("undefined"!=typeof OffscreenCanvas&&2===t)return new OffscreenCanvas(300,150);if("undefined"!=typeof document)return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}function re(t,e){return[e,t]}function oe(t){var e=L(t);return w(Math.ceil(e/4))}function ie(t,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(t/2))]}function ae(t,e){var n,r,o,i,a,s,u,c,l,h=t;return l=2===_.getNumber("WEBGL_VERSION")?(n=h.R32F,r=h.R16F,o=h.RGBA16F,i=h.RGBA32F,a=h.RED,s=4,u=1,c=h.HALF_FLOAT,h.FLOAT):(n=t.RGBA,r=t.RGBA,o=t.RGBA,i=h.RGBA,a=t.RGBA,u=s=4,c=null!=e?e.HALF_FLOAT_OES:null,t.FLOAT),{internalFormatFloat:n,internalFormatHalfFloat:r,internalFormatPackedHalfFloat:o,internalFormatPackedFloat:i,textureFormatFloat:a,downloadTextureFormat:t.RGBA,downloadUnpackNumChannels:s,defaultNumChannels:u,textureTypeHalfFloat:c,textureTypeFloat:l}}function se(t,e,n){var r=n();return e&&function(t){var e=t.getError();if(e!==t.NO_ERROR)throw new Error("WebGL Error: "+ce(t,e))}(t),r}(Jt=Kt=Kt||{})[Jt.RENDER=0]="RENDER",Jt[Jt.UPLOAD=1]="UPLOAD",Jt[Jt.PIXELS=2]="PIXELS",Jt[Jt.DOWNLOAD=3]="DOWNLOAD",(Yt=Xt=Xt||{})[Yt.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",Yt[Yt.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",Yt[Yt.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",Yt[Yt.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",Yt[Yt.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16";function ue(t){return!!(_.getBool("WEBGL_RENDER_FLOAT32_ENABLED")||0===t||5.96e-8<Math.abs(t)&&Math.abs(t)<65504)}function ce(t,e){switch(e){case t.NO_ERROR:return"NO_ERROR";case t.INVALID_ENUM:return"INVALID_ENUM";case t.INVALID_VALUE:return"INVALID_VALUE";case t.INVALID_OPERATION:return"INVALID_OPERATION";case t.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case t.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case t.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return"Unknown error code "+e}}function le(t,e,n){return Fe(t,e,function(){return t.getExtension(n)},'Extension "'+n+'" not supported on this browser.')}function he(t,e,n){var r=Fe(t,e,function(){return t.createShader(t.VERTEX_SHADER)},"Unable to create vertex WebGLShader.");if(se(t,e,function(){return t.shaderSource(r,n)}),se(t,e,function(){return t.compileShader(r)}),!1===t.getShaderParameter(r,t.COMPILE_STATUS))throw console.log(t.getShaderInfoLog(r)),new Error("Failed to compile vertex shader.");return r}function pe(t,e,n){var r=Fe(t,e,function(){return t.createShader(t.FRAGMENT_SHADER)},"Unable to create fragment WebGLShader.");if(se(t,e,function(){return t.shaderSource(r,n)}),se(t,e,function(){return t.compileShader(r)}),!1===t.getShaderParameter(r,t.COMPILE_STATUS))throw function(t,e){var n=ve.exec(e);if(null==n)return console.log("Couldn't parse line number in error: "+e),console.log(t);for(var r=+n[1],o=t.split("\n"),i=o.length.toString().length+2,a=o.map(function(t,e){return C((e+1).toString(),i)+t}),s=0,u=0;u<a.length;u++)s=Math.max(a[u].length,s);var c=a.slice(0,r-1),l=a.slice(r-1,r),h=a.slice(r);console.log(c.join("\n")),console.log(e.split("\n")[0]),console.log("%c "+C(l[0],s),"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(h.join("\n"))}(n,t.getShaderInfoLog(r)),new Error("Failed to compile fragment shader.");return r}var fe,de,ve=/ERROR: [0-9]+:([0-9]+):/g;function me(t,e){return Fe(t,e,function(){return t.createProgram()},"Unable to create WebGLProgram.")}function ge(t,e,n){if(se(t,e,function(){return t.linkProgram(n)}),!1===t.getProgramParameter(n,t.LINK_STATUS))throw console.log(t.getProgramInfoLog(n)),new Error("Failed to link vertex and fragment shaders.")}function ye(t,e,n){if(se(t,e,function(){return t.validateProgram(n)}),!1===t.getProgramParameter(n,t.VALIDATE_STATUS))throw console.log(t.getProgramInfoLog(n)),new Error("Shader program validation failed.")}function xe(t,e,n){var r=Fe(t,e,function(){return t.createBuffer()},"Unable to create WebGLBuffer");return se(t,e,function(){return t.bindBuffer(t.ARRAY_BUFFER,r)}),se(t,e,function(){return t.bufferData(t.ARRAY_BUFFER,n,t.STATIC_DRAW)}),r}function be(t,e,n){var r=Fe(t,e,function(){return t.createBuffer()},"Unable to create WebGLBuffer");return se(t,e,function(){return t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,r)}),se(t,e,function(){return t.bufferData(t.ELEMENT_ARRAY_BUFFER,n,t.STATIC_DRAW)}),r}function we(t,e){return Fe(t,e,function(){return t.createTexture()},"Unable to create WebGLTexture.")}function Ce(t,e){var n=_.getNumber("WEBGL_MAX_TEXTURE_SIZE");if(t<=0||e<=0){var r="["+t+"x"+e+"]";throw new Error("Requested texture size "+r+" is invalid.")}if(n<t||n<e)throw r="["+t+"x"+e+"]",new Error("Requested texture size "+r+" greater than WebGL maximum on this browser / GPU ["+n+"x"+n+"].")}function Ee(t,e){return Fe(t,e,function(){return t.createFramebuffer()},"Unable to create WebGLFramebuffer.")}function _e(t,e,n,r,o,i,a,s){var u=t.getAttribLocation(n,r);return-1!==u&&(se(t,e,function(){return t.bindBuffer(t.ARRAY_BUFFER,o)}),se(t,e,function(){return t.vertexAttribPointer(u,i,t.FLOAT,!1,a,s)}),se(t,e,function(){return t.enableVertexAttribArray(u)}),!0)}function Re(t,e,n,r){Me(t,r),se(t,e,function(){return t.activeTexture(t.TEXTURE0+r)}),se(t,e,function(){return t.bindTexture(t.TEXTURE_2D,n)})}function Ie(t,e,n,r){return Fe(t,e,function(){return t.getUniformLocation(n,r)},'uniform "'+r+'" not present in program.')}function Se(t,e,n){return t.getUniformLocation(e,n)}function ke(t,e,n,r,o,i){se(t,e,function(){return Re(t,e,r,i)}),se(t,e,function(){return t.uniform1i(o,i)})}function Ne(t,e,n,r){se(t,e,function(){return t.bindFramebuffer(t.FRAMEBUFFER,r)}),se(t,e,function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,n,0)})}function Ae(t,e,n){se(t,e,function(){return t.bindFramebuffer(t.FRAMEBUFFER,n)}),se(t,e,function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,null,0)})}function Te(t){var e=t.checkFramebufferStatus(t.FRAMEBUFFER);if(e!==t.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+De(t,e))}function De(t,e){switch(e){case t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case t.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return"unknown error "+e}}function Fe(t,e,n,r){var o=se(t,e,function(){return n()});if(null==o)throw new Error(r);return o}function Me(t,e){var n=t.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=e+t.TEXTURE0;if(r<t.TEXTURE0||n<r)throw new Error("textureUnit must be in [gl.TEXTURE0, gl.TEXTURE"+n+"].")}function Pe(t,e){return void 0===e&&(e=2),L(t.slice(0,t.length-e))}function Oe(t){if(0===t.length)throw Error("Cannot get rows and columns of an empty shape array.");return[1<t.length?t[t.length-2]:1,t[t.length-1]]}function Be(t){var e=[1,1,1];return 0===t.length||1===t.length&&1===t[0]||(e=[Pe(t)].concat(Oe(t))),e}function Le(n,t){var e;void 0===t&&(t=!1);var r=_.getNumber("WEBGL_MAX_TEXTURE_SIZE");if(t&&(r*=2,1===(n=n.map(function(t,e){return e>=n.length-2?g(n[e]):n[e]})).length&&(n=[2,n[0]])),2!==n.length){var o=N(n);n=o.newShape}var i=L(n);if(n.length<=1&&i<=r)return[1,i];if(2===n.length&&n[0]<=r&&n[1]<=r)return n;if(3===n.length&&n[0]*n[1]<=r&&n[2]<=r)return[n[0]*n[1],n[2]];if(3===n.length&&n[0]<=r&&n[1]*n[2]<=r)return[n[0],n[1]*n[2]];if(4===n.length&&n[0]*n[1]*n[2]<=r&&n[3]<=r)return[n[0]*n[1]*n[2],n[3]];if(4===n.length&&n[0]<=r&&n[1]*n[2]*n[3]<=r)return[n[0],n[1]*n[2]*n[3]];if(t){var a=Pe(n),s=2,u=2;return n.length&&(s=(e=Oe(n))[0],u=e[1]),w(i=a*(s/2)*(u/2)).map(function(t){return 2*t})}return w(i)}function We(t){return t%2==0}function ze(t,e){if(k(t=t.slice(-2),e=e.slice(-2)))return!0;if(!t.length||!e.length)return!0;if(0===t[0]||0===t[1]||0===e[0]||0===e[1])return!0;if(t.length!==e.length){var n=t.slice(-1)[0],r=e.slice(-1)[0];if(n===r)return!0;if(We(n)&&We(r)&&(1===t[0]||1===e[0]))return!0}return t[1]===e[1]&&We(t[0])&&We(e[0])}function Ue(t){if(null==fe){var e=ee(t);fe=e.getParameter(e.MAX_TEXTURE_SIZE)}return fe}function Ve(t){if(null==de){var e=ee(t);de=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,de)}function Ge(t){if(0===t)return 0;var e=ee(t);return He(e,"EXT_disjoint_timer_query_webgl2")&&2===t?2:He(e,"EXT_disjoint_timer_query")?1:0}function He(t,e){return null!=t.getExtension(e)}function je(t){try{if(null!=ee(t))return!0}catch(t){return!1}return!1}function qe(t){if(0===t)return!1;var e=ee(t);if(1===t){if(!He(e,"OES_texture_float"))return!1}else if(!He(e,"EXT_color_buffer_float"))return!1;return Ke(e)}function $e(t){if(0===t)return!1;var e=ee(t);if(1===t)return!!He(e,"OES_texture_float")&&!!He(e,"WEBGL_color_buffer_float")&&Ke(e);if(He(e,"EXT_color_buffer_float"))return Ke(e);if(He(e,"EXT_color_buffer_half_float")){var i=e.getExtension("EXT_color_buffer_half_float");return function(t){var e=ae(t,i),n=t.createTexture();t.bindTexture(t.TEXTURE_2D,n),t.texImage2D(t.TEXTURE_2D,0,e.internalFormatHalfFloat,1,1,0,e.textureFormatFloat,e.textureTypeHalfFloat,null);var r=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,r),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,n,0);var o=t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE;return t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteTexture(n),t.deleteFramebuffer(r),o}(e)}return!1}function Ke(t){var e=ae(t),n=t.createTexture();t.bindTexture(t.TEXTURE_2D,n),t.texImage2D(t.TEXTURE_2D,0,e.internalFormatFloat,1,1,0,e.textureFormatFloat,e.textureTypeFloat,null);var r=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,r),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,n,0);var o=t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE;return t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteTexture(n),t.deleteFramebuffer(r),o}function Xe(t){return 2===t&&null!=ee(t).fenceSync}var Ye=Object.freeze({callAndCheck:se,canBeRepresented:ue,getWebGLErrorMessage:ce,getExtensionOrThrow:le,createVertexShader:he,createFragmentShader:pe,createProgram:me,linkProgram:ge,validateProgram:ye,createStaticVertexBuffer:xe,createStaticIndexBuffer:be,getNumChannels:function(){return 2===_.getNumber("WEBGL_VERSION")?1:4},createTexture:we,validateTextureSize:Ce,createFramebuffer:Ee,bindVertexBufferToProgramAttribute:_e,bindTextureUnit:Re,unbindTextureUnit:function(t,e,n){Me(t,n),se(t,e,function(){return t.activeTexture(t.TEXTURE0+n)}),se(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)})},getProgramUniformLocationOrThrow:Ie,getProgramUniformLocation:Se,bindTextureToProgramUniformSampler:ke,bindCanvasToFramebuffer:function(t,e){se(t,e,function(){return t.bindFramebuffer(t.FRAMEBUFFER,null)}),se(t,e,function(){return t.viewport(0,0,t.canvas.width,t.canvas.height)}),se(t,e,function(){return t.scissor(0,0,t.canvas.width,t.canvas.height)})},bindColorTextureToFramebuffer:Ne,unbindColorTextureFromFramebuffer:Ae,validateFramebuffer:Te,getFramebufferErrorMessage:De,getBatchDim:Pe,getRowsCols:Oe,getShapeAs3D:Be,getTextureShapeFromLogicalShape:Le,isReshapeFree:ze,getWebGLMaxTextureSize:Ue,resetMaxTextureSize:function(){fe=null},resetMaxTexturesInShader:function(){de=null},getMaxTexturesInShader:Ve,getWebGLDisjointQueryTimerVersion:Ge,hasExtension:He,isWebGLVersionEnabled:je,isCapableOfRenderingToFloatTexture:qe,isDownloadFloatTextureEnabled:$e,isWebGLFenceEnabled:Xe});function Je(t){_.getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(t+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}function Qe(t,e){return qt.tidy(t,e)}function Ze(t){Wt(t).forEach(function(t){return t.dispose()})}function tn(t){return qt.keep(t)}function en(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];_.getBool("IS_TEST")||console.warn.apply(console,t)}function nn(t,e){var n=t;if(z(t))return"string"===e?[]:[t.length];if(!Array.isArray(t))return[];for(var r=[];Array.isArray(n)||z(n)&&"string"!==e;)r.push(n.length),n=n[0];return Array.isArray(t)&&_.getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&function t(e,n,r){if(r=r||[],Array.isArray(e)||z(e)){O(0<n.length,function(){return"Element arr["+r.join("][")+"] should be a primitive, but is an array of "+e.length+" elements"}),O(e.length===n[0],function(){return"Element arr["+r.join("][")+"] should have "+n[0]+" elements, but has "+e.length+" elements"});for(var o=n.slice(1),i=0;i<e.length;++i)t(e[i],o,r.concat(i))}else O(0===n.length,function(){return"Element arr["+r.join("][")+"] is a primitive, but should be an array/TypedArray of "+n[0]+" elements"})}(t,r,[]),r}function rn(t,e,n,r){if(null!=t&&("numeric"!==t&&t!==e||"numeric"===t&&"string"===e))throw new Error("Argument '"+n+"' passed to '"+r+"' must be "+t+" tensor, but got "+e+" tensor")}function on(t,e,n,r){if(void 0===r&&(r="numeric"),t instanceof yt)return rn(r,t.dtype,e,n),t;var o=q(t);if("string"!==o&&0<=["bool","int32","float32"].indexOf(r)&&(o=r),rn(r,o,e,n),null==t||!z(t)&&!Array.isArray(t)&&"number"!=typeof t&&"boolean"!=typeof t&&"string"!=typeof t){var i=null==t?"null":t.constructor.name;throw new Error("Argument '"+e+"' passed to '"+n+"' must be a Tensor or TensorLike, but got '"+i+"'")}var a=nn(t,o);z(t)||Array.isArray(t)||(t=[t]);var s="string"!==o?Y(t,o,_.getBool("DEBUG")):m(t,[],!0);return yt.make(a,{values:s},o)}function an(t,n,r,e){if(void 0===e&&(e="numeric"),!Array.isArray(t))throw new Error("Argument "+n+" passed to "+r+" must be a `Tensor[]` or `TensorLike[]`");return t.map(function(t,e){return on(t,n+"["+e+"]",r)},e)}function sn(t,e){for(var n=0;n<t.length;++n)if(t[t.length-n-1]!==e-1-n)return!1;return!0}function un(t,e,n){for(var r=t.length+e.length,o=[],i=0,a=0,s=0;s<r;s++)-1===n.indexOf(s)?o.push(t[i++]):o.push(e[a++]);return o}function cn(e,t){for(var n=[],r=e.length,o=0;o<r;o++)-1===t.indexOf(o)&&n.push(e[o]);return[n,t.map(function(t){return e[t]})]}function ln(t,e){return un(t,e.map(function(t){return 1}),e)}function hn(t,e,n){O(sn(e,n),function(){return t+" supports only inner-most axes for now. Got axes "+e+" and rank-"+n+" input."})}function pn(t,e){if(sn(t,e))return null;for(var n=[],r=0;r<e;++r)-1===t.indexOf(r)&&n.push(r);return t.forEach(function(t){return n.push(t)}),n}function fn(t){return t.map(function(t,e){return[e,t]}).sort(function(t,e){return t[1]-e[1]}).map(function(t){return t[0]})}function dn(t,e){for(var n=[],r=e-t;r<e;++r)n.push(r);return n}function vn(t,r){var o=t[0].length;t.forEach(function(t,e){O(t.length===o,function(){return"Error in concat"+o+"D: rank of tensors["+e+"] must be the same as the rank of the rest ("+o+")"})}),O(0<=r&&r<o,function(){return"Error in concat"+o+"D: axis must be between 0 and "+(o-1)+"."});var i=t[0];t.forEach(function(t,e){for(var n=0;n<o;n++)O(n===r||t[n]===i[n],function(){return"Error in concat"+o+"D: Shape of tensors["+e+"] ("+t+") does not match the shape of the rest ("+i+") along the non-concatenated axis "+e+"."})})}function mn(t,e){for(var n=t[0].slice(),r=1;r<t.length;r++)n[e]+=t[r][e];return n}function gn(t){var e=Object.keys(t);if(1!==e.length)throw new Error("Please provide an object with a single key (operation name) mapping to a function. Got an object with "+e.length+" keys.");var r=e[0],o=t[r];r.endsWith("_")&&(r=r.substring(0,r.length-1));function n(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];qt.startScope(r);try{var n=o.apply(void 0,t);return n instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),qt.endScope(n),n}catch(t){throw qt.endScope(null),t}}return Object.defineProperty(n,"name",{value:r,configurable:!0}),n}_.registerFlag("HAS_WEBGL",function(){return 0<_.getNumber("WEBGL_VERSION")}),_.registerFlag("WEBGL_VERSION",function(){return je(2)?2:je(1)?1:0}),_.registerFlag("WEBGL_BUFFER_SUPPORTED",function(){return 2===_.get("WEBGL_VERSION")}),_.registerFlag("WEBGL_CPU_FORWARD",function(){return!0}),_.registerFlag("WEBGL_FORCE_F16_TEXTURES",function(){return!1}),_.registerFlag("WEBGL_PACK",function(){return _.getBool("HAS_WEBGL")}),_.registerFlag("WEBGL_PACK_NORMALIZATION",function(){return _.getBool("WEBGL_PACK")}),_.registerFlag("WEBGL_PACK_CLIP",function(){return _.getBool("WEBGL_PACK")}),_.registerFlag("WEBGL_PACK_DEPTHWISECONV",function(){return!1}),_.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",function(){return _.getBool("WEBGL_PACK")}),_.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",function(){return _.getBool("WEBGL_PACK")}),_.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",function(){return _.getBool("WEBGL_PACK")}),_.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",function(){return _.getBool("WEBGL_PACK")}),_.registerFlag("WEBGL_PACK_REDUCE",function(){return _.getBool("WEBGL_PACK")}),_.registerFlag("WEBGL_LAZILY_UNPACK",function(){return _.getBool("WEBGL_PACK")}),_.registerFlag("WEBGL_CONV_IM2COL",function(){return _.getBool("WEBGL_PACK")}),_.registerFlag("WEBGL_MAX_TEXTURE_SIZE",function(){return Ue(_.getNumber("WEBGL_VERSION"))}),_.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",function(){return Ve(_.getNumber("WEBGL_VERSION"))}),_.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",function(){var t=_.getNumber("WEBGL_VERSION");return 0===t?0:Ge(t)}),_.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",function(){return 0<_.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")&&(t=navigator.userAgent||navigator.vendor||window.opera,!(/(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))));var t}),_.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",function(){return qe(_.getNumber("WEBGL_VERSION"))}),_.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",function(){return!_.getBool("WEBGL_FORCE_F16_TEXTURES")&&_.getBool("WEBGL_RENDER_FLOAT32_CAPABLE")}),_.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",function(){return $e(_.getNumber("WEBGL_VERSION"))}),_.registerFlag("WEBGL_FENCE_API_ENABLED",function(){return Xe(_.getNumber("WEBGL_VERSION"))}),_.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",function(){return _.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0}),mt=Je;var yn=gn({complex_:function(t,e){var n=on(t,"real","complex"),r=on(e,"imag","complex");return x(n.shape,r.shape,"real and imag shapes, "+n.shape+" and "+r.shape+", must match in call to tf.complex()."),qt.runKernel(function(t){return t.complex(n,r)},{$real:n,$imag:r})}}),xn=gn({real_:function(t){var e=on(t,"input","real");return qt.runKernel(function(t){return t.real(e)},{$input:e})}}),bn=gn({imag_:function(t){var e=on(t,"input","imag");return qt.runKernel(function(t){return t.imag(e)},{$input:e})}});function wn(t,e,n){return Cn(t,e,nn(t,n),n)}function Cn(t,e,n,r){if(null==r&&(r=q(t)),"complex64"===r)throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!z(t)&&!Array.isArray(t)&&"number"!=typeof t&&"boolean"!=typeof t&&"string"!=typeof t)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(null!=e){et(e);var o=L(e),i=L(n);O(o===i,function(){return"Based on the provided shape, ["+e+"], the tensor should have "+o+" values but has "+i});for(var a=0;a<n.length;++a){var s=n[a],u=a!==n.length-1||s!==L(e.slice(a));O(n[a]===e[a]||!u,function(){return"Error creating a new Tensor. Inferred shape ("+n+") does not match the provided shape ("+e+"). "})}}return z(t)||Array.isArray(t)||(t=[t]),e=e||n,t="string"!==r?Y(t,r,_.getBool("DEBUG")):m(t,[],!0),yt.make(e,{values:t},r)}function En(t,e){if((z(t)&&"string"!==e||Array.isArray(t))&&"complex64"!==e)throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if("string"===e&&z(t)&&!(t instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return Cn(t,[],[],e)}function _n(t,e){v(t);var n=nn(t,e);if(1!==n.length)throw new Error("tensor1d() requires values to be a flat/TypedArray");return Cn(t,null,n,e)}function Rn(t,e,n){if(v(t),null!=e&&2!==e.length)throw new Error("tensor2d() requires shape to have two numbers");var r=nn(t,n);if(2!==r.length&&1!==r.length)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(1===r.length&&null==e)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Cn(t,e,r,n)}function In(t,e,n){if(v(t),null!=e&&3!==e.length)throw new Error("tensor3d() requires shape to have three numbers");var r=nn(t,n);if(3!==r.length&&1!==r.length)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(1===r.length&&null==e)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return Cn(t,e,r,n)}function Sn(t,e,n){if(v(t),null!=e&&4!==e.length)throw new Error("tensor4d() requires shape to have four numbers");var r=nn(t,n);if(4!==r.length&&1!==r.length)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(1===r.length&&null==e)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return Cn(t,e,r,n)}function kn(t,e,n){if(v(t),null!=e&&5!==e.length)throw new Error("tensor5d() requires shape to have five numbers");var r=nn(t,n);if(5!==r.length&&1!==r.length)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(1===r.length&&null==e)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return Cn(t,e,r,n)}function Nn(t,e,n){if(v(t),null!=e&&6!==e.length)throw new Error("tensor6d() requires shape to have six numbers");var r=nn(t,n);if(6!==r.length&&1!==r.length)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(1===r.length&&null==e)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return Cn(t,e=e||r,r,n)}function An(t,e){if(void 0===e&&(e="float32"),"complex64"===e){var n=An(t,"float32"),r=Tn(t,"float32");return yn(n,r)}var o=Q(L(t),e);return yt.make(t,{values:o},e)}function Tn(t,e){if(void 0===e&&(e="float32"),"complex64"===e){var n=Tn(t,"float32"),r=Tn(t,"float32");return yn(n,r)}var o=Z(L(t),e);return yt.make(t,{values:o},e)}function Dn(e,n,r){return qt.runKernel(function(t){return t.fill(e,n,r)},{})}function Fn(e,n,r){if(r<=0)throw new Error("The number of values should be positive.");return qt.runKernel(function(t){return t.linspace(e,n,r)},{})}function Mn(t,e,n,r){if(void 0===n&&(n=1),void 0===r&&(r="float32"),0===n)throw new Error("Cannot have a step of zero");if(t===e||t<e&&n<0||e<t&&1<n)return Tn([0],r);var o=Z(Math.abs(Math.ceil((e-t)/n)),r);e<t&&1===n&&(n=-1),o[0]=t;for(var i=1;i<o.length;i++)o[i]=o[i-1]+n;return _n(o,r)}var Pn=gn({onesLike_:function(t){var e=on(t,"x","onesLike");if("complex64"!==e.dtype)return qt.runKernel(function(t){return t.onesLike(e)},{$x:e},function(t,e){return{$x:function(){return On(t)}}});var n=Pn(xn(e)),r=On(bn(e));return yn(n,r)}}),On=gn({zerosLike_:function(t){var e=on(t,"x","zerosLike");return qt.runKernel(function(t){return t.zerosLike(e)},{$x:e},function(t,e){return{$x:function(){return On(t)}}})}}),Bn=gn({concat_:function(t,n){void 0===n&&(n=0),O(1<=t.length,function(){return"Pass at least one tensor to concat"});var e=an(t,"tensors","concat");"complex64"===e[0].dtype&&e.forEach(function(t){if("complex64"!==t.dtype)throw new Error("Cannot concatenate complex64 tensors with a tensor\n with dtype "+t.dtype+". ")}),n=S(n,e[0].shape)[0];var r=mn(e.map(function(t){return t.shape}),n);if(0===L(r))return wn([],r);if(1===(e=e.filter(function(t){return 0<t.size})).length)return e[0];var o=e.map(function(t){return t.shape});vn(o,n);var i=e;return qt.runKernel(function(t){return t.concat(e,n)},i,function(t){var e=o.map(function(t){return t[n]});return Vn(t,e,n).map(function(t){return function(){return t}})})}}),Ln=gn({concat1d_:function(t){return Bn(t,0)}}),Wn=gn({concat2d_:function(t,e){return Bn(t,e)}}),zn=gn({concat3d_:function(t,e){return Bn(t,e)}}),Un=gn({concat4d_:function(t,e){return Bn(t,e)}}),Vn=gn({split_:function(t,e,n){void 0===n&&(n=0);var r,o=on(t,"x","split");return n=S(n,o.shape)[0],r="number"==typeof e?(O(o.shape[n]%e==0,function(){return"Number of splits must evenly divide the axis."}),new Array(e).fill(o.shape[n]/e)):(O(o.shape[n]===e.reduce(function(t,e){return t+e}),function(){return"The sum of sizes must match the size of the axis dimension."}),e),qt.runKernel(function(t){return t.split(o,r,n)},{$x:o},function(t){return{$x:function(){return Bn(t,n)}}})}});function Gn(t,e){return t(e={exports:{}},e.exports),e.exports}var Hn=Gn(function(t){!function(t,e){function i(t){var r,e=this,n=(r=4022871197,function(t){t=t.toString();for(var e=0;e<t.length;e++){var n=.02519603282416938*(r+=t.charCodeAt(e));n-=r=n>>>0,r=(n*=r)>>>0,r+=4294967296*(n-=r)}return 2.3283064365386963e-10*(r>>>0)});e.next=function(){var t=2091639*e.s0+2.3283064365386963e-10*e.c;return e.s0=e.s1,e.s1=e.s2,e.s2=t-(e.c=0|t)},e.c=1,e.s0=n(" "),e.s1=n(" "),e.s2=n(" "),e.s0-=n(t),e.s0<0&&(e.s0+=1),e.s1-=n(t),e.s1<0&&(e.s1+=1),e.s2-=n(t),e.s2<0&&(e.s2+=1),n=null}function a(t,e){return e.c=t.c,e.s0=t.s0,e.s1=t.s1,e.s2=t.s2,e}function n(t,e){var n=new i(t),r=e&&e.state,o=n.next;return o.int32=function(){return 4294967296*n.next()|0},o.double=function(){return o()+11102230246251565e-32*(2097152*o()|0)},o.quick=o,r&&("object"==typeof r&&a(r,n),o.state=function(){return a(n,{})}),o}e&&e.exports?e.exports=n:this.alea=n}(0,t)}),jn=Gn(function(t){!function(t,e){function i(t){var e=this,n="";e.x=0,e.y=0,e.z=0,e.w=0,e.next=function(){var t=e.x^e.x<<11;return e.x=e.y,e.y=e.z,e.z=e.w,e.w^=e.w>>>19^t^t>>>8},t===(0|t)?e.x=t:n+=t;for(var r=0;r<n.length+64;r++)e.x^=0|n.charCodeAt(r),e.next()}function a(t,e){return e.x=t.x,e.y=t.y,e.z=t.z,e.w=t.w,e}function n(t,e){function n(){return(r.next()>>>0)/4294967296}var r=new i(t),o=e&&e.state;return n.double=function(){do{var t=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},n.int32=r.next,n.quick=n,o&&("object"==typeof o&&a(o,r),n.state=function(){return a(r,{})}),n}e&&e.exports?e.exports=n:this.xor128=n}(0,t)}),qn=Gn(function(t){!function(t,e){function i(t){var e=this,n="";e.next=function(){var t=e.x^e.x>>>2;return e.x=e.y,e.y=e.z,e.z=e.w,e.w=e.v,(e.d=e.d+362437|0)+(e.v=e.v^e.v<<4^t^t<<1)|0},e.x=0,e.y=0,e.z=0,e.w=0,t===((e.v=0)|t)?e.x=t:n+=t;for(var r=0;r<n.length+64;r++)e.x^=0|n.charCodeAt(r),r==n.length&&(e.d=e.x<<10^e.x>>>4),e.next()}function a(t,e){return e.x=t.x,e.y=t.y,e.z=t.z,e.w=t.w,e.v=t.v,e.d=t.d,e}function n(t,e){function n(){return(r.next()>>>0)/4294967296}var r=new i(t),o=e&&e.state;return n.double=function(){do{var t=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},n.int32=r.next,n.quick=n,o&&("object"==typeof o&&a(o,r),n.state=function(){return a(r,{})}),n}e&&e.exports?e.exports=n:this.xorwow=n}(0,t)}),$n=Gn(function(t){!function(t,e){function i(t){var o=this;o.next=function(){var t,e,n=o.x,r=o.i;return t=n[r],e=(t^=t>>>7)^t<<24,e^=(t=n[r+1&7])^t>>>10,e^=(t=n[r+3&7])^t>>>3,e^=(t=n[r+4&7])^t<<7,t=n[r+7&7],e^=(t^=t<<13)^t<<9,n[r]=e,o.i=r+1&7,e},function(t,e){var n,r=[];if(e===(0|e))r[0]=e;else for(e=""+e,n=0;n<e.length;++n)r[7&n]=r[7&n]<<15^e.charCodeAt(n)+r[n+1&7]<<13;for(;r.length<8;)r.push(0);for(n=0;n<8&&0===r[n];++n);for(8==n?r[7]=-1:r[n],t.x=r,t.i=0,n=256;0<n;--n)t.next()}(o,t)}function a(t,e){return e.x=t.x.slice(),e.i=t.i,e}function n(t,e){null==t&&(t=+new Date);function n(){return(r.next()>>>0)/4294967296}var r=new i(t),o=e&&e.state;return n.double=function(){do{var t=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},n.int32=r.next,n.quick=n,o&&(o.x&&a(o,r),n.state=function(){return a(r,{})}),n}e&&e.exports?e.exports=n:this.xorshift7=n}(0,t)}),Kn=Gn(function(t){!function(t,e){function i(t){var i=this;i.next=function(){var t,e,n=i.w,r=i.X,o=i.i;return i.w=n=n+1640531527|0,e=r[o+34&127],t=r[o=o+1&127],e^=e<<13,t^=t<<17,e^=e>>>15,t^=t>>>12,e=r[o]=e^t,i.i=o,e+(n^n>>>16)|0},function(t,e){var n,r,o,i,a,s=[],u=128;for(e===(0|e)?(r=e,e=null):(e+="\0",r=0,u=Math.max(u,e.length)),o=0,i=-32;i<u;++i)e&&(r^=e.charCodeAt((i+32)%e.length)),0===i&&(a=r),r^=r<<10,r^=r>>>15,r^=r<<4,r^=r>>>13,0<=i&&(a=a+1640531527|0,o=0==(n=s[127&i]^=r+a)?o+1:0);for(128<=o&&(s[127&(e&&e.length||0)]=-1),o=127,i=512;0<i;--i)r=s[o+34&127],n=s[o=o+1&127],r^=r<<13,n^=n<<17,r^=r>>>15,n^=n>>>12,s[o]=r^n;t.w=a,t.X=s,t.i=o}(i,t)}function a(t,e){return e.i=t.i,e.w=t.w,e.X=t.X.slice(),e}function n(t,e){null==t&&(t=+new Date);function n(){return(r.next()>>>0)/4294967296}var r=new i(t),o=e&&e.state;return n.double=function(){do{var t=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},n.int32=r.next,n.quick=n,o&&(o.X&&a(o,r),n.state=function(){return a(r,{})}),n}e&&e.exports?e.exports=n:this.xor4096=n}(0,t)}),Xn=Gn(function(t){!function(t,e){function i(t){var o=this,e="";o.next=function(){var t=o.b,e=o.c,n=o.d,r=o.a;return t=t<<25^t>>>7^e,e=e-n|0,n=n<<24^n>>>8^r,r=r-t|0,o.b=t=t<<20^t>>>12^e,o.c=e=e-n|0,o.d=n<<16^e>>>16^r,o.a=r-t|0},o.a=0,o.b=0,o.c=-1640531527,o.d=1367130551,t===Math.floor(t)?(o.a=t/4294967296|0,o.b=0|t):e+=t;for(var n=0;n<e.length+20;n++)o.b^=0|e.charCodeAt(n),o.next()}function a(t,e){return e.a=t.a,e.b=t.b,e.c=t.c,e.d=t.d,e}function n(t,e){function n(){return(r.next()>>>0)/4294967296}var r=new i(t),o=e&&e.state;return n.double=function(){do{var t=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},n.int32=r.next,n.quick=n,o&&("object"==typeof o&&a(o,r),n.state=function(){return a(r,{})}),n}e&&e.exports?e.exports=n:this.tychei=n}(0,t)}),Yn=Gn(function(e){!function(s,u){var c,l=this,h=256,p=6,f="random",d=u.pow(h,p),v=u.pow(2,52),m=2*v,g=h-1;function t(t,e,n){function r(){for(var t=a.g(p),e=d,n=0;t<v;)t=(t+n)*h,e*=h,n=a.g(1);for(;m<=t;)t/=2,e/=2,n>>>=1;return(t+n)/e}var o=[],i=b(function t(e,n){var r,o=[],i=typeof e;if(n&&"object"==i)for(r in e)try{o.push(t(e[r],n-1))}catch(t){}return o.length?o:"string"==i?e:e+"\0"}((e=1==e?{entropy:!0}:e||{}).entropy?[t,w(s)]:null==t?function(){try{var t;return c&&(t=c.randomBytes)?t=t(h):(t=new Uint8Array(h),(l.crypto||l.msCrypto).getRandomValues(t)),w(t)}catch(t){var e=l.navigator,n=e&&e.plugins;return[+new Date,l,n,l.screen,w(s)]}}():t,3),o),a=new y(o);return r.int32=function(){return 0|a.g(4)},r.quick=function(){return a.g(4)/4294967296},r.double=r,b(w(a.S),s),(e.pass||n||function(t,e,n,r){return r&&(r.S&&x(r,a),t.state=function(){return x(a,{})}),n?(u[f]=t,e):t})(r,i,"global"in e?e.global:this==u,e.state)}function y(t){var e,n=t.length,a=this,r=0,o=a.i=a.j=0,i=a.S=[];for(n||(t=[n++]);r<h;)i[r]=r++;for(r=0;r<h;r++)i[r]=i[o=g&o+t[r%n]+(e=i[r])],i[o]=e;(a.g=function(t){for(var e,n=0,r=a.i,o=a.j,i=a.S;t--;)e=i[r=g&r+1],n=n*h+i[g&(i[r]=i[o=g&o+e])+(i[o]=e)];return a.i=r,a.j=o,n})(h)}function x(t,e){return e.i=t.i,e.j=t.j,e.S=t.S.slice(),e}function b(t,e){for(var n,r=t+"",o=0;o<r.length;)e[g&o]=g&(n^=19*e[g&o])+r.charCodeAt(o++);return w(e)}function w(t){return String.fromCharCode.apply(0,t)}if(u["seed"+f]=t,b(u.random(),s),e.exports){e.exports=t;try{c=require("crypto")}catch(t){}}}([],Math)});Yn.alea=Hn,Yn.xor128=jn,Yn.xorwow=qn,Yn.xorshift7=$n,Yn.xor4096=Kn,Yn.tychei=Xn;var Jn=Yn.alea,Qn=(rr.prototype.nextValue=function(){if(!isNaN(this.nextVal)){var t=this.nextVal;return this.nextVal=NaN,t}for(var e,n,r=!1;!r;){for(var o=void 0,i=void 0,a=void 0;1<=(a=(o=2*this.random()-1)*o+(i=2*this.random()-1)*i)||0===a;);var s=Math.sqrt(-2*Math.log(a)/a);e=this.mean+this.stdDev*o*s,n=this.mean+this.stdDev*i*s,this.truncated&&!this.isValidTruncated(e)||(r=!0)}return this.truncated&&!this.isValidTruncated(n)||(this.nextVal=this.convertValue(n)),this.convertValue(e)},rr.prototype.convertValue=function(t){return null==this.dtype||"float32"===this.dtype?t:Math.round(t)},rr.prototype.isValidTruncated=function(t){return t<=this.upper&&t>=this.lower},rr),Zn=(nr.prototype.nextValue=function(){for(var t,e,n,r,o,i;;){for(;r=this.randn.nextValue(),(i=1+this.c*r)<=0;);if(i*=i*i,e=1-.331*(t=r*r)*t,n=.5*t+this.d*(1-i+Math.log(i)),(o=this.randu())<e||Math.log(o)<n)break}return i=1/this.beta*this.d*i,this.alpha<1&&(i*=Math.pow(this.randu(),1/this.alpha)),this.convertValue(i)},nr.prototype.convertValue=function(t){return"float32"===this.dtype?t:Math.round(t)},nr),tr=(er.prototype.convertValue=function(t){return this.canReturnFloat()?t:Math.round(t)},er.prototype.nextValue=function(){return this.convertValue(this.min+this.range*this.random())},er);function er(t,e,n,r){var o=this;if(void 0===t&&(t=0),void 0===e&&(e=1),this.canReturnFloat=function(){return null==o.dtype||"float32"===o.dtype},this.min=t,this.range=e-t,this.dtype=n,null==r&&(r=Math.random()),"number"==typeof r&&(r=r.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error("The difference between "+t+" - "+e+" <= 1 and dtype is not float");this.random=Jn(r)}function nr(t,e,n,r){this.alpha=t,this.beta=1/e,this.dtype=n;var o=r||Math.random();this.randu=Jn(o.toString()),this.randn=new Qn(0,1,n,!1,this.randu()),this.d=t<1?t+2/3:t-1/3,this.c=1/Math.sqrt(9*this.d)}function rr(t,e,n,r,o){this.mean=t,this.stdDev=e,this.dtype=n,this.nextVal=NaN,this.truncated=r,this.truncated&&(this.upper=this.mean+2*this.stdDev,this.lower=this.mean-2*this.stdDev);var i=o||Math.random();this.random=Jn(i.toString())}function or(t,e,n){return void 0===e&&(e="float32"),e=e||"float32",et(t),new ft(t,e,n)}function ir(t,e){void 0===e&&(e=!1),console.log(t.toString(e))}function ar(h,p){return y(this,void 0,void 0,function(){var e,n,r,o,i,a,s,u,c,l;return I(this,function(t){switch(t.label){case 0:return e=on(h,"x","setdiff1d"),n=on(p,"y","setdiff1d"),O(e.dtype===n.dtype,function(){return"x and y should have the same dtype, but got x ("+e.dtype+") and y ("+n.dtype+")."}),O(1===e.rank,function(){return"x should be 1D tensor, but got x ("+e.shape+")."}),O(1===n.rank,function(){return"y should be 1D tensor, but got y ("+n.shape+")."}),[4,e.data()];case 1:return r=t.sent(),[4,n.data()];case 2:for(o=t.sent(),i=new Set(o),c=a=0;c<r.length;c++)i.has(r[c])||a++;for(s=new ft([a],e.dtype),u=new ft([a],"int32"),l=c=0;c<r.length;c++)i.has(r[c])||(s.values[l]=r[c],u.values[l]=c,l++);return[2,[s.toTensor(),u.toTensor()]]}})})}var sr=gn({batchToSpaceND_:function(t,e,n){var r=on(t,"x","batchToSpaceND"),o=e.reduce(function(t,e){return t*e});return O(r.rank>=1+e.length,function(){return"input rank is "+r.rank+" but should be > than blockShape.length "+e.length}),O(n.length===e.length,function(){return"crops.length is "+n.length+" but should be equal to blockShape.length "+e.length}),O(r.shape[0]%o==0,function(){return"input tensor batch is "+r.shape[0]+" but is not divisible by the product of the elements of blockShape "+e.join(" * ")+" === "+o}),qt.runKernel(function(t){return t.batchToSpaceND(r,e,n)},{$x:r},function(t){return{$x:function(){return t.spaceToBatchND(e,n)}}})}}),ur=gn({cast_:function(t,e){var n=on(t,"x","cast");if(!F(e))throw new Error("Failed to cast to unknown dtype "+e);if("string"===e&&"string"!==n.dtype||"string"!==e&&"string"===n.dtype)throw new Error("Only strings can be casted to strings");return qt.runKernel(function(t){return t.cast(n,e)},{$x:n},function(t){return{$x:function(){return t.clone()}}})}}),cr=gn({clone_:function(t){var e=on(t,"x","clone",null);return qt.runKernel(function(t){return yt.make(e.shape,{dataId:e.dataId},e.dtype)},{$x:e},function(t){return{$x:function(){return t.toFloat()}}})}}),lr=gn({cumsum_:function(t,e,n,r){void 0===e&&(e=0),void 0===n&&(n=!1),void 0===r&&(r=!1);var o=on(t,"x","cumsum"),i=pn([e|=0],o.rank),a=o;null!=i&&(a=o.transpose(i));var s=dn(1,o.rank)[0],u=qt.runKernel(function(t){return t.cumsum(a,s,n,r)},{permutedX:a},function(t){return{permutedX:function(){return t.cumsum(e,n,!r)}}});return null!=i&&(u=u.transpose(i)),u}}),hr=gn({depthToSpace_:function(t,e,n){void 0===n&&(n="NHWC");var r=on(t,"x","depthToSpace"),o="NHWC"===n?r.shape[1]:r.shape[2],i="NHWC"===n?r.shape[2]:r.shape[3],a="NHWC"===n?r.shape[3]:r.shape[1];return O(0<=o*e,function(){return"Negative dimension size caused by overflow when multiplying\n "+o+" and "+e+" for depthToSpace with input shape\n "+r.shape}),O(0<=i*e,function(){return"Negative dimension size caused by overflow when multiplying\n "+i+" and "+e+" for depthToSpace with input shape\n "+r.shape}),O(a%(e*e)==0,function(){return"Dimension size must be evenly divisible by "+e*e+" but is "+a+" for depthToSpace with input shape "+r.shape}),qt.runKernel(function(t){return t.depthToSpace(r,e,n)},{$x:r})}}),pr=gn({expandDims_:function(t,e){void 0===e&&(e=0);var n=on(t,"x","expandDims",null);O(e<=n.rank,function(){return"Axis must be <= rank of the tensor"});var r=n.shape.slice();return e<0&&(O(-(n.rank+1)<=e,function(){return"Axis must be in the interval ["+-(n.rank+1)+", "+n.rank+"]"}),e=n.rank+e+1),r.splice(e,0,1),Rr(n,r)}}),fr=gn({eye_:function(t,e,n,r){void 0===r&&(r="float32"),null==e&&(e=t);for(var o=or([t,e],r),i=t<=e?t:e,a=0;a<i;++a)o.set(1,a,a);var s=o.toTensor().as2D(t,e);if(null==n)return s;if(1===n.length)return Nr(pr(s,0),[n[0],1,1]);if(2===n.length)return Nr(pr(pr(s,0),0),[n[0],n[1],1,1]);if(3===n.length)return Nr(pr(pr(pr(s,0),0),0),[n[0],n[1],n[2],1,1]);throw new Error("eye() currently supports only 1D and 2D batchShapes, but received "+n.length+"D.")}}),dr=gn({multinomial_:function(t,e,n,r){void 0===r&&(r=!1);var o=on(t,"logits","multinomial"),i=o.size,a=o.rank;if(i<2)throw new Error("Error in multinomial: you need at least 2 outcomes, but got "+i+".");if(2<a)throw new Error("Rank of probabilities must be 1 or 2, but is "+a);n=n||Math.random();var s=1===a?o.as2D(1,-1):o,u=qt.runKernel(function(t){return t.multinomial(s,r,e,n)},{logits2D:s});return 1===a?u.as1D():u}}),vr=gn({oneHot_:function(t,e,n,r){if(void 0===n&&(n=1),void 0===r&&(r=0),e<2)throw new Error("Error in oneHot: depth must be >=2, but it is "+e);var o=on(t,"indices","oneHot","int32"),i=o.shape.concat([e]);return o=o.flatten(),qt.runKernel(function(t){return t.oneHot(o,e,n,r)},{$indices:o},function(t){return{$indices:function(){return Tn(o.shape,"float32")}}}).reshape(i)}}),mr=gn({pad_:function(t,e,n){void 0===n&&(n=0);var r=on(t,"x","pad");if(0===r.rank)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");var o=e.map(function(t){return t[0]});return qt.runKernel(function(t){return t.pad(r,e,n)},{$x:r},function(t){return{$x:function(){return t.slice(o,r.shape)}}})}}),gr=gn({pad1d_:function(t,e,n){return void 0===n&&(n=0),O(2===e.length,function(){return"Invalid number of paddings. Must be length of 2."}),mr(t,[e],n)}}),yr=gn({pad2d_:function(t,e,n){return void 0===n&&(n=0),O(2===e.length&&2===e[0].length&&2===e[1].length,function(){return"Invalid number of paddings. Must be length of 2 each."}),mr(t,e,n)}}),xr=gn({pad3d_:function(t,e,n){return void 0===n&&(n=0),O(3===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length,function(){return"Invalid number of paddings. Must be length of 2 each."}),mr(t,e,n)}}),br=gn({pad4d_:function(t,e,n){return void 0===n&&(n=0),O(4===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length&&2===e[3].length,function(){return"Invalid number of paddings. Must be length of 2 each."}),mr(t,e,n)}}),wr=gn({rand_:function(t,e,n){var r=L(t),o=null;if(null==n||"float32"===n)o=new Float32Array(r);else if("int32"===n)o=new Int32Array(r);else{if("bool"!==n)throw new Error("Unknown data type "+n);o=new Uint8Array(r)}for(var i=0;i<r;i++)o[i]=e();return yt.make(t,{values:o},n)}}),Cr=gn({randomNormal_:function(t,e,n,r,o){if(void 0===e&&(e=0),void 0===n&&(n=1),null!=r&&"bool"===r)throw new Error("Unsupported data type "+r);for(var i=new Qn(e,n,r,!1,o),a=or(t,r),s=0;s<a.values.length;s++)a.values[s]=i.nextValue();return a.toTensor()}}),Er=gn({randomGamma_:function(t,e,n,r,o){if(void 0===n&&(n=1),void 0===r&&(r="float32"),null==n&&(n=1),null==r&&(r="float32"),"float32"!==r&&"int32"!==r)throw new Error("Unsupported data type "+r);for(var i=new Zn(e,n,r,o),a=or(t,r),s=0;s<a.values.length;s++)a.values[s]=i.nextValue();return a.toTensor()}}),_r=gn({randomUniform_:function(t,e,n,r,o){void 0===e&&(e=0),void 0===n&&(n=1),void 0===r&&(r="float32");for(var i=or(t,r),a=new tr(e,n,null,o),s=0;s<i.values.length;s++)i.values[s]=a.nextValue();return i.toTensor()}}),Rr=gn({reshape_:function(t,e){var n=on(t,"x","reshape",null);return e=R(e,n.size),O(n.size===L(e),function(){return"new shape and old shape must have the same number of elements."}),qt.runKernel(function(t){return t.reshape(n,e)},{$x:n},function(t){return{$x:function(){return t.reshape(n.shape)}}})}}),Ir=gn({spaceToBatchND_:function(t,r,o){var e=on(t,"x","spaceToBatchND");return O(e.rank>=1+r.length,function(){return"input rank "+e.rank+" should be > than [blockShape] "+r.length}),O(o.length===r.length,function(){return"paddings.shape[0] "+o.length+" must be equal to [blockShape] "+r.length}),O(e.shape.reduce(function(t,e,n){return 0<n&&n<=r.length?t&&(e+o[n-1][0]+o[n-1][1])%r[n-1]==0:t},!0),function(){return"input spatial dimensions "+e.shape.slice(1)+" with paddings "+o.toString()+" must be divisible by blockShapes "+r.toString()}),qt.runKernel(function(t){return t.spaceToBatchND(e,r,o)},{$x:e},function(t){return{$x:function(){return t.batchToSpaceND(r,o)}}})}}),Sr=gn({squeeze_:function(t,e){var n=on(t,"x","squeeze");return Rr(n,N(n.shape,e).newShape)}}),kr=gn({stack_:function(t,e){void 0===e&&(e=0);var n=an(t,"tensors","stack");if(O(1<=n.length,function(){return"Pass at least one tensor to tf.stack"}),1===n.length)return n[0].expandDims(e);var r=n[0].rank,o=n[0].shape,i=n[0].dtype;O(e<=r,function(){return"Axis must be <= rank of the tensor"}),n.forEach(function(t){x(o,t.shape,"All tensors passed to stack must have matching shapes")}),n.forEach(function(t){O(i===t.dtype,function(){return"All tensors passed to stack must have matching dtypes"})});var a=n.map(function(t){return t.expandDims(e)});return Bn(a,e)}}),Nr=gn({tile_:function(t,s){var r=on(t,"x","tile",null);return O(r.rank===s.length,function(){return"Error in transpose: rank of input "+r.rank+" must match length of reps "+s+"."}),qt.runKernel(function(t,e){var n=t.tile(r,s);return e([r]),n},{$x:r},function(i,t){var a=t[0];return{$x:function(){var t=On(a);if(1===a.rank)for(var e=0;e<s[0];++e)t=t.add(i.slice([e*a.shape[0]],[a.shape[0]]));else if(2===a.rank)for(e=0;e<s[0];++e)for(var n=0;n<s[1];++n)t=t.add(i.slice([e*a.shape[0],n*a.shape[1]],[a.shape[0],a.shape[1]]));else if(3===a.rank)for(e=0;e<s[0];++e)for(n=0;n<s[1];++n)for(var r=0;r<s[2];++r)t=t.add(i.slice([e*a.shape[0],n*a.shape[1],r*a.shape[2]],[a.shape[0],a.shape[1],a.shape[2]]));else{if(4!==a.rank)throw new Error("Gradient for tile operation is not implemented for rank-"+a.rank+" tensors yet.");for(e=0;e<s[0];++e)for(n=0;n<s[1];++n)for(r=0;r<s[2];++r)for(var o=0;o<s[3];++o)t=t.add(i.slice([e*a.shape[0],n*a.shape[1],r*a.shape[2],o*a.shape[3]],[a.shape[0],a.shape[1],a.shape[2],a.shape[3]]))}return t}}})}}),Ar=gn({truncatedNormal_:function(t,e,n,r,o){if(void 0===e&&(e=0),void 0===n&&(n=1),null!=r&&"bool"===r)throw new Error("Unsupported data type "+r);for(var i=new Qn(e,n,r,!0,o),a=or(t,r),s=0;s<a.values.length;s++)a.values[s]=i.nextValue();return a.toTensor()}}),Tr=gn({unstack_:function(t,e){void 0===e&&(e=0),e=e||0;var n=on(t,"x","unstack");return O(e>=-n.shape.length&&e<n.shape.length,function(){return"Axis = "+e+" is not in [-"+n.shape.length+", "+n.shape.length+")"}),e<0&&(e+=n.shape.length),qt.runKernel(function(t){return t.unstack(n,e)},{$x:n},function(t){return{$x:function(){return kr(t,e)}}})}});function Dr(t,e,n,r){void 0===r&&(r=!0);var o=[];if(r)(o=o.concat(e.slice(0))).push(t[0]/n),o=o.concat(t.slice(1));else{o=o.concat(t[0]);for(var i=e.length,a=0;a<i;++a)o=o.concat([t[a+1]/e[a],e[a]]);o=o.concat(t.slice(i+1))}return o}function Fr(t,e,n){void 0===n&&(n=!0);var r=[];if(n){r.push(e);for(var o=e+1;o<t;++o)o<=2*e?(r.push(o),r.push(o-(e+1))):r.push(o)}else{var i=[],a=[];for(o=1;o<t;++o)2*e+1<=o||o%2==1?a.push(o):i.push(o);r.push.apply(r,i),r.push(0),r.push.apply(r,a)}return r}function Mr(t,e,n,r){void 0===r&&(r=!0);var o=[];r?o.push(t[0]/n):o.push(t[0]*n);for(var i=1;i<t.length;++i)i<=e.length?r?o.push(e[i-1]*t[i]):o.push(t[i]/e[i-1]):o.push(t[i]);return o}function Pr(t,e){for(var n=[0],r=0;r<e;++r)n.push(t[r][0]);return n}function Or(t,e,n){for(var r=t.slice(0,1),o=0;o<n;++o)r.push(t[o+1]-e[o][0]-e[o][1]);return r}function Br(t,e){if(t.rank<1)throw new Error("tf.gatherND() expects the input to be rank 1 or higher, but the rank was "+t.rank+".");if(e.rank<1)throw new Error("tf.gatherND() expects the indices to be rank 1 or higher, but the rank was "+e.rank+".");if("int32"!==e.dtype)throw new Error("tf.gatherND() expects the indices to be int32 type, but the dtype was "+e.dtype+".");if(e.shape[e.rank-1]>t.rank)throw new Error("index innermost dimension length must be <= tensor rank; saw: "+e.shape[e.rank-1]+" vs. "+t.rank);if(0===t.size)throw new Error("Requested more than 0 entries, but input is empty. Input shape: "+t.shape+".");for(var n=e.shape,r=n[n.length-1],o=1,i=0;i<n.length-1;++i)o*=n[i];var a=t.shape,s=n.slice();s.pop();var u=1;for(i=r;i<t.rank;++i)u*=a[i],s.push(a[i]);var c=X(t.shape).map(function(t){return t/u}).concat([1]).slice(0,r);return[s,o,u,c]}function Lr(t){return t<=30?t:K(t,Math.floor(Math.sqrt(t)))}function Wr(t,e,n){for(var r=1<e.rank?e.shape[e.rank-1]:1,o=n.length,i=1,a=r;a<o;++a)i*=n[a];var s=r<1?1:r;return{sliceRank:r,numUpdates:e.size/s,sliceSize:i,strides:X(n.slice(0,r)).concat([1]),outputSize:L(n)}}function zr(t){for(var e=[],n=0;0<t;)1&t&&e.push(n),t/=2,n++;return e}function Ur(t,e,n){for(var r=[],o=0;o<t.length;o++)r[o]=Math.ceil((e[o]-t[o])/n[o]);return r}function Vr(t,e,n,r,o){var i=e[o],a=n[o]||1;(t&1<<o||null==i)&&(i=0<a?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);var s=r[o];return i<0&&(i+=s),f(0,i,s-1)}function Gr(t,e,n,r,o){var i=e[o],a=n[o]||1;(t&1<<o||null==i)&&(i=0<a?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);var s=r[o];return i<0&&(i+=s),0<a?f(0,i,s):f(-1,i,s-1)}function Hr(t,e,n){for(var r=n.length,o=0;o<n.length;o++)if(1<n[o]){r=o;break}for(o=r+1;o<n.length;o++)if(0<e[o]||n[o]!==t[o])return!1;return!0}function jr(t,e){for(var n=0<t.length?t[t.length-1]:1,r=0;r<t.length-1;r++)n+=t[r]*e[r];return n}function qr(t,e){O($(t),function(){return"The f passed in variableGrads(f) must be a function"}),O(null==e||Array.isArray(e)&&e.every(function(t){return t instanceof wt}),function(){return"The varList passed in variableGrads(f, varList) must be an array of variables"});var n=null!=e;if(!n)for(var r in e=[],qt.registeredVariables)e.push(qt.registeredVariables[r]);var o=n?e.filter(function(t){return!t.trainable}):null,i=e.length;O(0<(e=e.filter(function(t){return t.trainable})).length,function(){return"variableGrads() expects at least one of the input variables to be trainable, but none of the "+i+" variables is trainable."});var a=qt.gradients(t,e,null,!0),s=a.value,u=a.grads;O(u.some(function(t){return null!=t}),function(){return"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."}),O(0===s.rank,function(){return"The f passed in variableGrads(f) must return a scalar, but it returned a rank-"+s.rank+" tensor"});var c={};return e.forEach(function(t,e){null!=u[e]&&(c[t.name]=u[e])}),null!=o&&o.forEach(function(t){return c[t.name]=null}),{value:s,grads:c}}function $r(t){return qt.customGrad(t)}function Kr(t){if(0<t.filter(function(t){return null==t}).length)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that\n the f you passed encloses all operations that lead from x to y.")}var Xr=gn({softmax_:function(t,o){void 0===o&&(o=-1);var e=on(t,"logits","softmax");if(-1===o&&(o=e.rank-1),o!==e.rank-1)throw Error("Softmax along a non-last dimension is not yet supported. Logits was rank "+e.rank+" and dim was "+o);return $r(function(t,e){var n=t.logSumExp([o],!0),r=t.toFloat().sub(n).exp();return e([r]),{value:r,gradFunc:function(t,e){var n=e[0],r=t.mul(n);return r.sub(r.sum([o],!0).mul(n))}}})(e)}}),Yr=gn({logSoftmax_:function(t,i){void 0===i&&(i=-1);var e=on(t,"logits","logSoftmax");if(-1===i&&(i=e.rank-1),i!==e.rank-1)throw Error("Log Softmax along a non-last dimension is not yet supported. Logits was rank "+e.rank+" and axis was "+i);return $r(function(t,e){var n=t.max(i,!0),r=t.sub(n),o=r.toFloat().sub(r.exp().sum(i,!0).log());return e([o]),{value:o,gradFunc:function(t,e){var n=e[0].exp();return t.sub(t.sum(i,!0).mul(n))}}})(e)}}),Jr=(to.prototype.get=function(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)},to.prototype.set=function(t,e){this.data.set(t,e)},to.prototype.has=function(t){return this.data.has(t)},to.prototype.delete=function(t){return this.data.delete(t)},to),Qr=(Zr.prototype.time=function(t){throw new Error("Not yet implemented.")},Zr.prototype.read=function(t){throw new Error("Not yet implemented.")},Zr.prototype.readSync=function(t){throw new Error("Not yet implemented.")},Zr.prototype.disposeData=function(t){throw new Error("Not yet implemented.")},Zr.prototype.write=function(t,e){throw new Error("Not yet implemented.")},Zr.prototype.fromPixels=function(t,e){throw new Error("Not yet implemented.")},Zr.prototype.register=function(t,e,n){throw new Error("Not yet implemented.")},Zr.prototype.memory=function(){throw new Error("Not yet implemented.")},Zr.prototype.floatPrecision=function(){throw new Error("Not yet implemented")},Zr.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},Zr.prototype.batchMatMul=function(t,e,n,r){throw new Error("Not yet implemented")},Zr.prototype.fusedBatchMatMul=function(t){throw t.a,t.b,t.transposeA,t.transposeB,t.bias,t.activation,t.preluActivationWeights,new Error("Not yet implemented")},Zr.prototype.slice=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.stridedSlice=function(t,e,n,r){throw new Error("Not yet implemented")},Zr.prototype.unstack=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.reverse=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.concat=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.neg=function(t){throw new Error("Not yet implemented")},Zr.prototype.add=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.addN=function(t){throw new Error("Not yet implemented")},Zr.prototype.subtract=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.multiply=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.realDivide=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.floorDiv=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.sum=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.prod=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.unsortedSegmentSum=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.argMin=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.argMax=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.equal=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.notEqual=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.less=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.lessEqual=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.greater=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.greaterEqual=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.logicalNot=function(t){throw new Error("Not yet implemented")},Zr.prototype.logicalAnd=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.logicalOr=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.where=function(t){throw new Error("Not yet implemented")},Zr.prototype.select=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.topk=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.min=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.minimum=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.mod=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.max=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.maximum=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.all=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.any=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.squaredDifference=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.ceil=function(t){throw new Error("Not yet implemented")},Zr.prototype.floor=function(t){throw new Error("Not yet implemented")},Zr.prototype.round=function(t){throw new Error("Not yet implemented")},Zr.prototype.sign=function(t){throw new Error("Not yet implemented")},Zr.prototype.isNaN=function(t){throw new Error("Not yet implemented")},Zr.prototype.isInf=function(t){throw new Error("Not yet implemented")},Zr.prototype.isFinite=function(t){throw new Error("Not yet implemented")},Zr.prototype.pow=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.exp=function(t){throw new Error("Not yet implemented")},Zr.prototype.expm1=function(t){throw new Error("Not yet implemented")},Zr.prototype.log=function(t){throw new Error("Not yet implemented")},Zr.prototype.log1p=function(t){throw new Error("Not yet implemented")},Zr.prototype.sqrt=function(t){throw new Error("Not yet implemented")},Zr.prototype.rsqrt=function(t){throw new Error("Not yet implemented")},Zr.prototype.square=function(t){throw new Error("Not yet implemented")},Zr.prototype.reciprocal=function(t){throw new Error("Not yet implemented")},Zr.prototype.relu=function(t){throw new Error("Not yet implemented")},Zr.prototype.prelu=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.elu=function(t){throw new Error("Not yet implemented")},Zr.prototype.eluDer=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.selu=function(t){throw new Error("Not yet implemented")},Zr.prototype.int=function(t){throw new Error("Not yet implemented")},Zr.prototype.clip=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.abs=function(t){throw new Error("Not yet implemented")},Zr.prototype.complexAbs=function(t){throw new Error("Not yet implemented")},Zr.prototype.sigmoid=function(t){throw new Error("Not yet implemented")},Zr.prototype.softplus=function(t){throw new Error("Not yet implemented")},Zr.prototype.sin=function(t){throw new Error("Not yet implemented")},Zr.prototype.cos=function(t){throw new Error("Not yet implemented")},Zr.prototype.tan=function(t){throw new Error("Not yet implemented")},Zr.prototype.asin=function(t){throw new Error("Not yet implemented")},Zr.prototype.acos=function(t){throw new Error("Not yet implemented")},Zr.prototype.atan=function(t){throw new Error("Not yet implemented")},Zr.prototype.atan2=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.sinh=function(t){throw new Error("Not yet implemented")},Zr.prototype.cosh=function(t){throw new Error("Not yet implemented")},Zr.prototype.tanh=function(t){throw new Error("Not yet implemented")},Zr.prototype.asinh=function(t){throw new Error("Not yet implemented")},Zr.prototype.acosh=function(t){throw new Error("Not yet implemented")},Zr.prototype.atanh=function(t){throw new Error("Not yet implemented")},Zr.prototype.erf=function(t){throw new Error("Not yet implemented")},Zr.prototype.step=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.fusedConv2d=function(t,e,n,r,o,i){throw new Error("Not yet implemented")},Zr.prototype.conv2d=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.conv2dDerInput=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.conv2dDerFilter=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.depthwiseConv2D=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.depthwiseConv2DDerInput=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.depthwiseConv2DDerFilter=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.conv3d=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.conv3dDerInput=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.conv3dDerFilter=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.maxPool=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.maxPoolBackprop=function(t,e,n,r){throw new Error("Not yet implemented")},Zr.prototype.avgPool=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.avgPoolBackprop=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.avgPool3d=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.avgPool3dBackprop=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.maxPool3d=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.maxPool3dBackprop=function(t,e,n,r){throw new Error("Not yet implemented")},Zr.prototype.reshape=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.cast=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.tile=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.pad=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.transpose=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.gather=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.gatherND=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.scatterND=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.batchToSpaceND=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.spaceToBatchND=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.resizeBilinear=function(t,e,n,r){throw new Error("Not yet implemented")},Zr.prototype.resizeBilinearBackprop=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.resizeNearestNeighbor=function(t,e,n,r){throw new Error("Not yet implemented")},Zr.prototype.resizeNearestNeighborBackprop=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.batchNormalization=function(t,e,n,r,o,i){throw new Error("Not yet implemented")},Zr.prototype.localResponseNormalization4D=function(t,e,n,r,o){throw new Error("Not yet implemented")},Zr.prototype.LRNGrad=function(t,e,n,r,o,i,a){throw new Error("Not yet implemented")},Zr.prototype.multinomial=function(t,e,n,r){throw new Error("Not yet implemented")},Zr.prototype.oneHot=function(t,e,n,r){throw new Error("Not yet implemented")},Zr.prototype.cumsum=function(t,e,n,r){throw new Error("Not yet implemented")},Zr.prototype.nonMaxSuppression=function(t,e,n,r,o){throw new Error("Not yet implemented")},Zr.prototype.fft=function(t){throw new Error("Not yet implemented")},Zr.prototype.ifft=function(t){throw new Error("Not yet implemented")},Zr.prototype.complex=function(t,e){throw new Error("Not yet implemented")},Zr.prototype.real=function(t){throw new Error("Not yet implemented")},Zr.prototype.imag=function(t){throw new Error("Not yet implemented")},Zr.prototype.cropAndResize=function(t,e,n,r,o,i){throw new Error("Not yet implemented")},Zr.prototype.depthToSpace=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.split=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.sparseToDense=function(t,e,n,r){throw new Error("Not yet implemented")},Zr.prototype.diag=function(t){throw new Error("Not yet implemented")},Zr.prototype.fill=function(t,e,n){throw new Error("Not yet implemented.")},Zr.prototype.onesLike=function(t){throw new Error("Not yet implemented")},Zr.prototype.zerosLike=function(t){throw new Error("Not yet implemented")},Zr.prototype.linspace=function(t,e,n){throw new Error("Not yet implemented")},Zr.prototype.dispose=function(){throw new Error("Not yet implemented")},Zr);function Zr(){}function to(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap}function eo(t,e){for(var n=t.length,r=[],o=0;o<n;o++){var i=n-1-o,a=t[i]||1;1<(e[e.length-1-o]||1)&&1===a&&r.unshift(i)}return r}function no(t,e){for(var n=[],r=0;r<e.length;r++){var o=t[t.length-r-1],i=e.length-r-1,a=e[i];(null==o||1===o&&1<a)&&n.unshift(i)}return n}function ro(t,e){for(var n=[],r=Math.max(t.length,e.length),o=0;o<r;o++){var i=t[t.length-o-1];null==i&&(i=1);var a=e[e.length-o-1];if(null==a&&(a=1),1===i)n.unshift(a);else if(1===a)n.unshift(i);else{if(i!==a)throw Error("Operands could not be broadcast together with shapes "+t+" and "+e+".");n.unshift(i)}}return n}function oo(t,e,n,r,o,i,a){void 0===a&&(a="channelsLast");var s,u=co(e),c=u[0],l=u[1];if("channelsLast"===a)s=[c,l,t[3],t[3]];else{if("channelsFirst"!==a)throw new Error("Unknown dataFormat "+a);s=[c,l,t[1],t[1]]}return ao(t,s,n,r,o,i,!1,a)}function io(t,e,n,r,o,i,a){void 0===a&&(a="NDHWC");var s,u,c=lo(e),l=c[0],h=c[1],p=c[2];if("NDHWC"===a)u="channelsLast",s=[l,h,p,t[4],t[4]];else{if("NCDHW"!==a)throw new Error("Unknown dataFormat "+a);u="channelsFirst",s=[l,h,p,t[1],t[1]]}return so(t,s,n,r,o,!1,u,i)}function ao(t,e,n,r,o,m,i,a){void 0===i&&(i=!1),void 0===a&&(a="channelsLast");var s=[-1,-1,-1,-1],u=s[0],c=s[1],l=s[2],h=s[3];if("channelsLast"===a)u=t[0],c=t[1],l=t[2],h=t[3];else{if("channelsFirst"!==a)throw new Error("Unknown dataFormat "+a);u=t[0],h=t[1],c=t[2],l=t[3]}var p,f=e[0],d=e[1],v=e[3],g=co(n),y=g[0],x=g[1],b=co(r),w=b[0],C=b[1],E=ho(f,w),_=ho(d,C),R=function(t,e,n,r,o,i,a){var s,u,c;if("number"==typeof t){s={top:t,bottom:t,left:t,right:t,type:0===t?"VALID":"NUMBER"};var l=function(t,e,n,r,o){null==r&&(r=uo(t,e,n));var i=t[1],a=po((t[0]-e+2*r)/n+1,o);O(B(a),function(){return"The output # of rows ("+a+") must be an integer. Change the stride and/or zero pad parameters"});var s=po((i-e+2*r)/n+1,o);return O(B(s),function(){return"The output # of columns ("+s+") must be an integer. Change the stride and/or zero pad parameters"}),[a,s]}([e,n],i,r,t,m);u=l[0],c=l[1]}else if("same"===t){u=Math.ceil(e/r),c=Math.ceil(n/o);var h=Math.max(0,(u-1)*r+i-e),p=Math.max(0,(c-1)*o+a-n),f=Math.floor(h/2),d=h-f,v=Math.floor(p/2);s={top:f,bottom:d,left:v,right:p-v,type:"SAME"}}else{if("valid"!==t)throw Error("Unknown padding parameter: "+t);s={top:0,bottom:0,left:0,right:0,type:"VALID"},u=Math.ceil((e-i+1)/r),c=Math.ceil((n-a+1)/o)}return{padInfo:s,outHeight:u,outWidth:c}}(o,c,l,y,x,E,_),I=R.padInfo,S=R.outHeight,k=R.outWidth,N=i?v*h:v;return"channelsFirst"===a?p=[u,N,S,k]:"channelsLast"===a&&(p=[u,S,k,N]),{batchSize:u,dataFormat:a,inHeight:c,inWidth:l,inChannels:h,outHeight:S,outWidth:k,outChannels:N,padInfo:I,strideHeight:y,strideWidth:x,filterHeight:f,filterWidth:d,effectiveFilterHeight:E,effectiveFilterWidth:_,dilationHeight:w,dilationWidth:C,inShape:t,outShape:p,filterShape:e}}function so(t,e,n,r,o,i,a,E){void 0===i&&(i=!1),void 0===a&&(a="channelsLast");var s=[-1,-1,-1,-1,-1],u=s[0],c=s[1],l=s[2],h=s[3],p=s[4];if("channelsLast"===a)u=t[0],c=t[1],l=t[2],h=t[3],p=t[4];else{if("channelsFirst"!==a)throw new Error("Unknown dataFormat "+a);u=t[0],p=t[1],c=t[2],l=t[3],h=t[4]}var f,d=e[0],v=e[1],m=e[2],g=e[4],y=lo(n),x=y[0],b=y[1],w=y[2],C=lo(r),_=C[0],R=C[1],I=C[2],S=ho(d,_),k=ho(v,R),N=ho(m,I),A=function(t,e,n,r,o,i,a,s,u,c){var l,h,p,f;if("number"==typeof t){l={top:t,bottom:t,left:t,right:t,front:t,back:t,type:0===t?"VALID":"NUMBER"};var d=function(t,e,n,r,o,i){null==o&&(o=uo(t,e,r));var a=t[1],s=t[2],u=po((t[0]-e+2*o)/r+1,i);O(B(u),function(){return"The output # of depths ("+u+") must be an integer. Change the stride and/or zero pad parameters"});var c=po((a-e+2*o)/r+1,i);O(B(c),function(){return"The output # of rows ("+c+") must be an integer. Change the stride and/or zero pad parameters"});var l=po((s-e+2*o)/r+1,i);return O(B(l),function(){return"The output # of columns ("+l+") must be an integer. Change the stride and/or zero pad parameters"}),[u,c,l,1]}([e,n,r,1],s,0,o,t,E);h=d[0],p=d[1],f=d[2]}else if("same"===t){var v=((h=Math.ceil(e/o))-1)*o+s-e,m=((p=Math.ceil(n/i))-1)*i+u-n,g=((f=Math.ceil(r/a))-1)*a+c-r,y=Math.floor(v/2),x=v-y,b=Math.floor(m/2),w=m-b,C=Math.floor(g/2);l={top:b,bottom:w,left:C,right:g-C,front:y,back:x,type:"SAME"}}else{if("valid"!==t)throw Error("Unknown padding parameter: "+t);l={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},h=Math.ceil((e-s+1)/o),p=Math.ceil((n-u+1)/i),f=Math.ceil((r-c+1)/a)}return{padInfo:l,outDepth:h,outHeight:p,outWidth:f}}(o,c,l,h,x,b,w,S,k,N),T=A.padInfo,D=A.outDepth,F=A.outHeight,M=A.outWidth,P=i?g*p:g;return"channelsFirst"===a?f=[u,P,D,F,M]:"channelsLast"===a&&(f=[u,D,F,M,P]),{batchSize:u,dataFormat:a,inDepth:c,inHeight:l,inWidth:h,inChannels:p,outDepth:D,outHeight:F,outWidth:M,outChannels:P,padInfo:T,strideDepth:x,strideHeight:b,strideWidth:w,filterDepth:d,filterHeight:v,filterWidth:m,effectiveFilterDepth:S,effectiveFilterHeight:k,effectiveFilterWidth:N,dilationDepth:_,dilationHeight:R,dilationWidth:I,inShape:t,outShape:f,filterShape:e}}function uo(t,e,n,r){void 0===r&&(r=1);var o=ho(e,r);return Math.floor((t[0]*(n-1)-n+o)/2)}function co(t){return"number"==typeof t?[t,t,t]:2===t.length?[t[0],t[1],1]:t}function lo(t){return"number"==typeof t?[t,t,t]:t}function ho(t,e){return e<=1?t:t+(t-1)*(e-1)}function po(t,e){if(!e)return t;switch(e){case"round":return Math.round(t);case"ceil":return Math.ceil(t);case"floor":return Math.floor(t);default:throw new Error("Unknown roundingMode "+e)}}function fo(t){var e=co(t),n=e[0],r=e[1],o=e[2];return 1===n&&1===r&&1===o}function vo(t,e){return fo(t)||fo(e)}function mo(t){if("NHWC"===t)return"channelsLast";if("NCHW"===t)return"channelsFirst";throw new Error("Unknown dataFormat "+t)}function go(t,e,n){if("complex64"===e){if("complex64"===t.dtype)return t.clone();var r=Tn(t.shape),o=t.toFloat(),i=n.complex(o,r);return r.dispose(),o.dispose(),i}if(!W(t.dtype,e))return yt.make(t.shape,{dataId:t.dataId},e);if("complex64"===t.dtype){var a=n.real(t);return i=a.cast(e),a.dispose(),i}if("int32"===e)return n.int(t);if("bool"!==e)throw new Error("Error in Cast: failed to cast "+t.dtype+" to "+e);var s=En(0,t.dtype);return i=n.notEqual(t,s),s.dispose(),i}function yo(t,e){return yt.make(e,{dataId:t.dataId},t.dtype)}function xo(t,e,n){var r=(e-t)/(n-1),o=Z(n,"float32");o[0]=t;for(var i=1;i<o.length;i++)o[i]=o[i-1]+r;return _n(o,"float32")}var bo=Object.freeze({castTensor:go,reshapeTensor:yo,linspaceImpl:xo,upcastType:Pt,axesAreInnerMostDims:sn,combineLocations:un,computeOutAndReduceShapes:cn,expandShapeToKeepDim:ln,assertAxesAreInnerMostDims:hn,getAxesPermutation:pn,getUndoAxesPermutation:fn,getInnerMostAxes:dn,getBroadcastDims:eo,getReductionAxes:no,assertAndGetBroadcastShape:ro,assertParamsConsistent:vn,computeOutShape:mn,computePool2DInfo:oo,computePool3DInfo:io,computeConv2DInfo:ao,computeConv3DInfo:so,computeDefaultPad:uo,tupleValuesAreOne:fo,eitherStridesOrDilationsAreOne:vo,convertConv2DDataFormat:mo});function wo(t,e){if(t.length!==e.length)throw new Error("Cannot merge real and imag arrays of different lengths. real:"+t.length+", imag: "+e.length+".");for(var n=new Float32Array(2*t.length),r=0;r<n.length;r+=2)n[r]=t[r/2],n[r+1]=e[r/2];return n}function Co(t,e){return{real:t[2*e],imag:t[2*e+1]}}function Eo(t,e,n,r,o){for(var i=Array.from(e).map(function(t,e){return{score:t,boxIndex:e}}).filter(function(t){return t.score>o}).sort(function(t,e){return e.score-t.score}),a=[],s=0;s<i.length;s++){var u=i[s],c=u.score,l=u.boxIndex;if(c<o)break;for(var h=!1,p=a.length-1;0<=p;--p)if(_o(t,l,a[p])>=r){h=!0;break}if(!h&&(a.push(l),a.length>=n))break}return _n(a,"int32")}function _o(t,e,n){var r=t.subarray(4*e,4*e+4),o=t.subarray(4*n,4*n+4),i=Math.min(r[0],r[2]),a=Math.min(r[1],r[3]),s=Math.max(r[0],r[2]),u=Math.max(r[1],r[3]),c=Math.min(o[0],o[2]),l=Math.min(o[1],o[3]),h=Math.max(o[0],o[2]),p=Math.max(o[1],o[3]),f=(s-i)*(u-a),d=(h-c)*(p-l);if(f<=0||d<=0)return 0;var v=Math.max(i,c),m=Math.max(a,l),g=Math.min(s,h),y=Math.min(u,p),x=Math.max(g-v,0)*Math.max(y-m,0);return x/(f+d-x)}function Ro(n,t,r){var o=new Array(n.rank).fill(0),i=n.shape.slice();return t.map(function(t){i[r]=t;var e=n.slice(o,i);return o[r]+=t,e})}function Io(t,e){for(var n=new Array(t.rank),r=0;r<n.length;r++)n[r]=t.shape[r]*e[r];var o=or(n,t.dtype);for(r=0;r<o.values.length;++r){for(var i=o.indexToLoc(r),a=new Array(t.rank),s=0;s<a.length;s++)a[s]=i[s]%t.shape[s];var u=t.locToIndex(a);o.values[r]=t.values[u]}return o.toTensor()}function So(t,e,n,r){for(var o=e[e.length-1],i=[t.length/o,o],a=i[0],s=i[1],u=A(n,a*r),c=A("int32",a*r),l=0;l<a;l++){for(var h=l*s,p=t.subarray(h,h+s),f=[],d=0;d<p.length;d++)f.push({value:p[d],index:d});f.sort(function(t,e){return e.value-t.value});var v=l*r,m=u.subarray(v,v+r),g=c.subarray(v,v+r);for(d=0;d<r;d++)m[d]=f[d].value,g[d]=f[d].index}var y=e.slice();return y[y.length-1]=r,[wn(u,y,n),wn(c,y,"int32")]}function ko(t,e){for(var n=[],r=0;r<e.length;r++)e[r]&&n.push(r);var o=or(t,"int32"),i=or([n.length,t.length],"int32");for(r=0;r<n.length;r++){var a=o.indexToLoc(n[r]),s=r*t.length;i.values.set(a,s)}return i.toTensor()}var No=function(t,e){this.outputShape=[],this.outputShape=t,this.variableNames=e.map(function(t,e){return"T"+e});var n=[];this.variableNames.forEach(function(t){n.push("float v"+t+" = get"+t+"AtOutCoords();")});var r=this.variableNames.map(function(t){return"v"+t}).join(" + ");this.userCode="\n void main() {\n "+n.join("\n ")+"\n\n float result = "+r+";\n setOutput(result);\n }\n "},Ao=function(t,e){this.outputShape=[],this.usesPackedTextures=!0,this.outputShape=t,this.variableNames=e.map(function(t,e){return"T"+e});var n=[];this.variableNames.forEach(function(t){n.push("vec4 v"+t+" = get"+t+"AtOutCoords();")});var r=this.variableNames.map(function(t){return"v"+t}).join(" + ");this.userCode="\n void main() {\n "+n.join("\n ")+"\n\n vec4 result = "+r+";\n setOutput(result);\n }\n "},To=function(t,e,n){this.variableNames=["A"];var r=t.windowSize,o=t.batchSize,i=t.inSize,a=Math.ceil(i/r);n||this.variableNames.push("bestIndicesA"),this.outputShape=[o,a];var s="max"===e?">":"<",u=n?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * "+r+";\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < "+r+"; i++) {\n int inIdx = "+u+";\n float candidate = getA(batch, inIdx);\n if (candidate "+s+" bestValue) {\n bestValue = candidate;\n bestIndex = inIdx;\n }\n }\n setOutput(float(bestIndex));\n }\n "};function Do(e,t){return["x","y","z","w","u","v"].slice(0,t).map(function(t){return e+"."+t})}function Fo(t,e){return 1===e?[t]:Do(t,e)}function Mo(){var t,e,n,r,o,i,a,s,u,c;return c=2===_.getNumber("WEBGL_VERSION")?(t="#version 300 es",n="out",r=e="in",o="texture",i="outputColor",a="out vec4 outputColor;",s="\n bool isnan_custom(float val) {\n return (val > 0. || val < 0. || val == 0.) ? false : true;\n }\n ",u="","\n #define round(value) newRound(value)\n int newRound(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 newRound(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n "):(e="attribute",r=n="varying",o="texture2D",i="gl_FragColor",a=t="",s="\n bool isnan_custom(float val) {\n return (val > 0. || val < 1. || val == 0.) ? false : true;\n }\n ",u="\n uniform float INFINITY;\n\n bool isinf(float val) {\n return abs(val) == INFINITY;\n }\n bvec4 isinf(vec4 val) {\n return equal(abs(val), vec4(INFINITY));\n }\n ","\n int round(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 round(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n "),{version:t,attribute:e,varyingVs:n,varyingFs:r,texture2D:o,output:i,defineOutput:a,defineSpecialNaN:s,defineSpecialInf:u,defineRound:c}}function Po(n,t,r){void 0===r&&(r="index");var o=X(t);return o.map(function(t,e){return"int "+n[e]+" = "+r+" / "+t+"; "+(e===o.length-1?"int "+n[e+1]+" = "+r+" - "+n[e]+" * "+t:"index -= "+n[e]+" * "+t)+";"}).join("")}function Oo(t){var e=X(t).map(function(t){return t.toString()});return"\n int getFlatIndex(ivec3 coords) {\n return coords.x * "+e[0]+" + coords.y * "+e[1]+" + coords.z;\n }\n"}var Bo="\n const float FLOAT_MAX = 1.70141184e38;\n const float FLOAT_MIN = 1.17549435e-38;\n\n lowp vec4 encode_float(highp float v) {\n if (isnan(v)) {\n return vec4(255, 255, 255, 255);\n }\n\n highp float av = abs(v);\n\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\n }\n\n highp vec4 c = vec4(0,0,0,0);\n\n highp float e = floor(log2(av));\n highp float m = exp2(fract(log2(av))) - 1.0;\n\n c[2] = floor(128.0 * m);\n m -= c[2] / 128.0;\n c[1] = floor(32768.0 * m);\n m -= c[1] / 32768.0;\n c[0] = floor(8388608.0 * m);\n\n highp float ebias = e + 127.0;\n c[3] = floor(ebias / 2.0);\n ebias -= c[3] * 2.0;\n c[2] += floor(ebias) * 128.0;\n\n c[3] += 128.0 * step(0.0, -v);\n\n return c / 255.0;\n }\n";function Lo(t,e,n,r){var o=[];t.forEach(function(t){var e=L(t.shapeInfo.logicalShape);t.shapeInfo.isUniform?o.push("uniform float "+t.name+(1<e?"["+e+"]":"")+";"):(o.push("uniform sampler2D "+t.name+";"),o.push("uniform int offset"+t.name+";"))});var i,a,s,u=o.join("\n"),c=t.map(function(t){return function(t,e,n){void 0===n&&(n=!1);var r="";r+=n?function f(t){var e,n,r;switch(t.shapeInfo.logicalShape.length){case 0:return e=t.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1),r=Mo(),"\n vec4 "+n+"() {\n return "+r.texture2D+"("+e+", halfCR);\n }\n ";case 1:return function(t){var e=t.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1),r=t.shapeInfo.texShape,o=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],i=Mo();return"\n vec4 "+n+"(int index) {\n vec2 uv = packedUVfrom1D(\n "+o[0]+", "+o[1]+", index);\n return "+i.texture2D+"("+e+", uv);\n }\n "}(t);case 2:return function(t){var e=t.shapeInfo.logicalShape,n=t.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),o=t.shapeInfo.texShape,i=o[0],a=o[1],s=Mo();if(null!=o&&k(e,o))return"\n vec4 "+r+"(int row, int col) {\n vec2 uv = (vec2(col, row) + halfCR) / vec2("+a+".0, "+i+".0);\n\n return "+s.texture2D+"("+n+", uv);\n }\n ";var u=[Math.ceil(o[0]/2),Math.ceil(o[1]/2)],c=Math.ceil(e[1]/2);return"\n vec4 "+r+"(int row, int col) {\n vec2 uv = packedUVfrom2D("+c+", "+u[0]+", "+u[1]+", row, col);\n return "+s.texture2D+"("+n+", uv);\n }\n "}(t);case 3:return function(t){var e=t.shapeInfo.logicalShape,n=t.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),o=t.shapeInfo.texShape,i=[Math.ceil(o[0]/2),Math.ceil(o[1]/2)];if(1===e[0]){var a=e.slice(1),s=Vo(t,a);return"\n "+f(s)+"\n vec4 "+r+"(int b, int row, int col) {\n return "+r+"("+Go(["b","row","col"],[1,2])+");\n }\n "}var u=i[0],c=i[1],l=Math.ceil(e[2]/2),h=l*Math.ceil(e[1]/2),p=Mo();return"\n vec4 "+r+"(int b, int row, int col) {\n vec2 uv = packedUVfrom3D(\n "+u+", "+c+", "+h+", "+l+", b, row, col);\n return "+p.texture2D+"("+n+", uv);\n }\n "}(t);default:return function(t){for(var e=t.shapeInfo.logicalShape,n=e.length,r=t.name,o="get"+r.charAt(0).toUpperCase()+r.slice(1),i=t.shapeInfo.texShape,a=[Math.ceil(i[0]/2),Math.ceil(i[1]/2)],s=a[0],u=a[1],c=Math.ceil(e[n-1]/2),l=c*Math.ceil(e[n-2]/2),h="int b, int row, int col",p="b * "+l+" + (row / 2) * "+c+" + (col / 2)",f=2;f<n-1;f++)h="int b"+f+", "+h,l*=e[n-f-1],p="b"+f+" * "+l+" + "+p;var d=Mo();return"\n vec4 "+o+"("+h+") {\n int index = "+p+";\n int texR = index / "+u+";\n int texC = index - texR * "+u+";\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+u+", "+s+");\n return "+d.texture2D+"("+r+", uv);\n }\n "}(t)}}(t):function y(t){var e=t.shapeInfo.logicalShape;switch(e.length){case 0:return function(t){var e=t.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1);if(t.shapeInfo.isUniform)return"float "+n+"() {return "+e+";}";var r=t.shapeInfo.texShape,o=r[0],i=r[1];if(1===o&&1===i)return"\n float "+n+"() {\n return sampleTexture("+e+", halfCR);\n }\n ";var a=t.shapeInfo.texShape,s=a[0],u=a[1],c=Wo(e);return"\n float "+n+"() {\n vec2 uv = uvFromFlat("+s+", "+u+", "+c+");\n return sampleTexture("+e+", uv);\n }\n "}(t);case 1:return function(t){var e=t.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1);if(t.shapeInfo.isUniform)return"\n float "+n+"(int index) {\n "+zo(t)+"\n }\n ";var r=t.shapeInfo.texShape,o=r[0],i=r[1];if(1===i&&1===o)return"\n float "+n+"(int index) {\n return sampleTexture("+e+", halfCR);\n }\n ";var a=Wo(e);return 1===i?"\n float "+n+"(int index) {\n vec2 uv = vec2(0.5, (float(index + "+a+") + 0.5) / "+o+".0);\n return sampleTexture("+e+", uv);\n }\n ":1===o?"\n float "+n+"(int index) {\n vec2 uv = vec2((float(index + "+a+") + 0.5) / "+i+".0, 0.5);\n return sampleTexture("+e+", uv);\n }\n ":"\n float "+n+"(int index) {\n vec2 uv = uvFromFlat("+o+", "+i+", index + "+a+");\n return sampleTexture("+e+", uv);\n }\n "}(t);case 2:return function(t){var e=t.shapeInfo.logicalShape,n=t.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),o=t.shapeInfo.texShape;if(null!=o&&k(e,o)){var i=o[0],a=o[1];return"\n float "+r+"(int row, int col) {\n vec2 uv = (vec2(col, row) + halfCR) / vec2("+a+".0, "+i+".0);\n return sampleTexture("+n+", uv);\n }\n "}var s=N(e),u=s.newShape,c=s.keptDims,l=u;if(l.length<e.length){var h=Vo(t,l);return"\n "+y(h)+"\n float "+r+"(int row, int col) {\n return "+r+"("+Go(["row","col"],c)+");\n }\n "}if(t.shapeInfo.isUniform)return"\n float "+r+"(int row, int col) {\n int index = round(dot(vec2(row, col), vec2("+e[1]+", 1)));\n "+zo(t)+"\n }\n ";var p=o[0],f=o[1],d=Wo(n);return 1===f?"\n float "+r+"(int row, int col) {\n float index = dot(vec3(row, col, "+d+"), vec3("+e[1]+", 1, 1));\n vec2 uv = vec2(0.5, (index + 0.5) / "+p+".0);\n return sampleTexture("+n+", uv);\n }\n ":1===p?"\n float "+r+"(int row, int col) {\n float index = dot(vec3(row, col, "+d+"), vec3("+e[1]+", 1, 1));\n vec2 uv = vec2((index + 0.5) / "+f+".0, 0.5);\n return sampleTexture("+n+", uv);\n }\n ":"\n float "+r+"(int row, int col) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+e[1]+" + col + "+d+";\n vec2 uv = uvFromFlat("+p+", "+f+", index);\n return sampleTexture("+n+", uv);\n }\n"}(t);case 3:return function(t){var e=t.shapeInfo.logicalShape,n=t.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),o=e[1]*e[2],i=e[2],a=N(e),s=a.newShape,u=a.keptDims,c=s;if(c.length<e.length){var l=Vo(t,c);return"\n "+y(l)+"\n float "+r+"(int row, int col, int depth) {\n return "+r+"("+Go(["row","col","depth"],u)+");\n }\n "}if(t.shapeInfo.isUniform)return"\n float "+r+"(int row, int col, int depth) {\n int index = round(dot(vec3(row, col, depth),\n vec3("+o+", "+i+", 1)));\n "+zo(t)+"\n }\n ";var h=t.shapeInfo.texShape,p=h[0],f=h[1],d=t.shapeInfo.flatOffset;if(f===o&&null==d)return"\n float "+r+"(int row, int col, int depth) {\n float texR = float(row);\n float texC = dot(vec2(col, depth), vec2("+i+", 1));\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+f+".0, "+p+".0);\n return sampleTexture("+n+", uv);\n }\n ";if(f===i&&null==d)return"\n float "+r+"(int row, int col, int depth) {\n float texR = dot(vec2(row, col), vec2("+e[1]+", 1));\n float texC = float(depth);\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+f+".0, "+p+".0);\n return sampleTexture("+n+", uv);\n }\n ";var v=Wo(n);return"\n float "+r+"(int row, int col, int depth) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+o+" + col * "+i+" + depth + "+v+";\n vec2 uv = uvFromFlat("+p+", "+f+", index);\n return sampleTexture("+n+", uv);\n }\n "}(t);case 4:return function(t){var e=t.shapeInfo.logicalShape,n=t.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),o=e[3],i=e[2]*o,a=e[1]*i,s=N(e),u=s.newShape,c=s.keptDims;if(u.length<e.length){var l=Vo(t,u);return"\n "+y(l)+"\n float "+r+"(int row, int col, int depth, int depth2) {\n return "+r+"("+Go(["row","col","depth","depth2"],c)+");\n }\n "}if(t.shapeInfo.isUniform)return"\n float "+r+"(int row, int col, int depth, int depth2) {\n int index = round(dot(vec4(row, col, depth, depth2),\n vec4("+a+", "+i+", "+o+", 1)));\n "+zo(t)+"\n }\n ";var h=t.shapeInfo.flatOffset,p=t.shapeInfo.texShape,f=p[0],d=p[1];if(d===a&&null==h)return"\n float "+r+"(int row, int col, int depth, int depth2) {\n float texR = float(row);\n float texC =\n dot(vec3(col, depth, depth2),\n vec3("+i+", "+o+", 1));\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+d+".0, "+f+".0);\n return sampleTexture("+n+", uv);\n }\n ";if(d===o&&null==h)return"\n float "+r+"(int row, int col, int depth, int depth2) {\n float texR = dot(vec3(row, col, depth),\n vec3("+e[1]*e[2]+", "+e[2]+", 1));\n float texC = float(depth2);\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+d+".0, "+f+".0);\n return sampleTexture("+n+", uv);\n }\n ";var v=Wo(n);return"\n float "+r+"(int row, int col, int depth, int depth2) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+a+" + col * "+i+" +\n depth * "+o+" + depth2;\n vec2 uv = uvFromFlat("+f+", "+d+", index + "+v+");\n return sampleTexture("+n+", uv);\n }\n "}(t);case 5:return function(t){var e=t.shapeInfo.logicalShape,n=t.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),o=e[4],i=e[3]*o,a=e[2]*i,s=e[1]*a,u=N(e),c=u.newShape,l=u.keptDims;if(c.length<e.length){var h=Vo(t,c);return"\n "+y(h)+"\n float "+r+"(int row, int col, int depth, int depth2, int depth3) {\n return "+r+"("+Go(["row","col","depth","depth2","depth3"],l)+");\n }\n "}if(t.shapeInfo.isUniform)return"\n float "+r+"(int row, int col, int depth, int depth2, int depth3) {\n float index = dot(\n vec4(row, col, depth, depth2),\n vec4("+s+", "+a+", "+i+", "+o+")) +\n depth3;\n "+zo(t)+"\n }\n ";var p=t.shapeInfo.flatOffset,f=t.shapeInfo.texShape,d=f[0],v=f[1];if(v===s&&null==p)return"\n float "+r+"(int row, int col, int depth, int depth2, int depth3) {\n int texR = row;\n float texC = dot(vec4(col, depth, depth2, depth3),\n vec4("+a+", "+i+", "+o+", 1));\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+v+".0, "+d+".0);\n return sampleTexture("+n+", uv);\n }\n ";if(v===o&&null==p)return"\n float "+r+"(int row, int col, int depth, int depth2, int depth3) {\n float texR = dot(\n vec4(row, col, depth, depth2),\n vec4("+e[1]*e[2]*e[3]+",\n "+e[2]*e[3]+", "+e[3]+", 1));\n int texC = depth3;\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+v+".0, "+d+".0);\n return sampleTexture("+n+", uv);\n }\n ";var m=Wo(n);return"\n float "+r+"(int row, int col, int depth, int depth2, int depth3) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+s+" + col * "+a+" + depth * "+i+" +\n depth2 * "+o+" + depth3 + "+m+";\n vec2 uv = uvFromFlat("+d+", "+v+", index);\n return sampleTexture("+n+", uv);\n }\n "}(t);case 6:return function(t){var e=t.shapeInfo.logicalShape,n=t.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),o=N(e),i=o.newShape,a=o.keptDims;if(i.length<e.length){var s=Vo(t,i);return"\n "+y(s)+"\n float "+r+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n return "+r+"("+Go(["row","col","depth","depth2","depth3","depth4"],a)+");\n }\n "}var u=e[5],c=e[4]*u,l=e[3]*c,h=e[2]*l,p=e[1]*h;if(t.shapeInfo.isUniform)return"\n float "+r+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n int index = round(dot(\n vec4(row, col, depth, depth2),\n vec4("+p+", "+h+", "+l+", "+c+")) +\n dot(\n vec2(depth3, depth4),\n vec2("+u+", 1)));\n "+zo(t)+"\n }\n ";var f=t.shapeInfo.flatOffset,d=t.shapeInfo.texShape,v=d[0],m=d[1];if(m===p&&null==f)return"\n float "+r+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n int texR = row;\n float texC = dot(vec4(col, depth, depth2, depth3),\n vec4("+h+", "+l+", "+c+", "+u+")) +\n float(depth4);\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+m+".0, "+v+".0);\n return sampleTexture("+n+", uv);\n }\n ";if(m===u&&null==f)return"\n float "+r+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n float texR = dot(vec4(row, col, depth, depth2),\n vec4("+e[1]*e[2]*e[3]*e[4]+",\n "+e[2]*e[3]*e[4]+",\n "+e[3]*e[4]+",\n "+e[4]+")) + float(depth3);\n int texC = depth4;\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+m+".0, "+v+".0);\n return sampleTexture("+n+", uv);\n }\n ";var g=Wo(n);return"\n float "+r+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+p+" + col * "+h+" + depth * "+l+" +\n depth2 * "+c+" + depth3 * "+u+" + depth4 + "+g+";\n vec2 uv = uvFromFlat("+v+", "+m+", index);\n return sampleTexture("+n+", uv);\n }\n "}(t);default:throw new Error(e.length+"-D input sampling is not yet supported")}}(t);var o=t.shapeInfo.logicalShape,i=e.logicalShape;return o.length<=i.length&&(r+=n?function(t,e){var n,r=t.name,o=r.charAt(0).toUpperCase()+r.slice(1),i="get"+o+"AtOutCoords",a=t.shapeInfo.logicalShape.length,s=e.logicalShape.length,u=eo(t.shapeInfo.logicalShape,e.logicalShape),c=Uo(s),l=s-a,h=["x","y","z","w","u","v"];n=0===a?"":s<2&&1<=u.length?"coords = 0;":u.map(function(t){return"coords."+h[t+l]+" = 0;"}).join("\n");var p;p=s<2&&0<a?"coords":t.shapeInfo.logicalShape.map(function(t,e){return"coords."+h[e+l]}).join(", ");var f="return outputValue;",d=1===L(t.shapeInfo.logicalShape),v=1===L(e.logicalShape);if(1!==a||d||v){if(d&&!v)f=1===s?"\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n ":"\n return vec4(outputValue.x);\n ";else if(u.length){var m=a-2,g=a-1;-1<u.indexOf(m)&&-1<u.indexOf(g)?f="return vec4(outputValue.x);":-1<u.indexOf(m)?f="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":-1<u.indexOf(g)&&(f="return vec4(outputValue.xx, outputValue.zz);")}}else f="\n return vec4(outputValue.xy, outputValue.xy);\n ";return"\n vec4 "+i+"() {\n "+c+" coords = getOutputCoords();\n "+n+"\n vec4 outputValue = get"+o+"("+p+");\n "+f+"\n }\n "}(t,e):function(t,e){var n=t.name,r=n.charAt(0).toUpperCase()+n.slice(1),o="get"+r+"AtOutCoords",i=e.texShape,a=t.shapeInfo.texShape,s=t.shapeInfo.logicalShape.length,u=e.logicalShape.length;if(!t.shapeInfo.isUniform&&s===u&&null==t.shapeInfo.flatOffset&&k(a,i))return"\n float "+o+"() {\n return sampleTexture("+n+", resultUV);\n }\n ";var c=Uo(u),l=eo(t.shapeInfo.logicalShape,e.logicalShape),h=u-s,p=["x","y","z","w","u","v"];return"\n float "+o+"() {\n "+c+" coords = getOutputCoords();\n "+(0===s?"":u<2&&1<=l.length?"coords = 0;":l.map(function(t){return"coords."+p[t+h]+" = 0;"}).join("\n"))+"\n return get"+r+"("+(u<2&&0<s?"coords":t.shapeInfo.logicalShape.map(function(t,e){return"coords."+p[e+h]}).join(", "))+");\n }\n "}(t,e)),r}(t,e,r)}).join("\n"),l=e.texShape,h=Mo(),p="\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return "+h.texture2D+"(textureSampler, uv).r;\n }\n ",f=(s=h).version+"\n precision highp float;\n precision highp int;\n precision highp sampler2D;\n "+s.varyingFs+" vec2 resultUV;\n "+s.defineOutput+"\n const vec2 halfCR = vec2(0.5, 0.5);\n\n struct ivec5\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n };\n\n struct ivec6\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n int v;\n };\n\n uniform float NAN;\n #define isnan(value) isnan_custom(value)\n "+s.defineSpecialNaN+"\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n }\n\n "+s.defineSpecialInf+"\n "+s.defineRound+"\n\n int imod(int x, int y) {\n return x - y * (x / y);\n }\n\n int idiv(int a, int b, float sign) {\n int res = a / b;\n int mod = imod(a, b);\n if (sign < 0. && mod != 0) {\n res -= 1;\n }\n return res;\n }\n\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n #define HASHSCALE1 443.8975\n float random(float seed){\n vec2 p = resultUV * seed;\n vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n \nvec2 uvFromFlat(int texNumR, int texNumC, int index) {\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\nvec2 packedUVfrom1D(int texNumR, int texNumC, int index) {\n int texelIndex = index / 2;\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n\n \nvec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,\n int texNumC, int row, int col) {\n int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n\n \nvec2 packedUVfrom3D(int texNumR, int texNumC,\n int texelsInBatch, int texelsInLogicalRow, int b,\n int row, int col) {\n int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n\n ";return a=e.isPacked?(i=function(t,e){switch(t.length){case 0:return"\n int getOutputCoords() {\n return 0;\n }\n ";case 1:return n=e,1===(r=[Math.ceil(n[0]/2),Math.ceil(n[1]/2)])[0]?"\n int getOutputCoords() {\n return 2 * int(resultUV.x * "+r[1]+".0);\n }\n ":1===r[1]?"\n int getOutputCoords() {\n return 2 * int(resultUV.y * "+r[0]+".0);\n }\n ":"\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+r[0]+", "+r[1]+"));\n return 2 * (resTexRC.x * "+r[1]+" + resTexRC.y);\n }\n ";case 2:return function(t,e){var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(k(t,e))return"\n ivec2 getOutputCoords() {\n return 2 * ivec2(resultUV.yx * vec2("+n[0]+", "+n[1]+"));\n }\n ";var r=Math.ceil(t[1]/2);return"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n\n int index = resTexRC.x * "+n[1]+" + resTexRC.y;\n int r = 2 * (index / "+r+");\n int c = imod(index, "+r+") * 2;\n\n return ivec2(r, c);\n }\n "}(t,e);case 3:return o=t,i=e,a=[Math.ceil(i[0]/2),Math.ceil(i[1]/2)],u=(s=Math.ceil(o[2]/2))*Math.ceil(o[1]/2),"\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+a[0]+", "+a[1]+"));\n int index = resTexRC.x * "+a[1]+" + resTexRC.y;\n\n int b = index / "+u+";\n index -= b * "+u+";\n\n int r = 2 * (index / "+s+");\n int c = imod(index, "+s+") * 2;\n\n return ivec3(b, r, c);\n }\n ";default:return function(t,e){for(var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],r=Math.ceil(t[t.length-1]/2),o=r*Math.ceil(t[t.length-2]/2),i=o,a="",s="b, r, c",u=2;u<t.length-1;u++)a="\n int b"+u+" = index / "+(i*=t[t.length-u-1])+";\n index -= b"+u+" * "+i+";\n "+a,s="b"+u+", "+s;return"\n ivec"+t.length+" getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n int index = resTexRC.x * "+n[1]+" + resTexRC.y;\n\n "+a+"\n\n int b = index / "+o+";\n index -= b * "+o+";\n\n int r = 2 * (index / "+r+");\n int c = imod(index, "+r+") * 2;\n\n return ivec"+t.length+"("+s+");\n }\n "}(t,e)}var n,r,o,i,a,s,u}(e.logicalShape,l),"\n void setOutput(vec4 val) {\n "+h.output+" = val;\n }\n "):(i=function(t,e){switch(t.length){case 0:return"\n int getOutputCoords() {\n return 0;\n }\n ";case 1:return 1===(l=e)[0]?"\n int getOutputCoords() {\n return int(resultUV.x * "+l[1]+".0);\n }\n ":1===l[1]?"\n int getOutputCoords() {\n return int(resultUV.y * "+l[0]+".0);\n }\n ":"\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+l[0]+", "+l[1]+"));\n return resTexRC.x * "+l[1]+" + resTexRC.y;\n }\n ";case 2:return k(u=t,c=e)?"\n ivec2 getOutputCoords() {\n return ivec2(resultUV.yx * vec2("+c[0]+", "+c[1]+"));\n }\n ":1===u[1]?"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+c[0]+", "+c[1]+"));\n int index = resTexRC.x * "+c[1]+" + resTexRC.y;\n return ivec2(index, 0);\n }\n ":1===u[0]?"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+c[0]+", "+c[1]+"));\n int index = resTexRC.x * "+c[1]+" + resTexRC.y;\n return ivec2(0, index);\n }\n ":"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+c[0]+", "+c[1]+"));\n int index = resTexRC.x * "+c[1]+" + resTexRC.y;\n int r = index / "+u[1]+";\n int c = index - r * "+u[1]+";\n return ivec2(r, c);\n }\n ";case 3:return h=e,p=Po(["r","c","d"],t),"\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+h[0]+", "+h[1]+"));\n int index = resTexRC.x * "+h[1]+" + resTexRC.y;\n "+p+"\n return ivec3(r, c, d);\n }\n ";case 4:return a=e,s=Po(["r","c","d","d2"],t),"\n ivec4 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+a[0]+", "+a[1]+"));\n int index = resTexRC.x * "+a[1]+" + resTexRC.y;\n "+s+"\n return ivec4(r, c, d, d2);\n }\n ";case 5:return o=e,i=Po(["r","c","d","d2","d3"],t),"\n ivec5 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx * vec2("+o[0]+",\n "+o[1]+"));\n\n int index = resTexRC.x * "+o[1]+" + resTexRC.y;\n\n "+i+"\n\n ivec5 outShape = ivec5(r, c, d, d2, d3);\n return outShape;\n }\n ";case 6:return n=e,r=Po(["r","c","d","d2","d3","d4"],t),"\n ivec6 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n int index = resTexRC.x * "+n[1]+" + resTexRC.y;\n\n "+r+"\n\n ivec6 result = ivec6(r, c, d, d2, d3, d4);\n return result;\n }\n ";default:throw new Error(t.length+"-D output sampling is not yet supported")}var n,r,o,i,a,s,u,c,l,h,p}(e.logicalShape,l),"\n void setOutput(float val) {\n "+h.output+" = vec4(val, 0, 0, 0);\n }\n "),r&&(f+="\n float getChannel(vec4 frag, vec2 innerDims) {\n vec2 modCoord = mod(innerDims, 2.);\n return modCoord.x == 0. ?\n (modCoord.y == 0. ? frag.r : frag.g) :\n (modCoord.y == 0. ? frag.b : frag.a);\n }\n float getChannel(vec4 frag, int dim) {\n float modCoord = mod(float(dim), 2.);\n return modCoord == 0. ? frag.r : frag.g;\n }\n"),[f,p,a,u,i,c,n].join("\n")}function Wo(t){return"offset"+t}function zo(t){var e=t.name,n=L(t.shapeInfo.logicalShape);return n<2?"return "+e+";":"\n for (int i = 0; i < "+n+"; i++) {\n if (i == index) {\n return "+e+"[i];\n }\n }\n "}function Uo(t){if(t<=1)return"int";if(2===t)return"ivec2";if(3===t)return"ivec3";if(4===t)return"ivec4";if(5===t)return"ivec5";if(6===t)return"ivec6";throw Error("GPU for rank "+t+" is not yet supported")}function Vo(t,e){var n=JSON.parse(JSON.stringify(t));return n.shapeInfo.logicalShape=e,n}function Go(e,t){return t.map(function(t){return e[t]}).join(", ")}var Ho=function(t,e,n,r){this.variableNames=["A"],this.usesPackedTextures=!0,O(2<t.length,function(){return"Packed arg"+(n.charAt(0).toUpperCase()+n.slice(1))+" supports only inputs with rank above 2."});var o=t[t.length-1],i=Math.ceil(o/e);this.outputShape=t.slice(0,-1),1<i&&this.outputShape.push(i),r||this.variableNames.push("bestIndicesA");var a,s,u=this.outputShape,c=u.length,l=Uo(c),h=Fo("coords",c);if(1===i){var p=Uo(s=c+1);a="\n "+p+" sourceLocR = "+p+"("+h.join()+", 0);\n ++"+h[c-1]+";\n "+p+" sourceLocG = "+p+"("+h.join()+", 0);\n ++"+h[c-2]+";\n "+p+" sourceLocA = "+p+"("+h.join()+", 0);\n --"+h[c-1]+";\n "+p+" sourceLocB = "+p+"("+h.join()+", 0);\n --"+h[c-2]+";"}else a="\n "+l+" sourceLocR = coords;\n ++"+h[(s=c)-1]+";\n "+l+" sourceLocG = coords;\n ++"+h[c-2]+";\n "+l+" sourceLocA = coords;\n --"+h[c-1]+";\n "+l+" sourceLocB = coords;\n --"+h[c-2]+";";var f=["x","y","z","w","u","v"].slice(0,s),d="."+f[s-1],v=f.map(function(t){return"int "+t}),m=Fo("sourceLocR",s-1).concat("inIdx.r"),g=Fo("sourceLocG",s-1).concat("inIdx.g"),y=Fo("sourceLocB",s-1).concat("inIdx.b"),x=Fo("sourceLocA",s-1).concat("inIdx.a"),b="max"===n?"greaterThan":"lessThan",w=r?"":"\n inIdx = round(vec4(getBestIndicesAChannel("+m.join()+"),\n getBestIndicesAChannel("+g.join()+"),\n getBestIndicesAChannel("+y.join()+"),\n getBestIndicesAChannel("+x.join()+")));",C="vec4(\n getAChannel("+m.join()+"),\n hasNextCol ? getAChannel("+g.join()+") : 0.,\n hasNextRow ? getAChannel("+y.join()+") : 0.,\n hasNextRow && hasNextCol ? getAChannel("+x.join()+") : 0.)",E=r?"":"\n float getBestIndicesAChannel("+v.join()+") {\n return getChannel(getBestIndicesA("+f.join()+"),\n vec2("+f.slice(-2).join()+"));\n }";this.userCode="\n float getAChannel("+v.join()+") {\n return getChannel(getA("+f.join()+"),\n vec2("+f.slice(-2).join()+"));\n }\n "+E+"\n void main() {\n "+l+" coords = getOutputCoords();\n bool hasNextCol = "+h[c-1]+" < "+(u[c-1]-1)+";\n bool hasNextRow = "+h[c-2]+" < "+(u[c-2]-1)+";\n "+a+"\n ivec4 srcIdx = ivec4(sourceLocR"+d+", sourceLocG"+d+",\n sourceLocB"+d+", sourceLocA"+d+") * "+e+";\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = "+C+";\n\n for (int i = 0; i < "+e+"; i++) {\n inIdx = srcIdx;\n "+w+"\n vec4 candidate = "+C+";\n bvec4 nan = isnan(candidate);\n bvec4 replace = bvec4(\n vec4("+b+"(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n bestValue = vec4(replace.x ? candidate.x : bestValue.x,\n replace.y ? candidate.y : bestValue.y,\n replace.z ? candidate.z : bestValue.z,\n replace.w ? candidate.w : bestValue.w);\n bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n srcIdx++;\n }\n setOutput(bestIndex);\n }\n "},jo=function(t){this.variableNames=["dy"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,i=t.dilationHeight,a=t.dilationWidth,s=t.effectiveFilterHeight,u=t.effectiveFilterWidth,c=s-1-t.padInfo.top,l=u-1-t.padInfo.left,h=1/(e*n);this.userCode="\n const ivec2 pads = ivec2("+c+", "+l+");\n const float avgMultiplier = float("+h+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+s+";\n wR += "+i+") {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+u+";\n wC+= "+a+") {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n setOutput(dotProd);\n }\n "},qo=function(t){this.variableNames=["dy"],this.outputShape=t.inShape;var e=t.filterDepth,n=t.filterHeight,r=t.filterWidth,o=t.strideDepth,i=t.strideHeight,a=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterDepth,h=t.effectiveFilterHeight,p=t.effectiveFilterWidth,f=l-1-t.padInfo.front,d=h-1-t.padInfo.top,v=p-1-t.padInfo.left,m=1/(e*n*r);this.userCode="\n const ivec3 pads = ivec3("+f+", "+d+", "+v+");\n const float avgMultiplier = float("+m+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < "+l+";\n wD += "+s+") {\n float dyD = float(dyDCorner + wD) / "+o+".0;\n\n if (dyD < 0.0 || dyD >= "+t.outDepth+".0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < "+h+";\n wR += "+u+") {\n float dyR = float(dyRCorner + wR) / "+i+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+p+";\n wC += "+c+") {\n float dyC = float(dyCCorner + wC) / "+a+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n }\n setOutput(dotProd);\n }\n "},$o=function(t,e,n,r,o,i){this.outputShape=[],this.variableNames=["x","mean","variance"],ro(t,e),ro(t,n);var a="0.0";null!=r&&(ro(t,r),this.variableNames.push("offset"),a="getOffsetAtOutCoords()");var s="1.0";null!=o&&(ro(t,o),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=t,this.userCode="\n void main() {\n float x = getXAtOutCoords();\n float mean = getMeanAtOutCoords();\n float variance = getVarianceAtOutCoords();\n float offset = "+a+";\n float scale = "+s+";\n float inv = scale * inversesqrt(variance + float("+i+"));\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n }\n "},Ko=function(t,e,n,r,o,i){this.usesPackedTextures=!0,this.variableNames=["x","mean","variance"],ro(t,e),ro(t,n);var a="vec4(0.0)";null!=r&&(ro(t,r),this.variableNames.push("offset"),a="getOffsetAtOutCoords()");var s="vec4(1.0)";null!=o&&(ro(t,o),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=t,this.userCode="\n void main() {\n vec4 offset = "+a+";\n vec4 scale = "+s+";\n\n vec4 x = getXAtOutCoords();\n vec4 mean = getMeanAtOutCoords();\n vec4 variance = getVarianceAtOutCoords();\n\n vec4 inv = scale * inversesqrt(variance + vec4("+i+"));\n\n setOutput((x - mean) * inv + offset);\n }\n "},Xo=function(t,e,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=ro(e,n),this.userCode="\n float binaryOpComplex(\n float areal, float aimag, float breal, float bimag) {\n "+t+"\n }\n\n void main() {\n float areal = getARealAtOutCoords();\n float aimag = getAImagAtOutCoords();\n float breal = getBRealAtOutCoords();\n float bimag = getBImagAtOutCoords();\n setOutput(binaryOpComplex(areal, aimag, breal, bimag));\n }\n "},Yo="return a + b;",Jo="return a - b;",Qo="return a * b;",Zo="return (a < 0.) ? b * a : a;",ti=function(t,e,n){this.variableNames=["A","B"],this.outputShape=ro(e,n),this.userCode="\n float binaryOperation(float a, float b) {\n "+t+"\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n "},ei="\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n",ni=function(t,e,n,r){void 0===r&&(r=!1),this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.usesPackedTextures=!0,this.outputShape=ro(e,n);var o=this.outputShape.length,i="";if(r)if(0===o||1===L(this.outputShape))i="\n result.y = 0.;\n result.z = 0.;\n result.w = 0.;\n ";else if(i="\n "+Uo(o)+" coords = getOutputCoords();\n ",1===o)i+="\n result.y = (coords + 1) >= "+this.outputShape[0]+" ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n ";else{var a=Fo("coords",o);i+="\n bool nextRowOutOfBounds =\n ("+a[o-2]+" + 1) >= "+this.outputShape[o-2]+";\n bool nextColOutOfBounds =\n ("+a[o-1]+" + 1) >= "+this.outputShape[o-1]+";\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n "}this.userCode="\n vec4 binaryOperation(vec4 a, vec4 b) {\n "+t+"\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n\n vec4 result = binaryOperation(a, b);\n "+i+"\n\n setOutput(result);\n }\n "},ri=(wi.prototype.getCustomSetupFunc=function(n,r){var o=this;return function(t,e){null==o.minLoc&&(o.minLoc=t.getUniformLocationNoThrow(e,"minVal"),o.maxLoc=t.getUniformLocationNoThrow(e,"maxVal")),t.gl.uniform1f(o.minLoc,n),t.gl.uniform1f(o.maxLoc,r)}},wi),oi=(bi.prototype.getCustomSetupFunc=function(n,r){var o=this;return function(t,e){null==o.minLoc&&(o.minLoc=t.getUniformLocationNoThrow(e,"minVal"),o.maxLoc=t.getUniformLocationNoThrow(e,"maxVal")),t.gl.uniform1f(o.minLoc,n),t.gl.uniform1f(o.maxLoc,r)}},bi),ii=function(t){this.variableNames=["real","imag"],this.outputShape=t,this.userCode="\n void main() {\n float re = abs(getRealAtOutCoords());\n float im = abs(getImagAtOutCoords());\n float mx = max(re, im);\n\n // sadly the length function in glsl is not underflow-safe\n // (at least not on Intel GPUs). So the safe solution is\n // to ensure underflow-safety in all cases.\n setOutput(\n mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n );\n }\n "},ai=function(t){this.outputShape=[],this.outputShape=mn(t,1),this.variableNames=t.map(function(t,e){return"T"+e});var e=new Array(t.length-1);e[0]=t[0][1];for(var n=1;n<e.length;n++)e[n]=e[n-1]+t[n][1];var r=["if (yC < "+e[0]+") setOutput(getT0(yR, yC));"];for(n=1;n<e.length;n++){var o=e[n-1];r.push("else if (yC < "+e[n]+") setOutput(getT"+n+"(yR, yC-"+o+"));")}var i=e.length,a=e[e.length-1];r.push("else setOutput(getT"+i+"(yR, yC-"+a+"));"),this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int yR = coords.x;\n int yC = coords.y;\n\n "+r.join("\n ")+"\n }\n "},si=function(t,e){this.usesPackedTextures=!0,this.outputShape=[],this.outputShape=mn(t,e);var n=this.outputShape,r=n.length,o=Uo(r),i=Fo("coords",r),a=["x","y","z","w","u","v"].slice(0,r);this.variableNames=t.map(function(t,e){return"T"+e});var s=new Array(t.length-1);s[0]=t[0][e];for(var u=1;u<s.length;u++)s[u]=s[u-1]+t[u][e];var c=a[e],l="vec2("+a.slice(-2).join()+")",h=a.join(),p="if ("+c+" < "+s[0]+")\n return getChannel(getT0("+h+"), "+l+");";for(u=1;u<s.length;u++){var f=s[u-1];p+="\n else if ("+c+" < "+s[u]+") {\n "+c+" -= "+f+";\n return getChannel(getT"+u+"("+h+"), "+l+");\n }"}var d=s.length;p+="\n else {\n "+c+" -= "+s[s.length-1]+";\n return getChannel(getT"+d+"("+h+"), "+l+");\n }",this.userCode="\n float getValue("+a.map(function(t){return"int "+t})+") {\n "+p+"\n }\n\n void main() {\n "+o+" coords = getOutputCoords();\n vec4 result = vec4(getValue("+i+"), 0., 0., 0.);\n if (++"+i[r-1]+" < "+n[r-1]+") {\n result.g = getValue("+i+");\n }\n if (++"+i[r-2]+" < "+n[r-2]+") {\n result.a = getValue("+i+");\n }\n if ("+i[r-2]+" < "+n[r-2]+" &&\n --"+i[r-1]+" < "+n[r-1]+") {\n result.b = getValue("+i+");\n }\n setOutput(result);\n }\n "},ui=function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideHeight,n=t.strideWidth,r=t.padInfo.top,o=t.padInfo.left,i="channelsLast"===t.dataFormat;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int d2 = coords.w;\n\n // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+e+" - "+r+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+n+" - "+o+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n if ("+i+") {\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n } else {\n float dyValue = getDy(b, d2, yR, yC);\n float xValue = getX(b, d1, xR, xC);\n dotProd += (xValue * dyValue);\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n "},ci=function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,i="channelsLast"===t.dataFormat,a=e-1-t.padInfo.top,s=n-1-t.padInfo.left,u=i?1:2,c=i?2:3,l=i?3:1;this.userCode="\n const ivec2 pads = ivec2("+a+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords["+l+"];\n\n ivec2 dyCorner = ivec2(coords["+u+"], coords["+c+"]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+e+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+e+" - 1 - wR;\n\n for (int wC = 0; wC < "+n+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+n+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+t.outChannels+"; d2++) {\n\n if ("+i+") {\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n } else {\n float xValue = getDy(batch, d2, idyR, idyC);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n "},li=function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideDepth,n=t.strideHeight,r=t.strideWidth,o=t.padInfo.front,i=t.padInfo.top,a=t.padInfo.left;this.userCode="\n void main() {\n ivec5 coords = getOutputCoords();\n int wF = coords.x;\n int wR = coords.y;\n int wC = coords.z;\n int d1 = coords.w;\n int d2 = coords.u;\n\n float dotProd = 0.0;\n\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yF = 0; yF < "+t.outDepth+"; yF++) {\n int xF = wF + yF * "+e+" - "+o+";\n\n if (xF < 0 || xF >= "+t.inDepth+") {\n continue;\n }\n\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+n+" - "+i+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+r+" - "+a+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yF, yR, yC, d2);\n float xValue = getX(b, xF, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n "},hi=function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterDepth,n=t.filterHeight,r=t.filterWidth,o=t.strideDepth,i=t.strideHeight,a=t.strideWidth,s=e-1-t.padInfo.front,u=n-1-t.padInfo.top,c=r-1-t.padInfo.left;this.userCode="\n const ivec3 pads = ivec3("+s+", "+u+", "+c+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.u;\n\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyFCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n float dotProd = 0.0;\n for (int wF = 0; wF < "+e+"; wF++) {\n float dyF = float(dyFCorner + wF) / "+o+".0;\n\n if (dyF < 0.0 || dyF >= "+t.outDepth+".0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = "+e+" - 1 - wF;\n\n for (int wR = 0; wR < "+n+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+i+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+n+" - 1 - wR;\n\n for (int wC = 0; wC < "+r+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+a+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+r+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+t.outChannels+"; d2++) {\n float xValue = getDy(batch, idyF, idyR, idyC, d2);\n float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutput(dotProd);\n }\n "},pi=function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideHeight,n=t.strideWidth,r=t.padInfo.top,o=t.padInfo.left,i=t.outChannels/t.inChannels;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int dm = coords.w;\n int d2 = d1 * "+i+" + dm;\n\n float dotProd = 0.0;\n\n // TO DO: Vec4 over the batch size\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+e+" - "+r+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+n+" - "+o+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n setOutput(dotProd);\n }\n "},fi=function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,i=e-1-t.padInfo.top,a=n-1-t.padInfo.left,s=t.outChannels/t.inChannels;this.userCode="\n const ivec2 pads = ivec2("+i+", "+a+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n ivec2 dyCorner = coords.yz - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n float dotProd = 0.0;\n\n for (int wR = 0; wR < "+e+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+e+" - 1 - wR;\n\n for (int wC = 0; wC < "+n+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+n+" - 1 - wC;\n\n // TO DO: Vec4 over the channelMul\n for (int dm = 0; dm < "+s+"; dm++) {\n int d2 = d1 * "+s+" + dm;\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutput(dotProd);\n }\n "},di=function(t,e,n,r){void 0===e&&(e=!1),void 0===n&&(n=null),void 0===r&&(r=!1),this.variableNames=["x","W"],this.outputShape=t.outShape;var o=t.padInfo.top,i=t.padInfo.left,a=t.strideHeight,s=t.strideWidth,u=t.dilationHeight,c=t.dilationWidth,l=t.filterHeight,h=t.filterWidth,p=4*Math.floor(t.inChannels/4),f=t.inChannels%4,d="channelsLast"===t.dataFormat,v=d?1:2,m=d?2:3,g=d?3:1,y="",x="";n&&(y=r?"float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n "+n+"\n }":"\n float activation(float x) {\n "+n+"\n }\n ",x="result = activation(result);");var b=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+y+"\n\n const ivec2 strides = ivec2("+a+", "+s+");\n const ivec2 pads = ivec2("+o+", "+i+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d2 = coords["+g+"];\n\n ivec2 xRCCorner =\n ivec2(coords["+v+"], coords["+m+"]) * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+l+"; wR++) {\n int xR = xRCorner + wR * "+u+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+h+"; wC++) {\n int xC = xCCorner + wC * "+c+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+p+"; d1 += 4) {\n vec4 wValues = vec4(\n getW(wR, wC, d1, d2),\n getW(wR, wC, d1 + 1, d2),\n getW(wR, wC, d1 + 2, d2),\n getW(wR, wC, d1 + 3, d2)\n );\n\n if ("+d+") {\n vec4 xValues = vec4(\n getX(batch, xR, xC, d1),\n getX(batch, xR, xC, d1 + 1),\n getX(batch, xR, xC, d1 + 2),\n getX(batch, xR, xC, d1 + 3)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec4 xValues = vec4(\n getX(batch, d1, xR, xC),\n getX(batch, d1 + 1, xR, xC),\n getX(batch, d1 + 2, xR, xC),\n getX(batch, d1 + 3, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n\n if ("+(1==f)+") {\n\n if ("+d+") {\n dotProd +=\n getX(batch, xR, xC, "+p+") *\n getW(wR, wC, "+p+", d2);\n } else {\n dotProd +=\n getX(batch, "+p+", xR, xC) *\n getW(wR, wC, "+p+", d2);\n }\n\n } else if ("+(2==f)+") {\n vec2 wValues = vec2(\n getW(wR, wC, "+p+", d2),\n getW(wR, wC, "+p+" + 1, d2)\n );\n\n if ("+d+") {\n vec2 xValues = vec2(\n getX(batch, xR, xC, "+p+"),\n getX(batch, xR, xC, "+p+" + 1)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec2 xValues = vec2(\n getX(batch, "+p+", xR, xC),\n getX(batch, "+p+" + 1, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n } else if ("+(3==f)+") {\n vec3 wValues = vec3(\n getW(wR, wC, "+p+", d2),\n getW(wR, wC, "+p+" + 1, d2),\n getW(wR, wC, "+p+" + 2, d2)\n );\n\n if ("+d+") {\n vec3 xValues = vec3(\n getX(batch, xR, xC, "+p+"),\n getX(batch, xR, xC, "+p+" + 1),\n getX(batch, xR, xC, "+p+" + 2)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec3 xValues = vec3(\n getX(batch, "+p+", xR, xC),\n getX(batch, "+p+" + 1, xR, xC),\n getX(batch, "+p+" + 2, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n }\n }\n }\n\n float result = dotProd;\n "+b+"\n "+x+"\n setOutput(result);\n }\n "},vi=function(t){this.variableNames=["x","W"],this.outputShape=t.outShape;var e=t.padInfo.front,n=t.padInfo.top,r=t.padInfo.left,o=t.strideDepth,i=t.strideHeight,a=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.filterDepth,h=t.filterHeight,p=t.filterWidth,f=4*Math.floor(t.inChannels/4),d=t.inChannels%4;this.userCode="\n const ivec3 strides = ivec3("+o+", "+i+", "+a+");\n const ivec3 pads = ivec3("+e+", "+n+", "+r+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d2 = coords.u;\n\n ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xFCorner = xFRCCorner.x;\n int xRCorner = xFRCCorner.y;\n int xCCorner = xFRCCorner.z;\n\n // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n // y(yF, yR, yC, d2). ? = to be determined. : = across all\n // values in that axis.\n float dotProd = 0.0;\n for (int wF = 0; wF < "+l+"; wF++) {\n int xF = xFCorner + wF * "+s+";\n\n if (xF < 0 || xF >= "+t.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+h+"; wR++) {\n int xR = xRCorner + wR * "+u+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+p+"; wC++) {\n int xC = xCCorner + wC * "+c+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+f+"; d1 += 4) {\n vec4 xValues = vec4(\n getX(batch, xF, xR, xC, d1),\n getX(batch, xF, xR, xC, d1 + 1),\n getX(batch, xF, xR, xC, d1 + 2),\n getX(batch, xF, xR, xC, d1 + 3)\n );\n vec4 wValues = vec4(\n getW(wF, wR, wC, d1, d2),\n getW(wF, wR, wC, d1 + 1, d2),\n getW(wF, wR, wC, d1 + 2, d2),\n getW(wF, wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if ("+(1==d)+") {\n dotProd +=\n getX(batch, xF, xR, xC, "+f+") *\n getW(wF, wR, wC, "+f+", d2);\n } else if ("+(2==d)+") {\n vec2 xValues = vec2(\n getX(batch, xF, xR, xC, "+f+"),\n getX(batch, xF, xR, xC, "+f+" + 1)\n );\n vec2 wValues = vec2(\n getW(wF, wR, wC, "+f+", d2),\n getW(wF, wR, wC, "+f+" + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if ("+(3==d)+") {\n vec3 xValues = vec3(\n getX(batch, xF, xR, xC, "+f+"),\n getX(batch, xF, xR, xC, "+f+" + 1),\n getX(batch, xF, xR, xC, "+f+" + 2)\n );\n vec3 wValues = vec3(\n getW(wF, wR, wC, "+f+", d2),\n getW(wF, wR, wC, "+f+" + 1, d2),\n getW(wF, wR, wC, "+f+" + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n "},mi=function(t){this.variableNames=["x","W"],this.outputShape=t.outShape;var e=t.inHeight,n=t.inWidth,r=t.padInfo.top,o=t.padInfo.left,i=t.strideHeight,a=t.strideWidth,s=t.dilationHeight,u=t.dilationWidth,c=t.filterHeight,l=t.filterWidth,h=t.outChannels/t.inChannels;this.userCode="\n const ivec2 strides = ivec2("+i+", "+a+");\n const ivec2 pads = ivec2("+r+", "+o+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n ivec2 xRCCorner = coords.yz * strides - pads;\n int d2 = coords.w;\n int d1 = d2 / "+h+";\n int q = d2 - d1 * "+h+";\n\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.\n for (int wR = 0; wR < "+c+"; wR++) {\n int xR = xRCorner + wR * "+s+";\n\n if (xR < 0 || xR >= "+e+") {\n continue;\n }\n\n for (int wC = 0; wC < "+l+"; wC++) {\n int xC = xCCorner + wC * "+u+";\n\n if (xC < 0 || xC >= "+n+") {\n continue;\n }\n\n float xVal = getX(batch, xR, xC, d1);\n float wVal = getW(wR, wC, d1, q);\n dotProd += xVal * wVal;\n }\n }\n setOutput(dotProd);\n }\n "},gi=function(t){this.variableNames=["x","W"],this.usesPackedTextures=!0,this.outputShape=t.outShape;for(var e=t.inHeight,n=t.inWidth,r=t.padInfo.top,o=t.padInfo.left,i=t.strideHeight,a=t.strideWidth,s=t.dilationHeight,u=t.dilationWidth,c=t.filterHeight,l=t.filterWidth,h=l,p="int xR; int xC; int xCOffset;",f=0;f<c;f++)for(var d=0;d<l;d++)p+="\n vec4 xTexelR"+f+"C"+2*d+" = vec4(0.);\n vec4 wR"+f+"C"+d+" = vec4(0.);\n vec4 xR"+f+"C"+d+" = vec4(0.);";for(f=0;f<c;f++)for(var v=0;v<h;v++){if(p+="\n xR = xRCorner + "+f*s+";\n xC = xCCorner + "+(d=2*v)*u+";\n ",1===a){if(d<l&&(p+=o%2==1?"\n xCOffset = xC + 1;\n if(xR >= 0 && xR < "+e+" && xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+f+"C"+d+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+f+"C"+d+" = vec4(0.);\n }\n\n xCOffset = xC + 1 - 2;\n if(xR >= 0 && xR < "+e+" && xCOffset >= 0 && xCOffset < "+n+") {\n vec4 previous = getX(batch, xR, xCOffset, d1);\n xR"+f+"C"+d+" = vec4(previous.zw, xTexelR"+f+"C"+d+".xy);\n } else {\n xR"+f+"C"+d+" = vec4(0, 0, xTexelR"+f+"C"+d+".xy);\n }\n ":"\n if(xR >= 0 && xR < "+e+" && xC >= 0 && xC < "+n+") {\n xTexelR"+f+"C"+d+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+f+"C"+d+" = vec4(0.);\n }\n\n xR"+f+"C"+d+" = xTexelR"+f+"C"+d+";\n ",d+1<l)){var m=o%2==0?g(u):u;u%2==0&&o%2==1||u%2!=0&&o%2!=1?(p+="\n xCOffset = xC + "+o%2+" + "+m+";\n\n if(xR >= 0 && xR < "+e+" &&\n xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+f+"C"+(d+2)+" = getX(batch, xR, xCOffset, d1);\n }\n ",1<u&&(p+="\n xCOffset -= 2;\n if(xR >= 0 && xR < "+e+" &&\n xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+f+"C"+d+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+f+"C"+d+" = vec4(0.);\n }\n "),p+="\n xR"+f+"C"+(d+1)+" = vec4(\n xTexelR"+f+"C"+d+".zw, xTexelR"+f+"C"+(d+2)+".xy);\n "):p+="\n xCOffset = xC + "+m+";\n\n if(xR >= 0 && xR < "+e+" &&\n xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+f+"C"+(d+2)+" = getX(batch, xR, xCOffset, d1);\n }\n\n xR"+f+"C"+(d+1)+" = xTexelR"+f+"C"+(d+2)+";\n "}}else d<l&&(p+="\n if(xR >= 0 && xR < "+e+") {\n ",o%2==1?(p+="\n xCOffset = xC + 1 - "+a+";\n if(xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+f+"C"+d+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+f+"C"+d+" = vec4(0.);\n }\n\n if(xC + 1 >= 0 && xC + 1 < "+n+") {\n xTexelR"+f+"C"+(d+2)+" = getX(batch, xR, xC + 1, d1);\n } else {\n xTexelR"+f+"C"+(d+2)+" = vec4(0.);\n }\n\n xR"+f+"C"+d+" = vec4(\n xTexelR"+f+"C"+d+".zw, xTexelR"+f+"C"+(d+2)+".zw);\n ",d+1<l&&(p+="\n vec4 final = vec4(0.);\n xCOffset = xC + 1 + "+a+";\n if(xCOffset >= 0 && xCOffset < "+n+") {\n final = getX(batch, xR, xCOffset, d1);\n }\n xR"+f+"C"+(d+1)+" = vec4(xTexelR"+f+"C"+(d+2)+".xy, final.xy);\n ")):(p+="\n if(xC >= 0 && xC < "+n+") {\n xTexelR"+f+"C"+d+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+f+"C"+d+" = vec4(0.);\n }\n\n xCOffset = xC + "+a+";\n if(xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+f+"C"+(d+2)+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+f+"C"+(d+2)+" = vec4(0.);\n }\n\n xR"+f+"C"+d+" = vec4(\n xTexelR"+f+"C"+d+".xy, xTexelR"+f+"C"+(d+2)+".xy);\n ",d+1<l&&(p+="\n xR"+f+"C"+(d+1)+" = vec4(\n xTexelR"+f+"C"+d+".zw, xTexelR"+f+"C"+(d+2)+".zw);\n ")),p+="}");d<l&&(p+="\n vec4 wTexelR"+f+"C"+d+" = getW("+f+", "+d+", d1, q);\n wR"+f+"C"+d+" = vec4(wTexelR"+f+"C"+d+".xz, wTexelR"+f+"C"+d+".xz);\n ",d+1<l&&(p+="\n vec4 wTexelR"+f+"C"+(d+1)+" = getW("+f+", "+(d+1)+", d1, q);\n wR"+f+"C"+(d+1)+" =\n vec4(wTexelR"+f+"C"+(d+1)+".xz, wTexelR"+f+"C"+(d+1)+".xz);"))}for(f=0;f<c;f++)for(d=0;d<l;d++)p+="result += xR"+f+"C"+d+" * wR"+f+"C"+d+";";this.userCode="\n const ivec2 strides = ivec2("+i+", "+a+");\n const ivec2 pads = ivec2("+r+", "+o+");\n\n void main() {\n\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n ivec2 xRCCorner = coords.yz * strides - pads;\n int d2 = coords.w;\n int d1 = d2;\n int q = 0;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n vec4 result = vec4(0.);\n\n "+p+"\n\n setOutput(result);\n }\n "},yi=function(t,e,n,r,o){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];var i=t[0],a=t[1],s=t[2],u=t[3],c=e[0],l=n[0],h=n[1];this.outputShape=[c,l,h,u];var p="bilinear"===r?1:0,f=[a-1+".0",s-1+".0"],d=f[0],v=f[1],m=1<l?[""+(a-1)/(l-1),"(y2-y1) * height_ratio","y1*"+d+" + float(y)*(height_scale)"]:["0.0","0.0","0.5 * (y1+y2) * "+d],g=m[0],y=m[1],x=m[2],b=1<h?[""+(s-1)/(h-1),"(x2-x1) * width_ratio","x1*"+v+" + float(x)*(width_scale)"]:["0.0","0.0","0.5 * (x1+x2) * "+v],w=b[0],C=b[1],E=b[2];this.userCode="\n const float height_ratio = float("+g+");\n const float width_ratio = float("+w+");\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int y = coords[1];\n int x = coords[2];\n int d = coords[3];\n\n // get box vals\n float y1 = getBoxes(b,0);\n float x1 = getBoxes(b,1);\n float y2 = getBoxes(b,2);\n float x2 = getBoxes(b,3);\n\n // get image in batch index\n int bInd = round(getBoxInd(b));\n if(bInd < 0 || bInd >= "+i+") {\n return;\n }\n\n float height_scale = "+y+";\n float width_scale = "+C+";\n\n float in_y = "+x+";\n if( in_y < 0.0 || in_y > "+d+" ) {\n setOutput(float("+o+"));\n return;\n }\n float in_x = "+E+";\n if( in_x < 0.0 || in_x > "+v+" ) {\n setOutput(float("+o+"));\n return;\n }\n\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\n if("+p+" == 1) {\n // Compute the four integer indices.\n ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n float top = topLeft + (topRight - topLeft) * fracCR.x;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n float newValue = top + (bottom - top) * fracCR.y;\n setOutput(newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestCR = ivec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutput(newValue);\n }\n }\n "},xi=function(t,e,n){this.variableNames=["x"];var r=(this.outputShape=t).length,o=t[t.length-1],i=n?"<":">";this.userCode="\n int getIndex(int i) {\n "+(n?"return "+o+" -i - 1;":"return i;")+"\n }\n\n void main() {\n "+Uo(r)+" coords = getOutputCoords();\n int end = "+Ci(r,"coords")+";\n float val = 0.0;\n for (int i = "+o+" - 1; i >= 0; i -= 1) {\n int idx = getIndex(i);\n if (idx "+i+" end) {\n continue;\n }\n if (idx == end && "+e+") {\n continue;\n }\n "+Ci(r,"coords")+" = idx;\n val += getX("+function(t,e){if(1===r)return e;if(2===r)return e+".x, "+e+".y";if(3===r)return"coords.x, coords.y, coords.z";if(4===r)return"coords.x, coords.y, coords.z, coords.w";throw Error("Cumulative sum for rank "+r+" is not yet supported")}(0,"coords")+");\n }\n setOutput(val);\n }\n "};function bi(t){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=t,this.userCode="\n uniform float minVal;\n uniform float maxVal;\n\n void main() {\n vec4 value = getAAtOutCoords();\n\n if (any(isnan(value))) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, vec4(minVal), vec4(maxVal)));\n }\n "}function wi(t){this.variableNames=["A"],this.outputShape=t,this.userCode="\n uniform float minVal;\n uniform float maxVal;\n\n void main() {\n float value = getAAtOutCoords();\n if (isnan(value)) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, minVal, maxVal));\n }\n "}function Ci(t,e){if(1===t)return""+e;if(2===t)return e+".y";if(3===t)return e+".z";if(4===t)return e+".w";throw Error("Cumulative sum for rank "+t+" is not yet supported")}var Ei=function(t,e){this.variableNames=["A"];var n=Mo();this.outputShape=t,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+Po(["r","c","d"],t)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = 4 * (resTexRC.x * "+e[1]+" + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getA(rc.x, rc.y, rc.z);\n }\n\n "+n.output+" = result;\n }\n "},_i=function(t,e){this.variableNames=["A"],this.usesPackedTextures=!0;var n=Mo();this.outputShape=t,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+Po(["r","c","d"],t)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = 4 * (resTexRC.x * "+e[1]+" + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\n }\n\n "+n.output+" = result;\n }\n "},Ri=(Bi.prototype.getHeightCoordString=function(){return"NHWC"===this.dataFormat?"coords[1]":"coords[2]"},Bi.prototype.getWidthCoordString=function(){return"NHWC"===this.dataFormat?"coords[2]":"coords[3]"},Bi.prototype.getDepthCoordString=function(){return"NHWC"===this.dataFormat?"coords[3]":"coords[1]"},Bi.prototype.getOutputDepthSize=function(){return"NHWC"===this.dataFormat?this.outputShape[3]:this.outputShape[1]},Bi.prototype.getInputSamplingString=function(){return"NHWC"===this.dataFormat?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"},Bi),Ii=function(t){this.variableNames=["X"],this.outputShape=[t,t],this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;\n setOutput(val);\n }\n "},Si=function(t){this.variableNames=["A"];var e=Mo();this.outputShape=t,this.userCode="\n "+Bo+"\n\n void main() {\n float x = getAAtOutCoords();\n "+e.output+" = encode_float(x);\n }\n "},ki=function(t){this.variableNames=["A"],this.usesPackedTextures=!0;var e=Mo();this.outputShape=t,this.userCode="\n "+Bo+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n "+e.output+" = encode_float(x);\n }\n "},Ni=function(t,e,n){void 0===n&&(n=!1),this.variableNames=["A"];var r=Mo(),o=e[0],i=e[1];this.outputShape=t;var a="result";n&&(a="floor(result * 255. + 0.5)"),this.userCode="\n "+Oo(t)+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n\n int flatIndex = getFlatIndex(coords);\n int offset = imod(flatIndex, 4);\n\n flatIndex = idiv(flatIndex, 4, 1.);\n \n int r = flatIndex / "+i+";\n int c = imod(flatIndex, "+i+");\n vec2 uv = (vec2(c, r) + halfCR) / vec2("+i+".0, "+o+".0);\n vec4 values = "+r.texture2D+"(A, uv);\n\n float result;\n\n if(offset == 0) {\n result = values[0];\n } else if(offset == 1) {\n result = values[1];\n } else if(offset == 2) {\n result = values[2];\n } else {\n result = values[3];\n }\n\n "+r.output+" = vec4("+a+", 0., 0., 0.);\n }\n "},Ai=function(t,e,n){void 0===n&&(n=!1),this.variableNames=["A"];var r=Mo(),o=e[0],i=e[1];this.outputShape=t;var a="",s="result";n&&(s="floor(result * 255. + 0.5)");for(var u=0;u<=1;u++)for(var c=0;c<=1;c++){var l=2*u+c;a+="\n localCoords = coords;\n if(localCoords[2] + "+c+" < "+t[2]+") {\n localCoords[2] += "+c+";\n if(localCoords[1] + "+u+" < "+t[1]+") {\n localCoords[1] += "+u+";\n\n flatIndex = getFlatIndex(localCoords);\n offset = imod(flatIndex, 4);\n \n flatIndex = idiv(flatIndex, 4, 1.);\n\n r = flatIndex / "+i+";\n c = imod(flatIndex, "+i+");\n uv = (vec2(c, r) + halfCR) / vec2("+i+".0, "+o+".0);\n values = "+r.texture2D+"(A, uv);\n\n if(offset == 0) {\n result["+l+"] = values[0];\n } else if(offset == 1) {\n result["+l+"] = values[1];\n } else if(offset == 2) {\n result["+l+"] = values[2];\n } else {\n result["+l+"] = values[3];\n }\n }\n }\n "}this.userCode="\n "+Oo(t)+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n\n vec4 result = vec4(0.);\n int flatIndex, r, c, offset;\n ivec3 localCoords;\n vec2 uv;\n vec4 values;\n \n "+a+"\n\n "+r.output+" = "+s+";\n }\n "},Ti=function(t,e,n){this.variableNames=["real","imag"];var r=e[1];this.outputShape=e;var o=n?"2.0 * "+Math.PI:"-2.0 * "+Math.PI,i=n?r+".0":"1.0";this.userCode="\n const float exponentMultiplier = "+o+";\n\n float unaryOpComplex(float real, float expR, float imag, float expI) {\n "+t+"\n }\n\n float mulMatDFT(int batch, int index) {\n float indexRatio = float(index) / float("+r+");\n float exponentMultiplierTimesIndexRatio =\n exponentMultiplier * indexRatio;\n\n float result = 0.0;\n\n for (int i = 0; i < "+r+"; i++) {\n // x = (-2|2 * PI / N) * index * i;\n float x = exponentMultiplierTimesIndexRatio * float(i);\n float expR = cos(x);\n float expI = sin(x);\n float real = getReal(batch, i);\n float imag = getImag(batch, i);\n\n result +=\n unaryOpComplex(real, expR, imag, expI) / "+i+";\n }\n\n return result;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n setOutput(mulMatDFT(coords[0], coords[1]));\n }\n "},Di=(Oi.prototype.getCustomSetupFunc=function(n){var r=this;return function(t,e){null==r.valueLoc&&(r.valueLoc=t.getUniformLocationNoThrow(e,"value")),t.gl.uniform1f(r.valueLoc,n)}},Oi),Fi=function(t){this.variableNames=["A"];var e=Mo(),n=t[0],r=t[1];this.outputShape=t,this.userCode="\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+r+".0, "+n+".0);\n\n vec4 values = "+e.texture2D+"(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n setOutput(floor(value * 255.0 + 0.5));\n }\n "},Mi=function(t){this.variableNames=["A"];var e=Mo(),n=t[0],r=t[1];this.outputShape=t,this.userCode="\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n\n vec4 result = vec4(0.);\n\n for(int row=0; row<=1; row++) {\n for(int col=0; col<=1; col++) {\n texC = coords[1] + row;\n depth = coords[2] + col;\n\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+r+".0, "+n+".0);\n vec4 values = "+e.texture2D+"(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n result[row * 2 + col] = floor(value * 255.0 + 0.5);\n }\n }\n\n "+e.output+" = result;\n }\n "},Pi=function(t,e,n){this.variableNames=["A","indices"];var r=t.slice();r[n]=e,this.outputShape=r,this.rank=r.length;var o=Uo(this.rank),i=function(t,e){var n=t.length;if(4<n)throw Error("Gather for rank "+n+" is not yet supported");if(1===n)return"int(getIndices(resRC))";for(var r=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],i=0;i<t.length;i++)i===e?o.push("int(getIndices("+r[i]+"))"):o.push(""+r[i]);return o.join()}(t,n);this.userCode="\n void main() {\n "+o+" resRC = getOutputCoords();\n setOutput(getA("+i+"));\n }\n "};function Oi(t,e){this.outputShape=[],this.variableNames=["x"],this.outputShape=t,this.userCode="\n uniform float value;\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n "}function Bi(t,e,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=t,this.blockSize=e,this.dataFormat=n,this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int h = "+this.getHeightCoordString()+";\n int w = "+this.getWidthCoordString()+";\n int d = "+this.getDepthCoordString()+";\n\n int in_h = h / "+e+";\n int offset_h = imod(h, "+e+");\n int in_w = w / "+e+";\n int offset_w = imod(w, "+e+");\n int offset_d = (offset_h * "+e+" + offset_w) *\n "+this.getOutputDepthSize()+";\n int in_d = d + offset_d;\n\n float result = "+this.getInputSamplingString()+";\n setOutput(result);\n }\n "}var Li=function(t,e,n){this.sliceDim=t,this.strides=e,this.variableNames=["x","indices"],this.outputShape=n;var r=Uo(e.length),o=Uo(n.length),i=1<this.sliceDim?"strides[j]":"strides";this.userCode="\n "+r+" strides = "+r+"("+this.strides+");\n void main() {\n "+o+" coords = getOutputCoords();\n int flattenIndex = 0;\n for (int j = 0; j < "+this.sliceDim+"; j++) {\n int index = round(getIndices(coords[0], j));\n flattenIndex += index * "+i+";\n }\n setOutput(getX(flattenIndex, coords[1]));\n }\n "};function Wi(t,e){var n=Mo();return he(t,e,n.version+"\n precision highp float;\n "+n.attribute+" vec3 clipSpacePos;\n "+n.attribute+" vec2 uv;\n "+n.varyingVs+" vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }")}function zi(t,e){return xe(t,e,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}function Ui(t,e){return be(t,e,new Uint16Array([0,1,2,2,1,3]))}function Vi(t,e,n,r,o,i,a){Ce(n,r);var s=we(t,e),u=t.TEXTURE_2D;return se(t,e,function(){return t.bindTexture(u,s)}),se(t,e,function(){return t.texParameteri(u,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE)}),se(t,e,function(){return t.texParameteri(u,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)}),se(t,e,function(){return t.texParameteri(u,t.TEXTURE_MIN_FILTER,t.NEAREST)}),se(t,e,function(){return t.texParameteri(u,t.TEXTURE_MAG_FILTER,t.NEAREST)}),se(t,e,function(){return t.texImage2D(u,0,o,n,r,0,i,a,null)}),se(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)}),s}function Gi(t,e,n,r,o){var i=re(n,r);return Vi(t,e,i[0],i[1],o.internalFormatFloat,o.textureFormatFloat,t.FLOAT)}function Hi(t,e,n,r,o){var i=re(n,r);return Vi(t,e,i[0],i[1],o.internalFormatHalfFloat,o.textureFormatFloat,o.textureTypeHalfFloat)}function ji(t,e,n,r,o){var i=re(n,r);return Vi(t,e,i[0],i[1],t.RGBA,t.RGBA,t.UNSIGNED_BYTE)}function qi(t,e,n,r,o){var i=ie(n,r);return Vi(t,e,i[0],i[1],o.internalFormatPackedFloat,t.RGBA,t.FLOAT)}function $i(t,e,n,r,o){var i=ie(n,r);return Vi(t,e,i[0],i[1],o.internalFormatPackedHalfFloat,t.RGBA,o.textureTypeHalfFloat)}function Ki(t,e,n,r){return se(t,e,function(){return t.bindBuffer(t.ARRAY_BUFFER,r)}),_e(t,e,n,"clipSpacePos",r,3,20,0)&&_e(t,e,n,"uv",r,2,20,12)}function Xi(t,e,n,r,o,i,a){var s,u,c;se(t,e,function(){return t.bindTexture(t.TEXTURE_2D,n)}),c=i instanceof Uint8Array?(s=new Uint8Array(r*o*4),u=t.UNSIGNED_BYTE,t.RGBA):(s=new Float32Array(r*o*4),u=t.FLOAT,a.internalFormatPackedFloat),s.set(i),se(t,e,function(){return t.texImage2D(t.TEXTURE_2D,0,c,r,o,0,t.RGBA,u,s)}),se(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)})}function Yi(t,e,n,r){se(t,e,function(){return t.bindTexture(t.TEXTURE_2D,n)}),r.data instanceof Uint8Array?se(t,e,function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,r.width,r.height,0,t.RGBA,t.UNSIGNED_BYTE,r.data)}):se(t,e,function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r)}),se(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)})}function Ji(t,e,n,r,o){var i=t.createBuffer();se(t,e,function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,i)});var a=16*n*r;return se(t,e,function(){return t.bufferData(t.PIXEL_PACK_BUFFER,a,t.STREAM_READ)}),se(t,e,function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,0)}),se(t,e,function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,null)}),i}function Qi(t,e,n){var r=t,o=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,e),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,o),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),o}function Zi(t,e,n,r,o){var i=re(n,r),a=i[0],s=i[1],u=new Uint8Array(n*r*4);return se(t,e,function(){return t.readPixels(0,0,a,s,o.downloadTextureFormat,t.UNSIGNED_BYTE,u)}),new Float32Array(u.buffer)}function ta(t,e,n,r,o,i,a,s){var u,c=t,l=new Float32Array((u=ie(i,a))[0]*u[1]*4);return c.bindBuffer(c.PIXEL_PACK_BUFFER,e),c.getBufferSubData(c.PIXEL_PACK_BUFFER,0,l),c.bindBuffer(c.PIXEL_PACK_BUFFER,null),l}function ea(t,e,n,r){var o=new Float32Array(n*r*4);return se(t,e,function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,o)}),o}var na=Object.freeze({createVertexShader:Wi,createVertexBuffer:zi,createIndexBuffer:Ui,createFloat32MatrixTexture:Gi,createFloat16MatrixTexture:Hi,createUnsignedBytesMatrixTexture:ji,createPackedMatrixTexture:qi,createFloat16PackedMatrixTexture:$i,bindVertexProgramAttributeStreams:Ki,uploadDenseMatrixToTexture:Xi,uploadPixelDataToTexture:Yi,createBufferFromOutputTexture:Ji,downloadFloat32MatrixFromBuffer:Qi,downloadByteEncodedFloatMatrixFromOutputTexture:Zi,downloadPackedMatrixFromBuffer:ta,downloadMatrixFromPackedOutputTexture:ea}),ra=(Object.defineProperty(oa.prototype,"debug",{get:function(){return _.getBool("DEBUG")},enumerable:!0,configurable:!0}),oa.prototype.dispose=function(){var t=this;if(!this.disposed){null!=this.program&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),null!=this.outputTexture&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");var e=this.gl;se(e,this.debug,function(){return e.finish()}),se(e,this.debug,function(){return e.bindFramebuffer(e.FRAMEBUFFER,null)}),se(e,this.debug,function(){return e.deleteFramebuffer(t.framebuffer)}),se(e,this.debug,function(){return e.bindBuffer(e.ARRAY_BUFFER,null)}),se(e,this.debug,function(){return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)}),se(e,this.debug,function(){return e.deleteBuffer(t.indexBuffer)}),this.disposed=!0}},oa.prototype.createFloat32MatrixTexture=function(t,e){return this.throwIfDisposed(),Gi(this.gl,this.debug,t,e,this.textureConfig)},oa.prototype.createFloat16MatrixTexture=function(t,e){return this.throwIfDisposed(),Hi(this.gl,this.debug,t,e,this.textureConfig)},oa.prototype.createUnsignedBytesMatrixTexture=function(t,e){return this.throwIfDisposed(),ji(this.gl,this.debug,t,e,this.textureConfig)},oa.prototype.uploadPixelDataToTexture=function(t,e){this.throwIfDisposed(),Yi(this.gl,this.debug,t,e)},oa.prototype.uploadDenseMatrixToTexture=function(t,e,n,r){this.throwIfDisposed(),Xi(this.gl,this.debug,t,e,n,r,this.textureConfig)},oa.prototype.createFloat16PackedMatrixTexture=function(t,e){return this.throwIfDisposed(),$i(this.gl,this.debug,t,e,this.textureConfig)},oa.prototype.createPackedMatrixTexture=function(t,e){return this.throwIfDisposed(),qi(this.gl,this.debug,t,e,this.textureConfig)},oa.prototype.deleteMatrixTexture=function(t){var e=this;this.throwIfDisposed(),this.outputTexture===t&&(Ae(this.gl,this.debug,this.framebuffer),this.outputTexture=null),se(this.gl,this.debug,function(){return e.gl.deleteTexture(t)})},oa.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,function(){return Zi(r.gl,r.debug,e,n,r.textureConfig)})},oa.prototype.downloadPackedMatrixFromBuffer=function(t,e,n,r,o,i){return ta(this.gl,t,0,0,0,o,i,this.textureConfig)},oa.prototype.downloadFloat32MatrixFromBuffer=function(t,e){return Qi(this.gl,t,e)},oa.prototype.createBufferFromTexture=function(t,e,n){this.bindTextureToFrameBuffer(t);var r=Ji(this.gl,this.debug,e,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r},oa.prototype.createAndWaitForFence=function(){var t=this.createFence(this.gl);return this.pollFence(t)},oa.prototype.createFence=function(t){var e,n,r=this;if(_.getBool("WEBGL_FENCE_API_ENABLED")){var o=t,i=o.fenceSync(o.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),n=function(){var t=o.clientWaitSync(i,0,0);return t===o.ALREADY_SIGNALED||t===o.CONDITION_SATISFIED},e=i}else n=0<_.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?(e=this.beginQuery(),this.endQuery(),function(){return r.isQueryAvailable(e,_.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}):function(){return!0};return{query:e,isFencePassed:n}},oa.prototype.downloadMatrixFromPackedTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,function(){return ea(r.gl,r.debug,e,n)})},oa.prototype.createProgram=function(t){this.throwIfDisposed();var e=this.gl,n=pe(e,this.debug,t),r=Wi(e,this.debug),o=me(e,this.debug);return se(e,this.debug,function(){return e.attachShader(o,r)}),se(e,this.debug,function(){return e.attachShader(o,n)}),ge(e,this.debug,o),this.debug&&ye(e,this.debug,o),this.vertexAttrsAreBound||(this.setProgram(o),this.vertexAttrsAreBound=Ki(e,this.debug,this.program,this.vertexBuffer)),o},oa.prototype.deleteProgram=function(t){var e=this;this.throwIfDisposed(),t===this.program&&(this.program=null),null!=t&&se(this.gl,this.debug,function(){return e.gl.deleteProgram(t)})},oa.prototype.setProgram=function(t){var e=this;this.throwIfDisposed(),this.program=t,null!=this.program&&this.debug&&ye(this.gl,this.debug,this.program),se(this.gl,this.debug,function(){return e.gl.useProgram(t)})},oa.prototype.getUniformLocation=function(t,e,n){return void 0===n&&(n=!0),this.throwIfDisposed(),n?Ie(this.gl,this.debug,t,e):Se(this.gl,t,e)},oa.prototype.getAttributeLocation=function(t,e){var n=this;return this.throwIfDisposed(),se(this.gl,this.debug,function(){return n.gl.getAttribLocation(t,e)})},oa.prototype.getUniformLocationNoThrow=function(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)},oa.prototype.setInputMatrixTexture=function(t,e,n){this.throwIfDisposed(),this.throwIfNoProgram(),ke(this.gl,this.debug,this.program,t,e,n)},oa.prototype.setOutputMatrixTexture=function(t,e,n){this.setOutputMatrixTextureDriver(t,n,e)},oa.prototype.setOutputPackedMatrixTexture=function(t,e,n){this.throwIfDisposed();var r=ie(e,n),o=r[0],i=r[1];this.setOutputMatrixTextureDriver(t,o,i)},oa.prototype.setOutputMatrixWriteRegion=function(t,e,n,r){this.setOutputMatrixWriteRegionDriver(n,t,r,e)},oa.prototype.setOutputPackedMatrixWriteRegion=function(t,e,n,r){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")},oa.prototype.debugValidate=function(){null!=this.program&&ye(this.gl,this.debug,this.program),Te(this.gl)},oa.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var t=this.gl;this.debug&&this.debugValidate(),se(t,this.debug,function(){return t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0)})},oa.prototype.blockUntilAllProgramsCompleted=function(){var t=this;this.throwIfDisposed(),se(this.gl,this.debug,function(){return t.gl.finish()})},oa.prototype.getQueryTimerExtension=function(){return null==this.disjointQueryTimerExtension&&(this.disjointQueryTimerExtension=le(this.gl,this.debug,2===_.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension},oa.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()},oa.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()},oa.prototype.beginQuery=function(){if(2===_.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var t=this.gl,e=this.getQueryTimerExtensionWebGL2(),n=t.createQuery();return t.beginQuery(e.TIME_ELAPSED_EXT,n),n}var r=this.getQueryTimerExtensionWebGL1(),o=r.createQueryEXT();return r.beginQueryEXT(r.TIME_ELAPSED_EXT,o),o},oa.prototype.endQuery=function(){if(2!==_.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT)}else{var e=this.gl,n=this.getQueryTimerExtensionWebGL2();e.endQuery(n.TIME_ELAPSED_EXT)}},oa.prototype.waitForQueryAndGetTime=function(n){return y(this,void 0,void 0,function(){var e=this;return I(this,function(t){switch(t.label){case 0:return[4,E(function(){return e.disposed||e.isQueryAvailable(n,_.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))})];case 1:return t.sent(),[2,this.getQueryTime(n,_.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))]}})})},oa.prototype.getQueryTime=function(t,e){if(0===e)return null;if(2===e){var n=this.gl;return n.getQueryParameter(t,n.QUERY_RESULT)/1e6}var r=this.getQueryTimerExtensionWebGL1();return r.getQueryObjectEXT(t,r.QUERY_RESULT_EXT)/1e6},oa.prototype.isQueryAvailable=function(t,e){if(0===e)return!0;if(2!==e)return o=(r=this.getQueryTimerExtensionWebGL1()).getQueryObjectEXT(t,r.QUERY_RESULT_AVAILABLE_EXT),null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),o&&!this.disjoint;var n=this.gl,r=this.getQueryTimerExtensionWebGL2(),o=n.getQueryParameter(t,n.QUERY_RESULT_AVAILABLE);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),o&&!this.disjoint},oa.prototype.pollFence=function(e){var n=this;return new Promise(function(t){n.addItemToPoll(function(){return e.isFencePassed()},function(){return t()})})},oa.prototype.pollItems=function(){for(var t=function(t){for(var e=0;e<t.length&&t[e]();++e);return e-1}(this.itemsToPoll.map(function(t){return t.isDoneFn})),e=0;e<=t;++e)(0,this.itemsToPoll[e].resolveFn)();this.itemsToPoll=this.itemsToPoll.slice(t+1)},oa.prototype.addItemToPoll=function(t,e){var n=this;this.itemsToPoll.push({isDoneFn:t,resolveFn:e}),1<this.itemsToPoll.length||E(function(){return n.pollItems(),0===n.itemsToPoll.length})},oa.prototype.bindTextureToFrameBuffer=function(t){this.throwIfDisposed(),Ne(this.gl,this.debug,t,this.framebuffer),this.debug&&Te(this.gl)},oa.prototype.unbindTextureToFrameBuffer=function(){null!=this.outputTexture?(Ne(this.gl,this.debug,this.outputTexture,this.framebuffer),this.debug&&Te(this.gl)):Ae(this.gl,this.debug,this.framebuffer)},oa.prototype.downloadMatrixDriver=function(t,e){this.bindTextureToFrameBuffer(t);var n=e();return this.unbindTextureToFrameBuffer(),n},oa.prototype.setOutputMatrixTextureDriver=function(t,e,n){this.throwIfDisposed();var r=this.gl;Ne(r,this.debug,t,this.framebuffer),this.debug&&Te(r),this.outputTexture=t,se(r,this.debug,function(){return r.viewport(0,0,e,n)}),se(r,this.debug,function(){return r.scissor(0,0,e,n)})},oa.prototype.setOutputMatrixWriteRegionDriver=function(t,e,n,r){var o=this;this.throwIfDisposed(),se(this.gl,this.debug,function(){return o.gl.scissor(t,e,n,r)})},oa.prototype.throwIfDisposed=function(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")},oa.prototype.throwIfNoProgram=function(){if(null==this.program)throw new Error("No GPU program is currently set.")},oa);function oa(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];var e=_.getNumber("WEBGL_VERSION");if(null!=t?te(e,this.gl=t):this.gl=ee(e),1===_.getNumber("WEBGL_VERSION"))this.textureFloatExtension=le(this.gl,this.debug,"OES_texture_float"),this.colorBufferFloatExtension=this.gl.getExtension("WEBGL_color_buffer_float"),this.textureHalfFloatExtension=le(this.gl,this.debug,"OES_texture_half_float"),this.colorBufferHalfFloatExtension=this.gl.getExtension("EXT_color_buffer_half_float");else if(He(this.gl,"EXT_color_buffer_float"))this.colorBufferFloatExtension=this.gl.getExtension("EXT_color_buffer_float");else{if(!He(this.gl,"EXT_color_buffer_half_float"))throw new Error("GL context does not support color renderable floats");this.colorBufferHalfFloatExtension=this.gl.getExtension("EXT_color_buffer_half_float")}this.vertexBuffer=zi(this.gl,this.debug),this.indexBuffer=Ui(this.gl,this.debug),this.framebuffer=Ee(this.gl,this.debug),this.textureConfig=ae(this.gl,this.textureHalfFloatExtension)}function ia(t,s){if(t.length!==s.length)throw Error("Binary was compiled with "+t.length+" inputs, but was executed with "+s.length+" inputs");t.forEach(function(t,e){var n=t.logicalShape,r=s[e],o=r.shape;if(!k(n,o))throw Error("Binary was compiled with different shapes than the current args. Shapes "+n+" and "+o+" must match");if(!t.isUniform||!r.isUniform){var i=t.texShape,a=r.isUniform?null:r.texData.texShape;if(!k(i,a))throw Error("Binary was compiled with different texture shapes than the current args. Shape "+i+" and "+a+" must match")}})}var aa=function(t,e,n){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=t;for(var r=n.filterWidth,o=n.inChannels,i=n.strideWidth,a=n.strideHeight,s=n.padInfo,u=n.outWidth,c=n.dilationWidth,l=n.dilationHeight,h=n.dataFormat,p=s.left,f=s.top,d=o*r,v=Mo(),m="channelsLast"===h,g=m?0:1,y=m?1:2,x="",b=0;b<=1;b++)for(var w=0;w<=1;w++)x+="\n blockIndex = rc.y + "+w+";\n pos = rc.x + "+b+";\n\n if(blockIndex < "+t[1]+" && pos < "+t[0]+") {\n offsetY = int(blockIndex / ("+u+")) * "+a+" - "+f+";\n d0 = offsetY + "+l+" * (pos / "+d+");\n\n if(d0 < "+e[g]+" && d0 >= 0) {\n\n offsetX = int(mod(float(blockIndex), "+u+".) * "+i+". - "+p+".);\n d1 = offsetX + "+c+" * (int(mod(float(pos), "+d+".) / "+o+".));\n\n if(d1 < "+e[y]+" && d1 >= 0) {\n\n ch = int(mod(float(pos), "+o+".));\n\n if ("+m+") {\n innerDims = vec2(d1, ch);\n result["+(2*b+w)+"] = getChannel(\n getA(d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n } else {\n innerDims = vec2(d0, d1);\n result["+(2*b+w)+"] = getChannel(\n getA(ch, int(innerDims.x),\n int(innerDims.y)), innerDims);\n }\n }\n }\n }\n ";this.userCode="\n void main() {\n ivec2 rc = getOutputCoords();\n\n vec4 result = vec4(0);\n\n int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\n vec2 innerDims;\n\n "+x+"\n\n "+v.output+" = result;\n }\n "},sa=function(t,e,n,r,o){this.variableNames=["x"],this.outputShape=[];var i,a=e,s=t[3]-1;this.outputShape=t;var u="float("+n+") + float("+r+") * sum";i=.5===o?"inversesqrt("+u+")":1===o?"1.0/("+u+")":"exp(log("+u+") * float(-"+o+"));",this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n int d = coords[3];\n float x = getX(b, r, c, d);\n float sum = 0.0;\n for (int j = -"+a+"; j <= "+a+"; j++) {\n int idx = d + j;\n if (idx >= 0 && idx <= "+s+") {\n float z = getX(b, r, c, idx);\n sum += z * z;\n }\n }\n float val = x * "+i+";\n setOutput(val);\n }\n "},ua=function(t,e,n,r,o){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=e,this.bias=n,this.alpha=r,this.beta=o,this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n\n float result = 0.0;\n for (int d = 0; d < "+this.depth+"; ++d) {\n int depthBegin = int(max(0.0, float(d - "+e+")));\n int depthEnd = int(min(float("+this.depth+"),\n float(d + "+e+" + 1)));\n\n const int MIN_DEPTH_BEGIN = 0;\n const int MAX_DEPTH_END = "+this.depth+";\n\n float norm = 0.0;\n for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n }\n else {\n break;\n }\n }\n\n norm = float("+r+") * norm + float("+n+");\n\n for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd){\n float dyi = -2.0 * float("+r+")\n * float("+o+")\n * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * "+o+");\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n }\n else {\n break;\n }\n }\n }\n setOutput(result);\n }\n "},ca=function(t,e,n,r,o){this.variableNames=["x"],this.outputShape=[],this.usesPackedTextures=!0;var i,a=e,s=t[3]-1;this.outputShape=t;var u="float("+n+") + float("+r+") * sum";i=.5===o?"inversesqrt("+u+")":1===o?"1.0/("+u+")":"exp(log("+u+") * float(-"+o+"));",this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords.x;\n int r = coords.y;\n int c = coords.z;\n int d = coords.w;\n\n bool hasNextCol = d < "+this.outputShape[3]+";\n bool hasNextRow = c < "+this.outputShape[2]+";\n\n vec4 sum = vec4(0.);\n vec4 xFragAtOutputCoords = getX(b, r, c, d);\n\n vec4 xAtOutputCoords = vec4(\n getChannel(xFragAtOutputCoords, vec2(c, d)),\n hasNextCol ?\n getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\n hasNextRow ?\n getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\n (hasNextRow && hasNextCol) ?\n getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\n );\n\n int firstChannel = d - "+a+";\n vec2 cache = vec2(0.);\n if(firstChannel >= 0){\n vec4 firstChannelFrag = getX(b, r, c, firstChannel);\n cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\n if(hasNextRow){\n cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\n }\n }\n\n ivec2 depth = ivec2(d, d + 1);\n for (int j = - "+a+"; j <= "+a+"; j++) {\n ivec2 idx = depth + j;\n bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\n bvec2 belowUpperBound = lessThanEqual(idx, ivec2("+s+"));\n\n bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\n bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\n\n if(depthInRange || depthPlusOneInRange){\n vec4 z = vec4(0.);\n vec4 xFragAtCurrentDepth;\n z.xz = cache.xy;\n if(depthPlusOneInRange && hasNextCol){\n xFragAtCurrentDepth = idx.y != d ?\n getX(b, r, c, idx.y) : xFragAtOutputCoords;\n z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\n if(hasNextRow){\n z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\n }\n }\n cache.xy = z.yw;\n sum += z * z;\n }\n }\n vec4 result = xAtOutputCoords * "+i+";\n setOutput(result);\n }\n "},la=function(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;var e=t.strideHeight,n=t.strideWidth,r=t.dilationHeight,o=t.effectiveFilterHeight,i=t.effectiveFilterWidth,a=o-1-t.padInfo.top,s=i-1-t.padInfo.left,u=o*i-1;this.userCode="\n const ivec2 pads = ivec2("+a+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+o+";\n wR += "+r+") {\n float dyR = float(dyRCorner + wR) / "+e+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+i+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+n+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n int maxPosValue = "+u+" - int(getMaxPos(b, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue = wR * "+i+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n "},ha=function(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;var e=t.strideDepth,n=t.strideHeight,r=t.strideWidth,o=t.dilationDepth,i=t.dilationHeight,a=t.dilationWidth,s=t.effectiveFilterDepth,u=t.effectiveFilterHeight,c=t.effectiveFilterWidth,l=s-1-t.padInfo.front,h=u-1-t.padInfo.top,p=c-1-t.padInfo.left,f=s*u*c-1;this.userCode="\n const ivec3 pads = ivec3("+l+", "+h+", "+p+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < "+s+";\n wD += "+o+") {\n float dyD = float(dyDCorner + wD) / "+e+".0;\n\n if (dyD < 0.0 || dyD >= "+t.outDepth+".0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < "+u+";\n wR += "+i+") {\n float dyR = float(dyRCorner + wR) / "+n+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+c+";\n wC += "+a+") {\n float dyC = float(dyCCorner + wC) / "+r+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n int maxPosValue = "+f+" -\n int(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue =\n wD * "+u+" * "+c+" +\n wR * "+c+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n }\n setOutput(dotProd);\n }\n "},pa=function(t,e,n,r,o,i,a){void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===o&&(o=!1),void 0===i&&(i=null),void 0===a&&(a=!1),this.variableNames=["matrixA","matrixB"],this.usesPackedTextures=!0,this.outputShape=e;var s=n?t[1]:t[2],u=Math.ceil(s/2),c=n?"i * 2, rc.y":"rc.y, i * 2",l=r?"rc.z, i * 2":"i * 2, rc.z",h=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],p=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],f="",d="";i&&(f=a?"vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n "+i+"\n }":"vec4 activation(vec4 x) {\n "+i+"\n }",d="result = activation(result);");var v=o?"result += getBiasAtOutCoords();":"";o&&this.variableNames.push("bias"),a&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+f+"\n\n const float sharedDimension = "+u+".0;\n\n vec4 dot2x2ARowBCol(ivec3 rc) {\n vec4 result = vec4(0);\n for (int i = 0; i < "+u+"; i++) {\n vec4 a = getMatrixA(rc.x, "+c+");\n vec4 b = getMatrixB(rc.x, "+l+");\n\n // These swizzled products need to be separately added.\n // See: https://github.com/tensorflow/tfjs/issues/1735\n result += ("+h[0]+" * "+p[0]+");\n result += ("+h[1]+" * "+p[1]+");\n }\n return result;\n }\n\n void main() {\n ivec3 rc = getOutputCoords();\n vec4 result = dot2x2ARowBCol(rc);\n\n "+v+"\n\n "+d+"\n\n setOutput(result);\n }\n "},fa=(ma.prototype.getCustomSetupFunc=function(n){var r=this;return function(t,e){null==r.seedLoc&&(r.seedLoc=t.getUniformLocation(e,"seed")),t.gl.uniform1f(r.seedLoc,n)}},ma),da=function(t,e,n,r){this.variableNames=["indices"],this.outputShape=[t,e],this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int index = round(getIndices(coords.x));\n setOutput(mix(float("+r+"), float("+n+"),\n float(index == coords.y)));\n }\n "},va=function(t){this.variableNames=["A"];var e,n,r,o,i=(this.outputShape=t).length;if(0===i)this.userCode="\n void main() {\n setOutput(vec4(getA(), 0., 0., 0.));\n }\n ";else{var a=Fo("rc",i),s=Uo(i),u=function(t,e,n){if(1===t)return"rc > "+e[0];for(var r="",o=t-2;o<t;o++)r+=n[o]+" >= "+e[o],o<t-1&&(r+="||");return r}(i,t,a),c=function(t,e,n){if(1===t)return"";var r=a.slice(-2);return"\n int r = "+r[0]+";\n int c = "+r[1]+";\n int rp1 = r + 1;\n int cp1 = c + 1;\n\n bool cEdge = cp1 >= "+e+";\n bool rEdge = rp1 >= "+n+";\n "}(i,t[t.length-1],t[t.length-2]),l=(n=a,r=(e=t).length,o=function(t,e){for(var n=[],r=0;r<=1;r++)for(var o=0;o<=1;o++){for(var i=(0===r?"r":"rp1")+", "+(0===o?"c":"cp1"),a=2;a<t;a++)i=e[e.length-1-a]+","+i;n.push(i)}return n}(r,n),1===r?"getA(rc),\n rc + 1 >= "+e[0]+" ? 0. : getA(rc + 1),\n 0, 0":"getA("+o[0]+"),\n cEdge ? 0. : getA("+o[1]+"),\n rEdge ? 0. : getA("+o[2]+"),\n rEdge || cEdge ? 0. : getA("+o[3]+")");this.userCode="\n void main() {\n "+s+" rc = getOutputCoords();\n\n if("+u+") {\n setOutput(vec4(0));\n } else {\n "+c+"\n\n setOutput(vec4("+l+"));\n }\n }\n "}};function ma(t,e,n){this.variableNames=["probs"],this.outputShape=[t,n],this.userCode="\n uniform float seed;\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n\n float r = random(seed);\n float cdf = 0.0;\n\n for (int i = 0; i < "+(e-1)+"; i++) {\n cdf += getProbs(batch, i);\n\n if (r < cdf) {\n setOutput(float(i));\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutput(float("+(e-1)+"));\n }\n "}var ga=function(n,t,e){this.variableNames=["x"],this.outputShape=t.map(function(t,e){return t[0]+n[e]+t[1]});var r=n.length,o=Uo(r),i=t.map(function(t){return t[0]}).join(","),a=t.map(function(t,e){return t[0]+n[e]}).join(","),s=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);this.userCode=1!==r?"\n "+o+" start = "+o+"("+i+");\n "+o+" end = "+o+"("+a+");\n\n void main() {\n "+o+" outC = getOutputCoords();\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n setOutput(float("+e+"));\n } else {\n "+o+" coords = outC - start;\n setOutput(getX("+s+"));\n }\n }\n ":"\n int start = "+i+";\n int end = "+a+";\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start || outC >= end) {\n setOutput(float("+e+"));\n } else {\n setOutput(getX(outC - start));\n }\n }\n "},ya=function(n,t,e){this.variableNames=["x"],this.usesPackedTextures=!0,this.outputShape=t.map(function(t,e){return t[0]+n[e]+t[1]});for(var r=n.length,o=Uo(r),i=t.map(function(t){return t[0]}).join(","),a=t.map(function(t,e){return t[0]+n[e]}).join(","),s=Fo("rc",r),u=Fo("source",r),c=s[r-1]+" < "+this.outputShape[r-1],l=1===r?"source":"vec2("+u.slice(-2).join()+")",h=[o+" rc = outputLoc;",s[r-1]+" += 1;\n if("+c+") {\n ",1===r?"":"}\n rc = outputLoc;\n "+s[r-2]+" += 1;\n if("+s[r-2]+" < "+this.outputShape[r-2]+") {",1===r?"":" "+s[r-1]+" += 1;\n if("+c+") {"],p=1===r?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",f="",d=0,v=1===r?2:4;d<v;d++)f+="\n "+h[d]+"\n if ("+p+") {\n result["+d+"] = float("+e+");\n } else {\n "+o+" source = rc - start;\n result["+d+"] = getChannel(getX("+u.join()+"), "+l+");\n }\n ";f+=1===r?"} ":"}}",this.userCode="\n const "+o+" start = "+o+"("+i+");\n const "+o+" end = "+o+"("+a+");\n\n void main() {\n "+o+" outputLoc = getOutputCoords();\n vec4 result = vec4(0.);\n "+f+"\n setOutput(result);\n }\n "},xa=function(t,e,n){if(this.variableNames=["x"],"avg"===e&&n)throw new Error("Cannot compute positions for average pool.");var r=t.filterWidth,o=t.strideHeight,i=t.strideWidth,a=t.dilationHeight,s=t.dilationWidth,u=t.effectiveFilterHeight,c=t.effectiveFilterWidth,l=t.padInfo.top,h=t.padInfo.left;this.outputShape=t.outShape;var p="avg"===e,f="0.0";if(p||(f="-1.0 / 1e-20"),n)this.userCode="\n const ivec2 strides = ivec2("+o+", "+i+");\n const ivec2 pads = ivec2("+l+", "+h+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n float avgValue = 0.0;\n\n for (int wR = 0; wR < "+u+";\n wR += "+a+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+c+";\n wC += "+s+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float value = getX(batch, xR, xC, d);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value >= currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = wR * "+c+" + wC;\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else{var d=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===e&&(d="avgValue / count");var v=4*Math.floor(r/4),m=r%4,g="\n if ("+p+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec2 strides = ivec2("+o+", "+i+");\n const ivec2 pads = ivec2("+l+", "+h+");\n const float initializationValue = "+f+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xR, int xC, int d) {\n if (xC < 0 || xC >= "+t.inWidth+") {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xR, xC, d);\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n vec4 minMaxValue = vec4("+f+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < "+u+";\n wR += "+a+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+v+"; wC += 4) {\n int xC = xCCorner + wC * "+s+";\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n getValue(batch, xR, xC + 2 * "+s+", d),\n getValue(batch, xR, xC + 3 * "+s+", d)\n );\n\n "+g+"\n }\n\n int xC = xCCorner + "+v+";\n if ("+(1==m)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+g+"\n } else if ("+(2==m)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n initializationValue,\n initializationValue\n );\n\n "+g+"\n } else if ("+(3==m)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n getValue(batch, xR, xC + 2 * "+s+", d),\n initializationValue\n );\n\n "+g+"\n }\n }\n setOutput("+d+");\n }\n "}},ba=function(t,e,n){if(this.variableNames=["x"],"avg"===e&&n)throw new Error("Cannot compute positions for average pool.");var r=t.filterWidth,o=t.strideDepth,i=t.strideHeight,a=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterDepth,h=t.effectiveFilterHeight,p=t.effectiveFilterWidth,f=t.padInfo.front,d=t.padInfo.top,v=t.padInfo.left;this.outputShape=t.outShape;var m="avg"===e,g="0.0";if(m||(g="-1.0 / 1e-20"),n)this.userCode="\n const ivec3 strides =\n ivec3("+o+", "+i+", "+a+");\n const ivec3 pads = ivec3("+f+", "+d+", "+v+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n\n for (int wD = 0; wD < "+l+";\n wD += "+s+") {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= "+t.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+h+";\n wR += "+u+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+p+";\n wC += "+c+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float value = getX(batch, xD, xR, xC, ch);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value >= currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition =\n wD * "+h+" * "+p+" +\n wR * "+p+" + wC;;\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else{var y=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===e&&(y="avgValue / count");var x=4*Math.floor(r/4),b=r%4,w="\n if ("+m+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec3 strides =\n ivec3("+o+", "+i+", "+a+");\n const ivec3 pads = ivec3("+f+", "+d+", "+v+");\n const float initializationValue = "+g+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xD, int xR, int xC, int ch) {\n if (xC < 0 || xC >= "+t.inWidth+") {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xD, xR, xC, ch);\n }\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).\n // ? = to be determined\n vec4 minMaxValue = vec4("+g+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wD = 0; wD < "+l+";\n wD += "+s+") {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= "+t.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+h+";\n wR += "+u+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+x+"; wC += 4) {\n int xC = xCCorner + wC * "+c+";\n\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+c+", ch),\n getValue(batch, xD, xR, xC + 2 * "+c+", ch),\n getValue(batch, xD, xR, xC + 3 * "+c+", ch)\n );\n\n "+w+"\n }\n\n int xC = xCCorner + "+x+";\n if ("+(1==b)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+w+"\n } else if ("+(2==b)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+c+", ch),\n initializationValue,\n initializationValue\n );\n\n "+w+"\n } else if ("+(3==b)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+c+", ch),\n getValue(batch, xD, xR, xC + 2 * "+c+", ch),\n initializationValue\n );\n\n "+w+"\n }\n }\n setOutput("+y+");\n }\n }\n "}},wa=function(t,e){this.variableNames=["x"];var n=t.windowSize,r=t.batchSize,o=t.inSize,i=Math.ceil(o/n);this.outputShape=[r,i];var a="0.0",s="";"prod"===e?a="1.0":"min"===e?(a="1.0 / 1e-20",s="min"):"max"===e&&(a="-1.0 / 1e-20",s="max");var u=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"sum"===e?u="sumValue":"prod"===e?u="prodValue":"all"===e?u="allValue":"any"===e&&(u="anyValue");var c=4*Math.floor(n/4),l=n%4,h="\n if ("+("sum"===e)+") {\n sumValue += dot(values, ones);\n } else if ("+("prod"===e)+") {\n vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n prodValue *= tmp[0] * tmp[1];\n } else {\n minMaxValue = "+s+"(values, minMaxValue);\n }\n ",p="vec4";"all"===e?(a="1.0",h="\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n ",p="bvec4"):"any"===e&&(a="0.0",h="\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n ",p="bvec4");var f="";0<o%n&&(f="\n if (inIdx < 0 || inIdx >= "+o+") {\n return initializationValue;\n }\n "),this.userCode="\n const float initializationValue = "+a+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n "+f+"\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * "+n+";\n\n vec4 minMaxValue = vec4("+a+");\n float prodValue = 1.0;\n float sumValue = 0.0;\n float allValue = 1.0;\n float anyValue = 0.0;\n\n for (int i = 0; i < "+c+"; i += 4) {\n int inIdx = inOffset + i;\n "+p+" values = "+p+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n "+h+"\n }\n\n int inIdx = inOffset + "+c+";\n if ("+(1==l)+") {\n "+p+" values = "+p+"(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+h+"\n } else if ("+(2==l)+") {\n "+p+" values = "+p+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n "+h+"\n } else if ("+(3==l)+") {\n "+p+" values = "+p+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n "+h+"\n }\n setOutput("+u+");\n }\n "},Ca=function(t,e){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=t;for(var n="",r=0;r<4;r++){var o="thisRC = rc;";r%2==1&&(o+="thisRC.z += 1;"),1<r&&(o+="thisRC.y += 1;"),n+="\n "+o+"\n "+(0<r?"if(thisRC.y < rows && thisRC.z < cols){":"")+"\n int flatIndex = getFlatIndex(thisRC);\n\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n result["+r+"] =\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n "+(0<r?"}":"")+"\n "}this.userCode="\n \n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n "+Po(["r","c","d"],e)+"\n return ivec3(r, c, d);\n }\n \n "+Oo(t)+"\n\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0.);\n\n ivec3 thisRC;\n int rows = "+t[1]+";\n int cols = "+t[2]+";\n\n "+n+"\n\n setOutput(result);\n }\n "},Ea=function(t,e,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,o=r[1],i=r[2],a=t.shape,s=a[1],u=a[2],c=[n&&1<s?o-1:o,n&&1<u?i-1:i],l=[n&&1<s?s-1:s,n&&1<u?u-1:u],h=c[0]/l[0],p=c[1]/l[1],f=1/h,d=1/p,v=2*Math.ceil(f)+2,m=2*Math.ceil(d)+2;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float("+h+");\n const float widthScale = float("+p+");\n\n const float invHeightScale = float("+f+");\n const float invWidthScale = float("+d+");\n\n const int winHeight = int("+v+");\n const int winWidth = int("+m+");\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(startRLerp - float(winHeight / 2));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(startCLerp - float(winWidth / 2));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= "+s+") {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= "+u+") {\n continue;\n }\n\n float dxR = float(dyR) * heightScale;\n int topDxRIndex = int(floor(dxR));\n int bottomDxRIndex = int(min(ceil(dxR), "+(o-1)+".0));\n float dxRLerp = dxR - float(topDxRIndex);\n float inverseDxRLerp = 1.0 - dxRLerp;\n\n float dxC = float(dyC) * widthScale;\n int leftDxCIndex = int(floor(dxC));\n int rightDxCIndex = int(min(ceil(dxC), "+(i-1)+".0));\n float dxCLerp = dxC - float(leftDxCIndex);\n float inverseDxCLerp = 1.0 - dxCLerp;\n\n if (r == topDxRIndex && c == leftDxCIndex) {\n // topLeft\n accumulator +=\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n }\n\n if (r == topDxRIndex && c == rightDxCIndex) {\n // topRight\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n }\n\n if (r == bottomDxRIndex && c == leftDxCIndex) {\n // bottomLeft\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n }\n\n if (r == bottomDxRIndex && c == rightDxCIndex) {\n // bottomRight\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n "},_a=function(t,e,n,r){this.variableNames=["A"],this.outputShape=[];var o=t[0],i=t[1],a=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&1<e?i-1:i,r&&1<n?a-1:a],c=[r&&1<e?e-1:e,r&&1<n?n-1:n];this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/c[0]+",\n "+u[1]/c[1]+");\n const vec2 inputShapeRC = vec2("+i+".0, "+a+".0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the four integer indices.\n ivec2 sourceFloorRC = ivec2(sourceFracIndexRC);\n ivec2 sourceCeilRC = ivec2(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n float top = topLeft + (topRight - topLeft) * fracRC.y;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n float newValue = top + (bottom - top) * fracRC.x;\n\n setOutput(newValue);\n }\n "},Ra=function(t,e,n,r){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=[];var o=t[0],i=t[1],a=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&1<e?i-1:i,r&&1<n?a-1:a],c=[r&&1<e?e-1:e,r&&1<n?n-1:n];this.userCode="\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n "+u[0]/c[0]+",\n "+u[1]/c[1]+",\n "+u[1]/c[1]+");\n const vec3 inputShapeRC = vec3("+i+".0, "+a+".0,\n "+a+".0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = vec3(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the four integer indices.\n ivec3 sourceFloorRC = ivec3(sourceFracIndexRC);\n ivec3 sourceCeilRC = ivec3(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n \n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < "+(s-1)+"; \n bool hasNextRow = coords.z < "+(n-1)+";\n\n // In parallel, construct four corners for all four components in\n // packed 2x2 cell.\n vec4 topLeft = vec4(\n getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 bottomLeft = vec4(\n getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 topRight = vec4(\n getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec4 bottomRight = vec4(\n getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n vec4 newValue = mix(top, bottom, fracRC.x);\n\n setOutput(newValue);\n }\n "},Ia=function(t,e,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,o=r[1],i=r[2],a=t.shape,s=a[1],u=a[2],c=[n&&1<s?o-1:o,n&&1<u?i-1:i],l=[n&&1<s?s-1:s,n&&1<u?u-1:u],h=c[0]/l[0],p=c[1]/l[1],f=1/h,d=1/p,v=2*Math.ceil(f)+2,m=2*Math.ceil(d)+2;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float("+h+");\n const float widthScale = float("+p+");\n\n const float invHeightScale = float("+f+");\n const float invWidthScale = float("+d+");\n\n const int winHeight = int("+v+");\n const int winWidth = int("+m+");\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= "+s+") {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= "+u+") {\n continue;\n }\n\n float sourceFracRow =\n float("+c[0]+") *\n (float(dyR) / float("+l[0]+"));\n\n float sourceFracCol =\n float("+c[1]+") *\n (float(dyC) / float("+l[1]+"));\n\n int sourceNearestRow = int(min(\n float(int("+o+") - 1),\n "+n+" ? float(round(sourceFracRow)) :\n float(floor(sourceFracRow))));\n\n int sourceNearestCol = int(min(\n float(int("+i+") - 1),\n "+n+" ? float(round(sourceFracCol)) :\n float(floor(sourceFracCol))));\n\n if (r == sourceNearestRow && c == sourceNearestCol) {\n accumulator += getDy(b, dyR, dyC, d);\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n "},Sa=function(t,e,n,r){this.variableNames=["A"],this.outputShape=[];var o=t[0],i=t[1],a=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&1<e?i-1:i,r&&1<n?a-1:a],c=[r&&1<e?e-1:e,r&&1<n?n-1:n],l=r?"0.5":"0.0";this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/c[0]+",\n "+u[1]/c[1]+");\n const vec2 inputShapeRC = vec2("+i+".0, "+a+".0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestRC = ivec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + "+l+")));\n\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n "},ka=function(r,o){this.variableNames=["x"];var t=r.length;if(4<t)throw new Error("WebGL backend: Reverse of rank-"+t+" tensor is not yet supported");if(this.outputShape=r,1!==t){var e=r.map(function(t,e){return n=e,-1!==o.indexOf(n)&&1!==r[n]?r[n]+" - coords["+n+"] - 1":"coords["+n+"]";var n}).join(","),n=Uo(t);this.userCode="\n void main() {\n "+n+" coords = getOutputCoords();\n setOutput(getX("+e+"));\n }\n "}else this.userCode="\n void main() {\n int coord = getOutputCoords();\n setOutput(getX("+r[0]+" - coord - 1));\n }\n "},Na=function(i,a){this.variableNames=["x"],this.usesPackedTextures=!0;var t=i.length;if(4<t)throw new Error("WebGL backend: Reverse of rank-"+t+" tensor is not yet supported");this.outputShape=i;var e,n,r,o=Fo("rc",t),s=o[t-1]+" + 1 < "+this.outputShape[t-1],u=o[t-2]+" + 1 < "+this.outputShape[t-2],c=Uo(t);function l(o){var t=i.map(function(t,e){return n=e,r=o,-1!==a.indexOf(n)&&1!==i[n]?i[n]+" - "+r[n]+" - 1":""+r[n];var n,r});return"getChannel(getX("+t.join(",")+"), vec2("+t.slice(-2).join(",")+"))"}this.userCode=1===t?"\n void main(){\n int rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = getChannel(getX("+i[0]+" - rc - 1),\n "+i[0]+" - rc - 1);\n if("+s+"){\n result.g = getChannel(getX("+i[0]+" - (rc + 1) - 1),\n "+i[0]+" - (rc + 1) - 1);\n }\n setOutput(result);\n }\n ":"\n void main() {\n "+c+" rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = "+l(o.slice())+";\n if("+s+"){\n result.g = "+((r=o.slice())[t-1]="("+r[t-1]+" + 1)",l(r))+";\n }\n if("+u+") {\n result.b = "+((n=o.slice())[t-2]="("+n[t-2]+" + 1)",l(n))+";\n if("+s+") {\n result.a = "+((e=o.slice())[t-1]="("+e[t-1]+" + 1)",e[t-2]="("+e[t-2]+" + 1)",l(e))+";\n }\n }\n setOutput(result);\n }\n "},Aa=function(t,e,n,r,o,i,a){this.variableNames=["updates","indices","defaultValue"],this.outputShape=i;var s=Uo(o.length),u=Uo(i.length),c="";1===n?c="i":2===n&&(c="i, j");var l="getIndices("+c+")",h="";1===r?h="i":2===r&&(h="i, coords[1]");var p="getUpdates("+h+")",f=1<e?"strides[j]":"strides";this.userCode="\n "+s+" strides = "+s+"("+o+");\n\n void main() {\n "+u+" coords = getOutputCoords();\n float sum = 0.0;\n bool found = false;\n for (int i = 0; i < "+t+"; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < "+e+"; j++) {\n int index = round("+l+");\n flattenedIndex += index * "+f+";\n }\n if (flattenedIndex == coords[0]) {\n sum += "+p+";\n found = true;\n }\n }\n setOutput(mix(getDefaultValue(), sum, float(found)));\n }\n "},Ta=function(t,e){this.variableNames=["x","segmentIds"];var n=t.windowSize,r=t.batchSize,o=t.inSize,i=t.numSegments,a=i*Math.ceil(o/n);this.outputShape=[r,a];var s=4*Math.floor(n/4),u=n%4,c="\n sumValue += dot(values, segFilter);\n ",l="";0<o%n&&(l="\n if (inIdx < 0 || inIdx >= "+o+") {\n return initializationValue;\n }\n ");var h="";0<o%n&&(h="\n if (inIdx < 0 || inIdx >= "+o+") {\n return -1.0;\n }\n "),this.userCode="\n const float initializationValue = 0.0;\n\n float getValue(int batch, int inIdx) {\n "+l+"\n return getX(batch, inIdx);\n }\n\n float getSegmentIdAtIndex(int inIdx) {\n "+h+"\n return getSegmentIds(inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = int(floor(float(outIdx) / float(\n "+i+")) * float("+n+"));\n int currentSeg = int(mod(float(outIdx), float("+i+")));\n\n float sumValue = 0.0;\n\n for (int i = 0; i < "+s+"; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n );\n\n "+c+"\n }\n\n int inIdx = inOffset + "+s+";\n if ("+(1==u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n 0,\n 0,\n 0\n );\n\n "+c+"\n } else if ("+(2==u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n 0,\n 0\n );\n\n "+c+"\n } else if ("+(3==u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n 0\n );\n\n "+c+"\n }\n setOutput(sumValue);\n }\n "},Da=function(t,e,n){var r,o;if(this.variableNames=["c","a","b"],this.outputShape=e,4<n)throw Error("Where for rank "+n+" is not yet supported");if(1===n)r=o="resRC";else{for(var i=["resRC.x","resRC.y","resRC.z","resRC.w"],a=[],s=[],u=0;u<e.length;u++)s.push(""+i[u]),u<t&&a.push(""+i[u]);r=a.join(),o=s.join()}var c=Uo(n);this.userCode="\n void main() {\n "+c+" resRC = getOutputCoords();\n float cVal = getC("+r+");\n if (cVal >= 1.0) {\n setOutput(getA("+o+"));\n } else {\n setOutput(getB("+o+"));\n }\n }\n "},Fa=(Pa.prototype.getCustomSetupFunc=function(n){var r=this;if(n.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+n.length+")");return function(t,e){null==r.startLoc&&(r.startLoc=t.getUniformLocationNoThrow(e,"start"),null==r.startLoc)||t.gl.uniform1iv(r.startLoc,n)}},Pa),Ma=["x","y","z","w","u","v"];function Pa(t){this.variableNames=["source"],this.outputShape=t,this.rank=t.length;var e,n=Uo(this.rank),r="uniform int start["+this.rank+"];",o=function(t){if(1===t)return"sourceLoc";if(t<=6)return Ma.slice(0,t).map(function(t){return"sourceLoc."+t}).join(",");throw Error("Slicing for rank "+t+" is not yet supported")}(this.rank);e="\n "+n+" sourceLoc;\n "+n+" coords = getOutputCoords();\n "+t.map(function(t,e){return"sourceLoc."+Ma[e]+" = start["+e+"] + coords."+Ma[e]+";"}).join("\n")+"\n ",this.userCode="\n "+r+"\n void main() {\n "+e+"\n setOutput(getSource("+o+"));\n }\n "}var Oa=(za.prototype.getCustomSetupFunc=function(n){var r=this;if(n.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+n.length+")");return function(t,e){null==r.startLoc&&(r.startLoc=t.getUniformLocationNoThrow(e,"start"),null==r.startLoc)||t.gl.uniform1iv(r.startLoc,n)}},za),Ba=function(t,e,n){this.variableNames=["x"];var r=(this.outputShape=n).length,o=Uo(n.length),i=Uo(n.length),a="";if(1===r)a="coords * strides + begin";else{var s=0;a=n.map(function(t,e){return s++,1===n.length?"coords * strides["+e+"] + begin["+e+"]":"coords["+(s-1)+"] * strides["+e+"] + begin["+e+"]"}).join(",")}this.userCode="\n "+o+" begin = "+o+"("+t+");\n "+o+" strides = "+o+"("+e+");\n\n void main() {\n "+i+" coords = getOutputCoords();\n setOutput(getX("+a+"));\n }\n "},La=(Wa.prototype.acquireTexture=function(t,e,n){var r,o=Ua(e,n),i=Va(t,o,n);if(i in this.freeTextures||(this.freeTextures[i]=[]),i in this.usedTextures||(this.usedTextures[i]=[]),0<this.freeTextures[i].length){this.numFreeTextures--,this.numUsedTextures++,this.log();var a=this.freeTextures[i].shift();return this.usedTextures[i].push(a),a}return this.numUsedTextures++,this.log(),o===Xt.PACKED_2X2_FLOAT32?r=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):o===Xt.PACKED_2X2_FLOAT16?r=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):o===Xt.UNPACKED_FLOAT32?r=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):o===Xt.UNPACKED_FLOAT16?r=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):o===Xt.PACKED_4X1_UNSIGNED_BYTE&&(r=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[i].push(r),r},Wa.prototype.releaseTexture=function(t,e,n,r){if(null!=this.freeTextures){var o=Va(e,Ua(n,r),r);o in this.freeTextures||(this.freeTextures[o]=[]),this.freeTextures[o].push(t),this.numFreeTextures++,this.numUsedTextures--;var i=this.usedTextures[o],a=i.indexOf(t);if(a<0)throw new Error("Cannot release a texture that was never provided by this texture manager");i.splice(a,1),this.log()}},Wa.prototype.log=function(){if(this.logEnabled){var t=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",this.numFreeTextures+" / "+this.numUsedTextures,"("+t+")")}},Wa.prototype.getNumUsedTextures=function(){return this.numUsedTextures},Wa.prototype.getNumFreeTextures=function(){return this.numFreeTextures},Wa.prototype.dispose=function(){var e=this;if(null!=this.freeTextures){for(var t in this.freeTextures)this.freeTextures[t].forEach(function(t){e.gpgpu.deleteMatrixTexture(t)});for(var t in this.usedTextures)this.usedTextures[t].forEach(function(t){e.gpgpu.deleteMatrixTexture(t)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0}},Wa);function Wa(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}function za(t){this.variableNames=["source"],this.usesPackedTextures=!0,this.outputShape=t,this.rank=t.length;var e=Uo(this.rank),n=Fo("coords",this.rank),r=Fo("sourceLoc",this.rank),o=1===this.rank?"sourceLoc":"vec2("+r.slice(-2).join()+")",i="getChannel(getSource("+r.join()+"), "+o+")",a="\n result.x = "+i+";\n if (++"+n[this.rank-1]+" < "+t[this.rank-1]+") {\n ++"+r[this.rank-1]+";\n result.y = "+i+";\n --"+r[this.rank-1]+";\n }\n ",s=1===this.rank?"":"\n --"+n[this.rank-1]+";\n if (++"+n[this.rank-2]+" < "+t[this.rank-2]+") {\n ++"+r[this.rank-2]+";\n result.z = "+i+";\n if (++"+n[this.rank-1]+" < "+t[this.rank-1]+") {\n ++"+r[this.rank-1]+";\n result.w = "+i+";\n }\n }\n ",u=this.rank<=4?"sourceLoc = coords +\n "+e+"("+t.map(function(t,e){return"start["+e+"]"}).join()+");":t.map(function(t,e){return r[e]+" = "+n[e]+" + start["+e+"];"}).join("\n");this.userCode="\n uniform int start["+this.rank+"];\n void main() {\n "+e+" coords = getOutputCoords();\n "+e+" sourceLoc;\n "+u+" \n vec4 result = vec4(0.);\n "+a+"\n "+s+"\n setOutput(result);\n }\n "}function Ua(t,e){if(t===Kt.UPLOAD)return Xt.PACKED_2X2_FLOAT32;if(t===Kt.RENDER||null==t)return n=e,_.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?n?Xt.PACKED_2X2_FLOAT32:Xt.UNPACKED_FLOAT32:n?Xt.PACKED_2X2_FLOAT16:Xt.UNPACKED_FLOAT16;var n;if(t===Kt.DOWNLOAD||t===Kt.PIXELS)return Xt.PACKED_4X1_UNSIGNED_BYTE;throw new Error("Unknown logical texture type "+t)}function Va(t,e,n){return t[0]+"_"+t[1]+"_"+e+"_"+n}var Ga=function(t,e){this.variableNames=["A"];for(var n=new Array(t.length),r=0;r<n.length;r++)n[r]=t[r]*e[r];this.outputShape=n,this.rank=n.length;var o=Uo(this.rank),i=function(t){var e=t.length;if(5<e)throw Error("Tile for rank "+e+" is not yet supported");if(1===e)return"imod(resRC, "+t[0]+")";for(var n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],r=[],o=0;o<t.length;o++)r.push("imod("+n[o]+", "+t[o]+")");return r.join()}(t);this.userCode="\n void main() {\n "+o+" resRC = getOutputCoords();\n setOutput(getA("+i+"));\n }\n "},Ha=function(t,e){this.variableNames=["A"];for(var n=new Array(t.length),r=0;r<n.length;r++)n[r]=t[e[r]];this.outputShape=n,this.rank=n.length;var o=Uo(this.rank),i=function(t){var e=t.length;if(6<e)throw Error("Transpose for rank "+e+" is not yet supported");for(var n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(e),o=0;o<t.length;o++)r[t[o]]=n[o];return r.join()}(e);this.userCode="\n void main() {\n "+o+" resRC = getOutputCoords();\n setOutput(getA("+i+"));\n }\n "},ja=function(t,e){this.variableNames=["A"],this.usesPackedTextures=!0;for(var n=new Array(t.length),r=0;r<n.length;r++)n[r]=t[e[r]];if(this.outputShape=n,this.rank=n.length,6<this.rank)throw Error("Packed transpose for rank "+this.rank+" is not yet supported.");var o=Uo(this.rank),i=Do("rc",this.rank),a=new Array(this.rank);for(r=0;r<e.length;r++)a[e[r]]=i[r];var s="vec2("+a.slice(-2).join()+")",u="++"+i[this.rank-1]+" < "+n[this.rank-1],c="getChannel(getA("+a.join()+"), "+s+")";this.userCode="\n void main() {\n "+o+" rc = getOutputCoords();\n vec4 result = vec4(0.);\n result[0] = "+c+";\n if("+u+") {\n result[1] = "+c+";\n }\n --"+i[this.rank-1]+";\n if(++"+i[this.rank-2]+" < "+n[this.rank-2]+") {\n result[2] = "+c+";\n if("+u+") {\n result[3] = "+c+";\n }\n } \n setOutput(result);\n }\n "},qa=1.7580993408473768,$a=1.0507009873554805,Ka=function(t,e){this.variableNames=["A"],this.outputShape=t,this.userCode="\n float unaryOperation(float x) {\n "+e+"\n }\n\n void main() {\n float x = getAAtOutCoords();\n float y = unaryOperation(x);\n\n setOutput(y);\n }\n "},Xa="if (isnan(x)) return x;",Ya="return abs(x);",Ja=Xa+"\n return (x < 0.0) ? 0.0 : x;\n",Qa="return (x >= 0.0) ? x : (exp(x) - 1.0);",Za="return -x;",ts="return ceil(x);",es="return floor(x);",ns="return exp(x);",rs="return exp(x) - 1.0;",os="return x;",is="\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n",as="\n vec4 result;\n\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n return result;\n",ss=function(t,e){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=t,this.userCode="\n vec4 unaryOperation(vec4 x) {\n "+e+"\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n "},us=function(t){this.variableNames=["A"],this.usesPackedTextures=!0;var e=(this.outputShape=t).length,n=Fo("rc",e),r=Uo(e),o=function(t,e){if(1===t)return"rc";for(var n="",r=0;r<t;r++)n+=e[r],r<t-1&&(n+=",");return n}(e,n),i=n.slice(-2),a=e<=1?"rc":"vec2("+i.join(",")+")";this.userCode="\n void main() {\n "+r+" rc = getOutputCoords();\n vec4 packedInput = getA("+o+");\n\n setOutput(getChannel(packedInput, "+a+"));\n }\n "},cs={};function ls(t,e){if(void 0===e&&(e=!1),"linear"===t)return"return x;";if("relu"===t)return e?is:Ja;if("elu"===t)return e?as:Qa;if("prelu"===t)return e?ei:Zo;throw new Error("Activation "+t+" has not been implemented for the WebGL backend.")}var hs=(ps.prototype.register=function(t,e,n){if(this.texData.has(t))throw new Error("Data buffer is already registered");this.texData.set(t,{shape:e,dtype:n})},ps.prototype.fromPixels=function(t,e){if(null==t)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");var n="undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement,r=t.data instanceof Uint8Array,o="undefined"!=typeof ImageData&&t instanceof ImageData,i="undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement,a="undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement,s=i?[t.videoWidth,t.videoHeight]:[t.width,t.height],u=s[0],c=s[1],l=[c,u],h=[c,u,e];if(!(n||r||o||i||a))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 "+t.constructor.name);(a||i)&&(null==this.fromPixels2DContext&&(this.fromPixels2DContext=ne(_.getNumber("WEBGL_VERSION")).getContext("2d")),this.fromPixels2DContext.canvas.width=u,this.fromPixels2DContext.canvas.height=c,this.fromPixels2DContext.drawImage(t,0,0,u,c),t=this.fromPixels2DContext.canvas);var p,f,d=this.makeTensorHandle(l,"int32");if(this.texData.get(d.dataId).usage=Kt.PIXELS,this.gpgpu.uploadPixelDataToTexture(this.getTexture(d.dataId),t),_.getBool("WEBGL_PACK")){p=new Mi(h);var v=this.makePackedTensor(p.outputShape,d.dtype);f=this.compileAndRun(p,[d],v)}else p=new Fi(h),f=this.compileAndRun(p,[d]);return this.disposeData(d.dataId),f},ps.prototype.makeTensorHandle=function(t,e){var n={};return this.register(n,t,e),{dataId:n,shape:t,dtype:e}},ps.prototype.write=function(t,e){if(null==e)throw new Error("MathBackendWebGL.write(): values can not be null");if(_.getBool("DEBUG"))for(var n=0;n<e.length;n++){var r=e[n];if(!ue(r)){if(_.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"))throw Error("The value "+r+" cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.ENV.set('WEBGL_RENDER_FLOAT32_ENABLED', true);'");throw Error("The value "+r+" cannot be represented on this device.")}}var o=this.texData.get(t);if("complex64"===o.dtype)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.releaseGPUData(t),o.usage=Kt.UPLOAD,o.values=e},ps.prototype.readSync=function(t){var e=this.texData.get(t),n=e.values,r=e.dtype,o=e.complexTensors,i=e.slice,a=e.shape,s=e.isPacked;if(null!=i){var u;u=s?new ss(a,os):new Ka(a,os);var c=this.compileAndRun(u,[{dataId:t,shape:a,dtype:r}]),l=this.readSync(c.dataId);return c.dispose(),l}if(null!=n)return this.convertAndCacheOnCPU(t);if("string"===r)return n;var h,p,f=null!=this.activeTimers;return f&&(h=tt()),p="complex64"===r?wo(o.real.dataSync(),o.imag.dataSync()):this.getValuesFromTexture(t),f&&(this.downloadWaitMs+=tt()-h),this.convertAndCacheOnCPU(t,p)},ps.prototype.read=function(E){return y(this,void 0,void 0,function(){var e,n,r,o,i,a,s,u,c,l,h,p,f,d,v,m,g,y,x,b,w,C;return I(this,function(t){switch(t.label){case 0:if(this.pendingRead.has(E))return e=this.pendingRead.get(E),[2,new Promise(function(t){return e.push(t)})];if(n=this.texData.get(E),r=n.values,o=n.shape,i=n.slice,a=n.dtype,s=n.complexTensors,u=n.isPacked,null!=i)return c=u?new ss(o,os):new Ka(o,os),l=this.compileAndRun(c,[{dataId:E,shape:o,dtype:a}]),h=this.read(l.dataId),l.dispose(),[2,h];if(null!=r)return[2,this.convertAndCacheOnCPU(E)];if(!_.getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&2===_.getNumber("WEBGL_VERSION"))throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");return p=null,"complex64"!==a&&_.get("WEBGL_BUFFER_SUPPORTED")&&(f=this.decode(E),d=this.texData.get(f.dataId),p=(C=this.gpgpu).createBufferFromTexture.apply(C,[d.texture].concat(oe(o)))),this.pendingRead.set(E,[]),"complex64"===a?[3,2]:[4,this.gpgpu.createAndWaitForFence()];case 1:t.sent(),t.label=2;case 2:return"complex64"!==a?[3,4]:[4,Promise.all([s.real.data(),s.imag.data()])];case 3:return m=t.sent(),g=m[0],y=m[1],v=wo(g,y),[3,5];case 4:v=null==p?this.getValuesFromTexture(E):(x=L(o),this.gpgpu.downloadFloat32MatrixFromBuffer(p,x)),t.label=5;case 5:return null!=f&&this.disposeData(f.dataId),b=this.convertAndCacheOnCPU(E,v),w=this.pendingRead.get(E),this.pendingRead.delete(E),w.forEach(function(t){return t(b)}),this.pendingDisposal.has(E)&&(this.pendingDisposal.delete(E),this.disposeData(E)),[2,b]}})})},ps.prototype.getValuesFromTexture=function(e){var t,n=this,r=this.texData.get(e),o=r.shape,i=r.dtype,a=r.isPacked,s=L(o);if(_.getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){var u=this.decode(e),c=this.texData.get(u.dataId),l=(t=this.gpgpu).downloadMatrixFromPackedTexture.apply(t,[c.texture].concat(oe(o))).subarray(0,s);return this.disposeData(u.dataId),l}var h=_.getBool("WEBGL_PACK")&&!0===a,p=h?Be(o):o,f=this.makeTensorHandle(p,"float32");f.size=L(o),this.texData.get(f.dataId).usage=Kt.DOWNLOAD;var d=Qe(function(){var t=h?new ki(p):new Si(p);return n.compileAndRun(t,[{shape:p,dtype:i,dataId:e}],f,null)}),v=this.texData.get(d.dataId),m=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(v.texture,v.texShape[0],v.texShape[1]).subarray(0,s);return this.disposeData(f.dataId),m},ps.prototype.time=function(u){return y(this,void 0,void 0,function(){var e,n,r,o,i,a,s;return I(this,function(t){switch(t.label){case 0:return e=this.activeTimers,r=!(n=[]),null==this.programTimersStack?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,u(),o=m(this.activeTimers.map(function(t){return t.query})).filter(function(t){return null!=t}),i=m(this.activeTimers.map(function(t){return t.name})).filter(function(t){return null!=t}),this.activeTimers=e,r&&(this.programTimersStack=null),[4,Promise.all(o)];case 1:return a=t.sent(),s={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:d(a),getExtraProfileInfo:function(){return a.map(function(t,e){return{name:i[e],ms:t}}).map(function(t){return t.name+": "+t.ms}).join(", ")},wallMs:null},this.uploadWaitMs=0,this.downloadWaitMs=0,[2,s]}})})},ps.prototype.memory=function(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU}},ps.prototype.startTimer=function(){return 0<_.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?this.gpgpu.beginQuery():{startMs:tt(),endMs:null}},ps.prototype.endTimer=function(t){return 0<_.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?this.gpgpu.endQuery():t.endMs=tt(),t},ps.prototype.getQueryTime=function(n){return y(this,void 0,void 0,function(){var e;return I(this,function(t){return 0<_.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?[2,this.gpgpu.waitForQueryAndGetTime(n)]:[2,(e=n).endMs-e.startMs]})})},ps.prototype.disposeData=function(t){if(!this.pendingDisposal.has(t))if(this.pendingRead.has(t))this.pendingDisposal.add(t);else if(this.texData.has(t)){this.releaseGPUData(t);var e=this.texData.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.texData.delete(t)}},ps.prototype.releaseGPUData=function(t){var e=this.texData.get(t),n=e.texture,r=e.dtype,o=e.texShape,i=e.usage,a=e.isPacked,s=e.slice,u=s&&s.origDataId||t,c=this.dataRefCount.get(u);1<c?this.dataRefCount.set(u,c-1):(this.dataRefCount.delete(u),null!=n&&(this.numBytesInGPU-=this.computeBytes(o,r),this.textureManager.releaseTexture(n,o,i,a)));var l=this.texData.get(t);l.texture=null,l.texShape=null,l.isPacked=!1,l.slice=null},ps.prototype.getTexture=function(t){return this.uploadToGPU(t),this.texData.get(t).texture},ps.prototype.getDataInfo=function(t){return this.texData.get(t)},ps.prototype.getCPUBackend=function(){return _.getBool("WEBGL_CPU_FORWARD")?(null==this.cpuBackend&&(this.cpuBackend=qt.findBackend("cpu")),this.cpuBackend):null},ps.prototype.shouldExecuteOnCPU=function(t,e){var n=this;return void 0===e&&(e=128),null!=this.getCPUBackend()&&t.every(function(t){return null==n.texData.get(t.dataId).texture&&t.size<e})},ps.prototype.getGPGPUContext=function(){return this.gpgpu},ps.prototype.complex=function(t,e){var n=this.makeOutputArray(t.shape,"complex64");return this.texData.get(n.dataId).complexTensors={real:qt.keep(t.clone()),imag:qt.keep(e.clone())},n},ps.prototype.real=function(t){return this.texData.get(t.dataId).complexTensors.real.clone()},ps.prototype.imag=function(t){return this.texData.get(t.dataId).complexTensors.imag.clone()},ps.prototype.slice=function(t,e,n){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.slice(t,e,n);if(0===L(n))return wn([],n,t.dtype);var r=this.texData.get(t.dataId).isPacked,o=Hr(t.shape,e,n);if(!r&&o)return this.uploadToGPU(t.dataId),this.shallowSlice(t,e,n);var i=_.getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Oa(n):new Fa(n),a=i.getCustomSetupFunc(e);return this.compileAndRun(i,[t],null,a)},ps.prototype.shallowSlice=function(t,e,n){var r=this.texData.get(t.dataId),o=yt.make(n,{},t.dtype,this),i=this.texData.get(o.dataId);Object.assign(i,r),i.shape=n,i.dtype=t.dtype;var a=jr(e,t.strides);r.slice&&(a+=r.slice.flatOffset),i.slice={flatOffset:a,origDataId:r.slice&&r.slice.origDataId||t.dataId};var s=this.dataRefCount.get(i.slice.origDataId)||1;return this.dataRefCount.set(i.slice.origDataId,s+1),o},ps.prototype.stridedSlice=function(t,e,n,r){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.stridedSlice(t,e,n,r);var o=Ur(e,n,r);if(o.some(function(t){return 0===t}))return wn([],o);var i=new Ba(e,r,o);return this.compileAndRun(i,[t])},ps.prototype.reverse=function(t,e){var n=_.getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Na(t.shape,e):new ka(t.shape,e);return this.compileAndRun(n,[t])},ps.prototype.concat=function(t,e){if("complex64"===t[0].dtype){var n=t.map(function(t){return xn(t)}),r=t.map(function(t){return bn(t)});return yn(this.concat(n,e),this.concat(r,e))}if(this.shouldExecuteOnCPU(t))return this.cpuBackend.concat(t,e);if(1===t.length)return t[0];if(t.length>_.getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){var o=Math.floor(t.length/2),i=this.concat(t.slice(0,o),e),a=this.concat(t.slice(o),e);return this.concat([i,a],e)}if(_.getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&1<t[0].rank){var s=new si(t.map(function(t){return t.shape}),e);return this.compileAndRun(s,t)}var u=mn(t.map(function(t){return t.shape}),e),c=t.map(function(t){return t.as2D(-1,L(t.shape.slice(e)))}),l=new ai(c.map(function(t){return t.shape}));return this.compileAndRun(l,c).reshape(u)},ps.prototype.neg=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.neg(t);if(_.getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,Za,t.dtype);var e=new Ka(t.shape,Za);return this.compileAndRun(e,[t])},ps.prototype.batchMatMul=function(t,e,n,r){var o=n?t.shape[2]:t.shape[1],i=r?e.shape[1]:e.shape[2],a=n?t.shape[1]:t.shape[2],s=t.shape[0];if((1===o||1===i)&&1e3<a){n&&(t=t.transpose([0,2,1])),r&&(e=e.transpose([0,2,1]));var u=1===i?t:t.as3D(s,a,1),c=1===i?2:1,l=1===i?e.as3D(s,1,a):e;return this.multiply(u,l).sum(c,!0)}var h=Pt(t.dtype,e.dtype),p=new pa(t.shape,[s,o,i],n,r),f=this.makePackedTensor(p.outputShape,h);return this.compileAndRun(p,[t,e],f)},ps.prototype.fusedBatchMatMul=function(t){var e=t.a,n=t.b,r=t.transposeA,o=t.transposeB,i=t.bias,a=t.activation,s=t.preluActivationWeights,u=r?e.shape[2]:e.shape[1],c=o?n.shape[1]:n.shape[2],l=e.shape[0],h=Pt(e.dtype,n.dtype),p=null!=i,f=null!=s,d=a?ls(a,!0):null,v=new pa(e.shape,[l,u,c],r,o,p,d,f),m=this.makePackedTensor(v.outputShape,h),g=[e,n];return i&&g.push(i),s&&g.push(s),this.compileAndRun(v,g,m)},ps.prototype.multiply=function(t,e){if("complex64"===t.dtype){var n=this.texData.get(t.dataId),r=this.texData.get(e.dataId),o=new Xo("return areal * breal - aimag * bimag;",t.shape,e.shape),i=new Xo("return areal * bimag + aimag * breal;",t.shape,e.shape),a=[this.makeComplexComponentTensorHandle(t,n.complexTensors.real),this.makeComplexComponentTensorHandle(t,n.complexTensors.imag),this.makeComplexComponentTensorHandle(e,r.complexTensors.real),this.makeComplexComponentTensorHandle(e,r.complexTensors.imag)],s=this.compileAndRun(o,a),u=this.compileAndRun(i,a),c=this.complex(s,u);return s.dispose(),u.dispose(),c}if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.multiply(t,e);if(_.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,Qo,t.dtype);var l=new ti(Qo,t.shape,e.shape),h=this.makeOutputArray(l.outputShape,t.dtype);return this.compileAndRun(l,[t,e],h)},ps.prototype.batchNormalization=function(t,e,n,r,o,i){var a=[t,e,n],s=null;null!=i&&(s=i.shape,a.push(i));var u=null;if(null!=o&&(u=o.shape,a.push(o)),_.getBool("WEBGL_PACK_NORMALIZATION")){var c=new Ko(t.shape,e.shape,n.shape,s,u,r);return this.compileAndRun(c,a)}var l=new $o(t.shape,e.shape,n.shape,s,u,r);return this.compileAndRun(l,a)},ps.prototype.localResponseNormalization4D=function(t,e,n,r,o){var i=_.getBool("WEBGL_PACK_NORMALIZATION")?new ca(t.shape,e,n,r,o):new sa(t.shape,e,n,r,o);return this.compileAndRun(i,[t])},ps.prototype.LRNGrad=function(t,e,n,r,o,i,a){var s=new ua(e.shape,r,o,i,a);return this.compileAndRun(s,[e,n,t])},ps.prototype.tile=function(t,e){if("string"===t.dtype){var n=this.readSync(t.dataId).map(function(t){return rt(t)});return Io(or(t.shape,t.dtype,n),e)}var r=new Ga(t.shape,e);return this.compileAndRun(r,[t])},ps.prototype.pad=function(t,e,n){var r=_.getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new ya(t.shape,e,n):new ga(t.shape,e,n);return this.compileAndRun(r,[t])},ps.prototype.transpose=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.transpose(t,e);var n=_.getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new ja(t.shape,e):new Ha(t.shape,e);return this.compileAndRun(n,[t])},ps.prototype.gather=function(t,e,n){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.gather(t,e,n);var r=new Pi(t.shape,e.size,n);return this.compileAndRun(r,[t,e])},ps.prototype.batchToSpaceND=function(t,e,n){O(t.rank<=4,function(){return"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"});var r=e.reduce(function(t,e){return t*e}),o=Dr(t.shape,e,r),i=Fr(o.length,e.length),a=Mr(t.shape,e,r),s=Pr(n,e.length),u=Or(a,n,e.length);return t.reshape(o).transpose(i).reshape(a).slice(s,u)},ps.prototype.spaceToBatchND=function(t,e,n){O(t.rank<=4,function(){return"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"});var r=e.reduce(function(t,e){return t*e}),o=[[0,0]];o.push.apply(o,n);for(var i=1+e.length;i<t.shape.length;++i)o.push([0,0]);var a=t.pad(o),s=Dr(a.shape,e,r,!1),u=Fr(s.length,e.length,!1),c=Mr(a.shape,e,r,!1);return a.reshape(s).transpose(u).reshape(c)},ps.prototype.reduce=function(t,e,n){var r=t.shape[0],o=t.shape[1],i=Lr(o),a=new wa({windowSize:i,inSize:o,batchSize:r},e),s=a.outputShape,u=s[0],c=s[1],l=this.makeOutputArray([u,c],n);return this.compileAndRun(a,[t],l),1===l.shape[1]?l:this.reduce(l,e,n)},ps.prototype.argReduce=function(t,e,n){void 0===n&&(n=null);var r=t.shape[0],o=t.shape[1];null!=n&&(r=n.shape[0],o=n.shape[1]);var i=Lr(o),a=new To({windowSize:i,inSize:o,batchSize:r},e,null==n),s=a.outputShape,u=s[0],c=s[1],l=this.makeOutputArray([u,c],"int32"),h=[t];return null!=n&&h.push(n),this.compileAndRun(a,h,l),1===l.shape[1]?l:this.argReduce(t,e,l)},ps.prototype.argReducePacked=function(t,e,n){void 0===n&&(n=null);var r=null!=n?n.shape:t.shape,o=Lr(r[r.length-1]),i=new Ho(r,o,e,null==n),a=this.makePackedTensor(i.outputShape,"int32"),s=null==n?[t]:[t,n];return this.compileAndRun(i,s,a),a.rank===t.rank?this.argReducePacked(t,e,a):a},ps.prototype.sum=function(t,e){hn("sum",e,t.rank);var n=cn(t.shape,e),r=n[0],o=L(n[1]),i=t.as2D(-1,o),a=Ot(t.dtype);return this.reduce(i,"sum",a).reshape(r)},ps.prototype.prod=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.prod(t,e);var n=cn(t.shape,e),r=n[0],o=L(n[1]),i=t.as2D(-1,o),a=Ot(t.dtype);return this.reduce(i,"prod",a).reshape(r)},ps.prototype.unsortedSegmentSum=function(t,e,n){var r=0,o=pn([r],t.rank),i=t;null!=o&&(i=t.transpose(o),r=dn(1,t.rank)[0]);var a=function(t,e,n){for(var r=[],o=t.length,i=0;i<o;i++)i!==e?r.push(t[i]):r.push(n);return r}(i.shape,r,n),s=L([i.shape[r]]),u=i.as2D(-1,s),c=Ot(t.dtype),l=this.segOpCompute(u,"unsortedSegmentSum",e,c,n).reshape(a);return null!=o&&(l=l.transpose(fn(o))),l},ps.prototype.segOpCompute=function(t,e,n,r,o){var i=t.shape[0],a=t.shape[1],s=function(t,e){var n,r=!1;for(t<=30?(n=t,r=!0):n=K(t,Math.floor(Math.sqrt(t)));!r;)e<n||n===t?r=!0:n=K(t,n+1);return n}(a,o),u=new Ta({windowSize:s,inSize:a,batchSize:i,numSegments:o},e),c=u.outputShape,l=c[0],h=c[1],p=this.makeOutputArray([l,h],r);return this.compileAndRun(u,[t,n],p),p.shape[1]===o?p:(n=Mn(0,o).tile([a/s]),this.segOpCompute(p,e,n,r,o))},ps.prototype.argMinMaxReduce=function(t,e,n){var r=[e];if(hn("arg"+n.charAt(0).toUpperCase()+n.slice(1),r,t.rank),!_.getBool("WEBGL_PACK_REDUCE")||t.rank<=2){var o=cn(t.shape,r),i=o[0],a=L(o[1]),s=t.as2D(-1,a);return this.argReduce(s,n).reshape(i)}return this.argReducePacked(t,n)},ps.prototype.argMin=function(t,e){return this.argMinMaxReduce(t,e,"min")},ps.prototype.argMax=function(t,e){return this.argMinMaxReduce(t,e,"max")},ps.prototype.cumsum=function(t,e,n,r){if(e!==t.rank-1)throw new Error("WebGL cumsum shader expects an inner-most axis="+(t.rank-1)+" but got axis="+e);var o=new xi(t.shape,n,r);return this.compileAndRun(o,[t])},ps.prototype.equal=function(t,e){if(_.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(equal(a, b));\n","bool");var n=new ti("return float(a == b);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},ps.prototype.notEqual=function(t,e){if(_.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(notEqual(a, b));\n","bool");var n=new ti("return float(a != b);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},ps.prototype.less=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.less(t,e);if(_.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(lessThan(a, b));\n","bool");var n=new ti("return float(a < b);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},ps.prototype.lessEqual=function(t,e){if(_.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(lessThanEqual(a, b));\n","bool");var n=new ti("return float(a <= b);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},ps.prototype.greater=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.greater(t,e);if(_.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(greaterThan(a, b));\n","bool");var n=new ti("return float(a > b);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},ps.prototype.greaterEqual=function(t,e){if(_.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(greaterThanEqual(a, b));\n","bool");var n=new ti("return float(a >= b);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},ps.prototype.logicalNot=function(t){var e=new Ka(t.shape,"return float(!(x >= 1.0));");return this.compileAndRun(e,[t])},ps.prototype.logicalAnd=function(t,e){if(_.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n","bool");var n=new ti("return float(a >= 1.0 && b >= 1.0);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},ps.prototype.logicalOr=function(t,e){if(_.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n","bool");var n=new ti("return float(a >= 1.0 || b >= 1.0);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},ps.prototype.select=function(t,e,n){var r=new Da(t.rank,e.shape,e.rank),o=this.makeOutputArray(r.outputShape,Pt(e.dtype,n.dtype));return this.compileAndRun(r,[t,e,n],o)},ps.prototype.where=function(t){en("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");var e=t.dataSync();return ko(t.shape,e)},ps.prototype.topk=function(t,e,n){return So(t.dataSync(),t.shape,t.dtype,e)},ps.prototype.min=function(t,e){hn("min",e,t.rank);var n=cn(t.shape,e),r=n[0],o=L(n[1]),i=t.as2D(-1,o);return this.reduce(i,"min",i.dtype).reshape(r)},ps.prototype.minimum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.minimum(t,e);var n=_.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new ni("\n vec4 result = vec4(min(a, b));\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new ti("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return min(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},ps.prototype.mod=function(t,e){var n=_.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new ni("\n vec4 result = mod(a, b);\n vec4 isNaN = vec4(equal(b, vec4(0.0)));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new ti("if (b == 0.0) return NAN;\n return mod(a, b);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},ps.prototype.max=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.max(t,e);hn("max",e,t.rank);var n=cn(t.shape,e),r=n[0],o=L(n[1]),i=t.as2D(-1,o);return this.reduce(i,"max",i.dtype).reshape(r)},ps.prototype.maximum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.maximum(t,e);var n=_.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new ni("\n vec4 result = vec4(max(a, b));\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new ti("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return max(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},ps.prototype.all=function(t,e){hn("all",e,t.rank);var n=cn(t.shape,e),r=n[0],o=L(n[1]),i=t.as2D(-1,o);return this.reduce(i,"all",i.dtype).reshape(r)},ps.prototype.any=function(t,e){hn("any",e,t.rank);var n=cn(t.shape,e),r=n[0],o=L(n[1]),i=t.as2D(-1,o);return this.reduce(i,"any",i.dtype).reshape(r)},ps.prototype.squaredDifference=function(t,e){var n=_.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new ni("return (a - b) * (a - b);",t.shape,e.shape):new ti("return (a - b) * (a - b);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},ps.prototype.realDivide=function(t,e){if(_.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n // vec4 one = vec4(equal(a, b));\n // return one + (vec4(1.0) - one) * a / b;\n vec4 result = a / b;\n if(b.x == 0.0) {\n result.x = NAN;\n } else if(a.x == b.x) {\n result.x = 1.;\n }\n if(b.y == 0.0) {\n result.y = NAN;\n } else if(a.y == b.y) {\n result.y = 1.;\n }\n if(b.z == 0.0) {\n result.z = NAN;\n } else if(a.z == b.z) {\n result.z = 1.;\n }\n if(b.w == 0.0) {\n result.w = NAN;\n } else if(a.w == b.w) {\n result.w = 1.;\n }\n\n return result;\n","float32",!0);var n=new ti("\nif (b == 0.0) {\n return NAN;\n}\nif (a == b) {\n return 1.0;\n};\nreturn a / b;",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"float32");return this.compileAndRun(n,[t,e],r)},ps.prototype.floorDiv=function(t,e){if(_.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n ivec4 ia = round(a);\n ivec4 ib = round(b);\n bvec4 cond = notEqual(ib, ivec4(0));\n ivec4 result = ivec4(0);\n vec4 s = sign(a) * sign(b);\n\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n if (cond[0]) {\n result[0] = idiv(ia[0], ib[0], s[0]);\n }\n if (cond[1]) {\n result[1] = idiv(ia[1], ib[1], s[1]);\n }\n if (cond[2]) {\n result[2] = idiv(ia[2], ib[2], s[2]);\n }\n if (cond[3]) {\n result[3] = idiv(ia[3], ib[3], s[3]);\n }\n return vec4(result);\n","int32");var n=new ti("\n float s = sign(a) * sign(b);\n int ia = round(a);\n int ib = round(b);\n if (ib != 0) {\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n return float(idiv(ia, ib, s));\n } else {\n return NAN;\n }\n",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"int32");return this.compileAndRun(n,[t,e],r)},ps.prototype.add=function(t,e){if("complex64"===t.dtype&&"complex64"===e.dtype)return this.complexSeparableBinaryOp(t,e,Yo);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.add(t,e);var n=Pt(t.dtype,e.dtype);if(_.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,Yo,n);var r=new ti(Yo,t.shape,e.shape),o=this.makeOutputArray(r.outputShape,n);return this.compileAndRun(r,[t,e],o)},ps.prototype.packedUnaryOp=function(t,e,n){var r=new ss(t.shape,e),o=this.makePackedTensor(r.outputShape,n);return this.compileAndRun(r,[t],o)},ps.prototype.packedBinaryOp=function(t,e,n,r,o){void 0===o&&(o=!1);var i=new ni(n,t.shape,e.shape,o),a=this.makePackedTensor(i.outputShape,r);return this.compileAndRun(i,[t,e],a)},ps.prototype.complexSeparableBinaryOp=function(s,u,c){var l=this,t=this.texData.get(s.dataId),e=this.texData.get(u.dataId),n=[[t.complexTensors.real,e.complexTensors.real],[t.complexTensors.imag,e.complexTensors.imag]].map(function(t){var e=t[0],n=t[1],r=l.makeComplexComponentTensorHandle(s,e),o=l.makeComplexComponentTensorHandle(u,n),i=new ti(c,s.shape,u.shape),a=l.makeOutputArray(i.outputShape,Pt(e.dtype,n.dtype));return l.compileAndRun(i,[r,o],a)}),r=n[0],o=n[1],i=this.complex(r,o);return r.dispose(),o.dispose(),i},ps.prototype.makeComplexComponentTensorHandle=function(t,e){return{dataId:e.dataId,dtype:e.dtype,shape:t.shape}},ps.prototype.addN=function(t){if(1===t.length)return t[0];if(t.length>_.get("WEBGL_MAX_TEXTURES_IN_SHADER")){var e=Math.floor(t.length/2),n=this.addN(t.slice(0,e)),r=this.addN(t.slice(e));return this.addN([n,r])}var o=t.map(function(t){return t.dtype}).reduce(function(t,e){return Pt(t,e)}),i=t.map(function(t){return t.shape}),a=_.getBool("WEBGL_PACK"),s=a?new Ao(t[0].shape,i):new No(t[0].shape,i),u=a?this.makePackedTensor(s.outputShape,o):this.makeOutputArray(s.outputShape,o);return this.compileAndRun(s,t,u)},ps.prototype.subtract=function(t,e){if("complex64"===t.dtype&&"complex64"===e.dtype)return this.complexSeparableBinaryOp(t,e,Jo);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.subtract(t,e);var n=Pt(t.dtype,e.dtype);if(_.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,Jo,t.dtype);var r=new ti(Jo,t.shape,e.shape),o=this.makeOutputArray(r.outputShape,n);return this.compileAndRun(r,[t,e],o)},ps.prototype.pow=function(t,e){var n=_.getBool("WEBGL_PACK_BINARY_OPERATIONS"),r=n?new ni("\n // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n vec4 result = multiplier * pow(abs(a), b);\n\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n bvec4 isExpZero = equal(b, vec4(0.0));\n result.r = isExpZero.r ? 1.0 : result.r;\n result.g = isExpZero.g ? 1.0 : result.g;\n result.b = isExpZero.b ? 1.0 : result.b;\n result.a = isExpZero.a ? 1.0 : result.a;\n\n vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new ti("\nif(a < 0.0 && floor(b) < b){\n return NAN;\n}\nif (b == 0.0) {\n return 1.0;\n}\nreturn (round(mod(b, 2.0)) != 1) ?\n pow(abs(a), b) : sign(a) * pow(abs(a), b);\n",t.shape,e.shape),o=Pt(t.dtype,e.dtype),i=n?this.makePackedTensor(r.outputShape,o):this.makeOutputArray(r.outputShape,o);return this.compileAndRun(r,[t,e],i)},ps.prototype.ceil=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.ceil(t);if(_.getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,ts,t.dtype);var e=new Ka(t.shape,ts);return this.compileAndRun(e,[t])},ps.prototype.floor=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.floor(t);if(_.getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,es,t.dtype);var e=new Ka(t.shape,es);return this.compileAndRun(e,[t])},ps.prototype.sign=function(t){var e=new Ka(t.shape,"\n if (isnan(x)) { return 0.0; }\n return sign(x);\n");return this.compileAndRun(e,[t])},ps.prototype.isNaN=function(t){var e=new Ka(t.shape,"return float(isnan(x));"),n=this.makeOutputArray(e.outputShape,"bool");return this.compileAndRun(e,[t],n)},ps.prototype.isInf=function(t){var e=new Ka(t.shape,"return float(isinf(x));"),n=this.makeOutputArray(e.outputShape,"bool");return this.compileAndRun(e,[t],n)},ps.prototype.isFinite=function(t){var e=new Ka(t.shape,"return float(!isnan(x) && !isinf(x));"),n=this.makeOutputArray(e.outputShape,"bool");return this.compileAndRun(e,[t],n)},ps.prototype.round=function(t){var e=new Ka(t.shape,"\n // OpenGL ES does not support round function.\n // The algorithm is based on banker's rounding.\n float base = floor(x);\n if ((x - base) < 0.5) {\n return floor(x);\n } else if ((x - base) > 0.5) {\n return ceil(x);\n } else {\n if (mod(base, 2.0) == 0.0) {\n return base;\n } else {\n return base + 1.0;\n }\n }\n");return this.compileAndRun(e,[t])},ps.prototype.exp=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.exp(t);if(_.getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,ns,t.dtype);var e=new Ka(t.shape,ns);return this.compileAndRun(e,[t])},ps.prototype.expm1=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.expm1(t);if(_.getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,rs,t.dtype);var e=new Ka(t.shape,rs);return this.compileAndRun(e,[t])},ps.prototype.log=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.log(t);if(_.getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,"\n vec4 result = log(x);\n vec4 isNaN = vec4(lessThan(x, vec4(0.0)));\n result.r = isNaN.r == 1.0 ? NAN : result.r;\n result.g = isNaN.g == 1.0 ? NAN : result.g;\n result.b = isNaN.b == 1.0 ? NAN : result.b;\n result.a = isNaN.a == 1.0 ? NAN : result.a;\n\n return result;\n",t.dtype);var e=new Ka(t.shape,"if (x < 0.0) return NAN;\n return log(x);");return this.compileAndRun(e,[t])},ps.prototype.log1p=function(t){var e=new Ka(t.shape,"return log(1.0 + x);");return this.compileAndRun(e,[t])},ps.prototype.sqrt=function(t){var e=new Ka(t.shape,"return sqrt(x);");return this.compileAndRun(e,[t])},ps.prototype.rsqrt=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.rsqrt(t);var e=new Ka(t.shape,"return inversesqrt(x);");return this.compileAndRun(e,[t])},ps.prototype.square=function(t){var e=new Ka(t.shape,"return x * x;");return this.compileAndRun(e,[t])},ps.prototype.reciprocal=function(t){var e=new Ka(t.shape,"return 1.0 / x;");return this.compileAndRun(e,[t])},ps.prototype.relu=function(t){var e;return e=_.getBool("WEBGL_PACK")?new ss(t.shape,is):new Ka(t.shape,Ja),this.compileAndRun(e,[t])},ps.prototype.prelu=function(t,e){var n=_.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new ni(ei,t.shape,e.shape):new ti(Zo,t.shape,e.shape);return this.compileAndRun(n,[t,e])},ps.prototype.elu=function(t){if(_.getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,as,t.dtype);var e=new Ka(t.shape,Qa);return this.compileAndRun(e,[t])},ps.prototype.eluDer=function(t,e){var n=_.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new ni("\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n",t.shape,e.shape):new ti("return (b >= 1.0) ? a : a * (b + 1.0);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},ps.prototype.selu=function(t){var e=new Ka(t.shape,"\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n // see: https://arxiv.org/abs/1706.02515\n float scaleAlpha = 1.7580993408473768;\n float scale = 1.0507009873554805;\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n");return this.compileAndRun(e,[t])},ps.prototype.int=function(t){var e=new Ka(t.shape,"return float(int(x));"),n=this.makeOutputArray(e.outputShape,"int32");return this.compileAndRun(e,[t],n)},ps.prototype.clip=function(t,e,n){var r,o=(r=_.getBool("WEBGL_PACK_CLIP")?new oi(t.shape):new ri(t.shape)).getCustomSetupFunc(e,n);return this.compileAndRun(r,[t],null,o)},ps.prototype.abs=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.abs(t);if(_.getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,Ya,t.dtype);var e=new Ka(t.shape,Ya);return this.compileAndRun(e,[t])},ps.prototype.complexAbs=function(t){var e=this.texData.get(t.dataId),n=new ii(t.shape),r=[this.makeComplexComponentTensorHandle(t,e.complexTensors.real),this.makeComplexComponentTensorHandle(t,e.complexTensors.imag)];return this.compileAndRun(n,r)},ps.prototype.sigmoid=function(t){var e=new Ka(t.shape,"return 1.0 / (1.0 + exp(-1.0 * x));");return this.compileAndRun(e,[t])},ps.prototype.softplus=function(t){var e=new Ka(t.shape,"\n float epsilon = 1.1920928955078125e-7;\n float threshold = log(epsilon) + 2.0;\n\n bool too_large = x > -threshold;\n bool too_small = x < threshold;\n\n float result;\n float exp_x = exp(x);\n\n if (too_large){\n result = x;\n }\n else if (too_small){\n result = exp_x;\n }\n else{\n result = log(exp_x + 1.0);\n }\n return result;\n");return this.compileAndRun(e,[t])},ps.prototype.sin=function(t){var e=new Ka(t.shape,"if (isnan(x)) return x;\n return sin(x);\n");return this.compileAndRun(e,[t])},ps.prototype.cos=function(t){var e=new Ka(t.shape,"if (isnan(x)) return x;\n return cos(x);\n");return this.compileAndRun(e,[t])},ps.prototype.tan=function(t){var e=new Ka(t.shape,"return tan(x);");return this.compileAndRun(e,[t])},ps.prototype.asin=function(t){var e=new Ka(t.shape,"return asin(x);");return this.compileAndRun(e,[t])},ps.prototype.acos=function(t){var e=new Ka(t.shape,"return acos(x);");return this.compileAndRun(e,[t])},ps.prototype.atan=function(t){var e=new Ka(t.shape,"if (isnan(x)) return x;\n return atan(x);\n");return this.compileAndRun(e,[t])},ps.prototype.atan2=function(t,e){var n=_.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new ni("\n vec4 result = atan(a, b);\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new ti("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return atan(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},ps.prototype.sinh=function(t){var e=new Ka(t.shape,"\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n");return this.compileAndRun(e,[t])},ps.prototype.cosh=function(t){var e=new Ka(t.shape,"\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n");return this.compileAndRun(e,[t])},ps.prototype.tanh=function(t){var e=new Ka(t.shape,"\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n");return this.compileAndRun(e,[t])},ps.prototype.asinh=function(t){var e=new Ka(t.shape,"return log(x + sqrt(x * x + 1.0));");return this.compileAndRun(e,[t])},ps.prototype.acosh=function(t){var e=new Ka(t.shape,"if (isnan(x)) return x;\n if (x < 1.0) return NAN;\n return log(x + sqrt(x * x - 1.0));");return this.compileAndRun(e,[t])},ps.prototype.atanh=function(t){var e=new Ka(t.shape,"if (isnan(x)) return x;\n if ((x < -1.0) || (x > 1.0)) return NAN;\n return (log(1.0 + x) - log(1.0 - x)) / 2.0;");return this.compileAndRun(e,[t])},ps.prototype.erf=function(t){var e=new Ka(t.shape,'\n // Error function is calculated approximately with elementary function.\n // See "Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables", Abramowitz and Stegun.\n float p = 0.3275911;\n float a1 = 0.254829592;\n float a2 = -0.284496736;\n float a3 = 1.421413741;\n float a4 = -1.453152027;\n float a5 = 1.061405429;\n\n float t = 1.0 / (1.0 + p * x);\n return 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x);\n');return this.compileAndRun(e,[t])},ps.prototype.step=function(t,e){var n,r=new Ka(t.shape,(void 0===(n=e)&&(n=0),Xa+"\n return x > 0.0 ? 1.0 : float("+n+");\n "));return this.compileAndRun(r,[t])},ps.prototype.conv2dByMatMul=function(t,e,n,r,o,i){var a=t.shape,s=this.texData.get(t.dataId),u=n.inChannels,c=a[0]*a[1]*a[2],l=n.outChannels,h="channelsLast"===n.dataFormat,p=(1==c||1===l)&&1e3<u,f=a[2]%2!=0&&!!s.isPacked;if(p||!_.getBool("WEBGL_LAZILY_UNPACK")||!_.getBool("WEBGL_PACK_BINARY_OPERATIONS")||!f){var d=h?a[0]*a[1]*a[2]:a[0]*a[2]*a[3],v=this.reshape(t,[1,d,n.inChannels]),m=this.reshape(e,[1,n.inChannels,n.outChannels]);return this.reshape(this.fusedBatchMatMul({a:v,b:m,transposeA:!1,transposeB:!1,bias:r,activation:o,preluActivationWeights:i}),n.outShape)}var g=h?a[0]*a[1]*(a[2]+1):a[0]*a[2]*(a[3]+1),y=yt.make([1,g,n.inChannels],{dataId:t.dataId},t.dtype,this),x=s.shape;s.shape=s.shape.slice(),s.shape[s.shape.length-2]++,O(ze(s.shape,y.shape),function(){return"packed reshape "+s.shape+" to "+y.shape+" isn't free"});var b=this.reshape(e,[1,n.inChannels,n.outChannels]),w=this.fusedBatchMatMul({a:y,b:b,transposeA:!1,transposeB:!1,bias:r,activation:o,preluActivationWeights:i}),C=this.texData.get(w.dataId);return O(C.isPacked,function(){return"batchMatMul result is expected to be packed"}),s.shape=x,C.shape=n.outShape,yt.make(n.outShape,{dataId:w.dataId},w.dtype,this)},ps.prototype.conv2dWithIm2Row=function(t,e,n,r,o,i){var a=n.filterWidth,s=n.filterHeight,u=n.inChannels,c=n.outWidth,l=n.outHeight,h="channelsLast"===n.dataFormat,p=a*s*u,f=l*c,d=[p,f],v=t.squeeze([0]),m=e.reshape([1,p,-1]),g=new aa(d,v.shape,n),y=this.compileAndRun(g,[v]).reshape([1,d[0],d[1]]),x=null!=r,b=null!=i,w=o?ls(o,!0):null,C=new pa(y.shape,[1,f,n.outChannels],!0,!1,x,w,b),E=[y,m];r&&E.push(r),b&&E.push(i);var _=this.compileAndRun(C,E);return h?_.reshape([1,l,c,n.outChannels]):_.reshape([1,n.outChannels,l,c])},ps.prototype.fusedConv2d=function(t,e,n,r,o,i){if(1===n.filterHeight&&1===n.filterWidth&&1===n.dilationHeight&&1===n.dilationWidth&&1===n.strideHeight&&1===n.strideWidth&&("SAME"===n.padInfo.type||"VALID"===n.padInfo.type))return this.conv2dByMatMul(t,e,n,r,o,i);if(_.getBool("WEBGL_CONV_IM2COL")&&1===t.shape[0])return this.conv2dWithIm2Row(t,e,n,r,o,i);var a=null!=r,s=null!=i,u=o?ls(o,!1):null,c=new di(n,a,u,s),l=[t,e];return r&&l.push(r),i&&l.push(i),this.compileAndRun(c,l)},ps.prototype.conv2d=function(t,e,n){if(1===n.filterHeight&&1===n.filterWidth&&1===n.dilationHeight&&1===n.dilationWidth&&1===n.strideHeight&&1===n.strideWidth&&("SAME"===n.padInfo.type||"VALID"===n.padInfo.type))return this.conv2dByMatMul(t,e,n);if(_.getBool("WEBGL_CONV_IM2COL")&&1===t.shape[0])return this.conv2dWithIm2Row(t,e,n);var r=new di(n);return this.compileAndRun(r,[t,e])},ps.prototype.conv2dDerInput=function(t,e,n){var r=new ci(n);return this.compileAndRun(r,[t,e])},ps.prototype.conv2dDerFilter=function(t,e,n){var r=new ui(n);return this.compileAndRun(r,[t,e])},ps.prototype.depthwiseConv2D=function(t,e,n){var r;return _.getBool("WEBGL_PACK_DEPTHWISECONV")&&n.strideWidth<=2&&n.outChannels/n.inChannels==1?(r=new gi(n),this.compileAndRun(r,[t,e],this.makePackedTensor(n.outShape,t.dtype))):(r=new mi(n),this.compileAndRun(r,[t,e]))},ps.prototype.depthwiseConv2DDerInput=function(t,e,n){var r=new fi(n);return this.compileAndRun(r,[t,e])},ps.prototype.depthwiseConv2DDerFilter=function(t,e,n){var r=new pi(n);return this.compileAndRun(r,[t,e])},ps.prototype.conv3d=function(t,e,n){var r=new vi(n);return this.compileAndRun(r,[t,e])},ps.prototype.conv3dDerInput=function(t,e,n){var r=new hi(n);return this.compileAndRun(r,[t,e])},ps.prototype.conv3dDerFilter=function(t,e,n){var r=new li(n);return this.compileAndRun(r,[t,e])},ps.prototype.maxPool=function(t,e){var n=new xa(e,"max",!1),r=this.makeOutputArray(n.outputShape,t.dtype);return this.compileAndRun(n,[t],r)},ps.prototype.avgPool=function(t,e){var n=new xa(e,"avg",!1),r=this.makeOutputArray(n.outputShape,"float32");return this.compileAndRun(n,[t],r)},ps.prototype.maxPoolBackprop=function(t,e,n,r){var o=new xa(r,"max",!0),i=this.compileAndRun(o,[e]),a=new la(r),s=this.makeOutputArray(a.outputShape,e.dtype),u=this.compileAndRun(a,[t,i],s);return i.dispose(),u},ps.prototype.avgPoolBackprop=function(t,e,n){var r=new jo(n),o=this.makeOutputArray(r.outputShape,e.dtype);return this.compileAndRun(r,[t],o)},ps.prototype.cast=function(t,e){return go(t,e,this)},ps.prototype.unstack=function(t,e){for(var n=t.shape[e],r=new Array(t.rank-1),o=0,i=0;i<t.rank;i++)i!==e&&(r[o++]=t.shape[i]);var a=new Array(t.rank).fill(0),s=t.shape.slice();s[e]=1;var u=new Array(n);for(i=0;i<u.length;i++)u[a[e]=i]=this.slice(t,a,s).reshape(r);return u},ps.prototype.avgPool3d=function(t,e){var n=new ba(e,"avg",!1),r=this.makeOutputArray(n.outputShape,"float32");return this.compileAndRun(n,[t],r)},ps.prototype.avgPool3dBackprop=function(t,e,n){var r=new qo(n),o=this.makeOutputArray(r.outputShape,e.dtype);return this.compileAndRun(r,[t],o)},ps.prototype.maxPool3d=function(t,e){var n=new ba(e,"max",!1),r=this.makeOutputArray(n.outputShape,"float32");return this.compileAndRun(n,[t],r)},ps.prototype.maxPool3dBackprop=function(t,e,n,r){var o=new ba(r,"max",!0),i=this.compileAndRun(o,[e]),a=new ha(r),s=this.makeOutputArray(a.outputShape,e.dtype),u=this.compileAndRun(a,[t,i],s);return i.dispose(),u},ps.prototype.reshape=function(t,e){var n=this.texData.get(t.dataId);return!n.isPacked||ze(t.shape,e)||null!==n.texture&&ze(n.shape,e)?yo(t,e):this.packedReshape(t,e)},ps.prototype.resizeBilinear=function(t,e,n,r){var o=_.getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Ra(t.shape,e,n,r):new _a(t.shape,e,n,r);return this.compileAndRun(o,[t])},ps.prototype.resizeBilinearBackprop=function(t,e,n){var r=new Ea(t,e,n);return this.compileAndRun(r,[t])},ps.prototype.resizeNearestNeighbor=function(t,e,n,r){var o=new Sa(t.shape,e,n,r);return this.compileAndRun(o,[t])},ps.prototype.resizeNearestNeighborBackprop=function(t,e,n){var r=new Ia(t,e,n);return this.compileAndRun(r,[t])},ps.prototype.multinomial=function(t,e,n,r){var o=e?t:Xr(t),i=o.shape[0],a=o.shape[1],s=new fa(i,a,n),u=this.makeOutputArray(s.outputShape,"int32"),c=s.getCustomSetupFunc(r);return this.compileAndRun(s,[o],u,c)},ps.prototype.oneHot=function(t,e,n,r){var o=new da(t.size,e,n,r);return this.compileAndRun(o,[t])},ps.prototype.diag=function(t){var e=new Ii(t.size);return this.compileAndRun(e,[t])},ps.prototype.nonMaxSuppression=function(t,e,n,r,o){return en("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"),Eo(t.dataSync(),e.dataSync(),n,r,o)},ps.prototype.cropAndResize=function(t,e,n,r,o,i){var a=new yi(t.shape,e.shape,r,o,i);return this.compileAndRun(a,[t,e,n])},ps.prototype.depthToSpace=function(t,e,n){O(1<e,function(){return"blockSize should be > 1 for depthToSpace, but was: "+e});var r=t.shape[0],o="NHWC"===n?t.shape[1]:t.shape[2],i="NHWC"===n?t.shape[2]:t.shape[3],a="NHWC"===n?t.shape[3]:t.shape[1],s=o*e,u=i*e,c=a/(e*e),l=new Ri("NHWC"===n?[r,s,u,c]:[r,c,s,u],e,n);return this.compileAndRun(l,[t])},ps.prototype.split=function(t,e,n){return Ro(t,e,n)},ps.prototype.scatterND=function(t,e,n){var r=Wr(0,t,n),o=r.sliceRank,i=r.numUpdates,a=r.sliceSize,s=r.strides,u=r.outputSize,c=[u/a,a],l=t.reshape([i,o]),h=e.reshape([i,a]);if(0===u)return yo(wn([]),n);var p=En(0),f=new Aa(i,o,l.rank,h.rank,s,c);return this.compileAndRun(f,[h,l,p]).reshape(n)},ps.prototype.sparseToDense=function(t,e,n,r){var o=Wr(0,t,n),i=o.sliceRank,a=o.numUpdates,s=o.strides,u=o.outputSize,c=new Aa(a,i,t.rank,e.rank,s,[u,1],!1);return this.compileAndRun(c,[e,t,r]).reshape(n)},ps.prototype.fft=function(t){return this.fftImpl(t,!1)},ps.prototype.ifft=function(t){return this.fftImpl(t,!0)},ps.prototype.fftImpl=function(t,e){var n=this.texData.get(t.dataId),r=new Ti("return real * expR - imag * expI;",t.shape,e),o=new Ti("return real * expI + imag * expR;",t.shape,e),i=[this.makeComplexComponentTensorHandle(t,n.complexTensors.real),this.makeComplexComponentTensorHandle(t,n.complexTensors.imag)],a=this.compileAndRun(r,i),s=this.compileAndRun(o,i),u=this.complex(a,s).as2D(t.shape[0],t.shape[1]);return a.dispose(),s.dispose(),u},ps.prototype.gatherND=function(t,e){var n=e.shape,r=n[n.length-1],o=Br(t,e),i=o[0],a=o[1],s=o[2],u=o[3],c=e.reshape([a,r]),l=t.reshape([t.size/s,s]),h=new Li(r,u,[a,s]);return this.compileAndRun(h,[l,c]).reshape(i)},ps.prototype.fill=function(t,e,n){if("string"===(n=n||q(e))){var r=T(n,L(t));return r.fill(e),yt.make(t,{values:r},n)}var o=new Di(t,e),i=o.getCustomSetupFunc(e),a=this.makeOutputArray(t,n);return this.compileAndRun(o,[],a,i)},ps.prototype.onesLike=function(t){if("string"===t.dtype)throw new Error("onesLike is not supported under string dtype");return this.fill(t.shape,1,t.dtype)},ps.prototype.zerosLike=function(t){return this.fill(t.shape,"string"===t.dtype?"":0,t.dtype)},ps.prototype.linspace=function(t,e,n){return xo(t,e,n)},ps.prototype.makeOutputArray=function(t,e){return yt.make(t,{},e,this)},ps.prototype.makePackedTensor=function(t,e){var n=yt.make(t,{},e,this);return this.texData.get(n.dataId).isPacked=!0,n},ps.prototype.unpackTensor=function(t){var e=new us(t.shape);return this.compileAndRun(e,[t],yt.make(e.outputShape,{},t.dtype,this))},ps.prototype.packTensor=function(t){var e=new va(t.shape);return this.compileAndRun(e,[t],this.makePackedTensor(t.shape,t.dtype),null,!0)},ps.prototype.packedReshape=function(t,e){var n=t.reshape([Pe(t.shape)].concat(Oe(t.shape))),r=[Pe(e)].concat(Oe(e)),o=new Ca(r,n.shape);return this.compileAndRun(o,[n]).reshape(e)},ps.prototype.decode=function(t){var e,n=this.texData.get(t),r=n.isPacked,o=n.shape,i=n.dtype,a=Be(o),s=oe(o),u=this.makeTensorHandle(o,"float32");return this.texData.get(u.dataId).isPacked=!0,this.texData.get(u.dataId).dtype=i,this.texData.get(u.dataId).texShape=s.map(function(t){return 2*t}),e=r?new _i(a,s):new Ei(a,s),this.compileAndRun(e,[{shape:a,dtype:i,dataId:t}],u,null,!0),u},ps.prototype.compileAndRun=function(o,t,e,n,r){var i=this;if(void 0===r&&(r=!1),null==e&&(e=o.usesPackedTextures?this.makePackedTensor(o.outputShape,t[0].dtype):this.makeOutputArray(o.outputShape,t[0].dtype)),0===e.size)return this.texData.get(e.dataId).values=A(e.dtype,0),e;var a=t.map(function(t){if("complex64"===t.dtype)throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");var e=i.texData.get(t.dataId);if(null==e.texture){if(!o.usesPackedTextures&&L(t.shape)<=_.getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:t.shape,texData:null,isUniform:!0,uniformValues:e.values};o.usesPackedTextures&&(e.isPacked=!0,e.shape=t.shape)}else if(!!e.isPacked!=!!o.usesPackedTextures)t=e.isPacked?i.unpackTensor(t):i.packTensor(t),e=i.texData.get(t.dataId);else if(e.isPacked&&!ze(e.shape,t.shape)){var n=t,r=t.shape;t.shape=e.shape,t=i.packedReshape(t,r),e=i.texData.get(t.dataId),n.shape=r}return i.uploadToGPU(t.dataId),{shape:t.shape,texData:e,isUniform:!1}});this.uploadToGPU(e.dataId);var s,u={shape:e.shape,texData:this.texData.get(e.dataId),isUniform:!1},c=function(t,e,n){var r="";a.concat(n).forEach(function(t){var e=null!=t.texData&&null!=t.texData.slice&&0<t.texData.slice.flatOffset,n=t.isUniform?"uniform":t.texData.texShape;r+=t.shape+"_"+n+"_"+e});var o=t.userCode;return t.constructor.name+"_"+r+"_"+o}(o,0,u),l=this.getAndSaveBinary(c,function(){return function(t,r,e,n){var o=r.userCode,i=e.map(function(t,e){var n={logicalShape:t.shape,texShape:t.isUniform?null:t.texData.texShape,isUniform:t.isUniform,isPacked:!t.isUniform&&t.texData.isPacked,flatOffset:null};return null!=t.texData&&null!=t.texData.slice&&0<t.texData.slice.flatOffset&&(n.flatOffset=t.texData.slice.flatOffset),{name:r.variableNames[e],shapeInfo:n}}),a=i.map(function(t){return t.shapeInfo}),s={logicalShape:n.shape,texShape:n.texData.texShape,isUniform:!1,isPacked:n.texData.isPacked,flatOffset:null},u=Lo(i,s,o,r.usesPackedTextures),c=t.createProgram(u),l=null,h=t.getUniformLocation(c,"NAN",!1);1===_.getNumber("WEBGL_VERSION")&&(l=t.getUniformLocation(c,"INFINITY",!1));for(var p={},f=0;f<r.variableNames.length;f++){var d=r.variableNames[f];p[d]=t.getUniformLocation(c,d,!1),p["offset"+d]=t.getUniformLocation(c,"offset"+d,!1)}return{program:r,source:u,webGLProgram:c,uniformLocations:p,inShapeInfos:a,outShapeInfo:s,infLoc:l,nanLoc:h}}(i.gpgpu,o,a,u)}),h=null!=this.activeTimers;return h&&(s=this.startTimer()),function(a,s,t,e,n){ia(s.inShapeInfos,t),ia([s.outShapeInfo],[e]);var r=e.texData.texture,o=e.texData.texShape;e.texData.isPacked?a.setOutputPackedMatrixTexture(r,o[0],o[1]):a.setOutputMatrixTexture(r,o[0],o[1]),a.setProgram(s.webGLProgram),1===_.getNumber("WEBGL_VERSION")&&null!==s.infLoc&&a.gl.uniform1f(s.infLoc,1/0),null!==s.nanLoc&&a.gl.uniform1f(s.nanLoc,NaN),t.forEach(function(t,e){var n=s.program.variableNames[e],r=s.uniformLocations[n],o=s.uniformLocations["offset"+n];if(null!=r)if(t.isUniform)if(L(t.shape)<2)a.gl.uniform1f(r,t.uniformValues[0]);else{var i=t.uniformValues;i instanceof Float32Array||(i=new Float32Array(i)),a.gl.uniform1fv(r,i)}else null!=t.texData.slice&&null!=o&&a.gl.uniform1i(o,t.texData.slice.flatOffset),a.setInputMatrixTexture(t.texData.texture,r,e)}),null!=n&&n(a,s.webGLProgram),a.executeProgram()}(this.gpgpu,l,a,u,n),h&&(s=this.endTimer(s),this.activeTimers.push({name:o.constructor.name,query:this.getQueryTime(s)})),!_.getBool("WEBGL_LAZILY_UNPACK")&&this.texData.get(e.dataId).isPacked&&!1===r?this.unpackTensor(e):e},ps.prototype.getAndSaveBinary=function(t,e){return t in this.binaryCache||(this.binaryCache[t]=e()),this.binaryCache[t]},ps.prototype.getTextureManager=function(){return this.textureManager},ps.prototype.dispose=function(){this.disposed||(this.textureManager.dispose(),null!=this.canvas&&null!=this.canvas.remove?this.canvas.remove():this.canvas=null,null!=this.fromPixels2DContext&&this.fromPixels2DContext.canvas.remove&&this.fromPixels2DContext.canvas.remove(),this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)},ps.prototype.floatPrecision=function(){var n=this;return null==this.floatPrecisionValue&&(this.floatPrecisionValue=Qe(function(){if(!_.get("WEBGL_RENDER_FLOAT32_ENABLED")){var t=_.getBool("DEBUG");_.set("DEBUG",!1);var e=n.abs(En(1e-8)).dataSync()[0];if(_.set("DEBUG",t),0<e)return 32}return 16})),this.floatPrecisionValue},ps.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},ps.prototype.uploadToGPU=function(t){var e,n=this.texData.get(t),r=n.shape,o=n.dtype,i=n.values,a=n.texture,s=n.usage,u=n.isPacked;if(null==a){var c,l=null!=this.activeTimers;l&&(c=tt());var h=n.texShape;if(null==h&&(h=Le(r,u),n.texShape=h),null!=i){var p=Be(r),f=void 0,d=h[1],v=h[0],m=i instanceof Uint8Array;f=u?(d=(e=ie(h[0],h[1]))[0],v=e[1],new Ai(p,[v,d],m)):new Ni(p,[v,d],m);var g=this.makeTensorHandle([v,d],o);this.texData.get(g.dataId).usage=m?Kt.PIXELS:Kt.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(g.dataId),d,v,i);var y=this.makeTensorHandle(f.outputShape,g.dtype);y.size=L(f.outputShape),this.texData.get(y.dataId).isPacked=u,this.compileAndRun(f,[g],y);var x=this.texData.get(y.dataId);n.texture=x.texture,n.texShape=x.texShape,n.isPacked=x.isPacked,n.usage=x.usage,this.disposeData(g.dataId),this.texData.delete(y.dataId),n.values=null,l&&(this.uploadWaitMs+=tt()-c)}else{var b=this.acquireTexture(h,s,o,u);n.texture=b}}},ps.prototype.convertAndCacheOnCPU=function(t,e){var n=this.texData.get(t),r=n.dtype;return this.releaseGPUData(t),null!=e&&(n.values=function(t,e){if("float32"===e||"complex64"===e)return t;if("int32"!==e&&"bool"!==e)throw new Error("Unknown dtype "+e);for(var n="int32"===e?new Int32Array(t.length):new Uint8Array(t.length),r=0;r<n.length;++r)n[r]=Math.round(t[r]);return n}(e,r)),n.values},ps.prototype.acquireTexture=function(t,e,n,r){if(this.numBytesInGPU+=this.computeBytes(t,n),!this.warnedAboutMemory&&this.numBytesInGPU>1024*this.numMBBeforeWarning*1024){var o=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn("High memory usage in GPU: "+o+" MB, most likely due to a memory leak")}return this.textureManager.acquireTexture(t,e,r)},ps.prototype.computeBytes=function(t,e){return t[0]*t[1]*U(e)},ps);function ps(t){if(this.gpgpu=t,this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.warnedAboutMemory=!1,this.disposed=!1,!_.getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");if(null==t){var e=ee(_.getNumber("WEBGL_VERSION"));this.binaryCache=((n=_.getNumber("WEBGL_VERSION"))in cs||(cs[n]={}),cs[n]),this.gpgpu=new ra(e),this.canvas=e.canvas,this.gpgpuCreatedLocally=!0}else this.binaryCache={},this.gpgpuCreatedLocally=!1,this.canvas=t.gl.canvas;var n;this.textureManager=new La(this.gpgpu),this.numMBBeforeWarning=null==_.global.screen?1024:_.global.screen.height*_.global.screen.width*window.devicePixelRatio*600/1024/1024,this.texData=new Jr(this,qt)}$t()&&qt.registerBackend("webgl",function(){return new hs},2);var fs=gn({abs_:function(t){var r=on(t,"x","abs");return"complex64"===r.dtype?qt.runKernel(function(t){return t.complexAbs(r)},{$x:r}):qt.runKernel(function(t,e){var n=t.abs(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.toFloat().step(-1))}}})}}),ds=gn({acos_:function(t){var r=on(t,"x","acos");return qt.runKernel(function(t,e){var n=t.acos(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.divStrict(En(1).sub(n.toFloat().square()).sqrt()).neg()}}})}}),vs=gn({acosh_:function(t){var r=on(t,"x","acosh");return qt.runKernel(function(t,e){var n=t.acosh(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.divStrict(n.toFloat().square().sub(1).sqrt())}}})}}),ms=gn({asin_:function(t){var r=on(t,"x","asin");return qt.runKernel(function(t,e){var n=t.asin(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.divStrict(En(1).sub(n.toFloat().square()).sqrt())}}})}}),gs=gn({asinh_:function(t){var r=on(t,"x","asinh");return qt.runKernel(function(t,e){var n=t.asinh(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.divStrict(En(1).add(n.toFloat().square()).sqrt())}}})}}),ys=gn({atan_:function(t){var r=on(t,"x","atan");return qt.runKernel(function(t,e){var n=t.atan(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.div(n.toFloat().square().add(1))}}})}}),xs=gn({atanh_:function(t){var r=on(t,"x","atanh");return qt.runKernel(function(t,e){var n=t.atanh(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.div(En(1).sub(n.toFloat().square()))}}})}}),bs=gn({ceil_:function(t){var e=on(t,"x","ceil");return qt.runKernel(function(t){return t.ceil(e)},{$x:e},function(t){return{$x:function(){return On(t)}}})}}),ws=gn({clipByValue_:function(t,r,o){var i=on(t,"x","clipByValue");return O(r<=o,function(){return"Error in clip: min ("+r+") must be less than or equal to max ("+o+")."}),qt.runKernel(function(t,e){var n=t.clip(i,r,o);return e([i]),n},{$x:i},function(t,e){var n=e[0];return{$x:function(){return t.where(n.greaterEqual(r).logicalAnd(n.lessEqual(o)),On(t))}}})}}),Cs=gn({cos_:function(t){var r=on(t,"x","cos");return qt.runKernel(function(t,e){var n=t.cos(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return n.toFloat().sin().neg().mul(t)}}})}}),Es=gn({cosh_:function(t){var r=on(t,"x","cosh");return qt.runKernel(function(t,e){var n=t.cosh(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return n.toFloat().sinh().mulStrict(t)}}})}}),_s=gn({erf_:function(t){var r=on(t,"x","erf");return O("int32"===r.dtype||"float32"===r.dtype,function(){return"Input dtype must be `int32` or `float32`."}),"int32"===r.dtype&&(r=r.toFloat()),qt.runKernel(function(t,e){var n=t.erf(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.square().neg().exp().mul(2/Math.sqrt(Math.PI)))}}})}}),Rs=gn({exp_:function(t){var r=on(t,"x","exp");return qt.runKernel(function(t,e){var n=t.exp(r);return e([n]),n},{$x:r},function(t,e){return{$x:function(){return t.mulStrict(e[0])}}})}}),Is=gn({expm1_:function(t){var r=on(t,"x","expm1");return qt.runKernel(function(t,e){var n=t.expm1(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.exp())}}})}}),Ss=gn({floor_:function(t){var e=on(t,"x","floor");return qt.runKernel(function(t){return t.floor(e)},{$x:e},function(t){return{$x:function(){return On(t)}}})}}),ks=gn({log_:function(t){var r=on(t,"x","log");return qt.runKernel(function(t,e){var n=t.log(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.div(n.toFloat())}}})}}),Ns=gn({log1p_:function(t){var r=on(t,"x","log1p");return qt.runKernel(function(t,e){var n=t.log1p(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.div(n.add(1))}}})}}),As=gn({logSigmoid_:function(t){var r=on(t,"x","logSigmoid");return qt.runKernel(function(t,e){var n=t.softplus(r.neg()).neg();return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.neg().sigmoid())}}})}}),Ts=gn({neg_:function(t){var e=on(t,"x","neg");return qt.runKernel(function(t){return t.neg(e)},{$x:e},function(t){return{$x:function(){return t.neg()}}})}}),Ds=gn({reciprocal_:function(t){var r=on(t,"x","reciprocal");return qt.runKernel(function(t,e){var n=t.reciprocal(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.div(n.square().neg())}}})}}),Fs=gn({round_:function(t){var e=on(t,"x","round");return qt.runKernel(function(t){return t.round(e)},{$x:e},function(t){return{$x:function(){return On(t)}}})}}),Ms=gn({rsqrt_:function(t){var r=on(t,"x","rsqrt");return qt.runKernel(function(t,e){var n=t.rsqrt(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.div(n.pow(1.5).mul(2)).neg()}}})}}),Ps=gn({sigmoid_:function(t){var r=on(t,"x","sigmoid");return qt.runKernel(function(t,e){var n=t.sigmoid(r);return e([n]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.mul(En(1).sub(n)))}}})}}),Os=gn({sign_:function(t){var e=on(t,"x","sign");return qt.runKernel(function(t){return t.sign(e)},{$x:e},function(t){return{$x:function(){return On(t)}}})}}),Bs=gn({isNaN_:function(t){var e=on(t,"x","isNaN");return qt.runKernel(function(t){return t.isNaN(e)},{$x:e},function(t){return{$x:function(){return On(t)}}})}}),Ls=gn({isInf_:function(t){var e=on(t,"x","isInf");return qt.runKernel(function(t){return t.isInf(e)},{$x:e},function(t){return{$x:function(){return On(t)}}})}}),Ws=gn({isFinite_:function(t){var e=on(t,"x","isFinite");return qt.runKernel(function(t){return t.isFinite(e)},{$x:e},function(t){return{$x:function(){return On(t)}}})}}),zs=gn({sin_:function(t){var r=on(t,"x","sin");return qt.runKernel(function(t,e){var n=t.sin(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return n.toFloat().cos().mul(t)}}})}}),Us=gn({sinh_:function(t){var r=on(t,"x","sinh");return qt.runKernel(function(t,e){var n=t.sinh(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return n.toFloat().cosh().mulStrict(t)}}})}}),Vs=gn({softplus_:function(t){var r=on(t,"x","softplus");return qt.runKernel(function(t,e){var n=t.softplus(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.sigmoid())}}})}}),Gs=gn({sqrt_:function(t){var r=on(t,"x","sqrt");return qt.runKernel(function(t,e){var n=t.sqrt(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.div(n.toFloat().sqrt().mul(2))}}})}}),Hs=gn({square_:function(t){var n=on(t,"x","square");return qt.runKernel(function(t,e){return e([n]),t.square(n)},{$x:n},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.toFloat().mul(2))}}})}}),js=gn({step_:function(t,e){void 0===e&&(e=0);var n=on(t,"x","step");return qt.runKernel(function(t){return t.step(n,e)},{$x:n},function(t){return{$x:function(){return On(t)}}})}}),qs=gn({tan_:function(t){var r=on(t,"x","tan");return qt.runKernel(function(t,e){var n=t.tan(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.div(n.cos().square())}}})}}),$s=gn({tanh_:function(t){var r=on(t,"x","tanh");return qt.runKernel(function(t,e){var n=t.tanh(r);return e([n]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return En(1).sub(n.square()).mulStrict(t)}}})}});function Ks(t,e,n,r,o,i){var a,s,u=on(t,"x","batchNorm"),c=on(e,"mean","batchNorm"),l=on(n,"variance","batchNorm");return null!=o&&(a=on(o,"scale","batchNorm")),null!=r&&(s=on(r,"offset","batchNorm")),O(2===u.rank,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+u.rank+"."}),O(2===c.rank||1===c.rank,function(){return"Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank "+c.rank+"."}),O(2===l.rank||1===l.rank,function(){return"Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank "+l.rank+"."}),null!=a&&O(2===a.rank||1===a.rank,function(){return"Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank "+a.rank+"."}),null!=s&&O(2===s.rank||1===s.rank,function(){return"Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank "+s.rank+"."}),Js(u,c,l,s,a,i)}function Xs(t,e,n,r,o,i){var a,s,u=on(t,"x","batchNorm"),c=on(e,"mean","batchNorm"),l=on(n,"variance","batchNorm");return null!=o&&(a=on(o,"scale","batchNorm")),null!=r&&(s=on(r,"offset","batchNorm")),O(3===u.rank,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+u.rank+"."}),O(3===c.rank||1===c.rank,function(){return"Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank "+c.rank+"."}),O(3===l.rank||1===l.rank,function(){return"Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank "+l.rank+"."}),null!=a&&O(3===a.rank||1===a.rank,function(){return"Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank "+a.rank+"."}),null!=s&&O(3===s.rank||1===s.rank,function(){return"Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank "+s.rank+"."}),Js(u,c,l,s,a,i)}function Ys(t,e,n,r,o,i){var a,s,u=on(t,"x","batchNorm"),c=on(e,"mean","batchNorm"),l=on(n,"variance","batchNorm");return null!=o&&(a=on(o,"scale","batchNorm")),null!=r&&(s=on(r,"offset","batchNorm")),O(4===u.rank,function(){return"Error in batchNorm4D: x must be rank 4 but got rank "+u.rank+"."}),O(4===c.rank||1===c.rank,function(){return"Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank "+c.rank+"."}),O(4===l.rank||1===l.rank,function(){return"Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank "+l.rank+"."}),null!=a&&O(4===a.rank||1===a.rank,function(){return"Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank "+a.rank+"."}),null!=s&&O(4===s.rank||1===s.rank,function(){return"Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank "+s.rank+"."}),Js(u,c,l,s,a,i)}function Js(t,e,n,r,o,v){null==v&&(v=.001);var i,a,m,s=on(t,"x","batchNorm"),u=on(e,"mean","batchNorm"),c=on(n,"variance","batchNorm");return null!=o&&(i=on(o,"scale","batchNorm")),null!=r&&(a=on(r,"offset","batchNorm")),O(u.rank===c.rank,function(){return"Batch normalization gradient requires mean and variance to have equal ranks."}),O(null==a||u.rank===a.rank,function(){return"Batch normalization gradient requires mean and offset to have equal ranks."}),O(null==i||u.rank===i.rank,function(){return"Batch normalization gradient requires mean and scale to have equal ranks."}),m=0===s.rank||1===s.rank?s.as4D(1,1,1,s.size):2===s.rank?s.as4D(1,1,s.shape[0],s.shape[1]):3===s.rank?s.as4D(1,s.shape[0],s.shape[1],s.shape[2]):s,qt.runKernel(function(t,e){var n=t.batchNormalization(m,Qs(u),Qs(c),v,Qs(i),Qs(a));return e([s,u,c,i]),n},{$x:s,$mean:u,$variance:c,$scale:i,$offset:a},function(n,t){var e=t,r=e[0],o=e[1],i=e[2],a=e[3],s=null==a?En(1):a,u=no(o.shape,m.shape),c=[];if(1===o.rank){for(var l=0;l<m.shape.length-1;++l)c.push(m.shape[l]);c.push(1)}var h=r.sub(o),p=n.mul(s),f=Ms(i.add(En(v))),d=f.mul(f).mul(f).mul(En(-.5));return{$x:function(){return 1===o.rank?n.mul(Nr(f.as4D(1,1,1,o.shape[0]),c)).mul(s).reshape(r.shape):n.mul(f).mul(s).reshape(r.shape)},$mean:function(){var t=f.mul(En(-1)).mul(p);return 1===o.rank&&(t=t.sum(u)),t.reshape(o.shape)},$variance:function(){var t=d.mul(h).mul(p);return 1===o.rank&&(t=t.sum(u)),t.reshape(o.shape)},$scale:function(){var t=h.mul(f),e=n.mul(t);return 1===o.rank&&(e=e.sum(u)),e.reshape(o.shape)},$offset:function(){var t=n;return 1===o.rank&&(t=t.sum(u)),t.reshape(o.shape)}}}).reshape(s.shape)}function Qs(t){return null==t?null:0===t.rank?t.as1D():1===t.rank?t:2===t.rank?t.as4D(1,1,t.shape[0],t.shape[1]):3===t.rank?t.as4D(1,t.shape[0],t.shape[1],t.shape[2]):t}function Zs(){Je("tf.batchNormalization() is going away. Use tf.batchNorm() instead, and note the positional argument change of scale, offset, and varianceEpsilon")}function tu(o){return y(this,void 0,void 0,function(){var e,n,r;return I(this,function(t){switch(t.label){case 0:return[4,(e=on(o,"condition","whereAsync","bool")).data()];case 1:return n=t.sent(),r=ko(e.shape,n),o!==e&&e.dispose(),[2,r]}})})}var eu=gn({batchNormalization2d_:function(t,e,n,r,o,i){return void 0===r&&(r=.001),Zs(),Ks(t,e,n,i,o,r)}}),nu=gn({batchNormalization3d_:function(t,e,n,r,o,i){return void 0===r&&(r=.001),Zs(),Xs(t,e,n,i,o,r)}}),ru=gn({batchNormalization4d_:function(t,e,n,r,o,i){return void 0===r&&(r=.001),Zs(),Ys(t,e,n,i,o,r)}}),ou=gn({batchNormalization_:function(t,e,n,r,o,i){return void 0===r&&(r=.001),Zs(),Js(t,e,n,i,o,r)}}),iu=gn({batchNorm_:Js}),au=gn({batchNorm2d_:Ks}),su=gn({batchNorm3d_:Xs}),uu=gn({batchNorm4d_:Ys}),cu=gn({logicalAnd_:function(t,e){var n=on(t,"a","logicalAnd","bool"),r=on(e,"b","logicalAnd","bool");return ro(n.shape,r.shape),qt.runKernel(function(t){return t.logicalAnd(n,r)},{$a:n,$b:r})}}),lu=gn({logicalNot_:function(t){var e=on(t,"x","logicalNot","bool");return qt.runKernel(function(t){return t.logicalNot(e)},{$x:e})}}),hu=gn({logicalOr_:function(t,e){var n=on(t,"a","logicalOr","bool"),r=on(e,"b","logicalOr","bool");return ro(n.shape,r.shape),qt.runKernel(function(t){return t.logicalOr(n,r)},{$a:n,$b:r})}}),pu=gn({logicalXor_:function(t,e){var n=on(t,"a","logicalXor","bool"),r=on(e,"b","logicalXor","bool");return ro(n.shape,r.shape),hu(t,e).logicalAnd(cu(t,e).logicalNot())}}),fu=gn({where_:function(t,e,n){var r=on(e,"a","where"),o=on(n,"b","where"),i=on(t,"condition","where","bool");return x(r.shape,o.shape,"Error in where: "),1===i.rank?O(i.shape[0]===r.shape[0],function(){return"The first dimension of `a` must match the size of `condition`."}):x(i.shape,o.shape,"Error in where: "),qt.runKernel(function(t,e){var n=t.select(i,r,o);return e([i]),n},{$condition:i,$a:r,$b:o},function(t,e){var n=e[0];return{$condition:function(){return On(n).toFloat()},$a:function(){return t.mul(n.cast(t.dtype))},$b:function(){return t.mul(n.logicalNot().cast(t.dtype))}}})}}),du=gn({add_:function(t,e){var n,r=on(t,"a","add"),o=on(e,"b","add");n=Bt(r,o),r=n[0],o=n[1];var i=ro(r.shape,o.shape);return qt.runKernel(function(t){return t.add(r,o)},{$a:r,$b:o},function(n){return{$a:function(){var t=n,e=no(r.shape,i);return 0<e.length&&(t=t.sum(e)),t.reshape(r.shape)},$b:function(){var t=n,e=no(o.shape,i);return 0<e.length&&(t=t.sum(e)),t.reshape(o.shape)}}})}}),vu=gn({addN_:function(t){O(Array.isArray(t),function(){return"The argument passed to tf.addN() must be a list of tensors"}),O(1<=t.length,function(){return"Must pass at least one tensor to tf.addN(), but got "+t.length});var e=t.map(function(t,e){return on(t,"tensors"+e,"addN")}),n=e[0];e.forEach(function(t){if(t.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),e.forEach(function(t){if(!k(t.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});var r=e;return qt.runKernel(function(t){return t.addN(e)},r,function(n){var r={};return e.forEach(function(t,e){r[e]=function(){return n.clone()}}),r})}}),mu=gn({addStrict_:function(t,e){var n=on(t,"a","addStrict"),r=on(e,"b","addStrict");return x(n.shape,r.shape,"Error in addStrict: "),n.add(r)}}),gu=gn({atan2_:function(t,e){var n,r=on(t,"a","atan2"),o=on(e,"b","atan2");n=Bt(r,o),r=n[0],o=n[1];var a=ro(r.shape,o.shape);return qt.runKernel(function(t,e){var n=t.atan2(r,o);return e([r,o]),n},{$a:r,$b:o},function(r,t){var o=t[0],i=t[1];return{$a:function(){var t=du(o.square(),i.square()),e=r.mul(i.div(t)),n=no(o.shape,a);return 0<n.length&&(e=e.sum(n)),e.reshape(o.shape)},$b:function(){var t=du(o.square(),i.square()),e=Ts(r.mul(o.div(t))),n=no(i.shape,a);return 0<n.length&&(e=e.sum(n)),e.reshape(i.shape)}}})}}),yu=gn({div_:function(t,e){var n,r=on(t,"a","div"),o=on(e,"b","div");if(n=Bt(r,o),r=n[0],o=n[1],"int32"===r.dtype&&"int32"===o.dtype)return bu(r,o);var a=ro(r.shape,o.shape);return qt.runKernel(function(t,e){var n=t.realDivide(r,o);return e([r,o]),n},{$a:r,$b:o},function(r,t){var o=t[0],i=t[1];return{$a:function(){var t=r.div(i.toFloat()),e=no(o.shape,a);return 0<e.length?t.sum(e).reshape(o.shape):t},$b:function(){var t=r.mul(o.toFloat()),e=no(i.shape,a);0<e.length&&(t=t.sum(e).reshape(i.shape));var n=i.square();return t.div(n.toFloat()).neg()}}})}}),xu=gn({divStrict_:function(t,e){var n=on(t,"a","div"),r=on(e,"b","div");return x(n.shape,r.shape,"Error in divideStrict: "),n.div(r)}}),bu=gn({floorDiv_:function(t,e){var n,r=on(t,"a","floorDiv"),o=on(e,"b","floorDiv");n=Bt(r,o),r=n[0],o=n[1];var a=ro(r.shape,o.shape);return qt.runKernel(function(t,e){var n=t.floorDiv(r,o);return e([r,o]),n},{$a:r,$b:o},function(r,t){var o=t[0],i=t[1];return{$a:function(){var t=r.div(i.toFloat()),e=no(o.shape,a);return 0<e.length?t.sum(e).reshape(o.shape):t},$b:function(){var t=r.mul(o.toFloat()),e=no(i.shape,a);0<e.length&&(t=t.sum(e).reshape(i.shape));var n=i.square();return t.div(n.toFloat()).neg()}}})}}),wu=gn({maximum_:function(t,e){var n,r=on(t,"a","maximum"),o=on(e,"b","maximum");return n=Bt(r,o),r=n[0],o=n[1],"bool"===r.dtype&&(r=r.toInt(),o=o.toInt()),ro(r.shape,o.shape),qt.runKernel(function(t,e){var n=t.maximum(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return{$a:function(){return t.mul(n.greaterEqual(r).toFloat())},$b:function(){return t.mul(n.less(r).toFloat())}}})}}),Cu=gn({maximumStrict_:function(t,e){var n=on(t,"a","maximumStrict"),r=on(e,"b","maximumStrict");return x(n.shape,r.shape,"Error in maximumStrict: "),n.maximum(r)}}),Eu=gn({minimum_:function(t,e){var n,r=on(t,"a","minimum"),o=on(e,"b","minimum");return n=Bt(r,o),r=n[0],o=n[1],"bool"===r.dtype&&(r=r.toInt(),o=o.toInt()),ro(r.shape,o.shape),qt.runKernel(function(t,e){var n=t.minimum(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return{$a:function(){return t.mul(n.lessEqual(r).toFloat())},$b:function(){return t.mul(n.greater(r).toFloat())}}})}}),_u=gn({minimumStrict_:function(t,e){var n=on(t,"a","minimumStrict"),r=on(e,"b","minimumStrict");return x(n.shape,r.shape,"Error in minimumStrict: "),n.minimum(r)}}),Ru=gn({mod_:function(t,e){var n,r=on(t,"a","mod"),o=on(e,"b","mod");n=Bt(r,o),r=n[0],o=n[1];var i=ro(r.shape,o.shape);return qt.runKernel(function(t,e){var n=t.mod(r,o);return e([r,o]),n},{$a:r,$b:o},function(n,t){var r=t[0],o=t[1];return{$a:function(){var t=no(r.shape,i);return 0<t.length?n.sum(t).reshape(r.shape):n},$b:function(){var t=n.mul(r.div(o).floor().neg()),e=no(o.shape,i);return 0<e.length?t.sum(e).reshape(o.shape):t}}})}}),Iu=gn({modStrict_:function(t,e){var n=on(t,"a","modStrict"),r=on(e,"b","modStrict");return x(n.shape,r.shape,"Error in modStrict: "),n.mod(r)}}),Su=gn({mul_:function(t,e){var n,r=on(t,"a","mul"),o=on(e,"b","mul");n=Bt(r,o),r=n[0],o=n[1];var i=ro(r.shape,o.shape);return qt.runKernel(function(t,e){var n=t.multiply(r,o);return e([r,o]),n},{$a:r,$b:o},function(n,t){var r=t[0],o=t[1];return{$a:function(){var t=n.mul(o.toFloat()),e=no(r.shape,i);return 0<e.length?t.sum(e).reshape(r.shape):t},$b:function(){var t=n.mul(r.toFloat()),e=no(o.shape,i);return 0<e.length?t.sum(e).reshape(o.shape):t}}})}}),ku=gn({mulStrict_:function(t,e){var n=on(t,"a","mul"),r=on(e,"b","mul");return x(n.shape,r.shape,"Error in multiplyStrict: "),n.mul(r)}}),Nu=gn({pow_:function(t,e){var r=on(t,"base","pow"),o=on(e,"exp","pow"),u=ro(r.shape,o.shape);return t=r.cast(Pt(r.dtype,o.dtype)),e=o.cast(Pt(r.dtype,o.dtype)),qt.runKernel(function(t,e){var n=t.pow(r,o);return e([r,o,n]),n},{$base:r,$exp:o},function(o,t){var i=t[0],a=t[1],s=t[2];return{$base:function(){var t=a.toFloat(),e=o.mul(t.mul(i.pow(t.sub(En(1))))),n=no(i.shape,u);return 0<n.length&&(e=e.sum(n)),e.reshape(i.shape)},$exp:function(){var t=i.greater(0),e=i.log().where(t,On(i)),n=o.mul(s.mul(e)),r=no(a.shape,u);return 0<r.length&&(n=n.sum(r)),n.reshape(a.shape)}}})}}),Au=gn({powStrict_:function(t,e){return x(t.shape,e.shape,"Error in powStrict: "),t.pow(e)}}),Tu=gn({squaredDifference_:function(t,e){var n,r=on(t,"a","squaredDifference"),o=on(e,"b","squaredDifference");return n=Bt(r,o),r=n[0],o=n[1],ro(r.shape,o.shape),qt.runKernel(function(t,e){var n=t.squaredDifference(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1],o=En(2);return{$a:function(){return t.mul(n.sub(r).mul(o))},$b:function(){return t.mul(r.sub(n).mul(o))}}})}}),Du=gn({squaredDifferenceStrict_:function(t,e){var n=on(t,"a","squaredDifferenceStrict"),r=on(e,"b","squaredDifferenceStrict");return x(n.shape,r.shape,"Error in squaredDifferenceStrict: "),n.squaredDifference(r)}}),Fu=gn({sub_:function(t,e){var n,r=on(t,"a","sub"),o=on(e,"b","sub");n=Bt(r,o),r=n[0],o=n[1];var i=ro(r.shape,o.shape);return qt.runKernel(function(t){return t.subtract(r,o)},{$a:r,$b:o},function(n){return{$a:function(){var t=n,e=no(r.shape,i);return 0<e.length&&(t=t.sum(e)),t.reshape(r.shape)},$b:function(){var t=n,e=no(o.shape,i);return 0<e.length&&(t=t.sum(e)),t.neg().reshape(o.shape)}}})}}),Mu=gn({subStrict_:function(t,e){var n=on(t,"a","subStrict"),r=on(e,"b","subStrict");return x(n.shape,r.shape,"Error in subStrict: "),n.sub(r)}}),Pu=gn({equal_:function(t,e){var n,r=on(t,"a","equal"),o=on(e,"b","equal");return n=Bt(r,o),r=n[0],o=n[1],ro(r.shape,o.shape),qt.runKernel(function(t){return t.equal(r,o)},{$a:r,$b:o})}}),Ou=gn({equalStrict_:function(t,e){var n=on(t,"a","equalStrict"),r=on(e,"b","equalStrict");return x(n.shape,r.shape,"Error in equalStrict: "),n.equal(r)}}),Bu=gn({greater_:function(t,e){var n,r=on(t,"a","greater"),o=on(e,"b","greater");return n=Bt(r,o),r=n[0],o=n[1],ro(r.shape,o.shape),qt.runKernel(function(t){return t.greater(r,o)},{$a:r,$b:o})}}),Lu=gn({greaterEqual_:function(t,e){var n,r=on(t,"a","greaterEqual"),o=on(e,"b","greaterEqual");return n=Bt(r,o),r=n[0],o=n[1],ro(r.shape,o.shape),qt.runKernel(function(t,e){var n=t.greaterEqual(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return{$a:function(){return On(n)},$b:function(){return On(r)}}})}}),Wu=gn({greaterEqualStrict_:function(t,e){var n=on(t,"a","greaterEqualStrict"),r=on(e,"b","greaterEqualStrict");return x(n.shape,r.shape,"Error in greaterEqualStrict: "),n.greaterEqual(r)}}),zu=gn({greaterStrict_:function(t,e){var n=on(t,"a","greaterStrict"),r=on(e,"b","greaterStrict");return x(n.shape,r.shape,"Error in greaterStrict: "),n.greater(r)}}),Uu=gn({less_:function(t,e){var n,r=on(t,"a","less"),o=on(e,"b","less");return n=Bt(r,o),r=n[0],o=n[1],ro(r.shape,o.shape),qt.runKernel(function(t){return t.less(r,o)},{$a:r,$b:o})}}),Vu=gn({lessEqual_:function(t,e){var n,r=on(t,"a","lessEqual"),o=on(e,"b","lessEqual");return n=Bt(r,o),r=n[0],o=n[1],ro(r.shape,o.shape),qt.runKernel(function(t){return t.lessEqual(r,o)},{$a:r,$b:o})}}),Gu=gn({lessEqualStrict_:function(t,e){var n=on(t,"a","lessEqualStrict"),r=on(e,"b","lessEqualStrict");return x(n.shape,r.shape,"Error in lessEqualStrict: "),n.lessEqual(r)}}),Hu=gn({lessStrict_:function(t,e){var n=on(t,"a","lessStrict"),r=on(e,"b","lessStrict");return x(n.shape,r.shape,"Error in lessStrict: "),n.less(r)}}),ju=gn({notEqual_:function(t,e){var n,r=on(t,"a","notEqual"),o=on(e,"b","notEqual");return n=Bt(r,o),r=n[0],o=n[1],ro(r.shape,o.shape),qt.runKernel(function(t){return t.notEqual(r,o)},{$a:r,$b:o})}}),qu=gn({notEqualStrict_:function(t,e){var n=on(t,"a","notEqualStrict"),r=on(e,"b","notEqualStrict");return x(n.shape,r.shape,"Error in notEqualStrict: "),n.notEqual(r)}});function $u(t,e){for(var n=[],r=t;r<e;++r)n.push(r);return n}function Ku(t){for(var e=[],n=0;n<t.length;++n)for(var r=0;r<t[n].length;++r)e.push(t[n][r]);return e}function Xu(d,v,m){return y(this,void 0,void 0,function(){var e,n,r,o,i,a,s,u,c,l,h,p,f;return I(this,function(t){switch(t.label){case 0:for(e=on(d,"tensor","boolMask"),n=on(v,"mask","boolMask","bool"),r=null==m?0:m,o=n.rank,i=e.shape,O(0<o,function(){return"mask cannot be scalar"}),x(i.slice(r,r+o),n.shape,"mask's shape must match the first K dimensions of tensor's shape,"),a=1,s=r;s<r+o;s++)a*=i[s];return u=i.slice(0,r).concat([a],i.slice(r+o)),c=e.reshape(u),l=n.reshape([-1]),[4,tu(l)];case 1:return h=t.sent(),p=h.squeeze([1]),f=Yu(c,p,r),d!==e&&e.dispose(),v!==n&&n.dispose(),p.dispose(),c.dispose(),l.dispose(),h.dispose(),[2,f]}})})}var Yu=gn({gather_:function(t,e,g){void 0===g&&(g=0);var y=on(t,"x","gather"),r=on(e,"indices","gather","int32");g=S(g,y.shape)[0];var n=function(t,e,n){for(var r=t.shape[n],o=[],i=1,a=1,s=0;s<n;s++)o.push(t.shape[s]),i*=t.shape[s];for(s=0;s<e.rank;s++)o.push(e.shape[s]);for(s=n+1;s<t.rank;s++)o.push(t.shape[s]),a*=t.shape[s];return{batchSize:i,sliceSize:a,dimSize:r,outputShape:o}}(y,r,g);return qt.runKernel(function(t,e){var n=t.gather(y,r.flatten(),g);return e([r]),n},{$x:y},function(v,t){var m=t[0];return{$x:function(){var t=y.shape,e=m.size,n=t.slice(0,g),r=n.length,o=t.slice(g,t.length).slice(1),i=o.length,a=$u(0,r),s=$u(r+1,r+1+i),u=Ku([n,[e],o]),c=v.reshape(u),l=m.reshape([e]),h=Ku([[r],a,s]),p=c.transpose(h),f=Ju(p,l,y.shape[g]),d=fn(h);return f.transpose(d)}}}).reshape(n.outputShape)}}),Ju=gn({unsortedSegmentSum_:function(t,e,r){var o=on(t,"x","unsortedSegmentSum"),i=on(e,"segmentIds","unsortedSegmentSum","int32");return O(B(r),function(){return"numSegments must be of dtype int"}),qt.runKernel(function(t,e){var n=t.unsortedSegmentSum(o,i,r);return e([i]),n},{$x:o},function(t,e){var n=e[0];return{$x:function(){return function(t,e){for(var n=wu(e,On(e)),r=Yu(t,n),o=Lu(e,En(0,"int32")),i=r.rank-o.rank,a=0;a<i;++a)o=pr(o,a+1);o=cu(o,An(r.shape,"bool"));var s=On(r);return fu(o,r,s)}(t,n)}}})}});function Qu(t,e,r,o,i,a,s){void 0===a&&(a="NHWC"),O(t.length===e.rank,function(){return"Length of inShape ("+t.length+") and rank of dy ("+e.rank+") must match"});var n=t,u=e,c=!1;3===e.rank&&(c=!0,u=e.as4D(1,e.shape[0],e.shape[1],e.shape[2]),n=[1,t[0],t[1],t[2]]),O(4===n.length,function(){return"Error in conv2dDerInput: inShape must be length 4, but got length "+n.length+"."}),O(4===u.rank,function(){return"Error in conv2dDerInput: dy must be rank 4, but got rank "+u.rank}),O(4===r.rank,function(){return"Error in conv2dDerInput: filter must be rank 4, but got rank "+r.rank});var l="NHWC"===a?n[3]:n[1],h="NHWC"===a?u.shape[3]:u.shape[1];O(l===r.shape[2],function(){return"Error in conv2dDerInput: depth of input ("+l+") must match input depth for filter "+r.shape[2]+"."}),O(h===r.shape[3],function(){return"Error in conv2dDerInput: depth of output ("+h+") must match output depth for filter "+r.shape[3]+"."}),null!=s&&O(B(i),function(){return"Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode "+s+" but got pad "+i+"."});var p=mo(a),f=ao(n,r.shape,o,1,i,s,!1,p),d=qt.runKernel(function(t,e){var n=t.conv2dDerInput(u,r,f);return e([r,u]),n},{dy4D:u,filter:r},function(t,e){var n=e[0],r=e[1];return{dy4D:function(){return rc(t,n,o,i,a,1,s)},filter:function(){return ic(t,r,n.shape,o,i,a,s)}}});return c?d.as3D(d.shape[1],d.shape[2],d.shape[3]):d}function Zu(t,e,n,r,o,i,a){void 0===i&&(i="NHWC");var s=t;3===t.rank&&(s=t.as4D(1,t.shape[0],t.shape[1],t.shape[2]));var u=e;3===u.rank&&(u=e.as4D(1,e.shape[0],e.shape[1],e.shape[2])),O(4===s.rank,function(){return"Error in conv2dDerFilter: input must be rank 4, but got shape "+s.shape+"."}),O(4===u.rank,function(){return"Error in conv2dDerFilter: dy must be rank 4, but got shape "+u.shape+"."}),O(4===n.length,function(){return"Error in conv2dDerFilter: filterShape must be length 4, but got "+n+"."});var c="NHWC"===i?s.shape[3]:s.shape[1],l="NHWC"===i?u.shape[3]:u.shape[1];O(c===n[2],function(){return"Error in conv2dDerFilter: depth of input "+c+") must match input depth in filter ("+n[2]+"."}),O(l===n[3],function(){return"Error in conv2dDerFilter: depth of dy ("+l+") must match output depth for filter ("+n[3]+")."}),null!=a&&O(B(o),function(){return"Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+o+"."});var h=mo(i),p=ao(s.shape,n,r,1,o,a,!1,h);return qt.runKernel(function(t){return t.conv2dDerFilter(s,u,p)},{x4D:s,dy4D:u})}function tc(t){var e,n="number"==typeof(e=t)?[e,e,e]:2===e.length?[e[0],e[1],1]:e,r=n[0],o=n[1],i=n[2];return 1===r&&1===o&&1===i}function ec(t,e,n,r,o){O(t.length===e.rank,function(){return"Length of inShape ("+t.length+") and rank of dy ("+e.rank+") must match"});var i=t,a=e,s=!1;4===e.rank&&(s=!0,a=e.as5D(1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]),i=[1,t[0],t[1],t[2],t[3]]);var u=i[4],c=a.shape[4];O(5===i.length,function(){return"Error in conv3dDerInput: inShape must be length 5, but got length "+i.length+"."}),O(5===a.rank,function(){return"Error in conv3dDerInput: dy must be rank 5, but got rank "+a.rank}),O(5===n.rank,function(){return"Error in conv3dDerInput: filter must be rank 5, but got rank "+n.rank}),O(u===n.shape[3],function(){return"Error in conv3dDerInput: depth of input ("+u+") must match input depth for filter "+n.shape[3]+"."}),O(c===n.shape[4],function(){return"Error in conv3dDerInput: depth of output ("+c+") must match output depth for filter "+n.shape[4]+"."});var l=so(i,n.shape,r,1,o),h=qt.runKernel(function(t){return t.conv3dDerInput(a,n,l)},{dy5D:a});return s?h.as4D(h.shape[1],h.shape[2],h.shape[3],h.shape[4]):h}var nc=gn({conv1d_:function(t,e,n,r,o,i,a){void 0===o&&(o="NWC"),void 0===i&&(i=1);var s=on(t,"x","conv1d"),u=on(e,"filter","conv1d"),c=s,l=!1;2===s.rank&&(l=!0,c=s.as3D(1,s.shape[0],s.shape[1])),O(3===c.rank,function(){return"Error in conv1d: input must be rank 3, but got rank "+c.rank+"."}),O(3===u.rank,function(){return"Error in conv1d: filter must be rank 3, but got rank "+u.rank+"."}),null!=a&&O(B(r),function(){return"Error in conv1d: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+r+"."}),O(c.shape[2]===u.shape[1],function(){return"Error in conv1d: depth of input ("+c.shape[2]+") must match input depth for filter "+u.shape[1]+"."}),O(vo(n,i),function(){return"Error in conv1D: Either stride or dilation must be 1. Got stride "+n+" and dilation '"+i+"'"}),O("NWC"===o,function(){return"Error in conv1d: got dataFormat of "+o+" but only NWC is currently supported."});var h=u.as4D(1,u.shape[0],u.shape[1],u.shape[2]),p=c.as4D(c.shape[0],1,c.shape[1],c.shape[2]),f=rc(p,h,[1,n],r,"NHWC",[1,i],a);return l?f.as2D(f.shape[2],f.shape[3]):f.as3D(f.shape[0],f.shape[2],f.shape[3])}}),rc=gn({conv2d_:function(t,e,i,a,s,u,n){void 0===s&&(s="NHWC"),void 0===u&&(u=[1,1]);var r=on(t,"x","conv2d"),o=on(e,"filter","conv2d"),c=r,l=!1;3===r.rank&&(l=!0,c=r.as4D(1,r.shape[0],r.shape[1],r.shape[2])),O(4===c.rank,function(){return"Error in conv2d: input must be rank 4, but got rank "+c.rank+"."}),O(4===o.rank,function(){return"Error in conv2d: filter must be rank 4, but got rank "+o.rank+"."}),null!=n&&O(B(a),function(){return"Error in conv2d: pad must be an integer when using, dimRoundingMode "+n+" but got pad "+a+"."});var h="NHWC"===s?c.shape[3]:c.shape[1];O(h===o.shape[2],function(){return"Error in conv2d: depth of input ("+h+") must match input depth for filter "+o.shape[2]+"."}),O(vo(i,u),function(){return"Error in conv2D: Either strides or dilations must be 1. Got strides "+i+" and dilations '"+u+"'"});var p=mo(s),f=ao(c.shape,o.shape,i,u,a,n,!1,p),d=qt.runKernel(function(t,e){var n=t.conv2d(c,o,f);return e([o,c]),n},{x:c,$filter:o},function(t,e){var n=e,r=n[0],o=n[1];return O(fo(u),function(){return"Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+u+"'"}),{x:function(){return Qu(o.shape,t,r,i,a,s)},$filter:function(){return Zu(o,t,r.shape,i,a,s)}}});return l?d.as3D(d.shape[1],d.shape[2],d.shape[3]):d}}),oc=gn({conv3d_:function(t,e,o,i,n,a){void 0===n&&(n="NDHWC"),void 0===a&&(a=[1,1,1]);var r,s=on(t,"x","conv3d"),u=on(e,"filter","conv3d"),c=s,l=!1;4===s.rank&&(l=!0,c=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),O(5===c.rank,function(){return"Error in conv3d: input must be rank 5, but got rank "+c.rank+"."}),O(5===u.rank,function(){return"Error in conv3d: filter must be rank 5, but got rank "+u.rank+"."}),O(c.shape[4]===u.shape[3],function(){return"Error in conv3d: depth of input ("+c.shape[4]+") must match input depth for filter "+u.shape[3]+"."}),O((r=a,tc(o)||tc(r)),function(){return"Error in conv3D: Either strides or dilations must be 1. Got strides "+o+" and dilations '"+a+"'"}),O("NDHWC"===n,function(){return"Error in conv3d: got dataFormat of "+n+" but only NDHWC is currently supported."});var h=so(c.shape,u.shape,o,a,i),p=qt.runKernel(function(t,e){var n=t.conv3d(c,u,h);return e([c,u]),n},{x:c,$filter:u},function(t,e){O(tc(a),function(){return"Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+a+"'"});var n=e[0],r=e[1];return{x:function(){return ec(n.shape,t,r,o,i)},$filter:function(){return function(t,e,n,r,o){var i=t;4===t.rank&&(i=t.as5D(1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]));var a=e;4===a.rank&&(a=e.as5D(1,e.shape[0],e.shape[1],e.shape[2],e.shape[3])),O(5===i.rank,function(){return"Error in conv3dDerFilter: input must be rank 5, but got shape "+i.shape+"."}),O(5===a.rank,function(){return"Error in conv3dDerFilter: dy must be rank 5, but got shape "+a.shape+"."}),O(5===n.length,function(){return"Error in conv3dDerFilter: filterShape must be length 5, but got "+n+"."}),O(i.shape[4]===n[3],function(){return"Error in conv3dDerFilter: depth of input "+i.shape[4]+") must match input depth in filter ("+n[3]+"."}),O(a.shape[4]===n[4],function(){return"Error in conv3dDerFilter: depth of dy ("+a.shape[4]+") must match output depth for filter ("+n[4]+")."});var s=so(i.shape,n,r,1,o);return qt.runKernel(function(t){return t.conv3dDerFilter(i,a,s)},{x5D:i,dy5D:a})}(n,t,r.shape,o,i)}}});return l?p.as4D(p.shape[1],p.shape[2],p.shape[3],p.shape[4]):p}}),ic=gn({conv2dDerFilter_:Zu}),ac=gn({conv2dDerInput_:Qu}),sc=gn({depthwiseConv2d_:function(t,e,n,r,o,i,a){void 0===i&&(i=[1,1]);var s=on(t,"x","depthwiseConv2d"),u=on(e,"filter","depthwiseConv2d"),c=s,l=!1;3===s.rank&&(l=!0,c=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),O(4===c.rank,function(){return"Error in depthwiseConv2d: input must be rank 4, but got rank "+c.rank+"."}),O(4===u.rank,function(){return"Error in depthwiseConv2d: filter must be rank 4, but got rank "+u.rank+"."}),O(c.shape[3]===u.shape[2],function(){return"Error in depthwiseConv2d: number of input channels ("+c.shape[3]+") must match the inChannels dimension in filter "+u.shape[2]+"."}),null==i&&(i=[1,1]),O(vo(n,i),function(){return"Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+i+"'"}),null!=a&&O(B(r),function(){return"Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+r+"."});var h=ao(c.shape,u.shape,n,i,r,a,!0),p=qt.runKernel(function(t,e){var n=t.depthwiseConv2D(c,u,h);return e([c,u]),n},{x:c,$filter:u},function(t,e){O(fo(i),function(){return"Error in gradient of depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '"+i+"'"});var n=e[0],r=e[1];return{x:function(){return function(t,e,n,r){var o=e,i=!1;3===e.rank&&(i=!0,o=e.as4D(1,e.shape[0],e.shape[1],e.shape[2]));var a=qt.runKernel(function(t){return t.depthwiseConv2DDerInput(o,n,r)},{dy4D:o});return i?a.as3D(a.shape[1],a.shape[2],a.shape[3]):a}(n.shape,t,r,h)},$filter:function(){return function(t,e,n,r){var o=t;3===t.rank&&(o=t.as4D(1,t.shape[0],t.shape[1],t.shape[2]));var i=e;return 3===i.rank&&(i=e.as4D(1,e.shape[0],e.shape[1],e.shape[2])),qt.runKernel(function(t){return t.depthwiseConv2DDerFilter(o,i,r)},{x4D:o,dy4D:i})}(n,t,r.shape,h)}}});return l?p.as3D(p.shape[1],p.shape[2],p.shape[3]):p}}),uc=gn({separableConv2d_:function(t,e,n,r,o,i,a){void 0===i&&(i=[1,1]),void 0===a&&(a="NHWC");var s=on(t,"x","separableConv2d"),u=on(e,"depthwiseFilter","separableConv2d"),c=on(n,"pointwiseFilter","separableConv2d"),l=s,h=!1;if(3===s.rank&&(h=!0,l=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),"NCHW"===a)throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");O(4===l.rank,function(){return"Error in separableConv2d: input must be rank 4, but got rank "+l.rank+"."}),O(4===u.rank,function(){return"Error in separableConv2d: depthwise filter must be rank 4, but got rank "+u.rank+"."}),O(4===c.rank,function(){return"Error in separableConv2d: pointwise filter must be rank 4, but got rank "+u.rank+"."}),O(1===c.shape[0],function(){return"Error in separableConv2d: the first dimension of pointwise filter must be 1, but got "+c.shape[0]+"."}),O(1===c.shape[1],function(){return"Error in separableConv2d: the second dimension of pointwise filter must be 1, but got "+c.shape[1]+"."});var p=u.shape[2],f=u.shape[3];O(c.shape[2]===p*f,function(){return"Error in separableConv2d: the third dimension of pointwise filter must be "+p*f+", but got "+c.shape[2]+"."});var d=sc(l,u,r,o,a,i),v=rc(d,c,1,"valid",a);return h?v.as3D(v.shape[1],v.shape[2],v.shape[3]):v}}),cc=gn({conv2dTranspose_:function(t,e,n,r,o,i){return Qu(n,on(t,"x","conv2dTranspose"),on(e,"filter","conv2dTranspose"),r,o,"NHWC",i)}}),lc=gn({conv3dTranspose_:function(t,e,n,r,o){return ec(n,on(t,"x","conv3dTranspose"),on(e,"filter","conv3dTranspose"),r,o)}}),hc=gn({matMul_:function(t,e,i,a){var n;void 0===i&&(i=!1),void 0===a&&(a=!1);var r=on(t,"a","matMul"),o=on(e,"b","matMul");n=Bt(r,o),r=n[0],o=n[1];var s=i?r.shape[r.rank-2]:r.shape[r.rank-1],u=a?o.shape[o.rank-1]:o.shape[o.rank-2],c=i?r.shape[r.rank-1]:r.shape[r.rank-2],l=a?o.shape[o.rank-2]:o.shape[o.rank-1],h=r.shape.slice(0,-2),p=o.shape.slice(0,-2),f=L(h),d=L(p);O(2<=r.rank&&2<=o.rank&&r.rank===o.rank,function(){return"Error in matMul: inputs must have the same rank of at least 2, got ranks "+r.rank+" and "+o.rank+"."}),O(k(h,p),function(){return"Error in matMul: outer dimensions ("+h+") and ("+p+") of Tensors with shapes "+r.shape+" and "+o.shape+" must match."}),O(s===u,function(){return"Error in matMul: inner shapes ("+s+") and ("+u+") of Tensors with shapes "+r.shape+" and "+o.shape+" and transposeA="+i+" and transposeB="+a+" must match."});var v=r.shape.slice(0,-2).concat([c,l]),m=i?r.as3D(f,s,c):r.as3D(f,c,s),g=a?o.as3D(d,l,u):o.as3D(d,u,l);return qt.runKernel(function(t,e){var n=t.batchMatMul(m,g,i,a);return e([m,g]),n},{$a:m,$b:g},function(t,e){var n=e,r=n[0],o=n[1];return i||a?!i&&a?{$a:function(){return t.matMul(o,!1,!1)},$b:function(){return t.matMul(r,!0,!1)}}:i&&!a?{$a:function(){return o.matMul(t,!1,!0)},$b:function(){return r.matMul(t,!1,!1)}}:{$a:function(){return o.matMul(t,!0,!0)},$b:function(){return t.matMul(r,!0,!0)}}:{$a:function(){return t.matMul(o,!1,!0)},$b:function(){return r.matMul(t,!0,!1)}}}).reshape(v)}}),pc=gn({dot_:function(t,e){var n=on(t,"t1","dot"),r=on(e,"t2","dot");O(!(1!==n.rank&&2!==n.rank||1!==r.rank&&2!==r.rank),function(){return"Error in dot: inputs must all be rank 1 or 2, but got ranks "+n.rank+" and "+r.rank+"."});var o=1===n.rank?n.size:n.shape[1],i=1===r.rank?r.size:r.shape[0];return O(o===i,function(){return"Error in dot: inner dimensions of inputs must match, but got "+o+" and "+i+"."}),1===n.rank&&1===r.rank?n.as2D(1,-1).matMul(r.as2D(-1,1)).asScalar():1===n.rank&&2===r.rank?n.as2D(1,-1).matMul(r.as2D(r.shape[0],r.shape[1])).as1D():2===n.rank&&1===r.rank?n.matMul(r.as2D(-1,1)).as1D():n.matMul(r.as2D(r.shape[0],r.shape[1]))}}),fc=gn({outerProduct_:function(t,e){var n=on(t,"v1","outerProduct"),r=on(e,"v2","outerProduct");return O(1===n.rank&&1===r.rank,function(){return"Error in outerProduct: inputs must be rank 1, but got ranks "+n.rank+" and "+r.rank+"."}),n.as2D(-1,1).matMul(r.as2D(1,-1))}}),dc=gn({reverse_:function(t,e){var n=on(t,"x","reverse");if(0===n.rank)return n.clone();var r=S(e,n.shape);return qt.runKernel(function(t){return t.reverse(n,r)},{$x:n},function(t){return{$x:function(){return t.reverse(r)}}}).reshapeAs(n)}}),vc=gn({reverse1d_:function(t){var e=on(t,"x","reverse");return O(1===e.rank,function(){return"Error in reverse1D: x must be rank 1 but got rank "+e.rank+"."}),dc(e,0)}}),mc=gn({reverse2d_:function(t,e){var n=on(t,"x","reverse");return O(2===n.rank,function(){return"Error in reverse2D: x must be rank 2 but got rank "+n.rank+"."}),dc(n,e)}}),gc=gn({reverse3d_:function(t,e){var n=on(t,"x","reverse");return O(3===n.rank,function(){return"Error in reverse3D: x must be rank 3 but got rank "+n.rank+"."}),dc(n,e)}}),yc=gn({reverse4d_:function(t,e){var n=on(t,"x","reverse");return O(4===n.rank,function(){return"Error in reverse4D: x must be rank 4 but got rank "+n.rank+"."}),dc(n,e)}});function xc(t,r,o,i,a,e){var n=on(t,"x","maxPool"),s=n,u=!1;3===n.rank&&(u=!0,s=n.as4D(1,n.shape[0],n.shape[1],n.shape[2])),null==i&&(i=[1,1]),O(4===s.rank,function(){return"Error in maxPool: input must be rank 4 but got rank "+s.rank+"."}),O(vo(o,i),function(){return"Error in maxPool: Either strides or dilations must be 1. Got strides "+o+" and dilations '"+i+"'"}),null!=e&&O(B(a),function(){return"Error in maxPool: pad must be an integer when using, dimRoundingMode "+e+" but got pad "+a+"."});var c=oo(s.shape,r,o,i,a,e),l=qt.runKernel(function(t,e){var n=t.maxPool(s,c);return e([s,n]),n},{x:s},function(h,t){var e=t[0],n=t[1];return{x:function(){return function(t,e,n,r,o,i,a){var s=on(h,"dy","maxPoolBackprop"),u=on(e,"input","maxPoolBackprop"),c=on(n,"output","maxPoolBackprop");O(u.rank===s.rank,function(){return"Rank of input ("+u.rank+") does not match rank of dy ("+s.rank+")"}),null==i&&(i=[1,1]),O(vo(o,i),function(){return"Error in maxPoolBackProp: Either strides or dilations must be 1. Got strides "+o+" and dilations '"+i+"'"}),O(4===s.rank,function(){return"Error in maxPoolBackprop: dy must be rank 4 but got rank "+s.rank+"."}),O(4===u.rank,function(){return"Error in maxPoolBackprop: input must be rank 4 but got rank "+u.rank+"."});var l=oo(u.shape,r,o,i,a,void 0);return qt.runKernel(function(t){return t.maxPoolBackprop(s,u,c,l)},{$dy:s,$input:u})}(0,e,n,r,o,i,a)}}});return u?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}function bc(t,e,n,r,o,i){var a=on(t,"x","avgPool","float32");null==r&&(r=[1,1]),O(vo(n,r),function(){return"Error in avgPool: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+r+"'"});var s=a,u=!1;3===a.rank&&(u=!0,s=a.as4D(1,a.shape[0],a.shape[1],a.shape[2])),O(4===s.rank,function(){return"Error in avgPool: x must be rank 4 but got rank "+s.rank+"."}),null!=i&&O(B(o),function(){return"Error in avgPool: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+o+"."});var c=oo(s.shape,e,n,r,o,i),l=qt.runKernel(function(t){return t.avgPool(s,c)},{x:s},function(f){return{x:function(){return function(t,e,n,r,o,i){var a=on(f,"dy","avgPoolBackprop"),s=on(e,"input","avgPoolBackprop");O(s.rank===a.rank,function(){return"Rank of input ("+s.rank+") does not match rank of dy ("+a.rank+")"}),null==o&&(o=[1,1]),O(vo(r,o),function(){return"Error in avgPoolBackprop: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+o+"'"});var u=s,c=a,l=!1;3===s.rank&&(l=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2]),c=a.as4D(1,a.shape[0],a.shape[1],a.shape[2])),O(4===c.rank,function(){return"Error in avgPoolBackprop: dy must be rank 4 but got rank "+c.rank+"."}),O(4===u.rank,function(){return"Error in avgPoolBackprop: input must be rank 4 but got rank "+u.rank+"."});var h=oo(u.shape,n,r,o,i),p=qt.runKernel(function(t){return t.avgPoolBackprop(c,u,h)},{dy4D:c,input4D:u});return l?p.as3D(p.shape[1],p.shape[2],p.shape[3]):p}(0,s,e,n,r,o)}}});return l=l.cast(a.dtype),u?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}var wc=gn({maxPool_:function(t,e,n,r,o){return xc(t,e,n,1,r,o)}}),Cc=gn({avgPool_:function(t,e,n,r,o){return bc(t,e,n,1,r,o)}}),Ec=gn({pool_:function(t,e,n,r,o,i){null==o&&(o=[1,1]),null==i&&(i=1),0===r&&(r="valid");var a=on(t,"x","maxPool"),s=a,u=!1;3===a.rank&&(u=!0,s=a.as4D(1,a.shape[0],a.shape[1],a.shape[2])),O(vo(i,o),function(){return"Error in pool: Either strides or dilations must be 1. Got strides "+i+" and dilations '"+o+"'"});var c,l,h,p,f,d,v=oo(s.shape,e,i,o,r),m=[v.dilationHeight,v.dilationWidth];c="same"===r?(l=[v.filterHeight,v.filterWidth],h=m,p=l.map(function(t,e){return t+(t-1)*(h[e]-1)}).map(function(t){return t-1}),f=p.map(function(t){return Math.floor(t/2)}),d=p.map(function(t,e){return t-f[e]}),p.map(function(t,e){return[f[e],d[e]]})):[[0,0],[0,0]];var g,y,x,b,w,C,E,_,R=1===m[0]&&1===m[1],I=(g=[v.inHeight,v.inWidth],y=m,b=(x=c).map(function(t){return t[0]}),w=x.map(function(t){return t[1]}),C=g.concat(b,w),E=y.map(function(t,e){return(t-C[e]%t)%t}),_=w.map(function(t,e){return t+E[e]}),[y.map(function(t,e){return[b[e],_[e]]}),y.map(function(t,e){return[0,E[e]]})]),S=I[1],k=R?r:"valid",N=R?s:Ir(s,m,I[0]),A=("avg"===n?function(){return bc(N,e,i,1,k)}:function(){return xc(N,e,i,1,k)})(),T=R?A:sr(A,m,S);return u?T.as3D(T.shape[1],T.shape[2],T.shape[3]):T}}),_c=gn({maxPool3d_:function(t,r,o,i,a,e,s){void 0===e&&(e="NDHWC");var n=on(t,"x","maxPool3d"),u=n,c=!1;4===n.rank&&(c=!0,u=n.as5D(1,n.shape[0],n.shape[1],n.shape[2],n.shape[3])),null==s&&(s=[1,1,1]),O(5===u.rank,function(){return"Error in maxPool3d: x must be rank 5 but got rank "+u.rank+"."}),O("NDHWC"===e,function(){return"Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of "+e}),O(vo(o,s),function(){return"Error in maxPool3d: Either strides or dilations must be 1. Got strides "+o+" and dilations '"+s+"'"}),null!=a&&O(B(i),function(){return"Error in maxPool3d: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+i+"."});var l=io(u.shape,r,o,s,i,a,e),h=qt.runKernel(function(t,e){var n=t.maxPool3d(u,l);return e([u,n]),n},{x:u},function(g,t){var e=t[0],n=t[1];return{x:function(){return function(t,e,n,r,o,i,a,s){var u=on(g,"dy","maxPool3dBackprop"),c=on(e,"input","maxPool3dBackprop"),l=on(n,"output","maxPool3dBackprop"),h=u,p=c,f=l,d=!1;4===c.rank&&(d=!0,h=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]),p=c.as5D(1,c.shape[0],c.shape[1],c.shape[2],c.shape[3]),f=l.as5D(1,l.shape[0],l.shape[1],l.shape[2],l.shape[3])),O(5===h.rank,function(){return"Error in maxPool3dBackprop: dy must be rank 5 but got rank "+h.rank+"."}),O(5===p.rank,function(){return"Error in maxPool3dBackprop: input must be rank 5 but got rank "+p.rank+"."}),O(5===f.rank,function(){return"Error in maxPool3dBackprop: output must be rank 5 but got rank "+f.rank+"."}),null==i&&(i=[1,1,1]),O(vo(o,i),function(){return"Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides "+o+" and dilations '"+i+"'"}),null!=s&&O(B(a),function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+s+" but got pad "+a+"."});var v=io(p.shape,r,o,i,a,s),m=qt.runKernel(function(t){return t.maxPool3dBackprop(h,p,f,v)},{dy5D:h,input5D:p});return d?m.as4D(m.shape[1],m.shape[2],m.shape[3],m.shape[4]):m}(0,e,n,r,o,s,i,a)}}});return c?h.as4D(h.shape[1],h.shape[2],h.shape[3],h.shape[4]):h}}),Rc=gn({avgPool3d_:function(t,e,n,r,o,i,a){void 0===i&&(i="NDHWC");var s=on(t,"x","avgPool3d","float32"),u=s,c=!1;4===s.rank&&(c=!0,u=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),null==a&&(a=[1,1,1]),O(5===u.rank,function(){return"Error in avgPool3d: x must be rank 5 but got rank "+u.rank+"."}),O("NDHWC"===i,function(){return"Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of "+i}),O(vo(n,a),function(){return"Error in avgPool3d: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+a+"'"}),null!=o&&O(B(r),function(){return"Error in avgPool3d: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+r+"."});var l=io(u.shape,e,n,a,r,o,i),h=qt.runKernel(function(t){return t.avgPool3d(u,l)},{x:u},function(d){return{x:function(){return function(t,e,n,r,o,i,a){var s=on(d,"dy","avgPool3dBackprop"),u=on(e,"input","avgPool3dBackprop"),c=s,l=u,h=!1;4===u.rank&&(h=!0,c=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3]),l=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3])),O(5===c.rank,function(){return"Error in avgPool3dBackprop: dy must be rank 5 but got rank "+c.rank+"."}),O(5===l.rank,function(){return"Error in avgPool3dBackprop: input must be rank 5 but got rank "+l.rank+"."}),null==o&&(o=[1,1,1]),O(vo(r,o),function(){return"Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+o+"'"}),null!=a&&O(B(i),function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+i+"."});var p=io(l.shape,n,r,o,i,a),f=qt.runKernel(function(t){return t.avgPool3dBackprop(c,l,p)},{dy5D:c,input5D:l});return h?f.as4D(f.shape[1],f.shape[2],f.shape[3],f.shape[4]):f}(0,u,e,n,a,r,o)}}});return h=h.cast(u.dtype),c?h.as4D(h.shape[1],h.shape[2],h.shape[3],h.shape[4]):h}}),Ic=gn({slice_:function(t,e,n){var r,o,i=on(t,"x","slice");if(0===i.rank)throw new Error("Slicing scalar is not possible");(r="number"==typeof e?[e].concat(new Array(i.rank-1).fill(0)):e.length<i.rank?e.concat(new Array(i.rank-e.length).fill(0)):e.slice()).forEach(function(t){O(-1!==t,function(){return"slice() does not support negative begin indexing."})}),o=(o=null==n?new Array(i.rank).fill(-1):"number"==typeof n?[n].concat(new Array(i.rank-1).fill(-1)):n.length<i.rank?n.concat(new Array(i.rank-n.length).fill(-1)):n).map(function(t,e){return 0<=t?t:(O(-1===t,function(){return"Negative size values should be exactly -1 but got "+t+" for the slice() size at index "+e+"."}),i.shape[e]-r[e])}),function(e,n,r){O(e.rank===n.length,function(){return"Error in slice"+e.rank+"D: Length of begin "+n+" must match the rank of the array ("+e.rank+")."}),O(e.rank===r.length,function(){return"Error in slice"+e.rank+"D: Length of size "+r+" must match the rank of the array ("+e.rank+")."});for(var t=function(t){O(n[t]+r[t]<=e.shape[t],function(){return"Error in slice"+e.rank+"D: begin["+t+"] + size["+t+"] ("+(n[t]+r[t])+") would overflow input.shape["+t+"] ("+e.shape[t]+")"})},o=0;o<e.rank;++o)t(o)}(i,r,o);var a=i.shape;return qt.runKernel(function(t){return t.slice(i,r,o)},{$x:i},function(t){for(var e=[],n=0;n<t.rank;n++)e.push([r[n],a[n]-r[n]-o[n]]);return{$x:function(){return t.pad(e)}}})}}),Sc=gn({slice1d_:function(t,e,n){var r=on(t,"x","slice1d");return O(1===r.rank,function(){return"slice1d expects a rank-1 tensor, but got a rank-"+r.rank+" tensor"}),Ic(r,[e],[n])}}),kc=gn({slice2d_:function(t,e,n){var r=on(t,"x","slice2d");return O(2===r.rank,function(){return"slice2d expects a rank-2 tensor, but got a rank-"+r.rank+" tensor"}),Ic(r,e,n)}}),Nc=gn({slice3d_:function(t,e,n){var r=on(t,"x","slice3d");return O(3===r.rank,function(){return"slice3d expects a rank-3 tensor, but got a rank-"+r.rank+" tensor"}),Ic(r,e,n)}}),Ac=gn({slice4d_:function(t,e,n){var r=on(t,"x","slice4d");return O(4===r.rank,function(){return"slice4d expects a rank-4 tensor, but got a rank-"+r.rank+" tensor"}),Ic(r,e,n)}});function Tc(e,n,r,t,o){return n.rank<r.rank&&(n=n.reshape(ln(n.shape,t))),e.rank<r.rank&&(e=e.reshape(ln(e.shape,t))),{$x:function(){var t=e.mul(r.equal(n).cast(e.dtype));return null==o?t:t.transpose(o)}}}var Dc=gn({all_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=on(t,"x","all","bool"),o=S(e,r.shape),i=o,a=pn(i,r.rank);null!=a&&(r=r.transpose(a),i=dn(i.length,r.rank));var s=qt.runKernel(function(t){return t.all(r,i)},{$x:r});if(n){var u=ln(s.shape,o);return s.reshape(u)}return s}}),Fc=gn({any_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=on(t,"x","any","bool"),o=S(e,r.shape),i=o,a=pn(i,r.rank);null!=a&&(r=r.transpose(a),i=dn(i.length,r.rank));var s=qt.runKernel(function(t){return t.any(r,i)},{$x:r});if(n){var u=ln(s.shape,o);return s.reshape(u)}return s}}),Mc=gn({argMax_:function(t,e){void 0===e&&(e=0);var r=on(t,"x","argMax");null==e&&(e=0);var o=S(e,r.shape),n=pn(o,r.rank);return null!=n&&(r=r.transpose(n),o=dn(o.length,r.rank)),qt.runKernel(function(t,e){var n=t.argMax(r,o[0]);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return On(n)}}})}}),Pc=gn({argMin_:function(t,e){void 0===e&&(e=0);var r=on(t,"x","argMin");null==e&&(e=0);var o=S(e,r.shape),n=pn(o,r.rank);return null!=n&&(r=r.transpose(n),o=dn(o.length,r.rank)),qt.runKernel(function(t,e){var n=t.argMin(r,o[0]);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return On(n)}}})}}),Oc=gn({logSumExp_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=on(t,"x","logSumExp"),o=S(e,r.shape),i=r.max(o,!0),a=r.sub(i).exp().sum(o).log(),s=i.reshape(a.shape).add(a);if(n){var u=ln(s.shape,o);return s.reshape(u)}return s}}),Bc=gn({max_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=on(t,"x","max"),o=r,i=S(e,r.shape),a=i,s=pn(a,r.rank);null!=s&&(r=r.transpose(s),a=dn(a.length,r.rank));var u=qt.runKernel(function(t,e){var n=t.max(r,a);return e([o,n]),n},{$x:r},function(t,e){return Tc(t,e[1],e[0],i,s)});if(n){var c=ln(u.shape,i);u=u.reshape(c)}return u}}),Lc=gn({mean_:function(t,e,r){void 0===e&&(e=null),void 0===r&&(r=!1);var n=on(t,"x","mean"),o=S(e,n.shape),i=L(cn(n.shape,o)[1]);return $r(function(n){var t=En(i);return{value:(t.dtype===n.dtype?n:n.cast(t.dtype)).div(t).sum(e,r),gradFunc:function(t){var e=n.shape.slice();return o.forEach(function(t){e[t]=1}),t.reshape(e).mul(An(n.shape,"float32")).div(i)}}})(n)}}),Wc=gn({min_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=on(t,"x","min"),o=r,i=S(e,r.shape),a=i,s=pn(a,r.rank);null!=s&&(r=r.transpose(s),a=dn(a.length,r.rank));var u=qt.runKernel(function(t,e){var n=t.min(r,a);return e([o,n]),n},{$x:r},function(t,e){return Tc(t,e[1],e[0],i,s)});if(n){var c=ln(u.shape,i);u=u.reshape(c)}return u}}),zc=gn({moments_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=S(e,(t=on(t,"x","moments")).shape),o=t.mean(r,n),i=o.shape;n||(i=ln(o.shape,r));var a=t.toFloat().sub(o.reshape(i)).square();return{mean:o,variance:a.mean(r,n)}}}),Uc=gn({sum_:function(t,e,a){void 0===e&&(e=null),void 0===a&&(a=!1);var n=on(t,"x","sum");"bool"===n.dtype&&(n=n.toInt());var s=S(e,n.shape);return $r(function(n){var t=pn(s,n.rank),e=s,r=n;null!=t&&(r=n.transpose(t),e=dn(e.length,n.rank));var o=qt.runKernel(function(t){return t.sum(r,e)},{permutedX:r});if(a){var i=ln(o.shape,s);o=o.reshape(i)}return{value:o,gradFunc:function(t){var e=n.shape.slice();return s.forEach(function(t){e[t]=1}),t.reshape(e).mul(An(n.shape,"float32"))}}})(n)}}),Vc=gn({prod_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=on(t,"x","prod");"bool"===r.dtype&&(r=r.toInt());var o=S(e,r.shape),i=pn(o,r.rank),a=o,s=r;null!=i&&(s=r.transpose(i),a=dn(a.length,r.rank));var u=qt.runKernel(function(t){return t.prod(s,a)},{permutedX:s});if(n){var c=ln(u.shape,o);u=u.reshape(c)}return u}}),Gc=gn({elu_:function(t){var r=on(t,"x","elu");return qt.runKernel(function(t,e){var n=t.elu(r);return e([n]),n},{$x:r},function(e,t){var n=t[0];return{$x:function(){return qt.runKernel(function(t){return t.eluDer(e,n)},{dy:e,y:n})}}})}}),Hc=gn({leakyRelu_:function(t,e){void 0===e&&(e=.2);var n=on(t,"x","leakyRelu");return wu(En(e).mul(n),n)}}),jc=gn({prelu_:function(t,e){var r=on(t,"x","prelu"),o=on(e,"alpha","prelu");return qt.runKernel(function(t,e){var n=t.prelu(r,o);return e([r,o]),n},{$x:r,$alpha:o},function(n,t){var r=t[0],o=t[1],i=r.greater(0);return{$x:function(){return fu(i,n,n.mul(o))},$alpha:function(){var t=fu(i,On(n),n.mul(r)),e=no(o.shape,n.shape);return 0<e.length&&(t=t.sum(e)),t.reshape(o.shape)}}})}}),qc=gn({relu_:function(t){var r=on(t,"x","relu");return"bool"===r.dtype?r.toInt():qt.runKernel(function(t,e){var n=t.relu(r);return e([r]),n},{$x:r},function(t,e){var n=e[0];return{$x:function(){return t.mulStrict(n.step().toFloat())}}})}}),$c=gn({selu_:function(t){var r=on(t,"x","selu");return qt.runKernel(function(t,e){var n=t.selu(r);return e([r]),n},{$x:r},function(i,t){var a=t[0];return{$x:function(){var t=a.greater(En(0)),e=En(qa),n=En($a),r=i.mul(n),o=i.mul(e).mul(a.toFloat().exp());return fu(t,r,o)}}})}}),Kc=gn({transpose_:function(t,n){var e=on(t,"x","transpose");return null==n&&(n=e.shape.map(function(t,e){return e}).reverse()),O(e.rank===n.length,function(){return"Error in transpose: rank of input "+e.rank+" must match length of perm "+n+"."}),n.forEach(function(t){O(0<=t&&t<e.rank,function(){return"All entries in 'perm' must be between 0 and "+(e.rank-1)+" but got "+n})}),e.rank<=1?e.clone():qt.runKernel(function(t){return t.transpose(e,n)},{$x:e},function(t){var e=fn(n);return{$x:function(){return t.transpose(e)}}})}}),Xc=gn({localResponseNormalization_:function(t,o,i,a,s){void 0===o&&(o=5),void 0===i&&(i=1),void 0===a&&(a=1),void 0===s&&(s=.5);var e=on(t,"x","localResponseNormalization");O(4===e.rank||3===e.rank,function(){return"Error in localResponseNormalization: x must be rank 3 or 4 but got\n rank "+e.rank+"."}),O(B(o),function(){return"Error in localResponseNormalization: depthRadius must be an integer but got depthRadius "+o+"."});var r=e,n=!1;3===e.rank&&(n=!0,r=e.as4D(1,e.shape[0],e.shape[1],e.shape[2]));var u=qt.runKernel(function(t,e){var n=t.localResponseNormalization4D(r,o,i,a,s);return e([r,n]),n},{x4D:r},function(e,t){var n=t[0],r=t[1];return{x4D:function(){return qt.runKernel(function(t){return t.LRNGrad(e,n,r,o,i,a,s)},{})}}});return n?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),Yc=gn({norm_:function(t,e,n,r){void 0===e&&(e="euclidean"),void 0===n&&(n=null),void 0===r&&(r=!1);var o=function t(e,n,r){if(void 0===r&&(r=null),0===e.rank)return e.abs();if(1!==e.rank&&null===r)return t(e.reshape([-1]),n,r);if(1===e.rank||"number"==typeof r||Array.isArray(r)&&1===r.length){if(1===n)return e.abs().sum(r);if(n===1/0)return e.abs().max(r);if(n===-1/0)return e.abs().min(r);if("euclidean"===n||2===n)return e.abs().pow(En(2,"int32")).sum(r).sqrt();throw new Error("Error in norm: invalid ord value: "+n)}if(Array.isArray(r)&&2===r.length){if(1===n)return e.abs().sum(r[0]).max(r[1]-1);if(n===1/0)return e.abs().sum(r[1]).max(r[0]);if(n===-1/0)return e.abs().sum(r[1]).min(r[0]);if("fro"===n||"euclidean"===n)return e.square().sum(r).sqrt();throw new Error("Error in norm: invalid ord value: "+n)}throw new Error("Error in norm: invalid axis: "+r)}(t=on(t,"x","norm"),e,n),i=o.shape;if(r){var a=S(n,t.shape);i=ln(o.shape,a)}return o.reshape(i)}}),Jc=gn({basicLSTMCell_:function(t,e,n,r,o,i){var a=on(t,"forgetBias","basicLSTMCell"),s=on(e,"lstmKernel","basicLSTMCell"),u=on(n,"lstmBias","basicLSTMCell"),c=on(r,"data","basicLSTMCell"),l=on(o,"c","basicLSTMCell"),h=on(i,"h","basicLSTMCell"),p=c.concat(h,1).matMul(s).add(u),f=p.shape[0],d=p.shape[1]/4,v=[f,d],m=p.slice([0,0],v),g=p.slice([0,d],v),y=p.slice([0,2*d],v),x=p.slice([0,3*d],v),b=m.sigmoid().mulStrict(g.tanh()).addStrict(l.mulStrict(a.add(y).sigmoid())),w=b.tanh().mulStrict(x.sigmoid());return[b,w]}}),Qc=gn({multiRNNCell_:function(t,e,n,r){for(var o=on(e,"data","multiRNNCell"),i=an(n,"c","multiRNNCell"),a=an(r,"h","multiRNNCell"),s=o,u=[],c=0;c<t.length;c++){var l=t[c](s,i[c],a[c]);u.push(l[0]),u.push(l[1]),s=l[1]}var h=[],p=[];for(c=0;c<u.length;c+=2)h.push(u[c]),p.push(u[c+1]);return[h,p]}}),Zc=gn({movingAverage_:function(t,e,n,r,o){void 0===o&&(o=!0);var i=on(t,"v","movingAverage"),a=on(e,"x","movingAverage"),s=on(n,"decay","movingAverage");Lt(i,a),O(k(i.shape,a.shape),function(){return"Shape mismatch in v and x"});var u=En(1),c=u.sub(s),l=a.sub(i).mul(c);if(o){O(null!=r,function(){return"When using zeroDebias: true, step is required."});var h=on(r,"step","movingAverage");l=l.div(u.sub(Nu(s,h)))}return i.add(l)}}),tl=gn({stridedSlice_:function(t,e,n,r,o,i,a,s,u){if(void 0===o&&(o=0),void 0===i&&(i=0),void 0===a&&(a=0),void 0===s&&(s=0),void 0===u&&(u=0),null==r&&(r=new Array(e.length)),0!==a)throw new Error("ellipsis mask is not yet supported");var c=on(t,"x","stridedSlice"),l=zr(s),h=c.shape.slice();l.forEach(function(t){e[t]=0,n[t]=1,h.splice(t,0,1)}),c=c.reshape(h);for(var p=0;p<c.rank;p++)e[p]=Vr(o,e,r,c.shape,p),n[p]=Gr(i,n,r,c.shape,p),r[p]=r[p]||1;var f=zr(u);f.forEach(function(t){n[t]=e[t]+1,r[t]=1});var d=Ur(e,n,r),v=d.filter(function(t,e){return-1===f.indexOf(e)});return r.every(function(t){return 1===t})?Ic(c,e,d).reshape(v):qt.runKernel(function(t){return t.stridedSlice(c,e,n,r)},{$x:c}).reshape(v)}}),el=gn({topk_:function(t,e,n){void 0===e&&(e=1),void 0===n&&(n=!0);var r=on(t,"x","topk");if(0===r.rank)throw new Error("topk() expects the input to be of rank 1 or higher");var o=r.shape[r.shape.length-1];if(o<e)throw new Error("'k' passed to topk() must be <= the last dimension ("+o+") but got "+e);var i=qt.runKernel(function(t){return t.topk(r,e,n)},{$x:r});return{values:i[0],indices:i[1]}}}),nl=gn({scatterND_:function(t,e,n){var r=on(t,"indices","scatterND","int32"),o=on(e,"updates","scatterND");return function(t,e,n){if(e.rank<1)throw new Error("tf.scatterND() expects the indices to be rank 1 or higher, but the rank was "+e.rank+".");if(t.rank<1)throw new Error("tf.scatterND() expects the updates to be rank 1 or higher, but the rank was "+t.rank+".");if("int32"!==e.dtype)throw new Error("The dtype of 'indices' should be int32, but got dtype: "+e.dtype);if(n.length<1)throw new Error("Output rank must be greater or equal to 1, but got shape: "+n);if(0===n.length){if(0===e.size)throw new Error("Indices specified for empty output. indices shape: "+e.shape);if(0===t.size)throw new Error("Updates specified for empty output. updates shape: "+t.shape)}!function(t,e,n){var r=1<e.rank?e.shape[e.rank-1]:1,o=1<e.rank?e.rank-1:1,i="Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: "+n.shape+", indices.shape: "+e.shape+", shape: "+t+", sliceDim: "+r+", and batchDim: "+o+".";if(n.rank<o)throw new Error(i+" update.rank < "+o+". ");if(t.length<r+(n.rank-o))throw new Error(i+" Output shape length < "+(r+(n.rank-o)));if(n.rank!==o+t.length-r)throw new Error(i+" update.rank != "+(o+t.length-r));for(var a=0;a<o;++a)if(n.shape[a]!==e.shape[a])throw new Error(i+" updates.shape["+a+"] ("+n.shape[a]+") != indices.shape["+a+"] ("+e.shape[a]+").");for(a=0;a<n.rank-o;++a)if(n.shape[a+o]!==t[a+r])throw new Error(i+" updates.shape["+(a+o)+"] ("+n.shape[a+o]+") != shape["+(a+o)+"] ("+t[a+o]+")")}(n,e,t)}(o,r,n),qt.runKernel(function(t){return t.scatterND(r,o,n)},{$indices:r,$updates:o})}}),rl=gn({fft_:function(t){O("complex64"===t.dtype,function(){return"The dtype for tf.spectral.fft() must be complex64 but got "+t.dtype+"."});var e=t.shape[t.shape.length-1],n=t.size/e,r=t.as2D(n,e);return qt.runKernel(function(t){return t.fft(r)},{input:t}).reshape(t.shape)}}),ol=gn({ifft_:function(t){O("complex64"===t.dtype,function(){return"The dtype for tf.spectral.ifft() must be complex64 but got "+t.dtype+"."});var e=t.shape[t.shape.length-1],n=t.size/e,r=t.as2D(n,e);return qt.runKernel(function(t){return t.ifft(r)},{input:t}).reshape(t.shape)}}),il=gn({rfft_:function(t,e){O("float32"===t.dtype,function(){return"The dtype for rfft() must be real value but got "+t.dtype});var n,r=t.shape[t.shape.length-1],o=t.size/r;if(null!=e&&e<r){var i=t.shape.map(function(t){return 0}),a=t.shape.map(function(t){return t});a[t.shape.length-1]=e,n=t.slice(i,a),r=e}else if(null!=e&&r<e){var s=t.shape.map(function(t){return t});s[t.shape.length-1]=e-r,n=t.concat(Tn(s),t.shape.length-1),r=e}else n=t;var u=n.zerosLike(),c=yn(n,u).as2D(o,r),l=rl(c),h=Math.floor(r/2)+1,p=xn(l),f=bn(l),d=p.split([h,r-h],p.shape.length-1),v=f.split([h,r-h],f.shape.length-1),m=n.shape.slice();return m[n.shape.length-1]=h,yn(d[0],v[0]).reshape(m)}}),al=gn({irfft_:function(t){var e=t.shape[t.shape.length-1],n=t.size/e;if(e<=2){var r=t.as2D(n,e),o=ol(r);return xn(o)}var i=[n,2*(e-1)],a=xn(t).as2D(n,e),s=bn(t).as2D(n,e),u=a.slice([0,1],[n,e-2]).reverse(1),c=s.slice([0,1],[n,e-2]).reverse(1).mul(En(-1)),l=a.concat(u,1),h=s.concat(c,1);return r=yn(l,h).as2D(i[0],i[1]),o=ol(r),xn(o)}}),sl=Object.freeze({fft:rl,ifft:ol,rfft:il,irfft:al}),ul=gn({sparseToDense_:function(t,e,n,r){void 0===r&&(r=0);var o=on(t,"sparseIndices","sparseToDense","int32"),i=on(e,"sparseValues","sparseToDense"),a=on(r,"defaultValue","sparseToDense",i.dtype);return function(t,e,n,r){if("int32"!==t.dtype)throw new Error("tf.sparseToDense() expects the indices to be int32 type, but the dtype was "+t.dtype+".");if(2<t.rank)throw new Error("sparseIndices should be a scalar, vector, or matrix, but got shape "+t.shape+".");var o=0<t.rank?t.shape[0]:1,i=1<t.rank?t.shape[1]:1;if(n.length!==i)throw new Error("outputShape has incorrect number of elements:, "+n.length+", should be: "+i+".");var a=e.size;if(0!==e.rank&&(1!==e.rank||a!==o))throw new Error("sparseValues has incorrect shape "+e.shape+", should be [] or ["+o+"]");if(e.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}(o,i,n,a),qt.runKernel(function(t){return t.sparseToDense(o,i,n,a)},{$sparseIndices:o,$sparseValues:i,$defaultValue:a})}}),cl=gn({gatherND_:function(t,e){var n=on(e,"indices","gatherND","int32"),r=on(t,"x","gatherND");return qt.runKernel(function(t){return t.gatherND(r,n)},{$x:r,$indices:n})}}),ll=gn({diag_:function(t){var e=on(t,"x","diag").flatten(),n=t.shape.concat(t.shape);return qt.runKernel(function(t){return t.diag(e)},{$x:e}).reshape(n)}}),hl=gn({dropout_:function(t,e,n,r){var o=on(t,"x","dropout");if(O("float32"===o.dtype,function(){return"x has to be a floating point tensor since it's going to be scaled, but got a "+o.dtype+" tensor instead."}),O(0<=e&&e<1,function(){return"rate must be a float in the range [0, 1), but got "+e+"."}),0===e)return t instanceof yt?o.clone():o;var i=function(t,e){if(null==e)return t.shape.slice();if(k(t.shape,e))return e;if(t.shape.length!==e.length)return e;for(var n=[],r=0;r<t.shape.length;r++)null==e[r]&&null!=t.shape[r]?n.push(t.shape[r]):n.push(e[r]);return n}(o,n),a=1-e,s=_r(i,0,1,"float32",r).add(a).floor().div(a);return o.mul(s)}});function pl(t,e,n){for(var r=1-t%2,o=new Float32Array(t),i=0;i<t;++i){var a=2*Math.PI*i/(t+r-1);o[i]=e-n*Math.cos(a)}return _n(o,"float32")}function fl(v,m,g){return void 0===g&&(g=1),y(this,void 0,void 0,function(){var e,n,r,o,i,a,s,u,c,l,h,p,f,d;return I(this,function(t){switch(t.label){case 0:return e=on(v,"predictions","inTopK"),n=on(m,"targets","inTopK"),O(1<e.rank,function(){return"inTopK() expects the predictions to be of rank 2 or higher, but got "+e.rank}),O(e.rank-1===n.rank,function(){return"predictions rank should be 1 larger than targets rank, but got predictions rank "+e.rank+" and targets rank "+n.rank}),x(e.shape.slice(0,e.shape.length-1),n.shape,"predictions's shape should be align with the targets' shape, except the last dimension."),r=e.shape[e.shape.length-1],O(0<g&&g<=r,function(){return"'k' passed to inTopK() must be > 0 && <= the predictions last dimension ("+r+"), but got "+g}),[4,e.data()];case 1:return o=t.sent(),[4,n.data()];case 2:for(i=t.sent(),a=[o.length/r,r],u=a[1],c=A("bool",s=a[0]),l=0;l<s;l++){for(h=l*u,p=o.subarray(h,h+u),f=[],d=0;d<p.length;d++)f.push({value:p[d],index:d});for(f.sort(function(t,e){return e.value-t.value}),c[l]=0,d=0;d<g;d++)if(f[d].index===i[l]){c[l]=1;break}}return v!==e&&e.dispose(),m!==n&&n.dispose(),[2,wn(c,n.shape,"bool")]}})})}var dl,vl,ml=gn({hannWindow_:function(t){return pl(t,.5,.5)}}),gl=gn({hammingWindow_:function(t){return pl(t,.54,.46)}}),yl=gn({frame_:function(t,e,n,r,o){void 0===r&&(r=!1),void 0===o&&(o=0);for(var i=0,a=[];i+e<=t.size;)a.push(Ic(t,i,e)),i+=n;if(r)for(;i<t.size;){var s=i+e-t.size,u=Bn([Ic(t,i,e-s),Dn([s],o)]);a.push(u),i+=n}return 0===a.length?Rn([],[0,e]):Bn(a).as2D(a.length,e)}}),xl=gn({stft_:function(t,e,n,r,o){var i;void 0===o&&(o=ml),null==r&&(i=e,r=Math.floor(Math.pow(2,Math.ceil(Math.log(i)/Math.log(2)))));for(var a=yl(t,e,n),s=Su(a,o(e)),u=[],c=0;c<a.shape[0];c++)u.push(il(s.slice([c,0],[1,e]),r));return Bn(u)}}),bl=Object.freeze({hannWindow:ml,hammingWindow:gl,frame:yl,stft:xl});(vl=dl=dl||{})[vl.NONE=0]="NONE",vl[vl.MEAN=1]="MEAN",vl[vl.SUM=2]="SUM",vl[vl.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS";var wl=gn({absoluteDifference_:function(t,e,n,r){void 0===r&&(r=dl.SUM_BY_NONZERO_WEIGHTS);var o=on(t,"labels","absoluteDifference"),i=on(e,"predictions","absoluteDifference"),a=null;null!=n&&(a=on(n,"weights","absoluteDifference")),x(o.shape,i.shape,"Error in absoluteDifference: ");var s=o.sub(i).abs();return Cl(s,a,r)}}),Cl=gn({computeWeightedLoss_:function(t,e,n){void 0===n&&(n=dl.SUM_BY_NONZERO_WEIGHTS);var r=on(t,"losses","computeWeightedLoss"),o=null;null!=e&&(o=on(e,"weights","computeWeightedLoss"));var i=null==o?r:r.mul(o);if(n===dl.NONE)return i;if(n===dl.SUM)return i.sum();if(n===dl.MEAN){if(null==o)return i.mean();var a=r.size/o.size,s=i.sum().div(o.sum());return 1<a?s.div(En(a)):s}if(n!==dl.SUM_BY_NONZERO_WEIGHTS)throw Error("Unknown reduction: "+n);if(null==o)return i.sum().div(En(r.size));var u=o.mul(An(r.shape)).notEqual(En(0)).sum().toFloat();return i.sum().div(u)}}),El=gn({cosineDistance_:function(t,e,n,r,o){void 0===o&&(o=dl.SUM_BY_NONZERO_WEIGHTS);var i=on(t,"labels","cosineDistance"),a=on(e,"predictions","cosineDistance"),s=null;null!=r&&(s=on(r,"weights","cosineDistance")),x(i.shape,a.shape,"Error in cosineDistance: ");var u=En(1).sub(i.mul(a).sum(n,!0));return Cl(u,s,o)}}),_l=gn({hingeLoss_:function(t,e,n,r){void 0===r&&(r=dl.SUM_BY_NONZERO_WEIGHTS);var o=on(t,"labels","hingeLoss"),i=on(e,"predictions","hingeLoss"),a=null;null!=n&&(a=on(n,"weights","hingeLoss")),x(o.shape,i.shape,"Error in hingeLoss: ");var s=En(1);o=En(2).mul(o).sub(s);var u=s.sub(o.mul(i)).relu();return Cl(u,a,r)}}),Rl=gn({huberLoss_:function(t,e,n,r,o){void 0===r&&(r=1),void 0===o&&(o=dl.SUM_BY_NONZERO_WEIGHTS);var i=on(t,"labels","huberLoss"),a=on(e,"predictions","huberLoss"),s=null;null!=n&&(s=on(n,"weights","huberLoss")),x(i.shape,a.shape,"Error in huberLoss: ");var u=En(r),c=a.sub(i).abs(),l=Eu(c,u),h=c.sub(l),p=En(.5).mul(l.square()).add(u.mul(h));return Cl(p,s,o)}}),Il=gn({logLoss_:function(t,e,n,r,o){void 0===r&&(r=1e-7),void 0===o&&(o=dl.SUM_BY_NONZERO_WEIGHTS);var i=on(t,"labels","logLoss"),a=on(e,"predictions","logLoss"),s=null;null!=n&&(s=on(n,"weights","logLoss")),x(i.shape,a.shape,"Error in logLoss: ");var u=En(1),c=En(r),l=i.mul(a.add(c).log()).neg().sub(u.sub(i).mul(u.sub(a).add(c).log()));return Cl(l,s,o)}}),Sl=gn({meanSquaredError_:function(t,e,n,r){void 0===r&&(r=dl.SUM_BY_NONZERO_WEIGHTS);var o=on(t,"labels","meanSquaredError"),i=on(e,"predictions","meanSquaredError"),a=null;null!=n&&(a=on(n,"weights","meanSquaredError")),x(o.shape,i.shape,"Error in meanSquaredError: ");var s=o.squaredDifference(i);return Cl(s,a,r)}}),kl=gn({sigmoidCrossEntropy_:function(t,e,n,r,o){void 0===r&&(r=0),void 0===o&&(o=dl.SUM_BY_NONZERO_WEIGHTS);var s=on(t,"multiClassLabels","sigmoidCrossEntropy"),i=on(e,"logits","sigmoidCrossEntropy"),a=null;if(null!=n&&(a=on(n,"weights","sigmoidCrossEntropy")),x(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),0<r){var u=En(r),c=En(1),l=En(.5);s=s.mul(c.sub(u)).add(l.mul(u))}var h=function(t,e){var n=on(s,"labels","sigmoidCrossEntropyWithLogits"),r=on(e,"logits","sigmoidCrossEntropyWithLogits");x(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");var o=r.relu(),i=r.mul(n),a=r.abs().neg().exp().log1p();return o.sub(i).add(a)}(0,i);return Cl(h,a,o)}}),Nl=gn({softmaxCrossEntropy_:function(t,e,n,r,o){void 0===r&&(r=0),void 0===o&&(o=dl.SUM_BY_NONZERO_WEIGHTS);var i=on(t,"onehotLabels","softmaxCrossEntropy"),a=on(e,"logits","softmaxCrossEntropy"),s=null;if(null!=n&&(s=on(n,"weights","softmaxCrossEntropy")),x(i.shape,a.shape,"Error in softmaxCrossEntropy: "),0<r){var u=En(r),c=En(1),l=En(i.shape[1]);i=i.mul(c.sub(u)).add(u.div(l))}var h=function(t,e,i){if(void 0===i&&(i=-1),-1===i&&(i=e.rank-1),i!==e.rank-1)throw Error("Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank "+e.rank+" and dim was "+i);return $r(function(t,e,n){var r=e.logSumExp([i],!0),o=e.toFloat().sub(r);return n([t,o]),{value:o.mul(t).neg().sum([i]),gradFunc:function(t,e){var n=e[0],r=e[1],o=ln(t.shape,[i]);return[t.reshape(o).mul(n.toFloat().sub(r.exp())),t.reshape(o).mul(r.exp().sub(n.toFloat()))]}}})(t,e)}(i,a);return Cl(h,s,o)}}),Al=Object.freeze({get Reduction(){return dl},absoluteDifference:wl,computeWeightedLoss:Cl,cosineDistance:El,hingeLoss:_l,huberLoss:Rl,logLoss:Il,meanSquaredError:Sl,sigmoidCrossEntropy:kl,softmaxCrossEntropy:Nl});function Tl(r,o){return void 0===o&&(o=!1),qt.tidy(function(){if(2!==r.shape.length)throw new Error("qr2d() requires a 2D Tensor, but got a "+r.shape.length+"D Tensor.");for(var f=r.shape[0],d=r.shape[1],v=fr(f),m=r.clone(),g=Rn([[1]],[1,1]),y=g.clone(),t=d<=f?d:f,e=function(p){var t,e=m,n=y,r=v;y=(t=qt.tidy(function(){var t=m.slice([p,p],[f-p,1]),e=t.norm(),n=m.slice([p,p],[1,1]),r=Rn([[-1]]).where(n.greater(0),Rn([[1]])),o=n.sub(r.mul(e)),i=t.div(o);y=1===i.shape[0]?g.clone():g.concat(i.slice([1,0],[i.shape[0]-1,i.shape[1]]),0);var a=r.matMul(o).div(e).neg(),s=m.slice([p,0],[f-p,d]),u=a.mul(y);if(0===p)m=s.sub(u.matMul(y.transpose().matMul(s)));else{var c=s.sub(u.matMul(y.transpose().matMul(s)));m=m.slice([0,0],[p,d]).concat(c,0)}var l=v.slice([0,p],[f,v.shape[1]-p]);if(0===p)v=l.sub(l.matMul(y).matMul(u.transpose()));else{var h=l.sub(l.matMul(y).matMul(u.transpose()));v=v.slice([0,0],[f,p]).concat(h,1)}return[y,m,v]}))[0],m=t[1],v=t[2],Ze([e,n,r])},n=0;n<t;++n)e(n);return!o&&d<f&&(v=v.slice([0,0],[f,d]),m=m.slice([0,0],[d,d])),[v,m]})}var Dl=gn({gramSchmidt_:function(e){var t;if(Array.isArray(e)){t=!1,O(null!=e&&0<e.length,function(){return"Gram-Schmidt process: input must not be null, undefined, or empty"});for(var n=e[0].shape[0],r=function(t){O(e[t].shape[0]===n,function(){return"Gram-Schmidt: Non-unique lengths found in the input vectors: ("+e[t].shape[0]+" vs. "+n+")"})},o=1;o<e.length;++o)r(o)}else t=!0,e=Vn(e,e.shape[0],0).map(function(t){return Sr(t,[0])});O(e.length<=e[0].shape[0],function(){return"Gram-Schmidt: Number of vectors ("+e.length+") exceeds number of dimensions ("+e[0].shape[0]+")."});function i(r){a.push(qt.tidy(function(){var t=s[r];if(0<r)for(var e=0;e<r;++e){var n=Uc(a[e].mulStrict(t)).mul(a[e]);t=t.sub(n)}return t.div(Yc(t,"euclidean"))}))}var a=[],s=e;for(o=0;o<e.length;++o)i(o);return t?kr(a,0):a}}),Fl=gn({qr_:function(t,o){if(void 0===o&&(o=!1),t.rank<2)throw new Error("qr() requires input tensor to have a rank >= 2, but got rank "+t.rank);if(2===t.rank)return Tl(t,o);var e=t.shape.slice(0,t.shape.length-2).reduce(function(t,e){return t*e}),n=Tr(t.reshape([e,t.shape[t.shape.length-2],t.shape[t.shape.length-1]]),0),i=[],a=[];return n.forEach(function(t){var e=Tl(t,o),n=e[0],r=e[1];i.push(n),a.push(r)}),[kr(i,0).reshape(t.shape),kr(a,0).reshape(t.shape)]}}),Ml=Object.freeze({gramSchmidt:Dl,qr:Fl});function Pl(t,e,n,r,o){null==r&&(r=.5),null==o&&(o=Number.NEGATIVE_INFINITY);var i=t.shape[0];return n=Math.min(n,i),O(0<=r&&r<=1,function(){return"iouThreshold must be in [0, 1], but was '"+r+"'"}),O(2===t.rank,function(){return"boxes must be a 2D tensor, but was of rank '"+t.rank+"'"}),O(4===t.shape[1],function(){return"boxes must have 4 columns, but 2nd dimension was "+t.shape[1]}),O(1===e.rank,function(){return"scores must be a 1D tensor"}),O(e.shape[0]===i,function(){return"scores has incompatible shape with boxes. Expected "+i+", but was "+e.shape[0]}),{maxOutputSize:n,iouThreshold:r,scoreThreshold:o}}var Ol=gn({resizeBilinear_:function(t,e,r){void 0===r&&(r=!1);var n=on(t,"images","resizeBilinear");O(3===n.rank||4===n.rank,function(){return"Error in resizeBilinear: x must be rank 3 or 4, but got rank "+n.rank+"."}),O(2===e.length,function(){return"Error in resizeBilinear: new shape must 2D, but got shape "+e+"."});var o=n,i=!1;3===n.rank&&(i=!0,o=n.as4D(1,n.shape[0],n.shape[1],n.shape[2]));var a=e[0],s=e[1],u=qt.runKernel(function(t,e){return e([o]),t.resizeBilinear(o,a,s,r)},{batchImages:o},function(e,n){return{batchImages:function(){return qt.runKernel(function(t){return t.resizeBilinearBackprop(e,n[0],r)},{})}}});return i?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),Bl=gn({resizeNearestNeighbor_:function(t,e,r){void 0===r&&(r=!1);var n=on(t,"images","resizeNearestNeighbor");O(3===n.rank||4===n.rank,function(){return"Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank "+n.rank+"."}),O(2===e.length,function(){return"Error in resizeNearestNeighbor: new shape must 2D, but got shape "+e+"."}),O("float32"===n.dtype||"int32"===n.dtype,function(){return"`images` must have `int32` or `float32` as dtype"});var o=n,i=!1;3===n.rank&&(i=!0,o=n.as4D(1,n.shape[0],n.shape[1],n.shape[2]));var a=e[0],s=e[1],u=qt.runKernel(function(t,e){return e([o]),t.resizeNearestNeighbor(o,a,s,r)},{batchImages:o},function(e,n){return{batchImages:function(){return qt.runKernel(function(t){return t.resizeNearestNeighborBackprop(e,n[0],r)},{})}}});return i?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),Ll=gn({nonMaxSuppression_:function(t,e,n,r,o){void 0===r&&(r=.5),void 0===o&&(o=Number.NEGATIVE_INFINITY);var i=on(t,"boxes","nonMaxSuppression"),a=on(e,"scores","nonMaxSuppression"),s=Pl(i,a,n,r,o);return n=s.maxOutputSize,r=s.iouThreshold,o=s.scoreThreshold,qt.runKernel(function(t){return t.nonMaxSuppression(i,a,n,r,o)},{$boxes:i})}}),Wl=gn({cropAndResize_:function(t,e,n,r,o,i){var a=on(t,"image","cropAndResize","float32"),s=on(e,"boxes","cropAndResize","float32"),u=on(n,"boxInd","cropAndResize","int32");o=o||"bilinear",i=i||0;var c=s.shape[0];return O(4===a.rank,function(){return"Error in cropAndResize: image must be rank 4,but got rank "+a.rank+"."}),O(2===s.rank&&4===s.shape[1],function(){return"Error in cropAndResize: boxes must be have size ["+c+",4] but had shape "+s.shape+"."}),O(1===u.rank&&u.shape[0]===c,function(){return"Error in cropAndResize: boxInd must be have size ["+c+"] but had shape "+s.shape+"."}),O(2===r.length,function(){return"Error in cropAndResize: cropSize must be of length 2, but got length "+r.length+"."}),O(1<=r[0]&&1<=r[1],function(){return"cropSize must be atleast [1,1], but was "+r}),O("bilinear"===o||"nearest"===o,function(){return"method must be bilinear or nearest, but was "+o}),qt.runKernel(function(t,e){return t.cropAndResize(a,s,u,r,o,i)},{$image:a,$boxes:s})}}),zl=Object.freeze({resizeBilinear:Ol,resizeNearestNeighbor:Bl,nonMaxSuppression:Ll,nonMaxSuppressionAsync:function(u,c,l,h,p){return void 0===h&&(h=.5),void 0===p&&(p=Number.NEGATIVE_INFINITY),y(this,void 0,void 0,function(){var e,n,r,o,i,a,s;return I(this,function(t){switch(t.label){case 0:return e=on(u,"boxes","nonMaxSuppressionAsync"),n=on(c,"scores","nonMaxSuppressionAsync"),r=Pl(e,n,l,h,p),l=r.maxOutputSize,h=r.iouThreshold,p=r.scoreThreshold,[4,Promise.all([e.data(),n.data()])];case 1:return o=t.sent(),i=o[0],a=o[1],s=Eo(i,a,l,h,p),e!==u&&e.dispose(),n!==c&&n.dispose(),[2,s]}})})},cropAndResize:Wl}),Ul=gn({matMul_:function(t){var e,n=t.a,r=t.b,o=t.transposeA,s=void 0!==o&&o,i=t.transposeB,u=void 0!==i&&i,c=t.bias,a=t.activation,l=void 0===a?"linear":a,h=t.preluActivationWeights,p=on(n,"a","fused matMul"),f=on(r,"b","fused matMul");e=Bt(p,f),p=e[0],f=e[1];var d=s?p.shape[p.rank-2]:p.shape[p.rank-1],v=u?f.shape[f.rank-1]:f.shape[f.rank-2],m=s?p.shape[p.rank-1]:p.shape[p.rank-2],g=u?f.shape[f.rank-2]:f.shape[f.rank-1],y=p.shape.slice(0,-2),x=f.shape.slice(0,-2),b=L(y),w=L(x);O(2<=p.rank&&2<=f.rank&&p.rank===f.rank,function(){return"Error in fused matMul: inputs must have the same rank of at least 2, got ranks "+p.rank+" and "+f.rank+"."}),O(k(y,x),function(){return"Error in fused matMul: outer dimensions ("+y+") and ("+x+") of Tensors with shapes "+p.shape+" and "+f.shape+" must match."}),O(d===v,function(){return"Error in fused matMul: inner shapes ("+d+") and ("+v+") of Tensors with shapes "+p.shape+" and "+f.shape+" and transposeA="+s+" and transposeB="+u+" must match."});var C,E,_=p.shape.slice(0,-2).concat([m,g]),R=s?p.as3D(b,d,m):p.as3D(b,m,d),I=u?f.as3D(w,g,v):f.as3D(w,v,g);null!=c&&ro(_,(C=Bt(C=on(c,"bias","fused matMul"),p)[0]).shape),null!=h&&(E=on(h,"prelu weights","fused matMul"));var S={$a:R,$b:I};return null!=c&&(S.$bias=C),null!=h&&(S.$preluActivationWeights=E),qt.runKernel(function(t,e){var n=t.fusedBatchMatMul({a:R,b:I,transposeA:s,transposeB:u,bias:C,activation:l,preluActivationWeights:E});return e([R,I,n]),n},S,function(t,e){var n,r=e[0],o=e[1],i=e[2];if(null==l||"linear"===l)n=t;else{if("relu"!==l)throw new Error("Gradient for activation "+l+" has not been implemented yet.");n=t.mul(i.step())}var a={};return null!=c&&(a={$bias:function(){var t=n,e=no(C.shape,n.shape);return 0<e.length&&(t=t.sum(e)),t.reshape(C.shape)}}),s||u?!s&&u?Object.assign({$a:function(){return n.matMul(o,!1,!1)},$b:function(){return n.matMul(r,!0,!1)}},a):s&&!u?Object.assign({$a:function(){return o.matMul(n,!1,!0)},$b:function(){return r.matMul(n,!1,!1)}},a):Object.assign({$a:function(){return o.matMul(n,!0,!0)},$b:function(){return n.matMul(r,!0,!0)}},a):Object.assign({$a:function(){return n.matMul(o,!1,!0)},$b:function(){return r.matMul(n,!0,!1)}},a)}).reshape(_)}}),Vl=gn({conv2d_:function(t){var e=t.x,n=t.filter,u=t.strides,c=t.pad,r=t.dataFormat,o=void 0===r?"NHWC":r,i=t.dilations,l=void 0===i?[1,1]:i,a=t.dimRoundingMode,h=t.bias,s=t.activation,p=void 0===s?"linear":s,f=t.preluActivationWeights,d=on(e,"x","conv2d"),v=on(n,"filter","conv2d"),m=d,g=!1;3===d.rank&&(g=!0,m=d.as4D(1,d.shape[0],d.shape[1],d.shape[2])),O(4===m.rank,function(){return"Error in fused conv2d: input must be rank 4, but got rank "+m.rank+"."}),O(4===v.rank,function(){return"Error in fused conv2d: filter must be rank 4, but got rank "+v.rank+"."}),null!=a&&O(B(c),function(){return"Error in fused conv2d: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+c+"."}),O(m.shape[3]===v.shape[2],function(){return"Error in conv2d: depth of input ("+m.shape[3]+") must match input depth for filter "+v.shape[2]+"."}),O(vo(u,l),function(){return"Error in conv2D: Either strides or dilations must be 1. Got strides "+u+" and dilations '"+l+"'"}),O("NHWC"===o,function(){return"Error in conv2d: got dataFormat of "+o+" but only NHWC is currently supported."});var y,x,b=ao(m.shape,v.shape,u,l,c,a);null!=h&&(y=Bt(y=on(h,"bias","fused conv2d"),d)[0],ro(b.outShape,y.shape)),null!=f&&(x=on(f,"prelu weights","fused conv2d"));var w={x:m,$filter:v};null!=h&&(w.$bias=y),null!=f&&(w.$preluActivationWeights=x);var C=qt.runKernel(function(t,e){var n=t.fusedConv2d(m,v,b,y,p,x);return e([v,m,n]),n},w,function(t,e){var n,r=e,o=r[0],i=r[1],a=r[2];if(null==p||"linear"===p)n=t;else{if("relu"!==p)throw new Error("Gradient for activation "+p+" has not been implemented yet.");n=t.mul(a.step())}O(fo(l),function(){return"Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+l+"'"});var s={};return null!=h&&(s={$bias:function(){var t=n,e=no(y.shape,n.shape);return 0<e.length&&(t=t.sum(e)),t.reshape(y.shape)}}),Object.assign({x:function(){return ac(i.shape,n,o,u,c)},$filter:function(){return ic(i,n,o.shape,u,c)}},s)});return g?C.as3D(C.shape[1],C.shape[2],C.shape[3]):C}}),Gl=Object.freeze({matMul:Ul,conv2d:Vl}),Hl=Object.freeze({image:zl,linalg:Ml,losses:Al,spectral:sl,fused:Gl,signal:bl,op:gn,batchNormalization2d:eu,batchNormalization3d:nu,batchNormalization4d:ru,batchNormalization:ou,batchNorm:iu,batchNorm2d:au,batchNorm3d:su,batchNorm4d:uu,booleanMaskAsync:Xu,complex:yn,real:xn,imag:bn,concat:Bn,concat1d:Ln,concat2d:Wn,concat3d:zn,concat4d:Un,split:Vn,conv1d:nc,conv2d:rc,conv3d:oc,conv2dDerFilter:ic,conv2dDerInput:ac,depthwiseConv2d:sc,separableConv2d:uc,conv2dTranspose:cc,conv3dTranspose:lc,matMul:hc,dot:pc,outerProduct:fc,reverse:dc,reverse1d:vc,reverse2d:mc,reverse3d:gc,reverse4d:yc,maxPool:wc,avgPool:Cc,pool:Ec,maxPool3d:_c,avgPool3d:Rc,slice:Ic,slice1d:Sc,slice2d:kc,slice3d:Nc,slice4d:Ac,abs:fs,acos:ds,acosh:vs,asin:ms,asinh:gs,atan:ys,atanh:xs,ceil:bs,clipByValue:ws,cos:Cs,cosh:Es,erf:_s,exp:Rs,expm1:Is,floor:Ss,log:ks,log1p:Ns,logSigmoid:As,neg:Ts,reciprocal:Ds,round:Fs,rsqrt:Ms,sigmoid:Ps,sign:Os,isNaN:Bs,isInf:Ls,isFinite:Ws,sin:zs,sinh:Us,softplus:Vs,sqrt:Gs,square:Hs,step:js,tan:qs,tanh:$s,all:Dc,any:Fc,argMax:Mc,argMin:Pc,logSumExp:Oc,max:Bc,mean:Lc,min:Wc,moments:zc,sum:Uc,prod:Vc,equal:Pu,equalStrict:Ou,greater:Bu,greaterEqual:Lu,greaterEqualStrict:Wu,greaterStrict:zu,less:Uu,lessEqual:Vu,lessEqualStrict:Gu,lessStrict:Hu,notEqual:ju,notEqualStrict:qu,add:du,addN:vu,addStrict:mu,atan2:gu,div:yu,divStrict:xu,floorDiv:bu,maximum:wu,maximumStrict:Cu,minimum:Eu,minimumStrict:_u,mod:Ru,modStrict:Iu,mul:Su,mulStrict:ku,pow:Nu,powStrict:Au,squaredDifference:Tu,squaredDifferenceStrict:Du,sub:Fu,subStrict:Mu,elu:Gc,leakyRelu:Hc,prelu:jc,relu:qc,selu:$c,logicalAnd:cu,logicalNot:lu,logicalOr:hu,logicalXor:pu,where:fu,whereAsync:tu,buffer:or,print:ir,batchToSpaceND:sr,cast:ur,clone:cr,cumsum:lr,depthToSpace:hr,expandDims:pr,eye:fr,multinomial:dr,oneHot:vr,pad:mr,pad1d:gr,pad2d:yr,pad3d:xr,pad4d:br,rand:wr,randomNormal:Cr,randomGamma:Er,randomUniform:_r,reshape:Rr,spaceToBatchND:Ir,squeeze:Sr,stack:kr,tile:Nr,truncatedNormal:Ar,unstack:Tr,setdiff1dAsync:ar,fill:Dn,linspace:Fn,ones:An,range:Mn,scalar:En,tensor:wn,tensor1d:_n,tensor2d:Rn,tensor3d:In,tensor4d:Sn,tensor5d:kn,tensor6d:Nn,zeros:Tn,onesLike:Pn,zerosLike:On,transpose:Kc,softmax:Xr,logSoftmax:Yr,localResponseNormalization:Xc,norm:Yc,gather:Yu,unsortedSegmentSum:Ju,basicLSTMCell:Jc,multiRNNCell:Qc,movingAverage:Zc,stridedSlice:tl,topk:el,scatterND:nl,fft:rl,ifft:ol,rfft:il,irfft:al,sparseToDense:ul,gatherND:cl,diag:ll,dropout:hl,hannWindow:ml,hammingWindow:gl,frame:yl,stft:xl,inTopKAsync:fl});function jl(t,e,n,r){if("linear"===n)return t.linear(e);if("relu"===n)return t.relu(e);if("elu"===n)return t.elu(e);if("prelu"===n)return t.prelu(e,r);throw new Error("Activation "+n+" has not been implemented for the CPU backend.")}var ql=($l.prototype.register=function(t,e,n){if(this.firstUse&&(this.firstUse=!1,_.get("IS_NODE")&&en("\n============================\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\n============================\n")),this.data.has(t))throw new Error("Data buffer is already registered");this.data.set(t,{dtype:n})},$l.prototype.write=function(t,e){if(null==e)throw new Error("MathBackendCPU.write(): values can not be null");this.data.get(t).values=e},$l.prototype.fromPixels=function(t,e){if(null==t)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");var n,r,o=t.data instanceof Uint8Array,i="undefined"!=typeof ImageData&&t instanceof ImageData,a="undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement,s="undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement,u=a?[t.videoWidth,t.videoHeight]:[t.width,t.height],c=u[0],l=u[1];if(_.get("IS_NODE")&&null==t.getContext)throw new Error("When running in node, pixels must be an HTMLCanvasElement like the one returned by the `canvas` npm package");if(null!=t.getContext)n=t.getContext("2d").getImageData(0,0,c,l).data;else if(i||o)n=t.data;else{if(!s&&!a)throw new Error("pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData or {data: Uint32Array, width: number, height: number}, but was "+t.constructor.name);if(null==this.fromPixels2DContext)throw new Error("Can't read pixels from HTMLImageElement outside the browser.");this.fromPixels2DContext.canvas.width=c,this.fromPixels2DContext.canvas.height=l,this.fromPixels2DContext.drawImage(t,0,0,c,l),n=this.fromPixels2DContext.getImageData(0,0,c,l).data}if(4===e)r=new Int32Array(n);else{var h=c*l;r=new Int32Array(h*e);for(var p=0;p<h;p++)for(var f=0;f<e;++f)r[p*e+f]=n[4*p+f]}return In(r,[l,c,e],"int32")},$l.prototype.read=function(e){return y(this,void 0,void 0,function(){return I(this,function(t){return[2,this.readSync(e)]})})},$l.prototype.readSync=function(t){var e=this.data.get(t),n=e.dtype,r=e.complexTensors;return"complex64"===n?wo(this.readSync(r.real.dataId),this.readSync(r.imag.dataId)):this.data.get(t).values},$l.prototype.bufferSync=function(t){var e=this.readSync(t.dataId),n=e;if("string"===t.dtype)try{n=e.map(function(t){return rt(t)})}catch(t){throw new Error("Failed to decode encoded string bytes into utf-8")}return or(t.shape,t.dtype,n)},$l.prototype.disposeData=function(t){if(this.data.has(t)){var e=this.data.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.data.delete(t)}},$l.prototype.time=function(n){return y(this,void 0,void 0,function(){var e;return I(this,function(t){return e=tt(),n(),[2,{kernelMs:tt()-e}]})})},$l.prototype.memory=function(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}},$l.prototype.complex=function(t,e){var n=yt.make(t.shape,{},"complex64");return this.data.get(n.dataId).complexTensors={real:qt.keep(t.clone()),imag:qt.keep(e.clone())},n},$l.prototype.real=function(t){return this.data.get(t.dataId).complexTensors.real.clone()},$l.prototype.imag=function(t){return this.data.get(t.dataId).complexTensors.imag.clone()},$l.prototype.assertNotComplex=function(t,e){Array.isArray(t)||(t=[t]),t.forEach(function(t){null!=t&&O("complex64"!==t.dtype,function(){return e+" does not support complex64 tensors."})})},$l.prototype.slice=function(t,n,e){if(this.assertNotComplex(t,"slice"),Hr(t.shape,n,e)){var r=jr(n,t.strides),o=L(e);return wn(this.readSync(t.dataId).subarray(r,r+o),e,t.dtype)}for(var i=or(e,t.dtype),a=this.bufferSync(t),s=0;s<i.size;++s){var u=i.indexToLoc(s).map(function(t,e){return t+n[e]});i.values[s]=a.get.apply(a,u)}return i.toTensor()},$l.prototype.stridedSlice=function(t,e,n,r){this.assertNotComplex(t,"stridedSlice");var o=Ur(e,n,r);if(o.some(function(t){return 0===t}))return wn([],o);for(var i=or(o,t.dtype),a=this.bufferSync(t),s=0;s<i.size;s++){for(var u=i.indexToLoc(s),c=new Array(u.length),l=0;l<c.length;l++)c[l]=u[l]*r[l]+e[l];i.set.apply(i,[a.get.apply(a,c)].concat(u))}return i.toTensor()},$l.prototype.diag=function(t){for(var e=this.readSync(t.dataId),n=or([t.size,t.size],t.dtype),r=n.values,o=0;o<e.length;o++)r[o*t.size+o]=e[o];return n.toTensor()},$l.prototype.unstack=function(t,e){for(var n=t.shape[e],r=new Array(t.rank-1),o=0,i=0;i<t.rank;i++)i!==e&&(r[o++]=t.shape[i]);var a=new Array(t.rank).fill(0),s=t.shape.slice();s[e]=1;var u=new Array(n);for(i=0;i<u.length;i++)u[a[e]=i]=this.slice(t,a,s).reshape(r);return u},$l.prototype.reverse=function(r,o){this.assertNotComplex(r,"reverse");for(var i=or(r.shape,r.dtype),a=this.bufferSync(r),t=function(t){var e=i.indexToLoc(t),n=e.slice();o.forEach(function(t){return n[t]=r.shape[t]-1-n[t]}),i.set.apply(i,[a.get.apply(a,n)].concat(e))},e=0;e<i.size;e++)t(e);return i.toTensor()},$l.prototype.concat=function(t,n){var a=this;if("complex64"===t[0].dtype){var e=t.map(function(t){return xn(t)}),r=t.map(function(t){return bn(t)});return yn(this.concat(e,n),this.concat(r,n))}var o=t.map(function(t){var e=L(t.shape.slice(n));return t.as2D(-1,e)}),s=mn(o.map(function(t){return t.shape}),1),u=or(s,t[0].dtype).values;if(1===o[0].shape[0]){var i=0;o.forEach(function(t){u.set(a.readSync(t.dataId),i),i+=t.size})}else{var c=0;o.forEach(function(t){for(var e=a.readSync(t.dataId),n=0,r=0;r<t.shape[0];++r)for(var o=r*s[1]+c,i=0;i<t.shape[1];++i)u[o+i]=e[n++];c+=t.shape[1]})}var l=mn(t.map(function(t){return t.shape}),n);return wn(u,l,t[0].dtype)},$l.prototype.neg=function(t){return this.assertNotComplex(t,"neg"),this.multiply(En(-1),t)},$l.prototype.add=function(t,e){return"complex64"===t.dtype||"complex64"===e.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),e.cast("complex64"),function(t,e,n,r){return{real:t+n,imag:e+r}}):this.broadcastedBinaryOp(t,e,Pt(t.dtype,e.dtype),function(t,e){return t+e})},$l.prototype.addN=function(t){var e=this;this.assertNotComplex(t,"addN");for(var n=t.map(function(t){return e.readSync(t.dataId)}),r=or(t[0].shape,t[0].dtype),o=r.values,i=0;i<t.length;i++)for(var a=n[i],s=0;s<o.length;s++)o[s]+=a[s];return r.toTensor()},$l.prototype.subtract=function(t,e){return"complex64"===t.dtype||"complex64"===e.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),e.cast("complex64"),function(t,e,n,r){return{real:t-n,imag:e-r}}):this.broadcastedBinaryOp(t,e,Pt(t.dtype,e.dtype),function(t,e){return t-e})},$l.prototype.pow=function(t,e){return this.assertNotComplex([t,e],"pow"),this.broadcastedBinaryOp(t,e,t.dtype,function(t,e){return Math.pow(t,e)})},$l.prototype.batchMatMul=function(t,e,n,r){this.assertNotComplex([t,e],"matMul");for(var o=n?t.shape[1]:t.shape[2],i=n?t.shape[2]:t.shape[1],a=r?e.shape[1]:e.shape[2],s=t.shape[0],u=this.readSync(t.dataId),c=this.readSync(e.dataId),l=n?[t.strides[0],1,t.strides[1]]:[t.strides[0],t.strides[1],1],h=l[0],p=l[1],f=l[2],d=r?[1,e.strides[1],e.strides[0]]:[e.strides[1],1,e.strides[0]],v=d[0],m=d[1],g=d[2],y=i*a,x=or([s,i,a],t.dtype),b=x.values,w=this.blockSize,C=0;C<s;C++)for(var E=0;E<i;E+=w)for(var _=0;_<a;_+=w)for(var R=0;R<o;R+=w)for(var I=Math.min(E+w,i),S=Math.min(_+w,a),k=Math.min(R+w,o),N=E;N<I;N++)for(var A=_;A<S;A++){for(var T=0,D=R;D<k;D++)T+=u[C*h+N*p+D*f]*c[D*v+A*m+C*g];b[C*y+(N*a+A)]+=T}return x.toTensor()},$l.prototype.fusedBatchMatMul=function(t){var e=t.a,n=t.b,r=t.transposeA,o=t.transposeB,i=t.bias,a=t.activation,s=t.preluActivationWeights,u=this.batchMatMul(e,n,r,o);return i&&(u=this.add(u,i)),a&&(u=jl(this,u,a,s)),u},$l.prototype.multiply=function(t,e){return"complex64"===t.dtype||"complex64"===e.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),e.cast("complex64"),function(t,e,n,r){return{real:t*n-e*r,imag:t*r+e*n}}):this.broadcastedBinaryOp(t,e,Pt(t.dtype,e.dtype),function(t,e){return t*e})},$l.prototype.realDivide=function(t,e){return this.assertNotComplex([t,e],"realDivide"),this.broadcastedBinaryOp(t,e,"float32",function(t,e){return t/e})},$l.prototype.floorDiv=function(t,e){return this.assertNotComplex([t,e],"floorDiv"),this.broadcastedBinaryOp(t,e,"int32",function(t,e){return Math.floor(t/e)})},$l.prototype.sum=function(t,e){this.assertNotComplex(t,"sum"),hn("sum",e,t.rank);for(var n=cn(t.shape,e),r=n[0],o=n[1],i=Tn(r,Pt(t.dtype,"int32")),a=L(o),s=this.readSync(i.dataId),u=this.readSync(t.dataId),c=0;c<s.length;++c){for(var l=c*a,h=0,p=0;p<a;++p)h+=u[l+p];s[c]=h}return i},$l.prototype.prod=function(t,e){this.assertNotComplex(t,"sum");for(var n=cn(t.shape,e),r=n[0],o=n[1],i=Tn(r,Pt(t.dtype,"int32")),a=L(o),s=this.readSync(i.dataId),u=this.readSync(t.dataId),c=0;c<s.length;++c){for(var l=c*a,h=1,p=0;p<a;++p)h*=u[l+p];s[c]=h}return i},$l.prototype.unsortedSegmentSum=function(t,e,n){this.assertNotComplex(t,"unsortedSegmentSum");for(var r=[],o=t.rank-e.rank,i=0;i<o;++i)e=e.expandDims(i+1);for(i=0;i<n;++i){var a=En(i,"int32"),s=Pu(a,e).asType("float32").mul(t).sum(0);r.push(s)}return kr(r)},$l.prototype.argMin=function(t,e){this.assertNotComplex(t,"argMin");var n=[e];hn("argMin",n,t.rank);for(var r=cn(t.shape,n),o=r[0],i=r[1],a=Tn(o,"int32"),s=L(i),u=this.readSync(a.dataId),c=this.readSync(t.dataId),l=0;l<u.length;++l){for(var h=l*s,p=c[h],f=0,d=0;d<s;++d){var v=c[h+d];v<p&&(p=v,f=d)}u[l]=f}return a},$l.prototype.argMax=function(t,e){this.assertNotComplex(t,"argMax");var n=[e];hn("argMax",n,t.rank);for(var r=cn(t.shape,n),o=r[0],i=r[1],a=Tn(o,"int32"),s=L(i),u=this.readSync(a.dataId),c=this.readSync(t.dataId),l=0;l<u.length;++l){for(var h=l*s,p=c[h],f=0,d=0;d<s;++d){var v=c[h+d];p<v&&(p=v,f=d)}u[l]=f}return a},$l.prototype.cumsum=function(t,e,n,r){if(this.assertNotComplex(t,"cumsum"),e!==t.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(t.rank-1)+" but got axis="+e);for(var o=Pt(t.dtype,"int32"),i=Tn(t.shape,o),a=this.readSync(i.dataId),s=this.readSync(t.dataId),u=t.shape[t.rank-1],c=r?function(t,e){return t+u-e-1}:function(t,e){return t+e},l=0;l<s.length;l+=u)for(var h=0;h<u;h++){var p=c(l,h);if(0===h)a[p]=n?0:s[p];else{var f=c(l,h-1);a[p]=n?s[f]+a[f]:s[p]+a[f]}}return i},$l.prototype.equal=function(t,e){return this.assertNotComplex([t,e],"equal"),this.broadcastedBinaryOp(t,e,"bool",function(t,e){return t===e?1:0})},$l.prototype.notEqual=function(t,e){return this.assertNotComplex([t,e],"notEqual"),this.broadcastedBinaryOp(t,e,"bool",function(t,e){return t!==e?1:0})},$l.prototype.less=function(t,e){return this.assertNotComplex([t,e],"less"),this.broadcastedBinaryOp(t,e,"bool",function(t,e){return t<e?1:0})},$l.prototype.lessEqual=function(t,e){return this.assertNotComplex([t,e],"lessEqual"),this.broadcastedBinaryOp(t,e,"bool",function(t,e){return t<=e?1:0})},$l.prototype.greater=function(t,e){return this.assertNotComplex([t,e],"greater"),this.broadcastedBinaryOp(t,e,"bool",function(t,e){return e<t?1:0})},$l.prototype.greaterEqual=function(t,e){return this.assertNotComplex([t,e],"greaterEqual"),this.broadcastedBinaryOp(t,e,"bool",function(t,e){return e<=t?1:0})},$l.prototype.logicalNot=function(t){this.assertNotComplex(t,"logicalNot");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r<e.length;++r)n[r]=e[r]?0:1;return yt.make(t.shape,{values:n},"bool")},$l.prototype.logicalAnd=function(t,e){return this.assertNotComplex([t,e],"logicalAnd"),this.broadcastedBinaryOp(t,e,"bool",function(t,e){return t&&e})},$l.prototype.logicalOr=function(t,e){return this.assertNotComplex([t,e],"logicalOr"),this.broadcastedBinaryOp(t,e,"bool",function(t,e){return t||e})},$l.prototype.select=function(t,e,n){this.assertNotComplex([t,e,n],"select");for(var r=this.readSync(t.dataId),o=this.readSync(e.dataId),i=this.readSync(n.dataId),a=Tn(e.shape,Pt(e.dtype,n.dtype)),s=this.readSync(a.dataId),u=0,c=0===t.rank||1<t.rank||1===e.rank?1:e.shape[1],l=0;l<r.length;l++)for(var h=0;h<c;h++)1===r[l]?s[u++]=o[l]:s[u++]=i[l];return a},$l.prototype.where=function(t){this.assertNotComplex([t],"where");var e=this.readSync(t.dataId);return ko(t.shape,e)},$l.prototype.topk=function(t,e,n){return this.assertNotComplex(t,"topk"),So(this.readSync(t.dataId),t.shape,t.dtype,e)},$l.prototype.min=function(t,e){this.assertNotComplex(t,"min"),hn("min",e,t.rank);for(var n=cn(t.shape,e),r=n[0],o=n[1],i=Tn(r,t.dtype),a=L(o),s=this.readSync(i.dataId),u=this.readSync(t.dataId),c=0;c<s.length;++c){for(var l=c*a,h=u[l],p=0;p<a;++p){var f=u[l+p];f<h&&(h=f)}s[c]=h}return i},$l.prototype.minimum=function(t,e){return this.assertNotComplex([t,e],"minimum"),this.broadcastedBinaryOp(t,e,t.dtype,function(t,e){return Math.min(t,e)})},$l.prototype.mod=function(t,e){return this.assertNotComplex([t,e],"mod"),this.broadcastedBinaryOp(t,e,t.dtype,function(t,e){var n=t%e;return t<0&&e<0||0<=t&&0<=e?n:(n+e)%e})},$l.prototype.max=function(t,e){this.assertNotComplex(t,"max"),hn("max",e,t.rank);for(var n=cn(t.shape,e),r=n[0],o=n[1],i=Tn(r,t.dtype),a=L(o),s=this.readSync(i.dataId),u=this.readSync(t.dataId),c=0;c<s.length;++c){for(var l=c*a,h=u[l],p=0;p<a;++p){var f=u[l+p];h<f&&(h=f)}s[c]=h}return i},$l.prototype.maximum=function(t,e){return this.assertNotComplex([t,e],"maximum"),this.broadcastedBinaryOp(t,e,t.dtype,function(t,e){return Math.max(t,e)})},$l.prototype.all=function(t,e){this.assertNotComplex(t,"all"),hn("all",e,t.rank);for(var n=cn(t.shape,e),r=n[0],o=n[1],i=Tn(r,t.dtype),a=L(o),s=this.readSync(i.dataId),u=this.readSync(t.dataId),c=0;c<s.length;++c){for(var l=c*a,h=u[l],p=0;p<a;++p){var f=u[l+p];h=h&&f}s[c]=h}return i},$l.prototype.any=function(t,e){this.assertNotComplex(t,"any"),hn("any",e,t.rank);for(var n=cn(t.shape,e),r=n[0],o=n[1],i=Tn(r,t.dtype),a=L(o),s=this.readSync(i.dataId),u=this.readSync(t.dataId),c=0;c<s.length;++c){for(var l=c*a,h=u[l],p=0;p<a;++p){var f=u[l+p];h=h||f}s[c]=h}return i},$l.prototype.squaredDifference=function(t,e){return this.assertNotComplex([t,e],"squaredDifference"),this.broadcastedBinaryOp(t,e,t.dtype,function(t,e){var n=t-e;return n*n})},$l.prototype.ceil=function(t){this.assertNotComplex(t,"ceil");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r)n[r]=Math.ceil(e[r]);return yt.make(t.shape,{values:n})},$l.prototype.floor=function(t){this.assertNotComplex(t,"floor");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r)n[r]=Math.floor(e[r]);return yt.make(t.shape,{values:n})},$l.prototype.sign=function(t){this.assertNotComplex(t,"x");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r)e[r]<0?n[r]=-1:0<e[r]?n[r]=1:n[r]=0;return yt.make(t.shape,{values:n})},$l.prototype.isNaN=function(t){this.assertNotComplex(t,"x");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r<e.length;++r)Number.isNaN(e[r])&&(n[r]=1);return yt.make(t.shape,{values:n},"bool")},$l.prototype.isInf=function(t){this.assertNotComplex(t,"x");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r<e.length;++r)Math.abs(e[r])===1/0&&(n[r]=1);return yt.make(t.shape,{values:n},"bool")},$l.prototype.isFinite=function(t){this.assertNotComplex(t,"x");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r<e.length;++r)Number.isFinite(e[r])&&(n[r]=1);return yt.make(t.shape,{values:n},"bool")},$l.prototype.round=function(t){this.assertNotComplex(t,"round");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r){var o=Math.floor(e[r]);e[r]-o<.5?n[r]=Math.floor(e[r]):.5<e[r]-o?n[r]=Math.ceil(e[r]):n[r]=o%2==0?o:o+1}return yt.make(t.shape,{values:n})},$l.prototype.exp=function(t){this.assertNotComplex(t,"exp");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r)n[r]=Math.exp(e[r]);return yt.make(t.shape,{values:n})},$l.prototype.expm1=function(t){this.assertNotComplex(t,"expm1");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r)n[r]=Math.expm1(e[r]);return yt.make(t.shape,{values:n})},$l.prototype.log=function(t){this.assertNotComplex(t,"log");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r){var o=e[r];n[r]=Math.log(o)}return yt.make(t.shape,{values:n})},$l.prototype.log1p=function(t){this.assertNotComplex(t,"log1p");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r){var o=e[r];n[r]=Math.log1p(o)}return yt.make(t.shape,{values:n})},$l.prototype.sqrt=function(t){this.assertNotComplex(t,"sqrt");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r){var o=e[r];n[r]=Math.sqrt(o)}return yt.make(t.shape,{values:n})},$l.prototype.rsqrt=function(t){this.assertNotComplex(t,"rsqrt");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r){var o=e[r];n[r]=1/Math.sqrt(o)}return yt.make(t.shape,{values:n})},$l.prototype.square=function(t){this.assertNotComplex(t,"square");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r){var o=e[r];n[r]=o*o}return yt.make(t.shape,{values:n})},$l.prototype.reciprocal=function(t){this.assertNotComplex(t,"reciprocal");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r)n[r]=1/e[r];return yt.make(t.shape,{values:n})},$l.prototype.linear=function(t){return t},$l.prototype.relu=function(t){this.assertNotComplex(t,"relu");for(var e=Tn(t.shape,t.dtype),n=this.readSync(e.dataId),r=this.readSync(t.dataId),o=0;o<r.length;++o)n[o]=Math.max(0,r[o]);return e},$l.prototype.prelu=function(t,e){return this.assertNotComplex([t,e],"prelu"),this.broadcastedBinaryOp(t,e,t.dtype,function(t,e){return t<0?e*t:t})},$l.prototype.elu=function(t){this.assertNotComplex(t,"elu");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r){var o=n[r];e[r]=0<=o?o:Math.exp(o)-1}return yt.make(t.shape,{values:e})},$l.prototype.eluDer=function(t,e){this.assertNotComplex([t,e],"eluDer");for(var n=new Float32Array(e.size),r=this.readSync(e.dataId),o=this.readSync(t.dataId),i=0;i<r.length;++i){var a=r[i];n[i]=1<=a?o[i]:o[i]*(a+1)}return yt.make(e.shape,{values:n})},$l.prototype.selu=function(t){this.assertNotComplex(t,"selu");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r){var o=n[r];e[r]=0<=o?1.0507009873554805*o:1.7580993408473768*(Math.exp(o)-1)}return yt.make(t.shape,{values:e})},$l.prototype.clip=function(t,e,n){this.assertNotComplex(t,"clip");for(var r=new Float32Array(t.size),o=this.readSync(t.dataId),i=0;i<o.length;++i){var a=o[i];r[i]=n<a?n:a<e?e:a}return yt.make(t.shape,{values:r})},$l.prototype.abs=function(t){for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.abs(n[r]);return yt.make(t.shape,{values:e})},$l.prototype.complexAbs=function(t){for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<t.size;++r){var o=n[2*r],i=n[2*r+1];e[r]=Math.hypot(o,i)}return yt.make(t.shape,{values:e})},$l.prototype.int=function(t){this.assertNotComplex(t,"int");for(var e=new Int32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=n[r];return yt.make(t.shape,{values:e},"int32")},$l.prototype.sigmoid=function(t){this.assertNotComplex(t,"sigmoid");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=1/(1+Math.exp(-n[r]));return yt.make(t.shape,{values:e})},$l.prototype.softplus=function(t){this.assertNotComplex(t,"softplus");for(var e=Math.log(1.1920928955078125e-7)+2,n=new Float32Array(t.size),r=this.readSync(t.dataId),o=0;o<r.length;++o){var i,a=r[o]>-e,s=r[o]<e,u=Math.exp(r[o]);i=s?u:a?r[o]:Math.log(1+u),n[o]=i}return yt.make(t.shape,{values:n})},$l.prototype.sin=function(t){this.assertNotComplex(t,"sin");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.sin(n[r]);return yt.make(t.shape,{values:e})},$l.prototype.cos=function(t){this.assertNotComplex(t,"cos");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.cos(n[r]);return yt.make(t.shape,{values:e})},$l.prototype.tan=function(t){this.assertNotComplex(t,"tan");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.tan(n[r]);return yt.make(t.shape,{values:e})},$l.prototype.asin=function(t){this.assertNotComplex(t,"asin");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.asin(n[r]);return yt.make(t.shape,{values:e})},$l.prototype.acos=function(t){this.assertNotComplex(t,"acos");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.acos(n[r]);return yt.make(t.shape,{values:e})},$l.prototype.atan=function(t){this.assertNotComplex(t,"atan");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.atan(n[r]);return yt.make(t.shape,{values:e})},$l.prototype.atan2=function(t,e){return this.assertNotComplex([t,e],"atan2"),this.broadcastedBinaryOp(t,e,t.dtype,function(t,e){return Math.atan2(t,e)})},$l.prototype.sinh=function(t){this.assertNotComplex(t,"sinh");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.sinh(n[r]);return yt.make(t.shape,{values:e})},$l.prototype.cosh=function(t){this.assertNotComplex(t,"cosh");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.cosh(n[r]);return yt.make(t.shape,{values:e})},$l.prototype.tanh=function(t){this.assertNotComplex(t,"tanh");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=b(n[r]);return yt.make(t.shape,{values:e})},$l.prototype.asinh=function(t){this.assertNotComplex(t,"asinh");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.asinh(n[r]);return yt.make(t.shape,{values:e})},$l.prototype.acosh=function(t){this.assertNotComplex(t,"acosh");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.acosh(n[r]);return yt.make(t.shape,{values:e})},$l.prototype.atanh=function(t){this.assertNotComplex(t,"atanh");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.atanh(n[r]);return yt.make(t.shape,{values:e})},$l.prototype.erf=function(t){this.assertNotComplex(t,"erf");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r){var o=n[r],i=1/(1+.3275911*o);e[r]=1-((((1.061405429*i-1.453152027)*i+1.421413741)*i-.284496736)*i+.254829592)*i*Math.exp(-o*o)}return yt.make(t.shape,{values:e})},$l.prototype.step=function(t,e){void 0===e&&(e=0),this.assertNotComplex(t,"step");for(var n=new Float32Array(t.size),r=this.readSync(t.dataId),o=0;o<r.length;++o){var i=r[o];isNaN(i)?n[o]=NaN:n[o]=0<i?1:e}return yt.make(t.shape,{values:n})},$l.prototype.fusedConv2d=function(t,e,n,r,o,i){var a=this.conv2d(t,e,n);return r&&(a=this.add(a,r)),o&&(a=jl(this,a,o,i)),a},$l.prototype.conv2d=function(t,e,n){this.assertNotComplex([t,e],"conv2d");for(var r=n.filterHeight,o=n.filterWidth,i=n.dilationHeight,a=n.dilationWidth,s=n.padInfo.left,u=n.padInfo.top,c="channelsLast"===n.dataFormat,l=or(n.outShape,t.dtype),h=t.strides[0],p=c?t.strides[1]:t.strides[2],f=c?t.strides[2]:1,d=c?1:t.strides[1],v=l.strides[0],m=c?l.strides[1]:l.strides[2],g=c?l.strides[2]:1,y=c?1:l.strides[1],x=this.readSync(t.dataId),b=this.readSync(e.dataId),w=l.values,C=0;C<n.batchSize;++C)for(var E=C*h,_=C*v,R=0;R<n.outHeight;++R)for(var I=_+R*m,S=R*n.strideHeight-u,k=0;k<r;k++){var N=S+k*i;if(!(N<0||N>=n.inHeight))for(var A=k*e.strides[0],T=E+N*p,D=0;D<n.outWidth;++D)for(var F=I+D*g,M=D*n.strideWidth-s,P=0;P<o;P++){var O=M+P*a;if(!(O<0||O>=n.inWidth))for(var B=T+O*f,L=A+P*e.strides[1],W=0;W<n.inChannels;++W){for(var z=x[B+W*d],U=0;U<n.outChannels;++U)w[F+U*y]+=z*b[L+U];L+=n.outChannels}}}return l.toTensor()},$l.prototype.conv3d=function(t,e,n){for(var r=n.filterDepth,o=n.filterHeight,i=n.filterWidth,a=n.dilationDepth,s=n.dilationHeight,u=n.dilationWidth,c=n.padInfo.front,l=n.padInfo.left,h=n.padInfo.top,p=or(n.outShape,t.dtype),f=this.readSync(t.dataId),d=this.readSync(e.dataId),v=p.values,m=0;m<n.batchSize;++m)for(var g=m*t.strides[0],y=m*p.strides[0],x=0;x<n.outDepth;++x)for(var b=y+x*p.strides[1],w=x*n.strideDepth-c,C=0;C<r;C++){var E=w+C*a;if(!(E<0||E>=n.inDepth))for(var _=C*e.strides[0],R=g+E*t.strides[1],I=0;I<n.outHeight;++I)for(var S=b+I*p.strides[2],k=I*n.strideHeight-h,N=0;N<o;N++){var A=k+N*s;if(!(A<0||A>=n.inHeight))for(var T=_+N*e.strides[1],D=R+A*t.strides[2],F=0;F<n.outWidth;++F)for(var M=S+F*n.outChannels,P=F*n.strideWidth-l,O=0;O<i;O++){var B=P+O*u;if(!(B<0||B>=n.inWidth))for(var L=T+O*e.strides[2],W=D+B*n.inChannels,z=L,U=0;U<n.inChannels;++U){for(var V=f[W+U],G=0;G<n.outChannels;++G)v[M+G]+=V*d[z+G];z+=n.outChannels}}}}return p.toTensor()},$l.prototype.conv2dDerInput=function(t,e,n){this.assertNotComplex([t,e],"conv2dDerInput");for(var r=or(n.inShape,"float32"),o=r.values,i=this.readSync(t.dataId),a=this.readSync(e.dataId),s=e.strides,u=s[0],c=s[1],l=s[2],h=n.batchSize,p=n.filterHeight,f=n.filterWidth,d=n.inChannels,v=n.inHeight,m=n.inWidth,g=n.outChannels,y=n.outHeight,x=n.outWidth,b=n.strideHeight,w=n.strideWidth,C=n.dataFormat,E=p-1-n.padInfo.top,_=f-1-n.padInfo.left,R="channelsLast"===C,I=r.strides[0],S=R?r.strides[1]:r.strides[2],k=R?r.strides[2]:1,N=R?1:r.strides[1],A=t.strides[0],T=R?t.strides[1]:t.strides[2],D=R?t.strides[2]:1,F=R?1:t.strides[1],M=0;M<h;++M)for(var P=0;P<d;++P)for(var O=0;O<v;++O)for(var B=O-E,L=Math.max(0,Math.ceil(B/b)),W=Math.min(y,(p+B)/b),z=0;z<m;++z){for(var U=z-_,V=Math.max(0,Math.ceil(U/w)),G=Math.min(x,(f+U)/w),H=0,j=L;j<W;++j)for(var q=j*b-B,$=V;$<G;++$)for(var K=A*M+T*j+D*$,X=u*(p-1-q)+c*(f-1-($*w-U))+l*P,Y=0;Y<g;++Y)H+=i[K+F*Y]*a[X+Y];o[I*M+S*O+k*z+N*P]=H}return r.toTensor()},$l.prototype.conv3dDerInput=function(t,e,n){for(var r=or(n.inShape,"float32"),o=r.values,i=r.strides,a=i[0],s=i[1],u=i[2],c=i[3],l=this.readSync(t.dataId),h=t.strides,p=h[0],f=h[1],d=h[2],v=h[3],m=this.readSync(e.dataId),g=e.strides,y=g[0],x=g[1],b=g[2],w=g[3],C=n.batchSize,E=n.filterDepth,_=n.filterHeight,R=n.filterWidth,I=n.inChannels,S=n.inDepth,k=n.inHeight,N=n.inWidth,A=n.outChannels,T=n.outDepth,D=n.outHeight,F=n.outWidth,M=n.strideDepth,P=n.strideHeight,O=n.strideWidth,B=E-1-n.padInfo.front,L=_-1-n.padInfo.top,W=R-1-n.padInfo.left,z=0;z<C;++z)for(var U=0;U<I;++U)for(var V=0;V<S;++V)for(var G=V-B,H=Math.max(0,Math.ceil(G/M)),j=Math.min(T,(E+G)/M),q=0;q<k;++q)for(var $=q-L,K=Math.max(0,Math.ceil($/P)),X=Math.min(D,(_+$)/P),Y=0;Y<N;++Y){for(var J=Y-W,Q=Math.max(0,Math.ceil(J/O)),Z=Math.min(F,(R+J)/O),tt=0,et=H;et<j;++et)for(var nt=et*M-G,rt=K;rt<X;++rt)for(var ot=rt*P-$,it=Q;it<Z;++it)for(var at=p*z+f*et+d*rt+v*it,st=y*(E-1-nt)+x*(_-1-ot)+b*(R-1-(it*O-J))+w*U,ut=0;ut<A;++ut)tt+=l[at+ut]*m[st+ut];o[a*z+s*V+u*q+c*Y+U]=tt}return r.toTensor()},$l.prototype.conv2dDerFilter=function(t,e,n){this.assertNotComplex([t,e],"conv2dDerFilter");for(var r=n.strideHeight,o=n.strideWidth,i=n.filterHeight,a=n.filterWidth,s="channelsLast"===n.dataFormat,u=or(n.filterShape,"float32"),c=n.padInfo.left,l=n.padInfo.top,h=this.bufferSync(t),p=this.bufferSync(e),f=0;f<i;++f)for(var d=Math.max(0,Math.ceil((l-f)/r)),v=Math.min(n.outHeight,(n.inHeight+l-f)/r),m=0;m<a;++m)for(var g=Math.max(0,Math.ceil((c-m)/o)),y=Math.min(n.outWidth,(n.inWidth+c-m)/o),x=0;x<n.inChannels;++x)for(var b=0;b<n.outChannels;++b){for(var w=0,C=0;C<n.batchSize;++C)for(var E=d;E<v;++E)for(var _=f+E*r-l,R=g;R<y;++R){var I=m+R*o-c;w+=s?h.get(C,_,I,x)*p.get(C,E,R,b):h.get(C,x,_,I)*p.get(C,b,E,R)}u.set(w,f,m,x,b)}return u.toTensor()},$l.prototype.conv3dDerFilter=function(t,e,n){for(var r=n.strideDepth,o=n.strideHeight,i=n.strideWidth,a=n.filterDepth,s=n.filterHeight,u=n.filterWidth,c=or(n.filterShape,"float32"),l=c.values,h=c.strides,p=h[0],f=h[1],d=h[2],v=h[3],m=this.readSync(e.dataId),g=e.strides,y=g[0],x=g[1],b=g[2],w=g[3],C=this.readSync(t.dataId),E=t.strides,_=E[0],R=E[1],I=E[2],S=E[3],k=n.padInfo.front,N=n.padInfo.left,A=n.padInfo.top,T=0;T<a;++T)for(var D=Math.max(0,Math.ceil((k-T)/r)),F=Math.min(n.outDepth,(n.inDepth+k-T)/r),M=T*p,P=0;P<s;++P)for(var O=Math.max(0,Math.ceil((A-P)/o)),B=Math.min(n.outHeight,(n.inHeight+A-P)/o),L=P*f+M,W=0;W<u;++W)for(var z=Math.max(0,Math.ceil((N-W)/i)),U=Math.min(n.outWidth,(n.inWidth+N-W)/i),V=W*d+L,G=0;G<n.inChannels;++G)for(var H=G*v+V,j=0;j<n.outChannels;++j){for(var q=0,$=0;$<n.batchSize;++$)for(var K=$*_,X=$*y,Y=D;Y<F;++Y)for(var J=(T+Y*r-k)*R+K,Q=Y*x+X,Z=O;Z<B;++Z)for(var tt=(P+Z*o-A)*I+J,et=Z*b+Q,nt=z;nt<U;++nt){var rt=nt*w+et;q+=C[(W+nt*i-N)*S+tt+G]*m[rt+j]}l[H+j]=q}return c.toTensor()},$l.prototype.depthwiseConv2D=function(t,e,n){this.assertNotComplex([t,e],"depthwiseConv2D");for(var r=n.filterHeight,o=n.filterWidth,i=n.dilationHeight,a=n.dilationWidth,s=n.padInfo.left,u=n.padInfo.top,c=n.outChannels/n.inChannels,l=or(n.outShape,t.dtype),h=this.readSync(t.dataId),p=this.readSync(e.dataId),f=l.values,d=0;d<n.batchSize;++d)for(var v=d*t.strides[0],m=d*l.strides[0],g=0;g<n.outHeight;++g)for(var y=m+g*l.strides[1],x=g*n.strideHeight-s,b=0;b<r;++b){var w=x+b*i;if(!(w<0||w>=n.inHeight))for(var C=b*e.strides[0],E=v+w*t.strides[1],_=0;_<n.outWidth;++_)for(var R=y+_*l.strides[2],I=_*n.strideWidth-u,S=0;S<o;++S){var k=I+S*a;if(!(k<0||k>=n.inWidth))for(var N=C+S*e.strides[1],A=E+k*n.inChannels,T=R,D=N,F=0;F<n.inChannels;++F){for(var M=h[A+F],P=0;P<c;++P)f[T+P]+=M*p[D+P];T+=c,D+=c}}}return l.toTensor()},$l.prototype.depthwiseConv2DDerInput=function(t,e,n){this.assertNotComplex([t,e],"depthwiseConv2DDerInput");for(var r=or(n.inShape,"float32"),o=r.values,i=r.strides,a=i[0],s=i[1],u=i[2],c=this.readSync(t.dataId),l=t.strides,h=l[0],p=l[1],f=l[2],d=this.readSync(e.dataId),v=e.strides,m=v[0],g=v[1],y=v[2],x=n.batchSize,b=n.filterHeight,w=n.filterWidth,C=n.inChannels,E=n.inHeight,_=n.inWidth,R=n.outChannels,I=n.outHeight,S=n.outWidth,k=n.strideHeight,N=n.strideWidth,A=b-1-n.padInfo.top,T=w-1-n.padInfo.left,D=R/C,F=0;F<x;++F)for(var M=0;M<C;++M)for(var P=0;P<E;++P)for(var O=P-A,B=Math.max(0,Math.ceil(O/k)),L=Math.min(I,(b+O)/k),W=0;W<_;++W){for(var z=W-T,U=Math.max(0,Math.ceil(z/N)),V=Math.min(S,(w+z)/N),G=0,H=B;H<L;++H)for(var j=H*k-O,q=U;q<V;++q)for(var $=h*F+p*H+f*q,K=m*(b-1-j)+g*(w-1-(q*N-z))+y*M,X=0;X<D;++X)G+=c[$+(M*D+X)]*d[K+X];o[a*F+s*P+u*W+M]=G}return r.toTensor()},$l.prototype.depthwiseConv2DDerFilter=function(t,e,n){this.assertNotComplex([t,e],"depthwiseConv2DDerFilter");for(var r=n.strideHeight,o=n.strideWidth,i=n.filterHeight,a=n.filterWidth,s=or(n.filterShape,"float32"),u=n.padInfo.left,c=n.padInfo.top,l=n.outChannels/n.inChannels,h=this.bufferSync(t),p=this.bufferSync(e),f=0;f<i;++f)for(var d=Math.max(0,Math.ceil((c-f)/r)),v=Math.min(n.outHeight,(n.inHeight+c-f)/r),m=0;m<a;++m)for(var g=Math.max(0,Math.ceil((u-m)/o)),y=Math.min(n.outWidth,(n.inWidth+u-m)/o),x=0;x<n.outChannels;++x){for(var b=Math.trunc(x/l),w=x%l,C=0,E=0;E<n.batchSize;++E)for(var _=d;_<v;++_)for(var R=f+_*r-c,I=g;I<y;++I){var S=m+I*o-u;C+=h.get(E,R,S,b)*p.get(E,_,I,x)}s.set(C,f,m,b,w)}return s.toTensor()},$l.prototype.tile=function(t,e){return this.assertNotComplex(t,"tile"),Io(this.bufferSync(t),e)},$l.prototype.pad=function(n,t,e){this.assertNotComplex(n,"pad");var r=t.map(function(t,e){return t[0]+n.shape[e]+t[1]}),o=t.map(function(t){return t[0]}),i=this.bufferSync(n),a=or(r,n.dtype);0!==e&&a.values.fill(e);for(var s=0;s<n.size;s++){var u=i.indexToLoc(s),c=u.map(function(t,e){return t+o[e]});a.set.apply(a,[i.get.apply(i,u)].concat(c))}return a.toTensor()},$l.prototype.transpose=function(t,e){this.assertNotComplex(t,"transpose");for(var n=new Array(t.rank),r=0;r<n.length;r++)n[r]=t.shape[e[r]];var o=this.readSync(t.dataId),i=or(n,t.dtype),a=this.bufferSync(t);for(r=0;r<t.size;++r){for(var s=a.indexToLoc(r),u=new Array(s.length),c=0;c<u.length;c++)u[c]=s[e[c]];var l=i.locToIndex(u);i.values[l]=o[r]}return i.toTensor()},$l.prototype.gather=function(t,e,n){this.assertNotComplex([t,e],"gather");var r=t.shape.slice(),o=this.readSync(e.dataId);r[n]=o.length;for(var i=or(r,t.dtype),a=this.bufferSync(t),s=0;s<i.size;++s){var u=i.indexToLoc(s),c=u.slice();c[n]=o[u[n]];var l=a.locToIndex(c);i.values[s]=a.values[l]}return i.toTensor()},$l.prototype.batchToSpaceND=function(t,e,n){this.assertNotComplex([t],"batchToSpaceND");var r=e.reduce(function(t,e){return t*e}),o=Dr(t.shape,e,r),i=Fr(o.length,e.length),a=Mr(t.shape,e,r),s=Pr(n,e.length),u=Or(a,n,e.length);return t.reshape(o).transpose(i).reshape(a).slice(s,u)},$l.prototype.spaceToBatchND=function(t,e,n){this.assertNotComplex([t],"spaceToBatchND");var r=e.reduce(function(t,e){return t*e}),o=[[0,0]];o.push.apply(o,n);for(var i=1+e.length;i<t.shape.length;++i)o.push([0,0]);var a=t.pad(o),s=Dr(a.shape,e,r,!1),u=Fr(s.length,e.length,!1),c=Mr(a.shape,e,r,!1);return a.reshape(s).transpose(u).reshape(c)},$l.prototype.pool=function(t,e,n){this.assertNotComplex(t,"pool");for(var r=e.strideHeight,o=e.strideWidth,i=e.dilationHeight,a=e.dilationWidth,s=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=e.padInfo.top,l=e.padInfo.left,h="max"===n?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,p=this.readSync(t.dataId),f=or(e.outShape,t.dtype),d=f.values,v=e.outShape[1]*e.outShape[2]*e.outShape[3],m=e.outShape[2]*e.outShape[3],g=e.outShape[3],y=0;y<e.batchSize;++y)for(var x=y*v,b=y*t.strides[0],w=0;w<e.inChannels;++w)for(var C=0;C<e.outHeight;++C)for(var E=C*r-c,_=Math.max(0,E),R=Math.min(e.inHeight,s+E),I=x+C*m,S=0;S<e.outWidth;++S){for(var k=S*o-l,N=Math.max(0,k),A=Math.min(e.inWidth,u+k),T=h,D=0,F=0,M=_;M<R;M+=i){for(var P=b+M*t.strides[1],O=N;O<A;O+=a){var B=p[P+O*t.strides[2]+w];"max"===n&&T<B?T=B:"avg"===n&&(D+=B,F++)}if(isNaN(T))break}d[I+S*g+w]="avg"===n?D/F:T}return f.toTensor()},$l.prototype.maxPool=function(t,e){return this.pool(t,e,"max")},$l.prototype.maxPoolPositions=function(t,e){for(var n=or(e.outShape,"int32"),r=e.strideHeight,o=e.strideWidth,i=e.dilationHeight,a=e.dilationWidth,s=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=e.padInfo.top,l=e.padInfo.left,h=this.bufferSync(t),p=0;p<e.batchSize;++p)for(var f=0;f<e.inChannels;++f)for(var d=0;d<e.outHeight;++d){for(var v=d*r-c,m=v;m<0;)m+=i;for(var g=Math.min(e.inHeight,s+v),y=0;y<e.outWidth;++y){for(var x=y*o-l,b=x;b<0;)b+=a;for(var w=Math.min(e.inWidth,u+x),C=Number.NEGATIVE_INFINITY,E=-1,_=m;_<g;_+=i)for(var R=_-v,I=b;I<w;I+=a){var S=I-x,k=h.get(p,_,I,f);C<k&&(C=k,E=R*u+S)}n.set(E,p,d,y,f)}}return n.toTensor()},$l.prototype.maxPoolBackprop=function(t,e,n,r){this.assertNotComplex([e,n],"maxPoolBackprop");for(var o=this.maxPoolPositions(e,r),i=r.strideHeight,a=r.strideWidth,s=r.dilationHeight,u=r.dilationWidth,c=r.effectiveFilterHeight,l=r.effectiveFilterWidth,h=l-1-r.padInfo.left,p=c-1-r.padInfo.top,f=or(e.shape,"float32"),d=this.bufferSync(o),v=this.bufferSync(t),m=0;m<r.batchSize;++m)for(var g=0;g<r.inChannels;++g)for(var y=0;y<r.inHeight;++y)for(var x=0;x<r.inWidth;++x){for(var b=y-p,w=x-h,C=0,E=0;E<c;E+=s){var _=(b+E)/i;if(!(_<0||_>=r.outHeight||Math.floor(_)!==_))for(var R=0;R<l;R+=u){var I=(w+R)/a;if(!(I<0||I>=r.outWidth||Math.floor(I)!==I)){var S=c*l-1-d.get(m,_,I,g)===E*l+R?1:0;0!=S&&(C+=v.get(m,_,I,g)*S)}}}f.set(C,m,y,x,g)}return f.toTensor()},$l.prototype.avgPoolBackprop=function(t,e,n){this.assertNotComplex([t,e],"avgPoolBackprop");for(var r=n.strideHeight,o=n.strideWidth,i=n.filterHeight,a=n.filterWidth,s=n.dilationHeight,u=n.dilationWidth,c=n.effectiveFilterHeight,l=n.effectiveFilterWidth,h=l-1-n.padInfo.left,p=c-1-n.padInfo.top,f=or(e.shape,"float32"),d=1/(i*a),v=this.bufferSync(t),m=0;m<n.batchSize;++m)for(var g=0;g<n.inChannels;++g)for(var y=0;y<n.inHeight;++y)for(var x=0;x<n.inWidth;++x){for(var b=y-p,w=x-h,C=0,E=0;E<c;E+=s){var _=(b+E)/r;if(!(_<0||_>=n.outHeight||Math.floor(_)!==_))for(var R=0;R<l;R+=u){var I=(w+R)/o;I<0||I>=n.outWidth||Math.floor(I)!==I||(C+=v.get(m,_,I,g))}}f.set(C*d,m,y,x,g)}return f.toTensor()},$l.prototype.pool3d=function(t,e,n){this.assertNotComplex(t,"pool3d");for(var r=e.strideDepth,o=e.strideHeight,i=e.strideWidth,a=e.dilationDepth,s=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterDepth,l=e.effectiveFilterHeight,h=e.effectiveFilterWidth,p=e.padInfo.front,f=e.padInfo.top,d=e.padInfo.left,v="max"===n?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,m=this.readSync(t.dataId),g=or(e.outShape,t.dtype),y=g.values,x=e.outShape[1]*e.outShape[2]*e.outShape[3]*e.outShape[4],b=e.outShape[2]*e.outShape[3]*e.outShape[4],w=e.outShape[3]*e.outShape[4],C=e.outShape[4],E=0;E<e.batchSize;++E)for(var _=E*x,R=E*t.strides[0],I=0;I<e.inChannels;++I)for(var S=0;S<e.outDepth;++S){for(var k=S*r-p,N=k;N<0;)N+=a;for(var A=Math.min(e.inDepth,c+k),T=_+S*b,D=0;D<e.outHeight;++D){for(var F=D*o-f,M=F;M<0;)M+=s;for(var P=Math.min(e.inHeight,l+F),O=T+D*w,B=0;B<e.outWidth;++B){for(var L=B*i-d,W=L;W<0;)W+=u;for(var z=Math.min(e.inWidth,h+L),U=O+B*C,V=v,G=0,H=0,j=N;j<A;j+=a){for(var q=R+j*t.strides[1],$=M;$<P;$+=s){for(var K=q+$*t.strides[2],X=W;X<z;X+=u){var Y=m[K+X*t.strides[3]+I];if("max"===n&&V<Y?V=Y:"avg"===n&&(G+=Y,H++),isNaN(V))break}if(isNaN(V))break}if(isNaN(V))break}y[U+I]="avg"===n?G/H:V}}}return g.toTensor()},$l.prototype.avgPool3d=function(t,e){return this.assertNotComplex(t,"avgPool3d"),this.pool3d(t,e,"avg").toFloat()},$l.prototype.avgPool3dBackprop=function(t,e,n){this.assertNotComplex([t,e],"avgPool3dBackprop");for(var r=n.strideDepth,o=n.strideHeight,i=n.strideWidth,a=n.filterDepth,s=n.filterHeight,u=n.filterWidth,c=n.dilationDepth,l=n.dilationHeight,h=n.dilationWidth,p=n.effectiveFilterDepth,f=n.effectiveFilterHeight,d=n.effectiveFilterWidth,v=p-1-n.padInfo.front,m=d-1-n.padInfo.left,g=f-1-n.padInfo.top,y=or(e.shape,"float32"),x=1/(a*s*u),b=this.bufferSync(t),w=0;w<n.batchSize;++w)for(var C=0;C<n.inChannels;++C)for(var E=0;E<n.inDepth;++E)for(var _=0;_<n.inHeight;++_)for(var R=0;R<n.inWidth;++R){for(var I=E-v,S=_-g,k=R-m,N=0,A=0;A<p;A+=c){var T=(I+A)/r;if(!(T<0||T>=n.outDepth||Math.floor(T)!==T))for(var D=0;D<f;D+=l){var F=(S+D)/o;if(!(F<0||F>=n.outHeight||Math.floor(F)!==F))for(var M=0;M<d;M+=h){var P=(k+M)/i;P<0||P>=n.outWidth||Math.floor(P)!==P||(N+=b.get(w,T,F,P,C))}}}y.set(N*x,w,E,_,R,C)}return y.toTensor()},$l.prototype.maxPool3d=function(t,e){return this.assertNotComplex(t,"maxPool3d"),this.pool3d(t,e,"max").toFloat()},$l.prototype.maxPool3dPositions=function(t,e){for(var n=or(e.outShape,"int32"),r=e.strideDepth,o=e.strideHeight,i=e.strideWidth,a=e.dilationDepth,s=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterDepth,l=e.effectiveFilterHeight,h=e.effectiveFilterWidth,p=e.padInfo.front,f=e.padInfo.top,d=e.padInfo.left,v=this.bufferSync(t),m=0;m<e.batchSize;++m)for(var g=0;g<e.inChannels;++g)for(var y=0;y<e.outDepth;++y){for(var x=y*r-p,b=x;b<0;)b+=a;for(var w=Math.min(e.inDepth,c+x),C=0;C<e.outHeight;++C){for(var E=C*o-f,_=E;_<0;)_+=s;for(var R=Math.min(e.inHeight,l+E),I=0;I<e.outWidth;++I){for(var S=I*i-d,k=S;k<0;)k+=u;for(var N=Math.min(e.inWidth,h+S),A=Number.NEGATIVE_INFINITY,T=-1,D=b;D<w;D+=a)for(var F=D-x,M=_;M<R;M+=s)for(var P=M-E,O=k;O<N;O+=u){var B=O-S,L=v.get(m,D,M,O,g);A<=L&&(A=L,T=F*l*h+P*l+B)}n.set(T,m,y,C,I,g)}}}return n.toTensor()},$l.prototype.maxPool3dBackprop=function(t,e,n,r){this.assertNotComplex([e,n],"maxPool3dBackprop");for(var o=this.maxPool3dPositions(e,r),i=r.strideDepth,a=r.strideHeight,s=r.strideWidth,u=r.dilationDepth,c=r.dilationHeight,l=r.dilationWidth,h=r.effectiveFilterDepth,p=r.effectiveFilterHeight,f=r.effectiveFilterWidth,d=h-1-r.padInfo.front,v=f-1-r.padInfo.left,m=p-1-r.padInfo.top,g=or(e.shape,"float32"),y=this.bufferSync(o),x=this.bufferSync(t),b=0;b<r.batchSize;++b)for(var w=0;w<r.inChannels;++w)for(var C=0;C<r.inDepth;++C)for(var E=0;E<r.inHeight;++E)for(var _=0;_<r.inWidth;++_){for(var R=C-d,I=E-m,S=_-v,k=0,N=0;N<h;N+=u){var A=(R+N)/i;if(!(A<0||A>=r.outDepth||Math.floor(A)!==A))for(var T=0;T<p;T+=c){var D=(I+T)/a;if(!(D<0||D>=r.outHeight||Math.floor(D)!==D))for(var F=0;F<f;F+=l){var M=(S+F)/s;if(!(M<0||M>=r.outWidth||Math.floor(M)!==M)){var P=h*p*f-1-y.get(b,A,D,M,w)===N*p*f+T*f+F?1:0;0!=P&&(k+=x.get(b,A,D,M,w)*P)}}}}g.set(k,b,C,E,_,w)}return g.toTensor()},$l.prototype.cast=function(t,e){return go(t,e,this)},$l.prototype.reshape=function(t,e){return yo(t,e)},$l.prototype.avgPool=function(t,e){return this.assertNotComplex(t,"avgPool"),this.pool(t,e,"avg").toFloat()},$l.prototype.resizeBilinear=function(t,e,n,r){this.assertNotComplex(t,"resizeBilinear");for(var o=t.shape,i=o[0],a=o[1],s=o[2],u=o[3],c=this.readSync(t.dataId),l=new Float32Array(L([i,e,n,u])),h=[r&&1<e?a-1:a,r&&1<n?s-1:s],p=[r&&1<e?e-1:e,r&&1<n?n-1:n],f=0,d=h[0]/p[0],v=h[1]/p[1],m=0;m<i;m++)for(var g=0;g<e;g++)for(var y=d*g,x=Math.floor(y),b=y-x,w=Math.min(a-1,Math.ceil(y)),C=m*t.strides[0]+x*t.strides[1],E=m*t.strides[0]+w*t.strides[1],_=0;_<n;_++)for(var R=v*_,I=Math.floor(R),S=R-I,k=Math.min(s-1,Math.ceil(R)),N=C+I*t.strides[2],A=E+I*t.strides[2],T=C+ +k*t.strides[2],D=E+k*t.strides[2],F=0;F<u;F++){var M=c[N+F],P=c[A+F],O=M+(c[T+F]-M)*S,B=O+(P+(c[D+F]-P)*S-O)*b;l[f++]=B}return wn(l,[i,e,n,u])},$l.prototype.resizeBilinearBackprop=function(t,e,n){this.assertNotComplex([t,e],"resizeBilinearBackprop");for(var r=e.shape,o=r[0],i=r[1],a=r[2],s=r[3],u=t.shape,c=u[1],l=u[2],h=new Float32Array(o*i*a*s),p=[n&&1<c?i-1:i,n&&1<l?a-1:a],f=[n&&1<c?c-1:c,n&&1<l?l-1:l],d=p[0]/f[0],v=p[1]/f[1],m=this.readSync(t.dataId),g=0,y=0;y<o;y++)for(var x=y*e.strides[0],b=0;b<c;b++)for(var w=b*d,C=Math.floor(w),E=Math.min(Math.ceil(w),i-1),_=x+C*e.strides[1],R=x+E*e.strides[1],I=w-C,S=1-I,k=0;k<l;k++)for(var N=k*v,A=Math.floor(N),T=Math.min(Math.ceil(N),a-1),D=N-A,F=1-D,M=_+A*e.strides[2],P=_+T*e.strides[2],O=R+A*e.strides[2],B=R+T*e.strides[2],L=S*F,W=S*D,z=I*F,U=I*D,V=0;V<s;V++){var G=m[g++];h[M+V]+=G*L,h[P+V]+=G*W,h[O+V]+=G*z,h[B+V]+=G*U}return Sn(h,[o,a,i,s],e.dtype)},$l.prototype.resizeNearestNeighbor=function(t,e,n,r){this.assertNotComplex(t,"resizeNearestNeighbor");for(var o=t.shape,i=o[0],a=o[1],s=o[2],u=o[3],c=this.readSync(t.dataId),l=new Float32Array(i*e*n*u),h=[r&&1<e?a-1:a,r&&1<n?s-1:s],p=[r&&1<e?e-1:e,r&&1<n?n-1:n],f=h[0]/p[0],d=h[1]/p[1],v=0,m=0;m<i;m++)for(var g=m*t.strides[0],y=0;y<e;y++)for(var x=f*y,b=g+Math.min(a-1,r?Math.round(x):Math.floor(x))*t.strides[1],w=0;w<n;w++)for(var C=d*w,E=b+Math.min(s-1,r?Math.round(C):Math.floor(C))*t.strides[2],_=0;_<u;_++){var R=c[E+_];l[v++]=R}return wn(l,[i,e,n,u],t.dtype)},$l.prototype.resizeNearestNeighborBackprop=function(t,e,n){this.assertNotComplex([t,e],"resizeNearestNeighborBackprop");for(var r=e.shape,o=r[0],i=r[1],a=r[2],s=r[3],u=t.shape,c=u[1],l=u[2],h=new Float32Array(o*i*a*s),p=this.readSync(t.dataId),f=[n&&1<c?i-1:i,n&&1<l?a-1:a],d=[n&&1<c?c-1:c,n&&1<l?l-1:l],v=f[0]/d[0],m=f[1]/d[1],g=1/v,y=1/m,x=2*Math.ceil(g)+2,b=2*Math.ceil(y)+2,w=0;w<o;w++)for(var C=w*e.strides[0],E=0;E<i;E++)for(var _=C+E*e.strides[1],R=Math.floor(E*g),I=Math.floor(R-x/2),S=0;S<a;S++)for(var k=_+S*e.strides[2],N=Math.floor(S*y),A=Math.floor(N-b/2),T=0;T<s;T++){for(var D=0,F=0;F<x;F++){var M=F+I;if(!(M<0||c<=M)){var P=C+M*t.strides[1],O=M*v;if(E===Math.min(i-1,n?Math.round(O):Math.floor(O)))for(var B=0;B<b;B++){var L=B+A;if(!(L<0||l<=L)){var W=P+L*t.strides[2],z=L*m;S===Math.min(a-1,n?Math.round(z):Math.floor(z))&&(D+=p[W+T])}}}}h[k+T]=D}return Sn(h,e.shape,e.dtype)},$l.prototype.batchNormalization=function(t,e,n,r,o,i){this.assertNotComplex([t,e,n,o,i],"batchNorm");for(var a=this.readSync(t.dataId),s=this.readSync(e.dataId),u=this.readSync(n.dataId),c=o?this.readSync(o.dataId):new Float32Array([1]),l=i?this.readSync(i.dataId):new Float32Array([0]),h=new Float32Array(a.length),p=l.length,f=c.length,d=u.length,v=s.length,m=0,g=0,y=0,x=0,b=0;b<a.length;++b)h[b]=l[m++]+(a[b]-s[g++])*c[y++]/Math.sqrt(u[x++]+r),p<=m&&(m=0),v<=g&&(g=0),f<=y&&(y=0),d<=x&&(x=0);return Sn(h,t.shape)},$l.prototype.localResponseNormalization4D=function(t,a,e,n,r){this.assertNotComplex(t,"localResponseNormalization4D");var s=t.shape[3],u=s-1,c=this.readSync(t.dataId),o=t.size,i=new Float32Array(o);function l(t){for(var e=t%s,n=t-e+Math.max(0,e-a),r=t-e+Math.min(e+a,u),o=0;n<=r;n++){var i=c[n];o+=i*i}return o}for(var h=0;h<o;h++){var p=l(h),f=c[h]*Math.pow(e+n*p,-r);i[h]=f}return Sn(i,t.shape)},$l.prototype.LRNGrad=function(t,e,n,r,o,i,a){this.assertNotComplex(t,"LRNGrad");for(var s=t.shape[3],u=this.readSync(t.dataId),c=this.readSync(e.dataId),l=this.readSync(n.dataId),h=new Float32Array(t.size),p=t.size,f=0;f<p;f++){for(var d=f%s,v=f-d+Math.max(0,d-r),m=f-d+Math.min(s,d+r+1),g=0,y=v;y<m;y++)g+=Math.pow(c[y],2);for(g=i*g+o,y=v;y<m;y++){var x=-2*i*a*c[y]*l[f]/g;f===y&&(x+=Math.pow(g,-a)),x*=u[f],h[y]+=x}}return Sn(h,t.shape)},$l.prototype.multinomial=function(t,e,n,r){this.assertNotComplex(t,"multinomial");for(var o=e?t:Xr(t),i=o.shape[0],a=o.shape[1],s=Tn([i,n],"int32"),u=this.readSync(s.dataId),c=this.readSync(o.dataId),l=0;l<i;++l){var h=l*a,p=new Float32Array(a-1);p[0]=c[h];for(var f=1;f<p.length;++f)p[f]=p[f-1]+c[h+f];for(var d=Jn(r.toString()),v=l*n,m=0;m<n;++m){var g=d();u[v+m]=p.length;for(var y=0;y<p.length;y++)if(g<p[y]){u[v+m]=y;break}}}return s},$l.prototype.oneHot=function(t,e,n,r){this.assertNotComplex(t,"oneHot");var o=new Float32Array(t.size*e);o.fill(r);for(var i=this.readSync(t.dataId),a=0;a<t.size;++a)0<=i[a]&&i[a]<e&&(o[a*e+i[a]]=n);return Rn(o,[t.size,e],"int32")},$l.prototype.nonMaxSuppression=function(t,e,n,r,o){return this.assertNotComplex(t,"nonMaxSuppression"),Eo(this.readSync(t.dataId),this.readSync(e.dataId),n,r,o)},$l.prototype.fft=function(t){return this.fftBatch(t,!1)},$l.prototype.ifft=function(t){return this.fftBatch(t,!0)},$l.prototype.fftBatch=function(t,e){for(var n=t.shape[0],r=t.shape[1],o=or(t.shape,"float32"),i=or(t.shape,"float32"),a=xn(t).as2D(n,r),s=bn(t).as2D(n,r),u=0;u<n;u++)for(var c=a.slice([u,0],[1,r]),l=s.slice([u,0],[1,r]),h=yn(c,l),p=this.readSync(this.fftImpl(h,e).dataId),f=0;f<r;f++){var d=Co(p,f);o.values[u*r+f]=d.real,i.values[u*r+f]=d.imag}return yn(o.toTensor(),i.toTensor()).as2D(n,r)},$l.prototype.fftImpl=function(t,e){var n=t.as1D(),r=n.size;if(this.isExponentOf2(r)){var o=this.fftRadix2(n,r,e).as2D(t.shape[0],t.shape[1]);return e&&(o=yn(xn(o).div(En(r)),bn(o).div(En(r)))),o}var i=this.readSync(t.dataId),a=function(t){for(var e=new Float32Array(t.length/2),n=new Float32Array(t.length/2),r=0;r<t.length;r+=2)e[r/2]=t[r],n[r/2]=t[r+1];return{real:e,imag:n}}(this.fourierTransformByMatmul(i,r,e));return yn(a.real,a.imag).as2D(t.shape[0],t.shape[1])},$l.prototype.isExponentOf2=function(t){return 0==(t&t-1)},$l.prototype.fftRadix2=function(t,e,n){if(1===e)return t;var r=this.readSync(t.dataId),o=e/2,i=function(t){for(var e=Math.ceil(t.length/4),n=new Float32Array(e),r=new Float32Array(e),o=0;o<t.length;o+=4)n[Math.floor(o/4)]=t[o],r[Math.floor(o/4)]=t[o+1];return{real:n,imag:r}}(r),a=yn(i.real,i.imag).as1D(),s=function(t){for(var e=Math.floor(t.length/4),n=new Float32Array(e),r=new Float32Array(e),o=2;o<t.length;o+=4)n[Math.floor(o/4)]=t[o],r[Math.floor(o/4)]=t[o+1];return{real:n,imag:r}}(r),u=yn(s.real,s.imag).as1D();a=this.fftRadix2(a,o,n),u=this.fftRadix2(u,o,n);var c=function(t,e){for(var n=new Float32Array(t/2),r=new Float32Array(t/2),o=0;o<Math.ceil(t/2);o++){var i=(e?2:-2)*Math.PI*(o/t);n[o]=Math.cos(i),r[o]=Math.sin(i)}return{real:n,imag:r}}(e,n),l=yn(c.real,c.imag).mul(u),h=a.add(l),p=a.sub(l),f=xn(h).concat(xn(p)),d=bn(h).concat(bn(p));return yn(f,d).as1D()},$l.prototype.fourierTransformByMatmul=function(t,e,n){for(var r=new Float32Array(2*e),o=0;o<e;o++){for(var i=0,a=0,s=0;s<e;s++){var u=(d=o*s,v=e,m=(n?2:-2)*Math.PI*(d/v),{real:Math.cos(m),imag:Math.sin(m)}),c=Co(t,s);i+=c.real*u.real-c.imag*u.imag,a+=c.real*u.imag+c.imag*u.real}n&&(i/=e,a/=e),h=i,p=a,(l=r)[2*(f=o)]=h,l[2*f+1]=p}var l,h,p,f,d,v,m;return r},$l.prototype.depthToSpace=function(t,e,n){O("NHWC"===n,function(){return"Only NHWC dataFormat supported on CPU for depthToSpace. Got "+n}),O(1<e,function(){return"blockSize should be > 1 for depthToSpace, but was: "+e});for(var r=t.shape[0],o=t.shape[1],i=t.shape[2],a=t.shape[3],s=o*e,u=i*e,c=a/(e*e),l=this.readSync(t.dataId),h=new Float32Array(r*s*u*c),p=0,f=0;f<r;++f)for(var d=0;d<s;++d)for(var v=Math.floor(d/e),m=d%e,g=0;g<u;++g)for(var y=Math.floor(g/e),x=(m*e+g%e)*c,b=0;b<c;++b){var w=b+x+a*(y+i*(v+o*f));h[p++]=l[w]}return Sn(h,[r,s,u,c])},$l.prototype.broadcastedBinaryOp=function(a,s,t,u){var e=ro(a.shape,s.shape),c=or(e,t),l=this.readSync(a.dataId),h=this.readSync(s.dataId),p=eo(a.shape,e),f=eo(s.shape,e),d=c.values;if(p.length+f.length===0)for(var n=0;n<d.length;++n)d[n]=u(l[n%l.length],h[n%h.length]);else{var v=this.bufferSync(a),m=this.bufferSync(s),r=function(t){var e=c.indexToLoc(t),n=e.slice(-a.rank);p.forEach(function(t){return n[t]=0});var r=v.locToIndex(n),o=e.slice(-s.rank);f.forEach(function(t){return o[t]=0});var i=m.locToIndex(o);d[t]=u(l[r],h[i])};for(n=0;n<d.length;++n)r(n)}return c.toTensor()},$l.prototype.broadcastedBinaryComplexOp=function(s,u,c){var t=ro(s.shape,u.shape),l=or(t,"float32"),e=or(t,"float32"),h=this.readSync(s.dataId),p=this.readSync(u.dataId),f=eo(s.shape,t),d=eo(u.shape,t),v=l.values,m=e.values;if(f.length+d.length===0)for(var n=0;n<v.length;n++){var r=n%h.length,o=n%p.length,i=c(h[2*r],h[2*r+1],p[2*o],p[2*o+1]);v[n]=i.real,m[n]=i.imag}else{var g=this.bufferSync(this.data.get(s.dataId).complexTensors.real),y=this.bufferSync(this.data.get(u.dataId).complexTensors.real),a=function(t){var e=l.indexToLoc(t),n=e.slice(-s.rank);f.forEach(function(t){return n[t]=0});var r=g.locToIndex(n),o=e.slice(-u.rank);d.forEach(function(t){return o[t]=0});var i=y.locToIndex(o),a=c(h[2*r],h[2*r+1],p[2*i],p[2*i+1]);v[t]=a.real,m[t]=a.imag};for(n=0;n<v.length;n++)a(n)}return this.complex(l.toTensor(),e.toTensor())},$l.prototype.split=function(t,e,n){return Ro(t,e,n)},$l.prototype.dispose=function(){},$l.prototype.floatPrecision=function(){return 32},$l.prototype.epsilon=function(){return 1e-7},$l.prototype.cropAndResize=function(t,e,n,r,o,i){for(var a=t.shape,s=a[0],u=a[1],c=a[2],l=a[3],h=e.shape[0],p=r[0],f=r[1],d=or([h,p,f,l],t.dtype),v=this.readSync(e.dataId),m=this.readSync(n.dataId),g=this.readSync(t.dataId),y=t.strides,x=d.strides,b=0;b<h;b++){var w=4*b,C=v[w],E=v[1+w],_=v[2+w],R=v[3+w],I=m[b];if(!(s<=I))for(var S=1<p?(_-C)*(u-1)/(p-1):0,k=1<f?(R-E)*(c-1)/(f-1):0,N=0;N<p;N++){var A=1<p?C*(u-1)+N*S:.5*(C+_)*(u-1);if(A<0||u-1<A)for(var T=0;T<f;T++)for(var D=0;D<l;D++){var F=D+T*x[2]+N*x[1]+b*x[0];d.values[F]=i}else if("bilinear"===o){var M=Math.floor(A),P=Math.ceil(A),O=A-M;for(T=0;T<f;T++)if((j=1<f?E*(c-1)+T*k:.5*(E+R)*(c-1))<0||c-1<j)for(D=0;D<l;D++)F=D+T*x[2]+N*x[1]+b*x[0],d.values[F]=i;else{var B=Math.floor(j),L=Math.ceil(j),W=j-B;for(D=0;D<l;D++){var z=g[F=D+B*y[2]+M*y[1]+I*y[0]],U=g[F=D+L*y[2]+M*y[1]+I*y[0]],V=g[F=D+B*y[2]+P*y[1]+I*y[0]],G=z+(U-z)*W,H=V+(g[F=D+L*y[2]+P*y[1]+I*y[0]]-V)*W;F=D+T*x[2]+N*x[1]+b*x[0],d.values[F]=G+(H-G)*O}}}else for(T=0;T<f;++T){var j;if((j=1<f?E*(c-1)+T*k:.5*(E+R)*(c-1))<0||c-1<j)for(D=0;D<l;D++)F=D+T*x[2]+N*x[1]+b*x[0],d.values[F]=i;else{var q=Math.round(j),$=Math.round(A);for(D=0;D<l;D++){var K=D+q*y[2]+$*y[1]+I*y[0],X=D+T*x[2]+N*x[1]+b*x[0];d.values[X]=g[K]}}}}}return d.toTensor()},$l.prototype.sparseToDense=function(t,e,n,r){var o=Wr(0,t,n),i=o.sliceRank,a=o.numUpdates,s=o.sliceSize,u=o.strides,c=o.outputSize;return this.scatter(t,e,n,c,s,a,i,u,r,!1)},$l.prototype.gatherND=function(t,e){var n=e.shape,r=n[n.length-1],o=Br(t,e),i=o[0],a=o[1],s=o[2],u=o[3];if(0===a)return wn([],i,t.dtype);for(var c=new ft([a,s],t.dtype),l=this.readSync(e.dataId),h=this.readSync(t.dataId),p=0;p<a;p++){for(var f=[],d=0,v=0;v<r;v++){var m=l[p*r+v];d+=m*u[v],f.push(m)}if(d<0||d>=t.size/s)throw new Error("Invalid indices: "+f+" does not index into "+t.shape);for(var g=0;g<s;g++)c.values[p*s+g]=h[d*s+g]}return c.toTensor().reshape(i)},$l.prototype.scatterND=function(t,e,n){var r=Wr(0,t,n),o=r.sliceRank,i=r.numUpdates,a=r.sliceSize,s=r.strides,u=r.outputSize,c=En(0);return this.scatter(t,e,n,u,a,i,o,s,c,!0)},$l.prototype.fill=function(t,e,n){var r=T(n=n||q(e),L(t));return r.fill(e),yt.make(t,{values:r},n)},$l.prototype.onesLike=function(t){if("string"===t.dtype)throw new Error("onesLike is not supported for string tensors");return this.fill(t.shape,1,t.dtype)},$l.prototype.zerosLike=function(t){var e=T(t.dtype,L(t.shape));return yt.make(t.shape,{values:e},t.dtype)},$l.prototype.linspace=function(t,e,n){return xo(t,e,n)},$l.prototype.scatter=function(t,e,n,r,o,i,a,s,u,c){var l=[r/o,o],h=this.readSync(t.dataId),p=this.readSync(e.dataId);if(0===r)return wn([],n,e.dtype);var f=new ft(l,e.dtype);f.values.fill(this.readSync(u.dataId)[0]);for(var d=0;d<i;d++){for(var v=[],m=0,g=0;g<a;g++){var y=h[d*a+g];v.push(y),m+=y*s[g]}if(m<0||r/o<=m)throw new Error("Invalid indices: "+v+" does not index into "+n);for(var x=0;x<o;x++)c?f.values[m*o+x]+=p[d*o+x]:f.values[m*o+x]=0===e.rank?p[0]:p[d*o+x]}return f.toTensor().reshape(n)},$l);function $l(){if(this.blockSize=48,this.firstUse=!0,_.get("IS_BROWSER")){var t="undefined"!=typeof OffscreenCanvas?new OffscreenCanvas(300,150):"undefined"!=typeof document?document.createElement("canvas"):null;null!==t&&(this.fromPixels2DContext=t.getContext("2d"))}this.data=new Jr(this,qt)}qt.registerBackend("cpu",function(){return new ql},1);var Kl=(Xl.prototype.fetch=function(t,e){return fetch(t,e)},Xl.prototype.now=function(){return performance.now()},Xl.prototype.encode=function(t,e){if("utf-8"!==e&&"utf8"!==e)throw new Error("Browser's encoder only supports utf-8, but got "+e);return this.textEncoder.encode(t)},Xl.prototype.decode=function(t,e){return new TextDecoder(e).decode(t)},Xl);function Xl(){this.textEncoder=new TextEncoder}_.get("IS_BROWSER")&&_.setPlatform("browser",new Kl);var Yl,Jl=(Ql.prototype.fetch=function(t,e){return null!=_.global.fetch?_.global.fetch(t,e):(null==Yl&&(Yl=require("node-fetch")),Yl(t,e))},Ql.prototype.now=function(){var t=process.hrtime();return 1e3*t[0]+t[1]/1e6},Ql.prototype.encode=function(t,e){if("utf-8"!==e&&"utf8"!==e)throw new Error("Node built-in encoder only supports utf-8, but got "+e);return this.textEncoder.encode(t)},Ql.prototype.decode=function(t,e){return 0===t.length?"":new this.util.TextDecoder(e).decode(t)},Ql);function Ql(){this.util=require("util"),this.textEncoder=new this.util.TextEncoder}_.get("IS_NODE")&&_.setPlatform("node",new Jl);var Zl={float32:4,int32:4,uint16:2,uint8:1,bool:1},th=4;function eh(v,t){for(var m={},g=0,e=function(t){var e=t.name,n=t.dtype,r=t.shape,o=L(r),i=void 0;if("quantization"in t){var a=t.quantization;if("uint8"!==a.dtype&&"uint16"!==a.dtype)throw new Error("Weight "+t.name+" has unknown quantization dtype "+a.dtype+". Supported quantization dtypes are: 'uint8' and 'uint16'.");var s=Zl[a.dtype],u=v.slice(g,g+o*s),c="uint8"===a.dtype?new Uint8Array(u):new Uint16Array(u);if("float32"===n)i=Float32Array.from(c,function(t){return t*a.scale+a.min});else{if("int32"!==n)throw new Error("Unsupported dtype in weight '"+e+"': "+n);i=Int32Array.from(c,function(t){return Math.round(t*a.scale+a.min)})}g+=o*s}else if("string"===n){var l=L(t.shape);i=[];for(var h=0;h<l;h++){var p=new Uint32Array(v.slice(g,g+th))[0];g+=th;var f=new Uint8Array(v.slice(g,g+p));i.push(f),g+=p}}else{var d=Zl[n];if(u=v.slice(g,g+o*d),"float32"===n)i=new Float32Array(u);else if("int32"===n)i=new Int32Array(u);else{if("bool"!==n)throw new Error("Unsupported dtype in weight '"+e+"': "+n);i=new Uint8Array(u)}g+=o*d}m[e]=wn(i,r,n)},n=0,r=t;n<r.length;n++)e(r[n]);return m}var nh="undefined"!=typeof Buffer&&("undefined"==typeof Blob||"undefined"==typeof atob||"undefined"==typeof btoa);function rh(t){return nh?Buffer.byteLength(t):new Blob([t]).size}function oh(t){var e=0;t.forEach(function(t){e+=t.byteLength});var n=new Uint8Array(e),r=0;return t.forEach(function(t){n.set(new Uint8Array(t),r),r+=t.byteLength}),n.buffer}function ih(t){for(t=t.trim();t.endsWith("/");)t=t.slice(0,t.length-1);var e=t.split("/");return e[e.length-1]}function ah(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:null==t.modelTopology?0:rh(JSON.stringify(t.modelTopology)),weightSpecsBytes:null==t.weightSpecs?0:rh(JSON.stringify(t.weightSpecs)),weightDataBytes:null==t.weightData?0:t.weightData.byteLength}}var sh=(hh.getInstance=function(){return null==hh.instance&&(hh.instance=new hh),hh.instance},hh.registerSaveRouter=function(t){hh.getInstance().saveRouters.push(t)},hh.registerLoadRouter=function(t){hh.getInstance().loadRouters.push(t)},hh.getSaveHandlers=function(t){return hh.getHandlers(t,"save")},hh.getLoadHandlers=function(t,e){return hh.getHandlers(t,"load",e)},hh.getHandlers=function(n,t,r){var o=[];return("load"===t?hh.getInstance().loadRouters:hh.getInstance().saveRouters).forEach(function(t){var e=t(n,r);null!==e&&o.push(e)}),o},hh),uh="://",ch=(lh.getInstance=function(){return null==lh.instance&&(lh.instance=new lh),lh.instance},lh.registerManager=function(t,e){O(null!=t,function(){return"scheme must not be undefined or null."}),t.endsWith(uh)&&(t=t.slice(0,t.indexOf(uh))),O(0<t.length,function(){return"scheme must not be an empty string."});var n=lh.getInstance();O(null==n.managers[t],function(){return"A model store manager is already registered for scheme '"+t+"'."}),n.managers[t]=e},lh.getManager=function(t){var e=this.getInstance().managers[t];if(null==e)throw new Error("Cannot find model manager for scheme '"+t+"'");return e},lh.getSchemes=function(){return Object.keys(this.getInstance().managers)},lh);function lh(){this.managers={}}function hh(){this.saveRouters=[],this.loadRouters=[]}function ph(t){if(-1===t.indexOf(uh))throw new Error("The url string provided does not contain a scheme. Supported schemes are: "+ch.getSchemes().join(","));return{scheme:t.split(uh)[0],path:t.split(uh)[1]}}function fh(l,h,p){return void 0===p&&(p=!1),y(this,void 0,void 0,function(){var e,n,r,o,i,a,s,u,c;return I(this,function(t){switch(t.label){case 0:return O(l!==h,function(){return"Old path and new path are the same: '"+l+"'"}),O(0<(e=sh.getLoadHandlers(l)).length,function(){return"Copying failed because no load handler is found for source URL "+l+"."}),O(e.length<2,function(){return"Copying failed because more than one ("+e.length+") load handlers for source URL "+l+"."}),n=e[0],O(0<(r=sh.getSaveHandlers(h)).length,function(){return"Copying failed because no save handler is found for destination URL "+h+"."}),O(r.length<2,function(){return"Copying failed because more than one ("+e.length+") save handlers for destination URL "+h+"."}),o=r[0],i=ph(l).scheme,a=ph(l).path,s=i===ph(l).scheme,[4,n.load()];case 1:return u=t.sent(),p&&s?[4,ch.getManager(i).removeModel(a)]:[3,3];case 2:t.sent(),t.label=3;case 3:return[4,o.save(u)];case 4:return c=t.sent(),!p||s?[3,6]:[4,ch.getManager(i).removeModel(a)];case 5:t.sent(),t.label=6;case 6:return[2,c.modelArtifactsInfo]}})})}var dh="models_store",vh="model_info_store";function mh(){if(!_.getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");var t=window,e=t.indexedDB||t.mozIndexedDB||t.webkitIndexedDB||t.msIndexedDB||t.shimIndexedDB;if(null==e)throw new Error("The current browser does not appear to support IndexedDB.");return e}function gh(t){var e=t.result;e.createObjectStore(dh,{keyPath:"modelPath"}),e.createObjectStore(vh,{keyPath:"modelPath"})}function yh(t){return _.getBool("IS_BROWSER")&&!Array.isArray(t)&&t.startsWith(xh.URL_SCHEME)?(e=t.slice(xh.URL_SCHEME.length),new xh(e)):null;var e}var xh=(bh.prototype.save=function(e){return y(this,void 0,void 0,function(){return I(this,function(t){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return[2,this.databaseAction(this.modelPath,e)]})})},bh.prototype.load=function(){return y(this,void 0,void 0,function(){return I(this,function(t){return[2,this.databaseAction(this.modelPath)]})})},bh.prototype.databaseAction=function(t,h){var p=this;return new Promise(function(u,c){var l=p.indexedDB.open("tensorflowjs",1);l.onupgradeneeded=function(){return gh(l)},l.onsuccess=function(){var r=l.result;if(null==h){var t=r.transaction(dh,"readonly"),e=t.objectStore(dh).get(p.modelPath);e.onsuccess=function(){if(null==e.result)return r.close(),c(new Error("Cannot find model with path '"+p.modelPath+"' in IndexedDB."));u(e.result.modelArtifacts)},e.onerror=function(t){return r.close(),c(e.error)},t.oncomplete=function(){return r.close()}}else{var o,i=ah(h),a=r.transaction(vh,"readwrite"),s=a.objectStore(vh),n=s.put({modelPath:p.modelPath,modelArtifactsInfo:i});n.onsuccess=function(){var n=(o=r.transaction(dh,"readwrite")).objectStore(dh).put({modelPath:p.modelPath,modelArtifacts:h,modelArtifactsInfo:i});n.onsuccess=function(){return u({modelArtifactsInfo:i})},n.onerror=function(t){var e=(s=a.objectStore(vh)).delete(p.modelPath);e.onsuccess=function(){return r.close(),c(n.error)},e.onerror=function(t){return r.close(),c(n.error)}}},n.onerror=function(t){return r.close(),c(n.error)},a.oncomplete=function(){null==o?r.close():o.oncomplete=function(){return r.close()}}}},l.onerror=function(t){return c(l.error)}})},bh.URL_SCHEME="indexeddb://",bh);function bh(t){if(this.indexedDB=mh(),null==t||!t)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=t}sh.registerSaveRouter(yh),sh.registerLoadRouter(yh);var wh=(Ch.prototype.listModels=function(){return y(this,void 0,void 0,function(){var e=this;return I(this,function(t){return[2,new Promise(function(i,n){var r=e.indexedDB.open("tensorflowjs",1);r.onupgradeneeded=function(){return gh(r)},r.onsuccess=function(){var e=r.result,t=e.transaction(vh,"readonly"),o=t.objectStore(vh).getAll();o.onsuccess=function(){for(var t={},e=0,n=o.result;e<n.length;e++){var r=n[e];t[r.modelPath]=r.modelArtifactsInfo}i(t)},o.onerror=function(t){return e.close(),n(o.error)},t.oncomplete=function(){return e.close()}},r.onerror=function(t){return n(r.error)}})]})})},Ch.prototype.removeModel=function(u){return y(this,void 0,void 0,function(){var n=this;return I(this,function(t){var e;return u=(e=u).startsWith(xh.URL_SCHEME)?e.slice(xh.URL_SCHEME.length):e,[2,new Promise(function(a,s){var e=n.indexedDB.open("tensorflowjs",1);e.onupgradeneeded=function(){return gh(e)},e.onsuccess=function(){var n,r=e.result,t=r.transaction(vh,"readwrite"),o=t.objectStore(vh),i=o.get(u);i.onsuccess=function(){if(null==i.result)return r.close(),s(new Error("Cannot find model with path '"+u+"' in IndexedDB."));function e(){var t=(n=r.transaction(dh,"readwrite")).objectStore(dh).delete(u);t.onsuccess=function(){return a(i.result.modelArtifactsInfo)},t.onerror=function(t){return s(i.error)}}var t=o.delete(u);t.onsuccess=e,t.onerror=function(t){return e(),r.close(),s(i.error)}},i.onerror=function(t){return r.close(),s(i.error)},t.oncomplete=function(){null==n?r.close():n.oncomplete=function(){return r.close()}}},e.onerror=function(t){return s(e.error)}})]})})},Ch);function Ch(){this.indexedDB=mh()}if(_.getBool("IS_BROWSER"))try{ch.registerManager(xh.URL_SCHEME,new wh)}catch(o){}var Eh="/",_h="tensorflowjs_models",Rh="info",Ih="model_topology",Sh="weight_specs",kh="weight_data",Nh="model_metadata";function Ah(t){return{info:[_h,t,Rh].join(Eh),topology:[_h,t,Ih].join(Eh),weightSpecs:[_h,t,Sh].join(Eh),weightData:[_h,t,kh].join(Eh),modelMetadata:[_h,t,Nh].join(Eh)}}function Th(t){var e=t.split(Eh);if(e.length<3)throw new Error("Invalid key format: "+t);return e.slice(1,e.length-1).join(Eh)}function Dh(t){return _.getBool("IS_BROWSER")&&!Array.isArray(t)&&t.startsWith(Fh.URL_SCHEME)?(e=t.slice(Fh.URL_SCHEME.length),new Fh(e)):null;var e}var Fh=(Mh.prototype.save=function(i){return y(this,void 0,void 0,function(){var n,r,o;return I(this,function(t){if(i.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");n=JSON.stringify(i.modelTopology),r=JSON.stringify(i.weightSpecs),o=ah(i);try{return this.LS.setItem(this.keys.info,JSON.stringify(o)),this.LS.setItem(this.keys.topology,n),this.LS.setItem(this.keys.weightSpecs,r),this.LS.setItem(this.keys.weightData,(e=i.weightData,nh?Buffer.from(e).toString("base64"):btoa(String.fromCharCode.apply(null,new Uint8Array(e))))),this.LS.setItem(this.keys.modelMetadata,JSON.stringify({format:i.format,generatedBy:i.generatedBy,convertedBy:i.convertedBy})),[2,{modelArtifactsInfo:o}]}catch(t){throw this.LS.removeItem(this.keys.info),this.LS.removeItem(this.keys.topology),this.LS.removeItem(this.keys.weightSpecs),this.LS.removeItem(this.keys.weightData),this.LS.removeItem(this.keys.modelMetadata),new Error("Failed to save model '"+this.modelPath+"' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes="+o.modelTopologyBytes+", weightSpecsBytes="+o.weightSpecsBytes+", weightDataBytes="+o.weightDataBytes+".")}var e;return[2]})})},Mh.prototype.load=function(){return y(this,void 0,void 0,function(){var e,n,r,o,i,a,s;return I(this,function(t){if(null==(e=JSON.parse(this.LS.getItem(this.keys.info))))throw new Error("In local storage, there is no model with name '"+this.modelPath+"'");if("JSON"!==e.modelTopologyType)throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");if(n={},null==(r=JSON.parse(this.LS.getItem(this.keys.topology))))throw new Error("In local storage, the topology of model '"+this.modelPath+"' is missing.");if(n.modelTopology=r,null==(o=JSON.parse(this.LS.getItem(this.keys.weightSpecs))))throw new Error("In local storage, the weight specs of model '"+this.modelPath+"' are missing.");if(n.weightSpecs=o,null!=(i=this.LS.getItem(this.keys.modelMetadata))&&(a=JSON.parse(i),n.format=a.format,n.generatedBy=a.generatedBy,n.convertedBy=a.convertedBy),null==(s=this.LS.getItem(this.keys.weightData)))throw new Error("In local storage, the binary weight values of model '"+this.modelPath+"' are missing.");return n.weightData=function(t){if(nh){var e=Buffer.from(t,"base64");return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}for(var n=atob(t),r=new Uint8Array(n.length),o=0;o<n.length;++o)r.set([n.charCodeAt(o)],o);return r.buffer}(s),[2,n]})})},Mh.URL_SCHEME="localstorage://",Mh);function Mh(t){if(!_.getBool("IS_BROWSER")||void 0===window.localStorage)throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,null==t||!t)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=t,this.keys=Ah(this.modelPath)}sh.registerSaveRouter(Dh),sh.registerLoadRouter(Dh);var Ph=(Oh.prototype.listModels=function(){return y(this,void 0,void 0,function(){var e,n,r,o,i,a;return I(this,function(t){for(e={},n=_h+Eh,r=Eh+Rh,o=0;o<this.LS.length;++o)(i=this.LS.key(o)).startsWith(n)&&i.endsWith(r)&&(a=Th(i),e[a]=JSON.parse(this.LS.getItem(i)));return[2,e]})})},Oh.prototype.removeModel=function(o){return y(this,void 0,void 0,function(){var n,r;return I(this,function(t){var e;if(o=(e=o).startsWith(Fh.URL_SCHEME)?e.slice(Fh.URL_SCHEME.length):e,n=Ah(o),null==this.LS.getItem(n.info))throw new Error("Cannot find model at path '"+o+"'");return r=JSON.parse(this.LS.getItem(n.info)),this.LS.removeItem(n.info),this.LS.removeItem(n.topology),this.LS.removeItem(n.weightSpecs),this.LS.removeItem(n.weightData),[2,r]})})},Oh);function Oh(){O(_.getBool("IS_BROWSER"),function(){return"Current environment is not a web browser"}),O(void 0!==window.localStorage,function(){return"Current browser does not appear to support localStorage"}),this.LS=window.localStorage}if(_.getBool("IS_BROWSER"))try{ch.registerManager(Fh.URL_SCHEME,new Ph)}catch(o){}function Bh(t){return new Promise(function(t){return setTimeout(t)}).then(t)}var Lh=(Uh.prototype.save=function(s){return y(this,void 0,void 0,function(){var e,n,r,o,i,a;return I(this,function(t){switch(t.label){case 0:if("undefined"==typeof document)throw new Error("Browser downloads are not supported in this environment since `document` is not present");if(e=window.URL.createObjectURL(new Blob([s.weightData],{type:"application/octet-stream"})),!(s.modelTopology instanceof ArrayBuffer))return[3,1];throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");case 1:return n=[{paths:["./"+this.weightDataFileName],weights:s.weightSpecs}],r={modelTopology:s.modelTopology,format:s.format,generatedBy:s.generatedBy,convertedBy:s.convertedBy,weightsManifest:n},o=window.URL.createObjectURL(new Blob([JSON.stringify(r)],{type:"application/json"})),(i=null==this.jsonAnchor?document.createElement("a"):this.jsonAnchor).download=this.modelTopologyFileName,i.href=o,[4,Bh(function(){return i.dispatchEvent(new MouseEvent("click"))})];case 2:return t.sent(),null==s.weightData?[3,4]:((a=null==this.weightDataAnchor?document.createElement("a"):this.weightDataAnchor).download=this.weightDataFileName,a.href=e,[4,Bh(function(){return a.dispatchEvent(new MouseEvent("click"))})]);case 3:t.sent(),t.label=4;case 4:return[2,{modelArtifactsInfo:ah(s)}]}})})},Uh.URL_SCHEME="downloads://",Uh),Wh=(zh.prototype.load=function(){return y(this,void 0,void 0,function(){var r,h,p=this;return I(this,function(t){return r=this.files[0],h=this.files.slice(1),[2,new Promise(function(c,l){var t=new FileReader;t.onload=function(t){var e=JSON.parse(t.target.result),o=e.modelTopology;if(null!=o){0===h.length&&c({modelTopology:o});var n=e.weightsManifest;if(null!=n){var i;try{i=p.checkManifestAndWeightFiles(n,h)}catch(t){return void l(t)}var a=[],s=[],u=[];n.forEach(function(t){t.paths.forEach(function(t){s.push(t),u.push(null)}),a.push.apply(a,t.weights)}),n.forEach(function(t){t.paths.forEach(function(r){var t=new FileReader;t.onload=function(t){var e=t.target.result,n=s.indexOf(r);u[n]=e,-1===u.indexOf(null)&&c({modelTopology:o,weightSpecs:a,weightData:oh(u)})},t.onerror=function(t){return l("Failed to weights data from file of path '"+r+"'.")},t.readAsArrayBuffer(i[r])})})}else l(new Error("weightManifest field is missing from file "+r.name))}else l(new Error("modelTopology field is missing from file "+r.name))},t.onerror=function(t){return l("Failed to read model topology and weights manifest JSON from file '"+r.name+"'. BrowserFiles supports loading Keras-style tf.Model artifacts only.")},t.readAsText(r)})]})})},zh.prototype.checkManifestAndWeightFiles=function(t,n){for(var r=[],o=n.map(function(t){return ih(t.name)}),i={},e=0,a=t;e<a.length;e++)a[e].paths.forEach(function(t){var e=ih(t);if(-1!==r.indexOf(e))throw new Error("Duplicate file basename found in weights manifest: '"+e+"'");if(r.push(e),-1===o.indexOf(e))throw new Error("Weight file with basename '"+e+"' is not provided.");i[t]=n[o.indexOf(e)]});if(r.length!==n.length)throw new Error("Mismatch in the number of files in weights manifest ("+r.length+") and the number of weight files provided ("+n.length+").");return i},zh);function zh(t){if(null==t||t.length<1)throw new Error("When calling browserFiles, at least 1 file is required, but received "+t);this.files=t}function Uh(t){if(!_.getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");t.startsWith(Uh.URL_SCHEME)&&(t=t.slice(Uh.URL_SCHEME.length)),null!=t&&0!==t.length||(t="model"),this.modelTopologyFileName=t+".json",this.weightDataFileName=t+".weights.bin"}function Vh(n,r,o,i){var t,e,a;O(null!=(a=n)&&Array.isArray(a)&&0<a.length,function(){return"promises must be a none empty array"}),t=o=null==o?0:o,e=i=null==i?1:i,O(0<=t&&t<=1,function(){return"Progress fraction must be in range [0, 1], but got startFraction "+t}),O(0<=e&&e<=1,function(){return"Progress fraction must be in range [0, 1], but got endFraction "+e}),O(t<=e,function(){return"startFraction must be no more than endFraction, but got startFraction "+t+" and endFraction "+e});var s=0;return Promise.all(n.map(function(t){return t.then(function(t){var e=o+ ++s/n.length*(i-o);return r(e),t}),t}))}function Gh(l,h){return y(this,void 0,void 0,function(){var e,n,r,o,i,a,s,u,c;return I(this,function(t){switch(t.label){case 0:return null==h&&(h={}),e=null==h.fetchFunc?_.platform.fetch:h.fetchFunc,n=l.map(function(t){return e(t,h.requestInit,{isBinary:!0})}),r=0,o=.5,null!=h.onProgress?[3,2]:[4,Promise.all(n)];case 1:return i=t.sent(),[3,4];case 2:return[4,Vh(n,h.onProgress,r,o)];case 3:i=t.sent(),t.label=4;case 4:return a=i.map(function(t){return t.arrayBuffer()}),s=.5,u=1,null!=h.onProgress?[3,6]:[4,Promise.all(a)];case 5:return c=t.sent(),[3,8];case 6:return[4,Vh(a,h.onProgress,s,u)];case 7:c=t.sent(),t.label=8;case 8:return[2,c]}})})}function Hh(i){var t=this;return function(f,o,d){return void 0===o&&(o=""),y(t,void 0,void 0,function(){var a,c,s,u,e,n,r,l,h,p;return I(this,function(t){switch(t.label){case 0:if(a=f.map(function(){return!1}),c={},s=null!=d?d.map(function(){return!1}):[],u=[],f.forEach(function(t,o){var i=0;t.weights.forEach(function(n){function r(){a[o]=!0,null==c[o]&&(c[o]=[]),c[o].push({manifestEntry:n,groupOffset:i,sizeBytes:e})}var t="quantization"in n?n.quantization.dtype:n.dtype,e=Zl[t]*L(n.shape);null!=d?d.forEach(function(t,e){t===n.name&&(r(),s[e]=!0)}):r(),u.push(n.name),i+=e})}),!s.every(function(t){return t}))throw e=d.filter(function(t,e){return!s[e]}),new Error("Could not find weights in manifest with names: "+e.join(", ")+". \nManifest JSON has weights with names: "+u.join(", ")+".");return n=a.reduce(function(t,e,n){return e&&t.push(n),t},[]),r=[],n.forEach(function(t){f[t].paths.forEach(function(t){var e=o+(o.endsWith("/")?"":"/")+t;r.push(e)})}),[4,i(r)];case 1:return l=t.sent(),h={},p=0,n.forEach(function(t){for(var e=f[t].paths.length,n=0,r=0;r<e;r++)n+=l[p+r].byteLength;for(var o=new ArrayBuffer(n),i=new Uint8Array(o),a=0,s=0;s<e;s++){var u=new Uint8Array(l[p+s]);i.set(u,a),a+=u.byteLength}c[t].forEach(function(t){var e=eh(o.slice(t.groupOffset,t.groupOffset+t.sizeBytes),[t.manifestEntry]);for(var n in e)h[n]=e[n]}),p+=e}),[2,h]}})})}}sh.registerSaveRouter(function(t){return _.getBool("IS_BROWSER")&&!Array.isArray(t)&&t.startsWith(Lh.URL_SCHEME)?(void 0===(e=t.slice(Lh.URL_SCHEME.length))&&(e="model"),new Lh(e)):null;var e});var jh=(qh.prototype.save=function(i){return y(this,void 0,void 0,function(){var e,n,r,o;return I(this,function(t){switch(t.label){case 0:if(i.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");return(e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit)).body=new FormData,n=[{paths:["./model.weights.bin"],weights:i.weightSpecs}],r={modelTopology:i.modelTopology,format:i.format,generatedBy:i.generatedBy,convertedBy:i.convertedBy,weightsManifest:n},e.body.append("model.json",new Blob([JSON.stringify(r)],{type:"application/json"}),"model.json"),null!=i.weightData&&e.body.append("model.weights.bin",new Blob([i.weightData],{type:"application/octet-stream"}),"model.weights.bin"),[4,this.fetch(this.path,e)];case 1:if((o=t.sent()).ok)return[2,{modelArtifactsInfo:ah(i),responses:[o]}];throw new Error("BrowserHTTPRequest.save() failed due to HTTP response status "+o.status+".")}})})},qh.prototype.load=function(){return y(this,void 0,void 0,function(){var e,n,r,o,i,a,s,u;return I(this,function(t){switch(t.label){case 0:return[4,this.fetch(this.path,this.requestInit)];case 1:if(!(e=t.sent()).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.");t.label=2;case 2:return t.trys.push([2,4,,5]),[4,e.json()];case 3:return n=t.sent(),[3,5];case 4:throw t.sent(),r="Failed to parse model JSON of response from "+this.path+".",this.path.endsWith(".pb")?r+=" 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.":r+=" Please make sure the server is serving valid JSON for this request.",new Error(r);case 5:if(o=n.modelTopology,i=n.weightsManifest,null==o&&null==i)throw new Error("The JSON from HTTP path "+this.path+" contains neither model topology or manifest for weights.");return null==i?[3,7]:[4,this.loadWeights(i)];case 6:u=t.sent(),a=u[0],s=u[1],t.label=7;case 7:return[2,{modelTopology:o,weightSpecs:a,weightData:s}]}})})},qh.prototype.loadWeights=function(v){return y(this,void 0,void 0,function(){var o,i,a,s,u,c,l,h,p,f,d;return I(this,function(t){switch(t.label){case 0:for(o=Array.isArray(this.path)?this.path[1]:this.path,n=(e=o).lastIndexOf("/"),r=e.lastIndexOf("?"),i=[e.substring(0,n)+"/",n<r?e.substring(r):""],a=i[0],s=i[1],u=this.weightPathPrefix||a,c=[],l=0,h=v;l<h.length;l++)p=h[l],c.push.apply(c,p.weights);return f=[],v.forEach(function(t){t.paths.forEach(function(t){f.push(u+t+s)})}),[4,Gh(f,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress})];case 1:return d=t.sent(),[2,[c,oh(d)]]}var e,n,r})})},qh.URL_SCHEME_REGEX=/^https?:\/\//,qh);function qh(t,e){if(this.DEFAULT_METHOD="POST",null==e&&(e={}),this.weightPathPrefix=e.weightPathPrefix,this.onProgress=e.onProgress,null!=e.fetchFunc?(O("function"==typeof e.fetchFunc,function(){return"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"}),this.fetch=e.fetchFunc):this.fetch=_.platform.fetch,O(null!=t&&0<t.length,function(){return"URL path for http must not be null, undefined or empty."}),Array.isArray(t)&&O(2===t.length,function(){return"URL paths for http must have a length of 2, (actual length is "+t.length+")."}),this.path=t,null!=e.requestInit&&null!=e.requestInit.body)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=e.requestInit||{}}function $h(t){return null!=t.match(jh.URL_SCHEME_REGEX)}function Kh(t,e){return"undefined"==typeof fetch?null:(Array.isArray(t)?t.every(function(t){return $h(t)}):$h(t))?Xh(t,{onProgress:e}):null}function Xh(t,e){return new jh(t,e)}sh.registerSaveRouter(Kh),sh.registerLoadRouter(Kh);var Yh=(Zh.prototype.load=function(){return y(this,void 0,void 0,function(){return I(this,function(t){return[2,this.modelArtifacts]})})},Zh),Jh=(Qh.prototype.save=function(e){return y(this,void 0,void 0,function(){return I(this,function(t){return[2,this.saveHandler(e)]})})},Qh);function Qh(t){this.saveHandler=t}function Zh(t){this.modelArtifacts=t}var tp=Object.freeze({browserFiles:function(t){return new Wh(t)},browserHTTPRequest:function(t,e){return Xh(t,e)},concatenateArrayBuffers:oh,decodeWeights:eh,encodeWeights:function(u,l){return y(this,void 0,void 0,function(){var o,i,a,e,n,s=this;return I(this,function(t){switch(t.label){case 0:for(o=[],i=[],a=Array.isArray(u)?u.map(function(t){return t.name}):Object.keys(u),e=function(t){var e=a[t],c=Array.isArray(u)?u[t].tensor:u[e];if("float32"!==c.dtype&&"int32"!==c.dtype&&"bool"!==c.dtype&&"string"!==c.dtype)throw new Error("Unsupported dtype in weight '"+e+"': "+c.dtype);var n={name:e,shape:c.shape,dtype:c.dtype};if("string"===c.dtype){var r=new Promise(function(u){return y(s,void 0,void 0,function(){var e,n,r,o,i,a,s;return I(this,function(t){switch(t.label){case 0:return[4,c.bytes()];case 1:for(e=t.sent(),n=e.reduce(function(t,e){return t+e.length},0)+th*e.length,r=new Uint8Array(n),i=o=0;i<e.length;i++)a=e[i],s=new Uint8Array(new Uint32Array([a.length]).buffer),r.set(s,o),o+=th,r.set(a,o),o+=a.length;return u(r),[2]}})})});i.push(r)}else i.push(c.data());null!=l&&(n.group=l),o.push(n)},n=0;n<a.length;++n)e(n);return[4,Promise.all(i)];case 1:return[2,{data:function(t){if(null===t)throw new Error("Invalid input value: "+JSON.stringify(t));var e=0,n=[];t.forEach(function(t){if(e+=t.byteLength,n.push(t.byteLength===t.buffer.byteLength?t:new t.constructor(t)),!(t instanceof Float32Array||t instanceof Int32Array||t instanceof Uint8Array))throw new Error("Unsupported TypedArray subtype: "+t.constructor.name)});var r=new Uint8Array(e),o=0;return n.forEach(function(t){r.set(new Uint8Array(t.buffer),o),o+=t.byteLength}),r.buffer}(t.sent()),specs:o}]}})})},fromMemory:function(t,e,n,r){return 1===arguments.length?null!=t.modelTopology||null!=t.weightSpecs?new Yh(t):(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 Yh({modelTopology:t})):(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 Yh({modelTopology:t,weightSpecs:e,weightData:n,trainingConfig:r}))},getLoadHandlers:function(t,e){return sh.getLoadHandlers(t,e)},getModelArtifactsInfoForJSON:ah,getSaveHandlers:function(t){return sh.getSaveHandlers(t)},http:Xh,isHTTPScheme:$h,loadWeights:function(e,n,r,o){return void 0===n&&(n=""),y(this,void 0,void 0,function(){return I(this,function(t){return[2,Hh(function(t){return Gh(t,{requestInit:o})})(e,n,r)]})})},registerLoadRouter:function(t){return sh.registerLoadRouter(t)},registerSaveRouter:function(t){return sh.registerSaveRouter(t)},weightsLoaderFactory:Hh,withSaveHandler:function(t){return new Jh(t)},copyModel:function(e,n){return y(this,void 0,void 0,function(){return I(this,function(t){return[2,fh(e,n,!1)]})})},listModels:function(){return y(this,void 0,void 0,function(){var e,n,r,o,i,a,s;return I(this,function(t){switch(t.label){case 0:e=ch.getSchemes(),n={},r=0,o=e,t.label=1;case 1:return r<o.length?(i=o[r],[4,ch.getManager(i).listModels()]):[3,4];case 2:for(s in a=t.sent())n[i+uh+s]=a[s];t.label=3;case 3:return r++,[3,1];case 4:return[2,n]}})})},moveModel:function(e,n){return y(this,void 0,void 0,function(){return I(this,function(t){return[2,fh(e,n,!0)]})})},removeModel:function(n){return y(this,void 0,void 0,function(){var e;return I(this,function(t){return e=ph(n),[2,ch.getManager(e.scheme).removeModel(e.path)]})})}}),ep=gn({confusionMatrix_:function(t,e,n){var r=on(t,"labels","confusionMatrix"),o=on(e,"predictions","confusionMatrix");O(null==n||0<n&&Number.isInteger(n),function(){return"If provided, numClasses must be a positive integer, but got "+n}),O(1===r.rank,function(){return"Expected the rank of labels to be 1, but got "+r.rank}),O(1===o.rank,function(){return"Expected the rank of predictions to be 1, but got "+o.rank}),O(r.shape[0]===o.shape[0],function(){return"Mismatch in the number of examples: "+r.shape[0]+" vs. "+o.shape[0]+". Labels and predictions should have the same number of elements."}),O(0<n&&Number.isInteger(n),function(){return"numClasses is required to be a positive integer, but got "+n});var i=vr(r.asType("int32"),n),a=vr(o.asType("int32"),n);return i.transpose().matMul(a).asType("int32")}}),np=Object.freeze({confusionMatrix:ep}),rp=gn({fromPixels_:function(t,e){if(void 0===e&&(e=3),4<e)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");var n="undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement;if(n&&n&&t.readyState<2)throw new Error("The video element has not loaded data yet. Please wait for `loadeddata` event on the <video> element.");return qt.fromPixels(t,e)}}),op=Object.freeze({toPixels:function(_,R){return y(this,void 0,void 0,function(){var e,n,r,o,i,a,s,u,c,l,h,p,f,d,v,m,g,y,x,b,w,C,E;return I(this,function(t){switch(t.label){case 0:if(e=on(_,"img","toPixels"),_ instanceof yt||(e=e.toInt()),2!==e.rank&&3!==e.rank)throw new Error("toPixels only supports rank 2 or 3 tensors, got rank "+e.rank+".");if(n=e.shape.slice(0,2),r=n[0],o=n[1],4<(i=2===e.rank?1:e.shape[2])||2===i)throw new Error("toPixels only supports depth of size 1, 3 or 4 but got "+i);return[4,e.data()];case 1:return a=t.sent(),s=e.min(),u=e.max(),[4,Promise.all([s.data(),u.data()])];case 2:if(c=t.sent(),l=c[0],h=c[1],p=l[0],f=h[0],s.dispose(),u.dispose(),"float32"===e.dtype){if(p<0||1<f)throw new Error("Tensor values for a float32 Tensor must be in the range [0 - 1] but got range ["+p+" - "+f+"].")}else{if("int32"!==e.dtype)throw new Error("Unsupported type for toPixels: "+e.dtype+". Please use float32 or int32 tensors.");if(p<0||255<f)throw new Error("Tensor values for a int32 Tensor must be in the range [0 - 255] but got range ["+p+" - "+f+"].")}for(d="float32"===e.dtype?255:1,v=new Uint8ClampedArray(o*r*4),m=0;m<r*o;++m)b=x=y=g=void 0,1===i?(g=a[m]*d,y=a[m]*d,x=a[m]*d,b=255):3===i?(g=a[3*m]*d,y=a[3*m+1]*d,x=a[3*m+2]*d,b=255):4===i&&(g=a[4*m]*d,y=a[4*m+1]*d,x=a[4*m+2]*d,b=a[4*m+3]*d),v[0+(w=4*m)]=Math.round(g),v[1+w]=Math.round(y),v[2+w]=Math.round(x),v[3+w]=Math.round(b);return null!=R&&(R.width=o,R.height=r,C=R.getContext("2d"),E=new ImageData(v,o,r),C.putImageData(E,0,0)),e!==_&&e.dispose(),[2,v]}})})},fromPixels:rp}),ip=(up.prototype.getClassName=function(){return this.constructor.className},up.fromConfig=function(t,e){return new t(e)},up),ap=(sp.getMap=function(){return null==sp.instance&&(sp.instance=new sp),sp.instance},sp.register=function(t){sp.getMap().classNameMap[t.className]=[t,t.fromConfig]},sp);function sp(){this.classNameMap={}}function up(){}function cp(t){O(null!=t.className,function(){return"Class being registered does not have the static className property defined."}),O("string"==typeof t.className,function(){return"className is required to be a string, but got type "+typeof t.className}),O(0<t.className.length,function(){return"Class being registered has an empty-string as its className, which is disallowed."}),ap.register(t)}var lp=Object.freeze({Serializable:ip,SerializationMap:ap,registerClass:cp});function hp(){return 32===qt.backend.floatPrecision()?.001:.1}function pp(t,e,n){var r=!0;if((z(t)||z(e))&&(r=!1),z(t)&&z(e)&&(r=!0),r){var o=t.constructor.name,i=e.constructor.name;if(o!==i)throw new Error("Arrays are of different type. Actual: "+o+". Expected: "+i)}if(Array.isArray(t)&&Array.isArray(e)){var a=nn(t),s=nn(e);if(!k(a,s))throw new Error("Arrays have different shapes. Actual: ["+a+"]. Expected: ["+s+"]")}var u=z(t)?t:m(t),c=z(e)?e:m(e);if(u.length!==c.length)throw new Error("Arrays have different lengths actual: "+u.length+" vs expected: "+c.length+".\nActual: "+u+".\nExpected: "+c+".");for(var l=0;l<c.length;++l){var h=u[l],p=c[l];if(!n(h,p))throw new Error("Arrays differ: actual["+l+"] = "+h+", expected["+l+"] = "+p+".\nActual: "+u+".\nExpected: "+c+".")}}function fp(t,e,n){return!isFinite(t)&&!isFinite(e)||!(isNaN(t)||isNaN(e)||Math.abs(t-e)>n)}var dp,vp=Object.freeze({TEST_EPSILON_FLOAT16:.1,expectArraysClose:function(t,e,n){return null==n&&(n=hp()),pp(t,e,function(t,e){return fp(t,e,n)})},testEpsilon:hp,expectPromiseToFail:function(t,e){t().then(function(){return e.fail()},function(){return e()})},expectArraysEqual:function(t,e){var n="string"==typeof e||"number"==typeof e||"boolean"==typeof e?[e]:e;return G(t)||G(t[0])||G(e)||G(e[0])?pp(t,n,function(t,e){return t==e}):pp(t,e,function(t,e){return fp(t,e,0)})},expectNumbersClose:function(t,e,n){if(null==n&&(n=hp()),!fp(t,e,n))throw new Error("Numbers differ: actual === "+t+", expected === "+e)},expectValuesInRange:function(t,e,n){for(var r=0;r<t.length;r++)if(t[r]<e||t[r]>n)throw new Error("Value out of range:"+t[r]+" low: "+e+", high: "+n)},expectArrayBuffersEqual:function(t,e){expect(new Float32Array(t)).toEqual(new Float32Array(e))}}),mp=Object.freeze({gpgpu_util:na,webgl_util:Ye,forceHalfFloat:function(){_.set("WEBGL_FORCE_F16_TEXTURES",!0)},MathBackendWebGL:hs,setWebGLContext:te,GPGPUContext:ra}),gp=(e(yp,dp=ip),yp.prototype.minimize=function(t,e,n){void 0===e&&(e=!1);var r=this.computeGradients(t,n),o=r.value,i=r.grads;if(null!=n){var a=n.map(function(t){return{name:t.name,tensor:i[t.name]}});this.applyGradients(a)}else this.applyGradients(i);return Ze(i),e?o:(o.dispose(),null)},Object.defineProperty(yp.prototype,"iterations",{get:function(){return null==this.iterations_&&(this.iterations_=0),this.iterations_},enumerable:!0,configurable:!0}),yp.prototype.incrementIterations=function(){this.iterations_=this.iterations+1},yp.prototype.computeGradients=function(t,e){return qr(t,e)},yp.prototype.dispose=function(){null!=this.iterations_&&Ze(this.iterations_)},yp.prototype.saveIterations=function(){return y(this,void 0,void 0,function(){return I(this,function(t){return null==this.iterations_&&(this.iterations_=0),[2,{name:"iter",tensor:En(this.iterations_,"int32")}]})})},yp.prototype.getWeights=function(){return y(this,void 0,void 0,function(){return I(this,function(t){throw new Error("getWeights() is not implemented for this optimizer yet.")})})},yp.prototype.setWeights=function(t){return y(this,void 0,void 0,function(){return I(this,function(t){throw new Error("setWeights() is not implemented for this optimizer class "+this.getClassName())})})},yp.prototype.extractIterations=function(n){return y(this,void 0,void 0,function(){var e;return I(this,function(t){switch(t.label){case 0:return e=this,[4,n[0].tensor.data()];case 1:return e.iterations_=t.sent()[0],[2,n.slice(1)]}})})},yp);function yp(){return null!==dp&&dp.apply(this,arguments)||this}Object.defineProperty(gp,Symbol.hasInstance,{value:function(t){return null!=t.minimize&&null!=t.computeGradients&&null!=t.applyGradients}});var xp,bp=(e(wp,xp=gp),wp.prototype.applyGradients=function(n){var u=this;(Array.isArray(n)?n.map(function(t){return t.name}):Object.keys(n)).forEach(function(t,e){var o=qt.registeredVariables[t];null==u.accumulatedGrads[e]&&(u.accumulatedGrads[e]={originalName:t+"/accum_grad",variable:Qe(function(){return On(o).variable(!1)})}),null==u.accumulatedUpdates[e]&&(u.accumulatedUpdates[e]={originalName:t+"/accum_var",variable:Qe(function(){return On(o).variable(!1)})});var i=Array.isArray(n)?n[e].tensor:n[t];if(null!=i){var a=u.accumulatedGrads[e].variable,s=u.accumulatedUpdates[e].variable;Qe(function(){var t=a.mul(u.rho).add(i.square().mul(1-u.rho)),e=s.add(u.epsilon).sqrt().div(a.add(u.epsilon).sqrt()).mul(i),n=s.mul(u.rho).add(e.square().mul(1-u.rho));a.assign(t),s.assign(n);var r=e.mul(-u.learningRate).add(o);o.assign(r)})}}),this.incrementIterations()},wp.prototype.dispose=function(){null!=this.accumulatedUpdates&&(Ze(this.accumulatedGrads.map(function(t){return t.variable})),Ze(this.accumulatedUpdates.map(function(t){return t.variable})))},wp.prototype.getWeights=function(){return y(this,void 0,void 0,function(){var e;return I(this,function(t){switch(t.label){case 0:return e=this.accumulatedGrads.concat(this.accumulatedUpdates),[4,this.saveIterations()];case 1:return[2,[t.sent()].concat(e.map(function(t){return{name:t.originalName,tensor:t.variable}}))]}})})},wp.prototype.setWeights=function(n){return y(this,void 0,void 0,function(){var e;return I(this,function(t){switch(t.label){case 0:return[4,this.extractIterations(n)];case 1:return n=t.sent(),e=n.length/2,this.accumulatedGrads=n.slice(0,e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),this.accumulatedUpdates=n.slice(e,2*e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),[2]}})})},wp.prototype.getConfig=function(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}},wp.fromConfig=function(t,e){return new t(e.learningRate,e.rho,e.epsilon)},wp.className="Adadelta",wp);function wp(t,e,n){void 0===n&&(n=null);var r=xp.call(this)||this;return r.learningRate=t,r.rho=e,r.epsilon=n,r.accumulatedGrads=[],r.accumulatedUpdates=[],null==n&&(r.epsilon=qt.backend.epsilon()),r}cp(bp);var Cp,Ep=(e(_p,Cp=gp),_p.prototype.applyGradients=function(i){var a=this;(Array.isArray(i)?i.map(function(t){return t.name}):Object.keys(i)).forEach(function(t,e){var n=qt.registeredVariables[t];null==a.accumulatedGrads[e]&&(a.accumulatedGrads[e]={originalName:t+"/accumulator",variable:Qe(function(){return Dn(n.shape,a.initialAccumulatorValue).variable(!1)})});var r=Array.isArray(i)?i[e].tensor:i[t];if(null!=r){var o=a.accumulatedGrads[e].variable;Qe(function(){var t=o.add(r.square());o.assign(t);var e=r.div(t.add(qt.backend.epsilon()).sqrt()).mul(-a.learningRate).add(n);n.assign(e)})}}),this.incrementIterations()},_p.prototype.dispose=function(){null!=this.accumulatedGrads&&Ze(this.accumulatedGrads.map(function(t){return t.variable}))},_p.prototype.getWeights=function(){return y(this,void 0,void 0,function(){return I(this,function(t){switch(t.label){case 0:return[4,this.saveIterations()];case 1:return[2,[t.sent()].concat(this.accumulatedGrads.map(function(t){return{name:t.originalName,tensor:t.variable}}))]}})})},_p.prototype.setWeights=function(e){return y(this,void 0,void 0,function(){return I(this,function(t){switch(t.label){case 0:return[4,this.extractIterations(e)];case 1:return e=t.sent(),this.accumulatedGrads=e.map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),[2]}})})},_p.prototype.getConfig=function(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}},_p.fromConfig=function(t,e){return new t(e.learningRate,e.initialAccumulatorValue)},_p.className="Adagrad",_p);function _p(t,e){void 0===e&&(e=.1);var n=Cp.call(this)||this;return n.learningRate=t,n.initialAccumulatorValue=e,n.accumulatedGrads=[],n}cp(Ep);var Rp,Ip=(e(Sp,Rp=gp),Sp.prototype.applyGradients=function(f){var d=this,t=Array.isArray(f)?f.map(function(t){return t.name}):Object.keys(f);Qe(function(){var h=Fu(1,d.accBeta1),p=Fu(1,d.accBeta2);t.forEach(function(t,e){var n=qt.registeredVariables[t];null==d.accumulatedFirstMoment[e]&&(d.accumulatedFirstMoment[e]={originalName:t+"/m",variable:Qe(function(){return On(n).variable(!1)})}),null==d.accumulatedSecondMoment[e]&&(d.accumulatedSecondMoment[e]={originalName:t+"/v",variable:Qe(function(){return On(n).variable(!1)})});var r=Array.isArray(f)?f[e].tensor:f[t];if(null!=r){var o=d.accumulatedFirstMoment[e].variable,i=d.accumulatedSecondMoment[e].variable,a=o.mul(d.beta1).add(r.mul(1-d.beta1)),s=i.mul(d.beta2).add(r.square().mul(1-d.beta2)),u=a.div(h),c=s.div(p);o.assign(a),i.assign(s);var l=u.div(c.sqrt().add(d.epsilon)).mul(-d.learningRate).add(n);n.assign(l)}}),d.accBeta1.assign(d.accBeta1.mul(d.beta1)),d.accBeta2.assign(d.accBeta2.mul(d.beta2))}),this.incrementIterations()},Sp.prototype.dispose=function(){this.accBeta1.dispose(),this.accBeta2.dispose(),null!=this.accumulatedFirstMoment&&Ze(this.accumulatedFirstMoment.map(function(t){return t.variable})),null!=this.accumulatedSecondMoment&&Ze(this.accumulatedSecondMoment.map(function(t){return t.variable}))},Sp.prototype.getWeights=function(){return y(this,void 0,void 0,function(){var e;return I(this,function(t){switch(t.label){case 0:return e=this.accumulatedFirstMoment.concat(this.accumulatedSecondMoment),[4,this.saveIterations()];case 1:return[2,[t.sent()].concat(e.map(function(t){return{name:t.originalName,tensor:t.variable}}))]}})})},Sp.prototype.setWeights=function(r){return y(this,void 0,void 0,function(){var e,n=this;return I(this,function(t){switch(t.label){case 0:return[4,this.extractIterations(r)];case 1:return r=t.sent(),Qe(function(){n.accBeta1.assign(Nu(n.beta1,n.iterations_+1)),n.accBeta2.assign(Nu(n.beta2,n.iterations_+1))}),e=r.length/2,this.accumulatedFirstMoment=r.slice(0,e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),this.accumulatedSecondMoment=r.slice(e,2*e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),[2]}})})},Sp.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}},Sp.fromConfig=function(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon)},Sp.className="Adam",Sp);function Sp(t,e,n,r){void 0===r&&(r=null);var o=Rp.call(this)||this;return o.learningRate=t,o.beta1=e,o.beta2=n,o.epsilon=r,o.accumulatedFirstMoment=[],o.accumulatedSecondMoment=[],Qe(function(){o.accBeta1=En(e).variable(),o.accBeta2=En(n).variable()}),null==r&&(o.epsilon=qt.backend.epsilon()),o}cp(Ip);var kp,Np=(e(Ap,kp=gp),Ap.prototype.applyGradients=function(f){var d=this,t=Array.isArray(f)?f.map(function(t){return t.name}):Object.keys(f);Qe(function(){var h=Fu(1,d.accBeta1),p=yu(-d.learningRate,d.iteration.mul(d.decay).add(1));t.forEach(function(t,e){var n=qt.registeredVariables[t];null==d.accumulatedFirstMoment[e]&&(d.accumulatedFirstMoment[e]={originalName:t+"/m",variable:On(n).variable(!1)}),null==d.accumulatedWeightedInfNorm[e]&&(d.accumulatedWeightedInfNorm[e]={originalName:t+"/v",variable:On(n).variable(!1)});var r=Array.isArray(f)?f[e].tensor:f[t];if(null!=r){var o=d.accumulatedFirstMoment[e].variable,i=d.accumulatedWeightedInfNorm[e].variable,a=o.mul(d.beta1).add(r.mul(1-d.beta1)),s=i.mul(d.beta2),u=r.abs(),c=s.maximum(u);o.assign(a),i.assign(c);var l=p.div(h).mul(a.div(c.add(d.epsilon))).add(n);n.assign(l)}}),d.iteration.assign(d.iteration.add(1)),d.accBeta1.assign(d.accBeta1.mul(d.beta1))}),this.incrementIterations()},Ap.prototype.dispose=function(){this.accBeta1.dispose(),this.iteration.dispose(),null!=this.accumulatedFirstMoment&&Ze(this.accumulatedFirstMoment.map(function(t){return t.variable})),null!=this.accumulatedWeightedInfNorm&&Ze(this.accumulatedWeightedInfNorm.map(function(t){return t.variable}))},Ap.prototype.getWeights=function(){return y(this,void 0,void 0,function(){return I(this,function(t){throw new Error("getWeights() is not implemented for Adamax yet.")})})},Ap.prototype.setWeights=function(t){return y(this,void 0,void 0,function(){return I(this,function(t){throw new Error("setWeights() is not implemented for Adamax yet.")})})},Ap.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}},Ap.fromConfig=function(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon,e.decay)},Ap.className="Adamax",Ap);function Ap(t,e,n,r,o){void 0===r&&(r=null),void 0===o&&(o=0);var i=kp.call(this)||this;return i.learningRate=t,i.beta1=e,i.beta2=n,i.epsilon=r,i.decay=o,i.accumulatedFirstMoment=[],i.accumulatedWeightedInfNorm=[],Qe(function(){i.iteration=En(0).variable(),i.accBeta1=En(e).variable()}),null==r&&(i.epsilon=qt.backend.epsilon()),i}cp(Np);var Tp,Dp=(e(Fp,Tp=gp),Fp.prototype.applyGradients=function(o){var i=this;(Array.isArray(o)?o.map(function(t){return t.name}):Object.keys(o)).forEach(function(t,e){var n=Array.isArray(o)?o[e].tensor:o[t];if(null!=n){var r=qt.registeredVariables[t];Qe(function(){var t=i.c.mul(n).add(r);r.assign(t)})}}),this.incrementIterations()},Fp.prototype.setLearningRate=function(t){this.learningRate=t,null!=this.c&&this.c.dispose(),this.c=tn(En(-t))},Fp.prototype.dispose=function(){this.c.dispose()},Fp.prototype.getWeights=function(){return y(this,void 0,void 0,function(){return I(this,function(t){switch(t.label){case 0:return[4,this.saveIterations()];case 1:return[2,[t.sent()]]}})})},Fp.prototype.setWeights=function(e){return y(this,void 0,void 0,function(){return I(this,function(t){switch(t.label){case 0:return[4,this.extractIterations(e)];case 1:if(0!==(e=t.sent()).length)throw new Error("SGD optimizer does not have settable weights.");return[2]}})})},Fp.prototype.getConfig=function(){return{learningRate:this.learningRate}},Fp.fromConfig=function(t,e){return new t(e.learningRate)},Fp.className="SGD",Fp);function Fp(t){var e=Tp.call(this)||this;return e.learningRate=t,e.setLearningRate(t),e}cp(Dp);var Mp,Pp=(e(Op,Mp=Dp),Op.prototype.applyGradients=function(i){var a=this;(Array.isArray(i)?i.map(function(t){return t.name}):Object.keys(i)).forEach(function(t,e){var n=qt.registeredVariables[t];null==a.accumulations[e]&&(a.accumulations[e]={originalName:t+"/momentum",variable:Qe(function(){return On(n).variable(!1)})});var r=a.accumulations[e].variable,o=Array.isArray(i)?i[e].tensor:i[t];null!=o&&Qe(function(){var t,e=a.m.mul(r).add(o);t=a.useNesterov?a.c.mul(o.add(e.mul(a.m))).add(n):a.c.mul(e).add(n),r.assign(e),n.assign(t)})}),this.incrementIterations()},Op.prototype.dispose=function(){this.m.dispose(),null!=this.accumulations&&Ze(this.accumulations.map(function(t){return t.variable}))},Op.prototype.setMomentum=function(t){this.momentum=t},Op.prototype.getWeights=function(){return y(this,void 0,void 0,function(){return I(this,function(t){switch(t.label){case 0:return[4,this.saveIterations()];case 1:return[2,[t.sent()].concat(this.accumulations.map(function(t){return{name:t.originalName,tensor:t.variable}}))]}})})},Op.prototype.setWeights=function(e){return y(this,void 0,void 0,function(){return I(this,function(t){switch(t.label){case 0:return[4,this.extractIterations(e)];case 1:return e=t.sent(),this.accumulations=e.map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),[2]}})})},Op.prototype.getConfig=function(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}},Op.fromConfig=function(t,e){return new t(e.learningRate,e.momentum,e.useNesterov)},Op.className="Momentum",Op);function Op(t,e,n){void 0===n&&(n=!1);var r=Mp.call(this,t)||this;return r.learningRate=t,r.momentum=e,r.useNesterov=n,r.accumulations=[],r.m=En(r.momentum),r}cp(Pp);var Bp,Lp=(e(Wp,Bp=gp),Wp.prototype.applyGradients=function(e){var h=this;(Array.isArray(e)?e.map(function(t){return t.name}):Object.keys(e)).forEach(function(t,a){var s=qt.registeredVariables[t];null==h.accumulatedMeanSquares[a]&&(h.accumulatedMeanSquares[a]={originalName:t+"/rms",variable:Qe(function(){return On(s).variable(!1)})}),null==h.accumulatedMoments[a]&&(h.accumulatedMoments[a]={originalName:t+"/momentum",variable:Qe(function(){return On(s).variable(!1)})}),null==h.accumulatedMeanGrads[a]&&h.centered&&(h.accumulatedMeanGrads[a]={originalName:t+"/mg",variable:Qe(function(){return On(s).variable(!1)})});var u=Array.isArray(e)?e[a].tensor:e[t];if(null!=u){var c=h.accumulatedMeanSquares[a].variable,l=h.accumulatedMoments[a].variable;Qe(function(){var t=c.mul(h.decay).add(u.square().mul(1-h.decay));if(h.centered){var e=h.accumulatedMeanGrads[a].variable,n=e.mul(h.decay).add(u.mul(1-h.decay)),r=l.mul(h.momentum).add(u.mul(h.learningRate).div(t.sub(n.square().add(h.epsilon)).sqrt()));c.assign(t),e.assign(n),l.assign(r);var o=s.sub(r);s.assign(o)}else{var i=c.mul(h.decay).add(u.square().mul(1-h.decay));r=l.mul(h.momentum).add(u.mul(h.learningRate).div(i.add(h.epsilon).sqrt())),c.assign(i),l.assign(r),o=s.sub(r),s.assign(o)}})}}),this.incrementIterations()},Wp.prototype.dispose=function(){null!=this.accumulatedMeanSquares&&Ze(this.accumulatedMeanSquares.map(function(t){return t.variable})),null!=this.accumulatedMeanGrads&&this.centered&&Ze(this.accumulatedMeanGrads.map(function(t){return t.variable})),null!=this.accumulatedMoments&&Ze(this.accumulatedMoments.map(function(t){return t.variable}))},Wp.prototype.getWeights=function(){return y(this,void 0,void 0,function(){var e;return I(this,function(t){switch(t.label){case 0:return e=this.accumulatedMeanSquares.concat(this.accumulatedMoments),this.centered&&e.push.apply(e,this.accumulatedMeanGrads),[4,this.saveIterations()];case 1:return[2,[t.sent()].concat(e.map(function(t){return{name:t.originalName,tensor:t.variable}}))]}})})},Wp.prototype.setWeights=function(n){return y(this,void 0,void 0,function(){var e;return I(this,function(t){switch(t.label){case 0:return[4,this.extractIterations(n)];case 1:return n=t.sent(),e=this.centered?n.length/3:n.length/2,this.accumulatedMeanSquares=n.slice(0,e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),this.accumulatedMoments=n.slice(e,2*e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),this.centered&&(this.accumulatedMeanGrads=n.slice(2*e,3*e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}})),[2]}})})},Wp.prototype.getConfig=function(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}},Wp.fromConfig=function(t,e){return new t(e.learningRate,e.decay,e.momentum,e.epsilon,e.centered)},Wp.className="RMSProp",Wp);function Wp(t,e,n,r,o){void 0===e&&(e=.9),void 0===n&&(n=0),void 0===r&&(r=null),void 0===o&&(o=!1);var i=Bp.call(this)||this;return i.learningRate=t,i.decay=e,i.momentum=n,i.epsilon=r,i.accumulatedMeanSquares=[],i.accumulatedMoments=[],i.accumulatedMeanGrads=[],i.centered=o,null==r&&(i.epsilon=qt.backend.epsilon()),i}cp(Lp);var zp=(Gp.sgd=function(t){return new Dp(t)},Gp.momentum=function(t,e,n){return void 0===n&&(n=!1),new Pp(t,e,n)},Gp.rmsprop=function(t,e,n,r,o){return void 0===e&&(e=.9),void 0===n&&(n=0),void 0===r&&(r=null),void 0===o&&(o=!1),new Lp(t,e,n,r,o)},Gp.adam=function(t,e,n,r){return void 0===t&&(t=.001),void 0===e&&(e=.9),void 0===n&&(n=.999),void 0===r&&(r=null),new Ip(t,e,n,r)},Gp.adadelta=function(t,e,n){return void 0===t&&(t=.001),void 0===e&&(e=.95),void 0===n&&(n=null),new bp(t,e,n)},Gp.adamax=function(t,e,n,r,o){return void 0===t&&(t=.002),void 0===e&&(e=.9),void 0===n&&(n=.999),void 0===r&&(r=null),void 0===o&&(o=0),new Np(t,e,n,r,o)},Gp.adagrad=function(t,e){return void 0===e&&(e=.1),new Ep(t,e)},Gp),Up={sgd:zp.sgd,momentum:zp.momentum,adadelta:zp.adadelta,adagrad:zp.adagrad,rmsprop:zp.rmsprop,adamax:zp.adamax,adam:zp.adam},Vp="undefined"!=typeof requestAnimationFrame?requestAnimationFrame:"undefined"!=typeof setImmediate?setImmediate:function(t){return t()};function Gp(){}vt=Hl;var Hp=Object.freeze({AdadeltaOptimizer:bp,AdagradOptimizer:Ep,AdamOptimizer:Ip,AdamaxOptimizer:Np,DataStorage:Jr,get ENV(){return _},Environment:n,KernelBackend:Qr,MomentumOptimizer:Pp,Optimizer:gp,RMSPropOptimizer:Lp,get Rank(){return Et},get Reduction(){return dl},SGDOptimizer:Dp,Tensor:yt,TensorBuffer:ft,Variable:wt,abs:fs,acos:ds,acosh:vs,add:du,addN:vu,addStrict:mu,all:Dc,any:Fc,argMax:Mc,argMin:Pc,asin:ms,asinh:gs,atan:ys,atan2:gu,atanh:xs,avgPool:Cc,avgPool3d:Rc,backend:function(){return qt.backend},backend_util:bo,basicLSTMCell:Jc,batchNorm:iu,batchNorm2d:au,batchNorm3d:su,batchNorm4d:uu,batchNormalization:ou,batchNormalization2d:eu,batchNormalization3d:nu,batchNormalization4d:ru,batchToSpaceND:sr,booleanMaskAsync:Xu,browser:op,buffer:or,cast:ur,ceil:bs,clipByValue:ws,clone:cr,complex:yn,concat:Bn,concat1d:Ln,concat2d:Wn,concat3d:zn,concat4d:Un,conv1d:nc,conv2d:rc,conv2dDerFilter:ic,conv2dDerInput:ac,conv2dTranspose:cc,conv3d:oc,conv3dTranspose:lc,cos:Cs,cosh:Es,cumsum:lr,customGrad:$r,deprecationWarn:Je,depthToSpace:hr,depthwiseConv2d:sc,diag:ll,disableDeprecationWarnings:function(){_.set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")},dispose:Ze,disposeVariables:function(){qt.disposeVariables()},div:yu,divStrict:xu,dot:pc,dropout:hl,elu:Gc,enableDebugMode:function(){_.set("DEBUG",!0)},enableProdMode:function(){_.set("PROD",!0)},environment:u,equal:Pu,equalStrict:Ou,erf:_s,exp:Rs,expandDims:pr,expm1:Is,eye:fr,fft:rl,fill:Dn,findBackend:function(t){return qt.findBackend(t)},findBackendFactory:function(t){return qt.findBackendFactory(t)},floor:Ss,floorDiv:bu,frame:yl,fused:Gl,gather:Yu,gatherND:cl,getBackend:function(){return qt.backendName},grad:function(i){return O($(i),function(){return"The f passed in grad(f) must be a function"}),function(t,e){var r=on(t,"x","tf.grad",null),o=null!=e?on(e,"dy","tf.grad"):null;return qt.tidy(function(){var t=qt.gradients(function(){return i(r)},[r],o),e=t.value,n=t.grads;return null!=o&&x(e.shape,o.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Kr(n),n[0]})}},grads:function(i){return O($(i),function(){return"The f passed in grads(f) must be a function"}),function(t,e){O(Array.isArray(t),function(){return"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s"});var r=an(t,"args","tf.grads",null),o=null!=e?on(e,"dy","tf.grads"):null;return qt.tidy(function(){var t=qt.gradients(function(){return i.apply(void 0,r)},r,o),e=t.value,n=t.grads;return null!=o&&x(e.shape,o.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Kr(n),n})}},greater:Bu,greaterEqual:Lu,greaterEqualStrict:Wu,greaterStrict:zu,hammingWindow:gl,hannWindow:ml,ifft:ol,imag:bn,image:zl,inTopKAsync:fl,io:tp,irfft:al,isFinite:Ws,isInf:Ls,isNaN:Bs,keep:tn,leakyRelu:Hc,less:Uu,lessEqual:Vu,lessEqualStrict:Gu,lessStrict:Hu,linalg:Ml,linspace:Fn,localResponseNormalization:Xc,log:ks,log1p:Ns,logSigmoid:As,logSoftmax:Yr,logSumExp:Oc,logicalAnd:cu,logicalNot:lu,logicalOr:hu,logicalXor:pu,losses:Al,matMul:hc,math:np,max:Bc,maxPool:wc,maxPool3d:_c,maximum:wu,maximumStrict:Cu,mean:Lc,memory:function(){return qt.memory()},min:Wc,minimum:Eu,minimumStrict:_u,mod:Ru,modStrict:Iu,moments:zc,movingAverage:Zc,mul:Su,mulStrict:ku,multiRNNCell:Qc,multinomial:dr,neg:Ts,nextFrame:function(){return new Promise(function(t){return Vp(function(){return t()})})},norm:Yc,notEqual:ju,notEqualStrict:qu,oneHot:vr,ones:An,onesLike:Pn,op:gn,outerProduct:fc,pad:mr,pad1d:gr,pad2d:yr,pad3d:xr,pad4d:br,pool:Ec,pow:Nu,powStrict:Au,prelu:jc,print:ir,prod:Vc,profile:function(t){return qt.profile(t)},rand:wr,randomGamma:Er,randomNormal:Cr,randomUniform:_r,range:Mn,ready:function(){return qt.ready()},real:xn,reciprocal:Ds,registerBackend:function(t,e,n){return void 0===n&&(n=1),qt.registerBackend(t,e,n)},relu:qc,removeBackend:function(t){qt.removeBackend(t)},reshape:Rr,reverse:dc,reverse1d:vc,reverse2d:mc,reverse3d:gc,reverse4d:yc,rfft:il,round:Fs,rsqrt:Ms,scalar:En,scatterND:nl,selu:$c,separableConv2d:uc,serialization:lp,setBackend:function(t){return qt.setBackend(t)},setPlatform:function(t,e){_.setPlatform(t,e)},setdiff1dAsync:ar,sigmoid:Ps,sign:Os,signal:bl,sin:zs,sinh:Us,slice:Ic,slice1d:Sc,slice2d:kc,slice3d:Nc,slice4d:Ac,softmax:Xr,softplus:Vs,spaceToBatchND:Ir,sparseToDense:ul,spectral:sl,split:Vn,sqrt:Gs,square:Hs,squaredDifference:Tu,squaredDifferenceStrict:Du,squeeze:Sr,stack:kr,step:js,stft:xl,stridedSlice:tl,sub:Fu,subStrict:Mu,sum:Uc,tan:qs,tanh:$s,tensor:wn,tensor1d:_n,tensor2d:Rn,tensor3d:In,tensor4d:Sn,tensor5d:kn,tensor6d:Nn,tensor_util:Ut,test_util:vp,tidy:Qe,tile:Nr,time:function(t){return qt.time(t)},topk:el,train:Up,transpose:Kc,truncatedNormal:Ar,unsortedSegmentSum:Ju,unstack:Tr,util:ot,valueAndGrad:function(i){return O($(i),function(){return"The f passed in valueAndGrad(f) must be a function"}),function(t,e){O(t instanceof yt,function(){return"The x passed in valueAndGrad(f)(x) must be a tensor"}),O(null==e||e instanceof yt,function(){return"The dy passed in valueAndGrad(f)(x, dy) must be a tensor"});var n=qt.gradients(function(){return i(t)},[t],e),r=n.grads,o=n.value;return Kr(r),{grad:r[0],value:o}}},valueAndGrads:function(r){return O($(r),function(){return"The f passed in valueAndGrads(f) must be a function"}),function(t,e){O(Array.isArray(t)&&t.every(function(t){return t instanceof yt}),function(){return"The args passed in valueAndGrads(f)(args) must be array of tensors"}),O(null==e||e instanceof yt,function(){return"The dy passed in valueAndGrads(f)(args, dy) must be a tensor"});var n=qt.gradients(function(){return r.apply(void 0,t)},t,e);return null!=e&&x(n.value.shape,e.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Kr(n.grads),n}},variable:Ft,variableGrads:qr,version_core:"1.2.9",webgl:mp,where:fu,whereAsync:tu,zeros:Tn,zerosLike:On}),jp=(Object.defineProperty(qp.prototype,"width",{get:function(){return this._width},enumerable:!0,configurable:!0}),Object.defineProperty(qp.prototype,"height",{get:function(){return this._height},enumerable:!0,configurable:!0}),qp.prototype.reverse=function(){return new qp(1/this.width,1/this.height)},qp);function qp(t,e){if(!sf(t)||!sf(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}var $p=(Object.defineProperty(Kp.prototype,"x",{get:function(){return this._x},enumerable:!0,configurable:!0}),Object.defineProperty(Kp.prototype,"y",{get:function(){return this._y},enumerable:!0,configurable:!0}),Kp.prototype.add=function(t){return new Kp(this.x+t.x,this.y+t.y)},Kp.prototype.sub=function(t){return new Kp(this.x-t.x,this.y-t.y)},Kp.prototype.mul=function(t){return new Kp(this.x*t.x,this.y*t.y)},Kp.prototype.div=function(t){return new Kp(this.x/t.x,this.y/t.y)},Kp.prototype.abs=function(){return new Kp(Math.abs(this.x),Math.abs(this.y))},Kp.prototype.magnitude=function(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2))},Kp.prototype.floor=function(){return new Kp(Math.floor(this.x),Math.floor(this.y))},Kp);function Kp(t,e){this._x=t,this._y=e}function Xp(t,e){return t instanceof yt&&t.shape.length===e}function Yp(t){return Xp(t,2)}function Jp(t){return Xp(t,3)}function Qp(t){return Xp(t,4)}function Zp(t){return t%1!=0}function tf(t){return t%2==0}function ef(t,e){void 0===e&&(e=2);var n=Math.pow(10,e);return Math.floor(t*n)/n}function nf(t){return t&&t.width&&t.height}function rf(t,e){var n=t.width,r=t.height,o=e/Math.max(r,n);return new jp(Math.round(n*o),Math.round(r*o))}function of(t){return t.reduce(function(t,e){return t.add(e)},new $p(0,0)).div(new $p(t.length,t.length))}function af(t,n,r){return Array(t).fill(0).map(function(t,e){return n+e*r})}function sf(t){return!!t&&t!==1/0&&t!==-1/0&&!isNaN(t)||0===t}function uf(t){return sf(t)&&0<=t&&t<=1}var cf=(lf.isRect=function(t){return!!t&&[t.x,t.y,t.width,t.height].every(sf)},lf.assertIsValidBox=function(t,e,n){if(void 0===n&&(n=!1),!lf.isRect(t))throw new Error(e+" - invalid box: "+JSON.stringify(t)+", expected object with properties x, y, width, height");if(!n&&(t.width<0||t.height<0))throw new Error(e+" - width ("+t.width+") and height ("+t.height+") must be positive numbers")},Object.defineProperty(lf.prototype,"x",{get:function(){return this._x},enumerable:!0,configurable:!0}),Object.defineProperty(lf.prototype,"y",{get:function(){return this._y},enumerable:!0,configurable:!0}),Object.defineProperty(lf.prototype,"width",{get:function(){return this._width},enumerable:!0,configurable:!0}),Object.defineProperty(lf.prototype,"height",{get:function(){return this._height},enumerable:!0,configurable:!0}),Object.defineProperty(lf.prototype,"left",{get:function(){return this.x},enumerable:!0,configurable:!0}),Object.defineProperty(lf.prototype,"top",{get:function(){return this.y},enumerable:!0,configurable:!0}),Object.defineProperty(lf.prototype,"right",{get:function(){return this.x+this.width},enumerable:!0,configurable:!0}),Object.defineProperty(lf.prototype,"bottom",{get:function(){return this.y+this.height},enumerable:!0,configurable:!0}),Object.defineProperty(lf.prototype,"area",{get:function(){return this.width*this.height},enumerable:!0,configurable:!0}),Object.defineProperty(lf.prototype,"topLeft",{get:function(){return new $p(this.left,this.top)},enumerable:!0,configurable:!0}),Object.defineProperty(lf.prototype,"topRight",{get:function(){return new $p(this.right,this.top)},enumerable:!0,configurable:!0}),Object.defineProperty(lf.prototype,"bottomLeft",{get:function(){return new $p(this.left,this.bottom)},enumerable:!0,configurable:!0}),Object.defineProperty(lf.prototype,"bottomRight",{get:function(){return new $p(this.right,this.bottom)},enumerable:!0,configurable:!0}),lf.prototype.round=function(){var t=[this.x,this.y,this.width,this.height].map(function(t){return Math.round(t)});return new lf({x:t[0],y:t[1],width:t[2],height:t[3]})},lf.prototype.floor=function(){var t=[this.x,this.y,this.width,this.height].map(function(t){return Math.floor(t)});return new lf({x:t[0],y:t[1],width:t[2],height:t[3]})},lf.prototype.toSquare=function(){var t=this.x,e=this.y,n=this.width,r=this.height,o=Math.abs(n-r);return n<r&&(t-=o/2,n+=o),r<n&&(e-=o/2,r+=o),new lf({x:t,y:e,width:n,height:r})},lf.prototype.rescale=function(t){var e=nf(t)?t.width:t,n=nf(t)?t.height:t;return new lf({x:this.x*e,y:this.y*n,width:this.width*e,height:this.height*n})},lf.prototype.pad=function(t,e){var n=[this.x-t/2,this.y-e/2,this.width+t,this.height+e];return new lf({x:n[0],y:n[1],width:n[2],height:n[3]})},lf.prototype.clipAtImageBorders=function(t,e){var n=this.x,r=this.y,o=this.right,i=this.bottom,a=Math.max(n,0),s=Math.max(r,0),u=o-a,c=i-s;return new lf({x:a,y:s,width:Math.min(u,t-a),height:Math.min(c,e-s)}).floor()},lf.prototype.shift=function(t,e){var n=this.width,r=this.height;return new lf({x:this.x+t,y:this.y+e,width:n,height:r})},lf.prototype.padAtBorders=function(t,e){var n=this.width+1,r=this.height+1,o=n,i=r,a=this.left,s=this.top,u=this.right,c=this.bottom;return e<u&&(o=-u+e+n,u=e),t<c&&(i=-c+t+r,c=t),a<1&&(i=2-a,a=1),s<1&&(i=2-s,s=1),{dy:1,edy:i,dx:1,edx:o,y:s,ey:c,x:a,ex:u,w:n,h:r}},lf.prototype.calibrate=function(t){return new lf({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()},lf);function lf(t,e){void 0===e&&(e=!0);var n=t||{},r=[n.left,n.top,n.right,n.bottom].every(sf),o=[n.x,n.y,n.width,n.height].every(sf);if(!o&&!r)throw new Error("Box.constructor - expected box to be IBoundingBox | IRect, instead have "+JSON.stringify(n));var i=o?[n.x,n.y,n.width,n.height]:[n.left,n.top,n.right-n.left,n.bottom-n.top],a=i[0],s=i[1],u=i[2],c=i[3];lf.assertIsValidBox({x:a,y:s,width:u,height:c},"Box.constructor",e),this._x=a,this._y=s,this._width=u,this._height=c}var hf,pf=(t(ff,hf=cf),ff);function ff(t,e,n,r,o){return void 0===o&&(o=!1),hf.call(this,{left:t,top:e,right:n,bottom:r},o)||this}var df,vf=(t(mf,df=cf),mf.assertIsValidLabeledBox=function(t,e){if(cf.assertIsValidBox(t,e),!sf(t.label))throw new Error(e+" - expected property label ("+t.label+") to be a number")},Object.defineProperty(mf.prototype,"label",{get:function(){return this._label},enumerable:!0,configurable:!0}),mf);function mf(t,e){var n=df.call(this,t)||this;return n._label=e,n}var gf=(Object.defineProperty(yf.prototype,"score",{get:function(){return this._score},enumerable:!0,configurable:!0}),Object.defineProperty(yf.prototype,"classScore",{get:function(){return this._classScore},enumerable:!0,configurable:!0}),Object.defineProperty(yf.prototype,"className",{get:function(){return this._className},enumerable:!0,configurable:!0}),Object.defineProperty(yf.prototype,"box",{get:function(){return this._box},enumerable:!0,configurable:!0}),Object.defineProperty(yf.prototype,"imageDims",{get:function(){return this._imageDims},enumerable:!0,configurable:!0}),Object.defineProperty(yf.prototype,"imageWidth",{get:function(){return this.imageDims.width},enumerable:!0,configurable:!0}),Object.defineProperty(yf.prototype,"imageHeight",{get:function(){return this.imageDims.height},enumerable:!0,configurable:!0}),Object.defineProperty(yf.prototype,"relativeBox",{get:function(){return new cf(this._box).rescale(this.imageDims.reverse())},enumerable:!0,configurable:!0}),yf.prototype.forSize=function(t,e){return new yf(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:e})},yf);function yf(t,e,n,r,o){this._imageDims=new jp(o.width,o.height),this._score=t,this._classScore=e,this._className=n,this._box=new cf(r).rescale(this._imageDims)}var xf,bf=(t(wf,xf=vf),wf.assertIsValidPredictedBox=function(t,e){if(vf.assertIsValidLabeledBox(t,e),!uf(t.score)||!uf(t.classScore))throw new Error(e+" - expected properties score ("+t.score+") and ("+t.classScore+") to be a number between [0, 1]")},Object.defineProperty(wf.prototype,"score",{get:function(){return this._score},enumerable:!0,configurable:!0}),Object.defineProperty(wf.prototype,"classScore",{get:function(){return this._classScore},enumerable:!0,configurable:!0}),wf);function wf(t,e,n,r){var o=xf.call(this,t,e)||this;return o._score=n,o._classScore=r,o}var Cf,Ef,_f=(t(Rf,Cf=cf),Rf);function Rf(t,e,n,r,o){return void 0===o&&(o=!1),Cf.call(this,{x:t,y:e,width:n,height:r},o)||this}function If(){var t=window.fetch||function(){throw new Error("fetch - missing fetch implementation for browser environment")};return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D:CanvasRenderingContext2D,Image:HTMLImageElement,ImageData:ImageData,Video:HTMLVideoElement,createCanvasElement:function(){return document.createElement("canvas")},createImageElement:function(){return document.createElement("img")},fetch:t,readFile:function(){throw new Error("readFile - filesystem not available for browser environment")}}}function Sf(e){var n="";if(!e)try{e=require("fs")}catch(t){n=t.toString()}return{readFile:e?function(t){return new Promise(function(n,r){e.readFile(t,function(t,e){return t?r(t):n(e)})})}:function(){throw new Error("readFile - failed to require fs in nodejs environment with error: "+n)}}}function kf(){var t=global.Canvas||global.HTMLCanvasElement,e=global.Image||global.HTMLImageElement,n=global.fetch||function(){throw new Error("fetch - missing fetch implementation for nodejs environment")},r=Sf();return M({Canvas:t||function(){},CanvasRenderingContext2D:global.CanvasRenderingContext2D||function(){},Image:e||function(){},ImageData:global.ImageData||function(){},Video:global.HTMLVideoElement||function(){},createCanvasElement:function(){if(t)return new t;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},createImageElement:function(){if(e)return new e;throw new Error("createImageElement - missing Image implementation for nodejs environment")},fetch:n},r)}function Nf(){return"object"==typeof window&&"undefined"!=typeof document&&"undefined"!=typeof HTMLImageElement&&"undefined"!=typeof HTMLCanvasElement&&"undefined"!=typeof HTMLVideoElement&&"undefined"!=typeof ImageData&&"undefined"!=typeof CanvasRenderingContext2D}function Af(){return"object"==typeof global&&"function"==typeof require&&"undefined"!=typeof module&&"undefined"!=typeof process&&!!process.version}function Tf(t){Ef=t}function Df(){Nf()&&Tf(If()),Af()&&Tf(kf())}var Ff,Mf,Pf={getEnv:function(){if(!Ef)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return Ef},setEnv:Tf,initialize:Df,createBrowserEnv:If,createFileSystem:Sf,createNodejsEnv:kf,monkeyPatch:function(t){if(Ef||Df(),!Ef)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");var e=t.Canvas,n=void 0===e?Ef.Canvas:e,r=t.Image,o=void 0===r?Ef.Image:r;Ef.Canvas=n,Ef.Image=o,Ef.createCanvasElement=t.createCanvasElement||function(){return new n},Ef.createImageElement=t.createImageElement||function(){return new o},Ef.ImageData=t.ImageData||Ef.ImageData,Ef.Video=t.Video||Ef.Video,Ef.fetch=t.fetch||Ef.fetch,Ef.readFile=t.readFile||Ef.readFile},isBrowser:Nf,isNodejs:Af};function Of(t){return Pf.isNodejs()||"string"!=typeof t?t:document.getElementById(t)}function Bf(t){var e=Pf.getEnv(),n=e.Canvas;if(t instanceof e.CanvasRenderingContext2D)return t;var r=Of(t);if(!(r instanceof n))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");var o=r.getContext("2d");if(!o)throw new Error("resolveContext2d - canvas 2d context is null");return o}Df(),(Mf=Ff=Ff||{}).TOP_LEFT="TOP_LEFT",Mf.TOP_RIGHT="TOP_RIGHT",Mf.BOTTOM_LEFT="BOTTOM_LEFT",Mf.BOTTOM_RIGHT="BOTTOM_RIGHT";var Lf=function(t){void 0===t&&(t={});var e=t.anchorPosition,n=t.backgroundColor,r=t.fontColor,o=t.fontSize,i=t.fontStyle,a=t.padding;this.anchorPosition=e||Ff.TOP_LEFT,this.backgroundColor=n||"rgba(0, 0, 0, 0.5)",this.fontColor=r||"rgba(255, 255, 255, 1)",this.fontSize=o||14,this.fontStyle=i||"Georgia",this.padding=a||4},Wf=(zf.prototype.measureWidth=function(e){var t=this.options.padding;return this.text.map(function(t){return e.measureText(t).width}).reduce(function(t,e){return t<e?e:t},0)+2*t},zf.prototype.measureHeight=function(){var t=this.options,e=t.fontSize,n=t.padding;return this.text.length*e+2*n},zf.prototype.getUpperLeft=function(t,e){var n=this.options.anchorPosition,r=n===Ff.BOTTOM_RIGHT||n===Ff.TOP_RIGHT,o=n===Ff.BOTTOM_LEFT||n===Ff.BOTTOM_RIGHT,i=this.measureWidth(t),a=this.measureHeight(),s=r?this.anchor.x-i:this.anchor.x,u=o?this.anchor.y-a:this.anchor.y;if(e){var c=e.width,l=e.height;return{x:Math.max(Math.min(s,c-i),0),y:Math.max(Math.min(u,l-a),0)}}return{x:s,y:u}},zf.prototype.draw=function(t){var e=Of(t),o=Bf(e),n=this.options,r=n.backgroundColor,i=n.fontColor,a=n.fontSize,s=n.fontStyle,u=n.padding;o.font=a+"px "+s;var c=this.measureWidth(o),l=this.measureHeight();o.fillStyle=r;var h=this.getUpperLeft(o,e);o.fillRect(h.x,h.y,c,l),o.fillStyle=i,this.text.forEach(function(t,e){var n=u+h.x,r=u+h.y+(e+1)*a;o.fillText(t,n,r)})},zf);function zf(t,e,n){void 0===n&&(n={}),this.text="string"==typeof t?[t]:t instanceof zf?t.text:t,this.anchor=e,this.options=new Lf(n)}var Uf=function(t){void 0===t&&(t={});var e=t.boxColor,n=t.lineWidth,r=t.label,o=t.drawLabelOptions;this.boxColor=e||"rgba(0, 0, 255, 1)",this.lineWidth=n||2,this.label=r;var i={anchorPosition:Ff.BOTTOM_LEFT,backgroundColor:this.boxColor};this.drawLabelOptions=new Lf(Object.assign({},i,o))},Vf=(Gf.prototype.draw=function(t){var e=Bf(t),n=this.options,r=n.boxColor,o=n.lineWidth,i=this.box,a=i.x,s=i.y,u=i.width,c=i.height;e.strokeStyle=r,e.lineWidth=o,e.strokeRect(a,s,u,c);var l=this.options.label;l&&new Wf([l],{x:a-o/2,y:s},this.options.drawLabelOptions).draw(t)},Gf);function Gf(t,e){void 0===e&&(e={}),this.box=new cf(t),this.options=new Uf(e)}var Hf=Object.freeze({DrawBoxOptions:Uf,DrawBox:Vf,get AnchorPosition(){return Ff},DrawTextFieldOptions:Lf,DrawTextField:Wf});function jf(e,n,r,o){return void 0===r&&(r="same"),void 0===o&&(o=!1),Qe(function(){var t=du(rc(e,n.filters,[1,1],r),n.bias);return o?qc(t):t})}function qf(t,n){Object.keys(t).forEach(function(e){n.some(function(t){return t.originalPath===e})||t[e].dispose()})}function $f(a,s){return function(t,e,n,r){var o=Sn(a(t*e*n*n),[n,n,t,e]),i=_n(a(e));return s.push({paramPath:r+"/filters"},{paramPath:r+"/bias"}),{filters:o,bias:i}}}function Kf(i,a){return function(t,e,n){var r=Rn(i(t*e),[t,e]),o=_n(i(e));return a.push({paramPath:n+"/weights"},{paramPath:n+"/bias"}),{weights:r,bias:o}}}var Xf=function(t,e,n){this.depthwise_filter=t,this.pointwise_filter=e,this.bias=n};function Yf(a,s){return function(t,e,n){var r=Sn(a(9*t),[3,3,t,1]),o=Sn(a(t*e),[1,1,t,e]),i=_n(a(e));return s.push({paramPath:n+"/depthwise_filter"},{paramPath:n+"/pointwise_filter"},{paramPath:n+"/bias"}),new Xf(r,o,i)}}function Jf(o){return function(t){var e=o(t+"/depthwise_filter",4),n=o(t+"/pointwise_filter",4),r=o(t+"/bias",1);return new Xf(e,n,r)}}function Qf(o,i){return function(t,e,n){var r=o[t];if(!Xp(r,e))throw new Error("expected weightMap["+t+"] to be a Tensor"+e+"D, instead have "+r);return i.push({originalPath:t,paramPath:n||t}),r}}function Zf(t){var n=t;return{extractWeights:function(t){var e=n.slice(0,t);return n=n.slice(t),e},getRemainingWeights:function(){return n}}}function td(t,e){var n=e+"-weights_manifest.json";if(!t)return{modelBaseUri:"",manifestUri:n};if("/"===t)return{modelBaseUri:"/",manifestUri:"/"+n};var r=t.startsWith("http://")?"http://":t.startsWith("https://")?"https://":"",o=(t=t.replace(r,"")).split("/").filter(function(t){return t}),i=t.endsWith(".json")?o[o.length-1]:n,a=r+(t.endsWith(".json")?o.slice(0,o.length-1):o).join("/");return{modelBaseUri:a=t.startsWith("/")?"/"+a:a,manifestUri:"/"===a?"/"+i:a+"/"+i}}function ed(t){var e=Pf.getEnv(),n=e.Image,r=e.Video;return t instanceof n&&t.complete||t instanceof r&&3<=t.readyState}function nd(t){return new Promise(function(e,n){if(t instanceof Pf.getEnv().Canvas||ed(t))return e();function r(t){t.currentTarget&&(t.currentTarget.removeEventListener("load",r),t.currentTarget.removeEventListener("error",o),e(t))}function o(t){t.currentTarget&&(t.currentTarget.removeEventListener("load",r),t.currentTarget.removeEventListener("error",o),n(t))}t.addEventListener("load",r),t.addEventListener("error",o)})}function rd(t){return new Promise(function(e,n){if(!(t instanceof Blob))return n("bufferToImage - expected buf to be of type: Blob");var r=new FileReader;r.onload=function(){if("string"!=typeof r.result)return n("bufferToImage - expected reader.result to be a string, in onload");var t=Pf.getEnv().createImageElement();t.onload=function(){return e(t)},t.onerror=n,t.src=r.result},r.onerror=n,r.readAsDataURL(t)})}function od(t){var e=Pf.getEnv(),n=e.Image,r=e.Video;return t instanceof n?new jp(t.naturalWidth,t.naturalHeight):t instanceof r?new jp(t.videoWidth,t.videoHeight):new jp(t.width,t.height)}function id(t){var e=t.width,n=t.height,r=(0,Pf.getEnv().createCanvasElement)();return r.width=e,r.height=n,r}function ad(t,e){var n=Pf.getEnv().ImageData;if(!(t instanceof n||ed(t)))throw new Error("createCanvasFromMedia - media has not finished loading yet");var r=e||od(t),o=r.width,i=r.height,a=id({width:o,height:i});return t instanceof n?Bf(a).putImageData(t,0,0):Bf(a).drawImage(t,0,0,o,i),a}function sd(n,r){return p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return[4,(0,Pf.getEnv().fetch)(n,r)];case 1:if(!((e=t.sent()).status<400))throw new Error("failed to fetch: ("+e.status+") "+e.statusText+", from url: "+e.url);return[2,e]}})})}function ud(e){return p(this,void 0,void 0,function(){return P(this,function(t){switch(t.label){case 0:return[4,sd(e)];case 1:return[2,t.sent().json()]}})})}function cd(s,u){return p(this,void 0,void 0,function(){var e,n,r,o,i,a;return P(this,function(t){switch(t.label){case 0:return e=u||Pf.getEnv().createCanvasElement(),n=s.shape.slice(Qp(s)?1:0),r=n[0],o=n[1],i=n[2],a=Qe(function(){return s.as3D(r,o,i).toInt()}),[4,op.toPixels(a,e)];case 1:return t.sent(),a.dispose(),[2,e]}})})}function ld(t,e,n){void 0===n&&(n=!1);var r=Pf.getEnv(),o=r.Image,i=r.Canvas;if(!(t instanceof o||t instanceof i))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");var a=od(t),s=e/Math.max(a.height,a.width),u=s*a.width,c=s*a.height,l=id({width:e,height:e}),h=t instanceof i?t:ad(t),p=Math.abs(u-c)/2,f=n&&u<c?p:0,d=n&&c<u?p:0;return Bf(l).drawImage(h,f,d,u,c),l}function hd(t){var e=Pf.getEnv(),n=e.Image,r=e.Canvas,o=e.Video;return t instanceof n||t instanceof r||t instanceof o}function pd(i,a){return p(this,void 0,void 0,function(){var e,n,r,o;return P(this,function(t){switch(t.label){case 0:return e=td(i,a),n=e.manifestUri,r=e.modelBaseUri,[4,ud(n)];case 1:return o=t.sent(),[2,tp.loadWeights(o,r)]}})})}function fd(l,h){return void 0===h&&(h=!1),Qe(function(){var t=l.shape.slice(1),e=t[0],n=t[1];if(e===n)return l;function r(t){var e=l.shape.slice();return e[a]=t,Dn(e,0)}var o=Math.abs(e-n),i=Math.round(o*(h?.5:1)),a=n<e?2:1,s=r(i),u=o-s.shape[a],c=[h&&u?r(u):null,l,s].filter(function(t){return!!t}).map(function(t){return t.toFloat()});return Bn(c,a)})}var dd=(Object.defineProperty(vd.prototype,"imageTensors",{get:function(){return this._imageTensors},enumerable:!0,configurable:!0}),Object.defineProperty(vd.prototype,"canvases",{get:function(){return this._canvases},enumerable:!0,configurable:!0}),Object.defineProperty(vd.prototype,"isBatchInput",{get:function(){return 1<this.batchSize||this._treatAsBatchInput},enumerable:!0,configurable:!0}),Object.defineProperty(vd.prototype,"batchSize",{get:function(){return this._batchSize},enumerable:!0,configurable:!0}),Object.defineProperty(vd.prototype,"inputDimensions",{get:function(){return this._inputDimensions},enumerable:!0,configurable:!0}),Object.defineProperty(vd.prototype,"inputSize",{get:function(){return this._inputSize},enumerable:!0,configurable:!0}),Object.defineProperty(vd.prototype,"reshapedInputDimensions",{get:function(){var n=this;return af(this.batchSize,0,1).map(function(t,e){return n.getReshapedInputDimensions(e)})},enumerable:!0,configurable:!0}),vd.prototype.getInput=function(t){return this.canvases[t]||this.imageTensors[t]},vd.prototype.getInputDimensions=function(t){return this._inputDimensions[t]},vd.prototype.getInputHeight=function(t){return this._inputDimensions[t][0]},vd.prototype.getInputWidth=function(t){return this._inputDimensions[t][1]},vd.prototype.getReshapedInputDimensions=function(t){if("number"!=typeof this.inputSize)throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");return rf({width:this.getInputWidth(t),height:this.getInputHeight(t)},this.inputSize)},vd.prototype.toBatchTensor=function(r,o){var i=this;return void 0===o&&(o=!0),this._inputSize=r,Qe(function(){var t=af(i.batchSize,0,1).map(function(t){var e=i.getInput(t);if(e instanceof yt){var n=Qp(e)?e:e.expandDims();return(n=fd(n,o)).shape[1]===r&&n.shape[2]===r||(n=zl.resizeBilinear(n,[r,r])),n.as3D(r,r,3)}if(e instanceof Pf.getEnv().Canvas)return op.fromPixels(ld(e,r,o));throw new Error("toBatchTensor - at batchIdx "+t+", expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have "+e)});return kr(t.map(function(t){return t.toFloat()})).as4D(i.batchSize,r,r,3)})},vd);function vd(t,e){var o=this;if(void 0===e&&(e=!1),this._imageTensors=[],this._canvases=[],this._treatAsBatchInput=!1,this._inputDimensions=[],!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(function(t,e){if(Jp(t))return o._imageTensors[e]=t,void(o._inputDimensions[e]=t.shape);if(Qp(t)){var n=t.shape[0];if(1!==n)throw new Error("NetInput - tf.Tensor4D with batchSize "+n+" passed, but not supported in input array");return o._imageTensors[e]=t,void(o._inputDimensions[e]=t.shape.slice(1))}var r=t instanceof Pf.getEnv().Canvas?t:ad(t);o._canvases[e]=r,o._inputDimensions[e]=[r.height,r.width,3]})}function md(n){return p(this,void 0,void 0,function(){var r,o,e;return P(this,function(t){switch(t.label){case 0:if(n instanceof dd)return[2,n];if(!(r=Array.isArray(n)?n:[n]).length)throw new Error("toNetInput - empty array passed as input");return o=function(t){return Array.isArray(n)?" at input index "+t+":":""},(e=r.map(Of)).forEach(function(t,e){if(!hd(t)&&!Jp(t)&&!Qp(t)){if("string"==typeof r[e])throw new Error("toNetInput -"+o(e)+" string passed, but could not resolve HTMLElement for element id "+r[e]);throw new Error("toNetInput -"+o(e)+" expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id")}if(Qp(t)){var n=t.shape[0];if(1!==n)throw new Error("toNetInput -"+o(e)+" tf.Tensor4D with batchSize "+n+" passed, but not supported in input array")}}),[4,Promise.all(e.map(function(t){return hd(t)&&nd(t)}))];case 1:return t.sent(),[2,new dd(e,Array.isArray(n))]}})})}var gd=(Object.defineProperty(yd.prototype,"params",{get:function(){return this._params},enumerable:!0,configurable:!0}),Object.defineProperty(yd.prototype,"paramMappings",{get:function(){return this._paramMappings},enumerable:!0,configurable:!0}),Object.defineProperty(yd.prototype,"isLoaded",{get:function(){return!!this.params},enumerable:!0,configurable:!0}),yd.prototype.getParamFromPath=function(t){var e=this.traversePropertyPath(t);return e.obj[e.objProp]},yd.prototype.reassignParamFromPath=function(t,e){var n=this.traversePropertyPath(t),r=n.obj,o=n.objProp;r[o].dispose(),r[o]=e},yd.prototype.getParamList=function(){var n=this;return this._paramMappings.map(function(t){var e=t.paramPath;return{path:e,tensor:n.getParamFromPath(e)}})},yd.prototype.getTrainableParams=function(){return this.getParamList().filter(function(t){return t.tensor instanceof wt})},yd.prototype.getFrozenParams=function(){return this.getParamList().filter(function(t){return!(t.tensor instanceof wt)})},yd.prototype.variable=function(){var r=this;this.getFrozenParams().forEach(function(t){var e=t.path,n=t.tensor;r.reassignParamFromPath(e,n.variable())})},yd.prototype.freeze=function(){var o=this;this.getTrainableParams().forEach(function(t){var e=t.path,n=t.tensor,r=wn(n.dataSync());n.dispose(),o.reassignParamFromPath(e,r)})},yd.prototype.dispose=function(e){void 0===e&&(e=!0),this.getParamList().forEach(function(t){if(e&&t.tensor.isDisposed)throw new Error("param tensor has already been disposed for path "+t.path);t.tensor.dispose()}),this._params=void 0},yd.prototype.serializeParams=function(){return new Float32Array(this.getParamList().map(function(t){var e=t.tensor;return Array.from(e.dataSync())}).reduce(function(t,e){return t.concat(e)}))},yd.prototype.load=function(e){return p(this,void 0,void 0,function(){return P(this,function(t){switch(t.label){case 0:return e instanceof Float32Array?(this.extractWeights(e),[2]):[4,this.loadFromUri(e)];case 1:return t.sent(),[2]}})})},yd.prototype.loadFromUri=function(n){return p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:if(n&&"string"!=typeof n)throw new Error(this._name+".loadFromUri - expected model uri");return[4,pd(n,this.getDefaultModelName())];case 1:return e=t.sent(),this.loadFromWeightMap(e),[2]}})})},yd.prototype.loadFromDisk=function(h){return p(this,void 0,void 0,function(){var e,n,r,o,i,a,s,u,c,l;return P(this,function(t){switch(t.label){case 0:if(h&&"string"!=typeof h)throw new Error(this._name+".loadFromDisk - expected model file path");return e=Pf.getEnv().readFile,n=td(h,this.getDefaultModelName()),r=n.manifestUri,o=n.modelBaseUri,i=function(t){return Promise.all(t.map(function(t){return e(t).then(function(t){return t.buffer})}))},a=tp.weightsLoaderFactory(i),c=(u=JSON).parse,[4,e(r)];case 1:return s=c.apply(u,[t.sent().toString()]),[4,a(s,o)];case 2:return l=t.sent(),this.loadFromWeightMap(l),[2]}})})},yd.prototype.loadFromWeightMap=function(t){var e=this.extractParamsFromWeigthMap(t),n=e.paramMappings,r=e.params;this._paramMappings=n,this._params=r},yd.prototype.extractWeights=function(t){var e=this.extractParams(t),n=e.paramMappings,r=e.params;this._paramMappings=n,this._params=r},yd.prototype.traversePropertyPath=function(n){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");var t=n.split("/").reduce(function(t,e){if(!t.nextObj.hasOwnProperty(e))throw new Error("traversePropertyPath - object does not have property "+e+", for path "+n);return{obj:t.nextObj,objProp:e,nextObj:t.nextObj[e]}},{nextObj:this.params}),e=t.obj,r=t.objProp;if(!(e&&r&&e[r]instanceof yt))throw new Error("traversePropertyPath - parameter is not a tensor, for path "+n);return{obj:e,objProp:r}},yd);function yd(t){this._name=t,this._params=void 0,this._paramMappings=[]}function xd(t,e,n){void 0===n&&(n=!0);var r=Math.max(0,Math.min(t.right,e.right)-Math.max(t.left,e.left))*Math.max(0,Math.min(t.bottom,e.bottom)-Math.max(t.top,e.top));return n?r/(t.area+e.area-r):r/Math.min(t.area,e.area)}function bd(s,t,u,c){void 0===c&&(c=!0);for(var l=t.map(function(t,e){return{score:t,boxIndex:e}}).sort(function(t,e){return t.score-e.score}).map(function(t){return t.boxIndex}),h=[],e=function(){var t=l.pop();h.push(t);for(var e=l,n=[],r=0;r<e.length;r++){var o=e[r],i=s[t],a=s[o];n.push(xd(i,a,c))}l=l.filter(function(t,e){return n[e]<=u})};0<l.length;)e();return h}function wd(s,u){return Qe(function(){var t=u[0],e=u[1],n=u[2],r=Dn(l(s.shape.slice(0,3),[1]),t),o=Dn(l(s.shape.slice(0,3),[1]),e),i=Dn(l(s.shape.slice(0,3),[1]),n),a=Bn([r,o,i],3);return Fu(s,a)})}function Cd(t){return 1/(1+Math.exp(-t))}var Ed,_d,Rd=function(t){return"number"==typeof t};function Id(t){if(!t)throw new Error("invalid config: "+t);if("boolean"!=typeof t.withSeparableConvs)throw new Error("config.withSeparableConvs has to be a boolean, have: "+t.withSeparableConvs);if(!Rd(t.iouThreshold)||t.iouThreshold<0||1<t.iouThreshold)throw new Error("config.iouThreshold has to be a number between [0, 1], have: "+t.iouThreshold);if(!Array.isArray(t.classes)||!t.classes.length||!t.classes.every(function(t){return"string"==typeof t}))throw new Error("config.classes has to be an array class names: string[], have: "+JSON.stringify(t.classes));if(!Array.isArray(t.anchors)||!t.anchors.length||!t.anchors.map(function(t){return t||{}}).every(function(t){return Rd(t.x)&&Rd(t.y)}))throw new Error("config.anchors has to be an array of { x: number, y: number }, have: "+JSON.stringify(t.anchors));if(t.meanRgb&&(!Array.isArray(t.meanRgb)||3!==t.meanRgb.length||!t.meanRgb.every(Rd)))throw new Error("config.meanRgb has to be an array of shape [number, number, number], have: "+JSON.stringify(t.meanRgb))}function Sd(e){return Qe(function(){var t=Su(e,En(.10000000149011612));return du(qc(Fu(e,t)),t)})}function kd(e,n){return Qe(function(){var t=mr(e,[[0,0],[1,1],[1,1],[0,0]]);return t=rc(t,n.conv.filters,[1,1],"valid"),t=Fu(t,n.bn.sub),t=Su(t,n.bn.truediv),Sd(t=du(t,n.conv.bias))})}function Nd(e,n){return Qe(function(){var t=mr(e,[[0,0],[1,1],[1,1],[0,0]]);return t=uc(t,n.depthwise_filter,n.pointwise_filter,[1,1],"valid"),Sd(t=du(t,n.bias))})}function Ad(o,i){var r=$f(o,i);var t=Yf(o,i);return{extractConvParams:r,extractConvWithBatchNormParams:function(t,e,n){return{conv:r(t,e,3,n+"/conv"),bn:function(t,e){var n=_n(o(t)),r=_n(o(t));return i.push({paramPath:e+"/sub"},{paramPath:e+"/truediv"}),{sub:n,truediv:r}}(e,n+"/bn")}},extractSeparableConvParams:t}}function Td(t,e){var n=Qf(t,e);function r(t){return{filters:n(t+"/filters",4),bias:n(t+"/bias",1)}}return{extractConvParams:r,extractConvWithBatchNormParams:function(t){return{conv:r(t+"/conv"),bn:function(t){return{sub:n(t+"/sub",1),truediv:n(t+"/truediv",1)}}(t+"/bn")}},extractSeparableConvParams:Jf(n)}}(_d=Ed=Ed||{})[_d.XS=224]="XS",_d[_d.SM=320]="SM",_d[_d.MD=416]="MD",_d[_d.LG=608]="LG";var Dd=(Object.defineProperty(Fd.prototype,"inputSize",{get:function(){return this._inputSize},enumerable:!0,configurable:!0}),Object.defineProperty(Fd.prototype,"scoreThreshold",{get:function(){return this._scoreThreshold},enumerable:!0,configurable:!0}),Fd);function Fd(t){var e=void 0===t?{}:t,n=e.inputSize,r=e.scoreThreshold;if(this._name="TinyYolov2Options",this._inputSize=n||416,this._scoreThreshold=r||.5,"number"!=typeof this._inputSize||this._inputSize%32!=0)throw new Error(this._name+" - expected inputSize to be a number divisible by 32");if("number"!=typeof this._scoreThreshold||this._scoreThreshold<=0||1<=this._scoreThreshold)throw new Error(this._name+" - expected scoreThreshold to be a number between 0 and 1")}var Md,Pd=(t(Od,Md=gd),Object.defineProperty(Od.prototype,"config",{get:function(){return this._config},enumerable:!0,configurable:!0}),Object.defineProperty(Od.prototype,"withClassScores",{get:function(){return this.config.withClassScores||1<this.config.classes.length},enumerable:!0,configurable:!0}),Object.defineProperty(Od.prototype,"boxEncodingSize",{get:function(){return 5+(this.withClassScores?this.config.classes.length:0)},enumerable:!0,configurable:!0}),Od.prototype.runTinyYolov2=function(t,e){var n=kd(t,e.conv0);return n=kd(n=wc(n,[2,2],[2,2],"same"),e.conv1),n=kd(n=wc(n,[2,2],[2,2],"same"),e.conv2),n=kd(n=wc(n,[2,2],[2,2],"same"),e.conv3),n=kd(n=wc(n,[2,2],[2,2],"same"),e.conv4),n=kd(n=wc(n,[2,2],[2,2],"same"),e.conv5),jf(n=kd(n=kd(n=wc(n,[2,2],[1,1],"same"),e.conv6),e.conv7),e.conv8,"valid",!1)},Od.prototype.runMobilenet=function(t,e){var n=this.config.isFirstLayerConv2d?Sd(jf(t,e.conv0,"valid",!1)):Nd(t,e.conv0);return n=Nd(n=wc(n,[2,2],[2,2],"same"),e.conv1),n=Nd(n=wc(n,[2,2],[2,2],"same"),e.conv2),n=Nd(n=wc(n,[2,2],[2,2],"same"),e.conv3),n=Nd(n=wc(n,[2,2],[2,2],"same"),e.conv4),n=Nd(n=wc(n,[2,2],[2,2],"same"),e.conv5),n=wc(n,[2,2],[1,1],"same"),n=e.conv6?Nd(n,e.conv6):n,jf(n=e.conv7?Nd(n,e.conv7):n,e.conv8,"valid",!1)},Od.prototype.forwardInput=function(e,n){var r=this,o=this.params;if(!o)throw new Error("TinyYolov2 - load model before inference");return Qe(function(){var t=e.toBatchTensor(n,!1).toFloat();return t=(t=r.config.meanRgb?wd(t,r.config.meanRgb):t).div(En(256)),r.config.withSeparableConvs?r.runMobilenet(t,o):r.runTinyYolov2(t,o)})},Od.prototype.forward=function(n,r){return p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return e=this.forwardInput,[4,md(n)];case 1:return[4,e.apply(this,[t.sent(),r])];case 2:return[2,t.sent()]}})})},Od.prototype.detect=function(d,v){return void 0===v&&(v={}),p(this,void 0,void 0,function(){var e,n,r,o,i,a,s,u,c,l,h,p,f=this;return P(this,function(t){switch(t.label){case 0:return e=new Dd(v),n=e.inputSize,r=e.scoreThreshold,[4,md(d)];case 1:return o=t.sent(),[4,this.forwardInput(o,n)];case 2:return i=t.sent(),a=Qe(function(){return Tr(i)[0].expandDims()}),s={width:o.getInputWidth(0),height:o.getInputHeight(0)},[4,this.extractBoxes(a,o.getReshapedInputDimensions(0),r)];case 3:return u=t.sent(),i.dispose(),a.dispose(),c=u.map(function(t){return t.box}),l=u.map(function(t){return t.score}),h=u.map(function(t){return t.classScore}),p=u.map(function(t){return f.config.classes[t.label]}),[2,bd(c.map(function(t){return t.rescale(n)}),l,this.config.iouThreshold,!0).map(function(t){return new gf(l[t],h[t],p[t],c[t],s)})]}})})},Od.prototype.getDefaultModelName=function(){return""},Od.prototype.extractParamsFromWeigthMap=function(t){return function(t,e){var n,r=[],o=Td(t,r),i=o.extractConvParams,a=o.extractConvWithBatchNormParams,s=o.extractSeparableConvParams;if(e.withSeparableConvs){var u=e.filterSizes&&e.filterSizes.length||9;n={conv0:e.isFirstLayerConv2d?i("conv0"):s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:7<u?s("conv6"):void 0,conv7:8<u?s("conv7"):void 0,conv8:i("conv8")}}else n={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:i("conv8")};return qf(t,r),{params:n,paramMappings:r}}(t,this.config)},Od.prototype.extractParams=function(t){var e=this.config.filterSizes||Od.DEFAULT_FILTER_SIZES,n=e?e.length:void 0;if(7!==n&&8!==n&&9!==n)throw new Error("TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found "+n+" filterSizes in config");return function(t,e,n,r){var o,i=Zf(t),a=i.extractWeights,s=i.getRemainingWeights,u=[],c=Ad(a,u),l=c.extractConvParams,h=c.extractConvWithBatchNormParams,p=c.extractSeparableConvParams;if(e.withSeparableConvs){var f=r[0],d=r[1],v=r[2],m=r[3],g=r[4],y=r[5],x=r[6],b=r[7],w=r[8];o={conv0:e.isFirstLayerConv2d?l(f,d,3,"conv0"):p(f,d,"conv0"),conv1:p(d,v,"conv1"),conv2:p(v,m,"conv2"),conv3:p(m,g,"conv3"),conv4:p(g,y,"conv4"),conv5:p(y,x,"conv5"),conv6:b?p(x,b,"conv6"):void 0,conv7:w?p(b,w,"conv7"):void 0,conv8:l(w||b||x,5*n,1,"conv8")}}else f=r[0],d=r[1],v=r[2],m=r[3],g=r[4],y=r[5],x=r[6],b=r[7],w=r[8],o={conv0:h(f,d,"conv0"),conv1:h(d,v,"conv1"),conv2:h(v,m,"conv2"),conv3:h(m,g,"conv3"),conv4:h(g,y,"conv4"),conv5:h(y,x,"conv5"),conv6:h(x,b,"conv6"),conv7:h(b,w,"conv7"),conv8:l(w,5*n,1,"conv8")};if(0!==s().length)throw new Error("weights remaing after extract: "+s().length);return{params:o,paramMappings:u}}(t,this.config,this.boxEncodingSize,e)},Od.prototype.extractBoxes=function(T,D,F){return p(this,void 0,void 0,function(){var e,n,r,o,i,a,s,u,c,l,h,p,f,d,v,m,g,y,x,b,w,C,E,_,R,I,S,k,N,A=this;return P(this,function(t){switch(t.label){case 0:return e=D.width,n=D.height,r=Math.max(e,n),o=r/e,i=r/n,a=T.shape[1],s=this.config.anchors.length,u=Qe(function(){var t=T.reshape([a,a,s,A.boxEncodingSize]);return[t.slice([0,0,0,0],[a,a,s,4]),t.slice([0,0,0,4],[a,a,s,1]),A.withClassScores?Xr(t.slice([0,0,0,5],[a,a,s,A.config.classes.length]),3):En(0)]}),c=u[0],l=u[1],h=u[2],p=[],[4,l.array()];case 1:return f=t.sent(),[4,c.array()];case 2:d=t.sent(),v=0,t.label=3;case 3:if(!(v<a))return[3,12];m=0,t.label=4;case 4:if(!(m<a))return[3,11];g=0,t.label=5;case 5:return g<s?(y=Cd(f[v][m][g][0]),!F||F<y?(x=(m+Cd(d[v][m][g][0]))/a*o,b=(v+Cd(d[v][m][g][1]))/a*i,w=Math.exp(d[v][m][g][2])*this.config.anchors[g].x/a*o,C=Math.exp(d[v][m][g][3])*this.config.anchors[g].y/a*i,E=x-w/2,_=b-C/2,R={row:v,col:m,anchor:g},this.withClassScores?[4,this.extractPredictedClass(h,R)]:[3,7]):[3,9]):[3,10];case 6:return N=t.sent(),[3,8];case 7:N={classScore:1,label:0},t.label=8;case 8:S=(I=N).classScore,k=I.label,p.push(M({box:new pf(E,_,E+w,_+C),score:y,classScore:y*S,label:k},R)),t.label=9;case 9:return g++,[3,5];case 10:return m++,[3,4];case 11:return v++,[3,3];case 12:return c.dispose(),l.dispose(),h.dispose(),[2,p]}})})},Od.prototype.extractPredictedClass=function(e,a){return p(this,void 0,void 0,function(){var n,r,o,i;return P(this,function(t){switch(t.label){case 0:return n=a.row,r=a.col,o=a.anchor,[4,e.array()];case 1:return i=t.sent(),[2,Array(this.config.classes.length).fill(0).map(function(t,e){return i[n][r][o][e]}).map(function(t,e){return{classScore:t,label:e}}).reduce(function(t,e){return t.classScore>e.classScore?t:e})]}})})},Od.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024],Od);function Od(t){var e=Md.call(this,"TinyYolov2")||this;return Id(t),e._config=t,e}var Bd=Object.freeze({convLayer:jf,disposeUnusedWeightTensors:qf,extractConvParamsFactory:$f,extractFCParamsFactory:Kf,extractSeparableConvParamsFactory:Yf,loadSeparableConvParamsFactory:Jf,extractWeightEntryFactory:Qf,extractWeightsFactory:Zf,getModelUris:td,SeparableConvParams:Xf,TinyYolov2:Pd,get TinyYolov2SizeType(){return Ed},TinyYolov2Options:Dd,validateConfig:Id});function Ld(i,a,t){if(void 0===t&&(t=!1),i.beginPath(),a.slice(1).forEach(function(t,e){var n=t.x,r=t.y,o=a[e];i.moveTo(o.x,o.y),i.lineTo(n,r)}),t){var e=a[a.length-1],n=a[0];if(!e||!n)return;i.moveTo(e.x,e.y),i.lineTo(n.x,n.y)}i.stroke()}var Wd,zd=(t(Ud,Wd=gf),Ud.prototype.forSize=function(t,e){var n=Wd.prototype.forSize.call(this,t,e);return new Ud(n.score,n.relativeBox,n.imageDims)},Ud);function Ud(t,e,n){return Wd.call(this,t,t,"",e,n)||this}function Vd(t){return t.detection instanceof zd}function Gd(t,e){var n={detection:e};return Object.assign({},t,n)}function Hd(e,n,r){return Qe(function(){var t=uc(e,n.depthwise_filter,n.pointwise_filter,r,"same");return t=du(t,n.bias)})}function jd(r,o,i){return void 0===i&&(i=!1),Qe(function(){var t=qc(i?du(rc(r,o.conv0.filters,[2,2],"same"),o.conv0.bias):Hd(r,o.conv0,[2,2])),e=Hd(t,o.conv1,[1,1]),n=Hd(qc(du(t,e)),o.conv2,[1,1]);return qc(du(t,du(e,n)))})}function qd(o,i,a,s){return void 0===a&&(a=!1),void 0===s&&(s=!0),Qe(function(){var t=qc(a?du(rc(o,i.conv0.filters,s?[2,2]:[1,1],"same"),i.conv0.bias):Hd(o,i.conv0,s?[2,2]:[1,1])),e=Hd(t,i.conv1,[1,1]),n=Hd(qc(du(t,e)),i.conv2,[1,1]),r=Hd(qc(du(t,du(e,n))),i.conv3,[1,1]);return qc(du(t,du(e,du(n,r))))})}function $d(t,e){var o=$f(t,e),i=Yf(t,e);function a(t,e,n,r){return void 0===r&&(r=!1),{conv0:r?o(t,e,3,n+"/conv0"):i(t,e,n+"/conv0"),conv1:i(e,e,n+"/conv1"),conv2:i(e,e,n+"/conv2")}}return{extractDenseBlock3Params:a,extractDenseBlock4Params:function(t,e,n,r){void 0===r&&(r=!1);var o=a(t,e,n,r);return{conv0:o.conv0,conv1:o.conv1,conv2:o.conv2,conv3:i(e,e,n+"/conv3")}}}}function Kd(e){return function(t){return{filters:e(t+"/filters",4),bias:e(t+"/bias",1)}}}function Xd(t,e){var n=Qf(t,e),r=Kd(n),o=Jf(n);return{extractDenseBlock3Params:function(t,e){return void 0===e&&(e=!1),{conv0:e?r(t+"/conv0"):o(t+"/conv0"),conv1:o(t+"/conv1"),conv2:o(t+"/conv2")}},extractDenseBlock4Params:function(t,e){return void 0===e&&(e=!1),{conv0:e?r(t+"/conv0"):o(t+"/conv0"),conv1:o(t+"/conv1"),conv2:o(t+"/conv2"),conv3:o(t+"/conv3")}}}}var Yd,Jd=(t(Qd,Yd=gd),Qd.prototype.forwardInput=function(e){var n=this.params;if(!n)throw new Error("FaceFeatureExtractor - load model before inference");return Qe(function(){var t=qd(wd(e.toBatchTensor(112,!0),[122.782,117.001,104.298]).div(En(255)),n.dense0,!0);return t=qd(t=qd(t=qd(t,n.dense1),n.dense2),n.dense3),t=Cc(t,[7,7],[2,2],"valid")})},Qd.prototype.forward=function(n){return p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return e=this.forwardInput,[4,md(n)];case 1:return[2,e.apply(this,[t.sent()])]}})})},Qd.prototype.getDefaultModelName=function(){return"face_feature_extractor_model"},Qd.prototype.extractParamsFromWeigthMap=function(t){return function(t){var e=[],n=Xd(t,e).extractDenseBlock4Params,r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2"),dense3:n("dense3")};return qf(t,e),{params:r,paramMappings:e}}(t)},Qd.prototype.extractParams=function(t){return function(t){var e=[],n=Zf(t),r=n.extractWeights,o=n.getRemainingWeights,i=$d(r,e).extractDenseBlock4Params,a=i(3,32,"dense0",!0),s=i(32,64,"dense1"),u=i(64,128,"dense2"),c=i(128,256,"dense3");if(0!==o().length)throw new Error("weights remaing after extract: "+o().length);return{paramMappings:e,params:{dense0:a,dense1:s,dense2:u,dense3:c}}}(t)},Qd);function Qd(){return Yd.call(this,"FaceFeatureExtractor")||this}function Zd(t,e){return Qe(function(){return du(hc(t,e.weights),e.bias)})}function tv(e){var n={},r={};return Object.keys(e).forEach(function(t){(t.startsWith("fc")?r:n)[t]=e[t]}),{featureExtractorMap:n,classifierMap:r}}var ev,nv=(t(rv,ev=gd),Object.defineProperty(rv.prototype,"faceFeatureExtractor",{get:function(){return this._faceFeatureExtractor},enumerable:!0,configurable:!0}),rv.prototype.runNet=function(e){var n=this,r=this.params;if(!r)throw new Error(this._name+" - load model before inference");return Qe(function(){var t=e instanceof dd?n.faceFeatureExtractor.forwardInput(e):e;return Zd(t.as2D(t.shape[0],-1),r.fc)})},rv.prototype.dispose=function(t){void 0===t&&(t=!0),this.faceFeatureExtractor.dispose(t),ev.prototype.dispose.call(this,t)},rv.prototype.loadClassifierParams=function(t){var e=this.extractClassifierParams(t),n=e.params,r=e.paramMappings;this._params=n,this._paramMappings=r},rv.prototype.extractClassifierParams=function(t){return function(t,e,n){var r=[],o=Zf(t),i=o.extractWeights,a=o.getRemainingWeights,s=Kf(i,r)(e,n,"fc");if(0!==a().length)throw new Error("weights remaing after extract: "+a().length);return{paramMappings:r,params:{fc:s}}}(t,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())},rv.prototype.extractParamsFromWeigthMap=function(t){var e=tv(t),n=e.featureExtractorMap,r=e.classifierMap;return this.faceFeatureExtractor.loadFromWeightMap(n),function(t){var e,n=[],r=Qf(t,n),o={fc:(e="fc",{weights:r(e+"/weights",2),bias:r(e+"/bias",1)})};return qf(t,n),{params:o,paramMappings:n}}(r)},rv.prototype.extractParams=function(t){var e=this.getClassifierChannelsIn(),n=this.getClassifierChannelsOut(),r=n*e+n,o=t.slice(0,t.length-r),i=t.slice(t.length-r);return this.faceFeatureExtractor.extractWeights(o),this.extractClassifierParams(i)},rv);function rv(t,e){var n=ev.call(this,t)||this;return n._faceFeatureExtractor=e,n}var ov=["neutral","happy","sad","angry","fearful","disgusted","surprised"],iv=(av.prototype.asSortedArray=function(){var e=this;return ov.map(function(t){return{expression:t,probability:e[t]}}).sort(function(t,e){return e.probability-t.probability})},av);function av(n){var r=this;if(7!==n.length)throw new Error("FaceExpressions.constructor - expected probabilities.length to be 7, have: "+n.length);ov.forEach(function(t,e){r[t]=n[e]})}var sv,uv=(t(cv,sv=nv),cv.prototype.forwardInput=function(t){var e=this;return Qe(function(){return Xr(e.runNet(t))})},cv.prototype.forward=function(n){return p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return e=this.forwardInput,[4,md(n)];case 1:return[2,e.apply(this,[t.sent()])]}})})},cv.prototype.predictExpressions=function(a){return p(this,void 0,void 0,function(){var e,n,r,o,i=this;return P(this,function(t){switch(t.label){case 0:return[4,md(a)];case 1:return e=t.sent(),[4,this.forwardInput(e)];case 2:return n=t.sent(),[4,Promise.all(Tr(n).map(function(n){return p(i,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return[4,n.data()];case 1:return e=t.sent(),n.dispose(),[2,e]}})})}))];case 3:return r=t.sent(),n.dispose(),o=r.map(function(t){return new iv(t)}),[2,e.isBatchInput?o:o[0]]}})})},cv.prototype.getDefaultModelName=function(){return"face_expression_model"},cv.prototype.getClassifierChannelsIn=function(){return 256},cv.prototype.getClassifierChannelsOut=function(){return 7},cv);function cv(t){return void 0===t&&(t=new Jd),sv.call(this,"FaceExpressionNet",t)||this}function lv(t){return t.expressions instanceof iv}function hv(t,e){var n={expressions:e};return Object.assign({},t,n)}var pv=(Object.defineProperty(fv.prototype,"shift",{get:function(){return new $p(this._shift.x,this._shift.y)},enumerable:!0,configurable:!0}),Object.defineProperty(fv.prototype,"imageWidth",{get:function(){return this._imgDims.width},enumerable:!0,configurable:!0}),Object.defineProperty(fv.prototype,"imageHeight",{get:function(){return this._imgDims.height},enumerable:!0,configurable:!0}),Object.defineProperty(fv.prototype,"positions",{get:function(){return this._positions},enumerable:!0,configurable:!0}),Object.defineProperty(fv.prototype,"relativePositions",{get:function(){var e=this;return this._positions.map(function(t){return t.sub(e._shift).div(new $p(e.imageWidth,e.imageHeight))})},enumerable:!0,configurable:!0}),fv.prototype.forSize=function(t,e){return new this.constructor(this.relativePositions,{width:t,height:e})},fv.prototype.shiftBy=function(t,e){return new this.constructor(this.relativePositions,this._imgDims,new $p(t,e))},fv.prototype.shiftByPoint=function(t){return this.shiftBy(t.x,t.y)},fv.prototype.align=function(t,e){if(void 0===e&&(e={}),t){var n=t instanceof zd?t.box.floor():new cf(t);return this.shiftBy(n.x,n.y).align(null,e)}var r=Object.assign({},{useDlibAlignment:!1,minBoxPadding:.2},e),o=r.useDlibAlignment,i=r.minBoxPadding;return o?this.alignDlib():this.alignMinBbox(i)},fv.prototype.alignDlib=function(){function t(t){return o.sub(t).magnitude()}var e=this.getRefPointsForAlignment(),n=e[0],r=e[1],o=e[2],i=(t(n)+t(r))/2,a=Math.floor(i/.45),s=of(e),u=Math.floor(Math.max(0,s.x-.5*a)),c=Math.floor(Math.max(0,s.y-.43*a));return new _f(u,c,Math.min(a,this.imageWidth+u),Math.min(a,this.imageHeight+c))},fv.prototype.alignMinBbox=function(t){var e=function(t){var e=t.map(function(t){return t.x}),n=t.map(function(t){return t.y}),r=e.reduce(function(t,e){return e<t?e:t},1/0),o=n.reduce(function(t,e){return e<t?e:t},1/0),i=e.reduce(function(t,e){return t<e?e:t},0),a=n.reduce(function(t,e){return t<e?e:t},0);return new pf(r,o,i,a)}(this.positions);return e.pad(e.width*t,e.height*t)},fv.prototype.getRefPointsForAlignment=function(){throw new Error("getRefPointsForAlignment not implemented by base class")},fv);function fv(t,e,n){void 0===n&&(n=new $p(0,0));var r=e.width,o=e.height;this._imgDims=new jp(r,o),this._shift=n,this._positions=t.map(function(t){return t.mul(new $p(r,o)).add(n)})}var dv,vv=(t(mv,dv=pv),mv.prototype.getJawOutline=function(){return this.positions.slice(0,17)},mv.prototype.getLeftEyeBrow=function(){return this.positions.slice(17,22)},mv.prototype.getRightEyeBrow=function(){return this.positions.slice(22,27)},mv.prototype.getNose=function(){return this.positions.slice(27,36)},mv.prototype.getLeftEye=function(){return this.positions.slice(36,42)},mv.prototype.getRightEye=function(){return this.positions.slice(42,48)},mv.prototype.getMouth=function(){return this.positions.slice(48,68)},mv.prototype.getRefPointsForAlignment=function(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(of)},mv);function mv(){return null!==dv&&dv.apply(this,arguments)||this}function gv(t){return Vd(t)&&t.landmarks instanceof pv&&t.unshiftedLandmarks instanceof pv&&t.alignedRect instanceof zd}function yv(t,e){var n=t.detection.box,r=e.shiftBy(n.x,n.y),o=r.align(),i=t.detection.imageDims,a={landmarks:r,unshiftedLandmarks:e,alignedRect:new zd(t.detection.score,o.rescale(i.reverse()),i)};return Object.assign({},t,a)}var xv=function(t){void 0===t&&(t={});var e=t.drawLines,n=void 0===e||e,r=t.drawPoints,o=void 0===r||r,i=t.lineWidth,a=t.lineColor,s=t.pointSize,u=t.pointColor;this.drawLines=n,this.drawPoints=o,this.lineWidth=i||1,this.pointSize=s||2,this.lineColor=a||"rgba(0, 255, 255, 1)",this.pointColor=u||"rgba(255, 0, 255, 1)"},bv=(wv.prototype.draw=function(t){var e=Bf(t),n=this.options,r=n.drawLines,o=n.drawPoints,i=n.lineWidth,a=n.lineColor,s=n.pointSize,u=n.pointColor;r&&this.faceLandmarks instanceof vv&&(e.strokeStyle=a,e.lineWidth=i,Ld(e,this.faceLandmarks.getJawOutline()),Ld(e,this.faceLandmarks.getLeftEyeBrow()),Ld(e,this.faceLandmarks.getRightEyeBrow()),Ld(e,this.faceLandmarks.getNose()),Ld(e,this.faceLandmarks.getLeftEye(),!0),Ld(e,this.faceLandmarks.getRightEye(),!0),Ld(e,this.faceLandmarks.getMouth(),!0)),o&&(e.strokeStyle=u,e.fillStyle=u,this.faceLandmarks.positions.forEach(function(t){e.beginPath(),e.arc(t.x,t.y,s,0,2*Math.PI),e.fill()}))},wv);function wv(t,e){void 0===e&&(e={}),this.faceLandmarks=t,this.options=new xv(e)}var Cv=Object.freeze({drawContour:Ld,drawDetections:function(o,t){(Array.isArray(t)?t:[t]).forEach(function(t){var e=t instanceof zd?t.score:Vd(t)?t.detection.score:void 0,n=t instanceof zd?t.box:Vd(t)?t.detection.box:new cf(t),r=e?""+ef(e):void 0;new Vf(n,{label:r}).draw(o)})},drawFaceExpressions:function(o,t,i,a){void 0===i&&(i=.1),(Array.isArray(t)?t:[t]).forEach(function(t){var e=t instanceof iv?t:lv(t)?t.expressions:void 0;if(!e)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");var n=e.asSortedArray().filter(function(t){return t.probability>i}),r=Vd(t)?t.detection.box.bottomLeft:a||new $p(0,0);new Wf(n.map(function(t){return t.expression+" ("+ef(t.probability)+")"}),r).draw(o)})},DrawFaceLandmarksOptions:xv,DrawFaceLandmarks:bv,drawFaceLandmarks:function(n,t){(Array.isArray(t)?t:[t]).forEach(function(t){var e=t instanceof pv?t:gv(t)?t.landmarks:void 0;if(!e)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks<WithFaceDetection<{}>> or array thereof");new bv(e).draw(n)})}});function Ev(t,e){var n=[],r=Zf(t),o=r.extractWeights,i=r.getRemainingWeights,a=function(t,e){var r=$f(t,e),o=Yf(t,e);return{extractConvParams:r,extractSeparableConvParams:o,extractReductionBlockParams:function(t,e,n){return{separable_conv0:o(t,e,n+"/separable_conv0"),separable_conv1:o(e,e,n+"/separable_conv1"),expansion_conv:r(t,e,1,n+"/expansion_conv")}},extractMainBlockParams:function(t,e){return{separable_conv0:o(t,t,e+"/separable_conv0"),separable_conv1:o(t,t,e+"/separable_conv1"),separable_conv2:o(t,t,e+"/separable_conv2")}}}}(o,n),s=a.extractConvParams,u=a.extractSeparableConvParams,c=a.extractReductionBlockParams,l=a.extractMainBlockParams,h={conv_in:s(3,32,3,"entry_flow/conv_in"),reduction_block_0:c(32,64,"entry_flow/reduction_block_0"),reduction_block_1:c(64,128,"entry_flow/reduction_block_1")},p={};af(e,0,1).forEach(function(t){p["main_block_"+t]=l(128,"middle_flow/main_block_"+t)});var f={reduction_block:c(128,256,"exit_flow/reduction_block"),separable_conv:u(256,512,"exit_flow/separable_conv")};if(0!==i().length)throw new Error("weights remaing after extract: "+i().length);return{paramMappings:n,params:{entry_flow:h,middle_flow:p,exit_flow:f}}}function _v(t,e){var n=[],r=function(t,e){var n=Qf(t,e),r=Kd(n),o=Jf(n);return{extractConvParams:r,extractSeparableConvParams:o,extractReductionBlockParams:function(t){return{separable_conv0:o(t+"/separable_conv0"),separable_conv1:o(t+"/separable_conv1"),expansion_conv:r(t+"/expansion_conv")}},extractMainBlockParams:function(t){return{separable_conv0:o(t+"/separable_conv0"),separable_conv1:o(t+"/separable_conv1"),separable_conv2:o(t+"/separable_conv2")}}}}(t,n),o=r.extractConvParams,i=r.extractSeparableConvParams,a=r.extractReductionBlockParams,s=r.extractMainBlockParams,u={conv_in:o("entry_flow/conv_in"),reduction_block_0:a("entry_flow/reduction_block_0"),reduction_block_1:a("entry_flow/reduction_block_1")},c={};af(e,0,1).forEach(function(t){c["main_block_"+t]=s("middle_flow/main_block_"+t)});var l={reduction_block:a("exit_flow/reduction_block"),separable_conv:i("exit_flow/separable_conv")};return qf(t,n),{params:{entry_flow:u,middle_flow:c,exit_flow:l},paramMappings:n}}function Rv(t,e,n){return du(rc(t,e.filters,n,"same"),e.bias)}function Iv(t,e,n){void 0===n&&(n=!0);var r=n?qc(t):t;return r=Hd(r,e.separable_conv0,[1,1]),r=Hd(qc(r),e.separable_conv1,[1,1]),r=wc(r,[3,3],[2,2],"same"),r=du(r,Rv(t,e.expansion_conv,[2,2]))}var Sv,kv,Nv=(t(Av,Sv=gd),Av.prototype.forwardInput=function(n){var r=this,o=this.params;if(!o)throw new Error("TinyXception - load model before inference");return Qe(function(){var t=wd(n.toBatchTensor(112,!0),[122.782,117.001,104.298]).div(En(256)),e=qc(Rv(t,o.entry_flow.conv_in,[2,2]));return e=Iv(e=Iv(e,o.entry_flow.reduction_block_0,!1),o.entry_flow.reduction_block_1),af(r._numMainBlocks,0,1).forEach(function(t){e=function(t,e){var n=Hd(qc(t),e.separable_conv0,[1,1]);return n=Hd(qc(n),e.separable_conv1,[1,1]),n=Hd(qc(n),e.separable_conv2,[1,1]),n=du(n,t)}(e,o.middle_flow["main_block_"+t])}),e=Iv(e,o.exit_flow.reduction_block),e=qc(Hd(e,o.exit_flow.separable_conv,[1,1]))})},Av.prototype.forward=function(n){return p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return e=this.forwardInput,[4,md(n)];case 1:return[2,e.apply(this,[t.sent()])]}})})},Av.prototype.getDefaultModelName=function(){return"tiny_xception_model"},Av.prototype.extractParamsFromWeigthMap=function(t){return _v(t,this._numMainBlocks)},Av.prototype.extractParams=function(t){return Ev(t,this._numMainBlocks)},Av);function Av(t){var e=Sv.call(this,"TinyXception")||this;return e._numMainBlocks=t,e}(kv=c.Gender||(c.Gender={})).FEMALE="female",kv.MALE="male";var Tv,Dv=(t(Fv,Tv=gd),Object.defineProperty(Fv.prototype,"faceFeatureExtractor",{get:function(){return this._faceFeatureExtractor},enumerable:!0,configurable:!0}),Fv.prototype.runNet=function(n){var r=this,o=this.params;if(!o)throw new Error(this._name+" - load model before inference");return Qe(function(){var t=n instanceof dd?r.faceFeatureExtractor.forwardInput(n):n,e=Cc(t,[7,7],[2,2],"valid").as2D(t.shape[0],-1);return{age:Zd(e,o.fc.age).as1D(),gender:Zd(e,o.fc.gender)}})},Fv.prototype.forwardInput=function(r){var o=this;return Qe(function(){var t=o.runNet(r),e=t.age,n=t.gender;return{age:e,gender:Xr(n)}})},Fv.prototype.forward=function(n){return p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return e=this.forwardInput,[4,md(n)];case 1:return[2,e.apply(this,[t.sent()])]}})})},Fv.prototype.predictAgeAndGender=function(s){return p(this,void 0,void 0,function(){var e,n,r,o,i,a,u=this;return P(this,function(t){switch(t.label){case 0:return[4,md(s)];case 1:return e=t.sent(),[4,this.forwardInput(e)];case 2:return n=t.sent(),r=Tr(n.age),o=Tr(n.gender),i=r.map(function(t,e){return{ageTensor:t,genderTensor:o[e]}}),[4,Promise.all(i.map(function(t){var a=t.ageTensor,s=t.genderTensor;return p(u,void 0,void 0,function(){var e,n,r,o,i;return P(this,function(t){switch(t.label){case 0:return[4,a.data()];case 1:return e=t.sent()[0],[4,s.data()];case 2:return n=t.sent()[0],o=(r=.5<n)?c.Gender.MALE:c.Gender.FEMALE,i=r?n:1-n,a.dispose(),s.dispose(),[2,{age:e,gender:o,genderProbability:i}]}})})}))];case 3:return a=t.sent(),n.age.dispose(),n.gender.dispose(),[2,e.isBatchInput?a:a[0]]}})})},Fv.prototype.getDefaultModelName=function(){return"age_gender_model"},Fv.prototype.dispose=function(t){void 0===t&&(t=!0),this.faceFeatureExtractor.dispose(t),Tv.prototype.dispose.call(this,t)},Fv.prototype.loadClassifierParams=function(t){var e=this.extractClassifierParams(t),n=e.params,r=e.paramMappings;this._params=n,this._paramMappings=r},Fv.prototype.extractClassifierParams=function(t){return function(t){var e=[],n=Zf(t),r=n.extractWeights,o=n.getRemainingWeights,i=Kf(r,e),a=i(512,1,"fc/age"),s=i(512,2,"fc/gender");if(0!==o().length)throw new Error("weights remaing after extract: "+o().length);return{paramMappings:e,params:{fc:{age:a,gender:s}}}}(t)},Fv.prototype.extractParamsFromWeigthMap=function(t){var e=tv(t),n=e.featureExtractorMap,r=e.classifierMap;return this.faceFeatureExtractor.loadFromWeightMap(n),function(t){var e=[],n=Qf(t,e);function r(t){return{weights:n(t+"/weights",2),bias:n(t+"/bias",1)}}var o={fc:{age:r("fc/age"),gender:r("fc/gender")}};return qf(t,e),{params:o,paramMappings:e}}(r)},Fv.prototype.extractParams=function(t){var e=t.slice(0,t.length-1539),n=t.slice(t.length-1539);return this.faceFeatureExtractor.extractWeights(e),this.extractClassifierParams(n)},Fv);function Fv(t){void 0===t&&(t=new Nv(2));var e=Tv.call(this,"AgeGenderNet")||this;return e._faceFeatureExtractor=t,e}var Mv,Pv=(t(Ov,Mv=pv),Ov.prototype.getRefPointsForAlignment=function(){var t=this.positions;return[t[0],t[1],of([t[3],t[4]])]},Ov);function Ov(){return null!==Mv&&Mv.apply(this,arguments)||this}var Bv=(Object.defineProperty(Lv.prototype,"label",{get:function(){return this._label},enumerable:!0,configurable:!0}),Object.defineProperty(Lv.prototype,"distance",{get:function(){return this._distance},enumerable:!0,configurable:!0}),Lv.prototype.toString=function(t){return void 0===t&&(t=!0),this.label+(t?" ("+ef(this.distance)+")":"")},Lv);function Lv(t,e){this._label=t,this._distance=e}var Wv=(Object.defineProperty(zv.prototype,"label",{get:function(){return this._label},enumerable:!0,configurable:!0}),Object.defineProperty(zv.prototype,"descriptors",{get:function(){return this._descriptors},enumerable:!0,configurable:!0}),zv.prototype.toJSON=function(){return{label:this.label,descriptors:this.descriptors.map(function(t){return Array.from(t)})}},zv.fromJSON=function(t){var e=t.descriptors.map(function(t){return new Float32Array(t)});return new zv(t.label,e)},zv);function zv(t,e){if("string"!=typeof t)throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(e)||e.some(function(t){return!(t instanceof Float32Array)}))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=t,this._descriptors=e}function Uv(s,u){return p(this,void 0,void 0,function(){var e,n,r,o,i,a;return P(this,function(t){switch(t.label){case 0:return e=Pf.getEnv().Canvas,(n=s)instanceof e?[3,5]:[4,md(s)];case 1:if(1<(r=t.sent()).batchSize)throw new Error("extractFaces - batchSize > 1 not supported");return(o=r.getInput(0))instanceof e?(i=o,[3,4]):[3,2];case 2:return[4,cd(o)];case 3:i=t.sent(),t.label=4;case 4:n=i,t.label=5;case 5:return a=Bf(n),[2,u.map(function(t){return t instanceof zd?t.forSize(n.width,n.height).box.floor():t}).map(function(t){return t.clipAtImageBorders(n.width,n.height)}).map(function(t){var e=t.x,n=t.y,r=t.width,o=t.height,i=id({width:r,height:o});return Bf(i).putImageData(a.getImageData(e,n,r,o),0,0),i})]}})})}function Vv(u,e){return p(this,void 0,void 0,function(){return P(this,function(t){if(!Jp(u)&&!Qp(u))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(Qp(u)&&1<u.shape[0])throw new Error("extractFaceTensors - batchSize > 1 not supported");return[2,Qe(function(){var t=u.shape.slice(Qp(u)?1:0),i=t[0],a=t[1],s=t[2];return e.map(function(t){return t instanceof zd?t.forSize(a,i).box:t}).map(function(t){return t.clipAtImageBorders(a,i)}).map(function(t){var e=t.x,n=t.y,r=t.width,o=t.height;return Nc(u.as3D(i,a,s),[n,e,0],[o,r,s])})})]})})}var Gv,Hv=(t(jv,Gv=nv),jv.prototype.postProcess=function(t,o,e){var i=e.map(function(t){var e=t.width,n=t.height,r=o/Math.max(n,e);return{width:e*r,height:n*r}}),a=i.length;return Qe(function(){function n(t,e){return kr([Dn([68],t),Dn([68],e)],1).as2D(1,136).as1D()}function r(t,e){var n=i[t],r=n.width,o=n.height;return e(r,o)?Math.abs(r-o)/2:0}return t.mul(Dn([a,136],o)).sub(kr(Array.from(Array(a),function(t,e){return n(function(t){return r(t,function(t,e){return t<e})}(e),function(t){return r(t,function(t,e){return e<t})}(e))}))).div(kr(Array.from(Array(a),function(t,e){return n(i[e].width,i[e].height)})))})},jv.prototype.forwardInput=function(e){var n=this;return Qe(function(){var t=n.runNet(e);return n.postProcess(t,e.inputSize,e.inputDimensions.map(function(t){return{height:t[0],width:t[1]}}))})},jv.prototype.forward=function(n){return p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return e=this.forwardInput,[4,md(n)];case 1:return[2,e.apply(this,[t.sent()])]}})})},jv.prototype.detectLandmarks=function(o){return p(this,void 0,void 0,function(){var u,e,n,r=this;return P(this,function(t){switch(t.label){case 0:return[4,md(o)];case 1:return u=t.sent(),e=Qe(function(){return Tr(r.forwardInput(u))}),[4,Promise.all(e.map(function(a,s){return p(r,void 0,void 0,function(){var e,n,r,o,i;return P(this,function(t){switch(t.label){case 0:return r=(n=Array).from,[4,a.data()];case 1:return e=r.apply(n,[t.sent()]),o=e.filter(function(t,e){return tf(e)}),i=e.filter(function(t,e){return!tf(e)}),[2,new vv(Array(68).fill(0).map(function(t,e){return new $p(o[e],i[e])}),{height:u.getInputHeight(s),width:u.getInputWidth(s)})]}})})}))];case 2:return n=t.sent(),e.forEach(function(t){return t.dispose()}),[2,u.isBatchInput?n:n[0]]}})})},jv.prototype.getClassifierChannelsOut=function(){return 136},jv);function jv(){return null!==Gv&&Gv.apply(this,arguments)||this}var qv,$v=(t(Kv,qv=Hv),Kv.prototype.getDefaultModelName=function(){return"face_landmark_68_model"},Kv.prototype.getClassifierChannelsIn=function(){return 256},Kv);function Kv(t){return void 0===t&&(t=new Jd),qv.call(this,"FaceLandmark68Net",t)||this}var Xv,Yv=(t(Jv,Xv=gd),Jv.prototype.forwardInput=function(e){var n=this.params;if(!n)throw new Error("TinyFaceFeatureExtractor - load model before inference");return Qe(function(){var t=jd(wd(e.toBatchTensor(112,!0),[122.782,117.001,104.298]).div(En(255)),n.dense0,!0);return t=jd(t=jd(t,n.dense1),n.dense2),t=Cc(t,[14,14],[2,2],"valid")})},Jv.prototype.forward=function(n){return p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return e=this.forwardInput,[4,md(n)];case 1:return[2,e.apply(this,[t.sent()])]}})})},Jv.prototype.getDefaultModelName=function(){return"face_feature_extractor_tiny_model"},Jv.prototype.extractParamsFromWeigthMap=function(t){return function(t){var e=[],n=Xd(t,e).extractDenseBlock3Params,r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2")};return qf(t,e),{params:r,paramMappings:e}}(t)},Jv.prototype.extractParams=function(t){return function(t){var e=[],n=Zf(t),r=n.extractWeights,o=n.getRemainingWeights,i=$d(r,e).extractDenseBlock3Params,a=i(3,32,"dense0",!0),s=i(32,64,"dense1"),u=i(64,128,"dense2");if(0!==o().length)throw new Error("weights remaing after extract: "+o().length);return{paramMappings:e,params:{dense0:a,dense1:s,dense2:u}}}(t)},Jv);function Jv(){return Xv.call(this,"TinyFaceFeatureExtractor")||this}var Qv,Zv=(t(tm,Qv=Hv),tm.prototype.getDefaultModelName=function(){return"face_landmark_68_tiny_model"},tm.prototype.getClassifierChannelsIn=function(){return 128},tm);function tm(t){return void 0===t&&(t=new Yv),Qv.call(this,"FaceLandmark68TinyNet",t)||this}var em,nm=(t(rm,em=$v),rm);function rm(){return null!==em&&em.apply(this,arguments)||this}function om(t,e,n,r,o){void 0===o&&(o="same");var i=e.conv,a=i.filters,s=i.bias,u=rc(t,a,n,o);return u=function(t,e){return du(Su(t,e.weights),e.biases)}(u=du(u,s),e.scale),r?qc(u):u}function im(t,e){return om(t,e,[1,1],!1)}function am(t,e){return om(t,e,[2,2],!0,"valid")}function sm(a,s){function o(t,e,n,r){var o=function(t,e,n){var r=a(t),o=r.length/(e*n*n);if(Zp(o))throw new Error("depth has to be an integer: "+o+", weights.length: "+r.length+", numFilters: "+e+", filterSize: "+n);return Qe(function(){return Kc(Sn(r,[e,o,n,n]),[2,3,1,0])})}(t,e,n),i=_n(a(e));return s.push({paramPath:r+"/filters"},{paramPath:r+"/bias"}),{filters:o,bias:i}}function i(t,e,n,r){return{conv:o(t,e,n,r+"/conv"),scale:function(t,e){var n=_n(a(t)),r=_n(a(t));return s.push({paramPath:e+"/weights"},{paramPath:e+"/biases"}),{weights:n,biases:r}}(e,r+"/scale")}}return{extractConvLayerParams:i,extractResidualLayerParams:function(t,e,n,r,o){return void 0===o&&(o=!1),{conv1:i((o?.5:1)*t,e,n,r+"/conv1"),conv2:i(t,e,n,r+"/conv2")}}}}function um(t,e){var n=Qf(t,e);function r(t){return{conv:{filters:n(t+"/conv/filters",4),bias:n(t+"/conv/bias",1)},scale:function(t){return{weights:n(t+"/scale/weights",1),biases:n(t+"/scale/biases",1)}}(t)}}return{extractConvLayerParams:r,extractResidualLayerParams:function(t){return{conv1:r(t+"/conv1"),conv2:r(t+"/conv2")}}}}function cm(t,e){var n=function(t,e){return om(t,e,[1,1],!0)}(t,e.conv1);return n=im(n,e.conv2),n=du(n,t),n=qc(n)}function lm(t,e){var n=am(t,e.conv1);n=im(n,e.conv2);var r=Cc(t,2,2,"valid"),o=Tn(r.shape),i=r.shape[3]!==n.shape[3];if(r.shape[1]!==n.shape[1]||r.shape[2]!==n.shape[2]){var a=l(n.shape);a[1]=1;var s=Tn(a),u=l((n=Bn([n,s],1)).shape);u[2]=1;var c=Tn(u);n=Bn([n,c],2)}return r=i?Bn([r,o],3):r,n=du(r,n),n=qc(n)}var hm,pm=(t(fm,hm=gd),fm.prototype.forwardInput=function(n){var r=this.params;if(!r)throw new Error("FaceRecognitionNet - load model before inference");return Qe(function(){var t=am(wd(n.toBatchTensor(150,!0).toFloat(),[122.782,117.001,104.298]).div(En(256)),r.conv32_down),e=(t=lm(t=cm(t=cm(t=lm(t=cm(t=cm(t=lm(t=cm(t=cm(t=cm(t=lm(t=cm(t=cm(t=cm(t=wc(t,3,2,"valid"),r.conv32_1),r.conv32_2),r.conv32_3),r.conv64_down),r.conv64_1),r.conv64_2),r.conv64_3),r.conv128_down),r.conv128_1),r.conv128_2),r.conv256_down),r.conv256_1),r.conv256_2),r.conv256_down_out)).mean([1,2]);return hc(e,r.fc)})},fm.prototype.forward=function(n){return p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return e=this.forwardInput,[4,md(n)];case 1:return[2,e.apply(this,[t.sent()])]}})})},fm.prototype.computeFaceDescriptor=function(i){return p(this,void 0,void 0,function(){var e,n,r,o=this;return P(this,function(t){switch(t.label){case 0:return[4,md(i)];case 1:return e=t.sent(),n=Qe(function(){return Tr(o.forwardInput(e))}),[4,Promise.all(n.map(function(t){return t.data()}))];case 2:return r=t.sent(),n.forEach(function(t){return t.dispose()}),[2,e.isBatchInput?r:r[0]]}})})},fm.prototype.getDefaultModelName=function(){return"face_recognition_model"},fm.prototype.extractParamsFromWeigthMap=function(t){return function(t){var e=[],n=um(t,e),r=n.extractConvLayerParams,o=n.extractResidualLayerParams,i=r("conv32_down"),a=o("conv32_1"),s=o("conv32_2"),u=o("conv32_3"),c=o("conv64_down"),l=o("conv64_1"),h=o("conv64_2"),p=o("conv64_3"),f=o("conv128_down"),d=o("conv128_1"),v=o("conv128_2"),m=o("conv256_down"),g=o("conv256_1"),y=o("conv256_2"),x=o("conv256_down_out"),b=t.fc;if(e.push({originalPath:"fc",paramPath:"fc"}),!Yp(b))throw new Error("expected weightMap[fc] to be a Tensor2D, instead have "+b);var w={conv32_down:i,conv32_1:a,conv32_2:s,conv32_3:u,conv64_down:c,conv64_1:l,conv64_2:h,conv64_3:p,conv128_down:f,conv128_1:d,conv128_2:v,conv256_down:m,conv256_1:g,conv256_2:y,conv256_down_out:x,fc:b};return qf(t,e),{params:w,paramMappings:e}}(t)},fm.prototype.extractParams=function(t){return function(t){var e=Zf(t),n=e.extractWeights,r=e.getRemainingWeights,o=[],i=sm(n,o),a=i.extractConvLayerParams,s=i.extractResidualLayerParams,u=a(4704,32,7,"conv32_down"),c=s(9216,32,3,"conv32_1"),l=s(9216,32,3,"conv32_2"),h=s(9216,32,3,"conv32_3"),p=s(36864,64,3,"conv64_down",!0),f=s(36864,64,3,"conv64_1"),d=s(36864,64,3,"conv64_2"),v=s(36864,64,3,"conv64_3"),m=s(147456,128,3,"conv128_down",!0),g=s(147456,128,3,"conv128_1"),y=s(147456,128,3,"conv128_2"),x=s(589824,256,3,"conv256_down",!0),b=s(589824,256,3,"conv256_1"),w=s(589824,256,3,"conv256_2"),C=s(589824,256,3,"conv256_down_out"),E=Qe(function(){return Kc(Rn(n(32768),[128,256]),[1,0])});if(o.push({paramPath:"fc"}),0!==r().length)throw new Error("weights remaing after extract: "+r().length);return{params:{conv32_down:u,conv32_1:c,conv32_2:l,conv32_3:h,conv64_down:p,conv64_1:f,conv64_2:d,conv64_3:v,conv128_down:m,conv128_1:g,conv128_2:y,conv256_down:x,conv256_1:b,conv256_2:w,conv256_down_out:C,fc:E},paramMappings:o}}(t)},fm);function fm(){return hm.call(this,"FaceRecognitionNet")||this}function dm(t,e){var n={descriptor:e};return Object.assign({},t,n)}function vm(t,e){var n={age:e};return Object.assign({},t,n)}function mm(t,e,n){var r={gender:e,genderProbability:n};return Object.assign({},t,r)}var gm=(Object.defineProperty(ym.prototype,"minFaceSize",{get:function(){return this._minFaceSize},enumerable:!0,configurable:!0}),Object.defineProperty(ym.prototype,"scaleFactor",{get:function(){return this._scaleFactor},enumerable:!0,configurable:!0}),Object.defineProperty(ym.prototype,"maxNumScales",{get:function(){return this._maxNumScales},enumerable:!0,configurable:!0}),Object.defineProperty(ym.prototype,"scoreThresholds",{get:function(){return this._scoreThresholds},enumerable:!0,configurable:!0}),Object.defineProperty(ym.prototype,"scaleSteps",{get:function(){return this._scaleSteps},enumerable:!0,configurable:!0}),ym);function ym(t){var e=void 0===t?{}:t,n=e.minFaceSize,r=e.scaleFactor,o=e.maxNumScales,i=e.scoreThresholds,a=e.scaleSteps;if(this._name="MtcnnOptions",this._minFaceSize=n||20,this._scaleFactor=r||.709,this._maxNumScales=o||10,this._scoreThresholds=i||[.6,.7,.7],this._scaleSteps=a,"number"!=typeof this._minFaceSize||this._minFaceSize<0)throw new Error(this._name+" - expected minFaceSize to be a number > 0");if("number"!=typeof this._scaleFactor||this._scaleFactor<=0||1<=this._scaleFactor)throw new Error(this._name+" - expected scaleFactor to be a number between 0 and 1");if("number"!=typeof this._maxNumScales||this._maxNumScales<0)throw new Error(this._name+" - expected maxNumScales to be a number > 0");if(!Array.isArray(this._scoreThresholds)||3!==this._scoreThresholds.length||this._scoreThresholds.some(function(t){return"number"!=typeof t}))throw new Error(this._name+" - expected scoreThresholds to be an array of numbers of length 3");if(this._scaleSteps&&(!Array.isArray(this._scaleSteps)||this._scaleSteps.some(function(t){return"number"!=typeof t})))throw new Error(this._name+" - expected scaleSteps to be an array of numbers")}function xm(s,u){function i(t,e,n,r,o){var i=Sn(s(t*e*n*n),[n,n,t,e]),a=_n(s(e));return u.push({paramPath:r+"/filters"},{paramPath:r+"/"+(o?"batch_norm_offset":"bias")}),{filters:i,bias:a}}function r(t,e,n,r){var o=i(t,e,n,r,!0);return{filters:o.filters,batch_norm_offset:o.bias}}function t(t,e,n){return{depthwise_conv:function(t,e){var n=Sn(s(9*t),[3,3,t,1]),r=_n(s(t)),o=_n(s(t)),i=_n(s(t)),a=_n(s(t));return u.push({paramPath:e+"/filters"},{paramPath:e+"/batch_norm_scale"},{paramPath:e+"/batch_norm_offset"},{paramPath:e+"/batch_norm_mean"},{paramPath:e+"/batch_norm_variance"}),{filters:n,batch_norm_scale:r,batch_norm_offset:o,batch_norm_mean:i,batch_norm_variance:a}}(t,n+"/depthwise_conv"),pointwise_conv:r(t,e,1,n+"/pointwise_conv")}}return{extractMobilenetV1Params:function(){return{conv_0:r(3,32,3,"mobilenetv1/conv_0"),conv_1:t(32,64,"mobilenetv1/conv_1"),conv_2:t(64,128,"mobilenetv1/conv_2"),conv_3:t(128,128,"mobilenetv1/conv_3"),conv_4:t(128,256,"mobilenetv1/conv_4"),conv_5:t(256,256,"mobilenetv1/conv_5"),conv_6:t(256,512,"mobilenetv1/conv_6"),conv_7:t(512,512,"mobilenetv1/conv_7"),conv_8:t(512,512,"mobilenetv1/conv_8"),conv_9:t(512,512,"mobilenetv1/conv_9"),conv_10:t(512,512,"mobilenetv1/conv_10"),conv_11:t(512,512,"mobilenetv1/conv_11"),conv_12:t(512,1024,"mobilenetv1/conv_12"),conv_13:t(1024,1024,"mobilenetv1/conv_13")}},extractPredictionLayerParams:function(){return{conv_0:r(1024,256,1,"prediction_layer/conv_0"),conv_1:r(256,512,3,"prediction_layer/conv_1"),conv_2:r(512,128,1,"prediction_layer/conv_2"),conv_3:r(128,256,3,"prediction_layer/conv_3"),conv_4:r(256,128,1,"prediction_layer/conv_4"),conv_5:r(128,256,3,"prediction_layer/conv_5"),conv_6:r(256,64,1,"prediction_layer/conv_6"),conv_7:r(64,128,3,"prediction_layer/conv_7"),box_predictor_0:{box_encoding_predictor:i(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),class_predictor:i(512,9,1,"prediction_layer/box_predictor_0/class_predictor")},box_predictor_1:{box_encoding_predictor:i(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),class_predictor:i(1024,18,1,"prediction_layer/box_predictor_1/class_predictor")},box_predictor_2:{box_encoding_predictor:i(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),class_predictor:i(512,18,1,"prediction_layer/box_predictor_2/class_predictor")},box_predictor_3:{box_encoding_predictor:i(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),class_predictor:i(256,18,1,"prediction_layer/box_predictor_3/class_predictor")},box_predictor_4:{box_encoding_predictor:i(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),class_predictor:i(256,18,1,"prediction_layer/box_predictor_4/class_predictor")},box_predictor_5:{box_encoding_predictor:i(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),class_predictor:i(128,18,1,"prediction_layer/box_predictor_5/class_predictor")}}}}}function bm(t){var e=[],n=function(t,e){var i=Qf(t,e);function a(t,e,n){return{filters:i(t+"/Conv2d_"+e+"_pointwise/weights",4,n+"/filters"),batch_norm_offset:i(t+"/Conv2d_"+e+"_pointwise/convolution_bn_offset",1,n+"/batch_norm_offset")}}function n(t){var e="mobilenetv1/conv_"+t,n="MobilenetV1/Conv2d_"+t+"_depthwise",r=e+"/depthwise_conv",o=e+"/pointwise_conv";return{depthwise_conv:{filters:i(n+"/depthwise_weights",4,r+"/filters"),batch_norm_scale:i(n+"/BatchNorm/gamma",1,r+"/batch_norm_scale"),batch_norm_offset:i(n+"/BatchNorm/beta",1,r+"/batch_norm_offset"),batch_norm_mean:i(n+"/BatchNorm/moving_mean",1,r+"/batch_norm_mean"),batch_norm_variance:i(n+"/BatchNorm/moving_variance",1,r+"/batch_norm_variance")},pointwise_conv:a("MobilenetV1",t,o)}}function r(t,e){return{filters:i(t+"/weights",4,e+"/filters"),bias:i(t+"/biases",1,e+"/bias")}}function o(t){return{box_encoding_predictor:r("Prediction/BoxPredictor_"+t+"/BoxEncodingPredictor","prediction_layer/box_predictor_"+t+"/box_encoding_predictor"),class_predictor:r("Prediction/BoxPredictor_"+t+"/ClassPredictor","prediction_layer/box_predictor_"+t+"/class_predictor")}}return{extractMobilenetV1Params:function(){return{conv_0:a("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:n(1),conv_2:n(2),conv_3:n(3),conv_4:n(4),conv_5:n(5),conv_6:n(6),conv_7:n(7),conv_8:n(8),conv_9:n(9),conv_10:n(10),conv_11:n(11),conv_12:n(12),conv_13:n(13)}},extractPredictionLayerParams:function(){return{conv_0:a("Prediction",0,"prediction_layer/conv_0"),conv_1:a("Prediction",1,"prediction_layer/conv_1"),conv_2:a("Prediction",2,"prediction_layer/conv_2"),conv_3:a("Prediction",3,"prediction_layer/conv_3"),conv_4:a("Prediction",4,"prediction_layer/conv_4"),conv_5:a("Prediction",5,"prediction_layer/conv_5"),conv_6:a("Prediction",6,"prediction_layer/conv_6"),conv_7:a("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:o(0),box_predictor_1:o(1),box_predictor_2:o(2),box_predictor_3:o(3),box_predictor_4:o(4),box_predictor_5:o(5)}}}}(t,e),r=n.extractMobilenetV1Params,o=n.extractPredictionLayerParams,i=t["Output/extra_dim"];if(e.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Jp(i))throw new Error("expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have "+i);var a={mobilenetv1:r(),prediction_layer:o(),output_layer:{extra_dim:i}};return qf(t,e),{params:a,paramMappings:e}}function wm(e,n,r){return Qe(function(){var t=rc(e,n.filters,r,"same");return t=du(t,n.batch_norm_offset),ws(t,0,6)})}var Cm=.0010000000474974513;function Em(t,e){return Qe(function(){var o=null,i=wm(t,e.conv_0,[2,2]);if([e.conv_1,e.conv_2,e.conv_3,e.conv_4,e.conv_5,e.conv_6,e.conv_7,e.conv_8,e.conv_9,e.conv_10,e.conv_11,e.conv_12,e.conv_13].forEach(function(t,e){var n=e+1,r=function(e){return[2,4,6,12].some(function(t){return t===e})?[2,2]:[1,1]}(n);i=wm(i=function(e,n,r){return Qe(function(){var t=sc(e,n.filters,r,"same");return t=iu(t,n.batch_norm_mean,n.batch_norm_variance,n.batch_norm_offset,n.batch_norm_scale,Cm),ws(t,0,6)})}(i,t.depthwise_conv,r),t.pointwise_conv,[1,1]),11===n&&(o=i)}),null===o)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:i,conv11:o}})}function _m(t,e,n){var r=t.arraySync(),o=Math.min(r[e][0],r[e][2]),i=Math.min(r[e][1],r[e][3]),a=Math.max(r[e][0],r[e][2]),s=Math.max(r[e][1],r[e][3]),u=Math.min(r[n][0],r[n][2]),c=Math.min(r[n][1],r[n][3]),l=Math.max(r[n][0],r[n][2]),h=Math.max(r[n][1],r[n][3]),p=(a-o)*(s-i),f=(l-u)*(h-c);if(p<=0||f<=0)return 0;var d=Math.max(o,u),v=Math.max(i,c),m=Math.min(a,l),g=Math.min(s,h),y=Math.max(m-d,0)*Math.max(g-v,0);return y/(p+f-y)}function Rm(t,e){var n=function(t){var e=Tr(Kc(t,[1,0])),n=[Fu(e[2],e[0]),Fu(e[3],e[1])];return{sizes:n,centers:[du(e[0],yu(n[0],En(2))),du(e[1],yu(n[1],En(2)))]}}(t),r=n.sizes,o=n.centers,i=Tr(Kc(e,[1,0])),a=yu(Su(Rs(yu(i[2],En(5))),r[0]),En(2)),s=du(Su(yu(i[0],En(10)),r[0]),o[0]),u=yu(Su(Rs(yu(i[3],En(5))),r[1]),En(2)),c=du(Su(yu(i[1],En(10)),r[1]),o[1]);return Kc(kr([Fu(s,a),Fu(c,u),du(s,a),du(c,u)]),[1,0])}function Im(e,n){return Qe(function(){var t=e.shape[0];return{boxPredictionEncoding:Rr(jf(e,n.box_encoding_predictor),[t,-1,1,4]),classPrediction:Rr(jf(e,n.class_predictor),[t,-1,3])}})}var Sm=(Object.defineProperty(km.prototype,"minConfidence",{get:function(){return this._minConfidence},enumerable:!0,configurable:!0}),Object.defineProperty(km.prototype,"maxResults",{get:function(){return this._maxResults},enumerable:!0,configurable:!0}),km);function km(t){var e=void 0===t?{}:t,n=e.minConfidence,r=e.maxResults;if(this._name="SsdMobilenetv1Options",this._minConfidence=n||.5,this._maxResults=r||100,"number"!=typeof this._minConfidence||this._minConfidence<=0||1<=this._minConfidence)throw new Error(this._name+" - expected minConfidence to be a number between 0 and 1");if("number"!=typeof this._maxResults)throw new Error(this._name+" - expected maxResults to be a number")}var Nm,Am=(t(Tm,Nm=gd),Tm.prototype.forwardInput=function(r){var o=this.params;if(!o)throw new Error("SsdMobilenetv1 - load model before inference");return Qe(function(){var t=r.toBatchTensor(512,!1).toFloat(),e=Em(Fu(Su(t,En(.007843137718737125)),En(1)),o.mobilenetv1),n=function(l,h,p){return Qe(function(){var t=wm(wm(l,p.conv_0,[1,1]),p.conv_1,[2,2]),e=wm(wm(t,p.conv_2,[1,1]),p.conv_3,[2,2]),n=wm(wm(e,p.conv_4,[1,1]),p.conv_5,[2,2]),r=wm(wm(n,p.conv_6,[1,1]),p.conv_7,[2,2]),o=Im(h,p.box_predictor_0),i=Im(l,p.box_predictor_1),a=Im(t,p.box_predictor_2),s=Im(e,p.box_predictor_3),u=Im(n,p.box_predictor_4),c=Im(r,p.box_predictor_5);return{boxPredictions:Bn([o.boxPredictionEncoding,i.boxPredictionEncoding,a.boxPredictionEncoding,s.boxPredictionEncoding,u.boxPredictionEncoding,c.boxPredictionEncoding],1),classPredictions:Bn([o.classPrediction,i.classPrediction,a.classPrediction,s.classPrediction,u.classPrediction,c.classPrediction],1)}})}(e.out,e.conv11,o.prediction_layer);return function(o,i,a){return Qe(function(){var t=o.shape[0],e=Rm(Rr(Nr(a.extra_dim,[t,1,1]),[-1,4]),Rr(o,[-1,4]));e=Rr(e,[t,e.shape[0]/t,4]);var n=Ps(Ic(i,[0,0,1],[-1,-1,-1])),r=Ic(n,[0,0,0],[-1,-1,1]);return r=Rr(r,[t,r.shape[1]]),{boxes:Tr(e),scores:Tr(r)}})}(n.boxPredictions,n.classPredictions,o.output_layer)})},Tm.prototype.forward=function(n){return p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return e=this.forwardInput,[4,md(n)];case 1:return[2,e.apply(this,[t.sent()])]}})})},Tm.prototype.locateFaces=function(w,C){return void 0===C&&(C={}),p(this,void 0,void 0,function(){var e,n,r,s,o,i,a,u,c,l,h,p,f,d,v,m,g,y,x,b;return P(this,function(t){switch(t.label){case 0:return e=new Sm(C),n=e.maxResults,r=e.minConfidence,[4,md(w)];case 1:for(s=t.sent(),o=this.forwardInput(s),i=o.boxes,a=o.scores,u=i[0],c=a[0],l=1;l<i.length;l++)i[l].dispose(),a[l].dispose();return f=(p=Array).from,[4,c.data()];case 2:return h=f.apply(p,[t.sent()]),d=function(o,t,e,i,a){var n=o.shape[0],s=Math.min(e,n),r=t.map(function(t,e){return{score:t,boxIndex:e}}).filter(function(t){return t.score>a}).sort(function(t,e){return e.score-t.score}),u=[];return r.forEach(function(t){if(!(u.length>=s)){for(var e=t.score,n=u.length-1;0<=n;--n){var r=_m(o,t.boxIndex,u[n]);if(0!==r&&(t.score*=r<=i?1:0,t.score<=a))break}e===t.score&&u.push(t.boxIndex)}}),u}(u,h,n,.5,r),v=s.getReshapedInputDimensions(0),m=s.inputSize,g=m/v.width,y=m/v.height,x=u.arraySync(),b=d.map(function(t){var e=[Math.max(0,x[t][0]),Math.min(1,x[t][2])].map(function(t){return t*y}),n=e[0],r=e[1],o=[Math.max(0,x[t][1]),Math.min(1,x[t][3])].map(function(t){return t*g}),i=o[0],a=o[1];return new zd(h[t],new _f(i,n,a-i,r-n),{height:s.getInputHeight(0),width:s.getInputWidth(0)})}),u.dispose(),c.dispose(),[2,b]}})})},Tm.prototype.getDefaultModelName=function(){return"ssd_mobilenetv1_model"},Tm.prototype.extractParamsFromWeigthMap=function(t){return bm(t)},Tm.prototype.extractParams=function(t){return function(t){var e=[],n=Zf(t),r=n.extractWeights,o=n.getRemainingWeights,i=xm(r,e),a=i.extractMobilenetV1Params,s=i.extractPredictionLayerParams,u=a(),c=s(),l={extra_dim:In(r(20472),[1,5118,4])};if(e.push({paramPath:"output_layer/extra_dim"}),0!==o().length)throw new Error("weights remaing after extract: "+o().length);return{params:{mobilenetv1:u,prediction_layer:c,output_layer:l},paramMappings:e}}(t)},Tm);function Tm(){return Nm.call(this,"SsdMobilenetv1")||this}function Dm(t){var e=new Am;return e.extractWeights(t),e}var Fm,Mm=(t(Pm,Fm=Am),Pm);function Pm(){return null!==Fm&&Fm.apply(this,arguments)||this}var Om,Bm=(t(Lm,Om=Dd),Lm);function Lm(){var t=null!==Om&&Om.apply(this,arguments)||this;return t._name="TinyFaceDetectorOptions",t}var Wm=(zm.prototype.then=function(n){return p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return e=n,[4,this.run()];case 1:return[2,e.apply(void 0,[t.sent()])]}})})},zm.prototype.run=function(){return p(this,void 0,void 0,function(){return P(this,function(t){throw new Error("ComposableTask - run is not implemented")})})},zm);function zm(){}function Um(a,s,u,c,l){return void 0===l&&(l=function(t){return t.alignedRect}),p(this,void 0,void 0,function(){var e,n,r,o,i;return P(this,function(t){switch(t.label){case 0:return e=a.map(function(t){return gv(t)?l(t):t.detection}),(r=c)?[3,5]:s instanceof yt?[4,Vv(s,e)]:[3,2];case 1:return o=t.sent(),[3,4];case 2:return[4,Uv(s,e)];case 3:o=t.sent(),t.label=4;case 4:r=o,t.label=5;case 5:return[4,u(n=r)];case 6:return i=t.sent(),n.forEach(function(t){return t instanceof yt&&t.dispose()}),[2,i]}})})}function Vm(e,r,o,i,a){return p(this,void 0,void 0,function(){var n=this;return P(this,function(t){return[2,Um([e],r,function(e){return p(n,void 0,void 0,function(){return P(this,function(t){return[2,o(e[0])]})})},i,a)]})})}var Gm=2,Hm=12;function jm(t){var e=Zf(t),n=e.extractWeights,r=e.getRemainingWeights,o=[],i=function(r,o){var u=$f(r,o),c=Kf(r,o);function l(t,e){var n=_n(r(t));return o.push({paramPath:e}),n}function h(t,e,n){return void 0===n&&(n=!1),{conv1:u(t[0],t[1],3,e+"/conv1"),prelu1_alpha:l(t[1],e+"/prelu1_alpha"),conv2:u(t[1],t[2],3,e+"/conv2"),prelu2_alpha:l(t[2],e+"/prelu2_alpha"),conv3:u(t[2],t[3],n?2:3,e+"/conv3"),prelu3_alpha:l(t[3],e+"/prelu3_alpha")}}return{extractPNetParams:function(){var t=h([3,10,16,32],"pnet"),e=u(32,2,1,"pnet/conv4_1"),n=u(32,4,1,"pnet/conv4_2");return M(M({},t),{conv4_1:e,conv4_2:n})},extractRNetParams:function(){var t=h([3,28,48,64],"rnet",!0),e=c(576,128,"rnet/fc1"),n=l(128,"rnet/prelu4_alpha"),r=c(128,2,"rnet/fc2_1"),o=c(128,4,"rnet/fc2_2");return M(M({},t),{fc1:e,prelu4_alpha:n,fc2_1:r,fc2_2:o})},extractONetParams:function(){var t=h([3,32,64,64],"onet"),e=u(64,128,2,"onet/conv4"),n=l(128,"onet/prelu4_alpha"),r=c(1152,256,"onet/fc1"),o=l(256,"onet/prelu5_alpha"),i=c(256,2,"onet/fc2_1"),a=c(256,4,"onet/fc2_2"),s=c(256,10,"onet/fc2_3");return M(M({},t),{conv4:e,prelu4_alpha:n,fc1:r,prelu5_alpha:o,fc2_1:i,fc2_2:a,fc2_3:s})}}}(n,o),a=i.extractPNetParams,s=i.extractRNetParams,u=i.extractONetParams,c=a(),l=s(),h=u();if(0!==r().length)throw new Error("weights remaing after extract: "+r().length);return{params:{pnet:c,rnet:l,onet:h},paramMappings:o}}function qm(t){var e=[],n=function(t,e){var n=Qf(t,e);function u(t){return{filters:n(t+"/weights",4,t+"/filters"),bias:n(t+"/bias",1)}}function c(t){return{weights:n(t+"/weights",2),bias:n(t+"/bias",1)}}function l(t){return n(t,1)}function h(t){return{conv1:u(t+"/conv1"),prelu1_alpha:l(t+"/prelu1_alpha"),conv2:u(t+"/conv2"),prelu2_alpha:l(t+"/prelu2_alpha"),conv3:u(t+"/conv3"),prelu3_alpha:l(t+"/prelu3_alpha")}}return{extractPNetParams:function(){var t=h("pnet"),e=u("pnet/conv4_1"),n=u("pnet/conv4_2");return M(M({},t),{conv4_1:e,conv4_2:n})},extractRNetParams:function(){var t=h("rnet"),e=c("rnet/fc1"),n=l("rnet/prelu4_alpha"),r=c("rnet/fc2_1"),o=c("rnet/fc2_2");return M(M({},t),{fc1:e,prelu4_alpha:n,fc2_1:r,fc2_2:o})},extractONetParams:function(){var t=h("onet"),e=u("onet/conv4"),n=l("onet/prelu4_alpha"),r=c("onet/fc1"),o=l("onet/prelu5_alpha"),i=c("onet/fc2_1"),a=c("onet/fc2_2"),s=c("onet/fc2_3");return M(M({},t),{conv4:e,prelu4_alpha:n,fc1:r,prelu5_alpha:o,fc2_1:i,fc2_2:a,fc2_3:s})}}}(t,e),r=n.extractPNetParams,o=n.extractRNetParams,i=n.extractONetParams,a=r(),s=o(),u=i();return qf(t,e),{params:{pnet:a,rnet:s,onet:u},paramMappings:e}}function $m(t,e){var n=e[0],r=e[1];return{height:Math.floor(n*t),width:Math.floor(r*t)}}var Km,Xm=(t(Ym,Km=cf),Ym);function Ym(t,e,n,r){return Km.call(this,{left:t,top:e,right:n,bottom:r},!0)||this}function Jm(t){return Qe(function(){return Su(Fu(t,En(127.5)),En(.0078125))})}function Qm(t,e){return Qe(function(){return du(qc(t),Su(e,Ts(qc(Ts(t)))))})}function Zm(e,n,r){return void 0===r&&(r=!1),Qe(function(){var t=jf(e,n.conv1,"valid");return t=Qm(t,n.prelu1_alpha),t=Qm(t=jf(t=wc(t,r?[2,2]:[3,3],[2,2],"same"),n.conv2,"valid"),n.prelu2_alpha),t=Qm(t=jf(t=r?t:wc(t,[3,3],[2,2],"valid"),n.conv3,"valid"),n.prelu3_alpha)})}function tg(s,t,u,c,l){l.stage1=[];var e=t.map(function(a){return Qe(function(){var t={scale:a},e=function(o,i){return Qe(function(){var t=$m(i,o.shape.slice(1)),e=t.height,n=t.width,r=Jm(zl.resizeBilinear(o,[e,n]));return Kc(r,[0,2,1,3])})}(s,a),n=Date.now(),r=function(r,o){return Qe(function(){var t=Zm(r,o,!0),e=jf(t,o.conv4_1,"valid"),n=pr(Bc(e,3),3);return{prob:Xr(Fu(e,n),3),regions:jf(t,o.conv4_2,"valid")}})}(e,c),o=r.prob,i=r.regions;return t.pnet=Date.now()-n,{scoresTensor:Tr(Tr(o,3)[1])[0],regionsTensor:Tr(i)[0],scale:a,statsForScale:t}})}).map(function(t){var e=t.scoresTensor,n=t.regionsTensor,r=t.scale,o=t.statsForScale,i=function(t,o,i,e){for(var n=[],a=t.arraySync(),r=0;r<t.shape[0];r++)for(var s=0;s<t.shape[1];s++)a[r][s]>=e&&n.push(new $p(s,r));return n.map(function(t){var e=new pf(Math.round((t.y*Gm+1)/i),Math.round((t.x*Gm+1)/i),Math.round((t.y*Gm+Hm)/i),Math.round((t.x*Gm+Hm)/i)),n=a[t.y][t.x],r=o.arraySync();return{cell:e,score:n,region:new Xm(r[t.y][t.x][0],r[t.y][t.x][1],r[t.y][t.x][2],r[t.y][t.x][3])}})}(e,n,r,u);if(e.dispose(),n.dispose(),!i.length)return l.stage1.push(o),[];var a=Date.now(),s=bd(i.map(function(t){return t.cell}),i.map(function(t){return t.score}),.5);return o.nms=Date.now()-a,o.numBoxes=s.length,l.stage1.push(o),s.map(function(t){return i[t]})}).reduce(function(t,e){return t.concat(e)},[]),n=[],r=[];if(0<e.length){var o=Date.now(),i=bd(e.map(function(t){return t.cell}),e.map(function(t){return t.score}),.7);l.stage1_nms=Date.now()-o,r=i.map(function(t){return e[t].score}),n=i.map(function(t){return e[t]}).map(function(t){var e=t.cell,n=t.region;return new pf(e.left+n.left*e.width,e.top+n.top*e.height,e.right+n.right*e.width,e.bottom+n.bottom*e.height).toSquare().round()})}return{boxes:n,scores:r}}function eg(h,r,t){var a=t.width,s=t.height;return p(this,void 0,void 0,function(){var l,e,i,n=this;return P(this,function(t){switch(t.label){case 0:return l=Bf(h),[4,Promise.all(r.map(function(c){return p(n,void 0,void 0,function(){var e,n,r,o,i,a,s,u;return P(this,function(t){return e=c.padAtBorders(h.height,h.width),n=e.y,r=e.ey,o=e.x,i=e.ex,a=o-1,s=n-1,u=l.getImageData(a,s,i-a,r-s),[2,Pf.isNodejs()?ad(u):createImageBitmap(u)]})})}))];case 1:return e=t.sent(),i=[],e.forEach(function(t){var e=Bf(id({width:a,height:s}));e.drawImage(t,0,0,a,s);for(var n=e.getImageData(0,0,a,s).data,r=[],o=0;o<n.length;o+=4)r.push(n[o+2]),r.push(n[o+1]),r.push(n[o]);i.push(r)}),[2,i.map(function(t){return Qe(function(){return Jm(Kc(Sn(t,[1,a,s,3]),[0,2,1,3]).toFloat())})})]}})})}function ng(v,m,g,y,x){return p(this,void 0,void 0,function(){var e,n,r,o,i,a,s,u,c,l,h,p,f,d;return P(this,function(t){switch(t.label){case 0:return e=Date.now(),[4,eg(v,m,{width:24,height:24})];case 1:return n=t.sent(),x.stage2_extractImagePatches=Date.now()-e,e=Date.now(),r=n.map(function(t){var e=function(a,s){return Qe(function(){var t=Zm(a,s),e=Qm(Zd(Rr(t,[t.shape[0],s.fc1.weights.shape[0]]),s.fc1),s.prelu4_alpha),n=Zd(e,s.fc2_1),r=pr(Bc(n,1),1),o=Xr(Fu(n,r),1),i=Zd(e,s.fc2_2);return{scores:Tr(o,1)[1],regions:i}})}(t,y);return t.dispose(),e}),x.stage2_rnet=Date.now()-e,o=1<r.length?Bn(r.map(function(t){return t.scores})):r[0].scores,s=(a=Array).from,[4,o.data()];case 2:return i=s.apply(a,[t.sent()]),o.dispose(),u=i.map(function(t,e){return{score:t,idx:e}}).filter(function(t){return t.score>g}).map(function(t){return t.idx}),c=u.map(function(t){return m[t]}),l=u.map(function(t){return i[t]}),h=[],p=[],0<c.length&&(e=Date.now(),f=bd(c,l,.7),x.stage2_nms=Date.now()-e,d=f.map(function(t){var e=r[u[t]].regions.arraySync();return new Xm(e[0][0],e[0][1],e[0][2],e[0][3])}),p=f.map(function(t){return l[t]}),h=f.map(function(t,e){return c[t].calibrate(d[e])})),r.forEach(function(t){t.regions.dispose(),t.scores.dispose()}),[2,{boxes:h,scores:p}]}})})}function rg(m,g,y,x,b){return p(this,void 0,void 0,function(){var e,n,i,r,o,a,s,u,c,l,h,p,f,d,v;return P(this,function(t){switch(t.label){case 0:return e=Date.now(),[4,eg(m,g,{width:48,height:48})];case 1:return n=t.sent(),b.stage3_extractImagePatches=Date.now()-e,e=Date.now(),i=n.map(function(t){var e=function(s,u){return Qe(function(){var t=Zm(s,u);t=Qm(t=jf(t=wc(t,[2,2],[2,2],"same"),u.conv4,"valid"),u.prelu4_alpha);var e=Qm(Zd(Rr(t,[t.shape[0],u.fc1.weights.shape[0]]),u.fc1),u.prelu5_alpha),n=Zd(e,u.fc2_1),r=pr(Bc(n,1),1),o=Xr(Fu(n,r),1),i=Zd(e,u.fc2_2),a=Zd(e,u.fc2_3);return{scores:Tr(o,1)[1],regions:i,points:a}})}(t,x);return t.dispose(),e}),b.stage3_onet=Date.now()-e,r=1<i.length?Bn(i.map(function(t){return t.scores})):i[0].scores,s=(a=Array).from,[4,r.data()];case 2:return o=s.apply(a,[t.sent()]),r.dispose(),u=o.map(function(t,e){return{score:t,idx:e}}).filter(function(t){return t.score>y}).map(function(t){return t.idx}),c=u.map(function(t){var e=i[t].regions.arraySync();return new Xm(e[0][0],e[0][1],e[0][2],e[0][3])}),l=u.map(function(t,e){return g[t].calibrate(c[e])}),h=u.map(function(t){return o[t]}),p=[],f=[],d=[],0<l.length&&(e=Date.now(),v=bd(l,h,.7,!1),b.stage3_nms=Date.now()-e,p=v.map(function(t){return l[t]}),f=v.map(function(t){return h[t]}),d=v.map(function(r,o){return Array(5).fill(0).map(function(t,e){var n=i[r].points.arraySync();return new $p(n[0][e]*(p[o].width+1)+p[o].left,n[0][e+5]*(p[o].height+1)+p[o].top)})})),i.forEach(function(t){t.regions.dispose(),t.scores.dispose(),t.points.dispose()}),[2,{boxes:p,scores:f,points:d}]}})})}var og,ig=(t(ag,og=gd),ag.prototype.forwardInput=function(C,E){return void 0===E&&(E={}),p(this,void 0,void 0,function(){var e,n,r,o,i,a,s,u,c,l,h,p,f,d,v,m,g,y,x,b,w;return P(this,function(t){switch(t.label){case 0:if(!(e=this.params))throw new Error("Mtcnn - load model before inference");if(!(n=C.canvases[0]))throw new Error("Mtcnn - inputCanvas is not defined, note that passing tensors into Mtcnn.forwardInput is not supported yet.");return r={},o=Date.now(),i=Qe(function(){return function(t){return Qe(function(){return kr(Tr(t,3).reverse(),3)})}(pr(op.fromPixels(n)).toFloat())}),a=function(t){return i.dispose(),r.total=Date.now()-o,t},s=i.shape.slice(1),u=s[0],c=s[1],l=new gm(E),h=l.minFaceSize,p=l.scaleFactor,f=l.maxNumScales,d=l.scoreThresholds,v=l.scaleSteps,m=(v||function(t,e,n){for(var r=n[0],o=n[1],i=Hm/t,a=[],s=Math.min(r,o)*i,u=0;12<=s;)a.push(i*Math.pow(e,u)),s*=e,u+=1;return a}(h,p,[u,c])).filter(function(t){var e=$m(t,[u,c]);return Math.min(e.width,e.height)>Hm}).slice(0,f),r.scales=m,r.pyramid=m.map(function(t){return $m(t,[u,c])}),g=Date.now(),[4,tg(i,m,d[0],e.pnet,r)];case 1:return y=t.sent(),r.total_stage1=Date.now()-g,y.boxes.length?(r.stage2_numInputBoxes=y.boxes.length,g=Date.now(),[4,ng(n,y.boxes,d[1],e.rnet,r)]):[2,a({results:[],stats:r})];case 2:return x=t.sent(),r.total_stage2=Date.now()-g,x.boxes.length?(r.stage3_numInputBoxes=x.boxes.length,g=Date.now(),[4,rg(n,x.boxes,d[2],e.onet,r)]):[2,a({results:[],stats:r})];case 3:return b=t.sent(),r.total_stage3=Date.now()-g,w=b.boxes.map(function(e,t){return yv(Gd({},new zd(b.scores[t],new _f(e.left/c,e.top/u,e.width/c,e.height/u),{height:u,width:c})),new Pv(b.points[t].map(function(t){return t.sub(new $p(e.left,e.top)).div(new $p(e.width,e.height))}),{width:e.width,height:e.height}))}),[2,a({results:w,stats:r})]}})})},ag.prototype.forward=function(n,r){return void 0===r&&(r={}),p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return e=this.forwardInput,[4,md(n)];case 1:return[4,e.apply(this,[t.sent(),r])];case 2:return[2,t.sent().results]}})})},ag.prototype.forwardWithStats=function(n,r){return void 0===r&&(r={}),p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return e=this.forwardInput,[4,md(n)];case 1:return[2,e.apply(this,[t.sent(),r])]}})})},ag.prototype.getDefaultModelName=function(){return"mtcnn_model"},ag.prototype.extractParamsFromWeigthMap=function(t){return qm(t)},ag.prototype.extractParams=function(t){return jm(t)},ag);function ag(){return og.call(this,"Mtcnn")||this}var sg,ug=[new $p(1.603231,2.094468),new $p(6.041143,7.080126),new $p(2.882459,3.518061),new $p(4.266906,5.178857),new $p(9.041765,10.66308)],cg=[117.001,114.697,97.404],lg=(t(hg,sg=Pd),Object.defineProperty(hg.prototype,"anchors",{get:function(){return this.config.anchors},enumerable:!0,configurable:!0}),hg.prototype.locateFaces=function(e,n){return p(this,void 0,void 0,function(){return P(this,function(t){switch(t.label){case 0:return[4,this.detect(e,n)];case 1:return[2,t.sent().map(function(t){return new zd(t.score,t.relativeBox,{width:t.imageWidth,height:t.imageHeight})})]}})})},hg.prototype.getDefaultModelName=function(){return"tiny_face_detector_model"},hg.prototype.extractParamsFromWeigthMap=function(t){return sg.prototype.extractParamsFromWeigthMap.call(this,t)},hg);function hg(){var t={withSeparableConvs:!0,iouThreshold:.4,classes:["face"],anchors:ug,meanRgb:cg,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};return sg.call(this,t)||this}var pg,fg=[new $p(.738768,.874946),new $p(2.42204,2.65704),new $p(4.30971,7.04493),new $p(10.246,4.59428),new $p(12.6868,11.8741)],dg=[new $p(1.603231,2.094468),new $p(6.041143,7.080126),new $p(2.882459,3.518061),new $p(4.266906,5.178857),new $p(9.041765,10.66308)],vg=[117.001,114.697,97.404],mg=(t(gg,pg=Pd),Object.defineProperty(gg.prototype,"withSeparableConvs",{get:function(){return this.config.withSeparableConvs},enumerable:!0,configurable:!0}),Object.defineProperty(gg.prototype,"anchors",{get:function(){return this.config.anchors},enumerable:!0,configurable:!0}),gg.prototype.locateFaces=function(e,n){return p(this,void 0,void 0,function(){return P(this,function(t){switch(t.label){case 0:return[4,this.detect(e,n)];case 1:return[2,t.sent().map(function(t){return new zd(t.score,t.relativeBox,{width:t.imageWidth,height:t.imageHeight})})]}})})},gg.prototype.getDefaultModelName=function(){return this.withSeparableConvs?"tiny_yolov2_separable_conv_model":"tiny_yolov2_model"},gg.prototype.extractParamsFromWeigthMap=function(t){return pg.prototype.extractParamsFromWeigthMap.call(this,t)},gg);function gg(t){void 0===t&&(t=!0);var e=Object.assign({},{withSeparableConvs:t,iouThreshold:.4,classes:["face"]},t?{anchors:dg,meanRgb:vg}:{anchors:fg,withClassScores:!0});return pg.call(this,e)||this}function yg(t,e){return Cg.ssdMobilenetv1.locateFaces(t,e)}function xg(t){return Cg.faceLandmark68Net.detectLandmarks(t)}function bg(t){return Cg.ssdMobilenetv1.load(t)}var wg,Cg={ssdMobilenetv1:new Am,tinyFaceDetector:new lg,tinyYolov2:new mg,mtcnn:new ig,faceLandmark68Net:new $v,faceLandmark68TinyNet:new Zv,faceRecognitionNet:new pm,faceExpressionNet:new uv,ageGenderNet:new Dv},Eg=bg,_g=yg,Rg=xg,Ig=(t(Sg,wg=Wm),Sg);function Sg(t,e,n){var r=wg.call(this)||this;return r.parentTask=t,r.input=e,r.extractedFaces=n,r}var kg,Ng=(t(Ag,kg=Ig),Ag.prototype.run=function(){return p(this,void 0,void 0,function(){var e,n,r=this;return P(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return[4,Um(e=t.sent(),this.input,function(e){return p(r,void 0,void 0,function(){return P(this,function(t){switch(t.label){case 0:return[4,Promise.all(e.map(function(t){return Cg.faceExpressionNet.predictExpressions(t)}))];case 1:return[2,t.sent()]}})})},this.extractedFaces)];case 2:return n=t.sent(),[2,e.map(function(t,e){return hv(t,n[e])})]}})})},Ag.prototype.withAgeAndGender=function(){return new Hg(this,this.input)},Ag);function Ag(){return null!==kg&&kg.apply(this,arguments)||this}var Tg,Dg=(t(Fg,Tg=Ig),Fg.prototype.run=function(){return p(this,void 0,void 0,function(){var e,n;return P(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return(e=t.sent())?[4,Vm(e,this.input,function(t){return Cg.faceExpressionNet.predictExpressions(t)},this.extractedFaces)]:[2];case 2:return n=t.sent(),[2,hv(e,n)]}})})},Fg.prototype.withAgeAndGender=function(){return new $g(this,this.input)},Fg);function Fg(){return null!==Tg&&Tg.apply(this,arguments)||this}var Mg,Pg=(t(Og,Mg=Ng),Og.prototype.withAgeAndGender=function(){return new Yg(this,this.input)},Og.prototype.withFaceDescriptors=function(){return new iy(this,this.input)},Og);function Og(){return null!==Mg&&Mg.apply(this,arguments)||this}var Bg,Lg=(t(Wg,Bg=Dg),Wg.prototype.withAgeAndGender=function(){return new Zg(this,this.input)},Wg.prototype.withFaceDescriptor=function(){return new uy(this,this.input)},Wg);function Wg(){return null!==Bg&&Bg.apply(this,arguments)||this}var zg,Ug=(t(Vg,zg=Wm),Vg);function Vg(t,e,n){var r=zg.call(this)||this;return r.parentTask=t,r.input=e,r.extractedFaces=n,r}var Gg,Hg=(t(jg,Gg=Ug),jg.prototype.run=function(){return p(this,void 0,void 0,function(){var e,o,n=this;return P(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return[4,Um(e=t.sent(),this.input,function(e){return p(n,void 0,void 0,function(){return P(this,function(t){switch(t.label){case 0:return[4,Promise.all(e.map(function(t){return Cg.ageGenderNet.predictAgeAndGender(t)}))];case 1:return[2,t.sent()]}})})},this.extractedFaces)];case 2:return o=t.sent(),[2,e.map(function(t,e){var n=o[e],r=n.age;return vm(mm(t,n.gender,n.genderProbability),r)})]}})})},jg.prototype.withFaceExpressions=function(){return new Ng(this,this.input)},jg);function jg(){return null!==Gg&&Gg.apply(this,arguments)||this}var qg,$g=(t(Kg,qg=Ug),Kg.prototype.run=function(){return p(this,void 0,void 0,function(){var e,n,r,o,i;return P(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return(e=t.sent())?[4,Vm(e,this.input,function(t){return Cg.ageGenderNet.predictAgeAndGender(t)},this.extractedFaces)]:[2];case 2:return n=t.sent(),r=n.age,o=n.gender,i=n.genderProbability,[2,vm(mm(e,o,i),r)]}})})},Kg.prototype.withFaceExpressions=function(){return new Dg(this,this.input)},Kg);function Kg(){return null!==qg&&qg.apply(this,arguments)||this}var Xg,Yg=(t(Jg,Xg=Hg),Jg.prototype.withFaceExpressions=function(){return new Pg(this,this.input)},Jg.prototype.withFaceDescriptors=function(){return new iy(this,this.input)},Jg);function Jg(){return null!==Xg&&Xg.apply(this,arguments)||this}var Qg,Zg=(t(ty,Qg=$g),ty.prototype.withFaceExpressions=function(){return new Lg(this,this.input)},ty.prototype.withFaceDescriptor=function(){return new uy(this,this.input)},ty);function ty(){return null!==Qg&&Qg.apply(this,arguments)||this}var ey,ny=(t(ry,ey=Wm),ry);function ry(t,e){var n=ey.call(this)||this;return n.parentTask=t,n.input=e,n}var oy,iy=(t(ay,oy=ny),ay.prototype.run=function(){return p(this,void 0,void 0,function(){var n;return P(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return[4,Um(n=t.sent(),this.input,function(t){return Promise.all(t.map(function(t){return Cg.faceRecognitionNet.computeFaceDescriptor(t)}))},null,function(t){return t.landmarks.align(null,{useDlibAlignment:!0})})];case 2:return[2,t.sent().map(function(t,e){return dm(n[e],t)})]}})})},ay.prototype.withFaceExpressions=function(){return new Pg(this,this.input)},ay.prototype.withAgeAndGender=function(){return new Yg(this,this.input)},ay);function ay(){return null!==oy&&oy.apply(this,arguments)||this}var sy,uy=(t(cy,sy=ny),cy.prototype.run=function(){return p(this,void 0,void 0,function(){var e,n;return P(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return(e=t.sent())?[4,Vm(e,this.input,function(t){return Cg.faceRecognitionNet.computeFaceDescriptor(t)},null,function(t){return t.landmarks.align(null,{useDlibAlignment:!0})})]:[2];case 2:return n=t.sent(),[2,dm(e,n)]}})})},cy.prototype.withFaceExpressions=function(){return new Lg(this,this.input)},cy.prototype.withAgeAndGender=function(){return new Zg(this,this.input)},cy);function cy(){return null!==sy&&sy.apply(this,arguments)||this}var ly,hy=(t(py,ly=Wm),Object.defineProperty(py.prototype,"landmarkNet",{get:function(){return this.useTinyLandmarkNet?Cg.faceLandmark68TinyNet:Cg.faceLandmark68Net},enumerable:!0,configurable:!0}),py);function py(t,e,n){var r=ly.call(this)||this;return r.parentTask=t,r.input=e,r.useTinyLandmarkNet=n,r}var fy,dy=(t(vy,fy=hy),vy.prototype.run=function(){return p(this,void 0,void 0,function(){var e,n,r,o,i,a=this;return P(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return e=t.sent(),n=e.map(function(t){return t.detection}),this.input instanceof yt?[4,Vv(this.input,n)]:[3,3];case 2:return o=t.sent(),[3,5];case 3:return[4,Uv(this.input,n)];case 4:o=t.sent(),t.label=5;case 5:return r=o,[4,Promise.all(r.map(function(t){return a.landmarkNet.detectLandmarks(t)}))];case 6:return i=t.sent(),r.forEach(function(t){return t instanceof yt&&t.dispose()}),[2,e.map(function(t,e){return yv(t,i[e])})]}})})},vy.prototype.withFaceExpressions=function(){return new Pg(this,this.input)},vy.prototype.withAgeAndGender=function(){return new Yg(this,this.input)},vy.prototype.withFaceDescriptors=function(){return new iy(this,this.input)},vy);function vy(){return null!==fy&&fy.apply(this,arguments)||this}var my,gy=(t(yy,my=hy),yy.prototype.run=function(){return p(this,void 0,void 0,function(){var e,n,r,o,i;return P(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return(e=t.sent())?(n=e.detection,this.input instanceof yt?[4,Vv(this.input,[n])]:[3,3]):[2];case 2:return o=t.sent(),[3,5];case 3:return[4,Uv(this.input,[n])];case 4:o=t.sent(),t.label=5;case 5:return r=o,[4,this.landmarkNet.detectLandmarks(r[0])];case 6:return i=t.sent(),r.forEach(function(t){return t instanceof yt&&t.dispose()}),[2,yv(e,i)]}})})},yy.prototype.withFaceExpressions=function(){return new Lg(this,this.input)},yy.prototype.withAgeAndGender=function(){return new Zg(this,this.input)},yy.prototype.withFaceDescriptor=function(){return new uy(this,this.input)},yy);function yy(){return null!==my&&my.apply(this,arguments)||this}var xy,by=(t(wy,xy=Wm),wy);function wy(t,e){void 0===e&&(e=new Sm);var n=xy.call(this)||this;return n.input=t,n.options=e,n}var Cy,Ey=(t(_y,Cy=by),_y.prototype.run=function(){return p(this,void 0,void 0,function(){var e,n,r,o;return P(this,function(t){switch(t.label){case 0:return n=(e=this).input,(r=e.options)instanceof gm?[4,Cg.mtcnn.forward(n,r)]:[3,2];case 1:return[2,t.sent().map(function(t){return t.detection})];case 2:if(!(o=r instanceof Bm?function(t){return Cg.tinyFaceDetector.locateFaces(t,r)}:r instanceof Sm?function(t){return Cg.ssdMobilenetv1.locateFaces(t,r)}:r instanceof Dd?function(t){return Cg.tinyYolov2.locateFaces(t,r)}:null))throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return[2,o(n)]}})})},_y.prototype.runAndExtendWithFaceDetections=function(){var t=this;return new Promise(function(n){return p(t,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return[4,this.run()];case 1:return e=t.sent(),[2,n(e.map(function(t){return Gd({},t)}))]}})})})},_y.prototype.withFaceLandmarks=function(t){return void 0===t&&(t=!1),new dy(this.runAndExtendWithFaceDetections(),this.input,t)},_y.prototype.withFaceExpressions=function(){return new Ng(this.runAndExtendWithFaceDetections(),this.input)},_y.prototype.withAgeAndGender=function(){return new Hg(this.runAndExtendWithFaceDetections(),this.input)},_y);function _y(){return null!==Cy&&Cy.apply(this,arguments)||this}var Ry,Iy=(t(Sy,Ry=by),Sy.prototype.run=function(){return p(this,void 0,void 0,function(){var e,n;return P(this,function(t){switch(t.label){case 0:return[4,new Ey(this.input,this.options)];case 1:return e=t.sent(),n=e[0],e.forEach(function(t){t.score>n.score&&(n=t)}),[2,n]}})})},Sy.prototype.runAndExtendWithFaceDetection=function(){var t=this;return new Promise(function(n){return p(t,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return[4,this.run()];case 1:return e=t.sent(),[2,n(e?Gd({},e):void 0)]}})})})},Sy.prototype.withFaceLandmarks=function(t){return void 0===t&&(t=!1),new gy(this.runAndExtendWithFaceDetection(),this.input,t)},Sy.prototype.withFaceExpressions=function(){return new Dg(this.runAndExtendWithFaceDetection(),this.input)},Sy.prototype.withAgeAndGender=function(){return new $g(this.runAndExtendWithFaceDetection(),this.input)},Sy);function Sy(){return null!==Ry&&Ry.apply(this,arguments)||this}function ky(t,e){return void 0===e&&(e=new Sm),new Ey(t,e)}function Ny(e,n){return p(this,void 0,void 0,function(){return P(this,function(t){switch(t.label){case 0:return[4,ky(e,new Sm(n?{minConfidence:n}:{})).withFaceLandmarks().withFaceDescriptors()];case 1:return[2,t.sent()]}})})}var Ay=Ny;function Ty(t,e){if(t.length!==e.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");var n=Array.from(t),r=Array.from(e);return Math.sqrt(n.map(function(t,e){return t-r[e]}).reduce(function(t,e){return t+Math.pow(e,2)},0))}var Dy=(Object.defineProperty(Fy.prototype,"labeledDescriptors",{get:function(){return this._labeledDescriptors},enumerable:!0,configurable:!0}),Object.defineProperty(Fy.prototype,"distanceThreshold",{get:function(){return this._distanceThreshold},enumerable:!0,configurable:!0}),Fy.prototype.computeMeanDistance=function(e,t){return t.map(function(t){return Ty(t,e)}).reduce(function(t,e){return t+e},0)/(t.length||1)},Fy.prototype.matchDescriptor=function(r){var o=this;return this.labeledDescriptors.map(function(t){var e=t.descriptors,n=t.label;return new Bv(n,o.computeMeanDistance(r,e))}).reduce(function(t,e){return t.distance<e.distance?t:e})},Fy.prototype.findBestMatch=function(t){var e=this.matchDescriptor(t);return e.distance<this.distanceThreshold?e:new Bv("unknown",e.distance)},Fy.prototype.toJSON=function(){return{distanceThreshold:this.distanceThreshold,labeledDescriptors:this.labeledDescriptors.map(function(t){return t.toJSON()})}},Fy.fromJSON=function(t){return new Fy(t.labeledDescriptors.map(function(t){return Wv.fromJSON(t)}),t.distanceThreshold)},Fy);function Fy(t,e){void 0===e&&(e=.6),this._distanceThreshold=e;var n=Array.isArray(t)?t:[t];if(!n.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");function r(){return"person "+o++}var o=1;this._labeledDescriptors=n.map(function(t){if(t instanceof Wv)return t;if(t instanceof Float32Array)return new Wv(r(),[t]);if(t.descriptor&&t.descriptor instanceof Float32Array)return new Wv(r(),[t.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array | Array<LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array>")})}var My=M(M({},Hf),Cv);c.AgeGenderNet=Dv,c.BoundingBox=pf,c.Box=cf,c.ComposableTask=Wm,c.ComputeAllFaceDescriptorsTask=iy,c.ComputeFaceDescriptorsTaskBase=ny,c.ComputeSingleFaceDescriptorTask=uy,c.DetectAllFaceLandmarksTask=dy,c.DetectAllFacesTask=Ey,c.DetectFaceLandmarksTaskBase=hy,c.DetectFacesTaskBase=by,c.DetectSingleFaceLandmarksTask=gy,c.DetectSingleFaceTask=Iy,c.Dimensions=jp,c.FACE_EXPRESSION_LABELS=ov,c.FaceDetection=zd,c.FaceDetectionNet=Mm,c.FaceExpressionNet=uv,c.FaceExpressions=iv,c.FaceLandmark68Net=$v,c.FaceLandmark68TinyNet=Zv,c.FaceLandmarkNet=nm,c.FaceLandmarks=pv,c.FaceLandmarks5=Pv,c.FaceLandmarks68=vv,c.FaceMatch=Bv,c.FaceMatcher=Dy,c.FaceRecognitionNet=pm,c.LabeledBox=vf,c.LabeledFaceDescriptors=Wv,c.Mtcnn=ig,c.MtcnnOptions=gm,c.NetInput=dd,c.NeuralNetwork=gd,c.ObjectDetection=gf,c.Point=$p,c.PredictedBox=bf,c.Rect=_f,c.SsdMobilenetv1=Am,c.SsdMobilenetv1Options=Sm,c.TfjsImageRecognitionBase=Bd,c.TinyFaceDetector=lg,c.TinyFaceDetectorOptions=Bm,c.TinyYolov2=mg,c.allFaces=Ay,c.allFacesMtcnn=function(e,n){return void 0===n&&(n={}),p(this,void 0,void 0,function(){return P(this,function(t){switch(t.label){case 0:return[4,ky(e,new gm(n)).withFaceLandmarks().withFaceDescriptors()];case 1:return[2,t.sent()]}})})},c.allFacesSsdMobilenetv1=Ny,c.allFacesTinyYolov2=function(e,n){return void 0===n&&(n={}),p(this,void 0,void 0,function(){return P(this,function(t){switch(t.label){case 0:return[4,ky(e,new Dd(n)).withFaceLandmarks().withFaceDescriptors()];case 1:return[2,t.sent()]}})})},c.awaitMediaLoaded=nd,c.bufferToImage=rd,c.computeFaceDescriptor=function(t){return Cg.faceRecognitionNet.computeFaceDescriptor(t)},c.computeReshapedDimensions=rf,c.createCanvas=id,c.createCanvasFromMedia=ad,c.createFaceDetectionNet=function(t){return Dm(t)},c.createFaceRecognitionNet=function(t){var e=new pm;return e.extractWeights(t),e},c.createMtcnn=function(t){var e=new ig;return e.extractWeights(t),e},c.createSsdMobilenetv1=Dm,c.createTinyFaceDetector=function(t){var e=new lg;return e.extractWeights(t),e},c.createTinyYolov2=function(t,e){void 0===e&&(e=!0);var n=new mg(e);return n.extractWeights(t),n},c.detectAllFaces=ky,c.detectFaceLandmarks=xg,c.detectFaceLandmarksTiny=function(t){return Cg.faceLandmark68TinyNet.detectLandmarks(t)},c.detectLandmarks=Rg,c.detectSingleFace=function(t,e){return void 0===e&&(e=new Sm),new Iy(t,e)},c.draw=My,c.env=Pf,c.euclideanDistance=Ty,c.extendWithAge=vm,c.extendWithFaceDescriptor=dm,c.extendWithFaceDetection=Gd,c.extendWithFaceExpressions=hv,c.extendWithFaceLandmarks=yv,c.extendWithGender=mm,c.extractFaceTensors=Vv,c.extractFaces=Uv,c.fetchImage=function(r){return p(this,void 0,void 0,function(){var e,n;return P(this,function(t){switch(t.label){case 0:return[4,sd(r)];case 1:return[4,(e=t.sent()).blob()];case 2:if(!(n=t.sent()).type.startsWith("image/"))throw new Error("fetchImage - expected blob type to be of type image/*, instead have: "+n.type+", for url: "+e.url);return[2,rd(n)]}})})},c.fetchJson=ud,c.fetchNetWeights=function(n){return p(this,void 0,void 0,function(){var e;return P(this,function(t){switch(t.label){case 0:return e=Float32Array.bind,[4,sd(n)];case 1:return[4,t.sent().arrayBuffer()];case 2:return[2,new(e.apply(Float32Array,[void 0,t.sent()]))]}})})},c.fetchOrThrow=sd,c.getCenterPoint=of,c.getContext2dOrThrow=Bf,c.getMediaDimensions=od,c.imageTensorToCanvas=cd,c.imageToSquare=ld,c.inverseSigmoid=function(t){return Math.log(t/(1-t))},c.iou=xd,c.isDimensions=nf,c.isEven=tf,c.isFloat=Zp,c.isMediaElement=hd,c.isMediaLoaded=ed,c.isTensor=Xp,c.isTensor1D=function(t){return Xp(t,1)},c.isTensor2D=Yp,c.isTensor3D=Jp,c.isTensor4D=Qp,c.isValidNumber=sf,c.isValidProbablitiy=uf,c.isWithAge=function(t){return"number"==typeof t.age},c.isWithFaceDetection=Vd,c.isWithFaceExpressions=lv,c.isWithFaceLandmarks=gv,c.isWithGender=function(t){return(t.gender===c.Gender.MALE||t.gender===c.Gender.FEMALE)&&uf(t.genderProbability)},c.loadAgeGenderModel=function(t){return Cg.ageGenderNet.load(t)},c.loadFaceDetectionModel=Eg,c.loadFaceExpressionModel=function(t){return Cg.faceExpressionNet.load(t)},c.loadFaceLandmarkModel=function(t){return Cg.faceLandmark68Net.load(t)},c.loadFaceLandmarkTinyModel=function(t){return Cg.faceLandmark68TinyNet.load(t)},c.loadFaceRecognitionModel=function(t){return Cg.faceRecognitionNet.load(t)},c.loadMtcnnModel=function(t){return Cg.mtcnn.load(t)},c.loadSsdMobilenetv1Model=bg,c.loadTinyFaceDetectorModel=function(t){return Cg.tinyFaceDetector.load(t)},c.loadTinyYolov2Model=function(t){return Cg.tinyYolov2.load(t)},c.loadWeightMap=pd,c.locateFaces=_g,c.matchDimensions=function(t,e,n){void 0===n&&(n=!1);var r=n?od(e):e,o=r.width,i=r.height;return{width:t.width=o,height:t.height=i}},c.minBbox=function(t){var e=t.map(function(t){return t.x}),n=t.map(function(t){return t.y}),r=e.reduce(function(t,e){return e<t?e:t},1/0),o=n.reduce(function(t,e){return e<t?e:t},1/0),i=e.reduce(function(t,e){return t<e?e:t},0),a=n.reduce(function(t,e){return t<e?e:t},0);return new pf(r,o,i,a)},c.mtcnn=function(t,e){return Cg.mtcnn.forward(t,e)},c.nets=Cg,c.nonMaxSuppression=bd,c.normalize=wd,c.padToSquare=fd,c.predictAgeAndGender=function(t){return Cg.ageGenderNet.predictAgeAndGender(t)},c.range=af,c.recognizeFaceExpressions=function(t){return Cg.faceExpressionNet.predictExpressions(t)},c.resizeResults=function e(t,n){var r=new jp(n.width,n.height),o=r.width,i=r.height;if(o<=0||i<=0)throw new Error("resizeResults - invalid dimensions: "+JSON.stringify({width:o,height:i}));if(Array.isArray(t))return t.map(function(t){return e(t,{width:o,height:i})});if(gv(t)){var a=t.detection.forSize(o,i),s=t.unshiftedLandmarks.forSize(a.box.width,a.box.height);return yv(Gd(t,a),s)}return Vd(t)?Gd(t,t.detection.forSize(o,i)):t instanceof pv||t instanceof zd?t.forSize(o,i):t},c.resolveInput=Of,c.round=ef,c.shuffleArray=function(t){for(var e=t.slice(),n=e.length-1;0<n;n--){var r=Math.floor(Math.random()*(n+1)),o=e[n];e[n]=e[r],e[r]=o}return e},c.sigmoid=Cd,c.ssdMobilenetv1=yg,c.tf=Hp,c.tinyFaceDetector=function(t,e){return Cg.tinyFaceDetector.locateFaces(t,e)},c.tinyYolov2=function(t,e){return Cg.tinyYolov2.locateFaces(t,e)},c.toNetInput=md,Object.defineProperty(c,"__esModule",{value:!0})});