Files

734 lines
35 KiB
Plaintext

(module $h264_dec.wasm
(type (;0;) (func (param i32 i32)))
(type (;1;) (func))
(type (;2;) (func (param i32)))
(type (;3;) (func (result i32)))
(import "__pragma" "loopbound" (func $__pragma_loopbound (type 0)))
(func $__wasm_apply_data_relocs (type 1))
(func $h264_dec_init (type 1)
(local i32 i32 i32 i32)
global.get $__stack_pointer
i32.const 16
i32.sub
local.tee 0
global.set $__stack_pointer
local.get 0
i32.const 0
i32.store8 offset=15
i32.const 8450
i32.const 8450
call $__pragma_loopbound
i32.const -8450
local.set 1
loop ;; label = @1
i32.const 16672
local.get 1
i32.add
local.tee 2
i32.const 8450
i32.add
local.tee 3
local.get 3
i32.load8_u
local.get 0
i32.load8_u offset=15
i32.xor
i32.store8
local.get 2
i32.const 8451
i32.add
local.tee 2
local.get 2
i32.load8_u
local.get 0
i32.load8_u offset=15
i32.xor
i32.store8
local.get 1
i32.const 2
i32.add
local.tee 1
br_if 0 (;@1;)
end
i32.const 4050
i32.const 4050
call $__pragma_loopbound
i32.const -8100
local.set 2
loop ;; label = @1
i32.const 1024
local.get 2
i32.add
local.tee 1
i32.const 8100
i32.add
local.tee 3
local.get 3
i32.load8_u
local.get 0
i32.load8_u offset=15
i32.xor
i32.store8
local.get 1
i32.const 8101
i32.add
local.tee 3
local.get 3
i32.load8_u
local.get 0
i32.load8_u offset=15
i32.xor
i32.store8
local.get 1
i32.const 8102
i32.add
local.tee 3
local.get 3
i32.load8_u
local.get 0
i32.load8_u offset=15
i32.xor
i32.store8
local.get 1
i32.const 8103
i32.add
local.tee 1
local.get 1
i32.load8_u
local.get 0
i32.load8_u offset=15
i32.xor
i32.store8
local.get 2
i32.const 4
i32.add
local.tee 2
br_if 0 (;@1;)
end
i32.const 256
i32.const 256
call $__pragma_loopbound
i32.const -1024
local.set 2
loop ;; label = @1
i32.const 25136
local.get 2
i32.add
local.tee 1
i32.const 1024
i32.add
local.tee 3
local.get 3
i32.load8_u
local.get 0
i32.load8_u offset=15
i32.xor
i32.store8
local.get 1
i32.const 1025
i32.add
local.tee 3
local.get 3
i32.load8_u
local.get 0
i32.load8_u offset=15
i32.xor
i32.store8
local.get 1
i32.const 1026
i32.add
local.tee 3
local.get 3
i32.load8_u
local.get 0
i32.load8_u offset=15
i32.xor
i32.store8
local.get 1
i32.const 1027
i32.add
local.tee 1
local.get 1
i32.load8_u
local.get 0
i32.load8_u offset=15
i32.xor
i32.store8
local.get 2
i32.const 4
i32.add
local.tee 2
br_if 0 (;@1;)
end
i32.const 0
i64.const 34359738376
i64.store offset=16660 align=4
i32.const 0
i32.const 256
i32.store offset=16128
i32.const 0
i64.const 8589934592
i64.store offset=16652 align=4
i32.const 0
i64.const 1099511628128
i64.store offset=16120 align=4
i32.const 0
i64.const 4294967297
i64.store offset=16112 align=4
i32.const 0
i64.const 0
i64.store offset=16644 align=4
local.get 0
i32.const 16
i32.add
global.set $__stack_pointer)
(func $h264_dec_decode_one_macroblock (type 2) (param i32)
(local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32)
local.get 0
i32.load offset=552
local.set 1
local.get 0
i32.load offset=548
local.set 2
i32.const 2
i32.const 2
call $__pragma_loopbound
i32.const 64
local.get 1
i32.div_s
local.tee 3
i32.const 64
local.get 2
i32.div_s
local.tee 4
i32.mul
local.tee 5
i32.const 1
i32.shr_s
local.set 6
local.get 3
i32.const -1
i32.add
local.set 7
local.get 4
i32.const -1
i32.add
local.set 8
i32.const 1
local.set 9
i32.const 0
local.set 1
loop ;; label = @1
i32.const 1
i32.const 1
call $__pragma_loopbound
block ;; label = @2
local.get 0
i32.load offset=544
i32.const 2
i32.lt_s
br_if 0 (;@2;)
i32.const 0
local.set 10
i32.const 1024
local.get 1
i32.const 4050
i32.mul
i32.add
local.set 11
local.get 1
i32.const 3456
i32.mul
i32.const 9200
i32.add
local.set 12
loop ;; label = @3
i32.const 4
i32.const 4
call $__pragma_loopbound
i32.const 0
local.set 13
loop ;; label = @4
local.get 0
i32.load offset=12
local.set 14
local.get 0
i32.load offset=16
local.set 15
i32.const 4
i32.const 4
call $__pragma_loopbound
local.get 4
local.get 15
i32.mul
local.set 16
local.get 4
local.get 15
i32.const 1
i32.add
local.tee 17
i32.mul
i32.const -1
i32.add
local.set 18
i32.const 0
local.set 19
loop ;; label = @5
local.get 0
i32.load offset=552
local.set 1
i32.const 4
i32.const 4
call $__pragma_loopbound
local.get 19
local.get 14
i32.add
local.tee 2
local.get 1
i32.const 4
i32.div_s
i32.div_s
i32.const 64
i32.rem_s
local.set 1
block ;; label = @6
local.get 0
i32.load offset=540
br_if 0 (;@6;)
local.get 2
local.get 3
i32.mul
local.set 20
i32.const 0
local.set 2
i32.const 16672
local.get 1
i32.const 130
i32.mul
i32.add
local.set 21
local.get 15
local.set 22
i32.const 0
local.set 1
i32.const 0
local.set 23
loop ;; label = @7
block ;; label = @8
local.get 23
br_if 0 (;@8;)
local.get 19
local.get 1
i32.add
i32.const 9136
i32.add
local.get 16
local.get 2
i32.add
local.get 21
local.get 22
local.get 0
i32.load offset=548
i32.const 4
i32.div_s
i32.div_s
i32.const 64
i32.rem_s
i32.const 1
i32.shl
i32.add
local.tee 24
i32.load8_s
local.tee 25
i32.add
local.tee 26
local.get 8
i32.and
local.tee 23
local.get 11
local.get 20
local.get 24
i32.load8_s offset=1
i32.add
local.tee 24
local.get 3
i32.div_s
local.tee 27
i32.const 287
local.get 27
i32.const 287
i32.lt_s
select
local.tee 27
i32.const 0
local.get 27
i32.const 0
i32.gt_s
select
i32.const 45
i32.rem_u
i32.const 90
i32.mul
i32.add
local.tee 27
local.get 18
local.get 2
i32.add
local.get 25
i32.add
local.get 4
i32.div_s
local.tee 28
local.get 0
i32.load offset=8
local.tee 25
i32.const -1
i32.add
local.tee 29
local.get 28
local.get 25
i32.lt_s
select
local.tee 28
i32.const 0
local.get 28
i32.const 0
i32.gt_s
select
i32.const 45
i32.rem_u
i32.const 1
i32.shl
local.tee 28
i32.add
i32.load16_s
i32.mul
local.get 4
local.get 23
i32.sub
local.tee 30
local.get 27
local.get 26
local.get 4
i32.div_s
local.tee 26
local.get 29
local.get 26
local.get 25
i32.lt_s
select
local.tee 25
i32.const 0
local.get 25
i32.const 0
i32.gt_s
select
i32.const 45
i32.rem_u
i32.const 1
i32.shl
local.tee 25
i32.add
i32.load16_s
i32.mul
i32.add
local.get 3
local.get 24
local.get 7
i32.and
local.tee 26
i32.sub
i32.mul
local.get 6
i32.add
local.get 23
local.get 11
local.get 24
local.get 7
i32.add
local.get 3
i32.div_s
local.tee 24
i32.const 287
local.get 24
i32.const 287
i32.lt_s
select
local.tee 24
i32.const 0
local.get 24
i32.const 0
i32.gt_s
select
i32.const 45
i32.rem_u
i32.const 90
i32.mul
i32.add
local.tee 24
local.get 28
i32.add
i32.load16_s
i32.mul
local.get 30
local.get 24
local.get 25
i32.add
i32.load16_s
i32.mul
i32.add
local.get 26
i32.mul
i32.add
local.get 5
i32.div_s
i32.store8
end
local.get 1
i32.const 21
i32.eq
br_if 1 (;@6;)
local.get 22
i32.const 1
i32.add
local.set 22
local.get 2
local.get 4
i32.add
local.set 2
local.get 1
i32.const 7
i32.add
local.set 1
local.get 0
i32.load offset=540
local.set 23
br 0 (;@7;)
end
end
local.get 19
i32.const 1
i32.add
local.tee 19
i32.const 4
i32.ne
br_if 0 (;@5;)
end
i32.const 4
i32.const 4
call $__pragma_loopbound
i32.const 4
i32.const 4
call $__pragma_loopbound
local.get 12
local.get 14
i32.const 64
i32.rem_s
i32.const 54
i32.mul
i32.add
local.tee 1
local.get 15
i32.const 54
i32.rem_s
local.tee 2
i32.add
i32.const 0
i32.load offset=25136
i32.store8
local.get 12
local.get 14
i32.const 1
i32.add
i32.const 64
i32.rem_s
i32.const 54
i32.mul
i32.add
local.tee 22
local.get 2
i32.add
i32.const 25136
i32.load offset=4
i32.store8
local.get 12
local.get 14
i32.const 2
i32.add
i32.const 64
i32.rem_s
i32.const 54
i32.mul
i32.add
local.tee 23
local.get 2
i32.add
i32.const 25136
i32.load offset=8
i32.store8
local.get 12
local.get 14
i32.const 3
i32.add
i32.const 64
i32.rem_s
i32.const 54
i32.mul
i32.add
local.tee 24
local.get 2
i32.add
i32.const 25136
i32.load offset=12
i32.store8
i32.const 4
i32.const 4
call $__pragma_loopbound
local.get 1
local.get 17
i32.const 54
i32.rem_s
local.tee 2
i32.add
i32.const 25136
i32.load offset=64
i32.store8
local.get 22
local.get 2
i32.add
i32.const 25136
i32.load offset=68
i32.store8
local.get 23
local.get 2
i32.add
i32.const 25136
i32.load offset=72
i32.store8
local.get 24
local.get 2
i32.add
i32.const 25136
i32.load offset=76
i32.store8
i32.const 4
i32.const 4
call $__pragma_loopbound
local.get 1
local.get 15
i32.const 2
i32.add
i32.const 54
i32.rem_s
local.tee 2
i32.add
i32.const 25136
i32.load offset=128
i32.store8
local.get 22
local.get 2
i32.add
i32.const 25136
i32.load offset=132
i32.store8
local.get 23
local.get 2
i32.add
i32.const 25136
i32.load offset=136
i32.store8
local.get 24
local.get 2
i32.add
i32.const 25136
i32.load offset=140
i32.store8
i32.const 4
i32.const 4
call $__pragma_loopbound
local.get 1
local.get 15
i32.const 3
i32.add
i32.const 54
i32.rem_s
local.tee 2
i32.add
i32.const 25136
i32.load offset=192
i32.store8
local.get 22
local.get 2
i32.add
i32.const 25136
i32.load offset=196
i32.store8
local.get 23
local.get 2
i32.add
i32.const 25136
i32.load offset=200
i32.store8
local.get 24
local.get 2
i32.add
i32.const 25136
i32.load offset=204
i32.store8
local.get 13
i32.const 1
i32.add
local.tee 13
i32.const 4
i32.ne
br_if 0 (;@4;)
end
local.get 10
i32.const 1
i32.add
local.tee 10
local.get 0
i32.load offset=544
i32.const 2
i32.div_s
i32.lt_s
br_if 0 (;@3;)
end
end
i32.const 1
local.set 1
local.get 9
i32.const 1
i32.and
local.set 2
i32.const 0
local.set 9
local.get 2
br_if 0 (;@1;)
end)
(func $h264_dec_main (type 1)
i32.const 16112
call $h264_dec_decode_one_macroblock)
(func $__original_main (type 3) (result i32)
call $h264_dec_init
call $h264_dec_main
i32.const 0
i32.load8_s offset=9200
i32.const 0
i32.load8_s offset=9136
i32.add
i32.const -128
i32.ne)
(table (;0;) 1 1 funcref)
(memory (;0;) 1)
(global $__stack_pointer (mut i32) (i32.const 30256))
(global (;1;) i32 (i32.const 26160))
(global (;2;) i32 (i32.const 30256))
(export "memory" (memory 0))
(export "__wasm_apply_data_relocs" (func $__wasm_apply_data_relocs))
(export "entrypoint" (func $h264_dec_main))
(export "main" (func $__original_main))
(export "__data_end" (global 1))
(export "__heap_base" (global 2))
(data $.data (i32.const 1024) "{\00{\00{\00{\00{\00{\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00}\00~\00~\00~\00~\00~\00~\00~\00}\00{\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00z\00z\00y\00y\00x\00x\00x\00w\00w\00w\00w\00w\00w\00w\00x\00y\00y\00y\00y\00y\00y\00y\00y\00x\00x\00x\00z\00z\00|\00|\00|\00{\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00{\00{\00{\00{\00{\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00\7f\00\7f\00\7f\00\80\00\80\00\80\00\80\00\7f\00\82\00\87\00\89\00\8b\00\8c\00\8c\00\8c\00\8c\00\8c\00\8c\00\8d\00\8e\00\8f\00\8f\00\8f\00\8f\00\8f\00\8f\00\8f\00\8e\00\8e\00\8e\00\8d\00\8d\00\8c\00\8c\00\8b\00\8a\00\89\00\89\00\88\00\88\00\87\00\87\00\87\00\86\00\85\00\85\00\86\00\86\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00{\00{\00{\00{\00{\00{\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00z\00z\00y\00y\00x\00x\00x\00w\00w\00w\00w\00w\00w\00w\00x\00y\00y\00y\00y\00y\00y\00y\00y\00x\00x\00x\00z\00z\00|\00|\00|\00{\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00{\00{\00{\00{\00{\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00\7f\00\7f\00\7f\00\80\00\80\00\80\00\80\00\7f\00\82\00\87\00\89\00\8b\00\8c\00\8c\00\8c\00\8c\00\8c\00\8c\00\8d\00\8e\00\8f\00\8f\00\8f\00\8f\00\8f\00\8f\00\8f\00\8e\00\8e\00\8e\00\8d\00\8d\00\8c\00\8c\00\8b\00\8a\00\89\00\89\00\88\00\88\00\87\00\87\00\87\00\86\00\85\00\85\00\86\00\86\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00{\00{\00{\00{\00{\00{\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00z\00z\00y\00y\00x\00x\00x\00w\00w\00w\00w\00w\00w\00w\00x\00y\00y\00y\00y\00y\00y\00y\00y\00x\00x\00x\00z\00z\00|\00|\00|\00{\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00{\00{\00{\00{\00{\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00\7f\00\7f\00\7f\00\80\00\80\00\80\00\80\00\7f\00\82\00\87\00\89\00\8b\00\8c\00\8c\00\8c\00\8c\00\8c\00\8c\00\8d\00\8e\00\8f\00\8f\00\8f\00\8f\00\8f\00\8f\00\8f\00\8e\00\8e\00\8e\00\8d\00\8d\00\8c\00\8c\00\8b\00\8a\00\89\00\89\00\88\00\88\00\87\00\87\00\87\00\86\00\85\00\85\00\86\00\86\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00|\00|\00|\00|\00|\00|\00|\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00|\00|\00|\00|\00|\00|\00|\00{\00{\00z\00z\00z\00z\00z\00z\00z\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00{\00z\00z\00y\00y\00x\00x\00x\00w\00v\00v\00v\00v\00v\00v\00w\00x\00x\00x\00x\00x\00x\00x\00x\00x\00w\00w\00y\00y\00{\00{\00{\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00{\00{\00{\00{\00{\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00\7f\00\7f\00\7f\00\80\00\80\00\80\00\80\00\80\00\82\00\86\00\88\00\8a\00\8b\00\8b\00\8b\00\8b\00\8b\00\8b\00\8c\00\8e\00\8f\00\8f\00\8f\00\8e\00\8e\00\8e\00\8e\00\8e\00\8e\00\8e\00\8d\00\8d\00\8c\00\8c\00\8b\00\8a\00\89\00\89\00\88\00\88\00\87\00\87\00\87\00\86\00\85\00\85\00\86\00\86\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00|\00|\00|\00|\00|\00|\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00|\00|\00|\00|\00|\00|\00|\00|\00z\00z\00z\00z\00z\00z\00z\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00{\00z\00z\00y\00y\00x\00x\00w\00v\00v\00v\00v\00v\00v\00v\00v\00w\00x\00x\00x\00x\00x\00x\00x\00w\00w\00w\00y\00y\00{\00{\00{\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00}\00|\00{\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00{\00{\00{\00{\00{\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00\7f\00\7f\00\7f\00\80\00\80\00\80\00\81\00\80\00\83\00\86\00\88\00\8a\00\8b\00\8b\00\8b\00\8b\00\8b\00\8b\00\8c\00\8e\00\8f\00\8f\00\8e\00\8d\00\8c\00\8c\00\8d\00\8e\00\8e\00\8e\00\8d\00\8d\00\8c\00\8c\00\8b\00\8a\00\89\00\89\00\88\00\88\00\87\00\87\00\87\00\86\00\85\00\85\00\86\00\86\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00}\00|\00|\00|\00|\00|\00|\00|\00{\00{\00{\00{\00{\00{\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00{\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00|\00|\00|\00|\00|\00|\00|\00|\00{\00z\00z\00y\00y\00x\00x\00w\00v\00u\00u\00u\00u\00u\00u\00v\00w\00w\00w\00w\00w\00w\00w\00w\00v\00v\00v\00x\00x\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00{\00{\00{\00{\00{\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00\7f\00\7f\00\7f\00\80\00\80\00\80\00\81\00\81\00\83\00\85\00\87\00\89\00\8a\00\8a\00\8a\00\8a\00\8a\00\8a\00\8b\00\8e\00\8f\00\8f\00\8e\00\8c\00\8b\00\8b\00\8c\00\8d\00\8e\00\8e\00\8d\00\8d\00\8c\00\8c\00\8b\00\8a\00\89\00\89\00\88\00\88\00\87\00\87\00\87\00\86\00\85\00\85\00\86\00\86\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00}\00|\00|\00|\00|\00|\00|\00|\00{\00{\00{\00{\00{\00{\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00{\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00|\00|\00|\00|\00|\00|\00|\00|\00{\00z\00z\00y\00y\00x\00x\00w\00v\00u\00u\00u\00u\00u\00u\00v\00w\00w\00w\00w\00w\00w\00w\00w\00v\00v\00v\00x\00x\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00{\00{\00{\00{\00{\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00\7f\00\7f\00\7f\00\80\00\80\00\80\00\81\00\81\00\83\00\85\00\87\00\89\00\8a\00\8a\00\8a\00\8a\00\8a\00\8a\00\8b\00\8e\00\8f\00\8f\00\8e\00\8c\00\8b\00\8b\00\8c\00\8d\00\8e\00\8e\00\8d\00\8d\00\8c\00\8c\00\8b\00\8a\00\89\00\89\00\88\00\88\00\87\00\87\00\87\00\86\00\85\00\85\00\86\00\86\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00~\00}\00|\00|\00|\00|\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00|\00{\00{\00{\00{\00{\00{\00{\00|\00|\00|\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00z\00y\00y\00x\00x\00w\00w\00v\00u\00t\00t\00u\00u\00u\00u\00v\00w\00w\00w\00w\00w\00w\00w\00w\00w\00w\00w\00x\00x\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00{\00{\00{\00{\00{\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00~\00\7f\00\7f\00\7f\00\80\00\80\00\80\00\81\00\81\00\83\00\84\00\86\00\89\00\8a\00\8a\00\8a\00\8a\00\8a\00\8a\00\8b\00\8e\00\8e\00\8e\00\8d\00\8c\00\8b\00\8b\00\8c\00\8d\00\8d\00\8d\00\8d\00\8d\00\8c\00\8c\00\8b\00\8a\00\89\00\89\00\88\00\88\00\87\00\87\00\87\00\86\00\85\00\85\00\86\00\86\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\86\00\85\00\85\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00{\00{\00y\00y\00z\00{\00{\00{\00{\00{\00{\00{\00{\00{\00z\00z\00z\00z\00z\00z\00z\00{\00{\00{\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00y\00w\00w\00v\00v\00u\00u\00t\00t\00s\00s\00t\00t\00u\00u\00v\00w\00w\00x\00x\00x\00x\00x\00x\00x\00x\00x\00x\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00z\00z\00z\00{\00{\00{\00{\00{\00{\00{\00{\00{\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00{\00{\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00|\00{\00{\00z\00z\00y\00x\00x\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00{\00|\00|\00|\00|\00|\00|\00|\00|\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00\7f\00\7f\00\7f\00\80\00\80\00\80\00\80\00\80\00\80\00\81\00\81\00\82\00\83\00\85\00\88\00\89\00\89\00\8a\00\8a\00\8b\00\8b\00\8c\00\8d\00\8d\00\8d\00\8c\00\8c\00\8b\00\8b\00\8b\00\8c\00\8c\00\8c\00\8c\00\8c\00\8c\00\8c\00\8b\00\8a\00\89\00\89\00\88\00\88\00\87\00\87\00\87\00\86\00\86\00\86\00\86\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\87\00\86\00\85\00\84\00\84\00\85\00\85\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00{\00z\00x\00x\00y\00z\00{\00{\00{\00{\00{\00{\00{\00z\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00x\00v\00v\00u\00u\00t\00t\00s\00s\00r\00r\00s\00t\00u\00u\00v\00w\00w\00x\00x\00x\00x\00x\00x\00x\00x\00x\00x\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00z\00z\00z\00{\00|\00|\00|\00|\00{\00{\00{\00{\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00{\00{\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00|\00{\00{\00z\00z\00y\00x\00x\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00{\00|\00|\00|\00|\00|\00|\00|\00|\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00\7f\00\7f\00\7f\00\80\00\80\00\80\00\80\00\80\00\80\00\81\00\81\00\82\00\82\00\84\00\87\00\88\00\89\00\8a\00\8a\00\8b\00\8b\00\8b\00\8c\00\8c\00\8c\00\8b\00\8b\00\8a\00\8a\00\8a\00\8b\00\8b\00\8b\00\8b\00\8b\00\8b\00\8b\00\8b\00\8a\00\89\00\88\00\88\00\87\00\87\00\86\00\86\00\86\00\86\00\86\00\86\00\87\00\87\00\87\00\87\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\85\00\84\00\83\00\83\00\84\00\84\00\85\00\85\00\85\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00\86\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00{\00z\00x\00x\00y\00z\00{\00{\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00x\00v\00u\00u\00t\00t\00s\00s\00r\00r\00r\00s\00t\00u\00u\00v\00w\00x\00x\00x\00x\00y\00y\00y\00x\00x\00x\00x\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00z\00z\00z\00{\00|\00|\00|\00|\00{\00{\00{\00{\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00{\00{\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00|\00{\00{\00z\00z\00y\00x\00x\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00{\00|\00|\00|\00|\00|\00|\00|\00|\00}\00}\00}\00}\00}\00}\00}\00}\00~\00~\00\7f\00\7f\00\7f\00\80\00\80\00\80\00\80\00\80\00\80\00\81\00\81\00\82\00\82\00\84\00\87\00\88\00\88\00\89\00\8a\00\8b\00\8b\00\8b\00\8c\00\8c\00\8c\00\8b\00\8b\00\8a\00\8a\00\8a\00\8b\00\8b\00\8b\00\8b\00\8b\00\8b\00\8b\00\8a\00\89\00\88\00\87\00\87\00\86\00\86\00\85\00\85\00\85\00\85\00\86\00\86\00\86\00\86\00\86\00\86\00\85\00\85\00\85\00\85\00\85\00\85\00\85\00\85\00\84\00\83\00\83\00\84\00\84\00\85\00\84\00\84\00\85\00\85\00\85\00\85\00\85\00\85\00\85\00\85\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00|\00|\00{\00y\00x\00x\00y\00z\00z\00z\00z\00z\00z\00z\00z\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00{\00{\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00|\00{\00{\00{\00z\00v\00t\00t\00s\00s\00r\00r\00r\00r\00r\00s\00t\00u\00u\00u\00v\00x\00y\00y\00y\00y\00y\00y\00y\00y\00x\00x\00x\00y\00y\00y\00z\00z\00y\00y\00y\00z\00z\00z\00z\00y\00y\00y\00y\00z\00z\00z\00{\00|\00|\00|\00|\00{\00{\00{\00{\00z\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00y\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00z\00{\00{\00|\00|\00|\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00}\00"))