From 135f5d6e42f98965f588e962c36ff853ba728d9d Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 9 Dec 2024 23:51:32 +0100 Subject: [PATCH] Mon 9 Dec 23:50:44 CET 2024 --- webv86/web/libv86-debug.js | 12426 +++++++++++++++++++++++++++++++++++ 1 file changed, 12426 insertions(+) create mode 100644 webv86/web/libv86-debug.js diff --git a/webv86/web/libv86-debug.js b/webv86/web/libv86-debug.js new file mode 100644 index 0000000..de19cd9 --- /dev/null +++ b/webv86/web/libv86-debug.js @@ -0,0 +1,12426 @@ +var _console=console +var consoleCallback=function () {} +;(function(){'use strict'; +/* to catch debug messages and pass them to global consoleCallback*/ +var console = { + assert:_console.assert, + log:function (msg) { consoleCallback(msg); _console.log.apply(null,arguments); }, + error:_console.error, + debug:_console.debug +} +var $LOG_NAMES$$ = [[1, ""], [2, "CPU"], [32768, "DISK"], [4, "FPU"], [8, "MEM"], [16, "DMA"], [32, "IO"], [64, "PS2"], [128, "PIC"], [256, "VGA"], [512, "PIT"], [1024, "MOUS"], [2048, "PCI"], [4096, "BIOS"], [8192, "FLOP"], [16384, "SERI"], [65536, "RTC"], [262144, "ACPI"], [524288, "APIC"], [1048576, "NET"], [2097152, "VIO"], [4194304, "9P"], [8388608, "SB16"], [16777216, "FETC"], ]; +function $ScreenAdapter$$($options$jscomp$34$$, $screen_fill_buffer$$) { + function $number_as_color$$($n$jscomp$2$$) { + $n$jscomp$2$$ = $n$jscomp$2$$.toString(16); + return "#" + "0".repeat(6 - $n$jscomp$2$$.length) + $n$jscomp$2$$; + } + function $render_font_bitmap$$($vga_bitmap$$) { + var $bitmap_width_dst_inc_col$$ = 256 * $font_width$$, $bitmap_height_put_bit$$ = 8 * $font_height$$, $font_canvas_vga_inc_chr$$ = $font_context$$ ? $font_context$$.canvas : null; + $font_canvas_vga_inc_chr$$ && $font_canvas_vga_inc_chr$$.width === $bitmap_width_dst_inc_col$$ && $font_canvas_vga_inc_chr$$.height === $bitmap_height_put_bit$$ || ($font_canvas_vga_inc_chr$$ ? ($font_canvas_vga_inc_chr$$.width = $bitmap_width_dst_inc_col$$, $font_canvas_vga_inc_chr$$.height = $bitmap_height_put_bit$$) : ($font_canvas_vga_inc_chr$$ = new OffscreenCanvas($bitmap_width_dst_inc_col$$, $bitmap_height_put_bit$$), $font_context$$ = $font_canvas_vga_inc_chr$$.getContext("2d")), $font_image_data$$ = + $font_context$$.createImageData($bitmap_width_dst_inc_col$$, $bitmap_height_put_bit$$)); + const $font_bitmap$$ = $font_image_data$$.data; + let $i_dst$$ = 0, $is_visible$$; + $bitmap_height_put_bit$$ = $font_width_dbl$$ ? function($value$jscomp$91$$) { + $is_visible$$ = $is_visible$$ || $value$jscomp$91$$; + $font_bitmap$$[$i_dst$$ + 3] = $value$jscomp$91$$; + $font_bitmap$$[$i_dst$$ + 7] = $value$jscomp$91$$; + $i_dst$$ += 8; + } : function($value$jscomp$92$$) { + $is_visible$$ = $is_visible$$ || $value$jscomp$92$$; + $font_bitmap$$[$i_dst$$ + 3] = $value$jscomp$92$$; + $i_dst$$ += 4; + }; + $font_canvas_vga_inc_chr$$ = 32 - $font_height$$; + const $dst_inc_row$$ = $bitmap_width_dst_inc_col$$ * ($font_height$$ - 1) * 4; + $bitmap_width_dst_inc_col$$ = 4 * ($font_width$$ - $bitmap_width_dst_inc_col$$ * $font_height$$); + const $dst_inc_line$$ = 1020 * $font_width$$; + for (let $i_chr_all$$ = 0, $i_vga$$ = 0; 2048 > $i_chr_all$$; ++$i_chr_all$$, $i_vga$$ += $font_canvas_vga_inc_chr$$, $i_dst$$ += $bitmap_width_dst_inc_col$$) { + const $i_chr$$ = $i_chr_all$$ % 256; + $i_chr_all$$ && !$i_chr$$ && ($i_dst$$ += $dst_inc_row$$); + $is_visible$$ = !1; + for (let $i_line$$ = 0; $i_line$$ < $font_height$$; ++$i_line$$, ++$i_vga$$, $i_dst$$ += $dst_inc_line$$) { + const $line_bits$$ = $vga_bitmap$$[$i_vga$$]; + for (let $i_bit$$ = 128; 0 < $i_bit$$; $i_bit$$ >>= 1) { + $bitmap_height_put_bit$$($line_bits$$ & $i_bit$$ ? 255 : 0); + } + $font_width_9px$$ && $bitmap_height_put_bit$$($font_copy_8th_col$$ && 192 <= $i_chr$$ && 223 >= $i_chr$$ && $line_bits$$ & 1 ? 255 : 0); + } + $font_is_visible$$[$i_chr_all$$] = $is_visible$$ ? 1 : 0; + } + $font_context$$.putImageData($font_image_data$$, 0, 0); + } + function $elem_set_scale$$($elem$jscomp$1$$, $scale_x$jscomp$1$$, $scale_y$jscomp$1$$, $device_pixel_ratio_use_scale$$) { + if ($scale_x$jscomp$1$$ && $scale_y$jscomp$1$$) { + $elem$jscomp$1$$.style.width = ""; + $elem$jscomp$1$$.style.height = ""; + $device_pixel_ratio_use_scale$$ && ($elem$jscomp$1$$.style.transform = ""); + var $rectangle$$ = $elem$jscomp$1$$.getBoundingClientRect(); + $device_pixel_ratio_use_scale$$ ? $elem$jscomp$1$$.style.transform = (1 === $scale_x$jscomp$1$$ ? "" : " scaleX(" + $scale_x$jscomp$1$$ + ")") + (1 === $scale_y$jscomp$1$$ ? "" : " scaleY(" + $scale_y$jscomp$1$$ + ")") : (0 === $scale_x$jscomp$1$$ % 1 && 0 === $scale_y$jscomp$1$$ % 1 ? ($graphic_screen$$.style.imageRendering = "crisp-edges", $graphic_screen$$.style.imageRendering = "pixelated", $graphic_screen$$.style["-ms-interpolation-mode"] = "nearest-neighbor") : ($graphic_screen$$.style.imageRendering = + "", $graphic_screen$$.style["-ms-interpolation-mode"] = ""), $device_pixel_ratio_use_scale$$ = window.devicePixelRatio || 1, 0 !== $device_pixel_ratio_use_scale$$ % 1 && ($scale_x$jscomp$1$$ /= $device_pixel_ratio_use_scale$$, $scale_y$jscomp$1$$ /= $device_pixel_ratio_use_scale$$)); + 1 !== $scale_x$jscomp$1$$ && ($elem$jscomp$1$$.style.width = $rectangle$$.width * $scale_x$jscomp$1$$ + "px"); + 1 !== $scale_y$jscomp$1$$ && ($elem$jscomp$1$$.style.height = $rectangle$$.height * $scale_y$jscomp$1$$ + "px"); + } + } + const $screen_container$$ = $options$jscomp$34$$.container; + this.screen_fill_buffer = $screen_fill_buffer$$; + console.assert($screen_container$$, "options.container must be provided"); + this.FLAG_BLINKING = 1; + this.FLAG_FONT_PAGE_B = 2; + var $graphic_screen$$ = $screen_container$$.getElementsByTagName("canvas")[0], $graphic_context$$ = $graphic_screen$$.getContext("2d", {alpha:!1}), $text_screen$$ = $screen_container$$.getElementsByTagName("div")[0], $cursor_element$$ = document.createElement("div"), $cursor_row$$, $cursor_col$$, $scale_x$$ = void 0 !== $options$jscomp$34$$.scale ? $options$jscomp$34$$.scale : 1, $scale_y$$ = void 0 !== $options$jscomp$34$$.scale ? $options$jscomp$34$$.scale : 1, $base_scale$$ = 1, $changed_rows$$, + $mode$jscomp$15$$, $text_mode_data$$, $text_mode_width$$, $text_mode_height$$, $offscreen_context$$, $offscreen_extra_context$$, $font_context$$, $font_image_data$$, $font_is_visible$$ = new Int8Array(2048), $font_height$$, $font_width$$, $font_width_9px$$, $font_width_dbl$$, $font_copy_8th_col$$, $font_page_a$$ = 0, $font_page_b$$ = 0, $blink_visible$$, $tm_last_update$$ = 0, $cursor_start$$, $cursor_end$$, $cursor_enabled$$, $charmap_default$$ = [], $charmap$$ = $charmap_default$$, $timer_id$$ = + 0, $paused$$ = !1; + this.init = function() { + const $charmap_low$$ = new Uint16Array([32, 9786, 9787, 9829, 9830, 9827, 9824, 8226, 9688, 9675, 9689, 9794, 9792, 9834, 9835, 9788, 9658, 9668, 8597, 8252, 182, 167, 9644, 8616, 8593, 8595, 8594, 8592, 8735, 8596, 9650, 9660]), $charmap_high$$ = new Uint16Array([8962, 199, 252, 233, 226, 228, 224, 229, 231, 234, 235, 232, 239, 238, 236, 196, 197, 201, 230, 198, 244, 246, 242, 251, 249, 255, 214, 220, 162, 163, 165, 8359, 402, 225, 237, 243, 250, 241, 209, 170, 186, 191, 8976, 172, 189, 188, + 161, 171, 187, 9617, 9618, 9619, 9474, 9508, 9569, 9570, 9558, 9557, 9571, 9553, 9559, 9565, 9564, 9563, 9488, 9492, 9524, 9516, 9500, 9472, 9532, 9566, 9567, 9562, 9556, 9577, 9574, 9568, 9552, 9580, 9575, 9576, 9572, 9573, 9561, 9560, 9554, 9555, 9579, 9578, 9496, 9484, 9608, 9604, 9612, 9616, 9600, 945, 223, 915, 960, 931, 963, 181, 964, 934, 920, 937, 948, 8734, 966, 949, 8745, 8801, 177, 8805, 8804, 8992, 8993, 247, 8776, 176, 8729, 183, 8730, 8319, 178, 9632, 160]); + for (var $i$jscomp$3$$ = 0, $chr$jscomp$1$$; 256 > $i$jscomp$3$$; $i$jscomp$3$$++) { + $chr$jscomp$1$$ = 126 < $i$jscomp$3$$ ? $charmap_high$$[$i$jscomp$3$$ - 127] : 32 > $i$jscomp$3$$ ? $charmap_low$$[$i$jscomp$3$$] : $i$jscomp$3$$, $charmap_default$$.push(String.fromCharCode($chr$jscomp$1$$)); + } + $cursor_element$$.classList.add("cursor"); + $cursor_element$$.style.position = "absolute"; + $cursor_element$$.style.backgroundColor = "#ccc"; + $cursor_element$$.style.width = "7px"; + $cursor_element$$.style.display = "inline-block"; + this.set_mode(!1); + this.set_size_text(80, 25); + 2 === $mode$jscomp$15$$ && this.set_size_graphical(720, 400, 720, 400); + this.set_scale($scale_x$$, $scale_y$$); + this.timer(); + }; + this.make_screenshot = function() { + const $image$jscomp$3$$ = new Image; + if (1 === $mode$jscomp$15$$ || 2 === $mode$jscomp$15$$) { + $image$jscomp$3$$.src = $graphic_screen$$.toDataURL("image/png"); + } else { + const $char_size$$ = [9, 16], $canvas$$ = document.createElement("canvas"); + $canvas$$.width = $text_mode_width$$ * $char_size$$[0]; + $canvas$$.height = $text_mode_height$$ * $char_size$$[1]; + const $context$jscomp$2$$ = $canvas$$.getContext("2d"); + $context$jscomp$2$$.imageSmoothingEnabled = !1; + $context$jscomp$2$$.font = window.getComputedStyle($text_screen$$).font; + $context$jscomp$2$$.textBaseline = "top"; + for (let $y$jscomp$73$$ = 0; $y$jscomp$73$$ < $text_mode_height$$; $y$jscomp$73$$++) { + for (let $x$jscomp$88$$ = 0; $x$jscomp$88$$ < $text_mode_width$$; $x$jscomp$88$$++) { + const $index$jscomp$73$$ = 4 * ($y$jscomp$73$$ * $text_mode_width$$ + $x$jscomp$88$$), $character$$ = $text_mode_data$$[$index$jscomp$73$$ + 0], $fg_color$$ = $text_mode_data$$[$index$jscomp$73$$ + 3]; + $context$jscomp$2$$.fillStyle = $number_as_color$$($text_mode_data$$[$index$jscomp$73$$ + 2]); + $context$jscomp$2$$.fillRect($x$jscomp$88$$ * $char_size$$[0], $y$jscomp$73$$ * $char_size$$[1], $char_size$$[0], $char_size$$[1]); + $context$jscomp$2$$.fillStyle = $number_as_color$$($fg_color$$); + $context$jscomp$2$$.fillText($charmap$$[$character$$], $x$jscomp$88$$ * $char_size$$[0], $y$jscomp$73$$ * $char_size$$[1]); + } + } + "none" !== $cursor_element$$.style.display && $cursor_row$$ < $text_mode_height$$ && $cursor_col$$ < $text_mode_width$$ && ($context$jscomp$2$$.fillStyle = $cursor_element$$.style.backgroundColor, $context$jscomp$2$$.fillRect($cursor_col$$ * $char_size$$[0], $cursor_row$$ * $char_size$$[1] + parseInt($cursor_element$$.style.marginTop, 10), parseInt($cursor_element$$.style.width, 10), parseInt($cursor_element$$.style.height, 10))); + $image$jscomp$3$$.src = $canvas$$.toDataURL("image/png"); + } + return $image$jscomp$3$$; + }; + this.put_char = function($row$$, $col_p$$, $chr$jscomp$2$$, $flags$jscomp$5$$, $bg_color$jscomp$1$$, $fg_color$jscomp$1$$) { + $dbg_assert$$(0 <= $row$$ && $row$$ < $text_mode_height$$); + $dbg_assert$$(0 <= $col_p$$ && $col_p$$ < $text_mode_width$$); + $dbg_assert$$(0 <= $chr$jscomp$2$$ && 256 > $chr$jscomp$2$$); + $col_p$$ = 4 * ($row$$ * $text_mode_width$$ + $col_p$$); + $text_mode_data$$[$col_p$$ + 0] = $chr$jscomp$2$$; + $text_mode_data$$[$col_p$$ + 1] = $flags$jscomp$5$$; + $text_mode_data$$[$col_p$$ + 2] = $bg_color$jscomp$1$$; + $text_mode_data$$[$col_p$$ + 3] = $fg_color$jscomp$1$$; + $changed_rows$$[$row$$] = 1; + }; + this.timer = function() { + $timer_id$$ = requestAnimationFrame(() => this.update_screen()); + }; + this.update_screen = function() { + $paused$$ || (0 === $mode$jscomp$15$$ ? this.update_text() : 1 === $mode$jscomp$15$$ ? this.update_graphical() : this.update_graphical_text()); + this.timer(); + }; + this.update_text = function() { + for (var $i$jscomp$4$$ = 0; $i$jscomp$4$$ < $text_mode_height$$; $i$jscomp$4$$++) { + $changed_rows$$[$i$jscomp$4$$] && (this.text_update_row($i$jscomp$4$$), $changed_rows$$[$i$jscomp$4$$] = 0); + } + }; + this.update_graphical = function() { + this.screen_fill_buffer(); + }; + this.update_graphical_text = function() { + if ($offscreen_context$$) { + var $font_canvas$jscomp$inline_17_tm_now$$ = performance.now(); + if (266 < $font_canvas$jscomp$inline_17_tm_now$$ - $tm_last_update$$) { + $blink_visible$$ = !$blink_visible$$; + $cursor_enabled$$ && ($changed_rows$$[$cursor_row$$] = 1); + $offscreen_extra_canvas$jscomp$inline_18_txt_row_size$jscomp$inline_12$$ = 4 * $text_mode_width$$; + for (let $row_i$jscomp$inline_13$$ = 0, $txt_i$jscomp$inline_14$$ = 0; $row_i$jscomp$inline_13$$ < $text_mode_height$$; ++$row_i$jscomp$inline_13$$) { + if ($changed_rows$$[$row_i$jscomp$inline_13$$]) { + $txt_i$jscomp$inline_14$$ += $offscreen_extra_canvas$jscomp$inline_18_txt_row_size$jscomp$inline_12$$; + } else { + for ($col_i$jscomp$inline_15_txt_row_size$jscomp$inline_19$$ = 0; $col_i$jscomp$inline_15_txt_row_size$jscomp$inline_19$$ < $text_mode_width$$; ++$col_i$jscomp$inline_15_txt_row_size$jscomp$inline_19$$, $txt_i$jscomp$inline_14$$ += 4) { + if ($text_mode_data$$[$txt_i$jscomp$inline_14$$ + 1] & 1) { + $changed_rows$$[$row_i$jscomp$inline_13$$] = 1; + $txt_i$jscomp$inline_14$$ += $offscreen_extra_canvas$jscomp$inline_18_txt_row_size$jscomp$inline_12$$ - 4 * $col_i$jscomp$inline_15_txt_row_size$jscomp$inline_19$$; + break; + } + } + } + } + $tm_last_update$$ = $font_canvas$jscomp$inline_17_tm_now$$; + } + $font_canvas$jscomp$inline_17_tm_now$$ = $font_context$$.canvas; + var $offscreen_extra_canvas$jscomp$inline_18_txt_row_size$jscomp$inline_12$$ = $offscreen_extra_context$$.canvas, $col_i$jscomp$inline_15_txt_row_size$jscomp$inline_19$$ = 4 * $text_mode_width$$; + const $gfx_width$jscomp$inline_20$$ = $text_mode_width$$ * $font_width$$, $row_extra_2_y$jscomp$inline_22$$ = $font_height$$; + let $n_rows_rendered$jscomp$inline_23$$ = 0; + for (let $row_i$jscomp$inline_24$$ = 0, $row_y$jscomp$inline_25$$ = 0, $txt_i$jscomp$inline_26$$ = 0; $row_i$jscomp$inline_24$$ < $text_mode_height$$; ++$row_i$jscomp$inline_24$$, $row_y$jscomp$inline_25$$ += $font_height$$) { + if (!$changed_rows$$[$row_i$jscomp$inline_24$$]) { + $txt_i$jscomp$inline_26$$ += $col_i$jscomp$inline_15_txt_row_size$jscomp$inline_19$$; + continue; + } + ++$n_rows_rendered$jscomp$inline_23$$; + $offscreen_extra_context$$.clearRect(0, $row_extra_2_y$jscomp$inline_22$$, $gfx_width$jscomp$inline_20$$, $font_height$$); + let $fg_rgba$jscomp$inline_27$$, $fg_x$jscomp$inline_28$$, $bg_rgba$jscomp$inline_29$$, $bg_x$jscomp$inline_30$$; + for (let $col_x$jscomp$inline_31$$ = 0; $col_x$jscomp$inline_31$$ < $gfx_width$jscomp$inline_20$$; $col_x$jscomp$inline_31$$ += $font_width$$, $txt_i$jscomp$inline_26$$ += 4) { + const $chr$jscomp$inline_32$$ = $text_mode_data$$[$txt_i$jscomp$inline_26$$ + 0]; + var $chr_flags$jscomp$inline_33_chr_visible$jscomp$inline_37$$ = $text_mode_data$$[$txt_i$jscomp$inline_26$$ + 1]; + const $chr_bg_rgba$jscomp$inline_34$$ = $text_mode_data$$[$txt_i$jscomp$inline_26$$ + 2], $chr_fg_rgba$jscomp$inline_35$$ = $text_mode_data$$[$txt_i$jscomp$inline_26$$ + 3], $chr_font_page$jscomp$inline_36$$ = $chr_flags$jscomp$inline_33_chr_visible$jscomp$inline_37$$ & 2 ? $font_page_b$$ : $font_page_a$$; + $chr_flags$jscomp$inline_33_chr_visible$jscomp$inline_37$$ = (!($chr_flags$jscomp$inline_33_chr_visible$jscomp$inline_37$$ & 1) || $blink_visible$$) && $font_is_visible$$[($chr_font_page$jscomp$inline_36$$ << 8) + $chr$jscomp$inline_32$$]; + $bg_rgba$jscomp$inline_29$$ !== $chr_bg_rgba$jscomp$inline_34$$ && (void 0 !== $bg_rgba$jscomp$inline_29$$ && ($offscreen_context$$.fillStyle = $number_as_color$$($bg_rgba$jscomp$inline_29$$), $offscreen_context$$.fillRect($bg_x$jscomp$inline_30$$, $row_y$jscomp$inline_25$$, $col_x$jscomp$inline_31$$ - $bg_x$jscomp$inline_30$$, $font_height$$)), $bg_rgba$jscomp$inline_29$$ = $chr_bg_rgba$jscomp$inline_34$$, $bg_x$jscomp$inline_30$$ = $col_x$jscomp$inline_31$$); + $fg_rgba$jscomp$inline_27$$ !== $chr_fg_rgba$jscomp$inline_35$$ && (void 0 !== $fg_rgba$jscomp$inline_27$$ && ($offscreen_extra_context$$.fillStyle = $number_as_color$$($fg_rgba$jscomp$inline_27$$), $offscreen_extra_context$$.fillRect($fg_x$jscomp$inline_28$$, 0, $col_x$jscomp$inline_31$$ - $fg_x$jscomp$inline_28$$, $font_height$$)), $fg_rgba$jscomp$inline_27$$ = $chr_fg_rgba$jscomp$inline_35$$, $fg_x$jscomp$inline_28$$ = $col_x$jscomp$inline_31$$); + $chr_flags$jscomp$inline_33_chr_visible$jscomp$inline_37$$ && $offscreen_extra_context$$.drawImage($font_canvas$jscomp$inline_17_tm_now$$, $chr$jscomp$inline_32$$ * $font_width$$, $chr_font_page$jscomp$inline_36$$ * $font_height$$, $font_width$$, $font_height$$, $col_x$jscomp$inline_31$$, $row_extra_2_y$jscomp$inline_22$$, $font_width$$, $font_height$$); + } + $offscreen_extra_context$$.fillStyle = $number_as_color$$($fg_rgba$jscomp$inline_27$$); + $offscreen_extra_context$$.fillRect($fg_x$jscomp$inline_28$$, 0, $gfx_width$jscomp$inline_20$$ - $fg_x$jscomp$inline_28$$, $font_height$$); + $offscreen_extra_context$$.globalCompositeOperation = "destination-in"; + $offscreen_extra_context$$.drawImage($offscreen_extra_canvas$jscomp$inline_18_txt_row_size$jscomp$inline_12$$, 0, $row_extra_2_y$jscomp$inline_22$$, $gfx_width$jscomp$inline_20$$, $font_height$$, 0, 0, $gfx_width$jscomp$inline_20$$, $font_height$$); + $offscreen_extra_context$$.globalCompositeOperation = "source-over"; + $offscreen_context$$.fillStyle = $number_as_color$$($bg_rgba$jscomp$inline_29$$); + $offscreen_context$$.fillRect($bg_x$jscomp$inline_30$$, $row_y$jscomp$inline_25$$, $gfx_width$jscomp$inline_20$$ - $bg_x$jscomp$inline_30$$, $font_height$$); + $offscreen_context$$.drawImage($offscreen_extra_canvas$jscomp$inline_18_txt_row_size$jscomp$inline_12$$, 0, 0, $gfx_width$jscomp$inline_20$$, $font_height$$, 0, $row_y$jscomp$inline_25$$, $gfx_width$jscomp$inline_20$$, $font_height$$); + } + $n_rows_rendered$jscomp$inline_23$$ && ($blink_visible$$ && $cursor_enabled$$ && $changed_rows$$[$cursor_row$$] && ($offscreen_context$$.fillStyle = $number_as_color$$($text_mode_data$$[4 * ($cursor_row$$ * $text_mode_width$$ + $cursor_col$$) + 3]), $offscreen_context$$.fillRect($cursor_col$$ * $font_width$$, $cursor_row$$ * $font_height$$ + $cursor_start$$, $font_width$$, $cursor_end$$ - $cursor_start$$ + 1)), $changed_rows$$.fill(0)); + $n_rows_rendered$jscomp$inline_23$$ && $graphic_context$$.drawImage($offscreen_context$$.canvas, 0, 0); + } + }; + this.destroy = function() { + $timer_id$$ && (cancelAnimationFrame($timer_id$$), $timer_id$$ = 0); + }; + this.pause = function() { + $paused$$ = !0; + $cursor_element$$.classList.remove("blinking-cursor"); + }; + this.continue = function() { + $paused$$ = !1; + $cursor_element$$.classList.add("blinking-cursor"); + }; + this.set_mode = function($graphical$$) { + $mode$jscomp$15$$ = $graphical$$ ? 1 : $options$jscomp$34$$.use_graphical_text ? 2 : 0; + 0 === $mode$jscomp$15$$ ? ($text_screen$$.style.display = "block", $graphic_screen$$.style.display = "none") : ($text_screen$$.style.display = "none", $graphic_screen$$.style.display = "block", 2 === $mode$jscomp$15$$ && $changed_rows$$ && $changed_rows$$.fill(1)); + }; + this.set_font_bitmap = function($height$jscomp$25$$, $width_9px$$, $width_dbl$$, $copy_8th_col$$, $vga_bitmap$jscomp$1$$, $size_changed_vga_bitmap_changed$$) { + const $width$jscomp$28$$ = $width_dbl$$ ? 16 : $width_9px$$ ? 9 : 8; + if ($font_height$$ !== $height$jscomp$25$$ || $font_width$$ !== $width$jscomp$28$$ || $font_width_9px$$ !== $width_9px$$ || $font_width_dbl$$ !== $width_dbl$$ || $font_copy_8th_col$$ !== $copy_8th_col$$ || $size_changed_vga_bitmap_changed$$) { + $size_changed_vga_bitmap_changed$$ = $font_width$$ !== $width$jscomp$28$$ || $font_height$$ !== $height$jscomp$25$$, $font_height$$ = $height$jscomp$25$$, $font_width$$ = $width$jscomp$28$$, $font_width_9px$$ = $width_9px$$, $font_width_dbl$$ = $width_dbl$$, $font_copy_8th_col$$ = $copy_8th_col$$, 2 === $mode$jscomp$15$$ && ($render_font_bitmap$$($vga_bitmap$jscomp$1$$), $changed_rows$$.fill(1), $size_changed_vga_bitmap_changed$$ && this.set_size_graphical_text()); + } + }; + this.set_font_page = function($page_a$$, $page_b$$) { + if ($font_page_a$$ !== $page_a$$ || $font_page_b$$ !== $page_b$$) { + $font_page_a$$ = $page_a$$, $font_page_b$$ = $page_b$$, $changed_rows$$.fill(1); + } + }; + this.clear_screen = function() { + $graphic_context$$.fillStyle = "#000"; + $graphic_context$$.fillRect(0, 0, $graphic_screen$$.width, $graphic_screen$$.height); + }; + this.set_size_graphical_text = function() { + if ($font_context$$) { + var $gfx_width$jscomp$1$$ = $font_width$$ * $text_mode_width$$, $gfx_height$$ = $font_height$$ * $text_mode_height$$, $offscreen_extra_height$$ = 2 * $font_height$$; + $offscreen_context$$ && $offscreen_context$$.canvas.width === $gfx_width$jscomp$1$$ && $offscreen_context$$.canvas.height === $gfx_height$$ && $offscreen_extra_context$$.canvas.height === $offscreen_extra_height$$ || ($offscreen_context$$ ? ($offscreen_context$$.canvas.width = $gfx_width$jscomp$1$$, $offscreen_context$$.canvas.height = $gfx_height$$, $offscreen_extra_context$$.canvas.width = $gfx_width$jscomp$1$$, $offscreen_extra_context$$.canvas.height = $offscreen_extra_height$$) : ($offscreen_context$$ = + (new OffscreenCanvas($gfx_width$jscomp$1$$, $gfx_height$$)).getContext("2d", {alpha:!1}), $offscreen_extra_context$$ = (new OffscreenCanvas($gfx_width$jscomp$1$$, $offscreen_extra_height$$)).getContext("2d")), this.set_size_graphical($gfx_width$jscomp$1$$, $gfx_height$$, $gfx_width$jscomp$1$$, $gfx_height$$), $changed_rows$$.fill(1)); + } + }; + this.set_size_text = function($cols_i$jscomp$5$$, $rows$$) { + if ($cols_i$jscomp$5$$ !== $text_mode_width$$ || $rows$$ !== $text_mode_height$$) { + if ($changed_rows$$ = new Int8Array($rows$$), $text_mode_data$$ = new Int32Array($cols_i$jscomp$5$$ * $rows$$ * 4), $text_mode_width$$ = $cols_i$jscomp$5$$, $text_mode_height$$ = $rows$$, 0 === $mode$jscomp$15$$) { + for (; $text_screen$$.childNodes.length > $rows$$;) { + $text_screen$$.removeChild($text_screen$$.firstChild); + } + for (; $text_screen$$.childNodes.length < $rows$$;) { + $text_screen$$.appendChild(document.createElement("div")); + } + for ($cols_i$jscomp$5$$ = 0; $cols_i$jscomp$5$$ < $rows$$; $cols_i$jscomp$5$$++) { + this.text_update_row($cols_i$jscomp$5$$); + } + $elem_set_scale$$($text_screen$$, $scale_x$$, $scale_y$$, !0); + } else { + 2 === $mode$jscomp$15$$ && this.set_size_graphical_text(); + } + } + }; + this.set_size_graphical = function($width$jscomp$29$$, $height$jscomp$26$$) { + $graphic_screen$$.style.display = "block"; + $graphic_screen$$.width = $width$jscomp$29$$; + $graphic_screen$$.height = $height$jscomp$26$$; + $graphic_context$$.imageSmoothingEnabled = !1; + $base_scale$$ = 640 >= $width$jscomp$29$$ && 2 * $width$jscomp$29$$ < window.innerWidth * window.devicePixelRatio && 2 * $height$jscomp$26$$ < window.innerHeight * window.devicePixelRatio ? 2 : 1; + $elem_set_scale$$($graphic_screen$$, $scale_x$$ * $base_scale$$, $scale_y$$ * $base_scale$$, !1); + }; + this.set_charmap = function($text_charmap$$) { + $charmap$$ = $text_charmap$$ || $charmap_default$$; + }; + this.set_scale = function($s_x$$, $s_y$$) { + $scale_x$$ = $s_x$$; + $scale_y$$ = $s_y$$; + $elem_set_scale$$($text_screen$$, $scale_x$$, $scale_y$$, !0); + $elem_set_scale$$($graphic_screen$$, $scale_x$$ * $base_scale$$, $scale_y$$ * $base_scale$$, !1); + }; + this.update_cursor_scanline = function($start$jscomp$13$$, $end$jscomp$9$$, $enabled$$) { + if ($start$jscomp$13$$ !== $cursor_start$$ || $end$jscomp$9$$ !== $cursor_end$$ || $enabled$$ !== $cursor_enabled$$) { + 0 === $mode$jscomp$15$$ ? $enabled$$ ? ($cursor_element$$.style.display = "inline", $cursor_element$$.style.height = $end$jscomp$9$$ - $start$jscomp$13$$ + "px", $cursor_element$$.style.marginTop = $start$jscomp$13$$ + "px") : $cursor_element$$.style.display = "none" : 2 === $mode$jscomp$15$$ && $cursor_row$$ < $text_mode_height$$ && ($changed_rows$$[$cursor_row$$] = 1), $cursor_start$$ = $start$jscomp$13$$, $cursor_end$$ = $end$jscomp$9$$, $cursor_enabled$$ = $enabled$$; + } + }; + this.update_cursor = function($row$jscomp$1$$, $col$jscomp$1$$) { + if ($row$jscomp$1$$ !== $cursor_row$$ || $col$jscomp$1$$ !== $cursor_col$$) { + $row$jscomp$1$$ < $text_mode_height$$ && ($changed_rows$$[$row$jscomp$1$$] = 1), $cursor_row$$ < $text_mode_height$$ && ($changed_rows$$[$cursor_row$$] = 1), $cursor_row$$ = $row$jscomp$1$$, $cursor_col$$ = $col$jscomp$1$$; + } + }; + this.text_update_row = function($row$jscomp$2$$) { + var $offset$jscomp$26$$ = 4 * $row$jscomp$2$$ * $text_mode_width$$, $text$jscomp$10$$; + var $row_element$$ = $text_screen$$.childNodes[$row$jscomp$2$$]; + var $fragment$$ = document.createElement("div"); + for (var $i$jscomp$6$$ = 0; $i$jscomp$6$$ < $text_mode_width$$;) { + var $color_element$$ = document.createElement("span"); + var $blinking$$ = $text_mode_data$$[$offset$jscomp$26$$ + 1] & 1; + var $bg_color$jscomp$2$$ = $text_mode_data$$[$offset$jscomp$26$$ + 2]; + var $fg_color$jscomp$2$$ = $text_mode_data$$[$offset$jscomp$26$$ + 3]; + $blinking$$ && $color_element$$.classList.add("blink"); + $color_element$$.style.backgroundColor = $number_as_color$$($bg_color$jscomp$2$$); + $color_element$$.style.color = $number_as_color$$($fg_color$jscomp$2$$); + for ($text$jscomp$10$$ = ""; $i$jscomp$6$$ < $text_mode_width$$ && ($text_mode_data$$[$offset$jscomp$26$$ + 1] & 1) === $blinking$$ && $text_mode_data$$[$offset$jscomp$26$$ + 2] === $bg_color$jscomp$2$$ && $text_mode_data$$[$offset$jscomp$26$$ + 3] === $fg_color$jscomp$2$$;) { + var $ascii$$ = $text_mode_data$$[$offset$jscomp$26$$ + 0]; + $text$jscomp$10$$ += $charmap$$[$ascii$$]; + $dbg_assert$$($charmap$$[$ascii$$]); + $i$jscomp$6$$++; + $offset$jscomp$26$$ += 4; + if ($row$jscomp$2$$ === $cursor_row$$) { + if ($i$jscomp$6$$ === $cursor_col$$) { + break; + } else { + if ($i$jscomp$6$$ === $cursor_col$$ + 1) { + $cursor_element$$.style.backgroundColor = $color_element$$.style.color; + $fragment$$.appendChild($cursor_element$$); + break; + } + } + } + } + $color_element$$.textContent = $text$jscomp$10$$; + $fragment$$.appendChild($color_element$$); + } + $row_element$$.parentNode.replaceChild($fragment$$, $row_element$$); + }; + this.update_buffer = function($layers$$) { + for (const $layer$jscomp$3$$ of $layers$$) { + $graphic_context$$.putImageData($layer$jscomp$3$$.image_data, $layer$jscomp$3$$.screen_x - $layer$jscomp$3$$.buffer_x, $layer$jscomp$3$$.screen_y - $layer$jscomp$3$$.buffer_y, $layer$jscomp$3$$.buffer_x, $layer$jscomp$3$$.buffer_y, $layer$jscomp$3$$.buffer_width, $layer$jscomp$3$$.buffer_height); + } + }; + this.get_text_screen = function() { + for (var $screen$jscomp$1$$ = [], $i$jscomp$7$$ = 0; $i$jscomp$7$$ < $text_mode_height$$; $i$jscomp$7$$++) { + $screen$jscomp$1$$.push(this.get_text_row($i$jscomp$7$$)); + } + return $screen$jscomp$1$$; + }; + this.get_text_row = function($y$jscomp$74$$) { + let $result$jscomp$1$$ = ""; + for (let $x$jscomp$89$$ = 0; $x$jscomp$89$$ < $text_mode_width$$; $x$jscomp$89$$++) { + $result$jscomp$1$$ += $charmap$$[$text_mode_data$$[4 * ($y$jscomp$74$$ * $text_mode_width$$ + $x$jscomp$89$$)]]; + } + return $result$jscomp$1$$; + }; + this.init(); +} +;const $P9_LOCK_TYPES$$ = ["shared", "exclusive", "unlock"]; +function $Virtio9p$$($filesystem$$, $cpu$$, $bus$$) { + this.fs = $filesystem$$; + this.bus = $bus$$; + this.configspace_tagname = [104, 111, 115, 116, 57, 112]; + this.configspace_taglen = this.configspace_tagname.length; + this.VERSION = "9P2000.L"; + this.msize = this.BLOCKSIZE = 8192; + this.replybuffer = new Uint8Array(2 * this.msize); + this.replybuffersize = 0; + this.fids = []; + this.virtio = new $VirtIO$$($cpu$$, {name:"virtio-9p", pci_id:48, device_id:4169, subsystem_device_id:9, common:{initial_port:43008, queues:[{size_supported:32, notify_offset:0, }, ], features:[0, 32, 29, 28, ], on_driver_ok:() => { + }, }, notification:{initial_port:43264, single_handler:!1, handlers:[$bufchain_queue_id$$ => { + if (0 !== $bufchain_queue_id$$) { + $dbg_assert$$(!1, "Virtio9P Notified for non-existent queue: " + $bufchain_queue_id$$ + " (expected queue_id of 0)"); + } else { + for (; this.virtqueue.has_request();) { + $bufchain_queue_id$$ = this.virtqueue.pop_request(), this.ReceiveRequest($bufchain_queue_id$$); + } + this.virtqueue.notify_me_after(0); + } + }, ], }, isr_status:{initial_port:42752, }, device_specific:{initial_port:42496, struct:[{bytes:2, name:"mount tag length", read:() => this.configspace_taglen, write:() => { + }, }, ].concat($v86util$$.range(254).map($index$jscomp$75$$ => ({bytes:1, name:"mount tag name " + $index$jscomp$75$$, read:() => this.configspace_tagname[$index$jscomp$75$$] || 0, write:() => { + }, }))), }, }); + this.virtqueue = this.virtio.queues[0]; +} +$Virtio9p$$.prototype.get_state = function() { + var $state$$ = []; + $state$$[0] = this.configspace_tagname; + $state$$[1] = this.configspace_taglen; + $state$$[2] = this.virtio; + $state$$[3] = this.VERSION; + $state$$[4] = this.BLOCKSIZE; + $state$$[5] = this.msize; + $state$$[6] = this.replybuffer; + $state$$[7] = this.replybuffersize; + $state$$[8] = this.fids.map(function($f$jscomp$1$$) { + return [$f$jscomp$1$$.inodeid, $f$jscomp$1$$.type, $f$jscomp$1$$.uid, $f$jscomp$1$$.dbg_name]; + }); + $state$$[9] = this.fs; + return $state$$; +}; +$Virtio9p$$.prototype.set_state = function($state$jscomp$1$$) { + this.configspace_tagname = $state$jscomp$1$$[0]; + this.configspace_taglen = $state$jscomp$1$$[1]; + this.virtio.set_state($state$jscomp$1$$[2]); + this.virtqueue = this.virtio.queues[0]; + this.VERSION = $state$jscomp$1$$[3]; + this.BLOCKSIZE = $state$jscomp$1$$[4]; + this.msize = $state$jscomp$1$$[5]; + this.replybuffer = $state$jscomp$1$$[6]; + this.replybuffersize = $state$jscomp$1$$[7]; + this.fids = $state$jscomp$1$$[8].map(function($f$jscomp$2$$) { + return {inodeid:$f$jscomp$2$$[0], type:$f$jscomp$2$$[1], uid:$f$jscomp$2$$[2], dbg_name:$f$jscomp$2$$[3]}; + }); + this.fs.set_state($state$jscomp$1$$[9]); +}; +$Virtio9p$$.prototype.Createfid = function($inodeid$$, $type$jscomp$148$$, $uid$$, $dbg_name$$) { + return {inodeid:$inodeid$$, type:$type$jscomp$148$$, uid:$uid$$, dbg_name:$dbg_name$$}; +}; +$Virtio9p$$.prototype.update_dbg_name = function($idx$$, $newname$$) { + for (const $fid$$ of this.fids) { + $fid$$.inodeid === $idx$$ && ($fid$$.dbg_name = $newname$$); + } +}; +$Virtio9p$$.prototype.reset = function() { + this.fids = []; + this.virtio.reset(); +}; +$Virtio9p$$.prototype.BuildReply = function($id$jscomp$5$$, $tag$jscomp$1$$, $payloadsize$$) { + $dbg_assert$$(0 <= $payloadsize$$, "9P: Negative payload size"); + $marshall$$.Marshall(["w", "b", "h"], [$payloadsize$$ + 7, $id$jscomp$5$$ + 1, $tag$jscomp$1$$], this.replybuffer, 0); + $payloadsize$$ + 7 >= this.replybuffer.length && $message$$.Debug("Error in 9p: payloadsize exceeds maximum length"); + this.replybuffersize = $payloadsize$$ + 7; +}; +$Virtio9p$$.prototype.SendError = function($tag$jscomp$2$$, $errormsg_size$jscomp$21$$, $errorcode$$) { + $errormsg_size$jscomp$21$$ = $marshall$$.Marshall(["w"], [$errorcode$$], this.replybuffer, 7); + this.BuildReply(6, $tag$jscomp$2$$, $errormsg_size$jscomp$21$$); +}; +$Virtio9p$$.prototype.SendReply = function($bufchain$jscomp$1$$) { + $dbg_assert$$(0 <= this.replybuffersize, "9P: Negative replybuffersize"); + $bufchain$jscomp$1$$.set_next_blob(this.replybuffer.subarray(0, this.replybuffersize)); + this.virtqueue.push_reply($bufchain$jscomp$1$$); + this.virtqueue.flush_replies(); +}; +$Virtio9p$$.prototype.ReceiveRequest = async function($bufchain$jscomp$2$$) { + var $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = new Uint8Array($bufchain$jscomp$2$$.length_readable); + $bufchain$jscomp$2$$.get_next_blob($buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$); + var $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ = {offset:0}, $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "b", "h"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$), $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0], $id$jscomp$6$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1], $tag$jscomp$3$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + switch($id$jscomp$6$$) { + case 8: + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = this.fs.GetTotalSize(); + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = this.fs.GetSpace(); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = [16914839]; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] = this.BLOCKSIZE; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2] = Math.floor($buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ / $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[3] = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2] - Math.floor($error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ / $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[4] = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2] - Math.floor($error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ / $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[5] = this.fs.CountUsedInodes(); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[6] = this.fs.CountFreeInodes(); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[7] = 0; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[8] = 256; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $marshall$$.Marshall("wwddddddw".split(""), $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$, this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$); + this.SendReply($bufchain$jscomp$2$$); + break; + case 112: + case 12: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "w"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + var $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]; + $message$$.Debug("[open] fid=" + $fid$jscomp$1$$ + ", mode=" + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = this.fids[$fid$jscomp$1$$].inodeid; + var $inode$$ = this.fs.GetInode($buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$); + $message$$.Debug("file open " + this.fids[$fid$jscomp$1$$].dbg_name); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = this.fs.OpenInode($buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + this.fs.AddEvent(this.fids[$fid$jscomp$1$$].inodeid, function() { + $message$$.Debug("file opened " + this.fids[$fid$jscomp$1$$].dbg_name + " tag:" + $tag$jscomp$3$$); + var $req$jscomp$1$$ = []; + $req$jscomp$1$$[0] = $inode$$.qid; + $req$jscomp$1$$[1] = this.msize - 24; + $marshall$$.Marshall(["Q", "w"], $req$jscomp$1$$, this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 17); + this.SendReply($bufchain$jscomp$2$$); + }.bind(this)); + break; + case 70: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "w", "s"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + $message$$.Debug("[link] dfid=" + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ + ", name=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = this.fs.Link(this.fids[$buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$].inodeid, this.fids[$fid$jscomp$1$$].inodeid, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$); + if (0 > $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$) { + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = ""; + -1 === $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ ? $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = "Operation not permitted" : ($error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = + "Unknown error: " + -$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$, $dbg_assert$$(!1, "[link]: Unexpected error code: " + -$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$)); + this.SendError($tag$jscomp$3$$, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, -$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$); + this.SendReply($bufchain$jscomp$2$$); + break; + } + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 0); + this.SendReply($bufchain$jscomp$2$$); + break; + case 16: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "s", "s", "w"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]; + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[3]; + $message$$.Debug("[symlink] fid=" + $fid$jscomp$1$$ + ", name=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ + ", symgt=" + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ + ", gid=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$); + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = this.fs.CreateSymlink($error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, this.fids[$fid$jscomp$1$$].inodeid, $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$); + $inode$$ = this.fs.GetInode($buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$); + $inode$$.uid = this.fids[$fid$jscomp$1$$].uid; + $inode$$.gid = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$; + $marshall$$.Marshall(["Q"], [$inode$$.qid], this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 13); + this.SendReply($bufchain$jscomp$2$$); + break; + case 18: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall("wswwww".split(""), $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]; + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[3]; + var $count$jscomp$39_minor_nwfid$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[4]; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[5]; + $message$$.Debug("[mknod] fid=" + $fid$jscomp$1$$ + ", name=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ + ", major=" + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ + ", minor=" + $count$jscomp$39_minor_nwfid$$); + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = this.fs.CreateNode($error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, this.fids[$fid$jscomp$1$$].inodeid, $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $count$jscomp$39_minor_nwfid$$); + $inode$$ = this.fs.GetInode($buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$); + $inode$$.mode = $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$; + $inode$$.uid = this.fids[$fid$jscomp$1$$].uid; + $inode$$.gid = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$; + $marshall$$.Marshall(["Q"], [$inode$$.qid], this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 13); + this.SendReply($bufchain$jscomp$2$$); + break; + case 22: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $inode$$ = this.fs.GetInode(this.fids[$fid$jscomp$1$$].inodeid); + $message$$.Debug("[readlink] fid=" + $fid$jscomp$1$$ + " name=" + this.fids[$fid$jscomp$1$$].dbg_name + " target=" + $inode$$.symlink); + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $marshall$$.Marshall(["s"], [$inode$$.symlink], this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$); + this.SendReply($bufchain$jscomp$2$$); + break; + case 72: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "s", "w", "w"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]; + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[3]; + $message$$.Debug("[mkdir] fid=" + $fid$jscomp$1$$ + ", name=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ + ", mode=" + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ + ", gid=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$); + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = this.fs.CreateDirectory($error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, this.fids[$fid$jscomp$1$$].inodeid); + $inode$$ = this.fs.GetInode($buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$); + $inode$$.mode = $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ | $S_IFDIR$$; + $inode$$.uid = this.fids[$fid$jscomp$1$$].uid; + $inode$$.gid = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$; + $marshall$$.Marshall(["Q"], [$inode$$.qid], this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 13); + this.SendReply($bufchain$jscomp$2$$); + break; + case 14: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "s", "w", "w", "w"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]; + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[3]; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[4]; + this.bus.send("9p-create", [$error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, this.fids[$fid$jscomp$1$$].inodeid]); + $message$$.Debug("[create] fid=" + $fid$jscomp$1$$ + ", name=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ + ", flags=" + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ + ", mode=" + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ + ", gid=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$); + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = this.fs.CreateFile($error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, this.fids[$fid$jscomp$1$$].inodeid); + this.fids[$fid$jscomp$1$$].inodeid = $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$; + this.fids[$fid$jscomp$1$$].type = 1; + this.fids[$fid$jscomp$1$$].dbg_name = $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$; + $inode$$ = this.fs.GetInode($buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$); + $inode$$.uid = this.fids[$fid$jscomp$1$$].uid; + $inode$$.gid = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$; + $inode$$.mode = $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ | $S_IFREG$$; + $marshall$$.Marshall(["Q", "w"], [$inode$$.qid, this.msize - 24], this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 17); + this.SendReply($bufchain$jscomp$2$$); + break; + case 52: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall("wbwddws".split(""), $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = 0 === $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[4] ? Infinity : $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[4]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = this.fs.DescribeLock($data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1], $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[3], $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[5], $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[6]); + $message$$.Debug("[lock] fid=" + $fid$jscomp$1$$ + ", type=" + $P9_LOCK_TYPES$$[$error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$.type] + ", start=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$.start + ", length=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$.length + + ", proc_id=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$.proc_id); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = this.fs.Lock(this.fids[$fid$jscomp$1$$].inodeid, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$); + $marshall$$.Marshall(["b"], [$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$], this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 1); + this.SendReply($bufchain$jscomp$2$$); + break; + case 54: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall("wbddws".split(""), $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = 0 === $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[3] ? Infinity : $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[3]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = this.fs.DescribeLock($data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1], $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2], $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[4], $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[5]); + $message$$.Debug("[getlock] fid=" + $fid$jscomp$1$$ + ", type=" + $P9_LOCK_TYPES$$[$error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$.type] + ", start=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$.start + ", length=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$.length + + ", proc_id=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$.proc_id); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = this.fs.GetLock(this.fids[$fid$jscomp$1$$].inodeid, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ || ($data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$.type = + 2); + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $marshall$$.Marshall(["b", "d", "d", "w", "s"], [$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$.type, $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$.start, Infinity === $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$.length ? + 0 : $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$.length, $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$.proc_id, $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$.client_id], this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$); + this.SendReply($bufchain$jscomp$2$$); + break; + case 24: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "d"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $inode$$ = this.fs.GetInode(this.fids[$fid$jscomp$1$$].inodeid); + $message$$.Debug("[getattr]: fid=" + $fid$jscomp$1$$ + " name=" + this.fids[$fid$jscomp$1$$].dbg_name + " request mask=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]); + if (!$inode$$ || $inode$$.status === $STATUS_UNLINKED$$) { + $message$$.Debug("getattr: unlinked"); + this.SendError($tag$jscomp$3$$, "No such file or directory", 2); + this.SendReply($bufchain$jscomp$2$$); + break; + } + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0] = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] = $inode$$.qid; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2] = $inode$$.mode; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[3] = $inode$$.uid; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[4] = $inode$$.gid; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[5] = $inode$$.nlinks; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[6] = $inode$$.major << 8 | $inode$$.minor; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[7] = $inode$$.size; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[8] = this.BLOCKSIZE; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[9] = Math.floor($inode$$.size / 512 + 1); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[10] = $inode$$.atime; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[11] = 0; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[12] = $inode$$.mtime; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[13] = 0; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[14] = $inode$$.ctime; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[15] = 0; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[16] = 0; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[17] = 0; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[18] = 0; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[19] = 0; + $marshall$$.Marshall("dQwwwddddddddddddddd".split(""), $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$, this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 153); + this.SendReply($bufchain$jscomp$2$$); + break; + case 26: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall("wwwwwddddd".split(""), $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $inode$$ = this.fs.GetInode(this.fids[$fid$jscomp$1$$].inodeid); + $message$$.Debug("[setattr]: fid=" + $fid$jscomp$1$$ + " request mask=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] + " name=" + this.fids[$fid$jscomp$1$$].dbg_name); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] & 1 && ($inode$$.mode = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] & 2 && ($inode$$.uid = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[3]); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] & 4 && ($inode$$.gid = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[4]); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] & 16 && ($inode$$.atime = Math.floor((new Date).getTime() / 1000)); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] & 32 && ($inode$$.mtime = Math.floor((new Date).getTime() / 1000)); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] & 64 && ($inode$$.ctime = Math.floor((new Date).getTime() / 1000)); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] & 128 && ($inode$$.atime = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[6]); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] & 256 && ($inode$$.mtime = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[8]); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] & 8 && await this.fs.ChangeSize(this.fids[$fid$jscomp$1$$].inodeid, $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[5]); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 0); + this.SendReply($bufchain$jscomp$2$$); + break; + case 50: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "d"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 0); + this.SendReply($bufchain$jscomp$2$$); + break; + case 40: + case 116: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "d", "w"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]; + $count$jscomp$39_minor_nwfid$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + $inode$$ = this.fs.GetInode(this.fids[$fid$jscomp$1$$].inodeid); + 40 === $id$jscomp$6$$ && $message$$.Debug("[treaddir]: fid=" + $fid$jscomp$1$$ + " offset=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ + " count=" + $count$jscomp$39_minor_nwfid$$); + 116 === $id$jscomp$6$$ && $message$$.Debug("[read]: fid=" + $fid$jscomp$1$$ + " (" + this.fids[$fid$jscomp$1$$].dbg_name + ") offset=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ + " count=" + $count$jscomp$39_minor_nwfid$$ + " fidtype=" + this.fids[$fid$jscomp$1$$].type); + if (!$inode$$ || $inode$$.status === $STATUS_UNLINKED$$) { + $message$$.Debug("read/treaddir: unlinked"); + this.SendError($tag$jscomp$3$$, "No such file or directory", 2); + this.SendReply($bufchain$jscomp$2$$); + break; + } + if (2 === this.fids[$fid$jscomp$1$$].type) { + for ($inode$$.caps.length < $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ + $count$jscomp$39_minor_nwfid$$ && ($count$jscomp$39_minor_nwfid$$ = $inode$$.caps.length - $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$), $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = + 0; $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ < $count$jscomp$39_minor_nwfid$$; $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$++) { + this.replybuffer[11 + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$] = $inode$$.caps[$error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$]; + } + } else { + this.fs.OpenInode(this.fids[$fid$jscomp$1$$].inodeid, void 0), $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = this.fids[$fid$jscomp$1$$].inodeid, $count$jscomp$39_minor_nwfid$$ = Math.min($count$jscomp$39_minor_nwfid$$, this.replybuffer.length - 11), $inode$$.size < $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ + + $count$jscomp$39_minor_nwfid$$ ? $count$jscomp$39_minor_nwfid$$ = $inode$$.size - $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ : 40 === $id$jscomp$6$$ && ($count$jscomp$39_minor_nwfid$$ = this.fs.RoundToDirentry($data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ + + $count$jscomp$39_minor_nwfid$$) - $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$), $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ > $inode$$.size && ($count$jscomp$39_minor_nwfid$$ = 0), this.bus.send("9p-read-start", [this.fids[$fid$jscomp$1$$].dbg_name]), + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = await this.fs.Read($data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, $count$jscomp$39_minor_nwfid$$), this.bus.send("9p-read-end", + [this.fids[$fid$jscomp$1$$].dbg_name, $count$jscomp$39_minor_nwfid$$]), $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ && this.replybuffer.set($data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$, 11); + } + $marshall$$.Marshall(["w"], [$count$jscomp$39_minor_nwfid$$], this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 4 + $count$jscomp$39_minor_nwfid$$); + this.SendReply($bufchain$jscomp$2$$); + break; + case 118: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "d", "w"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]; + $count$jscomp$39_minor_nwfid$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = this.fids[$fid$jscomp$1$$].dbg_name; + $message$$.Debug("[write]: fid=" + $fid$jscomp$1$$ + " (" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ + ") offset=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ + " count=" + $count$jscomp$39_minor_nwfid$$ + " fidtype=" + this.fids[$fid$jscomp$1$$].type); + if (2 === this.fids[$fid$jscomp$1$$].type) { + this.SendError($tag$jscomp$3$$, "Setxattr not supported", 95); + this.SendReply($bufchain$jscomp$2$$); + break; + } else { + await this.fs.Write(this.fids[$fid$jscomp$1$$].inodeid, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, $count$jscomp$39_minor_nwfid$$, $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$.subarray($attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$.offset)); + } + this.bus.send("9p-write-end", [$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$, $count$jscomp$39_minor_nwfid$$]); + $marshall$$.Marshall(["w"], [$count$jscomp$39_minor_nwfid$$], this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 4); + this.SendReply($bufchain$jscomp$2$$); + break; + case 74: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "s", "w", "s"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]; + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[3]; + $message$$.Debug("[renameat]: oldname=" + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ + " newname=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$); + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = await this.fs.Rename(this.fids[$error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$].inodeid, $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, this.fids[$attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$].inodeid, + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$); + if (0 > $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$) { + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = ""; + -2 === $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ ? $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = "No such file or directory" : -1 === $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ ? $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = + "Operation not permitted" : -39 === $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ ? $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = "Directory not empty" : ($error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = + "Unknown error: " + -$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$, $dbg_assert$$(!1, "[renameat]: Unexpected error code: " + -$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$)); + this.SendError($tag$jscomp$3$$, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, -$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$); + this.SendReply($bufchain$jscomp$2$$); + break; + } + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 0); + this.SendReply($bufchain$jscomp$2$$); + break; + case 76: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "s", "w"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]; + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + $message$$.Debug("[unlink]: dirfd=" + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ + " name=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ + " flags=" + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$); + $fid$jscomp$1$$ = this.fs.Search(this.fids[$attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$].inodeid, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$); + if (-1 === $fid$jscomp$1$$) { + this.SendError($tag$jscomp$3$$, "No such file or directory", 2); + this.SendReply($bufchain$jscomp$2$$); + break; + } + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = this.fs.Unlink(this.fids[$attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$].inodeid, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$); + if (0 > $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$) { + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = ""; + -39 === $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ ? $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = "Directory not empty" : -1 === $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ ? $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = + "Operation not permitted" : ($error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = "Unknown error: " + -$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$, $dbg_assert$$(!1, "[unlink]: Unexpected error code: " + -$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$)); + this.SendError($tag$jscomp$3$$, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, -$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$); + this.SendReply($bufchain$jscomp$2$$); + break; + } + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 0); + this.SendReply($bufchain$jscomp$2$$); + break; + case 100: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "s"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $message$$.Debug("[version]: msize=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0] + " version=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]); + this.msize !== $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0] && (this.msize = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0], this.replybuffer = new Uint8Array(Math.min(16777216, 2 * this.msize))); + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $marshall$$.Marshall(["w", "s"], [this.msize, this.VERSION], this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$); + this.SendReply($bufchain$jscomp$2$$); + break; + case 104: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "w", "s", "s", "w"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[4]; + $message$$.Debug("[attach]: fid=" + $fid$jscomp$1$$ + " afid=" + $h$$($data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]) + " uname=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2] + " aname=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[3]); + this.fids[$fid$jscomp$1$$] = this.Createfid(0, 1, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, ""); + $inode$$ = this.fs.GetInode(this.fids[$fid$jscomp$1$$].inodeid); + $marshall$$.Marshall(["Q"], [$inode$$.qid], this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 13); + this.SendReply($bufchain$jscomp$2$$); + this.bus.send("9p-attach"); + break; + case 108: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["h"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $message$$.Debug("[flush] " + $tag$jscomp$3$$); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 0); + this.SendReply($bufchain$jscomp$2$$); + break; + case 110: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "w", "h"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $count$jscomp$39_minor_nwfid$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]; + var $nwname$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + $message$$.Debug("[walk]: fid=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0] + " nwfid=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] + " nwname=" + $nwname$$); + if (0 === $nwname$$) { + this.fids[$count$jscomp$39_minor_nwfid$$] = this.Createfid(this.fids[$fid$jscomp$1$$].inodeid, 1, this.fids[$fid$jscomp$1$$].uid, this.fids[$fid$jscomp$1$$].dbg_name); + $marshall$$.Marshall(["h"], [0], this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 2); + this.SendReply($bufchain$jscomp$2$$); + break; + } + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = []; + for ($data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = 0; $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ < $nwname$$; $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$++) { + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$.push("s"); + } + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ = $marshall$$.Unmarshall($error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$, $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = this.fids[$fid$jscomp$1$$].inodeid; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = 9; + var $nwidx$$ = 0; + $message$$.Debug("walk in dir " + this.fids[$fid$jscomp$1$$].dbg_name + " to: " + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$.toString()); + for ($data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = 0; $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ < $nwname$$; $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$++) { + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = this.fs.Search($buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$[$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$]); + if (-1 === $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$) { + $message$$.Debug("Could not find: " + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$[$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$]); + break; + } + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ += $marshall$$.Marshall(["Q"], [this.fs.GetInode($buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$).qid], this.replybuffer, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$); + $nwidx$$++; + this.fids[$count$jscomp$39_minor_nwfid$$] = this.Createfid($buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, 1, this.fids[$fid$jscomp$1$$].uid, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$[$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$]); + } + $marshall$$.Marshall(["h"], [$nwidx$$], this.replybuffer, 7); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ - 7); + this.SendReply($bufchain$jscomp$2$$); + break; + case 120: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $message$$.Debug("[clunk]: fid=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]); + this.fids[$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]] && 0 <= this.fids[$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]].inodeid && (await this.fs.CloseInode(this.fids[$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]].inodeid), this.fids[$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]].inodeid = + -1, this.fids[$data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]].type = -1); + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 0); + this.SendReply($bufchain$jscomp$2$$); + break; + case 32: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "s", "d", "w"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1]; + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[3]; + $message$$.Debug("[txattrcreate]: fid=" + $fid$jscomp$1$$ + " name=" + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ + " attr_size=" + $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$ + " flags=" + $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$); + this.fids[$fid$jscomp$1$$].type = 2; + this.BuildReply($id$jscomp$6$$, $tag$jscomp$3$$, 0); + this.SendReply($bufchain$jscomp$2$$); + break; + case 30: + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$ = $marshall$$.Unmarshall(["w", "w", "s"], $buffer$jscomp$16_dfid_flags$jscomp$6_idx$jscomp$1_major_oldname_space_symgt$$, $attr_size_dirfd_mode$jscomp$16_newdirfid_state$jscomp$2_walk$$); + $fid$jscomp$1$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0]; + $error_message_error_message$jscomp$1_error_message$jscomp$2_lock_length_lock_request_name$jscomp$74_offset$jscomp$27_olddirfid_size$jscomp$22_uid$jscomp$1_wnames$$ = $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]; + $message$$.Debug("[xattrwalk]: fid=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[0] + " newfid=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[1] + " name=" + $data$jscomp$81_filename$jscomp$2_gid_header$jscomp$2_i$jscomp$8_inodeid$jscomp$1_newname$jscomp$1_req_ret_version$jscomp$4$$[2]); + this.SendError($tag$jscomp$3$$, "Setxattr not supported", 95); + this.SendReply($bufchain$jscomp$2$$); + break; + default: + $message$$.Debug("Error in Virtio9p: Unknown id " + $id$jscomp$6$$ + " received"), $message$$.Abort(); + } +}; +var $LOG_LEVEL$$ = -15786961; +function $IO$$($cpu$jscomp$1$$) { + this.ports = []; + this.cpu = $cpu$jscomp$1$$; + for (var $i$jscomp$9$$ = 0; 65536 > $i$jscomp$9$$; $i$jscomp$9$$++) { + this.ports[$i$jscomp$9$$] = this.create_empty_entry(); + } + var $memory_size$$ = $cpu$jscomp$1$$.memory_size[0]; + for ($i$jscomp$9$$ = 0; $i$jscomp$9$$ << 17 < $memory_size$$; $i$jscomp$9$$++) { + $cpu$jscomp$1$$.memory_map_read8[$i$jscomp$9$$] = $cpu$jscomp$1$$.memory_map_write8[$i$jscomp$9$$] = void 0, $cpu$jscomp$1$$.memory_map_read32[$i$jscomp$9$$] = $cpu$jscomp$1$$.memory_map_write32[$i$jscomp$9$$] = void 0; + } + this.mmap_register($memory_size$$, 4294967296 - $memory_size$$, function($addr$$) { + $dbg_log$$("Read from unmapped memory space, addr=" + $h$$($addr$$ >>> 0, 8), 32); + return 255; + }, function($addr$jscomp$1$$, $value$jscomp$93$$) { + $dbg_log$$("Write to unmapped memory space, addr=" + $h$$($addr$jscomp$1$$ >>> 0, 8) + " value=" + $h$$($value$jscomp$93$$, 2), 32); + }, function($addr$jscomp$2$$) { + $dbg_log$$("Read from unmapped memory space, addr=" + $h$$($addr$jscomp$2$$ >>> 0, 8), 32); + return -1; + }, function($addr$jscomp$3$$, $value$jscomp$94$$) { + $dbg_log$$("Write to unmapped memory space, addr=" + $h$$($addr$jscomp$3$$ >>> 0, 8) + " value=" + $h$$($value$jscomp$94$$ >>> 0, 8), 32); + }); +} +$IO$$.prototype.create_empty_entry = function() { + return {read8:this.empty_port_read8, read16:this.empty_port_read16, read32:this.empty_port_read32, write8:this.empty_port_write, write16:this.empty_port_write, write32:this.empty_port_write, device:void 0, }; +}; +$IO$$.prototype.empty_port_read8 = function() { + return 255; +}; +$IO$$.prototype.empty_port_read16 = function() { + return 65535; +}; +$IO$$.prototype.empty_port_read32 = function() { + return -1; +}; +$IO$$.prototype.empty_port_write = function() { +}; +$IO$$.prototype.register_read = function($port_addr$$, $device$$, $r8$$, $r16$$, $r32$$) { + function $fail$jscomp$2$$($n$jscomp$3$$) { + $dbg_assert$$(!1, "Overlapped read" + $n$jscomp$3$$ + " " + $h$$($port_addr$$, 4) + " (" + $device$$.name + ")"); + return -1 >>> 32 - $n$jscomp$3$$ | 0; + } + $dbg_assert$$("number" === typeof $port_addr$$); + $dbg_assert$$("object" === typeof $device$$); + $dbg_assert$$(!$r8$$ || "function" === typeof $r8$$); + $dbg_assert$$(!$r16$$ || "function" === typeof $r16$$); + $dbg_assert$$(!$r32$$ || "function" === typeof $r32$$); + $dbg_assert$$($r8$$ || $r16$$ || $r32$$); + $r8$$ || ($r8$$ = $fail$jscomp$2$$.bind(this, 8)); + $r16$$ || ($r16$$ = $fail$jscomp$2$$.bind(this, 16)); + $r32$$ || ($r32$$ = $fail$jscomp$2$$.bind(this, 32)); + $r8$$ && (this.ports[$port_addr$$].read8 = $r8$$); + $r16$$ && (this.ports[$port_addr$$].read16 = $r16$$); + $r32$$ && (this.ports[$port_addr$$].read32 = $r32$$); + this.ports[$port_addr$$].device = $device$$; +}; +$IO$$.prototype.register_write = function($port_addr$jscomp$1$$, $device$jscomp$1$$, $w8$$, $w16$$, $w32$$) { + function $fail$jscomp$3$$($n$jscomp$4$$) { + $dbg_assert$$(!1, "Overlapped write" + $n$jscomp$4$$ + " " + $h$$($port_addr$jscomp$1$$) + " (" + $device$jscomp$1$$.name + ")"); + } + $dbg_assert$$("number" === typeof $port_addr$jscomp$1$$); + $dbg_assert$$("object" === typeof $device$jscomp$1$$); + $dbg_assert$$(!$w8$$ || "function" === typeof $w8$$); + $dbg_assert$$(!$w16$$ || "function" === typeof $w16$$); + $dbg_assert$$(!$w32$$ || "function" === typeof $w32$$); + $dbg_assert$$($w8$$ || $w16$$ || $w32$$); + $w8$$ || ($w8$$ = $fail$jscomp$3$$.bind(this, 8)); + $w16$$ || ($w16$$ = $fail$jscomp$3$$.bind(this, 16)); + $w32$$ || ($w32$$ = $fail$jscomp$3$$.bind(this, 32)); + $w8$$ && (this.ports[$port_addr$jscomp$1$$].write8 = $w8$$); + $w16$$ && (this.ports[$port_addr$jscomp$1$$].write16 = $w16$$); + $w32$$ && (this.ports[$port_addr$jscomp$1$$].write32 = $w32$$); + this.ports[$port_addr$jscomp$1$$].device = $device$jscomp$1$$; +}; +$IO$$.prototype.register_read_consecutive = function($port_addr$jscomp$2$$, $device$jscomp$2$$, $r8_1$$, $r8_2$$, $r8_3$$, $r8_4$$) { + function $r16_1$$() { + return $r8_1$$.call(this) | $r8_2$$.call(this) << 8; + } + function $r16_2$$() { + return $r8_3$$.call(this) | $r8_4$$.call(this) << 8; + } + function $r32$jscomp$1$$() { + return $r8_1$$.call(this) | $r8_2$$.call(this) << 8 | $r8_3$$.call(this) << 16 | $r8_4$$.call(this) << 24; + } + $dbg_assert$$(4 === arguments.length || 6 === arguments.length); + $r8_3$$ && $r8_4$$ ? (this.register_read($port_addr$jscomp$2$$, $device$jscomp$2$$, $r8_1$$, $r16_1$$, $r32$jscomp$1$$), this.register_read($port_addr$jscomp$2$$ + 1, $device$jscomp$2$$, $r8_2$$), this.register_read($port_addr$jscomp$2$$ + 2, $device$jscomp$2$$, $r8_3$$, $r16_2$$), this.register_read($port_addr$jscomp$2$$ + 3, $device$jscomp$2$$, $r8_4$$)) : (this.register_read($port_addr$jscomp$2$$, $device$jscomp$2$$, $r8_1$$, $r16_1$$), this.register_read($port_addr$jscomp$2$$ + 1, $device$jscomp$2$$, + $r8_2$$)); +}; +$IO$$.prototype.register_write_consecutive = function($port_addr$jscomp$3$$, $device$jscomp$3$$, $w8_1$$, $w8_2$$, $w8_3$$, $w8_4$$) { + function $w16_1$$($data$jscomp$82$$) { + $w8_1$$.call(this, $data$jscomp$82$$ & 255); + $w8_2$$.call(this, $data$jscomp$82$$ >> 8 & 255); + } + function $w16_2$$($data$jscomp$83$$) { + $w8_3$$.call(this, $data$jscomp$83$$ & 255); + $w8_4$$.call(this, $data$jscomp$83$$ >> 8 & 255); + } + function $w32$jscomp$1$$($data$jscomp$84$$) { + $w8_1$$.call(this, $data$jscomp$84$$ & 255); + $w8_2$$.call(this, $data$jscomp$84$$ >> 8 & 255); + $w8_3$$.call(this, $data$jscomp$84$$ >> 16 & 255); + $w8_4$$.call(this, $data$jscomp$84$$ >>> 24); + } + $dbg_assert$$(4 === arguments.length || 6 === arguments.length); + $w8_3$$ && $w8_4$$ ? (this.register_write($port_addr$jscomp$3$$, $device$jscomp$3$$, $w8_1$$, $w16_1$$, $w32$jscomp$1$$), this.register_write($port_addr$jscomp$3$$ + 1, $device$jscomp$3$$, $w8_2$$), this.register_write($port_addr$jscomp$3$$ + 2, $device$jscomp$3$$, $w8_3$$, $w16_2$$), this.register_write($port_addr$jscomp$3$$ + 3, $device$jscomp$3$$, $w8_4$$)) : (this.register_write($port_addr$jscomp$3$$, $device$jscomp$3$$, $w8_1$$, $w16_1$$), this.register_write($port_addr$jscomp$3$$ + 1, $device$jscomp$3$$, + $w8_2$$)); +}; +$IO$$.prototype.mmap_read32_shim = function($addr$jscomp$4$$) { + var $fn$$ = this.cpu.memory_map_read8[$addr$jscomp$4$$ >>> 17]; + return $fn$$($addr$jscomp$4$$) | $fn$$($addr$jscomp$4$$ + 1) << 8 | $fn$$($addr$jscomp$4$$ + 2) << 16 | $fn$$($addr$jscomp$4$$ + 3) << 24; +}; +$IO$$.prototype.mmap_write32_shim = function($addr$jscomp$5$$, $value$jscomp$95$$) { + var $fn$jscomp$1$$ = this.cpu.memory_map_write8[$addr$jscomp$5$$ >>> 17]; + $fn$jscomp$1$$($addr$jscomp$5$$, $value$jscomp$95$$ & 255); + $fn$jscomp$1$$($addr$jscomp$5$$ + 1, $value$jscomp$95$$ >> 8 & 255); + $fn$jscomp$1$$($addr$jscomp$5$$ + 2, $value$jscomp$95$$ >> 16 & 255); + $fn$jscomp$1$$($addr$jscomp$5$$ + 3, $value$jscomp$95$$ >>> 24); +}; +$IO$$.prototype.mmap_register = function($addr$jscomp$6_aligned_addr$jscomp$2$$, $size$jscomp$23$$, $read_func8$$, $write_func8$$, $read_func32$$, $write_func32$$) { + $dbg_log$$("mmap_register addr=" + $h$$($addr$jscomp$6_aligned_addr$jscomp$2$$ >>> 0, 8) + " size=" + $h$$($size$jscomp$23$$, 8), 32); + $dbg_assert$$(0 === ($addr$jscomp$6_aligned_addr$jscomp$2$$ & 131071)); + $dbg_assert$$($size$jscomp$23$$ && 0 === ($size$jscomp$23$$ & 131071)); + $read_func32$$ || ($read_func32$$ = this.mmap_read32_shim.bind(this)); + $write_func32$$ || ($write_func32$$ = this.mmap_write32_shim.bind(this)); + for ($addr$jscomp$6_aligned_addr$jscomp$2$$ >>>= 17; 0 < $size$jscomp$23$$; $addr$jscomp$6_aligned_addr$jscomp$2$$++) { + this.cpu.memory_map_read8[$addr$jscomp$6_aligned_addr$jscomp$2$$] = $read_func8$$, this.cpu.memory_map_write8[$addr$jscomp$6_aligned_addr$jscomp$2$$] = $write_func8$$, this.cpu.memory_map_read32[$addr$jscomp$6_aligned_addr$jscomp$2$$] = $read_func32$$, this.cpu.memory_map_write32[$addr$jscomp$6_aligned_addr$jscomp$2$$] = $write_func32$$, $size$jscomp$23$$ -= 131072; + } +}; +$IO$$.prototype.port_write8 = function($port_addr$jscomp$4$$, $data$jscomp$85$$) { + var $entry$$ = this.ports[$port_addr$jscomp$4$$]; + $entry$$.write8 === this.empty_port_write && $dbg_log$$("write8 port #" + $h$$($port_addr$jscomp$4$$, 4) + " <- " + $h$$($data$jscomp$85$$, 2) + this.get_port_description($port_addr$jscomp$4$$), 32); + return $entry$$.write8.call($entry$$.device, $data$jscomp$85$$); +}; +$IO$$.prototype.port_write16 = function($port_addr$jscomp$5$$, $data$jscomp$86$$) { + var $entry$jscomp$1$$ = this.ports[$port_addr$jscomp$5$$]; + $entry$jscomp$1$$.write16 === this.empty_port_write && $dbg_log$$("write16 port #" + $h$$($port_addr$jscomp$5$$, 4) + " <- " + $h$$($data$jscomp$86$$, 4) + this.get_port_description($port_addr$jscomp$5$$), 32); + return $entry$jscomp$1$$.write16.call($entry$jscomp$1$$.device, $data$jscomp$86$$); +}; +$IO$$.prototype.port_write32 = function($port_addr$jscomp$6$$, $data$jscomp$87$$) { + var $entry$jscomp$2$$ = this.ports[$port_addr$jscomp$6$$]; + $entry$jscomp$2$$.write32 === this.empty_port_write && $dbg_log$$("write32 port #" + $h$$($port_addr$jscomp$6$$, 4) + " <- " + $h$$($data$jscomp$87$$ >>> 0, 8) + this.get_port_description($port_addr$jscomp$6$$), 32); + return $entry$jscomp$2$$.write32.call($entry$jscomp$2$$.device, $data$jscomp$87$$); +}; +$IO$$.prototype.port_read8 = function($port_addr$jscomp$7$$) { + var $entry$jscomp$3_value$jscomp$96$$ = this.ports[$port_addr$jscomp$7$$]; + $entry$jscomp$3_value$jscomp$96$$.read8 === this.empty_port_read8 && $dbg_log$$("read8 port #" + $h$$($port_addr$jscomp$7$$, 4) + this.get_port_description($port_addr$jscomp$7$$), 32); + $entry$jscomp$3_value$jscomp$96$$ = $entry$jscomp$3_value$jscomp$96$$.read8.call($entry$jscomp$3_value$jscomp$96$$.device); + $dbg_assert$$("number" === typeof $entry$jscomp$3_value$jscomp$96$$); + $dbg_assert$$(256 > $entry$jscomp$3_value$jscomp$96$$ && 0 <= $entry$jscomp$3_value$jscomp$96$$, "8 bit port returned large value: " + $h$$($port_addr$jscomp$7$$)); + return $entry$jscomp$3_value$jscomp$96$$; +}; +$IO$$.prototype.port_read16 = function($port_addr$jscomp$8$$) { + var $entry$jscomp$4_value$jscomp$97$$ = this.ports[$port_addr$jscomp$8$$]; + $entry$jscomp$4_value$jscomp$97$$.read16 === this.empty_port_read16 && $dbg_log$$("read16 port #" + $h$$($port_addr$jscomp$8$$, 4) + this.get_port_description($port_addr$jscomp$8$$), 32); + $entry$jscomp$4_value$jscomp$97$$ = $entry$jscomp$4_value$jscomp$97$$.read16.call($entry$jscomp$4_value$jscomp$97$$.device); + $dbg_assert$$("number" === typeof $entry$jscomp$4_value$jscomp$97$$); + $dbg_assert$$(65536 > $entry$jscomp$4_value$jscomp$97$$ && 0 <= $entry$jscomp$4_value$jscomp$97$$, "16 bit port returned large value: " + $h$$($port_addr$jscomp$8$$)); + return $entry$jscomp$4_value$jscomp$97$$; +}; +$IO$$.prototype.port_read32 = function($port_addr$jscomp$9_value$jscomp$98$$) { + var $entry$jscomp$5$$ = this.ports[$port_addr$jscomp$9_value$jscomp$98$$]; + $entry$jscomp$5$$.read32 === this.empty_port_read32 && $dbg_log$$("read32 port #" + $h$$($port_addr$jscomp$9_value$jscomp$98$$, 4) + this.get_port_description($port_addr$jscomp$9_value$jscomp$98$$), 32); + $port_addr$jscomp$9_value$jscomp$98$$ = $entry$jscomp$5$$.read32.call($entry$jscomp$5$$.device); + $dbg_assert$$(($port_addr$jscomp$9_value$jscomp$98$$ | 0) === $port_addr$jscomp$9_value$jscomp$98$$); + return $port_addr$jscomp$9_value$jscomp$98$$; +}; +var $debug_port_list$$ = {4:"PORT_DMA_ADDR_2", 5:"PORT_DMA_CNT_2", 10:"PORT_DMA1_MASK_REG", 11:"PORT_DMA1_MODE_REG", 12:"PORT_DMA1_CLEAR_FF_REG", 13:"PORT_DMA1_MASTER_CLEAR", 32:"PORT_PIC1_CMD", 33:"PORT_PIC1_DATA", 64:"PORT_PIT_COUNTER0", 65:"PORT_PIT_COUNTER1", 66:"PORT_PIT_COUNTER2", 67:"PORT_PIT_MODE", 96:"PORT_PS2_DATA", 97:"PORT_PS2_CTRLB", 100:"PORT_PS2_STATUS", 112:"PORT_CMOS_INDEX", 113:"PORT_CMOS_DATA", 128:"PORT_DIAG", 129:"PORT_DMA_PAGE_2", 146:"PORT_A20", 160:"PORT_PIC2_CMD", 161:"PORT_PIC2_DATA", +178:"PORT_SMI_CMD", 179:"PORT_SMI_STATUS", 212:"PORT_DMA2_MASK_REG", 214:"PORT_DMA2_MODE_REG", 218:"PORT_DMA2_MASTER_CLEAR", 240:"PORT_MATH_CLEAR", 368:"PORT_ATA2_CMD_BASE", 496:"PORT_ATA1_CMD_BASE", 632:"PORT_LPT2", 744:"PORT_SERIAL4", 760:"PORT_SERIAL2", 884:"PORT_ATA2_CTRL_BASE", 888:"PORT_LPT1", 1E3:"PORT_SERIAL3", 1008:"PORT_FD_BASE", 1010:"PORT_FD_DOR", 1012:"PORT_FD_STATUS", 1013:"PORT_FD_DATA", 1014:"PORT_HD_DATA", 1015:"PORT_FD_DIR", 1016:"PORT_SERIAL1", 3320:"PORT_PCI_CMD", 3321:"PORT_PCI_REBOOT", +3324:"PORT_PCI_DATA", 1026:"PORT_BIOS_DEBUG", 1296:"PORT_QEMU_CFG_CTL", 1297:"PORT_QEMU_CFG_DATA", 45056:"PORT_ACPI_PM_BASE", 45312:"PORT_SMB_BASE", 35072:"PORT_BIOS_APM"}; +$IO$$.prototype.get_port_description = function($addr$jscomp$7$$) { + return $debug_port_list$$[$addr$jscomp$7$$] ? " (" + $debug_port_list$$[$addr$jscomp$7$$] + ")" : ""; +}; +function $v86$$($bus$jscomp$1$$, $wasm$$) { + this.stopping = this.running = !1; + this.idle = !0; + this.tick_counter = 0; + this.worker = null; + this.cpu = new $CPU$$($bus$jscomp$1$$, $wasm$$, () => { + this.idle && this.next_tick(0); + }); + this.bus = $bus$jscomp$1$$; + this.register_yield(); +} +$v86$$.prototype.run = function() { + this.stopping = !1; + this.running || (this.running = !0, this.bus.send("emulator-started")); + this.next_tick(0); +}; +$v86$$.prototype.do_tick = function() { + if (this.stopping || !this.running) { + this.stopping = this.running = !1, this.bus.send("emulator-stopped"); + } else { + this.idle = !1; + var $t$$ = this.cpu.main_loop(); + this.next_tick($t$$); + } +}; +$v86$$.prototype.next_tick = function($t$jscomp$1$$) { + const $tick$$ = ++this.tick_counter; + this.idle = !0; + this.yield($t$jscomp$1$$, $tick$$); +}; +$v86$$.prototype.yield_callback = function($tick$jscomp$1$$) { + $tick$jscomp$1$$ === this.tick_counter && this.do_tick(); +}; +$v86$$.prototype.stop = function() { + this.running && (this.stopping = !0); +}; +$v86$$.prototype.destroy = function() { + this.unregister_yield(); +}; +$v86$$.prototype.restart = function() { + this.cpu.reset_cpu(); + this.cpu.load_bios(); +}; +$v86$$.prototype.init = function($settings$$) { + this.cpu.init($settings$$, this.bus); + this.bus.send("emulator-ready"); +}; +if ("undefined" !== typeof process) { + $v86$$.prototype.yield = function($t$jscomp$2$$, $tick$jscomp$2$$) { + 1 > $t$jscomp$2$$ ? global.setImmediate($tick$jscomp$3$$ => this.yield_callback($tick$jscomp$3$$), $tick$jscomp$2$$) : setTimeout($tick$jscomp$4$$ => this.yield_callback($tick$jscomp$4$$), $t$jscomp$2$$, $tick$jscomp$2$$); + }, $v86$$.prototype.register_yield = function() { + }, $v86$$.prototype.unregister_yield = function() { + }; +} else { + if ("undefined" !== typeof Worker) { + function $the_worker$$() { + let $timeout$jscomp$3$$; + globalThis.onmessage = function($e$jscomp$7$$) { + const $t$jscomp$3$$ = $e$jscomp$7$$.data.t; + $timeout$jscomp$3$$ = $timeout$jscomp$3$$ && clearTimeout($timeout$jscomp$3$$); + 1 > $t$jscomp$3$$ ? postMessage($e$jscomp$7$$.data.tick) : $timeout$jscomp$3$$ = setTimeout(() => postMessage($e$jscomp$7$$.data.tick), $t$jscomp$3$$); + }; + } + $v86$$.prototype.register_yield = function() { + const $url$jscomp$22$$ = URL.createObjectURL(new Blob(["(" + $the_worker$$.toString() + ")()"], {type:"text/javascript"})); + this.worker = new Worker($url$jscomp$22$$); + this.worker.onmessage = $e$jscomp$8$$ => this.yield_callback($e$jscomp$8$$.data); + URL.revokeObjectURL($url$jscomp$22$$); + }; + $v86$$.prototype.yield = function($t$jscomp$4$$, $tick$jscomp$5$$) { + this.worker.postMessage({t:$t$jscomp$4$$, tick:$tick$jscomp$5$$}); + }; + $v86$$.prototype.unregister_yield = function() { + this.worker && this.worker.terminate(); + this.worker = null; + }; + } else { + $v86$$.prototype.yield = function($t$jscomp$5$$) { + setTimeout(() => { + this.do_tick(); + }, $t$jscomp$5$$); + }, $v86$$.prototype.register_yield = function() { + }, $v86$$.prototype.unregister_yield = function() { + }; + } +} +$v86$$.prototype.save_state = function() { + return this.cpu.save_state(); +}; +$v86$$.prototype.restore_state = function($state$jscomp$3$$) { + return this.cpu.restore_state($state$jscomp$3$$); +}; +if ("object" === typeof performance && performance.now) { + $v86$$.microtick = performance.now.bind(performance); +} else { + if ("function" === typeof require) { + const {performance:$performance$jscomp$1$$} = require("perf_hooks"); + $v86$$.microtick = $performance$jscomp$1$$.now.bind($performance$jscomp$1$$); + } else { + $v86$$.microtick = "object" === typeof process && process.hrtime ? function() { + var $t$jscomp$6$$ = process.hrtime(); + return 1000 * $t$jscomp$6$$[0] + $t$jscomp$6$$[1] / 1e6; + } : Date.now; + } +} +;var $goog$$ = $goog$$ || {}; +$goog$$.exportSymbol = function() { +}; +$goog$$.exportProperty = function() { +}; +var $v86util$$ = $v86util$$ || {}; +$v86util$$.pads = function($str$jscomp$6$$, $len$$) { + return ($str$jscomp$6$$ || 0 === $str$jscomp$6$$ ? $str$jscomp$6$$ + "" : "").padEnd($len$$, " "); +}; +$v86util$$.pad0 = function($str$jscomp$7$$, $len$jscomp$1$$) { + return ($str$jscomp$7$$ || 0 === $str$jscomp$7$$ ? $str$jscomp$7$$ + "" : "").padStart($len$jscomp$1$$, "0"); +}; +$v86util$$.zeros = function($size$jscomp$24$$) { + return Array($size$jscomp$24$$).fill(0); +}; +$v86util$$.range = function($size$jscomp$25$$) { + return Array.from(Array($size$jscomp$25$$).keys()); +}; +$v86util$$.view = function($constructor$$, $memory$$, $offset$jscomp$28$$, $length$jscomp$17$$) { + $dbg_assert$$(0 <= $offset$jscomp$28$$); + return new Proxy({}, {get:function($b$jscomp$1_target$jscomp$91$$, $property$jscomp$5$$) { + $b$jscomp$1_target$jscomp$91$$ = new $constructor$$($memory$$.buffer, $offset$jscomp$28$$, $length$jscomp$17$$); + const $x$jscomp$91$$ = $b$jscomp$1_target$jscomp$91$$[$property$jscomp$5$$]; + if ("function" === typeof $x$jscomp$91$$) { + return $x$jscomp$91$$.bind($b$jscomp$1_target$jscomp$91$$); + } + $dbg_assert$$(/^\d+$/.test($property$jscomp$5$$) || "buffer" === $property$jscomp$5$$ || "length" === $property$jscomp$5$$ || "BYTES_PER_ELEMENT" === $property$jscomp$5$$ || "byteOffset" === $property$jscomp$5$$); + return $x$jscomp$91$$; + }, set:function($target$jscomp$92$$, $property$jscomp$6$$, $value$jscomp$99$$) { + $dbg_assert$$(/^\d+$/.test($property$jscomp$6$$)); + (new $constructor$$($memory$$.buffer, $offset$jscomp$28$$, $length$jscomp$17$$))[$property$jscomp$6$$] = $value$jscomp$99$$; + return !0; + }, }); +}; +function $h$$($n$jscomp$5_str$jscomp$8$$, $len$jscomp$2$$) { + $n$jscomp$5_str$jscomp$8$$ = $n$jscomp$5_str$jscomp$8$$ ? $n$jscomp$5_str$jscomp$8$$.toString(16) : ""; + return "0x" + $v86util$$.pad0($n$jscomp$5_str$jscomp$8$$.toUpperCase(), $len$jscomp$2$$ || 1); +} +if ("undefined" !== typeof crypto && crypto.getRandomValues) { + const $rand_data$$ = new Int32Array(1); + $v86util$$.get_rand_int = function() { + crypto.getRandomValues($rand_data$$); + return $rand_data$$[0]; + }; +} else { + if ("undefined" !== typeof require) { + const $crypto$jscomp$1$$ = require("crypto"); + $v86util$$.get_rand_int = function() { + return $crypto$jscomp$1$$.randomBytes(4).readInt32LE(0); + }; + } else { + $dbg_assert$$(!1, "Unsupported platform: No cryptographic random values"); + } +} +(function() { + if ("function" === typeof Math.clz32) { + $v86util$$.int_log2 = function($x$jscomp$94$$) { + $dbg_assert$$(0 < $x$jscomp$94$$); + return 31 - Math.clz32($x$jscomp$94$$); + }; + } else { + for (var $int_log2_table$$ = new Int8Array(256), $i$jscomp$10$$ = 0, $b$jscomp$2$$ = -2; 256 > $i$jscomp$10$$; $i$jscomp$10$$++) { + $i$jscomp$10$$ & $i$jscomp$10$$ - 1 || $b$jscomp$2$$++, $int_log2_table$$[$i$jscomp$10$$] = $b$jscomp$2$$; + } + $v86util$$.int_log2 = function($x$jscomp$95$$) { + $x$jscomp$95$$ >>>= 0; + $dbg_assert$$(0 < $x$jscomp$95$$); + var $tt$$ = $x$jscomp$95$$ >>> 16; + if ($tt$$) { + var $t$jscomp$7$$ = $tt$$ >>> 8; + return $t$jscomp$7$$ ? 24 + $int_log2_table$$[$t$jscomp$7$$] : 16 + $int_log2_table$$[$tt$$]; + } + return ($t$jscomp$7$$ = $x$jscomp$95$$ >>> 8) ? 8 + $int_log2_table$$[$t$jscomp$7$$] : $int_log2_table$$[$x$jscomp$95$$]; + }; + } +})(); +$v86util$$.round_up_to_next_power_of_2 = function($x$jscomp$96$$) { + $dbg_assert$$(0 <= $x$jscomp$96$$); + return 1 >= $x$jscomp$96$$ ? 1 : 1 << 1 + $v86util$$.int_log2($x$jscomp$96$$ - 1); +}; +$dbg_assert$$(0 === $v86util$$.int_log2(1)); +$dbg_assert$$(1 === $v86util$$.int_log2(2)); +$dbg_assert$$(2 === $v86util$$.int_log2(7)); +$dbg_assert$$(3 === $v86util$$.int_log2(8)); +$dbg_assert$$(26 === $v86util$$.int_log2(123456789)); +$dbg_assert$$(1 === $v86util$$.round_up_to_next_power_of_2(0)); +$dbg_assert$$(1 === $v86util$$.round_up_to_next_power_of_2(1)); +$dbg_assert$$(2 === $v86util$$.round_up_to_next_power_of_2(2)); +$dbg_assert$$(8 === $v86util$$.round_up_to_next_power_of_2(7)); +$dbg_assert$$(8 === $v86util$$.round_up_to_next_power_of_2(8)); +$dbg_assert$$(134217728 === $v86util$$.round_up_to_next_power_of_2(123456789)); +function $ByteQueue$$($size$jscomp$26$$) { + var $data$jscomp$88$$ = new Uint8Array($size$jscomp$26$$), $start$jscomp$14$$, $end$jscomp$10$$; + $dbg_assert$$(0 === ($size$jscomp$26$$ & $size$jscomp$26$$ - 1)); + this.length = 0; + this.push = function($item$jscomp$1$$) { + this.length !== $size$jscomp$26$$ && this.length++; + $data$jscomp$88$$[$end$jscomp$10$$] = $item$jscomp$1$$; + $end$jscomp$10$$ = $end$jscomp$10$$ + 1 & $size$jscomp$26$$ - 1; + }; + this.shift = function() { + if (this.length) { + var $item$jscomp$2$$ = $data$jscomp$88$$[$start$jscomp$14$$]; + $start$jscomp$14$$ = $start$jscomp$14$$ + 1 & $size$jscomp$26$$ - 1; + this.length--; + return $item$jscomp$2$$; + } + return -1; + }; + this.peek = function() { + return this.length ? $data$jscomp$88$$[$start$jscomp$14$$] : -1; + }; + this.clear = function() { + this.length = $end$jscomp$10$$ = $start$jscomp$14$$ = 0; + }; + this.clear(); +} +function $FloatQueue$$($size$jscomp$27$$) { + this.size = $size$jscomp$27$$; + this.data = new Float32Array($size$jscomp$27$$); + this.length = this.end = this.start = 0; + $dbg_assert$$(0 === ($size$jscomp$27$$ & $size$jscomp$27$$ - 1)); +} +$FloatQueue$$.prototype.push = function($item$jscomp$3$$) { + this.length === this.size ? this.start = this.start + 1 & this.size - 1 : this.length++; + this.data[this.end] = $item$jscomp$3$$; + this.end = this.end + 1 & this.size - 1; +}; +$FloatQueue$$.prototype.shift = function() { + if (this.length) { + var $item$jscomp$4$$ = this.data[this.start]; + this.start = this.start + 1 & this.size - 1; + this.length--; + return $item$jscomp$4$$; + } +}; +$FloatQueue$$.prototype.shift_block = function($count$jscomp$40$$) { + var $slice$$ = new Float32Array($count$jscomp$40$$); + $count$jscomp$40$$ > this.length && ($count$jscomp$40$$ = this.length); + var $slice_end$$ = this.start + $count$jscomp$40$$, $partial$$ = this.data.subarray(this.start, $slice_end$$); + $slice$$.set($partial$$); + $slice_end$$ >= this.size && ($slice_end$$ -= this.size, $slice$$.set(this.data.subarray(0, $slice_end$$), $partial$$.length)); + this.start = $slice_end$$; + this.length -= $count$jscomp$40$$; + return $slice$$; +}; +$FloatQueue$$.prototype.peek = function() { + if (this.length) { + return this.data[this.start]; + } +}; +$FloatQueue$$.prototype.clear = function() { + this.length = this.end = this.start = 0; +}; +function $dump_file$$($a$jscomp$inline_47_ab$$, $ev$jscomp$inline_48_name$jscomp$75$$) { + $a$jscomp$inline_47_ab$$ instanceof Array || ($a$jscomp$inline_47_ab$$ = [$a$jscomp$inline_47_ab$$]); + var $file_or_blob$jscomp$inline_45$$ = new Blob($a$jscomp$inline_47_ab$$); + $a$jscomp$inline_47_ab$$ = document.createElement("a"); + $a$jscomp$inline_47_ab$$.download = $ev$jscomp$inline_48_name$jscomp$75$$; + $a$jscomp$inline_47_ab$$.href = window.URL.createObjectURL($file_or_blob$jscomp$inline_45$$); + $a$jscomp$inline_47_ab$$.dataset.downloadurl = ["application/octet-stream", $a$jscomp$inline_47_ab$$.download, $a$jscomp$inline_47_ab$$.href].join(":"); + document.createEvent ? ($ev$jscomp$inline_48_name$jscomp$75$$ = document.createEvent("MouseEvent"), $ev$jscomp$inline_48_name$jscomp$75$$.initMouseEvent("click", !0, !0, window, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null), $a$jscomp$inline_47_ab$$.dispatchEvent($ev$jscomp$inline_48_name$jscomp$75$$)) : $a$jscomp$inline_47_ab$$.click(); + window.URL.revokeObjectURL($a$jscomp$inline_47_ab$$.href); +} +$v86util$$.Bitmap = function($length_or_buffer$$) { + "number" === typeof $length_or_buffer$$ ? this.view = new Uint8Array($length_or_buffer$$ + 7 >> 3) : $length_or_buffer$$ instanceof ArrayBuffer ? this.view = new Uint8Array($length_or_buffer$$) : $dbg_assert$$(!1, "v86util.Bitmap: Invalid argument"); +}; +$v86util$$.Bitmap.prototype.set = function($bit_mask_index$jscomp$76$$, $value$jscomp$100$$) { + const $byte_index$$ = $bit_mask_index$jscomp$76$$ >> 3; + $bit_mask_index$jscomp$76$$ = 1 << ($bit_mask_index$jscomp$76$$ & 7); + this.view[$byte_index$$] = $value$jscomp$100$$ ? this.view[$byte_index$$] | $bit_mask_index$jscomp$76$$ : this.view[$byte_index$$] & ~$bit_mask_index$jscomp$76$$; +}; +$v86util$$.Bitmap.prototype.get = function($index$jscomp$77$$) { + return this.view[$index$jscomp$77$$ >> 3] >> ($index$jscomp$77$$ & 7) & 1; +}; +$v86util$$.Bitmap.prototype.get_buffer = function() { + return this.view.buffer; +}; +$v86util$$.load_file = "undefined" === typeof XMLHttpRequest ? $load_file_nodejs$$ : $load_file$$; +function $load_file$$($filename$jscomp$3$$, $options$jscomp$35$$, $n_tries$$) { + function $retry$$() { + const $number_of_tries$$ = $n_tries$$ || 0; + setTimeout(() => { + $load_file$$($filename$jscomp$3$$, $options$jscomp$35$$, $number_of_tries$$ + 1); + }, 1000 * ([1, 1, 2, 3, 5, 8, 13, 21][$number_of_tries$$] || 34)); + } + var $http$$ = new XMLHttpRequest; + $http$$.open($options$jscomp$35$$.method || "get", $filename$jscomp$3$$, !0); + $http$$.responseType = $options$jscomp$35$$.as_json ? "json" : "arraybuffer"; + if ($options$jscomp$35$$.headers) { + for (var $header_names_start$jscomp$15$$ = Object.keys($options$jscomp$35$$.headers), $i$jscomp$11$$ = 0; $i$jscomp$11$$ < $header_names_start$jscomp$15$$.length; $i$jscomp$11$$++) { + var $name$jscomp$77$$ = $header_names_start$jscomp$15$$[$i$jscomp$11$$]; + $http$$.setRequestHeader($name$jscomp$77$$, $options$jscomp$35$$.headers[$name$jscomp$77$$]); + } + } + $options$jscomp$35$$.range && ($header_names_start$jscomp$15$$ = $options$jscomp$35$$.range.start, $http$$.setRequestHeader("Range", "bytes=" + $header_names_start$jscomp$15$$ + "-" + ($header_names_start$jscomp$15$$ + $options$jscomp$35$$.range.length - 1)), $http$$.setRequestHeader("X-Accept-Encoding", "identity"), $http$$.onreadystatechange = function() { + 200 === $http$$.status && (console.error("Server sent full file in response to ranged request, aborting", {filename:$filename$jscomp$3$$}), $http$$.abort()); + }); + $http$$.onload = function() { + if (4 === $http$$.readyState) { + if (200 !== $http$$.status && 206 !== $http$$.status) { + console.error("Loading the image " + $filename$jscomp$3$$ + " failed (status %d)", $http$$.status), 500 <= $http$$.status && 600 > $http$$.status && $retry$$(); + } else { + if ($http$$.response) { + if ($options$jscomp$35$$.range) { + const $enc$$ = $http$$.getResponseHeader("Content-Encoding"); + $enc$$ && "identity" !== $enc$$ && console.error("Server sent Content-Encoding in response to ranged request", {filename:$filename$jscomp$3$$, enc:$enc$$}); + } + $options$jscomp$35$$.done && $options$jscomp$35$$.done($http$$.response, $http$$); + } + } + } + }; + $http$$.onerror = function($e$jscomp$10$$) { + console.error("Loading the image " + $filename$jscomp$3$$ + " failed", $e$jscomp$10$$); + $retry$$(); + }; + $options$jscomp$35$$.progress && ($http$$.onprogress = function($e$jscomp$11$$) { + $options$jscomp$35$$.progress($e$jscomp$11$$); + }); + $http$$.send(null); +} +function $load_file_nodejs$$($filename$jscomp$4$$, $options$jscomp$36$$) { + const $fs$$ = require("fs"); + $options$jscomp$36$$.range ? ($dbg_assert$$(!$options$jscomp$36$$.as_json), $fs$$.open($filename$jscomp$4$$, "r", ($err$jscomp$3$$, $fd$$) => { + if ($err$jscomp$3$$) { + throw $err$jscomp$3$$; + } + const $length$jscomp$18$$ = $options$jscomp$36$$.range.length; + var $buffer$jscomp$18$$ = Buffer.allocUnsafe($length$jscomp$18$$); + $fs$$.read($fd$$, $buffer$jscomp$18$$, 0, $length$jscomp$18$$, $options$jscomp$36$$.range.start, ($err$jscomp$4$$, $bytes_read$$) => { + if ($err$jscomp$4$$) { + throw $err$jscomp$4$$; + } + $dbg_assert$$($bytes_read$$ === $length$jscomp$18$$); + $options$jscomp$36$$.done && $options$jscomp$36$$.done(new Uint8Array($buffer$jscomp$18$$)); + $fs$$.close($fd$$, $err$jscomp$5$$ => { + if ($err$jscomp$5$$) { + throw $err$jscomp$5$$; + } + }); + }); + })) : $fs$$.readFile($filename$jscomp$4$$, {encoding:$options$jscomp$36$$.as_json ? "utf-8" : null, }, function($err$jscomp$6_result$jscomp$3$$, $data$jscomp$89$$) { + $err$jscomp$6_result$jscomp$3$$ ? console.log("Could not read file:", $filename$jscomp$4$$, $err$jscomp$6_result$jscomp$3$$) : ($err$jscomp$6_result$jscomp$3$$ = $data$jscomp$89$$, $err$jscomp$6_result$jscomp$3$$ = $options$jscomp$36$$.as_json ? JSON.parse($err$jscomp$6_result$jscomp$3$$) : (new Uint8Array($err$jscomp$6_result$jscomp$3$$)).buffer, $options$jscomp$36$$.done($err$jscomp$6_result$jscomp$3$$)); + }); +} +$v86util$$.read_sized_string_from_mem = function($mem$$, $offset$jscomp$30$$, $len$jscomp$4$$) { + return String.fromCharCode(...(new Uint8Array($mem$$.buffer, $offset$jscomp$30$$ >>> 0, $len$jscomp$4$$ >>> 0))); +}; +(function() { + function $SyncBuffer$$($buffer$jscomp$19$$) { + $dbg_assert$$($buffer$jscomp$19$$ instanceof ArrayBuffer); + this.buffer = $buffer$jscomp$19$$; + this.byteLength = $buffer$jscomp$19$$.byteLength; + this.onprogress = this.onload = void 0; + } + function $AsyncXHRBuffer$$($filename$jscomp$5$$, $size$jscomp$29$$, $fixed_chunk_size$$) { + this.filename = $filename$jscomp$5$$; + this.byteLength = $size$jscomp$29$$; + this.block_cache = new Map; + this.block_cache_is_write = new Set; + this.fixed_chunk_size = $fixed_chunk_size$$; + this.cache_reads = !!$fixed_chunk_size$$; + this.onprogress = this.onload = void 0; + } + function $AsyncXHRPartfileBuffer$$($filename$jscomp$6$$, $size$jscomp$31$$, $fixed_chunk_size$jscomp$1$$, $partfile_alt_format$$, $zstd_decompress$$) { + const $parts$$ = $filename$jscomp$6$$.match(/\.[^\.]+(\.zst)?$/); + this.extension = $parts$$ ? $parts$$[0] : ""; + this.basename = $filename$jscomp$6$$.substring(0, $filename$jscomp$6$$.length - this.extension.length); + this.is_zstd = this.extension.endsWith(".zst"); + this.basename.endsWith("/") || (this.basename += "-"); + this.block_cache = new Map; + this.block_cache_is_write = new Set; + this.byteLength = $size$jscomp$31$$; + this.fixed_chunk_size = $fixed_chunk_size$jscomp$1$$; + this.partfile_alt_format = !!$partfile_alt_format$$; + this.zstd_decompress = $zstd_decompress$$; + this.cache_reads = !!$fixed_chunk_size$jscomp$1$$; + this.onprogress = this.onload = void 0; + } + function $SyncFileBuffer$$($file$$) { + this.file = $file$$; + this.byteLength = $file$$.size; + 1073741824 < $file$$.size && console.warn("SyncFileBuffer: Allocating buffer of " + ($file$$.size >> 20) + " MB ..."); + this.buffer = new ArrayBuffer($file$$.size); + this.onprogress = this.onload = void 0; + } + function $AsyncFileBuffer$$($file$jscomp$1$$) { + this.file = $file$jscomp$1$$; + this.byteLength = $file$jscomp$1$$.size; + this.block_cache = new Map; + this.block_cache_is_write = new Set; + this.onprogress = this.onload = void 0; + } + $v86util$$.SyncBuffer = $SyncBuffer$$; + $v86util$$.AsyncXHRBuffer = $AsyncXHRBuffer$$; + $v86util$$.AsyncXHRPartfileBuffer = $AsyncXHRPartfileBuffer$$; + $v86util$$.AsyncFileBuffer = $AsyncFileBuffer$$; + $v86util$$.SyncFileBuffer = $SyncFileBuffer$$; + $v86util$$.buffer_from_object = function($obj$jscomp$26$$, $is_async_zstd_decompress_worker$$) { + if ($obj$jscomp$26$$.buffer instanceof ArrayBuffer) { + return new $v86util$$.SyncBuffer($obj$jscomp$26$$.buffer); + } + if ("undefined" !== typeof File && $obj$jscomp$26$$.buffer instanceof File) { + return $is_async_zstd_decompress_worker$$ = $obj$jscomp$26$$.async, void 0 === $is_async_zstd_decompress_worker$$ && ($is_async_zstd_decompress_worker$$ = 268435456 <= $obj$jscomp$26$$.buffer.size), $is_async_zstd_decompress_worker$$ ? new $v86util$$.AsyncFileBuffer($obj$jscomp$26$$.buffer) : new $v86util$$.SyncFileBuffer($obj$jscomp$26$$.buffer); + } + if ($obj$jscomp$26$$.url) { + return $obj$jscomp$26$$.use_parts ? new $v86util$$.AsyncXHRPartfileBuffer($obj$jscomp$26$$.url, $obj$jscomp$26$$.size, $obj$jscomp$26$$.fixed_chunk_size, !1, $is_async_zstd_decompress_worker$$) : new $v86util$$.AsyncXHRBuffer($obj$jscomp$26$$.url, $obj$jscomp$26$$.size, $obj$jscomp$26$$.fixed_chunk_size); + } + $dbg_log$$("Ignored file: url=" + $obj$jscomp$26$$.url + " buffer=" + $obj$jscomp$26$$.buffer); + }; + $SyncBuffer$$.prototype.load = function() { + this.onload && this.onload({buffer:this.buffer}); + }; + $SyncBuffer$$.prototype.get = function($start$jscomp$16$$, $len$jscomp$5$$, $fn$jscomp$2$$) { + $dbg_assert$$($start$jscomp$16$$ + $len$jscomp$5$$ <= this.byteLength); + $fn$jscomp$2$$(new Uint8Array(this.buffer, $start$jscomp$16$$, $len$jscomp$5$$)); + }; + $SyncBuffer$$.prototype.set = function($start$jscomp$17$$, $slice$jscomp$1$$, $fn$jscomp$3$$) { + $dbg_assert$$($start$jscomp$17$$ + $slice$jscomp$1$$.byteLength <= this.byteLength); + (new Uint8Array(this.buffer, $start$jscomp$17$$, $slice$jscomp$1$$.byteLength)).set($slice$jscomp$1$$); + $fn$jscomp$3$$(); + }; + $SyncBuffer$$.prototype.get_buffer = function($fn$jscomp$4$$) { + $fn$jscomp$4$$(this.buffer); + }; + $SyncBuffer$$.prototype.get_state = function() { + const $state$jscomp$4$$ = []; + $state$jscomp$4$$[0] = this.byteLength; + $state$jscomp$4$$[1] = new Uint8Array(this.buffer); + return $state$jscomp$4$$; + }; + $SyncBuffer$$.prototype.set_state = function($state$jscomp$5$$) { + this.byteLength = $state$jscomp$5$$[0]; + this.buffer = $state$jscomp$5$$[1].slice().buffer; + }; + $AsyncXHRBuffer$$.prototype.load = function() { + void 0 !== this.byteLength ? this.onload && this.onload(Object.create(null)) : $determine_size$$(this.filename, ($error$jscomp$2$$, $size$jscomp$30$$) => { + if ($error$jscomp$2$$) { + throw Error("Cannot use: " + this.filename + ". " + $error$jscomp$2$$); + } + $dbg_assert$$(0 <= $size$jscomp$30$$); + this.byteLength = $size$jscomp$30$$; + this.onload && this.onload(Object.create(null)); + }); + }; + $AsyncXHRBuffer$$.prototype.get_from_cache = function($block_index_offset$jscomp$31$$, $len$jscomp$6_result$jscomp$4$$) { + var $number_of_blocks$$ = $len$jscomp$6_result$jscomp$4$$ / 256; + $block_index_offset$jscomp$31$$ /= 256; + for (var $i$jscomp$12$$ = 0; $i$jscomp$12$$ < $number_of_blocks$$; $i$jscomp$12$$++) { + if (!this.block_cache.get($block_index_offset$jscomp$31$$ + $i$jscomp$12$$)) { + return; + } + } + if (1 === $number_of_blocks$$) { + return this.block_cache.get($block_index_offset$jscomp$31$$); + } + $len$jscomp$6_result$jscomp$4$$ = new Uint8Array($len$jscomp$6_result$jscomp$4$$); + for ($i$jscomp$12$$ = 0; $i$jscomp$12$$ < $number_of_blocks$$; $i$jscomp$12$$++) { + $len$jscomp$6_result$jscomp$4$$.set(this.block_cache.get($block_index_offset$jscomp$31$$ + $i$jscomp$12$$), 256 * $i$jscomp$12$$); + } + return $len$jscomp$6_result$jscomp$4$$; + }; + $AsyncXHRBuffer$$.prototype.get = function($offset$jscomp$32$$, $len$jscomp$7$$, $fn$jscomp$5$$) { + $dbg_assert$$($offset$jscomp$32$$ + $len$jscomp$7$$ <= this.byteLength); + $dbg_assert$$(0 === $offset$jscomp$32$$ % 256); + $dbg_assert$$(0 === $len$jscomp$7$$ % 256); + $dbg_assert$$($len$jscomp$7$$); + var $block$jscomp$1$$ = this.get_from_cache($offset$jscomp$32$$, $len$jscomp$7$$); + if ($block$jscomp$1$$) { + $fn$jscomp$5$$($block$jscomp$1$$); + } else { + var $requested_start$$ = $offset$jscomp$32$$, $requested_length$$ = $len$jscomp$7$$; + this.fixed_chunk_size && ($requested_start$$ = $offset$jscomp$32$$ - $offset$jscomp$32$$ % this.fixed_chunk_size, $requested_length$$ = Math.ceil(($offset$jscomp$32$$ - $requested_start$$ + $len$jscomp$7$$) / this.fixed_chunk_size) * this.fixed_chunk_size); + $v86util$$.load_file(this.filename, {done:function($block$jscomp$2_buffer$jscomp$20$$) { + $block$jscomp$2_buffer$jscomp$20$$ = new Uint8Array($block$jscomp$2_buffer$jscomp$20$$); + this.handle_read($requested_start$$, $requested_length$$, $block$jscomp$2_buffer$jscomp$20$$); + $requested_start$$ === $offset$jscomp$32$$ && $requested_length$$ === $len$jscomp$7$$ ? $fn$jscomp$5$$($block$jscomp$2_buffer$jscomp$20$$) : $fn$jscomp$5$$($block$jscomp$2_buffer$jscomp$20$$.subarray($offset$jscomp$32$$ - $requested_start$$, $offset$jscomp$32$$ - $requested_start$$ + $len$jscomp$7$$)); + }.bind(this), range:{start:$requested_start$$, length:$requested_length$$}, }); + } + }; + $AsyncXHRBuffer$$.prototype.set = function($start$jscomp$18_start_block$$, $data$jscomp$90$$, $fn$jscomp$6$$) { + var $block_count_len$jscomp$8$$ = $data$jscomp$90$$.length; + $dbg_assert$$($start$jscomp$18_start_block$$ + $data$jscomp$90$$.byteLength <= this.byteLength); + $dbg_assert$$(0 === $start$jscomp$18_start_block$$ % 256); + $dbg_assert$$(0 === $block_count_len$jscomp$8$$ % 256); + $dbg_assert$$($block_count_len$jscomp$8$$); + $start$jscomp$18_start_block$$ /= 256; + $block_count_len$jscomp$8$$ /= 256; + for (var $i$jscomp$13$$ = 0; $i$jscomp$13$$ < $block_count_len$jscomp$8$$; $i$jscomp$13$$++) { + var $block$jscomp$3_data_slice$$ = this.block_cache.get($start$jscomp$18_start_block$$ + $i$jscomp$13$$); + if (void 0 === $block$jscomp$3_data_slice$$) { + $block$jscomp$3_data_slice$$ = $data$jscomp$90$$.slice(256 * $i$jscomp$13$$, 256 * ($i$jscomp$13$$ + 1)), this.block_cache.set($start$jscomp$18_start_block$$ + $i$jscomp$13$$, $block$jscomp$3_data_slice$$); + } else { + const $data_slice$jscomp$1$$ = $data$jscomp$90$$.subarray(256 * $i$jscomp$13$$, 256 * ($i$jscomp$13$$ + 1)); + $dbg_assert$$($block$jscomp$3_data_slice$$.byteLength === $data_slice$jscomp$1$$.length); + $block$jscomp$3_data_slice$$.set($data_slice$jscomp$1$$); + } + this.block_cache_is_write.add($start$jscomp$18_start_block$$ + $i$jscomp$13$$); + } + $fn$jscomp$6$$(); + }; + $AsyncXHRBuffer$$.prototype.handle_read = function($offset$jscomp$33_start_block$jscomp$1$$, $block_count$jscomp$1_len$jscomp$9$$, $block$jscomp$4$$) { + $offset$jscomp$33_start_block$jscomp$1$$ /= 256; + $block_count$jscomp$1_len$jscomp$9$$ /= 256; + for (var $i$jscomp$14$$ = 0; $i$jscomp$14$$ < $block_count$jscomp$1_len$jscomp$9$$; $i$jscomp$14$$++) { + const $cached_block$$ = this.block_cache.get($offset$jscomp$33_start_block$jscomp$1$$ + $i$jscomp$14$$); + $cached_block$$ ? $block$jscomp$4$$.set($cached_block$$, 256 * $i$jscomp$14$$) : this.cache_reads && this.block_cache.set($offset$jscomp$33_start_block$jscomp$1$$ + $i$jscomp$14$$, $block$jscomp$4$$.slice(256 * $i$jscomp$14$$, 256 * ($i$jscomp$14$$ + 1))); + } + }; + $AsyncXHRBuffer$$.prototype.get_buffer = function($fn$jscomp$7$$) { + $fn$jscomp$7$$(); + }; + $AsyncXHRBuffer$$.prototype.get_state = function() { + const $state$jscomp$6$$ = [], $block_cache$$ = []; + for (const [$index$jscomp$78$$, $block$jscomp$5$$] of this.block_cache) { + $dbg_assert$$(isFinite($index$jscomp$78$$)), this.block_cache_is_write.has($index$jscomp$78$$) && $block_cache$$.push([$index$jscomp$78$$, $block$jscomp$5$$]); + } + $state$jscomp$6$$[0] = $block_cache$$; + return $state$jscomp$6$$; + }; + $AsyncXHRBuffer$$.prototype.set_state = function($block_cache$jscomp$1_state$jscomp$7$$) { + $block_cache$jscomp$1_state$jscomp$7$$ = $block_cache$jscomp$1_state$jscomp$7$$[0]; + this.block_cache.clear(); + this.block_cache_is_write.clear(); + for (const [$index$jscomp$79$$, $block$jscomp$6$$] of $block_cache$jscomp$1_state$jscomp$7$$) { + $dbg_assert$$(isFinite($index$jscomp$79$$)), this.block_cache.set($index$jscomp$79$$, $block$jscomp$6$$), this.block_cache_is_write.add($index$jscomp$79$$); + } + }; + $AsyncXHRPartfileBuffer$$.prototype.load = function() { + void 0 === this.byteLength && $dbg_assert$$(!1); + this.onload && this.onload(Object.create(null)); + }; + $AsyncXHRPartfileBuffer$$.prototype.get = function($offset$jscomp$34$$, $len$jscomp$10$$, $fn$jscomp$8$$) { + $dbg_assert$$($offset$jscomp$34$$ + $len$jscomp$10$$ <= this.byteLength); + $dbg_assert$$(0 === $offset$jscomp$34$$ % 256); + $dbg_assert$$(0 === $len$jscomp$10$$ % 256); + $dbg_assert$$($len$jscomp$10$$); + var $block$jscomp$7_part_filename$$ = this.get_from_cache($offset$jscomp$34$$, $len$jscomp$10$$); + if ($block$jscomp$7_part_filename$$) { + $fn$jscomp$8$$($block$jscomp$7_part_filename$$); + } else { + if (this.fixed_chunk_size) { + const $start_index$$ = Math.floor($offset$jscomp$34$$ / this.fixed_chunk_size), $m_offset$$ = $offset$jscomp$34$$ - $start_index$$ * this.fixed_chunk_size; + $dbg_assert$$(0 <= $m_offset$$); + const $total_count$$ = Math.ceil(($m_offset$$ + $len$jscomp$10$$) / this.fixed_chunk_size), $blocks$$ = new Uint8Array($total_count$$ * this.fixed_chunk_size); + let $finished$$ = 0; + for (let $i$jscomp$15$$ = 0; $i$jscomp$15$$ < $total_count$$; $i$jscomp$15$$++) { + var $block$jscomp$8_offset$jscomp$35$$ = ($start_index$$ + $i$jscomp$15$$) * this.fixed_chunk_size; + $block$jscomp$7_part_filename$$ = this.partfile_alt_format ? this.basename + ($start_index$$ + $i$jscomp$15$$ + "").padStart(8, "0") + this.extension : this.basename + $block$jscomp$8_offset$jscomp$35$$ + "-" + ($block$jscomp$8_offset$jscomp$35$$ + this.fixed_chunk_size) + this.extension; + ($block$jscomp$8_offset$jscomp$35$$ = this.get_from_cache($block$jscomp$8_offset$jscomp$35$$, this.fixed_chunk_size)) ? ($blocks$$.set($block$jscomp$8_offset$jscomp$35$$, $i$jscomp$15$$ * this.fixed_chunk_size), $finished$$++, $finished$$ === $total_count$$ && $fn$jscomp$8$$($blocks$$.subarray($m_offset$$, $m_offset$$ + $len$jscomp$10$$))) : $v86util$$.load_file($block$jscomp$7_part_filename$$, {done:async function($block$jscomp$9_buffer$jscomp$21_decompressed$$) { + $block$jscomp$9_buffer$jscomp$21_decompressed$$ = new Uint8Array($block$jscomp$9_buffer$jscomp$21_decompressed$$); + this.is_zstd && ($block$jscomp$9_buffer$jscomp$21_decompressed$$ = await this.zstd_decompress(this.fixed_chunk_size, $block$jscomp$9_buffer$jscomp$21_decompressed$$), $block$jscomp$9_buffer$jscomp$21_decompressed$$ = new Uint8Array($block$jscomp$9_buffer$jscomp$21_decompressed$$)); + $blocks$$.set($block$jscomp$9_buffer$jscomp$21_decompressed$$, $i$jscomp$15$$ * this.fixed_chunk_size); + this.handle_read(($start_index$$ + $i$jscomp$15$$) * this.fixed_chunk_size, this.fixed_chunk_size | 0, $block$jscomp$9_buffer$jscomp$21_decompressed$$); + $finished$$++; + $finished$$ === $total_count$$ && $fn$jscomp$8$$($blocks$$.subarray($m_offset$$, $m_offset$$ + $len$jscomp$10$$)); + }.bind(this), }); + } + } else { + $v86util$$.load_file(this.basename + $offset$jscomp$34$$ + "-" + ($offset$jscomp$34$$ + $len$jscomp$10$$) + this.extension, {done:function($block$jscomp$10_buffer$jscomp$22$$) { + $dbg_assert$$($block$jscomp$10_buffer$jscomp$22$$.byteLength === $len$jscomp$10$$); + $block$jscomp$10_buffer$jscomp$22$$ = new Uint8Array($block$jscomp$10_buffer$jscomp$22$$); + this.handle_read($offset$jscomp$34$$, $len$jscomp$10$$, $block$jscomp$10_buffer$jscomp$22$$); + $fn$jscomp$8$$($block$jscomp$10_buffer$jscomp$22$$); + }.bind(this), }); + } + } + }; + $AsyncXHRPartfileBuffer$$.prototype.get_from_cache = $AsyncXHRBuffer$$.prototype.get_from_cache; + $AsyncXHRPartfileBuffer$$.prototype.set = $AsyncXHRBuffer$$.prototype.set; + $AsyncXHRPartfileBuffer$$.prototype.handle_read = $AsyncXHRBuffer$$.prototype.handle_read; + $AsyncXHRPartfileBuffer$$.prototype.get_state = $AsyncXHRBuffer$$.prototype.get_state; + $AsyncXHRPartfileBuffer$$.prototype.set_state = $AsyncXHRBuffer$$.prototype.set_state; + $SyncFileBuffer$$.prototype.load = function() { + this.load_next(0); + }; + $SyncFileBuffer$$.prototype.load_next = function($start$jscomp$19$$) { + var $filereader$$ = new FileReader; + $filereader$$.onload = function($buffer$jscomp$23_e$jscomp$12$$) { + $buffer$jscomp$23_e$jscomp$12$$ = new Uint8Array($buffer$jscomp$23_e$jscomp$12$$.target.result); + (new Uint8Array(this.buffer, $start$jscomp$19$$)).set($buffer$jscomp$23_e$jscomp$12$$); + this.load_next($start$jscomp$19$$ + 4194304); + }.bind(this); + if (this.onprogress) { + this.onprogress({loaded:$start$jscomp$19$$, total:this.byteLength, lengthComputable:!0, }); + } + if ($start$jscomp$19$$ < this.byteLength) { + var $slice$jscomp$2$$ = this.file.slice($start$jscomp$19$$, Math.min($start$jscomp$19$$ + 4194304, this.byteLength)); + $filereader$$.readAsArrayBuffer($slice$jscomp$2$$); + } else { + this.file = void 0, this.onload && this.onload({buffer:this.buffer}); + } + }; + $SyncFileBuffer$$.prototype.get = $SyncBuffer$$.prototype.get; + $SyncFileBuffer$$.prototype.set = $SyncBuffer$$.prototype.set; + $SyncFileBuffer$$.prototype.get_buffer = $SyncBuffer$$.prototype.get_buffer; + $SyncFileBuffer$$.prototype.get_state = $SyncBuffer$$.prototype.get_state; + $SyncFileBuffer$$.prototype.set_state = $SyncBuffer$$.prototype.set_state; + $AsyncFileBuffer$$.prototype.load = function() { + this.onload && this.onload(Object.create(null)); + }; + $AsyncFileBuffer$$.prototype.get = function($offset$jscomp$36$$, $len$jscomp$11$$, $fn$jscomp$9$$) { + $dbg_assert$$(0 === $offset$jscomp$36$$ % 256); + $dbg_assert$$(0 === $len$jscomp$11$$ % 256); + $dbg_assert$$($len$jscomp$11$$); + var $block$jscomp$11_fr$$ = this.get_from_cache($offset$jscomp$36$$, $len$jscomp$11$$); + $block$jscomp$11_fr$$ ? $fn$jscomp$9$$($block$jscomp$11_fr$$) : ($block$jscomp$11_fr$$ = new FileReader, $block$jscomp$11_fr$$.onload = function($block$jscomp$12_e$jscomp$13$$) { + $block$jscomp$12_e$jscomp$13$$ = new Uint8Array($block$jscomp$12_e$jscomp$13$$.target.result); + this.handle_read($offset$jscomp$36$$, $len$jscomp$11$$, $block$jscomp$12_e$jscomp$13$$); + $fn$jscomp$9$$($block$jscomp$12_e$jscomp$13$$); + }.bind(this), $block$jscomp$11_fr$$.readAsArrayBuffer(this.file.slice($offset$jscomp$36$$, $offset$jscomp$36$$ + $len$jscomp$11$$))); + }; + $AsyncFileBuffer$$.prototype.get_from_cache = $AsyncXHRBuffer$$.prototype.get_from_cache; + $AsyncFileBuffer$$.prototype.set = $AsyncXHRBuffer$$.prototype.set; + $AsyncFileBuffer$$.prototype.handle_read = $AsyncXHRBuffer$$.prototype.handle_read; + $AsyncFileBuffer$$.prototype.get_state = $AsyncXHRBuffer$$.prototype.get_state; + $AsyncFileBuffer$$.prototype.set_state = $AsyncXHRBuffer$$.prototype.set_state; + $AsyncFileBuffer$$.prototype.get_buffer = function($fn$jscomp$10$$) { + $fn$jscomp$10$$(); + }; + $AsyncFileBuffer$$.prototype.get_as_file = function($file$jscomp$2_name$jscomp$78$$) { + for (var $parts$jscomp$1$$ = [], $existing_blocks$$ = Array.from(this.block_cache.keys()).sort(function($x$jscomp$97$$, $y$jscomp$75$$) { + return $x$jscomp$97$$ - $y$jscomp$75$$; + }), $current_offset$$ = 0, $i$jscomp$16$$ = 0; $i$jscomp$16$$ < $existing_blocks$$.length; $i$jscomp$16$$++) { + var $block_index$jscomp$1_start$jscomp$20$$ = $existing_blocks$$[$i$jscomp$16$$], $block$jscomp$13$$ = this.block_cache.get($block_index$jscomp$1_start$jscomp$20$$); + $block_index$jscomp$1_start$jscomp$20$$ *= 256; + $dbg_assert$$($block_index$jscomp$1_start$jscomp$20$$ >= $current_offset$$); + $block_index$jscomp$1_start$jscomp$20$$ !== $current_offset$$ && ($parts$jscomp$1$$.push(this.file.slice($current_offset$$, $block_index$jscomp$1_start$jscomp$20$$)), $current_offset$$ = $block_index$jscomp$1_start$jscomp$20$$); + $parts$jscomp$1$$.push($block$jscomp$13$$); + $current_offset$$ += $block$jscomp$13$$.length; + } + $current_offset$$ !== this.file.size && $parts$jscomp$1$$.push(this.file.slice($current_offset$$)); + $file$jscomp$2_name$jscomp$78$$ = new File($parts$jscomp$1$$, $file$jscomp$2_name$jscomp$78$$); + $dbg_assert$$($file$jscomp$2_name$jscomp$78$$.size === this.file.size); + return $file$jscomp$2_name$jscomp$78$$; + }; + var $determine_size$$ = "undefined" === typeof XMLHttpRequest ? function($path$jscomp$5$$, $cb$$) { + require("fs").stat($path$jscomp$5$$, ($err$jscomp$7$$, $stats$$) => { + $err$jscomp$7$$ ? $cb$$($err$jscomp$7$$) : $cb$$(null, $stats$$.size); + }); + } : function($url$jscomp$23$$, $cb$jscomp$1$$) { + $v86util$$.load_file($url$jscomp$23$$, {done:($buffer$jscomp$25_header$jscomp$3$$, $http$jscomp$1_match$$) => { + $buffer$jscomp$25_header$jscomp$3$$ = $http$jscomp$1_match$$.getResponseHeader("Content-Range") || ""; + ($http$jscomp$1_match$$ = $buffer$jscomp$25_header$jscomp$3$$.match(/\/(\d+)\s*$/)) ? $cb$jscomp$1$$(null, +$http$jscomp$1_match$$[1]) : $cb$jscomp$1$$("`Range: bytes=...` header not supported (Got `" + $buffer$jscomp$25_header$jscomp$3$$ + "`)"); + }, headers:{Range:"bytes=0-0", "X-Accept-Encoding":"identity"}}); + }; +})(); +function $IDEDevice$$($cpu$jscomp$2$$, $master_buffer$$, $slave_buffer$$, $is_cd$$, $nr$$, $bus$jscomp$2$$) { + this.master = new $IDEInterface$$(this, $cpu$jscomp$2$$, $master_buffer$$, $is_cd$$, $nr$$, 0, $bus$jscomp$2$$); + this.slave = new $IDEInterface$$(this, $cpu$jscomp$2$$, $slave_buffer$$, !1, $nr$$, 1, $bus$jscomp$2$$); + this.current_interface = this.master; + this.cpu = $cpu$jscomp$2$$; + 0 === $nr$$ ? (this.ata_port = 496, this.irq = 14, this.pci_id = 240) : 1 === $nr$$ ? (this.ata_port = 368, this.irq = 15, this.pci_id = 248) : $dbg_assert$$(!1, "IDE device with nr " + $nr$$ + " ignored", 32768); + this.ata_port_high = this.ata_port | 516; + this.master_port = 46080; + this.pci_space = [134, 128, 16, 112, 5, 0, 160, 2, 0, 128, 1, 1, 0, 0, 0, 0, this.ata_port & 255 | 1, this.ata_port >> 8, 0, 0, this.ata_port_high & 255 | 1, this.ata_port_high >> 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, this.master_port & 255 | 1, this.master_port >> 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 16, 212, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, this.irq, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; + this.pci_bars = [{size:8, }, {size:4, }, void 0, void 0, {size:16, }, ]; + this.name = "ide" + $nr$$; + this.device_control = 2; + $cpu$jscomp$2$$.io.register_read(this.ata_port | 7, this, function() { + $dbg_log$$("lower irq", 32768); + this.cpu.device_lower_irq(this.irq); + return this.read_status(); + }); + $cpu$jscomp$2$$.io.register_read(this.ata_port_high | 2, this, this.read_status); + $cpu$jscomp$2$$.io.register_write(this.ata_port_high | 2, this, this.write_control); + $cpu$jscomp$2$$.io.register_read(this.ata_port | 0, this, function() { + return this.current_interface.read_data(1); + }, function() { + return this.current_interface.read_data(2); + }, function() { + return this.current_interface.read_data(4); + }); + $cpu$jscomp$2$$.io.register_read(this.ata_port | 1, this, function() { + $dbg_log$$("Read error: " + $h$$(this.current_interface.error & 255) + " slave=" + (this.current_interface === this.slave), 32768); + return this.current_interface.error & 255; + }); + $cpu$jscomp$2$$.io.register_read(this.ata_port | 2, this, function() { + $dbg_log$$("Read bytecount: " + $h$$(this.current_interface.bytecount & 255), 32768); + return this.current_interface.bytecount & 255; + }); + $cpu$jscomp$2$$.io.register_read(this.ata_port | 3, this, function() { + $dbg_log$$("Read sector: " + $h$$(this.current_interface.sector & 255), 32768); + return this.current_interface.sector & 255; + }); + $cpu$jscomp$2$$.io.register_read(this.ata_port | 4, this, function() { + $dbg_log$$("Read 1F4: " + $h$$(this.current_interface.cylinder_low & 255), 32768); + return this.current_interface.cylinder_low & 255; + }); + $cpu$jscomp$2$$.io.register_read(this.ata_port | 5, this, function() { + $dbg_log$$("Read 1F5: " + $h$$(this.current_interface.cylinder_high & 255), 32768); + return this.current_interface.cylinder_high & 255; + }); + $cpu$jscomp$2$$.io.register_read(this.ata_port | 6, this, function() { + $dbg_log$$("Read 1F6", 32768); + return this.current_interface.drive_head & 255; + }); + $cpu$jscomp$2$$.io.register_write(this.ata_port | 0, this, function($data$jscomp$91$$) { + this.current_interface.write_data_port8($data$jscomp$91$$); + }, function($data$jscomp$92$$) { + this.current_interface.write_data_port16($data$jscomp$92$$); + }, function($data$jscomp$93$$) { + this.current_interface.write_data_port32($data$jscomp$93$$); + }); + $cpu$jscomp$2$$.io.register_write(this.ata_port | 1, this, function($data$jscomp$94$$) { + $dbg_log$$("1F1/lba_count: " + $h$$($data$jscomp$94$$), 32768); + this.master.lba_count = (this.master.lba_count << 8 | $data$jscomp$94$$) & 65535; + this.slave.lba_count = (this.slave.lba_count << 8 | $data$jscomp$94$$) & 65535; + }); + $cpu$jscomp$2$$.io.register_write(this.ata_port | 2, this, function($data$jscomp$95$$) { + $dbg_log$$("1F2/bytecount: " + $h$$($data$jscomp$95$$), 32768); + this.master.bytecount = (this.master.bytecount << 8 | $data$jscomp$95$$) & 65535; + this.slave.bytecount = (this.slave.bytecount << 8 | $data$jscomp$95$$) & 65535; + }); + $cpu$jscomp$2$$.io.register_write(this.ata_port | 3, this, function($data$jscomp$96$$) { + $dbg_log$$("1F3/sector: " + $h$$($data$jscomp$96$$), 32768); + this.master.sector = (this.master.sector << 8 | $data$jscomp$96$$) & 65535; + this.slave.sector = (this.slave.sector << 8 | $data$jscomp$96$$) & 65535; + }); + $cpu$jscomp$2$$.io.register_write(this.ata_port | 4, this, function($data$jscomp$97$$) { + $dbg_log$$("1F4/sector low: " + $h$$($data$jscomp$97$$), 32768); + this.master.cylinder_low = (this.master.cylinder_low << 8 | $data$jscomp$97$$) & 65535; + this.slave.cylinder_low = (this.slave.cylinder_low << 8 | $data$jscomp$97$$) & 65535; + }); + $cpu$jscomp$2$$.io.register_write(this.ata_port | 5, this, function($data$jscomp$98$$) { + $dbg_log$$("1F5/sector high: " + $h$$($data$jscomp$98$$), 32768); + this.master.cylinder_high = (this.master.cylinder_high << 8 | $data$jscomp$98$$) & 65535; + this.slave.cylinder_high = (this.slave.cylinder_high << 8 | $data$jscomp$98$$) & 65535; + }); + $cpu$jscomp$2$$.io.register_write(this.ata_port | 6, this, function($data$jscomp$99$$) { + var $slave$$ = $data$jscomp$99$$ & 16; + $dbg_log$$("1F6/drive: " + $h$$($data$jscomp$99$$, 2), 32768); + $slave$$ ? ($dbg_log$$("Slave", 32768), this.current_interface = this.slave) : this.current_interface = this.master; + this.master.drive_head = $data$jscomp$99$$; + this.slave.drive_head = $data$jscomp$99$$; + this.master.is_lba = this.slave.is_lba = $data$jscomp$99$$ >> 6 & 1; + this.master.head = this.slave.head = $data$jscomp$99$$ & 15; + }); + this.dma_command = this.dma_status = this.prdt_addr = 0; + $cpu$jscomp$2$$.io.register_write(this.ata_port | 7, this, function($data$jscomp$100$$) { + $dbg_log$$("lower irq", 32768); + this.cpu.device_lower_irq(this.irq); + this.current_interface.ata_command($data$jscomp$100$$); + }); + $cpu$jscomp$2$$.io.register_read(this.master_port | 4, this, void 0, void 0, this.dma_read_addr); + $cpu$jscomp$2$$.io.register_write(this.master_port | 4, this, void 0, void 0, this.dma_set_addr); + $cpu$jscomp$2$$.io.register_read(this.master_port, this, this.dma_read_command8, void 0, this.dma_read_command); + $cpu$jscomp$2$$.io.register_write(this.master_port, this, this.dma_write_command8, void 0, this.dma_write_command); + $cpu$jscomp$2$$.io.register_read(this.master_port | 2, this, this.dma_read_status); + $cpu$jscomp$2$$.io.register_write(this.master_port | 2, this, this.dma_write_status); + $cpu$jscomp$2$$.io.register_read(this.master_port | 8, this, function() { + $dbg_log$$("DMA read 0x8", 32768); + return 0; + }); + $cpu$jscomp$2$$.io.register_read(this.master_port | 10, this, function() { + $dbg_log$$("DMA read 0xA", 32768); + return 0; + }); + $cpu$jscomp$2$$.devices.pci.register_device(this); + Object.seal(this); +} +$IDEDevice$$.prototype.read_status = function() { + if (this.current_interface.buffer) { + var $ret$jscomp$1$$ = this.current_interface.status; + $dbg_log$$("ATA read status: " + $h$$($ret$jscomp$1$$, 2), 32768); + return $ret$jscomp$1$$; + } + return 0; +}; +$IDEDevice$$.prototype.write_control = function($data$jscomp$101$$) { + $dbg_log$$("set device control: " + $h$$($data$jscomp$101$$, 2) + " interrupts " + ($data$jscomp$101$$ & 2 ? "disabled" : "enabled"), 32768); + $data$jscomp$101$$ & 4 && ($dbg_log$$("Reset via control port", 32768), this.cpu.device_lower_irq(this.irq), this.master.device_reset(), this.slave.device_reset()); + this.device_control = $data$jscomp$101$$; +}; +$IDEDevice$$.prototype.dma_read_addr = function() { + $dbg_log$$("dma get address: " + $h$$(this.prdt_addr, 8), 32768); + return this.prdt_addr; +}; +$IDEDevice$$.prototype.dma_set_addr = function($data$jscomp$102$$) { + $dbg_log$$("dma set address: " + $h$$($data$jscomp$102$$, 8), 32768); + this.prdt_addr = $data$jscomp$102$$; +}; +$IDEDevice$$.prototype.dma_read_status = function() { + $dbg_log$$("DMA read status: " + $h$$(this.dma_status), 32768); + return this.dma_status; +}; +$IDEDevice$$.prototype.dma_write_status = function($value$jscomp$101$$) { + $dbg_log$$("DMA set status: " + $h$$($value$jscomp$101$$), 32768); + this.dma_status &= ~($value$jscomp$101$$ & 6); +}; +$IDEDevice$$.prototype.dma_read_command = function() { + return this.dma_read_command8() | this.dma_read_status() << 16; +}; +$IDEDevice$$.prototype.dma_read_command8 = function() { + $dbg_log$$("DMA read command: " + $h$$(this.dma_command), 32768); + return this.dma_command; +}; +$IDEDevice$$.prototype.dma_write_command = function($value$jscomp$102$$) { + $dbg_log$$("DMA write command: " + $h$$($value$jscomp$102$$), 32768); + this.dma_write_command8($value$jscomp$102$$ & 255); + this.dma_write_status($value$jscomp$102$$ >> 16 & 255); +}; +$IDEDevice$$.prototype.dma_write_command8 = function($value$jscomp$103$$) { + $dbg_log$$("DMA write command8: " + $h$$($value$jscomp$103$$), 32768); + const $old_command$$ = this.dma_command; + this.dma_command = $value$jscomp$103$$ & 9; + if (($old_command$$ & 1) !== ($value$jscomp$103$$ & 1)) { + if (0 === ($value$jscomp$103$$ & 1)) { + this.dma_status &= -2; + } else { + switch(this.dma_status |= 1, this.current_interface.current_command) { + case 37: + case 200: + this.current_interface.do_ata_read_sectors_dma(); + break; + case 202: + case 53: + this.current_interface.do_ata_write_sectors_dma(); + break; + case 160: + this.current_interface.do_atapi_dma(); + break; + default: + $dbg_log$$("Spurious dma command write, current command: " + $h$$(this.current_interface.current_command), 32768), $dbg_assert$$(!1); + } + } + } +}; +$IDEDevice$$.prototype.push_irq = function() { + 0 === (this.device_control & 2) && ($dbg_log$$("push irq", 32768), this.dma_status |= 4, this.cpu.device_raise_irq(this.irq)); +}; +$IDEDevice$$.prototype.get_state = function() { + var $state$jscomp$8$$ = []; + $state$jscomp$8$$[0] = this.master; + $state$jscomp$8$$[1] = this.slave; + $state$jscomp$8$$[2] = this.ata_port; + $state$jscomp$8$$[3] = this.irq; + $state$jscomp$8$$[4] = this.pci_id; + $state$jscomp$8$$[5] = this.ata_port_high; + $state$jscomp$8$$[6] = this.master_port; + $state$jscomp$8$$[7] = this.name; + $state$jscomp$8$$[8] = this.device_control; + $state$jscomp$8$$[9] = this.prdt_addr; + $state$jscomp$8$$[10] = this.dma_status; + $state$jscomp$8$$[11] = this.current_interface === this.master; + $state$jscomp$8$$[12] = this.dma_command; + return $state$jscomp$8$$; +}; +$IDEDevice$$.prototype.set_state = function($state$jscomp$9$$) { + this.master.set_state($state$jscomp$9$$[0]); + this.slave.set_state($state$jscomp$9$$[1]); + this.ata_port = $state$jscomp$9$$[2]; + this.irq = $state$jscomp$9$$[3]; + this.pci_id = $state$jscomp$9$$[4]; + this.ata_port_high = $state$jscomp$9$$[5]; + this.master_port = $state$jscomp$9$$[6]; + this.name = $state$jscomp$9$$[7]; + this.device_control = $state$jscomp$9$$[8]; + this.prdt_addr = $state$jscomp$9$$[9]; + this.dma_status = $state$jscomp$9$$[10]; + this.current_interface = $state$jscomp$9$$[11] ? this.master : this.slave; + this.dma_command = $state$jscomp$9$$[12]; +}; +function $IDEInterface$$($device$jscomp$4_rtc$$, $cpu$jscomp$3$$, $buffer$jscomp$26$$, $is_cd$jscomp$1$$, $device_nr$$, $interface_nr$$, $bus$jscomp$3$$) { + this.device = $device$jscomp$4_rtc$$; + this.bus = $bus$jscomp$3$$; + this.nr = $device_nr$$; + this.cpu = $cpu$jscomp$3$$; + this.buffer = $buffer$jscomp$26$$; + this.sector_size = $is_cd$jscomp$1$$ ? 2048 : 512; + this.is_atapi = $is_cd$jscomp$1$$; + this.cylinder_count = this.sectors_per_track = this.head_count = this.sector_count = 0; + this.buffer && (this.sector_count = this.buffer.byteLength / this.sector_size, this.sector_count !== (this.sector_count | 0) && ($dbg_log$$("Warning: Disk size not aligned with sector size", 32768), this.sector_count = Math.ceil(this.sector_count)), $is_cd$jscomp$1$$ ? (this.head_count = 1, this.sectors_per_track = 0) : (this.head_count = 16, this.sectors_per_track = 63), this.cylinder_count = this.sector_count / this.head_count / this.sectors_per_track, this.cylinder_count !== (this.cylinder_count | + 0) && ($dbg_log$$("Warning: Rounding up cylinder count. Choose different head number", 32768), this.cylinder_count = Math.floor(this.cylinder_count)), $device$jscomp$4_rtc$$ = $cpu$jscomp$3$$.devices.rtc, $device$jscomp$4_rtc$$.cmos_write(57, $device$jscomp$4_rtc$$.cmos_read(57) | 1 << 4 * this.nr), $device$jscomp$4_rtc$$.cmos_write(18, $device$jscomp$4_rtc$$.cmos_read(18) & 15 | 240), $device$jscomp$4_rtc$$.cmos_write(27, this.cylinder_count & 255), $device$jscomp$4_rtc$$.cmos_write(28, this.cylinder_count >> + 8 & 255), $device$jscomp$4_rtc$$.cmos_write(29, this.head_count & 255), $device$jscomp$4_rtc$$.cmos_write(30, 255), $device$jscomp$4_rtc$$.cmos_write(31, 255), $device$jscomp$4_rtc$$.cmos_write(32, 200), $device$jscomp$4_rtc$$.cmos_write(33, this.cylinder_count & 255), $device$jscomp$4_rtc$$.cmos_write(34, this.cylinder_count >> 8 & 255), $device$jscomp$4_rtc$$.cmos_write(35, this.sectors_per_track & 255)); + this.buffer = $buffer$jscomp$26$$; + this.drive_head = this.head = this.cylinder_high = this.cylinder_low = this.lba_count = this.sector = this.bytecount = this.is_lba = 0; + this.status = 80; + this.sectors_per_drq = 128; + this.data_pointer = this.error = 0; + this.data = new Uint8Array(65536); + this.data16 = new Uint16Array(this.data.buffer); + this.data32 = new Int32Array(this.data.buffer); + this.data_end = this.data_length = 0; + this.current_atapi_command = this.current_command = -1; + this.last_io_id = this.write_dest = 0; + this.in_progress_io_ids = new Set; + this.cancelled_io_ids = new Set; + Object.seal(this); +} +$IDEInterface$$.prototype.device_reset = function() { + this.is_atapi ? (this.status = 0, this.sector = this.error = this.bytecount = 1, this.cylinder_low = 20, this.cylinder_high = 235) : (this.status = 81, this.sector = this.error = this.bytecount = 1, this.cylinder_high = this.cylinder_low = 0); + this.cancel_io_operations(); +}; +$IDEInterface$$.prototype.push_irq = function() { + this.device.push_irq(); +}; +$IDEInterface$$.prototype.ata_command = function($cmd_last_sector$$) { + $dbg_log$$("ATA Command: " + $h$$($cmd_last_sector$$) + " slave=" + (this.drive_head >> 4 & 1), 32768); + if (this.buffer) { + switch(this.current_command = $cmd_last_sector$$, this.error = 0, $cmd_last_sector$$) { + case 8: + $dbg_log$$("ATA device reset", 32768); + this.data_length = this.data_end = this.data_pointer = 0; + this.device_reset(); + this.push_irq(); + break; + case 16: + this.status = 80; + this.cylinder_low = 0; + this.push_irq(); + break; + case 248: + this.status = 80; + $cmd_last_sector$$ = this.sector_count - 1; + this.sector = $cmd_last_sector$$ & 255; + this.cylinder_low = $cmd_last_sector$$ >> 8 & 255; + this.cylinder_high = $cmd_last_sector$$ >> 16 & 255; + this.drive_head = this.drive_head & 240 | $cmd_last_sector$$ >> 24 & 15; + this.push_irq(); + break; + case 39: + this.status = 80; + $cmd_last_sector$$ = this.sector_count - 1; + this.sector = $cmd_last_sector$$ & 255; + this.cylinder_low = $cmd_last_sector$$ >> 8 & 255; + this.cylinder_high = $cmd_last_sector$$ >> 16 & 255; + this.sector |= $cmd_last_sector$$ >> 24 << 8 & 65280; + this.push_irq(); + break; + case 32: + case 36: + case 41: + case 196: + this.ata_read_sectors($cmd_last_sector$$); + break; + case 48: + case 52: + case 57: + case 197: + this.ata_write_sectors($cmd_last_sector$$); + break; + case 144: + this.push_irq(); + this.error = 257; + this.status = 80; + break; + case 145: + this.status = 80; + this.push_irq(); + break; + case 160: + this.is_atapi && (this.status = 88, this.data_allocate(12), this.data_end = 12, this.bytecount = 1, this.push_irq()); + break; + case 161: + $dbg_log$$("ATA identify packet device", 32768); + this.is_atapi ? (this.create_identify_packet(), this.status = 88, this.cylinder_low = 20, this.cylinder_high = 235) : this.status = 65; + this.push_irq(); + break; + case 198: + $dbg_log$$("Logical sectors per DRQ Block: " + $h$$(this.bytecount & 255), 32768); + this.sectors_per_drq = this.bytecount & 255; + this.status = 80; + this.push_irq(); + break; + case 37: + case 200: + this.ata_read_sectors_dma($cmd_last_sector$$); + break; + case 53: + case 202: + this.ata_write_sectors_dma($cmd_last_sector$$); + break; + case 64: + $dbg_log$$("read verify sectors", 32768); + this.status = 80; + this.push_irq(); + break; + case 218: + $dbg_log$$("Unimplemented: get media status", 32768); + this.status = 65; + this.error = 4; + this.push_irq(); + break; + case 224: + $dbg_log$$("ATA standby immediate", 32768); + this.status = 80; + this.push_irq(); + break; + case 225: + $dbg_log$$("ATA idle immediate", 32768); + this.status = 80; + this.push_irq(); + break; + case 231: + $dbg_log$$("ATA flush cache", 32768); + this.status = 80; + this.push_irq(); + break; + case 236: + $dbg_log$$("ATA identify device", 32768); + if (this.is_atapi) { + this.status = 65; + this.error = 4; + this.push_irq(); + break; + } + this.create_identify_packet(); + this.status = 88; + this.push_irq(); + break; + case 234: + $dbg_log$$("flush cache ext", 32768); + this.status = 80; + this.push_irq(); + break; + case 239: + $dbg_log$$("set features: " + $h$$(this.bytecount & 255), 32768); + this.status = 80; + this.push_irq(); + break; + case 222: + this.status = 80; + this.push_irq(); + break; + case 245: + $dbg_log$$("security freeze lock", 32768); + this.status = 80; + this.push_irq(); + break; + case 249: + $dbg_log$$("Unimplemented: set max address", 32768); + this.status = 65; + this.error = 4; + break; + default: + $dbg_assert$$(!1, "New ATA cmd on 1F7: " + $h$$($cmd_last_sector$$), 32768), this.status = 65, this.error = 4; + } + } else { + $dbg_log$$("abort: No buffer", 32768), this.error = 4, this.status = 65, this.push_irq(); + } +}; +$IDEInterface$$.prototype.atapi_handle = function() { + $dbg_log$$("ATAPI Command: " + $h$$(this.data[0]) + " slave=" + (this.drive_head >> 4 & 1), 32768); + this.data_pointer = 0; + this.current_atapi_command = this.data[0]; + switch(this.current_atapi_command) { + case 0: + $dbg_log$$("test unit ready", 32768); + this.data_allocate(0); + this.data_end = this.data_length; + this.status = 80; + break; + case 3: + this.data_allocate(this.data[4]); + this.data_end = this.data_length; + this.status = 88; + this.data[0] = 240; + this.data[2] = 5; + this.data[7] = 8; + break; + case 18: + var $count$jscomp$41_length$jscomp$19_sector_count$$ = this.data[4]; + this.status = 88; + $dbg_log$$("inquiry: " + $h$$(this.data[1], 2) + " length=" + $count$jscomp$41_length$jscomp$19_sector_count$$, 32768); + this.data.set([5, 128, 1, 49, 31, 0, 0, 0, 83, 79, 78, 89, 32, 32, 32, 32, 67, 68, 45, 82, 79, 77, 32, 67, 68, 85, 45, 49, 48, 48, 48, 32, 49, 46, 49, 97, ]); + this.data_end = this.data_length = Math.min(36, $count$jscomp$41_length$jscomp$19_sector_count$$); + break; + case 26: + this.data_allocate(this.data[4]); + this.data_end = this.data_length; + this.status = 88; + break; + case 30: + this.data_allocate(0); + this.data_end = this.data_length; + this.status = 80; + break; + case 37: + $count$jscomp$41_length$jscomp$19_sector_count$$ = this.sector_count - 1; + this.data_set(new Uint8Array([$count$jscomp$41_length$jscomp$19_sector_count$$ >> 24 & 255, $count$jscomp$41_length$jscomp$19_sector_count$$ >> 16 & 255, $count$jscomp$41_length$jscomp$19_sector_count$$ >> 8 & 255, $count$jscomp$41_length$jscomp$19_sector_count$$ & 255, 0, 0, this.sector_size >> 8 & 255, this.sector_size & 255, ])); + this.data_end = this.data_length; + this.status = 88; + break; + case 40: + this.lba_count & 1 ? this.atapi_read_dma(this.data) : this.atapi_read(this.data); + break; + case 66: + $count$jscomp$41_length$jscomp$19_sector_count$$ = this.data[8]; + this.data_allocate(Math.min(8, $count$jscomp$41_length$jscomp$19_sector_count$$)); + this.data_end = this.data_length; + $dbg_log$$("read q subcode: length=" + $count$jscomp$41_length$jscomp$19_sector_count$$, 32768); + this.status = 88; + break; + case 67: + $count$jscomp$41_length$jscomp$19_sector_count$$ = this.data[8] | this.data[7] << 8; + var $format$jscomp$19_page_code$$ = this.data[9] >> 6; + this.data_allocate($count$jscomp$41_length$jscomp$19_sector_count$$); + this.data_end = this.data_length; + $dbg_log$$("read toc: " + $h$$($format$jscomp$19_page_code$$, 2) + " length=" + $count$jscomp$41_length$jscomp$19_sector_count$$ + " " + (this.data[1] & 2) + " " + $h$$(this.data[6]), 32768); + 0 === $format$jscomp$19_page_code$$ ? ($count$jscomp$41_length$jscomp$19_sector_count$$ = this.sector_count, this.data.set(new Uint8Array([0, 18, 1, 1, 0, 20, 1, 0, 0, 0, 0, 0, 0, 22, 170, 0, $count$jscomp$41_length$jscomp$19_sector_count$$ >> 24, $count$jscomp$41_length$jscomp$19_sector_count$$ >> 16 & 255, $count$jscomp$41_length$jscomp$19_sector_count$$ >> 8 & 255, $count$jscomp$41_length$jscomp$19_sector_count$$ & 255, ]))) : 1 === $format$jscomp$19_page_code$$ ? this.data.set(new Uint8Array([0, + 10, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, ])) : $dbg_assert$$(!1, "Unimplemented format: " + $format$jscomp$19_page_code$$); + this.status = 88; + break; + case 70: + $count$jscomp$41_length$jscomp$19_sector_count$$ = this.data[8] | this.data[7] << 8; + $count$jscomp$41_length$jscomp$19_sector_count$$ = Math.min($count$jscomp$41_length$jscomp$19_sector_count$$, 32); + this.data_allocate($count$jscomp$41_length$jscomp$19_sector_count$$); + this.data_end = this.data_length; + this.data[0] = $count$jscomp$41_length$jscomp$19_sector_count$$ - 4 >> 24 & 255; + this.data[1] = $count$jscomp$41_length$jscomp$19_sector_count$$ - 4 >> 16 & 255; + this.data[2] = $count$jscomp$41_length$jscomp$19_sector_count$$ - 4 >> 8 & 255; + this.data[3] = $count$jscomp$41_length$jscomp$19_sector_count$$ - 4 & 255; + this.data[6] = 8; + this.data[10] = 3; + this.status = 88; + break; + case 81: + this.data_allocate(0); + this.data_end = this.data_length; + this.status = 80; + break; + case 82: + $dbg_log$$("Unimplemented ATAPI command: " + $h$$(this.data[0]), 32768); + this.status = 81; + this.data_length = 0; + this.error = 80; + break; + case 90: + $count$jscomp$41_length$jscomp$19_sector_count$$ = this.data[8] | this.data[7] << 8; + $format$jscomp$19_page_code$$ = this.data[2]; + $dbg_log$$("mode sense: " + $h$$($format$jscomp$19_page_code$$) + " length=" + $count$jscomp$41_length$jscomp$19_sector_count$$, 32768); + 42 === $format$jscomp$19_page_code$$ && this.data_allocate(Math.min(30, $count$jscomp$41_length$jscomp$19_sector_count$$)); + this.data_end = this.data_length; + this.status = 88; + break; + case 189: + this.data_allocate(this.data[9] | this.data[8] << 8); + this.data_end = this.data_length; + this.data[5] = 1; + this.status = 88; + break; + case 74: + this.status = 81; + this.data_length = 0; + this.error = 80; + $dbg_log$$("Unimplemented ATAPI command: " + $h$$(this.data[0]), 32768); + break; + case 190: + $dbg_log$$("Unimplemented ATAPI command: " + $h$$(this.data[0]), 32768); + this.data_allocate(0); + this.data_end = this.data_length; + this.status = 80; + break; + default: + this.status = 81, this.data_length = 0, this.error = 80, $dbg_log$$("Unimplemented ATAPI command: " + $h$$(this.data[0]), 32768), $dbg_assert$$(!1); + } + this.bytecount = this.bytecount & -8 | 2; + 0 === (this.status & 128) && this.push_irq(); + 0 === (this.status & 128) && 0 === this.data_length && (this.bytecount |= 1, this.status &= -9); +}; +$IDEInterface$$.prototype.do_write = function() { + this.status = 80; + $dbg_assert$$(this.data_length <= this.data.length); + var $data$jscomp$103$$ = this.data.subarray(0, this.data_length); + $dbg_assert$$(0 === this.data_length % 512); + this.ata_advance(this.current_command, this.data_length / 512); + this.push_irq(); + this.buffer.set(this.write_dest, $data$jscomp$103$$, function() { + }); + this.report_write(this.data_length); +}; +$IDEInterface$$.prototype.atapi_read = function($cmd$jscomp$1_flags$jscomp$7$$) { + var $lba$$ = $cmd$jscomp$1_flags$jscomp$7$$[2] << 24 | $cmd$jscomp$1_flags$jscomp$7$$[3] << 16 | $cmd$jscomp$1_flags$jscomp$7$$[4] << 8 | $cmd$jscomp$1_flags$jscomp$7$$[5], $count$jscomp$42$$ = $cmd$jscomp$1_flags$jscomp$7$$[7] << 8 | $cmd$jscomp$1_flags$jscomp$7$$[8]; + $cmd$jscomp$1_flags$jscomp$7$$ = $cmd$jscomp$1_flags$jscomp$7$$[1]; + var $byte_count$$ = $count$jscomp$42$$ * this.sector_size, $start$jscomp$21$$ = $lba$$ * this.sector_size; + $dbg_log$$("CD read lba=" + $h$$($lba$$) + " lbacount=" + $h$$($count$jscomp$42$$) + " bytecount=" + $h$$($byte_count$$) + " flags=" + $h$$($cmd$jscomp$1_flags$jscomp$7$$), 32768); + this.data_length = 0; + var $req_length$$ = this.cylinder_high << 8 & 65280 | this.cylinder_low & 255; + $dbg_log$$($h$$(this.cylinder_high, 2) + " " + $h$$(this.cylinder_low, 2), 32768); + this.cylinder_low = this.cylinder_high = 0; + 65535 === $req_length$$ && $req_length$$--; + $req_length$$ > $byte_count$$ && ($req_length$$ = $byte_count$$); + $start$jscomp$21$$ >= this.buffer.byteLength ? ($dbg_assert$$(!1, "CD read: Outside of disk end=" + $h$$($start$jscomp$21$$ + $byte_count$$) + " size=" + $h$$(this.buffer.byteLength), 32768), this.status = 255, this.push_irq()) : 0 === $byte_count$$ ? (this.status = 80, this.data_pointer = 0) : ($byte_count$$ = Math.min($byte_count$$, this.buffer.byteLength - $start$jscomp$21$$), this.status = 208, this.report_read_start(), this.read_buffer($start$jscomp$21$$, $byte_count$$, $data$jscomp$104$$ => + { + $dbg_log$$("cd read: data arrived", 32768); + this.data_set($data$jscomp$104$$); + this.status = 88; + this.bytecount = this.bytecount & -8 | 2; + this.push_irq(); + this.data_end = $req_length$$ &= -4; + this.data_end > this.data_length && (this.data_end = this.data_length); + this.cylinder_low = this.data_end & 255; + this.cylinder_high = this.data_end >> 8 & 255; + this.report_read_end($byte_count$$); + })); +}; +$IDEInterface$$.prototype.atapi_read_dma = function($cmd$jscomp$2_flags$jscomp$8$$) { + var $lba$jscomp$1$$ = $cmd$jscomp$2_flags$jscomp$8$$[2] << 24 | $cmd$jscomp$2_flags$jscomp$8$$[3] << 16 | $cmd$jscomp$2_flags$jscomp$8$$[4] << 8 | $cmd$jscomp$2_flags$jscomp$8$$[5], $count$jscomp$43$$ = $cmd$jscomp$2_flags$jscomp$8$$[7] << 8 | $cmd$jscomp$2_flags$jscomp$8$$[8]; + $cmd$jscomp$2_flags$jscomp$8$$ = $cmd$jscomp$2_flags$jscomp$8$$[1]; + var $byte_count$jscomp$1$$ = $count$jscomp$43$$ * this.sector_size, $start$jscomp$22$$ = $lba$jscomp$1$$ * this.sector_size; + $dbg_log$$("CD read DMA lba=" + $h$$($lba$jscomp$1$$) + " lbacount=" + $h$$($count$jscomp$43$$) + " bytecount=" + $h$$($byte_count$jscomp$1$$) + " flags=" + $h$$($cmd$jscomp$2_flags$jscomp$8$$), 32768); + $start$jscomp$22$$ >= this.buffer.byteLength ? ($dbg_assert$$(!1, "CD read: Outside of disk end=" + $h$$($start$jscomp$22$$ + $byte_count$jscomp$1$$) + " size=" + $h$$(this.buffer.byteLength), 32768), this.status = 255, this.push_irq()) : (this.status = 208, this.report_read_start(), this.read_buffer($start$jscomp$22$$, $byte_count$jscomp$1$$, $data$jscomp$105$$ => { + $dbg_log$$("atapi_read_dma: Data arrived"); + this.report_read_end($byte_count$jscomp$1$$); + this.status = 88; + this.bytecount = this.bytecount & -8 | 2; + this.data_set($data$jscomp$105$$); + this.do_atapi_dma(); + })); +}; +$IDEInterface$$.prototype.do_atapi_dma = function() { + if (0 === (this.device.dma_status & 1)) { + $dbg_log$$("do_atapi_dma: Status not set", 32768); + } else { + if (0 === (this.status & 8)) { + $dbg_log$$("do_atapi_dma: DRQ not set", 32768); + } else { + $dbg_log$$("atapi dma transfer len=" + this.data_length, 32768); + var $prdt_start$$ = this.device.prdt_addr, $offset$jscomp$37$$ = 0, $data$jscomp$106$$ = this.data; + do { + var $addr$jscomp$8$$ = this.cpu.read32s($prdt_start$$), $count$jscomp$44$$ = this.cpu.read16($prdt_start$$ + 4), $end$jscomp$13$$ = this.cpu.read8($prdt_start$$ + 7) & 128; + $count$jscomp$44$$ || ($count$jscomp$44$$ = 65536); + $dbg_log$$("dma read dest=" + $h$$($addr$jscomp$8$$) + " count=" + $h$$($count$jscomp$44$$) + " datalen=" + $h$$(this.data_length), 32768); + this.cpu.write_blob($data$jscomp$106$$.subarray($offset$jscomp$37$$, Math.min($offset$jscomp$37$$ + $count$jscomp$44$$, this.data_length)), $addr$jscomp$8$$); + $offset$jscomp$37$$ += $count$jscomp$44$$; + $prdt_start$$ += 8; + if ($offset$jscomp$37$$ >= this.data_length && !$end$jscomp$13$$) { + $dbg_log$$("leave early end=" + +$end$jscomp$13$$ + " offset=" + $h$$($offset$jscomp$37$$) + " data_length=" + $h$$(this.data_length) + " cmd=" + $h$$(this.current_command), 32768); + break; + } + } while (!$end$jscomp$13$$); + $dbg_log$$("end offset=" + $offset$jscomp$37$$, 32768); + this.status = 80; + this.device.dma_status &= -2; + this.bytecount = this.bytecount & -8 | 3; + this.push_irq(); + } + } +}; +$IDEInterface$$.prototype.read_data = function($length$jscomp$20$$) { + if (this.data_pointer < this.data_end) { + $dbg_assert$$(this.data_pointer + $length$jscomp$20$$ - 1 < this.data_end); + $dbg_assert$$(0 === this.data_pointer % $length$jscomp$20$$, $h$$(this.data_pointer) + " " + $length$jscomp$20$$); + var $result$jscomp$5$$ = 1 === $length$jscomp$20$$ ? this.data[this.data_pointer] : 2 === $length$jscomp$20$$ ? this.data16[this.data_pointer >>> 1] : this.data32[this.data_pointer >>> 2]; + this.data_pointer += $length$jscomp$20$$; + 0 === (this.data_pointer & (0 === (this.data_end & 4095) ? 4095 : 255)) && $dbg_log$$("Read 1F0: " + $h$$(this.data[this.data_pointer], 2) + " cur=" + $h$$(this.data_pointer) + " cnt=" + $h$$(this.data_length), 32768); + this.data_pointer >= this.data_end && this.read_end(); + return $result$jscomp$5$$; + } + $dbg_log$$("Read 1F0: empty", 32768); + this.data_pointer += $length$jscomp$20$$; + return 0; +}; +$IDEInterface$$.prototype.read_end = function() { + $dbg_log$$("read_end cmd=" + $h$$(this.current_command) + " data_pointer=" + $h$$(this.data_pointer) + " end=" + $h$$(this.data_end) + " length=" + $h$$(this.data_length), 32768); + if (160 === this.current_command) { + if (this.data_end === this.data_length) { + this.status = 80, this.bytecount = this.bytecount & -8 | 3, this.push_irq(); + } else { + this.status = 88; + this.bytecount = this.bytecount & -8 | 2; + this.push_irq(); + var $byte_count$jscomp$2_sector_count$jscomp$1$$ = this.cylinder_high << 8 & 65280 | this.cylinder_low & 255; + this.data_end + $byte_count$jscomp$2_sector_count$jscomp$1$$ > this.data_length ? (this.cylinder_low = this.data_length - this.data_end & 255, this.cylinder_high = this.data_length - this.data_end >> 8 & 255, this.data_end = this.data_length) : this.data_end += $byte_count$jscomp$2_sector_count$jscomp$1$$; + $dbg_log$$("data_end=" + $h$$(this.data_end), 32768); + } + } else { + this.error = 0, this.data_pointer >= this.data_length ? this.status = 80 : (196 === this.current_command || 41 === this.current_command ? ($byte_count$jscomp$2_sector_count$jscomp$1$$ = Math.min(this.sectors_per_drq, (this.data_length - this.data_end) / 512), $dbg_assert$$(0 === $byte_count$jscomp$2_sector_count$jscomp$1$$ % 1)) : ($dbg_assert$$(32 === this.current_command || 36 === this.current_command), $byte_count$jscomp$2_sector_count$jscomp$1$$ = 1), this.ata_advance(this.current_command, + $byte_count$jscomp$2_sector_count$jscomp$1$$), this.data_end += 512 * $byte_count$jscomp$2_sector_count$jscomp$1$$, this.status = 88, this.push_irq()); + } +}; +$IDEInterface$$.prototype.write_data_port = function($data$jscomp$107$$, $length$jscomp$21$$) { + $dbg_assert$$(0 === this.data_pointer % $length$jscomp$21$$); + this.data_pointer >= this.data_end ? $dbg_log$$("Redundant write to data port: " + $h$$($data$jscomp$107$$) + " count=" + $h$$(this.data_end) + " cur=" + $h$$(this.data_pointer), 32768) : ((0 === (this.data_pointer + $length$jscomp$21$$ & (0 === (this.data_end & 4095) ? 4095 : 255)) || 20 > this.data_end) && $dbg_log$$("Data port: " + $h$$($data$jscomp$107$$ >>> 0) + " count=" + $h$$(this.data_end) + " cur=" + $h$$(this.data_pointer), 32768), 1 === $length$jscomp$21$$ ? this.data[this.data_pointer++] = + $data$jscomp$107$$ : 2 === $length$jscomp$21$$ ? (this.data16[this.data_pointer >>> 1] = $data$jscomp$107$$, this.data_pointer += 2) : (this.data32[this.data_pointer >>> 2] = $data$jscomp$107$$, this.data_pointer += 4), $dbg_assert$$(this.data_pointer <= this.data_end), this.data_pointer === this.data_end && this.write_end()); +}; +$IDEInterface$$.prototype.write_data_port8 = function($data$jscomp$108$$) { + this.write_data_port($data$jscomp$108$$, 1); +}; +$IDEInterface$$.prototype.write_data_port16 = function($data$jscomp$109$$) { + this.write_data_port($data$jscomp$109$$, 2); +}; +$IDEInterface$$.prototype.write_data_port32 = function($data$jscomp$110$$) { + this.write_data_port($data$jscomp$110$$, 4); +}; +$IDEInterface$$.prototype.write_end = function() { + 160 === this.current_command ? this.atapi_handle() : ($dbg_log$$("write_end data_pointer=" + $h$$(this.data_pointer) + " data_length=" + $h$$(this.data_length), 32768), this.data_pointer >= this.data_length ? this.do_write() : ($dbg_assert$$(48 === this.current_command || 52 === this.current_command || 197 === this.current_command, "Unexpected command: " + $h$$(this.current_command)), this.status = 88, this.data_end += 512, this.push_irq())); +}; +$IDEInterface$$.prototype.ata_advance = function($cmd$jscomp$3_new_sector$$, $c_sectors$$) { + $dbg_log$$("Advance sectors=" + $c_sectors$$ + " old_bytecount=" + this.bytecount, 32768); + this.bytecount -= $c_sectors$$; + 36 === $cmd$jscomp$3_new_sector$$ || 41 === $cmd$jscomp$3_new_sector$$ || 52 === $cmd$jscomp$3_new_sector$$ || 57 === $cmd$jscomp$3_new_sector$$ || 37 === $cmd$jscomp$3_new_sector$$ || 53 === $cmd$jscomp$3_new_sector$$ ? ($cmd$jscomp$3_new_sector$$ = $c_sectors$$ + this.get_lba48(), this.sector = $cmd$jscomp$3_new_sector$$ & 255 | $cmd$jscomp$3_new_sector$$ >> 16 & 65280, this.cylinder_low = $cmd$jscomp$3_new_sector$$ >> 8 & 255, this.cylinder_high = $cmd$jscomp$3_new_sector$$ >> 16 & 255) : this.is_lba ? + ($cmd$jscomp$3_new_sector$$ = $c_sectors$$ + this.get_lba28(), this.sector = $cmd$jscomp$3_new_sector$$ & 255, this.cylinder_low = $cmd$jscomp$3_new_sector$$ >> 8 & 255, this.cylinder_high = $cmd$jscomp$3_new_sector$$ >> 16 & 255, this.head = this.head & -16 | $cmd$jscomp$3_new_sector$$ & 15) : ($cmd$jscomp$3_new_sector$$ = $c_sectors$$ + this.get_chs(), $c_sectors$$ = $cmd$jscomp$3_new_sector$$ / (this.head_count * this.sectors_per_track) | 0, this.cylinder_low = $c_sectors$$ & 255, this.cylinder_high = + $c_sectors$$ >> 8 & 255, this.head = ($cmd$jscomp$3_new_sector$$ / this.sectors_per_track | 0) % this.head_count & 15, this.sector = $cmd$jscomp$3_new_sector$$ % this.sectors_per_track + 1 & 255, $dbg_assert$$($cmd$jscomp$3_new_sector$$ === this.get_chs())); +}; +$IDEInterface$$.prototype.ata_read_sectors = function($cmd$jscomp$4$$) { + var $is_lba48_lba$jscomp$2$$ = 36 === $cmd$jscomp$4$$ || 41 === $cmd$jscomp$4$$, $count$jscomp$45$$ = this.get_count($is_lba48_lba$jscomp$2$$); + $is_lba48_lba$jscomp$2$$ = this.get_lba($is_lba48_lba$jscomp$2$$); + var $is_single$$ = 32 === $cmd$jscomp$4$$ || 36 === $cmd$jscomp$4$$, $byte_count$jscomp$3$$ = $count$jscomp$45$$ * this.sector_size, $start$jscomp$23$$ = $is_lba48_lba$jscomp$2$$ * this.sector_size; + $dbg_log$$("ATA read cmd=" + $h$$($cmd$jscomp$4$$) + " mode=" + (this.is_lba ? "lba" : "chs") + " lba=" + $h$$($is_lba48_lba$jscomp$2$$) + " lbacount=" + $h$$($count$jscomp$45$$) + " bytecount=" + $h$$($byte_count$jscomp$3$$), 32768); + $start$jscomp$23$$ + $byte_count$jscomp$3$$ > this.buffer.byteLength ? ($dbg_assert$$(!1, "ATA read: Outside of disk", 32768), this.status = 255, this.push_irq()) : (this.status = 192, this.report_read_start(), this.read_buffer($start$jscomp$23$$, $byte_count$jscomp$3$$, $data$jscomp$111$$ => { + $dbg_log$$("ata_read: Data arrived", 32768); + this.data_set($data$jscomp$111$$); + this.status = 88; + this.data_end = $is_single$$ ? 512 : Math.min($byte_count$jscomp$3$$, 512 * this.sectors_per_drq); + this.ata_advance($cmd$jscomp$4$$, $is_single$$ ? 1 : Math.min($count$jscomp$45$$, this.sectors_per_track)); + this.push_irq(); + this.report_read_end($byte_count$jscomp$3$$); + })); +}; +$IDEInterface$$.prototype.ata_read_sectors_dma = function($cmd$jscomp$5_count$jscomp$46$$) { + var $is_lba48$jscomp$1_lba$jscomp$3$$ = 37 === $cmd$jscomp$5_count$jscomp$46$$; + $cmd$jscomp$5_count$jscomp$46$$ = this.get_count($is_lba48$jscomp$1_lba$jscomp$3$$); + $is_lba48$jscomp$1_lba$jscomp$3$$ = this.get_lba($is_lba48$jscomp$1_lba$jscomp$3$$); + var $byte_count$jscomp$4$$ = $cmd$jscomp$5_count$jscomp$46$$ * this.sector_size, $start$jscomp$24$$ = $is_lba48$jscomp$1_lba$jscomp$3$$ * this.sector_size; + $dbg_log$$("ATA DMA read lba=" + $h$$($is_lba48$jscomp$1_lba$jscomp$3$$) + " lbacount=" + $h$$($cmd$jscomp$5_count$jscomp$46$$) + " bytecount=" + $h$$($byte_count$jscomp$4$$), 32768); + $start$jscomp$24$$ + $byte_count$jscomp$4$$ > this.buffer.byteLength ? ($dbg_assert$$(!1, "ATA read: Outside of disk", 32768), this.status = 255, this.push_irq()) : (this.status = 88, this.device.dma_status |= 1); +}; +$IDEInterface$$.prototype.do_ata_read_sectors_dma = function() { + var $is_lba48$jscomp$2_lba$jscomp$4$$ = 37 === this.current_command, $count$jscomp$47$$ = this.get_count($is_lba48$jscomp$2_lba$jscomp$4$$); + $is_lba48$jscomp$2_lba$jscomp$4$$ = this.get_lba($is_lba48$jscomp$2_lba$jscomp$4$$); + var $byte_count$jscomp$5$$ = $count$jscomp$47$$ * this.sector_size, $start$jscomp$25$$ = $is_lba48$jscomp$2_lba$jscomp$4$$ * this.sector_size; + $dbg_assert$$($is_lba48$jscomp$2_lba$jscomp$4$$ < this.buffer.byteLength); + this.report_read_start(); + var $orig_prdt_start$$ = this.device.prdt_addr; + this.read_buffer($start$jscomp$25$$, $byte_count$jscomp$5$$, $data$jscomp$112$$ => { + $dbg_log$$("do_ata_read_sectors_dma: Data arrived", 32768); + var $prdt_start$jscomp$1$$ = this.device.prdt_addr, $offset$jscomp$38$$ = 0; + $dbg_assert$$($orig_prdt_start$$ === $prdt_start$jscomp$1$$); + do { + var $prd_addr$$ = this.cpu.read32s($prdt_start$jscomp$1$$), $prd_count$$ = this.cpu.read16($prdt_start$jscomp$1$$ + 4), $end$jscomp$14$$ = this.cpu.read8($prdt_start$jscomp$1$$ + 7) & 128; + $prd_count$$ || ($prd_count$$ = 65536, $dbg_log$$("dma: prd count was 0", 32768)); + $dbg_log$$("dma read transfer dest=" + $h$$($prd_addr$$) + " prd_count=" + $h$$($prd_count$$), 32768); + this.cpu.write_blob($data$jscomp$112$$.subarray($offset$jscomp$38$$, $offset$jscomp$38$$ + $prd_count$$), $prd_addr$$); + $offset$jscomp$38$$ += $prd_count$$; + $prdt_start$jscomp$1$$ += 8; + } while (!$end$jscomp$14$$); + $dbg_assert$$($offset$jscomp$38$$ === $byte_count$jscomp$5$$); + this.ata_advance(this.current_command, $count$jscomp$47$$); + this.status = 80; + this.device.dma_status &= -2; + this.current_command = -1; + this.push_irq(); + this.report_read_end($byte_count$jscomp$5$$); + }); +}; +$IDEInterface$$.prototype.ata_write_sectors = function($cmd$jscomp$7_is_single$jscomp$1$$) { + var $is_lba48$jscomp$3_lba$jscomp$5$$ = 52 === $cmd$jscomp$7_is_single$jscomp$1$$ || 57 === $cmd$jscomp$7_is_single$jscomp$1$$, $count$jscomp$48$$ = this.get_count($is_lba48$jscomp$3_lba$jscomp$5$$); + $is_lba48$jscomp$3_lba$jscomp$5$$ = this.get_lba($is_lba48$jscomp$3_lba$jscomp$5$$); + $cmd$jscomp$7_is_single$jscomp$1$$ = 48 === $cmd$jscomp$7_is_single$jscomp$1$$ || 52 === $cmd$jscomp$7_is_single$jscomp$1$$; + var $byte_count$jscomp$6$$ = $count$jscomp$48$$ * this.sector_size, $start$jscomp$26$$ = $is_lba48$jscomp$3_lba$jscomp$5$$ * this.sector_size; + $dbg_log$$("ATA write lba=" + $h$$($is_lba48$jscomp$3_lba$jscomp$5$$) + " mode=" + (this.is_lba ? "lba" : "chs") + " lbacount=" + $h$$($count$jscomp$48$$) + " bytecount=" + $h$$($byte_count$jscomp$6$$), 32768); + $start$jscomp$26$$ + $byte_count$jscomp$6$$ > this.buffer.byteLength ? ($dbg_assert$$(!1, "ATA write: Outside of disk", 32768), this.status = 255, this.push_irq()) : (this.status = 88, this.data_allocate_noclear($byte_count$jscomp$6$$), this.data_end = $cmd$jscomp$7_is_single$jscomp$1$$ ? 512 : Math.min($byte_count$jscomp$6$$, 512 * this.sectors_per_drq), this.write_dest = $start$jscomp$26$$); +}; +$IDEInterface$$.prototype.ata_write_sectors_dma = function($cmd$jscomp$8_count$jscomp$49$$) { + var $is_lba48$jscomp$4_lba$jscomp$6$$ = 53 === $cmd$jscomp$8_count$jscomp$49$$; + $cmd$jscomp$8_count$jscomp$49$$ = this.get_count($is_lba48$jscomp$4_lba$jscomp$6$$); + $is_lba48$jscomp$4_lba$jscomp$6$$ = this.get_lba($is_lba48$jscomp$4_lba$jscomp$6$$); + var $byte_count$jscomp$7$$ = $cmd$jscomp$8_count$jscomp$49$$ * this.sector_size, $start$jscomp$27$$ = $is_lba48$jscomp$4_lba$jscomp$6$$ * this.sector_size; + $dbg_log$$("ATA DMA write lba=" + $h$$($is_lba48$jscomp$4_lba$jscomp$6$$) + " lbacount=" + $h$$($cmd$jscomp$8_count$jscomp$49$$) + " bytecount=" + $h$$($byte_count$jscomp$7$$), 32768); + $start$jscomp$27$$ + $byte_count$jscomp$7$$ > this.buffer.byteLength ? ($dbg_assert$$(!1, "ATA DMA write: Outside of disk", 32768), this.status = 255, this.push_irq()) : (this.status = 88, this.device.dma_status |= 1); +}; +$IDEInterface$$.prototype.do_ata_write_sectors_dma = function() { + var $byte_count$jscomp$8_is_lba48$jscomp$5$$ = 53 === this.current_command, $count$jscomp$50$$ = this.get_count($byte_count$jscomp$8_is_lba48$jscomp$5$$), $lba$jscomp$7_start$jscomp$28$$ = this.get_lba($byte_count$jscomp$8_is_lba48$jscomp$5$$); + $byte_count$jscomp$8_is_lba48$jscomp$5$$ = $count$jscomp$50$$ * this.sector_size; + $lba$jscomp$7_start$jscomp$28$$ *= this.sector_size; + var $prdt_start$jscomp$2$$ = this.device.prdt_addr, $offset$jscomp$39$$ = 0; + $dbg_log$$("prdt addr: " + $h$$($prdt_start$jscomp$2$$, 8), 32768); + const $buffer$jscomp$27$$ = new Uint8Array($byte_count$jscomp$8_is_lba48$jscomp$5$$); + do { + var $prd_addr$jscomp$1_slice$jscomp$3$$ = this.cpu.read32s($prdt_start$jscomp$2$$), $prd_count$jscomp$1$$ = this.cpu.read16($prdt_start$jscomp$2$$ + 4), $end$jscomp$15$$ = this.cpu.read8($prdt_start$jscomp$2$$ + 7) & 128; + $prd_count$jscomp$1$$ || ($prd_count$jscomp$1$$ = 65536, $dbg_log$$("dma: prd count was 0", 32768)); + $dbg_log$$("dma write transfer dest=" + $h$$($prd_addr$jscomp$1_slice$jscomp$3$$) + " prd_count=" + $h$$($prd_count$jscomp$1$$), 32768); + $prd_addr$jscomp$1_slice$jscomp$3$$ = this.cpu.mem8.subarray($prd_addr$jscomp$1_slice$jscomp$3$$, $prd_addr$jscomp$1_slice$jscomp$3$$ + $prd_count$jscomp$1$$); + $dbg_assert$$($prd_addr$jscomp$1_slice$jscomp$3$$.length === $prd_count$jscomp$1$$); + $buffer$jscomp$27$$.set($prd_addr$jscomp$1_slice$jscomp$3$$, $offset$jscomp$39$$); + $offset$jscomp$39$$ += $prd_count$jscomp$1$$; + $prdt_start$jscomp$2$$ += 8; + } while (!$end$jscomp$15$$); + $dbg_assert$$($offset$jscomp$39$$ === $buffer$jscomp$27$$.length); + this.buffer.set($lba$jscomp$7_start$jscomp$28$$, $buffer$jscomp$27$$, () => { + $dbg_log$$("dma write completed", 32768); + this.ata_advance(this.current_command, $count$jscomp$50$$); + this.status = 80; + this.push_irq(); + this.device.dma_status &= -2; + this.current_command = -1; + }); + this.report_write($byte_count$jscomp$8_is_lba48$jscomp$5$$); +}; +$IDEInterface$$.prototype.get_chs = function() { + var $c$jscomp$1$$ = this.cylinder_low & 255 | this.cylinder_high << 8 & 65280, $h$jscomp$7$$ = this.head, $s$jscomp$5$$ = this.sector & 255; + $dbg_log$$("get_chs: c=" + $c$jscomp$1$$ + " h=" + $h$jscomp$7$$ + " s=" + $s$jscomp$5$$, 32768); + return ($c$jscomp$1$$ * this.head_count + $h$jscomp$7$$) * this.sectors_per_track + $s$jscomp$5$$ - 1; +}; +$IDEInterface$$.prototype.get_lba28 = function() { + return this.sector & 255 | this.cylinder_low << 8 & 65280 | this.cylinder_high << 16 & 16711680 | (this.head & 15) << 24; +}; +$IDEInterface$$.prototype.get_lba48 = function() { + return (this.sector & 255 | this.cylinder_low << 8 & 65280 | this.cylinder_high << 16 & 16711680 | this.sector >> 8 << 24 & 4278190080) >>> 0; +}; +$IDEInterface$$.prototype.get_lba = function($is_lba48$jscomp$6$$) { + return $is_lba48$jscomp$6$$ ? this.get_lba48() : this.is_lba ? this.get_lba28() : this.get_chs(); +}; +$IDEInterface$$.prototype.get_count = function($count$jscomp$51_is_lba48$jscomp$7$$) { + $count$jscomp$51_is_lba48$jscomp$7$$ ? ($count$jscomp$51_is_lba48$jscomp$7$$ = this.bytecount, 0 === $count$jscomp$51_is_lba48$jscomp$7$$ && ($count$jscomp$51_is_lba48$jscomp$7$$ = 65536)) : ($count$jscomp$51_is_lba48$jscomp$7$$ = this.bytecount & 255, 0 === $count$jscomp$51_is_lba48$jscomp$7$$ && ($count$jscomp$51_is_lba48$jscomp$7$$ = 256)); + return $count$jscomp$51_is_lba48$jscomp$7$$; +}; +$IDEInterface$$.prototype.create_identify_packet = function() { + if (this.drive_head & 16) { + this.data_allocate(0); + } else { + for (var $cylinder_count_i$jscomp$17$$ = 0; 512 > $cylinder_count_i$jscomp$17$$; $cylinder_count_i$jscomp$17$$++) { + this.data[$cylinder_count_i$jscomp$17$$] = 0; + } + $cylinder_count_i$jscomp$17$$ = Math.min(16383, this.cylinder_count); + this.data_set([64, this.is_atapi ? 133 : 0, $cylinder_count_i$jscomp$17$$, $cylinder_count_i$jscomp$17$$ >> 8, 0, 0, this.head_count, this.head_count >> 8, this.sectors_per_track / 512, this.sectors_per_track / 512 >> 8, 0, 2, this.sectors_per_track, this.sectors_per_track >> 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 118, 32, 54, 68, 72, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 128, 0, 1, 0, 0, 2, 0, 0, 0, 2, 0, 2, 7, 0, $cylinder_count_i$jscomp$17$$, $cylinder_count_i$jscomp$17$$ >> 8, this.head_count, this.head_count >> 8, this.sectors_per_track, 0, this.sector_count & 255, this.sector_count >> 8 & 255, this.sector_count >> 16 & 255, this.sector_count >> 24 & 255, 0, 0, this.sector_count & 255, this.sector_count >> 8 & 255, this.sector_count >> 16 & 255, this.sector_count >> 24 & 255, 0, 0, 160 === this.current_command ? + 0 : 7, 160 === this.current_command ? 0 : 4, 0, 0, 30, 0, 30, 0, 30, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 116, 0, 64, 0, 64, 0, 116, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, this.sector_count & 255, this.sector_count >> 8 & 255, this.sector_count >> 16 & 255, this.sector_count >> 24 & 255, ]); + this.data_end = this.data_length = 512; + } +}; +$IDEInterface$$.prototype.data_allocate = function($len$jscomp$12$$) { + this.data_allocate_noclear($len$jscomp$12$$); + for (var $i$jscomp$18$$ = 0; $i$jscomp$18$$ < $len$jscomp$12$$ + 3 >> 2; $i$jscomp$18$$++) { + this.data32[$i$jscomp$18$$] = 0; + } +}; +$IDEInterface$$.prototype.data_allocate_noclear = function($len$jscomp$13$$) { + this.data.length < $len$jscomp$13$$ && (this.data = new Uint8Array($len$jscomp$13$$ + 3 & -4), this.data16 = new Uint16Array(this.data.buffer), this.data32 = new Int32Array(this.data.buffer)); + this.data_length = $len$jscomp$13$$; + this.data_pointer = 0; +}; +$IDEInterface$$.prototype.data_set = function($data$jscomp$113$$) { + this.data_allocate_noclear($data$jscomp$113$$.length); + this.data.set($data$jscomp$113$$); +}; +$IDEInterface$$.prototype.report_read_start = function() { + this.bus.send("ide-read-start"); +}; +$IDEInterface$$.prototype.report_read_end = function($byte_count$jscomp$9$$) { + this.bus.send("ide-read-end", [this.nr, $byte_count$jscomp$9$$, $byte_count$jscomp$9$$ / this.sector_size | 0]); +}; +$IDEInterface$$.prototype.report_write = function($byte_count$jscomp$10$$) { + this.bus.send("ide-write-end", [this.nr, $byte_count$jscomp$10$$, $byte_count$jscomp$10$$ / this.sector_size | 0]); +}; +$IDEInterface$$.prototype.read_buffer = function($start$jscomp$29$$, $length$jscomp$22$$, $callback$jscomp$46$$) { + const $id$jscomp$7$$ = this.last_io_id++; + this.in_progress_io_ids.add($id$jscomp$7$$); + this.buffer.get($start$jscomp$29$$, $length$jscomp$22$$, $data$jscomp$114$$ => { + if (this.cancelled_io_ids.delete($id$jscomp$7$$)) { + $dbg_assert$$(!this.in_progress_io_ids.has($id$jscomp$7$$)); + } else { + var $removed$$ = this.in_progress_io_ids.delete($id$jscomp$7$$); + $dbg_assert$$($removed$$); + $callback$jscomp$46$$($data$jscomp$114$$); + } + }); +}; +$IDEInterface$$.prototype.cancel_io_operations = function() { + for (const $id$jscomp$8$$ of this.in_progress_io_ids) { + this.cancelled_io_ids.add($id$jscomp$8$$); + } + this.in_progress_io_ids.clear(); +}; +$IDEInterface$$.prototype.get_state = function() { + var $state$jscomp$10$$ = []; + $state$jscomp$10$$[0] = this.bytecount; + $state$jscomp$10$$[1] = this.cylinder_count; + $state$jscomp$10$$[2] = this.cylinder_high; + $state$jscomp$10$$[3] = this.cylinder_low; + $state$jscomp$10$$[4] = this.data_pointer; + $state$jscomp$10$$[5] = 0; + $state$jscomp$10$$[6] = 0; + $state$jscomp$10$$[7] = 0; + $state$jscomp$10$$[8] = 0; + $state$jscomp$10$$[9] = this.drive_head; + $state$jscomp$10$$[10] = this.error; + $state$jscomp$10$$[11] = this.head; + $state$jscomp$10$$[12] = this.head_count; + $state$jscomp$10$$[13] = this.is_atapi; + $state$jscomp$10$$[14] = this.is_lba; + $state$jscomp$10$$[15] = this.lba_count; + $state$jscomp$10$$[16] = this.data; + $state$jscomp$10$$[17] = this.data_length; + $state$jscomp$10$$[18] = this.sector; + $state$jscomp$10$$[19] = this.sector_count; + $state$jscomp$10$$[20] = this.sector_size; + $state$jscomp$10$$[21] = this.sectors_per_drq; + $state$jscomp$10$$[22] = this.sectors_per_track; + $state$jscomp$10$$[23] = this.status; + $state$jscomp$10$$[24] = this.write_dest; + $state$jscomp$10$$[25] = this.current_command; + $state$jscomp$10$$[26] = this.data_end; + $state$jscomp$10$$[27] = this.current_atapi_command; + $state$jscomp$10$$[28] = this.buffer; + return $state$jscomp$10$$; +}; +$IDEInterface$$.prototype.set_state = function($state$jscomp$11$$) { + this.bytecount = $state$jscomp$11$$[0]; + this.cylinder_count = $state$jscomp$11$$[1]; + this.cylinder_high = $state$jscomp$11$$[2]; + this.cylinder_low = $state$jscomp$11$$[3]; + this.data_pointer = $state$jscomp$11$$[4]; + this.drive_head = $state$jscomp$11$$[9]; + this.error = $state$jscomp$11$$[10]; + this.head = $state$jscomp$11$$[11]; + this.head_count = $state$jscomp$11$$[12]; + this.is_atapi = $state$jscomp$11$$[13]; + this.is_lba = $state$jscomp$11$$[14]; + this.lba_count = $state$jscomp$11$$[15]; + this.data = $state$jscomp$11$$[16]; + this.data_length = $state$jscomp$11$$[17]; + this.sector = $state$jscomp$11$$[18]; + this.sector_count = $state$jscomp$11$$[19]; + this.sector_size = $state$jscomp$11$$[20]; + this.sectors_per_drq = $state$jscomp$11$$[21]; + this.sectors_per_track = $state$jscomp$11$$[22]; + this.status = $state$jscomp$11$$[23]; + this.write_dest = $state$jscomp$11$$[24]; + this.current_command = $state$jscomp$11$$[25]; + this.data_end = $state$jscomp$11$$[26]; + this.current_atapi_command = $state$jscomp$11$$[27]; + this.data16 = new Uint16Array(this.data.buffer); + this.data32 = new Int32Array(this.data.buffer); + this.buffer && this.buffer.set_state($state$jscomp$11$$[28]); +}; +function $PCI$$($cpu$jscomp$4$$) { + this.pci_addr = new Uint8Array(4); + this.pci_value = new Uint8Array(4); + this.pci_response = new Uint8Array(4); + this.pci_status = new Uint8Array(4); + this.pci_addr32 = new Int32Array(this.pci_addr.buffer); + this.pci_value32 = new Int32Array(this.pci_value.buffer); + this.pci_response32 = new Int32Array(this.pci_response.buffer); + this.pci_status32 = new Int32Array(this.pci_status.buffer); + this.device_spaces = []; + this.devices = []; + this.cpu = $cpu$jscomp$4$$; + for (var $i$jscomp$19$$ = 0; 256 > $i$jscomp$19$$; $i$jscomp$19$$++) { + this.device_spaces[$i$jscomp$19$$] = void 0, this.devices[$i$jscomp$19$$] = void 0; + } + this.io = $cpu$jscomp$4$$.io; + $cpu$jscomp$4$$.io.register_write(3324, this, function($value$jscomp$104$$) { + this.pci_write8(this.pci_addr32[0], $value$jscomp$104$$); + }, function($value$jscomp$105$$) { + this.pci_write16(this.pci_addr32[0], $value$jscomp$105$$); + }, function($value$jscomp$106$$) { + this.pci_write32(this.pci_addr32[0], $value$jscomp$106$$); + }); + $cpu$jscomp$4$$.io.register_write(3325, this, function($value$jscomp$107$$) { + this.pci_write8(this.pci_addr32[0] + 1 | 0, $value$jscomp$107$$); + }); + $cpu$jscomp$4$$.io.register_write(3326, this, function($value$jscomp$108$$) { + this.pci_write8(this.pci_addr32[0] + 2 | 0, $value$jscomp$108$$); + }, function($value$jscomp$109$$) { + this.pci_write16(this.pci_addr32[0] + 2 | 0, $value$jscomp$109$$); + }); + $cpu$jscomp$4$$.io.register_write(3327, this, function($value$jscomp$110$$) { + this.pci_write8(this.pci_addr32[0] + 3 | 0, $value$jscomp$110$$); + }); + $cpu$jscomp$4$$.io.register_read_consecutive(3324, this, function() { + return this.pci_response[0]; + }, function() { + return this.pci_response[1]; + }, function() { + return this.pci_response[2]; + }, function() { + return this.pci_response[3]; + }); + $cpu$jscomp$4$$.io.register_read_consecutive(3320, this, function() { + return this.pci_status[0]; + }, function() { + return this.pci_status[1]; + }, function() { + return this.pci_status[2]; + }, function() { + return this.pci_status[3]; + }); + $cpu$jscomp$4$$.io.register_write_consecutive(3320, this, function($out_byte$$) { + this.pci_addr[0] = $out_byte$$ & 252; + }, function($out_byte$jscomp$1$$) { + 2 === (this.pci_addr[1] & 6) && 6 === ($out_byte$jscomp$1$$ & 6) ? ($dbg_log$$("CPU reboot via PCI"), $cpu$jscomp$4$$.reboot_internal()) : this.pci_addr[1] = $out_byte$jscomp$1$$; + }, function($out_byte$jscomp$2$$) { + this.pci_addr[2] = $out_byte$jscomp$2$$; + }, function($out_byte$jscomp$3$$) { + this.pci_addr[3] = $out_byte$jscomp$3$$; + this.pci_query(); + }); + this.register_device({pci_id:0, pci_space:[134, 128, 55, 18, 0, 0, 0, 0, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, ], pci_bars:[], name:"82441FX PMC", }); + this.isa_bridge = {pci_id:8, pci_space:[134, 128, 0, 112, 7, 0, 0, 2, 0, 0, 1, 6, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ], pci_bars:[], name:"82371SB PIIX3 ISA", }; + this.isa_bridge_space = this.register_device(this.isa_bridge); + this.isa_bridge_space8 = new Uint8Array(this.isa_bridge_space.buffer); +} +$PCI$$.prototype.get_state = function() { + for (var $state$jscomp$12$$ = [], $i$jscomp$20$$ = 0; 256 > $i$jscomp$20$$; $i$jscomp$20$$++) { + $state$jscomp$12$$[$i$jscomp$20$$] = this.device_spaces[$i$jscomp$20$$]; + } + $state$jscomp$12$$[256] = this.pci_addr; + $state$jscomp$12$$[257] = this.pci_value; + $state$jscomp$12$$[258] = this.pci_response; + $state$jscomp$12$$[259] = this.pci_status; + return $state$jscomp$12$$; +}; +$PCI$$.prototype.set_state = function($state$jscomp$13$$) { + for (var $i$jscomp$21$$ = 0; 256 > $i$jscomp$21$$; $i$jscomp$21$$++) { + var $device$jscomp$5$$ = this.devices[$i$jscomp$21$$], $space$jscomp$1$$ = $state$jscomp$13$$[$i$jscomp$21$$]; + if ($device$jscomp$5$$ && $space$jscomp$1$$) { + for (var $bar_nr$$ = 0; $bar_nr$$ < $device$jscomp$5$$.pci_bars.length; $bar_nr$$++) { + var $value$jscomp$111$$ = $space$jscomp$1$$[4 + $bar_nr$$]; + if ($value$jscomp$111$$ & 1) { + var $bar$$ = $device$jscomp$5$$.pci_bars[$bar_nr$$]; + this.set_io_bars($bar$$, $bar$$.original_bar & 65534, $value$jscomp$111$$ & 65534); + } + } + this.device_spaces[$i$jscomp$21$$].set($space$jscomp$1$$); + } else { + $device$jscomp$5$$ && $dbg_log$$("Warning: While restoring PCI device: Device exists in current configuration but not in snapshot (" + $device$jscomp$5$$.name + ")"), $space$jscomp$1$$ && $dbg_log$$("Warning: While restoring PCI device: Device doesn't exist in current configuration but does in snapshot (device " + $h$$($i$jscomp$21$$, 2) + ")"); + } + } + this.pci_addr.set($state$jscomp$13$$[256]); + this.pci_value.set($state$jscomp$13$$[257]); + this.pci_response.set($state$jscomp$13$$[258]); + this.pci_status.set($state$jscomp$13$$[259]); +}; +$PCI$$.prototype.pci_query = function() { + var $bdf$$ = this.pci_addr[2] << 8 | this.pci_addr[1], $addr$jscomp$9$$ = this.pci_addr[0] & 252, $dev_device$jscomp$6$$ = $bdf$$ >> 3 & 31; + var $dbg_line$$ = "query enabled=" + (this.pci_addr[3] >> 7) + (" bdf=" + $h$$($bdf$$, 4)); + $dbg_line$$ += " dev=" + $h$$($dev_device$jscomp$6$$, 2); + $dbg_line$$ += " addr=" + $h$$($addr$jscomp$9$$, 2); + $dev_device$jscomp$6$$ = this.device_spaces[$bdf$$]; + void 0 !== $dev_device$jscomp$6$$ ? (this.pci_status32[0] = -2147483648, this.pci_response32[0] = $addr$jscomp$9$$ < $dev_device$jscomp$6$$.byteLength ? $dev_device$jscomp$6$$[$addr$jscomp$9$$ >> 2] : 0, $dbg_line$$ += " " + $h$$(this.pci_addr32[0] >>> 0, 8) + " -> " + $h$$(this.pci_response32[0] >>> 0, 8), $addr$jscomp$9$$ >= $dev_device$jscomp$6$$.byteLength && ($dbg_line$$ += " (undef)"), $dbg_line$$ += " (" + this.devices[$bdf$$].name + ")", $dbg_log$$($dbg_line$$, 2048)) : (this.pci_response32[0] = + -1, this.pci_status32[0] = 0); +}; +$PCI$$.prototype.pci_write8 = function($addr$jscomp$10_address$$, $written$$) { + var $bdf$jscomp$1$$ = $addr$jscomp$10_address$$ >> 8 & 65535; + $addr$jscomp$10_address$$ &= 255; + var $space$jscomp$2$$ = new Uint8Array(this.device_spaces[$bdf$jscomp$1$$].buffer), $device$jscomp$7$$ = this.devices[$bdf$jscomp$1$$]; + $space$jscomp$2$$ && ($dbg_assert$$(!(16 <= $addr$jscomp$10_address$$ && 44 > $addr$jscomp$10_address$$ || 48 <= $addr$jscomp$10_address$$ && 52 > $addr$jscomp$10_address$$), "PCI: Expected 32-bit write, got 8-bit (addr: " + $h$$($addr$jscomp$10_address$$) + ")"), $dbg_log$$("PCI write8 dev=" + $h$$($bdf$jscomp$1$$ >> 3, 2) + " (" + $device$jscomp$7$$.name + ") addr=" + $h$$($addr$jscomp$10_address$$, 4) + " value=" + $h$$($written$$, 2), 2048), $space$jscomp$2$$[$addr$jscomp$10_address$$] = $written$$); +}; +$PCI$$.prototype.pci_write16 = function($addr$jscomp$11_address$jscomp$1$$, $written$jscomp$1$$) { + $dbg_assert$$(0 === ($addr$jscomp$11_address$jscomp$1$$ & 1)); + var $bdf$jscomp$2$$ = $addr$jscomp$11_address$jscomp$1$$ >> 8 & 65535; + $addr$jscomp$11_address$jscomp$1$$ &= 255; + var $space$jscomp$3$$ = new Uint16Array(this.device_spaces[$bdf$jscomp$2$$].buffer), $device$jscomp$8$$ = this.devices[$bdf$jscomp$2$$]; + $space$jscomp$3$$ && (16 <= $addr$jscomp$11_address$jscomp$1$$ && 44 > $addr$jscomp$11_address$jscomp$1$$ ? $dbg_log$$("Warning: PCI: Expected 32-bit write, got 16-bit (addr: " + $h$$($addr$jscomp$11_address$jscomp$1$$) + ")") : ($dbg_assert$$(!(48 <= $addr$jscomp$11_address$jscomp$1$$ && 52 > $addr$jscomp$11_address$jscomp$1$$), "PCI: Expected 32-bit write, got 16-bit (addr: " + $h$$($addr$jscomp$11_address$jscomp$1$$) + ")"), $dbg_log$$("PCI writ16 dev=" + $h$$($bdf$jscomp$2$$ >> 3, 2) + " (" + + $device$jscomp$8$$.name + ") addr=" + $h$$($addr$jscomp$11_address$jscomp$1$$, 4) + " value=" + $h$$($written$jscomp$1$$, 4), 2048), $space$jscomp$3$$[$addr$jscomp$11_address$jscomp$1$$ >>> 1] = $written$jscomp$1$$)); +}; +$PCI$$.prototype.pci_write32 = function($addr$jscomp$12_address$jscomp$2$$, $written$jscomp$2$$) { + $dbg_assert$$(0 === ($addr$jscomp$12_address$jscomp$2$$ & 3)); + var $bdf$jscomp$3_space_addr$$ = $addr$jscomp$12_address$jscomp$2$$ >> 8 & 65535; + $addr$jscomp$12_address$jscomp$2$$ &= 255; + var $space$jscomp$4$$ = this.device_spaces[$bdf$jscomp$3_space_addr$$], $device$jscomp$9_from$jscomp$1_type$jscomp$149$$ = this.devices[$bdf$jscomp$3_space_addr$$]; + if ($space$jscomp$4$$) { + if (16 <= $addr$jscomp$12_address$jscomp$2$$ && 40 > $addr$jscomp$12_address$jscomp$2$$) { + var $bar_nr$jscomp$1_original_bar_to$jscomp$1$$ = $addr$jscomp$12_address$jscomp$2$$ - 16 >> 2, $bar$jscomp$1$$ = $device$jscomp$9_from$jscomp$1_type$jscomp$149$$.pci_bars[$bar_nr$jscomp$1_original_bar_to$jscomp$1$$]; + $dbg_log$$("BAR" + $bar_nr$jscomp$1_original_bar_to$jscomp$1$$ + " exists=" + ($bar$jscomp$1$$ ? "y" : "n") + " changed to " + $h$$($written$jscomp$2$$ >>> 0) + " dev=" + $h$$($bdf$jscomp$3_space_addr$$ >> 3, 2) + " (" + $device$jscomp$9_from$jscomp$1_type$jscomp$149$$.name + ") ", 2048); + $bar$jscomp$1$$ ? ($dbg_assert$$(!($bar$jscomp$1$$.size & $bar$jscomp$1$$.size - 1), "bar size should be power of 2"), $bdf$jscomp$3_space_addr$$ = $addr$jscomp$12_address$jscomp$2$$ >> 2, $device$jscomp$9_from$jscomp$1_type$jscomp$149$$ = $space$jscomp$4$$[$bdf$jscomp$3_space_addr$$] & 1, -1 === ($written$jscomp$2$$ | 3 | $bar$jscomp$1$$.size - 1) ? ($written$jscomp$2$$ = ~($bar$jscomp$1$$.size - 1) | $device$jscomp$9_from$jscomp$1_type$jscomp$149$$, 0 === $device$jscomp$9_from$jscomp$1_type$jscomp$149$$ && + ($space$jscomp$4$$[$bdf$jscomp$3_space_addr$$] = $written$jscomp$2$$)) : 0 === $device$jscomp$9_from$jscomp$1_type$jscomp$149$$ && ($bar_nr$jscomp$1_original_bar_to$jscomp$1$$ = $bar$jscomp$1$$.original_bar, ($written$jscomp$2$$ & -16) !== ($bar_nr$jscomp$1_original_bar_to$jscomp$1$$ & -16) && $dbg_log$$("Warning: Changing memory bar not supported, ignored", 2048), $space$jscomp$4$$[$bdf$jscomp$3_space_addr$$] = $bar_nr$jscomp$1_original_bar_to$jscomp$1$$), 1 === $device$jscomp$9_from$jscomp$1_type$jscomp$149$$ && + ($dbg_assert$$(1 === $device$jscomp$9_from$jscomp$1_type$jscomp$149$$), $device$jscomp$9_from$jscomp$1_type$jscomp$149$$ = $space$jscomp$4$$[$bdf$jscomp$3_space_addr$$] & 65534, $bar_nr$jscomp$1_original_bar_to$jscomp$1$$ = $written$jscomp$2$$ & 65534, $dbg_log$$("io bar changed from " + $h$$($device$jscomp$9_from$jscomp$1_type$jscomp$149$$ >>> 0, 8) + " to " + $h$$($bar_nr$jscomp$1_original_bar_to$jscomp$1$$ >>> 0, 8) + " size=" + $bar$jscomp$1$$.size, 2048), this.set_io_bars($bar$jscomp$1$$, + $device$jscomp$9_from$jscomp$1_type$jscomp$149$$, $bar_nr$jscomp$1_original_bar_to$jscomp$1$$), $space$jscomp$4$$[$bdf$jscomp$3_space_addr$$] = $written$jscomp$2$$ | 1)) : $space$jscomp$4$$[$addr$jscomp$12_address$jscomp$2$$ >> 2] = 0; + $dbg_log$$("BAR effective value: " + $h$$($space$jscomp$4$$[$addr$jscomp$12_address$jscomp$2$$ >> 2] >>> 0), 2048); + } else { + 48 === $addr$jscomp$12_address$jscomp$2$$ ? ($dbg_log$$("PCI write rom address dev=" + $h$$($bdf$jscomp$3_space_addr$$ >> 3, 2) + " (" + $device$jscomp$9_from$jscomp$1_type$jscomp$149$$.name + ") value=" + $h$$($written$jscomp$2$$ >>> 0, 8), 2048), $space$jscomp$4$$[$addr$jscomp$12_address$jscomp$2$$ >> 2] = $device$jscomp$9_from$jscomp$1_type$jscomp$149$$.pci_rom_size ? -1 === ($written$jscomp$2$$ | 2047) ? -$device$jscomp$9_from$jscomp$1_type$jscomp$149$$.pci_rom_size | 0 : $device$jscomp$9_from$jscomp$1_type$jscomp$149$$.pci_rom_address | + 0 : 0) : 4 === $addr$jscomp$12_address$jscomp$2$$ ? $dbg_log$$("PCI write dev=" + $h$$($bdf$jscomp$3_space_addr$$ >> 3, 2) + " (" + $device$jscomp$9_from$jscomp$1_type$jscomp$149$$.name + ") addr=" + $h$$($addr$jscomp$12_address$jscomp$2$$, 4) + " value=" + $h$$($written$jscomp$2$$ >>> 0, 8), 2048) : ($dbg_log$$("PCI write dev=" + $h$$($bdf$jscomp$3_space_addr$$ >> 3, 2) + " (" + $device$jscomp$9_from$jscomp$1_type$jscomp$149$$.name + ") addr=" + $h$$($addr$jscomp$12_address$jscomp$2$$, 4) + + " value=" + $h$$($written$jscomp$2$$ >>> 0, 8), 2048), $space$jscomp$4$$[$addr$jscomp$12_address$jscomp$2$$ >>> 2] = $written$jscomp$2$$); + } + } +}; +$PCI$$.prototype.register_device = function($device$jscomp$10$$) { + $dbg_assert$$(void 0 !== $device$jscomp$10$$.pci_id); + $dbg_assert$$(void 0 !== $device$jscomp$10$$.pci_space); + $dbg_assert$$(void 0 !== $device$jscomp$10$$.pci_bars); + var $bar_space_device_id$$ = $device$jscomp$10$$.pci_id; + $dbg_log$$("PCI register bdf=" + $h$$($bar_space_device_id$$) + " (" + $device$jscomp$10$$.name + ")", 2048); + $dbg_assert$$(!this.devices[$bar_space_device_id$$]); + $dbg_assert$$(64 <= $device$jscomp$10$$.pci_space.length); + $dbg_assert$$($bar_space_device_id$$ < this.devices.length); + var $space$jscomp$5$$ = new Int32Array(64); + $space$jscomp$5$$.set(new Int32Array((new Uint8Array($device$jscomp$10$$.pci_space)).buffer)); + this.device_spaces[$bar_space_device_id$$] = $space$jscomp$5$$; + this.devices[$bar_space_device_id$$] = $device$jscomp$10$$; + $bar_space_device_id$$ = $space$jscomp$5$$.slice(4, 10); + for (var $i$jscomp$22$$ = 0; $i$jscomp$22$$ < $device$jscomp$10$$.pci_bars.length; $i$jscomp$22$$++) { + var $bar$jscomp$2$$ = $device$jscomp$10$$.pci_bars[$i$jscomp$22$$]; + if ($bar$jscomp$2$$) { + var $bar_base_port$$ = $bar_space_device_id$$[$i$jscomp$22$$], $j$jscomp$3_type$jscomp$150$$ = $bar_base_port$$ & 1; + $bar$jscomp$2$$.original_bar = $bar_base_port$$; + $bar$jscomp$2$$.entries = []; + if (0 !== $j$jscomp$3_type$jscomp$150$$) { + for ($dbg_assert$$(1 === $j$jscomp$3_type$jscomp$150$$), $bar_base_port$$ &= -2, $j$jscomp$3_type$jscomp$150$$ = 0; $j$jscomp$3_type$jscomp$150$$ < $bar$jscomp$2$$.size; $j$jscomp$3_type$jscomp$150$$++) { + $bar$jscomp$2$$.entries[$j$jscomp$3_type$jscomp$150$$] = this.io.ports[$bar_base_port$$ + $j$jscomp$3_type$jscomp$150$$]; + } + } + } + } + return $space$jscomp$5$$; +}; +$PCI$$.prototype.set_io_bars = function($bar$jscomp$3$$, $from$jscomp$2$$, $to$jscomp$2$$) { + var $count$jscomp$52$$ = $bar$jscomp$3$$.size; + $dbg_log$$("Move io bars: from=" + $h$$($from$jscomp$2$$) + " to=" + $h$$($to$jscomp$2$$) + " count=" + $count$jscomp$52$$, 2048); + for (var $ports$$ = this.io.ports, $i$jscomp$23$$ = 0; $i$jscomp$23$$ < $count$jscomp$52$$; $i$jscomp$23$$++) { + var $entry$jscomp$6_old_entry$$ = $ports$$[$from$jscomp$2$$ + $i$jscomp$23$$]; + 4096 <= $from$jscomp$2$$ + $i$jscomp$23$$ && ($ports$$[$from$jscomp$2$$ + $i$jscomp$23$$] = this.io.create_empty_entry()); + $entry$jscomp$6_old_entry$$.read8 === this.io.empty_port_read8 && $entry$jscomp$6_old_entry$$.read16 === this.io.empty_port_read16 && $entry$jscomp$6_old_entry$$.read32 === this.io.empty_port_read32 && $entry$jscomp$6_old_entry$$.write8 === this.io.empty_port_write && $entry$jscomp$6_old_entry$$.write16 === this.io.empty_port_write && $entry$jscomp$6_old_entry$$.write32 === this.io.empty_port_write && $dbg_log$$("Warning: Bad IO bar: Source not mapped, port=" + $h$$($from$jscomp$2$$ + $i$jscomp$23$$, + 4), 2048); + $entry$jscomp$6_old_entry$$ = $bar$jscomp$3$$.entries[$i$jscomp$23$$]; + var $empty_entry$$ = $ports$$[$to$jscomp$2$$ + $i$jscomp$23$$]; + $dbg_assert$$($entry$jscomp$6_old_entry$$ && $empty_entry$$); + 4096 <= $to$jscomp$2$$ + $i$jscomp$23$$ && ($ports$$[$to$jscomp$2$$ + $i$jscomp$23$$] = $entry$jscomp$6_old_entry$$); + $empty_entry$$.read8 !== this.io.empty_port_read8 && $empty_entry$$.read16 !== this.io.empty_port_read16 && $empty_entry$$.read32 !== this.io.empty_port_read32 && $empty_entry$$.write8 !== this.io.empty_port_write && $empty_entry$$.write16 !== this.io.empty_port_write && $empty_entry$$.write32 !== this.io.empty_port_write || $dbg_log$$("Warning: Bad IO bar: Target already mapped, port=" + $h$$($to$jscomp$2$$ + $i$jscomp$23$$, 4), 2048); + } +}; +$PCI$$.prototype.raise_irq = function($pci_id$$) { + var $space$jscomp$6$$ = this.device_spaces[$pci_id$$]; + $dbg_assert$$($space$jscomp$6$$); + this.cpu.device_raise_irq(this.isa_bridge_space8[96 + (($space$jscomp$6$$[15] >> 8 & 255) - 1 + (($pci_id$$ >> 3) - 1 & 255) & 3)]); +}; +$PCI$$.prototype.lower_irq = function($pci_id$jscomp$1$$) { + var $space$jscomp$7$$ = this.device_spaces[$pci_id$jscomp$1$$]; + $dbg_assert$$($space$jscomp$7$$); + this.cpu.device_lower_irq(this.isa_bridge_space8[96 + (($space$jscomp$7$$[15] >> 8 & 255) + ($pci_id$jscomp$1$$ >> 3 & 255) - 2 & 3)]); +}; +function $FloppyController$$($cpu$jscomp$5$$, $fda_image$$, $fdb_image$$) { + this.io = $cpu$jscomp$5$$.io; + this.cpu = $cpu$jscomp$5$$; + this.dma = $cpu$jscomp$5$$.devices.dma; + this.bytes_expecting = 0; + this.receiving_command = new Uint8Array(10); + this.receiving_index = 0; + this.next_command = null; + this.response_data = new Uint8Array(10); + this.last_head = this.last_cylinder = this.drive = this.status_reg2 = this.status_reg1 = this.status_reg0 = this.response_length = this.response_index = 0; + this.last_sector = 1; + this.dir = this.dor = 0; + this.fdb_image = this.fda_image = null; + $fda_image$$ ? this.set_fda($fda_image$$) : (this.eject_fda(), this.cpu.devices.rtc.cmos_write(16, 64)); + $dbg_assert$$(!$fdb_image$$, "FDB not supported"); + this.io.register_read(1008, this, this.port3F0_read); + this.io.register_read(1010, this, this.port3F2_read); + this.io.register_read(1012, this, this.port3F4_read); + this.io.register_read(1013, this, this.port3F5_read); + this.io.register_read(1015, this, this.port3F7_read); + this.io.register_write(1010, this, this.port3F2_write); + this.io.register_write(1012, this, this.port3F4_write); + this.io.register_write(1013, this, this.port3F5_write); +} +$FloppyController$$.prototype.eject_fda = function() { + this.fda_image = null; + this.number_of_cylinders = this.number_of_heads = this.sectors_per_track = 0; + this.dir = 128; +}; +$FloppyController$$.prototype.set_fda = function($fda_image$jscomp$1$$) { + var $floppy_types_new_image$$ = {[163840]:{type:1, tracks:40, sectors:8, heads:1}, [184320]:{type:1, tracks:40, sectors:9, heads:1}, [204800]:{type:1, tracks:40, sectors:10, heads:1}, [327680]:{type:1, tracks:40, sectors:8, heads:2}, [368640]:{type:1, tracks:40, sectors:9, heads:2}, [409600]:{type:1, tracks:40, sectors:10, heads:2}, [737280]:{type:3, tracks:80, sectors:9, heads:2}, [1228800]:{type:2, tracks:80, sectors:15, heads:2}, [1474560]:{type:4, tracks:80, sectors:18, heads:2}, [1763328]:{type:5, + tracks:82, sectors:21, heads:2}, [2949120]:{type:5, tracks:80, sectors:36, heads:2}, 512:{type:1, tracks:1, sectors:1, heads:1}, }; + let $floppy_size$$ = $fda_image$jscomp$1$$.byteLength, $floppy_type$$ = $floppy_types_new_image$$[$floppy_size$$]; + $floppy_type$$ || ($floppy_size$$ = 1474560 < $fda_image$jscomp$1$$.byteLength ? 2949120 : 1474560, $floppy_type$$ = $floppy_types_new_image$$[$floppy_size$$], $dbg_assert$$($fda_image$jscomp$1$$.buffer && $fda_image$jscomp$1$$.buffer instanceof ArrayBuffer), $floppy_types_new_image$$ = new Uint8Array($floppy_size$$), $floppy_types_new_image$$.set(new Uint8Array($fda_image$jscomp$1$$.buffer)), $fda_image$jscomp$1$$ = new $v86util$$.SyncBuffer($floppy_types_new_image$$.buffer), $dbg_log$$("Warning: Unkown floppy size: " + + $fda_image$jscomp$1$$.byteLength + ", assuming " + $floppy_size$$)); + this.sectors_per_track = $floppy_type$$.sectors; + this.number_of_heads = $floppy_type$$.heads; + this.number_of_cylinders = $floppy_type$$.tracks; + this.fda_image = $fda_image$jscomp$1$$; + this.dir = 128; + this.cpu.devices.rtc.cmos_write(16, $floppy_type$$.type << 4); +}; +$FloppyController$$.prototype.get_state = function() { + var $state$jscomp$14$$ = []; + $state$jscomp$14$$[0] = this.bytes_expecting; + $state$jscomp$14$$[1] = this.receiving_command; + $state$jscomp$14$$[2] = this.receiving_index; + $state$jscomp$14$$[4] = this.response_data; + $state$jscomp$14$$[5] = this.response_index; + $state$jscomp$14$$[6] = this.response_length; + $state$jscomp$14$$[8] = this.status_reg0; + $state$jscomp$14$$[9] = this.status_reg1; + $state$jscomp$14$$[10] = this.status_reg2; + $state$jscomp$14$$[11] = this.drive; + $state$jscomp$14$$[12] = this.last_cylinder; + $state$jscomp$14$$[13] = this.last_head; + $state$jscomp$14$$[14] = this.last_sector; + $state$jscomp$14$$[15] = this.dor; + $state$jscomp$14$$[16] = this.sectors_per_track; + $state$jscomp$14$$[17] = this.number_of_heads; + $state$jscomp$14$$[18] = this.number_of_cylinders; + return $state$jscomp$14$$; +}; +$FloppyController$$.prototype.set_state = function($state$jscomp$15$$) { + this.bytes_expecting = $state$jscomp$15$$[0]; + this.receiving_command = $state$jscomp$15$$[1]; + this.receiving_index = $state$jscomp$15$$[2]; + this.next_command = $state$jscomp$15$$[3]; + this.response_data = $state$jscomp$15$$[4]; + this.response_index = $state$jscomp$15$$[5]; + this.response_length = $state$jscomp$15$$[6]; + this.status_reg0 = $state$jscomp$15$$[8]; + this.status_reg1 = $state$jscomp$15$$[9]; + this.status_reg2 = $state$jscomp$15$$[10]; + this.drive = $state$jscomp$15$$[11]; + this.last_cylinder = $state$jscomp$15$$[12]; + this.last_head = $state$jscomp$15$$[13]; + this.last_sector = $state$jscomp$15$$[14]; + this.dor = $state$jscomp$15$$[15]; + this.sectors_per_track = $state$jscomp$15$$[16]; + this.number_of_heads = $state$jscomp$15$$[17]; + this.number_of_cylinders = $state$jscomp$15$$[18]; +}; +$FloppyController$$.prototype.port3F0_read = function() { + $dbg_log$$("3F0 read", 8192); + return 0; +}; +$FloppyController$$.prototype.port3F4_read = function() { + $dbg_log$$("3F4 read", 8192); + var $return_byte$$ = 128; + this.response_index < this.response_length && ($return_byte$$ |= 80); + 0 === (this.dor & 8) && ($return_byte$$ |= 32); + return $return_byte$$; +}; +$FloppyController$$.prototype.port3F7_read = function() { + $dbg_log$$("3F7 read", 8192); + return this.dir; +}; +$FloppyController$$.prototype.port3F5_read = function() { + if (this.response_index < this.response_length) { + return $dbg_log$$("3F5 read: " + this.response_data[this.response_index], 8192), this.cpu.device_lower_irq(6), this.response_data[this.response_index++]; + } + $dbg_log$$("3F5 read, empty", 8192); + return 255; +}; +$FloppyController$$.prototype.port3F4_write = function($byte$$) { + $dbg_log$$("3F4/data rate write: " + $h$$($byte$$), 8192); + $byte$$ & 128 && ($dbg_log$$("dsr reset", 8192), this.status_reg0 = 192, this.cpu.device_raise_irq(6)); +}; +$FloppyController$$.prototype.port3F5_write = function($log_reg_byte$$) { + $dbg_log$$("3F5 write " + $h$$($log_reg_byte$$), 8192); + if (0 < this.bytes_expecting) { + if (this.receiving_command[this.receiving_index++] = $log_reg_byte$$, this.bytes_expecting--, 0 === this.bytes_expecting) { + $log_reg_byte$$ = "3F5 command received: "; + for (var $i$jscomp$24$$ = 0; $i$jscomp$24$$ < this.receiving_index; $i$jscomp$24$$++) { + $log_reg_byte$$ += $h$$(this.receiving_command[$i$jscomp$24$$]) + " "; + } + $dbg_log$$($log_reg_byte$$, 8192); + this.next_command.call(this, this.receiving_command); + } + } else { + switch($log_reg_byte$$) { + case 3: + this.next_command = this.fix_drive_data; + this.bytes_expecting = 2; + break; + case 19: + this.next_command = this.configure; + this.bytes_expecting = 3; + break; + case 4: + this.next_command = this.check_drive_status; + this.bytes_expecting = 1; + break; + case 5: + case 69: + case 197: + this.next_command = function($args$$) { + this.do_sector(!0, $args$$); + }; + this.bytes_expecting = 8; + break; + case 6: + case 70: + case 198: + case 230: + this.next_command = function($args$jscomp$1$$) { + this.do_sector(!1, $args$jscomp$1$$); + }; + this.bytes_expecting = 8; + break; + case 7: + this.next_command = this.calibrate; + this.bytes_expecting = 1; + break; + case 8: + this.check_interrupt_status(); + break; + case 74: + this.next_command = this.read_sector_id; + this.bytes_expecting = 1; + break; + case 15: + this.bytes_expecting = 2; + this.next_command = this.seek; + break; + case 14: + case 16: + $dbg_log$$(14 === $log_reg_byte$$ ? "dump registers" : "determine controller version", 8192); + this.status_reg0 = 128; + this.response_data[0] = this.status_reg0; + this.response_index = 0; + this.response_length = 1; + this.bytes_expecting = 0; + break; + default: + $dbg_assert$$(!1, "Unimplemented floppy command call " + $h$$($log_reg_byte$$)); + } + this.receiving_index = 0; + } +}; +$FloppyController$$.prototype.port3F2_read = function() { + $dbg_log$$("read 3F2: DOR", 8192); + return this.dor; +}; +$FloppyController$$.prototype.port3F2_write = function($value$jscomp$112$$) { + 4 === ($value$jscomp$112$$ & 4) && 0 === (this.dor & 4) && (this.status_reg0 = 192, this.cpu.device_raise_irq(6)); + $dbg_log$$("start motors: " + $h$$($value$jscomp$112$$ >> 4), 8192); + $dbg_log$$("enable dma/irq: " + !!($value$jscomp$112$$ & 8), 8192); + $dbg_log$$("reset fdc: " + !!($value$jscomp$112$$ & 4), 8192); + $dbg_log$$("drive select: " + ($value$jscomp$112$$ & 3), 8192); + 0 !== ($value$jscomp$112$$ & 3) && $dbg_log$$("guest: fdb not implemented", 8192); + $dbg_log$$("DOR = " + $h$$($value$jscomp$112$$), 8192); + this.dor = $value$jscomp$112$$; +}; +$FloppyController$$.prototype.check_drive_status = function() { + $dbg_log$$("check drive status", 8192); + this.status_reg1 = this.fda_image ? 0 : 5; + this.response_index = 0; + this.response_length = 1; + this.response_data[0] = 0; +}; +$FloppyController$$.prototype.seek = function($args$jscomp$3_new_head$$) { + $dbg_log$$("seek", 8192); + if (0 !== ($args$jscomp$3_new_head$$[0] & 3)) { + $dbg_log$$("seek on fdb", 8192); + } else { + var $new_cylinder$$ = $args$jscomp$3_new_head$$[1]; + $args$jscomp$3_new_head$$ = $args$jscomp$3_new_head$$[0] >> 2 & 1; + $new_cylinder$$ !== this.last_cylinder && (this.dir = 0); + this.status_reg1 = this.fda_image ? 0 : 5; + this.status_reg0 = 32; + this.last_cylinder = $new_cylinder$$; + this.last_head = $args$jscomp$3_new_head$$; + } + this.raise_irq(); +}; +$FloppyController$$.prototype.calibrate = function($args$jscomp$4$$) { + $dbg_log$$("floppy calibrate", 8192); + this.seek([$args$jscomp$4$$[0], 0]); +}; +$FloppyController$$.prototype.check_interrupt_status = function() { + $dbg_log$$("floppy check interrupt status", 8192); + this.response_index = 0; + this.response_length = 2; + this.response_data[0] = this.status_reg0; + this.response_data[1] = this.last_cylinder; +}; +$FloppyController$$.prototype.do_sector = function($is_write$$, $args$jscomp$5$$) { + var $head$$ = $args$jscomp$5$$[2], $cylinder$$ = $args$jscomp$5$$[1], $sector$$ = $args$jscomp$5$$[3], $sector_size$$ = 128 << $args$jscomp$5$$[4], $read_count$$ = $args$jscomp$5$$[5] - $args$jscomp$5$$[3] + 1, $read_offset$$ = (($head$$ + this.number_of_heads * $cylinder$$) * this.sectors_per_track + $sector$$ - 1) * $sector_size$$; + $dbg_log$$("Floppy " + ($is_write$$ ? "Write" : "Read"), 8192); + $dbg_log$$("from " + $h$$($read_offset$$) + " length " + $h$$($read_count$$ * $sector_size$$), 8192); + $dbg_log$$($cylinder$$ + " / " + $head$$ + " / " + $sector$$, 8192); + $args$jscomp$5$$[4] || $dbg_log$$("FDC: sector count is zero, use data length instead", 8192); + this.fda_image ? (this.status_reg1 = 0, $is_write$$ ? this.dma.do_write(this.fda_image, $read_offset$$, $read_count$$ * $sector_size$$, 2, this.done.bind(this, $args$jscomp$5$$, $cylinder$$, $head$$, $sector$$)) : this.dma.do_read(this.fda_image, $read_offset$$, $read_count$$ * $sector_size$$, 2, this.done.bind(this, $args$jscomp$5$$, $cylinder$$, $head$$, $sector$$))) : this.status_reg1 = 5; +}; +$FloppyController$$.prototype.done = function($args$jscomp$6$$, $cylinder$jscomp$1$$, $head$jscomp$1$$, $sector$jscomp$1$$, $error$jscomp$4$$) { + $error$jscomp$4$$ ? $dbg_log$$("XXX: Unhandled floppy error", 8192) : ($sector$jscomp$1$$++, $sector$jscomp$1$$ > this.sectors_per_track && ($sector$jscomp$1$$ = 1, $head$jscomp$1$$++, $head$jscomp$1$$ >= this.number_of_heads && ($head$jscomp$1$$ = 0, $cylinder$jscomp$1$$++)), $cylinder$jscomp$1$$ !== this.last_cylinder && (this.dir = 0), this.status_reg0 = 32, this.last_cylinder = $cylinder$jscomp$1$$, this.last_head = $head$jscomp$1$$, this.last_sector = $sector$jscomp$1$$, this.response_index = + 0, this.response_length = 7, this.response_data[0] = $head$jscomp$1$$ << 2 | 32, this.response_data[1] = 0, this.response_data[2] = 0, this.response_data[3] = $cylinder$jscomp$1$$, this.response_data[4] = $head$jscomp$1$$, this.response_data[5] = $sector$jscomp$1$$, this.response_data[6] = $args$jscomp$6$$[4], this.raise_irq()); +}; +$FloppyController$$.prototype.fix_drive_data = function($args$jscomp$7$$) { + $dbg_log$$("floppy fix drive data " + $args$jscomp$7$$.slice(0, this.bytes_expecting), 8192); +}; +$FloppyController$$.prototype.configure = function($args$jscomp$8$$) { + $dbg_log$$("floppy configure " + $args$jscomp$8$$.slice(0, this.bytes_expecting), 8192); +}; +$FloppyController$$.prototype.read_sector_id = function($args$jscomp$9$$) { + $dbg_log$$("floppy read sector id " + $args$jscomp$9$$, 8192); + this.response_index = 0; + this.response_length = 7; + this.response_data[0] = 0; + this.response_data[1] = 0; + this.response_data[2] = 0; + this.response_data[3] = 0; + this.response_data[4] = 0; + this.response_data[5] = 0; + this.response_data[6] = 0; + this.raise_irq(); +}; +$FloppyController$$.prototype.raise_irq = function() { + this.dor & 8 && this.cpu.device_raise_irq(6); +}; +$CPU$$.prototype.mmap_read8 = function($addr$jscomp$13_value$jscomp$113$$) { + $addr$jscomp$13_value$jscomp$113$$ = this.memory_map_read8[$addr$jscomp$13_value$jscomp$113$$ >>> 17]($addr$jscomp$13_value$jscomp$113$$); + $dbg_assert$$(0 <= $addr$jscomp$13_value$jscomp$113$$ && 255 >= $addr$jscomp$13_value$jscomp$113$$); + return $addr$jscomp$13_value$jscomp$113$$; +}; +$CPU$$.prototype.mmap_write8 = function($addr$jscomp$14$$, $value$jscomp$114$$) { + $dbg_assert$$(0 <= $value$jscomp$114$$ && 255 >= $value$jscomp$114$$); + this.memory_map_write8[$addr$jscomp$14$$ >>> 17]($addr$jscomp$14$$, $value$jscomp$114$$); +}; +$CPU$$.prototype.mmap_read16 = function($addr$jscomp$15_value$jscomp$115$$) { + var $fn$jscomp$11$$ = this.memory_map_read8[$addr$jscomp$15_value$jscomp$115$$ >>> 17]; + $addr$jscomp$15_value$jscomp$115$$ = $fn$jscomp$11$$($addr$jscomp$15_value$jscomp$115$$) | $fn$jscomp$11$$($addr$jscomp$15_value$jscomp$115$$ + 1 | 0) << 8; + $dbg_assert$$(0 <= $addr$jscomp$15_value$jscomp$115$$ && 65535 >= $addr$jscomp$15_value$jscomp$115$$); + return $addr$jscomp$15_value$jscomp$115$$; +}; +$CPU$$.prototype.mmap_write16 = function($addr$jscomp$16$$, $value$jscomp$116$$) { + var $fn$jscomp$12$$ = this.memory_map_write8[$addr$jscomp$16$$ >>> 17]; + $dbg_assert$$(0 <= $value$jscomp$116$$ && 65535 >= $value$jscomp$116$$); + $fn$jscomp$12$$($addr$jscomp$16$$, $value$jscomp$116$$ & 255); + $fn$jscomp$12$$($addr$jscomp$16$$ + 1 | 0, $value$jscomp$116$$ >> 8); +}; +$CPU$$.prototype.mmap_read32 = function($addr$jscomp$17$$) { + return this.memory_map_read32[$addr$jscomp$17$$ >>> 17]($addr$jscomp$17$$); +}; +$CPU$$.prototype.mmap_write32 = function($addr$jscomp$18$$, $value$jscomp$117$$) { + this.memory_map_write32[$addr$jscomp$18$$ >>> 17]($addr$jscomp$18$$, $value$jscomp$117$$); +}; +$CPU$$.prototype.mmap_write64 = function($addr$jscomp$19$$, $value0$$, $value1$jscomp$7$$) { + var $aligned_addr$jscomp$5_write_func32$jscomp$1$$ = $addr$jscomp$19$$ >>> 17; + $dbg_assert$$($aligned_addr$jscomp$5_write_func32$jscomp$1$$ === $addr$jscomp$19$$ + 7 >>> 17); + $aligned_addr$jscomp$5_write_func32$jscomp$1$$ = this.memory_map_write32[$aligned_addr$jscomp$5_write_func32$jscomp$1$$]; + $aligned_addr$jscomp$5_write_func32$jscomp$1$$($addr$jscomp$19$$, $value0$$); + $aligned_addr$jscomp$5_write_func32$jscomp$1$$($addr$jscomp$19$$ + 4, $value1$jscomp$7$$); +}; +$CPU$$.prototype.mmap_write128 = function($addr$jscomp$20$$, $value0$jscomp$1$$, $value1$jscomp$8$$, $value2$jscomp$7$$, $value3$jscomp$4$$) { + var $aligned_addr$jscomp$6_write_func32$jscomp$2$$ = $addr$jscomp$20$$ >>> 17; + $dbg_assert$$($aligned_addr$jscomp$6_write_func32$jscomp$2$$ === $addr$jscomp$20$$ + 12 >>> 17); + $aligned_addr$jscomp$6_write_func32$jscomp$2$$ = this.memory_map_write32[$aligned_addr$jscomp$6_write_func32$jscomp$2$$]; + $aligned_addr$jscomp$6_write_func32$jscomp$2$$($addr$jscomp$20$$, $value0$jscomp$1$$); + $aligned_addr$jscomp$6_write_func32$jscomp$2$$($addr$jscomp$20$$ + 4, $value1$jscomp$8$$); + $aligned_addr$jscomp$6_write_func32$jscomp$2$$($addr$jscomp$20$$ + 8, $value2$jscomp$7$$); + $aligned_addr$jscomp$6_write_func32$jscomp$2$$($addr$jscomp$20$$ + 12, $value3$jscomp$4$$); +}; +$CPU$$.prototype.write_blob = function($blob$jscomp$13$$, $offset$jscomp$40$$) { + $dbg_assert$$($blob$jscomp$13$$ && 0 <= $blob$jscomp$13$$.length); + $blob$jscomp$13$$.length && ($dbg_assert$$(!this.in_mapped_range($offset$jscomp$40$$)), $dbg_assert$$(!this.in_mapped_range($offset$jscomp$40$$ + $blob$jscomp$13$$.length - 1)), this.jit_dirty_cache($offset$jscomp$40$$, $offset$jscomp$40$$ + $blob$jscomp$13$$.length), this.mem8.set($blob$jscomp$13$$, $offset$jscomp$40$$)); +}; +$CPU$$.prototype.read_blob = function($offset$jscomp$41$$, $length$jscomp$23$$) { + $length$jscomp$23$$ && ($dbg_assert$$(!this.in_mapped_range($offset$jscomp$41$$)), $dbg_assert$$(!this.in_mapped_range($offset$jscomp$41$$ + $length$jscomp$23$$ - 1))); + return this.mem8.subarray($offset$jscomp$41$$, $offset$jscomp$41$$ + $length$jscomp$23$$); +}; +function $DMA$$($cpu$jscomp$6_io$$) { + this.cpu = $cpu$jscomp$6_io$$; + this.channel_page = new Uint8Array(8); + this.channel_pagehi = new Uint8Array(8); + this.channel_addr = new Uint16Array(8); + this.channel_addr_init = new Uint16Array(8); + this.channel_count = new Uint16Array(8); + this.channel_count_init = new Uint16Array(8); + this.channel_mask = new Uint8Array(8); + this.channel_mode = new Uint8Array(8); + this.unmask_listeners = []; + this.lsb_msb_flipflop = 0; + $cpu$jscomp$6_io$$ = $cpu$jscomp$6_io$$.io; + $cpu$jscomp$6_io$$.register_write(0, this, this.port_addr_write.bind(this, 0)); + $cpu$jscomp$6_io$$.register_write(2, this, this.port_addr_write.bind(this, 1)); + $cpu$jscomp$6_io$$.register_write(4, this, this.port_addr_write.bind(this, 2)); + $cpu$jscomp$6_io$$.register_write(6, this, this.port_addr_write.bind(this, 3)); + $cpu$jscomp$6_io$$.register_write(1, this, this.port_count_write.bind(this, 0)); + $cpu$jscomp$6_io$$.register_write(3, this, this.port_count_write.bind(this, 1)); + $cpu$jscomp$6_io$$.register_write(5, this, this.port_count_write.bind(this, 2)); + $cpu$jscomp$6_io$$.register_write(7, this, this.port_count_write.bind(this, 3)); + $cpu$jscomp$6_io$$.register_read(0, this, this.port_addr_read.bind(this, 0)); + $cpu$jscomp$6_io$$.register_read(2, this, this.port_addr_read.bind(this, 1)); + $cpu$jscomp$6_io$$.register_read(4, this, this.port_addr_read.bind(this, 2)); + $cpu$jscomp$6_io$$.register_read(6, this, this.port_addr_read.bind(this, 3)); + $cpu$jscomp$6_io$$.register_read(1, this, this.port_count_read.bind(this, 0)); + $cpu$jscomp$6_io$$.register_read(3, this, this.port_count_read.bind(this, 1)); + $cpu$jscomp$6_io$$.register_read(5, this, this.port_count_read.bind(this, 2)); + $cpu$jscomp$6_io$$.register_read(7, this, this.port_count_read.bind(this, 3)); + $cpu$jscomp$6_io$$.register_write(192, this, this.port_addr_write.bind(this, 4)); + $cpu$jscomp$6_io$$.register_write(196, this, this.port_addr_write.bind(this, 5)); + $cpu$jscomp$6_io$$.register_write(200, this, this.port_addr_write.bind(this, 6)); + $cpu$jscomp$6_io$$.register_write(204, this, this.port_addr_write.bind(this, 7)); + $cpu$jscomp$6_io$$.register_write(194, this, this.port_count_write.bind(this, 4)); + $cpu$jscomp$6_io$$.register_write(198, this, this.port_count_write.bind(this, 5)); + $cpu$jscomp$6_io$$.register_write(202, this, this.port_count_write.bind(this, 6)); + $cpu$jscomp$6_io$$.register_write(206, this, this.port_count_write.bind(this, 7)); + $cpu$jscomp$6_io$$.register_read(192, this, this.port_addr_read.bind(this, 4)); + $cpu$jscomp$6_io$$.register_read(196, this, this.port_addr_read.bind(this, 5)); + $cpu$jscomp$6_io$$.register_read(200, this, this.port_addr_read.bind(this, 6)); + $cpu$jscomp$6_io$$.register_read(204, this, this.port_addr_read.bind(this, 7)); + $cpu$jscomp$6_io$$.register_read(194, this, this.port_count_read.bind(this, 4)); + $cpu$jscomp$6_io$$.register_read(198, this, this.port_count_read.bind(this, 5)); + $cpu$jscomp$6_io$$.register_read(202, this, this.port_count_read.bind(this, 6)); + $cpu$jscomp$6_io$$.register_read(206, this, this.port_count_read.bind(this, 7)); + $cpu$jscomp$6_io$$.register_write(135, this, this.port_page_write.bind(this, 0)); + $cpu$jscomp$6_io$$.register_write(131, this, this.port_page_write.bind(this, 1)); + $cpu$jscomp$6_io$$.register_write(129, this, this.port_page_write.bind(this, 2)); + $cpu$jscomp$6_io$$.register_write(130, this, this.port_page_write.bind(this, 3)); + $cpu$jscomp$6_io$$.register_write(143, this, this.port_page_write.bind(this, 4)); + $cpu$jscomp$6_io$$.register_write(139, this, this.port_page_write.bind(this, 5)); + $cpu$jscomp$6_io$$.register_write(137, this, this.port_page_write.bind(this, 6)); + $cpu$jscomp$6_io$$.register_write(138, this, this.port_page_write.bind(this, 7)); + $cpu$jscomp$6_io$$.register_read(135, this, this.port_page_read.bind(this, 0)); + $cpu$jscomp$6_io$$.register_read(131, this, this.port_page_read.bind(this, 1)); + $cpu$jscomp$6_io$$.register_read(129, this, this.port_page_read.bind(this, 2)); + $cpu$jscomp$6_io$$.register_read(130, this, this.port_page_read.bind(this, 3)); + $cpu$jscomp$6_io$$.register_read(143, this, this.port_page_read.bind(this, 4)); + $cpu$jscomp$6_io$$.register_read(139, this, this.port_page_read.bind(this, 5)); + $cpu$jscomp$6_io$$.register_read(137, this, this.port_page_read.bind(this, 6)); + $cpu$jscomp$6_io$$.register_read(138, this, this.port_page_read.bind(this, 7)); + $cpu$jscomp$6_io$$.register_write(1159, this, this.port_pagehi_write.bind(this, 0)); + $cpu$jscomp$6_io$$.register_write(1155, this, this.port_pagehi_write.bind(this, 1)); + $cpu$jscomp$6_io$$.register_write(1153, this, this.port_pagehi_write.bind(this, 2)); + $cpu$jscomp$6_io$$.register_write(1154, this, this.port_pagehi_write.bind(this, 3)); + $cpu$jscomp$6_io$$.register_write(1163, this, this.port_pagehi_write.bind(this, 5)); + $cpu$jscomp$6_io$$.register_write(1161, this, this.port_pagehi_write.bind(this, 6)); + $cpu$jscomp$6_io$$.register_write(1162, this, this.port_pagehi_write.bind(this, 7)); + $cpu$jscomp$6_io$$.register_read(1159, this, this.port_pagehi_read.bind(this, 0)); + $cpu$jscomp$6_io$$.register_read(1155, this, this.port_pagehi_read.bind(this, 1)); + $cpu$jscomp$6_io$$.register_read(1153, this, this.port_pagehi_read.bind(this, 2)); + $cpu$jscomp$6_io$$.register_read(1154, this, this.port_pagehi_read.bind(this, 3)); + $cpu$jscomp$6_io$$.register_read(1163, this, this.port_pagehi_read.bind(this, 5)); + $cpu$jscomp$6_io$$.register_read(1161, this, this.port_pagehi_read.bind(this, 6)); + $cpu$jscomp$6_io$$.register_read(1162, this, this.port_pagehi_read.bind(this, 7)); + $cpu$jscomp$6_io$$.register_write(10, this, this.port_singlemask_write.bind(this, 0)); + $cpu$jscomp$6_io$$.register_write(212, this, this.port_singlemask_write.bind(this, 4)); + $cpu$jscomp$6_io$$.register_write(15, this, this.port_multimask_write.bind(this, 0)); + $cpu$jscomp$6_io$$.register_write(222, this, this.port_multimask_write.bind(this, 4)); + $cpu$jscomp$6_io$$.register_read(15, this, this.port_multimask_read.bind(this, 0)); + $cpu$jscomp$6_io$$.register_read(222, this, this.port_multimask_read.bind(this, 4)); + $cpu$jscomp$6_io$$.register_write(11, this, this.port_mode_write.bind(this, 0)); + $cpu$jscomp$6_io$$.register_write(214, this, this.port_mode_write.bind(this, 4)); + $cpu$jscomp$6_io$$.register_write(12, this, this.portC_write); + $cpu$jscomp$6_io$$.register_write(216, this, this.portC_write); +} +$DMA$$.prototype.get_state = function() { + return [this.channel_page, this.channel_pagehi, this.channel_addr, this.channel_addr_init, this.channel_count, this.channel_count_init, this.channel_mask, this.channel_mode, this.lsb_msb_flipflop, ]; +}; +$DMA$$.prototype.set_state = function($state$jscomp$16$$) { + this.channel_page = $state$jscomp$16$$[0]; + this.channel_pagehi = $state$jscomp$16$$[1]; + this.channel_addr = $state$jscomp$16$$[2]; + this.channel_addr_init = $state$jscomp$16$$[3]; + this.channel_count = $state$jscomp$16$$[4]; + this.channel_count_init = $state$jscomp$16$$[5]; + this.channel_mask = $state$jscomp$16$$[6]; + this.channel_mode = $state$jscomp$16$$[7]; + this.lsb_msb_flipflop = $state$jscomp$16$$[8]; +}; +$DMA$$.prototype.port_count_write = function($channel$jscomp$1$$, $data_byte$$) { + $dbg_log$$("count write [" + $channel$jscomp$1$$ + "] = " + $h$$($data_byte$$), 16); + this.channel_count[$channel$jscomp$1$$] = this.flipflop_get(this.channel_count[$channel$jscomp$1$$], $data_byte$$, !1); + this.channel_count_init[$channel$jscomp$1$$] = this.flipflop_get(this.channel_count_init[$channel$jscomp$1$$], $data_byte$$, !0); +}; +$DMA$$.prototype.port_count_read = function($channel$jscomp$2$$) { + $dbg_log$$("count read [" + $channel$jscomp$2$$ + "] -> " + $h$$(this.channel_count[$channel$jscomp$2$$]), 16); + return this.flipflop_read(this.channel_count[$channel$jscomp$2$$]); +}; +$DMA$$.prototype.port_addr_write = function($channel$jscomp$3$$, $data_byte$jscomp$1$$) { + $dbg_log$$("addr write [" + $channel$jscomp$3$$ + "] = " + $h$$($data_byte$jscomp$1$$), 16); + this.channel_addr[$channel$jscomp$3$$] = this.flipflop_get(this.channel_addr[$channel$jscomp$3$$], $data_byte$jscomp$1$$, !1); + this.channel_addr_init[$channel$jscomp$3$$] = this.flipflop_get(this.channel_addr_init[$channel$jscomp$3$$], $data_byte$jscomp$1$$, !0); +}; +$DMA$$.prototype.port_addr_read = function($channel$jscomp$4$$) { + $dbg_log$$("addr read [" + $channel$jscomp$4$$ + "] -> " + $h$$(this.channel_addr[$channel$jscomp$4$$]), 16); + return this.flipflop_read(this.channel_addr[$channel$jscomp$4$$]); +}; +$DMA$$.prototype.port_pagehi_write = function($channel$jscomp$5$$, $data_byte$jscomp$2$$) { + $dbg_log$$("pagehi write [" + $channel$jscomp$5$$ + "] = " + $h$$($data_byte$jscomp$2$$), 16); + this.channel_pagehi[$channel$jscomp$5$$] = $data_byte$jscomp$2$$; +}; +$DMA$$.prototype.port_pagehi_read = function($channel$jscomp$6$$) { + $dbg_log$$("pagehi read [" + $channel$jscomp$6$$ + "]", 16); + return this.channel_pagehi[$channel$jscomp$6$$]; +}; +$DMA$$.prototype.port_page_write = function($channel$jscomp$7$$, $data_byte$jscomp$3$$) { + $dbg_log$$("page write [" + $channel$jscomp$7$$ + "] = " + $h$$($data_byte$jscomp$3$$), 16); + this.channel_page[$channel$jscomp$7$$] = $data_byte$jscomp$3$$; +}; +$DMA$$.prototype.port_page_read = function($channel$jscomp$8$$) { + $dbg_log$$("page read [" + $channel$jscomp$8$$ + "]", 16); + return this.channel_page[$channel$jscomp$8$$]; +}; +$DMA$$.prototype.port_singlemask_write = function($channel$jscomp$9_channel_offset$$, $data_byte$jscomp$4_value$jscomp$118$$) { + $channel$jscomp$9_channel_offset$$ = ($data_byte$jscomp$4_value$jscomp$118$$ & 3) + $channel$jscomp$9_channel_offset$$; + $data_byte$jscomp$4_value$jscomp$118$$ = $data_byte$jscomp$4_value$jscomp$118$$ & 4 ? 1 : 0; + $dbg_log$$("singlechannel mask write [" + $channel$jscomp$9_channel_offset$$ + "] = " + $data_byte$jscomp$4_value$jscomp$118$$, 16); + this.update_mask($channel$jscomp$9_channel_offset$$, $data_byte$jscomp$4_value$jscomp$118$$); +}; +$DMA$$.prototype.port_multimask_write = function($channel_offset$jscomp$1$$, $data_byte$jscomp$5$$) { + $dbg_log$$("multichannel mask write: " + $h$$($data_byte$jscomp$5$$), 16); + for (var $i$jscomp$25$$ = 0; 4 > $i$jscomp$25$$; $i$jscomp$25$$++) { + this.update_mask($channel_offset$jscomp$1$$ + $i$jscomp$25$$, $data_byte$jscomp$5$$ & 1 << $i$jscomp$25$$); + } +}; +$DMA$$.prototype.port_multimask_read = function($channel_offset$jscomp$2$$) { + var $value$jscomp$119$$ = 0 | this.channel_mask[$channel_offset$jscomp$2$$ + 0]; + $value$jscomp$119$$ |= this.channel_mask[$channel_offset$jscomp$2$$ + 1] << 1; + $value$jscomp$119$$ |= this.channel_mask[$channel_offset$jscomp$2$$ + 2] << 2; + $value$jscomp$119$$ |= this.channel_mask[$channel_offset$jscomp$2$$ + 3] << 3; + $dbg_log$$("multichannel mask read: " + $h$$($value$jscomp$119$$), 16); + return $value$jscomp$119$$; +}; +$DMA$$.prototype.port_mode_write = function($channel$jscomp$10_channel_offset$jscomp$3$$, $data_byte$jscomp$6$$) { + $channel$jscomp$10_channel_offset$jscomp$3$$ = ($data_byte$jscomp$6$$ & 3) + $channel$jscomp$10_channel_offset$jscomp$3$$; + $dbg_log$$("mode write [" + $channel$jscomp$10_channel_offset$jscomp$3$$ + "] = " + $h$$($data_byte$jscomp$6$$), 16); + this.channel_mode[$channel$jscomp$10_channel_offset$jscomp$3$$] = $data_byte$jscomp$6$$; +}; +$DMA$$.prototype.portC_write = function() { + $dbg_log$$("flipflop reset", 16); + this.lsb_msb_flipflop = 0; +}; +$DMA$$.prototype.on_unmask = function($fn$jscomp$13$$, $this_value$$) { + this.unmask_listeners.push({fn:$fn$jscomp$13$$, this_value:$this_value$$, }); +}; +$DMA$$.prototype.update_mask = function($channel$jscomp$11$$, $i$jscomp$26_value$jscomp$120$$) { + if (this.channel_mask[$channel$jscomp$11$$] !== $i$jscomp$26_value$jscomp$120$$ && (this.channel_mask[$channel$jscomp$11$$] = $i$jscomp$26_value$jscomp$120$$, !$i$jscomp$26_value$jscomp$120$$)) { + for ($dbg_log$$("firing on_unmask(" + $channel$jscomp$11$$ + ")", 16), $i$jscomp$26_value$jscomp$120$$ = 0; $i$jscomp$26_value$jscomp$120$$ < this.unmask_listeners.length; $i$jscomp$26_value$jscomp$120$$++) { + this.unmask_listeners[$i$jscomp$26_value$jscomp$120$$].fn.call(this.unmask_listeners[$i$jscomp$26_value$jscomp$120$$].this_value, $channel$jscomp$11$$); + } + } +}; +$DMA$$.prototype.do_read = function($buffer$jscomp$28$$, $start$jscomp$30$$, $len$jscomp$14$$, $channel$jscomp$12$$, $fn$jscomp$14$$) { + var $read_count$jscomp$1$$ = this.count_get_8bit($channel$jscomp$12$$), $addr$jscomp$21$$ = this.address_get_8bit($channel$jscomp$12$$); + $dbg_log$$("DMA write channel " + $channel$jscomp$12$$, 16); + $dbg_log$$("to " + $h$$($addr$jscomp$21$$) + " len " + $h$$($read_count$jscomp$1$$), 16); + $len$jscomp$14$$ < $read_count$jscomp$1$$ && $dbg_log$$("DMA should read more than provided: " + $h$$($len$jscomp$14$$) + " " + $h$$($read_count$jscomp$1$$), 16); + if ($start$jscomp$30$$ + $read_count$jscomp$1$$ > $buffer$jscomp$28$$.byteLength) { + $dbg_log$$("DMA read outside of buffer", 16), $fn$jscomp$14$$(!0); + } else { + var $cpu$jscomp$7$$ = this.cpu; + this.channel_addr[$channel$jscomp$12$$] += $read_count$jscomp$1$$; + $buffer$jscomp$28$$.get($start$jscomp$30$$, $read_count$jscomp$1$$, function($data$jscomp$115$$) { + $cpu$jscomp$7$$.write_blob($data$jscomp$115$$, $addr$jscomp$21$$); + $fn$jscomp$14$$(!1); + }); + } +}; +$DMA$$.prototype.do_write = function($buffer$jscomp$29$$, $start$jscomp$31$$, $len$jscomp$15$$, $channel$jscomp$13$$, $fn$jscomp$15$$) { + var $read_count$jscomp$2$$ = this.channel_count[$channel$jscomp$13$$] + 1 & 65535, $bytes_per_count$$ = 5 <= $channel$jscomp$13$$ ? 2 : 1, $read_bytes$$ = $read_count$jscomp$2$$ * $bytes_per_count$$, $addr$jscomp$22$$ = this.address_get_8bit($channel$jscomp$13$$), $unfinished$$ = !1, $want_more$$ = !1, $autoinit$$ = this.channel_mode[$channel$jscomp$13$$] & 16; + $dbg_log$$("DMA write channel " + $channel$jscomp$13$$, 16); + $dbg_log$$("to " + $h$$($addr$jscomp$22$$) + " len " + $h$$($read_bytes$$), 16); + $len$jscomp$15$$ < $read_bytes$$ ? ($dbg_log$$("DMA should read more than provided", 16), $read_count$jscomp$2$$ = Math.floor($len$jscomp$15$$ / $bytes_per_count$$), $read_bytes$$ = $read_count$jscomp$2$$ * $bytes_per_count$$, $unfinished$$ = !0) : $len$jscomp$15$$ > $read_bytes$$ && ($dbg_log$$("DMA attempted to read more than provided", 16), $want_more$$ = !0); + $start$jscomp$31$$ + $read_bytes$$ > $buffer$jscomp$29$$.byteLength ? ($dbg_log$$("DMA write outside of buffer", 16), $fn$jscomp$15$$(!0)) : (this.channel_addr[$channel$jscomp$13$$] += $read_count$jscomp$2$$, this.channel_count[$channel$jscomp$13$$] -= $read_count$jscomp$2$$, !$unfinished$$ && $autoinit$$ && ($dbg_log$$("DMA autoinit", 16), this.channel_addr[$channel$jscomp$13$$] = this.channel_addr_init[$channel$jscomp$13$$], this.channel_count[$channel$jscomp$13$$] = this.channel_count_init[$channel$jscomp$13$$]), + $buffer$jscomp$29$$.set($start$jscomp$31$$, this.cpu.mem8.subarray($addr$jscomp$22$$, $addr$jscomp$22$$ + $read_bytes$$), () => { + $want_more$$ && $autoinit$$ ? ($dbg_log$$("DMA continuing from start", 16), this.do_write($buffer$jscomp$29$$, $start$jscomp$31$$ + $read_bytes$$, $len$jscomp$15$$ - $read_bytes$$, $channel$jscomp$13$$, $fn$jscomp$15$$)) : $fn$jscomp$15$$(!1); + })); +}; +$DMA$$.prototype.address_get_8bit = function($channel$jscomp$14$$) { + var $addr$jscomp$23$$ = this.channel_addr[$channel$jscomp$14$$]; + 5 <= $channel$jscomp$14$$ && ($addr$jscomp$23$$ <<= 1); + $addr$jscomp$23$$ = $addr$jscomp$23$$ & 65535 | this.channel_page[$channel$jscomp$14$$] << 16; + return $addr$jscomp$23$$ |= this.channel_pagehi[$channel$jscomp$14$$] << 24; +}; +$DMA$$.prototype.count_get_8bit = function($channel$jscomp$15$$) { + var $count$jscomp$53$$ = this.channel_count[$channel$jscomp$15$$] + 1; + 5 <= $channel$jscomp$15$$ && ($count$jscomp$53$$ *= 2); + return $count$jscomp$53$$; +}; +$DMA$$.prototype.flipflop_get = function($old_dword$$, $new_byte$$, $continuing$$) { + $continuing$$ || (this.lsb_msb_flipflop ^= 1); + return this.lsb_msb_flipflop ? $old_dword$$ & -256 | $new_byte$$ : $old_dword$$ & -65281 | $new_byte$$ << 8; +}; +$DMA$$.prototype.flipflop_read = function($dword$$) { + return (this.lsb_msb_flipflop ^= 1) ? $dword$$ & 255 : $dword$$ >> 8 & 255; +}; +function $PIT$$($cpu$jscomp$8$$, $bus$jscomp$4$$) { + this.cpu = $cpu$jscomp$8$$; + this.bus = $bus$jscomp$4$$; + this.counter_start_time = new Float64Array(3); + this.counter_start_value = new Uint16Array(3); + this.counter_next_low = new Uint8Array(4); + this.counter_enabled = new Uint8Array(4); + this.counter_mode = new Uint8Array(4); + this.counter_read_mode = new Uint8Array(4); + this.counter_latch = new Uint8Array(4); + this.counter_latch_value = new Uint16Array(3); + this.counter_reload = new Uint16Array(3); + $cpu$jscomp$8$$.io.register_read(97, this, function() { + var $counter2_out_now$$ = $v86$$.microtick(), $ref_toggle$$ = 66.66666666666667 * $counter2_out_now$$ & 1; + $counter2_out_now$$ = this.did_rollover(2, $counter2_out_now$$); + return $ref_toggle$$ << 4 | $counter2_out_now$$ << 5; + }); + $cpu$jscomp$8$$.io.register_write(97, this, function($data$jscomp$116$$) { + $data$jscomp$116$$ & 1 ? this.bus.send("pcspeaker-enable") : this.bus.send("pcspeaker-disable"); + }); + $cpu$jscomp$8$$.io.register_read(64, this, function() { + return this.counter_read(0); + }); + $cpu$jscomp$8$$.io.register_read(65, this, function() { + return this.counter_read(1); + }); + $cpu$jscomp$8$$.io.register_read(66, this, function() { + return this.counter_read(2); + }); + $cpu$jscomp$8$$.io.register_write(64, this, function($data$jscomp$117$$) { + this.counter_write(0, $data$jscomp$117$$); + }); + $cpu$jscomp$8$$.io.register_write(65, this, function($data$jscomp$118$$) { + this.counter_write(1, $data$jscomp$118$$); + }); + $cpu$jscomp$8$$.io.register_write(66, this, function($data$jscomp$119$$) { + this.counter_write(2, $data$jscomp$119$$); + this.bus.send("pcspeaker-update", [this.counter_mode[2], this.counter_reload[2]]); + }); + $cpu$jscomp$8$$.io.register_write(67, this, this.port43_write); +} +$PIT$$.prototype.get_state = function() { + var $state$jscomp$17$$ = []; + $state$jscomp$17$$[0] = this.counter_next_low; + $state$jscomp$17$$[1] = this.counter_enabled; + $state$jscomp$17$$[2] = this.counter_mode; + $state$jscomp$17$$[3] = this.counter_read_mode; + $state$jscomp$17$$[4] = this.counter_latch; + $state$jscomp$17$$[5] = this.counter_latch_value; + $state$jscomp$17$$[6] = this.counter_reload; + $state$jscomp$17$$[7] = this.counter_start_time; + $state$jscomp$17$$[8] = this.counter_start_value; + return $state$jscomp$17$$; +}; +$PIT$$.prototype.set_state = function($state$jscomp$18$$) { + this.counter_next_low = $state$jscomp$18$$[0]; + this.counter_enabled = $state$jscomp$18$$[1]; + this.counter_mode = $state$jscomp$18$$[2]; + this.counter_read_mode = $state$jscomp$18$$[3]; + this.counter_latch = $state$jscomp$18$$[4]; + this.counter_latch_value = $state$jscomp$18$$[5]; + this.counter_reload = $state$jscomp$18$$[6]; + this.counter_start_time = $state$jscomp$18$$[7]; + this.counter_start_value = $state$jscomp$18$$[8]; +}; +$PIT$$.prototype.timer = function($now$jscomp$1$$, $no_irq$$) { + var $time_to_next_interrupt$$ = 100; + $no_irq$$ || (this.counter_enabled[0] && this.did_rollover(0, $now$jscomp$1$$) ? (this.counter_start_value[0] = this.get_counter_value(0, $now$jscomp$1$$), this.counter_start_time[0] = $now$jscomp$1$$, $dbg_log$$("pit interrupt. new value: " + this.counter_start_value[0], 512), this.cpu.device_lower_irq(0), this.cpu.device_raise_irq(0), 0 === this.counter_mode[0] && (this.counter_enabled[0] = 0)) : this.cpu.device_lower_irq(0), this.counter_enabled[0] && ($time_to_next_interrupt$$ = (this.counter_start_value[0] - + Math.floor(1193.1816666 * ($now$jscomp$1$$ - this.counter_start_time[0]))) / 1193.1816666)); + return $time_to_next_interrupt$$; +}; +$PIT$$.prototype.get_counter_value = function($i$jscomp$27$$, $now$jscomp$2_value$jscomp$121$$) { + if (!this.counter_enabled[$i$jscomp$27$$]) { + return 0; + } + var $diff$jscomp$1_reload$$ = $now$jscomp$2_value$jscomp$121$$ - this.counter_start_time[$i$jscomp$27$$], $diff_in_ticks$jscomp$1$$ = Math.floor(1193.1816666 * $diff$jscomp$1_reload$$); + $now$jscomp$2_value$jscomp$121$$ = this.counter_start_value[$i$jscomp$27$$] - $diff_in_ticks$jscomp$1$$; + $dbg_log$$("diff=" + $diff$jscomp$1_reload$$ + " dticks=" + $diff_in_ticks$jscomp$1$$ + " value=" + $now$jscomp$2_value$jscomp$121$$ + " reload=" + this.counter_reload[$i$jscomp$27$$], 512); + $diff$jscomp$1_reload$$ = this.counter_reload[$i$jscomp$27$$]; + $now$jscomp$2_value$jscomp$121$$ >= $diff$jscomp$1_reload$$ ? ($dbg_log$$("Warning: Counter" + $i$jscomp$27$$ + " value " + $now$jscomp$2_value$jscomp$121$$ + " is larger than reload " + $diff$jscomp$1_reload$$, 512), $now$jscomp$2_value$jscomp$121$$ %= $diff$jscomp$1_reload$$) : 0 > $now$jscomp$2_value$jscomp$121$$ && ($now$jscomp$2_value$jscomp$121$$ = $now$jscomp$2_value$jscomp$121$$ % $diff$jscomp$1_reload$$ + $diff$jscomp$1_reload$$); + return $now$jscomp$2_value$jscomp$121$$; +}; +$PIT$$.prototype.did_rollover = function($i$jscomp$28$$, $diff$jscomp$2_now$jscomp$3$$) { + $diff$jscomp$2_now$jscomp$3$$ -= this.counter_start_time[$i$jscomp$28$$]; + return 0 > $diff$jscomp$2_now$jscomp$3$$ ? ($dbg_log$$("Warning: PIT timer difference is negative, resetting (timer " + $i$jscomp$28$$ + ")"), !0) : this.counter_start_value[$i$jscomp$28$$] < Math.floor(1193.1816666 * $diff$jscomp$2_now$jscomp$3$$); +}; +$PIT$$.prototype.counter_read = function($i$jscomp$29_value$jscomp$122$$) { + var $latch_next_low$$ = this.counter_latch[$i$jscomp$29_value$jscomp$122$$]; + if ($latch_next_low$$) { + return this.counter_latch[$i$jscomp$29_value$jscomp$122$$]--, 2 === $latch_next_low$$ ? this.counter_latch_value[$i$jscomp$29_value$jscomp$122$$] & 255 : this.counter_latch_value[$i$jscomp$29_value$jscomp$122$$] >> 8; + } + $latch_next_low$$ = this.counter_next_low[$i$jscomp$29_value$jscomp$122$$]; + 3 === this.counter_mode[$i$jscomp$29_value$jscomp$122$$] && (this.counter_next_low[$i$jscomp$29_value$jscomp$122$$] ^= 1); + $i$jscomp$29_value$jscomp$122$$ = this.get_counter_value($i$jscomp$29_value$jscomp$122$$, $v86$$.microtick()); + return $latch_next_low$$ ? $i$jscomp$29_value$jscomp$122$$ & 255 : $i$jscomp$29_value$jscomp$122$$ >> 8; +}; +$PIT$$.prototype.counter_write = function($i$jscomp$30$$, $value$jscomp$123$$) { + this.counter_reload[$i$jscomp$30$$] = this.counter_next_low[$i$jscomp$30$$] ? this.counter_reload[$i$jscomp$30$$] & -256 | $value$jscomp$123$$ : this.counter_reload[$i$jscomp$30$$] & 255 | $value$jscomp$123$$ << 8; + 3 === this.counter_read_mode[$i$jscomp$30$$] && this.counter_next_low[$i$jscomp$30$$] || (this.counter_reload[$i$jscomp$30$$] || (this.counter_reload[$i$jscomp$30$$] = 65535), this.counter_start_value[$i$jscomp$30$$] = this.counter_reload[$i$jscomp$30$$], this.counter_enabled[$i$jscomp$30$$] = !0, this.counter_start_time[$i$jscomp$30$$] = $v86$$.microtick(), $dbg_log$$("counter" + $i$jscomp$30$$ + " reload=" + $h$$(this.counter_reload[$i$jscomp$30$$]) + " tick=" + (this.counter_reload[$i$jscomp$30$$] || + 65536) / 1193.1816666 + "ms", 512)); + 3 === this.counter_read_mode[$i$jscomp$30$$] && (this.counter_next_low[$i$jscomp$30$$] ^= 1); +}; +$PIT$$.prototype.port43_write = function($read_mode_reg_byte$jscomp$1$$) { + var $mode$jscomp$19_value$jscomp$124$$ = $read_mode_reg_byte$jscomp$1$$ >> 1 & 7, $binary_mode$$ = $read_mode_reg_byte$jscomp$1$$ & 1, $i$jscomp$31$$ = $read_mode_reg_byte$jscomp$1$$ >> 6 & 3; + $read_mode_reg_byte$jscomp$1$$ = $read_mode_reg_byte$jscomp$1$$ >> 4 & 3; + 1 === $i$jscomp$31$$ && $dbg_log$$("Unimplemented timer1", 512); + 3 === $i$jscomp$31$$ ? $dbg_log$$("Unimplemented read back", 512) : 0 === $read_mode_reg_byte$jscomp$1$$ ? (this.counter_latch[$i$jscomp$31$$] = 2, $mode$jscomp$19_value$jscomp$124$$ = this.get_counter_value($i$jscomp$31$$, $v86$$.microtick()), $dbg_log$$("latch: " + $mode$jscomp$19_value$jscomp$124$$, 512), this.counter_latch_value[$i$jscomp$31$$] = $mode$jscomp$19_value$jscomp$124$$ ? $mode$jscomp$19_value$jscomp$124$$ - 1 : 0) : (6 <= $mode$jscomp$19_value$jscomp$124$$ && ($mode$jscomp$19_value$jscomp$124$$ &= + -5), $dbg_log$$("Control: mode=" + $mode$jscomp$19_value$jscomp$124$$ + " ctr=" + $i$jscomp$31$$ + " read_mode=" + $read_mode_reg_byte$jscomp$1$$ + " bcd=" + $binary_mode$$, 512), this.counter_next_low[$i$jscomp$31$$] = 1 === $read_mode_reg_byte$jscomp$1$$ ? 0 : 1, 0 === $i$jscomp$31$$ && this.cpu.device_lower_irq(0), 0 !== $mode$jscomp$19_value$jscomp$124$$ && 3 !== $mode$jscomp$19_value$jscomp$124$$ && 2 !== $mode$jscomp$19_value$jscomp$124$$ && $dbg_log$$("Unimplemented counter mode: " + $h$$($mode$jscomp$19_value$jscomp$124$$), + 512), this.counter_mode[$i$jscomp$31$$] = $mode$jscomp$19_value$jscomp$124$$, this.counter_read_mode[$i$jscomp$31$$] = $read_mode_reg_byte$jscomp$1$$, 2 === $i$jscomp$31$$ && this.bus.send("pcspeaker-update", [this.counter_mode[2], this.counter_reload[2]])); +}; +$PIT$$.prototype.dump = function() { + const $reload$jscomp$1$$ = this.counter_reload[0]; + $dbg_log$$("counter0 ticks every " + ($reload$jscomp$1$$ || 65536) / 1193.1816666 + "ms (reload=" + $reload$jscomp$1$$ + ")"); +}; +const $VGA_HOST_MEMORY_SPACE_START$$ = Uint32Array.from([655360, 655360, 720896, 753664, ]), $VGA_HOST_MEMORY_SPACE_SIZE$$ = Uint32Array.from([131072, 65536, 32768, 32768, ]); +function $VGAScreen$$($cpu$jscomp$9$$, $bus$jscomp$5_io$jscomp$1$$, $screen$jscomp$2_vga_offset$$, $vga_memory_size$$) { + this.cpu = $cpu$jscomp$9$$; + this.bus = $bus$jscomp$5_io$jscomp$1$$; + this.screen = $screen$jscomp$2_vga_offset$$; + this.vga_memory_size = $vga_memory_size$$; + this.cursor_address = 0; + this.cursor_scanline_start = 14; + this.cursor_scanline_end = 15; + this.max_cols = 80; + this.max_rows = 25; + this.virtual_height = this.virtual_width = this.screen_height = this.screen_width = 0; + this.layers = []; + this.start_address_latched = this.start_address = 0; + this.crtc = new Uint8Array(25); + this.line_compare = this.offset_register = this.preset_row_scan = this.underline_location_register = this.vertical_blank_start = this.vertical_display_enable_end = this.horizontal_blank_start = this.horizontal_display_enable_end = this.crtc_mode = 0; + this.graphical_mode = !1; + this.vga256_palette = new Int32Array(256); + this.latch_dword = 0; + this.svga_version = 45253; + this.svga_height = this.svga_width = 0; + this.svga_enabled = !1; + this.svga_bpp = 32; + this.svga_offset_y = this.svga_offset_x = this.svga_offset = this.svga_bank_offset = 0; + this.vga_memory_size = void 0 === this.vga_memory_size || 262144 > this.vga_memory_size ? 262144 : 268435456 < this.vga_memory_size ? 268435456 : $v86util$$.round_up_to_next_power_of_2(this.vga_memory_size); + $dbg_log$$("effective vga memory size: " + this.vga_memory_size, 256); + this.pci_space = [52, 18, 17, 17, 3, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 8, 14680064, 57344, 224, 0, 0, 0, 0, 0, 0, 191, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 26, 0, 17, 0, 0, 190, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; + this.pci_id = 144; + this.pci_bars = [{size:this.vga_memory_size, }, ]; + this.pci_rom_size = 65536; + this.pci_rom_address = 4272947200; + this.name = "vga"; + this.dac_state = this.dac_color_index_read = this.dac_color_index_write = this.index_crtc = 0; + this.dac_mask = 255; + this.dac_map = new Uint8Array(16); + this.attribute_controller_index = -1; + this.palette_source = 32; + this.color_select = this.horizontal_panning = this.color_plane_enable = this.attribute_mode = 0; + this.sequencer_index = -1; + this.plane_write_bm = 15; + this.clocking_mode = this.sequencer_memory_mode = 0; + this.graphics_index = -1; + this.planar_rotate_reg = this.planar_mode = this.plane_read = this.character_map_select = 0; + this.planar_bitmap = 255; + this.max_scan_line = this.color_dont_care = this.color_compare = this.miscellaneous_graphics_register = this.planar_setreset_enable = this.planar_setreset = 0; + this.port_3DA_value = this.miscellaneous_output_register = 255; + this.font_page_ab_enabled = !1; + $bus$jscomp$5_io$jscomp$1$$ = $cpu$jscomp$9$$.io; + $bus$jscomp$5_io$jscomp$1$$.register_write(960, this, this.port3C0_write); + $bus$jscomp$5_io$jscomp$1$$.register_read(960, this, this.port3C0_read, this.port3C0_read16); + $bus$jscomp$5_io$jscomp$1$$.register_read(961, this, this.port3C1_read); + $bus$jscomp$5_io$jscomp$1$$.register_write(962, this, this.port3C2_write); + $bus$jscomp$5_io$jscomp$1$$.register_write_consecutive(964, this, this.port3C4_write, this.port3C5_write); + $bus$jscomp$5_io$jscomp$1$$.register_read(964, this, this.port3C4_read); + $bus$jscomp$5_io$jscomp$1$$.register_read(965, this, this.port3C5_read); + $bus$jscomp$5_io$jscomp$1$$.register_write_consecutive(974, this, this.port3CE_write, this.port3CF_write); + $bus$jscomp$5_io$jscomp$1$$.register_read(974, this, this.port3CE_read); + $bus$jscomp$5_io$jscomp$1$$.register_read(975, this, this.port3CF_read); + $bus$jscomp$5_io$jscomp$1$$.register_read(966, this, this.port3C6_read); + $bus$jscomp$5_io$jscomp$1$$.register_write(966, this, this.port3C6_write); + $bus$jscomp$5_io$jscomp$1$$.register_write(967, this, this.port3C7_write); + $bus$jscomp$5_io$jscomp$1$$.register_read(967, this, this.port3C7_read); + $bus$jscomp$5_io$jscomp$1$$.register_write(968, this, this.port3C8_write); + $bus$jscomp$5_io$jscomp$1$$.register_read(968, this, this.port3C8_read); + $bus$jscomp$5_io$jscomp$1$$.register_write(969, this, this.port3C9_write); + $bus$jscomp$5_io$jscomp$1$$.register_read(969, this, this.port3C9_read); + $bus$jscomp$5_io$jscomp$1$$.register_read(972, this, this.port3CC_read); + $bus$jscomp$5_io$jscomp$1$$.register_write(980, this, this.port3D4_write, this.port3D4_write16); + $bus$jscomp$5_io$jscomp$1$$.register_write(981, this, this.port3D5_write, this.port3D5_write16); + $bus$jscomp$5_io$jscomp$1$$.register_read(980, this, this.port3D4_read); + $bus$jscomp$5_io$jscomp$1$$.register_read(981, this, this.port3D5_read, this.port3D5_read16); + $bus$jscomp$5_io$jscomp$1$$.register_write(948, this, this.port3D4_write, this.port3D4_write16); + $bus$jscomp$5_io$jscomp$1$$.register_write(949, this, this.port3D5_write, this.port3D5_write16); + $bus$jscomp$5_io$jscomp$1$$.register_read(948, this, this.port3D4_read); + $bus$jscomp$5_io$jscomp$1$$.register_read(949, this, this.port3D5_read, this.port3D5_read16); + $bus$jscomp$5_io$jscomp$1$$.register_read(970, this, function() { + $dbg_log$$("3CA read", 256); + return 0; + }); + $bus$jscomp$5_io$jscomp$1$$.register_read(986, this, this.port3DA_read); + $bus$jscomp$5_io$jscomp$1$$.register_read(954, this, this.port3DA_read); + this.dispi_index = -1; + this.dispi_enable_value = 0; + $bus$jscomp$5_io$jscomp$1$$.register_write(462, this, void 0, this.port1CE_write); + $bus$jscomp$5_io$jscomp$1$$.register_write(463, this, void 0, this.port1CF_write); + $bus$jscomp$5_io$jscomp$1$$.register_read(463, this, void 0, this.port1CF_read); + $screen$jscomp$2_vga_offset$$ = $cpu$jscomp$9$$.svga_allocate_memory(this.vga_memory_size) >>> 0; + this.svga_memory = $v86util$$.view(Uint8Array, $cpu$jscomp$9$$.wasm_memory, $screen$jscomp$2_vga_offset$$, this.vga_memory_size); + this.diff_addr_min = this.vga_memory_size; + this.diff_addr_max = 0; + this.diff_plot_min = this.vga_memory_size; + this.diff_plot_max = 0; + this.image_data = null; + this.vga_memory = new Uint8Array(262144); + this.plane0 = new Uint8Array(this.vga_memory.buffer, 0, 65536); + this.plane1 = new Uint8Array(this.vga_memory.buffer, 65536, 65536); + this.plane2 = new Uint8Array(this.vga_memory.buffer, 131072, 65536); + this.plane3 = new Uint8Array(this.vga_memory.buffer, 196608, 65536); + this.pixel_buffer = new Uint8Array(524288); + $bus$jscomp$5_io$jscomp$1$$.mmap_register(655360, 131072, $addr$jscomp$24$$ => this.vga_memory_read($addr$jscomp$24$$), ($addr$jscomp$25$$, $value$jscomp$125$$) => this.vga_memory_write($addr$jscomp$25$$, $value$jscomp$125$$), ); + $cpu$jscomp$9$$.devices.pci.register_device(this); +} +$VGAScreen$$.prototype.get_state = function() { + var $state$jscomp$19$$ = []; + $state$jscomp$19$$[0] = this.vga_memory_size; + $state$jscomp$19$$[1] = this.cursor_address; + $state$jscomp$19$$[2] = this.cursor_scanline_start; + $state$jscomp$19$$[3] = this.cursor_scanline_end; + $state$jscomp$19$$[4] = this.max_cols; + $state$jscomp$19$$[5] = this.max_rows; + $state$jscomp$19$$[6] = this.vga_memory; + $state$jscomp$19$$[7] = this.dac_state; + $state$jscomp$19$$[8] = this.start_address; + $state$jscomp$19$$[9] = this.graphical_mode; + $state$jscomp$19$$[10] = this.vga256_palette; + $state$jscomp$19$$[11] = this.latch_dword; + $state$jscomp$19$$[12] = this.color_compare; + $state$jscomp$19$$[13] = this.color_dont_care; + $state$jscomp$19$$[14] = this.miscellaneous_graphics_register; + $state$jscomp$19$$[15] = this.svga_width; + $state$jscomp$19$$[16] = this.svga_height; + $state$jscomp$19$$[17] = this.crtc_mode; + $state$jscomp$19$$[18] = this.svga_enabled; + $state$jscomp$19$$[19] = this.svga_bpp; + $state$jscomp$19$$[20] = this.svga_bank_offset; + $state$jscomp$19$$[21] = this.svga_offset; + $state$jscomp$19$$[22] = this.index_crtc; + $state$jscomp$19$$[23] = this.dac_color_index_write; + $state$jscomp$19$$[24] = this.dac_color_index_read; + $state$jscomp$19$$[25] = this.dac_map; + $state$jscomp$19$$[26] = this.sequencer_index; + $state$jscomp$19$$[27] = this.plane_write_bm; + $state$jscomp$19$$[28] = this.sequencer_memory_mode; + $state$jscomp$19$$[29] = this.graphics_index; + $state$jscomp$19$$[30] = this.plane_read; + $state$jscomp$19$$[31] = this.planar_mode; + $state$jscomp$19$$[32] = this.planar_rotate_reg; + $state$jscomp$19$$[33] = this.planar_bitmap; + $state$jscomp$19$$[34] = this.max_scan_line; + $state$jscomp$19$$[35] = this.miscellaneous_output_register; + $state$jscomp$19$$[36] = this.port_3DA_value; + $state$jscomp$19$$[37] = this.dispi_index; + $state$jscomp$19$$[38] = this.dispi_enable_value; + $state$jscomp$19$$[39] = this.svga_memory; + $state$jscomp$19$$[41] = this.attribute_controller_index; + $state$jscomp$19$$[42] = this.offset_register; + $state$jscomp$19$$[43] = this.planar_setreset; + $state$jscomp$19$$[44] = this.planar_setreset_enable; + $state$jscomp$19$$[45] = this.start_address_latched; + $state$jscomp$19$$[46] = this.crtc; + $state$jscomp$19$$[47] = this.horizontal_display_enable_end; + $state$jscomp$19$$[48] = this.horizontal_blank_start; + $state$jscomp$19$$[49] = this.vertical_display_enable_end; + $state$jscomp$19$$[50] = this.vertical_blank_start; + $state$jscomp$19$$[51] = this.underline_location_register; + $state$jscomp$19$$[52] = this.preset_row_scan; + $state$jscomp$19$$[53] = this.offset_register; + $state$jscomp$19$$[54] = this.palette_source; + $state$jscomp$19$$[55] = this.attribute_mode; + $state$jscomp$19$$[56] = this.color_plane_enable; + $state$jscomp$19$$[57] = this.horizontal_panning; + $state$jscomp$19$$[58] = this.color_select; + $state$jscomp$19$$[59] = this.clocking_mode; + $state$jscomp$19$$[60] = this.line_compare; + $state$jscomp$19$$[61] = this.pixel_buffer; + $state$jscomp$19$$[62] = this.dac_mask; + $state$jscomp$19$$[63] = this.character_map_select; + $state$jscomp$19$$[64] = this.font_page_ab_enabled; + return $state$jscomp$19$$; +}; +$VGAScreen$$.prototype.set_state = function($state$jscomp$20$$) { + this.vga_memory_size = $state$jscomp$20$$[0]; + this.cursor_address = $state$jscomp$20$$[1]; + this.cursor_scanline_start = $state$jscomp$20$$[2]; + this.cursor_scanline_end = $state$jscomp$20$$[3]; + this.max_cols = $state$jscomp$20$$[4]; + this.max_rows = $state$jscomp$20$$[5]; + $state$jscomp$20$$[6] && this.vga_memory.set($state$jscomp$20$$[6]); + this.dac_state = $state$jscomp$20$$[7]; + this.start_address = $state$jscomp$20$$[8]; + this.graphical_mode = $state$jscomp$20$$[9]; + this.vga256_palette = $state$jscomp$20$$[10]; + this.latch_dword = $state$jscomp$20$$[11]; + this.color_compare = $state$jscomp$20$$[12]; + this.color_dont_care = $state$jscomp$20$$[13]; + this.miscellaneous_graphics_register = $state$jscomp$20$$[14]; + this.svga_width = $state$jscomp$20$$[15]; + this.svga_height = $state$jscomp$20$$[16]; + this.crtc_mode = $state$jscomp$20$$[17]; + this.svga_enabled = $state$jscomp$20$$[18]; + this.svga_bpp = $state$jscomp$20$$[19]; + this.svga_bank_offset = $state$jscomp$20$$[20]; + this.svga_offset = $state$jscomp$20$$[21]; + this.index_crtc = $state$jscomp$20$$[22]; + this.dac_color_index_write = $state$jscomp$20$$[23]; + this.dac_color_index_read = $state$jscomp$20$$[24]; + this.dac_map = $state$jscomp$20$$[25]; + this.sequencer_index = $state$jscomp$20$$[26]; + this.plane_write_bm = $state$jscomp$20$$[27]; + this.sequencer_memory_mode = $state$jscomp$20$$[28]; + this.graphics_index = $state$jscomp$20$$[29]; + this.plane_read = $state$jscomp$20$$[30]; + this.planar_mode = $state$jscomp$20$$[31]; + this.planar_rotate_reg = $state$jscomp$20$$[32]; + this.planar_bitmap = $state$jscomp$20$$[33]; + this.max_scan_line = $state$jscomp$20$$[34]; + this.miscellaneous_output_register = $state$jscomp$20$$[35]; + this.port_3DA_value = $state$jscomp$20$$[36]; + this.dispi_index = $state$jscomp$20$$[37]; + this.dispi_enable_value = $state$jscomp$20$$[38]; + this.svga_memory.set($state$jscomp$20$$[39]); + this.attribute_controller_index = $state$jscomp$20$$[41]; + this.offset_register = $state$jscomp$20$$[42]; + this.planar_setreset = $state$jscomp$20$$[43]; + this.planar_setreset_enable = $state$jscomp$20$$[44]; + this.start_address_latched = $state$jscomp$20$$[45]; + this.crtc.set($state$jscomp$20$$[46]); + this.horizontal_display_enable_end = $state$jscomp$20$$[47]; + this.horizontal_blank_start = $state$jscomp$20$$[48]; + this.vertical_display_enable_end = $state$jscomp$20$$[49]; + this.vertical_blank_start = $state$jscomp$20$$[50]; + this.underline_location_register = $state$jscomp$20$$[51]; + this.preset_row_scan = $state$jscomp$20$$[52]; + this.offset_register = $state$jscomp$20$$[53]; + this.palette_source = $state$jscomp$20$$[54]; + this.attribute_mode = $state$jscomp$20$$[55]; + this.color_plane_enable = $state$jscomp$20$$[56]; + this.horizontal_panning = $state$jscomp$20$$[57]; + this.color_select = $state$jscomp$20$$[58]; + this.clocking_mode = $state$jscomp$20$$[59]; + this.line_compare = $state$jscomp$20$$[60]; + $state$jscomp$20$$[61] && this.pixel_buffer.set($state$jscomp$20$$[61]); + this.dac_mask = void 0 === $state$jscomp$20$$[62] ? 255 : $state$jscomp$20$$[62]; + this.character_map_select = void 0 === $state$jscomp$20$$[63] ? 0 : $state$jscomp$20$$[63]; + this.font_page_ab_enabled = void 0 === $state$jscomp$20$$[64] ? 0 : $state$jscomp$20$$[64]; + this.screen.set_mode(this.graphical_mode); + this.graphical_mode ? (this.screen_height = this.screen_width = 0, this.svga_enabled ? (this.set_size_graphical(this.svga_width, this.svga_height, this.svga_width, this.svga_height, this.svga_bpp), this.update_layers()) : (this.update_vga_size(), this.update_layers(), this.complete_replot())) : (this.set_font_bitmap(!0), this.set_size_text(this.max_cols, this.max_rows), this.set_font_page(), this.update_cursor_scanline(), this.update_cursor()); + this.complete_redraw(); +}; +$VGAScreen$$.prototype.vga_memory_read = function($addr$jscomp$26$$) { + if (this.svga_enabled) { + return this.cpu.read8(($addr$jscomp$26$$ - 655360 | this.svga_bank_offset) + 3758096384 | 0); + } + var $memory_space_select_plane_reading$$ = this.miscellaneous_graphics_register >> 2 & 3; + $addr$jscomp$26$$ -= $VGA_HOST_MEMORY_SPACE_START$$[$memory_space_select_plane_reading$$]; + if (0 > $addr$jscomp$26$$ || $addr$jscomp$26$$ >= $VGA_HOST_MEMORY_SPACE_SIZE$$[$memory_space_select_plane_reading$$]) { + return $dbg_log$$("vga read outside memory space: addr:" + $h$$($addr$jscomp$26$$), 256), 0; + } + this.latch_dword = this.plane0[$addr$jscomp$26$$]; + this.latch_dword |= this.plane1[$addr$jscomp$26$$] << 8; + this.latch_dword |= this.plane2[$addr$jscomp$26$$] << 16; + this.latch_dword |= this.plane3[$addr$jscomp$26$$] << 24; + if (this.planar_mode & 8) { + return $memory_space_select_plane_reading$$ = 255, this.color_dont_care & 1 && ($memory_space_select_plane_reading$$ &= this.plane0[$addr$jscomp$26$$] ^ ~(this.color_compare & 1 ? 255 : 0)), this.color_dont_care & 2 && ($memory_space_select_plane_reading$$ &= this.plane1[$addr$jscomp$26$$] ^ ~(this.color_compare & 2 ? 255 : 0)), this.color_dont_care & 4 && ($memory_space_select_plane_reading$$ &= this.plane2[$addr$jscomp$26$$] ^ ~(this.color_compare & 4 ? 255 : 0)), this.color_dont_care & 8 && + ($memory_space_select_plane_reading$$ &= this.plane3[$addr$jscomp$26$$] ^ ~(this.color_compare & 8 ? 255 : 0)), $memory_space_select_plane_reading$$; + } + $memory_space_select_plane_reading$$ = this.plane_read; + this.graphical_mode ? this.sequencer_memory_mode & 8 ? ($memory_space_select_plane_reading$$ = $addr$jscomp$26$$ & 3, $addr$jscomp$26$$ &= -4) : this.planar_mode & 16 && ($memory_space_select_plane_reading$$ = $addr$jscomp$26$$ & 1, $addr$jscomp$26$$ &= -2) : $memory_space_select_plane_reading$$ &= 3; + return this.vga_memory[$memory_space_select_plane_reading$$ << 16 | $addr$jscomp$26$$]; +}; +$VGAScreen$$.prototype.vga_memory_write = function($addr$jscomp$27$$, $value$jscomp$126$$) { + if (this.svga_enabled) { + this.cpu.write8(($addr$jscomp$27$$ - 655360 | this.svga_bank_offset) + 3758096384 | 0, $value$jscomp$126$$); + } else { + var $memory_space_select$jscomp$1$$ = this.miscellaneous_graphics_register >> 2 & 3; + $addr$jscomp$27$$ -= $VGA_HOST_MEMORY_SPACE_START$$[$memory_space_select$jscomp$1$$]; + 0 > $addr$jscomp$27$$ || $addr$jscomp$27$$ >= $VGA_HOST_MEMORY_SPACE_SIZE$$[$memory_space_select$jscomp$1$$] ? $dbg_log$$("vga write outside memory space: addr:" + $h$$($addr$jscomp$27$$) + ", value:" + $h$$($value$jscomp$126$$), 256) : this.graphical_mode ? this.vga_memory_write_graphical($addr$jscomp$27$$, $value$jscomp$126$$) : this.plane_write_bm & 3 ? this.vga_memory_write_text_mode($addr$jscomp$27$$, $value$jscomp$126$$) : this.plane_write_bm & 4 && (this.plane2[$addr$jscomp$27$$] = $value$jscomp$126$$); + } +}; +$VGAScreen$$.prototype.vga_memory_write_graphical = function($addr$jscomp$28_pixel_addr$$, $plane_select_value$jscomp$127$$) { + var $write_mode$$ = this.planar_mode & 3, $bitmask$$ = this.apply_feed(this.planar_bitmap), $setreset_dword$$ = this.apply_expand(this.planar_setreset), $setreset_enable_dword$$ = this.apply_expand(this.planar_setreset_enable); + switch($write_mode$$) { + case 0: + $plane_select_value$jscomp$127$$ = this.apply_rotate($plane_select_value$jscomp$127$$); + var $plane_dword$$ = this.apply_feed($plane_select_value$jscomp$127$$); + $plane_dword$$ = this.apply_setreset($plane_dword$$, $setreset_enable_dword$$); + $plane_dword$$ = this.apply_logical($plane_dword$$, this.latch_dword); + $plane_dword$$ = this.apply_bitmask($plane_dword$$, $bitmask$$); + break; + case 1: + $plane_dword$$ = this.latch_dword; + break; + case 2: + $plane_dword$$ = this.apply_expand($plane_select_value$jscomp$127$$); + $plane_dword$$ = this.apply_logical($plane_dword$$, this.latch_dword); + $plane_dword$$ = this.apply_bitmask($plane_dword$$, $bitmask$$); + break; + case 3: + $plane_select_value$jscomp$127$$ = this.apply_rotate($plane_select_value$jscomp$127$$), $bitmask$$ &= this.apply_feed($plane_select_value$jscomp$127$$), $plane_dword$$ = this.apply_bitmask($setreset_dword$$, $bitmask$$); + } + $plane_select_value$jscomp$127$$ = 15; + switch(this.sequencer_memory_mode & 12) { + case 0: + $plane_select_value$jscomp$127$$ = 5 << ($addr$jscomp$28_pixel_addr$$ & 1); + $addr$jscomp$28_pixel_addr$$ &= -2; + break; + case 8: + case 12: + $plane_select_value$jscomp$127$$ = 1 << ($addr$jscomp$28_pixel_addr$$ & 3), $addr$jscomp$28_pixel_addr$$ &= -4; + } + $plane_select_value$jscomp$127$$ &= this.plane_write_bm; + $plane_select_value$jscomp$127$$ & 1 && (this.plane0[$addr$jscomp$28_pixel_addr$$] = $plane_dword$$ >> 0 & 255); + $plane_select_value$jscomp$127$$ & 2 && (this.plane1[$addr$jscomp$28_pixel_addr$$] = $plane_dword$$ >> 8 & 255); + $plane_select_value$jscomp$127$$ & 4 && (this.plane2[$addr$jscomp$28_pixel_addr$$] = $plane_dword$$ >> 16 & 255); + $plane_select_value$jscomp$127$$ & 8 && (this.plane3[$addr$jscomp$28_pixel_addr$$] = $plane_dword$$ >> 24 & 255); + $addr$jscomp$28_pixel_addr$$ = this.vga_addr_to_pixel($addr$jscomp$28_pixel_addr$$); + this.partial_replot($addr$jscomp$28_pixel_addr$$, $addr$jscomp$28_pixel_addr$$ + 7); +}; +$VGAScreen$$.prototype.apply_feed = function($data_byte$jscomp$8$$) { + return $data_byte$jscomp$8$$ | $data_byte$jscomp$8$$ << 8 | $data_byte$jscomp$8$$ << 16 | $data_byte$jscomp$8$$ << 24; +}; +$VGAScreen$$.prototype.apply_expand = function($data_byte$jscomp$9$$) { + return ($data_byte$jscomp$9$$ & 1 ? 255 : 0) | ($data_byte$jscomp$9$$ & 2 ? 255 : 0) << 8 | ($data_byte$jscomp$9$$ & 4 ? 255 : 0) << 16 | ($data_byte$jscomp$9$$ & 8 ? 255 : 0) << 24; +}; +$VGAScreen$$.prototype.apply_rotate = function($data_byte$jscomp$10$$) { + return ($data_byte$jscomp$10$$ | $data_byte$jscomp$10$$ << 8) >>> (this.planar_rotate_reg & 7) & 255; +}; +$VGAScreen$$.prototype.apply_setreset = function($data_dword$$, $enable_dword$$) { + var $setreset_dword$jscomp$1$$ = this.apply_expand(this.planar_setreset); + return ($data_dword$$ | $enable_dword$$ & $setreset_dword$jscomp$1$$) & (~$enable_dword$$ | $setreset_dword$jscomp$1$$); +}; +$VGAScreen$$.prototype.apply_logical = function($data_dword$jscomp$1$$, $latch_dword$$) { + switch(this.planar_rotate_reg & 24) { + case 8: + return $data_dword$jscomp$1$$ & $latch_dword$$; + case 16: + return $data_dword$jscomp$1$$ | $latch_dword$$; + case 24: + return $data_dword$jscomp$1$$ ^ $latch_dword$$; + } + return $data_dword$jscomp$1$$; +}; +$VGAScreen$$.prototype.apply_bitmask = function($data_dword$jscomp$2$$, $bitmask_dword$$) { + return $bitmask_dword$$ & $data_dword$jscomp$2$$ | ~$bitmask_dword$$ & this.latch_dword; +}; +$VGAScreen$$.prototype.text_mode_redraw = function() { + const $split_screen_row$$ = this.scan_line_to_screen_row(this.line_compare), $row_offset$$ = Math.max(0, 2 * (2 * this.offset_register - this.max_cols)), $blink_enabled$$ = this.attribute_mode & 8, $fg_color_mask$$ = this.font_page_ab_enabled ? 7 : 15, $bg_color_mask$$ = $blink_enabled$$ ? 7 : 15, $FLAG_BLINKING$jscomp$1$$ = this.screen.FLAG_BLINKING, $FLAG_FONT_PAGE_B$jscomp$1$$ = this.screen.FLAG_FONT_PAGE_B; + let $addr$jscomp$29$$ = this.start_address << 1; + for (let $row$jscomp$3$$ = 0; $row$jscomp$3$$ < this.max_rows; $row$jscomp$3$$++) { + $row$jscomp$3$$ === $split_screen_row$$ && ($addr$jscomp$29$$ = 0); + for (let $col$jscomp$2$$ = 0; $col$jscomp$2$$ < this.max_cols; $col$jscomp$2$$++) { + const $chr$jscomp$3$$ = this.vga_memory[$addr$jscomp$29$$], $color$jscomp$2$$ = this.vga_memory[$addr$jscomp$29$$ | 1], $flags$jscomp$9$$ = ($blink_enabled$$ && $color$jscomp$2$$ & 128 ? $FLAG_BLINKING$jscomp$1$$ : 0) | (!this.font_page_ab_enabled || $color$jscomp$2$$ & 8 ? 0 : $FLAG_FONT_PAGE_B$jscomp$1$$); + this.bus.send("screen-put-char", [$row$jscomp$3$$, $col$jscomp$2$$, $chr$jscomp$3$$]); + this.screen.put_char($row$jscomp$3$$, $col$jscomp$2$$, $chr$jscomp$3$$, $flags$jscomp$9$$, this.vga256_palette[this.dac_mask & this.dac_map[$color$jscomp$2$$ >> 4 & $bg_color_mask$$]], this.vga256_palette[this.dac_mask & this.dac_map[$color$jscomp$2$$ & $fg_color_mask$$]]); + $addr$jscomp$29$$ += 2; + } + $addr$jscomp$29$$ += $row_offset$$; + } +}; +$VGAScreen$$.prototype.vga_memory_write_text_mode = function($addr$jscomp$30_flags$jscomp$10$$, $chr$jscomp$4_value$jscomp$128$$) { + this.vga_memory[$addr$jscomp$30_flags$jscomp$10$$] = $chr$jscomp$4_value$jscomp$128$$; + var $col$jscomp$3_max_cols$$ = Math.max(this.max_cols, 2 * this.offset_register); + let $row$jscomp$4$$; + if ($addr$jscomp$30_flags$jscomp$10$$ >> 1 >= this.start_address) { + var $color$jscomp$3_memory_start_memory_start$jscomp$1$$ = ($addr$jscomp$30_flags$jscomp$10$$ >> 1) - this.start_address; + $row$jscomp$4$$ = $color$jscomp$3_memory_start_memory_start$jscomp$1$$ / $col$jscomp$3_max_cols$$ | 0; + $col$jscomp$3_max_cols$$ = $color$jscomp$3_memory_start_memory_start$jscomp$1$$ % $col$jscomp$3_max_cols$$; + } else { + $color$jscomp$3_memory_start_memory_start$jscomp$1$$ = $addr$jscomp$30_flags$jscomp$10$$ >> 1, $row$jscomp$4$$ = ($color$jscomp$3_memory_start_memory_start$jscomp$1$$ / $col$jscomp$3_max_cols$$ | 0) + this.scan_line_to_screen_row(this.line_compare), $col$jscomp$3_max_cols$$ = $color$jscomp$3_memory_start_memory_start$jscomp$1$$ % $col$jscomp$3_max_cols$$; + } + $dbg_assert$$(0 <= $row$jscomp$4$$ && 0 <= $col$jscomp$3_max_cols$$); + if (!($col$jscomp$3_max_cols$$ >= this.max_cols || $row$jscomp$4$$ >= this.max_rows)) { + $addr$jscomp$30_flags$jscomp$10$$ & 1 ? ($color$jscomp$3_memory_start_memory_start$jscomp$1$$ = $chr$jscomp$4_value$jscomp$128$$, $chr$jscomp$4_value$jscomp$128$$ = this.vga_memory[$addr$jscomp$30_flags$jscomp$10$$ & -2]) : $color$jscomp$3_memory_start_memory_start$jscomp$1$$ = this.vga_memory[$addr$jscomp$30_flags$jscomp$10$$ | 1]; + var $bg_color_mask$jscomp$1_blink_enabled$jscomp$1$$ = this.attribute_mode & 8; + $addr$jscomp$30_flags$jscomp$10$$ = ($bg_color_mask$jscomp$1_blink_enabled$jscomp$1$$ && $color$jscomp$3_memory_start_memory_start$jscomp$1$$ & 128 ? this.screen.FLAG_BLINKING : 0) | (!this.font_page_ab_enabled || $color$jscomp$3_memory_start_memory_start$jscomp$1$$ & 8 ? 0 : this.screen.FLAG_FONT_PAGE_B); + var $fg_color_mask$jscomp$1$$ = this.font_page_ab_enabled ? 7 : 15; + $bg_color_mask$jscomp$1_blink_enabled$jscomp$1$$ = $bg_color_mask$jscomp$1_blink_enabled$jscomp$1$$ ? 7 : 15; + this.bus.send("screen-put-char", [$row$jscomp$4$$, $col$jscomp$3_max_cols$$, $chr$jscomp$4_value$jscomp$128$$]); + this.screen.put_char($row$jscomp$4$$, $col$jscomp$3_max_cols$$, $chr$jscomp$4_value$jscomp$128$$, $addr$jscomp$30_flags$jscomp$10$$, this.vga256_palette[this.dac_mask & this.dac_map[$color$jscomp$3_memory_start_memory_start$jscomp$1$$ >> 4 & $bg_color_mask$jscomp$1_blink_enabled$jscomp$1$$]], this.vga256_palette[this.dac_mask & this.dac_map[$color$jscomp$3_memory_start_memory_start$jscomp$1$$ & $fg_color_mask$jscomp$1$$]]); + } +}; +$VGAScreen$$.prototype.update_cursor = function() { + var $col$jscomp$4_max_cols$jscomp$1$$ = Math.max(this.max_cols, 2 * this.offset_register); + let $row$jscomp$5$$; + this.cursor_address >= this.start_address ? ($row$jscomp$5$$ = (this.cursor_address - this.start_address) / $col$jscomp$4_max_cols$jscomp$1$$ | 0, $col$jscomp$4_max_cols$jscomp$1$$ = (this.cursor_address - this.start_address) % $col$jscomp$4_max_cols$jscomp$1$$) : ($row$jscomp$5$$ = (this.cursor_address / $col$jscomp$4_max_cols$jscomp$1$$ | 0) + this.scan_line_to_screen_row(this.line_compare), $col$jscomp$4_max_cols$jscomp$1$$ = this.cursor_address % $col$jscomp$4_max_cols$jscomp$1$$); + $dbg_assert$$(0 <= $row$jscomp$5$$ && 0 <= $col$jscomp$4_max_cols$jscomp$1$$); + this.screen.update_cursor($row$jscomp$5$$, $col$jscomp$4_max_cols$jscomp$1$$); +}; +$VGAScreen$$.prototype.complete_redraw = function() { + $dbg_log$$("complete redraw", 256); + this.graphical_mode ? this.svga_enabled ? this.cpu.svga_mark_dirty() : (this.diff_addr_min = 0, this.diff_addr_max = 524288) : this.text_mode_redraw(); +}; +$VGAScreen$$.prototype.complete_replot = function() { + $dbg_log$$("complete replot", 256); + this.graphical_mode && !this.svga_enabled && (this.diff_plot_min = 0, this.diff_plot_max = 524288, this.complete_redraw()); +}; +$VGAScreen$$.prototype.partial_redraw = function($min$$, $max$$) { + $min$$ < this.diff_addr_min && (this.diff_addr_min = $min$$); + $max$$ > this.diff_addr_max && (this.diff_addr_max = $max$$); +}; +$VGAScreen$$.prototype.partial_replot = function($min$jscomp$1$$, $max$jscomp$1$$) { + $min$jscomp$1$$ < this.diff_plot_min && (this.diff_plot_min = $min$jscomp$1$$); + $max$jscomp$1$$ > this.diff_plot_max && (this.diff_plot_max = $max$jscomp$1$$); + this.partial_redraw($min$jscomp$1$$, $max$jscomp$1$$); +}; +$VGAScreen$$.prototype.reset_diffs = function() { + this.diff_addr_min = this.vga_memory_size; + this.diff_addr_max = 0; + this.diff_plot_min = this.vga_memory_size; + this.diff_plot_max = 0; +}; +$VGAScreen$$.prototype.destroy = function() { +}; +$VGAScreen$$.prototype.vga_bytes_per_line = function() { + var $bytes_per_line$$ = this.offset_register << 2; + this.underline_location_register & 64 ? $bytes_per_line$$ <<= 1 : this.crtc_mode & 64 && ($bytes_per_line$$ >>>= 1); + return $bytes_per_line$$; +}; +$VGAScreen$$.prototype.vga_addr_shift_count = function() { + var $shift_count$$ = 128 + (~this.underline_location_register & this.crtc_mode & 64); + $shift_count$$ -= this.underline_location_register & 64; + $shift_count$$ -= this.attribute_mode & 64; + return $shift_count$$ >>> 6; +}; +$VGAScreen$$.prototype.vga_addr_to_pixel = function($addr$jscomp$31$$) { + var $shift_count$jscomp$1$$ = this.vga_addr_shift_count(); + if (~this.crtc_mode & 3) { + var $col$jscomp$5_pixel_addr$jscomp$1$$ = $addr$jscomp$31$$ - this.start_address; + $col$jscomp$5_pixel_addr$jscomp$1$$ &= this.crtc_mode << 13 | -24577; + $col$jscomp$5_pixel_addr$jscomp$1$$ <<= $shift_count$jscomp$1$$; + var $row$jscomp$6$$ = $col$jscomp$5_pixel_addr$jscomp$1$$ / this.virtual_width | 0; + $col$jscomp$5_pixel_addr$jscomp$1$$ %= this.virtual_width; + switch(this.crtc_mode & 3) { + case 2: + $row$jscomp$6$$ = $row$jscomp$6$$ << 1 | $addr$jscomp$31$$ >> 13 & 1; + break; + case 1: + $row$jscomp$6$$ = $row$jscomp$6$$ << 1 | $addr$jscomp$31$$ >> 14 & 1; + break; + case 0: + $row$jscomp$6$$ = $row$jscomp$6$$ << 2 | $addr$jscomp$31$$ >> 13 & 3; + } + return $row$jscomp$6$$ * this.virtual_width + $col$jscomp$5_pixel_addr$jscomp$1$$ + (this.start_address << $shift_count$jscomp$1$$); + } + return $addr$jscomp$31$$ << $shift_count$jscomp$1$$; +}; +$VGAScreen$$.prototype.scan_line_to_screen_row = function($scan_line$$) { + this.max_scan_line & 128 && ($scan_line$$ >>>= 1); + $scan_line$$ = Math.ceil($scan_line$$ / (1 + (this.max_scan_line & 31))); + this.crtc_mode & 1 || ($scan_line$$ <<= 1); + this.crtc_mode & 2 || ($scan_line$$ <<= 1); + return $scan_line$$; +}; +$VGAScreen$$.prototype.set_size_text = function($cols_count$$, $rows_count$$) { + $dbg_assert$$(!this.graphical_mode); + this.max_cols = $cols_count$$; + this.max_rows = $rows_count$$; + this.screen.set_size_text($cols_count$$, $rows_count$$); + this.bus.send("screen-set-size", [$cols_count$$, $rows_count$$, 0]); +}; +$VGAScreen$$.prototype.set_size_graphical = function($width$jscomp$30$$, $height$jscomp$27$$, $virtual_width$$, $virtual_height$$, $bpp$$) { + $dbg_assert$$(this.graphical_mode); + $virtual_width$$ = Math.max($virtual_width$$, 1); + $virtual_height$$ = Math.max($virtual_height$$, 1); + if (this.screen_width !== $width$jscomp$30$$ || this.screen_height !== $height$jscomp$27$$ || this.virtual_width !== $virtual_width$$ || this.virtual_height !== $virtual_height$$) { + this.screen_width = $width$jscomp$30$$; + this.screen_height = $height$jscomp$27$$; + this.virtual_width = $virtual_width$$; + this.virtual_height = $virtual_height$$; + if ("undefined" !== typeof ImageData) { + const $size$jscomp$32$$ = $virtual_width$$ * $virtual_height$$, $offset$jscomp$42$$ = this.cpu.svga_allocate_dest_buffer($size$jscomp$32$$) >>> 0; + this.dest_buffet_offset = $offset$jscomp$42$$; + this.image_data = new ImageData(new Uint8ClampedArray(this.cpu.wasm_memory.buffer, $offset$jscomp$42$$, 4 * $size$jscomp$32$$), $virtual_width$$, $virtual_height$$); + this.cpu.svga_mark_dirty(); + } + this.screen.set_size_graphical($width$jscomp$30$$, $height$jscomp$27$$, $virtual_width$$, $virtual_height$$); + this.bus.send("screen-set-size", [$width$jscomp$30$$, $height$jscomp$27$$, $bpp$$]); + } +}; +$VGAScreen$$.prototype.update_vga_size = function() { + if (!this.svga_enabled) { + var $horizontal_characters_screen_width$$ = Math.min(1 + this.horizontal_display_enable_end, this.horizontal_blank_start), $screen_height_vertical_scans$$ = Math.min(1 + this.vertical_display_enable_end, this.vertical_blank_start); + if ($horizontal_characters_screen_width$$ && $screen_height_vertical_scans$$) { + if (this.graphical_mode) { + $horizontal_characters_screen_width$$ <<= 3; + var $height$jscomp$28_virtual_width$jscomp$1$$ = this.offset_register << 4; + this.attribute_mode & 64 && ($horizontal_characters_screen_width$$ >>>= 1, $height$jscomp$28_virtual_width$jscomp$1$$ >>>= 1); + $screen_height_vertical_scans$$ = this.scan_line_to_screen_row($screen_height_vertical_scans$$); + var $available_bytes$$ = $VGA_HOST_MEMORY_SPACE_SIZE$$[0]; + const $bytes_per_line$jscomp$1$$ = this.vga_bytes_per_line(); + this.set_size_graphical($horizontal_characters_screen_width$$, $screen_height_vertical_scans$$, $height$jscomp$28_virtual_width$jscomp$1$$, $bytes_per_line$jscomp$1$$ ? Math.ceil($available_bytes$$ / $bytes_per_line$jscomp$1$$) : $screen_height_vertical_scans$$, 8); + this.update_vertical_retrace(); + this.update_layers(); + } else { + this.max_scan_line & 128 && ($screen_height_vertical_scans$$ >>>= 1), $height$jscomp$28_virtual_width$jscomp$1$$ = $screen_height_vertical_scans$$ / (1 + (this.max_scan_line & 31)) | 0, $horizontal_characters_screen_width$$ && $height$jscomp$28_virtual_width$jscomp$1$$ && this.set_size_text($horizontal_characters_screen_width$$, $height$jscomp$28_virtual_width$jscomp$1$$); + } + } + } +}; +$VGAScreen$$.prototype.update_layers = function() { + this.graphical_mode || this.text_mode_redraw(); + if (this.svga_enabled) { + this.layers = []; + } else { + if (this.virtual_width && this.screen_width) { + if (!this.palette_source || this.clocking_mode & 32) { + this.layers = [], this.screen.clear_screen(); + } else { + var $start_addr_start_buffer_row_start_split_col$$ = this.start_address_latched, $pixel_panning$$ = this.horizontal_panning; + this.attribute_mode & 64 && ($pixel_panning$$ >>>= 1); + var $byte_panning$$ = this.preset_row_scan >> 5 & 3, $pixel_addr_start_split_screen_row$jscomp$1$$ = this.vga_addr_to_pixel($start_addr_start_buffer_row_start_split_col$$ + $byte_panning$$); + $start_addr_start_buffer_row_start_split_col$$ = $pixel_addr_start_split_screen_row$jscomp$1$$ / this.virtual_width | 0; + var $start_buffer_col_x$jscomp$98$$ = $pixel_addr_start_split_screen_row$jscomp$1$$ % this.virtual_width + $pixel_panning$$; + $pixel_addr_start_split_screen_row$jscomp$1$$ = this.scan_line_to_screen_row(1 + this.line_compare); + $pixel_addr_start_split_screen_row$jscomp$1$$ = Math.min($pixel_addr_start_split_screen_row$jscomp$1$$, this.screen_height); + var $split_buffer_height$$ = this.screen_height - $pixel_addr_start_split_screen_row$jscomp$1$$; + this.layers = []; + $start_buffer_col_x$jscomp$98$$ = -$start_buffer_col_x$jscomp$98$$; + for (var $y$jscomp$76$$ = 0; $start_buffer_col_x$jscomp$98$$ < this.screen_width; $start_buffer_col_x$jscomp$98$$ += this.virtual_width, $y$jscomp$76$$++) { + this.layers.push({image_data:this.image_data, screen_x:$start_buffer_col_x$jscomp$98$$, screen_y:0, buffer_x:0, buffer_y:$start_addr_start_buffer_row_start_split_col$$ + $y$jscomp$76$$, buffer_width:this.virtual_width, buffer_height:$pixel_addr_start_split_screen_row$jscomp$1$$, }); + } + $start_addr_start_buffer_row_start_split_col$$ = 0; + this.attribute_mode & 32 || ($start_addr_start_buffer_row_start_split_col$$ = this.vga_addr_to_pixel($byte_panning$$) + $pixel_panning$$); + $start_buffer_col_x$jscomp$98$$ = -$start_addr_start_buffer_row_start_split_col$$; + for ($y$jscomp$76$$ = 0; $start_buffer_col_x$jscomp$98$$ < this.screen_width; $start_buffer_col_x$jscomp$98$$ += this.virtual_width, $y$jscomp$76$$++) { + this.layers.push({image_data:this.image_data, screen_x:$start_buffer_col_x$jscomp$98$$, screen_y:$pixel_addr_start_split_screen_row$jscomp$1$$, buffer_x:0, buffer_y:$y$jscomp$76$$, buffer_width:this.virtual_width, buffer_height:$split_buffer_height$$, }); + } + } + } + } +}; +$VGAScreen$$.prototype.update_vertical_retrace = function() { + this.port_3DA_value |= 8; + this.start_address_latched !== this.start_address && (this.start_address_latched = this.start_address, this.update_layers()); +}; +$VGAScreen$$.prototype.update_cursor_scanline = function() { + var $end$jscomp$16_max$jscomp$2$$ = this.max_scan_line & 31; + const $start$jscomp$32$$ = Math.min($end$jscomp$16_max$jscomp$2$$, this.cursor_scanline_start & 31); + $end$jscomp$16_max$jscomp$2$$ = Math.min($end$jscomp$16_max$jscomp$2$$, this.cursor_scanline_end & 31); + this.screen.update_cursor_scanline($start$jscomp$32$$, $end$jscomp$16_max$jscomp$2$$, !(this.cursor_scanline_start & 32) && $start$jscomp$32$$ < $end$jscomp$16_max$jscomp$2$$); +}; +$VGAScreen$$.prototype.port3C0_write = function($value$jscomp$129$$) { + if (-1 === this.attribute_controller_index) { + $dbg_log$$("attribute controller index register: " + $h$$($value$jscomp$129$$), 256), this.attribute_controller_index = $value$jscomp$129$$ & 31, $dbg_log$$("attribute actual index: " + $h$$(this.attribute_controller_index), 256), this.palette_source !== ($value$jscomp$129$$ & 32) && (this.palette_source = $value$jscomp$129$$ & 32, this.update_layers()); + } else { + if (16 > this.attribute_controller_index) { + $dbg_log$$("internal palette: " + $h$$(this.attribute_controller_index) + " -> " + $h$$($value$jscomp$129$$), 256), this.dac_map[this.attribute_controller_index] = $value$jscomp$129$$, this.attribute_mode & 64 || this.complete_redraw(); + } else { + switch(this.attribute_controller_index) { + case 16: + $dbg_log$$("3C0 / attribute mode control: " + $h$$($value$jscomp$129$$), 256); + if (this.attribute_mode !== $value$jscomp$129$$) { + var $previous_mode$$ = this.attribute_mode; + this.attribute_mode = $value$jscomp$129$$; + const $is_graphical$$ = 0 !== ($value$jscomp$129$$ & 1); + this.svga_enabled || this.graphical_mode === $is_graphical$$ || (this.graphical_mode = $is_graphical$$, this.screen.set_mode(this.graphical_mode)); + ($previous_mode$$ ^ $value$jscomp$129$$) & 64 && this.complete_replot(); + this.update_vga_size(); + this.complete_redraw(); + this.set_font_bitmap(!1); + } + break; + case 18: + $dbg_log$$("3C0 / color plane enable: " + $h$$($value$jscomp$129$$), 256); + this.color_plane_enable !== $value$jscomp$129$$ && (this.color_plane_enable = $value$jscomp$129$$, this.complete_redraw()); + break; + case 19: + $dbg_log$$("3C0 / horizontal panning: " + $h$$($value$jscomp$129$$), 256); + this.horizontal_panning !== $value$jscomp$129$$ && (this.horizontal_panning = $value$jscomp$129$$ & 15, this.update_layers()); + break; + case 20: + $dbg_log$$("3C0 / color select: " + $h$$($value$jscomp$129$$), 256); + this.color_select !== $value$jscomp$129$$ && (this.color_select = $value$jscomp$129$$, this.complete_redraw()); + break; + default: + $dbg_log$$("3C0 / attribute controller write " + $h$$(this.attribute_controller_index) + ": " + $h$$($value$jscomp$129$$), 256); + } + } + this.attribute_controller_index = -1; + } +}; +$VGAScreen$$.prototype.port3C0_read = function() { + $dbg_log$$("3C0 read", 256); + return (this.attribute_controller_index | this.palette_source) & 255; +}; +$VGAScreen$$.prototype.port3C0_read16 = function() { + $dbg_log$$("3C0 read16", 256); + return this.port3C0_read() | this.port3C1_read() << 8 & 65280; +}; +$VGAScreen$$.prototype.port3C1_read = function() { + if (16 > this.attribute_controller_index) { + return $dbg_log$$("3C1 / internal palette read: " + $h$$(this.attribute_controller_index) + " -> " + $h$$(this.dac_map[this.attribute_controller_index]), 256), this.dac_map[this.attribute_controller_index] & 255; + } + switch(this.attribute_controller_index) { + case 16: + return $dbg_log$$("3C1 / attribute mode read: " + $h$$(this.attribute_mode), 256), this.attribute_mode; + case 18: + return $dbg_log$$("3C1 / color plane enable read: " + $h$$(this.color_plane_enable), 256), this.color_plane_enable; + case 19: + return $dbg_log$$("3C1 / horizontal panning read: " + $h$$(this.horizontal_panning), 256), this.horizontal_panning; + case 20: + return $dbg_log$$("3C1 / color select read: " + $h$$(this.color_select), 256), this.color_select; + default: + $dbg_log$$("3C1 / attribute controller read " + $h$$(this.attribute_controller_index), 256); + } + return 255; +}; +$VGAScreen$$.prototype.port3C2_write = function($value$jscomp$130$$) { + $dbg_log$$("3C2 / miscellaneous output register = " + $h$$($value$jscomp$130$$), 256); + this.miscellaneous_output_register = $value$jscomp$130$$; +}; +$VGAScreen$$.prototype.port3C4_write = function($value$jscomp$131$$) { + this.sequencer_index = $value$jscomp$131$$; +}; +$VGAScreen$$.prototype.port3C4_read = function() { + return this.sequencer_index; +}; +$VGAScreen$$.prototype.port3C5_write = function($value$jscomp$132$$) { + switch(this.sequencer_index) { + case 1: + $dbg_log$$("clocking mode: " + $h$$($value$jscomp$132$$), 256); + var $previous_character_map_select_previous_clocking_mode_previous_plane_write_bm$$ = this.clocking_mode; + this.clocking_mode = $value$jscomp$132$$; + ($previous_character_map_select_previous_clocking_mode_previous_plane_write_bm$$ ^ $value$jscomp$132$$) & 32 && this.update_layers(); + this.set_font_bitmap(!1); + break; + case 2: + $dbg_log$$("plane write mask: " + $h$$($value$jscomp$132$$), 256); + $previous_character_map_select_previous_clocking_mode_previous_plane_write_bm$$ = this.plane_write_bm; + this.plane_write_bm = $value$jscomp$132$$; + this.graphical_mode || !($previous_character_map_select_previous_clocking_mode_previous_plane_write_bm$$ & 4) || this.plane_write_bm & 4 || this.set_font_bitmap(!0); + break; + case 3: + $dbg_log$$("character map select: " + $h$$($value$jscomp$132$$), 256); + $previous_character_map_select_previous_clocking_mode_previous_plane_write_bm$$ = this.character_map_select; + this.character_map_select = $value$jscomp$132$$; + this.graphical_mode || $previous_character_map_select_previous_clocking_mode_previous_plane_write_bm$$ === $value$jscomp$132$$ || this.set_font_page(); + break; + case 4: + $dbg_log$$("sequencer memory mode: " + $h$$($value$jscomp$132$$), 256); + this.sequencer_memory_mode = $value$jscomp$132$$; + break; + default: + $dbg_log$$("3C5 / sequencer write " + $h$$(this.sequencer_index) + ": " + $h$$($value$jscomp$132$$), 256); + } +}; +$VGAScreen$$.prototype.port3C5_read = function() { + $dbg_log$$("3C5 / sequencer read " + $h$$(this.sequencer_index), 256); + switch(this.sequencer_index) { + case 1: + return this.clocking_mode; + case 2: + return this.plane_write_bm; + case 3: + return this.character_map_select; + case 4: + return this.sequencer_memory_mode; + case 6: + return 18; + } + return 0; +}; +$VGAScreen$$.prototype.port3C6_write = function($data$jscomp$120$$) { + this.dac_mask !== $data$jscomp$120$$ && (this.dac_mask = $data$jscomp$120$$, this.complete_redraw()); +}; +$VGAScreen$$.prototype.port3C6_read = function() { + return this.dac_mask; +}; +$VGAScreen$$.prototype.port3C7_write = function($index$jscomp$80$$) { + $dbg_log$$("3C7 write: " + $h$$($index$jscomp$80$$), 256); + this.dac_color_index_read = 3 * $index$jscomp$80$$; + this.dac_state &= 0; +}; +$VGAScreen$$.prototype.port3C7_read = function() { + return this.dac_state; +}; +$VGAScreen$$.prototype.port3C8_write = function($index$jscomp$81$$) { + this.dac_color_index_write = 3 * $index$jscomp$81$$; + this.dac_state |= 3; +}; +$VGAScreen$$.prototype.port3C8_read = function() { + return this.dac_color_index_write / 3 & 255; +}; +$VGAScreen$$.prototype.port3C9_write = function($color_byte$$) { + var $index$jscomp$82$$ = this.dac_color_index_write / 3 | 0, $offset$jscomp$43$$ = this.dac_color_index_write % 3, $color$jscomp$4$$ = this.vga256_palette[$index$jscomp$82$$]; + if (0 === (this.dispi_enable_value & 32)) { + $color_byte$$ &= 63; + const $b$jscomp$3$$ = $color_byte$$ & 1; + $color_byte$$ = $color_byte$$ << 2 | $b$jscomp$3$$ << 1 | $b$jscomp$3$$; + } + 0 === $offset$jscomp$43$$ ? $color$jscomp$4$$ = $color$jscomp$4$$ & -16711681 | $color_byte$$ << 16 : 1 === $offset$jscomp$43$$ ? $color$jscomp$4$$ = $color$jscomp$4$$ & -65281 | $color_byte$$ << 8 : ($color$jscomp$4$$ = $color$jscomp$4$$ & -256 | $color_byte$$, $dbg_log$$("dac set color, index=" + $h$$($index$jscomp$82$$) + " value=" + $h$$($color$jscomp$4$$), 256)); + this.vga256_palette[$index$jscomp$82$$] !== $color$jscomp$4$$ && (this.vga256_palette[$index$jscomp$82$$] = $color$jscomp$4$$, this.complete_redraw()); + this.dac_color_index_write++; +}; +$VGAScreen$$.prototype.port3C9_read = function() { + $dbg_log$$("3C9 read", 256); + var $color8$$ = this.vga256_palette[this.dac_color_index_read / 3 | 0] >> 8 * (2 - this.dac_color_index_read % 3) & 255; + this.dac_color_index_read++; + return this.dispi_enable_value & 32 ? $color8$$ : $color8$$ >> 2; +}; +$VGAScreen$$.prototype.port3CC_read = function() { + $dbg_log$$("3CC read", 256); + return this.miscellaneous_output_register; +}; +$VGAScreen$$.prototype.port3CE_write = function($value$jscomp$133$$) { + this.graphics_index = $value$jscomp$133$$; +}; +$VGAScreen$$.prototype.port3CE_read = function() { + return this.graphics_index; +}; +$VGAScreen$$.prototype.port3CF_write = function($value$jscomp$134$$) { + switch(this.graphics_index) { + case 0: + this.planar_setreset = $value$jscomp$134$$; + $dbg_log$$("plane set/reset: " + $h$$($value$jscomp$134$$), 256); + break; + case 1: + this.planar_setreset_enable = $value$jscomp$134$$; + $dbg_log$$("plane set/reset enable: " + $h$$($value$jscomp$134$$), 256); + break; + case 2: + this.color_compare = $value$jscomp$134$$; + $dbg_log$$("color compare: " + $h$$($value$jscomp$134$$), 256); + break; + case 3: + this.planar_rotate_reg = $value$jscomp$134$$; + $dbg_log$$("plane rotate: " + $h$$($value$jscomp$134$$), 256); + break; + case 4: + this.plane_read = $value$jscomp$134$$; + $dbg_log$$("plane read: " + $h$$($value$jscomp$134$$), 256); + break; + case 5: + var $previous_planar_mode$$ = this.planar_mode; + this.planar_mode = $value$jscomp$134$$; + $dbg_log$$("planar mode: " + $h$$($value$jscomp$134$$), 256); + ($previous_planar_mode$$ ^ $value$jscomp$134$$) & 96 && this.complete_replot(); + break; + case 6: + $dbg_log$$("miscellaneous graphics register: " + $h$$($value$jscomp$134$$), 256); + this.miscellaneous_graphics_register !== $value$jscomp$134$$ && (this.miscellaneous_graphics_register = $value$jscomp$134$$, this.update_vga_size()); + break; + case 7: + this.color_dont_care = $value$jscomp$134$$; + $dbg_log$$("color don't care: " + $h$$($value$jscomp$134$$), 256); + break; + case 8: + this.planar_bitmap = $value$jscomp$134$$; + $dbg_log$$("planar bitmap: " + $h$$($value$jscomp$134$$), 256); + break; + default: + $dbg_log$$("3CF / graphics write " + $h$$(this.graphics_index) + ": " + $h$$($value$jscomp$134$$), 256); + } +}; +$VGAScreen$$.prototype.port3CF_read = function() { + $dbg_log$$("3CF / graphics read " + $h$$(this.graphics_index), 256); + switch(this.graphics_index) { + case 0: + return this.planar_setreset; + case 1: + return this.planar_setreset_enable; + case 2: + return this.color_compare; + case 3: + return this.planar_rotate_reg; + case 4: + return this.plane_read; + case 5: + return this.planar_mode; + case 6: + return this.miscellaneous_graphics_register; + case 7: + return this.color_dont_care; + case 8: + return this.planar_bitmap; + } + return 0; +}; +$VGAScreen$$.prototype.port3D4_write = function($register$$) { + $dbg_log$$("3D4 / crtc index: " + $register$$, 256); + this.index_crtc = $register$$; +}; +$VGAScreen$$.prototype.port3D4_write16 = function($register$jscomp$1$$) { + this.port3D4_write($register$jscomp$1$$ & 255); + this.port3D5_write($register$jscomp$1$$ >> 8 & 255); +}; +$VGAScreen$$.prototype.port3D4_read = function() { + $dbg_log$$("3D4 read / crtc index: " + this.index_crtc, 256); + return this.index_crtc; +}; +$VGAScreen$$.prototype.port3D5_write = function($value$jscomp$135$$) { + switch(this.index_crtc) { + case 1: + $dbg_log$$("3D5 / hdisp enable end write: " + $h$$($value$jscomp$135$$), 256); + this.horizontal_display_enable_end !== $value$jscomp$135$$ && (this.horizontal_display_enable_end = $value$jscomp$135$$, this.update_vga_size()); + break; + case 2: + this.horizontal_blank_start !== $value$jscomp$135$$ && (this.horizontal_blank_start = $value$jscomp$135$$, this.update_vga_size()); + break; + case 7: + $dbg_log$$("3D5 / overflow register write: " + $h$$($value$jscomp$135$$), 256); + var $previous_mode$jscomp$1_previous_underline_previous_vertical_blank_start_previous_vertical_display_enable_end$$ = this.vertical_display_enable_end; + this.vertical_display_enable_end &= 255; + this.vertical_display_enable_end = this.vertical_display_enable_end | $value$jscomp$135$$ << 3 & 512 | $value$jscomp$135$$ << 7 & 256; + $previous_mode$jscomp$1_previous_underline_previous_vertical_blank_start_previous_vertical_display_enable_end$$ !== this.vertical_display_enable_end && this.update_vga_size(); + this.line_compare = this.line_compare & 767 | $value$jscomp$135$$ << 4 & 256; + $previous_mode$jscomp$1_previous_underline_previous_vertical_blank_start_previous_vertical_display_enable_end$$ = this.vertical_blank_start; + this.vertical_blank_start = this.vertical_blank_start & 767 | $value$jscomp$135$$ << 5 & 256; + $previous_mode$jscomp$1_previous_underline_previous_vertical_blank_start_previous_vertical_display_enable_end$$ !== this.vertical_blank_start && this.update_vga_size(); + this.update_layers(); + break; + case 8: + $dbg_log$$("3D5 / preset row scan write: " + $h$$($value$jscomp$135$$), 256); + this.preset_row_scan = $value$jscomp$135$$; + this.update_layers(); + break; + case 9: + $dbg_log$$("3D5 / max scan line write: " + $h$$($value$jscomp$135$$), 256); + var $previous_max_scan_line$$ = this.max_scan_line; + this.max_scan_line = $value$jscomp$135$$; + this.line_compare = this.line_compare & 511 | $value$jscomp$135$$ << 3 & 512; + $previous_mode$jscomp$1_previous_underline_previous_vertical_blank_start_previous_vertical_display_enable_end$$ = this.vertical_blank_start; + this.vertical_blank_start = this.vertical_blank_start & 511 | $value$jscomp$135$$ << 4 & 512; + (($previous_max_scan_line$$ ^ this.max_scan_line) & 159 || $previous_mode$jscomp$1_previous_underline_previous_vertical_blank_start_previous_vertical_display_enable_end$$ !== this.vertical_blank_start) && this.update_vga_size(); + this.update_cursor_scanline(); + this.update_layers(); + this.set_font_bitmap(!1); + break; + case 10: + $dbg_log$$("3D5 / cursor scanline start write: " + $h$$($value$jscomp$135$$), 256); + this.cursor_scanline_start = $value$jscomp$135$$; + this.update_cursor_scanline(); + break; + case 11: + $dbg_log$$("3D5 / cursor scanline end write: " + $h$$($value$jscomp$135$$), 256); + this.cursor_scanline_end = $value$jscomp$135$$; + this.update_cursor_scanline(); + break; + case 12: + (this.start_address >> 8 & 255) !== $value$jscomp$135$$ && (this.start_address = this.start_address & 255 | $value$jscomp$135$$ << 8, this.update_layers(), ~this.crtc_mode & 3 && this.complete_replot()); + $dbg_log$$("3D5 / start addr hi write: " + $h$$($value$jscomp$135$$) + " -> " + $h$$(this.start_address, 4), 256); + break; + case 13: + (this.start_address & 255) !== $value$jscomp$135$$ && (this.start_address = this.start_address & 65280 | $value$jscomp$135$$, this.update_layers(), ~this.crtc_mode & 3 && this.complete_replot()); + $dbg_log$$("3D5 / start addr lo write: " + $h$$($value$jscomp$135$$) + " -> " + $h$$(this.start_address, 4), 256); + break; + case 14: + $dbg_log$$("3D5 / cursor address hi write: " + $h$$($value$jscomp$135$$), 256); + this.cursor_address = this.cursor_address & 255 | $value$jscomp$135$$ << 8; + this.update_cursor(); + break; + case 15: + $dbg_log$$("3D5 / cursor address lo write: " + $h$$($value$jscomp$135$$), 256); + this.cursor_address = this.cursor_address & 65280 | $value$jscomp$135$$; + this.update_cursor(); + break; + case 18: + $dbg_log$$("3D5 / vdisp enable end write: " + $h$$($value$jscomp$135$$), 256); + (this.vertical_display_enable_end & 255) !== $value$jscomp$135$$ && (this.vertical_display_enable_end = this.vertical_display_enable_end & 768 | $value$jscomp$135$$, this.update_vga_size()); + break; + case 19: + $dbg_log$$("3D5 / offset register write: " + $h$$($value$jscomp$135$$), 256); + this.offset_register !== $value$jscomp$135$$ && (this.offset_register = $value$jscomp$135$$, this.update_vga_size(), ~this.crtc_mode & 3 && this.complete_replot()); + break; + case 20: + $dbg_log$$("3D5 / underline location write: " + $h$$($value$jscomp$135$$), 256); + this.underline_location_register !== $value$jscomp$135$$ && ($previous_mode$jscomp$1_previous_underline_previous_vertical_blank_start_previous_vertical_display_enable_end$$ = this.underline_location_register, this.underline_location_register = $value$jscomp$135$$, this.update_vga_size(), ($previous_mode$jscomp$1_previous_underline_previous_vertical_blank_start_previous_vertical_display_enable_end$$ ^ $value$jscomp$135$$) & 64 && this.complete_replot()); + break; + case 21: + $dbg_log$$("3D5 / vertical blank start write: " + $h$$($value$jscomp$135$$), 256); + (this.vertical_blank_start & 255) !== $value$jscomp$135$$ && (this.vertical_blank_start = this.vertical_blank_start & 768 | $value$jscomp$135$$, this.update_vga_size()); + break; + case 23: + $dbg_log$$("3D5 / crtc mode write: " + $h$$($value$jscomp$135$$), 256); + this.crtc_mode !== $value$jscomp$135$$ && ($previous_mode$jscomp$1_previous_underline_previous_vertical_blank_start_previous_vertical_display_enable_end$$ = this.crtc_mode, this.crtc_mode = $value$jscomp$135$$, this.update_vga_size(), ($previous_mode$jscomp$1_previous_underline_previous_vertical_blank_start_previous_vertical_display_enable_end$$ ^ $value$jscomp$135$$) & 67 && this.complete_replot()); + break; + case 24: + $dbg_log$$("3D5 / line compare write: " + $h$$($value$jscomp$135$$), 256); + this.line_compare = this.line_compare & 768 | $value$jscomp$135$$; + this.update_layers(); + break; + default: + this.index_crtc < this.crtc.length && (this.crtc[this.index_crtc] = $value$jscomp$135$$), $dbg_log$$("3D5 / CRTC write " + $h$$(this.index_crtc) + ": " + $h$$($value$jscomp$135$$), 256); + } +}; +$VGAScreen$$.prototype.port3D5_write16 = function($register$jscomp$2$$) { + $dbg_log$$("16-bit write to 3D5: " + $h$$($register$jscomp$2$$, 4), 256); + this.port3D5_write($register$jscomp$2$$ & 255); +}; +$VGAScreen$$.prototype.port3D5_read = function() { + $dbg_log$$("3D5 read " + $h$$(this.index_crtc), 256); + switch(this.index_crtc) { + case 1: + return this.horizontal_display_enable_end; + case 2: + return this.horizontal_blank_start; + case 7: + return this.vertical_display_enable_end >> 7 & 2 | this.vertical_blank_start >> 5 & 8 | this.line_compare >> 4 & 16 | this.vertical_display_enable_end >> 3 & 64; + case 8: + return this.preset_row_scan; + case 9: + return this.max_scan_line; + case 10: + return this.cursor_scanline_start; + case 11: + return this.cursor_scanline_end; + case 12: + return this.start_address & 255; + case 13: + return this.start_address >> 8; + case 14: + return this.cursor_address >> 8; + case 15: + return this.cursor_address & 255; + case 18: + return this.vertical_display_enable_end & 255; + case 19: + return this.offset_register; + case 20: + return this.underline_location_register; + case 21: + return this.vertical_blank_start & 255; + case 23: + return this.crtc_mode; + case 24: + return this.line_compare & 255; + } + return this.index_crtc < this.crtc.length ? this.crtc[this.index_crtc] : 0; +}; +$VGAScreen$$.prototype.port3D5_read16 = function() { + $dbg_log$$("Warning: 16-bit read from 3D5", 256); + return this.port3D5_read(); +}; +$VGAScreen$$.prototype.port3DA_read = function() { + $dbg_log$$("3DA read - status 1 and clear attr index", 256); + var $value$jscomp$136$$ = this.port_3DA_value; + this.graphical_mode ? (this.port_3DA_value ^= 1, this.port_3DA_value &= 1) : (this.port_3DA_value & 1 && (this.port_3DA_value ^= 8), this.port_3DA_value ^= 1); + this.attribute_controller_index = -1; + return $value$jscomp$136$$; +}; +$VGAScreen$$.prototype.port1CE_write = function($value$jscomp$137$$) { + this.dispi_index = $value$jscomp$137$$; +}; +$VGAScreen$$.prototype.port1CF_write = function($value$jscomp$138$$) { + $dbg_log$$("1CF / dispi write " + $h$$(this.dispi_index) + ": " + $h$$($value$jscomp$138$$), 256); + const $was_enabled$$ = this.svga_enabled; + switch(this.dispi_index) { + case 0: + 45248 <= $value$jscomp$138$$ && 45253 >= $value$jscomp$138$$ ? this.svga_version = $value$jscomp$138$$ : $dbg_log$$("Invalid version value: " + $h$$($value$jscomp$138$$), 256); + break; + case 1: + this.svga_width = $value$jscomp$138$$; + 2560 < this.svga_width && ($dbg_log$$("svga_width reduced from " + this.svga_width + " to 2560", 256), this.svga_width = 2560); + break; + case 2: + this.svga_height = $value$jscomp$138$$; + 1600 < this.svga_height && ($dbg_log$$("svga_height reduced from " + this.svga_height + " to 1600", 256), this.svga_height = 1600); + break; + case 3: + this.svga_bpp = $value$jscomp$138$$; + break; + case 4: + (this.svga_enabled = 1 === ($value$jscomp$138$$ & 1)) && 0 === ($value$jscomp$138$$ & 128) && this.svga_memory.fill(0); + this.dispi_enable_value = $value$jscomp$138$$; + break; + case 5: + $dbg_log$$("SVGA bank offset: " + $h$$($value$jscomp$138$$ << 16), 256); + this.svga_bank_offset = $value$jscomp$138$$ << 16; + break; + case 8: + $dbg_log$$("SVGA X offset: " + $h$$($value$jscomp$138$$), 256); + this.svga_offset_x !== $value$jscomp$138$$ && (this.svga_offset_x = $value$jscomp$138$$, this.svga_offset = this.svga_offset_y * this.svga_width + this.svga_offset_x, this.complete_redraw()); + break; + case 9: + $dbg_log$$("SVGA Y offset: " + $h$$($value$jscomp$138$$ * this.svga_width) + " y=" + $h$$($value$jscomp$138$$), 256); + this.svga_offset_y !== $value$jscomp$138$$ && (this.svga_offset_y = $value$jscomp$138$$, this.svga_offset = this.svga_offset_y * this.svga_width + this.svga_offset_x, this.complete_redraw()); + break; + default: + $dbg_log$$("Unimplemented dispi write index: " + $h$$(this.dispi_index), 256); + } + !this.svga_enabled || this.svga_width && this.svga_height || ($dbg_log$$("SVGA: disabled because of invalid width/height: " + this.svga_width + "x" + this.svga_height, 256), this.svga_enabled = !1); + $dbg_assert$$(4 !== this.svga_bpp, "unimplemented svga bpp: 4"); + $dbg_assert$$(4 === this.svga_bpp || 8 === this.svga_bpp || 15 === this.svga_bpp || 16 === this.svga_bpp || 24 === this.svga_bpp || 32 === this.svga_bpp, "unexpected svga bpp: " + this.svga_bpp); + this.svga_enabled ? $dbg_log$$("SVGA: enabled, " + this.svga_width + "x" + this.svga_height + "x" + this.svga_bpp, 256) : $dbg_log$$("SVGA: disabled"); + this.svga_enabled && !$was_enabled$$ && (this.svga_offset_y = this.svga_offset_x = this.svga_offset = 0, this.graphical_mode = !0, this.screen.set_mode(this.graphical_mode), this.set_size_graphical(this.svga_width, this.svga_height, this.svga_width, this.svga_height, this.svga_bpp)); + this.svga_enabled || (this.svga_bank_offset = 0); + this.update_layers(); +}; +$VGAScreen$$.prototype.port1CF_read = function() { + $dbg_log$$("1CF / dispi read " + $h$$(this.dispi_index), 256); + return this.svga_register_read(this.dispi_index); +}; +$VGAScreen$$.prototype.svga_register_read = function($n$jscomp$7$$) { + switch($n$jscomp$7$$) { + case 0: + return this.svga_version; + case 1: + return this.dispi_enable_value & 2 ? 2560 : this.svga_width; + case 2: + return this.dispi_enable_value & 2 ? 1600 : this.svga_height; + case 3: + return this.dispi_enable_value & 2 ? 32 : this.svga_bpp; + case 4: + return this.dispi_enable_value; + case 5: + return this.svga_bank_offset >>> 16; + case 6: + return this.screen_width ? this.screen_width : 1; + case 8: + return this.svga_offset_x; + case 9: + return this.svga_offset_y; + case 10: + return this.vga_memory_size / 65536 | 0; + default: + $dbg_log$$("Unimplemented dispi read index: " + $h$$(this.dispi_index), 256); + } + return 255; +}; +$VGAScreen$$.prototype.vga_replot = function() { + for (var $pixel_addr$jscomp$2_start$jscomp$33$$ = this.diff_plot_min & -16, $end$jscomp$17$$ = Math.min(this.diff_plot_max | 15, 524287), $addr_shift$$ = this.vga_addr_shift_count(), $addr_substitution$$ = ~this.crtc_mode & 3, $shift_mode$$ = this.planar_mode & 96, $pel_width$$ = this.attribute_mode & 64; $pixel_addr$jscomp$2_start$jscomp$33$$ <= $end$jscomp$17$$;) { + var $addr$jscomp$32_shift_loads$$ = $pixel_addr$jscomp$2_start$jscomp$33$$ >>> $addr_shift$$; + if ($addr_substitution$$) { + var $byte0_j$jscomp$4_row$jscomp$7$$ = $pixel_addr$jscomp$2_start$jscomp$33$$ / this.virtual_width | 0, $byte1_col$jscomp$6$$ = $pixel_addr$jscomp$2_start$jscomp$33$$ - this.virtual_width * $byte0_j$jscomp$4_row$jscomp$7$$; + switch($addr_substitution$$) { + case 1: + $addr$jscomp$32_shift_loads$$ = ($byte0_j$jscomp$4_row$jscomp$7$$ & 1) << 13; + $byte0_j$jscomp$4_row$jscomp$7$$ >>>= 1; + break; + case 2: + $addr$jscomp$32_shift_loads$$ = ($byte0_j$jscomp$4_row$jscomp$7$$ & 1) << 14; + $byte0_j$jscomp$4_row$jscomp$7$$ >>>= 1; + break; + case 3: + $addr$jscomp$32_shift_loads$$ = ($byte0_j$jscomp$4_row$jscomp$7$$ & 3) << 13, $byte0_j$jscomp$4_row$jscomp$7$$ >>>= 2; + } + $addr$jscomp$32_shift_loads$$ |= ($byte0_j$jscomp$4_row$jscomp$7$$ * this.virtual_width + $byte1_col$jscomp$6$$ >>> $addr_shift$$) + this.start_address; + } + $byte0_j$jscomp$4_row$jscomp$7$$ = this.plane0[$addr$jscomp$32_shift_loads$$]; + $byte1_col$jscomp$6$$ = this.plane1[$addr$jscomp$32_shift_loads$$]; + var $byte2$$ = this.plane2[$addr$jscomp$32_shift_loads$$], $byte3$$ = this.plane3[$addr$jscomp$32_shift_loads$$]; + $addr$jscomp$32_shift_loads$$ = new Uint8Array(8); + switch($shift_mode$$) { + case 0: + $byte0_j$jscomp$4_row$jscomp$7$$ <<= 0; + $byte1_col$jscomp$6$$ <<= 1; + $byte2$$ <<= 2; + $byte3$$ <<= 3; + for (var $i$jscomp$32$$ = 7; 0 <= $i$jscomp$32$$; $i$jscomp$32$$--) { + $addr$jscomp$32_shift_loads$$[7 - $i$jscomp$32$$] = $byte0_j$jscomp$4_row$jscomp$7$$ >> $i$jscomp$32$$ & 1 | $byte1_col$jscomp$6$$ >> $i$jscomp$32$$ & 2 | $byte2$$ >> $i$jscomp$32$$ & 4 | $byte3$$ >> $i$jscomp$32$$ & 8; + } + break; + case 32: + $addr$jscomp$32_shift_loads$$[0] = $byte0_j$jscomp$4_row$jscomp$7$$ >> 6 & 3 | $byte2$$ >> 4 & 12; + $addr$jscomp$32_shift_loads$$[1] = $byte0_j$jscomp$4_row$jscomp$7$$ >> 4 & 3 | $byte2$$ >> 2 & 12; + $addr$jscomp$32_shift_loads$$[2] = $byte0_j$jscomp$4_row$jscomp$7$$ >> 2 & 3 | $byte2$$ >> 0 & 12; + $addr$jscomp$32_shift_loads$$[3] = $byte0_j$jscomp$4_row$jscomp$7$$ >> 0 & 3 | $byte2$$ << 2 & 12; + $addr$jscomp$32_shift_loads$$[4] = $byte1_col$jscomp$6$$ >> 6 & 3 | $byte3$$ >> 4 & 12; + $addr$jscomp$32_shift_loads$$[5] = $byte1_col$jscomp$6$$ >> 4 & 3 | $byte3$$ >> 2 & 12; + $addr$jscomp$32_shift_loads$$[6] = $byte1_col$jscomp$6$$ >> 2 & 3 | $byte3$$ >> 0 & 12; + $addr$jscomp$32_shift_loads$$[7] = $byte1_col$jscomp$6$$ >> 0 & 3 | $byte3$$ << 2 & 12; + break; + case 64: + case 96: + $addr$jscomp$32_shift_loads$$[0] = $byte0_j$jscomp$4_row$jscomp$7$$ >> 4 & 15, $addr$jscomp$32_shift_loads$$[1] = $byte0_j$jscomp$4_row$jscomp$7$$ >> 0 & 15, $addr$jscomp$32_shift_loads$$[2] = $byte1_col$jscomp$6$$ >> 4 & 15, $addr$jscomp$32_shift_loads$$[3] = $byte1_col$jscomp$6$$ >> 0 & 15, $addr$jscomp$32_shift_loads$$[4] = $byte2$$ >> 4 & 15, $addr$jscomp$32_shift_loads$$[5] = $byte2$$ >> 0 & 15, $addr$jscomp$32_shift_loads$$[6] = $byte3$$ >> 4 & 15, $addr$jscomp$32_shift_loads$$[7] = + $byte3$$ >> 0 & 15; + } + if ($pel_width$$) { + for ($byte0_j$jscomp$4_row$jscomp$7$$ = $i$jscomp$32$$ = 0; 4 > $i$jscomp$32$$; $i$jscomp$32$$++, $pixel_addr$jscomp$2_start$jscomp$33$$++, $byte0_j$jscomp$4_row$jscomp$7$$ += 2) { + this.pixel_buffer[$pixel_addr$jscomp$2_start$jscomp$33$$] = $addr$jscomp$32_shift_loads$$[$byte0_j$jscomp$4_row$jscomp$7$$] << 4 | $addr$jscomp$32_shift_loads$$[$byte0_j$jscomp$4_row$jscomp$7$$ + 1]; + } + } else { + for ($i$jscomp$32$$ = 0; 8 > $i$jscomp$32$$; $i$jscomp$32$$++, $pixel_addr$jscomp$2_start$jscomp$33$$++) { + this.pixel_buffer[$pixel_addr$jscomp$2_start$jscomp$33$$] = $addr$jscomp$32_shift_loads$$[$i$jscomp$32$$]; + } + } + } +}; +$VGAScreen$$.prototype.vga_redraw = function() { + var $pixel_addr$jscomp$3_start$jscomp$34$$ = this.diff_addr_min, $end$jscomp$18$$ = Math.min(this.diff_addr_max, 524287); + const $buffer$jscomp$30$$ = new Int32Array(this.cpu.wasm_memory.buffer, this.dest_buffet_offset, this.virtual_width * this.virtual_height); + var $mask$jscomp$7$$ = 255, $colorset$$ = 0; + this.attribute_mode & 128 && ($mask$jscomp$7$$ &= 207, $colorset$$ |= this.color_select << 4 & 48); + if (this.attribute_mode & 64) { + for (; $pixel_addr$jscomp$3_start$jscomp$34$$ <= $end$jscomp$18$$; $pixel_addr$jscomp$3_start$jscomp$34$$++) { + var $color$jscomp$6_color256$$ = this.pixel_buffer[$pixel_addr$jscomp$3_start$jscomp$34$$] & $mask$jscomp$7$$ | $colorset$$; + $color$jscomp$6_color256$$ = this.vga256_palette[$color$jscomp$6_color256$$]; + $buffer$jscomp$30$$[$pixel_addr$jscomp$3_start$jscomp$34$$] = $color$jscomp$6_color256$$ & 65280 | $color$jscomp$6_color256$$ << 16 | $color$jscomp$6_color256$$ >> 16 | 4278190080; + } + } else { + for ($mask$jscomp$7$$ &= 63, $colorset$$ |= this.color_select << 4 & 192; $pixel_addr$jscomp$3_start$jscomp$34$$ <= $end$jscomp$18$$; $pixel_addr$jscomp$3_start$jscomp$34$$++) { + $color$jscomp$6_color256$$ = this.dac_map[this.pixel_buffer[$pixel_addr$jscomp$3_start$jscomp$34$$] & this.color_plane_enable] & $mask$jscomp$7$$ | $colorset$$, $color$jscomp$6_color256$$ = this.vga256_palette[$color$jscomp$6_color256$$], $buffer$jscomp$30$$[$pixel_addr$jscomp$3_start$jscomp$34$$] = $color$jscomp$6_color256$$ & 65280 | $color$jscomp$6_color256$$ << 16 | $color$jscomp$6_color256$$ >> 16 | 4278190080; + } + } +}; +$VGAScreen$$.prototype.screen_fill_buffer = function() { + if (this.graphical_mode) { + if (0 === this.image_data.data.byteLength) { + var $buffer$jscomp$31_min_y$$ = new Uint8ClampedArray(this.cpu.wasm_memory.buffer, this.dest_buffet_offset, 4 * this.virtual_width * this.virtual_height); + this.image_data = new ImageData($buffer$jscomp$31_min_y$$, this.virtual_width, this.virtual_height); + this.update_layers(); + } + if (this.svga_enabled) { + $buffer$jscomp$31_min_y$$ = 0; + let $max_y$$ = this.svga_height; + if (8 === this.svga_bpp) { + const $buffer$jscomp$32$$ = new Int32Array(this.cpu.wasm_memory.buffer, this.dest_buffet_offset, this.screen_width * this.screen_height), $svga_memory$$ = new Uint8Array(this.cpu.wasm_memory.buffer, this.svga_memory.byteOffset, this.vga_memory_size); + for (var $bytes_per_pixel_i$jscomp$33$$ = 0; $bytes_per_pixel_i$jscomp$33$$ < $buffer$jscomp$32$$.length; $bytes_per_pixel_i$jscomp$33$$++) { + var $color$jscomp$7$$ = this.vga256_palette[$svga_memory$$[$bytes_per_pixel_i$jscomp$33$$]]; + $buffer$jscomp$32$$[$bytes_per_pixel_i$jscomp$33$$] = $color$jscomp$7$$ & 65280 | $color$jscomp$7$$ << 16 | $color$jscomp$7$$ >> 16 | 4278190080; + } + } else { + this.cpu.svga_fill_pixel_buffer(this.svga_bpp, this.svga_offset), $bytes_per_pixel_i$jscomp$33$$ = 15 === this.svga_bpp ? 2 : this.svga_bpp / 8, $buffer$jscomp$31_min_y$$ = ((this.cpu.svga_dirty_bitmap_min_offset[0] / $bytes_per_pixel_i$jscomp$33$$ | 0) - this.svga_offset) / this.svga_width | 0, $max_y$$ = (((this.cpu.svga_dirty_bitmap_max_offset[0] / $bytes_per_pixel_i$jscomp$33$$ | 0) - this.svga_offset) / this.svga_width | 0) + 1; + } + $buffer$jscomp$31_min_y$$ < $max_y$$ && ($buffer$jscomp$31_min_y$$ = Math.max($buffer$jscomp$31_min_y$$, 0), $max_y$$ = Math.min($max_y$$, this.svga_height), this.screen.update_buffer([{image_data:this.image_data, screen_x:0, screen_y:$buffer$jscomp$31_min_y$$, buffer_x:0, buffer_y:$buffer$jscomp$31_min_y$$, buffer_width:this.svga_width, buffer_height:$max_y$$ - $buffer$jscomp$31_min_y$$, }])); + } else { + this.vga_replot(), this.vga_redraw(), this.screen.update_buffer(this.layers); + } + this.reset_diffs(); + } + this.update_vertical_retrace(); +}; +$VGAScreen$$.prototype.set_font_bitmap = function($font_plane_dirty$$) { + const $height$jscomp$29$$ = this.max_scan_line & 31; + if ($height$jscomp$29$$ && !this.graphical_mode) { + const $width_dbl$jscomp$1$$ = !!(this.clocking_mode & 8); + this.screen.set_font_bitmap($height$jscomp$29$$ + 1, !$width_dbl$jscomp$1$$ && !(this.clocking_mode & 1), $width_dbl$jscomp$1$$, !!(this.attribute_mode & 4), this.plane2, $font_plane_dirty$$); + } +}; +$VGAScreen$$.prototype.set_font_page = function() { + const $linear_index_map$$ = [0, 2, 4, 6, 1, 3, 5, 7], $vga_index_A$$ = (this.character_map_select & 12) >> 2 | (this.character_map_select & 32) >> 3, $vga_index_B$$ = this.character_map_select & 3 | (this.character_map_select & 16) >> 2; + this.font_page_ab_enabled = $vga_index_A$$ !== $vga_index_B$$; + this.screen.set_font_page($linear_index_map$$[$vga_index_A$$], $linear_index_map$$[$vga_index_B$$]); + this.complete_redraw(); +}; +function $PS2$$($cpu$jscomp$10$$, $bus$jscomp$6$$) { + this.cpu = $cpu$jscomp$10$$; + this.bus = $bus$jscomp$6$$; + this.use_mouse = this.enable_mouse_stream = !1; + this.have_mouse = !0; + this.mouse_clicks = this.mouse_delta_y = this.mouse_delta_x = 0; + this.have_keyboard = !0; + this.next_read_resolution = this.next_read_rate = this.next_handle_scan_code_set = this.next_read_led = this.next_read_sample = this.next_is_mouse_command = this.enable_keyboard_stream = !1; + this.kbd_buffer = new $ByteQueue$$(1024); + this.last_port60_byte = 0; + this.sample_rate = 100; + this.mouse_id = this.mouse_detect_state = 0; + this.mouse_reset_workaround = !1; + this.wheel_movement = 0; + this.resolution = 4; + this.scaling2 = !1; + this.last_mouse_packet = -1; + this.mouse_buffer = new $ByteQueue$$(1024); + this.next_byte_is_aux = this.next_byte_is_ready = !1; + this.bus.register("keyboard-code", function($code$jscomp$1$$) { + this.kbd_send_code($code$jscomp$1$$); + }, this); + this.bus.register("mouse-click", function($data$jscomp$121$$) { + this.mouse_send_click($data$jscomp$121$$[0], $data$jscomp$121$$[1], $data$jscomp$121$$[2]); + }, this); + this.bus.register("mouse-delta", function($data$jscomp$122$$) { + this.mouse_send_delta($data$jscomp$122$$[0], $data$jscomp$122$$[1]); + }, this); + this.bus.register("mouse-wheel", function($data$jscomp$123$$) { + this.wheel_movement -= $data$jscomp$123$$[0]; + this.wheel_movement -= 2 * $data$jscomp$123$$[1]; + this.wheel_movement = Math.min(7, Math.max(-8, this.wheel_movement)); + this.send_mouse_packet(0, 0); + }, this); + this.command_register = 5; + this.controller_output_port = 0; + this.read_controller_output_port = this.read_command_register = this.read_output_register = !1; + $cpu$jscomp$10$$.io.register_read(96, this, this.port60_read); + $cpu$jscomp$10$$.io.register_read(100, this, this.port64_read); + $cpu$jscomp$10$$.io.register_write(96, this, this.port60_write); + $cpu$jscomp$10$$.io.register_write(100, this, this.port64_write); +} +$PS2$$.prototype.get_state = function() { + var $state$jscomp$21$$ = []; + $state$jscomp$21$$[0] = this.enable_mouse_stream; + $state$jscomp$21$$[1] = this.use_mouse; + $state$jscomp$21$$[2] = this.have_mouse; + $state$jscomp$21$$[3] = this.mouse_delta_x; + $state$jscomp$21$$[4] = this.mouse_delta_y; + $state$jscomp$21$$[5] = this.mouse_clicks; + $state$jscomp$21$$[6] = this.have_keyboard; + $state$jscomp$21$$[7] = this.enable_keyboard_stream; + $state$jscomp$21$$[8] = this.next_is_mouse_command; + $state$jscomp$21$$[9] = this.next_read_sample; + $state$jscomp$21$$[10] = this.next_read_led; + $state$jscomp$21$$[11] = this.next_handle_scan_code_set; + $state$jscomp$21$$[12] = this.next_read_rate; + $state$jscomp$21$$[13] = this.next_read_resolution; + $state$jscomp$21$$[15] = this.last_port60_byte; + $state$jscomp$21$$[16] = this.sample_rate; + $state$jscomp$21$$[17] = this.resolution; + $state$jscomp$21$$[18] = this.scaling2; + $state$jscomp$21$$[20] = this.command_register; + $state$jscomp$21$$[21] = this.read_output_register; + $state$jscomp$21$$[22] = this.read_command_register; + $state$jscomp$21$$[23] = this.controller_output_port; + $state$jscomp$21$$[24] = this.read_controller_output_port; + $state$jscomp$21$$[25] = this.mouse_id; + $state$jscomp$21$$[26] = this.mouse_detect_state; + $state$jscomp$21$$[27] = this.mouse_reset_workaround; + return $state$jscomp$21$$; +}; +$PS2$$.prototype.set_state = function($state$jscomp$22$$) { + this.enable_mouse_stream = $state$jscomp$22$$[0]; + this.use_mouse = $state$jscomp$22$$[1]; + this.have_mouse = $state$jscomp$22$$[2]; + this.mouse_delta_x = $state$jscomp$22$$[3]; + this.mouse_delta_y = $state$jscomp$22$$[4]; + this.mouse_clicks = $state$jscomp$22$$[5]; + this.have_keyboard = $state$jscomp$22$$[6]; + this.enable_keyboard_stream = $state$jscomp$22$$[7]; + this.next_is_mouse_command = $state$jscomp$22$$[8]; + this.next_read_sample = $state$jscomp$22$$[9]; + this.next_read_led = $state$jscomp$22$$[10]; + this.next_handle_scan_code_set = $state$jscomp$22$$[11]; + this.next_read_rate = $state$jscomp$22$$[12]; + this.next_read_resolution = $state$jscomp$22$$[13]; + this.last_port60_byte = $state$jscomp$22$$[15]; + this.sample_rate = $state$jscomp$22$$[16]; + this.resolution = $state$jscomp$22$$[17]; + this.scaling2 = $state$jscomp$22$$[18]; + this.command_register = $state$jscomp$22$$[20]; + this.read_output_register = $state$jscomp$22$$[21]; + this.read_command_register = $state$jscomp$22$$[22]; + this.controller_output_port = $state$jscomp$22$$[23]; + this.read_controller_output_port = $state$jscomp$22$$[24]; + this.mouse_id = $state$jscomp$22$$[25] || 0; + this.mouse_detect_state = $state$jscomp$22$$[26] || 0; + this.mouse_reset_workaround = $state$jscomp$22$$[27] || !1; + this.next_byte_is_aux = this.next_byte_is_ready = !1; + this.kbd_buffer.clear(); + this.mouse_buffer.clear(); + this.bus.send("mouse-enable", this.use_mouse); +}; +$PS2$$.prototype.raise_irq = function() { + this.next_byte_is_ready || (this.kbd_buffer.length ? this.kbd_irq() : this.mouse_buffer.length && this.mouse_irq()); +}; +$PS2$$.prototype.mouse_irq = function() { + this.next_byte_is_aux = this.next_byte_is_ready = !0; + this.command_register & 2 && ($dbg_log$$("Mouse irq", 64), this.cpu.device_lower_irq(12), this.cpu.device_raise_irq(12)); +}; +$PS2$$.prototype.kbd_irq = function() { + this.next_byte_is_ready = !0; + this.next_byte_is_aux = !1; + this.command_register & 1 && ($dbg_log$$("Keyboard irq", 64), this.cpu.device_lower_irq(1), this.cpu.device_raise_irq(1)); +}; +$PS2$$.prototype.kbd_send_code = function($code$jscomp$2$$) { + this.enable_keyboard_stream && ($dbg_log$$("adding kbd code: " + $h$$($code$jscomp$2$$), 64), this.kbd_buffer.push($code$jscomp$2$$), this.raise_irq()); +}; +$PS2$$.prototype.mouse_send_delta = function($change_x_delta_x$$, $change_y_delta_y$$) { + if (this.have_mouse && this.use_mouse) { + var $factor$jscomp$1$$ = this.resolution * this.sample_rate / 80; + this.mouse_delta_x += $change_x_delta_x$$ * $factor$jscomp$1$$; + this.mouse_delta_y += $change_y_delta_y$$ * $factor$jscomp$1$$; + this.enable_mouse_stream && ($change_x_delta_x$$ = this.mouse_delta_x | 0, $change_y_delta_y$$ = this.mouse_delta_y | 0, $change_x_delta_x$$ || $change_y_delta_y$$) && (Date.now(), this.mouse_delta_x -= $change_x_delta_x$$, this.mouse_delta_y -= $change_y_delta_y$$, this.send_mouse_packet($change_x_delta_x$$, $change_y_delta_y$$)); + } +}; +$PS2$$.prototype.mouse_send_click = function($left$jscomp$2$$, $middle$$, $right$jscomp$2$$) { + this.have_mouse && this.use_mouse && (this.mouse_clicks = $left$jscomp$2$$ | $right$jscomp$2$$ << 1 | $middle$$ << 2, this.enable_mouse_stream && this.send_mouse_packet(0, 0)); +}; +$PS2$$.prototype.send_mouse_packet = function($dx$jscomp$4$$, $dy$jscomp$4$$) { + var $info_byte$$ = (0 > $dy$jscomp$4$$) << 5 | (0 > $dx$jscomp$4$$) << 4 | 8 | this.mouse_clicks; + this.last_mouse_packet = Date.now(); + this.mouse_buffer.push($info_byte$$); + this.mouse_buffer.push($dx$jscomp$4$$); + this.mouse_buffer.push($dy$jscomp$4$$); + 4 === this.mouse_id ? (this.mouse_buffer.push(0 | this.wheel_movement & 15), this.wheel_movement = 0) : 3 === this.mouse_id && (this.mouse_buffer.push(this.wheel_movement & 255), this.wheel_movement = 0); + this.raise_irq(); +}; +$PS2$$.prototype.apply_scaling2 = function($n$jscomp$8$$) { + var $sign$$ = $n$jscomp$8$$ >> 31; + switch(Math.abs($n$jscomp$8$$)) { + case 0: + case 1: + case 3: + return $n$jscomp$8$$; + case 2: + return $sign$$; + case 4: + return 6 * $sign$$; + case 5: + return 9 * $sign$$; + default: + return $n$jscomp$8$$ << 1; + } +}; +$PS2$$.prototype.port60_read = function() { + this.next_byte_is_ready = !1; + if (!this.kbd_buffer.length && !this.mouse_buffer.length) { + return $dbg_log$$("Port 60 read: Empty", 64), this.last_port60_byte; + } + this.next_byte_is_aux ? (this.cpu.device_lower_irq(12), this.last_port60_byte = this.mouse_buffer.shift(), $dbg_log$$("Port 60 read (mouse): " + $h$$(this.last_port60_byte), 64)) : (this.cpu.device_lower_irq(1), this.last_port60_byte = this.kbd_buffer.shift(), $dbg_log$$("Port 60 read (kbd) : " + $h$$(this.last_port60_byte), 64)); + (this.kbd_buffer.length || this.mouse_buffer.length) && this.raise_irq(); + return this.last_port60_byte; +}; +$PS2$$.prototype.port64_read = function() { + var $status_byte$$ = 16; + this.next_byte_is_ready && ($status_byte$$ |= 1); + this.next_byte_is_aux && ($status_byte$$ |= 32); + $dbg_log$$("port 64 read: " + $h$$($status_byte$$), 64); + return $status_byte$$; +}; +$PS2$$.prototype.port60_write = function($write_byte$$) { + $dbg_log$$("port 60 write: " + $h$$($write_byte$$), 64); + if (this.read_command_register) { + this.command_register = $write_byte$$, this.read_command_register = !1, $dbg_log$$("Keyboard command register = " + $h$$(this.command_register), 64); + } else { + if (this.read_output_register) { + this.read_output_register = !1, this.mouse_buffer.clear(), this.mouse_buffer.push($write_byte$$), this.mouse_irq(); + } else { + if (this.next_read_sample) { + this.next_read_sample = !1; + this.mouse_buffer.clear(); + this.mouse_buffer.push(250); + this.sample_rate = $write_byte$$; + switch(this.mouse_detect_state) { + case -1: + 60 === $write_byte$$ ? (this.mouse_reset_workaround = !0, this.mouse_detect_state = 0) : (this.mouse_reset_workaround = !1, this.mouse_detect_state = 200 === $write_byte$$ ? 1 : 0); + break; + case 0: + 200 === $write_byte$$ && (this.mouse_detect_state = 1); + break; + case 1: + this.mouse_detect_state = 100 === $write_byte$$ ? 2 : 200 === $write_byte$$ ? 3 : 0; + break; + case 2: + 80 === $write_byte$$ && (this.mouse_id = 3); + this.mouse_detect_state = -1; + break; + case 3: + 80 === $write_byte$$ && (this.mouse_id = 4), this.mouse_detect_state = -1; + } + $dbg_log$$("mouse sample rate: " + $h$$($write_byte$$) + ", mouse id: " + $h$$(this.mouse_id), 64); + this.sample_rate || ($dbg_log$$("invalid sample rate, reset to 100", 64), this.sample_rate = 100); + this.mouse_irq(); + } else { + if (this.next_read_resolution) { + this.next_read_resolution = !1, this.mouse_buffer.clear(), this.mouse_buffer.push(250), 3 < $write_byte$$ ? (this.resolution = 4, $dbg_log$$("invalid resolution, resetting to 4", 64)) : (this.resolution = 1 << $write_byte$$, $dbg_log$$("resolution: " + this.resolution, 64)), this.mouse_irq(); + } else { + if (this.next_read_led) { + this.next_read_led = !1, this.kbd_buffer.push(250), this.kbd_irq(); + } else { + if (this.next_handle_scan_code_set) { + this.next_handle_scan_code_set = !1, this.kbd_buffer.push(250), this.kbd_irq(), $write_byte$$ || this.kbd_buffer.push(1); + } else { + if (this.next_read_rate) { + this.next_read_rate = !1, this.kbd_buffer.push(250), this.kbd_irq(); + } else { + if (this.next_is_mouse_command) { + if (this.next_is_mouse_command = !1, $dbg_log$$("Port 60 data register write: " + $h$$($write_byte$$), 64), this.have_mouse) { + this.kbd_buffer.clear(); + this.mouse_buffer.clear(); + this.mouse_buffer.push(250); + switch($write_byte$$) { + case 230: + $dbg_log$$("Scaling 1:1", 64); + this.scaling2 = !1; + break; + case 231: + $dbg_log$$("Scaling 2:1", 64); + this.scaling2 = !0; + break; + case 232: + this.next_read_resolution = !0; + break; + case 233: + this.send_mouse_packet(0, 0); + break; + case 235: + $dbg_log$$("unimplemented request single packet", 64); + this.send_mouse_packet(0, 0); + break; + case 242: + $dbg_log$$("required id: " + $h$$(this.mouse_id), 64); + this.mouse_buffer.push(this.mouse_id); + this.mouse_clicks = this.mouse_delta_x = this.mouse_delta_y = 0; + this.raise_irq(); + break; + case 243: + this.next_read_sample = !0; + break; + case 244: + this.use_mouse = this.enable_mouse_stream = !0; + this.bus.send("mouse-enable", !0); + this.mouse_clicks = this.mouse_delta_x = this.mouse_delta_y = 0; + break; + case 245: + this.enable_mouse_stream = !1; + break; + case 246: + this.enable_mouse_stream = !1; + this.sample_rate = 100; + this.scaling2 = !1; + this.resolution = 4; + break; + case 255: + $dbg_log$$("Mouse reset", 64); + this.mouse_buffer.push(170); + this.mouse_buffer.push(0); + this.use_mouse = !0; + this.bus.send("mouse-enable", !0); + this.enable_mouse_stream = !1; + this.sample_rate = 100; + this.scaling2 = !1; + this.resolution = 4; + this.mouse_reset_workaround || (this.mouse_id = 0); + this.mouse_clicks = this.mouse_delta_x = this.mouse_delta_y = 0; + break; + default: + $dbg_log$$("Unimplemented mouse command: " + $h$$($write_byte$$), 64); + } + this.mouse_irq(); + } + } else { + if (this.read_controller_output_port) { + this.read_controller_output_port = !1, this.controller_output_port = $write_byte$$; + } else { + $dbg_log$$("Port 60 data register write: " + $h$$($write_byte$$), 64); + this.mouse_buffer.clear(); + this.kbd_buffer.clear(); + this.kbd_buffer.push(250); + switch($write_byte$$) { + case 237: + this.next_read_led = !0; + break; + case 240: + this.next_handle_scan_code_set = !0; + break; + case 242: + this.kbd_buffer.push(171); + this.kbd_buffer.push(131); + break; + case 243: + this.next_read_rate = !0; + break; + case 244: + $dbg_log$$("kbd enable scanning", 64); + this.enable_keyboard_stream = !0; + break; + case 245: + $dbg_log$$("kbd disable scanning", 64); + this.enable_keyboard_stream = !1; + break; + case 246: + break; + case 255: + this.kbd_buffer.clear(); + this.kbd_buffer.push(250); + this.kbd_buffer.push(170); + this.kbd_buffer.push(0); + break; + default: + $dbg_log$$("Unimplemented keyboard command: " + $h$$($write_byte$$), 64); + } + this.kbd_irq(); + } + } + } + } + } + } + } + } + } +}; +$PS2$$.prototype.port64_write = function($write_byte$jscomp$1$$) { + $dbg_log$$("port 64 write: " + $h$$($write_byte$jscomp$1$$), 64); + switch($write_byte$jscomp$1$$) { + case 32: + this.kbd_buffer.clear(); + this.mouse_buffer.clear(); + this.kbd_buffer.push(this.command_register); + this.kbd_irq(); + break; + case 96: + this.read_command_register = !0; + break; + case 209: + this.read_controller_output_port = !0; + break; + case 211: + this.read_output_register = !0; + break; + case 212: + this.next_is_mouse_command = !0; + break; + case 167: + $dbg_log$$("Disable second port", 64); + this.command_register |= 32; + break; + case 168: + $dbg_log$$("Enable second port", 64); + this.command_register &= -33; + break; + case 169: + this.kbd_buffer.clear(); + this.mouse_buffer.clear(); + this.kbd_buffer.push(0); + this.kbd_irq(); + break; + case 170: + this.kbd_buffer.clear(); + this.mouse_buffer.clear(); + this.kbd_buffer.push(85); + this.kbd_irq(); + break; + case 171: + this.kbd_buffer.clear(); + this.mouse_buffer.clear(); + this.kbd_buffer.push(0); + this.kbd_irq(); + break; + case 173: + $dbg_log$$("Disable Keyboard", 64); + this.command_register |= 16; + break; + case 174: + $dbg_log$$("Enable Keyboard", 64); + this.command_register &= -17; + break; + case 254: + $dbg_log$$("CPU reboot via PS2"); + this.cpu.reboot_internal(); + break; + default: + $dbg_log$$("port 64: Unimplemented command byte: " + $h$$($write_byte$jscomp$1$$), 64); + } +}; +function $RTC$$($cpu$jscomp$11$$) { + this.cpu = $cpu$jscomp$11$$; + this.cmos_index = 0; + this.cmos_data = new Uint8Array(128); + this.last_update = this.rtc_time = Date.now(); + this.next_interrupt_alarm = this.next_interrupt = 0; + this.periodic_interrupt = !1; + this.periodic_interrupt_time = .9765625; + this.cmos_a = 38; + this.cmos_b = 2; + this.nmi_disabled = this.cmos_c = 0; + $cpu$jscomp$11$$.io.register_write(112, this, function($out_byte$jscomp$4$$) { + this.cmos_index = $out_byte$jscomp$4$$ & 127; + this.nmi_disabled = $out_byte$jscomp$4$$ >> 7; + }); + $cpu$jscomp$11$$.io.register_write(113, this, this.cmos_port_write); + $cpu$jscomp$11$$.io.register_read(113, this, this.cmos_port_read); +} +$RTC$$.prototype.get_state = function() { + var $state$jscomp$23$$ = []; + $state$jscomp$23$$[0] = this.cmos_index; + $state$jscomp$23$$[1] = this.cmos_data; + $state$jscomp$23$$[2] = this.rtc_time; + $state$jscomp$23$$[3] = this.last_update; + $state$jscomp$23$$[4] = this.next_interrupt; + $state$jscomp$23$$[5] = this.next_interrupt_alarm; + $state$jscomp$23$$[6] = this.periodic_interrupt; + $state$jscomp$23$$[7] = this.periodic_interrupt_time; + $state$jscomp$23$$[8] = this.cmos_a; + $state$jscomp$23$$[9] = this.cmos_b; + $state$jscomp$23$$[10] = this.cmos_c; + $state$jscomp$23$$[11] = this.nmi_disabled; + return $state$jscomp$23$$; +}; +$RTC$$.prototype.set_state = function($state$jscomp$24$$) { + this.cmos_index = $state$jscomp$24$$[0]; + this.cmos_data = $state$jscomp$24$$[1]; + this.rtc_time = $state$jscomp$24$$[2]; + this.last_update = $state$jscomp$24$$[3]; + this.next_interrupt = $state$jscomp$24$$[4]; + this.next_interrupt_alarm = $state$jscomp$24$$[5]; + this.periodic_interrupt = $state$jscomp$24$$[6]; + this.periodic_interrupt_time = $state$jscomp$24$$[7]; + this.cmos_a = $state$jscomp$24$$[8]; + this.cmos_b = $state$jscomp$24$$[9]; + this.cmos_c = $state$jscomp$24$$[10]; + this.nmi_disabled = $state$jscomp$24$$[11]; +}; +$RTC$$.prototype.timer = function($time$jscomp$1$$) { + $time$jscomp$1$$ = Date.now(); + this.rtc_time += $time$jscomp$1$$ - this.last_update; + this.last_update = $time$jscomp$1$$; + this.periodic_interrupt && this.next_interrupt < $time$jscomp$1$$ ? (this.cpu.device_raise_irq(8), this.cmos_c |= 192, this.next_interrupt += this.periodic_interrupt_time * Math.ceil(($time$jscomp$1$$ - this.next_interrupt) / this.periodic_interrupt_time)) : this.next_interrupt_alarm && this.next_interrupt_alarm < $time$jscomp$1$$ && (this.cpu.device_raise_irq(8), this.cmos_c |= 160, this.next_interrupt_alarm = 0); + let $t$jscomp$8$$ = 100; + this.periodic_interrupt && this.next_interrupt && ($t$jscomp$8$$ = Math.min($t$jscomp$8$$, Math.max(0, this.next_interrupt - $time$jscomp$1$$))); + this.next_interrupt_alarm && ($t$jscomp$8$$ = Math.min($t$jscomp$8$$, Math.max(0, this.next_interrupt_alarm - $time$jscomp$1$$))); + return $t$jscomp$8$$; +}; +$RTC$$.prototype.bcd_pack = function($n$jscomp$9$$) { + for (var $i$jscomp$34$$ = 0, $result$jscomp$6$$ = 0, $digit$$; $n$jscomp$9$$;) { + $digit$$ = $n$jscomp$9$$ % 10, $result$jscomp$6$$ |= $digit$$ << 4 * $i$jscomp$34$$, $i$jscomp$34$$++, $n$jscomp$9$$ = ($n$jscomp$9$$ - $digit$$) / 10; + } + return $result$jscomp$6$$; +}; +$RTC$$.prototype.bcd_unpack = function($n$jscomp$10$$) { + const $low$$ = $n$jscomp$10$$ & 15, $high$$ = $n$jscomp$10$$ >> 4 & 15; + $dbg_assert$$(256 > $n$jscomp$10$$); + $dbg_assert$$(10 > $low$$); + $dbg_assert$$(10 > $high$$); + return $low$$ + 10 * $high$$; +}; +$RTC$$.prototype.encode_time = function($t$jscomp$9$$) { + return this.cmos_b & 4 ? $t$jscomp$9$$ : this.bcd_pack($t$jscomp$9$$); +}; +$RTC$$.prototype.decode_time = function($t$jscomp$10$$) { + return this.cmos_b & 4 ? $t$jscomp$10$$ : this.bcd_unpack($t$jscomp$10$$); +}; +$RTC$$.prototype.cmos_port_read = function() { + var $c$jscomp$2_index$jscomp$84$$ = this.cmos_index; + switch($c$jscomp$2_index$jscomp$84$$) { + case 0: + return $dbg_log$$("read second: " + $h$$(this.encode_time((new Date(this.rtc_time)).getUTCSeconds())), 65536), this.encode_time((new Date(this.rtc_time)).getUTCSeconds()); + case 2: + return $dbg_log$$("read minute: " + $h$$(this.encode_time((new Date(this.rtc_time)).getUTCMinutes())), 65536), this.encode_time((new Date(this.rtc_time)).getUTCMinutes()); + case 4: + return $dbg_log$$("read hour: " + $h$$(this.encode_time((new Date(this.rtc_time)).getUTCHours())), 65536), this.encode_time((new Date(this.rtc_time)).getUTCHours()); + case 6: + return $dbg_log$$("read day: " + $h$$(this.encode_time((new Date(this.rtc_time)).getUTCDay() + 1)), 65536), this.encode_time((new Date(this.rtc_time)).getUTCDay() + 1); + case 7: + return $dbg_log$$("read day of month: " + $h$$(this.encode_time((new Date(this.rtc_time)).getUTCDate())), 65536), this.encode_time((new Date(this.rtc_time)).getUTCDate()); + case 8: + return $dbg_log$$("read month: " + $h$$(this.encode_time((new Date(this.rtc_time)).getUTCMonth() + 1)), 65536), this.encode_time((new Date(this.rtc_time)).getUTCMonth() + 1); + case 9: + return $dbg_log$$("read year: " + $h$$(this.encode_time((new Date(this.rtc_time)).getUTCFullYear() % 100)), 65536), this.encode_time((new Date(this.rtc_time)).getUTCFullYear() % 100); + case 10: + return 999 <= $v86$$.microtick() % 1000 ? this.cmos_a | 128 : this.cmos_a; + case 11: + return this.cmos_b; + case 12: + return this.cpu.device_lower_irq(8), $dbg_log$$("cmos reg C read", 65536), $c$jscomp$2_index$jscomp$84$$ = this.cmos_c, this.cmos_c &= -241, $c$jscomp$2_index$jscomp$84$$; + case 13: + return 0; + case 50: + case 55: + return $dbg_log$$("read century: " + $h$$(this.encode_time((new Date(this.rtc_time)).getUTCFullYear() / 100 | 0)), 65536), this.encode_time((new Date(this.rtc_time)).getUTCFullYear() / 100 | 0); + default: + return $dbg_log$$("cmos read from index " + $h$$($c$jscomp$2_index$jscomp$84$$), 65536), this.cmos_data[this.cmos_index]; + } +}; +$RTC$$.prototype.cmos_port_write = function($data_byte$jscomp$11_now$jscomp$5$$) { + switch(this.cmos_index) { + case 10: + this.cmos_a = $data_byte$jscomp$11_now$jscomp$5$$ & 127; + this.periodic_interrupt_time = 1000 / (32768 >> (this.cmos_a & 15) - 1); + $dbg_log$$("Periodic interrupt, a=" + $h$$(this.cmos_a, 2) + " t=" + this.periodic_interrupt_time, 65536); + break; + case 11: + this.cmos_b = $data_byte$jscomp$11_now$jscomp$5$$; + this.cmos_b & 64 && (this.next_interrupt = Date.now()); + if (this.cmos_b & 32) { + $data_byte$jscomp$11_now$jscomp$5$$ = new Date; + const $seconds$$ = this.decode_time(this.cmos_data[1]), $minutes$$ = this.decode_time(this.cmos_data[3]), $hours$$ = this.decode_time(this.cmos_data[5]), $alarm_date$$ = new Date(Date.UTC($data_byte$jscomp$11_now$jscomp$5$$.getUTCFullYear(), $data_byte$jscomp$11_now$jscomp$5$$.getUTCMonth(), $data_byte$jscomp$11_now$jscomp$5$$.getUTCDate(), $hours$$, $minutes$$, $seconds$$)); + $dbg_log$$("RTC alarm scheduled for " + $alarm_date$$ + " hh:mm:ss=" + $hours$$ + ":" + $minutes$$ + ":" + $seconds$$ + " ms_from_now=" + ($alarm_date$$ - $data_byte$jscomp$11_now$jscomp$5$$), 65536); + this.next_interrupt_alarm = +$alarm_date$$; + } + this.cmos_b & 16 && $dbg_log$$("Unimplemented: updated interrupt", 65536); + $dbg_log$$("cmos b=" + $h$$(this.cmos_b, 2), 65536); + break; + case 1: + case 3: + case 5: + this.cmos_write(this.cmos_index, $data_byte$jscomp$11_now$jscomp$5$$); + break; + default: + $dbg_log$$("cmos write index " + $h$$(this.cmos_index) + ": " + $h$$($data_byte$jscomp$11_now$jscomp$5$$), 65536); + } + this.periodic_interrupt = 64 === (this.cmos_b & 64) && 0 < (this.cmos_a & 15); +}; +$RTC$$.prototype.cmos_read = function($index$jscomp$85$$) { + $dbg_assert$$(128 > $index$jscomp$85$$); + return this.cmos_data[$index$jscomp$85$$]; +}; +$RTC$$.prototype.cmos_write = function($index$jscomp$86$$, $value$jscomp$139$$) { + $dbg_log$$("cmos " + $h$$($index$jscomp$86$$) + " <- " + $h$$($value$jscomp$139$$), 65536); + $dbg_assert$$(128 > $index$jscomp$86$$); + this.cmos_data[$index$jscomp$86$$] = $value$jscomp$139$$; +}; +function $UART$$($cpu$jscomp$12_io$jscomp$2$$, $port$jscomp$1$$, $bus$jscomp$7$$) { + this.bus = $bus$jscomp$7$$; + this.cpu = $cpu$jscomp$12_io$jscomp$2$$; + this.ints = 4; + this.line_control = this.baud_rate = 0; + this.lsr = 96; + this.ier = this.fifo_control = 0; + this.iir = 1; + this.irq = this.scratch_register = this.modem_status = this.modem_control = 0; + this.input = []; + this.current_line = ""; + switch($port$jscomp$1$$) { + case 1016: + this.com = 0; + this.irq = 4; + break; + case 760: + this.com = 1; + this.irq = 3; + break; + case 1E3: + this.com = 2; + this.irq = 4; + break; + case 744: + this.irq = this.com = 3; + break; + default: + $dbg_log$$("Invalid serial port: " + $h$$($port$jscomp$1$$), 16384), this.com = 0, this.irq = 4; + } + this.bus.register("serial" + this.com + "-input", function($data$jscomp$124$$) { + this.data_received($data$jscomp$124$$); + }, this); + this.bus.register("serial" + this.com + "-modem-status-input", function($data$jscomp$125$$) { + this.set_modem_status($data$jscomp$125$$); + }, this); + this.bus.register("serial" + this.com + "-carrier-detect-input", function($data$jscomp$126$$) { + this.set_modem_status($data$jscomp$126$$ ? this.modem_status | 136 : this.modem_status & -137); + }, this); + this.bus.register("serial" + this.com + "-ring-indicator-input", function($data$jscomp$127$$) { + this.set_modem_status($data$jscomp$127$$ ? this.modem_status | 68 : this.modem_status & -69); + }, this); + this.bus.register("serial" + this.com + "-data-set-ready-input", function($data$jscomp$128$$) { + this.set_modem_status($data$jscomp$128$$ ? this.modem_status | 34 : this.modem_status & -35); + }, this); + this.bus.register("serial" + this.com + "-clear-to-send-input", function($data$jscomp$129$$) { + this.set_modem_status($data$jscomp$129$$ ? this.modem_status | 17 : this.modem_status & -18); + }, this); + $cpu$jscomp$12_io$jscomp$2$$ = $cpu$jscomp$12_io$jscomp$2$$.io; + $cpu$jscomp$12_io$jscomp$2$$.register_write($port$jscomp$1$$, this, function($out_byte$jscomp$5$$) { + this.write_data($out_byte$jscomp$5$$); + }, function($out_word$$) { + this.write_data($out_word$$ & 255); + this.write_data($out_word$$ >> 8); + }); + $cpu$jscomp$12_io$jscomp$2$$.register_write($port$jscomp$1$$ | 1, this, function($out_byte$jscomp$6$$) { + this.line_control & 128 ? (this.baud_rate = this.baud_rate & 255 | $out_byte$jscomp$6$$ << 8, $dbg_log$$("baud rate: " + $h$$(this.baud_rate), 16384)) : (0 === (this.ier & 2) && $out_byte$jscomp$6$$ & 2 && this.ThrowInterrupt(2), this.ier = $out_byte$jscomp$6$$ & 15, $dbg_log$$("interrupt enable: " + $h$$($out_byte$jscomp$6$$), 16384), this.CheckInterrupt()); + }); + $cpu$jscomp$12_io$jscomp$2$$.register_read($port$jscomp$1$$, this, function() { + if (this.line_control & 128) { + return this.baud_rate & 255; + } + let $data$jscomp$130$$ = 0; + 0 === this.input.length ? $dbg_log$$("Read input empty", 16384) : ($data$jscomp$130$$ = this.input.shift(), $dbg_log$$("Read input: " + $h$$($data$jscomp$130$$), 16384)); + 0 === this.input.length && (this.lsr &= -2, this.ClearInterrupt(12), this.ClearInterrupt(4)); + return $data$jscomp$130$$; + }); + $cpu$jscomp$12_io$jscomp$2$$.register_read($port$jscomp$1$$ | 1, this, function() { + return this.line_control & 128 ? this.baud_rate >> 8 : this.ier & 15; + }); + $cpu$jscomp$12_io$jscomp$2$$.register_read($port$jscomp$1$$ | 2, this, function() { + var $ret$jscomp$2$$ = this.iir & 15; + $dbg_log$$("read interrupt identification: " + $h$$(this.iir), 16384); + 2 === this.iir && this.ClearInterrupt(2); + this.fifo_control & 1 && ($ret$jscomp$2$$ |= 192); + return $ret$jscomp$2$$; + }); + $cpu$jscomp$12_io$jscomp$2$$.register_write($port$jscomp$1$$ | 2, this, function($out_byte$jscomp$7$$) { + $dbg_log$$("fifo control: " + $h$$($out_byte$jscomp$7$$), 16384); + this.fifo_control = $out_byte$jscomp$7$$; + }); + $cpu$jscomp$12_io$jscomp$2$$.register_read($port$jscomp$1$$ | 3, this, function() { + $dbg_log$$("read line control: " + $h$$(this.line_control), 16384); + return this.line_control; + }); + $cpu$jscomp$12_io$jscomp$2$$.register_write($port$jscomp$1$$ | 3, this, function($out_byte$jscomp$8$$) { + $dbg_log$$("line control: " + $h$$($out_byte$jscomp$8$$), 16384); + this.line_control = $out_byte$jscomp$8$$; + }); + $cpu$jscomp$12_io$jscomp$2$$.register_read($port$jscomp$1$$ | 4, this, function() { + return this.modem_control; + }); + $cpu$jscomp$12_io$jscomp$2$$.register_write($port$jscomp$1$$ | 4, this, function($out_byte$jscomp$9$$) { + $dbg_log$$("modem control: " + $h$$($out_byte$jscomp$9$$), 16384); + this.modem_control = $out_byte$jscomp$9$$; + }); + $cpu$jscomp$12_io$jscomp$2$$.register_read($port$jscomp$1$$ | 5, this, function() { + $dbg_log$$("read line status: " + $h$$(this.lsr), 16384); + return this.lsr; + }); + $cpu$jscomp$12_io$jscomp$2$$.register_write($port$jscomp$1$$ | 5, this, function() { + $dbg_log$$("Factory test write", 16384); + }); + $cpu$jscomp$12_io$jscomp$2$$.register_read($port$jscomp$1$$ | 6, this, function() { + $dbg_log$$("read modem status: " + $h$$(this.modem_status), 16384); + return this.modem_status &= 240; + }); + $cpu$jscomp$12_io$jscomp$2$$.register_write($port$jscomp$1$$ | 6, this, function($out_byte$jscomp$11$$) { + $dbg_log$$("write modem status: " + $h$$($out_byte$jscomp$11$$), 16384); + this.set_modem_status($out_byte$jscomp$11$$); + }); + $cpu$jscomp$12_io$jscomp$2$$.register_read($port$jscomp$1$$ | 7, this, function() { + return this.scratch_register; + }); + $cpu$jscomp$12_io$jscomp$2$$.register_write($port$jscomp$1$$ | 7, this, function($out_byte$jscomp$12$$) { + this.scratch_register = $out_byte$jscomp$12$$; + }); +} +$UART$$.prototype.get_state = function() { + var $state$jscomp$25$$ = []; + $state$jscomp$25$$[0] = this.ints; + $state$jscomp$25$$[1] = this.baud_rate; + $state$jscomp$25$$[2] = this.line_control; + $state$jscomp$25$$[3] = this.lsr; + $state$jscomp$25$$[4] = this.fifo_control; + $state$jscomp$25$$[5] = this.ier; + $state$jscomp$25$$[6] = this.iir; + $state$jscomp$25$$[7] = this.modem_control; + $state$jscomp$25$$[8] = this.modem_status; + $state$jscomp$25$$[9] = this.scratch_register; + $state$jscomp$25$$[10] = this.irq; + return $state$jscomp$25$$; +}; +$UART$$.prototype.set_state = function($state$jscomp$26$$) { + this.ints = $state$jscomp$26$$[0]; + this.baud_rate = $state$jscomp$26$$[1]; + this.line_control = $state$jscomp$26$$[2]; + this.lsr = $state$jscomp$26$$[3]; + this.fifo_control = $state$jscomp$26$$[4]; + this.ier = $state$jscomp$26$$[5]; + this.iir = $state$jscomp$26$$[6]; + this.modem_control = $state$jscomp$26$$[7]; + this.modem_status = $state$jscomp$26$$[8]; + this.scratch_register = $state$jscomp$26$$[9]; + this.irq = $state$jscomp$26$$[10]; +}; +$UART$$.prototype.CheckInterrupt = function() { + this.ints & 4096 && this.ier & 1 ? (this.iir = 12, this.cpu.device_raise_irq(this.irq)) : this.ints & 16 && this.ier & 1 ? (this.iir = 4, this.cpu.device_raise_irq(this.irq)) : this.ints & 4 && this.ier & 2 ? (this.iir = 2, this.cpu.device_raise_irq(this.irq)) : this.ints & 1 && this.ier & 8 ? (this.iir = 0, this.cpu.device_raise_irq(this.irq)) : (this.iir = 1, this.cpu.device_lower_irq(this.irq)); +}; +$UART$$.prototype.ThrowInterrupt = function($line$jscomp$2$$) { + this.ints |= 1 << $line$jscomp$2$$; + this.CheckInterrupt(); +}; +$UART$$.prototype.ClearInterrupt = function($line$jscomp$3$$) { + this.ints &= ~(1 << $line$jscomp$3$$); + this.CheckInterrupt(); +}; +$UART$$.prototype.data_received = function($data$jscomp$131$$) { + $dbg_log$$("input: " + $h$$($data$jscomp$131$$), 16384); + this.input.push($data$jscomp$131$$); + this.lsr |= 1; + this.fifo_control & 1 ? this.ThrowInterrupt(12) : this.ThrowInterrupt(4); +}; +$UART$$.prototype.write_data = function($char_line$jscomp$4_out_byte$jscomp$13$$) { + this.line_control & 128 ? this.baud_rate = this.baud_rate & -256 | $char_line$jscomp$4_out_byte$jscomp$13$$ : ($dbg_log$$("data: " + $h$$($char_line$jscomp$4_out_byte$jscomp$13$$), 16384), this.ThrowInterrupt(2), this.bus.send("serial" + this.com + "-output-byte", $char_line$jscomp$4_out_byte$jscomp$13$$), $char_line$jscomp$4_out_byte$jscomp$13$$ = String.fromCharCode($char_line$jscomp$4_out_byte$jscomp$13$$), this.current_line += $char_line$jscomp$4_out_byte$jscomp$13$$, "\n" === $char_line$jscomp$4_out_byte$jscomp$13$$ && + ($char_line$jscomp$4_out_byte$jscomp$13$$ = this.current_line.trimRight().replace(/[\x00-\x08\x0b-\x1f\x7f\x80-\xff]/g, ""), $dbg_log$$("SERIAL: " + $char_line$jscomp$4_out_byte$jscomp$13$$), this.current_line = "")); +}; +$UART$$.prototype.set_modem_status = function($status$jscomp$4$$) { + $dbg_log$$("modem status: " + $h$$($status$jscomp$4$$), 16384); + const $prev_delta_bits$$ = this.modem_status & 15; + let $delta$jscomp$3$$ = (this.modem_status ^ $status$jscomp$4$$) >> 4; + this.modem_status = $status$jscomp$4$$; + this.modem_status = this.modem_status | $delta$jscomp$3$$ | $prev_delta_bits$$; +}; +function $ACPI$$($cpu$jscomp$13$$) { + this.cpu = $cpu$jscomp$13$$; + var $io$jscomp$3$$ = $cpu$jscomp$13$$.io; + $cpu$jscomp$13$$.devices.pci.register_device({pci_id:56, pci_space:[134, 128, 19, 113, 7, 0, 128, 2, 8, 0, 128, 6, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 1, 0, 0, ], pci_bars:[], name:"acpi", }); + this.timer_imprecision_offset = this.timer_last_value = 0; + this.status = 1; + this.pm1_enable = this.pm1_status = 0; + this.last_timer = this.get_timer($v86$$.microtick()); + this.gpe = new Uint8Array(4); + $io$jscomp$3$$.register_read(45056, this, void 0, function() { + $dbg_log$$("ACPI pm1_status read", 262144); + return this.pm1_status; + }); + $io$jscomp$3$$.register_write(45056, this, void 0, function($value$jscomp$140$$) { + $dbg_log$$("ACPI pm1_status write: " + $h$$($value$jscomp$140$$, 4), 262144); + this.pm1_status &= ~$value$jscomp$140$$; + }); + $io$jscomp$3$$.register_read(45058, this, void 0, function() { + $dbg_log$$("ACPI pm1_enable read", 262144); + return this.pm1_enable; + }); + $io$jscomp$3$$.register_write(45058, this, void 0, function($value$jscomp$141$$) { + $dbg_log$$("ACPI pm1_enable write: " + $h$$($value$jscomp$141$$), 262144); + this.pm1_enable = $value$jscomp$141$$; + }); + $io$jscomp$3$$.register_read(45060, this, void 0, function() { + $dbg_log$$("ACPI status read", 262144); + return this.status; + }); + $io$jscomp$3$$.register_write(45060, this, void 0, function($value$jscomp$142$$) { + $dbg_log$$("ACPI status write: " + $h$$($value$jscomp$142$$), 262144); + this.status = $value$jscomp$142$$; + }); + $io$jscomp$3$$.register_read(45064, this, void 0, void 0, function() { + return this.get_timer($v86$$.microtick()) & 16777215; + }); + $io$jscomp$3$$.register_read(45024, this, function() { + $dbg_log$$("Read gpe#0", 262144); + return this.gpe[0]; + }); + $io$jscomp$3$$.register_read(45025, this, function() { + $dbg_log$$("Read gpe#1", 262144); + return this.gpe[1]; + }); + $io$jscomp$3$$.register_read(45026, this, function() { + $dbg_log$$("Read gpe#2", 262144); + return this.gpe[2]; + }); + $io$jscomp$3$$.register_read(45027, this, function() { + $dbg_log$$("Read gpe#3", 262144); + return this.gpe[3]; + }); + $io$jscomp$3$$.register_write(45024, this, function($value$jscomp$144$$) { + $dbg_log$$("Write gpe#0: " + $h$$($value$jscomp$144$$), 262144); + this.gpe[0] = $value$jscomp$144$$; + }); + $io$jscomp$3$$.register_write(45025, this, function($value$jscomp$145$$) { + $dbg_log$$("Write gpe#1: " + $h$$($value$jscomp$145$$), 262144); + this.gpe[1] = $value$jscomp$145$$; + }); + $io$jscomp$3$$.register_write(45026, this, function($value$jscomp$146$$) { + $dbg_log$$("Write gpe#2: " + $h$$($value$jscomp$146$$), 262144); + this.gpe[2] = $value$jscomp$146$$; + }); + $io$jscomp$3$$.register_write(45027, this, function($value$jscomp$147$$) { + $dbg_log$$("Write gpe#3: " + $h$$($value$jscomp$147$$), 262144); + this.gpe[3] = $value$jscomp$147$$; + }); +} +$ACPI$$.prototype.timer = function($now$jscomp$6_timer$$) { + $now$jscomp$6_timer$$ = this.get_timer($now$jscomp$6_timer$$); + var $highest_bit_changed$$ = 0 !== (($now$jscomp$6_timer$$ ^ this.last_timer) & 8388608); + this.pm1_enable & 1 && $highest_bit_changed$$ ? ($dbg_log$$("ACPI raise irq", 262144), this.pm1_status |= 1, this.cpu.device_raise_irq(9)) : this.cpu.device_lower_irq(9); + this.last_timer = $now$jscomp$6_timer$$; + return 100; +}; +$ACPI$$.prototype.get_timer = function($now$jscomp$7_t$jscomp$11$$) { + $now$jscomp$7_t$jscomp$11$$ = Math.round(3579.545 * $now$jscomp$7_t$jscomp$11$$); + $now$jscomp$7_t$jscomp$11$$ === this.timer_last_value ? 3579.545 > this.timer_imprecision_offset && this.timer_imprecision_offset++ : ($dbg_assert$$($now$jscomp$7_t$jscomp$11$$ > this.timer_last_value), this.timer_last_value + this.timer_imprecision_offset <= $now$jscomp$7_t$jscomp$11$$ ? (this.timer_imprecision_offset = 0, this.timer_last_value = $now$jscomp$7_t$jscomp$11$$) : $dbg_log$$("Warning: Overshot pmtimer, waiting; current=" + $now$jscomp$7_t$jscomp$11$$ + " last=" + this.timer_last_value + + " offset=" + this.timer_imprecision_offset, 262144)); + return this.timer_last_value + this.timer_imprecision_offset; +}; +$ACPI$$.prototype.get_state = function() { + var $state$jscomp$27$$ = []; + $state$jscomp$27$$[0] = this.status; + $state$jscomp$27$$[1] = this.pm1_status; + $state$jscomp$27$$[2] = this.pm1_enable; + $state$jscomp$27$$[3] = this.gpe; + return $state$jscomp$27$$; +}; +$ACPI$$.prototype.set_state = function($state$jscomp$28$$) { + this.status = $state$jscomp$28$$[0]; + this.pm1_status = $state$jscomp$28$$[1]; + this.pm1_enable = $state$jscomp$28$$[2]; + this.gpe = $state$jscomp$28$$[3]; +}; +var $DELIVERY_MODES$$ = "Fixed (0);Lowest Prio (1);SMI (2);Reserved (3);NMI (4);INIT (5);Reserved (6);ExtINT (7)".split(";"), $DESTINATION_MODES$$ = ["physical", "logical"]; +function $APIC$$($cpu$jscomp$14$$) { + this.cpu = $cpu$jscomp$14$$; + this.timer_divider = this.apic_id = 0; + this.timer_divider_shift = 1; + this.timer_current_count = this.timer_initial_count = 0; + this.next_tick = $v86$$.microtick(); + this.lvt_error = this.lvt_int1 = this.lvt_int0 = this.lvt_perf_counter = this.lvt_timer = 65536; + this.icr1 = this.icr0 = this.tpr = 0; + this.irr = new Int32Array(8); + this.isr = new Int32Array(8); + this.tmr = new Int32Array(8); + this.spurious_vector = 254; + this.destination_format = -1; + this.read_error = this.error = this.local_destination = 0; + $cpu$jscomp$14$$.io.mmap_register(4276092928, 1048576, $addr$jscomp$33$$ => { + $dbg_log$$("Unsupported read8 from apic: " + $h$$($addr$jscomp$33$$ >>> 0), 524288); + var $off$$ = $addr$jscomp$33$$ & 3; + return this.read32($addr$jscomp$33$$ & -4) >> 8 * $off$$ & 255; + }, ($addr$jscomp$34$$, $value$jscomp$148$$) => { + $dbg_log$$("Unsupported write8 from apic: " + $h$$($addr$jscomp$34$$) + " <- " + $h$$($value$jscomp$148$$), 524288); + $dbg_log$$(Error().stack, void 0); + $dbg_assert$$(!1); + }, $addr$jscomp$35$$ => this.read32($addr$jscomp$35$$), ($addr$jscomp$36$$, $value$jscomp$149$$) => this.write32($addr$jscomp$36$$, $value$jscomp$149$$)); +} +$APIC$$.prototype.read32 = function($addr$jscomp$37_index$jscomp$87$$) { + $addr$jscomp$37_index$jscomp$87$$ = $addr$jscomp$37_index$jscomp$87$$ - 4276092928 | 0; + switch($addr$jscomp$37_index$jscomp$87$$) { + case 32: + return $dbg_log$$("APIC read id", 524288), this.apic_id; + case 48: + return $dbg_log$$("APIC read version", 524288), 327700; + case 128: + return this.tpr; + case 208: + return $dbg_log$$("Read local destination", 524288), this.local_destination; + case 224: + return $dbg_log$$("Read destination format", 524288), this.destination_format; + case 240: + return this.spurious_vector; + case 256: + case 272: + case 288: + case 304: + case 320: + case 336: + case 352: + case 368: + return $addr$jscomp$37_index$jscomp$87$$ = $addr$jscomp$37_index$jscomp$87$$ - 256 >> 4, $dbg_log$$("Read isr " + $addr$jscomp$37_index$jscomp$87$$ + ": " + $h$$(this.isr[$addr$jscomp$37_index$jscomp$87$$] >>> 0, 8), 524288), this.isr[$addr$jscomp$37_index$jscomp$87$$]; + case 384: + case 400: + case 416: + case 432: + case 448: + case 464: + case 480: + case 496: + return $addr$jscomp$37_index$jscomp$87$$ = $addr$jscomp$37_index$jscomp$87$$ - 384 >> 4, $dbg_log$$("Read tmr " + $addr$jscomp$37_index$jscomp$87$$ + ": " + $h$$(this.tmr[$addr$jscomp$37_index$jscomp$87$$] >>> 0, 8), 524288), this.tmr[$addr$jscomp$37_index$jscomp$87$$]; + case 512: + case 528: + case 544: + case 560: + case 576: + case 592: + case 608: + case 624: + return $addr$jscomp$37_index$jscomp$87$$ = $addr$jscomp$37_index$jscomp$87$$ - 512 >> 4, $dbg_log$$("Read irr " + $addr$jscomp$37_index$jscomp$87$$ + ": " + $h$$(this.irr[$addr$jscomp$37_index$jscomp$87$$] >>> 0, 8), 524288), this.irr[$addr$jscomp$37_index$jscomp$87$$]; + case 640: + return $dbg_log$$("Read error: " + $h$$(this.read_error >>> 0, 8), 524288), this.read_error; + case 768: + return this.icr0; + case 784: + return $dbg_log$$("APIC read icr1", 524288), this.icr1; + case 800: + return $dbg_log$$("read timer lvt", 524288), this.lvt_timer; + case 832: + return $dbg_log$$("read lvt perf counter", 524288), this.lvt_perf_counter; + case 848: + return $dbg_log$$("read lvt int0", 524288), this.lvt_int0; + case 864: + return $dbg_log$$("read lvt int1", 524288), this.lvt_int1; + case 880: + return $dbg_log$$("read lvt error", 524288), this.lvt_error; + case 992: + return $dbg_log$$("read timer divider", 524288), this.timer_divider; + case 896: + return $dbg_log$$("read timer initial count", 524288), this.timer_initial_count; + case 912: + return $dbg_log$$("read timer current count: " + $h$$(this.timer_current_count >>> 0, 8), 524288), this.timer_current_count; + default: + return $dbg_log$$("APIC read " + $h$$($addr$jscomp$37_index$jscomp$87$$), 524288), $dbg_assert$$(!1), 0; + } +}; +$APIC$$.prototype.write32 = function($addr$jscomp$38_vector$$, $divide_shift_highest_isr_value$jscomp$150$$) { + $addr$jscomp$38_vector$$ = $addr$jscomp$38_vector$$ - 4276092928 | 0; + switch($addr$jscomp$38_vector$$) { + case 32: + $dbg_log$$("APIC write id: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 8, 8), 524288); + this.apic_id = $divide_shift_highest_isr_value$jscomp$150$$; + break; + case 48: + $dbg_log$$("APIC write version: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8) + ", ignored", 524288); + break; + case 128: + this.tpr = $divide_shift_highest_isr_value$jscomp$150$$ & 255; + this.check_vector(); + break; + case 176: + $divide_shift_highest_isr_value$jscomp$150$$ = this.highest_isr(); + -1 !== $divide_shift_highest_isr_value$jscomp$150$$ ? (this.register_clear_bit(this.isr, $divide_shift_highest_isr_value$jscomp$150$$), this.register_get_bit(this.tmr, $divide_shift_highest_isr_value$jscomp$150$$) && this.cpu.devices.ioapic.remote_eoi($divide_shift_highest_isr_value$jscomp$150$$), this.check_vector()) : $dbg_log$$("Bad eoi: No isr set", 524288); + break; + case 208: + $dbg_log$$("Set local destination: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288); + this.local_destination = $divide_shift_highest_isr_value$jscomp$150$$ & 4278190080; + break; + case 224: + $dbg_log$$("Set destination format: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288); + this.destination_format = $divide_shift_highest_isr_value$jscomp$150$$ | 16777215; + break; + case 240: + $dbg_log$$("Set spurious vector: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288); + this.spurious_vector = $divide_shift_highest_isr_value$jscomp$150$$; + break; + case 640: + $dbg_log$$("Write error: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288); + this.read_error = this.error; + this.error = 0; + break; + case 768: + $addr$jscomp$38_vector$$ = $divide_shift_highest_isr_value$jscomp$150$$ & 255; + var $delivery_mode$$ = $divide_shift_highest_isr_value$jscomp$150$$ >> 8 & 7, $destination_mode$$ = $divide_shift_highest_isr_value$jscomp$150$$ >> 11 & 1, $is_level$$ = $divide_shift_highest_isr_value$jscomp$150$$ >> 15 & 1, $destination_shorthand$$ = $divide_shift_highest_isr_value$jscomp$150$$ >> 18 & 3, $destination$jscomp$3$$ = this.icr1 >>> 24; + $dbg_log$$("APIC write icr0: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$, 8) + " vector=" + $h$$($addr$jscomp$38_vector$$, 2) + " destination_mode=" + $DESTINATION_MODES$$[$destination_mode$$] + " delivery_mode=" + $DELIVERY_MODES$$[$delivery_mode$$] + " destination_shorthand=" + ["no", "self", "all with self", "all without self"][$destination_shorthand$$], 524288); + this.icr0 = $divide_shift_highest_isr_value$jscomp$150$$ & -4097; + 0 === $destination_shorthand$$ ? this.route($addr$jscomp$38_vector$$, $delivery_mode$$, $is_level$$, $destination$jscomp$3$$, $destination_mode$$) : 1 === $destination_shorthand$$ ? this.deliver($addr$jscomp$38_vector$$, 0, $is_level$$) : 2 === $destination_shorthand$$ ? this.deliver($addr$jscomp$38_vector$$, $delivery_mode$$, $is_level$$) : 3 !== $destination_shorthand$$ && $dbg_assert$$(!1); + break; + case 784: + $dbg_log$$("APIC write icr1: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288); + this.icr1 = $divide_shift_highest_isr_value$jscomp$150$$; + break; + case 800: + $dbg_log$$("timer lvt: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288); + this.lvt_timer = $divide_shift_highest_isr_value$jscomp$150$$; + break; + case 832: + $dbg_log$$("lvt perf counter: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288); + this.lvt_perf_counter = $divide_shift_highest_isr_value$jscomp$150$$; + break; + case 848: + $dbg_log$$("lvt int0: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288); + this.lvt_int0 = $divide_shift_highest_isr_value$jscomp$150$$; + break; + case 864: + $dbg_log$$("lvt int1: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288); + this.lvt_int1 = $divide_shift_highest_isr_value$jscomp$150$$; + break; + case 880: + $dbg_log$$("lvt error: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288); + this.lvt_error = $divide_shift_highest_isr_value$jscomp$150$$; + break; + case 992: + $dbg_log$$("timer divider: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288); + this.timer_divider = $divide_shift_highest_isr_value$jscomp$150$$; + $divide_shift_highest_isr_value$jscomp$150$$ = $divide_shift_highest_isr_value$jscomp$150$$ & 3 | ($divide_shift_highest_isr_value$jscomp$150$$ & 8) >> 1; + this.timer_divider_shift = 7 === $divide_shift_highest_isr_value$jscomp$150$$ ? 0 : $divide_shift_highest_isr_value$jscomp$150$$ + 1; + break; + case 896: + $dbg_log$$("timer initial: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288); + this.timer_initial_count = $divide_shift_highest_isr_value$jscomp$150$$ >>> 0; + this.timer_current_count = $divide_shift_highest_isr_value$jscomp$150$$ >>> 0; + this.next_tick = $v86$$.microtick(); + this.timer_active = !0; + break; + case 912: + $dbg_log$$("timer current: " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288); + $dbg_assert$$(!1, "read-only register"); + break; + default: + $dbg_log$$("APIC write32 " + $h$$($addr$jscomp$38_vector$$) + " <- " + $h$$($divide_shift_highest_isr_value$jscomp$150$$ >>> 0, 8), 524288), $dbg_assert$$(!1); + } +}; +$APIC$$.prototype.timer = function($mode$jscomp$20_now$jscomp$8_steps$$) { + if (0 === this.timer_current_count) { + return 100; + } + const $freq$$ = 1E6 / (1 << this.timer_divider_shift); + $mode$jscomp$20_now$jscomp$8_steps$$ = ($mode$jscomp$20_now$jscomp$8_steps$$ - this.next_tick) * $freq$$ >>> 0; + this.next_tick += $mode$jscomp$20_now$jscomp$8_steps$$ / $freq$$; + this.timer_current_count -= $mode$jscomp$20_now$jscomp$8_steps$$; + 0 >= this.timer_current_count && ($mode$jscomp$20_now$jscomp$8_steps$$ = this.lvt_timer & 393216, 131072 === $mode$jscomp$20_now$jscomp$8_steps$$ ? (this.timer_current_count %= this.timer_initial_count, 0 >= this.timer_current_count && (this.timer_current_count += this.timer_initial_count), $dbg_assert$$(0 !== this.timer_current_count), 0 === (this.lvt_timer & 65536) && this.deliver(this.lvt_timer & 255, 0, !1)) : 0 === $mode$jscomp$20_now$jscomp$8_steps$$ && (this.timer_current_count = 0, $dbg_log$$("APIC timer one shot end", + 524288), 0 === (this.lvt_timer & 65536) && this.deliver(this.lvt_timer & 255, 0, !1))); + return Math.max(0, this.timer_current_count / $freq$$); +}; +$APIC$$.prototype.route = function($vector$jscomp$1$$, $mode$jscomp$21$$, $is_level$jscomp$1$$) { + this.deliver($vector$jscomp$1$$, $mode$jscomp$21$$, $is_level$jscomp$1$$); +}; +$APIC$$.prototype.deliver = function($vector$jscomp$2$$, $mode$jscomp$22$$, $is_level$jscomp$2$$) { + 5 !== $mode$jscomp$22$$ && 4 !== $mode$jscomp$22$$ && ((16 > $vector$jscomp$2$$ || 255 === $vector$jscomp$2$$) && $dbg_assert$$(!1, "TODO: Invalid vector"), this.register_get_bit(this.irr, $vector$jscomp$2$$) ? $dbg_log$$("Not delivered: irr already set, vector=" + $h$$($vector$jscomp$2$$, 2), 524288) : (this.register_set_bit(this.irr, $vector$jscomp$2$$), $is_level$jscomp$2$$ ? this.register_set_bit(this.tmr, $vector$jscomp$2$$) : this.register_clear_bit(this.tmr, $vector$jscomp$2$$), this.check_vector())); +}; +$APIC$$.prototype.highest_irr = function() { + var $highest$$ = this.register_get_highest_bit(this.irr); + $dbg_assert$$(255 !== $highest$$); + $dbg_assert$$(16 <= $highest$$ || -1 === $highest$$); + return $highest$$; +}; +$APIC$$.prototype.highest_isr = function() { + var $highest$jscomp$1$$ = this.register_get_highest_bit(this.isr); + $dbg_assert$$(255 !== $highest$jscomp$1$$); + $dbg_assert$$(16 <= $highest$jscomp$1$$ || -1 === $highest$jscomp$1$$); + return $highest$jscomp$1$$; +}; +$APIC$$.prototype.check_vector = function() { + var $highest_irr$$ = this.highest_irr(); + -1 !== $highest_irr$$ && (this.highest_isr() >= $highest_irr$$ || ($highest_irr$$ & 240) <= (this.tpr & 240) || this.cpu.handle_irqs()); +}; +$APIC$$.prototype.acknowledge_irq = function() { + var $highest_irr$jscomp$1$$ = this.highest_irr(); + if (-1 === $highest_irr$jscomp$1$$ || this.highest_isr() >= $highest_irr$jscomp$1$$ || ($highest_irr$jscomp$1$$ & 240) <= (this.tpr & 240)) { + return -1; + } + this.register_clear_bit(this.irr, $highest_irr$jscomp$1$$); + this.register_set_bit(this.isr, $highest_irr$jscomp$1$$); + this.check_vector(); + return $highest_irr$jscomp$1$$; +}; +$APIC$$.prototype.get_state = function() { + var $state$jscomp$29$$ = []; + $state$jscomp$29$$[0] = this.apic_id; + $state$jscomp$29$$[1] = this.timer_divider; + $state$jscomp$29$$[2] = this.timer_divider_shift; + $state$jscomp$29$$[3] = this.timer_initial_count; + $state$jscomp$29$$[4] = this.timer_current_count; + $state$jscomp$29$$[5] = this.next_tick; + $state$jscomp$29$$[6] = this.lvt_timer; + $state$jscomp$29$$[7] = this.lvt_perf_counter; + $state$jscomp$29$$[8] = this.lvt_int0; + $state$jscomp$29$$[9] = this.lvt_int1; + $state$jscomp$29$$[10] = this.lvt_error; + $state$jscomp$29$$[11] = this.tpr; + $state$jscomp$29$$[12] = this.icr0; + $state$jscomp$29$$[13] = this.icr1; + $state$jscomp$29$$[14] = this.irr; + $state$jscomp$29$$[15] = this.isr; + $state$jscomp$29$$[16] = this.tmr; + $state$jscomp$29$$[17] = this.spurious_vector; + $state$jscomp$29$$[18] = this.destination_format; + $state$jscomp$29$$[19] = this.local_destination; + $state$jscomp$29$$[20] = this.error; + $state$jscomp$29$$[21] = this.read_error; + return $state$jscomp$29$$; +}; +$APIC$$.prototype.set_state = function($state$jscomp$30$$) { + this.apic_id = $state$jscomp$30$$[0]; + this.timer_divider = $state$jscomp$30$$[1]; + this.timer_divider_shift = $state$jscomp$30$$[2]; + this.timer_initial_count = $state$jscomp$30$$[3]; + this.timer_current_count = $state$jscomp$30$$[4]; + this.next_tick = $state$jscomp$30$$[5]; + this.lvt_timer = $state$jscomp$30$$[6]; + this.lvt_perf_counter = $state$jscomp$30$$[7]; + this.lvt_int0 = $state$jscomp$30$$[8]; + this.lvt_int1 = $state$jscomp$30$$[9]; + this.lvt_error = $state$jscomp$30$$[10]; + this.tpr = $state$jscomp$30$$[11]; + this.icr0 = $state$jscomp$30$$[12]; + this.icr1 = $state$jscomp$30$$[13]; + this.irr = $state$jscomp$30$$[14]; + this.isr = $state$jscomp$30$$[15]; + this.tmr = $state$jscomp$30$$[16]; + this.spurious_vector = $state$jscomp$30$$[17]; + this.destination_format = $state$jscomp$30$$[18]; + this.local_destination = $state$jscomp$30$$[19]; + this.error = $state$jscomp$30$$[20]; + this.read_error = $state$jscomp$30$$[21]; +}; +$APIC$$.prototype.register_get_bit = function($v$$, $bit$$) { + $dbg_assert$$(0 <= $bit$$ && 256 > $bit$$); + return $v$$[$bit$$ >> 5] >> ($bit$$ & 31) & 1; +}; +$APIC$$.prototype.register_set_bit = function($v$jscomp$1$$, $bit$jscomp$1$$) { + $dbg_assert$$(0 <= $bit$jscomp$1$$ && 256 > $bit$jscomp$1$$); + $v$jscomp$1$$[$bit$jscomp$1$$ >> 5] |= 1 << ($bit$jscomp$1$$ & 31); +}; +$APIC$$.prototype.register_clear_bit = function($v$jscomp$2$$, $bit$jscomp$2$$) { + $dbg_assert$$(0 <= $bit$jscomp$2$$ && 256 > $bit$jscomp$2$$); + $v$jscomp$2$$[$bit$jscomp$2$$ >> 5] &= ~(1 << ($bit$jscomp$2$$ & 31)); +}; +$APIC$$.prototype.register_get_highest_bit = function($v$jscomp$3$$) { + for (var $i$jscomp$35$$ = 7; 0 <= $i$jscomp$35$$; $i$jscomp$35$$--) { + var $word$$ = $v$jscomp$3$$[$i$jscomp$35$$]; + if ($word$$) { + return $v86util$$.int_log2($word$$ >>> 0) | $i$jscomp$35$$ << 5; + } + } + return -1; +}; +function $IOAPIC$$($cpu$jscomp$15$$) { + this.cpu = $cpu$jscomp$15$$; + this.ioredtbl_config = new Int32Array(24); + this.ioredtbl_destination = new Int32Array(24); + for (var $i$jscomp$36$$ = 0; $i$jscomp$36$$ < this.ioredtbl_config.length; $i$jscomp$36$$++) { + this.ioredtbl_config[$i$jscomp$36$$] = 65536; + } + this.irq_value = this.irr = this.ioapic_id = this.ioregsel = 0; + $dbg_assert$$(!0); + $cpu$jscomp$15$$.io.mmap_register(4273995776, 131072, $addr$jscomp$39_byte$jscomp$1$$ => { + $addr$jscomp$39_byte$jscomp$1$$ = $addr$jscomp$39_byte$jscomp$1$$ - 4273995776 | 0; + if (16 <= $addr$jscomp$39_byte$jscomp$1$$ && 20 > $addr$jscomp$39_byte$jscomp$1$$) { + return $addr$jscomp$39_byte$jscomp$1$$ -= 16, $dbg_log$$("ioapic read8 byte " + $addr$jscomp$39_byte$jscomp$1$$ + " " + $h$$(this.ioregsel), 524288), this.read(this.ioregsel) >> 8 * $addr$jscomp$39_byte$jscomp$1$$ & 255; + } + $dbg_log$$("Unexpected IOAPIC register read: " + $h$$($addr$jscomp$39_byte$jscomp$1$$ >>> 0), 524288); + $dbg_assert$$(!1); + return 0; + }, $addr$jscomp$40$$ => { + $dbg_assert$$(!1, "unsupported write8 from ioapic: " + $h$$($addr$jscomp$40$$ >>> 0)); + }, $addr$jscomp$41$$ => { + $addr$jscomp$41$$ = $addr$jscomp$41$$ - 4273995776 | 0; + if (0 === $addr$jscomp$41$$) { + return this.ioregsel; + } + if (16 === $addr$jscomp$41$$) { + return this.read(this.ioregsel); + } + $dbg_log$$("Unexpected IOAPIC register read: " + $h$$($addr$jscomp$41$$ >>> 0), 524288); + $dbg_assert$$(!1); + return 0; + }, ($addr$jscomp$42$$, $value$jscomp$152$$) => { + $addr$jscomp$42$$ = $addr$jscomp$42$$ - 4273995776 | 0; + 0 === $addr$jscomp$42$$ ? this.ioregsel = $value$jscomp$152$$ : 16 === $addr$jscomp$42$$ ? this.write(this.ioregsel, $value$jscomp$152$$) : ($dbg_log$$("Unexpected IOAPIC register write: " + $h$$($addr$jscomp$42$$ >>> 0) + " <- " + $h$$($value$jscomp$152$$ >>> 0, 8), 524288), $dbg_assert$$(!1)); + }); +} +$IOAPIC$$.prototype.remote_eoi = function($vector$jscomp$3$$) { + for (var $i$jscomp$37$$ = 0; 24 > $i$jscomp$37$$; $i$jscomp$37$$++) { + var $config$jscomp$2$$ = this.ioredtbl_config[$i$jscomp$37$$]; + ($config$jscomp$2$$ & 255) === $vector$jscomp$3$$ && $config$jscomp$2$$ & 16384 && ($dbg_log$$("Clear remote IRR for irq=" + $h$$($i$jscomp$37$$), 524288), this.ioredtbl_config[$i$jscomp$37$$] &= -16385, this.check_irq($i$jscomp$37$$)); + } +}; +$IOAPIC$$.prototype.check_irq = function($irq$jscomp$2$$) { + var $mask$jscomp$8$$ = 1 << $irq$jscomp$2$$; + if (0 !== (this.irr & $mask$jscomp$8$$)) { + var $config$jscomp$3$$ = this.ioredtbl_config[$irq$jscomp$2$$]; + if (0 === ($config$jscomp$3$$ & 65536)) { + var $delivery_mode$jscomp$1$$ = $config$jscomp$3$$ >> 8 & 7, $destination_mode$jscomp$2$$ = $config$jscomp$3$$ >> 11 & 1, $vector$jscomp$4$$ = $config$jscomp$3$$ & 255, $destination$jscomp$5$$ = this.ioredtbl_destination[$irq$jscomp$2$$] >>> 24, $is_level$jscomp$3$$ = 32768 === ($config$jscomp$3$$ & 32768); + if (0 === ($config$jscomp$3$$ & 32768)) { + this.irr &= ~$mask$jscomp$8$$; + } else { + if (this.ioredtbl_config[$irq$jscomp$2$$] |= 16384, $config$jscomp$3$$ & 16384) { + $dbg_log$$("No route: level interrupt and remote IRR still set", 524288); + return; + } + } + 0 === $delivery_mode$jscomp$1$$ || 1 === $delivery_mode$jscomp$1$$ ? this.cpu.devices.apic.route($vector$jscomp$4$$, $delivery_mode$jscomp$1$$, $is_level$jscomp$3$$, $destination$jscomp$5$$, $destination_mode$jscomp$2$$) : $dbg_assert$$(!1, "TODO"); + this.ioredtbl_config[$irq$jscomp$2$$] &= -4097; + } + } +}; +$IOAPIC$$.prototype.set_irq = function($i$jscomp$38$$) { + if (24 <= $i$jscomp$38$$) { + $dbg_assert$$(!1, "Bad irq: " + $i$jscomp$38$$, 524288); + } else { + var $mask$jscomp$9$$ = 1 << $i$jscomp$38$$; + 0 === (this.irq_value & $mask$jscomp$9$$) && (this.irq_value |= $mask$jscomp$9$$, 65536 !== (this.ioredtbl_config[$i$jscomp$38$$] & 98304) && (this.irr |= $mask$jscomp$9$$, this.check_irq($i$jscomp$38$$))); + } +}; +$IOAPIC$$.prototype.clear_irq = function($i$jscomp$39$$) { + if (24 <= $i$jscomp$39$$) { + $dbg_assert$$(!1, "Bad irq: " + $i$jscomp$39$$, 524288); + } else { + var $mask$jscomp$10$$ = 1 << $i$jscomp$39$$; + (this.irq_value & $mask$jscomp$10$$) === $mask$jscomp$10$$ && (this.irq_value &= ~$mask$jscomp$10$$, this.ioredtbl_config[$i$jscomp$39$$] & 32768 && (this.irr &= ~$mask$jscomp$10$$)); + } +}; +$IOAPIC$$.prototype.read = function($reg$jscomp$1_value$jscomp$153$$) { + if (0 === $reg$jscomp$1_value$jscomp$153$$) { + return $dbg_log$$("IOAPIC Read id", 524288), this.ioapic_id << 24; + } + if (1 === $reg$jscomp$1_value$jscomp$153$$) { + return $dbg_log$$("IOAPIC Read version", 524288), 1507345; + } + if (2 === $reg$jscomp$1_value$jscomp$153$$) { + return $dbg_log$$("IOAPIC Read arbitration id", 524288), this.ioapic_id << 24; + } + if (16 <= $reg$jscomp$1_value$jscomp$153$$ && 64 > $reg$jscomp$1_value$jscomp$153$$) { + var $irq$jscomp$3$$ = $reg$jscomp$1_value$jscomp$153$$ - 16 >> 1; + $reg$jscomp$1_value$jscomp$153$$ & 1 ? ($reg$jscomp$1_value$jscomp$153$$ = this.ioredtbl_destination[$irq$jscomp$3$$], $dbg_log$$("IOAPIC Read destination irq=" + $h$$($irq$jscomp$3$$) + " -> " + $h$$($reg$jscomp$1_value$jscomp$153$$, 8), 524288)) : ($reg$jscomp$1_value$jscomp$153$$ = this.ioredtbl_config[$irq$jscomp$3$$], $dbg_log$$("IOAPIC Read config irq=" + $h$$($irq$jscomp$3$$) + " -> " + $h$$($reg$jscomp$1_value$jscomp$153$$, 8), 524288)); + return $reg$jscomp$1_value$jscomp$153$$; + } + $dbg_log$$("IOAPIC register read outside of range " + $h$$($reg$jscomp$1_value$jscomp$153$$), 524288); + $dbg_assert$$(!1); + return 0; +}; +$IOAPIC$$.prototype.write = function($reg$jscomp$2_vector$jscomp$5$$, $value$jscomp$154$$) { + if (0 === $reg$jscomp$2_vector$jscomp$5$$) { + this.ioapic_id = $value$jscomp$154$$ >>> 24 & 15; + } else { + if (1 === $reg$jscomp$2_vector$jscomp$5$$ || 2 === $reg$jscomp$2_vector$jscomp$5$$) { + $dbg_log$$("Invalid write: " + $reg$jscomp$2_vector$jscomp$5$$, 524288); + } else { + if (16 <= $reg$jscomp$2_vector$jscomp$5$$ && 64 > $reg$jscomp$2_vector$jscomp$5$$) { + var $irq$jscomp$4$$ = $reg$jscomp$2_vector$jscomp$5$$ - 16 >> 1; + if ($reg$jscomp$2_vector$jscomp$5$$ & 1) { + this.ioredtbl_destination[$irq$jscomp$4$$] = $value$jscomp$154$$ & 4278190080, $dbg_log$$("Write destination " + $h$$($value$jscomp$154$$ >>> 0, 8) + " irq=" + $h$$($irq$jscomp$4$$) + " dest=" + $h$$($value$jscomp$154$$ >>> 24, 2), 524288); + } else { + this.ioredtbl_config[$irq$jscomp$4$$] = $value$jscomp$154$$ & 110591 | this.ioredtbl_config[$irq$jscomp$4$$] & -110592; + $reg$jscomp$2_vector$jscomp$5$$ = $value$jscomp$154$$ & 255; + var $delivery_mode$jscomp$2$$ = $value$jscomp$154$$ >> 8 & 7, $destination_mode$jscomp$3$$ = $value$jscomp$154$$ >> 11 & 1, $is_level$jscomp$4$$ = $value$jscomp$154$$ >> 15 & 1, $disabled$jscomp$1$$ = $value$jscomp$154$$ >> 16 & 1; + $dbg_log$$("Write config " + $h$$($value$jscomp$154$$ >>> 0, 8) + " irq=" + $h$$($irq$jscomp$4$$) + " vector=" + $h$$($reg$jscomp$2_vector$jscomp$5$$, 2) + " deliverymode=" + $DELIVERY_MODES$$[$delivery_mode$jscomp$2$$] + " destmode=" + $DESTINATION_MODES$$[$destination_mode$jscomp$3$$] + " is_level=" + $is_level$jscomp$4$$ + " disabled=" + $disabled$jscomp$1$$, 524288); + this.check_irq($irq$jscomp$4$$); + } + } else { + $dbg_log$$("IOAPIC register write outside of range " + $h$$($reg$jscomp$2_vector$jscomp$5$$) + ": " + $h$$($value$jscomp$154$$ >>> 0, 8), 524288), $dbg_assert$$(!1); + } + } + } +}; +$IOAPIC$$.prototype.get_state = function() { + var $state$jscomp$31$$ = []; + $state$jscomp$31$$[0] = this.ioredtbl_config; + $state$jscomp$31$$[1] = this.ioredtbl_destination; + $state$jscomp$31$$[2] = this.ioregsel; + $state$jscomp$31$$[3] = this.ioapic_id; + $state$jscomp$31$$[4] = this.irr; + $state$jscomp$31$$[5] = this.irq_value; + return $state$jscomp$31$$; +}; +$IOAPIC$$.prototype.set_state = function($state$jscomp$32$$) { + this.ioredtbl_config = $state$jscomp$32$$[0]; + this.ioredtbl_destination = $state$jscomp$32$$[1]; + this.ioregsel = $state$jscomp$32$$[2]; + this.ioapic_id = $state$jscomp$32$$[3]; + this.irr = $state$jscomp$32$$[4]; + this.irq_value = $state$jscomp$32$$[5]; +}; +function $StateLoadError$$($msg$$) { + this.message = $msg$$; +} +$StateLoadError$$.prototype = Error(); +const $CONSTRUCTOR_TABLE$$ = {Uint8Array, Int8Array, Uint16Array, Int16Array, Uint32Array, Int32Array, Float32Array, Float64Array, }; +function $save_object$$($constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$, $saved_buffers$$) { + if ("object" !== typeof $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$ || null === $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$) { + return $dbg_assert$$("function" !== typeof $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$), $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$; + } + if ($constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$ instanceof Array) { + return $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$.map($x$jscomp$99$$ => $save_object$$($x$jscomp$99$$, $saved_buffers$$)); + } + $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$.constructor === Object && (console.log($constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$), $dbg_assert$$($constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$.constructor !== Object, "Expected non-object")); + if ($constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$.BYTES_PER_ELEMENT) { + var $buffer$jscomp$33_state$jscomp$33$$ = new Uint8Array($constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$.buffer, $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$.byteOffset, $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$.length * $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$.BYTES_PER_ELEMENT); + $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$ = $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$.constructor.name.replace("bound ", ""); + $dbg_assert$$($CONSTRUCTOR_TABLE$$[$constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$]); + return {__state_type__:$constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$, buffer_id:$saved_buffers$$.push($buffer$jscomp$33_state$jscomp$33$$) - 1, }; + } + !$constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$.get_state && console.log("Object without get_state: ", $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$); + $buffer$jscomp$33_state$jscomp$33$$ = $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$.get_state(); + $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$ = []; + for (var $i$jscomp$40$$ = 0; $i$jscomp$40$$ < $buffer$jscomp$33_state$jscomp$33$$.length; $i$jscomp$40$$++) { + var $value$jscomp$155$$ = $buffer$jscomp$33_state$jscomp$33$$[$i$jscomp$40$$]; + $dbg_assert$$("function" !== typeof $value$jscomp$155$$); + $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$[$i$jscomp$40$$] = $save_object$$($value$jscomp$155$$, $saved_buffers$$); + } + return $constructor$jscomp$1_obj$jscomp$27_result$jscomp$7$$; +} +function $restore_buffers$$($obj$jscomp$28$$, $buffers$jscomp$2$$) { + if ("object" !== typeof $obj$jscomp$28$$ || null === $obj$jscomp$28$$) { + return $dbg_assert$$("function" !== typeof $obj$jscomp$28$$), $obj$jscomp$28$$; + } + if ($obj$jscomp$28$$ instanceof Array) { + for ($i$jscomp$41_type$jscomp$151$$ = 0; $i$jscomp$41_type$jscomp$151$$ < $obj$jscomp$28$$.length; $i$jscomp$41_type$jscomp$151$$++) { + $obj$jscomp$28$$[$i$jscomp$41_type$jscomp$151$$] = $restore_buffers$$($obj$jscomp$28$$[$i$jscomp$41_type$jscomp$151$$], $buffers$jscomp$2$$); + } + return $obj$jscomp$28$$; + } + var $i$jscomp$41_type$jscomp$151$$ = $obj$jscomp$28$$.__state_type__; + $dbg_assert$$(void 0 !== $i$jscomp$41_type$jscomp$151$$); + const $constructor$jscomp$2$$ = $CONSTRUCTOR_TABLE$$[$i$jscomp$41_type$jscomp$151$$]; + $dbg_assert$$($constructor$jscomp$2$$, "Unkown type: " + $i$jscomp$41_type$jscomp$151$$); + return new $constructor$jscomp$2$$($buffers$jscomp$2$$[$obj$jscomp$28$$.buffer_id]); +} +$CPU$$.prototype.save_state = function() { + for (var $saved_buffers$jscomp$1$$ = [], $info_block_info_object_state$jscomp$34$$ = $save_object$$(this, $saved_buffers$jscomp$1$$), $buffer_infos$$ = [], $result$jscomp$8_total_buffer_size$$ = 0, $buffer_block_start_i$jscomp$42$$ = 0; $buffer_block_start_i$jscomp$42$$ < $saved_buffers$jscomp$1$$.length; $buffer_block_start_i$jscomp$42$$++) { + var $buffer_block_len$jscomp$16$$ = $saved_buffers$jscomp$1$$[$buffer_block_start_i$jscomp$42$$].byteLength; + $buffer_infos$$[$buffer_block_start_i$jscomp$42$$] = {offset:$result$jscomp$8_total_buffer_size$$, length:$buffer_block_len$jscomp$16$$, }; + $result$jscomp$8_total_buffer_size$$ += $buffer_block_len$jscomp$16$$; + $result$jscomp$8_total_buffer_size$$ = $result$jscomp$8_total_buffer_size$$ + 3 & -4; + } + $info_block_info_object_state$jscomp$34$$ = JSON.stringify({buffer_infos:$buffer_infos$$, state:$info_block_info_object_state$jscomp$34$$, }); + $info_block_info_object_state$jscomp$34$$ = (new TextEncoder).encode($info_block_info_object_state$jscomp$34$$); + $buffer_block_start_i$jscomp$42$$ = 16 + $info_block_info_object_state$jscomp$34$$.length; + $buffer_block_start_i$jscomp$42$$ = $buffer_block_start_i$jscomp$42$$ + 3 & -4; + var $buffer$jscomp$35_total_size$$ = $buffer_block_start_i$jscomp$42$$ + $result$jscomp$8_total_buffer_size$$; + $result$jscomp$8_total_buffer_size$$ = new ArrayBuffer($buffer$jscomp$35_total_size$$); + var $header_block$$ = new Int32Array($result$jscomp$8_total_buffer_size$$, 0, 4); + (new Uint8Array($result$jscomp$8_total_buffer_size$$, 16, $info_block_info_object_state$jscomp$34$$.length)).set($info_block_info_object_state$jscomp$34$$); + $buffer_block_len$jscomp$16$$ = new Uint8Array($result$jscomp$8_total_buffer_size$$, $buffer_block_start_i$jscomp$42$$); + $header_block$$[0] = -2039052682; + $header_block$$[1] = 6; + $header_block$$[2] = $buffer$jscomp$35_total_size$$; + $header_block$$[3] = $info_block_info_object_state$jscomp$34$$.length; + for ($buffer_block_start_i$jscomp$42$$ = 0; $buffer_block_start_i$jscomp$42$$ < $saved_buffers$jscomp$1$$.length; $buffer_block_start_i$jscomp$42$$++) { + $buffer$jscomp$35_total_size$$ = $saved_buffers$jscomp$1$$[$buffer_block_start_i$jscomp$42$$], $dbg_assert$$($buffer$jscomp$35_total_size$$.constructor === Uint8Array), $buffer_block_len$jscomp$16$$.set($buffer$jscomp$35_total_size$$, $buffer_infos$$[$buffer_block_start_i$jscomp$42$$].offset); + } + $dbg_log$$("State: json size " + ($info_block_info_object_state$jscomp$34$$.byteLength >> 10) + "k"); + $dbg_log$$("State: Total buffers size " + ($buffer_block_len$jscomp$16$$.byteLength >> 10) + "k"); + return $result$jscomp$8_total_buffer_size$$; +}; +$CPU$$.prototype.restore_state = function($state$jscomp$35$$) { + function $read_state_header$$($header_block$jscomp$1_state$jscomp$36$$, $check_length$$) { + const $len$jscomp$17$$ = $header_block$jscomp$1_state$jscomp$36$$.length; + if (16 > $len$jscomp$17$$) { + throw new $StateLoadError$$("Invalid length: " + $len$jscomp$17$$); + } + $header_block$jscomp$1_state$jscomp$36$$ = new Int32Array($header_block$jscomp$1_state$jscomp$36$$.buffer, $header_block$jscomp$1_state$jscomp$36$$.byteOffset, 4); + if (-2039052682 !== $header_block$jscomp$1_state$jscomp$36$$[0]) { + throw new $StateLoadError$$("Invalid header: " + $h$$($header_block$jscomp$1_state$jscomp$36$$[0] >>> 0)); + } + if (6 !== $header_block$jscomp$1_state$jscomp$36$$[1]) { + throw new $StateLoadError$$("Version mismatch: dump=" + $header_block$jscomp$1_state$jscomp$36$$[1] + " we=6"); + } + if ($check_length$$ && $header_block$jscomp$1_state$jscomp$36$$[2] !== $len$jscomp$17$$) { + throw new $StateLoadError$$("Length doesn't match header: real=" + $len$jscomp$17$$ + " header=" + $header_block$jscomp$1_state$jscomp$36$$[2]); + } + return $header_block$jscomp$1_state$jscomp$36$$[3]; + } + function $read_info_block$$($info_block$jscomp$1_info_block_buffer$$) { + $info_block$jscomp$1_info_block_buffer$$ = (new TextDecoder).decode($info_block$jscomp$1_info_block_buffer$$); + return JSON.parse($info_block$jscomp$1_info_block_buffer$$); + } + $state$jscomp$35$$ = new Uint8Array($state$jscomp$35$$); + if (4247762216 === (new Uint32Array($state$jscomp$35$$.buffer, 0, 1))[0]) { + var $buffers$jscomp$4_ctx_info_block_len$jscomp$1$$ = this.zstd_create_ctx($state$jscomp$35$$.length); + (new Uint8Array(this.wasm_memory.buffer, this.zstd_get_src_ptr($buffers$jscomp$4_ctx_info_block_len$jscomp$1$$), $state$jscomp$35$$.length)).set($state$jscomp$35$$); + var $buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$ = this.zstd_read($buffers$jscomp$4_ctx_info_block_len$jscomp$1$$, 16), $buffers$jscomp$3_header_block$jscomp$2_info_block_buffer$jscomp$1_info_block_obj$$ = new Uint8Array(this.wasm_memory.buffer, $buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$, 16), $info_block_len_position$jscomp$1$$ = $read_state_header$$($buffers$jscomp$3_header_block$jscomp$2_info_block_buffer$jscomp$1_info_block_obj$$, !1); + this.zstd_read_free($buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$, 16); + $buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$ = this.zstd_read($buffers$jscomp$4_ctx_info_block_len$jscomp$1$$, $info_block_len_position$jscomp$1$$); + $buffers$jscomp$3_header_block$jscomp$2_info_block_buffer$jscomp$1_info_block_obj$$ = new Uint8Array(this.wasm_memory.buffer, $buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$, $info_block_len_position$jscomp$1$$); + $buffers$jscomp$3_header_block$jscomp$2_info_block_buffer$jscomp$1_info_block_obj$$ = $read_info_block$$($buffers$jscomp$3_header_block$jscomp$2_info_block_buffer$jscomp$1_info_block_obj$$); + this.zstd_read_free($buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$, $info_block_len_position$jscomp$1$$); + $buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$ = $buffers$jscomp$3_header_block$jscomp$2_info_block_buffer$jscomp$1_info_block_obj$$.state; + var $buffer_infos$jscomp$1_front_padding$$ = $buffers$jscomp$3_header_block$jscomp$2_info_block_buffer$jscomp$1_info_block_obj$$.buffer_infos; + $buffers$jscomp$3_header_block$jscomp$2_info_block_buffer$jscomp$1_info_block_obj$$ = []; + $info_block_len_position$jscomp$1$$ = 16 + $info_block_len_position$jscomp$1$$; + for (var $buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$ of $buffer_infos$jscomp$1_front_padding$$) { + $buffer_infos$jscomp$1_front_padding$$ = ($info_block_len_position$jscomp$1$$ + 3 & -4) - $info_block_len_position$jscomp$1$$; + if (1048576 < $buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$.length) { + var $buffer$jscomp$36_ptr$jscomp$1_ptr$jscomp$3$$ = this.zstd_read($buffers$jscomp$4_ctx_info_block_len$jscomp$1$$, $buffer_infos$jscomp$1_front_padding$$); + this.zstd_read_free($buffer$jscomp$36_ptr$jscomp$1_ptr$jscomp$3$$, $buffer_infos$jscomp$1_front_padding$$); + $buffer$jscomp$36_ptr$jscomp$1_ptr$jscomp$3$$ = new Uint8Array($buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$.length); + $buffers$jscomp$3_header_block$jscomp$2_info_block_buffer$jscomp$1_info_block_obj$$.push($buffer$jscomp$36_ptr$jscomp$1_ptr$jscomp$3$$.buffer); + for (var $have_offset$jscomp$45$$ = 0; $have_offset$jscomp$45$$ < $buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$.length;) { + var $remaining_to_read$$ = $buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$.length - $have_offset$jscomp$45$$; + $dbg_assert$$(0 <= $remaining_to_read$$); + $remaining_to_read$$ = Math.min($remaining_to_read$$, 1048576); + const $ptr$jscomp$2$$ = this.zstd_read($buffers$jscomp$4_ctx_info_block_len$jscomp$1$$, $remaining_to_read$$); + $buffer$jscomp$36_ptr$jscomp$1_ptr$jscomp$3$$.set(new Uint8Array(this.wasm_memory.buffer, $ptr$jscomp$2$$, $remaining_to_read$$), $have_offset$jscomp$45$$); + this.zstd_read_free($ptr$jscomp$2$$, $remaining_to_read$$); + $have_offset$jscomp$45$$ += $remaining_to_read$$; + } + } else { + $buffer$jscomp$36_ptr$jscomp$1_ptr$jscomp$3$$ = this.zstd_read($buffers$jscomp$4_ctx_info_block_len$jscomp$1$$, $buffer_infos$jscomp$1_front_padding$$ + $buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$.length), $have_offset$jscomp$45$$ = $buffer$jscomp$36_ptr$jscomp$1_ptr$jscomp$3$$ + $buffer_infos$jscomp$1_front_padding$$, $buffers$jscomp$3_header_block$jscomp$2_info_block_buffer$jscomp$1_info_block_obj$$.push(this.wasm_memory.buffer.slice($have_offset$jscomp$45$$, $have_offset$jscomp$45$$ + + $buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$.length)), this.zstd_read_free($buffer$jscomp$36_ptr$jscomp$1_ptr$jscomp$3$$, $buffer_infos$jscomp$1_front_padding$$ + $buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$.length); + } + $info_block_len_position$jscomp$1$$ += $buffer_infos$jscomp$1_front_padding$$ + $buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$.length; + } + $buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$ = $restore_buffers$$($buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$, $buffers$jscomp$3_header_block$jscomp$2_info_block_buffer$jscomp$1_info_block_obj$$); + this.set_state($buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$); + this.zstd_free_ctx($buffers$jscomp$4_ctx_info_block_len$jscomp$1$$); + } else { + $buffers$jscomp$4_ctx_info_block_len$jscomp$1$$ = $read_state_header$$($state$jscomp$35$$, !0); + if (0 > $buffers$jscomp$4_ctx_info_block_len$jscomp$1$$ || $buffers$jscomp$4_ctx_info_block_len$jscomp$1$$ + 12 >= $state$jscomp$35$$.length) { + throw new $StateLoadError$$("Invalid info block length: " + $buffers$jscomp$4_ctx_info_block_len$jscomp$1$$); + } + $buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$ = $state$jscomp$35$$.subarray(16, 16 + $buffers$jscomp$4_ctx_info_block_len$jscomp$1$$); + $buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$ = $read_info_block$$($buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$); + $buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$ = $buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$.state; + $buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$ = $buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$.buffer_infos; + let $buffer_block_start$jscomp$1$$ = 16 + $buffers$jscomp$4_ctx_info_block_len$jscomp$1$$; + $buffer_block_start$jscomp$1$$ = $buffer_block_start$jscomp$1$$ + 3 & -4; + $buffers$jscomp$4_ctx_info_block_len$jscomp$1$$ = $buffer_infos$jscomp$2_info_block_obj$jscomp$1_ptr_state_object$$.map($buffer_info$jscomp$1$$ => { + const $offset$jscomp$46$$ = $buffer_block_start$jscomp$1$$ + $buffer_info$jscomp$1$$.offset; + return $state$jscomp$35$$.buffer.slice($offset$jscomp$46$$, $offset$jscomp$46$$ + $buffer_info$jscomp$1$$.length); + }); + $buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$ = $restore_buffers$$($buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$, $buffers$jscomp$4_ctx_info_block_len$jscomp$1$$); + this.set_state($buffer_info_info_block_buffer$jscomp$2_state_object$jscomp$1$$); + } +}; +function $translate_mac_address$$($arp_packet_ipv4_packet_packet_udp_packet$$, $search_mac$$, $replacement_mac$$) { + $arp_packet_ipv4_packet_packet_udp_packet$$[0] === $search_mac$$[0] && $arp_packet_ipv4_packet_packet_udp_packet$$[1] === $search_mac$$[1] && $arp_packet_ipv4_packet_packet_udp_packet$$[2] === $search_mac$$[2] && $arp_packet_ipv4_packet_packet_udp_packet$$[3] === $search_mac$$[3] && $arp_packet_ipv4_packet_packet_udp_packet$$[4] === $search_mac$$[4] && $arp_packet_ipv4_packet_packet_udp_packet$$[5] === $search_mac$$[5] && ($dbg_log$$("Replace mac in eth destination field", 1048576), $arp_packet_ipv4_packet_packet_udp_packet$$[0] = + $replacement_mac$$[0], $arp_packet_ipv4_packet_packet_udp_packet$$[1] = $replacement_mac$$[1], $arp_packet_ipv4_packet_packet_udp_packet$$[2] = $replacement_mac$$[2], $arp_packet_ipv4_packet_packet_udp_packet$$[3] = $replacement_mac$$[3], $arp_packet_ipv4_packet_packet_udp_packet$$[4] = $replacement_mac$$[4], $arp_packet_ipv4_packet_packet_udp_packet$$[5] = $replacement_mac$$[5]); + $arp_packet_ipv4_packet_packet_udp_packet$$[6] === $search_mac$$[0] && $arp_packet_ipv4_packet_packet_udp_packet$$[7] === $search_mac$$[1] && $arp_packet_ipv4_packet_packet_udp_packet$$[8] === $search_mac$$[2] && $arp_packet_ipv4_packet_packet_udp_packet$$[9] === $search_mac$$[3] && $arp_packet_ipv4_packet_packet_udp_packet$$[10] === $search_mac$$[4] && $arp_packet_ipv4_packet_packet_udp_packet$$[11] === $search_mac$$[5] && ($dbg_log$$("Replace mac in eth source field", 1048576), $arp_packet_ipv4_packet_packet_udp_packet$$[6] = + $replacement_mac$$[0], $arp_packet_ipv4_packet_packet_udp_packet$$[7] = $replacement_mac$$[1], $arp_packet_ipv4_packet_packet_udp_packet$$[8] = $replacement_mac$$[2], $arp_packet_ipv4_packet_packet_udp_packet$$[9] = $replacement_mac$$[3], $arp_packet_ipv4_packet_packet_udp_packet$$[10] = $replacement_mac$$[4], $arp_packet_ipv4_packet_packet_udp_packet$$[11] = $replacement_mac$$[5]); + var $dhcp_packet_ethertype_ipv4_version_source_port$$ = $arp_packet_ipv4_packet_packet_udp_packet$$[12] << 8 | $arp_packet_ipv4_packet_packet_udp_packet$$[13]; + if (2048 === $dhcp_packet_ethertype_ipv4_version_source_port$$) { + if ($arp_packet_ipv4_packet_packet_udp_packet$$ = $arp_packet_ipv4_packet_packet_udp_packet$$.subarray(14), $dhcp_packet_ethertype_ipv4_version_source_port$$ = $arp_packet_ipv4_packet_packet_udp_packet$$[0] >> 4, 4 !== $dhcp_packet_ethertype_ipv4_version_source_port$$) { + $dbg_log$$("Expected ipv4.version==4 but got: " + $dhcp_packet_ethertype_ipv4_version_source_port$$, 1048576); + } else { + if ($dbg_assert$$(5 === ($arp_packet_ipv4_packet_packet_udp_packet$$[0] & 15), "TODO: ihl!=5"), 17 === $arp_packet_ipv4_packet_packet_udp_packet$$[9] && ($arp_packet_ipv4_packet_packet_udp_packet$$ = $arp_packet_ipv4_packet_packet_udp_packet$$.subarray(20), $dhcp_packet_ethertype_ipv4_version_source_port$$ = $arp_packet_ipv4_packet_packet_udp_packet$$[0] << 8 | $arp_packet_ipv4_packet_packet_udp_packet$$[1], $destination_port_dhcp_magic_offset$jscomp$47$$ = $arp_packet_ipv4_packet_packet_udp_packet$$[2] << + 8 | $arp_packet_ipv4_packet_packet_udp_packet$$[3], $dbg_log$$("udp srcport=" + $dhcp_packet_ethertype_ipv4_version_source_port$$ + " dstport=" + $destination_port_dhcp_magic_offset$jscomp$47$$ + " checksum=" + $h$$($arp_packet_ipv4_packet_packet_udp_packet$$[6] << 8 | $arp_packet_ipv4_packet_packet_udp_packet$$[7], 4), 1048576), 67 === $dhcp_packet_ethertype_ipv4_version_source_port$$ || 67 === $destination_port_dhcp_magic_offset$jscomp$47$$)) { + if ($dhcp_packet_ethertype_ipv4_version_source_port$$ = $arp_packet_ipv4_packet_packet_udp_packet$$.subarray(8), $destination_port_dhcp_magic_offset$jscomp$47$$ = $dhcp_packet_ethertype_ipv4_version_source_port$$[236] << 24 | $dhcp_packet_ethertype_ipv4_version_source_port$$[237] << 16 | $dhcp_packet_ethertype_ipv4_version_source_port$$[238] << 8 | $dhcp_packet_ethertype_ipv4_version_source_port$$[239], 1669485411 !== $destination_port_dhcp_magic_offset$jscomp$47$$) { + $dbg_log$$("dhcp packet didn't match magic: " + $h$$($destination_port_dhcp_magic_offset$jscomp$47$$, 8)); + } else { + $dhcp_packet_ethertype_ipv4_version_source_port$$[28] === $search_mac$$[0] && $dhcp_packet_ethertype_ipv4_version_source_port$$[29] === $search_mac$$[1] && $dhcp_packet_ethertype_ipv4_version_source_port$$[30] === $search_mac$$[2] && $dhcp_packet_ethertype_ipv4_version_source_port$$[31] === $search_mac$$[3] && $dhcp_packet_ethertype_ipv4_version_source_port$$[32] === $search_mac$$[4] && $dhcp_packet_ethertype_ipv4_version_source_port$$[33] === $search_mac$$[5] && ($dbg_log$$("Replace mac in dhcp.chaddr", + 1048576), $dhcp_packet_ethertype_ipv4_version_source_port$$[28] = $replacement_mac$$[0], $dhcp_packet_ethertype_ipv4_version_source_port$$[29] = $replacement_mac$$[1], $dhcp_packet_ethertype_ipv4_version_source_port$$[30] = $replacement_mac$$[2], $dhcp_packet_ethertype_ipv4_version_source_port$$[31] = $replacement_mac$$[3], $dhcp_packet_ethertype_ipv4_version_source_port$$[32] = $replacement_mac$$[4], $dhcp_packet_ethertype_ipv4_version_source_port$$[33] = $replacement_mac$$[5], $arp_packet_ipv4_packet_packet_udp_packet$$[6] = + $arp_packet_ipv4_packet_packet_udp_packet$$[7] = 0); + for (var $destination_port_dhcp_magic_offset$jscomp$47$$ = 240; $destination_port_dhcp_magic_offset$jscomp$47$$ < $dhcp_packet_ethertype_ipv4_version_source_port$$.length;) { + const $dhcp_option_type$$ = $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$++]; + if (255 === $dhcp_option_type$$) { + break; + } + const $length$jscomp$24$$ = $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$++]; + 61 === $dhcp_option_type$$ && 1 === $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$ + 0] && $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$ + 1] === $search_mac$$[0] && $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$ + 2] === $search_mac$$[1] && $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$ + + 3] === $search_mac$$[2] && $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$ + 4] === $search_mac$$[3] && $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$ + 5] === $search_mac$$[4] && $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$ + 6] === $search_mac$$[5] && ($dbg_log$$("Replace mac in dhcp.clientidentifier", 1048576), $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$ + + 1] = $replacement_mac$$[0], $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$ + 2] = $replacement_mac$$[1], $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$ + 3] = $replacement_mac$$[2], $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$ + 4] = $replacement_mac$$[3], $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$ + + 5] = $replacement_mac$$[4], $dhcp_packet_ethertype_ipv4_version_source_port$$[$destination_port_dhcp_magic_offset$jscomp$47$$ + 6] = $replacement_mac$$[5], $arp_packet_ipv4_packet_packet_udp_packet$$[6] = $arp_packet_ipv4_packet_packet_udp_packet$$[7] = 0); + $destination_port_dhcp_magic_offset$jscomp$47$$ += $length$jscomp$24$$; + } + } + } + } + } else { + 2054 === $dhcp_packet_ethertype_ipv4_version_source_port$$ && ($arp_packet_ipv4_packet_packet_udp_packet$$ = $arp_packet_ipv4_packet_packet_udp_packet$$.subarray(14), $dbg_log$$("arp oper=" + $arp_packet_ipv4_packet_packet_udp_packet$$[7] + " " + $format_mac$$($arp_packet_ipv4_packet_packet_udp_packet$$.subarray(8, 14)) + " " + $format_mac$$($arp_packet_ipv4_packet_packet_udp_packet$$.subarray(18, 24)), 1048576), $arp_packet_ipv4_packet_packet_udp_packet$$[8] === $search_mac$$[0] && $arp_packet_ipv4_packet_packet_udp_packet$$[9] === + $search_mac$$[1] && $arp_packet_ipv4_packet_packet_udp_packet$$[10] === $search_mac$$[2] && $arp_packet_ipv4_packet_packet_udp_packet$$[11] === $search_mac$$[3] && $arp_packet_ipv4_packet_packet_udp_packet$$[12] === $search_mac$$[4] && $arp_packet_ipv4_packet_packet_udp_packet$$[13] === $search_mac$$[5] && ($dbg_log$$("Replace mac in arp.sha", 1048576), $arp_packet_ipv4_packet_packet_udp_packet$$[8] = $replacement_mac$$[0], $arp_packet_ipv4_packet_packet_udp_packet$$[9] = $replacement_mac$$[1], + $arp_packet_ipv4_packet_packet_udp_packet$$[10] = $replacement_mac$$[2], $arp_packet_ipv4_packet_packet_udp_packet$$[11] = $replacement_mac$$[3], $arp_packet_ipv4_packet_packet_udp_packet$$[12] = $replacement_mac$$[4], $arp_packet_ipv4_packet_packet_udp_packet$$[13] = $replacement_mac$$[5])); + } +} +function $format_mac$$($mac$$) { + return [$mac$$[0].toString(16).padStart(2, "0"), $mac$$[1].toString(16).padStart(2, "0"), $mac$$[2].toString(16).padStart(2, "0"), $mac$$[3].toString(16).padStart(2, "0"), $mac$$[4].toString(16).padStart(2, "0"), $mac$$[5].toString(16).padStart(2, "0"), ].join(":"); +} +function $Ne2k$$($cpu$jscomp$16$$, $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$, $preserve_mac_from_state_image$$, $mac_address_translation$$, $id$jscomp$9$$) { + this.cpu = $cpu$jscomp$16$$; + this.pci = $cpu$jscomp$16$$.devices.pci; + this.id = $id$jscomp$9$$ || 0; + this.preserve_mac_from_state_image = $preserve_mac_from_state_image$$; + this.mac_address_translation = $mac_address_translation$$; + this.bus = $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$; + this.bus.register("net" + this.id + "-receive", function($data$jscomp$132$$) { + this.receive($data$jscomp$132$$); + }, this); + this.port = 768 + 256 * this.id; + this.name = "ne2k"; + this.pci_space = [236, 16, 41, 128, 3, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, this.port & 255 | 1, this.port >> 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 26, 0, 17, 0, 0, 184, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, ]; + this.pci_id = (0 === this.id ? 5 : 7 + this.id) << 3; + this.pci_bars = [{size:32, }, ]; + this.imr = this.isr = 0; + this.cr = 1; + this.tpsr = this.tcnt = this.rcnt = this.dcfg = 0; + this.memory = new Uint8Array(32768); + this.txcr = this.rxcr = 0; + this.tsr = 1; + this.mac = new Uint8Array([0, 34, 21, 255 * Math.random() | 0, 255 * Math.random() | 0, 255 * Math.random() | 0, ]); + this.bus.send("net" + this.id + "-mac", $format_mac$$(this.mac)); + this.mar = Uint8Array.of(255, 255, 255, 255, 255, 255, 255, 255); + this.mac_address_in_state = null; + for ($bus$jscomp$8_i$jscomp$43_io$jscomp$4$$ = 0; 6 > $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$; $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$++) { + this.memory[$bus$jscomp$8_i$jscomp$43_io$jscomp$4$$ << 1] = this.memory[$bus$jscomp$8_i$jscomp$43_io$jscomp$4$$ << 1 | 1] = this.mac[$bus$jscomp$8_i$jscomp$43_io$jscomp$4$$]; + } + this.memory[28] = this.memory[29] = 87; + this.memory[30] = this.memory[31] = 87; + $dbg_log$$("Mac: " + $format_mac$$(this.mac), 1048576); + this.rsar = 0; + this.pstart = 64; + this.pstop = 128; + this.boundary = this.curpg = 76; + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$ = $cpu$jscomp$16$$.io; + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 0, this, function() { + $dbg_log$$("Read cmd", 1048576); + return this.cr; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 0, this, function($data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$) { + this.cr = $data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$; + $dbg_log$$("Write command: " + $h$$($data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$, 2) + " newpg=" + (this.cr >> 6) + " txcr=" + $h$$(this.txcr, 2), 1048576); + this.cr & 1 || ($data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$ & 24 && 0 === this.rcnt && this.do_interrupt(64), $data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$ & 4 && ($data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$ = this.tpsr << 8, $data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$ = this.memory.subarray($data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$, $data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$ + this.tcnt), this.mac_address_in_state && ($data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$ = + new Uint8Array($data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$), $translate_mac_address$$($data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$, this.mac_address_in_state, this.mac)), this.bus.send("net" + this.id + "-send", $data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$), this.bus.send("eth-transmit-end", [$data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$.length]), this.cr &= -5, this.do_interrupt(2), $dbg_log$$("Command: Transfer. length=" + $h$$($data$jscomp$133_data_byte$jscomp$12_start$jscomp$35$$.byteLength), + 1048576))); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 13, this, function() { + var $pg$$ = this.get_page(); + if (1 === $pg$$) { + return $dbg_log$$("Read mar5", 1048576), this.mar[5]; + } + $dbg_log$$("Read counter0 pg=" + $pg$$, 1048576); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 14, this, function() { + var $pg$jscomp$1$$ = this.get_page(); + if (1 === $pg$jscomp$1$$) { + return $dbg_log$$("Read mar6", 1048576), this.mar[6]; + } + $dbg_log$$("Read8 counter1 pg=" + $pg$jscomp$1$$, 1048576); + return 0; + }, function() { + $dbg_log$$("Read16 counter1 pg=" + this.get_page(), 1048576); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 15, this, function() { + var $pg$jscomp$2$$ = this.get_page(); + if (1 === $pg$jscomp$2$$) { + return $dbg_log$$("Read mar7", 1048576), this.mar[7]; + } + $dbg_log$$("Read counter2 pg=" + $pg$jscomp$2$$, 1048576); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 31, this, function() { + this.get_page(); + $dbg_log$$("Read reset", 1048576); + this.do_interrupt(128); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 31, this, function($data_byte$jscomp$13$$) { + this.get_page(); + $dbg_log$$("Write reset: " + $h$$($data_byte$jscomp$13$$, 2), 1048576); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 1, this, function() { + var $pg$jscomp$5$$ = this.get_page(); + if (0 === $pg$jscomp$5$$) { + return this.pstart; + } + if (1 === $pg$jscomp$5$$) { + return $dbg_log$$("Read pg1/01 (mac[0])", 1048576), this.mac[0]; + } + if (2 === $pg$jscomp$5$$) { + return this.pstart; + } + $dbg_log$$("Read pg" + $pg$jscomp$5$$ + "/01"); + $dbg_assert$$(!1); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 1, this, function($data_byte$jscomp$14$$) { + var $pg$jscomp$6$$ = this.get_page(); + 0 === $pg$jscomp$6$$ ? ($dbg_log$$("start page: " + $h$$($data_byte$jscomp$14$$, 2), 1048576), this.pstart = $data_byte$jscomp$14$$) : 1 === $pg$jscomp$6$$ ? ($dbg_log$$("mac[0] = " + $h$$($data_byte$jscomp$14$$), 1048576), this.mac[0] = $data_byte$jscomp$14$$) : 3 === $pg$jscomp$6$$ ? $dbg_log$$("Unimplemented: Write pg3/01 (9346CR): " + $h$$($data_byte$jscomp$14$$), 1048576) : ($dbg_log$$("Write pg" + $pg$jscomp$6$$ + "/01: " + $h$$($data_byte$jscomp$14$$), 1048576), $dbg_assert$$(!1)); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 2, this, function() { + var $pg$jscomp$7$$ = this.get_page(); + if (0 === $pg$jscomp$7$$) { + return this.pstop; + } + if (1 === $pg$jscomp$7$$) { + return $dbg_log$$("Read pg1/02 (mac[1])", 1048576), this.mac[1]; + } + if (2 === $pg$jscomp$7$$) { + return this.pstop; + } + $dbg_log$$("Read pg" + $pg$jscomp$7$$ + "/02", 1048576); + $dbg_assert$$(!1); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 2, this, function($data_byte$jscomp$15$$) { + var $pg$jscomp$8$$ = this.get_page(); + 0 === $pg$jscomp$8$$ ? ($dbg_log$$("stop page: " + $h$$($data_byte$jscomp$15$$, 2), 1048576), $data_byte$jscomp$15$$ > this.memory.length >> 8 && ($data_byte$jscomp$15$$ = this.memory.length >> 8, $dbg_log$$("XXX: Adjusting stop page to " + $h$$($data_byte$jscomp$15$$), 1048576)), this.pstop = $data_byte$jscomp$15$$) : 1 === $pg$jscomp$8$$ ? ($dbg_log$$("mac[1] = " + $h$$($data_byte$jscomp$15$$), 1048576), this.mac[1] = $data_byte$jscomp$15$$) : ($dbg_log$$("Write pg" + $pg$jscomp$8$$ + "/02: " + + $h$$($data_byte$jscomp$15$$), 1048576), $dbg_assert$$(!1)); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 7, this, function() { + var $pg$jscomp$9$$ = this.get_page(); + if (0 === $pg$jscomp$9$$) { + return $dbg_log$$("Read isr: " + $h$$(this.isr, 2), 1048576), this.isr; + } + if (1 === $pg$jscomp$9$$) { + return $dbg_log$$("Read curpg: " + $h$$(this.curpg, 2), 1048576), this.curpg; + } + $dbg_assert$$(!1); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 7, this, function($data_byte$jscomp$16$$) { + var $pg$jscomp$10$$ = this.get_page(); + 0 === $pg$jscomp$10$$ ? ($dbg_log$$("Write isr: " + $h$$($data_byte$jscomp$16$$, 2), 1048576), this.isr &= ~$data_byte$jscomp$16$$, this.update_irq()) : 1 === $pg$jscomp$10$$ ? ($dbg_log$$("Write curpg: " + $h$$($data_byte$jscomp$16$$, 2), 1048576), this.curpg = $data_byte$jscomp$16$$) : $dbg_assert$$(!1); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 13, this, function($data_byte$jscomp$17$$) { + var $pg$jscomp$11$$ = this.get_page(); + 0 === $pg$jscomp$11$$ ? (this.txcr = $data_byte$jscomp$17$$, $dbg_log$$("Write tx config: " + $h$$($data_byte$jscomp$17$$, 2), 1048576)) : $dbg_log$$("Unimplemented: Write pg" + $pg$jscomp$11$$ + "/0d " + $h$$($data_byte$jscomp$17$$, 2), 1048576); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 14, this, function($data_byte$jscomp$18$$) { + var $pg$jscomp$12$$ = this.get_page(); + 0 === $pg$jscomp$12$$ ? ($dbg_log$$("Write data configuration: " + $h$$($data_byte$jscomp$18$$, 2), 1048576), this.dcfg = $data_byte$jscomp$18$$) : $dbg_log$$("Unimplemented: Write pg" + $pg$jscomp$12$$ + "/0e " + $h$$($data_byte$jscomp$18$$, 2), 1048576); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 10, this, function() { + var $pg$jscomp$13$$ = this.get_page(); + if (0 === $pg$jscomp$13$$) { + return $dbg_log$$("Read pg0/0a", 1048576), 80; + } + if (1 === $pg$jscomp$13$$) { + return $dbg_log$$("Read mar2", 1048576), this.mar[2]; + } + $dbg_assert$$(!1, "TODO"); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 10, this, function($data_byte$jscomp$19$$) { + var $pg$jscomp$14$$ = this.get_page(); + 0 === $pg$jscomp$14$$ ? ($dbg_log$$("Write remote byte count low: " + $h$$($data_byte$jscomp$19$$, 2), 1048576), this.rcnt = this.rcnt & 65280 | $data_byte$jscomp$19$$ & 255) : $dbg_log$$("Unimplemented: Write pg" + $pg$jscomp$14$$ + "/0a " + $h$$($data_byte$jscomp$19$$, 2), 1048576); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 11, this, function() { + var $pg$jscomp$15$$ = this.get_page(); + if (0 === $pg$jscomp$15$$) { + return $dbg_log$$("Read pg0/0b", 1048576), 67; + } + if (1 === $pg$jscomp$15$$) { + return $dbg_log$$("Read mar3", 1048576), this.mar[3]; + } + $dbg_assert$$(!1, "TODO"); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 11, this, function($data_byte$jscomp$20$$) { + var $pg$jscomp$16$$ = this.get_page(); + 0 === $pg$jscomp$16$$ ? ($dbg_log$$("Write remote byte count high: " + $h$$($data_byte$jscomp$20$$, 2), 1048576), this.rcnt = this.rcnt & 255 | $data_byte$jscomp$20$$ << 8 & 65280) : $dbg_log$$("Unimplemented: Write pg" + $pg$jscomp$16$$ + "/0b " + $h$$($data_byte$jscomp$20$$, 2), 1048576); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 8, this, function() { + var $pg$jscomp$17$$ = this.get_page(); + if (0 === $pg$jscomp$17$$) { + return $dbg_log$$("Read remote start address low", 1048576), this.rsar & 255; + } + if (1 === $pg$jscomp$17$$) { + return $dbg_log$$("Read mar0", 1048576), this.mar[0]; + } + $dbg_log$$("Unimplemented: Read pg" + $pg$jscomp$17$$ + "/08", 1048576); + $dbg_assert$$(!1); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 8, this, function($data_byte$jscomp$21$$) { + var $pg$jscomp$18$$ = this.get_page(); + 0 === $pg$jscomp$18$$ ? ($dbg_log$$("Write remote start address low: " + $h$$($data_byte$jscomp$21$$, 2), 1048576), this.rsar = this.rsar & 65280 | $data_byte$jscomp$21$$ & 255) : $dbg_log$$("Unimplemented: Write pg" + $pg$jscomp$18$$ + "/08 " + $h$$($data_byte$jscomp$21$$, 2), 1048576); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 9, this, function() { + var $pg$jscomp$19$$ = this.get_page(); + if (0 === $pg$jscomp$19$$) { + return $dbg_log$$("Read remote start address high", 1048576), this.rsar >> 8 & 255; + } + if (1 === $pg$jscomp$19$$) { + return $dbg_log$$("Read mar1", 1048576), this.mar[1]; + } + $dbg_log$$("Unimplemented: Read pg" + $pg$jscomp$19$$ + "/09", 1048576); + $dbg_assert$$(!1); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 9, this, function($data_byte$jscomp$22$$) { + var $pg$jscomp$20$$ = this.get_page(); + 0 === $pg$jscomp$20$$ ? ($dbg_log$$("Write remote start address low: " + $h$$($data_byte$jscomp$22$$, 2), 1048576), this.rsar = this.rsar & 255 | $data_byte$jscomp$22$$ << 8 & 65280) : $dbg_log$$("Unimplemented: Write pg" + $pg$jscomp$20$$ + "/09 " + $h$$($data_byte$jscomp$22$$, 2), 1048576); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 15, this, function($data_byte$jscomp$23$$) { + var $pg$jscomp$21$$ = this.get_page(); + 0 === $pg$jscomp$21$$ ? ($dbg_log$$("Write interrupt mask register: " + $h$$($data_byte$jscomp$23$$, 2) + " isr=" + $h$$(this.isr, 2), 1048576), this.imr = $data_byte$jscomp$23$$, this.update_irq()) : $dbg_log$$("Unimplemented: Write pg" + $pg$jscomp$21$$ + "/0f " + $h$$($data_byte$jscomp$23$$, 2), 1048576); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 3, this, function() { + var $pg$jscomp$22$$ = this.get_page(); + if (0 === $pg$jscomp$22$$) { + return $dbg_log$$("Read boundary: " + $h$$(this.boundary, 2), 1048576), this.boundary; + } + if (1 === $pg$jscomp$22$$) { + return $dbg_log$$("Read pg1/03 (mac[2])", 1048576), this.mac[2]; + } + 3 === $pg$jscomp$22$$ ? $dbg_log$$("Unimplemented: Read pg3/03 (CONFIG0)", 1048576) : ($dbg_log$$("Read pg" + $pg$jscomp$22$$ + "/03", 1048576), $dbg_assert$$(!1)); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 3, this, function($data_byte$jscomp$24$$) { + var $pg$jscomp$23$$ = this.get_page(); + 0 === $pg$jscomp$23$$ ? ($dbg_log$$("Write boundary: " + $h$$($data_byte$jscomp$24$$, 2), 1048576), this.boundary = $data_byte$jscomp$24$$) : 1 === $pg$jscomp$23$$ ? ($dbg_log$$("mac[2] = " + $h$$($data_byte$jscomp$24$$), 1048576), this.mac[2] = $data_byte$jscomp$24$$) : ($dbg_log$$("Write pg" + $pg$jscomp$23$$ + "/03: " + $h$$($data_byte$jscomp$24$$), 1048576), $dbg_assert$$(!1)); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 4, this, function() { + var $pg$jscomp$24$$ = this.get_page(); + if (0 === $pg$jscomp$24$$) { + return this.tsr; + } + if (1 === $pg$jscomp$24$$) { + return $dbg_log$$("Read pg1/04 (mac[3])", 1048576), this.mac[3]; + } + $dbg_log$$("Read pg" + $pg$jscomp$24$$ + "/04", 1048576); + $dbg_assert$$(!1); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 4, this, function($data_byte$jscomp$25$$) { + var $pg$jscomp$25$$ = this.get_page(); + 0 === $pg$jscomp$25$$ ? ($dbg_log$$("Write tpsr: " + $h$$($data_byte$jscomp$25$$, 2), 1048576), this.tpsr = $data_byte$jscomp$25$$) : 1 === $pg$jscomp$25$$ ? ($dbg_log$$("mac[3] = " + $h$$($data_byte$jscomp$25$$), 1048576), this.mac[3] = $data_byte$jscomp$25$$) : ($dbg_log$$("Write pg" + $pg$jscomp$25$$ + "/04: " + $h$$($data_byte$jscomp$25$$), 1048576), $dbg_assert$$(!1)); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 5, this, function() { + var $pg$jscomp$26$$ = this.get_page(); + if (0 === $pg$jscomp$26$$) { + return $dbg_log$$("Unimplemented: Read pg0/05 (NCR: Number of Collisions Register)", 1048576), 0; + } + if (1 === $pg$jscomp$26$$) { + return $dbg_log$$("Read pg1/05 (mac[4])", 1048576), this.mac[4]; + } + 3 === $pg$jscomp$26$$ ? $dbg_log$$("Unimplemented: Read pg3/05 (CONFIG2)", 1048576) : ($dbg_log$$("Read pg" + $pg$jscomp$26$$ + "/05", 1048576), $dbg_assert$$(!1)); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 5, this, function($data_byte$jscomp$26$$) { + var $pg$jscomp$27$$ = this.get_page(); + 0 === $pg$jscomp$27$$ ? ($dbg_log$$("Write tcnt low: " + $h$$($data_byte$jscomp$26$$, 2), 1048576), this.tcnt = this.tcnt & -256 | $data_byte$jscomp$26$$) : 1 === $pg$jscomp$27$$ ? ($dbg_log$$("mac[4] = " + $h$$($data_byte$jscomp$26$$), 1048576), this.mac[4] = $data_byte$jscomp$26$$) : 3 === $pg$jscomp$27$$ ? $dbg_log$$("Unimplemented: Write pg3/05 (CONFIG2): " + $h$$($data_byte$jscomp$26$$), 1048576) : ($dbg_log$$("Write pg" + $pg$jscomp$27$$ + "/05: " + $h$$($data_byte$jscomp$26$$), 1048576), + $dbg_assert$$(!1)); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 6, this, function() { + var $pg$jscomp$28$$ = this.get_page(); + if (0 === $pg$jscomp$28$$) { + return $dbg_assert$$(!1, "TODO"), 0; + } + if (1 === $pg$jscomp$28$$) { + return $dbg_log$$("Read pg1/06 (mac[5])", 1048576), this.mac[5]; + } + 3 === $pg$jscomp$28$$ ? $dbg_log$$("Unimplemented: Read pg3/06 (CONFIG3)", 1048576) : ($dbg_log$$("Read pg" + $pg$jscomp$28$$ + "/06", 1048576), $dbg_assert$$(!1)); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 6, this, function($data_byte$jscomp$27$$) { + var $pg$jscomp$29$$ = this.get_page(); + 0 === $pg$jscomp$29$$ ? ($dbg_log$$("Write tcnt high: " + $h$$($data_byte$jscomp$27$$, 2), 1048576), this.tcnt = this.tcnt & 255 | $data_byte$jscomp$27$$ << 8) : 1 === $pg$jscomp$29$$ ? ($dbg_log$$("mac[5] = " + $h$$($data_byte$jscomp$27$$), 1048576), this.mac[5] = $data_byte$jscomp$27$$) : 3 === $pg$jscomp$29$$ ? $dbg_log$$("Unimplemented: Write pg3/06 (CONFIG3): " + $h$$($data_byte$jscomp$27$$), 1048576) : ($dbg_log$$("Write pg" + $pg$jscomp$29$$ + "/06: " + $h$$($data_byte$jscomp$27$$), 1048576), + $dbg_assert$$(!1)); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 12, this, function() { + var $pg$jscomp$30$$ = this.get_page(); + if (0 === $pg$jscomp$30$$) { + return 9; + } + if (1 === $pg$jscomp$30$$) { + return $dbg_log$$("Read mar4", 1048576), this.mar[4]; + } + $dbg_log$$("Unimplemented: Read pg" + $pg$jscomp$30$$ + "/0c", 1048576); + $dbg_assert$$(!1); + return 0; + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 12, this, function($data_byte$jscomp$28$$) { + var $pg$jscomp$31$$ = this.get_page(); + 0 === $pg$jscomp$31$$ ? ($dbg_log$$("RX configuration reg write: " + $h$$($data_byte$jscomp$28$$, 2), 1048576), this.rxcr = $data_byte$jscomp$28$$) : $dbg_log$$("Unimplemented: Write pg" + $pg$jscomp$31$$ + "/0c: " + $h$$($data_byte$jscomp$28$$), 1048576); + }); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_read(this.port | 16, this, this.data_port_read8, this.data_port_read16, this.data_port_read32); + $bus$jscomp$8_i$jscomp$43_io$jscomp$4$$.register_write(this.port | 16, this, this.data_port_write16, this.data_port_write16, this.data_port_write32); + $cpu$jscomp$16$$.devices.pci.register_device(this); +} +$Ne2k$$.prototype.get_state = function() { + var $state$jscomp$37$$ = []; + $state$jscomp$37$$[0] = this.isr; + $state$jscomp$37$$[1] = this.imr; + $state$jscomp$37$$[2] = this.cr; + $state$jscomp$37$$[3] = this.dcfg; + $state$jscomp$37$$[4] = this.rcnt; + $state$jscomp$37$$[5] = this.tcnt; + $state$jscomp$37$$[6] = this.tpsr; + $state$jscomp$37$$[7] = this.rsar; + $state$jscomp$37$$[8] = this.pstart; + $state$jscomp$37$$[9] = this.curpg; + $state$jscomp$37$$[10] = this.boundary; + $state$jscomp$37$$[11] = this.pstop; + $state$jscomp$37$$[12] = this.rxcr; + $state$jscomp$37$$[13] = this.txcr; + $state$jscomp$37$$[14] = this.tsr; + $state$jscomp$37$$[15] = this.mac; + $state$jscomp$37$$[16] = this.memory; + return $state$jscomp$37$$; +}; +$Ne2k$$.prototype.set_state = function($state$jscomp$38$$) { + this.isr = $state$jscomp$38$$[0]; + this.imr = $state$jscomp$38$$[1]; + this.cr = $state$jscomp$38$$[2]; + this.dcfg = $state$jscomp$38$$[3]; + this.rcnt = $state$jscomp$38$$[4]; + this.tcnt = $state$jscomp$38$$[5]; + this.tpsr = $state$jscomp$38$$[6]; + this.rsar = $state$jscomp$38$$[7]; + this.pstart = $state$jscomp$38$$[8]; + this.curpg = $state$jscomp$38$$[9]; + this.boundary = $state$jscomp$38$$[10]; + this.pstop = $state$jscomp$38$$[11]; + this.rxcr = $state$jscomp$38$$[12]; + this.txcr = $state$jscomp$38$$[13]; + this.tsr = $state$jscomp$38$$[14]; + this.preserve_mac_from_state_image ? (this.mac = $state$jscomp$38$$[15], this.memory = $state$jscomp$38$$[16]) : this.mac_address_translation && (this.mac_address_in_state = $state$jscomp$38$$[15], this.memory = $state$jscomp$38$$[16], $dbg_log$$("Using mac address translation guest_os_mac=" + $format_mac$$(this.mac_address_in_state) + " real_mac=" + $format_mac$$(this.mac), 1048576)); + this.bus.send("net" + this.id + "-mac", $format_mac$$(this.mac)); +}; +$Ne2k$$.prototype.do_interrupt = function($ir_mask$$) { + $dbg_log$$("Do interrupt " + $h$$($ir_mask$$, 2), 1048576); + this.isr |= $ir_mask$$; + this.update_irq(); +}; +$Ne2k$$.prototype.update_irq = function() { + this.imr & this.isr ? this.pci.raise_irq(this.pci_id) : this.pci.lower_irq(this.pci_id); +}; +$Ne2k$$.prototype.data_port_write = function($data_byte$jscomp$29$$) { + if (16 >= this.rsar || 16384 <= this.rsar && 32768 > this.rsar) { + this.memory[this.rsar] = $data_byte$jscomp$29$$; + } + this.rsar++; + this.rcnt--; + this.rsar >= this.pstop << 8 && (this.rsar += this.pstart - this.pstop << 8); + 0 === this.rcnt && this.do_interrupt(64); +}; +$Ne2k$$.prototype.data_port_write16 = function($data$jscomp$134$$) { + this.data_port_write($data$jscomp$134$$); + this.dcfg & 1 && this.data_port_write($data$jscomp$134$$ >> 8); +}; +$Ne2k$$.prototype.data_port_write32 = function($data$jscomp$135$$) { + this.data_port_write($data$jscomp$135$$); + this.data_port_write($data$jscomp$135$$ >> 8); + this.data_port_write($data$jscomp$135$$ >> 16); + this.data_port_write($data$jscomp$135$$ >> 24); +}; +$Ne2k$$.prototype.data_port_read = function() { + let $data$jscomp$136$$ = 0; + 32768 > this.rsar && ($data$jscomp$136$$ = this.memory[this.rsar]); + this.rsar++; + this.rcnt--; + this.rsar >= this.pstop << 8 && (this.rsar += this.pstart - this.pstop << 8); + 0 === this.rcnt && this.do_interrupt(64); + return $data$jscomp$136$$; +}; +$Ne2k$$.prototype.data_port_read8 = function() { + return this.data_port_read16() & 255; +}; +$Ne2k$$.prototype.data_port_read16 = function() { + return this.dcfg & 1 ? this.data_port_read() | this.data_port_read() << 8 : this.data_port_read(); +}; +$Ne2k$$.prototype.data_port_read32 = function() { + return this.data_port_read() | this.data_port_read() << 8 | this.data_port_read() << 16 | this.data_port_read() << 24; +}; +$Ne2k$$.prototype.receive = function($data$jscomp$137$$) { + if (!(this.cr & 1) && (this.bus.send("eth-receive-end", [$data$jscomp$137$$.length]), this.rxcr & 16 || this.rxcr & 4 && 255 === $data$jscomp$137$$[0] && 255 === $data$jscomp$137$$[1] && 255 === $data$jscomp$137$$[2] && 255 === $data$jscomp$137$$[3] && 255 === $data$jscomp$137$$[4] && 255 === $data$jscomp$137$$[5] || !(this.rxcr & 8 && 1 === ($data$jscomp$137$$[0] & 1) || $data$jscomp$137$$[0] !== this.mac[0] || $data$jscomp$137$$[1] !== this.mac[1] || $data$jscomp$137$$[2] !== this.mac[2] || $data$jscomp$137$$[3] !== + this.mac[3] || $data$jscomp$137$$[4] !== this.mac[4] || $data$jscomp$137$$[5] !== this.mac[5]))) { + this.mac_address_in_state && ($data$jscomp$137$$ = new Uint8Array($data$jscomp$137$$), $translate_mac_address$$($data$jscomp$137$$, this.mac, this.mac_address_in_state)); + var $offset$jscomp$48$$ = this.curpg << 8, $total_length$$ = Math.max(60, $data$jscomp$137$$.length) + 4, $data_start$$ = $offset$jscomp$48$$ + 4, $next$$ = this.curpg + 1 + ($total_length$$ >> 8), $cut_end$jscomp$19$$ = $offset$jscomp$48$$ + $total_length$$, $needed$$ = 1 + ($total_length$$ >> 8), $available$$ = this.boundary > this.curpg ? this.boundary - this.curpg : this.pstop - this.curpg + this.boundary - this.pstart; + $available$$ < $needed$$ && 0 !== this.boundary ? $dbg_log$$("Buffer full, dropping packet pstart=" + $h$$(this.pstart) + " pstop=" + $h$$(this.pstop) + " curpg=" + $h$$(this.curpg) + " needed=" + $h$$($needed$$) + " boundary=" + $h$$(this.boundary) + " available=" + $h$$($available$$), 1048576) : ($cut_end$jscomp$19$$ > this.pstop << 8 ? ($dbg_assert$$(60 <= $data$jscomp$137$$.length), $cut_end$jscomp$19$$ = (this.pstop << 8) - $data_start$$, $dbg_assert$$(0 <= $cut_end$jscomp$19$$), this.memory.set($data$jscomp$137$$.subarray(0, + $cut_end$jscomp$19$$), $data_start$$), this.memory.set($data$jscomp$137$$.subarray($cut_end$jscomp$19$$), this.pstart << 8), $dbg_log$$("rcv cut=" + $h$$($cut_end$jscomp$19$$), 1048576)) : (this.memory.set($data$jscomp$137$$, $data_start$$), 60 > $data$jscomp$137$$.length && this.memory.fill(0, $data_start$$ + $data$jscomp$137$$.length, $data_start$$ + 60)), $next$$ >= this.pstop && ($next$$ += this.pstart - this.pstop), this.memory[$offset$jscomp$48$$] = 1, this.memory[$offset$jscomp$48$$ + + 1] = $next$$, this.memory[$offset$jscomp$48$$ + 2] = $total_length$$, this.memory[$offset$jscomp$48$$ + 3] = $total_length$$ >> 8, this.curpg = $next$$, $dbg_log$$("rcv offset=" + $h$$($offset$jscomp$48$$) + " len=" + $h$$($total_length$$) + " next=" + $h$$($next$$), 1048576), this.do_interrupt(1)); + } +}; +$Ne2k$$.prototype.get_page = function() { + return this.cr >> 6 & 3; +}; +var $DSP_COMMAND_SIZES$$ = new Uint8Array(256), $DSP_COMMAND_HANDLERS$$ = [], $MIXER_READ_HANDLERS$$ = [], $MIXER_WRITE_HANDLERS$$ = [], $MIXER_REGISTER_IS_LEGACY$$ = new Uint8Array(256), $FM_HANDLERS$$ = []; +function $SB16$$($cpu$jscomp$17$$, $bus$jscomp$9$$) { + this.cpu = $cpu$jscomp$17$$; + this.bus = $bus$jscomp$9$$; + this.write_buffer = new $ByteQueue$$(64); + this.read_buffer = new $ByteQueue$$(64); + this.mixer_current_address = this.command_size = this.command = this.read_buffer_lastvalue = 0; + this.mixer_registers = new Uint8Array(256); + this.mixer_reset(); + this.dummy_speaker_enabled = !1; + this.test_register = 0; + this.dsp_signed = this.dsp_16bit = this.dsp_stereo = this.dsp_highspeed = !1; + this.dac_buffers = [new $FloatQueue$$(65536), new $FloatQueue$$(65536), ]; + this.dma = $cpu$jscomp$17$$.devices.dma; + this.dma_channel = this.dma_irq = this.dma_bytes_block = this.dma_bytes_left = this.dma_bytes_count = this.dma_sample_count = 0; + this.dma_channel_8bit = 1; + this.dma_channel_16bit = 5; + this.dma_autoinit = !1; + this.dma_buffer = new ArrayBuffer(65536); + this.dma_buffer_int8 = new Int8Array(this.dma_buffer); + this.dma_buffer_uint8 = new Uint8Array(this.dma_buffer); + this.dma_buffer_int16 = new Int16Array(this.dma_buffer); + this.dma_buffer_uint16 = new Uint16Array(this.dma_buffer); + this.dma_syncbuffer = new $v86util$$.SyncBuffer(this.dma_buffer); + this.dma_paused = this.dma_waiting_transfer = !1; + this.sampling_rate = 22050; + $bus$jscomp$9$$.send("dac-tell-sampling-rate", this.sampling_rate); + this.bytes_per_sample = 1; + this.e2_value = 170; + this.e2_count = 0; + this.asp_registers = new Uint8Array(256); + this.mpu_read_buffer = new $ByteQueue$$(64); + this.fm_current_address1 = this.fm_current_address0 = this.mpu_read_buffer_lastvalue = 0; + this.fm_waveform_select_enable = !1; + this.irq = 5; + this.irq_triggered = new Uint8Array(16); + $cpu$jscomp$17$$.io.register_read_consecutive(544, this, this.port2x0_read, this.port2x1_read, this.port2x2_read, this.port2x3_read); + $cpu$jscomp$17$$.io.register_read_consecutive(904, this, this.port2x0_read, this.port2x1_read); + $cpu$jscomp$17$$.io.register_read_consecutive(548, this, this.port2x4_read, this.port2x5_read); + $cpu$jscomp$17$$.io.register_read(550, this, this.port2x6_read); + $cpu$jscomp$17$$.io.register_read(551, this, this.port2x7_read); + $cpu$jscomp$17$$.io.register_read(552, this, this.port2x8_read); + $cpu$jscomp$17$$.io.register_read(553, this, this.port2x9_read); + $cpu$jscomp$17$$.io.register_read(554, this, this.port2xA_read); + $cpu$jscomp$17$$.io.register_read(555, this, this.port2xB_read); + $cpu$jscomp$17$$.io.register_read(556, this, this.port2xC_read); + $cpu$jscomp$17$$.io.register_read(557, this, this.port2xD_read); + $cpu$jscomp$17$$.io.register_read_consecutive(558, this, this.port2xE_read, this.port2xF_read); + $cpu$jscomp$17$$.io.register_write_consecutive(544, this, this.port2x0_write, this.port2x1_write, this.port2x2_write, this.port2x3_write); + $cpu$jscomp$17$$.io.register_write_consecutive(904, this, this.port2x0_write, this.port2x1_write); + $cpu$jscomp$17$$.io.register_write_consecutive(548, this, this.port2x4_write, this.port2x5_write); + $cpu$jscomp$17$$.io.register_write(550, this, this.port2x6_write); + $cpu$jscomp$17$$.io.register_write(551, this, this.port2x7_write); + $cpu$jscomp$17$$.io.register_write_consecutive(552, this, this.port2x8_write, this.port2x9_write); + $cpu$jscomp$17$$.io.register_write(554, this, this.port2xA_write); + $cpu$jscomp$17$$.io.register_write(555, this, this.port2xB_write); + $cpu$jscomp$17$$.io.register_write(556, this, this.port2xC_write); + $cpu$jscomp$17$$.io.register_write(557, this, this.port2xD_write); + $cpu$jscomp$17$$.io.register_write(558, this, this.port2xE_write); + $cpu$jscomp$17$$.io.register_write(559, this, this.port2xF_write); + $cpu$jscomp$17$$.io.register_read_consecutive(816, this, this.port3x0_read, this.port3x1_read); + $cpu$jscomp$17$$.io.register_write_consecutive(816, this, this.port3x0_write, this.port3x1_write); + this.dma.on_unmask(this.dma_on_unmask, this); + $bus$jscomp$9$$.register("dac-request-data", function() { + this.dac_handle_request(); + }, this); + $bus$jscomp$9$$.register("speaker-has-initialized", function() { + this.mixer_reset(); + }, this); + $bus$jscomp$9$$.send("speaker-confirm-initialized"); + this.dsp_reset(); +} +$SB16$$.prototype.dsp_reset = function() { + this.write_buffer.clear(); + this.read_buffer.clear(); + this.command_size = this.command = 0; + this.dummy_speaker_enabled = !1; + this.test_register = 0; + this.dsp_signed = this.dsp_16bit = this.dsp_stereo = this.dsp_highspeed = !1; + this.dac_buffers[0].clear(); + this.dac_buffers[1].clear(); + this.dma_channel = this.dma_irq = this.dma_bytes_block = this.dma_bytes_left = this.dma_bytes_count = this.dma_sample_count = 0; + this.dma_autoinit = !1; + this.dma_buffer_uint8.fill(0); + this.dma_paused = this.dma_waiting_transfer = !1; + this.e2_value = 170; + this.e2_count = 0; + this.sampling_rate = 22050; + this.bytes_per_sample = 1; + this.lower_irq(1); + this.irq_triggered.fill(0); + this.asp_registers.fill(0); + this.asp_registers[5] = 1; + this.asp_registers[9] = 248; +}; +$SB16$$.prototype.get_state = function() { + var $state$jscomp$39$$ = []; + $state$jscomp$39$$[2] = this.read_buffer_lastvalue; + $state$jscomp$39$$[3] = this.command; + $state$jscomp$39$$[4] = this.command_size; + $state$jscomp$39$$[5] = this.mixer_current_address; + $state$jscomp$39$$[6] = this.mixer_registers; + $state$jscomp$39$$[7] = this.dummy_speaker_enabled; + $state$jscomp$39$$[8] = this.test_register; + $state$jscomp$39$$[9] = this.dsp_highspeed; + $state$jscomp$39$$[10] = this.dsp_stereo; + $state$jscomp$39$$[11] = this.dsp_16bit; + $state$jscomp$39$$[12] = this.dsp_signed; + $state$jscomp$39$$[15] = this.dma_sample_count; + $state$jscomp$39$$[16] = this.dma_bytes_count; + $state$jscomp$39$$[17] = this.dma_bytes_left; + $state$jscomp$39$$[18] = this.dma_bytes_block; + $state$jscomp$39$$[19] = this.dma_irq; + $state$jscomp$39$$[20] = this.dma_channel; + $state$jscomp$39$$[21] = this.dma_channel_8bit; + $state$jscomp$39$$[22] = this.dma_channel_16bit; + $state$jscomp$39$$[23] = this.dma_autoinit; + $state$jscomp$39$$[24] = this.dma_buffer_uint8; + $state$jscomp$39$$[25] = this.dma_waiting_transfer; + $state$jscomp$39$$[26] = this.dma_paused; + $state$jscomp$39$$[27] = this.sampling_rate; + $state$jscomp$39$$[28] = this.bytes_per_sample; + $state$jscomp$39$$[29] = this.e2_value; + $state$jscomp$39$$[30] = this.e2_count; + $state$jscomp$39$$[31] = this.asp_registers; + $state$jscomp$39$$[33] = this.mpu_read_buffer_last_value; + $state$jscomp$39$$[34] = this.irq; + $state$jscomp$39$$[35] = this.irq_triggered; + return $state$jscomp$39$$; +}; +$SB16$$.prototype.set_state = function($state$jscomp$40$$) { + this.read_buffer_lastvalue = $state$jscomp$40$$[2]; + this.command = $state$jscomp$40$$[3]; + this.command_size = $state$jscomp$40$$[4]; + this.mixer_current_address = $state$jscomp$40$$[5]; + this.mixer_registers = $state$jscomp$40$$[6]; + this.mixer_full_update(); + this.dummy_speaker_enabled = $state$jscomp$40$$[7]; + this.test_register = $state$jscomp$40$$[8]; + this.dsp_highspeed = $state$jscomp$40$$[9]; + this.dsp_stereo = $state$jscomp$40$$[10]; + this.dsp_16bit = $state$jscomp$40$$[11]; + this.dsp_signed = $state$jscomp$40$$[12]; + this.dma_sample_count = $state$jscomp$40$$[15]; + this.dma_bytes_count = $state$jscomp$40$$[16]; + this.dma_bytes_left = $state$jscomp$40$$[17]; + this.dma_bytes_block = $state$jscomp$40$$[18]; + this.dma_irq = $state$jscomp$40$$[19]; + this.dma_channel = $state$jscomp$40$$[20]; + this.dma_channel_8bit = $state$jscomp$40$$[21]; + this.dma_channel_16bit = $state$jscomp$40$$[22]; + this.dma_autoinit = $state$jscomp$40$$[23]; + this.dma_buffer_uint8 = $state$jscomp$40$$[24]; + this.dma_waiting_transfer = $state$jscomp$40$$[25]; + this.dma_paused = $state$jscomp$40$$[26]; + this.sampling_rate = $state$jscomp$40$$[27]; + this.bytes_per_sample = $state$jscomp$40$$[28]; + this.e2_value = $state$jscomp$40$$[29]; + this.e2_count = $state$jscomp$40$$[30]; + this.asp_registers = $state$jscomp$40$$[31]; + this.mpu_read_buffer_last_value = $state$jscomp$40$$[33]; + this.irq = $state$jscomp$40$$[34]; + this.irq_triggered = $state$jscomp$40$$[35]; + this.dma_buffer = this.dma_buffer_uint8.buffer; + this.dma_buffer_int8 = new Int8Array(this.dma_buffer); + this.dma_buffer_int16 = new Int16Array(this.dma_buffer); + this.dma_buffer_uint16 = new Uint16Array(this.dma_buffer); + this.dma_syncbuffer = new $v86util$$.SyncBuffer(this.dma_buffer); + this.dma_paused ? this.bus.send("dac-disable") : this.bus.send("dac-enable"); +}; +$SB16$$.prototype.port2x0_read = function() { + $dbg_log$$("220 read: fm music status port (unimplemented)", 8388608); + return 255; +}; +$SB16$$.prototype.port2x1_read = function() { + $dbg_log$$("221 read: fm music data port (write only)", 8388608); + return 255; +}; +$SB16$$.prototype.port2x2_read = function() { + $dbg_log$$("222 read: advanced fm music status port (unimplemented)", 8388608); + return 255; +}; +$SB16$$.prototype.port2x3_read = function() { + $dbg_log$$("223 read: advanced music data port (write only)", 8388608); + return 255; +}; +$SB16$$.prototype.port2x4_read = function() { + $dbg_log$$("224 read: mixer address port", 8388608); + return this.mixer_current_address; +}; +$SB16$$.prototype.port2x5_read = function() { + $dbg_log$$("225 read: mixer data port", 8388608); + return this.mixer_read(this.mixer_current_address); +}; +$SB16$$.prototype.port2x6_read = function() { + $dbg_log$$("226 read: (write only)", 8388608); + return 255; +}; +$SB16$$.prototype.port2x7_read = function() { + $dbg_log$$("227 read: undocumented", 8388608); + return 255; +}; +$SB16$$.prototype.port2x8_read = function() { + $dbg_log$$("228 read: fm music status port (unimplemented)", 8388608); + return 255; +}; +$SB16$$.prototype.port2x9_read = function() { + $dbg_log$$("229 read: fm music data port (write only)", 8388608); + return 255; +}; +$SB16$$.prototype.port2xA_read = function() { + $dbg_log$$("22A read: read data", 8388608); + this.read_buffer.length && (this.read_buffer_lastvalue = this.read_buffer.shift()); + $dbg_log$$(" <- " + this.read_buffer_lastvalue + " " + $h$$(this.read_buffer_lastvalue) + " '" + String.fromCharCode(this.read_buffer_lastvalue) + "'", 8388608); + return this.read_buffer_lastvalue; +}; +$SB16$$.prototype.port2xB_read = function() { + $dbg_log$$("22B read: undocumented", 8388608); + return 255; +}; +$SB16$$.prototype.port2xC_read = function() { + $dbg_log$$("22C read: write-buffer status", 8388608); + return 127; +}; +$SB16$$.prototype.port2xD_read = function() { + $dbg_log$$("22D read: undocumented", 8388608); + return 255; +}; +$SB16$$.prototype.port2xE_read = function() { + $dbg_log$$("22E read: read-buffer status / irq 8bit ack.", 8388608); + this.irq_triggered[1] && this.lower_irq(1); + return (this.read_buffer.length && !this.dsp_highspeed) << 7 | 127; +}; +$SB16$$.prototype.port2xF_read = function() { + $dbg_log$$("22F read: irq 16bit ack", 8388608); + this.lower_irq(2); + return 0; +}; +$SB16$$.prototype.port2x0_write = function($value$jscomp$156$$) { + $dbg_log$$("220 write: (unimplemented) fm register 0 address = " + $h$$($value$jscomp$156$$), 8388608); + this.fm_current_address0 = 0; +}; +$SB16$$.prototype.port2x1_write = function($value$jscomp$157$$) { + $dbg_log$$("221 write: (unimplemented) fm register 0 data = " + $h$$($value$jscomp$157$$), 8388608); + var $handler$jscomp$3$$ = $FM_HANDLERS$$[this.fm_current_address0]; + $handler$jscomp$3$$ || ($handler$jscomp$3$$ = this.fm_default_write); + $handler$jscomp$3$$.call(this, $value$jscomp$157$$, 0, this.fm_current_address0); +}; +$SB16$$.prototype.port2x2_write = function($value$jscomp$158$$) { + $dbg_log$$("222 write: (unimplemented) fm register 1 address = " + $h$$($value$jscomp$158$$), 8388608); + this.fm_current_address1 = 0; +}; +$SB16$$.prototype.port2x3_write = function($value$jscomp$159$$) { + $dbg_log$$("223 write: (unimplemented) fm register 1 data =" + $h$$($value$jscomp$159$$), 8388608); + var $handler$jscomp$4$$ = $FM_HANDLERS$$[this.fm_current_address1]; + $handler$jscomp$4$$ || ($handler$jscomp$4$$ = this.fm_default_write); + $handler$jscomp$4$$.call(this, $value$jscomp$159$$, 1, this.fm_current_address1); +}; +$SB16$$.prototype.port2x4_write = function($value$jscomp$160$$) { + $dbg_log$$("224 write: mixer address = " + $h$$($value$jscomp$160$$), 8388608); + this.mixer_current_address = $value$jscomp$160$$; +}; +$SB16$$.prototype.port2x5_write = function($value$jscomp$161$$) { + $dbg_log$$("225 write: mixer data = " + $h$$($value$jscomp$161$$), 8388608); + this.mixer_write(this.mixer_current_address, $value$jscomp$161$$); +}; +$SB16$$.prototype.port2x6_write = function($yesplease$$) { + $dbg_log$$("226 write: reset = " + $h$$($yesplease$$), 8388608); + this.dsp_highspeed ? ($dbg_log$$(" -> exit highspeed", 8388608), this.dsp_highspeed = !1) : $yesplease$$ && ($dbg_log$$(" -> reset", 8388608), this.dsp_reset()); + this.read_buffer.clear(); + this.read_buffer.push(170); +}; +$SB16$$.prototype.port2x7_write = function() { + $dbg_log$$("227 write: undocumented", 8388608); +}; +$SB16$$.prototype.port2x8_write = function() { + $dbg_log$$("228 write: fm music register port (unimplemented)", 8388608); +}; +$SB16$$.prototype.port2x9_write = function() { + $dbg_log$$("229 write: fm music data port (unimplemented)", 8388608); +}; +$SB16$$.prototype.port2xA_write = function() { + $dbg_log$$("22A write: dsp read data port (read only)", 8388608); +}; +$SB16$$.prototype.port2xB_write = function() { + $dbg_log$$("22B write: undocumented", 8388608); +}; +$SB16$$.prototype.port2xC_write = function($value$jscomp$167$$) { + $dbg_log$$("22C write: write command/data", 8388608); + 0 === this.command ? ($dbg_log$$("22C write: command = " + $h$$($value$jscomp$167$$), 8388608), this.command = $value$jscomp$167$$, this.write_buffer.clear(), this.command_size = $DSP_COMMAND_SIZES$$[$value$jscomp$167$$]) : ($dbg_log$$("22C write: data: " + $h$$($value$jscomp$167$$), 8388608), this.write_buffer.push($value$jscomp$167$$)); + this.write_buffer.length >= this.command_size && this.command_do(); +}; +$SB16$$.prototype.port2xD_write = function() { + $dbg_log$$("22D write: undocumented", 8388608); +}; +$SB16$$.prototype.port2xE_write = function() { + $dbg_log$$("22E write: dsp read buffer status (read only)", 8388608); +}; +$SB16$$.prototype.port2xF_write = function() { + $dbg_log$$("22F write: undocumented", 8388608); +}; +$SB16$$.prototype.port3x0_read = function() { + $dbg_log$$("330 read: mpu data", 8388608); + this.mpu_read_buffer.length && (this.mpu_read_buffer_lastvalue = this.mpu_read_buffer.shift()); + $dbg_log$$(" <- " + $h$$(this.mpu_read_buffer_lastvalue), 8388608); + return this.mpu_read_buffer_lastvalue; +}; +$SB16$$.prototype.port3x0_write = function($value$jscomp$171$$) { + $dbg_log$$("330 write: mpu data (unimplemented) : " + $h$$($value$jscomp$171$$), 8388608); +}; +$SB16$$.prototype.port3x1_read = function() { + $dbg_log$$("331 read: mpu status", 8388608); + return 0 | 128 * !this.mpu_read_buffer.length; +}; +$SB16$$.prototype.port3x1_write = function($value$jscomp$172$$) { + $dbg_log$$("331 write: mpu command: " + $h$$($value$jscomp$172$$), 8388608); + 255 === $value$jscomp$172$$ && (this.mpu_read_buffer.clear(), this.mpu_read_buffer.push(254)); +}; +$SB16$$.prototype.command_do = function() { + var $handler$jscomp$5$$ = $DSP_COMMAND_HANDLERS$$[this.command]; + $handler$jscomp$5$$ || ($handler$jscomp$5$$ = this.dsp_default_handler); + $handler$jscomp$5$$.call(this); + this.command_size = this.command = 0; + this.write_buffer.clear(); +}; +$SB16$$.prototype.dsp_default_handler = function() { + $dbg_log$$("Unhandled command: " + $h$$(this.command), 8388608); +}; +function $register_dsp_command$$($commands$$, $size$jscomp$33$$, $handler$jscomp$6$$) { + $handler$jscomp$6$$ || ($handler$jscomp$6$$ = $SB16$$.prototype.dsp_default_handler); + for (var $i$jscomp$44$$ = 0; $i$jscomp$44$$ < $commands$$.length; $i$jscomp$44$$++) { + $DSP_COMMAND_SIZES$$[$commands$$[$i$jscomp$44$$]] = $size$jscomp$33$$, $DSP_COMMAND_HANDLERS$$[$commands$$[$i$jscomp$44$$]] = $handler$jscomp$6$$; + } +} +function $any_first_digit$$($base$jscomp$3$$) { + for (var $commands$jscomp$1$$ = [], $i$jscomp$45$$ = 0; 16 > $i$jscomp$45$$; $i$jscomp$45$$++) { + $commands$jscomp$1$$.push($base$jscomp$3$$ + $i$jscomp$45$$); + } + return $commands$jscomp$1$$; +} +$register_dsp_command$$([14], 2, function() { + this.asp_registers[this.write_buffer.shift()] = this.write_buffer.shift(); +}); +$register_dsp_command$$([15], 1, function() { + this.read_buffer.clear(); + this.read_buffer.push(this.asp_registers[this.write_buffer.shift()]); +}); +$register_dsp_command$$([16], 1, function() { + var $value$jscomp$173_value$jscomp$inline_50$$ = this.write_buffer.shift(); + $value$jscomp$173_value$jscomp$inline_50$$ = $audio_clip$$($value$jscomp$173_value$jscomp$inline_50$$ / 127.5 + -1, -1, 1); + this.dac_buffers[0].push($value$jscomp$173_value$jscomp$inline_50$$); + this.dac_buffers[1].push($value$jscomp$173_value$jscomp$inline_50$$); + this.bus.send("dac-enable"); +}); +$register_dsp_command$$([20, 21], 2, function() { + this.dma_irq = 1; + this.dma_channel = this.dma_channel_8bit; + this.dsp_highspeed = this.dsp_16bit = this.dsp_signed = this.dma_autoinit = !1; + this.dma_transfer_size_set(); + this.dma_transfer_start(); +}); +$register_dsp_command$$([22], 2); +$register_dsp_command$$([23], 2); +$register_dsp_command$$([28], 0, function() { + this.dma_irq = 1; + this.dma_channel = this.dma_channel_8bit; + this.dma_autoinit = !0; + this.dsp_highspeed = this.dsp_16bit = this.dsp_signed = !1; + this.dma_transfer_start(); +}); +$register_dsp_command$$([31], 0); +$register_dsp_command$$([32], 0, function() { + this.read_buffer.clear(); + this.read_buffer.push(127); +}); +$register_dsp_command$$([36], 2); +$register_dsp_command$$([44], 0); +$register_dsp_command$$([48], 0); +$register_dsp_command$$([49], 0); +$register_dsp_command$$([52], 0); +$register_dsp_command$$([53], 0); +$register_dsp_command$$([54], 0); +$register_dsp_command$$([55], 0); +$register_dsp_command$$([56], 0); +$register_dsp_command$$([64], 1, function() { + this.sampling_rate_change(1000000 / (256 - this.write_buffer.shift()) / this.get_channel_count()); +}); +$register_dsp_command$$([65, 66], 2, function() { + this.sampling_rate_change(this.write_buffer.shift() << 8 | this.write_buffer.shift()); +}); +$register_dsp_command$$([72], 2, function() { + this.dma_transfer_size_set(); +}); +$register_dsp_command$$([116], 2); +$register_dsp_command$$([117], 2); +$register_dsp_command$$([118], 2); +$register_dsp_command$$([119], 2); +$register_dsp_command$$([125], 0); +$register_dsp_command$$([127], 0); +$register_dsp_command$$([128], 2); +$register_dsp_command$$([144], 0, function() { + this.dma_irq = 1; + this.dma_channel = this.dma_channel_8bit; + this.dma_autoinit = !0; + this.dsp_signed = !1; + this.dsp_highspeed = !0; + this.dsp_16bit = !1; + this.dma_transfer_start(); +}); +$register_dsp_command$$([145], 0); +$register_dsp_command$$([152], 0); +$register_dsp_command$$([153], 0); +$register_dsp_command$$([160], 0); +$register_dsp_command$$([168], 0); +$register_dsp_command$$($any_first_digit$$(176), 3, function() { + if (this.command & 8) { + this.dsp_default_handler(); + } else { + var $mode$jscomp$23$$ = this.write_buffer.shift(); + this.dma_irq = 2; + this.dma_channel = this.dma_channel_16bit; + this.dma_autoinit = !!(this.command & 4); + this.dsp_signed = !!($mode$jscomp$23$$ & 16); + this.dsp_stereo = !!($mode$jscomp$23$$ & 32); + this.dsp_16bit = !0; + this.dma_transfer_size_set(); + this.dma_transfer_start(); + } +}); +$register_dsp_command$$($any_first_digit$$(192), 3, function() { + if (this.command & 8) { + this.dsp_default_handler(); + } else { + var $mode$jscomp$24$$ = this.write_buffer.shift(); + this.dma_irq = 1; + this.dma_channel = this.dma_channel_8bit; + this.dma_autoinit = !!(this.command & 4); + this.dsp_signed = !!($mode$jscomp$24$$ & 16); + this.dsp_stereo = !!($mode$jscomp$24$$ & 32); + this.dsp_16bit = !1; + this.dma_transfer_size_set(); + this.dma_transfer_start(); + } +}); +$register_dsp_command$$([208], 0, function() { + this.dma_paused = !0; + this.bus.send("dac-disable"); +}); +$register_dsp_command$$([209], 0, function() { + this.dummy_speaker_enabled = !0; +}); +$register_dsp_command$$([211], 0, function() { + this.dummy_speaker_enabled = !1; +}); +$register_dsp_command$$([212], 0, function() { + this.dma_paused = !1; + this.bus.send("dac-enable"); +}); +$register_dsp_command$$([213], 0, function() { + this.dma_paused = !0; + this.bus.send("dac-disable"); +}); +$register_dsp_command$$([214], 0, function() { + this.dma_paused = !1; + this.bus.send("dac-enable"); +}); +$register_dsp_command$$([216], 0, function() { + this.read_buffer.clear(); + this.read_buffer.push(255 * this.dummy_speaker_enabled); +}); +$register_dsp_command$$([217, 218], 0, function() { + this.dma_autoinit = !1; +}); +$register_dsp_command$$([224], 1, function() { + this.read_buffer.clear(); + this.read_buffer.push(~this.write_buffer.shift()); +}); +$register_dsp_command$$([225], 0, function() { + this.read_buffer.clear(); + this.read_buffer.push(4); + this.read_buffer.push(5); +}); +$register_dsp_command$$([226], 1); +$register_dsp_command$$([227], 0, function() { + this.read_buffer.clear(); + for (var $i$jscomp$46$$ = 0; 44 > $i$jscomp$46$$; $i$jscomp$46$$++) { + this.read_buffer.push("COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992.".charCodeAt($i$jscomp$46$$)); + } + this.read_buffer.push(0); +}); +$register_dsp_command$$([228], 1, function() { + this.test_register = this.write_buffer.shift(); +}); +$register_dsp_command$$([232], 0, function() { + this.read_buffer.clear(); + this.read_buffer.push(this.test_register); +}); +$register_dsp_command$$([242, 243], 0, function() { + this.raise_irq(); +}); +var $SB_F9$$ = new Uint8Array(256); +$SB_F9$$[14] = 255; +$SB_F9$$[15] = 7; +$SB_F9$$[55] = 56; +$register_dsp_command$$([249], 1, function() { + var $input$jscomp$9$$ = this.write_buffer.shift(); + $dbg_log$$("dsp 0xf9: unknown function. input: " + $input$jscomp$9$$, 8388608); + this.read_buffer.clear(); + this.read_buffer.push($SB_F9$$[$input$jscomp$9$$]); +}); +$SB16$$.prototype.mixer_read = function($address$jscomp$3$$) { + var $data$jscomp$138_handler$jscomp$7$$ = $MIXER_READ_HANDLERS$$[$address$jscomp$3$$]; + $data$jscomp$138_handler$jscomp$7$$ ? $data$jscomp$138_handler$jscomp$7$$ = $data$jscomp$138_handler$jscomp$7$$.call(this) : ($data$jscomp$138_handler$jscomp$7$$ = this.mixer_registers[$address$jscomp$3$$], $dbg_log$$("unhandled mixer register read. addr:" + $h$$($address$jscomp$3$$) + " data:" + $h$$($data$jscomp$138_handler$jscomp$7$$), 8388608)); + return $data$jscomp$138_handler$jscomp$7$$; +}; +$SB16$$.prototype.mixer_write = function($address$jscomp$4$$, $data$jscomp$139$$) { + var $handler$jscomp$8$$ = $MIXER_WRITE_HANDLERS$$[$address$jscomp$4$$]; + $handler$jscomp$8$$ ? $handler$jscomp$8$$.call(this, $data$jscomp$139$$) : $dbg_log$$("unhandled mixer register write. addr:" + $h$$($address$jscomp$4$$) + " data:" + $h$$($data$jscomp$139$$), 8388608); +}; +$SB16$$.prototype.mixer_default_read = function() { + $dbg_log$$("mixer register read. addr:" + $h$$(this.mixer_current_address), 8388608); + return this.mixer_registers[this.mixer_current_address]; +}; +$SB16$$.prototype.mixer_default_write = function($data$jscomp$140$$) { + $dbg_log$$("mixer register write. addr:" + $h$$(this.mixer_current_address) + " data:" + $h$$($data$jscomp$140$$), 8388608); + this.mixer_registers[this.mixer_current_address] = $data$jscomp$140$$; +}; +$SB16$$.prototype.mixer_reset = function() { + this.mixer_registers[4] = 204; + this.mixer_registers[34] = 204; + this.mixer_registers[38] = 204; + this.mixer_registers[40] = 0; + this.mixer_registers[46] = 0; + this.mixer_registers[10] = 0; + this.mixer_registers[48] = 192; + this.mixer_registers[49] = 192; + this.mixer_registers[50] = 192; + this.mixer_registers[51] = 192; + this.mixer_registers[52] = 192; + this.mixer_registers[53] = 192; + this.mixer_registers[54] = 0; + this.mixer_registers[55] = 0; + this.mixer_registers[56] = 0; + this.mixer_registers[57] = 0; + this.mixer_registers[59] = 0; + this.mixer_registers[60] = 31; + this.mixer_registers[61] = 21; + this.mixer_registers[62] = 11; + this.mixer_registers[63] = 0; + this.mixer_registers[64] = 0; + this.mixer_registers[65] = 0; + this.mixer_registers[66] = 0; + this.mixer_registers[67] = 0; + this.mixer_registers[68] = 128; + this.mixer_registers[69] = 128; + this.mixer_registers[70] = 128; + this.mixer_registers[71] = 128; + this.mixer_full_update(); +}; +$SB16$$.prototype.mixer_full_update = function() { + for (var $i$jscomp$47$$ = 1; $i$jscomp$47$$ < this.mixer_registers.length; $i$jscomp$47$$++) { + $MIXER_REGISTER_IS_LEGACY$$[$i$jscomp$47$$] || this.mixer_write($i$jscomp$47$$, this.mixer_registers[$i$jscomp$47$$]); + } +}; +function $register_mixer_read$$($address$jscomp$5$$, $handler$jscomp$9$$) { + $handler$jscomp$9$$ || ($handler$jscomp$9$$ = $SB16$$.prototype.mixer_default_read); + $MIXER_READ_HANDLERS$$[$address$jscomp$5$$] = $handler$jscomp$9$$; +} +function $register_mixer_write$$($address$jscomp$6$$, $handler$jscomp$10$$) { + $handler$jscomp$10$$ || ($handler$jscomp$10$$ = $SB16$$.prototype.mixer_default_write); + $MIXER_WRITE_HANDLERS$$[$address$jscomp$6$$] = $handler$jscomp$10$$; +} +function $register_mixer_legacy$$($address_old$$, $address_new_left$$, $address_new_right$$) { + $MIXER_REGISTER_IS_LEGACY$$[$address_old$$] = 1; + $MIXER_READ_HANDLERS$$[$address_old$$] = function() { + return this.mixer_registers[$address_new_left$$] & 240 | this.mixer_registers[$address_new_right$$] >>> 4; + }; + $MIXER_WRITE_HANDLERS$$[$address_old$$] = function($data$jscomp$141$$) { + this.mixer_registers[$address_old$$] = $data$jscomp$141$$; + var $right$jscomp$4$$ = $data$jscomp$141$$ << 4 & 240 | this.mixer_registers[$address_new_right$$] & 15; + this.mixer_write($address_new_left$$, $data$jscomp$141$$ & 240 | this.mixer_registers[$address_new_left$$] & 15); + this.mixer_write($address_new_right$$, $right$jscomp$4$$); + }; +} +function $register_mixer_volume$$($address$jscomp$7$$, $mixer_source$$, $channel$jscomp$16$$) { + $MIXER_READ_HANDLERS$$[$address$jscomp$7$$] = $SB16$$.prototype.mixer_default_read; + $MIXER_WRITE_HANDLERS$$[$address$jscomp$7$$] = function($data$jscomp$142$$) { + this.mixer_registers[$address$jscomp$7$$] = $data$jscomp$142$$; + this.bus.send("mixer-volume", [$mixer_source$$, $channel$jscomp$16$$, ($data$jscomp$142$$ >>> 2) - 62]); + }; +} +$register_mixer_read$$(0, function() { + this.mixer_reset(); + return 0; +}); +$register_mixer_write$$(0); +$register_mixer_legacy$$(4, 50, 51); +$register_mixer_legacy$$(34, 48, 49); +$register_mixer_legacy$$(38, 52, 53); +$register_mixer_legacy$$(40, 54, 55); +$register_mixer_legacy$$(46, 56, 57); +$register_mixer_volume$$(48, 0, 0); +$register_mixer_volume$$(49, 0, 1); +$register_mixer_volume$$(50, 2, 0); +$register_mixer_volume$$(51, 2, 1); +$register_mixer_read$$(59); +$register_mixer_write$$(59, function($data$jscomp$143$$) { + this.mixer_registers[59] = $data$jscomp$143$$; + this.bus.send("mixer-volume", [1, 2, 6 * ($data$jscomp$143$$ >>> 6) - 18]); +}); +$register_mixer_read$$(65); +$register_mixer_write$$(65, function($data$jscomp$144$$) { + this.mixer_registers[65] = $data$jscomp$144$$; + this.bus.send("mixer-gain-left", 6 * ($data$jscomp$144$$ >>> 6)); +}); +$register_mixer_read$$(66); +$register_mixer_write$$(66, function($data$jscomp$145$$) { + this.mixer_registers[66] = $data$jscomp$145$$; + this.bus.send("mixer-gain-right", 6 * ($data$jscomp$145$$ >>> 6)); +}); +$register_mixer_read$$(68); +$register_mixer_write$$(68, function($data$jscomp$146$$) { + this.mixer_registers[68] = $data$jscomp$146$$; + $data$jscomp$146$$ >>>= 3; + this.bus.send("mixer-treble-left", $data$jscomp$146$$ - (16 > $data$jscomp$146$$ ? 14 : 16)); +}); +$register_mixer_read$$(69); +$register_mixer_write$$(69, function($data$jscomp$147$$) { + this.mixer_registers[69] = $data$jscomp$147$$; + $data$jscomp$147$$ >>>= 3; + this.bus.send("mixer-treble-right", $data$jscomp$147$$ - (16 > $data$jscomp$147$$ ? 14 : 16)); +}); +$register_mixer_read$$(70); +$register_mixer_write$$(70, function($data$jscomp$148$$) { + this.mixer_registers[70] = $data$jscomp$148$$; + $data$jscomp$148$$ >>>= 3; + this.bus.send("mixer-bass-right", $data$jscomp$148$$ - (16 > $data$jscomp$148$$ ? 14 : 16)); +}); +$register_mixer_read$$(71); +$register_mixer_write$$(71, function($data$jscomp$149$$) { + this.mixer_registers[71] = $data$jscomp$149$$; + $data$jscomp$149$$ >>>= 3; + this.bus.send("mixer-bass-right", $data$jscomp$149$$ - (16 > $data$jscomp$149$$ ? 14 : 16)); +}); +$register_mixer_read$$(128, function() { + switch(this.irq) { + case 2: + return 1; + case 5: + return 2; + case 7: + return 4; + case 10: + return 8; + default: + return 0; + } +}); +$register_mixer_write$$(128, function($bits$$) { + $bits$$ & 1 && (this.irq = 2); + $bits$$ & 2 && (this.irq = 5); + $bits$$ & 4 && (this.irq = 7); + $bits$$ & 8 && (this.irq = 10); +}); +$register_mixer_read$$(129, function() { + var $ret$jscomp$3$$ = 0; + switch(this.dma_channel_8bit) { + case 0: + $ret$jscomp$3$$ |= 1; + break; + case 1: + $ret$jscomp$3$$ |= 2; + break; + case 3: + $ret$jscomp$3$$ |= 8; + } + switch(this.dma_channel_16bit) { + case 5: + $ret$jscomp$3$$ |= 32; + break; + case 6: + $ret$jscomp$3$$ |= 64; + break; + case 7: + $ret$jscomp$3$$ |= 128; + } + return $ret$jscomp$3$$; +}); +$register_mixer_write$$(129, function($bits$jscomp$1$$) { + $bits$jscomp$1$$ & 1 && (this.dma_channel_8bit = 0); + $bits$jscomp$1$$ & 2 && (this.dma_channel_8bit = 1); + $bits$jscomp$1$$ & 8 && (this.dma_channel_8bit = 3); + $bits$jscomp$1$$ & 32 && (this.dma_channel_16bit = 5); + $bits$jscomp$1$$ & 64 && (this.dma_channel_16bit = 6); + $bits$jscomp$1$$ & 128 && (this.dma_channel_16bit = 7); +}); +$register_mixer_read$$(130, function() { + for (var $ret$jscomp$4$$ = 32, $i$jscomp$48$$ = 0; 16 > $i$jscomp$48$$; $i$jscomp$48$$++) { + $ret$jscomp$4$$ |= $i$jscomp$48$$ * this.irq_triggered[$i$jscomp$48$$]; + } + return $ret$jscomp$4$$; +}); +$SB16$$.prototype.fm_default_write = function($data$jscomp$150$$, $register$jscomp$3$$, $address$jscomp$8$$) { + $dbg_log$$("unhandled fm register write. addr:" + $register$jscomp$3$$ + "|" + $h$$($address$jscomp$8$$) + " data:" + $h$$($data$jscomp$150$$), 8388608); +}; +function $register_fm_write$$($addresses$$, $handler$jscomp$11$$) { + $handler$jscomp$11$$ || ($handler$jscomp$11$$ = $SB16$$.prototype.fm_default_write); + for (var $i$jscomp$49$$ = 0; $i$jscomp$49$$ < $addresses$$.length; $i$jscomp$49$$++) { + $FM_HANDLERS$$[$addresses$$[$i$jscomp$49$$]] = $handler$jscomp$11$$; + } +} +function $between$$($i$jscomp$50_start$jscomp$36$$, $end$jscomp$20$$) { + for (var $a$jscomp$2$$ = []; $i$jscomp$50_start$jscomp$36$$ <= $end$jscomp$20$$; $i$jscomp$50_start$jscomp$36$$++) { + $a$jscomp$2$$.push($i$jscomp$50_start$jscomp$36$$); + } + return $a$jscomp$2$$; +} +var $SB_FM_OPERATORS_BY_OFFSET$$ = new Uint8Array(32); +$SB_FM_OPERATORS_BY_OFFSET$$[0] = 0; +$SB_FM_OPERATORS_BY_OFFSET$$[1] = 1; +$SB_FM_OPERATORS_BY_OFFSET$$[2] = 2; +$SB_FM_OPERATORS_BY_OFFSET$$[3] = 3; +$SB_FM_OPERATORS_BY_OFFSET$$[4] = 4; +$SB_FM_OPERATORS_BY_OFFSET$$[5] = 5; +$SB_FM_OPERATORS_BY_OFFSET$$[8] = 6; +$SB_FM_OPERATORS_BY_OFFSET$$[9] = 7; +$SB_FM_OPERATORS_BY_OFFSET$$[10] = 8; +$SB_FM_OPERATORS_BY_OFFSET$$[11] = 9; +$SB_FM_OPERATORS_BY_OFFSET$$[12] = 10; +$SB_FM_OPERATORS_BY_OFFSET$$[13] = 11; +$SB_FM_OPERATORS_BY_OFFSET$$[16] = 12; +$SB_FM_OPERATORS_BY_OFFSET$$[17] = 13; +$SB_FM_OPERATORS_BY_OFFSET$$[18] = 14; +$SB_FM_OPERATORS_BY_OFFSET$$[19] = 15; +$SB_FM_OPERATORS_BY_OFFSET$$[20] = 16; +$SB_FM_OPERATORS_BY_OFFSET$$[21] = 17; +$register_fm_write$$([1], function($bits$jscomp$2$$, $register$jscomp$5$$) { + this.fm_waveform_select_enable[$register$jscomp$5$$] = $bits$jscomp$2$$ & 1; + this.fm_update_waveforms(); +}); +$register_fm_write$$([2]); +$register_fm_write$$([3]); +$register_fm_write$$([4], function() { +}); +$register_fm_write$$([5], function($bits$jscomp$4$$, $register$jscomp$7$$, $address$jscomp$11$$) { + 0 === $register$jscomp$7$$ && this.fm_default_write($bits$jscomp$4$$, $register$jscomp$7$$, $address$jscomp$11$$); +}); +$register_fm_write$$([8], function() { +}); +$register_fm_write$$($between$$(32, 53), function() { +}); +$register_fm_write$$($between$$(64, 85), function() { +}); +$register_fm_write$$($between$$(96, 117), function() { +}); +$register_fm_write$$($between$$(128, 149), function() { +}); +$register_fm_write$$($between$$(160, 168), function() { +}); +$register_fm_write$$($between$$(176, 184), function() { +}); +$register_fm_write$$([189], function() { +}); +$register_fm_write$$($between$$(192, 200), function() { +}); +$register_fm_write$$($between$$(224, 245), function() { +}); +$SB16$$.prototype.fm_update_waveforms = function() { +}; +$SB16$$.prototype.sampling_rate_change = function($rate$jscomp$1$$) { + this.sampling_rate = $rate$jscomp$1$$; + this.bus.send("dac-tell-sampling-rate", $rate$jscomp$1$$); +}; +$SB16$$.prototype.get_channel_count = function() { + return this.dsp_stereo ? 2 : 1; +}; +$SB16$$.prototype.dma_transfer_size_set = function() { + this.dma_sample_count = 1 + (this.write_buffer.shift() << 0) + (this.write_buffer.shift() << 8); +}; +$SB16$$.prototype.dma_transfer_start = function() { + $dbg_log$$("begin dma transfer", 8388608); + this.bytes_per_sample = 1; + this.dsp_16bit && (this.bytes_per_sample *= 2); + this.dma_bytes_count = this.dma_sample_count * this.bytes_per_sample; + this.dma_bytes_block = 1024 * this.bytes_per_sample; + this.dma_bytes_block = Math.min(Math.max(this.dma_bytes_count >> 2 & -4, 32), this.dma_bytes_block); + this.dma_waiting_transfer = !0; + this.dma.channel_mask[this.dma_channel] || this.dma_on_unmask(this.dma_channel); +}; +$SB16$$.prototype.dma_on_unmask = function($channel$jscomp$18$$) { + $channel$jscomp$18$$ === this.dma_channel && this.dma_waiting_transfer && (this.dma_waiting_transfer = !1, this.dma_bytes_left = this.dma_bytes_count, this.dma_paused = !1, this.bus.send("dac-enable")); +}; +$SB16$$.prototype.dma_transfer_next = function() { + $dbg_log$$("dma transfering next block", 8388608); + var $size$jscomp$34$$ = Math.min(this.dma_bytes_left, this.dma_bytes_block), $samples$jscomp$2$$ = Math.floor($size$jscomp$34$$ / this.bytes_per_sample); + this.dma.do_write(this.dma_syncbuffer, 0, $size$jscomp$34$$, this.dma_channel, $error$jscomp$5$$ => { + $dbg_log$$("dma block transfer " + ($error$jscomp$5$$ ? "unsuccessful" : "successful"), 8388608); + $error$jscomp$5$$ || (this.dma_to_dac($samples$jscomp$2$$), this.dma_bytes_left -= $size$jscomp$34$$, this.dma_bytes_left || (this.raise_irq(this.dma_irq), this.dma_autoinit && (this.dma_bytes_left = this.dma_bytes_count))); + }); +}; +$SB16$$.prototype.dma_to_dac = function($sample_count$$) { + var $amplitude$$ = this.dsp_16bit ? 32767.5 : 127.5, $offset$jscomp$50$$ = this.dsp_signed ? 0 : -1, $repeats$$ = this.dsp_stereo ? 1 : 2; + var $buffer$jscomp$37$$ = this.dsp_16bit ? this.dsp_signed ? this.dma_buffer_int16 : this.dma_buffer_uint16 : this.dsp_signed ? this.dma_buffer_int8 : this.dma_buffer_uint8; + for (var $channel$jscomp$19$$ = 0, $i$jscomp$51$$ = 0; $i$jscomp$51$$ < $sample_count$$; $i$jscomp$51$$++) { + for (var $sample$$ = $audio_clip$$($buffer$jscomp$37$$[$i$jscomp$51$$] / $amplitude$$ + $offset$jscomp$50$$, -1, 1), $j$jscomp$5$$ = 0; $j$jscomp$5$$ < $repeats$$; $j$jscomp$5$$++) { + this.dac_buffers[$channel$jscomp$19$$].push($sample$$), $channel$jscomp$19$$ ^= 1; + } + } + this.dac_send(); +}; +$SB16$$.prototype.dac_handle_request = function() { + !this.dma_bytes_left || this.dma_paused ? this.dac_send() : this.dma_transfer_next(); +}; +$SB16$$.prototype.dac_send = function() { + if (this.dac_buffers[0].length) { + var $out0$$ = this.dac_buffers[0].shift_block(this.dac_buffers[0].length), $out1$$ = this.dac_buffers[1].shift_block(this.dac_buffers[1].length); + this.bus.send("dac-send-data", [$out0$$, $out1$$], [$out0$$.buffer, $out1$$.buffer]); + } +}; +$SB16$$.prototype.raise_irq = function($type$jscomp$152$$) { + $dbg_log$$("raise irq", 8388608); + this.irq_triggered[$type$jscomp$152$$] = 1; + this.cpu.device_raise_irq(this.irq); +}; +$SB16$$.prototype.lower_irq = function($type$jscomp$153$$) { + $dbg_log$$("lower irq", 8388608); + this.irq_triggered[$type$jscomp$153$$] = 0; + this.cpu.device_lower_irq(this.irq); +}; +function $audio_clip$$($value$jscomp$175$$, $low$jscomp$1$$, $high$jscomp$1$$) { + return ($value$jscomp$175$$ < $low$jscomp$1$$) * $low$jscomp$1$$ + ($value$jscomp$175$$ > $high$jscomp$1$$) * $high$jscomp$1$$ + ($low$jscomp$1$$ <= $value$jscomp$175$$ && $value$jscomp$175$$ <= $high$jscomp$1$$) * $value$jscomp$175$$; +} +;function $VirtIO$$($cpu$jscomp$18$$, $options$jscomp$37$$) { + this.cpu = $cpu$jscomp$18$$; + this.pci = $cpu$jscomp$18$$.devices.pci; + this.device_id = $options$jscomp$37$$.device_id; + this.pci_space = [244, 26, $options$jscomp$37$$.device_id & 255, $options$jscomp$37$$.device_id >> 8, 7, 5, 16, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 168, 0, 0, 0, 16, 191, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 26, $options$jscomp$37$$.subsystem_device_id & 255, $options$jscomp$37$$.subsystem_device_id >> 8, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, ]; + this.pci_space = this.pci_space.concat($v86util$$.zeros(256 - this.pci_space.length)); + this.pci_id = $options$jscomp$37$$.pci_id; + this.pci_bars = []; + this.name = $options$jscomp$37$$.name; + this.driver_feature_select = this.device_feature_select = 0; + this.device_feature = new Uint32Array(4); + this.driver_feature = new Uint32Array(4); + for ($f$jscomp$3_offsets$$ of $options$jscomp$37$$.common.features) { + $dbg_assert$$(0 <= $f$jscomp$3_offsets$$, "VirtIO device<" + this.name + "> feature bit numbers must be non-negative"), $dbg_assert$$(128 > $f$jscomp$3_offsets$$, "VirtIO device<" + this.name + "> feature bit numbers assumed less than 128 in implementation"), this.device_feature[$f$jscomp$3_offsets$$ >>> 5] |= 1 << ($f$jscomp$3_offsets$$ & 31), this.driver_feature[$f$jscomp$3_offsets$$ >>> 5] |= 1 << ($f$jscomp$3_offsets$$ & 31); + } + $dbg_assert$$($options$jscomp$37$$.common.features.includes(32), "VirtIO device<" + this.name + "> only non-transitional devices are supported"); + this.features_ok = !0; + this.device_status = 0; + this.config_has_changed = !1; + this.config_generation = 0; + this.queues = []; + for (var $effective_offset_queue_options$$ of $options$jscomp$37$$.common.queues) { + this.queues.push(new $VirtQueue$$($cpu$jscomp$18$$, this, $effective_offset_queue_options$$)); + } + this.queue_select = 0; + this.queue_selected = this.queues[0]; + this.isr_status = 0; + var $f$jscomp$3_offsets$$ = new Set; + for ($capabilities_offset$jscomp$52$$ of this.queues.map($q$$ => $q$$.notify_offset)) { + $effective_offset_queue_options$$ = $options$jscomp$37$$.notification.single_handler ? 0 : $capabilities_offset$jscomp$52$$, $f$jscomp$3_offsets$$.add($effective_offset_queue_options$$), $dbg_assert$$($options$jscomp$37$$.notification.handlers[$effective_offset_queue_options$$], "VirtIO device<" + this.name + "> every queue's notifier must exist"); + } + for (const [$index$jscomp$90$$, $handler$jscomp$12$$] of $options$jscomp$37$$.notification.handlers.entries()) { + $dbg_assert$$(!$handler$jscomp$12$$ || $f$jscomp$3_offsets$$.has($index$jscomp$90$$), "VirtIO device<" + this.name + "> no defined notify handler should be unused"); + } + var $capabilities_offset$jscomp$52$$ = []; + $capabilities_offset$jscomp$52$$.push(this.create_common_capability($options$jscomp$37$$.common)); + $capabilities_offset$jscomp$52$$.push(this.create_notification_capability($options$jscomp$37$$.notification)); + $capabilities_offset$jscomp$52$$.push(this.create_isr_capability($options$jscomp$37$$.isr_status)); + $options$jscomp$37$$.device_specific && $capabilities_offset$jscomp$52$$.push(this.create_device_specific_capability($options$jscomp$37$$.device_specific)); + this.init_capabilities($capabilities_offset$jscomp$52$$); + $cpu$jscomp$18$$.devices.pci.register_device(this); + this.reset(); +} +$VirtIO$$.prototype.create_common_capability = function($options$jscomp$38$$) { + return {type:1, bar:0, port:$options$jscomp$38$$.initial_port, use_mmio:!1, offset:0, extra:new Uint8Array(0), struct:[{bytes:4, name:"device_feature_select", read:() => this.device_feature_select, write:$data$jscomp$151$$ => { + this.device_feature_select = $data$jscomp$151$$; + }, }, {bytes:4, name:"device_feature", read:() => this.device_feature[this.device_feature_select] || 0, write:() => { + }, }, {bytes:4, name:"driver_feature_select", read:() => this.driver_feature_select, write:$data$jscomp$153$$ => { + this.driver_feature_select = $data$jscomp$153$$; + }, }, {bytes:4, name:"driver_feature", read:() => this.driver_feature[this.driver_feature_select] || 0, write:$data$jscomp$154$$ => { + const $supported_feature$$ = this.device_feature[this.driver_feature_select]; + this.driver_feature_select < this.driver_feature.length && (this.driver_feature[this.driver_feature_select] = $data$jscomp$154$$ & $supported_feature$$); + this.features_ok = this.features_ok && !($data$jscomp$154$$ & ~$supported_feature$$); + }, }, {bytes:2, name:"msix_config", read:() => { + $dbg_log$$("No msi-x capability supported.", 2097152); + return 65535; + }, write:() => { + $dbg_log$$("No msi-x capability supported.", 2097152); + }, }, {bytes:2, name:"num_queues", read:() => this.queues.length, write:() => { + }, }, {bytes:1, name:"device_status", read:() => this.device_status, write:$data$jscomp$157$$ => { + 0 === $data$jscomp$157$$ ? ($dbg_log$$("Reset device<" + this.name + ">", 2097152), this.reset()) : $data$jscomp$157$$ & 128 ? $dbg_log$$("Warning: Device<" + this.name + "> status failed", 2097152) : $dbg_log$$("Device<" + this.name + "> status: " + ($data$jscomp$157$$ & 1 ? "ACKNOWLEDGE " : "") + ($data$jscomp$157$$ & 2 ? "DRIVER " : "") + ($data$jscomp$157$$ & 4 ? "DRIVER_OK" : "") + ($data$jscomp$157$$ & 8 ? "FEATURES_OK " : "") + ($data$jscomp$157$$ & 64 ? "DEVICE_NEEDS_RESET" : ""), 2097152); + $data$jscomp$157$$ & ~this.device_status & 4 && this.device_status & 64 && this.notify_config_changes(); + this.features_ok || ($data$jscomp$157$$ & 8 && $dbg_log$$("Removing FEATURES_OK", 2097152), $data$jscomp$157$$ &= -9); + this.device_status = $data$jscomp$157$$; + if ($data$jscomp$157$$ & ~this.device_status & 4) { + $options$jscomp$38$$.on_driver_ok(); + } + }, }, {bytes:1, name:"config_generation", read:() => this.config_generation, write:() => { + }, }, {bytes:2, name:"queue_select", read:() => this.queue_select, write:$data$jscomp$159$$ => { + this.queue_select = $data$jscomp$159$$; + this.queue_selected = this.queue_select < this.queues.length ? this.queues[this.queue_select] : null; + }, }, {bytes:2, name:"queue_size", read:() => this.queue_selected ? this.queue_selected.size : 0, write:$data$jscomp$160$$ => { + this.queue_selected && ($data$jscomp$160$$ & $data$jscomp$160$$ - 1 && ($dbg_log$$("Warning: dev<" + this.name + "> Given queue size was not a power of 2. Rounding up to next power of 2.", 2097152), $data$jscomp$160$$ = 1 << $v86util$$.int_log2($data$jscomp$160$$ - 1) + 1), $data$jscomp$160$$ > this.queue_selected.size_supported && ($dbg_log$$("Warning: dev<" + this.name + "> Trying to set queue size greater than supported. Clamping to supported size.", 2097152), $data$jscomp$160$$ = this.queue_selected.size_supported), + this.queue_selected.set_size($data$jscomp$160$$)); + }, }, {bytes:2, name:"queue_msix_vector", read:() => { + $dbg_log$$("No msi-x capability supported.", 2097152); + return 65535; + }, write:() => { + $dbg_log$$("No msi-x capability supported.", 2097152); + }, }, {bytes:2, name:"queue_enable", read:() => this.queue_selected ? this.queue_selected.enabled | 0 : 0, write:$data$jscomp$162$$ => { + this.queue_selected && (1 === $data$jscomp$162$$ ? this.queue_selected.is_configured() ? this.queue_selected.enable() : $dbg_log$$("Driver bug: tried enabling unconfigured queue", 2097152) : 0 === $data$jscomp$162$$ && $dbg_log$$("Driver bug: tried writing 0 to queue_enable", 2097152)); + }, }, {bytes:2, name:"queue_notify_off", read:() => this.queue_selected ? this.queue_selected.notify_offset : 0, write:() => { + }, }, {bytes:4, name:"queue_desc (low dword)", read:() => this.queue_selected ? this.queue_selected.desc_addr : 0, write:$data$jscomp$164$$ => { + this.queue_selected && (this.queue_selected.desc_addr = $data$jscomp$164$$); + }, }, {bytes:4, name:"queue_desc (high dword)", read:() => 0, write:$data$jscomp$165$$ => { + 0 !== $data$jscomp$165$$ && $dbg_log$$("Warning: High dword of 64 bit queue_desc ignored:" + $data$jscomp$165$$, 2097152); + }, }, {bytes:4, name:"queue_avail (low dword)", read:() => this.queue_selected ? this.queue_selected.avail_addr : 0, write:$data$jscomp$166$$ => { + this.queue_selected && (this.queue_selected.avail_addr = $data$jscomp$166$$); + }, }, {bytes:4, name:"queue_avail (high dword)", read:() => 0, write:$data$jscomp$167$$ => { + 0 !== $data$jscomp$167$$ && $dbg_log$$("Warning: High dword of 64 bit queue_avail ignored:" + $data$jscomp$167$$, 2097152); + }, }, {bytes:4, name:"queue_used (low dword)", read:() => this.queue_selected ? this.queue_selected.used_addr : 0, write:$data$jscomp$168$$ => { + this.queue_selected && (this.queue_selected.used_addr = $data$jscomp$168$$); + }, }, {bytes:4, name:"queue_used (high dword)", read:() => 0, write:$data$jscomp$169$$ => { + 0 !== $data$jscomp$169$$ && $dbg_log$$("Warning: High dword of 64 bit queue_used ignored:" + $data$jscomp$169$$, 2097152); + }, }, ], }; +}; +$VirtIO$$.prototype.create_notification_capability = function($options$jscomp$39$$) { + const $notify_struct$$ = []; + let $notify_off_multiplier$$; + $options$jscomp$39$$.single_handler ? ($dbg_assert$$(1 === $options$jscomp$39$$.handlers.length, "VirtIO device<" + this.name + "> too many notify handlers specified: expected single handler"), $notify_off_multiplier$$ = 0) : $notify_off_multiplier$$ = 2; + for (const [$i$jscomp$52$$, $handler$jscomp$13$$] of $options$jscomp$39$$.handlers.entries()) { + $notify_struct$$.push({bytes:2, name:"notify" + $i$jscomp$52$$, read:() => 65535, write:$handler$jscomp$13$$ || (() => { + }), }); + } + return {type:2, bar:1, port:$options$jscomp$39$$.initial_port, use_mmio:!1, offset:0, extra:new Uint8Array([$notify_off_multiplier$$ & 255, $notify_off_multiplier$$ >> 8 & 255, $notify_off_multiplier$$ >> 16 & 255, $notify_off_multiplier$$ >> 24, ]), struct:$notify_struct$$, }; +}; +$VirtIO$$.prototype.create_isr_capability = function($options$jscomp$40$$) { + return {type:3, bar:2, port:$options$jscomp$40$$.initial_port, use_mmio:!1, offset:0, extra:new Uint8Array(0), struct:[{bytes:1, name:"isr_status", read:() => { + const $isr_status$$ = this.isr_status; + this.lower_irq(); + return $isr_status$$; + }, write:() => { + }, }, ], }; +}; +$VirtIO$$.prototype.create_device_specific_capability = function($options$jscomp$41$$) { + $dbg_assert$$(~$options$jscomp$41$$.offset & 3, "VirtIO device<" + this.name + "> device specific cap offset must be 4-byte aligned"); + return {type:4, bar:3, port:$options$jscomp$41$$.initial_port, use_mmio:!1, offset:0, extra:new Uint8Array(0), struct:$options$jscomp$41$$.struct, }; +}; +$VirtIO$$.prototype.init_capabilities = function($cap_len$jscomp$1_capabilities$jscomp$1_write$$) { + let $cap_next$$ = this.pci_space[52] = 64; + var $bar_offset_cap_ptr_port$jscomp$2$$ = $cap_next$$; + for (const $cap$jscomp$2$$ of $cap_len$jscomp$1_capabilities$jscomp$1_write$$) { + $cap_len$jscomp$1_capabilities$jscomp$1_write$$ = 16 + $cap$jscomp$2$$.extra.length; + $bar_offset_cap_ptr_port$jscomp$2$$ = $cap_next$$; + $cap_next$$ = $bar_offset_cap_ptr_port$jscomp$2$$ + $cap_len$jscomp$1_capabilities$jscomp$1_write$$; + $dbg_assert$$(256 >= $cap_next$$, "VirtIO device<" + this.name + "> can't fit all capabilities into 256byte configspace"); + $dbg_assert$$(0 <= $cap$jscomp$2$$.bar && 6 > $cap$jscomp$2$$.bar, "VirtIO device<" + this.name + "> capability invalid bar number"); + var $bar_size_shim_read8_on_16$$ = $cap$jscomp$2$$.struct.reduce(($bytes$jscomp$3$$, $field$$) => $bytes$jscomp$3$$ + $field$$.bytes, 0); + $bar_size_shim_read8_on_16$$ += $cap$jscomp$2$$.offset; + $bar_size_shim_read8_on_16$$ = 16 > $bar_size_shim_read8_on_16$$ ? 16 : 1 << $v86util$$.int_log2($bar_size_shim_read8_on_16$$ - 1) + 1; + $dbg_assert$$(0 === ($cap$jscomp$2$$.port & $bar_size_shim_read8_on_16$$ - 1), "VirtIO device<" + this.name + "> capability port should be aligned to pci bar size"); + this.pci_bars[$cap$jscomp$2$$.bar] = {size:$bar_size_shim_read8_on_16$$, }; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$] = 9; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 1] = $cap_next$$; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 2] = $cap_len$jscomp$1_capabilities$jscomp$1_write$$; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 3] = $cap$jscomp$2$$.type; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 4] = $cap$jscomp$2$$.bar; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 5] = 0; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 6] = 0; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 7] = 0; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 8] = $cap$jscomp$2$$.offset & 255; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 9] = $cap$jscomp$2$$.offset >>> 8 & 255; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 10] = $cap$jscomp$2$$.offset >>> 16 & 255; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 11] = $cap$jscomp$2$$.offset >>> 24; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 12] = $bar_size_shim_read8_on_16$$ & 255; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 13] = $bar_size_shim_read8_on_16$$ >>> 8 & 255; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 14] = $bar_size_shim_read8_on_16$$ >>> 16 & 255; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 15] = $bar_size_shim_read8_on_16$$ >>> 24; + for (const [$i$jscomp$53$$, $extra_byte$$] of $cap$jscomp$2$$.extra.entries()) { + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 16 + $i$jscomp$53$$] = $extra_byte$$; + } + $bar_offset_cap_ptr_port$jscomp$2$$ = 16 + 4 * $cap$jscomp$2$$.bar; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$] = $cap$jscomp$2$$.port & 254 | !$cap$jscomp$2$$.use_mmio; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 1] = $cap$jscomp$2$$.port >>> 8 & 255; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 2] = $cap$jscomp$2$$.port >>> 16 & 255; + this.pci_space[$bar_offset_cap_ptr_port$jscomp$2$$ + 3] = $cap$jscomp$2$$.port >>> 24 & 255; + $bar_offset_cap_ptr_port$jscomp$2$$ = $cap$jscomp$2$$.port + $cap$jscomp$2$$.offset; + for (const $field$jscomp$1$$ of $cap$jscomp$2$$.struct) { + let $read$$ = $field$jscomp$1$$.read; + $cap_len$jscomp$1_capabilities$jscomp$1_write$$ = $field$jscomp$1$$.write; + $read$$ = () => { + const $val$$ = $field$jscomp$1$$.read(); + $dbg_log$$("Device<" + this.name + "> cap[" + $cap$jscomp$2$$.type + "] read[" + $field$jscomp$1$$.name + "] => " + $h$$($val$$, 8 * $field$jscomp$1$$.bytes), 2097152); + return $val$$; + }; + $cap_len$jscomp$1_capabilities$jscomp$1_write$$ = $data$jscomp$172$$ => { + $dbg_log$$("Device<" + this.name + "> cap[" + $cap$jscomp$2$$.type + "] write[" + $field$jscomp$1$$.name + "] <= " + $h$$($data$jscomp$172$$, 8 * $field$jscomp$1$$.bytes), 2097152); + $field$jscomp$1$$.write($data$jscomp$172$$); + }; + if ($cap$jscomp$2$$.use_mmio) { + $dbg_assert$$(!1, "VirtIO device <" + this.name + "> mmio capability not implemented."); + } else { + $bar_size_shim_read8_on_16$$ = function($addr$jscomp$43$$) { + $dbg_log$$("Warning: 8-bit read from 16-bit virtio port", 2097152); + return $read$$($addr$jscomp$43$$ & -2) >> (($addr$jscomp$43$$ & 1) << 3) & 255; + }; + const $shim_read8_on_32$$ = function($addr$jscomp$44$$) { + $dbg_log$$("Warning: 8-bit read from 32-bit virtio port", 2097152); + return $read$$($addr$jscomp$44$$ & -4) >> (($addr$jscomp$44$$ & 3) << 3) & 255; + }; + switch($field$jscomp$1$$.bytes) { + case 4: + this.cpu.io.register_read($bar_offset_cap_ptr_port$jscomp$2$$, this, $shim_read8_on_32$$, void 0, $read$$); + this.cpu.io.register_write($bar_offset_cap_ptr_port$jscomp$2$$, this, void 0, void 0, $cap_len$jscomp$1_capabilities$jscomp$1_write$$); + break; + case 2: + this.cpu.io.register_read($bar_offset_cap_ptr_port$jscomp$2$$, this, $bar_size_shim_read8_on_16$$, $read$$); + this.cpu.io.register_write($bar_offset_cap_ptr_port$jscomp$2$$, this, void 0, $cap_len$jscomp$1_capabilities$jscomp$1_write$$); + break; + case 1: + this.cpu.io.register_read($bar_offset_cap_ptr_port$jscomp$2$$, this, $read$$); + this.cpu.io.register_write($bar_offset_cap_ptr_port$jscomp$2$$, this, $cap_len$jscomp$1_capabilities$jscomp$1_write$$); + break; + default: + $dbg_assert$$(!1, "VirtIO device <" + this.name + "> invalid capability field width of " + $field$jscomp$1$$.bytes + " bytes"); + } + } + $bar_offset_cap_ptr_port$jscomp$2$$ += $field$jscomp$1$$.bytes; + } + } + $dbg_assert$$(256 >= $cap_next$$ + 20, "VirtIO device<" + this.name + "> can't fit all capabilities into 256byte configspace"); + this.pci_space[$cap_next$$] = 9; + this.pci_space[$cap_next$$ + 1] = 0; + this.pci_space[$cap_next$$ + 2] = 20; + this.pci_space[$cap_next$$ + 3] = 5; + this.pci_space[$cap_next$$ + 4] = 0; + this.pci_space[$cap_next$$ + 5] = 0; + this.pci_space[$cap_next$$ + 6] = 0; + this.pci_space[$cap_next$$ + 7] = 0; + this.pci_space[$cap_next$$ + 8] = 0; + this.pci_space[$cap_next$$ + 9] = 0; + this.pci_space[$cap_next$$ + 10] = 0; + this.pci_space[$cap_next$$ + 11] = 0; + this.pci_space[$cap_next$$ + 12] = 0; + this.pci_space[$cap_next$$ + 13] = 0; + this.pci_space[$cap_next$$ + 14] = 0; + this.pci_space[$cap_next$$ + 15] = 0; + this.pci_space[$cap_next$$ + 16] = 0; + this.pci_space[$cap_next$$ + 17] = 0; + this.pci_space[$cap_next$$ + 18] = 0; + this.pci_space[$cap_next$$ + 19] = 0; +}; +$VirtIO$$.prototype.get_state = function() { + let $state$jscomp$41$$ = []; + $state$jscomp$41$$[0] = this.device_feature_select; + $state$jscomp$41$$[1] = this.driver_feature_select; + $state$jscomp$41$$[2] = this.device_feature; + $state$jscomp$41$$[3] = this.driver_feature; + $state$jscomp$41$$[4] = this.features_ok; + $state$jscomp$41$$[5] = this.device_status; + $state$jscomp$41$$[6] = this.config_has_changed; + $state$jscomp$41$$[7] = this.config_generation; + $state$jscomp$41$$[8] = this.isr_status; + $state$jscomp$41$$[9] = this.queue_select; + return $state$jscomp$41$$ = $state$jscomp$41$$.concat(this.queues); +}; +$VirtIO$$.prototype.set_state = function($state$jscomp$42$$) { + this.device_feature_select = $state$jscomp$42$$[0]; + this.driver_feature_select = $state$jscomp$42$$[1]; + this.device_feature = $state$jscomp$42$$[2]; + this.driver_feature = $state$jscomp$42$$[3]; + this.features_ok = $state$jscomp$42$$[4]; + this.device_status = $state$jscomp$42$$[5]; + this.config_has_changed = $state$jscomp$42$$[6]; + this.config_generation = $state$jscomp$42$$[7]; + this.isr_status = $state$jscomp$42$$[8]; + this.queue_select = $state$jscomp$42$$[9]; + let $i$jscomp$54$$ = 0; + for (const $queue$$ of $state$jscomp$42$$.slice(10)) { + this.queues[$i$jscomp$54$$].set_state($queue$$), $i$jscomp$54$$++; + } + this.queue_selected = this.queues[this.queue_select] || null; +}; +$VirtIO$$.prototype.reset = function() { + this.driver_feature_select = this.device_feature_select = 0; + this.driver_feature.set(this.device_feature); + this.features_ok = !0; + this.queue_select = this.device_status = 0; + this.queue_selected = this.queues[0]; + for (const $queue$jscomp$1$$ of this.queues) { + $queue$jscomp$1$$.reset(); + } + this.config_has_changed = !1; + this.config_generation = 0; + this.lower_irq(); +}; +$VirtIO$$.prototype.notify_config_changes = function() { + this.config_has_changed = !0; + this.device_status & 4 ? this.raise_irq(2) : $dbg_assert$$(!1, "VirtIO device<" + this.name + "> attempted to notify driver before DRIVER_OK"); +}; +$VirtIO$$.prototype.update_config_generation = function() { + this.config_has_changed && (this.config_generation++, this.config_generation &= 255, this.config_has_changed = !1); +}; +$VirtIO$$.prototype.is_feature_negotiated = function($feature$jscomp$4$$) { + return 0 < (this.driver_feature[$feature$jscomp$4$$ >>> 5] & 1 << ($feature$jscomp$4$$ & 31)); +}; +$VirtIO$$.prototype.needs_reset = function() { + $dbg_log$$("Device<" + this.name + "> experienced error - requires reset", 2097152); + this.device_status |= 64; + this.device_status & 4 && this.notify_config_changes(); +}; +$VirtIO$$.prototype.raise_irq = function($type$jscomp$154$$) { + $dbg_log$$("Raise irq " + $h$$($type$jscomp$154$$), 2097152); + this.isr_status |= $type$jscomp$154$$; + this.pci.raise_irq(this.pci_id); +}; +$VirtIO$$.prototype.lower_irq = function() { + $dbg_log$$("Lower irq ", 2097152); + this.isr_status = 0; + this.pci.lower_irq(this.pci_id); +}; +function $VirtQueue$$($cpu$jscomp$19$$, $virtio$$, $options$jscomp$42$$) { + this.cpu = $cpu$jscomp$19$$; + this.virtio = $virtio$$; + this.size_supported = this.size = $options$jscomp$42$$.size_supported; + this.mask = this.size - 1; + this.enabled = !1; + this.notify_offset = $options$jscomp$42$$.notify_offset; + this.num_staged_replies = this.used_addr = this.avail_last_idx = this.avail_addr = this.desc_addr = 0; + this.reset(); +} +$VirtQueue$$.prototype.get_state = function() { + const $state$jscomp$43$$ = []; + $state$jscomp$43$$[0] = this.size; + $state$jscomp$43$$[1] = this.size_supported; + $state$jscomp$43$$[2] = this.enabled; + $state$jscomp$43$$[3] = this.notify_offset; + $state$jscomp$43$$[4] = this.desc_addr; + $state$jscomp$43$$[5] = this.avail_addr; + $state$jscomp$43$$[6] = this.avail_last_idx; + $state$jscomp$43$$[7] = this.used_addr; + $state$jscomp$43$$[8] = this.num_staged_replies; + return $state$jscomp$43$$; +}; +$VirtQueue$$.prototype.set_state = function($state$jscomp$44$$) { + this.size = $state$jscomp$44$$[0]; + this.size_supported = $state$jscomp$44$$[1]; + this.enabled = $state$jscomp$44$$[2]; + this.notify_offset = $state$jscomp$44$$[3]; + this.desc_addr = $state$jscomp$44$$[4]; + this.avail_addr = $state$jscomp$44$$[5]; + this.avail_last_idx = $state$jscomp$44$$[6]; + this.used_addr = $state$jscomp$44$$[7]; + this.num_staged_replies = $state$jscomp$44$$[8]; + this.mask = this.size - 1; +}; +$VirtQueue$$.prototype.reset = function() { + this.enabled = !1; + this.num_staged_replies = this.used_addr = this.avail_last_idx = this.avail_addr = this.desc_addr = 0; + this.set_size(this.size_supported); +}; +$VirtQueue$$.prototype.is_configured = function() { + return this.desc_addr && this.avail_addr && this.used_addr; +}; +$VirtQueue$$.prototype.enable = function() { + $dbg_assert$$(this.is_configured(), "VirtQueue must be configured before enabled"); + this.enabled = !0; +}; +$VirtQueue$$.prototype.set_size = function($size$jscomp$35$$) { + $dbg_assert$$(0 === ($size$jscomp$35$$ & $size$jscomp$35$$ - 1), "VirtQueue size must be power of 2 or zero"); + $dbg_assert$$($size$jscomp$35$$ <= this.size_supported, "VirtQueue size must be within supported size"); + this.size = $size$jscomp$35$$; + this.mask = $size$jscomp$35$$ - 1; +}; +$VirtQueue$$.prototype.count_requests = function() { + $dbg_assert$$(this.avail_addr, "VirtQueue addresses must be configured before use"); + return this.avail_get_idx() - this.avail_last_idx & this.mask; +}; +$VirtQueue$$.prototype.has_request = function() { + $dbg_assert$$(this.avail_addr, "VirtQueue addresses must be configured before use"); + return (this.avail_get_idx() & this.mask) !== this.avail_last_idx; +}; +$VirtQueue$$.prototype.pop_request = function() { + $dbg_assert$$(this.avail_addr, "VirtQueue addresses must be configured before use"); + $dbg_assert$$(this.has_request(), "VirtQueue must not pop nonexistent request"); + var $bufchain$jscomp$3_desc_idx$$ = this.avail_get_entry(this.avail_last_idx); + $dbg_log$$("Pop request: avail_last_idx=" + this.avail_last_idx + " desc_idx=" + $bufchain$jscomp$3_desc_idx$$, 2097152); + $bufchain$jscomp$3_desc_idx$$ = new $VirtQueueBufferChain$$(this, $bufchain$jscomp$3_desc_idx$$); + this.avail_last_idx = this.avail_last_idx + 1 & this.mask; + return $bufchain$jscomp$3_desc_idx$$; +}; +$VirtQueue$$.prototype.push_reply = function($bufchain$jscomp$4$$) { + $dbg_assert$$(this.used_addr, "VirtQueue addresses must be configured before use"); + $dbg_assert$$(this.num_staged_replies < this.size, "VirtQueue replies must not exceed queue size"); + const $used_idx$$ = this.used_get_idx() + this.num_staged_replies & this.mask; + $dbg_log$$("Push reply: used_idx=" + $used_idx$$ + " desc_idx=" + $bufchain$jscomp$4$$.head_idx, 2097152); + this.used_set_entry($used_idx$$, $bufchain$jscomp$4$$.head_idx, $bufchain$jscomp$4$$.length_written); + this.num_staged_replies++; +}; +$VirtQueue$$.prototype.flush_replies = function() { + $dbg_assert$$(this.used_addr, "VirtQueue addresses must be configured before use"); + if (0 === this.num_staged_replies) { + $dbg_log$$("flush_replies: Nothing to flush", 2097152); + } else { + $dbg_log$$("Flushing " + this.num_staged_replies + " replies", 2097152); + var $new_idx$$ = this.used_get_idx() + this.num_staged_replies & 65535; + this.used_set_idx($new_idx$$); + this.num_staged_replies = 0; + this.virtio.is_feature_negotiated(29) ? (this.avail_get_used_event(), this.virtio.raise_irq(1)) : ~this.avail_get_flags() & 1 && this.virtio.raise_irq(1); + } +}; +$VirtQueue$$.prototype.notify_me_after = function($avail_event_num_skipped_requests$$) { + $dbg_assert$$(0 <= $avail_event_num_skipped_requests$$, "Must skip a non-negative number of requests"); + $avail_event_num_skipped_requests$$ = this.avail_get_idx() + $avail_event_num_skipped_requests$$ & 65535; + this.used_set_avail_event($avail_event_num_skipped_requests$$); +}; +$VirtQueue$$.prototype.get_descriptor = function($table_address$$, $i$jscomp$55$$) { + return {addr_low:this.cpu.read32s($table_address$$ + 16 * $i$jscomp$55$$), addr_high:this.cpu.read32s($table_address$$ + 16 * $i$jscomp$55$$ + 4), len:this.cpu.read32s($table_address$$ + 16 * $i$jscomp$55$$ + 8), flags:this.cpu.read16($table_address$$ + 16 * $i$jscomp$55$$ + 12), next:this.cpu.read16($table_address$$ + 16 * $i$jscomp$55$$ + 14), }; +}; +$VirtQueue$$.prototype.avail_get_flags = function() { + return this.cpu.read16(this.avail_addr); +}; +$VirtQueue$$.prototype.avail_get_idx = function() { + return this.cpu.read16(this.avail_addr + 2); +}; +$VirtQueue$$.prototype.avail_get_entry = function($i$jscomp$56$$) { + return this.cpu.read16(this.avail_addr + 4 + 2 * $i$jscomp$56$$); +}; +$VirtQueue$$.prototype.avail_get_used_event = function() { + return this.cpu.read16(this.avail_addr + 4 + 2 * this.size); +}; +$VirtQueue$$.prototype.used_get_flags = function() { + return this.cpu.read16(this.used_addr); +}; +$VirtQueue$$.prototype.used_set_flags = function($value$jscomp$176$$) { + this.cpu.write16(this.used_addr, $value$jscomp$176$$); +}; +$VirtQueue$$.prototype.used_get_idx = function() { + return this.cpu.read16(this.used_addr + 2); +}; +$VirtQueue$$.prototype.used_set_idx = function($value$jscomp$177$$) { + this.cpu.write16(this.used_addr + 2, $value$jscomp$177$$); +}; +$VirtQueue$$.prototype.used_set_entry = function($i$jscomp$57$$, $desc_idx$jscomp$1$$, $length_written$$) { + this.cpu.write32(this.used_addr + 4 + 8 * $i$jscomp$57$$, $desc_idx$jscomp$1$$); + this.cpu.write32(this.used_addr + 8 + 8 * $i$jscomp$57$$, $length_written$$); +}; +$VirtQueue$$.prototype.used_set_avail_event = function($value$jscomp$178$$) { + this.cpu.write16(this.used_addr + 4 + 8 * this.size, $value$jscomp$178$$); +}; +function $VirtQueueBufferChain$$($virtqueue$$, $desc_idx$jscomp$2_head_idx$$) { + this.cpu = $virtqueue$$.cpu; + this.virtio = $virtqueue$$.virtio; + this.head_idx = $desc_idx$jscomp$2_head_idx$$; + this.read_buffers = []; + this.length_readable = this.read_buffer_offset = this.read_buffer_idx = 0; + this.write_buffers = []; + this.length_writable = this.length_written = this.write_buffer_offset = this.write_buffer_idx = 0; + let $table_address$jscomp$1$$ = $virtqueue$$.desc_addr, $chain_length$$ = 0, $chain_max$$ = $virtqueue$$.size, $writable_region$$ = !1; + const $has_indirect_feature$$ = this.virtio.is_feature_negotiated(28); + $dbg_log$$("<<< Descriptor chain start", 2097152); + do { + const $desc$$ = $virtqueue$$.get_descriptor($table_address$jscomp$1$$, $desc_idx$jscomp$2_head_idx$$); + $dbg_log$$("descriptor: idx=" + $desc_idx$jscomp$2_head_idx$$ + " addr=" + $h$$($desc$$.addr_high, 8) + ":" + $h$$($desc$$.addr_low, 8) + " len=" + $h$$($desc$$.len, 8) + " flags=" + $h$$($desc$$.flags, 4) + " next=" + $h$$($desc$$.next, 4), 2097152); + if ($has_indirect_feature$$ && $desc$$.flags & 4) { + $desc$$.flags & 1 && $dbg_log$$("Driver bug: has set VIRTQ_DESC_F_NEXT flag in an indirect table descriptor", 2097152), $table_address$jscomp$1$$ = $desc$$.addr_low, $chain_length$$ = $desc_idx$jscomp$2_head_idx$$ = 0, $chain_max$$ = $desc$$.len / 16, $dbg_log$$("start indirect", 2097152); + } else { + if ($desc$$.flags & 2) { + $writable_region$$ = !0, this.write_buffers.push($desc$$), this.length_writable += $desc$$.len; + } else { + if ($writable_region$$) { + $dbg_log$$("Driver bug: readonly buffer after writeonly buffer within chain", 2097152); + break; + } + this.read_buffers.push($desc$$); + this.length_readable += $desc$$.len; + } + $chain_length$$++; + if ($chain_length$$ > $chain_max$$) { + $dbg_log$$("Driver bug: descriptor chain cycle detected", 2097152); + break; + } + if ($desc$$.flags & 1) { + $desc_idx$jscomp$2_head_idx$$ = $desc$$.next; + } else { + break; + } + } + } while (1); + $dbg_log$$("Descriptor chain end >>>", 2097152); +} +$VirtQueueBufferChain$$.prototype.get_next_blob = function($dest_buffer$$) { + let $dest_offset$$ = 0, $remaining$jscomp$1$$ = $dest_buffer$$.length; + for (; $remaining$jscomp$1$$;) { + if (this.read_buffer_idx === this.read_buffers.length) { + $dbg_log$$("Device<" + this.virtio.name + "> Read more than device-readable buffers has", 2097152); + break; + } + var $buf$jscomp$1_read_length$$ = this.read_buffers[this.read_buffer_idx]; + const $read_address$$ = $buf$jscomp$1_read_length$$.addr_low + this.read_buffer_offset; + $buf$jscomp$1_read_length$$ = $buf$jscomp$1_read_length$$.len - this.read_buffer_offset; + $buf$jscomp$1_read_length$$ > $remaining$jscomp$1$$ ? ($buf$jscomp$1_read_length$$ = $remaining$jscomp$1$$, this.read_buffer_offset += $remaining$jscomp$1$$) : (this.read_buffer_idx++, this.read_buffer_offset = 0); + $dest_buffer$$.set(this.cpu.read_blob($read_address$$, $buf$jscomp$1_read_length$$), $dest_offset$$); + $dest_offset$$ += $buf$jscomp$1_read_length$$; + $remaining$jscomp$1$$ -= $buf$jscomp$1_read_length$$; + } + return $dest_offset$$; +}; +$VirtQueueBufferChain$$.prototype.set_next_blob = function($src_buffer$$) { + let $src_offset$$ = 0, $remaining$jscomp$2$$ = $src_buffer$$.length; + for (; $remaining$jscomp$2$$;) { + if (this.write_buffer_idx === this.write_buffers.length) { + $dbg_log$$("Device<" + this.virtio.name + "> Write more than device-writable capacity", 2097152); + break; + } + var $buf$jscomp$2_write_length$$ = this.write_buffers[this.write_buffer_idx]; + const $write_address$$ = $buf$jscomp$2_write_length$$.addr_low + this.write_buffer_offset; + $buf$jscomp$2_write_length$$ = $buf$jscomp$2_write_length$$.len - this.write_buffer_offset; + $buf$jscomp$2_write_length$$ > $remaining$jscomp$2$$ ? ($buf$jscomp$2_write_length$$ = $remaining$jscomp$2$$, this.write_buffer_offset += $remaining$jscomp$2$$) : (this.write_buffer_idx++, this.write_buffer_offset = 0); + this.cpu.write_blob($src_buffer$$.subarray($src_offset$$, $src_offset$$ + $buf$jscomp$2_write_length$$), $write_address$$); + $src_offset$$ += $buf$jscomp$2_write_length$$; + $remaining$jscomp$2$$ -= $buf$jscomp$2_write_length$$; + } + this.length_written += $src_offset$$; + return $src_offset$$; +}; +function $VirtioConsole$$($cpu$jscomp$20$$, $bus$jscomp$10_queues$$) { + this.bus = $bus$jscomp$10_queues$$; + this.rows = 25; + this.cols = 80; + this.ports = 4; + $bus$jscomp$10_queues$$ = [{size_supported:16, notify_offset:0, }, {size_supported:16, notify_offset:1, }, {size_supported:16, notify_offset:2, }, {size_supported:16, notify_offset:3, }, ]; + for (let $i$jscomp$58$$ = 1; $i$jscomp$58$$ < this.ports; ++$i$jscomp$58$$) { + $bus$jscomp$10_queues$$.push({size_supported:16, notify_offset:0}), $bus$jscomp$10_queues$$.push({size_supported:8, notify_offset:1}); + } + this.virtio = new $VirtIO$$($cpu$jscomp$20$$, {name:"virtio-console", pci_id:56, device_id:4163, subsystem_device_id:3, common:{initial_port:47104, queues:$bus$jscomp$10_queues$$, features:[0, 1, 32, ], on_driver_ok:() => { + }, }, notification:{initial_port:47360, single_handler:!1, handlers:[$queue$jscomp$2_queue_id$jscomp$1$$ => { + for ($queue$jscomp$2_queue_id$jscomp$1$$ = this.virtio.queues[$queue$jscomp$2_queue_id$jscomp$1$$]; $queue$jscomp$2_queue_id$jscomp$1$$.count_requests() > $queue$jscomp$2_queue_id$jscomp$1$$.size - 2;) { + $queue$jscomp$2_queue_id$jscomp$1$$.pop_request(); + } + }, $queue_id$jscomp$2$$ => { + const $queue$jscomp$3$$ = this.virtio.queues[$queue_id$jscomp$2$$], $port$jscomp$3$$ = 3 < $queue_id$jscomp$2$$ ? $queue_id$jscomp$2$$ - 3 >> 1 : 0; + for (; $queue$jscomp$3$$.has_request();) { + const $bufchain$jscomp$5$$ = $queue$jscomp$3$$.pop_request(), $buffer$jscomp$38$$ = new Uint8Array($bufchain$jscomp$5$$.length_readable); + $bufchain$jscomp$5$$.get_next_blob($buffer$jscomp$38$$); + this.bus.send("virtio-console" + $port$jscomp$3$$ + "-output-bytes", $buffer$jscomp$38$$); + this.Ack($queue_id$jscomp$2$$, $bufchain$jscomp$5$$); + } + }, $queue$jscomp$4_queue_id$jscomp$3$$ => { + if (2 !== $queue$jscomp$4_queue_id$jscomp$3$$) { + $dbg_assert$$(!1, "VirtioConsole Notified for wrong queue: " + $queue$jscomp$4_queue_id$jscomp$3$$ + " (expected queue_id of 2)"); + } else { + for ($queue$jscomp$4_queue_id$jscomp$3$$ = this.virtio.queues[$queue$jscomp$4_queue_id$jscomp$3$$]; $queue$jscomp$4_queue_id$jscomp$3$$.count_requests() > $queue$jscomp$4_queue_id$jscomp$3$$.size - 2;) { + $queue$jscomp$4_queue_id$jscomp$3$$.pop_request(); + } + } + }, $queue_id$jscomp$4$$ => { + if (3 !== $queue_id$jscomp$4$$) { + $dbg_assert$$(!1, "VirtioConsole Notified for wrong queue: " + $queue_id$jscomp$4$$ + " (expected queue_id of 3)"); + } else { + for (var $queue$jscomp$5$$ = this.virtio.queues[$queue_id$jscomp$4$$]; $queue$jscomp$5$$.has_request();) { + var $bufchain$jscomp$6_i$jscomp$59$$ = $queue$jscomp$5$$.pop_request(), $buffer$jscomp$39_port$jscomp$4$$ = new Uint8Array($bufchain$jscomp$6_i$jscomp$59$$.length_readable); + $bufchain$jscomp$6_i$jscomp$59$$.get_next_blob($buffer$jscomp$39_port$jscomp$4$$); + var $event$jscomp$4_parts$jscomp$2$$ = $marshall$$.Unmarshall(["w", "h", "h"], $buffer$jscomp$39_port$jscomp$4$$, {offset:0}); + $buffer$jscomp$39_port$jscomp$4$$ = $event$jscomp$4_parts$jscomp$2$$[0]; + $event$jscomp$4_parts$jscomp$2$$ = $event$jscomp$4_parts$jscomp$2$$[1]; + this.Ack($queue_id$jscomp$4$$, $bufchain$jscomp$6_i$jscomp$59$$); + switch($event$jscomp$4_parts$jscomp$2$$) { + case 0: + for ($bufchain$jscomp$6_i$jscomp$59$$ = 0; $bufchain$jscomp$6_i$jscomp$59$$ < this.ports; ++$bufchain$jscomp$6_i$jscomp$59$$) { + this.SendEvent($bufchain$jscomp$6_i$jscomp$59$$, 1, 0); + } + break; + case 3: + this.Ack($queue_id$jscomp$4$$, $bufchain$jscomp$6_i$jscomp$59$$); + this.SendEvent($buffer$jscomp$39_port$jscomp$4$$, 4, 1); + this.SendName($buffer$jscomp$39_port$jscomp$4$$, "virtio-" + $buffer$jscomp$39_port$jscomp$4$$); + this.SendEvent($buffer$jscomp$39_port$jscomp$4$$, 6, 1); + break; + case 6: + this.Ack($queue_id$jscomp$4$$, $bufchain$jscomp$6_i$jscomp$59$$); + 0 === $buffer$jscomp$39_port$jscomp$4$$ && this.SendWindowSize($buffer$jscomp$39_port$jscomp$4$$); + break; + default: + $dbg_assert$$(!1, " VirtioConsole received unknown event: " + $event$jscomp$4_parts$jscomp$2$$[1]); + return; + } + } + } + }, ], }, isr_status:{initial_port:46848, }, device_specific:{initial_port:46592, struct:[{bytes:2, name:"cols", read:() => this.cols, write:() => { + }, }, {bytes:2, name:"rows", read:() => this.rows, write:() => { + }, }, {bytes:4, name:"max_nr_ports", read:() => this.ports, write:() => { + }, }, {bytes:4, name:"emerg_wr", read:() => 0, write:() => { + $dbg_assert$$(!1, "Emergency write!"); + }, }, ]}, }); + for (let $port$jscomp$5$$ = 0; $port$jscomp$5$$ < this.ports; ++$port$jscomp$5$$) { + const $queue_id$jscomp$5$$ = 0 === $port$jscomp$5$$ ? 0 : 2 * $port$jscomp$5$$ + 2; + this.bus.register("virtio-console" + $port$jscomp$5$$ + "-input-bytes", function($data$jscomp$177$$) { + var $bufchain$jscomp$7_queue$jscomp$6$$ = this.virtio.queues[$queue_id$jscomp$5$$]; + $bufchain$jscomp$7_queue$jscomp$6$$.has_request() && ($bufchain$jscomp$7_queue$jscomp$6$$ = $bufchain$jscomp$7_queue$jscomp$6$$.pop_request(), this.Send($queue_id$jscomp$5$$, $bufchain$jscomp$7_queue$jscomp$6$$, new Uint8Array($data$jscomp$177$$))); + }, this); + this.bus.register("virtio-console" + $port$jscomp$5$$ + "-resize", function($size$jscomp$36$$) { + this.cols = $size$jscomp$36$$[0]; + this.rows = $size$jscomp$36$$[1]; + this.virtio.queues[2].is_configured() && this.virtio.queues[2].has_request() && this.SendWindowSize($port$jscomp$5$$); + }, this); + } +} +$VirtioConsole$$.prototype.SendWindowSize = function($port$jscomp$6$$) { + const $bufchain$jscomp$8$$ = this.virtio.queues[2].pop_request(), $buf$jscomp$3$$ = new Uint8Array(12); + $marshall$$.Marshall(["w", "h", "h", "h", "h"], [$port$jscomp$6$$, 5, 0, this.rows, this.cols], $buf$jscomp$3$$, 0); + this.Send(2, $bufchain$jscomp$8$$, $buf$jscomp$3$$); +}; +$VirtioConsole$$.prototype.SendName = function($i$jscomp$60_port$jscomp$7$$, $name$jscomp$79_namex$$) { + const $bufchain$jscomp$9$$ = this.virtio.queues[2].pop_request(); + $name$jscomp$79_namex$$ = (new TextEncoder).encode($name$jscomp$79_namex$$); + const $buf$jscomp$4$$ = new Uint8Array(8 + $name$jscomp$79_namex$$.length + 1); + $marshall$$.Marshall(["w", "h", "h"], [$i$jscomp$60_port$jscomp$7$$, 7, 1], $buf$jscomp$4$$, 0); + for ($i$jscomp$60_port$jscomp$7$$ = 0; $i$jscomp$60_port$jscomp$7$$ < $name$jscomp$79_namex$$.length; ++$i$jscomp$60_port$jscomp$7$$) { + $buf$jscomp$4$$[$i$jscomp$60_port$jscomp$7$$ + 8] = $name$jscomp$79_namex$$[$i$jscomp$60_port$jscomp$7$$]; + } + $buf$jscomp$4$$[8 + $name$jscomp$79_namex$$.length] = 0; + this.Send(2, $bufchain$jscomp$9$$, $buf$jscomp$4$$); +}; +$VirtioConsole$$.prototype.get_state = function() { + const $state$jscomp$45$$ = []; + $state$jscomp$45$$[0] = this.virtio; + $state$jscomp$45$$[1] = this.rows; + $state$jscomp$45$$[2] = this.cols; + $state$jscomp$45$$[3] = this.ports; + return $state$jscomp$45$$; +}; +$VirtioConsole$$.prototype.set_state = function($state$jscomp$46$$) { + this.virtio.set_state($state$jscomp$46$$[0]); + this.rows = $state$jscomp$46$$[1]; + this.cols = $state$jscomp$46$$[2]; + this.ports = $state$jscomp$46$$[3]; +}; +$VirtioConsole$$.prototype.reset = function() { + this.virtio.reset(); +}; +$VirtioConsole$$.prototype.SendEvent = function($port$jscomp$8$$, $event$jscomp$5$$, $value$jscomp$180$$) { + const $bufchain$jscomp$10$$ = this.virtio.queues[2].pop_request(), $buf$jscomp$5$$ = new Uint8Array(8); + $marshall$$.Marshall(["w", "h", "h"], [$port$jscomp$8$$, $event$jscomp$5$$, $value$jscomp$180$$], $buf$jscomp$5$$, 0); + this.Send(2, $bufchain$jscomp$10$$, $buf$jscomp$5$$); +}; +$VirtioConsole$$.prototype.Send = function($queue_id$jscomp$6$$, $bufchain$jscomp$11$$, $blob$jscomp$14$$) { + $bufchain$jscomp$11$$.set_next_blob($blob$jscomp$14$$); + this.virtio.queues[$queue_id$jscomp$6$$].push_reply($bufchain$jscomp$11$$); + this.virtio.queues[$queue_id$jscomp$6$$].flush_replies(); +}; +$VirtioConsole$$.prototype.Ack = function($queue_id$jscomp$7$$, $bufchain$jscomp$12$$) { + $bufchain$jscomp$12$$.set_next_blob(new Uint8Array(0)); + this.virtio.queues[$queue_id$jscomp$7$$].push_reply($bufchain$jscomp$12$$); + this.virtio.queues[$queue_id$jscomp$7$$].flush_replies(); +}; +function $VirtioNet$$($cpu$jscomp$21$$, $bus$jscomp$11_queues$jscomp$1$$, $i$jscomp$61_preserve_mac_from_state_image$jscomp$1$$) { + this.bus = $bus$jscomp$11_queues$jscomp$1$$; + this.id = $cpu$jscomp$21$$.devices.net ? 1 : 0; + this.status = this.pairs = 1; + this.preserve_mac_from_state_image = $i$jscomp$61_preserve_mac_from_state_image$jscomp$1$$; + this.mac = new Uint8Array([0, 34, 21, 255 * Math.random() | 0, 255 * Math.random() | 0, 255 * Math.random() | 0, ]); + this.bus.send("net" + this.id + "-mac", $format_mac$$(this.mac)); + $bus$jscomp$11_queues$jscomp$1$$ = []; + for ($i$jscomp$61_preserve_mac_from_state_image$jscomp$1$$ = 0; $i$jscomp$61_preserve_mac_from_state_image$jscomp$1$$ < this.pairs; ++$i$jscomp$61_preserve_mac_from_state_image$jscomp$1$$) { + $bus$jscomp$11_queues$jscomp$1$$.push({size_supported:32, notify_offset:0}), $bus$jscomp$11_queues$jscomp$1$$.push({size_supported:32, notify_offset:1}); + } + $bus$jscomp$11_queues$jscomp$1$$.push({size_supported:16, notify_offset:2, }); + this.virtio = new $VirtIO$$($cpu$jscomp$21$$, {name:"virtio-net", pci_id:80, device_id:4161, subsystem_device_id:1, common:{initial_port:51200, queues:$bus$jscomp$11_queues$jscomp$1$$, features:[5, 16, 22, 3, 17, 23, 32, ], on_driver_ok:() => { + }, }, notification:{initial_port:51456, single_handler:!1, handlers:[$queue$jscomp$8_queue_id$jscomp$8$$ => { + $queue$jscomp$8_queue_id$jscomp$8$$ = this.virtio.queues[$queue$jscomp$8_queue_id$jscomp$8$$]; + var $bufchain$jscomp$13_desc_idx$jscomp$3$$ = $queue$jscomp$8_queue_id$jscomp$8$$.avail_get_entry($queue$jscomp$8_queue_id$jscomp$8$$.avail_last_idx); + $bufchain$jscomp$13_desc_idx$jscomp$3$$ = new $VirtQueueBufferChain$$($queue$jscomp$8_queue_id$jscomp$8$$, $bufchain$jscomp$13_desc_idx$jscomp$3$$); + $queue$jscomp$8_queue_id$jscomp$8$$.avail_last_idx = $queue$jscomp$8_queue_id$jscomp$8$$.avail_last_idx + 1 & $queue$jscomp$8_queue_id$jscomp$8$$.mask; + this.virtio.queues[0].push_reply($bufchain$jscomp$13_desc_idx$jscomp$3$$); + this.virtio.queues[0].flush_replies(); + }, $queue_id$jscomp$9$$ => { + const $queue$jscomp$9$$ = this.virtio.queues[$queue_id$jscomp$9$$]; + for (; $queue$jscomp$9$$.has_request();) { + const $bufchain$jscomp$14$$ = $queue$jscomp$9$$.pop_request(), $buffer$jscomp$40$$ = new Uint8Array($bufchain$jscomp$14$$.length_readable); + $bufchain$jscomp$14$$.get_next_blob($buffer$jscomp$40$$); + this.bus.send("net" + this.id + "-send", $buffer$jscomp$40$$.subarray(12)); + this.bus.send("eth-transmit-end", [$buffer$jscomp$40$$.length - 12]); + this.virtio.queues[$queue_id$jscomp$9$$].push_reply($bufchain$jscomp$14$$); + } + this.virtio.queues[$queue_id$jscomp$9$$].flush_replies(); + }, $queue_id$jscomp$10$$ => { + if ($queue_id$jscomp$10$$ !== 2 * this.pairs) { + $dbg_assert$$(!1, "VirtioConsole Notified for wrong queue: " + $queue_id$jscomp$10$$ + " (expected queue_id of 3)"); + } else { + for (var $queue$jscomp$10$$ = this.virtio.queues[$queue_id$jscomp$10$$]; $queue$jscomp$10$$.has_request();) { + const $bufchain$jscomp$15$$ = $queue$jscomp$10$$.pop_request(); + var $buffer$jscomp$41_data$jscomp$178$$ = new Uint8Array($bufchain$jscomp$15$$.length_readable); + $bufchain$jscomp$15$$.get_next_blob($buffer$jscomp$41_data$jscomp$178$$); + var $command_parts$jscomp$3$$ = $marshall$$.Unmarshall(["b", "b"], $buffer$jscomp$41_data$jscomp$178$$, {offset:0}); + const $xclass$$ = $command_parts$jscomp$3$$[0]; + $command_parts$jscomp$3$$ = $command_parts$jscomp$3$$[1]; + switch($xclass$$ << 8 | $command_parts$jscomp$3$$) { + case 1024: + $buffer$jscomp$41_data$jscomp$178$$ = $marshall$$.Unmarshall(["h"], $buffer$jscomp$41_data$jscomp$178$$, {offset:2}); + $dbg_assert$$(1 === $buffer$jscomp$41_data$jscomp$178$$[0]); + this.Send($queue_id$jscomp$10$$, $bufchain$jscomp$15$$, new Uint8Array([0])); + break; + case 257: + this.mac = $buffer$jscomp$41_data$jscomp$178$$.subarray(2, 8); + this.Send($queue_id$jscomp$10$$, $bufchain$jscomp$15$$, new Uint8Array([0])); + this.bus.send("net" + this.id + "-mac", $format_mac$$(this.mac)); + break; + default: + $dbg_assert$$(!1, " VirtioConsole received unknown command: " + $xclass$$ + ":" + $command_parts$jscomp$3$$); + this.Send($queue_id$jscomp$10$$, $bufchain$jscomp$15$$, new Uint8Array([1])); + return; + } + } + } + }, ], }, isr_status:{initial_port:50944, }, device_specific:{initial_port:50688, struct:[0, 1, 2, 3, 4, 5].map(($v$jscomp$4$$, $k$$) => ({bytes:1, name:"mac_" + $k$$, read:() => this.mac[$k$$], write:() => { + }, })).concat([{bytes:2, name:"status", read:() => this.status, write:() => { + }, }, {bytes:2, name:"max_pairs", read:() => this.pairs, write:() => { + }, }, {bytes:2, name:"mtu", read:() => 1500, write:() => { + }, }])}, }); + this.bus.register("net" + this.id + "-receive", $bufchain$jscomp$16_data$jscomp$183_queue$jscomp$11$$ => { + this.bus.send("eth-receive-end", [$bufchain$jscomp$16_data$jscomp$183_queue$jscomp$11$$.length]); + const $with_header$$ = new Uint8Array(12 + $bufchain$jscomp$16_data$jscomp$183_queue$jscomp$11$$.byteLength); + (new DataView($with_header$$.buffer, $with_header$$.byteOffset, $with_header$$.byteLength)).setInt16(10, 1); + $with_header$$.set($bufchain$jscomp$16_data$jscomp$183_queue$jscomp$11$$, 12); + $bufchain$jscomp$16_data$jscomp$183_queue$jscomp$11$$ = this.virtio.queues[0]; + $bufchain$jscomp$16_data$jscomp$183_queue$jscomp$11$$.has_request() ? ($bufchain$jscomp$16_data$jscomp$183_queue$jscomp$11$$ = $bufchain$jscomp$16_data$jscomp$183_queue$jscomp$11$$.pop_request(), $bufchain$jscomp$16_data$jscomp$183_queue$jscomp$11$$.set_next_blob($with_header$$), this.virtio.queues[0].push_reply($bufchain$jscomp$16_data$jscomp$183_queue$jscomp$11$$), this.virtio.queues[0].flush_replies()) : console.log("No buffer to write into!"); + }, this); +} +$VirtioNet$$.prototype.get_state = function() { + const $state$jscomp$47$$ = []; + $state$jscomp$47$$[0] = this.virtio; + $state$jscomp$47$$[1] = this.id; + this.preserve_mac_from_state_image && (this.mac = $state$jscomp$47$$[2], this.bus.send("net" + this.id + "-mac", $format_mac$$(this.mac))); + return $state$jscomp$47$$; +}; +$VirtioNet$$.prototype.set_state = function($state$jscomp$48$$) { + this.virtio.set_state($state$jscomp$48$$[0]); +}; +$VirtioNet$$.prototype.reset = function() { + this.virtio.reset(); +}; +$VirtioNet$$.prototype.Send = function($queue_id$jscomp$11$$, $bufchain$jscomp$17$$, $blob$jscomp$15$$) { + $bufchain$jscomp$17$$.set_next_blob($blob$jscomp$15$$); + this.virtio.queues[$queue_id$jscomp$11$$].push_reply($bufchain$jscomp$17$$); + this.virtio.queues[$queue_id$jscomp$11$$].flush_replies(); +}; +$VirtioNet$$.prototype.Ack = function($queue_id$jscomp$12$$, $bufchain$jscomp$18$$) { + this.virtio.queues[$queue_id$jscomp$12$$].push_reply($bufchain$jscomp$18$$); + this.virtio.queues[$queue_id$jscomp$12$$].flush_replies(); +}; +var $Bus$$ = {}; +function $BusConnector$$() { + this.listeners = {}; + this.pair = void 0; +} +$BusConnector$$.prototype.register = function($name$jscomp$80$$, $fn$jscomp$16$$, $this_value$jscomp$1$$) { + var $listeners$$ = this.listeners[$name$jscomp$80$$]; + void 0 === $listeners$$ && ($listeners$$ = this.listeners[$name$jscomp$80$$] = []); + $listeners$$.push({fn:$fn$jscomp$16$$, this_value:$this_value$jscomp$1$$, }); +}; +$BusConnector$$.prototype.unregister = function($name$jscomp$81$$, $fn$jscomp$17$$) { + var $listeners$jscomp$1$$ = this.listeners[$name$jscomp$81$$]; + void 0 !== $listeners$jscomp$1$$ && (this.listeners[$name$jscomp$81$$] = $listeners$jscomp$1$$.filter(function($l$$) { + return $l$$.fn !== $fn$jscomp$17$$; + })); +}; +$BusConnector$$.prototype.send = function($listeners$jscomp$2_name$jscomp$82$$, $value$jscomp$181$$) { + if (this.pair && ($listeners$jscomp$2_name$jscomp$82$$ = this.pair.listeners[$listeners$jscomp$2_name$jscomp$82$$], void 0 !== $listeners$jscomp$2_name$jscomp$82$$)) { + for (var $i$jscomp$62$$ = 0; $i$jscomp$62$$ < $listeners$jscomp$2_name$jscomp$82$$.length; $i$jscomp$62$$++) { + var $listener$jscomp$64$$ = $listeners$jscomp$2_name$jscomp$82$$[$i$jscomp$62$$]; + $listener$jscomp$64$$.fn.call($listener$jscomp$64$$.this_value, $value$jscomp$181$$); + } + } +}; +$BusConnector$$.prototype.send_async = function($name$jscomp$83$$, $value$jscomp$182$$) { + $dbg_assert$$(1 === arguments.length || 2 === arguments.length); + setTimeout(this.send.bind(this, $name$jscomp$83$$, $value$jscomp$182$$), 0); +}; +$Bus$$.create = function() { + var $c0$$ = new $BusConnector$$, $c1$$ = new $BusConnector$$; + $c0$$.pair = $c1$$; + $c1$$.pair = $c0$$; + return [$c0$$, $c1$$]; +}; +var $dbg_log$$ = function() { + var $dbg_names$$ = $LOG_NAMES$$.reduce(function($a$jscomp$3$$, $x$jscomp$100$$) { + $a$jscomp$3$$[$x$jscomp$100$$[0]] = $x$jscomp$100$$[1]; + return $a$jscomp$3$$; + }, {}), $log_last_message$$ = "", $log_message_repetitions$$ = 0; + return function($message$jscomp$30_stuff$$, $level$jscomp$19_now$jscomp$9_time_str$$) { + $level$jscomp$19_now$jscomp$9_time_str$$ = $level$jscomp$19_now$jscomp$9_time_str$$ || 1; + if ($level$jscomp$19_now$jscomp$9_time_str$$ & $LOG_LEVEL$$) { + $message$jscomp$30_stuff$$ = "[" + $v86util$$.pads($dbg_names$$[$level$jscomp$19_now$jscomp$9_time_str$$] || "", 4) + "] " + $message$jscomp$30_stuff$$; + if ($message$jscomp$30_stuff$$ === $log_last_message$$ && ($log_message_repetitions$$++, 2048 > $log_message_repetitions$$)) { + return; + } + $level$jscomp$19_now$jscomp$9_time_str$$ = new Date; + $level$jscomp$19_now$jscomp$9_time_str$$ = $v86util$$.pad0($level$jscomp$19_now$jscomp$9_time_str$$.getHours(), 2) + ":" + $v86util$$.pad0($level$jscomp$19_now$jscomp$9_time_str$$.getMinutes(), 2) + ":" + $v86util$$.pad0($level$jscomp$19_now$jscomp$9_time_str$$.getSeconds(), 2) + "+" + $v86util$$.pad0($level$jscomp$19_now$jscomp$9_time_str$$.getMilliseconds(), 3) + " "; + $log_message_repetitions$$ && (1 === $log_message_repetitions$$ ? console.log($level$jscomp$19_now$jscomp$9_time_str$$ + $log_last_message$$) : console.log("Previous message repeated " + $log_message_repetitions$$ + " times"), $log_message_repetitions$$ = 0); + console.log($level$jscomp$19_now$jscomp$9_time_str$$ + $message$jscomp$30_stuff$$); + $log_last_message$$ = $message$jscomp$30_stuff$$; + } + }; +}(); +function $dbg_assert$$($cond$$, $msg$jscomp$1$$) { + if (!$cond$$) { + debugger; + console.trace(); + if ($msg$jscomp$1$$) { + throw "Assert failed: " + $msg$jscomp$1$$; + } + throw "Assert failed"; + } +} +;function $CPU$$($bus$jscomp$12$$, $memory$jscomp$1_wm$$, $stop_idling$$) { + this.stop_idling = $stop_idling$$; + this.wm = $memory$jscomp$1_wm$$; + this.wasm_patch(); + this.create_jit_imports(); + this.wasm_memory = $memory$jscomp$1_wm$$ = this.wm.exports.memory; + this.memory_size = $v86util$$.view(Uint32Array, $memory$jscomp$1_wm$$, 812, 1); + this.mem8 = new Uint8Array(0); + this.mem32s = new Int32Array(this.mem8.buffer); + this.segment_is_null = $v86util$$.view(Uint8Array, $memory$jscomp$1_wm$$, 724, 8); + this.segment_offsets = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 736, 8); + this.segment_limits = $v86util$$.view(Uint32Array, $memory$jscomp$1_wm$$, 768, 8); + this.segment_access_bytes = $v86util$$.view(Uint8Array, $memory$jscomp$1_wm$$, 512, 8); + this.protected_mode = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 800, 1); + this.idtr_size = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 564, 1); + this.idtr_offset = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 568, 1); + this.gdtr_size = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 572, 1); + this.gdtr_offset = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 576, 1); + this.tss_size_32 = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 1128, 1); + this.page_fault = $v86util$$.view(Uint32Array, $memory$jscomp$1_wm$$, 540, 8); + this.cr = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 580, 8); + this.cpl = $v86util$$.view(Uint8Array, $memory$jscomp$1_wm$$, 612, 1); + this.is_32 = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 804, 1); + this.stack_size_32 = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 808, 1); + this.in_hlt = $v86util$$.view(Uint8Array, $memory$jscomp$1_wm$$, 616, 1); + this.last_virt_eip = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 620, 1); + this.eip_phys = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 624, 1); + this.sysenter_cs = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 636, 1); + this.sysenter_esp = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 640, 1); + this.sysenter_eip = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 644, 1); + this.prefixes = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 648, 1); + this.flags = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 120, 1); + this.flags_changed = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 100, 1); + this.last_op_size = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 96, 1); + this.last_op1 = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 104, 1); + this.last_result = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 112, 1); + this.current_tsc = $v86util$$.view(Uint32Array, $memory$jscomp$1_wm$$, 960, 2); + this.devices = {}; + this.instruction_pointer = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 556, 1); + this.previous_ip = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 560, 1); + this.apic_enabled = $v86util$$.view(Uint8Array, $memory$jscomp$1_wm$$, 548, 1); + this.acpi_enabled = $v86util$$.view(Uint8Array, $memory$jscomp$1_wm$$, 552, 1); + this.memory_map_read8 = []; + this.memory_map_write8 = []; + this.memory_map_read32 = []; + this.memory_map_write32 = []; + this.bios = {main:null, vga:null, }; + this.instruction_counter = $v86util$$.view(Uint32Array, $memory$jscomp$1_wm$$, 664, 1); + this.reg32 = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 64, 8); + this.fpu_st = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 1152, 32); + this.fpu_stack_empty = $v86util$$.view(Uint8Array, $memory$jscomp$1_wm$$, 816, 1); + this.fpu_stack_empty[0] = 255; + this.fpu_stack_ptr = $v86util$$.view(Uint8Array, $memory$jscomp$1_wm$$, 1032, 1); + this.fpu_stack_ptr[0] = 0; + this.fpu_control_word = $v86util$$.view(Uint16Array, $memory$jscomp$1_wm$$, 1036, 1); + this.fpu_control_word[0] = 895; + this.fpu_status_word = $v86util$$.view(Uint16Array, $memory$jscomp$1_wm$$, 1040, 1); + this.fpu_status_word[0] = 0; + this.fpu_ip = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 1048, 1); + this.fpu_ip[0] = 0; + this.fpu_ip_selector = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 1052, 1); + this.fpu_ip_selector[0] = 0; + this.fpu_opcode = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 1044, 1); + this.fpu_opcode[0] = 0; + this.fpu_dp = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 1056, 1); + this.fpu_dp[0] = 0; + this.fpu_dp_selector = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 1060, 1); + this.fpu_dp_selector[0] = 0; + this.reg_xmm32s = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 832, 32); + this.mxcsr = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 824, 1); + this.sreg = $v86util$$.view(Uint16Array, $memory$jscomp$1_wm$$, 668, 8); + this.dreg = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 684, 8); + this.reg_pdpte = $v86util$$.view(Int32Array, $memory$jscomp$1_wm$$, 968, 8); + this.svga_dirty_bitmap_min_offset = $v86util$$.view(Uint32Array, $memory$jscomp$1_wm$$, 716, 1); + this.svga_dirty_bitmap_max_offset = $v86util$$.view(Uint32Array, $memory$jscomp$1_wm$$, 720, 1); + this.fw_value = []; + this.fw_pointer = 0; + this.option_roms = []; + this.io = void 0; + this.bus = $bus$jscomp$12$$; + this.set_tsc(0, 0); + this.debug_init(); + this.seen_code = {}; + this.seen_code_uncompiled = {}; +} +$CPU$$.prototype.clear_opstats = function() { + (new Uint8Array(this.wasm_memory.buffer, 32768, 131072)).fill(0); + this.wm.exports.profiler_init(); +}; +$CPU$$.prototype.create_jit_imports = function() { + const $jit_imports$$ = Object.create(null); + $jit_imports$$.m = this.wm.exports.memory; + for (const $name$jscomp$84$$ of Object.keys(this.wm.exports)) { + $name$jscomp$84$$.startsWith("_") || $name$jscomp$84$$.startsWith("zstd") || $name$jscomp$84$$.endsWith("_js") || ($jit_imports$$[$name$jscomp$84$$] = this.wm.exports[$name$jscomp$84$$]); + } + this.jit_imports = $jit_imports$$; +}; +$CPU$$.prototype.wasm_patch = function() { + const $get_optional_import$$ = $name$jscomp$85$$ => this.wm.exports[$name$jscomp$85$$], $get_import$$ = $name$jscomp$86$$ => { + const $f$jscomp$4$$ = $get_optional_import$$($name$jscomp$86$$); + console.assert($f$jscomp$4$$, "Missing import: " + $name$jscomp$86$$); + return $f$jscomp$4$$; + }; + this.reset_cpu = $get_import$$("reset_cpu"); + this.getiopl = $get_import$$("getiopl"); + this.get_eflags = $get_import$$("get_eflags"); + this.handle_irqs = $get_import$$("handle_irqs"); + this.main_loop = $get_import$$("main_loop"); + this.set_jit_config = $get_import$$("set_jit_config"); + this.read8 = $get_import$$("read8"); + this.read16 = $get_import$$("read16"); + this.read32s = $get_import$$("read32s"); + this.write8 = $get_import$$("write8"); + this.write16 = $get_import$$("write16"); + this.write32 = $get_import$$("write32"); + this.in_mapped_range = $get_import$$("in_mapped_range"); + this.fpu_load_tag_word = $get_import$$("fpu_load_tag_word"); + this.fpu_load_status_word = $get_import$$("fpu_load_status_word"); + this.fpu_get_sti_f64 = $get_import$$("fpu_get_sti_f64"); + this.translate_address_system_read = $get_import$$("translate_address_system_read_js"); + this.get_seg_cs = $get_import$$("get_seg_cs"); + this.get_real_eip = $get_import$$("get_real_eip"); + this.clear_tlb = $get_import$$("clear_tlb"); + this.full_clear_tlb = $get_import$$("full_clear_tlb"); + this.update_state_flags = $get_import$$("update_state_flags"); + this.set_tsc = $get_import$$("set_tsc"); + this.store_current_tsc = $get_import$$("store_current_tsc"); + this.set_cpuid_level = $get_import$$("set_cpuid_level"); + this.pic_set_irq = $get_import$$("pic_set_irq"); + this.pic_clear_irq = $get_import$$("pic_clear_irq"); + this.jit_force_generate_unsafe = $get_optional_import$$("jit_force_generate_unsafe"); + this.jit_clear_cache = $get_import$$("jit_clear_cache_js"); + this.jit_dirty_cache = $get_import$$("jit_dirty_cache"); + this.codegen_finalize_finished = $get_import$$("codegen_finalize_finished"); + this.allocate_memory = $get_import$$("allocate_memory"); + this.zero_memory = $get_import$$("zero_memory"); + this.svga_allocate_memory = $get_import$$("svga_allocate_memory"); + this.svga_allocate_dest_buffer = $get_import$$("svga_allocate_dest_buffer"); + this.svga_fill_pixel_buffer = $get_import$$("svga_fill_pixel_buffer"); + this.svga_mark_dirty = $get_import$$("svga_mark_dirty"); + this.get_pic_addr_master = $get_import$$("get_pic_addr_master"); + this.get_pic_addr_slave = $get_import$$("get_pic_addr_slave"); + this.zstd_create_ctx = $get_import$$("zstd_create_ctx"); + this.zstd_get_src_ptr = $get_import$$("zstd_get_src_ptr"); + this.zstd_free_ctx = $get_import$$("zstd_free_ctx"); + this.zstd_read = $get_import$$("zstd_read"); + this.zstd_read_free = $get_import$$("zstd_read_free"); + this.port20_read = $get_import$$("port20_read"); + this.port21_read = $get_import$$("port21_read"); + this.portA0_read = $get_import$$("portA0_read"); + this.portA1_read = $get_import$$("portA1_read"); + this.port20_write = $get_import$$("port20_write"); + this.port21_write = $get_import$$("port21_write"); + this.portA0_write = $get_import$$("portA0_write"); + this.portA1_write = $get_import$$("portA1_write"); + this.port4D0_read = $get_import$$("port4D0_read"); + this.port4D1_read = $get_import$$("port4D1_read"); + this.port4D0_write = $get_import$$("port4D0_write"); + this.port4D1_write = $get_import$$("port4D1_write"); +}; +$CPU$$.prototype.jit_force_generate = function($addr$jscomp$45$$) { + this.jit_force_generate_unsafe ? this.jit_force_generate_unsafe($addr$jscomp$45$$) : $dbg_assert$$(!1, "Not supported in this wasm build: jit_force_generate_unsafe"); +}; +$CPU$$.prototype.jit_clear_func = function($index$jscomp$91$$) { + $dbg_assert$$(0 <= $index$jscomp$91$$ && 900 > $index$jscomp$91$$); + this.wm.wasm_table.set($index$jscomp$91$$ + 1024, null); +}; +$CPU$$.prototype.jit_clear_all_funcs = function() { + const $table$$ = this.wm.wasm_table; + for (let $i$jscomp$63$$ = 0; 900 > $i$jscomp$63$$; $i$jscomp$63$$++) { + $table$$.set(1024 + $i$jscomp$63$$, null); + } +}; +$CPU$$.prototype.get_state = function() { + var $state$jscomp$49$$ = []; + $state$jscomp$49$$[0] = this.memory_size[0]; + $state$jscomp$49$$[1] = new Uint8Array([...this.segment_is_null, ...this.segment_access_bytes]); + $state$jscomp$49$$[2] = this.segment_offsets; + $state$jscomp$49$$[3] = this.segment_limits; + $state$jscomp$49$$[4] = this.protected_mode[0]; + $state$jscomp$49$$[5] = this.idtr_offset[0]; + $state$jscomp$49$$[6] = this.idtr_size[0]; + $state$jscomp$49$$[7] = this.gdtr_offset[0]; + $state$jscomp$49$$[8] = this.gdtr_size[0]; + $state$jscomp$49$$[9] = this.page_fault[0]; + $state$jscomp$49$$[10] = this.cr; + $state$jscomp$49$$[11] = this.cpl[0]; + $state$jscomp$49$$[13] = this.is_32[0]; + $state$jscomp$49$$[16] = this.stack_size_32[0]; + $state$jscomp$49$$[17] = this.in_hlt[0]; + $state$jscomp$49$$[18] = this.last_virt_eip[0]; + $state$jscomp$49$$[19] = this.eip_phys[0]; + $state$jscomp$49$$[22] = this.sysenter_cs[0]; + $state$jscomp$49$$[23] = this.sysenter_eip[0]; + $state$jscomp$49$$[24] = this.sysenter_esp[0]; + $state$jscomp$49$$[25] = this.prefixes[0]; + $state$jscomp$49$$[26] = this.flags[0]; + $state$jscomp$49$$[27] = this.flags_changed[0]; + $state$jscomp$49$$[28] = this.last_op1[0]; + $state$jscomp$49$$[30] = this.last_op_size[0]; + $state$jscomp$49$$[37] = this.instruction_pointer[0]; + $state$jscomp$49$$[38] = this.previous_ip[0]; + $state$jscomp$49$$[39] = this.reg32; + $state$jscomp$49$$[40] = this.sreg; + $state$jscomp$49$$[41] = this.dreg; + $state$jscomp$49$$[42] = this.reg_pdpte; + this.store_current_tsc(); + $state$jscomp$49$$[43] = this.current_tsc; + $state$jscomp$49$$[45] = this.devices.virtio_9p; + $state$jscomp$49$$[46] = this.devices.apic; + $state$jscomp$49$$[47] = this.devices.rtc; + $state$jscomp$49$$[48] = this.devices.pci; + $state$jscomp$49$$[49] = this.devices.dma; + $state$jscomp$49$$[50] = this.devices.acpi; + $state$jscomp$49$$[52] = this.devices.vga; + $state$jscomp$49$$[53] = this.devices.ps2; + $state$jscomp$49$$[54] = this.devices.uart0; + $state$jscomp$49$$[55] = this.devices.fdc; + $state$jscomp$49$$[56] = this.devices.cdrom; + $state$jscomp$49$$[57] = this.devices.hda; + $state$jscomp$49$$[58] = this.devices.pit; + $state$jscomp$49$$[59] = this.devices.net; + $state$jscomp$49$$[60] = this.get_state_pic(); + $state$jscomp$49$$[61] = this.devices.sb16; + $state$jscomp$49$$[62] = this.fw_value; + $state$jscomp$49$$[63] = this.devices.ioapic; + $state$jscomp$49$$[64] = this.tss_size_32[0]; + $state$jscomp$49$$[66] = this.reg_xmm32s; + $state$jscomp$49$$[67] = this.fpu_st; + $state$jscomp$49$$[68] = this.fpu_stack_empty[0]; + $state$jscomp$49$$[69] = this.fpu_stack_ptr[0]; + $state$jscomp$49$$[70] = this.fpu_control_word[0]; + $state$jscomp$49$$[71] = this.fpu_ip[0]; + $state$jscomp$49$$[72] = this.fpu_ip_selector[0]; + $state$jscomp$49$$[73] = this.fpu_dp[0]; + $state$jscomp$49$$[74] = this.fpu_dp_selector[0]; + $state$jscomp$49$$[75] = this.fpu_opcode[0]; + const {packed_memory:$packed_memory$$, bitmap:$bitmap$$} = this.pack_memory(); + $state$jscomp$49$$[77] = $packed_memory$$; + $state$jscomp$49$$[78] = new Uint8Array($bitmap$$.get_buffer()); + $state$jscomp$49$$[79] = this.devices.uart1; + $state$jscomp$49$$[80] = this.devices.uart2; + $state$jscomp$49$$[81] = this.devices.uart3; + $state$jscomp$49$$[82] = this.devices.virtio_console; + $state$jscomp$49$$[83] = this.devices.virtio_net; + return $state$jscomp$49$$; +}; +$CPU$$.prototype.get_state_pic = function() { + const $pic$$ = new Uint8Array(this.wasm_memory.buffer, this.get_pic_addr_master(), 13), $pic_slave$$ = new Uint8Array(this.wasm_memory.buffer, this.get_pic_addr_slave(), 13), $state$jscomp$50$$ = [], $state_slave$$ = []; + $state$jscomp$50$$[0] = $pic$$[0]; + $state$jscomp$50$$[1] = $pic$$[1]; + $state$jscomp$50$$[2] = $pic$$[2]; + $state$jscomp$50$$[3] = $pic$$[3]; + $state$jscomp$50$$[4] = $pic$$[4]; + $state$jscomp$50$$[5] = $state_slave$$; + $state$jscomp$50$$[6] = $pic$$[6]; + $state$jscomp$50$$[7] = $pic$$[7]; + $state$jscomp$50$$[8] = $pic$$[8]; + $state$jscomp$50$$[9] = $pic$$[9]; + $state$jscomp$50$$[10] = $pic$$[10]; + $state$jscomp$50$$[11] = $pic$$[11]; + $state$jscomp$50$$[12] = $pic$$[12]; + $state_slave$$[0] = $pic_slave$$[0]; + $state_slave$$[1] = $pic_slave$$[1]; + $state_slave$$[2] = $pic_slave$$[2]; + $state_slave$$[3] = $pic_slave$$[3]; + $state_slave$$[4] = $pic_slave$$[4]; + $state_slave$$[5] = null; + $state_slave$$[6] = $pic_slave$$[6]; + $state_slave$$[7] = $pic_slave$$[7]; + $state_slave$$[8] = $pic_slave$$[8]; + $state_slave$$[9] = $pic_slave$$[9]; + $state_slave$$[10] = $pic_slave$$[10]; + $state_slave$$[11] = $pic_slave$$[11]; + $state_slave$$[12] = $pic_slave$$[12]; + return $state$jscomp$50$$; +}; +$CPU$$.prototype.set_state = function($state$jscomp$51$$) { + this.memory_size[0] = $state$jscomp$51$$[0]; + this.mem8.length !== this.memory_size[0] && console.warn("Note: Memory size mismatch. we=" + this.mem8.length + " state=" + this.memory_size[0]); + 8 === $state$jscomp$51$$[1].length ? (this.segment_is_null.set($state$jscomp$51$$[1]), this.segment_access_bytes.fill(242), this.segment_access_bytes[1] = 250) : 16 === $state$jscomp$51$$[1].length ? (this.segment_is_null.set($state$jscomp$51$$[1].subarray(0, 8)), this.segment_access_bytes.set($state$jscomp$51$$[1].subarray(8, 16))) : $dbg_assert$$("Unexpected cpu segment state length:" + $state$jscomp$51$$[1].length); + this.segment_offsets.set($state$jscomp$51$$[2]); + this.segment_limits.set($state$jscomp$51$$[3]); + this.protected_mode[0] = $state$jscomp$51$$[4]; + this.idtr_offset[0] = $state$jscomp$51$$[5]; + this.idtr_size[0] = $state$jscomp$51$$[6]; + this.gdtr_offset[0] = $state$jscomp$51$$[7]; + this.gdtr_size[0] = $state$jscomp$51$$[8]; + this.page_fault[0] = $state$jscomp$51$$[9]; + this.cr.set($state$jscomp$51$$[10]); + this.cpl[0] = $state$jscomp$51$$[11]; + this.is_32[0] = $state$jscomp$51$$[13]; + this.stack_size_32[0] = $state$jscomp$51$$[16]; + this.in_hlt[0] = $state$jscomp$51$$[17]; + this.last_virt_eip[0] = $state$jscomp$51$$[18]; + this.eip_phys[0] = $state$jscomp$51$$[19]; + this.sysenter_cs[0] = $state$jscomp$51$$[22]; + this.sysenter_eip[0] = $state$jscomp$51$$[23]; + this.sysenter_esp[0] = $state$jscomp$51$$[24]; + this.prefixes[0] = $state$jscomp$51$$[25]; + this.flags[0] = $state$jscomp$51$$[26]; + this.flags_changed[0] = $state$jscomp$51$$[27]; + this.last_op1[0] = $state$jscomp$51$$[28]; + this.last_op_size[0] = $state$jscomp$51$$[30]; + this.instruction_pointer[0] = $state$jscomp$51$$[37]; + this.previous_ip[0] = $state$jscomp$51$$[38]; + this.reg32.set($state$jscomp$51$$[39]); + this.sreg.set($state$jscomp$51$$[40]); + this.dreg.set($state$jscomp$51$$[41]); + $state$jscomp$51$$[42] && this.reg_pdpte.set($state$jscomp$51$$[42]); + this.set_tsc($state$jscomp$51$$[43][0], $state$jscomp$51$$[43][1]); + this.devices.virtio_9p && this.devices.virtio_9p.set_state($state$jscomp$51$$[45]); + this.devices.apic && this.devices.apic.set_state($state$jscomp$51$$[46]); + this.devices.rtc && this.devices.rtc.set_state($state$jscomp$51$$[47]); + this.devices.pci && this.devices.pci.set_state($state$jscomp$51$$[48]); + this.devices.dma && this.devices.dma.set_state($state$jscomp$51$$[49]); + this.devices.acpi && this.devices.acpi.set_state($state$jscomp$51$$[50]); + this.devices.vga && this.devices.vga.set_state($state$jscomp$51$$[52]); + this.devices.ps2 && this.devices.ps2.set_state($state$jscomp$51$$[53]); + this.devices.uart0 && this.devices.uart0.set_state($state$jscomp$51$$[54]); + this.devices.fdc && this.devices.fdc.set_state($state$jscomp$51$$[55]); + this.devices.cdrom && this.devices.cdrom.set_state($state$jscomp$51$$[56]); + this.devices.hda && this.devices.hda.set_state($state$jscomp$51$$[57]); + this.devices.pit && this.devices.pit.set_state($state$jscomp$51$$[58]); + this.devices.net && this.devices.net.set_state($state$jscomp$51$$[59]); + this.set_state_pic($state$jscomp$51$$[60]); + this.devices.sb16 && this.devices.sb16.set_state($state$jscomp$51$$[61]); + this.devices.uart1 && this.devices.uart1.set_state($state$jscomp$51$$[79]); + this.devices.uart2 && this.devices.uart2.set_state($state$jscomp$51$$[80]); + this.devices.uart3 && this.devices.uart3.set_state($state$jscomp$51$$[81]); + this.devices.virtio_console && this.devices.virtio_console.set_state($state$jscomp$51$$[82]); + this.devices.virtio_net && this.devices.virtio_net.set_state($state$jscomp$51$$[83]); + this.fw_value = $state$jscomp$51$$[62]; + this.devices.ioapic && this.devices.ioapic.set_state($state$jscomp$51$$[63]); + this.tss_size_32[0] = $state$jscomp$51$$[64]; + this.reg_xmm32s.set($state$jscomp$51$$[66]); + this.fpu_st.set($state$jscomp$51$$[67]); + this.fpu_stack_empty[0] = $state$jscomp$51$$[68]; + this.fpu_stack_ptr[0] = $state$jscomp$51$$[69]; + this.fpu_control_word[0] = $state$jscomp$51$$[70]; + this.fpu_ip[0] = $state$jscomp$51$$[71]; + this.fpu_ip_selector[0] = $state$jscomp$51$$[72]; + this.fpu_dp[0] = $state$jscomp$51$$[73]; + this.fpu_dp_selector[0] = $state$jscomp$51$$[74]; + this.fpu_opcode[0] = $state$jscomp$51$$[75]; + const $bitmap$jscomp$1$$ = new $v86util$$.Bitmap($state$jscomp$51$$[78].buffer); + this.unpack_memory($bitmap$jscomp$1$$, $state$jscomp$51$$[77]); + this.update_state_flags(); + this.full_clear_tlb(); + this.jit_clear_cache(); +}; +$CPU$$.prototype.set_state_pic = function($state$jscomp$52$$) { + const $pic$jscomp$1$$ = new Uint8Array(this.wasm_memory.buffer, this.get_pic_addr_master(), 13), $pic_slave$jscomp$1$$ = new Uint8Array(this.wasm_memory.buffer, this.get_pic_addr_slave(), 13); + $pic$jscomp$1$$[0] = $state$jscomp$52$$[0]; + $pic$jscomp$1$$[1] = $state$jscomp$52$$[1]; + $pic$jscomp$1$$[2] = $state$jscomp$52$$[2]; + $pic$jscomp$1$$[3] = $state$jscomp$52$$[3]; + $pic$jscomp$1$$[4] = $state$jscomp$52$$[4]; + const $state_slave$jscomp$1$$ = $state$jscomp$52$$[5]; + $pic$jscomp$1$$[6] = $state$jscomp$52$$[6]; + $pic$jscomp$1$$[7] = $state$jscomp$52$$[7]; + $pic$jscomp$1$$[8] = $state$jscomp$52$$[8]; + $pic$jscomp$1$$[9] = $state$jscomp$52$$[9]; + $pic$jscomp$1$$[10] = $state$jscomp$52$$[10]; + $pic$jscomp$1$$[11] = $state$jscomp$52$$[11]; + $pic$jscomp$1$$[12] = $state$jscomp$52$$[12]; + $pic_slave$jscomp$1$$[0] = $state_slave$jscomp$1$$[0]; + $pic_slave$jscomp$1$$[1] = $state_slave$jscomp$1$$[1]; + $pic_slave$jscomp$1$$[2] = $state_slave$jscomp$1$$[2]; + $pic_slave$jscomp$1$$[3] = $state_slave$jscomp$1$$[3]; + $pic_slave$jscomp$1$$[4] = $state_slave$jscomp$1$$[4]; + $pic_slave$jscomp$1$$[6] = $state_slave$jscomp$1$$[6]; + $pic_slave$jscomp$1$$[7] = $state_slave$jscomp$1$$[7]; + $pic_slave$jscomp$1$$[8] = $state_slave$jscomp$1$$[8]; + $pic_slave$jscomp$1$$[9] = $state_slave$jscomp$1$$[9]; + $pic_slave$jscomp$1$$[10] = $state_slave$jscomp$1$$[10]; + $pic_slave$jscomp$1$$[11] = $state_slave$jscomp$1$$[11]; + $pic_slave$jscomp$1$$[12] = $state_slave$jscomp$1$$[12]; +}; +$CPU$$.prototype.pack_memory = function() { + $dbg_assert$$(0 === (this.mem8.length & 4095)); + var $bitmap$jscomp$2_page_count$$ = this.mem8.length >> 12, $nonzero_pages_offset$jscomp$54_page_contents$$ = []; + for ($packed_memory$jscomp$2_page$$ = 0; $packed_memory$jscomp$2_page$$ < $bitmap$jscomp$2_page_count$$; $packed_memory$jscomp$2_page$$++) { + var $offset$jscomp$53_view$jscomp$6$$ = $packed_memory$jscomp$2_page$$ << 12; + $offset$jscomp$53_view$jscomp$6$$ = this.mem32s.subarray($offset$jscomp$53_view$jscomp$6$$ >> 2, $offset$jscomp$53_view$jscomp$6$$ + 4096 >> 2); + let $is_zero$$ = !0; + for (let $i$jscomp$64$$ = 0; $i$jscomp$64$$ < $offset$jscomp$53_view$jscomp$6$$.length; $i$jscomp$64$$++) { + if (0 !== $offset$jscomp$53_view$jscomp$6$$[$i$jscomp$64$$]) { + $is_zero$$ = !1; + break; + } + } + $is_zero$$ || $nonzero_pages_offset$jscomp$54_page_contents$$.push($packed_memory$jscomp$2_page$$); + } + $bitmap$jscomp$2_page_count$$ = new $v86util$$.Bitmap($bitmap$jscomp$2_page_count$$); + var $packed_memory$jscomp$2_page$$ = new Uint8Array($nonzero_pages_offset$jscomp$54_page_contents$$.length << 12); + for (const [$i$jscomp$65$$, $page$jscomp$1$$] of $nonzero_pages_offset$jscomp$54_page_contents$$.entries()) { + $bitmap$jscomp$2_page_count$$.set($page$jscomp$1$$, 1), $nonzero_pages_offset$jscomp$54_page_contents$$ = $page$jscomp$1$$ << 12, $nonzero_pages_offset$jscomp$54_page_contents$$ = this.mem8.subarray($nonzero_pages_offset$jscomp$54_page_contents$$, $nonzero_pages_offset$jscomp$54_page_contents$$ + 4096), $packed_memory$jscomp$2_page$$.set($nonzero_pages_offset$jscomp$54_page_contents$$, $i$jscomp$65$$ << 12); + } + return {bitmap:$bitmap$jscomp$2_page_count$$, packed_memory:$packed_memory$jscomp$2_page$$}; +}; +$CPU$$.prototype.unpack_memory = function($bitmap$jscomp$3$$, $packed_memory$jscomp$3$$) { + this.zero_memory(this.memory_size[0]); + const $page_count$jscomp$1$$ = this.memory_size[0] >> 12; + let $packed_page$$ = 0; + for (let $page$jscomp$2$$ = 0; $page$jscomp$2$$ < $page_count$jscomp$1$$; $page$jscomp$2$$++) { + if ($bitmap$jscomp$3$$.get($page$jscomp$2$$)) { + var $offset$jscomp$55_view$jscomp$7$$ = $packed_page$$ << 12; + $offset$jscomp$55_view$jscomp$7$$ = $packed_memory$jscomp$3$$.subarray($offset$jscomp$55_view$jscomp$7$$, $offset$jscomp$55_view$jscomp$7$$ + 4096); + this.mem8.set($offset$jscomp$55_view$jscomp$7$$, $page$jscomp$2$$ << 12); + $packed_page$$++; + } + } +}; +$CPU$$.prototype.reboot_internal = function() { + this.reset_cpu(); + this.fw_value = []; + this.devices.virtio_9p && this.devices.virtio_9p.reset(); + this.devices.virtio_console && this.devices.virtio_console.reset(); + this.devices.virtio_net && this.devices.virtio_net.reset(); + this.load_bios(); +}; +$CPU$$.prototype.reset_memory = function() { + this.mem8.fill(0); +}; +$CPU$$.prototype.create_memory = function($size$jscomp$37$$, $memory_offset_minimum_size$$) { + $size$jscomp$37$$ < $memory_offset_minimum_size$$ ? ($size$jscomp$37$$ = $memory_offset_minimum_size$$, $dbg_log$$("Rounding memory size up to " + $size$jscomp$37$$, 2)) : 0 > ($size$jscomp$37$$ | 0) && ($size$jscomp$37$$ = Math.pow(2, 31) - 131072, $dbg_log$$("Rounding memory size down to " + $size$jscomp$37$$, 2)); + $size$jscomp$37$$ = ($size$jscomp$37$$ - 1 | 131071) + 1 | 0; + $dbg_assert$$(0 < ($size$jscomp$37$$ | 0)); + $dbg_assert$$(0 === ($size$jscomp$37$$ & 131071)); + console.assert(0 === this.memory_size[0], "Expected uninitialised memory"); + this.memory_size[0] = $size$jscomp$37$$; + $memory_offset_minimum_size$$ = this.allocate_memory($size$jscomp$37$$); + this.mem8 = $v86util$$.view(Uint8Array, this.wasm_memory, $memory_offset_minimum_size$$, $size$jscomp$37$$); + this.mem32s = $v86util$$.view(Uint32Array, this.wasm_memory, $memory_offset_minimum_size$$, $size$jscomp$37$$ >> 2); +}; +$CPU$$.prototype.init = function($option_rom$jscomp$1_settings$jscomp$1$$, $device_bus$$) { + this.create_memory($option_rom$jscomp$1_settings$jscomp$1$$.memory_size || 67108864, $option_rom$jscomp$1_settings$jscomp$1$$.initrd ? 67108864 : 1048576, ); + $option_rom$jscomp$1_settings$jscomp$1$$.disable_jit && this.set_jit_config(0, 1); + $option_rom$jscomp$1_settings$jscomp$1$$.cpuid_level && this.set_cpuid_level($option_rom$jscomp$1_settings$jscomp$1$$.cpuid_level); + this.acpi_enabled[0] = +$option_rom$jscomp$1_settings$jscomp$1$$.acpi; + this.reset_cpu(); + var $ide_device_count_io$jscomp$6$$ = new $IO$$(this); + this.io = $ide_device_count_io$jscomp$6$$; + this.bios.main = $option_rom$jscomp$1_settings$jscomp$1$$.bios; + this.bios.vga = $option_rom$jscomp$1_settings$jscomp$1$$.vga_bios; + this.load_bios(); + if ($option_rom$jscomp$1_settings$jscomp$1$$.bzimage) { + const $option_rom$$ = $load_kernel$$(this.mem8, $option_rom$jscomp$1_settings$jscomp$1$$.bzimage, $option_rom$jscomp$1_settings$jscomp$1$$.initrd, $option_rom$jscomp$1_settings$jscomp$1$$.cmdline || ""); + $option_rom$$ && this.option_roms.push($option_rom$$); + } + $ide_device_count_io$jscomp$6$$.register_read(179, this, function() { + $dbg_log$$("port 0xB3 read"); + return 0; + }); + var $a20_byte$$ = 0; + $ide_device_count_io$jscomp$6$$.register_read(146, this, function() { + return $a20_byte$$; + }); + $ide_device_count_io$jscomp$6$$.register_write(146, this, function($out_byte$jscomp$14$$) { + $a20_byte$$ = $out_byte$jscomp$14$$; + }); + $ide_device_count_io$jscomp$6$$.register_read(1297, this, function() { + if (this.fw_pointer < this.fw_value.length) { + return this.fw_value[this.fw_pointer++]; + } + $dbg_assert$$(!1, "config port: Read past value"); + return 0; + }); + $ide_device_count_io$jscomp$6$$.register_write(1296, this, void 0, function($buffer32_value$jscomp$183$$) { + function $i32$$($x$jscomp$101$$) { + return new Uint8Array(Int32Array.of($x$jscomp$101$$).buffer); + } + function $to_be16$$($x$jscomp$102$$) { + return $x$jscomp$102$$ >> 8 | $x$jscomp$102$$ << 8 & 65280; + } + function $to_be32$$($x$jscomp$103$$) { + return $x$jscomp$103$$ << 24 | $x$jscomp$103$$ << 8 & 16711680 | $x$jscomp$103$$ >> 8 & 65280 | $x$jscomp$103$$ >>> 24; + } + $dbg_log$$("bios config port, index=" + $h$$($buffer32_value$jscomp$183$$)); + this.fw_pointer = 0; + if (0 === $buffer32_value$jscomp$183$$) { + this.fw_value = $i32$$(1431127377); + } else { + if (1 === $buffer32_value$jscomp$183$$) { + this.fw_value = $i32$$(0); + } else { + if (3 === $buffer32_value$jscomp$183$$) { + this.fw_value = $i32$$(this.memory_size[0]); + } else { + if (5 === $buffer32_value$jscomp$183$$) { + this.fw_value = $i32$$(1); + } else { + if (15 === $buffer32_value$jscomp$183$$) { + this.fw_value = $i32$$(1); + } else { + if (13 === $buffer32_value$jscomp$183$$) { + this.fw_value = new Uint8Array(16); + } else { + if (25 === $buffer32_value$jscomp$183$$) { + $buffer32_value$jscomp$183$$ = new Int32Array(4 + 64 * this.option_roms.length); + const $buffer8$$ = new Uint8Array($buffer32_value$jscomp$183$$.buffer); + $buffer32_value$jscomp$183$$[0] = $to_be32$$(this.option_roms.length); + for (let $i$jscomp$66$$ = 0; $i$jscomp$66$$ < this.option_roms.length; $i$jscomp$66$$++) { + const {name:$name$jscomp$87$$, data:$data$jscomp$184$$} = this.option_roms[$i$jscomp$66$$], $file_struct_ptr$$ = 4 + 64 * $i$jscomp$66$$; + $dbg_assert$$(65536 > 49152 + $i$jscomp$66$$); + $buffer32_value$jscomp$183$$[$file_struct_ptr$$ + 0 >> 2] = $to_be32$$($data$jscomp$184$$.length); + $buffer32_value$jscomp$183$$[$file_struct_ptr$$ + 4 >> 2] = $to_be16$$(49152 + $i$jscomp$66$$); + $dbg_assert$$(56 > $name$jscomp$87$$.length); + for (let $j$jscomp$6$$ = 0; $j$jscomp$6$$ < $name$jscomp$87$$.length; $j$jscomp$6$$++) { + $buffer8$$[$file_struct_ptr$$ + 8 + $j$jscomp$6$$] = $name$jscomp$87$$.charCodeAt($j$jscomp$6$$); + } + } + this.fw_value = $buffer8$$; + } else { + 32768 <= $buffer32_value$jscomp$183$$ && 49152 > $buffer32_value$jscomp$183$$ ? this.fw_value = $i32$$(0) : 49152 <= $buffer32_value$jscomp$183$$ && $buffer32_value$jscomp$183$$ - 49152 < this.option_roms.length ? this.fw_value = this.option_roms[$buffer32_value$jscomp$183$$ - 49152].data : ($dbg_log$$("Warning: Unimplemented fw index: " + $h$$($buffer32_value$jscomp$183$$)), this.fw_value = $i32$$(0)); + } + } + } + } + } + } + } + }); + $ide_device_count_io$jscomp$6$$.register_write(128, this, function() { + }); + $ide_device_count_io$jscomp$6$$.register_read(128, this, function() { + return 255; + }); + $ide_device_count_io$jscomp$6$$.register_write(233, this, function() { + }); + $ide_device_count_io$jscomp$6$$.register_read(32, this, this.port20_read); + $ide_device_count_io$jscomp$6$$.register_read(33, this, this.port21_read); + $ide_device_count_io$jscomp$6$$.register_read(160, this, this.portA0_read); + $ide_device_count_io$jscomp$6$$.register_read(161, this, this.portA1_read); + $ide_device_count_io$jscomp$6$$.register_write(32, this, this.port20_write); + $ide_device_count_io$jscomp$6$$.register_write(33, this, this.port21_write); + $ide_device_count_io$jscomp$6$$.register_write(160, this, this.portA0_write); + $ide_device_count_io$jscomp$6$$.register_write(161, this, this.portA1_write); + $ide_device_count_io$jscomp$6$$.register_read(1232, this, this.port4D0_read); + $ide_device_count_io$jscomp$6$$.register_read(1233, this, this.port4D1_read); + $ide_device_count_io$jscomp$6$$.register_write(1232, this, this.port4D0_write); + $ide_device_count_io$jscomp$6$$.register_write(1233, this, this.port4D1_write); + this.devices = {}; + $option_rom$jscomp$1_settings$jscomp$1$$.load_devices && (this.devices.pci = new $PCI$$(this), this.acpi_enabled[0] && (this.devices.ioapic = new $IOAPIC$$(this), this.devices.apic = new $APIC$$(this), this.devices.acpi = new $ACPI$$(this)), this.devices.rtc = new $RTC$$(this), this.fill_cmos(this.devices.rtc, $option_rom$jscomp$1_settings$jscomp$1$$), this.devices.dma = new $DMA$$(this), this.devices.vga = new $VGAScreen$$(this, $device_bus$$, $option_rom$jscomp$1_settings$jscomp$1$$.screen, $option_rom$jscomp$1_settings$jscomp$1$$.vga_memory_size || + 8388608), this.devices.ps2 = new $PS2$$(this, $device_bus$$), this.devices.uart0 = new $UART$$(this, 1016, $device_bus$$), $option_rom$jscomp$1_settings$jscomp$1$$.uart1 && (this.devices.uart1 = new $UART$$(this, 760, $device_bus$$)), $option_rom$jscomp$1_settings$jscomp$1$$.uart2 && (this.devices.uart2 = new $UART$$(this, 1E3, $device_bus$$)), $option_rom$jscomp$1_settings$jscomp$1$$.uart3 && (this.devices.uart3 = new $UART$$(this, 744, $device_bus$$)), this.devices.fdc = new $FloppyController$$(this, + $option_rom$jscomp$1_settings$jscomp$1$$.fda, $option_rom$jscomp$1_settings$jscomp$1$$.fdb), $ide_device_count_io$jscomp$6$$ = 0, $option_rom$jscomp$1_settings$jscomp$1$$.hda && (this.devices.hda = new $IDEDevice$$(this, $option_rom$jscomp$1_settings$jscomp$1$$.hda, $option_rom$jscomp$1_settings$jscomp$1$$.hdb, !1, $ide_device_count_io$jscomp$6$$++, $device_bus$$)), $option_rom$jscomp$1_settings$jscomp$1$$.cdrom && (this.devices.cdrom = new $IDEDevice$$(this, $option_rom$jscomp$1_settings$jscomp$1$$.cdrom, + void 0, !0, $ide_device_count_io$jscomp$6$$++, $device_bus$$)), this.devices.pit = new $PIT$$(this, $device_bus$$), "ne2k" === $option_rom$jscomp$1_settings$jscomp$1$$.net_device.type ? this.devices.net = new $Ne2k$$(this, $device_bus$$, $option_rom$jscomp$1_settings$jscomp$1$$.preserve_mac_from_state_image, $option_rom$jscomp$1_settings$jscomp$1$$.mac_address_translation) : "virtio" === $option_rom$jscomp$1_settings$jscomp$1$$.net_device.type && (this.devices.virtio_net = new $VirtioNet$$(this, + $device_bus$$, $option_rom$jscomp$1_settings$jscomp$1$$.preserve_mac_from_state_image)), $option_rom$jscomp$1_settings$jscomp$1$$.fs9p && (this.devices.virtio_9p = new $Virtio9p$$($option_rom$jscomp$1_settings$jscomp$1$$.fs9p, this, $device_bus$$)), $option_rom$jscomp$1_settings$jscomp$1$$.virtio_console && (this.devices.virtio_console = new $VirtioConsole$$(this, $device_bus$$)), this.devices.sb16 = new $SB16$$(this, $device_bus$$)); + $option_rom$jscomp$1_settings$jscomp$1$$.multiboot && ($dbg_log$$("loading multiboot", 2), $option_rom$jscomp$1_settings$jscomp$1$$ = this.load_multiboot_option_rom($option_rom$jscomp$1_settings$jscomp$1$$.multiboot, $option_rom$jscomp$1_settings$jscomp$1$$.initrd, $option_rom$jscomp$1_settings$jscomp$1$$.cmdline)) && (this.bios.main ? ($dbg_log$$("adding option rom for multiboot", 2), this.option_roms.push($option_rom$jscomp$1_settings$jscomp$1$$)) : ($dbg_log$$("loaded multiboot without bios", + 2), this.reg32[0] = this.io.port_read32(244))); + this.debug.init(); +}; +$CPU$$.prototype.load_multiboot = function($buffer$jscomp$42$$) { + this.bios.main && $dbg_assert$$(!1, "load_multiboot not supported with BIOS"); + this.load_multiboot_option_rom($buffer$jscomp$42$$, void 0, "") && ($dbg_log$$("loaded multiboot", 2), this.reg32[0] = this.io.port_read32(244)); +}; +$CPU$$.prototype.load_multiboot_option_rom = function($buffer$jscomp$43$$, $initrd$$, $cmdline$$) { + $dbg_log$$("Trying multiboot from buffer of size " + $buffer$jscomp$43$$.byteLength, 2); + if (8192 > $buffer$jscomp$43$$.byteLength) { + var $buf32$$ = new Int32Array(2048); + (new Uint8Array($buf32$$.buffer)).set(new Uint8Array($buffer$jscomp$43$$)); + } else { + $buf32$$ = new Int32Array($buffer$jscomp$43$$, 0, 2048); + } + for (var $offset$jscomp$56$$ = 0; 8192 > $offset$jscomp$56$$; $offset$jscomp$56$$ += 4) { + if (464367618 === $buf32$$[$offset$jscomp$56$$ >> 2]) { + var $flags$jscomp$11$$ = $buf32$$[$offset$jscomp$56$$ + 4 >> 2]; + if (464367618 + $flags$jscomp$11$$ + $buf32$$[$offset$jscomp$56$$ + 8 >> 2] | 0) { + $dbg_log$$("Multiboot checksum check failed", 2); + continue; + } + } else { + continue; + } + $dbg_log$$("Multiboot magic found, flags: " + $h$$($flags$jscomp$11$$ >>> 0, 8), 2); + $dbg_assert$$(0 === ($flags$jscomp$11$$ & -65540), "TODO"); + var $cpu$jscomp$22$$ = this; + this.io.register_read(244, this, function() { + return 0; + }, function() { + return 0; + }, function() { + var $i$jscomp$69_multiboot_data$$ = 31860, $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$ = 0; + $cmdline$$ && ($entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$ |= 4, $cpu$jscomp$22$$.write32(31760, $i$jscomp$69_multiboot_data$$), $cmdline$$ += "\x00", $cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$ = (new TextEncoder).encode($cmdline$$), $cpu$jscomp$22$$.write_blob($cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$, $i$jscomp$69_multiboot_data$$), $i$jscomp$69_multiboot_data$$ += $cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$.length); + if ($flags$jscomp$11$$ & 2) { + $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$ |= 64; + $cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$ = 0; + $cpu$jscomp$22$$.write32(31788, 0); + $cpu$jscomp$22$$.write32(31792, $i$jscomp$69_multiboot_data$$); + var $start$jscomp$37_view$jscomp$inline_57$$ = 0; + let $was_memory$$ = !1; + for (let $addr$jscomp$46$$ = 0; 4294967296 > $addr$jscomp$46$$; $addr$jscomp$46$$ += 131072) { + $was_memory$$ && void 0 !== $cpu$jscomp$22$$.memory_map_read8[$addr$jscomp$46$$ >>> 17] ? ($cpu$jscomp$22$$.write32($i$jscomp$69_multiboot_data$$, 20), $cpu$jscomp$22$$.write32($i$jscomp$69_multiboot_data$$ + 4, $start$jscomp$37_view$jscomp$inline_57$$), $cpu$jscomp$22$$.write32($i$jscomp$69_multiboot_data$$ + 8, 0), $cpu$jscomp$22$$.write32($i$jscomp$69_multiboot_data$$ + 12, $addr$jscomp$46$$ - $start$jscomp$37_view$jscomp$inline_57$$), $cpu$jscomp$22$$.write32($i$jscomp$69_multiboot_data$$ + + 16, 0), $cpu$jscomp$22$$.write32($i$jscomp$69_multiboot_data$$ + 20, 1), $i$jscomp$69_multiboot_data$$ += 24, $cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$ += 24, $was_memory$$ = !1) : $was_memory$$ || void 0 !== $cpu$jscomp$22$$.memory_map_read8[$addr$jscomp$46$$ >>> 17] || ($start$jscomp$37_view$jscomp$inline_57$$ = $addr$jscomp$46$$, $was_memory$$ = !0); + } + $dbg_assert$$(!$was_memory$$, "top of 4GB shouldn't have memory"); + $cpu$jscomp$22$$.write32(31788, $cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$); + } + $cpu$jscomp$22$$.write32(31744, $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$); + var $cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$ = $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$ = 0; + if ($flags$jscomp$11$$ & 65536) { + $dbg_log$$("Multiboot specifies its own address table", 2); + var $blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$ = $buf32$$[$offset$jscomp$56$$ + 12 >> 2]; + var $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$ = $buf32$$[$offset$jscomp$56$$ + 16 >> 2]; + var $load_end_addr_program$jscomp$63_ramdisk_address$$ = $buf32$$[$offset$jscomp$56$$ + 20 >> 2]; + var $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$ = $buf32$$[$offset$jscomp$56$$ + 24 >> 2]; + $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$ = $buf32$$[$offset$jscomp$56$$ + 28 >> 2]; + $dbg_log$$("header=" + $h$$($blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$, 8) + " load=" + $h$$($JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$, 8) + " load_end=" + $h$$($load_end_addr_program$jscomp$63_ramdisk_address$$, 8) + " bss_end=" + $h$$($JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$, 8) + " entry=" + $h$$($entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$, + 8)); + $dbg_assert$$($JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$ <= $blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$); + $blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$ = $offset$jscomp$56$$ - ($blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$ - $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$); + 0 === $load_end_addr_program$jscomp$63_ramdisk_address$$ ? $cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$ = void 0 : ($dbg_assert$$($load_end_addr_program$jscomp$63_ramdisk_address$$ >= $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$), $cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$ = $load_end_addr_program$jscomp$63_ramdisk_address$$ - $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$); + $blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$ = new Uint8Array($buffer$jscomp$43$$, $blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$, $cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$); + $cpu$jscomp$22$$.write_blob($blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$, $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$); + $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$ |= 0; + $cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$ = Math.max($load_end_addr_program$jscomp$63_ramdisk_address$$, $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$); + } else { + if (1179403647 === $buf32$$[0]) { + $dbg_log$$("Multiboot image is in elf format", 2); + $start$jscomp$37_view$jscomp$inline_57$$ = new DataView($buffer$jscomp$43$$); + const [$header$jscomp$inline_58$$, $offset$jscomp$inline_59$$] = $read_struct$$($start$jscomp$37_view$jscomp$inline_57$$, $Header$$); + console.assert(52 === $offset$jscomp$inline_59$$); + for ($blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$ of Object.keys($header$jscomp$inline_58$$)) { + $dbg_log$$($blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$ + ": 0x" + ($header$jscomp$inline_58$$[$blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$].toString(16) >>> 0)); + } + console.assert(1179403647 === $header$jscomp$inline_58$$.magic, "Bad magic"); + console.assert(1 === $header$jscomp$inline_58$$.class, "Unimplemented: 64 bit elf"); + console.assert(1 === $header$jscomp$inline_58$$.data, "Unimplemented: big endian"); + console.assert(1 === $header$jscomp$inline_58$$.version0, "Bad version0"); + console.assert(2 === $header$jscomp$inline_58$$.type, "Unimplemented type"); + console.assert(1 === $header$jscomp$inline_58$$.version1, "Bad version1"); + console.assert(52 === $header$jscomp$inline_58$$.ehsize, "Bad header size"); + console.assert(32 === $header$jscomp$inline_58$$.phentsize, "Bad program header size"); + console.assert(40 === $header$jscomp$inline_58$$.shentsize, "Bad section header size"); + [$entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$] = $read_structs$$(new DataView($start$jscomp$37_view$jscomp$inline_57$$.buffer, $start$jscomp$37_view$jscomp$inline_57$$.byteOffset + $header$jscomp$inline_58$$.phoff, $header$jscomp$inline_58$$.phentsize * $header$jscomp$inline_58$$.phnum), $ProgramHeader$$, $header$jscomp$inline_58$$.phnum); + [$blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$] = $read_structs$$(new DataView($start$jscomp$37_view$jscomp$inline_57$$.buffer, $start$jscomp$37_view$jscomp$inline_57$$.byteOffset + $header$jscomp$inline_58$$.shoff, $header$jscomp$inline_58$$.shentsize * $header$jscomp$inline_58$$.shnum), $SectionHeader$$, $header$jscomp$inline_58$$.shnum); + if ($LOG_LEVEL$$) { + console.log("%d program headers:", $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$.length); + for ($JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$ of $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$) { + console.log("type=%s offset=%s vaddr=%s paddr=%s filesz=%s memsz=%s flags=%s align=%s", $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$.type.toString(16), $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$.offset.toString(16), $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$.vaddr.toString(16), $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$.paddr.toString(16), + $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$.filesz.toString(16), $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$.memsz.toString(16), $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$.flags.toString(16), $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$.align.toString(16)); + } + console.log("%d section headers:", $blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$.length); + for ($JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$ of $blob$jscomp$16_file_start_header_addr_key$jscomp$inline_64_sections_headers$jscomp$inline_62$$) { + console.log("name=%s type=%s flags=%s addr=%s offset=%s size=%s link=%s info=%s addralign=%s entsize=%s", $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$.name.toString(16), $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$.type.toString(16), $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$.flags.toString(16), $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$.addr.toString(16), + $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$.offset.toString(16), $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$.size.toString(16), $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$.link.toString(16), $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$.info.toString(16), $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$.addralign.toString(16), + $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$.entsize.toString(16)); + } + } + $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$ = $header$jscomp$inline_58$$; + $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$ = $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$; + $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$ = $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$.entry; + for ($load_end_addr_program$jscomp$63_ramdisk_address$$ of $JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$) { + 0 !== $load_end_addr_program$jscomp$63_ramdisk_address$$.type && (1 === $load_end_addr_program$jscomp$63_ramdisk_address$$.type ? ($dbg_assert$$($load_end_addr_program$jscomp$63_ramdisk_address$$.filesz <= $load_end_addr_program$jscomp$63_ramdisk_address$$.memsz), $load_end_addr_program$jscomp$63_ramdisk_address$$.paddr + $load_end_addr_program$jscomp$63_ramdisk_address$$.memsz < $cpu$jscomp$22$$.memory_size[0] ? ($load_end_addr_program$jscomp$63_ramdisk_address$$.filesz && ($JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$ = + new Uint8Array($buffer$jscomp$43$$, $load_end_addr_program$jscomp$63_ramdisk_address$$.offset, $load_end_addr_program$jscomp$63_ramdisk_address$$.filesz), $cpu$jscomp$22$$.write_blob($JSCompiler_object_inline_program_headers_181_blob$jscomp$17_load_addr_section$jscomp$inline_66$$, $load_end_addr_program$jscomp$63_ramdisk_address$$.paddr)), $cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$ = Math.max($cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$, $load_end_addr_program$jscomp$63_ramdisk_address$$.paddr + + $load_end_addr_program$jscomp$63_ramdisk_address$$.memsz), $dbg_log$$("prg load " + $load_end_addr_program$jscomp$63_ramdisk_address$$.paddr + " to " + ($load_end_addr_program$jscomp$63_ramdisk_address$$.paddr + $load_end_addr_program$jscomp$63_ramdisk_address$$.memsz), 2), $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$ === $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$.entry && $load_end_addr_program$jscomp$63_ramdisk_address$$.vaddr <= + $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$ && $load_end_addr_program$jscomp$63_ramdisk_address$$.vaddr + $load_end_addr_program$jscomp$63_ramdisk_address$$.memsz > $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$ && ($entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$ = $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$ - $load_end_addr_program$jscomp$63_ramdisk_address$$.vaddr + $load_end_addr_program$jscomp$63_ramdisk_address$$.paddr)) : + $dbg_log$$("Warning: Skipped loading section, paddr=" + $h$$($load_end_addr_program$jscomp$63_ramdisk_address$$.paddr) + " memsz=" + $load_end_addr_program$jscomp$63_ramdisk_address$$.memsz, 2)) : 2 === $load_end_addr_program$jscomp$63_ramdisk_address$$.type || 3 === $load_end_addr_program$jscomp$63_ramdisk_address$$.type || 4 === $load_end_addr_program$jscomp$63_ramdisk_address$$.type || 6 === $load_end_addr_program$jscomp$63_ramdisk_address$$.type || 7 === $load_end_addr_program$jscomp$63_ramdisk_address$$.type || + 1685382480 === $load_end_addr_program$jscomp$63_ramdisk_address$$.type || 1685382481 === $load_end_addr_program$jscomp$63_ramdisk_address$$.type || 1685382482 === $load_end_addr_program$jscomp$63_ramdisk_address$$.type || 1685382483 === $load_end_addr_program$jscomp$63_ramdisk_address$$.type ? $dbg_log$$("skip load type " + $load_end_addr_program$jscomp$63_ramdisk_address$$.type + " " + $load_end_addr_program$jscomp$63_ramdisk_address$$.paddr + " to " + ($load_end_addr_program$jscomp$63_ramdisk_address$$.paddr + + $load_end_addr_program$jscomp$63_ramdisk_address$$.memsz), 2) : $dbg_assert$$(!1, "unimplemented elf section type: " + $h$$($load_end_addr_program$jscomp$63_ramdisk_address$$.type))); + } + } else { + $dbg_assert$$(!1, "Not a bootable multiboot format"); + } + } + $initrd$$ && ($cpu$jscomp$22$$.write32(31764, 1), $cpu$jscomp$22$$.write32(31768, $i$jscomp$69_multiboot_data$$), $load_end_addr_program$jscomp$63_ramdisk_address$$ = $cmdline_utf8_length$jscomp$25_multiboot_mmap_count_top_of_load$$, 0 !== ($load_end_addr_program$jscomp$63_ramdisk_address$$ & 4095) && ($load_end_addr_program$jscomp$63_ramdisk_address$$ = ($load_end_addr_program$jscomp$63_ramdisk_address$$ & -4096) + 4096), $dbg_log$$("ramdisk address " + $load_end_addr_program$jscomp$63_ramdisk_address$$), + $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$ = $load_end_addr_program$jscomp$63_ramdisk_address$$ + $initrd$$.byteLength, $cpu$jscomp$22$$.write32($i$jscomp$69_multiboot_data$$, $load_end_addr_program$jscomp$63_ramdisk_address$$), $cpu$jscomp$22$$.write32($i$jscomp$69_multiboot_data$$ + 4, $JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$), $cpu$jscomp$22$$.write32($i$jscomp$69_multiboot_data$$ + 8, 0), $cpu$jscomp$22$$.write32($i$jscomp$69_multiboot_data$$ + + 12, 0), $dbg_assert$$($JSCompiler_object_inline_header_180_bss_end_addr_program$jscomp$inline_65_ramdisk_top$$ < $cpu$jscomp$22$$.memory_size[0]), $cpu$jscomp$22$$.write_blob(new Uint8Array($initrd$$), $load_end_addr_program$jscomp$63_ramdisk_address$$)); + $cpu$jscomp$22$$.reg32[3] = 31744; + $cpu$jscomp$22$$.cr[0] = 1; + $cpu$jscomp$22$$.protected_mode[0] = 1; + $cpu$jscomp$22$$.flags[0] = 2; + $cpu$jscomp$22$$.is_32[0] = 1; + $cpu$jscomp$22$$.stack_size_32[0] = 1; + for ($i$jscomp$69_multiboot_data$$ = 0; 6 > $i$jscomp$69_multiboot_data$$; $i$jscomp$69_multiboot_data$$++) { + $cpu$jscomp$22$$.segment_is_null[$i$jscomp$69_multiboot_data$$] = 0, $cpu$jscomp$22$$.segment_offsets[$i$jscomp$69_multiboot_data$$] = 0, $cpu$jscomp$22$$.segment_limits[$i$jscomp$69_multiboot_data$$] = 4294967295, $cpu$jscomp$22$$.sreg[$i$jscomp$69_multiboot_data$$] = 45058; + } + $cpu$jscomp$22$$.instruction_pointer[0] = $cpu$jscomp$22$$.get_seg_cs() + $entry_addr_entrypoint_info_program_headers$jscomp$inline_60$$ | 0; + $cpu$jscomp$22$$.update_state_flags(); + $dbg_log$$("Starting multiboot kernel at:", 2); + $cpu$jscomp$22$$.debug.dump_state(); + $cpu$jscomp$22$$.debug.dump_regs(); + return 732803074; + }); + this.io.register_write_consecutive(244, this, function($value$jscomp$184$$) { + console.log("Test exited with code " + $h$$($value$jscomp$184$$, 2)); + throw "HALT"; + }, function() { + }, function() { + }, function() { + }); + for (let $i$jscomp$70$$ = 0; 15 >= $i$jscomp$70$$; $i$jscomp$70$$++) { + function $handle_write$$($value$jscomp$185$$) { + $dbg_log$$("kvm-unit-test: Set irq " + $h$$($i$jscomp$70$$) + " to " + $h$$($value$jscomp$185$$, 2)); + $value$jscomp$185$$ ? this.device_raise_irq($i$jscomp$70$$) : this.device_lower_irq($i$jscomp$70$$); + } + this.io.register_write(8192 + $i$jscomp$70$$, this, $handle_write$$, $handle_write$$, $handle_write$$); + } + const $data8$$ = new Uint8Array(512); + (new Uint16Array($data8$$.buffer))[0] = 43605; + $data8$$[2] = 1; + var $checksum_index_i$jscomp$68$$ = 3; + $data8$$[$checksum_index_i$jscomp$68$$++] = 102; + $data8$$[$checksum_index_i$jscomp$68$$++] = 229; + $data8$$[$checksum_index_i$jscomp$68$$++] = 244; + $dbg_assert$$(512 > $checksum_index_i$jscomp$68$$); + let $rom_checksum$$ = $data8$$[$checksum_index_i$jscomp$68$$] = 0; + for (let $i$jscomp$71$$ = 0; $i$jscomp$71$$ < $data8$$.length; $i$jscomp$71$$++) { + $rom_checksum$$ += $data8$$[$i$jscomp$71$$]; + } + $data8$$[$checksum_index_i$jscomp$68$$] = -$rom_checksum$$; + return {name:"genroms/multiboot.bin", data:$data8$$}; + } + $dbg_log$$("Multiboot header not found", 2); +}; +$CPU$$.prototype.fill_cmos = function($rtc$jscomp$1$$, $settings$jscomp$2$$) { + var $boot_order_memory_above_16m_memory_above_1m$$ = $settings$jscomp$2$$.boot_order || 291; + $rtc$jscomp$1$$.cmos_write(56, 1 | $boot_order_memory_above_16m_memory_above_1m$$ >> 4 & 240); + $rtc$jscomp$1$$.cmos_write(61, $boot_order_memory_above_16m_memory_above_1m$$ & 255); + $rtc$jscomp$1$$.cmos_write(21, 128); + $rtc$jscomp$1$$.cmos_write(22, 2); + $boot_order_memory_above_16m_memory_above_1m$$ = 0; + 1048576 <= this.memory_size[0] && ($boot_order_memory_above_16m_memory_above_1m$$ = this.memory_size[0] - 1048576 >> 10, $boot_order_memory_above_16m_memory_above_1m$$ = Math.min($boot_order_memory_above_16m_memory_above_1m$$, 65535)); + $rtc$jscomp$1$$.cmos_write(23, $boot_order_memory_above_16m_memory_above_1m$$ & 255); + $rtc$jscomp$1$$.cmos_write(24, $boot_order_memory_above_16m_memory_above_1m$$ >> 8 & 255); + $rtc$jscomp$1$$.cmos_write(48, $boot_order_memory_above_16m_memory_above_1m$$ & 255); + $rtc$jscomp$1$$.cmos_write(49, $boot_order_memory_above_16m_memory_above_1m$$ >> 8 & 255); + $boot_order_memory_above_16m_memory_above_1m$$ = 0; + 16777216 <= this.memory_size[0] && ($boot_order_memory_above_16m_memory_above_1m$$ = this.memory_size[0] - 16777216 >> 16, $boot_order_memory_above_16m_memory_above_1m$$ = Math.min($boot_order_memory_above_16m_memory_above_1m$$, 65535)); + $rtc$jscomp$1$$.cmos_write(52, $boot_order_memory_above_16m_memory_above_1m$$ & 255); + $rtc$jscomp$1$$.cmos_write(53, $boot_order_memory_above_16m_memory_above_1m$$ >> 8 & 255); + $rtc$jscomp$1$$.cmos_write(91, 0); + $rtc$jscomp$1$$.cmos_write(92, 0); + $rtc$jscomp$1$$.cmos_write(93, 0); + $rtc$jscomp$1$$.cmos_write(20, 47); + $rtc$jscomp$1$$.cmos_write(95, 0); + $settings$jscomp$2$$.fastboot && $rtc$jscomp$1$$.cmos_write(63, 1); +}; +$CPU$$.prototype.load_bios = function() { + var $bios$$ = this.bios.main, $vga_bios$$ = this.bios.vga; + if ($bios$$) { + $dbg_assert$$($bios$$ instanceof ArrayBuffer); + var $data$jscomp$185$$ = new Uint8Array($bios$$); + this.write_blob($data$jscomp$185$$, 1048576 - $bios$$.byteLength); + if ($vga_bios$$) { + $dbg_assert$$($vga_bios$$ instanceof ArrayBuffer); + var $vga_bios8$$ = new Uint8Array($vga_bios$$); + this.write_blob($vga_bios8$$, 786432); + this.io.mmap_register(4272947200, 1048576, function($addr$jscomp$47$$) { + $addr$jscomp$47$$ = $addr$jscomp$47$$ - 4272947200 | 0; + return $addr$jscomp$47$$ < $vga_bios8$$.length ? $vga_bios8$$[$addr$jscomp$47$$] : 0; + }, function() { + $dbg_assert$$(!1, "Unexpected write to VGA rom"); + }); + } else { + $dbg_log$$("Warning: No VGA BIOS"); + } + this.io.mmap_register(4293918720, 1048576, function($addr$jscomp$49$$) { + return this.mem8[$addr$jscomp$49$$ & 1048575]; + }.bind(this), function($addr$jscomp$50$$, $value$jscomp$187$$) { + this.mem8[$addr$jscomp$50$$ & 1048575] = $value$jscomp$187$$; + }.bind(this)); + } else { + $dbg_log$$("Warning: No BIOS"); + } +}; +$CPU$$.prototype.codegen_finalize = function($wasm_table_index$$, $start$jscomp$39$$, $state_flags$$, $ptr$jscomp$4$$, $len$jscomp$18$$) { + $ptr$jscomp$4$$ >>>= 0; + $len$jscomp$18$$ >>>= 0; + $dbg_assert$$(0 <= $wasm_table_index$$ && 900 > $wasm_table_index$$); + const $code$jscomp$3$$ = new Uint8Array(this.wasm_memory.buffer, $ptr$jscomp$4$$, $len$jscomp$18$$); + this.seen_code[$start$jscomp$39$$] = (this.seen_code[$start$jscomp$39$$] || 0) + 1; + this.test_hook_did_generate_wasm && this.test_hook_did_generate_wasm($code$jscomp$3$$); + WebAssembly.instantiate($code$jscomp$3$$, {e:this.jit_imports}).then($result$jscomp$11$$ => { + this.wm.wasm_table.set($wasm_table_index$$ + 1024, $result$jscomp$11$$.instance.exports.f); + this.codegen_finalize_finished($wasm_table_index$$, $start$jscomp$39$$, $state_flags$$); + this.test_hook_did_finalize_wasm && this.test_hook_did_finalize_wasm($code$jscomp$3$$); + }).catch($e$jscomp$14$$ => { + console.log($e$jscomp$14$$); + debugger; + throw $e$jscomp$14$$; + }); +}; +$CPU$$.prototype.log_uncompiled_code = function() { +}; +$CPU$$.prototype.dump_function_code = function() { +}; +$CPU$$.prototype.run_hardware_timers = function($acpi_enabled$$, $now$jscomp$10$$) { + const $pit_time$$ = this.devices.pit.timer($now$jscomp$10$$, !1), $rtc_time$$ = this.devices.rtc.timer($now$jscomp$10$$, !1); + let $acpi_time$$ = 100, $apic_time$$ = 100; + $acpi_enabled$$ && ($acpi_time$$ = this.devices.acpi.timer($now$jscomp$10$$), $apic_time$$ = this.devices.apic.timer($now$jscomp$10$$)); + return Math.min($pit_time$$, $rtc_time$$, $acpi_time$$, $apic_time$$); +}; +$CPU$$.prototype.device_raise_irq = function($i$jscomp$76$$) { + $dbg_assert$$(1 === arguments.length); + this.pic_set_irq($i$jscomp$76$$); + this.devices.ioapic && this.devices.ioapic.set_irq($i$jscomp$76$$); +}; +$CPU$$.prototype.device_lower_irq = function($i$jscomp$77$$) { + this.pic_clear_irq($i$jscomp$77$$); + this.devices.ioapic && this.devices.ioapic.clear_irq($i$jscomp$77$$); +}; +$CPU$$.prototype.debug_init = function() { + function $get_state$$($where$jscomp$2$$) { + for (var $mode$jscomp$25$$ = $cpu$jscomp$23$$.protected_mode[0] ? "prot" : "real", $flags$jscomp$12$$ = $cpu$jscomp$23$$.get_eflags(), $iopl$$ = $cpu$jscomp$23$$.getiopl(), $cpl$$ = $cpu$jscomp$23$$.cpl[0], $cs_eip$$ = $h$$($cpu$jscomp$23$$.sreg[1], 4) + ":" + $h$$($cpu$jscomp$23$$.get_real_eip() >>> 0, 8), $ss_esp$$ = $h$$($cpu$jscomp$23$$.sreg[2], 4) + ":" + $h$$($cpu$jscomp$23$$.reg32[0] >>> 0, 8), $op_size$$ = $cpu$jscomp$23$$.is_32[0] ? "32" : "16", $if_$$ = $cpu$jscomp$23$$.flags[0] & 512 ? + 1 : 0, $flag_names$$ = {[1]:"c", [4]:"p", [16]:"a", [64]:"z", [128]:"s", [256]:"t", [512]:"i", [1024]:"d", [2048]:"o", }, $flag_string$$ = "", $i$jscomp$79$$ = 0; 16 > $i$jscomp$79$$; $i$jscomp$79$$++) { + $flag_names$$[1 << $i$jscomp$79$$] && ($flag_string$$ = $flags$jscomp$12$$ & 1 << $i$jscomp$79$$ ? $flag_string$$ + $flag_names$$[1 << $i$jscomp$79$$] : $flag_string$$ + " "); + } + return "mode=" + $mode$jscomp$25$$ + "/" + $op_size$$ + " paging=" + +(0 !== ($cpu$jscomp$23$$.cr[0] & -2147483648)) + " pae=" + +(0 !== ($cpu$jscomp$23$$.cr[4] & 32)) + " iopl=" + $iopl$$ + " cpl=" + $cpl$$ + " if=" + $if_$$ + " cs:eip=" + $cs_eip$$ + " cs_off=" + $h$$($cpu$jscomp$23$$.get_seg_cs() >>> 0, 8) + " flgs=" + $h$$($cpu$jscomp$23$$.get_eflags() >>> 0, 6) + " (" + $flag_string$$ + ") ss:esp=" + $ss_esp$$ + " ssize=" + +$cpu$jscomp$23$$.stack_size_32[0] + ($where$jscomp$2$$ ? " in " + + $where$jscomp$2$$ : ""); + } + function $get_regs_short$$() { + for (var $r32$jscomp$2$$ = {eax:0, ecx:1, edx:2, ebx:3, esp:4, ebp:5, esi:6, edi:7}, $r32_names$$ = "eax ecx edx ebx esp ebp esi edi".split(" "), $line1$$ = "", $line2$$ = "", $i$jscomp$80$$ = 0; 4 > $i$jscomp$80$$; $i$jscomp$80$$++) { + $line1$$ += $r32_names$$[$i$jscomp$80$$] + "=" + $h$$($cpu$jscomp$23$$.reg32[$r32$jscomp$2$$[$r32_names$$[$i$jscomp$80$$]]] >>> 0, 8) + " ", $line2$$ += $r32_names$$[$i$jscomp$80$$ + 4] + "=" + $h$$($cpu$jscomp$23$$.reg32[$r32$jscomp$2$$[$r32_names$$[$i$jscomp$80$$ + 4]]] >>> 0, 8) + " "; + } + $line1$$ += " ds=" + $h$$($cpu$jscomp$23$$.sreg[3], 4) + " es=" + $h$$($cpu$jscomp$23$$.sreg[0], 4) + " fs=" + $h$$($cpu$jscomp$23$$.sreg[4], 4); + $line2$$ += " gs=" + $h$$($cpu$jscomp$23$$.sreg[5], 4) + " cs=" + $h$$($cpu$jscomp$23$$.sreg[1], 4) + " ss=" + $h$$($cpu$jscomp$23$$.sreg[2], 4); + return [$line1$$, $line2$$]; + } + function $load_page_entry$$($dword_entry$$, $pae$$, $is_directory$$) { + if (!($dword_entry$$ & 1)) { + return !1; + } + var $size$jscomp$39$$ = 128 === ($dword_entry$$ & 128); + return {size:$size$jscomp$39$$, global:256 === ($dword_entry$$ & 256), accessed:32 === ($dword_entry$$ & 32), dirty:64 === ($dword_entry$$ & 64), cache_disable:16 === ($dword_entry$$ & 16), user:4 === ($dword_entry$$ & 4), read_write:2 === ($dword_entry$$ & 2), address:($size$jscomp$39$$ && !$is_directory$$ ? $dword_entry$$ & ($pae$$ ? 4292870144 : 4290772992) : $dword_entry$$ & 4294963200) >>> 0}; + } + function $dump_page_directory$$($pd_addr$$, $pae$jscomp$2$$, $start$jscomp$43$$) { + for (var $n$jscomp$11$$ = $pae$jscomp$2$$ ? 512 : 1024, $entry_size$$ = $pae$jscomp$2$$ ? 8 : 4, $pd_shift$$ = $pae$jscomp$2$$ ? 21 : 22, $i$jscomp$84$$ = 0; $i$jscomp$84$$ < $n$jscomp$11$$; $i$jscomp$84$$++) { + var $dword$jscomp$4_flags$jscomp$14$$ = $cpu$jscomp$23$$.read32s($pd_addr$$ + $i$jscomp$84$$ * $entry_size$$), $entry$jscomp$7$$ = $load_page_entry$$($dword$jscomp$4_flags$jscomp$14$$, $pae$jscomp$2$$, !0); + if ($entry$jscomp$7$$) { + if ($dword$jscomp$4_flags$jscomp$14$$ = "", $dword$jscomp$4_flags$jscomp$14$$ += $entry$jscomp$7$$.size ? "S " : " ", $dword$jscomp$4_flags$jscomp$14$$ += $entry$jscomp$7$$.accessed ? "A " : " ", $dword$jscomp$4_flags$jscomp$14$$ += $entry$jscomp$7$$.cache_disable ? "Cd " : " ", $dword$jscomp$4_flags$jscomp$14$$ += $entry$jscomp$7$$.user ? "U " : " ", $dword$jscomp$4_flags$jscomp$14$$ += $entry$jscomp$7$$.read_write ? "Rw " : " ", $entry$jscomp$7$$.size) { + $dbg_log$$("=== " + $h$$($start$jscomp$43$$ + ($i$jscomp$84$$ << $pd_shift$$) >>> 0, 8) + " -> " + $h$$($entry$jscomp$7$$.address >>> 0, 8) + " | " + $dword$jscomp$4_flags$jscomp$14$$); + } else { + $dbg_log$$("=== " + $h$$($start$jscomp$43$$ + ($i$jscomp$84$$ << $pd_shift$$) >>> 0, 8) + " | " + $dword$jscomp$4_flags$jscomp$14$$); + for (var $j$jscomp$7$$ = 0; $j$jscomp$7$$ < $n$jscomp$11$$; $j$jscomp$7$$++) { + var $sub_addr$$ = $entry$jscomp$7$$.address + $j$jscomp$7$$ * $entry_size$$; + $dword$jscomp$4_flags$jscomp$14$$ = $cpu$jscomp$23$$.read32s($sub_addr$$); + var $subentry$$ = $load_page_entry$$($dword$jscomp$4_flags$jscomp$14$$, $pae$jscomp$2$$, !1); + $subentry$$ && ($dword$jscomp$4_flags$jscomp$14$$ = "", $dword$jscomp$4_flags$jscomp$14$$ += $subentry$$.cache_disable ? "Cd " : " ", $dword$jscomp$4_flags$jscomp$14$$ += $subentry$$.user ? "U " : " ", $dword$jscomp$4_flags$jscomp$14$$ += $subentry$$.read_write ? "Rw " : " ", $dword$jscomp$4_flags$jscomp$14$$ += $subentry$$.global ? "G " : " ", $dword$jscomp$4_flags$jscomp$14$$ += $subentry$$.accessed ? "A " : " ", $dword$jscomp$4_flags$jscomp$14$$ += $subentry$$.dirty ? "Di " : + " ", $dbg_log$$("# " + $h$$($start$jscomp$43$$ + ($i$jscomp$84$$ << $pd_shift$$ | $j$jscomp$7$$ << 12) >>> 0, 8) + " -> " + $h$$($subentry$$.address, 8) + " | " + $dword$jscomp$4_flags$jscomp$14$$ + " (at " + $h$$($sub_addr$$, 8) + ")")); + } + } + } + } + } + var $cpu$jscomp$23$$ = this, $debug$$ = {}; + this.debug = $debug$$; + $debug$$.init = function() { + function $handle$jscomp$12$$($out_byte$jscomp$17$$) { + 10 === $out_byte$jscomp$17$$ ? ($dbg_log$$($seabios_debug$$, 4096), $seabios_debug$$ = "") : $seabios_debug$$ += String.fromCharCode($out_byte$jscomp$17$$); + } + if ($cpu$jscomp$23$$.io) { + var $seabios_debug$$ = ""; + $cpu$jscomp$23$$.io.register_write(1026, this, $handle$jscomp$12$$); + $cpu$jscomp$23$$.io.register_write(1280, this, $handle$jscomp$12$$); + } + }; + $debug$$.get_regs_short = $get_regs_short$$; + $debug$$.dump_regs = function() { + var $lines$$ = $get_regs_short$$(); + $dbg_log$$($lines$$[0], 2); + $dbg_log$$($lines$$[1], 2); + }; + $debug$$.get_state = $get_state$$; + $debug$$.dump_state = function($where$jscomp$3$$) { + $dbg_log$$($get_state$$($where$jscomp$3$$), 2); + }; + $debug$$.dump_stack = function($i$jscomp$78_start$jscomp$42$$, $end$jscomp$24$$) { + var $esp$$ = $cpu$jscomp$23$$.reg32[4]; + $dbg_log$$("========= STACK =========="); + if ($end$jscomp$24$$ >= $i$jscomp$78_start$jscomp$42$$ || void 0 === $end$jscomp$24$$) { + $i$jscomp$78_start$jscomp$42$$ = 5, $end$jscomp$24$$ = -5; + } + for (; $i$jscomp$78_start$jscomp$42$$ > $end$jscomp$24$$; $i$jscomp$78_start$jscomp$42$$--) { + var $line$jscomp$5$$ = " "; + $i$jscomp$78_start$jscomp$42$$ || ($line$jscomp$5$$ = "=> "); + $line$jscomp$5$$ += $h$$($i$jscomp$78_start$jscomp$42$$, 2) + " | "; + $dbg_log$$($line$jscomp$5$$ + $h$$($esp$$ + 4 * $i$jscomp$78_start$jscomp$42$$, 8) + " | " + $h$$($cpu$jscomp$23$$.read32s($esp$$ + 4 * $i$jscomp$78_start$jscomp$42$$) >>> 0)); + } + }; + $debug$$.dump_page_structures = function() { + if ($cpu$jscomp$23$$.cr[4] & 32) { + $dbg_log$$("PAE enabled"); + for (var $i$jscomp$83$$ = 0; 4 > $i$jscomp$83$$; $i$jscomp$83$$++) { + var $dword$jscomp$3$$ = $cpu$jscomp$23$$.read32s($cpu$jscomp$23$$.cr[3] + 8 * $i$jscomp$83$$); + $dword$jscomp$3$$ & 1 && $dump_page_directory$$($dword$jscomp$3$$ & 4294963200, !0, $i$jscomp$83$$ << 30); + } + } else { + $dbg_log$$("PAE disabled"), $dump_page_directory$$($cpu$jscomp$23$$.cr[3], !1, 0); + } + }; + $debug$$.dump_gdt_ldt = function() { + function $dump_table$$($addr$jscomp$51$$, $size$jscomp$38$$) { + for (var $i$jscomp$81$$ = 0; $i$jscomp$81$$ < $size$jscomp$38$$; $i$jscomp$81$$ += 8, $addr$jscomp$51$$ += 8) { + var $base$jscomp$4$$ = $cpu$jscomp$23$$.read16($addr$jscomp$51$$ + 2) | $cpu$jscomp$23$$.read8($addr$jscomp$51$$ + 4) << 16 | $cpu$jscomp$23$$.read8($addr$jscomp$51$$ + 7) << 24, $limit$$ = $cpu$jscomp$23$$.read16($addr$jscomp$51$$) | ($cpu$jscomp$23$$.read8($addr$jscomp$51$$ + 6) & 15) << 16, $access$jscomp$1$$ = $cpu$jscomp$23$$.read8($addr$jscomp$51$$ + 5), $flags$jscomp$13$$ = $cpu$jscomp$23$$.read8($addr$jscomp$51$$ + 6) >> 4, $flags_str$$ = "", $dpl$$ = $access$jscomp$1$$ >> 5 & 3; + $flags_str$$ = $access$jscomp$1$$ & 128 ? $flags_str$$ + " P " : $flags_str$$ + "NP "; + $access$jscomp$1$$ & 16 ? ($flags_str$$ = $flags$jscomp$13$$ & 4 ? $flags_str$$ + "32b " : $flags_str$$ + "16b ", $access$jscomp$1$$ & 8 ? ($flags_str$$ += "X ", $access$jscomp$1$$ & 4 && ($flags_str$$ += "C ")) : $flags_str$$ += "R ", $flags_str$$ += "RW ") : $flags_str$$ += "sys: " + $h$$($access$jscomp$1$$ & 15); + $flags$jscomp$13$$ & 8 && ($limit$$ = $limit$$ << 12 | 4095); + $dbg_log$$($h$$($i$jscomp$81$$ & -8, 4) + " " + $h$$($base$jscomp$4$$ >>> 0, 8) + " (" + $h$$($limit$$ >>> 0, 8) + " bytes) " + $flags_str$$ + "; dpl = " + $dpl$$ + ", a = " + $access$jscomp$1$$.toString(2) + ", f = " + $flags$jscomp$13$$.toString(2)); + } + } + $dbg_log$$("gdt: (len = " + $h$$($cpu$jscomp$23$$.gdtr_size[0]) + ")"); + $dump_table$$($cpu$jscomp$23$$.translate_address_system_read($cpu$jscomp$23$$.gdtr_offset[0]), $cpu$jscomp$23$$.gdtr_size[0]); + $dbg_log$$("\nldt: (len = " + $h$$($cpu$jscomp$23$$.segment_limits[7]) + ")"); + $dump_table$$($cpu$jscomp$23$$.translate_address_system_read($cpu$jscomp$23$$.segment_offsets[7]), $cpu$jscomp$23$$.segment_limits[7]); + }; + $debug$$.dump_idt = function() { + for (var $i$jscomp$82$$ = 0; $i$jscomp$82$$ < $cpu$jscomp$23$$.idtr_size[0]; $i$jscomp$82$$ += 8) { + var $addr$jscomp$52_type$jscomp$155$$ = $cpu$jscomp$23$$.translate_address_system_read($cpu$jscomp$23$$.idtr_offset[0] + $i$jscomp$82$$), $base$jscomp$5$$ = $cpu$jscomp$23$$.read16($addr$jscomp$52_type$jscomp$155$$) | $cpu$jscomp$23$$.read16($addr$jscomp$52_type$jscomp$155$$ + 6) << 16, $selector$jscomp$1$$ = $cpu$jscomp$23$$.read16($addr$jscomp$52_type$jscomp$155$$ + 2); + $addr$jscomp$52_type$jscomp$155$$ = $cpu$jscomp$23$$.read8($addr$jscomp$52_type$jscomp$155$$ + 5); + var $dpl$jscomp$1$$ = $addr$jscomp$52_type$jscomp$155$$ >> 5 & 3; + var $line$jscomp$6$$ = 5 === ($addr$jscomp$52_type$jscomp$155$$ & 31) ? "task gate " : 14 === ($addr$jscomp$52_type$jscomp$155$$ & 31) ? "intr gate " : 15 === ($addr$jscomp$52_type$jscomp$155$$ & 31) ? "trap gate " : "invalid "; + $line$jscomp$6$$ = $addr$jscomp$52_type$jscomp$155$$ & 128 ? $line$jscomp$6$$ + " P" : $line$jscomp$6$$ + "NP"; + $dbg_log$$($h$$($i$jscomp$82$$ >> 3, 4) + " " + $h$$($base$jscomp$5$$ >>> 0, 8) + ", " + $h$$($selector$jscomp$1$$, 4) + "; " + $line$jscomp$6$$ + "; dpl = " + $dpl$jscomp$1$$ + ", t = " + $addr$jscomp$52_type$jscomp$155$$.toString(2)); + } + }; + $debug$$.get_memory_dump = function($start$jscomp$44$$, $count$jscomp$56$$) { + void 0 === $start$jscomp$44$$ ? ($start$jscomp$44$$ = 0, $count$jscomp$56$$ = $cpu$jscomp$23$$.memory_size[0]) : void 0 === $count$jscomp$56$$ && ($count$jscomp$56$$ = $start$jscomp$44$$, $start$jscomp$44$$ = 0); + return $cpu$jscomp$23$$.mem8.slice($start$jscomp$44$$, $start$jscomp$44$$ + $count$jscomp$56$$).buffer; + }; + $debug$$.memory_hex_dump = function($addr$jscomp$55$$, $length$jscomp$26$$) { + $length$jscomp$26$$ = $length$jscomp$26$$ || 64; + for (var $line$jscomp$7$$, $byt$$, $i$jscomp$85$$ = 0; $i$jscomp$85$$ < $length$jscomp$26$$ >> 4; $i$jscomp$85$$++) { + $line$jscomp$7$$ = $h$$($addr$jscomp$55$$ + ($i$jscomp$85$$ << 4), 5) + " "; + for (var $j$jscomp$8$$ = 0; 16 > $j$jscomp$8$$; $j$jscomp$8$$++) { + $byt$$ = $cpu$jscomp$23$$.read8($addr$jscomp$55$$ + ($i$jscomp$85$$ << 4) + $j$jscomp$8$$), $line$jscomp$7$$ += $h$$($byt$$, 2) + " "; + } + $line$jscomp$7$$ += " "; + for ($j$jscomp$8$$ = 0; 16 > $j$jscomp$8$$; $j$jscomp$8$$++) { + $byt$$ = $cpu$jscomp$23$$.read8($addr$jscomp$55$$ + ($i$jscomp$85$$ << 4) + $j$jscomp$8$$), $line$jscomp$7$$ += 33 > $byt$$ || 126 < $byt$$ ? "." : String.fromCharCode($byt$$); + } + $dbg_log$$($line$jscomp$7$$); + } + }; + $debug$$.used_memory_dump = function() { + for (var $block_size$$ = $cpu$jscomp$23$$.memory_size[0] / 128 / 16 | 0, $row$jscomp$8$$, $i$jscomp$86$$ = 0; 16 > $i$jscomp$86$$; $i$jscomp$86$$++) { + $row$jscomp$8$$ = $h$$(128 * $i$jscomp$86$$ * $block_size$$, 8) + " | "; + for (var $j$jscomp$9$$ = 0; 128 > $j$jscomp$9$$; $j$jscomp$9$$++) { + $row$jscomp$8$$ += 0 < $cpu$jscomp$23$$.mem32s[(128 * $i$jscomp$86$$ + $j$jscomp$9$$) * $block_size$$] ? "X" : " "; + } + $dbg_log$$($row$jscomp$8$$); + } + }; + $debug$$.debug_interrupt = function() { + }; + let $cs$jscomp$1$$, $capstone_decoder$$; + $debug$$.dump_code = function($is_32$jscomp$1$$, $buffer$jscomp$47$$, $start$jscomp$45$$) { + if (!$capstone_decoder$$) { + if (void 0 === $cs$jscomp$1$$ && ($cs$jscomp$1$$ = "function" === typeof require ? require("./capstone-x86.min.js") : window.cs, void 0 === $cs$jscomp$1$$)) { + $dbg_log$$("Warning: Missing capstone library, disassembly not available"); + return; + } + $capstone_decoder$$ = [new $cs$jscomp$1$$.Capstone($cs$jscomp$1$$.ARCH_X86, $cs$jscomp$1$$.MODE_16), new $cs$jscomp$1$$.Capstone($cs$jscomp$1$$.ARCH_X86, $cs$jscomp$1$$.MODE_32), ]; + } + try { + $capstone_decoder$$[$is_32$jscomp$1$$].disasm($buffer$jscomp$47$$, $start$jscomp$45$$).forEach(function($instr$$) { + $dbg_log$$($h$$($instr$$.address >>> 0) + ": " + $v86util$$.pads($instr$$.bytes.map($x$jscomp$104$$ => $h$$($x$jscomp$104$$, 2).slice(-2)).join(" "), 20) + " " + $instr$$.mnemonic + " " + $instr$$.op_str); + }), $dbg_log$$(""); + } catch ($e$jscomp$15$$) { + $dbg_log$$("Could not disassemble: " + Array.from($buffer$jscomp$47$$).map($x$jscomp$105$$ => $h$$($x$jscomp$105$$, 2)).join(" ")); + } + }; + let $wabt$$; + $debug$$.dump_wasm = function($buffer$jscomp$48$$) { + if (void 0 === $wabt$$ && ($wabt$$ = "function" === typeof require ? require("./libwabt.js") : new window.WabtModule, void 0 === $wabt$$)) { + $dbg_log$$("Warning: Missing libwabt, wasm dump not available"); + return; + } + $buffer$jscomp$48$$ = $buffer$jscomp$48$$.slice(); + try { + var $module$jscomp$2$$ = $wabt$$.readWasm($buffer$jscomp$48$$, {readDebugNames:!1}); + $module$jscomp$2$$.generateNames(); + $module$jscomp$2$$.applyNames(); + const $result$jscomp$12$$ = $module$jscomp$2$$.toText({foldExprs:!0, inlineExport:!0}); + $dbg_log$$($result$jscomp$12$$); + } catch ($e$jscomp$16$$) { + var $blob$jscomp$inline_70$$ = new Blob([$buffer$jscomp$48$$]), $a$jscomp$inline_71$$ = document.createElement("a"); + $a$jscomp$inline_71$$.download = "failed.wasm"; + $a$jscomp$inline_71$$.href = window.URL.createObjectURL($blob$jscomp$inline_70$$); + $a$jscomp$inline_71$$.dataset.downloadurl = ["application/octet-stream", $a$jscomp$inline_71$$.download, $a$jscomp$inline_71$$.href].join(":"); + $a$jscomp$inline_71$$.click(); + window.URL.revokeObjectURL($a$jscomp$inline_71$$.src); + console.log($e$jscomp$16$$.toString()); + } finally { + $module$jscomp$2$$ && $module$jscomp$2$$.destroy(); + } + }; +}; +const $types$$ = DataView.prototype, $U8$$ = {size:1, get:$types$$.getUint8, set:$types$$.setUint8, }, $U16$$ = {size:2, get:$types$$.getUint16, set:$types$$.setUint16, }, $U32$$ = {size:4, get:$types$$.getUint32, set:$types$$.setUint32, }, $Header$$ = $create_struct$$([{magic:$U32$$, }, {class:$U8$$, }, {data:$U8$$, }, {version0:$U8$$, }, {osabi:$U8$$, }, {abiversion:$U8$$, }, {pad0:function($size$jscomp$40$$) { + return {size:$size$jscomp$40$$, get:() => -1, }; +}(7)}, {type:$U16$$, }, {machine:$U16$$, }, {version1:$U32$$, }, {entry:$U32$$, }, {phoff:$U32$$, }, {shoff:$U32$$, }, {flags:$U32$$, }, {ehsize:$U16$$, }, {phentsize:$U16$$, }, {phnum:$U16$$, }, {shentsize:$U16$$, }, {shnum:$U16$$, }, {shstrndx:$U16$$, }, ]); +console.assert(52 === $Header$$.reduce(($a$jscomp$5$$, $entry$jscomp$8$$) => $a$jscomp$5$$ + $entry$jscomp$8$$.size, 0)); +const $ProgramHeader$$ = $create_struct$$([{type:$U32$$, }, {offset:$U32$$, }, {vaddr:$U32$$, }, {paddr:$U32$$, }, {filesz:$U32$$, }, {memsz:$U32$$, }, {flags:$U32$$, }, {align:$U32$$, }, ]); +console.assert(32 === $ProgramHeader$$.reduce(($a$jscomp$6$$, $entry$jscomp$9$$) => $a$jscomp$6$$ + $entry$jscomp$9$$.size, 0)); +const $SectionHeader$$ = $create_struct$$([{name:$U32$$, }, {type:$U32$$, }, {flags:$U32$$, }, {addr:$U32$$, }, {offset:$U32$$, }, {size:$U32$$, }, {link:$U32$$, }, {info:$U32$$, }, {addralign:$U32$$, }, {entsize:$U32$$, }, ]); +console.assert(40 === $SectionHeader$$.reduce(($a$jscomp$7$$, $entry$jscomp$10$$) => $a$jscomp$7$$ + $entry$jscomp$10$$.size, 0)); +function $create_struct$$($struct$$) { + return $struct$$.map(function($entry$jscomp$11_type$jscomp$156$$) { + var $keys_name$jscomp$89$$ = Object.keys($entry$jscomp$11_type$jscomp$156$$); + console.assert(1 === $keys_name$jscomp$89$$.length); + $keys_name$jscomp$89$$ = $keys_name$jscomp$89$$[0]; + $entry$jscomp$11_type$jscomp$156$$ = $entry$jscomp$11_type$jscomp$156$$[$keys_name$jscomp$89$$]; + console.assert(0 < $entry$jscomp$11_type$jscomp$156$$.size); + return {name:$keys_name$jscomp$89$$, type:$entry$jscomp$11_type$jscomp$156$$, size:$entry$jscomp$11_type$jscomp$156$$.size, get:$entry$jscomp$11_type$jscomp$156$$.get, set:$entry$jscomp$11_type$jscomp$156$$.set, }; + }); +} +function $read_struct$$($view$jscomp$9$$, $Struct_value$jscomp$188$$) { + const $result$jscomp$13$$ = {}; + let $offset$jscomp$59$$ = 0; + for (const $entry$jscomp$12$$ of $Struct_value$jscomp$188$$) { + $Struct_value$jscomp$188$$ = $entry$jscomp$12$$.get.call($view$jscomp$9$$, $offset$jscomp$59$$, !0), console.assert(void 0 === $result$jscomp$13$$[$entry$jscomp$12$$.name]), $result$jscomp$13$$[$entry$jscomp$12$$.name] = $Struct_value$jscomp$188$$, $offset$jscomp$59$$ += $entry$jscomp$12$$.size; + } + return [$result$jscomp$13$$, $offset$jscomp$59$$]; +} +function $read_structs$$($view$jscomp$10$$, $Struct$jscomp$1$$, $count$jscomp$57$$) { + const $result$jscomp$14$$ = []; + let $offset$jscomp$60$$ = 0; + for (var $i$jscomp$87$$ = 0; $i$jscomp$87$$ < $count$jscomp$57$$; $i$jscomp$87$$++) { + const [$s$jscomp$7$$, $size$jscomp$41$$] = $read_struct$$(new DataView($view$jscomp$10$$.buffer, $view$jscomp$10$$.byteOffset + $offset$jscomp$60$$, void 0), $Struct$jscomp$1$$); + $result$jscomp$14$$.push($s$jscomp$7$$); + $offset$jscomp$60$$ += $size$jscomp$41$$; + } + return [$result$jscomp$14$$, $offset$jscomp$60$$]; +} +;function $load_kernel$$($data8$jscomp$inline_76_mem8$$, $bzimage_i$jscomp$inline_81_protected_mode_kernel$$, $checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$, $cmdline$jscomp$1_real_mode_kernel$$) { + $dbg_log$$("Trying to load kernel of size " + $bzimage_i$jscomp$inline_81_protected_mode_kernel$$.byteLength); + var $bzimage8_i$jscomp$88_ramdisk_size$$ = new Uint8Array($bzimage_i$jscomp$inline_81_protected_mode_kernel$$); + const $bzimage16$$ = new Uint16Array($bzimage_i$jscomp$inline_81_protected_mode_kernel$$); + var $bzimage32_checksum$jscomp$inline_80$$ = new Uint32Array($bzimage_i$jscomp$inline_81_protected_mode_kernel$$), $prot_mode_kernel_start_ramdisk_address$jscomp$1_setup_sects$$ = $bzimage8_i$jscomp$88_ramdisk_size$$[497] || 4, $checksum1_checksum2_protocol$jscomp$1$$ = $bzimage16$$[255]; + if (43605 !== $checksum1_checksum2_protocol$jscomp$1$$) { + $dbg_log$$("Bad checksum1: " + $h$$($checksum1_checksum2_protocol$jscomp$1$$)); + } else { + if ($checksum1_checksum2_protocol$jscomp$1$$ = $bzimage16$$[257] | $bzimage16$$[258] << 16, 1400005704 !== $checksum1_checksum2_protocol$jscomp$1$$) { + $dbg_log$$("Bad checksum2: " + $h$$($checksum1_checksum2_protocol$jscomp$1$$)); + } else { + $checksum1_checksum2_protocol$jscomp$1$$ = $bzimage16$$[259]; + $dbg_assert$$(514 <= $checksum1_checksum2_protocol$jscomp$1$$); + var $flags$jscomp$15$$ = $bzimage8_i$jscomp$88_ramdisk_size$$[529]; + $dbg_assert$$($flags$jscomp$15$$ & 1); + var $flags2$$ = $bzimage16$$[283], $initrd_addr_max$$ = $bzimage32_checksum$jscomp$inline_80$$[139], $kernel_alignment$$ = $bzimage32_checksum$jscomp$inline_80$$[140], $relocatable_kernel$$ = $bzimage8_i$jscomp$88_ramdisk_size$$[564], $min_alignment$$ = $bzimage8_i$jscomp$88_ramdisk_size$$[565], $cmdline_size$$ = 518 <= $checksum1_checksum2_protocol$jscomp$1$$ ? $bzimage32_checksum$jscomp$inline_80$$[142] : 255, $payload_offset$$ = $bzimage32_checksum$jscomp$inline_80$$[146], $payload_length$$ = + $bzimage32_checksum$jscomp$inline_80$$[147], $pref_address$$ = $bzimage32_checksum$jscomp$inline_80$$[150], $pref_address_high$$ = $bzimage32_checksum$jscomp$inline_80$$[151], $init_size$$ = $bzimage32_checksum$jscomp$inline_80$$[152]; + $dbg_log$$("kernel boot protocol version: " + $h$$($checksum1_checksum2_protocol$jscomp$1$$)); + $dbg_log$$("flags=" + $h$$($flags$jscomp$15$$) + " xflags=" + $h$$($flags2$$)); + $dbg_log$$("code32_start=" + $h$$($bzimage32_checksum$jscomp$inline_80$$[133])); + $dbg_log$$("initrd_addr_max=" + $h$$($initrd_addr_max$$)); + $dbg_log$$("kernel_alignment=" + $h$$($kernel_alignment$$)); + $dbg_log$$("relocatable=" + $relocatable_kernel$$); + $dbg_log$$("min_alignment=" + $h$$($min_alignment$$)); + $dbg_log$$("cmdline max=" + $h$$($cmdline_size$$)); + $dbg_log$$("payload offset=" + $h$$($payload_offset$$) + " size=" + $h$$($payload_length$$)); + $dbg_log$$("pref_address=" + $h$$($pref_address_high$$) + ":" + $h$$($pref_address$$)); + $dbg_log$$("init_size=" + $h$$($init_size$$)); + $bzimage8_i$jscomp$88_ramdisk_size$$[528] = 255; + $bzimage8_i$jscomp$88_ramdisk_size$$[529] = $flags$jscomp$15$$ & -97 | 128; + $bzimage16$$[274] = 56832; + $bzimage16$$[253] = 65535; + $dbg_log$$("heap_end_ptr=" + $h$$(56832)); + $cmdline$jscomp$1_real_mode_kernel$$ += "\x00"; + $dbg_assert$$($cmdline$jscomp$1_real_mode_kernel$$.length < $cmdline_size$$); + $dbg_log$$("cmd_line_ptr=" + $h$$(581632)); + $bzimage32_checksum$jscomp$inline_80$$[138] = 581632; + for ($bzimage8_i$jscomp$88_ramdisk_size$$ = 0; $bzimage8_i$jscomp$88_ramdisk_size$$ < $cmdline$jscomp$1_real_mode_kernel$$.length; $bzimage8_i$jscomp$88_ramdisk_size$$++) { + $data8$jscomp$inline_76_mem8$$[581632 + $bzimage8_i$jscomp$88_ramdisk_size$$] = $cmdline$jscomp$1_real_mode_kernel$$.charCodeAt($bzimage8_i$jscomp$88_ramdisk_size$$); + } + $prot_mode_kernel_start_ramdisk_address$jscomp$1_setup_sects$$ = 512 * ($prot_mode_kernel_start_ramdisk_address$jscomp$1_setup_sects$$ + 1); + $dbg_log$$("prot_mode_kernel_start=" + $h$$($prot_mode_kernel_start_ramdisk_address$jscomp$1_setup_sects$$)); + $cmdline$jscomp$1_real_mode_kernel$$ = new Uint8Array($bzimage_i$jscomp$inline_81_protected_mode_kernel$$, 0, $prot_mode_kernel_start_ramdisk_address$jscomp$1_setup_sects$$); + $bzimage_i$jscomp$inline_81_protected_mode_kernel$$ = new Uint8Array($bzimage_i$jscomp$inline_81_protected_mode_kernel$$, $prot_mode_kernel_start_ramdisk_address$jscomp$1_setup_sects$$); + $bzimage8_i$jscomp$88_ramdisk_size$$ = $prot_mode_kernel_start_ramdisk_address$jscomp$1_setup_sects$$ = 0; + $checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$ && ($prot_mode_kernel_start_ramdisk_address$jscomp$1_setup_sects$$ = 67108864, $bzimage8_i$jscomp$88_ramdisk_size$$ = $checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$.byteLength, $dbg_assert$$(1048576 + $bzimage_i$jscomp$inline_81_protected_mode_kernel$$.length < $prot_mode_kernel_start_ramdisk_address$jscomp$1_setup_sects$$), $data8$jscomp$inline_76_mem8$$.set(new Uint8Array($checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$), + $prot_mode_kernel_start_ramdisk_address$jscomp$1_setup_sects$$)); + $bzimage32_checksum$jscomp$inline_80$$[134] = $prot_mode_kernel_start_ramdisk_address$jscomp$1_setup_sects$$; + $bzimage32_checksum$jscomp$inline_80$$[135] = $bzimage8_i$jscomp$88_ramdisk_size$$; + $dbg_assert$$(655360 > 524288 + $cmdline$jscomp$1_real_mode_kernel$$.length); + $data8$jscomp$inline_76_mem8$$.set($cmdline$jscomp$1_real_mode_kernel$$, 524288); + $data8$jscomp$inline_76_mem8$$.set($bzimage_i$jscomp$inline_81_protected_mode_kernel$$, 1048576); + $data8$jscomp$inline_76_mem8$$ = new Uint8Array(512); + (new Uint16Array($data8$jscomp$inline_76_mem8$$.buffer))[0] = 43605; + $data8$jscomp$inline_76_mem8$$[2] = 1; + $checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$ = 3; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 250; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 184; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 32768; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 128; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 142; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 192; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 142; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 216; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 142; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 224; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 142; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 232; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 142; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 208; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 188; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 57344; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 224; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 234; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 0; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 0; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 32800; + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$++] = 128; + $dbg_assert$$(512 > $checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$); + $bzimage32_checksum$jscomp$inline_80$$ = $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$] = 0; + for ($bzimage_i$jscomp$inline_81_protected_mode_kernel$$ = 0; $bzimage_i$jscomp$inline_81_protected_mode_kernel$$ < $data8$jscomp$inline_76_mem8$$.length; $bzimage_i$jscomp$inline_81_protected_mode_kernel$$++) { + $bzimage32_checksum$jscomp$inline_80$$ += $data8$jscomp$inline_76_mem8$$[$bzimage_i$jscomp$inline_81_protected_mode_kernel$$]; + } + $data8$jscomp$inline_76_mem8$$[$checksum_index$jscomp$inline_79_i$jscomp$inline_78_initrd$jscomp$1$$] = -$bzimage32_checksum$jscomp$inline_80$$; + return {name:"genroms/kernel.bin", data:$data8$jscomp$inline_76_mem8$$, }; + } + } +} +;const $PLATFOM_WINDOWS$$ = "undefined" !== typeof window && 0 <= window.navigator.platform.toString().toLowerCase().search("win"); +function $KeyboardAdapter$$($bus$jscomp$13$$) { + function $may_handle$$($e$jscomp$17$$) { + return $e$jscomp$17$$.shiftKey && $e$jscomp$17$$.ctrlKey && (73 === $e$jscomp$17$$.keyCode || 74 === $e$jscomp$17$$.keyCode || 75 === $e$jscomp$17$$.keyCode) || !$keyboard$$.emu_enabled ? !1 : $e$jscomp$17$$.target ? $e$jscomp$17$$.target.classList.contains("phone_keyboard") || "INPUT" !== $e$jscomp$17$$.target.nodeName && "TEXTAREA" !== $e$jscomp$17$$.target.nodeName : !0; + } + function $keyup_handler$$($e$jscomp$19$$) { + !$e$jscomp$19$$.altKey && $keys_pressed$$[56] && $handle_code$$(56, !1); + return $handler$jscomp$14$$($e$jscomp$19$$, !1); + } + function $keydown_handler$$($e$jscomp$20$$) { + !$e$jscomp$20$$.altKey && $keys_pressed$$[56] && $handle_code$$(56, !1); + return $handler$jscomp$14$$($e$jscomp$20$$, !0); + } + function $blur_handler$$() { + for (var $keys$jscomp$1$$ = Object.keys($keys_pressed$$), $key$jscomp$38$$, $i$jscomp$91$$ = 0; $i$jscomp$91$$ < $keys$jscomp$1$$.length; $i$jscomp$91$$++) { + $key$jscomp$38$$ = +$keys$jscomp$1$$[$i$jscomp$91$$], $keys_pressed$$[$key$jscomp$38$$] && $handle_code$$($key$jscomp$38$$, !1); + } + $keys_pressed$$ = {}; + } + function $handler$jscomp$14$$($e$jscomp$22$$, $keydown$$) { + if ($keyboard$$.bus && $may_handle$$($e$jscomp$22$$)) { + $e$jscomp$22$$.preventDefault && $e$jscomp$22$$.preventDefault(); + if ($PLATFOM_WINDOWS$$ && ($deferred_event$$ && (clearTimeout($deferred_timeout_id$$), $e$jscomp$22$$.getModifierState && $e$jscomp$22$$.getModifierState("AltGraph") && $deferred_keydown$$ === $keydown$$ && "ControlLeft" === $deferred_event$$.code && "AltRight" === $e$jscomp$22$$.code || $handle_event$$($deferred_event$$, $deferred_keydown$$), $deferred_event$$ = null), "ControlLeft" === $e$jscomp$22$$.code)) { + return $deferred_event$$ = $e$jscomp$22$$, $deferred_keydown$$ = $keydown$$, $deferred_timeout_id$$ = setTimeout(() => { + $handle_event$$($deferred_event$$, $deferred_keydown$$); + $deferred_event$$ = null; + }, 10), !1; + } + $handle_event$$($e$jscomp$22$$, $keydown$$); + return !1; + } + } + function $handle_event$$($e$jscomp$23$$, $keydown$jscomp$1$$) { + a: { + if (void 0 !== $e$jscomp$23$$.code) { + var $code$jscomp$7_code$jscomp$inline_84$$ = $codemap$$[$e$jscomp$23$$.code]; + if (void 0 !== $code$jscomp$7_code$jscomp$inline_84$$) { + break a; + } + } + $code$jscomp$7_code$jscomp$inline_84$$ = $charmap$jscomp$1$$[$e$jscomp$23$$.keyCode]; + } + $code$jscomp$7_code$jscomp$inline_84$$ ? $handle_code$$($code$jscomp$7_code$jscomp$inline_84$$, $keydown$jscomp$1$$, $e$jscomp$23$$.repeat) : console.log("Missing char in map: keyCode=" + ($e$jscomp$23$$.keyCode || -1).toString(16) + " code=" + $e$jscomp$23$$.code); + } + function $handle_code$$($code$jscomp$8$$, $keydown$jscomp$2$$, $is_repeat$$) { + if ($keydown$jscomp$2$$) { + $keys_pressed$$[$code$jscomp$8$$] && !$is_repeat$$ && $handle_code$$($code$jscomp$8$$, !1); + } else { + if (!$keys_pressed$$[$code$jscomp$8$$]) { + return; + } + } + ($keys_pressed$$[$code$jscomp$8$$] = $keydown$jscomp$2$$) || ($code$jscomp$8$$ |= 128); + 255 < $code$jscomp$8$$ ? ($send_to_controller$$($code$jscomp$8$$ >> 8), $send_to_controller$$($code$jscomp$8$$ & 255)) : $send_to_controller$$($code$jscomp$8$$); + } + function $send_to_controller$$($code$jscomp$9$$) { + $keyboard$$.bus.send("keyboard-code", $code$jscomp$9$$); + } + var $keys_pressed$$ = {}, $deferred_event$$ = null, $deferred_keydown$$ = !1, $deferred_timeout_id$$ = 0, $keyboard$$ = this; + this.emu_enabled = !0; + var $charmap$jscomp$1$$ = new Uint16Array([0, 0, 0, 0, 0, 0, 0, 0, 14, 15, 0, 0, 0, 28, 0, 0, 42, 29, 56, 0, 58, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 57, 57417, 57425, 57423, 57415, 57419, 57416, 57421, 80, 0, 0, 0, 0, 82, 83, 0, 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 39, 0, 13, 0, 0, 0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 57435, 57436, 57437, 0, 0, 82, 79, 80, 81, 75, 76, 77, 71, 72, 73, 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 13, 51, 12, 52, 53, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 43, 27, 40, 0, 57435, 57400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]), $asciimap$$ = {8:8, 10:13, 32:32, 39:222, 44:188, 45:189, 46:190, 47:191, 48:48, 49:49, 50:50, 51:51, 52:52, 53:53, + 54:54, 55:55, 56:56, 57:57, 59:186, 61:187, 91:219, 92:220, 93:221, 96:192, 97:65, 98:66, 99:67, 100:68, 101:69, 102:70, 103:71, 104:72, 105:73, 106:74, 107:75, 108:76, 109:77, 110:78, 111:79, 112:80, 113:81, 114:82, 115:83, 116:84, 117:85, 118:86, 119:87, 120:88, 121:89, 122:90}, $asciimap_shift$$ = {33:49, 34:222, 35:51, 36:52, 37:53, 38:55, 40:57, 41:48, 42:56, 43:187, 58:186, 60:188, 62:190, 63:191, 64:50, 65:65, 66:66, 67:67, 68:68, 69:69, 70:70, 71:71, 72:72, 73:73, 74:74, 75:75, 76:76, 77:77, + 78:78, 79:79, 80:80, 81:81, 82:82, 83:83, 84:84, 85:85, 86:86, 87:87, 88:88, 89:89, 90:90, 94:54, 95:189, 123:219, 124:220, 125:221, 126:192}, $codemap$$ = {Escape:1, Digit1:2, Digit2:3, Digit3:4, Digit4:5, Digit5:6, Digit6:7, Digit7:8, Digit8:9, Digit9:10, Digit0:11, Minus:12, Equal:13, Backspace:14, Tab:15, KeyQ:16, KeyW:17, KeyE:18, KeyR:19, KeyT:20, KeyY:21, KeyU:22, KeyI:23, KeyO:24, KeyP:25, BracketLeft:26, BracketRight:27, Enter:28, ControlLeft:29, KeyA:30, KeyS:31, KeyD:32, KeyF:33, KeyG:34, + KeyH:35, KeyJ:36, KeyK:37, KeyL:38, Semicolon:39, Quote:40, Backquote:41, ShiftLeft:42, Backslash:43, KeyZ:44, KeyX:45, KeyC:46, KeyV:47, KeyB:48, KeyN:49, KeyM:50, Comma:51, Period:52, Slash:53, IntlRo:53, ShiftRight:54, NumpadMultiply:55, AltLeft:56, Space:57, CapsLock:58, F1:59, F2:60, F3:61, F4:62, F5:63, F6:64, F7:65, F8:66, F9:67, F10:68, NumLock:69, ScrollLock:70, Numpad7:71, Numpad8:72, Numpad9:73, NumpadSubtract:74, Numpad4:75, Numpad5:76, Numpad6:77, NumpadAdd:78, Numpad1:79, Numpad2:80, + Numpad3:81, Numpad0:82, NumpadDecimal:83, IntlBackslash:86, F11:87, F12:88, NumpadEnter:57372, ControlRight:57373, NumpadDivide:57397, AltRight:57400, Home:57415, ArrowUp:57416, PageUp:57417, ArrowLeft:57419, ArrowRight:57421, End:57423, ArrowDown:57424, PageDown:57425, Insert:57426, Delete:57427, OSLeft:57435, OSRight:57436, ContextMenu:57437, }; + this.bus = $bus$jscomp$13$$; + this.destroy = function() { + "undefined" !== typeof window && (window.removeEventListener("keyup", $keyup_handler$$, !1), window.removeEventListener("keydown", $keydown_handler$$, !1), window.removeEventListener("blur", $blur_handler$$, !1)); + }; + this.init = function() { + "undefined" !== typeof window && (this.destroy(), window.addEventListener("keyup", $keyup_handler$$, !1), window.addEventListener("keydown", $keydown_handler$$, !1), window.addEventListener("blur", $blur_handler$$, !1)); + }; + this.init(); + this.simulate_press = function($code$jscomp$4_ev$jscomp$1$$) { + $code$jscomp$4_ev$jscomp$1$$ = {keyCode:$code$jscomp$4_ev$jscomp$1$$}; + $handler$jscomp$14$$($code$jscomp$4_ev$jscomp$1$$, !0); + $handler$jscomp$14$$($code$jscomp$4_ev$jscomp$1$$, !1); + }; + this.simulate_char = function($chr$jscomp$5$$) { + var $code$jscomp$5$$ = $chr$jscomp$5$$.charCodeAt(0); + $code$jscomp$5$$ in $asciimap$$ ? this.simulate_press($asciimap$$[$code$jscomp$5$$]) : $code$jscomp$5$$ in $asciimap_shift$$ ? ($send_to_controller$$(42), this.simulate_press($asciimap_shift$$[$code$jscomp$5$$]), $send_to_controller$$(170)) : console.log("ascii -> keyCode not found: ", $code$jscomp$5$$, $chr$jscomp$5$$); + }; +} +;function $MouseAdapter$$($bus$jscomp$14$$, $screen_container$jscomp$1$$) { + function $may_handle$jscomp$1$$($child$jscomp$inline_206_e$jscomp$24$$) { + if (!$mouse$$.enabled || !$mouse$$.emu_enabled) { + return !1; + } + var $parent$jscomp$5$$ = $screen_container$jscomp$1$$ || document.body, $JSCompiler_temp$jscomp$188$$; + if (!($JSCompiler_temp$jscomp$188$$ = document.pointerLockElement)) { + a: { + for ($child$jscomp$inline_206_e$jscomp$24$$ = $child$jscomp$inline_206_e$jscomp$24$$.target; $child$jscomp$inline_206_e$jscomp$24$$.parentNode;) { + if ($child$jscomp$inline_206_e$jscomp$24$$ === $parent$jscomp$5$$) { + $JSCompiler_temp$jscomp$188$$ = !0; + break a; + } + $child$jscomp$inline_206_e$jscomp$24$$ = $child$jscomp$inline_206_e$jscomp$24$$.parentNode; + } + $JSCompiler_temp$jscomp$188$$ = !1; + } + } + return $JSCompiler_temp$jscomp$188$$; + } + function $touch_start_handler$$($e$jscomp$25_touch_touches$jscomp$2$$) { + $may_handle$jscomp$1$$($e$jscomp$25_touch_touches$jscomp$2$$) && ($e$jscomp$25_touch_touches$jscomp$2$$ = $e$jscomp$25_touch_touches$jscomp$2$$.changedTouches) && $e$jscomp$25_touch_touches$jscomp$2$$.length && ($e$jscomp$25_touch_touches$jscomp$2$$ = $e$jscomp$25_touch_touches$jscomp$2$$[$e$jscomp$25_touch_touches$jscomp$2$$.length - 1], $last_x$$ = $e$jscomp$25_touch_touches$jscomp$2$$.clientX, $last_y$$ = $e$jscomp$25_touch_touches$jscomp$2$$.clientY); + } + function $touch_end_handler$$() { + if ($left_down$$ || $middle_down$$ || $right_down$$) { + $mouse$$.bus.send("mouse-click", [!1, !1, !1]), $left_down$$ = $middle_down$$ = $right_down$$ = !1; + } + } + function $mousemove_handler$$($e$jscomp$27$$) { + if ($mouse$$.bus && $may_handle$jscomp$1$$($e$jscomp$27$$) && $mouse$$.is_running) { + var $delta_x$jscomp$2$$ = 0, $delta_y$jscomp$2$$ = 0, $touch$jscomp$1_touches$jscomp$3$$ = $e$jscomp$27$$.changedTouches; + $touch$jscomp$1_touches$jscomp$3$$ ? $touch$jscomp$1_touches$jscomp$3$$.length && ($touch$jscomp$1_touches$jscomp$3$$ = $touch$jscomp$1_touches$jscomp$3$$[$touch$jscomp$1_touches$jscomp$3$$.length - 1], $delta_x$jscomp$2$$ = $touch$jscomp$1_touches$jscomp$3$$.clientX - $last_x$$, $delta_y$jscomp$2$$ = $touch$jscomp$1_touches$jscomp$3$$.clientY - $last_y$$, $last_x$$ = $touch$jscomp$1_touches$jscomp$3$$.clientX, $last_y$$ = $touch$jscomp$1_touches$jscomp$3$$.clientY, $e$jscomp$27$$.preventDefault()) : + "number" === typeof $e$jscomp$27$$.movementX ? ($delta_x$jscomp$2$$ = $e$jscomp$27$$.movementX, $delta_y$jscomp$2$$ = $e$jscomp$27$$.movementY) : "number" === typeof $e$jscomp$27$$.webkitMovementX ? ($delta_x$jscomp$2$$ = $e$jscomp$27$$.webkitMovementX, $delta_y$jscomp$2$$ = $e$jscomp$27$$.webkitMovementY) : "number" === typeof $e$jscomp$27$$.mozMovementX ? ($delta_x$jscomp$2$$ = $e$jscomp$27$$.mozMovementX, $delta_y$jscomp$2$$ = $e$jscomp$27$$.mozMovementY) : ($delta_x$jscomp$2$$ = $e$jscomp$27$$.clientX - + $last_x$$, $delta_y$jscomp$2$$ = $e$jscomp$27$$.clientY - $last_y$$, $last_x$$ = $e$jscomp$27$$.clientX, $last_y$$ = $e$jscomp$27$$.clientY); + $mouse$$.bus.send("mouse-delta", [0.15 * $delta_x$jscomp$2$$, -(0.15 * $delta_y$jscomp$2$$)]); + $screen_container$jscomp$1$$ && $mouse$$.bus.send("mouse-absolute", [$e$jscomp$27$$.pageX - $screen_container$jscomp$1$$.offsetLeft, $e$jscomp$27$$.pageY - $screen_container$jscomp$1$$.offsetTop, $screen_container$jscomp$1$$.offsetWidth, $screen_container$jscomp$1$$.offsetHeight]); + } + } + function $mousedown_handler$$($e$jscomp$28$$) { + $may_handle$jscomp$1$$($e$jscomp$28$$) && $click_event$$($e$jscomp$28$$, !0); + } + function $mouseup_handler$$($e$jscomp$29$$) { + $may_handle$jscomp$1$$($e$jscomp$29$$) && $click_event$$($e$jscomp$29$$, !1); + } + function $click_event$$($e$jscomp$30$$, $down$$) { + $mouse$$.bus && (1 === $e$jscomp$30$$.which ? $left_down$$ = $down$$ : 2 === $e$jscomp$30$$.which ? $middle_down$$ = $down$$ : 3 === $e$jscomp$30$$.which ? $right_down$$ = $down$$ : $dbg_log$$("Unknown event.which: " + $e$jscomp$30$$.which), $mouse$$.bus.send("mouse-click", [$left_down$$, $middle_down$$, $right_down$$]), $e$jscomp$30$$.preventDefault()); + } + function $mousewheel_handler$$($e$jscomp$31$$) { + if ($may_handle$jscomp$1$$($e$jscomp$31$$)) { + var $delta_x$jscomp$3$$ = $e$jscomp$31$$.wheelDelta || -$e$jscomp$31$$.detail; + 0 > $delta_x$jscomp$3$$ ? $delta_x$jscomp$3$$ = -1 : 0 < $delta_x$jscomp$3$$ && ($delta_x$jscomp$3$$ = 1); + $mouse$$.bus.send("mouse-wheel", [$delta_x$jscomp$3$$, 0]); + $e$jscomp$31$$.preventDefault(); + } + } + var $left_down$$ = !1, $right_down$$ = !1, $middle_down$$ = !1, $last_x$$ = 0, $last_y$$ = 0, $mouse$$ = this; + this.enabled = !1; + this.emu_enabled = !0; + this.bus = $bus$jscomp$14$$; + this.bus.register("mouse-enable", function($enabled$jscomp$2$$) { + this.enabled = $enabled$jscomp$2$$; + }, this); + this.is_running = !1; + this.bus.register("emulator-stopped", function() { + this.is_running = !1; + }, this); + this.bus.register("emulator-started", function() { + this.is_running = !0; + }, this); + this.destroy = function() { + "undefined" !== typeof window && (window.removeEventListener("touchstart", $touch_start_handler$$, !1), window.removeEventListener("touchend", $touch_end_handler$$, !1), window.removeEventListener("touchmove", $mousemove_handler$$, !1), window.removeEventListener("mousemove", $mousemove_handler$$, !1), window.removeEventListener("mousedown", $mousedown_handler$$, !1), window.removeEventListener("mouseup", $mouseup_handler$$, !1), window.removeEventListener("wheel", $mousewheel_handler$$, {passive:!1})); + }; + this.init = function() { + "undefined" !== typeof window && (this.destroy(), window.addEventListener("touchstart", $touch_start_handler$$, !1), window.addEventListener("touchend", $touch_end_handler$$, !1), window.addEventListener("touchmove", $mousemove_handler$$, !1), window.addEventListener("mousemove", $mousemove_handler$$, !1), window.addEventListener("mousedown", $mousedown_handler$$, !1), window.addEventListener("mouseup", $mouseup_handler$$, !1), window.addEventListener("wheel", $mousewheel_handler$$, {passive:!1})); + }; + this.init(); +} +;function $SpeakerAdapter$$($bus$jscomp$15$$) { + if ("undefined" !== typeof window) { + if (window.AudioContext || window.webkitAudioContext) { + var $SpeakerDAC$$ = window.AudioWorklet ? $SpeakerWorkletDAC$$ : $SpeakerBufferSourceDAC$$; + this.bus = $bus$jscomp$15$$; + this.audio_context = window.AudioContext ? new AudioContext : new webkitAudioContext; + this.mixer = new $SpeakerMixer$$($bus$jscomp$15$$, this.audio_context); + this.pcspeaker = new $PCSpeaker$$($bus$jscomp$15$$, this.audio_context, this.mixer); + this.dac = new $SpeakerDAC$$($bus$jscomp$15$$, this.audio_context, this.mixer); + this.pcspeaker.start(); + $bus$jscomp$15$$.register("emulator-stopped", function() { + this.audio_context.suspend(); + }, this); + $bus$jscomp$15$$.register("emulator-started", function() { + this.audio_context.resume(); + }, this); + $bus$jscomp$15$$.register("speaker-confirm-initialized", function() { + $bus$jscomp$15$$.send("speaker-has-initialized"); + }, this); + $bus$jscomp$15$$.send("speaker-has-initialized"); + } else { + console.warn("Web browser doesn't support Web Audio API"); + } + } +} +$SpeakerAdapter$$.prototype.destroy = function() { + this.audio_context && this.audio_context.close(); + this.audio_context = null; + this.dac && this.dac.node_processor && this.dac.node_processor.port.close(); + this.dac = null; +}; +function $SpeakerMixer$$($bus$jscomp$16$$, $audio_context$$) { + function $create_gain_handler$$($audio_node$$) { + return function($decibels$jscomp$3$$) { + $audio_node$$.gain.setValueAtTime($decibels$jscomp$3$$, this.audio_context.currentTime); + }; + } + this.audio_context = $audio_context$$; + this.sources = new Map; + this.gain_right = this.gain_left = this.volume_right = this.volume_left = this.volume_both = 1; + this.node_treble_left = this.audio_context.createBiquadFilter(); + this.node_treble_right = this.audio_context.createBiquadFilter(); + this.node_treble_left.type = "highshelf"; + this.node_treble_right.type = "highshelf"; + this.node_treble_left.frequency.setValueAtTime(2000, this.audio_context.currentTime); + this.node_treble_right.frequency.setValueAtTime(2000, this.audio_context.currentTime); + this.node_bass_left = this.audio_context.createBiquadFilter(); + this.node_bass_right = this.audio_context.createBiquadFilter(); + this.node_bass_left.type = "lowshelf"; + this.node_bass_right.type = "lowshelf"; + this.node_bass_left.frequency.setValueAtTime(200, this.audio_context.currentTime); + this.node_bass_right.frequency.setValueAtTime(200, this.audio_context.currentTime); + this.node_gain_left = this.audio_context.createGain(); + this.node_gain_right = this.audio_context.createGain(); + this.node_merger = this.audio_context.createChannelMerger(2); + this.input_left = this.node_treble_left; + this.input_right = this.node_treble_right; + this.node_treble_left.connect(this.node_bass_left); + this.node_bass_left.connect(this.node_gain_left); + this.node_gain_left.connect(this.node_merger, 0, 0); + this.node_treble_right.connect(this.node_bass_right); + this.node_bass_right.connect(this.node_gain_right); + this.node_gain_right.connect(this.node_merger, 0, 1); + this.node_merger.connect(this.audio_context.destination); + $bus$jscomp$16$$.register("mixer-connect", function($data$jscomp$186$$) { + this.connect_source($data$jscomp$186$$[0], $data$jscomp$186$$[1]); + }, this); + $bus$jscomp$16$$.register("mixer-disconnect", function($data$jscomp$187$$) { + this.disconnect_source($data$jscomp$187$$[0], $data$jscomp$187$$[1]); + }, this); + $bus$jscomp$16$$.register("mixer-volume", function($data$jscomp$188_gain$$) { + var $source_id$jscomp$2$$ = $data$jscomp$188_gain$$[0], $channel$jscomp$22$$ = $data$jscomp$188_gain$$[1]; + $data$jscomp$188_gain$$ = Math.pow(10, $data$jscomp$188_gain$$[2] / 20); + var $source$jscomp$16$$ = 0 === $source_id$jscomp$2$$ ? this : this.sources.get($source_id$jscomp$2$$); + void 0 === $source$jscomp$16$$ ? $dbg_assert$$(!1, "Mixer set volume - cannot set volume for undefined source: " + $source_id$jscomp$2$$) : $source$jscomp$16$$.set_volume($data$jscomp$188_gain$$, $channel$jscomp$22$$); + }, this); + $bus$jscomp$16$$.register("mixer-gain-left", function($decibels$jscomp$1$$) { + this.gain_left = Math.pow(10, $decibels$jscomp$1$$ / 20); + this.update(); + }, this); + $bus$jscomp$16$$.register("mixer-gain-right", function($decibels$jscomp$2$$) { + this.gain_right = Math.pow(10, $decibels$jscomp$2$$ / 20); + this.update(); + }, this); + $bus$jscomp$16$$.register("mixer-treble-left", $create_gain_handler$$(this.node_treble_left), this); + $bus$jscomp$16$$.register("mixer-treble-right", $create_gain_handler$$(this.node_treble_right), this); + $bus$jscomp$16$$.register("mixer-bass-left", $create_gain_handler$$(this.node_bass_left), this); + $bus$jscomp$16$$.register("mixer-bass-right", $create_gain_handler$$(this.node_bass_right), this); +} +$SpeakerMixer$$.prototype.add_source = function($source$jscomp$17_source_node$$, $source_id$jscomp$3$$) { + $source$jscomp$17_source_node$$ = new $SpeakerMixerSource$$(this.audio_context, $source$jscomp$17_source_node$$, this.input_left, this.input_right); + $dbg_assert$$(!this.sources.has($source_id$jscomp$3$$), "Mixer add source - overwritting source: " + $source_id$jscomp$3$$); + this.sources.set($source_id$jscomp$3$$, $source$jscomp$17_source_node$$); + return $source$jscomp$17_source_node$$; +}; +$SpeakerMixer$$.prototype.connect_source = function($source_id$jscomp$4$$, $channel$jscomp$23$$) { + var $source$jscomp$18$$ = this.sources.get($source_id$jscomp$4$$); + void 0 === $source$jscomp$18$$ ? $dbg_assert$$(!1, "Mixer connect - cannot connect undefined source: " + $source_id$jscomp$4$$) : $source$jscomp$18$$.connect($channel$jscomp$23$$); +}; +$SpeakerMixer$$.prototype.disconnect_source = function($source_id$jscomp$5$$, $channel$jscomp$24$$) { + var $source$jscomp$19$$ = this.sources.get($source_id$jscomp$5$$); + void 0 === $source$jscomp$19$$ ? $dbg_assert$$(!1, "Mixer disconnect - cannot disconnect undefined source: " + $source_id$jscomp$5$$) : $source$jscomp$19$$.disconnect($channel$jscomp$24$$); +}; +$SpeakerMixer$$.prototype.set_volume = function($value$jscomp$189$$, $channel$jscomp$25$$) { + void 0 === $channel$jscomp$25$$ && ($channel$jscomp$25$$ = 2); + switch($channel$jscomp$25$$) { + case 0: + this.volume_left = $value$jscomp$189$$; + break; + case 1: + this.volume_right = $value$jscomp$189$$; + break; + case 2: + this.volume_both = $value$jscomp$189$$; + break; + default: + $dbg_assert$$(!1, "Mixer set master volume - unknown channel: " + $channel$jscomp$25$$); + return; + } + this.update(); +}; +$SpeakerMixer$$.prototype.update = function() { + var $net_gain_right$$ = this.volume_both * this.volume_right * this.gain_right; + this.node_gain_left.gain.setValueAtTime(this.volume_both * this.volume_left * this.gain_left, this.audio_context.currentTime); + this.node_gain_right.gain.setValueAtTime($net_gain_right$$, this.audio_context.currentTime); +}; +function $SpeakerMixerSource$$($audio_context$jscomp$1$$, $source_node$jscomp$1$$, $destination_left$$, $destination_right$$) { + this.audio_context = $audio_context$jscomp$1$$; + this.connected_right = this.connected_left = !0; + this.volume_right = this.volume_left = this.volume_both = this.gain_hidden = 1; + this.node_splitter = $audio_context$jscomp$1$$.createChannelSplitter(2); + this.node_gain_left = $audio_context$jscomp$1$$.createGain(); + this.node_gain_right = $audio_context$jscomp$1$$.createGain(); + $source_node$jscomp$1$$.connect(this.node_splitter); + this.node_splitter.connect(this.node_gain_left, 0); + this.node_gain_left.connect($destination_left$$); + this.node_splitter.connect(this.node_gain_right, 1); + this.node_gain_right.connect($destination_right$$); +} +$SpeakerMixerSource$$.prototype.update = function() { + var $net_gain_right$jscomp$1$$ = this.connected_right * this.gain_hidden * this.volume_both * this.volume_right; + this.node_gain_left.gain.setValueAtTime(this.connected_left * this.gain_hidden * this.volume_both * this.volume_left, this.audio_context.currentTime); + this.node_gain_right.gain.setValueAtTime($net_gain_right$jscomp$1$$, this.audio_context.currentTime); +}; +$SpeakerMixerSource$$.prototype.connect = function($channel$jscomp$26$$) { + var $both$$ = !$channel$jscomp$26$$ || 2 === $channel$jscomp$26$$; + if ($both$$ || 0 === $channel$jscomp$26$$) { + this.connected_left = !0; + } + if ($both$$ || 1 === $channel$jscomp$26$$) { + this.connected_right = !0; + } + this.update(); +}; +$SpeakerMixerSource$$.prototype.disconnect = function($channel$jscomp$27$$) { + var $both$jscomp$1$$ = !$channel$jscomp$27$$ || 2 === $channel$jscomp$27$$; + if ($both$jscomp$1$$ || 0 === $channel$jscomp$27$$) { + this.connected_left = !1; + } + if ($both$jscomp$1$$ || 1 === $channel$jscomp$27$$) { + this.connected_right = !1; + } + this.update(); +}; +$SpeakerMixerSource$$.prototype.set_volume = function($value$jscomp$190$$, $channel$jscomp$28$$) { + void 0 === $channel$jscomp$28$$ && ($channel$jscomp$28$$ = 2); + switch($channel$jscomp$28$$) { + case 0: + this.volume_left = $value$jscomp$190$$; + break; + case 1: + this.volume_right = $value$jscomp$190$$; + break; + case 2: + this.volume_both = $value$jscomp$190$$; + break; + default: + $dbg_assert$$(!1, "Mixer set volume - unknown channel: " + $channel$jscomp$28$$); + return; + } + this.update(); +}; +$SpeakerMixerSource$$.prototype.set_gain_hidden = function($value$jscomp$191$$) { + this.gain_hidden = $value$jscomp$191$$; +}; +function $PCSpeaker$$($bus$jscomp$17$$, $audio_context$jscomp$2$$, $mixer$$) { + this.node_oscillator = $audio_context$jscomp$2$$.createOscillator(); + this.node_oscillator.type = "square"; + this.node_oscillator.frequency.setValueAtTime(440, $audio_context$jscomp$2$$.currentTime); + this.mixer_connection = $mixer$$.add_source(this.node_oscillator, 1); + this.mixer_connection.disconnect(); + $bus$jscomp$17$$.register("pcspeaker-enable", function() { + $mixer$$.connect_source(1); + }, this); + $bus$jscomp$17$$.register("pcspeaker-disable", function() { + $mixer$$.disconnect_source(1); + }, this); + $bus$jscomp$17$$.register("pcspeaker-update", function($data$jscomp$189$$) { + var $counter_reload$$ = $data$jscomp$189$$[1], $frequency$$ = 0; + 3 === $data$jscomp$189$$[0] && ($frequency$$ = Math.min(1193181.6665999999 / $counter_reload$$, this.node_oscillator.frequency.maxValue), $frequency$$ = Math.max($frequency$$, 0)); + this.node_oscillator.frequency.setValueAtTime($frequency$$, $audio_context$jscomp$2$$.currentTime); + }, this); +} +$PCSpeaker$$.prototype.start = function() { + this.node_oscillator.start(); +}; +function $SpeakerWorkletDAC$$($bus$jscomp$18$$, $audio_context$jscomp$3_worklet_blob_worklet_code_worklet_string$$, $mixer$jscomp$1$$) { + this.bus = $bus$jscomp$18$$; + this.audio_context = $audio_context$jscomp$3_worklet_blob_worklet_code_worklet_string$$; + this.enabled = !1; + this.sampling_rate = 48000; + $audio_context$jscomp$3_worklet_blob_worklet_code_worklet_string$$ = function() { + function $sinc$$($x$jscomp$106$$) { + if (0 === $x$jscomp$106$$) { + return 1; + } + $x$jscomp$106$$ *= Math.PI; + return Math.sin($x$jscomp$106$$) / $x$jscomp$106$$; + } + function $DACProcessor$$() { + var $self$jscomp$1$$ = Reflect.construct(AudioWorkletProcessor, [], $DACProcessor$$); + $self$jscomp$1$$.kernel_size = 3; + $self$jscomp$1$$.queue_data = Array(1024); + $self$jscomp$1$$.queue_start = 0; + $self$jscomp$1$$.queue_end = 0; + $self$jscomp$1$$.queue_length = 0; + $self$jscomp$1$$.queue_size = $self$jscomp$1$$.queue_data.length; + $self$jscomp$1$$.queued_samples = 0; + $self$jscomp$1$$.source_buffer_previous = $EMPTY_BUFFER$$; + $self$jscomp$1$$.source_buffer_current = $EMPTY_BUFFER$$; + $self$jscomp$1$$.source_samples_per_destination = 1.0; + $self$jscomp$1$$.source_block_start = 0; + $self$jscomp$1$$.source_time = 0.0; + $self$jscomp$1$$.source_offset = 0; + $self$jscomp$1$$.port.onmessage = $event$jscomp$6$$ => { + switch($event$jscomp$6$$.data.type) { + case "queue": + $self$jscomp$1$$.queue_push($event$jscomp$6$$.data.value); + break; + case "sampling-rate": + $self$jscomp$1$$.source_samples_per_destination = $event$jscomp$6$$.data.value / sampleRate; + } + }; + return $self$jscomp$1$$; + } + var $EMPTY_BUFFER$$ = [new Float32Array(256), new Float32Array(256), ]; + Reflect.setPrototypeOf($DACProcessor$$.prototype, AudioWorkletProcessor.prototype); + Reflect.setPrototypeOf($DACProcessor$$, AudioWorkletProcessor); + $DACProcessor$$.prototype.process = $DACProcessor$$.prototype.process = function($i$jscomp$92_inputs$jscomp$1$$, $outputs$jscomp$1_samples_needed_per_block$$) { + for ($i$jscomp$92_inputs$jscomp$1$$ = 0; $i$jscomp$92_inputs$jscomp$1$$ < $outputs$jscomp$1_samples_needed_per_block$$[0][0].length; $i$jscomp$92_inputs$jscomp$1$$++) { + for (var $sum0$$ = 0, $sum1$$ = 0, $end$jscomp$25$$ = this.source_offset + this.kernel_size, $j$jscomp$10$$ = this.source_offset - this.kernel_size + 1; $j$jscomp$10$$ <= $end$jscomp$25$$; $j$jscomp$10$$++) { + var $convolute_index$$ = this.source_block_start + $j$jscomp$10$$; + $sum0$$ += this.get_sample($convolute_index$$, 0) * this.kernel(this.source_time - $j$jscomp$10$$); + $sum1$$ += this.get_sample($convolute_index$$, 1) * this.kernel(this.source_time - $j$jscomp$10$$); + } + if (isNaN($sum0$$) || isNaN($sum1$$)) { + $sum0$$ = $sum1$$ = 0, this.dbg_log("ERROR: NaN values! Ignoring for now."); + } + $outputs$jscomp$1_samples_needed_per_block$$[0][0][$i$jscomp$92_inputs$jscomp$1$$] = $sum0$$; + $outputs$jscomp$1_samples_needed_per_block$$[0][1][$i$jscomp$92_inputs$jscomp$1$$] = $sum1$$; + this.source_time += this.source_samples_per_destination; + this.source_offset = Math.floor(this.source_time); + } + $outputs$jscomp$1_samples_needed_per_block$$ = this.source_offset; + $outputs$jscomp$1_samples_needed_per_block$$ += this.kernel_size + 2; + this.source_time -= this.source_offset; + this.source_block_start += this.source_offset; + this.source_offset = 0; + this.ensure_enough_data($outputs$jscomp$1_samples_needed_per_block$$); + return !0; + }; + $DACProcessor$$.prototype.kernel = function($x$jscomp$107$$) { + return $sinc$$($x$jscomp$107$$) * $sinc$$($x$jscomp$107$$ / this.kernel_size); + }; + $DACProcessor$$.prototype.get_sample = function($index$jscomp$92$$, $channel$jscomp$29$$) { + return 0 > $index$jscomp$92$$ ? ($index$jscomp$92$$ += this.source_buffer_previous[0].length, this.source_buffer_previous[$channel$jscomp$29$$][$index$jscomp$92$$]) : this.source_buffer_current[$channel$jscomp$29$$][$index$jscomp$92$$]; + }; + $DACProcessor$$.prototype.ensure_enough_data = function($needed$jscomp$1$$) { + var $current_length$$ = this.source_buffer_current[0].length; + $current_length$$ - this.source_block_start < $needed$jscomp$1$$ && (this.prepare_next_buffer(), this.source_block_start -= $current_length$$); + }; + $DACProcessor$$.prototype.prepare_next_buffer = function() { + 256 > this.queued_samples && this.queue_length && this.dbg_log("Not enough samples - should not happen during midway of playback"); + this.source_buffer_previous = this.source_buffer_current; + this.source_buffer_current = this.queue_shift(); + var $new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$ = this.source_buffer_current[0].length; + if (256 > $new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$) { + for (var $new_big_buffer_pos_queue_pos$$ = this.queue_start, $buffer_count$$ = 0; 256 > $new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$ && $buffer_count$$ < this.queue_length;) { + $new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$ += this.queue_data[$new_big_buffer_pos_queue_pos$$][0].length, $new_big_buffer_pos_queue_pos$$ = $new_big_buffer_pos_queue_pos$$ + 1 & this.queue_size - 1, $buffer_count$$++; + } + $new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$ = Math.max($new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$, 256); + $new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$ = [new Float32Array($new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$), new Float32Array($new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$), ]; + $new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$[0].set(this.source_buffer_current[0]); + $new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$[1].set(this.source_buffer_current[1]); + $new_big_buffer_pos_queue_pos$$ = this.source_buffer_current[0].length; + for (var $i$jscomp$93$$ = 0; $i$jscomp$93$$ < $buffer_count$$; $i$jscomp$93$$++) { + var $small_buffer$$ = this.queue_shift(); + $new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$[0].set($small_buffer$$[0], $new_big_buffer_pos_queue_pos$$); + $new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$[1].set($small_buffer$$[1], $new_big_buffer_pos_queue_pos$$); + $new_big_buffer_pos_queue_pos$$ += $small_buffer$$[0].length; + } + this.source_buffer_current = $new_big_buffer_new_big_buffer_size_sample_count$jscomp$1$$; + } + this.pump(); + }; + $DACProcessor$$.prototype.pump = function() { + 1024 > this.queued_samples / this.source_samples_per_destination && this.port.postMessage({type:"pump", }); + }; + $DACProcessor$$.prototype.queue_push = function($item$jscomp$6$$) { + this.queue_length < this.queue_size && (this.queue_data[this.queue_end] = $item$jscomp$6$$, this.queue_end = this.queue_end + 1 & this.queue_size - 1, this.queue_length++, this.queued_samples += $item$jscomp$6$$[0].length, this.pump()); + }; + $DACProcessor$$.prototype.queue_shift = function() { + if (!this.queue_length) { + return $EMPTY_BUFFER$$; + } + var $item$jscomp$7$$ = this.queue_data[this.queue_start]; + this.queue_data[this.queue_start] = null; + this.queue_start = this.queue_start + 1 & this.queue_size - 1; + this.queue_length--; + this.queued_samples -= $item$jscomp$7$$[0].length; + return $item$jscomp$7$$; + }; + $DACProcessor$$.prototype.dbg_log = function($message$jscomp$31$$) { + this.port.postMessage({type:"debug-log", value:$message$jscomp$31$$, }); + }; + registerProcessor("dac-processor", $DACProcessor$$); + }.toString(); + var $worklet_code_start$$ = $audio_context$jscomp$3_worklet_blob_worklet_code_worklet_string$$.indexOf("{") + 1, $worklet_code_end$$ = $audio_context$jscomp$3_worklet_blob_worklet_code_worklet_string$$.lastIndexOf("}"); + $audio_context$jscomp$3_worklet_blob_worklet_code_worklet_string$$ = $audio_context$jscomp$3_worklet_blob_worklet_code_worklet_string$$.substring($worklet_code_start$$, $worklet_code_end$$); + $audio_context$jscomp$3_worklet_blob_worklet_code_worklet_string$$ = new Blob(["var DEBUG = true;\n" + $audio_context$jscomp$3_worklet_blob_worklet_code_worklet_string$$], {type:"application/javascript"}); + var $worklet_url$$ = URL.createObjectURL($audio_context$jscomp$3_worklet_blob_worklet_code_worklet_string$$); + this.node_processor = null; + this.node_output = this.audio_context.createGain(); + this.audio_context.audioWorklet.addModule($worklet_url$$).then(() => { + URL.revokeObjectURL($worklet_url$$); + this.node_processor = new AudioWorkletNode(this.audio_context, "dac-processor", {numberOfInputs:0, numberOfOutputs:1, outputChannelCount:[2], parameterData:{}, processorOptions:{}, }); + this.node_processor.port.postMessage({type:"sampling-rate", value:this.sampling_rate, }); + this.node_processor.port.onmessage = $event$jscomp$7$$ => { + switch($event$jscomp$7$$.data.type) { + case "pump": + this.pump(); + break; + case "debug-log": + $dbg_log$$("SpeakerWorkletDAC - Worklet: " + $event$jscomp$7$$.data.value); + } + }; + this.node_processor.connect(this.node_output); + }); + this.mixer_connection = $mixer$jscomp$1$$.add_source(this.node_output, 2); + this.mixer_connection.set_gain_hidden(3); + $bus$jscomp$18$$.register("dac-send-data", function($data$jscomp$190$$) { + this.queue($data$jscomp$190$$); + }, this); + $bus$jscomp$18$$.register("dac-enable", function() { + this.enabled = !0; + }, this); + $bus$jscomp$18$$.register("dac-disable", function() { + this.enabled = !1; + }, this); + $bus$jscomp$18$$.register("dac-tell-sampling-rate", function($rate$jscomp$2$$) { + $dbg_assert$$(0 < $rate$jscomp$2$$, "Sampling rate should be nonzero"); + this.sampling_rate = $rate$jscomp$2$$; + this.node_processor && this.node_processor.port.postMessage({type:"sampling-rate", value:$rate$jscomp$2$$, }); + }, this); + this.debugger = new $SpeakerDACDebugger$$(this.audio_context, this.node_output); +} +$SpeakerWorkletDAC$$.prototype.queue = function($data$jscomp$191$$) { + this.node_processor && (this.debugger.push_queued_data($data$jscomp$191$$), this.node_processor.port.postMessage({type:"queue", value:$data$jscomp$191$$, }, [$data$jscomp$191$$[0].buffer, $data$jscomp$191$$[1].buffer])); +}; +$SpeakerWorkletDAC$$.prototype.pump = function() { + this.enabled && this.bus.send("dac-request-data"); +}; +function $SpeakerBufferSourceDAC$$($bus$jscomp$19$$, $audio_context$jscomp$4$$, $mixer$jscomp$2$$) { + this.bus = $bus$jscomp$19$$; + this.audio_context = $audio_context$jscomp$4$$; + this.enabled = !1; + this.sampling_rate = 22050; + this.buffered_time = 0; + this.rate_ratio = 1; + this.node_lowpass = this.audio_context.createBiquadFilter(); + this.node_lowpass.type = "lowpass"; + this.node_output = this.node_lowpass; + this.mixer_connection = $mixer$jscomp$2$$.add_source(this.node_output, 2); + this.mixer_connection.set_gain_hidden(3); + $bus$jscomp$19$$.register("dac-send-data", function($data$jscomp$192$$) { + this.queue($data$jscomp$192$$); + }, this); + $bus$jscomp$19$$.register("dac-enable", function() { + this.enabled = !0; + this.pump(); + }, this); + $bus$jscomp$19$$.register("dac-disable", function() { + this.enabled = !1; + }, this); + $bus$jscomp$19$$.register("dac-tell-sampling-rate", function($rate$jscomp$3$$) { + $dbg_assert$$(0 < $rate$jscomp$3$$, "Sampling rate should be nonzero"); + this.sampling_rate = $rate$jscomp$3$$; + this.rate_ratio = Math.ceil(8000 / $rate$jscomp$3$$); + this.node_lowpass.frequency.setValueAtTime($rate$jscomp$3$$ / 2, this.audio_context.currentTime); + }, this); + this.debugger = new $SpeakerDACDebugger$$(this.audio_context, this.node_output); +} +$SpeakerBufferSourceDAC$$.prototype.queue = function($data$jscomp$193_source$jscomp$20$$) { + this.debugger.push_queued_data($data$jscomp$193_source$jscomp$20$$); + var $current_silence_duration_sample_count$jscomp$2$$ = $data$jscomp$193_source$jscomp$20$$[0].length, $block_duration$$ = $current_silence_duration_sample_count$jscomp$2$$ / this.sampling_rate; + if (1 < this.rate_ratio) { + var $buffer$jscomp$50_current_time_target_silence_duration$$ = this.audio_context.createBuffer(2, $current_silence_duration_sample_count$jscomp$2$$ * this.rate_ratio, this.sampling_rate * this.rate_ratio); + for (var $buffer_data0$$ = $buffer$jscomp$50_current_time_target_silence_duration$$.getChannelData(0), $buffer_data1$$ = $buffer$jscomp$50_current_time_target_silence_duration$$.getChannelData(1), $buffer_index$$ = 0, $i$jscomp$94$$ = 0; $i$jscomp$94$$ < $current_silence_duration_sample_count$jscomp$2$$; $i$jscomp$94$$++) { + for (var $j$jscomp$11$$ = 0; $j$jscomp$11$$ < this.rate_ratio; $j$jscomp$11$$++, $buffer_index$$++) { + $buffer_data0$$[$buffer_index$$] = $data$jscomp$193_source$jscomp$20$$[0][$i$jscomp$94$$], $buffer_data1$$[$buffer_index$$] = $data$jscomp$193_source$jscomp$20$$[1][$i$jscomp$94$$]; + } + } + } else { + $buffer$jscomp$50_current_time_target_silence_duration$$ = this.audio_context.createBuffer(2, $current_silence_duration_sample_count$jscomp$2$$, this.sampling_rate), $buffer$jscomp$50_current_time_target_silence_duration$$.copyToChannel ? ($buffer$jscomp$50_current_time_target_silence_duration$$.copyToChannel($data$jscomp$193_source$jscomp$20$$[0], 0), $buffer$jscomp$50_current_time_target_silence_duration$$.copyToChannel($data$jscomp$193_source$jscomp$20$$[1], 1)) : ($buffer$jscomp$50_current_time_target_silence_duration$$.getChannelData(0).set($data$jscomp$193_source$jscomp$20$$[0]), + $buffer$jscomp$50_current_time_target_silence_duration$$.getChannelData(1).set($data$jscomp$193_source$jscomp$20$$[1])); + } + $data$jscomp$193_source$jscomp$20$$ = this.audio_context.createBufferSource(); + $data$jscomp$193_source$jscomp$20$$.buffer = $buffer$jscomp$50_current_time_target_silence_duration$$; + $data$jscomp$193_source$jscomp$20$$.connect(this.node_lowpass); + $data$jscomp$193_source$jscomp$20$$.addEventListener("ended", this.pump.bind(this)); + $buffer$jscomp$50_current_time_target_silence_duration$$ = this.audio_context.currentTime; + if (this.buffered_time < $buffer$jscomp$50_current_time_target_silence_duration$$) { + for ($dbg_log$$("Speaker DAC - Creating/Recreating reserve - shouldn't occur frequently during playback"), this.buffered_time = $buffer$jscomp$50_current_time_target_silence_duration$$, $buffer$jscomp$50_current_time_target_silence_duration$$ = 0.2 - $block_duration$$, $current_silence_duration_sample_count$jscomp$2$$ = 0; $current_silence_duration_sample_count$jscomp$2$$ <= $buffer$jscomp$50_current_time_target_silence_duration$$;) { + $current_silence_duration_sample_count$jscomp$2$$ += $block_duration$$, this.buffered_time += $block_duration$$, setTimeout(() => this.pump(), 1000 * $current_silence_duration_sample_count$jscomp$2$$); + } + } + $data$jscomp$193_source$jscomp$20$$.start(this.buffered_time); + this.buffered_time += $block_duration$$; + setTimeout(() => this.pump(), 0); +}; +$SpeakerBufferSourceDAC$$.prototype.pump = function() { + this.enabled && (0.2 < this.buffered_time - this.audio_context.currentTime || this.bus.send("dac-request-data")); +}; +function $SpeakerDACDebugger$$($audio_context$jscomp$5$$, $source_node$jscomp$2$$) { + this.audio_context = $audio_context$jscomp$5$$; + this.node_source = $source_node$jscomp$2$$; + this.node_processor = null; + this.node_gain = this.audio_context.createGain(); + this.node_gain.gain.setValueAtTime(0, this.audio_context.currentTime); + this.node_gain.connect(this.audio_context.destination); + this.is_active = !1; + this.queued_history = []; + this.output_history = []; + this.queued = [[], []]; + this.output = [[], []]; +} +$SpeakerDACDebugger$$.prototype.start = function($duration_ms$$) { + this.is_active = !0; + this.queued = [[], []]; + this.output = [[], []]; + this.queued_history.push(this.queued); + this.output_history.push(this.output); + this.node_processor = this.audio_context.createScriptProcessor(1024, 2, 2); + this.node_processor.onaudioprocess = $event$jscomp$8$$ => { + this.output[0].push($event$jscomp$8$$.inputBuffer.getChannelData(0).slice()); + this.output[1].push($event$jscomp$8$$.inputBuffer.getChannelData(1).slice()); + }; + this.node_source.connect(this.node_processor); + this.node_processor.connect(this.node_gain); + setTimeout(() => { + this.stop(); + }, $duration_ms$$); +}; +$SpeakerDACDebugger$$.prototype.stop = function() { + this.is_active = !1; + this.node_source.disconnect(this.node_processor); + this.node_processor.disconnect(); + this.node_processor = null; +}; +$SpeakerDACDebugger$$.prototype.push_queued_data = function($data$jscomp$194$$) { + this.is_active && (this.queued[0].push($data$jscomp$194$$[0].slice()), this.queued[1].push($data$jscomp$194$$[1].slice())); +}; +$SpeakerDACDebugger$$.prototype.download_txt = function($history_id_txt$$, $channel$jscomp$30$$) { + $history_id_txt$$ = this.output_history[$history_id_txt$$][$channel$jscomp$30$$].map($v$jscomp$5$$ => $v$jscomp$5$$.join(" ")).join(" "); + $dump_file$$($history_id_txt$$, "dacdata.txt"); +}; +$SpeakerDACDebugger$$.prototype.download_csv = function($buffers$jscomp$5_history_id$jscomp$1$$) { + $buffers$jscomp$5_history_id$jscomp$1$$ = this.output_history[$buffers$jscomp$5_history_id$jscomp$1$$]; + for (var $csv_rows$$ = [], $buffer_id$$ = 0; $buffer_id$$ < $buffers$jscomp$5_history_id$jscomp$1$$[0].length; $buffer_id$$++) { + for (var $i$jscomp$95$$ = 0; $i$jscomp$95$$ < $buffers$jscomp$5_history_id$jscomp$1$$[0][$buffer_id$$].length; $i$jscomp$95$$++) { + $csv_rows$$.push(`${$buffers$jscomp$5_history_id$jscomp$1$$[0][$buffer_id$$][$i$jscomp$95$$]},${$buffers$jscomp$5_history_id$jscomp$1$$[1][$buffer_id$$][$i$jscomp$95$$]}`); + } + } + $dump_file$$($csv_rows$$.join("\n"), "dacdata.csv"); +}; +function $SerialAdapter$$($element$jscomp$8$$, $bus$jscomp$20$$) { + function $keypress_handler$$($e$jscomp$33$$) { + $serial$$.bus && $serial$$.enabled && ($serial$$.send_char($e$jscomp$33$$.which), $e$jscomp$33$$.preventDefault()); + } + function $keydown_handler$jscomp$1$$($e$jscomp$34$$) { + var $chr$jscomp$9$$ = $e$jscomp$34$$.which; + 8 === $chr$jscomp$9$$ ? ($serial$$.send_char(127), $e$jscomp$34$$.preventDefault()) : 9 === $chr$jscomp$9$$ && ($serial$$.send_char(9), $e$jscomp$34$$.preventDefault()); + } + function $paste_handler$$($e$jscomp$35$$) { + if ($serial$$.enabled) { + for (var $data$jscomp$195$$ = $e$jscomp$35$$.clipboardData.getData("text/plain"), $i$jscomp$96$$ = 0; $i$jscomp$96$$ < $data$jscomp$195$$.length; $i$jscomp$96$$++) { + $serial$$.send_char($data$jscomp$195$$.charCodeAt($i$jscomp$96$$)); + } + $e$jscomp$35$$.preventDefault(); + } + } + function $window_click_handler$$($e$jscomp$36$$) { + $e$jscomp$36$$.target !== $element$jscomp$8$$ && $element$jscomp$8$$.blur(); + } + var $serial$$ = this; + this.enabled = !0; + this.bus = $bus$jscomp$20$$; + this.text = ""; + this.text_new_line = !1; + this.last_update = 0; + this.bus.register("serial0-output-byte", function($byte$jscomp$2_chr$jscomp$6$$) { + $byte$jscomp$2_chr$jscomp$6$$ = String.fromCharCode($byte$jscomp$2_chr$jscomp$6$$); + this.show_char($byte$jscomp$2_chr$jscomp$6$$); + }, this); + this.destroy = function() { + $element$jscomp$8$$.removeEventListener("keypress", $keypress_handler$$, !1); + $element$jscomp$8$$.removeEventListener("keydown", $keydown_handler$jscomp$1$$, !1); + $element$jscomp$8$$.removeEventListener("paste", $paste_handler$$, !1); + window.removeEventListener("mousedown", $window_click_handler$$, !1); + }; + this.init = function() { + this.destroy(); + $element$jscomp$8$$.style.display = "block"; + $element$jscomp$8$$.addEventListener("keypress", $keypress_handler$$, !1); + $element$jscomp$8$$.addEventListener("keydown", $keydown_handler$jscomp$1$$, !1); + $element$jscomp$8$$.addEventListener("paste", $paste_handler$$, !1); + window.addEventListener("mousedown", $window_click_handler$$, !1); + }; + this.init(); + this.show_char = function($chr$jscomp$7$$) { + "\b" === $chr$jscomp$7$$ ? (this.text = this.text.slice(0, -1), this.update()) : "\r" !== $chr$jscomp$7$$ && (this.text += $chr$jscomp$7$$, "\n" === $chr$jscomp$7$$ && (this.text_new_line = !0), this.update()); + }; + this.update = function() { + var $now$jscomp$11$$ = Date.now(), $delta$jscomp$4$$ = $now$jscomp$11$$ - this.last_update; + 16 > $delta$jscomp$4$$ ? void 0 === this.update_timer && (this.update_timer = setTimeout(() => { + this.update_timer = void 0; + var $now$jscomp$12$$ = Date.now(); + $dbg_assert$$(15 <= $now$jscomp$12$$ - this.last_update); + this.last_update = $now$jscomp$12$$; + this.render(); + }, 16 - $delta$jscomp$4$$)) : (void 0 !== this.update_timer && (clearTimeout(this.update_timer), this.update_timer = void 0), this.last_update = $now$jscomp$11$$, this.render()); + }; + this.render = function() { + $element$jscomp$8$$.value = this.text; + this.text_new_line && (this.text_new_line = !1, $element$jscomp$8$$.scrollTop = 1e9); + }; + this.send_char = function($chr_code$$) { + $serial$$.bus && $serial$$.bus.send("serial0-input", $chr_code$$); + }; +} +function $SerialAdapterXtermJS$$($element$jscomp$9$$, $bus$jscomp$22$$) { + this.element = $element$jscomp$9$$; + if (window.Terminal) { + var $term$$ = this.term = new window.Terminal({logLevel:"off", }); + $term$$.write("This is the serial console. Whatever you type or paste here will be sent to COM1"); + var $on_data_disposable$$ = $term$$.onData(function($data$jscomp$196$$) { + for (let $i$jscomp$97$$ = 0; $i$jscomp$97$$ < $data$jscomp$196$$.length; $i$jscomp$97$$++) { + $bus$jscomp$22$$.send("serial0-input", $data$jscomp$196$$.charCodeAt($i$jscomp$97$$)); + } + }); + $bus$jscomp$22$$.register("serial0-output-byte", function($byte$jscomp$4$$) { + $term$$.write(Uint8Array.of($byte$jscomp$4$$)); + }, this); + this.destroy = function() { + $on_data_disposable$$.dispose(); + $term$$.dispose(); + }; + } +} +$SerialAdapterXtermJS$$.prototype.show = function() { + this.term && this.term.open(this.element); +}; +function $NetworkAdapter$$($url$jscomp$24$$, $bus$jscomp$23$$, $id$jscomp$10$$) { + this.bus = $bus$jscomp$23$$; + this.socket = void 0; + this.id = $id$jscomp$10$$ || 0; + this.send_queue = []; + this.url = $url$jscomp$24$$; + this.reconnect_interval = 10000; + this.last_connect_attempt = Date.now() - this.reconnect_interval; + this.send_queue_limit = 64; + this.bus.register("net" + this.id + "-send", function($data$jscomp$197$$) { + this.send($data$jscomp$197$$); + }, this); +} +$NetworkAdapter$$.prototype.handle_message = function($e$jscomp$37$$) { + this.bus && this.bus.send("net" + this.id + "-receive", new Uint8Array($e$jscomp$37$$.data)); +}; +$NetworkAdapter$$.prototype.handle_close = function() { + this.connect(); + setTimeout(this.connect.bind(this), this.reconnect_interval); +}; +$NetworkAdapter$$.prototype.handle_open = function() { + for (var $i$jscomp$98$$ = 0; $i$jscomp$98$$ < this.send_queue.length; $i$jscomp$98$$++) { + this.send(this.send_queue[$i$jscomp$98$$]); + } + this.send_queue = []; +}; +$NetworkAdapter$$.prototype.handle_error = function() { +}; +$NetworkAdapter$$.prototype.destroy = function() { + this.socket && this.socket.close(); +}; +$NetworkAdapter$$.prototype.connect = function() { + if ("undefined" !== typeof WebSocket) { + if (this.socket) { + var $now$jscomp$13_state$jscomp$53$$ = this.socket.readyState; + if (0 === $now$jscomp$13_state$jscomp$53$$ || 1 === $now$jscomp$13_state$jscomp$53$$) { + return; + } + } + $now$jscomp$13_state$jscomp$53$$ = Date.now(); + if (!(this.last_connect_attempt + this.reconnect_interval > $now$jscomp$13_state$jscomp$53$$)) { + this.last_connect_attempt = Date.now(); + try { + this.socket = new WebSocket(this.url); + } catch ($e$jscomp$41$$) { + console.error($e$jscomp$41$$); + return; + } + this.socket.binaryType = "arraybuffer"; + this.socket.onopen = this.handle_open.bind(this); + this.socket.onmessage = this.handle_message.bind(this); + this.socket.onclose = this.handle_close.bind(this); + this.socket.onerror = this.handle_error.bind(this); + } + } +}; +$NetworkAdapter$$.prototype.send = function($data$jscomp$198$$) { + this.socket && 1 === this.socket.readyState ? this.socket.send($data$jscomp$198$$) : (this.send_queue.push($data$jscomp$198$$), this.send_queue.length > 2 * this.send_queue_limit && (this.send_queue = this.send_queue.slice(-this.send_queue_limit)), this.connect()); +}; +$NetworkAdapter$$.prototype.change_proxy = function($url$jscomp$25$$) { + this.url = $url$jscomp$25$$; + this.socket && (this.socket.onclose = function() { + }, this.socket.onerror = function() { + }, this.socket.close(), this.socket = void 0); +}; +function $V86$$($options$jscomp$43$$) { + "number" === typeof $options$jscomp$43$$.log_level && ($LOG_LEVEL$$ = $options$jscomp$43$$.log_level); + this.cpu_is_running = !1; + this.cpu_exception_hook = function() { + }; + var $bus$jscomp$24_wasm_shared_funcs$$ = $Bus$$.create(); + this.bus = $bus$jscomp$24_wasm_shared_funcs$$[0]; + this.emulator_bus = $bus$jscomp$24_wasm_shared_funcs$$[1]; + var $cpu$jscomp$24$$, $wasm_memory$$; + const $wasm_table$$ = new WebAssembly.Table({element:"anyfunc", initial:1924}); + $bus$jscomp$24_wasm_shared_funcs$$ = {cpu_exception_hook:$n$jscomp$13$$ => this.cpu_exception_hook($n$jscomp$13$$), run_hardware_timers:function($a$jscomp$8$$, $t$jscomp$12$$) { + return $cpu$jscomp$24$$.run_hardware_timers($a$jscomp$8$$, $t$jscomp$12$$); + }, cpu_event_halt:() => { + this.emulator_bus.send("cpu-event-halt"); + }, abort:function() { + $dbg_assert$$(!1); + }, microtick:$v86$$.microtick, get_rand_int:function() { + return $v86util$$.get_rand_int(); + }, apic_acknowledge_irq:function() { + return $cpu$jscomp$24$$.devices.apic.acknowledge_irq(); + }, stop_idling:function() { + return $cpu$jscomp$24$$.stop_idling(); + }, io_port_read8:function($addr$jscomp$56$$) { + return $cpu$jscomp$24$$.io.port_read8($addr$jscomp$56$$); + }, io_port_read16:function($addr$jscomp$57$$) { + return $cpu$jscomp$24$$.io.port_read16($addr$jscomp$57$$); + }, io_port_read32:function($addr$jscomp$58$$) { + return $cpu$jscomp$24$$.io.port_read32($addr$jscomp$58$$); + }, io_port_write8:function($addr$jscomp$59$$, $value$jscomp$192$$) { + $cpu$jscomp$24$$.io.port_write8($addr$jscomp$59$$, $value$jscomp$192$$); + }, io_port_write16:function($addr$jscomp$60$$, $value$jscomp$193$$) { + $cpu$jscomp$24$$.io.port_write16($addr$jscomp$60$$, $value$jscomp$193$$); + }, io_port_write32:function($addr$jscomp$61$$, $value$jscomp$194$$) { + $cpu$jscomp$24$$.io.port_write32($addr$jscomp$61$$, $value$jscomp$194$$); + }, mmap_read8:function($addr$jscomp$62$$) { + return $cpu$jscomp$24$$.mmap_read8($addr$jscomp$62$$); + }, mmap_read16:function($addr$jscomp$63$$) { + return $cpu$jscomp$24$$.mmap_read16($addr$jscomp$63$$); + }, mmap_read32:function($addr$jscomp$64$$) { + return $cpu$jscomp$24$$.mmap_read32($addr$jscomp$64$$); + }, mmap_write8:function($addr$jscomp$65$$, $value$jscomp$195$$) { + $cpu$jscomp$24$$.mmap_write8($addr$jscomp$65$$, $value$jscomp$195$$); + }, mmap_write16:function($addr$jscomp$66$$, $value$jscomp$196$$) { + $cpu$jscomp$24$$.mmap_write16($addr$jscomp$66$$, $value$jscomp$196$$); + }, mmap_write32:function($addr$jscomp$67$$, $value$jscomp$197$$) { + $cpu$jscomp$24$$.mmap_write32($addr$jscomp$67$$, $value$jscomp$197$$); + }, mmap_write64:function($addr$jscomp$68$$, $value0$jscomp$2$$, $value1$jscomp$9$$) { + $cpu$jscomp$24$$.mmap_write64($addr$jscomp$68$$, $value0$jscomp$2$$, $value1$jscomp$9$$); + }, mmap_write128:function($addr$jscomp$69$$, $value0$jscomp$3$$, $value1$jscomp$10$$, $value2$jscomp$8$$, $value3$jscomp$5$$) { + $cpu$jscomp$24$$.mmap_write128($addr$jscomp$69$$, $value0$jscomp$3$$, $value1$jscomp$10$$, $value2$jscomp$8$$, $value3$jscomp$5$$); + }, log_from_wasm:function($offset$jscomp$62_str$jscomp$9$$, $len$jscomp$19$$) { + $offset$jscomp$62_str$jscomp$9$$ = $v86util$$.read_sized_string_from_mem($wasm_memory$$, $offset$jscomp$62_str$jscomp$9$$, $len$jscomp$19$$); + $dbg_log$$($offset$jscomp$62_str$jscomp$9$$, 2); + }, console_log_from_wasm:function($offset$jscomp$63_str$jscomp$10$$, $len$jscomp$20$$) { + $offset$jscomp$63_str$jscomp$10$$ = $v86util$$.read_sized_string_from_mem($wasm_memory$$, $offset$jscomp$63_str$jscomp$10$$, $len$jscomp$20$$); + console.error($offset$jscomp$63_str$jscomp$10$$); + }, dbg_trace_from_wasm:function() { + $dbg_log$$(Error().stack, 2); + }, codegen_finalize:($wasm_table_index$jscomp$1$$, $start$jscomp$47$$, $state_flags$jscomp$1$$, $ptr$jscomp$5$$, $len$jscomp$21$$) => { + $cpu$jscomp$24$$.codegen_finalize($wasm_table_index$jscomp$1$$, $start$jscomp$47$$, $state_flags$jscomp$1$$, $ptr$jscomp$5$$, $len$jscomp$21$$); + }, jit_clear_func:$wasm_table_index$jscomp$2$$ => $cpu$jscomp$24$$.jit_clear_func($wasm_table_index$jscomp$2$$), jit_clear_all_funcs:() => $cpu$jscomp$24$$.jit_clear_all_funcs(), __indirect_function_table:$wasm_table$$, }; + let $wasm_fn$$ = $options$jscomp$43$$.wasm_fn; + $wasm_fn$$ || ($wasm_fn$$ = $env$$ => new Promise($resolve$$ => { + let $v86_bin$$ = "v86-debug.wasm", $v86_bin_fallback$$ = "v86-fallback.wasm"; + if ($options$jscomp$43$$.wasm_path) { + $v86_bin$$ = $options$jscomp$43$$.wasm_path; + const $slash$$ = $v86_bin$$.lastIndexOf("/"); + $v86_bin_fallback$$ = (-1 === $slash$$ ? "" : $v86_bin$$.substr(0, $slash$$)) + "/" + $v86_bin_fallback$$; + } else { + "undefined" === typeof window && "string" === typeof __dirname ? ($v86_bin$$ = __dirname + "/" + $v86_bin$$, $v86_bin_fallback$$ = __dirname + "/" + $v86_bin_fallback$$) : ($v86_bin$$ = "build/" + $v86_bin$$, $v86_bin_fallback$$ = "build/" + $v86_bin_fallback$$); + } + $v86util$$.load_file($v86_bin$$, {done:async $bytes$jscomp$4$$ => { + try { + const {instance:$instance$$} = await WebAssembly.instantiate($bytes$jscomp$4$$, $env$$); + this.wasm_source = $bytes$jscomp$4$$; + $resolve$$($instance$$.exports); + } catch ($err$jscomp$8$$) { + $v86util$$.load_file($v86_bin_fallback$$, {done:async $bytes$jscomp$5$$ => { + const {instance:$instance$jscomp$1$$} = await WebAssembly.instantiate($bytes$jscomp$5$$, $env$$); + this.wasm_source = $bytes$jscomp$5$$; + $resolve$$($instance$jscomp$1$$.exports); + }, }); + } + }, progress:$e$jscomp$42$$ => { + this.emulator_bus.send("download-progress", {file_index:0, file_count:1, file_name:$v86_bin$$, lengthComputable:$e$jscomp$42$$.lengthComputable, total:$e$jscomp$42$$.total, loaded:$e$jscomp$42$$.loaded, }); + }}); + })); + $wasm_fn$$({env:$bus$jscomp$24_wasm_shared_funcs$$}).then($emulator_exports$$ => { + $wasm_memory$$ = $emulator_exports$$.memory; + $emulator_exports$$.rust_init(); + $emulator_exports$$ = this.v86 = new $v86$$(this.emulator_bus, {exports:$emulator_exports$$, wasm_table:$wasm_table$$}); + $cpu$jscomp$24$$ = $emulator_exports$$.cpu; + this.continue_init($emulator_exports$$, $options$jscomp$43$$); + }); + this.zstd_worker = null; + this.zstd_worker_request_id = 0; +} +$V86$$.prototype.continue_init = async function($emulator$jscomp$1$$, $options$jscomp$44$$) { + function $put_on_settings$$($name$jscomp$90$$, $buffer$jscomp$51$$) { + switch($name$jscomp$90$$) { + case "hda": + $settings$jscomp$3$$.hda = this.disk_images.hda = $buffer$jscomp$51$$; + break; + case "hdb": + $settings$jscomp$3$$.hdb = this.disk_images.hdb = $buffer$jscomp$51$$; + break; + case "cdrom": + $settings$jscomp$3$$.cdrom = this.disk_images.cdrom = $buffer$jscomp$51$$; + break; + case "fda": + $settings$jscomp$3$$.fda = this.disk_images.fda = $buffer$jscomp$51$$; + break; + case "fdb": + $settings$jscomp$3$$.fdb = this.disk_images.fdb = $buffer$jscomp$51$$; + break; + case "multiboot": + $settings$jscomp$3$$.multiboot = this.disk_images.multiboot = $buffer$jscomp$51$$.buffer; + break; + case "bzimage": + $settings$jscomp$3$$.bzimage = this.disk_images.bzimage = $buffer$jscomp$51$$.buffer; + break; + case "initrd": + $settings$jscomp$3$$.initrd = this.disk_images.initrd = $buffer$jscomp$51$$.buffer; + break; + case "bios": + $settings$jscomp$3$$.bios = $buffer$jscomp$51$$.buffer; + break; + case "vga_bios": + $settings$jscomp$3$$.vga_bios = $buffer$jscomp$51$$.buffer; + break; + case "initial_state": + $settings$jscomp$3$$.initial_state = $buffer$jscomp$51$$.buffer; + break; + case "fs9p_json": + $settings$jscomp$3$$.fs9p_json = $buffer$jscomp$51$$; + break; + default: + $dbg_assert$$(!1, $name$jscomp$90$$); + } + } + async function $done$jscomp$3$$() { + if ($settings$jscomp$3$$.fs9p && $settings$jscomp$3$$.fs9p_json) { + if ($settings$jscomp$3$$.initial_state) { + $dbg_log$$("Filesystem basefs ignored: Overridden by state image"); + } else { + if ($settings$jscomp$3$$.fs9p.load_from_json($settings$jscomp$3$$.fs9p_json), $options$jscomp$44$$.bzimage_initrd_from_filesystem) { + const {bzimage_path:$bzimage_path$$, initrd_path:$initrd_path$$} = this.get_bzimage_initrd_from_filesystem($settings$jscomp$3$$.fs9p); + $dbg_log$$("Found bzimage: " + $bzimage_path$$ + " and initrd: " + $initrd_path$$); + const [$initrd$jscomp$2$$, $bzimage$jscomp$1$$] = await Promise.all([$settings$jscomp$3$$.fs9p.read_file($initrd_path$$), $settings$jscomp$3$$.fs9p.read_file($bzimage_path$$), ]); + $put_on_settings$$.call(this, "initrd", new $v86util$$.SyncBuffer($initrd$jscomp$2$$.buffer)); + $put_on_settings$$.call(this, "bzimage", new $v86util$$.SyncBuffer($bzimage$jscomp$1$$.buffer)); + } + } + } else { + $dbg_assert$$(!$options$jscomp$44$$.bzimage_initrd_from_filesystem || $settings$jscomp$3$$.initial_state, "bzimage_initrd_from_filesystem: Requires a filesystem"); + } + this.serial_adapter && this.serial_adapter.show && this.serial_adapter.show(); + this.v86.init($settings$jscomp$3$$); + $settings$jscomp$3$$.initial_state && ($emulator$jscomp$1$$.restore_state($settings$jscomp$3$$.initial_state), $settings$jscomp$3$$.initial_state = void 0); + $options$jscomp$44$$.autostart && this.v86.run(); + this.emulator_bus.send("emulator-loaded"); + } + this.bus.register("emulator-stopped", function() { + this.cpu_is_running = !1; + this.screen_adapter.pause(); + }, this); + this.bus.register("emulator-started", function() { + this.cpu_is_running = !0; + this.screen_adapter.continue(); + }, this); + var $settings$jscomp$3$$ = {}; + this.disk_images = {fda:void 0, fdb:void 0, hda:void 0, hdb:void 0, cdrom:void 0, }; + var $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$ = $options$jscomp$44$$.boot_order ? $options$jscomp$44$$.boot_order : $options$jscomp$44$$.fda ? 801 : $options$jscomp$44$$.hda ? 786 : 291; + $settings$jscomp$3$$.acpi = $options$jscomp$44$$.acpi; + $settings$jscomp$3$$.disable_jit = $options$jscomp$44$$.disable_jit; + $settings$jscomp$3$$.load_devices = !0; + $settings$jscomp$3$$.memory_size = $options$jscomp$44$$.memory_size || 67108864; + $settings$jscomp$3$$.vga_memory_size = $options$jscomp$44$$.vga_memory_size || 8388608; + $settings$jscomp$3$$.boot_order = $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$; + $settings$jscomp$3$$.fastboot = $options$jscomp$44$$.fastboot || !1; + $settings$jscomp$3$$.fda = void 0; + $settings$jscomp$3$$.fdb = void 0; + $settings$jscomp$3$$.uart1 = $options$jscomp$44$$.uart1; + $settings$jscomp$3$$.uart2 = $options$jscomp$44$$.uart2; + $settings$jscomp$3$$.uart3 = $options$jscomp$44$$.uart3; + $settings$jscomp$3$$.cmdline = $options$jscomp$44$$.cmdline; + $settings$jscomp$3$$.preserve_mac_from_state_image = $options$jscomp$44$$.preserve_mac_from_state_image; + $settings$jscomp$3$$.mac_address_translation = $options$jscomp$44$$.mac_address_translation; + $settings$jscomp$3$$.cpuid_level = $options$jscomp$44$$.cpuid_level; + $settings$jscomp$3$$.virtio_console = $options$jscomp$44$$.virtio_console; + $settings$jscomp$3$$.virtio_net = $options$jscomp$44$$.virtio_net; + $settings$jscomp$3$$.screen_options = $options$jscomp$44$$.screen_options; + if ($add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$ = $options$jscomp$44$$.network_relay_url || $options$jscomp$44$$.net_device && $options$jscomp$44$$.net_device.relay_url) { + "fetch" === $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$ ? this.network_adapter = new $FetchNetworkAdapter$$(this.bus) : $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$.startsWith("wisp://") || $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$.startsWith("wisps://") ? this.network_adapter = new $WispNetworkAdapter$$($add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$, this.bus, $options$jscomp$44$$) : this.network_adapter = new $NetworkAdapter$$($add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$, + this.bus); + } + $settings$jscomp$3$$.net_device = $options$jscomp$44$$.net_device || {type:"ne2k"}; + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$ = $options$jscomp$44$$.screen || {}; + $options$jscomp$44$$.screen_container && ($add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$.container = $options$jscomp$44$$.screen_container); + $options$jscomp$44$$.disable_keyboard || (this.keyboard_adapter = new $KeyboardAdapter$$(this.bus)); + $options$jscomp$44$$.disable_mouse || (this.mouse_adapter = new $MouseAdapter$$(this.bus, $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$.container)); + this.screen_adapter = $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$.container ? new $ScreenAdapter$$($add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$, () => this.v86.cpu.devices.vga && this.v86.cpu.devices.vga.screen_fill_buffer()) : new $DummyScreenAdapter$$; + $settings$jscomp$3$$.screen = this.screen_adapter; + $settings$jscomp$3$$.screen_options = $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$; + $options$jscomp$44$$.serial_container && (this.serial_adapter = new $SerialAdapter$$($options$jscomp$44$$.serial_container, this.bus)); + $options$jscomp$44$$.serial_container_xtermjs && (this.serial_adapter = new $SerialAdapterXtermJS$$($options$jscomp$44$$.serial_container_xtermjs, this.bus)); + $options$jscomp$44$$.disable_speaker || (this.speaker_adapter = new $SpeakerAdapter$$(this.bus)); + var $files_to_load$$ = []; + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$ = ($name$jscomp$91$$, $file$jscomp$3$$) => { + if ($file$jscomp$3$$) { + if ($file$jscomp$3$$.get && $file$jscomp$3$$.set && $file$jscomp$3$$.load) { + $files_to_load$$.push({name:$name$jscomp$91$$, loadable:$file$jscomp$3$$, }); + } else { + if ("bios" === $name$jscomp$91$$ || "vga_bios" === $name$jscomp$91$$ || "initial_state" === $name$jscomp$91$$ || "multiboot" === $name$jscomp$91$$ || "bzimage" === $name$jscomp$91$$ || "initrd" === $name$jscomp$91$$) { + $file$jscomp$3$$.async = !1; + } + if ("fda" === $name$jscomp$91$$ || "fdb" === $name$jscomp$91$$) { + $file$jscomp$3$$.async = !1; + } + $file$jscomp$3$$.url && !$file$jscomp$3$$.async ? $files_to_load$$.push({name:$name$jscomp$91$$, url:$file$jscomp$3$$.url, size:$file$jscomp$3$$.size, }) : $files_to_load$$.push({name:$name$jscomp$91$$, loadable:$v86util$$.buffer_from_object($file$jscomp$3$$, this.zstd_decompress_worker.bind(this)), }); + } + } + }; + $options$jscomp$44$$.state && console.warn("Warning: Unknown option 'state'. Did you mean 'initial_state'?"); + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$("bios", $options$jscomp$44$$.bios); + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$("vga_bios", $options$jscomp$44$$.vga_bios); + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$("cdrom", $options$jscomp$44$$.cdrom); + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$("hda", $options$jscomp$44$$.hda); + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$("hdb", $options$jscomp$44$$.hdb); + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$("fda", $options$jscomp$44$$.fda); + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$("fdb", $options$jscomp$44$$.fdb); + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$("initial_state", $options$jscomp$44$$.initial_state); + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$("multiboot", $options$jscomp$44$$.multiboot); + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$("bzimage", $options$jscomp$44$$.bzimage); + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$("initrd", $options$jscomp$44$$.initrd); + if ($options$jscomp$44$$.filesystem) { + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$ = $options$jscomp$44$$.filesystem.basefs; + var $base_url$$ = $options$jscomp$44$$.filesystem.baseurl; + let $file_storage$$ = new $MemoryFileStorage$$; + $base_url$$ && ($file_storage$$ = new $ServerFileStorageWrapper$$($file_storage$$, $base_url$$)); + $settings$jscomp$3$$.fs9p = this.fs9p = new $FS$$($file_storage$$); + if ($add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$) { + $dbg_assert$$($base_url$$, "Filesystem: baseurl must be specified"); + if ("object" === typeof $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$) { + var $size$jscomp$42$$ = $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$.size; + $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$ = $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$.url; + } + $dbg_assert$$("string" === typeof $add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$); + $files_to_load$$.push({name:"fs9p_json", url:$add_file_boot_order$jscomp$1_fs_url_relay_url_screen_options$$, size:$size$jscomp$42$$, as_json:!0, }); + } + } + var $starter$$ = this, $total$jscomp$1$$ = $files_to_load$$.length, $cont$$ = function($index$jscomp$93$$) { + if ($index$jscomp$93$$ === $total$jscomp$1$$) { + setTimeout($done$jscomp$3$$.bind(this), 0); + } else { + var $f$jscomp$7$$ = $files_to_load$$[$index$jscomp$93$$]; + $f$jscomp$7$$.loadable ? ($f$jscomp$7$$.loadable.onload = function() { + $put_on_settings$$.call(this, $f$jscomp$7$$.name, $f$jscomp$7$$.loadable); + $cont$$($index$jscomp$93$$ + 1); + }.bind(this), $f$jscomp$7$$.loadable.load()) : $v86util$$.load_file($f$jscomp$7$$.url, {done:function($result$jscomp$15$$) { + $f$jscomp$7$$.url.endsWith(".zst") && "initial_state" !== $f$jscomp$7$$.name && ($dbg_assert$$($f$jscomp$7$$.size, "A size must be provided for compressed images"), $result$jscomp$15$$ = this.zstd_decompress($f$jscomp$7$$.size, new Uint8Array($result$jscomp$15$$))); + $put_on_settings$$.call(this, $f$jscomp$7$$.name, $f$jscomp$7$$.as_json ? $result$jscomp$15$$ : new $v86util$$.SyncBuffer($result$jscomp$15$$)); + $cont$$($index$jscomp$93$$ + 1); + }.bind(this), progress:function($e$jscomp$44$$) { + 200 === $e$jscomp$44$$.target.status ? $starter$$.emulator_bus.send("download-progress", {file_index:$index$jscomp$93$$, file_count:$total$jscomp$1$$, file_name:$f$jscomp$7$$.url, lengthComputable:$e$jscomp$44$$.lengthComputable, total:$e$jscomp$44$$.total || $f$jscomp$7$$.size, loaded:$e$jscomp$44$$.loaded, }) : $starter$$.emulator_bus.send("download-error", {file_index:$index$jscomp$93$$, file_count:$total$jscomp$1$$, file_name:$f$jscomp$7$$.url, request:$e$jscomp$44$$.target, }); + }, as_json:$f$jscomp$7$$.as_json, }); + } + }.bind(this); + $cont$$(0); +}; +$V86$$.prototype.zstd_decompress = function($decompressed_size$$, $ptr$jscomp$6_src$jscomp$4$$) { + const $cpu$jscomp$25$$ = this.v86.cpu; + $dbg_assert$$(!this.zstd_context); + this.zstd_context = $cpu$jscomp$25$$.zstd_create_ctx($ptr$jscomp$6_src$jscomp$4$$.length); + (new Uint8Array($cpu$jscomp$25$$.wasm_memory.buffer)).set($ptr$jscomp$6_src$jscomp$4$$, $cpu$jscomp$25$$.zstd_get_src_ptr(this.zstd_context)); + $ptr$jscomp$6_src$jscomp$4$$ = $cpu$jscomp$25$$.zstd_read(this.zstd_context, $decompressed_size$$); + const $result$jscomp$16$$ = $cpu$jscomp$25$$.wasm_memory.buffer.slice($ptr$jscomp$6_src$jscomp$4$$, $ptr$jscomp$6_src$jscomp$4$$ + $decompressed_size$$); + $cpu$jscomp$25$$.zstd_read_free($ptr$jscomp$6_src$jscomp$4$$, $decompressed_size$$); + $cpu$jscomp$25$$.zstd_free_ctx(this.zstd_context); + this.zstd_context = null; + return $result$jscomp$16$$; +}; +$V86$$.prototype.zstd_decompress_worker = async function($decompressed_size$jscomp$1$$, $src$jscomp$5$$) { + if (!this.zstd_worker) { + const $url$jscomp$26$$ = URL.createObjectURL(new Blob(["(" + function() { + let $wasm$jscomp$1$$; + globalThis.onmessage = function($e$jscomp$45_exports$jscomp$1$$) { + if ($wasm$jscomp$1$$) { + var {src:$src$jscomp$6$$, decompressed_size:$decompressed_size$jscomp$2$$, id:$id$jscomp$11$$} = $e$jscomp$45_exports$jscomp$1$$.data; + $e$jscomp$45_exports$jscomp$1$$ = $wasm$jscomp$1$$.exports; + var $env$jscomp$1_zstd_context$$ = $e$jscomp$45_exports$jscomp$1$$.zstd_create_ctx($src$jscomp$6$$.length); + (new Uint8Array($e$jscomp$45_exports$jscomp$1$$.memory.buffer)).set($src$jscomp$6$$, $e$jscomp$45_exports$jscomp$1$$.zstd_get_src_ptr($env$jscomp$1_zstd_context$$)); + var $ptr$jscomp$7$$ = $e$jscomp$45_exports$jscomp$1$$.zstd_read($env$jscomp$1_zstd_context$$, $decompressed_size$jscomp$2$$), $result$jscomp$17$$ = $e$jscomp$45_exports$jscomp$1$$.memory.buffer.slice($ptr$jscomp$7$$, $ptr$jscomp$7$$ + $decompressed_size$jscomp$2$$); + $e$jscomp$45_exports$jscomp$1$$.zstd_read_free($ptr$jscomp$7$$, $decompressed_size$jscomp$2$$); + $e$jscomp$45_exports$jscomp$1$$.zstd_free_ctx($env$jscomp$1_zstd_context$$); + postMessage({result:$result$jscomp$17$$, id:$id$jscomp$11$$}, [$result$jscomp$17$$]); + } else { + $env$jscomp$1_zstd_context$$ = Object.fromEntries("cpu_exception_hook run_hardware_timers cpu_event_halt microtick get_rand_int apic_acknowledge_irq stop_idling io_port_read8 io_port_read16 io_port_read32 io_port_write8 io_port_write16 io_port_write32 mmap_read8 mmap_read16 mmap_read32 mmap_write8 mmap_write16 mmap_write32 mmap_write64 mmap_write128 codegen_finalize jit_clear_func jit_clear_all_funcs".split(" ").map($f$jscomp$8$$ => [$f$jscomp$8$$, () => console.error("zstd worker unexpectedly called " + + $f$jscomp$8$$)])), $env$jscomp$1_zstd_context$$.__indirect_function_table = new WebAssembly.Table({element:"anyfunc", initial:1024}), $env$jscomp$1_zstd_context$$.abort = () => { + throw Error("zstd worker aborted"); + }, $env$jscomp$1_zstd_context$$.log_from_wasm = $env$jscomp$1_zstd_context$$.console_log_from_wasm = ($off$jscomp$1$$, $len$jscomp$22$$) => { + console.log(String.fromCharCode(...(new Uint8Array($wasm$jscomp$1$$.exports.memory.buffer, $off$jscomp$1$$, $len$jscomp$22$$)))); + }, $env$jscomp$1_zstd_context$$.dbg_trace_from_wasm = () => console.trace(), $wasm$jscomp$1$$ = new WebAssembly.Instance(new WebAssembly.Module($e$jscomp$45_exports$jscomp$1$$.data), {env:$env$jscomp$1_zstd_context$$}); + } + }; + }.toString() + ")()"], {type:"text/javascript"})); + this.zstd_worker = new Worker($url$jscomp$26$$); + URL.revokeObjectURL($url$jscomp$26$$); + this.zstd_worker.postMessage(this.wasm_source, [this.wasm_source]); + } + return new Promise($resolve$jscomp$1$$ => { + const $id$jscomp$12$$ = this.zstd_worker_request_id++, $done$jscomp$4$$ = async $e$jscomp$46$$ => { + $e$jscomp$46$$.data.id === $id$jscomp$12$$ && (this.zstd_worker.removeEventListener("message", $done$jscomp$4$$), $dbg_assert$$($decompressed_size$jscomp$1$$ === $e$jscomp$46$$.data.result.byteLength), $resolve$jscomp$1$$($e$jscomp$46$$.data.result)); + }; + this.zstd_worker.addEventListener("message", $done$jscomp$4$$); + this.zstd_worker.postMessage({src:$src$jscomp$5$$, decompressed_size:$decompressed_size$jscomp$1$$, id:$id$jscomp$12$$}, [$src$jscomp$5$$.buffer]); + }); +}; +$V86$$.prototype.get_bzimage_initrd_from_filesystem = function($boot_filesystem$jscomp$1$$) { + const $root$jscomp$3$$ = ($boot_filesystem$jscomp$1$$.read_dir("/") || []).map($x$jscomp$108$$ => "/" + $x$jscomp$108$$); + $boot_filesystem$jscomp$1$$ = ($boot_filesystem$jscomp$1$$.read_dir("/boot/") || []).map($x$jscomp$109$$ => "/boot/" + $x$jscomp$109$$); + let $initrd_path$jscomp$1$$, $bzimage_path$jscomp$1$$; + for (const $f$jscomp$9$$ of [].concat($root$jscomp$3$$, $boot_filesystem$jscomp$1$$)) { + const $old$$ = /old/i.test($f$jscomp$9$$) || /fallback/i.test($f$jscomp$9$$), $is_bzimage$$ = /vmlinuz/i.test($f$jscomp$9$$) || /bzimage/i.test($f$jscomp$9$$), $is_initrd$$ = /initrd/i.test($f$jscomp$9$$) || /initramfs/i.test($f$jscomp$9$$); + !$is_bzimage$$ || $bzimage_path$jscomp$1$$ && $old$$ || ($bzimage_path$jscomp$1$$ = $f$jscomp$9$$); + !$is_initrd$$ || $initrd_path$jscomp$1$$ && $old$$ || ($initrd_path$jscomp$1$$ = $f$jscomp$9$$); + } + $initrd_path$jscomp$1$$ && $bzimage_path$jscomp$1$$ || (console.log("Failed to find bzimage or initrd in filesystem. Files:"), console.log($root$jscomp$3$$.join(" ")), console.log($boot_filesystem$jscomp$1$$.join(" "))); + return {initrd_path:$initrd_path$jscomp$1$$, bzimage_path:$bzimage_path$jscomp$1$$}; +}; +$V86$$.prototype.run = async function() { + this.v86.run(); +}; +$goog$$.exportProperty($V86$$.prototype, "run", $V86$$.prototype.run); +$V86$$.prototype.stop = async function() { + this.cpu_is_running && await new Promise($resolve$jscomp$2$$ => { + const $listener$jscomp$65$$ = () => { + this.remove_listener("emulator-stopped", $listener$jscomp$65$$); + $resolve$jscomp$2$$(); + }; + this.add_listener("emulator-stopped", $listener$jscomp$65$$); + this.v86.stop(); + }); +}; +$goog$$.exportProperty($V86$$.prototype, "stop", $V86$$.prototype.stop); +$V86$$.prototype.destroy = async function() { + await this.stop(); + this.v86.destroy(); + this.keyboard_adapter && this.keyboard_adapter.destroy(); + this.network_adapter && this.network_adapter.destroy(); + this.mouse_adapter && this.mouse_adapter.destroy(); + this.screen_adapter && this.screen_adapter.destroy(); + this.serial_adapter && this.serial_adapter.destroy(); + this.speaker_adapter && this.speaker_adapter.destroy(); +}; +$goog$$.exportProperty($V86$$.prototype, "destroy", $V86$$.prototype.destroy); +$V86$$.prototype.restart = function() { + this.v86.restart(); +}; +$goog$$.exportProperty($V86$$.prototype, "restart", $V86$$.prototype.restart); +$V86$$.prototype.add_listener = function($event$jscomp$9$$, $listener$jscomp$66$$) { + this.bus.register($event$jscomp$9$$, $listener$jscomp$66$$, this); +}; +$goog$$.exportProperty($V86$$.prototype, "add_listener", $V86$$.prototype.add_listener); +$V86$$.prototype.remove_listener = function($event$jscomp$10$$, $listener$jscomp$67$$) { + this.bus.unregister($event$jscomp$10$$, $listener$jscomp$67$$); +}; +$goog$$.exportProperty($V86$$.prototype, "remove_listener", $V86$$.prototype.remove_listener); +$V86$$.prototype.restore_state = async function($state$jscomp$54$$) { + $dbg_assert$$(1 === arguments.length); + this.v86.restore_state($state$jscomp$54$$); +}; +$goog$$.exportProperty($V86$$.prototype, "restore_state", $V86$$.prototype.restore_state); +$V86$$.prototype.save_state = async function() { + $dbg_assert$$(0 === arguments.length); + return this.v86.save_state(); +}; +$goog$$.exportProperty($V86$$.prototype, "save_state", $V86$$.prototype.save_state); +$V86$$.prototype.get_instruction_counter = function() { + return this.v86 ? this.v86.cpu.instruction_counter[0] >>> 0 : 0; +}; +$goog$$.exportProperty($V86$$.prototype, "get_instruction_counter", $V86$$.prototype.get_instruction_counter); +$V86$$.prototype.is_running = function() { + return this.cpu_is_running; +}; +$goog$$.exportProperty($V86$$.prototype, "is_running", $V86$$.prototype.is_running); +$V86$$.prototype.set_fda = async function($file$jscomp$4$$) { + if ($file$jscomp$4$$.url && !$file$jscomp$4$$.async) { + $v86util$$.load_file($file$jscomp$4$$.url, {done:$result$jscomp$18$$ => { + this.v86.cpu.devices.fdc.set_fda(new $v86util$$.SyncBuffer($result$jscomp$18$$)); + }, }); + } else { + const $image$jscomp$4$$ = $v86util$$.buffer_from_object($file$jscomp$4$$, this.zstd_decompress_worker.bind(this)); + $image$jscomp$4$$.onload = () => { + this.v86.cpu.devices.fdc.set_fda($image$jscomp$4$$); + }; + await $image$jscomp$4$$.load(); + } +}; +$goog$$.exportProperty($V86$$.prototype, "set_fda", $V86$$.prototype.set_fda); +$V86$$.prototype.eject_fda = function() { + this.v86.cpu.devices.fdc.eject_fda(); +}; +$goog$$.exportProperty($V86$$.prototype, "eject_fda", $V86$$.prototype.eject_fda); +$V86$$.prototype.keyboard_send_scancodes = function($codes$$) { + for (var $i$jscomp$99$$ = 0; $i$jscomp$99$$ < $codes$$.length; $i$jscomp$99$$++) { + this.bus.send("keyboard-code", $codes$$[$i$jscomp$99$$]); + } +}; +$goog$$.exportProperty($V86$$.prototype, "keyboard_send_scancodes", $V86$$.prototype.keyboard_send_scancodes); +$V86$$.prototype.keyboard_send_keys = function($codes$jscomp$1$$) { + for (var $i$jscomp$100$$ = 0; $i$jscomp$100$$ < $codes$jscomp$1$$.length; $i$jscomp$100$$++) { + this.keyboard_adapter.simulate_press($codes$jscomp$1$$[$i$jscomp$100$$]); + } +}; +$goog$$.exportProperty($V86$$.prototype, "keyboard_send_keys", $V86$$.prototype.keyboard_send_keys); +$V86$$.prototype.keyboard_send_text = function($string$jscomp$3$$) { + for (var $i$jscomp$101$$ = 0; $i$jscomp$101$$ < $string$jscomp$3$$.length; $i$jscomp$101$$++) { + this.keyboard_adapter.simulate_char($string$jscomp$3$$[$i$jscomp$101$$]); + } +}; +$goog$$.exportProperty($V86$$.prototype, "keyboard_send_text", $V86$$.prototype.keyboard_send_text); +$V86$$.prototype.screen_make_screenshot = function() { + return this.screen_adapter ? this.screen_adapter.make_screenshot() : null; +}; +$goog$$.exportProperty($V86$$.prototype, "screen_make_screenshot", $V86$$.prototype.screen_make_screenshot); +$V86$$.prototype.screen_set_scale = function($sx$jscomp$3$$, $sy$jscomp$4$$) { + this.screen_adapter && this.screen_adapter.set_scale($sx$jscomp$3$$, $sy$jscomp$4$$); +}; +$goog$$.exportProperty($V86$$.prototype, "screen_set_scale", $V86$$.prototype.screen_set_scale); +$V86$$.prototype.screen_go_fullscreen = function() { + if (this.screen_adapter) { + var $elem$jscomp$2_focus_element$$ = document.getElementById("screen_container"); + if ($elem$jscomp$2_focus_element$$) { + var $fn$jscomp$18$$ = $elem$jscomp$2_focus_element$$.requestFullScreen || $elem$jscomp$2_focus_element$$.webkitRequestFullscreen || $elem$jscomp$2_focus_element$$.mozRequestFullScreen || $elem$jscomp$2_focus_element$$.msRequestFullScreen; + $fn$jscomp$18$$ && ($fn$jscomp$18$$.call($elem$jscomp$2_focus_element$$), ($elem$jscomp$2_focus_element$$ = document.getElementsByClassName("phone_keyboard")[0]) && $elem$jscomp$2_focus_element$$.focus()); + try { + navigator.keyboard.lock(); + } catch ($e$jscomp$47$$) { + } + this.lock_mouse(); + } + } +}; +$goog$$.exportProperty($V86$$.prototype, "screen_go_fullscreen", $V86$$.prototype.screen_go_fullscreen); +$V86$$.prototype.lock_mouse = function() { + var $elem$jscomp$3$$ = document.body, $fn$jscomp$19$$ = $elem$jscomp$3$$.requestPointerLock || $elem$jscomp$3$$.mozRequestPointerLock || $elem$jscomp$3$$.webkitRequestPointerLock; + $fn$jscomp$19$$ && $fn$jscomp$19$$.call($elem$jscomp$3$$); +}; +$goog$$.exportProperty($V86$$.prototype, "lock_mouse", $V86$$.prototype.lock_mouse); +$V86$$.prototype.mouse_set_status = function($enabled$jscomp$5$$) { + this.mouse_adapter && (this.mouse_adapter.emu_enabled = $enabled$jscomp$5$$); +}; +$V86$$.prototype.keyboard_set_status = function($enabled$jscomp$6$$) { + this.keyboard_adapter && (this.keyboard_adapter.emu_enabled = $enabled$jscomp$6$$); +}; +$goog$$.exportProperty($V86$$.prototype, "keyboard_set_status", $V86$$.prototype.keyboard_set_status); +$V86$$.prototype.serial0_send = function($data$jscomp$199$$) { + for (var $i$jscomp$102$$ = 0; $i$jscomp$102$$ < $data$jscomp$199$$.length; $i$jscomp$102$$++) { + this.bus.send("serial0-input", $data$jscomp$199$$.charCodeAt($i$jscomp$102$$)); + } +}; +$goog$$.exportProperty($V86$$.prototype, "serial0_send", $V86$$.prototype.serial0_send); +$V86$$.prototype.serial_send_bytes = function($serial$jscomp$2$$, $data$jscomp$200$$) { + for (var $i$jscomp$103$$ = 0; $i$jscomp$103$$ < $data$jscomp$200$$.length; $i$jscomp$103$$++) { + this.bus.send("serial" + $serial$jscomp$2$$ + "-input", $data$jscomp$200$$[$i$jscomp$103$$]); + } +}; +$goog$$.exportProperty($V86$$.prototype, "serial_send_bytes", $V86$$.prototype.serial_send_bytes); +$V86$$.prototype.serial_set_modem_status = function($serial$jscomp$3$$, $status$jscomp$6$$) { + this.bus.send("serial" + $serial$jscomp$3$$ + "-modem-status-input", $status$jscomp$6$$); +}; +$V86$$.prototype.serial_set_carrier_detect = function($serial$jscomp$4$$, $status$jscomp$7$$) { + this.bus.send("serial" + $serial$jscomp$4$$ + "-carrier-detect-input", $status$jscomp$7$$); +}; +$V86$$.prototype.serial_set_ring_indicator = function($serial$jscomp$5$$, $status$jscomp$8$$) { + this.bus.send("serial" + $serial$jscomp$5$$ + "-ring-indicator-input", $status$jscomp$8$$); +}; +$V86$$.prototype.serial_set_data_set_ready = function($serial$jscomp$6$$, $status$jscomp$9$$) { + this.bus.send("serial" + $serial$jscomp$6$$ + "-data-set-ready-input", $status$jscomp$9$$); +}; +$V86$$.prototype.serial_set_clear_to_send = function($serial$jscomp$7$$, $status$jscomp$10$$) { + this.bus.send("serial" + $serial$jscomp$7$$ + "-clear-to-send-input", $status$jscomp$10$$); +}; +$V86$$.prototype.mount_fs = async function($idx$jscomp$2_path$jscomp$6$$, $baseurl$$, $basefs$$) { + var $file_storage$jscomp$1_newfs$$ = new $MemoryFileStorage$$; + $baseurl$$ && ($file_storage$jscomp$1_newfs$$ = new $ServerFileStorageWrapper$$($file_storage$jscomp$1_newfs$$, $baseurl$$)); + $file_storage$jscomp$1_newfs$$ = new $FS$$($file_storage$jscomp$1_newfs$$, this.fs9p.qidcounter); + $baseurl$$ && ($dbg_assert$$("object" === typeof $basefs$$, "Filesystem: basefs must be a JSON object"), $file_storage$jscomp$1_newfs$$.load_from_json($basefs$$)); + $idx$jscomp$2_path$jscomp$6$$ = this.fs9p.Mount($idx$jscomp$2_path$jscomp$6$$, $file_storage$jscomp$1_newfs$$); + if (-2 === $idx$jscomp$2_path$jscomp$6$$) { + throw new $FileNotFoundError$$; + } + if (-17 === $idx$jscomp$2_path$jscomp$6$$) { + throw new $FileExistsError$$; + } + if (0 > $idx$jscomp$2_path$jscomp$6$$) { + throw $dbg_assert$$(!1, "Unexpected error code: " + -$idx$jscomp$2_path$jscomp$6$$), Error("Failed to mount. Error number: " + -$idx$jscomp$2_path$jscomp$6$$); + } +}; +$goog$$.exportProperty($V86$$.prototype, "mount_fs", $V86$$.prototype.mount_fs); +$V86$$.prototype.create_file = async function($file$jscomp$5$$, $data$jscomp$201$$) { + $dbg_assert$$(2 === arguments.length); + var $fs$jscomp$1$$ = this.fs9p; + if ($fs$jscomp$1$$) { + var $filename$jscomp$7_parts$jscomp$4$$ = $file$jscomp$5$$.split("/"); + $filename$jscomp$7_parts$jscomp$4$$ = $filename$jscomp$7_parts$jscomp$4$$[$filename$jscomp$7_parts$jscomp$4$$.length - 1]; + var $parent_id$$ = $fs$jscomp$1$$.SearchPath($file$jscomp$5$$).parentid; + if ("" !== $filename$jscomp$7_parts$jscomp$4$$ && -1 !== $parent_id$$) { + await $fs$jscomp$1$$.CreateBinaryFile($filename$jscomp$7_parts$jscomp$4$$, $parent_id$$, $data$jscomp$201$$); + } else { + return Promise.reject(new $FileNotFoundError$$); + } + } +}; +$goog$$.exportProperty($V86$$.prototype, "create_file", $V86$$.prototype.create_file); +$V86$$.prototype.read_file = async function($file$jscomp$6$$) { + $dbg_assert$$(1 === arguments.length); + var $fs$jscomp$2_result$jscomp$19$$ = this.fs9p; + if ($fs$jscomp$2_result$jscomp$19$$) { + return ($fs$jscomp$2_result$jscomp$19$$ = await $fs$jscomp$2_result$jscomp$19$$.read_file($file$jscomp$6$$)) ? $fs$jscomp$2_result$jscomp$19$$ : Promise.reject(new $FileNotFoundError$$); + } +}; +$goog$$.exportProperty($V86$$.prototype, "read_file", $V86$$.prototype.read_file); +$V86$$.prototype.automatically = function($steps$jscomp$1$$) { + const $run$$ = $steps$jscomp$2$$ => { + const $step$$ = $steps$jscomp$2$$[0]; + if ($step$$) { + var $remaining_steps$$ = $steps$jscomp$2$$.slice(1); + $step$$.sleep ? setTimeout(() => $run$$($remaining_steps$$), 1000 * $step$$.sleep) : $step$$.vga_text ? this.wait_until_vga_screen_contains($step$$.vga_text).then(() => $run$$($remaining_steps$$)) : $step$$.keyboard_send ? ($step$$.keyboard_send instanceof Array ? this.keyboard_send_scancodes($step$$.keyboard_send) : ($dbg_assert$$("string" === typeof $step$$.keyboard_send), this.keyboard_send_text($step$$.keyboard_send)), $run$$($remaining_steps$$)) : $step$$.call ? ($step$$.call(), $run$$($remaining_steps$$)) : + $dbg_assert$$(!1, $step$$); + } + }; + $run$$($steps$jscomp$1$$); +}; +$V86$$.prototype.wait_until_vga_screen_contains = function($text$jscomp$11$$) { + return new Promise($resolve$jscomp$3$$ => { + function $test_line$$($line$jscomp$8$$) { + return "string" === typeof $text$jscomp$11$$ ? $line$jscomp$8$$.includes($text$jscomp$11$$) : $text$jscomp$11$$.test($line$jscomp$8$$); + } + function $put_char$$($args$jscomp$10_row$jscomp$9$$) { + [$args$jscomp$10_row$jscomp$9$$] = $args$jscomp$10_row$jscomp$9$$; + $changed_rows$jscomp$1$$.add($args$jscomp$10_row$jscomp$9$$); + } + for (const $line$jscomp$9$$ of this.screen_adapter.get_text_screen()) { + if ($test_line$$($line$jscomp$9$$)) { + $resolve$jscomp$3$$(!0); + return; + } + } + const $changed_rows$jscomp$1$$ = new Set, $check$$ = () => { + for (const $row$jscomp$10$$ of $changed_rows$jscomp$1$$) { + const $line$jscomp$10$$ = this.screen_adapter.get_text_row($row$jscomp$10$$); + if ($test_line$$($line$jscomp$10$$)) { + this.remove_listener("screen-put-char", $put_char$$); + $resolve$jscomp$3$$(); + return; + } + } + $changed_rows$jscomp$1$$.clear(); + setTimeout($check$$, 100); + }; + $check$$(); + this.add_listener("screen-put-char", $put_char$$); + }); +}; +$V86$$.prototype.read_memory = function($offset$jscomp$64$$, $length$jscomp$28$$) { + return this.v86.cpu.read_blob($offset$jscomp$64$$, $length$jscomp$28$$); +}; +$V86$$.prototype.write_memory = function($blob$jscomp$19$$, $offset$jscomp$65$$) { + this.v86.cpu.write_blob($blob$jscomp$19$$, $offset$jscomp$65$$); +}; +$V86$$.prototype.set_serial_container_xtermjs = function($element$jscomp$10$$) { + this.serial_adapter && this.serial_adapter.destroy && this.serial_adapter.destroy(); + this.serial_adapter = new $SerialAdapterXtermJS$$($element$jscomp$10$$, this.bus); + this.serial_adapter.show(); +}; +function $FileExistsError$$($message$jscomp$32$$) { + this.message = $message$jscomp$32$$ || "File already exists"; +} +$FileExistsError$$.prototype = Error.prototype; +function $FileNotFoundError$$($message$jscomp$33$$) { + this.message = $message$jscomp$33$$ || "File not found"; +} +$FileNotFoundError$$.prototype = Error.prototype; +"undefined" !== typeof module && "undefined" !== typeof module.exports ? module.exports.V86 = $V86$$ : "undefined" !== typeof window ? window.V86 = $V86$$ : "function" === typeof importScripts && (self.V86 = $V86$$); +var $WorkerBus$$ = {Connector:function($pair$$) { + this.listeners = {}; + this.pair = $pair$$; + $pair$$.addEventListener("message", function($data$jscomp$202_e$jscomp$48$$) { + $data$jscomp$202_e$jscomp$48$$ = $data$jscomp$202_e$jscomp$48$$.data; + for (var $listeners$jscomp$3$$ = this.listeners[$data$jscomp$202_e$jscomp$48$$[0]], $i$jscomp$104$$ = 0; $i$jscomp$104$$ < $listeners$jscomp$3$$.length; $i$jscomp$104$$++) { + var $listener$jscomp$68$$ = $listeners$jscomp$3$$[$i$jscomp$104$$]; + $listener$jscomp$68$$.fn.call($listener$jscomp$68$$.this_value, $data$jscomp$202_e$jscomp$48$$[1]); + } + }.bind(this), !1); +}}; +$WorkerBus$$.Connector.prototype.register = function($name$jscomp$92$$, $fn$jscomp$20$$, $this_value$jscomp$2$$) { + var $listeners$jscomp$4$$ = this.listeners[$name$jscomp$92$$]; + void 0 === $listeners$jscomp$4$$ && ($listeners$jscomp$4$$ = this.listeners[$name$jscomp$92$$] = []); + $listeners$jscomp$4$$.push({fn:$fn$jscomp$20$$, this_value:$this_value$jscomp$2$$, }); +}; +$WorkerBus$$.Connector.prototype.send = function($name$jscomp$93$$, $value$jscomp$198$$, $transfer_list$$) { + $dbg_assert$$(1 <= arguments.length); + this.pair && this.pair.postMessage([$name$jscomp$93$$, $value$jscomp$198$$], $transfer_list$$); +}; +$WorkerBus$$.init = function($worker$$) { + return new $WorkerBus$$.Connector($worker$$); +}; +function $DummyScreenAdapter$$() { + var $text_mode_data$jscomp$1$$, $text_mode_width$jscomp$1$$ = 0, $text_mode_height$jscomp$1$$ = 0; + this.put_char = function($row$jscomp$11$$, $col$jscomp$8$$, $chr$jscomp$11$$) { + $dbg_assert$$(0 <= $row$jscomp$11$$ && $row$jscomp$11$$ < $text_mode_height$jscomp$1$$); + $dbg_assert$$(0 <= $col$jscomp$8$$ && $col$jscomp$8$$ < $text_mode_width$jscomp$1$$); + $text_mode_data$jscomp$1$$[$row$jscomp$11$$ * $text_mode_width$jscomp$1$$ + $col$jscomp$8$$] = $chr$jscomp$11$$; + }; + this.destroy = function() { + }; + this.pause = function() { + }; + this.continue = function() { + }; + this.set_mode = function() { + }; + this.set_font_bitmap = function() { + }; + this.set_font_page = function() { + }; + this.clear_screen = function() { + }; + this.set_size_text = function($cols$jscomp$1$$, $rows$jscomp$1$$) { + if ($cols$jscomp$1$$ !== $text_mode_width$jscomp$1$$ || $rows$jscomp$1$$ !== $text_mode_height$jscomp$1$$) { + $text_mode_data$jscomp$1$$ = new Uint8Array($cols$jscomp$1$$ * $rows$jscomp$1$$), $text_mode_width$jscomp$1$$ = $cols$jscomp$1$$, $text_mode_height$jscomp$1$$ = $rows$jscomp$1$$; + } + }; + this.set_size_graphical = function() { + }; + this.set_scale = function() { + }; + this.update_cursor_scanline = function() { + }; + this.update_cursor = function() { + }; + this.update_buffer = function() { + }; + this.get_text_screen = function() { + for (var $screen$jscomp$3$$ = [], $i$jscomp$105$$ = 0; $i$jscomp$105$$ < $text_mode_height$jscomp$1$$; $i$jscomp$105$$++) { + $screen$jscomp$3$$.push(this.get_text_row($i$jscomp$105$$)); + } + return $screen$jscomp$3$$; + }; + this.get_text_row = function($i$jscomp$106_offset$jscomp$66$$) { + $i$jscomp$106_offset$jscomp$66$$ *= $text_mode_width$jscomp$1$$; + return String.fromCharCode.apply(String, $text_mode_data$jscomp$1$$.subarray($i$jscomp$106_offset$jscomp$66$$, $i$jscomp$106_offset$jscomp$66$$ + $text_mode_width$jscomp$1$$)); + }; + this.set_size_text(80, 25); +} +;const $UNIX_EPOCH$$ = (new Date("1970-01-01T00:00:00Z")).getTime(), $NTP_EPOCH$$ = (new Date("1900-01-01T00:00:00Z")).getTime(), $NTP_EPOC_DIFF$$ = $UNIX_EPOCH$$ - $NTP_EPOCH$$, $TWO_TO_32$$ = Math.pow(2, 32), $V86_ASCII$$ = [118, 56, 54]; +function $a2ethaddr$$($bytes$jscomp$6$$) { + return [0, 1, 2, 3, 4, 5].map($i$jscomp$107$$ => $bytes$jscomp$6$$[$i$jscomp$107$$].toString(16)).map($x$jscomp$110$$ => 1 === $x$jscomp$110$$.length ? "0" + $x$jscomp$110$$ : $x$jscomp$110$$).join(":"); +} +function $iptolong$$($parts$jscomp$6$$) { + return $parts$jscomp$6$$[0] << 24 | $parts$jscomp$6$$[1] << 16 | $parts$jscomp$6$$[2] << 8 | $parts$jscomp$6$$[3]; +} +function $handle_fake_ntp$$($packet$jscomp$4$$, $adapter$jscomp$2$$) { + let $now_n$$ = Date.now() + $NTP_EPOC_DIFF$$, $now_n_f$$ = $now_n$$ % 1000 / 1000 * $TWO_TO_32$$, $reply$jscomp$2$$ = {}; + $reply$jscomp$2$$.eth = {ethertype:2048, src:$adapter$jscomp$2$$.router_mac, dest:$packet$jscomp$4$$.eth.src}; + $reply$jscomp$2$$.ipv4 = {proto:17, src:$packet$jscomp$4$$.ipv4.dest, dest:$packet$jscomp$4$$.ipv4.src, }; + $reply$jscomp$2$$.udp = {sport:123, dport:$packet$jscomp$4$$.udp.sport}; + $reply$jscomp$2$$.ntp = Object.assign({}, $packet$jscomp$4$$.ntp); + $reply$jscomp$2$$.ntp.flags = 36; + $reply$jscomp$2$$.ntp.poll = 10; + $reply$jscomp$2$$.ntp.ori_ts_i = $packet$jscomp$4$$.ntp.trans_ts_i; + $reply$jscomp$2$$.ntp.ori_ts_f = $packet$jscomp$4$$.ntp.trans_ts_f; + $reply$jscomp$2$$.ntp.rec_ts_i = $now_n$$ / 1000; + $reply$jscomp$2$$.ntp.rec_ts_f = $now_n_f$$; + $reply$jscomp$2$$.ntp.trans_ts_i = $now_n$$ / 1000; + $reply$jscomp$2$$.ntp.trans_ts_f = $now_n_f$$; + $reply$jscomp$2$$.ntp.stratum = 2; + $adapter$jscomp$2$$.receive($make_packet$$($reply$jscomp$2$$)); + return !0; +} +function $handle_fake_dhcp$$($packet$jscomp$5_router_ip$$, $adapter$jscomp$3$$) { + let $reply$jscomp$3$$ = {}; + $reply$jscomp$3$$.eth = {ethertype:2048, src:$adapter$jscomp$3$$.router_mac, dest:$packet$jscomp$5_router_ip$$.eth.src}; + $reply$jscomp$3$$.ipv4 = {proto:17, src:$adapter$jscomp$3$$.router_ip, dest:$adapter$jscomp$3$$.vm_ip, }; + $reply$jscomp$3$$.udp = {sport:67, dport:68, }; + $reply$jscomp$3$$.dhcp = {htype:1, hlen:6, hops:0, xid:$packet$jscomp$5_router_ip$$.dhcp.xid, secs:0, flags:0, ciaddr:0, yiaddr:$iptolong$$($adapter$jscomp$3$$.vm_ip), siaddr:$iptolong$$($adapter$jscomp$3$$.router_ip), giaddr:$iptolong$$($adapter$jscomp$3$$.router_ip), chaddr:$packet$jscomp$5_router_ip$$.dhcp.chaddr, }; + let $options$jscomp$45$$ = [], $fix$$ = $packet$jscomp$5_router_ip$$.dhcp.options.find(function($x$jscomp$112$$) { + return 53 === $x$jscomp$112$$[0]; + }); + $fix$$ && 3 === $fix$$[2] && ($packet$jscomp$5_router_ip$$.dhcp.op = 3); + 1 === $packet$jscomp$5_router_ip$$.dhcp.op && ($reply$jscomp$3$$.dhcp.op = 2, $options$jscomp$45$$.push(new Uint8Array([53, 1, 2]))); + 3 === $packet$jscomp$5_router_ip$$.dhcp.op && ($reply$jscomp$3$$.dhcp.op = 2, $options$jscomp$45$$.push(new Uint8Array([53, 1, 5])), $options$jscomp$45$$.push(new Uint8Array([51, 4, 8, 0, 0, 0]))); + $packet$jscomp$5_router_ip$$ = [$adapter$jscomp$3$$.router_ip[0], $adapter$jscomp$3$$.router_ip[1], $adapter$jscomp$3$$.router_ip[2], $adapter$jscomp$3$$.router_ip[3]]; + $options$jscomp$45$$.push(new Uint8Array([1, 4, 255, 255, 255, 0])); + $adapter$jscomp$3$$.masquerade && ($options$jscomp$45$$.push(new Uint8Array([3, 4].concat($packet$jscomp$5_router_ip$$))), $options$jscomp$45$$.push(new Uint8Array([6, 4].concat($packet$jscomp$5_router_ip$$)))); + $options$jscomp$45$$.push(new Uint8Array([54, 4].concat($packet$jscomp$5_router_ip$$))); + $options$jscomp$45$$.push(new Uint8Array([60, 3].concat($V86_ASCII$$))); + $options$jscomp$45$$.push(new Uint8Array([255, 0])); + $reply$jscomp$3$$.dhcp.options = $options$jscomp$45$$; + $adapter$jscomp$3$$.receive($make_packet$$($reply$jscomp$3$$)); +} +function $parse_eth$$($data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$, $o$jscomp$1$$) { + var $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$ = (new DataView($data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.buffer, $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.byteOffset, $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.byteLength)).getUint16(12), + $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$ = {ethertype:$arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$, dest:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(0, 6), dest_s:$a2ethaddr$$($data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(0, + 6)), src:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(6, 12), src_s:$a2ethaddr$$($data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(6, 12)), }; + $o$jscomp$1$$.eth = $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$; + $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$ = $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(14, $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.length); + if (2048 === $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$) { + var $ip_checksum$jscomp$inline_113_view$jscomp$inline_106$$ = new DataView($data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.buffer, $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.byteOffset, $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.byteLength), $flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ = + $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$[0] >> 4 & 15; + $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$ = $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$[0] & 15; + var $start$jscomp$inline_234_tos$jscomp$inline_109$$ = $ip_checksum$jscomp$inline_113_view$jscomp$inline_106$$.getUint8(1); + $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$ = $ip_checksum$jscomp$inline_113_view$jscomp$inline_106$$.getUint16(2); + var $len$jscomp$inline_235_ttl$jscomp$inline_111$$ = $ip_checksum$jscomp$inline_113_view$jscomp$inline_106$$.getUint8(8); + $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$ = $ip_checksum$jscomp$inline_113_view$jscomp$inline_106$$.getUint8(9); + $ip_checksum$jscomp$inline_113_view$jscomp$inline_106$$ = $ip_checksum$jscomp$inline_113_view$jscomp$inline_106$$.getUint16(10); + $flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ = {version:$flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$, ihl:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$, tos:$start$jscomp$inline_234_tos$jscomp$inline_109$$, len:$data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$, + ttl:$len$jscomp$inline_235_ttl$jscomp$inline_111$$, proto:$arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$, ip_checksum:$ip_checksum$jscomp$inline_113_view$jscomp$inline_106$$, src:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(12, 16), dest:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(16, + 20), }; + Math.max($data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$, 46) !== $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.length && $dbg_log$$(`ipv4 Length mismatch: ${$data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$} != ${$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.length}`, + 16777216); + $o$jscomp$1$$.ipv4 = $flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$; + $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$ = $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(4 * $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$, $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$); + 1 === $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$ && ($data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$ = $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$, $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$ = + new DataView($data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.buffer, $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.byteOffset, $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.byteLength), $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$ = + {type:$data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.getUint8(0), code:$data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.getUint8(1), checksum:$data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.getUint16(2), data:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.subarray(4)}, + $o$jscomp$1$$.icmp = $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$); + 6 === $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$ && ($data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$ = $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$, $flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ = + new DataView($data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.buffer, $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.byteOffset, $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.byteLength), $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$ = + {sport:$flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$.getUint16(0), dport:$flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$.getUint16(2), seq:$flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$.getUint32(4), ackn:$flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$.getUint32(8), + doff:$flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$.getUint8(12) >> 4, winsize:$flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$.getUint16(14), checksum:$flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$.getUint16(16), urgent:$flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$.getUint16(18), + }, $flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ = $flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$.getUint8(13), $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.fin = !!($flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ & + 1), $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.syn = !!($flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ & 2), $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.rst = !!($flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ & + 4), $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.psh = !!($flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ & 8), $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.ack = !!($flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ & + 16), $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.urg = !!($flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ & 32), $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.ece = !!($flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ & + 64), $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.cwr = !!($flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ & 128), $o$jscomp$1$$.tcp = $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$, $o$jscomp$1$$.tcp_data = $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.subarray(4 * + $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.doff)); + if (17 === $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$) { + $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$ = new DataView($data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.buffer, $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.byteOffset, $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.byteLength); + $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$ = {sport:$arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$.getUint16(0), dport:$arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$.getUint16(2), len:$arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$.getUint16(4), + checksum:$arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$.getUint16(6), data:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(8), data_s:(new TextDecoder).decode($data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(8))}; + if (67 === $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$.dport || 67 === $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$.sport) { + var $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$ = $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(8); + $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$ = new DataView($data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.buffer, $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.byteOffset, $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.byteLength); + $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.subarray(44, 236); + $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$ = {op:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.getUint8(0), htype:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.getUint8(1), hlen:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.getUint8(2), + hops:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.getUint8(3), xid:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.getUint32(4), secs:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.getUint16(8), flags:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.getUint16(10), + ciaddr:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.getUint32(12), yiaddr:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.getUint32(16), siaddr:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.getUint32(20), + giaddr:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.getUint32(24), chaddr:$data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.subarray(28, 44), magic:$data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.getUint32(236), options:[], }; + $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$ = $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.subarray(240); + for ($flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ = 0; $flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ < $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.length; ++$flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$) { + $start$jscomp$inline_234_tos$jscomp$inline_109$$ = $flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$, 0 !== $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$[$flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$] && (++$flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$, + $len$jscomp$inline_235_ttl$jscomp$inline_111$$ = $data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$[$flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$], $flags$jscomp$inline_222_i$jscomp$inline_233_ipv4$jscomp$inline_114_version$jscomp$inline_107_view$jscomp$inline_220$$ += $len$jscomp$inline_235_ttl$jscomp$inline_111$$, $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.options.push($data$jscomp$inline_228_len$jscomp$inline_110_options$jscomp$inline_232_tcp$jscomp$inline_221_view$jscomp$inline_215$$.subarray($start$jscomp$inline_234_tos$jscomp$inline_109$$, + $start$jscomp$inline_234_tos$jscomp$inline_109$$ + $len$jscomp$inline_235_ttl$jscomp$inline_111$$ + 2))); + } + $o$jscomp$1$$.dhcp = $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$; + $o$jscomp$1$$.dhcp_options = $data$jscomp$inline_213_data$jscomp$inline_218_dhcp$jscomp$inline_231_eth_icmp$jscomp$inline_216_ihl$jscomp$inline_108_view$jscomp$inline_230$$.options; + } + 53 !== $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$.dport && 53 !== $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$.sport || $parse_dns$$($data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(8), $o$jscomp$1$$); + 123 === $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$.dport && ($data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$ = $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(8), $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$ = + new DataView($data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.buffer, $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.byteOffset, $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.byteLength), $o$jscomp$1$$.ntp = {flags:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint8(0), + stratum:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint8(1), poll:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint8(2), precision:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint8(3), root_delay:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint32(4), + root_disp:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint32(8), ref_id:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint32(12), ref_ts_i:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint32(16), ref_ts_f:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint32(20), + ori_ts_i:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint32(24), ori_ts_f:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint32(28), rec_ts_i:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint32(32), rec_ts_f:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint32(36), + trans_ts_i:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint32(40), trans_ts_f:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.getUint32(44), }); + $o$jscomp$1$$.udp = $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$; + } + } else { + 2054 === $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$ ? ($arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$ = new DataView($data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.buffer, $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.byteOffset, + $data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.byteLength), $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$ = {htype:$arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$.getUint16(0), ptype:$arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$.getUint16(2), + oper:$arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$.getUint16(6), sha:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(8, 14), spa:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(14, 18), tha:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(18, + 24), tpa:$data$jscomp$204_data$jscomp$inline_224_data$jscomp$inline_229_ipdata$jscomp$inline_115_payload_view$jscomp$inline_236$$.subarray(24, 28), }, $o$jscomp$1$$.arp = $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$) : 34525 === $arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$ ? $dbg_log$$("Unimplemented: ipv6") : $dbg_log$$("Unknown ethertype: " + + $h$$($arp$jscomp$inline_122_ethertype$jscomp$2_proto$jscomp$inline_112_udp$jscomp$inline_227_view$jscomp$inline_119_view$jscomp$inline_226$$), 16777216); + } +} +function $parse_dns$$($data$jscomp$214$$, $o$jscomp$6$$) { + function $read_dstr$$() { + let $o$jscomp$7$$ = [], $len$jscomp$26$$; + do { + $len$jscomp$26$$ = $view$jscomp$22$$.getUint8($offset$jscomp$67$$), $o$jscomp$7$$.push((new TextDecoder).decode($data$jscomp$214$$.subarray($offset$jscomp$67$$ + 1, $offset$jscomp$67$$ + 1 + $len$jscomp$26$$))), $offset$jscomp$67$$ += $len$jscomp$26$$ + 1; + } while (0 < $len$jscomp$26$$); + return $o$jscomp$7$$; + } + let $view$jscomp$22$$ = new DataView($data$jscomp$214$$.buffer, $data$jscomp$214$$.byteOffset, $data$jscomp$214$$.byteLength), $dns$$ = {id:$view$jscomp$22$$.getUint16(0), flags:$view$jscomp$22$$.getUint16(2), questions:[], answers:[]}; + var $i$jscomp$120_qdcount$$ = $view$jscomp$22$$.getUint16(4); + let $ancount$$ = $view$jscomp$22$$.getUint16(6); + $view$jscomp$22$$.getUint16(8); + $view$jscomp$22$$.getUint16(10); + let $offset$jscomp$67$$ = 12; + for (var $ans_i$jscomp$119$$ = 0; $ans_i$jscomp$119$$ < $i$jscomp$120_qdcount$$; $ans_i$jscomp$119$$++) { + $dns$$.questions.push({name:$read_dstr$$(), type:$view$jscomp$22$$.getInt16($offset$jscomp$67$$), class:$view$jscomp$22$$.getInt16($offset$jscomp$67$$ + 2)}), $offset$jscomp$67$$ += 4; + } + for ($i$jscomp$120_qdcount$$ = 0; $i$jscomp$120_qdcount$$ < $ancount$$; $i$jscomp$120_qdcount$$++) { + $ans_i$jscomp$119$$ = {name:$read_dstr$$(), type:$view$jscomp$22$$.getInt16($offset$jscomp$67$$), class:$view$jscomp$22$$.getUint16($offset$jscomp$67$$ + 2), ttl:$view$jscomp$22$$.getUint32($offset$jscomp$67$$ + 4)}; + $offset$jscomp$67$$ += 8; + let $rdlen$$ = $view$jscomp$22$$.getUint16($offset$jscomp$67$$); + $offset$jscomp$67$$ += 2; + $ans_i$jscomp$119$$.data = $data$jscomp$214$$.subarray($offset$jscomp$67$$, $offset$jscomp$67$$ + $rdlen$$); + $offset$jscomp$67$$ += $rdlen$$; + $dns$$.answers.push($ans_i$jscomp$119$$); + } + $o$jscomp$6$$.dns = $dns$$; +} +function $make_packet$$($checksum$jscomp$inline_257_spec$jscomp$9$$) { + let $bytes$jscomp$7$$ = new Uint8Array(1518); + $dbg_assert$$($checksum$jscomp$inline_257_spec$jscomp$9$$.eth); + var $JSCompiler_temp_const$jscomp$190_JSCompiler_temp_const$jscomp$193_len$jscomp$inline_176_view$jscomp$inline_175$$ = new DataView($bytes$jscomp$7$$.buffer, $bytes$jscomp$7$$.byteOffset, $bytes$jscomp$7$$.byteLength); + $JSCompiler_temp_const$jscomp$190_JSCompiler_temp_const$jscomp$193_len$jscomp$inline_176_view$jscomp$inline_175$$.setUint16(12, $checksum$jscomp$inline_257_spec$jscomp$9$$.eth.ethertype); + for ($data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$ = 0; 6 > $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$; ++$data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$) { + $JSCompiler_temp_const$jscomp$190_JSCompiler_temp_const$jscomp$193_len$jscomp$inline_176_view$jscomp$inline_175$$.setUint8(0 + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$, $checksum$jscomp$inline_257_spec$jscomp$9$$.eth.dest[$data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$]); + } + for ($data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$ = 0; 6 > $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$; ++$data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$) { + $JSCompiler_temp_const$jscomp$190_JSCompiler_temp_const$jscomp$193_len$jscomp$inline_176_view$jscomp$inline_175$$.setUint8(6 + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$, $checksum$jscomp$inline_257_spec$jscomp$9$$.eth.src[$data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$]); + } + $JSCompiler_temp_const$jscomp$190_JSCompiler_temp_const$jscomp$193_len$jscomp$inline_176_view$jscomp$inline_175$$ = 14; + if ($checksum$jscomp$inline_257_spec$jscomp$9$$.arp) { + var $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$ = $bytes$jscomp$7$$.subarray(14); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$ = new DataView($data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.buffer, $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.byteOffset, $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.byteLength); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint16(0, $checksum$jscomp$inline_257_spec$jscomp$9$$.arp.htype); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint16(2, $checksum$jscomp$inline_257_spec$jscomp$9$$.arp.ptype); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8(4, $checksum$jscomp$inline_257_spec$jscomp$9$$.arp.sha.length); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8(5, $checksum$jscomp$inline_257_spec$jscomp$9$$.arp.spa.length); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint16(6, $checksum$jscomp$inline_257_spec$jscomp$9$$.arp.oper); + for ($data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$ = 0; 6 > $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$; ++$data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$) { + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8(8 + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$, $checksum$jscomp$inline_257_spec$jscomp$9$$.arp.sha[$data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$]), + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8(18 + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$, $checksum$jscomp$inline_257_spec$jscomp$9$$.arp.tha[$data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$]); + } + for ($data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$ = 0; 4 > $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$; ++$data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$) { + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8(14 + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$, $checksum$jscomp$inline_257_spec$jscomp$9$$.arp.spa[$data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$]), + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8(24 + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$, $checksum$jscomp$inline_257_spec$jscomp$9$$.arp.tpa[$data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$]); + } + $JSCompiler_temp_const$jscomp$190_JSCompiler_temp_const$jscomp$193_len$jscomp$inline_176_view$jscomp$inline_175$$ += 28; + } + if ($checksum$jscomp$inline_257_spec$jscomp$9$$.ipv4) { + var $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$ = $bytes$jscomp$7$$.subarray(14); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$ = new DataView($data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.buffer, $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.byteOffset, $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.byteLength); + $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$ = 20; + if ($checksum$jscomp$inline_257_spec$jscomp$9$$.icmp) { + var $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$ = $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$, $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$ = $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.subarray(20); + $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$ = new DataView($data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.buffer, $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.byteOffset, $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.byteLength); + $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.setUint8(0, $checksum$jscomp$inline_257_spec$jscomp$9$$.icmp.type); + $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.setUint8(1, $checksum$jscomp$inline_257_spec$jscomp$9$$.icmp.code); + $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.setUint16(2, 0); + for ($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ = 0; $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ < $checksum$jscomp$inline_257_spec$jscomp$9$$.icmp.data.length; ++$checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$) { + $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.setUint8($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ + 4, $checksum$jscomp$inline_257_spec$jscomp$9$$.icmp.data[$checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$]); + } + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ = 0; + for (var $i$jscomp$inline_261_i$jscomp$inline_313_i$jscomp$inline_317$$ = 0; $i$jscomp$inline_261_i$jscomp$inline_313_i$jscomp$inline_317$$ < 4 + $checksum$jscomp$inline_257_spec$jscomp$9$$.icmp.data.length; $i$jscomp$inline_261_i$jscomp$inline_313_i$jscomp$inline_317$$ += 2) { + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ += $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.getUint16($i$jscomp$inline_261_i$jscomp$inline_313_i$jscomp$inline_317$$), 65535 < $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ && ($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ = + ($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ & 65535) + 1); + } + $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.setUint16(2, $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ ^ 65535); + $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$ += 4 + $checksum$jscomp$inline_257_spec$jscomp$9$$.icmp.data.length; + } + if ($checksum$jscomp$inline_257_spec$jscomp$9$$.udp) { + var $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ = $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.subarray(20); + $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$ = new DataView($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$.buffer, $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$.byteOffset, $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$.byteLength); + if ($checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp) { + var $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$ = $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$.subarray(8); + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$ = new DataView($JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.buffer, $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.byteOffset, + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.byteLength); + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint8(0, $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.op); + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint8(1, $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.htype); + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint8(2, $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.hlen); + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint8(3, $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.hops); + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(4, $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.xid); + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint16(8, $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.secs); + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint16(10, $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.flags); + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(12, $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.ciaddr); + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(16, $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.yiaddr); + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(20, $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.siaddr); + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(24, $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.giaddr); + for ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ = 0; $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ < $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.chaddr.length; ++$a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$) { + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint8(28 + $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$, $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.chaddr[$a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$]); + } + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(236, 1669485411); + $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ = 240; + for ($data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ of $checksum$jscomp$inline_257_spec$jscomp$9$$.dhcp.options) { + for ($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ = 0; $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ < $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.length; ++$checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$) { + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint8($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$, $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$[$checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$]), + ++$a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$; + } + } + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$ = $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$; + } else { + if ($checksum$jscomp$inline_257_spec$jscomp$9$$.dns) { + var $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ = $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$.subarray(8); + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ = new DataView($data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.buffer, $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.byteOffset, + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.byteLength); + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint16(0, $checksum$jscomp$inline_257_spec$jscomp$9$$.dns.id); + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint16(2, $checksum$jscomp$inline_257_spec$jscomp$9$$.dns.flags); + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint16(4, $checksum$jscomp$inline_257_spec$jscomp$9$$.dns.questions.length); + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint16(6, $checksum$jscomp$inline_257_spec$jscomp$9$$.dns.answers.length); + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ = 12; + for ($i$jscomp$inline_261_i$jscomp$inline_313_i$jscomp$inline_317$$ = 0; $i$jscomp$inline_261_i$jscomp$inline_313_i$jscomp$inline_317$$ < $checksum$jscomp$inline_257_spec$jscomp$9$$.dns.questions.length; ++$i$jscomp$inline_261_i$jscomp$inline_313_i$jscomp$inline_317$$) { + var $ii$jscomp$inline_319_ii$jscomp$inline_320_q$jscomp$inline_314$$ = $checksum$jscomp$inline_257_spec$jscomp$9$$.dns.questions[$i$jscomp$inline_261_i$jscomp$inline_313_i$jscomp$inline_317$$]; + for ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ of $ii$jscomp$inline_319_ii$jscomp$inline_320_q$jscomp$inline_314$$.name) { + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint8($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$, $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$.length); + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$++; + for (let $ii$jscomp$inline_316$$ = 0; $ii$jscomp$inline_316$$ < $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$.length; ++$ii$jscomp$inline_316$$) { + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint8($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$, $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$.charCodeAt($ii$jscomp$inline_316$$)), + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$++; + } + } + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint16($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$, $ii$jscomp$inline_319_ii$jscomp$inline_320_q$jscomp$inline_314$$.type); + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ += 2; + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint16($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$, $ii$jscomp$inline_319_ii$jscomp$inline_320_q$jscomp$inline_314$$.class); + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ += 2; + } + for ($i$jscomp$inline_261_i$jscomp$inline_313_i$jscomp$inline_317$$ = 0; $i$jscomp$inline_261_i$jscomp$inline_313_i$jscomp$inline_317$$ < $checksum$jscomp$inline_257_spec$jscomp$9$$.dns.answers.length; ++$i$jscomp$inline_261_i$jscomp$inline_313_i$jscomp$inline_317$$) { + var $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ = $checksum$jscomp$inline_257_spec$jscomp$9$$.dns.answers[$i$jscomp$inline_261_i$jscomp$inline_313_i$jscomp$inline_317$$]; + for ($JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$ of $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$.name) { + for ($data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint8($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$, $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.length), + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$++, $ii$jscomp$inline_319_ii$jscomp$inline_320_q$jscomp$inline_314$$ = 0; $ii$jscomp$inline_319_ii$jscomp$inline_320_q$jscomp$inline_314$$ < $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.length; ++$ii$jscomp$inline_319_ii$jscomp$inline_320_q$jscomp$inline_314$$) { + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint8($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$, $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.charCodeAt($ii$jscomp$inline_319_ii$jscomp$inline_320_q$jscomp$inline_314$$)), + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$++; + } + } + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint16($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$, $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$.type); + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ += 2; + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint16($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$, $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$.class); + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ += 2; + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint32($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$, $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$.ttl); + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ += 4; + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint16($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$, $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$.data.length); + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ += 2; + for ($ii$jscomp$inline_319_ii$jscomp$inline_320_q$jscomp$inline_314$$ = 0; $ii$jscomp$inline_319_ii$jscomp$inline_320_q$jscomp$inline_314$$ < $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$.data.length; ++$ii$jscomp$inline_319_ii$jscomp$inline_320_q$jscomp$inline_314$$) { + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.setUint8($checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ + $ii$jscomp$inline_319_ii$jscomp$inline_320_q$jscomp$inline_314$$, $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$.data[$ii$jscomp$inline_319_ii$jscomp$inline_320_q$jscomp$inline_314$$]); + } + $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$ += $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$.data.length; + } + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$ = $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$; + } else { + if ($checksum$jscomp$inline_257_spec$jscomp$9$$.ntp) { + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$ = $checksum$jscomp$inline_259_data$jscomp$inline_253_i$jscomp$inline_260_i$jscomp$inline_306_offset$jscomp$inline_311$$.subarray(8), $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$ = + new DataView($JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.buffer, $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.byteOffset, $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.byteLength), + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint8(0, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.flags), $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint8(1, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.stratum), + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint8(2, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.poll), $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint8(3, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.precision), + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(4, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.root_delay), $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(8, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.root_disp), + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(12, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.ref_id), $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(16, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.ref_ts_i), + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(20, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.ref_ts_f), $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(24, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.ori_ts_i), + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(28, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.ori_ts_f), $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(32, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.rec_ts_i), + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(36, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.rec_ts_f), $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(40, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.trans_ts_i), + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$.setUint32(44, $checksum$jscomp$inline_257_spec$jscomp$9$$.ntp.trans_ts_f), $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$ = 48; + } else { + for ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ = $checksum$jscomp$inline_257_spec$jscomp$9$$.udp.data, $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$ = $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$.length, + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ = 0; $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ < $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$.length; ++$data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$) { + $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.setUint8(8 + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$, $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$[$data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$]); + } + } + } + } + $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.setUint16(0, $checksum$jscomp$inline_257_spec$jscomp$9$$.udp.sport); + $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.setUint16(2, $checksum$jscomp$inline_257_spec$jscomp$9$$.udp.dport); + $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.setUint16(4, 8 + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$); + $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$.setUint16(6, 0); + $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$ += 8 + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$; + } + if ($checksum$jscomp$inline_257_spec$jscomp$9$$.tcp) { + $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$ = $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$; + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$ = $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.subarray(20); + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$ = new DataView($data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.buffer, $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.byteOffset, + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.byteLength); + $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ = 0; + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ = $checksum$jscomp$inline_257_spec$jscomp$9$$.tcp; + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.fin && ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ |= 1); + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.syn && ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ |= 2); + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.rst && ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ |= 4); + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.psh && ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ |= 8); + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.ack && ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ |= 16); + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.urg && ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ |= 32); + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.ece && ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ |= 64); + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.cwr && ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ |= 128); + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.setUint16(0, $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.sport); + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.setUint16(2, $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.dport); + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.setUint32(4, $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.seq); + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.setUint32(8, $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.ackn); + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.setUint8(12, 80); + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.setUint8(13, $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$); + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.setUint16(14, $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.winsize); + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.setUint16(16, 0); + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.setUint16(18, $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$.urgent || 0); + $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ = 20 + ($checksum$jscomp$inline_257_spec$jscomp$9$$.tcp_data ? $checksum$jscomp$inline_257_spec$jscomp$9$$.tcp_data.length : 0); + $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ = 0; + $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$ = new Uint8Array(12); + $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$ = new DataView($JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$.buffer, $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$.byteOffset, + $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$.byteLength); + for ($data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$ = 0; 4 > $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$; ++$data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$) { + $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$.setUint8($data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$, $checksum$jscomp$inline_257_spec$jscomp$9$$.ipv4.src[$data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$]), $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$.setUint8(4 + + $data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$, $checksum$jscomp$inline_257_spec$jscomp$9$$.ipv4.dest[$data$jscomp$inline_250_i$jscomp$inline_273_view$jscomp$inline_258_view$jscomp$inline_262$$]); + } + $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$.setUint8(9, 6); + $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$.setUint16(10, $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$); + for ($data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ = 0; 6 > $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$; ++$data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$) { + $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ += $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$.getUint16($data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ << + 1), 65535 < $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ && ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ = ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ & + 65535) + 1); + } + for ($data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ = 0; 10 > $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$; ++$data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$) { + $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ += $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.getUint16($data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ << + 1), 65535 < $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ && ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ = ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ & + 65535) + 1); + } + if ($checksum$jscomp$inline_257_spec$jscomp$9$$.tcp_data) { + for ($data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ = 0; $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ < $checksum$jscomp$inline_257_spec$jscomp$9$$.tcp_data.length; $data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ += + 2) { + $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ += $checksum$jscomp$inline_257_spec$jscomp$9$$.tcp_data[$data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$] << 8 | $checksum$jscomp$inline_257_spec$jscomp$9$$.tcp_data[$data$jscomp$inline_309_i$jscomp$inline_265_i$jscomp$inline_274_i$jscomp$inline_275_i$jscomp$inline_276_o$jscomp$inline_305_tcp$jscomp$inline_268_total_len$jscomp$inline_269_view$jscomp$inline_310$$ + + 1], 65535 < $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ && ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ = ($a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ & + 65535) + 1); + } + } + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$.setUint16(16, $a$jscomp$inline_312_checksum$jscomp$inline_270_flags$jscomp$inline_267_i$jscomp$inline_304_offset$jscomp$inline_303_raw_data$jscomp$inline_264_s$jscomp$inline_315$$ ^ 65535); + $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$ = $JSCompiler_temp_const$jscomp$inline_254_data$jscomp$inline_301_data$jscomp$inline_323_payload_length$jscomp$inline_263_s$jscomp$inline_318_view$jscomp$inline_302_view$jscomp$inline_324$$ + 20; + } + if ($checksum$jscomp$inline_257_spec$jscomp$9$$.tcp_data) { + for ($data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$ = 0; $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$ < $checksum$jscomp$inline_257_spec$jscomp$9$$.tcp_data.length; ++$data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$) { + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8($JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$ + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$, $checksum$jscomp$inline_257_spec$jscomp$9$$.tcp_data[$data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$]); + } + $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$ += $checksum$jscomp$inline_257_spec$jscomp$9$$.tcp_data.length; + } + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8(0, 69); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8(1, $checksum$jscomp$inline_257_spec$jscomp$9$$.ipv4.tos || 0); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint16(2, $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint16(4, $checksum$jscomp$inline_257_spec$jscomp$9$$.ipv4.id || 0); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8(6, 64); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8(8, $checksum$jscomp$inline_257_spec$jscomp$9$$.ipv4.ttl || 32); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8(9, $checksum$jscomp$inline_257_spec$jscomp$9$$.ipv4.proto); + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint16(10, 0); + for ($data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$ = 0; 4 > $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$; ++$data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$) { + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8(12 + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$, $checksum$jscomp$inline_257_spec$jscomp$9$$.ipv4.src[$data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$]), + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint8(16 + $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$, $checksum$jscomp$inline_257_spec$jscomp$9$$.ipv4.dest[$data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$]); + } + $checksum$jscomp$inline_257_spec$jscomp$9$$ = 0; + for ($data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$ = 0; 10 > $data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$; ++$data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$) { + $checksum$jscomp$inline_257_spec$jscomp$9$$ += $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.getUint16($data$jscomp$inline_245_data$jscomp$inline_256_i$jscomp$inline_241_i$jscomp$inline_242_i$jscomp$inline_277_i$jscomp$inline_278_i$jscomp$inline_279_view$jscomp$inline_266$$ << 1), 65535 < $checksum$jscomp$inline_257_spec$jscomp$9$$ && ($checksum$jscomp$inline_257_spec$jscomp$9$$ = ($checksum$jscomp$inline_257_spec$jscomp$9$$ & + 65535) + 1); + } + $data$jscomp$inline_239_i$jscomp$inline_177_i$jscomp$inline_178_view$jscomp$inline_240_view$jscomp$inline_246$$.setUint16(10, $checksum$jscomp$inline_257_spec$jscomp$9$$ ^ 65535); + $JSCompiler_temp_const$jscomp$190_JSCompiler_temp_const$jscomp$193_len$jscomp$inline_176_view$jscomp$inline_175$$ += $JSCompiler_temp_const$jscomp$inline_248_JSCompiler_temp_const$jscomp$inline_251_len$jscomp$inline_247_phview$jscomp$inline_272_psudo_header$jscomp$inline_271$$; + } + return $bytes$jscomp$7$$.subarray(0, $JSCompiler_temp_const$jscomp$190_JSCompiler_temp_const$jscomp$193_len$jscomp$inline_176_view$jscomp$inline_175$$); +} +function $fake_tcp_connect$$($dport$$, $adapter$jscomp$5$$) { + let $sport$$ = 49152 + Math.floor(1000 * Math.random()), $tuple$jscomp$1$$ = [$adapter$jscomp$5$$.vm_ip.join("."), $dport$$, $adapter$jscomp$5$$.router_ip.join("."), $sport$$].join(":"), $reader$$, $connector$$, $conn$$ = new $TCPConnection$$; + $conn$$.net = $adapter$jscomp$5$$; + $conn$$.on_data = function($data$jscomp$222$$) { + $reader$$ && $reader$$.call($handle$jscomp$13$$, $data$jscomp$222$$); + }; + $conn$$.on_connect = function() { + $connector$$ && $connector$$.call($handle$jscomp$13$$); + }; + $conn$$.tuple = $tuple$jscomp$1$$; + $conn$$.hsrc = $adapter$jscomp$5$$.router_mac; + $conn$$.psrc = $adapter$jscomp$5$$.router_ip; + $conn$$.sport = $sport$$; + $conn$$.hdest = $adapter$jscomp$5$$.vm_mac; + $conn$$.dport = $dport$$; + $conn$$.pdest = $adapter$jscomp$5$$.vm_ip; + $adapter$jscomp$5$$.tcp_conn[$tuple$jscomp$1$$] = $conn$$; + $conn$$.connect(); + let $handle$jscomp$13$$ = {write:function($data$jscomp$223$$) { + $conn$$.write($data$jscomp$223$$); + }, on:function($event$jscomp$11$$, $cb$jscomp$2$$) { + "data" === $event$jscomp$11$$ && ($reader$$ = $cb$jscomp$2$$); + "connect" === $event$jscomp$11$$ && ($connector$$ = $cb$jscomp$2$$); + }, close:function() { + $conn$$.close(); + }}; + return $handle$jscomp$13$$; +} +function $TCPConnection$$() { + this.send_buffer = new Uint8Array([]); + this.seq_history = []; +} +$TCPConnection$$.prototype.ipv4_reply = function() { + let $reply$jscomp$4$$ = {}; + $reply$jscomp$4$$.eth = {ethertype:2048, src:this.hsrc, dest:this.hdest}; + $reply$jscomp$4$$.ipv4 = {proto:6, src:this.psrc, dest:this.pdest}; + $reply$jscomp$4$$.tcp = {sport:this.sport, dport:this.dport, winsize:this.winsize, ackn:this.ack, seq:this.seq, ack:!0}; + return $reply$jscomp$4$$; +}; +$TCPConnection$$.prototype.connect = function() { + this.seq = 1338; + this.ack = 1; + this.start_seq = 0; + this.winsize = 64240; + this.state = "syn-sent"; + let $reply$jscomp$5$$ = this.ipv4_reply(); + $reply$jscomp$5$$.ipv4.id = 2345; + $reply$jscomp$5$$.tcp = {sport:this.sport, dport:this.dport, seq:1337, ackn:0, winsize:0, syn:!0, }; + this.net.receive($make_packet$$($reply$jscomp$5$$)); +}; +$TCPConnection$$.prototype.accept = function($packet$jscomp$7$$) { + this.seq = 1338; + this.ack = $packet$jscomp$7$$.tcp.seq + 1; + this.start_seq = $packet$jscomp$7$$.tcp.seq; + this.hsrc = this.net.router_mac; + this.psrc = $packet$jscomp$7$$.ipv4.dest; + this.sport = $packet$jscomp$7$$.tcp.dport; + this.hdest = $packet$jscomp$7$$.eth.src; + this.dport = $packet$jscomp$7$$.tcp.sport; + this.pdest = $packet$jscomp$7$$.ipv4.src; + this.winsize = $packet$jscomp$7$$.tcp.winsize; + let $reply$jscomp$6$$ = this.ipv4_reply(); + $reply$jscomp$6$$.tcp = {sport:this.sport, dport:this.dport, seq:1337, ackn:this.ack, winsize:$packet$jscomp$7$$.tcp.winsize, syn:!0, ack:!0}; + this.net.receive($make_packet$$($reply$jscomp$6$$)); +}; +$TCPConnection$$.prototype.process = function($packet$jscomp$8_reply$jscomp$7$$) { + if ($packet$jscomp$8_reply$jscomp$7$$.tcp.syn) { + $dbg_assert$$($packet$jscomp$8_reply$jscomp$7$$.tcp.ack), $dbg_assert$$("syn-sent" === this.state), this.ack = $packet$jscomp$8_reply$jscomp$7$$.tcp.seq + 1, this.start_seq = $packet$jscomp$8_reply$jscomp$7$$.tcp.seq, this.last_received_ackn = $packet$jscomp$8_reply$jscomp$7$$.tcp.ackn, $packet$jscomp$8_reply$jscomp$7$$ = this.ipv4_reply(), this.net.receive($make_packet$$($packet$jscomp$8_reply$jscomp$7$$)), this.state = "established", this.on_connect && this.on_connect.call(this); + } else { + if ($packet$jscomp$8_reply$jscomp$7$$.tcp.fin) { + $dbg_log$$(`All done with ${this.tuple} resetting`, 16777216), this.ack !== $packet$jscomp$8_reply$jscomp$7$$.tcp.seq && ($dbg_log$$("Closing the connecton, but seq was wrong", 16777216), ++this.ack), $nread_reply$jscomp$10_reply$jscomp$8_reply$jscomp$9$$ = this.ipv4_reply(), $nread_reply$jscomp$10_reply$jscomp$8_reply$jscomp$9$$.tcp = {sport:$packet$jscomp$8_reply$jscomp$7$$.tcp.dport, dport:$packet$jscomp$8_reply$jscomp$7$$.tcp.sport, seq:this.seq, ackn:this.ack, winsize:$packet$jscomp$8_reply$jscomp$7$$.tcp.winsize, + rst:!0, }, delete this.net.tcp_conn[this.tuple], this.net.receive($make_packet$$($nread_reply$jscomp$10_reply$jscomp$8_reply$jscomp$9$$)); + } else { + if (this.ack !== $packet$jscomp$8_reply$jscomp$7$$.tcp.seq) { + $dbg_log$$(`Packet seq was wrong ex: ${this.ack} ~${this.ack - this.start_seq} pk: ${$packet$jscomp$8_reply$jscomp$7$$.tcp.seq} ~${this.start_seq - $packet$jscomp$8_reply$jscomp$7$$.tcp.seq} (${this.ack - $packet$jscomp$8_reply$jscomp$7$$.tcp.seq}) = ${this.name}`, 16777216), $nread_reply$jscomp$10_reply$jscomp$8_reply$jscomp$9$$ = this.ipv4_reply(), $nread_reply$jscomp$10_reply$jscomp$8_reply$jscomp$9$$.tcp = {sport:$packet$jscomp$8_reply$jscomp$7$$.tcp.dport, dport:$packet$jscomp$8_reply$jscomp$7$$.tcp.sport, + seq:this.seq, ackn:this.ack, winsize:$packet$jscomp$8_reply$jscomp$7$$.tcp.winsize, ack:!0}, this.net.receive($make_packet$$($nread_reply$jscomp$10_reply$jscomp$8_reply$jscomp$9$$)); + } else { + this.seq_history.push(`${$packet$jscomp$8_reply$jscomp$7$$.tcp.seq - this.start_seq}:${$packet$jscomp$8_reply$jscomp$7$$.tcp.seq + $packet$jscomp$8_reply$jscomp$7$$.tcp_data.length - this.start_seq}`); + this.ack += $packet$jscomp$8_reply$jscomp$7$$.tcp_data.length; + 0 < $packet$jscomp$8_reply$jscomp$7$$.tcp_data.length && ($nread_reply$jscomp$10_reply$jscomp$8_reply$jscomp$9$$ = this.ipv4_reply(), this.net.receive($make_packet$$($nread_reply$jscomp$10_reply$jscomp$8_reply$jscomp$9$$))); + void 0 === this.last_received_ackn && (this.last_received_ackn = $packet$jscomp$8_reply$jscomp$7$$.tcp.ackn); + var $nread_reply$jscomp$10_reply$jscomp$8_reply$jscomp$9$$ = $packet$jscomp$8_reply$jscomp$7$$.tcp.ackn - this.last_received_ackn; + 0 < $nread_reply$jscomp$10_reply$jscomp$8_reply$jscomp$9$$ && (this.last_received_ackn = $packet$jscomp$8_reply$jscomp$7$$.tcp.ackn, this.send_buffer = this.send_buffer.subarray($nread_reply$jscomp$10_reply$jscomp$8_reply$jscomp$9$$), this.seq += $nread_reply$jscomp$10_reply$jscomp$8_reply$jscomp$9$$, this.pending = !1); + 0 > $nread_reply$jscomp$10_reply$jscomp$8_reply$jscomp$9$$ || (this.on_data($packet$jscomp$8_reply$jscomp$7$$.tcp_data), this.pump()); + } + } + } +}; +$TCPConnection$$.prototype.write = function($data$jscomp$224$$) { + if (0 < this.send_buffer.length) { + let $concat$$ = new Uint8Array(this.send_buffer.byteLength + $data$jscomp$224$$.byteLength); + $concat$$.set(this.send_buffer, 0); + $concat$$.set($data$jscomp$224$$, this.send_buffer.byteLength); + this.send_buffer = $concat$$; + } else { + this.send_buffer = $data$jscomp$224$$; + } + this.pump(); +}; +$TCPConnection$$.prototype.close = function() { + this.state = "fin-wait-1"; + let $reply$jscomp$11$$ = this.ipv4_reply(); + $reply$jscomp$11$$.tcp.fin = !0; + this.net.receive($make_packet$$($reply$jscomp$11$$)); + this.pump(); +}; +$TCPConnection$$.prototype.pump = function() { + if (0 < this.send_buffer.length && !this.pending) { + let $data$jscomp$225$$ = this.send_buffer.subarray(0, 500), $reply$jscomp$12$$ = this.ipv4_reply(); + this.pending = !0; + 1 > this.send_buffer.length && ($reply$jscomp$12$$.tcp.fin = !0); + $reply$jscomp$12$$.tcp.psh = !0; + $reply$jscomp$12$$.tcp_data = $data$jscomp$225$$; + this.net.receive($make_packet$$($reply$jscomp$12$$)); + } +}; +function $arp_whohas$$($packet$jscomp$9$$, $adapter$jscomp$6$$) { + var $packet_subnet_reply$jscomp$13$$ = $iptolong$$($packet$jscomp$9$$.arp.tpa) & 4294967040; + let $router_subnet$$ = $iptolong$$($adapter$jscomp$6$$.router_ip) & 4294967040; + !$adapter$jscomp$6$$.masquerade && $packet_subnet_reply$jscomp$13$$ !== $router_subnet$$ || $packet_subnet_reply$jscomp$13$$ === $router_subnet$$ && 99 < $packet$jscomp$9$$.arp.tpa[3] || ($packet_subnet_reply$jscomp$13$$ = {}, $packet_subnet_reply$jscomp$13$$.eth = {ethertype:2054, src:$adapter$jscomp$6$$.router_mac, dest:$packet$jscomp$9$$.eth.src}, $packet_subnet_reply$jscomp$13$$.arp = {htype:1, ptype:2048, oper:2, sha:$adapter$jscomp$6$$.router_mac, spa:$packet$jscomp$9$$.arp.tpa, tha:$packet$jscomp$9$$.eth.src, + tpa:$packet$jscomp$9$$.arp.spa}, $adapter$jscomp$6$$.receive($make_packet$$($packet_subnet_reply$jscomp$13$$))); +} +function $handle_udp_echo$$($packet$jscomp$11$$, $adapter$jscomp$8$$) { + let $reply$jscomp$15$$ = {}; + $reply$jscomp$15$$.eth = {ethertype:2048, src:$adapter$jscomp$8$$.router_mac, dest:$packet$jscomp$11$$.eth.src}; + $reply$jscomp$15$$.ipv4 = {proto:17, src:$packet$jscomp$11$$.ipv4.dest, dest:$packet$jscomp$11$$.ipv4.src, }; + $reply$jscomp$15$$.udp = {sport:$packet$jscomp$11$$.udp.dport, dport:$packet$jscomp$11$$.udp.sport, data:(new TextEncoder).encode($packet$jscomp$11$$.udp.data_s)}; + $adapter$jscomp$8$$.receive($make_packet$$($reply$jscomp$15$$)); +} +;function $WispNetworkAdapter$$($wisp_url$$, $bus$jscomp$25$$, $config$jscomp$6$$) { + this.register_ws($wisp_url$$); + this.last_stream = 1; + this.connections = {0:{congestion:0}}; + this.congested_buffer = []; + $config$jscomp$6$$ = $config$jscomp$6$$ || {}; + this.bus = $bus$jscomp$25$$; + this.id = $config$jscomp$6$$.id || 0; + this.router_mac = new Uint8Array(($config$jscomp$6$$.router_mac || "52:54:0:1:2:3").split(":").map(function($x$jscomp$113$$) { + return parseInt($x$jscomp$113$$, 16); + })); + this.router_ip = new Uint8Array(($config$jscomp$6$$.router_ip || "192.168.86.1").split(".").map(function($x$jscomp$114$$) { + return parseInt($x$jscomp$114$$, 10); + })); + this.vm_ip = new Uint8Array(($config$jscomp$6$$.vm_ip || "192.168.86.100").split(".").map(function($x$jscomp$115$$) { + return parseInt($x$jscomp$115$$, 10); + })); + this.masquerade = void 0 === $config$jscomp$6$$.masquerade || !!$config$jscomp$6$$.masquerade; + this.vm_mac = new Uint8Array(6); + this.doh_server = $config$jscomp$6$$.doh_server || "cloudflare-dns.com"; + this.tcp_conn = {}; + this.bus.register("net" + this.id + "-mac", function($mac$jscomp$1$$) { + this.vm_mac = new Uint8Array($mac$jscomp$1$$.split(":").map(function($x$jscomp$116$$) { + return parseInt($x$jscomp$116$$, 16); + })); + }, this); + this.bus.register("net" + this.id + "-send", function($data$jscomp$226$$) { + this.send($data$jscomp$226$$); + }, this); +} +$WispNetworkAdapter$$.prototype.register_ws = function($wisp_url$jscomp$1$$) { + this.wispws = new WebSocket($wisp_url$jscomp$1$$.replace("wisp://", "ws://").replace("wisps://", "wss://")); + this.wispws.binaryType = "arraybuffer"; + this.wispws.onmessage = $event$jscomp$12$$ => { + this.process_incoming_wisp_frame(new Uint8Array($event$jscomp$12$$.data)); + }; + this.wispws.onclose = () => { + setTimeout(() => { + this.register_ws($wisp_url$jscomp$1$$); + }, 10000); + }; +}; +$WispNetworkAdapter$$.prototype.send_packet = function($data$jscomp$227$$, $type$jscomp$157$$, $stream_id$$) { + 0 < this.connections[$stream_id$$].congestion ? ("DATA" === $type$jscomp$157$$ && this.connections[$stream_id$$].congestion--, this.wispws.send($data$jscomp$227$$)) : (this.connections[$stream_id$$].congested = !0, this.congested_buffer.push({data:$data$jscomp$227$$, type:$type$jscomp$157$$})); +}; +$WispNetworkAdapter$$.prototype.process_incoming_wisp_frame = function($frame$$) { + const $view$jscomp$30$$ = new DataView($frame$$.buffer), $stream_id$jscomp$1$$ = $view$jscomp$30$$.getUint32(1, !0); + switch($frame$$[0]) { + case 1: + $dbg_log$$("Server sent client-only packet CONNECT", 1048576); + break; + case 2: + if (this.connections[$stream_id$jscomp$1$$]) { + this.connections[$stream_id$jscomp$1$$].data_callback($frame$$.slice(5)); + } else { + throw Error("Got a DATA packet but stream not registered. ID: " + $stream_id$jscomp$1$$); + } + break; + case 3: + this.connections[$stream_id$jscomp$1$$] && (this.connections[$stream_id$jscomp$1$$].congestion = $view$jscomp$30$$.getUint32(5, !0)); + if (this.connections[$stream_id$jscomp$1$$].congested) { + for (const $packet$jscomp$12$$ of this.congested_buffer) { + this.send_packet($packet$jscomp$12$$.data, $packet$jscomp$12$$.type, $stream_id$jscomp$1$$); + } + this.connections[$stream_id$jscomp$1$$].congested = !1; + } + break; + case 4: + this.connections[$stream_id$jscomp$1$$] && this.connections[$stream_id$jscomp$1$$].close_callback($view$jscomp$30$$.getUint8(5)); + delete this.connections[$stream_id$jscomp$1$$]; + break; + case 5: + $dbg_log$$("got a wisp V2 upgrade request, ignoring", 1048576); + break; + default: + $dbg_log$$("Wisp server returned unknown packet: " + $frame$$[0], 1048576); + } +}; +$WispNetworkAdapter$$.prototype.send_wisp_frame = function($frame_obj$$) { + let $full_packet$$, $view$jscomp$31$$; + switch($frame_obj$$.type) { + case "CONNECT": + const $hostname_buffer$$ = (new TextEncoder).encode($frame_obj$$.hostname); + $full_packet$$ = new Uint8Array(8 + $hostname_buffer$$.length); + $view$jscomp$31$$ = new DataView($full_packet$$.buffer); + $view$jscomp$31$$.setUint8(0, 1); + $view$jscomp$31$$.setUint32(1, $frame_obj$$.stream_id, !0); + $view$jscomp$31$$.setUint8(5, 1); + $view$jscomp$31$$.setUint16(6, $frame_obj$$.port, !0); + $full_packet$$.set($hostname_buffer$$, 8); + this.connections[$frame_obj$$.stream_id] = {data_callback:$frame_obj$$.data_callback, close_callback:$frame_obj$$.close_callback, congestion:this.connections[0].congestion}; + break; + case "DATA": + $full_packet$$ = new Uint8Array(5 + $frame_obj$$.data.length); + $view$jscomp$31$$ = new DataView($full_packet$$.buffer); + $view$jscomp$31$$.setUint8(0, 2); + $view$jscomp$31$$.setUint32(1, $frame_obj$$.stream_id, !0); + $full_packet$$.set($frame_obj$$.data, 5); + break; + case "CLOSE": + $full_packet$$ = new Uint8Array(6); + $view$jscomp$31$$ = new DataView($full_packet$$.buffer); + $view$jscomp$31$$.setUint8(0, 4); + $view$jscomp$31$$.setUint32(1, $frame_obj$$.stream_id, !0); + $view$jscomp$31$$.setUint8(5, $frame_obj$$.reason); + break; + default: + $dbg_log$$("Client tried to send unknown packet: " + $frame_obj$$.type, 1048576); + } + this.send_packet($full_packet$$, $frame_obj$$.type, $frame_obj$$.stream_id); +}; +$WispNetworkAdapter$$.prototype.destroy = function() { + this.wispws && (this.wispws.onmessage = null, this.wispws.onclose = null, this.wispws.close(), this.wispws = null); +}; +$WispNetworkAdapter$$.prototype.send = function($data$jscomp$228_reply$jscomp$16$$) { + let $packet$jscomp$13$$ = {}; + $parse_eth$$($data$jscomp$228_reply$jscomp$16$$, $packet$jscomp$13$$); + if ($packet$jscomp$13$$.tcp) { + $data$jscomp$228_reply$jscomp$16$$ = {}; + $data$jscomp$228_reply$jscomp$16$$.eth = {ethertype:2048, src:this.router_mac, dest:$packet$jscomp$13$$.eth.src}; + $data$jscomp$228_reply$jscomp$16$$.ipv4 = {proto:6, src:$packet$jscomp$13$$.ipv4.dest, dest:$packet$jscomp$13$$.ipv4.src}; + var $bop$jscomp$1_tuple$jscomp$2$$ = [$packet$jscomp$13$$.ipv4.src.join("."), $packet$jscomp$13$$.tcp.sport, $packet$jscomp$13$$.ipv4.dest.join("."), $packet$jscomp$13$$.tcp.dport].join(":"); + if ($packet$jscomp$13$$.tcp.syn) { + this.tcp_conn[$bop$jscomp$1_tuple$jscomp$2$$] && $dbg_log$$("SYN to already opened port", 16777216); + const $tcp_conn$$ = new $TCPConnection$$; + $tcp_conn$$.state = "syn-received"; + $tcp_conn$$.net = this; + $tcp_conn$$.tuple = $bop$jscomp$1_tuple$jscomp$2$$; + $tcp_conn$$.stream_id = this.last_stream++; + this.tcp_conn[$bop$jscomp$1_tuple$jscomp$2$$] = $tcp_conn$$; + $tcp_conn$$.on_data = $data$jscomp$229$$ => { + 0 !== $data$jscomp$229$$.length && this.send_wisp_frame({type:"DATA", stream_id:$tcp_conn$$.stream_id, data:$data$jscomp$229$$}); + }; + this.send_wisp_frame({type:"CONNECT", stream_id:$tcp_conn$$.stream_id, hostname:$packet$jscomp$13$$.ipv4.dest.join("."), port:$packet$jscomp$13$$.tcp.dport, data_callback:$data$jscomp$230$$ => { + $tcp_conn$$.write($data$jscomp$230$$); + }, close_callback:() => { + $tcp_conn$$.close(); + }}); + $tcp_conn$$.accept($packet$jscomp$13$$); + return; + } + if (!this.tcp_conn[$bop$jscomp$1_tuple$jscomp$2$$]) { + $dbg_log$$(`I dont know about ${$bop$jscomp$1_tuple$jscomp$2$$}, so restting`, 16777216); + $bop$jscomp$1_tuple$jscomp$2$$ = $packet$jscomp$13$$.tcp.ackn; + if ($packet$jscomp$13$$.tcp.fin || $packet$jscomp$13$$.tcp.syn) { + $bop$jscomp$1_tuple$jscomp$2$$ += 1; + } + $data$jscomp$228_reply$jscomp$16$$.tcp = {sport:$packet$jscomp$13$$.tcp.dport, dport:$packet$jscomp$13$$.tcp.sport, seq:$bop$jscomp$1_tuple$jscomp$2$$, ackn:$packet$jscomp$13$$.tcp.seq + ($packet$jscomp$13$$.tcp.syn ? 1 : 0), winsize:$packet$jscomp$13$$.tcp.winsize, rst:!0, ack:$packet$jscomp$13$$.tcp.syn}; + this.receive($make_packet$$($data$jscomp$228_reply$jscomp$16$$)); + return; + } + this.tcp_conn[$bop$jscomp$1_tuple$jscomp$2$$].process($packet$jscomp$13$$); + } + $packet$jscomp$13$$.arp && 1 === $packet$jscomp$13$$.arp.oper && 2048 === $packet$jscomp$13$$.arp.ptype && $arp_whohas$$($packet$jscomp$13$$, this); + $packet$jscomp$13$$.dns && (async() => { + let $reply$jscomp$17$$ = {}; + $reply$jscomp$17$$.eth = {ethertype:2048, src:this.router_mac, dest:$packet$jscomp$13$$.eth.src}; + $reply$jscomp$17$$.ipv4 = {proto:17, src:this.router_ip, dest:$packet$jscomp$13$$.ipv4.src, }; + $reply$jscomp$17$$.udp = {sport:53, dport:$packet$jscomp$13$$.udp.sport}; + const $result$jscomp$20$$ = await (await fetch(`https://${this.doh_server}/dns-query`, {method:"POST", headers:[["content-type", "application/dns-message"]], body:$packet$jscomp$13$$.udp.data})).arrayBuffer(); + $reply$jscomp$17$$.udp.data = new Uint8Array($result$jscomp$20$$); + this.receive($make_packet$$($reply$jscomp$17$$)); + })(); + $packet$jscomp$13$$.ntp ? $handle_fake_ntp$$($packet$jscomp$13$$, this) : $packet$jscomp$13$$.dhcp ? $handle_fake_dhcp$$($packet$jscomp$13$$, this) : $packet$jscomp$13$$.udp && 8 === $packet$jscomp$13$$.udp.dport && $handle_udp_echo$$($packet$jscomp$13$$, this); +}; +$WispNetworkAdapter$$.prototype.receive = function($data$jscomp$232$$) { + this.bus.send("net" + this.id + "-receive", new Uint8Array($data$jscomp$232$$)); +}; +function $FetchNetworkAdapter$$($bus$jscomp$26$$, $config$jscomp$7$$) { + $config$jscomp$7$$ = $config$jscomp$7$$ || {}; + this.bus = $bus$jscomp$26$$; + this.id = $config$jscomp$7$$.id || 0; + this.router_mac = new Uint8Array(($config$jscomp$7$$.router_mac || "52:54:0:1:2:3").split(":").map(function($x$jscomp$117$$) { + return parseInt($x$jscomp$117$$, 16); + })); + this.router_ip = new Uint8Array(($config$jscomp$7$$.router_ip || "192.168.86.1").split(".").map(function($x$jscomp$118$$) { + return parseInt($x$jscomp$118$$, 10); + })); + this.vm_ip = new Uint8Array(($config$jscomp$7$$.vm_ip || "192.168.86.100").split(".").map(function($x$jscomp$119$$) { + return parseInt($x$jscomp$119$$, 10); + })); + this.masquerade = void 0 === $config$jscomp$7$$.masquerade || !!$config$jscomp$7$$.masquerade; + this.vm_mac = new Uint8Array(6); + this.tcp_conn = {}; + this.cors_proxy = $config$jscomp$7$$.cors_proxy; + this.bus.register("net" + this.id + "-mac", function($mac$jscomp$2$$) { + this.vm_mac = new Uint8Array($mac$jscomp$2$$.split(":").map(function($x$jscomp$120$$) { + return parseInt($x$jscomp$120$$, 16); + })); + }, this); + this.bus.register("net" + this.id + "-send", function($data$jscomp$233$$) { + this.send($data$jscomp$233$$); + }, this); +} +$FetchNetworkAdapter$$.prototype.destroy = function() { +}; +$FetchNetworkAdapter$$.prototype.on_tcp_connection = function($adapter$jscomp$9$$, $packet$jscomp$14$$, $tuple$jscomp$3$$) { + if (80 === $packet$jscomp$14$$.tcp.dport) { + let $conn$jscomp$1$$ = new $TCPConnection$$; + $conn$jscomp$1$$.state = "syn-received"; + $conn$jscomp$1$$.net = this; + $conn$jscomp$1$$.on_data = $on_data_http$$; + $conn$jscomp$1$$.tuple = $tuple$jscomp$3$$; + $conn$jscomp$1$$.accept($packet$jscomp$14$$); + $adapter$jscomp$9$$.tcp_conn[$tuple$jscomp$3$$] = $conn$jscomp$1$$; + return !0; + } + return !1; +}; +async function $on_data_http$$($data$jscomp$234_headers_opts$$) { + if ($data$jscomp$234_headers_opts$$ && (this.read = this.read || "", (this.read += (new TextDecoder).decode($data$jscomp$234_headers_opts$$)) && -1 !== this.read.indexOf("\r\n\r\n"))) { + var $data$jscomp$235_offset$jscomp$71$$ = this.read.indexOf("\r\n\r\n"); + $data$jscomp$234_headers_opts$$ = this.read.substring(0, $data$jscomp$235_offset$jscomp$71$$).split(/\r\n/); + $data$jscomp$235_offset$jscomp$71$$ = this.read.substring($data$jscomp$235_offset$jscomp$71$$ + 4); + this.read = ""; + let $first_line$$ = $data$jscomp$234_headers_opts$$[0].split(" "), $target$jscomp$93$$; + $target$jscomp$93$$ = /^https?:/.test($first_line$$[1]) ? new URL($first_line$$[1]) : new URL("http://host" + $first_line$$[1]); + "undefined" !== typeof window && "http:" === $target$jscomp$93$$.protocol && "https:" === window.location.protocol && ($target$jscomp$93$$.protocol = "https:"); + let $req_headers$$ = new Headers; + for (let $i$jscomp$130$$ = 1; $i$jscomp$130$$ < $data$jscomp$234_headers_opts$$.length; ++$i$jscomp$130$$) { + let $parts$jscomp$7$$ = $data$jscomp$234_headers_opts$$[$i$jscomp$130$$].split(": "), $key$jscomp$39$$ = $parts$jscomp$7$$[0].toLowerCase(), $value$jscomp$199$$ = $parts$jscomp$7$$[1]; + "host" === $key$jscomp$39$$ ? $target$jscomp$93$$.host = $value$jscomp$199$$ : 1 < $key$jscomp$39$$.length && $req_headers$$.set($parts$jscomp$7$$[0], $value$jscomp$199$$); + } + $dbg_log$$("HTTP Dispatch: " + $target$jscomp$93$$.href, 16777216); + this.name = $target$jscomp$93$$.href; + $data$jscomp$234_headers_opts$$ = {method:$first_line$$[0], headers:$req_headers$$, }; + -1 !== ["put", "post"].indexOf($data$jscomp$234_headers_opts$$.method.toLowerCase()) && ($data$jscomp$234_headers_opts$$.body = $data$jscomp$235_offset$jscomp$71$$); + const [$resp$$, $ab$jscomp$2$$] = await this.net.fetch($target$jscomp$93$$.href, $data$jscomp$234_headers_opts$$), $lines$jscomp$1$$ = [`HTTP/1.1 ${$resp$$.status} ${$resp$$.statusText}`, "connection: Closed", "content-length: " + $ab$jscomp$2$$.byteLength]; + $lines$jscomp$1$$.push("x-was-fetch-redirected: " + String($resp$$.redirected)); + $lines$jscomp$1$$.push("x-fetch-resp-url: " + String($resp$$.url)); + $resp$$.headers.forEach(function($value$jscomp$200$$, $key$jscomp$40$$) { + -1 === ["content-encoding", "connection", "content-length", "transfer-encoding"].indexOf($key$jscomp$40$$.toLowerCase()) && $lines$jscomp$1$$.push($key$jscomp$40$$ + ": " + $value$jscomp$200$$); + }); + $lines$jscomp$1$$.push(""); + $lines$jscomp$1$$.push(""); + this.write((new TextEncoder).encode($lines$jscomp$1$$.join("\r\n"))); + this.write(new Uint8Array($ab$jscomp$2$$)); + } +} +$FetchNetworkAdapter$$.prototype.fetch = async function($url$jscomp$27$$, $headers$jscomp$1_options$jscomp$47$$) { + this.cors_proxy && ($url$jscomp$27$$ = this.cors_proxy + encodeURIComponent($url$jscomp$27$$)); + try { + const $resp$jscomp$1$$ = await fetch($url$jscomp$27$$, $headers$jscomp$1_options$jscomp$47$$), $ab$jscomp$3$$ = await $resp$jscomp$1$$.arrayBuffer(); + return [$resp$jscomp$1$$, $ab$jscomp$3$$]; + } catch ($e$jscomp$49$$) { + return console.warn("Fetch Failed: " + $url$jscomp$27$$ + "\n" + $e$jscomp$49$$), $headers$jscomp$1_options$jscomp$47$$ = new Headers, $headers$jscomp$1_options$jscomp$47$$.set("Content-Type", "text/plain"), [{status:502, statusText:"Fetch Error", headers:$headers$jscomp$1_options$jscomp$47$$, }, (new TextEncoder).encode(`Fetch ${$url$jscomp$27$$} failed:\n\n${$e$jscomp$49$$.stack}`).buffer]; + } +}; +$FetchNetworkAdapter$$.prototype.send = function($JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$) { + a: { + let $packet$jscomp$inline_283$$ = {}; + $parse_eth$$($JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$, $packet$jscomp$inline_283$$); + if ($packet$jscomp$inline_283$$.tcp) { + b: { + $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$ = {}; + $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$.eth = {ethertype:2048, src:this.router_mac, dest:$packet$jscomp$inline_283$$.eth.src}; + $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$.ipv4 = {proto:6, src:$packet$jscomp$inline_283$$.ipv4.dest, dest:$packet$jscomp$inline_283$$.ipv4.src}; + var $answers$jscomp$inline_289_bop$jscomp$inline_287_tuple$jscomp$inline_286$$ = [$packet$jscomp$inline_283$$.ipv4.src.join("."), $packet$jscomp$inline_283$$.tcp.sport, $packet$jscomp$inline_283$$.ipv4.dest.join("."), $packet$jscomp$inline_283$$.tcp.dport].join(":"); + if ($packet$jscomp$inline_283$$.tcp.syn && (this.tcp_conn[$answers$jscomp$inline_289_bop$jscomp$inline_287_tuple$jscomp$inline_286$$] && $dbg_log$$("SYN to already opened port", 16777216), this.on_tcp_connection(this, $packet$jscomp$inline_283$$, $answers$jscomp$inline_289_bop$jscomp$inline_287_tuple$jscomp$inline_286$$))) { + $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$ = void 0; + break b; + } + if (this.tcp_conn[$answers$jscomp$inline_289_bop$jscomp$inline_287_tuple$jscomp$inline_286$$]) { + this.tcp_conn[$answers$jscomp$inline_289_bop$jscomp$inline_287_tuple$jscomp$inline_286$$].process($packet$jscomp$inline_283$$), $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$ = void 0; + } else { + $dbg_log$$(`I dont know about ${$answers$jscomp$inline_289_bop$jscomp$inline_287_tuple$jscomp$inline_286$$}, so restting`, 16777216); + $answers$jscomp$inline_289_bop$jscomp$inline_287_tuple$jscomp$inline_286$$ = $packet$jscomp$inline_283$$.tcp.ackn; + if ($packet$jscomp$inline_283$$.tcp.fin || $packet$jscomp$inline_283$$.tcp.syn) { + $answers$jscomp$inline_289_bop$jscomp$inline_287_tuple$jscomp$inline_286$$ += 1; + } + $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$.tcp = {sport:$packet$jscomp$inline_283$$.tcp.dport, dport:$packet$jscomp$inline_283$$.tcp.sport, seq:$answers$jscomp$inline_289_bop$jscomp$inline_287_tuple$jscomp$inline_286$$, ackn:$packet$jscomp$inline_283$$.tcp.seq + ($packet$jscomp$inline_283$$.tcp.syn ? 1 : 0), winsize:$packet$jscomp$inline_283$$.tcp.winsize, rst:!0, ack:$packet$jscomp$inline_283$$.tcp.syn}; + this.receive($make_packet$$($JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$)); + $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$ = !0; + } + } + if ($JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$) { + break a; + } + } + $packet$jscomp$inline_283$$.arp && 1 === $packet$jscomp$inline_283$$.arp.oper && 2048 === $packet$jscomp$inline_283$$.arp.ptype && $arp_whohas$$($packet$jscomp$inline_283$$, this); + if ($packet$jscomp$inline_283$$.dns) { + $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$ = {}; + $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$.eth = {ethertype:2048, src:this.router_mac, dest:$packet$jscomp$inline_283$$.eth.src}; + $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$.ipv4 = {proto:17, src:this.router_ip, dest:$packet$jscomp$inline_283$$.ipv4.src, }; + $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$.udp = {sport:53, dport:$packet$jscomp$inline_283$$.udp.sport}; + $answers$jscomp$inline_289_bop$jscomp$inline_287_tuple$jscomp$inline_286$$ = []; + for (let $i$jscomp$inline_291$$ = 0; $i$jscomp$inline_291$$ < $packet$jscomp$inline_283$$.dns.questions.length; ++$i$jscomp$inline_291$$) { + let $q$jscomp$inline_292$$ = $packet$jscomp$inline_283$$.dns.questions[$i$jscomp$inline_291$$]; + switch($q$jscomp$inline_292$$.type) { + case 1: + $answers$jscomp$inline_289_bop$jscomp$inline_287_tuple$jscomp$inline_286$$.push({name:$q$jscomp$inline_292$$.name, type:$q$jscomp$inline_292$$.type, class:$q$jscomp$inline_292$$.class, ttl:600, data:[192, 168, 87, 1]}); + } + } + $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$.dns = {id:$packet$jscomp$inline_283$$.dns.id, flags:33152, questions:$packet$jscomp$inline_283$$.dns.questions, answers:$answers$jscomp$inline_289_bop$jscomp$inline_287_tuple$jscomp$inline_286$$}; + this.receive($make_packet$$($JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$)); + } else { + $packet$jscomp$inline_283$$.ntp && $handle_fake_ntp$$($packet$jscomp$inline_283$$, this) || ($packet$jscomp$inline_283$$.icmp && 8 === $packet$jscomp$inline_283$$.icmp.type && ($JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$ = {}, $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$.eth = {ethertype:2048, src:this.router_mac, + dest:$packet$jscomp$inline_283$$.eth.src}, $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$.ipv4 = {proto:1, src:this.router_ip, dest:$packet$jscomp$inline_283$$.ipv4.src, }, $JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$.icmp = {type:0, code:$packet$jscomp$inline_283$$.icmp.code, data:$packet$jscomp$inline_283$$.icmp.data}, + this.receive($make_packet$$($JSCompiler_inline_result$jscomp$inline_284_data$jscomp$236_reply$jscomp$inline_285_reply$jscomp$inline_288_reply$jscomp$inline_293$$))), $packet$jscomp$inline_283$$.dhcp && $handle_fake_dhcp$$($packet$jscomp$inline_283$$, this) || $packet$jscomp$inline_283$$.udp && 8 === $packet$jscomp$inline_283$$.udp.dport && $handle_udp_echo$$($packet$jscomp$inline_283$$, this)); + } + } +}; +$FetchNetworkAdapter$$.prototype.tcp_connect = function($dport$jscomp$1$$) { + return $fake_tcp_connect$$($dport$jscomp$1$$, this); +}; +$FetchNetworkAdapter$$.prototype.receive = function($data$jscomp$237$$) { + this.bus.send("net" + this.id + "-receive", new Uint8Array($data$jscomp$237$$)); +}; +"undefined" !== typeof module && "undefined" !== typeof module.exports && (module.exports.FetchNetworkAdapter = $FetchNetworkAdapter$$); +const $print_stats$$ = {stats_to_string:function($cpu$jscomp$26$$) { + return $print_stats$$.print_misc_stats($cpu$jscomp$26$$) + $print_stats$$.print_instruction_counts($cpu$jscomp$26$$); +}, print_misc_stats:function($cpu$jscomp$27$$) { + let $text$jscomp$12$$ = ""; + var $stat_names_tlb_entries$$ = "COMPILE COMPILE_SKIPPED_NO_NEW_ENTRY_POINTS COMPILE_WRONG_ADDRESS_SPACE COMPILE_CUT_OFF_AT_END_OF_PAGE COMPILE_WITH_LOOP_SAFETY COMPILE_PAGE COMPILE_PAGE/COMPILE COMPILE_BASIC_BLOCK COMPILE_DUPLICATED_BASIC_BLOCK COMPILE_WASM_BLOCK COMPILE_WASM_LOOP COMPILE_DISPATCHER COMPILE_ENTRY_POINT COMPILE_WASM_TOTAL_BYTES COMPILE_WASM_TOTAL_BYTES/COMPILE_PAGE RUN_INTERPRETED RUN_INTERPRETED_NEW_PAGE RUN_INTERPRETED_PAGE_HAS_CODE RUN_INTERPRETED_PAGE_HAS_ENTRY_AFTER_PAGE_WALK RUN_INTERPRETED_NEAR_END_OF_PAGE RUN_INTERPRETED_DIFFERENT_STATE RUN_INTERPRETED_DIFFERENT_STATE_CPL3 RUN_INTERPRETED_DIFFERENT_STATE_FLAT RUN_INTERPRETED_DIFFERENT_STATE_IS32 RUN_INTERPRETED_DIFFERENT_STATE_SS32 RUN_INTERPRETED_MISSED_COMPILED_ENTRY_RUN_INTERPRETED RUN_INTERPRETED_STEPS RUN_FROM_CACHE RUN_FROM_CACHE_STEPS RUN_FROM_CACHE_STEPS/RUN_FROM_CACHE RUN_FROM_CACHE_STEPS/RUN_INTERPRETED_STEPS DIRECT_EXIT INDIRECT_JUMP INDIRECT_JUMP_NO_ENTRY NORMAL_PAGE_CHANGE NORMAL_FALLTHRU NORMAL_FALLTHRU_WITH_TARGET_BLOCK NORMAL_BRANCH NORMAL_BRANCH_WITH_TARGET_BLOCK CONDITIONAL_JUMP CONDITIONAL_JUMP_PAGE_CHANGE CONDITIONAL_JUMP_EXIT CONDITIONAL_JUMP_FALLTHRU CONDITIONAL_JUMP_FALLTHRU_WITH_TARGET_BLOCK CONDITIONAL_JUMP_BRANCH CONDITIONAL_JUMP_BRANCH_WITH_TARGET_BLOCK DISPATCHER_SMALL DISPATCHER_LARGE LOOP LOOP_SAFETY CONDITION_OPTIMISED CONDITION_UNOPTIMISED CONDITION_UNOPTIMISED_PF CONDITION_UNOPTIMISED_UNHANDLED_L CONDITION_UNOPTIMISED_UNHANDLED_LE FAILED_PAGE_CHANGE SAFE_READ_FAST SAFE_READ_SLOW_PAGE_CROSSED SAFE_READ_SLOW_NOT_VALID SAFE_READ_SLOW_NOT_USER SAFE_READ_SLOW_IN_MAPPED_RANGE SAFE_WRITE_FAST SAFE_WRITE_SLOW_PAGE_CROSSED SAFE_WRITE_SLOW_NOT_VALID SAFE_WRITE_SLOW_NOT_USER SAFE_WRITE_SLOW_IN_MAPPED_RANGE SAFE_WRITE_SLOW_READ_ONLY SAFE_WRITE_SLOW_HAS_CODE SAFE_READ_WRITE_FAST SAFE_READ_WRITE_SLOW_PAGE_CROSSED SAFE_READ_WRITE_SLOW_NOT_VALID SAFE_READ_WRITE_SLOW_NOT_USER SAFE_READ_WRITE_SLOW_IN_MAPPED_RANGE SAFE_READ_WRITE_SLOW_READ_ONLY SAFE_READ_WRITE_SLOW_HAS_CODE PAGE_FAULT TLB_MISS MAIN_LOOP MAIN_LOOP_IDLE DO_MANY_CYCLES CYCLE_INTERNAL INVALIDATE_ALL_MODULES_NO_FREE_WASM_INDICES INVALIDATE_MODULE_WRITTEN_WHILE_COMPILED INVALIDATE_MODULE_UNUSED_AFTER_OVERWRITE INVALIDATE_MODULE_DIRTY_PAGE INVALIDATE_PAGE_HAD_CODE INVALIDATE_PAGE_HAD_ENTRY_POINTS DIRTY_PAGE_DID_NOT_HAVE_CODE RUN_FROM_CACHE_EXIT_SAME_PAGE RUN_FROM_CACHE_EXIT_NEAR_END_OF_PAGE RUN_FROM_CACHE_EXIT_DIFFERENT_PAGE CLEAR_TLB FULL_CLEAR_TLB TLB_FULL TLB_GLOBAL_FULL MODRM_SIMPLE_REG MODRM_SIMPLE_REG_WITH_OFFSET MODRM_SIMPLE_CONST_OFFSET MODRM_COMPLEX SEG_OFFSET_OPTIMISED SEG_OFFSET_NOT_OPTIMISED SEG_OFFSET_NOT_OPTIMISED_ES SEG_OFFSET_NOT_OPTIMISED_FS SEG_OFFSET_NOT_OPTIMISED_GS SEG_OFFSET_NOT_OPTIMISED_NOT_FLAT".split(" "), + $global_tlb_entries_j$jscomp$12$$ = 0; + const $stat_values$$ = {}; + for (let $i$jscomp$131$$ = 0; $i$jscomp$131$$ < $stat_names_tlb_entries$$.length; $i$jscomp$131$$++) { + const $name$jscomp$94$$ = $stat_names_tlb_entries$$[$i$jscomp$131$$]; + var $stat_value$jscomp$201$$ = void 0; + if ($name$jscomp$94$$.includes("/")) { + $global_tlb_entries_j$jscomp$12$$++; + const [$left$jscomp$5$$, $right$jscomp$5$$] = $name$jscomp$94$$.split("/"); + $stat_value$jscomp$201$$ = $stat_values$$[$left$jscomp$5$$] / $stat_values$$[$right$jscomp$5$$]; + } else { + $stat_value$jscomp$201$$ = $stat_values$$[$name$jscomp$94$$] = $cpu$jscomp$27$$.wm.exports.profiler_stat_get($i$jscomp$131$$ - $global_tlb_entries_j$jscomp$12$$), $stat_value$jscomp$201$$ = 100e6 <= $stat_value$jscomp$201$$ ? Math.round($stat_value$jscomp$201$$ / 1e6) + "m" : 100e3 <= $stat_value$jscomp$201$$ ? Math.round($stat_value$jscomp$201$$ / 1e3) + "k" : $stat_value$jscomp$201$$; + } + $text$jscomp$12$$ += $name$jscomp$94$$ + "=" + $stat_value$jscomp$201$$ + "\n"; + } + $text$jscomp$12$$ += "\n"; + $stat_names_tlb_entries$$ = $cpu$jscomp$27$$.wm.exports.get_valid_tlb_entries_count(); + $global_tlb_entries_j$jscomp$12$$ = $cpu$jscomp$27$$.wm.exports.get_valid_global_tlb_entries_count(); + $text$jscomp$12$$ = $text$jscomp$12$$ + ("TLB_ENTRIES=" + $stat_names_tlb_entries$$ + " (" + $global_tlb_entries_j$jscomp$12$$ + " global, " + ($stat_names_tlb_entries$$ - $global_tlb_entries_j$jscomp$12$$) + " non-global)\nWASM_TABLE_FREE=") + ($cpu$jscomp$27$$.wm.exports.jit_get_wasm_table_index_free_list_count() + "\n"); + $text$jscomp$12$$ += "JIT_CACHE_SIZE=" + $cpu$jscomp$27$$.wm.exports.jit_get_cache_size() + "\n"; + $text$jscomp$12$$ += "FLAT_SEGMENTS=" + $cpu$jscomp$27$$.wm.exports.has_flat_segmentation() + "\n"; + $text$jscomp$12$$ += "wasm memory size: " + ($cpu$jscomp$27$$.wasm_memory.buffer.byteLength >> 20) + "m\n"; + $text$jscomp$12$$ = $text$jscomp$12$$ + "Config:\nJIT_DISABLED=" + ($cpu$jscomp$27$$.wm.exports.get_jit_config(0) + "\n"); + $text$jscomp$12$$ += "MAX_PAGES=" + $cpu$jscomp$27$$.wm.exports.get_jit_config(1) + "\n"; + $text$jscomp$12$$ += "JIT_USE_LOOP_SAFETY=" + !!$cpu$jscomp$27$$.wm.exports.get_jit_config(2) + "\n"; + return $text$jscomp$12$$ += "MAX_EXTRA_BASIC_BLOCKS=" + $cpu$jscomp$27$$.wm.exports.get_jit_config(3) + "\n"; +}, print_instruction_counts:function($cpu$jscomp$28$$) { + return [$print_stats$$.print_instruction_counts_offset($cpu$jscomp$28$$, !1, !1, !1, !1), $print_stats$$.print_instruction_counts_offset($cpu$jscomp$28$$, !0, !1, !1, !1), $print_stats$$.print_instruction_counts_offset($cpu$jscomp$28$$, !1, !0, !1, !1), $print_stats$$.print_instruction_counts_offset($cpu$jscomp$28$$, !1, !1, !0, !1), $print_stats$$.print_instruction_counts_offset($cpu$jscomp$28$$, !1, !1, !1, !0), ].join("\n\n"); +}, print_instruction_counts_offset:function($cpu$jscomp$29_total$jscomp$2$$, $compiled_per_opcode0f_prefixes$$, $jit_exit_per_opcode$$, $max_count_pad_length_unguarded_register$$, $i$jscomp$132_wasm_size$$) { + let $text$jscomp$13$$ = ""; + var $counts_opcode_description_top_counts$$ = [], $i$jscomp$133_label$jscomp$9$$ = $compiled_per_opcode0f_prefixes$$ ? "compiled" : $jit_exit_per_opcode$$ ? "jit exit" : $max_count_pad_length_unguarded_register$$ ? "unguarded register" : $i$jscomp$132_wasm_size$$ ? "wasm size" : "executed"; + for (let $opcode$$ = 0; 256 > $opcode$$; $opcode$$++) { + for (let $fixed_g$$ = 0; 8 > $fixed_g$$; $fixed_g$$++) { + for (const $is_mem$$ of [!1, !0]) { + var $count$jscomp$58_count_0f$$ = $cpu$jscomp$29_total$jscomp$2$$.wm.exports.get_opstats_buffer($compiled_per_opcode0f_prefixes$$, $jit_exit_per_opcode$$, $max_count_pad_length_unguarded_register$$, $i$jscomp$132_wasm_size$$, $opcode$$, !1, $is_mem$$, $fixed_g$$); + $counts_opcode_description_top_counts$$.push({opcode:$opcode$$, count:$count$jscomp$58_count_0f$$, is_mem:$is_mem$$, fixed_g:$fixed_g$$}); + $count$jscomp$58_count_0f$$ = $cpu$jscomp$29_total$jscomp$2$$.wm.exports.get_opstats_buffer($compiled_per_opcode0f_prefixes$$, $jit_exit_per_opcode$$, $max_count_pad_length_unguarded_register$$, $i$jscomp$132_wasm_size$$, $opcode$$, !0, $is_mem$$, $fixed_g$$); + $counts_opcode_description_top_counts$$.push({opcode:3840 | $opcode$$, count:$count$jscomp$58_count_0f$$, is_mem:$is_mem$$, fixed_g:$fixed_g$$}); + } + } + } + $cpu$jscomp$29_total$jscomp$2$$ = 0; + $compiled_per_opcode0f_prefixes$$ = new Set([38, 46, 54, 62, 100, 101, 102, 103, 240, 242, 243, ]); + for (const {count:$count$jscomp$59$$, opcode:$opcode$jscomp$1$$} of $counts_opcode_description_top_counts$$) { + $compiled_per_opcode0f_prefixes$$.has($opcode$jscomp$1$$) || ($cpu$jscomp$29_total$jscomp$2$$ += $count$jscomp$59$$); + } + if (0 === $cpu$jscomp$29_total$jscomp$2$$) { + return ""; + } + $jit_exit_per_opcode$$ = new Uint32Array(256); + $compiled_per_opcode0f_prefixes$$ = new Uint32Array(256); + for (const {opcode:$opcode$jscomp$2$$, count:$count$jscomp$60$$} of $counts_opcode_description_top_counts$$) { + 3840 === ($opcode$jscomp$2$$ & 65280) ? $compiled_per_opcode0f_prefixes$$[$opcode$jscomp$2$$ & 255] += $count$jscomp$60$$ : $jit_exit_per_opcode$$[$opcode$jscomp$2$$ & 255] += $count$jscomp$60$$; + } + $text$jscomp$13$$ = $text$jscomp$13$$ + "------------------\nTotal: " + ($cpu$jscomp$29_total$jscomp$2$$ + "\n"); + const $factor$jscomp$2$$ = 1e7 < $cpu$jscomp$29_total$jscomp$2$$ ? 1000 : 1; + $max_count_pad_length_unguarded_register$$ = Math.max.apply(Math, $counts_opcode_description_top_counts$$.map(({count:$count$jscomp$61$$}) => Math.round($count$jscomp$61$$ / $factor$jscomp$2$$))); + $max_count_pad_length_unguarded_register$$ = String($max_count_pad_length_unguarded_register$$).length; + $text$jscomp$13$$ += `Instruction counts ${$i$jscomp$133_label$jscomp$9$$} (in ${$factor$jscomp$2$$}):\n`; + for ($i$jscomp$132_wasm_size$$ = 0; 256 > $i$jscomp$132_wasm_size$$; $i$jscomp$132_wasm_size$$++) { + $text$jscomp$13$$ += $i$jscomp$132_wasm_size$$.toString(16).padStart(2, "0") + ":" + $v86util$$.pads(Math.round($jit_exit_per_opcode$$[$i$jscomp$132_wasm_size$$] / $factor$jscomp$2$$), $max_count_pad_length_unguarded_register$$), $text$jscomp$13$$ = 15 === $i$jscomp$132_wasm_size$$ % 16 ? $text$jscomp$13$$ + "\n" : $text$jscomp$13$$ + " "; + } + $text$jscomp$13$$ = $text$jscomp$13$$ + "\n" + `Instruction counts ${$i$jscomp$133_label$jscomp$9$$} (0f, in ${$factor$jscomp$2$$}):\n`; + for ($i$jscomp$133_label$jscomp$9$$ = 0; 256 > $i$jscomp$133_label$jscomp$9$$; $i$jscomp$133_label$jscomp$9$$++) { + $text$jscomp$13$$ += ($i$jscomp$133_label$jscomp$9$$ & 255).toString(16).padStart(2, "0") + ":" + $v86util$$.pads(Math.round($compiled_per_opcode0f_prefixes$$[$i$jscomp$133_label$jscomp$9$$] / $factor$jscomp$2$$), $max_count_pad_length_unguarded_register$$), $text$jscomp$13$$ = 15 === $i$jscomp$133_label$jscomp$9$$ % 16 ? $text$jscomp$13$$ + "\n" : $text$jscomp$13$$ + " "; + } + $text$jscomp$13$$ += "\n"; + $counts_opcode_description_top_counts$$ = $counts_opcode_description_top_counts$$.filter(({count:$count$jscomp$62$$}) => $count$jscomp$62$$).sort(({count:$count1$$}, {count:$count2$$}) => $count2$$ - $count1$$); + for (const {opcode:$opcode$jscomp$3$$, is_mem:$is_mem$jscomp$1$$, fixed_g:$fixed_g$jscomp$1$$, count:$count$jscomp$63$$} of $counts_opcode_description_top_counts$$.slice(0, 200)) { + $counts_opcode_description_top_counts$$ = $opcode$jscomp$3$$.toString(16) + "_" + $fixed_g$jscomp$1$$ + ($is_mem$jscomp$1$$ ? "_m" : "_r"), $text$jscomp$13$$ += $counts_opcode_description_top_counts$$ + ":" + ($count$jscomp$63$$ / $cpu$jscomp$29_total$jscomp$2$$ * 100).toFixed(2) + " "; + } + return $text$jscomp$13$$ + "\n"; +}, }; +"undefined" !== typeof module && "undefined" !== typeof module.exports && (module.exports.print_stats = $print_stats$$); +function $MemoryFileStorage$$() { + this.filedata = new Map; +} +$MemoryFileStorage$$.prototype.read = async function($data$jscomp$239_sha256sum$jscomp$3$$, $offset$jscomp$73$$, $count$jscomp$65$$) { + $dbg_assert$$($data$jscomp$239_sha256sum$jscomp$3$$, "MemoryFileStorage read: sha256sum should be a non-empty string"); + return ($data$jscomp$239_sha256sum$jscomp$3$$ = this.filedata.get($data$jscomp$239_sha256sum$jscomp$3$$)) ? $data$jscomp$239_sha256sum$jscomp$3$$.subarray($offset$jscomp$73$$, $offset$jscomp$73$$ + $count$jscomp$65$$) : null; +}; +$MemoryFileStorage$$.prototype.cache = async function($sha256sum$jscomp$4$$, $data$jscomp$240$$) { + $dbg_assert$$($sha256sum$jscomp$4$$, "MemoryFileStorage cache: sha256sum should be a non-empty string"); + this.filedata.set($sha256sum$jscomp$4$$, $data$jscomp$240$$); +}; +$MemoryFileStorage$$.prototype.uncache = function($sha256sum$jscomp$5$$) { + this.filedata.delete($sha256sum$jscomp$5$$); +}; +function $ServerFileStorageWrapper$$($file_storage$jscomp$2$$, $baseurl$jscomp$1$$) { + $dbg_assert$$($baseurl$jscomp$1$$, "ServerMemoryFileStorage: baseurl should not be empty"); + $baseurl$jscomp$1$$.endsWith("/") || ($baseurl$jscomp$1$$ += "/"); + this.storage = $file_storage$jscomp$2$$; + this.baseurl = $baseurl$jscomp$1$$; +} +$ServerFileStorageWrapper$$.prototype.load_from_server = function($sha256sum$jscomp$6$$) { + return new Promise($resolve$jscomp$4$$ => { + $v86util$$.load_file(this.baseurl + $sha256sum$jscomp$6$$, {done:async $buffer$jscomp$52_data$jscomp$241$$ => { + $buffer$jscomp$52_data$jscomp$241$$ = new Uint8Array($buffer$jscomp$52_data$jscomp$241$$); + await this.cache($sha256sum$jscomp$6$$, $buffer$jscomp$52_data$jscomp$241$$); + $resolve$jscomp$4$$($buffer$jscomp$52_data$jscomp$241$$); + }}); + }); +}; +$ServerFileStorageWrapper$$.prototype.read = async function($sha256sum$jscomp$7$$, $offset$jscomp$74$$, $count$jscomp$66$$) { + const $data$jscomp$242$$ = await this.storage.read($sha256sum$jscomp$7$$, $offset$jscomp$74$$, $count$jscomp$66$$); + return $data$jscomp$242$$ ? $data$jscomp$242$$ : (await this.load_from_server($sha256sum$jscomp$7$$)).subarray($offset$jscomp$74$$, $offset$jscomp$74$$ + $count$jscomp$66$$); +}; +$ServerFileStorageWrapper$$.prototype.cache = async function($sha256sum$jscomp$8$$, $data$jscomp$243$$) { + return await this.storage.cache($sha256sum$jscomp$8$$, $data$jscomp$243$$); +}; +$ServerFileStorageWrapper$$.prototype.uncache = function($sha256sum$jscomp$9$$) { + this.storage.uncache($sha256sum$jscomp$9$$); +}; +var $S_IFREG$$ = 32768, $S_IFDIR$$ = 16384, $STATUS_UNLINKED$$ = 4; +function $FS$$($storage$$, $qidcounter$$) { + this.inodes = []; + this.events = []; + this.storage = $storage$$; + this.qidcounter = $qidcounter$$ || {last_qidnumber:0}; + this.inodedata = {}; + this.total_size = 274877906944; + this.used_size = 0; + this.mounts = []; + this.CreateDirectory("", -1); +} +$FS$$.prototype.get_state = function() { + let $state$jscomp$55$$ = []; + $state$jscomp$55$$[0] = this.inodes; + $state$jscomp$55$$[1] = this.qidcounter.last_qidnumber; + $state$jscomp$55$$[2] = []; + for (const [$id$jscomp$13$$, $data$jscomp$244$$] of Object.entries(this.inodedata)) { + 0 === (this.inodes[$id$jscomp$13$$].mode & $S_IFDIR$$) && $state$jscomp$55$$[2].push([$id$jscomp$13$$, $data$jscomp$244$$]); + } + $state$jscomp$55$$[3] = this.total_size; + $state$jscomp$55$$[4] = this.used_size; + return $state$jscomp$55$$ = $state$jscomp$55$$.concat(this.mounts); +}; +$FS$$.prototype.set_state = function($state$jscomp$56$$) { + this.inodes = $state$jscomp$56$$[0].map($state$jscomp$57$$ => { + const $inode$jscomp$1$$ = new $Inode$$(0); + $inode$jscomp$1$$.set_state($state$jscomp$57$$); + return $inode$jscomp$1$$; + }); + this.qidcounter.last_qidnumber = $state$jscomp$56$$[1]; + this.inodedata = {}; + for (let [$key$jscomp$41$$, $value$jscomp$202$$] of $state$jscomp$56$$[2]) { + $value$jscomp$202$$.buffer.byteLength !== $value$jscomp$202$$.byteLength && ($value$jscomp$202$$ = $value$jscomp$202$$.slice()), this.inodedata[$key$jscomp$41$$] = $value$jscomp$202$$; + } + this.total_size = $state$jscomp$56$$[3]; + this.used_size = $state$jscomp$56$$[4]; + this.mounts = $state$jscomp$56$$.slice(5); +}; +$FS$$.prototype.AddEvent = function($id$jscomp$14$$, $OnEvent$$) { + var $inode$jscomp$2$$ = this.inodes[$id$jscomp$14$$]; + 0 === $inode$jscomp$2$$.status || 2 === $inode$jscomp$2$$.status ? $OnEvent$$() : this.is_forwarder($inode$jscomp$2$$) ? this.follow_fs($inode$jscomp$2$$).AddEvent($inode$jscomp$2$$.foreign_id, $OnEvent$$) : this.events.push({id:$id$jscomp$14$$, OnEvent:$OnEvent$$}); +}; +$FS$$.prototype.HandleEvent = function($id$jscomp$15$$) { + var $inode$jscomp$3_newevents$$ = this.inodes[$id$jscomp$15$$]; + this.is_forwarder($inode$jscomp$3_newevents$$) && this.follow_fs($inode$jscomp$3_newevents$$).HandleEvent($inode$jscomp$3_newevents$$.foreign_id); + $inode$jscomp$3_newevents$$ = []; + for (var $i$jscomp$134$$ = 0; $i$jscomp$134$$ < this.events.length; $i$jscomp$134$$++) { + this.events[$i$jscomp$134$$].id === $id$jscomp$15$$ ? this.events[$i$jscomp$134$$].OnEvent() : $inode$jscomp$3_newevents$$.push(this.events[$i$jscomp$134$$]); + } + this.events = $inode$jscomp$3_newevents$$; +}; +$FS$$.prototype.load_from_json = function($fs$jscomp$3_i$jscomp$135$$) { + $dbg_assert$$($fs$jscomp$3_i$jscomp$135$$, "Invalid fs passed to load_from_json"); + if (3 !== $fs$jscomp$3_i$jscomp$135$$.version) { + throw "The filesystem JSON format has changed. Please update your fs2json (https://github.com/copy/fs2json) and recreate the filesystem JSON."; + } + var $fsroot$$ = $fs$jscomp$3_i$jscomp$135$$.fsroot; + this.used_size = $fs$jscomp$3_i$jscomp$135$$.size; + for ($fs$jscomp$3_i$jscomp$135$$ = 0; $fs$jscomp$3_i$jscomp$135$$ < $fsroot$$.length; $fs$jscomp$3_i$jscomp$135$$++) { + this.LoadRecursive($fsroot$$[$fs$jscomp$3_i$jscomp$135$$], 0); + } +}; +$FS$$.prototype.LoadRecursive = function($data$jscomp$245$$, $parentid$$) { + var $inode$jscomp$4$$ = this.CreateInode(); + const $name$jscomp$95$$ = $data$jscomp$245$$[0]; + $inode$jscomp$4$$.size = $data$jscomp$245$$[1]; + $inode$jscomp$4$$.mtime = $data$jscomp$245$$[2]; + $inode$jscomp$4$$.ctime = $inode$jscomp$4$$.mtime; + $inode$jscomp$4$$.atime = $inode$jscomp$4$$.mtime; + $inode$jscomp$4$$.mode = $data$jscomp$245$$[3]; + $inode$jscomp$4$$.uid = $data$jscomp$245$$[4]; + $inode$jscomp$4$$.gid = $data$jscomp$245$$[5]; + var $ifmt$$ = $inode$jscomp$4$$.mode & 61440; + $ifmt$$ === $S_IFDIR$$ ? (this.PushInode($inode$jscomp$4$$, $parentid$$, $name$jscomp$95$$), this.LoadDir(this.inodes.length - 1, $data$jscomp$245$$[6])) : $ifmt$$ === $S_IFREG$$ ? ($inode$jscomp$4$$.status = 2, $inode$jscomp$4$$.sha256sum = $data$jscomp$245$$[6], $dbg_assert$$($inode$jscomp$4$$.sha256sum), this.PushInode($inode$jscomp$4$$, $parentid$$, $name$jscomp$95$$)) : 40960 === $ifmt$$ ? ($inode$jscomp$4$$.symlink = $data$jscomp$245$$[6], this.PushInode($inode$jscomp$4$$, $parentid$$, $name$jscomp$95$$)) : + 49152 !== $ifmt$$ && $dbg_log$$("Unexpected ifmt: " + $h$$($ifmt$$) + " (" + $name$jscomp$95$$ + ")"); +}; +$FS$$.prototype.LoadDir = function($parentid$jscomp$1$$, $children$jscomp$2$$) { + for (var $i$jscomp$136$$ = 0; $i$jscomp$136$$ < $children$jscomp$2$$.length; $i$jscomp$136$$++) { + this.LoadRecursive($children$jscomp$2$$[$i$jscomp$136$$], $parentid$jscomp$1$$); + } +}; +$FS$$.prototype.should_be_linked = function($inode$jscomp$5$$) { + return !this.is_forwarder($inode$jscomp$5$$) || 0 === $inode$jscomp$5$$.foreign_id; +}; +$FS$$.prototype.link_under_dir = function($parentid$jscomp$2$$, $idx$jscomp$3$$, $name$jscomp$96$$) { + const $inode$jscomp$6$$ = this.inodes[$idx$jscomp$3$$], $parent_inode$$ = this.inodes[$parentid$jscomp$2$$]; + $dbg_assert$$(!this.is_forwarder($parent_inode$$), "Filesystem: Shouldn't link under fowarder parents"); + $dbg_assert$$(this.IsDirectory($parentid$jscomp$2$$), "Filesystem: Can't link under non-directories"); + $dbg_assert$$(this.should_be_linked($inode$jscomp$6$$), "Filesystem: Can't link across filesystems apart from their root"); + $dbg_assert$$(0 <= $inode$jscomp$6$$.nlinks, "Filesystem: Found negative nlinks value of " + $inode$jscomp$6$$.nlinks); + $dbg_assert$$(!$parent_inode$$.direntries.has($name$jscomp$96$$), "Filesystem: Name '" + $name$jscomp$96$$ + "' is already taken"); + $parent_inode$$.direntries.set($name$jscomp$96$$, $idx$jscomp$3$$); + $inode$jscomp$6$$.nlinks++; + this.IsDirectory($idx$jscomp$3$$) && ($dbg_assert$$(!$inode$jscomp$6$$.direntries.has(".."), "Filesystem: Cannot link a directory twice"), $inode$jscomp$6$$.direntries.has(".") || $inode$jscomp$6$$.nlinks++, $inode$jscomp$6$$.direntries.set(".", $idx$jscomp$3$$), $inode$jscomp$6$$.direntries.set("..", $parentid$jscomp$2$$), $parent_inode$$.nlinks++); +}; +$FS$$.prototype.unlink_from_dir = function($parentid$jscomp$3$$, $name$jscomp$97$$) { + const $idx$jscomp$4$$ = this.Search($parentid$jscomp$3$$, $name$jscomp$97$$), $inode$jscomp$7$$ = this.inodes[$idx$jscomp$4$$], $parent_inode$jscomp$1$$ = this.inodes[$parentid$jscomp$3$$]; + $dbg_assert$$(!this.is_forwarder($parent_inode$jscomp$1$$), "Filesystem: Can't unlink from forwarders"); + $dbg_assert$$(this.IsDirectory($parentid$jscomp$3$$), "Filesystem: Can't unlink from non-directories"); + $parent_inode$jscomp$1$$.direntries.delete($name$jscomp$97$$) ? ($inode$jscomp$7$$.nlinks--, this.IsDirectory($idx$jscomp$4$$) && ($dbg_assert$$($inode$jscomp$7$$.direntries.get("..") === $parentid$jscomp$3$$, "Filesystem: Found directory with bad parent id"), $inode$jscomp$7$$.direntries.delete(".."), $parent_inode$jscomp$1$$.nlinks--), $dbg_assert$$(0 <= $inode$jscomp$7$$.nlinks, "Filesystem: Found negative nlinks value of " + $inode$jscomp$7$$.nlinks)) : $dbg_assert$$(!1, "Filesystem: Can't unlink non-existent file: " + + $name$jscomp$97$$); +}; +$FS$$.prototype.PushInode = function($inode$jscomp$8$$, $parentid$jscomp$4$$, $name$jscomp$98$$) { + -1 !== $parentid$jscomp$4$$ ? (this.inodes.push($inode$jscomp$8$$), $inode$jscomp$8$$.fid = this.inodes.length - 1, this.link_under_dir($parentid$jscomp$4$$, $inode$jscomp$8$$.fid, $name$jscomp$98$$)) : 0 === this.inodes.length ? (this.inodes.push($inode$jscomp$8$$), $inode$jscomp$8$$.direntries.set(".", 0), $inode$jscomp$8$$.direntries.set("..", 0), $inode$jscomp$8$$.nlinks = 2) : ($message$$.Debug("Error in Filesystem: Pushed inode with name = " + $name$jscomp$98$$ + " has no parent"), $message$$.Abort()); +}; +function $Inode$$($qidnumber$$) { + this.direntries = new Map; + this.minor = this.major = this.mtime = this.atime = this.ctime = this.fid = this.gid = this.uid = this.size = this.status = 0; + this.symlink = ""; + this.mode = 493; + this.qid = {type:0, version:0, path:$qidnumber$$, }; + this.caps = void 0; + this.nlinks = 0; + this.sha256sum = ""; + this.locks = []; + this.foreign_id = this.mount_id = -1; +} +$Inode$$.prototype.get_state = function() { + const $state$jscomp$58$$ = []; + $state$jscomp$58$$[0] = this.mode; + $state$jscomp$58$$[1] = (this.mode & 61440) === $S_IFDIR$$ ? [...this.direntries] : (this.mode & 61440) === $S_IFREG$$ ? this.sha256sum : 40960 === (this.mode & 61440) ? this.symlink : 49152 === (this.mode & 61440) ? [this.minor, this.major] : null; + $state$jscomp$58$$[2] = this.locks; + $state$jscomp$58$$[3] = this.status; + $state$jscomp$58$$[4] = this.size; + $state$jscomp$58$$[5] = this.uid; + $state$jscomp$58$$[6] = this.gid; + $state$jscomp$58$$[7] = this.fid; + $state$jscomp$58$$[8] = this.ctime; + $state$jscomp$58$$[9] = this.atime; + $state$jscomp$58$$[10] = this.mtime; + $state$jscomp$58$$[11] = this.qid.version; + $state$jscomp$58$$[12] = this.qid.path; + $state$jscomp$58$$[13] = this.nlinks; + return $state$jscomp$58$$; +}; +$Inode$$.prototype.set_state = function($state$jscomp$59$$) { + this.mode = $state$jscomp$59$$[0]; + if ((this.mode & 61440) === $S_IFDIR$$) { + this.direntries = new Map; + for (const [$name$jscomp$99$$, $entry$jscomp$13$$] of $state$jscomp$59$$[1]) { + this.direntries.set($name$jscomp$99$$, $entry$jscomp$13$$); + } + } else { + (this.mode & 61440) === $S_IFREG$$ ? this.sha256sum = $state$jscomp$59$$[1] : 40960 === (this.mode & 61440) ? this.symlink = $state$jscomp$59$$[1] : 49152 === (this.mode & 61440) && ([this.minor, this.major] = $state$jscomp$59$$[1]); + } + this.locks = []; + for (const $lock_state$$ of $state$jscomp$59$$[2]) { + const $lock$$ = new $FSLockRegion$$; + $lock$$.set_state($lock_state$$); + this.locks.push($lock$$); + } + this.status = $state$jscomp$59$$[3]; + this.size = $state$jscomp$59$$[4]; + this.uid = $state$jscomp$59$$[5]; + this.gid = $state$jscomp$59$$[6]; + this.fid = $state$jscomp$59$$[7]; + this.ctime = $state$jscomp$59$$[8]; + this.atime = $state$jscomp$59$$[9]; + this.mtime = $state$jscomp$59$$[10]; + this.qid.type = (this.mode & 61440) >> 8; + this.qid.version = $state$jscomp$59$$[11]; + this.qid.path = $state$jscomp$59$$[12]; + this.nlinks = $state$jscomp$59$$[13]; +}; +$FS$$.prototype.divert = function($parentid$jscomp$5$$, $filename$jscomp$8$$) { + const $old_idx$jscomp$1$$ = this.Search($parentid$jscomp$5$$, $filename$jscomp$8$$), $old_inode$$ = this.inodes[$old_idx$jscomp$1$$], $new_inode$$ = new $Inode$$(-1); + $dbg_assert$$($old_inode$$, "Filesystem divert: name (" + $filename$jscomp$8$$ + ") not found"); + $dbg_assert$$(this.IsDirectory($old_idx$jscomp$1$$) || 1 >= $old_inode$$.nlinks, "Filesystem: can't divert hardlinked file '" + $filename$jscomp$8$$ + "' with nlinks=" + $old_inode$$.nlinks); + Object.assign($new_inode$$, $old_inode$$); + const $idx$jscomp$5$$ = this.inodes.length; + this.inodes.push($new_inode$$); + $new_inode$$.fid = $idx$jscomp$5$$; + this.is_forwarder($old_inode$$) && this.mounts[$old_inode$$.mount_id].backtrack.set($old_inode$$.foreign_id, $idx$jscomp$5$$); + this.should_be_linked($old_inode$$) && (this.unlink_from_dir($parentid$jscomp$5$$, $filename$jscomp$8$$), this.link_under_dir($parentid$jscomp$5$$, $idx$jscomp$5$$, $filename$jscomp$8$$)); + if (this.IsDirectory($old_idx$jscomp$1$$) && !this.is_forwarder($old_inode$$)) { + for (const [$name$jscomp$100$$, $child_id$$] of $new_inode$$.direntries) { + "." !== $name$jscomp$100$$ && ".." !== $name$jscomp$100$$ && this.IsDirectory($child_id$$) && this.inodes[$child_id$$].direntries.set("..", $idx$jscomp$5$$); + } + } + this.inodedata[$idx$jscomp$5$$] = this.inodedata[$old_idx$jscomp$1$$]; + delete this.inodedata[$old_idx$jscomp$1$$]; + $old_inode$$.direntries = new Map; + $old_inode$$.nlinks = 0; + return $idx$jscomp$5$$; +}; +$FS$$.prototype.copy_inode = function($src_inode$$, $dest_inode$$) { + Object.assign($dest_inode$$, $src_inode$$, {fid:$dest_inode$$.fid, direntries:$dest_inode$$.direntries, nlinks:$dest_inode$$.nlinks, }); +}; +$FS$$.prototype.CreateInode = function() { + const $now$jscomp$15$$ = Math.round(Date.now() / 1000), $inode$jscomp$9$$ = new $Inode$$(++this.qidcounter.last_qidnumber); + $inode$jscomp$9$$.atime = $inode$jscomp$9$$.ctime = $inode$jscomp$9$$.mtime = $now$jscomp$15$$; + return $inode$jscomp$9$$; +}; +$FS$$.prototype.CreateDirectory = function($foreign_id_name$jscomp$101$$, $foreign_parentid_parentid$jscomp$6$$) { + var $parent_inode$jscomp$2_x$jscomp$121$$ = this.inodes[$foreign_parentid_parentid$jscomp$6$$]; + if (0 <= $foreign_parentid_parentid$jscomp$6$$ && this.is_forwarder($parent_inode$jscomp$2_x$jscomp$121$$)) { + return $foreign_parentid_parentid$jscomp$6$$ = $parent_inode$jscomp$2_x$jscomp$121$$.foreign_id, $foreign_id_name$jscomp$101$$ = this.follow_fs($parent_inode$jscomp$2_x$jscomp$121$$).CreateDirectory($foreign_id_name$jscomp$101$$, $foreign_parentid_parentid$jscomp$6$$), this.create_forwarder($parent_inode$jscomp$2_x$jscomp$121$$.mount_id, $foreign_id_name$jscomp$101$$); + } + $parent_inode$jscomp$2_x$jscomp$121$$ = this.CreateInode(); + $parent_inode$jscomp$2_x$jscomp$121$$.mode = 511 | $S_IFDIR$$; + 0 <= $foreign_parentid_parentid$jscomp$6$$ && ($parent_inode$jscomp$2_x$jscomp$121$$.uid = this.inodes[$foreign_parentid_parentid$jscomp$6$$].uid, $parent_inode$jscomp$2_x$jscomp$121$$.gid = this.inodes[$foreign_parentid_parentid$jscomp$6$$].gid, $parent_inode$jscomp$2_x$jscomp$121$$.mode = this.inodes[$foreign_parentid_parentid$jscomp$6$$].mode & 511 | $S_IFDIR$$); + $parent_inode$jscomp$2_x$jscomp$121$$.qid.type = $S_IFDIR$$ >> 8; + this.PushInode($parent_inode$jscomp$2_x$jscomp$121$$, $foreign_parentid_parentid$jscomp$6$$, $foreign_id_name$jscomp$101$$); + this.NotifyListeners(this.inodes.length - 1, "newdir"); + return this.inodes.length - 1; +}; +$FS$$.prototype.CreateFile = function($filename$jscomp$9_foreign_id$jscomp$1$$, $foreign_parentid$jscomp$1_parentid$jscomp$7$$) { + var $parent_inode$jscomp$3_x$jscomp$122$$ = this.inodes[$foreign_parentid$jscomp$1_parentid$jscomp$7$$]; + if (this.is_forwarder($parent_inode$jscomp$3_x$jscomp$122$$)) { + return $foreign_parentid$jscomp$1_parentid$jscomp$7$$ = $parent_inode$jscomp$3_x$jscomp$122$$.foreign_id, $filename$jscomp$9_foreign_id$jscomp$1$$ = this.follow_fs($parent_inode$jscomp$3_x$jscomp$122$$).CreateFile($filename$jscomp$9_foreign_id$jscomp$1$$, $foreign_parentid$jscomp$1_parentid$jscomp$7$$), this.create_forwarder($parent_inode$jscomp$3_x$jscomp$122$$.mount_id, $filename$jscomp$9_foreign_id$jscomp$1$$); + } + $parent_inode$jscomp$3_x$jscomp$122$$ = this.CreateInode(); + $parent_inode$jscomp$3_x$jscomp$122$$.uid = this.inodes[$foreign_parentid$jscomp$1_parentid$jscomp$7$$].uid; + $parent_inode$jscomp$3_x$jscomp$122$$.gid = this.inodes[$foreign_parentid$jscomp$1_parentid$jscomp$7$$].gid; + $parent_inode$jscomp$3_x$jscomp$122$$.qid.type = $S_IFREG$$ >> 8; + $parent_inode$jscomp$3_x$jscomp$122$$.mode = this.inodes[$foreign_parentid$jscomp$1_parentid$jscomp$7$$].mode & 438 | $S_IFREG$$; + this.PushInode($parent_inode$jscomp$3_x$jscomp$122$$, $foreign_parentid$jscomp$1_parentid$jscomp$7$$, $filename$jscomp$9_foreign_id$jscomp$1$$); + this.NotifyListeners(this.inodes.length - 1, "newfile"); + return this.inodes.length - 1; +}; +$FS$$.prototype.CreateNode = function($filename$jscomp$10_foreign_id$jscomp$2$$, $foreign_parentid$jscomp$2_parentid$jscomp$8$$, $major$jscomp$1$$, $minor$jscomp$1$$) { + var $parent_inode$jscomp$4_x$jscomp$123$$ = this.inodes[$foreign_parentid$jscomp$2_parentid$jscomp$8$$]; + if (this.is_forwarder($parent_inode$jscomp$4_x$jscomp$123$$)) { + return $foreign_parentid$jscomp$2_parentid$jscomp$8$$ = $parent_inode$jscomp$4_x$jscomp$123$$.foreign_id, $filename$jscomp$10_foreign_id$jscomp$2$$ = this.follow_fs($parent_inode$jscomp$4_x$jscomp$123$$).CreateNode($filename$jscomp$10_foreign_id$jscomp$2$$, $foreign_parentid$jscomp$2_parentid$jscomp$8$$, $major$jscomp$1$$, $minor$jscomp$1$$), this.create_forwarder($parent_inode$jscomp$4_x$jscomp$123$$.mount_id, $filename$jscomp$10_foreign_id$jscomp$2$$); + } + $parent_inode$jscomp$4_x$jscomp$123$$ = this.CreateInode(); + $parent_inode$jscomp$4_x$jscomp$123$$.major = $major$jscomp$1$$; + $parent_inode$jscomp$4_x$jscomp$123$$.minor = $minor$jscomp$1$$; + $parent_inode$jscomp$4_x$jscomp$123$$.uid = this.inodes[$foreign_parentid$jscomp$2_parentid$jscomp$8$$].uid; + $parent_inode$jscomp$4_x$jscomp$123$$.gid = this.inodes[$foreign_parentid$jscomp$2_parentid$jscomp$8$$].gid; + $parent_inode$jscomp$4_x$jscomp$123$$.qid.type = 192; + $parent_inode$jscomp$4_x$jscomp$123$$.mode = this.inodes[$foreign_parentid$jscomp$2_parentid$jscomp$8$$].mode & 438; + this.PushInode($parent_inode$jscomp$4_x$jscomp$123$$, $foreign_parentid$jscomp$2_parentid$jscomp$8$$, $filename$jscomp$10_foreign_id$jscomp$2$$); + return this.inodes.length - 1; +}; +$FS$$.prototype.CreateSymlink = function($filename$jscomp$11_foreign_id$jscomp$3$$, $foreign_parentid$jscomp$3_parentid$jscomp$9$$, $symlink$$) { + var $parent_inode$jscomp$5_x$jscomp$124$$ = this.inodes[$foreign_parentid$jscomp$3_parentid$jscomp$9$$]; + if (this.is_forwarder($parent_inode$jscomp$5_x$jscomp$124$$)) { + return $foreign_parentid$jscomp$3_parentid$jscomp$9$$ = $parent_inode$jscomp$5_x$jscomp$124$$.foreign_id, $filename$jscomp$11_foreign_id$jscomp$3$$ = this.follow_fs($parent_inode$jscomp$5_x$jscomp$124$$).CreateSymlink($filename$jscomp$11_foreign_id$jscomp$3$$, $foreign_parentid$jscomp$3_parentid$jscomp$9$$, $symlink$$), this.create_forwarder($parent_inode$jscomp$5_x$jscomp$124$$.mount_id, $filename$jscomp$11_foreign_id$jscomp$3$$); + } + $parent_inode$jscomp$5_x$jscomp$124$$ = this.CreateInode(); + $parent_inode$jscomp$5_x$jscomp$124$$.uid = this.inodes[$foreign_parentid$jscomp$3_parentid$jscomp$9$$].uid; + $parent_inode$jscomp$5_x$jscomp$124$$.gid = this.inodes[$foreign_parentid$jscomp$3_parentid$jscomp$9$$].gid; + $parent_inode$jscomp$5_x$jscomp$124$$.qid.type = 160; + $parent_inode$jscomp$5_x$jscomp$124$$.symlink = $symlink$$; + $parent_inode$jscomp$5_x$jscomp$124$$.mode = 40960; + this.PushInode($parent_inode$jscomp$5_x$jscomp$124$$, $foreign_parentid$jscomp$3_parentid$jscomp$9$$, $filename$jscomp$11_foreign_id$jscomp$3$$); + return this.inodes.length - 1; +}; +$FS$$.prototype.CreateTextFile = async function($data$jscomp$246_filename$jscomp$12$$, $foreign_parentid$jscomp$4_j$jscomp$13_parentid$jscomp$10_x$jscomp$125$$, $foreign_id$jscomp$4_str$jscomp$11$$) { + var $id$jscomp$16_parent_inode$jscomp$6$$ = this.inodes[$foreign_parentid$jscomp$4_j$jscomp$13_parentid$jscomp$10_x$jscomp$125$$]; + if (this.is_forwarder($id$jscomp$16_parent_inode$jscomp$6$$)) { + return $foreign_parentid$jscomp$4_j$jscomp$13_parentid$jscomp$10_x$jscomp$125$$ = $id$jscomp$16_parent_inode$jscomp$6$$.foreign_id, $foreign_id$jscomp$4_str$jscomp$11$$ = await this.follow_fs($id$jscomp$16_parent_inode$jscomp$6$$).CreateTextFile($data$jscomp$246_filename$jscomp$12$$, $foreign_parentid$jscomp$4_j$jscomp$13_parentid$jscomp$10_x$jscomp$125$$, $foreign_id$jscomp$4_str$jscomp$11$$), this.create_forwarder($id$jscomp$16_parent_inode$jscomp$6$$.mount_id, $foreign_id$jscomp$4_str$jscomp$11$$); + } + $id$jscomp$16_parent_inode$jscomp$6$$ = this.CreateFile($data$jscomp$246_filename$jscomp$12$$, $foreign_parentid$jscomp$4_j$jscomp$13_parentid$jscomp$10_x$jscomp$125$$); + $foreign_parentid$jscomp$4_j$jscomp$13_parentid$jscomp$10_x$jscomp$125$$ = this.inodes[$id$jscomp$16_parent_inode$jscomp$6$$]; + $data$jscomp$246_filename$jscomp$12$$ = new Uint8Array($foreign_id$jscomp$4_str$jscomp$11$$.length); + $foreign_parentid$jscomp$4_j$jscomp$13_parentid$jscomp$10_x$jscomp$125$$.size = $foreign_id$jscomp$4_str$jscomp$11$$.length; + for ($foreign_parentid$jscomp$4_j$jscomp$13_parentid$jscomp$10_x$jscomp$125$$ = 0; $foreign_parentid$jscomp$4_j$jscomp$13_parentid$jscomp$10_x$jscomp$125$$ < $foreign_id$jscomp$4_str$jscomp$11$$.length; $foreign_parentid$jscomp$4_j$jscomp$13_parentid$jscomp$10_x$jscomp$125$$++) { + $data$jscomp$246_filename$jscomp$12$$[$foreign_parentid$jscomp$4_j$jscomp$13_parentid$jscomp$10_x$jscomp$125$$] = $foreign_id$jscomp$4_str$jscomp$11$$.charCodeAt($foreign_parentid$jscomp$4_j$jscomp$13_parentid$jscomp$10_x$jscomp$125$$); + } + await this.set_data($id$jscomp$16_parent_inode$jscomp$6$$, $data$jscomp$246_filename$jscomp$12$$); + return $id$jscomp$16_parent_inode$jscomp$6$$; +}; +$FS$$.prototype.CreateBinaryFile = async function($filename$jscomp$13_x$jscomp$126$$, $data$jscomp$247_foreign_parentid$jscomp$5_parentid$jscomp$11$$, $buffer$jscomp$53_foreign_id$jscomp$5$$) { + var $id$jscomp$17_parent_inode$jscomp$7$$ = this.inodes[$data$jscomp$247_foreign_parentid$jscomp$5_parentid$jscomp$11$$]; + if (this.is_forwarder($id$jscomp$17_parent_inode$jscomp$7$$)) { + return $data$jscomp$247_foreign_parentid$jscomp$5_parentid$jscomp$11$$ = $id$jscomp$17_parent_inode$jscomp$7$$.foreign_id, $buffer$jscomp$53_foreign_id$jscomp$5$$ = await this.follow_fs($id$jscomp$17_parent_inode$jscomp$7$$).CreateBinaryFile($filename$jscomp$13_x$jscomp$126$$, $data$jscomp$247_foreign_parentid$jscomp$5_parentid$jscomp$11$$, $buffer$jscomp$53_foreign_id$jscomp$5$$), this.create_forwarder($id$jscomp$17_parent_inode$jscomp$7$$.mount_id, $buffer$jscomp$53_foreign_id$jscomp$5$$); + } + $id$jscomp$17_parent_inode$jscomp$7$$ = this.CreateFile($filename$jscomp$13_x$jscomp$126$$, $data$jscomp$247_foreign_parentid$jscomp$5_parentid$jscomp$11$$); + $filename$jscomp$13_x$jscomp$126$$ = this.inodes[$id$jscomp$17_parent_inode$jscomp$7$$]; + $data$jscomp$247_foreign_parentid$jscomp$5_parentid$jscomp$11$$ = new Uint8Array($buffer$jscomp$53_foreign_id$jscomp$5$$.length); + $data$jscomp$247_foreign_parentid$jscomp$5_parentid$jscomp$11$$.set($buffer$jscomp$53_foreign_id$jscomp$5$$); + await this.set_data($id$jscomp$17_parent_inode$jscomp$7$$, $data$jscomp$247_foreign_parentid$jscomp$5_parentid$jscomp$11$$); + $filename$jscomp$13_x$jscomp$126$$.size = $buffer$jscomp$53_foreign_id$jscomp$5$$.length; + return $id$jscomp$17_parent_inode$jscomp$7$$; +}; +$FS$$.prototype.OpenInode = function($id$jscomp$18$$, $mode$jscomp$26$$) { + var $inode$jscomp$10$$ = this.inodes[$id$jscomp$18$$]; + if (this.is_forwarder($inode$jscomp$10$$)) { + return this.follow_fs($inode$jscomp$10$$).OpenInode($inode$jscomp$10$$.foreign_id, $mode$jscomp$26$$); + } + ($inode$jscomp$10$$.mode & 61440) === $S_IFDIR$$ && this.FillDirectory($id$jscomp$18$$); + return !0; +}; +$FS$$.prototype.CloseInode = async function($id$jscomp$19$$) { + var $inode$jscomp$11$$ = this.inodes[$id$jscomp$19$$]; + if (this.is_forwarder($inode$jscomp$11$$)) { + return await this.follow_fs($inode$jscomp$11$$).CloseInode($inode$jscomp$11$$.foreign_id); + } + 2 === $inode$jscomp$11$$.status && this.storage.uncache($inode$jscomp$11$$.sha256sum); + $inode$jscomp$11$$.status === $STATUS_UNLINKED$$ && ($inode$jscomp$11$$.status = -1, await this.DeleteData($id$jscomp$19$$)); +}; +$FS$$.prototype.Rename = async function($olddirid_ret$jscomp$6_ret$jscomp$7$$, $oldname$jscomp$1$$, $foreign_fs_new_real_inode_newdirid$$, $foreign_id$jscomp$6_newname$jscomp$2$$) { + if ($olddirid_ret$jscomp$6_ret$jscomp$7$$ === $foreign_fs_new_real_inode_newdirid$$ && $oldname$jscomp$1$$ === $foreign_id$jscomp$6_newname$jscomp$2$$) { + return 0; + } + var $oldid$$ = this.Search($olddirid_ret$jscomp$6_ret$jscomp$7$$, $oldname$jscomp$1$$); + if (-1 === $oldid$$) { + return -2; + } + var $oldpath$$ = this.GetFullPath($olddirid_ret$jscomp$6_ret$jscomp$7$$) + "/" + $oldname$jscomp$1$$; + if (-1 !== this.Search($foreign_fs_new_real_inode_newdirid$$, $foreign_id$jscomp$6_newname$jscomp$2$$) && ($newdir_ret$jscomp$5_ret$jscomp$8$$ = this.Unlink($foreign_fs_new_real_inode_newdirid$$, $foreign_id$jscomp$6_newname$jscomp$2$$), 0 > $newdir_ret$jscomp$5_ret$jscomp$8$$)) { + return $newdir_ret$jscomp$5_ret$jscomp$8$$; + } + var $inode$jscomp$12$$ = this.inodes[$oldid$$], $diverted_old_idx_olddir$$ = this.inodes[$olddirid_ret$jscomp$6_ret$jscomp$7$$], $newdir_ret$jscomp$5_ret$jscomp$8$$ = this.inodes[$foreign_fs_new_real_inode_newdirid$$]; + if (this.is_forwarder($diverted_old_idx_olddir$$) || this.is_forwarder($newdir_ret$jscomp$5_ret$jscomp$8$$)) { + if (this.is_forwarder($diverted_old_idx_olddir$$) && $diverted_old_idx_olddir$$.mount_id === $newdir_ret$jscomp$5_ret$jscomp$8$$.mount_id) { + if ($olddirid_ret$jscomp$6_ret$jscomp$7$$ = await this.follow_fs($diverted_old_idx_olddir$$).Rename($diverted_old_idx_olddir$$.foreign_id, $oldname$jscomp$1$$, $newdir_ret$jscomp$5_ret$jscomp$8$$.foreign_id, $foreign_id$jscomp$6_newname$jscomp$2$$), 0 > $olddirid_ret$jscomp$6_ret$jscomp$7$$) { + return $olddirid_ret$jscomp$6_ret$jscomp$7$$; + } + } else { + if (this.is_a_root($oldid$$)) { + return $dbg_log$$("XXX: Attempted to move mountpoint (" + $oldname$jscomp$1$$ + ") - skipped", 4194304), -1; + } + if (!this.IsDirectory($oldid$$) && 1 < this.GetInode($oldid$$).nlinks) { + return $dbg_log$$("XXX: Attempted to move hardlinked file (" + $oldname$jscomp$1$$ + ") across filesystems - skipped", 4194304), -1; + } + $diverted_old_idx_olddir$$ = this.divert($olddirid_ret$jscomp$6_ret$jscomp$7$$, $oldname$jscomp$1$$); + const $old_real_inode$$ = this.GetInode($oldid$$), $data$jscomp$248$$ = await this.Read($diverted_old_idx_olddir$$, 0, $old_real_inode$$.size); + this.is_forwarder($newdir_ret$jscomp$5_ret$jscomp$8$$) ? ($foreign_fs_new_real_inode_newdirid$$ = this.follow_fs($newdir_ret$jscomp$5_ret$jscomp$8$$), $foreign_id$jscomp$6_newname$jscomp$2$$ = this.IsDirectory($diverted_old_idx_olddir$$) ? $foreign_fs_new_real_inode_newdirid$$.CreateDirectory($foreign_id$jscomp$6_newname$jscomp$2$$, $newdir_ret$jscomp$5_ret$jscomp$8$$.foreign_id) : $foreign_fs_new_real_inode_newdirid$$.CreateFile($foreign_id$jscomp$6_newname$jscomp$2$$, $newdir_ret$jscomp$5_ret$jscomp$8$$.foreign_id), + $foreign_fs_new_real_inode_newdirid$$ = $foreign_fs_new_real_inode_newdirid$$.GetInode($foreign_id$jscomp$6_newname$jscomp$2$$), this.copy_inode($old_real_inode$$, $foreign_fs_new_real_inode_newdirid$$), this.set_forwarder($oldid$$, $newdir_ret$jscomp$5_ret$jscomp$8$$.mount_id, $foreign_id$jscomp$6_newname$jscomp$2$$)) : (this.delete_forwarder($inode$jscomp$12$$), this.copy_inode($old_real_inode$$, $inode$jscomp$12$$), this.link_under_dir($foreign_fs_new_real_inode_newdirid$$, $oldid$$, $foreign_id$jscomp$6_newname$jscomp$2$$)); + await this.ChangeSize($oldid$$, $old_real_inode$$.size); + $data$jscomp$248$$ && $data$jscomp$248$$.length && await this.Write($oldid$$, 0, $data$jscomp$248$$.length, $data$jscomp$248$$); + if (this.IsDirectory($oldid$$)) { + for (const $child_filename$$ of this.GetChildren($diverted_old_idx_olddir$$)) { + if ($newdir_ret$jscomp$5_ret$jscomp$8$$ = await this.Rename($diverted_old_idx_olddir$$, $child_filename$$, $oldid$$, $child_filename$$), 0 > $newdir_ret$jscomp$5_ret$jscomp$8$$) { + return $newdir_ret$jscomp$5_ret$jscomp$8$$; + } + } + } + await this.DeleteData($diverted_old_idx_olddir$$); + $olddirid_ret$jscomp$6_ret$jscomp$7$$ = this.Unlink($olddirid_ret$jscomp$6_ret$jscomp$7$$, $oldname$jscomp$1$$); + if (0 > $olddirid_ret$jscomp$6_ret$jscomp$7$$) { + return $olddirid_ret$jscomp$6_ret$jscomp$7$$; + } + } + } else { + this.unlink_from_dir($olddirid_ret$jscomp$6_ret$jscomp$7$$, $oldname$jscomp$1$$), this.link_under_dir($foreign_fs_new_real_inode_newdirid$$, $oldid$$, $foreign_id$jscomp$6_newname$jscomp$2$$), $inode$jscomp$12$$.qid.version++; + } + this.NotifyListeners($oldid$$, "rename", {oldpath:$oldpath$$}); + return 0; +}; +$FS$$.prototype.Write = async function($foreign_id$jscomp$7_id$jscomp$20$$, $offset$jscomp$75$$, $count$jscomp$67$$, $buffer$jscomp$54$$) { + this.NotifyListeners($foreign_id$jscomp$7_id$jscomp$20$$, "write"); + var $inode$jscomp$13$$ = this.inodes[$foreign_id$jscomp$7_id$jscomp$20$$]; + if (this.is_forwarder($inode$jscomp$13$$)) { + $foreign_id$jscomp$7_id$jscomp$20$$ = $inode$jscomp$13$$.foreign_id, await this.follow_fs($inode$jscomp$13$$).Write($foreign_id$jscomp$7_id$jscomp$20$$, $offset$jscomp$75$$, $count$jscomp$67$$, $buffer$jscomp$54$$); + } else { + var $data$jscomp$249$$ = await this.get_buffer($foreign_id$jscomp$7_id$jscomp$20$$); + !$data$jscomp$249$$ || $data$jscomp$249$$.length < $offset$jscomp$75$$ + $count$jscomp$67$$ ? (await this.ChangeSize($foreign_id$jscomp$7_id$jscomp$20$$, Math.floor(3 * ($offset$jscomp$75$$ + $count$jscomp$67$$) / 2)), $inode$jscomp$13$$.size = $offset$jscomp$75$$ + $count$jscomp$67$$, $data$jscomp$249$$ = await this.get_buffer($foreign_id$jscomp$7_id$jscomp$20$$)) : $inode$jscomp$13$$.size < $offset$jscomp$75$$ + $count$jscomp$67$$ && ($inode$jscomp$13$$.size = $offset$jscomp$75$$ + $count$jscomp$67$$); + $buffer$jscomp$54$$ && $data$jscomp$249$$.set($buffer$jscomp$54$$.subarray(0, $count$jscomp$67$$), $offset$jscomp$75$$); + await this.set_data($foreign_id$jscomp$7_id$jscomp$20$$, $data$jscomp$249$$); + } +}; +$FS$$.prototype.Read = async function($foreign_id$jscomp$8_inodeid$jscomp$2$$, $offset$jscomp$76$$, $count$jscomp$68$$) { + const $inode$jscomp$14$$ = this.inodes[$foreign_id$jscomp$8_inodeid$jscomp$2$$]; + return this.is_forwarder($inode$jscomp$14$$) ? ($foreign_id$jscomp$8_inodeid$jscomp$2$$ = $inode$jscomp$14$$.foreign_id, await this.follow_fs($inode$jscomp$14$$).Read($foreign_id$jscomp$8_inodeid$jscomp$2$$, $offset$jscomp$76$$, $count$jscomp$68$$)) : await this.get_data($foreign_id$jscomp$8_inodeid$jscomp$2$$, $offset$jscomp$76$$, $count$jscomp$68$$); +}; +$FS$$.prototype.Search = function($parent_inode$jscomp$8_parentid$jscomp$12$$, $childid_foreign_id$jscomp$9_name$jscomp$102$$) { + $parent_inode$jscomp$8_parentid$jscomp$12$$ = this.inodes[$parent_inode$jscomp$8_parentid$jscomp$12$$]; + if (this.is_forwarder($parent_inode$jscomp$8_parentid$jscomp$12$$)) { + const $foreign_parentid$jscomp$6$$ = $parent_inode$jscomp$8_parentid$jscomp$12$$.foreign_id; + $childid_foreign_id$jscomp$9_name$jscomp$102$$ = this.follow_fs($parent_inode$jscomp$8_parentid$jscomp$12$$).Search($foreign_parentid$jscomp$6$$, $childid_foreign_id$jscomp$9_name$jscomp$102$$); + return -1 === $childid_foreign_id$jscomp$9_name$jscomp$102$$ ? -1 : this.get_forwarder($parent_inode$jscomp$8_parentid$jscomp$12$$.mount_id, $childid_foreign_id$jscomp$9_name$jscomp$102$$); + } + $childid_foreign_id$jscomp$9_name$jscomp$102$$ = $parent_inode$jscomp$8_parentid$jscomp$12$$.direntries.get($childid_foreign_id$jscomp$9_name$jscomp$102$$); + return void 0 === $childid_foreign_id$jscomp$9_name$jscomp$102$$ ? -1 : $childid_foreign_id$jscomp$9_name$jscomp$102$$; +}; +$FS$$.prototype.CountUsedInodes = function() { + let $count$jscomp$69$$ = this.inodes.length; + for (const {fs:$fs$jscomp$4$$, backtrack:$backtrack$$} of this.mounts) { + $count$jscomp$69$$ += $fs$jscomp$4$$.CountUsedInodes(), $count$jscomp$69$$ -= $backtrack$$.size; + } + return $count$jscomp$69$$; +}; +$FS$$.prototype.CountFreeInodes = function() { + let $count$jscomp$70$$ = 1048576; + for (const {fs:$fs$jscomp$5$$} of this.mounts) { + $count$jscomp$70$$ += $fs$jscomp$5$$.CountFreeInodes(); + } + return $count$jscomp$70$$; +}; +$FS$$.prototype.GetTotalSize = function() { + let $size$jscomp$43$$ = this.used_size; + for (const {fs:$fs$jscomp$6$$} of this.mounts) { + $size$jscomp$43$$ += $fs$jscomp$6$$.GetTotalSize(); + } + return $size$jscomp$43$$; +}; +$FS$$.prototype.GetSpace = function() { + let $size$jscomp$44$$ = this.total_size; + for (const {fs:$fs$jscomp$7$$} of this.mounts) { + $size$jscomp$44$$ += $fs$jscomp$7$$.GetSpace(); + } + return this.total_size; +}; +$FS$$.prototype.GetDirectoryName = function($idx$jscomp$7$$) { + const $parent_inode$jscomp$9$$ = this.inodes[this.GetParent($idx$jscomp$7$$)]; + if (this.is_forwarder($parent_inode$jscomp$9$$)) { + return this.follow_fs($parent_inode$jscomp$9$$).GetDirectoryName(this.inodes[$idx$jscomp$7$$].foreign_id); + } + if (!$parent_inode$jscomp$9$$) { + return ""; + } + for (const [$name$jscomp$103$$, $childid$jscomp$1$$] of $parent_inode$jscomp$9$$.direntries) { + if ($childid$jscomp$1$$ === $idx$jscomp$7$$) { + return $name$jscomp$103$$; + } + } + $dbg_assert$$(!1, "Filesystem: Found directory inode whose parent doesn't link to it"); + return ""; +}; +$FS$$.prototype.GetFullPath = function($idx$jscomp$8$$) { + $dbg_assert$$(this.IsDirectory($idx$jscomp$8$$), "Filesystem: Cannot get full path of non-directory inode"); + for (var $path$jscomp$7$$ = ""; 0 !== $idx$jscomp$8$$;) { + $path$jscomp$7$$ = "/" + this.GetDirectoryName($idx$jscomp$8$$) + $path$jscomp$7$$, $idx$jscomp$8$$ = this.GetParent($idx$jscomp$8$$); + } + return $path$jscomp$7$$.substring(1); +}; +$FS$$.prototype.Link = function($parentid$jscomp$13$$, $targetid$$, $name$jscomp$104$$) { + if (this.IsDirectory($targetid$$)) { + return -1; + } + const $parent_inode$jscomp$10$$ = this.inodes[$parentid$jscomp$13$$], $inode$jscomp$15$$ = this.inodes[$targetid$$]; + if (this.is_forwarder($parent_inode$jscomp$10$$)) { + return this.is_forwarder($inode$jscomp$15$$) && $inode$jscomp$15$$.mount_id === $parent_inode$jscomp$10$$.mount_id ? this.follow_fs($parent_inode$jscomp$10$$).Link($parent_inode$jscomp$10$$.foreign_id, $inode$jscomp$15$$.foreign_id, $name$jscomp$104$$) : ($dbg_log$$("XXX: Attempted to hardlink a file into a child filesystem - skipped", 4194304), -1); + } + if (this.is_forwarder($inode$jscomp$15$$)) { + return $dbg_log$$("XXX: Attempted to hardlink file across filesystems - skipped", 4194304), -1; + } + this.link_under_dir($parentid$jscomp$13$$, $targetid$$, $name$jscomp$104$$); + return 0; +}; +$FS$$.prototype.Unlink = function($foreign_parentid$jscomp$7_parentid$jscomp$14$$, $name$jscomp$105$$) { + if ("." === $name$jscomp$105$$ || ".." === $name$jscomp$105$$) { + return -1; + } + const $idx$jscomp$9$$ = this.Search($foreign_parentid$jscomp$7_parentid$jscomp$14$$, $name$jscomp$105$$), $inode$jscomp$16$$ = this.inodes[$idx$jscomp$9$$], $parent_inode$jscomp$11$$ = this.inodes[$foreign_parentid$jscomp$7_parentid$jscomp$14$$]; + if (this.is_forwarder($parent_inode$jscomp$11$$)) { + return $dbg_assert$$(this.is_forwarder($inode$jscomp$16$$), "Children of forwarders should be forwarders"), $foreign_parentid$jscomp$7_parentid$jscomp$14$$ = $parent_inode$jscomp$11$$.foreign_id, this.follow_fs($parent_inode$jscomp$11$$).Unlink($foreign_parentid$jscomp$7_parentid$jscomp$14$$, $name$jscomp$105$$); + } + if (this.IsDirectory($idx$jscomp$9$$) && !this.IsEmpty($idx$jscomp$9$$)) { + return -39; + } + this.unlink_from_dir($foreign_parentid$jscomp$7_parentid$jscomp$14$$, $name$jscomp$105$$); + 0 === $inode$jscomp$16$$.nlinks && ($inode$jscomp$16$$.status = $STATUS_UNLINKED$$, this.NotifyListeners($idx$jscomp$9$$, "delete")); + return 0; +}; +$FS$$.prototype.DeleteData = async function($idx$jscomp$10$$) { + const $inode$jscomp$17$$ = this.inodes[$idx$jscomp$10$$]; + this.is_forwarder($inode$jscomp$17$$) ? await this.follow_fs($inode$jscomp$17$$).DeleteData($inode$jscomp$17$$.foreign_id) : ($inode$jscomp$17$$.size = 0, delete this.inodedata[$idx$jscomp$10$$]); +}; +$FS$$.prototype.get_buffer = async function($idx$jscomp$11$$) { + const $inode$jscomp$18$$ = this.inodes[$idx$jscomp$11$$]; + $dbg_assert$$($inode$jscomp$18$$, `Filesystem get_buffer: idx ${$idx$jscomp$11$$} does not point to an inode`); + return this.inodedata[$idx$jscomp$11$$] ? this.inodedata[$idx$jscomp$11$$] : 2 === $inode$jscomp$18$$.status ? ($dbg_assert$$($inode$jscomp$18$$.sha256sum, "Filesystem get_data: found inode on server without sha256sum"), await this.storage.read($inode$jscomp$18$$.sha256sum, 0, $inode$jscomp$18$$.size)) : null; +}; +$FS$$.prototype.get_data = async function($idx$jscomp$12$$, $offset$jscomp$77$$, $count$jscomp$71$$) { + const $inode$jscomp$19$$ = this.inodes[$idx$jscomp$12$$]; + $dbg_assert$$($inode$jscomp$19$$, `Filesystem get_data: idx ${$idx$jscomp$12$$} does not point to an inode`); + return this.inodedata[$idx$jscomp$12$$] ? this.inodedata[$idx$jscomp$12$$].subarray($offset$jscomp$77$$, $offset$jscomp$77$$ + $count$jscomp$71$$) : 2 === $inode$jscomp$19$$.status ? ($dbg_assert$$($inode$jscomp$19$$.sha256sum, "Filesystem get_data: found inode on server without sha256sum"), await this.storage.read($inode$jscomp$19$$.sha256sum, $offset$jscomp$77$$, $count$jscomp$71$$)) : null; +}; +$FS$$.prototype.set_data = async function($idx$jscomp$13$$, $buffer$jscomp$55$$) { + this.inodedata[$idx$jscomp$13$$] = $buffer$jscomp$55$$; + 2 === this.inodes[$idx$jscomp$13$$].status && (this.inodes[$idx$jscomp$13$$].status = 0, this.storage.uncache(this.inodes[$idx$jscomp$13$$].sha256sum)); +}; +$FS$$.prototype.GetInode = function($idx$jscomp$14_inode$jscomp$20$$) { + $dbg_assert$$(!isNaN($idx$jscomp$14_inode$jscomp$20$$), "Filesystem GetInode: NaN idx"); + $dbg_assert$$(0 <= $idx$jscomp$14_inode$jscomp$20$$ && $idx$jscomp$14_inode$jscomp$20$$ < this.inodes.length, "Filesystem GetInode: out of range idx:" + $idx$jscomp$14_inode$jscomp$20$$); + $idx$jscomp$14_inode$jscomp$20$$ = this.inodes[$idx$jscomp$14_inode$jscomp$20$$]; + return this.is_forwarder($idx$jscomp$14_inode$jscomp$20$$) ? this.follow_fs($idx$jscomp$14_inode$jscomp$20$$).GetInode($idx$jscomp$14_inode$jscomp$20$$.foreign_id) : $idx$jscomp$14_inode$jscomp$20$$; +}; +$FS$$.prototype.ChangeSize = async function($idx$jscomp$15$$, $newsize$$) { + var $inode$jscomp$21$$ = this.GetInode($idx$jscomp$15$$), $temp$$ = await this.get_data($idx$jscomp$15$$, 0, $inode$jscomp$21$$.size); + if ($newsize$$ !== $inode$jscomp$21$$.size) { + var $data$jscomp$250$$ = new Uint8Array($newsize$$); + $inode$jscomp$21$$.size = $newsize$$; + $temp$$ && $data$jscomp$250$$.set($temp$$.subarray(0, Math.min($temp$$.length, $inode$jscomp$21$$.size)), 0); + await this.set_data($idx$jscomp$15$$, $data$jscomp$250$$); + } +}; +$FS$$.prototype.SearchPath = function($path$jscomp$8_walk$jscomp$1$$) { + $path$jscomp$8_walk$jscomp$1$$ = $path$jscomp$8_walk$jscomp$1$$.replace("//", "/"); + $path$jscomp$8_walk$jscomp$1$$ = $path$jscomp$8_walk$jscomp$1$$.split("/"); + 0 < $path$jscomp$8_walk$jscomp$1$$.length && 0 === $path$jscomp$8_walk$jscomp$1$$[$path$jscomp$8_walk$jscomp$1$$.length - 1].length && $path$jscomp$8_walk$jscomp$1$$.pop(); + 0 < $path$jscomp$8_walk$jscomp$1$$.length && 0 === $path$jscomp$8_walk$jscomp$1$$[0].length && $path$jscomp$8_walk$jscomp$1$$.shift(); + const $n$jscomp$14$$ = $path$jscomp$8_walk$jscomp$1$$.length; + var $parentid$jscomp$15$$ = -1, $id$jscomp$21$$ = 0; + let $forward_path$$ = null; + for (var $i$jscomp$137$$ = 0; $i$jscomp$137$$ < $n$jscomp$14$$; $i$jscomp$137$$++) { + if ($parentid$jscomp$15$$ = $id$jscomp$21$$, $id$jscomp$21$$ = this.Search($parentid$jscomp$15$$, $path$jscomp$8_walk$jscomp$1$$[$i$jscomp$137$$]), !$forward_path$$ && this.is_forwarder(this.inodes[$parentid$jscomp$15$$]) && ($forward_path$$ = "/" + $path$jscomp$8_walk$jscomp$1$$.slice($i$jscomp$137$$).join("/")), -1 === $id$jscomp$21$$) { + return $i$jscomp$137$$ < $n$jscomp$14$$ - 1 ? {id:-1, parentid:-1, name:$path$jscomp$8_walk$jscomp$1$$[$i$jscomp$137$$], forward_path:$forward_path$$} : {id:-1, parentid:$parentid$jscomp$15$$, name:$path$jscomp$8_walk$jscomp$1$$[$i$jscomp$137$$], forward_path:$forward_path$$}; + } + } + return {id:$id$jscomp$21$$, parentid:$parentid$jscomp$15$$, name:$path$jscomp$8_walk$jscomp$1$$[$i$jscomp$137$$], forward_path:$forward_path$$}; +}; +$FS$$.prototype.GetRecursiveList = function($dirid_i$jscomp$138$$, $list$$) { + if (this.is_forwarder(this.inodes[$dirid_i$jscomp$138$$])) { + const $foreign_fs$jscomp$1$$ = this.follow_fs(this.inodes[$dirid_i$jscomp$138$$]), $mount_id$$ = this.inodes[$dirid_i$jscomp$138$$].mount_id, $foreign_start$$ = $list$$.length; + $foreign_fs$jscomp$1$$.GetRecursiveList(this.inodes[$dirid_i$jscomp$138$$].foreign_id, $list$$); + for ($dirid_i$jscomp$138$$ = $foreign_start$$; $dirid_i$jscomp$138$$ < $list$$.length; $dirid_i$jscomp$138$$++) { + $list$$[$dirid_i$jscomp$138$$].parentid = this.get_forwarder($mount_id$$, $list$$[$dirid_i$jscomp$138$$].parentid); + } + } else { + for (const [$name$jscomp$106$$, $id$jscomp$22$$] of this.inodes[$dirid_i$jscomp$138$$].direntries) { + "." !== $name$jscomp$106$$ && ".." !== $name$jscomp$106$$ && ($list$$.push({parentid:$dirid_i$jscomp$138$$, name:$name$jscomp$106$$}), this.IsDirectory($id$jscomp$22$$) && this.GetRecursiveList($id$jscomp$22$$, $list$$)); + } + } +}; +$FS$$.prototype.RecursiveDelete = function($i$jscomp$139_ids_path$jscomp$9$$) { + var $toDelete$$ = []; + $i$jscomp$139_ids_path$jscomp$9$$ = this.SearchPath($i$jscomp$139_ids_path$jscomp$9$$); + if (-1 !== $i$jscomp$139_ids_path$jscomp$9$$.id) { + for (this.GetRecursiveList($i$jscomp$139_ids_path$jscomp$9$$.id, $toDelete$$), $i$jscomp$139_ids_path$jscomp$9$$ = $toDelete$$.length - 1; 0 <= $i$jscomp$139_ids_path$jscomp$9$$; $i$jscomp$139_ids_path$jscomp$9$$--) { + const $ret$jscomp$9$$ = this.Unlink($toDelete$$[$i$jscomp$139_ids_path$jscomp$9$$].parentid, $toDelete$$[$i$jscomp$139_ids_path$jscomp$9$$].name); + $dbg_assert$$(0 === $ret$jscomp$9$$, "Filesystem RecursiveDelete failed at parent=" + $toDelete$$[$i$jscomp$139_ids_path$jscomp$9$$].parentid + ", name='" + $toDelete$$[$i$jscomp$139_ids_path$jscomp$9$$].name + "' with error code: " + -$ret$jscomp$9$$); + } + } +}; +$FS$$.prototype.DeleteNode = function($path$jscomp$10_ret$jscomp$10_ret$jscomp$11$$) { + var $ids$jscomp$1$$ = this.SearchPath($path$jscomp$10_ret$jscomp$10_ret$jscomp$11$$); + -1 !== $ids$jscomp$1$$.id && ((this.inodes[$ids$jscomp$1$$.id].mode & 61440) === $S_IFREG$$ ? ($path$jscomp$10_ret$jscomp$10_ret$jscomp$11$$ = this.Unlink($ids$jscomp$1$$.parentid, $ids$jscomp$1$$.name), $dbg_assert$$(0 === $path$jscomp$10_ret$jscomp$10_ret$jscomp$11$$, "Filesystem DeleteNode failed with error code: " + -$path$jscomp$10_ret$jscomp$10_ret$jscomp$11$$)) : (this.inodes[$ids$jscomp$1$$.id].mode & 61440) === $S_IFDIR$$ && (this.RecursiveDelete($path$jscomp$10_ret$jscomp$10_ret$jscomp$11$$), + $path$jscomp$10_ret$jscomp$10_ret$jscomp$11$$ = this.Unlink($ids$jscomp$1$$.parentid, $ids$jscomp$1$$.name), $dbg_assert$$(0 === $path$jscomp$10_ret$jscomp$10_ret$jscomp$11$$, "Filesystem DeleteNode failed with error code: " + -$path$jscomp$10_ret$jscomp$10_ret$jscomp$11$$))); +}; +$FS$$.prototype.NotifyListeners = function() { +}; +$FS$$.prototype.Check = function() { + for (var $i$jscomp$140$$ = 1; $i$jscomp$140$$ < this.inodes.length; $i$jscomp$140$$++) { + if (-1 !== this.inodes[$i$jscomp$140$$].status) { + var $inode$jscomp$22_inode$jscomp$23$$ = this.GetInode($i$jscomp$140$$); + 0 > $inode$jscomp$22_inode$jscomp$23$$.nlinks && $message$$.Debug("Error in filesystem: negative nlinks=" + $inode$jscomp$22_inode$jscomp$23$$.nlinks + " at id =" + $i$jscomp$140$$); + if (this.IsDirectory($i$jscomp$140$$)) { + $inode$jscomp$22_inode$jscomp$23$$ = this.GetInode($i$jscomp$140$$); + this.IsDirectory($i$jscomp$140$$) && 0 > this.GetParent($i$jscomp$140$$) && $message$$.Debug("Error in filesystem: negative parent id " + $i$jscomp$140$$); + for (const [$name$jscomp$107$$, $id$jscomp$24$$] of $inode$jscomp$22_inode$jscomp$23$$.direntries) { + 0 === $name$jscomp$107$$.length && $message$$.Debug("Error in filesystem: inode with no name and id " + $id$jscomp$24$$); + for (const $c$jscomp$3$$ of $name$jscomp$107$$) { + 32 > $c$jscomp$3$$ && $message$$.Debug("Error in filesystem: Unallowed char in filename"); + } + } + } + } + } +}; +$FS$$.prototype.FillDirectory = function($data$jscomp$251_dirid$jscomp$1$$) { + var $child$jscomp$1_inode$jscomp$24$$ = this.inodes[$data$jscomp$251_dirid$jscomp$1$$]; + if (this.is_forwarder($child$jscomp$1_inode$jscomp$24$$)) { + this.follow_fs($child$jscomp$1_inode$jscomp$24$$).FillDirectory($child$jscomp$1_inode$jscomp$24$$.foreign_id); + } else { + var $offset$jscomp$78_size$jscomp$46$$ = 0; + for (const $name$jscomp$108$$ of $child$jscomp$1_inode$jscomp$24$$.direntries.keys()) { + $offset$jscomp$78_size$jscomp$46$$ += 24 + $texten$$.encode($name$jscomp$108$$).length; + } + $data$jscomp$251_dirid$jscomp$1$$ = this.inodedata[$data$jscomp$251_dirid$jscomp$1$$] = new Uint8Array($offset$jscomp$78_size$jscomp$46$$); + $child$jscomp$1_inode$jscomp$24$$.size = $offset$jscomp$78_size$jscomp$46$$; + $offset$jscomp$78_size$jscomp$46$$ = 0; + for (const [$name$jscomp$109$$, $id$jscomp$25$$] of $child$jscomp$1_inode$jscomp$24$$.direntries) { + $child$jscomp$1_inode$jscomp$24$$ = this.GetInode($id$jscomp$25$$), $offset$jscomp$78_size$jscomp$46$$ += $marshall$$.Marshall(["Q", "d", "b", "s"], [$child$jscomp$1_inode$jscomp$24$$.qid, $offset$jscomp$78_size$jscomp$46$$ + 13 + 8 + 1 + 2 + $texten$$.encode($name$jscomp$109$$).length, $child$jscomp$1_inode$jscomp$24$$.mode >> 12, $name$jscomp$109$$], $data$jscomp$251_dirid$jscomp$1$$, $offset$jscomp$78_size$jscomp$46$$); + } + } +}; +$FS$$.prototype.RoundToDirentry = function($dirid$jscomp$2_offset$jscomp$79$$, $offset_target$$) { + const $data$jscomp$252$$ = this.inodedata[$dirid$jscomp$2_offset$jscomp$79$$]; + $dbg_assert$$($data$jscomp$252$$, `FS directory data for dirid=${$dirid$jscomp$2_offset$jscomp$79$$} should be generated`); + $dbg_assert$$($data$jscomp$252$$.length, "FS directory should have at least an entry"); + if ($offset_target$$ >= $data$jscomp$252$$.length) { + return $data$jscomp$252$$.length; + } + for ($dirid$jscomp$2_offset$jscomp$79$$ = 0;;) { + const $next_offset$$ = $marshall$$.Unmarshall(["Q", "d"], $data$jscomp$252$$, {offset:$dirid$jscomp$2_offset$jscomp$79$$})[1]; + if ($next_offset$$ > $offset_target$$) { + break; + } + $dirid$jscomp$2_offset$jscomp$79$$ = $next_offset$$; + } + return $dirid$jscomp$2_offset$jscomp$79$$; +}; +$FS$$.prototype.IsDirectory = function($idx$jscomp$16_inode$jscomp$25$$) { + $idx$jscomp$16_inode$jscomp$25$$ = this.inodes[$idx$jscomp$16_inode$jscomp$25$$]; + return this.is_forwarder($idx$jscomp$16_inode$jscomp$25$$) ? this.follow_fs($idx$jscomp$16_inode$jscomp$25$$).IsDirectory($idx$jscomp$16_inode$jscomp$25$$.foreign_id) : ($idx$jscomp$16_inode$jscomp$25$$.mode & 61440) === $S_IFDIR$$; +}; +$FS$$.prototype.IsEmpty = function($idx$jscomp$17_inode$jscomp$26$$) { + $idx$jscomp$17_inode$jscomp$26$$ = this.inodes[$idx$jscomp$17_inode$jscomp$26$$]; + if (this.is_forwarder($idx$jscomp$17_inode$jscomp$26$$)) { + return this.follow_fs($idx$jscomp$17_inode$jscomp$26$$).IsDirectory($idx$jscomp$17_inode$jscomp$26$$.foreign_id); + } + for (const $name$jscomp$110$$ of $idx$jscomp$17_inode$jscomp$26$$.direntries.keys()) { + if ("." !== $name$jscomp$110$$ && ".." !== $name$jscomp$110$$) { + return !1; + } + } + return !0; +}; +$FS$$.prototype.GetChildren = function($idx$jscomp$18_inode$jscomp$27$$) { + $dbg_assert$$(this.IsDirectory($idx$jscomp$18_inode$jscomp$27$$), "Filesystem: cannot get children of non-directory inode"); + $idx$jscomp$18_inode$jscomp$27$$ = this.inodes[$idx$jscomp$18_inode$jscomp$27$$]; + if (this.is_forwarder($idx$jscomp$18_inode$jscomp$27$$)) { + return this.follow_fs($idx$jscomp$18_inode$jscomp$27$$).GetChildren($idx$jscomp$18_inode$jscomp$27$$.foreign_id); + } + const $children$jscomp$3$$ = []; + for (const $name$jscomp$111$$ of $idx$jscomp$18_inode$jscomp$27$$.direntries.keys()) { + "." !== $name$jscomp$111$$ && ".." !== $name$jscomp$111$$ && $children$jscomp$3$$.push($name$jscomp$111$$); + } + return $children$jscomp$3$$; +}; +$FS$$.prototype.GetParent = function($idx$jscomp$19_inode$jscomp$28$$) { + $dbg_assert$$(this.IsDirectory($idx$jscomp$19_inode$jscomp$28$$), "Filesystem: cannot get parent of non-directory inode"); + $idx$jscomp$19_inode$jscomp$28$$ = this.inodes[$idx$jscomp$19_inode$jscomp$28$$]; + if (this.should_be_linked($idx$jscomp$19_inode$jscomp$28$$)) { + return $idx$jscomp$19_inode$jscomp$28$$.direntries.get(".."); + } + const $foreign_dirid$jscomp$1$$ = this.follow_fs($idx$jscomp$19_inode$jscomp$28$$).GetParent($idx$jscomp$19_inode$jscomp$28$$.foreign_id); + $dbg_assert$$(-1 !== $foreign_dirid$jscomp$1$$, "Filesystem: should not have invalid parent ids"); + return this.get_forwarder($idx$jscomp$19_inode$jscomp$28$$.mount_id, $foreign_dirid$jscomp$1$$); +}; +$FS$$.prototype.PrepareCAPs = function($id$jscomp$26_inode$jscomp$29$$) { + $id$jscomp$26_inode$jscomp$29$$ = this.GetInode($id$jscomp$26_inode$jscomp$29$$); + if ($id$jscomp$26_inode$jscomp$29$$.caps) { + return $id$jscomp$26_inode$jscomp$29$$.caps.length; + } + $id$jscomp$26_inode$jscomp$29$$.caps = new Uint8Array(20); + $id$jscomp$26_inode$jscomp$29$$.caps[0] = 0; + $id$jscomp$26_inode$jscomp$29$$.caps[1] = 0; + $id$jscomp$26_inode$jscomp$29$$.caps[2] = 0; + $id$jscomp$26_inode$jscomp$29$$.caps[3] = 2; + $id$jscomp$26_inode$jscomp$29$$.caps[4] = 255; + $id$jscomp$26_inode$jscomp$29$$.caps[5] = 255; + $id$jscomp$26_inode$jscomp$29$$.caps[6] = 255; + $id$jscomp$26_inode$jscomp$29$$.caps[7] = 255; + $id$jscomp$26_inode$jscomp$29$$.caps[8] = 255; + $id$jscomp$26_inode$jscomp$29$$.caps[9] = 255; + $id$jscomp$26_inode$jscomp$29$$.caps[10] = 255; + $id$jscomp$26_inode$jscomp$29$$.caps[11] = 255; + $id$jscomp$26_inode$jscomp$29$$.caps[12] = 63; + $id$jscomp$26_inode$jscomp$29$$.caps[13] = 0; + $id$jscomp$26_inode$jscomp$29$$.caps[14] = 0; + $id$jscomp$26_inode$jscomp$29$$.caps[15] = 0; + $id$jscomp$26_inode$jscomp$29$$.caps[16] = 63; + $id$jscomp$26_inode$jscomp$29$$.caps[17] = 0; + $id$jscomp$26_inode$jscomp$29$$.caps[18] = 0; + $id$jscomp$26_inode$jscomp$29$$.caps[19] = 0; + return $id$jscomp$26_inode$jscomp$29$$.caps.length; +}; +function $FSMountInfo$$($filesystem$jscomp$2$$) { + this.fs = $filesystem$jscomp$2$$; + this.backtrack = new Map; +} +$FSMountInfo$$.prototype.get_state = function() { + const $state$jscomp$60$$ = []; + $state$jscomp$60$$[0] = this.fs; + $state$jscomp$60$$[1] = [...this.backtrack]; + return $state$jscomp$60$$; +}; +$FSMountInfo$$.prototype.set_state = function($state$jscomp$61$$) { + this.fs = $state$jscomp$61$$[0]; + this.backtrack = new Map($state$jscomp$61$$[1]); +}; +$FS$$.prototype.set_forwarder = function($idx$jscomp$20$$, $mount_id$jscomp$1$$, $foreign_id$jscomp$10$$) { + const $inode$jscomp$30$$ = this.inodes[$idx$jscomp$20$$]; + $dbg_assert$$(0 === $inode$jscomp$30$$.nlinks, "Filesystem: attempted to convert an inode into forwarder before unlinking the inode"); + this.is_forwarder($inode$jscomp$30$$) && this.mounts[$inode$jscomp$30$$.mount_id].backtrack.delete($inode$jscomp$30$$.foreign_id); + $inode$jscomp$30$$.status = 5; + $inode$jscomp$30$$.mount_id = $mount_id$jscomp$1$$; + $inode$jscomp$30$$.foreign_id = $foreign_id$jscomp$10$$; + this.mounts[$mount_id$jscomp$1$$].backtrack.set($foreign_id$jscomp$10$$, $idx$jscomp$20$$); +}; +$FS$$.prototype.create_forwarder = function($mount_id$jscomp$2$$, $foreign_id$jscomp$11$$) { + const $inode$jscomp$31$$ = this.CreateInode(), $idx$jscomp$21$$ = this.inodes.length; + this.inodes.push($inode$jscomp$31$$); + $inode$jscomp$31$$.fid = $idx$jscomp$21$$; + this.set_forwarder($idx$jscomp$21$$, $mount_id$jscomp$2$$, $foreign_id$jscomp$11$$); + return $idx$jscomp$21$$; +}; +$FS$$.prototype.is_forwarder = function($inode$jscomp$32$$) { + return 5 === $inode$jscomp$32$$.status; +}; +$FS$$.prototype.is_a_root = function($idx$jscomp$22$$) { + return 0 === this.GetInode($idx$jscomp$22$$).fid; +}; +$FS$$.prototype.get_forwarder = function($mount_id$jscomp$3$$, $foreign_id$jscomp$12$$) { + var $mount_result$jscomp$21$$ = this.mounts[$mount_id$jscomp$3$$]; + $dbg_assert$$(0 <= $foreign_id$jscomp$12$$, "Filesystem get_forwarder: invalid foreign_id: " + $foreign_id$jscomp$12$$); + $dbg_assert$$($mount_result$jscomp$21$$, "Filesystem get_forwarder: invalid mount number: " + $mount_id$jscomp$3$$); + $mount_result$jscomp$21$$ = $mount_result$jscomp$21$$.backtrack.get($foreign_id$jscomp$12$$); + return void 0 === $mount_result$jscomp$21$$ ? this.create_forwarder($mount_id$jscomp$3$$, $foreign_id$jscomp$12$$) : $mount_result$jscomp$21$$; +}; +$FS$$.prototype.delete_forwarder = function($inode$jscomp$33$$) { + $dbg_assert$$(this.is_forwarder($inode$jscomp$33$$), "Filesystem delete_forwarder: expected forwarder"); + $inode$jscomp$33$$.status = -1; + this.mounts[$inode$jscomp$33$$.mount_id].backtrack.delete($inode$jscomp$33$$.foreign_id); +}; +$FS$$.prototype.follow_fs = function($inode$jscomp$34$$) { + const $mount$jscomp$1$$ = this.mounts[$inode$jscomp$34$$.mount_id]; + $dbg_assert$$(this.is_forwarder($inode$jscomp$34$$), "Filesystem follow_fs: inode should be a forwarding inode"); + $dbg_assert$$($mount$jscomp$1$$, "Filesystem follow_fs: inode should point to valid mounted FS"); + return $mount$jscomp$1$$.fs; +}; +$FS$$.prototype.Mount = function($mount_id$jscomp$4_parent$jscomp$6_path$jscomp$11$$, $fs$jscomp$8_idx$jscomp$23$$) { + $dbg_assert$$($fs$jscomp$8_idx$jscomp$23$$.qidcounter === this.qidcounter, "Cannot mount filesystem whose qid numbers aren't synchronised with current filesystem."); + var $path_infos$jscomp$1_ret$jscomp$12$$ = this.SearchPath($mount_id$jscomp$4_parent$jscomp$6_path$jscomp$11$$); + if (-1 === $path_infos$jscomp$1_ret$jscomp$12$$.parentid) { + return $dbg_log$$("Mount failed: parent for path not found: " + $mount_id$jscomp$4_parent$jscomp$6_path$jscomp$11$$, 4194304), -2; + } + if (-1 !== $path_infos$jscomp$1_ret$jscomp$12$$.id) { + return $dbg_log$$("Mount failed: file already exists at path: " + $mount_id$jscomp$4_parent$jscomp$6_path$jscomp$11$$, 4194304), -17; + } + if ($path_infos$jscomp$1_ret$jscomp$12$$.forward_path) { + return $mount_id$jscomp$4_parent$jscomp$6_path$jscomp$11$$ = this.inodes[$path_infos$jscomp$1_ret$jscomp$12$$.parentid], $path_infos$jscomp$1_ret$jscomp$12$$ = this.follow_fs($mount_id$jscomp$4_parent$jscomp$6_path$jscomp$11$$).Mount($path_infos$jscomp$1_ret$jscomp$12$$.forward_path, $fs$jscomp$8_idx$jscomp$23$$), 0 > $path_infos$jscomp$1_ret$jscomp$12$$ ? $path_infos$jscomp$1_ret$jscomp$12$$ : this.get_forwarder($mount_id$jscomp$4_parent$jscomp$6_path$jscomp$11$$.mount_id, $path_infos$jscomp$1_ret$jscomp$12$$); + } + $mount_id$jscomp$4_parent$jscomp$6_path$jscomp$11$$ = this.mounts.length; + this.mounts.push(new $FSMountInfo$$($fs$jscomp$8_idx$jscomp$23$$)); + $fs$jscomp$8_idx$jscomp$23$$ = this.create_forwarder($mount_id$jscomp$4_parent$jscomp$6_path$jscomp$11$$, 0); + this.link_under_dir($path_infos$jscomp$1_ret$jscomp$12$$.parentid, $fs$jscomp$8_idx$jscomp$23$$, $path_infos$jscomp$1_ret$jscomp$12$$.name); + return $fs$jscomp$8_idx$jscomp$23$$; +}; +function $FSLockRegion$$() { + this.type = 2; + this.start = 0; + this.length = Infinity; + this.proc_id = -1; + this.client_id = ""; +} +$FSLockRegion$$.prototype.get_state = function() { + const $state$jscomp$62$$ = []; + $state$jscomp$62$$[0] = this.type; + $state$jscomp$62$$[1] = this.start; + $state$jscomp$62$$[2] = Infinity === this.length ? 0 : this.length; + $state$jscomp$62$$[3] = this.proc_id; + $state$jscomp$62$$[4] = this.client_id; + return $state$jscomp$62$$; +}; +$FSLockRegion$$.prototype.set_state = function($state$jscomp$63$$) { + this.type = $state$jscomp$63$$[0]; + this.start = $state$jscomp$63$$[1]; + this.length = 0 === $state$jscomp$63$$[2] ? Infinity : $state$jscomp$63$$[2]; + this.proc_id = $state$jscomp$63$$[3]; + this.client_id = $state$jscomp$63$$[4]; +}; +$FSLockRegion$$.prototype.clone = function() { + const $new_region$$ = new $FSLockRegion$$; + $new_region$$.set_state(this.get_state()); + return $new_region$$; +}; +$FSLockRegion$$.prototype.conflicts_with = function($region$$) { + return this.proc_id === $region$$.proc_id && this.client_id === $region$$.client_id || 2 === this.type || 2 === $region$$.type || 1 !== this.type && 1 !== $region$$.type || this.start + this.length <= $region$$.start || $region$$.start + $region$$.length <= this.start ? !1 : !0; +}; +$FSLockRegion$$.prototype.is_alike = function($region$jscomp$1$$) { + return $region$jscomp$1$$.proc_id === this.proc_id && $region$jscomp$1$$.client_id === this.client_id && $region$jscomp$1$$.type === this.type; +}; +$FSLockRegion$$.prototype.may_merge_after = function($region$jscomp$2$$) { + return this.is_alike($region$jscomp$2$$) && $region$jscomp$2$$.start + $region$jscomp$2$$.length === this.start; +}; +$FS$$.prototype.DescribeLock = function($type$jscomp$158$$, $start$jscomp$50$$, $length$jscomp$29$$, $proc_id$$, $client_id$$) { + $dbg_assert$$(0 === $type$jscomp$158$$ || 1 === $type$jscomp$158$$ || 2 === $type$jscomp$158$$, "Filesystem: Invalid lock type: " + $type$jscomp$158$$); + $dbg_assert$$(0 <= $start$jscomp$50$$, "Filesystem: Invalid negative lock starting offset: " + $start$jscomp$50$$); + $dbg_assert$$(0 < $length$jscomp$29$$, "Filesystem: Invalid non-positive lock length: " + $length$jscomp$29$$); + const $lock$jscomp$1$$ = new $FSLockRegion$$; + $lock$jscomp$1$$.type = $type$jscomp$158$$; + $lock$jscomp$1$$.start = $start$jscomp$50$$; + $lock$jscomp$1$$.length = $length$jscomp$29$$; + $lock$jscomp$1$$.proc_id = $proc_id$$; + $lock$jscomp$1$$.client_id = $client_id$$; + return $lock$jscomp$1$$; +}; +$FS$$.prototype.GetLock = function($id$jscomp$27_inode$jscomp$35$$, $request$jscomp$5$$) { + $id$jscomp$27_inode$jscomp$35$$ = this.inodes[$id$jscomp$27_inode$jscomp$35$$]; + if (this.is_forwarder($id$jscomp$27_inode$jscomp$35$$)) { + var $foreign_id$jscomp$13_region$jscomp$3$$ = $id$jscomp$27_inode$jscomp$35$$.foreign_id; + return this.follow_fs($id$jscomp$27_inode$jscomp$35$$).GetLock($foreign_id$jscomp$13_region$jscomp$3$$, $request$jscomp$5$$); + } + for ($foreign_id$jscomp$13_region$jscomp$3$$ of $id$jscomp$27_inode$jscomp$35$$.locks) { + if ($request$jscomp$5$$.conflicts_with($foreign_id$jscomp$13_region$jscomp$3$$)) { + return $foreign_id$jscomp$13_region$jscomp$3$$.clone(); + } + } + return null; +}; +$FS$$.prototype.Lock = function($foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$, $request$jscomp$6$$, $flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$) { + const $inode$jscomp$36$$ = this.inodes[$foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$]; + if (this.is_forwarder($inode$jscomp$36$$)) { + return $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$ = $inode$jscomp$36$$.foreign_id, this.follow_fs($inode$jscomp$36$$).Lock($foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$, $request$jscomp$6$$, $flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$); + } + $request$jscomp$6$$ = $request$jscomp$6$$.clone(); + if (2 !== $request$jscomp$6$$.type && this.GetLock($foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$, $request$jscomp$6$$)) { + return 1; + } + for ($flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$ = 0; $flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$ < $inode$jscomp$36$$.locks.length; $flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$++) { + $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$ = $inode$jscomp$36$$.locks[$flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$]; + $dbg_assert$$(0 < $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.length, "Filesystem: Found non-positive lock region length: " + $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.length); + $dbg_assert$$(0 === $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.type || 1 === $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.type, "Filesystem: Found invalid lock type: " + $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.type); + $dbg_assert$$(!$inode$jscomp$36$$.locks[$flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$ - 1] || $inode$jscomp$36$$.locks[$flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$ - 1].start <= $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.start, "Filesystem: Locks should be sorted by starting offset"); + if ($foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.start + $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.length <= $request$jscomp$6$$.start) { + continue; + } + if ($request$jscomp$6$$.start + $request$jscomp$6$$.length <= $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.start) { + break; + } + if ($foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.proc_id !== $request$jscomp$6$$.proc_id || $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.client_id !== $request$jscomp$6$$.client_id) { + $dbg_assert$$(!$foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.conflicts_with($request$jscomp$6$$), "Filesytem: Found conflicting lock region, despite already checked for conflicts"); + continue; + } + var $i$jscomp$142_start2$$ = $request$jscomp$6$$.start + $request$jscomp$6$$.length; + const $length1$$ = $request$jscomp$6$$.start - $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.start, $length2$$ = $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.start + $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.length - $i$jscomp$142_start2$$; + if (0 < $length1$$ && 0 < $length2$$ && $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.type === $request$jscomp$6$$.type) { + return 0; + } + 0 < $length1$$ && ($foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.length = $length1$$); + if (0 >= $length1$$ && 0 < $length2$$) { + $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.start = $i$jscomp$142_start2$$, $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.length = $length2$$; + } else { + if (0 < $length2$$) { + for (; $flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$ < $inode$jscomp$36$$.locks.length && $inode$jscomp$36$$.locks[$flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$].start < $i$jscomp$142_start2$$;) { + $flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$++; + } + $inode$jscomp$36$$.locks.splice($flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$, 0, this.DescribeLock($foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.type, $i$jscomp$142_start2$$, $length2$$, $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.proc_id, $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$.client_id)); + } else { + 0 >= $length1$$ && ($inode$jscomp$36$$.locks.splice($flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$, 1), $flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$--); + } + } + } + if (2 !== $request$jscomp$6$$.type) { + $flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$ = $request$jscomp$6$$; + $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$ = !1; + for ($i$jscomp$142_start2$$ = 0; $i$jscomp$142_start2$$ < $inode$jscomp$36$$.locks.length && !($flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$.may_merge_after($inode$jscomp$36$$.locks[$i$jscomp$142_start2$$]) && ($inode$jscomp$36$$.locks[$i$jscomp$142_start2$$].length += $request$jscomp$6$$.length, $flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$ = $inode$jscomp$36$$.locks[$i$jscomp$142_start2$$], $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$ = !0), $request$jscomp$6$$.start <= + $inode$jscomp$36$$.locks[$i$jscomp$142_start2$$].start); $i$jscomp$142_start2$$++) { + } + $foreign_id$jscomp$14_has_merged_id$jscomp$28_region$jscomp$4$$ || ($inode$jscomp$36$$.locks.splice($i$jscomp$142_start2$$, 0, $flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$), $i$jscomp$142_start2$$++); + for (; $i$jscomp$142_start2$$ < $inode$jscomp$36$$.locks.length; $i$jscomp$142_start2$$++) { + if ($inode$jscomp$36$$.locks[$i$jscomp$142_start2$$].is_alike($flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$)) { + $inode$jscomp$36$$.locks[$i$jscomp$142_start2$$].may_merge_after($flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$) && ($flags$jscomp$20_i$jscomp$141_new_region$jscomp$1$$.length += $inode$jscomp$36$$.locks[$i$jscomp$142_start2$$].length, $inode$jscomp$36$$.locks.splice($i$jscomp$142_start2$$, 1)); + break; + } + } + } + return 0; +}; +$FS$$.prototype.read_dir = function($dir$jscomp$1_p$jscomp$1_path$jscomp$12$$) { + $dir$jscomp$1_p$jscomp$1_path$jscomp$12$$ = this.SearchPath($dir$jscomp$1_p$jscomp$1_path$jscomp$12$$); + if (-1 !== $dir$jscomp$1_p$jscomp$1_path$jscomp$12$$.id) { + return $dir$jscomp$1_p$jscomp$1_path$jscomp$12$$ = this.GetInode($dir$jscomp$1_p$jscomp$1_path$jscomp$12$$.id), Array.from($dir$jscomp$1_p$jscomp$1_path$jscomp$12$$.direntries.keys()).filter($path$jscomp$13$$ => "." !== $path$jscomp$13$$ && ".." !== $path$jscomp$13$$); + } +}; +$FS$$.prototype.read_file = function($file$jscomp$7_p$jscomp$2$$) { + $file$jscomp$7_p$jscomp$2$$ = this.SearchPath($file$jscomp$7_p$jscomp$2$$); + if (-1 === $file$jscomp$7_p$jscomp$2$$.id) { + return Promise.resolve(null); + } + const $inode$jscomp$37$$ = this.GetInode($file$jscomp$7_p$jscomp$2$$.id); + return this.Read($file$jscomp$7_p$jscomp$2$$.id, 0, $inode$jscomp$37$$.size); +}; +var $message$$ = {Debug:function($log$jscomp$1$$) { + $dbg_log$$([].slice.apply(arguments).join(" "), 4194304); +}, Abort:function() { + throw Error("message.Abort()"); +}}; +var $marshall$$ = {}; +const $textde$$ = new TextDecoder, $texten$$ = new TextEncoder; +$marshall$$.Marshall = function($typelist$$, $input$jscomp$10$$, $struct$jscomp$1$$, $offset$jscomp$80$$) { + for (var $item$jscomp$8_stringBytes$$, $size$jscomp$47$$ = 0, $i$jscomp$143$$ = 0; $i$jscomp$143$$ < $typelist$$.length; $i$jscomp$143$$++) { + switch($item$jscomp$8_stringBytes$$ = $input$jscomp$10$$[$i$jscomp$143$$], $typelist$$[$i$jscomp$143$$]) { + case "w": + $struct$jscomp$1$$[$offset$jscomp$80$$++] = $item$jscomp$8_stringBytes$$ & 255; + $struct$jscomp$1$$[$offset$jscomp$80$$++] = $item$jscomp$8_stringBytes$$ >> 8 & 255; + $struct$jscomp$1$$[$offset$jscomp$80$$++] = $item$jscomp$8_stringBytes$$ >> 16 & 255; + $struct$jscomp$1$$[$offset$jscomp$80$$++] = $item$jscomp$8_stringBytes$$ >> 24 & 255; + $size$jscomp$47$$ += 4; + break; + case "d": + $struct$jscomp$1$$[$offset$jscomp$80$$++] = $item$jscomp$8_stringBytes$$ & 255; + $struct$jscomp$1$$[$offset$jscomp$80$$++] = $item$jscomp$8_stringBytes$$ >> 8 & 255; + $struct$jscomp$1$$[$offset$jscomp$80$$++] = $item$jscomp$8_stringBytes$$ >> 16 & 255; + $struct$jscomp$1$$[$offset$jscomp$80$$++] = $item$jscomp$8_stringBytes$$ >> 24 & 255; + $struct$jscomp$1$$[$offset$jscomp$80$$++] = 0; + $struct$jscomp$1$$[$offset$jscomp$80$$++] = 0; + $struct$jscomp$1$$[$offset$jscomp$80$$++] = 0; + $struct$jscomp$1$$[$offset$jscomp$80$$++] = 0; + $size$jscomp$47$$ += 8; + break; + case "h": + $struct$jscomp$1$$[$offset$jscomp$80$$++] = $item$jscomp$8_stringBytes$$ & 255; + $struct$jscomp$1$$[$offset$jscomp$80$$++] = $item$jscomp$8_stringBytes$$ >> 8; + $size$jscomp$47$$ += 2; + break; + case "b": + $struct$jscomp$1$$[$offset$jscomp$80$$++] = $item$jscomp$8_stringBytes$$; + $size$jscomp$47$$ += 1; + break; + case "s": + var $lengthoffset$$ = $offset$jscomp$80$$, $length$jscomp$30$$ = 0; + $struct$jscomp$1$$[$offset$jscomp$80$$++] = 0; + $struct$jscomp$1$$[$offset$jscomp$80$$++] = 0; + $size$jscomp$47$$ += 2; + $item$jscomp$8_stringBytes$$ = $texten$$.encode($item$jscomp$8_stringBytes$$); + $size$jscomp$47$$ += $item$jscomp$8_stringBytes$$.byteLength; + $length$jscomp$30$$ += $item$jscomp$8_stringBytes$$.byteLength; + $struct$jscomp$1$$.set($item$jscomp$8_stringBytes$$, $offset$jscomp$80$$); + $offset$jscomp$80$$ += $item$jscomp$8_stringBytes$$.byteLength; + $struct$jscomp$1$$[$lengthoffset$$ + 0] = $length$jscomp$30$$ & 255; + $struct$jscomp$1$$[$lengthoffset$$ + 1] = $length$jscomp$30$$ >> 8 & 255; + break; + case "Q": + $marshall$$.Marshall(["b", "w", "d"], [$item$jscomp$8_stringBytes$$.type, $item$jscomp$8_stringBytes$$.version, $item$jscomp$8_stringBytes$$.path], $struct$jscomp$1$$, $offset$jscomp$80$$); + $offset$jscomp$80$$ += 13; + $size$jscomp$47$$ += 13; + break; + default: + $message$$.Debug("Marshall: Unknown type=" + $typelist$$[$i$jscomp$143$$]); + } + } + return $size$jscomp$47$$; +}; +$marshall$$.Unmarshall = function($typelist$jscomp$1$$, $struct$jscomp$2$$, $state$jscomp$64$$) { + let $offset$jscomp$81$$ = $state$jscomp$64$$.offset; + for (var $output$jscomp$2$$ = [], $i$jscomp$144$$ = 0; $i$jscomp$144$$ < $typelist$jscomp$1$$.length; $i$jscomp$144$$++) { + switch($typelist$jscomp$1$$[$i$jscomp$144$$]) { + case "w": + var $len$jscomp$28_qid_val$jscomp$1$$ = $struct$jscomp$2$$[$offset$jscomp$81$$++]; + $len$jscomp$28_qid_val$jscomp$1$$ += $struct$jscomp$2$$[$offset$jscomp$81$$++] << 8; + $len$jscomp$28_qid_val$jscomp$1$$ += $struct$jscomp$2$$[$offset$jscomp$81$$++] << 16; + $len$jscomp$28_qid_val$jscomp$1$$ += $struct$jscomp$2$$[$offset$jscomp$81$$++] << 24 >>> 0; + $output$jscomp$2$$.push($len$jscomp$28_qid_val$jscomp$1$$); + break; + case "d": + $len$jscomp$28_qid_val$jscomp$1$$ = $struct$jscomp$2$$[$offset$jscomp$81$$++]; + $len$jscomp$28_qid_val$jscomp$1$$ += $struct$jscomp$2$$[$offset$jscomp$81$$++] << 8; + $len$jscomp$28_qid_val$jscomp$1$$ += $struct$jscomp$2$$[$offset$jscomp$81$$++] << 16; + $len$jscomp$28_qid_val$jscomp$1$$ += $struct$jscomp$2$$[$offset$jscomp$81$$++] << 24 >>> 0; + $offset$jscomp$81$$ += 4; + $output$jscomp$2$$.push($len$jscomp$28_qid_val$jscomp$1$$); + break; + case "h": + $len$jscomp$28_qid_val$jscomp$1$$ = $struct$jscomp$2$$[$offset$jscomp$81$$++]; + $output$jscomp$2$$.push($len$jscomp$28_qid_val$jscomp$1$$ + ($struct$jscomp$2$$[$offset$jscomp$81$$++] << 8)); + break; + case "b": + $output$jscomp$2$$.push($struct$jscomp$2$$[$offset$jscomp$81$$++]); + break; + case "s": + $len$jscomp$28_qid_val$jscomp$1$$ = $struct$jscomp$2$$[$offset$jscomp$81$$++]; + $len$jscomp$28_qid_val$jscomp$1$$ += $struct$jscomp$2$$[$offset$jscomp$81$$++] << 8; + var $stringBytes$jscomp$1$$ = $struct$jscomp$2$$.slice($offset$jscomp$81$$, $offset$jscomp$81$$ + $len$jscomp$28_qid_val$jscomp$1$$); + $offset$jscomp$81$$ += $len$jscomp$28_qid_val$jscomp$1$$; + $output$jscomp$2$$.push($textde$$.decode($stringBytes$jscomp$1$$)); + break; + case "Q": + $state$jscomp$64$$.offset = $offset$jscomp$81$$; + $len$jscomp$28_qid_val$jscomp$1$$ = $marshall$$.Unmarshall(["b", "w", "d"], $struct$jscomp$2$$, $state$jscomp$64$$); + $offset$jscomp$81$$ = $state$jscomp$64$$.offset; + $output$jscomp$2$$.push({type:$len$jscomp$28_qid_val$jscomp$1$$[0], version:$len$jscomp$28_qid_val$jscomp$1$$[1], path:$len$jscomp$28_qid_val$jscomp$1$$[2], }); + break; + default: + $message$$.Debug("Error in Unmarshall: Unknown type=" + $typelist$jscomp$1$$[$i$jscomp$144$$]); + } + } + $state$jscomp$64$$.offset = $offset$jscomp$81$$; + return $output$jscomp$2$$; +}; +}).call(this);