webcodecs-utils 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.cjs +21 -21
  2. package/dist/index.js +839 -806
  3. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Fn=require("lamejs"),Ai=require("mp4box");function Jn(t,e,i=30,n="good"){const d=t*e,o={low:.05,good:.08,high:.1,"very-high":.15},m=o[n]||o.good;return d*i*m}function En(t,e,i,n){const d=[{maxMacroblocks:99,maxBitrate:64e3,level:10},{maxMacroblocks:396,maxBitrate:192e3,level:11},{maxMacroblocks:396,maxBitrate:384e3,level:12},{maxMacroblocks:396,maxBitrate:768e3,level:13},{maxMacroblocks:396,maxBitrate:2e6,level:20},{maxMacroblocks:792,maxBitrate:4e6,level:21},{maxMacroblocks:1620,maxBitrate:4e6,level:22},{maxMacroblocks:1620,maxBitrate:1e7,level:30},{maxMacroblocks:3600,maxBitrate:14e6,level:31},{maxMacroblocks:5120,maxBitrate:2e7,level:32},{maxMacroblocks:8192,maxBitrate:2e7,level:40},{maxMacroblocks:8192,maxBitrate:5e7,level:41},{maxMacroblocks:8704,maxBitrate:5e7,level:42},{maxMacroblocks:22080,maxBitrate:135e6,level:50},{maxMacroblocks:36864,maxBitrate:24e7,level:51},{maxMacroblocks:36864,maxBitrate:24e7,level:52},{maxMacroblocks:139264,maxBitrate:24e7,level:60},{maxMacroblocks:139264,maxBitrate:48e7,level:61},{maxMacroblocks:139264,maxBitrate:8e8,level:62}],o=[{maxPictureSize:36864,maxBitrate:128e3,tier:"L",level:30},{maxPictureSize:122880,maxBitrate:15e5,tier:"L",level:60},{maxPictureSize:245760,maxBitrate:3e6,tier:"L",level:63},{maxPictureSize:552960,maxBitrate:6e6,tier:"L",level:90},{maxPictureSize:983040,maxBitrate:1e7,tier:"L",level:93},{maxPictureSize:2228224,maxBitrate:12e6,tier:"L",level:120},{maxPictureSize:2228224,maxBitrate:3e7,tier:"H",level:120},{maxPictureSize:2228224,maxBitrate:2e7,tier:"L",level:123},{maxPictureSize:2228224,maxBitrate:5e7,tier:"H",level:123},{maxPictureSize:8912896,maxBitrate:25e6,tier:"L",level:150},{maxPictureSize:8912896,maxBitrate:1e8,tier:"H",level:150},{maxPictureSize:8912896,maxBitrate:4e7,tier:"L",level:153},{maxPictureSize:8912896,maxBitrate:16e7,tier:"H",level:153},{maxPictureSize:8912896,maxBitrate:6e7,tier:"L",level:156},{maxPictureSize:8912896,maxBitrate:24e7,tier:"H",level:156},{maxPictureSize:35651584,maxBitrate:6e7,tier:"L",level:180},{maxPictureSize:35651584,maxBitrate:24e7,tier:"H",level:180},{maxPictureSize:35651584,maxBitrate:12e7,tier:"L",level:183},{maxPictureSize:35651584,maxBitrate:48e7,tier:"H",level:183},{maxPictureSize:35651584,maxBitrate:24e7,tier:"L",level:186},{maxPictureSize:35651584,maxBitrate:8e8,tier:"H",level:186}],m=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}],h=[{maxPictureSize:147456,maxBitrate:15e5,tier:"M",level:0},{maxPictureSize:278784,maxBitrate:3e6,tier:"M",level:1},{maxPictureSize:665856,maxBitrate:6e6,tier:"M",level:4},{maxPictureSize:1065024,maxBitrate:1e7,tier:"M",level:5},{maxPictureSize:2359296,maxBitrate:12e6,tier:"M",level:8},{maxPictureSize:2359296,maxBitrate:3e7,tier:"H",level:8},{maxPictureSize:2359296,maxBitrate:2e7,tier:"M",level:9},{maxPictureSize:2359296,maxBitrate:5e7,tier:"H",level:9},{maxPictureSize:8912896,maxBitrate:3e7,tier:"M",level:12},{maxPictureSize:8912896,maxBitrate:1e8,tier:"H",level:12},{maxPictureSize:8912896,maxBitrate:4e7,tier:"M",level:13},{maxPictureSize:8912896,maxBitrate:16e7,tier:"H",level:13},{maxPictureSize:8912896,maxBitrate:6e7,tier:"M",level:14},{maxPictureSize:8912896,maxBitrate:24e7,tier:"H",level:14},{maxPictureSize:35651584,maxBitrate:6e7,tier:"M",level:15},{maxPictureSize:35651584,maxBitrate:24e7,tier:"H",level:15},{maxPictureSize:35651584,maxBitrate:6e7,tier:"M",level:16},{maxPictureSize:35651584,maxBitrate:24e7,tier:"H",level:16},{maxPictureSize:35651584,maxBitrate:1e8,tier:"M",level:17},{maxPictureSize:35651584,maxBitrate:48e7,tier:"H",level:17},{maxPictureSize:35651584,maxBitrate:16e7,tier:"M",level:18},{maxPictureSize:35651584,maxBitrate:8e8,tier:"H",level:18},{maxPictureSize:35651584,maxBitrate:16e7,tier:"M",level:19},{maxPictureSize:35651584,maxBitrate:8e8,tier:"H",level:19}];function S(W){return W?W[W.length-1]:void 0}if(t==="avc"){const v=Math.ceil(e/16)*Math.ceil(i/16),Z=d.find(U=>v<=U.maxMacroblocks&&n<=U.maxBitrate)??S(d),O=Z?Z.level:0,w="64".padStart(2,"0"),N="00",J=O.toString(16).padStart(2,"0");return`avc1.${w}${N}${J}`}else if(t==="hevc"){const W="",Z="6",O=e*i,w=o.find(J=>O<=J.maxPictureSize&&n<=J.maxBitrate)??S(o);return`hev1.${W}1.${Z}.${w.tier}${w.level}.B0`}else{if(t==="vp8")return"vp8";if(t==="vp9"){const W="00",v=e*i,Z=m.find(w=>v<=w.maxPictureSize&&n<=w.maxBitrate)??S(m);return`vp09.${W}.${Z.level.toString().padStart(2,"0")}.08`}else if(t==="av1"){const v=e*i,Z=h.find(N=>v<=N.maxPictureSize&&n<=N.maxBitrate)??S(h);return`av01.0.${Z.level.toString().padStart(2,"0")}${Z.tier}.08`}}throw new TypeError(`Unhandled codec '${t}'.`)}class Nn{constructor(e,i={}){this.canvas=e,this.mode="webgpu",this.filterMode=i.filterMode||"linear",this.device=null,this.context=null,this.linearPipeline=null,this.bicubicPipeline=null,this.sampler=null,this.uniformBuffer=null,this.bitmapCtx=null}async init(){const e=navigator.platform.toLowerCase().includes("linux"),i=navigator.userAgent.toLowerCase().includes("firefox");if(e&&i){console.log("GPUDrawImage: Linux + Firefox detected, using ImageBitmapRenderer"),this.initBitmapRenderer(),this.mode="bitmap";return}if(navigator.gpu)try{await this.initWebGPU(),this.mode="webgpu",console.log("GPUDrawImage: Using WebGPU (zero-copy)");return}catch(n){console.warn("GPUDrawImage: WebGPU initialization failed, falling back to ImageBitmap",n)}this.initBitmapRenderer(),this.mode="bitmap",console.log("GPUDrawImage: Using ImageBitmapRenderer (fallback)")}async initWebGPU(){const e=await navigator.gpu.requestAdapter();if(!e||(this.device=await e.requestDevice(),!this.device)||(this.context=this.canvas.getContext("webgpu"),!this.context))return!1;const i=navigator.gpu.getPreferredCanvasFormat();this.context.configure({device:this.device,format:i,alphaMode:"opaque"}),this.sampler=this.device.createSampler({magFilter:"linear",minFilter:"linear"}),this.uniformBuffer=this.device.createBuffer({size:8,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});const n=`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Jn=require("lamejs"),Ai=require("mp4box");function En(t,e,i=30,n="good"){const d=t*e,o={low:.05,good:.08,high:.1,"very-high":.15},m=o[n]||o.good;return d*i*m}function Nn(t,e,i,n){const d=[{maxMacroblocks:99,maxBitrate:64e3,level:10},{maxMacroblocks:396,maxBitrate:192e3,level:11},{maxMacroblocks:396,maxBitrate:384e3,level:12},{maxMacroblocks:396,maxBitrate:768e3,level:13},{maxMacroblocks:396,maxBitrate:2e6,level:20},{maxMacroblocks:792,maxBitrate:4e6,level:21},{maxMacroblocks:1620,maxBitrate:4e6,level:22},{maxMacroblocks:1620,maxBitrate:1e7,level:30},{maxMacroblocks:3600,maxBitrate:14e6,level:31},{maxMacroblocks:5120,maxBitrate:2e7,level:32},{maxMacroblocks:8192,maxBitrate:2e7,level:40},{maxMacroblocks:8192,maxBitrate:5e7,level:41},{maxMacroblocks:8704,maxBitrate:5e7,level:42},{maxMacroblocks:22080,maxBitrate:135e6,level:50},{maxMacroblocks:36864,maxBitrate:24e7,level:51},{maxMacroblocks:36864,maxBitrate:24e7,level:52},{maxMacroblocks:139264,maxBitrate:24e7,level:60},{maxMacroblocks:139264,maxBitrate:48e7,level:61},{maxMacroblocks:139264,maxBitrate:8e8,level:62}],o=[{maxPictureSize:36864,maxBitrate:128e3,tier:"L",level:30},{maxPictureSize:122880,maxBitrate:15e5,tier:"L",level:60},{maxPictureSize:245760,maxBitrate:3e6,tier:"L",level:63},{maxPictureSize:552960,maxBitrate:6e6,tier:"L",level:90},{maxPictureSize:983040,maxBitrate:1e7,tier:"L",level:93},{maxPictureSize:2228224,maxBitrate:12e6,tier:"L",level:120},{maxPictureSize:2228224,maxBitrate:3e7,tier:"H",level:120},{maxPictureSize:2228224,maxBitrate:2e7,tier:"L",level:123},{maxPictureSize:2228224,maxBitrate:5e7,tier:"H",level:123},{maxPictureSize:8912896,maxBitrate:25e6,tier:"L",level:150},{maxPictureSize:8912896,maxBitrate:1e8,tier:"H",level:150},{maxPictureSize:8912896,maxBitrate:4e7,tier:"L",level:153},{maxPictureSize:8912896,maxBitrate:16e7,tier:"H",level:153},{maxPictureSize:8912896,maxBitrate:6e7,tier:"L",level:156},{maxPictureSize:8912896,maxBitrate:24e7,tier:"H",level:156},{maxPictureSize:35651584,maxBitrate:6e7,tier:"L",level:180},{maxPictureSize:35651584,maxBitrate:24e7,tier:"H",level:180},{maxPictureSize:35651584,maxBitrate:12e7,tier:"L",level:183},{maxPictureSize:35651584,maxBitrate:48e7,tier:"H",level:183},{maxPictureSize:35651584,maxBitrate:24e7,tier:"L",level:186},{maxPictureSize:35651584,maxBitrate:8e8,tier:"H",level:186}],m=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}],h=[{maxPictureSize:147456,maxBitrate:15e5,tier:"M",level:0},{maxPictureSize:278784,maxBitrate:3e6,tier:"M",level:1},{maxPictureSize:665856,maxBitrate:6e6,tier:"M",level:4},{maxPictureSize:1065024,maxBitrate:1e7,tier:"M",level:5},{maxPictureSize:2359296,maxBitrate:12e6,tier:"M",level:8},{maxPictureSize:2359296,maxBitrate:3e7,tier:"H",level:8},{maxPictureSize:2359296,maxBitrate:2e7,tier:"M",level:9},{maxPictureSize:2359296,maxBitrate:5e7,tier:"H",level:9},{maxPictureSize:8912896,maxBitrate:3e7,tier:"M",level:12},{maxPictureSize:8912896,maxBitrate:1e8,tier:"H",level:12},{maxPictureSize:8912896,maxBitrate:4e7,tier:"M",level:13},{maxPictureSize:8912896,maxBitrate:16e7,tier:"H",level:13},{maxPictureSize:8912896,maxBitrate:6e7,tier:"M",level:14},{maxPictureSize:8912896,maxBitrate:24e7,tier:"H",level:14},{maxPictureSize:35651584,maxBitrate:6e7,tier:"M",level:15},{maxPictureSize:35651584,maxBitrate:24e7,tier:"H",level:15},{maxPictureSize:35651584,maxBitrate:6e7,tier:"M",level:16},{maxPictureSize:35651584,maxBitrate:24e7,tier:"H",level:16},{maxPictureSize:35651584,maxBitrate:1e8,tier:"M",level:17},{maxPictureSize:35651584,maxBitrate:48e7,tier:"H",level:17},{maxPictureSize:35651584,maxBitrate:16e7,tier:"M",level:18},{maxPictureSize:35651584,maxBitrate:8e8,tier:"H",level:18},{maxPictureSize:35651584,maxBitrate:16e7,tier:"M",level:19},{maxPictureSize:35651584,maxBitrate:8e8,tier:"H",level:19}];function S(W){return W?W[W.length-1]:void 0}if(t==="avc"){const v=Math.ceil(e/16)*Math.ceil(i/16),Z=d.find(U=>v<=U.maxMacroblocks&&n<=U.maxBitrate)??S(d),O=Z?Z.level:0,w="64".padStart(2,"0"),N="00",J=O.toString(16).padStart(2,"0");return`avc1.${w}${N}${J}`}else if(t==="hevc"){const W="",Z="6",O=e*i,w=o.find(J=>O<=J.maxPictureSize&&n<=J.maxBitrate)??S(o);return`hev1.${W}1.${Z}.${w.tier}${w.level}.B0`}else{if(t==="vp8")return"vp8";if(t==="vp9"){const W="00",v=e*i,Z=m.find(w=>v<=w.maxPictureSize&&n<=w.maxBitrate)??S(m);return`vp09.${W}.${Z.level.toString().padStart(2,"0")}.08`}else if(t==="av1"){const v=e*i,Z=h.find(N=>v<=N.maxPictureSize&&n<=N.maxBitrate)??S(h);return`av01.0.${Z.level.toString().padStart(2,"0")}${Z.tier}.08`}}throw new TypeError(`Unhandled codec '${t}'.`)}class Pn{constructor(e,i={}){this.canvas=e,this.mode="webgpu",this.filterMode=i.filterMode||"linear",this.device=null,this.context=null,this.linearPipeline=null,this.bicubicPipeline=null,this.sampler=null,this.uniformBuffer=null,this.bitmapCtx=null}async init(){const e=navigator.platform.toLowerCase().includes("linux"),i=navigator.userAgent.toLowerCase().includes("firefox");if(e&&i){console.log("GPUDrawImage: Linux + Firefox detected, using ImageBitmapRenderer"),this.initBitmapRenderer(),this.mode="bitmap";return}if(navigator.gpu)try{await this.initWebGPU(),this.mode="webgpu",console.log("GPUDrawImage: Using WebGPU (zero-copy)");return}catch(n){console.warn("GPUDrawImage: WebGPU initialization failed, falling back to ImageBitmap",n)}this.initBitmapRenderer(),this.mode="bitmap",console.log("GPUDrawImage: Using ImageBitmapRenderer (fallback)")}async initWebGPU(){const e=await navigator.gpu.requestAdapter();if(!e||(this.device=await e.requestDevice(),!this.device)||(this.context=this.canvas.getContext("webgpu"),!this.context))return!1;const i=navigator.gpu.getPreferredCanvasFormat();this.context.configure({device:this.device,format:i,alphaMode:"opaque"}),this.sampler=this.device.createSampler({magFilter:"linear",minFilter:"linear"}),this.uniformBuffer=this.device.createBuffer({size:8,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});const n=`
2
2
  struct VertexOutput {
3
3
  @builtin(position) position: vec4f,
4
4
  @location(0) texCoord: vec2f,
@@ -79,8 +79,8 @@
79
79
 
80
80
  return result / weightSum;
81
81
  }
82
- `});return this.linearPipeline=this.device.createRenderPipeline({layout:"auto",vertex:{module:d,entryPoint:"vertexMain"},fragment:{module:d,entryPoint:"fragmentMain",targets:[{format:i}]},primitive:{topology:"triangle-list"}}),this.bicubicPipeline=this.device.createRenderPipeline({layout:"auto",vertex:{module:o,entryPoint:"vertexMain"},fragment:{module:o,entryPoint:"fragmentMain",targets:[{format:i}]},primitive:{topology:"triangle-list"}}),!0}initBitmapRenderer(){this.bitmapCtx=this.canvas.getContext("bitmaprenderer")}drawImage(e){if(this.mode==="webgpu")this.drawImageWebGPU(e);else if(this.mode==="bitmap")this.drawImageBitmap(e);else throw new Error("GPUDrawImage not initialized. Call init() first.")}drawImageWebGPU(e){const i=this.filterMode==="bicubic"?this.bicubicPipeline:this.linearPipeline,n=this.filterMode==="bicubic",d=[{binding:0,resource:this.device.importExternalTexture({source:e})}];if(n){const W=new Float32Array([e.displayWidth,e.displayHeight]);this.device.queue.writeBuffer(this.uniformBuffer,0,W),d.push({binding:1,resource:{buffer:this.uniformBuffer}})}else d.push({binding:1,resource:this.sampler});const o=this.device.createBindGroup({layout:i.getBindGroupLayout(0),entries:d}),m=this.device.createCommandEncoder(),h=this.context.getCurrentTexture().createView(),S=m.beginRenderPass({colorAttachments:[{view:h,clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]});S.setPipeline(i),S.setBindGroup(0,o),S.draw(6),S.end(),this.device.queue.submit([m.finish()])}async drawImageBitmap(e){const i=await createImageBitmap(e);this.bitmapCtx.transferFromImageBitmap(i)}getMode(){return this.mode}getFilterMode(){return this.filterMode}setFilterMode(e){if(e!=="linear"&&e!=="bicubic")throw new Error('Filter mode must be "linear" or "bicubic"');this.filterMode=e}destroy(){this.device&&this.device.destroy()}}function As(t){var i;const e=[];if((i=t.format)!=null&&i.includes("planar"))for(let n=0;n<t.numberOfChannels;n++){const d=new Float32Array(t.numberOfFrames);t.copyTo(d,{frameOffset:0,planeIndex:n}),e.push(d)}else{const n=new Float32Array(t.numberOfFrames*t.numberOfChannels);t.copyTo(n,{frameOffset:0,planeIndex:0});for(let d=0;d<t.numberOfChannels;d++){const o=new Float32Array(t.numberOfFrames);for(let m=0;m<t.numberOfFrames;m++)o[m]=n[m*t.numberOfChannels+d];e.push(o)}}return e}function bi(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function Ut(t){var e=t;this.ordinal=function(){return e}}Ut.STEREO=new Ut(0);Ut.JOINT_STEREO=new Ut(1);Ut.DUAL_CHANNEL=new Ut(2);Ut.MONO=new Ut(3);Ut.NOT_SET=new Ut(4);var Os=Ut;const Pn=bi(Os);function Un(t){return new Int8Array(t)}function zn(t){return new Int16Array(t)}function js(t){return new Int32Array(t)}function Qs(t){return new Float32Array(t)}function An(t){return new Float64Array(t)}function Ds(t){if(t.length==1)return Qs(t[0]);var e=t[0];t=t.slice(1);for(var i=[],n=0;n<e;n++)i.push(Ds(t));return i}function $s(t){if(t.length==1)return js(t[0]);var e=t[0];t=t.slice(1);for(var i=[],n=0;n<e;n++)i.push($s(t));return i}function qs(t){if(t.length==1)return zn(t[0]);var e=t[0];t=t.slice(1);for(var i=[],n=0;n<e;n++)i.push(qs(t));return i}function en(t){if(t.length==1)return new Array(t[0]);var e=t[0];t=t.slice(1);for(var i=[],n=0;n<e;n++)i.push(en(t));return i}var tn={};tn.fill=function(t,e,i,n){if(arguments.length==2)for(var d=0;d<t.length;d++)t[d]=arguments[1];else for(var d=e;d<i;d++)t[d]=n};var j0={};j0.arraycopy=function(t,e,i,n,d){for(var o=e+d;e<o;)i[n++]=t[e++]};j0.out={};j0.out.println=function(t){console.log(t)};j0.out.printf=function(){console.log.apply(console,arguments)};var pi={};pi.SQRT2=1.4142135623730951;pi.FAST_LOG10=function(t){return Math.log10(t)};pi.FAST_LOG10_X=function(t,e){return Math.log10(t)*e};function r0(t){this.ordinal=t}r0.short_block_allowed=new r0(0);r0.short_block_coupled=new r0(1);r0.short_block_dispensed=new r0(2);r0.short_block_forced=new r0(3);var sn={};sn.MAX_VALUE=34028235e31;function Kt(t){this.ordinal=t}Kt.vbr_off=new Kt(0);Kt.vbr_mt=new Kt(1);Kt.vbr_rh=new Kt(2);Kt.vbr_abr=new Kt(3);Kt.vbr_mtrh=new Kt(4);Kt.vbr_default=Kt.vbr_mtrh;var On=function(t){},it={System:j0,VbrMode:Kt,Float:sn,ShortBlock:r0,Util:pi,Arrays:tn,new_array_n:en,new_byte:Un,new_double:An,new_float:Qs,new_float_n:Ds,new_int:js,new_int_n:$s,new_short_n:qs,assert:On},Wi,ps;function jn(){if(ps)return Wi;ps=1;var t=it,e=t.System;t.VbrMode,t.Float,t.ShortBlock;var i=t.Util,n=t.Arrays;t.new_array_n,t.new_byte,t.new_double;var d=t.new_float;t.new_float_n,t.new_int,t.new_int_n,t.assert;var o=bt();function m(){var h=[-.1482523854003001,32.308141959636465,296.40344946382766,883.1344870032432,11113.947376231741,1057.2713659324597,305.7402417275812,30.825928907280012,3.8533188138216365,59.42900443849514,709.5899960123345,5281.91112291017,-5829.66483675846,-817.6293103748613,-76.91656988279972,-4.594269939176596,.9063471690191471,.1960342806591213,-.15466694054279598,34.324387823855965,301.8067566458425,817.599602898885,11573.795901679885,1181.2520595540152,321.59731579894424,31.232021761053772,3.7107095756221318,53.650946155329365,684.167428119626,5224.56624370173,-6366.391851890084,-908.9766368219582,-89.83068876699639,-5.411397422890401,.8206787908286602,.3901806440322567,-.16070888947830023,36.147034243915876,304.11815768187864,732.7429163887613,11989.60988270091,1300.012278487897,335.28490093152146,31.48816102859945,3.373875931311736,47.232241542899175,652.7371796173471,5132.414255594984,-6909.087078780055,-1001.9990371107289,-103.62185754286375,-6.104916304710272,.7416505462720353,.5805693545089249,-.16636367662261495,37.751650073343995,303.01103387567713,627.9747488785183,12358.763425278165,1412.2779918482834,346.7496836825721,31.598286663170416,3.1598635433980946,40.57878626349686,616.1671130880391,5007.833007176154,-7454.040671756168,-1095.7960341867115,-118.24411666465777,-6.818469345853504,.6681786379192989,.7653668647301797,-.1716176790982088,39.11551877123304,298.3413246578966,503.5259106886539,12679.589408408976,1516.5821921214542,355.9850766329023,31.395241710249053,2.9164211881972335,33.79716964664243,574.8943997801362,4853.234992253242,-7997.57021486075,-1189.7624067269965,-133.6444792601766,-7.7202770609839915,.5993769336819237,.9427934736519954,-.17645823955292173,40.21879108166477,289.9982036694474,359.3226160751053,12950.259102786438,1612.1013903507662,362.85067106591504,31.045922092242872,2.822222032597987,26.988862316190684,529.8996541764288,4671.371946949588,-8535.899136645805,-1282.5898586244496,-149.58553632943463,-8.643494270763135,.5345111359507916,1.111140466039205,-.36174739330527045,41.04429910497807,277.5463268268618,195.6386023135583,13169.43812144731,1697.6433561479398,367.40983966190305,30.557037410382826,2.531473372857427,20.070154905927314,481.50208566532336,4464.970341588308,-9065.36882077239,-1373.62841526722,-166.1660487028118,-9.58289321133207,.4729647758913199,1.268786568327291,-.36970682634889585,41.393213350082036,261.2935935556502,12.935476055240873,13336.131683328815,1772.508612059496,369.76534388639965,29.751323653701338,2.4023193045459172,13.304795348228817,430.5615775526625,4237.0568611071185,-9581.931701634761,-1461.6913552409758,-183.12733958476446,-10.718010163869403,.41421356237309503,1.414213562373095,-.37677560326535325,41.619486213528496,241.05423794991074,-187.94665032361226,13450.063605744153,1836.153896465782,369.4908799925761,29.001847876923147,2.0714759319987186,6.779591200894186,377.7767837205709,3990.386575512536,-10081.709459700915,-1545.947424837898,-200.3762958015653,-11.864482073055006,.3578057213145241,1.546020906725474,-.3829366947518991,41.1516456456653,216.47684307105183,-406.1569483347166,13511.136535077321,1887.8076599260432,367.3025214564151,28.136213436723654,1.913880671464418,.3829366947518991,323.85365704338597,3728.1472257487526,-10561.233882199509,-1625.2025997821418,-217.62525175416,-13.015432208941645,.3033466836073424,1.66293922460509,-.5822628872992417,40.35639251440489,188.20071124269245,-640.2706748618148,13519.21490106562,1927.6022433578062,362.8197642637487,26.968821921868447,1.7463817695935329,-5.62650678237171,269.3016715297017,3453.386536448852,-11016.145278780888,-1698.6569643425091,-234.7658734267683,-14.16351421663124,.2504869601913055,1.76384252869671,-.5887180101749253,39.23429103868072,155.76096234403798,-889.2492977967378,13475.470561874661,1955.0535223723712,356.4450994756727,25.894952980042156,1.5695032905781554,-11.181939564328772,214.80884394039484,3169.1640829158237,-11443.321309975563,-1765.1588461316153,-251.68908574481912,-15.49755935939164,.198912367379658,1.847759065022573,-.7912582233652842,37.39369355329111,119.699486012458,-1151.0956593239027,13380.446257078214,1970.3952110853447,348.01959814116185,24.731487364283044,1.3850130831637748,-16.421408865300393,161.05030052864092,2878.3322807850063,-11838.991423510031,-1823.985884688674,-268.2854986386903,-16.81724543849939,.1483359875383474,1.913880671464418,-.7960642926861912,35.2322109610459,80.01928065061526,-1424.0212633405113,13235.794061869668,1973.804052543835,337.9908651258184,23.289159354463873,1.3934255946442087,-21.099669467133474,108.48348407242611,2583.700758091299,-12199.726194855148,-1874.2780658979746,-284.2467154529415,-18.11369784385905,.09849140335716425,1.961570560806461,-.998795456205172,32.56307803611191,36.958364584370486,-1706.075448829146,13043.287458812016,1965.3831106103316,326.43182772364605,22.175018750622293,1.198638339011324,-25.371248002043963,57.53505923036915,2288.41886619975,-12522.674544337233,-1914.8400385312243,-299.26241273417224,-19.37805630698734,.04912684976946725,1.990369453344394,.035780907*i.SQRT2*.5/2384e-9,.017876148*i.SQRT2*.5/2384e-9,.003134727*i.SQRT2*.5/2384e-9,.002457142*i.SQRT2*.5/2384e-9,971317e-9*i.SQRT2*.5/2384e-9,218868e-9*i.SQRT2*.5/2384e-9,101566e-9*i.SQRT2*.5/2384e-9,13828e-9*i.SQRT2*.5/2384e-9,12804.797818791945,1945.5515939597317,313.4244966442953,20.801593959731544,1995.1556208053692,9.000838926174497,-29.20218120805369],S=[[2382191739347913e-28,6423305872147834e-28,9400849094049688e-28,1122435026096556e-27,1183840321267481e-27,1122435026096556e-27,940084909404969e-27,6423305872147839e-28,2382191739347918e-28,5456116108943412e-27,4878985199565852e-27,4240448995017367e-27,3559909094758252e-27,2858043359288075e-27,2156177623817898e-27,1475637723558783e-27,8371015190102974e-28,2599706096327376e-28,-5456116108943412e-27,-4878985199565852e-27,-4240448995017367e-27,-3559909094758252e-27,-2858043359288076e-27,-2156177623817898e-27,-1475637723558783e-27,-8371015190102975e-28,-2599706096327376e-28,-2382191739347923e-28,-6423305872147843e-28,-9400849094049696e-28,-1122435026096556e-27,-1183840321267481e-27,-1122435026096556e-27,-9400849094049694e-28,-642330587214784e-27,-2382191739347918e-28],[2382191739347913e-28,6423305872147834e-28,9400849094049688e-28,1122435026096556e-27,1183840321267481e-27,1122435026096556e-27,9400849094049688e-28,6423305872147841e-28,2382191739347918e-28,5456116108943413e-27,4878985199565852e-27,4240448995017367e-27,3559909094758253e-27,2858043359288075e-27,2156177623817898e-27,1475637723558782e-27,8371015190102975e-28,2599706096327376e-28,-5461314069809755e-27,-4921085770524055e-27,-4343405037091838e-27,-3732668368707687e-27,-3093523840190885e-27,-2430835727329465e-27,-1734679010007751e-27,-974825365660928e-27,-2797435120168326e-28,0,0,0,0,0,0,-2283748241799531e-28,-4037858874020686e-28,-2146547464825323e-28],[.1316524975873958,.414213562373095,.7673269879789602,1.091308501069271,1.303225372841206,1.56968557711749,1.920982126971166,2.414213562373094,3.171594802363212,4.510708503662055,7.595754112725146,22.90376554843115,.984807753012208,.6427876096865394,.3420201433256688,.9396926207859084,-.1736481776669303,-.7660444431189779,.8660254037844387,.5,-.5144957554275265,-.4717319685649723,-.3133774542039019,-.1819131996109812,-.09457419252642064,-.04096558288530405,-.01419856857247115,-.003699974673760037,.8574929257125442,.8817419973177052,.9496286491027329,.9833145924917901,.9955178160675857,.9991605581781475,.999899195244447,.9999931550702802],[0,0,0,0,0,0,2283748241799531e-28,4037858874020686e-28,2146547464825323e-28,5461314069809755e-27,4921085770524055e-27,4343405037091838e-27,3732668368707687e-27,3093523840190885e-27,2430835727329466e-27,1734679010007751e-27,974825365660928e-27,2797435120168326e-28,-5456116108943413e-27,-4878985199565852e-27,-4240448995017367e-27,-3559909094758253e-27,-2858043359288075e-27,-2156177623817898e-27,-1475637723558782e-27,-8371015190102975e-28,-2599706096327376e-28,-2382191739347913e-28,-6423305872147834e-28,-9400849094049688e-28,-1122435026096556e-27,-1183840321267481e-27,-1122435026096556e-27,-9400849094049688e-28,-6423305872147841e-28,-2382191739347918e-28]],W=S[o.SHORT_TYPE],v=S[o.SHORT_TYPE],Z=S[o.SHORT_TYPE],O=S[o.SHORT_TYPE],w=[0,1,16,17,8,9,24,25,4,5,20,21,12,13,28,29,2,3,18,19,10,11,26,27,6,7,22,23,14,15,30,31];function N(k,I,r){for(var K=10,X=I+238-14-286,A=-15;A<0;A++){var T,H,p;T=h[K+-10],H=k[X+-224]*T,p=k[I+224]*T,T=h[K+-9],H+=k[X+-160]*T,p+=k[I+160]*T,T=h[K+-8],H+=k[X+-96]*T,p+=k[I+96]*T,T=h[K+-7],H+=k[X+-32]*T,p+=k[I+32]*T,T=h[K+-6],H+=k[X+32]*T,p+=k[I+-32]*T,T=h[K+-5],H+=k[X+96]*T,p+=k[I+-96]*T,T=h[K+-4],H+=k[X+160]*T,p+=k[I+-160]*T,T=h[K+-3],H+=k[X+224]*T,p+=k[I+-224]*T,T=h[K+-2],H+=k[I+-256]*T,p-=k[X+256]*T,T=h[K+-1],H+=k[I+-192]*T,p-=k[X+192]*T,T=h[K+0],H+=k[I+-128]*T,p-=k[X+128]*T,T=h[K+1],H+=k[I+-64]*T,p-=k[X+64]*T,T=h[K+2],H+=k[I+0]*T,p-=k[X+0]*T,T=h[K+3],H+=k[I+64]*T,p-=k[X+-64]*T,T=h[K+4],H+=k[I+128]*T,p-=k[X+-128]*T,T=h[K+5],H+=k[I+192]*T,p-=k[X+-192]*T,H*=h[K+6],T=p-H,r[30+A*2]=p+H,r[31+A*2]=h[K+7]*T,K+=18,I--,X++}{var H,p,u,l;p=k[I+-16]*h[K+-10],H=k[I+-32]*h[K+-2],p+=(k[I+-48]-k[I+16])*h[K+-9],H+=k[I+-96]*h[K+-1],p+=(k[I+-80]+k[I+48])*h[K+-8],H+=k[I+-160]*h[K+0],p+=(k[I+-112]-k[I+80])*h[K+-7],H+=k[I+-224]*h[K+1],p+=(k[I+-144]+k[I+112])*h[K+-6],H-=k[I+32]*h[K+2],p+=(k[I+-176]-k[I+144])*h[K+-5],H-=k[I+96]*h[K+3],p+=(k[I+-208]+k[I+176])*h[K+-4],H-=k[I+160]*h[K+4],p+=(k[I+-240]-k[I+208])*h[K+-3],H-=k[I+224],u=H-p,l=H+p,p=r[14],H=r[15]-p,r[31]=l+p,r[30]=u+H,r[15]=u-H,r[14]=l-p}{var s;s=r[28]-r[0],r[0]+=r[28],r[28]=s*h[K+-2*18+7],s=r[29]-r[1],r[1]+=r[29],r[29]=s*h[K+-2*18+7],s=r[26]-r[2],r[2]+=r[26],r[26]=s*h[K+-4*18+7],s=r[27]-r[3],r[3]+=r[27],r[27]=s*h[K+-4*18+7],s=r[24]-r[4],r[4]+=r[24],r[24]=s*h[K+-6*18+7],s=r[25]-r[5],r[5]+=r[25],r[25]=s*h[K+-6*18+7],s=r[22]-r[6],r[6]+=r[22],r[22]=s*i.SQRT2,s=r[23]-r[7],r[7]+=r[23],r[23]=s*i.SQRT2-r[7],r[7]-=r[6],r[22]-=r[7],r[23]-=r[22],s=r[6],r[6]=r[31]-s,r[31]=r[31]+s,s=r[7],r[7]=r[30]-s,r[30]=r[30]+s,s=r[22],r[22]=r[15]-s,r[15]=r[15]+s,s=r[23],r[23]=r[14]-s,r[14]=r[14]+s,s=r[20]-r[8],r[8]+=r[20],r[20]=s*h[K+-10*18+7],s=r[21]-r[9],r[9]+=r[21],r[21]=s*h[K+-10*18+7],s=r[18]-r[10],r[10]+=r[18],r[18]=s*h[K+-12*18+7],s=r[19]-r[11],r[11]+=r[19],r[19]=s*h[K+-12*18+7],s=r[16]-r[12],r[12]+=r[16],r[16]=s*h[K+-14*18+7],s=r[17]-r[13],r[13]+=r[17],r[17]=s*h[K+-14*18+7],s=-r[20]+r[24],r[20]+=r[24],r[24]=s*h[K+-12*18+7],s=-r[21]+r[25],r[21]+=r[25],r[25]=s*h[K+-12*18+7],s=r[4]-r[8],r[4]+=r[8],r[8]=s*h[K+-12*18+7],s=r[5]-r[9],r[5]+=r[9],r[9]=s*h[K+-12*18+7],s=r[0]-r[12],r[0]+=r[12],r[12]=s*h[K+-4*18+7],s=r[1]-r[13],r[1]+=r[13],r[13]=s*h[K+-4*18+7],s=r[16]-r[28],r[16]+=r[28],r[28]=s*h[K+-4*18+7],s=-r[17]+r[29],r[17]+=r[29],r[29]=s*h[K+-4*18+7],s=i.SQRT2*(r[2]-r[10]),r[2]+=r[10],r[10]=s,s=i.SQRT2*(r[3]-r[11]),r[3]+=r[11],r[11]=s,s=i.SQRT2*(-r[18]+r[26]),r[18]+=r[26],r[26]=s-r[18],s=i.SQRT2*(-r[19]+r[27]),r[19]+=r[27],r[27]=s-r[19],s=r[2],r[19]-=r[3],r[3]-=s,r[2]=r[31]-s,r[31]+=s,s=r[3],r[11]-=r[19],r[18]-=s,r[3]=r[30]-s,r[30]+=s,s=r[18],r[27]-=r[11],r[19]-=s,r[18]=r[15]-s,r[15]+=s,s=r[19],r[10]-=s,r[19]=r[14]-s,r[14]+=s,s=r[10],r[11]-=s,r[10]=r[23]-s,r[23]+=s,s=r[11],r[26]-=s,r[11]=r[22]-s,r[22]+=s,s=r[26],r[27]-=s,r[26]=r[7]-s,r[7]+=s,s=r[27],r[27]=r[6]-s,r[6]+=s,s=i.SQRT2*(r[0]-r[4]),r[0]+=r[4],r[4]=s,s=i.SQRT2*(r[1]-r[5]),r[1]+=r[5],r[5]=s,s=i.SQRT2*(r[16]-r[20]),r[16]+=r[20],r[20]=s,s=i.SQRT2*(r[17]-r[21]),r[17]+=r[21],r[21]=s,s=-i.SQRT2*(r[8]-r[12]),r[8]+=r[12],r[12]=s-r[8],s=-i.SQRT2*(r[9]-r[13]),r[9]+=r[13],r[13]=s-r[9],s=-i.SQRT2*(r[25]-r[29]),r[25]+=r[29],r[29]=s-r[25],s=-i.SQRT2*(r[24]+r[28]),r[24]-=r[28],r[28]=s-r[24],s=r[24]-r[16],r[24]=s,s=r[20]-s,r[20]=s,s=r[28]-s,r[28]=s,s=r[25]-r[17],r[25]=s,s=r[21]-s,r[21]=s,s=r[29]-s,r[29]=s,s=r[17]-r[1],r[17]=s,s=r[9]-s,r[9]=s,s=r[25]-s,r[25]=s,s=r[5]-s,r[5]=s,s=r[21]-s,r[21]=s,s=r[13]-s,r[13]=s,s=r[29]-s,r[29]=s,s=r[1]-r[0],r[1]=s,s=r[16]-s,r[16]=s,s=r[17]-s,r[17]=s,s=r[8]-s,r[8]=s,s=r[9]-s,r[9]=s,s=r[24]-s,r[24]=s,s=r[25]-s,r[25]=s,s=r[4]-s,r[4]=s,s=r[5]-s,r[5]=s,s=r[20]-s,r[20]=s,s=r[21]-s,r[21]=s,s=r[12]-s,r[12]=s,s=r[13]-s,r[13]=s,s=r[28]-s,r[28]=s,s=r[29]-s,r[29]=s,s=r[0],r[0]+=r[31],r[31]-=s,s=r[1],r[1]+=r[30],r[30]-=s,s=r[16],r[16]+=r[15],r[15]-=s,s=r[17],r[17]+=r[14],r[14]-=s,s=r[8],r[8]+=r[23],r[23]-=s,s=r[9],r[9]+=r[22],r[22]-=s,s=r[24],r[24]+=r[7],r[7]-=s,s=r[25],r[25]+=r[6],r[6]-=s,s=r[4],r[4]+=r[27],r[27]-=s,s=r[5],r[5]+=r[26],r[26]-=s,s=r[20],r[20]+=r[11],r[11]-=s,s=r[21],r[21]+=r[10],r[10]-=s,s=r[12],r[12]+=r[19],r[19]-=s,s=r[13],r[13]+=r[18],r[18]-=s,s=r[28],r[28]+=r[3],r[3]-=s,s=r[29],r[29]+=r[2],r[2]-=s}}function J(k,I){for(var r=0;r<3;r++){var K,X,A,T,H,p;T=k[I+2*3]*S[o.SHORT_TYPE][0]-k[I+5*3],K=k[I+0*3]*S[o.SHORT_TYPE][2]-k[I+3*3],X=T+K,A=T-K,T=k[I+5*3]*S[o.SHORT_TYPE][0]+k[I+2*3],K=k[I+3*3]*S[o.SHORT_TYPE][2]+k[I+0*3],H=T+K,p=-T+K,K=(k[I+1*3]*S[o.SHORT_TYPE][1]-k[I+4*3])*2069978111953089e-26,T=(k[I+4*3]*S[o.SHORT_TYPE][1]+k[I+1*3])*2069978111953089e-26,k[I+3*0]=X*190752519173728e-25+K,k[I+3*5]=-H*190752519173728e-25+T,A=A*.8660254037844387*1907525191737281e-26,H=H*.5*1907525191737281e-26+T,k[I+3*1]=A-H,k[I+3*2]=A+H,X=X*.5*1907525191737281e-26-K,p=p*.8660254037844387*1907525191737281e-26,k[I+3*3]=X+p,k[I+3*4]=X-p,I++}}function U(k,I,r){var K,X;{var A,T,H,p,u,l,s,V;A=r[17]-r[9],H=r[15]-r[11],p=r[14]-r[12],u=r[0]+r[8],l=r[1]+r[7],s=r[2]+r[6],V=r[3]+r[5],k[I+17]=u+s-V-(l-r[4]),X=(u+s-V)*v[19]+(l-r[4]),K=(A-H-p)*v[18],k[I+5]=K+X,k[I+6]=K-X,T=(r[16]-r[10])*v[18],l=l*v[19]+r[4],K=A*v[12]+T+H*v[13]+p*v[14],X=-u*v[16]+l-s*v[17]+V*v[15],k[I+1]=K+X,k[I+2]=K-X,K=A*v[13]-T-H*v[14]+p*v[12],X=-u*v[17]+l-s*v[15]+V*v[16],k[I+9]=K+X,k[I+10]=K-X,K=A*v[14]-T+H*v[12]-p*v[13],X=u*v[15]-l+s*v[16]-V*v[17],k[I+13]=K+X,k[I+14]=K-X}{var _,R,f,j,g,P,a,c;_=r[8]-r[0],f=r[6]-r[2],j=r[5]-r[3],g=r[17]+r[9],P=r[16]+r[10],a=r[15]+r[11],c=r[14]+r[12],k[I+0]=g+a+c+(P+r[13]),K=(g+a+c)*v[19]-(P+r[13]),X=(_-f+j)*v[18],k[I+11]=K+X,k[I+12]=K-X,R=(r[7]-r[1])*v[18],P=r[13]-P*v[19],K=g*v[15]-P+a*v[16]+c*v[17],X=_*v[14]+R+f*v[12]+j*v[13],k[I+3]=K+X,k[I+4]=K-X,K=-g*v[17]+P-a*v[15]-c*v[16],X=_*v[13]+R-f*v[14]-j*v[12],k[I+7]=K+X,k[I+8]=K-X,K=-g*v[16]+P-a*v[17]-c*v[15],X=_*v[12]-R+f*v[13]-j*v[14],k[I+15]=K+X,k[I+16]=K-X}}this.mdct_sub48=function(k,I,r){for(var K=I,X=286,A=0;A<k.channels_out;A++){for(var T=0;T<k.mode_gr;T++){for(var H,p=k.l3_side.tt[T][A],u=p.xr,l=0,s=k.sb_sample[A][1-T],V=0,_=0;_<18/2;_++)for(N(K,X,s[V]),N(K,X+32,s[V+1]),V+=2,X+=64,H=1;H<32;H+=2)s[V-1][H]*=-1;for(H=0;H<32;H++,l+=18){var R=p.block_type,f=k.sb_sample[A][T],j=k.sb_sample[A][1-T];if(p.mixed_block_flag!=0&&H<2&&(R=0),k.amp_filter[H]<1e-12)n.fill(u,l+0,l+18,0);else{if(k.amp_filter[H]<1)for(var _=0;_<18;_++)j[_][w[H]]*=k.amp_filter[H];if(R==o.SHORT_TYPE){for(var _=-12/4;_<0;_++){var g=S[o.SHORT_TYPE][_+3];u[l+_*3+9]=f[9+_][w[H]]*g-f[8-_][w[H]],u[l+_*3+18]=f[14-_][w[H]]*g+f[15+_][w[H]],u[l+_*3+10]=f[15+_][w[H]]*g-f[14-_][w[H]],u[l+_*3+19]=j[2-_][w[H]]*g+j[3+_][w[H]],u[l+_*3+11]=j[3+_][w[H]]*g-j[2-_][w[H]],u[l+_*3+20]=j[8-_][w[H]]*g+j[9+_][w[H]]}J(u,l)}else{for(var P=d(18),_=-36/4;_<0;_++){var a,c;a=S[R][_+27]*j[_+9][w[H]]+S[R][_+36]*j[8-_][w[H]],c=S[R][_+9]*f[_+9][w[H]]-S[R][_+18]*f[8-_][w[H]],P[_+9]=a-c*W[3+_+9],P[_+18]=a*W[3+_+9]+c}U(u,l,P)}}if(R!=o.SHORT_TYPE&&H!=0)for(var _=7;_>=0;--_){var M,L;M=u[l+_]*Z[20+_]+u[l+-1-_]*O[28+_],L=u[l+_]*O[28+_]-u[l+-1-_]*Z[20+_],u[l+-1-_]=M,u[l+_]=L}}}if(K=r,X=286,k.mode_gr==1)for(var ee=0;ee<18;ee++)e.arraycopy(k.sb_sample[A][1][ee],0,k.sb_sample[A][0][ee],0,32)}}}return Wi=m,Wi}var Li,ys;function nn(){if(ys)return Li;ys=1;var t=bt(),e=it,i=e.System;e.VbrMode,e.Float,e.ShortBlock,e.Util,e.Arrays,e.new_array_n,e.new_byte,e.new_double;var n=e.new_float,d=e.new_float_n;e.new_int,e.new_int_n,e.assert;function o(){this.l=n(t.SBMAX_l),this.s=d([t.SBMAX_s,3]);var m=this;this.assign=function(h){i.arraycopy(h.l,0,m.l,0,t.SBMAX_l);for(var S=0;S<t.SBMAX_s;S++)for(var W=0;W<3;W++)m.s[S][W]=h.s[S][W]}}return Li=o,Li}var xi,fs;function Qn(){if(fs)return xi;fs=1;var t=nn();function e(){this.thm=new t,this.en=new t}return xi=e,xi}var Hi,Zs;function bt(){if(Zs)return Hi;Zs=1;var t=it,e=t.System,i=t.VbrMode;t.Float,t.ShortBlock,t.Util,t.Arrays;var n=t.new_array_n;t.new_byte,t.new_double;var d=t.new_float,o=t.new_float_n,m=t.new_int;t.new_int_n;var h=t.assert;S.ENCDELAY=576,S.POSTDELAY=1152,S.MDCTDELAY=48,S.FFTOFFSET=224+S.MDCTDELAY,S.DECDELAY=528,S.SBLIMIT=32,S.CBANDS=64,S.SBPSY_l=21,S.SBPSY_s=12,S.SBMAX_l=22,S.SBMAX_s=13,S.PSFB21=6,S.PSFB12=6,S.BLKSIZE=1024,S.HBLKSIZE=S.BLKSIZE/2+1,S.BLKSIZE_s=256,S.HBLKSIZE_s=S.BLKSIZE_s/2+1,S.NORM_TYPE=0,S.START_TYPE=1,S.SHORT_TYPE=2,S.STOP_TYPE=3,S.MPG_MD_LR_LR=0,S.MPG_MD_LR_I=1,S.MPG_MD_MS_LR=2,S.MPG_MD_MS_I=3,S.fircoef=[-.0207887*5,-.0378413*5,-.0432472*5,-.031183*5,779609e-23*5,.0467745*5,.10091*5,.151365*5,.187098*5];function S(){var W=jn(),v=Qn(),Z=S.FFTOFFSET,O=S.MPG_MD_MS_LR,w=null;this.psy=null;var N=null,J=null,U=null;this.setModules=function(X,A,T,H){w=X,this.psy=A,N=A,J=H,U=T};var k=new W;function I(X){var A,T;if(X.ATH.useAdjust==0){X.ATH.adjust=1;return}if(T=X.loudness_sq[0][0],A=X.loudness_sq[1][0],X.channels_out==2?(T+=X.loudness_sq[0][1],A+=X.loudness_sq[1][1]):(T+=T,A+=A),X.mode_gr==2&&(T=Math.max(T,A)),T*=.5,T*=X.ATH.aaSensitivityP,T>.03125)X.ATH.adjust>=1?X.ATH.adjust=1:X.ATH.adjust<X.ATH.adjustLimit&&(X.ATH.adjust=X.ATH.adjustLimit),X.ATH.adjustLimit=1;else{var H=31.98*T+625e-6;X.ATH.adjust>=H?(X.ATH.adjust*=H*.075+.925,X.ATH.adjust<H&&(X.ATH.adjust=H)):X.ATH.adjustLimit>=H?X.ATH.adjust=H:X.ATH.adjust<X.ATH.adjustLimit&&(X.ATH.adjust=X.ATH.adjustLimit),X.ATH.adjustLimit=H}}function r(X){var A,T;for(h(0<=X.bitrate_index&&X.bitrate_index<16),h(0<=X.mode_ext&&X.mode_ext<4),X.bitrate_stereoMode_Hist[X.bitrate_index][4]++,X.bitrate_stereoMode_Hist[15][4]++,X.channels_out==2&&(X.bitrate_stereoMode_Hist[X.bitrate_index][X.mode_ext]++,X.bitrate_stereoMode_Hist[15][X.mode_ext]++),A=0;A<X.mode_gr;++A)for(T=0;T<X.channels_out;++T){var H=X.l3_side.tt[A][T].block_type|0;X.l3_side.tt[A][T].mixed_block_flag!=0&&(H=4),X.bitrate_blockType_Hist[X.bitrate_index][H]++,X.bitrate_blockType_Hist[X.bitrate_index][5]++,X.bitrate_blockType_Hist[15][H]++,X.bitrate_blockType_Hist[15][5]++}}function K(X,A){var T=X.internal_flags,H,p;if(T.lame_encode_frame_init==0){var u,l,s=d(2014),V=d(2014);for(T.lame_encode_frame_init=1,u=0,l=0;u<286+576*(1+T.mode_gr);++u)u<576*T.mode_gr?(s[u]=0,T.channels_out==2&&(V[u]=0)):(s[u]=A[0][l],T.channels_out==2&&(V[u]=A[1][l]),++l);for(p=0;p<T.mode_gr;p++)for(H=0;H<T.channels_out;H++)T.l3_side.tt[p][H].block_type=S.SHORT_TYPE;k.mdct_sub48(T,s,V),h(576>=S.FFTOFFSET),h(T.mf_size>=S.BLKSIZE+X.framesize-S.FFTOFFSET),h(T.mf_size>=512+X.framesize-32)}}this.lame_encode_mp3_frame=function(X,A,T,H,p,u){var l,s=n([2,2]);s[0][0]=new v,s[0][1]=new v,s[1][0]=new v,s[1][1]=new v;var V=n([2,2]);V[0][0]=new v,V[0][1]=new v,V[1][0]=new v,V[1][1]=new v;var _,R=[null,null],f=X.internal_flags,j=o([2,4]),g=[.5,.5],P=[[0,0],[0,0]],a=[[0,0],[0,0]],c,M,L;if(R[0]=A,R[1]=T,f.lame_encode_frame_init==0&&K(X,R),f.padding=0,(f.slot_lag-=f.frac_SpF)<0&&(f.slot_lag+=X.out_samplerate,f.padding=1),f.psymodel!=0){var ee,ae=[null,null],le=0,re=m(2);for(L=0;L<f.mode_gr;L++){for(M=0;M<f.channels_out;M++)ae[M]=R[M],le=576+L*576-S.FFTOFFSET;if(X.VBR==i.vbr_mtrh||X.VBR==i.vbr_mt?ee=N.L3psycho_anal_vbr(X,ae,le,L,s,V,P[L],a[L],j[L],re):ee=N.L3psycho_anal_ns(X,ae,le,L,s,V,P[L],a[L],j[L],re),ee!=0)return-4;for(X.mode==MPEGMode.JOINT_STEREO&&(g[L]=j[L][2]+j[L][3],g[L]>0&&(g[L]=j[L][3]/g[L])),M=0;M<f.channels_out;M++){var _e=f.l3_side.tt[L][M];_e.block_type=re[M],_e.mixed_block_flag=0}}}else for(L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)f.l3_side.tt[L][M].block_type=S.NORM_TYPE,f.l3_side.tt[L][M].mixed_block_flag=0,a[L][M]=P[L][M]=700;if(I(f),k.mdct_sub48(f,R[0],R[1]),f.mode_ext=S.MPG_MD_LR_LR,X.force_ms)f.mode_ext=S.MPG_MD_MS_LR;else if(X.mode==MPEGMode.JOINT_STEREO){var he=0,oe=0;for(L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)he+=a[L][M],oe+=P[L][M];if(he<=1*oe){var Le=f.l3_side.tt[0],ze=f.l3_side.tt[f.mode_gr-1];Le[0].block_type==Le[1].block_type&&ze[0].block_type==ze[1].block_type&&(f.mode_ext=S.MPG_MD_MS_LR)}}if(f.mode_ext==O?(_=V,c=a):(_=s,c=P),X.analysis&&f.pinfo!=null)for(L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)f.pinfo.ms_ratio[L]=f.ms_ratio[L],f.pinfo.ms_ener_ratio[L]=g[L],f.pinfo.blocktype[L][M]=f.l3_side.tt[L][M].block_type,f.pinfo.pe[L][M]=c[L][M],e.arraycopy(f.l3_side.tt[L][M].xr,0,f.pinfo.xr[L][M],0,576),f.mode_ext==O&&(f.pinfo.ers[L][M]=f.pinfo.ers[L][M+2],e.arraycopy(f.pinfo.energy[L][M+2],0,f.pinfo.energy[L][M],0,f.pinfo.energy[L][M].length));if(X.VBR==i.vbr_off||X.VBR==i.vbr_abr){var We,we;for(We=0;We<18;We++)f.nsPsy.pefirbuf[We]=f.nsPsy.pefirbuf[We+1];for(we=0,L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)we+=c[L][M];for(f.nsPsy.pefirbuf[18]=we,we=f.nsPsy.pefirbuf[9],We=0;We<9;We++)we+=(f.nsPsy.pefirbuf[We]+f.nsPsy.pefirbuf[18-We])*S.fircoef[We];for(we=670*5*f.mode_gr*f.channels_out/we,L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)c[L][M]*=we}if(f.iteration_loop.iteration_loop(X,c,g,_),w.format_bitstream(X),l=w.copy_buffer(f,H,p,u,1),X.bWriteVbrTag&&J.addVbrFrame(X),X.analysis&&f.pinfo!=null){for(M=0;M<f.channels_out;M++){var Ke;for(Ke=0;Ke<Z;Ke++)f.pinfo.pcmdata[M][Ke]=f.pinfo.pcmdata[M][Ke+X.framesize];for(Ke=Z;Ke<1600;Ke++)f.pinfo.pcmdata[M][Ke]=R[M][Ke-Z]}U.set_frame_pinfo(X,_)}return r(f),l}}return Hi=S,Hi}var pt=it;pt.System;pt.VbrMode;pt.Float;pt.ShortBlock;var Xs=pt.Util;pt.Arrays;pt.new_array_n;pt.new_byte;pt.new_double;var _s=pt.new_float;pt.new_float_n;pt.new_int;pt.new_int_n;pt.assert;var Oe=bt();function Dn(){var t=_s(Oe.BLKSIZE),e=_s(Oe.BLKSIZE_s/2),i=[.9238795325112867,.3826834323650898,.9951847266721969,.0980171403295606,.9996988186962042,.02454122852291229,.9999811752826011,.006135884649154475];function n(o,m,h){var S=0,W,v,Z;h<<=1;var O=m+h;W=4;do{var w,N,J,U,k,I,r;r=W>>1,U=W,k=W<<1,I=k+U,W=k<<1,v=m,Z=v+r;do{var K,X,A,T;X=o[v+0]-o[v+U],K=o[v+0]+o[v+U],T=o[v+k]-o[v+I],A=o[v+k]+o[v+I],o[v+k]=K-A,o[v+0]=K+A,o[v+I]=X-T,o[v+U]=X+T,X=o[Z+0]-o[Z+U],K=o[Z+0]+o[Z+U],T=Xs.SQRT2*o[Z+I],A=Xs.SQRT2*o[Z+k],o[Z+k]=K-A,o[Z+0]=K+A,o[Z+I]=X-T,o[Z+U]=X+T,Z+=W,v+=W}while(v<O);for(N=i[S+0],w=i[S+1],J=1;J<r;J++){var H,p;H=1-2*w*w,p=2*w*N,v=m+J,Z=m+U-J;do{var u,l,s,K,X,V,A,_,T,R;l=p*o[v+U]-H*o[Z+U],u=H*o[v+U]+p*o[Z+U],X=o[v+0]-u,K=o[v+0]+u,V=o[Z+0]-l,s=o[Z+0]+l,l=p*o[v+I]-H*o[Z+I],u=H*o[v+I]+p*o[Z+I],T=o[v+k]-u,A=o[v+k]+u,R=o[Z+k]-l,_=o[Z+k]+l,l=w*A-N*R,u=N*A+w*R,o[v+k]=K-u,o[v+0]=K+u,o[Z+I]=V-l,o[Z+U]=V+l,l=N*_-w*T,u=w*_+N*T,o[Z+k]=s-u,o[Z+0]=s+u,o[v+I]=X-l,o[v+U]=X+l,Z+=W,v+=W}while(v<O);H=N,N=H*i[S+0]-w*i[S+1],w=H*i[S+1]+w*i[S+0]}S+=2}while(W<h)}var d=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254];this.fft_short=function(o,m,h,S,W){for(var v=0;v<3;v++){var Z=Oe.BLKSIZE_s/2,O=65535&576/3*(v+1),w=Oe.BLKSIZE_s/8-1;do{var N,J,U,k,I,r=d[w<<2]&255;N=e[r]*S[h][W+r+O],I=e[127-r]*S[h][W+r+O+128],J=N-I,N=N+I,U=e[r+64]*S[h][W+r+O+64],I=e[63-r]*S[h][W+r+O+192],k=U-I,U=U+I,Z-=4,m[v][Z+0]=N+U,m[v][Z+2]=N-U,m[v][Z+1]=J+k,m[v][Z+3]=J-k,N=e[r+1]*S[h][W+r+O+1],I=e[126-r]*S[h][W+r+O+129],J=N-I,N=N+I,U=e[r+65]*S[h][W+r+O+65],I=e[62-r]*S[h][W+r+O+193],k=U-I,U=U+I,m[v][Z+Oe.BLKSIZE_s/2+0]=N+U,m[v][Z+Oe.BLKSIZE_s/2+2]=N-U,m[v][Z+Oe.BLKSIZE_s/2+1]=J+k,m[v][Z+Oe.BLKSIZE_s/2+3]=J-k}while(--w>=0);n(m[v],Z,Oe.BLKSIZE_s/2)}},this.fft_long=function(o,m,h,S,W){var v=Oe.BLKSIZE/8-1,Z=Oe.BLKSIZE/2;do{var O,w,N,J,U,k=d[v]&255;O=t[k]*S[h][W+k],U=t[k+512]*S[h][W+k+512],w=O-U,O=O+U,N=t[k+256]*S[h][W+k+256],U=t[k+768]*S[h][W+k+768],J=N-U,N=N+U,Z-=4,m[Z+0]=O+N,m[Z+2]=O-N,m[Z+1]=w+J,m[Z+3]=w-J,O=t[k+1]*S[h][W+k+1],U=t[k+513]*S[h][W+k+513],w=O-U,O=O+U,N=t[k+257]*S[h][W+k+257],U=t[k+769]*S[h][W+k+769],J=N-U,N=N+U,m[Z+Oe.BLKSIZE/2+0]=O+N,m[Z+Oe.BLKSIZE/2+2]=O-N,m[Z+Oe.BLKSIZE/2+1]=w+J,m[Z+Oe.BLKSIZE/2+3]=w-J}while(--v>=0);n(m,Z,Oe.BLKSIZE/2)},this.init_fft=function(o){for(var m=0;m<Oe.BLKSIZE;m++)t[m]=.42-.5*Math.cos(2*Math.PI*(m+.5)/Oe.BLKSIZE)+.08*Math.cos(4*Math.PI*(m+.5)/Oe.BLKSIZE);for(var m=0;m<Oe.BLKSIZE_s/2;m++)e[m]=.5*(1-Math.cos(2*Math.PI*(m+.5)/Oe.BLKSIZE_s))}}var $n=Dn,yt=it;yt.System;var W0=yt.VbrMode,Ss=yt.Float,L0=yt.ShortBlock,mt=yt.Util,qn=yt.Arrays;yt.new_array_n;yt.new_byte;yt.new_double;var je=yt.new_float,kt=yt.new_float_n,h0=yt.new_int;yt.new_int_n;var ue=yt.assert,er=$n,D=bt();function tr(){var t=new er,e=2.302585092994046,i=2,n=16,d=2,o=16,m=.34,h=1/(14752*14752)/(D.BLKSIZE/2),S=.01,W=.8,v=.6,Z=.3,O=3.5,w=21,N=.2302585093;function J(b){return b}function U(b,y){for(var x=0,Y=0;Y<D.BLKSIZE/2;++Y)x+=b[Y]*y.ATH.eql_w[Y];return x*=h,x}function k(b,y,x,Y,F,G,C,E,B,$,z){var q=b.internal_flags;if(B<2)t.fft_long(q,Y[F],B,$,z),t.fft_short(q,G[C],B,$,z);else if(B==2){for(var ce=D.BLKSIZE-1;ce>=0;--ce){var Ze=Y[F+0][ce],ie=Y[F+1][ce];Y[F+0][ce]=(Ze+ie)*mt.SQRT2*.5,Y[F+1][ce]=(Ze-ie)*mt.SQRT2*.5}for(var fe=2;fe>=0;--fe)for(var ce=D.BLKSIZE_s-1;ce>=0;--ce){var Ze=G[C+0][fe][ce],ie=G[C+1][fe][ce];G[C+0][fe][ce]=(Ze+ie)*mt.SQRT2*.5,G[C+1][fe][ce]=(Ze-ie)*mt.SQRT2*.5}}y[0]=Y[F+0][0],y[0]*=y[0];for(var ce=D.BLKSIZE/2-1;ce>=0;--ce){var Q=Y[F+0][D.BLKSIZE/2-ce],be=Y[F+0][D.BLKSIZE/2+ce];y[D.BLKSIZE/2-ce]=(Q*Q+be*be)*.5}for(var fe=2;fe>=0;--fe){x[fe][0]=G[C+0][fe][0],x[fe][0]*=x[fe][0];for(var ce=D.BLKSIZE_s/2-1;ce>=0;--ce){var Q=G[C+0][fe][D.BLKSIZE_s/2-ce],be=G[C+0][fe][D.BLKSIZE_s/2+ce];x[fe][D.BLKSIZE_s/2-ce]=(Q*Q+be*be)*.5}}{for(var Re=0,ce=11;ce<D.HBLKSIZE;ce++)Re+=y[ce];q.tot_ener[B]=Re}if(b.analysis){for(var ce=0;ce<D.HBLKSIZE;ce++)q.pinfo.energy[E][B][ce]=q.pinfo.energy_save[B][ce],q.pinfo.energy_save[B][ce]=y[ce];q.pinfo.pe[E][B]=q.pe[B]}b.athaa_loudapprox==2&&B<2&&(q.loudness_sq[E][B]=q.loudness_sq_save[B],q.loudness_sq_save[B]=U(y,q))}var I=8,r=23,K=15,X,A,T,H=[1,.79433,.63096,.63096,.63096,.63096,.63096,.25119,.11749];function p(){X=Math.pow(10,(I+1)/16),A=Math.pow(10,(r+1)/16),T=Math.pow(10,K/10)}var u=[3.3246*3.3246,3.23837*3.23837,3.15437*3.15437,3.00412*3.00412,2.86103*2.86103,2.65407*2.65407,2.46209*2.46209,2.284*2.284,2.11879*2.11879,1.96552*1.96552,1.82335*1.82335,1.69146*1.69146,1.56911*1.56911,1.46658*1.46658,1.37074*1.37074,1.31036*1.31036,1.25264*1.25264,1.20648*1.20648,1.16203*1.16203,1.12765*1.12765,1.09428*1.09428,1.0659*1.0659,1.03826*1.03826,1.01895*1.01895,1],l=[1.33352*1.33352,1.35879*1.35879,1.38454*1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537,1.30382*1.30382,1.22321*1.22321,1.14758*1.14758,1],s=[2.35364*2.35364,2.29259*2.29259,2.23313*2.23313,2.12675*2.12675,2.02545*2.02545,1.87894*1.87894,1.74303*1.74303,1.61695*1.61695,1.49999*1.49999,1.39148*1.39148,1.29083*1.29083,1.19746*1.19746,1.11084*1.11084,1.03826*1.03826];function V(b,y,x,Y,F,G){var C;if(y>b)if(y<b*A)C=y/b;else return b+y;else{if(b>=y*A)return b+y;C=b/y}if(ue(b>=0),ue(y>=0),b+=y,Y+3<=6){if(C>=X)return b;var E=0|mt.FAST_LOG10_X(C,16);return b*l[E]}var E=0|mt.FAST_LOG10_X(C,16);if(y=F.ATH.cb_l[x]*F.ATH.adjust,ue(y>=0),b<T*y){if(b>y){var B,$;return B=1,E<=13&&(B=s[E]),$=mt.FAST_LOG10_X(b/y,10/15),b*((u[E]-B)*$+B)}return E>13?b:b*s[E]}return b*u[E]}var _=[1.33352*1.33352,1.35879*1.35879,1.38454*1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537,1.30382*1.30382,1.22321*1.22321,1.14758*1.14758,1];function R(b,y,x){var Y;if(b<0&&(b=0),y<0&&(y=0),b<=0)return y;if(y<=0)return b;if(y>b?Y=y/b:Y=b/y,-2<=x&&x<=2){if(Y>=X)return b+y;var F=0|mt.FAST_LOG10_X(Y,16);return(b+y)*_[F]}return Y<A?b+y:(b<y&&(b=y),b)}function f(b,y){var x=b.internal_flags;if(x.channels_out>1){for(var Y=0;Y<D.SBMAX_l;Y++){var F=x.thm[0].l[Y],G=x.thm[1].l[Y];x.thm[0].l[Y]+=G*y,x.thm[1].l[Y]+=F*y}for(var Y=0;Y<D.SBMAX_s;Y++)for(var C=0;C<3;C++){var F=x.thm[0].s[Y][C],G=x.thm[1].s[Y][C];x.thm[0].s[Y][C]+=G*y,x.thm[1].s[Y][C]+=F*y}}}function j(b){for(var y=0;y<D.SBMAX_l;y++)if(!(b.thm[0].l[y]>1.58*b.thm[1].l[y]||b.thm[1].l[y]>1.58*b.thm[0].l[y])){var x=b.mld_l[y]*b.en[3].l[y],Y=Math.max(b.thm[2].l[y],Math.min(b.thm[3].l[y],x));x=b.mld_l[y]*b.en[2].l[y];var F=Math.max(b.thm[3].l[y],Math.min(b.thm[2].l[y],x));b.thm[2].l[y]=Y,b.thm[3].l[y]=F}for(var y=0;y<D.SBMAX_s;y++)for(var G=0;G<3;G++)if(!(b.thm[0].s[y][G]>1.58*b.thm[1].s[y][G]||b.thm[1].s[y][G]>1.58*b.thm[0].s[y][G])){var x=b.mld_s[y]*b.en[3].s[y][G],Y=Math.max(b.thm[2].s[y][G],Math.min(b.thm[3].s[y][G],x));x=b.mld_s[y]*b.en[2].s[y][G];var F=Math.max(b.thm[3].s[y][G],Math.min(b.thm[2].s[y][G],x));b.thm[2].s[y][G]=Y,b.thm[3].s[y][G]=F}}function g(b,y,x){var Y=y,F=Math.pow(10,x);y*=2,Y*=2;for(var G=0;G<D.SBMAX_l;G++){var C,E,B,$;if($=b.ATH.cb_l[b.bm_l[G]]*F,C=Math.min(Math.max(b.thm[0].l[G],$),Math.max(b.thm[1].l[G],$)),E=Math.max(b.thm[2].l[G],$),B=Math.max(b.thm[3].l[G],$),C*y<E+B){var z=C*Y/(E+B);E*=z,B*=z,ue(E+B>0)}b.thm[2].l[G]=Math.min(E,b.thm[2].l[G]),b.thm[3].l[G]=Math.min(B,b.thm[3].l[G])}F*=D.BLKSIZE_s/D.BLKSIZE;for(var G=0;G<D.SBMAX_s;G++)for(var q=0;q<3;q++){var C,E,B,$;if($=b.ATH.cb_s[b.bm_s[G]]*F,C=Math.min(Math.max(b.thm[0].s[G][q],$),Math.max(b.thm[1].s[G][q],$)),E=Math.max(b.thm[2].s[G][q],$),B=Math.max(b.thm[3].s[G][q],$),C*y<E+B){var z=C*y/(E+B);E*=z,B*=z,ue(E+B>0)}b.thm[2].s[G][q]=Math.min(b.thm[2].s[G][q],E),b.thm[3].s[G][q]=Math.min(b.thm[3].s[G][q],B)}}function P(b,y,x,Y,F){var G,C,E=0,B=0;for(G=C=0;G<D.SBMAX_s;++C,++G){for(var $=b.bo_s[G],z=b.npart_s,q=$<z?$:z;C<q;)ue(y[C]>=0),ue(x[C]>=0),E+=y[C],B+=x[C],C++;if(b.en[Y].s[G][F]=E,b.thm[Y].s[G][F]=B,C>=z){++G;break}ue(y[C]>=0),ue(x[C]>=0);{var ce=b.PSY.bo_s_weight[G],Ze=1-ce;E=ce*y[C],B=ce*x[C],b.en[Y].s[G][F]+=E,b.thm[Y].s[G][F]+=B,E=Ze*y[C],B=Ze*x[C]}}for(;G<D.SBMAX_s;++G)b.en[Y].s[G][F]=0,b.thm[Y].s[G][F]=0}function a(b,y,x,Y){var F,G,C=0,E=0;for(F=G=0;F<D.SBMAX_l;++G,++F){for(var B=b.bo_l[F],$=b.npart_l,z=B<$?B:$;G<z;)ue(y[G]>=0),ue(x[G]>=0),C+=y[G],E+=x[G],G++;if(b.en[Y].l[F]=C,b.thm[Y].l[F]=E,G>=$){++F;break}ue(y[G]>=0),ue(x[G]>=0);{var q=b.PSY.bo_l_weight[F],ce=1-q;C=q*y[G],E=q*x[G],b.en[Y].l[F]+=C,b.thm[Y].l[F]+=E,C=ce*y[G],E=ce*x[G]}}for(;F<D.SBMAX_l;++F)b.en[Y].l[F]=0,b.thm[Y].l[F]=0}function c(b,y,x,Y,F,G){var C=b.internal_flags,E,B;for(B=E=0;B<C.npart_s;++B){for(var $=0,z=C.numlines_s[B],q=0;q<z;++q,++E){var ce=y[G][E];$+=ce}x[B]=$}for(ue(B==C.npart_s),ue(E==129),E=B=0;B<C.npart_s;B++){var Ze=C.s3ind_s[B][0],ie=C.s3_ss[E++]*x[Ze];for(++Ze;Ze<=C.s3ind_s[B][1];)ie+=C.s3_ss[E]*x[Ze],++E,++Ze;{var fe=d*C.nb_s1[F][B];Y[B]=Math.min(ie,fe)}if(C.blocktype_old[F&1]==D.SHORT_TYPE){var fe=o*C.nb_s2[F][B],Q=Y[B];Y[B]=Math.min(fe,Q)}C.nb_s2[F][B]=C.nb_s1[F][B],C.nb_s1[F][B]=ie,ue(Y[B]>=0)}for(;B<=D.CBANDS;++B)x[B]=0,Y[B]=0}function M(b,y,x,Y){var F=b.internal_flags;b.short_blocks==L0.short_block_coupled&&!(y[0]!=0&&y[1]!=0)&&(y[0]=y[1]=0);for(var G=0;G<F.channels_out;G++)Y[G]=D.NORM_TYPE,b.short_blocks==L0.short_block_dispensed&&(y[G]=1),b.short_blocks==L0.short_block_forced&&(y[G]=0),y[G]!=0?(ue(F.blocktype_old[G]!=D.START_TYPE),F.blocktype_old[G]==D.SHORT_TYPE&&(Y[G]=D.STOP_TYPE)):(Y[G]=D.SHORT_TYPE,F.blocktype_old[G]==D.NORM_TYPE&&(F.blocktype_old[G]=D.START_TYPE),F.blocktype_old[G]==D.STOP_TYPE&&(F.blocktype_old[G]=D.SHORT_TYPE)),x[G]=F.blocktype_old[G],F.blocktype_old[G]=Y[G]}function L(b,y,x){return x>=1?b:x<=0?y:y>0?Math.pow(b/y,x)*y:0}var ee=[11.8,13.6,17.2,32,46.5,51.3,57.5,67.1,71.5,84.6,97.6,130];function ae(b,y){for(var x=309.07,Y=0;Y<D.SBMAX_s-1;Y++)for(var F=0;F<3;F++){var G=b.thm.s[Y][F];if(ue(Y<ee.length),G>0){var C=G*y,E=b.en.s[Y][F];E>C&&(E>C*1e10?x+=ee[Y]*(10*e):(ue(C>0),x+=ee[Y]*mt.FAST_LOG10(E/C)))}}return x}var le=[6.8,5.8,5.8,6.4,6.5,9.9,12.1,14.4,15,18.9,21.6,26.9,34.2,40.2,46.8,56.5,60.7,73.9,85.7,93.4,126.1];function re(b,y){for(var x=281.0575,Y=0;Y<D.SBMAX_l-1;Y++){var F=b.thm.l[Y];if(ue(Y<le.length),F>0){var G=F*y,C=b.en.l[Y];C>G&&(C>G*1e10?x+=le[Y]*(10*e):(ue(G>0),x+=le[Y]*mt.FAST_LOG10(C/G)))}}return x}function _e(b,y,x,Y,F){var G,C;for(G=C=0;G<b.npart_l;++G){var E=0,B=0,$;for($=0;$<b.numlines_l[G];++$,++C){var z=y[C];ue(z>=0),E+=z,B<z&&(B=z)}x[G]=E,Y[G]=B,F[G]=E*b.rnumlines_l[G],ue(b.rnumlines_l[G]>=0),ue(E>=0),ue(x[G]>=0),ue(Y[G]>=0),ue(F[G]>=0)}}function he(b,y,x,Y){var F=H.length-1,G=0,C=x[G]+x[G+1];if(ue(C>=0),C>0){var E=y[G];E<y[G+1]&&(E=y[G+1]),ue(b.numlines_l[G]+b.numlines_l[G+1]-1>0),C=20*(E*2-C)/(C*(b.numlines_l[G]+b.numlines_l[G+1]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;for(G=1;G<b.npart_l-1;G++)if(C=x[G-1]+x[G]+x[G+1],ue(C>=0),C>0){var E=y[G-1];E<y[G]&&(E=y[G]),E<y[G+1]&&(E=y[G+1]),ue(b.numlines_l[G-1]+b.numlines_l[G]+b.numlines_l[G+1]-1>0),C=20*(E*3-C)/(C*(b.numlines_l[G-1]+b.numlines_l[G]+b.numlines_l[G+1]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;if(ue(G>0),ue(G==b.npart_l-1),C=x[G-1]+x[G],ue(C>=0),C>0){var E=y[G-1];E<y[G]&&(E=y[G]),ue(b.numlines_l[G-1]+b.numlines_l[G]-1>0),C=20*(E*2-C)/(C*(b.numlines_l[G-1]+b.numlines_l[G]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;ue(G==b.npart_l-1)}var oe=[-865163e-23*2,-.00851586*2,-674764e-23*2,.0209036*2,-336639e-22*2,-.0438162*2,-154175e-22*2,.0931738*2,-552212e-22*2,-.313819*2];this.L3psycho_anal_ns=function(b,y,x,Y,F,G,C,E,B,$){var z=b.internal_flags,q=kt([2,D.BLKSIZE]),ce=kt([2,3,D.BLKSIZE_s]),Ze=je(D.CBANDS+1),ie=je(D.CBANDS+1),fe=je(D.CBANDS+2),Q=h0(2),be=h0(2),Re,se,pe,te,Xe,ke,de,Ie,Te=kt([2,576]),ge,Lt=h0(D.CBANDS+2),Ae=h0(D.CBANDS+2);for(qn.fill(Ae,0),Re=z.channels_out,b.mode==MPEGMode.JOINT_STEREO&&(Re=4),b.VBR==W0.vbr_off?ge=z.ResvMax==0?0:z.ResvSize/z.ResvMax*.5:b.VBR==W0.vbr_rh||b.VBR==W0.vbr_mtrh||b.VBR==W0.vbr_mt?ge=.6:ge=1,se=0;se<z.channels_out;se++){var Be=y[se],ct=x+576-350-w+192;for(ue(oe.length==(w-1)/2),te=0;te<576;te++){var xt,Ht;for(xt=Be[ct+te+10],Ht=0,Xe=0;Xe<(w-1)/2-1;Xe+=2)xt+=oe[Xe]*(Be[ct+te+Xe]+Be[ct+te+w-Xe]),Ht+=oe[Xe+1]*(Be[ct+te+Xe+1]+Be[ct+te+w-Xe-1]);Te[se][te]=xt+Ht}F[Y][se].en.assign(z.en[se]),F[Y][se].thm.assign(z.thm[se]),Re>2&&(G[Y][se].en.assign(z.en[se+2]),G[Y][se].thm.assign(z.thm[se+2]))}for(se=0;se<Re;se++){var Jt,Et,nt=je(12),zt=[0,0,0,0],T0=je(12),_i=1,cs,ds=je(D.CBANDS),ms=je(D.CBANDS),Fe=[0,0,0,0],us=je(D.HBLKSIZE),hs=kt([3,D.HBLKSIZE_s]);for(ue(z.npart_s<=D.CBANDS),ue(z.npart_l<=D.CBANDS),te=0;te<3;te++)nt[te]=z.nsPsy.last_en_subshort[se][te+6],ue(z.nsPsy.last_en_subshort[se][te+4]>0),T0[te]=nt[te]/z.nsPsy.last_en_subshort[se][te+4],zt[0]+=nt[te];if(se==2)for(te=0;te<576;te++){var Si,Gi;Si=Te[0][te],Gi=Te[1][te],Te[0][te]=Si+Gi,Te[1][te]=Si-Gi}{var bs=Te[se&1],g0=0;for(te=0;te<9;te++){for(var gn=g0+64,$e=1;g0<gn;g0++)$e<Math.abs(bs[g0])&&($e=Math.abs(bs[g0]));z.nsPsy.last_en_subshort[se][te]=nt[te+3]=$e,zt[1+te/3]+=$e,$e>nt[te+3-2]?(ue(nt[te+3-2]>0),$e=$e/nt[te+3-2]):nt[te+3-2]>$e*10?(ue($e>0),$e=nt[te+3-2]/($e*10)):$e=0,T0[te+3]=$e}}if(b.analysis){var vi=T0[0];for(te=1;te<12;te++)vi<T0[te]&&(vi=T0[te]);z.pinfo.ers[Y][se]=z.pinfo.ers_save[se],z.pinfo.ers_save[se]=vi}for(cs=se==3?z.nsPsy.attackthre_s:z.nsPsy.attackthre,te=0;te<12;te++)Fe[te/3]==0&&T0[te]>cs&&(Fe[te/3]=te%3+1);for(te=1;te<4;te++){var Ii;zt[te-1]>zt[te]?(ue(zt[te]>0),Ii=zt[te-1]/zt[te]):(ue(zt[te-1]>0),Ii=zt[te]/zt[te-1]),Ii<1.7&&(Fe[te]=0,te==1&&(Fe[0]=0))}for(Fe[0]!=0&&z.nsPsy.lastAttacks[se]!=0&&(Fe[0]=0),(z.nsPsy.lastAttacks[se]==3||Fe[0]+Fe[1]+Fe[2]+Fe[3]!=0)&&(_i=0,Fe[1]!=0&&Fe[0]!=0&&(Fe[1]=0),Fe[2]!=0&&Fe[1]!=0&&(Fe[2]=0),Fe[3]!=0&&Fe[2]!=0&&(Fe[3]=0)),se<2?be[se]=_i:_i==0&&(be[0]=be[1]=0),B[se]=z.tot_ener[se],Et=ce,Jt=q,k(b,us,hs,Jt,se&1,Et,se&1,Y,se,y,x),_e(z,us,Ze,ds,ms),he(z,ds,ms,Lt),Ie=0;Ie<3;Ie++){var Vi,dt;for(c(b,hs,ie,fe,se,Ie),P(z,ie,fe,se,Ie),de=0;de<D.SBMAX_s;de++){if(dt=z.thm[se].s[de][Ie],dt*=W,Fe[Ie]>=2||Fe[Ie+1]==1){var F0=Ie!=0?Ie-1:2,$e=L(z.thm[se].s[de][F0],dt,v*ge);dt=Math.min(dt,$e)}if(Fe[Ie]==1){var F0=Ie!=0?Ie-1:2,$e=L(z.thm[se].s[de][F0],dt,Z*ge);dt=Math.min(dt,$e)}else if(Ie!=0&&Fe[Ie-1]==3||Ie==0&&z.nsPsy.lastAttacks[se]==3){var F0=Ie!=2?Ie+1:0,$e=L(z.thm[se].s[de][F0],dt,Z*ge);dt=Math.min(dt,$e)}Vi=nt[Ie*3+3]+nt[Ie*3+4]+nt[Ie*3+5],nt[Ie*3+5]*6<Vi&&(dt*=.5,nt[Ie*3+4]*6<Vi&&(dt*=.5)),z.thm[se].s[de][Ie]=dt}}for(z.nsPsy.lastAttacks[se]=Fe[2],ke=0,pe=0;pe<z.npart_l;pe++){for(var m0=z.s3ind[pe][0],Ri=Ze[m0]*H[Lt[m0]],u0=z.s3_ll[ke++]*Ri;++m0<=z.s3ind[pe][1];)Ri=Ze[m0]*H[Lt[m0]],u0=V(u0,z.s3_ll[ke++]*Ri,m0,m0-pe,z);u0*=.158489319246111,z.blocktype_old[se&1]==D.SHORT_TYPE?fe[pe]=u0:fe[pe]=L(Math.min(u0,Math.min(i*z.nb_1[se][pe],n*z.nb_2[se][pe])),u0,ge),z.nb_2[se][pe]=z.nb_1[se][pe],z.nb_1[se][pe]=u0}for(;pe<=D.CBANDS;++pe)Ze[pe]=0,fe[pe]=0;a(z,Ze,fe,se)}if((b.mode==MPEGMode.STEREO||b.mode==MPEGMode.JOINT_STEREO)&&b.interChRatio>0&&f(b,b.interChRatio),b.mode==MPEGMode.JOINT_STEREO){var Ti;j(z),Ti=b.msfix,Math.abs(Ti)>0&&g(z,Ti,b.ATHlower*z.ATH.adjust)}for(M(b,be,$,Q),se=0;se<Re;se++){var J0,E0=0,ei,ti;se>1?(J0=E,E0=-2,ei=D.NORM_TYPE,($[0]==D.SHORT_TYPE||$[1]==D.SHORT_TYPE)&&(ei=D.SHORT_TYPE),ti=G[Y][se-2]):(J0=C,E0=0,ei=$[se],ti=F[Y][se]),ei==D.SHORT_TYPE?J0[E0+se]=ae(ti,z.masking_lower):J0[E0+se]=re(ti,z.masking_lower),b.analysis&&(z.pinfo.pe[Y][se]=J0[E0+se])}return 0};function Le(b,y,x,Y,F,G,C,E){var B=b.internal_flags;if(Y<2)t.fft_long(B,C[E],Y,y,x);else if(Y==2)for(var $=D.BLKSIZE-1;$>=0;--$){var z=C[E+0][$],q=C[E+1][$];C[E+0][$]=(z+q)*mt.SQRT2*.5,C[E+1][$]=(z-q)*mt.SQRT2*.5}G[0]=C[E+0][0],G[0]*=G[0];for(var $=D.BLKSIZE/2-1;$>=0;--$){var ce=C[E+0][D.BLKSIZE/2-$],Ze=C[E+0][D.BLKSIZE/2+$];G[D.BLKSIZE/2-$]=(ce*ce+Ze*Ze)*.5}{for(var ie=0,$=11;$<D.HBLKSIZE;$++)ie+=G[$];B.tot_ener[Y]=ie}if(b.analysis){for(var $=0;$<D.HBLKSIZE;$++)B.pinfo.energy[F][Y][$]=B.pinfo.energy_save[Y][$],B.pinfo.energy_save[Y][$]=G[$];B.pinfo.pe[F][Y]=B.pe[Y]}}function ze(b,y,x,Y,F,G,C,E){var B=b.internal_flags;if(F==0&&Y<2&&t.fft_short(B,C[E],Y,y,x),Y==2)for(var $=D.BLKSIZE_s-1;$>=0;--$){var z=C[E+0][F][$],q=C[E+1][F][$];C[E+0][F][$]=(z+q)*mt.SQRT2*.5,C[E+1][F][$]=(z-q)*mt.SQRT2*.5}G[F][0]=C[E+0][F][0],G[F][0]*=G[F][0];for(var $=D.BLKSIZE_s/2-1;$>=0;--$){var ce=C[E+0][F][D.BLKSIZE_s/2-$],Ze=C[E+0][F][D.BLKSIZE_s/2+$];G[F][D.BLKSIZE_s/2-$]=(ce*ce+Ze*Ze)*.5}}function We(b,y,x,Y){var F=b.internal_flags;b.athaa_loudapprox==2&&x<2&&(F.loudness_sq[y][x]=F.loudness_sq_save[x],F.loudness_sq_save[x]=U(Y,F))}var we=[-865163e-23*2,-.00851586*2,-674764e-23*2,.0209036*2,-336639e-22*2,-.0438162*2,-154175e-22*2,.0931738*2,-552212e-22*2,-.313819*2];function Ke(b,y,x,Y,F,G,C,E,B,$){for(var z=kt([2,576]),q=b.internal_flags,ce=q.channels_out,Ze=b.mode==MPEGMode.JOINT_STEREO?4:ce,ie=0;ie<ce;ie++){firbuf=y[ie];var fe=x+576-350-w+192;ue(we.length==(w-1)/2);for(var Q=0;Q<576;Q++){var be,Re;be=firbuf[fe+Q+10],Re=0;for(var se=0;se<(w-1)/2-1;se+=2)be+=we[se]*(firbuf[fe+Q+se]+firbuf[fe+Q+w-se]),Re+=we[se+1]*(firbuf[fe+Q+se+1]+firbuf[fe+Q+w-se-1]);z[ie][Q]=be+Re}F[Y][ie].en.assign(q.en[ie]),F[Y][ie].thm.assign(q.thm[ie]),Ze>2&&(G[Y][ie].en.assign(q.en[ie+2]),G[Y][ie].thm.assign(q.thm[ie+2]))}for(var ie=0;ie<Ze;ie++){var pe=je(12),te=je(12),Xe=[0,0,0,0],ke=z[ie&1],de=0,Ie=ie==3?q.nsPsy.attackthre_s:q.nsPsy.attackthre,Te=1;if(ie==2)for(var Q=0,se=576;se>0;++Q,--se){var ge=z[0][Q],Lt=z[1][Q];z[0][Q]=ge+Lt,z[1][Q]=ge-Lt}for(var Q=0;Q<3;Q++)te[Q]=q.nsPsy.last_en_subshort[ie][Q+6],ue(q.nsPsy.last_en_subshort[ie][Q+4]>0),pe[Q]=te[Q]/q.nsPsy.last_en_subshort[ie][Q+4],Xe[0]+=te[Q];for(var Q=0;Q<9;Q++){for(var Ae=de+64,Be=1;de<Ae;de++)Be<Math.abs(ke[de])&&(Be=Math.abs(ke[de]));q.nsPsy.last_en_subshort[ie][Q]=te[Q+3]=Be,Xe[1+Q/3]+=Be,Be>te[Q+3-2]?(ue(te[Q+3-2]>0),Be=Be/te[Q+3-2]):te[Q+3-2]>Be*10?(ue(Be>0),Be=te[Q+3-2]/(Be*10)):Be=0,pe[Q+3]=Be}for(var Q=0;Q<3;++Q){var ct=te[Q*3+3]+te[Q*3+4]+te[Q*3+5],xt=1;te[Q*3+5]*6<ct&&(xt*=.5,te[Q*3+4]*6<ct&&(xt*=.5)),E[ie][Q]=xt}if(b.analysis){for(var Ht=pe[0],Q=1;Q<12;Q++)Ht<pe[Q]&&(Ht=pe[Q]);q.pinfo.ers[Y][ie]=q.pinfo.ers_save[ie],q.pinfo.ers_save[ie]=Ht}for(var Q=0;Q<12;Q++)B[ie][Q/3]==0&&pe[Q]>Ie&&(B[ie][Q/3]=Q%3+1);for(var Q=1;Q<4;Q++){var Jt=Xe[Q-1],Et=Xe[Q],nt=Math.max(Jt,Et);nt<4e4&&Jt<1.7*Et&&Et<1.7*Jt&&(Q==1&&B[ie][0]<=B[ie][Q]&&(B[ie][0]=0),B[ie][Q]=0)}B[ie][0]<=q.nsPsy.lastAttacks[ie]&&(B[ie][0]=0),(q.nsPsy.lastAttacks[ie]==3||B[ie][0]+B[ie][1]+B[ie][2]+B[ie][3]!=0)&&(Te=0,B[ie][1]!=0&&B[ie][0]!=0&&(B[ie][1]=0),B[ie][2]!=0&&B[ie][1]!=0&&(B[ie][2]=0),B[ie][3]!=0&&B[ie][2]!=0&&(B[ie][3]=0)),ie<2?$[ie]=Te:Te==0&&($[0]=$[1]=0),C[ie]=q.tot_ener[ie]}}function De(b,y,x){if(x==0)for(var Y=0;Y<b.npart_s;Y++)b.nb_s2[y][Y]=b.nb_s1[y][Y],b.nb_s1[y][Y]=0}function st(b,y){for(var x=0;x<b.npart_l;x++)b.nb_2[y][x]=b.nb_1[y][x],b.nb_1[y][x]=0}function a0(b,y,x,Y){var F=H.length-1,G=0,C=x[G]+x[G+1];if(ue(C>=0),C>0){var E=y[G];E<y[G+1]&&(E=y[G+1]),ue(b.numlines_s[G]+b.numlines_s[G+1]-1>0),C=20*(E*2-C)/(C*(b.numlines_s[G]+b.numlines_s[G+1]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;for(G=1;G<b.npart_s-1;G++)if(C=x[G-1]+x[G]+x[G+1],ue(G+1<b.npart_s),ue(C>=0),C>0){var E=y[G-1];E<y[G]&&(E=y[G]),E<y[G+1]&&(E=y[G+1]),ue(b.numlines_s[G-1]+b.numlines_s[G]+b.numlines_s[G+1]-1>0),C=20*(E*3-C)/(C*(b.numlines_s[G-1]+b.numlines_s[G]+b.numlines_s[G+1]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;if(ue(G>0),ue(G==b.npart_s-1),C=x[G-1]+x[G],ue(C>=0),C>0){var E=y[G-1];E<y[G]&&(E=y[G]),ue(b.numlines_s[G-1]+b.numlines_s[G]-1>0),C=20*(E*2-C)/(C*(b.numlines_s[G-1]+b.numlines_s[G]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;ue(G==b.npart_s-1)}function gt(b,y,x,Y,F,G){var C=b.internal_flags,E=new float[D.CBANDS],B=je(D.CBANDS),$,z,q,ce=new int[D.CBANDS];for(q=z=0;q<C.npart_s;++q){var Ze=0,ie=0,fe=C.numlines_s[q];for($=0;$<fe;++$,++z){var Q=y[G][z];Ze+=Q,ie<Q&&(ie=Q)}x[q]=Ze,ue(Ze>=0),E[q]=ie,ue(fe>0),B[q]=Ze/fe,ue(B[q]>=0)}for(ue(q==C.npart_s),ue(z==129);q<D.CBANDS;++q)E[q]=0,B[q]=0;for(a0(C,E,B,ce),z=q=0;q<C.npart_s;q++){var be=C.s3ind_s[q][0],Re=C.s3ind_s[q][1],se,pe,te,Xe,ke;for(se=ce[be],pe=1,Xe=C.s3_ss[z]*x[be]*H[ce[be]],++z,++be;be<=Re;)se+=ce[be],pe+=1,te=C.s3_ss[z]*x[be]*H[ce[be]],Xe=R(Xe,te,be-q),++z,++be;se=(1+2*se)/(2*pe),ke=H[se]*.5,Xe*=ke,Y[q]=Xe,C.nb_s2[F][q]=C.nb_s1[F][q],C.nb_s1[F][q]=Xe,te=E[q],te*=C.minval_s[q],te*=ke,Y[q]>te&&(Y[q]=te),C.masking_lower>1&&(Y[q]*=C.masking_lower),Y[q]>x[q]&&(Y[q]=x[q]),C.masking_lower<1&&(Y[q]*=C.masking_lower),ue(Y[q]>=0)}for(;q<D.CBANDS;++q)x[q]=0,Y[q]=0}function Ft(b,y,x,Y,F){var G=je(D.CBANDS),C=je(D.CBANDS),E=h0(D.CBANDS+2),B;_e(b,y,x,G,C),he(b,G,C,E);var $=0;for(B=0;B<b.npart_l;B++){var z,q,ce,Ze,ie=b.s3ind[B][0],fe=b.s3ind[B][1],Q=0,be=0;for(Q=E[ie],be+=1,q=b.s3_ll[$]*x[ie]*H[E[ie]],++$,++ie;ie<=fe;)Q+=E[ie],be+=1,z=b.s3_ll[$]*x[ie]*H[E[ie]],Ze=R(q,z,ie-B),q=Ze,++$,++ie;if(Q=(1+2*Q)/(2*be),ce=H[Q]*.5,q*=ce,b.blocktype_old[F&1]==D.SHORT_TYPE){var Re=i*b.nb_1[F][B];Re>0?Y[B]=Math.min(q,Re):Y[B]=Math.min(q,x[B]*Z)}else{var se=n*b.nb_2[F][B],pe=i*b.nb_1[F][B],Re;se<=0&&(se=q),pe<=0&&(pe=q),b.blocktype_old[F&1]==D.NORM_TYPE?Re=Math.min(pe,se):Re=pe,Y[B]=Math.min(q,Re)}b.nb_2[F][B]=b.nb_1[F][B],b.nb_1[F][B]=q,z=G[B],z*=b.minval_l[B],z*=ce,Y[B]>z&&(Y[B]=z),b.masking_lower>1&&(Y[B]*=b.masking_lower),Y[B]>x[B]&&(Y[B]=x[B]),b.masking_lower<1&&(Y[B]*=b.masking_lower),ue(Y[B]>=0)}for(;B<D.CBANDS;++B)x[B]=0,Y[B]=0}function l0(b,y){var x=b.internal_flags;b.short_blocks==L0.short_block_coupled&&!(y[0]!=0&&y[1]!=0)&&(y[0]=y[1]=0);for(var Y=0;Y<x.channels_out;Y++)b.short_blocks==L0.short_block_dispensed&&(y[Y]=1),b.short_blocks==L0.short_block_forced&&(y[Y]=0)}function $0(b,y,x){for(var Y=b.internal_flags,F=0;F<Y.channels_out;F++){var G=D.NORM_TYPE;y[F]!=0?(ue(Y.blocktype_old[F]!=D.START_TYPE),Y.blocktype_old[F]==D.SHORT_TYPE&&(G=D.STOP_TYPE)):(G=D.SHORT_TYPE,Y.blocktype_old[F]==D.NORM_TYPE&&(Y.blocktype_old[F]=D.START_TYPE),Y.blocktype_old[F]==D.STOP_TYPE&&(Y.blocktype_old[F]=D.SHORT_TYPE)),x[F]=Y.blocktype_old[F],Y.blocktype_old[F]=G}}function C0(b,y,x,Y,F,G,C){for(var E=G*2,B=G>0?Math.pow(10,F):1,$,z,q=0;q<C;++q){var ce=b[2][q],Ze=b[3][q],ie=y[0][q],fe=y[1][q],Q=y[2][q],be=y[3][q];if(ie<=1.58*fe&&fe<=1.58*ie){var Re=x[q]*Ze,se=x[q]*ce;z=Math.max(Q,Math.min(be,Re)),$=Math.max(be,Math.min(Q,se))}else z=Q,$=be;if(G>0){var pe,te,Xe=Y[q]*B;if(pe=Math.min(Math.max(ie,Xe),Math.max(fe,Xe)),Q=Math.max(z,Xe),be=Math.max($,Xe),te=Q+be,te>0&&pe*E<te){var ke=pe*E/te;Q*=ke,be*=ke,ue(te>0)}z=Math.min(Q,z),$=Math.min(be,$)}z>ce&&(z=ce),$>Ze&&($=Ze),y[2][q]=z,y[3][q]=$}}this.L3psycho_anal_vbr=function(b,y,x,Y,F,G,C,E,B,$){var z=b.internal_flags,q,ce,Ze=je(D.HBLKSIZE),ie=kt([3,D.HBLKSIZE_s]),fe=kt([2,D.BLKSIZE]),Q=kt([2,3,D.BLKSIZE_s]),be=kt([4,D.CBANDS]),Re=kt([4,D.CBANDS]),se=kt([4,3]),pe=.6,te=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],Xe=h0(2),ke=b.mode==MPEGMode.JOINT_STEREO?4:z.channels_out;Ke(b,y,x,Y,F,G,B,se,te,Xe),l0(b,Xe);{for(var de=0;de<ke;de++){var Ie=de&1;q=fe,Le(b,y,x,de,Y,Ze,q,Ie),We(b,Y,de,Ze),Xe[Ie]!=0?Ft(z,Ze,be[de],Re[de],de):st(z,de)}Xe[0]+Xe[1]==2&&b.mode==MPEGMode.JOINT_STEREO&&C0(be,Re,z.mld_cb_l,z.ATH.cb_l,b.ATHlower*z.ATH.adjust,b.msfix,z.npart_l);for(var de=0;de<ke;de++){var Ie=de&1;Xe[Ie]!=0&&a(z,be[de],Re[de],de)}}{for(var Te=0;Te<3;Te++){for(var de=0;de<ke;++de){var Ie=de&1;Xe[Ie]!=0?De(z,de,Te):(ce=Q,ze(b,y,x,de,Te,ie,ce,Ie),gt(b,ie,be[de],Re[de],de,Te))}Xe[0]+Xe[1]==0&&b.mode==MPEGMode.JOINT_STEREO&&C0(be,Re,z.mld_cb_s,z.ATH.cb_s,b.ATHlower*z.ATH.adjust,b.msfix,z.npart_s);for(var de=0;de<ke;++de){var Ie=de&1;Xe[Ie]==0&&P(z,be[de],Re[de],de,Te)}}for(var de=0;de<ke;de++){var Ie=de&1;if(Xe[Ie]==0)for(var ge=0;ge<D.SBMAX_s;ge++){for(var Lt=je(3),Te=0;Te<3;Te++){var Ae=z.thm[de].s[ge][Te];if(Ae*=W,te[de][Te]>=2||te[de][Te+1]==1){var Be=Te!=0?Te-1:2,ct=L(z.thm[de].s[ge][Be],Ae,v*pe);Ae=Math.min(Ae,ct)}else if(te[de][Te]==1){var Be=Te!=0?Te-1:2,ct=L(z.thm[de].s[ge][Be],Ae,Z*pe);Ae=Math.min(Ae,ct)}else if(Te!=0&&te[de][Te-1]==3||Te==0&&z.nsPsy.lastAttacks[de]==3){var Be=Te!=2?Te+1:0,ct=L(z.thm[de].s[ge][Be],Ae,Z*pe);Ae=Math.min(Ae,ct)}Ae*=se[de][Te],Lt[Te]=Ae}for(var Te=0;Te<3;Te++)z.thm[de].s[ge][Te]=Lt[Te]}}}for(var de=0;de<ke;de++)z.nsPsy.lastAttacks[de]=te[de][2];$0(b,Xe,$);for(var de=0;de<ke;de++){var xt,Ht,Jt,Et;de>1?(xt=E,Ht=-2,Jt=D.NORM_TYPE,($[0]==D.SHORT_TYPE||$[1]==D.SHORT_TYPE)&&(Jt=D.SHORT_TYPE),Et=G[Y][de-2]):(xt=C,Ht=0,Jt=$[de],Et=F[Y][de]),Jt==D.SHORT_TYPE?xt[Ht+de]=ae(Et,z.masking_lower):xt[Ht+de]=re(Et,z.masking_lower),b.analysis&&(z.pinfo.pe[Y][de]=xt[Ht+de])}return 0};function Mt(b,y){var x=b,Y;return x>=0?Y=-x*27:Y=x*y,Y<=-72?0:Math.exp(Y*N)}function q0(b){var y=0,x=0;{var Y=0,F,G;for(Y=0;Mt(Y,b)>1e-20;Y-=1);for(F=Y,G=0;Math.abs(G-F)>1e-12;)Y=(G+F)/2,Mt(Y,b)>0?G=Y:F=Y;y=F}{var Y=0,F,G;for(Y=0;Mt(Y,b)>1e-20;Y+=1);for(F=0,G=Y;Math.abs(G-F)>1e-12;)Y=(G+F)/2,Mt(Y,b)>0?F=Y:G=Y;x=G}{var C=0,E=1e3,B;for(B=0;B<=E;++B){var Y=y+B*(x-y)/E,$=Mt(Y,b);C+=$}{var z=(E+1)/(C*(x-y));return z}}}function Xi(b){var y,x,Y,F;return y=b,y>=0?y*=3:y*=1.5,y>=.5&&y<=2.5?(F=y-.5,x=8*(F*F-2*F)):x=0,y+=.474,Y=15.811389+7.5*y-17.5*Math.sqrt(1+y*y),Y<=-60?0:(y=Math.exp((x+Y)*N),y/=.6609193,y)}function o0(b){return b<0&&(b=0),b=b*.001,13*Math.atan(.76*b)+3.5*Math.atan(b*b/(7.5*7.5))}function as(b,y,x,Y,F,G,C,E,B,$,z,q){var ce=je(D.CBANDS+1),Ze=E/(q>15?2*576:2*192),ie=h0(D.HBLKSIZE),fe;E/=B;var Q=0,be=0;for(fe=0;fe<D.CBANDS;fe++){var Re,se;for(Re=o0(E*Q),ce[fe]=E*Q,se=Q;o0(E*se)-Re<m&&se<=B/2;se++);for(b[fe]=se-Q,be=fe+1;Q<se;)ue(Q<D.HBLKSIZE),ie[Q++]=fe;if(Q>B/2){Q=B/2,++fe;break}}ue(fe<D.CBANDS),ce[fe]=E*Q;for(var pe=0;pe<q;pe++){var te,Xe,ke,de,Ie;ke=$[pe],de=$[pe+1],te=0|Math.floor(.5+z*(ke-.5)),te<0&&(te=0),Xe=0|Math.floor(.5+z*(de-.5)),Xe>B/2&&(Xe=B/2),x[pe]=(ie[te]+ie[Xe])/2,y[pe]=ie[Xe];var Te=Ze*de;C[pe]=(Te-ce[y[pe]])/(ce[y[pe]+1]-ce[y[pe]]),C[pe]<0?C[pe]=0:C[pe]>1&&(C[pe]=1),Ie=o0(E*$[pe]*z),Ie=Math.min(Ie,15.5)/15.5,G[pe]=Math.pow(10,1.25*(1-Math.cos(Math.PI*Ie))-2.5)}Q=0;for(var ge=0;ge<be;ge++){var Lt=b[ge],Re,Ae;Re=o0(E*Q),Ae=o0(E*(Q+Lt-1)),Y[ge]=.5*(Re+Ae),Re=o0(E*(Q-.5)),Ae=o0(E*(Q+Lt-.5)),F[ge]=Ae-Re,Q+=Lt}return be}function ls(b,y,x,Y,F,G){var C=kt([D.CBANDS,D.CBANDS]),E,B=0;if(G)for(var $=0;$<y;$++)for(E=0;E<y;E++){var z=Xi(x[$]-x[E])*Y[E];C[$][E]=z*F[$]}else for(E=0;E<y;E++)for(var q=15+Math.min(21/x[E],12),ce=q0(q),$=0;$<y;$++){var z=ce*Mt(x[$]-x[E],q)*Y[E];C[$][E]=z*F[$]}for(var $=0;$<y;$++){for(E=0;E<y&&!(C[$][E]>0);E++);for(b[$][0]=E,E=y-1;E>0&&!(C[$][E]>0);E--);b[$][1]=E,B+=b[$][1]-b[$][0]+1}for(var Ze=je(B),ie=0,$=0;$<y;$++)for(E=b[$][0];E<=b[$][1];E++)Ze[ie++]=C[$][E];return Ze}function os(b){var y=o0(b);return y=Math.min(y,15.5)/15.5,Math.pow(10,1.25*(1-Math.cos(Math.PI*y))-2.5)}this.psymodel_init=function(b){var y=b.internal_flags,x,Y=!0,F=13,G=24,C=0,E=0,B=-8.25,$=-4.5,z=je(D.CBANDS),q=je(D.CBANDS),ce=je(D.CBANDS),Ze=b.out_samplerate;switch(b.experimentalZ){default:case 0:Y=!0;break;case 1:Y=!(b.VBR==W0.vbr_mtrh||b.VBR==W0.vbr_mt);break;case 2:Y=!1;break;case 3:F=8,C=-1.75,E=-.0125,B=-8.25,$=-2.25;break}for(y.ms_ener_ratio_old=.25,y.blocktype_old[0]=y.blocktype_old[1]=D.NORM_TYPE,x=0;x<4;++x){for(var Q=0;Q<D.CBANDS;++Q)y.nb_1[x][Q]=1e20,y.nb_2[x][Q]=1e20,y.nb_s1[x][Q]=y.nb_s2[x][Q]=1;for(var ie=0;ie<D.SBMAX_l;ie++)y.en[x].l[ie]=1e20,y.thm[x].l[ie]=1e20;for(var Q=0;Q<3;++Q){for(var ie=0;ie<D.SBMAX_s;ie++)y.en[x].s[ie][Q]=1e20,y.thm[x].s[ie][Q]=1e20;y.nsPsy.lastAttacks[x]=0}for(var Q=0;Q<9;Q++)y.nsPsy.last_en_subshort[x][Q]=10}for(y.loudness_sq_save[0]=y.loudness_sq_save[1]=0,y.npart_l=as(y.numlines_l,y.bo_l,y.bm_l,z,q,y.mld_l,y.PSY.bo_l_weight,Ze,D.BLKSIZE,y.scalefac_band.l,D.BLKSIZE/(2*576),D.SBMAX_l),ue(y.npart_l<D.CBANDS),x=0;x<y.npart_l;x++){var fe=C;z[x]>=F&&(fe=E*(z[x]-F)/(G-F)+C*(G-z[x])/(G-F)),ce[x]=Math.pow(10,fe/10),y.numlines_l[x]>0?y.rnumlines_l[x]=1/y.numlines_l[x]:y.rnumlines_l[x]=0}y.s3_ll=ls(y.s3ind,y.npart_l,z,q,ce,Y);var Q=0;for(x=0;x<y.npart_l;x++){var be;be=Ss.MAX_VALUE;for(var Re=0;Re<y.numlines_l[x];Re++,Q++){var se=Ze*Q/(1e3*D.BLKSIZE),pe;pe=this.ATHformula(se*1e3,b)-20,pe=Math.pow(10,.1*pe),pe*=y.numlines_l[x],be>pe&&(be=pe)}y.ATH.cb_l[x]=be,be=-20+z[x]*20/10,be>6&&(be=100),be<-15&&(be=-15),be-=8,y.minval_l[x]=Math.pow(10,be/10)*y.numlines_l[x]}for(y.npart_s=as(y.numlines_s,y.bo_s,y.bm_s,z,q,y.mld_s,y.PSY.bo_s_weight,Ze,D.BLKSIZE_s,y.scalefac_band.s,D.BLKSIZE_s/(2*192),D.SBMAX_s),ue(y.npart_s<D.CBANDS),Q=0,x=0;x<y.npart_s;x++){var be,fe=B;z[x]>=F&&(fe=$*(z[x]-F)/(G-F)+B*(G-z[x])/(G-F)),ce[x]=Math.pow(10,fe/10),be=Ss.MAX_VALUE;for(var Re=0;Re<y.numlines_s[x];Re++,Q++){var se=Ze*Q/(1e3*D.BLKSIZE_s),pe;pe=this.ATHformula(se*1e3,b)-20,pe=Math.pow(10,.1*pe),pe*=y.numlines_s[x],be>pe&&(be=pe)}y.ATH.cb_s[x]=be,be=-7+z[x]*7/12,z[x]>12&&(be*=1+Math.log(1+be)*3.1),z[x]<12&&(be*=1+Math.log(1-be)*2.3),be<-15&&(be=-15),be-=8,y.minval_s[x]=Math.pow(10,be/10)*y.numlines_s[x]}y.s3_ss=ls(y.s3ind_s,y.npart_s,z,q,ce,Y),p(),t.init_fft(y),y.decay=Math.exp(-1*e/(S*Ze/192));{var te;te=O,b.exp_nspsytune&2&&(te=1),Math.abs(b.msfix)>0&&(te=b.msfix),b.msfix=te;for(var Xe=0;Xe<y.npart_l;Xe++)y.s3ind[Xe][1]>y.npart_l-1&&(y.s3ind[Xe][1]=y.npart_l-1)}var ke=576*y.mode_gr/Ze;if(y.ATH.decay=Math.pow(10,-12/10*ke),y.ATH.adjust=.01,y.ATH.adjustLimit=1,ue(y.bo_l[D.SBMAX_l-1]<=y.npart_l),ue(y.bo_s[D.SBMAX_s-1]<=y.npart_s),b.ATHtype!=-1){var se,de=b.out_samplerate/D.BLKSIZE,Ie=0;for(se=0,x=0;x<D.BLKSIZE/2;++x)se+=de,y.ATH.eql_w[x]=1/Math.pow(10,this.ATHformula(se,b)/10),Ie+=y.ATH.eql_w[x];for(Ie=1/Ie,x=D.BLKSIZE/2;--x>=0;)y.ATH.eql_w[x]*=Ie}{for(var Xe=Q=0;Xe<y.npart_s;++Xe)for(x=0;x<y.numlines_s[Xe];++x)++Q;ue(Q==129);for(var Xe=Q=0;Xe<y.npart_l;++Xe)for(x=0;x<y.numlines_l[Xe];++x)++Q;ue(Q==513)}for(Q=0,x=0;x<y.npart_l;x++){var se=Ze*(Q+y.numlines_l[x]/2)/(1*D.BLKSIZE);y.mld_cb_l[x]=os(se),Q+=y.numlines_l[x]}for(;x<D.CBANDS;++x)y.mld_cb_l[x]=1;for(Q=0,x=0;x<y.npart_s;x++){var se=Ze*(Q+y.numlines_s[x]/2)/(1*D.BLKSIZE_s);y.mld_cb_s[x]=os(se),Q+=y.numlines_s[x]}for(;x<D.CBANDS;++x)y.mld_cb_s[x]=1;return 0};function R0(b,y){b<-.3&&(b=3410),b/=1e3,b=Math.max(.1,b);var x=3.64*Math.pow(b,-.8)-6.8*Math.exp(-.6*Math.pow(b-3.4,2))+6*Math.exp(-.15*Math.pow(b-8.7,2))+(.6+.04*y)*.001*Math.pow(b,4);return x}this.ATHformula=function(b,y){var x;switch(y.ATHtype){case 0:x=R0(b,9);break;case 1:x=R0(b,-1);break;case 2:x=R0(b,0);break;case 3:x=R0(b,1)+6;break;case 4:x=R0(b,y.ATHcurve);break;default:x=R0(b,0);break}return x}}var ir=tr,sr=Os;function nr(){this.class_id=0,this.num_samples=0,this.num_channels=0,this.in_samplerate=0,this.out_samplerate=0,this.scale=0,this.scale_left=0,this.scale_right=0,this.analysis=!1,this.bWriteVbrTag=!1,this.decode_only=!1,this.quality=0,this.mode=sr.STEREO,this.force_ms=!1,this.free_format=!1,this.findReplayGain=!1,this.decode_on_the_fly=!1,this.write_id3tag_automatic=!1,this.brate=0,this.compression_ratio=0,this.copyright=0,this.original=0,this.extension=0,this.emphasis=0,this.error_protection=0,this.strict_ISO=!1,this.disable_reservoir=!1,this.quant_comp=0,this.quant_comp_short=0,this.experimentalY=!1,this.experimentalZ=0,this.exp_nspsytune=0,this.preset=0,this.VBR=null,this.VBR_q_frac=0,this.VBR_q=0,this.VBR_mean_bitrate_kbps=0,this.VBR_min_bitrate_kbps=0,this.VBR_max_bitrate_kbps=0,this.VBR_hard_min=0,this.lowpassfreq=0,this.highpassfreq=0,this.lowpasswidth=0,this.highpasswidth=0,this.maskingadjust=0,this.maskingadjust_short=0,this.ATHonly=!1,this.ATHshort=!1,this.noATH=!1,this.ATHtype=0,this.ATHcurve=0,this.ATHlower=0,this.athaa_type=0,this.athaa_loudapprox=0,this.athaa_sensitivity=0,this.short_blocks=null,this.useTemporal=!1,this.interChRatio=0,this.msfix=0,this.tune=!1,this.tune_value_a=0,this.version=0,this.encoder_delay=0,this.encoder_padding=0,this.framesize=0,this.frameNum=0,this.lame_allocated_gfp=0,this.internal_flags=null}var rr=nr,ar=bt(),rn={};rn.SFBMAX=ar.SBMAX_s*3;var Di=rn,ft=it;ft.System;ft.VbrMode;ft.Float;ft.ShortBlock;ft.Util;ft.Arrays;ft.new_array_n;ft.new_byte;ft.new_double;var lr=ft.new_float;ft.new_float_n;var b0=ft.new_int;ft.new_int_n;ft.assert;var Yi=Di;function or(){this.xr=lr(576),this.l3_enc=b0(576),this.scalefac=b0(Yi.SFBMAX),this.xrpow_max=0,this.part2_3_length=0,this.big_values=0,this.count1=0,this.global_gain=0,this.scalefac_compress=0,this.block_type=0,this.mixed_block_flag=0,this.table_select=b0(3),this.subblock_gain=b0(4),this.region0_count=0,this.region1_count=0,this.preflag=0,this.scalefac_scale=0,this.count1table_select=0,this.part2_length=0,this.sfb_lmax=0,this.sfb_smin=0,this.psy_lmax=0,this.sfbmax=0,this.psymax=0,this.sfbdivide=0,this.width=b0(Yi.SFBMAX),this.window=b0(Yi.SFBMAX),this.count1bits=0,this.sfb_partition_table=null,this.slen=b0(4),this.max_nonzero_coeff=0;var t=this;function e(n){return new Int32Array(n)}function i(n){return new Float32Array(n)}this.assign=function(n){t.xr=i(n.xr),t.l3_enc=e(n.l3_enc),t.scalefac=e(n.scalefac),t.xrpow_max=n.xrpow_max,t.part2_3_length=n.part2_3_length,t.big_values=n.big_values,t.count1=n.count1,t.global_gain=n.global_gain,t.scalefac_compress=n.scalefac_compress,t.block_type=n.block_type,t.mixed_block_flag=n.mixed_block_flag,t.table_select=e(n.table_select),t.subblock_gain=e(n.subblock_gain),t.region0_count=n.region0_count,t.region1_count=n.region1_count,t.preflag=n.preflag,t.scalefac_scale=n.scalefac_scale,t.count1table_select=n.count1table_select,t.part2_length=n.part2_length,t.sfb_lmax=n.sfb_lmax,t.sfb_smin=n.sfb_smin,t.psy_lmax=n.psy_lmax,t.sfbmax=n.sfbmax,t.psymax=n.psymax,t.sfbdivide=n.sfbdivide,t.width=e(n.width),t.window=e(n.window),t.count1bits=n.count1bits,t.sfb_partition_table=n.sfb_partition_table.slice(0),t.slen=e(n.slen),t.max_nonzero_coeff=n.max_nonzero_coeff}}var an=or,Zt=it;Zt.System;Zt.VbrMode;Zt.Float;Zt.ShortBlock;Zt.Util;Zt.Arrays;Zt.new_array_n;Zt.new_byte;Zt.new_double;Zt.new_float;Zt.new_float_n;var Gs=Zt.new_int;Zt.new_int_n;Zt.assert;var cr=an;function dr(){this.tt=[[null,null],[null,null]],this.main_data_begin=0,this.private_bits=0,this.resvDrain_pre=0,this.resvDrain_post=0,this.scfsi=[Gs(4),Gs(4)];for(var t=0;t<2;t++)for(var e=0;e<2;e++)this.tt[t][e]=new cr}var mr=dr,Xt=it,ii=Xt.System;Xt.VbrMode;Xt.Float;Xt.ShortBlock;Xt.Util;Xt.Arrays;Xt.new_array_n;Xt.new_byte;Xt.new_double;Xt.new_float;Xt.new_float_n;var si=Xt.new_int;Xt.new_int_n;Xt.assert;var ni=bt();function ur(t,e,i,n){this.l=si(1+ni.SBMAX_l),this.s=si(1+ni.SBMAX_s),this.psfb21=si(1+ni.PSFB21),this.psfb12=si(1+ni.PSFB12);var d=this.l,o=this.s;arguments.length==4&&(this.arrL=arguments[0],this.arrS=arguments[1],this.arr21=arguments[2],this.arr12=arguments[3],ii.arraycopy(this.arrL,0,d,0,Math.min(this.arrL.length,this.l.length)),ii.arraycopy(this.arrS,0,o,0,Math.min(this.arrS.length,this.s.length)),ii.arraycopy(this.arr21,0,this.psfb21,0,Math.min(this.arr21.length,this.psfb21.length)),ii.arraycopy(this.arr12,0,this.psfb12,0,Math.min(this.arr12.length,this.psfb12.length)))}var ln=ur,_t=it;_t.System;_t.VbrMode;_t.Float;_t.ShortBlock;_t.Util;_t.Arrays;_t.new_array_n;_t.new_byte;_t.new_double;var wi=_t.new_float,hr=_t.new_float_n,br=_t.new_int;_t.new_int_n;_t.assert;var vs=bt();function pr(){this.last_en_subshort=hr([4,9]),this.lastAttacks=br(4),this.pefirbuf=wi(19),this.longfact=wi(vs.SBMAX_l),this.shortfact=wi(vs.SBMAX_s),this.attackthre=0,this.attackthre_s=0}var yr=pr;function fr(){this.sum=0,this.seen=0,this.want=0,this.pos=0,this.size=0,this.bag=null,this.nVbrNumFrames=0,this.nBytesWritten=0,this.TotalFrameSize=0}var Zr=fr,St=it;St.System;St.VbrMode;St.Float;St.ShortBlock;St.Util;St.Arrays;St.new_array_n;var Xr=St.new_byte,_r=St.new_double,Bt=St.new_float,p0=St.new_float_n,Nt=St.new_int,ri=St.new_int_n;St.assert;var Sr=mr,Gr=ln,vr=yr,Ir=Zr,Is=nn(),Pe=bt(),Vr=Di;n0.MFSIZE=3*1152+Pe.ENCDELAY-Pe.MDCTDELAY;n0.MAX_HEADER_BUF=256;n0.MAX_BITS_PER_CHANNEL=4095;n0.MAX_BITS_PER_GRANULE=7680;n0.BPC=320;function n0(){var t=40;this.Class_ID=0,this.lame_encode_frame_init=0,this.iteration_init_init=0,this.fill_buffer_resample_init=0,this.mfbuf=p0([2,n0.MFSIZE]),this.mode_gr=0,this.channels_in=0,this.channels_out=0,this.resample_ratio=0,this.mf_samples_to_encode=0,this.mf_size=0,this.VBR_min_bitrate=0,this.VBR_max_bitrate=0,this.bitrate_index=0,this.samplerate_index=0,this.mode_ext=0,this.lowpass1=0,this.lowpass2=0,this.highpass1=0,this.highpass2=0,this.noise_shaping=0,this.noise_shaping_amp=0,this.substep_shaping=0,this.psymodel=0,this.noise_shaping_stop=0,this.subblock_gain=0,this.use_best_huffman=0,this.full_outer_loop=0,this.l3_side=new Sr,this.ms_ratio=Bt(2),this.padding=0,this.frac_SpF=0,this.slot_lag=0,this.tag_spec=null,this.nMusicCRC=0,this.OldValue=Nt(2),this.CurrentStep=Nt(2),this.masking_lower=0,this.bv_scf=Nt(576),this.pseudohalf=Nt(Vr.SFBMAX),this.sfb21_extra=!1,this.inbuf_old=new Array(2),this.blackfilt=new Array(2*n0.BPC+1),this.itime=_r(2),this.sideinfo_len=0,this.sb_sample=p0([2,2,18,Pe.SBLIMIT]),this.amp_filter=Bt(32);function e(){this.write_timing=0,this.ptr=0,this.buf=Xr(t)}this.header=new Array(n0.MAX_HEADER_BUF),this.h_ptr=0,this.w_ptr=0,this.ancillary_flag=0,this.ResvSize=0,this.ResvMax=0,this.scalefac_band=new Gr,this.minval_l=Bt(Pe.CBANDS),this.minval_s=Bt(Pe.CBANDS),this.nb_1=p0([4,Pe.CBANDS]),this.nb_2=p0([4,Pe.CBANDS]),this.nb_s1=p0([4,Pe.CBANDS]),this.nb_s2=p0([4,Pe.CBANDS]),this.s3_ss=null,this.s3_ll=null,this.decay=0,this.thm=new Array(4),this.en=new Array(4),this.tot_ener=Bt(4),this.loudness_sq=p0([2,2]),this.loudness_sq_save=Bt(2),this.mld_l=Bt(Pe.SBMAX_l),this.mld_s=Bt(Pe.SBMAX_s),this.bm_l=Nt(Pe.SBMAX_l),this.bo_l=Nt(Pe.SBMAX_l),this.bm_s=Nt(Pe.SBMAX_s),this.bo_s=Nt(Pe.SBMAX_s),this.npart_l=0,this.npart_s=0,this.s3ind=ri([Pe.CBANDS,2]),this.s3ind_s=ri([Pe.CBANDS,2]),this.numlines_s=Nt(Pe.CBANDS),this.numlines_l=Nt(Pe.CBANDS),this.rnumlines_l=Bt(Pe.CBANDS),this.mld_cb_l=Bt(Pe.CBANDS),this.mld_cb_s=Bt(Pe.CBANDS),this.numlines_s_num1=0,this.numlines_l_num1=0,this.pe=Bt(4),this.ms_ratio_s_old=0,this.ms_ratio_l_old=0,this.ms_ener_ratio_old=0,this.blocktype_old=Nt(2),this.nsPsy=new vr,this.VBR_seek_table=new Ir,this.ATH=null,this.PSY=null,this.nogap_total=0,this.nogap_current=0,this.decode_on_the_fly=!0,this.findReplayGain=!0,this.findPeakSample=!0,this.PeakSample=0,this.RadioGain=0,this.AudiophileGain=0,this.rgdata=null,this.noclipGainChange=0,this.noclipScale=0,this.bitrate_stereoMode_Hist=ri([16,5]),this.bitrate_blockType_Hist=ri([16,6]),this.pinfo=null,this.hip=null,this.in_buffer_nsamples=0,this.in_buffer_0=null,this.in_buffer_1=null,this.iteration_loop=null;for(var i=0;i<this.en.length;i++)this.en[i]=new Is;for(var i=0;i<this.thm.length;i++)this.thm[i]=new Is;for(var i=0;i<this.header.length;i++)this.header[i]=new e}var yi=n0,Gt=it;Gt.System;Gt.VbrMode;Gt.Float;Gt.ShortBlock;Gt.Util;Gt.Arrays;Gt.new_array_n;Gt.new_byte;Gt.new_double;var y0=Gt.new_float;Gt.new_float_n;Gt.new_int;Gt.new_int_n;Gt.assert;var f0=bt();function Rr(){this.useAdjust=0,this.aaSensitivityP=0,this.adjust=0,this.adjustLimit=0,this.decay=0,this.floor=0,this.l=y0(f0.SBMAX_l),this.s=y0(f0.SBMAX_s),this.psfb21=y0(f0.PSFB21),this.psfb12=y0(f0.PSFB12),this.cb_l=y0(f0.CBANDS),this.cb_s=y0(f0.CBANDS),this.eql_w=y0(f0.BLKSIZE/2)}var Tr=Rr,vt=it,ut=vt.System;vt.VbrMode;vt.Float;vt.ShortBlock;vt.Util;var Vs=vt.Arrays;vt.new_array_n;vt.new_byte;vt.new_double;vt.new_float;vt.new_float_n;vt.new_int;vt.new_int_n;vt.assert;Ce.STEPS_per_dB=100;Ce.MAX_dB=120;Ce.GAIN_NOT_ENOUGH_SAMPLES=-24601;Ce.GAIN_ANALYSIS_ERROR=0;Ce.GAIN_ANALYSIS_OK=1;Ce.INIT_GAIN_ANALYSIS_ERROR=0;Ce.INIT_GAIN_ANALYSIS_OK=1;Ce.YULE_ORDER=10;Ce.MAX_ORDER=Ce.YULE_ORDER;Ce.MAX_SAMP_FREQ=48e3;Ce.RMS_WINDOW_TIME_NUMERATOR=1;Ce.RMS_WINDOW_TIME_DENOMINATOR=20;Ce.MAX_SAMPLES_PER_WINDOW=Ce.MAX_SAMP_FREQ*Ce.RMS_WINDOW_TIME_NUMERATOR/Ce.RMS_WINDOW_TIME_DENOMINATOR+1;function Ce(){var t=64.82;Ce.YULE_ORDER;var e=.95;Ce.MAX_SAMP_FREQ;var i=Ce.RMS_WINDOW_TIME_NUMERATOR,n=Ce.RMS_WINDOW_TIME_DENOMINATOR;Ce.MAX_SAMPLES_PER_WINDOW;var d=[[.038575994352,-3.84664617118067,-.02160367184185,7.81501653005538,-.00123395316851,-11.34170355132042,-9291677959e-14,13.05504219327545,-.01655260341619,-12.28759895145294,.02161526843274,9.4829380631979,-.02074045215285,-5.87257861775999,.00594298065125,2.75465861874613,.00306428023191,-.86984376593551,.00012025322027,.13919314567432,.00288463683916],[.0541865640643,-3.47845948550071,-.02911007808948,6.36317777566148,-.00848709379851,-8.54751527471874,-.00851165645469,9.4769360780128,-.00834990904936,-8.81498681370155,.02245293253339,6.85401540936998,-.02596338512915,-4.39470996079559,.01624864962975,2.19611684890774,-.00240879051584,-.75104302451432,.00674613682247,.13149317958808,-.00187763777362],[.15457299681924,-2.37898834973084,-.09331049056315,2.84868151156327,-.06247880153653,-2.64577170229825,.02163541888798,2.23697657451713,-.05588393329856,-1.67148153367602,.04781476674921,1.00595954808547,.00222312597743,-.45953458054983,.03174092540049,.16378164858596,-.01390589421898,-.05032077717131,.00651420667831,.0234789740702,-.00881362733839],[.30296907319327,-1.61273165137247,-.22613988682123,1.0797749225997,-.08587323730772,-.2565625775407,.03282930172664,-.1627671912044,-.00915702933434,-.22638893773906,-.02364141202522,.39120800788284,-.00584456039913,-.22138138954925,.06276101321749,.04500235387352,-828086748e-14,.02005851806501,.00205861885564,.00302439095741,-.02950134983287],[.33642304856132,-1.49858979367799,-.2557224142557,.87350271418188,-.11828570177555,.12205022308084,.11921148675203,-.80774944671438,-.07834489609479,.47854794562326,-.0046997791438,-.12453458140019,-.0058950022444,-.04067510197014,.05724228140351,.08333755284107,.00832043980773,-.04237348025746,-.0163538138454,.02977207319925,-.0176017656815],[.4491525660845,-.62820619233671,-.14351757464547,.29661783706366,-.22784394429749,-.372563729424,-.01419140100551,.00213767857124,.04078262797139,-.42029820170918,-.12398163381748,.22199650564824,.04097565135648,.00613424350682,.10478503600251,.06747620744683,-.01863887810927,.05784820375801,-.03193428438915,.03222754072173,.00541907748707],[.56619470757641,-1.04800335126349,-.75464456939302,.29156311971249,.1624213774223,-.26806001042947,.16744243493672,.00819999645858,-.18901604199609,.45054734505008,.3093178284183,-.33032403314006,-.27562961986224,.0673936833311,.00647310677246,-.04784254229033,.08647503780351,.01639907836189,-.0378898455484,.01807364323573,-.00588215443421],[.58100494960553,-.51035327095184,-.53174909058578,-.31863563325245,-.14289799034253,-.20256413484477,.17520704835522,.1472815413433,.02377945217615,.38952639978999,.15558449135573,-.23313271880868,-.25344790059353,-.05246019024463,.01628462406333,-.02505961724053,.06920467763959,.02442357316099,-.03721611395801,.01818801111503,-.00749618797172],[.53648789255105,-.2504987195602,-.42163034350696,-.43193942311114,-.00275953611929,-.03424681017675,.04267842219415,-.04678328784242,-.10214864179676,.26408300200955,.14590772289388,.15113130533216,-.02459864859345,-.17556493366449,-.11202315195388,-.18823009262115,-.04060034127,.05477720428674,.0478866554818,.0470440968812,-.02217936801134]],o=[[.98621192462708,-1.97223372919527,-1.97242384925416,.97261396931306,.98621192462708],[.98500175787242,-1.96977855582618,-1.97000351574484,.9702284756635,.98500175787242],[.97938932735214,-1.95835380975398,-1.95877865470428,.95920349965459,.97938932735214],[.97531843204928,-1.95002759149878,-1.95063686409857,.95124613669835,.97531843204928],[.97316523498161,-1.94561023566527,-1.94633046996323,.94705070426118,.97316523498161],[.96454515552826,-1.92783286977036,-1.92909031105652,.93034775234268,.96454515552826],[.96009142950541,-1.91858953033784,-1.92018285901082,.92177618768381,.96009142950541],[.95856916599601,-1.9154210807478,-1.91713833199203,.91885558323625,.95856916599601],[.94597685600279,-1.88903307939452,-1.89195371200558,.89487434461664,.94597685600279]];function m(Z,O,w,N,J,U){for(;J--!=0;)w[N]=1e-10+Z[O+0]*U[0]-w[N-1]*U[1]+Z[O-1]*U[2]-w[N-2]*U[3]+Z[O-2]*U[4]-w[N-3]*U[5]+Z[O-3]*U[6]-w[N-4]*U[7]+Z[O-4]*U[8]-w[N-5]*U[9]+Z[O-5]*U[10]-w[N-6]*U[11]+Z[O-6]*U[12]-w[N-7]*U[13]+Z[O-7]*U[14]-w[N-8]*U[15]+Z[O-8]*U[16]-w[N-9]*U[17]+Z[O-9]*U[18]-w[N-10]*U[19]+Z[O-10]*U[20],++N,++O}function h(Z,O,w,N,J,U){for(;J--!=0;)w[N]=Z[O+0]*U[0]-w[N-1]*U[1]+Z[O-1]*U[2]-w[N-2]*U[3]+Z[O-2]*U[4],++N,++O}function S(Z,O){for(var w=0;w<MAX_ORDER;w++)Z.linprebuf[w]=Z.lstepbuf[w]=Z.loutbuf[w]=Z.rinprebuf[w]=Z.rstepbuf[w]=Z.routbuf[w]=0;switch(0|O){case 48e3:Z.reqindex=0;break;case 44100:Z.reqindex=1;break;case 32e3:Z.reqindex=2;break;case 24e3:Z.reqindex=3;break;case 22050:Z.reqindex=4;break;case 16e3:Z.reqindex=5;break;case 12e3:Z.reqindex=6;break;case 11025:Z.reqindex=7;break;case 8e3:Z.reqindex=8;break;default:return INIT_GAIN_ANALYSIS_ERROR}return Z.sampleWindow=0|(O*i+n-1)/n,Z.lsum=0,Z.rsum=0,Z.totsamp=0,Vs.ill(Z.A,0),INIT_GAIN_ANALYSIS_OK}this.InitGainAnalysis=function(Z,O){return S(Z,O)!=INIT_GAIN_ANALYSIS_OK?INIT_GAIN_ANALYSIS_ERROR:(Z.linpre=MAX_ORDER,Z.rinpre=MAX_ORDER,Z.lstep=MAX_ORDER,Z.rstep=MAX_ORDER,Z.lout=MAX_ORDER,Z.rout=MAX_ORDER,Vs.fill(Z.B,0),INIT_GAIN_ANALYSIS_OK)};function W(Z){return Z*Z}this.AnalyzeSamples=function(Z,O,w,N,J,U,k){var I,r,K,X,A,T,H;if(U==0)return GAIN_ANALYSIS_OK;switch(H=0,A=U,k){case 1:N=O,J=w;break;case 2:break;default:return GAIN_ANALYSIS_ERROR}for(U<MAX_ORDER?(ut.arraycopy(O,w,Z.linprebuf,MAX_ORDER,U),ut.arraycopy(N,J,Z.rinprebuf,MAX_ORDER,U)):(ut.arraycopy(O,w,Z.linprebuf,MAX_ORDER,MAX_ORDER),ut.arraycopy(N,J,Z.rinprebuf,MAX_ORDER,MAX_ORDER));A>0;){T=A>Z.sampleWindow-Z.totsamp?Z.sampleWindow-Z.totsamp:A,H<MAX_ORDER?(I=Z.linpre+H,r=Z.linprebuf,K=Z.rinpre+H,X=Z.rinprebuf,T>MAX_ORDER-H&&(T=MAX_ORDER-H)):(I=w+H,r=O,K=J+H,X=N),m(r,I,Z.lstepbuf,Z.lstep+Z.totsamp,T,d[Z.reqindex]),m(X,K,Z.rstepbuf,Z.rstep+Z.totsamp,T,d[Z.reqindex]),h(Z.lstepbuf,Z.lstep+Z.totsamp,Z.loutbuf,Z.lout+Z.totsamp,T,o[Z.reqindex]),h(Z.rstepbuf,Z.rstep+Z.totsamp,Z.routbuf,Z.rout+Z.totsamp,T,o[Z.reqindex]),I=Z.lout+Z.totsamp,r=Z.loutbuf,K=Z.rout+Z.totsamp,X=Z.routbuf;for(var p=T%8;p--!=0;)Z.lsum+=W(r[I++]),Z.rsum+=W(X[K++]);for(p=T/8;p--!=0;)Z.lsum+=W(r[I+0])+W(r[I+1])+W(r[I+2])+W(r[I+3])+W(r[I+4])+W(r[I+5])+W(r[I+6])+W(r[I+7]),I+=8,Z.rsum+=W(X[K+0])+W(X[K+1])+W(X[K+2])+W(X[K+3])+W(X[K+4])+W(X[K+5])+W(X[K+6])+W(X[K+7]),K+=8;if(A-=T,H+=T,Z.totsamp+=T,Z.totsamp==Z.sampleWindow){var u=Ce.STEPS_per_dB*10*Math.log10((Z.lsum+Z.rsum)/Z.totsamp*.5+1e-37),l=u<=0?0:0|u;l>=Z.A.length&&(l=Z.A.length-1),Z.A[l]++,Z.lsum=Z.rsum=0,ut.arraycopy(Z.loutbuf,Z.totsamp,Z.loutbuf,0,MAX_ORDER),ut.arraycopy(Z.routbuf,Z.totsamp,Z.routbuf,0,MAX_ORDER),ut.arraycopy(Z.lstepbuf,Z.totsamp,Z.lstepbuf,0,MAX_ORDER),ut.arraycopy(Z.rstepbuf,Z.totsamp,Z.rstepbuf,0,MAX_ORDER),Z.totsamp=0}if(Z.totsamp>Z.sampleWindow)return GAIN_ANALYSIS_ERROR}return U<MAX_ORDER?(ut.arraycopy(Z.linprebuf,U,Z.linprebuf,0,MAX_ORDER-U),ut.arraycopy(Z.rinprebuf,U,Z.rinprebuf,0,MAX_ORDER-U),ut.arraycopy(O,w,Z.linprebuf,MAX_ORDER-U,U),ut.arraycopy(N,J,Z.rinprebuf,MAX_ORDER-U,U)):(ut.arraycopy(O,w+U-MAX_ORDER,Z.linprebuf,0,MAX_ORDER),ut.arraycopy(N,J+U-MAX_ORDER,Z.rinprebuf,0,MAX_ORDER)),GAIN_ANALYSIS_OK};function v(Z,O){var w,N=0;for(w=0;w<O;w++)N+=Z[w];if(N==0)return GAIN_NOT_ENOUGH_SAMPLES;var J=0|Math.ceil(N*(1-e));for(w=O;w-- >0&&!((J-=Z[w])<=0););return t-w/Ce.STEPS_per_dB}this.GetTitleGain=function(Z){for(var O=v(Z.A,Z.A.length),w=0;w<Z.A.length;w++)Z.B[w]+=Z.A[w],Z.A[w]=0;for(var w=0;w<MAX_ORDER;w++)Z.linprebuf[w]=Z.lstepbuf[w]=Z.loutbuf[w]=Z.rinprebuf[w]=Z.rstepbuf[w]=Z.routbuf[w]=0;return Z.totsamp=0,Z.lsum=Z.rsum=0,O}}var Wr=Ce,It=it;It.System;It.VbrMode;It.Float;It.ShortBlock;It.Util;It.Arrays;It.new_array_n;It.new_byte;It.new_double;var x0=It.new_float;It.new_float_n;var Rs=It.new_int;It.new_int_n;It.assert;var ht=Wr;function Lr(){this.linprebuf=x0(ht.MAX_ORDER*2),this.linpre=0,this.lstepbuf=x0(ht.MAX_SAMPLES_PER_WINDOW+ht.MAX_ORDER),this.lstep=0,this.loutbuf=x0(ht.MAX_SAMPLES_PER_WINDOW+ht.MAX_ORDER),this.lout=0,this.rinprebuf=x0(ht.MAX_ORDER*2),this.rinpre=0,this.rstepbuf=x0(ht.MAX_SAMPLES_PER_WINDOW+ht.MAX_ORDER),this.rstep=0,this.routbuf=x0(ht.MAX_SAMPLES_PER_WINDOW+ht.MAX_ORDER),this.rout=0,this.sampleWindow=0,this.totsamp=0,this.lsum=0,this.rsum=0,this.freqindex=0,this.first=0,this.A=Rs(0|ht.STEPS_per_dB*ht.MAX_dB),this.B=Rs(0|ht.STEPS_per_dB*ht.MAX_dB)}var xr=Lr;function Hr(t){this.bits=t}var on=Hr,Vt=it;Vt.System;Vt.VbrMode;Vt.Float;Vt.ShortBlock;Vt.Util;Vt.Arrays;Vt.new_array_n;Vt.new_byte;Vt.new_double;var Ts=Vt.new_float;Vt.new_float_n;var Yr=Vt.new_int;Vt.new_int_n;var Ws=Vt.assert,wr=on,Ls=bt(),Kr=Di,Mr=yi;function kr(t){var e=t;this.quantize=e,this.iteration_loop=function(i,n,d,o){var m=i.internal_flags,h=Ts(Kr.SFBMAX),S=Ts(576),W=Yr(2),v=0,Z,O=m.l3_side,w=new wr(v);this.quantize.rv.ResvFrameBegin(i,w),v=w.bits;for(var N=0;N<m.mode_gr;N++){Z=this.quantize.qupvt.on_pe(i,n,W,v,N,N),m.mode_ext==Ls.MPG_MD_MS_LR&&(this.quantize.ms_convert(m.l3_side,N),this.quantize.qupvt.reduce_side(W,d[N],v,Z));for(var J=0;J<m.channels_out;J++){var U,k,I=O.tt[N][J];I.block_type!=Ls.SHORT_TYPE?(U=0,k=m.PSY.mask_adjust-U):(U=0,k=m.PSY.mask_adjust_short-U),m.masking_lower=Math.pow(10,k*.1),this.quantize.init_outer_loop(m,I),this.quantize.init_xrpow(m,I,S)&&(this.quantize.qupvt.calc_xmin(i,o[N][J],I,h),this.quantize.outer_loop(i,I,h,S,J,W[J])),this.quantize.iteration_finish_one(m,N,J),Ws(I.part2_3_length<=Mr.MAX_BITS_PER_CHANNEL),Ws(I.part2_3_length<=W[J])}}this.quantize.rv.ResvFrameEnd(m,v)}}var Br=kr;function xe(t,e,i,n){this.xlen=t,this.linmax=e,this.table=i,this.hlen=n}var ne={};ne.t1HB=[1,1,1,0];ne.t2HB=[1,2,1,3,1,1,3,2,0];ne.t3HB=[3,2,1,1,1,1,3,2,0];ne.t5HB=[1,2,6,5,3,1,4,4,7,5,7,1,6,1,1,0];ne.t6HB=[7,3,5,1,6,2,3,2,5,4,4,1,3,3,2,0];ne.t7HB=[1,2,10,19,16,10,3,3,7,10,5,3,11,4,13,17,8,4,12,11,18,15,11,2,7,6,9,14,3,1,6,4,5,3,2,0];ne.t8HB=[3,4,6,18,12,5,5,1,2,16,9,3,7,3,5,14,7,3,19,17,15,13,10,4,13,5,8,11,5,1,12,4,4,1,1,0];ne.t9HB=[7,5,9,14,15,7,6,4,5,5,6,7,7,6,8,8,8,5,15,6,9,10,5,1,11,7,9,6,4,1,14,4,6,2,6,0];ne.t10HB=[1,2,10,23,35,30,12,17,3,3,8,12,18,21,12,7,11,9,15,21,32,40,19,6,14,13,22,34,46,23,18,7,20,19,33,47,27,22,9,3,31,22,41,26,21,20,5,3,14,13,10,11,16,6,5,1,9,8,7,8,4,4,2,0];ne.t11HB=[3,4,10,24,34,33,21,15,5,3,4,10,32,17,11,10,11,7,13,18,30,31,20,5,25,11,19,59,27,18,12,5,35,33,31,58,30,16,7,5,28,26,32,19,17,15,8,14,14,12,9,13,14,9,4,1,11,4,6,6,6,3,2,0];ne.t12HB=[9,6,16,33,41,39,38,26,7,5,6,9,23,16,26,11,17,7,11,14,21,30,10,7,17,10,15,12,18,28,14,5,32,13,22,19,18,16,9,5,40,17,31,29,17,13,4,2,27,12,11,15,10,7,4,1,27,12,8,12,6,3,1,0];ne.t13HB=[1,5,14,21,34,51,46,71,42,52,68,52,67,44,43,19,3,4,12,19,31,26,44,33,31,24,32,24,31,35,22,14,15,13,23,36,59,49,77,65,29,40,30,40,27,33,42,16,22,20,37,61,56,79,73,64,43,76,56,37,26,31,25,14,35,16,60,57,97,75,114,91,54,73,55,41,48,53,23,24,58,27,50,96,76,70,93,84,77,58,79,29,74,49,41,17,47,45,78,74,115,94,90,79,69,83,71,50,59,38,36,15,72,34,56,95,92,85,91,90,86,73,77,65,51,44,43,42,43,20,30,44,55,78,72,87,78,61,46,54,37,30,20,16,53,25,41,37,44,59,54,81,66,76,57,54,37,18,39,11,35,33,31,57,42,82,72,80,47,58,55,21,22,26,38,22,53,25,23,38,70,60,51,36,55,26,34,23,27,14,9,7,34,32,28,39,49,75,30,52,48,40,52,28,18,17,9,5,45,21,34,64,56,50,49,45,31,19,12,15,10,7,6,3,48,23,20,39,36,35,53,21,16,23,13,10,6,1,4,2,16,15,17,27,25,20,29,11,17,12,16,8,1,1,0,1];ne.t15HB=[7,12,18,53,47,76,124,108,89,123,108,119,107,81,122,63,13,5,16,27,46,36,61,51,42,70,52,83,65,41,59,36,19,17,15,24,41,34,59,48,40,64,50,78,62,80,56,33,29,28,25,43,39,63,55,93,76,59,93,72,54,75,50,29,52,22,42,40,67,57,95,79,72,57,89,69,49,66,46,27,77,37,35,66,58,52,91,74,62,48,79,63,90,62,40,38,125,32,60,56,50,92,78,65,55,87,71,51,73,51,70,30,109,53,49,94,88,75,66,122,91,73,56,42,64,44,21,25,90,43,41,77,73,63,56,92,77,66,47,67,48,53,36,20,71,34,67,60,58,49,88,76,67,106,71,54,38,39,23,15,109,53,51,47,90,82,58,57,48,72,57,41,23,27,62,9,86,42,40,37,70,64,52,43,70,55,42,25,29,18,11,11,118,68,30,55,50,46,74,65,49,39,24,16,22,13,14,7,91,44,39,38,34,63,52,45,31,52,28,19,14,8,9,3,123,60,58,53,47,43,32,22,37,24,17,12,15,10,2,1,71,37,34,30,28,20,17,26,21,16,10,6,8,6,2,0];ne.t16HB=[1,5,14,44,74,63,110,93,172,149,138,242,225,195,376,17,3,4,12,20,35,62,53,47,83,75,68,119,201,107,207,9,15,13,23,38,67,58,103,90,161,72,127,117,110,209,206,16,45,21,39,69,64,114,99,87,158,140,252,212,199,387,365,26,75,36,68,65,115,101,179,164,155,264,246,226,395,382,362,9,66,30,59,56,102,185,173,265,142,253,232,400,388,378,445,16,111,54,52,100,184,178,160,133,257,244,228,217,385,366,715,10,98,48,91,88,165,157,148,261,248,407,397,372,380,889,884,8,85,84,81,159,156,143,260,249,427,401,392,383,727,713,708,7,154,76,73,141,131,256,245,426,406,394,384,735,359,710,352,11,139,129,67,125,247,233,229,219,393,743,737,720,885,882,439,4,243,120,118,115,227,223,396,746,742,736,721,712,706,223,436,6,202,224,222,218,216,389,386,381,364,888,443,707,440,437,1728,4,747,211,210,208,370,379,734,723,714,1735,883,877,876,3459,865,2,377,369,102,187,726,722,358,711,709,866,1734,871,3458,870,434,0,12,10,7,11,10,17,11,9,13,12,10,7,5,3,1,3];ne.t24HB=[15,13,46,80,146,262,248,434,426,669,653,649,621,517,1032,88,14,12,21,38,71,130,122,216,209,198,327,345,319,297,279,42,47,22,41,74,68,128,120,221,207,194,182,340,315,295,541,18,81,39,75,70,134,125,116,220,204,190,178,325,311,293,271,16,147,72,69,135,127,118,112,210,200,188,352,323,306,285,540,14,263,66,129,126,119,114,214,202,192,180,341,317,301,281,262,12,249,123,121,117,113,215,206,195,185,347,330,308,291,272,520,10,435,115,111,109,211,203,196,187,353,332,313,298,283,531,381,17,427,212,208,205,201,193,186,177,169,320,303,286,268,514,377,16,335,199,197,191,189,181,174,333,321,305,289,275,521,379,371,11,668,184,183,179,175,344,331,314,304,290,277,530,383,373,366,10,652,346,171,168,164,318,309,299,287,276,263,513,375,368,362,6,648,322,316,312,307,302,292,284,269,261,512,376,370,364,359,4,620,300,296,294,288,282,273,266,515,380,374,369,365,361,357,2,1033,280,278,274,267,264,259,382,378,372,367,363,360,358,356,0,43,20,19,17,15,13,11,9,7,6,4,7,5,3,1,3];ne.t32HB=[1,10,8,20,12,20,16,32,14,12,24,0,28,16,24,16];ne.t33HB=[15,28,26,48,22,40,36,64,14,24,20,32,12,16,8,0];ne.t1l=[1,4,3,5];ne.t2l=[1,4,7,4,5,7,6,7,8];ne.t3l=[2,3,7,4,4,7,6,7,8];ne.t5l=[1,4,7,8,4,5,8,9,7,8,9,10,8,8,9,10];ne.t6l=[3,4,6,8,4,4,6,7,5,6,7,8,7,7,8,9];ne.t7l=[1,4,7,9,9,10,4,6,8,9,9,10,7,7,9,10,10,11,8,9,10,11,11,11,8,9,10,11,11,12,9,10,11,12,12,12];ne.t8l=[2,4,7,9,9,10,4,4,6,10,10,10,7,6,8,10,10,11,9,10,10,11,11,12,9,9,10,11,12,12,10,10,11,11,13,13];ne.t9l=[3,4,6,7,9,10,4,5,6,7,8,10,5,6,7,8,9,10,7,7,8,9,9,10,8,8,9,9,10,11,9,9,10,10,11,11];ne.t10l=[1,4,7,9,10,10,10,11,4,6,8,9,10,11,10,10,7,8,9,10,11,12,11,11,8,9,10,11,12,12,11,12,9,10,11,12,12,12,12,12,10,11,12,12,13,13,12,13,9,10,11,12,12,12,13,13,10,10,11,12,12,13,13,13];ne.t11l=[2,4,6,8,9,10,9,10,4,5,6,8,10,10,9,10,6,7,8,9,10,11,10,10,8,8,9,11,10,12,10,11,9,10,10,11,11,12,11,12,9,10,11,12,12,13,12,13,9,9,9,10,11,12,12,12,9,9,10,11,12,12,12,12];ne.t12l=[4,4,6,8,9,10,10,10,4,5,6,7,9,9,10,10,6,6,7,8,9,10,9,10,7,7,8,8,9,10,10,10,8,8,9,9,10,10,10,11,9,9,10,10,10,11,10,11,9,9,9,10,10,11,11,12,10,10,10,11,11,11,11,12];ne.t13l=[1,5,7,8,9,10,10,11,10,11,12,12,13,13,14,14,4,6,8,9,10,10,11,11,11,11,12,12,13,14,14,14,7,8,9,10,11,11,12,12,11,12,12,13,13,14,15,15,8,9,10,11,11,12,12,12,12,13,13,13,13,14,15,15,9,9,11,11,12,12,13,13,12,13,13,14,14,15,15,16,10,10,11,12,12,12,13,13,13,13,14,13,15,15,16,16,10,11,12,12,13,13,13,13,13,14,14,14,15,15,16,16,11,11,12,13,13,13,14,14,14,14,15,15,15,16,18,18,10,10,11,12,12,13,13,14,14,14,14,15,15,16,17,17,11,11,12,12,13,13,13,15,14,15,15,16,16,16,18,17,11,12,12,13,13,14,14,15,14,15,16,15,16,17,18,19,12,12,12,13,14,14,14,14,15,15,15,16,17,17,17,18,12,13,13,14,14,15,14,15,16,16,17,17,17,18,18,18,13,13,14,15,15,15,16,16,16,16,16,17,18,17,18,18,14,14,14,15,15,15,17,16,16,19,17,17,17,19,18,18,13,14,15,16,16,16,17,16,17,17,18,18,21,20,21,18];ne.t15l=[3,5,6,8,8,9,10,10,10,11,11,12,12,12,13,14,5,5,7,8,9,9,10,10,10,11,11,12,12,12,13,13,6,7,7,8,9,9,10,10,10,11,11,12,12,13,13,13,7,8,8,9,9,10,10,11,11,11,12,12,12,13,13,13,8,8,9,9,10,10,11,11,11,11,12,12,12,13,13,13,9,9,9,10,10,10,11,11,11,11,12,12,13,13,13,14,10,9,10,10,10,11,11,11,11,12,12,12,13,13,14,14,10,10,10,11,11,11,11,12,12,12,12,12,13,13,13,14,10,10,10,11,11,11,11,12,12,12,12,13,13,14,14,14,10,10,11,11,11,11,12,12,12,13,13,13,13,14,14,14,11,11,11,11,12,12,12,12,12,13,13,13,13,14,15,14,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,15,12,12,11,12,12,12,13,13,13,13,13,13,14,14,15,15,12,12,12,12,12,13,13,13,13,14,14,14,14,14,15,15,13,13,13,13,13,13,13,13,14,14,14,14,15,15,14,15,13,13,13,13,13,13,13,14,14,14,14,14,15,15,15,15];ne.t16_5l=[1,5,7,9,10,10,11,11,12,12,12,13,13,13,14,11,4,6,8,9,10,11,11,11,12,12,12,13,14,13,14,11,7,8,9,10,11,11,12,12,13,12,13,13,13,14,14,12,9,9,10,11,11,12,12,12,13,13,14,14,14,15,15,13,10,10,11,11,12,12,13,13,13,14,14,14,15,15,15,12,10,10,11,11,12,13,13,14,13,14,14,15,15,15,16,13,11,11,11,12,13,13,13,13,14,14,14,14,15,15,16,13,11,11,12,12,13,13,13,14,14,15,15,15,15,17,17,13,11,12,12,13,13,13,14,14,15,15,15,15,16,16,16,13,12,12,12,13,13,14,14,15,15,15,15,16,15,16,15,14,12,13,12,13,14,14,14,14,15,16,16,16,17,17,16,13,13,13,13,13,14,14,15,16,16,16,16,16,16,15,16,14,13,14,14,14,14,15,15,15,15,17,16,16,16,16,18,14,15,14,14,14,15,15,16,16,16,18,17,17,17,19,17,14,14,15,13,14,16,16,15,16,16,17,18,17,19,17,16,14,11,11,11,12,12,13,13,13,14,14,14,14,14,14,14,12];ne.t16l=[1,5,7,9,10,10,11,11,12,12,12,13,13,13,14,10,4,6,8,9,10,11,11,11,12,12,12,13,14,13,14,10,7,8,9,10,11,11,12,12,13,12,13,13,13,14,14,11,9,9,10,11,11,12,12,12,13,13,14,14,14,15,15,12,10,10,11,11,12,12,13,13,13,14,14,14,15,15,15,11,10,10,11,11,12,13,13,14,13,14,14,15,15,15,16,12,11,11,11,12,13,13,13,13,14,14,14,14,15,15,16,12,11,11,12,12,13,13,13,14,14,15,15,15,15,17,17,12,11,12,12,13,13,13,14,14,15,15,15,15,16,16,16,12,12,12,12,13,13,14,14,15,15,15,15,16,15,16,15,13,12,13,12,13,14,14,14,14,15,16,16,16,17,17,16,12,13,13,13,13,14,14,15,16,16,16,16,16,16,15,16,13,13,14,14,14,14,15,15,15,15,17,16,16,16,16,18,13,15,14,14,14,15,15,16,16,16,18,17,17,17,19,17,13,14,15,13,14,16,16,15,16,16,17,18,17,19,17,16,13,10,10,10,11,11,12,12,12,13,13,13,13,13,13,13,10];ne.t24l=[4,5,7,8,9,10,10,11,11,12,12,12,12,12,13,10,5,6,7,8,9,10,10,11,11,11,12,12,12,12,12,10,7,7,8,9,9,10,10,11,11,11,11,12,12,12,13,9,8,8,9,9,10,10,10,11,11,11,11,12,12,12,12,9,9,9,9,10,10,10,10,11,11,11,12,12,12,12,13,9,10,9,10,10,10,10,11,11,11,11,12,12,12,12,12,9,10,10,10,10,10,11,11,11,11,12,12,12,12,12,13,9,11,10,10,10,11,11,11,11,12,12,12,12,12,13,13,10,11,11,11,11,11,11,11,11,11,12,12,12,12,13,13,10,11,11,11,11,11,11,11,12,12,12,12,12,13,13,13,10,12,11,11,11,11,12,12,12,12,12,12,13,13,13,13,10,12,12,11,11,11,12,12,12,12,12,12,13,13,13,13,10,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,10,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,10,13,12,12,12,12,12,12,13,13,13,13,13,13,13,13,10,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,6];ne.t32l=[1,5,5,7,5,8,7,9,5,7,7,9,7,9,9,10];ne.t33l=[4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8];ne.ht=[new xe(0,0,null,null),new xe(2,0,ne.t1HB,ne.t1l),new xe(3,0,ne.t2HB,ne.t2l),new xe(3,0,ne.t3HB,ne.t3l),new xe(0,0,null,null),new xe(4,0,ne.t5HB,ne.t5l),new xe(4,0,ne.t6HB,ne.t6l),new xe(6,0,ne.t7HB,ne.t7l),new xe(6,0,ne.t8HB,ne.t8l),new xe(6,0,ne.t9HB,ne.t9l),new xe(8,0,ne.t10HB,ne.t10l),new xe(8,0,ne.t11HB,ne.t11l),new xe(8,0,ne.t12HB,ne.t12l),new xe(16,0,ne.t13HB,ne.t13l),new xe(0,0,null,ne.t16_5l),new xe(16,0,ne.t15HB,ne.t15l),new xe(1,1,ne.t16HB,ne.t16l),new xe(2,3,ne.t16HB,ne.t16l),new xe(3,7,ne.t16HB,ne.t16l),new xe(4,15,ne.t16HB,ne.t16l),new xe(6,63,ne.t16HB,ne.t16l),new xe(8,255,ne.t16HB,ne.t16l),new xe(10,1023,ne.t16HB,ne.t16l),new xe(13,8191,ne.t16HB,ne.t16l),new xe(4,15,ne.t24HB,ne.t24l),new xe(5,31,ne.t24HB,ne.t24l),new xe(6,63,ne.t24HB,ne.t24l),new xe(7,127,ne.t24HB,ne.t24l),new xe(8,255,ne.t24HB,ne.t24l),new xe(9,511,ne.t24HB,ne.t24l),new xe(11,2047,ne.t24HB,ne.t24l),new xe(13,8191,ne.t24HB,ne.t24l),new xe(0,0,ne.t32HB,ne.t32l),new xe(0,0,ne.t33HB,ne.t33l)];ne.largetbl=[65540,327685,458759,589832,655369,655370,720906,720907,786443,786444,786444,851980,851980,851980,917517,655370,262149,393222,524295,589832,655369,720906,720906,720907,786443,786443,786444,851980,917516,851980,917516,655370,458759,524295,589832,655369,720905,720906,786442,786443,851979,786443,851979,851980,851980,917516,917517,720905,589832,589832,655369,720905,720906,786442,786442,786443,851979,851979,917515,917516,917516,983052,983052,786441,655369,655369,720905,720906,786442,786442,851978,851979,851979,917515,917516,917516,983052,983052,983053,720905,655370,655369,720906,720906,786442,851978,851979,917515,851979,917515,917516,983052,983052,983052,1048588,786441,720906,720906,720906,786442,851978,851979,851979,851979,917515,917516,917516,917516,983052,983052,1048589,786441,720907,720906,786442,786442,851979,851979,851979,917515,917516,983052,983052,983052,983052,1114125,1114125,786442,720907,786443,786443,851979,851979,851979,917515,917515,983051,983052,983052,983052,1048588,1048589,1048589,786442,786443,786443,786443,851979,851979,917515,917515,983052,983052,983052,983052,1048588,983053,1048589,983053,851978,786444,851979,786443,851979,917515,917516,917516,917516,983052,1048588,1048588,1048589,1114125,1114125,1048589,786442,851980,851980,851979,851979,917515,917516,983052,1048588,1048588,1048588,1048588,1048589,1048589,983053,1048589,851978,851980,917516,917516,917516,917516,983052,983052,983052,983052,1114124,1048589,1048589,1048589,1048589,1179661,851978,983052,917516,917516,917516,983052,983052,1048588,1048588,1048589,1179661,1114125,1114125,1114125,1245197,1114125,851978,917517,983052,851980,917516,1048588,1048588,983052,1048589,1048589,1114125,1179661,1114125,1245197,1114125,1048589,851978,655369,655369,655369,720905,720905,786441,786441,786441,851977,851977,851977,851978,851978,851978,851978,655366];ne.table23=[65538,262147,458759,262148,327684,458759,393222,458759,524296];ne.table56=[65539,262148,458758,524296,262148,327684,524294,589831,458757,524294,589831,655368,524295,524295,589832,655369];ne.bitrate_table=[[0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1],[0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1],[0,8,16,24,32,40,48,56,64,-1,-1,-1,-1,-1,-1,-1]];ne.samplerate_table=[[22050,24e3,16e3,-1],[44100,48e3,32e3,-1],[11025,12e3,8e3,-1]];ne.scfsi_band=[0,6,11,16,21];var $i=ne,e0=ln,Rt=it;Rt.System;var Z0=Rt.VbrMode,ai=Rt.Float;Rt.ShortBlock;var Ki=Rt.Util;Rt.Arrays;Rt.new_array_n;Rt.new_byte;Rt.new_double;var X0=Rt.new_float;Rt.new_float_n;var Cr=Rt.new_int;Rt.new_int_n;var t0=Rt.assert,et=bt(),gr=on,lt=yi;wt.Q_MAX=257;wt.Q_MAX2=116;wt.LARGE_BITS=1e5;wt.IXMAX_VAL=8206;function wt(){var t=null,e=null,i=null;this.setModules=function(I,r,K){t=I,e=r,i=K};function n(I){return t0(0<=I+wt.Q_MAX2&&I<wt.Q_MAX),Z[I+wt.Q_MAX2]}this.IPOW20=function(I){return t0(0<=I&&I<wt.Q_MAX),O[I]};var d=2220446049250313e-31,o=wt.IXMAX_VAL,m=o+2,h=wt.Q_MAX,S=wt.Q_MAX2;wt.LARGE_BITS;var W=100;this.nr_of_sfb_block=[[[6,5,5,5],[9,9,9,9],[6,9,9,9]],[[6,5,7,3],[9,9,12,6],[6,9,12,6]],[[11,10,0,0],[18,18,0,0],[15,18,0,0]],[[7,7,7,0],[12,12,12,0],[6,15,12,0]],[[6,6,6,3],[12,9,9,6],[6,12,9,6]],[[8,8,5,0],[15,12,9,0],[6,18,9,0]]];var v=[0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0];this.pretab=v,this.sfBandIndex=[new e0([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,24,32,42,56,74,100,132,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,332,394,464,540,576],[0,4,8,12,18,26,36,48,62,80,104,136,180,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,26,36,48,62,80,104,134,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576],[0,4,8,12,16,22,30,40,52,66,84,106,136,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576],[0,4,8,12,16,22,28,38,50,64,80,100,126,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576],[0,4,8,12,16,22,30,42,58,78,104,138,180,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0/3,12/3,24/3,36/3,54/3,78/3,108/3,144/3,186/3,240/3,312/3,402/3,522/3,576/3],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0/3,12/3,24/3,36/3,54/3,78/3,108/3,144/3,186/3,240/3,312/3,402/3,522/3,576/3],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576],[0/3,24/3,48/3,72/3,108/3,156/3,216/3,288/3,372/3,480/3,486/3,492/3,498/3,576/3],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0])];var Z=X0(h+S+1),O=X0(h),w=X0(m),N=X0(m);this.adj43=N;function J(I,r){var K=i.ATHformula(r,I);return K-=W,K=Math.pow(10,K/10+I.ATHlower),K}function U(I){for(var r=I.internal_flags.ATH.l,K=I.internal_flags.ATH.psfb21,X=I.internal_flags.ATH.s,A=I.internal_flags.ATH.psfb12,T=I.internal_flags,H=I.out_samplerate,p=0;p<et.SBMAX_l;p++){var u=T.scalefac_band.l[p],l=T.scalefac_band.l[p+1];r[p]=ai.MAX_VALUE;for(var s=u;s<l;s++){var V=s*H/1152,_=J(I,V);r[p]=Math.min(r[p],_)}}for(var p=0;p<et.PSFB21;p++){var u=T.scalefac_band.psfb21[p],l=T.scalefac_band.psfb21[p+1];K[p]=ai.MAX_VALUE;for(var s=u;s<l;s++){var V=s*H/1152,_=J(I,V);K[p]=Math.min(K[p],_)}}for(var p=0;p<et.SBMAX_s;p++){var u=T.scalefac_band.s[p],l=T.scalefac_band.s[p+1];X[p]=ai.MAX_VALUE;for(var s=u;s<l;s++){var V=s*H/384,_=J(I,V);X[p]=Math.min(X[p],_)}X[p]*=T.scalefac_band.s[p+1]-T.scalefac_band.s[p]}for(var p=0;p<et.PSFB12;p++){var u=T.scalefac_band.psfb12[p],l=T.scalefac_band.psfb12[p+1];A[p]=ai.MAX_VALUE;for(var s=u;s<l;s++){var V=s*H/384,_=J(I,V);A[p]=Math.min(A[p],_)}A[p]*=T.scalefac_band.s[13]-T.scalefac_band.s[12]}if(I.noATH){for(var p=0;p<et.SBMAX_l;p++)r[p]=1e-20;for(var p=0;p<et.PSFB21;p++)K[p]=1e-20;for(var p=0;p<et.SBMAX_s;p++)X[p]=1e-20;for(var p=0;p<et.PSFB12;p++)A[p]=1e-20}T.ATH.floor=10*Math.log10(J(I,-1))}this.iteration_init=function(I){var r=I.internal_flags,K=r.l3_side,X;if(r.iteration_init_init==0){for(r.iteration_init_init=1,K.main_data_begin=0,U(I),w[0]=0,X=1;X<m;X++)w[X]=Math.pow(X,4/3);for(X=0;X<m-1;X++)N[X]=X+1-Math.pow(.5*(w[X]+w[X+1]),.75);for(N[X]=.5,X=0;X<h;X++)O[X]=Math.pow(2,(X-210)*-.1875);for(X=0;X<=h+S;X++)Z[X]=Math.pow(2,(X-210-S)*.25);t.huffman_init(r);{var A,T,H,p;for(X=I.exp_nspsytune>>2&63,X>=32&&(X-=64),A=Math.pow(10,X/4/10),X=I.exp_nspsytune>>8&63,X>=32&&(X-=64),T=Math.pow(10,X/4/10),X=I.exp_nspsytune>>14&63,X>=32&&(X-=64),H=Math.pow(10,X/4/10),X=I.exp_nspsytune>>20&63,X>=32&&(X-=64),p=H*Math.pow(10,X/4/10),X=0;X<et.SBMAX_l;X++){var u;X<=6?u=A:X<=13?u=T:X<=20?u=H:u=p,r.nsPsy.longfact[X]=u}for(X=0;X<et.SBMAX_s;X++){var u;X<=5?u=A:X<=10?u=T:X<=11?u=H:u=p,r.nsPsy.shortfact[X]=u}}}},this.on_pe=function(I,r,K,X,A,T){var H=I.internal_flags,p=0,u,l=Cr(2),s,V=new gr(p),_=e.ResvMaxBits(I,X,V,T);p=V.bits;var R=p+_;for(R>lt.MAX_BITS_PER_GRANULE&&(R=lt.MAX_BITS_PER_GRANULE),u=0,s=0;s<H.channels_out;++s)K[s]=Math.min(lt.MAX_BITS_PER_CHANNEL,p/H.channels_out),l[s]=0|K[s]*r[A][s]/700-K[s],l[s]>X*3/4&&(l[s]=X*3/4),l[s]<0&&(l[s]=0),l[s]+K[s]>lt.MAX_BITS_PER_CHANNEL&&(l[s]=Math.max(0,lt.MAX_BITS_PER_CHANNEL-K[s])),u+=l[s];if(u>_)for(s=0;s<H.channels_out;++s)l[s]=_*l[s]/u;for(s=0;s<H.channels_out;++s)K[s]+=l[s],_-=l[s];for(u=0,s=0;s<H.channels_out;++s)u+=K[s];if(u>lt.MAX_BITS_PER_GRANULE){var f=0;for(s=0;s<H.channels_out;++s)K[s]*=lt.MAX_BITS_PER_GRANULE,K[s]/=u,f+=K[s];t0(f<=lt.MAX_BITS_PER_GRANULE)}return R},this.reduce_side=function(I,r,K,X){t0(X<=lt.MAX_BITS_PER_GRANULE),t0(I[0]+I[1]<=lt.MAX_BITS_PER_GRANULE);var A=.33*(.5-r)/.5;A<0&&(A=0),A>.5&&(A=.5);var T=0|A*.5*(I[0]+I[1]);T>lt.MAX_BITS_PER_CHANNEL-I[0]&&(T=lt.MAX_BITS_PER_CHANNEL-I[0]),T<0&&(T=0),I[1]>=125&&(I[1]-T>125?(I[0]<K&&(I[0]+=T),I[1]-=T):(I[0]+=I[1]-125,I[1]=125)),T=I[0]+I[1],T>X&&(I[0]=X*I[0]/T,I[1]=X*I[1]/T),t0(I[0]<=lt.MAX_BITS_PER_CHANNEL),t0(I[1]<=lt.MAX_BITS_PER_CHANNEL),t0(I[0]+I[1]<=lt.MAX_BITS_PER_GRANULE)},this.athAdjust=function(I,r,K){var X=90.30873362,A=94.82444863,T=Ki.FAST_LOG10_X(r,10),H=I*I,p=0;return T-=K,H>1e-20&&(p=1+Ki.FAST_LOG10_X(H,10/X)),p<0&&(p=0),T*=p,T+=K+X-A,Math.pow(10,.1*T)},this.calc_xmin=function(I,r,K,X){var A=0,T=I.internal_flags,H,p=0,u=0,l=T.ATH,s=K.xr,V=I.VBR==Z0.vbr_mtrh?1:0,_=T.masking_lower;for((I.VBR==Z0.vbr_mtrh||I.VBR==Z0.vbr_mt)&&(_=1),H=0;H<K.psy_lmax;H++){var R,f,j,g,P,a;I.VBR==Z0.vbr_rh||I.VBR==Z0.vbr_mtrh?f=athAdjust(l.adjust,l.l[H],l.floor):f=l.adjust*l.l[H],P=K.width[H],j=f/P,g=d,a=P>>1,R=0;do{var c,M;c=s[p]*s[p],R+=c,g+=c<j?c:j,p++,M=s[p]*s[p],R+=M,g+=M<j?M:j,p++}while(--a>0);if(R>f&&u++,H==et.SBPSY_l){var L=f*T.nsPsy.longfact[H];g<L&&(g=L)}if(V!=0&&(f=g),!I.ATHonly){var ee=r.en.l[H];if(ee>0){var L;L=R*r.thm.l[H]*_/ee,V!=0&&(L*=T.nsPsy.longfact[H]),f<L&&(f=L)}}V!=0?X[A++]=f:X[A++]=f*T.nsPsy.longfact[H]}var ae=575;if(K.block_type!=et.SHORT_TYPE)for(var le=576;le--!=0&&BitStream.EQ(s[le],0);)ae=le;K.max_nonzero_coeff=ae;for(var re=K.sfb_smin;H<K.psymax;re++,H+=3){var P,_e,he;for(I.VBR==Z0.vbr_rh||I.VBR==Z0.vbr_mtrh?he=athAdjust(l.adjust,l.s[re],l.floor):he=l.adjust*l.s[re],P=K.width[H],_e=0;_e<3;_e++){var R=0,f,j,g,a=P>>1;j=he/P,g=d;do{var c,M;c=s[p]*s[p],R+=c,g+=c<j?c:j,p++,M=s[p]*s[p],R+=M,g+=M<j?M:j,p++}while(--a>0);if(R>he&&u++,re==et.SBPSY_s){var L=he*T.nsPsy.shortfact[re];g<L&&(g=L)}if(V!=0?f=g:f=he,!I.ATHonly&&!I.ATHshort){var ee=r.en.s[re][_e];if(ee>0){var L;L=R*r.thm.s[re][_e]*_/ee,V!=0&&(L*=T.nsPsy.shortfact[re]),f<L&&(f=L)}}V!=0?X[A++]=f:X[A++]=f*T.nsPsy.shortfact[re]}I.useTemporal&&(X[A-3]>X[A-3+1]&&(X[A-3+1]+=(X[A-3]-X[A-3+1])*T.decay),X[A-3+1]>X[A-3+2]&&(X[A-3+2]+=(X[A-3+1]-X[A-3+2])*T.decay))}return u};function k(I){this.s=I}this.calc_noise_core=function(I,r,K,X){var A=0,T=r.s,H=I.l3_enc;if(T>I.count1)for(;K--!=0;){var p;p=I.xr[T],T++,A+=p*p,p=I.xr[T],T++,A+=p*p}else if(T>I.big_values){var u=X0(2);for(u[0]=0,u[1]=X;K--!=0;){var p;p=Math.abs(I.xr[T])-u[H[T]],T++,A+=p*p,p=Math.abs(I.xr[T])-u[H[T]],T++,A+=p*p}}else for(;K--!=0;){var p;p=Math.abs(I.xr[T])-w[H[T]]*X,T++,A+=p*p,p=Math.abs(I.xr[T])-w[H[T]]*X,T++,A+=p*p}return r.s=T,A},this.calc_noise=function(I,r,K,X,A){var T=0,H=0,p,u,l=0,s=0,V=0,_=-20,R=0,f=I.scalefac,j=0;for(X.over_SSD=0,p=0;p<I.psymax;p++){var g=I.global_gain-(f[j++]+(I.preflag!=0?v[p]:0)<<I.scalefac_scale+1)-I.subblock_gain[I.window[p]]*8,P=0;if(A!=null&&A.step[p]==g)P=A.noise[p],R+=I.width[p],K[T++]=P/r[H++],P=A.noise_log[p];else{var a=n(g);if(u=I.width[p]>>1,R+I.width[p]>I.max_nonzero_coeff){var c;c=I.max_nonzero_coeff-R+1,c>0?u=c>>1:u=0}var M=new k(R);P=this.calc_noise_core(I,M,u,a),R=M.s,A!=null&&(A.step[p]=g,A.noise[p]=P),P=K[T++]=P/r[H++],P=Ki.FAST_LOG10(Math.max(P,1e-20)),A!=null&&(A.noise_log[p]=P)}if(A!=null&&(A.global_gain=I.global_gain),V+=P,P>0){var L;L=Math.max(0|P*10+.5,1),X.over_SSD+=L*L,l++,s+=P}_=Math.max(_,P)}return X.over_count=l,X.tot_noise=V,X.over_noise=s,X.max_noise=_,l},this.set_pinfo=function(I,r,K,X,A){var T=I.internal_flags,H,p,u,l,s,V=r.scalefac_scale==0?.5:1,_=r.scalefac,R=X0(L3Side.SFBMAX),f=X0(L3Side.SFBMAX),j=new CalcNoiseResult;calc_xmin(I,K,r,R),calc_noise(r,R,f,j,null);var g=0;for(p=r.sfb_lmax,r.block_type!=et.SHORT_TYPE&&r.mixed_block_flag==0&&(p=22),H=0;H<p;H++){var P=T.scalefac_band.l[H],a=T.scalefac_band.l[H+1],c=a-P;for(l=0;g<a;g++)l+=r.xr[g]*r.xr[g];l/=c,s=1e15,T.pinfo.en[X][A][H]=s*l,T.pinfo.xfsf[X][A][H]=s*R[H]*f[H]/c,K.en.l[H]>0&&!I.ATHonly?l=l/K.en.l[H]:l=0,T.pinfo.thr[X][A][H]=s*Math.max(l*K.thm.l[H],T.ATH.l[H]),T.pinfo.LAMEsfb[X][A][H]=0,r.preflag!=0&&H>=11&&(T.pinfo.LAMEsfb[X][A][H]=-V*v[H]),H<et.SBPSY_l&&(t0(_[H]>=0),T.pinfo.LAMEsfb[X][A][H]-=V*_[H])}if(r.block_type==et.SHORT_TYPE)for(p=H,H=r.sfb_smin;H<et.SBMAX_s;H++)for(var P=T.scalefac_band.s[H],a=T.scalefac_band.s[H+1],c=a-P,M=0;M<3;M++){for(l=0,u=P;u<a;u++)l+=r.xr[g]*r.xr[g],g++;l=Math.max(l/c,1e-20),s=1e15,T.pinfo.en_s[X][A][3*H+M]=s*l,T.pinfo.xfsf_s[X][A][3*H+M]=s*R[p]*f[p]/c,K.en.s[H][M]>0?l=l/K.en.s[H][M]:l=0,(I.ATHonly||I.ATHshort)&&(l=0),T.pinfo.thr_s[X][A][3*H+M]=s*Math.max(l*K.thm.s[H][M],T.ATH.s[H]),T.pinfo.LAMEsfb_s[X][A][3*H+M]=-2*r.subblock_gain[M],H<et.SBPSY_s&&(T.pinfo.LAMEsfb_s[X][A][3*H+M]-=V*_[p]),p++}T.pinfo.LAMEqss[X][A]=r.global_gain,T.pinfo.LAMEmainbits[X][A]=r.part2_3_length+r.part2_length,T.pinfo.LAMEsfbits[X][A]=r.part2_length,T.pinfo.over[X][A]=j.over_count,T.pinfo.max_noise[X][A]=j.max_noise*10,T.pinfo.over_noise[X][A]=j.over_noise*10,T.pinfo.tot_noise[X][A]=j.tot_noise*10,T.pinfo.over_SSD[X][A]=j.over_SSD}}var Fr=wt,Tt=it,Jr=Tt.System;Tt.VbrMode;Tt.Float;Tt.ShortBlock;Tt.Util;var Er=Tt.Arrays;Tt.new_array_n;Tt.new_byte;Tt.new_double;Tt.new_float;Tt.new_float_n;var N0=Tt.new_int;Tt.new_int_n;var Ct=Tt.assert,Je=bt(),Ee=$i,Nr=an,_0=Fr;function Oi(){var t=null;this.qupvt=null,this.setModules=function(u){this.qupvt=u,t=u};function e(u){this.bits=0|u}var i=[[0,0],[0,0],[0,0],[0,0],[0,0],[0,1],[1,1],[1,1],[1,2],[2,2],[2,3],[2,3],[3,4],[3,4],[3,4],[4,5],[4,5],[4,6],[5,6],[5,6],[5,7],[6,7],[6,7]];function n(u,l,s,V,_,R){var f=.5946/l;for(Ct(u>0),u=u>>1;u--!=0;)_[R++]=f>s[V++]?0:1,_[R++]=f>s[V++]?0:1}function d(u,l,s,V,_,R){Ct(u>0),u=u>>1;var f=u%2;for(u=u>>1;u--!=0;){var j,g,P,a,c,M,L,ee;j=s[V++]*l,g=s[V++]*l,c=0|j,P=s[V++]*l,M=0|g,a=s[V++]*l,L=0|P,j+=t.adj43[c],ee=0|a,g+=t.adj43[M],_[R++]=0|j,P+=t.adj43[L],_[R++]=0|g,a+=t.adj43[ee],_[R++]=0|P,_[R++]=0|a}if(f!=0){var j,g,c,M;j=s[V++]*l,g=s[V++]*l,c=0|j,M=0|g,j+=t.adj43[c],g+=t.adj43[M],_[R++]=0|j,_[R++]=0|g}}function o(u,l,s,V,_){var R,f,j=0,g,P=0,a=0,c=0,M=l,L=0,ee=M,ae=0,le=u,re=0;for(g=_!=null&&V.global_gain==_.global_gain,V.block_type==Je.SHORT_TYPE?f=38:f=21,R=0;R<=f;R++){var _e=-1;if((g||V.block_type==Je.NORM_TYPE)&&(_e=V.global_gain-(V.scalefac[R]+(V.preflag!=0?t.pretab[R]:0)<<V.scalefac_scale+1)-V.subblock_gain[V.window[R]]*8),Ct(V.width[R]>=0),g&&_.step[R]==_e)P!=0&&(d(P,s,le,re,ee,ae),P=0),a!=0&&(n(a,s,le,re,ee,ae),a=0);else{var he=V.width[R];if(j+V.width[R]>V.max_nonzero_coeff){var oe;oe=V.max_nonzero_coeff-j+1,Er.fill(l,V.max_nonzero_coeff,576,0),he=oe,he<0&&(he=0),R=f+1}if(P==0&&a==0&&(ee=M,ae=L,le=u,re=c),_!=null&&_.sfb_count1>0&&R>=_.sfb_count1&&_.step[R]>0&&_e>=_.step[R]?(P!=0&&(d(P,s,le,re,ee,ae),P=0,ee=M,ae=L,le=u,re=c),a+=he):(a!=0&&(n(a,s,le,re,ee,ae),a=0,ee=M,ae=L,le=u,re=c),P+=he),he<=0){a!=0&&(n(a,s,le,re,ee,ae),a=0),P!=0&&(d(P,s,le,re,ee,ae),P=0);break}}R<=f&&(L+=V.width[R],c+=V.width[R],j+=V.width[R])}P!=0&&(d(P,s,le,re,ee,ae),P=0),a!=0&&(n(a,s,le,re,ee,ae),a=0)}function m(u,l,s){var V=0,_=0;do{var R=u[l++],f=u[l++];V<R&&(V=R),_<f&&(_=f)}while(l<s);return V<_&&(V=_),V}function h(u,l,s,V,_,R){var f=Ee.ht[V].xlen*65536+Ee.ht[_].xlen,j=0,g;do{var P=u[l++],a=u[l++];P!=0&&(P>14&&(P=15,j+=f),P*=16),a!=0&&(a>14&&(a=15,j+=f),P+=a),j+=Ee.largetbl[P]}while(l<s);return g=j&65535,j>>=16,j>g&&(j=g,V=_),R.bits+=j,V}function S(u,l,s,V){var _=0,R=Ee.ht[1].hlen;do{var f=u[l+0]*2+u[l+1];l+=2,_+=R[f]}while(l<s);return V.bits+=_,1}function W(u,l,s,V,_){var R=0,f,j=Ee.ht[V].xlen,g;V==2?g=Ee.table23:g=Ee.table56;do{var P=u[l+0]*j+u[l+1];l+=2,R+=g[P]}while(l<s);return f=R&65535,R>>=16,R>f&&(R=f,V++),_.bits+=R,V}function v(u,l,s,V,_){var R=0,f=0,j=0,g=Ee.ht[V].xlen,P=Ee.ht[V].hlen,a=Ee.ht[V+1].hlen,c=Ee.ht[V+2].hlen;do{var M=u[l+0]*g+u[l+1];l+=2,R+=P[M],f+=a[M],j+=c[M]}while(l<s);var L=V;return R>f&&(R=f,L++),R>j&&(R=j,L=V+2),_.bits+=R,L}var Z=[1,2,5,7,7,10,10,13,13,13,13,13,13,13,13];function O(u,l,s,V){var _=m(u,l,s);switch(_){case 0:return _;case 1:return S(u,l,s,V);case 2:case 3:return W(u,l,s,Z[_-1],V);case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:return v(u,l,s,Z[_-1],V);default:if(_>_0.IXMAX_VAL)return V.bits=_0.LARGE_BITS,-1;_-=15;var R;for(R=24;R<32&&!(Ee.ht[R].linmax>=_);R++);var f;for(f=R-8;f<24&&!(Ee.ht[f].linmax>=_);f++);return h(u,l,s,f,R,V)}}this.noquant_count_bits=function(u,l,s){var V=l.l3_enc,_=Math.min(576,l.max_nonzero_coeff+2>>1<<1);for(s!=null&&(s.sfb_count1=0);_>1&&!(V[_-1]|V[_-2]);_-=2);l.count1=_;for(var R=0,f=0;_>3;_-=4){var j;if(((V[_-1]|V[_-2]|V[_-3]|V[_-4])&2147483647)>1)break;j=((V[_-4]*2+V[_-3])*2+V[_-2])*2+V[_-1],R+=Ee.t32l[j],f+=Ee.t33l[j]}var g=R;if(l.count1table_select=0,R>f&&(g=f,l.count1table_select=1),l.count1bits=g,l.big_values=_,_==0)return g;if(l.block_type==Je.SHORT_TYPE)R=3*u.scalefac_band.s[3],R>l.big_values&&(R=l.big_values),f=l.big_values;else if(l.block_type==Je.NORM_TYPE){if(Ct(_<=576),R=l.region0_count=u.bv_scf[_-2],f=l.region1_count=u.bv_scf[_-1],Ct(R+f+2<Je.SBPSY_l),f=u.scalefac_band.l[R+f+2],R=u.scalefac_band.l[R+1],f<_){var P=new e(g);l.table_select[2]=O(V,f,_,P),g=P.bits}}else l.region0_count=7,l.region1_count=Je.SBMAX_l-1-7-1,R=u.scalefac_band.l[8],f=_,R>f&&(R=f);if(R=Math.min(R,_),f=Math.min(f,_),Ct(R>=0),Ct(f>=0),0<R){var P=new e(g);l.table_select[0]=O(V,0,R,P),g=P.bits}if(R<f){var P=new e(g);l.table_select[1]=O(V,R,f,P),g=P.bits}if(u.use_best_huffman==2&&(l.part2_3_length=g,best_huffman_divide(u,l),g=l.part2_3_length),s!=null&&l.block_type==Je.NORM_TYPE){for(var a=0;u.scalefac_band.l[a]<l.big_values;)a++;s.sfb_count1=a}return g},this.count_bits=function(u,l,s,V){var _=s.l3_enc,R=_0.IXMAX_VAL/t.IPOW20(s.global_gain);if(s.xrpow_max>R)return _0.LARGE_BITS;if(o(l,_,t.IPOW20(s.global_gain),s,V),u.substep_shaping&2)for(var f=0,j=s.global_gain+s.scalefac_scale,g=.634521682242439/t.IPOW20(j),P=0;P<s.sfbmax;P++){var a=s.width[P];if(Ct(a>=0),u.pseudohalf[P]==0)f+=a;else{var c;for(c=f,f+=a;c<f;++c)_[c]=l[c]>=g?_[c]:0}}return this.noquant_count_bits(u,s,V)};function w(u,l,s,V,_,R,f){for(var j=l.big_values,g=0;g<=22;g++)V[g]=_0.LARGE_BITS;for(var g=0;g<16;g++){var P=u.scalefac_band.l[g+1];if(P>=j)break;var a=0,c=new e(a),M=O(s,0,P,c);a=c.bits;for(var L=0;L<8;L++){var ee=u.scalefac_band.l[g+L+2];if(ee>=j)break;var ae=a;c=new e(ae);var le=O(s,P,ee,c);ae=c.bits,V[g+L]>ae&&(V[g+L]=ae,_[g+L]=g,R[g+L]=M,f[g+L]=le)}}}function N(u,l,s,V,_,R,f,j){for(var g=l.big_values,P=2;P<Je.SBMAX_l+1;P++){var a=u.scalefac_band.l[P];if(a>=g)break;var c=_[P-2]+l.count1bits;if(s.part2_3_length<=c)break;var M=new e(c),L=O(V,a,g,M);c=M.bits,!(s.part2_3_length<=c)&&(s.assign(l),s.part2_3_length=c,s.region0_count=R[P-2],s.region1_count=P-2-R[P-2],s.table_select[0]=f[P-2],s.table_select[1]=j[P-2],s.table_select[2]=L)}}this.best_huffman_divide=function(u,l){var s=new Nr,V=l.l3_enc,_=N0(23),R=N0(23),f=N0(23),j=N0(23);if(!(l.block_type==Je.SHORT_TYPE&&u.mode_gr==1)){s.assign(l),l.block_type==Je.NORM_TYPE&&(w(u,l,V,_,R,f,j),N(u,s,l,V,_,R,f,j));var g=s.big_values;if(!(g==0||(V[g-2]|V[g-1])>1)&&(g=l.count1+2,!(g>576))){s.assign(l),s.count1=g;var P=0,a=0;for(Ct(g<=576);g>s.big_values;g-=4){var c=((V[g-4]*2+V[g-3])*2+V[g-2])*2+V[g-1];P+=Ee.t32l[c],a+=Ee.t33l[c]}if(s.big_values=g,s.count1table_select=0,P>a&&(P=a,s.count1table_select=1),s.count1bits=P,s.block_type==Je.NORM_TYPE)N(u,s,l,V,_,R,f,j);else{if(s.part2_3_length=P,P=u.scalefac_band.l[8],P>g&&(P=g),P>0){var M=new e(s.part2_3_length);s.table_select[0]=O(V,0,P,M),s.part2_3_length=M.bits}if(g>P){var M=new e(s.part2_3_length);s.table_select[1]=O(V,P,g,M),s.part2_3_length=M.bits}l.part2_3_length>s.part2_3_length&&l.assign(s)}}}};var J=[1,1,1,1,8,2,2,2,4,4,4,8,8,8,16,16],U=[1,2,4,8,1,2,4,8,2,4,8,2,4,8,4,8],k=[0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4],I=[0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3];Oi.slen1_tab=k,Oi.slen2_tab=I;function r(u,l){for(var s,V=l.tt[1][u],_=l.tt[0][u],R=0;R<Ee.scfsi_band.length-1;R++){for(s=Ee.scfsi_band[R];s<Ee.scfsi_band[R+1]&&!(_.scalefac[s]!=V.scalefac[s]&&V.scalefac[s]>=0);s++);if(s==Ee.scfsi_band[R+1]){for(s=Ee.scfsi_band[R];s<Ee.scfsi_band[R+1];s++)V.scalefac[s]=-1;l.scfsi[u][R]=1}}var f=0,j=0;for(s=0;s<11;s++)V.scalefac[s]!=-1&&(j++,f<V.scalefac[s]&&(f=V.scalefac[s]));for(var g=0,P=0;s<Je.SBPSY_l;s++)V.scalefac[s]!=-1&&(P++,g<V.scalefac[s]&&(g=V.scalefac[s]));for(var R=0;R<16;R++)if(f<J[R]&&g<U[R]){var a=k[R]*j+I[R]*P;V.part2_length>a&&(V.part2_length=a,V.scalefac_compress=R)}}this.best_scalefac_store=function(u,l,s,V){var _=V.tt[l][s],R,f,j,g,P=0;for(j=0,R=0;R<_.sfbmax;R++){var a=_.width[R];for(Ct(a>=0),j+=a,g=-a;g<0&&_.l3_enc[g+j]==0;g++);g==0&&(_.scalefac[R]=P=-2)}if(_.scalefac_scale==0&&_.preflag==0){var c=0;for(R=0;R<_.sfbmax;R++)_.scalefac[R]>0&&(c|=_.scalefac[R]);if(!(c&1)&&c!=0){for(R=0;R<_.sfbmax;R++)_.scalefac[R]>0&&(_.scalefac[R]>>=1);_.scalefac_scale=P=1}}if(_.preflag==0&&_.block_type!=Je.SHORT_TYPE&&u.mode_gr==2){for(R=11;R<Je.SBPSY_l&&!(_.scalefac[R]<t.pretab[R]&&_.scalefac[R]!=-2);R++);if(R==Je.SBPSY_l){for(R=11;R<Je.SBPSY_l;R++)_.scalefac[R]>0&&(_.scalefac[R]-=t.pretab[R]);_.preflag=P=1}}for(f=0;f<4;f++)V.scfsi[s][f]=0;for(u.mode_gr==2&&l==1&&V.tt[0][s].block_type!=Je.SHORT_TYPE&&V.tt[1][s].block_type!=Je.SHORT_TYPE&&(r(s,V),P=0),R=0;R<_.sfbmax;R++)_.scalefac[R]==-2&&(_.scalefac[R]=0);P!=0&&(u.mode_gr==2?this.scale_bitcount(_):this.scale_bitcount_lsf(u,_))};function K(u,l){for(var s=0;s<l;++s)if(u[s]<0)return!1;return!0}var X=[0,18,36,54,54,36,54,72,54,72,90,72,90,108,108,126],A=[0,18,36,54,51,35,53,71,52,70,88,69,87,105,104,122],T=[0,10,20,30,33,21,31,41,32,42,52,43,53,63,64,74];this.scale_bitcount=function(u){var l,s,V=0,_=0,R,f=u.scalefac;if(Ct(K(f,u.sfbmax)),u.block_type==Je.SHORT_TYPE)R=X,u.mixed_block_flag!=0&&(R=A);else if(R=T,u.preflag==0){for(s=11;s<Je.SBPSY_l&&!(f[s]<t.pretab[s]);s++);if(s==Je.SBPSY_l)for(u.preflag=1,s=11;s<Je.SBPSY_l;s++)f[s]-=t.pretab[s]}for(s=0;s<u.sfbdivide;s++)V<f[s]&&(V=f[s]);for(;s<u.sfbmax;s++)_<f[s]&&(_=f[s]);for(u.part2_length=_0.LARGE_BITS,l=0;l<16;l++)V<J[l]&&_<U[l]&&u.part2_length>R[l]&&(u.part2_length=R[l],u.scalefac_compress=l);return u.part2_length==_0.LARGE_BITS};var H=[[15,15,7,7],[15,15,7,0],[7,3,0,0],[15,31,31,0],[7,7,7,0],[3,3,0,0]];this.scale_bitcount_lsf=function(u,l){var s,V,_,R,f,j,g,P,a=N0(4),c=l.scalefac;for(l.preflag!=0?s=2:s=0,g=0;g<4;g++)a[g]=0;if(l.block_type==Je.SHORT_TYPE){V=1;var M=t.nr_of_sfb_block[s][V];for(P=0,_=0;_<4;_++)for(R=M[_]/3,g=0;g<R;g++,P++)for(f=0;f<3;f++)c[P*3+f]>a[_]&&(a[_]=c[P*3+f])}else{V=0;var M=t.nr_of_sfb_block[s][V];for(P=0,_=0;_<4;_++)for(R=M[_],g=0;g<R;g++,P++)c[P]>a[_]&&(a[_]=c[P])}for(j=!1,_=0;_<4;_++)a[_]>H[s][_]&&(j=!0);if(!j){var L,ee,ae,le;for(l.sfb_partition_table=t.nr_of_sfb_block[s][V],_=0;_<4;_++)l.slen[_]=p[a[_]];switch(L=l.slen[0],ee=l.slen[1],ae=l.slen[2],le=l.slen[3],s){case 0:l.scalefac_compress=(L*5+ee<<4)+(ae<<2)+le;break;case 1:l.scalefac_compress=400+(L*5+ee<<2)+ae;break;case 2:l.scalefac_compress=500+L*3+ee;break;default:Jr.err.printf(`intensity stereo not implemented yet
83
- `);break}}if(!j)for(Ct(l.sfb_partition_table!=null),l.part2_length=0,_=0;_<4;_++)l.part2_length+=l.slen[_]*l.sfb_partition_table[_];return j};var p=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];this.huffman_init=function(u){for(var l=2;l<=576;l+=2){for(var s=0,V;u.scalefac_band.l[++s]<l;);for(V=i[s][0];u.scalefac_band.l[V+1]>l;)V--;for(V<0&&(V=i[s][0]),u.bv_scf[l-2]=V,V=i[s][1];u.scalefac_band.l[V+u.bv_scf[l-2]+2]>l;)V--;V<0&&(V=i[s][1]),u.bv_scf[l-1]=V}}}var Pr=Oi,Wt=it,At=Wt.System;Wt.VbrMode;Wt.Float;Wt.ShortBlock;Wt.Util;var Ur=Wt.Arrays;Wt.new_array_n;var zr=Wt.new_byte;Wt.new_double;Wt.new_float;var Ar=Wt.new_float_n,Or=Wt.new_int;Wt.new_int_n;var Ve=Wt.assert,xs=Pr,Mi=$i,li=bt(),S0=yi;mi.EQ=function(t,e){return Math.abs(t)>Math.abs(e)?Math.abs(t-e)<=Math.abs(t)*1e-6:Math.abs(t-e)<=Math.abs(e)*1e-6};mi.NEQ=function(t,e){return!mi.EQ(t,e)};function mi(){var t=this,e=32773,i=32,n=null,d=null,o=null,m=null;this.setModules=function(p,u,l,s){n=p,d=u,o=l,m=s};var h=null,S=0,W=0,v=0;this.getframebits=function(p){var u=p.internal_flags,l;u.bitrate_index!=0?l=Mi.bitrate_table[p.version][u.bitrate_index]:l=p.brate,Ve(8<=l&&l<=640);var s=0|(p.version+1)*72e3*l/p.out_samplerate+u.padding;return 8*s};function Z(p){At.arraycopy(p.header[p.w_ptr].buf,0,h,W,p.sideinfo_len),W+=p.sideinfo_len,S+=p.sideinfo_len*8,p.w_ptr=p.w_ptr+1&S0.MAX_HEADER_BUF-1}function O(p,u,l){for(Ve(l<i-2);l>0;){var s;v==0&&(v=8,W++,Ve(W<Lame.LAME_MAXMP3BUFFER),Ve(p.header[p.w_ptr].write_timing>=S),p.header[p.w_ptr].write_timing==S&&Z(p),h[W]=0),s=Math.min(l,v),l-=s,v-=s,Ve(l<i),Ve(v<i),h[W]|=u>>l<<v,S+=s}}function w(p,u,l){for(Ve(l<i-2);l>0;){var s;v==0&&(v=8,W++,Ve(W<Lame.LAME_MAXMP3BUFFER),h[W]=0),s=Math.min(l,v),l-=s,v-=s,Ve(l<i),Ve(v<i),h[W]|=u>>l<<v,S+=s}}function N(p,u){var l=p.internal_flags,s;if(Ve(u>=0),u>=8&&(O(l,76,8),u-=8),u>=8&&(O(l,65,8),u-=8),u>=8&&(O(l,77,8),u-=8),u>=8&&(O(l,69,8),u-=8),u>=32){var V=o.getLameShortVersion();if(u>=32)for(s=0;s<V.length&&u>=8;++s)u-=8,O(l,V.charAt(s),8)}for(;u>=1;u-=1)O(l,l.ancillary_flag,1),l.ancillary_flag^=p.disable_reservoir?0:1;Ve(u==0)}function J(p,u,l){for(var s=p.header[p.h_ptr].ptr;l>0;){var V=Math.min(l,8-(s&7));l-=V,Ve(l<i),p.header[p.h_ptr].buf[s>>3]|=u>>l<<8-(s&7)-V,s+=V}p.header[p.h_ptr].ptr=s}function U(p,u){p<<=8;for(var l=0;l<8;l++)p<<=1,u<<=1,(u^p)&65536&&(u^=e);return u}this.CRC_writeheader=function(p,u){var l=65535;l=U(u[2]&255,l),l=U(u[3]&255,l);for(var s=6;s<p.sideinfo_len;s++)l=U(u[s]&255,l);u[4]=byte(l>>8),u[5]=byte(l&255)};function k(p,u){var l=p.internal_flags,s,V,_;if(s=l.l3_side,l.header[l.h_ptr].ptr=0,Ur.fill(l.header[l.h_ptr].buf,0,l.sideinfo_len,0),p.out_samplerate<16e3?J(l,4094,12):J(l,4095,12),J(l,p.version,1),J(l,1,2),J(l,p.error_protection?0:1,1),J(l,l.bitrate_index,4),J(l,l.samplerate_index,2),J(l,l.padding,1),J(l,p.extension,1),J(l,p.mode.ordinal(),2),J(l,l.mode_ext,2),J(l,p.copyright,1),J(l,p.original,1),J(l,p.emphasis,2),p.error_protection&&J(l,0,16),p.version==1){for(Ve(s.main_data_begin>=0),J(l,s.main_data_begin,9),l.channels_out==2?J(l,s.private_bits,3):J(l,s.private_bits,5),_=0;_<l.channels_out;_++){var R;for(R=0;R<4;R++)J(l,s.scfsi[_][R],1)}for(V=0;V<2;V++)for(_=0;_<l.channels_out;_++){var f=s.tt[V][_];J(l,f.part2_3_length+f.part2_length,12),J(l,f.big_values/2,9),J(l,f.global_gain,8),J(l,f.scalefac_compress,4),f.block_type!=li.NORM_TYPE?(J(l,1,1),J(l,f.block_type,2),J(l,f.mixed_block_flag,1),f.table_select[0]==14&&(f.table_select[0]=16),J(l,f.table_select[0],5),f.table_select[1]==14&&(f.table_select[1]=16),J(l,f.table_select[1],5),J(l,f.subblock_gain[0],3),J(l,f.subblock_gain[1],3),J(l,f.subblock_gain[2],3)):(J(l,0,1),f.table_select[0]==14&&(f.table_select[0]=16),J(l,f.table_select[0],5),f.table_select[1]==14&&(f.table_select[1]=16),J(l,f.table_select[1],5),f.table_select[2]==14&&(f.table_select[2]=16),J(l,f.table_select[2],5),Ve(0<=f.region0_count&&f.region0_count<16),Ve(0<=f.region1_count&&f.region1_count<8),J(l,f.region0_count,4),J(l,f.region1_count,3)),J(l,f.preflag,1),J(l,f.scalefac_scale,1),J(l,f.count1table_select,1)}}else for(Ve(s.main_data_begin>=0),J(l,s.main_data_begin,8),J(l,s.private_bits,l.channels_out),V=0,_=0;_<l.channels_out;_++){var f=s.tt[V][_];J(l,f.part2_3_length+f.part2_length,12),J(l,f.big_values/2,9),J(l,f.global_gain,8),J(l,f.scalefac_compress,9),f.block_type!=li.NORM_TYPE?(J(l,1,1),J(l,f.block_type,2),J(l,f.mixed_block_flag,1),f.table_select[0]==14&&(f.table_select[0]=16),J(l,f.table_select[0],5),f.table_select[1]==14&&(f.table_select[1]=16),J(l,f.table_select[1],5),J(l,f.subblock_gain[0],3),J(l,f.subblock_gain[1],3),J(l,f.subblock_gain[2],3)):(J(l,0,1),f.table_select[0]==14&&(f.table_select[0]=16),J(l,f.table_select[0],5),f.table_select[1]==14&&(f.table_select[1]=16),J(l,f.table_select[1],5),f.table_select[2]==14&&(f.table_select[2]=16),J(l,f.table_select[2],5),Ve(0<=f.region0_count&&f.region0_count<16),Ve(0<=f.region1_count&&f.region1_count<8),J(l,f.region0_count,4),J(l,f.region1_count,3)),J(l,f.scalefac_scale,1),J(l,f.count1table_select,1)}p.error_protection&&CRC_writeheader(l,l.header[l.h_ptr].buf);{var j=l.h_ptr;Ve(l.header[j].ptr==l.sideinfo_len*8),l.h_ptr=j+1&S0.MAX_HEADER_BUF-1,l.header[l.h_ptr].write_timing=l.header[j].write_timing+u,l.h_ptr==l.w_ptr&&At.err.println(`Error: MAX_HEADER_BUF too small in bitstream.c
82
+ `});return this.linearPipeline=this.device.createRenderPipeline({layout:"auto",vertex:{module:d,entryPoint:"vertexMain"},fragment:{module:d,entryPoint:"fragmentMain",targets:[{format:i}]},primitive:{topology:"triangle-list"}}),this.bicubicPipeline=this.device.createRenderPipeline({layout:"auto",vertex:{module:o,entryPoint:"vertexMain"},fragment:{module:o,entryPoint:"fragmentMain",targets:[{format:i}]},primitive:{topology:"triangle-list"}}),!0}initBitmapRenderer(){this.bitmapCtx=this.canvas.getContext("bitmaprenderer")}drawImage(e){if(this.mode==="webgpu")this.drawImageWebGPU(e);else if(this.mode==="bitmap")this.drawImageBitmap(e);else throw new Error("GPUDrawImage not initialized. Call init() first.")}drawImageWebGPU(e){const i=this.filterMode==="bicubic"?this.bicubicPipeline:this.linearPipeline,n=this.filterMode==="bicubic",d=[{binding:0,resource:this.device.importExternalTexture({source:e})}];if(n){const W=new Float32Array([e.displayWidth,e.displayHeight]);this.device.queue.writeBuffer(this.uniformBuffer,0,W),d.push({binding:1,resource:{buffer:this.uniformBuffer}})}else d.push({binding:1,resource:this.sampler});const o=this.device.createBindGroup({layout:i.getBindGroupLayout(0),entries:d}),m=this.device.createCommandEncoder(),h=this.context.getCurrentTexture().createView(),S=m.beginRenderPass({colorAttachments:[{view:h,clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]});S.setPipeline(i),S.setBindGroup(0,o),S.draw(6),S.end(),this.device.queue.submit([m.finish()])}async drawImageBitmap(e){const i=await createImageBitmap(e);this.bitmapCtx.transferFromImageBitmap(i)}getMode(){return this.mode}getFilterMode(){return this.filterMode}setFilterMode(e){if(e!=="linear"&&e!=="bicubic")throw new Error('Filter mode must be "linear" or "bicubic"');this.filterMode=e}destroy(){this.device&&this.device.destroy()}}function As(t){var i;const e=[];if((i=t.format)!=null&&i.includes("planar"))for(let n=0;n<t.numberOfChannels;n++){const d=new Float32Array(t.numberOfFrames);t.copyTo(d,{frameOffset:0,planeIndex:n}),e.push(d)}else{const n=new Float32Array(t.numberOfFrames*t.numberOfChannels);t.copyTo(n,{frameOffset:0,planeIndex:0});for(let d=0;d<t.numberOfChannels;d++){const o=new Float32Array(t.numberOfFrames);for(let m=0;m<t.numberOfFrames;m++)o[m]=n[m*t.numberOfChannels+d];e.push(o)}}return e}function bi(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function Ut(t){var e=t;this.ordinal=function(){return e}}Ut.STEREO=new Ut(0);Ut.JOINT_STEREO=new Ut(1);Ut.DUAL_CHANNEL=new Ut(2);Ut.MONO=new Ut(3);Ut.NOT_SET=new Ut(4);var Os=Ut;const Un=bi(Os);function zn(t){return new Int8Array(t)}function An(t){return new Int16Array(t)}function js(t){return new Int32Array(t)}function Qs(t){return new Float32Array(t)}function On(t){return new Float64Array(t)}function Ds(t){if(t.length==1)return Qs(t[0]);var e=t[0];t=t.slice(1);for(var i=[],n=0;n<e;n++)i.push(Ds(t));return i}function $s(t){if(t.length==1)return js(t[0]);var e=t[0];t=t.slice(1);for(var i=[],n=0;n<e;n++)i.push($s(t));return i}function qs(t){if(t.length==1)return An(t[0]);var e=t[0];t=t.slice(1);for(var i=[],n=0;n<e;n++)i.push(qs(t));return i}function en(t){if(t.length==1)return new Array(t[0]);var e=t[0];t=t.slice(1);for(var i=[],n=0;n<e;n++)i.push(en(t));return i}var tn={};tn.fill=function(t,e,i,n){if(arguments.length==2)for(var d=0;d<t.length;d++)t[d]=arguments[1];else for(var d=e;d<i;d++)t[d]=n};var j0={};j0.arraycopy=function(t,e,i,n,d){for(var o=e+d;e<o;)i[n++]=t[e++]};j0.out={};j0.out.println=function(t){console.log(t)};j0.out.printf=function(){console.log.apply(console,arguments)};var pi={};pi.SQRT2=1.4142135623730951;pi.FAST_LOG10=function(t){return Math.log10(t)};pi.FAST_LOG10_X=function(t,e){return Math.log10(t)*e};function r0(t){this.ordinal=t}r0.short_block_allowed=new r0(0);r0.short_block_coupled=new r0(1);r0.short_block_dispensed=new r0(2);r0.short_block_forced=new r0(3);var sn={};sn.MAX_VALUE=34028235e31;function Kt(t){this.ordinal=t}Kt.vbr_off=new Kt(0);Kt.vbr_mt=new Kt(1);Kt.vbr_rh=new Kt(2);Kt.vbr_abr=new Kt(3);Kt.vbr_mtrh=new Kt(4);Kt.vbr_default=Kt.vbr_mtrh;var jn=function(t){},it={System:j0,VbrMode:Kt,Float:sn,ShortBlock:r0,Util:pi,Arrays:tn,new_array_n:en,new_byte:zn,new_double:On,new_float:Qs,new_float_n:Ds,new_int:js,new_int_n:$s,new_short_n:qs,assert:jn},Wi,ps;function Qn(){if(ps)return Wi;ps=1;var t=it,e=t.System;t.VbrMode,t.Float,t.ShortBlock;var i=t.Util,n=t.Arrays;t.new_array_n,t.new_byte,t.new_double;var d=t.new_float;t.new_float_n,t.new_int,t.new_int_n,t.assert;var o=bt();function m(){var h=[-.1482523854003001,32.308141959636465,296.40344946382766,883.1344870032432,11113.947376231741,1057.2713659324597,305.7402417275812,30.825928907280012,3.8533188138216365,59.42900443849514,709.5899960123345,5281.91112291017,-5829.66483675846,-817.6293103748613,-76.91656988279972,-4.594269939176596,.9063471690191471,.1960342806591213,-.15466694054279598,34.324387823855965,301.8067566458425,817.599602898885,11573.795901679885,1181.2520595540152,321.59731579894424,31.232021761053772,3.7107095756221318,53.650946155329365,684.167428119626,5224.56624370173,-6366.391851890084,-908.9766368219582,-89.83068876699639,-5.411397422890401,.8206787908286602,.3901806440322567,-.16070888947830023,36.147034243915876,304.11815768187864,732.7429163887613,11989.60988270091,1300.012278487897,335.28490093152146,31.48816102859945,3.373875931311736,47.232241542899175,652.7371796173471,5132.414255594984,-6909.087078780055,-1001.9990371107289,-103.62185754286375,-6.104916304710272,.7416505462720353,.5805693545089249,-.16636367662261495,37.751650073343995,303.01103387567713,627.9747488785183,12358.763425278165,1412.2779918482834,346.7496836825721,31.598286663170416,3.1598635433980946,40.57878626349686,616.1671130880391,5007.833007176154,-7454.040671756168,-1095.7960341867115,-118.24411666465777,-6.818469345853504,.6681786379192989,.7653668647301797,-.1716176790982088,39.11551877123304,298.3413246578966,503.5259106886539,12679.589408408976,1516.5821921214542,355.9850766329023,31.395241710249053,2.9164211881972335,33.79716964664243,574.8943997801362,4853.234992253242,-7997.57021486075,-1189.7624067269965,-133.6444792601766,-7.7202770609839915,.5993769336819237,.9427934736519954,-.17645823955292173,40.21879108166477,289.9982036694474,359.3226160751053,12950.259102786438,1612.1013903507662,362.85067106591504,31.045922092242872,2.822222032597987,26.988862316190684,529.8996541764288,4671.371946949588,-8535.899136645805,-1282.5898586244496,-149.58553632943463,-8.643494270763135,.5345111359507916,1.111140466039205,-.36174739330527045,41.04429910497807,277.5463268268618,195.6386023135583,13169.43812144731,1697.6433561479398,367.40983966190305,30.557037410382826,2.531473372857427,20.070154905927314,481.50208566532336,4464.970341588308,-9065.36882077239,-1373.62841526722,-166.1660487028118,-9.58289321133207,.4729647758913199,1.268786568327291,-.36970682634889585,41.393213350082036,261.2935935556502,12.935476055240873,13336.131683328815,1772.508612059496,369.76534388639965,29.751323653701338,2.4023193045459172,13.304795348228817,430.5615775526625,4237.0568611071185,-9581.931701634761,-1461.6913552409758,-183.12733958476446,-10.718010163869403,.41421356237309503,1.414213562373095,-.37677560326535325,41.619486213528496,241.05423794991074,-187.94665032361226,13450.063605744153,1836.153896465782,369.4908799925761,29.001847876923147,2.0714759319987186,6.779591200894186,377.7767837205709,3990.386575512536,-10081.709459700915,-1545.947424837898,-200.3762958015653,-11.864482073055006,.3578057213145241,1.546020906725474,-.3829366947518991,41.1516456456653,216.47684307105183,-406.1569483347166,13511.136535077321,1887.8076599260432,367.3025214564151,28.136213436723654,1.913880671464418,.3829366947518991,323.85365704338597,3728.1472257487526,-10561.233882199509,-1625.2025997821418,-217.62525175416,-13.015432208941645,.3033466836073424,1.66293922460509,-.5822628872992417,40.35639251440489,188.20071124269245,-640.2706748618148,13519.21490106562,1927.6022433578062,362.8197642637487,26.968821921868447,1.7463817695935329,-5.62650678237171,269.3016715297017,3453.386536448852,-11016.145278780888,-1698.6569643425091,-234.7658734267683,-14.16351421663124,.2504869601913055,1.76384252869671,-.5887180101749253,39.23429103868072,155.76096234403798,-889.2492977967378,13475.470561874661,1955.0535223723712,356.4450994756727,25.894952980042156,1.5695032905781554,-11.181939564328772,214.80884394039484,3169.1640829158237,-11443.321309975563,-1765.1588461316153,-251.68908574481912,-15.49755935939164,.198912367379658,1.847759065022573,-.7912582233652842,37.39369355329111,119.699486012458,-1151.0956593239027,13380.446257078214,1970.3952110853447,348.01959814116185,24.731487364283044,1.3850130831637748,-16.421408865300393,161.05030052864092,2878.3322807850063,-11838.991423510031,-1823.985884688674,-268.2854986386903,-16.81724543849939,.1483359875383474,1.913880671464418,-.7960642926861912,35.2322109610459,80.01928065061526,-1424.0212633405113,13235.794061869668,1973.804052543835,337.9908651258184,23.289159354463873,1.3934255946442087,-21.099669467133474,108.48348407242611,2583.700758091299,-12199.726194855148,-1874.2780658979746,-284.2467154529415,-18.11369784385905,.09849140335716425,1.961570560806461,-.998795456205172,32.56307803611191,36.958364584370486,-1706.075448829146,13043.287458812016,1965.3831106103316,326.43182772364605,22.175018750622293,1.198638339011324,-25.371248002043963,57.53505923036915,2288.41886619975,-12522.674544337233,-1914.8400385312243,-299.26241273417224,-19.37805630698734,.04912684976946725,1.990369453344394,.035780907*i.SQRT2*.5/2384e-9,.017876148*i.SQRT2*.5/2384e-9,.003134727*i.SQRT2*.5/2384e-9,.002457142*i.SQRT2*.5/2384e-9,971317e-9*i.SQRT2*.5/2384e-9,218868e-9*i.SQRT2*.5/2384e-9,101566e-9*i.SQRT2*.5/2384e-9,13828e-9*i.SQRT2*.5/2384e-9,12804.797818791945,1945.5515939597317,313.4244966442953,20.801593959731544,1995.1556208053692,9.000838926174497,-29.20218120805369],S=[[2382191739347913e-28,6423305872147834e-28,9400849094049688e-28,1122435026096556e-27,1183840321267481e-27,1122435026096556e-27,940084909404969e-27,6423305872147839e-28,2382191739347918e-28,5456116108943412e-27,4878985199565852e-27,4240448995017367e-27,3559909094758252e-27,2858043359288075e-27,2156177623817898e-27,1475637723558783e-27,8371015190102974e-28,2599706096327376e-28,-5456116108943412e-27,-4878985199565852e-27,-4240448995017367e-27,-3559909094758252e-27,-2858043359288076e-27,-2156177623817898e-27,-1475637723558783e-27,-8371015190102975e-28,-2599706096327376e-28,-2382191739347923e-28,-6423305872147843e-28,-9400849094049696e-28,-1122435026096556e-27,-1183840321267481e-27,-1122435026096556e-27,-9400849094049694e-28,-642330587214784e-27,-2382191739347918e-28],[2382191739347913e-28,6423305872147834e-28,9400849094049688e-28,1122435026096556e-27,1183840321267481e-27,1122435026096556e-27,9400849094049688e-28,6423305872147841e-28,2382191739347918e-28,5456116108943413e-27,4878985199565852e-27,4240448995017367e-27,3559909094758253e-27,2858043359288075e-27,2156177623817898e-27,1475637723558782e-27,8371015190102975e-28,2599706096327376e-28,-5461314069809755e-27,-4921085770524055e-27,-4343405037091838e-27,-3732668368707687e-27,-3093523840190885e-27,-2430835727329465e-27,-1734679010007751e-27,-974825365660928e-27,-2797435120168326e-28,0,0,0,0,0,0,-2283748241799531e-28,-4037858874020686e-28,-2146547464825323e-28],[.1316524975873958,.414213562373095,.7673269879789602,1.091308501069271,1.303225372841206,1.56968557711749,1.920982126971166,2.414213562373094,3.171594802363212,4.510708503662055,7.595754112725146,22.90376554843115,.984807753012208,.6427876096865394,.3420201433256688,.9396926207859084,-.1736481776669303,-.7660444431189779,.8660254037844387,.5,-.5144957554275265,-.4717319685649723,-.3133774542039019,-.1819131996109812,-.09457419252642064,-.04096558288530405,-.01419856857247115,-.003699974673760037,.8574929257125442,.8817419973177052,.9496286491027329,.9833145924917901,.9955178160675857,.9991605581781475,.999899195244447,.9999931550702802],[0,0,0,0,0,0,2283748241799531e-28,4037858874020686e-28,2146547464825323e-28,5461314069809755e-27,4921085770524055e-27,4343405037091838e-27,3732668368707687e-27,3093523840190885e-27,2430835727329466e-27,1734679010007751e-27,974825365660928e-27,2797435120168326e-28,-5456116108943413e-27,-4878985199565852e-27,-4240448995017367e-27,-3559909094758253e-27,-2858043359288075e-27,-2156177623817898e-27,-1475637723558782e-27,-8371015190102975e-28,-2599706096327376e-28,-2382191739347913e-28,-6423305872147834e-28,-9400849094049688e-28,-1122435026096556e-27,-1183840321267481e-27,-1122435026096556e-27,-9400849094049688e-28,-6423305872147841e-28,-2382191739347918e-28]],W=S[o.SHORT_TYPE],v=S[o.SHORT_TYPE],Z=S[o.SHORT_TYPE],O=S[o.SHORT_TYPE],w=[0,1,16,17,8,9,24,25,4,5,20,21,12,13,28,29,2,3,18,19,10,11,26,27,6,7,22,23,14,15,30,31];function N(k,I,r){for(var K=10,X=I+238-14-286,A=-15;A<0;A++){var T,H,p;T=h[K+-10],H=k[X+-224]*T,p=k[I+224]*T,T=h[K+-9],H+=k[X+-160]*T,p+=k[I+160]*T,T=h[K+-8],H+=k[X+-96]*T,p+=k[I+96]*T,T=h[K+-7],H+=k[X+-32]*T,p+=k[I+32]*T,T=h[K+-6],H+=k[X+32]*T,p+=k[I+-32]*T,T=h[K+-5],H+=k[X+96]*T,p+=k[I+-96]*T,T=h[K+-4],H+=k[X+160]*T,p+=k[I+-160]*T,T=h[K+-3],H+=k[X+224]*T,p+=k[I+-224]*T,T=h[K+-2],H+=k[I+-256]*T,p-=k[X+256]*T,T=h[K+-1],H+=k[I+-192]*T,p-=k[X+192]*T,T=h[K+0],H+=k[I+-128]*T,p-=k[X+128]*T,T=h[K+1],H+=k[I+-64]*T,p-=k[X+64]*T,T=h[K+2],H+=k[I+0]*T,p-=k[X+0]*T,T=h[K+3],H+=k[I+64]*T,p-=k[X+-64]*T,T=h[K+4],H+=k[I+128]*T,p-=k[X+-128]*T,T=h[K+5],H+=k[I+192]*T,p-=k[X+-192]*T,H*=h[K+6],T=p-H,r[30+A*2]=p+H,r[31+A*2]=h[K+7]*T,K+=18,I--,X++}{var H,p,u,l;p=k[I+-16]*h[K+-10],H=k[I+-32]*h[K+-2],p+=(k[I+-48]-k[I+16])*h[K+-9],H+=k[I+-96]*h[K+-1],p+=(k[I+-80]+k[I+48])*h[K+-8],H+=k[I+-160]*h[K+0],p+=(k[I+-112]-k[I+80])*h[K+-7],H+=k[I+-224]*h[K+1],p+=(k[I+-144]+k[I+112])*h[K+-6],H-=k[I+32]*h[K+2],p+=(k[I+-176]-k[I+144])*h[K+-5],H-=k[I+96]*h[K+3],p+=(k[I+-208]+k[I+176])*h[K+-4],H-=k[I+160]*h[K+4],p+=(k[I+-240]-k[I+208])*h[K+-3],H-=k[I+224],u=H-p,l=H+p,p=r[14],H=r[15]-p,r[31]=l+p,r[30]=u+H,r[15]=u-H,r[14]=l-p}{var s;s=r[28]-r[0],r[0]+=r[28],r[28]=s*h[K+-2*18+7],s=r[29]-r[1],r[1]+=r[29],r[29]=s*h[K+-2*18+7],s=r[26]-r[2],r[2]+=r[26],r[26]=s*h[K+-4*18+7],s=r[27]-r[3],r[3]+=r[27],r[27]=s*h[K+-4*18+7],s=r[24]-r[4],r[4]+=r[24],r[24]=s*h[K+-6*18+7],s=r[25]-r[5],r[5]+=r[25],r[25]=s*h[K+-6*18+7],s=r[22]-r[6],r[6]+=r[22],r[22]=s*i.SQRT2,s=r[23]-r[7],r[7]+=r[23],r[23]=s*i.SQRT2-r[7],r[7]-=r[6],r[22]-=r[7],r[23]-=r[22],s=r[6],r[6]=r[31]-s,r[31]=r[31]+s,s=r[7],r[7]=r[30]-s,r[30]=r[30]+s,s=r[22],r[22]=r[15]-s,r[15]=r[15]+s,s=r[23],r[23]=r[14]-s,r[14]=r[14]+s,s=r[20]-r[8],r[8]+=r[20],r[20]=s*h[K+-10*18+7],s=r[21]-r[9],r[9]+=r[21],r[21]=s*h[K+-10*18+7],s=r[18]-r[10],r[10]+=r[18],r[18]=s*h[K+-12*18+7],s=r[19]-r[11],r[11]+=r[19],r[19]=s*h[K+-12*18+7],s=r[16]-r[12],r[12]+=r[16],r[16]=s*h[K+-14*18+7],s=r[17]-r[13],r[13]+=r[17],r[17]=s*h[K+-14*18+7],s=-r[20]+r[24],r[20]+=r[24],r[24]=s*h[K+-12*18+7],s=-r[21]+r[25],r[21]+=r[25],r[25]=s*h[K+-12*18+7],s=r[4]-r[8],r[4]+=r[8],r[8]=s*h[K+-12*18+7],s=r[5]-r[9],r[5]+=r[9],r[9]=s*h[K+-12*18+7],s=r[0]-r[12],r[0]+=r[12],r[12]=s*h[K+-4*18+7],s=r[1]-r[13],r[1]+=r[13],r[13]=s*h[K+-4*18+7],s=r[16]-r[28],r[16]+=r[28],r[28]=s*h[K+-4*18+7],s=-r[17]+r[29],r[17]+=r[29],r[29]=s*h[K+-4*18+7],s=i.SQRT2*(r[2]-r[10]),r[2]+=r[10],r[10]=s,s=i.SQRT2*(r[3]-r[11]),r[3]+=r[11],r[11]=s,s=i.SQRT2*(-r[18]+r[26]),r[18]+=r[26],r[26]=s-r[18],s=i.SQRT2*(-r[19]+r[27]),r[19]+=r[27],r[27]=s-r[19],s=r[2],r[19]-=r[3],r[3]-=s,r[2]=r[31]-s,r[31]+=s,s=r[3],r[11]-=r[19],r[18]-=s,r[3]=r[30]-s,r[30]+=s,s=r[18],r[27]-=r[11],r[19]-=s,r[18]=r[15]-s,r[15]+=s,s=r[19],r[10]-=s,r[19]=r[14]-s,r[14]+=s,s=r[10],r[11]-=s,r[10]=r[23]-s,r[23]+=s,s=r[11],r[26]-=s,r[11]=r[22]-s,r[22]+=s,s=r[26],r[27]-=s,r[26]=r[7]-s,r[7]+=s,s=r[27],r[27]=r[6]-s,r[6]+=s,s=i.SQRT2*(r[0]-r[4]),r[0]+=r[4],r[4]=s,s=i.SQRT2*(r[1]-r[5]),r[1]+=r[5],r[5]=s,s=i.SQRT2*(r[16]-r[20]),r[16]+=r[20],r[20]=s,s=i.SQRT2*(r[17]-r[21]),r[17]+=r[21],r[21]=s,s=-i.SQRT2*(r[8]-r[12]),r[8]+=r[12],r[12]=s-r[8],s=-i.SQRT2*(r[9]-r[13]),r[9]+=r[13],r[13]=s-r[9],s=-i.SQRT2*(r[25]-r[29]),r[25]+=r[29],r[29]=s-r[25],s=-i.SQRT2*(r[24]+r[28]),r[24]-=r[28],r[28]=s-r[24],s=r[24]-r[16],r[24]=s,s=r[20]-s,r[20]=s,s=r[28]-s,r[28]=s,s=r[25]-r[17],r[25]=s,s=r[21]-s,r[21]=s,s=r[29]-s,r[29]=s,s=r[17]-r[1],r[17]=s,s=r[9]-s,r[9]=s,s=r[25]-s,r[25]=s,s=r[5]-s,r[5]=s,s=r[21]-s,r[21]=s,s=r[13]-s,r[13]=s,s=r[29]-s,r[29]=s,s=r[1]-r[0],r[1]=s,s=r[16]-s,r[16]=s,s=r[17]-s,r[17]=s,s=r[8]-s,r[8]=s,s=r[9]-s,r[9]=s,s=r[24]-s,r[24]=s,s=r[25]-s,r[25]=s,s=r[4]-s,r[4]=s,s=r[5]-s,r[5]=s,s=r[20]-s,r[20]=s,s=r[21]-s,r[21]=s,s=r[12]-s,r[12]=s,s=r[13]-s,r[13]=s,s=r[28]-s,r[28]=s,s=r[29]-s,r[29]=s,s=r[0],r[0]+=r[31],r[31]-=s,s=r[1],r[1]+=r[30],r[30]-=s,s=r[16],r[16]+=r[15],r[15]-=s,s=r[17],r[17]+=r[14],r[14]-=s,s=r[8],r[8]+=r[23],r[23]-=s,s=r[9],r[9]+=r[22],r[22]-=s,s=r[24],r[24]+=r[7],r[7]-=s,s=r[25],r[25]+=r[6],r[6]-=s,s=r[4],r[4]+=r[27],r[27]-=s,s=r[5],r[5]+=r[26],r[26]-=s,s=r[20],r[20]+=r[11],r[11]-=s,s=r[21],r[21]+=r[10],r[10]-=s,s=r[12],r[12]+=r[19],r[19]-=s,s=r[13],r[13]+=r[18],r[18]-=s,s=r[28],r[28]+=r[3],r[3]-=s,s=r[29],r[29]+=r[2],r[2]-=s}}function J(k,I){for(var r=0;r<3;r++){var K,X,A,T,H,p;T=k[I+2*3]*S[o.SHORT_TYPE][0]-k[I+5*3],K=k[I+0*3]*S[o.SHORT_TYPE][2]-k[I+3*3],X=T+K,A=T-K,T=k[I+5*3]*S[o.SHORT_TYPE][0]+k[I+2*3],K=k[I+3*3]*S[o.SHORT_TYPE][2]+k[I+0*3],H=T+K,p=-T+K,K=(k[I+1*3]*S[o.SHORT_TYPE][1]-k[I+4*3])*2069978111953089e-26,T=(k[I+4*3]*S[o.SHORT_TYPE][1]+k[I+1*3])*2069978111953089e-26,k[I+3*0]=X*190752519173728e-25+K,k[I+3*5]=-H*190752519173728e-25+T,A=A*.8660254037844387*1907525191737281e-26,H=H*.5*1907525191737281e-26+T,k[I+3*1]=A-H,k[I+3*2]=A+H,X=X*.5*1907525191737281e-26-K,p=p*.8660254037844387*1907525191737281e-26,k[I+3*3]=X+p,k[I+3*4]=X-p,I++}}function U(k,I,r){var K,X;{var A,T,H,p,u,l,s,V;A=r[17]-r[9],H=r[15]-r[11],p=r[14]-r[12],u=r[0]+r[8],l=r[1]+r[7],s=r[2]+r[6],V=r[3]+r[5],k[I+17]=u+s-V-(l-r[4]),X=(u+s-V)*v[19]+(l-r[4]),K=(A-H-p)*v[18],k[I+5]=K+X,k[I+6]=K-X,T=(r[16]-r[10])*v[18],l=l*v[19]+r[4],K=A*v[12]+T+H*v[13]+p*v[14],X=-u*v[16]+l-s*v[17]+V*v[15],k[I+1]=K+X,k[I+2]=K-X,K=A*v[13]-T-H*v[14]+p*v[12],X=-u*v[17]+l-s*v[15]+V*v[16],k[I+9]=K+X,k[I+10]=K-X,K=A*v[14]-T+H*v[12]-p*v[13],X=u*v[15]-l+s*v[16]-V*v[17],k[I+13]=K+X,k[I+14]=K-X}{var _,R,f,j,g,P,a,c;_=r[8]-r[0],f=r[6]-r[2],j=r[5]-r[3],g=r[17]+r[9],P=r[16]+r[10],a=r[15]+r[11],c=r[14]+r[12],k[I+0]=g+a+c+(P+r[13]),K=(g+a+c)*v[19]-(P+r[13]),X=(_-f+j)*v[18],k[I+11]=K+X,k[I+12]=K-X,R=(r[7]-r[1])*v[18],P=r[13]-P*v[19],K=g*v[15]-P+a*v[16]+c*v[17],X=_*v[14]+R+f*v[12]+j*v[13],k[I+3]=K+X,k[I+4]=K-X,K=-g*v[17]+P-a*v[15]-c*v[16],X=_*v[13]+R-f*v[14]-j*v[12],k[I+7]=K+X,k[I+8]=K-X,K=-g*v[16]+P-a*v[17]-c*v[15],X=_*v[12]-R+f*v[13]-j*v[14],k[I+15]=K+X,k[I+16]=K-X}}this.mdct_sub48=function(k,I,r){for(var K=I,X=286,A=0;A<k.channels_out;A++){for(var T=0;T<k.mode_gr;T++){for(var H,p=k.l3_side.tt[T][A],u=p.xr,l=0,s=k.sb_sample[A][1-T],V=0,_=0;_<18/2;_++)for(N(K,X,s[V]),N(K,X+32,s[V+1]),V+=2,X+=64,H=1;H<32;H+=2)s[V-1][H]*=-1;for(H=0;H<32;H++,l+=18){var R=p.block_type,f=k.sb_sample[A][T],j=k.sb_sample[A][1-T];if(p.mixed_block_flag!=0&&H<2&&(R=0),k.amp_filter[H]<1e-12)n.fill(u,l+0,l+18,0);else{if(k.amp_filter[H]<1)for(var _=0;_<18;_++)j[_][w[H]]*=k.amp_filter[H];if(R==o.SHORT_TYPE){for(var _=-12/4;_<0;_++){var g=S[o.SHORT_TYPE][_+3];u[l+_*3+9]=f[9+_][w[H]]*g-f[8-_][w[H]],u[l+_*3+18]=f[14-_][w[H]]*g+f[15+_][w[H]],u[l+_*3+10]=f[15+_][w[H]]*g-f[14-_][w[H]],u[l+_*3+19]=j[2-_][w[H]]*g+j[3+_][w[H]],u[l+_*3+11]=j[3+_][w[H]]*g-j[2-_][w[H]],u[l+_*3+20]=j[8-_][w[H]]*g+j[9+_][w[H]]}J(u,l)}else{for(var P=d(18),_=-36/4;_<0;_++){var a,c;a=S[R][_+27]*j[_+9][w[H]]+S[R][_+36]*j[8-_][w[H]],c=S[R][_+9]*f[_+9][w[H]]-S[R][_+18]*f[8-_][w[H]],P[_+9]=a-c*W[3+_+9],P[_+18]=a*W[3+_+9]+c}U(u,l,P)}}if(R!=o.SHORT_TYPE&&H!=0)for(var _=7;_>=0;--_){var M,L;M=u[l+_]*Z[20+_]+u[l+-1-_]*O[28+_],L=u[l+_]*O[28+_]-u[l+-1-_]*Z[20+_],u[l+-1-_]=M,u[l+_]=L}}}if(K=r,X=286,k.mode_gr==1)for(var ee=0;ee<18;ee++)e.arraycopy(k.sb_sample[A][1][ee],0,k.sb_sample[A][0][ee],0,32)}}}return Wi=m,Wi}var Li,ys;function nn(){if(ys)return Li;ys=1;var t=bt(),e=it,i=e.System;e.VbrMode,e.Float,e.ShortBlock,e.Util,e.Arrays,e.new_array_n,e.new_byte,e.new_double;var n=e.new_float,d=e.new_float_n;e.new_int,e.new_int_n,e.assert;function o(){this.l=n(t.SBMAX_l),this.s=d([t.SBMAX_s,3]);var m=this;this.assign=function(h){i.arraycopy(h.l,0,m.l,0,t.SBMAX_l);for(var S=0;S<t.SBMAX_s;S++)for(var W=0;W<3;W++)m.s[S][W]=h.s[S][W]}}return Li=o,Li}var xi,fs;function Dn(){if(fs)return xi;fs=1;var t=nn();function e(){this.thm=new t,this.en=new t}return xi=e,xi}var Hi,Zs;function bt(){if(Zs)return Hi;Zs=1;var t=it,e=t.System,i=t.VbrMode;t.Float,t.ShortBlock,t.Util,t.Arrays;var n=t.new_array_n;t.new_byte,t.new_double;var d=t.new_float,o=t.new_float_n,m=t.new_int;t.new_int_n;var h=t.assert;S.ENCDELAY=576,S.POSTDELAY=1152,S.MDCTDELAY=48,S.FFTOFFSET=224+S.MDCTDELAY,S.DECDELAY=528,S.SBLIMIT=32,S.CBANDS=64,S.SBPSY_l=21,S.SBPSY_s=12,S.SBMAX_l=22,S.SBMAX_s=13,S.PSFB21=6,S.PSFB12=6,S.BLKSIZE=1024,S.HBLKSIZE=S.BLKSIZE/2+1,S.BLKSIZE_s=256,S.HBLKSIZE_s=S.BLKSIZE_s/2+1,S.NORM_TYPE=0,S.START_TYPE=1,S.SHORT_TYPE=2,S.STOP_TYPE=3,S.MPG_MD_LR_LR=0,S.MPG_MD_LR_I=1,S.MPG_MD_MS_LR=2,S.MPG_MD_MS_I=3,S.fircoef=[-.0207887*5,-.0378413*5,-.0432472*5,-.031183*5,779609e-23*5,.0467745*5,.10091*5,.151365*5,.187098*5];function S(){var W=Qn(),v=Dn(),Z=S.FFTOFFSET,O=S.MPG_MD_MS_LR,w=null;this.psy=null;var N=null,J=null,U=null;this.setModules=function(X,A,T,H){w=X,this.psy=A,N=A,J=H,U=T};var k=new W;function I(X){var A,T;if(X.ATH.useAdjust==0){X.ATH.adjust=1;return}if(T=X.loudness_sq[0][0],A=X.loudness_sq[1][0],X.channels_out==2?(T+=X.loudness_sq[0][1],A+=X.loudness_sq[1][1]):(T+=T,A+=A),X.mode_gr==2&&(T=Math.max(T,A)),T*=.5,T*=X.ATH.aaSensitivityP,T>.03125)X.ATH.adjust>=1?X.ATH.adjust=1:X.ATH.adjust<X.ATH.adjustLimit&&(X.ATH.adjust=X.ATH.adjustLimit),X.ATH.adjustLimit=1;else{var H=31.98*T+625e-6;X.ATH.adjust>=H?(X.ATH.adjust*=H*.075+.925,X.ATH.adjust<H&&(X.ATH.adjust=H)):X.ATH.adjustLimit>=H?X.ATH.adjust=H:X.ATH.adjust<X.ATH.adjustLimit&&(X.ATH.adjust=X.ATH.adjustLimit),X.ATH.adjustLimit=H}}function r(X){var A,T;for(h(0<=X.bitrate_index&&X.bitrate_index<16),h(0<=X.mode_ext&&X.mode_ext<4),X.bitrate_stereoMode_Hist[X.bitrate_index][4]++,X.bitrate_stereoMode_Hist[15][4]++,X.channels_out==2&&(X.bitrate_stereoMode_Hist[X.bitrate_index][X.mode_ext]++,X.bitrate_stereoMode_Hist[15][X.mode_ext]++),A=0;A<X.mode_gr;++A)for(T=0;T<X.channels_out;++T){var H=X.l3_side.tt[A][T].block_type|0;X.l3_side.tt[A][T].mixed_block_flag!=0&&(H=4),X.bitrate_blockType_Hist[X.bitrate_index][H]++,X.bitrate_blockType_Hist[X.bitrate_index][5]++,X.bitrate_blockType_Hist[15][H]++,X.bitrate_blockType_Hist[15][5]++}}function K(X,A){var T=X.internal_flags,H,p;if(T.lame_encode_frame_init==0){var u,l,s=d(2014),V=d(2014);for(T.lame_encode_frame_init=1,u=0,l=0;u<286+576*(1+T.mode_gr);++u)u<576*T.mode_gr?(s[u]=0,T.channels_out==2&&(V[u]=0)):(s[u]=A[0][l],T.channels_out==2&&(V[u]=A[1][l]),++l);for(p=0;p<T.mode_gr;p++)for(H=0;H<T.channels_out;H++)T.l3_side.tt[p][H].block_type=S.SHORT_TYPE;k.mdct_sub48(T,s,V),h(576>=S.FFTOFFSET),h(T.mf_size>=S.BLKSIZE+X.framesize-S.FFTOFFSET),h(T.mf_size>=512+X.framesize-32)}}this.lame_encode_mp3_frame=function(X,A,T,H,p,u){var l,s=n([2,2]);s[0][0]=new v,s[0][1]=new v,s[1][0]=new v,s[1][1]=new v;var V=n([2,2]);V[0][0]=new v,V[0][1]=new v,V[1][0]=new v,V[1][1]=new v;var _,R=[null,null],f=X.internal_flags,j=o([2,4]),g=[.5,.5],P=[[0,0],[0,0]],a=[[0,0],[0,0]],c,M,L;if(R[0]=A,R[1]=T,f.lame_encode_frame_init==0&&K(X,R),f.padding=0,(f.slot_lag-=f.frac_SpF)<0&&(f.slot_lag+=X.out_samplerate,f.padding=1),f.psymodel!=0){var ee,ae=[null,null],le=0,re=m(2);for(L=0;L<f.mode_gr;L++){for(M=0;M<f.channels_out;M++)ae[M]=R[M],le=576+L*576-S.FFTOFFSET;if(X.VBR==i.vbr_mtrh||X.VBR==i.vbr_mt?ee=N.L3psycho_anal_vbr(X,ae,le,L,s,V,P[L],a[L],j[L],re):ee=N.L3psycho_anal_ns(X,ae,le,L,s,V,P[L],a[L],j[L],re),ee!=0)return-4;for(X.mode==MPEGMode.JOINT_STEREO&&(g[L]=j[L][2]+j[L][3],g[L]>0&&(g[L]=j[L][3]/g[L])),M=0;M<f.channels_out;M++){var _e=f.l3_side.tt[L][M];_e.block_type=re[M],_e.mixed_block_flag=0}}}else for(L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)f.l3_side.tt[L][M].block_type=S.NORM_TYPE,f.l3_side.tt[L][M].mixed_block_flag=0,a[L][M]=P[L][M]=700;if(I(f),k.mdct_sub48(f,R[0],R[1]),f.mode_ext=S.MPG_MD_LR_LR,X.force_ms)f.mode_ext=S.MPG_MD_MS_LR;else if(X.mode==MPEGMode.JOINT_STEREO){var he=0,oe=0;for(L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)he+=a[L][M],oe+=P[L][M];if(he<=1*oe){var Le=f.l3_side.tt[0],ze=f.l3_side.tt[f.mode_gr-1];Le[0].block_type==Le[1].block_type&&ze[0].block_type==ze[1].block_type&&(f.mode_ext=S.MPG_MD_MS_LR)}}if(f.mode_ext==O?(_=V,c=a):(_=s,c=P),X.analysis&&f.pinfo!=null)for(L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)f.pinfo.ms_ratio[L]=f.ms_ratio[L],f.pinfo.ms_ener_ratio[L]=g[L],f.pinfo.blocktype[L][M]=f.l3_side.tt[L][M].block_type,f.pinfo.pe[L][M]=c[L][M],e.arraycopy(f.l3_side.tt[L][M].xr,0,f.pinfo.xr[L][M],0,576),f.mode_ext==O&&(f.pinfo.ers[L][M]=f.pinfo.ers[L][M+2],e.arraycopy(f.pinfo.energy[L][M+2],0,f.pinfo.energy[L][M],0,f.pinfo.energy[L][M].length));if(X.VBR==i.vbr_off||X.VBR==i.vbr_abr){var We,we;for(We=0;We<18;We++)f.nsPsy.pefirbuf[We]=f.nsPsy.pefirbuf[We+1];for(we=0,L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)we+=c[L][M];for(f.nsPsy.pefirbuf[18]=we,we=f.nsPsy.pefirbuf[9],We=0;We<9;We++)we+=(f.nsPsy.pefirbuf[We]+f.nsPsy.pefirbuf[18-We])*S.fircoef[We];for(we=670*5*f.mode_gr*f.channels_out/we,L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)c[L][M]*=we}if(f.iteration_loop.iteration_loop(X,c,g,_),w.format_bitstream(X),l=w.copy_buffer(f,H,p,u,1),X.bWriteVbrTag&&J.addVbrFrame(X),X.analysis&&f.pinfo!=null){for(M=0;M<f.channels_out;M++){var Ke;for(Ke=0;Ke<Z;Ke++)f.pinfo.pcmdata[M][Ke]=f.pinfo.pcmdata[M][Ke+X.framesize];for(Ke=Z;Ke<1600;Ke++)f.pinfo.pcmdata[M][Ke]=R[M][Ke-Z]}U.set_frame_pinfo(X,_)}return r(f),l}}return Hi=S,Hi}var pt=it;pt.System;pt.VbrMode;pt.Float;pt.ShortBlock;var Xs=pt.Util;pt.Arrays;pt.new_array_n;pt.new_byte;pt.new_double;var _s=pt.new_float;pt.new_float_n;pt.new_int;pt.new_int_n;pt.assert;var Oe=bt();function $n(){var t=_s(Oe.BLKSIZE),e=_s(Oe.BLKSIZE_s/2),i=[.9238795325112867,.3826834323650898,.9951847266721969,.0980171403295606,.9996988186962042,.02454122852291229,.9999811752826011,.006135884649154475];function n(o,m,h){var S=0,W,v,Z;h<<=1;var O=m+h;W=4;do{var w,N,J,U,k,I,r;r=W>>1,U=W,k=W<<1,I=k+U,W=k<<1,v=m,Z=v+r;do{var K,X,A,T;X=o[v+0]-o[v+U],K=o[v+0]+o[v+U],T=o[v+k]-o[v+I],A=o[v+k]+o[v+I],o[v+k]=K-A,o[v+0]=K+A,o[v+I]=X-T,o[v+U]=X+T,X=o[Z+0]-o[Z+U],K=o[Z+0]+o[Z+U],T=Xs.SQRT2*o[Z+I],A=Xs.SQRT2*o[Z+k],o[Z+k]=K-A,o[Z+0]=K+A,o[Z+I]=X-T,o[Z+U]=X+T,Z+=W,v+=W}while(v<O);for(N=i[S+0],w=i[S+1],J=1;J<r;J++){var H,p;H=1-2*w*w,p=2*w*N,v=m+J,Z=m+U-J;do{var u,l,s,K,X,V,A,_,T,R;l=p*o[v+U]-H*o[Z+U],u=H*o[v+U]+p*o[Z+U],X=o[v+0]-u,K=o[v+0]+u,V=o[Z+0]-l,s=o[Z+0]+l,l=p*o[v+I]-H*o[Z+I],u=H*o[v+I]+p*o[Z+I],T=o[v+k]-u,A=o[v+k]+u,R=o[Z+k]-l,_=o[Z+k]+l,l=w*A-N*R,u=N*A+w*R,o[v+k]=K-u,o[v+0]=K+u,o[Z+I]=V-l,o[Z+U]=V+l,l=N*_-w*T,u=w*_+N*T,o[Z+k]=s-u,o[Z+0]=s+u,o[v+I]=X-l,o[v+U]=X+l,Z+=W,v+=W}while(v<O);H=N,N=H*i[S+0]-w*i[S+1],w=H*i[S+1]+w*i[S+0]}S+=2}while(W<h)}var d=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254];this.fft_short=function(o,m,h,S,W){for(var v=0;v<3;v++){var Z=Oe.BLKSIZE_s/2,O=65535&576/3*(v+1),w=Oe.BLKSIZE_s/8-1;do{var N,J,U,k,I,r=d[w<<2]&255;N=e[r]*S[h][W+r+O],I=e[127-r]*S[h][W+r+O+128],J=N-I,N=N+I,U=e[r+64]*S[h][W+r+O+64],I=e[63-r]*S[h][W+r+O+192],k=U-I,U=U+I,Z-=4,m[v][Z+0]=N+U,m[v][Z+2]=N-U,m[v][Z+1]=J+k,m[v][Z+3]=J-k,N=e[r+1]*S[h][W+r+O+1],I=e[126-r]*S[h][W+r+O+129],J=N-I,N=N+I,U=e[r+65]*S[h][W+r+O+65],I=e[62-r]*S[h][W+r+O+193],k=U-I,U=U+I,m[v][Z+Oe.BLKSIZE_s/2+0]=N+U,m[v][Z+Oe.BLKSIZE_s/2+2]=N-U,m[v][Z+Oe.BLKSIZE_s/2+1]=J+k,m[v][Z+Oe.BLKSIZE_s/2+3]=J-k}while(--w>=0);n(m[v],Z,Oe.BLKSIZE_s/2)}},this.fft_long=function(o,m,h,S,W){var v=Oe.BLKSIZE/8-1,Z=Oe.BLKSIZE/2;do{var O,w,N,J,U,k=d[v]&255;O=t[k]*S[h][W+k],U=t[k+512]*S[h][W+k+512],w=O-U,O=O+U,N=t[k+256]*S[h][W+k+256],U=t[k+768]*S[h][W+k+768],J=N-U,N=N+U,Z-=4,m[Z+0]=O+N,m[Z+2]=O-N,m[Z+1]=w+J,m[Z+3]=w-J,O=t[k+1]*S[h][W+k+1],U=t[k+513]*S[h][W+k+513],w=O-U,O=O+U,N=t[k+257]*S[h][W+k+257],U=t[k+769]*S[h][W+k+769],J=N-U,N=N+U,m[Z+Oe.BLKSIZE/2+0]=O+N,m[Z+Oe.BLKSIZE/2+2]=O-N,m[Z+Oe.BLKSIZE/2+1]=w+J,m[Z+Oe.BLKSIZE/2+3]=w-J}while(--v>=0);n(m,Z,Oe.BLKSIZE/2)},this.init_fft=function(o){for(var m=0;m<Oe.BLKSIZE;m++)t[m]=.42-.5*Math.cos(2*Math.PI*(m+.5)/Oe.BLKSIZE)+.08*Math.cos(4*Math.PI*(m+.5)/Oe.BLKSIZE);for(var m=0;m<Oe.BLKSIZE_s/2;m++)e[m]=.5*(1-Math.cos(2*Math.PI*(m+.5)/Oe.BLKSIZE_s))}}var qn=$n,yt=it;yt.System;var W0=yt.VbrMode,Ss=yt.Float,L0=yt.ShortBlock,mt=yt.Util,er=yt.Arrays;yt.new_array_n;yt.new_byte;yt.new_double;var je=yt.new_float,kt=yt.new_float_n,h0=yt.new_int;yt.new_int_n;var ue=yt.assert,tr=qn,D=bt();function ir(){var t=new tr,e=2.302585092994046,i=2,n=16,d=2,o=16,m=.34,h=1/(14752*14752)/(D.BLKSIZE/2),S=.01,W=.8,v=.6,Z=.3,O=3.5,w=21,N=.2302585093;function J(b){return b}function U(b,y){for(var x=0,Y=0;Y<D.BLKSIZE/2;++Y)x+=b[Y]*y.ATH.eql_w[Y];return x*=h,x}function k(b,y,x,Y,F,G,C,E,B,$,z){var q=b.internal_flags;if(B<2)t.fft_long(q,Y[F],B,$,z),t.fft_short(q,G[C],B,$,z);else if(B==2){for(var ce=D.BLKSIZE-1;ce>=0;--ce){var Ze=Y[F+0][ce],ie=Y[F+1][ce];Y[F+0][ce]=(Ze+ie)*mt.SQRT2*.5,Y[F+1][ce]=(Ze-ie)*mt.SQRT2*.5}for(var fe=2;fe>=0;--fe)for(var ce=D.BLKSIZE_s-1;ce>=0;--ce){var Ze=G[C+0][fe][ce],ie=G[C+1][fe][ce];G[C+0][fe][ce]=(Ze+ie)*mt.SQRT2*.5,G[C+1][fe][ce]=(Ze-ie)*mt.SQRT2*.5}}y[0]=Y[F+0][0],y[0]*=y[0];for(var ce=D.BLKSIZE/2-1;ce>=0;--ce){var Q=Y[F+0][D.BLKSIZE/2-ce],be=Y[F+0][D.BLKSIZE/2+ce];y[D.BLKSIZE/2-ce]=(Q*Q+be*be)*.5}for(var fe=2;fe>=0;--fe){x[fe][0]=G[C+0][fe][0],x[fe][0]*=x[fe][0];for(var ce=D.BLKSIZE_s/2-1;ce>=0;--ce){var Q=G[C+0][fe][D.BLKSIZE_s/2-ce],be=G[C+0][fe][D.BLKSIZE_s/2+ce];x[fe][D.BLKSIZE_s/2-ce]=(Q*Q+be*be)*.5}}{for(var Re=0,ce=11;ce<D.HBLKSIZE;ce++)Re+=y[ce];q.tot_ener[B]=Re}if(b.analysis){for(var ce=0;ce<D.HBLKSIZE;ce++)q.pinfo.energy[E][B][ce]=q.pinfo.energy_save[B][ce],q.pinfo.energy_save[B][ce]=y[ce];q.pinfo.pe[E][B]=q.pe[B]}b.athaa_loudapprox==2&&B<2&&(q.loudness_sq[E][B]=q.loudness_sq_save[B],q.loudness_sq_save[B]=U(y,q))}var I=8,r=23,K=15,X,A,T,H=[1,.79433,.63096,.63096,.63096,.63096,.63096,.25119,.11749];function p(){X=Math.pow(10,(I+1)/16),A=Math.pow(10,(r+1)/16),T=Math.pow(10,K/10)}var u=[3.3246*3.3246,3.23837*3.23837,3.15437*3.15437,3.00412*3.00412,2.86103*2.86103,2.65407*2.65407,2.46209*2.46209,2.284*2.284,2.11879*2.11879,1.96552*1.96552,1.82335*1.82335,1.69146*1.69146,1.56911*1.56911,1.46658*1.46658,1.37074*1.37074,1.31036*1.31036,1.25264*1.25264,1.20648*1.20648,1.16203*1.16203,1.12765*1.12765,1.09428*1.09428,1.0659*1.0659,1.03826*1.03826,1.01895*1.01895,1],l=[1.33352*1.33352,1.35879*1.35879,1.38454*1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537,1.30382*1.30382,1.22321*1.22321,1.14758*1.14758,1],s=[2.35364*2.35364,2.29259*2.29259,2.23313*2.23313,2.12675*2.12675,2.02545*2.02545,1.87894*1.87894,1.74303*1.74303,1.61695*1.61695,1.49999*1.49999,1.39148*1.39148,1.29083*1.29083,1.19746*1.19746,1.11084*1.11084,1.03826*1.03826];function V(b,y,x,Y,F,G){var C;if(y>b)if(y<b*A)C=y/b;else return b+y;else{if(b>=y*A)return b+y;C=b/y}if(ue(b>=0),ue(y>=0),b+=y,Y+3<=6){if(C>=X)return b;var E=0|mt.FAST_LOG10_X(C,16);return b*l[E]}var E=0|mt.FAST_LOG10_X(C,16);if(y=F.ATH.cb_l[x]*F.ATH.adjust,ue(y>=0),b<T*y){if(b>y){var B,$;return B=1,E<=13&&(B=s[E]),$=mt.FAST_LOG10_X(b/y,10/15),b*((u[E]-B)*$+B)}return E>13?b:b*s[E]}return b*u[E]}var _=[1.33352*1.33352,1.35879*1.35879,1.38454*1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537,1.30382*1.30382,1.22321*1.22321,1.14758*1.14758,1];function R(b,y,x){var Y;if(b<0&&(b=0),y<0&&(y=0),b<=0)return y;if(y<=0)return b;if(y>b?Y=y/b:Y=b/y,-2<=x&&x<=2){if(Y>=X)return b+y;var F=0|mt.FAST_LOG10_X(Y,16);return(b+y)*_[F]}return Y<A?b+y:(b<y&&(b=y),b)}function f(b,y){var x=b.internal_flags;if(x.channels_out>1){for(var Y=0;Y<D.SBMAX_l;Y++){var F=x.thm[0].l[Y],G=x.thm[1].l[Y];x.thm[0].l[Y]+=G*y,x.thm[1].l[Y]+=F*y}for(var Y=0;Y<D.SBMAX_s;Y++)for(var C=0;C<3;C++){var F=x.thm[0].s[Y][C],G=x.thm[1].s[Y][C];x.thm[0].s[Y][C]+=G*y,x.thm[1].s[Y][C]+=F*y}}}function j(b){for(var y=0;y<D.SBMAX_l;y++)if(!(b.thm[0].l[y]>1.58*b.thm[1].l[y]||b.thm[1].l[y]>1.58*b.thm[0].l[y])){var x=b.mld_l[y]*b.en[3].l[y],Y=Math.max(b.thm[2].l[y],Math.min(b.thm[3].l[y],x));x=b.mld_l[y]*b.en[2].l[y];var F=Math.max(b.thm[3].l[y],Math.min(b.thm[2].l[y],x));b.thm[2].l[y]=Y,b.thm[3].l[y]=F}for(var y=0;y<D.SBMAX_s;y++)for(var G=0;G<3;G++)if(!(b.thm[0].s[y][G]>1.58*b.thm[1].s[y][G]||b.thm[1].s[y][G]>1.58*b.thm[0].s[y][G])){var x=b.mld_s[y]*b.en[3].s[y][G],Y=Math.max(b.thm[2].s[y][G],Math.min(b.thm[3].s[y][G],x));x=b.mld_s[y]*b.en[2].s[y][G];var F=Math.max(b.thm[3].s[y][G],Math.min(b.thm[2].s[y][G],x));b.thm[2].s[y][G]=Y,b.thm[3].s[y][G]=F}}function g(b,y,x){var Y=y,F=Math.pow(10,x);y*=2,Y*=2;for(var G=0;G<D.SBMAX_l;G++){var C,E,B,$;if($=b.ATH.cb_l[b.bm_l[G]]*F,C=Math.min(Math.max(b.thm[0].l[G],$),Math.max(b.thm[1].l[G],$)),E=Math.max(b.thm[2].l[G],$),B=Math.max(b.thm[3].l[G],$),C*y<E+B){var z=C*Y/(E+B);E*=z,B*=z,ue(E+B>0)}b.thm[2].l[G]=Math.min(E,b.thm[2].l[G]),b.thm[3].l[G]=Math.min(B,b.thm[3].l[G])}F*=D.BLKSIZE_s/D.BLKSIZE;for(var G=0;G<D.SBMAX_s;G++)for(var q=0;q<3;q++){var C,E,B,$;if($=b.ATH.cb_s[b.bm_s[G]]*F,C=Math.min(Math.max(b.thm[0].s[G][q],$),Math.max(b.thm[1].s[G][q],$)),E=Math.max(b.thm[2].s[G][q],$),B=Math.max(b.thm[3].s[G][q],$),C*y<E+B){var z=C*y/(E+B);E*=z,B*=z,ue(E+B>0)}b.thm[2].s[G][q]=Math.min(b.thm[2].s[G][q],E),b.thm[3].s[G][q]=Math.min(b.thm[3].s[G][q],B)}}function P(b,y,x,Y,F){var G,C,E=0,B=0;for(G=C=0;G<D.SBMAX_s;++C,++G){for(var $=b.bo_s[G],z=b.npart_s,q=$<z?$:z;C<q;)ue(y[C]>=0),ue(x[C]>=0),E+=y[C],B+=x[C],C++;if(b.en[Y].s[G][F]=E,b.thm[Y].s[G][F]=B,C>=z){++G;break}ue(y[C]>=0),ue(x[C]>=0);{var ce=b.PSY.bo_s_weight[G],Ze=1-ce;E=ce*y[C],B=ce*x[C],b.en[Y].s[G][F]+=E,b.thm[Y].s[G][F]+=B,E=Ze*y[C],B=Ze*x[C]}}for(;G<D.SBMAX_s;++G)b.en[Y].s[G][F]=0,b.thm[Y].s[G][F]=0}function a(b,y,x,Y){var F,G,C=0,E=0;for(F=G=0;F<D.SBMAX_l;++G,++F){for(var B=b.bo_l[F],$=b.npart_l,z=B<$?B:$;G<z;)ue(y[G]>=0),ue(x[G]>=0),C+=y[G],E+=x[G],G++;if(b.en[Y].l[F]=C,b.thm[Y].l[F]=E,G>=$){++F;break}ue(y[G]>=0),ue(x[G]>=0);{var q=b.PSY.bo_l_weight[F],ce=1-q;C=q*y[G],E=q*x[G],b.en[Y].l[F]+=C,b.thm[Y].l[F]+=E,C=ce*y[G],E=ce*x[G]}}for(;F<D.SBMAX_l;++F)b.en[Y].l[F]=0,b.thm[Y].l[F]=0}function c(b,y,x,Y,F,G){var C=b.internal_flags,E,B;for(B=E=0;B<C.npart_s;++B){for(var $=0,z=C.numlines_s[B],q=0;q<z;++q,++E){var ce=y[G][E];$+=ce}x[B]=$}for(ue(B==C.npart_s),ue(E==129),E=B=0;B<C.npart_s;B++){var Ze=C.s3ind_s[B][0],ie=C.s3_ss[E++]*x[Ze];for(++Ze;Ze<=C.s3ind_s[B][1];)ie+=C.s3_ss[E]*x[Ze],++E,++Ze;{var fe=d*C.nb_s1[F][B];Y[B]=Math.min(ie,fe)}if(C.blocktype_old[F&1]==D.SHORT_TYPE){var fe=o*C.nb_s2[F][B],Q=Y[B];Y[B]=Math.min(fe,Q)}C.nb_s2[F][B]=C.nb_s1[F][B],C.nb_s1[F][B]=ie,ue(Y[B]>=0)}for(;B<=D.CBANDS;++B)x[B]=0,Y[B]=0}function M(b,y,x,Y){var F=b.internal_flags;b.short_blocks==L0.short_block_coupled&&!(y[0]!=0&&y[1]!=0)&&(y[0]=y[1]=0);for(var G=0;G<F.channels_out;G++)Y[G]=D.NORM_TYPE,b.short_blocks==L0.short_block_dispensed&&(y[G]=1),b.short_blocks==L0.short_block_forced&&(y[G]=0),y[G]!=0?(ue(F.blocktype_old[G]!=D.START_TYPE),F.blocktype_old[G]==D.SHORT_TYPE&&(Y[G]=D.STOP_TYPE)):(Y[G]=D.SHORT_TYPE,F.blocktype_old[G]==D.NORM_TYPE&&(F.blocktype_old[G]=D.START_TYPE),F.blocktype_old[G]==D.STOP_TYPE&&(F.blocktype_old[G]=D.SHORT_TYPE)),x[G]=F.blocktype_old[G],F.blocktype_old[G]=Y[G]}function L(b,y,x){return x>=1?b:x<=0?y:y>0?Math.pow(b/y,x)*y:0}var ee=[11.8,13.6,17.2,32,46.5,51.3,57.5,67.1,71.5,84.6,97.6,130];function ae(b,y){for(var x=309.07,Y=0;Y<D.SBMAX_s-1;Y++)for(var F=0;F<3;F++){var G=b.thm.s[Y][F];if(ue(Y<ee.length),G>0){var C=G*y,E=b.en.s[Y][F];E>C&&(E>C*1e10?x+=ee[Y]*(10*e):(ue(C>0),x+=ee[Y]*mt.FAST_LOG10(E/C)))}}return x}var le=[6.8,5.8,5.8,6.4,6.5,9.9,12.1,14.4,15,18.9,21.6,26.9,34.2,40.2,46.8,56.5,60.7,73.9,85.7,93.4,126.1];function re(b,y){for(var x=281.0575,Y=0;Y<D.SBMAX_l-1;Y++){var F=b.thm.l[Y];if(ue(Y<le.length),F>0){var G=F*y,C=b.en.l[Y];C>G&&(C>G*1e10?x+=le[Y]*(10*e):(ue(G>0),x+=le[Y]*mt.FAST_LOG10(C/G)))}}return x}function _e(b,y,x,Y,F){var G,C;for(G=C=0;G<b.npart_l;++G){var E=0,B=0,$;for($=0;$<b.numlines_l[G];++$,++C){var z=y[C];ue(z>=0),E+=z,B<z&&(B=z)}x[G]=E,Y[G]=B,F[G]=E*b.rnumlines_l[G],ue(b.rnumlines_l[G]>=0),ue(E>=0),ue(x[G]>=0),ue(Y[G]>=0),ue(F[G]>=0)}}function he(b,y,x,Y){var F=H.length-1,G=0,C=x[G]+x[G+1];if(ue(C>=0),C>0){var E=y[G];E<y[G+1]&&(E=y[G+1]),ue(b.numlines_l[G]+b.numlines_l[G+1]-1>0),C=20*(E*2-C)/(C*(b.numlines_l[G]+b.numlines_l[G+1]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;for(G=1;G<b.npart_l-1;G++)if(C=x[G-1]+x[G]+x[G+1],ue(C>=0),C>0){var E=y[G-1];E<y[G]&&(E=y[G]),E<y[G+1]&&(E=y[G+1]),ue(b.numlines_l[G-1]+b.numlines_l[G]+b.numlines_l[G+1]-1>0),C=20*(E*3-C)/(C*(b.numlines_l[G-1]+b.numlines_l[G]+b.numlines_l[G+1]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;if(ue(G>0),ue(G==b.npart_l-1),C=x[G-1]+x[G],ue(C>=0),C>0){var E=y[G-1];E<y[G]&&(E=y[G]),ue(b.numlines_l[G-1]+b.numlines_l[G]-1>0),C=20*(E*2-C)/(C*(b.numlines_l[G-1]+b.numlines_l[G]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;ue(G==b.npart_l-1)}var oe=[-865163e-23*2,-.00851586*2,-674764e-23*2,.0209036*2,-336639e-22*2,-.0438162*2,-154175e-22*2,.0931738*2,-552212e-22*2,-.313819*2];this.L3psycho_anal_ns=function(b,y,x,Y,F,G,C,E,B,$){var z=b.internal_flags,q=kt([2,D.BLKSIZE]),ce=kt([2,3,D.BLKSIZE_s]),Ze=je(D.CBANDS+1),ie=je(D.CBANDS+1),fe=je(D.CBANDS+2),Q=h0(2),be=h0(2),Re,se,pe,te,Xe,ke,de,Ie,Te=kt([2,576]),ge,Lt=h0(D.CBANDS+2),Ae=h0(D.CBANDS+2);for(er.fill(Ae,0),Re=z.channels_out,b.mode==MPEGMode.JOINT_STEREO&&(Re=4),b.VBR==W0.vbr_off?ge=z.ResvMax==0?0:z.ResvSize/z.ResvMax*.5:b.VBR==W0.vbr_rh||b.VBR==W0.vbr_mtrh||b.VBR==W0.vbr_mt?ge=.6:ge=1,se=0;se<z.channels_out;se++){var Be=y[se],ct=x+576-350-w+192;for(ue(oe.length==(w-1)/2),te=0;te<576;te++){var xt,Ht;for(xt=Be[ct+te+10],Ht=0,Xe=0;Xe<(w-1)/2-1;Xe+=2)xt+=oe[Xe]*(Be[ct+te+Xe]+Be[ct+te+w-Xe]),Ht+=oe[Xe+1]*(Be[ct+te+Xe+1]+Be[ct+te+w-Xe-1]);Te[se][te]=xt+Ht}F[Y][se].en.assign(z.en[se]),F[Y][se].thm.assign(z.thm[se]),Re>2&&(G[Y][se].en.assign(z.en[se+2]),G[Y][se].thm.assign(z.thm[se+2]))}for(se=0;se<Re;se++){var Jt,Et,nt=je(12),zt=[0,0,0,0],T0=je(12),_i=1,cs,ds=je(D.CBANDS),ms=je(D.CBANDS),Fe=[0,0,0,0],us=je(D.HBLKSIZE),hs=kt([3,D.HBLKSIZE_s]);for(ue(z.npart_s<=D.CBANDS),ue(z.npart_l<=D.CBANDS),te=0;te<3;te++)nt[te]=z.nsPsy.last_en_subshort[se][te+6],ue(z.nsPsy.last_en_subshort[se][te+4]>0),T0[te]=nt[te]/z.nsPsy.last_en_subshort[se][te+4],zt[0]+=nt[te];if(se==2)for(te=0;te<576;te++){var Si,Gi;Si=Te[0][te],Gi=Te[1][te],Te[0][te]=Si+Gi,Te[1][te]=Si-Gi}{var bs=Te[se&1],g0=0;for(te=0;te<9;te++){for(var Fn=g0+64,$e=1;g0<Fn;g0++)$e<Math.abs(bs[g0])&&($e=Math.abs(bs[g0]));z.nsPsy.last_en_subshort[se][te]=nt[te+3]=$e,zt[1+te/3]+=$e,$e>nt[te+3-2]?(ue(nt[te+3-2]>0),$e=$e/nt[te+3-2]):nt[te+3-2]>$e*10?(ue($e>0),$e=nt[te+3-2]/($e*10)):$e=0,T0[te+3]=$e}}if(b.analysis){var vi=T0[0];for(te=1;te<12;te++)vi<T0[te]&&(vi=T0[te]);z.pinfo.ers[Y][se]=z.pinfo.ers_save[se],z.pinfo.ers_save[se]=vi}for(cs=se==3?z.nsPsy.attackthre_s:z.nsPsy.attackthre,te=0;te<12;te++)Fe[te/3]==0&&T0[te]>cs&&(Fe[te/3]=te%3+1);for(te=1;te<4;te++){var Ii;zt[te-1]>zt[te]?(ue(zt[te]>0),Ii=zt[te-1]/zt[te]):(ue(zt[te-1]>0),Ii=zt[te]/zt[te-1]),Ii<1.7&&(Fe[te]=0,te==1&&(Fe[0]=0))}for(Fe[0]!=0&&z.nsPsy.lastAttacks[se]!=0&&(Fe[0]=0),(z.nsPsy.lastAttacks[se]==3||Fe[0]+Fe[1]+Fe[2]+Fe[3]!=0)&&(_i=0,Fe[1]!=0&&Fe[0]!=0&&(Fe[1]=0),Fe[2]!=0&&Fe[1]!=0&&(Fe[2]=0),Fe[3]!=0&&Fe[2]!=0&&(Fe[3]=0)),se<2?be[se]=_i:_i==0&&(be[0]=be[1]=0),B[se]=z.tot_ener[se],Et=ce,Jt=q,k(b,us,hs,Jt,se&1,Et,se&1,Y,se,y,x),_e(z,us,Ze,ds,ms),he(z,ds,ms,Lt),Ie=0;Ie<3;Ie++){var Vi,dt;for(c(b,hs,ie,fe,se,Ie),P(z,ie,fe,se,Ie),de=0;de<D.SBMAX_s;de++){if(dt=z.thm[se].s[de][Ie],dt*=W,Fe[Ie]>=2||Fe[Ie+1]==1){var F0=Ie!=0?Ie-1:2,$e=L(z.thm[se].s[de][F0],dt,v*ge);dt=Math.min(dt,$e)}if(Fe[Ie]==1){var F0=Ie!=0?Ie-1:2,$e=L(z.thm[se].s[de][F0],dt,Z*ge);dt=Math.min(dt,$e)}else if(Ie!=0&&Fe[Ie-1]==3||Ie==0&&z.nsPsy.lastAttacks[se]==3){var F0=Ie!=2?Ie+1:0,$e=L(z.thm[se].s[de][F0],dt,Z*ge);dt=Math.min(dt,$e)}Vi=nt[Ie*3+3]+nt[Ie*3+4]+nt[Ie*3+5],nt[Ie*3+5]*6<Vi&&(dt*=.5,nt[Ie*3+4]*6<Vi&&(dt*=.5)),z.thm[se].s[de][Ie]=dt}}for(z.nsPsy.lastAttacks[se]=Fe[2],ke=0,pe=0;pe<z.npart_l;pe++){for(var m0=z.s3ind[pe][0],Ri=Ze[m0]*H[Lt[m0]],u0=z.s3_ll[ke++]*Ri;++m0<=z.s3ind[pe][1];)Ri=Ze[m0]*H[Lt[m0]],u0=V(u0,z.s3_ll[ke++]*Ri,m0,m0-pe,z);u0*=.158489319246111,z.blocktype_old[se&1]==D.SHORT_TYPE?fe[pe]=u0:fe[pe]=L(Math.min(u0,Math.min(i*z.nb_1[se][pe],n*z.nb_2[se][pe])),u0,ge),z.nb_2[se][pe]=z.nb_1[se][pe],z.nb_1[se][pe]=u0}for(;pe<=D.CBANDS;++pe)Ze[pe]=0,fe[pe]=0;a(z,Ze,fe,se)}if((b.mode==MPEGMode.STEREO||b.mode==MPEGMode.JOINT_STEREO)&&b.interChRatio>0&&f(b,b.interChRatio),b.mode==MPEGMode.JOINT_STEREO){var Ti;j(z),Ti=b.msfix,Math.abs(Ti)>0&&g(z,Ti,b.ATHlower*z.ATH.adjust)}for(M(b,be,$,Q),se=0;se<Re;se++){var J0,E0=0,ei,ti;se>1?(J0=E,E0=-2,ei=D.NORM_TYPE,($[0]==D.SHORT_TYPE||$[1]==D.SHORT_TYPE)&&(ei=D.SHORT_TYPE),ti=G[Y][se-2]):(J0=C,E0=0,ei=$[se],ti=F[Y][se]),ei==D.SHORT_TYPE?J0[E0+se]=ae(ti,z.masking_lower):J0[E0+se]=re(ti,z.masking_lower),b.analysis&&(z.pinfo.pe[Y][se]=J0[E0+se])}return 0};function Le(b,y,x,Y,F,G,C,E){var B=b.internal_flags;if(Y<2)t.fft_long(B,C[E],Y,y,x);else if(Y==2)for(var $=D.BLKSIZE-1;$>=0;--$){var z=C[E+0][$],q=C[E+1][$];C[E+0][$]=(z+q)*mt.SQRT2*.5,C[E+1][$]=(z-q)*mt.SQRT2*.5}G[0]=C[E+0][0],G[0]*=G[0];for(var $=D.BLKSIZE/2-1;$>=0;--$){var ce=C[E+0][D.BLKSIZE/2-$],Ze=C[E+0][D.BLKSIZE/2+$];G[D.BLKSIZE/2-$]=(ce*ce+Ze*Ze)*.5}{for(var ie=0,$=11;$<D.HBLKSIZE;$++)ie+=G[$];B.tot_ener[Y]=ie}if(b.analysis){for(var $=0;$<D.HBLKSIZE;$++)B.pinfo.energy[F][Y][$]=B.pinfo.energy_save[Y][$],B.pinfo.energy_save[Y][$]=G[$];B.pinfo.pe[F][Y]=B.pe[Y]}}function ze(b,y,x,Y,F,G,C,E){var B=b.internal_flags;if(F==0&&Y<2&&t.fft_short(B,C[E],Y,y,x),Y==2)for(var $=D.BLKSIZE_s-1;$>=0;--$){var z=C[E+0][F][$],q=C[E+1][F][$];C[E+0][F][$]=(z+q)*mt.SQRT2*.5,C[E+1][F][$]=(z-q)*mt.SQRT2*.5}G[F][0]=C[E+0][F][0],G[F][0]*=G[F][0];for(var $=D.BLKSIZE_s/2-1;$>=0;--$){var ce=C[E+0][F][D.BLKSIZE_s/2-$],Ze=C[E+0][F][D.BLKSIZE_s/2+$];G[F][D.BLKSIZE_s/2-$]=(ce*ce+Ze*Ze)*.5}}function We(b,y,x,Y){var F=b.internal_flags;b.athaa_loudapprox==2&&x<2&&(F.loudness_sq[y][x]=F.loudness_sq_save[x],F.loudness_sq_save[x]=U(Y,F))}var we=[-865163e-23*2,-.00851586*2,-674764e-23*2,.0209036*2,-336639e-22*2,-.0438162*2,-154175e-22*2,.0931738*2,-552212e-22*2,-.313819*2];function Ke(b,y,x,Y,F,G,C,E,B,$){for(var z=kt([2,576]),q=b.internal_flags,ce=q.channels_out,Ze=b.mode==MPEGMode.JOINT_STEREO?4:ce,ie=0;ie<ce;ie++){firbuf=y[ie];var fe=x+576-350-w+192;ue(we.length==(w-1)/2);for(var Q=0;Q<576;Q++){var be,Re;be=firbuf[fe+Q+10],Re=0;for(var se=0;se<(w-1)/2-1;se+=2)be+=we[se]*(firbuf[fe+Q+se]+firbuf[fe+Q+w-se]),Re+=we[se+1]*(firbuf[fe+Q+se+1]+firbuf[fe+Q+w-se-1]);z[ie][Q]=be+Re}F[Y][ie].en.assign(q.en[ie]),F[Y][ie].thm.assign(q.thm[ie]),Ze>2&&(G[Y][ie].en.assign(q.en[ie+2]),G[Y][ie].thm.assign(q.thm[ie+2]))}for(var ie=0;ie<Ze;ie++){var pe=je(12),te=je(12),Xe=[0,0,0,0],ke=z[ie&1],de=0,Ie=ie==3?q.nsPsy.attackthre_s:q.nsPsy.attackthre,Te=1;if(ie==2)for(var Q=0,se=576;se>0;++Q,--se){var ge=z[0][Q],Lt=z[1][Q];z[0][Q]=ge+Lt,z[1][Q]=ge-Lt}for(var Q=0;Q<3;Q++)te[Q]=q.nsPsy.last_en_subshort[ie][Q+6],ue(q.nsPsy.last_en_subshort[ie][Q+4]>0),pe[Q]=te[Q]/q.nsPsy.last_en_subshort[ie][Q+4],Xe[0]+=te[Q];for(var Q=0;Q<9;Q++){for(var Ae=de+64,Be=1;de<Ae;de++)Be<Math.abs(ke[de])&&(Be=Math.abs(ke[de]));q.nsPsy.last_en_subshort[ie][Q]=te[Q+3]=Be,Xe[1+Q/3]+=Be,Be>te[Q+3-2]?(ue(te[Q+3-2]>0),Be=Be/te[Q+3-2]):te[Q+3-2]>Be*10?(ue(Be>0),Be=te[Q+3-2]/(Be*10)):Be=0,pe[Q+3]=Be}for(var Q=0;Q<3;++Q){var ct=te[Q*3+3]+te[Q*3+4]+te[Q*3+5],xt=1;te[Q*3+5]*6<ct&&(xt*=.5,te[Q*3+4]*6<ct&&(xt*=.5)),E[ie][Q]=xt}if(b.analysis){for(var Ht=pe[0],Q=1;Q<12;Q++)Ht<pe[Q]&&(Ht=pe[Q]);q.pinfo.ers[Y][ie]=q.pinfo.ers_save[ie],q.pinfo.ers_save[ie]=Ht}for(var Q=0;Q<12;Q++)B[ie][Q/3]==0&&pe[Q]>Ie&&(B[ie][Q/3]=Q%3+1);for(var Q=1;Q<4;Q++){var Jt=Xe[Q-1],Et=Xe[Q],nt=Math.max(Jt,Et);nt<4e4&&Jt<1.7*Et&&Et<1.7*Jt&&(Q==1&&B[ie][0]<=B[ie][Q]&&(B[ie][0]=0),B[ie][Q]=0)}B[ie][0]<=q.nsPsy.lastAttacks[ie]&&(B[ie][0]=0),(q.nsPsy.lastAttacks[ie]==3||B[ie][0]+B[ie][1]+B[ie][2]+B[ie][3]!=0)&&(Te=0,B[ie][1]!=0&&B[ie][0]!=0&&(B[ie][1]=0),B[ie][2]!=0&&B[ie][1]!=0&&(B[ie][2]=0),B[ie][3]!=0&&B[ie][2]!=0&&(B[ie][3]=0)),ie<2?$[ie]=Te:Te==0&&($[0]=$[1]=0),C[ie]=q.tot_ener[ie]}}function De(b,y,x){if(x==0)for(var Y=0;Y<b.npart_s;Y++)b.nb_s2[y][Y]=b.nb_s1[y][Y],b.nb_s1[y][Y]=0}function st(b,y){for(var x=0;x<b.npart_l;x++)b.nb_2[y][x]=b.nb_1[y][x],b.nb_1[y][x]=0}function a0(b,y,x,Y){var F=H.length-1,G=0,C=x[G]+x[G+1];if(ue(C>=0),C>0){var E=y[G];E<y[G+1]&&(E=y[G+1]),ue(b.numlines_s[G]+b.numlines_s[G+1]-1>0),C=20*(E*2-C)/(C*(b.numlines_s[G]+b.numlines_s[G+1]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;for(G=1;G<b.npart_s-1;G++)if(C=x[G-1]+x[G]+x[G+1],ue(G+1<b.npart_s),ue(C>=0),C>0){var E=y[G-1];E<y[G]&&(E=y[G]),E<y[G+1]&&(E=y[G+1]),ue(b.numlines_s[G-1]+b.numlines_s[G]+b.numlines_s[G+1]-1>0),C=20*(E*3-C)/(C*(b.numlines_s[G-1]+b.numlines_s[G]+b.numlines_s[G+1]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;if(ue(G>0),ue(G==b.npart_s-1),C=x[G-1]+x[G],ue(C>=0),C>0){var E=y[G-1];E<y[G]&&(E=y[G]),ue(b.numlines_s[G-1]+b.numlines_s[G]-1>0),C=20*(E*2-C)/(C*(b.numlines_s[G-1]+b.numlines_s[G]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;ue(G==b.npart_s-1)}function gt(b,y,x,Y,F,G){var C=b.internal_flags,E=new float[D.CBANDS],B=je(D.CBANDS),$,z,q,ce=new int[D.CBANDS];for(q=z=0;q<C.npart_s;++q){var Ze=0,ie=0,fe=C.numlines_s[q];for($=0;$<fe;++$,++z){var Q=y[G][z];Ze+=Q,ie<Q&&(ie=Q)}x[q]=Ze,ue(Ze>=0),E[q]=ie,ue(fe>0),B[q]=Ze/fe,ue(B[q]>=0)}for(ue(q==C.npart_s),ue(z==129);q<D.CBANDS;++q)E[q]=0,B[q]=0;for(a0(C,E,B,ce),z=q=0;q<C.npart_s;q++){var be=C.s3ind_s[q][0],Re=C.s3ind_s[q][1],se,pe,te,Xe,ke;for(se=ce[be],pe=1,Xe=C.s3_ss[z]*x[be]*H[ce[be]],++z,++be;be<=Re;)se+=ce[be],pe+=1,te=C.s3_ss[z]*x[be]*H[ce[be]],Xe=R(Xe,te,be-q),++z,++be;se=(1+2*se)/(2*pe),ke=H[se]*.5,Xe*=ke,Y[q]=Xe,C.nb_s2[F][q]=C.nb_s1[F][q],C.nb_s1[F][q]=Xe,te=E[q],te*=C.minval_s[q],te*=ke,Y[q]>te&&(Y[q]=te),C.masking_lower>1&&(Y[q]*=C.masking_lower),Y[q]>x[q]&&(Y[q]=x[q]),C.masking_lower<1&&(Y[q]*=C.masking_lower),ue(Y[q]>=0)}for(;q<D.CBANDS;++q)x[q]=0,Y[q]=0}function Ft(b,y,x,Y,F){var G=je(D.CBANDS),C=je(D.CBANDS),E=h0(D.CBANDS+2),B;_e(b,y,x,G,C),he(b,G,C,E);var $=0;for(B=0;B<b.npart_l;B++){var z,q,ce,Ze,ie=b.s3ind[B][0],fe=b.s3ind[B][1],Q=0,be=0;for(Q=E[ie],be+=1,q=b.s3_ll[$]*x[ie]*H[E[ie]],++$,++ie;ie<=fe;)Q+=E[ie],be+=1,z=b.s3_ll[$]*x[ie]*H[E[ie]],Ze=R(q,z,ie-B),q=Ze,++$,++ie;if(Q=(1+2*Q)/(2*be),ce=H[Q]*.5,q*=ce,b.blocktype_old[F&1]==D.SHORT_TYPE){var Re=i*b.nb_1[F][B];Re>0?Y[B]=Math.min(q,Re):Y[B]=Math.min(q,x[B]*Z)}else{var se=n*b.nb_2[F][B],pe=i*b.nb_1[F][B],Re;se<=0&&(se=q),pe<=0&&(pe=q),b.blocktype_old[F&1]==D.NORM_TYPE?Re=Math.min(pe,se):Re=pe,Y[B]=Math.min(q,Re)}b.nb_2[F][B]=b.nb_1[F][B],b.nb_1[F][B]=q,z=G[B],z*=b.minval_l[B],z*=ce,Y[B]>z&&(Y[B]=z),b.masking_lower>1&&(Y[B]*=b.masking_lower),Y[B]>x[B]&&(Y[B]=x[B]),b.masking_lower<1&&(Y[B]*=b.masking_lower),ue(Y[B]>=0)}for(;B<D.CBANDS;++B)x[B]=0,Y[B]=0}function l0(b,y){var x=b.internal_flags;b.short_blocks==L0.short_block_coupled&&!(y[0]!=0&&y[1]!=0)&&(y[0]=y[1]=0);for(var Y=0;Y<x.channels_out;Y++)b.short_blocks==L0.short_block_dispensed&&(y[Y]=1),b.short_blocks==L0.short_block_forced&&(y[Y]=0)}function $0(b,y,x){for(var Y=b.internal_flags,F=0;F<Y.channels_out;F++){var G=D.NORM_TYPE;y[F]!=0?(ue(Y.blocktype_old[F]!=D.START_TYPE),Y.blocktype_old[F]==D.SHORT_TYPE&&(G=D.STOP_TYPE)):(G=D.SHORT_TYPE,Y.blocktype_old[F]==D.NORM_TYPE&&(Y.blocktype_old[F]=D.START_TYPE),Y.blocktype_old[F]==D.STOP_TYPE&&(Y.blocktype_old[F]=D.SHORT_TYPE)),x[F]=Y.blocktype_old[F],Y.blocktype_old[F]=G}}function C0(b,y,x,Y,F,G,C){for(var E=G*2,B=G>0?Math.pow(10,F):1,$,z,q=0;q<C;++q){var ce=b[2][q],Ze=b[3][q],ie=y[0][q],fe=y[1][q],Q=y[2][q],be=y[3][q];if(ie<=1.58*fe&&fe<=1.58*ie){var Re=x[q]*Ze,se=x[q]*ce;z=Math.max(Q,Math.min(be,Re)),$=Math.max(be,Math.min(Q,se))}else z=Q,$=be;if(G>0){var pe,te,Xe=Y[q]*B;if(pe=Math.min(Math.max(ie,Xe),Math.max(fe,Xe)),Q=Math.max(z,Xe),be=Math.max($,Xe),te=Q+be,te>0&&pe*E<te){var ke=pe*E/te;Q*=ke,be*=ke,ue(te>0)}z=Math.min(Q,z),$=Math.min(be,$)}z>ce&&(z=ce),$>Ze&&($=Ze),y[2][q]=z,y[3][q]=$}}this.L3psycho_anal_vbr=function(b,y,x,Y,F,G,C,E,B,$){var z=b.internal_flags,q,ce,Ze=je(D.HBLKSIZE),ie=kt([3,D.HBLKSIZE_s]),fe=kt([2,D.BLKSIZE]),Q=kt([2,3,D.BLKSIZE_s]),be=kt([4,D.CBANDS]),Re=kt([4,D.CBANDS]),se=kt([4,3]),pe=.6,te=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],Xe=h0(2),ke=b.mode==MPEGMode.JOINT_STEREO?4:z.channels_out;Ke(b,y,x,Y,F,G,B,se,te,Xe),l0(b,Xe);{for(var de=0;de<ke;de++){var Ie=de&1;q=fe,Le(b,y,x,de,Y,Ze,q,Ie),We(b,Y,de,Ze),Xe[Ie]!=0?Ft(z,Ze,be[de],Re[de],de):st(z,de)}Xe[0]+Xe[1]==2&&b.mode==MPEGMode.JOINT_STEREO&&C0(be,Re,z.mld_cb_l,z.ATH.cb_l,b.ATHlower*z.ATH.adjust,b.msfix,z.npart_l);for(var de=0;de<ke;de++){var Ie=de&1;Xe[Ie]!=0&&a(z,be[de],Re[de],de)}}{for(var Te=0;Te<3;Te++){for(var de=0;de<ke;++de){var Ie=de&1;Xe[Ie]!=0?De(z,de,Te):(ce=Q,ze(b,y,x,de,Te,ie,ce,Ie),gt(b,ie,be[de],Re[de],de,Te))}Xe[0]+Xe[1]==0&&b.mode==MPEGMode.JOINT_STEREO&&C0(be,Re,z.mld_cb_s,z.ATH.cb_s,b.ATHlower*z.ATH.adjust,b.msfix,z.npart_s);for(var de=0;de<ke;++de){var Ie=de&1;Xe[Ie]==0&&P(z,be[de],Re[de],de,Te)}}for(var de=0;de<ke;de++){var Ie=de&1;if(Xe[Ie]==0)for(var ge=0;ge<D.SBMAX_s;ge++){for(var Lt=je(3),Te=0;Te<3;Te++){var Ae=z.thm[de].s[ge][Te];if(Ae*=W,te[de][Te]>=2||te[de][Te+1]==1){var Be=Te!=0?Te-1:2,ct=L(z.thm[de].s[ge][Be],Ae,v*pe);Ae=Math.min(Ae,ct)}else if(te[de][Te]==1){var Be=Te!=0?Te-1:2,ct=L(z.thm[de].s[ge][Be],Ae,Z*pe);Ae=Math.min(Ae,ct)}else if(Te!=0&&te[de][Te-1]==3||Te==0&&z.nsPsy.lastAttacks[de]==3){var Be=Te!=2?Te+1:0,ct=L(z.thm[de].s[ge][Be],Ae,Z*pe);Ae=Math.min(Ae,ct)}Ae*=se[de][Te],Lt[Te]=Ae}for(var Te=0;Te<3;Te++)z.thm[de].s[ge][Te]=Lt[Te]}}}for(var de=0;de<ke;de++)z.nsPsy.lastAttacks[de]=te[de][2];$0(b,Xe,$);for(var de=0;de<ke;de++){var xt,Ht,Jt,Et;de>1?(xt=E,Ht=-2,Jt=D.NORM_TYPE,($[0]==D.SHORT_TYPE||$[1]==D.SHORT_TYPE)&&(Jt=D.SHORT_TYPE),Et=G[Y][de-2]):(xt=C,Ht=0,Jt=$[de],Et=F[Y][de]),Jt==D.SHORT_TYPE?xt[Ht+de]=ae(Et,z.masking_lower):xt[Ht+de]=re(Et,z.masking_lower),b.analysis&&(z.pinfo.pe[Y][de]=xt[Ht+de])}return 0};function Mt(b,y){var x=b,Y;return x>=0?Y=-x*27:Y=x*y,Y<=-72?0:Math.exp(Y*N)}function q0(b){var y=0,x=0;{var Y=0,F,G;for(Y=0;Mt(Y,b)>1e-20;Y-=1);for(F=Y,G=0;Math.abs(G-F)>1e-12;)Y=(G+F)/2,Mt(Y,b)>0?G=Y:F=Y;y=F}{var Y=0,F,G;for(Y=0;Mt(Y,b)>1e-20;Y+=1);for(F=0,G=Y;Math.abs(G-F)>1e-12;)Y=(G+F)/2,Mt(Y,b)>0?F=Y:G=Y;x=G}{var C=0,E=1e3,B;for(B=0;B<=E;++B){var Y=y+B*(x-y)/E,$=Mt(Y,b);C+=$}{var z=(E+1)/(C*(x-y));return z}}}function Xi(b){var y,x,Y,F;return y=b,y>=0?y*=3:y*=1.5,y>=.5&&y<=2.5?(F=y-.5,x=8*(F*F-2*F)):x=0,y+=.474,Y=15.811389+7.5*y-17.5*Math.sqrt(1+y*y),Y<=-60?0:(y=Math.exp((x+Y)*N),y/=.6609193,y)}function o0(b){return b<0&&(b=0),b=b*.001,13*Math.atan(.76*b)+3.5*Math.atan(b*b/(7.5*7.5))}function as(b,y,x,Y,F,G,C,E,B,$,z,q){var ce=je(D.CBANDS+1),Ze=E/(q>15?2*576:2*192),ie=h0(D.HBLKSIZE),fe;E/=B;var Q=0,be=0;for(fe=0;fe<D.CBANDS;fe++){var Re,se;for(Re=o0(E*Q),ce[fe]=E*Q,se=Q;o0(E*se)-Re<m&&se<=B/2;se++);for(b[fe]=se-Q,be=fe+1;Q<se;)ue(Q<D.HBLKSIZE),ie[Q++]=fe;if(Q>B/2){Q=B/2,++fe;break}}ue(fe<D.CBANDS),ce[fe]=E*Q;for(var pe=0;pe<q;pe++){var te,Xe,ke,de,Ie;ke=$[pe],de=$[pe+1],te=0|Math.floor(.5+z*(ke-.5)),te<0&&(te=0),Xe=0|Math.floor(.5+z*(de-.5)),Xe>B/2&&(Xe=B/2),x[pe]=(ie[te]+ie[Xe])/2,y[pe]=ie[Xe];var Te=Ze*de;C[pe]=(Te-ce[y[pe]])/(ce[y[pe]+1]-ce[y[pe]]),C[pe]<0?C[pe]=0:C[pe]>1&&(C[pe]=1),Ie=o0(E*$[pe]*z),Ie=Math.min(Ie,15.5)/15.5,G[pe]=Math.pow(10,1.25*(1-Math.cos(Math.PI*Ie))-2.5)}Q=0;for(var ge=0;ge<be;ge++){var Lt=b[ge],Re,Ae;Re=o0(E*Q),Ae=o0(E*(Q+Lt-1)),Y[ge]=.5*(Re+Ae),Re=o0(E*(Q-.5)),Ae=o0(E*(Q+Lt-.5)),F[ge]=Ae-Re,Q+=Lt}return be}function ls(b,y,x,Y,F,G){var C=kt([D.CBANDS,D.CBANDS]),E,B=0;if(G)for(var $=0;$<y;$++)for(E=0;E<y;E++){var z=Xi(x[$]-x[E])*Y[E];C[$][E]=z*F[$]}else for(E=0;E<y;E++)for(var q=15+Math.min(21/x[E],12),ce=q0(q),$=0;$<y;$++){var z=ce*Mt(x[$]-x[E],q)*Y[E];C[$][E]=z*F[$]}for(var $=0;$<y;$++){for(E=0;E<y&&!(C[$][E]>0);E++);for(b[$][0]=E,E=y-1;E>0&&!(C[$][E]>0);E--);b[$][1]=E,B+=b[$][1]-b[$][0]+1}for(var Ze=je(B),ie=0,$=0;$<y;$++)for(E=b[$][0];E<=b[$][1];E++)Ze[ie++]=C[$][E];return Ze}function os(b){var y=o0(b);return y=Math.min(y,15.5)/15.5,Math.pow(10,1.25*(1-Math.cos(Math.PI*y))-2.5)}this.psymodel_init=function(b){var y=b.internal_flags,x,Y=!0,F=13,G=24,C=0,E=0,B=-8.25,$=-4.5,z=je(D.CBANDS),q=je(D.CBANDS),ce=je(D.CBANDS),Ze=b.out_samplerate;switch(b.experimentalZ){default:case 0:Y=!0;break;case 1:Y=!(b.VBR==W0.vbr_mtrh||b.VBR==W0.vbr_mt);break;case 2:Y=!1;break;case 3:F=8,C=-1.75,E=-.0125,B=-8.25,$=-2.25;break}for(y.ms_ener_ratio_old=.25,y.blocktype_old[0]=y.blocktype_old[1]=D.NORM_TYPE,x=0;x<4;++x){for(var Q=0;Q<D.CBANDS;++Q)y.nb_1[x][Q]=1e20,y.nb_2[x][Q]=1e20,y.nb_s1[x][Q]=y.nb_s2[x][Q]=1;for(var ie=0;ie<D.SBMAX_l;ie++)y.en[x].l[ie]=1e20,y.thm[x].l[ie]=1e20;for(var Q=0;Q<3;++Q){for(var ie=0;ie<D.SBMAX_s;ie++)y.en[x].s[ie][Q]=1e20,y.thm[x].s[ie][Q]=1e20;y.nsPsy.lastAttacks[x]=0}for(var Q=0;Q<9;Q++)y.nsPsy.last_en_subshort[x][Q]=10}for(y.loudness_sq_save[0]=y.loudness_sq_save[1]=0,y.npart_l=as(y.numlines_l,y.bo_l,y.bm_l,z,q,y.mld_l,y.PSY.bo_l_weight,Ze,D.BLKSIZE,y.scalefac_band.l,D.BLKSIZE/(2*576),D.SBMAX_l),ue(y.npart_l<D.CBANDS),x=0;x<y.npart_l;x++){var fe=C;z[x]>=F&&(fe=E*(z[x]-F)/(G-F)+C*(G-z[x])/(G-F)),ce[x]=Math.pow(10,fe/10),y.numlines_l[x]>0?y.rnumlines_l[x]=1/y.numlines_l[x]:y.rnumlines_l[x]=0}y.s3_ll=ls(y.s3ind,y.npart_l,z,q,ce,Y);var Q=0;for(x=0;x<y.npart_l;x++){var be;be=Ss.MAX_VALUE;for(var Re=0;Re<y.numlines_l[x];Re++,Q++){var se=Ze*Q/(1e3*D.BLKSIZE),pe;pe=this.ATHformula(se*1e3,b)-20,pe=Math.pow(10,.1*pe),pe*=y.numlines_l[x],be>pe&&(be=pe)}y.ATH.cb_l[x]=be,be=-20+z[x]*20/10,be>6&&(be=100),be<-15&&(be=-15),be-=8,y.minval_l[x]=Math.pow(10,be/10)*y.numlines_l[x]}for(y.npart_s=as(y.numlines_s,y.bo_s,y.bm_s,z,q,y.mld_s,y.PSY.bo_s_weight,Ze,D.BLKSIZE_s,y.scalefac_band.s,D.BLKSIZE_s/(2*192),D.SBMAX_s),ue(y.npart_s<D.CBANDS),Q=0,x=0;x<y.npart_s;x++){var be,fe=B;z[x]>=F&&(fe=$*(z[x]-F)/(G-F)+B*(G-z[x])/(G-F)),ce[x]=Math.pow(10,fe/10),be=Ss.MAX_VALUE;for(var Re=0;Re<y.numlines_s[x];Re++,Q++){var se=Ze*Q/(1e3*D.BLKSIZE_s),pe;pe=this.ATHformula(se*1e3,b)-20,pe=Math.pow(10,.1*pe),pe*=y.numlines_s[x],be>pe&&(be=pe)}y.ATH.cb_s[x]=be,be=-7+z[x]*7/12,z[x]>12&&(be*=1+Math.log(1+be)*3.1),z[x]<12&&(be*=1+Math.log(1-be)*2.3),be<-15&&(be=-15),be-=8,y.minval_s[x]=Math.pow(10,be/10)*y.numlines_s[x]}y.s3_ss=ls(y.s3ind_s,y.npart_s,z,q,ce,Y),p(),t.init_fft(y),y.decay=Math.exp(-1*e/(S*Ze/192));{var te;te=O,b.exp_nspsytune&2&&(te=1),Math.abs(b.msfix)>0&&(te=b.msfix),b.msfix=te;for(var Xe=0;Xe<y.npart_l;Xe++)y.s3ind[Xe][1]>y.npart_l-1&&(y.s3ind[Xe][1]=y.npart_l-1)}var ke=576*y.mode_gr/Ze;if(y.ATH.decay=Math.pow(10,-12/10*ke),y.ATH.adjust=.01,y.ATH.adjustLimit=1,ue(y.bo_l[D.SBMAX_l-1]<=y.npart_l),ue(y.bo_s[D.SBMAX_s-1]<=y.npart_s),b.ATHtype!=-1){var se,de=b.out_samplerate/D.BLKSIZE,Ie=0;for(se=0,x=0;x<D.BLKSIZE/2;++x)se+=de,y.ATH.eql_w[x]=1/Math.pow(10,this.ATHformula(se,b)/10),Ie+=y.ATH.eql_w[x];for(Ie=1/Ie,x=D.BLKSIZE/2;--x>=0;)y.ATH.eql_w[x]*=Ie}{for(var Xe=Q=0;Xe<y.npart_s;++Xe)for(x=0;x<y.numlines_s[Xe];++x)++Q;ue(Q==129);for(var Xe=Q=0;Xe<y.npart_l;++Xe)for(x=0;x<y.numlines_l[Xe];++x)++Q;ue(Q==513)}for(Q=0,x=0;x<y.npart_l;x++){var se=Ze*(Q+y.numlines_l[x]/2)/(1*D.BLKSIZE);y.mld_cb_l[x]=os(se),Q+=y.numlines_l[x]}for(;x<D.CBANDS;++x)y.mld_cb_l[x]=1;for(Q=0,x=0;x<y.npart_s;x++){var se=Ze*(Q+y.numlines_s[x]/2)/(1*D.BLKSIZE_s);y.mld_cb_s[x]=os(se),Q+=y.numlines_s[x]}for(;x<D.CBANDS;++x)y.mld_cb_s[x]=1;return 0};function R0(b,y){b<-.3&&(b=3410),b/=1e3,b=Math.max(.1,b);var x=3.64*Math.pow(b,-.8)-6.8*Math.exp(-.6*Math.pow(b-3.4,2))+6*Math.exp(-.15*Math.pow(b-8.7,2))+(.6+.04*y)*.001*Math.pow(b,4);return x}this.ATHformula=function(b,y){var x;switch(y.ATHtype){case 0:x=R0(b,9);break;case 1:x=R0(b,-1);break;case 2:x=R0(b,0);break;case 3:x=R0(b,1)+6;break;case 4:x=R0(b,y.ATHcurve);break;default:x=R0(b,0);break}return x}}var sr=ir,nr=Os;function rr(){this.class_id=0,this.num_samples=0,this.num_channels=0,this.in_samplerate=0,this.out_samplerate=0,this.scale=0,this.scale_left=0,this.scale_right=0,this.analysis=!1,this.bWriteVbrTag=!1,this.decode_only=!1,this.quality=0,this.mode=nr.STEREO,this.force_ms=!1,this.free_format=!1,this.findReplayGain=!1,this.decode_on_the_fly=!1,this.write_id3tag_automatic=!1,this.brate=0,this.compression_ratio=0,this.copyright=0,this.original=0,this.extension=0,this.emphasis=0,this.error_protection=0,this.strict_ISO=!1,this.disable_reservoir=!1,this.quant_comp=0,this.quant_comp_short=0,this.experimentalY=!1,this.experimentalZ=0,this.exp_nspsytune=0,this.preset=0,this.VBR=null,this.VBR_q_frac=0,this.VBR_q=0,this.VBR_mean_bitrate_kbps=0,this.VBR_min_bitrate_kbps=0,this.VBR_max_bitrate_kbps=0,this.VBR_hard_min=0,this.lowpassfreq=0,this.highpassfreq=0,this.lowpasswidth=0,this.highpasswidth=0,this.maskingadjust=0,this.maskingadjust_short=0,this.ATHonly=!1,this.ATHshort=!1,this.noATH=!1,this.ATHtype=0,this.ATHcurve=0,this.ATHlower=0,this.athaa_type=0,this.athaa_loudapprox=0,this.athaa_sensitivity=0,this.short_blocks=null,this.useTemporal=!1,this.interChRatio=0,this.msfix=0,this.tune=!1,this.tune_value_a=0,this.version=0,this.encoder_delay=0,this.encoder_padding=0,this.framesize=0,this.frameNum=0,this.lame_allocated_gfp=0,this.internal_flags=null}var ar=rr,lr=bt(),rn={};rn.SFBMAX=lr.SBMAX_s*3;var Di=rn,ft=it;ft.System;ft.VbrMode;ft.Float;ft.ShortBlock;ft.Util;ft.Arrays;ft.new_array_n;ft.new_byte;ft.new_double;var or=ft.new_float;ft.new_float_n;var b0=ft.new_int;ft.new_int_n;ft.assert;var Yi=Di;function cr(){this.xr=or(576),this.l3_enc=b0(576),this.scalefac=b0(Yi.SFBMAX),this.xrpow_max=0,this.part2_3_length=0,this.big_values=0,this.count1=0,this.global_gain=0,this.scalefac_compress=0,this.block_type=0,this.mixed_block_flag=0,this.table_select=b0(3),this.subblock_gain=b0(4),this.region0_count=0,this.region1_count=0,this.preflag=0,this.scalefac_scale=0,this.count1table_select=0,this.part2_length=0,this.sfb_lmax=0,this.sfb_smin=0,this.psy_lmax=0,this.sfbmax=0,this.psymax=0,this.sfbdivide=0,this.width=b0(Yi.SFBMAX),this.window=b0(Yi.SFBMAX),this.count1bits=0,this.sfb_partition_table=null,this.slen=b0(4),this.max_nonzero_coeff=0;var t=this;function e(n){return new Int32Array(n)}function i(n){return new Float32Array(n)}this.assign=function(n){t.xr=i(n.xr),t.l3_enc=e(n.l3_enc),t.scalefac=e(n.scalefac),t.xrpow_max=n.xrpow_max,t.part2_3_length=n.part2_3_length,t.big_values=n.big_values,t.count1=n.count1,t.global_gain=n.global_gain,t.scalefac_compress=n.scalefac_compress,t.block_type=n.block_type,t.mixed_block_flag=n.mixed_block_flag,t.table_select=e(n.table_select),t.subblock_gain=e(n.subblock_gain),t.region0_count=n.region0_count,t.region1_count=n.region1_count,t.preflag=n.preflag,t.scalefac_scale=n.scalefac_scale,t.count1table_select=n.count1table_select,t.part2_length=n.part2_length,t.sfb_lmax=n.sfb_lmax,t.sfb_smin=n.sfb_smin,t.psy_lmax=n.psy_lmax,t.sfbmax=n.sfbmax,t.psymax=n.psymax,t.sfbdivide=n.sfbdivide,t.width=e(n.width),t.window=e(n.window),t.count1bits=n.count1bits,t.sfb_partition_table=n.sfb_partition_table.slice(0),t.slen=e(n.slen),t.max_nonzero_coeff=n.max_nonzero_coeff}}var an=cr,Zt=it;Zt.System;Zt.VbrMode;Zt.Float;Zt.ShortBlock;Zt.Util;Zt.Arrays;Zt.new_array_n;Zt.new_byte;Zt.new_double;Zt.new_float;Zt.new_float_n;var Gs=Zt.new_int;Zt.new_int_n;Zt.assert;var dr=an;function mr(){this.tt=[[null,null],[null,null]],this.main_data_begin=0,this.private_bits=0,this.resvDrain_pre=0,this.resvDrain_post=0,this.scfsi=[Gs(4),Gs(4)];for(var t=0;t<2;t++)for(var e=0;e<2;e++)this.tt[t][e]=new dr}var ur=mr,Xt=it,ii=Xt.System;Xt.VbrMode;Xt.Float;Xt.ShortBlock;Xt.Util;Xt.Arrays;Xt.new_array_n;Xt.new_byte;Xt.new_double;Xt.new_float;Xt.new_float_n;var si=Xt.new_int;Xt.new_int_n;Xt.assert;var ni=bt();function hr(t,e,i,n){this.l=si(1+ni.SBMAX_l),this.s=si(1+ni.SBMAX_s),this.psfb21=si(1+ni.PSFB21),this.psfb12=si(1+ni.PSFB12);var d=this.l,o=this.s;arguments.length==4&&(this.arrL=arguments[0],this.arrS=arguments[1],this.arr21=arguments[2],this.arr12=arguments[3],ii.arraycopy(this.arrL,0,d,0,Math.min(this.arrL.length,this.l.length)),ii.arraycopy(this.arrS,0,o,0,Math.min(this.arrS.length,this.s.length)),ii.arraycopy(this.arr21,0,this.psfb21,0,Math.min(this.arr21.length,this.psfb21.length)),ii.arraycopy(this.arr12,0,this.psfb12,0,Math.min(this.arr12.length,this.psfb12.length)))}var ln=hr,_t=it;_t.System;_t.VbrMode;_t.Float;_t.ShortBlock;_t.Util;_t.Arrays;_t.new_array_n;_t.new_byte;_t.new_double;var wi=_t.new_float,br=_t.new_float_n,pr=_t.new_int;_t.new_int_n;_t.assert;var vs=bt();function yr(){this.last_en_subshort=br([4,9]),this.lastAttacks=pr(4),this.pefirbuf=wi(19),this.longfact=wi(vs.SBMAX_l),this.shortfact=wi(vs.SBMAX_s),this.attackthre=0,this.attackthre_s=0}var fr=yr;function Zr(){this.sum=0,this.seen=0,this.want=0,this.pos=0,this.size=0,this.bag=null,this.nVbrNumFrames=0,this.nBytesWritten=0,this.TotalFrameSize=0}var Xr=Zr,St=it;St.System;St.VbrMode;St.Float;St.ShortBlock;St.Util;St.Arrays;St.new_array_n;var _r=St.new_byte,Sr=St.new_double,Bt=St.new_float,p0=St.new_float_n,Nt=St.new_int,ri=St.new_int_n;St.assert;var Gr=ur,vr=ln,Ir=fr,Vr=Xr,Is=nn(),Pe=bt(),Rr=Di;n0.MFSIZE=3*1152+Pe.ENCDELAY-Pe.MDCTDELAY;n0.MAX_HEADER_BUF=256;n0.MAX_BITS_PER_CHANNEL=4095;n0.MAX_BITS_PER_GRANULE=7680;n0.BPC=320;function n0(){var t=40;this.Class_ID=0,this.lame_encode_frame_init=0,this.iteration_init_init=0,this.fill_buffer_resample_init=0,this.mfbuf=p0([2,n0.MFSIZE]),this.mode_gr=0,this.channels_in=0,this.channels_out=0,this.resample_ratio=0,this.mf_samples_to_encode=0,this.mf_size=0,this.VBR_min_bitrate=0,this.VBR_max_bitrate=0,this.bitrate_index=0,this.samplerate_index=0,this.mode_ext=0,this.lowpass1=0,this.lowpass2=0,this.highpass1=0,this.highpass2=0,this.noise_shaping=0,this.noise_shaping_amp=0,this.substep_shaping=0,this.psymodel=0,this.noise_shaping_stop=0,this.subblock_gain=0,this.use_best_huffman=0,this.full_outer_loop=0,this.l3_side=new Gr,this.ms_ratio=Bt(2),this.padding=0,this.frac_SpF=0,this.slot_lag=0,this.tag_spec=null,this.nMusicCRC=0,this.OldValue=Nt(2),this.CurrentStep=Nt(2),this.masking_lower=0,this.bv_scf=Nt(576),this.pseudohalf=Nt(Rr.SFBMAX),this.sfb21_extra=!1,this.inbuf_old=new Array(2),this.blackfilt=new Array(2*n0.BPC+1),this.itime=Sr(2),this.sideinfo_len=0,this.sb_sample=p0([2,2,18,Pe.SBLIMIT]),this.amp_filter=Bt(32);function e(){this.write_timing=0,this.ptr=0,this.buf=_r(t)}this.header=new Array(n0.MAX_HEADER_BUF),this.h_ptr=0,this.w_ptr=0,this.ancillary_flag=0,this.ResvSize=0,this.ResvMax=0,this.scalefac_band=new vr,this.minval_l=Bt(Pe.CBANDS),this.minval_s=Bt(Pe.CBANDS),this.nb_1=p0([4,Pe.CBANDS]),this.nb_2=p0([4,Pe.CBANDS]),this.nb_s1=p0([4,Pe.CBANDS]),this.nb_s2=p0([4,Pe.CBANDS]),this.s3_ss=null,this.s3_ll=null,this.decay=0,this.thm=new Array(4),this.en=new Array(4),this.tot_ener=Bt(4),this.loudness_sq=p0([2,2]),this.loudness_sq_save=Bt(2),this.mld_l=Bt(Pe.SBMAX_l),this.mld_s=Bt(Pe.SBMAX_s),this.bm_l=Nt(Pe.SBMAX_l),this.bo_l=Nt(Pe.SBMAX_l),this.bm_s=Nt(Pe.SBMAX_s),this.bo_s=Nt(Pe.SBMAX_s),this.npart_l=0,this.npart_s=0,this.s3ind=ri([Pe.CBANDS,2]),this.s3ind_s=ri([Pe.CBANDS,2]),this.numlines_s=Nt(Pe.CBANDS),this.numlines_l=Nt(Pe.CBANDS),this.rnumlines_l=Bt(Pe.CBANDS),this.mld_cb_l=Bt(Pe.CBANDS),this.mld_cb_s=Bt(Pe.CBANDS),this.numlines_s_num1=0,this.numlines_l_num1=0,this.pe=Bt(4),this.ms_ratio_s_old=0,this.ms_ratio_l_old=0,this.ms_ener_ratio_old=0,this.blocktype_old=Nt(2),this.nsPsy=new Ir,this.VBR_seek_table=new Vr,this.ATH=null,this.PSY=null,this.nogap_total=0,this.nogap_current=0,this.decode_on_the_fly=!0,this.findReplayGain=!0,this.findPeakSample=!0,this.PeakSample=0,this.RadioGain=0,this.AudiophileGain=0,this.rgdata=null,this.noclipGainChange=0,this.noclipScale=0,this.bitrate_stereoMode_Hist=ri([16,5]),this.bitrate_blockType_Hist=ri([16,6]),this.pinfo=null,this.hip=null,this.in_buffer_nsamples=0,this.in_buffer_0=null,this.in_buffer_1=null,this.iteration_loop=null;for(var i=0;i<this.en.length;i++)this.en[i]=new Is;for(var i=0;i<this.thm.length;i++)this.thm[i]=new Is;for(var i=0;i<this.header.length;i++)this.header[i]=new e}var yi=n0,Gt=it;Gt.System;Gt.VbrMode;Gt.Float;Gt.ShortBlock;Gt.Util;Gt.Arrays;Gt.new_array_n;Gt.new_byte;Gt.new_double;var y0=Gt.new_float;Gt.new_float_n;Gt.new_int;Gt.new_int_n;Gt.assert;var f0=bt();function Tr(){this.useAdjust=0,this.aaSensitivityP=0,this.adjust=0,this.adjustLimit=0,this.decay=0,this.floor=0,this.l=y0(f0.SBMAX_l),this.s=y0(f0.SBMAX_s),this.psfb21=y0(f0.PSFB21),this.psfb12=y0(f0.PSFB12),this.cb_l=y0(f0.CBANDS),this.cb_s=y0(f0.CBANDS),this.eql_w=y0(f0.BLKSIZE/2)}var Wr=Tr,vt=it,ut=vt.System;vt.VbrMode;vt.Float;vt.ShortBlock;vt.Util;var Vs=vt.Arrays;vt.new_array_n;vt.new_byte;vt.new_double;vt.new_float;vt.new_float_n;vt.new_int;vt.new_int_n;vt.assert;Ce.STEPS_per_dB=100;Ce.MAX_dB=120;Ce.GAIN_NOT_ENOUGH_SAMPLES=-24601;Ce.GAIN_ANALYSIS_ERROR=0;Ce.GAIN_ANALYSIS_OK=1;Ce.INIT_GAIN_ANALYSIS_ERROR=0;Ce.INIT_GAIN_ANALYSIS_OK=1;Ce.YULE_ORDER=10;Ce.MAX_ORDER=Ce.YULE_ORDER;Ce.MAX_SAMP_FREQ=48e3;Ce.RMS_WINDOW_TIME_NUMERATOR=1;Ce.RMS_WINDOW_TIME_DENOMINATOR=20;Ce.MAX_SAMPLES_PER_WINDOW=Ce.MAX_SAMP_FREQ*Ce.RMS_WINDOW_TIME_NUMERATOR/Ce.RMS_WINDOW_TIME_DENOMINATOR+1;function Ce(){var t=64.82;Ce.YULE_ORDER;var e=.95;Ce.MAX_SAMP_FREQ;var i=Ce.RMS_WINDOW_TIME_NUMERATOR,n=Ce.RMS_WINDOW_TIME_DENOMINATOR;Ce.MAX_SAMPLES_PER_WINDOW;var d=[[.038575994352,-3.84664617118067,-.02160367184185,7.81501653005538,-.00123395316851,-11.34170355132042,-9291677959e-14,13.05504219327545,-.01655260341619,-12.28759895145294,.02161526843274,9.4829380631979,-.02074045215285,-5.87257861775999,.00594298065125,2.75465861874613,.00306428023191,-.86984376593551,.00012025322027,.13919314567432,.00288463683916],[.0541865640643,-3.47845948550071,-.02911007808948,6.36317777566148,-.00848709379851,-8.54751527471874,-.00851165645469,9.4769360780128,-.00834990904936,-8.81498681370155,.02245293253339,6.85401540936998,-.02596338512915,-4.39470996079559,.01624864962975,2.19611684890774,-.00240879051584,-.75104302451432,.00674613682247,.13149317958808,-.00187763777362],[.15457299681924,-2.37898834973084,-.09331049056315,2.84868151156327,-.06247880153653,-2.64577170229825,.02163541888798,2.23697657451713,-.05588393329856,-1.67148153367602,.04781476674921,1.00595954808547,.00222312597743,-.45953458054983,.03174092540049,.16378164858596,-.01390589421898,-.05032077717131,.00651420667831,.0234789740702,-.00881362733839],[.30296907319327,-1.61273165137247,-.22613988682123,1.0797749225997,-.08587323730772,-.2565625775407,.03282930172664,-.1627671912044,-.00915702933434,-.22638893773906,-.02364141202522,.39120800788284,-.00584456039913,-.22138138954925,.06276101321749,.04500235387352,-828086748e-14,.02005851806501,.00205861885564,.00302439095741,-.02950134983287],[.33642304856132,-1.49858979367799,-.2557224142557,.87350271418188,-.11828570177555,.12205022308084,.11921148675203,-.80774944671438,-.07834489609479,.47854794562326,-.0046997791438,-.12453458140019,-.0058950022444,-.04067510197014,.05724228140351,.08333755284107,.00832043980773,-.04237348025746,-.0163538138454,.02977207319925,-.0176017656815],[.4491525660845,-.62820619233671,-.14351757464547,.29661783706366,-.22784394429749,-.372563729424,-.01419140100551,.00213767857124,.04078262797139,-.42029820170918,-.12398163381748,.22199650564824,.04097565135648,.00613424350682,.10478503600251,.06747620744683,-.01863887810927,.05784820375801,-.03193428438915,.03222754072173,.00541907748707],[.56619470757641,-1.04800335126349,-.75464456939302,.29156311971249,.1624213774223,-.26806001042947,.16744243493672,.00819999645858,-.18901604199609,.45054734505008,.3093178284183,-.33032403314006,-.27562961986224,.0673936833311,.00647310677246,-.04784254229033,.08647503780351,.01639907836189,-.0378898455484,.01807364323573,-.00588215443421],[.58100494960553,-.51035327095184,-.53174909058578,-.31863563325245,-.14289799034253,-.20256413484477,.17520704835522,.1472815413433,.02377945217615,.38952639978999,.15558449135573,-.23313271880868,-.25344790059353,-.05246019024463,.01628462406333,-.02505961724053,.06920467763959,.02442357316099,-.03721611395801,.01818801111503,-.00749618797172],[.53648789255105,-.2504987195602,-.42163034350696,-.43193942311114,-.00275953611929,-.03424681017675,.04267842219415,-.04678328784242,-.10214864179676,.26408300200955,.14590772289388,.15113130533216,-.02459864859345,-.17556493366449,-.11202315195388,-.18823009262115,-.04060034127,.05477720428674,.0478866554818,.0470440968812,-.02217936801134]],o=[[.98621192462708,-1.97223372919527,-1.97242384925416,.97261396931306,.98621192462708],[.98500175787242,-1.96977855582618,-1.97000351574484,.9702284756635,.98500175787242],[.97938932735214,-1.95835380975398,-1.95877865470428,.95920349965459,.97938932735214],[.97531843204928,-1.95002759149878,-1.95063686409857,.95124613669835,.97531843204928],[.97316523498161,-1.94561023566527,-1.94633046996323,.94705070426118,.97316523498161],[.96454515552826,-1.92783286977036,-1.92909031105652,.93034775234268,.96454515552826],[.96009142950541,-1.91858953033784,-1.92018285901082,.92177618768381,.96009142950541],[.95856916599601,-1.9154210807478,-1.91713833199203,.91885558323625,.95856916599601],[.94597685600279,-1.88903307939452,-1.89195371200558,.89487434461664,.94597685600279]];function m(Z,O,w,N,J,U){for(;J--!=0;)w[N]=1e-10+Z[O+0]*U[0]-w[N-1]*U[1]+Z[O-1]*U[2]-w[N-2]*U[3]+Z[O-2]*U[4]-w[N-3]*U[5]+Z[O-3]*U[6]-w[N-4]*U[7]+Z[O-4]*U[8]-w[N-5]*U[9]+Z[O-5]*U[10]-w[N-6]*U[11]+Z[O-6]*U[12]-w[N-7]*U[13]+Z[O-7]*U[14]-w[N-8]*U[15]+Z[O-8]*U[16]-w[N-9]*U[17]+Z[O-9]*U[18]-w[N-10]*U[19]+Z[O-10]*U[20],++N,++O}function h(Z,O,w,N,J,U){for(;J--!=0;)w[N]=Z[O+0]*U[0]-w[N-1]*U[1]+Z[O-1]*U[2]-w[N-2]*U[3]+Z[O-2]*U[4],++N,++O}function S(Z,O){for(var w=0;w<MAX_ORDER;w++)Z.linprebuf[w]=Z.lstepbuf[w]=Z.loutbuf[w]=Z.rinprebuf[w]=Z.rstepbuf[w]=Z.routbuf[w]=0;switch(0|O){case 48e3:Z.reqindex=0;break;case 44100:Z.reqindex=1;break;case 32e3:Z.reqindex=2;break;case 24e3:Z.reqindex=3;break;case 22050:Z.reqindex=4;break;case 16e3:Z.reqindex=5;break;case 12e3:Z.reqindex=6;break;case 11025:Z.reqindex=7;break;case 8e3:Z.reqindex=8;break;default:return INIT_GAIN_ANALYSIS_ERROR}return Z.sampleWindow=0|(O*i+n-1)/n,Z.lsum=0,Z.rsum=0,Z.totsamp=0,Vs.ill(Z.A,0),INIT_GAIN_ANALYSIS_OK}this.InitGainAnalysis=function(Z,O){return S(Z,O)!=INIT_GAIN_ANALYSIS_OK?INIT_GAIN_ANALYSIS_ERROR:(Z.linpre=MAX_ORDER,Z.rinpre=MAX_ORDER,Z.lstep=MAX_ORDER,Z.rstep=MAX_ORDER,Z.lout=MAX_ORDER,Z.rout=MAX_ORDER,Vs.fill(Z.B,0),INIT_GAIN_ANALYSIS_OK)};function W(Z){return Z*Z}this.AnalyzeSamples=function(Z,O,w,N,J,U,k){var I,r,K,X,A,T,H;if(U==0)return GAIN_ANALYSIS_OK;switch(H=0,A=U,k){case 1:N=O,J=w;break;case 2:break;default:return GAIN_ANALYSIS_ERROR}for(U<MAX_ORDER?(ut.arraycopy(O,w,Z.linprebuf,MAX_ORDER,U),ut.arraycopy(N,J,Z.rinprebuf,MAX_ORDER,U)):(ut.arraycopy(O,w,Z.linprebuf,MAX_ORDER,MAX_ORDER),ut.arraycopy(N,J,Z.rinprebuf,MAX_ORDER,MAX_ORDER));A>0;){T=A>Z.sampleWindow-Z.totsamp?Z.sampleWindow-Z.totsamp:A,H<MAX_ORDER?(I=Z.linpre+H,r=Z.linprebuf,K=Z.rinpre+H,X=Z.rinprebuf,T>MAX_ORDER-H&&(T=MAX_ORDER-H)):(I=w+H,r=O,K=J+H,X=N),m(r,I,Z.lstepbuf,Z.lstep+Z.totsamp,T,d[Z.reqindex]),m(X,K,Z.rstepbuf,Z.rstep+Z.totsamp,T,d[Z.reqindex]),h(Z.lstepbuf,Z.lstep+Z.totsamp,Z.loutbuf,Z.lout+Z.totsamp,T,o[Z.reqindex]),h(Z.rstepbuf,Z.rstep+Z.totsamp,Z.routbuf,Z.rout+Z.totsamp,T,o[Z.reqindex]),I=Z.lout+Z.totsamp,r=Z.loutbuf,K=Z.rout+Z.totsamp,X=Z.routbuf;for(var p=T%8;p--!=0;)Z.lsum+=W(r[I++]),Z.rsum+=W(X[K++]);for(p=T/8;p--!=0;)Z.lsum+=W(r[I+0])+W(r[I+1])+W(r[I+2])+W(r[I+3])+W(r[I+4])+W(r[I+5])+W(r[I+6])+W(r[I+7]),I+=8,Z.rsum+=W(X[K+0])+W(X[K+1])+W(X[K+2])+W(X[K+3])+W(X[K+4])+W(X[K+5])+W(X[K+6])+W(X[K+7]),K+=8;if(A-=T,H+=T,Z.totsamp+=T,Z.totsamp==Z.sampleWindow){var u=Ce.STEPS_per_dB*10*Math.log10((Z.lsum+Z.rsum)/Z.totsamp*.5+1e-37),l=u<=0?0:0|u;l>=Z.A.length&&(l=Z.A.length-1),Z.A[l]++,Z.lsum=Z.rsum=0,ut.arraycopy(Z.loutbuf,Z.totsamp,Z.loutbuf,0,MAX_ORDER),ut.arraycopy(Z.routbuf,Z.totsamp,Z.routbuf,0,MAX_ORDER),ut.arraycopy(Z.lstepbuf,Z.totsamp,Z.lstepbuf,0,MAX_ORDER),ut.arraycopy(Z.rstepbuf,Z.totsamp,Z.rstepbuf,0,MAX_ORDER),Z.totsamp=0}if(Z.totsamp>Z.sampleWindow)return GAIN_ANALYSIS_ERROR}return U<MAX_ORDER?(ut.arraycopy(Z.linprebuf,U,Z.linprebuf,0,MAX_ORDER-U),ut.arraycopy(Z.rinprebuf,U,Z.rinprebuf,0,MAX_ORDER-U),ut.arraycopy(O,w,Z.linprebuf,MAX_ORDER-U,U),ut.arraycopy(N,J,Z.rinprebuf,MAX_ORDER-U,U)):(ut.arraycopy(O,w+U-MAX_ORDER,Z.linprebuf,0,MAX_ORDER),ut.arraycopy(N,J+U-MAX_ORDER,Z.rinprebuf,0,MAX_ORDER)),GAIN_ANALYSIS_OK};function v(Z,O){var w,N=0;for(w=0;w<O;w++)N+=Z[w];if(N==0)return GAIN_NOT_ENOUGH_SAMPLES;var J=0|Math.ceil(N*(1-e));for(w=O;w-- >0&&!((J-=Z[w])<=0););return t-w/Ce.STEPS_per_dB}this.GetTitleGain=function(Z){for(var O=v(Z.A,Z.A.length),w=0;w<Z.A.length;w++)Z.B[w]+=Z.A[w],Z.A[w]=0;for(var w=0;w<MAX_ORDER;w++)Z.linprebuf[w]=Z.lstepbuf[w]=Z.loutbuf[w]=Z.rinprebuf[w]=Z.rstepbuf[w]=Z.routbuf[w]=0;return Z.totsamp=0,Z.lsum=Z.rsum=0,O}}var Lr=Ce,It=it;It.System;It.VbrMode;It.Float;It.ShortBlock;It.Util;It.Arrays;It.new_array_n;It.new_byte;It.new_double;var x0=It.new_float;It.new_float_n;var Rs=It.new_int;It.new_int_n;It.assert;var ht=Lr;function xr(){this.linprebuf=x0(ht.MAX_ORDER*2),this.linpre=0,this.lstepbuf=x0(ht.MAX_SAMPLES_PER_WINDOW+ht.MAX_ORDER),this.lstep=0,this.loutbuf=x0(ht.MAX_SAMPLES_PER_WINDOW+ht.MAX_ORDER),this.lout=0,this.rinprebuf=x0(ht.MAX_ORDER*2),this.rinpre=0,this.rstepbuf=x0(ht.MAX_SAMPLES_PER_WINDOW+ht.MAX_ORDER),this.rstep=0,this.routbuf=x0(ht.MAX_SAMPLES_PER_WINDOW+ht.MAX_ORDER),this.rout=0,this.sampleWindow=0,this.totsamp=0,this.lsum=0,this.rsum=0,this.freqindex=0,this.first=0,this.A=Rs(0|ht.STEPS_per_dB*ht.MAX_dB),this.B=Rs(0|ht.STEPS_per_dB*ht.MAX_dB)}var Hr=xr;function Yr(t){this.bits=t}var on=Yr,Vt=it;Vt.System;Vt.VbrMode;Vt.Float;Vt.ShortBlock;Vt.Util;Vt.Arrays;Vt.new_array_n;Vt.new_byte;Vt.new_double;var Ts=Vt.new_float;Vt.new_float_n;var wr=Vt.new_int;Vt.new_int_n;var Ws=Vt.assert,Kr=on,Ls=bt(),Mr=Di,kr=yi;function Br(t){var e=t;this.quantize=e,this.iteration_loop=function(i,n,d,o){var m=i.internal_flags,h=Ts(Mr.SFBMAX),S=Ts(576),W=wr(2),v=0,Z,O=m.l3_side,w=new Kr(v);this.quantize.rv.ResvFrameBegin(i,w),v=w.bits;for(var N=0;N<m.mode_gr;N++){Z=this.quantize.qupvt.on_pe(i,n,W,v,N,N),m.mode_ext==Ls.MPG_MD_MS_LR&&(this.quantize.ms_convert(m.l3_side,N),this.quantize.qupvt.reduce_side(W,d[N],v,Z));for(var J=0;J<m.channels_out;J++){var U,k,I=O.tt[N][J];I.block_type!=Ls.SHORT_TYPE?(U=0,k=m.PSY.mask_adjust-U):(U=0,k=m.PSY.mask_adjust_short-U),m.masking_lower=Math.pow(10,k*.1),this.quantize.init_outer_loop(m,I),this.quantize.init_xrpow(m,I,S)&&(this.quantize.qupvt.calc_xmin(i,o[N][J],I,h),this.quantize.outer_loop(i,I,h,S,J,W[J])),this.quantize.iteration_finish_one(m,N,J),Ws(I.part2_3_length<=kr.MAX_BITS_PER_CHANNEL),Ws(I.part2_3_length<=W[J])}}this.quantize.rv.ResvFrameEnd(m,v)}}var Cr=Br;function xe(t,e,i,n){this.xlen=t,this.linmax=e,this.table=i,this.hlen=n}var ne={};ne.t1HB=[1,1,1,0];ne.t2HB=[1,2,1,3,1,1,3,2,0];ne.t3HB=[3,2,1,1,1,1,3,2,0];ne.t5HB=[1,2,6,5,3,1,4,4,7,5,7,1,6,1,1,0];ne.t6HB=[7,3,5,1,6,2,3,2,5,4,4,1,3,3,2,0];ne.t7HB=[1,2,10,19,16,10,3,3,7,10,5,3,11,4,13,17,8,4,12,11,18,15,11,2,7,6,9,14,3,1,6,4,5,3,2,0];ne.t8HB=[3,4,6,18,12,5,5,1,2,16,9,3,7,3,5,14,7,3,19,17,15,13,10,4,13,5,8,11,5,1,12,4,4,1,1,0];ne.t9HB=[7,5,9,14,15,7,6,4,5,5,6,7,7,6,8,8,8,5,15,6,9,10,5,1,11,7,9,6,4,1,14,4,6,2,6,0];ne.t10HB=[1,2,10,23,35,30,12,17,3,3,8,12,18,21,12,7,11,9,15,21,32,40,19,6,14,13,22,34,46,23,18,7,20,19,33,47,27,22,9,3,31,22,41,26,21,20,5,3,14,13,10,11,16,6,5,1,9,8,7,8,4,4,2,0];ne.t11HB=[3,4,10,24,34,33,21,15,5,3,4,10,32,17,11,10,11,7,13,18,30,31,20,5,25,11,19,59,27,18,12,5,35,33,31,58,30,16,7,5,28,26,32,19,17,15,8,14,14,12,9,13,14,9,4,1,11,4,6,6,6,3,2,0];ne.t12HB=[9,6,16,33,41,39,38,26,7,5,6,9,23,16,26,11,17,7,11,14,21,30,10,7,17,10,15,12,18,28,14,5,32,13,22,19,18,16,9,5,40,17,31,29,17,13,4,2,27,12,11,15,10,7,4,1,27,12,8,12,6,3,1,0];ne.t13HB=[1,5,14,21,34,51,46,71,42,52,68,52,67,44,43,19,3,4,12,19,31,26,44,33,31,24,32,24,31,35,22,14,15,13,23,36,59,49,77,65,29,40,30,40,27,33,42,16,22,20,37,61,56,79,73,64,43,76,56,37,26,31,25,14,35,16,60,57,97,75,114,91,54,73,55,41,48,53,23,24,58,27,50,96,76,70,93,84,77,58,79,29,74,49,41,17,47,45,78,74,115,94,90,79,69,83,71,50,59,38,36,15,72,34,56,95,92,85,91,90,86,73,77,65,51,44,43,42,43,20,30,44,55,78,72,87,78,61,46,54,37,30,20,16,53,25,41,37,44,59,54,81,66,76,57,54,37,18,39,11,35,33,31,57,42,82,72,80,47,58,55,21,22,26,38,22,53,25,23,38,70,60,51,36,55,26,34,23,27,14,9,7,34,32,28,39,49,75,30,52,48,40,52,28,18,17,9,5,45,21,34,64,56,50,49,45,31,19,12,15,10,7,6,3,48,23,20,39,36,35,53,21,16,23,13,10,6,1,4,2,16,15,17,27,25,20,29,11,17,12,16,8,1,1,0,1];ne.t15HB=[7,12,18,53,47,76,124,108,89,123,108,119,107,81,122,63,13,5,16,27,46,36,61,51,42,70,52,83,65,41,59,36,19,17,15,24,41,34,59,48,40,64,50,78,62,80,56,33,29,28,25,43,39,63,55,93,76,59,93,72,54,75,50,29,52,22,42,40,67,57,95,79,72,57,89,69,49,66,46,27,77,37,35,66,58,52,91,74,62,48,79,63,90,62,40,38,125,32,60,56,50,92,78,65,55,87,71,51,73,51,70,30,109,53,49,94,88,75,66,122,91,73,56,42,64,44,21,25,90,43,41,77,73,63,56,92,77,66,47,67,48,53,36,20,71,34,67,60,58,49,88,76,67,106,71,54,38,39,23,15,109,53,51,47,90,82,58,57,48,72,57,41,23,27,62,9,86,42,40,37,70,64,52,43,70,55,42,25,29,18,11,11,118,68,30,55,50,46,74,65,49,39,24,16,22,13,14,7,91,44,39,38,34,63,52,45,31,52,28,19,14,8,9,3,123,60,58,53,47,43,32,22,37,24,17,12,15,10,2,1,71,37,34,30,28,20,17,26,21,16,10,6,8,6,2,0];ne.t16HB=[1,5,14,44,74,63,110,93,172,149,138,242,225,195,376,17,3,4,12,20,35,62,53,47,83,75,68,119,201,107,207,9,15,13,23,38,67,58,103,90,161,72,127,117,110,209,206,16,45,21,39,69,64,114,99,87,158,140,252,212,199,387,365,26,75,36,68,65,115,101,179,164,155,264,246,226,395,382,362,9,66,30,59,56,102,185,173,265,142,253,232,400,388,378,445,16,111,54,52,100,184,178,160,133,257,244,228,217,385,366,715,10,98,48,91,88,165,157,148,261,248,407,397,372,380,889,884,8,85,84,81,159,156,143,260,249,427,401,392,383,727,713,708,7,154,76,73,141,131,256,245,426,406,394,384,735,359,710,352,11,139,129,67,125,247,233,229,219,393,743,737,720,885,882,439,4,243,120,118,115,227,223,396,746,742,736,721,712,706,223,436,6,202,224,222,218,216,389,386,381,364,888,443,707,440,437,1728,4,747,211,210,208,370,379,734,723,714,1735,883,877,876,3459,865,2,377,369,102,187,726,722,358,711,709,866,1734,871,3458,870,434,0,12,10,7,11,10,17,11,9,13,12,10,7,5,3,1,3];ne.t24HB=[15,13,46,80,146,262,248,434,426,669,653,649,621,517,1032,88,14,12,21,38,71,130,122,216,209,198,327,345,319,297,279,42,47,22,41,74,68,128,120,221,207,194,182,340,315,295,541,18,81,39,75,70,134,125,116,220,204,190,178,325,311,293,271,16,147,72,69,135,127,118,112,210,200,188,352,323,306,285,540,14,263,66,129,126,119,114,214,202,192,180,341,317,301,281,262,12,249,123,121,117,113,215,206,195,185,347,330,308,291,272,520,10,435,115,111,109,211,203,196,187,353,332,313,298,283,531,381,17,427,212,208,205,201,193,186,177,169,320,303,286,268,514,377,16,335,199,197,191,189,181,174,333,321,305,289,275,521,379,371,11,668,184,183,179,175,344,331,314,304,290,277,530,383,373,366,10,652,346,171,168,164,318,309,299,287,276,263,513,375,368,362,6,648,322,316,312,307,302,292,284,269,261,512,376,370,364,359,4,620,300,296,294,288,282,273,266,515,380,374,369,365,361,357,2,1033,280,278,274,267,264,259,382,378,372,367,363,360,358,356,0,43,20,19,17,15,13,11,9,7,6,4,7,5,3,1,3];ne.t32HB=[1,10,8,20,12,20,16,32,14,12,24,0,28,16,24,16];ne.t33HB=[15,28,26,48,22,40,36,64,14,24,20,32,12,16,8,0];ne.t1l=[1,4,3,5];ne.t2l=[1,4,7,4,5,7,6,7,8];ne.t3l=[2,3,7,4,4,7,6,7,8];ne.t5l=[1,4,7,8,4,5,8,9,7,8,9,10,8,8,9,10];ne.t6l=[3,4,6,8,4,4,6,7,5,6,7,8,7,7,8,9];ne.t7l=[1,4,7,9,9,10,4,6,8,9,9,10,7,7,9,10,10,11,8,9,10,11,11,11,8,9,10,11,11,12,9,10,11,12,12,12];ne.t8l=[2,4,7,9,9,10,4,4,6,10,10,10,7,6,8,10,10,11,9,10,10,11,11,12,9,9,10,11,12,12,10,10,11,11,13,13];ne.t9l=[3,4,6,7,9,10,4,5,6,7,8,10,5,6,7,8,9,10,7,7,8,9,9,10,8,8,9,9,10,11,9,9,10,10,11,11];ne.t10l=[1,4,7,9,10,10,10,11,4,6,8,9,10,11,10,10,7,8,9,10,11,12,11,11,8,9,10,11,12,12,11,12,9,10,11,12,12,12,12,12,10,11,12,12,13,13,12,13,9,10,11,12,12,12,13,13,10,10,11,12,12,13,13,13];ne.t11l=[2,4,6,8,9,10,9,10,4,5,6,8,10,10,9,10,6,7,8,9,10,11,10,10,8,8,9,11,10,12,10,11,9,10,10,11,11,12,11,12,9,10,11,12,12,13,12,13,9,9,9,10,11,12,12,12,9,9,10,11,12,12,12,12];ne.t12l=[4,4,6,8,9,10,10,10,4,5,6,7,9,9,10,10,6,6,7,8,9,10,9,10,7,7,8,8,9,10,10,10,8,8,9,9,10,10,10,11,9,9,10,10,10,11,10,11,9,9,9,10,10,11,11,12,10,10,10,11,11,11,11,12];ne.t13l=[1,5,7,8,9,10,10,11,10,11,12,12,13,13,14,14,4,6,8,9,10,10,11,11,11,11,12,12,13,14,14,14,7,8,9,10,11,11,12,12,11,12,12,13,13,14,15,15,8,9,10,11,11,12,12,12,12,13,13,13,13,14,15,15,9,9,11,11,12,12,13,13,12,13,13,14,14,15,15,16,10,10,11,12,12,12,13,13,13,13,14,13,15,15,16,16,10,11,12,12,13,13,13,13,13,14,14,14,15,15,16,16,11,11,12,13,13,13,14,14,14,14,15,15,15,16,18,18,10,10,11,12,12,13,13,14,14,14,14,15,15,16,17,17,11,11,12,12,13,13,13,15,14,15,15,16,16,16,18,17,11,12,12,13,13,14,14,15,14,15,16,15,16,17,18,19,12,12,12,13,14,14,14,14,15,15,15,16,17,17,17,18,12,13,13,14,14,15,14,15,16,16,17,17,17,18,18,18,13,13,14,15,15,15,16,16,16,16,16,17,18,17,18,18,14,14,14,15,15,15,17,16,16,19,17,17,17,19,18,18,13,14,15,16,16,16,17,16,17,17,18,18,21,20,21,18];ne.t15l=[3,5,6,8,8,9,10,10,10,11,11,12,12,12,13,14,5,5,7,8,9,9,10,10,10,11,11,12,12,12,13,13,6,7,7,8,9,9,10,10,10,11,11,12,12,13,13,13,7,8,8,9,9,10,10,11,11,11,12,12,12,13,13,13,8,8,9,9,10,10,11,11,11,11,12,12,12,13,13,13,9,9,9,10,10,10,11,11,11,11,12,12,13,13,13,14,10,9,10,10,10,11,11,11,11,12,12,12,13,13,14,14,10,10,10,11,11,11,11,12,12,12,12,12,13,13,13,14,10,10,10,11,11,11,11,12,12,12,12,13,13,14,14,14,10,10,11,11,11,11,12,12,12,13,13,13,13,14,14,14,11,11,11,11,12,12,12,12,12,13,13,13,13,14,15,14,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,15,12,12,11,12,12,12,13,13,13,13,13,13,14,14,15,15,12,12,12,12,12,13,13,13,13,14,14,14,14,14,15,15,13,13,13,13,13,13,13,13,14,14,14,14,15,15,14,15,13,13,13,13,13,13,13,14,14,14,14,14,15,15,15,15];ne.t16_5l=[1,5,7,9,10,10,11,11,12,12,12,13,13,13,14,11,4,6,8,9,10,11,11,11,12,12,12,13,14,13,14,11,7,8,9,10,11,11,12,12,13,12,13,13,13,14,14,12,9,9,10,11,11,12,12,12,13,13,14,14,14,15,15,13,10,10,11,11,12,12,13,13,13,14,14,14,15,15,15,12,10,10,11,11,12,13,13,14,13,14,14,15,15,15,16,13,11,11,11,12,13,13,13,13,14,14,14,14,15,15,16,13,11,11,12,12,13,13,13,14,14,15,15,15,15,17,17,13,11,12,12,13,13,13,14,14,15,15,15,15,16,16,16,13,12,12,12,13,13,14,14,15,15,15,15,16,15,16,15,14,12,13,12,13,14,14,14,14,15,16,16,16,17,17,16,13,13,13,13,13,14,14,15,16,16,16,16,16,16,15,16,14,13,14,14,14,14,15,15,15,15,17,16,16,16,16,18,14,15,14,14,14,15,15,16,16,16,18,17,17,17,19,17,14,14,15,13,14,16,16,15,16,16,17,18,17,19,17,16,14,11,11,11,12,12,13,13,13,14,14,14,14,14,14,14,12];ne.t16l=[1,5,7,9,10,10,11,11,12,12,12,13,13,13,14,10,4,6,8,9,10,11,11,11,12,12,12,13,14,13,14,10,7,8,9,10,11,11,12,12,13,12,13,13,13,14,14,11,9,9,10,11,11,12,12,12,13,13,14,14,14,15,15,12,10,10,11,11,12,12,13,13,13,14,14,14,15,15,15,11,10,10,11,11,12,13,13,14,13,14,14,15,15,15,16,12,11,11,11,12,13,13,13,13,14,14,14,14,15,15,16,12,11,11,12,12,13,13,13,14,14,15,15,15,15,17,17,12,11,12,12,13,13,13,14,14,15,15,15,15,16,16,16,12,12,12,12,13,13,14,14,15,15,15,15,16,15,16,15,13,12,13,12,13,14,14,14,14,15,16,16,16,17,17,16,12,13,13,13,13,14,14,15,16,16,16,16,16,16,15,16,13,13,14,14,14,14,15,15,15,15,17,16,16,16,16,18,13,15,14,14,14,15,15,16,16,16,18,17,17,17,19,17,13,14,15,13,14,16,16,15,16,16,17,18,17,19,17,16,13,10,10,10,11,11,12,12,12,13,13,13,13,13,13,13,10];ne.t24l=[4,5,7,8,9,10,10,11,11,12,12,12,12,12,13,10,5,6,7,8,9,10,10,11,11,11,12,12,12,12,12,10,7,7,8,9,9,10,10,11,11,11,11,12,12,12,13,9,8,8,9,9,10,10,10,11,11,11,11,12,12,12,12,9,9,9,9,10,10,10,10,11,11,11,12,12,12,12,13,9,10,9,10,10,10,10,11,11,11,11,12,12,12,12,12,9,10,10,10,10,10,11,11,11,11,12,12,12,12,12,13,9,11,10,10,10,11,11,11,11,12,12,12,12,12,13,13,10,11,11,11,11,11,11,11,11,11,12,12,12,12,13,13,10,11,11,11,11,11,11,11,12,12,12,12,12,13,13,13,10,12,11,11,11,11,12,12,12,12,12,12,13,13,13,13,10,12,12,11,11,11,12,12,12,12,12,12,13,13,13,13,10,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,10,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,10,13,12,12,12,12,12,12,13,13,13,13,13,13,13,13,10,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,6];ne.t32l=[1,5,5,7,5,8,7,9,5,7,7,9,7,9,9,10];ne.t33l=[4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8];ne.ht=[new xe(0,0,null,null),new xe(2,0,ne.t1HB,ne.t1l),new xe(3,0,ne.t2HB,ne.t2l),new xe(3,0,ne.t3HB,ne.t3l),new xe(0,0,null,null),new xe(4,0,ne.t5HB,ne.t5l),new xe(4,0,ne.t6HB,ne.t6l),new xe(6,0,ne.t7HB,ne.t7l),new xe(6,0,ne.t8HB,ne.t8l),new xe(6,0,ne.t9HB,ne.t9l),new xe(8,0,ne.t10HB,ne.t10l),new xe(8,0,ne.t11HB,ne.t11l),new xe(8,0,ne.t12HB,ne.t12l),new xe(16,0,ne.t13HB,ne.t13l),new xe(0,0,null,ne.t16_5l),new xe(16,0,ne.t15HB,ne.t15l),new xe(1,1,ne.t16HB,ne.t16l),new xe(2,3,ne.t16HB,ne.t16l),new xe(3,7,ne.t16HB,ne.t16l),new xe(4,15,ne.t16HB,ne.t16l),new xe(6,63,ne.t16HB,ne.t16l),new xe(8,255,ne.t16HB,ne.t16l),new xe(10,1023,ne.t16HB,ne.t16l),new xe(13,8191,ne.t16HB,ne.t16l),new xe(4,15,ne.t24HB,ne.t24l),new xe(5,31,ne.t24HB,ne.t24l),new xe(6,63,ne.t24HB,ne.t24l),new xe(7,127,ne.t24HB,ne.t24l),new xe(8,255,ne.t24HB,ne.t24l),new xe(9,511,ne.t24HB,ne.t24l),new xe(11,2047,ne.t24HB,ne.t24l),new xe(13,8191,ne.t24HB,ne.t24l),new xe(0,0,ne.t32HB,ne.t32l),new xe(0,0,ne.t33HB,ne.t33l)];ne.largetbl=[65540,327685,458759,589832,655369,655370,720906,720907,786443,786444,786444,851980,851980,851980,917517,655370,262149,393222,524295,589832,655369,720906,720906,720907,786443,786443,786444,851980,917516,851980,917516,655370,458759,524295,589832,655369,720905,720906,786442,786443,851979,786443,851979,851980,851980,917516,917517,720905,589832,589832,655369,720905,720906,786442,786442,786443,851979,851979,917515,917516,917516,983052,983052,786441,655369,655369,720905,720906,786442,786442,851978,851979,851979,917515,917516,917516,983052,983052,983053,720905,655370,655369,720906,720906,786442,851978,851979,917515,851979,917515,917516,983052,983052,983052,1048588,786441,720906,720906,720906,786442,851978,851979,851979,851979,917515,917516,917516,917516,983052,983052,1048589,786441,720907,720906,786442,786442,851979,851979,851979,917515,917516,983052,983052,983052,983052,1114125,1114125,786442,720907,786443,786443,851979,851979,851979,917515,917515,983051,983052,983052,983052,1048588,1048589,1048589,786442,786443,786443,786443,851979,851979,917515,917515,983052,983052,983052,983052,1048588,983053,1048589,983053,851978,786444,851979,786443,851979,917515,917516,917516,917516,983052,1048588,1048588,1048589,1114125,1114125,1048589,786442,851980,851980,851979,851979,917515,917516,983052,1048588,1048588,1048588,1048588,1048589,1048589,983053,1048589,851978,851980,917516,917516,917516,917516,983052,983052,983052,983052,1114124,1048589,1048589,1048589,1048589,1179661,851978,983052,917516,917516,917516,983052,983052,1048588,1048588,1048589,1179661,1114125,1114125,1114125,1245197,1114125,851978,917517,983052,851980,917516,1048588,1048588,983052,1048589,1048589,1114125,1179661,1114125,1245197,1114125,1048589,851978,655369,655369,655369,720905,720905,786441,786441,786441,851977,851977,851977,851978,851978,851978,851978,655366];ne.table23=[65538,262147,458759,262148,327684,458759,393222,458759,524296];ne.table56=[65539,262148,458758,524296,262148,327684,524294,589831,458757,524294,589831,655368,524295,524295,589832,655369];ne.bitrate_table=[[0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1],[0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1],[0,8,16,24,32,40,48,56,64,-1,-1,-1,-1,-1,-1,-1]];ne.samplerate_table=[[22050,24e3,16e3,-1],[44100,48e3,32e3,-1],[11025,12e3,8e3,-1]];ne.scfsi_band=[0,6,11,16,21];var $i=ne,e0=ln,Rt=it;Rt.System;var Z0=Rt.VbrMode,ai=Rt.Float;Rt.ShortBlock;var Ki=Rt.Util;Rt.Arrays;Rt.new_array_n;Rt.new_byte;Rt.new_double;var X0=Rt.new_float;Rt.new_float_n;var gr=Rt.new_int;Rt.new_int_n;var t0=Rt.assert,et=bt(),Fr=on,lt=yi;wt.Q_MAX=257;wt.Q_MAX2=116;wt.LARGE_BITS=1e5;wt.IXMAX_VAL=8206;function wt(){var t=null,e=null,i=null;this.setModules=function(I,r,K){t=I,e=r,i=K};function n(I){return t0(0<=I+wt.Q_MAX2&&I<wt.Q_MAX),Z[I+wt.Q_MAX2]}this.IPOW20=function(I){return t0(0<=I&&I<wt.Q_MAX),O[I]};var d=2220446049250313e-31,o=wt.IXMAX_VAL,m=o+2,h=wt.Q_MAX,S=wt.Q_MAX2;wt.LARGE_BITS;var W=100;this.nr_of_sfb_block=[[[6,5,5,5],[9,9,9,9],[6,9,9,9]],[[6,5,7,3],[9,9,12,6],[6,9,12,6]],[[11,10,0,0],[18,18,0,0],[15,18,0,0]],[[7,7,7,0],[12,12,12,0],[6,15,12,0]],[[6,6,6,3],[12,9,9,6],[6,12,9,6]],[[8,8,5,0],[15,12,9,0],[6,18,9,0]]];var v=[0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0];this.pretab=v,this.sfBandIndex=[new e0([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,24,32,42,56,74,100,132,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,332,394,464,540,576],[0,4,8,12,18,26,36,48,62,80,104,136,180,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,26,36,48,62,80,104,134,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576],[0,4,8,12,16,22,30,40,52,66,84,106,136,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576],[0,4,8,12,16,22,28,38,50,64,80,100,126,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576],[0,4,8,12,16,22,30,42,58,78,104,138,180,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0/3,12/3,24/3,36/3,54/3,78/3,108/3,144/3,186/3,240/3,312/3,402/3,522/3,576/3],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0/3,12/3,24/3,36/3,54/3,78/3,108/3,144/3,186/3,240/3,312/3,402/3,522/3,576/3],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576],[0/3,24/3,48/3,72/3,108/3,156/3,216/3,288/3,372/3,480/3,486/3,492/3,498/3,576/3],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0])];var Z=X0(h+S+1),O=X0(h),w=X0(m),N=X0(m);this.adj43=N;function J(I,r){var K=i.ATHformula(r,I);return K-=W,K=Math.pow(10,K/10+I.ATHlower),K}function U(I){for(var r=I.internal_flags.ATH.l,K=I.internal_flags.ATH.psfb21,X=I.internal_flags.ATH.s,A=I.internal_flags.ATH.psfb12,T=I.internal_flags,H=I.out_samplerate,p=0;p<et.SBMAX_l;p++){var u=T.scalefac_band.l[p],l=T.scalefac_band.l[p+1];r[p]=ai.MAX_VALUE;for(var s=u;s<l;s++){var V=s*H/1152,_=J(I,V);r[p]=Math.min(r[p],_)}}for(var p=0;p<et.PSFB21;p++){var u=T.scalefac_band.psfb21[p],l=T.scalefac_band.psfb21[p+1];K[p]=ai.MAX_VALUE;for(var s=u;s<l;s++){var V=s*H/1152,_=J(I,V);K[p]=Math.min(K[p],_)}}for(var p=0;p<et.SBMAX_s;p++){var u=T.scalefac_band.s[p],l=T.scalefac_band.s[p+1];X[p]=ai.MAX_VALUE;for(var s=u;s<l;s++){var V=s*H/384,_=J(I,V);X[p]=Math.min(X[p],_)}X[p]*=T.scalefac_band.s[p+1]-T.scalefac_band.s[p]}for(var p=0;p<et.PSFB12;p++){var u=T.scalefac_band.psfb12[p],l=T.scalefac_band.psfb12[p+1];A[p]=ai.MAX_VALUE;for(var s=u;s<l;s++){var V=s*H/384,_=J(I,V);A[p]=Math.min(A[p],_)}A[p]*=T.scalefac_band.s[13]-T.scalefac_band.s[12]}if(I.noATH){for(var p=0;p<et.SBMAX_l;p++)r[p]=1e-20;for(var p=0;p<et.PSFB21;p++)K[p]=1e-20;for(var p=0;p<et.SBMAX_s;p++)X[p]=1e-20;for(var p=0;p<et.PSFB12;p++)A[p]=1e-20}T.ATH.floor=10*Math.log10(J(I,-1))}this.iteration_init=function(I){var r=I.internal_flags,K=r.l3_side,X;if(r.iteration_init_init==0){for(r.iteration_init_init=1,K.main_data_begin=0,U(I),w[0]=0,X=1;X<m;X++)w[X]=Math.pow(X,4/3);for(X=0;X<m-1;X++)N[X]=X+1-Math.pow(.5*(w[X]+w[X+1]),.75);for(N[X]=.5,X=0;X<h;X++)O[X]=Math.pow(2,(X-210)*-.1875);for(X=0;X<=h+S;X++)Z[X]=Math.pow(2,(X-210-S)*.25);t.huffman_init(r);{var A,T,H,p;for(X=I.exp_nspsytune>>2&63,X>=32&&(X-=64),A=Math.pow(10,X/4/10),X=I.exp_nspsytune>>8&63,X>=32&&(X-=64),T=Math.pow(10,X/4/10),X=I.exp_nspsytune>>14&63,X>=32&&(X-=64),H=Math.pow(10,X/4/10),X=I.exp_nspsytune>>20&63,X>=32&&(X-=64),p=H*Math.pow(10,X/4/10),X=0;X<et.SBMAX_l;X++){var u;X<=6?u=A:X<=13?u=T:X<=20?u=H:u=p,r.nsPsy.longfact[X]=u}for(X=0;X<et.SBMAX_s;X++){var u;X<=5?u=A:X<=10?u=T:X<=11?u=H:u=p,r.nsPsy.shortfact[X]=u}}}},this.on_pe=function(I,r,K,X,A,T){var H=I.internal_flags,p=0,u,l=gr(2),s,V=new Fr(p),_=e.ResvMaxBits(I,X,V,T);p=V.bits;var R=p+_;for(R>lt.MAX_BITS_PER_GRANULE&&(R=lt.MAX_BITS_PER_GRANULE),u=0,s=0;s<H.channels_out;++s)K[s]=Math.min(lt.MAX_BITS_PER_CHANNEL,p/H.channels_out),l[s]=0|K[s]*r[A][s]/700-K[s],l[s]>X*3/4&&(l[s]=X*3/4),l[s]<0&&(l[s]=0),l[s]+K[s]>lt.MAX_BITS_PER_CHANNEL&&(l[s]=Math.max(0,lt.MAX_BITS_PER_CHANNEL-K[s])),u+=l[s];if(u>_)for(s=0;s<H.channels_out;++s)l[s]=_*l[s]/u;for(s=0;s<H.channels_out;++s)K[s]+=l[s],_-=l[s];for(u=0,s=0;s<H.channels_out;++s)u+=K[s];if(u>lt.MAX_BITS_PER_GRANULE){var f=0;for(s=0;s<H.channels_out;++s)K[s]*=lt.MAX_BITS_PER_GRANULE,K[s]/=u,f+=K[s];t0(f<=lt.MAX_BITS_PER_GRANULE)}return R},this.reduce_side=function(I,r,K,X){t0(X<=lt.MAX_BITS_PER_GRANULE),t0(I[0]+I[1]<=lt.MAX_BITS_PER_GRANULE);var A=.33*(.5-r)/.5;A<0&&(A=0),A>.5&&(A=.5);var T=0|A*.5*(I[0]+I[1]);T>lt.MAX_BITS_PER_CHANNEL-I[0]&&(T=lt.MAX_BITS_PER_CHANNEL-I[0]),T<0&&(T=0),I[1]>=125&&(I[1]-T>125?(I[0]<K&&(I[0]+=T),I[1]-=T):(I[0]+=I[1]-125,I[1]=125)),T=I[0]+I[1],T>X&&(I[0]=X*I[0]/T,I[1]=X*I[1]/T),t0(I[0]<=lt.MAX_BITS_PER_CHANNEL),t0(I[1]<=lt.MAX_BITS_PER_CHANNEL),t0(I[0]+I[1]<=lt.MAX_BITS_PER_GRANULE)},this.athAdjust=function(I,r,K){var X=90.30873362,A=94.82444863,T=Ki.FAST_LOG10_X(r,10),H=I*I,p=0;return T-=K,H>1e-20&&(p=1+Ki.FAST_LOG10_X(H,10/X)),p<0&&(p=0),T*=p,T+=K+X-A,Math.pow(10,.1*T)},this.calc_xmin=function(I,r,K,X){var A=0,T=I.internal_flags,H,p=0,u=0,l=T.ATH,s=K.xr,V=I.VBR==Z0.vbr_mtrh?1:0,_=T.masking_lower;for((I.VBR==Z0.vbr_mtrh||I.VBR==Z0.vbr_mt)&&(_=1),H=0;H<K.psy_lmax;H++){var R,f,j,g,P,a;I.VBR==Z0.vbr_rh||I.VBR==Z0.vbr_mtrh?f=athAdjust(l.adjust,l.l[H],l.floor):f=l.adjust*l.l[H],P=K.width[H],j=f/P,g=d,a=P>>1,R=0;do{var c,M;c=s[p]*s[p],R+=c,g+=c<j?c:j,p++,M=s[p]*s[p],R+=M,g+=M<j?M:j,p++}while(--a>0);if(R>f&&u++,H==et.SBPSY_l){var L=f*T.nsPsy.longfact[H];g<L&&(g=L)}if(V!=0&&(f=g),!I.ATHonly){var ee=r.en.l[H];if(ee>0){var L;L=R*r.thm.l[H]*_/ee,V!=0&&(L*=T.nsPsy.longfact[H]),f<L&&(f=L)}}V!=0?X[A++]=f:X[A++]=f*T.nsPsy.longfact[H]}var ae=575;if(K.block_type!=et.SHORT_TYPE)for(var le=576;le--!=0&&BitStream.EQ(s[le],0);)ae=le;K.max_nonzero_coeff=ae;for(var re=K.sfb_smin;H<K.psymax;re++,H+=3){var P,_e,he;for(I.VBR==Z0.vbr_rh||I.VBR==Z0.vbr_mtrh?he=athAdjust(l.adjust,l.s[re],l.floor):he=l.adjust*l.s[re],P=K.width[H],_e=0;_e<3;_e++){var R=0,f,j,g,a=P>>1;j=he/P,g=d;do{var c,M;c=s[p]*s[p],R+=c,g+=c<j?c:j,p++,M=s[p]*s[p],R+=M,g+=M<j?M:j,p++}while(--a>0);if(R>he&&u++,re==et.SBPSY_s){var L=he*T.nsPsy.shortfact[re];g<L&&(g=L)}if(V!=0?f=g:f=he,!I.ATHonly&&!I.ATHshort){var ee=r.en.s[re][_e];if(ee>0){var L;L=R*r.thm.s[re][_e]*_/ee,V!=0&&(L*=T.nsPsy.shortfact[re]),f<L&&(f=L)}}V!=0?X[A++]=f:X[A++]=f*T.nsPsy.shortfact[re]}I.useTemporal&&(X[A-3]>X[A-3+1]&&(X[A-3+1]+=(X[A-3]-X[A-3+1])*T.decay),X[A-3+1]>X[A-3+2]&&(X[A-3+2]+=(X[A-3+1]-X[A-3+2])*T.decay))}return u};function k(I){this.s=I}this.calc_noise_core=function(I,r,K,X){var A=0,T=r.s,H=I.l3_enc;if(T>I.count1)for(;K--!=0;){var p;p=I.xr[T],T++,A+=p*p,p=I.xr[T],T++,A+=p*p}else if(T>I.big_values){var u=X0(2);for(u[0]=0,u[1]=X;K--!=0;){var p;p=Math.abs(I.xr[T])-u[H[T]],T++,A+=p*p,p=Math.abs(I.xr[T])-u[H[T]],T++,A+=p*p}}else for(;K--!=0;){var p;p=Math.abs(I.xr[T])-w[H[T]]*X,T++,A+=p*p,p=Math.abs(I.xr[T])-w[H[T]]*X,T++,A+=p*p}return r.s=T,A},this.calc_noise=function(I,r,K,X,A){var T=0,H=0,p,u,l=0,s=0,V=0,_=-20,R=0,f=I.scalefac,j=0;for(X.over_SSD=0,p=0;p<I.psymax;p++){var g=I.global_gain-(f[j++]+(I.preflag!=0?v[p]:0)<<I.scalefac_scale+1)-I.subblock_gain[I.window[p]]*8,P=0;if(A!=null&&A.step[p]==g)P=A.noise[p],R+=I.width[p],K[T++]=P/r[H++],P=A.noise_log[p];else{var a=n(g);if(u=I.width[p]>>1,R+I.width[p]>I.max_nonzero_coeff){var c;c=I.max_nonzero_coeff-R+1,c>0?u=c>>1:u=0}var M=new k(R);P=this.calc_noise_core(I,M,u,a),R=M.s,A!=null&&(A.step[p]=g,A.noise[p]=P),P=K[T++]=P/r[H++],P=Ki.FAST_LOG10(Math.max(P,1e-20)),A!=null&&(A.noise_log[p]=P)}if(A!=null&&(A.global_gain=I.global_gain),V+=P,P>0){var L;L=Math.max(0|P*10+.5,1),X.over_SSD+=L*L,l++,s+=P}_=Math.max(_,P)}return X.over_count=l,X.tot_noise=V,X.over_noise=s,X.max_noise=_,l},this.set_pinfo=function(I,r,K,X,A){var T=I.internal_flags,H,p,u,l,s,V=r.scalefac_scale==0?.5:1,_=r.scalefac,R=X0(L3Side.SFBMAX),f=X0(L3Side.SFBMAX),j=new CalcNoiseResult;calc_xmin(I,K,r,R),calc_noise(r,R,f,j,null);var g=0;for(p=r.sfb_lmax,r.block_type!=et.SHORT_TYPE&&r.mixed_block_flag==0&&(p=22),H=0;H<p;H++){var P=T.scalefac_band.l[H],a=T.scalefac_band.l[H+1],c=a-P;for(l=0;g<a;g++)l+=r.xr[g]*r.xr[g];l/=c,s=1e15,T.pinfo.en[X][A][H]=s*l,T.pinfo.xfsf[X][A][H]=s*R[H]*f[H]/c,K.en.l[H]>0&&!I.ATHonly?l=l/K.en.l[H]:l=0,T.pinfo.thr[X][A][H]=s*Math.max(l*K.thm.l[H],T.ATH.l[H]),T.pinfo.LAMEsfb[X][A][H]=0,r.preflag!=0&&H>=11&&(T.pinfo.LAMEsfb[X][A][H]=-V*v[H]),H<et.SBPSY_l&&(t0(_[H]>=0),T.pinfo.LAMEsfb[X][A][H]-=V*_[H])}if(r.block_type==et.SHORT_TYPE)for(p=H,H=r.sfb_smin;H<et.SBMAX_s;H++)for(var P=T.scalefac_band.s[H],a=T.scalefac_band.s[H+1],c=a-P,M=0;M<3;M++){for(l=0,u=P;u<a;u++)l+=r.xr[g]*r.xr[g],g++;l=Math.max(l/c,1e-20),s=1e15,T.pinfo.en_s[X][A][3*H+M]=s*l,T.pinfo.xfsf_s[X][A][3*H+M]=s*R[p]*f[p]/c,K.en.s[H][M]>0?l=l/K.en.s[H][M]:l=0,(I.ATHonly||I.ATHshort)&&(l=0),T.pinfo.thr_s[X][A][3*H+M]=s*Math.max(l*K.thm.s[H][M],T.ATH.s[H]),T.pinfo.LAMEsfb_s[X][A][3*H+M]=-2*r.subblock_gain[M],H<et.SBPSY_s&&(T.pinfo.LAMEsfb_s[X][A][3*H+M]-=V*_[p]),p++}T.pinfo.LAMEqss[X][A]=r.global_gain,T.pinfo.LAMEmainbits[X][A]=r.part2_3_length+r.part2_length,T.pinfo.LAMEsfbits[X][A]=r.part2_length,T.pinfo.over[X][A]=j.over_count,T.pinfo.max_noise[X][A]=j.max_noise*10,T.pinfo.over_noise[X][A]=j.over_noise*10,T.pinfo.tot_noise[X][A]=j.tot_noise*10,T.pinfo.over_SSD[X][A]=j.over_SSD}}var Jr=wt,Tt=it,Er=Tt.System;Tt.VbrMode;Tt.Float;Tt.ShortBlock;Tt.Util;var Nr=Tt.Arrays;Tt.new_array_n;Tt.new_byte;Tt.new_double;Tt.new_float;Tt.new_float_n;var N0=Tt.new_int;Tt.new_int_n;var Ct=Tt.assert,Je=bt(),Ee=$i,Pr=an,_0=Jr;function Oi(){var t=null;this.qupvt=null,this.setModules=function(u){this.qupvt=u,t=u};function e(u){this.bits=0|u}var i=[[0,0],[0,0],[0,0],[0,0],[0,0],[0,1],[1,1],[1,1],[1,2],[2,2],[2,3],[2,3],[3,4],[3,4],[3,4],[4,5],[4,5],[4,6],[5,6],[5,6],[5,7],[6,7],[6,7]];function n(u,l,s,V,_,R){var f=.5946/l;for(Ct(u>0),u=u>>1;u--!=0;)_[R++]=f>s[V++]?0:1,_[R++]=f>s[V++]?0:1}function d(u,l,s,V,_,R){Ct(u>0),u=u>>1;var f=u%2;for(u=u>>1;u--!=0;){var j,g,P,a,c,M,L,ee;j=s[V++]*l,g=s[V++]*l,c=0|j,P=s[V++]*l,M=0|g,a=s[V++]*l,L=0|P,j+=t.adj43[c],ee=0|a,g+=t.adj43[M],_[R++]=0|j,P+=t.adj43[L],_[R++]=0|g,a+=t.adj43[ee],_[R++]=0|P,_[R++]=0|a}if(f!=0){var j,g,c,M;j=s[V++]*l,g=s[V++]*l,c=0|j,M=0|g,j+=t.adj43[c],g+=t.adj43[M],_[R++]=0|j,_[R++]=0|g}}function o(u,l,s,V,_){var R,f,j=0,g,P=0,a=0,c=0,M=l,L=0,ee=M,ae=0,le=u,re=0;for(g=_!=null&&V.global_gain==_.global_gain,V.block_type==Je.SHORT_TYPE?f=38:f=21,R=0;R<=f;R++){var _e=-1;if((g||V.block_type==Je.NORM_TYPE)&&(_e=V.global_gain-(V.scalefac[R]+(V.preflag!=0?t.pretab[R]:0)<<V.scalefac_scale+1)-V.subblock_gain[V.window[R]]*8),Ct(V.width[R]>=0),g&&_.step[R]==_e)P!=0&&(d(P,s,le,re,ee,ae),P=0),a!=0&&(n(a,s,le,re,ee,ae),a=0);else{var he=V.width[R];if(j+V.width[R]>V.max_nonzero_coeff){var oe;oe=V.max_nonzero_coeff-j+1,Nr.fill(l,V.max_nonzero_coeff,576,0),he=oe,he<0&&(he=0),R=f+1}if(P==0&&a==0&&(ee=M,ae=L,le=u,re=c),_!=null&&_.sfb_count1>0&&R>=_.sfb_count1&&_.step[R]>0&&_e>=_.step[R]?(P!=0&&(d(P,s,le,re,ee,ae),P=0,ee=M,ae=L,le=u,re=c),a+=he):(a!=0&&(n(a,s,le,re,ee,ae),a=0,ee=M,ae=L,le=u,re=c),P+=he),he<=0){a!=0&&(n(a,s,le,re,ee,ae),a=0),P!=0&&(d(P,s,le,re,ee,ae),P=0);break}}R<=f&&(L+=V.width[R],c+=V.width[R],j+=V.width[R])}P!=0&&(d(P,s,le,re,ee,ae),P=0),a!=0&&(n(a,s,le,re,ee,ae),a=0)}function m(u,l,s){var V=0,_=0;do{var R=u[l++],f=u[l++];V<R&&(V=R),_<f&&(_=f)}while(l<s);return V<_&&(V=_),V}function h(u,l,s,V,_,R){var f=Ee.ht[V].xlen*65536+Ee.ht[_].xlen,j=0,g;do{var P=u[l++],a=u[l++];P!=0&&(P>14&&(P=15,j+=f),P*=16),a!=0&&(a>14&&(a=15,j+=f),P+=a),j+=Ee.largetbl[P]}while(l<s);return g=j&65535,j>>=16,j>g&&(j=g,V=_),R.bits+=j,V}function S(u,l,s,V){var _=0,R=Ee.ht[1].hlen;do{var f=u[l+0]*2+u[l+1];l+=2,_+=R[f]}while(l<s);return V.bits+=_,1}function W(u,l,s,V,_){var R=0,f,j=Ee.ht[V].xlen,g;V==2?g=Ee.table23:g=Ee.table56;do{var P=u[l+0]*j+u[l+1];l+=2,R+=g[P]}while(l<s);return f=R&65535,R>>=16,R>f&&(R=f,V++),_.bits+=R,V}function v(u,l,s,V,_){var R=0,f=0,j=0,g=Ee.ht[V].xlen,P=Ee.ht[V].hlen,a=Ee.ht[V+1].hlen,c=Ee.ht[V+2].hlen;do{var M=u[l+0]*g+u[l+1];l+=2,R+=P[M],f+=a[M],j+=c[M]}while(l<s);var L=V;return R>f&&(R=f,L++),R>j&&(R=j,L=V+2),_.bits+=R,L}var Z=[1,2,5,7,7,10,10,13,13,13,13,13,13,13,13];function O(u,l,s,V){var _=m(u,l,s);switch(_){case 0:return _;case 1:return S(u,l,s,V);case 2:case 3:return W(u,l,s,Z[_-1],V);case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:return v(u,l,s,Z[_-1],V);default:if(_>_0.IXMAX_VAL)return V.bits=_0.LARGE_BITS,-1;_-=15;var R;for(R=24;R<32&&!(Ee.ht[R].linmax>=_);R++);var f;for(f=R-8;f<24&&!(Ee.ht[f].linmax>=_);f++);return h(u,l,s,f,R,V)}}this.noquant_count_bits=function(u,l,s){var V=l.l3_enc,_=Math.min(576,l.max_nonzero_coeff+2>>1<<1);for(s!=null&&(s.sfb_count1=0);_>1&&!(V[_-1]|V[_-2]);_-=2);l.count1=_;for(var R=0,f=0;_>3;_-=4){var j;if(((V[_-1]|V[_-2]|V[_-3]|V[_-4])&2147483647)>1)break;j=((V[_-4]*2+V[_-3])*2+V[_-2])*2+V[_-1],R+=Ee.t32l[j],f+=Ee.t33l[j]}var g=R;if(l.count1table_select=0,R>f&&(g=f,l.count1table_select=1),l.count1bits=g,l.big_values=_,_==0)return g;if(l.block_type==Je.SHORT_TYPE)R=3*u.scalefac_band.s[3],R>l.big_values&&(R=l.big_values),f=l.big_values;else if(l.block_type==Je.NORM_TYPE){if(Ct(_<=576),R=l.region0_count=u.bv_scf[_-2],f=l.region1_count=u.bv_scf[_-1],Ct(R+f+2<Je.SBPSY_l),f=u.scalefac_band.l[R+f+2],R=u.scalefac_band.l[R+1],f<_){var P=new e(g);l.table_select[2]=O(V,f,_,P),g=P.bits}}else l.region0_count=7,l.region1_count=Je.SBMAX_l-1-7-1,R=u.scalefac_band.l[8],f=_,R>f&&(R=f);if(R=Math.min(R,_),f=Math.min(f,_),Ct(R>=0),Ct(f>=0),0<R){var P=new e(g);l.table_select[0]=O(V,0,R,P),g=P.bits}if(R<f){var P=new e(g);l.table_select[1]=O(V,R,f,P),g=P.bits}if(u.use_best_huffman==2&&(l.part2_3_length=g,best_huffman_divide(u,l),g=l.part2_3_length),s!=null&&l.block_type==Je.NORM_TYPE){for(var a=0;u.scalefac_band.l[a]<l.big_values;)a++;s.sfb_count1=a}return g},this.count_bits=function(u,l,s,V){var _=s.l3_enc,R=_0.IXMAX_VAL/t.IPOW20(s.global_gain);if(s.xrpow_max>R)return _0.LARGE_BITS;if(o(l,_,t.IPOW20(s.global_gain),s,V),u.substep_shaping&2)for(var f=0,j=s.global_gain+s.scalefac_scale,g=.634521682242439/t.IPOW20(j),P=0;P<s.sfbmax;P++){var a=s.width[P];if(Ct(a>=0),u.pseudohalf[P]==0)f+=a;else{var c;for(c=f,f+=a;c<f;++c)_[c]=l[c]>=g?_[c]:0}}return this.noquant_count_bits(u,s,V)};function w(u,l,s,V,_,R,f){for(var j=l.big_values,g=0;g<=22;g++)V[g]=_0.LARGE_BITS;for(var g=0;g<16;g++){var P=u.scalefac_band.l[g+1];if(P>=j)break;var a=0,c=new e(a),M=O(s,0,P,c);a=c.bits;for(var L=0;L<8;L++){var ee=u.scalefac_band.l[g+L+2];if(ee>=j)break;var ae=a;c=new e(ae);var le=O(s,P,ee,c);ae=c.bits,V[g+L]>ae&&(V[g+L]=ae,_[g+L]=g,R[g+L]=M,f[g+L]=le)}}}function N(u,l,s,V,_,R,f,j){for(var g=l.big_values,P=2;P<Je.SBMAX_l+1;P++){var a=u.scalefac_band.l[P];if(a>=g)break;var c=_[P-2]+l.count1bits;if(s.part2_3_length<=c)break;var M=new e(c),L=O(V,a,g,M);c=M.bits,!(s.part2_3_length<=c)&&(s.assign(l),s.part2_3_length=c,s.region0_count=R[P-2],s.region1_count=P-2-R[P-2],s.table_select[0]=f[P-2],s.table_select[1]=j[P-2],s.table_select[2]=L)}}this.best_huffman_divide=function(u,l){var s=new Pr,V=l.l3_enc,_=N0(23),R=N0(23),f=N0(23),j=N0(23);if(!(l.block_type==Je.SHORT_TYPE&&u.mode_gr==1)){s.assign(l),l.block_type==Je.NORM_TYPE&&(w(u,l,V,_,R,f,j),N(u,s,l,V,_,R,f,j));var g=s.big_values;if(!(g==0||(V[g-2]|V[g-1])>1)&&(g=l.count1+2,!(g>576))){s.assign(l),s.count1=g;var P=0,a=0;for(Ct(g<=576);g>s.big_values;g-=4){var c=((V[g-4]*2+V[g-3])*2+V[g-2])*2+V[g-1];P+=Ee.t32l[c],a+=Ee.t33l[c]}if(s.big_values=g,s.count1table_select=0,P>a&&(P=a,s.count1table_select=1),s.count1bits=P,s.block_type==Je.NORM_TYPE)N(u,s,l,V,_,R,f,j);else{if(s.part2_3_length=P,P=u.scalefac_band.l[8],P>g&&(P=g),P>0){var M=new e(s.part2_3_length);s.table_select[0]=O(V,0,P,M),s.part2_3_length=M.bits}if(g>P){var M=new e(s.part2_3_length);s.table_select[1]=O(V,P,g,M),s.part2_3_length=M.bits}l.part2_3_length>s.part2_3_length&&l.assign(s)}}}};var J=[1,1,1,1,8,2,2,2,4,4,4,8,8,8,16,16],U=[1,2,4,8,1,2,4,8,2,4,8,2,4,8,4,8],k=[0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4],I=[0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3];Oi.slen1_tab=k,Oi.slen2_tab=I;function r(u,l){for(var s,V=l.tt[1][u],_=l.tt[0][u],R=0;R<Ee.scfsi_band.length-1;R++){for(s=Ee.scfsi_band[R];s<Ee.scfsi_band[R+1]&&!(_.scalefac[s]!=V.scalefac[s]&&V.scalefac[s]>=0);s++);if(s==Ee.scfsi_band[R+1]){for(s=Ee.scfsi_band[R];s<Ee.scfsi_band[R+1];s++)V.scalefac[s]=-1;l.scfsi[u][R]=1}}var f=0,j=0;for(s=0;s<11;s++)V.scalefac[s]!=-1&&(j++,f<V.scalefac[s]&&(f=V.scalefac[s]));for(var g=0,P=0;s<Je.SBPSY_l;s++)V.scalefac[s]!=-1&&(P++,g<V.scalefac[s]&&(g=V.scalefac[s]));for(var R=0;R<16;R++)if(f<J[R]&&g<U[R]){var a=k[R]*j+I[R]*P;V.part2_length>a&&(V.part2_length=a,V.scalefac_compress=R)}}this.best_scalefac_store=function(u,l,s,V){var _=V.tt[l][s],R,f,j,g,P=0;for(j=0,R=0;R<_.sfbmax;R++){var a=_.width[R];for(Ct(a>=0),j+=a,g=-a;g<0&&_.l3_enc[g+j]==0;g++);g==0&&(_.scalefac[R]=P=-2)}if(_.scalefac_scale==0&&_.preflag==0){var c=0;for(R=0;R<_.sfbmax;R++)_.scalefac[R]>0&&(c|=_.scalefac[R]);if(!(c&1)&&c!=0){for(R=0;R<_.sfbmax;R++)_.scalefac[R]>0&&(_.scalefac[R]>>=1);_.scalefac_scale=P=1}}if(_.preflag==0&&_.block_type!=Je.SHORT_TYPE&&u.mode_gr==2){for(R=11;R<Je.SBPSY_l&&!(_.scalefac[R]<t.pretab[R]&&_.scalefac[R]!=-2);R++);if(R==Je.SBPSY_l){for(R=11;R<Je.SBPSY_l;R++)_.scalefac[R]>0&&(_.scalefac[R]-=t.pretab[R]);_.preflag=P=1}}for(f=0;f<4;f++)V.scfsi[s][f]=0;for(u.mode_gr==2&&l==1&&V.tt[0][s].block_type!=Je.SHORT_TYPE&&V.tt[1][s].block_type!=Je.SHORT_TYPE&&(r(s,V),P=0),R=0;R<_.sfbmax;R++)_.scalefac[R]==-2&&(_.scalefac[R]=0);P!=0&&(u.mode_gr==2?this.scale_bitcount(_):this.scale_bitcount_lsf(u,_))};function K(u,l){for(var s=0;s<l;++s)if(u[s]<0)return!1;return!0}var X=[0,18,36,54,54,36,54,72,54,72,90,72,90,108,108,126],A=[0,18,36,54,51,35,53,71,52,70,88,69,87,105,104,122],T=[0,10,20,30,33,21,31,41,32,42,52,43,53,63,64,74];this.scale_bitcount=function(u){var l,s,V=0,_=0,R,f=u.scalefac;if(Ct(K(f,u.sfbmax)),u.block_type==Je.SHORT_TYPE)R=X,u.mixed_block_flag!=0&&(R=A);else if(R=T,u.preflag==0){for(s=11;s<Je.SBPSY_l&&!(f[s]<t.pretab[s]);s++);if(s==Je.SBPSY_l)for(u.preflag=1,s=11;s<Je.SBPSY_l;s++)f[s]-=t.pretab[s]}for(s=0;s<u.sfbdivide;s++)V<f[s]&&(V=f[s]);for(;s<u.sfbmax;s++)_<f[s]&&(_=f[s]);for(u.part2_length=_0.LARGE_BITS,l=0;l<16;l++)V<J[l]&&_<U[l]&&u.part2_length>R[l]&&(u.part2_length=R[l],u.scalefac_compress=l);return u.part2_length==_0.LARGE_BITS};var H=[[15,15,7,7],[15,15,7,0],[7,3,0,0],[15,31,31,0],[7,7,7,0],[3,3,0,0]];this.scale_bitcount_lsf=function(u,l){var s,V,_,R,f,j,g,P,a=N0(4),c=l.scalefac;for(l.preflag!=0?s=2:s=0,g=0;g<4;g++)a[g]=0;if(l.block_type==Je.SHORT_TYPE){V=1;var M=t.nr_of_sfb_block[s][V];for(P=0,_=0;_<4;_++)for(R=M[_]/3,g=0;g<R;g++,P++)for(f=0;f<3;f++)c[P*3+f]>a[_]&&(a[_]=c[P*3+f])}else{V=0;var M=t.nr_of_sfb_block[s][V];for(P=0,_=0;_<4;_++)for(R=M[_],g=0;g<R;g++,P++)c[P]>a[_]&&(a[_]=c[P])}for(j=!1,_=0;_<4;_++)a[_]>H[s][_]&&(j=!0);if(!j){var L,ee,ae,le;for(l.sfb_partition_table=t.nr_of_sfb_block[s][V],_=0;_<4;_++)l.slen[_]=p[a[_]];switch(L=l.slen[0],ee=l.slen[1],ae=l.slen[2],le=l.slen[3],s){case 0:l.scalefac_compress=(L*5+ee<<4)+(ae<<2)+le;break;case 1:l.scalefac_compress=400+(L*5+ee<<2)+ae;break;case 2:l.scalefac_compress=500+L*3+ee;break;default:Er.err.printf(`intensity stereo not implemented yet
83
+ `);break}}if(!j)for(Ct(l.sfb_partition_table!=null),l.part2_length=0,_=0;_<4;_++)l.part2_length+=l.slen[_]*l.sfb_partition_table[_];return j};var p=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];this.huffman_init=function(u){for(var l=2;l<=576;l+=2){for(var s=0,V;u.scalefac_band.l[++s]<l;);for(V=i[s][0];u.scalefac_band.l[V+1]>l;)V--;for(V<0&&(V=i[s][0]),u.bv_scf[l-2]=V,V=i[s][1];u.scalefac_band.l[V+u.bv_scf[l-2]+2]>l;)V--;V<0&&(V=i[s][1]),u.bv_scf[l-1]=V}}}var Ur=Oi,Wt=it,At=Wt.System;Wt.VbrMode;Wt.Float;Wt.ShortBlock;Wt.Util;var zr=Wt.Arrays;Wt.new_array_n;var Ar=Wt.new_byte;Wt.new_double;Wt.new_float;var Or=Wt.new_float_n,jr=Wt.new_int;Wt.new_int_n;var Ve=Wt.assert,xs=Ur,Mi=$i,li=bt(),S0=yi;mi.EQ=function(t,e){return Math.abs(t)>Math.abs(e)?Math.abs(t-e)<=Math.abs(t)*1e-6:Math.abs(t-e)<=Math.abs(e)*1e-6};mi.NEQ=function(t,e){return!mi.EQ(t,e)};function mi(){var t=this,e=32773,i=32,n=null,d=null,o=null,m=null;this.setModules=function(p,u,l,s){n=p,d=u,o=l,m=s};var h=null,S=0,W=0,v=0;this.getframebits=function(p){var u=p.internal_flags,l;u.bitrate_index!=0?l=Mi.bitrate_table[p.version][u.bitrate_index]:l=p.brate,Ve(8<=l&&l<=640);var s=0|(p.version+1)*72e3*l/p.out_samplerate+u.padding;return 8*s};function Z(p){At.arraycopy(p.header[p.w_ptr].buf,0,h,W,p.sideinfo_len),W+=p.sideinfo_len,S+=p.sideinfo_len*8,p.w_ptr=p.w_ptr+1&S0.MAX_HEADER_BUF-1}function O(p,u,l){for(Ve(l<i-2);l>0;){var s;v==0&&(v=8,W++,Ve(W<Lame.LAME_MAXMP3BUFFER),Ve(p.header[p.w_ptr].write_timing>=S),p.header[p.w_ptr].write_timing==S&&Z(p),h[W]=0),s=Math.min(l,v),l-=s,v-=s,Ve(l<i),Ve(v<i),h[W]|=u>>l<<v,S+=s}}function w(p,u,l){for(Ve(l<i-2);l>0;){var s;v==0&&(v=8,W++,Ve(W<Lame.LAME_MAXMP3BUFFER),h[W]=0),s=Math.min(l,v),l-=s,v-=s,Ve(l<i),Ve(v<i),h[W]|=u>>l<<v,S+=s}}function N(p,u){var l=p.internal_flags,s;if(Ve(u>=0),u>=8&&(O(l,76,8),u-=8),u>=8&&(O(l,65,8),u-=8),u>=8&&(O(l,77,8),u-=8),u>=8&&(O(l,69,8),u-=8),u>=32){var V=o.getLameShortVersion();if(u>=32)for(s=0;s<V.length&&u>=8;++s)u-=8,O(l,V.charAt(s),8)}for(;u>=1;u-=1)O(l,l.ancillary_flag,1),l.ancillary_flag^=p.disable_reservoir?0:1;Ve(u==0)}function J(p,u,l){for(var s=p.header[p.h_ptr].ptr;l>0;){var V=Math.min(l,8-(s&7));l-=V,Ve(l<i),p.header[p.h_ptr].buf[s>>3]|=u>>l<<8-(s&7)-V,s+=V}p.header[p.h_ptr].ptr=s}function U(p,u){p<<=8;for(var l=0;l<8;l++)p<<=1,u<<=1,(u^p)&65536&&(u^=e);return u}this.CRC_writeheader=function(p,u){var l=65535;l=U(u[2]&255,l),l=U(u[3]&255,l);for(var s=6;s<p.sideinfo_len;s++)l=U(u[s]&255,l);u[4]=byte(l>>8),u[5]=byte(l&255)};function k(p,u){var l=p.internal_flags,s,V,_;if(s=l.l3_side,l.header[l.h_ptr].ptr=0,zr.fill(l.header[l.h_ptr].buf,0,l.sideinfo_len,0),p.out_samplerate<16e3?J(l,4094,12):J(l,4095,12),J(l,p.version,1),J(l,1,2),J(l,p.error_protection?0:1,1),J(l,l.bitrate_index,4),J(l,l.samplerate_index,2),J(l,l.padding,1),J(l,p.extension,1),J(l,p.mode.ordinal(),2),J(l,l.mode_ext,2),J(l,p.copyright,1),J(l,p.original,1),J(l,p.emphasis,2),p.error_protection&&J(l,0,16),p.version==1){for(Ve(s.main_data_begin>=0),J(l,s.main_data_begin,9),l.channels_out==2?J(l,s.private_bits,3):J(l,s.private_bits,5),_=0;_<l.channels_out;_++){var R;for(R=0;R<4;R++)J(l,s.scfsi[_][R],1)}for(V=0;V<2;V++)for(_=0;_<l.channels_out;_++){var f=s.tt[V][_];J(l,f.part2_3_length+f.part2_length,12),J(l,f.big_values/2,9),J(l,f.global_gain,8),J(l,f.scalefac_compress,4),f.block_type!=li.NORM_TYPE?(J(l,1,1),J(l,f.block_type,2),J(l,f.mixed_block_flag,1),f.table_select[0]==14&&(f.table_select[0]=16),J(l,f.table_select[0],5),f.table_select[1]==14&&(f.table_select[1]=16),J(l,f.table_select[1],5),J(l,f.subblock_gain[0],3),J(l,f.subblock_gain[1],3),J(l,f.subblock_gain[2],3)):(J(l,0,1),f.table_select[0]==14&&(f.table_select[0]=16),J(l,f.table_select[0],5),f.table_select[1]==14&&(f.table_select[1]=16),J(l,f.table_select[1],5),f.table_select[2]==14&&(f.table_select[2]=16),J(l,f.table_select[2],5),Ve(0<=f.region0_count&&f.region0_count<16),Ve(0<=f.region1_count&&f.region1_count<8),J(l,f.region0_count,4),J(l,f.region1_count,3)),J(l,f.preflag,1),J(l,f.scalefac_scale,1),J(l,f.count1table_select,1)}}else for(Ve(s.main_data_begin>=0),J(l,s.main_data_begin,8),J(l,s.private_bits,l.channels_out),V=0,_=0;_<l.channels_out;_++){var f=s.tt[V][_];J(l,f.part2_3_length+f.part2_length,12),J(l,f.big_values/2,9),J(l,f.global_gain,8),J(l,f.scalefac_compress,9),f.block_type!=li.NORM_TYPE?(J(l,1,1),J(l,f.block_type,2),J(l,f.mixed_block_flag,1),f.table_select[0]==14&&(f.table_select[0]=16),J(l,f.table_select[0],5),f.table_select[1]==14&&(f.table_select[1]=16),J(l,f.table_select[1],5),J(l,f.subblock_gain[0],3),J(l,f.subblock_gain[1],3),J(l,f.subblock_gain[2],3)):(J(l,0,1),f.table_select[0]==14&&(f.table_select[0]=16),J(l,f.table_select[0],5),f.table_select[1]==14&&(f.table_select[1]=16),J(l,f.table_select[1],5),f.table_select[2]==14&&(f.table_select[2]=16),J(l,f.table_select[2],5),Ve(0<=f.region0_count&&f.region0_count<16),Ve(0<=f.region1_count&&f.region1_count<8),J(l,f.region0_count,4),J(l,f.region1_count,3)),J(l,f.scalefac_scale,1),J(l,f.count1table_select,1)}p.error_protection&&CRC_writeheader(l,l.header[l.h_ptr].buf);{var j=l.h_ptr;Ve(l.header[j].ptr==l.sideinfo_len*8),l.h_ptr=j+1&S0.MAX_HEADER_BUF-1,l.header[l.h_ptr].write_timing=l.header[j].write_timing+u,l.h_ptr==l.w_ptr&&At.err.println(`Error: MAX_HEADER_BUF too small in bitstream.c
84
84
  `)}}function I(p,u){var l=Mi.ht[u.count1table_select+32],s,V=0,_=u.big_values,R=u.big_values;for(Ve(u.count1table_select<2),s=(u.count1-u.big_values)/4;s>0;--s){var f=0,j=0,g;g=u.l3_enc[_+0],g!=0&&(j+=8,u.xr[R+0]<0&&f++,Ve(g<=1)),g=u.l3_enc[_+1],g!=0&&(j+=4,f*=2,u.xr[R+1]<0&&f++,Ve(g<=1)),g=u.l3_enc[_+2],g!=0&&(j+=2,f*=2,u.xr[R+2]<0&&f++,Ve(g<=1)),g=u.l3_enc[_+3],g!=0&&(j++,f*=2,u.xr[R+3]<0&&f++,Ve(g<=1)),_+=4,R+=4,O(p,f+l.table[j],l.hlen[j]),V+=l.hlen[j]}return V}function r(p,u,l,s,V){var _=Mi.ht[u],R=0;if(Ve(u<32),u==0)return R;for(var f=l;f<s;f+=2){var j=0,g=0,P=_.xlen,a=_.xlen,c=0,M=V.l3_enc[f],L=V.l3_enc[f+1];if(M!=0&&(V.xr[f]<0&&c++,j--),u>15){if(M>14){var ee=M-15;Ve(ee<=_.linmax),c|=ee<<1,g=P,M=15}if(L>14){var ae=L-15;Ve(ae<=_.linmax),c<<=P,c|=ae,g+=P,L=15}a=16}L!=0&&(c<<=1,V.xr[f+1]<0&&c++,j--),Ve((M|L)<16),M=M*a+L,g-=j,j+=_.hlen[M],Ve(j<=i),Ve(g<=i),O(p,_.table[M],j),O(p,c,g),R+=j+g}return R}function K(p,u){var l=3*p.scalefac_band.s[3];l>u.big_values&&(l=u.big_values);var s=r(p,u.table_select[0],0,l,u);return s+=r(p,u.table_select[1],l,u.big_values,u),s}function X(p,u){var l,s,V,_;l=u.big_values,Ve(0<=l&&l<=576);var R=u.region0_count+1;return Ve(0<=R),Ve(R<p.scalefac_band.l.length),V=p.scalefac_band.l[R],R+=u.region1_count+1,Ve(0<=R),Ve(R<p.scalefac_band.l.length),_=p.scalefac_band.l[R],V>l&&(V=l),_>l&&(_=l),s=r(p,u.table_select[0],0,V,u),s+=r(p,u.table_select[1],V,_,u),s+=r(p,u.table_select[2],_,l,u),s}function A(p){var u,l,s,V,_=0,R=p.internal_flags,f=R.l3_side;if(p.version==1)for(u=0;u<2;u++)for(l=0;l<R.channels_out;l++){var j=f.tt[u][l],g=xs.slen1_tab[j.scalefac_compress],P=xs.slen2_tab[j.scalefac_compress];for(V=0,s=0;s<j.sfbdivide;s++)j.scalefac[s]!=-1&&(O(R,j.scalefac[s],g),V+=g);for(;s<j.sfbmax;s++)j.scalefac[s]!=-1&&(O(R,j.scalefac[s],P),V+=P);Ve(V==j.part2_length),j.block_type==li.SHORT_TYPE?V+=K(R,j):V+=X(R,j),V+=I(R,j),Ve(V==j.part2_3_length+j.part2_length),_+=V}else for(u=0,l=0;l<R.channels_out;l++){var j=f.tt[u][l],a,c,M=0;if(Ve(j.sfb_partition_table!=null),V=0,s=0,c=0,j.block_type==li.SHORT_TYPE){for(;c<4;c++){var L=j.sfb_partition_table[c]/3,ee=j.slen[c];for(a=0;a<L;a++,s++)O(R,Math.max(j.scalefac[s*3+0],0),ee),O(R,Math.max(j.scalefac[s*3+1],0),ee),O(R,Math.max(j.scalefac[s*3+2],0),ee),M+=3*ee}V+=K(R,j)}else{for(;c<4;c++){var L=j.sfb_partition_table[c],ee=j.slen[c];for(a=0;a<L;a++,s++)O(R,Math.max(j.scalefac[s],0),ee),M+=ee}V+=X(R,j)}V+=I(R,j),Ve(V==j.part2_3_length),Ve(M==j.part2_length),_+=M+V}return _}function T(){this.total=0}function H(p,u){var l=p.internal_flags,s,V,_,R,f;return f=l.w_ptr,R=l.h_ptr-1,R==-1&&(R=S0.MAX_HEADER_BUF-1),s=l.header[R].write_timing-S,u.total=s,s>=0&&(V=1+R-f,R<f&&(V=1+R-f+S0.MAX_HEADER_BUF),s-=V*8*l.sideinfo_len),_=t.getframebits(p),s+=_,u.total+=_,u.total%8!=0?u.total=1+u.total/8:u.total=u.total/8,u.total+=W+1,s<0&&At.err.println(`strange error flushing buffer ...
85
85
  `),s}this.flush_bitstream=function(p){var u=p.internal_flags,l,s,V=u.h_ptr-1;if(V==-1&&(V=S0.MAX_HEADER_BUF-1),l=u.l3_side,!((s=H(p,new T))<0)){if(N(p,s),Ve(u.header[V].write_timing+this.getframebits(p)==S),u.ResvSize=0,l.main_data_begin=0,u.findReplayGain){var _=n.GetTitleGain(u.rgdata);Ve(NEQ(_,GainAnalysis.GAIN_NOT_ENOUGH_SAMPLES)),u.RadioGain=Math.floor(_*10+.5)|0}u.findPeakSample&&(u.noclipGainChange=Math.ceil(Math.log10(u.PeakSample/32767)*20*10)|0,u.noclipGainChange>0&&(EQ(p.scale,1)||EQ(p.scale,0))?u.noclipScale=Math.floor(32767/u.PeakSample*100)/100:u.noclipScale=-1)}},this.add_dummy_byte=function(p,u,l){for(var s=p.internal_flags,V;l-- >0;)for(w(s,u,8),V=0;V<S0.MAX_HEADER_BUF;++V)s.header[V].write_timing+=8},this.format_bitstream=function(p){var u=p.internal_flags,l;l=u.l3_side;var s=this.getframebits(p);N(p,l.resvDrain_pre),k(p,s);var V=8*u.sideinfo_len;if(V+=A(p),N(p,l.resvDrain_post),V+=l.resvDrain_post,l.main_data_begin+=(s-V)/8,H(p,new T)!=u.ResvSize&&At.err.println("Internal buffer inconsistency. flushbits <> ResvSize"),l.main_data_begin*8!=u.ResvSize&&(At.err.printf(`bit reservoir error:
86
86
  l3_side.main_data_begin: %d
@@ -91,10 +91,10 @@ header and sideinfo: %d
91
91
  data bits: %d
92
92
  total bits: %d (remainder: %d)
93
93
  bitsperframe: %d
94
- `,8*l.main_data_begin,u.ResvSize,l.resvDrain_post,l.resvDrain_pre,8*u.sideinfo_len,V-l.resvDrain_post-8*u.sideinfo_len,V,V%8,s),At.err.println("This is a fatal error. It has several possible causes:"),At.err.println("90%% LAME compiled with buggy version of gcc using advanced optimizations"),At.err.println(" 9%% Your system is overclocked"),At.err.println(" 1%% bug in LAME encoding library"),u.ResvSize=l.main_data_begin*8),Ve(S%8==0),S>1e9){var _;for(_=0;_<S0.MAX_HEADER_BUF;++_)u.header[_].write_timing-=S;S=0}return 0},this.copy_buffer=function(p,u,l,s,V){var _=W+1;if(_<=0)return 0;if(s!=0&&_>s)return-1;if(At.arraycopy(h,0,u,l,_),W=-1,v=0,V!=0){var R=Or(1);if(R[0]=p.nMusicCRC,m.updateMusicCRC(R,u,l,_),p.nMusicCRC=R[0],_>0&&(p.VBR_seek_table.nBytesWritten+=_),p.decode_on_the_fly){for(var f=Ar([2,1152]),j=_,g=-1,P;g!=0;)if(g=d.hip_decode1_unclipped(p.hip,u,l,j,f[0],f[1]),j=0,g==-1&&(g=0),g>0){if(Ve(g<=1152),p.findPeakSample){for(P=0;P<g;P++)f[0][P]>p.PeakSample?p.PeakSample=f[0][P]:-f[0][P]>p.PeakSample&&(p.PeakSample=-f[0][P]);if(p.channels_out>1)for(P=0;P<g;P++)f[1][P]>p.PeakSample?p.PeakSample=f[1][P]:-f[1][P]>p.PeakSample&&(p.PeakSample=-f[1][P])}if(p.findReplayGain&&n.AnalyzeSamples(p.rgdata,f[0],0,f[1],0,g,p.channels_out)==GainAnalysis.GAIN_ANALYSIS_ERROR)return-6}}}return _},this.init_bit_stream_w=function(p){h=zr(Lame.LAME_MAXMP3BUFFER),p.h_ptr=p.w_ptr=0,p.header[p.h_ptr].write_timing=0,W=-1,v=0,S=0}}var cn=mi;const jr=bi(cn);var ot=it,Qr=ot.System,Me=ot.VbrMode;ot.Float;var ki=ot.ShortBlock;ot.Util;ot.Arrays;ot.new_array_n;ot.new_byte;ot.new_double;var G0=ot.new_float;ot.new_float_n;ot.new_int;var Hs=ot.new_int_n,Dr=ot.new_short_n,Yt=ot.assert,Bi=ir,$r=rr,P0=yi,qr=Tr,ea=xr,ta=Br,v0=cn,Ot=$i,Ne=bt();function Qe(){var t=this,e=128*1024;Qe.V9=410,Qe.V8=420,Qe.V7=430,Qe.V6=440,Qe.V5=450,Qe.V4=460,Qe.V3=470,Qe.V2=480,Qe.V1=490,Qe.V0=500,Qe.R3MIX=1e3,Qe.STANDARD=1001,Qe.EXTREME=1002,Qe.INSANE=1003,Qe.STANDARD_FAST=1004,Qe.EXTREME_FAST=1005,Qe.MEDIUM=1006,Qe.MEDIUM_FAST=1007;var i=16384+e;Qe.LAME_MAXMP3BUFFER=i;var n,d,o,m,h,S=new Bi,W,v,Z;this.enc=new Ne,this.setModules=function(a,c,M,L,ee,ae,le,re,_e){n=a,d=c,o=M,m=L,h=ee,W=ae,v=re,Z=_e,this.enc.setModules(d,S,m,W)};function O(){this.mask_adjust=0,this.mask_adjust_short=0,this.bo_l_weight=G0(Ne.SBMAX_l),this.bo_s_weight=G0(Ne.SBMAX_s)}function w(){this.lowerlimit=0}function N(a,c){this.lowpass=c}var J=4294479419;function U(a){var c;return a.class_id=J,c=a.internal_flags=new P0,a.mode=MPEGMode.NOT_SET,a.original=1,a.in_samplerate=44100,a.num_channels=2,a.num_samples=-1,a.bWriteVbrTag=!0,a.quality=-1,a.short_blocks=null,c.subblock_gain=-1,a.lowpassfreq=0,a.highpassfreq=0,a.lowpasswidth=-1,a.highpasswidth=-1,a.VBR=Me.vbr_off,a.VBR_q=4,a.ATHcurve=-1,a.VBR_mean_bitrate_kbps=128,a.VBR_min_bitrate_kbps=0,a.VBR_max_bitrate_kbps=0,a.VBR_hard_min=0,c.VBR_min_bitrate=1,c.VBR_max_bitrate=13,a.quant_comp=-1,a.quant_comp_short=-1,a.msfix=-1,c.resample_ratio=1,c.OldValue[0]=180,c.OldValue[1]=180,c.CurrentStep[0]=4,c.CurrentStep[1]=4,c.masking_lower=1,c.nsPsy.attackthre=-1,c.nsPsy.attackthre_s=-1,a.scale=-1,a.athaa_type=-1,a.ATHtype=-1,a.athaa_loudapprox=-1,a.athaa_sensitivity=0,a.useTemporal=null,a.interChRatio=-1,c.mf_samples_to_encode=Ne.ENCDELAY+Ne.POSTDELAY,a.encoder_padding=0,c.mf_size=Ne.ENCDELAY-Ne.MDCTDELAY,a.findReplayGain=!1,a.decode_on_the_fly=!1,c.decode_on_the_fly=!1,c.findReplayGain=!1,c.findPeakSample=!1,c.RadioGain=0,c.AudiophileGain=0,c.noclipGainChange=0,c.noclipScale=-1,a.preset=0,a.write_id3tag_automatic=!0,0}this.lame_init=function(){var a=new $r;return U(a),a.lame_allocated_gfp=1,a};function k(a){return a>1?0:a<=0?1:Math.cos(Math.PI/2*a)}this.nearestBitrateFullIndex=function(a){var c=[8,16,24,32,40,48,56,64,80,96,112,128,160,192,224,256,320],M=0,L=0,ee=0,ae=0;ae=c[16],ee=16,L=c[16],M=16;for(var le=0;le<16;le++)if(Math.max(a,c[le+1])!=a){ae=c[le+1],ee=le+1,L=c[le],M=le;break}return ae-a>a-L?M:ee};function I(a,c){var M=44100;return c>=48e3?M=48e3:c>=44100?M=44100:c>=32e3?M=32e3:c>=24e3?M=24e3:c>=22050?M=22050:c>=16e3?M=16e3:c>=12e3?M=12e3:c>=11025?M=11025:c>=8e3&&(M=8e3),a==-1?M:(a<=15960&&(M=44100),a<=15250&&(M=32e3),a<=11220&&(M=24e3),a<=9970&&(M=22050),a<=7230&&(M=16e3),a<=5420&&(M=12e3),a<=4510&&(M=11025),a<=3970&&(M=8e3),c<M?c>44100?48e3:c>32e3?44100:c>24e3?32e3:c>22050?24e3:c>16e3?22050:c>12e3?16e3:c>11025?12e3:c>8e3?11025:8e3:M)}function r(a,c){switch(a){case 44100:return c.version=1,0;case 48e3:return c.version=1,1;case 32e3:return c.version=1,2;case 22050:return c.version=0,0;case 24e3:return c.version=0,1;case 16e3:return c.version=0,2;case 11025:return c.version=0,0;case 12e3:return c.version=0,1;case 8e3:return c.version=0,2;default:return c.version=0,-1}}function K(a,c,M){M<16e3&&(c=2);for(var L=Ot.bitrate_table[c][1],ee=2;ee<=14;ee++)Ot.bitrate_table[c][ee]>0&&Math.abs(Ot.bitrate_table[c][ee]-a)<Math.abs(L-a)&&(L=Ot.bitrate_table[c][ee]);return L}function X(a,c,M){M<16e3&&(c=2);for(var L=0;L<=14;L++)if(Ot.bitrate_table[c][L]>0&&Ot.bitrate_table[c][L]==a)return L;return-1}function A(a,c){var M=[new N(8,2e3),new N(16,3700),new N(24,3900),new N(32,5500),new N(40,7e3),new N(48,7500),new N(56,1e4),new N(64,11e3),new N(80,13500),new N(96,15100),new N(112,15600),new N(128,17e3),new N(160,17500),new N(192,18600),new N(224,19400),new N(256,19700),new N(320,20500)],L=t.nearestBitrateFullIndex(c);a.lowerlimit=M[L].lowpass}function T(a){var c=a.internal_flags,M=32,L=-1;if(c.lowpass1>0){for(var ee=999,ae=0;ae<=31;ae++){var le=ae/31;le>=c.lowpass2&&(M=Math.min(M,ae)),c.lowpass1<le&&le<c.lowpass2&&(ee=Math.min(ee,ae))}ee==999?c.lowpass1=(M-.75)/31:c.lowpass1=(ee-.75)/31,c.lowpass2=M/31}if(c.highpass2>0&&c.highpass2<.9*(.75/31)&&(c.highpass1=0,c.highpass2=0,Qr.err.println(`Warning: highpass filter disabled. highpass frequency too small
95
- `)),c.highpass2>0){for(var re=-1,ae=0;ae<=31;ae++){var le=ae/31;le<=c.highpass1&&(L=Math.max(L,ae)),c.highpass1<le&&le<c.highpass2&&(re=Math.max(re,ae))}c.highpass1=L/31,re==-1?c.highpass2=(L+.75)/31:c.highpass2=(re+.75)/31}for(var ae=0;ae<32;ae++){var _e,he,le=ae/31;c.highpass2>c.highpass1?_e=k((c.highpass2-le)/(c.highpass2-c.highpass1+1e-20)):_e=1,c.lowpass2>c.lowpass1?he=k((le-c.lowpass1)/(c.lowpass2-c.lowpass1+1e-20)):he=1,c.amp_filter[ae]=_e*he}}function H(a){var c=a.internal_flags;switch(a.quality){default:case 9:c.psymodel=0,c.noise_shaping=0,c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.use_best_huffman=0,c.full_outer_loop=0;break;case 8:a.quality=7;case 7:c.psymodel=1,c.noise_shaping=0,c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.use_best_huffman=0,c.full_outer_loop=0;break;case 6:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=0,c.full_outer_loop=0;break;case 5:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=0,c.full_outer_loop=0;break;case 4:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break;case 3:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.noise_shaping_amp=1,c.noise_shaping_stop=1,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break;case 2:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.substep_shaping==0&&(c.substep_shaping=2),c.noise_shaping_amp=1,c.noise_shaping_stop=1,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break;case 1:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.substep_shaping==0&&(c.substep_shaping=2),c.noise_shaping_amp=2,c.noise_shaping_stop=1,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break;case 0:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.substep_shaping==0&&(c.substep_shaping=2),c.noise_shaping_amp=2,c.noise_shaping_stop=1,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break}}function p(a){var c=a.internal_flags;a.frameNum=0,a.write_id3tag_automatic&&v.id3tag_write_v2(a),c.bitrate_stereoMode_Hist=Hs([16,5]),c.bitrate_blockType_Hist=Hs([16,6]),c.PeakSample=0,a.bWriteVbrTag&&W.InitVbrTag(a)}this.lame_init_params=function(a){var c=a.internal_flags;if(c.Class_ID=0,c.ATH==null&&(c.ATH=new qr),c.PSY==null&&(c.PSY=new O),c.rgdata==null&&(c.rgdata=new ea),c.channels_in=a.num_channels,c.channels_in==1&&(a.mode=MPEGMode.MONO),c.channels_out=a.mode==MPEGMode.MONO?1:2,c.mode_ext=Ne.MPG_MD_MS_LR,a.mode==MPEGMode.MONO&&(a.force_ms=!1),a.VBR==Me.vbr_off&&a.VBR_mean_bitrate_kbps!=128&&a.brate==0&&(a.brate=a.VBR_mean_bitrate_kbps),a.VBR==Me.vbr_off||a.VBR==Me.vbr_mtrh||a.VBR==Me.vbr_mt||(a.free_format=!1),a.VBR==Me.vbr_off&&a.brate==0&&v0.EQ(a.compression_ratio,0)&&(a.compression_ratio=11.025),a.VBR==Me.vbr_off&&a.compression_ratio>0&&(a.out_samplerate==0&&(a.out_samplerate=map2MP3Frequency(int(.97*a.in_samplerate))),a.brate=0|a.out_samplerate*16*c.channels_out/(1e3*a.compression_ratio),c.samplerate_index=r(a.out_samplerate,a),a.free_format||(a.brate=K(a.brate,a.version,a.out_samplerate))),a.out_samplerate!=0&&(a.out_samplerate<16e3?(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,8),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,64)):a.out_samplerate<32e3?(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,8),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,160)):(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,32),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,320))),a.lowpassfreq==0){var M=16e3;switch(a.VBR){case Me.vbr_off:{var L=new w;A(L,a.brate),M=L.lowerlimit;break}case Me.vbr_abr:{var L=new w;A(L,a.VBR_mean_bitrate_kbps),M=L.lowerlimit;break}case Me.vbr_rh:{var ee=[19500,19e3,18600,18e3,17500,16e3,15600,14900,12500,1e4,3950];if(0<=a.VBR_q&&a.VBR_q<=9){var ae=ee[a.VBR_q],le=ee[a.VBR_q+1],re=a.VBR_q_frac;M=linear_int(ae,le,re)}else M=19500;break}default:{var ee=[19500,19e3,18500,18e3,17500,16500,15500,14500,12500,9500,3950];if(0<=a.VBR_q&&a.VBR_q<=9){var ae=ee[a.VBR_q],le=ee[a.VBR_q+1],re=a.VBR_q_frac;M=linear_int(ae,le,re)}else M=19500}}a.mode==MPEGMode.MONO&&(a.VBR==Me.vbr_off||a.VBR==Me.vbr_abr)&&(M*=1.5),a.lowpassfreq=M|0}if(a.out_samplerate==0&&(2*a.lowpassfreq>a.in_samplerate&&(a.lowpassfreq=a.in_samplerate/2),a.out_samplerate=I(a.lowpassfreq|0,a.in_samplerate)),a.lowpassfreq=Math.min(20500,a.lowpassfreq),a.lowpassfreq=Math.min(a.out_samplerate/2,a.lowpassfreq),a.VBR==Me.vbr_off&&(a.compression_ratio=a.out_samplerate*16*c.channels_out/(1e3*a.brate)),a.VBR==Me.vbr_abr&&(a.compression_ratio=a.out_samplerate*16*c.channels_out/(1e3*a.VBR_mean_bitrate_kbps)),a.bWriteVbrTag||(a.findReplayGain=!1,a.decode_on_the_fly=!1,c.findPeakSample=!1),c.findReplayGain=a.findReplayGain,c.decode_on_the_fly=a.decode_on_the_fly,c.decode_on_the_fly&&(c.findPeakSample=!0),c.findReplayGain&&n.InitGainAnalysis(c.rgdata,a.out_samplerate)==GainAnalysis.INIT_GAIN_ANALYSIS_ERROR)return a.internal_flags=null,-6;switch(c.decode_on_the_fly&&!a.decode_only&&(c.hip!=null&&Z.hip_decode_exit(c.hip),c.hip=Z.hip_decode_init()),c.mode_gr=a.out_samplerate<=24e3?1:2,a.framesize=576*c.mode_gr,a.encoder_delay=Ne.ENCDELAY,c.resample_ratio=a.in_samplerate/a.out_samplerate,a.VBR){case Me.vbr_mt:case Me.vbr_rh:case Me.vbr_mtrh:{var _e=[5.7,6.5,7.3,8.2,10,11.9,13,14,15,16.5];a.compression_ratio=_e[a.VBR_q]}break;case Me.vbr_abr:a.compression_ratio=a.out_samplerate*16*c.channels_out/(1e3*a.VBR_mean_bitrate_kbps);break;default:a.compression_ratio=a.out_samplerate*16*c.channels_out/(1e3*a.brate);break}if(a.mode==MPEGMode.NOT_SET&&(a.mode=MPEGMode.JOINT_STEREO),a.highpassfreq>0?(c.highpass1=2*a.highpassfreq,a.highpasswidth>=0?c.highpass2=2*(a.highpassfreq+a.highpasswidth):c.highpass2=1*2*a.highpassfreq,c.highpass1/=a.out_samplerate,c.highpass2/=a.out_samplerate):(c.highpass1=0,c.highpass2=0),a.lowpassfreq>0?(c.lowpass2=2*a.lowpassfreq,a.lowpasswidth>=0?(c.lowpass1=2*(a.lowpassfreq-a.lowpasswidth),c.lowpass1<0&&(c.lowpass1=0)):c.lowpass1=1*2*a.lowpassfreq,c.lowpass1/=a.out_samplerate,c.lowpass2/=a.out_samplerate):(c.lowpass1=0,c.lowpass2=0),T(a),c.samplerate_index=r(a.out_samplerate,a),c.samplerate_index<0)return a.internal_flags=null,-1;if(a.VBR==Me.vbr_off){if(a.free_format)c.bitrate_index=0;else if(a.brate=K(a.brate,a.version,a.out_samplerate),c.bitrate_index=X(a.brate,a.version,a.out_samplerate),c.bitrate_index<=0)return a.internal_flags=null,-1}else c.bitrate_index=1;a.analysis&&(a.bWriteVbrTag=!1),c.pinfo!=null&&(a.bWriteVbrTag=!1),d.init_bit_stream_w(c);for(var he=c.samplerate_index+3*a.version+6*(a.out_samplerate<16e3?1:0),oe=0;oe<Ne.SBMAX_l+1;oe++)c.scalefac_band.l[oe]=m.sfBandIndex[he].l[oe];for(var oe=0;oe<Ne.PSFB21+1;oe++){var Le=(c.scalefac_band.l[22]-c.scalefac_band.l[21])/Ne.PSFB21,ze=c.scalefac_band.l[21]+oe*Le;c.scalefac_band.psfb21[oe]=ze}c.scalefac_band.psfb21[Ne.PSFB21]=576;for(var oe=0;oe<Ne.SBMAX_s+1;oe++)c.scalefac_band.s[oe]=m.sfBandIndex[he].s[oe];for(var oe=0;oe<Ne.PSFB12+1;oe++){var Le=(c.scalefac_band.s[13]-c.scalefac_band.s[12])/Ne.PSFB12,ze=c.scalefac_band.s[12]+oe*Le;c.scalefac_band.psfb12[oe]=ze}c.scalefac_band.psfb12[Ne.PSFB12]=192,a.version==1?c.sideinfo_len=c.channels_out==1?21:36:c.sideinfo_len=c.channels_out==1?13:21,a.error_protection&&(c.sideinfo_len+=2),p(a),c.Class_ID=J;{var We;for(We=0;We<19;We++)c.nsPsy.pefirbuf[We]=700*c.mode_gr*c.channels_out;a.ATHtype==-1&&(a.ATHtype=4)}switch(Yt(a.VBR_q<=9),Yt(a.VBR_q>=0),a.VBR){case Me.vbr_mt:a.VBR=Me.vbr_mtrh;case Me.vbr_mtrh:{a.useTemporal==null&&(a.useTemporal=!1),o.apply_preset(a,500-a.VBR_q*10,0),a.quality<0&&(a.quality=LAME_DEFAULT_QUALITY),a.quality<5&&(a.quality=0),a.quality>5&&(a.quality=5),c.PSY.mask_adjust=a.maskingadjust,c.PSY.mask_adjust_short=a.maskingadjust_short,a.experimentalY?c.sfb21_extra=!1:c.sfb21_extra=a.out_samplerate>44e3,c.iteration_loop=new VBRNewIterationLoop(h);break}case Me.vbr_rh:{o.apply_preset(a,500-a.VBR_q*10,0),c.PSY.mask_adjust=a.maskingadjust,c.PSY.mask_adjust_short=a.maskingadjust_short,a.experimentalY?c.sfb21_extra=!1:c.sfb21_extra=a.out_samplerate>44e3,a.quality>6&&(a.quality=6),a.quality<0&&(a.quality=LAME_DEFAULT_QUALITY),c.iteration_loop=new VBROldIterationLoop(h);break}default:{var we;c.sfb21_extra=!1,a.quality<0&&(a.quality=LAME_DEFAULT_QUALITY),we=a.VBR,we==Me.vbr_off&&(a.VBR_mean_bitrate_kbps=a.brate),o.apply_preset(a,a.VBR_mean_bitrate_kbps,0),a.VBR=we,c.PSY.mask_adjust=a.maskingadjust,c.PSY.mask_adjust_short=a.maskingadjust_short,we==Me.vbr_off?c.iteration_loop=new ta(h):c.iteration_loop=new ABRIterationLoop(h);break}}if(Yt(a.scale>=0),a.VBR!=Me.vbr_off){if(c.VBR_min_bitrate=1,c.VBR_max_bitrate=14,a.out_samplerate<16e3&&(c.VBR_max_bitrate=8),a.VBR_min_bitrate_kbps!=0&&(a.VBR_min_bitrate_kbps=K(a.VBR_min_bitrate_kbps,a.version,a.out_samplerate),c.VBR_min_bitrate=X(a.VBR_min_bitrate_kbps,a.version,a.out_samplerate),c.VBR_min_bitrate<0)||a.VBR_max_bitrate_kbps!=0&&(a.VBR_max_bitrate_kbps=K(a.VBR_max_bitrate_kbps,a.version,a.out_samplerate),c.VBR_max_bitrate=X(a.VBR_max_bitrate_kbps,a.version,a.out_samplerate),c.VBR_max_bitrate<0))return-1;a.VBR_min_bitrate_kbps=Ot.bitrate_table[a.version][c.VBR_min_bitrate],a.VBR_max_bitrate_kbps=Ot.bitrate_table[a.version][c.VBR_max_bitrate],a.VBR_mean_bitrate_kbps=Math.min(Ot.bitrate_table[a.version][c.VBR_max_bitrate],a.VBR_mean_bitrate_kbps),a.VBR_mean_bitrate_kbps=Math.max(Ot.bitrate_table[a.version][c.VBR_min_bitrate],a.VBR_mean_bitrate_kbps)}return a.tune&&(c.PSY.mask_adjust+=a.tune_value_a,c.PSY.mask_adjust_short+=a.tune_value_a),H(a),Yt(a.scale>=0),a.athaa_type<0?c.ATH.useAdjust=3:c.ATH.useAdjust=a.athaa_type,c.ATH.aaSensitivityP=Math.pow(10,a.athaa_sensitivity/-10),a.short_blocks==null&&(a.short_blocks=ki.short_block_allowed),a.short_blocks==ki.short_block_allowed&&(a.mode==MPEGMode.JOINT_STEREO||a.mode==MPEGMode.STEREO)&&(a.short_blocks=ki.short_block_coupled),a.quant_comp<0&&(a.quant_comp=1),a.quant_comp_short<0&&(a.quant_comp_short=0),a.msfix<0&&(a.msfix=0),a.exp_nspsytune=a.exp_nspsytune|1,a.internal_flags.nsPsy.attackthre<0&&(a.internal_flags.nsPsy.attackthre=Bi.NSATTACKTHRE),a.internal_flags.nsPsy.attackthre_s<0&&(a.internal_flags.nsPsy.attackthre_s=Bi.NSATTACKTHRE_S),Yt(a.scale>=0),a.scale<0&&(a.scale=1),a.ATHtype<0&&(a.ATHtype=4),a.ATHcurve<0&&(a.ATHcurve=4),a.athaa_loudapprox<0&&(a.athaa_loudapprox=2),a.interChRatio<0&&(a.interChRatio=0),a.useTemporal==null&&(a.useTemporal=!0),c.slot_lag=c.frac_SpF=0,a.VBR==Me.vbr_off&&(c.slot_lag=c.frac_SpF=(a.version+1)*72e3*a.brate%a.out_samplerate|0),m.iteration_init(a),S.psymodel_init(a),Yt(a.scale>=0),0};function u(a,c){(a.in_buffer_0==null||a.in_buffer_nsamples<c)&&(a.in_buffer_0=G0(c),a.in_buffer_1=G0(c),a.in_buffer_nsamples=c)}this.lame_encode_flush=function(a,c,M,L){var ee=a.internal_flags,ae=Dr([2,1152]),le=0,re,_e,he,oe,Le=ee.mf_samples_to_encode-Ne.POSTDELAY,ze=l(a);if(ee.mf_samples_to_encode<1)return 0;for(re=0,a.in_samplerate!=a.out_samplerate&&(Le+=16*a.out_samplerate/a.in_samplerate),he=a.framesize-Le%a.framesize,he<576&&(he+=a.framesize),a.encoder_padding=he,oe=(Le+he)/a.framesize;oe>0&&le>=0;){var We=ze-ee.mf_size,we=a.frameNum;We*=a.in_samplerate,We/=a.out_samplerate,We>1152&&(We=1152),We<1&&(We=1),_e=L-re,L==0&&(_e=0),le=this.lame_encode_buffer(a,ae[0],ae[1],We,c,M,_e),M+=le,re+=le,oe-=we!=a.frameNum?1:0}if(ee.mf_samples_to_encode=0,le<0||(_e=L-re,L==0&&(_e=0),d.flush_bitstream(a),le=d.copy_buffer(ee,c,M,_e,1),le<0))return le;if(M+=le,re+=le,_e=L-re,L==0&&(_e=0),a.write_id3tag_automatic){if(v.id3tag_write_v1(a),le=d.copy_buffer(ee,c,M,_e,0),le<0)return le;re+=le}return re},this.lame_encode_buffer=function(a,c,M,L,ee,ae,le){var re=a.internal_flags,_e=[null,null];if(re.Class_ID!=J)return-3;if(L==0)return 0;u(re,L),_e[0]=re.in_buffer_0,_e[1]=re.in_buffer_1;for(var he=0;he<L;he++)_e[0][he]=c[he],re.channels_in>1&&(_e[1][he]=M[he]);return s(a,_e[0],_e[1],L,ee,ae,le)};function l(a){var c=Ne.BLKSIZE+a.framesize-Ne.FFTOFFSET;return c=Math.max(c,512+a.framesize-32),Yt(P0.MFSIZE>=c),c}function s(a,c,M,L,ee,ae,le){var re=a.internal_flags,_e=0,he,oe,Le,ze,We,we=[null,null],Ke=[null,null];if(re.Class_ID!=J)return-3;if(L==0)return 0;if(We=d.copy_buffer(re,ee,ae,le,0),We<0)return We;if(ae+=We,_e+=We,Ke[0]=c,Ke[1]=M,v0.NEQ(a.scale,0)&&v0.NEQ(a.scale,1))for(oe=0;oe<L;++oe)Ke[0][oe]*=a.scale,re.channels_out==2&&(Ke[1][oe]*=a.scale);if(v0.NEQ(a.scale_left,0)&&v0.NEQ(a.scale_left,1))for(oe=0;oe<L;++oe)Ke[0][oe]*=a.scale_left;if(v0.NEQ(a.scale_right,0)&&v0.NEQ(a.scale_right,1))for(oe=0;oe<L;++oe)Ke[1][oe]*=a.scale_right;if(a.num_channels==2&&re.channels_out==1)for(oe=0;oe<L;++oe)Ke[0][oe]=.5*(Ke[0][oe]+Ke[1][oe]),Ke[1][oe]=0;ze=l(a),we[0]=re.mfbuf[0],we[1]=re.mfbuf[1];for(var De=0;L>0;){var st=[null,null],a0=0,gt=0;st[0]=Ke[0],st[1]=Ke[1];var Ft=new _;if(P(a,we,st,De,L,Ft),a0=Ft.n_in,gt=Ft.n_out,re.findReplayGain&&!re.decode_on_the_fly&&n.AnalyzeSamples(re.rgdata,we[0],re.mf_size,we[1],re.mf_size,gt,re.channels_out)==GainAnalysis.GAIN_ANALYSIS_ERROR)return-6;if(L-=a0,De+=a0,re.channels_out==2,re.mf_size+=gt,Yt(re.mf_size<=P0.MFSIZE),re.mf_samples_to_encode<1&&(re.mf_samples_to_encode=Ne.ENCDELAY+Ne.POSTDELAY),re.mf_samples_to_encode+=gt,re.mf_size>=ze){var l0=le-_e;if(le==0&&(l0=0),he=V(a,we[0],we[1],ee,ae,l0),he<0)return he;for(ae+=he,_e+=he,re.mf_size-=a.framesize,re.mf_samples_to_encode-=a.framesize,Le=0;Le<re.channels_out;Le++)for(oe=0;oe<re.mf_size;oe++)we[Le][oe]=we[Le][oe+a.framesize]}}return Yt(L==0),_e}function V(a,c,M,L,ee,ae){var le=t.enc.lame_encode_mp3_frame(a,c,M,L,ee,ae);return a.frameNum++,le}function _(){this.n_in=0,this.n_out=0}function R(){this.num_used=0}function f(a,c){return c!=0?f(c,a%c):a}function j(a,c,M){var L=Math.PI*c;a/=M,a<0&&(a=0),a>1&&(a=1);var ee=a-.5,ae=.42-.5*Math.cos(2*a*Math.PI)+.08*Math.cos(4*a*Math.PI);return Math.abs(ee)<1e-9?L/Math.PI:ae*Math.sin(M*L*ee)/(Math.PI*M*ee)}function g(a,c,M,L,ee,ae,le,re,_e){var he=a.internal_flags,oe,Le=0,ze,We=a.out_samplerate/f(a.out_samplerate,a.in_samplerate);We>P0.BPC&&(We=P0.BPC);var we=Math.abs(he.resample_ratio-Math.floor(.5+he.resample_ratio))<1e-4?1:0,Ke=1/he.resample_ratio;Ke>1&&(Ke=1);var De=31;De%2==0&&--De,De+=we;var st=De+1;if(he.fill_buffer_resample_init==0){for(he.inbuf_old[0]=G0(st),he.inbuf_old[1]=G0(st),oe=0;oe<=2*We;++oe)he.blackfilt[oe]=G0(st);for(he.itime[0]=0,he.itime[1]=0,Le=0;Le<=2*We;Le++){var a0=0,gt=(Le-We)/(2*We);for(oe=0;oe<=De;oe++)a0+=he.blackfilt[Le][oe]=j(oe-gt,Ke,De);for(oe=0;oe<=De;oe++)he.blackfilt[Le][oe]/=a0}he.fill_buffer_resample_init=1}var Ft=he.inbuf_old[_e];for(ze=0;ze<L;ze++){var l0,$0;if(l0=ze*he.resample_ratio,Le=0|Math.floor(l0-he.itime[_e]),De+Le-De/2>=le)break;var gt=l0-he.itime[_e]-(Le+.5*(De%2));Yt(Math.abs(gt)<=.501),$0=0|Math.floor(gt*2*We+We+.5);var C0=0;for(oe=0;oe<=De;++oe){var Mt=0|oe+Le-De/2,q0;Yt(Mt<le),Yt(Mt+st>=0),q0=Mt<0?Ft[st+Mt]:ee[ae+Mt],C0+=q0*he.blackfilt[$0][oe]}c[M+ze]=C0}if(re.num_used=Math.min(le,De+Le-De/2),he.itime[_e]+=re.num_used-ze*he.resample_ratio,re.num_used>=st)for(oe=0;oe<st;oe++)Ft[oe]=ee[ae+re.num_used+oe-st];else{var Xi=st-re.num_used;for(oe=0;oe<Xi;++oe)Ft[oe]=Ft[oe+re.num_used];for(Le=0;oe<st;++oe,++Le)Ft[oe]=ee[ae+Le];Yt(Le==re.num_used)}return ze}function P(a,c,M,L,ee,ae){var le=a.internal_flags;if(le.resample_ratio<.9999||le.resample_ratio>1.0001)for(var re=0;re<le.channels_out;re++){var _e=new R;ae.n_out=g(a,c[re],le.mf_size,a.framesize,M[re],L,ee,_e,re),ae.n_in=_e.num_used}else{ae.n_out=Math.min(a.framesize,ee),ae.n_in=ae.n_out;for(var he=0;he<ae.n_out;++he)c[0][le.mf_size+he]=M[0][L+he],le.channels_out==2&&(c[1][le.mf_size+he]=M[1][L+he])}}}var ia=Qe;const sa=bi(ia),na=(t,e=4294967295,i=79764919)=>{const n=new Int32Array(256);let d,o,m,h=e;for(d=0;d<256;d++){for(m=d<<24,o=8;o>0;--o)m=2147483648&m?m<<1^i:m<<1;n[d]=m}for(d=0;d<t.length;d++)h=h<<8^n[255&(h>>24^t[d])];return h},Ys=(t,e=na)=>{const i=U=>new Uint8Array(U.length/2).map((k,I)=>parseInt(U.substring(2*I,2*(I+1)),16)),n=U=>i(U)[0],d=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach((U,k)=>d.set(U,k));const o=new Uint8Array(t.length);let m,h,S,W=!1,v=0,Z=42,O=t.length>13&&t.substring(0,9)==="dynEncode",w=0;O&&(w=11,h=n(t.substring(9,w)),h<=1&&(w+=2,Z=n(t.substring(11,w))),h===1&&(w+=8,S=(U=>new DataView(i(U).buffer).getInt32(0,!0))(t.substring(13,w))));const N=256-Z;for(let U=w;U<t.length;U++)if(m=t.charCodeAt(U),m!==61||W){if(m===92&&U<t.length-5&&O){const k=t.charCodeAt(U+1);k!==117&&k!==85||(m=parseInt(t.substring(U+2,U+6),16),U+=5)}if(m>255){const k=d.get(m);k&&(m=k+127)}W&&(W=!1,m-=64),o[v++]=m<Z&&m>0?m+N:m-Z}else W=!0;const J=o.subarray(0,v);if(O&&h===1){const U=e(J);if(U!==S){const k="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",k+`
94
+ `,8*l.main_data_begin,u.ResvSize,l.resvDrain_post,l.resvDrain_pre,8*u.sideinfo_len,V-l.resvDrain_post-8*u.sideinfo_len,V,V%8,s),At.err.println("This is a fatal error. It has several possible causes:"),At.err.println("90%% LAME compiled with buggy version of gcc using advanced optimizations"),At.err.println(" 9%% Your system is overclocked"),At.err.println(" 1%% bug in LAME encoding library"),u.ResvSize=l.main_data_begin*8),Ve(S%8==0),S>1e9){var _;for(_=0;_<S0.MAX_HEADER_BUF;++_)u.header[_].write_timing-=S;S=0}return 0},this.copy_buffer=function(p,u,l,s,V){var _=W+1;if(_<=0)return 0;if(s!=0&&_>s)return-1;if(At.arraycopy(h,0,u,l,_),W=-1,v=0,V!=0){var R=jr(1);if(R[0]=p.nMusicCRC,m.updateMusicCRC(R,u,l,_),p.nMusicCRC=R[0],_>0&&(p.VBR_seek_table.nBytesWritten+=_),p.decode_on_the_fly){for(var f=Or([2,1152]),j=_,g=-1,P;g!=0;)if(g=d.hip_decode1_unclipped(p.hip,u,l,j,f[0],f[1]),j=0,g==-1&&(g=0),g>0){if(Ve(g<=1152),p.findPeakSample){for(P=0;P<g;P++)f[0][P]>p.PeakSample?p.PeakSample=f[0][P]:-f[0][P]>p.PeakSample&&(p.PeakSample=-f[0][P]);if(p.channels_out>1)for(P=0;P<g;P++)f[1][P]>p.PeakSample?p.PeakSample=f[1][P]:-f[1][P]>p.PeakSample&&(p.PeakSample=-f[1][P])}if(p.findReplayGain&&n.AnalyzeSamples(p.rgdata,f[0],0,f[1],0,g,p.channels_out)==GainAnalysis.GAIN_ANALYSIS_ERROR)return-6}}}return _},this.init_bit_stream_w=function(p){h=Ar(Lame.LAME_MAXMP3BUFFER),p.h_ptr=p.w_ptr=0,p.header[p.h_ptr].write_timing=0,W=-1,v=0,S=0}}var cn=mi;const Qr=bi(cn);var ot=it,Dr=ot.System,Me=ot.VbrMode;ot.Float;var ki=ot.ShortBlock;ot.Util;ot.Arrays;ot.new_array_n;ot.new_byte;ot.new_double;var G0=ot.new_float;ot.new_float_n;ot.new_int;var Hs=ot.new_int_n,$r=ot.new_short_n,Yt=ot.assert,Bi=sr,qr=ar,P0=yi,ea=Wr,ta=Hr,ia=Cr,v0=cn,Ot=$i,Ne=bt();function Qe(){var t=this,e=128*1024;Qe.V9=410,Qe.V8=420,Qe.V7=430,Qe.V6=440,Qe.V5=450,Qe.V4=460,Qe.V3=470,Qe.V2=480,Qe.V1=490,Qe.V0=500,Qe.R3MIX=1e3,Qe.STANDARD=1001,Qe.EXTREME=1002,Qe.INSANE=1003,Qe.STANDARD_FAST=1004,Qe.EXTREME_FAST=1005,Qe.MEDIUM=1006,Qe.MEDIUM_FAST=1007;var i=16384+e;Qe.LAME_MAXMP3BUFFER=i;var n,d,o,m,h,S=new Bi,W,v,Z;this.enc=new Ne,this.setModules=function(a,c,M,L,ee,ae,le,re,_e){n=a,d=c,o=M,m=L,h=ee,W=ae,v=re,Z=_e,this.enc.setModules(d,S,m,W)};function O(){this.mask_adjust=0,this.mask_adjust_short=0,this.bo_l_weight=G0(Ne.SBMAX_l),this.bo_s_weight=G0(Ne.SBMAX_s)}function w(){this.lowerlimit=0}function N(a,c){this.lowpass=c}var J=4294479419;function U(a){var c;return a.class_id=J,c=a.internal_flags=new P0,a.mode=MPEGMode.NOT_SET,a.original=1,a.in_samplerate=44100,a.num_channels=2,a.num_samples=-1,a.bWriteVbrTag=!0,a.quality=-1,a.short_blocks=null,c.subblock_gain=-1,a.lowpassfreq=0,a.highpassfreq=0,a.lowpasswidth=-1,a.highpasswidth=-1,a.VBR=Me.vbr_off,a.VBR_q=4,a.ATHcurve=-1,a.VBR_mean_bitrate_kbps=128,a.VBR_min_bitrate_kbps=0,a.VBR_max_bitrate_kbps=0,a.VBR_hard_min=0,c.VBR_min_bitrate=1,c.VBR_max_bitrate=13,a.quant_comp=-1,a.quant_comp_short=-1,a.msfix=-1,c.resample_ratio=1,c.OldValue[0]=180,c.OldValue[1]=180,c.CurrentStep[0]=4,c.CurrentStep[1]=4,c.masking_lower=1,c.nsPsy.attackthre=-1,c.nsPsy.attackthre_s=-1,a.scale=-1,a.athaa_type=-1,a.ATHtype=-1,a.athaa_loudapprox=-1,a.athaa_sensitivity=0,a.useTemporal=null,a.interChRatio=-1,c.mf_samples_to_encode=Ne.ENCDELAY+Ne.POSTDELAY,a.encoder_padding=0,c.mf_size=Ne.ENCDELAY-Ne.MDCTDELAY,a.findReplayGain=!1,a.decode_on_the_fly=!1,c.decode_on_the_fly=!1,c.findReplayGain=!1,c.findPeakSample=!1,c.RadioGain=0,c.AudiophileGain=0,c.noclipGainChange=0,c.noclipScale=-1,a.preset=0,a.write_id3tag_automatic=!0,0}this.lame_init=function(){var a=new qr;return U(a),a.lame_allocated_gfp=1,a};function k(a){return a>1?0:a<=0?1:Math.cos(Math.PI/2*a)}this.nearestBitrateFullIndex=function(a){var c=[8,16,24,32,40,48,56,64,80,96,112,128,160,192,224,256,320],M=0,L=0,ee=0,ae=0;ae=c[16],ee=16,L=c[16],M=16;for(var le=0;le<16;le++)if(Math.max(a,c[le+1])!=a){ae=c[le+1],ee=le+1,L=c[le],M=le;break}return ae-a>a-L?M:ee};function I(a,c){var M=44100;return c>=48e3?M=48e3:c>=44100?M=44100:c>=32e3?M=32e3:c>=24e3?M=24e3:c>=22050?M=22050:c>=16e3?M=16e3:c>=12e3?M=12e3:c>=11025?M=11025:c>=8e3&&(M=8e3),a==-1?M:(a<=15960&&(M=44100),a<=15250&&(M=32e3),a<=11220&&(M=24e3),a<=9970&&(M=22050),a<=7230&&(M=16e3),a<=5420&&(M=12e3),a<=4510&&(M=11025),a<=3970&&(M=8e3),c<M?c>44100?48e3:c>32e3?44100:c>24e3?32e3:c>22050?24e3:c>16e3?22050:c>12e3?16e3:c>11025?12e3:c>8e3?11025:8e3:M)}function r(a,c){switch(a){case 44100:return c.version=1,0;case 48e3:return c.version=1,1;case 32e3:return c.version=1,2;case 22050:return c.version=0,0;case 24e3:return c.version=0,1;case 16e3:return c.version=0,2;case 11025:return c.version=0,0;case 12e3:return c.version=0,1;case 8e3:return c.version=0,2;default:return c.version=0,-1}}function K(a,c,M){M<16e3&&(c=2);for(var L=Ot.bitrate_table[c][1],ee=2;ee<=14;ee++)Ot.bitrate_table[c][ee]>0&&Math.abs(Ot.bitrate_table[c][ee]-a)<Math.abs(L-a)&&(L=Ot.bitrate_table[c][ee]);return L}function X(a,c,M){M<16e3&&(c=2);for(var L=0;L<=14;L++)if(Ot.bitrate_table[c][L]>0&&Ot.bitrate_table[c][L]==a)return L;return-1}function A(a,c){var M=[new N(8,2e3),new N(16,3700),new N(24,3900),new N(32,5500),new N(40,7e3),new N(48,7500),new N(56,1e4),new N(64,11e3),new N(80,13500),new N(96,15100),new N(112,15600),new N(128,17e3),new N(160,17500),new N(192,18600),new N(224,19400),new N(256,19700),new N(320,20500)],L=t.nearestBitrateFullIndex(c);a.lowerlimit=M[L].lowpass}function T(a){var c=a.internal_flags,M=32,L=-1;if(c.lowpass1>0){for(var ee=999,ae=0;ae<=31;ae++){var le=ae/31;le>=c.lowpass2&&(M=Math.min(M,ae)),c.lowpass1<le&&le<c.lowpass2&&(ee=Math.min(ee,ae))}ee==999?c.lowpass1=(M-.75)/31:c.lowpass1=(ee-.75)/31,c.lowpass2=M/31}if(c.highpass2>0&&c.highpass2<.9*(.75/31)&&(c.highpass1=0,c.highpass2=0,Dr.err.println(`Warning: highpass filter disabled. highpass frequency too small
95
+ `)),c.highpass2>0){for(var re=-1,ae=0;ae<=31;ae++){var le=ae/31;le<=c.highpass1&&(L=Math.max(L,ae)),c.highpass1<le&&le<c.highpass2&&(re=Math.max(re,ae))}c.highpass1=L/31,re==-1?c.highpass2=(L+.75)/31:c.highpass2=(re+.75)/31}for(var ae=0;ae<32;ae++){var _e,he,le=ae/31;c.highpass2>c.highpass1?_e=k((c.highpass2-le)/(c.highpass2-c.highpass1+1e-20)):_e=1,c.lowpass2>c.lowpass1?he=k((le-c.lowpass1)/(c.lowpass2-c.lowpass1+1e-20)):he=1,c.amp_filter[ae]=_e*he}}function H(a){var c=a.internal_flags;switch(a.quality){default:case 9:c.psymodel=0,c.noise_shaping=0,c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.use_best_huffman=0,c.full_outer_loop=0;break;case 8:a.quality=7;case 7:c.psymodel=1,c.noise_shaping=0,c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.use_best_huffman=0,c.full_outer_loop=0;break;case 6:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=0,c.full_outer_loop=0;break;case 5:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=0,c.full_outer_loop=0;break;case 4:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break;case 3:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.noise_shaping_amp=1,c.noise_shaping_stop=1,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break;case 2:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.substep_shaping==0&&(c.substep_shaping=2),c.noise_shaping_amp=1,c.noise_shaping_stop=1,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break;case 1:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.substep_shaping==0&&(c.substep_shaping=2),c.noise_shaping_amp=2,c.noise_shaping_stop=1,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break;case 0:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.substep_shaping==0&&(c.substep_shaping=2),c.noise_shaping_amp=2,c.noise_shaping_stop=1,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break}}function p(a){var c=a.internal_flags;a.frameNum=0,a.write_id3tag_automatic&&v.id3tag_write_v2(a),c.bitrate_stereoMode_Hist=Hs([16,5]),c.bitrate_blockType_Hist=Hs([16,6]),c.PeakSample=0,a.bWriteVbrTag&&W.InitVbrTag(a)}this.lame_init_params=function(a){var c=a.internal_flags;if(c.Class_ID=0,c.ATH==null&&(c.ATH=new ea),c.PSY==null&&(c.PSY=new O),c.rgdata==null&&(c.rgdata=new ta),c.channels_in=a.num_channels,c.channels_in==1&&(a.mode=MPEGMode.MONO),c.channels_out=a.mode==MPEGMode.MONO?1:2,c.mode_ext=Ne.MPG_MD_MS_LR,a.mode==MPEGMode.MONO&&(a.force_ms=!1),a.VBR==Me.vbr_off&&a.VBR_mean_bitrate_kbps!=128&&a.brate==0&&(a.brate=a.VBR_mean_bitrate_kbps),a.VBR==Me.vbr_off||a.VBR==Me.vbr_mtrh||a.VBR==Me.vbr_mt||(a.free_format=!1),a.VBR==Me.vbr_off&&a.brate==0&&v0.EQ(a.compression_ratio,0)&&(a.compression_ratio=11.025),a.VBR==Me.vbr_off&&a.compression_ratio>0&&(a.out_samplerate==0&&(a.out_samplerate=map2MP3Frequency(int(.97*a.in_samplerate))),a.brate=0|a.out_samplerate*16*c.channels_out/(1e3*a.compression_ratio),c.samplerate_index=r(a.out_samplerate,a),a.free_format||(a.brate=K(a.brate,a.version,a.out_samplerate))),a.out_samplerate!=0&&(a.out_samplerate<16e3?(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,8),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,64)):a.out_samplerate<32e3?(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,8),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,160)):(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,32),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,320))),a.lowpassfreq==0){var M=16e3;switch(a.VBR){case Me.vbr_off:{var L=new w;A(L,a.brate),M=L.lowerlimit;break}case Me.vbr_abr:{var L=new w;A(L,a.VBR_mean_bitrate_kbps),M=L.lowerlimit;break}case Me.vbr_rh:{var ee=[19500,19e3,18600,18e3,17500,16e3,15600,14900,12500,1e4,3950];if(0<=a.VBR_q&&a.VBR_q<=9){var ae=ee[a.VBR_q],le=ee[a.VBR_q+1],re=a.VBR_q_frac;M=linear_int(ae,le,re)}else M=19500;break}default:{var ee=[19500,19e3,18500,18e3,17500,16500,15500,14500,12500,9500,3950];if(0<=a.VBR_q&&a.VBR_q<=9){var ae=ee[a.VBR_q],le=ee[a.VBR_q+1],re=a.VBR_q_frac;M=linear_int(ae,le,re)}else M=19500}}a.mode==MPEGMode.MONO&&(a.VBR==Me.vbr_off||a.VBR==Me.vbr_abr)&&(M*=1.5),a.lowpassfreq=M|0}if(a.out_samplerate==0&&(2*a.lowpassfreq>a.in_samplerate&&(a.lowpassfreq=a.in_samplerate/2),a.out_samplerate=I(a.lowpassfreq|0,a.in_samplerate)),a.lowpassfreq=Math.min(20500,a.lowpassfreq),a.lowpassfreq=Math.min(a.out_samplerate/2,a.lowpassfreq),a.VBR==Me.vbr_off&&(a.compression_ratio=a.out_samplerate*16*c.channels_out/(1e3*a.brate)),a.VBR==Me.vbr_abr&&(a.compression_ratio=a.out_samplerate*16*c.channels_out/(1e3*a.VBR_mean_bitrate_kbps)),a.bWriteVbrTag||(a.findReplayGain=!1,a.decode_on_the_fly=!1,c.findPeakSample=!1),c.findReplayGain=a.findReplayGain,c.decode_on_the_fly=a.decode_on_the_fly,c.decode_on_the_fly&&(c.findPeakSample=!0),c.findReplayGain&&n.InitGainAnalysis(c.rgdata,a.out_samplerate)==GainAnalysis.INIT_GAIN_ANALYSIS_ERROR)return a.internal_flags=null,-6;switch(c.decode_on_the_fly&&!a.decode_only&&(c.hip!=null&&Z.hip_decode_exit(c.hip),c.hip=Z.hip_decode_init()),c.mode_gr=a.out_samplerate<=24e3?1:2,a.framesize=576*c.mode_gr,a.encoder_delay=Ne.ENCDELAY,c.resample_ratio=a.in_samplerate/a.out_samplerate,a.VBR){case Me.vbr_mt:case Me.vbr_rh:case Me.vbr_mtrh:{var _e=[5.7,6.5,7.3,8.2,10,11.9,13,14,15,16.5];a.compression_ratio=_e[a.VBR_q]}break;case Me.vbr_abr:a.compression_ratio=a.out_samplerate*16*c.channels_out/(1e3*a.VBR_mean_bitrate_kbps);break;default:a.compression_ratio=a.out_samplerate*16*c.channels_out/(1e3*a.brate);break}if(a.mode==MPEGMode.NOT_SET&&(a.mode=MPEGMode.JOINT_STEREO),a.highpassfreq>0?(c.highpass1=2*a.highpassfreq,a.highpasswidth>=0?c.highpass2=2*(a.highpassfreq+a.highpasswidth):c.highpass2=1*2*a.highpassfreq,c.highpass1/=a.out_samplerate,c.highpass2/=a.out_samplerate):(c.highpass1=0,c.highpass2=0),a.lowpassfreq>0?(c.lowpass2=2*a.lowpassfreq,a.lowpasswidth>=0?(c.lowpass1=2*(a.lowpassfreq-a.lowpasswidth),c.lowpass1<0&&(c.lowpass1=0)):c.lowpass1=1*2*a.lowpassfreq,c.lowpass1/=a.out_samplerate,c.lowpass2/=a.out_samplerate):(c.lowpass1=0,c.lowpass2=0),T(a),c.samplerate_index=r(a.out_samplerate,a),c.samplerate_index<0)return a.internal_flags=null,-1;if(a.VBR==Me.vbr_off){if(a.free_format)c.bitrate_index=0;else if(a.brate=K(a.brate,a.version,a.out_samplerate),c.bitrate_index=X(a.brate,a.version,a.out_samplerate),c.bitrate_index<=0)return a.internal_flags=null,-1}else c.bitrate_index=1;a.analysis&&(a.bWriteVbrTag=!1),c.pinfo!=null&&(a.bWriteVbrTag=!1),d.init_bit_stream_w(c);for(var he=c.samplerate_index+3*a.version+6*(a.out_samplerate<16e3?1:0),oe=0;oe<Ne.SBMAX_l+1;oe++)c.scalefac_band.l[oe]=m.sfBandIndex[he].l[oe];for(var oe=0;oe<Ne.PSFB21+1;oe++){var Le=(c.scalefac_band.l[22]-c.scalefac_band.l[21])/Ne.PSFB21,ze=c.scalefac_band.l[21]+oe*Le;c.scalefac_band.psfb21[oe]=ze}c.scalefac_band.psfb21[Ne.PSFB21]=576;for(var oe=0;oe<Ne.SBMAX_s+1;oe++)c.scalefac_band.s[oe]=m.sfBandIndex[he].s[oe];for(var oe=0;oe<Ne.PSFB12+1;oe++){var Le=(c.scalefac_band.s[13]-c.scalefac_band.s[12])/Ne.PSFB12,ze=c.scalefac_band.s[12]+oe*Le;c.scalefac_band.psfb12[oe]=ze}c.scalefac_band.psfb12[Ne.PSFB12]=192,a.version==1?c.sideinfo_len=c.channels_out==1?21:36:c.sideinfo_len=c.channels_out==1?13:21,a.error_protection&&(c.sideinfo_len+=2),p(a),c.Class_ID=J;{var We;for(We=0;We<19;We++)c.nsPsy.pefirbuf[We]=700*c.mode_gr*c.channels_out;a.ATHtype==-1&&(a.ATHtype=4)}switch(Yt(a.VBR_q<=9),Yt(a.VBR_q>=0),a.VBR){case Me.vbr_mt:a.VBR=Me.vbr_mtrh;case Me.vbr_mtrh:{a.useTemporal==null&&(a.useTemporal=!1),o.apply_preset(a,500-a.VBR_q*10,0),a.quality<0&&(a.quality=LAME_DEFAULT_QUALITY),a.quality<5&&(a.quality=0),a.quality>5&&(a.quality=5),c.PSY.mask_adjust=a.maskingadjust,c.PSY.mask_adjust_short=a.maskingadjust_short,a.experimentalY?c.sfb21_extra=!1:c.sfb21_extra=a.out_samplerate>44e3,c.iteration_loop=new VBRNewIterationLoop(h);break}case Me.vbr_rh:{o.apply_preset(a,500-a.VBR_q*10,0),c.PSY.mask_adjust=a.maskingadjust,c.PSY.mask_adjust_short=a.maskingadjust_short,a.experimentalY?c.sfb21_extra=!1:c.sfb21_extra=a.out_samplerate>44e3,a.quality>6&&(a.quality=6),a.quality<0&&(a.quality=LAME_DEFAULT_QUALITY),c.iteration_loop=new VBROldIterationLoop(h);break}default:{var we;c.sfb21_extra=!1,a.quality<0&&(a.quality=LAME_DEFAULT_QUALITY),we=a.VBR,we==Me.vbr_off&&(a.VBR_mean_bitrate_kbps=a.brate),o.apply_preset(a,a.VBR_mean_bitrate_kbps,0),a.VBR=we,c.PSY.mask_adjust=a.maskingadjust,c.PSY.mask_adjust_short=a.maskingadjust_short,we==Me.vbr_off?c.iteration_loop=new ia(h):c.iteration_loop=new ABRIterationLoop(h);break}}if(Yt(a.scale>=0),a.VBR!=Me.vbr_off){if(c.VBR_min_bitrate=1,c.VBR_max_bitrate=14,a.out_samplerate<16e3&&(c.VBR_max_bitrate=8),a.VBR_min_bitrate_kbps!=0&&(a.VBR_min_bitrate_kbps=K(a.VBR_min_bitrate_kbps,a.version,a.out_samplerate),c.VBR_min_bitrate=X(a.VBR_min_bitrate_kbps,a.version,a.out_samplerate),c.VBR_min_bitrate<0)||a.VBR_max_bitrate_kbps!=0&&(a.VBR_max_bitrate_kbps=K(a.VBR_max_bitrate_kbps,a.version,a.out_samplerate),c.VBR_max_bitrate=X(a.VBR_max_bitrate_kbps,a.version,a.out_samplerate),c.VBR_max_bitrate<0))return-1;a.VBR_min_bitrate_kbps=Ot.bitrate_table[a.version][c.VBR_min_bitrate],a.VBR_max_bitrate_kbps=Ot.bitrate_table[a.version][c.VBR_max_bitrate],a.VBR_mean_bitrate_kbps=Math.min(Ot.bitrate_table[a.version][c.VBR_max_bitrate],a.VBR_mean_bitrate_kbps),a.VBR_mean_bitrate_kbps=Math.max(Ot.bitrate_table[a.version][c.VBR_min_bitrate],a.VBR_mean_bitrate_kbps)}return a.tune&&(c.PSY.mask_adjust+=a.tune_value_a,c.PSY.mask_adjust_short+=a.tune_value_a),H(a),Yt(a.scale>=0),a.athaa_type<0?c.ATH.useAdjust=3:c.ATH.useAdjust=a.athaa_type,c.ATH.aaSensitivityP=Math.pow(10,a.athaa_sensitivity/-10),a.short_blocks==null&&(a.short_blocks=ki.short_block_allowed),a.short_blocks==ki.short_block_allowed&&(a.mode==MPEGMode.JOINT_STEREO||a.mode==MPEGMode.STEREO)&&(a.short_blocks=ki.short_block_coupled),a.quant_comp<0&&(a.quant_comp=1),a.quant_comp_short<0&&(a.quant_comp_short=0),a.msfix<0&&(a.msfix=0),a.exp_nspsytune=a.exp_nspsytune|1,a.internal_flags.nsPsy.attackthre<0&&(a.internal_flags.nsPsy.attackthre=Bi.NSATTACKTHRE),a.internal_flags.nsPsy.attackthre_s<0&&(a.internal_flags.nsPsy.attackthre_s=Bi.NSATTACKTHRE_S),Yt(a.scale>=0),a.scale<0&&(a.scale=1),a.ATHtype<0&&(a.ATHtype=4),a.ATHcurve<0&&(a.ATHcurve=4),a.athaa_loudapprox<0&&(a.athaa_loudapprox=2),a.interChRatio<0&&(a.interChRatio=0),a.useTemporal==null&&(a.useTemporal=!0),c.slot_lag=c.frac_SpF=0,a.VBR==Me.vbr_off&&(c.slot_lag=c.frac_SpF=(a.version+1)*72e3*a.brate%a.out_samplerate|0),m.iteration_init(a),S.psymodel_init(a),Yt(a.scale>=0),0};function u(a,c){(a.in_buffer_0==null||a.in_buffer_nsamples<c)&&(a.in_buffer_0=G0(c),a.in_buffer_1=G0(c),a.in_buffer_nsamples=c)}this.lame_encode_flush=function(a,c,M,L){var ee=a.internal_flags,ae=$r([2,1152]),le=0,re,_e,he,oe,Le=ee.mf_samples_to_encode-Ne.POSTDELAY,ze=l(a);if(ee.mf_samples_to_encode<1)return 0;for(re=0,a.in_samplerate!=a.out_samplerate&&(Le+=16*a.out_samplerate/a.in_samplerate),he=a.framesize-Le%a.framesize,he<576&&(he+=a.framesize),a.encoder_padding=he,oe=(Le+he)/a.framesize;oe>0&&le>=0;){var We=ze-ee.mf_size,we=a.frameNum;We*=a.in_samplerate,We/=a.out_samplerate,We>1152&&(We=1152),We<1&&(We=1),_e=L-re,L==0&&(_e=0),le=this.lame_encode_buffer(a,ae[0],ae[1],We,c,M,_e),M+=le,re+=le,oe-=we!=a.frameNum?1:0}if(ee.mf_samples_to_encode=0,le<0||(_e=L-re,L==0&&(_e=0),d.flush_bitstream(a),le=d.copy_buffer(ee,c,M,_e,1),le<0))return le;if(M+=le,re+=le,_e=L-re,L==0&&(_e=0),a.write_id3tag_automatic){if(v.id3tag_write_v1(a),le=d.copy_buffer(ee,c,M,_e,0),le<0)return le;re+=le}return re},this.lame_encode_buffer=function(a,c,M,L,ee,ae,le){var re=a.internal_flags,_e=[null,null];if(re.Class_ID!=J)return-3;if(L==0)return 0;u(re,L),_e[0]=re.in_buffer_0,_e[1]=re.in_buffer_1;for(var he=0;he<L;he++)_e[0][he]=c[he],re.channels_in>1&&(_e[1][he]=M[he]);return s(a,_e[0],_e[1],L,ee,ae,le)};function l(a){var c=Ne.BLKSIZE+a.framesize-Ne.FFTOFFSET;return c=Math.max(c,512+a.framesize-32),Yt(P0.MFSIZE>=c),c}function s(a,c,M,L,ee,ae,le){var re=a.internal_flags,_e=0,he,oe,Le,ze,We,we=[null,null],Ke=[null,null];if(re.Class_ID!=J)return-3;if(L==0)return 0;if(We=d.copy_buffer(re,ee,ae,le,0),We<0)return We;if(ae+=We,_e+=We,Ke[0]=c,Ke[1]=M,v0.NEQ(a.scale,0)&&v0.NEQ(a.scale,1))for(oe=0;oe<L;++oe)Ke[0][oe]*=a.scale,re.channels_out==2&&(Ke[1][oe]*=a.scale);if(v0.NEQ(a.scale_left,0)&&v0.NEQ(a.scale_left,1))for(oe=0;oe<L;++oe)Ke[0][oe]*=a.scale_left;if(v0.NEQ(a.scale_right,0)&&v0.NEQ(a.scale_right,1))for(oe=0;oe<L;++oe)Ke[1][oe]*=a.scale_right;if(a.num_channels==2&&re.channels_out==1)for(oe=0;oe<L;++oe)Ke[0][oe]=.5*(Ke[0][oe]+Ke[1][oe]),Ke[1][oe]=0;ze=l(a),we[0]=re.mfbuf[0],we[1]=re.mfbuf[1];for(var De=0;L>0;){var st=[null,null],a0=0,gt=0;st[0]=Ke[0],st[1]=Ke[1];var Ft=new _;if(P(a,we,st,De,L,Ft),a0=Ft.n_in,gt=Ft.n_out,re.findReplayGain&&!re.decode_on_the_fly&&n.AnalyzeSamples(re.rgdata,we[0],re.mf_size,we[1],re.mf_size,gt,re.channels_out)==GainAnalysis.GAIN_ANALYSIS_ERROR)return-6;if(L-=a0,De+=a0,re.channels_out==2,re.mf_size+=gt,Yt(re.mf_size<=P0.MFSIZE),re.mf_samples_to_encode<1&&(re.mf_samples_to_encode=Ne.ENCDELAY+Ne.POSTDELAY),re.mf_samples_to_encode+=gt,re.mf_size>=ze){var l0=le-_e;if(le==0&&(l0=0),he=V(a,we[0],we[1],ee,ae,l0),he<0)return he;for(ae+=he,_e+=he,re.mf_size-=a.framesize,re.mf_samples_to_encode-=a.framesize,Le=0;Le<re.channels_out;Le++)for(oe=0;oe<re.mf_size;oe++)we[Le][oe]=we[Le][oe+a.framesize]}}return Yt(L==0),_e}function V(a,c,M,L,ee,ae){var le=t.enc.lame_encode_mp3_frame(a,c,M,L,ee,ae);return a.frameNum++,le}function _(){this.n_in=0,this.n_out=0}function R(){this.num_used=0}function f(a,c){return c!=0?f(c,a%c):a}function j(a,c,M){var L=Math.PI*c;a/=M,a<0&&(a=0),a>1&&(a=1);var ee=a-.5,ae=.42-.5*Math.cos(2*a*Math.PI)+.08*Math.cos(4*a*Math.PI);return Math.abs(ee)<1e-9?L/Math.PI:ae*Math.sin(M*L*ee)/(Math.PI*M*ee)}function g(a,c,M,L,ee,ae,le,re,_e){var he=a.internal_flags,oe,Le=0,ze,We=a.out_samplerate/f(a.out_samplerate,a.in_samplerate);We>P0.BPC&&(We=P0.BPC);var we=Math.abs(he.resample_ratio-Math.floor(.5+he.resample_ratio))<1e-4?1:0,Ke=1/he.resample_ratio;Ke>1&&(Ke=1);var De=31;De%2==0&&--De,De+=we;var st=De+1;if(he.fill_buffer_resample_init==0){for(he.inbuf_old[0]=G0(st),he.inbuf_old[1]=G0(st),oe=0;oe<=2*We;++oe)he.blackfilt[oe]=G0(st);for(he.itime[0]=0,he.itime[1]=0,Le=0;Le<=2*We;Le++){var a0=0,gt=(Le-We)/(2*We);for(oe=0;oe<=De;oe++)a0+=he.blackfilt[Le][oe]=j(oe-gt,Ke,De);for(oe=0;oe<=De;oe++)he.blackfilt[Le][oe]/=a0}he.fill_buffer_resample_init=1}var Ft=he.inbuf_old[_e];for(ze=0;ze<L;ze++){var l0,$0;if(l0=ze*he.resample_ratio,Le=0|Math.floor(l0-he.itime[_e]),De+Le-De/2>=le)break;var gt=l0-he.itime[_e]-(Le+.5*(De%2));Yt(Math.abs(gt)<=.501),$0=0|Math.floor(gt*2*We+We+.5);var C0=0;for(oe=0;oe<=De;++oe){var Mt=0|oe+Le-De/2,q0;Yt(Mt<le),Yt(Mt+st>=0),q0=Mt<0?Ft[st+Mt]:ee[ae+Mt],C0+=q0*he.blackfilt[$0][oe]}c[M+ze]=C0}if(re.num_used=Math.min(le,De+Le-De/2),he.itime[_e]+=re.num_used-ze*he.resample_ratio,re.num_used>=st)for(oe=0;oe<st;oe++)Ft[oe]=ee[ae+re.num_used+oe-st];else{var Xi=st-re.num_used;for(oe=0;oe<Xi;++oe)Ft[oe]=Ft[oe+re.num_used];for(Le=0;oe<st;++oe,++Le)Ft[oe]=ee[ae+Le];Yt(Le==re.num_used)}return ze}function P(a,c,M,L,ee,ae){var le=a.internal_flags;if(le.resample_ratio<.9999||le.resample_ratio>1.0001)for(var re=0;re<le.channels_out;re++){var _e=new R;ae.n_out=g(a,c[re],le.mf_size,a.framesize,M[re],L,ee,_e,re),ae.n_in=_e.num_used}else{ae.n_out=Math.min(a.framesize,ee),ae.n_in=ae.n_out;for(var he=0;he<ae.n_out;++he)c[0][le.mf_size+he]=M[0][L+he],le.channels_out==2&&(c[1][le.mf_size+he]=M[1][L+he])}}}var sa=Qe;const na=bi(sa),ra=(t,e=4294967295,i=79764919)=>{const n=new Int32Array(256);let d,o,m,h=e;for(d=0;d<256;d++){for(m=d<<24,o=8;o>0;--o)m=2147483648&m?m<<1^i:m<<1;n[d]=m}for(d=0;d<t.length;d++)h=h<<8^n[255&(h>>24^t[d])];return h},Ys=(t,e=ra)=>{const i=U=>new Uint8Array(U.length/2).map((k,I)=>parseInt(U.substring(2*I,2*(I+1)),16)),n=U=>i(U)[0],d=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach((U,k)=>d.set(U,k));const o=new Uint8Array(t.length);let m,h,S,W=!1,v=0,Z=42,O=t.length>13&&t.substring(0,9)==="dynEncode",w=0;O&&(w=11,h=n(t.substring(9,w)),h<=1&&(w+=2,Z=n(t.substring(11,w))),h===1&&(w+=8,S=(U=>new DataView(i(U).buffer).getInt32(0,!0))(t.substring(13,w))));const N=256-Z;for(let U=w;U<t.length;U++)if(m=t.charCodeAt(U),m!==61||W){if(m===92&&U<t.length-5&&O){const k=t.charCodeAt(U+1);k!==117&&k!==85||(m=parseInt(t.substring(U+2,U+6),16),U+=5)}if(m>255){const k=d.get(m);k&&(m=k+127)}W&&(W=!1,m-=64),o[v++]=m<Z&&m>0?m+N:m-Z}else W=!0;const J=o.subarray(0,v);if(O&&h===1){const U=e(J);if(U!==S){const k="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",k+`
96
96
  `,"Expected: "+S+"; Got: "+U+`
97
- `,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(k)}}return J};function qe(){const t=Uint8Array,e=Float32Array;qe.modules||Object.defineProperties(qe,{modules:{value:new WeakMap},setModule:{value(i,n){qe.modules.set(i,Promise.resolve(n))}},getModule:{value(i,n){let d=qe.modules.get(i);return d||(n?d=WebAssembly.compile(Ys(n)):(n=i.wasm,d=qe.inflateDynEncodeString(n).then(o=>WebAssembly.compile(o))),qe.modules.set(i,d)),d}},concatFloat32:{value(i,n){let d=new e(n),o=0,m=0;for(;o<i.length;)d.set(i[o],m),m+=i[o++].length;return d}},getDecodedAudio:{value:(i,n,d,o,m)=>({errors:i,channelData:n,samplesDecoded:d,sampleRate:o,bitDepth:m})},getDecodedAudioMultiChannel:{value(i,n,d,o,m,h){let S=[],W,v;for(W=0;W<d;W++){const Z=[];for(v=0;v<n.length;)Z.push(n[v++][W]||[]);S.push(qe.concatFloat32(Z,o))}return qe.getDecodedAudio(i,S,o,m,h)}},inflateDynEncodeString:{value(i){return i=Ys(i),new Promise(n=>{const d=String.raw`dynEncode012804c7886d(‰›•)((()>+ˆ*§§)§ˆ,§§§§)§ˆ+§§§)§+.-()(*)-+)(ˆ.7*§)i¸¸,3§(i¸¸,3/G+.••—š¡*(,˜ŽŽ(,3‡‡‰˜‡Š‰›+)2å:-œ),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)’^*<H,H(P*4’U((I-H(H*i0’J,^*DH+H-H*œšI+H,I*4)33H(H*H)“^*DH(H+H)^*@H+i§H)œi§›™3æ*).§K(iH“I/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)œ’J.H.W)(i)’c)(H,i)“I,H-i*’I-4)33i(I.*hH(V)(H+n5(H(i*’I-i(I,i)I.+hH,i*’J+iHn,hi(I-i*I,+hH,H/’H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)œ’J(H(V)(J(i)’c)(H)H(i)œ’H,c)(3H*i*’I*H,i)’I,4(3(-H(H,’W)(H-’I-H,i*’I,4)3(3(3H,H-’I1H+I,H.i)œH1V)(“J.i(v5(33H.-H(H,’i(c)(H,i*’I,4)333–)-§i*I*+§H*iHn,hiž73H,H(i)8(H+šJ+H)P*(H*’V)(J-“r,§H)P*,H.i)œ’H+H,“i)œ’V)(-H*i*’I*H+i)œI+H-H.’I.H,H-’i)œI,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7’H,c)(i)H+i´8’W)(œH,’I,H+i*’I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,’H-b((3H(P*0i)’I.4)3H-i¨*n5*H-iÅ*s,hiž73H-i)œJ+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)œJ+i¸7’V)(H(H+iø7’V)(8(’J/H(P*0J+s,hi73H+H,H.’J,’I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+’H.H+H/“’U((b((H(H(P*0i)’J+^*0H,i)“I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)žc)(H,i*’I,H+i)’I+4)33i)I-3H-3!2)0§K(i2“J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,’J(H,P*8J/s50H,H.i+’J0^*<i¦I*H.H,P*4J1’J.U(*H.U((J2›i')o5/H.U()I.H,H(^*<H0H1’U((H.i0œJ.i§›i0ži')™o5/H/H.H2šJ*H(’J.q50H,P*0J/H*’I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0’H(H1’U((b((H/i)’I/H(i)’I(H*i)“I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-’H(’i0c)(H(i*’I(4)33iè1i1H,i-’iÈ*8)Bi(I(+hH(ido,hH,i-’H(’i-c)(H(i*’I(4)33iÈ6iè6H,i-’iF8)BiØ1i)b((41-H,i-’H(’i/c)(H(i*’I(4)3(3(-H,i-’H(’i1c)(H(i*’I(4)3(3(-H,i-’H(’i0c)(H(i*’I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)’^*TH,H,iø-’^*PH,H,iX’^*LH,H,i(’^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iErš5)H(i©*’I1H-i)’I0i(i;H.i,’J(i(H(i(rCJ(“J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-’H-V)(i)œ’H,i+8(c)(H/i)“I/H-i*’I-H*i)’I*4)-H(i)œi¨1’I/+hH(H*o,hH,i-’H/V)(i)œ’i(c)(H/i*’I/H(i)’I(4)33i¤I*H,iø-’H,i¸)’H,i-’i;8)5+H0H1’I2i(I-+hH-H2p,hH,H,iP’8*J*i(p5-H*i7u,hH,i-’H-i)œ’H*c)(H-i)’I-4*3i(I/i+I.i+I(*h*h*hH*i8“6*(*)3H-m,hi£I*403H-i)œH,’W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.’J(H-’J.p,hi¢I*4.3H,i-’H-i)œ’I*+hH(,hH*H/c)(H*i*’I*H(i)“I(4)-H.I-4+3(3(33H,W)1m,hiŸI*4,3H,iø-’H,i¸)’H,i-’H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-’o5,3H,i(’H,iX’H,i-’H1i)œ’H08)J(,hi I*H(i(p5,H0H,V)šH,V)˜’o5,3H,H,iP’H,iH’8+I*4+3(3(3H,i$6i¬78+I*3H*H3šm5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2’L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(‹(›(«(Ë(ë( (*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7œ‰šœ‡Ž‰œš›*S7•œ‰Š”U”—Љ”›S0›‘–U œ`;qe.getModule(qe,d).then(o=>WebAssembly.instantiate(o,{})).then(({exports:o})=>{const m=new Map(Object.entries(o)),h=m.get("puff"),S=m.get("memory").buffer,W=new t(S),v=new DataView(S);let Z=m.get("__heap_base");const O=i.length,w=Z;Z+=4,v.setInt32(w,O,!0);const N=Z;Z+=O,W.set(i,N);const J=Z;Z+=4,v.setInt32(J,W.byteLength-Z,!0),h(Z,J,N,w),n(W.slice(Z,Z+v.getInt32(J,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(i,n,d)=>{let o=[],m=0;for(;m<n;)o.push(i.slice(m*d,m++*d+d));return o},this.allocateTypedArray=(i,n,d=!0)=>{const o=this._wasm.malloc(n.BYTES_PER_ELEMENT*i);return d&&this._pointers.add(o),{ptr:o,len:i,buf:new n(this._wasm.HEAP,o,i)}},this.free=()=>{this._pointers.forEach(i=>{this._wasm.free(i)}),this._pointers.clear()},this.codeToString=i=>{const n=[],d=new Uint8Array(this._wasm.HEAP);for(let o=d[i];o!==0;o=d[++i])n.push(o);return String.fromCharCode.apply(null,n)},this.addError=(i,n,d,o,m,h)=>{i.push({message:n,frameLength:d,frameNumber:o,inputBytes:m,outputSamples:h})},this.instantiate=(i,n)=>(n&&qe.setModule(i,n),this._wasm=new i(qe).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var ra=Worker;const aa=bi(ra),la=()=>globalThis.Worker||aa;class oa extends la(){constructor(e,i,n,d){qe.modules||new qe;let o=qe.modules.get(n);if(!o){let m="text/javascript",h,S=`'use strict';(${((W,v,Z)=>{let O,w,N=new Promise(J=>{w=J});self.onmessage=({data:{id:J,command:U,data:k}})=>{let I=N,r={id:J},K;U==="init"?(Object.defineProperties(W,{WASMAudioDecoderCommon:{value:v},EmscriptenWASM:{value:Z},module:{value:k.module},isWebWorker:{value:!0}}),O=new W(k.options),w()):U==="free"?O.free():U==="ready"?I=I.then(()=>O.ready):U==="reset"?I=I.then(()=>O.reset()):(Object.assign(r,O[U](Array.isArray(k)?k.map(X=>new Uint8Array(X)):new Uint8Array(k))),K=r.channelData?r.channelData.map(X=>X.buffer):[]),I.then(()=>self.postMessage(r,K))}}).toString()})(${n}, ${qe}, ${d})`;try{h=typeof process.versions.node<"u"}catch{}o=h?`data:${m};base64,${Buffer.from(S).toString("base64")}`:URL.createObjectURL(new Blob([S],{type:m})),qe.modules.set(n,o)}super(o,{name:i}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:m})=>{const{id:h,...S}=m;this._enqueuedOperations.get(h)(S),this._enqueuedOperations.delete(h)},new d(qe).getModule().then(m=>{this.postToDecoder("init",{module:m,options:e})})}async postToDecoder(e,i){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:i}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}}const dn=(t,e)=>{Object.defineProperty(t,"name",{value:e})};function w0(t){var e=L=>console.log(L),i=L=>console.error(L);function n(){}function d(L){throw L}var o,m,h;function S(){var L=h.buffer;o=new Uint8Array(L),m=new Uint32Array(L),new BigInt64Array(L),new BigUint64Array(L)}function W(){d("missing function: INT123_compat_close")}W.stub=!0;var v=()=>d(""),Z=()=>{},O={},w=L=>L(),N=()=>performance.now(),J=(L,ee)=>{if(O[L]&&(clearTimeout(O[L].id),delete O[L]),!ee)return 0;var ae=setTimeout(()=>{delete O[L],w(()=>a(L,N()))},ee);return O[L]={id:ae,timeout_ms:ee},0},U=L=>(o.length,!1),k=L=>52,I=(L,ee,ae,le)=>52;function r(L,ee,ae,le){return 70}for(var K=[null,[],[]],X=new TextDecoder,A=(L,ee=0,ae=NaN)=>{for(var le=ee+ae,re=ee;L[re]&&!(re>=le);)++re;return X.decode(L.buffer?L.subarray(ee,re):new Uint8Array(L.slice(ee,re)))},T=(L,ee)=>{var ae=K[L];ee===0||ee===10?((L===1?e:i)(A(ae)),ae.length=0):ae.push(ee)},H=(L,ee,ae,le)=>{for(var re=0,_e=0;_e<ae;_e++){var he=m[ee>>2],oe=m[ee+4>>2];ee+=8;for(var Le=0;Le<oe;Le++)T(L,o[he+Le]);re+=oe}return m[le>>2]=re,0},p=L=>{throw`exit(${L})`},u=new Uint8Array(123),l=25;l>=0;--l)u[48+l]=52+l,u[65+l]=l,u[97+l]=26+l;u[43]=62,u[47]=63;var s={j:W,c:v,b:Z,d:J,e:U,g:k,h:I,i:r,f:H,a:p};function V(L){_=L.m,R=L.n,f=L.p,j=L.q,g=L.r,P=L.s,a=L.t}var _,R,f,j,g,P,a;function c(L){L.l()}w0.wasm||Object.defineProperty(w0,"wasm",{get:()=>String.raw`dynEncode01dd21c54d17j¢>¡-é!Dt 9&WŽ U§®}»/6|ºì,‰ÜÐ*ÝÙÂ:„C#ÈEÅõkµÄqÁ¹BCdq$GPPxÚý—¾–ý­B{jð„‹=M¸ìOÑ-Ia,¢á‘Å Ó®µôžEù= *f®Ø"þèҁ ËøÓÉÄà󫤡ù|þ«ôñ«´ÁœÜú¤«ìe«p±§W6(¶‰“¢ÏÑIZ»¥'T28€òÞ 6<†±*h²ëHñ'q­‡©ññ+9” LÏ8n'!ò©åP„.Þot__¹§ü 0J]ío Z ‚óÚºM´–õjÈ¿n)僽ðN\]óÐÖ]±<¿_>»5ÛÿŽ-'2[HÕo×m}&­Ÿx‘Îÿú&ô쯠/ý§i™БÈR“B÷¸žM°G÷;;T8k‹†Bš7 ЯQûzL´¨ÛÍDš9$‹EnA¶¸ûÃv4òCû㨾YcÐ>t2çZé†Â{‘˜¬½«K­ØB6cvpR=}vªšˆœã4ÀP¿Ø»ˆä4ûwѽ®ü—ªä~ԟ±CÇJÓžª±.NÉ\*±8jècª=  |†_VÀK×ã2)§}¼…gb/!ôÀV~–: 0-ÈÀu²Ì/@LO‰*ÃL1?çRMljÀw
97
+ `,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(k)}}return J};function qe(){const t=Uint8Array,e=Float32Array;qe.modules||Object.defineProperties(qe,{modules:{value:new WeakMap},setModule:{value(i,n){qe.modules.set(i,Promise.resolve(n))}},getModule:{value(i,n){let d=qe.modules.get(i);return d||(n?d=WebAssembly.compile(Ys(n)):(n=i.wasm,d=qe.inflateDynEncodeString(n).then(o=>WebAssembly.compile(o))),qe.modules.set(i,d)),d}},concatFloat32:{value(i,n){let d=new e(n),o=0,m=0;for(;o<i.length;)d.set(i[o],m),m+=i[o++].length;return d}},getDecodedAudio:{value:(i,n,d,o,m)=>({errors:i,channelData:n,samplesDecoded:d,sampleRate:o,bitDepth:m})},getDecodedAudioMultiChannel:{value(i,n,d,o,m,h){let S=[],W,v;for(W=0;W<d;W++){const Z=[];for(v=0;v<n.length;)Z.push(n[v++][W]||[]);S.push(qe.concatFloat32(Z,o))}return qe.getDecodedAudio(i,S,o,m,h)}},inflateDynEncodeString:{value(i){return i=Ys(i),new Promise(n=>{const d=String.raw`dynEncode012804c7886d(‰›•)((()>+ˆ*§§)§ˆ,§§§§)§ˆ+§§§)§+.-()(*)-+)(ˆ.7*§)i¸¸,3§(i¸¸,3/G+.••—š¡*(,˜ŽŽ(,3‡‡‰˜‡Š‰›+)2å:-œ),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)’^*<H,H(P*4’U((I-H(H*i0’J,^*DH+H-H*œšI+H,I*4)33H(H*H)“^*DH(H+H)^*@H+i§H)œi§›™3æ*).§K(iH“I/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)œ’J.H.W)(i)’c)(H,i)“I,H-i*’I-4)33i(I.*hH(V)(H+n5(H(i*’I-i(I,i)I.+hH,i*’J+iHn,hi(I-i*I,+hH,H/’H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)œ’J(H(V)(J(i)’c)(H)H(i)œ’H,c)(3H*i*’I*H,i)’I,4(3(-H(H,’W)(H-’I-H,i*’I,4)3(3(3H,H-’I1H+I,H.i)œH1V)(“J.i(v5(33H.-H(H,’i(c)(H,i*’I,4)333–)-§i*I*+§H*iHn,hiž73H,H(i)8(H+šJ+H)P*(H*’V)(J-“r,§H)P*,H.i)œ’H+H,“i)œ’V)(-H*i*’I*H+i)œI+H-H.’I.H,H-’i)œI,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7’H,c)(i)H+i´8’W)(œH,’I,H+i*’I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,’H-b((3H(P*0i)’I.4)3H-i¨*n5*H-iÅ*s,hiž73H-i)œJ+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)œJ+i¸7’V)(H(H+iø7’V)(8(’J/H(P*0J+s,hi73H+H,H.’J,’I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+’H.H+H/“’U((b((H(H(P*0i)’J+^*0H,i)“I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)žc)(H,i*’I,H+i)’I+4)33i)I-3H-3!2)0§K(i2“J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,’J(H,P*8J/s50H,H.i+’J0^*<i¦I*H.H,P*4J1’J.U(*H.U((J2›i')o5/H.U()I.H,H(^*<H0H1’U((H.i0œJ.i§›i0ži')™o5/H/H.H2šJ*H(’J.q50H,P*0J/H*’I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0’H(H1’U((b((H/i)’I/H(i)’I(H*i)“I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-’H(’i0c)(H(i*’I(4)33iè1i1H,i-’iÈ*8)Bi(I(+hH(ido,hH,i-’H(’i-c)(H(i*’I(4)33iÈ6iè6H,i-’iF8)BiØ1i)b((41-H,i-’H(’i/c)(H(i*’I(4)3(3(-H,i-’H(’i1c)(H(i*’I(4)3(3(-H,i-’H(’i0c)(H(i*’I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)’^*TH,H,iø-’^*PH,H,iX’^*LH,H,i(’^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iErš5)H(i©*’I1H-i)’I0i(i;H.i,’J(i(H(i(rCJ(“J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-’H-V)(i)œ’H,i+8(c)(H/i)“I/H-i*’I-H*i)’I*4)-H(i)œi¨1’I/+hH(H*o,hH,i-’H/V)(i)œ’i(c)(H/i*’I/H(i)’I(4)33i¤I*H,iø-’H,i¸)’H,i-’i;8)5+H0H1’I2i(I-+hH-H2p,hH,H,iP’8*J*i(p5-H*i7u,hH,i-’H-i)œ’H*c)(H-i)’I-4*3i(I/i+I.i+I(*h*h*hH*i8“6*(*)3H-m,hi£I*403H-i)œH,’W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.’J(H-’J.p,hi¢I*4.3H,i-’H-i)œ’I*+hH(,hH*H/c)(H*i*’I*H(i)“I(4)-H.I-4+3(3(33H,W)1m,hiŸI*4,3H,iø-’H,i¸)’H,i-’H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-’o5,3H,i(’H,iX’H,i-’H1i)œ’H08)J(,hi I*H(i(p5,H0H,V)šH,V)˜’o5,3H,H,iP’H,iH’8+I*4+3(3(3H,i$6i¬78+I*3H*H3šm5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2’L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(‹(›(«(Ë(ë( (*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7œ‰šœ‡Ž‰œš›*S7•œ‰Š”U”—Љ”›S0›‘–U œ`;qe.getModule(qe,d).then(o=>WebAssembly.instantiate(o,{})).then(({exports:o})=>{const m=new Map(Object.entries(o)),h=m.get("puff"),S=m.get("memory").buffer,W=new t(S),v=new DataView(S);let Z=m.get("__heap_base");const O=i.length,w=Z;Z+=4,v.setInt32(w,O,!0);const N=Z;Z+=O,W.set(i,N);const J=Z;Z+=4,v.setInt32(J,W.byteLength-Z,!0),h(Z,J,N,w),n(W.slice(Z,Z+v.getInt32(J,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(i,n,d)=>{let o=[],m=0;for(;m<n;)o.push(i.slice(m*d,m++*d+d));return o},this.allocateTypedArray=(i,n,d=!0)=>{const o=this._wasm.malloc(n.BYTES_PER_ELEMENT*i);return d&&this._pointers.add(o),{ptr:o,len:i,buf:new n(this._wasm.HEAP,o,i)}},this.free=()=>{this._pointers.forEach(i=>{this._wasm.free(i)}),this._pointers.clear()},this.codeToString=i=>{const n=[],d=new Uint8Array(this._wasm.HEAP);for(let o=d[i];o!==0;o=d[++i])n.push(o);return String.fromCharCode.apply(null,n)},this.addError=(i,n,d,o,m,h)=>{i.push({message:n,frameLength:d,frameNumber:o,inputBytes:m,outputSamples:h})},this.instantiate=(i,n)=>(n&&qe.setModule(i,n),this._wasm=new i(qe).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var aa=Worker;const la=bi(aa),oa=()=>globalThis.Worker||la;class ca extends oa(){constructor(e,i,n,d){qe.modules||new qe;let o=qe.modules.get(n);if(!o){let m="text/javascript",h,S=`'use strict';(${((W,v,Z)=>{let O,w,N=new Promise(J=>{w=J});self.onmessage=({data:{id:J,command:U,data:k}})=>{let I=N,r={id:J},K;U==="init"?(Object.defineProperties(W,{WASMAudioDecoderCommon:{value:v},EmscriptenWASM:{value:Z},module:{value:k.module},isWebWorker:{value:!0}}),O=new W(k.options),w()):U==="free"?O.free():U==="ready"?I=I.then(()=>O.ready):U==="reset"?I=I.then(()=>O.reset()):(Object.assign(r,O[U](Array.isArray(k)?k.map(X=>new Uint8Array(X)):new Uint8Array(k))),K=r.channelData?r.channelData.map(X=>X.buffer):[]),I.then(()=>self.postMessage(r,K))}}).toString()})(${n}, ${qe}, ${d})`;try{h=typeof process.versions.node<"u"}catch{}o=h?`data:${m};base64,${Buffer.from(S).toString("base64")}`:URL.createObjectURL(new Blob([S],{type:m})),qe.modules.set(n,o)}super(o,{name:i}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:m})=>{const{id:h,...S}=m;this._enqueuedOperations.get(h)(S),this._enqueuedOperations.delete(h)},new d(qe).getModule().then(m=>{this.postToDecoder("init",{module:m,options:e})})}async postToDecoder(e,i){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:i}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}}const dn=(t,e)=>{Object.defineProperty(t,"name",{value:e})};function w0(t){var e=L=>console.log(L),i=L=>console.error(L);function n(){}function d(L){throw L}var o,m,h;function S(){var L=h.buffer;o=new Uint8Array(L),m=new Uint32Array(L),new BigInt64Array(L),new BigUint64Array(L)}function W(){d("missing function: INT123_compat_close")}W.stub=!0;var v=()=>d(""),Z=()=>{},O={},w=L=>L(),N=()=>performance.now(),J=(L,ee)=>{if(O[L]&&(clearTimeout(O[L].id),delete O[L]),!ee)return 0;var ae=setTimeout(()=>{delete O[L],w(()=>a(L,N()))},ee);return O[L]={id:ae,timeout_ms:ee},0},U=L=>(o.length,!1),k=L=>52,I=(L,ee,ae,le)=>52;function r(L,ee,ae,le){return 70}for(var K=[null,[],[]],X=new TextDecoder,A=(L,ee=0,ae=NaN)=>{for(var le=ee+ae,re=ee;L[re]&&!(re>=le);)++re;return X.decode(L.buffer?L.subarray(ee,re):new Uint8Array(L.slice(ee,re)))},T=(L,ee)=>{var ae=K[L];ee===0||ee===10?((L===1?e:i)(A(ae)),ae.length=0):ae.push(ee)},H=(L,ee,ae,le)=>{for(var re=0,_e=0;_e<ae;_e++){var he=m[ee>>2],oe=m[ee+4>>2];ee+=8;for(var Le=0;Le<oe;Le++)T(L,o[he+Le]);re+=oe}return m[le>>2]=re,0},p=L=>{throw`exit(${L})`},u=new Uint8Array(123),l=25;l>=0;--l)u[48+l]=52+l,u[65+l]=l,u[97+l]=26+l;u[43]=62,u[47]=63;var s={j:W,c:v,b:Z,d:J,e:U,g:k,h:I,i:r,f:H,a:p};function V(L){_=L.m,R=L.n,f=L.p,j=L.q,g=L.r,P=L.s,a=L.t}var _,R,f,j,g,P,a;function c(L){L.l()}w0.wasm||Object.defineProperty(w0,"wasm",{get:()=>String.raw`dynEncode01dd21c54d17j¢>¡-é!Dt 9&WŽ U§®}»/6|ºì,‰ÜÐ*ÝÙÂ:„C#ÈEÅõkµÄqÁ¹BCdq$GPPxÚý—¾–ý­B{jð„‹=M¸ìOÑ-Ia,¢á‘Å Ó®µôžEù= *f®Ø"þèҁ ËøÓÉÄà󫤡ù|þ«ôñ«´ÁœÜú¤«ìe«p±§W6(¶‰“¢ÏÑIZ»¥'T28€òÞ 6<†±*h²ëHñ'q­‡©ññ+9” LÏ8n'!ò©åP„.Þot__¹§ü 0J]ío Z ‚óÚºM´–õjÈ¿n)僽ðN\]óÐÖ]±<¿_>»5ÛÿŽ-'2[HÕo×m}&­Ÿx‘Îÿú&ô쯠/ý§i™БÈR“B÷¸žM°G÷;;T8k‹†Bš7 ЯQûzL´¨ÛÍDš9$‹EnA¶¸ûÃv4òCû㨾YcÐ>t2çZé†Â{‘˜¬½«K­ØB6cvpR=}vªšˆœã4ÀP¿Ø»ˆä4ûwѽ®ü—ªä~ԟ±CÇJÓžª±.NÉ\*±8jècª=  |†_VÀK×ã2)§}¼…gb/!ôÀV~–: 0-ÈÀu²Ì/@LO‰*ÃL1?çRMljÀw
98
98
  K<î ¼G$ý¿‡¸É´g¢ô°rTªS¨З²éf•ªm½y
99
99
  |~ ¦À?Ä;Ä¡gmjê'IhÅüO0Žb ¢¹†1 ÜΝhj÷ÓÚ:rþ^›KÓYÙº”ÊŽ¹«IˆÚ
100
100
  “Ú©»WõªÁÞ\vvw+šÔ^¤hÄ|´Dl*6¹œ2ÌðPF—¼)\HˆQc”Qu%Ê,Jd¾7«Ô=M º®nø½ÞÈö6מ­Á?ì EôQÞ¡™éRÝ¡W*m‹uú®¨ ñsÊWÂÌ5Î= vŸ[x¨}\¦Æã£Q>wÀB•Á×(~;Þcí¹«Š
@@ -276,37 +276,37 @@ g¹¯´™†ì±Ñp·¯Æúj!Ùê3û|©Ña°9èóPSà‡j¨ÎZ®%Wç–Ç&Õ¹
276
276
  CU¡ÍÌ]Âuf¸i^ÍN¸<ößiIÒzWš’HÈDŒkœòPë­Kã.í»+{J¸…V0¸“J¸“J¸Ã³“J#’ŠÄ8+KÉA¥NA–ú¬ Í)šôš¼¡%°|ù(‹JPs S±E¯j=M-˜2އ[6+Ïû¿²h$ɳ0˜= ê™L,§D1ÌJÈB„„rÚœ YÏxSžòRFxž¤ŒÚK+šÐÃ:„‚&öôê˜GºŸ´;̈ú‚Ïà7Кr´Í6I)ó÷~~àrOŠy­E \ÔfËøª¬ÓFܧìpQ¯{‘¨EO:.ÆÔEÊm‘¢Ä‘¹#{±
277
277
  r÷|‹ú–“
278
278
  Œ*ÔàñT'’ 8KpLjúwù@Q(HÎj{”¥¦Sٝ01TÀ–7F<˜â„<$êÐÉSLVa·ËE–k´&[[ʉׇzôEtF@Ë9KV©ÇEÙK¬)„GŽ4WېWv3ýn§ÁçÂxârjŠzš= €phˆx˜d„t”lŒ|\=}-M¥ìÉÜ\¾Ù%Á?vqš³¾Ãð6†æø Ç]\C"…3ú¹ï5ÞÞçpXç)z²^Rû÷üoõ‚{µ(âw]WT½Ïm§Cö›4&t]Ât[bìÓ®\%óêëÌÔfìW´@¨ÁÚ_ª÷n xV½é9]Mà˝àUß Í/»äµÝ<½äÙÝåáýõaY¿DÅìZÀìØüÛ£üÞÿÍ$Z-×8Ò\ Üb½RLhuñ®äâøþsBV_»ë»Um3
279
- ½ÇaztŸÅò¬¼Åâ`});var M={a:s};this.setModule=L=>{t.setModule(w0,L)},this.getModule=()=>t.getModule(w0),this.instantiate=()=>(this.getModule().then(L=>WebAssembly.instantiate(L,M)).then(L=>{const ee=L.exports;V(ee),h=ee.k,S(),c(ee),n()}),this.ready=new Promise(L=>{n=L}).then(()=>{this.HEAP=h.buffer,this.malloc=_,this.free=R,this.mpeg_decoder_feed=j,this.mpeg_decoder_read=g,this.mpeg_frame_decoder_create=f,this.mpeg_frame_decoder_destroy=P}),this)}function K0(t={}){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(e=>{this._common=e,this._sampleRate=0,this._inputBytes=0,this._outputSamples=0,this._frameNumber=0,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._output=this._common.allocateTypedArray(this._outputSize,Float32Array);const i=this._common.allocateTypedArray(1,Uint32Array);this._samplesDecodedPtr=this._common.allocateTypedArray(1,Uint32Array),this._sampleRatePtr=this._common.allocateTypedArray(1,Uint32Array),this._errorStringPtr=this._common.allocateTypedArray(1,Uint32Array);const n=this._common.wasm.mpeg_frame_decoder_create(i.ptr,t.enableGapless===!1?0:1);if(n)throw Error(this._getErrorMessage(n));this._decoder=i.buf[0]}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this._getErrorMessage=e=>e+" "+this._common.codeToString(this._errorStringPtr.buf[0]),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.mpeg_frame_decoder_destroy(this._decoder),this._common.wasm.free(this._decoder),this._common.free()},this.decode=e=>{let i=[],n=[],d=0;if(!(e instanceof Uint8Array))throw Error("Data to decode must be Uint8Array. Instead got "+typeof e);e:for(let o=0,m=0;o<e.length;o+=m){const h=e.subarray(o,this._input.len+o);m=h.length,this._inputBytes+=m,this._input.buf.set(h);let S=this._common.wasm.mpeg_decoder_feed(this._decoder,this._input.ptr,m);if(S===-10)continue e;t:for(;;){this._samplesDecodedPtr.buf[0]=0,S=this._common.wasm.mpeg_decoder_read(this._decoder,this._output.ptr,this._output.len,this._samplesDecodedPtr.ptr,this._sampleRatePtr.ptr,this._errorStringPtr.ptr);const W=this._samplesDecodedPtr.buf[0];if(this._outputSamples+=W,W&&(d+=W,i.push([this._output.buf.slice(0,W),this._output.buf.slice(W,W*2)])),S==-11)continue t;if(S===-10)continue e;if(S){const v=this._getErrorMessage(S);console.error("mpg123-decoder: "+v),this._common.addError(n,v,0,this._frameNumber,this._inputBytes,this._outputSamples)}}}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,i,2,d,this._sampleRatePtr.buf[0])},this.decodeFrame=e=>{const i=this.decode(e);return this._frameNumber++,i},this.decodeFrames=e=>{let i=[],n=[],d=0,o=0;for(;o<e.length;){const m=this.decodeFrame(e[o++]);i.push(m.channelData),n=n.concat(m.errors),d+=m.samplesDecoded}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,i,2,d,this._sampleRatePtr.buf[0])},this._isWebWorker=K0.isWebWorker,this._WASMAudioDecoderCommon=K0.WASMAudioDecoderCommon||qe,this._EmscriptenWASM=K0.EmscriptenWASM||w0,this._module=K0.module,this._inputSize=2**16,this._outputSize=2889*16*2,this._ready=this._init(),this}class mn extends oa{constructor(e){super(e,"mpg123-decoder",K0,w0)}async decode(e){return this.postToDecoder("decode",e)}async decodeFrame(e){return this.postToDecoder("decodeFrame",e)}async decodeFrames(e){return this.postToDecoder("decodeFrames",e)}}dn(K0,"MPEGDecoder");dn(mn,"MPEGDecoderWebWorker");globalThis.MPEGMode=Pn;globalThis.Lame=sa;globalThis.BitStream=jr;class ca{constructor(e){this.config=e,this.mp3encoder=new Fn.Mp3Encoder(e.channels,e.sampleRate,e.bitRate),this.encodedData=[]}convertAudioDataToInt16(e){const i=e.numberOfChannels,n=e.numberOfFrames,d=As(e),o=new Int16Array(n*i);for(let m=0;m<n;m++)for(let h=0;h<i;h++){const S=Math.max(-1,Math.min(1,d[h][m]));o[m*i+h]=S*32767}return o}processBatch(e){const i=this.convertAudioDataToInt16(e);let n;if(this.config.channels===2){const d=new Int16Array(i.length/2),o=new Int16Array(i.length/2);for(let m=0;m<i.length/2;m++)d[m]=i[m*2],o[m]=i[m*2+1];n=this.mp3encoder.encodeBuffer(d,o)}else n=this.mp3encoder.encodeBuffer(i);return n}finish(){const e=this.mp3encoder.flush();e.length>0&&this.encodedData.push(e);const i=this.encodedData.reduce((o,m)=>o+m.length,0),n=new Uint8Array(i);let d=0;for(const o of this.encodedData)n.set(o,d),d+=o.length;return this.encodedData=[],new Blob([n],{type:"audio/mp3"})}getEncodedSize(){return this.encodedData.reduce((e,i)=>e+i.length,0)}}class da{constructor(){this.isReady=!1}async initialize(){if(!this.isReady)try{this.decoder=new mn,await this.decoder.ready,this.isReady=!0}catch(e){throw console.error("Failed to initialize MP3 decoder:",e),e}}async toSamples(e){this.isReady||await this.initialize();try{const i=await this.decoder.decode(new Uint8Array(e)),{channelData:n,sampleRate:d}=i,o=n.length;return{channels:n.map(h=>{const S=new Float32Array(h.length);for(let W=0;W<h.length;W++)S[W]=h[W];return S}),sampleRate:d,numberOfChannels:o}}catch(i){throw console.error("Failed to decode MP3:",i),i}}async toAudioData(e){const{channels:i,sampleRate:n,numberOfChannels:d}=await this.toSamples(e),o=1024,m=i[0].length,h=[];console.log("Samples",m);for(let S=0;S<m;S+=o){const W=m-S,v=Math.min(o,W),Z=i.map(J=>J.slice(S,S+v)),O=new Float32Array(v*d);for(let J=0;J<v;J++)for(let U=0;U<d;U++)O[J*d+U]=Z[U][J];const w=S/n*1e6,N=new AudioData({format:"f32",sampleRate:n,numberOfFrames:v,numberOfChannels:d,timestamp:Math.round(w),data:O});h.push(N)}return h}async destroy(){this.decoder&&(await this.decoder.free(),this.decoder=null,this.isReady=!1)}}const ma=100,ua=.5,ha=.1;function ba(t,e){const i=t.getTrackById(e.id);for(const n of i.mdia.minf.stbl.stsd.entries){const d=n.avcC||n.hvcC||n.vpcC||n.av1C;if(d){const o=new Ai.DataStream(void 0,0,Ai.DataStream.BIG_ENDIAN);return d.write(o),new Uint8Array(o.buffer,8)}}throw new Error("Codec description box (avcC, hvcC, vpcC, or av1C) not found")}function pa(t,e){var n,d;const i={duration:e.duration/e.timescale};if(e.videoTracks.length>0){const o=e.videoTracks[0],m=o.samples_duration/o.timescale;i.video={codec:o.codec,codedHeight:o.video.height,codedWidth:o.video.width,description:ba(t,o),frameRate:o.nb_samples/m}}if(e.audioTracks.length>0){const o=e.audioTracks[0],m=((n=o.audio)==null?void 0:n.sample_rate)??o.timescale,h=((d=o.audio)==null?void 0:d.channel_count)??2;i.audio={codec:o.codec,sampleRate:m,numberOfChannels:h}}return i}function ya(t,e){return new Promise((i,n)=>{const d=t.stream().getReader();let o=0;const m=Ai.createFile(!1);let h=!1;m.onReady=W=>{h=!0;const v=pa(m,W);i({info:W,trackData:v,mp4:m})},m.onError=W=>{n(new Error(`MP4Box parsing error: ${W instanceof Error?W.message:String(W)}`))};const S=async()=>{try{const{done:W,value:v}=await d.read();if(W){if(!h)throw new Error("Invalid MP4 file: metadata not available");m.flush();return}if(h){d.releaseLock(),m.flush();return}const Z=v.buffer;if(Z.fileStart=o,o+=v.length,e&&e(o/t.size),m.appendBuffer(Z),o<t.size)return S();if(m.flush(),!h)throw new Error("Invalid MP4 file: metadata not available")}catch(W){n(W)}};S().catch(n)})}function fa(t,e,i,n,d){const{mp4:o,info:m}=e;return new Promise((h,S)=>{let W=0,v=!1,Z=0;const O=i==="audio"?EncodedAudioChunk:EncodedVideoChunk,w=[],N=i==="audio"?m.audioTracks[0]??null:m.videoTracks[0]??null;if(!N){h([]);return}Z=N.id;const J=m.duration/m.timescale-ha,U=Math.min(d||J,J);for(const K in m.tracks){const X=m.tracks[K];o.unsetExtractionOptions(X.id)}o.onSamples=(K,X,A)=>{for(const T of A){const H=T.cts/T.timescale;H<U&&w.push(new O({type:T.is_sync?"key":"delta",timestamp:Math.round(1e6*H),duration:Math.round(1e6*(T.duration/T.timescale)),data:T.data}))}if(A.length>0&&o.releaseUsedSamples(Z,A[A.length-1].number),w.length>0){const H=w[w.length-1].timestamp/1e6;(Math.abs(H-U)<ua||H>U)&&(v=!0,o.stop(),o.flush(),h(w))}},o.onError=K=>{S(new Error(`Extraction error: ${K instanceof Error?K.message:String(K)}`))},o.setExtractionOptions(Z,null,{nbSamples:ma});const k=o.seek(n,!0),I=t.slice(k.offset).stream().getReader();W=k.offset;const r=async()=>{try{const{done:K,value:X}=await I.read();if(K||v){I.releaseLock(),o.flush();return}const A=X.buffer;return A.fileStart=W,W+=X.length,o.appendBuffer(A),r()}catch(K){S(K)}};o.start(),r().catch(S)})}class Za{constructor(e){this.mp4Data=null,this.file=e}async load(e){this.mp4Data=await ya(this.file,e)}getTracks(){if(!this.mp4Data)throw new Error("MP4Demuxer: Must call load() before getTracks()");return this.mp4Data.trackData}getVideoDecoderConfig(){return this.getVideoTrack()}getAudioDecoderConfig(){return this.getAudioTrack()}getVideoTrack(){return this.getTracks().video}getAudioTrack(){return this.getTracks().audio}async extractSegment(e,i,n){if(!this.mp4Data)throw new Error("MP4Demuxer: Must call load() before extractSegment()");return fa(this.file,this.mp4Data,e,i,n)}getInfo(){if(!this.mp4Data)throw new Error("MP4Demuxer: Must call load() before getInfo()");return this.mp4Data.info}}class Xa{constructor(e=10*1024*1024){this.chunks=new Map,this._size=0,this._chunkSize=e}write(e,i){this._size=Math.max(this._size,i+e.byteLength);const n=Math.floor(i/this._chunkSize),d=Math.floor((i+e.byteLength-1)/this._chunkSize);for(let o=n;o<=d;o++){const m=o*this._chunkSize,h=m+this._chunkSize,S=Math.max(i,m),v=Math.min(i+e.byteLength,h)-S;if(v<=0)continue;let Z;this.chunks.has(o)?Z=this.chunks.get(o):(Z=new Uint8Array(this._chunkSize),this.chunks.set(o,Z));const O=S-m,w=S-i;for(let N=0;N<v;N++)Z[O+N]=e[w+N]}}get size(){return this._size}toBlob(e="application/octet-stream"){if(this.chunks.size===0)return new Blob([],{type:e});const i=Array.from(this.chunks.keys()).sort((o,m)=>o-m),n=[];for(let o=0;o<i.length;o++){const m=i[o],h=this.chunks.get(m);if(o===i.length-1){const S=this._size-m*this._chunkSize;S<this._chunkSize?n.push(h.slice(0,S)):n.push(h)}else n.push(h)}return new Blob(n,{type:e})}}var _a=Object.defineProperty,Sa=(t,e,i)=>e in t?_a(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i,oi=(t,e,i)=>(Sa(t,typeof e!="symbol"?e+"":e,i),i),I0=(t=>(t[t.AVMEDIA_TYPE_UNKNOWN=-1]="AVMEDIA_TYPE_UNKNOWN",t[t.AVMEDIA_TYPE_VIDEO=0]="AVMEDIA_TYPE_VIDEO",t[t.AVMEDIA_TYPE_AUDIO=1]="AVMEDIA_TYPE_AUDIO",t[t.AVMEDIA_TYPE_DATA=2]="AVMEDIA_TYPE_DATA",t[t.AVMEDIA_TYPE_SUBTITLE=3]="AVMEDIA_TYPE_SUBTITLE",t[t.AVMEDIA_TYPE_ATTACHMENT=4]="AVMEDIA_TYPE_ATTACHMENT",t[t.AVMEDIA_TYPE_NB=5]="AVMEDIA_TYPE_NB",t))(I0||{}),di=(t=>(t[t.AVSEEK_FLAG_BACKWARD=1]="AVSEEK_FLAG_BACKWARD",t[t.AVSEEK_FLAG_BYTE=2]="AVSEEK_FLAG_BYTE",t[t.AVSEEK_FLAG_ANY=4]="AVSEEK_FLAG_ANY",t[t.AVSEEK_FLAG_FRAME=8]="AVSEEK_FLAG_FRAME",t))(di||{}),rt=(t=>(t.WasmWorkerLoaded="WasmWorkerLoaded",t.WASMRuntimeInitialized="WASMRuntimeInitialized",t.LoadWASM="LoadWASM",t.GetAVPacket="GetAVPacket",t.GetAVPackets="GetAVPackets",t.GetAVStream="GetAVStream",t.GetAVStreams="GetAVStreams",t.GetMediaInfo="GetMediaInfo",t.ReadAVPacket="ReadAVPacket",t.AVPacketStream="AVPacketStream",t.ReadNextAVPacket="ReadNextAVPacket",t.StopReadAVPacket="StopReadAVPacket",t.SetAVLogLevel="SetAVLogLevel",t))(rt||{});const un="video",Ga="audio",va="subtitle",ws={VIDEO:un},Ci={[un]:I0.AVMEDIA_TYPE_VIDEO,[Ga]:I0.AVMEDIA_TYPE_AUDIO,[va]:I0.AVMEDIA_TYPE_SUBTITLE},hn="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBBZT0oRT0+KEVbRS5BVk1FRElBX1RZUEVfVU5LTk9XTj0tMV09IkFWTUVESUFfVFlQRV9VTktOT1dOIixFW0UuQVZNRURJQV9UWVBFX1ZJREVPPTBdPSJBVk1FRElBX1RZUEVfVklERU8iLEVbRS5BVk1FRElBX1RZUEVfQVVESU89MV09IkFWTUVESUFfVFlQRV9BVURJTyIsRVtFLkFWTUVESUFfVFlQRV9EQVRBPTJdPSJBVk1FRElBX1RZUEVfREFUQSIsRVtFLkFWTUVESUFfVFlQRV9TVUJUSVRMRT0zXT0iQVZNRURJQV9UWVBFX1NVQlRJVExFIixFW0UuQVZNRURJQV9UWVBFX0FUVEFDSE1FTlQ9NF09IkFWTUVESUFfVFlQRV9BVFRBQ0hNRU5UIixFW0UuQVZNRURJQV9UWVBFX05CPTVdPSJBVk1FRElBX1RZUEVfTkIiLEUpKShBZXx8e30pLEc9KEU9PihFLldhc21Xb3JrZXJMb2FkZWQ9Ildhc21Xb3JrZXJMb2FkZWQiLEUuV0FTTVJ1bnRpbWVJbml0aWFsaXplZD0iV0FTTVJ1bnRpbWVJbml0aWFsaXplZCIsRS5Mb2FkV0FTTT0iTG9hZFdBU00iLEUuR2V0QVZQYWNrZXQ9IkdldEFWUGFja2V0IixFLkdldEFWUGFja2V0cz0iR2V0QVZQYWNrZXRzIixFLkdldEFWU3RyZWFtPSJHZXRBVlN0cmVhbSIsRS5HZXRBVlN0cmVhbXM9IkdldEFWU3RyZWFtcyIsRS5HZXRNZWRpYUluZm89IkdldE1lZGlhSW5mbyIsRS5SZWFkQVZQYWNrZXQ9IlJlYWRBVlBhY2tldCIsRS5BVlBhY2tldFN0cmVhbT0iQVZQYWNrZXRTdHJlYW0iLEUuUmVhZE5leHRBVlBhY2tldD0iUmVhZE5leHRBVlBhY2tldCIsRS5TdG9wUmVhZEFWUGFja2V0PSJTdG9wUmVhZEFWUGFja2V0IixFLlNldEFWTG9nTGV2ZWw9IlNldEFWTG9nTGV2ZWwiLEUpKShHfHx7fSk7InZpZGVvIisiIixBZS5BVk1FRElBX1RZUEVfVklERU8sImF1ZGlvIisiIixBZS5BVk1FRElBX1RZUEVfQVVESU8sInN1YnRpdGxlIisiIixBZS5BVk1FRElBX1RZUEVfU1VCVElUTEU7dmFyIGl0PSgoKT0+e3ZhciBFPXNlbGYubG9jYXRpb24uaHJlZjtyZXR1cm4gZnVuY3Rpb24oUj17fSl7dmFyIEMsZj1PYmplY3QuYXNzaWduKHt9LFIpLFUsSCxuZT1uZXcgUHJvbWlzZSgoZSxyKT0+e1U9ZSxIPXJ9KSxhZT0hMCxEZT1PYmplY3QuYXNzaWduKHt9LGYpLGhyPSIuL3RoaXMucHJvZ3JhbSIscT0iIjtmdW5jdGlvbiBtdChlKXtyZXR1cm4gZi5sb2NhdGVGaWxlP2YubG9jYXRlRmlsZShlLHEpOnErZX12YXIgWWUsbXIsR2U7cT1zZWxmLmxvY2F0aW9uLmhyZWYsRSYmKHE9RSkscS5zdGFydHNXaXRoKCJibG9iOiIpP3E9IiI6cT1xLnN1YnN0cigwLHEucmVwbGFjZSgvWz8jXS4qLywiIikubGFzdEluZGV4T2YoIi8iKSsxKSxZZT1lPT57dmFyIHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiByLm9wZW4oIkdFVCIsZSwhMSksci5zZW5kKG51bGwpLHIucmVzcG9uc2VUZXh0fSxHZT1lPT57dmFyIHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiByLm9wZW4oIkdFVCIsZSwhMSksci5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixyLnNlbmQobnVsbCksbmV3IFVpbnQ4QXJyYXkoci5yZXNwb25zZSl9LG1yPShlLHIsdCk9Pnt2YXIgbj1uZXcgWE1MSHR0cFJlcXVlc3Q7bi5vcGVuKCJHRVQiLGUsITApLG4ucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsbi5vbmxvYWQ9KCk9PntpZihuLnN0YXR1cz09MjAwfHxuLnN0YXR1cz09MCYmbi5yZXNwb25zZSl7cihuLnJlc3BvbnNlKTtyZXR1cm59dCgpfSxuLm9uZXJyb3I9dCxuLnNlbmQobnVsbCl9O3ZhciBxZT1mLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGVlPWYucHJpbnRFcnJ8fGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtPYmplY3QuYXNzaWduKGYsRGUpLERlPW51bGwsZi5hcmd1bWVudHMmJmYuYXJndW1lbnRzLGYudGhpc1Byb2dyYW0mJihocj1mLnRoaXNQcm9ncmFtKSxmLnF1aXQmJmYucXVpdDt2YXIgX2U7Zi53YXNtQmluYXJ5JiYoX2U9Zi53YXNtQmluYXJ5KTt2YXIgJGUscHI9ITE7ZnVuY3Rpb24gX3IoZSxyKXtlfHxpZShyKX12YXIgSSx4LFksQ2UsZyxBLGdyLHlyO2Z1bmN0aW9uIHdyKCl7dmFyIGU9JGUuYnVmZmVyO2YuSEVBUDg9ST1uZXcgSW50OEFycmF5KGUpLGYuSEVBUDE2PVk9bmV3IEludDE2QXJyYXkoZSksZi5IRUFQVTg9eD1uZXcgVWludDhBcnJheShlKSxmLkhFQVBVMTY9Q2U9bmV3IFVpbnQxNkFycmF5KGUpLGYuSEVBUDMyPWc9bmV3IEludDMyQXJyYXkoZSksZi5IRUFQVTMyPUE9bmV3IFVpbnQzMkFycmF5KGUpLGYuSEVBUEYzMj1ncj1uZXcgRmxvYXQzMkFycmF5KGUpLGYuSEVBUEY2ND15cj1uZXcgRmxvYXQ2NEFycmF5KGUpfXZhciBFcj1bXSxicj1bXSxrcj1bXTtmdW5jdGlvbiBwdCgpe2lmKGYucHJlUnVuKWZvcih0eXBlb2YgZi5wcmVSdW49PSJmdW5jdGlvbiImJihmLnByZVJ1bj1bZi5wcmVSdW5dKTtmLnByZVJ1bi5sZW5ndGg7KXl0KGYucHJlUnVuLnNoaWZ0KCkpO0tlKEVyKX1mdW5jdGlvbiBfdCgpeyFmLm5vRlNJbml0JiYhby5pbml0LmluaXRpYWxpemVkJiZvLmluaXQoKSxvLmlnbm9yZVBlcm1pc3Npb25zPSExLEtlKGJyKX1mdW5jdGlvbiBndCgpe2lmKGYucG9zdFJ1bilmb3IodHlwZW9mIGYucG9zdFJ1bj09ImZ1bmN0aW9uIiYmKGYucG9zdFJ1bj1bZi5wb3N0UnVuXSk7Zi5wb3N0UnVuLmxlbmd0aDspRXQoZi5wb3N0UnVuLnNoaWZ0KCkpO0tlKGtyKX1mdW5jdGlvbiB5dChlKXtFci51bnNoaWZ0KGUpfWZ1bmN0aW9uIHd0KGUpe2JyLnVuc2hpZnQoZSl9ZnVuY3Rpb24gRXQoZSl7a3IudW5zaGlmdChlKX12YXIgb2U9MCxnZT1udWxsO2Z1bmN0aW9uIEhhKGUpe3JldHVybiBlfWZ1bmN0aW9uIFhlKGUpe3ZhciByO29lKyssKHI9Zi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKT09bnVsbHx8ci5jYWxsKGYsb2UpfWZ1bmN0aW9uIEZlKGUpe3ZhciB0O2lmKG9lLS0sKHQ9Zi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKT09bnVsbHx8dC5jYWxsKGYsb2UpLG9lPT0wJiZnZSl7dmFyIHI9Z2U7Z2U9bnVsbCxyKCl9fWZ1bmN0aW9uIGllKGUpe3ZhciB0Oyh0PWYub25BYm9ydCk9PW51bGx8fHQuY2FsbChmLGUpLGU9IkFib3J0ZWQoIitlKyIpIixlZShlKSxwcj0hMCxlKz0iLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiI7dmFyIHI9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihlKTt0aHJvdyBIKHIpLHJ9dmFyIGJ0PSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIixQcj1lPT5lLnN0YXJ0c1dpdGgoYnQpO2Z1bmN0aW9uIGt0KCl7aWYoZi5sb2NhdGVGaWxlKXt2YXIgZT0id2ViLWRlbXV4ZXIud2FzbSI7cmV0dXJuIFByKGUpP2U6bXQoZSl9cmV0dXJuIG5ldyBVUkwoIndlYi1kZW11eGVyLndhc20iLHNlbGYubG9jYXRpb24uaHJlZikuaHJlZn12YXIgVGU7ZnVuY3Rpb24gQXIoZSl7aWYoZT09VGUmJl9lKXJldHVybiBuZXcgVWludDhBcnJheShfZSk7aWYoR2UpcmV0dXJuIEdlKGUpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1mdW5jdGlvbiBQdChlKXtyZXR1cm4hX2UmJmFlJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goZSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4ocj0+e2lmKCFyLm9rKXRocm93YGZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyR7ZX0nYDtyZXR1cm4gci5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goKCk9PkFyKGUpKTpQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5BcihlKSl9ZnVuY3Rpb24gRHIoZSxyLHQpe3JldHVybiBQdChlKS50aGVuKG49PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG4scikpLnRoZW4odCxuPT57ZWUoYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7bn1gKSxpZShuKX0pfWZ1bmN0aW9uIEF0KGUscix0LG4pe3JldHVybiFlJiZ0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmc9PSJmdW5jdGlvbiImJiFQcihyKSYmdHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iP2ZldGNoKHIse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGE9Pnt2YXIgaT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhhLHQpO3JldHVybiBpLnRoZW4obixmdW5jdGlvbihzKXtyZXR1cm4gZWUoYHdhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAke3N9YCksZWUoImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksRHIocix0LG4pfSl9KTpEcihyLHQsbil9ZnVuY3Rpb24gRHQoKXtyZXR1cm57YTpDYX19ZnVuY3Rpb24gJHQoKXt2YXIgZT1EdCgpO2Z1bmN0aW9uIHIobixhKXtyZXR1cm4gej1uLmV4cG9ydHMsJGU9ei5iYSx3cigpLGpyPXouZWEsd3Qoei5jYSksRmUoKSx6fVhlKCk7ZnVuY3Rpb24gdChuKXtyKG4uaW5zdGFuY2UpfWlmKGYuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gZi5pbnN0YW50aWF0ZVdhc20oZSxyKX1jYXRjaChuKXtlZShgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtufWApLEgobil9cmV0dXJuIFRlfHwoVGU9a3QoKSksQXQoX2UsVGUsZSx0KS5jYXRjaChIKSx7fX12YXIgeSwkLEtlPWU9Pntmb3IoO2UubGVuZ3RoPjA7KWUuc2hpZnQoKShmKX07Zi5ub0V4aXRSdW50aW1lO3ZhciAkcj10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMCxjZT0oZSxyLHQpPT57Zm9yKHZhciBuPXIrdCxhPXI7ZVthXSYmIShhPj1uKTspKythO2lmKGEtcj4xNiYmZS5idWZmZXImJiRyKXJldHVybiAkci5kZWNvZGUoZS5zdWJhcnJheShyLGEpKTtmb3IodmFyIGk9IiI7cjxhOyl7dmFyIHM9ZVtyKytdO2lmKCEocyYxMjgpKXtpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpO2NvbnRpbnVlfXZhciBsPWVbcisrXSY2MztpZigocyYyMjQpPT0xOTIpe2krPVN0cmluZy5mcm9tQ2hhckNvZGUoKHMmMzEpPDw2fGwpO2NvbnRpbnVlfXZhciB1PWVbcisrXSY2MztpZigocyYyNDApPT0yMjQ/cz0ocyYxNSk8PDEyfGw8PDZ8dTpzPShzJjcpPDwxOHxsPDwxMnx1PDw2fGVbcisrXSY2MyxzPDY1NTM2KWkrPVN0cmluZy5mcm9tQ2hhckNvZGUocyk7ZWxzZXt2YXIgYz1zLTY1NTM2O2krPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8Yz4+MTAsNTYzMjB8YyYxMDIzKX19cmV0dXJuIGl9LHNlPShlLHIpPT5lP2NlKHgsZSxyKToiIixDdD0oZSxyLHQsbik9PntpZShgQXNzZXJ0aW9uIGZhaWxlZDogJHtzZShlKX0sIGF0OiBgK1tyP3NlKHIpOiJ1bmtub3duIGZpbGVuYW1lIix0LG4/c2Uobik6InVua25vd24gZnVuY3Rpb24iXSl9O2NsYXNzIEZ0e2NvbnN0cnVjdG9yKHIpe3RoaXMuZXhjUHRyPXIsdGhpcy5wdHI9ci0yNH1zZXRfdHlwZShyKXtBW3RoaXMucHRyKzQ+PjJdPXJ9Z2V0X3R5cGUoKXtyZXR1cm4gQVt0aGlzLnB0cis0Pj4yXX1zZXRfZGVzdHJ1Y3RvcihyKXtBW3RoaXMucHRyKzg+PjJdPXJ9Z2V0X2Rlc3RydWN0b3IoKXtyZXR1cm4gQVt0aGlzLnB0cis4Pj4yXX1zZXRfY2F1Z2h0KHIpe3I9cj8xOjAsSVt0aGlzLnB0cisxMl09cn1nZXRfY2F1Z2h0KCl7cmV0dXJuIElbdGhpcy5wdHIrMTJdIT0wfXNldF9yZXRocm93bihyKXtyPXI/MTowLElbdGhpcy5wdHIrMTNdPXJ9Z2V0X3JldGhyb3duKCl7cmV0dXJuIElbdGhpcy5wdHIrMTNdIT0wfWluaXQocix0KXt0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCksdGhpcy5zZXRfdHlwZShyKSx0aGlzLnNldF9kZXN0cnVjdG9yKHQpfXNldF9hZGp1c3RlZF9wdHIocil7QVt0aGlzLnB0cisxNj4+Ml09cn1nZXRfYWRqdXN0ZWRfcHRyKCl7cmV0dXJuIEFbdGhpcy5wdHIrMTY+PjJdfWdldF9leGNlcHRpb25fcHRyKCl7dmFyIHI9cnQodGhpcy5nZXRfdHlwZSgpKTtpZihyKXJldHVybiBBW3RoaXMuZXhjUHRyPj4yXTt2YXIgdD10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtyZXR1cm4gdCE9PTA/dDp0aGlzLmV4Y1B0cn19dmFyIENyPTAsVHQ9KGUscix0KT0+e3ZhciBuPW5ldyBGdChlKTt0aHJvdyBuLmluaXQocix0KSxDcj1lLENyfSxTPXtpc0FiczplPT5lLmNoYXJBdCgwKT09PSIvIixzcGxpdFBhdGg6ZT0+e3ZhciByPS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLztyZXR1cm4gci5leGVjKGUpLnNsaWNlKDEpfSxub3JtYWxpemVBcnJheTooZSxyKT0+e2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGE9ZVtuXTthPT09Ii4iP2Uuc3BsaWNlKG4sMSk6YT09PSIuLiI/KGUuc3BsaWNlKG4sMSksdCsrKTp0JiYoZS5zcGxpY2UobiwxKSx0LS0pfWlmKHIpZm9yKDt0O3QtLSllLnVuc2hpZnQoIi4uIik7cmV0dXJuIGV9LG5vcm1hbGl6ZTplPT57dmFyIHI9Uy5pc0FicyhlKSx0PWUuc3Vic3RyKC0xKT09PSIvIjtyZXR1cm4gZT1TLm5vcm1hbGl6ZUFycmF5KGUuc3BsaXQoIi8iKS5maWx0ZXIobj0+ISFuKSwhcikuam9pbigiLyIpLCFlJiYhciYmKGU9Ii4iKSxlJiZ0JiYoZSs9Ii8iKSwocj8iLyI6IiIpK2V9LGRpcm5hbWU6ZT0+e3ZhciByPVMuc3BsaXRQYXRoKGUpLHQ9clswXSxuPXJbMV07cmV0dXJuIXQmJiFuPyIuIjoobiYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSksdCtuKX0sYmFzZW5hbWU6ZT0+e2lmKGU9PT0iLyIpcmV0dXJuIi8iO2U9Uy5ub3JtYWxpemUoZSksZT1lLnJlcGxhY2UoL1wvJC8sIiIpO3ZhciByPWUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gcj09PS0xP2U6ZS5zdWJzdHIocisxKX0sam9pbjooLi4uZSk9PlMubm9ybWFsaXplKGUuam9pbigiLyIpKSxqb2luMjooZSxyKT0+Uy5ub3JtYWxpemUoZSsiLyIrcil9LFN0PSgpPT57aWYodHlwZW9mIGNyeXB0bz09Im9iamVjdCImJnR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iKXJldHVybiBlPT5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpO2llKCJpbml0UmFuZG9tRGV2aWNlIil9LEZyPWU9PihGcj1TdCgpKShlKSxYPXtyZXNvbHZlOiguLi5lKT0+e2Zvcih2YXIgcj0iIix0PSExLG49ZS5sZW5ndGgtMTtuPj0tMSYmIXQ7bi0tKXt2YXIgYT1uPj0wP2Vbbl06by5jd2QoKTtpZih0eXBlb2YgYSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZighYSlyZXR1cm4iIjtyPWErIi8iK3IsdD1TLmlzQWJzKGEpfXJldHVybiByPVMubm9ybWFsaXplQXJyYXkoci5zcGxpdCgiLyIpLmZpbHRlcihpPT4hIWkpLCF0KS5qb2luKCIvIiksKHQ/Ii8iOiIiKStyfHwiLiJ9LHJlbGF0aXZlOihlLHIpPT57ZT1YLnJlc29sdmUoZSkuc3Vic3RyKDEpLHI9WC5yZXNvbHZlKHIpLnN1YnN0cigxKTtmdW5jdGlvbiB0KGMpe2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGgmJmNbZF09PT0iIjtkKyspO2Zvcih2YXIgbT1jLmxlbmd0aC0xO20+PTAmJmNbbV09PT0iIjttLS0pO3JldHVybiBkPm0/W106Yy5zbGljZShkLG0tZCsxKX1mb3IodmFyIG49dChlLnNwbGl0KCIvIikpLGE9dChyLnNwbGl0KCIvIikpLGk9TWF0aC5taW4obi5sZW5ndGgsYS5sZW5ndGgpLHM9aSxsPTA7bDxpO2wrKylpZihuW2xdIT09YVtsXSl7cz1sO2JyZWFrfWZvcih2YXIgdT1bXSxsPXM7bDxuLmxlbmd0aDtsKyspdS5wdXNoKCIuLiIpO3JldHVybiB1PXUuY29uY2F0KGEuc2xpY2UocykpLHUuam9pbigiLyIpfX0sSmU9W10sWmU9ZT0+e2Zvcih2YXIgcj0wLHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZS5jaGFyQ29kZUF0KHQpO248PTEyNz9yKys6bjw9MjA0Nz9yKz0yOm4+PTU1Mjk2JiZuPD01NzM0Mz8ocis9NCwrK3QpOnIrPTN9cmV0dXJuIHJ9LFFlPShlLHIsdCxuKT0+e2lmKCEobj4wKSlyZXR1cm4gMDtmb3IodmFyIGE9dCxpPXQrbi0xLHM9MDtzPGUubGVuZ3RoOysrcyl7dmFyIGw9ZS5jaGFyQ29kZUF0KHMpO2lmKGw+PTU1Mjk2JiZsPD01NzM0Myl7dmFyIHU9ZS5jaGFyQ29kZUF0KCsrcyk7bD02NTUzNisoKGwmMTAyMyk8PDEwKXx1JjEwMjN9aWYobDw9MTI3KXtpZih0Pj1pKWJyZWFrO3JbdCsrXT1sfWVsc2UgaWYobDw9MjA0Nyl7aWYodCsxPj1pKWJyZWFrO3JbdCsrXT0xOTJ8bD4+NixyW3QrK109MTI4fGwmNjN9ZWxzZSBpZihsPD02NTUzNSl7aWYodCsyPj1pKWJyZWFrO3JbdCsrXT0yMjR8bD4+MTIsclt0KytdPTEyOHxsPj42JjYzLHJbdCsrXT0xMjh8bCY2M31lbHNle2lmKHQrMz49aSlicmVhaztyW3QrK109MjQwfGw+PjE4LHJbdCsrXT0xMjh8bD4+MTImNjMsclt0KytdPTEyOHxsPj42JjYzLHJbdCsrXT0xMjh8bCY2M319cmV0dXJuIHJbdF09MCx0LWF9O2Z1bmN0aW9uIFNlKGUscix0KXt2YXIgbj1aZShlKSsxLGE9bmV3IEFycmF5KG4pLGk9UWUoZSxhLDAsYS5sZW5ndGgpO3JldHVybiByJiYoYS5sZW5ndGg9aSksYX12YXIgTXQ9KCk9PntpZighSmUubGVuZ3RoKXt2YXIgZT1udWxsO2lmKCFlKXJldHVybiBudWxsO0plPVNlKGUsITApfXJldHVybiBKZS5zaGlmdCgpfSxsZT17dHR5czpbXSxpbml0KCl7fSxzaHV0ZG93bigpe30scmVnaXN0ZXIoZSxyKXtsZS50dHlzW2VdPXtpbnB1dDpbXSxvdXRwdXQ6W10sb3BzOnJ9LG8ucmVnaXN0ZXJEZXZpY2UoZSxsZS5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3BlbihlKXt2YXIgcj1sZS50dHlzW2Uubm9kZS5yZGV2XTtpZighcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQzKTtlLnR0eT1yLGUuc2Vla2FibGU9ITF9LGNsb3NlKGUpe2UudHR5Lm9wcy5mc3luYyhlLnR0eSl9LGZzeW5jKGUpe2UudHR5Lm9wcy5mc3luYyhlLnR0eSl9LHJlYWQoZSxyLHQsbixhKXtpZighZS50dHl8fCFlLnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2MCk7Zm9yKHZhciBpPTAscz0wO3M8bjtzKyspe3ZhciBsO3RyeXtsPWUudHR5Lm9wcy5nZXRfY2hhcihlLnR0eSl9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9aWYobD09PXZvaWQgMCYmaT09PTApdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2KTtpZihsPT1udWxsKWJyZWFrO2krKyxyW3Qrc109bH1yZXR1cm4gaSYmKGUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksaX0sd3JpdGUoZSxyLHQsbixhKXtpZighZS50dHl8fCFlLnR0eS5vcHMucHV0X2NoYXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgaT0wO2k8bjtpKyspZS50dHkub3BzLnB1dF9jaGFyKGUudHR5LHJbdCtpXSl9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9cmV0dXJuIG4mJihlLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGl9fSxkZWZhdWx0X3R0eV9vcHM6e2dldF9jaGFyKGUpe3JldHVybiBNdCgpfSxwdXRfY2hhcihlLHIpe3I9PT1udWxsfHxyPT09MTA/KHFlKGNlKGUub3V0cHV0LDApKSxlLm91dHB1dD1bXSk6ciE9MCYmZS5vdXRwdXQucHVzaChyKX0sZnN5bmMoZSl7ZS5vdXRwdXQmJmUub3V0cHV0Lmxlbmd0aD4wJiYocWUoY2UoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKX0saW9jdGxfdGNnZXRzKGUpe3JldHVybntjX2lmbGFnOjI1ODU2LGNfb2ZsYWc6NSxjX2NmbGFnOjE5MSxjX2xmbGFnOjM1Mzg3LGNfY2M6WzMsMjgsMTI3LDIxLDQsMCwxLDAsMTcsMTksMjYsMCwxOCwxNSwyMywyMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXX19LGlvY3RsX3Rjc2V0cyhlLHIsdCl7cmV0dXJuIDB9LGlvY3RsX3Rpb2Nnd2luc3ooZSl7cmV0dXJuWzI0LDgwXX19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyKGUscil7cj09PW51bGx8fHI9PT0xMD8oZWUoY2UoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKTpyIT0wJiZlLm91dHB1dC5wdXNoKHIpfSxmc3luYyhlKXtlLm91dHB1dCYmZS5vdXRwdXQubGVuZ3RoPjAmJihlZShjZShlLm91dHB1dCwwKSksZS5vdXRwdXQ9W10pfX19LFRyPWU9PntpZSgpfSxiPXtvcHNfdGFibGU6bnVsbCxtb3VudChlKXtyZXR1cm4gYi5jcmVhdGVOb2RlKG51bGwsIi8iLDE2ODk1LDApfSxjcmVhdGVOb2RlKGUscix0LG4pe2lmKG8uaXNCbGtkZXYodCl8fG8uaXNGSUZPKHQpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2Iub3BzX3RhYmxlfHwoYi5vcHNfdGFibGU9e2Rpcjp7bm9kZTp7Z2V0YXR0cjpiLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpiLm5vZGVfb3BzLnNldGF0dHIsbG9va3VwOmIubm9kZV9vcHMubG9va3VwLG1rbm9kOmIubm9kZV9vcHMubWtub2QscmVuYW1lOmIubm9kZV9vcHMucmVuYW1lLHVubGluazpiLm5vZGVfb3BzLnVubGluayxybWRpcjpiLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6Yi5ub2RlX29wcy5yZWFkZGlyLHN5bWxpbms6Yi5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2VlazpiLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7Z2V0YXR0cjpiLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpiLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOmIuc3RyZWFtX29wcy5sbHNlZWsscmVhZDpiLnN0cmVhbV9vcHMucmVhZCx3cml0ZTpiLnN0cmVhbV9vcHMud3JpdGUsYWxsb2NhdGU6Yi5zdHJlYW1fb3BzLmFsbG9jYXRlLG1tYXA6Yi5zdHJlYW1fb3BzLm1tYXAsbXN5bmM6Yi5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjpiLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpiLm5vZGVfb3BzLnNldGF0dHIscmVhZGxpbms6Yi5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6Yi5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6Yi5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06by5jaHJkZXZfc3RyZWFtX29wc319KTt2YXIgYT1vLmNyZWF0ZU5vZGUoZSxyLHQsbik7cmV0dXJuIG8uaXNEaXIoYS5tb2RlKT8oYS5ub2RlX29wcz1iLm9wc190YWJsZS5kaXIubm9kZSxhLnN0cmVhbV9vcHM9Yi5vcHNfdGFibGUuZGlyLnN0cmVhbSxhLmNvbnRlbnRzPXt9KTpvLmlzRmlsZShhLm1vZGUpPyhhLm5vZGVfb3BzPWIub3BzX3RhYmxlLmZpbGUubm9kZSxhLnN0cmVhbV9vcHM9Yi5vcHNfdGFibGUuZmlsZS5zdHJlYW0sYS51c2VkQnl0ZXM9MCxhLmNvbnRlbnRzPW51bGwpOm8uaXNMaW5rKGEubW9kZSk/KGEubm9kZV9vcHM9Yi5vcHNfdGFibGUubGluay5ub2RlLGEuc3RyZWFtX29wcz1iLm9wc190YWJsZS5saW5rLnN0cmVhbSk6by5pc0NocmRldihhLm1vZGUpJiYoYS5ub2RlX29wcz1iLm9wc190YWJsZS5jaHJkZXYubm9kZSxhLnN0cmVhbV9vcHM9Yi5vcHNfdGFibGUuY2hyZGV2LnN0cmVhbSksYS50aW1lc3RhbXA9RGF0ZS5ub3coKSxlJiYoZS5jb250ZW50c1tyXT1hLGUudGltZXN0YW1wPWEudGltZXN0YW1wKSxhfSxnZXRGaWxlRGF0YUFzVHlwZWRBcnJheShlKXtyZXR1cm4gZS5jb250ZW50cz9lLmNvbnRlbnRzLnN1YmFycmF5P2UuY29udGVudHMuc3ViYXJyYXkoMCxlLnVzZWRCeXRlcyk6bmV3IFVpbnQ4QXJyYXkoZS5jb250ZW50cyk6bmV3IFVpbnQ4QXJyYXkoMCl9LGV4cGFuZEZpbGVTdG9yYWdlKGUscil7dmFyIHQ9ZS5jb250ZW50cz9lLmNvbnRlbnRzLmxlbmd0aDowO2lmKCEodD49cikpe3ZhciBuPTEwMjQqMTAyNDtyPU1hdGgubWF4KHIsdCoodDxuPzI6MS4xMjUpPj4+MCksdCE9MCYmKHI9TWF0aC5tYXgociwyNTYpKTt2YXIgYT1lLmNvbnRlbnRzO2UuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkociksZS51c2VkQnl0ZXM+MCYmZS5jb250ZW50cy5zZXQoYS5zdWJhcnJheSgwLGUudXNlZEJ5dGVzKSwwKX19LHJlc2l6ZUZpbGVTdG9yYWdlKGUscil7aWYoZS51c2VkQnl0ZXMhPXIpaWYocj09MCllLmNvbnRlbnRzPW51bGwsZS51c2VkQnl0ZXM9MDtlbHNle3ZhciB0PWUuY29udGVudHM7ZS5jb250ZW50cz1uZXcgVWludDhBcnJheShyKSx0JiZlLmNvbnRlbnRzLnNldCh0LnN1YmFycmF5KDAsTWF0aC5taW4ocixlLnVzZWRCeXRlcykpKSxlLnVzZWRCeXRlcz1yfX0sbm9kZV9vcHM6e2dldGF0dHIoZSl7dmFyIHI9e307cmV0dXJuIHIuZGV2PW8uaXNDaHJkZXYoZS5tb2RlKT9lLmlkOjEsci5pbm89ZS5pZCxyLm1vZGU9ZS5tb2RlLHIubmxpbms9MSxyLnVpZD0wLHIuZ2lkPTAsci5yZGV2PWUucmRldixvLmlzRGlyKGUubW9kZSk/ci5zaXplPTQwOTY6by5pc0ZpbGUoZS5tb2RlKT9yLnNpemU9ZS51c2VkQnl0ZXM6by5pc0xpbmsoZS5tb2RlKT9yLnNpemU9ZS5saW5rLmxlbmd0aDpyLnNpemU9MCxyLmF0aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLm10aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLmN0aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLmJsa3NpemU9NDA5NixyLmJsb2Nrcz1NYXRoLmNlaWwoci5zaXplL3IuYmxrc2l6ZSkscn0sc2V0YXR0cihlLHIpe3IubW9kZSE9PXZvaWQgMCYmKGUubW9kZT1yLm1vZGUpLHIudGltZXN0YW1wIT09dm9pZCAwJiYoZS50aW1lc3RhbXA9ci50aW1lc3RhbXApLHIuc2l6ZSE9PXZvaWQgMCYmYi5yZXNpemVGaWxlU3RvcmFnZShlLHIuc2l6ZSl9LGxvb2t1cChlLHIpe3Rocm93IG8uZ2VuZXJpY0Vycm9yc1s0NF19LG1rbm9kKGUscix0LG4pe3JldHVybiBiLmNyZWF0ZU5vZGUoZSxyLHQsbil9LHJlbmFtZShlLHIsdCl7aWYoby5pc0RpcihlLm1vZGUpKXt2YXIgbjt0cnl7bj1vLmxvb2t1cE5vZGUocix0KX1jYXRjaHt9aWYobilmb3IodmFyIGEgaW4gbi5jb250ZW50cyl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDU1KX1kZWxldGUgZS5wYXJlbnQuY29udGVudHNbZS5uYW1lXSxlLnBhcmVudC50aW1lc3RhbXA9RGF0ZS5ub3coKSxlLm5hbWU9dCxyLmNvbnRlbnRzW3RdPWUsci50aW1lc3RhbXA9ZS5wYXJlbnQudGltZXN0YW1wLGUucGFyZW50PXJ9LHVubGluayhlLHIpe2RlbGV0ZSBlLmNvbnRlbnRzW3JdLGUudGltZXN0YW1wPURhdGUubm93KCl9LHJtZGlyKGUscil7dmFyIHQ9by5sb29rdXBOb2RlKGUscik7Zm9yKHZhciBuIGluIHQuY29udGVudHMpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NSk7ZGVsZXRlIGUuY29udGVudHNbcl0sZS50aW1lc3RhbXA9RGF0ZS5ub3coKX0scmVhZGRpcihlKXt2YXIgcj1bIi4iLCIuLiJdO2Zvcih2YXIgdCBvZiBPYmplY3Qua2V5cyhlLmNvbnRlbnRzKSlyLnB1c2godCk7cmV0dXJuIHJ9LHN5bWxpbmsoZSxyLHQpe3ZhciBuPWIuY3JlYXRlTm9kZShlLHIsNDE0NzEsMCk7cmV0dXJuIG4ubGluaz10LG59LHJlYWRsaW5rKGUpe2lmKCFvLmlzTGluayhlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3JldHVybiBlLmxpbmt9fSxzdHJlYW1fb3BzOntyZWFkKGUscix0LG4sYSl7dmFyIGk9ZS5ub2RlLmNvbnRlbnRzO2lmKGE+PWUubm9kZS51c2VkQnl0ZXMpcmV0dXJuIDA7dmFyIHM9TWF0aC5taW4oZS5ub2RlLnVzZWRCeXRlcy1hLG4pO2lmKHM+OCYmaS5zdWJhcnJheSlyLnNldChpLnN1YmFycmF5KGEsYStzKSx0KTtlbHNlIGZvcih2YXIgbD0wO2w8cztsKyspclt0K2xdPWlbYStsXTtyZXR1cm4gc30sd3JpdGUoZSxyLHQsbixhLGkpe2lmKHIuYnVmZmVyPT09SS5idWZmZXImJihpPSExKSwhbilyZXR1cm4gMDt2YXIgcz1lLm5vZGU7aWYocy50aW1lc3RhbXA9RGF0ZS5ub3coKSxyLnN1YmFycmF5JiYoIXMuY29udGVudHN8fHMuY29udGVudHMuc3ViYXJyYXkpKXtpZihpKXJldHVybiBzLmNvbnRlbnRzPXIuc3ViYXJyYXkodCx0K24pLHMudXNlZEJ5dGVzPW4sbjtpZihzLnVzZWRCeXRlcz09PTAmJmE9PT0wKXJldHVybiBzLmNvbnRlbnRzPXIuc2xpY2UodCx0K24pLHMudXNlZEJ5dGVzPW4sbjtpZihhK248PXMudXNlZEJ5dGVzKXJldHVybiBzLmNvbnRlbnRzLnNldChyLnN1YmFycmF5KHQsdCtuKSxhKSxufWlmKGIuZXhwYW5kRmlsZVN0b3JhZ2UocyxhK24pLHMuY29udGVudHMuc3ViYXJyYXkmJnIuc3ViYXJyYXkpcy5jb250ZW50cy5zZXQoci5zdWJhcnJheSh0LHQrbiksYSk7ZWxzZSBmb3IodmFyIGw9MDtsPG47bCsrKXMuY29udGVudHNbYStsXT1yW3QrbF07cmV0dXJuIHMudXNlZEJ5dGVzPU1hdGgubWF4KHMudXNlZEJ5dGVzLGErbiksbn0sbGxzZWVrKGUscix0KXt2YXIgbj1yO2lmKHQ9PT0xP24rPWUucG9zaXRpb246dD09PTImJm8uaXNGaWxlKGUubm9kZS5tb2RlKSYmKG4rPWUubm9kZS51c2VkQnl0ZXMpLG48MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gbn0sYWxsb2NhdGUoZSxyLHQpe2IuZXhwYW5kRmlsZVN0b3JhZ2UoZS5ub2RlLHIrdCksZS5ub2RlLnVzZWRCeXRlcz1NYXRoLm1heChlLm5vZGUudXNlZEJ5dGVzLHIrdCl9LG1tYXAoZSxyLHQsbixhKXtpZighby5pc0ZpbGUoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDMpO3ZhciBpLHMsbD1lLm5vZGUuY29udGVudHM7aWYoIShhJjIpJiZsLmJ1ZmZlcj09PUkuYnVmZmVyKXM9ITEsaT1sLmJ5dGVPZmZzZXQ7ZWxzZXtpZigodD4wfHx0K3I8bC5sZW5ndGgpJiYobC5zdWJhcnJheT9sPWwuc3ViYXJyYXkodCx0K3IpOmw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobCx0LHQrcikpLHM9ITAsaT1UcigpLCFpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDgpO0kuc2V0KGwsaSl9cmV0dXJue3B0cjppLGFsbG9jYXRlZDpzfX0sbXN5bmMoZSxyLHQsbixhKXtyZXR1cm4gYi5zdHJlYW1fb3BzLndyaXRlKGUsciwwLG4sdCwhMSksMH19fSxSdD0oZSxyLHQsbik9Pnt2YXIgYT1gYWwgJHtlfWA7bXIoZSxpPT57cihuZXcgVWludDhBcnJheShpKSksYSYmRmUoKX0saT0+e2lmKHQpdCgpO2Vsc2UgdGhyb3dgTG9hZGluZyBkYXRhIGZpbGUgIiR7ZX0iIGZhaWxlZC5gfSksYSYmWGUoKX0sT3Q9KGUscix0LG4sYSxpKT0+e28uY3JlYXRlRGF0YUZpbGUoZSxyLHQsbixhLGkpfSxJdD1mLnByZWxvYWRQbHVnaW5zfHxbXSxMdD0oZSxyLHQsbik9Pnt0eXBlb2YgQnJvd3NlcjwidSImJkJyb3dzZXIuaW5pdCgpO3ZhciBhPSExO3JldHVybiBJdC5mb3JFYWNoKGk9PnthfHxpLmNhbkhhbmRsZShyKSYmKGkuaGFuZGxlKGUscix0LG4pLGE9ITApfSksYX0sVnQ9KGUscix0LG4sYSxpLHMsbCx1LGMpPT57dmFyIGQ9cj9YLnJlc29sdmUoUy5qb2luMihlLHIpKTplO2Z1bmN0aW9uIG0oaCl7ZnVuY3Rpb24gcCh3KXtjPT1udWxsfHxjKCksbHx8T3QoZSxyLHcsbixhLHUpLGk9PW51bGx8fGkoKSxGZSgpfUx0KGgsZCxwLCgpPT57cz09bnVsbHx8cygpLEZlKCl9KXx8cChoKX1YZSgpLHR5cGVvZiB0PT0ic3RyaW5nIj9SdCh0LG0scyk6bSh0KX0sVXQ9ZT0+e3ZhciByPXtyOjAsInIrIjoyLHc6NTc3LCJ3KyI6NTc4LGE6MTA4OSwiYSsiOjEwOTB9LHQ9cltlXTtpZih0eXBlb2YgdD4idSIpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpbGUgb3BlbiBtb2RlOiAke2V9YCk7cmV0dXJuIHR9LGVyPShlLHIpPT57dmFyIHQ9MDtyZXR1cm4gZSYmKHR8PTM2NSksciYmKHR8PTE0NiksdH0sVj17RElSX01PREU6MTY4OTUsRklMRV9NT0RFOjMzMjc5LHJlYWRlcjpudWxsLG1vdW50KGUpe19yKGFlKSxWLnJlYWRlcnx8KFYucmVhZGVyPW5ldyBGaWxlUmVhZGVyU3luYyk7dmFyIHI9Vi5jcmVhdGVOb2RlKG51bGwsIi8iLFYuRElSX01PREUsMCksdD17fTtmdW5jdGlvbiBuKGkpe2Zvcih2YXIgcz1pLnNwbGl0KCIvIiksbD1yLHU9MDt1PHMubGVuZ3RoLTE7dSsrKXt2YXIgYz1zLnNsaWNlKDAsdSsxKS5qb2luKCIvIik7dFtjXXx8KHRbY109Vi5jcmVhdGVOb2RlKGwsc1t1XSxWLkRJUl9NT0RFLDApKSxsPXRbY119cmV0dXJuIGx9ZnVuY3Rpb24gYShpKXt2YXIgcz1pLnNwbGl0KCIvIik7cmV0dXJuIHNbcy5sZW5ndGgtMV19cmV0dXJuIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZS5vcHRzLmZpbGVzfHxbXSxmdW5jdGlvbihpKXtWLmNyZWF0ZU5vZGUobihpLm5hbWUpLGEoaS5uYW1lKSxWLkZJTEVfTU9ERSwwLGksaS5sYXN0TW9kaWZpZWREYXRlKX0pLChlLm9wdHMuYmxvYnN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe1YuY3JlYXRlTm9kZShuKGkubmFtZSksYShpLm5hbWUpLFYuRklMRV9NT0RFLDAsaS5kYXRhKX0pLChlLm9wdHMucGFja2FnZXN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubWV0YWRhdGEuZmlsZXMuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgbD1zLmZpbGVuYW1lLnN1YnN0cigxKTtWLmNyZWF0ZU5vZGUobihsKSxhKGwpLFYuRklMRV9NT0RFLDAsaS5ibG9iLnNsaWNlKHMuc3RhcnQscy5lbmQpKX0pfSkscn0sY3JlYXRlTm9kZShlLHIsdCxuLGEsaSl7dmFyIHM9by5jcmVhdGVOb2RlKGUscix0KTtyZXR1cm4gcy5tb2RlPXQscy5ub2RlX29wcz1WLm5vZGVfb3BzLHMuc3RyZWFtX29wcz1WLnN0cmVhbV9vcHMscy50aW1lc3RhbXA9KGl8fG5ldyBEYXRlKS5nZXRUaW1lKCksX3IoVi5GSUxFX01PREUhPT1WLkRJUl9NT0RFKSx0PT09Vi5GSUxFX01PREU/KHMuc2l6ZT1hLnNpemUscy5jb250ZW50cz1hKToocy5zaXplPTQwOTYscy5jb250ZW50cz17fSksZSYmKGUuY29udGVudHNbcl09cyksc30sbm9kZV9vcHM6e2dldGF0dHIoZSl7cmV0dXJue2RldjoxLGlubzplLmlkLG1vZGU6ZS5tb2RlLG5saW5rOjEsdWlkOjAsZ2lkOjAscmRldjowLHNpemU6ZS5zaXplLGF0aW1lOm5ldyBEYXRlKGUudGltZXN0YW1wKSxtdGltZTpuZXcgRGF0ZShlLnRpbWVzdGFtcCksY3RpbWU6bmV3IERhdGUoZS50aW1lc3RhbXApLGJsa3NpemU6NDA5NixibG9ja3M6TWF0aC5jZWlsKGUuc2l6ZS80MDk2KX19LHNldGF0dHIoZSxyKXtyLm1vZGUhPT12b2lkIDAmJihlLm1vZGU9ci5tb2RlKSxyLnRpbWVzdGFtcCE9PXZvaWQgMCYmKGUudGltZXN0YW1wPXIudGltZXN0YW1wKX0sbG9va3VwKGUscil7dGhyb3cgbmV3IG8uRXJybm9FcnJvcig0NCl9LG1rbm9kKGUscix0LG4pe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpfSxyZW5hbWUoZSxyLHQpe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpfSx1bmxpbmsoZSxyKXt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKX0scm1kaXIoZSxyKXt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKX0scmVhZGRpcihlKXt2YXIgcj1bIi4iLCIuLiJdO2Zvcih2YXIgdCBvZiBPYmplY3Qua2V5cyhlLmNvbnRlbnRzKSlyLnB1c2godCk7cmV0dXJuIHJ9LHN5bWxpbmsoZSxyLHQpe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpfX0sc3RyZWFtX29wczp7cmVhZChlLHIsdCxuLGEpe2lmKGE+PWUubm9kZS5zaXplKXJldHVybiAwO3ZhciBpPWUubm9kZS5jb250ZW50cy5zbGljZShhLGErbikscz1WLnJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihpKTtyZXR1cm4gci5zZXQobmV3IFVpbnQ4QXJyYXkocyksdCksaS5zaXplfSx3cml0ZShlLHIsdCxuLGEpe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoMjkpfSxsbHNlZWsoZSxyLHQpe3ZhciBuPXI7aWYodD09PTE/bis9ZS5wb3NpdGlvbjp0PT09MiYmby5pc0ZpbGUoZS5ub2RlLm1vZGUpJiYobis9ZS5ub2RlLnNpemUpLG48MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gbn19fSxvPXtyb290Om51bGwsbW91bnRzOltdLGRldmljZXM6e30sc3RyZWFtczpbXSxuZXh0SW5vZGU6MSxuYW1lVGFibGU6bnVsbCxjdXJyZW50UGF0aDoiLyIsaW5pdGlhbGl6ZWQ6ITEsaWdub3JlUGVybWlzc2lvbnM6ITAsRXJybm9FcnJvcjpjbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9IkVycm5vRXJyb3IiLHRoaXMuZXJybm89ZX19LGdlbmVyaWNFcnJvcnM6e30sZmlsZXN5c3RlbXM6bnVsbCxzeW5jRlNSZXF1ZXN0czowLEZTU3RyZWFtOmNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFyZWQ9e319Z2V0IG9iamVjdCgpe3JldHVybiB0aGlzLm5vZGV9c2V0IG9iamVjdChlKXt0aGlzLm5vZGU9ZX1nZXQgaXNSZWFkKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMjA5NzE1NSkhPT0xfWdldCBpc1dyaXRlKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMjA5NzE1NSkhPT0wfWdldCBpc0FwcGVuZCgpe3JldHVybiB0aGlzLmZsYWdzJjEwMjR9Z2V0IGZsYWdzKCl7cmV0dXJuIHRoaXMuc2hhcmVkLmZsYWdzfXNldCBmbGFncyhlKXt0aGlzLnNoYXJlZC5mbGFncz1lfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5wb3NpdGlvbn1zZXQgcG9zaXRpb24oZSl7dGhpcy5zaGFyZWQucG9zaXRpb249ZX19LEZTTm9kZTpjbGFzc3tjb25zdHJ1Y3RvcihlLHIsdCxuKXtlfHwoZT10aGlzKSx0aGlzLnBhcmVudD1lLHRoaXMubW91bnQ9ZS5tb3VudCx0aGlzLm1vdW50ZWQ9bnVsbCx0aGlzLmlkPW8ubmV4dElub2RlKyssdGhpcy5uYW1lPXIsdGhpcy5tb2RlPXQsdGhpcy5ub2RlX29wcz17fSx0aGlzLnN0cmVhbV9vcHM9e30sdGhpcy5yZGV2PW4sdGhpcy5yZWFkTW9kZT0zNjUsdGhpcy53cml0ZU1vZGU9MTQ2fWdldCByZWFkKCl7cmV0dXJuKHRoaXMubW9kZSZ0aGlzLnJlYWRNb2RlKT09PXRoaXMucmVhZE1vZGV9c2V0IHJlYWQoZSl7ZT90aGlzLm1vZGV8PXRoaXMucmVhZE1vZGU6dGhpcy5tb2RlJj1+dGhpcy5yZWFkTW9kZX1nZXQgd3JpdGUoKXtyZXR1cm4odGhpcy5tb2RlJnRoaXMud3JpdGVNb2RlKT09PXRoaXMud3JpdGVNb2RlfXNldCB3cml0ZShlKXtlP3RoaXMubW9kZXw9dGhpcy53cml0ZU1vZGU6dGhpcy5tb2RlJj1+dGhpcy53cml0ZU1vZGV9Z2V0IGlzRm9sZGVyKCl7cmV0dXJuIG8uaXNEaXIodGhpcy5tb2RlKX1nZXQgaXNEZXZpY2UoKXtyZXR1cm4gby5pc0NocmRldih0aGlzLm1vZGUpfX0sbG9va3VwUGF0aChlLHI9e30pe2lmKGU9WC5yZXNvbHZlKGUpLCFlKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07dmFyIHQ9e2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9O2lmKHI9T2JqZWN0LmFzc2lnbih0LHIpLHIucmVjdXJzZV9jb3VudD44KXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzIpO2Zvcih2YXIgbj1lLnNwbGl0KCIvIikuZmlsdGVyKG09PiEhbSksYT1vLnJvb3QsaT0iLyIscz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgbD1zPT09bi5sZW5ndGgtMTtpZihsJiZyLnBhcmVudClicmVhaztpZihhPW8ubG9va3VwTm9kZShhLG5bc10pLGk9Uy5qb2luMihpLG5bc10pLG8uaXNNb3VudHBvaW50KGEpJiYoIWx8fGwmJnIuZm9sbG93X21vdW50KSYmKGE9YS5tb3VudGVkLnJvb3QpLCFsfHxyLmZvbGxvdylmb3IodmFyIHU9MDtvLmlzTGluayhhLm1vZGUpOyl7dmFyIGM9by5yZWFkbGluayhpKTtpPVgucmVzb2x2ZShTLmRpcm5hbWUoaSksYyk7dmFyIGQ9by5sb29rdXBQYXRoKGkse3JlY3Vyc2VfY291bnQ6ci5yZWN1cnNlX2NvdW50KzF9KTtpZihhPWQubm9kZSx1Kys+NDApdGhyb3cgbmV3IG8uRXJybm9FcnJvcigzMil9fXJldHVybntwYXRoOmksbm9kZTphfX0sZ2V0UGF0aChlKXtmb3IodmFyIHI7Oyl7aWYoby5pc1Jvb3QoZSkpe3ZhciB0PWUubW91bnQubW91bnRwb2ludDtyZXR1cm4gcj90W3QubGVuZ3RoLTFdIT09Ii8iP2Ake3R9LyR7cn1gOnQrcjp0fXI9cj9gJHtlLm5hbWV9LyR7cn1gOmUubmFtZSxlPWUucGFyZW50fX0saGFzaE5hbWUoZSxyKXtmb3IodmFyIHQ9MCxuPTA7bjxyLmxlbmd0aDtuKyspdD0odDw8NSktdCtyLmNoYXJDb2RlQXQobil8MDtyZXR1cm4oZSt0Pj4+MCklby5uYW1lVGFibGUubGVuZ3RofSxoYXNoQWRkTm9kZShlKXt2YXIgcj1vLmhhc2hOYW1lKGUucGFyZW50LmlkLGUubmFtZSk7ZS5uYW1lX25leHQ9by5uYW1lVGFibGVbcl0sby5uYW1lVGFibGVbcl09ZX0saGFzaFJlbW92ZU5vZGUoZSl7dmFyIHI9by5oYXNoTmFtZShlLnBhcmVudC5pZCxlLm5hbWUpO2lmKG8ubmFtZVRhYmxlW3JdPT09ZSlvLm5hbWVUYWJsZVtyXT1lLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgdD1vLm5hbWVUYWJsZVtyXTt0Oyl7aWYodC5uYW1lX25leHQ9PT1lKXt0Lm5hbWVfbmV4dD1lLm5hbWVfbmV4dDticmVha310PXQubmFtZV9uZXh0fX0sbG9va3VwTm9kZShlLHIpe3ZhciB0PW8ubWF5TG9va3VwKGUpO2lmKHQpdGhyb3cgbmV3IG8uRXJybm9FcnJvcih0KTtmb3IodmFyIG49by5oYXNoTmFtZShlLmlkLHIpLGE9by5uYW1lVGFibGVbbl07YTthPWEubmFtZV9uZXh0KXt2YXIgaT1hLm5hbWU7aWYoYS5wYXJlbnQuaWQ9PT1lLmlkJiZpPT09cilyZXR1cm4gYX1yZXR1cm4gby5sb29rdXAoZSxyKX0sY3JlYXRlTm9kZShlLHIsdCxuKXt2YXIgYT1uZXcgby5GU05vZGUoZSxyLHQsbik7cmV0dXJuIG8uaGFzaEFkZE5vZGUoYSksYX0sZGVzdHJveU5vZGUoZSl7by5oYXNoUmVtb3ZlTm9kZShlKX0saXNSb290KGUpe3JldHVybiBlPT09ZS5wYXJlbnR9LGlzTW91bnRwb2ludChlKXtyZXR1cm4hIWUubW91bnRlZH0saXNGaWxlKGUpe3JldHVybihlJjYxNDQwKT09PTMyNzY4fSxpc0RpcihlKXtyZXR1cm4oZSY2MTQ0MCk9PT0xNjM4NH0saXNMaW5rKGUpe3JldHVybihlJjYxNDQwKT09PTQwOTYwfSxpc0NocmRldihlKXtyZXR1cm4oZSY2MTQ0MCk9PT04MTkyfSxpc0Jsa2RldihlKXtyZXR1cm4oZSY2MTQ0MCk9PT0yNDU3Nn0saXNGSUZPKGUpe3JldHVybihlJjYxNDQwKT09PTQwOTZ9LGlzU29ja2V0KGUpe3JldHVybihlJjQ5MTUyKT09PTQ5MTUyfSxmbGFnc1RvUGVybWlzc2lvblN0cmluZyhlKXt2YXIgcj1bInIiLCJ3IiwicnciXVtlJjNdO3JldHVybiBlJjUxMiYmKHIrPSJ3Iikscn0sbm9kZVBlcm1pc3Npb25zKGUscil7cmV0dXJuIG8uaWdub3JlUGVybWlzc2lvbnM/MDpyLmluY2x1ZGVzKCJyIikmJiEoZS5tb2RlJjI5Mil8fHIuaW5jbHVkZXMoInciKSYmIShlLm1vZGUmMTQ2KXx8ci5pbmNsdWRlcygieCIpJiYhKGUubW9kZSY3Myk/MjowfSxtYXlMb29rdXAoZSl7aWYoIW8uaXNEaXIoZS5tb2RlKSlyZXR1cm4gNTQ7dmFyIHI9by5ub2RlUGVybWlzc2lvbnMoZSwieCIpO3JldHVybiByfHwoZS5ub2RlX29wcy5sb29rdXA/MDoyKX0sbWF5Q3JlYXRlKGUscil7dHJ5e3ZhciB0PW8ubG9va3VwTm9kZShlLHIpO3JldHVybiAyMH1jYXRjaHt9cmV0dXJuIG8ubm9kZVBlcm1pc3Npb25zKGUsInd4Iil9LG1heURlbGV0ZShlLHIsdCl7dmFyIG47dHJ5e249by5sb29rdXBOb2RlKGUscil9Y2F0Y2goaSl7cmV0dXJuIGkuZXJybm99dmFyIGE9by5ub2RlUGVybWlzc2lvbnMoZSwid3giKTtpZihhKXJldHVybiBhO2lmKHQpe2lmKCFvLmlzRGlyKG4ubW9kZSkpcmV0dXJuIDU0O2lmKG8uaXNSb290KG4pfHxvLmdldFBhdGgobik9PT1vLmN3ZCgpKXJldHVybiAxMH1lbHNlIGlmKG8uaXNEaXIobi5tb2RlKSlyZXR1cm4gMzE7cmV0dXJuIDB9LG1heU9wZW4oZSxyKXtyZXR1cm4gZT9vLmlzTGluayhlLm1vZGUpPzMyOm8uaXNEaXIoZS5tb2RlKSYmKG8uZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcocikhPT0iciJ8fHImNTEyKT8zMTpvLm5vZGVQZXJtaXNzaW9ucyhlLG8uZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcocikpOjQ0fSxNQVhfT1BFTl9GRFM6NDA5NixuZXh0ZmQoKXtmb3IodmFyIGU9MDtlPD1vLk1BWF9PUEVOX0ZEUztlKyspaWYoIW8uc3RyZWFtc1tlXSlyZXR1cm4gZTt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDMzKX0sZ2V0U3RyZWFtQ2hlY2tlZChlKXt2YXIgcj1vLmdldFN0cmVhbShlKTtpZighcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO3JldHVybiByfSxnZXRTdHJlYW06ZT0+by5zdHJlYW1zW2VdLGNyZWF0ZVN0cmVhbShlLHI9LTEpe3JldHVybiBlPU9iamVjdC5hc3NpZ24obmV3IG8uRlNTdHJlYW0sZSkscj09LTEmJihyPW8ubmV4dGZkKCkpLGUuZmQ9cixvLnN0cmVhbXNbcl09ZSxlfSxjbG9zZVN0cmVhbShlKXtvLnN0cmVhbXNbZV09bnVsbH0sZHVwU3RyZWFtKGUscj0tMSl7dmFyIG4sYTt2YXIgdD1vLmNyZWF0ZVN0cmVhbShlLHIpO3JldHVybihhPShuPXQuc3RyZWFtX29wcyk9PW51bGw/dm9pZCAwOm4uZHVwKT09bnVsbHx8YS5jYWxsKG4sdCksdH0sY2hyZGV2X3N0cmVhbV9vcHM6e29wZW4oZSl7dmFyIHQsbjt2YXIgcj1vLmdldERldmljZShlLm5vZGUucmRldik7ZS5zdHJlYW1fb3BzPXIuc3RyZWFtX29wcywobj0odD1lLnN0cmVhbV9vcHMpLm9wZW4pPT1udWxsfHxuLmNhbGwodCxlKX0sbGxzZWVrKCl7dGhyb3cgbmV3IG8uRXJybm9FcnJvcig3MCl9fSxtYWpvcjplPT5lPj44LG1pbm9yOmU9PmUmMjU1LG1ha2VkZXY6KGUscik9PmU8PDh8cixyZWdpc3RlckRldmljZShlLHIpe28uZGV2aWNlc1tlXT17c3RyZWFtX29wczpyfX0sZ2V0RGV2aWNlOmU9Pm8uZGV2aWNlc1tlXSxnZXRNb3VudHMoZSl7Zm9yKHZhciByPVtdLHQ9W2VdO3QubGVuZ3RoOyl7dmFyIG49dC5wb3AoKTtyLnB1c2gobiksdC5wdXNoKC4uLm4ubW91bnRzKX1yZXR1cm4gcn0sc3luY2ZzKGUscil7dHlwZW9mIGU9PSJmdW5jdGlvbiImJihyPWUsZT0hMSksby5zeW5jRlNSZXF1ZXN0cysrLG8uc3luY0ZTUmVxdWVzdHM+MSYmZWUoYHdhcm5pbmc6ICR7by5zeW5jRlNSZXF1ZXN0c30gRlMuc3luY2ZzIG9wZXJhdGlvbnMgaW4gZmxpZ2h0IGF0IG9uY2UsIHByb2JhYmx5IGp1c3QgZG9pbmcgZXh0cmEgd29ya2ApO3ZhciB0PW8uZ2V0TW91bnRzKG8ucm9vdC5tb3VudCksbj0wO2Z1bmN0aW9uIGEocyl7cmV0dXJuIG8uc3luY0ZTUmVxdWVzdHMtLSxyKHMpfWZ1bmN0aW9uIGkocyl7aWYocylyZXR1cm4gaS5lcnJvcmVkP3ZvaWQgMDooaS5lcnJvcmVkPSEwLGEocykpOysrbj49dC5sZW5ndGgmJmEobnVsbCl9dC5mb3JFYWNoKHM9PntpZighcy50eXBlLnN5bmNmcylyZXR1cm4gaShudWxsKTtzLnR5cGUuc3luY2ZzKHMsZSxpKX0pfSxtb3VudChlLHIsdCl7dmFyIG49dD09PSIvIixhPSF0LGk7aWYobiYmby5yb290KXRocm93IG5ldyBvLkVycm5vRXJyb3IoMTApO2lmKCFuJiYhYSl7dmFyIHM9by5sb29rdXBQYXRoKHQse2ZvbGxvd19tb3VudDohMX0pO2lmKHQ9cy5wYXRoLGk9cy5ub2RlLG8uaXNNb3VudHBvaW50KGkpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMTApO2lmKCFvLmlzRGlyKGkubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NCl9dmFyIGw9e3R5cGU6ZSxvcHRzOnIsbW91bnRwb2ludDp0LG1vdW50czpbXX0sdT1lLm1vdW50KGwpO3JldHVybiB1Lm1vdW50PWwsbC5yb290PXUsbj9vLnJvb3Q9dTppJiYoaS5tb3VudGVkPWwsaS5tb3VudCYmaS5tb3VudC5tb3VudHMucHVzaChsKSksdX0sdW5tb3VudChlKXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93X21vdW50OiExfSk7aWYoIW8uaXNNb3VudHBvaW50KHIubm9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7dmFyIHQ9ci5ub2RlLG49dC5tb3VudGVkLGE9by5nZXRNb3VudHMobik7T2JqZWN0LmtleXMoby5uYW1lVGFibGUpLmZvckVhY2gocz0+e2Zvcih2YXIgbD1vLm5hbWVUYWJsZVtzXTtsOyl7dmFyIHU9bC5uYW1lX25leHQ7YS5pbmNsdWRlcyhsLm1vdW50KSYmby5kZXN0cm95Tm9kZShsKSxsPXV9fSksdC5tb3VudGVkPW51bGw7dmFyIGk9dC5tb3VudC5tb3VudHMuaW5kZXhPZihuKTt0Lm1vdW50Lm1vdW50cy5zcGxpY2UoaSwxKX0sbG9va3VwKGUscil7cmV0dXJuIGUubm9kZV9vcHMubG9va3VwKGUscil9LG1rbm9kKGUscix0KXt2YXIgbj1vLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSksYT1uLm5vZGUsaT1TLmJhc2VuYW1lKGUpO2lmKCFpfHxpPT09Ii4ifHxpPT09Ii4uIil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgcz1vLm1heUNyZWF0ZShhLGkpO2lmKHMpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihzKTtpZighYS5ub2RlX29wcy5ta25vZCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtyZXR1cm4gYS5ub2RlX29wcy5ta25vZChhLGkscix0KX0sY3JlYXRlKGUscil7cmV0dXJuIHI9ciE9PXZvaWQgMD9yOjQzOCxyJj00MDk1LHJ8PTMyNzY4LG8ubWtub2QoZSxyLDApfSxta2RpcihlLHIpe3JldHVybiByPXIhPT12b2lkIDA/cjo1MTEsciY9MTAyMyxyfD0xNjM4NCxvLm1rbm9kKGUsciwwKX0sbWtkaXJUcmVlKGUscil7Zm9yKHZhciB0PWUuc3BsaXQoIi8iKSxuPSIiLGE9MDthPHQubGVuZ3RoOysrYSlpZih0W2FdKXtuKz0iLyIrdFthXTt0cnl7by5ta2RpcihuLHIpfWNhdGNoKGkpe2lmKGkuZXJybm8hPTIwKXRocm93IGl9fX0sbWtkZXYoZSxyLHQpe3JldHVybiB0eXBlb2YgdD4idSImJih0PXIscj00MzgpLHJ8PTgxOTIsby5ta25vZChlLHIsdCl9LHN5bWxpbmsoZSxyKXtpZighWC5yZXNvbHZlKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3ZhciB0PW8ubG9va3VwUGF0aChyLHtwYXJlbnQ6ITB9KSxuPXQubm9kZTtpZighbil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTt2YXIgYT1TLmJhc2VuYW1lKHIpLGk9by5tYXlDcmVhdGUobixhKTtpZihpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoaSk7aWYoIW4ubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtyZXR1cm4gbi5ub2RlX29wcy5zeW1saW5rKG4sYSxlKX0scmVuYW1lKGUscil7dmFyIHQ9Uy5kaXJuYW1lKGUpLG49Uy5kaXJuYW1lKHIpLGE9Uy5iYXNlbmFtZShlKSxpPVMuYmFzZW5hbWUocikscyxsLHU7aWYocz1vLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSksbD1zLm5vZGUscz1vLmxvb2t1cFBhdGgocix7cGFyZW50OiEwfSksdT1zLm5vZGUsIWx8fCF1KXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO2lmKGwubW91bnQhPT11Lm1vdW50KXRocm93IG5ldyBvLkVycm5vRXJyb3IoNzUpO3ZhciBjPW8ubG9va3VwTm9kZShsLGEpLGQ9WC5yZWxhdGl2ZShlLG4pO2lmKGQuY2hhckF0KDApIT09Ii4iKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO2lmKGQ9WC5yZWxhdGl2ZShyLHQpLGQuY2hhckF0KDApIT09Ii4iKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTUpO3ZhciBtO3RyeXttPW8ubG9va3VwTm9kZSh1LGkpfWNhdGNoe31pZihjIT09bSl7dmFyIGg9by5pc0RpcihjLm1vZGUpLHA9by5tYXlEZWxldGUobCxhLGgpO2lmKHApdGhyb3cgbmV3IG8uRXJybm9FcnJvcihwKTtpZihwPW0/by5tYXlEZWxldGUodSxpLGgpOm8ubWF5Q3JlYXRlKHUsaSkscCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKHApO2lmKCFsLm5vZGVfb3BzLnJlbmFtZSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtpZihvLmlzTW91bnRwb2ludChjKXx8bSYmby5pc01vdW50cG9pbnQobSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigxMCk7aWYodSE9PWwmJihwPW8ubm9kZVBlcm1pc3Npb25zKGwsInciKSxwKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKHApO28uaGFzaFJlbW92ZU5vZGUoYyk7dHJ5e2wubm9kZV9vcHMucmVuYW1lKGMsdSxpKX1jYXRjaCh3KXt0aHJvdyB3fWZpbmFsbHl7by5oYXNoQWRkTm9kZShjKX19fSxybWRpcihlKXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSksdD1yLm5vZGUsbj1TLmJhc2VuYW1lKGUpLGE9by5sb29rdXBOb2RlKHQsbiksaT1vLm1heURlbGV0ZSh0LG4sITApO2lmKGkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihpKTtpZighdC5ub2RlX29wcy5ybWRpcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtpZihvLmlzTW91bnRwb2ludChhKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDEwKTt0Lm5vZGVfb3BzLnJtZGlyKHQsbiksby5kZXN0cm95Tm9kZShhKX0scmVhZGRpcihlKXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiEwfSksdD1yLm5vZGU7aWYoIXQubm9kZV9vcHMucmVhZGRpcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDU0KTtyZXR1cm4gdC5ub2RlX29wcy5yZWFkZGlyKHQpfSx1bmxpbmsoZSl7dmFyIHI9by5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLHQ9ci5ub2RlO2lmKCF0KXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3ZhciBuPVMuYmFzZW5hbWUoZSksYT1vLmxvb2t1cE5vZGUodCxuKSxpPW8ubWF5RGVsZXRlKHQsbiwhMSk7aWYoaSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKGkpO2lmKCF0Lm5vZGVfb3BzLnVubGluayl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtpZihvLmlzTW91bnRwb2ludChhKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDEwKTt0Lm5vZGVfb3BzLnVubGluayh0LG4pLG8uZGVzdHJveU5vZGUoYSl9LHJlYWRsaW5rKGUpe3ZhciByPW8ubG9va3VwUGF0aChlKSx0PXIubm9kZTtpZighdCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZighdC5ub2RlX29wcy5yZWFkbGluayl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gWC5yZXNvbHZlKG8uZ2V0UGF0aCh0LnBhcmVudCksdC5ub2RlX29wcy5yZWFkbGluayh0KSl9LHN0YXQoZSxyKXt2YXIgdD1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiFyfSksbj10Lm5vZGU7aWYoIW4pdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0NCk7aWYoIW4ubm9kZV9vcHMuZ2V0YXR0cil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtyZXR1cm4gbi5ub2RlX29wcy5nZXRhdHRyKG4pfSxsc3RhdChlKXtyZXR1cm4gby5zdGF0KGUsITApfSxjaG1vZChlLHIsdCl7dmFyIG47aWYodHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgYT1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiF0fSk7bj1hLm5vZGV9ZWxzZSBuPWU7aWYoIW4ubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtuLm5vZGVfb3BzLnNldGF0dHIobix7bW9kZTpyJjQwOTV8bi5tb2RlJi00MDk2LHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG1vZChlLHIpe28uY2htb2QoZSxyLCEwKX0sZmNobW9kKGUscil7dmFyIHQ9by5nZXRTdHJlYW1DaGVja2VkKGUpO28uY2htb2QodC5ub2RlLHIpfSxjaG93bihlLHIsdCxuKXt2YXIgYTtpZih0eXBlb2YgZT09InN0cmluZyIpe3ZhciBpPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IW59KTthPWkubm9kZX1lbHNlIGE9ZTtpZighYS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2Eubm9kZV9vcHMuc2V0YXR0cihhLHt0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2hvd24oZSxyLHQpe28uY2hvd24oZSxyLHQsITApfSxmY2hvd24oZSxyLHQpe3ZhciBuPW8uZ2V0U3RyZWFtQ2hlY2tlZChlKTtvLmNob3duKG4ubm9kZSxyLHQpfSx0cnVuY2F0ZShlLHIpe2lmKHI8MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgdDtpZih0eXBlb2YgZT09InN0cmluZyIpe3ZhciBuPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6ITB9KTt0PW4ubm9kZX1lbHNlIHQ9ZTtpZighdC5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2lmKG8uaXNEaXIodC5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDMxKTtpZighby5pc0ZpbGUodC5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgYT1vLm5vZGVQZXJtaXNzaW9ucyh0LCJ3Iik7aWYoYSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKGEpO3Qubm9kZV9vcHMuc2V0YXR0cih0LHtzaXplOnIsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sZnRydW5jYXRlKGUscil7dmFyIHQ9by5nZXRTdHJlYW1DaGVja2VkKGUpO2lmKCEodC5mbGFncyYyMDk3MTU1KSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtvLnRydW5jYXRlKHQubm9kZSxyKX0sdXRpbWUoZSxyLHQpe3ZhciBuPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6ITB9KSxhPW4ubm9kZTthLm5vZGVfb3BzLnNldGF0dHIoYSx7dGltZXN0YW1wOk1hdGgubWF4KHIsdCl9KX0sb3BlbihlLHIsdCl7aWYoZT09PSIiKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3I9dHlwZW9mIHI9PSJzdHJpbmciP1V0KHIpOnIsciY2ND8odD10eXBlb2YgdD4idSI/NDM4OnQsdD10JjQwOTV8MzI3NjgpOnQ9MDt2YXIgbjtpZih0eXBlb2YgZT09Im9iamVjdCIpbj1lO2Vsc2V7ZT1TLm5vcm1hbGl6ZShlKTt0cnl7dmFyIGE9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohKHImMTMxMDcyKX0pO249YS5ub2RlfWNhdGNoe319dmFyIGk9ITE7aWYociY2NClpZihuKXtpZihyJjEyOCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDIwKX1lbHNlIG49by5ta25vZChlLHQsMCksaT0hMDtpZighbil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZihvLmlzQ2hyZGV2KG4ubW9kZSkmJihyJj0tNTEzKSxyJjY1NTM2JiYhby5pc0RpcihuLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTQpO2lmKCFpKXt2YXIgcz1vLm1heU9wZW4obixyKTtpZihzKXRocm93IG5ldyBvLkVycm5vRXJyb3Iocyl9ciY1MTImJiFpJiZvLnRydW5jYXRlKG4sMCksciY9LTEzMTcxMzt2YXIgbD1vLmNyZWF0ZVN0cmVhbSh7bm9kZTpuLHBhdGg6by5nZXRQYXRoKG4pLGZsYWdzOnIsc2Vla2FibGU6ITAscG9zaXRpb246MCxzdHJlYW1fb3BzOm4uc3RyZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVybiBsLnN0cmVhbV9vcHMub3BlbiYmbC5zdHJlYW1fb3BzLm9wZW4obCksZi5sb2dSZWFkRmlsZXMmJiEociYxKSYmKG8ucmVhZEZpbGVzfHwoby5yZWFkRmlsZXM9e30pLGUgaW4gby5yZWFkRmlsZXN8fChvLnJlYWRGaWxlc1tlXT0xKSksbH0sY2xvc2UoZSl7aWYoby5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2UuZ2V0ZGVudHMmJihlLmdldGRlbnRzPW51bGwpO3RyeXtlLnN0cmVhbV9vcHMuY2xvc2UmJmUuc3RyZWFtX29wcy5jbG9zZShlKX1jYXRjaChyKXt0aHJvdyByfWZpbmFsbHl7by5jbG9zZVN0cmVhbShlLmZkKX1lLmZkPW51bGx9LGlzQ2xvc2VkKGUpe3JldHVybiBlLmZkPT09bnVsbH0sbGxzZWVrKGUscix0KXtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoIWUuc2Vla2FibGV8fCFlLnN0cmVhbV9vcHMubGxzZWVrKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNzApO2lmKHQhPTAmJnQhPTEmJnQhPTIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7cmV0dXJuIGUucG9zaXRpb249ZS5zdHJlYW1fb3BzLmxsc2VlayhlLHIsdCksZS51bmdvdHRlbj1bXSxlLnBvc2l0aW9ufSxyZWFkKGUscix0LG4sYSl7aWYobjwwfHxhPDApdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7aWYoby5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2lmKChlLmZsYWdzJjIwOTcxNTUpPT09MSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2lmKG8uaXNEaXIoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzEpO2lmKCFlLnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgaT10eXBlb2YgYTwidSI7aWYoIWkpYT1lLnBvc2l0aW9uO2Vsc2UgaWYoIWUuc2Vla2FibGUpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig3MCk7dmFyIHM9ZS5zdHJlYW1fb3BzLnJlYWQoZSxyLHQsbixhKTtyZXR1cm4gaXx8KGUucG9zaXRpb24rPXMpLHN9LHdyaXRlKGUscix0LG4sYSxpKXtpZihuPDB8fGE8MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoIShlLmZsYWdzJjIwOTcxNTUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoby5pc0RpcihlLm5vZGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigzMSk7aWYoIWUuc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtlLnNlZWthYmxlJiZlLmZsYWdzJjEwMjQmJm8ubGxzZWVrKGUsMCwyKTt2YXIgcz10eXBlb2YgYTwidSI7aWYoIXMpYT1lLnBvc2l0aW9uO2Vsc2UgaWYoIWUuc2Vla2FibGUpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig3MCk7dmFyIGw9ZS5zdHJlYW1fb3BzLndyaXRlKGUscix0LG4sYSxpKTtyZXR1cm4gc3x8KGUucG9zaXRpb24rPWwpLGx9LGFsbG9jYXRlKGUscix0KXtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYocjwwfHx0PD0wKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO2lmKCEoZS5mbGFncyYyMDk3MTU1KSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2lmKCFvLmlzRmlsZShlLm5vZGUubW9kZSkmJiFvLmlzRGlyKGUubm9kZS5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQzKTtpZighZS5zdHJlYW1fb3BzLmFsbG9jYXRlKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMTM4KTtlLnN0cmVhbV9vcHMuYWxsb2NhdGUoZSxyLHQpfSxtbWFwKGUscix0LG4sYSl7aWYobiYyJiYhKGEmMikmJihlLmZsYWdzJjIwOTcxNTUpIT09Mil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDIpO2lmKChlLmZsYWdzJjIwOTcxNTUpPT09MSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDIpO2lmKCFlLnN0cmVhbV9vcHMubW1hcCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQzKTtyZXR1cm4gZS5zdHJlYW1fb3BzLm1tYXAoZSxyLHQsbixhKX0sbXN5bmMoZSxyLHQsbixhKXtyZXR1cm4gZS5zdHJlYW1fb3BzLm1zeW5jP2Uuc3RyZWFtX29wcy5tc3luYyhlLHIsdCxuLGEpOjB9LGlvY3RsKGUscix0KXtpZighZS5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTkpO3JldHVybiBlLnN0cmVhbV9vcHMuaW9jdGwoZSxyLHQpfSxyZWFkRmlsZShlLHI9e30pe2lmKHIuZmxhZ3M9ci5mbGFnc3x8MCxyLmVuY29kaW5nPXIuZW5jb2Rpbmd8fCJiaW5hcnkiLHIuZW5jb2RpbmchPT0idXRmOCImJnIuZW5jb2RpbmchPT0iYmluYXJ5Iil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZW5jb2RpbmcgdHlwZSAiJHtyLmVuY29kaW5nfSJgKTt2YXIgdCxuPW8ub3BlbihlLHIuZmxhZ3MpLGE9by5zdGF0KGUpLGk9YS5zaXplLHM9bmV3IFVpbnQ4QXJyYXkoaSk7cmV0dXJuIG8ucmVhZChuLHMsMCxpLDApLHIuZW5jb2Rpbmc9PT0idXRmOCI/dD1jZShzLDApOnIuZW5jb2Rpbmc9PT0iYmluYXJ5IiYmKHQ9cyksby5jbG9zZShuKSx0fSx3cml0ZUZpbGUoZSxyLHQ9e30pe3QuZmxhZ3M9dC5mbGFnc3x8NTc3O3ZhciBuPW8ub3BlbihlLHQuZmxhZ3MsdC5tb2RlKTtpZih0eXBlb2Ygcj09InN0cmluZyIpe3ZhciBhPW5ldyBVaW50OEFycmF5KFplKHIpKzEpLGk9UWUocixhLDAsYS5sZW5ndGgpO28ud3JpdGUobixhLDAsaSx2b2lkIDAsdC5jYW5Pd24pfWVsc2UgaWYoQXJyYXlCdWZmZXIuaXNWaWV3KHIpKW8ud3JpdGUobixyLDAsci5ieXRlTGVuZ3RoLHZvaWQgMCx0LmNhbk93bik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO28uY2xvc2Uobil9LGN3ZDooKT0+by5jdXJyZW50UGF0aCxjaGRpcihlKXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiEwfSk7aWYoci5ub2RlPT09bnVsbCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZighby5pc0RpcihyLm5vZGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NCk7dmFyIHQ9by5ub2RlUGVybWlzc2lvbnMoci5ub2RlLCJ4Iik7aWYodCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKHQpO28uY3VycmVudFBhdGg9ci5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKXtvLm1rZGlyKCIvdG1wIiksby5ta2RpcigiL2hvbWUiKSxvLm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlcygpe28ubWtkaXIoIi9kZXYiKSxvLnJlZ2lzdGVyRGV2aWNlKG8ubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOihuLGEsaSxzLGwpPT5zfSksby5ta2RldigiL2Rldi9udWxsIixvLm1ha2VkZXYoMSwzKSksbGUucmVnaXN0ZXIoby5tYWtlZGV2KDUsMCksbGUuZGVmYXVsdF90dHlfb3BzKSxsZS5yZWdpc3RlcihvLm1ha2VkZXYoNiwwKSxsZS5kZWZhdWx0X3R0eTFfb3BzKSxvLm1rZGV2KCIvZGV2L3R0eSIsby5tYWtlZGV2KDUsMCkpLG8ubWtkZXYoIi9kZXYvdHR5MSIsby5tYWtlZGV2KDYsMCkpO3ZhciBlPW5ldyBVaW50OEFycmF5KDEwMjQpLHI9MCx0PSgpPT4ocj09PTAmJihyPUZyKGUpLmJ5dGVMZW5ndGgpLGVbLS1yXSk7by5jcmVhdGVEZXZpY2UoIi9kZXYiLCJyYW5kb20iLHQpLG8uY3JlYXRlRGV2aWNlKCIvZGV2IiwidXJhbmRvbSIsdCksby5ta2RpcigiL2Rldi9zaG0iKSxvLm1rZGlyKCIvZGV2L3NobS90bXAiKX0sY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCl7by5ta2RpcigiL3Byb2MiKTt2YXIgZT1vLm1rZGlyKCIvcHJvYy9zZWxmIik7by5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpLG8ubW91bnQoe21vdW50KCl7dmFyIHI9by5jcmVhdGVOb2RlKGUsImZkIiwxNjg5NSw3Myk7cmV0dXJuIHIubm9kZV9vcHM9e2xvb2t1cCh0LG4pe3ZhciBhPStuLGk9by5nZXRTdHJlYW1DaGVja2VkKGEpLHM9e3BhcmVudDpudWxsLG1vdW50Onttb3VudHBvaW50OiJmYWtlIn0sbm9kZV9vcHM6e3JlYWRsaW5rOigpPT5pLnBhdGh9fTtyZXR1cm4gcy5wYXJlbnQ9cyxzfX0scn19LHt9LCIvcHJvYy9zZWxmL2ZkIil9LGNyZWF0ZVN0YW5kYXJkU3RyZWFtcygpe2Yuc3RkaW4/by5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRpbiIsZi5zdGRpbik6by5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxmLnN0ZG91dD9vLmNyZWF0ZURldmljZSgiL2RldiIsInN0ZG91dCIsbnVsbCxmLnN0ZG91dCk6by5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3Rkb3V0IiksZi5zdGRlcnI/by5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsZi5zdGRlcnIpOm8uc3ltbGluaygiL2Rldi90dHkxIiwiL2Rldi9zdGRlcnIiKSxvLm9wZW4oIi9kZXYvc3RkaW4iLDApLG8ub3BlbigiL2Rldi9zdGRvdXQiLDEpLG8ub3BlbigiL2Rldi9zdGRlcnIiLDEpfSxzdGF0aWNJbml0KCl7WzQ0XS5mb3JFYWNoKGU9PntvLmdlbmVyaWNFcnJvcnNbZV09bmV3IG8uRXJybm9FcnJvcihlKSxvLmdlbmVyaWNFcnJvcnNbZV0uc3RhY2s9IjxnZW5lcmljIGVycm9yLCBubyBzdGFjaz4ifSksby5uYW1lVGFibGU9bmV3IEFycmF5KDQwOTYpLG8ubW91bnQoYix7fSwiLyIpLG8uY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzKCksby5jcmVhdGVEZWZhdWx0RGV2aWNlcygpLG8uY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksby5maWxlc3lzdGVtcz17TUVNRlM6YixXT1JLRVJGUzpWfX0saW5pdChlLHIsdCl7by5pbml0LmluaXRpYWxpemVkPSEwLGYuc3RkaW49ZXx8Zi5zdGRpbixmLnN0ZG91dD1yfHxmLnN0ZG91dCxmLnN0ZGVycj10fHxmLnN0ZGVycixvLmNyZWF0ZVN0YW5kYXJkU3RyZWFtcygpfSxxdWl0KCl7by5pbml0LmluaXRpYWxpemVkPSExO2Zvcih2YXIgZT0wO2U8by5zdHJlYW1zLmxlbmd0aDtlKyspe3ZhciByPW8uc3RyZWFtc1tlXTtyJiZvLmNsb3NlKHIpfX0sZmluZE9iamVjdChlLHIpe3ZhciB0PW8uYW5hbHl6ZVBhdGgoZSxyKTtyZXR1cm4gdC5leGlzdHM/dC5vYmplY3Q6bnVsbH0sYW5hbHl6ZVBhdGgoZSxyKXt0cnl7dmFyIHQ9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohcn0pO2U9dC5wYXRofWNhdGNoe312YXIgbj17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVsbCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVsbH07dHJ5e3ZhciB0PW8ubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KTtuLnBhcmVudEV4aXN0cz0hMCxuLnBhcmVudFBhdGg9dC5wYXRoLG4ucGFyZW50T2JqZWN0PXQubm9kZSxuLm5hbWU9Uy5iYXNlbmFtZShlKSx0PW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IXJ9KSxuLmV4aXN0cz0hMCxuLnBhdGg9dC5wYXRoLG4ub2JqZWN0PXQubm9kZSxuLm5hbWU9dC5ub2RlLm5hbWUsbi5pc1Jvb3Q9dC5wYXRoPT09Ii8ifWNhdGNoKGEpe24uZXJyb3I9YS5lcnJub31yZXR1cm4gbn0sY3JlYXRlUGF0aChlLHIsdCxuKXtlPXR5cGVvZiBlPT0ic3RyaW5nIj9lOm8uZ2V0UGF0aChlKTtmb3IodmFyIGE9ci5zcGxpdCgiLyIpLnJldmVyc2UoKTthLmxlbmd0aDspe3ZhciBpPWEucG9wKCk7aWYoaSl7dmFyIHM9Uy5qb2luMihlLGkpO3RyeXtvLm1rZGlyKHMpfWNhdGNoe31lPXN9fXJldHVybiBzfSxjcmVhdGVGaWxlKGUscix0LG4sYSl7dmFyIGk9Uy5qb2luMih0eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSkscikscz1lcihuLGEpO3JldHVybiBvLmNyZWF0ZShpLHMpfSxjcmVhdGVEYXRhRmlsZShlLHIsdCxuLGEsaSl7dmFyIHM9cjtlJiYoZT10eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSkscz1yP1Muam9pbjIoZSxyKTplKTt2YXIgbD1lcihuLGEpLHU9by5jcmVhdGUocyxsKTtpZih0KXtpZih0eXBlb2YgdD09InN0cmluZyIpe2Zvcih2YXIgYz1uZXcgQXJyYXkodC5sZW5ndGgpLGQ9MCxtPXQubGVuZ3RoO2Q8bTsrK2QpY1tkXT10LmNoYXJDb2RlQXQoZCk7dD1jfW8uY2htb2QodSxsfDE0Nik7dmFyIGg9by5vcGVuKHUsNTc3KTtvLndyaXRlKGgsdCwwLHQubGVuZ3RoLDAsaSksby5jbG9zZShoKSxvLmNobW9kKHUsbCl9fSxjcmVhdGVEZXZpY2UoZSxyLHQsbil7dmFyIGE9Uy5qb2luMih0eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSksciksaT1lcighIXQsISFuKTtvLmNyZWF0ZURldmljZS5tYWpvcnx8KG8uY3JlYXRlRGV2aWNlLm1ham9yPTY0KTt2YXIgcz1vLm1ha2VkZXYoby5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gby5yZWdpc3RlckRldmljZShzLHtvcGVuKGwpe2wuc2Vla2FibGU9ITF9LGNsb3NlKGwpe3ZhciB1Oyh1PW49PW51bGw/dm9pZCAwOm4uYnVmZmVyKSE9bnVsbCYmdS5sZW5ndGgmJm4oMTApfSxyZWFkKGwsdSxjLGQsbSl7Zm9yKHZhciBoPTAscD0wO3A8ZDtwKyspe3ZhciB3O3RyeXt3PXQoKX1jYXRjaHt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI5KX1pZih3PT09dm9pZCAwJiZoPT09MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYpO2lmKHc9PW51bGwpYnJlYWs7aCsrLHVbYytwXT13fXJldHVybiBoJiYobC5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxofSx3cml0ZShsLHUsYyxkLG0pe2Zvcih2YXIgaD0wO2g8ZDtoKyspdHJ5e24odVtjK2hdKX1jYXRjaHt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI5KX1yZXR1cm4gZCYmKGwubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksaH19KSxvLm1rZGV2KGEsaSxzKX0sZm9yY2VMb2FkRmlsZShlKXtpZihlLmlzRGV2aWNlfHxlLmlzRm9sZGVyfHxlLmxpbmt8fGUuY29udGVudHMpcmV0dXJuITA7aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil0aHJvdyBuZXcgRXJyb3IoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpO2lmKFllKXRyeXtlLmNvbnRlbnRzPVNlKFllKGUudXJsKSwhMCksZS51c2VkQnl0ZXM9ZS5jb250ZW50cy5sZW5ndGh9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBsb2FkIHdpdGhvdXQgcmVhZCgpIG9yIFhNTEh0dHBSZXF1ZXN0LiIpfSxjcmVhdGVMYXp5RmlsZShlLHIsdCxuLGEpe2NsYXNzIGl7Y29uc3RydWN0b3IoKXt0aGlzLmxlbmd0aEtub3duPSExLHRoaXMuY2h1bmtzPVtdfWdldChwKXtpZighKHA+dGhpcy5sZW5ndGgtMXx8cDwwKSl7dmFyIHc9cCV0aGlzLmNodW5rU2l6ZSxEPXAvdGhpcy5jaHVua1NpemV8MDtyZXR1cm4gdGhpcy5nZXR0ZXIoRClbd119fXNldERhdGFHZXR0ZXIocCl7dGhpcy5nZXR0ZXI9cH1jYWNoZUxlbmd0aCgpe3ZhciBwPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihwLm9wZW4oIkhFQUQiLHQsITEpLHAuc2VuZChudWxsKSwhKHAuc3RhdHVzPj0yMDAmJnAuc3RhdHVzPDMwMHx8cC5zdGF0dXM9PT0zMDQpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK3QrIi4gU3RhdHVzOiAiK3Auc3RhdHVzKTt2YXIgdz1OdW1iZXIocC5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1sZW5ndGgiKSksRCxNPShEPXAuZ2V0UmVzcG9uc2VIZWFkZXIoIkFjY2VwdC1SYW5nZXMiKSkmJkQ9PT0iYnl0ZXMiLEY9KEQ9cC5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1FbmNvZGluZyIpKSYmRD09PSJnemlwIix2PTEwMjQqMTAyNDtNfHwodj13KTt2YXIgXz0oVCxCKT0+e2lmKFQ+Qil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcmFuZ2UgKCIrVCsiLCAiK0IrIikgb3Igbm8gYnl0ZXMgcmVxdWVzdGVkISIpO2lmKEI+dy0xKXRocm93IG5ldyBFcnJvcigib25seSAiK3crIiBieXRlcyBhdmFpbGFibGUhIHByb2dyYW1tZXIgZXJyb3IhIik7dmFyIE89bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKE8ub3BlbigiR0VUIix0LCExKSx3IT09diYmTy5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIrVCsiLSIrQiksTy5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixPLm92ZXJyaWRlTWltZVR5cGUmJk8ub3ZlcnJpZGVNaW1lVHlwZSgidGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCIpLE8uc2VuZChudWxsKSwhKE8uc3RhdHVzPj0yMDAmJk8uc3RhdHVzPDMwMHx8Ty5zdGF0dXM9PT0zMDQpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK3QrIi4gU3RhdHVzOiAiK08uc3RhdHVzKTtyZXR1cm4gTy5yZXNwb25zZSE9PXZvaWQgMD9uZXcgVWludDhBcnJheShPLnJlc3BvbnNlfHxbXSk6U2UoTy5yZXNwb25zZVRleHR8fCIiLCEwKX0sTD10aGlzO0wuc2V0RGF0YUdldHRlcihUPT57dmFyIEI9VCp2LE89KFQrMSkqdi0xO2lmKE89TWF0aC5taW4oTyx3LTEpLHR5cGVvZiBMLmNodW5rc1tUXT4idSImJihMLmNodW5rc1tUXT1fKEIsTykpLHR5cGVvZiBMLmNodW5rc1tUXT4idSIpdGhyb3cgbmV3IEVycm9yKCJkb1hIUiBmYWlsZWQhIik7cmV0dXJuIEwuY2h1bmtzW1RdfSksKEZ8fCF3KSYmKHY9dz0xLHc9dGhpcy5nZXR0ZXIoMCkubGVuZ3RoLHY9dyxxZSgiTGF6eUZpbGVzIG9uIGd6aXAgZm9yY2VzIGRvd25sb2FkIG9mIHRoZSB3aG9sZSBmaWxlIHdoZW4gbGVuZ3RoIGlzIGFjY2Vzc2VkIikpLHRoaXMuX2xlbmd0aD13LHRoaXMuX2NodW5rU2l6ZT12LHRoaXMubGVuZ3RoS25vd249ITB9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fbGVuZ3RofWdldCBjaHVua1NpemUoKXtyZXR1cm4gdGhpcy5sZW5ndGhLbm93bnx8dGhpcy5jYWNoZUxlbmd0aCgpLHRoaXMuX2NodW5rU2l6ZX19aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil2YXIgcz1uZXcgaSxsPXtpc0RldmljZTohMSxjb250ZW50czpzfTtlbHNlIHZhciBsPXtpc0RldmljZTohMSx1cmw6dH07dmFyIHU9by5jcmVhdGVGaWxlKGUscixsLG4sYSk7bC5jb250ZW50cz91LmNvbnRlbnRzPWwuY29udGVudHM6bC51cmwmJih1LmNvbnRlbnRzPW51bGwsdS51cmw9bC51cmwpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHUse3VzZWRCeXRlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudHMubGVuZ3RofX19KTt2YXIgYz17fSxkPU9iamVjdC5rZXlzKHUuc3RyZWFtX29wcyk7ZC5mb3JFYWNoKGg9Pnt2YXIgcD11LnN0cmVhbV9vcHNbaF07Y1toXT0oLi4udyk9PihvLmZvcmNlTG9hZEZpbGUodSkscCguLi53KSl9KTtmdW5jdGlvbiBtKGgscCx3LEQsTSl7dmFyIEY9aC5ub2RlLmNvbnRlbnRzO2lmKE0+PUYubGVuZ3RoKXJldHVybiAwO3ZhciB2PU1hdGgubWluKEYubGVuZ3RoLU0sRCk7aWYoRi5zbGljZSlmb3IodmFyIF89MDtfPHY7XysrKXBbdytfXT1GW00rX107ZWxzZSBmb3IodmFyIF89MDtfPHY7XysrKXBbdytfXT1GLmdldChNK18pO3JldHVybiB2fXJldHVybiBjLnJlYWQ9KGgscCx3LEQsTSk9PihvLmZvcmNlTG9hZEZpbGUodSksbShoLHAsdyxELE0pKSxjLm1tYXA9KGgscCx3LEQsTSk9PntvLmZvcmNlTG9hZEZpbGUodSk7dmFyIEY9VHIoKTtpZighRil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ4KTtyZXR1cm4gbShoLEksRixwLHcpLHtwdHI6RixhbGxvY2F0ZWQ6ITB9fSx1LnN0cmVhbV9vcHM9Yyx1fX0sUD17REVGQVVMVF9QT0xMTUFTSzo1LGNhbGN1bGF0ZUF0KGUscix0KXtpZihTLmlzQWJzKHIpKXJldHVybiByO3ZhciBuO2lmKGU9PT0tMTAwKW49by5jd2QoKTtlbHNle3ZhciBhPVAuZ2V0U3RyZWFtRnJvbUZEKGUpO249YS5wYXRofWlmKHIubGVuZ3RoPT0wKXtpZighdCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtyZXR1cm4gbn1yZXR1cm4gUy5qb2luMihuLHIpfSxkb1N0YXQoZSxyLHQpe3ZhciBuPWUocik7Z1t0Pj4yXT1uLmRldixnW3QrND4+Ml09bi5tb2RlLEFbdCs4Pj4yXT1uLm5saW5rLGdbdCsxMj4+Ml09bi51aWQsZ1t0KzE2Pj4yXT1uLmdpZCxnW3QrMjA+PjJdPW4ucmRldiwkPVtuLnNpemU+Pj4wLCh5PW4uc2l6ZSwrTWF0aC5hYnMoeSk+PTE/eT4wPytNYXRoLmZsb29yKHkvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoeS0rKH5+eT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLGdbdCsyND4+Ml09JFswXSxnW3QrMjg+PjJdPSRbMV0sZ1t0KzMyPj4yXT00MDk2LGdbdCszNj4+Ml09bi5ibG9ja3M7dmFyIGE9bi5hdGltZS5nZXRUaW1lKCksaT1uLm10aW1lLmdldFRpbWUoKSxzPW4uY3RpbWUuZ2V0VGltZSgpO3JldHVybiAkPVtNYXRoLmZsb29yKGEvMWUzKT4+PjAsKHk9TWF0aC5mbG9vcihhLzFlMyksK01hdGguYWJzKHkpPj0xP3k+MD8rTWF0aC5mbG9vcih5LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKHktKyh+fnk+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxnW3QrNDA+PjJdPSRbMF0sZ1t0KzQ0Pj4yXT0kWzFdLEFbdCs0OD4+Ml09YSUxZTMqMWUzLCQ9W01hdGguZmxvb3IoaS8xZTMpPj4+MCwoeT1NYXRoLmZsb29yKGkvMWUzKSwrTWF0aC5hYnMoeSk+PTE/eT4wPytNYXRoLmZsb29yKHkvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoeS0rKH5+eT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLGdbdCs1Nj4+Ml09JFswXSxnW3QrNjA+PjJdPSRbMV0sQVt0KzY0Pj4yXT1pJTFlMyoxZTMsJD1bTWF0aC5mbG9vcihzLzFlMyk+Pj4wLCh5PU1hdGguZmxvb3Iocy8xZTMpLCtNYXRoLmFicyh5KT49MT95PjA/K01hdGguZmxvb3IoeS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCh5LSsofn55Pj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sZ1t0KzcyPj4yXT0kWzBdLGdbdCs3Nj4+Ml09JFsxXSxBW3QrODA+PjJdPXMlMWUzKjFlMywkPVtuLmlubz4+PjAsKHk9bi5pbm8sK01hdGguYWJzKHkpPj0xP3k+MD8rTWF0aC5mbG9vcih5LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKHktKyh+fnk+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxnW3QrODg+PjJdPSRbMF0sZ1t0KzkyPj4yXT0kWzFdLDB9LGRvTXN5bmMoZSxyLHQsbixhKXtpZighby5pc0ZpbGUoci5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDMpO2lmKG4mMilyZXR1cm4gMDt2YXIgaT14LnNsaWNlKGUsZSt0KTtvLm1zeW5jKHIsaSxhLHQsbil9LGdldFN0cmVhbUZyb21GRChlKXt2YXIgcj1vLmdldFN0cmVhbUNoZWNrZWQoZSk7cmV0dXJuIHJ9LHZhcmFyZ3M6dm9pZCAwLGdldFN0cihlKXt2YXIgcj1zZShlKTtyZXR1cm4gcn19O2Z1bmN0aW9uIGp0KGUscix0LG4pe3RyeXtpZihyPVAuZ2V0U3RyKHIpLHI9UC5jYWxjdWxhdGVBdChlLHIpLHQmLTgpcmV0dXJuLTI4O3ZhciBhPW8ubG9va3VwUGF0aChyLHtmb2xsb3c6ITB9KSxpPWEubm9kZTtpZighaSlyZXR1cm4tNDQ7dmFyIHM9IiI7cmV0dXJuIHQmNCYmKHMrPSJyIiksdCYyJiYocys9InciKSx0JjEmJihzKz0ieCIpLHMmJm8ubm9kZVBlcm1pc3Npb25zKGkscyk/LTI6MH1jYXRjaChsKXtpZih0eXBlb2Ygbz4idSJ8fGwubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBsO3JldHVybi1sLmVycm5vfX1mdW5jdGlvbiBNZSgpe3ZhciBlPWdbK1AudmFyYXJncz4+Ml07cmV0dXJuIFAudmFyYXJncys9NCxlfXZhciBkZT1NZTtmdW5jdGlvbiB6dChlLHIsdCl7UC52YXJhcmdzPXQ7dHJ5e3ZhciBuPVAuZ2V0U3RyZWFtRnJvbUZEKGUpO3N3aXRjaChyKXtjYXNlIDA6e3ZhciBhPU1lKCk7aWYoYTwwKXJldHVybi0yODtmb3IoO28uc3RyZWFtc1thXTspYSsrO3ZhciBpO3JldHVybiBpPW8uZHVwU3RyZWFtKG4sYSksaS5mZH1jYXNlIDE6Y2FzZSAyOnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gbi5mbGFncztjYXNlIDQ6e3ZhciBhPU1lKCk7cmV0dXJuIG4uZmxhZ3N8PWEsMH1jYXNlIDEyOnt2YXIgYT1kZSgpLHM9MDtyZXR1cm4gWVthK3M+PjFdPTIsMH1jYXNlIDEzOmNhc2UgMTQ6cmV0dXJuIDB9cmV0dXJuLTI4fWNhdGNoKGwpe2lmKHR5cGVvZiBvPiJ1Inx8bC5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IGw7cmV0dXJuLWwuZXJybm99fWZ1bmN0aW9uIHh0KGUscil7dHJ5e3ZhciB0PVAuZ2V0U3RyZWFtRnJvbUZEKGUpO3JldHVybiBQLmRvU3RhdChvLnN0YXQsdC5wYXRoLHIpfWNhdGNoKG4pe2lmKHR5cGVvZiBvPiJ1Inx8bi5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IG47cmV0dXJuLW4uZXJybm99fXZhciB2ZT0oZSxyLHQpPT5RZShlLHgscix0KTtmdW5jdGlvbiBIdChlLHIsdCl7dHJ5e3ZhciBuPVAuZ2V0U3RyZWFtRnJvbUZEKGUpO24uZ2V0ZGVudHN8fChuLmdldGRlbnRzPW8ucmVhZGRpcihuLnBhdGgpKTtmb3IodmFyIGE9MjgwLGk9MCxzPW8ubGxzZWVrKG4sMCwxKSxsPU1hdGguZmxvb3Iocy9hKTtsPG4uZ2V0ZGVudHMubGVuZ3RoJiZpK2E8PXQ7KXt2YXIgdSxjLGQ9bi5nZXRkZW50c1tsXTtpZihkPT09Ii4iKXU9bi5ub2RlLmlkLGM9NDtlbHNlIGlmKGQ9PT0iLi4iKXt2YXIgbT1vLmxvb2t1cFBhdGgobi5wYXRoLHtwYXJlbnQ6ITB9KTt1PW0ubm9kZS5pZCxjPTR9ZWxzZXt2YXIgaD1vLmxvb2t1cE5vZGUobi5ub2RlLGQpO3U9aC5pZCxjPW8uaXNDaHJkZXYoaC5tb2RlKT8yOm8uaXNEaXIoaC5tb2RlKT80Om8uaXNMaW5rKGgubW9kZSk/MTA6OH0kPVt1Pj4+MCwoeT11LCtNYXRoLmFicyh5KT49MT95PjA/K01hdGguZmxvb3IoeS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCh5LSsofn55Pj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sZ1tyK2k+PjJdPSRbMF0sZ1tyK2krND4+Ml09JFsxXSwkPVsobCsxKSphPj4+MCwoeT0obCsxKSphLCtNYXRoLmFicyh5KT49MT95PjA/K01hdGguZmxvb3IoeS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCh5LSsofn55Pj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sZ1tyK2krOD4+Ml09JFswXSxnW3IraSsxMj4+Ml09JFsxXSxZW3IraSsxNj4+MV09MjgwLElbcitpKzE4XT1jLHZlKGQscitpKzE5LDI1NiksaSs9YSxsKz0xfXJldHVybiBvLmxsc2VlayhuLGwqYSwwKSxpfWNhdGNoKHApe2lmKHR5cGVvZiBvPiJ1Inx8cC5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IHA7cmV0dXJuLXAuZXJybm99fWZ1bmN0aW9uIFd0KGUscix0KXtQLnZhcmFyZ3M9dDt0cnl7dmFyIG49UC5nZXRTdHJlYW1Gcm9tRkQoZSk7c3dpdGNoKHIpe2Nhc2UgMjE1MDk6cmV0dXJuIG4udHR5PzA6LTU5O2Nhc2UgMjE1MDU6e2lmKCFuLnR0eSlyZXR1cm4tNTk7aWYobi50dHkub3BzLmlvY3RsX3RjZ2V0cyl7dmFyIGE9bi50dHkub3BzLmlvY3RsX3RjZ2V0cyhuKSxpPWRlKCk7Z1tpPj4yXT1hLmNfaWZsYWd8fDAsZ1tpKzQ+PjJdPWEuY19vZmxhZ3x8MCxnW2krOD4+Ml09YS5jX2NmbGFnfHwwLGdbaSsxMj4+Ml09YS5jX2xmbGFnfHwwO2Zvcih2YXIgcz0wO3M8MzI7cysrKUlbaStzKzE3XT1hLmNfY2Nbc118fDA7cmV0dXJuIDB9cmV0dXJuIDB9Y2FzZSAyMTUxMDpjYXNlIDIxNTExOmNhc2UgMjE1MTI6cmV0dXJuIG4udHR5PzA6LTU5O2Nhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNlIDIxNTA4OntpZighbi50dHkpcmV0dXJuLTU5O2lmKG4udHR5Lm9wcy5pb2N0bF90Y3NldHMpe2Zvcih2YXIgaT1kZSgpLGw9Z1tpPj4yXSx1PWdbaSs0Pj4yXSxjPWdbaSs4Pj4yXSxkPWdbaSsxMj4+Ml0sbT1bXSxzPTA7czwzMjtzKyspbS5wdXNoKElbaStzKzE3XSk7cmV0dXJuIG4udHR5Lm9wcy5pb2N0bF90Y3NldHMobi50dHkscix7Y19pZmxhZzpsLGNfb2ZsYWc6dSxjX2NmbGFnOmMsY19sZmxhZzpkLGNfY2M6bX0pfXJldHVybiAwfWNhc2UgMjE1MTk6e2lmKCFuLnR0eSlyZXR1cm4tNTk7dmFyIGk9ZGUoKTtyZXR1cm4gZ1tpPj4yXT0wLDB9Y2FzZSAyMTUyMDpyZXR1cm4gbi50dHk/LTI4Oi01OTtjYXNlIDIxNTMxOnt2YXIgaT1kZSgpO3JldHVybiBvLmlvY3RsKG4scixpKX1jYXNlIDIxNTIzOntpZighbi50dHkpcmV0dXJuLTU5O2lmKG4udHR5Lm9wcy5pb2N0bF90aW9jZ3dpbnN6KXt2YXIgaD1uLnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeihuLnR0eSksaT1kZSgpO1lbaT4+MV09aFswXSxZW2krMj4+MV09aFsxXX1yZXR1cm4gMH1jYXNlIDIxNTI0OnJldHVybiBuLnR0eT8wOi01OTtjYXNlIDIxNTE1OnJldHVybiBuLnR0eT8wOi01OTtkZWZhdWx0OnJldHVybi0yOH19Y2F0Y2gocCl7aWYodHlwZW9mIG8+InUifHxwLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcDtyZXR1cm4tcC5lcnJub319ZnVuY3Rpb24gQnQoZSxyKXt0cnl7cmV0dXJuIGU9UC5nZXRTdHIoZSksUC5kb1N0YXQoby5sc3RhdCxlLHIpfWNhdGNoKHQpe2lmKHR5cGVvZiBvPiJ1Inx8dC5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IHQ7cmV0dXJuLXQuZXJybm99fWZ1bmN0aW9uIE50KGUscix0LG4pe3RyeXtyPVAuZ2V0U3RyKHIpO3ZhciBhPW4mMjU2LGk9biY0MDk2O3JldHVybiBuPW4mLTY0MDEscj1QLmNhbGN1bGF0ZUF0KGUscixpKSxQLmRvU3RhdChhP28ubHN0YXQ6by5zdGF0LHIsdCl9Y2F0Y2gocyl7aWYodHlwZW9mIG8+InUifHxzLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcztyZXR1cm4tcy5lcnJub319ZnVuY3Rpb24gWXQoZSxyLHQsbil7UC52YXJhcmdzPW47dHJ5e3I9UC5nZXRTdHIocikscj1QLmNhbGN1bGF0ZUF0KGUscik7dmFyIGE9bj9NZSgpOjA7cmV0dXJuIG8ub3BlbihyLHQsYSkuZmR9Y2F0Y2goaSl7aWYodHlwZW9mIG8+InUifHxpLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgaTtyZXR1cm4taS5lcnJub319ZnVuY3Rpb24gR3QoZSxyLHQsbil7dHJ5e3JldHVybiByPVAuZ2V0U3RyKHIpLG49UC5nZXRTdHIobikscj1QLmNhbGN1bGF0ZUF0KGUsciksbj1QLmNhbGN1bGF0ZUF0KHQsbiksby5yZW5hbWUocixuKSwwfWNhdGNoKGEpe2lmKHR5cGVvZiBvPiJ1Inx8YS5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IGE7cmV0dXJuLWEuZXJybm99fWZ1bmN0aW9uIHF0KGUpe3RyeXtyZXR1cm4gZT1QLmdldFN0cihlKSxvLnJtZGlyKGUpLDB9Y2F0Y2gocil7aWYodHlwZW9mIG8+InUifHxyLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcjtyZXR1cm4tci5lcnJub319ZnVuY3Rpb24gWHQoZSxyKXt0cnl7cmV0dXJuIGU9UC5nZXRTdHIoZSksUC5kb1N0YXQoby5zdGF0LGUscil9Y2F0Y2godCl7aWYodHlwZW9mIG8+InUifHx0Lm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgdDtyZXR1cm4tdC5lcnJub319ZnVuY3Rpb24gS3QoZSxyLHQpe3RyeXtyZXR1cm4gcj1QLmdldFN0cihyKSxyPVAuY2FsY3VsYXRlQXQoZSxyKSx0PT09MD9vLnVubGluayhyKTp0PT09NTEyP28ucm1kaXIocik6aWUoIkludmFsaWQgZmxhZ3MgcGFzc2VkIHRvIHVubGlua2F0IiksMH1jYXRjaChuKXtpZih0eXBlb2Ygbz4idSJ8fG4ubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBuO3JldHVybi1uLmVycm5vfX12YXIgSnQ9KCk9PntpZSgiIil9LFJlPXt9LHJyPWU9Pntmb3IoO2UubGVuZ3RoOyl7dmFyIHI9ZS5wb3AoKSx0PWUucG9wKCk7dChyKX19O2Z1bmN0aW9uIHllKGUpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShBW2U+PjJdKX12YXIgaGU9e30sdWU9e30sT2U9e30sU3IsSWU9ZT0+e3Rocm93IG5ldyBTcihlKX0sTj0oZSxyLHQpPT57ZS5mb3JFYWNoKGZ1bmN0aW9uKGwpe09lW2xdPXJ9KTtmdW5jdGlvbiBuKGwpe3ZhciB1PXQobCk7dS5sZW5ndGghPT1lLmxlbmd0aCYmSWUoIk1pc21hdGNoZWQgdHlwZSBjb252ZXJ0ZXIgY291bnQiKTtmb3IodmFyIGM9MDtjPGUubGVuZ3RoOysrYylLKGVbY10sdVtjXSl9dmFyIGE9bmV3IEFycmF5KHIubGVuZ3RoKSxpPVtdLHM9MDtyLmZvckVhY2goKGwsdSk9Pnt1ZS5oYXNPd25Qcm9wZXJ0eShsKT9hW3VdPXVlW2xdOihpLnB1c2gobCksaGUuaGFzT3duUHJvcGVydHkobCl8fChoZVtsXT1bXSksaGVbbF0ucHVzaCgoKT0+e2FbdV09dWVbbF0sKytzLHM9PT1pLmxlbmd0aCYmbihhKX0pKX0pLGkubGVuZ3RoPT09MCYmbihhKX0sWnQ9ZT0+e3ZhciByPVJlW2VdO2RlbGV0ZSBSZVtlXTt2YXIgdD1yLnJhd0NvbnN0cnVjdG9yLG49ci5yYXdEZXN0cnVjdG9yLGE9ci5maWVsZHMsaT1hLm1hcChzPT5zLmdldHRlclJldHVyblR5cGUpLmNvbmNhdChhLm1hcChzPT5zLnNldHRlckFyZ3VtZW50VHlwZSkpO04oW2VdLGkscz0+e3ZhciBsPXt9O3JldHVybiBhLmZvckVhY2goKHUsYyk9Pnt2YXIgZD11LmZpZWxkTmFtZSxtPXNbY10saD11LmdldHRlcixwPXUuZ2V0dGVyQ29udGV4dCx3PXNbYythLmxlbmd0aF0sRD11LnNldHRlcixNPXUuc2V0dGVyQ29udGV4dDtsW2RdPXtyZWFkOkY9Pm0uZnJvbVdpcmVUeXBlKGgocCxGKSksd3JpdGU6KEYsdik9Pnt2YXIgXz1bXTtEKE0sRix3LnRvV2lyZVR5cGUoXyx2KSkscnIoXyl9fX0pLFt7bmFtZTpyLm5hbWUsZnJvbVdpcmVUeXBlOnU9Pnt2YXIgYz17fTtmb3IodmFyIGQgaW4gbCljW2RdPWxbZF0ucmVhZCh1KTtyZXR1cm4gbih1KSxjfSx0b1dpcmVUeXBlOih1LGMpPT57Zm9yKHZhciBkIGluIGwpaWYoIShkIGluIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoYE1pc3NpbmcgZmllbGQ6ICIke2R9ImApO3ZhciBtPXQoKTtmb3IoZCBpbiBsKWxbZF0ud3JpdGUobSxjW2RdKTtyZXR1cm4gdSE9PW51bGwmJnUucHVzaChuLG0pLG19LGFyZ1BhY2tBZHZhbmNlOkoscmVhZFZhbHVlRnJvbVBvaW50ZXI6eWUsZGVzdHJ1Y3RvckZ1bmN0aW9uOm59XX0pfSxRdD0oZSxyLHQsbixhKT0+e30sZW49KCk9Pntmb3IodmFyIGU9bmV3IEFycmF5KDI1Nikscj0wO3I8MjU2OysrcillW3JdPVN0cmluZy5mcm9tQ2hhckNvZGUocik7TXI9ZX0sTXIsaj1lPT57Zm9yKHZhciByPSIiLHQ9ZTt4W3RdOylyKz1Nclt4W3QrK11dO3JldHVybiByfSxtZSxrPWU9Pnt0aHJvdyBuZXcgbWUoZSl9O2Z1bmN0aW9uIHJuKGUscix0PXt9KXt2YXIgbj1yLm5hbWU7aWYoZXx8ayhgdHlwZSAiJHtufSIgbXVzdCBoYXZlIGEgcG9zaXRpdmUgaW50ZWdlciB0eXBlaWQgcG9pbnRlcmApLHVlLmhhc093blByb3BlcnR5KGUpKXtpZih0Lmlnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnMpcmV0dXJuO2soYENhbm5vdCByZWdpc3RlciB0eXBlICcke259JyB0d2ljZWApfWlmKHVlW2VdPXIsZGVsZXRlIE9lW2VdLGhlLmhhc093blByb3BlcnR5KGUpKXt2YXIgYT1oZVtlXTtkZWxldGUgaGVbZV0sYS5mb3JFYWNoKGk9PmkoKSl9fWZ1bmN0aW9uIEsoZSxyLHQ9e30pe2lmKCEoImFyZ1BhY2tBZHZhbmNlImluIHIpKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZ2lzdGVyVHlwZSByZWdpc3RlcmVkSW5zdGFuY2UgcmVxdWlyZXMgYXJnUGFja0FkdmFuY2UiKTtyZXR1cm4gcm4oZSxyLHQpfXZhciBKPTgsdG49KGUscix0LG4pPT57cj1qKHIpLEsoZSx7bmFtZTpyLGZyb21XaXJlVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4hIWF9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oYSxpKXtyZXR1cm4gaT90Om59LGFyZ1BhY2tBZHZhbmNlOkoscmVhZFZhbHVlRnJvbVBvaW50ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHhbYV0pfSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSxubj1lPT4oe2NvdW50OmUuY291bnQsZGVsZXRlU2NoZWR1bGVkOmUuZGVsZXRlU2NoZWR1bGVkLHByZXNlcnZlUG9pbnRlck9uRGVsZXRlOmUucHJlc2VydmVQb2ludGVyT25EZWxldGUscHRyOmUucHRyLHB0clR5cGU6ZS5wdHJUeXBlLHNtYXJ0UHRyOmUuc21hcnRQdHIsc21hcnRQdHJUeXBlOmUuc21hcnRQdHJUeXBlfSksdHI9ZT0+e2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MubmFtZX1rKHIoZSkrIiBpbnN0YW5jZSBhbHJlYWR5IGRlbGV0ZWQiKX0sbnI9ITEsUnI9ZT0+e30sYW49ZT0+e2Uuc21hcnRQdHI/ZS5zbWFydFB0clR5cGUucmF3RGVzdHJ1Y3RvcihlLnNtYXJ0UHRyKTplLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLnJhd0Rlc3RydWN0b3IoZS5wdHIpfSxPcj1lPT57ZS5jb3VudC52YWx1ZS09MTt2YXIgcj1lLmNvdW50LnZhbHVlPT09MDtyJiZhbihlKX0sSXI9KGUscix0KT0+e2lmKHI9PT10KXJldHVybiBlO2lmKHQuYmFzZUNsYXNzPT09dm9pZCAwKXJldHVybiBudWxsO3ZhciBuPUlyKGUscix0LmJhc2VDbGFzcyk7cmV0dXJuIG49PT1udWxsP251bGw6dC5kb3duY2FzdChuKX0sTHI9e30sb249KCk9Pk9iamVjdC5rZXlzKGJlKS5sZW5ndGgsc249KCk9Pnt2YXIgZT1bXTtmb3IodmFyIHIgaW4gYmUpYmUuaGFzT3duUHJvcGVydHkocikmJmUucHVzaChiZVtyXSk7cmV0dXJuIGV9LHdlPVtdLGFyPSgpPT57Zm9yKDt3ZS5sZW5ndGg7KXt2YXIgZT13ZS5wb3AoKTtlLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxlLmRlbGV0ZSgpfX0sRWUsbG49ZT0+e0VlPWUsd2UubGVuZ3RoJiZFZSYmRWUoYXIpfSx1bj0oKT0+e2YuZ2V0SW5oZXJpdGVkSW5zdGFuY2VDb3VudD1vbixmLmdldExpdmVJbmhlcml0ZWRJbnN0YW5jZXM9c24sZi5mbHVzaFBlbmRpbmdEZWxldGVzPWFyLGYuc2V0RGVsYXlGdW5jdGlvbj1sbn0sYmU9e30sZm49KGUscik9Pntmb3Iocj09PXZvaWQgMCYmaygicHRyIHNob3VsZCBub3QgYmUgdW5kZWZpbmVkIik7ZS5iYXNlQ2xhc3M7KXI9ZS51cGNhc3QociksZT1lLmJhc2VDbGFzcztyZXR1cm4gcn0sY249KGUscik9PihyPWZuKGUsciksYmVbcl0pLExlPShlLHIpPT57KCFyLnB0clR5cGV8fCFyLnB0cikmJkllKCJtYWtlQ2xhc3NIYW5kbGUgcmVxdWlyZXMgcHRyIGFuZCBwdHJUeXBlIik7dmFyIHQ9ISFyLnNtYXJ0UHRyVHlwZSxuPSEhci5zbWFydFB0cjtyZXR1cm4gdCE9PW4mJkllKCJCb3RoIHNtYXJ0UHRyVHlwZSBhbmQgc21hcnRQdHIgbXVzdCBiZSBzcGVjaWZpZWQiKSxyLmNvdW50PXt2YWx1ZToxfSxrZShPYmplY3QuY3JlYXRlKGUseyQkOnt2YWx1ZTpyLHdyaXRhYmxlOiEwfX0pKX07ZnVuY3Rpb24gZG4oZSl7dmFyIHI9dGhpcy5nZXRQb2ludGVlKGUpO2lmKCFyKXJldHVybiB0aGlzLmRlc3RydWN0b3IoZSksbnVsbDt2YXIgdD1jbih0aGlzLnJlZ2lzdGVyZWRDbGFzcyxyKTtpZih0IT09dm9pZCAwKXtpZih0LiQkLmNvdW50LnZhbHVlPT09MClyZXR1cm4gdC4kJC5wdHI9cix0LiQkLnNtYXJ0UHRyPWUsdC5jbG9uZSgpO3ZhciBuPXQuY2xvbmUoKTtyZXR1cm4gdGhpcy5kZXN0cnVjdG9yKGUpLG59ZnVuY3Rpb24gYSgpe3JldHVybiB0aGlzLmlzU21hcnRQb2ludGVyP0xlKHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMucG9pbnRlZVR5cGUscHRyOnIsc21hcnRQdHJUeXBlOnRoaXMsc21hcnRQdHI6ZX0pOkxlKHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMscHRyOmV9KX12YXIgaT10aGlzLnJlZ2lzdGVyZWRDbGFzcy5nZXRBY3R1YWxUeXBlKHIpLHM9THJbaV07aWYoIXMpcmV0dXJuIGEuY2FsbCh0aGlzKTt2YXIgbDt0aGlzLmlzQ29uc3Q/bD1zLmNvbnN0UG9pbnRlclR5cGU6bD1zLnBvaW50ZXJUeXBlO3ZhciB1PUlyKHIsdGhpcy5yZWdpc3RlcmVkQ2xhc3MsbC5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiB1PT09bnVsbD9hLmNhbGwodGhpcyk6dGhpcy5pc1NtYXJ0UG9pbnRlcj9MZShsLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTpsLHB0cjp1LHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOmV9KTpMZShsLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTpsLHB0cjp1fSl9dmFyIGtlPWU9PnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/KGtlPXI9PnIsZSk6KG5yPW5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShyPT57T3Ioci4kJCl9KSxrZT1yPT57dmFyIHQ9ci4kJCxuPSEhdC5zbWFydFB0cjtpZihuKXt2YXIgYT17JCQ6dH07bnIucmVnaXN0ZXIocixhLHIpfXJldHVybiByfSxScj1yPT5uci51bnJlZ2lzdGVyKHIpLGtlKGUpKSx2bj0oKT0+e09iamVjdC5hc3NpZ24oVmUucHJvdG90eXBlLHtpc0FsaWFzT2YoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgVmUpfHwhKGUgaW5zdGFuY2VvZiBWZSkpcmV0dXJuITE7dmFyIHI9dGhpcy4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyx0PXRoaXMuJCQucHRyO2UuJCQ9ZS4kJDtmb3IodmFyIG49ZS4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxhPWUuJCQucHRyO3IuYmFzZUNsYXNzOyl0PXIudXBjYXN0KHQpLHI9ci5iYXNlQ2xhc3M7Zm9yKDtuLmJhc2VDbGFzczspYT1uLnVwY2FzdChhKSxuPW4uYmFzZUNsYXNzO3JldHVybiByPT09biYmdD09PWF9LGNsb25lKCl7aWYodGhpcy4kJC5wdHJ8fHRyKHRoaXMpLHRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUpcmV0dXJuIHRoaXMuJCQuY291bnQudmFsdWUrPTEsdGhpczt2YXIgZT1rZShPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSx7JCQ6e3ZhbHVlOm5uKHRoaXMuJCQpfX0pKTtyZXR1cm4gZS4kJC5jb3VudC52YWx1ZSs9MSxlLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxlfSxkZWxldGUoKXt0aGlzLiQkLnB0cnx8dHIodGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZrKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIiksUnIodGhpcyksT3IodGhpcy4kJCksdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZXx8KHRoaXMuJCQuc21hcnRQdHI9dm9pZCAwLHRoaXMuJCQucHRyPXZvaWQgMCl9LGlzRGVsZXRlZCgpe3JldHVybiF0aGlzLiQkLnB0cn0sZGVsZXRlTGF0ZXIoKXtyZXR1cm4gdGhpcy4kJC5wdHJ8fHRyKHRoaXMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkJiYhdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSYmaygiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvbiIpLHdlLnB1c2godGhpcyksd2UubGVuZ3RoPT09MSYmRWUmJkVlKGFyKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMCx0aGlzfX0pfTtmdW5jdGlvbiBWZSgpe312YXIgVWU9KGUscik9Pk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJuYW1lIix7dmFsdWU6ZX0pLG9yPShlLHIsdCk9PntpZihlW3JdLm92ZXJsb2FkVGFibGU9PT12b2lkIDApe3ZhciBuPWVbcl07ZVtyXT1mdW5jdGlvbiguLi5hKXtyZXR1cm4gZVtyXS5vdmVybG9hZFRhYmxlLmhhc093blByb3BlcnR5KGEubGVuZ3RoKXx8ayhgRnVuY3Rpb24gJyR7dH0nIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyAoJHthLmxlbmd0aH0pIC0gZXhwZWN0cyBvbmUgb2YgKCR7ZVtyXS5vdmVybG9hZFRhYmxlfSkhYCksZVtyXS5vdmVybG9hZFRhYmxlW2EubGVuZ3RoXS5hcHBseSh0aGlzLGEpfSxlW3JdLm92ZXJsb2FkVGFibGU9W10sZVtyXS5vdmVybG9hZFRhYmxlW24uYXJnQ291bnRdPW59fSxWcj0oZSxyLHQpPT57Zi5oYXNPd25Qcm9wZXJ0eShlKT8oKHQ9PT12b2lkIDB8fGZbZV0ub3ZlcmxvYWRUYWJsZSE9PXZvaWQgMCYmZltlXS5vdmVybG9hZFRhYmxlW3RdIT09dm9pZCAwKSYmayhgQ2Fubm90IHJlZ2lzdGVyIHB1YmxpYyBuYW1lICcke2V9JyB0d2ljZWApLG9yKGYsZSxlKSxmLmhhc093blByb3BlcnR5KHQpJiZrKGBDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgb3ZlcmxvYWRzIG9mIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgYXJndW1lbnRzICgke3R9KSFgKSxmW2VdLm92ZXJsb2FkVGFibGVbdF09cik6KGZbZV09cix0IT09dm9pZCAwJiYoZltlXS5udW1Bcmd1bWVudHM9dCkpfSxobj00OCxtbj01Nyxwbj1lPT57aWYoZT09PXZvaWQgMClyZXR1cm4iX3Vua25vd24iO2U9ZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csIiQiKTt2YXIgcj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHI+PWhuJiZyPD1tbj9gXyR7ZX1gOmV9O2Z1bmN0aW9uIF9uKGUscix0LG4sYSxpLHMsbCl7dGhpcy5uYW1lPWUsdGhpcy5jb25zdHJ1Y3Rvcj1yLHRoaXMuaW5zdGFuY2VQcm90b3R5cGU9dCx0aGlzLnJhd0Rlc3RydWN0b3I9bix0aGlzLmJhc2VDbGFzcz1hLHRoaXMuZ2V0QWN0dWFsVHlwZT1pLHRoaXMudXBjYXN0PXMsdGhpcy5kb3duY2FzdD1sLHRoaXMucHVyZVZpcnR1YWxGdW5jdGlvbnM9W119dmFyIGplPShlLHIsdCk9Pntmb3IoO3IhPT10OylyLnVwY2FzdHx8ayhgRXhwZWN0ZWQgbnVsbCBvciBpbnN0YW5jZSBvZiAke3QubmFtZX0sIGdvdCBhbiBpbnN0YW5jZSBvZiAke3IubmFtZX1gKSxlPXIudXBjYXN0KGUpLHI9ci5iYXNlQ2xhc3M7cmV0dXJuIGV9O2Z1bmN0aW9uIGduKGUscil7aWYocj09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJmsoYG51bGwgaXMgbm90IGEgdmFsaWQgJHt0aGlzLm5hbWV9YCksMDtyLiQkfHxrKGBDYW5ub3QgcGFzcyAiJHtscihyKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCksci4kJC5wdHJ8fGsoYENhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICR7dGhpcy5uYW1lfWApO3ZhciB0PXIuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3Msbj1qZShyLiQkLnB0cix0LHRoaXMucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4gbn1mdW5jdGlvbiB5bihlLHIpe3ZhciB0O2lmKHI9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZrKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApLHRoaXMuaXNTbWFydFBvaW50ZXI/KHQ9dGhpcy5yYXdDb25zdHJ1Y3RvcigpLGUhPT1udWxsJiZlLnB1c2godGhpcy5yYXdEZXN0cnVjdG9yLHQpLHQpOjA7KCFyfHwhci4kJCkmJmsoYENhbm5vdCBwYXNzICIke2xyKHIpfSIgYXMgYSAke3RoaXMubmFtZX1gKSxyLiQkLnB0cnx8ayhgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCksIXRoaXMuaXNDb25zdCYmci4kJC5wdHJUeXBlLmlzQ29uc3QmJmsoYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtyLiQkLnNtYXJ0UHRyVHlwZT9yLiQkLnNtYXJ0UHRyVHlwZS5uYW1lOnIuJCQucHRyVHlwZS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gKTt2YXIgbj1yLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzO2lmKHQ9amUoci4kJC5wdHIsbix0aGlzLnJlZ2lzdGVyZWRDbGFzcyksdGhpcy5pc1NtYXJ0UG9pbnRlcilzd2l0Y2goci4kJC5zbWFydFB0cj09PXZvaWQgMCYmaygiUGFzc2luZyByYXcgcG9pbnRlciB0byBzbWFydCBwb2ludGVyIGlzIGlsbGVnYWwiKSx0aGlzLnNoYXJpbmdQb2xpY3kpe2Nhc2UgMDpyLiQkLnNtYXJ0UHRyVHlwZT09PXRoaXM/dD1yLiQkLnNtYXJ0UHRyOmsoYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtyLiQkLnNtYXJ0UHRyVHlwZT9yLiQkLnNtYXJ0UHRyVHlwZS5uYW1lOnIuJCQucHRyVHlwZS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gKTticmVhaztjYXNlIDE6dD1yLiQkLnNtYXJ0UHRyO2JyZWFrO2Nhc2UgMjppZihyLiQkLnNtYXJ0UHRyVHlwZT09PXRoaXMpdD1yLiQkLnNtYXJ0UHRyO2Vsc2V7dmFyIGE9ci5jbG9uZSgpO3Q9dGhpcy5yYXdTaGFyZSh0LHRlLnRvSGFuZGxlKCgpPT5hLmRlbGV0ZSgpKSksZSE9PW51bGwmJmUucHVzaCh0aGlzLnJhd0Rlc3RydWN0b3IsdCl9YnJlYWs7ZGVmYXVsdDprKCJVbnN1cHBvcnRpbmcgc2hhcmluZyBwb2xpY3kiKX1yZXR1cm4gdH1mdW5jdGlvbiB3bihlLHIpe2lmKHI9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZrKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApLDA7ci4kJHx8ayhgQ2Fubm90IHBhc3MgIiR7bHIocil9IiBhcyBhICR7dGhpcy5uYW1lfWApLHIuJCQucHRyfHxrKGBDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAke3RoaXMubmFtZX1gKSxyLiQkLnB0clR5cGUuaXNDb25zdCYmayhgQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAke3IuJCQucHRyVHlwZS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gKTt2YXIgdD1yLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLG49amUoci4kJC5wdHIsdCx0aGlzLnJlZ2lzdGVyZWRDbGFzcyk7cmV0dXJuIG59dmFyIEVuPSgpPT57T2JqZWN0LmFzc2lnbih6ZS5wcm90b3R5cGUse2dldFBvaW50ZWUoZSl7cmV0dXJuIHRoaXMucmF3R2V0UG9pbnRlZSYmKGU9dGhpcy5yYXdHZXRQb2ludGVlKGUpKSxlfSxkZXN0cnVjdG9yKGUpe3ZhciByOyhyPXRoaXMucmF3RGVzdHJ1Y3Rvcik9PW51bGx8fHIuY2FsbCh0aGlzLGUpfSxhcmdQYWNrQWR2YW5jZTpKLHJlYWRWYWx1ZUZyb21Qb2ludGVyOnllLGZyb21XaXJlVHlwZTpkbn0pfTtmdW5jdGlvbiB6ZShlLHIsdCxuLGEsaSxzLGwsdSxjLGQpe3RoaXMubmFtZT1lLHRoaXMucmVnaXN0ZXJlZENsYXNzPXIsdGhpcy5pc1JlZmVyZW5jZT10LHRoaXMuaXNDb25zdD1uLHRoaXMuaXNTbWFydFBvaW50ZXI9YSx0aGlzLnBvaW50ZWVUeXBlPWksdGhpcy5zaGFyaW5nUG9saWN5PXMsdGhpcy5yYXdHZXRQb2ludGVlPWwsdGhpcy5yYXdDb25zdHJ1Y3Rvcj11LHRoaXMucmF3U2hhcmU9Yyx0aGlzLnJhd0Rlc3RydWN0b3I9ZCwhYSYmci5iYXNlQ2xhc3M9PT12b2lkIDA/bj8odGhpcy50b1dpcmVUeXBlPWduLHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uPW51bGwpOih0aGlzLnRvV2lyZVR5cGU9d24sdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCk6dGhpcy50b1dpcmVUeXBlPXlufXZhciBVcj0oZSxyLHQpPT57Zi5oYXNPd25Qcm9wZXJ0eShlKXx8SWUoIlJlcGxhY2luZyBub25leGlzdGVudCBwdWJsaWMgc3ltYm9sIiksZltlXS5vdmVybG9hZFRhYmxlIT09dm9pZCAwJiZ0IT09dm9pZCAwP2ZbZV0ub3ZlcmxvYWRUYWJsZVt0XT1yOihmW2VdPXIsZltlXS5hcmdDb3VudD10KX0sYm49KGUscix0KT0+e2U9ZS5yZXBsYWNlKC9wL2csImkiKTt2YXIgbj1mWyJkeW5DYWxsXyIrZV07cmV0dXJuIG4ociwuLi50KX0seGU9W10sanIsenI9ZT0+e3ZhciByPXhlW2VdO3JldHVybiByfHwoZT49eGUubGVuZ3RoJiYoeGUubGVuZ3RoPWUrMSkseGVbZV09cj1qci5nZXQoZSkpLHJ9LGtuPShlLHIsdD1bXSk9PntpZihlLmluY2x1ZGVzKCJqIikpcmV0dXJuIGJuKGUscix0KTt2YXIgbj16cihyKSguLi50KTtyZXR1cm4gbn0sUG49KGUscik9PiguLi50KT0+a24oZSxyLHQpLFc9KGUscik9PntlPWooZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmluY2x1ZGVzKCJqIik/UG4oZSxyKTp6cihyKX12YXIgbj10KCk7cmV0dXJuIHR5cGVvZiBuIT0iZnVuY3Rpb24iJiZrKGB1bmtub3duIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aCBzaWduYXR1cmUgJHtlfTogJHtyfWApLG59LEFuPShlLHIpPT57dmFyIHQ9VWUocixmdW5jdGlvbihuKXt0aGlzLm5hbWU9cix0aGlzLm1lc3NhZ2U9bjt2YXIgYT1uZXcgRXJyb3Iobikuc3RhY2s7YSE9PXZvaWQgMCYmKHRoaXMuc3RhY2s9dGhpcy50b1N0cmluZygpK2AKYCthLnJlcGxhY2UoL15FcnJvcig6W15cbl0qKT9cbi8sIiIpKX0pO3JldHVybiB0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZT09PXZvaWQgMD90aGlzLm5hbWU6YCR7dGhpcy5uYW1lfTogJHt0aGlzLm1lc3NhZ2V9YH0sdH0seHIsSHI9ZT0+e3ZhciByPWV0KGUpLHQ9aihyKTtyZXR1cm4gWihyKSx0fSxmZT0oZSxyKT0+e3ZhciB0PVtdLG49e307ZnVuY3Rpb24gYShpKXtpZighbltpXSYmIXVlW2ldKXtpZihPZVtpXSl7T2VbaV0uZm9yRWFjaChhKTtyZXR1cm59dC5wdXNoKGkpLG5baV09ITB9fXRocm93IHIuZm9yRWFjaChhKSxuZXcgeHIoYCR7ZX06IGArdC5tYXAoSHIpLmpvaW4oWyIsICJdKSl9LERuPShlLHIsdCxuLGEsaSxzLGwsdSxjLGQsbSxoKT0+e2Q9aihkKSxpPVcoYSxpKSxsJiYobD1XKHMsbCkpLGMmJihjPVcodSxjKSksaD1XKG0saCk7dmFyIHA9cG4oZCk7VnIocCxmdW5jdGlvbigpe2ZlKGBDYW5ub3QgY29uc3RydWN0ICR7ZH0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLFtuXSl9KSxOKFtlLHIsdF0sbj9bbl06W10sdz0+e3ZhciBPO3c9d1swXTt2YXIgRCxNO24/KEQ9dy5yZWdpc3RlcmVkQ2xhc3MsTT1ELmluc3RhbmNlUHJvdG90eXBlKTpNPVZlLnByb3RvdHlwZTt2YXIgRj1VZShkLGZ1bmN0aW9uKC4uLnZyKXtpZihPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykhPT12KXRocm93IG5ldyBtZSgiVXNlICduZXcnIHRvIGNvbnN0cnVjdCAiK2QpO2lmKF8uY29uc3RydWN0b3JfYm9keT09PXZvaWQgMCl0aHJvdyBuZXcgbWUoZCsiIGhhcyBubyBhY2Nlc3NpYmxlIGNvbnN0cnVjdG9yIik7dmFyIG90PV8uY29uc3RydWN0b3JfYm9keVt2ci5sZW5ndGhdO2lmKG90PT09dm9pZCAwKXRocm93IG5ldyBtZShgVHJpZWQgdG8gaW52b2tlIGN0b3Igb2YgJHtkfSB3aXRoIGludmFsaWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKCR7dnIubGVuZ3RofSkgLSBleHBlY3RlZCAoJHtPYmplY3Qua2V5cyhfLmNvbnN0cnVjdG9yX2JvZHkpLnRvU3RyaW5nKCl9KSBwYXJhbWV0ZXJzIGluc3RlYWQhYCk7cmV0dXJuIG90LmFwcGx5KHRoaXMsdnIpfSksdj1PYmplY3QuY3JlYXRlKE0se2NvbnN0cnVjdG9yOnt2YWx1ZTpGfX0pO0YucHJvdG90eXBlPXY7dmFyIF89bmV3IF9uKGQsRix2LGgsRCxpLGwsYyk7Xy5iYXNlQ2xhc3MmJigoTz1fLmJhc2VDbGFzcykuX19kZXJpdmVkQ2xhc3Nlcz8/KE8uX19kZXJpdmVkQ2xhc3Nlcz1bXSksXy5iYXNlQ2xhc3MuX19kZXJpdmVkQ2xhc3Nlcy5wdXNoKF8pKTt2YXIgTD1uZXcgemUoZCxfLCEwLCExLCExKSxUPW5ldyB6ZShkKyIqIixfLCExLCExLCExKSxCPW5ldyB6ZShkKyIgY29uc3QqIixfLCExLCEwLCExKTtyZXR1cm4gTHJbZV09e3BvaW50ZXJUeXBlOlQsY29uc3RQb2ludGVyVHlwZTpCfSxVcihwLEYpLFtMLFQsQl19KX07ZnVuY3Rpb24gV3IoZSl7Zm9yKHZhciByPTE7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXSE9PW51bGwmJmVbcl0uZGVzdHJ1Y3RvckZ1bmN0aW9uPT09dm9pZCAwKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uICRuKGUscil7aWYoIShlIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IG5ldyBUeXBlRXJyb3IoYG5ld18gY2FsbGVkIHdpdGggY29uc3RydWN0b3IgdHlwZSAke3R5cGVvZiBlfSB3aGljaCBpcyBub3QgYSBmdW5jdGlvbmApO3ZhciB0PVVlKGUubmFtZXx8InVua25vd25GdW5jdGlvbk5hbWUiLGZ1bmN0aW9uKCl7fSk7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU7dmFyIG49bmV3IHQsYT1lLmFwcGx5KG4scik7cmV0dXJuIGEgaW5zdGFuY2VvZiBPYmplY3Q/YTpufWZ1bmN0aW9uIENuKGUscix0LG4pe2Zvcih2YXIgYT1XcihlKSxpPWUubGVuZ3RoLHM9IiIsbD0iIix1PTA7dTxpLTI7Kyt1KXMrPSh1IT09MD8iLCAiOiIiKSsiYXJnIit1LGwrPSh1IT09MD8iLCAiOiIiKSsiYXJnIit1KyJXaXJlZCI7dmFyIGM9YAogICAgICAgIHJldHVybiBmdW5jdGlvbiAoJHtzfSkgewogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAke2ktMn0pIHsKICAgICAgICAgIHRocm93QmluZGluZ0Vycm9yKCdmdW5jdGlvbiAnICsgaHVtYW5OYW1lICsgJyBjYWxsZWQgd2l0aCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLCBleHBlY3RlZCAke2ktMn0nKTsKICAgICAgICB9YDthJiYoYys9YHZhciBkZXN0cnVjdG9ycyA9IFtdOwpgKTt2YXIgZD1hPyJkZXN0cnVjdG9ycyI6Im51bGwiLG09WyJodW1hbk5hbWUiLCJ0aHJvd0JpbmRpbmdFcnJvciIsImludm9rZXIiLCJmbiIsInJ1bkRlc3RydWN0b3JzIiwicmV0VHlwZSIsImNsYXNzUGFyYW0iXTtyJiYoYys9InZhciB0aGlzV2lyZWQgPSBjbGFzc1BhcmFtWyd0b1dpcmVUeXBlJ10oIitkK2AsIHRoaXMpOwpgKTtmb3IodmFyIHU9MDt1PGktMjsrK3UpYys9InZhciBhcmciK3UrIldpcmVkID0gYXJnVHlwZSIrdSsiWyd0b1dpcmVUeXBlJ10oIitkKyIsIGFyZyIrdStgKTsKYCxtLnB1c2goImFyZ1R5cGUiK3UpO2lmKHImJihsPSJ0aGlzV2lyZWQiKyhsLmxlbmd0aD4wPyIsICI6IiIpK2wpLGMrPSh0fHxuPyJ2YXIgcnYgPSAiOiIiKSsiaW52b2tlcihmbiIrKGwubGVuZ3RoPjA/IiwgIjoiIikrbCtgKTsKYCxhKWMrPWBydW5EZXN0cnVjdG9ycyhkZXN0cnVjdG9ycyk7CmA7ZWxzZSBmb3IodmFyIHU9cj8xOjI7dTxlLmxlbmd0aDsrK3Upe3ZhciBoPXU9PT0xPyJ0aGlzV2lyZWQiOiJhcmciKyh1LTIpKyJXaXJlZCI7ZVt1XS5kZXN0cnVjdG9yRnVuY3Rpb24hPT1udWxsJiYoYys9YCR7aH1fZHRvcigke2h9KTsKYCxtLnB1c2goYCR7aH1fZHRvcmApKX1yZXR1cm4gdCYmKGMrPWB2YXIgcmV0ID0gcmV0VHlwZVsnZnJvbVdpcmVUeXBlJ10ocnYpOwpyZXR1cm4gcmV0OwpgKSxjKz1gfQpgLFttLGNdfWZ1bmN0aW9uIEhlKGUscix0LG4sYSxpKXt2YXIgcz1yLmxlbmd0aDtzPDImJmsoImFyZ1R5cGVzIGFycmF5IHNpemUgbWlzbWF0Y2ghIE11c3QgYXQgbGVhc3QgZ2V0IHJldHVybiB2YWx1ZSBhbmQgJ3RoaXMnIHR5cGVzISIpO2Zvcih2YXIgbD1yWzFdIT09bnVsbCYmdCE9PW51bGwsdT1XcihyKSxjPXJbMF0ubmFtZSE9PSJ2b2lkIixkPVtlLGssbixhLHJyLHJbMF0sclsxXV0sbT0wO208cy0yOysrbSlkLnB1c2goclttKzJdKTtpZighdSlmb3IodmFyIG09bD8xOjI7bTxyLmxlbmd0aDsrK20pclttXS5kZXN0cnVjdG9yRnVuY3Rpb24hPT1udWxsJiZkLnB1c2goclttXS5kZXN0cnVjdG9yRnVuY3Rpb24pO2xldFtoLHBdPUNuKHIsbCxjLGkpO2gucHVzaChwKTt2YXIgdz0kbihGdW5jdGlvbixoKSguLi5kKTtyZXR1cm4gVWUoZSx3KX12YXIgV2U9KGUscik9Pntmb3IodmFyIHQ9W10sbj0wO248ZTtuKyspdC5wdXNoKEFbcituKjQ+PjJdKTtyZXR1cm4gdH0saXI9ZT0+e2U9ZS50cmltKCk7Y29uc3Qgcj1lLmluZGV4T2YoIigiKTtyZXR1cm4gciE9PS0xP2Uuc3Vic3RyKDAscik6ZX0sRm49KGUscix0LG4sYSxpLHMsbCk9Pnt2YXIgdT1XZSh0LG4pO3I9aihyKSxyPWlyKHIpLGk9VyhhLGkpLE4oW10sW2VdLGM9PntjPWNbMF07dmFyIGQ9YCR7Yy5uYW1lfS4ke3J9YDtmdW5jdGlvbiBtKCl7ZmUoYENhbm5vdCBjYWxsICR7ZH0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLHUpfXIuc3RhcnRzV2l0aCgiQEAiKSYmKHI9U3ltYm9sW3Iuc3Vic3RyaW5nKDIpXSk7dmFyIGg9Yy5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3I7cmV0dXJuIGhbcl09PT12b2lkIDA/KG0uYXJnQ291bnQ9dC0xLGhbcl09bSk6KG9yKGgscixkKSxoW3JdLm92ZXJsb2FkVGFibGVbdC0xXT1tKSxOKFtdLHUscD0+e3ZhciB3PVtwWzBdLG51bGxdLmNvbmNhdChwLnNsaWNlKDEpKSxEPUhlKGQsdyxudWxsLGkscyxsKTtpZihoW3JdLm92ZXJsb2FkVGFibGU9PT12b2lkIDA/KEQuYXJnQ291bnQ9dC0xLGhbcl09RCk6aFtyXS5vdmVybG9hZFRhYmxlW3QtMV09RCxjLnJlZ2lzdGVyZWRDbGFzcy5fX2Rlcml2ZWRDbGFzc2VzKWZvcihjb25zdCBNIG9mIGMucmVnaXN0ZXJlZENsYXNzLl9fZGVyaXZlZENsYXNzZXMpTS5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eShyKXx8KE0uY29uc3RydWN0b3Jbcl09RCk7cmV0dXJuW119KSxbXX0pfSxUbj0oZSxyLHQsbixhLGkpPT57dmFyIHM9V2Uocix0KTthPVcobixhKSxOKFtdLFtlXSxsPT57bD1sWzBdO3ZhciB1PWBjb25zdHJ1Y3RvciAke2wubmFtZX1gO2lmKGwucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHk9PT12b2lkIDAmJihsLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5PVtdKSxsLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5W3ItMV0hPT12b2lkIDApdGhyb3cgbmV3IG1lKGBDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgY29uc3RydWN0b3JzIHdpdGggaWRlbnRpY2FsIG51bWJlciBvZiBwYXJhbWV0ZXJzICgke3ItMX0pIGZvciBjbGFzcyAnJHtsLm5hbWV9JyEgT3ZlcmxvYWQgcmVzb2x1dGlvbiBpcyBjdXJyZW50bHkgb25seSBwZXJmb3JtZWQgdXNpbmcgdGhlIHBhcmFtZXRlciBjb3VudCwgbm90IGFjdHVhbCB0eXBlIGluZm8hYCk7cmV0dXJuIGwucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbci0xXT0oKT0+e2ZlKGBDYW5ub3QgY29uc3RydWN0ICR7bC5uYW1lfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2Ascyl9LE4oW10scyxjPT4oYy5zcGxpY2UoMSwwLG51bGwpLGwucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbci0xXT1IZSh1LGMsbnVsbCxhLGkpLFtdKSksW119KX0sU249KGUscix0LG4sYSxpLHMsbCx1KT0+e3ZhciBjPVdlKHQsbik7cj1qKHIpLHI9aXIociksaT1XKGEsaSksTihbXSxbZV0sZD0+e2Q9ZFswXTt2YXIgbT1gJHtkLm5hbWV9LiR7cn1gO3Iuc3RhcnRzV2l0aCgiQEAiKSYmKHI9U3ltYm9sW3Iuc3Vic3RyaW5nKDIpXSksbCYmZC5yZWdpc3RlcmVkQ2xhc3MucHVyZVZpcnR1YWxGdW5jdGlvbnMucHVzaChyKTtmdW5jdGlvbiBoKCl7ZmUoYENhbm5vdCBjYWxsICR7bX0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLGMpfXZhciBwPWQucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHc9cFtyXTtyZXR1cm4gdz09PXZvaWQgMHx8dy5vdmVybG9hZFRhYmxlPT09dm9pZCAwJiZ3LmNsYXNzTmFtZSE9PWQubmFtZSYmdy5hcmdDb3VudD09PXQtMj8oaC5hcmdDb3VudD10LTIsaC5jbGFzc05hbWU9ZC5uYW1lLHBbcl09aCk6KG9yKHAscixtKSxwW3JdLm92ZXJsb2FkVGFibGVbdC0yXT1oKSxOKFtdLGMsRD0+e3ZhciBNPUhlKG0sRCxkLGkscyx1KTtyZXR1cm4gcFtyXS5vdmVybG9hZFRhYmxlPT09dm9pZCAwPyhNLmFyZ0NvdW50PXQtMixwW3JdPU0pOnBbcl0ub3ZlcmxvYWRUYWJsZVt0LTJdPU0sW119KSxbXX0pfSxCcj0oZSxyLHQpPT4oZSBpbnN0YW5jZW9mIE9iamVjdHx8ayhgJHt0fSB3aXRoIGludmFsaWQgInRoaXMiOiAke2V9YCksZSBpbnN0YW5jZW9mIHIucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yfHxrKGAke3R9IGluY29tcGF0aWJsZSB3aXRoICJ0aGlzIiBvZiB0eXBlICR7ZS5jb25zdHJ1Y3Rvci5uYW1lfWApLGUuJCQucHRyfHxrKGBjYW5ub3QgY2FsbCBlbXNjcmlwdGVuIGJpbmRpbmcgbWV0aG9kICR7dH0gb24gZGVsZXRlZCBvYmplY3RgKSxqZShlLiQkLnB0cixlLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLHIucmVnaXN0ZXJlZENsYXNzKSksTW49KGUscix0LG4sYSxpLHMsbCx1LGMpPT57cj1qKHIpLGE9VyhuLGEpLE4oW10sW2VdLGQ9PntkPWRbMF07dmFyIG09YCR7ZC5uYW1lfS4ke3J9YCxoPXtnZXQoKXtmZShgQ2Fubm90IGFjY2VzcyAke219IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCxbdCxzXSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTtyZXR1cm4gdT9oLnNldD0oKT0+ZmUoYENhbm5vdCBhY2Nlc3MgJHttfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsW3Qsc10pOmguc2V0PXA9PmsobSsiIGlzIGEgcmVhZC1vbmx5IHByb3BlcnR5IiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHIsaCksTihbXSx1P1t0LHNdOlt0XSxwPT57dmFyIHc9cFswXSxEPXtnZXQoKXt2YXIgRj1Ccih0aGlzLGQsbSsiIGdldHRlciIpO3JldHVybiB3LmZyb21XaXJlVHlwZShhKGksRikpfSxlbnVtZXJhYmxlOiEwfTtpZih1KXt1PVcobCx1KTt2YXIgTT1wWzFdO0Quc2V0PWZ1bmN0aW9uKEYpe3ZhciB2PUJyKHRoaXMsZCxtKyIgc2V0dGVyIiksXz1bXTt1KGMsdixNLnRvV2lyZVR5cGUoXyxGKSkscnIoXyl9fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUscixEKSxbXX0pLFtdfSl9LHNyPVtdLHJlPVtdLE5yPWU9PntlPjkmJi0tcmVbZSsxXT09PTAmJihyZVtlXT12b2lkIDAsc3IucHVzaChlKSl9LFJuPSgpPT5yZS5sZW5ndGgvMi01LXNyLmxlbmd0aCxPbj0oKT0+e3JlLnB1c2goMCwxLHZvaWQgMCwxLG51bGwsMSwhMCwxLCExLDEpLGYuY291bnRfZW12YWxfaGFuZGxlcz1Sbn0sdGU9e3RvVmFsdWU6ZT0+KGV8fGsoIkNhbm5vdCB1c2UgZGVsZXRlZCB2YWwuIGhhbmRsZSA9ICIrZSkscmVbZV0pLHRvSGFuZGxlOmU9Pntzd2l0Y2goZSl7Y2FzZSB2b2lkIDA6cmV0dXJuIDI7Y2FzZSBudWxsOnJldHVybiA0O2Nhc2UhMDpyZXR1cm4gNjtjYXNlITE6cmV0dXJuIDg7ZGVmYXVsdDp7Y29uc3Qgcj1zci5wb3AoKXx8cmUubGVuZ3RoO3JldHVybiByZVtyXT1lLHJlW3IrMV09MSxyfX19fSxJbj17bmFtZToiZW1zY3JpcHRlbjo6dmFsIixmcm9tV2lyZVR5cGU6ZT0+e3ZhciByPXRlLnRvVmFsdWUoZSk7cmV0dXJuIE5yKGUpLHJ9LHRvV2lyZVR5cGU6KGUscik9PnRlLnRvSGFuZGxlKHIpLGFyZ1BhY2tBZHZhbmNlOkoscmVhZFZhbHVlRnJvbVBvaW50ZXI6eWUsZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9LFlyPWU9PksoZSxJbiksbHI9ZT0+e2lmKGU9PT1udWxsKXJldHVybiJudWxsIjt2YXIgcj10eXBlb2YgZTtyZXR1cm4gcj09PSJvYmplY3QifHxyPT09ImFycmF5Inx8cj09PSJmdW5jdGlvbiI/ZS50b1N0cmluZygpOiIiK2V9LExuPShlLHIpPT57c3dpdGNoKHIpe2Nhc2UgNDpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKGdyW3Q+PjJdKX07Y2FzZSA4OnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoeXJbdD4+M10pfTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgZmxvYXQgd2lkdGggKCR7cn0pOiAke2V9YCl9fSxWbj0oZSxyLHQpPT57cj1qKHIpLEsoZSx7bmFtZTpyLGZyb21XaXJlVHlwZTpuPT5uLHRvV2lyZVR5cGU6KG4sYSk9PmEsYXJnUGFja0FkdmFuY2U6SixyZWFkVmFsdWVGcm9tUG9pbnRlcjpMbihyLHQpLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9LFVuPShlLHIsdCxuLGEsaSxzKT0+e3ZhciBsPVdlKHIsdCk7ZT1qKGUpLGU9aXIoZSksYT1XKG4sYSksVnIoZSxmdW5jdGlvbigpe2ZlKGBDYW5ub3QgY2FsbCAke2V9IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCxsKX0sci0xKSxOKFtdLGwsdT0+e3ZhciBjPVt1WzBdLG51bGxdLmNvbmNhdCh1LnNsaWNlKDEpKTtyZXR1cm4gVXIoZSxIZShlLGMsbnVsbCxhLGkscyksci0xKSxbXX0pfSxqbj0oZSxyLHQpPT57c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gdD9uPT5JW25dOm49Pnhbbl07Y2FzZSAyOnJldHVybiB0P249Pllbbj4+MV06bj0+Q2Vbbj4+MV07Y2FzZSA0OnJldHVybiB0P249Pmdbbj4+Ml06bj0+QVtuPj4yXTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZWdlciB3aWR0aCAoJHtyfSk6ICR7ZX1gKX19LHpuPShlLHIsdCxuLGEpPT57cj1qKHIpO3ZhciBpPWQ9PmQ7aWYobj09PTApe3ZhciBzPTMyLTgqdDtpPWQ9PmQ8PHM+Pj5zfXZhciBsPXIuaW5jbHVkZXMoInVuc2lnbmVkIiksdT0oZCxtKT0+e30sYztsP2M9ZnVuY3Rpb24oZCxtKXtyZXR1cm4gdShtLHRoaXMubmFtZSksbT4+PjB9OmM9ZnVuY3Rpb24oZCxtKXtyZXR1cm4gdShtLHRoaXMubmFtZSksbX0sSyhlLHtuYW1lOnIsZnJvbVdpcmVUeXBlOmksdG9XaXJlVHlwZTpjLGFyZ1BhY2tBZHZhbmNlOkoscmVhZFZhbHVlRnJvbVBvaW50ZXI6am4ocix0LG4hPT0wKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSx4bj0oZSxyLHQpPT57dmFyIG49W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5XSxhPW5bcl07ZnVuY3Rpb24gaShzKXt2YXIgbD1BW3M+PjJdLHU9QVtzKzQ+PjJdO3JldHVybiBuZXcgYShJLmJ1ZmZlcix1LGwpfXQ9aih0KSxLKGUse25hbWU6dCxmcm9tV2lyZVR5cGU6aSxhcmdQYWNrQWR2YW5jZTpKLHJlYWRWYWx1ZUZyb21Qb2ludGVyOml9LHtpZ25vcmVEdXBsaWNhdGVSZWdpc3RyYXRpb25zOiEwfSl9LEhuPShlLHIpPT57WXIoZSl9LFduPShlLHIpPT57cj1qKHIpO3ZhciB0PXI9PT0ic3RkOjpzdHJpbmciO0soZSx7bmFtZTpyLGZyb21XaXJlVHlwZShuKXt2YXIgYT1BW24+PjJdLGk9bis0LHM7aWYodClmb3IodmFyIGw9aSx1PTA7dTw9YTsrK3Upe3ZhciBjPWkrdTtpZih1PT1hfHx4W2NdPT0wKXt2YXIgZD1jLWwsbT1zZShsLGQpO3M9PT12b2lkIDA/cz1tOihzKz0iXDAiLHMrPW0pLGw9YysxfX1lbHNle2Zvcih2YXIgaD1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3UpaFt1XT1TdHJpbmcuZnJvbUNoYXJDb2RlKHhbaSt1XSk7cz1oLmpvaW4oIiIpfXJldHVybiBaKG4pLHN9LHRvV2lyZVR5cGUobixhKXthIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJihhPW5ldyBVaW50OEFycmF5KGEpKTt2YXIgaSxzPXR5cGVvZiBhPT0ic3RyaW5nIjtzfHxhIGluc3RhbmNlb2YgVWludDhBcnJheXx8YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHxhIGluc3RhbmNlb2YgSW50OEFycmF5fHxrKCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIHN0ZDo6c3RyaW5nIiksdCYmcz9pPVplKGEpOmk9YS5sZW5ndGg7dmFyIGw9ZnIoNCtpKzEpLHU9bCs0O2lmKEFbbD4+Ml09aSx0JiZzKXZlKGEsdSxpKzEpO2Vsc2UgaWYocylmb3IodmFyIGM9MDtjPGk7KytjKXt2YXIgZD1hLmNoYXJDb2RlQXQoYyk7ZD4yNTUmJihaKHUpLGsoIlN0cmluZyBoYXMgVVRGLTE2IGNvZGUgdW5pdHMgdGhhdCBkbyBub3QgZml0IGluIDggYml0cyIpKSx4W3UrY109ZH1lbHNlIGZvcih2YXIgYz0wO2M8aTsrK2MpeFt1K2NdPWFbY107cmV0dXJuIG4hPT1udWxsJiZuLnB1c2goWixsKSxsfSxhcmdQYWNrQWR2YW5jZTpKLHJlYWRWYWx1ZUZyb21Qb2ludGVyOnllLGRlc3RydWN0b3JGdW5jdGlvbihuKXtaKG4pfX0pfSxHcj10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTE2bGUiKTp2b2lkIDAsQm49KGUscik9Pntmb3IodmFyIHQ9ZSxuPXQ+PjEsYT1uK3IvMjshKG4+PWEpJiZDZVtuXTspKytuO2lmKHQ9bjw8MSx0LWU+MzImJkdyKXJldHVybiBHci5kZWNvZGUoeC5zdWJhcnJheShlLHQpKTtmb3IodmFyIGk9IiIscz0wOyEocz49ci8yKTsrK3Mpe3ZhciBsPVlbZStzKjI+PjFdO2lmKGw9PTApYnJlYWs7aSs9U3RyaW5nLmZyb21DaGFyQ29kZShsKX1yZXR1cm4gaX0sTm49KGUscix0KT0+e2lmKHQ/Pyh0PTIxNDc0ODM2NDcpLHQ8MilyZXR1cm4gMDt0LT0yO2Zvcih2YXIgbj1yLGE9dDxlLmxlbmd0aCoyP3QvMjplLmxlbmd0aCxpPTA7aTxhOysraSl7dmFyIHM9ZS5jaGFyQ29kZUF0KGkpO1lbcj4+MV09cyxyKz0yfXJldHVybiBZW3I+PjFdPTAsci1ufSxZbj1lPT5lLmxlbmd0aCoyLEduPShlLHIpPT57Zm9yKHZhciB0PTAsbj0iIjshKHQ+PXIvNCk7KXt2YXIgYT1nW2UrdCo0Pj4yXTtpZihhPT0wKWJyZWFrO2lmKCsrdCxhPj02NTUzNil7dmFyIGk9YS02NTUzNjtuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGk+PjEwLDU2MzIwfGkmMTAyMyl9ZWxzZSBuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpfXJldHVybiBufSxxbj0oZSxyLHQpPT57aWYodD8/KHQ9MjE0NzQ4MzY0NyksdDw0KXJldHVybiAwO2Zvcih2YXIgbj1yLGE9bit0LTQsaT0wO2k8ZS5sZW5ndGg7KytpKXt2YXIgcz1lLmNoYXJDb2RlQXQoaSk7aWYocz49NTUyOTYmJnM8PTU3MzQzKXt2YXIgbD1lLmNoYXJDb2RlQXQoKytpKTtzPTY1NTM2KygocyYxMDIzKTw8MTApfGwmMTAyM31pZihnW3I+PjJdPXMscis9NCxyKzQ+YSlicmVha31yZXR1cm4gZ1tyPj4yXT0wLHItbn0sWG49ZT0+e2Zvcih2YXIgcj0wLHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZS5jaGFyQ29kZUF0KHQpO24+PTU1Mjk2JiZuPD01NzM0MyYmKyt0LHIrPTR9cmV0dXJuIHJ9LEtuPShlLHIsdCk9Pnt0PWoodCk7dmFyIG4sYSxpLHM7cj09PTI/KG49Qm4sYT1ObixzPVluLGk9bD0+Q2VbbD4+MV0pOnI9PT00JiYobj1HbixhPXFuLHM9WG4saT1sPT5BW2w+PjJdKSxLKGUse25hbWU6dCxmcm9tV2lyZVR5cGU6bD0+e2Zvcih2YXIgdT1BW2w+PjJdLGMsZD1sKzQsbT0wO208PXU7KyttKXt2YXIgaD1sKzQrbSpyO2lmKG09PXV8fGkoaCk9PTApe3ZhciBwPWgtZCx3PW4oZCxwKTtjPT09dm9pZCAwP2M9dzooYys9IlwwIixjKz13KSxkPWgrcn19cmV0dXJuIFoobCksY30sdG9XaXJlVHlwZToobCx1KT0+e3R5cGVvZiB1IT0ic3RyaW5nIiYmayhgQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBDKysgc3RyaW5nIHR5cGUgJHt0fWApO3ZhciBjPXModSksZD1mcig0K2Mrcik7cmV0dXJuIEFbZD4+Ml09Yy9yLGEodSxkKzQsYytyKSxsIT09bnVsbCYmbC5wdXNoKFosZCksZH0sYXJnUGFja0FkdmFuY2U6SixyZWFkVmFsdWVGcm9tUG9pbnRlcjp5ZSxkZXN0cnVjdG9yRnVuY3Rpb24obCl7WihsKX19KX0sSm49KGUscix0LG4sYSxpKT0+e1JlW2VdPXtuYW1lOmoocikscmF3Q29uc3RydWN0b3I6Vyh0LG4pLHJhd0Rlc3RydWN0b3I6VyhhLGkpLGZpZWxkczpbXX19LFpuPShlLHIsdCxuLGEsaSxzLGwsdSxjKT0+e1JlW2VdLmZpZWxkcy5wdXNoKHtmaWVsZE5hbWU6aihyKSxnZXR0ZXJSZXR1cm5UeXBlOnQsZ2V0dGVyOlcobixhKSxnZXR0ZXJDb250ZXh0Omksc2V0dGVyQXJndW1lbnRUeXBlOnMsc2V0dGVyOlcobCx1KSxzZXR0ZXJDb250ZXh0OmN9KX0sUW49KGUscik9PntyPWoociksSyhlLHtpc1ZvaWQ6ITAsbmFtZTpyLGFyZ1BhY2tBZHZhbmNlOjAsZnJvbVdpcmVUeXBlOigpPT57fSx0b1dpcmVUeXBlOih0LG4pPT57fX0pfSxlYT0xLHJhPSgpPT5lYSx0YT0oZSxyLHQpPT54LmNvcHlXaXRoaW4oZSxyLHIrdCksbmE9KCk9PnRlLnRvSGFuZGxlKHt9KSxhYT0oZSxyLHQpPT57ZT10ZS50b1ZhbHVlKGUpLHI9dGUudG9WYWx1ZShyKSx0PXRlLnRvVmFsdWUodCksZVtyXT10fSxvYT0oZSxyKT0+e3ZhciB0PXVlW2VdO3JldHVybiB0PT09dm9pZCAwJiZrKGAke3J9IGhhcyB1bmtub3duIHR5cGUgJHtIcihlKX1gKSx0fSxpYT0oZSxyKT0+e2U9b2EoZSwiX2VtdmFsX3Rha2VfdmFsdWUiKTt2YXIgdD1lLnJlYWRWYWx1ZUZyb21Qb2ludGVyKHIpO3JldHVybiB0ZS50b0hhbmRsZSh0KX0scXI9KGUscik9PnIrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIWU/KGU+Pj4wKStyKjQyOTQ5NjcyOTY6TmFOO2Z1bmN0aW9uIHNhKGUscix0KXt2YXIgbj1xcihlLHIpLGE9bmV3IERhdGUobioxZTMpO2dbdD4+Ml09YS5nZXRVVENTZWNvbmRzKCksZ1t0KzQ+PjJdPWEuZ2V0VVRDTWludXRlcygpLGdbdCs4Pj4yXT1hLmdldFVUQ0hvdXJzKCksZ1t0KzEyPj4yXT1hLmdldFVUQ0RhdGUoKSxnW3QrMTY+PjJdPWEuZ2V0VVRDTW9udGgoKSxnW3QrMjA+PjJdPWEuZ2V0VVRDRnVsbFllYXIoKS0xOTAwLGdbdCsyND4+Ml09YS5nZXRVVENEYXkoKTt2YXIgaT1EYXRlLlVUQyhhLmdldFVUQ0Z1bGxZZWFyKCksMCwxLDAsMCwwLDApLHM9KGEuZ2V0VGltZSgpLWkpLygxZTMqNjAqNjAqMjQpfDA7Z1t0KzI4Pj4yXT1zfXZhciBCZT1lPT5lJTQ9PT0wJiYoZSUxMDAhPT0wfHxlJTQwMD09PTApLGxhPShlLHIsdCxuKT0+e3ZhciBhPW5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSxpPW5ldyBEYXRlKGEsMCwxKSxzPW5ldyBEYXRlKGEsNiwxKSxsPWkuZ2V0VGltZXpvbmVPZmZzZXQoKSx1PXMuZ2V0VGltZXpvbmVPZmZzZXQoKSxjPU1hdGgubWF4KGwsdSk7QVtlPj4yXT1jKjYwLGdbcj4+Ml09KyhsIT11KTt2YXIgZD1wPT5wLnRvTG9jYWxlVGltZVN0cmluZyh2b2lkIDAse2hvdXIxMjohMSx0aW1lWm9uZU5hbWU6InNob3J0In0pLnNwbGl0KCIgIilbMV0sbT1kKGkpLGg9ZChzKTt1PGw/KHZlKG0sdCwxNyksdmUoaCxuLDE3KSk6KHZlKG0sbiwxNyksdmUoaCx0LDE3KSl9LHVhPSgpPT5EYXRlLm5vdygpLFhyPSgpPT4yMTQ3NDgzNjQ4LGZhPSgpPT5YcigpLEtyO0tyPSgpPT5wZXJmb3JtYW5jZS5ub3coKTt2YXIgY2E9ZT0+e3ZhciByPSRlLmJ1ZmZlcix0PShlLXIuYnl0ZUxlbmd0aCs2NTUzNSkvNjU1MzY7dHJ5e3JldHVybiAkZS5ncm93KHQpLHdyKCksMX1jYXRjaHt9fSxkYT1lPT57dmFyIHI9eC5sZW5ndGg7ZT4+Pj0wO3ZhciB0PVhyKCk7aWYoZT50KXJldHVybiExO2Zvcih2YXIgbj0odSxjKT0+dSsoYy11JWMpJWMsYT0xO2E8PTQ7YSo9Mil7dmFyIGk9ciooMSsuMi9hKTtpPU1hdGgubWluKGksZSsxMDA2NjMyOTYpO3ZhciBzPU1hdGgubWluKHQsbihNYXRoLm1heChlLGkpLDY1NTM2KSksbD1jYShzKTtpZihsKXJldHVybiEwfXJldHVybiExfSx1cj17fSx2YT0oKT0+aHJ8fCIuL3RoaXMucHJvZ3JhbSIsUGU9KCk9PntpZighUGUuc3RyaW5ncyl7dmFyIGU9KHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIscj17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOmUsXzp2YSgpfTtmb3IodmFyIHQgaW4gdXIpdXJbdF09PT12b2lkIDA/ZGVsZXRlIHJbdF06clt0XT11clt0XTt2YXIgbj1bXTtmb3IodmFyIHQgaW4gciluLnB1c2goYCR7dH09JHtyW3RdfWApO1BlLnN0cmluZ3M9bn1yZXR1cm4gUGUuc3RyaW5nc30saGE9KGUscik9Pntmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdClJW3IrK109ZS5jaGFyQ29kZUF0KHQpO0lbcl09MH0sbWE9KGUscik9Pnt2YXIgdD0wO3JldHVybiBQZSgpLmZvckVhY2goKG4sYSk9Pnt2YXIgaT1yK3Q7QVtlK2EqND4+Ml09aSxoYShuLGkpLHQrPW4ubGVuZ3RoKzF9KSwwfSxwYT0oZSxyKT0+e3ZhciB0PVBlKCk7QVtlPj4yXT10Lmxlbmd0aDt2YXIgbj0wO3JldHVybiB0LmZvckVhY2goYT0+bis9YS5sZW5ndGgrMSksQVtyPj4yXT1uLDB9O2Z1bmN0aW9uIF9hKGUpe3RyeXt2YXIgcj1QLmdldFN0cmVhbUZyb21GRChlKTtyZXR1cm4gby5jbG9zZShyKSwwfWNhdGNoKHQpe2lmKHR5cGVvZiBvPiJ1Inx8dC5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IHQ7cmV0dXJuIHQuZXJybm99fWZ1bmN0aW9uIGdhKGUscil7dHJ5e3ZhciB0PTAsbj0wLGE9MCxpPVAuZ2V0U3RyZWFtRnJvbUZEKGUpLHM9aS50dHk/MjpvLmlzRGlyKGkubW9kZSk/MzpvLmlzTGluayhpLm1vZGUpPzc6NDtyZXR1cm4gSVtyXT1zLFlbcisyPj4xXT1hLCQ9W3Q+Pj4wLCh5PXQsK01hdGguYWJzKHkpPj0xP3k+MD8rTWF0aC5mbG9vcih5LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKHktKyh+fnk+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxnW3IrOD4+Ml09JFswXSxnW3IrMTI+PjJdPSRbMV0sJD1bbj4+PjAsKHk9biwrTWF0aC5hYnMoeSk+PTE/eT4wPytNYXRoLmZsb29yKHkvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoeS0rKH5+eT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLGdbcisxNj4+Ml09JFswXSxnW3IrMjA+PjJdPSRbMV0sMH1jYXRjaChsKXtpZih0eXBlb2Ygbz4idSJ8fGwubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBsO3JldHVybiBsLmVycm5vfX12YXIgeWE9KGUscix0LG4pPT57Zm9yKHZhciBhPTAsaT0wO2k8dDtpKyspe3ZhciBzPUFbcj4+Ml0sbD1BW3IrND4+Ml07cis9ODt2YXIgdT1vLnJlYWQoZSxJLHMsbCxuKTtpZih1PDApcmV0dXJuLTE7aWYoYSs9dSx1PGwpYnJlYWt9cmV0dXJuIGF9O2Z1bmN0aW9uIHdhKGUscix0LG4pe3RyeXt2YXIgYT1QLmdldFN0cmVhbUZyb21GRChlKSxpPXlhKGEscix0KTtyZXR1cm4gQVtuPj4yXT1pLDB9Y2F0Y2gocyl7aWYodHlwZW9mIG8+InUifHxzLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcztyZXR1cm4gcy5lcnJub319ZnVuY3Rpb24gRWEoZSxyLHQsbixhKXt2YXIgaT1xcihyLHQpO3RyeXtpZihpc05hTihpKSlyZXR1cm4gNjE7dmFyIHM9UC5nZXRTdHJlYW1Gcm9tRkQoZSk7cmV0dXJuIG8ubGxzZWVrKHMsaSxuKSwkPVtzLnBvc2l0aW9uPj4+MCwoeT1zLnBvc2l0aW9uLCtNYXRoLmFicyh5KT49MT95PjA/K01hdGguZmxvb3IoeS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCh5LSsofn55Pj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sZ1thPj4yXT0kWzBdLGdbYSs0Pj4yXT0kWzFdLHMuZ2V0ZGVudHMmJmk9PT0wJiZuPT09MCYmKHMuZ2V0ZGVudHM9bnVsbCksMH1jYXRjaChsKXtpZih0eXBlb2Ygbz4idSJ8fGwubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBsO3JldHVybiBsLmVycm5vfX12YXIgYmE9KGUscix0LG4pPT57Zm9yKHZhciBhPTAsaT0wO2k8dDtpKyspe3ZhciBzPUFbcj4+Ml0sbD1BW3IrND4+Ml07cis9ODt2YXIgdT1vLndyaXRlKGUsSSxzLGwsbik7aWYodTwwKXJldHVybi0xO2ErPXV9cmV0dXJuIGF9O2Z1bmN0aW9uIGthKGUscix0LG4pe3RyeXt2YXIgYT1QLmdldFN0cmVhbUZyb21GRChlKSxpPWJhKGEscix0KTtyZXR1cm4gQVtuPj4yXT1pLDB9Y2F0Y2gocyl7aWYodHlwZW9mIG8+InUifHxzLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcztyZXR1cm4gcy5lcnJub319dmFyIFBhPShlLHIpPT57Zm9yKHZhciB0PTAsbj0wO248PXI7dCs9ZVtuKytdKTtyZXR1cm4gdH0sSnI9WzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxacj1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLEFhPShlLHIpPT57Zm9yKHZhciB0PW5ldyBEYXRlKGUuZ2V0VGltZSgpKTtyPjA7KXt2YXIgbj1CZSh0LmdldEZ1bGxZZWFyKCkpLGE9dC5nZXRNb250aCgpLGk9KG4/SnI6WnIpW2FdO2lmKHI+aS10LmdldERhdGUoKSlyLT1pLXQuZ2V0RGF0ZSgpKzEsdC5zZXREYXRlKDEpLGE8MTE/dC5zZXRNb250aChhKzEpOih0LnNldE1vbnRoKDApLHQuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpKzEpKTtlbHNlIHJldHVybiB0LnNldERhdGUodC5nZXREYXRlKCkrciksdH1yZXR1cm4gdH0sRGE9KGUscik9PntJLnNldChlLHIpfSxRcj0oZSxyLHQsbik9Pnt2YXIgYT1BW24rNDA+PjJdLGk9e3RtX3NlYzpnW24+PjJdLHRtX21pbjpnW24rND4+Ml0sdG1faG91cjpnW24rOD4+Ml0sdG1fbWRheTpnW24rMTI+PjJdLHRtX21vbjpnW24rMTY+PjJdLHRtX3llYXI6Z1tuKzIwPj4yXSx0bV93ZGF5OmdbbisyND4+Ml0sdG1feWRheTpnW24rMjg+PjJdLHRtX2lzZHN0OmdbbiszMj4+Ml0sdG1fZ210b2ZmOmdbbiszNj4+Ml0sdG1fem9uZTphP3NlKGEpOiIifSxzPXNlKHQpLGw9eyIlYyI6IiVhICViICVkICVIOiVNOiVTICVZIiwiJUQiOiIlbS8lZC8leSIsIiVGIjoiJVktJW0tJWQiLCIlaCI6IiViIiwiJXIiOiIlSTolTTolUyAlcCIsIiVSIjoiJUg6JU0iLCIlVCI6IiVIOiVNOiVTIiwiJXgiOiIlbS8lZC8leSIsIiVYIjoiJUg6JU06JVMiLCIlRWMiOiIlYyIsIiVFQyI6IiVDIiwiJUV4IjoiJW0vJWQvJXkiLCIlRVgiOiIlSDolTTolUyIsIiVFeSI6IiV5IiwiJUVZIjoiJVkiLCIlT2QiOiIlZCIsIiVPZSI6IiVlIiwiJU9IIjoiJUgiLCIlT0kiOiIlSSIsIiVPbSI6IiVtIiwiJU9NIjoiJU0iLCIlT1MiOiIlUyIsIiVPdSI6IiV1IiwiJU9VIjoiJVUiLCIlT1YiOiIlViIsIiVPdyI6IiV3IiwiJU9XIjoiJVciLCIlT3kiOiIleSJ9O2Zvcih2YXIgdSBpbiBsKXM9cy5yZXBsYWNlKG5ldyBSZWdFeHAodSwiZyIpLGxbdV0pO3ZhciBjPVsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkPVsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXTtmdW5jdGlvbiBtKHYsXyxMKXtmb3IodmFyIFQ9dHlwZW9mIHY9PSJudW1iZXIiP3YudG9TdHJpbmcoKTp2fHwiIjtULmxlbmd0aDxfOylUPUxbMF0rVDtyZXR1cm4gVH1mdW5jdGlvbiBoKHYsXyl7cmV0dXJuIG0odixfLCIwIil9ZnVuY3Rpb24gcCh2LF8pe2Z1bmN0aW9uIEwoQil7cmV0dXJuIEI8MD8tMTpCPjA/MTowfXZhciBUO3JldHVybihUPUwodi5nZXRGdWxsWWVhcigpLV8uZ2V0RnVsbFllYXIoKSkpPT09MCYmKFQ9TCh2LmdldE1vbnRoKCktXy5nZXRNb250aCgpKSk9PT0wJiYoVD1MKHYuZ2V0RGF0ZSgpLV8uZ2V0RGF0ZSgpKSksVH1mdW5jdGlvbiB3KHYpe3N3aXRjaCh2LmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKHYuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNlIDE6cmV0dXJuIHY7Y2FzZSAyOnJldHVybiBuZXcgRGF0ZSh2LmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKHYuZ2V0RnVsbFllYXIoKSwwLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUodi5nZXRGdWxsWWVhcigpLDAsMSk7Y2FzZSA1OnJldHVybiBuZXcgRGF0ZSh2LmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZSh2LmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIEQodil7dmFyIF89QWEobmV3IERhdGUodi50bV95ZWFyKzE5MDAsMCwxKSx2LnRtX3lkYXkpLEw9bmV3IERhdGUoXy5nZXRGdWxsWWVhcigpLDAsNCksVD1uZXcgRGF0ZShfLmdldEZ1bGxZZWFyKCkrMSwwLDQpLEI9dyhMKSxPPXcoVCk7cmV0dXJuIHAoQixfKTw9MD9wKE8sXyk8PTA/Xy5nZXRGdWxsWWVhcigpKzE6Xy5nZXRGdWxsWWVhcigpOl8uZ2V0RnVsbFllYXIoKS0xfXZhciBNPXsiJWEiOnY9PmNbdi50bV93ZGF5XS5zdWJzdHJpbmcoMCwzKSwiJUEiOnY9PmNbdi50bV93ZGF5XSwiJWIiOnY9PmRbdi50bV9tb25dLnN1YnN0cmluZygwLDMpLCIlQiI6dj0+ZFt2LnRtX21vbl0sIiVDIjp2PT57dmFyIF89di50bV95ZWFyKzE5MDA7cmV0dXJuIGgoXy8xMDB8MCwyKX0sIiVkIjp2PT5oKHYudG1fbWRheSwyKSwiJWUiOnY9Pm0odi50bV9tZGF5LDIsIiAiKSwiJWciOnY9PkQodikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksIiVHIjpELCIlSCI6dj0+aCh2LnRtX2hvdXIsMiksIiVJIjp2PT57dmFyIF89di50bV9ob3VyO3JldHVybiBfPT0wP189MTI6Xz4xMiYmKF8tPTEyKSxoKF8sMil9LCIlaiI6dj0+aCh2LnRtX21kYXkrUGEoQmUodi50bV95ZWFyKzE5MDApP0pyOlpyLHYudG1fbW9uLTEpLDMpLCIlbSI6dj0+aCh2LnRtX21vbisxLDIpLCIlTSI6dj0+aCh2LnRtX21pbiwyKSwiJW4iOigpPT5gCmAsIiVwIjp2PT52LnRtX2hvdXI+PTAmJnYudG1faG91cjwxMj8iQU0iOiJQTSIsIiVTIjp2PT5oKHYudG1fc2VjLDIpLCIldCI6KCk9PiIJIiwiJXUiOnY9PnYudG1fd2RheXx8NywiJVUiOnY9Pnt2YXIgXz12LnRtX3lkYXkrNy12LnRtX3dkYXk7cmV0dXJuIGgoTWF0aC5mbG9vcihfLzcpLDIpfSwiJVYiOnY9Pnt2YXIgXz1NYXRoLmZsb29yKCh2LnRtX3lkYXkrNy0odi50bV93ZGF5KzYpJTcpLzcpO2lmKCh2LnRtX3dkYXkrMzcxLXYudG1feWRheS0yKSU3PD0yJiZfKyssXyl7aWYoXz09NTMpe3ZhciBUPSh2LnRtX3dkYXkrMzcxLXYudG1feWRheSklNztUIT00JiYoVCE9M3x8IUJlKHYudG1feWVhcikpJiYoXz0xKX19ZWxzZXtfPTUyO3ZhciBMPSh2LnRtX3dkYXkrNy12LnRtX3lkYXktMSklNzsoTD09NHx8TD09NSYmQmUodi50bV95ZWFyJTQwMC0xKSkmJl8rK31yZXR1cm4gaChfLDIpfSwiJXciOnY9PnYudG1fd2RheSwiJVciOnY9Pnt2YXIgXz12LnRtX3lkYXkrNy0odi50bV93ZGF5KzYpJTc7cmV0dXJuIGgoTWF0aC5mbG9vcihfLzcpLDIpfSwiJXkiOnY9Pih2LnRtX3llYXIrMTkwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksIiVZIjp2PT52LnRtX3llYXIrMTkwMCwiJXoiOnY9Pnt2YXIgXz12LnRtX2dtdG9mZixMPV8+PTA7cmV0dXJuIF89TWF0aC5hYnMoXykvNjAsXz1fLzYwKjEwMCtfJTYwLChMPyIrIjoiLSIpKygiMDAwMCIrXykuc2xpY2UoLTQpfSwiJVoiOnY9PnYudG1fem9uZSwiJSUiOigpPT4iJSJ9O3M9cy5yZXBsYWNlKC8lJS9nLCJcMFwwIik7Zm9yKHZhciB1IGluIE0pcy5pbmNsdWRlcyh1KSYmKHM9cy5yZXBsYWNlKG5ldyBSZWdFeHAodSwiZyIpLE1bdV0oaSkpKTtzPXMucmVwbGFjZSgvXDBcMC9nLCIlIik7dmFyIEY9U2UocywhMSk7cmV0dXJuIEYubGVuZ3RoPnI/MDooRGEoRixlKSxGLmxlbmd0aC0xKX0sJGE9KGUscix0LG4sYSk9PlFyKGUscix0LG4pO28uY3JlYXRlUHJlbG9hZGVkRmlsZT1WdCxvLnN0YXRpY0luaXQoKSxTcj1mLkludGVybmFsRXJyb3I9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihyKXtzdXBlcihyKSx0aGlzLm5hbWU9IkludGVybmFsRXJyb3IifX0sZW4oKSxtZT1mLkJpbmRpbmdFcnJvcj1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHIpe3N1cGVyKHIpLHRoaXMubmFtZT0iQmluZGluZ0Vycm9yIn19LHZuKCksdW4oKSxFbigpLHhyPWYuVW5ib3VuZFR5cGVFcnJvcj1BbihFcnJvciwiVW5ib3VuZFR5cGVFcnJvciIpLE9uKCk7dmFyIENhPXtsOkN0LGM6VHQsVTpqdCxzOnp0LFI6eHQsSjpIdCxXOld0LE86QnQsUDpOdCxLOll0LEk6R3QsSDpxdCxROlh0LEU6S3QsVjpKdCxrOlp0LEI6UXQsWjp0bixoOkRuLHk6Rm4sajpUbixiOlNuLGE6TW4sWTpZcix3OlZuLGk6VW4sZjp6bixkOnhuLG06SG4sdjpXbix0OktuLG46Sm4sZTpabixfOlFuLFM6cmEsVDp0YSx4Ok5yLGFhOm5hLCQ6YWEsZzppYSx6OnNhLEY6bGEscDp1YSxHOmZhLG86S3IsRDpkYSxNOm1hLE46cGEscjpfYSxMOmdhLHU6d2EsQTpFYSxxOmthLFg6UXIsQzokYX0sej0kdCgpLGZyPWU9Pihmcj16LmRhKShlKSxldD1lPT4oZXQ9ei5mYSkoZSksWj1lPT4oWj16LmdhKShlKSxydD1lPT4ocnQ9ei5pYSkoZSk7Zi5keW5DYWxsX2ppamk9KGUscix0LG4sYSk9PihmLmR5bkNhbGxfamlqaT16LmphKShlLHIsdCxuLGEpLGYuZHluQ2FsbF9paWlqaT0oZSxyLHQsbixhLGkpPT4oZi5keW5DYWxsX2lpaWppPXoua2EpKGUscix0LG4sYSxpKSxmLmR5bkNhbGxfamlpaWo9KGUscix0LG4sYSxpKT0+KGYuZHluQ2FsbF9qaWlpaj16LmxhKShlLHIsdCxuLGEsaSksZi5keW5DYWxsX2lpaWlpaj0oZSxyLHQsbixhLGkscyk9PihmLmR5bkNhbGxfaWlpaWlqPXoubWEpKGUscix0LG4sYSxpLHMpLGYuZHluQ2FsbF92aWlqaWk9KGUscix0LG4sYSxpLHMpPT4oZi5keW5DYWxsX3ZpaWppaT16Lm5hKShlLHIsdCxuLGEsaSxzKSxmLmR5bkNhbGxfaWlpaWlqaj0oZSxyLHQsbixhLGkscyxsLHUpPT4oZi5keW5DYWxsX2lpaWlpamo9ei5vYSkoZSxyLHQsbixhLGkscyxsLHUpLGYuZHluQ2FsbF9paWlpaWlqaj0oZSxyLHQsbixhLGkscyxsLHUsYyk9PihmLmR5bkNhbGxfaWlpaWlpamo9ei5wYSkoZSxyLHQsbixhLGkscyxsLHUsYyksZi5fZmZfaDI2NF9jYWJhY190YWJsZXM9MjA2ODEyO3ZhciBOZTtnZT1mdW5jdGlvbiBlKCl7TmV8fHR0KCksTmV8fChnZT1lKX07ZnVuY3Rpb24gdHQoKXtpZihvZT4wfHwocHQoKSxvZT4wKSlyZXR1cm47ZnVuY3Rpb24gZSgpe05lfHwoTmU9ITAsZi5jYWxsZWRSdW49ITAsIXByJiYoX3QoKSxVKGYpLGYub25SdW50aW1lSW5pdGlhbGl6ZWQmJmYub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxndCgpKSl9Zi5zZXRTdGF0dXM/KGYuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtmLnNldFN0YXR1cygiIil9LDEpLGUoKX0sMSkpOmUoKX1pZihmLnByZUluaXQpZm9yKHR5cGVvZiBmLnByZUluaXQ9PSJmdW5jdGlvbiImJihmLnByZUluaXQ9W2YucHJlSW5pdF0pO2YucHJlSW5pdC5sZW5ndGg+MDspZi5wcmVJbml0LnBvcCgpKCk7dHQoKTtsZXQgbnQ9MzI7ZnVuY3Rpb24gYXQoZSxyPTMsdD01MDApe2xldCBuPTA7Zm9yKDtuPHI7KXRyeXtyZXR1cm4gZSgpfWNhdGNoKGEpe2lmKG50Pj0yNCYmY29uc29sZS53YXJuKGBBdHRlbXB0ICR7bisxfSBmYWlsZWQ6ICR7YS5tZXNzYWdlfWApLG4rKyxuPj1yKXRocm93IG5ldyBFcnJvcihgRmFpbGVkIGFmdGVyICR7cn0gYXR0ZW1wdHNgKX19ZnVuY3Rpb24gRmEoZSl7Y29uc3Qgcj1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoci5vcGVuKCJIRUFEIixlLCExKSxyLnNlbmQoKSxyLnN0YXR1cyE9PTIwMCl0aHJvdyBuZXcgRXJyb3IoYGdldEZpbGVTaXplIHJlcXVlc3QgZmFpbGVkOiAke2V9YCk7cmV0dXJuIHBhcnNlSW50KHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIikpfWZ1bmN0aW9uIFRhKGUscix0KXtjb25zdCBuPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihuLm9wZW4oIkdFVCIsZSwhMSksbi5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsYGJ5dGVzPSR7cn0tJHtyK3QtMX1gKSxuLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLG4uc2VuZCgpLG4uc3RhdHVzIT09MjA2JiZuLnN0YXR1cyE9PTIwMCl0aHJvdyBuZXcgRXJyb3IoYGZldGNoQXJyYXlCdWZmZXIgcmVxdWVzdCBmYWlsZWQ6ICR7ZX1gKTtyZXR1cm4gbi5yZXNwb25zZX1jbGFzcyBwZXtjb25zdHJ1Y3RvcihyKXtsZXQgdDt0eXBlb2Ygcj09InN0cmluZyI/KHQ9bmV3IEZpbGUoW10sZW5jb2RlVVJJQ29tcG9uZW50KHIpKSxvLmZpbGVzeXN0ZW1zLldPUktFUkZTLnN0cmVhbV9vcHMucmVhZD1mdW5jdGlvbihhLGkscyxsLHUpe2NvbnN0IGM9ZGVjb2RlVVJJQ29tcG9uZW50KGEubm9kZS5jb250ZW50cy5uYW1lKTtpZihhLm5vZGUuc2l6ZT09PTAmJihhLm5vZGUuc2l6ZT1hdCgoKT0+RmEoYykpKSx1Pj1hLm5vZGUuc2l6ZSlyZXR1cm4gMDtjb25zdCBkPWF0KCgpPT5UYShjLHUsbCkpLG09ZC5ieXRlTGVuZ3RoO3JldHVybiBpLnNldChuZXcgVWludDhBcnJheShkKSxzKSxtfSk6dD1yLHRoaXMubW91bnRQb2ludD0iL2RhdGEiLHRoaXMubW91bnRPcHRzPXtmaWxlczpbdF19LHRoaXMuZmlsZVBhdGg9dGhpcy5tb3VudFBvaW50KyIvIit0Lm5hbWV9bW91bnQoKXtvLm1rZGlyKHRoaXMubW91bnRQb2ludCksby5tb3VudChvLmZpbGVzeXN0ZW1zLldPUktFUkZTLHRoaXMubW91bnRPcHRzLHRoaXMubW91bnRQb2ludCl9dW5tb3VudCgpe28udW5tb3VudCh0aGlzLm1vdW50UG9pbnQpLG8ucm1kaXIodGhpcy5tb3VudFBvaW50KX19ZnVuY3Rpb24gY3IoZSl7Y29uc3Qgcj1uZXcgVWludDhBcnJheShlLmV4dHJhZGF0YSksdD17aWQ6ZS5pZCxpbmRleDplLmluZGV4LGNvZGVjX3R5cGU6ZS5jb2RlY190eXBlLGNvZGVjX3R5cGVfc3RyaW5nOmUuY29kZWNfdHlwZV9zdHJpbmcsY29kZWNfbmFtZTplLmNvZGVjX25hbWUsY29kZWNfc3RyaW5nOmUuY29kZWNfc3RyaW5nLGNvbG9yX3ByaW1hcmllczplLmNvbG9yX3ByaW1hcmllcyxjb2xvcl90cmFuc2ZlcjplLmNvbG9yX3RyYW5zZmVyLGNvbG9yX3NwYWNlOmUuY29sb3Jfc3BhY2UsY29sb3JfcmFuZ2U6ZS5jb2xvcl9yYW5nZSxwcm9maWxlOmUucHJvZmlsZSxwaXhfZm10OmUucGl4X2ZtdCxsZXZlbDplLmxldmVsLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LGNoYW5uZWxzOmUuY2hhbm5lbHMsc2FtcGxlX3JhdGU6ZS5zYW1wbGVfcmF0ZSxzYW1wbGVfZm10OmUuc2FtcGxlX2ZtdCxiaXRfcmF0ZTplLmJpdF9yYXRlLGV4dHJhZGF0YV9zaXplOmUuZXh0cmFkYXRhX3NpemUsZXh0cmFkYXRhOnIscl9mcmFtZV9yYXRlOmUucl9mcmFtZV9yYXRlLGF2Z19mcmFtZV9yYXRlOmUuYXZnX2ZyYW1lX3JhdGUsc2FtcGxlX2FzcGVjdF9yYXRpbzplLnNhbXBsZV9hc3BlY3RfcmF0aW8sZGlzcGxheV9hc3BlY3RfcmF0aW86ZS5kaXNwbGF5X2FzcGVjdF9yYXRpbyxzdGFydF90aW1lOmUuc3RhcnRfdGltZSxkdXJhdGlvbjplLmR1cmF0aW9uLHJvdGF0aW9uOmUucm90YXRpb24sZmxpcDplLmZsaXAsbmJfZnJhbWVzOmUubmJfZnJhbWVzLHRhZ3M6ZS50YWdzfTtyZXR1cm4gZS5kZWxldGUoKSx0fWZ1bmN0aW9uIGRyKGUpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKSx0PXtrZXlmcmFtZTplLmtleWZyYW1lLHRpbWVzdGFtcDplLnRpbWVzdGFtcCxkdXJhdGlvbjplLmR1cmF0aW9uLHNpemU6ZS5zaXplLGRhdGE6cn07cmV0dXJuIGUuZGVsZXRlKCksdH1mdW5jdGlvbiBTYShlLHI9MCx0PS0xKXtjb25zdCBuPW5ldyBwZShlKTtuLm1vdW50KCk7dHJ5e2NvbnN0IGE9Zi5nZXRfYXZfc3RyZWFtKG4uZmlsZVBhdGgscix0KTtyZXR1cm4gY3IoYSl9Y2F0Y2goYSl7dGhyb3cgbmV3IEVycm9yKCJnZXRfYXZfc3RyZWFtIGZhaWxlZDogIithLm1lc3NhZ2UpfWZpbmFsbHl7bi51bm1vdW50KCl9fWZ1bmN0aW9uIE1hKGUpe2NvbnN0IHI9bmV3IHBlKGUpO3IubW91bnQoKTt0cnl7Y29uc3QgdD1mLmdldF9hdl9zdHJlYW1zKHIuZmlsZVBhdGgpLG49W107Zm9yKGxldCBhPTA7YTx0LnN0cmVhbXMuc2l6ZSgpO2ErKyluLnB1c2goY3IodC5zdHJlYW1zLmdldChhKSkpO3JldHVybiB0LnN0cmVhbXMuZGVsZXRlKCksbn1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoImdldF9hdl9zdHJlYW1zIGZhaWxlZDogIit0Lm1lc3NhZ2UpfWZpbmFsbHl7ci51bm1vdW50KCl9fWZ1bmN0aW9uIFJhKGUpe2NvbnN0IHI9bmV3IHBlKGUpO3IubW91bnQoKTt0cnl7Y29uc3QgdD1mLmdldF9tZWRpYV9pbmZvKHIuZmlsZVBhdGgpLG49e2Zvcm1hdF9uYW1lOnQuZm9ybWF0X25hbWUsZHVyYXRpb246dC5kdXJhdGlvbixiaXRfcmF0ZTp0LmJpdF9yYXRlLHN0YXJ0X3RpbWU6dC5zdGFydF90aW1lLG5iX3N0cmVhbXM6dC5uYl9zdHJlYW1zLHN0cmVhbXM6W119O2ZvcihsZXQgYT0wO2E8dC5zdHJlYW1zLnNpemUoKTthKyspbi5zdHJlYW1zLnB1c2goY3IodC5zdHJlYW1zLmdldChhKSkpO3JldHVybiB0LnN0cmVhbXMuZGVsZXRlKCksbn1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoImdldF9tZWRpYV9pbmZvIGZhaWxlZDogIit0Lm1lc3NhZ2UpfWZpbmFsbHl7ci51bm1vdW50KCl9fWZ1bmN0aW9uIE9hKGUscix0PTAsbj0tMSxhPTEpe2NvbnN0IGk9bmV3IHBlKGUpO2kubW91bnQoKTt0cnl7Y29uc3Qgcz1mLmdldF9hdl9wYWNrZXQoaS5maWxlUGF0aCxyLHQsbixhKTtyZXR1cm4gZHIocyl9Y2F0Y2gocyl7dGhyb3cgbmV3IEVycm9yKCJnZXRfYXZfcGFja2V0IGZhaWxlZDogIitzLm1lc3NhZ2UpfWZpbmFsbHl7aS51bm1vdW50KCl9fWZ1bmN0aW9uIElhKGUscix0PTEpe2NvbnN0IG49bmV3IHBlKGUpO24ubW91bnQoKTt0cnl7Y29uc3QgYT1mLmdldF9hdl9wYWNrZXRzKG4uZmlsZVBhdGgscix0KSxpPVtdO2ZvcihsZXQgcz0wO3M8YS5wYWNrZXRzLnNpemUoKTtzKyspaS5wdXNoKGRyKGEucGFja2V0cy5nZXQocykpKTtyZXR1cm4gYS5wYWNrZXRzLmRlbGV0ZSgpLGl9Y2F0Y2goYSl7dGhyb3cgbmV3IEVycm9yKCJnZXRfYXZfcGFja2V0cyBmYWlsZWQ6ICIrYS5tZXNzYWdlKX1maW5hbGx5e24udW5tb3VudCgpfX1hc3luYyBmdW5jdGlvbiBMYShlLHIsdD0wLG49MCxhPTAsaT0tMSxzPTEpe2NvbnN0IGw9bmV3IHBlKHIpO2wubW91bnQoKTtsZXQgdT1udWxsO3RyeXtpZih1PWYuQVZQYWNrZXRSZWFkZXIuY3JlYXRlKGwuZmlsZVBhdGgsdCxuLGEsaSxzKSwhdSl0aHJvdyBuZXcgRXJyb3IoIkFWUGFja2V0UmVhZGVyLmNyZWF0ZSBmYWlsZWQgKG51bGwgcmVhZGVyKSIpO2NvbnN0IGM9VmEoZSk7Zm9yKDs7KXtjb25zdCBkPXUucmVhZF9uZXh0X2F2X3BhY2tldCgpO2lmKHUuaGFzX2Vycm9yKCkpdGhyb3cgbmV3IEVycm9yKCJBVlBhY2tldFJlYWRlciByZWFkX25leHRfYXZfcGFja2V0IGVycm9yIik7aWYodS5pc19maW5pc2hlZCgpKXthd2FpdCBjKDApO2JyZWFrfWlmKGF3YWl0IGMoZCk9PT0wKWJyZWFrfX1jYXRjaChjKXt0aHJvdyBuZXcgRXJyb3IoInJlYWRBVlBhY2tldCBwaXBlbGluZSBmYWlsZWQ6ICIrYy5tZXNzYWdlKX1maW5hbGx5e3UmJnUuZGVsZXRlKCksbC51bm1vdW50KCl9cmV0dXJuIDF9ZnVuY3Rpb24gVmEoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZShuPT57Y29uc3QgYT17dHlwZToiQVZQYWNrZXRTdHJlYW0iLG1zZ0lkOmUscmVzdWx0Om51bGx9O2lmKHQ9PT0wKXtzZWxmLnBvc3RNZXNzYWdlKGEpLG4oMSk7cmV0dXJufWNvbnN0IGk9ZHIodCk7YS5yZXN1bHQ9aSxzZWxmLnBvc3RNZXNzYWdlKGEsW2kuZGF0YS5idWZmZXJdKTtjb25zdCBzPWw9Pntjb25zdHt0eXBlOnUsbXNnSWQ6Y309bC5kYXRhO2M9PT1lJiYodT09PSJSZWFkTmV4dEFWUGFja2V0Ij8oc2VsZi5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSxuKDEpKTp1PT09IlN0b3BSZWFkQVZQYWNrZXQiJiYoc2VsZi5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSxuKDApKSl9O3NlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIscyl9KX19ZnVuY3Rpb24gVWEoZSl7bnQ9ZSxmLnNldF9hdl9sb2dfbGV2ZWwoZSl9cmV0dXJuIGYuZ2V0QVZTdHJlYW09U2EsZi5nZXRBVlN0cmVhbXM9TWEsZi5nZXRNZWRpYUluZm89UmEsZi5nZXRBVlBhY2tldD1PYSxmLmdldEFWUGFja2V0cz1JYSxmLnJlYWRBVlBhY2tldD1MYSxmLnNldEFWTG9nTGV2ZWw9VWEsQz1uZSxDfX0pKCk7bGV0IFE7c2VsZi5wb3N0TWVzc2FnZSh7dHlwZTpHLldhc21Xb3JrZXJMb2FkZWR9KSxzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGFzeW5jIGZ1bmN0aW9uKEUpe2NvbnN0e3R5cGU6UixkYXRhOkMsbXNnSWQ6Zn09RS5kYXRhO3RyeXtzd2l0Y2goUil7Y2FzZSJMb2FkV0FTTSI6cmV0dXJuIGF3YWl0IHN0KEMpO2Nhc2UiR2V0QVZTdHJlYW0iOnJldHVybiBsdChDLGYpO2Nhc2UiR2V0QVZTdHJlYW1zIjpyZXR1cm4gdXQoQyxmKTtjYXNlIkdldE1lZGlhSW5mbyI6cmV0dXJuIGZ0KEMsZik7Y2FzZSJHZXRBVlBhY2tldCI6cmV0dXJuIGN0KEMsZik7Y2FzZSJHZXRBVlBhY2tldHMiOnJldHVybiBkdChDLGYpO2Nhc2UiUmVhZEFWUGFja2V0IjpyZXR1cm4gYXdhaXQgdnQoQyxmKTtjYXNlIlNldEFWTG9nTGV2ZWwiOnJldHVybiBodChDLGYpO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChVKXtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOlIsbXNnSWQ6ZixlcnJNc2c6VSBpbnN0YW5jZW9mIEVycm9yP1UubWVzc2FnZToiVW5rbm93biBFcnJvciJ9KX19KTthc3luYyBmdW5jdGlvbiBzdChFKXtjb25zdHt3YXNtRmlsZVBhdGg6Un09RXx8e307UT1hd2FpdCBpdCh7bG9jYXRlRmlsZTooQyxmKT0+Qy5lbmRzV2l0aCgiLndhc20iKSYmUj9SOmYrQyxvblJ1bnRpbWVJbml0aWFsaXplZDooKT0+e3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5XQVNNUnVudGltZUluaXRpYWxpemVkfSl9fSl9ZnVuY3Rpb24gbHQoRSxSKXtjb25zdHtzb3VyY2U6QyxzdHJlYW1UeXBlOmYsc3RyZWFtSW5kZXg6VX09RSxIPVEuZ2V0QVZTdHJlYW0oQyxmLFUpO3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5HZXRBVlN0cmVhbSxtc2dJZDpSLHJlc3VsdDpIfSxbSC5leHRyYWRhdGEuYnVmZmVyXSl9ZnVuY3Rpb24gdXQoRSxSKXtjb25zdHtzb3VyY2U6Q309RSxmPVEuZ2V0QVZTdHJlYW1zKEMpO3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5HZXRBVlN0cmVhbXMsbXNnSWQ6UixyZXN1bHQ6Zn0sZi5tYXAoVT0+VS5leHRyYWRhdGEuYnVmZmVyKSl9ZnVuY3Rpb24gZnQoRSxSKXtjb25zdHtzb3VyY2U6Q309RSxmPVEuZ2V0TWVkaWFJbmZvKEMpO3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5HZXRNZWRpYUluZm8sbXNnSWQ6UixyZXN1bHQ6Zn0sZi5zdHJlYW1zLm1hcChVPT5VLmV4dHJhZGF0YS5idWZmZXIpKX1mdW5jdGlvbiBjdChFLFIpe2NvbnN0e3NvdXJjZTpDLHRpbWU6ZixzdHJlYW1UeXBlOlUsc3RyZWFtSW5kZXg6SCxzZWVrRmxhZzpuZX09RSxhZT1RLmdldEFWUGFja2V0KEMsZixVLEgsbmUpO3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5HZXRBVlBhY2tldCxtc2dJZDpSLHJlc3VsdDphZX0sW2FlLmRhdGEuYnVmZmVyXSl9ZnVuY3Rpb24gZHQoRSxSKXtjb25zdHtzb3VyY2U6Qyx0aW1lOmYsc2Vla0ZsYWc6VX09RSxIPVEuZ2V0QVZQYWNrZXRzKEMsZixVKTtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOkcuR2V0QVZQYWNrZXRzLG1zZ0lkOlIscmVzdWx0Okh9LEgubWFwKG5lPT5uZS5kYXRhLmJ1ZmZlcikpfWFzeW5jIGZ1bmN0aW9uIHZ0KEUsUil7Y29uc3R7c291cmNlOkMsc3RhcnQ6ZixlbmQ6VSxzdHJlYW1UeXBlOkgsc3RyZWFtSW5kZXg6bmUsc2Vla0ZsYWc6YWV9PUUsRGU9YXdhaXQgUS5yZWFkQVZQYWNrZXQoUixDLGYsVSxILG5lLGFlKTtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOkcuUmVhZEFWUGFja2V0LG1zZ0lkOlIscmVzdWx0OkRlfSl9ZnVuY3Rpb24gaHQoRSxSKXtjb25zdHtsZXZlbDpDfT1FO1Euc2V0QVZMb2dMZXZlbChDKSxzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOiJTZXRBVkxvZ0xldmVsIixtc2dJZDpSfSl9fSkoKTsK",Ia=t=>Uint8Array.from(atob(t),e=>e.charCodeAt(0)),Ks=typeof window<"u"&&window.Blob&&new Blob([Ia(hn)],{type:"text/javascript;charset=utf-8"});function Va(t){let e;try{if(e=Ks&&(window.URL||window.webkitURL).createObjectURL(Ks),!e)throw"";const i=new Worker(e,{name:t==null?void 0:t.name});return i.addEventListener("error",()=>{(window.URL||window.webkitURL).revokeObjectURL(e)}),i}catch{return new Worker("data:text/javascript;base64,"+hn,{name:t==null?void 0:t.name})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}const Ms=1e6;class fi{constructor(e){oi(this,"wasmWorker"),oi(this,"wasmWorkerLoadStatus"),oi(this,"msgId"),oi(this,"source"),this.wasmWorker=new Va({name:"web-demuxer"}),this.wasmWorkerLoadStatus=new Promise((i,n)=>{this.wasmWorker.addEventListener("message",d=>{const{type:o,errMsg:m}=d.data;o===rt.WasmWorkerLoaded&&this.post(rt.LoadWASM,{wasmFilePath:e==null?void 0:e.wasmFilePath}),o===rt.WASMRuntimeInitialized&&i(),o===rt.LoadWASM&&m&&n(m)})}),this.msgId=0}post(e,i,n){this.wasmWorker.postMessage({type:e,msgId:n??this.msgId++,data:i})}getFromWorker(e,i){return new Promise((n,d)=>{if(!this.source){d("source is not loaded. call load() first");return}const o=this.msgId,m=h=>{let{data:S}=h;S.type===e&&S.msgId===o&&(S.errMsg?d(S.errMsg):n(S.result),this.wasmWorker.removeEventListener("message",m))};this.wasmWorker.addEventListener("message",m),this.post(e,i,o)})}async load(e){await this.wasmWorkerLoadStatus,this.source=e}destroy(){this.source=void 0,this.wasmWorker.terminate()}getMediaInfo(){return this.getFromWorker(rt.GetMediaInfo,{source:this.source})}getAVStream(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:I0.AVMEDIA_TYPE_VIDEO,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1;return this.getFromWorker(rt.GetAVStream,{source:this.source,streamType:e,streamIndex:i})}getAVStreams(){return this.getFromWorker(rt.GetAVStreams,{source:this.source})}getAVPacket(e){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:I0.AVMEDIA_TYPE_VIDEO,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-1,d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:di.AVSEEK_FLAG_BACKWARD;return this.getFromWorker(rt.GetAVPacket,{source:this.source,time:e,streamType:i,streamIndex:n,seekFlag:d})}getAVPackets(e){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:di.AVSEEK_FLAG_BACKWARD;return this.getFromWorker(rt.GetAVPackets,{source:this.source,time:e,seekFlag:i})}readAVPacket(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:I0.AVMEDIA_TYPE_VIDEO,d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:di.AVSEEK_FLAG_BACKWARD;const m=new CountQueuingStrategy({highWaterMark:1}),h=this.msgId;let S=0,W,v;return new ReadableStream({start:Z=>{if(!this.source){Z.error("source is not loaded. call load() first");return}W=O=>{const w=O.data;w.type===rt.ReadAVPacket&&w.msgId===h&&w.errMsg&&(Z.error(w.errMsg),this.wasmWorker.removeEventListener("message",W)),w.type===rt.AVPacketStream&&w.msgId===h&&(w.result&&!v?Z.enqueue(w.result):(this.wasmWorker.removeEventListener("message",W),v?v():Z.close()))},this.wasmWorker.addEventListener("message",W),this.post(rt.ReadAVPacket,{source:this.source,start:e,end:i,streamType:n,streamIndex:d,seekFlag:o})},pull:()=>{S>0&&this.post(rt.ReadNextAVPacket,void 0,h),S++},cancel:()=>new Promise(Z=>{v=Z,this.post(rt.StopReadAVPacket,void 0,h)})},m)}setLogLevel(e){return this.getFromWorker(rt.SetAVLogLevel,{level:e})}getMediaStream(e,i){return this.getAVStream(Ci[e],i)}seekMediaPacket(e,i,n){return this.getAVPacket(i,Ci[e],void 0,n)}readMediaPacket(e,i,n,d){return this.readAVPacket(i,n,Ci[e],void 0,d)}genDecoderConfig(e,i){var n,d;return e===ws.VIDEO?{codec:i.codec_string,codedWidth:i.width,codedHeight:i.height,description:((n=i.extradata)==null?void 0:n.length)>0?i.extradata:void 0,rotation:i.rotation,flip:i.flip}:{codec:i.codec_string||"",sampleRate:i.sample_rate,numberOfChannels:i.channels,description:((d=i.extradata)==null?void 0:d.length)>0?i.extradata:void 0}}genEncodedChunk(e,i){const n={type:i.keyframe===1?"key":"delta",timestamp:i.timestamp*Ms,duration:i.duration*Ms,data:i.data};return e===ws.VIDEO?new EncodedVideoChunk(n):new EncodedAudioChunk(n)}getDecoderConfig(e){return this.getMediaStream(e).then(i=>this.genDecoderConfig(e,i))}seek(e,i,n){return this.seekMediaPacket(e,i,n).then(d=>this.genEncodedChunk(e,d))}read(e,i,n,d){return this.readMediaPacket(e,i,n,d).pipeThrough(new TransformStream({transform:(o,m)=>{const h=this.genEncodedChunk(e,o);m.enqueue(h)}}))}}let ks=!1;function Zi(){ks||(console.warn("⚠️ Demo/Learning Function: This utility is intended for demos and learning purposes only. For production use, please use a proper demuxing library like MediaBunny (https://mediabunny.dev/) or web-demuxer (https://github.com/bilibili/web-demuxer) directly."),ks=!0)}async function Ra(t){Zi();const e=new fi({wasmFilePath:"https://cdn.jsdelivr.net/npm/web-demuxer@latest/dist/wasm-files/web-demuxer.wasm"});await e.load(t);const i=e.read("video",0).getReader(),n=[];return new Promise(function(d){i.read().then(async function o(m){const{done:h,value:S}=m;return S&&n.push(S),h?d(n):i.read().then(o)})})}async function Ta(t){Zi();const e=new fi({wasmFilePath:"https://cdn.jsdelivr.net/npm/web-demuxer@latest/dist/wasm-files/web-demuxer.wasm"});await e.load(t);const i=e.read("audio",0).getReader(),n=[];await new Promise(function(h){i.read().then(async function S(W){const{done:v,value:Z}=W;return Z&&n.push(Z),v?h(n):i.read().then(S)})});const o=(await e.getMediaInfo()).streams.filter(h=>h.codec_type_string==="audio")[0],m={codec:o.codec_string,sampleRate:o.sample_rate,numberOfChannels:o.channels};return{chunks:n,config:m}}async function Wa(t){Zi();const e=new fi({wasmFilePath:"https://cdn.jsdelivr.net/npm/web-demuxer@latest/dist/wasm-files/web-demuxer.wasm"});await e.load(t);const i=e.read("video",0).getReader(),n=[];await new Promise(function(h){i.read().then(async function S(W){const{done:v,value:Z}=W;return Z&&n.push(Z),v?h(n):i.read().then(S)})});const o=(await e.getMediaInfo()).streams.filter(h=>h.codec_type_string==="video")[0],m={codec:o.codec_string,codedWidth:o.width,codedHeight:o.height,description:o.extradata};return{chunks:n,config:m}}async function La(t){Zi();const e=new fi({wasmFilePath:"https://cdn.jsdelivr.net/npm/web-demuxer@latest/dist/wasm-files/web-demuxer.wasm"});await e.load(t);const i=e.read("audio",0).getReader(),n=[];return new Promise(function(d){i.read().then(async function o(m){const{done:h,value:S}=m;return S&&n.push(S),h?d(n):i.read().then(o)})})}/*!
279
+ ½ÇaztŸÅò¬¼Åâ`});var M={a:s};this.setModule=L=>{t.setModule(w0,L)},this.getModule=()=>t.getModule(w0),this.instantiate=()=>(this.getModule().then(L=>WebAssembly.instantiate(L,M)).then(L=>{const ee=L.exports;V(ee),h=ee.k,S(),c(ee),n()}),this.ready=new Promise(L=>{n=L}).then(()=>{this.HEAP=h.buffer,this.malloc=_,this.free=R,this.mpeg_decoder_feed=j,this.mpeg_decoder_read=g,this.mpeg_frame_decoder_create=f,this.mpeg_frame_decoder_destroy=P}),this)}function K0(t={}){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(e=>{this._common=e,this._sampleRate=0,this._inputBytes=0,this._outputSamples=0,this._frameNumber=0,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._output=this._common.allocateTypedArray(this._outputSize,Float32Array);const i=this._common.allocateTypedArray(1,Uint32Array);this._samplesDecodedPtr=this._common.allocateTypedArray(1,Uint32Array),this._sampleRatePtr=this._common.allocateTypedArray(1,Uint32Array),this._errorStringPtr=this._common.allocateTypedArray(1,Uint32Array);const n=this._common.wasm.mpeg_frame_decoder_create(i.ptr,t.enableGapless===!1?0:1);if(n)throw Error(this._getErrorMessage(n));this._decoder=i.buf[0]}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this._getErrorMessage=e=>e+" "+this._common.codeToString(this._errorStringPtr.buf[0]),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.mpeg_frame_decoder_destroy(this._decoder),this._common.wasm.free(this._decoder),this._common.free()},this.decode=e=>{let i=[],n=[],d=0;if(!(e instanceof Uint8Array))throw Error("Data to decode must be Uint8Array. Instead got "+typeof e);e:for(let o=0,m=0;o<e.length;o+=m){const h=e.subarray(o,this._input.len+o);m=h.length,this._inputBytes+=m,this._input.buf.set(h);let S=this._common.wasm.mpeg_decoder_feed(this._decoder,this._input.ptr,m);if(S===-10)continue e;t:for(;;){this._samplesDecodedPtr.buf[0]=0,S=this._common.wasm.mpeg_decoder_read(this._decoder,this._output.ptr,this._output.len,this._samplesDecodedPtr.ptr,this._sampleRatePtr.ptr,this._errorStringPtr.ptr);const W=this._samplesDecodedPtr.buf[0];if(this._outputSamples+=W,W&&(d+=W,i.push([this._output.buf.slice(0,W),this._output.buf.slice(W,W*2)])),S==-11)continue t;if(S===-10)continue e;if(S){const v=this._getErrorMessage(S);console.error("mpg123-decoder: "+v),this._common.addError(n,v,0,this._frameNumber,this._inputBytes,this._outputSamples)}}}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,i,2,d,this._sampleRatePtr.buf[0])},this.decodeFrame=e=>{const i=this.decode(e);return this._frameNumber++,i},this.decodeFrames=e=>{let i=[],n=[],d=0,o=0;for(;o<e.length;){const m=this.decodeFrame(e[o++]);i.push(m.channelData),n=n.concat(m.errors),d+=m.samplesDecoded}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,i,2,d,this._sampleRatePtr.buf[0])},this._isWebWorker=K0.isWebWorker,this._WASMAudioDecoderCommon=K0.WASMAudioDecoderCommon||qe,this._EmscriptenWASM=K0.EmscriptenWASM||w0,this._module=K0.module,this._inputSize=2**16,this._outputSize=2889*16*2,this._ready=this._init(),this}class mn extends ca{constructor(e){super(e,"mpg123-decoder",K0,w0)}async decode(e){return this.postToDecoder("decode",e)}async decodeFrame(e){return this.postToDecoder("decodeFrame",e)}async decodeFrames(e){return this.postToDecoder("decodeFrames",e)}}dn(K0,"MPEGDecoder");dn(mn,"MPEGDecoderWebWorker");globalThis.MPEGMode=Un;globalThis.Lame=na;globalThis.BitStream=Qr;class da{constructor(e){this.config=e,this.mp3encoder=new Jn.Mp3Encoder(e.channels,e.sampleRate,e.bitRate),this.encodedData=[]}convertAudioDataToInt16(e){const i=e.numberOfChannels,n=e.numberOfFrames,d=As(e),o=new Int16Array(n*i);for(let m=0;m<n;m++)for(let h=0;h<i;h++){const S=Math.max(-1,Math.min(1,d[h][m]));o[m*i+h]=S*32767}return o}processBatch(e){const i=this.convertAudioDataToInt16(e);let n;if(this.config.channels===2){const d=new Int16Array(i.length/2),o=new Int16Array(i.length/2);for(let m=0;m<i.length/2;m++)d[m]=i[m*2],o[m]=i[m*2+1];n=this.mp3encoder.encodeBuffer(d,o)}else n=this.mp3encoder.encodeBuffer(i);return n}finish(){const e=this.mp3encoder.flush();e.length>0&&this.encodedData.push(e);const i=this.encodedData.reduce((o,m)=>o+m.length,0),n=new Uint8Array(i);let d=0;for(const o of this.encodedData)n.set(o,d),d+=o.length;return this.encodedData=[],new Blob([n],{type:"audio/mp3"})}getEncodedSize(){return this.encodedData.reduce((e,i)=>e+i.length,0)}}class ma{constructor(){this.isReady=!1}async initialize(){if(!this.isReady)try{this.decoder=new mn,await this.decoder.ready,this.isReady=!0}catch(e){throw console.error("Failed to initialize MP3 decoder:",e),e}}async toSamples(e){this.isReady||await this.initialize();try{const i=await this.decoder.decode(new Uint8Array(e)),{channelData:n,sampleRate:d}=i,o=n.length;return{channels:n.map(h=>{const S=new Float32Array(h.length);for(let W=0;W<h.length;W++)S[W]=h[W];return S}),sampleRate:d,numberOfChannels:o}}catch(i){throw console.error("Failed to decode MP3:",i),i}}async toAudioData(e){const{channels:i,sampleRate:n,numberOfChannels:d}=await this.toSamples(e),o=1024,m=i[0].length,h=[];console.log("Samples",m);for(let S=0;S<m;S+=o){const W=m-S,v=Math.min(o,W),Z=i.map(J=>J.slice(S,S+v)),O=new Float32Array(v*d);for(let J=0;J<v;J++)for(let U=0;U<d;U++)O[J*d+U]=Z[U][J];const w=S/n*1e6,N=new AudioData({format:"f32",sampleRate:n,numberOfFrames:v,numberOfChannels:d,timestamp:Math.round(w),data:O});h.push(N)}return h}async destroy(){this.decoder&&(await this.decoder.free(),this.decoder=null,this.isReady=!1)}}const ua=100,ha=.5,ba=.1;function pa(t,e){const i=t.getTrackById(e.id);for(const n of i.mdia.minf.stbl.stsd.entries){const d=n.avcC||n.hvcC||n.vpcC||n.av1C;if(d){const o=new Ai.DataStream(void 0,0,Ai.DataStream.BIG_ENDIAN);return d.write(o),new Uint8Array(o.buffer,8)}}throw new Error("Codec description box (avcC, hvcC, vpcC, or av1C) not found")}function ya(t,e){var n,d;const i={duration:e.duration/e.timescale};if(e.videoTracks.length>0){const o=e.videoTracks[0],m=o.samples_duration/o.timescale;i.video={codec:o.codec,codedHeight:o.video.height,codedWidth:o.video.width,description:pa(t,o),frameRate:o.nb_samples/m}}if(e.audioTracks.length>0){const o=e.audioTracks[0],m=((n=o.audio)==null?void 0:n.sample_rate)??o.timescale,h=((d=o.audio)==null?void 0:d.channel_count)??2;i.audio={codec:o.codec,sampleRate:m,numberOfChannels:h}}return i}function fa(t,e){return new Promise((i,n)=>{const d=t.stream().getReader();let o=0;const m=Ai.createFile(!1);let h=!1;m.onReady=W=>{h=!0;const v=ya(m,W);i({info:W,trackData:v,mp4:m})},m.onError=W=>{n(new Error(`MP4Box parsing error: ${W instanceof Error?W.message:String(W)}`))};const S=async()=>{try{const{done:W,value:v}=await d.read();if(W){if(!h)throw new Error("Invalid MP4 file: metadata not available");m.flush();return}if(h){d.releaseLock(),m.flush();return}const Z=v.buffer;if(Z.fileStart=o,o+=v.length,e&&e(o/t.size),m.appendBuffer(Z),o<t.size)return S();if(m.flush(),!h)throw new Error("Invalid MP4 file: metadata not available")}catch(W){n(W)}};S().catch(n)})}function Za(t,e,i,n,d){const{mp4:o,info:m}=e;return new Promise((h,S)=>{let W=0,v=!1,Z=0;const O=i==="audio"?EncodedAudioChunk:EncodedVideoChunk,w=[],N=i==="audio"?m.audioTracks[0]??null:m.videoTracks[0]??null;if(!N){h([]);return}Z=N.id;const J=m.duration/m.timescale-ba,U=Math.min(d||J,J);for(const K in m.tracks){const X=m.tracks[K];o.unsetExtractionOptions(X.id)}o.onSamples=(K,X,A)=>{for(const T of A){const H=T.cts/T.timescale;H<U&&w.push(new O({type:T.is_sync?"key":"delta",timestamp:Math.round(1e6*H),duration:Math.round(1e6*(T.duration/T.timescale)),data:T.data}))}if(A.length>0&&o.releaseUsedSamples(Z,A[A.length-1].number),w.length>0){const H=w[w.length-1].timestamp/1e6;(Math.abs(H-U)<ha||H>U)&&(v=!0,o.stop(),o.flush(),h(w))}},o.onError=K=>{S(new Error(`Extraction error: ${K instanceof Error?K.message:String(K)}`))},o.setExtractionOptions(Z,null,{nbSamples:ua});const k=o.seek(n,!0),I=t.slice(k.offset).stream().getReader();W=k.offset;const r=async()=>{try{const{done:K,value:X}=await I.read();if(K||v){I.releaseLock(),o.flush();return}const A=X.buffer;return A.fileStart=W,W+=X.length,o.appendBuffer(A),r()}catch(K){S(K)}};o.start(),r().catch(S)})}class Xa{constructor(e){this.mp4Data=null,this.file=e}async load(e){this.mp4Data=await fa(this.file,e)}getTracks(){if(!this.mp4Data)throw new Error("MP4Demuxer: Must call load() before getTracks()");return this.mp4Data.trackData}getVideoDecoderConfig(){return this.getVideoTrack()}getAudioDecoderConfig(){return this.getAudioTrack()}getVideoTrack(){return this.getTracks().video}getAudioTrack(){return this.getTracks().audio}async extractSegment(e,i,n){if(!this.mp4Data)throw new Error("MP4Demuxer: Must call load() before extractSegment()");return Za(this.file,this.mp4Data,e,i,n)}getInfo(){if(!this.mp4Data)throw new Error("MP4Demuxer: Must call load() before getInfo()");return this.mp4Data.info}}class _a{constructor(e=10*1024*1024){this.chunks=new Map,this._size=0,this._chunkSize=e}write(e,i){this._size=Math.max(this._size,i+e.byteLength);const n=Math.floor(i/this._chunkSize),d=Math.floor((i+e.byteLength-1)/this._chunkSize);for(let o=n;o<=d;o++){const m=o*this._chunkSize,h=m+this._chunkSize,S=Math.max(i,m),v=Math.min(i+e.byteLength,h)-S;if(v<=0)continue;let Z;this.chunks.has(o)?Z=this.chunks.get(o):(Z=new Uint8Array(this._chunkSize),this.chunks.set(o,Z));const O=S-m,w=S-i;for(let N=0;N<v;N++)Z[O+N]=e[w+N]}}get size(){return this._size}toBlob(e="application/octet-stream"){if(this.chunks.size===0)return new Blob([],{type:e});const i=Array.from(this.chunks.keys()).sort((o,m)=>o-m),n=[];for(let o=0;o<i.length;o++){const m=i[o],h=this.chunks.get(m);if(o===i.length-1){const S=this._size-m*this._chunkSize;S<this._chunkSize?n.push(h.slice(0,S)):n.push(h)}else n.push(h)}return new Blob(n,{type:e})}}class un{constructor({track:e}){const i=e.getSettings();if(!i)throw new Error("track has no settings");let n,d;const o=i.frameRate??30;this.readable=new ReadableStream({async start(){n=document.createElement("video"),n.srcObject=new MediaStream([e]),await Promise.all([n.play(),new Promise(m=>{n.onloadedmetadata=m})]),d=performance.now()},async pull(m){for(;;){const h=performance.now();if(h-d<1e3/o){await new Promise(S=>requestAnimationFrame(S));continue}d=h,m.enqueue(new VideoFrame(n,{timestamp:d*1e3}));break}}})}}self.MediaStreamTrackProcessor||(self.MediaStreamTrackProcessor=un);const Sa=self.MediaStreamTrackProcessor||un;var Ga=Object.defineProperty,va=(t,e,i)=>e in t?Ga(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i,oi=(t,e,i)=>(va(t,typeof e!="symbol"?e+"":e,i),i),I0=(t=>(t[t.AVMEDIA_TYPE_UNKNOWN=-1]="AVMEDIA_TYPE_UNKNOWN",t[t.AVMEDIA_TYPE_VIDEO=0]="AVMEDIA_TYPE_VIDEO",t[t.AVMEDIA_TYPE_AUDIO=1]="AVMEDIA_TYPE_AUDIO",t[t.AVMEDIA_TYPE_DATA=2]="AVMEDIA_TYPE_DATA",t[t.AVMEDIA_TYPE_SUBTITLE=3]="AVMEDIA_TYPE_SUBTITLE",t[t.AVMEDIA_TYPE_ATTACHMENT=4]="AVMEDIA_TYPE_ATTACHMENT",t[t.AVMEDIA_TYPE_NB=5]="AVMEDIA_TYPE_NB",t))(I0||{}),di=(t=>(t[t.AVSEEK_FLAG_BACKWARD=1]="AVSEEK_FLAG_BACKWARD",t[t.AVSEEK_FLAG_BYTE=2]="AVSEEK_FLAG_BYTE",t[t.AVSEEK_FLAG_ANY=4]="AVSEEK_FLAG_ANY",t[t.AVSEEK_FLAG_FRAME=8]="AVSEEK_FLAG_FRAME",t))(di||{}),rt=(t=>(t.WasmWorkerLoaded="WasmWorkerLoaded",t.WASMRuntimeInitialized="WASMRuntimeInitialized",t.LoadWASM="LoadWASM",t.GetAVPacket="GetAVPacket",t.GetAVPackets="GetAVPackets",t.GetAVStream="GetAVStream",t.GetAVStreams="GetAVStreams",t.GetMediaInfo="GetMediaInfo",t.ReadAVPacket="ReadAVPacket",t.AVPacketStream="AVPacketStream",t.ReadNextAVPacket="ReadNextAVPacket",t.StopReadAVPacket="StopReadAVPacket",t.SetAVLogLevel="SetAVLogLevel",t))(rt||{});const hn="video",Ia="audio",Va="subtitle",ws={VIDEO:hn},Ci={[hn]:I0.AVMEDIA_TYPE_VIDEO,[Ia]:I0.AVMEDIA_TYPE_AUDIO,[Va]:I0.AVMEDIA_TYPE_SUBTITLE},bn="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBBZT0oRT0+KEVbRS5BVk1FRElBX1RZUEVfVU5LTk9XTj0tMV09IkFWTUVESUFfVFlQRV9VTktOT1dOIixFW0UuQVZNRURJQV9UWVBFX1ZJREVPPTBdPSJBVk1FRElBX1RZUEVfVklERU8iLEVbRS5BVk1FRElBX1RZUEVfQVVESU89MV09IkFWTUVESUFfVFlQRV9BVURJTyIsRVtFLkFWTUVESUFfVFlQRV9EQVRBPTJdPSJBVk1FRElBX1RZUEVfREFUQSIsRVtFLkFWTUVESUFfVFlQRV9TVUJUSVRMRT0zXT0iQVZNRURJQV9UWVBFX1NVQlRJVExFIixFW0UuQVZNRURJQV9UWVBFX0FUVEFDSE1FTlQ9NF09IkFWTUVESUFfVFlQRV9BVFRBQ0hNRU5UIixFW0UuQVZNRURJQV9UWVBFX05CPTVdPSJBVk1FRElBX1RZUEVfTkIiLEUpKShBZXx8e30pLEc9KEU9PihFLldhc21Xb3JrZXJMb2FkZWQ9Ildhc21Xb3JrZXJMb2FkZWQiLEUuV0FTTVJ1bnRpbWVJbml0aWFsaXplZD0iV0FTTVJ1bnRpbWVJbml0aWFsaXplZCIsRS5Mb2FkV0FTTT0iTG9hZFdBU00iLEUuR2V0QVZQYWNrZXQ9IkdldEFWUGFja2V0IixFLkdldEFWUGFja2V0cz0iR2V0QVZQYWNrZXRzIixFLkdldEFWU3RyZWFtPSJHZXRBVlN0cmVhbSIsRS5HZXRBVlN0cmVhbXM9IkdldEFWU3RyZWFtcyIsRS5HZXRNZWRpYUluZm89IkdldE1lZGlhSW5mbyIsRS5SZWFkQVZQYWNrZXQ9IlJlYWRBVlBhY2tldCIsRS5BVlBhY2tldFN0cmVhbT0iQVZQYWNrZXRTdHJlYW0iLEUuUmVhZE5leHRBVlBhY2tldD0iUmVhZE5leHRBVlBhY2tldCIsRS5TdG9wUmVhZEFWUGFja2V0PSJTdG9wUmVhZEFWUGFja2V0IixFLlNldEFWTG9nTGV2ZWw9IlNldEFWTG9nTGV2ZWwiLEUpKShHfHx7fSk7InZpZGVvIisiIixBZS5BVk1FRElBX1RZUEVfVklERU8sImF1ZGlvIisiIixBZS5BVk1FRElBX1RZUEVfQVVESU8sInN1YnRpdGxlIisiIixBZS5BVk1FRElBX1RZUEVfU1VCVElUTEU7dmFyIGl0PSgoKT0+e3ZhciBFPXNlbGYubG9jYXRpb24uaHJlZjtyZXR1cm4gZnVuY3Rpb24oUj17fSl7dmFyIEMsZj1PYmplY3QuYXNzaWduKHt9LFIpLFUsSCxuZT1uZXcgUHJvbWlzZSgoZSxyKT0+e1U9ZSxIPXJ9KSxhZT0hMCxEZT1PYmplY3QuYXNzaWduKHt9LGYpLGhyPSIuL3RoaXMucHJvZ3JhbSIscT0iIjtmdW5jdGlvbiBtdChlKXtyZXR1cm4gZi5sb2NhdGVGaWxlP2YubG9jYXRlRmlsZShlLHEpOnErZX12YXIgWWUsbXIsR2U7cT1zZWxmLmxvY2F0aW9uLmhyZWYsRSYmKHE9RSkscS5zdGFydHNXaXRoKCJibG9iOiIpP3E9IiI6cT1xLnN1YnN0cigwLHEucmVwbGFjZSgvWz8jXS4qLywiIikubGFzdEluZGV4T2YoIi8iKSsxKSxZZT1lPT57dmFyIHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiByLm9wZW4oIkdFVCIsZSwhMSksci5zZW5kKG51bGwpLHIucmVzcG9uc2VUZXh0fSxHZT1lPT57dmFyIHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiByLm9wZW4oIkdFVCIsZSwhMSksci5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixyLnNlbmQobnVsbCksbmV3IFVpbnQ4QXJyYXkoci5yZXNwb25zZSl9LG1yPShlLHIsdCk9Pnt2YXIgbj1uZXcgWE1MSHR0cFJlcXVlc3Q7bi5vcGVuKCJHRVQiLGUsITApLG4ucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsbi5vbmxvYWQ9KCk9PntpZihuLnN0YXR1cz09MjAwfHxuLnN0YXR1cz09MCYmbi5yZXNwb25zZSl7cihuLnJlc3BvbnNlKTtyZXR1cm59dCgpfSxuLm9uZXJyb3I9dCxuLnNlbmQobnVsbCl9O3ZhciBxZT1mLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGVlPWYucHJpbnRFcnJ8fGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtPYmplY3QuYXNzaWduKGYsRGUpLERlPW51bGwsZi5hcmd1bWVudHMmJmYuYXJndW1lbnRzLGYudGhpc1Byb2dyYW0mJihocj1mLnRoaXNQcm9ncmFtKSxmLnF1aXQmJmYucXVpdDt2YXIgX2U7Zi53YXNtQmluYXJ5JiYoX2U9Zi53YXNtQmluYXJ5KTt2YXIgJGUscHI9ITE7ZnVuY3Rpb24gX3IoZSxyKXtlfHxpZShyKX12YXIgSSx4LFksQ2UsZyxBLGdyLHlyO2Z1bmN0aW9uIHdyKCl7dmFyIGU9JGUuYnVmZmVyO2YuSEVBUDg9ST1uZXcgSW50OEFycmF5KGUpLGYuSEVBUDE2PVk9bmV3IEludDE2QXJyYXkoZSksZi5IRUFQVTg9eD1uZXcgVWludDhBcnJheShlKSxmLkhFQVBVMTY9Q2U9bmV3IFVpbnQxNkFycmF5KGUpLGYuSEVBUDMyPWc9bmV3IEludDMyQXJyYXkoZSksZi5IRUFQVTMyPUE9bmV3IFVpbnQzMkFycmF5KGUpLGYuSEVBUEYzMj1ncj1uZXcgRmxvYXQzMkFycmF5KGUpLGYuSEVBUEY2ND15cj1uZXcgRmxvYXQ2NEFycmF5KGUpfXZhciBFcj1bXSxicj1bXSxrcj1bXTtmdW5jdGlvbiBwdCgpe2lmKGYucHJlUnVuKWZvcih0eXBlb2YgZi5wcmVSdW49PSJmdW5jdGlvbiImJihmLnByZVJ1bj1bZi5wcmVSdW5dKTtmLnByZVJ1bi5sZW5ndGg7KXl0KGYucHJlUnVuLnNoaWZ0KCkpO0tlKEVyKX1mdW5jdGlvbiBfdCgpeyFmLm5vRlNJbml0JiYhby5pbml0LmluaXRpYWxpemVkJiZvLmluaXQoKSxvLmlnbm9yZVBlcm1pc3Npb25zPSExLEtlKGJyKX1mdW5jdGlvbiBndCgpe2lmKGYucG9zdFJ1bilmb3IodHlwZW9mIGYucG9zdFJ1bj09ImZ1bmN0aW9uIiYmKGYucG9zdFJ1bj1bZi5wb3N0UnVuXSk7Zi5wb3N0UnVuLmxlbmd0aDspRXQoZi5wb3N0UnVuLnNoaWZ0KCkpO0tlKGtyKX1mdW5jdGlvbiB5dChlKXtFci51bnNoaWZ0KGUpfWZ1bmN0aW9uIHd0KGUpe2JyLnVuc2hpZnQoZSl9ZnVuY3Rpb24gRXQoZSl7a3IudW5zaGlmdChlKX12YXIgb2U9MCxnZT1udWxsO2Z1bmN0aW9uIEhhKGUpe3JldHVybiBlfWZ1bmN0aW9uIFhlKGUpe3ZhciByO29lKyssKHI9Zi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKT09bnVsbHx8ci5jYWxsKGYsb2UpfWZ1bmN0aW9uIEZlKGUpe3ZhciB0O2lmKG9lLS0sKHQ9Zi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKT09bnVsbHx8dC5jYWxsKGYsb2UpLG9lPT0wJiZnZSl7dmFyIHI9Z2U7Z2U9bnVsbCxyKCl9fWZ1bmN0aW9uIGllKGUpe3ZhciB0Oyh0PWYub25BYm9ydCk9PW51bGx8fHQuY2FsbChmLGUpLGU9IkFib3J0ZWQoIitlKyIpIixlZShlKSxwcj0hMCxlKz0iLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiI7dmFyIHI9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihlKTt0aHJvdyBIKHIpLHJ9dmFyIGJ0PSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIixQcj1lPT5lLnN0YXJ0c1dpdGgoYnQpO2Z1bmN0aW9uIGt0KCl7aWYoZi5sb2NhdGVGaWxlKXt2YXIgZT0id2ViLWRlbXV4ZXIud2FzbSI7cmV0dXJuIFByKGUpP2U6bXQoZSl9cmV0dXJuIG5ldyBVUkwoIndlYi1kZW11eGVyLndhc20iLHNlbGYubG9jYXRpb24uaHJlZikuaHJlZn12YXIgVGU7ZnVuY3Rpb24gQXIoZSl7aWYoZT09VGUmJl9lKXJldHVybiBuZXcgVWludDhBcnJheShfZSk7aWYoR2UpcmV0dXJuIEdlKGUpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1mdW5jdGlvbiBQdChlKXtyZXR1cm4hX2UmJmFlJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goZSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4ocj0+e2lmKCFyLm9rKXRocm93YGZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyR7ZX0nYDtyZXR1cm4gci5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goKCk9PkFyKGUpKTpQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5BcihlKSl9ZnVuY3Rpb24gRHIoZSxyLHQpe3JldHVybiBQdChlKS50aGVuKG49PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG4scikpLnRoZW4odCxuPT57ZWUoYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7bn1gKSxpZShuKX0pfWZ1bmN0aW9uIEF0KGUscix0LG4pe3JldHVybiFlJiZ0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmc9PSJmdW5jdGlvbiImJiFQcihyKSYmdHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iP2ZldGNoKHIse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGE9Pnt2YXIgaT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhhLHQpO3JldHVybiBpLnRoZW4obixmdW5jdGlvbihzKXtyZXR1cm4gZWUoYHdhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAke3N9YCksZWUoImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksRHIocix0LG4pfSl9KTpEcihyLHQsbil9ZnVuY3Rpb24gRHQoKXtyZXR1cm57YTpDYX19ZnVuY3Rpb24gJHQoKXt2YXIgZT1EdCgpO2Z1bmN0aW9uIHIobixhKXtyZXR1cm4gej1uLmV4cG9ydHMsJGU9ei5iYSx3cigpLGpyPXouZWEsd3Qoei5jYSksRmUoKSx6fVhlKCk7ZnVuY3Rpb24gdChuKXtyKG4uaW5zdGFuY2UpfWlmKGYuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gZi5pbnN0YW50aWF0ZVdhc20oZSxyKX1jYXRjaChuKXtlZShgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtufWApLEgobil9cmV0dXJuIFRlfHwoVGU9a3QoKSksQXQoX2UsVGUsZSx0KS5jYXRjaChIKSx7fX12YXIgeSwkLEtlPWU9Pntmb3IoO2UubGVuZ3RoPjA7KWUuc2hpZnQoKShmKX07Zi5ub0V4aXRSdW50aW1lO3ZhciAkcj10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMCxjZT0oZSxyLHQpPT57Zm9yKHZhciBuPXIrdCxhPXI7ZVthXSYmIShhPj1uKTspKythO2lmKGEtcj4xNiYmZS5idWZmZXImJiRyKXJldHVybiAkci5kZWNvZGUoZS5zdWJhcnJheShyLGEpKTtmb3IodmFyIGk9IiI7cjxhOyl7dmFyIHM9ZVtyKytdO2lmKCEocyYxMjgpKXtpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpO2NvbnRpbnVlfXZhciBsPWVbcisrXSY2MztpZigocyYyMjQpPT0xOTIpe2krPVN0cmluZy5mcm9tQ2hhckNvZGUoKHMmMzEpPDw2fGwpO2NvbnRpbnVlfXZhciB1PWVbcisrXSY2MztpZigocyYyNDApPT0yMjQ/cz0ocyYxNSk8PDEyfGw8PDZ8dTpzPShzJjcpPDwxOHxsPDwxMnx1PDw2fGVbcisrXSY2MyxzPDY1NTM2KWkrPVN0cmluZy5mcm9tQ2hhckNvZGUocyk7ZWxzZXt2YXIgYz1zLTY1NTM2O2krPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8Yz4+MTAsNTYzMjB8YyYxMDIzKX19cmV0dXJuIGl9LHNlPShlLHIpPT5lP2NlKHgsZSxyKToiIixDdD0oZSxyLHQsbik9PntpZShgQXNzZXJ0aW9uIGZhaWxlZDogJHtzZShlKX0sIGF0OiBgK1tyP3NlKHIpOiJ1bmtub3duIGZpbGVuYW1lIix0LG4/c2Uobik6InVua25vd24gZnVuY3Rpb24iXSl9O2NsYXNzIEZ0e2NvbnN0cnVjdG9yKHIpe3RoaXMuZXhjUHRyPXIsdGhpcy5wdHI9ci0yNH1zZXRfdHlwZShyKXtBW3RoaXMucHRyKzQ+PjJdPXJ9Z2V0X3R5cGUoKXtyZXR1cm4gQVt0aGlzLnB0cis0Pj4yXX1zZXRfZGVzdHJ1Y3RvcihyKXtBW3RoaXMucHRyKzg+PjJdPXJ9Z2V0X2Rlc3RydWN0b3IoKXtyZXR1cm4gQVt0aGlzLnB0cis4Pj4yXX1zZXRfY2F1Z2h0KHIpe3I9cj8xOjAsSVt0aGlzLnB0cisxMl09cn1nZXRfY2F1Z2h0KCl7cmV0dXJuIElbdGhpcy5wdHIrMTJdIT0wfXNldF9yZXRocm93bihyKXtyPXI/MTowLElbdGhpcy5wdHIrMTNdPXJ9Z2V0X3JldGhyb3duKCl7cmV0dXJuIElbdGhpcy5wdHIrMTNdIT0wfWluaXQocix0KXt0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCksdGhpcy5zZXRfdHlwZShyKSx0aGlzLnNldF9kZXN0cnVjdG9yKHQpfXNldF9hZGp1c3RlZF9wdHIocil7QVt0aGlzLnB0cisxNj4+Ml09cn1nZXRfYWRqdXN0ZWRfcHRyKCl7cmV0dXJuIEFbdGhpcy5wdHIrMTY+PjJdfWdldF9leGNlcHRpb25fcHRyKCl7dmFyIHI9cnQodGhpcy5nZXRfdHlwZSgpKTtpZihyKXJldHVybiBBW3RoaXMuZXhjUHRyPj4yXTt2YXIgdD10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtyZXR1cm4gdCE9PTA/dDp0aGlzLmV4Y1B0cn19dmFyIENyPTAsVHQ9KGUscix0KT0+e3ZhciBuPW5ldyBGdChlKTt0aHJvdyBuLmluaXQocix0KSxDcj1lLENyfSxTPXtpc0FiczplPT5lLmNoYXJBdCgwKT09PSIvIixzcGxpdFBhdGg6ZT0+e3ZhciByPS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLztyZXR1cm4gci5leGVjKGUpLnNsaWNlKDEpfSxub3JtYWxpemVBcnJheTooZSxyKT0+e2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGE9ZVtuXTthPT09Ii4iP2Uuc3BsaWNlKG4sMSk6YT09PSIuLiI/KGUuc3BsaWNlKG4sMSksdCsrKTp0JiYoZS5zcGxpY2UobiwxKSx0LS0pfWlmKHIpZm9yKDt0O3QtLSllLnVuc2hpZnQoIi4uIik7cmV0dXJuIGV9LG5vcm1hbGl6ZTplPT57dmFyIHI9Uy5pc0FicyhlKSx0PWUuc3Vic3RyKC0xKT09PSIvIjtyZXR1cm4gZT1TLm5vcm1hbGl6ZUFycmF5KGUuc3BsaXQoIi8iKS5maWx0ZXIobj0+ISFuKSwhcikuam9pbigiLyIpLCFlJiYhciYmKGU9Ii4iKSxlJiZ0JiYoZSs9Ii8iKSwocj8iLyI6IiIpK2V9LGRpcm5hbWU6ZT0+e3ZhciByPVMuc3BsaXRQYXRoKGUpLHQ9clswXSxuPXJbMV07cmV0dXJuIXQmJiFuPyIuIjoobiYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSksdCtuKX0sYmFzZW5hbWU6ZT0+e2lmKGU9PT0iLyIpcmV0dXJuIi8iO2U9Uy5ub3JtYWxpemUoZSksZT1lLnJlcGxhY2UoL1wvJC8sIiIpO3ZhciByPWUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gcj09PS0xP2U6ZS5zdWJzdHIocisxKX0sam9pbjooLi4uZSk9PlMubm9ybWFsaXplKGUuam9pbigiLyIpKSxqb2luMjooZSxyKT0+Uy5ub3JtYWxpemUoZSsiLyIrcil9LFN0PSgpPT57aWYodHlwZW9mIGNyeXB0bz09Im9iamVjdCImJnR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iKXJldHVybiBlPT5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpO2llKCJpbml0UmFuZG9tRGV2aWNlIil9LEZyPWU9PihGcj1TdCgpKShlKSxYPXtyZXNvbHZlOiguLi5lKT0+e2Zvcih2YXIgcj0iIix0PSExLG49ZS5sZW5ndGgtMTtuPj0tMSYmIXQ7bi0tKXt2YXIgYT1uPj0wP2Vbbl06by5jd2QoKTtpZih0eXBlb2YgYSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZighYSlyZXR1cm4iIjtyPWErIi8iK3IsdD1TLmlzQWJzKGEpfXJldHVybiByPVMubm9ybWFsaXplQXJyYXkoci5zcGxpdCgiLyIpLmZpbHRlcihpPT4hIWkpLCF0KS5qb2luKCIvIiksKHQ/Ii8iOiIiKStyfHwiLiJ9LHJlbGF0aXZlOihlLHIpPT57ZT1YLnJlc29sdmUoZSkuc3Vic3RyKDEpLHI9WC5yZXNvbHZlKHIpLnN1YnN0cigxKTtmdW5jdGlvbiB0KGMpe2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGgmJmNbZF09PT0iIjtkKyspO2Zvcih2YXIgbT1jLmxlbmd0aC0xO20+PTAmJmNbbV09PT0iIjttLS0pO3JldHVybiBkPm0/W106Yy5zbGljZShkLG0tZCsxKX1mb3IodmFyIG49dChlLnNwbGl0KCIvIikpLGE9dChyLnNwbGl0KCIvIikpLGk9TWF0aC5taW4obi5sZW5ndGgsYS5sZW5ndGgpLHM9aSxsPTA7bDxpO2wrKylpZihuW2xdIT09YVtsXSl7cz1sO2JyZWFrfWZvcih2YXIgdT1bXSxsPXM7bDxuLmxlbmd0aDtsKyspdS5wdXNoKCIuLiIpO3JldHVybiB1PXUuY29uY2F0KGEuc2xpY2UocykpLHUuam9pbigiLyIpfX0sSmU9W10sWmU9ZT0+e2Zvcih2YXIgcj0wLHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZS5jaGFyQ29kZUF0KHQpO248PTEyNz9yKys6bjw9MjA0Nz9yKz0yOm4+PTU1Mjk2JiZuPD01NzM0Mz8ocis9NCwrK3QpOnIrPTN9cmV0dXJuIHJ9LFFlPShlLHIsdCxuKT0+e2lmKCEobj4wKSlyZXR1cm4gMDtmb3IodmFyIGE9dCxpPXQrbi0xLHM9MDtzPGUubGVuZ3RoOysrcyl7dmFyIGw9ZS5jaGFyQ29kZUF0KHMpO2lmKGw+PTU1Mjk2JiZsPD01NzM0Myl7dmFyIHU9ZS5jaGFyQ29kZUF0KCsrcyk7bD02NTUzNisoKGwmMTAyMyk8PDEwKXx1JjEwMjN9aWYobDw9MTI3KXtpZih0Pj1pKWJyZWFrO3JbdCsrXT1sfWVsc2UgaWYobDw9MjA0Nyl7aWYodCsxPj1pKWJyZWFrO3JbdCsrXT0xOTJ8bD4+NixyW3QrK109MTI4fGwmNjN9ZWxzZSBpZihsPD02NTUzNSl7aWYodCsyPj1pKWJyZWFrO3JbdCsrXT0yMjR8bD4+MTIsclt0KytdPTEyOHxsPj42JjYzLHJbdCsrXT0xMjh8bCY2M31lbHNle2lmKHQrMz49aSlicmVhaztyW3QrK109MjQwfGw+PjE4LHJbdCsrXT0xMjh8bD4+MTImNjMsclt0KytdPTEyOHxsPj42JjYzLHJbdCsrXT0xMjh8bCY2M319cmV0dXJuIHJbdF09MCx0LWF9O2Z1bmN0aW9uIFNlKGUscix0KXt2YXIgbj1aZShlKSsxLGE9bmV3IEFycmF5KG4pLGk9UWUoZSxhLDAsYS5sZW5ndGgpO3JldHVybiByJiYoYS5sZW5ndGg9aSksYX12YXIgTXQ9KCk9PntpZighSmUubGVuZ3RoKXt2YXIgZT1udWxsO2lmKCFlKXJldHVybiBudWxsO0plPVNlKGUsITApfXJldHVybiBKZS5zaGlmdCgpfSxsZT17dHR5czpbXSxpbml0KCl7fSxzaHV0ZG93bigpe30scmVnaXN0ZXIoZSxyKXtsZS50dHlzW2VdPXtpbnB1dDpbXSxvdXRwdXQ6W10sb3BzOnJ9LG8ucmVnaXN0ZXJEZXZpY2UoZSxsZS5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3BlbihlKXt2YXIgcj1sZS50dHlzW2Uubm9kZS5yZGV2XTtpZighcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQzKTtlLnR0eT1yLGUuc2Vla2FibGU9ITF9LGNsb3NlKGUpe2UudHR5Lm9wcy5mc3luYyhlLnR0eSl9LGZzeW5jKGUpe2UudHR5Lm9wcy5mc3luYyhlLnR0eSl9LHJlYWQoZSxyLHQsbixhKXtpZighZS50dHl8fCFlLnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2MCk7Zm9yKHZhciBpPTAscz0wO3M8bjtzKyspe3ZhciBsO3RyeXtsPWUudHR5Lm9wcy5nZXRfY2hhcihlLnR0eSl9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9aWYobD09PXZvaWQgMCYmaT09PTApdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2KTtpZihsPT1udWxsKWJyZWFrO2krKyxyW3Qrc109bH1yZXR1cm4gaSYmKGUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksaX0sd3JpdGUoZSxyLHQsbixhKXtpZighZS50dHl8fCFlLnR0eS5vcHMucHV0X2NoYXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgaT0wO2k8bjtpKyspZS50dHkub3BzLnB1dF9jaGFyKGUudHR5LHJbdCtpXSl9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9cmV0dXJuIG4mJihlLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGl9fSxkZWZhdWx0X3R0eV9vcHM6e2dldF9jaGFyKGUpe3JldHVybiBNdCgpfSxwdXRfY2hhcihlLHIpe3I9PT1udWxsfHxyPT09MTA/KHFlKGNlKGUub3V0cHV0LDApKSxlLm91dHB1dD1bXSk6ciE9MCYmZS5vdXRwdXQucHVzaChyKX0sZnN5bmMoZSl7ZS5vdXRwdXQmJmUub3V0cHV0Lmxlbmd0aD4wJiYocWUoY2UoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKX0saW9jdGxfdGNnZXRzKGUpe3JldHVybntjX2lmbGFnOjI1ODU2LGNfb2ZsYWc6NSxjX2NmbGFnOjE5MSxjX2xmbGFnOjM1Mzg3LGNfY2M6WzMsMjgsMTI3LDIxLDQsMCwxLDAsMTcsMTksMjYsMCwxOCwxNSwyMywyMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXX19LGlvY3RsX3Rjc2V0cyhlLHIsdCl7cmV0dXJuIDB9LGlvY3RsX3Rpb2Nnd2luc3ooZSl7cmV0dXJuWzI0LDgwXX19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyKGUscil7cj09PW51bGx8fHI9PT0xMD8oZWUoY2UoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKTpyIT0wJiZlLm91dHB1dC5wdXNoKHIpfSxmc3luYyhlKXtlLm91dHB1dCYmZS5vdXRwdXQubGVuZ3RoPjAmJihlZShjZShlLm91dHB1dCwwKSksZS5vdXRwdXQ9W10pfX19LFRyPWU9PntpZSgpfSxiPXtvcHNfdGFibGU6bnVsbCxtb3VudChlKXtyZXR1cm4gYi5jcmVhdGVOb2RlKG51bGwsIi8iLDE2ODk1LDApfSxjcmVhdGVOb2RlKGUscix0LG4pe2lmKG8uaXNCbGtkZXYodCl8fG8uaXNGSUZPKHQpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2Iub3BzX3RhYmxlfHwoYi5vcHNfdGFibGU9e2Rpcjp7bm9kZTp7Z2V0YXR0cjpiLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpiLm5vZGVfb3BzLnNldGF0dHIsbG9va3VwOmIubm9kZV9vcHMubG9va3VwLG1rbm9kOmIubm9kZV9vcHMubWtub2QscmVuYW1lOmIubm9kZV9vcHMucmVuYW1lLHVubGluazpiLm5vZGVfb3BzLnVubGluayxybWRpcjpiLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6Yi5ub2RlX29wcy5yZWFkZGlyLHN5bWxpbms6Yi5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2VlazpiLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7Z2V0YXR0cjpiLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpiLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOmIuc3RyZWFtX29wcy5sbHNlZWsscmVhZDpiLnN0cmVhbV9vcHMucmVhZCx3cml0ZTpiLnN0cmVhbV9vcHMud3JpdGUsYWxsb2NhdGU6Yi5zdHJlYW1fb3BzLmFsbG9jYXRlLG1tYXA6Yi5zdHJlYW1fb3BzLm1tYXAsbXN5bmM6Yi5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjpiLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpiLm5vZGVfb3BzLnNldGF0dHIscmVhZGxpbms6Yi5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6Yi5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6Yi5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06by5jaHJkZXZfc3RyZWFtX29wc319KTt2YXIgYT1vLmNyZWF0ZU5vZGUoZSxyLHQsbik7cmV0dXJuIG8uaXNEaXIoYS5tb2RlKT8oYS5ub2RlX29wcz1iLm9wc190YWJsZS5kaXIubm9kZSxhLnN0cmVhbV9vcHM9Yi5vcHNfdGFibGUuZGlyLnN0cmVhbSxhLmNvbnRlbnRzPXt9KTpvLmlzRmlsZShhLm1vZGUpPyhhLm5vZGVfb3BzPWIub3BzX3RhYmxlLmZpbGUubm9kZSxhLnN0cmVhbV9vcHM9Yi5vcHNfdGFibGUuZmlsZS5zdHJlYW0sYS51c2VkQnl0ZXM9MCxhLmNvbnRlbnRzPW51bGwpOm8uaXNMaW5rKGEubW9kZSk/KGEubm9kZV9vcHM9Yi5vcHNfdGFibGUubGluay5ub2RlLGEuc3RyZWFtX29wcz1iLm9wc190YWJsZS5saW5rLnN0cmVhbSk6by5pc0NocmRldihhLm1vZGUpJiYoYS5ub2RlX29wcz1iLm9wc190YWJsZS5jaHJkZXYubm9kZSxhLnN0cmVhbV9vcHM9Yi5vcHNfdGFibGUuY2hyZGV2LnN0cmVhbSksYS50aW1lc3RhbXA9RGF0ZS5ub3coKSxlJiYoZS5jb250ZW50c1tyXT1hLGUudGltZXN0YW1wPWEudGltZXN0YW1wKSxhfSxnZXRGaWxlRGF0YUFzVHlwZWRBcnJheShlKXtyZXR1cm4gZS5jb250ZW50cz9lLmNvbnRlbnRzLnN1YmFycmF5P2UuY29udGVudHMuc3ViYXJyYXkoMCxlLnVzZWRCeXRlcyk6bmV3IFVpbnQ4QXJyYXkoZS5jb250ZW50cyk6bmV3IFVpbnQ4QXJyYXkoMCl9LGV4cGFuZEZpbGVTdG9yYWdlKGUscil7dmFyIHQ9ZS5jb250ZW50cz9lLmNvbnRlbnRzLmxlbmd0aDowO2lmKCEodD49cikpe3ZhciBuPTEwMjQqMTAyNDtyPU1hdGgubWF4KHIsdCoodDxuPzI6MS4xMjUpPj4+MCksdCE9MCYmKHI9TWF0aC5tYXgociwyNTYpKTt2YXIgYT1lLmNvbnRlbnRzO2UuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkociksZS51c2VkQnl0ZXM+MCYmZS5jb250ZW50cy5zZXQoYS5zdWJhcnJheSgwLGUudXNlZEJ5dGVzKSwwKX19LHJlc2l6ZUZpbGVTdG9yYWdlKGUscil7aWYoZS51c2VkQnl0ZXMhPXIpaWYocj09MCllLmNvbnRlbnRzPW51bGwsZS51c2VkQnl0ZXM9MDtlbHNle3ZhciB0PWUuY29udGVudHM7ZS5jb250ZW50cz1uZXcgVWludDhBcnJheShyKSx0JiZlLmNvbnRlbnRzLnNldCh0LnN1YmFycmF5KDAsTWF0aC5taW4ocixlLnVzZWRCeXRlcykpKSxlLnVzZWRCeXRlcz1yfX0sbm9kZV9vcHM6e2dldGF0dHIoZSl7dmFyIHI9e307cmV0dXJuIHIuZGV2PW8uaXNDaHJkZXYoZS5tb2RlKT9lLmlkOjEsci5pbm89ZS5pZCxyLm1vZGU9ZS5tb2RlLHIubmxpbms9MSxyLnVpZD0wLHIuZ2lkPTAsci5yZGV2PWUucmRldixvLmlzRGlyKGUubW9kZSk/ci5zaXplPTQwOTY6by5pc0ZpbGUoZS5tb2RlKT9yLnNpemU9ZS51c2VkQnl0ZXM6by5pc0xpbmsoZS5tb2RlKT9yLnNpemU9ZS5saW5rLmxlbmd0aDpyLnNpemU9MCxyLmF0aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLm10aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLmN0aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLmJsa3NpemU9NDA5NixyLmJsb2Nrcz1NYXRoLmNlaWwoci5zaXplL3IuYmxrc2l6ZSkscn0sc2V0YXR0cihlLHIpe3IubW9kZSE9PXZvaWQgMCYmKGUubW9kZT1yLm1vZGUpLHIudGltZXN0YW1wIT09dm9pZCAwJiYoZS50aW1lc3RhbXA9ci50aW1lc3RhbXApLHIuc2l6ZSE9PXZvaWQgMCYmYi5yZXNpemVGaWxlU3RvcmFnZShlLHIuc2l6ZSl9LGxvb2t1cChlLHIpe3Rocm93IG8uZ2VuZXJpY0Vycm9yc1s0NF19LG1rbm9kKGUscix0LG4pe3JldHVybiBiLmNyZWF0ZU5vZGUoZSxyLHQsbil9LHJlbmFtZShlLHIsdCl7aWYoby5pc0RpcihlLm1vZGUpKXt2YXIgbjt0cnl7bj1vLmxvb2t1cE5vZGUocix0KX1jYXRjaHt9aWYobilmb3IodmFyIGEgaW4gbi5jb250ZW50cyl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDU1KX1kZWxldGUgZS5wYXJlbnQuY29udGVudHNbZS5uYW1lXSxlLnBhcmVudC50aW1lc3RhbXA9RGF0ZS5ub3coKSxlLm5hbWU9dCxyLmNvbnRlbnRzW3RdPWUsci50aW1lc3RhbXA9ZS5wYXJlbnQudGltZXN0YW1wLGUucGFyZW50PXJ9LHVubGluayhlLHIpe2RlbGV0ZSBlLmNvbnRlbnRzW3JdLGUudGltZXN0YW1wPURhdGUubm93KCl9LHJtZGlyKGUscil7dmFyIHQ9by5sb29rdXBOb2RlKGUscik7Zm9yKHZhciBuIGluIHQuY29udGVudHMpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NSk7ZGVsZXRlIGUuY29udGVudHNbcl0sZS50aW1lc3RhbXA9RGF0ZS5ub3coKX0scmVhZGRpcihlKXt2YXIgcj1bIi4iLCIuLiJdO2Zvcih2YXIgdCBvZiBPYmplY3Qua2V5cyhlLmNvbnRlbnRzKSlyLnB1c2godCk7cmV0dXJuIHJ9LHN5bWxpbmsoZSxyLHQpe3ZhciBuPWIuY3JlYXRlTm9kZShlLHIsNDE0NzEsMCk7cmV0dXJuIG4ubGluaz10LG59LHJlYWRsaW5rKGUpe2lmKCFvLmlzTGluayhlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3JldHVybiBlLmxpbmt9fSxzdHJlYW1fb3BzOntyZWFkKGUscix0LG4sYSl7dmFyIGk9ZS5ub2RlLmNvbnRlbnRzO2lmKGE+PWUubm9kZS51c2VkQnl0ZXMpcmV0dXJuIDA7dmFyIHM9TWF0aC5taW4oZS5ub2RlLnVzZWRCeXRlcy1hLG4pO2lmKHM+OCYmaS5zdWJhcnJheSlyLnNldChpLnN1YmFycmF5KGEsYStzKSx0KTtlbHNlIGZvcih2YXIgbD0wO2w8cztsKyspclt0K2xdPWlbYStsXTtyZXR1cm4gc30sd3JpdGUoZSxyLHQsbixhLGkpe2lmKHIuYnVmZmVyPT09SS5idWZmZXImJihpPSExKSwhbilyZXR1cm4gMDt2YXIgcz1lLm5vZGU7aWYocy50aW1lc3RhbXA9RGF0ZS5ub3coKSxyLnN1YmFycmF5JiYoIXMuY29udGVudHN8fHMuY29udGVudHMuc3ViYXJyYXkpKXtpZihpKXJldHVybiBzLmNvbnRlbnRzPXIuc3ViYXJyYXkodCx0K24pLHMudXNlZEJ5dGVzPW4sbjtpZihzLnVzZWRCeXRlcz09PTAmJmE9PT0wKXJldHVybiBzLmNvbnRlbnRzPXIuc2xpY2UodCx0K24pLHMudXNlZEJ5dGVzPW4sbjtpZihhK248PXMudXNlZEJ5dGVzKXJldHVybiBzLmNvbnRlbnRzLnNldChyLnN1YmFycmF5KHQsdCtuKSxhKSxufWlmKGIuZXhwYW5kRmlsZVN0b3JhZ2UocyxhK24pLHMuY29udGVudHMuc3ViYXJyYXkmJnIuc3ViYXJyYXkpcy5jb250ZW50cy5zZXQoci5zdWJhcnJheSh0LHQrbiksYSk7ZWxzZSBmb3IodmFyIGw9MDtsPG47bCsrKXMuY29udGVudHNbYStsXT1yW3QrbF07cmV0dXJuIHMudXNlZEJ5dGVzPU1hdGgubWF4KHMudXNlZEJ5dGVzLGErbiksbn0sbGxzZWVrKGUscix0KXt2YXIgbj1yO2lmKHQ9PT0xP24rPWUucG9zaXRpb246dD09PTImJm8uaXNGaWxlKGUubm9kZS5tb2RlKSYmKG4rPWUubm9kZS51c2VkQnl0ZXMpLG48MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gbn0sYWxsb2NhdGUoZSxyLHQpe2IuZXhwYW5kRmlsZVN0b3JhZ2UoZS5ub2RlLHIrdCksZS5ub2RlLnVzZWRCeXRlcz1NYXRoLm1heChlLm5vZGUudXNlZEJ5dGVzLHIrdCl9LG1tYXAoZSxyLHQsbixhKXtpZighby5pc0ZpbGUoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDMpO3ZhciBpLHMsbD1lLm5vZGUuY29udGVudHM7aWYoIShhJjIpJiZsLmJ1ZmZlcj09PUkuYnVmZmVyKXM9ITEsaT1sLmJ5dGVPZmZzZXQ7ZWxzZXtpZigodD4wfHx0K3I8bC5sZW5ndGgpJiYobC5zdWJhcnJheT9sPWwuc3ViYXJyYXkodCx0K3IpOmw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobCx0LHQrcikpLHM9ITAsaT1UcigpLCFpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDgpO0kuc2V0KGwsaSl9cmV0dXJue3B0cjppLGFsbG9jYXRlZDpzfX0sbXN5bmMoZSxyLHQsbixhKXtyZXR1cm4gYi5zdHJlYW1fb3BzLndyaXRlKGUsciwwLG4sdCwhMSksMH19fSxSdD0oZSxyLHQsbik9Pnt2YXIgYT1gYWwgJHtlfWA7bXIoZSxpPT57cihuZXcgVWludDhBcnJheShpKSksYSYmRmUoKX0saT0+e2lmKHQpdCgpO2Vsc2UgdGhyb3dgTG9hZGluZyBkYXRhIGZpbGUgIiR7ZX0iIGZhaWxlZC5gfSksYSYmWGUoKX0sT3Q9KGUscix0LG4sYSxpKT0+e28uY3JlYXRlRGF0YUZpbGUoZSxyLHQsbixhLGkpfSxJdD1mLnByZWxvYWRQbHVnaW5zfHxbXSxMdD0oZSxyLHQsbik9Pnt0eXBlb2YgQnJvd3NlcjwidSImJkJyb3dzZXIuaW5pdCgpO3ZhciBhPSExO3JldHVybiBJdC5mb3JFYWNoKGk9PnthfHxpLmNhbkhhbmRsZShyKSYmKGkuaGFuZGxlKGUscix0LG4pLGE9ITApfSksYX0sVnQ9KGUscix0LG4sYSxpLHMsbCx1LGMpPT57dmFyIGQ9cj9YLnJlc29sdmUoUy5qb2luMihlLHIpKTplO2Z1bmN0aW9uIG0oaCl7ZnVuY3Rpb24gcCh3KXtjPT1udWxsfHxjKCksbHx8T3QoZSxyLHcsbixhLHUpLGk9PW51bGx8fGkoKSxGZSgpfUx0KGgsZCxwLCgpPT57cz09bnVsbHx8cygpLEZlKCl9KXx8cChoKX1YZSgpLHR5cGVvZiB0PT0ic3RyaW5nIj9SdCh0LG0scyk6bSh0KX0sVXQ9ZT0+e3ZhciByPXtyOjAsInIrIjoyLHc6NTc3LCJ3KyI6NTc4LGE6MTA4OSwiYSsiOjEwOTB9LHQ9cltlXTtpZih0eXBlb2YgdD4idSIpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpbGUgb3BlbiBtb2RlOiAke2V9YCk7cmV0dXJuIHR9LGVyPShlLHIpPT57dmFyIHQ9MDtyZXR1cm4gZSYmKHR8PTM2NSksciYmKHR8PTE0NiksdH0sVj17RElSX01PREU6MTY4OTUsRklMRV9NT0RFOjMzMjc5LHJlYWRlcjpudWxsLG1vdW50KGUpe19yKGFlKSxWLnJlYWRlcnx8KFYucmVhZGVyPW5ldyBGaWxlUmVhZGVyU3luYyk7dmFyIHI9Vi5jcmVhdGVOb2RlKG51bGwsIi8iLFYuRElSX01PREUsMCksdD17fTtmdW5jdGlvbiBuKGkpe2Zvcih2YXIgcz1pLnNwbGl0KCIvIiksbD1yLHU9MDt1PHMubGVuZ3RoLTE7dSsrKXt2YXIgYz1zLnNsaWNlKDAsdSsxKS5qb2luKCIvIik7dFtjXXx8KHRbY109Vi5jcmVhdGVOb2RlKGwsc1t1XSxWLkRJUl9NT0RFLDApKSxsPXRbY119cmV0dXJuIGx9ZnVuY3Rpb24gYShpKXt2YXIgcz1pLnNwbGl0KCIvIik7cmV0dXJuIHNbcy5sZW5ndGgtMV19cmV0dXJuIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZS5vcHRzLmZpbGVzfHxbXSxmdW5jdGlvbihpKXtWLmNyZWF0ZU5vZGUobihpLm5hbWUpLGEoaS5uYW1lKSxWLkZJTEVfTU9ERSwwLGksaS5sYXN0TW9kaWZpZWREYXRlKX0pLChlLm9wdHMuYmxvYnN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe1YuY3JlYXRlTm9kZShuKGkubmFtZSksYShpLm5hbWUpLFYuRklMRV9NT0RFLDAsaS5kYXRhKX0pLChlLm9wdHMucGFja2FnZXN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubWV0YWRhdGEuZmlsZXMuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgbD1zLmZpbGVuYW1lLnN1YnN0cigxKTtWLmNyZWF0ZU5vZGUobihsKSxhKGwpLFYuRklMRV9NT0RFLDAsaS5ibG9iLnNsaWNlKHMuc3RhcnQscy5lbmQpKX0pfSkscn0sY3JlYXRlTm9kZShlLHIsdCxuLGEsaSl7dmFyIHM9by5jcmVhdGVOb2RlKGUscix0KTtyZXR1cm4gcy5tb2RlPXQscy5ub2RlX29wcz1WLm5vZGVfb3BzLHMuc3RyZWFtX29wcz1WLnN0cmVhbV9vcHMscy50aW1lc3RhbXA9KGl8fG5ldyBEYXRlKS5nZXRUaW1lKCksX3IoVi5GSUxFX01PREUhPT1WLkRJUl9NT0RFKSx0PT09Vi5GSUxFX01PREU/KHMuc2l6ZT1hLnNpemUscy5jb250ZW50cz1hKToocy5zaXplPTQwOTYscy5jb250ZW50cz17fSksZSYmKGUuY29udGVudHNbcl09cyksc30sbm9kZV9vcHM6e2dldGF0dHIoZSl7cmV0dXJue2RldjoxLGlubzplLmlkLG1vZGU6ZS5tb2RlLG5saW5rOjEsdWlkOjAsZ2lkOjAscmRldjowLHNpemU6ZS5zaXplLGF0aW1lOm5ldyBEYXRlKGUudGltZXN0YW1wKSxtdGltZTpuZXcgRGF0ZShlLnRpbWVzdGFtcCksY3RpbWU6bmV3IERhdGUoZS50aW1lc3RhbXApLGJsa3NpemU6NDA5NixibG9ja3M6TWF0aC5jZWlsKGUuc2l6ZS80MDk2KX19LHNldGF0dHIoZSxyKXtyLm1vZGUhPT12b2lkIDAmJihlLm1vZGU9ci5tb2RlKSxyLnRpbWVzdGFtcCE9PXZvaWQgMCYmKGUudGltZXN0YW1wPXIudGltZXN0YW1wKX0sbG9va3VwKGUscil7dGhyb3cgbmV3IG8uRXJybm9FcnJvcig0NCl9LG1rbm9kKGUscix0LG4pe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpfSxyZW5hbWUoZSxyLHQpe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpfSx1bmxpbmsoZSxyKXt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKX0scm1kaXIoZSxyKXt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKX0scmVhZGRpcihlKXt2YXIgcj1bIi4iLCIuLiJdO2Zvcih2YXIgdCBvZiBPYmplY3Qua2V5cyhlLmNvbnRlbnRzKSlyLnB1c2godCk7cmV0dXJuIHJ9LHN5bWxpbmsoZSxyLHQpe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpfX0sc3RyZWFtX29wczp7cmVhZChlLHIsdCxuLGEpe2lmKGE+PWUubm9kZS5zaXplKXJldHVybiAwO3ZhciBpPWUubm9kZS5jb250ZW50cy5zbGljZShhLGErbikscz1WLnJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihpKTtyZXR1cm4gci5zZXQobmV3IFVpbnQ4QXJyYXkocyksdCksaS5zaXplfSx3cml0ZShlLHIsdCxuLGEpe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoMjkpfSxsbHNlZWsoZSxyLHQpe3ZhciBuPXI7aWYodD09PTE/bis9ZS5wb3NpdGlvbjp0PT09MiYmby5pc0ZpbGUoZS5ub2RlLm1vZGUpJiYobis9ZS5ub2RlLnNpemUpLG48MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gbn19fSxvPXtyb290Om51bGwsbW91bnRzOltdLGRldmljZXM6e30sc3RyZWFtczpbXSxuZXh0SW5vZGU6MSxuYW1lVGFibGU6bnVsbCxjdXJyZW50UGF0aDoiLyIsaW5pdGlhbGl6ZWQ6ITEsaWdub3JlUGVybWlzc2lvbnM6ITAsRXJybm9FcnJvcjpjbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9IkVycm5vRXJyb3IiLHRoaXMuZXJybm89ZX19LGdlbmVyaWNFcnJvcnM6e30sZmlsZXN5c3RlbXM6bnVsbCxzeW5jRlNSZXF1ZXN0czowLEZTU3RyZWFtOmNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFyZWQ9e319Z2V0IG9iamVjdCgpe3JldHVybiB0aGlzLm5vZGV9c2V0IG9iamVjdChlKXt0aGlzLm5vZGU9ZX1nZXQgaXNSZWFkKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMjA5NzE1NSkhPT0xfWdldCBpc1dyaXRlKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMjA5NzE1NSkhPT0wfWdldCBpc0FwcGVuZCgpe3JldHVybiB0aGlzLmZsYWdzJjEwMjR9Z2V0IGZsYWdzKCl7cmV0dXJuIHRoaXMuc2hhcmVkLmZsYWdzfXNldCBmbGFncyhlKXt0aGlzLnNoYXJlZC5mbGFncz1lfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5wb3NpdGlvbn1zZXQgcG9zaXRpb24oZSl7dGhpcy5zaGFyZWQucG9zaXRpb249ZX19LEZTTm9kZTpjbGFzc3tjb25zdHJ1Y3RvcihlLHIsdCxuKXtlfHwoZT10aGlzKSx0aGlzLnBhcmVudD1lLHRoaXMubW91bnQ9ZS5tb3VudCx0aGlzLm1vdW50ZWQ9bnVsbCx0aGlzLmlkPW8ubmV4dElub2RlKyssdGhpcy5uYW1lPXIsdGhpcy5tb2RlPXQsdGhpcy5ub2RlX29wcz17fSx0aGlzLnN0cmVhbV9vcHM9e30sdGhpcy5yZGV2PW4sdGhpcy5yZWFkTW9kZT0zNjUsdGhpcy53cml0ZU1vZGU9MTQ2fWdldCByZWFkKCl7cmV0dXJuKHRoaXMubW9kZSZ0aGlzLnJlYWRNb2RlKT09PXRoaXMucmVhZE1vZGV9c2V0IHJlYWQoZSl7ZT90aGlzLm1vZGV8PXRoaXMucmVhZE1vZGU6dGhpcy5tb2RlJj1+dGhpcy5yZWFkTW9kZX1nZXQgd3JpdGUoKXtyZXR1cm4odGhpcy5tb2RlJnRoaXMud3JpdGVNb2RlKT09PXRoaXMud3JpdGVNb2RlfXNldCB3cml0ZShlKXtlP3RoaXMubW9kZXw9dGhpcy53cml0ZU1vZGU6dGhpcy5tb2RlJj1+dGhpcy53cml0ZU1vZGV9Z2V0IGlzRm9sZGVyKCl7cmV0dXJuIG8uaXNEaXIodGhpcy5tb2RlKX1nZXQgaXNEZXZpY2UoKXtyZXR1cm4gby5pc0NocmRldih0aGlzLm1vZGUpfX0sbG9va3VwUGF0aChlLHI9e30pe2lmKGU9WC5yZXNvbHZlKGUpLCFlKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07dmFyIHQ9e2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9O2lmKHI9T2JqZWN0LmFzc2lnbih0LHIpLHIucmVjdXJzZV9jb3VudD44KXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzIpO2Zvcih2YXIgbj1lLnNwbGl0KCIvIikuZmlsdGVyKG09PiEhbSksYT1vLnJvb3QsaT0iLyIscz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgbD1zPT09bi5sZW5ndGgtMTtpZihsJiZyLnBhcmVudClicmVhaztpZihhPW8ubG9va3VwTm9kZShhLG5bc10pLGk9Uy5qb2luMihpLG5bc10pLG8uaXNNb3VudHBvaW50KGEpJiYoIWx8fGwmJnIuZm9sbG93X21vdW50KSYmKGE9YS5tb3VudGVkLnJvb3QpLCFsfHxyLmZvbGxvdylmb3IodmFyIHU9MDtvLmlzTGluayhhLm1vZGUpOyl7dmFyIGM9by5yZWFkbGluayhpKTtpPVgucmVzb2x2ZShTLmRpcm5hbWUoaSksYyk7dmFyIGQ9by5sb29rdXBQYXRoKGkse3JlY3Vyc2VfY291bnQ6ci5yZWN1cnNlX2NvdW50KzF9KTtpZihhPWQubm9kZSx1Kys+NDApdGhyb3cgbmV3IG8uRXJybm9FcnJvcigzMil9fXJldHVybntwYXRoOmksbm9kZTphfX0sZ2V0UGF0aChlKXtmb3IodmFyIHI7Oyl7aWYoby5pc1Jvb3QoZSkpe3ZhciB0PWUubW91bnQubW91bnRwb2ludDtyZXR1cm4gcj90W3QubGVuZ3RoLTFdIT09Ii8iP2Ake3R9LyR7cn1gOnQrcjp0fXI9cj9gJHtlLm5hbWV9LyR7cn1gOmUubmFtZSxlPWUucGFyZW50fX0saGFzaE5hbWUoZSxyKXtmb3IodmFyIHQ9MCxuPTA7bjxyLmxlbmd0aDtuKyspdD0odDw8NSktdCtyLmNoYXJDb2RlQXQobil8MDtyZXR1cm4oZSt0Pj4+MCklby5uYW1lVGFibGUubGVuZ3RofSxoYXNoQWRkTm9kZShlKXt2YXIgcj1vLmhhc2hOYW1lKGUucGFyZW50LmlkLGUubmFtZSk7ZS5uYW1lX25leHQ9by5uYW1lVGFibGVbcl0sby5uYW1lVGFibGVbcl09ZX0saGFzaFJlbW92ZU5vZGUoZSl7dmFyIHI9by5oYXNoTmFtZShlLnBhcmVudC5pZCxlLm5hbWUpO2lmKG8ubmFtZVRhYmxlW3JdPT09ZSlvLm5hbWVUYWJsZVtyXT1lLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgdD1vLm5hbWVUYWJsZVtyXTt0Oyl7aWYodC5uYW1lX25leHQ9PT1lKXt0Lm5hbWVfbmV4dD1lLm5hbWVfbmV4dDticmVha310PXQubmFtZV9uZXh0fX0sbG9va3VwTm9kZShlLHIpe3ZhciB0PW8ubWF5TG9va3VwKGUpO2lmKHQpdGhyb3cgbmV3IG8uRXJybm9FcnJvcih0KTtmb3IodmFyIG49by5oYXNoTmFtZShlLmlkLHIpLGE9by5uYW1lVGFibGVbbl07YTthPWEubmFtZV9uZXh0KXt2YXIgaT1hLm5hbWU7aWYoYS5wYXJlbnQuaWQ9PT1lLmlkJiZpPT09cilyZXR1cm4gYX1yZXR1cm4gby5sb29rdXAoZSxyKX0sY3JlYXRlTm9kZShlLHIsdCxuKXt2YXIgYT1uZXcgby5GU05vZGUoZSxyLHQsbik7cmV0dXJuIG8uaGFzaEFkZE5vZGUoYSksYX0sZGVzdHJveU5vZGUoZSl7by5oYXNoUmVtb3ZlTm9kZShlKX0saXNSb290KGUpe3JldHVybiBlPT09ZS5wYXJlbnR9LGlzTW91bnRwb2ludChlKXtyZXR1cm4hIWUubW91bnRlZH0saXNGaWxlKGUpe3JldHVybihlJjYxNDQwKT09PTMyNzY4fSxpc0RpcihlKXtyZXR1cm4oZSY2MTQ0MCk9PT0xNjM4NH0saXNMaW5rKGUpe3JldHVybihlJjYxNDQwKT09PTQwOTYwfSxpc0NocmRldihlKXtyZXR1cm4oZSY2MTQ0MCk9PT04MTkyfSxpc0Jsa2RldihlKXtyZXR1cm4oZSY2MTQ0MCk9PT0yNDU3Nn0saXNGSUZPKGUpe3JldHVybihlJjYxNDQwKT09PTQwOTZ9LGlzU29ja2V0KGUpe3JldHVybihlJjQ5MTUyKT09PTQ5MTUyfSxmbGFnc1RvUGVybWlzc2lvblN0cmluZyhlKXt2YXIgcj1bInIiLCJ3IiwicnciXVtlJjNdO3JldHVybiBlJjUxMiYmKHIrPSJ3Iikscn0sbm9kZVBlcm1pc3Npb25zKGUscil7cmV0dXJuIG8uaWdub3JlUGVybWlzc2lvbnM/MDpyLmluY2x1ZGVzKCJyIikmJiEoZS5tb2RlJjI5Mil8fHIuaW5jbHVkZXMoInciKSYmIShlLm1vZGUmMTQ2KXx8ci5pbmNsdWRlcygieCIpJiYhKGUubW9kZSY3Myk/MjowfSxtYXlMb29rdXAoZSl7aWYoIW8uaXNEaXIoZS5tb2RlKSlyZXR1cm4gNTQ7dmFyIHI9by5ub2RlUGVybWlzc2lvbnMoZSwieCIpO3JldHVybiByfHwoZS5ub2RlX29wcy5sb29rdXA/MDoyKX0sbWF5Q3JlYXRlKGUscil7dHJ5e3ZhciB0PW8ubG9va3VwTm9kZShlLHIpO3JldHVybiAyMH1jYXRjaHt9cmV0dXJuIG8ubm9kZVBlcm1pc3Npb25zKGUsInd4Iil9LG1heURlbGV0ZShlLHIsdCl7dmFyIG47dHJ5e249by5sb29rdXBOb2RlKGUscil9Y2F0Y2goaSl7cmV0dXJuIGkuZXJybm99dmFyIGE9by5ub2RlUGVybWlzc2lvbnMoZSwid3giKTtpZihhKXJldHVybiBhO2lmKHQpe2lmKCFvLmlzRGlyKG4ubW9kZSkpcmV0dXJuIDU0O2lmKG8uaXNSb290KG4pfHxvLmdldFBhdGgobik9PT1vLmN3ZCgpKXJldHVybiAxMH1lbHNlIGlmKG8uaXNEaXIobi5tb2RlKSlyZXR1cm4gMzE7cmV0dXJuIDB9LG1heU9wZW4oZSxyKXtyZXR1cm4gZT9vLmlzTGluayhlLm1vZGUpPzMyOm8uaXNEaXIoZS5tb2RlKSYmKG8uZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcocikhPT0iciJ8fHImNTEyKT8zMTpvLm5vZGVQZXJtaXNzaW9ucyhlLG8uZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcocikpOjQ0fSxNQVhfT1BFTl9GRFM6NDA5NixuZXh0ZmQoKXtmb3IodmFyIGU9MDtlPD1vLk1BWF9PUEVOX0ZEUztlKyspaWYoIW8uc3RyZWFtc1tlXSlyZXR1cm4gZTt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDMzKX0sZ2V0U3RyZWFtQ2hlY2tlZChlKXt2YXIgcj1vLmdldFN0cmVhbShlKTtpZighcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO3JldHVybiByfSxnZXRTdHJlYW06ZT0+by5zdHJlYW1zW2VdLGNyZWF0ZVN0cmVhbShlLHI9LTEpe3JldHVybiBlPU9iamVjdC5hc3NpZ24obmV3IG8uRlNTdHJlYW0sZSkscj09LTEmJihyPW8ubmV4dGZkKCkpLGUuZmQ9cixvLnN0cmVhbXNbcl09ZSxlfSxjbG9zZVN0cmVhbShlKXtvLnN0cmVhbXNbZV09bnVsbH0sZHVwU3RyZWFtKGUscj0tMSl7dmFyIG4sYTt2YXIgdD1vLmNyZWF0ZVN0cmVhbShlLHIpO3JldHVybihhPShuPXQuc3RyZWFtX29wcyk9PW51bGw/dm9pZCAwOm4uZHVwKT09bnVsbHx8YS5jYWxsKG4sdCksdH0sY2hyZGV2X3N0cmVhbV9vcHM6e29wZW4oZSl7dmFyIHQsbjt2YXIgcj1vLmdldERldmljZShlLm5vZGUucmRldik7ZS5zdHJlYW1fb3BzPXIuc3RyZWFtX29wcywobj0odD1lLnN0cmVhbV9vcHMpLm9wZW4pPT1udWxsfHxuLmNhbGwodCxlKX0sbGxzZWVrKCl7dGhyb3cgbmV3IG8uRXJybm9FcnJvcig3MCl9fSxtYWpvcjplPT5lPj44LG1pbm9yOmU9PmUmMjU1LG1ha2VkZXY6KGUscik9PmU8PDh8cixyZWdpc3RlckRldmljZShlLHIpe28uZGV2aWNlc1tlXT17c3RyZWFtX29wczpyfX0sZ2V0RGV2aWNlOmU9Pm8uZGV2aWNlc1tlXSxnZXRNb3VudHMoZSl7Zm9yKHZhciByPVtdLHQ9W2VdO3QubGVuZ3RoOyl7dmFyIG49dC5wb3AoKTtyLnB1c2gobiksdC5wdXNoKC4uLm4ubW91bnRzKX1yZXR1cm4gcn0sc3luY2ZzKGUscil7dHlwZW9mIGU9PSJmdW5jdGlvbiImJihyPWUsZT0hMSksby5zeW5jRlNSZXF1ZXN0cysrLG8uc3luY0ZTUmVxdWVzdHM+MSYmZWUoYHdhcm5pbmc6ICR7by5zeW5jRlNSZXF1ZXN0c30gRlMuc3luY2ZzIG9wZXJhdGlvbnMgaW4gZmxpZ2h0IGF0IG9uY2UsIHByb2JhYmx5IGp1c3QgZG9pbmcgZXh0cmEgd29ya2ApO3ZhciB0PW8uZ2V0TW91bnRzKG8ucm9vdC5tb3VudCksbj0wO2Z1bmN0aW9uIGEocyl7cmV0dXJuIG8uc3luY0ZTUmVxdWVzdHMtLSxyKHMpfWZ1bmN0aW9uIGkocyl7aWYocylyZXR1cm4gaS5lcnJvcmVkP3ZvaWQgMDooaS5lcnJvcmVkPSEwLGEocykpOysrbj49dC5sZW5ndGgmJmEobnVsbCl9dC5mb3JFYWNoKHM9PntpZighcy50eXBlLnN5bmNmcylyZXR1cm4gaShudWxsKTtzLnR5cGUuc3luY2ZzKHMsZSxpKX0pfSxtb3VudChlLHIsdCl7dmFyIG49dD09PSIvIixhPSF0LGk7aWYobiYmby5yb290KXRocm93IG5ldyBvLkVycm5vRXJyb3IoMTApO2lmKCFuJiYhYSl7dmFyIHM9by5sb29rdXBQYXRoKHQse2ZvbGxvd19tb3VudDohMX0pO2lmKHQ9cy5wYXRoLGk9cy5ub2RlLG8uaXNNb3VudHBvaW50KGkpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMTApO2lmKCFvLmlzRGlyKGkubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NCl9dmFyIGw9e3R5cGU6ZSxvcHRzOnIsbW91bnRwb2ludDp0LG1vdW50czpbXX0sdT1lLm1vdW50KGwpO3JldHVybiB1Lm1vdW50PWwsbC5yb290PXUsbj9vLnJvb3Q9dTppJiYoaS5tb3VudGVkPWwsaS5tb3VudCYmaS5tb3VudC5tb3VudHMucHVzaChsKSksdX0sdW5tb3VudChlKXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93X21vdW50OiExfSk7aWYoIW8uaXNNb3VudHBvaW50KHIubm9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7dmFyIHQ9ci5ub2RlLG49dC5tb3VudGVkLGE9by5nZXRNb3VudHMobik7T2JqZWN0LmtleXMoby5uYW1lVGFibGUpLmZvckVhY2gocz0+e2Zvcih2YXIgbD1vLm5hbWVUYWJsZVtzXTtsOyl7dmFyIHU9bC5uYW1lX25leHQ7YS5pbmNsdWRlcyhsLm1vdW50KSYmby5kZXN0cm95Tm9kZShsKSxsPXV9fSksdC5tb3VudGVkPW51bGw7dmFyIGk9dC5tb3VudC5tb3VudHMuaW5kZXhPZihuKTt0Lm1vdW50Lm1vdW50cy5zcGxpY2UoaSwxKX0sbG9va3VwKGUscil7cmV0dXJuIGUubm9kZV9vcHMubG9va3VwKGUscil9LG1rbm9kKGUscix0KXt2YXIgbj1vLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSksYT1uLm5vZGUsaT1TLmJhc2VuYW1lKGUpO2lmKCFpfHxpPT09Ii4ifHxpPT09Ii4uIil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgcz1vLm1heUNyZWF0ZShhLGkpO2lmKHMpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihzKTtpZighYS5ub2RlX29wcy5ta25vZCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtyZXR1cm4gYS5ub2RlX29wcy5ta25vZChhLGkscix0KX0sY3JlYXRlKGUscil7cmV0dXJuIHI9ciE9PXZvaWQgMD9yOjQzOCxyJj00MDk1LHJ8PTMyNzY4LG8ubWtub2QoZSxyLDApfSxta2RpcihlLHIpe3JldHVybiByPXIhPT12b2lkIDA/cjo1MTEsciY9MTAyMyxyfD0xNjM4NCxvLm1rbm9kKGUsciwwKX0sbWtkaXJUcmVlKGUscil7Zm9yKHZhciB0PWUuc3BsaXQoIi8iKSxuPSIiLGE9MDthPHQubGVuZ3RoOysrYSlpZih0W2FdKXtuKz0iLyIrdFthXTt0cnl7by5ta2RpcihuLHIpfWNhdGNoKGkpe2lmKGkuZXJybm8hPTIwKXRocm93IGl9fX0sbWtkZXYoZSxyLHQpe3JldHVybiB0eXBlb2YgdD4idSImJih0PXIscj00MzgpLHJ8PTgxOTIsby5ta25vZChlLHIsdCl9LHN5bWxpbmsoZSxyKXtpZighWC5yZXNvbHZlKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3ZhciB0PW8ubG9va3VwUGF0aChyLHtwYXJlbnQ6ITB9KSxuPXQubm9kZTtpZighbil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTt2YXIgYT1TLmJhc2VuYW1lKHIpLGk9by5tYXlDcmVhdGUobixhKTtpZihpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoaSk7aWYoIW4ubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtyZXR1cm4gbi5ub2RlX29wcy5zeW1saW5rKG4sYSxlKX0scmVuYW1lKGUscil7dmFyIHQ9Uy5kaXJuYW1lKGUpLG49Uy5kaXJuYW1lKHIpLGE9Uy5iYXNlbmFtZShlKSxpPVMuYmFzZW5hbWUocikscyxsLHU7aWYocz1vLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSksbD1zLm5vZGUscz1vLmxvb2t1cFBhdGgocix7cGFyZW50OiEwfSksdT1zLm5vZGUsIWx8fCF1KXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO2lmKGwubW91bnQhPT11Lm1vdW50KXRocm93IG5ldyBvLkVycm5vRXJyb3IoNzUpO3ZhciBjPW8ubG9va3VwTm9kZShsLGEpLGQ9WC5yZWxhdGl2ZShlLG4pO2lmKGQuY2hhckF0KDApIT09Ii4iKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO2lmKGQ9WC5yZWxhdGl2ZShyLHQpLGQuY2hhckF0KDApIT09Ii4iKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTUpO3ZhciBtO3RyeXttPW8ubG9va3VwTm9kZSh1LGkpfWNhdGNoe31pZihjIT09bSl7dmFyIGg9by5pc0RpcihjLm1vZGUpLHA9by5tYXlEZWxldGUobCxhLGgpO2lmKHApdGhyb3cgbmV3IG8uRXJybm9FcnJvcihwKTtpZihwPW0/by5tYXlEZWxldGUodSxpLGgpOm8ubWF5Q3JlYXRlKHUsaSkscCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKHApO2lmKCFsLm5vZGVfb3BzLnJlbmFtZSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtpZihvLmlzTW91bnRwb2ludChjKXx8bSYmby5pc01vdW50cG9pbnQobSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigxMCk7aWYodSE9PWwmJihwPW8ubm9kZVBlcm1pc3Npb25zKGwsInciKSxwKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKHApO28uaGFzaFJlbW92ZU5vZGUoYyk7dHJ5e2wubm9kZV9vcHMucmVuYW1lKGMsdSxpKX1jYXRjaCh3KXt0aHJvdyB3fWZpbmFsbHl7by5oYXNoQWRkTm9kZShjKX19fSxybWRpcihlKXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSksdD1yLm5vZGUsbj1TLmJhc2VuYW1lKGUpLGE9by5sb29rdXBOb2RlKHQsbiksaT1vLm1heURlbGV0ZSh0LG4sITApO2lmKGkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihpKTtpZighdC5ub2RlX29wcy5ybWRpcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtpZihvLmlzTW91bnRwb2ludChhKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDEwKTt0Lm5vZGVfb3BzLnJtZGlyKHQsbiksby5kZXN0cm95Tm9kZShhKX0scmVhZGRpcihlKXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiEwfSksdD1yLm5vZGU7aWYoIXQubm9kZV9vcHMucmVhZGRpcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDU0KTtyZXR1cm4gdC5ub2RlX29wcy5yZWFkZGlyKHQpfSx1bmxpbmsoZSl7dmFyIHI9by5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLHQ9ci5ub2RlO2lmKCF0KXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3ZhciBuPVMuYmFzZW5hbWUoZSksYT1vLmxvb2t1cE5vZGUodCxuKSxpPW8ubWF5RGVsZXRlKHQsbiwhMSk7aWYoaSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKGkpO2lmKCF0Lm5vZGVfb3BzLnVubGluayl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtpZihvLmlzTW91bnRwb2ludChhKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDEwKTt0Lm5vZGVfb3BzLnVubGluayh0LG4pLG8uZGVzdHJveU5vZGUoYSl9LHJlYWRsaW5rKGUpe3ZhciByPW8ubG9va3VwUGF0aChlKSx0PXIubm9kZTtpZighdCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZighdC5ub2RlX29wcy5yZWFkbGluayl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gWC5yZXNvbHZlKG8uZ2V0UGF0aCh0LnBhcmVudCksdC5ub2RlX29wcy5yZWFkbGluayh0KSl9LHN0YXQoZSxyKXt2YXIgdD1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiFyfSksbj10Lm5vZGU7aWYoIW4pdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0NCk7aWYoIW4ubm9kZV9vcHMuZ2V0YXR0cil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtyZXR1cm4gbi5ub2RlX29wcy5nZXRhdHRyKG4pfSxsc3RhdChlKXtyZXR1cm4gby5zdGF0KGUsITApfSxjaG1vZChlLHIsdCl7dmFyIG47aWYodHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgYT1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiF0fSk7bj1hLm5vZGV9ZWxzZSBuPWU7aWYoIW4ubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtuLm5vZGVfb3BzLnNldGF0dHIobix7bW9kZTpyJjQwOTV8bi5tb2RlJi00MDk2LHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG1vZChlLHIpe28uY2htb2QoZSxyLCEwKX0sZmNobW9kKGUscil7dmFyIHQ9by5nZXRTdHJlYW1DaGVja2VkKGUpO28uY2htb2QodC5ub2RlLHIpfSxjaG93bihlLHIsdCxuKXt2YXIgYTtpZih0eXBlb2YgZT09InN0cmluZyIpe3ZhciBpPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IW59KTthPWkubm9kZX1lbHNlIGE9ZTtpZighYS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2Eubm9kZV9vcHMuc2V0YXR0cihhLHt0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2hvd24oZSxyLHQpe28uY2hvd24oZSxyLHQsITApfSxmY2hvd24oZSxyLHQpe3ZhciBuPW8uZ2V0U3RyZWFtQ2hlY2tlZChlKTtvLmNob3duKG4ubm9kZSxyLHQpfSx0cnVuY2F0ZShlLHIpe2lmKHI8MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgdDtpZih0eXBlb2YgZT09InN0cmluZyIpe3ZhciBuPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6ITB9KTt0PW4ubm9kZX1lbHNlIHQ9ZTtpZighdC5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2lmKG8uaXNEaXIodC5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDMxKTtpZighby5pc0ZpbGUodC5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgYT1vLm5vZGVQZXJtaXNzaW9ucyh0LCJ3Iik7aWYoYSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKGEpO3Qubm9kZV9vcHMuc2V0YXR0cih0LHtzaXplOnIsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sZnRydW5jYXRlKGUscil7dmFyIHQ9by5nZXRTdHJlYW1DaGVja2VkKGUpO2lmKCEodC5mbGFncyYyMDk3MTU1KSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtvLnRydW5jYXRlKHQubm9kZSxyKX0sdXRpbWUoZSxyLHQpe3ZhciBuPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6ITB9KSxhPW4ubm9kZTthLm5vZGVfb3BzLnNldGF0dHIoYSx7dGltZXN0YW1wOk1hdGgubWF4KHIsdCl9KX0sb3BlbihlLHIsdCl7aWYoZT09PSIiKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3I9dHlwZW9mIHI9PSJzdHJpbmciP1V0KHIpOnIsciY2ND8odD10eXBlb2YgdD4idSI/NDM4OnQsdD10JjQwOTV8MzI3NjgpOnQ9MDt2YXIgbjtpZih0eXBlb2YgZT09Im9iamVjdCIpbj1lO2Vsc2V7ZT1TLm5vcm1hbGl6ZShlKTt0cnl7dmFyIGE9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohKHImMTMxMDcyKX0pO249YS5ub2RlfWNhdGNoe319dmFyIGk9ITE7aWYociY2NClpZihuKXtpZihyJjEyOCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDIwKX1lbHNlIG49by5ta25vZChlLHQsMCksaT0hMDtpZighbil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZihvLmlzQ2hyZGV2KG4ubW9kZSkmJihyJj0tNTEzKSxyJjY1NTM2JiYhby5pc0RpcihuLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTQpO2lmKCFpKXt2YXIgcz1vLm1heU9wZW4obixyKTtpZihzKXRocm93IG5ldyBvLkVycm5vRXJyb3Iocyl9ciY1MTImJiFpJiZvLnRydW5jYXRlKG4sMCksciY9LTEzMTcxMzt2YXIgbD1vLmNyZWF0ZVN0cmVhbSh7bm9kZTpuLHBhdGg6by5nZXRQYXRoKG4pLGZsYWdzOnIsc2Vla2FibGU6ITAscG9zaXRpb246MCxzdHJlYW1fb3BzOm4uc3RyZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVybiBsLnN0cmVhbV9vcHMub3BlbiYmbC5zdHJlYW1fb3BzLm9wZW4obCksZi5sb2dSZWFkRmlsZXMmJiEociYxKSYmKG8ucmVhZEZpbGVzfHwoby5yZWFkRmlsZXM9e30pLGUgaW4gby5yZWFkRmlsZXN8fChvLnJlYWRGaWxlc1tlXT0xKSksbH0sY2xvc2UoZSl7aWYoby5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2UuZ2V0ZGVudHMmJihlLmdldGRlbnRzPW51bGwpO3RyeXtlLnN0cmVhbV9vcHMuY2xvc2UmJmUuc3RyZWFtX29wcy5jbG9zZShlKX1jYXRjaChyKXt0aHJvdyByfWZpbmFsbHl7by5jbG9zZVN0cmVhbShlLmZkKX1lLmZkPW51bGx9LGlzQ2xvc2VkKGUpe3JldHVybiBlLmZkPT09bnVsbH0sbGxzZWVrKGUscix0KXtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoIWUuc2Vla2FibGV8fCFlLnN0cmVhbV9vcHMubGxzZWVrKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNzApO2lmKHQhPTAmJnQhPTEmJnQhPTIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7cmV0dXJuIGUucG9zaXRpb249ZS5zdHJlYW1fb3BzLmxsc2VlayhlLHIsdCksZS51bmdvdHRlbj1bXSxlLnBvc2l0aW9ufSxyZWFkKGUscix0LG4sYSl7aWYobjwwfHxhPDApdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7aWYoby5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2lmKChlLmZsYWdzJjIwOTcxNTUpPT09MSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2lmKG8uaXNEaXIoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzEpO2lmKCFlLnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgaT10eXBlb2YgYTwidSI7aWYoIWkpYT1lLnBvc2l0aW9uO2Vsc2UgaWYoIWUuc2Vla2FibGUpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig3MCk7dmFyIHM9ZS5zdHJlYW1fb3BzLnJlYWQoZSxyLHQsbixhKTtyZXR1cm4gaXx8KGUucG9zaXRpb24rPXMpLHN9LHdyaXRlKGUscix0LG4sYSxpKXtpZihuPDB8fGE8MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoIShlLmZsYWdzJjIwOTcxNTUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoby5pc0RpcihlLm5vZGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigzMSk7aWYoIWUuc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtlLnNlZWthYmxlJiZlLmZsYWdzJjEwMjQmJm8ubGxzZWVrKGUsMCwyKTt2YXIgcz10eXBlb2YgYTwidSI7aWYoIXMpYT1lLnBvc2l0aW9uO2Vsc2UgaWYoIWUuc2Vla2FibGUpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig3MCk7dmFyIGw9ZS5zdHJlYW1fb3BzLndyaXRlKGUscix0LG4sYSxpKTtyZXR1cm4gc3x8KGUucG9zaXRpb24rPWwpLGx9LGFsbG9jYXRlKGUscix0KXtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYocjwwfHx0PD0wKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO2lmKCEoZS5mbGFncyYyMDk3MTU1KSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2lmKCFvLmlzRmlsZShlLm5vZGUubW9kZSkmJiFvLmlzRGlyKGUubm9kZS5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQzKTtpZighZS5zdHJlYW1fb3BzLmFsbG9jYXRlKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMTM4KTtlLnN0cmVhbV9vcHMuYWxsb2NhdGUoZSxyLHQpfSxtbWFwKGUscix0LG4sYSl7aWYobiYyJiYhKGEmMikmJihlLmZsYWdzJjIwOTcxNTUpIT09Mil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDIpO2lmKChlLmZsYWdzJjIwOTcxNTUpPT09MSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDIpO2lmKCFlLnN0cmVhbV9vcHMubW1hcCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQzKTtyZXR1cm4gZS5zdHJlYW1fb3BzLm1tYXAoZSxyLHQsbixhKX0sbXN5bmMoZSxyLHQsbixhKXtyZXR1cm4gZS5zdHJlYW1fb3BzLm1zeW5jP2Uuc3RyZWFtX29wcy5tc3luYyhlLHIsdCxuLGEpOjB9LGlvY3RsKGUscix0KXtpZighZS5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTkpO3JldHVybiBlLnN0cmVhbV9vcHMuaW9jdGwoZSxyLHQpfSxyZWFkRmlsZShlLHI9e30pe2lmKHIuZmxhZ3M9ci5mbGFnc3x8MCxyLmVuY29kaW5nPXIuZW5jb2Rpbmd8fCJiaW5hcnkiLHIuZW5jb2RpbmchPT0idXRmOCImJnIuZW5jb2RpbmchPT0iYmluYXJ5Iil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZW5jb2RpbmcgdHlwZSAiJHtyLmVuY29kaW5nfSJgKTt2YXIgdCxuPW8ub3BlbihlLHIuZmxhZ3MpLGE9by5zdGF0KGUpLGk9YS5zaXplLHM9bmV3IFVpbnQ4QXJyYXkoaSk7cmV0dXJuIG8ucmVhZChuLHMsMCxpLDApLHIuZW5jb2Rpbmc9PT0idXRmOCI/dD1jZShzLDApOnIuZW5jb2Rpbmc9PT0iYmluYXJ5IiYmKHQ9cyksby5jbG9zZShuKSx0fSx3cml0ZUZpbGUoZSxyLHQ9e30pe3QuZmxhZ3M9dC5mbGFnc3x8NTc3O3ZhciBuPW8ub3BlbihlLHQuZmxhZ3MsdC5tb2RlKTtpZih0eXBlb2Ygcj09InN0cmluZyIpe3ZhciBhPW5ldyBVaW50OEFycmF5KFplKHIpKzEpLGk9UWUocixhLDAsYS5sZW5ndGgpO28ud3JpdGUobixhLDAsaSx2b2lkIDAsdC5jYW5Pd24pfWVsc2UgaWYoQXJyYXlCdWZmZXIuaXNWaWV3KHIpKW8ud3JpdGUobixyLDAsci5ieXRlTGVuZ3RoLHZvaWQgMCx0LmNhbk93bik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO28uY2xvc2Uobil9LGN3ZDooKT0+by5jdXJyZW50UGF0aCxjaGRpcihlKXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiEwfSk7aWYoci5ub2RlPT09bnVsbCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZighby5pc0RpcihyLm5vZGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NCk7dmFyIHQ9by5ub2RlUGVybWlzc2lvbnMoci5ub2RlLCJ4Iik7aWYodCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKHQpO28uY3VycmVudFBhdGg9ci5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKXtvLm1rZGlyKCIvdG1wIiksby5ta2RpcigiL2hvbWUiKSxvLm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlcygpe28ubWtkaXIoIi9kZXYiKSxvLnJlZ2lzdGVyRGV2aWNlKG8ubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOihuLGEsaSxzLGwpPT5zfSksby5ta2RldigiL2Rldi9udWxsIixvLm1ha2VkZXYoMSwzKSksbGUucmVnaXN0ZXIoby5tYWtlZGV2KDUsMCksbGUuZGVmYXVsdF90dHlfb3BzKSxsZS5yZWdpc3RlcihvLm1ha2VkZXYoNiwwKSxsZS5kZWZhdWx0X3R0eTFfb3BzKSxvLm1rZGV2KCIvZGV2L3R0eSIsby5tYWtlZGV2KDUsMCkpLG8ubWtkZXYoIi9kZXYvdHR5MSIsby5tYWtlZGV2KDYsMCkpO3ZhciBlPW5ldyBVaW50OEFycmF5KDEwMjQpLHI9MCx0PSgpPT4ocj09PTAmJihyPUZyKGUpLmJ5dGVMZW5ndGgpLGVbLS1yXSk7by5jcmVhdGVEZXZpY2UoIi9kZXYiLCJyYW5kb20iLHQpLG8uY3JlYXRlRGV2aWNlKCIvZGV2IiwidXJhbmRvbSIsdCksby5ta2RpcigiL2Rldi9zaG0iKSxvLm1rZGlyKCIvZGV2L3NobS90bXAiKX0sY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCl7by5ta2RpcigiL3Byb2MiKTt2YXIgZT1vLm1rZGlyKCIvcHJvYy9zZWxmIik7by5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpLG8ubW91bnQoe21vdW50KCl7dmFyIHI9by5jcmVhdGVOb2RlKGUsImZkIiwxNjg5NSw3Myk7cmV0dXJuIHIubm9kZV9vcHM9e2xvb2t1cCh0LG4pe3ZhciBhPStuLGk9by5nZXRTdHJlYW1DaGVja2VkKGEpLHM9e3BhcmVudDpudWxsLG1vdW50Onttb3VudHBvaW50OiJmYWtlIn0sbm9kZV9vcHM6e3JlYWRsaW5rOigpPT5pLnBhdGh9fTtyZXR1cm4gcy5wYXJlbnQ9cyxzfX0scn19LHt9LCIvcHJvYy9zZWxmL2ZkIil9LGNyZWF0ZVN0YW5kYXJkU3RyZWFtcygpe2Yuc3RkaW4/by5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRpbiIsZi5zdGRpbik6by5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxmLnN0ZG91dD9vLmNyZWF0ZURldmljZSgiL2RldiIsInN0ZG91dCIsbnVsbCxmLnN0ZG91dCk6by5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3Rkb3V0IiksZi5zdGRlcnI/by5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsZi5zdGRlcnIpOm8uc3ltbGluaygiL2Rldi90dHkxIiwiL2Rldi9zdGRlcnIiKSxvLm9wZW4oIi9kZXYvc3RkaW4iLDApLG8ub3BlbigiL2Rldi9zdGRvdXQiLDEpLG8ub3BlbigiL2Rldi9zdGRlcnIiLDEpfSxzdGF0aWNJbml0KCl7WzQ0XS5mb3JFYWNoKGU9PntvLmdlbmVyaWNFcnJvcnNbZV09bmV3IG8uRXJybm9FcnJvcihlKSxvLmdlbmVyaWNFcnJvcnNbZV0uc3RhY2s9IjxnZW5lcmljIGVycm9yLCBubyBzdGFjaz4ifSksby5uYW1lVGFibGU9bmV3IEFycmF5KDQwOTYpLG8ubW91bnQoYix7fSwiLyIpLG8uY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzKCksby5jcmVhdGVEZWZhdWx0RGV2aWNlcygpLG8uY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksby5maWxlc3lzdGVtcz17TUVNRlM6YixXT1JLRVJGUzpWfX0saW5pdChlLHIsdCl7by5pbml0LmluaXRpYWxpemVkPSEwLGYuc3RkaW49ZXx8Zi5zdGRpbixmLnN0ZG91dD1yfHxmLnN0ZG91dCxmLnN0ZGVycj10fHxmLnN0ZGVycixvLmNyZWF0ZVN0YW5kYXJkU3RyZWFtcygpfSxxdWl0KCl7by5pbml0LmluaXRpYWxpemVkPSExO2Zvcih2YXIgZT0wO2U8by5zdHJlYW1zLmxlbmd0aDtlKyspe3ZhciByPW8uc3RyZWFtc1tlXTtyJiZvLmNsb3NlKHIpfX0sZmluZE9iamVjdChlLHIpe3ZhciB0PW8uYW5hbHl6ZVBhdGgoZSxyKTtyZXR1cm4gdC5leGlzdHM/dC5vYmplY3Q6bnVsbH0sYW5hbHl6ZVBhdGgoZSxyKXt0cnl7dmFyIHQ9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohcn0pO2U9dC5wYXRofWNhdGNoe312YXIgbj17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVsbCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVsbH07dHJ5e3ZhciB0PW8ubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KTtuLnBhcmVudEV4aXN0cz0hMCxuLnBhcmVudFBhdGg9dC5wYXRoLG4ucGFyZW50T2JqZWN0PXQubm9kZSxuLm5hbWU9Uy5iYXNlbmFtZShlKSx0PW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IXJ9KSxuLmV4aXN0cz0hMCxuLnBhdGg9dC5wYXRoLG4ub2JqZWN0PXQubm9kZSxuLm5hbWU9dC5ub2RlLm5hbWUsbi5pc1Jvb3Q9dC5wYXRoPT09Ii8ifWNhdGNoKGEpe24uZXJyb3I9YS5lcnJub31yZXR1cm4gbn0sY3JlYXRlUGF0aChlLHIsdCxuKXtlPXR5cGVvZiBlPT0ic3RyaW5nIj9lOm8uZ2V0UGF0aChlKTtmb3IodmFyIGE9ci5zcGxpdCgiLyIpLnJldmVyc2UoKTthLmxlbmd0aDspe3ZhciBpPWEucG9wKCk7aWYoaSl7dmFyIHM9Uy5qb2luMihlLGkpO3RyeXtvLm1rZGlyKHMpfWNhdGNoe31lPXN9fXJldHVybiBzfSxjcmVhdGVGaWxlKGUscix0LG4sYSl7dmFyIGk9Uy5qb2luMih0eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSkscikscz1lcihuLGEpO3JldHVybiBvLmNyZWF0ZShpLHMpfSxjcmVhdGVEYXRhRmlsZShlLHIsdCxuLGEsaSl7dmFyIHM9cjtlJiYoZT10eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSkscz1yP1Muam9pbjIoZSxyKTplKTt2YXIgbD1lcihuLGEpLHU9by5jcmVhdGUocyxsKTtpZih0KXtpZih0eXBlb2YgdD09InN0cmluZyIpe2Zvcih2YXIgYz1uZXcgQXJyYXkodC5sZW5ndGgpLGQ9MCxtPXQubGVuZ3RoO2Q8bTsrK2QpY1tkXT10LmNoYXJDb2RlQXQoZCk7dD1jfW8uY2htb2QodSxsfDE0Nik7dmFyIGg9by5vcGVuKHUsNTc3KTtvLndyaXRlKGgsdCwwLHQubGVuZ3RoLDAsaSksby5jbG9zZShoKSxvLmNobW9kKHUsbCl9fSxjcmVhdGVEZXZpY2UoZSxyLHQsbil7dmFyIGE9Uy5qb2luMih0eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSksciksaT1lcighIXQsISFuKTtvLmNyZWF0ZURldmljZS5tYWpvcnx8KG8uY3JlYXRlRGV2aWNlLm1ham9yPTY0KTt2YXIgcz1vLm1ha2VkZXYoby5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gby5yZWdpc3RlckRldmljZShzLHtvcGVuKGwpe2wuc2Vla2FibGU9ITF9LGNsb3NlKGwpe3ZhciB1Oyh1PW49PW51bGw/dm9pZCAwOm4uYnVmZmVyKSE9bnVsbCYmdS5sZW5ndGgmJm4oMTApfSxyZWFkKGwsdSxjLGQsbSl7Zm9yKHZhciBoPTAscD0wO3A8ZDtwKyspe3ZhciB3O3RyeXt3PXQoKX1jYXRjaHt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI5KX1pZih3PT09dm9pZCAwJiZoPT09MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYpO2lmKHc9PW51bGwpYnJlYWs7aCsrLHVbYytwXT13fXJldHVybiBoJiYobC5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxofSx3cml0ZShsLHUsYyxkLG0pe2Zvcih2YXIgaD0wO2g8ZDtoKyspdHJ5e24odVtjK2hdKX1jYXRjaHt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI5KX1yZXR1cm4gZCYmKGwubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksaH19KSxvLm1rZGV2KGEsaSxzKX0sZm9yY2VMb2FkRmlsZShlKXtpZihlLmlzRGV2aWNlfHxlLmlzRm9sZGVyfHxlLmxpbmt8fGUuY29udGVudHMpcmV0dXJuITA7aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil0aHJvdyBuZXcgRXJyb3IoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpO2lmKFllKXRyeXtlLmNvbnRlbnRzPVNlKFllKGUudXJsKSwhMCksZS51c2VkQnl0ZXM9ZS5jb250ZW50cy5sZW5ndGh9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBsb2FkIHdpdGhvdXQgcmVhZCgpIG9yIFhNTEh0dHBSZXF1ZXN0LiIpfSxjcmVhdGVMYXp5RmlsZShlLHIsdCxuLGEpe2NsYXNzIGl7Y29uc3RydWN0b3IoKXt0aGlzLmxlbmd0aEtub3duPSExLHRoaXMuY2h1bmtzPVtdfWdldChwKXtpZighKHA+dGhpcy5sZW5ndGgtMXx8cDwwKSl7dmFyIHc9cCV0aGlzLmNodW5rU2l6ZSxEPXAvdGhpcy5jaHVua1NpemV8MDtyZXR1cm4gdGhpcy5nZXR0ZXIoRClbd119fXNldERhdGFHZXR0ZXIocCl7dGhpcy5nZXR0ZXI9cH1jYWNoZUxlbmd0aCgpe3ZhciBwPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihwLm9wZW4oIkhFQUQiLHQsITEpLHAuc2VuZChudWxsKSwhKHAuc3RhdHVzPj0yMDAmJnAuc3RhdHVzPDMwMHx8cC5zdGF0dXM9PT0zMDQpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK3QrIi4gU3RhdHVzOiAiK3Auc3RhdHVzKTt2YXIgdz1OdW1iZXIocC5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1sZW5ndGgiKSksRCxNPShEPXAuZ2V0UmVzcG9uc2VIZWFkZXIoIkFjY2VwdC1SYW5nZXMiKSkmJkQ9PT0iYnl0ZXMiLEY9KEQ9cC5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1FbmNvZGluZyIpKSYmRD09PSJnemlwIix2PTEwMjQqMTAyNDtNfHwodj13KTt2YXIgXz0oVCxCKT0+e2lmKFQ+Qil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcmFuZ2UgKCIrVCsiLCAiK0IrIikgb3Igbm8gYnl0ZXMgcmVxdWVzdGVkISIpO2lmKEI+dy0xKXRocm93IG5ldyBFcnJvcigib25seSAiK3crIiBieXRlcyBhdmFpbGFibGUhIHByb2dyYW1tZXIgZXJyb3IhIik7dmFyIE89bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKE8ub3BlbigiR0VUIix0LCExKSx3IT09diYmTy5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIrVCsiLSIrQiksTy5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixPLm92ZXJyaWRlTWltZVR5cGUmJk8ub3ZlcnJpZGVNaW1lVHlwZSgidGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCIpLE8uc2VuZChudWxsKSwhKE8uc3RhdHVzPj0yMDAmJk8uc3RhdHVzPDMwMHx8Ty5zdGF0dXM9PT0zMDQpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK3QrIi4gU3RhdHVzOiAiK08uc3RhdHVzKTtyZXR1cm4gTy5yZXNwb25zZSE9PXZvaWQgMD9uZXcgVWludDhBcnJheShPLnJlc3BvbnNlfHxbXSk6U2UoTy5yZXNwb25zZVRleHR8fCIiLCEwKX0sTD10aGlzO0wuc2V0RGF0YUdldHRlcihUPT57dmFyIEI9VCp2LE89KFQrMSkqdi0xO2lmKE89TWF0aC5taW4oTyx3LTEpLHR5cGVvZiBMLmNodW5rc1tUXT4idSImJihMLmNodW5rc1tUXT1fKEIsTykpLHR5cGVvZiBMLmNodW5rc1tUXT4idSIpdGhyb3cgbmV3IEVycm9yKCJkb1hIUiBmYWlsZWQhIik7cmV0dXJuIEwuY2h1bmtzW1RdfSksKEZ8fCF3KSYmKHY9dz0xLHc9dGhpcy5nZXR0ZXIoMCkubGVuZ3RoLHY9dyxxZSgiTGF6eUZpbGVzIG9uIGd6aXAgZm9yY2VzIGRvd25sb2FkIG9mIHRoZSB3aG9sZSBmaWxlIHdoZW4gbGVuZ3RoIGlzIGFjY2Vzc2VkIikpLHRoaXMuX2xlbmd0aD13LHRoaXMuX2NodW5rU2l6ZT12LHRoaXMubGVuZ3RoS25vd249ITB9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fbGVuZ3RofWdldCBjaHVua1NpemUoKXtyZXR1cm4gdGhpcy5sZW5ndGhLbm93bnx8dGhpcy5jYWNoZUxlbmd0aCgpLHRoaXMuX2NodW5rU2l6ZX19aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil2YXIgcz1uZXcgaSxsPXtpc0RldmljZTohMSxjb250ZW50czpzfTtlbHNlIHZhciBsPXtpc0RldmljZTohMSx1cmw6dH07dmFyIHU9by5jcmVhdGVGaWxlKGUscixsLG4sYSk7bC5jb250ZW50cz91LmNvbnRlbnRzPWwuY29udGVudHM6bC51cmwmJih1LmNvbnRlbnRzPW51bGwsdS51cmw9bC51cmwpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHUse3VzZWRCeXRlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudHMubGVuZ3RofX19KTt2YXIgYz17fSxkPU9iamVjdC5rZXlzKHUuc3RyZWFtX29wcyk7ZC5mb3JFYWNoKGg9Pnt2YXIgcD11LnN0cmVhbV9vcHNbaF07Y1toXT0oLi4udyk9PihvLmZvcmNlTG9hZEZpbGUodSkscCguLi53KSl9KTtmdW5jdGlvbiBtKGgscCx3LEQsTSl7dmFyIEY9aC5ub2RlLmNvbnRlbnRzO2lmKE0+PUYubGVuZ3RoKXJldHVybiAwO3ZhciB2PU1hdGgubWluKEYubGVuZ3RoLU0sRCk7aWYoRi5zbGljZSlmb3IodmFyIF89MDtfPHY7XysrKXBbdytfXT1GW00rX107ZWxzZSBmb3IodmFyIF89MDtfPHY7XysrKXBbdytfXT1GLmdldChNK18pO3JldHVybiB2fXJldHVybiBjLnJlYWQ9KGgscCx3LEQsTSk9PihvLmZvcmNlTG9hZEZpbGUodSksbShoLHAsdyxELE0pKSxjLm1tYXA9KGgscCx3LEQsTSk9PntvLmZvcmNlTG9hZEZpbGUodSk7dmFyIEY9VHIoKTtpZighRil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ4KTtyZXR1cm4gbShoLEksRixwLHcpLHtwdHI6RixhbGxvY2F0ZWQ6ITB9fSx1LnN0cmVhbV9vcHM9Yyx1fX0sUD17REVGQVVMVF9QT0xMTUFTSzo1LGNhbGN1bGF0ZUF0KGUscix0KXtpZihTLmlzQWJzKHIpKXJldHVybiByO3ZhciBuO2lmKGU9PT0tMTAwKW49by5jd2QoKTtlbHNle3ZhciBhPVAuZ2V0U3RyZWFtRnJvbUZEKGUpO249YS5wYXRofWlmKHIubGVuZ3RoPT0wKXtpZighdCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtyZXR1cm4gbn1yZXR1cm4gUy5qb2luMihuLHIpfSxkb1N0YXQoZSxyLHQpe3ZhciBuPWUocik7Z1t0Pj4yXT1uLmRldixnW3QrND4+Ml09bi5tb2RlLEFbdCs4Pj4yXT1uLm5saW5rLGdbdCsxMj4+Ml09bi51aWQsZ1t0KzE2Pj4yXT1uLmdpZCxnW3QrMjA+PjJdPW4ucmRldiwkPVtuLnNpemU+Pj4wLCh5PW4uc2l6ZSwrTWF0aC5hYnMoeSk+PTE/eT4wPytNYXRoLmZsb29yKHkvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoeS0rKH5+eT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLGdbdCsyND4+Ml09JFswXSxnW3QrMjg+PjJdPSRbMV0sZ1t0KzMyPj4yXT00MDk2LGdbdCszNj4+Ml09bi5ibG9ja3M7dmFyIGE9bi5hdGltZS5nZXRUaW1lKCksaT1uLm10aW1lLmdldFRpbWUoKSxzPW4uY3RpbWUuZ2V0VGltZSgpO3JldHVybiAkPVtNYXRoLmZsb29yKGEvMWUzKT4+PjAsKHk9TWF0aC5mbG9vcihhLzFlMyksK01hdGguYWJzKHkpPj0xP3k+MD8rTWF0aC5mbG9vcih5LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKHktKyh+fnk+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxnW3QrNDA+PjJdPSRbMF0sZ1t0KzQ0Pj4yXT0kWzFdLEFbdCs0OD4+Ml09YSUxZTMqMWUzLCQ9W01hdGguZmxvb3IoaS8xZTMpPj4+MCwoeT1NYXRoLmZsb29yKGkvMWUzKSwrTWF0aC5hYnMoeSk+PTE/eT4wPytNYXRoLmZsb29yKHkvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoeS0rKH5+eT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLGdbdCs1Nj4+Ml09JFswXSxnW3QrNjA+PjJdPSRbMV0sQVt0KzY0Pj4yXT1pJTFlMyoxZTMsJD1bTWF0aC5mbG9vcihzLzFlMyk+Pj4wLCh5PU1hdGguZmxvb3Iocy8xZTMpLCtNYXRoLmFicyh5KT49MT95PjA/K01hdGguZmxvb3IoeS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCh5LSsofn55Pj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sZ1t0KzcyPj4yXT0kWzBdLGdbdCs3Nj4+Ml09JFsxXSxBW3QrODA+PjJdPXMlMWUzKjFlMywkPVtuLmlubz4+PjAsKHk9bi5pbm8sK01hdGguYWJzKHkpPj0xP3k+MD8rTWF0aC5mbG9vcih5LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKHktKyh+fnk+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxnW3QrODg+PjJdPSRbMF0sZ1t0KzkyPj4yXT0kWzFdLDB9LGRvTXN5bmMoZSxyLHQsbixhKXtpZighby5pc0ZpbGUoci5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDMpO2lmKG4mMilyZXR1cm4gMDt2YXIgaT14LnNsaWNlKGUsZSt0KTtvLm1zeW5jKHIsaSxhLHQsbil9LGdldFN0cmVhbUZyb21GRChlKXt2YXIgcj1vLmdldFN0cmVhbUNoZWNrZWQoZSk7cmV0dXJuIHJ9LHZhcmFyZ3M6dm9pZCAwLGdldFN0cihlKXt2YXIgcj1zZShlKTtyZXR1cm4gcn19O2Z1bmN0aW9uIGp0KGUscix0LG4pe3RyeXtpZihyPVAuZ2V0U3RyKHIpLHI9UC5jYWxjdWxhdGVBdChlLHIpLHQmLTgpcmV0dXJuLTI4O3ZhciBhPW8ubG9va3VwUGF0aChyLHtmb2xsb3c6ITB9KSxpPWEubm9kZTtpZighaSlyZXR1cm4tNDQ7dmFyIHM9IiI7cmV0dXJuIHQmNCYmKHMrPSJyIiksdCYyJiYocys9InciKSx0JjEmJihzKz0ieCIpLHMmJm8ubm9kZVBlcm1pc3Npb25zKGkscyk/LTI6MH1jYXRjaChsKXtpZih0eXBlb2Ygbz4idSJ8fGwubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBsO3JldHVybi1sLmVycm5vfX1mdW5jdGlvbiBNZSgpe3ZhciBlPWdbK1AudmFyYXJncz4+Ml07cmV0dXJuIFAudmFyYXJncys9NCxlfXZhciBkZT1NZTtmdW5jdGlvbiB6dChlLHIsdCl7UC52YXJhcmdzPXQ7dHJ5e3ZhciBuPVAuZ2V0U3RyZWFtRnJvbUZEKGUpO3N3aXRjaChyKXtjYXNlIDA6e3ZhciBhPU1lKCk7aWYoYTwwKXJldHVybi0yODtmb3IoO28uc3RyZWFtc1thXTspYSsrO3ZhciBpO3JldHVybiBpPW8uZHVwU3RyZWFtKG4sYSksaS5mZH1jYXNlIDE6Y2FzZSAyOnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gbi5mbGFncztjYXNlIDQ6e3ZhciBhPU1lKCk7cmV0dXJuIG4uZmxhZ3N8PWEsMH1jYXNlIDEyOnt2YXIgYT1kZSgpLHM9MDtyZXR1cm4gWVthK3M+PjFdPTIsMH1jYXNlIDEzOmNhc2UgMTQ6cmV0dXJuIDB9cmV0dXJuLTI4fWNhdGNoKGwpe2lmKHR5cGVvZiBvPiJ1Inx8bC5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IGw7cmV0dXJuLWwuZXJybm99fWZ1bmN0aW9uIHh0KGUscil7dHJ5e3ZhciB0PVAuZ2V0U3RyZWFtRnJvbUZEKGUpO3JldHVybiBQLmRvU3RhdChvLnN0YXQsdC5wYXRoLHIpfWNhdGNoKG4pe2lmKHR5cGVvZiBvPiJ1Inx8bi5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IG47cmV0dXJuLW4uZXJybm99fXZhciB2ZT0oZSxyLHQpPT5RZShlLHgscix0KTtmdW5jdGlvbiBIdChlLHIsdCl7dHJ5e3ZhciBuPVAuZ2V0U3RyZWFtRnJvbUZEKGUpO24uZ2V0ZGVudHN8fChuLmdldGRlbnRzPW8ucmVhZGRpcihuLnBhdGgpKTtmb3IodmFyIGE9MjgwLGk9MCxzPW8ubGxzZWVrKG4sMCwxKSxsPU1hdGguZmxvb3Iocy9hKTtsPG4uZ2V0ZGVudHMubGVuZ3RoJiZpK2E8PXQ7KXt2YXIgdSxjLGQ9bi5nZXRkZW50c1tsXTtpZihkPT09Ii4iKXU9bi5ub2RlLmlkLGM9NDtlbHNlIGlmKGQ9PT0iLi4iKXt2YXIgbT1vLmxvb2t1cFBhdGgobi5wYXRoLHtwYXJlbnQ6ITB9KTt1PW0ubm9kZS5pZCxjPTR9ZWxzZXt2YXIgaD1vLmxvb2t1cE5vZGUobi5ub2RlLGQpO3U9aC5pZCxjPW8uaXNDaHJkZXYoaC5tb2RlKT8yOm8uaXNEaXIoaC5tb2RlKT80Om8uaXNMaW5rKGgubW9kZSk/MTA6OH0kPVt1Pj4+MCwoeT11LCtNYXRoLmFicyh5KT49MT95PjA/K01hdGguZmxvb3IoeS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCh5LSsofn55Pj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sZ1tyK2k+PjJdPSRbMF0sZ1tyK2krND4+Ml09JFsxXSwkPVsobCsxKSphPj4+MCwoeT0obCsxKSphLCtNYXRoLmFicyh5KT49MT95PjA/K01hdGguZmxvb3IoeS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCh5LSsofn55Pj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sZ1tyK2krOD4+Ml09JFswXSxnW3IraSsxMj4+Ml09JFsxXSxZW3IraSsxNj4+MV09MjgwLElbcitpKzE4XT1jLHZlKGQscitpKzE5LDI1NiksaSs9YSxsKz0xfXJldHVybiBvLmxsc2VlayhuLGwqYSwwKSxpfWNhdGNoKHApe2lmKHR5cGVvZiBvPiJ1Inx8cC5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IHA7cmV0dXJuLXAuZXJybm99fWZ1bmN0aW9uIFd0KGUscix0KXtQLnZhcmFyZ3M9dDt0cnl7dmFyIG49UC5nZXRTdHJlYW1Gcm9tRkQoZSk7c3dpdGNoKHIpe2Nhc2UgMjE1MDk6cmV0dXJuIG4udHR5PzA6LTU5O2Nhc2UgMjE1MDU6e2lmKCFuLnR0eSlyZXR1cm4tNTk7aWYobi50dHkub3BzLmlvY3RsX3RjZ2V0cyl7dmFyIGE9bi50dHkub3BzLmlvY3RsX3RjZ2V0cyhuKSxpPWRlKCk7Z1tpPj4yXT1hLmNfaWZsYWd8fDAsZ1tpKzQ+PjJdPWEuY19vZmxhZ3x8MCxnW2krOD4+Ml09YS5jX2NmbGFnfHwwLGdbaSsxMj4+Ml09YS5jX2xmbGFnfHwwO2Zvcih2YXIgcz0wO3M8MzI7cysrKUlbaStzKzE3XT1hLmNfY2Nbc118fDA7cmV0dXJuIDB9cmV0dXJuIDB9Y2FzZSAyMTUxMDpjYXNlIDIxNTExOmNhc2UgMjE1MTI6cmV0dXJuIG4udHR5PzA6LTU5O2Nhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNlIDIxNTA4OntpZighbi50dHkpcmV0dXJuLTU5O2lmKG4udHR5Lm9wcy5pb2N0bF90Y3NldHMpe2Zvcih2YXIgaT1kZSgpLGw9Z1tpPj4yXSx1PWdbaSs0Pj4yXSxjPWdbaSs4Pj4yXSxkPWdbaSsxMj4+Ml0sbT1bXSxzPTA7czwzMjtzKyspbS5wdXNoKElbaStzKzE3XSk7cmV0dXJuIG4udHR5Lm9wcy5pb2N0bF90Y3NldHMobi50dHkscix7Y19pZmxhZzpsLGNfb2ZsYWc6dSxjX2NmbGFnOmMsY19sZmxhZzpkLGNfY2M6bX0pfXJldHVybiAwfWNhc2UgMjE1MTk6e2lmKCFuLnR0eSlyZXR1cm4tNTk7dmFyIGk9ZGUoKTtyZXR1cm4gZ1tpPj4yXT0wLDB9Y2FzZSAyMTUyMDpyZXR1cm4gbi50dHk/LTI4Oi01OTtjYXNlIDIxNTMxOnt2YXIgaT1kZSgpO3JldHVybiBvLmlvY3RsKG4scixpKX1jYXNlIDIxNTIzOntpZighbi50dHkpcmV0dXJuLTU5O2lmKG4udHR5Lm9wcy5pb2N0bF90aW9jZ3dpbnN6KXt2YXIgaD1uLnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeihuLnR0eSksaT1kZSgpO1lbaT4+MV09aFswXSxZW2krMj4+MV09aFsxXX1yZXR1cm4gMH1jYXNlIDIxNTI0OnJldHVybiBuLnR0eT8wOi01OTtjYXNlIDIxNTE1OnJldHVybiBuLnR0eT8wOi01OTtkZWZhdWx0OnJldHVybi0yOH19Y2F0Y2gocCl7aWYodHlwZW9mIG8+InUifHxwLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcDtyZXR1cm4tcC5lcnJub319ZnVuY3Rpb24gQnQoZSxyKXt0cnl7cmV0dXJuIGU9UC5nZXRTdHIoZSksUC5kb1N0YXQoby5sc3RhdCxlLHIpfWNhdGNoKHQpe2lmKHR5cGVvZiBvPiJ1Inx8dC5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IHQ7cmV0dXJuLXQuZXJybm99fWZ1bmN0aW9uIE50KGUscix0LG4pe3RyeXtyPVAuZ2V0U3RyKHIpO3ZhciBhPW4mMjU2LGk9biY0MDk2O3JldHVybiBuPW4mLTY0MDEscj1QLmNhbGN1bGF0ZUF0KGUscixpKSxQLmRvU3RhdChhP28ubHN0YXQ6by5zdGF0LHIsdCl9Y2F0Y2gocyl7aWYodHlwZW9mIG8+InUifHxzLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcztyZXR1cm4tcy5lcnJub319ZnVuY3Rpb24gWXQoZSxyLHQsbil7UC52YXJhcmdzPW47dHJ5e3I9UC5nZXRTdHIocikscj1QLmNhbGN1bGF0ZUF0KGUscik7dmFyIGE9bj9NZSgpOjA7cmV0dXJuIG8ub3BlbihyLHQsYSkuZmR9Y2F0Y2goaSl7aWYodHlwZW9mIG8+InUifHxpLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgaTtyZXR1cm4taS5lcnJub319ZnVuY3Rpb24gR3QoZSxyLHQsbil7dHJ5e3JldHVybiByPVAuZ2V0U3RyKHIpLG49UC5nZXRTdHIobikscj1QLmNhbGN1bGF0ZUF0KGUsciksbj1QLmNhbGN1bGF0ZUF0KHQsbiksby5yZW5hbWUocixuKSwwfWNhdGNoKGEpe2lmKHR5cGVvZiBvPiJ1Inx8YS5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IGE7cmV0dXJuLWEuZXJybm99fWZ1bmN0aW9uIHF0KGUpe3RyeXtyZXR1cm4gZT1QLmdldFN0cihlKSxvLnJtZGlyKGUpLDB9Y2F0Y2gocil7aWYodHlwZW9mIG8+InUifHxyLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcjtyZXR1cm4tci5lcnJub319ZnVuY3Rpb24gWHQoZSxyKXt0cnl7cmV0dXJuIGU9UC5nZXRTdHIoZSksUC5kb1N0YXQoby5zdGF0LGUscil9Y2F0Y2godCl7aWYodHlwZW9mIG8+InUifHx0Lm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgdDtyZXR1cm4tdC5lcnJub319ZnVuY3Rpb24gS3QoZSxyLHQpe3RyeXtyZXR1cm4gcj1QLmdldFN0cihyKSxyPVAuY2FsY3VsYXRlQXQoZSxyKSx0PT09MD9vLnVubGluayhyKTp0PT09NTEyP28ucm1kaXIocik6aWUoIkludmFsaWQgZmxhZ3MgcGFzc2VkIHRvIHVubGlua2F0IiksMH1jYXRjaChuKXtpZih0eXBlb2Ygbz4idSJ8fG4ubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBuO3JldHVybi1uLmVycm5vfX12YXIgSnQ9KCk9PntpZSgiIil9LFJlPXt9LHJyPWU9Pntmb3IoO2UubGVuZ3RoOyl7dmFyIHI9ZS5wb3AoKSx0PWUucG9wKCk7dChyKX19O2Z1bmN0aW9uIHllKGUpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShBW2U+PjJdKX12YXIgaGU9e30sdWU9e30sT2U9e30sU3IsSWU9ZT0+e3Rocm93IG5ldyBTcihlKX0sTj0oZSxyLHQpPT57ZS5mb3JFYWNoKGZ1bmN0aW9uKGwpe09lW2xdPXJ9KTtmdW5jdGlvbiBuKGwpe3ZhciB1PXQobCk7dS5sZW5ndGghPT1lLmxlbmd0aCYmSWUoIk1pc21hdGNoZWQgdHlwZSBjb252ZXJ0ZXIgY291bnQiKTtmb3IodmFyIGM9MDtjPGUubGVuZ3RoOysrYylLKGVbY10sdVtjXSl9dmFyIGE9bmV3IEFycmF5KHIubGVuZ3RoKSxpPVtdLHM9MDtyLmZvckVhY2goKGwsdSk9Pnt1ZS5oYXNPd25Qcm9wZXJ0eShsKT9hW3VdPXVlW2xdOihpLnB1c2gobCksaGUuaGFzT3duUHJvcGVydHkobCl8fChoZVtsXT1bXSksaGVbbF0ucHVzaCgoKT0+e2FbdV09dWVbbF0sKytzLHM9PT1pLmxlbmd0aCYmbihhKX0pKX0pLGkubGVuZ3RoPT09MCYmbihhKX0sWnQ9ZT0+e3ZhciByPVJlW2VdO2RlbGV0ZSBSZVtlXTt2YXIgdD1yLnJhd0NvbnN0cnVjdG9yLG49ci5yYXdEZXN0cnVjdG9yLGE9ci5maWVsZHMsaT1hLm1hcChzPT5zLmdldHRlclJldHVyblR5cGUpLmNvbmNhdChhLm1hcChzPT5zLnNldHRlckFyZ3VtZW50VHlwZSkpO04oW2VdLGkscz0+e3ZhciBsPXt9O3JldHVybiBhLmZvckVhY2goKHUsYyk9Pnt2YXIgZD11LmZpZWxkTmFtZSxtPXNbY10saD11LmdldHRlcixwPXUuZ2V0dGVyQ29udGV4dCx3PXNbYythLmxlbmd0aF0sRD11LnNldHRlcixNPXUuc2V0dGVyQ29udGV4dDtsW2RdPXtyZWFkOkY9Pm0uZnJvbVdpcmVUeXBlKGgocCxGKSksd3JpdGU6KEYsdik9Pnt2YXIgXz1bXTtEKE0sRix3LnRvV2lyZVR5cGUoXyx2KSkscnIoXyl9fX0pLFt7bmFtZTpyLm5hbWUsZnJvbVdpcmVUeXBlOnU9Pnt2YXIgYz17fTtmb3IodmFyIGQgaW4gbCljW2RdPWxbZF0ucmVhZCh1KTtyZXR1cm4gbih1KSxjfSx0b1dpcmVUeXBlOih1LGMpPT57Zm9yKHZhciBkIGluIGwpaWYoIShkIGluIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoYE1pc3NpbmcgZmllbGQ6ICIke2R9ImApO3ZhciBtPXQoKTtmb3IoZCBpbiBsKWxbZF0ud3JpdGUobSxjW2RdKTtyZXR1cm4gdSE9PW51bGwmJnUucHVzaChuLG0pLG19LGFyZ1BhY2tBZHZhbmNlOkoscmVhZFZhbHVlRnJvbVBvaW50ZXI6eWUsZGVzdHJ1Y3RvckZ1bmN0aW9uOm59XX0pfSxRdD0oZSxyLHQsbixhKT0+e30sZW49KCk9Pntmb3IodmFyIGU9bmV3IEFycmF5KDI1Nikscj0wO3I8MjU2OysrcillW3JdPVN0cmluZy5mcm9tQ2hhckNvZGUocik7TXI9ZX0sTXIsaj1lPT57Zm9yKHZhciByPSIiLHQ9ZTt4W3RdOylyKz1Nclt4W3QrK11dO3JldHVybiByfSxtZSxrPWU9Pnt0aHJvdyBuZXcgbWUoZSl9O2Z1bmN0aW9uIHJuKGUscix0PXt9KXt2YXIgbj1yLm5hbWU7aWYoZXx8ayhgdHlwZSAiJHtufSIgbXVzdCBoYXZlIGEgcG9zaXRpdmUgaW50ZWdlciB0eXBlaWQgcG9pbnRlcmApLHVlLmhhc093blByb3BlcnR5KGUpKXtpZih0Lmlnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnMpcmV0dXJuO2soYENhbm5vdCByZWdpc3RlciB0eXBlICcke259JyB0d2ljZWApfWlmKHVlW2VdPXIsZGVsZXRlIE9lW2VdLGhlLmhhc093blByb3BlcnR5KGUpKXt2YXIgYT1oZVtlXTtkZWxldGUgaGVbZV0sYS5mb3JFYWNoKGk9PmkoKSl9fWZ1bmN0aW9uIEsoZSxyLHQ9e30pe2lmKCEoImFyZ1BhY2tBZHZhbmNlImluIHIpKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZ2lzdGVyVHlwZSByZWdpc3RlcmVkSW5zdGFuY2UgcmVxdWlyZXMgYXJnUGFja0FkdmFuY2UiKTtyZXR1cm4gcm4oZSxyLHQpfXZhciBKPTgsdG49KGUscix0LG4pPT57cj1qKHIpLEsoZSx7bmFtZTpyLGZyb21XaXJlVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4hIWF9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oYSxpKXtyZXR1cm4gaT90Om59LGFyZ1BhY2tBZHZhbmNlOkoscmVhZFZhbHVlRnJvbVBvaW50ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHhbYV0pfSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSxubj1lPT4oe2NvdW50OmUuY291bnQsZGVsZXRlU2NoZWR1bGVkOmUuZGVsZXRlU2NoZWR1bGVkLHByZXNlcnZlUG9pbnRlck9uRGVsZXRlOmUucHJlc2VydmVQb2ludGVyT25EZWxldGUscHRyOmUucHRyLHB0clR5cGU6ZS5wdHJUeXBlLHNtYXJ0UHRyOmUuc21hcnRQdHIsc21hcnRQdHJUeXBlOmUuc21hcnRQdHJUeXBlfSksdHI9ZT0+e2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MubmFtZX1rKHIoZSkrIiBpbnN0YW5jZSBhbHJlYWR5IGRlbGV0ZWQiKX0sbnI9ITEsUnI9ZT0+e30sYW49ZT0+e2Uuc21hcnRQdHI/ZS5zbWFydFB0clR5cGUucmF3RGVzdHJ1Y3RvcihlLnNtYXJ0UHRyKTplLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLnJhd0Rlc3RydWN0b3IoZS5wdHIpfSxPcj1lPT57ZS5jb3VudC52YWx1ZS09MTt2YXIgcj1lLmNvdW50LnZhbHVlPT09MDtyJiZhbihlKX0sSXI9KGUscix0KT0+e2lmKHI9PT10KXJldHVybiBlO2lmKHQuYmFzZUNsYXNzPT09dm9pZCAwKXJldHVybiBudWxsO3ZhciBuPUlyKGUscix0LmJhc2VDbGFzcyk7cmV0dXJuIG49PT1udWxsP251bGw6dC5kb3duY2FzdChuKX0sTHI9e30sb249KCk9Pk9iamVjdC5rZXlzKGJlKS5sZW5ndGgsc249KCk9Pnt2YXIgZT1bXTtmb3IodmFyIHIgaW4gYmUpYmUuaGFzT3duUHJvcGVydHkocikmJmUucHVzaChiZVtyXSk7cmV0dXJuIGV9LHdlPVtdLGFyPSgpPT57Zm9yKDt3ZS5sZW5ndGg7KXt2YXIgZT13ZS5wb3AoKTtlLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxlLmRlbGV0ZSgpfX0sRWUsbG49ZT0+e0VlPWUsd2UubGVuZ3RoJiZFZSYmRWUoYXIpfSx1bj0oKT0+e2YuZ2V0SW5oZXJpdGVkSW5zdGFuY2VDb3VudD1vbixmLmdldExpdmVJbmhlcml0ZWRJbnN0YW5jZXM9c24sZi5mbHVzaFBlbmRpbmdEZWxldGVzPWFyLGYuc2V0RGVsYXlGdW5jdGlvbj1sbn0sYmU9e30sZm49KGUscik9Pntmb3Iocj09PXZvaWQgMCYmaygicHRyIHNob3VsZCBub3QgYmUgdW5kZWZpbmVkIik7ZS5iYXNlQ2xhc3M7KXI9ZS51cGNhc3QociksZT1lLmJhc2VDbGFzcztyZXR1cm4gcn0sY249KGUscik9PihyPWZuKGUsciksYmVbcl0pLExlPShlLHIpPT57KCFyLnB0clR5cGV8fCFyLnB0cikmJkllKCJtYWtlQ2xhc3NIYW5kbGUgcmVxdWlyZXMgcHRyIGFuZCBwdHJUeXBlIik7dmFyIHQ9ISFyLnNtYXJ0UHRyVHlwZSxuPSEhci5zbWFydFB0cjtyZXR1cm4gdCE9PW4mJkllKCJCb3RoIHNtYXJ0UHRyVHlwZSBhbmQgc21hcnRQdHIgbXVzdCBiZSBzcGVjaWZpZWQiKSxyLmNvdW50PXt2YWx1ZToxfSxrZShPYmplY3QuY3JlYXRlKGUseyQkOnt2YWx1ZTpyLHdyaXRhYmxlOiEwfX0pKX07ZnVuY3Rpb24gZG4oZSl7dmFyIHI9dGhpcy5nZXRQb2ludGVlKGUpO2lmKCFyKXJldHVybiB0aGlzLmRlc3RydWN0b3IoZSksbnVsbDt2YXIgdD1jbih0aGlzLnJlZ2lzdGVyZWRDbGFzcyxyKTtpZih0IT09dm9pZCAwKXtpZih0LiQkLmNvdW50LnZhbHVlPT09MClyZXR1cm4gdC4kJC5wdHI9cix0LiQkLnNtYXJ0UHRyPWUsdC5jbG9uZSgpO3ZhciBuPXQuY2xvbmUoKTtyZXR1cm4gdGhpcy5kZXN0cnVjdG9yKGUpLG59ZnVuY3Rpb24gYSgpe3JldHVybiB0aGlzLmlzU21hcnRQb2ludGVyP0xlKHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMucG9pbnRlZVR5cGUscHRyOnIsc21hcnRQdHJUeXBlOnRoaXMsc21hcnRQdHI6ZX0pOkxlKHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMscHRyOmV9KX12YXIgaT10aGlzLnJlZ2lzdGVyZWRDbGFzcy5nZXRBY3R1YWxUeXBlKHIpLHM9THJbaV07aWYoIXMpcmV0dXJuIGEuY2FsbCh0aGlzKTt2YXIgbDt0aGlzLmlzQ29uc3Q/bD1zLmNvbnN0UG9pbnRlclR5cGU6bD1zLnBvaW50ZXJUeXBlO3ZhciB1PUlyKHIsdGhpcy5yZWdpc3RlcmVkQ2xhc3MsbC5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiB1PT09bnVsbD9hLmNhbGwodGhpcyk6dGhpcy5pc1NtYXJ0UG9pbnRlcj9MZShsLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTpsLHB0cjp1LHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOmV9KTpMZShsLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTpsLHB0cjp1fSl9dmFyIGtlPWU9PnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/KGtlPXI9PnIsZSk6KG5yPW5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShyPT57T3Ioci4kJCl9KSxrZT1yPT57dmFyIHQ9ci4kJCxuPSEhdC5zbWFydFB0cjtpZihuKXt2YXIgYT17JCQ6dH07bnIucmVnaXN0ZXIocixhLHIpfXJldHVybiByfSxScj1yPT5uci51bnJlZ2lzdGVyKHIpLGtlKGUpKSx2bj0oKT0+e09iamVjdC5hc3NpZ24oVmUucHJvdG90eXBlLHtpc0FsaWFzT2YoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgVmUpfHwhKGUgaW5zdGFuY2VvZiBWZSkpcmV0dXJuITE7dmFyIHI9dGhpcy4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyx0PXRoaXMuJCQucHRyO2UuJCQ9ZS4kJDtmb3IodmFyIG49ZS4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxhPWUuJCQucHRyO3IuYmFzZUNsYXNzOyl0PXIudXBjYXN0KHQpLHI9ci5iYXNlQ2xhc3M7Zm9yKDtuLmJhc2VDbGFzczspYT1uLnVwY2FzdChhKSxuPW4uYmFzZUNsYXNzO3JldHVybiByPT09biYmdD09PWF9LGNsb25lKCl7aWYodGhpcy4kJC5wdHJ8fHRyKHRoaXMpLHRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUpcmV0dXJuIHRoaXMuJCQuY291bnQudmFsdWUrPTEsdGhpczt2YXIgZT1rZShPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSx7JCQ6e3ZhbHVlOm5uKHRoaXMuJCQpfX0pKTtyZXR1cm4gZS4kJC5jb3VudC52YWx1ZSs9MSxlLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxlfSxkZWxldGUoKXt0aGlzLiQkLnB0cnx8dHIodGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZrKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIiksUnIodGhpcyksT3IodGhpcy4kJCksdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZXx8KHRoaXMuJCQuc21hcnRQdHI9dm9pZCAwLHRoaXMuJCQucHRyPXZvaWQgMCl9LGlzRGVsZXRlZCgpe3JldHVybiF0aGlzLiQkLnB0cn0sZGVsZXRlTGF0ZXIoKXtyZXR1cm4gdGhpcy4kJC5wdHJ8fHRyKHRoaXMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkJiYhdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSYmaygiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvbiIpLHdlLnB1c2godGhpcyksd2UubGVuZ3RoPT09MSYmRWUmJkVlKGFyKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMCx0aGlzfX0pfTtmdW5jdGlvbiBWZSgpe312YXIgVWU9KGUscik9Pk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJuYW1lIix7dmFsdWU6ZX0pLG9yPShlLHIsdCk9PntpZihlW3JdLm92ZXJsb2FkVGFibGU9PT12b2lkIDApe3ZhciBuPWVbcl07ZVtyXT1mdW5jdGlvbiguLi5hKXtyZXR1cm4gZVtyXS5vdmVybG9hZFRhYmxlLmhhc093blByb3BlcnR5KGEubGVuZ3RoKXx8ayhgRnVuY3Rpb24gJyR7dH0nIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyAoJHthLmxlbmd0aH0pIC0gZXhwZWN0cyBvbmUgb2YgKCR7ZVtyXS5vdmVybG9hZFRhYmxlfSkhYCksZVtyXS5vdmVybG9hZFRhYmxlW2EubGVuZ3RoXS5hcHBseSh0aGlzLGEpfSxlW3JdLm92ZXJsb2FkVGFibGU9W10sZVtyXS5vdmVybG9hZFRhYmxlW24uYXJnQ291bnRdPW59fSxWcj0oZSxyLHQpPT57Zi5oYXNPd25Qcm9wZXJ0eShlKT8oKHQ9PT12b2lkIDB8fGZbZV0ub3ZlcmxvYWRUYWJsZSE9PXZvaWQgMCYmZltlXS5vdmVybG9hZFRhYmxlW3RdIT09dm9pZCAwKSYmayhgQ2Fubm90IHJlZ2lzdGVyIHB1YmxpYyBuYW1lICcke2V9JyB0d2ljZWApLG9yKGYsZSxlKSxmLmhhc093blByb3BlcnR5KHQpJiZrKGBDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgb3ZlcmxvYWRzIG9mIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgYXJndW1lbnRzICgke3R9KSFgKSxmW2VdLm92ZXJsb2FkVGFibGVbdF09cik6KGZbZV09cix0IT09dm9pZCAwJiYoZltlXS5udW1Bcmd1bWVudHM9dCkpfSxobj00OCxtbj01Nyxwbj1lPT57aWYoZT09PXZvaWQgMClyZXR1cm4iX3Vua25vd24iO2U9ZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csIiQiKTt2YXIgcj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHI+PWhuJiZyPD1tbj9gXyR7ZX1gOmV9O2Z1bmN0aW9uIF9uKGUscix0LG4sYSxpLHMsbCl7dGhpcy5uYW1lPWUsdGhpcy5jb25zdHJ1Y3Rvcj1yLHRoaXMuaW5zdGFuY2VQcm90b3R5cGU9dCx0aGlzLnJhd0Rlc3RydWN0b3I9bix0aGlzLmJhc2VDbGFzcz1hLHRoaXMuZ2V0QWN0dWFsVHlwZT1pLHRoaXMudXBjYXN0PXMsdGhpcy5kb3duY2FzdD1sLHRoaXMucHVyZVZpcnR1YWxGdW5jdGlvbnM9W119dmFyIGplPShlLHIsdCk9Pntmb3IoO3IhPT10OylyLnVwY2FzdHx8ayhgRXhwZWN0ZWQgbnVsbCBvciBpbnN0YW5jZSBvZiAke3QubmFtZX0sIGdvdCBhbiBpbnN0YW5jZSBvZiAke3IubmFtZX1gKSxlPXIudXBjYXN0KGUpLHI9ci5iYXNlQ2xhc3M7cmV0dXJuIGV9O2Z1bmN0aW9uIGduKGUscil7aWYocj09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJmsoYG51bGwgaXMgbm90IGEgdmFsaWQgJHt0aGlzLm5hbWV9YCksMDtyLiQkfHxrKGBDYW5ub3QgcGFzcyAiJHtscihyKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCksci4kJC5wdHJ8fGsoYENhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICR7dGhpcy5uYW1lfWApO3ZhciB0PXIuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3Msbj1qZShyLiQkLnB0cix0LHRoaXMucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4gbn1mdW5jdGlvbiB5bihlLHIpe3ZhciB0O2lmKHI9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZrKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApLHRoaXMuaXNTbWFydFBvaW50ZXI/KHQ9dGhpcy5yYXdDb25zdHJ1Y3RvcigpLGUhPT1udWxsJiZlLnB1c2godGhpcy5yYXdEZXN0cnVjdG9yLHQpLHQpOjA7KCFyfHwhci4kJCkmJmsoYENhbm5vdCBwYXNzICIke2xyKHIpfSIgYXMgYSAke3RoaXMubmFtZX1gKSxyLiQkLnB0cnx8ayhgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCksIXRoaXMuaXNDb25zdCYmci4kJC5wdHJUeXBlLmlzQ29uc3QmJmsoYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtyLiQkLnNtYXJ0UHRyVHlwZT9yLiQkLnNtYXJ0UHRyVHlwZS5uYW1lOnIuJCQucHRyVHlwZS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gKTt2YXIgbj1yLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzO2lmKHQ9amUoci4kJC5wdHIsbix0aGlzLnJlZ2lzdGVyZWRDbGFzcyksdGhpcy5pc1NtYXJ0UG9pbnRlcilzd2l0Y2goci4kJC5zbWFydFB0cj09PXZvaWQgMCYmaygiUGFzc2luZyByYXcgcG9pbnRlciB0byBzbWFydCBwb2ludGVyIGlzIGlsbGVnYWwiKSx0aGlzLnNoYXJpbmdQb2xpY3kpe2Nhc2UgMDpyLiQkLnNtYXJ0UHRyVHlwZT09PXRoaXM/dD1yLiQkLnNtYXJ0UHRyOmsoYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtyLiQkLnNtYXJ0UHRyVHlwZT9yLiQkLnNtYXJ0UHRyVHlwZS5uYW1lOnIuJCQucHRyVHlwZS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gKTticmVhaztjYXNlIDE6dD1yLiQkLnNtYXJ0UHRyO2JyZWFrO2Nhc2UgMjppZihyLiQkLnNtYXJ0UHRyVHlwZT09PXRoaXMpdD1yLiQkLnNtYXJ0UHRyO2Vsc2V7dmFyIGE9ci5jbG9uZSgpO3Q9dGhpcy5yYXdTaGFyZSh0LHRlLnRvSGFuZGxlKCgpPT5hLmRlbGV0ZSgpKSksZSE9PW51bGwmJmUucHVzaCh0aGlzLnJhd0Rlc3RydWN0b3IsdCl9YnJlYWs7ZGVmYXVsdDprKCJVbnN1cHBvcnRpbmcgc2hhcmluZyBwb2xpY3kiKX1yZXR1cm4gdH1mdW5jdGlvbiB3bihlLHIpe2lmKHI9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZrKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApLDA7ci4kJHx8ayhgQ2Fubm90IHBhc3MgIiR7bHIocil9IiBhcyBhICR7dGhpcy5uYW1lfWApLHIuJCQucHRyfHxrKGBDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAke3RoaXMubmFtZX1gKSxyLiQkLnB0clR5cGUuaXNDb25zdCYmayhgQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAke3IuJCQucHRyVHlwZS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gKTt2YXIgdD1yLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLG49amUoci4kJC5wdHIsdCx0aGlzLnJlZ2lzdGVyZWRDbGFzcyk7cmV0dXJuIG59dmFyIEVuPSgpPT57T2JqZWN0LmFzc2lnbih6ZS5wcm90b3R5cGUse2dldFBvaW50ZWUoZSl7cmV0dXJuIHRoaXMucmF3R2V0UG9pbnRlZSYmKGU9dGhpcy5yYXdHZXRQb2ludGVlKGUpKSxlfSxkZXN0cnVjdG9yKGUpe3ZhciByOyhyPXRoaXMucmF3RGVzdHJ1Y3Rvcik9PW51bGx8fHIuY2FsbCh0aGlzLGUpfSxhcmdQYWNrQWR2YW5jZTpKLHJlYWRWYWx1ZUZyb21Qb2ludGVyOnllLGZyb21XaXJlVHlwZTpkbn0pfTtmdW5jdGlvbiB6ZShlLHIsdCxuLGEsaSxzLGwsdSxjLGQpe3RoaXMubmFtZT1lLHRoaXMucmVnaXN0ZXJlZENsYXNzPXIsdGhpcy5pc1JlZmVyZW5jZT10LHRoaXMuaXNDb25zdD1uLHRoaXMuaXNTbWFydFBvaW50ZXI9YSx0aGlzLnBvaW50ZWVUeXBlPWksdGhpcy5zaGFyaW5nUG9saWN5PXMsdGhpcy5yYXdHZXRQb2ludGVlPWwsdGhpcy5yYXdDb25zdHJ1Y3Rvcj11LHRoaXMucmF3U2hhcmU9Yyx0aGlzLnJhd0Rlc3RydWN0b3I9ZCwhYSYmci5iYXNlQ2xhc3M9PT12b2lkIDA/bj8odGhpcy50b1dpcmVUeXBlPWduLHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uPW51bGwpOih0aGlzLnRvV2lyZVR5cGU9d24sdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCk6dGhpcy50b1dpcmVUeXBlPXlufXZhciBVcj0oZSxyLHQpPT57Zi5oYXNPd25Qcm9wZXJ0eShlKXx8SWUoIlJlcGxhY2luZyBub25leGlzdGVudCBwdWJsaWMgc3ltYm9sIiksZltlXS5vdmVybG9hZFRhYmxlIT09dm9pZCAwJiZ0IT09dm9pZCAwP2ZbZV0ub3ZlcmxvYWRUYWJsZVt0XT1yOihmW2VdPXIsZltlXS5hcmdDb3VudD10KX0sYm49KGUscix0KT0+e2U9ZS5yZXBsYWNlKC9wL2csImkiKTt2YXIgbj1mWyJkeW5DYWxsXyIrZV07cmV0dXJuIG4ociwuLi50KX0seGU9W10sanIsenI9ZT0+e3ZhciByPXhlW2VdO3JldHVybiByfHwoZT49eGUubGVuZ3RoJiYoeGUubGVuZ3RoPWUrMSkseGVbZV09cj1qci5nZXQoZSkpLHJ9LGtuPShlLHIsdD1bXSk9PntpZihlLmluY2x1ZGVzKCJqIikpcmV0dXJuIGJuKGUscix0KTt2YXIgbj16cihyKSguLi50KTtyZXR1cm4gbn0sUG49KGUscik9PiguLi50KT0+a24oZSxyLHQpLFc9KGUscik9PntlPWooZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmluY2x1ZGVzKCJqIik/UG4oZSxyKTp6cihyKX12YXIgbj10KCk7cmV0dXJuIHR5cGVvZiBuIT0iZnVuY3Rpb24iJiZrKGB1bmtub3duIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aCBzaWduYXR1cmUgJHtlfTogJHtyfWApLG59LEFuPShlLHIpPT57dmFyIHQ9VWUocixmdW5jdGlvbihuKXt0aGlzLm5hbWU9cix0aGlzLm1lc3NhZ2U9bjt2YXIgYT1uZXcgRXJyb3Iobikuc3RhY2s7YSE9PXZvaWQgMCYmKHRoaXMuc3RhY2s9dGhpcy50b1N0cmluZygpK2AKYCthLnJlcGxhY2UoL15FcnJvcig6W15cbl0qKT9cbi8sIiIpKX0pO3JldHVybiB0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZT09PXZvaWQgMD90aGlzLm5hbWU6YCR7dGhpcy5uYW1lfTogJHt0aGlzLm1lc3NhZ2V9YH0sdH0seHIsSHI9ZT0+e3ZhciByPWV0KGUpLHQ9aihyKTtyZXR1cm4gWihyKSx0fSxmZT0oZSxyKT0+e3ZhciB0PVtdLG49e307ZnVuY3Rpb24gYShpKXtpZighbltpXSYmIXVlW2ldKXtpZihPZVtpXSl7T2VbaV0uZm9yRWFjaChhKTtyZXR1cm59dC5wdXNoKGkpLG5baV09ITB9fXRocm93IHIuZm9yRWFjaChhKSxuZXcgeHIoYCR7ZX06IGArdC5tYXAoSHIpLmpvaW4oWyIsICJdKSl9LERuPShlLHIsdCxuLGEsaSxzLGwsdSxjLGQsbSxoKT0+e2Q9aihkKSxpPVcoYSxpKSxsJiYobD1XKHMsbCkpLGMmJihjPVcodSxjKSksaD1XKG0saCk7dmFyIHA9cG4oZCk7VnIocCxmdW5jdGlvbigpe2ZlKGBDYW5ub3QgY29uc3RydWN0ICR7ZH0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLFtuXSl9KSxOKFtlLHIsdF0sbj9bbl06W10sdz0+e3ZhciBPO3c9d1swXTt2YXIgRCxNO24/KEQ9dy5yZWdpc3RlcmVkQ2xhc3MsTT1ELmluc3RhbmNlUHJvdG90eXBlKTpNPVZlLnByb3RvdHlwZTt2YXIgRj1VZShkLGZ1bmN0aW9uKC4uLnZyKXtpZihPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykhPT12KXRocm93IG5ldyBtZSgiVXNlICduZXcnIHRvIGNvbnN0cnVjdCAiK2QpO2lmKF8uY29uc3RydWN0b3JfYm9keT09PXZvaWQgMCl0aHJvdyBuZXcgbWUoZCsiIGhhcyBubyBhY2Nlc3NpYmxlIGNvbnN0cnVjdG9yIik7dmFyIG90PV8uY29uc3RydWN0b3JfYm9keVt2ci5sZW5ndGhdO2lmKG90PT09dm9pZCAwKXRocm93IG5ldyBtZShgVHJpZWQgdG8gaW52b2tlIGN0b3Igb2YgJHtkfSB3aXRoIGludmFsaWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKCR7dnIubGVuZ3RofSkgLSBleHBlY3RlZCAoJHtPYmplY3Qua2V5cyhfLmNvbnN0cnVjdG9yX2JvZHkpLnRvU3RyaW5nKCl9KSBwYXJhbWV0ZXJzIGluc3RlYWQhYCk7cmV0dXJuIG90LmFwcGx5KHRoaXMsdnIpfSksdj1PYmplY3QuY3JlYXRlKE0se2NvbnN0cnVjdG9yOnt2YWx1ZTpGfX0pO0YucHJvdG90eXBlPXY7dmFyIF89bmV3IF9uKGQsRix2LGgsRCxpLGwsYyk7Xy5iYXNlQ2xhc3MmJigoTz1fLmJhc2VDbGFzcykuX19kZXJpdmVkQ2xhc3Nlcz8/KE8uX19kZXJpdmVkQ2xhc3Nlcz1bXSksXy5iYXNlQ2xhc3MuX19kZXJpdmVkQ2xhc3Nlcy5wdXNoKF8pKTt2YXIgTD1uZXcgemUoZCxfLCEwLCExLCExKSxUPW5ldyB6ZShkKyIqIixfLCExLCExLCExKSxCPW5ldyB6ZShkKyIgY29uc3QqIixfLCExLCEwLCExKTtyZXR1cm4gTHJbZV09e3BvaW50ZXJUeXBlOlQsY29uc3RQb2ludGVyVHlwZTpCfSxVcihwLEYpLFtMLFQsQl19KX07ZnVuY3Rpb24gV3IoZSl7Zm9yKHZhciByPTE7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXSE9PW51bGwmJmVbcl0uZGVzdHJ1Y3RvckZ1bmN0aW9uPT09dm9pZCAwKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uICRuKGUscil7aWYoIShlIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IG5ldyBUeXBlRXJyb3IoYG5ld18gY2FsbGVkIHdpdGggY29uc3RydWN0b3IgdHlwZSAke3R5cGVvZiBlfSB3aGljaCBpcyBub3QgYSBmdW5jdGlvbmApO3ZhciB0PVVlKGUubmFtZXx8InVua25vd25GdW5jdGlvbk5hbWUiLGZ1bmN0aW9uKCl7fSk7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU7dmFyIG49bmV3IHQsYT1lLmFwcGx5KG4scik7cmV0dXJuIGEgaW5zdGFuY2VvZiBPYmplY3Q/YTpufWZ1bmN0aW9uIENuKGUscix0LG4pe2Zvcih2YXIgYT1XcihlKSxpPWUubGVuZ3RoLHM9IiIsbD0iIix1PTA7dTxpLTI7Kyt1KXMrPSh1IT09MD8iLCAiOiIiKSsiYXJnIit1LGwrPSh1IT09MD8iLCAiOiIiKSsiYXJnIit1KyJXaXJlZCI7dmFyIGM9YAogICAgICAgIHJldHVybiBmdW5jdGlvbiAoJHtzfSkgewogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAke2ktMn0pIHsKICAgICAgICAgIHRocm93QmluZGluZ0Vycm9yKCdmdW5jdGlvbiAnICsgaHVtYW5OYW1lICsgJyBjYWxsZWQgd2l0aCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLCBleHBlY3RlZCAke2ktMn0nKTsKICAgICAgICB9YDthJiYoYys9YHZhciBkZXN0cnVjdG9ycyA9IFtdOwpgKTt2YXIgZD1hPyJkZXN0cnVjdG9ycyI6Im51bGwiLG09WyJodW1hbk5hbWUiLCJ0aHJvd0JpbmRpbmdFcnJvciIsImludm9rZXIiLCJmbiIsInJ1bkRlc3RydWN0b3JzIiwicmV0VHlwZSIsImNsYXNzUGFyYW0iXTtyJiYoYys9InZhciB0aGlzV2lyZWQgPSBjbGFzc1BhcmFtWyd0b1dpcmVUeXBlJ10oIitkK2AsIHRoaXMpOwpgKTtmb3IodmFyIHU9MDt1PGktMjsrK3UpYys9InZhciBhcmciK3UrIldpcmVkID0gYXJnVHlwZSIrdSsiWyd0b1dpcmVUeXBlJ10oIitkKyIsIGFyZyIrdStgKTsKYCxtLnB1c2goImFyZ1R5cGUiK3UpO2lmKHImJihsPSJ0aGlzV2lyZWQiKyhsLmxlbmd0aD4wPyIsICI6IiIpK2wpLGMrPSh0fHxuPyJ2YXIgcnYgPSAiOiIiKSsiaW52b2tlcihmbiIrKGwubGVuZ3RoPjA/IiwgIjoiIikrbCtgKTsKYCxhKWMrPWBydW5EZXN0cnVjdG9ycyhkZXN0cnVjdG9ycyk7CmA7ZWxzZSBmb3IodmFyIHU9cj8xOjI7dTxlLmxlbmd0aDsrK3Upe3ZhciBoPXU9PT0xPyJ0aGlzV2lyZWQiOiJhcmciKyh1LTIpKyJXaXJlZCI7ZVt1XS5kZXN0cnVjdG9yRnVuY3Rpb24hPT1udWxsJiYoYys9YCR7aH1fZHRvcigke2h9KTsKYCxtLnB1c2goYCR7aH1fZHRvcmApKX1yZXR1cm4gdCYmKGMrPWB2YXIgcmV0ID0gcmV0VHlwZVsnZnJvbVdpcmVUeXBlJ10ocnYpOwpyZXR1cm4gcmV0OwpgKSxjKz1gfQpgLFttLGNdfWZ1bmN0aW9uIEhlKGUscix0LG4sYSxpKXt2YXIgcz1yLmxlbmd0aDtzPDImJmsoImFyZ1R5cGVzIGFycmF5IHNpemUgbWlzbWF0Y2ghIE11c3QgYXQgbGVhc3QgZ2V0IHJldHVybiB2YWx1ZSBhbmQgJ3RoaXMnIHR5cGVzISIpO2Zvcih2YXIgbD1yWzFdIT09bnVsbCYmdCE9PW51bGwsdT1XcihyKSxjPXJbMF0ubmFtZSE9PSJ2b2lkIixkPVtlLGssbixhLHJyLHJbMF0sclsxXV0sbT0wO208cy0yOysrbSlkLnB1c2goclttKzJdKTtpZighdSlmb3IodmFyIG09bD8xOjI7bTxyLmxlbmd0aDsrK20pclttXS5kZXN0cnVjdG9yRnVuY3Rpb24hPT1udWxsJiZkLnB1c2goclttXS5kZXN0cnVjdG9yRnVuY3Rpb24pO2xldFtoLHBdPUNuKHIsbCxjLGkpO2gucHVzaChwKTt2YXIgdz0kbihGdW5jdGlvbixoKSguLi5kKTtyZXR1cm4gVWUoZSx3KX12YXIgV2U9KGUscik9Pntmb3IodmFyIHQ9W10sbj0wO248ZTtuKyspdC5wdXNoKEFbcituKjQ+PjJdKTtyZXR1cm4gdH0saXI9ZT0+e2U9ZS50cmltKCk7Y29uc3Qgcj1lLmluZGV4T2YoIigiKTtyZXR1cm4gciE9PS0xP2Uuc3Vic3RyKDAscik6ZX0sRm49KGUscix0LG4sYSxpLHMsbCk9Pnt2YXIgdT1XZSh0LG4pO3I9aihyKSxyPWlyKHIpLGk9VyhhLGkpLE4oW10sW2VdLGM9PntjPWNbMF07dmFyIGQ9YCR7Yy5uYW1lfS4ke3J9YDtmdW5jdGlvbiBtKCl7ZmUoYENhbm5vdCBjYWxsICR7ZH0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLHUpfXIuc3RhcnRzV2l0aCgiQEAiKSYmKHI9U3ltYm9sW3Iuc3Vic3RyaW5nKDIpXSk7dmFyIGg9Yy5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3I7cmV0dXJuIGhbcl09PT12b2lkIDA/KG0uYXJnQ291bnQ9dC0xLGhbcl09bSk6KG9yKGgscixkKSxoW3JdLm92ZXJsb2FkVGFibGVbdC0xXT1tKSxOKFtdLHUscD0+e3ZhciB3PVtwWzBdLG51bGxdLmNvbmNhdChwLnNsaWNlKDEpKSxEPUhlKGQsdyxudWxsLGkscyxsKTtpZihoW3JdLm92ZXJsb2FkVGFibGU9PT12b2lkIDA/KEQuYXJnQ291bnQ9dC0xLGhbcl09RCk6aFtyXS5vdmVybG9hZFRhYmxlW3QtMV09RCxjLnJlZ2lzdGVyZWRDbGFzcy5fX2Rlcml2ZWRDbGFzc2VzKWZvcihjb25zdCBNIG9mIGMucmVnaXN0ZXJlZENsYXNzLl9fZGVyaXZlZENsYXNzZXMpTS5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eShyKXx8KE0uY29uc3RydWN0b3Jbcl09RCk7cmV0dXJuW119KSxbXX0pfSxUbj0oZSxyLHQsbixhLGkpPT57dmFyIHM9V2Uocix0KTthPVcobixhKSxOKFtdLFtlXSxsPT57bD1sWzBdO3ZhciB1PWBjb25zdHJ1Y3RvciAke2wubmFtZX1gO2lmKGwucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHk9PT12b2lkIDAmJihsLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5PVtdKSxsLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5W3ItMV0hPT12b2lkIDApdGhyb3cgbmV3IG1lKGBDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgY29uc3RydWN0b3JzIHdpdGggaWRlbnRpY2FsIG51bWJlciBvZiBwYXJhbWV0ZXJzICgke3ItMX0pIGZvciBjbGFzcyAnJHtsLm5hbWV9JyEgT3ZlcmxvYWQgcmVzb2x1dGlvbiBpcyBjdXJyZW50bHkgb25seSBwZXJmb3JtZWQgdXNpbmcgdGhlIHBhcmFtZXRlciBjb3VudCwgbm90IGFjdHVhbCB0eXBlIGluZm8hYCk7cmV0dXJuIGwucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbci0xXT0oKT0+e2ZlKGBDYW5ub3QgY29uc3RydWN0ICR7bC5uYW1lfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2Ascyl9LE4oW10scyxjPT4oYy5zcGxpY2UoMSwwLG51bGwpLGwucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbci0xXT1IZSh1LGMsbnVsbCxhLGkpLFtdKSksW119KX0sU249KGUscix0LG4sYSxpLHMsbCx1KT0+e3ZhciBjPVdlKHQsbik7cj1qKHIpLHI9aXIociksaT1XKGEsaSksTihbXSxbZV0sZD0+e2Q9ZFswXTt2YXIgbT1gJHtkLm5hbWV9LiR7cn1gO3Iuc3RhcnRzV2l0aCgiQEAiKSYmKHI9U3ltYm9sW3Iuc3Vic3RyaW5nKDIpXSksbCYmZC5yZWdpc3RlcmVkQ2xhc3MucHVyZVZpcnR1YWxGdW5jdGlvbnMucHVzaChyKTtmdW5jdGlvbiBoKCl7ZmUoYENhbm5vdCBjYWxsICR7bX0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLGMpfXZhciBwPWQucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHc9cFtyXTtyZXR1cm4gdz09PXZvaWQgMHx8dy5vdmVybG9hZFRhYmxlPT09dm9pZCAwJiZ3LmNsYXNzTmFtZSE9PWQubmFtZSYmdy5hcmdDb3VudD09PXQtMj8oaC5hcmdDb3VudD10LTIsaC5jbGFzc05hbWU9ZC5uYW1lLHBbcl09aCk6KG9yKHAscixtKSxwW3JdLm92ZXJsb2FkVGFibGVbdC0yXT1oKSxOKFtdLGMsRD0+e3ZhciBNPUhlKG0sRCxkLGkscyx1KTtyZXR1cm4gcFtyXS5vdmVybG9hZFRhYmxlPT09dm9pZCAwPyhNLmFyZ0NvdW50PXQtMixwW3JdPU0pOnBbcl0ub3ZlcmxvYWRUYWJsZVt0LTJdPU0sW119KSxbXX0pfSxCcj0oZSxyLHQpPT4oZSBpbnN0YW5jZW9mIE9iamVjdHx8ayhgJHt0fSB3aXRoIGludmFsaWQgInRoaXMiOiAke2V9YCksZSBpbnN0YW5jZW9mIHIucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yfHxrKGAke3R9IGluY29tcGF0aWJsZSB3aXRoICJ0aGlzIiBvZiB0eXBlICR7ZS5jb25zdHJ1Y3Rvci5uYW1lfWApLGUuJCQucHRyfHxrKGBjYW5ub3QgY2FsbCBlbXNjcmlwdGVuIGJpbmRpbmcgbWV0aG9kICR7dH0gb24gZGVsZXRlZCBvYmplY3RgKSxqZShlLiQkLnB0cixlLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLHIucmVnaXN0ZXJlZENsYXNzKSksTW49KGUscix0LG4sYSxpLHMsbCx1LGMpPT57cj1qKHIpLGE9VyhuLGEpLE4oW10sW2VdLGQ9PntkPWRbMF07dmFyIG09YCR7ZC5uYW1lfS4ke3J9YCxoPXtnZXQoKXtmZShgQ2Fubm90IGFjY2VzcyAke219IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCxbdCxzXSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTtyZXR1cm4gdT9oLnNldD0oKT0+ZmUoYENhbm5vdCBhY2Nlc3MgJHttfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsW3Qsc10pOmguc2V0PXA9PmsobSsiIGlzIGEgcmVhZC1vbmx5IHByb3BlcnR5IiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHIsaCksTihbXSx1P1t0LHNdOlt0XSxwPT57dmFyIHc9cFswXSxEPXtnZXQoKXt2YXIgRj1Ccih0aGlzLGQsbSsiIGdldHRlciIpO3JldHVybiB3LmZyb21XaXJlVHlwZShhKGksRikpfSxlbnVtZXJhYmxlOiEwfTtpZih1KXt1PVcobCx1KTt2YXIgTT1wWzFdO0Quc2V0PWZ1bmN0aW9uKEYpe3ZhciB2PUJyKHRoaXMsZCxtKyIgc2V0dGVyIiksXz1bXTt1KGMsdixNLnRvV2lyZVR5cGUoXyxGKSkscnIoXyl9fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUscixEKSxbXX0pLFtdfSl9LHNyPVtdLHJlPVtdLE5yPWU9PntlPjkmJi0tcmVbZSsxXT09PTAmJihyZVtlXT12b2lkIDAsc3IucHVzaChlKSl9LFJuPSgpPT5yZS5sZW5ndGgvMi01LXNyLmxlbmd0aCxPbj0oKT0+e3JlLnB1c2goMCwxLHZvaWQgMCwxLG51bGwsMSwhMCwxLCExLDEpLGYuY291bnRfZW12YWxfaGFuZGxlcz1Sbn0sdGU9e3RvVmFsdWU6ZT0+KGV8fGsoIkNhbm5vdCB1c2UgZGVsZXRlZCB2YWwuIGhhbmRsZSA9ICIrZSkscmVbZV0pLHRvSGFuZGxlOmU9Pntzd2l0Y2goZSl7Y2FzZSB2b2lkIDA6cmV0dXJuIDI7Y2FzZSBudWxsOnJldHVybiA0O2Nhc2UhMDpyZXR1cm4gNjtjYXNlITE6cmV0dXJuIDg7ZGVmYXVsdDp7Y29uc3Qgcj1zci5wb3AoKXx8cmUubGVuZ3RoO3JldHVybiByZVtyXT1lLHJlW3IrMV09MSxyfX19fSxJbj17bmFtZToiZW1zY3JpcHRlbjo6dmFsIixmcm9tV2lyZVR5cGU6ZT0+e3ZhciByPXRlLnRvVmFsdWUoZSk7cmV0dXJuIE5yKGUpLHJ9LHRvV2lyZVR5cGU6KGUscik9PnRlLnRvSGFuZGxlKHIpLGFyZ1BhY2tBZHZhbmNlOkoscmVhZFZhbHVlRnJvbVBvaW50ZXI6eWUsZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9LFlyPWU9PksoZSxJbiksbHI9ZT0+e2lmKGU9PT1udWxsKXJldHVybiJudWxsIjt2YXIgcj10eXBlb2YgZTtyZXR1cm4gcj09PSJvYmplY3QifHxyPT09ImFycmF5Inx8cj09PSJmdW5jdGlvbiI/ZS50b1N0cmluZygpOiIiK2V9LExuPShlLHIpPT57c3dpdGNoKHIpe2Nhc2UgNDpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKGdyW3Q+PjJdKX07Y2FzZSA4OnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoeXJbdD4+M10pfTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgZmxvYXQgd2lkdGggKCR7cn0pOiAke2V9YCl9fSxWbj0oZSxyLHQpPT57cj1qKHIpLEsoZSx7bmFtZTpyLGZyb21XaXJlVHlwZTpuPT5uLHRvV2lyZVR5cGU6KG4sYSk9PmEsYXJnUGFja0FkdmFuY2U6SixyZWFkVmFsdWVGcm9tUG9pbnRlcjpMbihyLHQpLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9LFVuPShlLHIsdCxuLGEsaSxzKT0+e3ZhciBsPVdlKHIsdCk7ZT1qKGUpLGU9aXIoZSksYT1XKG4sYSksVnIoZSxmdW5jdGlvbigpe2ZlKGBDYW5ub3QgY2FsbCAke2V9IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCxsKX0sci0xKSxOKFtdLGwsdT0+e3ZhciBjPVt1WzBdLG51bGxdLmNvbmNhdCh1LnNsaWNlKDEpKTtyZXR1cm4gVXIoZSxIZShlLGMsbnVsbCxhLGkscyksci0xKSxbXX0pfSxqbj0oZSxyLHQpPT57c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gdD9uPT5JW25dOm49Pnhbbl07Y2FzZSAyOnJldHVybiB0P249Pllbbj4+MV06bj0+Q2Vbbj4+MV07Y2FzZSA0OnJldHVybiB0P249Pmdbbj4+Ml06bj0+QVtuPj4yXTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZWdlciB3aWR0aCAoJHtyfSk6ICR7ZX1gKX19LHpuPShlLHIsdCxuLGEpPT57cj1qKHIpO3ZhciBpPWQ9PmQ7aWYobj09PTApe3ZhciBzPTMyLTgqdDtpPWQ9PmQ8PHM+Pj5zfXZhciBsPXIuaW5jbHVkZXMoInVuc2lnbmVkIiksdT0oZCxtKT0+e30sYztsP2M9ZnVuY3Rpb24oZCxtKXtyZXR1cm4gdShtLHRoaXMubmFtZSksbT4+PjB9OmM9ZnVuY3Rpb24oZCxtKXtyZXR1cm4gdShtLHRoaXMubmFtZSksbX0sSyhlLHtuYW1lOnIsZnJvbVdpcmVUeXBlOmksdG9XaXJlVHlwZTpjLGFyZ1BhY2tBZHZhbmNlOkoscmVhZFZhbHVlRnJvbVBvaW50ZXI6am4ocix0LG4hPT0wKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSx4bj0oZSxyLHQpPT57dmFyIG49W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5XSxhPW5bcl07ZnVuY3Rpb24gaShzKXt2YXIgbD1BW3M+PjJdLHU9QVtzKzQ+PjJdO3JldHVybiBuZXcgYShJLmJ1ZmZlcix1LGwpfXQ9aih0KSxLKGUse25hbWU6dCxmcm9tV2lyZVR5cGU6aSxhcmdQYWNrQWR2YW5jZTpKLHJlYWRWYWx1ZUZyb21Qb2ludGVyOml9LHtpZ25vcmVEdXBsaWNhdGVSZWdpc3RyYXRpb25zOiEwfSl9LEhuPShlLHIpPT57WXIoZSl9LFduPShlLHIpPT57cj1qKHIpO3ZhciB0PXI9PT0ic3RkOjpzdHJpbmciO0soZSx7bmFtZTpyLGZyb21XaXJlVHlwZShuKXt2YXIgYT1BW24+PjJdLGk9bis0LHM7aWYodClmb3IodmFyIGw9aSx1PTA7dTw9YTsrK3Upe3ZhciBjPWkrdTtpZih1PT1hfHx4W2NdPT0wKXt2YXIgZD1jLWwsbT1zZShsLGQpO3M9PT12b2lkIDA/cz1tOihzKz0iXDAiLHMrPW0pLGw9YysxfX1lbHNle2Zvcih2YXIgaD1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3UpaFt1XT1TdHJpbmcuZnJvbUNoYXJDb2RlKHhbaSt1XSk7cz1oLmpvaW4oIiIpfXJldHVybiBaKG4pLHN9LHRvV2lyZVR5cGUobixhKXthIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJihhPW5ldyBVaW50OEFycmF5KGEpKTt2YXIgaSxzPXR5cGVvZiBhPT0ic3RyaW5nIjtzfHxhIGluc3RhbmNlb2YgVWludDhBcnJheXx8YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHxhIGluc3RhbmNlb2YgSW50OEFycmF5fHxrKCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIHN0ZDo6c3RyaW5nIiksdCYmcz9pPVplKGEpOmk9YS5sZW5ndGg7dmFyIGw9ZnIoNCtpKzEpLHU9bCs0O2lmKEFbbD4+Ml09aSx0JiZzKXZlKGEsdSxpKzEpO2Vsc2UgaWYocylmb3IodmFyIGM9MDtjPGk7KytjKXt2YXIgZD1hLmNoYXJDb2RlQXQoYyk7ZD4yNTUmJihaKHUpLGsoIlN0cmluZyBoYXMgVVRGLTE2IGNvZGUgdW5pdHMgdGhhdCBkbyBub3QgZml0IGluIDggYml0cyIpKSx4W3UrY109ZH1lbHNlIGZvcih2YXIgYz0wO2M8aTsrK2MpeFt1K2NdPWFbY107cmV0dXJuIG4hPT1udWxsJiZuLnB1c2goWixsKSxsfSxhcmdQYWNrQWR2YW5jZTpKLHJlYWRWYWx1ZUZyb21Qb2ludGVyOnllLGRlc3RydWN0b3JGdW5jdGlvbihuKXtaKG4pfX0pfSxHcj10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTE2bGUiKTp2b2lkIDAsQm49KGUscik9Pntmb3IodmFyIHQ9ZSxuPXQ+PjEsYT1uK3IvMjshKG4+PWEpJiZDZVtuXTspKytuO2lmKHQ9bjw8MSx0LWU+MzImJkdyKXJldHVybiBHci5kZWNvZGUoeC5zdWJhcnJheShlLHQpKTtmb3IodmFyIGk9IiIscz0wOyEocz49ci8yKTsrK3Mpe3ZhciBsPVlbZStzKjI+PjFdO2lmKGw9PTApYnJlYWs7aSs9U3RyaW5nLmZyb21DaGFyQ29kZShsKX1yZXR1cm4gaX0sTm49KGUscix0KT0+e2lmKHQ/Pyh0PTIxNDc0ODM2NDcpLHQ8MilyZXR1cm4gMDt0LT0yO2Zvcih2YXIgbj1yLGE9dDxlLmxlbmd0aCoyP3QvMjplLmxlbmd0aCxpPTA7aTxhOysraSl7dmFyIHM9ZS5jaGFyQ29kZUF0KGkpO1lbcj4+MV09cyxyKz0yfXJldHVybiBZW3I+PjFdPTAsci1ufSxZbj1lPT5lLmxlbmd0aCoyLEduPShlLHIpPT57Zm9yKHZhciB0PTAsbj0iIjshKHQ+PXIvNCk7KXt2YXIgYT1nW2UrdCo0Pj4yXTtpZihhPT0wKWJyZWFrO2lmKCsrdCxhPj02NTUzNil7dmFyIGk9YS02NTUzNjtuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGk+PjEwLDU2MzIwfGkmMTAyMyl9ZWxzZSBuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpfXJldHVybiBufSxxbj0oZSxyLHQpPT57aWYodD8/KHQ9MjE0NzQ4MzY0NyksdDw0KXJldHVybiAwO2Zvcih2YXIgbj1yLGE9bit0LTQsaT0wO2k8ZS5sZW5ndGg7KytpKXt2YXIgcz1lLmNoYXJDb2RlQXQoaSk7aWYocz49NTUyOTYmJnM8PTU3MzQzKXt2YXIgbD1lLmNoYXJDb2RlQXQoKytpKTtzPTY1NTM2KygocyYxMDIzKTw8MTApfGwmMTAyM31pZihnW3I+PjJdPXMscis9NCxyKzQ+YSlicmVha31yZXR1cm4gZ1tyPj4yXT0wLHItbn0sWG49ZT0+e2Zvcih2YXIgcj0wLHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZS5jaGFyQ29kZUF0KHQpO24+PTU1Mjk2JiZuPD01NzM0MyYmKyt0LHIrPTR9cmV0dXJuIHJ9LEtuPShlLHIsdCk9Pnt0PWoodCk7dmFyIG4sYSxpLHM7cj09PTI/KG49Qm4sYT1ObixzPVluLGk9bD0+Q2VbbD4+MV0pOnI9PT00JiYobj1HbixhPXFuLHM9WG4saT1sPT5BW2w+PjJdKSxLKGUse25hbWU6dCxmcm9tV2lyZVR5cGU6bD0+e2Zvcih2YXIgdT1BW2w+PjJdLGMsZD1sKzQsbT0wO208PXU7KyttKXt2YXIgaD1sKzQrbSpyO2lmKG09PXV8fGkoaCk9PTApe3ZhciBwPWgtZCx3PW4oZCxwKTtjPT09dm9pZCAwP2M9dzooYys9IlwwIixjKz13KSxkPWgrcn19cmV0dXJuIFoobCksY30sdG9XaXJlVHlwZToobCx1KT0+e3R5cGVvZiB1IT0ic3RyaW5nIiYmayhgQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBDKysgc3RyaW5nIHR5cGUgJHt0fWApO3ZhciBjPXModSksZD1mcig0K2Mrcik7cmV0dXJuIEFbZD4+Ml09Yy9yLGEodSxkKzQsYytyKSxsIT09bnVsbCYmbC5wdXNoKFosZCksZH0sYXJnUGFja0FkdmFuY2U6SixyZWFkVmFsdWVGcm9tUG9pbnRlcjp5ZSxkZXN0cnVjdG9yRnVuY3Rpb24obCl7WihsKX19KX0sSm49KGUscix0LG4sYSxpKT0+e1JlW2VdPXtuYW1lOmoocikscmF3Q29uc3RydWN0b3I6Vyh0LG4pLHJhd0Rlc3RydWN0b3I6VyhhLGkpLGZpZWxkczpbXX19LFpuPShlLHIsdCxuLGEsaSxzLGwsdSxjKT0+e1JlW2VdLmZpZWxkcy5wdXNoKHtmaWVsZE5hbWU6aihyKSxnZXR0ZXJSZXR1cm5UeXBlOnQsZ2V0dGVyOlcobixhKSxnZXR0ZXJDb250ZXh0Omksc2V0dGVyQXJndW1lbnRUeXBlOnMsc2V0dGVyOlcobCx1KSxzZXR0ZXJDb250ZXh0OmN9KX0sUW49KGUscik9PntyPWoociksSyhlLHtpc1ZvaWQ6ITAsbmFtZTpyLGFyZ1BhY2tBZHZhbmNlOjAsZnJvbVdpcmVUeXBlOigpPT57fSx0b1dpcmVUeXBlOih0LG4pPT57fX0pfSxlYT0xLHJhPSgpPT5lYSx0YT0oZSxyLHQpPT54LmNvcHlXaXRoaW4oZSxyLHIrdCksbmE9KCk9PnRlLnRvSGFuZGxlKHt9KSxhYT0oZSxyLHQpPT57ZT10ZS50b1ZhbHVlKGUpLHI9dGUudG9WYWx1ZShyKSx0PXRlLnRvVmFsdWUodCksZVtyXT10fSxvYT0oZSxyKT0+e3ZhciB0PXVlW2VdO3JldHVybiB0PT09dm9pZCAwJiZrKGAke3J9IGhhcyB1bmtub3duIHR5cGUgJHtIcihlKX1gKSx0fSxpYT0oZSxyKT0+e2U9b2EoZSwiX2VtdmFsX3Rha2VfdmFsdWUiKTt2YXIgdD1lLnJlYWRWYWx1ZUZyb21Qb2ludGVyKHIpO3JldHVybiB0ZS50b0hhbmRsZSh0KX0scXI9KGUscik9PnIrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIWU/KGU+Pj4wKStyKjQyOTQ5NjcyOTY6TmFOO2Z1bmN0aW9uIHNhKGUscix0KXt2YXIgbj1xcihlLHIpLGE9bmV3IERhdGUobioxZTMpO2dbdD4+Ml09YS5nZXRVVENTZWNvbmRzKCksZ1t0KzQ+PjJdPWEuZ2V0VVRDTWludXRlcygpLGdbdCs4Pj4yXT1hLmdldFVUQ0hvdXJzKCksZ1t0KzEyPj4yXT1hLmdldFVUQ0RhdGUoKSxnW3QrMTY+PjJdPWEuZ2V0VVRDTW9udGgoKSxnW3QrMjA+PjJdPWEuZ2V0VVRDRnVsbFllYXIoKS0xOTAwLGdbdCsyND4+Ml09YS5nZXRVVENEYXkoKTt2YXIgaT1EYXRlLlVUQyhhLmdldFVUQ0Z1bGxZZWFyKCksMCwxLDAsMCwwLDApLHM9KGEuZ2V0VGltZSgpLWkpLygxZTMqNjAqNjAqMjQpfDA7Z1t0KzI4Pj4yXT1zfXZhciBCZT1lPT5lJTQ9PT0wJiYoZSUxMDAhPT0wfHxlJTQwMD09PTApLGxhPShlLHIsdCxuKT0+e3ZhciBhPW5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSxpPW5ldyBEYXRlKGEsMCwxKSxzPW5ldyBEYXRlKGEsNiwxKSxsPWkuZ2V0VGltZXpvbmVPZmZzZXQoKSx1PXMuZ2V0VGltZXpvbmVPZmZzZXQoKSxjPU1hdGgubWF4KGwsdSk7QVtlPj4yXT1jKjYwLGdbcj4+Ml09KyhsIT11KTt2YXIgZD1wPT5wLnRvTG9jYWxlVGltZVN0cmluZyh2b2lkIDAse2hvdXIxMjohMSx0aW1lWm9uZU5hbWU6InNob3J0In0pLnNwbGl0KCIgIilbMV0sbT1kKGkpLGg9ZChzKTt1PGw/KHZlKG0sdCwxNyksdmUoaCxuLDE3KSk6KHZlKG0sbiwxNyksdmUoaCx0LDE3KSl9LHVhPSgpPT5EYXRlLm5vdygpLFhyPSgpPT4yMTQ3NDgzNjQ4LGZhPSgpPT5YcigpLEtyO0tyPSgpPT5wZXJmb3JtYW5jZS5ub3coKTt2YXIgY2E9ZT0+e3ZhciByPSRlLmJ1ZmZlcix0PShlLXIuYnl0ZUxlbmd0aCs2NTUzNSkvNjU1MzY7dHJ5e3JldHVybiAkZS5ncm93KHQpLHdyKCksMX1jYXRjaHt9fSxkYT1lPT57dmFyIHI9eC5sZW5ndGg7ZT4+Pj0wO3ZhciB0PVhyKCk7aWYoZT50KXJldHVybiExO2Zvcih2YXIgbj0odSxjKT0+dSsoYy11JWMpJWMsYT0xO2E8PTQ7YSo9Mil7dmFyIGk9ciooMSsuMi9hKTtpPU1hdGgubWluKGksZSsxMDA2NjMyOTYpO3ZhciBzPU1hdGgubWluKHQsbihNYXRoLm1heChlLGkpLDY1NTM2KSksbD1jYShzKTtpZihsKXJldHVybiEwfXJldHVybiExfSx1cj17fSx2YT0oKT0+aHJ8fCIuL3RoaXMucHJvZ3JhbSIsUGU9KCk9PntpZighUGUuc3RyaW5ncyl7dmFyIGU9KHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIscj17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOmUsXzp2YSgpfTtmb3IodmFyIHQgaW4gdXIpdXJbdF09PT12b2lkIDA/ZGVsZXRlIHJbdF06clt0XT11clt0XTt2YXIgbj1bXTtmb3IodmFyIHQgaW4gciluLnB1c2goYCR7dH09JHtyW3RdfWApO1BlLnN0cmluZ3M9bn1yZXR1cm4gUGUuc3RyaW5nc30saGE9KGUscik9Pntmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdClJW3IrK109ZS5jaGFyQ29kZUF0KHQpO0lbcl09MH0sbWE9KGUscik9Pnt2YXIgdD0wO3JldHVybiBQZSgpLmZvckVhY2goKG4sYSk9Pnt2YXIgaT1yK3Q7QVtlK2EqND4+Ml09aSxoYShuLGkpLHQrPW4ubGVuZ3RoKzF9KSwwfSxwYT0oZSxyKT0+e3ZhciB0PVBlKCk7QVtlPj4yXT10Lmxlbmd0aDt2YXIgbj0wO3JldHVybiB0LmZvckVhY2goYT0+bis9YS5sZW5ndGgrMSksQVtyPj4yXT1uLDB9O2Z1bmN0aW9uIF9hKGUpe3RyeXt2YXIgcj1QLmdldFN0cmVhbUZyb21GRChlKTtyZXR1cm4gby5jbG9zZShyKSwwfWNhdGNoKHQpe2lmKHR5cGVvZiBvPiJ1Inx8dC5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IHQ7cmV0dXJuIHQuZXJybm99fWZ1bmN0aW9uIGdhKGUscil7dHJ5e3ZhciB0PTAsbj0wLGE9MCxpPVAuZ2V0U3RyZWFtRnJvbUZEKGUpLHM9aS50dHk/MjpvLmlzRGlyKGkubW9kZSk/MzpvLmlzTGluayhpLm1vZGUpPzc6NDtyZXR1cm4gSVtyXT1zLFlbcisyPj4xXT1hLCQ9W3Q+Pj4wLCh5PXQsK01hdGguYWJzKHkpPj0xP3k+MD8rTWF0aC5mbG9vcih5LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKHktKyh+fnk+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxnW3IrOD4+Ml09JFswXSxnW3IrMTI+PjJdPSRbMV0sJD1bbj4+PjAsKHk9biwrTWF0aC5hYnMoeSk+PTE/eT4wPytNYXRoLmZsb29yKHkvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoeS0rKH5+eT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLGdbcisxNj4+Ml09JFswXSxnW3IrMjA+PjJdPSRbMV0sMH1jYXRjaChsKXtpZih0eXBlb2Ygbz4idSJ8fGwubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBsO3JldHVybiBsLmVycm5vfX12YXIgeWE9KGUscix0LG4pPT57Zm9yKHZhciBhPTAsaT0wO2k8dDtpKyspe3ZhciBzPUFbcj4+Ml0sbD1BW3IrND4+Ml07cis9ODt2YXIgdT1vLnJlYWQoZSxJLHMsbCxuKTtpZih1PDApcmV0dXJuLTE7aWYoYSs9dSx1PGwpYnJlYWt9cmV0dXJuIGF9O2Z1bmN0aW9uIHdhKGUscix0LG4pe3RyeXt2YXIgYT1QLmdldFN0cmVhbUZyb21GRChlKSxpPXlhKGEscix0KTtyZXR1cm4gQVtuPj4yXT1pLDB9Y2F0Y2gocyl7aWYodHlwZW9mIG8+InUifHxzLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcztyZXR1cm4gcy5lcnJub319ZnVuY3Rpb24gRWEoZSxyLHQsbixhKXt2YXIgaT1xcihyLHQpO3RyeXtpZihpc05hTihpKSlyZXR1cm4gNjE7dmFyIHM9UC5nZXRTdHJlYW1Gcm9tRkQoZSk7cmV0dXJuIG8ubGxzZWVrKHMsaSxuKSwkPVtzLnBvc2l0aW9uPj4+MCwoeT1zLnBvc2l0aW9uLCtNYXRoLmFicyh5KT49MT95PjA/K01hdGguZmxvb3IoeS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCh5LSsofn55Pj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sZ1thPj4yXT0kWzBdLGdbYSs0Pj4yXT0kWzFdLHMuZ2V0ZGVudHMmJmk9PT0wJiZuPT09MCYmKHMuZ2V0ZGVudHM9bnVsbCksMH1jYXRjaChsKXtpZih0eXBlb2Ygbz4idSJ8fGwubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBsO3JldHVybiBsLmVycm5vfX12YXIgYmE9KGUscix0LG4pPT57Zm9yKHZhciBhPTAsaT0wO2k8dDtpKyspe3ZhciBzPUFbcj4+Ml0sbD1BW3IrND4+Ml07cis9ODt2YXIgdT1vLndyaXRlKGUsSSxzLGwsbik7aWYodTwwKXJldHVybi0xO2ErPXV9cmV0dXJuIGF9O2Z1bmN0aW9uIGthKGUscix0LG4pe3RyeXt2YXIgYT1QLmdldFN0cmVhbUZyb21GRChlKSxpPWJhKGEscix0KTtyZXR1cm4gQVtuPj4yXT1pLDB9Y2F0Y2gocyl7aWYodHlwZW9mIG8+InUifHxzLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcztyZXR1cm4gcy5lcnJub319dmFyIFBhPShlLHIpPT57Zm9yKHZhciB0PTAsbj0wO248PXI7dCs9ZVtuKytdKTtyZXR1cm4gdH0sSnI9WzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxacj1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLEFhPShlLHIpPT57Zm9yKHZhciB0PW5ldyBEYXRlKGUuZ2V0VGltZSgpKTtyPjA7KXt2YXIgbj1CZSh0LmdldEZ1bGxZZWFyKCkpLGE9dC5nZXRNb250aCgpLGk9KG4/SnI6WnIpW2FdO2lmKHI+aS10LmdldERhdGUoKSlyLT1pLXQuZ2V0RGF0ZSgpKzEsdC5zZXREYXRlKDEpLGE8MTE/dC5zZXRNb250aChhKzEpOih0LnNldE1vbnRoKDApLHQuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpKzEpKTtlbHNlIHJldHVybiB0LnNldERhdGUodC5nZXREYXRlKCkrciksdH1yZXR1cm4gdH0sRGE9KGUscik9PntJLnNldChlLHIpfSxRcj0oZSxyLHQsbik9Pnt2YXIgYT1BW24rNDA+PjJdLGk9e3RtX3NlYzpnW24+PjJdLHRtX21pbjpnW24rND4+Ml0sdG1faG91cjpnW24rOD4+Ml0sdG1fbWRheTpnW24rMTI+PjJdLHRtX21vbjpnW24rMTY+PjJdLHRtX3llYXI6Z1tuKzIwPj4yXSx0bV93ZGF5OmdbbisyND4+Ml0sdG1feWRheTpnW24rMjg+PjJdLHRtX2lzZHN0OmdbbiszMj4+Ml0sdG1fZ210b2ZmOmdbbiszNj4+Ml0sdG1fem9uZTphP3NlKGEpOiIifSxzPXNlKHQpLGw9eyIlYyI6IiVhICViICVkICVIOiVNOiVTICVZIiwiJUQiOiIlbS8lZC8leSIsIiVGIjoiJVktJW0tJWQiLCIlaCI6IiViIiwiJXIiOiIlSTolTTolUyAlcCIsIiVSIjoiJUg6JU0iLCIlVCI6IiVIOiVNOiVTIiwiJXgiOiIlbS8lZC8leSIsIiVYIjoiJUg6JU06JVMiLCIlRWMiOiIlYyIsIiVFQyI6IiVDIiwiJUV4IjoiJW0vJWQvJXkiLCIlRVgiOiIlSDolTTolUyIsIiVFeSI6IiV5IiwiJUVZIjoiJVkiLCIlT2QiOiIlZCIsIiVPZSI6IiVlIiwiJU9IIjoiJUgiLCIlT0kiOiIlSSIsIiVPbSI6IiVtIiwiJU9NIjoiJU0iLCIlT1MiOiIlUyIsIiVPdSI6IiV1IiwiJU9VIjoiJVUiLCIlT1YiOiIlViIsIiVPdyI6IiV3IiwiJU9XIjoiJVciLCIlT3kiOiIleSJ9O2Zvcih2YXIgdSBpbiBsKXM9cy5yZXBsYWNlKG5ldyBSZWdFeHAodSwiZyIpLGxbdV0pO3ZhciBjPVsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkPVsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXTtmdW5jdGlvbiBtKHYsXyxMKXtmb3IodmFyIFQ9dHlwZW9mIHY9PSJudW1iZXIiP3YudG9TdHJpbmcoKTp2fHwiIjtULmxlbmd0aDxfOylUPUxbMF0rVDtyZXR1cm4gVH1mdW5jdGlvbiBoKHYsXyl7cmV0dXJuIG0odixfLCIwIil9ZnVuY3Rpb24gcCh2LF8pe2Z1bmN0aW9uIEwoQil7cmV0dXJuIEI8MD8tMTpCPjA/MTowfXZhciBUO3JldHVybihUPUwodi5nZXRGdWxsWWVhcigpLV8uZ2V0RnVsbFllYXIoKSkpPT09MCYmKFQ9TCh2LmdldE1vbnRoKCktXy5nZXRNb250aCgpKSk9PT0wJiYoVD1MKHYuZ2V0RGF0ZSgpLV8uZ2V0RGF0ZSgpKSksVH1mdW5jdGlvbiB3KHYpe3N3aXRjaCh2LmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKHYuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNlIDE6cmV0dXJuIHY7Y2FzZSAyOnJldHVybiBuZXcgRGF0ZSh2LmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKHYuZ2V0RnVsbFllYXIoKSwwLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUodi5nZXRGdWxsWWVhcigpLDAsMSk7Y2FzZSA1OnJldHVybiBuZXcgRGF0ZSh2LmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZSh2LmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIEQodil7dmFyIF89QWEobmV3IERhdGUodi50bV95ZWFyKzE5MDAsMCwxKSx2LnRtX3lkYXkpLEw9bmV3IERhdGUoXy5nZXRGdWxsWWVhcigpLDAsNCksVD1uZXcgRGF0ZShfLmdldEZ1bGxZZWFyKCkrMSwwLDQpLEI9dyhMKSxPPXcoVCk7cmV0dXJuIHAoQixfKTw9MD9wKE8sXyk8PTA/Xy5nZXRGdWxsWWVhcigpKzE6Xy5nZXRGdWxsWWVhcigpOl8uZ2V0RnVsbFllYXIoKS0xfXZhciBNPXsiJWEiOnY9PmNbdi50bV93ZGF5XS5zdWJzdHJpbmcoMCwzKSwiJUEiOnY9PmNbdi50bV93ZGF5XSwiJWIiOnY9PmRbdi50bV9tb25dLnN1YnN0cmluZygwLDMpLCIlQiI6dj0+ZFt2LnRtX21vbl0sIiVDIjp2PT57dmFyIF89di50bV95ZWFyKzE5MDA7cmV0dXJuIGgoXy8xMDB8MCwyKX0sIiVkIjp2PT5oKHYudG1fbWRheSwyKSwiJWUiOnY9Pm0odi50bV9tZGF5LDIsIiAiKSwiJWciOnY9PkQodikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksIiVHIjpELCIlSCI6dj0+aCh2LnRtX2hvdXIsMiksIiVJIjp2PT57dmFyIF89di50bV9ob3VyO3JldHVybiBfPT0wP189MTI6Xz4xMiYmKF8tPTEyKSxoKF8sMil9LCIlaiI6dj0+aCh2LnRtX21kYXkrUGEoQmUodi50bV95ZWFyKzE5MDApP0pyOlpyLHYudG1fbW9uLTEpLDMpLCIlbSI6dj0+aCh2LnRtX21vbisxLDIpLCIlTSI6dj0+aCh2LnRtX21pbiwyKSwiJW4iOigpPT5gCmAsIiVwIjp2PT52LnRtX2hvdXI+PTAmJnYudG1faG91cjwxMj8iQU0iOiJQTSIsIiVTIjp2PT5oKHYudG1fc2VjLDIpLCIldCI6KCk9PiIJIiwiJXUiOnY9PnYudG1fd2RheXx8NywiJVUiOnY9Pnt2YXIgXz12LnRtX3lkYXkrNy12LnRtX3dkYXk7cmV0dXJuIGgoTWF0aC5mbG9vcihfLzcpLDIpfSwiJVYiOnY9Pnt2YXIgXz1NYXRoLmZsb29yKCh2LnRtX3lkYXkrNy0odi50bV93ZGF5KzYpJTcpLzcpO2lmKCh2LnRtX3dkYXkrMzcxLXYudG1feWRheS0yKSU3PD0yJiZfKyssXyl7aWYoXz09NTMpe3ZhciBUPSh2LnRtX3dkYXkrMzcxLXYudG1feWRheSklNztUIT00JiYoVCE9M3x8IUJlKHYudG1feWVhcikpJiYoXz0xKX19ZWxzZXtfPTUyO3ZhciBMPSh2LnRtX3dkYXkrNy12LnRtX3lkYXktMSklNzsoTD09NHx8TD09NSYmQmUodi50bV95ZWFyJTQwMC0xKSkmJl8rK31yZXR1cm4gaChfLDIpfSwiJXciOnY9PnYudG1fd2RheSwiJVciOnY9Pnt2YXIgXz12LnRtX3lkYXkrNy0odi50bV93ZGF5KzYpJTc7cmV0dXJuIGgoTWF0aC5mbG9vcihfLzcpLDIpfSwiJXkiOnY9Pih2LnRtX3llYXIrMTkwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksIiVZIjp2PT52LnRtX3llYXIrMTkwMCwiJXoiOnY9Pnt2YXIgXz12LnRtX2dtdG9mZixMPV8+PTA7cmV0dXJuIF89TWF0aC5hYnMoXykvNjAsXz1fLzYwKjEwMCtfJTYwLChMPyIrIjoiLSIpKygiMDAwMCIrXykuc2xpY2UoLTQpfSwiJVoiOnY9PnYudG1fem9uZSwiJSUiOigpPT4iJSJ9O3M9cy5yZXBsYWNlKC8lJS9nLCJcMFwwIik7Zm9yKHZhciB1IGluIE0pcy5pbmNsdWRlcyh1KSYmKHM9cy5yZXBsYWNlKG5ldyBSZWdFeHAodSwiZyIpLE1bdV0oaSkpKTtzPXMucmVwbGFjZSgvXDBcMC9nLCIlIik7dmFyIEY9U2UocywhMSk7cmV0dXJuIEYubGVuZ3RoPnI/MDooRGEoRixlKSxGLmxlbmd0aC0xKX0sJGE9KGUscix0LG4sYSk9PlFyKGUscix0LG4pO28uY3JlYXRlUHJlbG9hZGVkRmlsZT1WdCxvLnN0YXRpY0luaXQoKSxTcj1mLkludGVybmFsRXJyb3I9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihyKXtzdXBlcihyKSx0aGlzLm5hbWU9IkludGVybmFsRXJyb3IifX0sZW4oKSxtZT1mLkJpbmRpbmdFcnJvcj1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHIpe3N1cGVyKHIpLHRoaXMubmFtZT0iQmluZGluZ0Vycm9yIn19LHZuKCksdW4oKSxFbigpLHhyPWYuVW5ib3VuZFR5cGVFcnJvcj1BbihFcnJvciwiVW5ib3VuZFR5cGVFcnJvciIpLE9uKCk7dmFyIENhPXtsOkN0LGM6VHQsVTpqdCxzOnp0LFI6eHQsSjpIdCxXOld0LE86QnQsUDpOdCxLOll0LEk6R3QsSDpxdCxROlh0LEU6S3QsVjpKdCxrOlp0LEI6UXQsWjp0bixoOkRuLHk6Rm4sajpUbixiOlNuLGE6TW4sWTpZcix3OlZuLGk6VW4sZjp6bixkOnhuLG06SG4sdjpXbix0OktuLG46Sm4sZTpabixfOlFuLFM6cmEsVDp0YSx4Ok5yLGFhOm5hLCQ6YWEsZzppYSx6OnNhLEY6bGEscDp1YSxHOmZhLG86S3IsRDpkYSxNOm1hLE46cGEscjpfYSxMOmdhLHU6d2EsQTpFYSxxOmthLFg6UXIsQzokYX0sej0kdCgpLGZyPWU9Pihmcj16LmRhKShlKSxldD1lPT4oZXQ9ei5mYSkoZSksWj1lPT4oWj16LmdhKShlKSxydD1lPT4ocnQ9ei5pYSkoZSk7Zi5keW5DYWxsX2ppamk9KGUscix0LG4sYSk9PihmLmR5bkNhbGxfamlqaT16LmphKShlLHIsdCxuLGEpLGYuZHluQ2FsbF9paWlqaT0oZSxyLHQsbixhLGkpPT4oZi5keW5DYWxsX2lpaWppPXoua2EpKGUscix0LG4sYSxpKSxmLmR5bkNhbGxfamlpaWo9KGUscix0LG4sYSxpKT0+KGYuZHluQ2FsbF9qaWlpaj16LmxhKShlLHIsdCxuLGEsaSksZi5keW5DYWxsX2lpaWlpaj0oZSxyLHQsbixhLGkscyk9PihmLmR5bkNhbGxfaWlpaWlqPXoubWEpKGUscix0LG4sYSxpLHMpLGYuZHluQ2FsbF92aWlqaWk9KGUscix0LG4sYSxpLHMpPT4oZi5keW5DYWxsX3ZpaWppaT16Lm5hKShlLHIsdCxuLGEsaSxzKSxmLmR5bkNhbGxfaWlpaWlqaj0oZSxyLHQsbixhLGkscyxsLHUpPT4oZi5keW5DYWxsX2lpaWlpamo9ei5vYSkoZSxyLHQsbixhLGkscyxsLHUpLGYuZHluQ2FsbF9paWlpaWlqaj0oZSxyLHQsbixhLGkscyxsLHUsYyk9PihmLmR5bkNhbGxfaWlpaWlpamo9ei5wYSkoZSxyLHQsbixhLGkscyxsLHUsYyksZi5fZmZfaDI2NF9jYWJhY190YWJsZXM9MjA2ODEyO3ZhciBOZTtnZT1mdW5jdGlvbiBlKCl7TmV8fHR0KCksTmV8fChnZT1lKX07ZnVuY3Rpb24gdHQoKXtpZihvZT4wfHwocHQoKSxvZT4wKSlyZXR1cm47ZnVuY3Rpb24gZSgpe05lfHwoTmU9ITAsZi5jYWxsZWRSdW49ITAsIXByJiYoX3QoKSxVKGYpLGYub25SdW50aW1lSW5pdGlhbGl6ZWQmJmYub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxndCgpKSl9Zi5zZXRTdGF0dXM/KGYuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtmLnNldFN0YXR1cygiIil9LDEpLGUoKX0sMSkpOmUoKX1pZihmLnByZUluaXQpZm9yKHR5cGVvZiBmLnByZUluaXQ9PSJmdW5jdGlvbiImJihmLnByZUluaXQ9W2YucHJlSW5pdF0pO2YucHJlSW5pdC5sZW5ndGg+MDspZi5wcmVJbml0LnBvcCgpKCk7dHQoKTtsZXQgbnQ9MzI7ZnVuY3Rpb24gYXQoZSxyPTMsdD01MDApe2xldCBuPTA7Zm9yKDtuPHI7KXRyeXtyZXR1cm4gZSgpfWNhdGNoKGEpe2lmKG50Pj0yNCYmY29uc29sZS53YXJuKGBBdHRlbXB0ICR7bisxfSBmYWlsZWQ6ICR7YS5tZXNzYWdlfWApLG4rKyxuPj1yKXRocm93IG5ldyBFcnJvcihgRmFpbGVkIGFmdGVyICR7cn0gYXR0ZW1wdHNgKX19ZnVuY3Rpb24gRmEoZSl7Y29uc3Qgcj1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoci5vcGVuKCJIRUFEIixlLCExKSxyLnNlbmQoKSxyLnN0YXR1cyE9PTIwMCl0aHJvdyBuZXcgRXJyb3IoYGdldEZpbGVTaXplIHJlcXVlc3QgZmFpbGVkOiAke2V9YCk7cmV0dXJuIHBhcnNlSW50KHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIikpfWZ1bmN0aW9uIFRhKGUscix0KXtjb25zdCBuPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihuLm9wZW4oIkdFVCIsZSwhMSksbi5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsYGJ5dGVzPSR7cn0tJHtyK3QtMX1gKSxuLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLG4uc2VuZCgpLG4uc3RhdHVzIT09MjA2JiZuLnN0YXR1cyE9PTIwMCl0aHJvdyBuZXcgRXJyb3IoYGZldGNoQXJyYXlCdWZmZXIgcmVxdWVzdCBmYWlsZWQ6ICR7ZX1gKTtyZXR1cm4gbi5yZXNwb25zZX1jbGFzcyBwZXtjb25zdHJ1Y3RvcihyKXtsZXQgdDt0eXBlb2Ygcj09InN0cmluZyI/KHQ9bmV3IEZpbGUoW10sZW5jb2RlVVJJQ29tcG9uZW50KHIpKSxvLmZpbGVzeXN0ZW1zLldPUktFUkZTLnN0cmVhbV9vcHMucmVhZD1mdW5jdGlvbihhLGkscyxsLHUpe2NvbnN0IGM9ZGVjb2RlVVJJQ29tcG9uZW50KGEubm9kZS5jb250ZW50cy5uYW1lKTtpZihhLm5vZGUuc2l6ZT09PTAmJihhLm5vZGUuc2l6ZT1hdCgoKT0+RmEoYykpKSx1Pj1hLm5vZGUuc2l6ZSlyZXR1cm4gMDtjb25zdCBkPWF0KCgpPT5UYShjLHUsbCkpLG09ZC5ieXRlTGVuZ3RoO3JldHVybiBpLnNldChuZXcgVWludDhBcnJheShkKSxzKSxtfSk6dD1yLHRoaXMubW91bnRQb2ludD0iL2RhdGEiLHRoaXMubW91bnRPcHRzPXtmaWxlczpbdF19LHRoaXMuZmlsZVBhdGg9dGhpcy5tb3VudFBvaW50KyIvIit0Lm5hbWV9bW91bnQoKXtvLm1rZGlyKHRoaXMubW91bnRQb2ludCksby5tb3VudChvLmZpbGVzeXN0ZW1zLldPUktFUkZTLHRoaXMubW91bnRPcHRzLHRoaXMubW91bnRQb2ludCl9dW5tb3VudCgpe28udW5tb3VudCh0aGlzLm1vdW50UG9pbnQpLG8ucm1kaXIodGhpcy5tb3VudFBvaW50KX19ZnVuY3Rpb24gY3IoZSl7Y29uc3Qgcj1uZXcgVWludDhBcnJheShlLmV4dHJhZGF0YSksdD17aWQ6ZS5pZCxpbmRleDplLmluZGV4LGNvZGVjX3R5cGU6ZS5jb2RlY190eXBlLGNvZGVjX3R5cGVfc3RyaW5nOmUuY29kZWNfdHlwZV9zdHJpbmcsY29kZWNfbmFtZTplLmNvZGVjX25hbWUsY29kZWNfc3RyaW5nOmUuY29kZWNfc3RyaW5nLGNvbG9yX3ByaW1hcmllczplLmNvbG9yX3ByaW1hcmllcyxjb2xvcl90cmFuc2ZlcjplLmNvbG9yX3RyYW5zZmVyLGNvbG9yX3NwYWNlOmUuY29sb3Jfc3BhY2UsY29sb3JfcmFuZ2U6ZS5jb2xvcl9yYW5nZSxwcm9maWxlOmUucHJvZmlsZSxwaXhfZm10OmUucGl4X2ZtdCxsZXZlbDplLmxldmVsLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LGNoYW5uZWxzOmUuY2hhbm5lbHMsc2FtcGxlX3JhdGU6ZS5zYW1wbGVfcmF0ZSxzYW1wbGVfZm10OmUuc2FtcGxlX2ZtdCxiaXRfcmF0ZTplLmJpdF9yYXRlLGV4dHJhZGF0YV9zaXplOmUuZXh0cmFkYXRhX3NpemUsZXh0cmFkYXRhOnIscl9mcmFtZV9yYXRlOmUucl9mcmFtZV9yYXRlLGF2Z19mcmFtZV9yYXRlOmUuYXZnX2ZyYW1lX3JhdGUsc2FtcGxlX2FzcGVjdF9yYXRpbzplLnNhbXBsZV9hc3BlY3RfcmF0aW8sZGlzcGxheV9hc3BlY3RfcmF0aW86ZS5kaXNwbGF5X2FzcGVjdF9yYXRpbyxzdGFydF90aW1lOmUuc3RhcnRfdGltZSxkdXJhdGlvbjplLmR1cmF0aW9uLHJvdGF0aW9uOmUucm90YXRpb24sZmxpcDplLmZsaXAsbmJfZnJhbWVzOmUubmJfZnJhbWVzLHRhZ3M6ZS50YWdzfTtyZXR1cm4gZS5kZWxldGUoKSx0fWZ1bmN0aW9uIGRyKGUpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKSx0PXtrZXlmcmFtZTplLmtleWZyYW1lLHRpbWVzdGFtcDplLnRpbWVzdGFtcCxkdXJhdGlvbjplLmR1cmF0aW9uLHNpemU6ZS5zaXplLGRhdGE6cn07cmV0dXJuIGUuZGVsZXRlKCksdH1mdW5jdGlvbiBTYShlLHI9MCx0PS0xKXtjb25zdCBuPW5ldyBwZShlKTtuLm1vdW50KCk7dHJ5e2NvbnN0IGE9Zi5nZXRfYXZfc3RyZWFtKG4uZmlsZVBhdGgscix0KTtyZXR1cm4gY3IoYSl9Y2F0Y2goYSl7dGhyb3cgbmV3IEVycm9yKCJnZXRfYXZfc3RyZWFtIGZhaWxlZDogIithLm1lc3NhZ2UpfWZpbmFsbHl7bi51bm1vdW50KCl9fWZ1bmN0aW9uIE1hKGUpe2NvbnN0IHI9bmV3IHBlKGUpO3IubW91bnQoKTt0cnl7Y29uc3QgdD1mLmdldF9hdl9zdHJlYW1zKHIuZmlsZVBhdGgpLG49W107Zm9yKGxldCBhPTA7YTx0LnN0cmVhbXMuc2l6ZSgpO2ErKyluLnB1c2goY3IodC5zdHJlYW1zLmdldChhKSkpO3JldHVybiB0LnN0cmVhbXMuZGVsZXRlKCksbn1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoImdldF9hdl9zdHJlYW1zIGZhaWxlZDogIit0Lm1lc3NhZ2UpfWZpbmFsbHl7ci51bm1vdW50KCl9fWZ1bmN0aW9uIFJhKGUpe2NvbnN0IHI9bmV3IHBlKGUpO3IubW91bnQoKTt0cnl7Y29uc3QgdD1mLmdldF9tZWRpYV9pbmZvKHIuZmlsZVBhdGgpLG49e2Zvcm1hdF9uYW1lOnQuZm9ybWF0X25hbWUsZHVyYXRpb246dC5kdXJhdGlvbixiaXRfcmF0ZTp0LmJpdF9yYXRlLHN0YXJ0X3RpbWU6dC5zdGFydF90aW1lLG5iX3N0cmVhbXM6dC5uYl9zdHJlYW1zLHN0cmVhbXM6W119O2ZvcihsZXQgYT0wO2E8dC5zdHJlYW1zLnNpemUoKTthKyspbi5zdHJlYW1zLnB1c2goY3IodC5zdHJlYW1zLmdldChhKSkpO3JldHVybiB0LnN0cmVhbXMuZGVsZXRlKCksbn1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoImdldF9tZWRpYV9pbmZvIGZhaWxlZDogIit0Lm1lc3NhZ2UpfWZpbmFsbHl7ci51bm1vdW50KCl9fWZ1bmN0aW9uIE9hKGUscix0PTAsbj0tMSxhPTEpe2NvbnN0IGk9bmV3IHBlKGUpO2kubW91bnQoKTt0cnl7Y29uc3Qgcz1mLmdldF9hdl9wYWNrZXQoaS5maWxlUGF0aCxyLHQsbixhKTtyZXR1cm4gZHIocyl9Y2F0Y2gocyl7dGhyb3cgbmV3IEVycm9yKCJnZXRfYXZfcGFja2V0IGZhaWxlZDogIitzLm1lc3NhZ2UpfWZpbmFsbHl7aS51bm1vdW50KCl9fWZ1bmN0aW9uIElhKGUscix0PTEpe2NvbnN0IG49bmV3IHBlKGUpO24ubW91bnQoKTt0cnl7Y29uc3QgYT1mLmdldF9hdl9wYWNrZXRzKG4uZmlsZVBhdGgscix0KSxpPVtdO2ZvcihsZXQgcz0wO3M8YS5wYWNrZXRzLnNpemUoKTtzKyspaS5wdXNoKGRyKGEucGFja2V0cy5nZXQocykpKTtyZXR1cm4gYS5wYWNrZXRzLmRlbGV0ZSgpLGl9Y2F0Y2goYSl7dGhyb3cgbmV3IEVycm9yKCJnZXRfYXZfcGFja2V0cyBmYWlsZWQ6ICIrYS5tZXNzYWdlKX1maW5hbGx5e24udW5tb3VudCgpfX1hc3luYyBmdW5jdGlvbiBMYShlLHIsdD0wLG49MCxhPTAsaT0tMSxzPTEpe2NvbnN0IGw9bmV3IHBlKHIpO2wubW91bnQoKTtsZXQgdT1udWxsO3RyeXtpZih1PWYuQVZQYWNrZXRSZWFkZXIuY3JlYXRlKGwuZmlsZVBhdGgsdCxuLGEsaSxzKSwhdSl0aHJvdyBuZXcgRXJyb3IoIkFWUGFja2V0UmVhZGVyLmNyZWF0ZSBmYWlsZWQgKG51bGwgcmVhZGVyKSIpO2NvbnN0IGM9VmEoZSk7Zm9yKDs7KXtjb25zdCBkPXUucmVhZF9uZXh0X2F2X3BhY2tldCgpO2lmKHUuaGFzX2Vycm9yKCkpdGhyb3cgbmV3IEVycm9yKCJBVlBhY2tldFJlYWRlciByZWFkX25leHRfYXZfcGFja2V0IGVycm9yIik7aWYodS5pc19maW5pc2hlZCgpKXthd2FpdCBjKDApO2JyZWFrfWlmKGF3YWl0IGMoZCk9PT0wKWJyZWFrfX1jYXRjaChjKXt0aHJvdyBuZXcgRXJyb3IoInJlYWRBVlBhY2tldCBwaXBlbGluZSBmYWlsZWQ6ICIrYy5tZXNzYWdlKX1maW5hbGx5e3UmJnUuZGVsZXRlKCksbC51bm1vdW50KCl9cmV0dXJuIDF9ZnVuY3Rpb24gVmEoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZShuPT57Y29uc3QgYT17dHlwZToiQVZQYWNrZXRTdHJlYW0iLG1zZ0lkOmUscmVzdWx0Om51bGx9O2lmKHQ9PT0wKXtzZWxmLnBvc3RNZXNzYWdlKGEpLG4oMSk7cmV0dXJufWNvbnN0IGk9ZHIodCk7YS5yZXN1bHQ9aSxzZWxmLnBvc3RNZXNzYWdlKGEsW2kuZGF0YS5idWZmZXJdKTtjb25zdCBzPWw9Pntjb25zdHt0eXBlOnUsbXNnSWQ6Y309bC5kYXRhO2M9PT1lJiYodT09PSJSZWFkTmV4dEFWUGFja2V0Ij8oc2VsZi5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSxuKDEpKTp1PT09IlN0b3BSZWFkQVZQYWNrZXQiJiYoc2VsZi5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSxuKDApKSl9O3NlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIscyl9KX19ZnVuY3Rpb24gVWEoZSl7bnQ9ZSxmLnNldF9hdl9sb2dfbGV2ZWwoZSl9cmV0dXJuIGYuZ2V0QVZTdHJlYW09U2EsZi5nZXRBVlN0cmVhbXM9TWEsZi5nZXRNZWRpYUluZm89UmEsZi5nZXRBVlBhY2tldD1PYSxmLmdldEFWUGFja2V0cz1JYSxmLnJlYWRBVlBhY2tldD1MYSxmLnNldEFWTG9nTGV2ZWw9VWEsQz1uZSxDfX0pKCk7bGV0IFE7c2VsZi5wb3N0TWVzc2FnZSh7dHlwZTpHLldhc21Xb3JrZXJMb2FkZWR9KSxzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGFzeW5jIGZ1bmN0aW9uKEUpe2NvbnN0e3R5cGU6UixkYXRhOkMsbXNnSWQ6Zn09RS5kYXRhO3RyeXtzd2l0Y2goUil7Y2FzZSJMb2FkV0FTTSI6cmV0dXJuIGF3YWl0IHN0KEMpO2Nhc2UiR2V0QVZTdHJlYW0iOnJldHVybiBsdChDLGYpO2Nhc2UiR2V0QVZTdHJlYW1zIjpyZXR1cm4gdXQoQyxmKTtjYXNlIkdldE1lZGlhSW5mbyI6cmV0dXJuIGZ0KEMsZik7Y2FzZSJHZXRBVlBhY2tldCI6cmV0dXJuIGN0KEMsZik7Y2FzZSJHZXRBVlBhY2tldHMiOnJldHVybiBkdChDLGYpO2Nhc2UiUmVhZEFWUGFja2V0IjpyZXR1cm4gYXdhaXQgdnQoQyxmKTtjYXNlIlNldEFWTG9nTGV2ZWwiOnJldHVybiBodChDLGYpO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChVKXtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOlIsbXNnSWQ6ZixlcnJNc2c6VSBpbnN0YW5jZW9mIEVycm9yP1UubWVzc2FnZToiVW5rbm93biBFcnJvciJ9KX19KTthc3luYyBmdW5jdGlvbiBzdChFKXtjb25zdHt3YXNtRmlsZVBhdGg6Un09RXx8e307UT1hd2FpdCBpdCh7bG9jYXRlRmlsZTooQyxmKT0+Qy5lbmRzV2l0aCgiLndhc20iKSYmUj9SOmYrQyxvblJ1bnRpbWVJbml0aWFsaXplZDooKT0+e3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5XQVNNUnVudGltZUluaXRpYWxpemVkfSl9fSl9ZnVuY3Rpb24gbHQoRSxSKXtjb25zdHtzb3VyY2U6QyxzdHJlYW1UeXBlOmYsc3RyZWFtSW5kZXg6VX09RSxIPVEuZ2V0QVZTdHJlYW0oQyxmLFUpO3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5HZXRBVlN0cmVhbSxtc2dJZDpSLHJlc3VsdDpIfSxbSC5leHRyYWRhdGEuYnVmZmVyXSl9ZnVuY3Rpb24gdXQoRSxSKXtjb25zdHtzb3VyY2U6Q309RSxmPVEuZ2V0QVZTdHJlYW1zKEMpO3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5HZXRBVlN0cmVhbXMsbXNnSWQ6UixyZXN1bHQ6Zn0sZi5tYXAoVT0+VS5leHRyYWRhdGEuYnVmZmVyKSl9ZnVuY3Rpb24gZnQoRSxSKXtjb25zdHtzb3VyY2U6Q309RSxmPVEuZ2V0TWVkaWFJbmZvKEMpO3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5HZXRNZWRpYUluZm8sbXNnSWQ6UixyZXN1bHQ6Zn0sZi5zdHJlYW1zLm1hcChVPT5VLmV4dHJhZGF0YS5idWZmZXIpKX1mdW5jdGlvbiBjdChFLFIpe2NvbnN0e3NvdXJjZTpDLHRpbWU6ZixzdHJlYW1UeXBlOlUsc3RyZWFtSW5kZXg6SCxzZWVrRmxhZzpuZX09RSxhZT1RLmdldEFWUGFja2V0KEMsZixVLEgsbmUpO3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5HZXRBVlBhY2tldCxtc2dJZDpSLHJlc3VsdDphZX0sW2FlLmRhdGEuYnVmZmVyXSl9ZnVuY3Rpb24gZHQoRSxSKXtjb25zdHtzb3VyY2U6Qyx0aW1lOmYsc2Vla0ZsYWc6VX09RSxIPVEuZ2V0QVZQYWNrZXRzKEMsZixVKTtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOkcuR2V0QVZQYWNrZXRzLG1zZ0lkOlIscmVzdWx0Okh9LEgubWFwKG5lPT5uZS5kYXRhLmJ1ZmZlcikpfWFzeW5jIGZ1bmN0aW9uIHZ0KEUsUil7Y29uc3R7c291cmNlOkMsc3RhcnQ6ZixlbmQ6VSxzdHJlYW1UeXBlOkgsc3RyZWFtSW5kZXg6bmUsc2Vla0ZsYWc6YWV9PUUsRGU9YXdhaXQgUS5yZWFkQVZQYWNrZXQoUixDLGYsVSxILG5lLGFlKTtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOkcuUmVhZEFWUGFja2V0LG1zZ0lkOlIscmVzdWx0OkRlfSl9ZnVuY3Rpb24gaHQoRSxSKXtjb25zdHtsZXZlbDpDfT1FO1Euc2V0QVZMb2dMZXZlbChDKSxzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOiJTZXRBVkxvZ0xldmVsIixtc2dJZDpSfSl9fSkoKTsK",Ra=t=>Uint8Array.from(atob(t),e=>e.charCodeAt(0)),Ks=typeof window<"u"&&window.Blob&&new Blob([Ra(bn)],{type:"text/javascript;charset=utf-8"});function Ta(t){let e;try{if(e=Ks&&(window.URL||window.webkitURL).createObjectURL(Ks),!e)throw"";const i=new Worker(e,{name:t==null?void 0:t.name});return i.addEventListener("error",()=>{(window.URL||window.webkitURL).revokeObjectURL(e)}),i}catch{return new Worker("data:text/javascript;base64,"+bn,{name:t==null?void 0:t.name})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}const Ms=1e6;class fi{constructor(e){oi(this,"wasmWorker"),oi(this,"wasmWorkerLoadStatus"),oi(this,"msgId"),oi(this,"source"),this.wasmWorker=new Ta({name:"web-demuxer"}),this.wasmWorkerLoadStatus=new Promise((i,n)=>{this.wasmWorker.addEventListener("message",d=>{const{type:o,errMsg:m}=d.data;o===rt.WasmWorkerLoaded&&this.post(rt.LoadWASM,{wasmFilePath:e==null?void 0:e.wasmFilePath}),o===rt.WASMRuntimeInitialized&&i(),o===rt.LoadWASM&&m&&n(m)})}),this.msgId=0}post(e,i,n){this.wasmWorker.postMessage({type:e,msgId:n??this.msgId++,data:i})}getFromWorker(e,i){return new Promise((n,d)=>{if(!this.source){d("source is not loaded. call load() first");return}const o=this.msgId,m=h=>{let{data:S}=h;S.type===e&&S.msgId===o&&(S.errMsg?d(S.errMsg):n(S.result),this.wasmWorker.removeEventListener("message",m))};this.wasmWorker.addEventListener("message",m),this.post(e,i,o)})}async load(e){await this.wasmWorkerLoadStatus,this.source=e}destroy(){this.source=void 0,this.wasmWorker.terminate()}getMediaInfo(){return this.getFromWorker(rt.GetMediaInfo,{source:this.source})}getAVStream(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:I0.AVMEDIA_TYPE_VIDEO,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1;return this.getFromWorker(rt.GetAVStream,{source:this.source,streamType:e,streamIndex:i})}getAVStreams(){return this.getFromWorker(rt.GetAVStreams,{source:this.source})}getAVPacket(e){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:I0.AVMEDIA_TYPE_VIDEO,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-1,d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:di.AVSEEK_FLAG_BACKWARD;return this.getFromWorker(rt.GetAVPacket,{source:this.source,time:e,streamType:i,streamIndex:n,seekFlag:d})}getAVPackets(e){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:di.AVSEEK_FLAG_BACKWARD;return this.getFromWorker(rt.GetAVPackets,{source:this.source,time:e,seekFlag:i})}readAVPacket(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:I0.AVMEDIA_TYPE_VIDEO,d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:di.AVSEEK_FLAG_BACKWARD;const m=new CountQueuingStrategy({highWaterMark:1}),h=this.msgId;let S=0,W,v;return new ReadableStream({start:Z=>{if(!this.source){Z.error("source is not loaded. call load() first");return}W=O=>{const w=O.data;w.type===rt.ReadAVPacket&&w.msgId===h&&w.errMsg&&(Z.error(w.errMsg),this.wasmWorker.removeEventListener("message",W)),w.type===rt.AVPacketStream&&w.msgId===h&&(w.result&&!v?Z.enqueue(w.result):(this.wasmWorker.removeEventListener("message",W),v?v():Z.close()))},this.wasmWorker.addEventListener("message",W),this.post(rt.ReadAVPacket,{source:this.source,start:e,end:i,streamType:n,streamIndex:d,seekFlag:o})},pull:()=>{S>0&&this.post(rt.ReadNextAVPacket,void 0,h),S++},cancel:()=>new Promise(Z=>{v=Z,this.post(rt.StopReadAVPacket,void 0,h)})},m)}setLogLevel(e){return this.getFromWorker(rt.SetAVLogLevel,{level:e})}getMediaStream(e,i){return this.getAVStream(Ci[e],i)}seekMediaPacket(e,i,n){return this.getAVPacket(i,Ci[e],void 0,n)}readMediaPacket(e,i,n,d){return this.readAVPacket(i,n,Ci[e],void 0,d)}genDecoderConfig(e,i){var n,d;return e===ws.VIDEO?{codec:i.codec_string,codedWidth:i.width,codedHeight:i.height,description:((n=i.extradata)==null?void 0:n.length)>0?i.extradata:void 0,rotation:i.rotation,flip:i.flip}:{codec:i.codec_string||"",sampleRate:i.sample_rate,numberOfChannels:i.channels,description:((d=i.extradata)==null?void 0:d.length)>0?i.extradata:void 0}}genEncodedChunk(e,i){const n={type:i.keyframe===1?"key":"delta",timestamp:i.timestamp*Ms,duration:i.duration*Ms,data:i.data};return e===ws.VIDEO?new EncodedVideoChunk(n):new EncodedAudioChunk(n)}getDecoderConfig(e){return this.getMediaStream(e).then(i=>this.genDecoderConfig(e,i))}seek(e,i,n){return this.seekMediaPacket(e,i,n).then(d=>this.genEncodedChunk(e,d))}read(e,i,n,d){return this.readMediaPacket(e,i,n,d).pipeThrough(new TransformStream({transform:(o,m)=>{const h=this.genEncodedChunk(e,o);m.enqueue(h)}}))}}let ks=!1;function Zi(){ks||(console.warn("⚠️ Demo/Learning Function: This utility is intended for demos and learning purposes only. For production use, please use a proper demuxing library like MediaBunny (https://mediabunny.dev/) or web-demuxer (https://github.com/bilibili/web-demuxer) directly."),ks=!0)}async function Wa(t){Zi();const e=new fi({wasmFilePath:"https://cdn.jsdelivr.net/npm/web-demuxer@latest/dist/wasm-files/web-demuxer.wasm"});await e.load(t);const i=e.read("video",0).getReader(),n=[];return new Promise(function(d){i.read().then(async function o(m){const{done:h,value:S}=m;return S&&n.push(S),h?d(n):i.read().then(o)})})}async function La(t){Zi();const e=new fi({wasmFilePath:"https://cdn.jsdelivr.net/npm/web-demuxer@latest/dist/wasm-files/web-demuxer.wasm"});await e.load(t);const i=e.read("audio",0).getReader(),n=[];await new Promise(function(h){i.read().then(async function S(W){const{done:v,value:Z}=W;return Z&&n.push(Z),v?h(n):i.read().then(S)})});const o=(await e.getMediaInfo()).streams.filter(h=>h.codec_type_string==="audio")[0],m={codec:o.codec_string,sampleRate:o.sample_rate,numberOfChannels:o.channels};return{chunks:n,config:m}}async function xa(t){Zi();const e=new fi({wasmFilePath:"https://cdn.jsdelivr.net/npm/web-demuxer@latest/dist/wasm-files/web-demuxer.wasm"});await e.load(t);const i=e.read("video",0).getReader(),n=[];await new Promise(function(h){i.read().then(async function S(W){const{done:v,value:Z}=W;return Z&&n.push(Z),v?h(n):i.read().then(S)})});const o=(await e.getMediaInfo()).streams.filter(h=>h.codec_type_string==="video")[0],m={codec:o.codec_string,codedWidth:o.width,codedHeight:o.height,description:o.extradata};return{chunks:n,config:m}}async function Ha(t){Zi();const e=new fi({wasmFilePath:"https://cdn.jsdelivr.net/npm/web-demuxer@latest/dist/wasm-files/web-demuxer.wasm"});await e.load(t);const i=e.read("audio",0).getReader(),n=[];return new Promise(function(d){i.read().then(async function o(m){const{done:h,value:S}=m;return S&&n.push(S),h?d(n):i.read().then(o)})})}/*!
280
280
  * Copyright (c) 2025-present, Vanilagy and contributors
281
281
  *
282
282
  * This Source Code Form is subject to the terms of the Mozilla Public
283
283
  * License, v. 2.0. If a copy of the MPL was not distributed with this
284
284
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
285
- */function ve(t){if(!t)throw new Error("Assertion failed.")}const Y0=t=>t&&t[t.length-1],M0=t=>t>=0&&t<2**32;class A0{constructor(e){this.bytes=e,this.pos=0}seekToByte(e){this.pos=8*e}readBit(){const e=Math.floor(this.pos/8),i=this.bytes[e]??0,n=7-(this.pos&7),d=(i&1<<n)>>n;return this.pos++,d}readBits(e){if(e===1)return this.readBit();let i=0;for(let n=0;n<e;n++)i<<=1,i|=this.readBit();return i}writeBits(e,i){const n=this.pos+e;for(let d=this.pos;d<n;d++){const o=Math.floor(d/8);let m=this.bytes[o];const h=7-(d&7);m&=~(1<<h),m|=(i&1<<n-d-1)>>n-d-1<<h,this.bytes[o]=m}this.pos=n}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");const e=this.pos/8,i=this.bytes[e]??0;return this.pos+=8,i}skipBits(e){this.pos+=e}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){const e=new A0(this.bytes);return e.pos=this.pos,e}}const ye=t=>{let e=0;for(;t.readBits(1)===0&&e<32;)e++;if(e>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<e)-1+t.readBits(e)},s0=t=>{const e=ye(t);return e&1?e+1>>1:-(e>>1)},Q0=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),xa=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t),$t=new TextEncoder,qi={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},es={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},ts={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},Ha=t=>!!t&&!!t.primaries&&!!t.transfer&&!!t.matrix&&t.fullRange!==void 0,bn=t=>t instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&t instanceof SharedArrayBuffer||ArrayBuffer.isView(t);class pn{constructor(){this.currentPromise=Promise.resolve()}async acquire(){let e;const i=new Promise(d=>{e=d}),n=this.currentPromise;return this.currentPromise=i,await n,e}}const Ya=()=>{let t,e;return{promise:new Promise((n,d)=>{t=n,e=d}),resolve:t,reject:e}},yn=t=>{throw new Error(`Unexpected value: ${t}`)},wa=(t,e,i,n)=>{i=i>>>0,i=i&16777215,t.setUint8(e,i>>>16&255),t.setUint8(e+1,i>>>8&255),t.setUint8(e+2,i&255)},Ka="und",Ma=/^[a-z]{3}$/,ka=t=>Ma.test(t),Bs=1e6*(1+Number.EPSILON),Ba=(t,e)=>{const i=t<0?-1:1;t=Math.abs(t);let n=0,d=1,o=1,m=0,h=t;for(;;){const S=Math.floor(h),W=S*o+n,v=S*m+d;if(v>e)return{numerator:i*o,denominator:m};if(n=o,d=m,o=W,m=v,h=1/(h-S),!isFinite(h))break}return{numerator:i*o,denominator:m}},fn=function*(t){for(const e in t){const i=t[e];i!==void 0&&(yield{key:e,value:i})}};/*!
285
+ */function ve(t){if(!t)throw new Error("Assertion failed.")}const Y0=t=>t&&t[t.length-1],M0=t=>t>=0&&t<2**32;class A0{constructor(e){this.bytes=e,this.pos=0}seekToByte(e){this.pos=8*e}readBit(){const e=Math.floor(this.pos/8),i=this.bytes[e]??0,n=7-(this.pos&7),d=(i&1<<n)>>n;return this.pos++,d}readBits(e){if(e===1)return this.readBit();let i=0;for(let n=0;n<e;n++)i<<=1,i|=this.readBit();return i}writeBits(e,i){const n=this.pos+e;for(let d=this.pos;d<n;d++){const o=Math.floor(d/8);let m=this.bytes[o];const h=7-(d&7);m&=~(1<<h),m|=(i&1<<n-d-1)>>n-d-1<<h,this.bytes[o]=m}this.pos=n}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");const e=this.pos/8,i=this.bytes[e]??0;return this.pos+=8,i}skipBits(e){this.pos+=e}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){const e=new A0(this.bytes);return e.pos=this.pos,e}}const ye=t=>{let e=0;for(;t.readBits(1)===0&&e<32;)e++;if(e>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<e)-1+t.readBits(e)},s0=t=>{const e=ye(t);return e&1?e+1>>1:-(e>>1)},Q0=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),Ya=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t),$t=new TextEncoder,qi={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},es={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},ts={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},wa=t=>!!t&&!!t.primaries&&!!t.transfer&&!!t.matrix&&t.fullRange!==void 0,pn=t=>t instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&t instanceof SharedArrayBuffer||ArrayBuffer.isView(t);class yn{constructor(){this.currentPromise=Promise.resolve()}async acquire(){let e;const i=new Promise(d=>{e=d}),n=this.currentPromise;return this.currentPromise=i,await n,e}}const Ka=()=>{let t,e;return{promise:new Promise((n,d)=>{t=n,e=d}),resolve:t,reject:e}},fn=t=>{throw new Error(`Unexpected value: ${t}`)},Ma=(t,e,i,n)=>{i=i>>>0,i=i&16777215,t.setUint8(e,i>>>16&255),t.setUint8(e+1,i>>>8&255),t.setUint8(e+2,i&255)},ka="und",Ba=/^[a-z]{3}$/,Ca=t=>Ba.test(t),Bs=1e6*(1+Number.EPSILON),ga=(t,e)=>{const i=t<0?-1:1;t=Math.abs(t);let n=0,d=1,o=1,m=0,h=t;for(;;){const S=Math.floor(h),W=S*o+n,v=S*m+d;if(v>e)return{numerator:i*o,denominator:m};if(n=o,d=m,o=W,m=v,h=1/(h-S),!isFinite(h))break}return{numerator:i*o,denominator:m}},Zn=function*(t){for(const e in t){const i=t[e];i!==void 0&&(yield{key:e,value:i})}};/*!
286
286
  * Copyright (c) 2025-present, Vanilagy and contributors
287
287
  *
288
288
  * This Source Code Form is subject to the terms of the Mozilla Public
289
289
  * License, v. 2.0. If a copy of the MPL was not distributed with this
290
290
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
291
- */class Zn{constructor(e,i){if(this.data=e,this.mimeType=i,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(typeof i!="string")throw new TypeError("mimeType must be a string.")}}class Ca{constructor(e,i,n,d){if(this.data=e,this.mimeType=i,this.name=n,this.description=d,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(i!==void 0&&typeof i!="string")throw new TypeError("mimeType, when provided, must be a string.");if(n!==void 0&&typeof n!="string")throw new TypeError("name, when provided, must be a string.");if(d!==void 0&&typeof d!="string")throw new TypeError("description, when provided, must be a string.")}}const ga=t=>{if(!t||typeof t!="object")throw new TypeError("tags must be an object.");if(t.title!==void 0&&typeof t.title!="string")throw new TypeError("tags.title, when provided, must be a string.");if(t.description!==void 0&&typeof t.description!="string")throw new TypeError("tags.description, when provided, must be a string.");if(t.artist!==void 0&&typeof t.artist!="string")throw new TypeError("tags.artist, when provided, must be a string.");if(t.album!==void 0&&typeof t.album!="string")throw new TypeError("tags.album, when provided, must be a string.");if(t.albumArtist!==void 0&&typeof t.albumArtist!="string")throw new TypeError("tags.albumArtist, when provided, must be a string.");if(t.trackNumber!==void 0&&(!Number.isInteger(t.trackNumber)||t.trackNumber<=0))throw new TypeError("tags.trackNumber, when provided, must be a positive integer.");if(t.tracksTotal!==void 0&&(!Number.isInteger(t.tracksTotal)||t.tracksTotal<=0))throw new TypeError("tags.tracksTotal, when provided, must be a positive integer.");if(t.discNumber!==void 0&&(!Number.isInteger(t.discNumber)||t.discNumber<=0))throw new TypeError("tags.discNumber, when provided, must be a positive integer.");if(t.discsTotal!==void 0&&(!Number.isInteger(t.discsTotal)||t.discsTotal<=0))throw new TypeError("tags.discsTotal, when provided, must be a positive integer.");if(t.genre!==void 0&&typeof t.genre!="string")throw new TypeError("tags.genre, when provided, must be a string.");if(t.date!==void 0&&(!(t.date instanceof Date)||Number.isNaN(t.date.getTime())))throw new TypeError("tags.date, when provided, must be a valid Date.");if(t.lyrics!==void 0&&typeof t.lyrics!="string")throw new TypeError("tags.lyrics, when provided, must be a string.");if(t.images!==void 0){if(!Array.isArray(t.images))throw new TypeError("tags.images, when provided, must be an array.");for(const e of t.images){if(!e||typeof e!="object")throw new TypeError("Each image in tags.images must be an object.");if(!(e.data instanceof Uint8Array))throw new TypeError("Each image.data must be a Uint8Array.");if(typeof e.mimeType!="string")throw new TypeError("Each image.mimeType must be a string.");if(!["coverFront","coverBack","unknown"].includes(e.kind))throw new TypeError("Each image.kind must be 'coverFront', 'coverBack', or 'unknown'.")}}if(t.comment!==void 0&&typeof t.comment!="string")throw new TypeError("tags.comment, when provided, must be a string.");if(t.raw!==void 0){if(!t.raw||typeof t.raw!="object")throw new TypeError("tags.raw, when provided, must be an object.");for(const e of Object.values(t.raw))if(e!==null&&typeof e!="string"&&!(e instanceof Uint8Array)&&!(e instanceof Zn)&&!(e instanceof Ca))throw new TypeError("Each value in tags.raw must be a string, Uint8Array, RichImageData, AttachedFile, or null.")}},Fa=t=>{if(!t||typeof t!="object")throw new TypeError("disposition must be an object.");if(t.default!==void 0&&typeof t.default!="boolean")throw new TypeError("disposition.default must be a boolean.");if(t.forced!==void 0&&typeof t.forced!="boolean")throw new TypeError("disposition.forced must be a boolean.");if(t.original!==void 0&&typeof t.original!="boolean")throw new TypeError("disposition.original must be a boolean.");if(t.commentary!==void 0&&typeof t.commentary!="boolean")throw new TypeError("disposition.commentary must be a boolean.");if(t.hearingImpaired!==void 0&&typeof t.hearingImpaired!="boolean")throw new TypeError("disposition.hearingImpaired must be a boolean.");if(t.visuallyImpaired!==void 0&&typeof t.visuallyImpaired!="boolean")throw new TypeError("disposition.visuallyImpaired must be a boolean.")};/*!
291
+ */class Xn{constructor(e,i){if(this.data=e,this.mimeType=i,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(typeof i!="string")throw new TypeError("mimeType must be a string.")}}class Fa{constructor(e,i,n,d){if(this.data=e,this.mimeType=i,this.name=n,this.description=d,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(i!==void 0&&typeof i!="string")throw new TypeError("mimeType, when provided, must be a string.");if(n!==void 0&&typeof n!="string")throw new TypeError("name, when provided, must be a string.");if(d!==void 0&&typeof d!="string")throw new TypeError("description, when provided, must be a string.")}}const Ja=t=>{if(!t||typeof t!="object")throw new TypeError("tags must be an object.");if(t.title!==void 0&&typeof t.title!="string")throw new TypeError("tags.title, when provided, must be a string.");if(t.description!==void 0&&typeof t.description!="string")throw new TypeError("tags.description, when provided, must be a string.");if(t.artist!==void 0&&typeof t.artist!="string")throw new TypeError("tags.artist, when provided, must be a string.");if(t.album!==void 0&&typeof t.album!="string")throw new TypeError("tags.album, when provided, must be a string.");if(t.albumArtist!==void 0&&typeof t.albumArtist!="string")throw new TypeError("tags.albumArtist, when provided, must be a string.");if(t.trackNumber!==void 0&&(!Number.isInteger(t.trackNumber)||t.trackNumber<=0))throw new TypeError("tags.trackNumber, when provided, must be a positive integer.");if(t.tracksTotal!==void 0&&(!Number.isInteger(t.tracksTotal)||t.tracksTotal<=0))throw new TypeError("tags.tracksTotal, when provided, must be a positive integer.");if(t.discNumber!==void 0&&(!Number.isInteger(t.discNumber)||t.discNumber<=0))throw new TypeError("tags.discNumber, when provided, must be a positive integer.");if(t.discsTotal!==void 0&&(!Number.isInteger(t.discsTotal)||t.discsTotal<=0))throw new TypeError("tags.discsTotal, when provided, must be a positive integer.");if(t.genre!==void 0&&typeof t.genre!="string")throw new TypeError("tags.genre, when provided, must be a string.");if(t.date!==void 0&&(!(t.date instanceof Date)||Number.isNaN(t.date.getTime())))throw new TypeError("tags.date, when provided, must be a valid Date.");if(t.lyrics!==void 0&&typeof t.lyrics!="string")throw new TypeError("tags.lyrics, when provided, must be a string.");if(t.images!==void 0){if(!Array.isArray(t.images))throw new TypeError("tags.images, when provided, must be an array.");for(const e of t.images){if(!e||typeof e!="object")throw new TypeError("Each image in tags.images must be an object.");if(!(e.data instanceof Uint8Array))throw new TypeError("Each image.data must be a Uint8Array.");if(typeof e.mimeType!="string")throw new TypeError("Each image.mimeType must be a string.");if(!["coverFront","coverBack","unknown"].includes(e.kind))throw new TypeError("Each image.kind must be 'coverFront', 'coverBack', or 'unknown'.")}}if(t.comment!==void 0&&typeof t.comment!="string")throw new TypeError("tags.comment, when provided, must be a string.");if(t.raw!==void 0){if(!t.raw||typeof t.raw!="object")throw new TypeError("tags.raw, when provided, must be an object.");for(const e of Object.values(t.raw))if(e!==null&&typeof e!="string"&&!(e instanceof Uint8Array)&&!(e instanceof Xn)&&!(e instanceof Fa))throw new TypeError("Each value in tags.raw must be a string, Uint8Array, RichImageData, AttachedFile, or null.")}},Ea=t=>{if(!t||typeof t!="object")throw new TypeError("disposition must be an object.");if(t.default!==void 0&&typeof t.default!="boolean")throw new TypeError("disposition.default must be a boolean.");if(t.forced!==void 0&&typeof t.forced!="boolean")throw new TypeError("disposition.forced must be a boolean.");if(t.original!==void 0&&typeof t.original!="boolean")throw new TypeError("disposition.original must be a boolean.");if(t.commentary!==void 0&&typeof t.commentary!="boolean")throw new TypeError("disposition.commentary must be a boolean.");if(t.hearingImpaired!==void 0&&typeof t.hearingImpaired!="boolean")throw new TypeError("disposition.hearingImpaired must be a boolean.");if(t.visuallyImpaired!==void 0&&typeof t.visuallyImpaired!="boolean")throw new TypeError("disposition.visuallyImpaired must be a boolean.")};/*!
292
292
  * Copyright (c) 2025-present, Vanilagy and contributors
293
293
  *
294
294
  * This Source Code Form is subject to the terms of the Mozilla Public
295
295
  * License, v. 2.0. If a copy of the MPL was not distributed with this
296
296
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
297
- */const O0=["avc","hevc","vp9","av1","vp8"],k0=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],Xn=["aac","opus","mp3","vorbis","flac"],ui=[...Xn,...k0],hi=["webvtt"],Ja=t=>{const e=t.split("."),d=(1<<7)+1,o=Number(e[1]),m=e[2],h=Number(m.slice(0,-1)),S=(o<<5)+h,W=m.slice(-1)==="H"?1:0,Z=Number(e[3])===8?0:1,O=0,w=e[4]?Number(e[4]):0,N=e[5]?Number(e[5][0]):1,J=e[5]?Number(e[5][1]):1,U=e[5]?Number(e[5][2]):0,k=(W<<7)+(Z<<6)+(O<<5)+(w<<4)+(N<<3)+(J<<2)+U;return[d,S,k,0]},Ea=/^pcm-([usf])(\d+)+(be)?$/,D0=t=>{if(ve(k0.includes(t)),t==="ulaw")return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if(t==="alaw")return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};const e=Ea.exec(t);ve(e);let i;e[1]==="u"?i="unsigned":e[1]==="s"?i="signed":i="float";const n=Number(e[2])/8,d=e[3]!=="be",o=t==="pcm-u8"?2**7:0;return{dataType:i,sampleSize:n,littleEndian:d,silentValue:o}},Na=["avc1","avc3","hev1","hvc1","vp8","vp09","av01"],Pa=/^(avc1|avc3)\.[0-9a-fA-F]{6}$/,Ua=/^(hev1|hvc1)\.(?:[ABC]?\d+)\.[0-9a-fA-F]{1,8}\.[LH]\d+(?:\.[0-9a-fA-F]{1,2}){0,6}$/,za=/^vp09(?:\.\d{2}){3}(?:(?:\.\d{2}){5})?$/,Aa=/^av01\.\d\.\d{2}[MH]\.\d{2}(?:\.\d\.\d{3}\.\d{2}\.\d{2}\.\d{2}\.\d)?$/,Oa=t=>{if(!t)throw new TypeError("Video chunk metadata must be provided.");if(typeof t!="object")throw new TypeError("Video chunk metadata must be an object.");if(!t.decoderConfig)throw new TypeError("Video chunk metadata must include a decoder configuration.");if(typeof t.decoderConfig!="object")throw new TypeError("Video chunk metadata decoder configuration must be an object.");if(typeof t.decoderConfig.codec!="string")throw new TypeError("Video chunk metadata decoder configuration must specify a codec string.");if(!Na.some(e=>t.decoderConfig.codec.startsWith(e)))throw new TypeError("Video chunk metadata decoder configuration codec string must be a valid video codec string as specified in the WebCodecs Codec Registry.");if(!Number.isInteger(t.decoderConfig.codedWidth)||t.decoderConfig.codedWidth<=0)throw new TypeError("Video chunk metadata decoder configuration must specify a valid codedWidth (positive integer).");if(!Number.isInteger(t.decoderConfig.codedHeight)||t.decoderConfig.codedHeight<=0)throw new TypeError("Video chunk metadata decoder configuration must specify a valid codedHeight (positive integer).");if(t.decoderConfig.description!==void 0&&!bn(t.decoderConfig.description))throw new TypeError("Video chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.");if(t.decoderConfig.colorSpace!==void 0){const{colorSpace:e}=t.decoderConfig;if(typeof e!="object")throw new TypeError("Video chunk metadata decoder configuration colorSpace, when provided, must be an object.");const i=Object.keys(qi);if(e.primaries!=null&&!i.includes(e.primaries))throw new TypeError(`Video chunk metadata decoder configuration colorSpace primaries, when defined, must be one of ${i.join(", ")}.`);const n=Object.keys(es);if(e.transfer!=null&&!n.includes(e.transfer))throw new TypeError(`Video chunk metadata decoder configuration colorSpace transfer, when defined, must be one of ${n.join(", ")}.`);const d=Object.keys(ts);if(e.matrix!=null&&!d.includes(e.matrix))throw new TypeError(`Video chunk metadata decoder configuration colorSpace matrix, when defined, must be one of ${d.join(", ")}.`);if(e.fullRange!=null&&typeof e.fullRange!="boolean")throw new TypeError("Video chunk metadata decoder configuration colorSpace fullRange, when defined, must be a boolean.")}if(t.decoderConfig.codec.startsWith("avc1")||t.decoderConfig.codec.startsWith("avc3")){if(!Pa.test(t.decoderConfig.codec))throw new TypeError("Video chunk metadata decoder configuration codec string for AVC must be a valid AVC codec string as specified in Section 3.4 of RFC 6381.")}else if(t.decoderConfig.codec.startsWith("hev1")||t.decoderConfig.codec.startsWith("hvc1")){if(!Ua.test(t.decoderConfig.codec))throw new TypeError("Video chunk metadata decoder configuration codec string for HEVC must be a valid HEVC codec string as specified in Section E.3 of ISO 14496-15.")}else if(t.decoderConfig.codec.startsWith("vp8")){if(t.decoderConfig.codec!=="vp8")throw new TypeError('Video chunk metadata decoder configuration codec string for VP8 must be "vp8".')}else if(t.decoderConfig.codec.startsWith("vp09")){if(!za.test(t.decoderConfig.codec))throw new TypeError('Video chunk metadata decoder configuration codec string for VP9 must be a valid VP9 codec string as specified in Section "Codecs Parameter String" of https://www.webmproject.org/vp9/mp4/.')}else if(t.decoderConfig.codec.startsWith("av01")&&!Aa.test(t.decoderConfig.codec))throw new TypeError('Video chunk metadata decoder configuration codec string for AV1 must be a valid AV1 codec string as specified in Section "Codecs Parameter String" of https://aomediacodec.github.io/av1-isobmff/.')},ja=["mp4a","mp3","opus","vorbis","flac","ulaw","alaw","pcm"],Qa=t=>{if(!t)throw new TypeError("Audio chunk metadata must be provided.");if(typeof t!="object")throw new TypeError("Audio chunk metadata must be an object.");if(!t.decoderConfig)throw new TypeError("Audio chunk metadata must include a decoder configuration.");if(typeof t.decoderConfig!="object")throw new TypeError("Audio chunk metadata decoder configuration must be an object.");if(typeof t.decoderConfig.codec!="string")throw new TypeError("Audio chunk metadata decoder configuration must specify a codec string.");if(!ja.some(e=>t.decoderConfig.codec.startsWith(e)))throw new TypeError("Audio chunk metadata decoder configuration codec string must be a valid audio codec string as specified in the WebCodecs Codec Registry.");if(!Number.isInteger(t.decoderConfig.sampleRate)||t.decoderConfig.sampleRate<=0)throw new TypeError("Audio chunk metadata decoder configuration must specify a valid sampleRate (positive integer).");if(!Number.isInteger(t.decoderConfig.numberOfChannels)||t.decoderConfig.numberOfChannels<=0)throw new TypeError("Audio chunk metadata decoder configuration must specify a valid numberOfChannels (positive integer).");if(t.decoderConfig.description!==void 0&&!bn(t.decoderConfig.description))throw new TypeError("Audio chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.");if(t.decoderConfig.codec.startsWith("mp4a")&&t.decoderConfig.codec!=="mp4a.69"&&t.decoderConfig.codec!=="mp4a.6B"&&t.decoderConfig.codec!=="mp4a.6b"){if(!["mp4a.40.2","mp4a.40.02","mp4a.40.5","mp4a.40.05","mp4a.40.29","mp4a.67"].includes(t.decoderConfig.codec))throw new TypeError("Audio chunk metadata decoder configuration codec string for AAC must be a valid AAC codec string as specified in https://www.w3.org/TR/webcodecs-aac-codec-registration/.");if(!t.decoderConfig.description)throw new TypeError("Audio chunk metadata decoder configuration for AAC must include a description, which is expected to be an AudioSpecificConfig as specified in ISO 14496-3.")}else if(t.decoderConfig.codec.startsWith("mp3")||t.decoderConfig.codec.startsWith("mp4a")){if(t.decoderConfig.codec!=="mp3"&&t.decoderConfig.codec!=="mp4a.69"&&t.decoderConfig.codec!=="mp4a.6B"&&t.decoderConfig.codec!=="mp4a.6b")throw new TypeError('Audio chunk metadata decoder configuration codec string for MP3 must be "mp3", "mp4a.69" or "mp4a.6B".')}else if(t.decoderConfig.codec.startsWith("opus")){if(t.decoderConfig.codec!=="opus")throw new TypeError('Audio chunk metadata decoder configuration codec string for Opus must be "opus".');if(t.decoderConfig.description&&t.decoderConfig.description.byteLength<18)throw new TypeError("Audio chunk metadata decoder configuration description, when specified, is expected to be an Identification Header as specified in Section 5.1 of RFC 7845.")}else if(t.decoderConfig.codec.startsWith("vorbis")){if(t.decoderConfig.codec!=="vorbis")throw new TypeError('Audio chunk metadata decoder configuration codec string for Vorbis must be "vorbis".');if(!t.decoderConfig.description)throw new TypeError("Audio chunk metadata decoder configuration for Vorbis must include a description, which is expected to adhere to the format described in https://www.w3.org/TR/webcodecs-vorbis-codec-registration/.")}else if(t.decoderConfig.codec.startsWith("flac")){if(t.decoderConfig.codec!=="flac")throw new TypeError('Audio chunk metadata decoder configuration codec string for FLAC must be "flac".');if(!t.decoderConfig.description||t.decoderConfig.description.byteLength<42)throw new TypeError("Audio chunk metadata decoder configuration for FLAC must include a description, which is expected to adhere to the format described in https://www.w3.org/TR/webcodecs-flac-codec-registration/.")}else if((t.decoderConfig.codec.startsWith("pcm")||t.decoderConfig.codec.startsWith("ulaw")||t.decoderConfig.codec.startsWith("alaw"))&&!k0.includes(t.decoderConfig.codec))throw new TypeError(`Audio chunk metadata decoder configuration codec string for PCM must be one of the supported PCM codecs (${k0.join(", ")}).`)},Da=t=>{if(!t)throw new TypeError("Subtitle metadata must be provided.");if(typeof t!="object")throw new TypeError("Subtitle metadata must be an object.");if(!t.config)throw new TypeError("Subtitle metadata must include a config object.");if(typeof t.config!="object")throw new TypeError("Subtitle metadata config must be an object.");if(typeof t.config.description!="string")throw new TypeError("Subtitle metadata config description must be a string.")};/*!
297
+ */const O0=["avc","hevc","vp9","av1","vp8"],k0=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],_n=["aac","opus","mp3","vorbis","flac"],ui=[..._n,...k0],hi=["webvtt"],Na=t=>{const e=t.split("."),d=(1<<7)+1,o=Number(e[1]),m=e[2],h=Number(m.slice(0,-1)),S=(o<<5)+h,W=m.slice(-1)==="H"?1:0,Z=Number(e[3])===8?0:1,O=0,w=e[4]?Number(e[4]):0,N=e[5]?Number(e[5][0]):1,J=e[5]?Number(e[5][1]):1,U=e[5]?Number(e[5][2]):0,k=(W<<7)+(Z<<6)+(O<<5)+(w<<4)+(N<<3)+(J<<2)+U;return[d,S,k,0]},Pa=/^pcm-([usf])(\d+)+(be)?$/,D0=t=>{if(ve(k0.includes(t)),t==="ulaw")return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if(t==="alaw")return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};const e=Pa.exec(t);ve(e);let i;e[1]==="u"?i="unsigned":e[1]==="s"?i="signed":i="float";const n=Number(e[2])/8,d=e[3]!=="be",o=t==="pcm-u8"?2**7:0;return{dataType:i,sampleSize:n,littleEndian:d,silentValue:o}},Ua=["avc1","avc3","hev1","hvc1","vp8","vp09","av01"],za=/^(avc1|avc3)\.[0-9a-fA-F]{6}$/,Aa=/^(hev1|hvc1)\.(?:[ABC]?\d+)\.[0-9a-fA-F]{1,8}\.[LH]\d+(?:\.[0-9a-fA-F]{1,2}){0,6}$/,Oa=/^vp09(?:\.\d{2}){3}(?:(?:\.\d{2}){5})?$/,ja=/^av01\.\d\.\d{2}[MH]\.\d{2}(?:\.\d\.\d{3}\.\d{2}\.\d{2}\.\d{2}\.\d)?$/,Qa=t=>{if(!t)throw new TypeError("Video chunk metadata must be provided.");if(typeof t!="object")throw new TypeError("Video chunk metadata must be an object.");if(!t.decoderConfig)throw new TypeError("Video chunk metadata must include a decoder configuration.");if(typeof t.decoderConfig!="object")throw new TypeError("Video chunk metadata decoder configuration must be an object.");if(typeof t.decoderConfig.codec!="string")throw new TypeError("Video chunk metadata decoder configuration must specify a codec string.");if(!Ua.some(e=>t.decoderConfig.codec.startsWith(e)))throw new TypeError("Video chunk metadata decoder configuration codec string must be a valid video codec string as specified in the WebCodecs Codec Registry.");if(!Number.isInteger(t.decoderConfig.codedWidth)||t.decoderConfig.codedWidth<=0)throw new TypeError("Video chunk metadata decoder configuration must specify a valid codedWidth (positive integer).");if(!Number.isInteger(t.decoderConfig.codedHeight)||t.decoderConfig.codedHeight<=0)throw new TypeError("Video chunk metadata decoder configuration must specify a valid codedHeight (positive integer).");if(t.decoderConfig.description!==void 0&&!pn(t.decoderConfig.description))throw new TypeError("Video chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.");if(t.decoderConfig.colorSpace!==void 0){const{colorSpace:e}=t.decoderConfig;if(typeof e!="object")throw new TypeError("Video chunk metadata decoder configuration colorSpace, when provided, must be an object.");const i=Object.keys(qi);if(e.primaries!=null&&!i.includes(e.primaries))throw new TypeError(`Video chunk metadata decoder configuration colorSpace primaries, when defined, must be one of ${i.join(", ")}.`);const n=Object.keys(es);if(e.transfer!=null&&!n.includes(e.transfer))throw new TypeError(`Video chunk metadata decoder configuration colorSpace transfer, when defined, must be one of ${n.join(", ")}.`);const d=Object.keys(ts);if(e.matrix!=null&&!d.includes(e.matrix))throw new TypeError(`Video chunk metadata decoder configuration colorSpace matrix, when defined, must be one of ${d.join(", ")}.`);if(e.fullRange!=null&&typeof e.fullRange!="boolean")throw new TypeError("Video chunk metadata decoder configuration colorSpace fullRange, when defined, must be a boolean.")}if(t.decoderConfig.codec.startsWith("avc1")||t.decoderConfig.codec.startsWith("avc3")){if(!za.test(t.decoderConfig.codec))throw new TypeError("Video chunk metadata decoder configuration codec string for AVC must be a valid AVC codec string as specified in Section 3.4 of RFC 6381.")}else if(t.decoderConfig.codec.startsWith("hev1")||t.decoderConfig.codec.startsWith("hvc1")){if(!Aa.test(t.decoderConfig.codec))throw new TypeError("Video chunk metadata decoder configuration codec string for HEVC must be a valid HEVC codec string as specified in Section E.3 of ISO 14496-15.")}else if(t.decoderConfig.codec.startsWith("vp8")){if(t.decoderConfig.codec!=="vp8")throw new TypeError('Video chunk metadata decoder configuration codec string for VP8 must be "vp8".')}else if(t.decoderConfig.codec.startsWith("vp09")){if(!Oa.test(t.decoderConfig.codec))throw new TypeError('Video chunk metadata decoder configuration codec string for VP9 must be a valid VP9 codec string as specified in Section "Codecs Parameter String" of https://www.webmproject.org/vp9/mp4/.')}else if(t.decoderConfig.codec.startsWith("av01")&&!ja.test(t.decoderConfig.codec))throw new TypeError('Video chunk metadata decoder configuration codec string for AV1 must be a valid AV1 codec string as specified in Section "Codecs Parameter String" of https://aomediacodec.github.io/av1-isobmff/.')},Da=["mp4a","mp3","opus","vorbis","flac","ulaw","alaw","pcm"],$a=t=>{if(!t)throw new TypeError("Audio chunk metadata must be provided.");if(typeof t!="object")throw new TypeError("Audio chunk metadata must be an object.");if(!t.decoderConfig)throw new TypeError("Audio chunk metadata must include a decoder configuration.");if(typeof t.decoderConfig!="object")throw new TypeError("Audio chunk metadata decoder configuration must be an object.");if(typeof t.decoderConfig.codec!="string")throw new TypeError("Audio chunk metadata decoder configuration must specify a codec string.");if(!Da.some(e=>t.decoderConfig.codec.startsWith(e)))throw new TypeError("Audio chunk metadata decoder configuration codec string must be a valid audio codec string as specified in the WebCodecs Codec Registry.");if(!Number.isInteger(t.decoderConfig.sampleRate)||t.decoderConfig.sampleRate<=0)throw new TypeError("Audio chunk metadata decoder configuration must specify a valid sampleRate (positive integer).");if(!Number.isInteger(t.decoderConfig.numberOfChannels)||t.decoderConfig.numberOfChannels<=0)throw new TypeError("Audio chunk metadata decoder configuration must specify a valid numberOfChannels (positive integer).");if(t.decoderConfig.description!==void 0&&!pn(t.decoderConfig.description))throw new TypeError("Audio chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.");if(t.decoderConfig.codec.startsWith("mp4a")&&t.decoderConfig.codec!=="mp4a.69"&&t.decoderConfig.codec!=="mp4a.6B"&&t.decoderConfig.codec!=="mp4a.6b"){if(!["mp4a.40.2","mp4a.40.02","mp4a.40.5","mp4a.40.05","mp4a.40.29","mp4a.67"].includes(t.decoderConfig.codec))throw new TypeError("Audio chunk metadata decoder configuration codec string for AAC must be a valid AAC codec string as specified in https://www.w3.org/TR/webcodecs-aac-codec-registration/.");if(!t.decoderConfig.description)throw new TypeError("Audio chunk metadata decoder configuration for AAC must include a description, which is expected to be an AudioSpecificConfig as specified in ISO 14496-3.")}else if(t.decoderConfig.codec.startsWith("mp3")||t.decoderConfig.codec.startsWith("mp4a")){if(t.decoderConfig.codec!=="mp3"&&t.decoderConfig.codec!=="mp4a.69"&&t.decoderConfig.codec!=="mp4a.6B"&&t.decoderConfig.codec!=="mp4a.6b")throw new TypeError('Audio chunk metadata decoder configuration codec string for MP3 must be "mp3", "mp4a.69" or "mp4a.6B".')}else if(t.decoderConfig.codec.startsWith("opus")){if(t.decoderConfig.codec!=="opus")throw new TypeError('Audio chunk metadata decoder configuration codec string for Opus must be "opus".');if(t.decoderConfig.description&&t.decoderConfig.description.byteLength<18)throw new TypeError("Audio chunk metadata decoder configuration description, when specified, is expected to be an Identification Header as specified in Section 5.1 of RFC 7845.")}else if(t.decoderConfig.codec.startsWith("vorbis")){if(t.decoderConfig.codec!=="vorbis")throw new TypeError('Audio chunk metadata decoder configuration codec string for Vorbis must be "vorbis".');if(!t.decoderConfig.description)throw new TypeError("Audio chunk metadata decoder configuration for Vorbis must include a description, which is expected to adhere to the format described in https://www.w3.org/TR/webcodecs-vorbis-codec-registration/.")}else if(t.decoderConfig.codec.startsWith("flac")){if(t.decoderConfig.codec!=="flac")throw new TypeError('Audio chunk metadata decoder configuration codec string for FLAC must be "flac".');if(!t.decoderConfig.description||t.decoderConfig.description.byteLength<42)throw new TypeError("Audio chunk metadata decoder configuration for FLAC must include a description, which is expected to adhere to the format described in https://www.w3.org/TR/webcodecs-flac-codec-registration/.")}else if((t.decoderConfig.codec.startsWith("pcm")||t.decoderConfig.codec.startsWith("ulaw")||t.decoderConfig.codec.startsWith("alaw"))&&!k0.includes(t.decoderConfig.codec))throw new TypeError(`Audio chunk metadata decoder configuration codec string for PCM must be one of the supported PCM codecs (${k0.join(", ")}).`)},qa=t=>{if(!t)throw new TypeError("Subtitle metadata must be provided.");if(typeof t!="object")throw new TypeError("Subtitle metadata must be an object.");if(!t.config)throw new TypeError("Subtitle metadata must include a config object.");if(typeof t.config!="object")throw new TypeError("Subtitle metadata config must be an object.");if(typeof t.config.description!="string")throw new TypeError("Subtitle metadata config description must be a string.")};/*!
298
298
  * Copyright (c) 2025-present, Vanilagy and contributors
299
299
  *
300
300
  * This Source Code Form is subject to the terms of the Mozilla Public
301
301
  * License, v. 2.0. If a copy of the MPL was not distributed with this
302
302
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
303
- */class $a{constructor(e){this.mutex=new pn,this.firstMediaStreamTimestamp=null,this.trackTimestampInfo=new WeakMap,this.output=e}onTrackClose(e){}validateAndNormalizeTimestamp(e,i,n){i+=e.source._timestampOffset;let d=this.trackTimestampInfo.get(e);if(!d){if(!n)throw new Error("First packet must be a key packet.");d={maxTimestamp:i,maxTimestampBeforeLastKeyPacket:i},this.trackTimestampInfo.set(e,d)}if(i<0)throw new Error(`Timestamps must be non-negative (got ${i}s).`);if(n&&(d.maxTimestampBeforeLastKeyPacket=d.maxTimestamp),i<d.maxTimestampBeforeLastKeyPacket)throw new Error(`Timestamps cannot be smaller than the largest timestamp of the previous GOP (a GOP begins with a key packet and ends right before the next key packet). Got ${i}s, but largest timestamp is ${d.maxTimestampBeforeLastKeyPacket}s.`);return d.maxTimestamp=Math.max(d.maxTimestamp,i),i}}/*!
303
+ */class el{constructor(e){this.mutex=new yn,this.firstMediaStreamTimestamp=null,this.trackTimestampInfo=new WeakMap,this.output=e}onTrackClose(e){}validateAndNormalizeTimestamp(e,i,n){i+=e.source._timestampOffset;let d=this.trackTimestampInfo.get(e);if(!d){if(!n)throw new Error("First packet must be a key packet.");d={maxTimestamp:i,maxTimestampBeforeLastKeyPacket:i},this.trackTimestampInfo.set(e,d)}if(i<0)throw new Error(`Timestamps must be non-negative (got ${i}s).`);if(n&&(d.maxTimestampBeforeLastKeyPacket=d.maxTimestamp),i<d.maxTimestampBeforeLastKeyPacket)throw new Error(`Timestamps cannot be smaller than the largest timestamp of the previous GOP (a GOP begins with a key packet and ends right before the next key packet). Got ${i}s, but largest timestamp is ${d.maxTimestampBeforeLastKeyPacket}s.`);return d.maxTimestamp=Math.max(d.maxTimestamp,i),i}}/*!
304
304
  * Copyright (c) 2025-present, Vanilagy and contributors
305
305
  *
306
306
  * This Source Code Form is subject to the terms of the Mozilla Public
307
307
  * License, v. 2.0. If a copy of the MPL was not distributed with this
308
308
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
309
- */var z0;(function(t){t[t.IDR=5]="IDR",t[t.SEI=6]="SEI",t[t.SPS=7]="SPS",t[t.PPS=8]="PPS",t[t.SPS_EXT=13]="SPS_EXT"})(z0||(z0={}));var Dt;(function(t){t[t.RASL_N=8]="RASL_N",t[t.RASL_R=9]="RASL_R",t[t.BLA_W_LP=16]="BLA_W_LP",t[t.RSV_IRAP_VCL23=23]="RSV_IRAP_VCL23",t[t.VPS_NUT=32]="VPS_NUT",t[t.SPS_NUT=33]="SPS_NUT",t[t.PPS_NUT=34]="PPS_NUT",t[t.PREFIX_SEI_NUT=39]="PREFIX_SEI_NUT",t[t.SUFFIX_SEI_NUT=40]="SUFFIX_SEI_NUT"})(Dt||(Dt={}));const is=t=>{const e=[];let i=0;for(;i<t.length;){let n=-1,d=0;for(let o=i;o<t.length-3;o++){if(t[o]===0&&t[o+1]===0&&t[o+2]===1){n=o,d=3;break}if(o<t.length-4&&t[o]===0&&t[o+1]===0&&t[o+2]===0&&t[o+3]===1){n=o,d=4;break}}if(n===-1)break;if(i>0&&n>i){const o=t.subarray(i,n);o.length>0&&e.push(o)}i=n+d}if(i<t.length){const n=t.subarray(i);n.length>0&&e.push(n)}return e},ji=t=>{const e=[],i=t.length;for(let n=0;n<i;n++)n+2<i&&t[n]===0&&t[n+1]===0&&t[n+2]===3?(e.push(0,0),n+=2):e.push(t[n]);return new Uint8Array(e)},qa=(t,e)=>{const i=t.reduce((o,m)=>o+e+m.byteLength,0),n=new Uint8Array(i);let d=0;for(const o of t){const m=new DataView(n.buffer,n.byteOffset,n.byteLength);switch(e){case 1:m.setUint8(d,o.byteLength);break;case 2:m.setUint16(d,o.byteLength,!1);break;case 3:wa(m,d,o.byteLength);break;case 4:m.setUint32(d,o.byteLength,!1);break}d+=e,n.set(o,d),d+=o.byteLength}return n},gi=t=>t[0]&31,el=t=>{try{const e=is(t),i=e.filter(S=>gi(S)===z0.SPS),n=e.filter(S=>gi(S)===z0.PPS),d=e.filter(S=>gi(S)===z0.SPS_EXT);if(i.length===0||n.length===0)return null;const o=i[0],m=il(o);ve(m!==null);const h=m.profileIdc===100||m.profileIdc===110||m.profileIdc===122||m.profileIdc===144;return{configurationVersion:1,avcProfileIndication:m.profileIdc,profileCompatibility:m.constraintFlags,avcLevelIndication:m.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:i,pictureParameterSets:n,chromaFormat:h?m.chromaFormatIdc:null,bitDepthLumaMinus8:h?m.bitDepthLumaMinus8:null,bitDepthChromaMinus8:h?m.bitDepthChromaMinus8:null,sequenceParameterSetExt:h?d:null}}catch(e){return console.error("Error building AVC Decoder Configuration Record:",e),null}},tl=t=>{const e=[];e.push(t.configurationVersion),e.push(t.avcProfileIndication),e.push(t.profileCompatibility),e.push(t.avcLevelIndication),e.push(252|t.lengthSizeMinusOne&3),e.push(224|t.sequenceParameterSets.length&31);for(const i of t.sequenceParameterSets){const n=i.byteLength;e.push(n>>8),e.push(n&255);for(let d=0;d<n;d++)e.push(i[d])}e.push(t.pictureParameterSets.length);for(const i of t.pictureParameterSets){const n=i.byteLength;e.push(n>>8),e.push(n&255);for(let d=0;d<n;d++)e.push(i[d])}if(t.avcProfileIndication===100||t.avcProfileIndication===110||t.avcProfileIndication===122||t.avcProfileIndication===144){ve(t.chromaFormat!==null),ve(t.bitDepthLumaMinus8!==null),ve(t.bitDepthChromaMinus8!==null),ve(t.sequenceParameterSetExt!==null),e.push(252|t.chromaFormat&3),e.push(248|t.bitDepthLumaMinus8&7),e.push(248|t.bitDepthChromaMinus8&7),e.push(t.sequenceParameterSetExt.length);for(const i of t.sequenceParameterSetExt){const n=i.byteLength;e.push(n>>8),e.push(n&255);for(let d=0;d<n;d++)e.push(i[d])}}return new Uint8Array(e)},il=t=>{try{const e=new A0(ji(t));if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;const n=e.readAlignedByte(),d=e.readAlignedByte(),o=e.readAlignedByte();ye(e);let m=null,h=null,S=null;if((n===100||n===110||n===122||n===244||n===44||n===83||n===86||n===118||n===128)&&(m=ye(e),m===3&&e.skipBits(1),h=ye(e),S=ye(e),e.skipBits(1),e.readBits(1))){for(let O=0;O<(m!==3?8:12);O++)if(e.readBits(1)){const N=O<6?16:64;let J=8,U=8;for(let k=0;k<N;k++){if(U!==0){const I=s0(e);U=(J+I+256)%256}J=U===0?J:U}}}ye(e);const W=ye(e);if(W===0)ye(e);else if(W===1){e.skipBits(1),s0(e),s0(e);const Z=ye(e);for(let O=0;O<Z;O++)s0(e)}ye(e),e.skipBits(1),ye(e),ye(e);const v=e.readBits(1);return{profileIdc:n,constraintFlags:d,levelIdc:o,frameMbsOnlyFlag:v,chromaFormatIdc:m,bitDepthLumaMinus8:h,bitDepthChromaMinus8:S}}catch(e){return console.error("Error parsing AVC SPS:",e),null}},H0=t=>t[0]>>1&63,sl=t=>{try{const e=is(t),i=e.filter(u=>H0(u)===Dt.VPS_NUT),n=e.filter(u=>H0(u)===Dt.SPS_NUT),d=e.filter(u=>H0(u)===Dt.PPS_NUT),o=e.filter(u=>H0(u)===Dt.PREFIX_SEI_NUT||H0(u)===Dt.SUFFIX_SEI_NUT);if(n.length===0||d.length===0)return null;const m=n[0],h=new A0(ji(m));h.skipBits(16),h.readBits(4);const S=h.readBits(3),W=h.readBits(1),{general_profile_space:v,general_tier_flag:Z,general_profile_idc:O,general_profile_compatibility_flags:w,general_constraint_indicator_flags:N,general_level_idc:J}=nl(h,S);ye(h);const U=ye(h);U===3&&h.skipBits(1),ye(h),ye(h),h.readBits(1)&&(ye(h),ye(h),ye(h),ye(h));const k=ye(h),I=ye(h);ye(h);const K=h.readBits(1)?0:S;for(let u=K;u<=S;u++)ye(h),ye(h),ye(h);ye(h),ye(h),ye(h),ye(h),ye(h),ye(h),h.readBits(1)&&h.readBits(1)&&rl(h),h.skipBits(1),h.skipBits(1),h.readBits(1)&&(h.skipBits(4),h.skipBits(4),ye(h),ye(h),h.skipBits(1));const X=ye(h);if(al(h,X),h.readBits(1)){const u=ye(h);for(let l=0;l<u;l++)ye(h),h.skipBits(1)}h.skipBits(1),h.skipBits(1);let A=0;h.readBits(1)&&(A=ol(h,S));let T=0;if(d.length>0){const u=d[0],l=new A0(ji(u));l.skipBits(16),ye(l),ye(l),l.skipBits(1),l.skipBits(1),l.skipBits(3),l.skipBits(1),l.skipBits(1),ye(l),ye(l),s0(l),l.skipBits(1),l.skipBits(1),l.readBits(1)&&ye(l),s0(l),s0(l),l.skipBits(1),l.skipBits(1),l.skipBits(1),l.skipBits(1);const s=l.readBits(1),V=l.readBits(1);!s&&!V?T=0:s&&!V?T=2:!s&&V?T=3:T=0}const H=[...i.length?[{arrayCompleteness:1,nalUnitType:Dt.VPS_NUT,nalUnits:i}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:Dt.SPS_NUT,nalUnits:n}]:[],...d.length?[{arrayCompleteness:1,nalUnitType:Dt.PPS_NUT,nalUnits:d}]:[],...o.length?[{arrayCompleteness:1,nalUnitType:H0(o[0]),nalUnits:o}]:[]];return{configurationVersion:1,generalProfileSpace:v,generalTierFlag:Z,generalProfileIdc:O,generalProfileCompatibilityFlags:w,generalConstraintIndicatorFlags:N,generalLevelIdc:J,minSpatialSegmentationIdc:A,parallelismType:T,chromaFormatIdc:U,bitDepthLumaMinus8:k,bitDepthChromaMinus8:I,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:S+1,temporalIdNested:W,lengthSizeMinusOne:3,arrays:H}}catch(e){return console.error("Error building HEVC Decoder Configuration Record:",e),null}},nl=(t,e)=>{const i=t.readBits(2),n=t.readBits(1),d=t.readBits(5);let o=0;for(let v=0;v<32;v++)o=o<<1|t.readBits(1);const m=new Uint8Array(6);for(let v=0;v<6;v++)m[v]=t.readBits(8);const h=t.readBits(8),S=[],W=[];for(let v=0;v<e;v++)S.push(t.readBits(1)),W.push(t.readBits(1));if(e>0)for(let v=e;v<8;v++)t.skipBits(2);for(let v=0;v<e;v++)S[v]&&t.skipBits(88),W[v]&&t.skipBits(8);return{general_profile_space:i,general_tier_flag:n,general_profile_idc:d,general_profile_compatibility_flags:o,general_constraint_indicator_flags:m,general_level_idc:h}},rl=t=>{for(let e=0;e<4;e++)for(let i=0;i<(e===3?2:6);i++)if(!t.readBits(1))ye(t);else{const d=Math.min(64,1<<4+(e<<1));e>1&&s0(t);for(let o=0;o<d;o++)s0(t)}},al=(t,e)=>{const i=[];for(let n=0;n<e;n++)i[n]=ll(t,n,e,i)},ll=(t,e,i,n)=>{let d=0,o=0,m=0;if(e!==0&&(o=t.readBits(1)),o){if(e===i){const S=ye(t);m=e-(S+1)}else m=e-1;t.readBits(1),ye(t);const h=n[m]??0;for(let S=0;S<=h;S++)t.readBits(1)||t.readBits(1);d=n[m]}else{const h=ye(t),S=ye(t);for(let W=0;W<h;W++)ye(t),t.readBits(1);for(let W=0;W<S;W++)ye(t),t.readBits(1);d=h+S}return d},ol=(t,e)=>{if(t.readBits(1)&&t.readBits(8)===255&&(t.readBits(16),t.readBits(16)),t.readBits(1)&&t.readBits(1),t.readBits(1)&&(t.readBits(3),t.readBits(1),t.readBits(1)&&(t.readBits(8),t.readBits(8),t.readBits(8))),t.readBits(1)&&(ye(t),ye(t)),t.readBits(1),t.readBits(1),t.readBits(1),t.readBits(1)&&(ye(t),ye(t),ye(t),ye(t)),t.readBits(1)&&(t.readBits(32),t.readBits(32),t.readBits(1)&&ye(t),t.readBits(1)&&cl(t,!0,e)),t.readBits(1)){t.readBits(1),t.readBits(1),t.readBits(1);const i=ye(t);return ye(t),ye(t),ye(t),ye(t),i}return 0},cl=(t,e,i)=>{let n=!1,d=!1,o=!1;n=t.readBits(1)===1,d=t.readBits(1)===1,(n||d)&&(o=t.readBits(1)===1,o&&(t.readBits(8),t.readBits(5),t.readBits(1),t.readBits(5)),t.readBits(4),t.readBits(4),o&&t.readBits(4),t.readBits(5),t.readBits(5),t.readBits(5));for(let m=0;m<=i;m++){const h=t.readBits(1)===1;let S=!0;h||(S=t.readBits(1)===1);let W=!1;S?ye(t):W=t.readBits(1)===1;let v=1;W||(v=ye(t)+1),n&&Cs(t,v,o),d&&Cs(t,v,o)}},Cs=(t,e,i)=>{for(let n=0;n<e;n++)ye(t),ye(t),i&&(ye(t),ye(t)),t.readBits(1)},dl=t=>{const e=[];e.push(t.configurationVersion),e.push((t.generalProfileSpace&3)<<6|(t.generalTierFlag&1)<<5|t.generalProfileIdc&31),e.push(t.generalProfileCompatibilityFlags>>>24&255),e.push(t.generalProfileCompatibilityFlags>>>16&255),e.push(t.generalProfileCompatibilityFlags>>>8&255),e.push(t.generalProfileCompatibilityFlags&255),e.push(...t.generalConstraintIndicatorFlags),e.push(t.generalLevelIdc&255),e.push(240|t.minSpatialSegmentationIdc>>8&15),e.push(t.minSpatialSegmentationIdc&255),e.push(252|t.parallelismType&3),e.push(252|t.chromaFormatIdc&3),e.push(248|t.bitDepthLumaMinus8&7),e.push(248|t.bitDepthChromaMinus8&7),e.push(t.avgFrameRate>>8&255),e.push(t.avgFrameRate&255),e.push((t.constantFrameRate&3)<<6|(t.numTemporalLayers&7)<<3|(t.temporalIdNested&1)<<2|t.lengthSizeMinusOne&3),e.push(t.arrays.length&255);for(const i of t.arrays){e.push((i.arrayCompleteness&1)<<7|0|i.nalUnitType&63),e.push(i.nalUnits.length>>8&255),e.push(i.nalUnits.length&255);for(const n of i.nalUnits){e.push(n.length>>8&255),e.push(n.length&255);for(let d=0;d<n.length;d++)e.push(n[d])}}return new Uint8Array(e)},ml=t=>{const e=xa(t),i=e.getUint8(9),n=e.getUint16(10,!0),d=e.getUint32(12,!0),o=e.getInt16(16,!0),m=e.getUint8(18);let h=null;return m&&(h=t.subarray(19,21+i)),{outputChannelCount:i,preSkip:n,inputSampleRate:d,outputGain:o,channelMappingFamily:m,channelMappingTable:h}};var gs;(function(t){t[t.STREAMINFO=0]="STREAMINFO",t[t.VORBIS_COMMENT=4]="VORBIS_COMMENT",t[t.PICTURE=6]="PICTURE"})(gs||(gs={}));/*!
309
+ */var z0;(function(t){t[t.IDR=5]="IDR",t[t.SEI=6]="SEI",t[t.SPS=7]="SPS",t[t.PPS=8]="PPS",t[t.SPS_EXT=13]="SPS_EXT"})(z0||(z0={}));var Dt;(function(t){t[t.RASL_N=8]="RASL_N",t[t.RASL_R=9]="RASL_R",t[t.BLA_W_LP=16]="BLA_W_LP",t[t.RSV_IRAP_VCL23=23]="RSV_IRAP_VCL23",t[t.VPS_NUT=32]="VPS_NUT",t[t.SPS_NUT=33]="SPS_NUT",t[t.PPS_NUT=34]="PPS_NUT",t[t.PREFIX_SEI_NUT=39]="PREFIX_SEI_NUT",t[t.SUFFIX_SEI_NUT=40]="SUFFIX_SEI_NUT"})(Dt||(Dt={}));const is=t=>{const e=[];let i=0;for(;i<t.length;){let n=-1,d=0;for(let o=i;o<t.length-3;o++){if(t[o]===0&&t[o+1]===0&&t[o+2]===1){n=o,d=3;break}if(o<t.length-4&&t[o]===0&&t[o+1]===0&&t[o+2]===0&&t[o+3]===1){n=o,d=4;break}}if(n===-1)break;if(i>0&&n>i){const o=t.subarray(i,n);o.length>0&&e.push(o)}i=n+d}if(i<t.length){const n=t.subarray(i);n.length>0&&e.push(n)}return e},ji=t=>{const e=[],i=t.length;for(let n=0;n<i;n++)n+2<i&&t[n]===0&&t[n+1]===0&&t[n+2]===3?(e.push(0,0),n+=2):e.push(t[n]);return new Uint8Array(e)},tl=(t,e)=>{const i=t.reduce((o,m)=>o+e+m.byteLength,0),n=new Uint8Array(i);let d=0;for(const o of t){const m=new DataView(n.buffer,n.byteOffset,n.byteLength);switch(e){case 1:m.setUint8(d,o.byteLength);break;case 2:m.setUint16(d,o.byteLength,!1);break;case 3:Ma(m,d,o.byteLength);break;case 4:m.setUint32(d,o.byteLength,!1);break}d+=e,n.set(o,d),d+=o.byteLength}return n},gi=t=>t[0]&31,il=t=>{try{const e=is(t),i=e.filter(S=>gi(S)===z0.SPS),n=e.filter(S=>gi(S)===z0.PPS),d=e.filter(S=>gi(S)===z0.SPS_EXT);if(i.length===0||n.length===0)return null;const o=i[0],m=nl(o);ve(m!==null);const h=m.profileIdc===100||m.profileIdc===110||m.profileIdc===122||m.profileIdc===144;return{configurationVersion:1,avcProfileIndication:m.profileIdc,profileCompatibility:m.constraintFlags,avcLevelIndication:m.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:i,pictureParameterSets:n,chromaFormat:h?m.chromaFormatIdc:null,bitDepthLumaMinus8:h?m.bitDepthLumaMinus8:null,bitDepthChromaMinus8:h?m.bitDepthChromaMinus8:null,sequenceParameterSetExt:h?d:null}}catch(e){return console.error("Error building AVC Decoder Configuration Record:",e),null}},sl=t=>{const e=[];e.push(t.configurationVersion),e.push(t.avcProfileIndication),e.push(t.profileCompatibility),e.push(t.avcLevelIndication),e.push(252|t.lengthSizeMinusOne&3),e.push(224|t.sequenceParameterSets.length&31);for(const i of t.sequenceParameterSets){const n=i.byteLength;e.push(n>>8),e.push(n&255);for(let d=0;d<n;d++)e.push(i[d])}e.push(t.pictureParameterSets.length);for(const i of t.pictureParameterSets){const n=i.byteLength;e.push(n>>8),e.push(n&255);for(let d=0;d<n;d++)e.push(i[d])}if(t.avcProfileIndication===100||t.avcProfileIndication===110||t.avcProfileIndication===122||t.avcProfileIndication===144){ve(t.chromaFormat!==null),ve(t.bitDepthLumaMinus8!==null),ve(t.bitDepthChromaMinus8!==null),ve(t.sequenceParameterSetExt!==null),e.push(252|t.chromaFormat&3),e.push(248|t.bitDepthLumaMinus8&7),e.push(248|t.bitDepthChromaMinus8&7),e.push(t.sequenceParameterSetExt.length);for(const i of t.sequenceParameterSetExt){const n=i.byteLength;e.push(n>>8),e.push(n&255);for(let d=0;d<n;d++)e.push(i[d])}}return new Uint8Array(e)},nl=t=>{try{const e=new A0(ji(t));if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;const n=e.readAlignedByte(),d=e.readAlignedByte(),o=e.readAlignedByte();ye(e);let m=null,h=null,S=null;if((n===100||n===110||n===122||n===244||n===44||n===83||n===86||n===118||n===128)&&(m=ye(e),m===3&&e.skipBits(1),h=ye(e),S=ye(e),e.skipBits(1),e.readBits(1))){for(let O=0;O<(m!==3?8:12);O++)if(e.readBits(1)){const N=O<6?16:64;let J=8,U=8;for(let k=0;k<N;k++){if(U!==0){const I=s0(e);U=(J+I+256)%256}J=U===0?J:U}}}ye(e);const W=ye(e);if(W===0)ye(e);else if(W===1){e.skipBits(1),s0(e),s0(e);const Z=ye(e);for(let O=0;O<Z;O++)s0(e)}ye(e),e.skipBits(1),ye(e),ye(e);const v=e.readBits(1);return{profileIdc:n,constraintFlags:d,levelIdc:o,frameMbsOnlyFlag:v,chromaFormatIdc:m,bitDepthLumaMinus8:h,bitDepthChromaMinus8:S}}catch(e){return console.error("Error parsing AVC SPS:",e),null}},H0=t=>t[0]>>1&63,rl=t=>{try{const e=is(t),i=e.filter(u=>H0(u)===Dt.VPS_NUT),n=e.filter(u=>H0(u)===Dt.SPS_NUT),d=e.filter(u=>H0(u)===Dt.PPS_NUT),o=e.filter(u=>H0(u)===Dt.PREFIX_SEI_NUT||H0(u)===Dt.SUFFIX_SEI_NUT);if(n.length===0||d.length===0)return null;const m=n[0],h=new A0(ji(m));h.skipBits(16),h.readBits(4);const S=h.readBits(3),W=h.readBits(1),{general_profile_space:v,general_tier_flag:Z,general_profile_idc:O,general_profile_compatibility_flags:w,general_constraint_indicator_flags:N,general_level_idc:J}=al(h,S);ye(h);const U=ye(h);U===3&&h.skipBits(1),ye(h),ye(h),h.readBits(1)&&(ye(h),ye(h),ye(h),ye(h));const k=ye(h),I=ye(h);ye(h);const K=h.readBits(1)?0:S;for(let u=K;u<=S;u++)ye(h),ye(h),ye(h);ye(h),ye(h),ye(h),ye(h),ye(h),ye(h),h.readBits(1)&&h.readBits(1)&&ll(h),h.skipBits(1),h.skipBits(1),h.readBits(1)&&(h.skipBits(4),h.skipBits(4),ye(h),ye(h),h.skipBits(1));const X=ye(h);if(ol(h,X),h.readBits(1)){const u=ye(h);for(let l=0;l<u;l++)ye(h),h.skipBits(1)}h.skipBits(1),h.skipBits(1);let A=0;h.readBits(1)&&(A=dl(h,S));let T=0;if(d.length>0){const u=d[0],l=new A0(ji(u));l.skipBits(16),ye(l),ye(l),l.skipBits(1),l.skipBits(1),l.skipBits(3),l.skipBits(1),l.skipBits(1),ye(l),ye(l),s0(l),l.skipBits(1),l.skipBits(1),l.readBits(1)&&ye(l),s0(l),s0(l),l.skipBits(1),l.skipBits(1),l.skipBits(1),l.skipBits(1);const s=l.readBits(1),V=l.readBits(1);!s&&!V?T=0:s&&!V?T=2:!s&&V?T=3:T=0}const H=[...i.length?[{arrayCompleteness:1,nalUnitType:Dt.VPS_NUT,nalUnits:i}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:Dt.SPS_NUT,nalUnits:n}]:[],...d.length?[{arrayCompleteness:1,nalUnitType:Dt.PPS_NUT,nalUnits:d}]:[],...o.length?[{arrayCompleteness:1,nalUnitType:H0(o[0]),nalUnits:o}]:[]];return{configurationVersion:1,generalProfileSpace:v,generalTierFlag:Z,generalProfileIdc:O,generalProfileCompatibilityFlags:w,generalConstraintIndicatorFlags:N,generalLevelIdc:J,minSpatialSegmentationIdc:A,parallelismType:T,chromaFormatIdc:U,bitDepthLumaMinus8:k,bitDepthChromaMinus8:I,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:S+1,temporalIdNested:W,lengthSizeMinusOne:3,arrays:H}}catch(e){return console.error("Error building HEVC Decoder Configuration Record:",e),null}},al=(t,e)=>{const i=t.readBits(2),n=t.readBits(1),d=t.readBits(5);let o=0;for(let v=0;v<32;v++)o=o<<1|t.readBits(1);const m=new Uint8Array(6);for(let v=0;v<6;v++)m[v]=t.readBits(8);const h=t.readBits(8),S=[],W=[];for(let v=0;v<e;v++)S.push(t.readBits(1)),W.push(t.readBits(1));if(e>0)for(let v=e;v<8;v++)t.skipBits(2);for(let v=0;v<e;v++)S[v]&&t.skipBits(88),W[v]&&t.skipBits(8);return{general_profile_space:i,general_tier_flag:n,general_profile_idc:d,general_profile_compatibility_flags:o,general_constraint_indicator_flags:m,general_level_idc:h}},ll=t=>{for(let e=0;e<4;e++)for(let i=0;i<(e===3?2:6);i++)if(!t.readBits(1))ye(t);else{const d=Math.min(64,1<<4+(e<<1));e>1&&s0(t);for(let o=0;o<d;o++)s0(t)}},ol=(t,e)=>{const i=[];for(let n=0;n<e;n++)i[n]=cl(t,n,e,i)},cl=(t,e,i,n)=>{let d=0,o=0,m=0;if(e!==0&&(o=t.readBits(1)),o){if(e===i){const S=ye(t);m=e-(S+1)}else m=e-1;t.readBits(1),ye(t);const h=n[m]??0;for(let S=0;S<=h;S++)t.readBits(1)||t.readBits(1);d=n[m]}else{const h=ye(t),S=ye(t);for(let W=0;W<h;W++)ye(t),t.readBits(1);for(let W=0;W<S;W++)ye(t),t.readBits(1);d=h+S}return d},dl=(t,e)=>{if(t.readBits(1)&&t.readBits(8)===255&&(t.readBits(16),t.readBits(16)),t.readBits(1)&&t.readBits(1),t.readBits(1)&&(t.readBits(3),t.readBits(1),t.readBits(1)&&(t.readBits(8),t.readBits(8),t.readBits(8))),t.readBits(1)&&(ye(t),ye(t)),t.readBits(1),t.readBits(1),t.readBits(1),t.readBits(1)&&(ye(t),ye(t),ye(t),ye(t)),t.readBits(1)&&(t.readBits(32),t.readBits(32),t.readBits(1)&&ye(t),t.readBits(1)&&ml(t,!0,e)),t.readBits(1)){t.readBits(1),t.readBits(1),t.readBits(1);const i=ye(t);return ye(t),ye(t),ye(t),ye(t),i}return 0},ml=(t,e,i)=>{let n=!1,d=!1,o=!1;n=t.readBits(1)===1,d=t.readBits(1)===1,(n||d)&&(o=t.readBits(1)===1,o&&(t.readBits(8),t.readBits(5),t.readBits(1),t.readBits(5)),t.readBits(4),t.readBits(4),o&&t.readBits(4),t.readBits(5),t.readBits(5),t.readBits(5));for(let m=0;m<=i;m++){const h=t.readBits(1)===1;let S=!0;h||(S=t.readBits(1)===1);let W=!1;S?ye(t):W=t.readBits(1)===1;let v=1;W||(v=ye(t)+1),n&&Cs(t,v,o),d&&Cs(t,v,o)}},Cs=(t,e,i)=>{for(let n=0;n<e;n++)ye(t),ye(t),i&&(ye(t),ye(t)),t.readBits(1)},ul=t=>{const e=[];e.push(t.configurationVersion),e.push((t.generalProfileSpace&3)<<6|(t.generalTierFlag&1)<<5|t.generalProfileIdc&31),e.push(t.generalProfileCompatibilityFlags>>>24&255),e.push(t.generalProfileCompatibilityFlags>>>16&255),e.push(t.generalProfileCompatibilityFlags>>>8&255),e.push(t.generalProfileCompatibilityFlags&255),e.push(...t.generalConstraintIndicatorFlags),e.push(t.generalLevelIdc&255),e.push(240|t.minSpatialSegmentationIdc>>8&15),e.push(t.minSpatialSegmentationIdc&255),e.push(252|t.parallelismType&3),e.push(252|t.chromaFormatIdc&3),e.push(248|t.bitDepthLumaMinus8&7),e.push(248|t.bitDepthChromaMinus8&7),e.push(t.avgFrameRate>>8&255),e.push(t.avgFrameRate&255),e.push((t.constantFrameRate&3)<<6|(t.numTemporalLayers&7)<<3|(t.temporalIdNested&1)<<2|t.lengthSizeMinusOne&3),e.push(t.arrays.length&255);for(const i of t.arrays){e.push((i.arrayCompleteness&1)<<7|0|i.nalUnitType&63),e.push(i.nalUnits.length>>8&255),e.push(i.nalUnits.length&255);for(const n of i.nalUnits){e.push(n.length>>8&255),e.push(n.length&255);for(let d=0;d<n.length;d++)e.push(n[d])}}return new Uint8Array(e)},hl=t=>{const e=Ya(t),i=e.getUint8(9),n=e.getUint16(10,!0),d=e.getUint32(12,!0),o=e.getInt16(16,!0),m=e.getUint8(18);let h=null;return m&&(h=t.subarray(19,21+i)),{outputChannelCount:i,preSkip:n,inputSampleRate:d,outputGain:o,channelMappingFamily:m,channelMappingTable:h}};var gs;(function(t){t[t.STREAMINFO=0]="STREAMINFO",t[t.VORBIS_COMMENT=4]="VORBIS_COMMENT",t[t.PICTURE=6]="PICTURE"})(gs||(gs={}));/*!
310
310
  * Copyright (c) 2025-present, Vanilagy and contributors
311
311
  *
312
312
  * This Source Code Form is subject to the terms of the Mozilla Public
@@ -318,7 +318,7 @@ r÷|‹ú–“
318
318
  * This Source Code Form is subject to the terms of the Mozilla Public
319
319
  * License, v. 2.0. If a copy of the MPL was not distributed with this
320
320
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
321
- */const ul=t=>{let i=(t.hasVideo?"video/":t.hasAudio?"audio/":"application/")+(t.isQuickTime?"quicktime":"mp4");if(t.codecStrings.length>0){const n=[...new Set(t.codecStrings)];i+=`; codecs="${n.join(", ")}"`}return i};/*!
321
+ */const bl=t=>{let i=(t.hasVideo?"video/":t.hasAudio?"audio/":"application/")+(t.isQuickTime?"quicktime":"mp4");if(t.codecStrings.length>0){const n=[...new Set(t.codecStrings)];i+=`; codecs="${n.join(", ")}"`}return i};/*!
322
322
  * Copyright (c) 2025-present, Vanilagy and contributors
323
323
  *
324
324
  * This Source Code Form is subject to the terms of the Mozilla Public
@@ -330,46 +330,46 @@ r÷|‹ú–“
330
330
  * This Source Code Form is subject to the terms of the Mozilla Public
331
331
  * License, v. 2.0. If a copy of the MPL was not distributed with this
332
332
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
333
- */const Es=/<(?:(\d{2}):)?(\d{2}):(\d{2}).(\d{3})>/g,hl=t=>{const e=Math.floor(t/36e5),i=Math.floor(t%(60*60*1e3)/(60*1e3)),n=Math.floor(t%(60*1e3)/1e3),d=t%1e3;return e.toString().padStart(2,"0")+":"+i.toString().padStart(2,"0")+":"+n.toString().padStart(2,"0")+"."+d.toString().padStart(3,"0")};/*!
333
+ */const Es=/<(?:(\d{2}):)?(\d{2}):(\d{2}).(\d{3})>/g,pl=t=>{const e=Math.floor(t/36e5),i=Math.floor(t%(60*60*1e3)/(60*1e3)),n=Math.floor(t%(60*1e3)/1e3),d=t%1e3;return e.toString().padStart(2,"0")+":"+i.toString().padStart(2,"0")+":"+n.toString().padStart(2,"0")+"."+d.toString().padStart(3,"0")};/*!
334
334
  * Copyright (c) 2025-present, Vanilagy and contributors
335
335
  *
336
336
  * This Source Code Form is subject to the terms of the Mozilla Public
337
337
  * License, v. 2.0. If a copy of the MPL was not distributed with this
338
338
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
339
- */class Ns{constructor(e){this.writer=e,this.helper=new Uint8Array(8),this.helperView=new DataView(this.helper.buffer),this.offsets=new WeakMap}writeU32(e){this.helperView.setUint32(0,e,!1),this.writer.write(this.helper.subarray(0,4))}writeU64(e){this.helperView.setUint32(0,Math.floor(e/2**32),!1),this.helperView.setUint32(4,e,!1),this.writer.write(this.helper.subarray(0,8))}writeAscii(e){for(let i=0;i<e.length;i++)this.helperView.setUint8(i%8,e.charCodeAt(i)),i%8===7&&this.writer.write(this.helper);e.length%8!==0&&this.writer.write(this.helper.subarray(0,e.length%8))}writeBox(e){if(this.offsets.set(e,this.writer.getPos()),e.contents&&!e.children)this.writeBoxHeader(e,e.size??e.contents.byteLength+8),this.writer.write(e.contents);else{const i=this.writer.getPos();if(this.writeBoxHeader(e,0),e.contents&&this.writer.write(e.contents),e.children)for(const o of e.children)o&&this.writeBox(o);const n=this.writer.getPos(),d=e.size??n-i;this.writer.seek(i),this.writeBoxHeader(e,d),this.writer.seek(n)}}writeBoxHeader(e,i){this.writeU32(e.largeSize?1:i),this.writeAscii(e.type),e.largeSize&&this.writeU64(i)}measureBoxHeader(e){return 8+(e.largeSize?8:0)}patchBox(e){const i=this.offsets.get(e);ve(i!==void 0);const n=this.writer.getPos();this.writer.seek(i),this.writeBox(e),this.writer.seek(n)}measureBox(e){if(e.contents&&!e.children)return this.measureBoxHeader(e)+e.contents.byteLength;{let i=this.measureBoxHeader(e);if(e.contents&&(i+=e.contents.byteLength),e.children)for(const n of e.children)n&&(i+=this.measureBox(n));return i}}}const He=new Uint8Array(8),qt=new DataView(He.buffer),Ue=t=>[(t%256+256)%256],Se=t=>(qt.setUint16(0,t,!1),[He[0],He[1]]),_n=t=>(qt.setInt16(0,t,!1),[He[0],He[1]]),Sn=t=>(qt.setUint32(0,t,!1),[He[1],He[2],He[3]]),me=t=>(qt.setUint32(0,t,!1),[He[0],He[1],He[2],He[3]]),d0=t=>(qt.setInt32(0,t,!1),[He[0],He[1],He[2],He[3]]),V0=t=>(qt.setUint32(0,Math.floor(t/2**32),!1),qt.setUint32(4,t,!1),[He[0],He[1],He[2],He[3],He[4],He[5],He[6],He[7]]),Gn=t=>(qt.setInt16(0,2**8*t,!1),[He[0],He[1]]),i0=t=>(qt.setInt32(0,2**16*t,!1),[He[0],He[1],He[2],He[3]]),Ji=t=>(qt.setInt32(0,2**30*t,!1),[He[0],He[1],He[2],He[3]]),Ei=(t,e)=>{const i=[];let n=t;do{let d=n&127;n>>=7,i.length>0&&(d|=128),i.push(d)}while(n>0||e);return i.reverse()},at=(t,e=!1)=>{const i=Array(t.length).fill(null).map((n,d)=>t.charCodeAt(d));return e&&i.push(0),i},ss=t=>{let e=null;for(const i of t)(!e||i.timestamp>e.timestamp)&&(e=i);return e},vn=t=>{const e=t*(Math.PI/180),i=Math.round(Math.cos(e)),n=Math.round(Math.sin(e));return[i,n,0,-n,i,0,0,0,1]},In=vn(0),Vn=t=>[i0(t[0]),i0(t[1]),Ji(t[2]),i0(t[3]),i0(t[4]),Ji(t[5]),i0(t[6]),i0(t[7]),Ji(t[8])],Ge=(t,e,i)=>({type:t,contents:e&&new Uint8Array(e.flat(10)),children:i}),Ye=(t,e,i,n,d)=>Ge(t,[Ue(e),Sn(i),n??[]],d),bl=t=>t.isQuickTime?Ge("ftyp",[at("qt "),me(512),at("qt ")]):t.fragmented?Ge("ftyp",[at("iso5"),me(512),at("iso5"),at("iso6"),at("mp41")]):Ge("ftyp",[at("isom"),me(512),at("isom"),t.holdsAvc?at("avc1"):[],at("mp41")]),ci=t=>({type:"mdat",largeSize:t}),pl=t=>({type:"free",size:t}),U0=t=>Ge("moov",void 0,[yl(t.creationTime,t.trackDatas),...t.trackDatas.map(e=>fl(e,t.creationTime)),t.isFragmented?$l(t.trackDatas):null,m1(t)]),yl=(t,e)=>{const i=tt(Math.max(0,...e.filter(m=>m.samples.length>0).map(m=>{const h=ss(m.samples);return h.timestamp+h.duration})),Qi),n=Math.max(0,...e.map(m=>m.track.id))+1,d=!M0(t)||!M0(i),o=d?V0:me;return Ye("mvhd",+d,0,[o(t),o(t),me(Qi),o(i),i0(1),Gn(1),Array(10).fill(0),Vn(In),Array(24).fill(0),me(n)])},fl=(t,e)=>{const i=G1(t);return Ge("trak",void 0,[Zl(t,e),Xl(t,e),i.name!==void 0?Ge("udta",void 0,[Ge("name",[...$t.encode(i.name)])]):null])},Zl=(t,e)=>{var S;const i=ss(t.samples),n=tt(i?i.timestamp+i.duration:0,Qi),d=!M0(e)||!M0(n),o=d?V0:me;let m;if(t.type==="video"){const W=t.track.metadata.rotation;m=vn(W??0)}else m=In;let h=2;return((S=t.track.metadata.disposition)==null?void 0:S.default)!==!1&&(h|=1),Ye("tkhd",+d,h,[o(e),o(e),me(t.track.id),me(0),o(n),Array(8).fill(0),Se(0),Se(t.track.id),Gn(t.type==="audio"?1:0),Se(0),Vn(m),i0(t.type==="video"?t.info.width:0),i0(t.type==="video"?t.info.height:0)])},Xl=(t,e)=>Ge("mdia",void 0,[_l(t,e),ns(!0,Sl[t.type],Gl[t.type]),vl(t)]),_l=(t,e)=>{const i=ss(t.samples),n=tt(i?i.timestamp+i.duration:0,t.timescale),d=!M0(e)||!M0(n),o=d?V0:me;return Ye("mdhd",+d,0,[o(e),o(e),me(t.timescale),o(n),Se(Ln(t.track.metadata.languageCode??Ka)),Se(0)])},Sl={video:"vide",audio:"soun",subtitle:"text"},Gl={video:"MediabunnyVideoHandler",audio:"MediabunnySoundHandler",subtitle:"MediabunnyTextHandler"},ns=(t,e,i,n="\0\0\0\0")=>Ye("hdlr",0,0,[t?at("mhlr"):me(0),at(e),at(n),me(0),me(0),at(i,!0)]),vl=t=>Ge("minf",void 0,[Tl[t.type](),Wl(),Hl(t)]),Il=()=>Ye("vmhd",0,1,[Se(0),Se(0),Se(0),Se(0)]),Vl=()=>Ye("smhd",0,0,[Se(0),Se(0)]),Rl=()=>Ye("nmhd",0,0),Tl={video:Il,audio:Vl,subtitle:Rl},Wl=()=>Ge("dinf",void 0,[Ll()]),Ll=()=>Ye("dref",0,0,[me(1)],[xl()]),xl=()=>Ye("url ",0,1),Hl=t=>{const e=t.compositionTimeOffsetTable.length>1||t.compositionTimeOffsetTable.some(i=>i.sampleCompositionTimeOffset!==0);return Ge("stbl",void 0,[Yl(t),Ul(t),e?Ql(t):null,e?Dl(t):null,Al(t),Ol(t),jl(t),zl(t)])},Yl=t=>{let e;if(t.type==="video")e=wl(p1(t.track.source._codec,t.info.decoderConfig.codec),t);else if(t.type==="audio"){const i=Wn(t.track.source._codec,t.muxer.isQuickTime);ve(i),e=Cl(i,t)}else t.type==="subtitle"&&(e=Nl(Z1[t.track.source._codec],t));return ve(e),Ye("stsd",0,0,[me(1)],[e])},wl=(t,e)=>Ge(t,[Array(6).fill(0),Se(1),Se(0),Se(0),Array(12).fill(0),Se(e.info.width),Se(e.info.height),me(4718592),me(4718592),me(0),Se(1),Array(32).fill(0),Se(24),_n(65535)],[y1[e.track.source._codec](e),Ha(e.info.decoderConfig.colorSpace)?Kl(e):null]),Kl=t=>Ge("colr",[at("nclx"),Se(qi[t.info.decoderConfig.colorSpace.primaries]),Se(es[t.info.decoderConfig.colorSpace.transfer]),Se(ts[t.info.decoderConfig.colorSpace.matrix]),Ue((t.info.decoderConfig.colorSpace.fullRange?1:0)<<7)]),Ml=t=>t.info.decoderConfig&&Ge("avcC",[...Q0(t.info.decoderConfig.description)]),kl=t=>t.info.decoderConfig&&Ge("hvcC",[...Q0(t.info.decoderConfig.description)]),Ps=t=>{var O,w,N,J;if(!t.info.decoderConfig)return null;const e=t.info.decoderConfig,i=e.codec.split("."),n=Number(i[1]),d=Number(i[2]),o=Number(i[3]),m=i[4]?Number(i[4]):1,h=i[8]?Number(i[8]):Number(((O=e.colorSpace)==null?void 0:O.fullRange)??0),S=(o<<4)+(m<<1)+h,W=i[5]?Number(i[5]):(w=e.colorSpace)!=null&&w.primaries?qi[e.colorSpace.primaries]:2,v=i[6]?Number(i[6]):(N=e.colorSpace)!=null&&N.transfer?es[e.colorSpace.transfer]:2,Z=i[7]?Number(i[7]):(J=e.colorSpace)!=null&&J.matrix?ts[e.colorSpace.matrix]:2;return Ye("vpcC",1,0,[Ue(n),Ue(d),Ue(S),Ue(W),Ue(v),Ue(Z),Se(0)])},Bl=t=>Ge("av1C",Ja(t.info.decoderConfig.codec)),Cl=(t,e)=>{var o;let i=0,n,d=16;if(k0.includes(e.track.source._codec)){const m=e.track.source._codec,{sampleSize:h}=D0(m);d=8*h,d>16&&(i=1)}return i===0?n=[Array(6).fill(0),Se(1),Se(i),Se(0),me(0),Se(e.info.numberOfChannels),Se(d),Se(0),Se(0),Se(e.info.sampleRate<2**16?e.info.sampleRate:0),Se(0)]:n=[Array(6).fill(0),Se(1),Se(i),Se(0),me(0),Se(e.info.numberOfChannels),Se(Math.min(d,16)),Se(0),Se(0),Se(e.info.sampleRate<2**16?e.info.sampleRate:0),Se(0),me(1),me(d/8),me(e.info.numberOfChannels*d/8),me(2)],Ge(t,n,[((o=f1(e.track.source._codec,e.muxer.isQuickTime))==null?void 0:o(e))??null])},Ni=t=>{let e;switch(t.track.source._codec){case"aac":e=64;break;case"mp3":e=107;break;case"vorbis":e=221;break;default:throw new Error(`Unhandled audio codec: ${t.track.source._codec}`)}let i=[...Ue(e),...Ue(21),...Sn(0),...me(0),...me(0)];if(t.info.decoderConfig.description){const n=Q0(t.info.decoderConfig.description);i=[...i,...Ue(5),...Ei(n.byteLength),...n]}return i=[...Se(1),...Ue(0),...Ue(4),...Ei(i.length),...i,...Ue(6),...Ue(1),...Ue(2)],i=[...Ue(3),...Ei(i.length),...i],Ye("esds",0,0,i)},c0=t=>Ge("wave",void 0,[gl(t),Fl(t),Ge("\0\0\0\0")]),gl=t=>Ge("frma",[at(Wn(t.track.source._codec,t.muxer.isQuickTime))]),Fl=t=>{const{littleEndian:e}=D0(t.track.source._codec);return Ge("enda",[Se(+e)])},Jl=t=>{var S;let e=t.info.numberOfChannels,i=3840,n=t.info.sampleRate,d=0,o=0,m=new Uint8Array(0);const h=(S=t.info.decoderConfig)==null?void 0:S.description;if(h){ve(h.byteLength>=18);const W=Q0(h),v=ml(W);e=v.outputChannelCount,i=v.preSkip,n=v.inputSampleRate,d=v.outputGain,o=v.channelMappingFamily,v.channelMappingTable&&(m=v.channelMappingTable)}return Ge("dOps",[Ue(0),Ue(e),Se(i),me(n),_n(d),Ue(o),...m])},El=t=>{var n;const e=(n=t.info.decoderConfig)==null?void 0:n.description;ve(e);const i=Q0(e);return Ye("dfLa",0,0,[...i.subarray(4)])},jt=t=>{const{littleEndian:e,sampleSize:i}=D0(t.track.source._codec),n=+e;return Ye("pcmC",0,0,[Ue(n),Ue(8*i)])},Nl=(t,e)=>Ge(t,[Array(6).fill(0),Se(1)],[X1[e.track.source._codec](e)]),Pl=t=>Ge("vttC",[...$t.encode(t.info.config.description)]),Ul=t=>Ye("stts",0,0,[me(t.timeToSampleTable.length),t.timeToSampleTable.map(e=>[me(e.sampleCount),me(e.sampleDelta)])]),zl=t=>{if(t.samples.every(i=>i.type==="key"))return null;const e=[...t.samples.entries()].filter(([,i])=>i.type==="key");return Ye("stss",0,0,[me(e.length),e.map(([i])=>me(i+1))])},Al=t=>Ye("stsc",0,0,[me(t.compactlyCodedChunkTable.length),t.compactlyCodedChunkTable.map(e=>[me(e.firstChunk),me(e.samplesPerChunk),me(1)])]),Ol=t=>{if(t.type==="audio"&&t.info.requiresPcmTransformation){const{sampleSize:e}=D0(t.track.source._codec);return Ye("stsz",0,0,[me(e*t.info.numberOfChannels),me(t.samples.reduce((i,n)=>i+tt(n.duration,t.timescale),0))])}return Ye("stsz",0,0,[me(0),me(t.samples.length),t.samples.map(e=>me(e.size))])},jl=t=>t.finalizedChunks.length>0&&Y0(t.finalizedChunks).offset>=2**32?Ye("co64",0,0,[me(t.finalizedChunks.length),t.finalizedChunks.map(e=>V0(e.offset))]):Ye("stco",0,0,[me(t.finalizedChunks.length),t.finalizedChunks.map(e=>me(e.offset))]),Ql=t=>Ye("ctts",1,0,[me(t.compositionTimeOffsetTable.length),t.compositionTimeOffsetTable.map(e=>[me(e.sampleCount),d0(e.sampleCompositionTimeOffset)])]),Dl=t=>{let e=1/0,i=-1/0,n=1/0,d=-1/0;ve(t.compositionTimeOffsetTable.length>0),ve(t.samples.length>0);for(let m=0;m<t.compositionTimeOffsetTable.length;m++){const h=t.compositionTimeOffsetTable[m];e=Math.min(e,h.sampleCompositionTimeOffset),i=Math.max(i,h.sampleCompositionTimeOffset)}for(let m=0;m<t.samples.length;m++){const h=t.samples[m];n=Math.min(n,tt(h.timestamp,t.timescale)),d=Math.max(d,tt(h.timestamp+h.duration,t.timescale))}const o=Math.max(-e,0);return d>=2**31?null:Ye("cslg",0,0,[d0(o),d0(e),d0(i),d0(n),d0(d)])},$l=t=>Ge("mvex",void 0,t.map(ql)),ql=t=>Ye("trex",0,0,[me(t.track.id),me(1),me(0),me(0),me(0)]),Us=(t,e)=>Ge("moof",void 0,[e1(t),...e.map(t1)]),e1=t=>Ye("mfhd",0,0,[me(t)]),Rn=t=>{let e=0,i=0;const n=0,d=0,o=t.type==="delta";return i|=+o,o?e|=1:e|=2,e<<24|i<<16|n<<8|d},t1=t=>Ge("traf",void 0,[i1(t),s1(t),n1(t)]),i1=t=>{ve(t.currentChunk);let e=0;e|=8,e|=16,e|=32,e|=131072;const i=t.currentChunk.samples[1]??t.currentChunk.samples[0],n={duration:i.timescaleUnitsToNextSample,size:i.size,flags:Rn(i)};return Ye("tfhd",0,e,[me(t.track.id),me(n.duration),me(n.size),me(n.flags)])},s1=t=>(ve(t.currentChunk),Ye("tfdt",1,0,[V0(tt(t.currentChunk.startTimestamp,t.timescale))])),n1=t=>{ve(t.currentChunk);const e=t.currentChunk.samples.map(J=>J.timescaleUnitsToNextSample),i=t.currentChunk.samples.map(J=>J.size),n=t.currentChunk.samples.map(Rn),d=t.currentChunk.samples.map(J=>tt(J.timestamp-J.decodeTimestamp,t.timescale)),o=new Set(e),m=new Set(i),h=new Set(n),S=new Set(d),W=h.size===2&&n[0]!==n[1],v=o.size>1,Z=m.size>1,O=!W&&h.size>1,w=S.size>1||[...S].some(J=>J!==0);let N=0;return N|=1,N|=4*+W,N|=256*+v,N|=512*+Z,N|=1024*+O,N|=2048*+w,Ye("trun",1,N,[me(t.currentChunk.samples.length),me(t.currentChunk.offset-t.currentChunk.moofOffset||0),W?me(n[0]):[],t.currentChunk.samples.map((J,U)=>[v?me(e[U]):[],Z?me(i[U]):[],O?me(n[U]):[],w?d0(d[U]):[]])])},r1=t=>Ge("mfra",void 0,[...t.map(a1),l1()]),a1=(t,e)=>Ye("tfra",1,0,[me(t.track.id),me(63),me(t.finalizedChunks.length),t.finalizedChunks.map(n=>[V0(tt(n.samples[0].timestamp,t.timescale)),V0(n.moofOffset),me(e+1),me(1),me(1)])]),l1=()=>Ye("mfro",0,0,[me(0)]),o1=()=>Ge("vtte"),c1=(t,e,i,n,d)=>Ge("vttc",void 0,[d!==null?Ge("vsid",[d0(d)]):null,i!==null?Ge("iden",[...$t.encode(i)]):null,e!==null?Ge("ctim",[...$t.encode(hl(e))]):null,n!==null?Ge("sttg",[...$t.encode(n)]):null,Ge("payl",[...$t.encode(t)])]),d1=t=>Ge("vtta",[...$t.encode(t)]),m1=t=>{const e=[],i=t.format._options.metadataFormat??"auto",n=t.output._metadataTags;if(i==="mdir"||i==="auto"&&!t.isQuickTime){const d=h1(n);d&&e.push(d)}else if(i==="mdta"){const d=b1(n);d&&e.push(d)}else(i==="udta"||i==="auto"&&t.isQuickTime)&&u1(e,t.output._metadataTags);return e.length===0?null:Ge("udta",void 0,e)},u1=(t,e)=>{for(const{key:i,value:n}of fn(e))switch(i){case"title":t.push(Qt("©nam",n));break;case"description":t.push(Qt("©des",n));break;case"artist":t.push(Qt("©ART",n));break;case"album":t.push(Qt("©alb",n));break;case"albumArtist":t.push(Qt("albr",n));break;case"genre":t.push(Qt("©gen",n));break;case"date":t.push(Qt("©day",n.toISOString().slice(0,10)));break;case"comment":t.push(Qt("©cmt",n));break;case"lyrics":t.push(Qt("©lyr",n));break;case"raw":break;case"discNumber":case"discsTotal":case"trackNumber":case"tracksTotal":case"images":break;default:yn(i)}if(e.raw)for(const i in e.raw){const n=e.raw[i];n==null||i.length!==4||t.some(d=>d.type===i)||(typeof n=="string"?t.push(Qt(i,n)):n instanceof Uint8Array&&t.push(Ge(i,Array.from(n))))}},Qt=(t,e)=>{const i=$t.encode(e);return Ge(t,[Se(i.length),Se(Ln("und")),Array.from(i)])},zs={"image/jpeg":13,"image/png":14,"image/bmp":27},Tn=(t,e)=>{const i=[];for(const{key:n,value:d}of fn(t))switch(n){case"title":i.push({key:e?"title":"©nam",value:Pt(d)});break;case"description":i.push({key:e?"description":"©des",value:Pt(d)});break;case"artist":i.push({key:e?"artist":"©ART",value:Pt(d)});break;case"album":i.push({key:e?"album":"©alb",value:Pt(d)});break;case"albumArtist":i.push({key:e?"album_artist":"aART",value:Pt(d)});break;case"comment":i.push({key:e?"comment":"©cmt",value:Pt(d)});break;case"genre":i.push({key:e?"genre":"©gen",value:Pt(d)});break;case"lyrics":i.push({key:e?"lyrics":"©lyr",value:Pt(d)});break;case"date":i.push({key:e?"date":"©day",value:Pt(d.toISOString().slice(0,10))});break;case"images":for(const o of d)o.kind==="coverFront"&&i.push({key:"covr",value:Ge("data",[me(zs[o.mimeType]??0),me(0),Array.from(o.data)])});break;case"trackNumber":if(e){const o=t.tracksTotal!==void 0?`${d}/${t.tracksTotal}`:d.toString();i.push({key:"track",value:Pt(o)})}else i.push({key:"trkn",value:Ge("data",[me(0),me(0),Se(0),Se(d),Se(t.tracksTotal??0),Se(0)])});break;case"discNumber":e||i.push({key:"disc",value:Ge("data",[me(0),me(0),Se(0),Se(d),Se(t.discsTotal??0),Se(0)])});break;case"tracksTotal":case"discsTotal":break;case"raw":break;default:yn(n)}if(t.raw)for(const n in t.raw){const d=t.raw[n];d==null||!e&&n.length!==4||i.some(o=>o.key===n)||(typeof d=="string"?i.push({key:n,value:Pt(d)}):d instanceof Uint8Array?i.push({key:n,value:Ge("data",[me(0),me(0),Array.from(d)])}):d instanceof Zn&&i.push({key:n,value:Ge("data",[me(zs[d.mimeType]??0),me(0),Array.from(d.data)])}))}return i},h1=t=>{const e=Tn(t,!1);return e.length===0?null:Ye("meta",0,0,void 0,[ns(!1,"mdir","","appl"),Ge("ilst",void 0,e.map(i=>Ge(i.key,void 0,[i.value])))])},b1=t=>{const e=Tn(t,!0);return e.length===0?null:Ge("meta",void 0,[ns(!1,"mdta",""),Ye("keys",0,0,[me(e.length)],e.map(i=>Ge("mdta",[...$t.encode(i.key)]))),Ge("ilst",void 0,e.map((i,n)=>{const d=String.fromCharCode(...me(n+1));return Ge(d,void 0,[i.value])}))])},Pt=t=>Ge("data",[me(1),me(0),...$t.encode(t)]),p1=(t,e)=>{switch(t){case"avc":return e.startsWith("avc3")?"avc3":"avc1";case"hevc":return"hvc1";case"vp8":return"vp08";case"vp9":return"vp09";case"av1":return"av01"}},y1={avc:Ml,hevc:kl,vp8:Ps,vp9:Ps,av1:Bl},Wn=(t,e)=>{switch(t){case"aac":return"mp4a";case"mp3":return"mp4a";case"opus":return"Opus";case"vorbis":return"mp4a";case"flac":return"fLaC";case"ulaw":return"ulaw";case"alaw":return"alaw";case"pcm-u8":return"raw ";case"pcm-s8":return"sowt"}if(e)switch(t){case"pcm-s16":return"sowt";case"pcm-s16be":return"twos";case"pcm-s24":return"in24";case"pcm-s24be":return"in24";case"pcm-s32":return"in32";case"pcm-s32be":return"in32";case"pcm-f32":return"fl32";case"pcm-f32be":return"fl32";case"pcm-f64":return"fl64";case"pcm-f64be":return"fl64"}else switch(t){case"pcm-s16":return"ipcm";case"pcm-s16be":return"ipcm";case"pcm-s24":return"ipcm";case"pcm-s24be":return"ipcm";case"pcm-s32":return"ipcm";case"pcm-s32be":return"ipcm";case"pcm-f32":return"fpcm";case"pcm-f32be":return"fpcm";case"pcm-f64":return"fpcm";case"pcm-f64be":return"fpcm"}},f1=(t,e)=>{switch(t){case"aac":return Ni;case"mp3":return Ni;case"opus":return Jl;case"vorbis":return Ni;case"flac":return El}if(e)switch(t){case"pcm-s24":return c0;case"pcm-s24be":return c0;case"pcm-s32":return c0;case"pcm-s32be":return c0;case"pcm-f32":return c0;case"pcm-f32be":return c0;case"pcm-f64":return c0;case"pcm-f64be":return c0}else switch(t){case"pcm-s16":return jt;case"pcm-s16be":return jt;case"pcm-s24":return jt;case"pcm-s24be":return jt;case"pcm-s32":return jt;case"pcm-s32be":return jt;case"pcm-f32":return jt;case"pcm-f32be":return jt;case"pcm-f64":return jt;case"pcm-f64be":return jt}return null},Z1={webvtt:"wvtt"},X1={webvtt:Pl},Ln=t=>{ve(t.length===3);let e=0;for(let i=0;i<3;i++)e<<=5,e+=t.charCodeAt(i)-96;return e};/*!
339
+ */class Ns{constructor(e){this.writer=e,this.helper=new Uint8Array(8),this.helperView=new DataView(this.helper.buffer),this.offsets=new WeakMap}writeU32(e){this.helperView.setUint32(0,e,!1),this.writer.write(this.helper.subarray(0,4))}writeU64(e){this.helperView.setUint32(0,Math.floor(e/2**32),!1),this.helperView.setUint32(4,e,!1),this.writer.write(this.helper.subarray(0,8))}writeAscii(e){for(let i=0;i<e.length;i++)this.helperView.setUint8(i%8,e.charCodeAt(i)),i%8===7&&this.writer.write(this.helper);e.length%8!==0&&this.writer.write(this.helper.subarray(0,e.length%8))}writeBox(e){if(this.offsets.set(e,this.writer.getPos()),e.contents&&!e.children)this.writeBoxHeader(e,e.size??e.contents.byteLength+8),this.writer.write(e.contents);else{const i=this.writer.getPos();if(this.writeBoxHeader(e,0),e.contents&&this.writer.write(e.contents),e.children)for(const o of e.children)o&&this.writeBox(o);const n=this.writer.getPos(),d=e.size??n-i;this.writer.seek(i),this.writeBoxHeader(e,d),this.writer.seek(n)}}writeBoxHeader(e,i){this.writeU32(e.largeSize?1:i),this.writeAscii(e.type),e.largeSize&&this.writeU64(i)}measureBoxHeader(e){return 8+(e.largeSize?8:0)}patchBox(e){const i=this.offsets.get(e);ve(i!==void 0);const n=this.writer.getPos();this.writer.seek(i),this.writeBox(e),this.writer.seek(n)}measureBox(e){if(e.contents&&!e.children)return this.measureBoxHeader(e)+e.contents.byteLength;{let i=this.measureBoxHeader(e);if(e.contents&&(i+=e.contents.byteLength),e.children)for(const n of e.children)n&&(i+=this.measureBox(n));return i}}}const He=new Uint8Array(8),qt=new DataView(He.buffer),Ue=t=>[(t%256+256)%256],Se=t=>(qt.setUint16(0,t,!1),[He[0],He[1]]),Sn=t=>(qt.setInt16(0,t,!1),[He[0],He[1]]),Gn=t=>(qt.setUint32(0,t,!1),[He[1],He[2],He[3]]),me=t=>(qt.setUint32(0,t,!1),[He[0],He[1],He[2],He[3]]),d0=t=>(qt.setInt32(0,t,!1),[He[0],He[1],He[2],He[3]]),V0=t=>(qt.setUint32(0,Math.floor(t/2**32),!1),qt.setUint32(4,t,!1),[He[0],He[1],He[2],He[3],He[4],He[5],He[6],He[7]]),vn=t=>(qt.setInt16(0,2**8*t,!1),[He[0],He[1]]),i0=t=>(qt.setInt32(0,2**16*t,!1),[He[0],He[1],He[2],He[3]]),Ji=t=>(qt.setInt32(0,2**30*t,!1),[He[0],He[1],He[2],He[3]]),Ei=(t,e)=>{const i=[];let n=t;do{let d=n&127;n>>=7,i.length>0&&(d|=128),i.push(d)}while(n>0||e);return i.reverse()},at=(t,e=!1)=>{const i=Array(t.length).fill(null).map((n,d)=>t.charCodeAt(d));return e&&i.push(0),i},ss=t=>{let e=null;for(const i of t)(!e||i.timestamp>e.timestamp)&&(e=i);return e},In=t=>{const e=t*(Math.PI/180),i=Math.round(Math.cos(e)),n=Math.round(Math.sin(e));return[i,n,0,-n,i,0,0,0,1]},Vn=In(0),Rn=t=>[i0(t[0]),i0(t[1]),Ji(t[2]),i0(t[3]),i0(t[4]),Ji(t[5]),i0(t[6]),i0(t[7]),Ji(t[8])],Ge=(t,e,i)=>({type:t,contents:e&&new Uint8Array(e.flat(10)),children:i}),Ye=(t,e,i,n,d)=>Ge(t,[Ue(e),Gn(i),n??[]],d),yl=t=>t.isQuickTime?Ge("ftyp",[at("qt "),me(512),at("qt ")]):t.fragmented?Ge("ftyp",[at("iso5"),me(512),at("iso5"),at("iso6"),at("mp41")]):Ge("ftyp",[at("isom"),me(512),at("isom"),t.holdsAvc?at("avc1"):[],at("mp41")]),ci=t=>({type:"mdat",largeSize:t}),fl=t=>({type:"free",size:t}),U0=t=>Ge("moov",void 0,[Zl(t.creationTime,t.trackDatas),...t.trackDatas.map(e=>Xl(e,t.creationTime)),t.isFragmented?e1(t.trackDatas):null,h1(t)]),Zl=(t,e)=>{const i=tt(Math.max(0,...e.filter(m=>m.samples.length>0).map(m=>{const h=ss(m.samples);return h.timestamp+h.duration})),Qi),n=Math.max(0,...e.map(m=>m.track.id))+1,d=!M0(t)||!M0(i),o=d?V0:me;return Ye("mvhd",+d,0,[o(t),o(t),me(Qi),o(i),i0(1),vn(1),Array(10).fill(0),Rn(Vn),Array(24).fill(0),me(n)])},Xl=(t,e)=>{const i=I1(t);return Ge("trak",void 0,[_l(t,e),Sl(t,e),i.name!==void 0?Ge("udta",void 0,[Ge("name",[...$t.encode(i.name)])]):null])},_l=(t,e)=>{var S;const i=ss(t.samples),n=tt(i?i.timestamp+i.duration:0,Qi),d=!M0(e)||!M0(n),o=d?V0:me;let m;if(t.type==="video"){const W=t.track.metadata.rotation;m=In(W??0)}else m=Vn;let h=2;return((S=t.track.metadata.disposition)==null?void 0:S.default)!==!1&&(h|=1),Ye("tkhd",+d,h,[o(e),o(e),me(t.track.id),me(0),o(n),Array(8).fill(0),Se(0),Se(t.track.id),vn(t.type==="audio"?1:0),Se(0),Rn(m),i0(t.type==="video"?t.info.width:0),i0(t.type==="video"?t.info.height:0)])},Sl=(t,e)=>Ge("mdia",void 0,[Gl(t,e),ns(!0,vl[t.type],Il[t.type]),Vl(t)]),Gl=(t,e)=>{const i=ss(t.samples),n=tt(i?i.timestamp+i.duration:0,t.timescale),d=!M0(e)||!M0(n),o=d?V0:me;return Ye("mdhd",+d,0,[o(e),o(e),me(t.timescale),o(n),Se(xn(t.track.metadata.languageCode??ka)),Se(0)])},vl={video:"vide",audio:"soun",subtitle:"text"},Il={video:"MediabunnyVideoHandler",audio:"MediabunnySoundHandler",subtitle:"MediabunnyTextHandler"},ns=(t,e,i,n="\0\0\0\0")=>Ye("hdlr",0,0,[t?at("mhlr"):me(0),at(e),at(n),me(0),me(0),at(i,!0)]),Vl=t=>Ge("minf",void 0,[Ll[t.type](),xl(),wl(t)]),Rl=()=>Ye("vmhd",0,1,[Se(0),Se(0),Se(0),Se(0)]),Tl=()=>Ye("smhd",0,0,[Se(0),Se(0)]),Wl=()=>Ye("nmhd",0,0),Ll={video:Rl,audio:Tl,subtitle:Wl},xl=()=>Ge("dinf",void 0,[Hl()]),Hl=()=>Ye("dref",0,0,[me(1)],[Yl()]),Yl=()=>Ye("url ",0,1),wl=t=>{const e=t.compositionTimeOffsetTable.length>1||t.compositionTimeOffsetTable.some(i=>i.sampleCompositionTimeOffset!==0);return Ge("stbl",void 0,[Kl(t),Al(t),e?$l(t):null,e?ql(t):null,jl(t),Ql(t),Dl(t),Ol(t)])},Kl=t=>{let e;if(t.type==="video")e=Ml(f1(t.track.source._codec,t.info.decoderConfig.codec),t);else if(t.type==="audio"){const i=Ln(t.track.source._codec,t.muxer.isQuickTime);ve(i),e=Fl(i,t)}else t.type==="subtitle"&&(e=Ul(_1[t.track.source._codec],t));return ve(e),Ye("stsd",0,0,[me(1)],[e])},Ml=(t,e)=>Ge(t,[Array(6).fill(0),Se(1),Se(0),Se(0),Array(12).fill(0),Se(e.info.width),Se(e.info.height),me(4718592),me(4718592),me(0),Se(1),Array(32).fill(0),Se(24),Sn(65535)],[Z1[e.track.source._codec](e),wa(e.info.decoderConfig.colorSpace)?kl(e):null]),kl=t=>Ge("colr",[at("nclx"),Se(qi[t.info.decoderConfig.colorSpace.primaries]),Se(es[t.info.decoderConfig.colorSpace.transfer]),Se(ts[t.info.decoderConfig.colorSpace.matrix]),Ue((t.info.decoderConfig.colorSpace.fullRange?1:0)<<7)]),Bl=t=>t.info.decoderConfig&&Ge("avcC",[...Q0(t.info.decoderConfig.description)]),Cl=t=>t.info.decoderConfig&&Ge("hvcC",[...Q0(t.info.decoderConfig.description)]),Ps=t=>{var O,w,N,J;if(!t.info.decoderConfig)return null;const e=t.info.decoderConfig,i=e.codec.split("."),n=Number(i[1]),d=Number(i[2]),o=Number(i[3]),m=i[4]?Number(i[4]):1,h=i[8]?Number(i[8]):Number(((O=e.colorSpace)==null?void 0:O.fullRange)??0),S=(o<<4)+(m<<1)+h,W=i[5]?Number(i[5]):(w=e.colorSpace)!=null&&w.primaries?qi[e.colorSpace.primaries]:2,v=i[6]?Number(i[6]):(N=e.colorSpace)!=null&&N.transfer?es[e.colorSpace.transfer]:2,Z=i[7]?Number(i[7]):(J=e.colorSpace)!=null&&J.matrix?ts[e.colorSpace.matrix]:2;return Ye("vpcC",1,0,[Ue(n),Ue(d),Ue(S),Ue(W),Ue(v),Ue(Z),Se(0)])},gl=t=>Ge("av1C",Na(t.info.decoderConfig.codec)),Fl=(t,e)=>{var o;let i=0,n,d=16;if(k0.includes(e.track.source._codec)){const m=e.track.source._codec,{sampleSize:h}=D0(m);d=8*h,d>16&&(i=1)}return i===0?n=[Array(6).fill(0),Se(1),Se(i),Se(0),me(0),Se(e.info.numberOfChannels),Se(d),Se(0),Se(0),Se(e.info.sampleRate<2**16?e.info.sampleRate:0),Se(0)]:n=[Array(6).fill(0),Se(1),Se(i),Se(0),me(0),Se(e.info.numberOfChannels),Se(Math.min(d,16)),Se(0),Se(0),Se(e.info.sampleRate<2**16?e.info.sampleRate:0),Se(0),me(1),me(d/8),me(e.info.numberOfChannels*d/8),me(2)],Ge(t,n,[((o=X1(e.track.source._codec,e.muxer.isQuickTime))==null?void 0:o(e))??null])},Ni=t=>{let e;switch(t.track.source._codec){case"aac":e=64;break;case"mp3":e=107;break;case"vorbis":e=221;break;default:throw new Error(`Unhandled audio codec: ${t.track.source._codec}`)}let i=[...Ue(e),...Ue(21),...Gn(0),...me(0),...me(0)];if(t.info.decoderConfig.description){const n=Q0(t.info.decoderConfig.description);i=[...i,...Ue(5),...Ei(n.byteLength),...n]}return i=[...Se(1),...Ue(0),...Ue(4),...Ei(i.length),...i,...Ue(6),...Ue(1),...Ue(2)],i=[...Ue(3),...Ei(i.length),...i],Ye("esds",0,0,i)},c0=t=>Ge("wave",void 0,[Jl(t),El(t),Ge("\0\0\0\0")]),Jl=t=>Ge("frma",[at(Ln(t.track.source._codec,t.muxer.isQuickTime))]),El=t=>{const{littleEndian:e}=D0(t.track.source._codec);return Ge("enda",[Se(+e)])},Nl=t=>{var S;let e=t.info.numberOfChannels,i=3840,n=t.info.sampleRate,d=0,o=0,m=new Uint8Array(0);const h=(S=t.info.decoderConfig)==null?void 0:S.description;if(h){ve(h.byteLength>=18);const W=Q0(h),v=hl(W);e=v.outputChannelCount,i=v.preSkip,n=v.inputSampleRate,d=v.outputGain,o=v.channelMappingFamily,v.channelMappingTable&&(m=v.channelMappingTable)}return Ge("dOps",[Ue(0),Ue(e),Se(i),me(n),Sn(d),Ue(o),...m])},Pl=t=>{var n;const e=(n=t.info.decoderConfig)==null?void 0:n.description;ve(e);const i=Q0(e);return Ye("dfLa",0,0,[...i.subarray(4)])},jt=t=>{const{littleEndian:e,sampleSize:i}=D0(t.track.source._codec),n=+e;return Ye("pcmC",0,0,[Ue(n),Ue(8*i)])},Ul=(t,e)=>Ge(t,[Array(6).fill(0),Se(1)],[S1[e.track.source._codec](e)]),zl=t=>Ge("vttC",[...$t.encode(t.info.config.description)]),Al=t=>Ye("stts",0,0,[me(t.timeToSampleTable.length),t.timeToSampleTable.map(e=>[me(e.sampleCount),me(e.sampleDelta)])]),Ol=t=>{if(t.samples.every(i=>i.type==="key"))return null;const e=[...t.samples.entries()].filter(([,i])=>i.type==="key");return Ye("stss",0,0,[me(e.length),e.map(([i])=>me(i+1))])},jl=t=>Ye("stsc",0,0,[me(t.compactlyCodedChunkTable.length),t.compactlyCodedChunkTable.map(e=>[me(e.firstChunk),me(e.samplesPerChunk),me(1)])]),Ql=t=>{if(t.type==="audio"&&t.info.requiresPcmTransformation){const{sampleSize:e}=D0(t.track.source._codec);return Ye("stsz",0,0,[me(e*t.info.numberOfChannels),me(t.samples.reduce((i,n)=>i+tt(n.duration,t.timescale),0))])}return Ye("stsz",0,0,[me(0),me(t.samples.length),t.samples.map(e=>me(e.size))])},Dl=t=>t.finalizedChunks.length>0&&Y0(t.finalizedChunks).offset>=2**32?Ye("co64",0,0,[me(t.finalizedChunks.length),t.finalizedChunks.map(e=>V0(e.offset))]):Ye("stco",0,0,[me(t.finalizedChunks.length),t.finalizedChunks.map(e=>me(e.offset))]),$l=t=>Ye("ctts",1,0,[me(t.compositionTimeOffsetTable.length),t.compositionTimeOffsetTable.map(e=>[me(e.sampleCount),d0(e.sampleCompositionTimeOffset)])]),ql=t=>{let e=1/0,i=-1/0,n=1/0,d=-1/0;ve(t.compositionTimeOffsetTable.length>0),ve(t.samples.length>0);for(let m=0;m<t.compositionTimeOffsetTable.length;m++){const h=t.compositionTimeOffsetTable[m];e=Math.min(e,h.sampleCompositionTimeOffset),i=Math.max(i,h.sampleCompositionTimeOffset)}for(let m=0;m<t.samples.length;m++){const h=t.samples[m];n=Math.min(n,tt(h.timestamp,t.timescale)),d=Math.max(d,tt(h.timestamp+h.duration,t.timescale))}const o=Math.max(-e,0);return d>=2**31?null:Ye("cslg",0,0,[d0(o),d0(e),d0(i),d0(n),d0(d)])},e1=t=>Ge("mvex",void 0,t.map(t1)),t1=t=>Ye("trex",0,0,[me(t.track.id),me(1),me(0),me(0),me(0)]),Us=(t,e)=>Ge("moof",void 0,[i1(t),...e.map(s1)]),i1=t=>Ye("mfhd",0,0,[me(t)]),Tn=t=>{let e=0,i=0;const n=0,d=0,o=t.type==="delta";return i|=+o,o?e|=1:e|=2,e<<24|i<<16|n<<8|d},s1=t=>Ge("traf",void 0,[n1(t),r1(t),a1(t)]),n1=t=>{ve(t.currentChunk);let e=0;e|=8,e|=16,e|=32,e|=131072;const i=t.currentChunk.samples[1]??t.currentChunk.samples[0],n={duration:i.timescaleUnitsToNextSample,size:i.size,flags:Tn(i)};return Ye("tfhd",0,e,[me(t.track.id),me(n.duration),me(n.size),me(n.flags)])},r1=t=>(ve(t.currentChunk),Ye("tfdt",1,0,[V0(tt(t.currentChunk.startTimestamp,t.timescale))])),a1=t=>{ve(t.currentChunk);const e=t.currentChunk.samples.map(J=>J.timescaleUnitsToNextSample),i=t.currentChunk.samples.map(J=>J.size),n=t.currentChunk.samples.map(Tn),d=t.currentChunk.samples.map(J=>tt(J.timestamp-J.decodeTimestamp,t.timescale)),o=new Set(e),m=new Set(i),h=new Set(n),S=new Set(d),W=h.size===2&&n[0]!==n[1],v=o.size>1,Z=m.size>1,O=!W&&h.size>1,w=S.size>1||[...S].some(J=>J!==0);let N=0;return N|=1,N|=4*+W,N|=256*+v,N|=512*+Z,N|=1024*+O,N|=2048*+w,Ye("trun",1,N,[me(t.currentChunk.samples.length),me(t.currentChunk.offset-t.currentChunk.moofOffset||0),W?me(n[0]):[],t.currentChunk.samples.map((J,U)=>[v?me(e[U]):[],Z?me(i[U]):[],O?me(n[U]):[],w?d0(d[U]):[]])])},l1=t=>Ge("mfra",void 0,[...t.map(o1),c1()]),o1=(t,e)=>Ye("tfra",1,0,[me(t.track.id),me(63),me(t.finalizedChunks.length),t.finalizedChunks.map(n=>[V0(tt(n.samples[0].timestamp,t.timescale)),V0(n.moofOffset),me(e+1),me(1),me(1)])]),c1=()=>Ye("mfro",0,0,[me(0)]),d1=()=>Ge("vtte"),m1=(t,e,i,n,d)=>Ge("vttc",void 0,[d!==null?Ge("vsid",[d0(d)]):null,i!==null?Ge("iden",[...$t.encode(i)]):null,e!==null?Ge("ctim",[...$t.encode(pl(e))]):null,n!==null?Ge("sttg",[...$t.encode(n)]):null,Ge("payl",[...$t.encode(t)])]),u1=t=>Ge("vtta",[...$t.encode(t)]),h1=t=>{const e=[],i=t.format._options.metadataFormat??"auto",n=t.output._metadataTags;if(i==="mdir"||i==="auto"&&!t.isQuickTime){const d=p1(n);d&&e.push(d)}else if(i==="mdta"){const d=y1(n);d&&e.push(d)}else(i==="udta"||i==="auto"&&t.isQuickTime)&&b1(e,t.output._metadataTags);return e.length===0?null:Ge("udta",void 0,e)},b1=(t,e)=>{for(const{key:i,value:n}of Zn(e))switch(i){case"title":t.push(Qt("©nam",n));break;case"description":t.push(Qt("©des",n));break;case"artist":t.push(Qt("©ART",n));break;case"album":t.push(Qt("©alb",n));break;case"albumArtist":t.push(Qt("albr",n));break;case"genre":t.push(Qt("©gen",n));break;case"date":t.push(Qt("©day",n.toISOString().slice(0,10)));break;case"comment":t.push(Qt("©cmt",n));break;case"lyrics":t.push(Qt("©lyr",n));break;case"raw":break;case"discNumber":case"discsTotal":case"trackNumber":case"tracksTotal":case"images":break;default:fn(i)}if(e.raw)for(const i in e.raw){const n=e.raw[i];n==null||i.length!==4||t.some(d=>d.type===i)||(typeof n=="string"?t.push(Qt(i,n)):n instanceof Uint8Array&&t.push(Ge(i,Array.from(n))))}},Qt=(t,e)=>{const i=$t.encode(e);return Ge(t,[Se(i.length),Se(xn("und")),Array.from(i)])},zs={"image/jpeg":13,"image/png":14,"image/bmp":27},Wn=(t,e)=>{const i=[];for(const{key:n,value:d}of Zn(t))switch(n){case"title":i.push({key:e?"title":"©nam",value:Pt(d)});break;case"description":i.push({key:e?"description":"©des",value:Pt(d)});break;case"artist":i.push({key:e?"artist":"©ART",value:Pt(d)});break;case"album":i.push({key:e?"album":"©alb",value:Pt(d)});break;case"albumArtist":i.push({key:e?"album_artist":"aART",value:Pt(d)});break;case"comment":i.push({key:e?"comment":"©cmt",value:Pt(d)});break;case"genre":i.push({key:e?"genre":"©gen",value:Pt(d)});break;case"lyrics":i.push({key:e?"lyrics":"©lyr",value:Pt(d)});break;case"date":i.push({key:e?"date":"©day",value:Pt(d.toISOString().slice(0,10))});break;case"images":for(const o of d)o.kind==="coverFront"&&i.push({key:"covr",value:Ge("data",[me(zs[o.mimeType]??0),me(0),Array.from(o.data)])});break;case"trackNumber":if(e){const o=t.tracksTotal!==void 0?`${d}/${t.tracksTotal}`:d.toString();i.push({key:"track",value:Pt(o)})}else i.push({key:"trkn",value:Ge("data",[me(0),me(0),Se(0),Se(d),Se(t.tracksTotal??0),Se(0)])});break;case"discNumber":e||i.push({key:"disc",value:Ge("data",[me(0),me(0),Se(0),Se(d),Se(t.discsTotal??0),Se(0)])});break;case"tracksTotal":case"discsTotal":break;case"raw":break;default:fn(n)}if(t.raw)for(const n in t.raw){const d=t.raw[n];d==null||!e&&n.length!==4||i.some(o=>o.key===n)||(typeof d=="string"?i.push({key:n,value:Pt(d)}):d instanceof Uint8Array?i.push({key:n,value:Ge("data",[me(0),me(0),Array.from(d)])}):d instanceof Xn&&i.push({key:n,value:Ge("data",[me(zs[d.mimeType]??0),me(0),Array.from(d.data)])}))}return i},p1=t=>{const e=Wn(t,!1);return e.length===0?null:Ye("meta",0,0,void 0,[ns(!1,"mdir","","appl"),Ge("ilst",void 0,e.map(i=>Ge(i.key,void 0,[i.value])))])},y1=t=>{const e=Wn(t,!0);return e.length===0?null:Ge("meta",void 0,[ns(!1,"mdta",""),Ye("keys",0,0,[me(e.length)],e.map(i=>Ge("mdta",[...$t.encode(i.key)]))),Ge("ilst",void 0,e.map((i,n)=>{const d=String.fromCharCode(...me(n+1));return Ge(d,void 0,[i.value])}))])},Pt=t=>Ge("data",[me(1),me(0),...$t.encode(t)]),f1=(t,e)=>{switch(t){case"avc":return e.startsWith("avc3")?"avc3":"avc1";case"hevc":return"hvc1";case"vp8":return"vp08";case"vp9":return"vp09";case"av1":return"av01"}},Z1={avc:Bl,hevc:Cl,vp8:Ps,vp9:Ps,av1:gl},Ln=(t,e)=>{switch(t){case"aac":return"mp4a";case"mp3":return"mp4a";case"opus":return"Opus";case"vorbis":return"mp4a";case"flac":return"fLaC";case"ulaw":return"ulaw";case"alaw":return"alaw";case"pcm-u8":return"raw ";case"pcm-s8":return"sowt"}if(e)switch(t){case"pcm-s16":return"sowt";case"pcm-s16be":return"twos";case"pcm-s24":return"in24";case"pcm-s24be":return"in24";case"pcm-s32":return"in32";case"pcm-s32be":return"in32";case"pcm-f32":return"fl32";case"pcm-f32be":return"fl32";case"pcm-f64":return"fl64";case"pcm-f64be":return"fl64"}else switch(t){case"pcm-s16":return"ipcm";case"pcm-s16be":return"ipcm";case"pcm-s24":return"ipcm";case"pcm-s24be":return"ipcm";case"pcm-s32":return"ipcm";case"pcm-s32be":return"ipcm";case"pcm-f32":return"fpcm";case"pcm-f32be":return"fpcm";case"pcm-f64":return"fpcm";case"pcm-f64be":return"fpcm"}},X1=(t,e)=>{switch(t){case"aac":return Ni;case"mp3":return Ni;case"opus":return Nl;case"vorbis":return Ni;case"flac":return Pl}if(e)switch(t){case"pcm-s24":return c0;case"pcm-s24be":return c0;case"pcm-s32":return c0;case"pcm-s32be":return c0;case"pcm-f32":return c0;case"pcm-f32be":return c0;case"pcm-f64":return c0;case"pcm-f64be":return c0}else switch(t){case"pcm-s16":return jt;case"pcm-s16be":return jt;case"pcm-s24":return jt;case"pcm-s24be":return jt;case"pcm-s32":return jt;case"pcm-s32be":return jt;case"pcm-f32":return jt;case"pcm-f32be":return jt;case"pcm-f64":return jt;case"pcm-f64be":return jt}return null},_1={webvtt:"wvtt"},S1={webvtt:zl},xn=t=>{ve(t.length===3);let e=0;for(let i=0;i<3;i++)e<<=5,e+=t.charCodeAt(i)-96;return e};/*!
340
340
  * Copyright (c) 2025-present, Vanilagy and contributors
341
341
  *
342
342
  * This Source Code Form is subject to the terms of the Mozilla Public
343
343
  * License, v. 2.0. If a copy of the MPL was not distributed with this
344
344
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
345
- */class _1{constructor(){this.ensureMonotonicity=!1,this.trackedWrites=null,this.trackedStart=-1,this.trackedEnd=-1}start(){}maybeTrackWrites(e){if(!this.trackedWrites)return;let i=this.getPos();if(i<this.trackedStart){if(i+e.byteLength<=this.trackedStart)return;e=e.subarray(this.trackedStart-i),i=0}const n=i+e.byteLength-this.trackedStart;let d=this.trackedWrites.byteLength;for(;d<n;)d*=2;if(d!==this.trackedWrites.byteLength){const o=new Uint8Array(d);o.set(this.trackedWrites,0),this.trackedWrites=o}this.trackedWrites.set(e,i-this.trackedStart),this.trackedEnd=Math.max(this.trackedEnd,i+e.byteLength)}startTrackingWrites(){this.trackedWrites=new Uint8Array(2**10),this.trackedStart=this.getPos(),this.trackedEnd=this.trackedStart}stopTrackingWrites(){if(!this.trackedWrites)throw new Error("Internal error: Can't get tracked writes since nothing was tracked.");const i={data:this.trackedWrites.subarray(0,this.trackedEnd-this.trackedStart),start:this.trackedStart,end:this.trackedEnd};return this.trackedWrites=null,i}}const Pi=2**16,Ui=2**32;class xn extends _1{constructor(e){if(super(),this.pos=0,this.maxPos=0,this.target=e,this.supportsResize="resize"in new ArrayBuffer(0),this.supportsResize)try{this.buffer=new ArrayBuffer(Pi,{maxByteLength:Ui})}catch{this.buffer=new ArrayBuffer(Pi),this.supportsResize=!1}else this.buffer=new ArrayBuffer(Pi);this.bytes=new Uint8Array(this.buffer)}ensureSize(e){let i=this.buffer.byteLength;for(;i<e;)i*=2;if(i!==this.buffer.byteLength){if(i>Ui)throw new Error(`ArrayBuffer exceeded maximum size of ${Ui} bytes. Please consider using another target.`);if(this.supportsResize)this.buffer.resize(i);else{const n=new ArrayBuffer(i),d=new Uint8Array(n);d.set(this.bytes,0),this.buffer=n,this.bytes=d}}}write(e){var i,n;this.maybeTrackWrites(e),this.ensureSize(this.pos+e.byteLength),this.bytes.set(e,this.pos),(n=(i=this.target).onwrite)==null||n.call(i,this.pos,this.pos+e.byteLength),this.pos+=e.byteLength,this.maxPos=Math.max(this.maxPos,this.pos)}seek(e){this.pos=e}getPos(){return this.pos}async flush(){}async finalize(){this.ensureSize(this.pos),this.target.buffer=this.buffer.slice(0,Math.max(this.maxPos,this.pos))}async close(){}getSlice(e,i){return this.bytes.slice(e,i)}}/*!
345
+ */class G1{constructor(){this.ensureMonotonicity=!1,this.trackedWrites=null,this.trackedStart=-1,this.trackedEnd=-1}start(){}maybeTrackWrites(e){if(!this.trackedWrites)return;let i=this.getPos();if(i<this.trackedStart){if(i+e.byteLength<=this.trackedStart)return;e=e.subarray(this.trackedStart-i),i=0}const n=i+e.byteLength-this.trackedStart;let d=this.trackedWrites.byteLength;for(;d<n;)d*=2;if(d!==this.trackedWrites.byteLength){const o=new Uint8Array(d);o.set(this.trackedWrites,0),this.trackedWrites=o}this.trackedWrites.set(e,i-this.trackedStart),this.trackedEnd=Math.max(this.trackedEnd,i+e.byteLength)}startTrackingWrites(){this.trackedWrites=new Uint8Array(2**10),this.trackedStart=this.getPos(),this.trackedEnd=this.trackedStart}stopTrackingWrites(){if(!this.trackedWrites)throw new Error("Internal error: Can't get tracked writes since nothing was tracked.");const i={data:this.trackedWrites.subarray(0,this.trackedEnd-this.trackedStart),start:this.trackedStart,end:this.trackedEnd};return this.trackedWrites=null,i}}const Pi=2**16,Ui=2**32;class Hn extends G1{constructor(e){if(super(),this.pos=0,this.maxPos=0,this.target=e,this.supportsResize="resize"in new ArrayBuffer(0),this.supportsResize)try{this.buffer=new ArrayBuffer(Pi,{maxByteLength:Ui})}catch{this.buffer=new ArrayBuffer(Pi),this.supportsResize=!1}else this.buffer=new ArrayBuffer(Pi);this.bytes=new Uint8Array(this.buffer)}ensureSize(e){let i=this.buffer.byteLength;for(;i<e;)i*=2;if(i!==this.buffer.byteLength){if(i>Ui)throw new Error(`ArrayBuffer exceeded maximum size of ${Ui} bytes. Please consider using another target.`);if(this.supportsResize)this.buffer.resize(i);else{const n=new ArrayBuffer(i),d=new Uint8Array(n);d.set(this.bytes,0),this.buffer=n,this.bytes=d}}}write(e){var i,n;this.maybeTrackWrites(e),this.ensureSize(this.pos+e.byteLength),this.bytes.set(e,this.pos),(n=(i=this.target).onwrite)==null||n.call(i,this.pos,this.pos+e.byteLength),this.pos+=e.byteLength,this.maxPos=Math.max(this.maxPos,this.pos)}seek(e){this.pos=e}getPos(){return this.pos}async flush(){}async finalize(){this.ensureSize(this.pos),this.target.buffer=this.buffer.slice(0,Math.max(this.maxPos,this.pos))}async close(){}getSlice(e,i){return this.bytes.slice(e,i)}}/*!
346
346
  * Copyright (c) 2025-present, Vanilagy and contributors
347
347
  *
348
348
  * This Source Code Form is subject to the terms of the Mozilla Public
349
349
  * License, v. 2.0. If a copy of the MPL was not distributed with this
350
350
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
351
- */class Hn{constructor(){this._output=null,this.onwrite=null}}class Yn extends Hn{constructor(){super(...arguments),this.buffer=null}_createWriter(){return new xn(this)}}/*!
351
+ */class Yn{constructor(){this._output=null,this.onwrite=null}}class wn extends Yn{constructor(){super(...arguments),this.buffer=null}_createWriter(){return new Hn(this)}}/*!
352
352
  * Copyright (c) 2025-present, Vanilagy and contributors
353
353
  *
354
354
  * This Source Code Form is subject to the terms of the Mozilla Public
355
355
  * License, v. 2.0. If a copy of the MPL was not distributed with this
356
356
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
357
- */const Qi=1e3,S1=2082844800,G1=t=>{const e={},i=t.track;return i.metadata.name!==void 0&&(e.name=i.metadata.name),e},tt=(t,e,i=!0)=>{const n=t*e;return i?Math.round(n):n};class v1 extends $a{constructor(e,i){super(e),this.auxTarget=new Yn,this.auxWriter=this.auxTarget._createWriter(),this.auxBoxWriter=new Ns(this.auxWriter),this.mdat=null,this.ftypSize=null,this.trackDatas=[],this.allTracksKnown=Ya(),this.creationTime=Math.floor(Date.now()/1e3)+S1,this.finalizedChunks=[],this.nextFragmentNumber=1,this.maxWrittenTimestamp=-1/0,this.format=i,this.writer=e._writer,this.boxWriter=new Ns(this.writer),this.isQuickTime=i instanceof kn;const n=this.writer instanceof xn?"in-memory":!1;this.fastStart=i._options.fastStart??n,this.isFragmented=this.fastStart==="fragmented",(this.fastStart==="in-memory"||this.isFragmented)&&(this.writer.ensureMonotonicity=!0),this.minimumFragmentDuration=i._options.minimumFragmentDuration??1}async start(){const e=await this.mutex.acquire(),i=this.output._tracks.some(n=>n.type==="video"&&n.source._codec==="avc");if(this.format._options.onFtyp&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(bl({isQuickTime:this.isQuickTime,holdsAvc:i,fragmented:this.isFragmented})),this.format._options.onFtyp){const{data:n,start:d}=this.writer.stopTrackingWrites();this.format._options.onFtyp(n,d)}if(this.ftypSize=this.writer.getPos(),this.fastStart!=="in-memory")if(this.fastStart==="reserve"){for(const n of this.output._tracks)if(n.metadata.maximumPacketCount===void 0)throw new Error("All tracks must specify maximumPacketCount in their metadata when using fastStart: 'reserve'.")}else this.isFragmented||(this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=ci(!0),this.boxWriter.writeBox(this.mdat));await this.writer.flush(),e()}allTracksAreKnown(){for(const e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(i=>i.track===e))return!1;return!0}async getMimeType(){await this.allTracksKnown.promise;const e=this.trackDatas.map(i=>i.type==="video"||i.type==="audio"?i.info.decoderConfig.codec:{webvtt:"wvtt"}[i.track.source._codec]);return ul({isQuickTime:this.isQuickTime,hasVideo:this.trackDatas.some(i=>i.type==="video"),hasAudio:this.trackDatas.some(i=>i.type==="audio"),codecStrings:e})}getVideoTrackData(e,i,n){const d=this.trackDatas.find(W=>W.track===e);if(d)return d;Oa(n),ve(n),ve(n.decoderConfig);const o={...n.decoderConfig};ve(o.codedWidth!==void 0),ve(o.codedHeight!==void 0);let m=!1;if(e.source._codec==="avc"&&!o.description){const W=el(i.data);if(!W)throw new Error("Couldn't extract an AVCDecoderConfigurationRecord from the AVC packet. Make sure the packets are in Annex B format (as specified in ITU-T-REC-H.264) when not providing a description, or provide a description (must be an AVCDecoderConfigurationRecord as specified in ISO 14496-15) and ensure the packets are in AVCC format.");o.description=tl(W),m=!0}else if(e.source._codec==="hevc"&&!o.description){const W=sl(i.data);if(!W)throw new Error("Couldn't extract an HEVCDecoderConfigurationRecord from the HEVC packet. Make sure the packets are in Annex B format (as specified in ITU-T-REC-H.265) when not providing a description, or provide a description (must be an HEVCDecoderConfigurationRecord as specified in ISO 14496-15) and ensure the packets are in HEVC format.");o.description=dl(W),m=!0}const h=Ba(1/(e.metadata.frameRate??57600),1e6).denominator,S={muxer:this,track:e,type:"video",info:{width:o.codedWidth,height:o.codedHeight,decoderConfig:o,requiresAnnexBTransformation:m},timescale:h,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[]};return this.trackDatas.push(S),this.trackDatas.sort((W,v)=>W.track.id-v.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),S}getAudioTrackData(e,i){const n=this.trackDatas.find(o=>o.track===e);if(n)return n;Qa(i),ve(i),ve(i.decoderConfig);const d={muxer:this,track:e,type:"audio",info:{numberOfChannels:i.decoderConfig.numberOfChannels,sampleRate:i.decoderConfig.sampleRate,decoderConfig:i.decoderConfig,requiresPcmTransformation:!this.isFragmented&&k0.includes(e.source._codec)},timescale:i.decoderConfig.sampleRate,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[]};return this.trackDatas.push(d),this.trackDatas.sort((o,m)=>o.track.id-m.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),d}getSubtitleTrackData(e,i){const n=this.trackDatas.find(o=>o.track===e);if(n)return n;Da(i),ve(i),ve(i.config);const d={muxer:this,track:e,type:"subtitle",info:{config:i.config},timescale:1e3,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[],lastCueEndTimestamp:0,cueQueue:[],nextSourceId:0,cueToSourceId:new WeakMap};return this.trackDatas.push(d),this.trackDatas.sort((o,m)=>o.track.id-m.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),d}async addEncodedVideoPacket(e,i,n){const d=await this.mutex.acquire();try{const o=this.getVideoTrackData(e,i,n);let m=i.data;if(o.info.requiresAnnexBTransformation){const W=is(m);if(W.length===0)throw new Error("Failed to transform packet data. Make sure all packets are provided in Annex B format, as specified in ITU-T-REC-H.264 and ITU-T-REC-H.265.");m=qa(W,4)}const h=this.validateAndNormalizeTimestamp(o.track,i.timestamp,i.type==="key"),S=this.createSampleForTrack(o,m,h,i.duration,i.type);await this.registerSample(o,S)}finally{d()}}async addEncodedAudioPacket(e,i,n){const d=await this.mutex.acquire();try{const o=this.getAudioTrackData(e,n),m=this.validateAndNormalizeTimestamp(o.track,i.timestamp,i.type==="key"),h=this.createSampleForTrack(o,i.data,m,i.duration,i.type);o.info.requiresPcmTransformation&&await this.maybePadWithSilence(o,m),await this.registerSample(o,h)}finally{d()}}async maybePadWithSilence(e,i){const n=Y0(e.samples),d=n?n.timestamp+n.duration:0,o=i-d,m=tt(o,e.timescale);if(m>0){const{sampleSize:h,silentValue:S}=D0(e.info.decoderConfig.codec),W=m*e.info.numberOfChannels,v=new Uint8Array(h*W).fill(S),Z=this.createSampleForTrack(e,new Uint8Array(v.buffer),d,o,"key");await this.registerSample(e,Z)}}async addSubtitleCue(e,i,n){const d=await this.mutex.acquire();try{const o=this.getSubtitleTrackData(e,n);this.validateAndNormalizeTimestamp(o.track,i.timestamp,!0),e.source._codec==="webvtt"&&(o.cueQueue.push(i),await this.processWebVTTCues(o,i.timestamp))}finally{d()}}async processWebVTTCues(e,i){for(;e.cueQueue.length>0;){const n=new Set([]);for(const W of e.cueQueue)ve(W.timestamp<=i),ve(e.lastCueEndTimestamp<=W.timestamp+W.duration),n.add(Math.max(W.timestamp,e.lastCueEndTimestamp)),n.add(W.timestamp+W.duration);const d=[...n].sort((W,v)=>W-v),o=d[0],m=d[1]??o;if(i<m)break;if(e.lastCueEndTimestamp<o){this.auxWriter.seek(0);const W=o1();this.auxBoxWriter.writeBox(W);const v=this.auxWriter.getSlice(0,this.auxWriter.getPos()),Z=this.createSampleForTrack(e,v,e.lastCueEndTimestamp,o-e.lastCueEndTimestamp,"key");await this.registerSample(e,Z),e.lastCueEndTimestamp=o}this.auxWriter.seek(0);for(let W=0;W<e.cueQueue.length;W++){const v=e.cueQueue[W];if(v.timestamp>=m)break;Es.lastIndex=0;const Z=Es.test(v.text),O=v.timestamp+v.duration;let w=e.cueToSourceId.get(v);if(w===void 0&&m<O&&(w=e.nextSourceId++,e.cueToSourceId.set(v,w)),v.notes){const J=d1(v.notes);this.auxBoxWriter.writeBox(J)}const N=c1(v.text,Z?o:null,v.identifier??null,v.settings??null,w??null);this.auxBoxWriter.writeBox(N),O===m&&e.cueQueue.splice(W--,1)}const h=this.auxWriter.getSlice(0,this.auxWriter.getPos()),S=this.createSampleForTrack(e,h,o,m-o,"key");await this.registerSample(e,S),e.lastCueEndTimestamp=m}}createSampleForTrack(e,i,n,d,o){return{timestamp:n,decodeTimestamp:n,duration:d,data:i,size:i.byteLength,type:o,timescaleUnitsToNextSample:tt(d,e.timescale)}}processTimestamps(e,i){if(e.timestampProcessingQueue.length===0)return;if(e.type==="audio"&&e.info.requiresPcmTransformation){let d=0;for(let o=0;o<e.timestampProcessingQueue.length;o++){const m=e.timestampProcessingQueue[o],h=tt(m.duration,e.timescale);d+=h}if(e.timeToSampleTable.length===0)e.timeToSampleTable.push({sampleCount:d,sampleDelta:1});else{const o=Y0(e.timeToSampleTable);o.sampleCount+=d}e.timestampProcessingQueue.length=0;return}const n=e.timestampProcessingQueue.map(d=>d.timestamp).sort((d,o)=>d-o);for(let d=0;d<e.timestampProcessingQueue.length;d++){const o=e.timestampProcessingQueue[d];o.decodeTimestamp=n[d],!this.isFragmented&&e.lastTimescaleUnits===null&&(o.decodeTimestamp=0);const m=tt(o.timestamp-o.decodeTimestamp,e.timescale),h=tt(o.duration,e.timescale);if(e.lastTimescaleUnits!==null){ve(e.lastSample);const S=tt(o.decodeTimestamp,e.timescale,!1),W=Math.round(S-e.lastTimescaleUnits);if(ve(W>=0),e.lastTimescaleUnits+=W,e.lastSample.timescaleUnitsToNextSample=W,!this.isFragmented){let v=Y0(e.timeToSampleTable);if(ve(v),v.sampleCount===1){v.sampleDelta=W;const O=e.timeToSampleTable[e.timeToSampleTable.length-2];O&&O.sampleDelta===W&&(O.sampleCount++,e.timeToSampleTable.pop(),v=O)}else v.sampleDelta!==W&&(v.sampleCount--,e.timeToSampleTable.push(v={sampleCount:1,sampleDelta:W}));v.sampleDelta===h?v.sampleCount++:e.timeToSampleTable.push({sampleCount:1,sampleDelta:h});const Z=Y0(e.compositionTimeOffsetTable);ve(Z),Z.sampleCompositionTimeOffset===m?Z.sampleCount++:e.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:m})}}else e.lastTimescaleUnits=tt(o.decodeTimestamp,e.timescale,!1),this.isFragmented||(e.timeToSampleTable.push({sampleCount:1,sampleDelta:h}),e.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:m}));e.lastSample=o}if(e.timestampProcessingQueue.length=0,ve(e.lastSample),ve(e.lastTimescaleUnits!==null),i!==void 0&&e.lastSample.timescaleUnitsToNextSample===0){ve(i.type==="key");const d=tt(i.timestamp,e.timescale,!1),o=Math.round(d-e.lastTimescaleUnits);e.lastSample.timescaleUnitsToNextSample=o}}async registerSample(e,i){i.type==="key"&&this.processTimestamps(e,i),e.timestampProcessingQueue.push(i),this.isFragmented?(e.sampleQueue.push(i),await this.interleaveSamples()):this.fastStart==="reserve"?await this.registerSampleFastStartReserve(e,i):await this.addSampleToTrack(e,i)}async addSampleToTrack(e,i){if(!this.isFragmented&&(e.samples.push(i),this.fastStart==="reserve")){const d=e.track.metadata.maximumPacketCount;if(ve(d!==void 0),e.samples.length>d)throw new Error(`Track #${e.track.id} has already reached the maximum packet count (${d}). Either add less packets or increase the maximum packet count.`)}let n=!1;if(!e.currentChunk)n=!0;else{e.currentChunk.startTimestamp=Math.min(e.currentChunk.startTimestamp,i.timestamp);const d=i.timestamp-e.currentChunk.startTimestamp;if(this.isFragmented){const o=this.trackDatas.every(m=>{if(e===m)return i.type==="key";const h=m.sampleQueue[0];return h?h.type==="key":m.track.source._closed});d>=this.minimumFragmentDuration&&o&&i.timestamp>this.maxWrittenTimestamp&&(n=!0,await this.finalizeFragment())}else n=d>=.5}n&&(e.currentChunk&&await this.finalizeCurrentChunk(e),e.currentChunk={startTimestamp:i.timestamp,samples:[],offset:null,moofOffset:null}),ve(e.currentChunk),e.currentChunk.samples.push(i),this.isFragmented&&(this.maxWrittenTimestamp=Math.max(this.maxWrittenTimestamp,i.timestamp))}async finalizeCurrentChunk(e){if(ve(!this.isFragmented),!e.currentChunk)return;e.finalizedChunks.push(e.currentChunk),this.finalizedChunks.push(e.currentChunk);let i=e.currentChunk.samples.length;if(e.type==="audio"&&e.info.requiresPcmTransformation&&(i=e.currentChunk.samples.reduce((n,d)=>n+tt(d.duration,e.timescale),0)),(e.compactlyCodedChunkTable.length===0||Y0(e.compactlyCodedChunkTable).samplesPerChunk!==i)&&e.compactlyCodedChunkTable.push({firstChunk:e.finalizedChunks.length,samplesPerChunk:i}),this.fastStart==="in-memory"){e.currentChunk.offset=0;return}e.currentChunk.offset=this.writer.getPos();for(const n of e.currentChunk.samples)ve(n.data),this.writer.write(n.data),n.data=null;await this.writer.flush()}async interleaveSamples(e=!1){if(ve(this.isFragmented),!(!e&&!this.allTracksAreKnown()))e:for(;;){let i=null,n=1/0;for(const o of this.trackDatas){if(!e&&o.sampleQueue.length===0&&!o.track.source._closed)break e;o.sampleQueue.length>0&&o.sampleQueue[0].timestamp<n&&(i=o,n=o.sampleQueue[0].timestamp)}if(!i)break;const d=i.sampleQueue.shift();await this.addSampleToTrack(i,d)}}async finalizeFragment(e=!0){ve(this.isFragmented);const i=this.nextFragmentNumber++;if(i===1){this.format._options.onMoov&&this.writer.startTrackingWrites();const w=U0(this);if(this.boxWriter.writeBox(w),this.format._options.onMoov){const{data:N,start:J}=this.writer.stopTrackingWrites();this.format._options.onMoov(N,J)}}const n=this.trackDatas.filter(w=>w.currentChunk),d=Us(i,n),o=this.writer.getPos(),m=o+this.boxWriter.measureBox(d);let h=m+Fi,S=1/0;for(const w of n){w.currentChunk.offset=h,w.currentChunk.moofOffset=o;for(const N of w.currentChunk.samples)h+=N.size;S=Math.min(S,w.currentChunk.startTimestamp)}const W=h-m,v=W>=2**32;if(v)for(const w of n)w.currentChunk.offset+=Js-Fi;this.format._options.onMoof&&this.writer.startTrackingWrites();const Z=Us(i,n);if(this.boxWriter.writeBox(Z),this.format._options.onMoof){const{data:w,start:N}=this.writer.stopTrackingWrites();this.format._options.onMoof(w,N,S)}ve(this.writer.getPos()===m),this.format._options.onMdat&&this.writer.startTrackingWrites();const O=ci(v);O.size=W,this.boxWriter.writeBox(O),this.writer.seek(m+(v?Js:Fi));for(const w of n)for(const N of w.currentChunk.samples)this.writer.write(N.data),N.data=null;if(this.format._options.onMdat){const{data:w,start:N}=this.writer.stopTrackingWrites();this.format._options.onMdat(w,N)}for(const w of n)w.finalizedChunks.push(w.currentChunk),this.finalizedChunks.push(w.currentChunk),w.currentChunk=null;e&&await this.writer.flush()}async registerSampleFastStartReserve(e,i){if(this.allTracksAreKnown()){if(!this.mdat){const n=U0(this),o=this.boxWriter.measureBox(n)+this.computeSampleTableSizeUpperBound()+4096;ve(this.ftypSize!==null),this.writer.seek(this.ftypSize+o),this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=ci(!0),this.boxWriter.writeBox(this.mdat);for(const m of this.trackDatas){for(const h of m.sampleQueue)await this.addSampleToTrack(m,h);m.sampleQueue.length=0}}await this.addSampleToTrack(e,i)}else e.sampleQueue.push(i)}computeSampleTableSizeUpperBound(){ve(this.fastStart==="reserve");let e=0;for(const i of this.trackDatas){const n=i.track.metadata.maximumPacketCount;ve(n!==void 0),e+=8*Math.ceil(2/3*n),e+=4*n,e+=8*Math.ceil(2/3*n),e+=12*Math.ceil(2/3*n),e+=4*n,e+=8*n}return e}async onTrackClose(e){const i=await this.mutex.acquire();if(e.type==="subtitle"&&e.source._codec==="webvtt"){const n=this.trackDatas.find(d=>d.track===e);n&&await this.processWebVTTCues(n,1/0)}this.allTracksAreKnown()&&this.allTracksKnown.resolve(),this.isFragmented&&await this.interleaveSamples(),i()}async finalize(){const e=await this.mutex.acquire();this.allTracksKnown.resolve();for(const i of this.trackDatas)i.type==="subtitle"&&i.track.source._codec==="webvtt"&&await this.processWebVTTCues(i,1/0);if(this.isFragmented){await this.interleaveSamples(!0);for(const i of this.trackDatas)this.processTimestamps(i);await this.finalizeFragment(!1)}else for(const i of this.trackDatas)this.processTimestamps(i),await this.finalizeCurrentChunk(i);if(this.fastStart==="in-memory"){this.mdat=ci(!1);let i;for(let d=0;d<2;d++){const o=U0(this),m=this.boxWriter.measureBox(o);i=this.boxWriter.measureBox(this.mdat);let h=this.writer.getPos()+m+i;for(const S of this.finalizedChunks){S.offset=h;for(const{data:W}of S.samples)ve(W),h+=W.byteLength,i+=W.byteLength}if(h<2**32)break;i>=2**32&&(this.mdat.largeSize=!0)}this.format._options.onMoov&&this.writer.startTrackingWrites();const n=U0(this);if(this.boxWriter.writeBox(n),this.format._options.onMoov){const{data:d,start:o}=this.writer.stopTrackingWrites();this.format._options.onMoov(d,o)}this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat.size=i,this.boxWriter.writeBox(this.mdat);for(const d of this.finalizedChunks)for(const o of d.samples)ve(o.data),this.writer.write(o.data),o.data=null;if(this.format._options.onMdat){const{data:d,start:o}=this.writer.stopTrackingWrites();this.format._options.onMdat(d,o)}}else if(this.isFragmented){const i=this.writer.getPos(),n=r1(this.trackDatas);this.boxWriter.writeBox(n);const d=this.writer.getPos()-i;this.writer.seek(this.writer.getPos()-4),this.boxWriter.writeU32(d)}else{ve(this.mdat);const i=this.boxWriter.offsets.get(this.mdat);ve(i!==void 0);const n=this.writer.getPos()-i;if(this.mdat.size=n,this.mdat.largeSize=n>=2**32,this.boxWriter.patchBox(this.mdat),this.format._options.onMdat){const{data:o,start:m}=this.writer.stopTrackingWrites();this.format._options.onMdat(o,m)}const d=U0(this);if(this.fastStart==="reserve"){ve(this.ftypSize!==null),this.writer.seek(this.ftypSize),this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(d);const o=this.boxWriter.offsets.get(this.mdat)-this.writer.getPos();this.boxWriter.writeBox(pl(o))}else this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(d);if(this.format._options.onMoov){const{data:o,start:m}=this.writer.stopTrackingWrites();this.format._options.onMoov(o,m)}}e()}}/*!
357
+ */const Qi=1e3,v1=2082844800,I1=t=>{const e={},i=t.track;return i.metadata.name!==void 0&&(e.name=i.metadata.name),e},tt=(t,e,i=!0)=>{const n=t*e;return i?Math.round(n):n};class V1 extends el{constructor(e,i){super(e),this.auxTarget=new wn,this.auxWriter=this.auxTarget._createWriter(),this.auxBoxWriter=new Ns(this.auxWriter),this.mdat=null,this.ftypSize=null,this.trackDatas=[],this.allTracksKnown=Ka(),this.creationTime=Math.floor(Date.now()/1e3)+v1,this.finalizedChunks=[],this.nextFragmentNumber=1,this.maxWrittenTimestamp=-1/0,this.format=i,this.writer=e._writer,this.boxWriter=new Ns(this.writer),this.isQuickTime=i instanceof Bn;const n=this.writer instanceof Hn?"in-memory":!1;this.fastStart=i._options.fastStart??n,this.isFragmented=this.fastStart==="fragmented",(this.fastStart==="in-memory"||this.isFragmented)&&(this.writer.ensureMonotonicity=!0),this.minimumFragmentDuration=i._options.minimumFragmentDuration??1}async start(){const e=await this.mutex.acquire(),i=this.output._tracks.some(n=>n.type==="video"&&n.source._codec==="avc");if(this.format._options.onFtyp&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(yl({isQuickTime:this.isQuickTime,holdsAvc:i,fragmented:this.isFragmented})),this.format._options.onFtyp){const{data:n,start:d}=this.writer.stopTrackingWrites();this.format._options.onFtyp(n,d)}if(this.ftypSize=this.writer.getPos(),this.fastStart!=="in-memory")if(this.fastStart==="reserve"){for(const n of this.output._tracks)if(n.metadata.maximumPacketCount===void 0)throw new Error("All tracks must specify maximumPacketCount in their metadata when using fastStart: 'reserve'.")}else this.isFragmented||(this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=ci(!0),this.boxWriter.writeBox(this.mdat));await this.writer.flush(),e()}allTracksAreKnown(){for(const e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(i=>i.track===e))return!1;return!0}async getMimeType(){await this.allTracksKnown.promise;const e=this.trackDatas.map(i=>i.type==="video"||i.type==="audio"?i.info.decoderConfig.codec:{webvtt:"wvtt"}[i.track.source._codec]);return bl({isQuickTime:this.isQuickTime,hasVideo:this.trackDatas.some(i=>i.type==="video"),hasAudio:this.trackDatas.some(i=>i.type==="audio"),codecStrings:e})}getVideoTrackData(e,i,n){const d=this.trackDatas.find(W=>W.track===e);if(d)return d;Qa(n),ve(n),ve(n.decoderConfig);const o={...n.decoderConfig};ve(o.codedWidth!==void 0),ve(o.codedHeight!==void 0);let m=!1;if(e.source._codec==="avc"&&!o.description){const W=il(i.data);if(!W)throw new Error("Couldn't extract an AVCDecoderConfigurationRecord from the AVC packet. Make sure the packets are in Annex B format (as specified in ITU-T-REC-H.264) when not providing a description, or provide a description (must be an AVCDecoderConfigurationRecord as specified in ISO 14496-15) and ensure the packets are in AVCC format.");o.description=sl(W),m=!0}else if(e.source._codec==="hevc"&&!o.description){const W=rl(i.data);if(!W)throw new Error("Couldn't extract an HEVCDecoderConfigurationRecord from the HEVC packet. Make sure the packets are in Annex B format (as specified in ITU-T-REC-H.265) when not providing a description, or provide a description (must be an HEVCDecoderConfigurationRecord as specified in ISO 14496-15) and ensure the packets are in HEVC format.");o.description=ul(W),m=!0}const h=ga(1/(e.metadata.frameRate??57600),1e6).denominator,S={muxer:this,track:e,type:"video",info:{width:o.codedWidth,height:o.codedHeight,decoderConfig:o,requiresAnnexBTransformation:m},timescale:h,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[]};return this.trackDatas.push(S),this.trackDatas.sort((W,v)=>W.track.id-v.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),S}getAudioTrackData(e,i){const n=this.trackDatas.find(o=>o.track===e);if(n)return n;$a(i),ve(i),ve(i.decoderConfig);const d={muxer:this,track:e,type:"audio",info:{numberOfChannels:i.decoderConfig.numberOfChannels,sampleRate:i.decoderConfig.sampleRate,decoderConfig:i.decoderConfig,requiresPcmTransformation:!this.isFragmented&&k0.includes(e.source._codec)},timescale:i.decoderConfig.sampleRate,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[]};return this.trackDatas.push(d),this.trackDatas.sort((o,m)=>o.track.id-m.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),d}getSubtitleTrackData(e,i){const n=this.trackDatas.find(o=>o.track===e);if(n)return n;qa(i),ve(i),ve(i.config);const d={muxer:this,track:e,type:"subtitle",info:{config:i.config},timescale:1e3,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[],lastCueEndTimestamp:0,cueQueue:[],nextSourceId:0,cueToSourceId:new WeakMap};return this.trackDatas.push(d),this.trackDatas.sort((o,m)=>o.track.id-m.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),d}async addEncodedVideoPacket(e,i,n){const d=await this.mutex.acquire();try{const o=this.getVideoTrackData(e,i,n);let m=i.data;if(o.info.requiresAnnexBTransformation){const W=is(m);if(W.length===0)throw new Error("Failed to transform packet data. Make sure all packets are provided in Annex B format, as specified in ITU-T-REC-H.264 and ITU-T-REC-H.265.");m=tl(W,4)}const h=this.validateAndNormalizeTimestamp(o.track,i.timestamp,i.type==="key"),S=this.createSampleForTrack(o,m,h,i.duration,i.type);await this.registerSample(o,S)}finally{d()}}async addEncodedAudioPacket(e,i,n){const d=await this.mutex.acquire();try{const o=this.getAudioTrackData(e,n),m=this.validateAndNormalizeTimestamp(o.track,i.timestamp,i.type==="key"),h=this.createSampleForTrack(o,i.data,m,i.duration,i.type);o.info.requiresPcmTransformation&&await this.maybePadWithSilence(o,m),await this.registerSample(o,h)}finally{d()}}async maybePadWithSilence(e,i){const n=Y0(e.samples),d=n?n.timestamp+n.duration:0,o=i-d,m=tt(o,e.timescale);if(m>0){const{sampleSize:h,silentValue:S}=D0(e.info.decoderConfig.codec),W=m*e.info.numberOfChannels,v=new Uint8Array(h*W).fill(S),Z=this.createSampleForTrack(e,new Uint8Array(v.buffer),d,o,"key");await this.registerSample(e,Z)}}async addSubtitleCue(e,i,n){const d=await this.mutex.acquire();try{const o=this.getSubtitleTrackData(e,n);this.validateAndNormalizeTimestamp(o.track,i.timestamp,!0),e.source._codec==="webvtt"&&(o.cueQueue.push(i),await this.processWebVTTCues(o,i.timestamp))}finally{d()}}async processWebVTTCues(e,i){for(;e.cueQueue.length>0;){const n=new Set([]);for(const W of e.cueQueue)ve(W.timestamp<=i),ve(e.lastCueEndTimestamp<=W.timestamp+W.duration),n.add(Math.max(W.timestamp,e.lastCueEndTimestamp)),n.add(W.timestamp+W.duration);const d=[...n].sort((W,v)=>W-v),o=d[0],m=d[1]??o;if(i<m)break;if(e.lastCueEndTimestamp<o){this.auxWriter.seek(0);const W=d1();this.auxBoxWriter.writeBox(W);const v=this.auxWriter.getSlice(0,this.auxWriter.getPos()),Z=this.createSampleForTrack(e,v,e.lastCueEndTimestamp,o-e.lastCueEndTimestamp,"key");await this.registerSample(e,Z),e.lastCueEndTimestamp=o}this.auxWriter.seek(0);for(let W=0;W<e.cueQueue.length;W++){const v=e.cueQueue[W];if(v.timestamp>=m)break;Es.lastIndex=0;const Z=Es.test(v.text),O=v.timestamp+v.duration;let w=e.cueToSourceId.get(v);if(w===void 0&&m<O&&(w=e.nextSourceId++,e.cueToSourceId.set(v,w)),v.notes){const J=u1(v.notes);this.auxBoxWriter.writeBox(J)}const N=m1(v.text,Z?o:null,v.identifier??null,v.settings??null,w??null);this.auxBoxWriter.writeBox(N),O===m&&e.cueQueue.splice(W--,1)}const h=this.auxWriter.getSlice(0,this.auxWriter.getPos()),S=this.createSampleForTrack(e,h,o,m-o,"key");await this.registerSample(e,S),e.lastCueEndTimestamp=m}}createSampleForTrack(e,i,n,d,o){return{timestamp:n,decodeTimestamp:n,duration:d,data:i,size:i.byteLength,type:o,timescaleUnitsToNextSample:tt(d,e.timescale)}}processTimestamps(e,i){if(e.timestampProcessingQueue.length===0)return;if(e.type==="audio"&&e.info.requiresPcmTransformation){let d=0;for(let o=0;o<e.timestampProcessingQueue.length;o++){const m=e.timestampProcessingQueue[o],h=tt(m.duration,e.timescale);d+=h}if(e.timeToSampleTable.length===0)e.timeToSampleTable.push({sampleCount:d,sampleDelta:1});else{const o=Y0(e.timeToSampleTable);o.sampleCount+=d}e.timestampProcessingQueue.length=0;return}const n=e.timestampProcessingQueue.map(d=>d.timestamp).sort((d,o)=>d-o);for(let d=0;d<e.timestampProcessingQueue.length;d++){const o=e.timestampProcessingQueue[d];o.decodeTimestamp=n[d],!this.isFragmented&&e.lastTimescaleUnits===null&&(o.decodeTimestamp=0);const m=tt(o.timestamp-o.decodeTimestamp,e.timescale),h=tt(o.duration,e.timescale);if(e.lastTimescaleUnits!==null){ve(e.lastSample);const S=tt(o.decodeTimestamp,e.timescale,!1),W=Math.round(S-e.lastTimescaleUnits);if(ve(W>=0),e.lastTimescaleUnits+=W,e.lastSample.timescaleUnitsToNextSample=W,!this.isFragmented){let v=Y0(e.timeToSampleTable);if(ve(v),v.sampleCount===1){v.sampleDelta=W;const O=e.timeToSampleTable[e.timeToSampleTable.length-2];O&&O.sampleDelta===W&&(O.sampleCount++,e.timeToSampleTable.pop(),v=O)}else v.sampleDelta!==W&&(v.sampleCount--,e.timeToSampleTable.push(v={sampleCount:1,sampleDelta:W}));v.sampleDelta===h?v.sampleCount++:e.timeToSampleTable.push({sampleCount:1,sampleDelta:h});const Z=Y0(e.compositionTimeOffsetTable);ve(Z),Z.sampleCompositionTimeOffset===m?Z.sampleCount++:e.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:m})}}else e.lastTimescaleUnits=tt(o.decodeTimestamp,e.timescale,!1),this.isFragmented||(e.timeToSampleTable.push({sampleCount:1,sampleDelta:h}),e.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:m}));e.lastSample=o}if(e.timestampProcessingQueue.length=0,ve(e.lastSample),ve(e.lastTimescaleUnits!==null),i!==void 0&&e.lastSample.timescaleUnitsToNextSample===0){ve(i.type==="key");const d=tt(i.timestamp,e.timescale,!1),o=Math.round(d-e.lastTimescaleUnits);e.lastSample.timescaleUnitsToNextSample=o}}async registerSample(e,i){i.type==="key"&&this.processTimestamps(e,i),e.timestampProcessingQueue.push(i),this.isFragmented?(e.sampleQueue.push(i),await this.interleaveSamples()):this.fastStart==="reserve"?await this.registerSampleFastStartReserve(e,i):await this.addSampleToTrack(e,i)}async addSampleToTrack(e,i){if(!this.isFragmented&&(e.samples.push(i),this.fastStart==="reserve")){const d=e.track.metadata.maximumPacketCount;if(ve(d!==void 0),e.samples.length>d)throw new Error(`Track #${e.track.id} has already reached the maximum packet count (${d}). Either add less packets or increase the maximum packet count.`)}let n=!1;if(!e.currentChunk)n=!0;else{e.currentChunk.startTimestamp=Math.min(e.currentChunk.startTimestamp,i.timestamp);const d=i.timestamp-e.currentChunk.startTimestamp;if(this.isFragmented){const o=this.trackDatas.every(m=>{if(e===m)return i.type==="key";const h=m.sampleQueue[0];return h?h.type==="key":m.track.source._closed});d>=this.minimumFragmentDuration&&o&&i.timestamp>this.maxWrittenTimestamp&&(n=!0,await this.finalizeFragment())}else n=d>=.5}n&&(e.currentChunk&&await this.finalizeCurrentChunk(e),e.currentChunk={startTimestamp:i.timestamp,samples:[],offset:null,moofOffset:null}),ve(e.currentChunk),e.currentChunk.samples.push(i),this.isFragmented&&(this.maxWrittenTimestamp=Math.max(this.maxWrittenTimestamp,i.timestamp))}async finalizeCurrentChunk(e){if(ve(!this.isFragmented),!e.currentChunk)return;e.finalizedChunks.push(e.currentChunk),this.finalizedChunks.push(e.currentChunk);let i=e.currentChunk.samples.length;if(e.type==="audio"&&e.info.requiresPcmTransformation&&(i=e.currentChunk.samples.reduce((n,d)=>n+tt(d.duration,e.timescale),0)),(e.compactlyCodedChunkTable.length===0||Y0(e.compactlyCodedChunkTable).samplesPerChunk!==i)&&e.compactlyCodedChunkTable.push({firstChunk:e.finalizedChunks.length,samplesPerChunk:i}),this.fastStart==="in-memory"){e.currentChunk.offset=0;return}e.currentChunk.offset=this.writer.getPos();for(const n of e.currentChunk.samples)ve(n.data),this.writer.write(n.data),n.data=null;await this.writer.flush()}async interleaveSamples(e=!1){if(ve(this.isFragmented),!(!e&&!this.allTracksAreKnown()))e:for(;;){let i=null,n=1/0;for(const o of this.trackDatas){if(!e&&o.sampleQueue.length===0&&!o.track.source._closed)break e;o.sampleQueue.length>0&&o.sampleQueue[0].timestamp<n&&(i=o,n=o.sampleQueue[0].timestamp)}if(!i)break;const d=i.sampleQueue.shift();await this.addSampleToTrack(i,d)}}async finalizeFragment(e=!0){ve(this.isFragmented);const i=this.nextFragmentNumber++;if(i===1){this.format._options.onMoov&&this.writer.startTrackingWrites();const w=U0(this);if(this.boxWriter.writeBox(w),this.format._options.onMoov){const{data:N,start:J}=this.writer.stopTrackingWrites();this.format._options.onMoov(N,J)}}const n=this.trackDatas.filter(w=>w.currentChunk),d=Us(i,n),o=this.writer.getPos(),m=o+this.boxWriter.measureBox(d);let h=m+Fi,S=1/0;for(const w of n){w.currentChunk.offset=h,w.currentChunk.moofOffset=o;for(const N of w.currentChunk.samples)h+=N.size;S=Math.min(S,w.currentChunk.startTimestamp)}const W=h-m,v=W>=2**32;if(v)for(const w of n)w.currentChunk.offset+=Js-Fi;this.format._options.onMoof&&this.writer.startTrackingWrites();const Z=Us(i,n);if(this.boxWriter.writeBox(Z),this.format._options.onMoof){const{data:w,start:N}=this.writer.stopTrackingWrites();this.format._options.onMoof(w,N,S)}ve(this.writer.getPos()===m),this.format._options.onMdat&&this.writer.startTrackingWrites();const O=ci(v);O.size=W,this.boxWriter.writeBox(O),this.writer.seek(m+(v?Js:Fi));for(const w of n)for(const N of w.currentChunk.samples)this.writer.write(N.data),N.data=null;if(this.format._options.onMdat){const{data:w,start:N}=this.writer.stopTrackingWrites();this.format._options.onMdat(w,N)}for(const w of n)w.finalizedChunks.push(w.currentChunk),this.finalizedChunks.push(w.currentChunk),w.currentChunk=null;e&&await this.writer.flush()}async registerSampleFastStartReserve(e,i){if(this.allTracksAreKnown()){if(!this.mdat){const n=U0(this),o=this.boxWriter.measureBox(n)+this.computeSampleTableSizeUpperBound()+4096;ve(this.ftypSize!==null),this.writer.seek(this.ftypSize+o),this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=ci(!0),this.boxWriter.writeBox(this.mdat);for(const m of this.trackDatas){for(const h of m.sampleQueue)await this.addSampleToTrack(m,h);m.sampleQueue.length=0}}await this.addSampleToTrack(e,i)}else e.sampleQueue.push(i)}computeSampleTableSizeUpperBound(){ve(this.fastStart==="reserve");let e=0;for(const i of this.trackDatas){const n=i.track.metadata.maximumPacketCount;ve(n!==void 0),e+=8*Math.ceil(2/3*n),e+=4*n,e+=8*Math.ceil(2/3*n),e+=12*Math.ceil(2/3*n),e+=4*n,e+=8*n}return e}async onTrackClose(e){const i=await this.mutex.acquire();if(e.type==="subtitle"&&e.source._codec==="webvtt"){const n=this.trackDatas.find(d=>d.track===e);n&&await this.processWebVTTCues(n,1/0)}this.allTracksAreKnown()&&this.allTracksKnown.resolve(),this.isFragmented&&await this.interleaveSamples(),i()}async finalize(){const e=await this.mutex.acquire();this.allTracksKnown.resolve();for(const i of this.trackDatas)i.type==="subtitle"&&i.track.source._codec==="webvtt"&&await this.processWebVTTCues(i,1/0);if(this.isFragmented){await this.interleaveSamples(!0);for(const i of this.trackDatas)this.processTimestamps(i);await this.finalizeFragment(!1)}else for(const i of this.trackDatas)this.processTimestamps(i),await this.finalizeCurrentChunk(i);if(this.fastStart==="in-memory"){this.mdat=ci(!1);let i;for(let d=0;d<2;d++){const o=U0(this),m=this.boxWriter.measureBox(o);i=this.boxWriter.measureBox(this.mdat);let h=this.writer.getPos()+m+i;for(const S of this.finalizedChunks){S.offset=h;for(const{data:W}of S.samples)ve(W),h+=W.byteLength,i+=W.byteLength}if(h<2**32)break;i>=2**32&&(this.mdat.largeSize=!0)}this.format._options.onMoov&&this.writer.startTrackingWrites();const n=U0(this);if(this.boxWriter.writeBox(n),this.format._options.onMoov){const{data:d,start:o}=this.writer.stopTrackingWrites();this.format._options.onMoov(d,o)}this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat.size=i,this.boxWriter.writeBox(this.mdat);for(const d of this.finalizedChunks)for(const o of d.samples)ve(o.data),this.writer.write(o.data),o.data=null;if(this.format._options.onMdat){const{data:d,start:o}=this.writer.stopTrackingWrites();this.format._options.onMdat(d,o)}}else if(this.isFragmented){const i=this.writer.getPos(),n=l1(this.trackDatas);this.boxWriter.writeBox(n);const d=this.writer.getPos()-i;this.writer.seek(this.writer.getPos()-4),this.boxWriter.writeU32(d)}else{ve(this.mdat);const i=this.boxWriter.offsets.get(this.mdat);ve(i!==void 0);const n=this.writer.getPos()-i;if(this.mdat.size=n,this.mdat.largeSize=n>=2**32,this.boxWriter.patchBox(this.mdat),this.format._options.onMdat){const{data:o,start:m}=this.writer.stopTrackingWrites();this.format._options.onMdat(o,m)}const d=U0(this);if(this.fastStart==="reserve"){ve(this.ftypSize!==null),this.writer.seek(this.ftypSize),this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(d);const o=this.boxWriter.offsets.get(this.mdat)-this.writer.getPos();this.boxWriter.writeBox(fl(o))}else this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(d);if(this.format._options.onMoov){const{data:o,start:m}=this.writer.stopTrackingWrites();this.format._options.onMoov(o,m)}}e()}}/*!
358
358
  * Copyright (c) 2025-present, Vanilagy and contributors
359
359
  *
360
360
  * This Source Code Form is subject to the terms of the Mozilla Public
361
361
  * License, v. 2.0. If a copy of the MPL was not distributed with this
362
362
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
363
- */class wn{getSupportedVideoCodecs(){return this.getSupportedCodecs().filter(e=>O0.includes(e))}getSupportedAudioCodecs(){return this.getSupportedCodecs().filter(e=>ui.includes(e))}getSupportedSubtitleCodecs(){return this.getSupportedCodecs().filter(e=>hi.includes(e))}_codecUnsupportedHint(e){return""}}class Kn extends wn{constructor(e={}){if(!e||typeof e!="object")throw new TypeError("options must be an object.");if(e.fastStart!==void 0&&![!1,"in-memory","reserve","fragmented"].includes(e.fastStart))throw new TypeError("options.fastStart, when provided, must be false, 'in-memory', 'reserve', or 'fragmented'.");if(e.minimumFragmentDuration!==void 0&&(!Number.isFinite(e.minimumFragmentDuration)||e.minimumFragmentDuration<0))throw new TypeError("options.minimumFragmentDuration, when provided, must be a non-negative number.");if(e.onFtyp!==void 0&&typeof e.onFtyp!="function")throw new TypeError("options.onFtyp, when provided, must be a function.");if(e.onMoov!==void 0&&typeof e.onMoov!="function")throw new TypeError("options.onMoov, when provided, must be a function.");if(e.onMdat!==void 0&&typeof e.onMdat!="function")throw new TypeError("options.onMdat, when provided, must be a function.");if(e.onMoof!==void 0&&typeof e.onMoof!="function")throw new TypeError("options.onMoof, when provided, must be a function.");if(e.metadataFormat!==void 0&&!["mdir","mdta","udta","auto"].includes(e.metadataFormat))throw new TypeError("options.metadataFormat, when provided, must be either 'auto', 'mdir', 'mdta', or 'udta'.");super(),this._options=e}getSupportedTrackCounts(){return{video:{min:0,max:1/0},audio:{min:0,max:1/0},subtitle:{min:0,max:1/0},total:{min:1,max:2**32-1}}}get supportsVideoRotationMetadata(){return!0}_createMuxer(e){return new v1(e,this)}}class Mn extends Kn{constructor(e){super(e)}get _name(){return"MP4"}get fileExtension(){return".mp4"}get mimeType(){return"video/mp4"}getSupportedCodecs(){return[...O0,...Xn,"pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be",...hi]}_codecUnsupportedHint(e){return new kn().getSupportedCodecs().includes(e)?" Switching to MOV will grant support for this codec.":""}}class kn extends Kn{constructor(e){super(e)}get _name(){return"MOV"}get fileExtension(){return".mov"}get mimeType(){return"video/quicktime"}getSupportedCodecs(){return[...O0,...ui]}_codecUnsupportedHint(e){return new Mn().getSupportedCodecs().includes(e)?" Switching to MP4 will grant support for this codec.":""}}/*!
363
+ */class Kn{getSupportedVideoCodecs(){return this.getSupportedCodecs().filter(e=>O0.includes(e))}getSupportedAudioCodecs(){return this.getSupportedCodecs().filter(e=>ui.includes(e))}getSupportedSubtitleCodecs(){return this.getSupportedCodecs().filter(e=>hi.includes(e))}_codecUnsupportedHint(e){return""}}class Mn extends Kn{constructor(e={}){if(!e||typeof e!="object")throw new TypeError("options must be an object.");if(e.fastStart!==void 0&&![!1,"in-memory","reserve","fragmented"].includes(e.fastStart))throw new TypeError("options.fastStart, when provided, must be false, 'in-memory', 'reserve', or 'fragmented'.");if(e.minimumFragmentDuration!==void 0&&(!Number.isFinite(e.minimumFragmentDuration)||e.minimumFragmentDuration<0))throw new TypeError("options.minimumFragmentDuration, when provided, must be a non-negative number.");if(e.onFtyp!==void 0&&typeof e.onFtyp!="function")throw new TypeError("options.onFtyp, when provided, must be a function.");if(e.onMoov!==void 0&&typeof e.onMoov!="function")throw new TypeError("options.onMoov, when provided, must be a function.");if(e.onMdat!==void 0&&typeof e.onMdat!="function")throw new TypeError("options.onMdat, when provided, must be a function.");if(e.onMoof!==void 0&&typeof e.onMoof!="function")throw new TypeError("options.onMoof, when provided, must be a function.");if(e.metadataFormat!==void 0&&!["mdir","mdta","udta","auto"].includes(e.metadataFormat))throw new TypeError("options.metadataFormat, when provided, must be either 'auto', 'mdir', 'mdta', or 'udta'.");super(),this._options=e}getSupportedTrackCounts(){return{video:{min:0,max:1/0},audio:{min:0,max:1/0},subtitle:{min:0,max:1/0},total:{min:1,max:2**32-1}}}get supportsVideoRotationMetadata(){return!0}_createMuxer(e){return new V1(e,this)}}class kn extends Mn{constructor(e){super(e)}get _name(){return"MP4"}get fileExtension(){return".mp4"}get mimeType(){return"video/mp4"}getSupportedCodecs(){return[...O0,..._n,"pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be",...hi]}_codecUnsupportedHint(e){return new Bn().getSupportedCodecs().includes(e)?" Switching to MOV will grant support for this codec.":""}}class Bn extends Mn{constructor(e){super(e)}get _name(){return"MOV"}get fileExtension(){return".mov"}get mimeType(){return"video/quicktime"}getSupportedCodecs(){return[...O0,...ui]}_codecUnsupportedHint(e){return new kn().getSupportedCodecs().includes(e)?" Switching to MP4 will grant support for this codec.":""}}/*!
364
364
  * Copyright (c) 2025-present, Vanilagy and contributors
365
365
  *
366
366
  * This Source Code Form is subject to the terms of the Mozilla Public
367
367
  * License, v. 2.0. If a copy of the MPL was not distributed with this
368
368
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
369
- */class rs{constructor(){this._connectedTrack=null,this._closingPromise=null,this._closed=!1,this._timestampOffset=0}_ensureValidAdd(){if(!this._connectedTrack)throw new Error("Source is not connected to an output track.");if(this._connectedTrack.output.state==="canceled")throw new Error("Output has been canceled.");if(this._connectedTrack.output.state==="finalizing"||this._connectedTrack.output.state==="finalized")throw new Error("Output has been finalized.");if(this._connectedTrack.output.state==="pending")throw new Error("Output has not started.");if(this._closed)throw new Error("Source is closed.")}async _start(){}async _flushAndClose(e){}close(){if(this._closingPromise)return;const e=this._connectedTrack;if(!e)throw new Error("Cannot call close without connecting the source to an output track.");if(e.output.state==="pending")throw new Error("Cannot call close before output has been started.");this._closingPromise=(async()=>{await this._flushAndClose(!1),this._closed=!0,!(e.output.state==="finalizing"||e.output.state==="finalized")&&e.output._muxer.onTrackClose(e)})()}async _flushOrWaitForOngoingClose(e){return this._closingPromise?this._closingPromise:this._flushAndClose(e)}}class Bn extends rs{constructor(e){if(super(),this._connectedTrack=null,!O0.includes(e))throw new TypeError(`Invalid video codec '${e}'. Must be one of: ${O0.join(", ")}.`);this._codec=e}}class I1 extends Bn{constructor(e){super(e)}add(e,i){if(!(e instanceof B0))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be added.");if(i!==void 0&&(!i||typeof i!="object"))throw new TypeError("meta, when provided, must be an object.");return this._ensureValidAdd(),this._connectedTrack.output._muxer.addEncodedVideoPacket(this._connectedTrack,e,i)}}class Cn extends rs{constructor(e){if(super(),this._connectedTrack=null,!ui.includes(e))throw new TypeError(`Invalid audio codec '${e}'. Must be one of: ${ui.join(", ")}.`);this._codec=e}}class V1 extends Cn{constructor(e){super(e)}add(e,i){if(!(e instanceof B0))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be added.");if(i!==void 0&&(!i||typeof i!="object"))throw new TypeError("meta, when provided, must be an object.");return this._ensureValidAdd(),this._connectedTrack.output._muxer.addEncodedAudioPacket(this._connectedTrack,e,i)}}class R1 extends rs{constructor(e){if(super(),this._connectedTrack=null,!hi.includes(e))throw new TypeError(`Invalid subtitle codec '${e}'. Must be one of: ${hi.join(", ")}.`);this._codec=e}}/*!
369
+ */class rs{constructor(){this._connectedTrack=null,this._closingPromise=null,this._closed=!1,this._timestampOffset=0}_ensureValidAdd(){if(!this._connectedTrack)throw new Error("Source is not connected to an output track.");if(this._connectedTrack.output.state==="canceled")throw new Error("Output has been canceled.");if(this._connectedTrack.output.state==="finalizing"||this._connectedTrack.output.state==="finalized")throw new Error("Output has been finalized.");if(this._connectedTrack.output.state==="pending")throw new Error("Output has not started.");if(this._closed)throw new Error("Source is closed.")}async _start(){}async _flushAndClose(e){}close(){if(this._closingPromise)return;const e=this._connectedTrack;if(!e)throw new Error("Cannot call close without connecting the source to an output track.");if(e.output.state==="pending")throw new Error("Cannot call close before output has been started.");this._closingPromise=(async()=>{await this._flushAndClose(!1),this._closed=!0,!(e.output.state==="finalizing"||e.output.state==="finalized")&&e.output._muxer.onTrackClose(e)})()}async _flushOrWaitForOngoingClose(e){return this._closingPromise?this._closingPromise:this._flushAndClose(e)}}class Cn extends rs{constructor(e){if(super(),this._connectedTrack=null,!O0.includes(e))throw new TypeError(`Invalid video codec '${e}'. Must be one of: ${O0.join(", ")}.`);this._codec=e}}class R1 extends Cn{constructor(e){super(e)}add(e,i){if(!(e instanceof B0))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be added.");if(i!==void 0&&(!i||typeof i!="object"))throw new TypeError("meta, when provided, must be an object.");return this._ensureValidAdd(),this._connectedTrack.output._muxer.addEncodedVideoPacket(this._connectedTrack,e,i)}}class gn extends rs{constructor(e){if(super(),this._connectedTrack=null,!ui.includes(e))throw new TypeError(`Invalid audio codec '${e}'. Must be one of: ${ui.join(", ")}.`);this._codec=e}}class T1 extends gn{constructor(e){super(e)}add(e,i){if(!(e instanceof B0))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be added.");if(i!==void 0&&(!i||typeof i!="object"))throw new TypeError("meta, when provided, must be an object.");return this._ensureValidAdd(),this._connectedTrack.output._muxer.addEncodedAudioPacket(this._connectedTrack,e,i)}}class W1 extends rs{constructor(e){if(super(),this._connectedTrack=null,!hi.includes(e))throw new TypeError(`Invalid subtitle codec '${e}'. Must be one of: ${hi.join(", ")}.`);this._codec=e}}/*!
370
370
  * Copyright (c) 2025-present, Vanilagy and contributors
371
371
  *
372
372
  * This Source Code Form is subject to the terms of the Mozilla Public
373
373
  * License, v. 2.0. If a copy of the MPL was not distributed with this
374
374
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
375
- */const T1=["video","audio","subtitle"],zi=t=>{if(!t||typeof t!="object")throw new TypeError("metadata must be an object.");if(t.languageCode!==void 0&&!ka(t.languageCode))throw new TypeError("metadata.languageCode, when provided, must be a three-letter, ISO 639-2/T language code.");if(t.name!==void 0&&typeof t.name!="string")throw new TypeError("metadata.name, when provided, must be a string.");if(t.disposition!==void 0&&Fa(t.disposition),t.maximumPacketCount!==void 0&&(!Number.isInteger(t.maximumPacketCount)||t.maximumPacketCount<0))throw new TypeError("metadata.maximumPacketCount, when provided, must be a non-negative integer.")};class W1{constructor(e){if(this.state="pending",this._tracks=[],this._startPromise=null,this._cancelPromise=null,this._finalizePromise=null,this._mutex=new pn,this._metadataTags={},!e||typeof e!="object")throw new TypeError("options must be an object.");if(!(e.format instanceof wn))throw new TypeError("options.format must be an OutputFormat.");if(!(e.target instanceof Hn))throw new TypeError("options.target must be a Target.");if(e.target._output)throw new Error("Target is already used for another output.");e.target._output=this,this.format=e.format,this.target=e.target,this._writer=e.target._createWriter(),this._muxer=e.format._createMuxer(this)}addVideoTrack(e,i={}){if(!(e instanceof Bn))throw new TypeError("source must be a VideoSource.");if(zi(i),i.rotation!==void 0&&![0,90,180,270].includes(i.rotation))throw new TypeError(`Invalid video rotation: ${i.rotation}. Has to be 0, 90, 180 or 270.`);if(!this.format.supportsVideoRotationMetadata&&i.rotation)throw new Error(`${this.format._name} does not support video rotation metadata.`);if(i.frameRate!==void 0&&(!Number.isFinite(i.frameRate)||i.frameRate<=0))throw new TypeError(`Invalid video frame rate: ${i.frameRate}. Must be a positive number.`);this._addTrack("video",e,i)}addAudioTrack(e,i={}){if(!(e instanceof Cn))throw new TypeError("source must be an AudioSource.");zi(i),this._addTrack("audio",e,i)}addSubtitleTrack(e,i={}){if(!(e instanceof R1))throw new TypeError("source must be a SubtitleSource.");zi(i),this._addTrack("subtitle",e,i)}setMetadataTags(e){if(ga(e),this.state!=="pending")throw new Error("Cannot set metadata tags after output has been started or canceled.");this._metadataTags=e}_addTrack(e,i,n){if(this.state!=="pending")throw new Error("Cannot add track after output has been started or canceled.");if(i._connectedTrack)throw new Error("Source is already used for a track.");const d=this.format.getSupportedTrackCounts(),o=this._tracks.reduce((W,v)=>W+(v.type===e?1:0),0),m=d[e].max;if(o===m)throw new Error(m===0?`${this.format._name} does not support ${e} tracks.`:`${this.format._name} does not support more than ${m} ${e} track${m===1?"":"s"}.`);const h=d.total.max;if(this._tracks.length===h)throw new Error(`${this.format._name} does not support more than ${h} tracks${h===1?"":"s"} in total.`);const S={id:this._tracks.length+1,output:this,type:e,source:i,metadata:n};if(S.type==="video"){const W=this.format.getSupportedVideoCodecs();if(W.length===0)throw new Error(`${this.format._name} does not support video tracks.`+this.format._codecUnsupportedHint(S.source._codec));if(!W.includes(S.source._codec))throw new Error(`Codec '${S.source._codec}' cannot be contained within ${this.format._name}. Supported video codecs are: ${W.map(v=>`'${v}'`).join(", ")}.`+this.format._codecUnsupportedHint(S.source._codec))}else if(S.type==="audio"){const W=this.format.getSupportedAudioCodecs();if(W.length===0)throw new Error(`${this.format._name} does not support audio tracks.`+this.format._codecUnsupportedHint(S.source._codec));if(!W.includes(S.source._codec))throw new Error(`Codec '${S.source._codec}' cannot be contained within ${this.format._name}. Supported audio codecs are: ${W.map(v=>`'${v}'`).join(", ")}.`+this.format._codecUnsupportedHint(S.source._codec))}else if(S.type==="subtitle"){const W=this.format.getSupportedSubtitleCodecs();if(W.length===0)throw new Error(`${this.format._name} does not support subtitle tracks.`+this.format._codecUnsupportedHint(S.source._codec));if(!W.includes(S.source._codec))throw new Error(`Codec '${S.source._codec}' cannot be contained within ${this.format._name}. Supported subtitle codecs are: ${W.map(v=>`'${v}'`).join(", ")}.`+this.format._codecUnsupportedHint(S.source._codec))}this._tracks.push(S),i._connectedTrack=S}async start(){const e=this.format.getSupportedTrackCounts();for(const n of T1){const d=this._tracks.reduce((m,h)=>m+(h.type===n?1:0),0),o=e[n].min;if(d<o)throw new Error(o===e[n].max?`${this.format._name} requires exactly ${o} ${n} track${o===1?"":"s"}.`:`${this.format._name} requires at least ${o} ${n} track${o===1?"":"s"}.`)}const i=e.total.min;if(this._tracks.length<i)throw new Error(i===e.total.max?`${this.format._name} requires exactly ${i} track${i===1?"":"s"}.`:`${this.format._name} requires at least ${i} track${i===1?"":"s"}.`);if(this.state==="canceled")throw new Error("Output has been canceled.");return this._startPromise?(console.warn("Output has already been started."),this._startPromise):this._startPromise=(async()=>{this.state="started",this._writer.start();const n=await this._mutex.acquire();await this._muxer.start();const d=this._tracks.map(o=>o.source._start());await Promise.all(d),n()})()}getMimeType(){return this._muxer.getMimeType()}async cancel(){if(this._cancelPromise)return console.warn("Output has already been canceled."),this._cancelPromise;if(this.state==="finalizing"||this.state==="finalized"){console.warn("Output has already been finalized.");return}return this._cancelPromise=(async()=>{this.state="canceled";const e=await this._mutex.acquire(),i=this._tracks.map(n=>n.source._flushOrWaitForOngoingClose(!0));await Promise.all(i),await this._writer.close(),e()})()}async finalize(){if(this.state==="pending")throw new Error("Cannot finalize before starting.");if(this.state==="canceled")throw new Error("Cannot finalize after canceling.");return this._finalizePromise?(console.warn("Output has already been finalized."),this._finalizePromise):this._finalizePromise=(async()=>{this.state="finalizing";const e=await this._mutex.acquire(),i=this._tracks.map(n=>n.source._flushOrWaitForOngoingClose(!1));await Promise.all(i),await this._muxer.finalize(),await this._writer.flush(),await this._writer.finalize(),this.state="finalized",e()})()}}class L1{constructor(e){this.type=e||"video",this.target=new Yn;const i=new W1({format:new Mn,target:this.target});this.started=!1,this.output=i,this.source=this.type==="video"?new I1("avc"):new V1("aac"),this.output.addVideoTrack(this.source),console.warn("⚠️ Demo/Learning Function: This utility is intended for demos and learning purposes only. For production use, please use a proper muxing library like MediaBunny (https://mediabunny.dev/) ")}addChunk(e,i){this.started||(this.output.start(),this.started=!0),this.source.add(B0.fromEncodedChunk(e),i)}async finish(){return await this.output.finalize(),this.target.buffer}}exports.ExampleMuxer=L1;exports.GPUFrameRenderer=Nn;exports.InMemoryStorage=Xa;exports.MP3Decoder=da;exports.MP3Encoder=ca;exports.MP4Demuxer=Za;exports.demuxAudio=Ta;exports.demuxVideo=Wa;exports.extractChannels=As;exports.getAudioChunks=La;exports.getBitrate=Jn;exports.getCodecString=En;exports.getVideoChunks=Ra;
375
+ */const L1=["video","audio","subtitle"],zi=t=>{if(!t||typeof t!="object")throw new TypeError("metadata must be an object.");if(t.languageCode!==void 0&&!Ca(t.languageCode))throw new TypeError("metadata.languageCode, when provided, must be a three-letter, ISO 639-2/T language code.");if(t.name!==void 0&&typeof t.name!="string")throw new TypeError("metadata.name, when provided, must be a string.");if(t.disposition!==void 0&&Ea(t.disposition),t.maximumPacketCount!==void 0&&(!Number.isInteger(t.maximumPacketCount)||t.maximumPacketCount<0))throw new TypeError("metadata.maximumPacketCount, when provided, must be a non-negative integer.")};class x1{constructor(e){if(this.state="pending",this._tracks=[],this._startPromise=null,this._cancelPromise=null,this._finalizePromise=null,this._mutex=new yn,this._metadataTags={},!e||typeof e!="object")throw new TypeError("options must be an object.");if(!(e.format instanceof Kn))throw new TypeError("options.format must be an OutputFormat.");if(!(e.target instanceof Yn))throw new TypeError("options.target must be a Target.");if(e.target._output)throw new Error("Target is already used for another output.");e.target._output=this,this.format=e.format,this.target=e.target,this._writer=e.target._createWriter(),this._muxer=e.format._createMuxer(this)}addVideoTrack(e,i={}){if(!(e instanceof Cn))throw new TypeError("source must be a VideoSource.");if(zi(i),i.rotation!==void 0&&![0,90,180,270].includes(i.rotation))throw new TypeError(`Invalid video rotation: ${i.rotation}. Has to be 0, 90, 180 or 270.`);if(!this.format.supportsVideoRotationMetadata&&i.rotation)throw new Error(`${this.format._name} does not support video rotation metadata.`);if(i.frameRate!==void 0&&(!Number.isFinite(i.frameRate)||i.frameRate<=0))throw new TypeError(`Invalid video frame rate: ${i.frameRate}. Must be a positive number.`);this._addTrack("video",e,i)}addAudioTrack(e,i={}){if(!(e instanceof gn))throw new TypeError("source must be an AudioSource.");zi(i),this._addTrack("audio",e,i)}addSubtitleTrack(e,i={}){if(!(e instanceof W1))throw new TypeError("source must be a SubtitleSource.");zi(i),this._addTrack("subtitle",e,i)}setMetadataTags(e){if(Ja(e),this.state!=="pending")throw new Error("Cannot set metadata tags after output has been started or canceled.");this._metadataTags=e}_addTrack(e,i,n){if(this.state!=="pending")throw new Error("Cannot add track after output has been started or canceled.");if(i._connectedTrack)throw new Error("Source is already used for a track.");const d=this.format.getSupportedTrackCounts(),o=this._tracks.reduce((W,v)=>W+(v.type===e?1:0),0),m=d[e].max;if(o===m)throw new Error(m===0?`${this.format._name} does not support ${e} tracks.`:`${this.format._name} does not support more than ${m} ${e} track${m===1?"":"s"}.`);const h=d.total.max;if(this._tracks.length===h)throw new Error(`${this.format._name} does not support more than ${h} tracks${h===1?"":"s"} in total.`);const S={id:this._tracks.length+1,output:this,type:e,source:i,metadata:n};if(S.type==="video"){const W=this.format.getSupportedVideoCodecs();if(W.length===0)throw new Error(`${this.format._name} does not support video tracks.`+this.format._codecUnsupportedHint(S.source._codec));if(!W.includes(S.source._codec))throw new Error(`Codec '${S.source._codec}' cannot be contained within ${this.format._name}. Supported video codecs are: ${W.map(v=>`'${v}'`).join(", ")}.`+this.format._codecUnsupportedHint(S.source._codec))}else if(S.type==="audio"){const W=this.format.getSupportedAudioCodecs();if(W.length===0)throw new Error(`${this.format._name} does not support audio tracks.`+this.format._codecUnsupportedHint(S.source._codec));if(!W.includes(S.source._codec))throw new Error(`Codec '${S.source._codec}' cannot be contained within ${this.format._name}. Supported audio codecs are: ${W.map(v=>`'${v}'`).join(", ")}.`+this.format._codecUnsupportedHint(S.source._codec))}else if(S.type==="subtitle"){const W=this.format.getSupportedSubtitleCodecs();if(W.length===0)throw new Error(`${this.format._name} does not support subtitle tracks.`+this.format._codecUnsupportedHint(S.source._codec));if(!W.includes(S.source._codec))throw new Error(`Codec '${S.source._codec}' cannot be contained within ${this.format._name}. Supported subtitle codecs are: ${W.map(v=>`'${v}'`).join(", ")}.`+this.format._codecUnsupportedHint(S.source._codec))}this._tracks.push(S),i._connectedTrack=S}async start(){const e=this.format.getSupportedTrackCounts();for(const n of L1){const d=this._tracks.reduce((m,h)=>m+(h.type===n?1:0),0),o=e[n].min;if(d<o)throw new Error(o===e[n].max?`${this.format._name} requires exactly ${o} ${n} track${o===1?"":"s"}.`:`${this.format._name} requires at least ${o} ${n} track${o===1?"":"s"}.`)}const i=e.total.min;if(this._tracks.length<i)throw new Error(i===e.total.max?`${this.format._name} requires exactly ${i} track${i===1?"":"s"}.`:`${this.format._name} requires at least ${i} track${i===1?"":"s"}.`);if(this.state==="canceled")throw new Error("Output has been canceled.");return this._startPromise?(console.warn("Output has already been started."),this._startPromise):this._startPromise=(async()=>{this.state="started",this._writer.start();const n=await this._mutex.acquire();await this._muxer.start();const d=this._tracks.map(o=>o.source._start());await Promise.all(d),n()})()}getMimeType(){return this._muxer.getMimeType()}async cancel(){if(this._cancelPromise)return console.warn("Output has already been canceled."),this._cancelPromise;if(this.state==="finalizing"||this.state==="finalized"){console.warn("Output has already been finalized.");return}return this._cancelPromise=(async()=>{this.state="canceled";const e=await this._mutex.acquire(),i=this._tracks.map(n=>n.source._flushOrWaitForOngoingClose(!0));await Promise.all(i),await this._writer.close(),e()})()}async finalize(){if(this.state==="pending")throw new Error("Cannot finalize before starting.");if(this.state==="canceled")throw new Error("Cannot finalize after canceling.");return this._finalizePromise?(console.warn("Output has already been finalized."),this._finalizePromise):this._finalizePromise=(async()=>{this.state="finalizing";const e=await this._mutex.acquire(),i=this._tracks.map(n=>n.source._flushOrWaitForOngoingClose(!1));await Promise.all(i),await this._muxer.finalize(),await this._writer.flush(),await this._writer.finalize(),this.state="finalized",e()})()}}class H1{constructor(e){this.type=e||"video",this.target=new wn;const i=new x1({format:new kn,target:this.target});this.started=!1,this.output=i,this.source=this.type==="video"?new R1("avc"):new T1("aac"),this.output.addVideoTrack(this.source),console.warn("⚠️ Demo/Learning Function: This utility is intended for demos and learning purposes only. For production use, please use a proper muxing library like MediaBunny (https://mediabunny.dev/) ")}addChunk(e,i){this.started||(this.output.start(),this.started=!0),this.source.add(B0.fromEncodedChunk(e),i)}async finish(){return await this.output.finalize(),this.target.buffer}}exports.ExampleMuxer=H1;exports.GPUFrameRenderer=Pn;exports.InMemoryStorage=_a;exports.MP3Decoder=ma;exports.MP3Encoder=da;exports.MP4Demuxer=Xa;exports.MediaStreamTrackProcessor=Sa;exports.demuxAudio=La;exports.demuxVideo=xa;exports.extractChannels=As;exports.getAudioChunks=Ha;exports.getBitrate=En;exports.getCodecString=Nn;exports.getVideoChunks=Wa;