{"version":3,"sources":["webpack://ruffle-selfhosted/webpack/runtime/create fake namespace object","webpack://ruffle-selfhosted/webpack/bootstrap","webpack://ruffle-selfhosted/webpack/runtime/define property getters","webpack://ruffle-selfhosted/webpack/runtime/global","webpack://ruffle-selfhosted/webpack/runtime/hasOwnProperty shorthand","webpack://ruffle-selfhosted/webpack/runtime/make namespace object","webpack://ruffle-selfhosted/webpack/runtime/publicPath","webpack://ruffle-selfhosted/webpack/runtime/jsonp chunk loading","webpack://ruffle-selfhosted/../core/pkg/ruffle_web.js","webpack://ruffle-selfhosted/../core/pkg/ruffle-imports.js","webpack://ruffle-selfhosted/../core/pkg/js-polyfills.js","webpack://ruffle-selfhosted/../core/pkg/load-ruffle.js","webpack://ruffle-selfhosted/../core/pkg/plugin-polyfill.js","webpack://ruffle-selfhosted/../core/pkg/shadow-template.js","webpack://ruffle-selfhosted/../core/pkg/register-element.js","webpack://ruffle-selfhosted/../core/pkg/load-options.js","webpack://ruffle-selfhosted/../core/pkg/ruffle-player.js","webpack://ruffle-selfhosted/../core/pkg/ruffle-embed.js","webpack://ruffle-selfhosted/../core/pkg/ruffle-object.js","webpack://ruffle-selfhosted/../core/pkg/public-path.js","webpack://ruffle-selfhosted/../core/pkg/polyfills.js","webpack://ruffle-selfhosted/../core/pkg/version.js","webpack://ruffle-selfhosted/../core/pkg/version-range.js","webpack://ruffle-selfhosted/../core/pkg/public-api.js","webpack://ruffle-selfhosted/./js/ruffle.js","webpack://ruffle-selfhosted/../core/pkg/source-api.js"],"names":["leafPrototypes","getProto","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","m","Object","getPrototypeOf","obj","t","value","mode","this","__esModule","then","ns","create","r","def","current","indexOf","getOwnPropertyNames","forEach","key","d","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","window","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","p","b","document","baseURI","self","location","href","lAudioContext","AudioContext","webkitAudioContext","wasm","heap","Array","fill","getObject","idx","push","heap_next","length","takeObject","ret","dropObject","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","decode","cachegetUint8Memory0","getUint8Memory0","buffer","memory","Uint8Array","getStringFromWasm0","ptr","len","subarray","addHeapObject","WASM_VECTOR_LEN","cachedTextEncoder","TextEncoder","encodeString","encodeInto","arg","view","buf","encode","set","read","written","passStringToWasm0","malloc","realloc","mem","offset","code","charCodeAt","slice","cachegetInt32Memory0","getInt32Memory0","Int32Array","isLikeNone","x","cachegetFloat64Memory0","debugString","val","type","description","name","isArray","debug","i","builtInMatches","exec","toString","className","JSON","stringify","_","Error","message","stack","makeMutClosure","arg0","arg1","dtor","f","state","a","cnt","real","args","__wbindgen_export_2","original","__wbg_adapter_34","arg2","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0f189e8860a0be4c","__wbg_adapter_37","__wbg_adapter_40","__wbg_adapter_43","__wbg_adapter_46","_dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hef57e90579a15cb9","__wbg_adapter_49","__wbg_adapter_52","__wbg_adapter_55","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd70aa0cfe6dcb1fe","__wbg_adapter_58","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h9364750606879730","cachegetFloat32Memory0","getArrayF32FromWasm0","Float32Array","handleError","apply","arguments","__wbindgen_exn_store","stack_pointer","addBorrowedObject","cachegetUint32Memory0","getArrayU8FromWasm0","Ruffle","__destroy_into_raw","free","__wbg_ruffle_free","constructor","parent","js_player","config","ruffle_new","__wrap","stream_from","movie_url","parameters","ptr0","__wbindgen_malloc","__wbindgen_realloc","len0","ruffle_stream_from","load_data","swf_data","ruffle_load_data","play","ruffle_play","pause","ruffle_pause","is_playing","ruffle_is_playing","prepare_context_menu","ruffle_prepare_context_menu","run_context_menu_callback","index","ruffle_run_context_menu_callback","clear_custom_menu_items","ruffle_clear_custom_menu_items","destroy","ruffle_destroy","call_exposed_callback","ptr1","array","Uint32Array","passArrayJsValueToWasm0","len1","ruffle_call_exposed_callback","set_trace_observer","observer","ruffle_set_trace_observer","audio_context","ruffle_audio_context","async","init","input","URL","imports","wbg","__wbindgen_object_drop_ref","__wbindgen_cb_drop","__wbindgen_string_new","__wbindgen_is_function","__wbindgen_json_parse","parse","__wbindgen_json_serialize","__wbindgen_object_clone_ref","__wbg_isFullscreen_96b85640554e160d","isFullscreen","__wbg_displayUnsupportedMessage_a8f81a8e054e5e91","displayUnsupportedMessage","__wbg_displayMessage_c57c20204892da2b","displayMessage","__wbg_new_df6e6ab7a65c4c4d","__wbg_panic_bbc809dd04a12c60","panic","__wbg_copyToAudioBuffer_58f244be94bac1d2","arg3","arg4","audioBuffer","leftData","rightData","getChannelData","__wbg_setMetadata_bbaeaee7f48274e6","setMetadata","__wbg_onCallbackAvailable_3a48fae397926c96","onCallbackAvailable","__wbg_onFSCommand_fb2f94653f71796e","onFSCommand","__wbindgen_number_new","__wbg_new_59cb74e423758ede","__wbg_stack_558ba5917b466edd","__wbg_error_4bb6c2a97407129a","console","error","__wbindgen_free","__wbindgen_is_undefined","__wbg_instanceof_WebGl2RenderingContext_61a66a1af6516586","WebGL2RenderingContext","__wbg_bindVertexArray_808c39d3c0f17264","bindVertexArray","__wbg_blitFramebuffer_3b625df19331f21c","arg5","arg6","arg7","arg8","arg9","arg10","blitFramebuffer","__wbg_createVertexArray_855d59250230c563","createVertexArray","__wbg_renderbufferStorageMultisample_bbeb2b87cb14307f","renderbufferStorageMultisample","__wbg_texImage2D_173d216c50e54701","texImage2D","__wbg_bindFramebuffer_ce3cfcfec4aa02cc","bindFramebuffer","__wbg_bindRenderbuffer_35f3639b7da4e4c7","bindRenderbuffer","__wbg_bindTexture_f2a0487a487a78d9","bindTexture","__wbg_createFramebuffer_7fd863d54241be81","createFramebuffer","__wbg_createRenderbuffer_52ebc0325ed6e885","createRenderbuffer","__wbg_createTexture_a46f881a1c96b496","createTexture","__wbg_deleteFramebuffer_867aba8474910f62","deleteFramebuffer","__wbg_deleteRenderbuffer_eb162fd0beb632da","deleteRenderbuffer","__wbg_deleteTexture_1affe310edd12b75","deleteTexture","__wbg_framebufferRenderbuffer_7bb033ee5a2eca8c","framebufferRenderbuffer","__wbg_framebufferTexture2D_9a77a023fd4aedcc","framebufferTexture2D","__wbg_getError_142acae679908a25","getError","__wbg_getParameter_34e9af6606eb8544","getParameter","__wbg_texParameteri_e99b48aa90ae569b","texParameteri","__wbg_instanceof_Window_9c4fd26090e1d029","Window","__wbg_document_249e9cf340780f93","__wbg_location_cf542a8f458da7b4","__wbg_navigator_fdf3521d0e190a9b","navigator","__wbg_devicePixelRatio_ea9c0157a379b3ec","devicePixelRatio","__wbg_performance_e029cf47e1c47c09","performance","__wbg_localStorage_884d77b5cedf820a","localStorage","__wbg_cancelAnimationFrame_28c6665c9b2a3944","cancelAnimationFrame","__wbg_focus_b5729f61a3280cbc","focus","__wbg_open_313f5801aab5e2f1","open","__wbg_requestAnimationFrame_aa3bab1f9557a4da","requestAnimationFrame","__wbg_fetch_eaee025997e4cd56","fetch","__wbg_destination_c5ce4ac317c9219f","destination","__wbg_sampleRate_cc13fe55474678eb","sampleRate","__wbg_currentTime_ae061c195387b7ac","currentTime","__wbg_new_29e8884899ea6ee2","__wbg_suspend_4b5d3b7ee1f4a3ec","suspend","__wbg_createBuffer_53c7286e081d0b3e","createBuffer","__wbg_createBufferSource_8b7fd8bc4222b208","createBufferSource","__wbg_createChannelMerger_c059636adf34e09d","createChannelMerger","__wbg_createChannelSplitter_68062f62d4d66ed8","createChannelSplitter","__wbg_createGain_7b6dadac3a6522d6","createGain","__wbg_createScriptProcessor_bce5438a51faa41d","createScriptProcessor","__wbg_decodeAudioData_81b31c0703465a21","decodeAudioData","__wbg_resume_2c75f8fc1fd26d4b","resume","__wbg_gain_b3536e37256053f5","gain","__wbg_baseURI_6a10de9fa3003a69","__wbg_appendChild_6ae001e6d3556190","appendChild","__wbg_get_36b7a676e4c8aee9","__wbg_set_ad2026ce7b489f96","__wbg_delete_9614de882c9a0cf5","__wbg_instanceof_SvgsvgElement_28ef05afde3449f9","SVGSVGElement","__wbg_createSVGMatrix_43815bd5777c567f","createSVGMatrix","__wbg_setProperty_84c0a22125c731d6","setProperty","__wbg_protocol_2d293dcd35a07041","protocol","__wbg_assign_fc277322e1a88614","assign","__wbg_new_3c2bf2a5257369ec","Path2D","__wbg_addPath_cf691ede06f38917","addPath","__wbg_closePath_48f860f5bcbc79f3","closePath","__wbg_lineTo_7fd48462a80ac962","lineTo","__wbg_moveTo_62ea44f899317925","moveTo","__wbg_quadraticCurveTo_6f746087da5a242c","quadraticCurveTo","__wbg_length_914ec377666a1fb8","__wbg_connect_3a117c24756fdf62","connect","__wbg_connect_3a51bca7e31cd323","__wbg_connect_52449bed6e387d23","__wbg_disconnect_b101656fb34b9fa3","disconnect","__wbg_setTransform_4c6870c885e2b89e","setTransform","__wbg_offsetX_951495e9516f0aeb","offsetX","__wbg_offsetY_0377a1f53f902a1e","offsetY","__wbg_button_c35922e0098b9cda","button","__wbg_outputBuffer_7e7061041aa8a304","outputBuffer","__wbg_bindVertexArrayOES_bb8a104f35d5cf4f","bindVertexArrayOES","__wbg_createVertexArrayOES_51a703442a9d8099","createVertexArrayOES","__wbg_instanceof_Response_8295bf7aacde3233","Response","__wbg_ok_e1e8f70fbf7c1fdc","ok","__wbg_statusText_c5b7d9b4bc84d715","statusText","__wbg_arrayBuffer_a98df6d58bb5ea26","arrayBuffer","__wbg_seta_5138c769bc027dee","__wbg_setb_d92c5b9331343d2e","__wbg_setc_c6fbbb68c7ba4693","c","__wbg_setd_42dcf42c3ceabc9b","__wbg_sete_49250c2d46b375b3","__wbg_setf_12cb2512fe19ba3f","__wbg_deltaY_49d792c5901e3fc1","deltaY","__wbg_deltaMode_7ed5ee895d112617","deltaMode","__wbg_setbuffer_5aca59a6f26d3307","__wbg_setloop_710fa1431c2bc494","loop","__wbg_setloopStart_988c5aad78cc446c","loopStart","__wbg_setloopEnd_fcc6c08574ca8ae5","loopEnd","__wbg_setonended_0efd780b31d16bbf","onended","__wbg_start_e92060130d43d928","start","__wbg_start_a8d199336331f3a5","__wbg_stop_37842cd5a56a341c","stop","__wbg_instanceof_HtmlFormElement_de39c8070c818493","HTMLFormElement","__wbg_submit_e668f2e6a4582aa6","submit","__wbg_now_4abbca4ef2aba8d6","now","__wbg_pointerId_e68d773decdc9224","pointerId","__wbg_setonaudioprocess_9d6a213da205ae4d","onaudioprocess","__wbg_newwithbuffersourcesequenceandoptions_689c4999a01e0d8c","Blob","__wbg_instanceof_HtmlCanvasElement_e0e251da2aa0b541","HTMLCanvasElement","__wbg_width_5843e31ec081f978","width","__wbg_setwidth_fd251e9da5abcced","__wbg_height_872c06b1bc666dd9","height","__wbg_setheight_5b882973e84fa13c","__wbg_getContext_d778ffc8203f64ae","getContext","__wbg_getContext_4678c25f580222b0","__wbg_key_97a48109ce6890c4","__wbg_code_e70e2272901f086c","__wbg_newwithstrandinit_a58924208f457f33","Request","__wbg_body_0d97f334de622953","body","__wbg_createElement_ba61aad8af6be7f4","createElement","__wbg_createElementNS_c951238dc260501e","createElementNS","__wbg_setid_16518c90432c2f8e","id","__wbg_clientWidth_405142b36824cd4f","clientWidth","__wbg_clientHeight_645231c9da3480a9","clientHeight","__wbg_querySelector_6c8f27227fc14315","querySelector","__wbg_releasePointerCapture_758b760808d6ce02","releasePointerCapture","__wbg_setAttribute_0b50656f1ccc45bf","setAttribute","__wbg_setAttributeNS_d31649e78e2cf95c","setAttributeNS","__wbg_setPointerCapture_6f31425163cf44a1","setPointerCapture","__wbg_remove_eabff3d9e444a826","remove","__wbg_instanceof_WebGlRenderingContext_5671fd2c102046b1","WebGLRenderingContext","__wbg_drawingBufferWidth_0f8ef2b95bb66c81","drawingBufferWidth","__wbg_drawingBufferHeight_04a3507b6fb21bac","drawingBufferHeight","__wbg_bufferData_9f09145baa3273f9","bufferData","__wbg_texImage2D_48722cf9f95c8df8","__wbg_uniform1fv_0b5950d4f588ac7e","uniform1fv","__wbg_uniform4fv_8fa4c0052d79aed2","uniform4fv","__wbg_uniformMatrix3fv_c4a15deb8d8fbd61","uniformMatrix3fv","__wbg_uniformMatrix4fv_62951f66fbf764cd","uniformMatrix4fv","__wbg_activeTexture_790fa161eaf8dcb0","activeTexture","__wbg_attachShader_5446231928034874","attachShader","__wbg_bindBuffer_5b0bd39cdc9f3c91","bindBuffer","__wbg_bindFramebuffer_9490ff183a431d0d","__wbg_bindRenderbuffer_86495e658e23020f","__wbg_bindTexture_6df7d2262019c813","__wbg_blendFunc_c91f929b64e24ca6","blendFunc","__wbg_clear_216e95e64c0ce688","clear","__wbg_clearColor_f7316ccd75b2a3b1","clearColor","__wbg_colorMask_cc8730de91ea02ce","colorMask","__wbg_compileShader_749eb91c541c360c","compileShader","__wbg_createBuffer_8ae1735de737ca21","__wbg_createProgram_28f1378728397a46","createProgram","__wbg_createShader_f6da8384be38c095","createShader","__wbg_createTexture_be549d53d11ebf83","__wbg_disable_b2672dfd98db0d2c","disable","__wbg_disableVertexAttribArray_f5154961c6bbc61f","disableVertexAttribArray","__wbg_drawElements_19a4ea67a2f14d44","drawElements","__wbg_enable_9c5b69ae0579565d","enable","__wbg_enableVertexAttribArray_eff1f71734ec0c24","enableVertexAttribArray","__wbg_getAttribLocation_7321b82ba20f42ed","getAttribLocation","__wbg_getExtension_29e749f65dd345b5","getExtension","__wbg_getParameter_e02390c31b2aedb9","__wbg_getProgramInfoLog_89c655cf7d3deb29","getProgramInfoLog","__wbg_getProgramParameter_97fb617622a1e9c6","getProgramParameter","__wbg_getShaderInfoLog_8fbfc8052cd2a5c2","getShaderInfoLog","__wbg_getUniformLocation_8ef86decd2ceb6a0","getUniformLocation","__wbg_linkProgram_b060b6f5c6419695","linkProgram","__wbg_pixelStorei_1e9534b41710bd3f","pixelStorei","__wbg_shaderSource_e00c8c2b41679a01","shaderSource","__wbg_stencilFunc_eeb2374a49160e1e","stencilFunc","__wbg_stencilMask_8383787c8968e634","stencilMask","__wbg_stencilOp_d618117604d44e35","stencilOp","__wbg_texParameteri_58c0d4e82f062e6f","__wbg_uniform1f_affc2490c2cff524","uniform1f","__wbg_uniform1i_584ce89a2fa7078d","uniform1i","__wbg_useProgram_ad5593b87b2aec4f","useProgram","__wbg_vertexAttribPointer_3e272f16a22bb68c","vertexAttribPointer","__wbg_viewport_40ac6422fa7e7109","viewport","__wbg_debug_3c0b82934d1dd91e","__wbg_error_9ff84d33a850b1ef","__wbg_info_3b2058a219fa31b9","info","__wbg_log_386a8115a84a780d","log","__wbg_warn_5fc232d538408d4a","warn","__wbg_style_9290c51fe7cb7783","style","__wbg_setvalue_e8ff05630a7ffecb","__wbg_linearRampToValueAtTime_0245aa9e5d87776f","linearRampToValueAtTime","__wbg_setValueAtTime_b4a172acdfc9830f","setValueAtTime","__wbg_currentTarget_a3b06d00ff76859b","currentTarget","__wbg_preventDefault_19876bf3a4179b34","preventDefault","__wbg_addEventListener_b334b84e6525699c","addEventListener","__wbg_addEventListener_502683a26945b1a5","__wbg_addEventListener_b88d8dd107ce2f39","__wbg_removeEventListener_380d0ebdf9cd12ba","removeEventListener","__wbg_removeEventListener_1f30d3e3ef4ee58e","__wbg_setsrc_21ed0b40d0ff0413","src","__wbg_new_0891fac076d9e6b3","Image","__wbg_newwithwidthandheight_045e54743ae79290","__wbg_data_7db9e348ce1855fa","passArray8ToWasm0","data","__wbg_userAgent_89e0d93ea0bfe354","userAgent","__wbg_instanceof_CanvasRenderingContext2d_eea9cd931eb496b7","CanvasRenderingContext2D","__wbg_setglobalAlpha_6b6fb9a57a09df9d","globalAlpha","__wbg_setglobalCompositeOperation_e404daf7e6bb63e4","globalCompositeOperation","__wbg_setstrokeStyle_72f1ad8117744d41","strokeStyle","__wbg_setfillStyle_5306396b0368ba08","fillStyle","__wbg_setfilter_fa947e793349a2de","filter","__wbg_setlineWidth_9f25e0ceca65a4d7","lineWidth","__wbg_setlineCap_6c7169ac07a6349e","lineCap","__wbg_setlineJoin_d6311997533dcdbf","lineJoin","__wbg_setmiterLimit_cd181ac4dc64fc1d","miterLimit","__wbg_drawImage_ff0075aa41bc6155","drawImage","__wbg_drawImage_b43cf9d292491493","__wbg_fill_a928208ebdb3fecc","__wbg_stroke_c19677a93050ef02","stroke","__wbg_createPattern_a737181b452c0941","createPattern","__wbg_getImageData_6e56dc172cd2ed36","getImageData","__wbg_clearRect_dbb56982eff2a250","clearRect","__wbg_fillRect_33b210367d4a0063","fillRect","__wbg_resetTransform_09cd4a47a1d0fc9c","resetTransform","__wbg_setTransform_36254c0c8f264eee","__wbg_get_f099d98ea7d68360","__wbg_next_9d10ccb28a5fd327","next","__wbg_done_faa42c8d1dd8ca9e","done","__wbg_value_9befa7ab4a7326bf","__wbg_get_0c6963cbab34fbb6","Reflect","__wbg_call_cb478d88f3068c91","__wbg_new_8528c110a833413f","__wbg_isArray_bccef1135dd559c1","__wbg_of_1988d238bc84b807","of","__wbg_push_17a514d8ab666103","__wbg_instanceof_ArrayBuffer_ee6a79eaea0f4f5b","ArrayBuffer","__wbg_new_66923a754de9cf28","__wbg_slice_1b99bf7e559f62b2","__wbg_values_0e37ea0767d5caba","values","__wbg_newnoargs_3efc7bfa69a681f9","__wbg_apply_2d67e7379df5344f","__wbg_call_f5e0576f61ee7461","__wbg_getTime_135e6afc6013ba72","getTime","__wbg_getTimezoneOffset_39fb6af112fac02f","getTimezoneOffset","__wbg_new0_8e8ab0e7714cf1dd","Date","__wbg_instanceof_Object_d6b4e933180fbb26","__wbg_entries_a9881e0ca10e3cb2","entries","__wbg_fromEntries_8be754b4532b35f4","fromEntries","__wbg_is_573b30cf06a763fb","is","__wbg_new_d14bf16e62c6b3d5","__wbg_resolve_778af3f90b8e2b59","Promise","resolve","__wbg_then_367b3e718069cfb9","__wbg_then_ac66ca61394bfd21","__wbg_self_05c54dcacb623b9a","__wbg_window_9777ce446d12989f","__wbg_globalThis_f0ca0bbb0149cf3d","__wbg_global_c3c8325ae8c7f1a9","global","__wbg_buffer_ebc6c8e75510eae3","__wbg_newwithbyteoffsetandlength_ca3d3d8811ecb569","__wbg_length_317f0dd77f7a6673","__wbg_new_135e963dedf67b22","__wbg_set_4a5072a31008e0cb","__wbg_fill_f08a873179c69e31","__wbg_buffer_3580452571655bd0","__wbg_byteLength_7d55aca7ec6c42cb","byteLength","__wbg_byteOffset_2ebe3f5c421f3a99","byteOffset","__wbg_ownKeys_b6c8becb6576203e","ownKeys","__wbg_set_61642586f7156f4a","__wbindgen_number_get","Float64Array","__wbindgen_string_get","__wbindgen_boolean_get","v","__wbindgen_debug_string","__wbindgen_throw","__wbindgen_rethrow","__wbindgen_memory","__wbindgen_closure_wrapper399","__wbindgen_closure_wrapper401","__wbindgen_closure_wrapper403","__wbindgen_closure_wrapper405","__wbindgen_closure_wrapper407","__wbindgen_closure_wrapper409","__wbindgen_closure_wrapper411","__wbindgen_closure_wrapper413","__wbindgen_closure_wrapper1775","instance","WebAssembly","instantiateStreaming","headers","bytes","instantiate","Instance","load","__wbindgen_wasm_module","isNativeFunction","func","lastLoaded","loadRuffle","thisArg","_arguments","generator","reduce","Prototype","Version","callback","TypeError","k","target","ruffleWasm","default","P","reject","fulfilled","step","rejected","result","fetchRuffle","RuffleMimeTypeArray","native_mimetype_array","__mimetypes","__named_mimetypes","install","mimetype","item","namedItem","iterator","RufflePlugin","filename","mimetypes","super","RufflePluginArray","native_plugin_array","__plugins","__named_plugins","plugin","FLASH_PLUGIN","suffixes","enabledPlugin","ruffleShadowTemplate","innerHTML","privateRegistry","registerElement","elementName","elementClass","class","tries","customElements","externalName","define","internalName","AutoPlay","Letterbox","UnmuteOverlay","LogLevel","FLASH_MIMETYPE","FUTURESPLASH_MIMETYPE","FLASH7_AND_8_MIMETYPE","FLASH_MOVIE_MIMETYPE","RUFFLE_ORIGIN","DIMENSION_REGEX","PanicError","ReadyState","sanitizeParameters","URLSearchParams","output","RufflePlayer","HTMLElement","hasContextMenu","isTouch","panicked","shadow","attachShadow","content","cloneNode","dynamicStyles","getElementById","container","playButton","playButtonClicked","bind","unmuteOverlay","contextMenuElement","showContextMenu","pointerDown","hideContextMenu","options","_trace_observer","_readyState","HaveNothing","_metadata","ruffleConstructor","lastActivePlayingState","setupPauseOnTabHidden","hidden","connectedCallback","updateStyles","attributeChangedCallback","_oldValue","_newValue","disconnectedCallback","sheet","rules","deleteRule","widthAttr","attributes","getNamedItem","htmlDimensionToCssDimension","insertRule","heightAttr","isUnusedFallbackObject","parentNode","element","lookupElement","nodeName","ensureFreshInstance","_a","catch","ruffleIndexError","FileProtocol","WasmNotFound","String","toLowerCase","includes","WasmMimeType","WasmCors","CSPConflict","InvalidWasm","JavascriptConflict","audioState","visibility","setTimeout","autoplay","Auto","unmuteVisibility","Visible","On","display","unmuteOverlayClicked","once","audioContext","onstatechange","_b","optionsError","url","JavascriptConfiguration","isConnected","allowScriptAccess","contextMenu","backgroundColor","swfUrl","_c","substring","err","fullscreenEnabled","webkitFullscreenEnabled","fullscreenElement","webkitFullscreenElement","enterFullscreen","navigationUI","requestFullscreen","webkitRequestFullscreen","webkitRequestFullScreen","exitFullscreen","webkitExitFullscreen","webkitCancelFullScreen","event","pointerType","contextMenuItems","CHECKMARK","fromCharCode","items","separatorBefore","text","caption","checked","onClick","enabled","firstChild","removeChild","lastElementChild","classList","contains","menuSeparator","hr","menuItem","textContent","add","left","top","rect","getBoundingClientRect","clientX","y","clientY","maxX","maxY","Math","floor","min","copyElement","elem","attrib","specified","node","from","children","attribute","match","out","errorIndex","Unknown","errorArray","stackIndex","debugPlayerInfo","platform","errorText","join","pageUrl","split","errorBody","errorFooter","issueLink","encodeURIComponent","issueBody","viewDetails","onclick","panicBody","div","prepend","metadata","Loaded","dispatchEvent","Event","LOADED_METADATA","isScriptAccessAllowed","access","origin","isSwfFilename","pathname","extension","RuffleEmbed","_d","srcval","attr","createAttribute","setNamedItem","removeNamedItem","oldValue","newValue","flashvars","getAttribute","ruffleObj","findCaseInsensitive","defaultValue","paramsOf","params","param","HTMLParamElement","RuffleObject","movie","keys","getElementsByTagName","isSwf","classid","some","isInterdictable","embedElem","objectElem","publicPath","source_name","path","publicPaths","currentScript","endsWith","isExtension","globalConfig","jsScriptUrl","objects","iframes","polyfillFlashInstances","ruffleObject","fromNativeObjectElement","replaceWith","ruffleEmbed","fromNativeEmbedElement","polyfillFrames","elementsList","dataset","rufflePolyfilled","elementWindow","contentWindow","errorMessage","tagName","readyState","injectRuffle","elementDocument","documentElement","ruffleOptout","script","onload","head","major","minor","patch","prIdent","buildIdent","versionString","buildSplit","prSplit","versionSplit","parseInt","isCompatibleWith","other","hasPrecedenceOver","isNumeric","test","isEqual","isStableOrCompatiblePrerelease","VersionRange","requirements","satisfiedBy","fver","matches","j","comparator","version","requirement","components","trim","fromSemver","PublicAPI","prev","sources","invoked","newestName","conflict","superseded","registerSource","api","newestSourceName","newestVersion","kVersion","polyfills","polyfill","newest","satisfying","ver_requirement","fromRequirementString","valid","localCompatible","local","prevRuffle","sourceName","sourceAPI","publicAPI","pluginPolyfill","negotiate","isExt","MutationObserver","mutationsList","mutation","addedNodes","observe","childList","subtree","plugins","writable","mimeTypes","installPlugin","createPlayer"],"mappings":"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","file":"ruffle.js","sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"\";","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// no jsonp function","import { copyToAudioBuffer } from './ruffle-imports.js';\n\nconst lAudioContext = (typeof AudioContext !== 'undefined' ? AudioContext : (typeof webkitAudioContext !== 'undefined' ? webkitAudioContext : undefined));\nlet wasm;\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n    if (idx < 36) return;\n    heap[idx] = heap_next;\n    heap_next = idx;\n}\n\nfunction takeObject(idx) {\n    const ret = getObject(idx);\n    dropObject(idx);\n    return ret;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n    if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n        cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n    }\n    return cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n    return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nfunction addHeapObject(obj) {\n    if (heap_next === heap.length) heap.push(heap.length + 1);\n    const idx = heap_next;\n    heap_next = heap[idx];\n\n    heap[idx] = obj;\n    return idx;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachedTextEncoder = new TextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n    ? function (arg, view) {\n    return cachedTextEncoder.encodeInto(arg, view);\n}\n    : function (arg, view) {\n    const buf = cachedTextEncoder.encode(arg);\n    view.set(buf);\n    return {\n        read: arg.length,\n        written: buf.length\n    };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n    if (realloc === undefined) {\n        const buf = cachedTextEncoder.encode(arg);\n        const ptr = malloc(buf.length);\n        getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n        WASM_VECTOR_LEN = buf.length;\n        return ptr;\n    }\n\n    let len = arg.length;\n    let ptr = malloc(len);\n\n    const mem = getUint8Memory0();\n\n    let offset = 0;\n\n    for (; offset < len; offset++) {\n        const code = arg.charCodeAt(offset);\n        if (code > 0x7F) break;\n        mem[ptr + offset] = code;\n    }\n\n    if (offset !== len) {\n        if (offset !== 0) {\n            arg = arg.slice(offset);\n        }\n        ptr = realloc(ptr, len, len = offset + arg.length * 3);\n        const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n        const ret = encodeString(arg, view);\n\n        offset += ret.written;\n    }\n\n    WASM_VECTOR_LEN = offset;\n    return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\nfunction getInt32Memory0() {\n    if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n        cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n    }\n    return cachegetInt32Memory0;\n}\n\nfunction isLikeNone(x) {\n    return x === undefined || x === null;\n}\n\nlet cachegetFloat64Memory0 = null;\nfunction getFloat64Memory0() {\n    if (cachegetFloat64Memory0 === null || cachegetFloat64Memory0.buffer !== wasm.memory.buffer) {\n        cachegetFloat64Memory0 = new Float64Array(wasm.memory.buffer);\n    }\n    return cachegetFloat64Memory0;\n}\n\nfunction debugString(val) {\n    // primitive types\n    const type = typeof val;\n    if (type == 'number' || type == 'boolean' || val == null) {\n        return  `${val}`;\n    }\n    if (type == 'string') {\n        return `\"${val}\"`;\n    }\n    if (type == 'symbol') {\n        const description = val.description;\n        if (description == null) {\n            return 'Symbol';\n        } else {\n            return `Symbol(${description})`;\n        }\n    }\n    if (type == 'function') {\n        const name = val.name;\n        if (typeof name == 'string' && name.length > 0) {\n            return `Function(${name})`;\n        } else {\n            return 'Function';\n        }\n    }\n    // objects\n    if (Array.isArray(val)) {\n        const length = val.length;\n        let debug = '[';\n        if (length > 0) {\n            debug += debugString(val[0]);\n        }\n        for(let i = 1; i < length; i++) {\n            debug += ', ' + debugString(val[i]);\n        }\n        debug += ']';\n        return debug;\n    }\n    // Test for built-in\n    const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n    let className;\n    if (builtInMatches.length > 1) {\n        className = builtInMatches[1];\n    } else {\n        // Failed to match the standard '[object ClassName]'\n        return toString.call(val);\n    }\n    if (className == 'Object') {\n        // we're a user defined class or Object\n        // JSON.stringify avoids problems with cycles, and is generally much\n        // easier than looping through ownProperties of `val`.\n        try {\n            return 'Object(' + JSON.stringify(val) + ')';\n        } catch (_) {\n            return 'Object';\n        }\n    }\n    // errors\n    if (val instanceof Error) {\n        return `${val.name}: ${val.message}\\n${val.stack}`;\n    }\n    // TODO we could test for more things here, like `Set`s and `Map`s.\n    return className;\n}\n\nfunction makeMutClosure(arg0, arg1, dtor, f) {\n    const state = { a: arg0, b: arg1, cnt: 1, dtor };\n    const real = (...args) => {\n        // First up with a closure we increment the internal reference\n        // count. This ensures that the Rust closure environment won't\n        // be deallocated while we're invoking it.\n        state.cnt++;\n        const a = state.a;\n        state.a = 0;\n        try {\n            return f(a, state.b, ...args);\n        } finally {\n            if (--state.cnt === 0) {\n                wasm.__wbindgen_export_2.get(state.dtor)(a, state.b);\n\n            } else {\n                state.a = a;\n            }\n        }\n    };\n    real.original = state;\n\n    return real;\n}\nfunction __wbg_adapter_34(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0f189e8860a0be4c(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_37(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0f189e8860a0be4c(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_40(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0f189e8860a0be4c(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_43(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0f189e8860a0be4c(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_46(arg0, arg1) {\n    wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hef57e90579a15cb9(arg0, arg1);\n}\n\nfunction __wbg_adapter_49(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0f189e8860a0be4c(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_52(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0f189e8860a0be4c(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_55(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd70aa0cfe6dcb1fe(arg0, arg1, arg2);\n}\n\nfunction __wbg_adapter_58(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h9364750606879730(arg0, arg1, addHeapObject(arg2));\n}\n\nlet cachegetFloat32Memory0 = null;\nfunction getFloat32Memory0() {\n    if (cachegetFloat32Memory0 === null || cachegetFloat32Memory0.buffer !== wasm.memory.buffer) {\n        cachegetFloat32Memory0 = new Float32Array(wasm.memory.buffer);\n    }\n    return cachegetFloat32Memory0;\n}\n\nfunction getArrayF32FromWasm0(ptr, len) {\n    return getFloat32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction handleError(f) {\n    return function () {\n        try {\n            return f.apply(this, arguments);\n\n        } catch (e) {\n            wasm.__wbindgen_exn_store(addHeapObject(e));\n        }\n    };\n}\n\nlet stack_pointer = 32;\n\nfunction addBorrowedObject(obj) {\n    if (stack_pointer == 1) throw new Error('out of js stack');\n    heap[--stack_pointer] = obj;\n    return stack_pointer;\n}\n\nlet cachegetUint32Memory0 = null;\nfunction getUint32Memory0() {\n    if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n        cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n    }\n    return cachegetUint32Memory0;\n}\n\nfunction passArrayJsValueToWasm0(array, malloc) {\n    const ptr = malloc(array.length * 4);\n    const mem = getUint32Memory0();\n    for (let i = 0; i < array.length; i++) {\n        mem[ptr / 4 + i] = addHeapObject(array[i]);\n    }\n    WASM_VECTOR_LEN = array.length;\n    return ptr;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n    return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n    const ptr = malloc(arg.length * 1);\n    getUint8Memory0().set(arg, ptr / 1);\n    WASM_VECTOR_LEN = arg.length;\n    return ptr;\n}\n/**\n* An opaque handle to a `RuffleInstance` inside the pool.\n*\n* This type is exported to JS, and is used to interact with the library.\n*/\nexport class Ruffle {\n\n    static __wrap(ptr) {\n        const obj = Object.create(Ruffle.prototype);\n        obj.ptr = ptr;\n\n        return obj;\n    }\n\n    __destroy_into_raw() {\n        const ptr = this.ptr;\n        this.ptr = 0;\n\n        return ptr;\n    }\n\n    free() {\n        const ptr = this.__destroy_into_raw();\n        wasm.__wbg_ruffle_free(ptr);\n    }\n    /**\n    * @param {HTMLElement} parent\n    * @param {any} js_player\n    * @param {any} config\n    */\n    constructor(parent, js_player, config) {\n        try {\n            var ret = wasm.ruffle_new(addHeapObject(parent), addHeapObject(js_player), addBorrowedObject(config));\n            return Ruffle.__wrap(ret);\n        } finally {\n            heap[stack_pointer++] = undefined;\n        }\n    }\n    /**\n    * Stream an arbitrary movie file from (presumably) the Internet.\n    *\n    * This method should only be called once per player.\n    * @param {string} movie_url\n    * @param {any} parameters\n    */\n    stream_from(movie_url, parameters) {\n        try {\n            var ptr0 = passStringToWasm0(movie_url, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n            var len0 = WASM_VECTOR_LEN;\n            wasm.ruffle_stream_from(this.ptr, ptr0, len0, addBorrowedObject(parameters));\n        } finally {\n            heap[stack_pointer++] = undefined;\n        }\n    }\n    /**\n    * Play an arbitrary movie on this instance.\n    *\n    * This method should only be called once per player.\n    * @param {Uint8Array} swf_data\n    * @param {any} parameters\n    */\n    load_data(swf_data, parameters) {\n        try {\n            wasm.ruffle_load_data(this.ptr, addHeapObject(swf_data), addBorrowedObject(parameters));\n        } finally {\n            heap[stack_pointer++] = undefined;\n        }\n    }\n    /**\n    */\n    play() {\n        wasm.ruffle_play(this.ptr);\n    }\n    /**\n    */\n    pause() {\n        wasm.ruffle_pause(this.ptr);\n    }\n    /**\n    * @returns {boolean}\n    */\n    is_playing() {\n        var ret = wasm.ruffle_is_playing(this.ptr);\n        return ret !== 0;\n    }\n    /**\n    * @returns {any}\n    */\n    prepare_context_menu() {\n        var ret = wasm.ruffle_prepare_context_menu(this.ptr);\n        return takeObject(ret);\n    }\n    /**\n    * @param {number} index\n    */\n    run_context_menu_callback(index) {\n        wasm.ruffle_run_context_menu_callback(this.ptr, index);\n    }\n    /**\n    */\n    clear_custom_menu_items() {\n        wasm.ruffle_clear_custom_menu_items(this.ptr);\n    }\n    /**\n    */\n    destroy() {\n        wasm.ruffle_destroy(this.ptr);\n    }\n    /**\n    * @param {string} name\n    * @param {any[]} args\n    * @returns {any}\n    */\n    call_exposed_callback(name, args) {\n        var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        var ptr1 = passArrayJsValueToWasm0(args, wasm.__wbindgen_malloc);\n        var len1 = WASM_VECTOR_LEN;\n        var ret = wasm.ruffle_call_exposed_callback(this.ptr, ptr0, len0, ptr1, len1);\n        return takeObject(ret);\n    }\n    /**\n    * @param {any} observer\n    */\n    set_trace_observer(observer) {\n        wasm.ruffle_set_trace_observer(this.ptr, addHeapObject(observer));\n    }\n    /**\n    * Returns the web AudioContext used by this player.\n    * Returns `None` if the audio backend does not use Web Audio.\n    * @returns {AudioContext | undefined}\n    */\n    audio_context() {\n        var ret = wasm.ruffle_audio_context(this.ptr);\n        return takeObject(ret);\n    }\n}\n\nasync function load(module, imports) {\n    if (typeof Response === 'function' && module instanceof Response) {\n        if (typeof WebAssembly.instantiateStreaming === 'function') {\n            try {\n                return await WebAssembly.instantiateStreaming(module, imports);\n\n            } catch (e) {\n                if (module.headers.get('Content-Type') != 'application/wasm') {\n                    console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        const bytes = await module.arrayBuffer();\n        return await WebAssembly.instantiate(bytes, imports);\n\n    } else {\n        const instance = await WebAssembly.instantiate(module, imports);\n\n        if (instance instanceof WebAssembly.Instance) {\n            return { instance, module };\n\n        } else {\n            return instance;\n        }\n    }\n}\n\nasync function init(input) {\n    if (typeof input === 'undefined') {\n        input = new URL('ruffle_web_bg.wasm', import.meta.url);\n    }\n    const imports = {};\n    imports.wbg = {};\n    imports.wbg.__wbindgen_object_drop_ref = function(arg0) {\n        takeObject(arg0);\n    };\n    imports.wbg.__wbindgen_cb_drop = function(arg0) {\n        const obj = takeObject(arg0).original;\n        if (obj.cnt-- == 1) {\n            obj.a = 0;\n            return true;\n        }\n        var ret = false;\n        return ret;\n    };\n    imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n        var ret = getStringFromWasm0(arg0, arg1);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_is_function = function(arg0) {\n        var ret = typeof(getObject(arg0)) === 'function';\n        return ret;\n    };\n    imports.wbg.__wbindgen_json_parse = function(arg0, arg1) {\n        var ret = JSON.parse(getStringFromWasm0(arg0, arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_json_serialize = function(arg0, arg1) {\n        const obj = getObject(arg1);\n        var ret = JSON.stringify(obj === undefined ? null : obj);\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbindgen_object_clone_ref = function(arg0) {\n        var ret = getObject(arg0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_isFullscreen_96b85640554e160d = function(arg0) {\n        var ret = getObject(arg0).isFullscreen;\n        return ret;\n    };\n    imports.wbg.__wbg_displayUnsupportedMessage_a8f81a8e054e5e91 = function(arg0) {\n        getObject(arg0).displayUnsupportedMessage();\n    };\n    imports.wbg.__wbg_displayMessage_c57c20204892da2b = function(arg0, arg1, arg2) {\n        getObject(arg0).displayMessage(getStringFromWasm0(arg1, arg2));\n    };\n    imports.wbg.__wbg_new_df6e6ab7a65c4c4d = function(arg0, arg1) {\n        var ret = new Error(getStringFromWasm0(arg0, arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_panic_bbc809dd04a12c60 = function(arg0, arg1) {\n        getObject(arg0).panic(getObject(arg1));\n    };\n    imports.wbg.__wbg_copyToAudioBuffer_58f244be94bac1d2 = function(arg0, arg1, arg2, arg3, arg4) {\n        copyToAudioBuffer(getObject(arg0), arg1 === 0 ? undefined : getArrayF32FromWasm0(arg1, arg2), arg3 === 0 ? undefined : getArrayF32FromWasm0(arg3, arg4));\n    };\n    imports.wbg.__wbg_setMetadata_bbaeaee7f48274e6 = function(arg0, arg1) {\n        getObject(arg0).setMetadata(takeObject(arg1));\n    };\n    imports.wbg.__wbg_onCallbackAvailable_3a48fae397926c96 = function(arg0, arg1, arg2) {\n        getObject(arg0).onCallbackAvailable(getStringFromWasm0(arg1, arg2));\n    };\n    imports.wbg.__wbg_onFSCommand_fb2f94653f71796e = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        var ret = getObject(arg0).onFSCommand(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n        return ret;\n    });\n    imports.wbg.__wbindgen_number_new = function(arg0) {\n        var ret = arg0;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_new_59cb74e423758ede = function() {\n        var ret = new Error();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_stack_558ba5917b466edd = function(arg0, arg1) {\n        var ret = getObject(arg1).stack;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_error_4bb6c2a97407129a = function(arg0, arg1) {\n        try {\n            console.error(getStringFromWasm0(arg0, arg1));\n        } finally {\n            wasm.__wbindgen_free(arg0, arg1);\n        }\n    };\n    imports.wbg.__wbindgen_is_undefined = function(arg0) {\n        var ret = getObject(arg0) === undefined;\n        return ret;\n    };\n    imports.wbg.__wbg_instanceof_WebGl2RenderingContext_61a66a1af6516586 = function(arg0) {\n        var ret = getObject(arg0) instanceof WebGL2RenderingContext;\n        return ret;\n    };\n    imports.wbg.__wbg_bindVertexArray_808c39d3c0f17264 = function(arg0, arg1) {\n        getObject(arg0).bindVertexArray(getObject(arg1));\n    };\n    imports.wbg.__wbg_blitFramebuffer_3b625df19331f21c = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {\n        getObject(arg0).blitFramebuffer(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9 >>> 0, arg10 >>> 0);\n    };\n    imports.wbg.__wbg_createVertexArray_855d59250230c563 = function(arg0) {\n        var ret = getObject(arg0).createVertexArray();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_renderbufferStorageMultisample_bbeb2b87cb14307f = function(arg0, arg1, arg2, arg3, arg4, arg5) {\n        getObject(arg0).renderbufferStorageMultisample(arg1 >>> 0, arg2, arg3 >>> 0, arg4, arg5);\n    };\n    imports.wbg.__wbg_texImage2D_173d216c50e54701 = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {\n        getObject(arg0).texImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, arg9 === 0 ? undefined : getArrayU8FromWasm0(arg9, arg10));\n    });\n    imports.wbg.__wbg_bindFramebuffer_ce3cfcfec4aa02cc = function(arg0, arg1, arg2) {\n        getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindRenderbuffer_35f3639b7da4e4c7 = function(arg0, arg1, arg2) {\n        getObject(arg0).bindRenderbuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindTexture_f2a0487a487a78d9 = function(arg0, arg1, arg2) {\n        getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_createFramebuffer_7fd863d54241be81 = function(arg0) {\n        var ret = getObject(arg0).createFramebuffer();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createRenderbuffer_52ebc0325ed6e885 = function(arg0) {\n        var ret = getObject(arg0).createRenderbuffer();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createTexture_a46f881a1c96b496 = function(arg0) {\n        var ret = getObject(arg0).createTexture();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_deleteFramebuffer_867aba8474910f62 = function(arg0, arg1) {\n        getObject(arg0).deleteFramebuffer(getObject(arg1));\n    };\n    imports.wbg.__wbg_deleteRenderbuffer_eb162fd0beb632da = function(arg0, arg1) {\n        getObject(arg0).deleteRenderbuffer(getObject(arg1));\n    };\n    imports.wbg.__wbg_deleteTexture_1affe310edd12b75 = function(arg0, arg1) {\n        getObject(arg0).deleteTexture(getObject(arg1));\n    };\n    imports.wbg.__wbg_framebufferRenderbuffer_7bb033ee5a2eca8c = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).framebufferRenderbuffer(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4));\n    };\n    imports.wbg.__wbg_framebufferTexture2D_9a77a023fd4aedcc = function(arg0, arg1, arg2, arg3, arg4, arg5) {\n        getObject(arg0).framebufferTexture2D(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4), arg5);\n    };\n    imports.wbg.__wbg_getError_142acae679908a25 = function(arg0) {\n        var ret = getObject(arg0).getError();\n        return ret;\n    };\n    imports.wbg.__wbg_getParameter_34e9af6606eb8544 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).getParameter(arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_texParameteri_e99b48aa90ae569b = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3);\n    };\n    imports.wbg.__wbg_instanceof_Window_9c4fd26090e1d029 = function(arg0) {\n        var ret = getObject(arg0) instanceof Window;\n        return ret;\n    };\n    imports.wbg.__wbg_document_249e9cf340780f93 = function(arg0) {\n        var ret = getObject(arg0).document;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_location_cf542a8f458da7b4 = function(arg0) {\n        var ret = getObject(arg0).location;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_navigator_fdf3521d0e190a9b = function(arg0) {\n        var ret = getObject(arg0).navigator;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_devicePixelRatio_ea9c0157a379b3ec = function(arg0) {\n        var ret = getObject(arg0).devicePixelRatio;\n        return ret;\n    };\n    imports.wbg.__wbg_performance_e029cf47e1c47c09 = function(arg0) {\n        var ret = getObject(arg0).performance;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_localStorage_884d77b5cedf820a = handleError(function(arg0) {\n        var ret = getObject(arg0).localStorage;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_cancelAnimationFrame_28c6665c9b2a3944 = handleError(function(arg0, arg1) {\n        getObject(arg0).cancelAnimationFrame(arg1);\n    });\n    imports.wbg.__wbg_focus_b5729f61a3280cbc = handleError(function(arg0) {\n        getObject(arg0).focus();\n    });\n    imports.wbg.__wbg_open_313f5801aab5e2f1 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        var ret = getObject(arg0).open(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_requestAnimationFrame_aa3bab1f9557a4da = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).requestAnimationFrame(getObject(arg1));\n        return ret;\n    });\n    imports.wbg.__wbg_fetch_eaee025997e4cd56 = function(arg0, arg1) {\n        var ret = getObject(arg0).fetch(getObject(arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_destination_c5ce4ac317c9219f = function(arg0) {\n        var ret = getObject(arg0).destination;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_sampleRate_cc13fe55474678eb = function(arg0) {\n        var ret = getObject(arg0).sampleRate;\n        return ret;\n    };\n    imports.wbg.__wbg_currentTime_ae061c195387b7ac = function(arg0) {\n        var ret = getObject(arg0).currentTime;\n        return ret;\n    };\n    imports.wbg.__wbg_new_29e8884899ea6ee2 = handleError(function() {\n        var ret = new lAudioContext();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_suspend_4b5d3b7ee1f4a3ec = handleError(function(arg0) {\n        var ret = getObject(arg0).suspend();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createBuffer_53c7286e081d0b3e = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).createBuffer(arg1 >>> 0, arg2 >>> 0, arg3);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createBufferSource_8b7fd8bc4222b208 = handleError(function(arg0) {\n        var ret = getObject(arg0).createBufferSource();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createChannelMerger_c059636adf34e09d = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).createChannelMerger(arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createChannelSplitter_68062f62d4d66ed8 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).createChannelSplitter(arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createGain_7b6dadac3a6522d6 = handleError(function(arg0) {\n        var ret = getObject(arg0).createGain();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createScriptProcessor_bce5438a51faa41d = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).createScriptProcessor(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_decodeAudioData_81b31c0703465a21 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).decodeAudioData(getObject(arg1), getObject(arg2), getObject(arg3));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_resume_2c75f8fc1fd26d4b = handleError(function(arg0) {\n        var ret = getObject(arg0).resume();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_gain_b3536e37256053f5 = function(arg0) {\n        var ret = getObject(arg0).gain;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_baseURI_6a10de9fa3003a69 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg1).baseURI;\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    });\n    imports.wbg.__wbg_appendChild_6ae001e6d3556190 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).appendChild(getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_get_36b7a676e4c8aee9 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg1)[getStringFromWasm0(arg2, arg3)];\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    });\n    imports.wbg.__wbg_set_ad2026ce7b489f96 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0)[getStringFromWasm0(arg1, arg2)] = getStringFromWasm0(arg3, arg4);\n    });\n    imports.wbg.__wbg_delete_9614de882c9a0cf5 = handleError(function(arg0, arg1, arg2) {\n        delete getObject(arg0)[getStringFromWasm0(arg1, arg2)];\n    });\n    imports.wbg.__wbg_instanceof_SvgsvgElement_28ef05afde3449f9 = function(arg0) {\n        var ret = getObject(arg0) instanceof SVGSVGElement;\n        return ret;\n    };\n    imports.wbg.__wbg_createSVGMatrix_43815bd5777c567f = function(arg0) {\n        var ret = getObject(arg0).createSVGMatrix();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_setProperty_84c0a22125c731d6 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).setProperty(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n    });\n    imports.wbg.__wbg_protocol_2d293dcd35a07041 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg1).protocol;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    });\n    imports.wbg.__wbg_assign_fc277322e1a88614 = handleError(function(arg0, arg1, arg2) {\n        getObject(arg0).assign(getStringFromWasm0(arg1, arg2));\n    });\n    imports.wbg.__wbg_new_3c2bf2a5257369ec = handleError(function() {\n        var ret = new Path2D();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_addPath_cf691ede06f38917 = function(arg0, arg1, arg2) {\n        getObject(arg0).addPath(getObject(arg1), getObject(arg2));\n    };\n    imports.wbg.__wbg_closePath_48f860f5bcbc79f3 = function(arg0) {\n        getObject(arg0).closePath();\n    };\n    imports.wbg.__wbg_lineTo_7fd48462a80ac962 = function(arg0, arg1, arg2) {\n        getObject(arg0).lineTo(arg1, arg2);\n    };\n    imports.wbg.__wbg_moveTo_62ea44f899317925 = function(arg0, arg1, arg2) {\n        getObject(arg0).moveTo(arg1, arg2);\n    };\n    imports.wbg.__wbg_quadraticCurveTo_6f746087da5a242c = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).quadraticCurveTo(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_length_914ec377666a1fb8 = function(arg0) {\n        var ret = getObject(arg0).length;\n        return ret;\n    };\n    imports.wbg.__wbg_connect_3a117c24756fdf62 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).connect(getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_connect_3a51bca7e31cd323 = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).connect(getObject(arg1), arg2 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_connect_52449bed6e387d23 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).connect(getObject(arg1), arg2 >>> 0, arg3 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_disconnect_b101656fb34b9fa3 = handleError(function(arg0) {\n        getObject(arg0).disconnect();\n    });\n    imports.wbg.__wbg_setTransform_4c6870c885e2b89e = function(arg0, arg1) {\n        getObject(arg0).setTransform(getObject(arg1));\n    };\n    imports.wbg.__wbg_offsetX_951495e9516f0aeb = function(arg0) {\n        var ret = getObject(arg0).offsetX;\n        return ret;\n    };\n    imports.wbg.__wbg_offsetY_0377a1f53f902a1e = function(arg0) {\n        var ret = getObject(arg0).offsetY;\n        return ret;\n    };\n    imports.wbg.__wbg_button_c35922e0098b9cda = function(arg0) {\n        var ret = getObject(arg0).button;\n        return ret;\n    };\n    imports.wbg.__wbg_outputBuffer_7e7061041aa8a304 = handleError(function(arg0) {\n        var ret = getObject(arg0).outputBuffer;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_bindVertexArrayOES_bb8a104f35d5cf4f = function(arg0, arg1) {\n        getObject(arg0).bindVertexArrayOES(getObject(arg1));\n    };\n    imports.wbg.__wbg_createVertexArrayOES_51a703442a9d8099 = function(arg0) {\n        var ret = getObject(arg0).createVertexArrayOES();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_instanceof_Response_8295bf7aacde3233 = function(arg0) {\n        var ret = getObject(arg0) instanceof Response;\n        return ret;\n    };\n    imports.wbg.__wbg_ok_e1e8f70fbf7c1fdc = function(arg0) {\n        var ret = getObject(arg0).ok;\n        return ret;\n    };\n    imports.wbg.__wbg_statusText_c5b7d9b4bc84d715 = function(arg0, arg1) {\n        var ret = getObject(arg1).statusText;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_arrayBuffer_a98df6d58bb5ea26 = handleError(function(arg0) {\n        var ret = getObject(arg0).arrayBuffer();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_seta_5138c769bc027dee = function(arg0, arg1) {\n        getObject(arg0).a = arg1;\n    };\n    imports.wbg.__wbg_setb_d92c5b9331343d2e = function(arg0, arg1) {\n        getObject(arg0).b = arg1;\n    };\n    imports.wbg.__wbg_setc_c6fbbb68c7ba4693 = function(arg0, arg1) {\n        getObject(arg0).c = arg1;\n    };\n    imports.wbg.__wbg_setd_42dcf42c3ceabc9b = function(arg0, arg1) {\n        getObject(arg0).d = arg1;\n    };\n    imports.wbg.__wbg_sete_49250c2d46b375b3 = function(arg0, arg1) {\n        getObject(arg0).e = arg1;\n    };\n    imports.wbg.__wbg_setf_12cb2512fe19ba3f = function(arg0, arg1) {\n        getObject(arg0).f = arg1;\n    };\n    imports.wbg.__wbg_deltaY_49d792c5901e3fc1 = function(arg0) {\n        var ret = getObject(arg0).deltaY;\n        return ret;\n    };\n    imports.wbg.__wbg_deltaMode_7ed5ee895d112617 = function(arg0) {\n        var ret = getObject(arg0).deltaMode;\n        return ret;\n    };\n    imports.wbg.__wbg_setbuffer_5aca59a6f26d3307 = function(arg0, arg1) {\n        getObject(arg0).buffer = getObject(arg1);\n    };\n    imports.wbg.__wbg_setloop_710fa1431c2bc494 = function(arg0, arg1) {\n        getObject(arg0).loop = arg1 !== 0;\n    };\n    imports.wbg.__wbg_setloopStart_988c5aad78cc446c = function(arg0, arg1) {\n        getObject(arg0).loopStart = arg1;\n    };\n    imports.wbg.__wbg_setloopEnd_fcc6c08574ca8ae5 = function(arg0, arg1) {\n        getObject(arg0).loopEnd = arg1;\n    };\n    imports.wbg.__wbg_setonended_0efd780b31d16bbf = function(arg0, arg1) {\n        getObject(arg0).onended = getObject(arg1);\n    };\n    imports.wbg.__wbg_start_e92060130d43d928 = handleError(function(arg0) {\n        getObject(arg0).start();\n    });\n    imports.wbg.__wbg_start_a8d199336331f3a5 = handleError(function(arg0, arg1, arg2) {\n        getObject(arg0).start(arg1, arg2);\n    });\n    imports.wbg.__wbg_stop_37842cd5a56a341c = handleError(function(arg0, arg1) {\n        getObject(arg0).stop(arg1);\n    });\n    imports.wbg.__wbg_instanceof_HtmlFormElement_de39c8070c818493 = function(arg0) {\n        var ret = getObject(arg0) instanceof HTMLFormElement;\n        return ret;\n    };\n    imports.wbg.__wbg_submit_e668f2e6a4582aa6 = handleError(function(arg0) {\n        getObject(arg0).submit();\n    });\n    imports.wbg.__wbg_now_4abbca4ef2aba8d6 = function(arg0) {\n        var ret = getObject(arg0).now();\n        return ret;\n    };\n    imports.wbg.__wbg_pointerId_e68d773decdc9224 = function(arg0) {\n        var ret = getObject(arg0).pointerId;\n        return ret;\n    };\n    imports.wbg.__wbg_setonaudioprocess_9d6a213da205ae4d = function(arg0, arg1) {\n        getObject(arg0).onaudioprocess = getObject(arg1);\n    };\n    imports.wbg.__wbg_newwithbuffersourcesequenceandoptions_689c4999a01e0d8c = handleError(function(arg0, arg1) {\n        var ret = new Blob(getObject(arg0), getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_instanceof_HtmlCanvasElement_e0e251da2aa0b541 = function(arg0) {\n        var ret = getObject(arg0) instanceof HTMLCanvasElement;\n        return ret;\n    };\n    imports.wbg.__wbg_width_5843e31ec081f978 = function(arg0) {\n        var ret = getObject(arg0).width;\n        return ret;\n    };\n    imports.wbg.__wbg_setwidth_fd251e9da5abcced = function(arg0, arg1) {\n        getObject(arg0).width = arg1 >>> 0;\n    };\n    imports.wbg.__wbg_height_872c06b1bc666dd9 = function(arg0) {\n        var ret = getObject(arg0).height;\n        return ret;\n    };\n    imports.wbg.__wbg_setheight_5b882973e84fa13c = function(arg0, arg1) {\n        getObject(arg0).height = arg1 >>> 0;\n    };\n    imports.wbg.__wbg_getContext_d778ffc8203f64ae = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getContext_4678c25f580222b0 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2), getObject(arg3));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_key_97a48109ce6890c4 = function(arg0, arg1) {\n        var ret = getObject(arg1).key;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_code_e70e2272901f086c = function(arg0, arg1) {\n        var ret = getObject(arg1).code;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_newwithstrandinit_a58924208f457f33 = handleError(function(arg0, arg1, arg2) {\n        var ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_body_0d97f334de622953 = function(arg0) {\n        var ret = getObject(arg0).body;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createElement_ba61aad8af6be7f4 = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createElementNS_c951238dc260501e = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        var ret = getObject(arg0).createElementNS(arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_setid_16518c90432c2f8e = function(arg0, arg1, arg2) {\n        getObject(arg0).id = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_clientWidth_405142b36824cd4f = function(arg0) {\n        var ret = getObject(arg0).clientWidth;\n        return ret;\n    };\n    imports.wbg.__wbg_clientHeight_645231c9da3480a9 = function(arg0) {\n        var ret = getObject(arg0).clientHeight;\n        return ret;\n    };\n    imports.wbg.__wbg_querySelector_6c8f27227fc14315 = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).querySelector(getStringFromWasm0(arg1, arg2));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_releasePointerCapture_758b760808d6ce02 = handleError(function(arg0, arg1) {\n        getObject(arg0).releasePointerCapture(arg1);\n    });\n    imports.wbg.__wbg_setAttribute_0b50656f1ccc45bf = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n    });\n    imports.wbg.__wbg_setAttributeNS_d31649e78e2cf95c = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n        getObject(arg0).setAttributeNS(arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4), getStringFromWasm0(arg5, arg6));\n    });\n    imports.wbg.__wbg_setPointerCapture_6f31425163cf44a1 = handleError(function(arg0, arg1) {\n        getObject(arg0).setPointerCapture(arg1);\n    });\n    imports.wbg.__wbg_remove_eabff3d9e444a826 = function(arg0) {\n        getObject(arg0).remove();\n    };\n    imports.wbg.__wbg_instanceof_WebGlRenderingContext_5671fd2c102046b1 = function(arg0) {\n        var ret = getObject(arg0) instanceof WebGLRenderingContext;\n        return ret;\n    };\n    imports.wbg.__wbg_drawingBufferWidth_0f8ef2b95bb66c81 = function(arg0) {\n        var ret = getObject(arg0).drawingBufferWidth;\n        return ret;\n    };\n    imports.wbg.__wbg_drawingBufferHeight_04a3507b6fb21bac = function(arg0) {\n        var ret = getObject(arg0).drawingBufferHeight;\n        return ret;\n    };\n    imports.wbg.__wbg_bufferData_9f09145baa3273f9 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).bufferData(arg1 >>> 0, getArrayU8FromWasm0(arg2, arg3), arg4 >>> 0);\n    };\n    imports.wbg.__wbg_texImage2D_48722cf9f95c8df8 = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {\n        getObject(arg0).texImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, arg9 === 0 ? undefined : getArrayU8FromWasm0(arg9, arg10));\n    });\n    imports.wbg.__wbg_uniform1fv_0b5950d4f588ac7e = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).uniform1fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3));\n    };\n    imports.wbg.__wbg_uniform4fv_8fa4c0052d79aed2 = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).uniform4fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3));\n    };\n    imports.wbg.__wbg_uniformMatrix3fv_c4a15deb8d8fbd61 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).uniformMatrix3fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4));\n    };\n    imports.wbg.__wbg_uniformMatrix4fv_62951f66fbf764cd = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).uniformMatrix4fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4));\n    };\n    imports.wbg.__wbg_activeTexture_790fa161eaf8dcb0 = function(arg0, arg1) {\n        getObject(arg0).activeTexture(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_attachShader_5446231928034874 = function(arg0, arg1, arg2) {\n        getObject(arg0).attachShader(getObject(arg1), getObject(arg2));\n    };\n    imports.wbg.__wbg_bindBuffer_5b0bd39cdc9f3c91 = function(arg0, arg1, arg2) {\n        getObject(arg0).bindBuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindFramebuffer_9490ff183a431d0d = function(arg0, arg1, arg2) {\n        getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindRenderbuffer_86495e658e23020f = function(arg0, arg1, arg2) {\n        getObject(arg0).bindRenderbuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindTexture_6df7d2262019c813 = function(arg0, arg1, arg2) {\n        getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_blendFunc_c91f929b64e24ca6 = function(arg0, arg1, arg2) {\n        getObject(arg0).blendFunc(arg1 >>> 0, arg2 >>> 0);\n    };\n    imports.wbg.__wbg_clear_216e95e64c0ce688 = function(arg0, arg1) {\n        getObject(arg0).clear(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_clearColor_f7316ccd75b2a3b1 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).clearColor(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_colorMask_cc8730de91ea02ce = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).colorMask(arg1 !== 0, arg2 !== 0, arg3 !== 0, arg4 !== 0);\n    };\n    imports.wbg.__wbg_compileShader_749eb91c541c360c = function(arg0, arg1) {\n        getObject(arg0).compileShader(getObject(arg1));\n    };\n    imports.wbg.__wbg_createBuffer_8ae1735de737ca21 = function(arg0) {\n        var ret = getObject(arg0).createBuffer();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createProgram_28f1378728397a46 = function(arg0) {\n        var ret = getObject(arg0).createProgram();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createShader_f6da8384be38c095 = function(arg0, arg1) {\n        var ret = getObject(arg0).createShader(arg1 >>> 0);\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createTexture_be549d53d11ebf83 = function(arg0) {\n        var ret = getObject(arg0).createTexture();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_disable_b2672dfd98db0d2c = function(arg0, arg1) {\n        getObject(arg0).disable(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_disableVertexAttribArray_f5154961c6bbc61f = function(arg0, arg1) {\n        getObject(arg0).disableVertexAttribArray(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_drawElements_19a4ea67a2f14d44 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).drawElements(arg1 >>> 0, arg2, arg3 >>> 0, arg4);\n    };\n    imports.wbg.__wbg_enable_9c5b69ae0579565d = function(arg0, arg1) {\n        getObject(arg0).enable(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_enableVertexAttribArray_eff1f71734ec0c24 = function(arg0, arg1) {\n        getObject(arg0).enableVertexAttribArray(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_getAttribLocation_7321b82ba20f42ed = function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).getAttribLocation(getObject(arg1), getStringFromWasm0(arg2, arg3));\n        return ret;\n    };\n    imports.wbg.__wbg_getExtension_29e749f65dd345b5 = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).getExtension(getStringFromWasm0(arg1, arg2));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getParameter_e02390c31b2aedb9 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).getParameter(arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getProgramInfoLog_89c655cf7d3deb29 = function(arg0, arg1, arg2) {\n        var ret = getObject(arg1).getProgramInfoLog(getObject(arg2));\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_getProgramParameter_97fb617622a1e9c6 = function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).getProgramParameter(getObject(arg1), arg2 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_getShaderInfoLog_8fbfc8052cd2a5c2 = function(arg0, arg1, arg2) {\n        var ret = getObject(arg1).getShaderInfoLog(getObject(arg2));\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_getUniformLocation_8ef86decd2ceb6a0 = function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).getUniformLocation(getObject(arg1), getStringFromWasm0(arg2, arg3));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_linkProgram_b060b6f5c6419695 = function(arg0, arg1) {\n        getObject(arg0).linkProgram(getObject(arg1));\n    };\n    imports.wbg.__wbg_pixelStorei_1e9534b41710bd3f = function(arg0, arg1, arg2) {\n        getObject(arg0).pixelStorei(arg1 >>> 0, arg2);\n    };\n    imports.wbg.__wbg_shaderSource_e00c8c2b41679a01 = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).shaderSource(getObject(arg1), getStringFromWasm0(arg2, arg3));\n    };\n    imports.wbg.__wbg_stencilFunc_eeb2374a49160e1e = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).stencilFunc(arg1 >>> 0, arg2, arg3 >>> 0);\n    };\n    imports.wbg.__wbg_stencilMask_8383787c8968e634 = function(arg0, arg1) {\n        getObject(arg0).stencilMask(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_stencilOp_d618117604d44e35 = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).stencilOp(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0);\n    };\n    imports.wbg.__wbg_texParameteri_58c0d4e82f062e6f = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3);\n    };\n    imports.wbg.__wbg_uniform1f_affc2490c2cff524 = function(arg0, arg1, arg2) {\n        getObject(arg0).uniform1f(getObject(arg1), arg2);\n    };\n    imports.wbg.__wbg_uniform1i_584ce89a2fa7078d = function(arg0, arg1, arg2) {\n        getObject(arg0).uniform1i(getObject(arg1), arg2);\n    };\n    imports.wbg.__wbg_useProgram_ad5593b87b2aec4f = function(arg0, arg1) {\n        getObject(arg0).useProgram(getObject(arg1));\n    };\n    imports.wbg.__wbg_vertexAttribPointer_3e272f16a22bb68c = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n        getObject(arg0).vertexAttribPointer(arg1 >>> 0, arg2, arg3 >>> 0, arg4 !== 0, arg5, arg6);\n    };\n    imports.wbg.__wbg_viewport_40ac6422fa7e7109 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).viewport(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_debug_3c0b82934d1dd91e = function(arg0) {\n        console.debug(getObject(arg0));\n    };\n    imports.wbg.__wbg_error_9ff84d33a850b1ef = function(arg0) {\n        console.error(getObject(arg0));\n    };\n    imports.wbg.__wbg_info_3b2058a219fa31b9 = function(arg0) {\n        console.info(getObject(arg0));\n    };\n    imports.wbg.__wbg_log_386a8115a84a780d = function(arg0) {\n        console.log(getObject(arg0));\n    };\n    imports.wbg.__wbg_warn_5fc232d538408d4a = function(arg0) {\n        console.warn(getObject(arg0));\n    };\n    imports.wbg.__wbg_style_9290c51fe7cb7783 = function(arg0) {\n        var ret = getObject(arg0).style;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_setvalue_e8ff05630a7ffecb = function(arg0, arg1) {\n        getObject(arg0).value = arg1;\n    };\n    imports.wbg.__wbg_linearRampToValueAtTime_0245aa9e5d87776f = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).linearRampToValueAtTime(arg1, arg2);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_setValueAtTime_b4a172acdfc9830f = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).setValueAtTime(arg1, arg2);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_currentTarget_a3b06d00ff76859b = function(arg0) {\n        var ret = getObject(arg0).currentTarget;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_preventDefault_19876bf3a4179b34 = function(arg0) {\n        getObject(arg0).preventDefault();\n    };\n    imports.wbg.__wbg_addEventListener_b334b84e6525699c = handleError(function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n    });\n    imports.wbg.__wbg_addEventListener_502683a26945b1a5 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));\n    });\n    imports.wbg.__wbg_addEventListener_b88d8dd107ce2f39 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);\n    });\n    imports.wbg.__wbg_removeEventListener_380d0ebdf9cd12ba = handleError(function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n    });\n    imports.wbg.__wbg_removeEventListener_1f30d3e3ef4ee58e = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);\n    });\n    imports.wbg.__wbg_setsrc_21ed0b40d0ff0413 = function(arg0, arg1, arg2) {\n        getObject(arg0).src = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_new_0891fac076d9e6b3 = handleError(function() {\n        var ret = new Image();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_newwithwidthandheight_045e54743ae79290 = handleError(function(arg0, arg1) {\n        var ret = new Image(arg0 >>> 0, arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_data_7db9e348ce1855fa = function(arg0, arg1) {\n        var ret = getObject(arg1).data;\n        var ptr0 = passArray8ToWasm0(ret, wasm.__wbindgen_malloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_userAgent_89e0d93ea0bfe354 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg1).userAgent;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    });\n    imports.wbg.__wbg_instanceof_CanvasRenderingContext2d_eea9cd931eb496b7 = function(arg0) {\n        var ret = getObject(arg0) instanceof CanvasRenderingContext2D;\n        return ret;\n    };\n    imports.wbg.__wbg_setglobalAlpha_6b6fb9a57a09df9d = function(arg0, arg1) {\n        getObject(arg0).globalAlpha = arg1;\n    };\n    imports.wbg.__wbg_setglobalCompositeOperation_e404daf7e6bb63e4 = handleError(function(arg0, arg1, arg2) {\n        getObject(arg0).globalCompositeOperation = getStringFromWasm0(arg1, arg2);\n    });\n    imports.wbg.__wbg_setstrokeStyle_72f1ad8117744d41 = function(arg0, arg1) {\n        getObject(arg0).strokeStyle = getObject(arg1);\n    };\n    imports.wbg.__wbg_setfillStyle_5306396b0368ba08 = function(arg0, arg1) {\n        getObject(arg0).fillStyle = getObject(arg1);\n    };\n    imports.wbg.__wbg_setfilter_fa947e793349a2de = function(arg0, arg1, arg2) {\n        getObject(arg0).filter = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_setlineWidth_9f25e0ceca65a4d7 = function(arg0, arg1) {\n        getObject(arg0).lineWidth = arg1;\n    };\n    imports.wbg.__wbg_setlineCap_6c7169ac07a6349e = function(arg0, arg1, arg2) {\n        getObject(arg0).lineCap = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_setlineJoin_d6311997533dcdbf = function(arg0, arg1, arg2) {\n        getObject(arg0).lineJoin = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_setmiterLimit_cd181ac4dc64fc1d = function(arg0, arg1) {\n        getObject(arg0).miterLimit = arg1;\n    };\n    imports.wbg.__wbg_drawImage_ff0075aa41bc6155 = handleError(function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).drawImage(getObject(arg1), arg2, arg3);\n    });\n    imports.wbg.__wbg_drawImage_b43cf9d292491493 = handleError(function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).drawImage(getObject(arg1), arg2, arg3);\n    });\n    imports.wbg.__wbg_fill_a928208ebdb3fecc = function(arg0, arg1) {\n        getObject(arg0).fill(getObject(arg1));\n    };\n    imports.wbg.__wbg_stroke_c19677a93050ef02 = function(arg0, arg1) {\n        getObject(arg0).stroke(getObject(arg1));\n    };\n    imports.wbg.__wbg_createPattern_a737181b452c0941 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).createPattern(getObject(arg1), getStringFromWasm0(arg2, arg3));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getImageData_6e56dc172cd2ed36 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        var ret = getObject(arg0).getImageData(arg1, arg2, arg3, arg4);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_clearRect_dbb56982eff2a250 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).clearRect(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_fillRect_33b210367d4a0063 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).fillRect(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_resetTransform_09cd4a47a1d0fc9c = handleError(function(arg0) {\n        getObject(arg0).resetTransform();\n    });\n    imports.wbg.__wbg_setTransform_36254c0c8f264eee = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n        getObject(arg0).setTransform(arg1, arg2, arg3, arg4, arg5, arg6);\n    });\n    imports.wbg.__wbg_get_f099d98ea7d68360 = function(arg0, arg1) {\n        var ret = getObject(arg0)[arg1 >>> 0];\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_next_9d10ccb28a5fd327 = handleError(function(arg0) {\n        var ret = getObject(arg0).next();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_done_faa42c8d1dd8ca9e = function(arg0) {\n        var ret = getObject(arg0).done;\n        return ret;\n    };\n    imports.wbg.__wbg_value_9befa7ab4a7326bf = function(arg0) {\n        var ret = getObject(arg0).value;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_get_0c6963cbab34fbb6 = handleError(function(arg0, arg1) {\n        var ret = Reflect.get(getObject(arg0), getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_call_cb478d88f3068c91 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).call(getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_new_8528c110a833413f = function() {\n        var ret = new Array();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_isArray_bccef1135dd559c1 = function(arg0) {\n        var ret = Array.isArray(getObject(arg0));\n        return ret;\n    };\n    imports.wbg.__wbg_of_1988d238bc84b807 = function(arg0, arg1) {\n        var ret = Array.of(getObject(arg0), getObject(arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_push_17a514d8ab666103 = function(arg0, arg1) {\n        var ret = getObject(arg0).push(getObject(arg1));\n        return ret;\n    };\n    imports.wbg.__wbg_instanceof_ArrayBuffer_ee6a79eaea0f4f5b = function(arg0) {\n        var ret = getObject(arg0) instanceof ArrayBuffer;\n        return ret;\n    };\n    imports.wbg.__wbg_new_66923a754de9cf28 = function(arg0) {\n        var ret = new ArrayBuffer(arg0 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_slice_1b99bf7e559f62b2 = function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).slice(arg1 >>> 0, arg2 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_values_0e37ea0767d5caba = function(arg0) {\n        var ret = getObject(arg0).values();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_newnoargs_3efc7bfa69a681f9 = function(arg0, arg1) {\n        var ret = new Function(getStringFromWasm0(arg0, arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_apply_2d67e7379df5344f = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).apply(getObject(arg1), getObject(arg2));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_call_f5e0576f61ee7461 = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).call(getObject(arg1), getObject(arg2));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getTime_135e6afc6013ba72 = function(arg0) {\n        var ret = getObject(arg0).getTime();\n        return ret;\n    };\n    imports.wbg.__wbg_getTimezoneOffset_39fb6af112fac02f = function(arg0) {\n        var ret = getObject(arg0).getTimezoneOffset();\n        return ret;\n    };\n    imports.wbg.__wbg_new0_8e8ab0e7714cf1dd = function() {\n        var ret = new Date();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_instanceof_Object_d6b4e933180fbb26 = function(arg0) {\n        var ret = getObject(arg0) instanceof Object;\n        return ret;\n    };\n    imports.wbg.__wbg_entries_a9881e0ca10e3cb2 = function(arg0) {\n        var ret = Object.entries(getObject(arg0));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_fromEntries_8be754b4532b35f4 = handleError(function(arg0) {\n        var ret = Object.fromEntries(getObject(arg0));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_is_573b30cf06a763fb = function(arg0, arg1) {\n        var ret = Object.is(getObject(arg0), getObject(arg1));\n        return ret;\n    };\n    imports.wbg.__wbg_new_d14bf16e62c6b3d5 = function() {\n        var ret = new Object();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_resolve_778af3f90b8e2b59 = function(arg0) {\n        var ret = Promise.resolve(getObject(arg0));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_then_367b3e718069cfb9 = function(arg0, arg1) {\n        var ret = getObject(arg0).then(getObject(arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_then_ac66ca61394bfd21 = function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).then(getObject(arg1), getObject(arg2));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_self_05c54dcacb623b9a = handleError(function() {\n        var ret = self.self;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_window_9777ce446d12989f = handleError(function() {\n        var ret = window.window;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_globalThis_f0ca0bbb0149cf3d = handleError(function() {\n        var ret = globalThis.globalThis;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_global_c3c8325ae8c7f1a9 = handleError(function() {\n        var ret = global.global;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_buffer_ebc6c8e75510eae3 = function(arg0) {\n        var ret = getObject(arg0).buffer;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_newwithbyteoffsetandlength_ca3d3d8811ecb569 = function(arg0, arg1, arg2) {\n        var ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_length_317f0dd77f7a6673 = function(arg0) {\n        var ret = getObject(arg0).length;\n        return ret;\n    };\n    imports.wbg.__wbg_new_135e963dedf67b22 = function(arg0) {\n        var ret = new Uint8Array(getObject(arg0));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_set_4a5072a31008e0cb = function(arg0, arg1, arg2) {\n        getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n    };\n    imports.wbg.__wbg_fill_f08a873179c69e31 = function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).fill(arg1, arg2 >>> 0, arg3 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_buffer_3580452571655bd0 = function(arg0) {\n        var ret = getObject(arg0).buffer;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_byteLength_7d55aca7ec6c42cb = function(arg0) {\n        var ret = getObject(arg0).byteLength;\n        return ret;\n    };\n    imports.wbg.__wbg_byteOffset_2ebe3f5c421f3a99 = function(arg0) {\n        var ret = getObject(arg0).byteOffset;\n        return ret;\n    };\n    imports.wbg.__wbg_ownKeys_b6c8becb6576203e = handleError(function(arg0) {\n        var ret = Reflect.ownKeys(getObject(arg0));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_set_61642586f7156f4a = handleError(function(arg0, arg1, arg2) {\n        var ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));\n        return ret;\n    });\n    imports.wbg.__wbindgen_number_get = function(arg0, arg1) {\n        const obj = getObject(arg1);\n        var ret = typeof(obj) === 'number' ? obj : undefined;\n        getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;\n        getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n    };\n    imports.wbg.__wbindgen_string_get = function(arg0, arg1) {\n        const obj = getObject(arg1);\n        var ret = typeof(obj) === 'string' ? obj : undefined;\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbindgen_boolean_get = function(arg0) {\n        const v = getObject(arg0);\n        var ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;\n        return ret;\n    };\n    imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n        var ret = debugString(getObject(arg1));\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n        throw new Error(getStringFromWasm0(arg0, arg1));\n    };\n    imports.wbg.__wbindgen_rethrow = function(arg0) {\n        throw takeObject(arg0);\n    };\n    imports.wbg.__wbindgen_memory = function() {\n        var ret = wasm.memory;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper399 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_34);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper401 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_37);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper403 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_40);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper405 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_43);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper407 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_46);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper409 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_49);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper411 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_52);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper413 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_55);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper1775 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 863, __wbg_adapter_58);\n        return addHeapObject(ret);\n    };\n\n    if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {\n        input = fetch(input);\n    }\n\n\n\n    const { instance, module } = await load(await input, imports);\n\n    wasm = instance.exports;\n    init.__wbindgen_wasm_module = module;\n\n    return wasm;\n}\n\nexport default init;\n\n","/**\n * Functions imported from JS into Ruffle.\n *\n * @ignore\n * @internal\n */\n/**\n * Copies data into the given audio channel.\n * This is necessary because Safari does not support `AudioBuffer.copyToChannel`.\n *\n * @internal\n */\nexport function copyToAudioBuffer(audioBuffer, leftData, rightData) {\n    if (leftData) {\n        const dstBuffer = audioBuffer.getChannelData(0);\n        dstBuffer.set(leftData);\n    }\n    if (rightData) {\n        const dstBuffer = audioBuffer.getChannelData(1);\n        dstBuffer.set(rightData);\n    }\n}\n","/**\n * Polyfills the `Array.prototype.reduce` method.\n *\n * Production steps of ECMA-262, Edition 5, 15.4.4.21\n * Reference: https://es5.github.io/#x15.4.4.21\n * https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n *\n */\nfunction polyfillArrayPrototypeReduce() {\n    Object.defineProperty(Array.prototype, \"reduce\", {\n        value(...args) {\n            if (args.length === 0 &&\n                window.Prototype &&\n                window.Prototype.Version &&\n                window.Prototype.Version < \"1.6.1\") {\n                // Off-spec: compatibility with prototype.js\n                return this.length > 1 ? this : this[0];\n            }\n            const callback = args[0];\n            if (this === null) {\n                throw new TypeError(\"Array.prototype.reduce called on null or undefined\");\n            }\n            if (typeof callback !== \"function\") {\n                throw new TypeError(`${callback} is not a function`);\n            }\n            const o = Object(this);\n            const len = o.length >>> 0;\n            let k = 0;\n            let value;\n            if (args.length >= 2) {\n                value = args[1];\n            }\n            else {\n                while (k < len && !(k in o)) {\n                    k++;\n                }\n                if (k >= len) {\n                    throw new TypeError(\"Reduce of empty array with no initial value\");\n                }\n                value = o[k++];\n            }\n            while (k < len) {\n                if (k in o) {\n                    value = callback(value, o[k], k, o);\n                }\n                k++;\n            }\n            return value;\n        },\n    });\n}\n/**\n * Polyfills the `Window` function.\n *\n */\nfunction polyfillWindow() {\n    if (typeof window.constructor !== \"function\" ||\n        !isNativeFunction(window.constructor)) {\n        // Don't polyfill `Window` if `window.constructor` has been overridden.\n        return;\n    }\n    // @ts-expect-error: `Function not assignable to { new (): Window; prototype: Window; }`\n    window.Window = window.constructor;\n}\n/**\n * Polyfills the `Reflect` object and members.\n *\n * Currently it's a minimal implementation with only `get` and `set`\n * just enough for wasm-bindgen's stdlib to not crash on pages I've found.\n *\n */\nfunction tryPolyfillReflect() {\n    if (window.Reflect == undefined) {\n        // @ts-expect-error: {} indeed doesn't implement Reflect's interface.\n        window.Reflect = {};\n    }\n    if (typeof Reflect.get !== \"function\") {\n        Object.defineProperty(Reflect, \"get\", {\n            value(target, key) {\n                return target[key];\n            },\n        });\n    }\n    if (typeof Reflect.set !== \"function\") {\n        Object.defineProperty(Reflect, \"set\", {\n            value(target, key, value) {\n                target[key] = value;\n            },\n        });\n    }\n}\n/**\n * Determines whether a function is native or not.\n *\n * @param func The function to test.\n * @returns True if the function hasn't been overridden.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isNativeFunction(func) {\n    const val = typeof Function.prototype.toString === \"function\"\n        ? Function.prototype.toString()\n        : null;\n    if (typeof val === \"string\" && val.indexOf(\"[native code]\") >= 0) {\n        return (Function.prototype.toString.call(func).indexOf(\"[native code]\") >= 0);\n    }\n    return false;\n}\n/**\n * Checks and applies the polyfills to the current window, if needed.\n *\n */\nexport function setPolyfillsOnLoad() {\n    if (typeof Array.prototype.reduce !== \"function\" ||\n        !isNativeFunction(Array.prototype.reduce)) {\n        // Some external libraries override the `Array.prototype.reduce` method in a way\n        // that causes Webpack to crash (#1507, #1865), so we need to override it again.\n        polyfillArrayPrototypeReduce();\n    }\n    if (typeof Window !== \"function\" || !isNativeFunction(Window)) {\n        // Overriding the native `Window` function causes issues in wasm-bindgen, as a\n        // code like `window instanceof Window` will no longer work.\n        polyfillWindow();\n    }\n    // Some pages override native `Reflect` with a new object without some properties,\n    // which causes issues for wasm-bindgen's stdlib implementation.\n    tryPolyfillReflect();\n}\n","/**\n * Conditional ruffle loader\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport init, { Ruffle } from \"../pkg/ruffle_web\";\nimport { setPolyfillsOnLoad } from \"./js-polyfills\";\n/**\n * Load ruffle from an automatically-detected location.\n *\n * This function returns a new instance of Ruffle and downloads it every time.\n * You should not use it directly; this module will memoize the resource\n * download.\n *\n * @returns A ruffle constructor that may be used to create new Ruffle\n * instances.\n */\nfunction fetchRuffle() {\n    return __awaiter(this, void 0, void 0, function* () {\n        // Apply some pure JavaScript polyfills to prevent conflicts with external\n        // libraries, if needed.\n        setPolyfillsOnLoad();\n        // wasm files are set to be resource assets,\n        // so this import will resolve to the URL of the wasm file.\n        const ruffleWasm = yield import(\n        /* webpackMode: \"eager\" */\n        \"../pkg/ruffle_web_bg.wasm\");\n        yield init(ruffleWasm.default);\n        return Ruffle;\n    });\n}\nlet lastLoaded = null;\n/**\n * Obtain an instance of `Ruffle`.\n *\n * This function returns a promise which yields `Ruffle` asynchronously.\n *\n * @returns A ruffle constructor that may be used to create new Ruffle\n * instances.\n */\nexport function loadRuffle() {\n    if (lastLoaded == null) {\n        lastLoaded = fetchRuffle();\n    }\n    return lastLoaded;\n}\n","/**\n * Replacement object for `MimeTypeArray` that lets us install new fake mime\n * types.\n *\n * Unlike plugins we can at least enumerate mime types in Firefox, so we don't\n * lose data.\n *\n * We also expose a method called `install` which adds a new plugin. This is\n * used to falsify Flash detection. If the existing `navigator.mimeTypes` has an\n * `install` method, you should not use `RuffleMimeTypeArray` as some other\n * plugin emulator is already present.\n */\nclass RuffleMimeTypeArray {\n    constructor(native_mimetype_array) {\n        this.__mimetypes = [];\n        this.__named_mimetypes = {};\n        if (native_mimetype_array) {\n            for (let i = 0; i < native_mimetype_array.length; i++) {\n                this.install(native_mimetype_array[i]);\n            }\n        }\n    }\n    /**\n     * Install a MIME Type into the array.\n     *\n     * @param mimetype The mimetype to install\n     */\n    install(mimetype) {\n        const id = this.__mimetypes.length;\n        this.__mimetypes.push(mimetype);\n        this.__named_mimetypes[mimetype.type] = mimetype;\n        this[mimetype.type] = mimetype;\n        this[id] = mimetype;\n    }\n    item(index) {\n        return this.__mimetypes[index];\n    }\n    namedItem(name) {\n        return this.__named_mimetypes[name];\n    }\n    get length() {\n        return this.__mimetypes.length;\n    }\n    [Symbol.iterator]() {\n        return this.__mimetypes[Symbol.iterator]();\n    }\n}\n/**\n * Equivalent object to `Plugin` that allows us to falsify plugins.\n */\nclass RufflePlugin extends RuffleMimeTypeArray {\n    constructor(name, description, filename, mimetypes) {\n        super(mimetypes);\n        this.name = name;\n        this.description = description;\n        this.filename = filename;\n    }\n    install(mimetype) {\n        super.install(mimetype);\n    }\n    [Symbol.iterator]() {\n        return super[Symbol.iterator]();\n    }\n}\n/**\n * Replacement object for `PluginArray` that lets us install new fake plugins.\n *\n * This object needs to wrap the native plugin array, since the user might have\n * actual plugins installed. Firefox doesn't let us enumerate the array, though,\n * which has some consequences. Namely, we can't actually perfectly wrap the\n * native plugin array, at least unless there's some secret \"unresolved object\n * property name handler\" that I've never known before in JS...\n *\n * We can still wrap `namedItem` perfectly at least.\n *\n * We also expose a method called `install` which adds a new plugin. This is\n * used to falsify Flash detection. If the existing `navigator.plugins` has an\n * `install` method, you should not use `RufflePluginArray` as some other plugin\n * emulator is already present.\n */\nclass RufflePluginArray {\n    constructor(native_plugin_array) {\n        this.__plugins = [];\n        this.__named_plugins = {};\n        for (let i = 0; i < native_plugin_array.length; i++) {\n            this.install(native_plugin_array[i]);\n        }\n    }\n    install(plugin) {\n        const id = this.__plugins.length;\n        this.__plugins.push(plugin);\n        this.__named_plugins[plugin.name] = plugin;\n        this[plugin.name] = plugin;\n        this[id] = plugin;\n    }\n    item(index) {\n        return this.__plugins[index];\n    }\n    namedItem(name) {\n        return this.__named_plugins[name];\n    }\n    get length() {\n        return this.__plugins.length;\n    }\n}\n/**\n * A fake plugin designed to trigger Flash detection scripts.\n */\nexport const FLASH_PLUGIN = new RufflePlugin(\"Shockwave Flash\", \"Shockwave Flash 32.0 r0\", \"ruffle.js\", null);\nFLASH_PLUGIN.install({\n    type: \"application/futuresplash\",\n    description: \"Shockwave Flash\",\n    suffixes: \"spl\",\n    enabledPlugin: FLASH_PLUGIN,\n});\nFLASH_PLUGIN.install({\n    type: \"application/x-shockwave-flash\",\n    description: \"Shockwave Flash\",\n    suffixes: \"swf\",\n    enabledPlugin: FLASH_PLUGIN,\n});\nFLASH_PLUGIN.install({\n    type: \"application/x-shockwave-flash2-preview\",\n    description: \"Shockwave Flash\",\n    suffixes: \"swf\",\n    enabledPlugin: FLASH_PLUGIN,\n});\nFLASH_PLUGIN.install({\n    type: \"application/vnd.adobe.flash-movie\",\n    description: \"Shockwave Flash\",\n    suffixes: \"swf\",\n    enabledPlugin: FLASH_PLUGIN,\n});\n/**\n * Install a fake plugin such that detectors will see it in `navigator.plugins`.\n *\n * This function takes care to check if the existing implementation of\n * `navigator.plugins` already accepts fake plugin entries. If so, it will use\n * that version of the plugin array. This allows the plugin polyfill to compose\n * across multiple plugin emulators with the first emulator's polyfill winning.\n *\n * @param plugin The plugin to install\n */\nexport function installPlugin(plugin) {\n    if (!(\"install\" in navigator.plugins) || !navigator.plugins[\"install\"]) {\n        Object.defineProperty(navigator, \"plugins\", {\n            value: new RufflePluginArray(navigator.plugins),\n            writable: false,\n        });\n    }\n    const plugins = navigator.plugins;\n    plugins.install(plugin);\n    if (plugin.length > 0 &&\n        (!(\"install\" in navigator.mimeTypes) || !navigator.mimeTypes[\"install\"])) {\n        Object.defineProperty(navigator, \"mimeTypes\", {\n            value: new RuffleMimeTypeArray(navigator.mimeTypes),\n            writable: false,\n        });\n    }\n    const mimeTypes = navigator.mimeTypes;\n    for (let i = 0; i < plugin.length; i += 1) {\n        mimeTypes.install(plugin[i]);\n    }\n}\n","/**\n * The shadow template which is used to fill the actual Ruffle player element\n * on the page.\n */\nexport const ruffleShadowTemplate = document.createElement(\"template\");\nruffleShadowTemplate.innerHTML = `\n    <style>\n        :host {\n            --ruffle-blue: #37528c;\n            --ruffle-orange: #ffad33;\n\n            display: inline-block;\n            position: relative;\n            /* Default width/height; this will get overridden by user styles/attributes. */\n            width: 550px;\n            height: 400px;\n            font-family: Arial, sans-serif;\n            letter-spacing: 0.4px;\n            touch-action: none;\n            user-select: none;\n            -webkit-user-select: none;\n            -webkit-tap-highlight-color: transparent;\n        }\n        \n        /* Ruffle's width/height CSS interferes Safari fullscreen CSS. */\n        /* Ensure that Safari's fullscreen mode actually fills the screen. */\n        :host(:-webkit-full-screen) {\n            display: block;\n            width: 100% !important;\n            height: 100% !important;\n        }\n\n        /* All of these use the dimensions specified by the embed. */\n        #container,\n        #play_button,\n        #unmute_overlay,\n        #unmute_overlay .background,\n        #panic,\n        #message_overlay {\n            position: absolute;\n            top: 0;\n            bottom: 0;\n            left: 0;\n            right: 0;\n        }\n\n        #container {\n            overflow: hidden;\n        }\n\n        #container canvas {\n            width: 100%;\n            height: 100%;\n        }\n\n        #play_button,\n        #unmute_overlay {\n            cursor: pointer;\n            display: none;\n        }\n\n        #unmute_overlay .background {\n            background: black;\n            opacity: 0.7;\n        }\n\n        #play_button .icon,\n        #unmute_overlay .icon {\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            width: 50%;\n            height: 50%;\n            max-width: 384px;\n            max-height: 384px;\n            transform: translate(-50%, -50%);\n            opacity: 0.8;\n        }\n\n        #play_button:hover .icon,\n        #unmute_overlay:hover .icon {\n            opacity: 1;\n        }\n\n        #panic {\n            font-size: 20px;\n            text-align: center;\n            /* Inverted colors from play button! */\n            background: linear-gradient(180deg, #fd3a40 0%, #fda138 100%);\n            color: white;\n            display: flex;\n            flex-flow: column;\n            justify-content: space-around;\n        }\n\n        #panic a {\n            color: var(--ruffle-blue);\n            font-weight: bold;\n        }\n\n        #panic-title {\n            font-size: xxx-large;\n            font-weight: bold;\n        }\n\n        #panic-body.details {\n            flex: 0.9;\n            margin: 0 10px;\n        }\n\n        #panic-body textarea {\n            width: 100%;\n            height: 100%;\n            resize: none;\n        }\n\n        #panic ul {\n            padding: 0;\n            display: flex;\n            list-style-type: none;\n            justify-content: space-evenly;\n        }\n\n        #message_overlay {\n            position: absolute;\n            background: var(--ruffle-blue);\n            color: var(--ruffle-orange);\n            opacity: 1;\n            z-index: 2;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            overflow: auto;\n        }\n\n        #message_overlay .message {\n            text-align: center;\n            max-height: 100%;\n            max-width: 100%;\n            padding: 5%;\n        }\n\n        #message_overlay p {\n            margin: 0.5em 0;\n        }\n\n        #message_overlay .message div {\n            display: flex;\n            justify-content: center;\n            flex-wrap: wrap;\n            column-gap: 1em;\n        }\n\n        #message_overlay a, #message_overlay button {\n            cursor: pointer;\n            background: var(--ruffle-blue);\n            color: var(--ruffle-orange);\n            border: 2px solid var(--ruffle-orange);\n            font-weight: bold;\n            font-size: 1.25em;\n            border-radius: 0.6em;\n            padding: 10px;\n            text-decoration: none;\n            margin: 2% 0;\n        }\n\n        #message_overlay a:hover, #message_overlay button:hover {\n            background: #ffffff4c;\n        }\n\n        #continue-btn {\n             cursor: pointer;\n             background: var(--ruffle-blue);\n             color: var(--ruffle-orange);\n             border: 2px solid var(--ruffle-orange);\n             font-weight: bold;\n             font-size: 20px;\n             border-radius: 20px;\n             padding: 10px;\n        }\n\n        #continue-btn:hover {\n            background: #ffffff4c;\n        }\n\n        #context-menu {\n            display: none;\n            color: black;\n            background: #fafafa;\n            border: 1px solid gray;\n            box-shadow: 0px 5px 10px -5px black;\n            position: absolute;\n            font-size: 14px;\n            text-align: left;\n            list-style: none;\n            padding: 0;\n            margin: 0;\n        }\n\n        #context-menu .menu_item {\n            padding: 5px 10px;\n        }\n\n        #context-menu .active {\n            cursor: pointer;\n            color: black;\n        }\n\n        #context-menu .disabled {\n            cursor: default;\n            color: gray;\n        }\n\n        #context-menu .active:hover {\n            background: lightgray;\n        }\n\n        #context-menu .menu_separator hr {\n            border: none;\n            border-bottom: 1px solid lightgray;\n            margin: 2px;\n        }\n    </style>\n    <style id=\"dynamic_styles\"></style>\n\n    <div id=\"container\">\n        <div id=\"play_button\"><div class=\"icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"xMidYMid\" viewBox=\"0 0 250 250\" style=\"width:100%;height:100%;\"><defs><linearGradient id=\"a\" gradientUnits=\"userSpaceOnUse\" x1=\"125\" y1=\"0\" x2=\"125\" y2=\"250\" spreadMethod=\"pad\"><stop offset=\"0%\" stop-color=\"#FDA138\"/><stop offset=\"100%\" stop-color=\"#FD3A40\"/></linearGradient><g id=\"b\"><path fill=\"url(#a)\" d=\"M250 125q0-52-37-88-36-37-88-37T37 37Q0 73 0 125t37 88q36 37 88 37t88-37q37-36 37-88M87 195V55l100 70-100 70z\"/><path fill=\"#FFF\" d=\"M87 55v140l100-70L87 55z\"/></g></defs><use xlink:href=\"#b\"/></svg></div></div>\n        <div id=\"unmute_overlay\"><div class=\"background\"></div><div class=\"icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"xMidYMid\" viewBox=\"0 0 512 584\" style=\"width:100%;height:100%;scale:0.8;\"><path fill=\"#FFF\" stroke=\"#FFF\" d=\"m457.941 256 47.029-47.029c9.372-9.373 9.372-24.568 0-33.941-9.373-9.373-24.568-9.373-33.941 0l-47.029 47.029-47.029-47.029c-9.373-9.373-24.568-9.373-33.941 0-9.372 9.373-9.372 24.568 0 33.941l47.029 47.029-47.029 47.029c-9.372 9.373-9.372 24.568 0 33.941 4.686 4.687 10.827 7.03 16.97 7.03s12.284-2.343 16.971-7.029l47.029-47.03 47.029 47.029c4.687 4.687 10.828 7.03 16.971 7.03s12.284-2.343 16.971-7.029c9.372-9.373 9.372-24.568 0-33.941z\"/><path fill=\"#FFF\" stroke=\"#FFF\" d=\"m99 160h-55c-24.301 0-44 19.699-44 44v104c0 24.301 19.699 44 44 44h55c2.761 0 5-2.239 5-5v-182c0-2.761-2.239-5-5-5z\"/><path fill=\"#FFF\" stroke=\"#FFF\" d=\"m280 56h-24c-5.269 0-10.392 1.734-14.578 4.935l-103.459 79.116c-1.237.946-1.963 2.414-1.963 3.972v223.955c0 1.557.726 3.026 1.963 3.972l103.459 79.115c4.186 3.201 9.309 4.936 14.579 4.936h23.999c13.255 0 24-10.745 24-24v-352.001c0-13.255-10.745-24-24-24z\"/><text x=\"256\" y=\"560\" text-anchor=\"middle\" style=\"font-size:60px;fill:#FFF;stroke:#FFF;\">Click to unmute</text></svg></div></div>\n    </div>\n\n    <ul id=\"context-menu\"></ul>\n`;\n","/**\n * Number of times to try defining a custom element.\n */\nconst MAX_TRIES = 999;\n/**\n * A mapping between internal element IDs and DOM element IDs.\n */\nconst privateRegistry = {};\n/**\n * Lookup a previously registered custom element.\n *\n * The returned object will have `name`, `class`, and `internal_name`\n * properties listing the external name, implementing class, and internal name\n * respectively.\n *\n * @param elementName The internal element name, previously used to\n * register the element with the private registry.\n * @returns The element data in the registry, or null if there is\n * no such element name registered.\n */\nexport function lookupElement(elementName) {\n    const data = privateRegistry[elementName];\n    if (data !== undefined) {\n        return {\n            internalName: elementName,\n            name: data.name,\n            class: data.class,\n        };\n    }\n    else {\n        return null;\n    }\n}\n/**\n * Register a custom element.\n *\n * This function is designed to be tolerant of naming conflicts. If\n * registration fails, we modify the name, and try again. As a result, this\n * function returns the real element name to use.\n *\n * Calling this function multiple times will *not* register multiple elements.\n * We store a private registry mapping internal element names to DOM names.\n * Thus, the proper way to use this function is to call it every time you are\n * about to work with custom element names.\n *\n * @param elementName The internal name of the element.\n * @param elementClass The class of the element.\n *\n * You must call this function with the same class every time.\n * @returns The actual element name.\n * @throws Throws an error if two different elements were registered with the\n * same internal name.\n */\nexport function registerElement(elementName, elementClass) {\n    if (privateRegistry[elementName] !== undefined) {\n        if (privateRegistry[elementName].class !== elementClass) {\n            throw new Error(\"Internal naming conflict on \" + elementName);\n        }\n        else {\n            return privateRegistry[elementName].name;\n        }\n    }\n    let tries = 0;\n    if (window.customElements !== undefined) {\n        while (tries < MAX_TRIES) {\n            let externalName = elementName;\n            if (tries > 0) {\n                externalName = externalName + \"-\" + tries;\n            }\n            if (window.customElements.get(externalName) !== undefined) {\n                tries += 1;\n                continue;\n            }\n            else {\n                window.customElements.define(externalName, elementClass);\n            }\n            privateRegistry[elementName] = {\n                class: elementClass,\n                name: externalName,\n                internalName: elementName,\n            };\n            return externalName;\n        }\n    }\n    throw new Error(\"Failed to assign custom element \" + elementName);\n}\n","export var AutoPlay;\n(function (AutoPlay) {\n    /**\n     * The player should automatically play the movie as soon as it is loaded.\n     *\n     * If the browser does not support automatic audio, the movie will begin\n     * muted.\n     */\n    AutoPlay[\"On\"] = \"on\";\n    /**\n     * The player should not attempt to automatically play the movie.\n     *\n     * This will leave it to the user or API to actually play when appropriate.\n     */\n    AutoPlay[\"Off\"] = \"off\";\n    /**\n     * The player should automatically play the movie as soon as it is deemed\n     * \"appropriate\" to do so.\n     *\n     * The exact behaviour depends on the browser, but commonly requires some\n     * form of user interaction on the page in order to allow auto playing videos\n     * with sound.\n     */\n    AutoPlay[\"Auto\"] = \"auto\";\n})(AutoPlay || (AutoPlay = {}));\n/**\n * Controls whether the content is letterboxed or pillarboxed when the\n * player's aspect ratio does not match the movie's aspect ratio.\n *\n * When letterboxed, black bars will be rendered around the exterior\n * margins of the content.\n */\nexport var Letterbox;\n(function (Letterbox) {\n    /**\n     * The content will never be letterboxed.\n     */\n    Letterbox[\"Off\"] = \"off\";\n    /**\n     * The content will only be letterboxed if the content is running fullscreen.\n     */\n    Letterbox[\"Fullscreen\"] = \"fullscreen\";\n    /**\n     * The content will always be letterboxed.\n     */\n    Letterbox[\"On\"] = \"on\";\n})(Letterbox || (Letterbox = {}));\n/**\n * When the player is muted, this controls whether or not Ruffle will show a\n * \"click to unmute\" overlay on top of the movie.\n */\nexport var UnmuteOverlay;\n(function (UnmuteOverlay) {\n    /**\n     * Show an overlay explaining that the movie is muted.\n     */\n    UnmuteOverlay[\"Visible\"] = \"visible\";\n    /**\n     * Don't show an overlay and pretend that everything is fine.\n     */\n    UnmuteOverlay[\"Hidden\"] = \"hidden\";\n})(UnmuteOverlay || (UnmuteOverlay = {}));\n/**\n * Console logging level.\n */\nexport var LogLevel;\n(function (LogLevel) {\n    LogLevel[\"Error\"] = \"error\";\n    LogLevel[\"Warn\"] = \"warn\";\n    LogLevel[\"Info\"] = \"info\";\n    LogLevel[\"Debug\"] = \"debug\";\n    LogLevel[\"Trace\"] = \"trace\";\n})(LogLevel || (LogLevel = {}));\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { loadRuffle } from \"./load-ruffle\";\nimport { ruffleShadowTemplate } from \"./shadow-template\";\nimport { lookupElement } from \"./register-element\";\nimport { AutoPlay, UnmuteOverlay, } from \"./load-options\";\nexport const FLASH_MIMETYPE = \"application/x-shockwave-flash\";\nexport const FUTURESPLASH_MIMETYPE = \"application/futuresplash\";\nexport const FLASH7_AND_8_MIMETYPE = \"application/x-shockwave-flash2-preview\";\nexport const FLASH_MOVIE_MIMETYPE = \"application/vnd.adobe.flash-movie\";\nexport const FLASH_ACTIVEX_CLASSID = \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\";\nconst RUFFLE_ORIGIN = \"https://ruffle.rs\";\nconst DIMENSION_REGEX = /^\\s*(\\d+(\\.\\d+)?(%)?)/;\nvar PanicError;\n(function (PanicError) {\n    PanicError[PanicError[\"Unknown\"] = 0] = \"Unknown\";\n    PanicError[PanicError[\"CSPConflict\"] = 1] = \"CSPConflict\";\n    PanicError[PanicError[\"FileProtocol\"] = 2] = \"FileProtocol\";\n    PanicError[PanicError[\"InvalidWasm\"] = 3] = \"InvalidWasm\";\n    PanicError[PanicError[\"JavascriptConfiguration\"] = 4] = \"JavascriptConfiguration\";\n    PanicError[PanicError[\"JavascriptConflict\"] = 5] = \"JavascriptConflict\";\n    PanicError[PanicError[\"WasmCors\"] = 6] = \"WasmCors\";\n    PanicError[PanicError[\"WasmMimeType\"] = 7] = \"WasmMimeType\";\n    PanicError[PanicError[\"WasmNotFound\"] = 8] = \"WasmNotFound\";\n})(PanicError || (PanicError = {}));\n/**\n * Converts arbitrary input to an easy to use record object.\n *\n * @param parameters Parameters to sanitize\n * @returns A sanitized map of param name to param value\n */\nfunction sanitizeParameters(parameters) {\n    if (parameters === null || parameters === undefined) {\n        return {};\n    }\n    if (!(parameters instanceof URLSearchParams)) {\n        parameters = new URLSearchParams(parameters);\n    }\n    const output = {};\n    for (const [key, value] of parameters) {\n        // Every value must be type of string\n        output[key] = value.toString();\n    }\n    return output;\n}\n/**\n * The ruffle player element that should be inserted onto the page.\n *\n * This element will represent the rendered and intractable flash movie.\n */\nexport class RufflePlayer extends HTMLElement {\n    /**\n     * Constructs a new Ruffle flash player for insertion onto the page.\n     */\n    constructor() {\n        super();\n        this.hasContextMenu = false;\n        // Whether this device is a touch device.\n        // Set to true when a touch event is encountered.\n        this.isTouch = false;\n        this.panicked = false;\n        /**\n         * Any configuration that should apply to this specific player.\n         * This will be defaulted with any global configuration.\n         */\n        this.config = {};\n        this.shadow = this.attachShadow({ mode: \"open\" });\n        this.shadow.appendChild(ruffleShadowTemplate.content.cloneNode(true));\n        this.dynamicStyles = (this.shadow.getElementById(\"dynamic_styles\"));\n        this.container = this.shadow.getElementById(\"container\");\n        this.playButton = this.shadow.getElementById(\"play_button\");\n        if (this.playButton) {\n            this.playButton.addEventListener(\"click\", this.playButtonClicked.bind(this));\n        }\n        this.unmuteOverlay = this.shadow.getElementById(\"unmute_overlay\");\n        this.contextMenuElement = this.shadow.getElementById(\"context-menu\");\n        this.addEventListener(\"contextmenu\", this.showContextMenu.bind(this));\n        this.addEventListener(\"pointerdown\", this.pointerDown.bind(this));\n        window.addEventListener(\"click\", this.hideContextMenu.bind(this));\n        this.instance = null;\n        this.options = null;\n        this.onFSCommand = null;\n        this._trace_observer = null;\n        this._readyState = ReadyState.HaveNothing;\n        this._metadata = null;\n        this.ruffleConstructor = loadRuffle();\n        this.lastActivePlayingState = false;\n        this.setupPauseOnTabHidden();\n        return this;\n    }\n    /**\n     * Indicates the readiness of the playing movie.\n     *\n     * @returns The `ReadyState` of the player.\n     */\n    get readyState() {\n        return this._readyState;\n    }\n    /**\n     * The metadata of the playing movie (such as movie width and height).\n     * These are inherent properties stored in the SWF file and are not affected by runtime changes.\n     * For example, `metadata.width` is the width of the SWF file, and not the width of the Ruffle player.\n     *\n     * @returns The metadata of the movie, or `null` if the movie metadata has not yet loaded.\n     */\n    get metadata() {\n        return this._metadata;\n    }\n    /**\n     * Setup event listener to detect when tab is not active to pause instance playback.\n     * this.instance.play() is called when the tab becomes visible only if the\n     * the instance was not paused before tab became hidden.\n     *\n     * See:\n     *      https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API\n     * @ignore\n     * @internal\n     */\n    setupPauseOnTabHidden() {\n        document.addEventListener(\"visibilitychange\", () => {\n            if (!this.instance)\n                return;\n            // Tab just changed to be inactive. Record whether instance was playing.\n            if (document.hidden) {\n                this.lastActivePlayingState = this.instance.is_playing();\n                this.instance.pause();\n            }\n            // Play only if instance was playing originally.\n            if (!document.hidden && this.lastActivePlayingState === true) {\n                this.instance.play();\n            }\n        }, false);\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    connectedCallback() {\n        this.updateStyles();\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    static get observedAttributes() {\n        return [\"width\", \"height\"];\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    attributeChangedCallback(name, _oldValue, _newValue) {\n        if (name === \"width\" || name === \"height\") {\n            this.updateStyles();\n        }\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    disconnectedCallback() {\n        this.destroy();\n    }\n    /**\n     * Updates the internal shadow DOM to reflect any set attributes from\n     * this element.\n     *\n     * @protected\n     */\n    updateStyles() {\n        if (this.dynamicStyles.sheet) {\n            if (this.dynamicStyles.sheet.rules) {\n                for (let i = 0; i < this.dynamicStyles.sheet.rules.length; i++) {\n                    this.dynamicStyles.sheet.deleteRule(i);\n                }\n            }\n            const widthAttr = this.attributes.getNamedItem(\"width\");\n            if (widthAttr !== undefined && widthAttr !== null) {\n                const width = RufflePlayer.htmlDimensionToCssDimension(widthAttr.value);\n                if (width !== null) {\n                    this.dynamicStyles.sheet.insertRule(`:host { width: ${width}; }`);\n                }\n            }\n            const heightAttr = this.attributes.getNamedItem(\"height\");\n            if (heightAttr !== undefined && heightAttr !== null) {\n                const height = RufflePlayer.htmlDimensionToCssDimension(heightAttr.value);\n                if (height !== null) {\n                    this.dynamicStyles.sheet.insertRule(`:host { height: ${height}; }`);\n                }\n            }\n        }\n    }\n    /**\n     * Determine if this element is the fallback content of another Ruffle\n     * player.\n     *\n     * This heuristic assumes Ruffle objects will never use their fallback\n     * content. If this changes, then this code also needs to change.\n     *\n     * @private\n     */\n    isUnusedFallbackObject() {\n        let parent = this.parentNode;\n        const element = lookupElement(\"ruffle-object\");\n        if (element !== null) {\n            while (parent != document && parent != null) {\n                if (parent.nodeName === element.name) {\n                    return true;\n                }\n                parent = parent.parentNode;\n            }\n        }\n        return false;\n    }\n    /**\n     * Ensure a fresh Ruffle instance is ready on this player before continuing.\n     *\n     * @throws Any exceptions generated by loading Ruffle Core will be logged\n     * and passed on.\n     *\n     * @private\n     */\n    ensureFreshInstance(config) {\n        var _a;\n        return __awaiter(this, void 0, void 0, function* () {\n            this.destroy();\n            const ruffleConstructor = yield this.ruffleConstructor.catch((e) => {\n                console.error(`Serious error loading Ruffle: ${e}`);\n                // Serious duck typing. In error conditions, let's not make assumptions.\n                if (window.location.protocol === \"file:\") {\n                    e.ruffleIndexError = PanicError.FileProtocol;\n                }\n                else {\n                    e.ruffleIndexError = PanicError.WasmNotFound;\n                    const message = String(e.message).toLowerCase();\n                    if (message.includes(\"mime\")) {\n                        e.ruffleIndexError = PanicError.WasmMimeType;\n                    }\n                    else if (message.includes(\"networkerror\") ||\n                        message.includes(\"failed to fetch\")) {\n                        e.ruffleIndexError = PanicError.WasmCors;\n                    }\n                    else if (message.includes(\"disallowed by embedder\")) {\n                        e.ruffleIndexError = PanicError.CSPConflict;\n                    }\n                    else if (message.includes(\"webassembly.instantiate\") &&\n                        e.name === \"CompileError\") {\n                        e.ruffleIndexError = PanicError.InvalidWasm;\n                    }\n                    else if (!message.includes(\"magic\") &&\n                        (e.name === \"CompileError\" || e.name === \"TypeError\")) {\n                        e.ruffleIndexError = PanicError.JavascriptConflict;\n                    }\n                }\n                this.panic(e);\n                throw e;\n            });\n            this.instance = new ruffleConstructor(this.container, this, config);\n            console.log(\"New Ruffle instance created.\");\n            // In Firefox, AudioContext.state is always \"suspended\" when the object has just been created.\n            // It may change by itself to \"running\" some milliseconds later. So we need to wait a little\n            // bit before checking if autoplay is supported and applying the instance config.\n            if (this.audioState() !== \"running\") {\n                this.container.style.visibility = \"hidden\";\n                yield new Promise((resolve) => {\n                    window.setTimeout(() => {\n                        resolve();\n                    }, 200);\n                });\n                this.container.style.visibility = \"\";\n            }\n            const autoplay = Object.values(Object(AutoPlay)).includes(config.autoplay)\n                ? config.autoplay\n                : AutoPlay.Auto;\n            const unmuteVisibility = Object.values(Object(UnmuteOverlay)).includes(config.unmuteOverlay)\n                ? config.unmuteOverlay\n                : UnmuteOverlay.Visible;\n            if (autoplay == AutoPlay.On ||\n                (autoplay == AutoPlay.Auto && this.audioState() === \"running\")) {\n                this.play();\n                if (this.audioState() !== \"running\") {\n                    if (unmuteVisibility === UnmuteOverlay.Visible) {\n                        this.unmuteOverlay.style.display = \"block\";\n                    }\n                    this.container.addEventListener(\"click\", this.unmuteOverlayClicked.bind(this), {\n                        once: true,\n                    });\n                    const audioContext = (_a = this.instance) === null || _a === void 0 ? void 0 : _a.audio_context();\n                    if (audioContext) {\n                        audioContext.onstatechange = () => {\n                            if (audioContext.state === \"running\") {\n                                this.unmuteOverlayClicked();\n                            }\n                            audioContext.onstatechange = null;\n                        };\n                    }\n                }\n            }\n            else {\n                this.playButton.style.display = \"block\";\n            }\n        });\n    }\n    /**\n     * Destroys the currently running instance of Ruffle.\n     */\n    destroy() {\n        if (this.instance) {\n            this.instance.destroy();\n            this.instance = null;\n            this._metadata = null;\n            this._readyState = ReadyState.HaveNothing;\n            console.log(\"Ruffle instance destroyed.\");\n        }\n    }\n    /**\n     * Loads a specified movie into this player.\n     *\n     * This will replace any existing movie that may be playing.\n     *\n     * @param options One of the following:\n     * - A URL, passed as a string, which will load a URL with default options.\n     * - A [[URLLoadOptions]] object, to load a URL with options.\n     * - A [[DataLoadOptions]] object, to load data with options.\n     *\n     * The options will be defaulted by the [[config]] field, which itself\n     * is defaulted by a global `window.RufflePlayer.config`.\n     */\n    load(options) {\n        var _a, _b;\n        return __awaiter(this, void 0, void 0, function* () {\n            let optionsError = \"\";\n            switch (typeof options) {\n                case \"string\":\n                    options = { url: options };\n                    break;\n                case \"object\":\n                    if (options === null) {\n                        optionsError = \"Argument 0 must be a string or object\";\n                    }\n                    else if (!(\"url\" in options) && !(\"data\" in options)) {\n                        optionsError =\n                            \"Argument 0 must contain a `url` or `data` key\";\n                    }\n                    else if (\"url\" in options &&\n                        typeof options.url !== \"string\") {\n                        optionsError = \"`url` must be a string\";\n                    }\n                    break;\n                default:\n                    optionsError = \"Argument 0 must be a string or object\";\n                    break;\n            }\n            if (optionsError.length > 0) {\n                const error = new TypeError(optionsError);\n                error.ruffleIndexError = PanicError.JavascriptConfiguration;\n                this.panic(error);\n                throw error;\n            }\n            if (!this.isConnected || this.isUnusedFallbackObject()) {\n                console.warn(\"Ignoring attempt to play a disconnected or suspended Ruffle element\");\n                return;\n            }\n            try {\n                const config = Object.assign(Object.assign(Object.assign({}, ((_b = (_a = window.RufflePlayer) === null || _a === void 0 ? void 0 : _a.config) !== null && _b !== void 0 ? _b : {})), this.config), options);\n                // `allowScriptAccess` can only be set in `options`.\n                config.allowScriptAccess = options.allowScriptAccess;\n                this.options = options;\n                this.hasContextMenu = config.contextMenu !== false;\n                // Pre-emptively set background color of container while Ruffle/SWF loads.\n                if (config.backgroundColor) {\n                    this.container.style.backgroundColor = config.backgroundColor;\n                }\n                yield this.ensureFreshInstance(config);\n                if (\"url\" in options) {\n                    console.log(`Loading SWF file ${options.url}`);\n                    try {\n                        this.swfUrl = new URL(options.url, document.location.href).href;\n                    }\n                    catch (_c) {\n                        this.swfUrl = options.url;\n                    }\n                    const parameters = Object.assign(Object.assign({}, sanitizeParameters(options.url.substring(options.url.indexOf(\"?\")))), sanitizeParameters(options.parameters));\n                    this.instance.stream_from(options.url, parameters);\n                }\n                else if (\"data\" in options) {\n                    console.log(\"Loading SWF data\");\n                    this.instance.load_data(new Uint8Array(options.data), sanitizeParameters(options.parameters));\n                }\n            }\n            catch (err) {\n                console.error(`Serious error occurred loading SWF file: ${err}`);\n                throw err;\n            }\n        });\n    }\n    playButtonClicked() {\n        this.play();\n    }\n    /**\n     * Plays or resumes the movie.\n     */\n    play() {\n        if (this.instance) {\n            this.instance.play();\n            if (this.playButton) {\n                this.playButton.style.display = \"none\";\n            }\n        }\n    }\n    /**\n     * Checks if this player is allowed to be fullscreen by the browser.\n     *\n     * @returns True if you may call [[enterFullscreen]].\n     */\n    get fullscreenEnabled() {\n        return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled);\n    }\n    /**\n     * Checks if this player is currently fullscreen inside the browser.\n     *\n     * @returns True if it is fullscreen.\n     */\n    get isFullscreen() {\n        return ((document.fullscreenElement || document.webkitFullscreenElement) ===\n            this);\n    }\n    /**\n     * Requests the browser to make this player fullscreen.\n     *\n     * This is not guaranteed to succeed, please check [[fullscreenEnabled]] first.\n     */\n    enterFullscreen() {\n        const options = {\n            navigationUI: \"hide\",\n        };\n        if (this.requestFullscreen) {\n            this.requestFullscreen(options);\n        }\n        else if (this.webkitRequestFullscreen) {\n            this.webkitRequestFullscreen(options);\n        }\n        else if (this.webkitRequestFullScreen) {\n            this.webkitRequestFullScreen(options);\n        }\n    }\n    /**\n     * Requests the browser to no longer make this player fullscreen.\n     */\n    exitFullscreen() {\n        if (document.exitFullscreen) {\n            document.exitFullscreen();\n        }\n        else if (document.webkitExitFullscreen) {\n            document.webkitExitFullscreen();\n        }\n        else if (document.webkitCancelFullScreen) {\n            document.webkitCancelFullScreen();\n        }\n    }\n    pointerDown(event) {\n        // Disable context menu when touch support is being used\n        // to avoid a long press triggering the context menu. (#1972)\n        if (event.pointerType === \"touch\" || event.pointerType === \"pen\") {\n            this.isTouch = true;\n        }\n    }\n    contextMenuItems() {\n        const CHECKMARK = String.fromCharCode(0x2713);\n        const items = [];\n        if (this.instance) {\n            const customItems = this.instance.prepare_context_menu();\n            customItems.forEach((item, index) => {\n                if (item.separatorBefore)\n                    items.push(null);\n                items.push({\n                    // TODO: better checkboxes\n                    text: item.caption + (item.checked ? ` (${CHECKMARK})` : ``),\n                    onClick: () => { var _a; return (_a = this.instance) === null || _a === void 0 ? void 0 : _a.run_context_menu_callback(index); },\n                    enabled: item.enabled,\n                });\n            });\n        }\n        items.push(null);\n        if (this.fullscreenEnabled) {\n            if (this.isFullscreen) {\n                items.push({\n                    text: \"Exit fullscreen\",\n                    onClick: this.exitFullscreen.bind(this),\n                });\n            }\n            else {\n                items.push({\n                    text: \"Enter fullscreen\",\n                    onClick: this.enterFullscreen.bind(this),\n                });\n            }\n        }\n        items.push(null);\n        items.push({\n            text: `About Ruffle (nightly 2021-07-07)`,\n            onClick() {\n                window.open(RUFFLE_ORIGIN, \"_blank\");\n            },\n        });\n        return items;\n    }\n    showContextMenu(e) {\n        e.preventDefault();\n        if (!this.hasContextMenu || this.isTouch) {\n            return;\n        }\n        // Clear all context menu items.\n        while (this.contextMenuElement.firstChild) {\n            this.contextMenuElement.removeChild(this.contextMenuElement.firstChild);\n        }\n        // Populate context menu items.\n        for (const item of this.contextMenuItems()) {\n            if (item === null) {\n                if (!this.contextMenuElement.lastElementChild)\n                    continue; // don't start with separators\n                if (this.contextMenuElement.lastElementChild.classList.contains(\"menu_separator\"))\n                    continue; // don't repeat separators\n                const menuSeparator = document.createElement(\"li\");\n                menuSeparator.className = \"menu_separator\";\n                const hr = document.createElement(\"hr\");\n                menuSeparator.appendChild(hr);\n                this.contextMenuElement.appendChild(menuSeparator);\n            }\n            else {\n                const { text, onClick, enabled } = item;\n                const menuItem = document.createElement(\"li\");\n                menuItem.className = \"menu_item active\";\n                menuItem.textContent = text;\n                this.contextMenuElement.appendChild(menuItem);\n                if (enabled !== false) {\n                    menuItem.addEventListener(\"click\", onClick);\n                }\n                else {\n                    menuItem.classList.add(\"disabled\");\n                }\n            }\n        }\n        // Place a context menu in the top-left corner, so\n        // its `clientWidth` and `clientHeight` are not clamped.\n        this.contextMenuElement.style.left = \"0\";\n        this.contextMenuElement.style.top = \"0\";\n        this.contextMenuElement.style.display = \"block\";\n        const rect = this.getBoundingClientRect();\n        const x = e.clientX - rect.x;\n        const y = e.clientY - rect.y;\n        const maxX = rect.width - this.contextMenuElement.clientWidth - 1;\n        const maxY = rect.height - this.contextMenuElement.clientHeight - 1;\n        this.contextMenuElement.style.left =\n            Math.floor(Math.min(x, maxX)) + \"px\";\n        this.contextMenuElement.style.top =\n            Math.floor(Math.min(y, maxY)) + \"px\";\n    }\n    hideContextMenu() {\n        var _a;\n        (_a = this.instance) === null || _a === void 0 ? void 0 : _a.clear_custom_menu_items();\n        this.contextMenuElement.style.display = \"none\";\n    }\n    /**\n     * Pauses this player.\n     *\n     * No more frames, scripts or sounds will be executed.\n     * This movie will be considered inactive and will not wake up until resumed.\n     */\n    pause() {\n        if (this.instance) {\n            this.instance.pause();\n            if (this.playButton) {\n                this.playButton.style.display = \"block\";\n            }\n        }\n    }\n    audioState() {\n        if (this.instance) {\n            const audioContext = this.instance.audio_context();\n            return (audioContext && audioContext.state) || \"running\";\n        }\n        return \"suspended\";\n    }\n    unmuteOverlayClicked() {\n        if (this.instance) {\n            if (this.audioState() !== \"running\") {\n                const audioContext = this.instance.audio_context();\n                if (audioContext) {\n                    audioContext.resume();\n                }\n            }\n            if (this.unmuteOverlay) {\n                this.unmuteOverlay.style.display = \"none\";\n            }\n        }\n    }\n    /**\n     * Copies attributes and children from another element to this player element.\n     * Used by the polyfill elements, RuffleObject and RuffleEmbed.\n     *\n     * @param elem The element to copy all attributes from.\n     * @protected\n     */\n    copyElement(elem) {\n        if (elem) {\n            for (let i = 0; i < elem.attributes.length; i++) {\n                const attrib = elem.attributes[i];\n                if (attrib.specified) {\n                    // Issue 468: Chrome \"Click to Active Flash\" box stomps on title attribute\n                    if (attrib.name === \"title\" &&\n                        attrib.value === \"Adobe Flash Player\") {\n                        continue;\n                    }\n                    try {\n                        this.setAttribute(attrib.name, attrib.value);\n                    }\n                    catch (err) {\n                        // The embed may have invalid attributes, so handle these gracefully.\n                        console.warn(`Unable to set attribute ${attrib.name} on Ruffle instance`);\n                    }\n                }\n            }\n            for (const node of Array.from(elem.children)) {\n                this.appendChild(node);\n            }\n        }\n    }\n    /**\n     * Converts a dimension attribute on an HTML embed/object element to a valid CSS dimension.\n     * HTML element dimensions are unitless, but can also be percentages.\n     * Add a 'px' unit unless the value is a percentage.\n     * Returns null if this is not a valid dimension.\n     *\n     * @param attribute The attribute to convert\n     *\n     * @private\n     */\n    static htmlDimensionToCssDimension(attribute) {\n        if (attribute) {\n            const match = attribute.match(DIMENSION_REGEX);\n            if (match) {\n                let out = match[1];\n                if (!match[3]) {\n                    // Unitless -- add px for CSS.\n                    out += \"px\";\n                }\n                return out;\n            }\n        }\n        return null;\n    }\n    /**\n     * When a movie presents a new callback through `ExternalInterface.addCallback`,\n     * we are informed so that we can expose the method on any relevant DOM element.\n     *\n     * This should only be called by Ruffle itself and not by users.\n     *\n     * @param name The name of the callback that is now available.\n     *\n     * @internal\n     * @ignore\n     */\n    onCallbackAvailable(name) {\n        const instance = this.instance;\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this[name] = (...args) => {\n            return instance === null || instance === void 0 ? void 0 : instance.call_exposed_callback(name, args);\n        };\n    }\n    /**\n     * Sets a trace observer on this flash player.\n     *\n     * The observer will be called, as a function, for each message that the playing movie will \"trace\" (output).\n     *\n     * @param observer The observer that will be called for each trace.\n     */\n    set traceObserver(observer) {\n        var _a;\n        (_a = this.instance) === null || _a === void 0 ? void 0 : _a.set_trace_observer(observer);\n    }\n    /**\n     * Panics this specific player, forcefully destroying all resources and displays an error message to the user.\n     *\n     * This should be called when something went absolutely, incredibly and disastrously wrong and there is no chance\n     * of recovery.\n     *\n     * Ruffle will attempt to isolate all damage to this specific player instance, but no guarantees can be made if there\n     * was a core issue which triggered the panic. If Ruffle is unable to isolate the cause to a specific player, then\n     * all players will panic and Ruffle will become \"poisoned\" - no more players will run on this page until it is\n     * reloaded fresh.\n     *\n     * @param error The error, if any, that triggered this panic.\n     */\n    panic(error) {\n        var _a;\n        if (this.panicked) {\n            // Only show the first major error, not any repeats - they aren't as important\n            return;\n        }\n        this.panicked = true;\n        if (error instanceof Error &&\n            (error.name === \"AbortError\" ||\n                error.message.includes(\"AbortError\"))) {\n            // Firefox: Don't display the panic screen if the user leaves the page while something is still loading\n            return;\n        }\n        const errorIndex = (_a = error === null || error === void 0 ? void 0 : error.ruffleIndexError) !== null && _a !== void 0 ? _a : PanicError.Unknown;\n        const errorArray = Object.assign([], {\n            stackIndex: -1,\n        });\n        errorArray.push(\"# Error Info\\n\");\n        if (error instanceof Error) {\n            errorArray.push(`Error name: ${error.name}\\n`);\n            errorArray.push(`Error message: ${error.message}\\n`);\n            if (error.stack) {\n                const stackIndex = errorArray.push(`Error stack:\\n\\`\\`\\`\\n${error.stack}\\n\\`\\`\\`\\n`) - 1;\n                errorArray.stackIndex = stackIndex;\n            }\n        }\n        else {\n            errorArray.push(`Error: ${error}\\n`);\n        }\n        errorArray.push(\"\\n# Player Info\\n\");\n        errorArray.push(this.debugPlayerInfo());\n        errorArray.push(\"\\n# Page Info\\n\");\n        errorArray.push(`Page URL: ${document.location.href}\\n`);\n        if (this.swfUrl)\n            errorArray.push(`SWF URL: ${this.swfUrl}\\n`);\n        errorArray.push(\"\\n# Browser Info\\n\");\n        errorArray.push(`Useragent: ${window.navigator.userAgent}\\n`);\n        errorArray.push(`OS: ${window.navigator.platform}\\n`);\n        errorArray.push(\"\\n# Ruffle Info\\n\");\n        errorArray.push(`Version: 0.1.0\\n`);\n        errorArray.push(`Name: nightly 2021-07-07\\n`);\n        errorArray.push(`Channel: nightly\\n`);\n        errorArray.push(`Built: 2021-07-07T00:13:00.531Z\\n`);\n        errorArray.push(`Commit: d334e30259a3a979b98b680b0f3aa0c8c7caa87a\\n`);\n        const errorText = errorArray.join(\"\");\n        // Remove query params for the issue title.\n        const pageUrl = document.location.href.split(/[?#]/)[0];\n        const issueTitle = `Error on ${pageUrl}`;\n        let issueLink = `https://github.com/ruffle-rs/ruffle/issues/new?title=${encodeURIComponent(issueTitle)}&body=`;\n        let issueBody = encodeURIComponent(errorText);\n        if (errorArray.stackIndex > -1 &&\n            String(issueLink + issueBody).length > 8195) {\n            // Strip the stack error from the array when the produced URL is way too long.\n            // This should prevent \"414 Request-URI Too Large\" errors on Github.\n            errorArray[errorArray.stackIndex] = null;\n            issueBody = encodeURIComponent(errorArray.join(\"\"));\n        }\n        issueLink += issueBody;\n        // Clears out any existing content (ie play button or canvas) and replaces it with the error screen\n        let errorBody, errorFooter;\n        switch (errorIndex) {\n            case PanicError.FileProtocol:\n                // General error: Running on the `file:` protocol\n                errorBody = `\n                    <p>It appears you are running Ruffle on the \"file:\" protocol.</p>\n                    <p>This doesn't work as browsers block many features from working for security reasons.</p>\n                    <p>Instead, we invite you to setup a local server or either use the web demo or the desktop application.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"${RUFFLE_ORIGIN}/demo\">Web Demo</a></li>\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/tags\">Desktop Application</a></li>\n                `;\n                break;\n            case PanicError.JavascriptConfiguration:\n                // General error: Incorrect JavaScript configuration\n                errorBody = `\n                    <p>Ruffle has encountered a major issue due to an incorrect JavaScript configuration.</p>\n                    <p>If you are the server administrator, we invite you to check the error details to find out which parameter is at fault.</p>\n                    <p>You can also consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#javascript-api\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.WasmNotFound:\n                // Self hosted: Cannot load `.wasm` file - file not found\n                errorBody = `\n                    <p>Ruffle failed to load the required \".wasm\" file component.</p>\n                    <p>If you are the server administrator, please ensure the file has correctly been uploaded.</p>\n                    <p>If the issue persists, you may need to use the \"publicPath\" setting: please consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#configuration-options\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.WasmMimeType:\n                // Self hosted: Cannot load `.wasm` file - incorrect MIME type\n                errorBody = `\n                    <p>Ruffle has encountered a major issue whilst trying to initialize.</p>\n                    <p>This web server is not serving \".wasm\" files with the correct MIME type.</p>\n                    <p>If you are the server administrator, please consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#configure-webassembly-mime-type\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.WasmCors:\n                // Self hosted: Cannot load `.wasm` file - CORS issues\n                errorBody = `\n                    <p>Ruffle failed to load the required \".wasm\" file component.</p>\n                    <p>Access to fetch has likely been blocked by CORS policy.</p>\n                    <p>If you are the server administrator, please consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#web\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.InvalidWasm:\n                // Self hosted: Cannot load `.wasm` file - incorrect configuration or missing files\n                errorBody = `\n                    <p>Ruffle has encountered a major issue whilst trying to initialize.</p>\n                    <p>It seems like this page has missing or invalid files for running Ruffle.</p>\n                    <p>If you are the server administrator, please consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#addressing-a-compileerror\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.JavascriptConflict:\n                // Self hosted: Cannot load `.wasm` file - a native object / function is overriden\n                errorBody = `\n                    <p>Ruffle has encountered a major issue whilst trying to initialize.</p>\n                    <p>It seems like this page uses JavaScript code that conflicts with Ruffle.</p>\n                    <p>If you are the server administrator, we invite you to try loading the file on a blank page.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"${issueLink}\">Report Bug</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.CSPConflict:\n                // General error: Cannot load `.wasm` file - a native object / function is overriden\n                errorBody = `\n                    <p>Ruffle has encountered a major issue whilst trying to initialize.</p>\n                    <p>This web server's Content Security Policy does not allow the required \".wasm\" component to run.</p>\n                    <p>If you are the server administrator, please consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#configure-wasm-csp\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            default:\n                // Unknown error\n                errorBody = `\n                    <p>Ruffle has encountered a major issue whilst trying to display this Flash content.</p>\n                    <p>This isn't supposed to happen, so we'd really appreciate if you could file a bug!</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"${issueLink}\">Report Bug</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n        }\n        this.container.innerHTML = `\n            <div id=\"panic\">\n                <div id=\"panic-title\">Something went wrong :(</div>\n                <div id=\"panic-body\">${errorBody}</div>\n                <div id=\"panic-footer\">\n                    <ul>${errorFooter}</ul>\n                </div>\n            </div>\n        `;\n        const viewDetails = (this.container.querySelector(\"#panic-view-details\"));\n        if (viewDetails) {\n            viewDetails.onclick = () => {\n                const panicBody = (this.container.querySelector(\"#panic-body\"));\n                panicBody.classList.add(\"details\");\n                panicBody.innerHTML = `<textarea>${errorText}</textarea>`;\n                return false;\n            };\n        }\n        // Do this last, just in case it causes any cascading issues.\n        this.destroy();\n    }\n    displayUnsupportedMessage() {\n        const div = document.createElement(\"div\");\n        div.id = \"message_overlay\";\n        // TODO: Change link to https://ruffle.rs/faq or similar\n        // TODO: Pause content until message is dismissed\n        div.innerHTML = `<div class=\"message\">\n            <p>Flash Player has been removed from browsers in 2021.</p>\n            <p>This content is not yet supported by the Ruffle emulator and will likely not run as intended.</p>\n            <div>\n                <a target=\"_top\" class=\"more-info-link\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Frequently-Asked-Questions-For-Users\">More info</a>\n                <button id=\"run-anyway-btn\">Run anyway</button>\n            </div>\n        </div>`;\n        this.container.prepend(div);\n        const button = div.querySelector(\"#run-anyway-btn\");\n        button.onclick = () => {\n            div.parentNode.removeChild(div);\n        };\n    }\n    displayMessage(message) {\n        // Show a dismissible message in front of the player\n        const div = document.createElement(\"div\");\n        div.id = \"message_overlay\";\n        div.innerHTML = `<div class=\"message\">\n            <p>${message}</p>\n            <div>\n                <button id=\"continue-btn\">continue</button>\n            </div>\n        </div>`;\n        this.container.prepend(div);\n        (this.container.querySelector(\"#continue-btn\")).onclick = () => {\n            div.parentNode.removeChild(div);\n        };\n    }\n    debugPlayerInfo() {\n        var _a, _b;\n        return `Allows script access: ${(_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.allowScriptAccess) !== null && _b !== void 0 ? _b : false}\\n`;\n    }\n    setMetadata(metadata) {\n        this._metadata = metadata;\n        // TODO: Switch this to ReadyState.Loading when we have streaming support.\n        this._readyState = ReadyState.Loaded;\n        this.dispatchEvent(new Event(RufflePlayer.LOADED_METADATA));\n    }\n}\n/**\n * Triggered when a movie metadata has been loaded (such as movie width and height).\n *\n * @event RufflePlayer#loadedmetadata\n */\nRufflePlayer.LOADED_METADATA = \"loadedmetadata\";\n/**\n * Describes the loading state of an SWF movie.\n */\nexport var ReadyState;\n(function (ReadyState) {\n    /**\n     * No movie is loaded, or no information is yet available about the movie.\n     */\n    ReadyState[ReadyState[\"HaveNothing\"] = 0] = \"HaveNothing\";\n    /**\n     * The movie is still loading, but it has started playback, and metadata is available.\n     */\n    ReadyState[ReadyState[\"Loading\"] = 1] = \"Loading\";\n    /**\n     * The movie has completely loaded.\n     */\n    ReadyState[ReadyState[\"Loaded\"] = 2] = \"Loaded\";\n})(ReadyState || (ReadyState = {}));\n/**\n * Returns whether a SWF file can call JavaScript code in the surrounding HTML file.\n *\n * @param access The value of the `allowScriptAccess` attribute.\n * @param url The URL of the SWF file.\n * @returns True if script access is allowed.\n */\nexport function isScriptAccessAllowed(access, url) {\n    if (!access) {\n        access = \"sameDomain\";\n    }\n    switch (access.toLowerCase()) {\n        case \"always\":\n            return true;\n        case \"never\":\n            return false;\n        case \"samedomain\":\n        default:\n            try {\n                return (new URL(window.location.href).origin ===\n                    new URL(url, window.location.href).origin);\n            }\n            catch (_a) {\n                return false;\n            }\n    }\n}\n/**\n * Returns whether the given filename ends in a known flash extension.\n *\n * @param filename The filename to test.\n * @returns True if the filename is a flash movie (swf or spl).\n */\nexport function isSwfFilename(filename) {\n    if (filename) {\n        let pathname = \"\";\n        try {\n            // A base URL is required if `filename` is a relative URL, but we don't need to detect the real URL origin.\n            pathname = new URL(filename, RUFFLE_ORIGIN).pathname;\n        }\n        catch (err) {\n            // Some invalid filenames, like `///`, could raise a TypeError. Let's fail silently in this situation.\n        }\n        if (pathname && pathname.length >= 4) {\n            const extension = pathname.slice(-4).toLowerCase();\n            if (extension === \".swf\" || extension === \".spl\") {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n","import { FLASH_MIMETYPE, FUTURESPLASH_MIMETYPE, FLASH7_AND_8_MIMETYPE, FLASH_MOVIE_MIMETYPE, isScriptAccessAllowed, isSwfFilename, RufflePlayer, } from \"./ruffle-player\";\nimport { registerElement } from \"./register-element\";\n/**\n * A polyfill html element.\n *\n * This specific class tries to polyfill existing `<embed>` tags,\n * and should not be used. Prefer [[RufflePlayer]] instead.\n *\n * @internal\n */\nexport class RuffleEmbed extends RufflePlayer {\n    /**\n     * Constructs a new Ruffle flash player for insertion onto the page.\n     *\n     * This specific class tries to polyfill existing `<embed>` tags,\n     * and should not be used. Prefer [[RufflePlayer]] instead.\n     */\n    constructor() {\n        super();\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    connectedCallback() {\n        var _a, _b, _c, _d;\n        super.connectedCallback();\n        const src = this.attributes.getNamedItem(\"src\");\n        if (src) {\n            const allowScriptAccess = (_b = (_a = this.attributes.getNamedItem(\"allowScriptAccess\")) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : null;\n            // Kick off the SWF download.\n            this.load({\n                url: src.value,\n                allowScriptAccess: isScriptAccessAllowed(allowScriptAccess, src.value),\n                parameters: (_c = this.attributes.getNamedItem(\"flashvars\")) === null || _c === void 0 ? void 0 : _c.value,\n                backgroundColor: (_d = this.attributes.getNamedItem(\"bgcolor\")) === null || _d === void 0 ? void 0 : _d.value,\n            });\n        }\n    }\n    /**\n     * Polyfill of HTMLObjectElement.\n     *\n     * @ignore\n     * @internal\n     */\n    get src() {\n        var _a;\n        return (_a = this.attributes.getNamedItem(\"src\")) === null || _a === void 0 ? void 0 : _a.value;\n    }\n    /**\n     * Polyfill of HTMLObjectElement.\n     *\n     * @ignore\n     * @internal\n     */\n    set src(srcval) {\n        if (srcval != undefined) {\n            const attr = document.createAttribute(\"src\");\n            attr.value = srcval;\n            this.attributes.setNamedItem(attr);\n        }\n        else {\n            this.attributes.removeNamedItem(\"src\");\n        }\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    static get observedAttributes() {\n        return [\"src\", \"width\", \"height\"];\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    attributeChangedCallback(name, oldValue, newValue) {\n        super.attributeChangedCallback(name, oldValue, newValue);\n        if (this.isConnected && name === \"src\") {\n            let parameters;\n            const flashvars = this.attributes.getNamedItem(\"flashvars\");\n            if (flashvars) {\n                parameters = flashvars.value;\n            }\n            const src = this.attributes.getNamedItem(\"src\");\n            if (src) {\n                this.load({ url: src.value, parameters });\n            }\n        }\n    }\n    /**\n     * Checks if the given element may be polyfilled with this one.\n     *\n     * @param elem Element to check.\n     * @returns True if the element looks like a flash embed.\n     */\n    static isInterdictable(elem) {\n        var _a;\n        if (!elem.getAttribute(\"src\")) {\n            return false;\n        }\n        const type = (_a = elem.getAttribute(\"type\")) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n        if (type === FLASH_MIMETYPE.toLowerCase() ||\n            type === FUTURESPLASH_MIMETYPE.toLowerCase() ||\n            type === FLASH7_AND_8_MIMETYPE.toLowerCase() ||\n            type === FLASH_MOVIE_MIMETYPE.toLowerCase()) {\n            return true;\n        }\n        else if (type == null || type === \"\") {\n            return isSwfFilename(elem.getAttribute(\"src\"));\n        }\n        return false;\n    }\n    /**\n     * Creates a RuffleEmbed that will polyfill and replace the given element.\n     *\n     * @param elem Element to replace.\n     * @returns Created RuffleEmbed.\n     */\n    static fromNativeEmbedElement(elem) {\n        const externalName = registerElement(\"ruffle-embed\", RuffleEmbed);\n        const ruffleObj = document.createElement(externalName);\n        ruffleObj.copyElement(elem);\n        return ruffleObj;\n    }\n}\n","import { FLASH_MIMETYPE, FUTURESPLASH_MIMETYPE, FLASH7_AND_8_MIMETYPE, FLASH_MOVIE_MIMETYPE, FLASH_ACTIVEX_CLASSID, isScriptAccessAllowed, isSwfFilename, RufflePlayer, } from \"./ruffle-player\";\nimport { registerElement } from \"./register-element\";\nimport { RuffleEmbed } from \"./ruffle-embed\";\n/**\n * Find and return the first value in obj with the given key.\n * Many Flash params were case insensitive, so we use this when checking for them.\n *\n * @param obj Object to check\n * @param key Key to find\n * @param defaultValue Value if not found\n * @returns Value if found, else [[defaultValue]]\n */\nfunction findCaseInsensitive(obj, key, defaultValue) {\n    key = key.toLowerCase();\n    for (const k in obj) {\n        if (Object.hasOwnProperty.call(obj, k) && key === k.toLowerCase()) {\n            return obj[k];\n        }\n    }\n    return defaultValue;\n}\n/**\n * Returns all flash params ([[HTMLParamElement]]) that are for the given object.\n *\n * @param elem Element to check.\n * @returns A record of every parameter.\n */\nfunction paramsOf(elem) {\n    var _a, _b;\n    const params = {};\n    for (const param of elem.children) {\n        if (param instanceof HTMLParamElement) {\n            const key = (_a = param.attributes.getNamedItem(\"name\")) === null || _a === void 0 ? void 0 : _a.value;\n            const value = (_b = param.attributes.getNamedItem(\"value\")) === null || _b === void 0 ? void 0 : _b.value;\n            if (key && value) {\n                params[key] = value;\n            }\n        }\n    }\n    return params;\n}\n/**\n * A polyfill html element.\n *\n * This specific class tries to polyfill existing `<object>` tags,\n * and should not be used. Prefer [[RufflePlayer]] instead.\n *\n * @internal\n */\nexport class RuffleObject extends RufflePlayer {\n    /**\n     * Constructs a new Ruffle flash player for insertion onto the page.\n     *\n     * This specific class tries to polyfill existing `<object>` tags,\n     * and should not be used. Prefer [[RufflePlayer]] instead.\n     */\n    constructor() {\n        super();\n        this.params = {};\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    connectedCallback() {\n        var _a;\n        super.connectedCallback();\n        this.params = paramsOf(this);\n        let url = null;\n        if (this.attributes.getNamedItem(\"data\")) {\n            url = (_a = this.attributes.getNamedItem(\"data\")) === null || _a === void 0 ? void 0 : _a.value;\n        }\n        else if (this.params.movie) {\n            url = this.params.movie;\n        }\n        const allowScriptAccess = findCaseInsensitive(this.params, \"allowScriptAccess\", null);\n        const parameters = findCaseInsensitive(this.params, \"flashvars\", this.getAttribute(\"flashvars\"));\n        const backgroundColor = findCaseInsensitive(this.params, \"bgcolor\", this.getAttribute(\"bgcolor\"));\n        if (url) {\n            const options = { url };\n            options.allowScriptAccess = isScriptAccessAllowed(allowScriptAccess, url);\n            if (parameters) {\n                options.parameters = parameters;\n            }\n            if (backgroundColor) {\n                options.backgroundColor = backgroundColor;\n            }\n            // Kick off the SWF download.\n            this.load(options);\n        }\n    }\n    debugPlayerInfo() {\n        var _a;\n        let errorText = super.debugPlayerInfo();\n        errorText += \"Player type: Object\\n\";\n        let url = null;\n        if (this.attributes.getNamedItem(\"data\")) {\n            url = (_a = this.attributes.getNamedItem(\"data\")) === null || _a === void 0 ? void 0 : _a.value;\n        }\n        else if (this.params.movie) {\n            url = this.params.movie;\n        }\n        errorText += `SWF URL: ${url}\\n`;\n        Object.keys(this.params).forEach((key) => {\n            errorText += `Param ${key}: ${this.params[key]}\\n`;\n        });\n        Object.keys(this.attributes).forEach((key) => {\n            var _a;\n            errorText += `Attribute ${key}: ${(_a = this.attributes.getNamedItem(key)) === null || _a === void 0 ? void 0 : _a.value}\\n`;\n        });\n        return errorText;\n    }\n    /**\n     * Polyfill of HTMLObjectElement.\n     *\n     * @ignore\n     * @internal\n     */\n    get data() {\n        return this.getAttribute(\"data\");\n    }\n    /**\n     * Polyfill of HTMLObjectElement.\n     *\n     * @ignore\n     * @internal\n     */\n    set data(href) {\n        if (href != undefined) {\n            const attr = document.createAttribute(\"data\");\n            attr.value = href;\n            this.attributes.setNamedItem(attr);\n        }\n        else {\n            this.attributes.removeNamedItem(\"data\");\n        }\n    }\n    /**\n     * Checks if the given element may be polyfilled with this one.\n     *\n     * @param elem Element to check.\n     * @returns True if the element looks like a flash object.\n     */\n    static isInterdictable(elem) {\n        var _a, _b, _c;\n        // Don't polyfill if there's already a <ruffle-embed> inside the <object>.\n        if (elem.getElementsByTagName(\"ruffle-embed\").length > 0) {\n            return false;\n        }\n        // Don't polyfill if no movie specified.\n        const data = (_a = elem.attributes.getNamedItem(\"data\")) === null || _a === void 0 ? void 0 : _a.value.toLowerCase();\n        const params = paramsOf(elem);\n        let isSwf;\n        // Check for SWF file.\n        if (data) {\n            isSwf = isSwfFilename(data);\n        }\n        else if (params && params.movie) {\n            isSwf = isSwfFilename(params.movie);\n        }\n        else {\n            // Don't polyfill when no file is specified.\n            return false;\n        }\n        // Check ActiveX class ID.\n        const classid = (_b = elem.attributes\n            .getNamedItem(\"classid\")) === null || _b === void 0 ? void 0 : _b.value.toLowerCase();\n        if (classid === FLASH_ACTIVEX_CLASSID.toLowerCase()) {\n            // classid is an old-IE style embed that would not work on modern browsers.\n            // Often there will be an <embed> inside the <object> that would take precedence.\n            // Only polyfill this <object> if it doesn't contain a polyfillable <embed>.\n            return !Array.from(elem.getElementsByTagName(\"embed\")).some(RuffleEmbed.isInterdictable);\n        }\n        else if (classid != null && classid !== \"\") {\n            // Non-Flash classid.\n            return false;\n        }\n        // Check for MIME type.\n        const type = (_c = elem.attributes.getNamedItem(\"type\")) === null || _c === void 0 ? void 0 : _c.value.toLowerCase();\n        if (type === FLASH_MIMETYPE.toLowerCase() ||\n            type === FUTURESPLASH_MIMETYPE.toLowerCase() ||\n            type === FLASH7_AND_8_MIMETYPE.toLowerCase() ||\n            type === FLASH_MOVIE_MIMETYPE.toLowerCase()) {\n            return true;\n        }\n        else if (type != null && type !== \"\") {\n            return false;\n        }\n        // If no MIME/class type is specified, polyfill if movie is an SWF file.\n        return isSwf;\n    }\n    /**\n     * Creates a RuffleObject that will polyfill and replace the given element.\n     *\n     * @param elem Element to replace.\n     * @returns Created RuffleObject.\n     */\n    static fromNativeObjectElement(elem) {\n        const externalName = registerElement(\"ruffle-object\", RuffleObject);\n        const ruffleObj = (document.createElement(externalName));\n        // Avoid copying embeds-inside-objects to avoid double polyfilling.\n        for (const embedElem of Array.from(elem.getElementsByTagName(\"embed\"))) {\n            if (RuffleEmbed.isInterdictable(embedElem)) {\n                embedElem.remove();\n            }\n        }\n        // Avoid copying objects-inside-objects to avoid double polyfilling.\n        // This may happen when Internet Explorer's conditional comments are used.\n        for (const objectElem of Array.from(elem.getElementsByTagName(\"object\"))) {\n            if (RuffleObject.isInterdictable(objectElem)) {\n                objectElem.remove();\n            }\n        }\n        ruffleObj.copyElement(elem);\n        return ruffleObj;\n    }\n}\n","/**\n * Attempt to discover the public path of the current Ruffle source. This can\n * be used to configure Webpack.\n *\n * We have several points of configuration for how the Ruffle public path can\n * be determined:\n *\n * 1. The public path can be specified on a per-source basis using the\n * RufflePlayer config, for example:\n * `window.RufflePlayer.config.publicPaths.local = \"/dist/\";`\n * 2. A global public path can be specified for all sources, also in config.\n * `window.RufflePlayer.config.publicPath = \"/dist/\";`\n * 3. If there is absolutely no configuration that yields a public path then we\n * return the parent path of where this script is hosted, which should be\n * the correct default in most cases.\n *\n * @param config The `window.RufflePlayer.config` object.\n * @param source_name The name of the source.\n * @returns The public path for the given source.\n */\nexport function publicPath(config, source_name) {\n    let path = \"\";\n    if (config !== undefined &&\n        config.publicPaths !== undefined &&\n        config.publicPaths[source_name] !== undefined) {\n        path = config.publicPaths[source_name];\n    }\n    else if (config !== undefined && config.publicPath !== undefined) {\n        path = config.publicPath;\n    }\n    else if (document.currentScript !== undefined &&\n        document.currentScript !== null &&\n        \"src\" in document.currentScript &&\n        document.currentScript.src !== \"\") {\n        // Default to the directory where this script resides.\n        try {\n            path = new URL(\".\", document.currentScript.src).href;\n        }\n        catch (e) {\n            console.warn(\"Unable to get currentScript URL\");\n        }\n    }\n    // Webpack expects the paths to end with a /.\n    if (path !== \"\" && !path.endsWith(\"/\")) {\n        path += \"/\";\n    }\n    return path;\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar _a, _b;\nimport { RuffleObject } from \"./ruffle-object\";\nimport { RuffleEmbed } from \"./ruffle-embed\";\nimport { installPlugin, FLASH_PLUGIN } from \"./plugin-polyfill\";\nimport { publicPath } from \"./public-path\";\nlet isExtension;\nconst globalConfig = (_b = (_a = window.RufflePlayer) === null || _a === void 0 ? void 0 : _a.config) !== null && _b !== void 0 ? _b : {};\nconst jsScriptUrl = publicPath(globalConfig, \"ruffle.js\") + \"ruffle.js\";\n/**\n * Polyfill native Flash elements with Ruffle equivalents.\n *\n * This polyfill isn't fool-proof: If there's a chance site JavaScript has\n * access to a pre-polyfill element, then this will break horribly. We can\n * keep native objects out of the DOM, and thus out of JavaScript's grubby\n * little hands, but only if we load first.\n */\nlet objects;\nlet embeds;\n/**\n *\n */\nfunction polyfillFlashInstances() {\n    try {\n        // Create live collections to track embed tags.\n        objects = objects !== null && objects !== void 0 ? objects : document.getElementsByTagName(\"object\");\n        embeds = embeds !== null && embeds !== void 0 ? embeds : document.getElementsByTagName(\"embed\");\n        // Replace <object> first, because <object> often wraps <embed>.\n        for (const elem of Array.from(objects)) {\n            if (RuffleObject.isInterdictable(elem)) {\n                const ruffleObject = RuffleObject.fromNativeObjectElement(elem);\n                elem.replaceWith(ruffleObject);\n            }\n        }\n        for (const elem of Array.from(embeds)) {\n            if (RuffleEmbed.isInterdictable(elem)) {\n                const ruffleEmbed = RuffleEmbed.fromNativeEmbedElement(elem);\n                elem.replaceWith(ruffleEmbed);\n            }\n        }\n    }\n    catch (err) {\n        console.error(`Serious error encountered when polyfilling native Flash elements: ${err}`);\n    }\n}\n/**\n * Inject Ruffle into <iframe> and <frame> elements.\n *\n * This polyfill isn't fool-proof either: On self-hosted builds, it may\n * not work due to browsers CORS policy or be loaded too late for some\n * libraries like SWFObject. These should be less of a problem on the\n * web extension. This polyfill should, however, do the trick in most\n * cases, but users should be aware of its natural limits.\n */\nlet iframes;\nlet frames;\n/**\n *\n */\nfunction polyfillFrames() {\n    // Create live collections to track embed tags.\n    iframes = iframes !== null && iframes !== void 0 ? iframes : document.getElementsByTagName(\"iframe\");\n    frames = frames !== null && frames !== void 0 ? frames : document.getElementsByTagName(\"frame\");\n    [iframes, frames].forEach((elementsList) => {\n        for (let i = 0; i < elementsList.length; i++) {\n            const element = elementsList[i];\n            if (element.dataset.rufflePolyfilled !== undefined) {\n                // Don't re-polyfill elements with the \"data-ruffle-polyfilled\" attribute.\n                continue;\n            }\n            element.dataset.rufflePolyfilled = \"\";\n            const elementWindow = element.contentWindow;\n            // Cross origin requests may reach an exception, so let's prepare for this eventuality.\n            const errorMessage = `Couldn't load Ruffle into ${element.tagName}[${element.src}]: `;\n            try {\n                if (elementWindow.document.readyState === \"complete\") {\n                    injectRuffle(elementWindow, errorMessage);\n                }\n            }\n            catch (err) {\n                if (!isExtension) {\n                    // The web extension should be able to load Ruffle into cross origin frames\n                    // because it has \"all_frames\" set to true in its manifest.json: RufflePlayer\n                    // config won't be injected but it's not worth showing an error.\n                    console.warn(errorMessage + err);\n                }\n            }\n            // Attach listener to the element to handle frame navigation.\n            element.addEventListener(\"load\", () => {\n                injectRuffle(elementWindow, errorMessage);\n            }, false);\n        }\n    });\n}\n/**\n * @param elementWindow The (i)frame's window object.\n * @param errorMessage The message to log when Ruffle cannot access the (i)frame's document.\n */\nfunction injectRuffle(elementWindow, errorMessage) {\n    var _a;\n    return __awaiter(this, void 0, void 0, function* () {\n        // The document is supposed to be completely loaded when this function is run.\n        // As Chrome may be unable to access the document properties, we have to delay the execution a little bit.\n        yield new Promise((resolve) => {\n            window.setTimeout(() => {\n                resolve();\n            }, 100);\n        });\n        let elementDocument;\n        try {\n            elementDocument = elementWindow.document;\n            if (!elementDocument) {\n                // Don't polyfill if the window has no document: the element may have been removed from the parent window.\n                return;\n            }\n        }\n        catch (err) {\n            if (!isExtension) {\n                console.warn(errorMessage + err);\n            }\n            return;\n        }\n        if (!isExtension &&\n            elementDocument.documentElement.dataset.ruffleOptout !== undefined) {\n            // Don't polyfill elements with the \"data-ruffle-optout\" attribute.\n            return;\n        }\n        if (!isExtension) {\n            if (!elementWindow.RufflePlayer) {\n                const script = elementDocument.createElement(\"script\");\n                script.setAttribute(\"src\", jsScriptUrl);\n                script.onload = () => {\n                    // Inject parent configuration once the script is loaded, preventing it from being ignored.\n                    elementWindow.RufflePlayer = {};\n                    elementWindow.RufflePlayer.config = globalConfig;\n                };\n                elementDocument.head.appendChild(script);\n            }\n        }\n        else {\n            if (!elementWindow.RufflePlayer) {\n                elementWindow.RufflePlayer = {};\n            }\n            // Merge parent window and frame configurations, will likely be applied too late though.\n            elementWindow.RufflePlayer.config = Object.assign(Object.assign({}, globalConfig), ((_a = elementWindow.RufflePlayer.config) !== null && _a !== void 0 ? _a : {}));\n        }\n    });\n}\n/**\n * Listen for changes to the DOM.\n *\n */\nfunction initMutationObserver() {\n    const observer = new MutationObserver(function (mutationsList) {\n        // If any nodes were added, re-run the polyfill to detect any new instances.\n        const nodesAdded = mutationsList.some((mutation) => mutation.addedNodes.length > 0);\n        if (nodesAdded) {\n            polyfillFlashInstances();\n            polyfillFrames();\n        }\n    });\n    observer.observe(document, { childList: true, subtree: true });\n}\n/**\n * Polyfills the detection of Flash plugins in the browser.\n */\nexport function pluginPolyfill() {\n    installPlugin(FLASH_PLUGIN);\n}\n/**\n * Polyfills legacy Flash content on the page.\n *\n * @param isExt Whether or not Ruffle is running as a browser's extension.\n */\nexport function polyfill(isExt) {\n    isExtension = isExt;\n    polyfillFlashInstances();\n    polyfillFrames();\n    initMutationObserver();\n}\n","/**\n * A representation of a semver 2 compliant version string\n */\nexport class Version {\n    /**\n     * Construct a Version from specific components.\n     *\n     * If you wish to parse a string into a Version then please use [[fromSemver]].\n     *\n     * @param major The major version component.\n     * @param minor The minor version component.\n     * @param patch The patch version component.\n     * @param prIdent A list of pre-release identifiers, if any\n     * @param buildIdent A list of build identifiers, if any\n     */\n    constructor(major, minor, patch, prIdent, buildIdent) {\n        this.major = major;\n        this.minor = minor;\n        this.patch = patch;\n        this.prIdent = prIdent;\n        this.buildIdent = buildIdent;\n    }\n    /**\n     * Construct a version from a semver 2 compliant string.\n     *\n     * This function is intended for use with semver 2 compliant strings.\n     * Malformed strings may still parse correctly, but this result is not\n     * guaranteed.\n     *\n     * @param versionString A semver 2.0.0 compliant version string\n     * @returns A version object\n     */\n    static fromSemver(versionString) {\n        const buildSplit = versionString.split(\"+\"), prSplit = buildSplit[0].split(\"-\"), versionSplit = prSplit[0].split(\".\");\n        const major = parseInt(versionSplit[0], 10);\n        let minor = 0;\n        let patch = 0;\n        let prIdent = null;\n        let buildIdent = null;\n        if (versionSplit[1] != undefined) {\n            minor = parseInt(versionSplit[1], 10);\n        }\n        if (versionSplit[2] != undefined) {\n            patch = parseInt(versionSplit[2], 10);\n        }\n        if (prSplit[1] != undefined) {\n            prIdent = prSplit[1].split(\".\");\n        }\n        if (buildSplit[1] != undefined) {\n            buildIdent = buildSplit[1].split(\".\");\n        }\n        return new Version(major, minor, patch, prIdent, buildIdent);\n    }\n    /**\n     * Returns true if a given version is compatible with this one.\n     *\n     * Compatibility is defined as having the same nonzero major version\n     * number, or if both major versions are zero, the same nonzero minor\n     * version number, or if both minor versions are zero, the same nonzero\n     * patch version number.\n     *\n     * This implements the ^ operator in npm's semver package, with the\n     * exception of the prerelease exclusion rule.\n     *\n     * @param other The other version to test against\n     * @returns True if compatible\n     */\n    isCompatibleWith(other) {\n        return ((this.major !== 0 && this.major === other.major) ||\n            (this.major === 0 &&\n                other.major === 0 &&\n                this.minor !== 0 &&\n                this.minor === other.minor) ||\n            (this.major === 0 &&\n                other.major === 0 &&\n                this.minor === 0 &&\n                other.minor === 0 &&\n                this.patch !== 0 &&\n                this.patch === other.patch));\n    }\n    /**\n     * Returns true if this version has precedence over (is newer than) another\n     * version.\n     *\n     * Precedence is defined as in the Semver 2 spec. This implements the >\n     * operator in npm's semver package, with the exception of the prerelease\n     * exclusion rule.\n     *\n     * @param other The other version to test against\n     * @returns True if this version has precedence over the other one\n     */\n    hasPrecedenceOver(other) {\n        if (this.major > other.major) {\n            return true;\n        }\n        else if (this.major < other.major) {\n            return false;\n        }\n        if (this.minor > other.minor) {\n            return true;\n        }\n        else if (this.minor < other.minor) {\n            return false;\n        }\n        if (this.patch > other.patch) {\n            return true;\n        }\n        else if (this.patch < other.patch) {\n            return false;\n        }\n        if (this.prIdent == null && other.prIdent != null) {\n            return true;\n        }\n        else if (this.prIdent != null && other.prIdent != null) {\n            const isNumeric = /^[0-9]*$/;\n            for (let i = 0; i < this.prIdent.length && i < other.prIdent.length; i += 1) {\n                if (!isNumeric.test(this.prIdent[i]) &&\n                    isNumeric.test(other.prIdent[i])) {\n                    return true;\n                }\n                else if (isNumeric.test(this.prIdent[i]) &&\n                    isNumeric.test(other.prIdent[i])) {\n                    if (parseInt(this.prIdent[i], 10) >\n                        parseInt(other.prIdent[i], 10)) {\n                        return true;\n                    }\n                    else if (parseInt(this.prIdent[i], 10) <\n                        parseInt(other.prIdent[i], 10)) {\n                        return false;\n                    }\n                }\n                else if (isNumeric.test(this.prIdent[i]) &&\n                    !isNumeric.test(other.prIdent[i])) {\n                    return false;\n                }\n                else if (!isNumeric.test(this.prIdent[i]) &&\n                    !isNumeric.test(other.prIdent[i])) {\n                    if (this.prIdent[i] > other.prIdent[i]) {\n                        return true;\n                    }\n                    else if (this.prIdent[i] < other.prIdent[i]) {\n                        return false;\n                    }\n                }\n            }\n            return this.prIdent.length > other.prIdent.length;\n        }\n        return false;\n    }\n    /**\n     * Tests if a given version is equivalent to this one.\n     *\n     * Build and prerelease tags are ignored.\n     *\n     * @param other The other version to test against\n     * @returns True if the given version is equivalent\n     */\n    isEqual(other) {\n        return (this.major === other.major &&\n            this.minor === other.minor &&\n            this.patch === other.patch);\n    }\n    /**\n     * Tests if a given version is stable or a compatible prerelease for this\n     * version.\n     *\n     * This implements the prerelease exclusion rule of NPM semver: a\n     * prerelease version can only pass this check if the major/minor/patch\n     * components of both versions are the same. Otherwise, the prerelease\n     * version always fails.\n     *\n     * @param other The other version to test against\n     * @returns True if the given version is either stable, or a\n     * prerelease in the same series as this one.\n     */\n    isStableOrCompatiblePrerelease(other) {\n        if (other.prIdent == null) {\n            return true;\n        }\n        else {\n            return (this.major === other.major &&\n                this.minor === other.minor &&\n                this.patch === other.patch);\n        }\n    }\n}\n","import { Version } from \"./version\";\n/**\n * Represents a set of version requirements.\n */\nexport class VersionRange {\n    /**\n     * Constructs a range of versions as specified by the given requirements.\n     *\n     * If you wish to construct this object from a string representation,\n     * then use [[fromRequirementString]].\n     *\n     * @param requirements Requirements to set this range by\n     */\n    constructor(requirements) {\n        this.requirements = requirements;\n    }\n    /**\n     * Determine if a given version satisfies this range.\n     *\n     * @param fver A version object to test against.\n     * @returns Whether or not the given version matches this range\n     */\n    satisfiedBy(fver) {\n        for (let i = 0; i < this.requirements.length; i += 1) {\n            let matches = true;\n            for (let j = 0; j < this.requirements[i].length; j += 1) {\n                const comparator = this.requirements[i][j].comparator;\n                const version = this.requirements[i][j].version;\n                matches =\n                    matches && version.isStableOrCompatiblePrerelease(fver);\n                if (comparator === \"\" || comparator === \"=\") {\n                    matches = matches && version.isEqual(fver);\n                }\n                else if (comparator === \">\") {\n                    matches = matches && fver.hasPrecedenceOver(version);\n                }\n                else if (comparator === \">=\") {\n                    matches =\n                        matches &&\n                            (fver.hasPrecedenceOver(version) ||\n                                version.isEqual(fver));\n                }\n                else if (comparator === \"<\") {\n                    matches = matches && version.hasPrecedenceOver(fver);\n                }\n                else if (comparator === \"<=\") {\n                    matches =\n                        matches &&\n                            (version.hasPrecedenceOver(fver) ||\n                                version.isEqual(fver));\n                }\n                else if (comparator === \"^\") {\n                    matches = matches && version.isCompatibleWith(fver);\n                }\n            }\n            if (matches) {\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Parse a requirement string into a version range.\n     *\n     * @param requirement The version requirements, consisting of a\n     * series of space-separated strings, each one being a semver version\n     * optionally prefixed by a comparator or a separator.\n     *\n     * Valid comparators are:\n     * - `\"\"` or `\"=\"`: Precisely this version\n     * - `\">`\": A version newer than this one\n     * - `\">`=\": A version newer or equal to this one\n     * - `\"<\"`: A version older than this one\n     * - `\"<=\"`: A version older or equal to this one\n     * - `\"^\"`: A version that is compatible with this one\n     *\n     * A separator is `\"||`\" which splits the requirement string into\n     * left OR right.\n     * @returns A version range object.\n     */\n    static fromRequirementString(requirement) {\n        const components = requirement.split(\" \");\n        let set = [];\n        const requirements = [];\n        for (let i = 0; i < components.length; i += 1) {\n            if (components[i] === \"||\") {\n                if (set.length > 0) {\n                    requirements.push(set);\n                    set = [];\n                }\n            }\n            else if (components[i].length > 0) {\n                const match = /[0-9]/.exec(components[i]);\n                if (match) {\n                    const comparator = components[i]\n                        .slice(0, match.index)\n                        .trim();\n                    const version = Version.fromSemver(components[i].slice(match.index).trim());\n                    set.push({ comparator, version });\n                }\n            }\n        }\n        if (set.length > 0) {\n            requirements.push(set);\n        }\n        return new VersionRange(requirements);\n    }\n}\n","import { Version } from \"./version\";\nimport { VersionRange } from \"./version-range\";\n/**\n * Represents the Ruffle public API.\n *\n * The public API exists primarily to allow multiple installs of Ruffle on a\n * page (e.g. an extension install and a local one) to cooperate. In an ideal\n * situation, all Ruffle sources on the page install themselves into a single\n * public API, and then the public API picks the newest version by default.\n *\n * This API *is* versioned, in case we need to upgrade it. However, it must be\n * backwards- and forwards-compatible with all known sources.\n */\nexport class PublicAPI {\n    /**\n     * Construct the Ruffle public API.\n     *\n     * Do not use this function to negotiate a public API. Instead, use\n     * `public_api` to register your Ruffle source with an existing public API\n     * if it exists.\n     *\n     * Constructing a Public API will also trigger it to initialize Ruffle once\n     * the page loads, if the API has not already been superseded.\n     *\n     * @param prev What used to be in the public API slot.\n     *\n     * This is used to upgrade from a prior version of the public API, or from\n     * a user-defined configuration object placed in the public API slot.\n     * @protected\n     */\n    constructor(prev) {\n        this.sources = {};\n        this.config = {};\n        this.invoked = false;\n        this.newestName = null;\n        this.conflict = null;\n        if (prev !== undefined && prev !== null) {\n            if (prev instanceof PublicAPI) {\n                /// We're upgrading from a previous API to a new one.\n                this.sources = prev.sources;\n                this.config = prev.config;\n                this.invoked = prev.invoked;\n                this.conflict = prev.conflict;\n                this.newestName = prev.newestName;\n                prev.superseded();\n            }\n            else if (prev.constructor === Object &&\n                prev.config instanceof Object) {\n                /// We're the first, install user configuration\n                this.config = prev.config;\n            }\n            else {\n                /// We're the first, but conflicting with someone else.\n                this.conflict = prev;\n            }\n        }\n        if (document.readyState === \"loading\") {\n            window.addEventListener(\"DOMContentLoaded\", this.init.bind(this));\n        }\n        else {\n            window.setTimeout(this.init.bind(this), 0);\n        }\n    }\n    /**\n     * The version of the public API.\n     *\n     * This is *not* the version of Ruffle itself.\n     *\n     * This allows a page with an old version of the Public API to be upgraded\n     * to a new version of the API. The public API is intended to be changed\n     * very infrequently, if at all, but this provides an escape mechanism for\n     * newer Ruffle sources to upgrade older installations.\n     *\n     * @returns The version of this public API.\n     */\n    get version() {\n        return \"0.1.0\";\n    }\n    /**\n     * Register a given source with the Ruffle Public API.\n     *\n     * @param name The name of the source.\n     * @param api The public API object. This must conform to the shape\n     * of `SourceAPI`.\n     */\n    registerSource(name, api) {\n        this.sources[name] = api;\n    }\n    /**\n     * Determine the name of the newest registered source in the Public API.\n     *\n     * @returns The name of the source, or `null` if no source\n     * has yet to be registered.\n     */\n    newestSourceName() {\n        let newestName = null, newestVersion = Version.fromSemver(\"0.0.0\");\n        for (const k in this.sources) {\n            if (Object.prototype.hasOwnProperty.call(this.sources, k)) {\n                const kVersion = Version.fromSemver(this.sources[k].version);\n                if (kVersion.hasPrecedenceOver(newestVersion)) {\n                    newestName = k;\n                    newestVersion = kVersion;\n                }\n            }\n        }\n        return newestName;\n    }\n    /**\n     * Negotiate and start Ruffle.\n     *\n     * This function reads the config parameter to determine which polyfills\n     * should be enabled. If the configuration parameter is missing, then we\n     * use a built-in set of defaults sufficient to fool sites with static\n     * content and weak plugin detection.\n     */\n    init() {\n        if (!this.invoked) {\n            this.invoked = true;\n            this.newestName = this.newestSourceName();\n            if (this.newestName === null) {\n                throw new Error(\"No registered Ruffle source!\");\n            }\n            const polyfills = this.config.polyfills;\n            if (polyfills !== false) {\n                this.sources[this.newestName].polyfill(this.newestName === \"extension\");\n            }\n        }\n    }\n    /**\n     * Look up the newest Ruffle source and return it's API.\n     *\n     * @returns An instance of the Source API.\n     */\n    newest() {\n        const name = this.newestSourceName();\n        return name != null ? this.sources[name] : null;\n    }\n    /**\n     * Look up a specific Ruffle version (or any version satisfying a given set\n     * of requirements) and return it's API.\n     *\n     * @param ver_requirement A set of semantic version requirement\n     * strings that the player version must satisfy.\n     * @returns An instance of the Source API, if one or more\n     * sources satisfied the requirement.\n     */\n    satisfying(ver_requirement) {\n        const requirement = VersionRange.fromRequirementString(ver_requirement);\n        let valid = null;\n        for (const k in this.sources) {\n            if (Object.prototype.hasOwnProperty.call(this.sources, k)) {\n                const version = Version.fromSemver(this.sources[k].version);\n                if (requirement.satisfiedBy(version)) {\n                    valid = this.sources[k];\n                }\n            }\n        }\n        return valid;\n    }\n    /**\n     * Look up the newest Ruffle version compatible with the `local` source, if\n     * it's installed. Otherwise, use the latest version.\n     *\n     * @returns An instance of the Source API\n     */\n    localCompatible() {\n        if (this.sources.local !== undefined) {\n            return this.satisfying(\"^\" + this.sources.local.version);\n        }\n        else {\n            return this.newest();\n        }\n    }\n    /**\n     * Look up the newest Ruffle version with the exact same version as the\n     * `local` source, if it's installed. Otherwise, use the latest version.\n     *\n     * @returns An instance of the Source API\n     */\n    local() {\n        if (this.sources.local !== undefined) {\n            return this.satisfying(\"=\" + this.sources.local.version);\n        }\n        else {\n            return this.newest();\n        }\n    }\n    /**\n     * Indicates that this version of the public API has been superseded by a\n     * newer version.\n     *\n     * This should only be called by a newer version of the Public API.\n     * Identical versions of the Public API should not supersede older versions\n     * of that same API.\n     *\n     * Unfortunately, we can't disable polyfills after-the-fact, so this\n     * only lets you disable the init event...\n     *\n     * @protected\n     */\n    superseded() {\n        this.invoked = true;\n    }\n    /**\n     * Join a source into the public API, if it doesn't already exist.\n     *\n     * @param prevRuffle The previous iteration of the Ruffle API.\n     *\n     * The `prevRuffle` param lists the previous object in the RufflePlayer\n     * slot. We perform some checks to see if this is a Ruffle public API or a\n     * conflicting object. If this is conflicting, then a new public API will\n     * be constructed (see the constructor information for what happens to\n     * `prevRuffle`).\n     *\n     * Note that Public API upgrades are deliberately not enabled in this\n     * version of Ruffle, since there is no Public API to upgrade from.\n     * @param sourceName The name of this particular\n     * Ruffle source.\n     * @param sourceAPI The Ruffle source to add.\n     *\n     * If both parameters are provided they will be used to define a new Ruffle\n     * source to register with the public API.\n     * @returns The Ruffle Public API.\n     */\n    static negotiate(prevRuffle, sourceName, sourceAPI) {\n        let publicAPI;\n        if (prevRuffle instanceof PublicAPI) {\n            publicAPI = prevRuffle;\n        }\n        else {\n            publicAPI = new PublicAPI(prevRuffle);\n        }\n        if (sourceName !== undefined && sourceAPI !== undefined) {\n            publicAPI.registerSource(sourceName, sourceAPI);\n            // Install the faux plugin detection immediately.\n            // This is necessary because scripts such as SWFObject check for the\n            // Flash Player immediately when they load.\n            // TODO: Maybe there's a better place for this.\n            const polyfills = publicAPI.config.polyfills;\n            if (polyfills !== false) {\n                sourceAPI.pluginPolyfill();\n            }\n        }\n        return publicAPI;\n    }\n}\n","import { PublicAPI, SourceAPI, publicPath } from \"ruffle-core\";\n\nwindow.RufflePlayer = PublicAPI.negotiate(\n    window.RufflePlayer,\n    \"local\",\n    new SourceAPI(\"local\")\n);\n__webpack_public_path__ = publicPath(window.RufflePlayer.config, \"local\");\n","import { pluginPolyfill, polyfill } from \"./polyfills\";\nimport { registerElement } from \"./register-element\";\nimport { RufflePlayer } from \"./ruffle-player\";\n/**\n * Represents this particular version of Ruffle.\n *\n * Multiple APIs can be instantiated from different sources; e.g. an \"extension\"\n * version, versus a \"local\" version. This expresses to the Public API\n * negotiator (see [[PublicAPI]]) what this particular version of Ruffle is and\n * how to control it.\n */\nexport class SourceAPI {\n    /**\n     * Construct a Source API.\n     *\n     * @param name The name of this particular source.\n     */\n    constructor(name) {\n        this.name = name;\n    }\n    /**\n     * The version of this particular API.\n     *\n     * This is returned as a string in a semver compatible format.\n     *\n     * @returns The version of this Ruffle source\n     */\n    get version() {\n        return \"0.1.0\";\n    }\n    /**\n     * Start up the polyfills.\n     *\n     * Do not run polyfills for more than one Ruffle source at a time.\n     *\n     * @param isExt Whether or not Ruffle is running as a browser's extension.\n     */\n    polyfill(isExt) {\n        polyfill(isExt);\n    }\n    /**\n     * Polyfill the plugin detection.\n     *\n     * This needs to run before any plugin detection script does.\n     */\n    pluginPolyfill() {\n        pluginPolyfill();\n    }\n    /**\n     * Create a Ruffle player element using this particular version of Ruffle.\n     *\n     * @returns The player element. This is a DOM element that may be inserted\n     * into the current page as you wish.\n     */\n    createPlayer() {\n        const name = registerElement(\"ruffle-player\", RufflePlayer);\n        return document.createElement(name);\n    }\n}\n"],"sourceRoot":""}