-
Notifications
You must be signed in to change notification settings - Fork 14
/
index.js.map
1 lines (1 loc) · 290 KB
/
index.js.map
1
{"version":3,"sources":["webpack://ruffle-demo/./www/index.css","webpack://ruffle-demo/../node_modules/css-loader/dist/runtime/api.js","webpack://ruffle-demo/../node_modules/css-loader/dist/runtime/cssWithMappingToString.js","webpack://ruffle-demo/../core/pkg/ruffle_web_bg.wasm","webpack://ruffle-demo/../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://ruffle-demo/../core/pkg/ruffle-imports.js","webpack://ruffle-demo/../core/pkg/ruffle_web.js","webpack://ruffle-demo/../core/pkg/js-polyfills.js","webpack://ruffle-demo/../core/pkg/load-ruffle.js","webpack://ruffle-demo/../core/pkg/plugin-polyfill.js","webpack://ruffle-demo/../core/pkg/shadow-template.js","webpack://ruffle-demo/../core/pkg/register-element.js","webpack://ruffle-demo/../core/pkg/load-options.js","webpack://ruffle-demo/../core/pkg/ruffle-player.js","webpack://ruffle-demo/../core/pkg/ruffle-embed.js","webpack://ruffle-demo/../core/pkg/ruffle-object.js","webpack://ruffle-demo/../core/pkg/public-path.js","webpack://ruffle-demo/../core/pkg/polyfills.js","webpack://ruffle-demo/../core/pkg/version.js","webpack://ruffle-demo/../core/pkg/version-range.js","webpack://ruffle-demo/../core/pkg/public-api.js","webpack://ruffle-demo/../core/pkg/source-api.js","webpack://ruffle-demo/webpack/bootstrap","webpack://ruffle-demo/webpack/runtime/compat get default export","webpack://ruffle-demo/webpack/runtime/define property getters","webpack://ruffle-demo/webpack/runtime/global","webpack://ruffle-demo/webpack/runtime/hasOwnProperty shorthand","webpack://ruffle-demo/webpack/runtime/make namespace object","webpack://ruffle-demo/webpack/runtime/publicPath","webpack://ruffle-demo/./www/index.css?9991","webpack://ruffle-demo/./www/index.js"],"names":["___CSS_LOADER_EXPORT___","push","module","id","exports","cssWithMappingToString","list","toString","this","map","item","content","concat","join","i","modules","mediaQuery","dedupe","alreadyImportedModules","length","_i","_arrayLikeToArray","arr","len","arr2","Array","_item","isArray","_arrayWithHoles","Symbol","iterator","Object","_arr","_n","_d","_e","undefined","_s","next","done","value","err","_iterableToArrayLimit","o","minLen","n","prototype","call","slice","constructor","name","from","test","_unsupportedIterableToArray","TypeError","_nonIterableRest","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","data","sourceMapping","sourceURLs","sources","source","sourceRoot","memo","getTarget","target","styleTarget","document","querySelector","window","HTMLIFrameElement","contentDocument","head","e","stylesInDom","getIndexByIdentifier","identifier","result","modulesToDom","options","idCountMap","identifiers","base","count","index","obj","css","media","sourceMap","references","updater","addStyle","insertStyleElement","style","createElement","attributes","nonce","keys","forEach","key","setAttribute","insert","Error","appendChild","textStore","replaceText","replacement","filter","Boolean","applyToSingletonTag","remove","styleSheet","cssText","cssNode","createTextNode","childNodes","removeChild","insertBefore","applyToTag","removeAttribute","firstChild","singleton","singletonCounter","update","styleIndex","bind","parentNode","removeStyleElement","newObj","all","atob","lastIdentifiers","newList","newLastIdentifiers","_index","splice","copyToAudioBuffer","audioBuffer","leftData","rightData","getChannelData","set","lAudioContext","AudioContext","webkitAudioContext","wasm","heap","fill","getObject","idx","heap_next","takeObject","ret","dropObject","addHeapObject","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","decode","cachegetUint8Memory0","getUint8Memory0","buffer","memory","Uint8Array","getStringFromWasm0","ptr","subarray","WASM_VECTOR_LEN","cachedTextEncoder","TextEncoder","encodeString","encodeInto","arg","view","buf","encode","read","written","passStringToWasm0","malloc","realloc","mem","offset","code","charCodeAt","cachegetInt32Memory0","getInt32Memory0","Int32Array","isLikeNone","x","cachegetFloat64Memory0","debugString","val","type","description","debug","builtInMatches","exec","className","_","message","stack","makeMutClosure","arg0","arg1","dtor","f","state","a","b","cnt","real","args","__wbindgen_export_2","get","original","__wbg_adapter_32","_dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hcafb51350898a75b","__wbg_adapter_35","arg2","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h079e9286e5781cde","__wbg_adapter_38","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd7e66b2406f7cb9d","__wbg_adapter_41","__wbg_adapter_44","__wbg_adapter_47","__wbg_adapter_50","__wbg_adapter_53","__wbg_adapter_56","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hc24c451f4c610518","cachegetFloat32Memory0","getArrayF32FromWasm0","Float32Array","handleError","apply","arguments","__wbindgen_exn_store","stack_pointer","addBorrowedObject","cachegetUint32Memory0","getArrayU8FromWasm0","Ruffle","create","__wbg_ruffle_free","parent","js_player","config","ruffle_new","__wrap","movie_url","parameters","ptr0","__wbindgen_malloc","__wbindgen_realloc","len0","ruffle_stream_from","swf_data","ruffle_load_data","ruffle_play","ruffle_pause","ruffle_is_playing","ruffle_destroy","ptr1","array","Uint32Array","passArrayJsValueToWasm0","len1","ruffle_call_exposed_callback","observer","ruffle_set_trace_observer","ruffle_audio_context","async","init","input","replace","imports","wbg","__wbindgen_object_drop_ref","__wbindgen_object_clone_ref","__wbindgen_cb_drop","__wbindgen_string_new","__wbg_isFullscreen_96b85640554e160d","isFullscreen","__wbg_displayUnsupportedMessage_a8f81a8e054e5e91","displayUnsupportedMessage","__wbg_displayMessage_c57c20204892da2b","displayMessage","__wbg_new_df6e6ab7a65c4c4d","__wbg_panic_bbc809dd04a12c60","panic","__wbg_copyToAudioBuffer_58f244be94bac1d2","arg3","arg4","__wbindgen_is_function","__wbg_onCallbackAvailable_3a48fae397926c96","onCallbackAvailable","__wbg_onFSCommand_fb2f94653f71796e","onFSCommand","__wbindgen_number_new","__wbindgen_json_serialize","__wbg_new_59cb74e423758ede","__wbg_stack_558ba5917b466edd","__wbg_error_4bb6c2a97407129a","console","error","__wbindgen_free","__wbindgen_is_undefined","__wbg_instanceof_WebGl2RenderingContext_9818b789249374d3","WebGL2RenderingContext","__wbg_bindVertexArray_569f8b5466293fb0","bindVertexArray","__wbg_blitFramebuffer_4b472bb45062bd6e","arg5","arg6","arg7","arg8","arg9","arg10","blitFramebuffer","__wbg_createVertexArray_1f35f6d163bbae13","createVertexArray","__wbg_renderbufferStorageMultisample_0426ba65de4885db","renderbufferStorageMultisample","__wbg_texImage2D_79c0e000ef5e1b0a","texImage2D","__wbg_bindFramebuffer_4a37c2a7678c0994","bindFramebuffer","__wbg_bindRenderbuffer_203ad50a30ad3c0d","bindRenderbuffer","__wbg_bindTexture_f3ab6393f75a763f","bindTexture","__wbg_createFramebuffer_d01ac1b4f7c704e5","createFramebuffer","__wbg_createRenderbuffer_c008c3bb50dfff9d","createRenderbuffer","__wbg_createTexture_151a385cd028c893","createTexture","__wbg_deleteFramebuffer_acd92acda81356e9","deleteFramebuffer","__wbg_deleteRenderbuffer_b67ff9026d2be0fd","deleteRenderbuffer","__wbg_deleteTexture_125ab82d8330e268","deleteTexture","__wbg_framebufferRenderbuffer_5293612146bd869a","framebufferRenderbuffer","__wbg_framebufferTexture2D_5b8575bda5aeceeb","framebufferTexture2D","__wbg_getError_609a7fa815fd3d84","getError","__wbg_getParameter_be1e4b3ba2c0c339","getParameter","__wbg_texParameteri_6e7ba8c54bb639f2","texParameteri","__wbg_instanceof_Window_49f532f06a9786ee","Window","__wbg_document_c0366b39e4f4c89a","__wbg_location_c1e50a6e4c53d45c","location","__wbg_navigator_95ba9cd684cf90aa","navigator","__wbg_devicePixelRatio_268c49438a600d53","devicePixelRatio","__wbg_performance_87e4f3b6f966469f","performance","__wbg_localStorage_a6fd83fc300473fc","localStorage","__wbg_cancelAnimationFrame_60f9cf59ec1c0125","cancelAnimationFrame","__wbg_focus_ab7792954990fdb9","focus","__wbg_open_f355af0fd051a9d8","open","__wbg_requestAnimationFrame_ef0e2294dc8b1088","requestAnimationFrame","__wbg_fetch_f532e04b8fe49aa0","fetch","__wbg_destination_4b8bc48ce4ebcd6c","destination","__wbg_sampleRate_0d2637cc084b2eaf","sampleRate","__wbg_currentTime_1bc83619afbf9e72","currentTime","__wbg_new_2f70ca6da1976429","__wbg_suspend_ad6a97ee4bac3247","suspend","__wbg_createBuffer_48e051aa20c4ba3e","createBuffer","__wbg_createBufferSource_0e160528349a924b","createBufferSource","__wbg_createChannelMerger_8e8d29d53323df91","createChannelMerger","__wbg_createChannelSplitter_10fc5fe404818afc","createChannelSplitter","__wbg_createGain_a6211e4c615a1141","createGain","__wbg_createScriptProcessor_e755612398f80dd4","createScriptProcessor","__wbg_decodeAudioData_1a1e91ec5cd60d59","decodeAudioData","__wbg_resume_6dd89ae2f9b0bef3","resume","__wbg_setvalue_cc85088ad32e56b0","__wbg_linearRampToValueAtTime_02ce948b9b4323e0","linearRampToValueAtTime","__wbg_setValueAtTime_788b65cf85b7ba6a","setValueAtTime","__wbg_userAgent_b9c7a338061adca8","userAgent","__wbg_baseURI_1fe61dc0a39a61ed","baseURI","__wbg_appendChild_7c45aeccd496f2a5","__wbg_gain_688543a4eee1eece","gain","__wbg_protocol_791396029743ce88","protocol","__wbg_assign_8948549eb7c584b7","assign","__wbg_new_0af3e1641443f13d","Path2D","__wbg_addPath_0b9c6299797f0772","addPath","__wbg_closePath_6e9529e4d6da5e83","closePath","__wbg_lineTo_2157bf4d1b0ce0d3","lineTo","__wbg_moveTo_fb2215902520c649","moveTo","__wbg_quadraticCurveTo_9c392c57a794a2d2","quadraticCurveTo","__wbg_get_29a9ce40981b8710","__wbg_set_13ecdf3c7967382d","__wbg_delete_2c0adda5d0edea03","__wbg_length_da24898717a463e0","__wbg_setProperty_46b9bd1b0fad730b","setProperty","__wbg_offsetX_4bd8c9fcb457cf0b","offsetX","__wbg_offsetY_0dde12490e8ebfba","offsetY","__wbg_button_9e74bd912190b055","button","__wbg_instanceof_SvgsvgElement_aa3f79a2638c5f44","SVGSVGElement","__wbg_createSVGMatrix_9088b605b3cbb935","createSVGMatrix","__wbg_connect_607a0c51b546a3db","connect","__wbg_connect_a4236fe1b645b8fb","__wbg_connect_db97a7bc9cd258c6","__wbg_disconnect_1f5d0443b0bca9c8","disconnect","__wbg_outputBuffer_1fc843f5ddfd743b","outputBuffer","__wbg_setTransform_041d67e3d6972fd7","setTransform","__wbg_bindVertexArrayOES_17e98f43d896f40b","bindVertexArrayOES","__wbg_createVertexArrayOES_393e00fa6f931f59","createVertexArrayOES","__wbg_seta_6c309b33d9a4fb29","__wbg_setb_378147d7ba767ab1","__wbg_setc_cc36b264b7a1ae60","c","__wbg_setd_998c5989f5780653","d","__wbg_sete_42bf2f390f25e536","__wbg_setf_df5aef1469b0c50b","__wbg_deltaY_2722120e563d3160","deltaY","__wbg_deltaMode_3db3c9c4bedf191d","deltaMode","__wbg_setbuffer_8c396e74724eda12","__wbg_setloop_1e141edefc26db22","loop","__wbg_setloopStart_4162b0a533fbc0d5","loopStart","__wbg_setloopEnd_e81eb72ea2277d88","loopEnd","__wbg_setonended_f6f3e04e13c07db4","onended","__wbg_start_f5e66921db9afaee","start","__wbg_start_0237410bb20c6213","__wbg_stop_5765c7cac3ec1564","stop","__wbg_instanceof_HtmlFormElement_26283084b0956b17","HTMLFormElement","__wbg_submit_121b8e3bd960f229","submit","__wbg_pointerId_602db5c989b38cc0","pointerId","__wbg_instanceof_Response_f52c65c389890639","Response","__wbg_arrayBuffer_0ba17dfaad804b6f","arrayBuffer","__wbg_data_55e064fddf34cf3b","passArray8ToWasm0","__wbg_key_d9b602f48baca7bc","__wbg_code_cbf76ad384ae1179","__wbg_now_7628760b7b640632","now","__wbg_newwithstrandinit_11debb554792e043","Request","__wbg_setonaudioprocess_66d0b1fa0dd39606","onaudioprocess","__wbg_body_c8cb19d760637268","body","__wbg_createElement_99351c8bf0efac6e","__wbg_createElementNS_a7ef126eff5022c2","createElementNS","__wbg_setid_f33ce4e43b43f57a","__wbg_clientWidth_2c84a7ebc75dd4f0","clientWidth","__wbg_clientHeight_f56dfe03d1c42f3e","clientHeight","__wbg_querySelector_155b00165b78a12f","__wbg_releasePointerCapture_4b78cb9c51d4a539","releasePointerCapture","__wbg_setAttribute_e71b9086539f06a1","__wbg_setAttributeNS_a66240d5c750d0fa","setAttributeNS","__wbg_setPointerCapture_54ee987062d42d03","setPointerCapture","__wbg_remove_0639495587b1aaeb","__wbg_instanceof_WebGlRenderingContext_ef4e51c6e4133d85","WebGLRenderingContext","__wbg_drawingBufferWidth_fab3e20dd1ba5d4e","drawingBufferWidth","__wbg_drawingBufferHeight_31bc93d4dc3a0dcc","drawingBufferHeight","__wbg_bufferData_d47c8467e443121d","bufferData","__wbg_texImage2D_a4011abffe0229fb","__wbg_uniform1fv_cd9d2dea0641919d","uniform1fv","__wbg_uniform4fv_24ef46675c137552","uniform4fv","__wbg_uniformMatrix3fv_a0a261980af4587d","uniformMatrix3fv","__wbg_uniformMatrix4fv_088c96db8ee28c1d","uniformMatrix4fv","__wbg_activeTexture_a51ec6273de88bc6","activeTexture","__wbg_attachShader_0dd248f6ab98fcf2","attachShader","__wbg_bindBuffer_1ceb83e9674e812a","bindBuffer","__wbg_bindFramebuffer_d8f98d1a7f6d67d1","__wbg_bindRenderbuffer_1ba9206d5f319ae1","__wbg_bindTexture_6121e6db3f879582","__wbg_blendFunc_34a6bb31770822c5","blendFunc","__wbg_clear_f6b2dd48aeed2752","clear","__wbg_clearColor_89f7819aa9f80129","clearColor","__wbg_colorMask_88ebee15531b14ef","colorMask","__wbg_compileShader_28bdbafe4445d24b","compileShader","__wbg_createBuffer_acedc3831832a280","__wbg_createProgram_7e2f44b7b74694d4","createProgram","__wbg_createShader_64c474f1d1d0c1f8","createShader","__wbg_createTexture_0a156dab1efc3499","__wbg_disable_5b9c6f74d5efd3a5","disable","__wbg_disableVertexAttribArray_ba8f39ecd28c601b","disableVertexAttribArray","__wbg_drawElements_3eb5ba8a511ce0f0","drawElements","__wbg_enable_87f39f6396535e1f","enable","__wbg_enableVertexAttribArray_f29c8dde9c8c5cf5","enableVertexAttribArray","__wbg_getAttribLocation_ba61f837da80e249","getAttribLocation","__wbg_getExtension_c6863c255090d82f","getExtension","__wbg_getParameter_ff687a6ea303e551","__wbg_getProgramInfoLog_aacf06c959070653","getProgramInfoLog","__wbg_getProgramParameter_a89bf14502c109f7","getProgramParameter","__wbg_getShaderInfoLog_1eb885f2468e2429","getShaderInfoLog","__wbg_getUniformLocation_ca853de4f2f9270d","getUniformLocation","__wbg_linkProgram_46a36cb158f10676","linkProgram","__wbg_pixelStorei_31f6dc244bf4cd5b","pixelStorei","__wbg_shaderSource_700ae72fca39850d","shaderSource","__wbg_stencilFunc_cc85d77d2098446b","stencilFunc","__wbg_stencilMask_ed2cded2c2b0b72c","stencilMask","__wbg_stencilOp_1b3529546c1fdcc2","stencilOp","__wbg_texParameteri_e45f3977eb998137","__wbg_uniform1f_3eb09312a513b94a","uniform1f","__wbg_uniform1i_e76b668973ae0655","uniform1i","__wbg_useProgram_d63a57db0571e803","useProgram","__wbg_vertexAttribPointer_b4b829a4f5a3778e","vertexAttribPointer","__wbg_viewport_54305c74f5668b33","viewport","__wbg_debug_146b863607d79e9d","__wbg_error_e325755affc8634b","__wbg_info_d60054f760c729cc","info","__wbg_log_f2e13ca55da8bad3","log","__wbg_warn_9e92ccdc67085e1b","warn","__wbg_style_9b773f0fc441eddc","__wbg_newwithbuffersourcesequenceandoptions_03294a518a0bd99a","Blob","__wbg_currentTarget_b545d0d803b3a62e","currentTarget","__wbg_preventDefault_9aab6c264e5df3ee","preventDefault","__wbg_addEventListener_6a37bc32387cb66d","addEventListener","__wbg_addEventListener_a422088e686210b5","__wbg_addEventListener_50b4229556ab0b83","__wbg_removeEventListener_70dfb387da1982ac","removeEventListener","__wbg_removeEventListener_4448b273b47328f8","__wbg_instanceof_HtmlCanvasElement_7bd3ee7838f11fc3","HTMLCanvasElement","__wbg_width_0efa4604d41c58c5","width","__wbg_setwidth_1d0e975feecff3ef","__wbg_height_aa24e3fef658c4a8","height","__wbg_setheight_7758ee3ff5c65474","__wbg_getContext_3db9399e6dc524ff","getContext","__wbg_getContext_93be69215ea9dbbf","__wbg_setsrc_ca894d724570195d","src","__wbg_new_1f2ded01c889cd38","Image","__wbg_newwithwidthandheight_0f3a13502ca94c49","__wbg_instanceof_CanvasRenderingContext2d_1d38418d1d6c8b34","CanvasRenderingContext2D","__wbg_setglobalAlpha_b4134dbd884b4d37","globalAlpha","__wbg_setglobalCompositeOperation_557a59a0ccf673d6","globalCompositeOperation","__wbg_setstrokeStyle_7f507e0d838e3dcf","strokeStyle","__wbg_setfillStyle_bbe97cb93eb1b55c","fillStyle","__wbg_setfilter_df75805bea0a8415","__wbg_setlineWidth_61de9d1eb4e9f8a6","lineWidth","__wbg_setlineCap_bff1a8858c9f067e","lineCap","__wbg_setlineJoin_de47815c918d7874","lineJoin","__wbg_setmiterLimit_84b1a1dbddcd456a","miterLimit","__wbg_drawImage_b8dec9034bf1d116","drawImage","__wbg_drawImage_801ad094f4734689","__wbg_fill_6c721ab8eec90f70","__wbg_stroke_e25cf47e0d9a36c3","stroke","__wbg_createPattern_006b6402db95df36","createPattern","__wbg_getImageData_dd3caac873bf461f","getImageData","__wbg_clearRect_6af85454d06df5fa","clearRect","__wbg_fillRect_c79d1b386c04efed","fillRect","__wbg_resetTransform_f78edb82fd1f7239","resetTransform","__wbg_setTransform_5f5f19301b76a8d6","__wbg_get_5fa3f454aa041e6e","__wbg_next_373211328013f949","__wbg_done_49c598117f977077","__wbg_value_c9ae6368b110a068","__wbg_get_85e0a3b459845fe2","Reflect","__wbg_call_951bd0c6d815d6f1","__wbg_new_9dff83a08f5994f3","__wbg_isArray_cf56c8363b1b35d9","__wbg_of_3a4bb382824dd437","of","__wbg_push_3ddd8187ff2ff82d","__wbg_instanceof_ArrayBuffer_3a0fa134e6809d57","ArrayBuffer","__wbg_new_24c0ca5f23ee2dd9","__wbg_slice_a498e5bb17f253f3","__wbg_values_f28e313e2260a03a","values","__wbg_newnoargs_7c6bd521992b4022","Function","__wbg_apply_4e68243803368d89","__wbg_call_bf745b1758bb6693","__wbg_getTime_cf686ab22ab03a3e","getTime","__wbg_getTimezoneOffset_b9f3c4664b1a35ae","getTimezoneOffset","__wbg_new0_abd359df4aeb5b55","Date","__wbg_instanceof_Object_cdaa71ad2ca2f4c5","__wbg_entries_7144a7309b22df64","entries","__wbg_fromEntries_cc1186a09f1ec7f2","fromEntries","__wbg_is_049b1aece40b5301","is","__wbg_new_ba07d0daa0e4677e","__wbg_resolve_6e61e640925a0db9","Promise","resolve","__wbg_then_dd3785597974798a","then","__wbg_then_0f957e0f4c3e537a","__wbg_self_6baf3a3aa7b63415","self","__wbg_window_63fc4027b66c265b","__wbg_globalThis_513fb247e8e4e6d2","globalThis","__wbg_global_b87245cd886d7113","g","global","__wbg_buffer_3f12a1c608c6d04e","__wbg_newwithbyteoffsetandlength_4c51342f87299c5a","__wbg_length_c645e7c02233b440","__wbg_new_c6c0228e6d22a2f9","__wbg_set_b91afac9fd216d99","__wbg_fill_f49407f577541856","__wbg_buffer_c385539cb4060297","__wbg_byteLength_11e6bdc2fac53a3c","byteLength","__wbg_byteOffset_5db4e07752c85395","byteOffset","__wbg_ownKeys_d44c25f33e28bfab","ownKeys","__wbg_set_9bdd413385146137","__wbindgen_number_get","Float64Array","__wbindgen_string_get","__wbindgen_boolean_get","v","__wbindgen_debug_string","__wbindgen_throw","__wbindgen_rethrow","__wbindgen_memory","__wbindgen_closure_wrapper1217","__wbindgen_closure_wrapper1219","__wbindgen_closure_wrapper1221","__wbindgen_closure_wrapper1223","__wbindgen_closure_wrapper1225","__wbindgen_closure_wrapper1227","__wbindgen_closure_wrapper1229","__wbindgen_closure_wrapper1231","__wbindgen_closure_wrapper1729","URL","instance","WebAssembly","instantiateStreaming","headers","bytes","instantiate","Instance","load","__wbindgen_wasm_module","isNativeFunction","func","indexOf","lastLoaded","loadRuffle","thisArg","_arguments","generator","reduce","defineProperty","Prototype","Version","callback","k","ruffleWasm","default","P","reject","fulfilled","step","rejected","fetchRuffle","RuffleMimeTypeArray","native_mimetype_array","__mimetypes","__named_mimetypes","install","mimetype","RufflePlugin","filename","mimetypes","super","RufflePluginArray","native_plugin_array","__plugins","__named_plugins","plugin","FLASH_PLUGIN","installPlugin","plugins","writable","mimeTypes","suffixes","enabledPlugin","ruffleShadowTemplate","innerHTML","privateRegistry","lookupElement","elementName","internalName","class","registerElement","elementClass","tries","externalName","customElements","define","AutoPlay","Letterbox","UnmuteOverlay","LogLevel","FLASH_MIMETYPE","FUTURESPLASH_MIMETYPE","FLASH7_AND_8_MIMETYPE","FLASH_MOVIE_MIMETYPE","FLASH_ACTIVEX_CLASSID","RUFFLE_ORIGIN","DIMENSION_REGEX","PanicError","sanitizeParameters","URLSearchParams","output","RufflePlayer","HTMLElement","hasContextMenu","panicked","shadow","attachShadow","mode","cloneNode","dynamicStyles","getElementById","container","playButton","playButtonClicked","unmuteOverlay","unmuteOverlayClicked","contextMenuElement","showContextMenu","hideContextMenu","_trace_observer","ruffleConstructor","lastActivePlayingState","setupPauseOnTabHidden","hidden","is_playing","pause","play","updateStyles","_oldValue","_newValue","destroy","sheet","rules","deleteRule","widthAttr","getNamedItem","htmlDimensionToCssDimension","insertRule","heightAttr","element","nodeName","_a","catch","ruffleIndexError","FileProtocol","WasmNotFound","String","toLowerCase","includes","WasmMimeType","WasmCors","JavascriptConflict","audioState","visibility","setTimeout","autoplay","Auto","unmuteVisibility","Visible","On","display","node","audioContext","audio_context","onstatechange","_b","optionsError","url","JavascriptConfiguration","isConnected","isUnusedFallbackObject","allowScriptAccess","contextMenu","backgroundColor","ensureFreshInstance","swfUrl","href","_c","substring","stream_from","load_data","fullscreenEnabled","webkitFullscreenEnabled","fullscreenElement","webkitFullscreenElement","requestFullscreen","webkitRequestFullScreen","exitFullscreen","webkitCancelFullScreen","items","text","onClick","enterFullscreen","separator","contextMenuItems","menuItem","textContent","menuSeparator","hr","left","top","rect","getBoundingClientRect","clientX","y","clientY","maxX","maxY","Math","floor","min","elem","attrib","specified","children","attribute","match","out","call_exposed_callback","set_trace_observer","errorIndex","Unknown","errorArray","stackIndex","debugPlayerInfo","platform","errorText","pageUrl","split","errorBody","errorFooter","issueLink","issueBody","viewDetails","onclick","panicBody","classList","add","div","prepend","isScriptAccessAllowed","access","origin","isSwfFilename","pathname","extension","RuffleEmbed","connectedCallback","srcval","attr","createAttribute","setNamedItem","removeNamedItem","oldValue","newValue","attributeChangedCallback","flashvars","getAttribute","ruffleObj","copyElement","findCaseInsensitive","defaultValue","hasOwnProperty","paramsOf","params","param","HTMLParamElement","RuffleObject","movie","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","pluginPolyfill","polyfill","isExt","MutationObserver","mutationsList","mutation","addedNodes","observe","childList","subtree","major","minor","patch","prIdent","buildIdent","versionString","buildSplit","prSplit","versionSplit","parseInt","other","isNumeric","VersionRange","requirements","fver","matches","j","comparator","version","isStableOrCompatiblePrerelease","isEqual","hasPrecedenceOver","isCompatibleWith","requirement","components","trim","fromSemver","PublicAPI","prev","invoked","newestName","conflict","superseded","api","newestVersion","kVersion","newestSourceName","polyfills","ver_requirement","fromRequirementString","valid","satisfiedBy","local","satisfying","newest","prevRuffle","sourceName","sourceAPI","publicAPI","registerSource","SourceAPI","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","enumerable","prop","r","toStringTag","p","ruffle","player","negotiate","main","overlay","authorContainer","author","sampleFileInputContainer","sampleFileInput","localFileInput","animOptGroup","gamesOptGroup","letterbox","logLevel","ensurePlayer","createPlayer","append","selectedIndex","loadFile","file","loadSample","swfData","authorLink","event","files","stopPropagation","dataTransfer","response","ok","json","swfs","option","title","initialFile","searchParams","max","findIndex"],"mappings":"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","file":"index.js","sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":root {\\n --ruffle-blue: #37528c;\\n --ruffle-orange: #ffad33;\\n}\\n\\nbody {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n padding: 0;\\n margin: 0;\\n font-family: \\\"Lato\\\", sans-serif;\\n display: flex;\\n flex-flow: column;\\n background: black;\\n}\\n\\n#main {\\n position: relative;\\n flex: 1;\\n}\\n\\n#overlay {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n z-index: 1;\\n pointer-events: none;\\n border: 8px dashed var(--ruffle-orange);\\n border-radius: 30px;\\n opacity: 0;\\n transition: opacity 0.3s ease-in;\\n display: none;\\n margin: 10px 5px;\\n}\\n\\n#overlay.drag {\\n opacity: 1;\\n transition-timing-function: ease-out;\\n}\\n\\n#prompt {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n color: var(--ruffle-orange);\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n font-size: large;\\n}\\n\\n#player {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n width: auto;\\n height: auto;\\n margin: 10px 0;\\n}\\n\\n#nav {\\n width: 100%;\\n background: var(--ruffle-blue);\\n box-shadow: 0 3px 6px 5px var(--ruffle-blue);\\n display: flex;\\n align-items: center;\\n justify-content: space-around;\\n color: white;\\n padding: 10px 0 5px 0;\\n margin-bottom: 5px;\\n}\\n\\n#title {\\n transition: opacity 0.5s;\\n}\\n\\n#title:hover {\\n opacity: 0.5;\\n}\\n\\n#title img {\\n height: 32px;\\n}\\n\\n#file-picker select,\\n#file-picker input,\\n#author {\\n margin-left: 5px;\\n}\\n\\n#local-file-container {\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\\n#sample-swfs-container {\\n display: none;\\n vertical-align: middle;\\n}\\n\\n#author-container {\\n display: none;\\n font-size: small;\\n}\\n\\n#author {\\n color: var(--ruffle-orange);\\n}\\n\\n@media only screen and (max-width: 800px) {\\n #local-file-container,\\n #sample-swfs-container {\\n display: block;\\n }\\n}\\n\\n@media only screen and (max-width: 600px) {\\n #local-file-container {\\n display: none;\\n }\\n\\n #sample-swfs-label {\\n display: none;\\n }\\n\\n #author-container {\\n font-size: 12px;\\n text-align: center;\\n }\\n\\n #nav {\\n flex-flow: column;\\n }\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./www/index.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,sBAAsB;IACtB,wBAAwB;AAC5B;;AAEA;IACI,kBAAkB;IAClB,MAAM;IACN,SAAS;IACT,OAAO;IACP,QAAQ;IACR,UAAU;IACV,SAAS;IACT,+BAA+B;IAC/B,aAAa;IACb,iBAAiB;IACjB,iBAAiB;AACrB;;AAEA;IACI,kBAAkB;IAClB,OAAO;AACX;;AAEA;IACI,kBAAkB;IAClB,MAAM;IACN,SAAS;IACT,OAAO;IACP,QAAQ;IACR,UAAU;IACV,oBAAoB;IACpB,uCAAuC;IACvC,mBAAmB;IACnB,UAAU;IACV,gCAAgC;IAChC,aAAa;IACb,gBAAgB;AACpB;;AAEA;IACI,UAAU;IACV,oCAAoC;AACxC;;AAEA;IACI,kBAAkB;IAClB,MAAM;IACN,SAAS;IACT,OAAO;IACP,QAAQ;IACR,2BAA2B;IAC3B,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,gBAAgB;AACpB;;AAEA;IACI,kBAAkB;IAClB,MAAM;IACN,SAAS;IACT,OAAO;IACP,QAAQ;IACR,WAAW;IACX,YAAY;IACZ,cAAc;AAClB;;AAEA;IACI,WAAW;IACX,8BAA8B;IAC9B,4CAA4C;IAC5C,aAAa;IACb,mBAAmB;IACnB,6BAA6B;IAC7B,YAAY;IACZ,qBAAqB;IACrB,kBAAkB;AACtB;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI,YAAY;AAChB;;AAEA;;;IAGI,gBAAgB;AACpB;;AAEA;IACI,qBAAqB;IACrB,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,gBAAgB;AACpB;;AAEA;IACI,2BAA2B;AAC/B;;AAEA;IACI;;QAEI,cAAc;IAClB;AACJ;;AAEA;IACI;QACI,aAAa;IACjB;;IAEA;QACI,aAAa;IACjB;;IAEA;QACI,eAAe;QACf,kBAAkB;IACtB;;IAEA;QACI,iBAAiB;IACrB;AACJ\",\"sourcesContent\":[\":root {\\n --ruffle-blue: #37528c;\\n --ruffle-orange: #ffad33;\\n}\\n\\nbody {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n padding: 0;\\n margin: 0;\\n font-family: \\\"Lato\\\", sans-serif;\\n display: flex;\\n flex-flow: column;\\n background: black;\\n}\\n\\n#main {\\n position: relative;\\n flex: 1;\\n}\\n\\n#overlay {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n z-index: 1;\\n pointer-events: none;\\n border: 8px dashed var(--ruffle-orange);\\n border-radius: 30px;\\n opacity: 0;\\n transition: opacity 0.3s ease-in;\\n display: none;\\n margin: 10px 5px;\\n}\\n\\n#overlay.drag {\\n opacity: 1;\\n transition-timing-function: ease-out;\\n}\\n\\n#prompt {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n color: var(--ruffle-orange);\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n font-size: large;\\n}\\n\\n#player {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n width: auto;\\n height: auto;\\n margin: 10px 0;\\n}\\n\\n#nav {\\n width: 100%;\\n background: var(--ruffle-blue);\\n box-shadow: 0 3px 6px 5px var(--ruffle-blue);\\n display: flex;\\n align-items: center;\\n justify-content: space-around;\\n color: white;\\n padding: 10px 0 5px 0;\\n margin-bottom: 5px;\\n}\\n\\n#title {\\n transition: opacity 0.5s;\\n}\\n\\n#title:hover {\\n opacity: 0.5;\\n}\\n\\n#title img {\\n height: 32px;\\n}\\n\\n#file-picker select,\\n#file-picker input,\\n#author {\\n margin-left: 5px;\\n}\\n\\n#local-file-container {\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\\n#sample-swfs-container {\\n display: none;\\n vertical-align: middle;\\n}\\n\\n#author-container {\\n display: none;\\n font-size: small;\\n}\\n\\n#author {\\n color: var(--ruffle-orange);\\n}\\n\\n@media only screen and (max-width: 800px) {\\n #local-file-container,\\n #sample-swfs-container {\\n display: block;\\n }\\n}\\n\\n@media only screen and (max-width: 600px) {\\n #local-file-container {\\n display: none;\\n }\\n\\n #sample-swfs-label {\\n display: none;\\n }\\n\\n #author-container {\\n font-size: 12px;\\n text-align: center;\\n }\\n\\n #nav {\\n flex-flow: column;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === \"string\") {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, \"\"]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (typeof btoa === \"function\") {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};","export default __webpack_public_path__ + \"dd280c8a7aa464beeccc78df18fd16df.wasm\";","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\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","import { copyToAudioBuffer } from './ruffle-imports.js';\n\nconst lAudioContext = (typeof AudioContext !== 'undefined' ? AudioContext : webkitAudioContext);\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\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 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\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_32(arg0, arg1) {\n wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hcafb51350898a75b(arg0, arg1);\n}\n\nfunction __wbg_adapter_35(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h079e9286e5781cde(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_38(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd7e66b2406f7cb9d(arg0, arg1, arg2);\n}\n\nfunction __wbg_adapter_41(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h079e9286e5781cde(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_44(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h079e9286e5781cde(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_47(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h079e9286e5781cde(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_50(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h079e9286e5781cde(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_53(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h079e9286e5781cde(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_56(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hc24c451f4c610518(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 free() {\n const ptr = this.ptr;\n this.ptr = 0;\n\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 */\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\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\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 = import.meta.url.replace(/\\.js$/, '_bg.wasm');\n }\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbindgen_object_drop_ref = function(arg0) {\n takeObject(arg0);\n };\n imports.wbg.__wbindgen_object_clone_ref = function(arg0) {\n var ret = getObject(arg0);\n return addHeapObject(ret);\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.__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.__wbindgen_is_function = function(arg0) {\n var ret = typeof(getObject(arg0)) === 'function';\n return ret;\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.__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.__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_9818b789249374d3 = function(arg0) {\n var ret = getObject(arg0) instanceof WebGL2RenderingContext;\n return ret;\n };\n imports.wbg.__wbg_bindVertexArray_569f8b5466293fb0 = function(arg0, arg1) {\n getObject(arg0).bindVertexArray(getObject(arg1));\n };\n imports.wbg.__wbg_blitFramebuffer_4b472bb45062bd6e = 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_1f35f6d163bbae13 = function(arg0) {\n var ret = getObject(arg0).createVertexArray();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_renderbufferStorageMultisample_0426ba65de4885db = function(arg0, arg1, arg2, arg3, arg4, arg5) {\n getObject(arg0).renderbufferStorageMultisample(arg1 >>> 0, arg2, arg3 >>> 0, arg4, arg5);\n };\n imports.wbg.__wbg_texImage2D_79c0e000ef5e1b0a = 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_4a37c2a7678c0994 = function(arg0, arg1, arg2) {\n getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_bindRenderbuffer_203ad50a30ad3c0d = function(arg0, arg1, arg2) {\n getObject(arg0).bindRenderbuffer(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_bindTexture_f3ab6393f75a763f = function(arg0, arg1, arg2) {\n getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_createFramebuffer_d01ac1b4f7c704e5 = function(arg0) {\n var ret = getObject(arg0).createFramebuffer();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_createRenderbuffer_c008c3bb50dfff9d = function(arg0) {\n var ret = getObject(arg0).createRenderbuffer();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_createTexture_151a385cd028c893 = function(arg0) {\n var ret = getObject(arg0).createTexture();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_deleteFramebuffer_acd92acda81356e9 = function(arg0, arg1) {\n getObject(arg0).deleteFramebuffer(getObject(arg1));\n };\n imports.wbg.__wbg_deleteRenderbuffer_b67ff9026d2be0fd = function(arg0, arg1) {\n getObject(arg0).deleteRenderbuffer(getObject(arg1));\n };\n imports.wbg.__wbg_deleteTexture_125ab82d8330e268 = function(arg0, arg1) {\n getObject(arg0).deleteTexture(getObject(arg1));\n };\n imports.wbg.__wbg_framebufferRenderbuffer_5293612146bd869a = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).framebufferRenderbuffer(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4));\n };\n imports.wbg.__wbg_framebufferTexture2D_5b8575bda5aeceeb = 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_609a7fa815fd3d84 = function(arg0) {\n var ret = getObject(arg0).getError();\n return ret;\n };\n imports.wbg.__wbg_getParameter_be1e4b3ba2c0c339 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).getParameter(arg1 >>> 0);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_texParameteri_6e7ba8c54bb639f2 = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3);\n };\n imports.wbg.__wbg_instanceof_Window_49f532f06a9786ee = function(arg0) {\n var ret = getObject(arg0) instanceof Window;\n return ret;\n };\n imports.wbg.__wbg_document_c0366b39e4f4c89a = function(arg0) {\n var ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_location_c1e50a6e4c53d45c = function(arg0) {\n var ret = getObject(arg0).location;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_navigator_95ba9cd684cf90aa = function(arg0) {\n var ret = getObject(arg0).navigator;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_devicePixelRatio_268c49438a600d53 = function(arg0) {\n var ret = getObject(arg0).devicePixelRatio;\n return ret;\n };\n imports.wbg.__wbg_performance_87e4f3b6f966469f = function(arg0) {\n var ret = getObject(arg0).performance;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_localStorage_a6fd83fc300473fc = handleError(function(arg0) {\n var ret = getObject(arg0).localStorage;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n });\n imports.wbg.__wbg_cancelAnimationFrame_60f9cf59ec1c0125 = handleError(function(arg0, arg1) {\n getObject(arg0).cancelAnimationFrame(arg1);\n });\n imports.wbg.__wbg_focus_ab7792954990fdb9 = handleError(function(arg0) {\n getObject(arg0).focus();\n });\n imports.wbg.__wbg_open_f355af0fd051a9d8 = 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_ef0e2294dc8b1088 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).requestAnimationFrame(getObject(arg1));\n return ret;\n });\n imports.wbg.__wbg_fetch_f532e04b8fe49aa0 = function(arg0, arg1) {\n var ret = getObject(arg0).fetch(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_destination_4b8bc48ce4ebcd6c = function(arg0) {\n var ret = getObject(arg0).destination;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_sampleRate_0d2637cc084b2eaf = function(arg0) {\n var ret = getObject(arg0).sampleRate;\n return ret;\n };\n imports.wbg.__wbg_currentTime_1bc83619afbf9e72 = function(arg0) {\n var ret = getObject(arg0).currentTime;\n return ret;\n };\n imports.wbg.__wbg_new_2f70ca6da1976429 = handleError(function() {\n var ret = new lAudioContext();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_suspend_ad6a97ee4bac3247 = handleError(function(arg0) {\n var ret = getObject(arg0).suspend();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createBuffer_48e051aa20c4ba3e = 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_0e160528349a924b = handleError(function(arg0) {\n var ret = getObject(arg0).createBufferSource();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createChannelMerger_8e8d29d53323df91 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).createChannelMerger(arg1 >>> 0);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createChannelSplitter_10fc5fe404818afc = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).createChannelSplitter(arg1 >>> 0);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createGain_a6211e4c615a1141 = handleError(function(arg0) {\n var ret = getObject(arg0).createGain();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createScriptProcessor_e755612398f80dd4 = 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_1a1e91ec5cd60d59 = 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_6dd89ae2f9b0bef3 = handleError(function(arg0) {\n var ret = getObject(arg0).resume();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_setvalue_cc85088ad32e56b0 = function(arg0, arg1) {\n getObject(arg0).value = arg1;\n };\n imports.wbg.__wbg_linearRampToValueAtTime_02ce948b9b4323e0 = handleError(function(arg0, arg1, arg2) {\n var ret = getObject(arg0).linearRampToValueAtTime(arg1, arg2);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_setValueAtTime_788b65cf85b7ba6a = handleError(function(arg0, arg1, arg2) {\n var ret = getObject(arg0).setValueAtTime(arg1, arg2);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_userAgent_b9c7a338061adca8 = 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_baseURI_1fe61dc0a39a61ed = 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_7c45aeccd496f2a5 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).appendChild(getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_gain_688543a4eee1eece = function(arg0) {\n var ret = getObject(arg0).gain;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_protocol_791396029743ce88 = 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_8948549eb7c584b7 = handleError(function(arg0, arg1, arg2) {\n getObject(arg0).assign(getStringFromWasm0(arg1, arg2));\n });\n imports.wbg.__wbg_new_0af3e1641443f13d = handleError(function() {\n var ret = new Path2D();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_addPath_0b9c6299797f0772 = function(arg0, arg1, arg2) {\n getObject(arg0).addPath(getObject(arg1), getObject(arg2));\n };\n imports.wbg.__wbg_closePath_6e9529e4d6da5e83 = function(arg0) {\n getObject(arg0).closePath();\n };\n imports.wbg.__wbg_lineTo_2157bf4d1b0ce0d3 = function(arg0, arg1, arg2) {\n getObject(arg0).lineTo(arg1, arg2);\n };\n imports.wbg.__wbg_moveTo_fb2215902520c649 = function(arg0, arg1, arg2) {\n getObject(arg0).moveTo(arg1, arg2);\n };\n imports.wbg.__wbg_quadraticCurveTo_9c392c57a794a2d2 = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).quadraticCurveTo(arg1, arg2, arg3, arg4);\n };\n imports.wbg.__wbg_get_29a9ce40981b8710 = 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_13ecdf3c7967382d = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0)[getStringFromWasm0(arg1, arg2)] = getStringFromWasm0(arg3, arg4);\n });\n imports.wbg.__wbg_delete_2c0adda5d0edea03 = handleError(function(arg0, arg1, arg2) {\n delete getObject(arg0)[getStringFromWasm0(arg1, arg2)];\n });\n imports.wbg.__wbg_length_da24898717a463e0 = function(arg0) {\n var ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbg_setProperty_46b9bd1b0fad730b = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).setProperty(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n });\n imports.wbg.__wbg_offsetX_4bd8c9fcb457cf0b = function(arg0) {\n var ret = getObject(arg0).offsetX;\n return ret;\n };\n imports.wbg.__wbg_offsetY_0dde12490e8ebfba = function(arg0) {\n var ret = getObject(arg0).offsetY;\n return ret;\n };\n imports.wbg.__wbg_button_9e74bd912190b055 = function(arg0) {\n var ret = getObject(arg0).button;\n return ret;\n };\n imports.wbg.__wbg_instanceof_SvgsvgElement_aa3f79a2638c5f44 = function(arg0) {\n var ret = getObject(arg0) instanceof SVGSVGElement;\n return ret;\n };\n imports.wbg.__wbg_createSVGMatrix_9088b605b3cbb935 = function(arg0) {\n var ret = getObject(arg0).createSVGMatrix();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_connect_607a0c51b546a3db = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).connect(getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_connect_a4236fe1b645b8fb = 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_db97a7bc9cd258c6 = 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_1f5d0443b0bca9c8 = handleError(function(arg0) {\n getObject(arg0).disconnect();\n });\n imports.wbg.__wbg_outputBuffer_1fc843f5ddfd743b = handleError(function(arg0) {\n var ret = getObject(arg0).outputBuffer;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_setTransform_041d67e3d6972fd7 = function(arg0, arg1) {\n getObject(arg0).setTransform(getObject(arg1));\n };\n imports.wbg.__wbg_bindVertexArrayOES_17e98f43d896f40b = function(arg0, arg1) {\n getObject(arg0).bindVertexArrayOES(getObject(arg1));\n };\n imports.wbg.__wbg_createVertexArrayOES_393e00fa6f931f59 = function(arg0) {\n var ret = getObject(arg0).createVertexArrayOES();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_seta_6c309b33d9a4fb29 = function(arg0, arg1) {\n getObject(arg0).a = arg1;\n };\n imports.wbg.__wbg_setb_378147d7ba767ab1 = function(arg0, arg1) {\n getObject(arg0).b = arg1;\n };\n imports.wbg.__wbg_setc_cc36b264b7a1ae60 = function(arg0, arg1) {\n getObject(arg0).c = arg1;\n };\n imports.wbg.__wbg_setd_998c5989f5780653 = function(arg0, arg1) {\n getObject(arg0).d = arg1;\n };\n imports.wbg.__wbg_sete_42bf2f390f25e536 = function(arg0, arg1) {\n getObject(arg0).e = arg1;\n };\n imports.wbg.__wbg_setf_df5aef1469b0c50b = function(arg0, arg1) {\n getObject(arg0).f = arg1;\n };\n imports.wbg.__wbg_deltaY_2722120e563d3160 = function(arg0) {\n var ret = getObject(arg0).deltaY;\n return ret;\n };\n imports.wbg.__wbg_deltaMode_3db3c9c4bedf191d = function(arg0) {\n var ret = getObject(arg0).deltaMode;\n return ret;\n };\n imports.wbg.__wbg_setbuffer_8c396e74724eda12 = function(arg0, arg1) {\n getObject(arg0).buffer = getObject(arg1);\n };\n imports.wbg.__wbg_setloop_1e141edefc26db22 = function(arg0, arg1) {\n getObject(arg0).loop = arg1 !== 0;\n };\n imports.wbg.__wbg_setloopStart_4162b0a533fbc0d5 = function(arg0, arg1) {\n getObject(arg0).loopStart = arg1;\n };\n imports.wbg.__wbg_setloopEnd_e81eb72ea2277d88 = function(arg0, arg1) {\n getObject(arg0).loopEnd = arg1;\n };\n imports.wbg.__wbg_setonended_f6f3e04e13c07db4 = function(arg0, arg1) {\n getObject(arg0).onended = getObject(arg1);\n };\n imports.wbg.__wbg_start_f5e66921db9afaee = handleError(function(arg0) {\n getObject(arg0).start();\n });\n imports.wbg.__wbg_start_0237410bb20c6213 = handleError(function(arg0, arg1, arg2) {\n getObject(arg0).start(arg1, arg2);\n });\n imports.wbg.__wbg_stop_5765c7cac3ec1564 = handleError(function(arg0, arg1) {\n getObject(arg0).stop(arg1);\n });\n imports.wbg.__wbg_instanceof_HtmlFormElement_26283084b0956b17 = function(arg0) {\n var ret = getObject(arg0) instanceof HTMLFormElement;\n return ret;\n };\n imports.wbg.__wbg_submit_121b8e3bd960f229 = handleError(function(arg0) {\n getObject(arg0).submit();\n });\n imports.wbg.__wbg_pointerId_602db5c989b38cc0 = function(arg0) {\n var ret = getObject(arg0).pointerId;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Response_f52c65c389890639 = function(arg0) {\n var ret = getObject(arg0) instanceof Response;\n return ret;\n };\n imports.wbg.__wbg_arrayBuffer_0ba17dfaad804b6f = handleError(function(arg0) {\n var ret = getObject(arg0).arrayBuffer();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_data_55e064fddf34cf3b = 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_key_d9b602f48baca7bc = 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_cbf76ad384ae1179 = 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_now_7628760b7b640632 = function(arg0) {\n var ret = getObject(arg0).now();\n return ret;\n };\n imports.wbg.__wbg_newwithstrandinit_11debb554792e043 = handleError(function(arg0, arg1, arg2) {\n var ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_setonaudioprocess_66d0b1fa0dd39606 = function(arg0, arg1) {\n getObject(arg0).onaudioprocess = getObject(arg1);\n };\n imports.wbg.__wbg_body_c8cb19d760637268 = function(arg0) {\n var ret = getObject(arg0).body;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_createElement_99351c8bf0efac6e = handleError(function(arg0, arg1, arg2) {\n var ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createElementNS_a7ef126eff5022c2 = 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_f33ce4e43b43f57a = function(arg0, arg1, arg2) {\n getObject(arg0).id = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_clientWidth_2c84a7ebc75dd4f0 = function(arg0) {\n var ret = getObject(arg0).clientWidth;\n return ret;\n };\n imports.wbg.__wbg_clientHeight_f56dfe03d1c42f3e = function(arg0) {\n var ret = getObject(arg0).clientHeight;\n return ret;\n };\n imports.wbg.__wbg_querySelector_155b00165b78a12f = 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_4b78cb9c51d4a539 = handleError(function(arg0, arg1) {\n getObject(arg0).releasePointerCapture(arg1);\n });\n imports.wbg.__wbg_setAttribute_e71b9086539f06a1 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n });\n imports.wbg.__wbg_setAttributeNS_a66240d5c750d0fa = 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_54ee987062d42d03 = handleError(function(arg0, arg1) {\n getObject(arg0).setPointerCapture(arg1);\n });\n imports.wbg.__wbg_remove_0639495587b1aaeb = function(arg0) {\n getObject(arg0).remove();\n };\n imports.wbg.__wbg_instanceof_WebGlRenderingContext_ef4e51c6e4133d85 = function(arg0) {\n var ret = getObject(arg0) instanceof WebGLRenderingContext;\n return ret;\n };\n imports.wbg.__wbg_drawingBufferWidth_fab3e20dd1ba5d4e = function(arg0) {\n var ret = getObject(arg0).drawingBufferWidth;\n return ret;\n };\n imports.wbg.__wbg_drawingBufferHeight_31bc93d4dc3a0dcc = function(arg0) {\n var ret = getObject(arg0).drawingBufferHeight;\n return ret;\n };\n imports.wbg.__wbg_bufferData_d47c8467e443121d = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).bufferData(arg1 >>> 0, getArrayU8FromWasm0(arg2, arg3), arg4 >>> 0);\n };\n imports.wbg.__wbg_texImage2D_a4011abffe0229fb = 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_cd9d2dea0641919d = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).uniform1fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3));\n };\n imports.wbg.__wbg_uniform4fv_24ef46675c137552 = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).uniform4fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3));\n };\n imports.wbg.__wbg_uniformMatrix3fv_a0a261980af4587d = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).uniformMatrix3fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4));\n };\n imports.wbg.__wbg_uniformMatrix4fv_088c96db8ee28c1d = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).uniformMatrix4fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4));\n };\n imports.wbg.__wbg_activeTexture_a51ec6273de88bc6 = function(arg0, arg1) {\n getObject(arg0).activeTexture(arg1 >>> 0);\n };\n imports.wbg.__wbg_attachShader_0dd248f6ab98fcf2 = function(arg0, arg1, arg2) {\n getObject(arg0).attachShader(getObject(arg1), getObject(arg2));\n };\n imports.wbg.__wbg_bindBuffer_1ceb83e9674e812a = function(arg0, arg1, arg2) {\n getObject(arg0).bindBuffer(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_bindFramebuffer_d8f98d1a7f6d67d1 = function(arg0, arg1, arg2) {\n getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_bindRenderbuffer_1ba9206d5f319ae1 = function(arg0, arg1, arg2) {\n getObject(arg0).bindRenderbuffer(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_bindTexture_6121e6db3f879582 = function(arg0, arg1, arg2) {\n getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_blendFunc_34a6bb31770822c5 = function(arg0, arg1, arg2) {\n getObject(arg0).blendFunc(arg1 >>> 0, arg2 >>> 0);\n };\n imports.wbg.__wbg_clear_f6b2dd48aeed2752 = function(arg0, arg1) {\n getObject(arg0).clear(arg1 >>> 0);\n };\n imports.wbg.__wbg_clearColor_89f7819aa9f80129 = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).clearColor(arg1, arg2, arg3, arg4);\n };\n imports.wbg.__wbg_colorMask_88ebee15531b14ef = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).colorMask(arg1 !== 0, arg2 !== 0, arg3 !== 0, arg4 !== 0);\n };\n imports.wbg.__wbg_compileShader_28bdbafe4445d24b = function(arg0, arg1) {\n getObject(arg0).compileShader(getObject(arg1));\n };\n imports.wbg.__wbg_createBuffer_acedc3831832a280 = function(arg0) {\n var ret = getObject(arg0).createBuffer();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_createProgram_7e2f44b7b74694d4 = function(arg0) {\n var ret = getObject(arg0).createProgram();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_createShader_64c474f1d1d0c1f8 = function(arg0, arg1) {\n var ret = getObject(arg0).createShader(arg1 >>> 0);\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_createTexture_0a156dab1efc3499 = function(arg0) {\n var ret = getObject(arg0).createTexture();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_disable_5b9c6f74d5efd3a5 = function(arg0, arg1) {\n getObject(arg0).disable(arg1 >>> 0);\n };\n imports.wbg.__wbg_disableVertexAttribArray_ba8f39ecd28c601b = function(arg0, arg1) {\n getObject(arg0).disableVertexAttribArray(arg1 >>> 0);\n };\n imports.wbg.__wbg_drawElements_3eb5ba8a511ce0f0 = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).drawElements(arg1 >>> 0, arg2, arg3 >>> 0, arg4);\n };\n imports.wbg.__wbg_enable_87f39f6396535e1f = function(arg0, arg1) {\n getObject(arg0).enable(arg1 >>> 0);\n };\n imports.wbg.__wbg_enableVertexAttribArray_f29c8dde9c8c5cf5 = function(arg0, arg1) {\n getObject(arg0).enableVertexAttribArray(arg1 >>> 0);\n };\n imports.wbg.__wbg_getAttribLocation_ba61f837da80e249 = 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_c6863c255090d82f = 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_ff687a6ea303e551 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).getParameter(arg1 >>> 0);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_getProgramInfoLog_aacf06c959070653 = 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_a89bf14502c109f7 = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).getProgramParameter(getObject(arg1), arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getShaderInfoLog_1eb885f2468e2429 = 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_ca853de4f2f9270d = 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_46a36cb158f10676 = function(arg0, arg1) {\n getObject(arg0).linkProgram(getObject(arg1));\n };\n imports.wbg.__wbg_pixelStorei_31f6dc244bf4cd5b = function(arg0, arg1, arg2) {\n getObject(arg0).pixelStorei(arg1 >>> 0, arg2);\n };\n imports.wbg.__wbg_shaderSource_700ae72fca39850d = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).shaderSource(getObject(arg1), getStringFromWasm0(arg2, arg3));\n };\n imports.wbg.__wbg_stencilFunc_cc85d77d2098446b = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).stencilFunc(arg1 >>> 0, arg2, arg3 >>> 0);\n };\n imports.wbg.__wbg_stencilMask_ed2cded2c2b0b72c = function(arg0, arg1) {\n getObject(arg0).stencilMask(arg1 >>> 0);\n };\n imports.wbg.__wbg_stencilOp_1b3529546c1fdcc2 = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).stencilOp(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0);\n };\n imports.wbg.__wbg_texParameteri_e45f3977eb998137 = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3);\n };\n imports.wbg.__wbg_uniform1f_3eb09312a513b94a = function(arg0, arg1, arg2) {\n getObject(arg0).uniform1f(getObject(arg1), arg2);\n };\n imports.wbg.__wbg_uniform1i_e76b668973ae0655 = function(arg0, arg1, arg2) {\n getObject(arg0).uniform1i(getObject(arg1), arg2);\n };\n imports.wbg.__wbg_useProgram_d63a57db0571e803 = function(arg0, arg1) {\n getObject(arg0).useProgram(getObject(arg1));\n };\n imports.wbg.__wbg_vertexAttribPointer_b4b829a4f5a3778e = 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_54305c74f5668b33 = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).viewport(arg1, arg2, arg3, arg4);\n };\n imports.wbg.__wbg_debug_146b863607d79e9d = function(arg0) {\n console.debug(getObject(arg0));\n };\n imports.wbg.__wbg_error_e325755affc8634b = function(arg0) {\n console.error(getObject(arg0));\n };\n imports.wbg.__wbg_info_d60054f760c729cc = function(arg0) {\n console.info(getObject(arg0));\n };\n imports.wbg.__wbg_log_f2e13ca55da8bad3 = function(arg0) {\n console.log(getObject(arg0));\n };\n imports.wbg.__wbg_warn_9e92ccdc67085e1b = function(arg0) {\n console.warn(getObject(arg0));\n };\n imports.wbg.__wbg_style_9b773f0fc441eddc = function(arg0) {\n var ret = getObject(arg0).style;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_newwithbuffersourcesequenceandoptions_03294a518a0bd99a = handleError(function(arg0, arg1) {\n var ret = new Blob(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_currentTarget_b545d0d803b3a62e = function(arg0) {\n var ret = getObject(arg0).currentTarget;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_preventDefault_9aab6c264e5df3ee = function(arg0) {\n getObject(arg0).preventDefault();\n };\n imports.wbg.__wbg_addEventListener_6a37bc32387cb66d = handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n });\n imports.wbg.__wbg_addEventListener_a422088e686210b5 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));\n });\n imports.wbg.__wbg_addEventListener_50b4229556ab0b83 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);\n });\n imports.wbg.__wbg_removeEventListener_70dfb387da1982ac = handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n });\n imports.wbg.__wbg_removeEventListener_4448b273b47328f8 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);\n });\n imports.wbg.__wbg_instanceof_HtmlCanvasElement_7bd3ee7838f11fc3 = function(arg0) {\n var ret = getObject(arg0) instanceof HTMLCanvasElement;\n return ret;\n };\n imports.wbg.__wbg_width_0efa4604d41c58c5 = function(arg0) {\n var ret = getObject(arg0).width;\n return ret;\n };\n imports.wbg.__wbg_setwidth_1d0e975feecff3ef = function(arg0, arg1) {\n getObject(arg0).width = arg1 >>> 0;\n };\n imports.wbg.__wbg_height_aa24e3fef658c4a8 = function(arg0) {\n var ret = getObject(arg0).height;\n return ret;\n };\n imports.wbg.__wbg_setheight_7758ee3ff5c65474 = function(arg0, arg1) {\n getObject(arg0).height = arg1 >>> 0;\n };\n imports.wbg.__wbg_getContext_3db9399e6dc524ff = 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_93be69215ea9dbbf = 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_setsrc_ca894d724570195d = function(arg0, arg1, arg2) {\n getObject(arg0).src = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_new_1f2ded01c889cd38 = handleError(function() {\n var ret = new Image();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_newwithwidthandheight_0f3a13502ca94c49 = handleError(function(arg0, arg1) {\n var ret = new Image(arg0 >>> 0, arg1 >>> 0);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_instanceof_CanvasRenderingContext2d_1d38418d1d6c8b34 = function(arg0) {\n var ret = getObject(arg0) instanceof CanvasRenderingContext2D;\n return ret;\n };\n imports.wbg.__wbg_setglobalAlpha_b4134dbd884b4d37 = function(arg0, arg1) {\n getObject(arg0).globalAlpha = arg1;\n };\n imports.wbg.__wbg_setglobalCompositeOperation_557a59a0ccf673d6 = handleError(function(arg0, arg1, arg2) {\n getObject(arg0).globalCompositeOperation = getStringFromWasm0(arg1, arg2);\n });\n imports.wbg.__wbg_setstrokeStyle_7f507e0d838e3dcf = function(arg0, arg1) {\n getObject(arg0).strokeStyle = getObject(arg1);\n };\n imports.wbg.__wbg_setfillStyle_bbe97cb93eb1b55c = function(arg0, arg1) {\n getObject(arg0).fillStyle = getObject(arg1);\n };\n imports.wbg.__wbg_setfilter_df75805bea0a8415 = function(arg0, arg1, arg2) {\n getObject(arg0).filter = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_setlineWidth_61de9d1eb4e9f8a6 = function(arg0, arg1) {\n getObject(arg0).lineWidth = arg1;\n };\n imports.wbg.__wbg_setlineCap_bff1a8858c9f067e = function(arg0, arg1, arg2) {\n getObject(arg0).lineCap = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_setlineJoin_de47815c918d7874 = function(arg0, arg1, arg2) {\n getObject(arg0).lineJoin = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_setmiterLimit_84b1a1dbddcd456a = function(arg0, arg1) {\n getObject(arg0).miterLimit = arg1;\n };\n imports.wbg.__wbg_drawImage_b8dec9034bf1d116 = handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).drawImage(getObject(arg1), arg2, arg3);\n });\n imports.wbg.__wbg_drawImage_801ad094f4734689 = handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).drawImage(getObject(arg1), arg2, arg3);\n });\n imports.wbg.__wbg_fill_6c721ab8eec90f70 = function(arg0, arg1) {\n getObject(arg0).fill(getObject(arg1));\n };\n imports.wbg.__wbg_stroke_e25cf47e0d9a36c3 = function(arg0, arg1) {\n getObject(arg0).stroke(getObject(arg1));\n };\n imports.wbg.__wbg_createPattern_006b6402db95df36 = 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_dd3caac873bf461f = 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_6af85454d06df5fa = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).clearRect(arg1, arg2, arg3, arg4);\n };\n imports.wbg.__wbg_fillRect_c79d1b386c04efed = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).fillRect(arg1, arg2, arg3, arg4);\n };\n imports.wbg.__wbg_resetTransform_f78edb82fd1f7239 = handleError(function(arg0) {\n getObject(arg0).resetTransform();\n });\n imports.wbg.__wbg_setTransform_5f5f19301b76a8d6 = 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_5fa3f454aa041e6e = function(arg0, arg1) {\n var ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_next_373211328013f949 = handleError(function(arg0) {\n var ret = getObject(arg0).next();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_done_49c598117f977077 = function(arg0) {\n var ret = getObject(arg0).done;\n return ret;\n };\n imports.wbg.__wbg_value_c9ae6368b110a068 = function(arg0) {\n var ret = getObject(arg0).value;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_85e0a3b459845fe2 = handleError(function(arg0, arg1) {\n var ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_call_951bd0c6d815d6f1 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_new_9dff83a08f5994f3 = function() {\n var ret = new Array();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_isArray_cf56c8363b1b35d9 = function(arg0) {\n var ret = Array.isArray(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_of_3a4bb382824dd437 = function(arg0, arg1) {\n var ret = Array.of(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_push_3ddd8187ff2ff82d = function(arg0, arg1) {\n var ret = getObject(arg0).push(getObject(arg1));\n return ret;\n };\n imports.wbg.__wbg_instanceof_ArrayBuffer_3a0fa134e6809d57 = function(arg0) {\n var ret = getObject(arg0) instanceof ArrayBuffer;\n return ret;\n };\n imports.wbg.__wbg_new_24c0ca5f23ee2dd9 = function(arg0) {\n var ret = new ArrayBuffer(arg0 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_slice_a498e5bb17f253f3 = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).slice(arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_values_f28e313e2260a03a = function(arg0) {\n var ret = getObject(arg0).values();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_newnoargs_7c6bd521992b4022 = function(arg0, arg1) {\n var ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_apply_4e68243803368d89 = 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_bf745b1758bb6693 = 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_cf686ab22ab03a3e = function(arg0) {\n var ret = getObject(arg0).getTime();\n return ret;\n };\n imports.wbg.__wbg_getTimezoneOffset_b9f3c4664b1a35ae = function(arg0) {\n var ret = getObject(arg0).getTimezoneOffset();\n return ret;\n };\n imports.wbg.__wbg_new0_abd359df4aeb5b55 = function() {\n var ret = new Date();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_instanceof_Object_cdaa71ad2ca2f4c5 = function(arg0) {\n var ret = getObject(arg0) instanceof Object;\n return ret;\n };\n imports.wbg.__wbg_entries_7144a7309b22df64 = function(arg0) {\n var ret = Object.entries(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_fromEntries_cc1186a09f1ec7f2 = handleError(function(arg0) {\n var ret = Object.fromEntries(getObject(arg0));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_is_049b1aece40b5301 = function(arg0, arg1) {\n var ret = Object.is(getObject(arg0), getObject(arg1));\n return ret;\n };\n imports.wbg.__wbg_new_ba07d0daa0e4677e = function() {\n var ret = new Object();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_resolve_6e61e640925a0db9 = function(arg0) {\n var ret = Promise.resolve(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_then_dd3785597974798a = function(arg0, arg1) {\n var ret = getObject(arg0).then(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_then_0f957e0f4c3e537a = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).then(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_self_6baf3a3aa7b63415 = handleError(function() {\n var ret = self.self;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_window_63fc4027b66c265b = handleError(function() {\n var ret = window.window;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_globalThis_513fb247e8e4e6d2 = handleError(function() {\n var ret = globalThis.globalThis;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_global_b87245cd886d7113 = handleError(function() {\n var ret = global.global;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_buffer_3f12a1c608c6d04e = function(arg0) {\n var ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_4c51342f87299c5a = 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_c645e7c02233b440 = function(arg0) {\n var ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbg_new_c6c0228e6d22a2f9 = function(arg0) {\n var ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_set_b91afac9fd216d99 = function(arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n };\n imports.wbg.__wbg_fill_f49407f577541856 = 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_c385539cb4060297 = function(arg0) {\n var ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_byteLength_11e6bdc2fac53a3c = function(arg0) {\n var ret = getObject(arg0).byteLength;\n return ret;\n };\n imports.wbg.__wbg_byteOffset_5db4e07752c85395 = function(arg0) {\n var ret = getObject(arg0).byteOffset;\n return ret;\n };\n imports.wbg.__wbg_ownKeys_d44c25f33e28bfab = handleError(function(arg0) {\n var ret = Reflect.ownKeys(getObject(arg0));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_set_9bdd413385146137 = 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_wrapper1217 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 513, __wbg_adapter_32);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1219 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 513, __wbg_adapter_35);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1221 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 513, __wbg_adapter_38);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1223 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 513, __wbg_adapter_41);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1225 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 513, __wbg_adapter_44);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1227 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 513, __wbg_adapter_47);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1229 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 513, __wbg_adapter_50);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1231 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 513, __wbg_adapter_53);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1729 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 829, __wbg_adapter_56);\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 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","/* eslint @typescript-eslint/no-explicit-any: \"off\" */\n/* eslint @typescript-eslint/ban-types: \"off\" */\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: function (...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: function (target, key) {\n return target[key];\n },\n });\n }\n if (typeof Reflect.set !== \"function\") {\n Object.defineProperty(Reflect, \"set\", {\n value: function (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 */\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","/* eslint @typescript-eslint/no-explicit-any: \"off\" */\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};\n/**\n * Conditional ruffle loader\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 use file-loader,\n // so this package 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 /* 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 * 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 *\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 *\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 while (true) {\n try {\n let externalName = elementName;\n if (tries > 0) {\n externalName = externalName + \"-\" + tries;\n }\n window.customElements.define(externalName, elementClass);\n privateRegistry[elementName] = {\n class: elementClass,\n name: externalName,\n internalName: elementName,\n };\n return externalName;\n }\n catch (e) {\n if (e.name === \"NotSupportedError\") {\n tries += 1;\n }\n }\n }\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[\"FileProtocol\"] = 1] = \"FileProtocol\";\n PanicError[PanicError[\"JavascriptConfiguration\"] = 2] = \"JavascriptConfiguration\";\n PanicError[PanicError[\"JavascriptConflict\"] = 3] = \"JavascriptConflict\";\n PanicError[PanicError[\"WasmCors\"] = 4] = \"WasmCors\";\n PanicError[PanicError[\"WasmMimeType\"] = 5] = \"WasmMimeType\";\n PanicError[PanicError[\"WasmNotFound\"] = 6] = \"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 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.unmuteOverlay.addEventListener(\"click\", this.unmuteOverlayClicked.bind(this));\n this.contextMenuElement = this.shadow.getElementById(\"context-menu\");\n this.addEventListener(\"contextmenu\", this.showContextMenu.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.ruffleConstructor = loadRuffle();\n this.lastActivePlayingState = false;\n this.setupPauseOnTabHidden();\n return this;\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 if (this.instance) {\n this.instance.destroy();\n this.instance = null;\n console.log(\"Ruffle instance destroyed.\");\n }\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 if (this.instance) {\n this.instance.destroy();\n this.instance = null;\n console.log(\"Ruffle instance destroyed.\");\n }\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(\"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 this.unmuteOverlay.style.display = \"block\";\n // We need to mark each child as hidden or visible, as we want an overlay even if it's \"hidden\".\n // We need to undo this later if the config changed back to visible, but we already hid them.\n this.unmuteOverlay.childNodes.forEach((node) => {\n if (\"style\" in node) {\n const style = node.style;\n style.visibility =\n unmuteVisibility == UnmuteOverlay.Visible\n ? \"\"\n : \"hidden\";\n }\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 * 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 if (this.requestFullscreen) {\n this.requestFullscreen();\n }\n else if (this.webkitRequestFullScreen) {\n this.webkitRequestFullScreen();\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.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n }\n }\n contextMenuItems() {\n const items = [];\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({\n text: `About Ruffle (nightly 2021-03-22)`,\n onClick() {\n window.open(RUFFLE_ORIGIN, \"_blank\");\n },\n separator: false,\n });\n return items;\n }\n showContextMenu(e) {\n e.preventDefault();\n if (!this.hasContextMenu) {\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 { text, onClick, separator } of this.contextMenuItems()) {\n const menuItem = document.createElement(\"li\");\n menuItem.className = \"menu_item active\";\n menuItem.textContent = text;\n menuItem.addEventListener(\"click\", onClick);\n this.contextMenuElement.appendChild(menuItem);\n if (separator !== false) {\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 }\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 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 *\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-03-22\\n`);\n errorArray.push(`Channel: nightly\\n`);\n errorArray.push(`Built: 2021-03-22T00:19:43.563Z\\n`);\n errorArray.push(`Commit: 760e8421ab2b41ed11e124334d81325c7e0f235e\\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.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 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 if (this.instance) {\n this.instance.destroy();\n this.instance = null;\n }\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}\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 *\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 *\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 *\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 *\n * @param sourceName The name of this particular\n * Ruffle source.\n *\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 *\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 { 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","// 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\tid: moduleId,\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","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\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 = \"\";","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!./index.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import \"./index.css\";\n\nconst { SourceAPI, PublicAPI } = require(\"ruffle-core\");\n\nwindow.RufflePlayer = PublicAPI.negotiate(\n window.RufflePlayer,\n \"local\",\n new SourceAPI(\"local\")\n);\n\nlet ruffle;\nlet player;\n\nconst main = document.getElementById(\"main\");\nconst overlay = document.getElementById(\"overlay\");\nconst authorContainer = document.getElementById(\"author-container\");\nconst author = document.getElementById(\"author\");\nconst sampleFileInputContainer = document.getElementById(\n \"sample-swfs-container\"\n);\nconst sampleFileInput = document.getElementById(\"sample-swfs\");\nconst localFileInput = document.getElementById(\"local-file\");\nconst animOptGroup = document.getElementById(\"anim-optgroup\");\nconst gamesOptGroup = document.getElementById(\"games-optgroup\");\n\n// Default config used by the player.\nconst config = {\n letterbox: \"on\",\n logLevel: \"warn\",\n};\n\nfunction ensurePlayer() {\n if (player) {\n player.remove();\n }\n player = ruffle.createPlayer();\n player.id = \"player\";\n main.append(player);\n\n sampleFileInput.selectedIndex = 0;\n authorContainer.style.display = \"none\";\n author.textContent = \"\";\n author.href = \"\";\n}\n\nasync function loadFile(file) {\n if (!file) {\n return;\n }\n ensurePlayer();\n const data = await new Response(file).arrayBuffer();\n player.load({ data, ...config });\n}\n\nfunction loadSample() {\n const swfData = sampleFileInput[sampleFileInput.selectedIndex].swfData;\n if (swfData) {\n authorContainer.style.display = \"block\";\n author.textContent = swfData.author;\n author.href = swfData.authorLink;\n localFileInput.value = null;\n player.load({ url: swfData.location, ...config });\n } else {\n ensurePlayer();\n }\n}\n\nlocalFileInput.addEventListener(\"change\", (event) => {\n loadFile(event.target.files[0]);\n});\n\nsampleFileInput.addEventListener(\"change\", () => loadSample());\n\nmain.addEventListener(\"dragenter\", () => {\n overlay.classList.add(\"drag\");\n});\nmain.addEventListener(\"dragleave\", () => {\n overlay.classList.remove(\"drag\");\n});\nmain.addEventListener(\"dragover\", (event) => {\n event.stopPropagation();\n event.preventDefault();\n});\nmain.addEventListener(\"drop\", (event) => {\n event.stopPropagation();\n event.preventDefault();\n overlay.classList.remove(\"drag\");\n loadFile(event.dataTransfer.files[0]);\n});\n\nwindow.addEventListener(\"load\", () => {\n overlay.style.display = \"initial\";\n});\n\nwindow.addEventListener(\"DOMContentLoaded\", async () => {\n ruffle = window.RufflePlayer.newest();\n ensurePlayer();\n\n const response = await fetch(\"swfs.json\");\n if (!response.ok) {\n sampleFileInputContainer.style.display = \"none\";\n return;\n }\n\n const data = await response.json();\n for (const swfData of data.swfs) {\n const option = document.createElement(\"option\");\n option.textContent = swfData.title;\n option.value = swfData.location;\n option.swfData = swfData;\n switch (swfData.type) {\n case \"Animation\":\n animOptGroup.append(option);\n break;\n case \"Game\":\n gamesOptGroup.append(option);\n break;\n }\n }\n sampleFileInputContainer.style.display = \"inline-block\";\n\n const initialFile = new URL(window.location).searchParams.get(\"file\");\n if (initialFile) {\n const options = Array.from(sampleFileInput.options);\n sampleFileInput.selectedIndex = Math.max(\n options.findIndex((swfData) => swfData.value.endsWith(initialFile)),\n 0\n );\n loadSample();\n }\n});\n"],"sourceRoot":""}