xref: /rockchip-linux_mpp/mpp/hal/rkdec/av1d/hal_av1d_vdpu383.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1 /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2 /*
3  * Copyright (c) 2024 Rockchip Electronics Co., Ltd.
4  */
5 
6 #define MODULE_TAG "hal_av1d_vdpu383"
7 
8 #include <string.h>
9 
10 #include "mpp_env.h"
11 #include "mpp_mem.h"
12 #include "mpp_bitput.h"
13 #include "mpp_buffer_impl.h"
14 
15 // #include "av1.h"
16 #include "hal_av1d_common.h"
17 #include "vdpu383_av1d.h"
18 #include "vdpu383_com.h"
19 
20 #include "av1d_syntax.h"
21 #include "film_grain_noise_table.h"
22 #include "av1d_common.h"
23 
24 #define VDPU383_UNCMPS_HEADER_SIZE            (MPP_ALIGN(5159, 128) / 8) // byte, 5159 bit
25 
26 // bits len
27 #define VDPU383_RCB_STRMD_ROW_LEN             (MPP_ALIGN(dxva->width, 8) / 8 * 100)
28 #define VDPU383_RCB_STRMD_TILE_ROW_LEN        (MPP_ALIGN(dxva->width, 8) / 8 * 100)
29 #define VDPU383_RCB_INTER_ROW_LEN             (MPP_ALIGN(dxva->width, 64) / 64 * 2752)
30 #define VDPU383_RCB_INTER_TILE_ROW_LEN        (MPP_ALIGN(dxva->width, 64) / 64 * 2752)
31 #define VDPU383_RCB_INTRA_ROW_LEN             (MPP_ALIGN(dxva->width, 512) * 12 * 3)
32 #define VDPU383_RCB_INTRA_TILE_ROW_LEN        (MPP_ALIGN(dxva->width, 512) * 12 * 3)
33 #define VDPU383_RCB_FILTERD_ROW_LEN           (MPP_ALIGN(dxva->width, 64) * (16 + 1) * (14 + 6 * 3))
34 #define VDPU383_RCB_FILTERD_PROTECT_ROW_LEN   (MPP_ALIGN(dxva->width, 64) * (16 + 1) * (14 + 6 * 3))
35 #define VDPU383_RCB_FILTERD_TILE_ROW_LEN      (MPP_ALIGN(dxva->width, 64) * (16 + 1) * (14 + 6 * 3))
36 #define VDPU383_RCB_FILTERD_TILE_COL_LEN      (MPP_ALIGN(dxva->width, 64) * (16 + 1) * (14 + 7 * 3 + (14 + 13 * 3) + (9 + 7 * 3)))
37 #define VDPU383_RCB_FILTERD_AV1_UP_TL_COL_LEN (MPP_ALIGN(dxva->width, 64) * 10 * 22)
38 
39 #define VDPU383_UNCMPS_HEADER_OFFSET_BASE            (0)
40 
41 #define VDPU383_INFO_ELEM_SIZE (VDPU383_UNCMPS_HEADER_SIZE)
42 
43 #define VDPU383_UNCMPS_HEADER_OFFSET(idx)            (VDPU383_INFO_ELEM_SIZE * idx + VDPU383_UNCMPS_HEADER_OFFSET_BASE)
44 
45 #define VDPU383_INFO_BUF_SIZE(cnt) (VDPU383_INFO_ELEM_SIZE * cnt)
46 
47 #define NON_COEF_CDF_SIZE (434 * 16) // byte
48 #define COEF_CDF_SIZE (354 * 16) // byte
49 #define ALL_CDF_SIZE (NON_COEF_CDF_SIZE + COEF_CDF_SIZE * 4)
50 
51 #define SET_REF_HOR_VIRSTRIDE(regs, ref_index, value)\
52     do{ \
53         switch(ref_index){\
54         case 0: regs.reg83_ref0_hor_virstride = value; break;\
55         case 1: regs.reg86_ref1_hor_virstride = value; break;\
56         case 2: regs.reg89_ref2_hor_virstride = value; break;\
57         case 3: regs.reg92_ref3_hor_virstride = value; break;\
58         case 4: regs.reg95_ref4_hor_virstride = value; break;\
59         case 5: regs.reg98_ref5_hor_virstride = value; break;\
60         case 6: regs.reg101_ref6_hor_virstride = value; break;\
61         case 7: regs.reg104_ref7_hor_virstride = value; break;\
62         default: break;}\
63     }while(0)
64 
65 #define SET_REF_RASTER_UV_HOR_VIRSTRIDE(regs, ref_index, value)\
66     do{ \
67         switch(ref_index){\
68         case 0: regs.reg84_ref0_raster_uv_hor_virstride = value; break;\
69         case 1: regs.reg87_ref1_raster_uv_hor_virstride = value; break;\
70         case 2: regs.reg90_ref2_raster_uv_hor_virstride = value; break;\
71         case 3: regs.reg93_ref3_raster_uv_hor_virstride = value; break;\
72         case 4: regs.reg96_ref4_raster_uv_hor_virstride = value; break;\
73         case 5: regs.reg99_ref5_raster_uv_hor_virstride = value; break;\
74         case 6: regs.reg102_ref6_raster_uv_hor_virstride = value; break;\
75         case 7: regs.reg105_ref7_raster_uv_hor_virstride = value; break;\
76         default: break;}\
77     }while(0)
78 
79 #define SET_REF_VIRSTRIDE(regs, ref_index, value)\
80     do{ \
81         switch(ref_index){\
82         case 0: regs.reg85_ref0_virstride = value; break;\
83         case 1: regs.reg88_ref1_virstride = value; break;\
84         case 2: regs.reg91_ref2_virstride = value; break;\
85         case 3: regs.reg94_ref3_virstride = value; break;\
86         case 4: regs.reg97_ref4_virstride = value; break;\
87         case 5: regs.reg100_ref5_virstride = value; break;\
88         case 6: regs.reg103_ref6_virstride = value; break;\
89         case 7: regs.reg106_ref7_virstride = value; break;\
90         default: break;}\
91     }while(0)
92 
93 #define SET_REF_BASE(regs, ref_index, value)\
94     do{ \
95         switch(ref_index){\
96         case 0: regs.reg170_av1_last_base      = value; break; \
97         case 1: regs.reg171_av1golden_base     = value; break; \
98         case 2: regs.reg172_av1alfter_base     = value; break; \
99         case 3: regs.reg173_refer3_base        = value; break; \
100         case 4: regs.reg174_refer4_base        = value; break; \
101         case 5: regs.reg175_refer5_base        = value; break; \
102         case 6: regs.reg176_refer6_base        = value; break; \
103         case 7: regs.reg177_refer7_base        = value; break; \
104         default: break;}\
105     }while(0)
106 
107 #define SET_FBC_PAYLOAD_REF_BASE(regs, ref_index, value)\
108     do{ \
109         switch(ref_index){\
110         case 0: regs.reg195_payload_st_ref0_base    = value; break; \
111         case 1: regs.reg196_payload_st_ref1_base    = value; break; \
112         case 2: regs.reg197_payload_st_ref2_base    = value; break; \
113         case 3: regs.reg198_payload_st_ref3_base    = value; break; \
114         case 4: regs.reg199_payload_st_ref4_base    = value; break; \
115         case 5: regs.reg200_payload_st_ref5_base    = value; break; \
116         case 6: regs.reg201_payload_st_ref6_base    = value; break; \
117         case 7: regs.reg202_payload_st_ref7_base    = value; break; \
118         default: break;}\
119     }while(0)
120 
121 #define VDPU_FAST_REG_SET_CNT    3
122 
123 #define OFFSET_CTRL_REGS          (8 * sizeof(RK_U32))
124 #define OFFSET_COMMON_ADDR_REGS   (128 * sizeof(RK_U32))
125 #define OFFSET_RCB_PARAS_REGS     (140 * sizeof(RK_U32))
126 #define OFFSET_AV1D_PARAS_REGS    (64 * sizeof(RK_U32))
127 #define OFFSET_AV1D_ADDR_REGS     (168 * sizeof(RK_U32))
128 #define OFFSET_INTERRUPT_REGS     (15 * sizeof(RK_U32))
129 
130 typedef struct av1d_rkv_buf_t {
131     RK_U32              valid;
132     Vdpu383Av1dRegSet  *regs;
133 } av1dVdpu383Buf;
134 
135 typedef struct vcpu383_ref_info_t {
136     RK_U32 dpb_idx;
137     RK_U32 seg_idx;
138     RK_U32 colmv_exist_flag;
139     RK_U32 cdf_valid;
140     RK_U32 coeff_idx;
141     RK_U32 mi_rows;
142     RK_U32 mi_cols;
143     RK_U32 seg_en;
144     RK_U32 seg_up_map;
145     RK_U32 cdf_update_flag;
146 } vdpu383RefInfo;
147 
148 typedef struct VdpuAv1dRegCtx_t {
149     Vdpu383Av1dRegSet  *regs;
150     RK_U32             offset_uncomps;
151 
152     av1dVdpu383Buf     reg_buf[VDPU_FAST_REG_SET_CNT];
153     MppBuffer          bufs;
154     RK_S32             bufs_fd;
155     void               *bufs_ptr;
156     RK_U32             uncmps_offset[VDPU_FAST_REG_SET_CNT];
157 
158     Vdpu383RcbInfo  rcb_buf_info[RCB_BUF_COUNT];
159     RK_U32          rcb_buf_size;
160     MppBuffer       rcb_bufs[VDPU_FAST_REG_SET_CNT];
161 
162     HalBufs         colmv_bufs;
163     RK_U32          colmv_count;
164     RK_U32          colmv_size;
165 
166     vdpu383RefInfo  ref_info_tbl[NUM_REF_FRAMES];
167 
168     MppBuffer       cdf_rd_def_base;
169     HalBufs         cdf_segid_bufs;
170     RK_U32          cdf_segid_count;
171     RK_U32          cdf_segid_size;
172     RK_U32          cdf_coeff_cdf_idxs[NUM_REF_FRAMES];
173     // RK_U32          cdfs_last[NUM_REF_FRAMES];
174 
175     MppBuffer       tile_info;
176     MppBuffer       film_grain_mem;
177     MppBuffer       global_model;
178     MppBuffer       filter_mem;
179     MppBuffer       tile_buf;
180 
181     AV1CDFs         *cdfs;
182     MvCDFs          *cdfs_ndvc;
183     AV1CDFs         default_cdfs;
184     MvCDFs          default_cdfs_ndvc;
185     AV1CDFs         cdfs_last[NUM_REF_FRAMES];
186     MvCDFs          cdfs_last_ndvc[NUM_REF_FRAMES];
187     RK_U32          refresh_frame_flags;
188 
189     RK_U32          width;
190     RK_U32          height;
191     RK_S32          hor_stride;
192     RK_S32          ver_stride;
193     RK_U32          luma_size ;
194     RK_U32          chroma_size;
195 
196     FilmGrainMemory fgsmem;
197 
198     RK_S8           prev_out_buffer_i;
199     RK_U8           fbc_en;
200     RK_U8           resolution_change;
201     RK_U8           tile_transpose;
202     RK_U32          ref_frame_sign_bias[AV1_REF_LIST_SIZE];
203 
204     RK_U32          tile_out_count;
205     size_t          tile_out_size;
206 
207     RK_U32          num_tile_cols;
208     /* uncompress header data */
209     RK_U8           header_data[VDPU383_UNCMPS_HEADER_SIZE];
210     HalBufs         origin_bufs;
211 } Vdpu383Av1dRegCtx;
212 
213 // #define DUMP_AV1D_VDPU383_DATAS
214 
215 #ifdef DUMP_AV1D_VDPU383_DATAS
216 static RK_U32 dump_cur_frame = 0;
217 static char dump_cur_dir[128];
218 static char dump_cur_fname_path[512];
219 
flip_string(char * str)220 static MPP_RET flip_string(char *str)
221 {
222     RK_U32 len = strlen(str);
223     RK_U32 i, j;
224 
225     for (i = 0, j = len - 1; i <= j; i++, j--) {
226         // swapping characters
227         char c = str[i];
228         str[i] = str[j];
229         str[j] = c;
230     }
231     return MPP_OK;
232 }
233 
dump_data_to_file(char * fname_path,void * data,RK_U32 data_bit_size,RK_U32 line_bits,RK_U32 big_end,RK_U32 append)234 static MPP_RET dump_data_to_file(char *fname_path, void *data, RK_U32 data_bit_size,
235                                  RK_U32 line_bits, RK_U32 big_end, RK_U32 append)
236 {
237     RK_U8 *buf_p = (RK_U8 *)data;
238     RK_U8 cur_data;
239     RK_U32 i;
240     RK_U32 loop_cnt;
241     FILE *dump_fp = NULL;
242     char line_tmp[256];
243     RK_U32 str_idx = 0;
244 
245     if (append)
246         dump_fp = fopen(fname_path, "aw+");
247     else
248         dump_fp = fopen(fname_path, "w+");
249     if (!dump_fp) {
250         mpp_err_f("open file: %s error!\n", fname_path);
251         return MPP_NOK;
252     }
253     if (append)
254         fseek(dump_fp, 0, SEEK_END);
255 
256     if ((data_bit_size % 4 != 0) || (line_bits % 8 != 0)) {
257         mpp_err_f("line bits not align to 4!\n");
258         return MPP_NOK;
259     }
260 
261     loop_cnt = data_bit_size / 8;
262     for (i = 0; i < loop_cnt; i++) {
263         cur_data = buf_p[i];
264 
265         sprintf(&line_tmp[str_idx++], "%0x", cur_data & 0xf);
266         if ((i * 8 + 4) % line_bits == 0) {
267             line_tmp[str_idx++] = '\0';
268             str_idx = 0;
269             if (!big_end)
270                 flip_string(line_tmp);
271             fprintf(dump_fp, "%s\n", line_tmp);
272         }
273         sprintf(&line_tmp[str_idx++], "%0x", (cur_data >> 4) & 0xf);
274         if ((i * 8 + 8) % line_bits == 0) {
275             line_tmp[str_idx++] = '\0';
276             str_idx = 0;
277             if (!big_end)
278                 flip_string(line_tmp);
279             fprintf(dump_fp, "%s\n", line_tmp);
280         }
281     }
282 
283     // last line
284     if (data_bit_size % 4) {
285         cur_data = buf_p[i];
286         sprintf(&line_tmp[str_idx++], "%0x", cur_data & 0xf);
287         if ((i * 8 + 8) % line_bits == 0) {
288             line_tmp[str_idx++] = '\0';
289             str_idx = 0;
290             if (!big_end)
291                 flip_string(line_tmp);
292             fprintf(dump_fp, "%s\n", line_tmp);
293         }
294     }
295     if (data_bit_size % line_bits) {
296         loop_cnt = (line_bits - (data_bit_size % line_bits)) / 4;
297         for (i = 0; i < loop_cnt; i++)
298             sprintf(&line_tmp[str_idx++], "%0x", 0);
299         line_tmp[str_idx++] = '\0';
300         str_idx = 0;
301         if (!big_end)
302             flip_string(line_tmp);
303         fprintf(dump_fp, "%s\n", line_tmp);
304     }
305 
306     fflush(dump_fp);
307     fclose(dump_fp);
308 
309     return MPP_OK;
310 }
311 
dump_reg(RK_U32 * reg_s,RK_U32 count,RK_U32 log_start_idx)312 static MPP_RET dump_reg(RK_U32 *reg_s, RK_U32 count, RK_U32 log_start_idx)
313 {
314     RK_U32 loop;
315     for (loop = 0; loop < count; loop++) {
316         mpp_log("reg[%03d]: 0%08x", log_start_idx + loop, reg_s[loop]);
317     }
318 
319     return MPP_OK;
320 }
321 #endif
322 
323 static RK_U32 g_default_prob[7400] = {
324     0x000052ce, 0x90000000, 0x000003e2, 0x3b000000, 0x0013e5db, 0x00000000, 0x00000000, 0x20000000,
325     0x0e2d3544, 0x80000252, 0x11938c99, 0x16000042, 0x0ad1c0cf, 0x95800004, 0x6c0db50d, 0x20000000,
326     0x571fc313, 0x02f5c801, 0x7c7b593f, 0x62112a31, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
327     0xea6ee10b, 0xd5074f9b, 0x94f16a25, 0x761fc65f, 0x0000000b, 0x00000000, 0x00000000, 0x00000000,
328     0x6615eada, 0x85ff113e, 0xfd02628a, 0x8b324070, 0x00000002, 0x00000000, 0x00000000, 0x00000000,
329     0xb393759a, 0x35d09796, 0xf0f9b25f, 0x3d269662, 0x00000006, 0x00000000, 0x00000000, 0x00000000,
330     0x172437e2, 0xd280296b, 0xc474391b, 0xc8143c32, 0x00000004, 0x00000000, 0x00000000, 0x00000000,
331     0x2e4e61f7, 0x43cc143a, 0xe4cdd1bc, 0x8424ee5a, 0x0000000e, 0x00000000, 0x00000000, 0x00000000,
332     0xae67e881, 0xf404162c, 0x04c279cb, 0xd128f459, 0x00000002, 0x00000000, 0x00000000, 0x00000000,
333     0x3bb07a8e, 0xb2075d45, 0xc06730e7, 0x65142e2d, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
334     0x95eab157, 0x31904976, 0x104e58b7, 0x140ea823, 0x00000004, 0x00000000, 0x00000000, 0x00000000,
335     0xf15f65b4, 0x625b16b9, 0x5c84e91a, 0x6818843b, 0x0000000a, 0x00000000, 0x00000000, 0x00000000,
336     0x3108e8c7, 0x31feb7d9, 0x405e58e4, 0x12134c2a, 0x00000002, 0x00000000, 0x00000000, 0x00000000,
337     0x7da27c9a, 0xe0c45e8c, 0x04255055, 0xb406ee10, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
338     0xc8e29305, 0x50238423, 0x0404a80e, 0x31000002, 0xed325966, 0x22505897, 0x06340d70, 0x10000000,
339     0xb2f66acb, 0xd05cb90b, 0xe8076821, 0x39000002, 0xdb3e1d7d, 0x0e60281e, 0x01a004b8, 0x10000000,
340     0xf095ea0a, 0xf718f048, 0xac895935, 0x3e000003, 0xf8dc6548, 0xae43d329, 0x06a03be8, 0x10000000,
341     0x485c9479, 0x31e4c3f3, 0x6403c817, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x10000000,
342     0x20004000, 0xd0893000, 0x4f7103f7, 0x415e3802, 0x00000060, 0x00000000, 0x00000000, 0x30000000,
343     0xc1441200, 0x00000016, 0x6c144120, 0xbd000001, 0x00000008, 0x00000000, 0x00000000, 0x20000000,
344     0xc1441200, 0x00000016, 0x6c144120, 0x00000001, 0x16c14412, 0x20000000, 0x016c1441, 0x20000000,
345     0x9f757cda, 0xf30acc49, 0x41ed9ecd, 0x91f3da2f, 0x0004dcbe, 0x00000000, 0x00000000, 0x30000000,
346     0x99a0ef74, 0xbbc6c189, 0xe01b49f3, 0x05a9f5f1, 0x447d2e17, 0x00013411, 0x00000000, 0x30000000,
347     0x510e9734, 0xbace1440, 0xabda974a, 0xb5b865df, 0x00141ae2, 0x00000000, 0x00000000, 0x30000000,
348     0x92c86b5c, 0x3e1ce0f8, 0x20ef048a, 0xaa88b5cf, 0x00000017, 0x00000000, 0x00000000, 0x30000000,
349     0x5926ecae, 0x7b6081fd, 0x84356a85, 0x688991e8, 0x00000014, 0x00000000, 0x00000000, 0x30000000,
350     0x9e717745, 0x9f4e221c, 0x00473c4b, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30000000,
351     0x2500e1b0, 0xc762f090, 0xd57a3352, 0x1600005b, 0x59da0256, 0x2194e46b, 0x3f30eeaa, 0x10000000,
352     0x1881d658, 0x94d0caeb, 0xb0e6aa11, 0x0e000043, 0x025ed44c, 0xe154314c, 0x6328dbc1, 0x10000000,
353     0x9271b628, 0x629b0759, 0x688cf130, 0x1b00001f, 0x591de956, 0x17d4db8c, 0x6908ed82, 0x10000000,
354     0x9097bd1b, 0xa29386ca, 0x007f011c, 0x0a000022, 0x11d2a94d, 0x4d535548, 0x35b88731, 0x10000000,
355     0x5f85221d, 0x2be7d105, 0x076de504, 0x00f7c5de, 0x00000000, 0x00000000, 0x00000000, 0x30000000,
356     0x10c2225a, 0x82064e92, 0x41916a10, 0xff402133, 0x00000035, 0x00000000, 0x00000000, 0x30000000,
357     0xd21fa6ef, 0xf3e98846, 0x48cfa9bf, 0xd729cc60, 0x02c6ea12, 0x00012e63, 0x00000000, 0x00000000,
358     0x593db70f, 0x249d49e6, 0x24fdba27, 0x082a3871, 0xb805fd92, 0x0000ef82, 0x00000000, 0x00000000,
359     0x1706b2c6, 0xf44fa927, 0x40fd9214, 0x4a2c7e77, 0xf786a813, 0x000107a2, 0x00000000, 0x00000000,
360     0x9665b145, 0x34aec9b2, 0xa5209a52, 0xf83e388d, 0x9e0c189c, 0x00024de5, 0x00000000, 0x00000000,
361     0x9ebec31c, 0x6620cd1d, 0xfd6c52f3, 0x834a68aa, 0x96c8fda1, 0x00011fc3, 0x00000000, 0x00000000,
362     0x1cb75110, 0x16162cf1, 0x0161e2f1, 0x8e4c10aa, 0x89080720, 0x0000a9e2, 0x00000000, 0x00000000,
363     0x2af6d8bc, 0x14df8a3a, 0xed29ca5f, 0xd037d886, 0xc5c6b419, 0x00009622, 0x00000000, 0x00000000,
364     0xa1e948f5, 0x06d10ff1, 0x899d3354, 0x565360c7, 0xc486379f, 0x00002641, 0x00000000, 0x00000000,
365     0x6617d0a6, 0xf7f170c3, 0x258dfb74, 0xbb3822a2, 0xa7c4e598, 0x000024a1, 0x00000000, 0x00000000,
366     0x19bfd8d9, 0x85880ba4, 0x3d38c2ab, 0xdb445297, 0x3b87551c, 0x0000a682, 0x00000000, 0x00000000,
367     0x10eee8a1, 0x63d94804, 0x1cd9e9e1, 0x2631926b, 0x75059794, 0x000079c1, 0x00000000, 0x00000000,
368     0xe709e2ec, 0xb5e10c4b, 0x995ccada, 0x6b4926a5, 0x97897aa0, 0x00011c83, 0x00000000, 0x00000000,
369     0x234fdea7, 0x07a830ee, 0x61c823c0, 0xb7651ee0, 0xa2070f9f, 0x000045c1, 0x00000000, 0x00000000,
370     0x2434e289, 0xf817b0de, 0x81789ba0, 0x6f4078a8, 0xbec60a9a, 0x000060c1, 0x00000000, 0x00000000,
371     0x6574cebb, 0x85418b1e, 0x5d3e7a8d, 0x7f3c4292, 0x67c64f1b, 0x00005662, 0x00000000, 0x00000000,
372     0xa5b15a29, 0xc69c4ded, 0xa58a6b36, 0x4d53a4bc, 0x7949d0a5, 0x0000e8a3, 0x00000000, 0x00000000,
373     0x334be7d9, 0x232e8696, 0xd8c5f190, 0x75227c58, 0xed847e90, 0x00005541, 0x00000000, 0x00000000,
374     0xa9155622, 0x37971165, 0xfdcfe3b6, 0xba57dadd, 0x6c4768a2, 0x00004082, 0x00000000, 0x00000000,
375     0xecbf5c16, 0x87922fe2, 0x15a8eb80, 0x3f352eaf, 0xfbc54418, 0x00002621, 0x00000000, 0x00000000,
376     0x23e0cec6, 0x670670e0, 0xd1a46b6a, 0x1c58aacb, 0xcec6001e, 0x00002ce1, 0x00000000, 0x00000000,
377     0x2501dff5, 0x17a5f1d1, 0x71c96bbe, 0x7767e8e0, 0x9286699d, 0x00003541, 0x00000000, 0x00000000,
378     0x2cfedefd, 0x4762b159, 0x09c03b9a, 0xe357bcd6, 0xa087211f, 0x00005dc2, 0x00000000, 0x00000000,
379     0x2e5461de, 0xf7dcb6b5, 0xfdecf3e4, 0x896d62f3, 0x3404a597, 0x00001e01, 0x00000000, 0x00000000,
380     0x2bec5d75, 0x488574c6, 0x71cf4bef, 0x574e84d5, 0xbe457f9b, 0x00002361, 0x00000000, 0x00000000,
381     0x654ccede, 0xd7c7d065, 0xcd727b57, 0x95392e98, 0x9484fd19, 0x00002461, 0x00000000, 0x00000000,
382     0x25635aa5, 0x483d9146, 0x05740baa, 0xdc42a8a5, 0x9646159c, 0x00003d61, 0x00000000, 0x00000000,
383     0x2e9ddf5c, 0xa7160ecc, 0xe98bb346, 0x9e354a9e, 0x31459a18, 0x00003f62, 0x00000000, 0x00000000,
384     0x28ecd5ad, 0x682ad32f, 0xf5cc4bd8, 0xd94e3ed7, 0xd746679f, 0x000023c1, 0x00000000, 0x00000000,
385     0x6fd0623e, 0x6ade765f, 0x25b8fc3e, 0x041f309a, 0xf182c28e, 0x000015e0, 0x00000000, 0x00000000,
386     0x762c777c, 0x34e1189c, 0x004fb969, 0x03000000, 0x67f50c77, 0x6a248837, 0x00004c31, 0x10000000,
387     0x6a7b713c, 0x568cd29f, 0x002e525d, 0x1b000000, 0x356a136e, 0xab67a1d1, 0x0000889a, 0x10000000,
388     0xeaa8f937, 0x766f91d4, 0x007b4a72, 0x98000000, 0xceec2075, 0xba0761d3, 0x0000470a, 0x10000000,
389     0xea547740, 0xf61170e8, 0x00785a7d, 0xeb000000, 0xd56ba271, 0xd0475e93, 0x0000420a, 0x10000000,
390     0x90d42799, 0xe3786737, 0x44c341a7, 0xac25da59, 0xc8c54a91, 0x000064e1, 0x00000000, 0x00000000,
391     0xcb7fdad7, 0x22cb45a8, 0x949f8161, 0x3926a04e, 0xe6065f91, 0x00007982, 0x00000000, 0x00000000,
392     0x6ca2d98b, 0xb1fc0402, 0xc87ca0fa, 0x62170437, 0xf7c3ea0b, 0x00005c60, 0x00000000, 0x00000000,
393     0x64dbcab9, 0xa3a1b229, 0x7cdc09bf, 0x5f2be86a, 0x61443610, 0x00002261, 0x00000000, 0x00000000,
394     0xaccad9dc, 0x6b23d64d, 0x28b299cd, 0xad24184b, 0x00034191, 0x000032a1, 0x00000000, 0x00000000,
395     0xe575d1cf, 0x894d12a4, 0x2c6f1c53, 0xf119dc36, 0x4bc3238b, 0x00001b41, 0x00000000, 0x00000000,
396     0x23e0c8a1, 0xa7c96fc8, 0xe5d48bac, 0xdb141041, 0x6a81d189, 0x00000ca0, 0x00000000, 0x00000000,
397     0xa6894dab, 0x7863515f, 0x4213e42c, 0xad1c7103, 0xc9c4268d, 0x00002660, 0x00000000, 0x00000000,
398     0xa551d106, 0xe886f273, 0x16149437, 0xe580df06, 0xf444a610, 0x00002c01, 0x00000000, 0x00000000,
399     0x59403594, 0x25c98be7, 0x0d612ad6, 0x7a4e82aa, 0x5547a1a5, 0x00004a22, 0x00000000, 0x00000000,
400     0x999fb73d, 0xc5a3ab84, 0x255642c0, 0x194b62a5, 0x56cb29a4, 0x00004d81, 0x00000000, 0x00000000,
401     0xdae23d7e, 0x6611ac78, 0x6d6c8af9, 0x2e54dab2, 0x14cd6c28, 0x000076a6, 0x00000000, 0x00000000,
402     0x6520d0a4, 0x18ae1164, 0x6a29ac56, 0x69898514, 0x56613bc4, 0x0007e450, 0x00000000, 0x00000000,
403     0x2a1c5759, 0x19907367, 0x36450ca0, 0x8e85b117, 0x7f58c541, 0x16c5092b, 0x00000002, 0x00000000,
404     0xd95e6e4c, 0x46212c69, 0xc56d8b03, 0xad586ab4, 0xe2d0ae29, 0xce02cd07, 0x00000000, 0x00000000,
405     0xf57eeb67, 0xf61a4c4b, 0xad814b05, 0xf25682b8, 0x5012cf2a, 0x7c93f028, 0x00000001, 0x00000000,
406     0xb200e5ac, 0x89171884, 0x1a31fc73, 0x3d7d3715, 0x5095f838, 0x18a4946a, 0x00000002, 0x00000000,
407     0x35846c85, 0x6d099a36, 0x7d852b55, 0x755226aa, 0x370f58a8, 0x8f834aa7, 0x00000001, 0x00000000,
408     0x728beb06, 0x6c63f8ec, 0x996c35ae, 0x23560eb1, 0x358f9a2a, 0x5d830d67, 0x00000001, 0x00000000,
409     0x364fed30, 0x3c6c58f7, 0xdee8f5dc, 0xbd5e6cc4, 0xcb52b62e, 0xe9440f28, 0x00000001, 0x00000000,
410     0xf2d66630, 0x7b94f7ab, 0xe6dba5bd, 0x8d6ceb67, 0x57146035, 0xf2744c89, 0x00000001, 0x00000000,
411     0xf182e892, 0x9ba37866, 0x9ed59dbd, 0x2eae9f67, 0x67541136, 0xa7b3e889, 0x00000001, 0x00000000,
412     0xa9ef565c, 0x69ac73be, 0xa25644bf, 0x528ac924, 0xb8d78b43, 0xee348daa, 0x00000001, 0x00000000,
413     0x297b56e6, 0xe9abb3be, 0x6e516cbb, 0xe288fb21, 0xd618bd41, 0xb1246449, 0x00000001, 0x00000000,
414     0x6b1ed88d, 0x69a0f3a8, 0x4e54fcbb, 0xec898b23, 0x01999242, 0xd884842c, 0x00000001, 0x00000000,
415     0xb610f3b8, 0x7c5618ca, 0x1f0fb625, 0xd8c10186, 0x5b6df05f, 0xe88adcf6, 0x00000000, 0x00000000,
416     0x3bdafa76, 0x470372f9, 0x688a496a, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x10000000,
417     0xd788e22b, 0xf023e155, 0x30028006, 0x44009001, 0x0f002000, 0x03400700, 0x00b00180, 0x00000000,
418     0x51e6c7e3, 0x90c80486, 0x640ba825, 0x94018604, 0x19003c80, 0x05c00c00, 0x015002c0, 0x00000000,
419     0xd44a52f4, 0x30b00438, 0xe007a81a, 0x5f00ee02, 0x15c02d80, 0x04f00a60, 0x011c0258, 0x00000000,
420     0x82ab1692, 0xc018a079, 0x10024004, 0x3c008001, 0x0d001c00, 0x02c00600, 0x00900140, 0x00000000,
421     0x0d1b3ca0, 0x710e03c6, 0x081bd85b, 0x76037e0a, 0x3f009801, 0x0c001a00, 0x02480578, 0x00000000,
422     0x55a9466e, 0x026066d3, 0xf04d10ea, 0x70073a1b, 0x3e00b182, 0x092015c0, 0x01b00380, 0x00000000,
423     0xf2d4edf3, 0x9c28da3e, 0x22da74ef, 0x2c90473e, 0x00145cce, 0x00080010, 0x00000000, 0x30000000,
424     0x20004000, 0xe8001000, 0xeebc04e1, 0x007296c3, 0x00200040, 0x00000000, 0x00000000, 0x30000000,
425     0x670c5d0b, 0x01914f31, 0x02a00700, 0x000000d2, 0x00000040, 0x00000000, 0x00000004, 0x20000000,
426     0x83801000, 0x903800e3, 0x7003800d, 0x06001600, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
427     0x83801000, 0x903800e3, 0x7003800d, 0x06001600, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
428     0x0a001400, 0x07400f00, 0x01800360, 0x004000a0, 0xc0058010, 0x00010002, 0x00000000, 0x30000000,
429     0x1d003c00, 0x06000d80, 0x01000280, 0x00160040, 0x0004000b, 0x00000000, 0x00000000, 0x30000000,
430     0x10004000, 0x00000600, 0x01680500, 0x00000087, 0x00100040, 0x00000006, 0x87016805, 0x20000000,
431     0x18003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30000000,
432     0x1e006000, 0x00000b40, 0x01e00600, 0x000000b4, 0x00000040, 0x00000000, 0x00000004, 0x20000000,
433     0x2a007000, 0x00000d20, 0x00000400, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0x20000000,
434     0x83801000, 0x903800e3, 0x7003800d, 0x06001600, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
435     0x83801000, 0x903800e3, 0x7003800d, 0x06001600, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
436     0x0a001400, 0x07400f00, 0x01800360, 0x004000a0, 0xc0058010, 0x00010002, 0x00000000, 0x30000000,
437     0x1d003c00, 0x06000d80, 0x01000280, 0x00160040, 0x0004000b, 0x00000000, 0x00000000, 0x30000000,
438     0x10004000, 0x00000600, 0x01680500, 0x00000087, 0x00100040, 0x00000006, 0x87016805, 0x20000000,
439     0x18003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30000000,
440     0x1e006000, 0x00000b40, 0x01e00600, 0x000000b4, 0x00000040, 0x00000000, 0x00000004, 0x20000000,
441     0x000016f9, 0x30000000, 0x00000143, 0xe3000000, 0x00000009, 0x00000000, 0x00000000, 0x20000000,
442     0x2a5b78ad, 0x7000054f, 0xb2c7a765, 0x72000063, 0xaea977ef, 0x00000006, 0x00000000, 0x20000000,
443     0x0f41b1bc, 0x428ec5ec, 0x2067e0c8, 0x0080005c, 0x00200040, 0x00080010, 0x00000000, 0x30000000,
444     0x20004000, 0x08001000, 0x02000400, 0x65ae7700, 0xfa2dd5db, 0x0008f52e, 0x00000000, 0x30000000,
445     0x4d93c4da, 0x0537a9b6, 0xe036d0a5, 0x00010412, 0xe4200040, 0x0005cb68, 0x00000000, 0x30000000,
446     0x4b80a238, 0x2991a91e, 0xd2ceb533, 0xe4bfaf71, 0x00200067, 0x00080010, 0x00000000, 0x30000000,
447     0x20004000, 0x08001000, 0xae8ea400, 0x00800187, 0x00000040, 0x00000000, 0x00000000, 0x30000000,
448     0x0fa4621d, 0xe0000000, 0x00fa1ed7, 0xf1000000, 0x000e246a, 0x42500000, 0x0000ba33, 0x20000000,
449     0x11e56bfd, 0xa0000000, 0x0108652a, 0x6c000000, 0x00072219, 0x07800000, 0x00009313, 0x20000000,
450     0x0b992b51, 0x40000000, 0x004098cb, 0x1e000000, 0x0004a18f, 0x76200000, 0x00002cc8, 0x20000000,
451     0x00690105, 0x50000000, 0x01555d55, 0x55000000, 0x001555d5, 0xf8100000, 0x00002b10, 0x20000000,
452     0x03e518c1, 0x30000000, 0x0024b0ed, 0xd2000000, 0x00030e8b, 0x00000000, 0x00000000, 0x20000000,
453     0x7754767a, 0x3bc5398e, 0xe66db550, 0x7972a509, 0x70545330, 0x39837348, 0x18f467b1, 0x00000000,
454     0xf99f7cda, 0xecb5da22, 0x9719ce3c, 0x3d8e0986, 0xfb1e14c0, 0x6c96844d, 0x310ccf8a, 0x00000000,
455     0x78b37525, 0x1c7a7b6d, 0xc7057e1a, 0xed8fd778, 0x0e165639, 0xcf029648, 0x116045f8, 0x00000000,
456     0x78ebf96c, 0xac879a75, 0x8e9fb5ba, 0x257a111e, 0xa7170fb5, 0x7a140d29, 0x1d8c7eb1, 0x00000000,
457     0xf92efb8a, 0x7c6dd9de, 0x06faee06, 0xf7959173, 0x4f9f5343, 0x807691ee, 0x3248d322, 0x00000000,
458     0x77cef54a, 0xcc13ba68, 0x7adc45ce, 0x8a91a961, 0x1d97e5bc, 0x2d835189, 0x152063f1, 0x00000000,
459     0xf84a7941, 0xfc319a0a, 0xaa7e4598, 0x626c0109, 0x9954f52f, 0x6943a428, 0x1b707d11, 0x00000000,
460     0x38007800, 0x0c001a00, 0x02800580, 0x00800120, 0x00180038, 0x8004000a, 0x20008001, 0x00000000,
461     0x38007800, 0x0c001a00, 0x02800580, 0x00800120, 0x00180038, 0x8004000a, 0x20008001, 0x00000000,
462     0x38007800, 0x0c001a00, 0x02800580, 0x00800120, 0x00180038, 0x8004000a, 0x20008001, 0x00000000,
463     0x38007800, 0x0c001a00, 0x02800580, 0x00800120, 0x00180038, 0x8004000a, 0x20008001, 0x00000000,
464     0x38007800, 0x0c001a00, 0x02800580, 0x00800120, 0x00180038, 0x8004000a, 0x20008001, 0x00000000,
465     0x38007800, 0x0c001a00, 0x02800580, 0x00800120, 0x00180038, 0x8004000a, 0x20008001, 0x00000000,
466     0x38007800, 0x0c001a00, 0x02800580, 0x00800120, 0x00180038, 0x8004000a, 0x20008001, 0x00000000,
467     0x38007800, 0x0c001a00, 0x02800580, 0x00800120, 0x00180038, 0x8004000a, 0x20008001, 0x00000000,
468     0xfe12ff66, 0x8effbe1e, 0x67be0f7d, 0x694c0fde, 0x99d09223, 0x58537587, 0x1d047969, 0x00000000,
469     0xfd6b7b91, 0x8eb6be8a, 0xbbaa7f57, 0x695bd1d4, 0x634f0fa6, 0xa771c165, 0x0d0c3880, 0x00000000,
470     0x38007800, 0x0c001a00, 0x02800580, 0x00800120, 0x00180038, 0x8004000a, 0x20008001, 0x00000000,
471     0x38007800, 0x0c001a00, 0x02800580, 0x00800120, 0x00180038, 0x8004000a, 0x20008001, 0x00000000,
472     0x134a9811, 0x23fdcd9a, 0xf13b7322, 0x739b7ee2, 0xe2a61ae4, 0x000dbb96, 0x00000000, 0x30000000,
473     0x00180341, 0x00000000, 0x00018ea4, 0x5a000000, 0x003a437e, 0x1ac00000, 0x00000501, 0x20000000,
474     0x0197861a, 0x20000000, 0x00143ed0, 0xfe000000, 0x003dc07c, 0xe6700000, 0x0000deda, 0x20000000,
475     0x0016035a, 0x80000000, 0x0001c6fe, 0xcf000000, 0x003b9cfe, 0x4f500000, 0x00000421, 0x20000000,
476     0x017b86d2, 0xd0000000, 0x00151f46, 0xa7000000, 0x003e28fd, 0x58700000, 0x00016354, 0x20000000,
477     0x516d105b, 0xc420aba4, 0x6684db8e, 0x03aaf2da, 0x770aead5, 0x000a7dec, 0x00000000, 0x30000000,
478     0x1a4a184b, 0x6252321c, 0xee3e02bd, 0x2850fe47, 0x80190041, 0x0004200c, 0x00000000, 0x30000000,
479     0x05125010, 0x00000000, 0x00512501, 0x0b000000, 0x0003c037, 0x00000000, 0x00000000, 0x20000000,
480     0x225a4d46, 0x60000000, 0x0225a4d4, 0x12000000, 0x000dff21, 0x00000000, 0x00000000, 0x20000000,
481     0xf04efa01, 0x59c636c2, 0x009a7a45, 0xcc000000, 0x84f97cfd, 0x921ab156, 0x00009213, 0x10000000,
482     0x2996e96a, 0xa0000000, 0x02996e96, 0x5d000000, 0x00138cbe, 0x00000000, 0x00000000, 0x20000000,
483     0x39a8fd60, 0x9a265c69, 0x012d4b42, 0x61000000, 0xe064e1eb, 0x41973090, 0x00004ea2, 0x10000000,
484     0xf9528444, 0x506b1ec4, 0xc7e1674d, 0xf3e5700e, 0x85c1717c, 0x000f8f1c, 0x00000000, 0x30000000,
485     0xf4236eb9, 0x3aea1833, 0x006c71ba, 0x32000000, 0xc337b7fa, 0xfb8acb56, 0x00009e93, 0x10000000,
486     0xb1ab81cb, 0x103efe92, 0xfbd07f05, 0x7fc1ec04, 0x040099ff, 0x0000000b, 0x00000000, 0x30000000,
487     0xba757e49, 0x6cb5fc8f, 0x0119b397, 0x5a000000, 0x4277bbfb, 0x0c7a4d5b, 0x0001063b, 0x10000000,
488     0xe69c60f0, 0x95834e46, 0x006e39c4, 0x1d000000, 0x2f69b1e4, 0x38e67510, 0x000092ba, 0x10000000,
489     0x77947beb, 0xcb0a378e, 0x006b4b72, 0x36000000, 0x5d78b57f, 0xd19c6fdb, 0x00011183, 0x10000000,
490     0xe71de194, 0x55fd8f14, 0x00847210, 0xb1000000, 0x2ea4885f, 0xe115788e, 0x00008459, 0x10000000,
491     0x77947e41, 0x6ba99957, 0x01167417, 0xeb000000, 0xde7777fe, 0xfafba6fa, 0x0001480b, 0x10000000,
492     0x5a8a4e4b, 0x13df2aa6, 0x0052c147, 0x11000000, 0x7962ec5a, 0xbc35b88f, 0x000098e9, 0x10000000,
493     0x756272af, 0x986235a6, 0x0110c331, 0xb2000000, 0xcfa52978, 0x3267f1d1, 0x00009e72, 0x10000000,
494     0x9761c5a4, 0x7430cad4, 0x0075c966, 0xf7000000, 0x8218fadd, 0x59d18ae5, 0x00000f80, 0x10000000,
495     0x2ed27eba, 0x88a331b6, 0x00a5134b, 0x1c000000, 0x7831347e, 0x5298f2b8, 0x00013e0b, 0x10000000,
496     0xe195e931, 0x82d7a8f8, 0x002160b6, 0xb6000000, 0x6c6a026e, 0xaf9582ae, 0x00006851, 0x10000000,
497     0x620a7b9a, 0x07b0307a, 0x004dcae6, 0x71000000, 0xdff6857d, 0x9add1cfa, 0x0000aff2, 0x10000000,
498     0xed847364, 0x572af15b, 0x00a72280, 0x48000000, 0x376ea571, 0x82174893, 0x0000adca, 0x10000000,
499     0xf3637aed, 0xdb76d752, 0x00e33c5f, 0xc9000000, 0x9435a8fe, 0x115ca37a, 0x00013b84, 0x10000000,
500     0xef7ef660, 0xb5701370, 0x0083a9c4, 0x0b000000, 0xcff562fb, 0xb3c6bdb5, 0x0000d7ba, 0x10000000,
501     0xb042fc8d, 0x7a80d7ec, 0x015e9bc7, 0x1b000000, 0xe6b1327d, 0xed0af2f6, 0x00007453, 0x10000000,
502     0xe0000fda, 0xd2cc95b1, 0x0072f848, 0xb7bbef00, 0x0002430d, 0x00000000, 0x00000000, 0x30000000,
503     0x71897f92, 0x7b82b845, 0x0126fc15, 0x95000000, 0xdcf06d7e, 0x2f3ac9f6, 0x00010334, 0x10000000,
504     0x0473131b, 0x40000000, 0x00dcfd2f, 0x70000000, 0x0004f366, 0x61600000, 0x000092c2, 0x20000000,
505     0x3110ff67, 0x5b261814, 0x018f2443, 0x49000000, 0x18f3a272, 0x48588335, 0x00011eb3, 0x10000000,
506     0x00bf8355, 0x70000000, 0x007139d5, 0x01000000, 0x000ab1d0, 0x48700000, 0x00009646, 0x20000000,
507     0xe666e666, 0x63334ccc, 0xce666e66, 0x663334cc, 0xcce666e6, 0x0003334c, 0x00000000, 0x20000000,
508     0x0e61b14f, 0x00000000, 0x00234887, 0x1c000000, 0xa8c9391c, 0xafa00002, 0x56215d55, 0x20000000,
509     0xe666e666, 0x63334ccc, 0xce666e66, 0x663334cc, 0xcce666e6, 0x0003334c, 0x00000000, 0x20000000,
510     0x0b95e3b0, 0x100002e0, 0x0d02d352, 0x58000045, 0x8181d785, 0x16e00000, 0x2cc4aeca, 0x20000000,
511     0xe666e666, 0x63334ccc, 0xce666e66, 0x663334cc, 0xcce666e6, 0x0003334c, 0x00000000, 0x20000000,
512     0x94475960, 0x3000056c, 0x4cd1de8f, 0x72000036, 0x54d4bc38, 0x90500004, 0x0d283300, 0x20000000,
513     0xe666e666, 0x63334ccc, 0xce666e66, 0x663334cc, 0xcce666e6, 0x0003334c, 0x00000000, 0x20000000,
514     0x0b5a9f35, 0x3136c418, 0xdd83a5e2, 0x61248687, 0x4fca29ef, 0x0000d4a3, 0x00000000, 0x20000000,
515     0xe666e666, 0x63334ccc, 0xce666e66, 0x663334cc, 0xcce666e6, 0x0003334c, 0x00000000, 0x20000000,
516     0x11c33268, 0x2194c5e9, 0xb41b5846, 0x0002ac09, 0x00000000, 0x00000000, 0x00000000, 0x20000000,
517     0xe666e666, 0x63334ccc, 0xce666e66, 0x663334cc, 0xcce666e6, 0x0003334c, 0x00000000, 0x20000000,
518     0xce3ca63c, 0x315bc4de, 0x956305f2, 0x2f1e6c7b, 0x1f867bf7, 0x00009242, 0x00000000, 0x20000000,
519     0xe666e666, 0x63334ccc, 0xce666e66, 0x663334cc, 0xcce666e6, 0x0003334c, 0x00000000, 0x20000000,
520     0x5697350b, 0xc20686b1, 0x9c16a039, 0x0001f407, 0x00000000, 0x00000000, 0x00000000, 0x20000000,
521     0xe666e666, 0x63334ccc, 0xce666e66, 0x663334cc, 0xcce666e6, 0x0003334c, 0x00000000, 0x20000000,
522     0x8e60a5a4, 0x721da5a9, 0x000000a8, 0xed000000, 0xc4de5362, 0x2b23e8cb, 0x00000001, 0x10000000,
523     0xe666e666, 0x63334ccc, 0xce666e66, 0x993334cc, 0xc326f97b, 0x000294a9, 0x00000000, 0x20000000,
524     0x0f716764, 0x11f205b0, 0x00000083, 0x1c000000, 0x535348b6, 0xc2c29aa7, 0x00000000, 0x10000000,
525     0x32cbff6f, 0x62fab44d, 0x8b480fe9, 0x7f7d5749, 0xd96249fe, 0x0001036d, 0x00000000, 0x20000000,
526     0x026105da, 0xf058a0f0, 0x00000019, 0x37000000, 0xfcd004a9, 0x8ac1fea5, 0x00000000, 0x10000000,
527     0xba4f7fe7, 0x42602968, 0x6f7457fc, 0xdb449348, 0xd4797e7f, 0x00058711, 0x00000000, 0x20000000,
528     0x1ff56375, 0x83f90cd3, 0x0000010f, 0xa7000000, 0xc04f0c6e, 0x7391de45, 0x00000000, 0x10000000,
529     0x33a87f63, 0x977c3345, 0x5b2e0ff8, 0xd11a5936, 0xb8352fff, 0x000580b3, 0x00000000, 0x20000000,
530     0x57e83cc6, 0x22f0493a, 0x000000c7, 0x2e000000, 0x57038b88, 0x23108121, 0x00000000, 0x10000000,
531     0xb4227ef3, 0xd4b6b501, 0x7f508ffa, 0x50796944, 0x42752678, 0x0006f1b4, 0x00000000, 0x20000000,
532     0x0ec8a5bf, 0xd27b8628, 0x004c90ef, 0xda000000, 0x7e21d4e4, 0xc214eced, 0x00008369, 0x10000000,
533     0x75246e96, 0xeb42787c, 0xfe31dcbe, 0x0061aced, 0xa093602c, 0x3b138fc8, 0x21647869, 0x00000000,
534     0x92276278, 0x72b7a71b, 0x004060f0, 0x90000000, 0x1dd44db7, 0x229335a8, 0x00005519, 0x10000000,
535     0xbaf9f993, 0x1d363b55, 0x9af29618, 0xf688075b, 0x02d8243a, 0x6143c9ca, 0x1f8c7a41, 0x00000000,
536     0x82928622, 0x506ec112, 0x000bc828, 0x09000000, 0x8b12c02d, 0xfdf2d5c7, 0x000046b0, 0x10000000,
537     0xfb45fcfe, 0x59b2bae5, 0x1db08c23, 0x1d43ceaf, 0x2fc84918, 0x00000002, 0x00000000, 0x00000000,
538     0x22ae666f, 0x1558ee6b, 0x007f19c6, 0x88000000, 0x34cca4f2, 0xa521fc05, 0x00002970, 0x10000000,
539     0x00004000, 0x90000000, 0x000006fb, 0x32000000, 0x00000078, 0xd1400000, 0x00000007, 0x20000000,
540     0x1c36c1ef, 0x03f0cace, 0x0060316a, 0xf4000000, 0x42430e06, 0x31108141, 0x00000dd8, 0x10000000,
541     0x3df8fcb8, 0xed9c3e11, 0x97eb0fe8, 0x00dd13e2, 0x00000000, 0x00000000, 0x00000000, 0x20000000,
542     0x515aab47, 0xe322076d, 0x347b2948, 0x14000028, 0x9421f3e5, 0x1215734e, 0x37b0bbfa, 0x10000000,
543     0xfefc7e70, 0x2ef95f0b, 0x00000667, 0x2e000000, 0xb77f35ff, 0x28fe605e, 0x00000006, 0x10000000,
544     0x92b969ed, 0x230d478b, 0x3069812b, 0x6b00001d, 0x2793e734, 0x47c34ec8, 0x244074c9, 0x10000000,
545     0xff077eb7, 0xff211eec, 0x030d9733, 0xb1000000, 0x937e937e, 0xdcdd515e, 0x000269dd, 0x10000000,
546     0x02ed06cc, 0x9084e13c, 0xe0133834, 0x3e000005, 0xd292842c, 0x3ff32f47, 0x22747661, 0x10000000,
547     0x3f0f7f25, 0x0efabee3, 0x5b43a71a, 0x8d00013b, 0xc6bea2fe, 0xaf9da45e, 0xee9e7775, 0x10000000,
548     0x22d5e919, 0xd5e88edc, 0x9cc6aa37, 0xa9000036, 0xc0cd9772, 0xdd925545, 0x11f84a30, 0x10000000,
549     0x7edc7eca, 0x8e3f7e28, 0xa2f2ee7e, 0x1a85b94e, 0x12bc637c, 0xc43d439d, 0x9a359283, 0x10003822,
550     0x18c639d3, 0xe44b4a4a, 0x28887195, 0x2a000025, 0x3902cf86, 0x3af08821, 0x06f81730, 0x10000000,
551     0x7e14fd7f, 0x6d595c61, 0x722c9580, 0x334918da, 0x0000001a, 0x00000000, 0x00000000, 0x00000000,
552     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
553     0x7f2dfe77, 0x8f353f44, 0x7f39873a, 0xd573032f, 0x000d8d27, 0x00000000, 0x00000000, 0x00000000,
554     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
555     0x36557351, 0x08e3b68a, 0xb7973789, 0x008d9386, 0x00000000, 0x00000000, 0x00000000, 0x20000000,
556     0x347e0397, 0xf54a342c, 0x64a57b0b, 0xefc43404, 0x45c57033, 0x00013bd6, 0x00000000, 0x30000000,
557     0x37a7f5b4, 0xfa3dd897, 0x00000304, 0x06000000, 0x42b9caf9, 0x592a7479, 0x00000003, 0x10000000,
558     0xbcf984c4, 0x17de161b, 0x9cc9e376, 0x50d5ca03, 0x000566b9, 0x00080010, 0x00000000, 0x30000000,
559     0xb5a4724f, 0xc9415626, 0x0125b3ae, 0xe5000000, 0x3d3aba79, 0x68eaac3b, 0x00014184, 0x10000000,
560     0x75788afb, 0x147e4e62, 0xecd91286, 0x18e27c08, 0x000765c4, 0x00080010, 0x00000000, 0x30000000,
561     0x31706b83, 0xf842936c, 0xa114231b, 0xfa000050, 0x44f93877, 0x8be90d1a, 0x5e017c93, 0x10000000,
562     0xbc733a00, 0x53a8f8e3, 0x4025f555, 0xf4f55402, 0xdb848142, 0x000d7e9f, 0x00000000, 0x30000000,
563     0x39ac7628, 0xfbab5a30, 0x39db54ed, 0x654330c8, 0xbd77ef77, 0xf54ac1b8, 0x6fdd1bfa, 0x10002b06,
564     0xbfc5e75c, 0x0ef1fe66, 0x66aaac00, 0x00800027, 0x00200040, 0x00080010, 0x00000000, 0x30000000,
565     0x33696c19, 0xf97ad63d, 0x25cdf416, 0x2c33deb9, 0x0000000e, 0x00000000, 0x00000000, 0x00000000,
566     0x2000028b, 0x008af000, 0x020c0400, 0x806d0134, 0x2026c044, 0x0000000f, 0x00000000, 0x30000000,
567     0xbc1e78b7, 0xbdeddd23, 0x59fb356d, 0x7e2b12b2, 0x0001ec10, 0x00000000, 0x00000000, 0x00000000,
568     0xde5cbdbf, 0x0800188e, 0x02000400, 0x00800100, 0xc4a41340, 0x0004324b, 0x00000000, 0x40000000,
569     0x82dd2787, 0x98c26090, 0x1c487960, 0xf875b57e, 0xe4fa1924, 0xa009c1d7, 0x8fc37627, 0x80000001,
570     0x84a3b36b, 0x4965a128, 0x084ec197, 0x406e857c, 0xe6788b20, 0xa3783355, 0x95d37f5f, 0x80000001,
571     0xc5e9b95e, 0x49d980de, 0x6847199f, 0x835b056c, 0x36f3ae16, 0x66159c31, 0x6727395f, 0x80000001,
572     0x05d928ae, 0x08cfa15d, 0xbc6f11c8, 0x1a949f97, 0x5ebbf637, 0x000b72da, 0x80020006, 0x80000000,
573     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
574     0x0740ba53, 0x40a54318, 0x881bd078, 0x3e1dd87a, 0x926e8f70, 0x00000013, 0x00000000, 0x50000000,
575     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
576     0x0a2fc288, 0xea86c21d, 0x147c6a30, 0x0b939da3, 0xe577c4b3, 0x4ef937b6, 0x62d73617, 0x80000001,
577     0xc4572f45, 0x59a1a0d1, 0xa452519f, 0x366d7780, 0x7675bc9f, 0x4fc6e713, 0x519f1ed7, 0x80000001,
578     0x7985f960, 0x18f91b3e, 0x5938e321, 0x3e4a9d06, 0xfba83297, 0xc28455ec, 0xc3761745, 0x80000000,
579     0xd9b7cf08, 0x5bbf08c4, 0x999e8c53, 0xb6a7839f, 0x48b6bd43, 0x1259e0d7, 0x5b3b1b5f, 0x80000001,
580     0x1d95d5ac, 0x4be98a9d, 0x15b30c79, 0x80a3fb9a, 0x55b593c1, 0x42694816, 0x7bcb48e7, 0x80000001,
581     0x2748e464, 0x6d3d0f5f, 0xb23bc573, 0xb4d901d7, 0x5fe84c63, 0xa28589ce, 0x817d787c, 0x80000000,
582     0xdebfb04f, 0x29b6f374, 0x0200048f, 0x00800100, 0xa0a3dd40, 0x0004144b, 0x00000000, 0x40000000,
583     0x40ba980e, 0xe6ec401b, 0xf014588d, 0x0236c93d, 0xb1b1148b, 0x4473ef4d, 0x3f170357, 0x80000001,
584     0x41e5a121, 0x77d82052, 0xbc2180e2, 0xcb47fd56, 0xd2b35e0f, 0x6914bdef, 0x5f6b32f7, 0x80000001,
585     0x82a41c8d, 0x07e4608c, 0x003cf127, 0xb94d6f54, 0x1d327e93, 0x5bf51ab0, 0x5b5f2b27, 0x80000001,
586     0x01601e0c, 0x073cc02f, 0x201720a5, 0x3e3ccf44, 0x0ab1518d, 0x3554220e, 0x2fb6ed9f, 0x80000001,
587     0xc246a740, 0x38b2005d, 0xf42cc922, 0xe8527d67, 0x8a33b012, 0x4a251f70, 0x41eb0bb7, 0x80000001,
588     0x4c49e9ab, 0x20852239, 0xc013104c, 0x4809fa30, 0x53ec546e, 0x00000012, 0x00000000, 0x50000000,
589     0x442eb069, 0xc936009f, 0xa03ac956, 0xf857956d, 0x62b46795, 0x5955b031, 0x4f271e3f, 0x80000001,
590     0x8289225e, 0xa79d6061, 0x141770bd, 0xf3393f38, 0xc82e758a, 0xd8835b6c, 0xf7ea9ca6, 0x80000000,
591     0x41ea213f, 0x27c20043, 0x281bc8cf, 0xae3c4545, 0xb8b08a0b, 0x2c93c08d, 0x2deaedbf, 0x80000001,
592     0x39577938, 0x28f45b12, 0x5d34f31b, 0xab4d1b0c, 0x16285d17, 0xc9d45fad, 0xc36a1905, 0x80000000,
593     0xdb12d1d0, 0x7bf7e96e, 0x71b46c7c, 0x46ac0ba4, 0xb6b742c6, 0x1eaa2617, 0x631726b7, 0x80000001,
594     0xd414c582, 0x7a6c263a, 0x8528cb70, 0xd8881575, 0x733207b1, 0x18579053, 0x640b2427, 0x80000001,
595     0x2762e4a9, 0xfd398f5a, 0xea393d6f, 0x4ad585d3, 0xebe12be1, 0x85541b2a, 0x4658eb9b, 0x80000000,
596     0x9e6b229f, 0xe75c3035, 0xf211f49f, 0x00800143, 0x25eb5ec0, 0x000659b0, 0x00000000, 0x40000000,
597     0x40388bf1, 0xe5a9e008, 0x440af855, 0x132b852d, 0xd36ec207, 0xf522844a, 0xf5ca9a2e, 0x80000000,
598     0x00e21590, 0x76bea030, 0x4015a890, 0x85448747, 0x3b31a70f, 0x2b53f72e, 0x2386df0f, 0x80000001,
599     0x88b8aba3, 0xfa9c620b, 0xb4c4a2a3, 0x5873ad80, 0x3ef5c326, 0x89f6f393, 0x802b5d47, 0x80000001,
600     0x405f0fdc, 0x762d0009, 0x1008f05f, 0xa728c52a, 0x03ad9b05, 0xc7921d2a, 0xcfea60ee, 0x80000000,
601     0x40dc1289, 0x26e4a02c, 0xf01970a5, 0x6b3b8d41, 0xe7b0d70c, 0x25c3e7ad, 0x2682e10f, 0x80000001,
602     0x675e7906, 0xd08ee20e, 0x5009601a, 0x91074e19, 0x9d2b926a, 0x00000012, 0x00000000, 0x50000000,
603     0x417c1439, 0xb7a06045, 0x8c2750f4, 0x44447b4c, 0x56b0f78f, 0x3fd42dce, 0x411b060f, 0x80000001,
604     0x808f1194, 0x566a201c, 0x700b606b, 0xd42b0927, 0xe4ed3d86, 0xcf4286ca, 0xe83283f6, 0x80000000,
605     0x813d976a, 0x4749802c, 0x581f48c8, 0x0d411549, 0x3671450e, 0x44f40eae, 0x3f870477, 0x80000001,
606     0xbaee7ae1, 0xca825c42, 0x9598bbfe, 0x356c433f, 0x4e6b61a7, 0x03859aef, 0xe2de4a56, 0x80000000,
607     0x20b559be, 0x7cb44ca9, 0x76138d15, 0x30b83db2, 0xbd787dce, 0x415acfb8, 0x75fb41df, 0x80000001,
608     0x920641b0, 0x29f0e562, 0x81049322, 0x737d7d67, 0x1d305e2c, 0xfd66cfd2, 0x54bf0c76, 0x80000001,
609     0xe9976734, 0x9d7690cc, 0x4e5d45a4, 0x45dca5db, 0xb5a5f3e6, 0x496577ed, 0x3cb8d14b, 0x80000000,
610     0x601c94f9, 0xf6700e5a, 0x61c002f0, 0x9bb0b4ce, 0x6cbb72dd, 0x000d709c, 0x00000000, 0x40000000,
611     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
612     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
613     0xc75115ce, 0x8cbe82e8, 0x1215f4ee, 0x42cfb7de, 0xb37dcd5e, 0xe45dc9bc, 0xdccbd57f, 0x80000001,
614     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
615     0x01580c39, 0x083ce037, 0xd04d7146, 0xd9636379, 0xf976739c, 0x74069772, 0x5bfb294f, 0x80000001,
616     0x3b0e7905, 0x008a41e4, 0xec02b03b, 0xeb018e09, 0xef32246b, 0x00000017, 0x00000000, 0x50000000,
617     0xc11d91fb, 0x55e0203e, 0x2c258092, 0xd43f4320, 0xbdb60093, 0x8ee74e73, 0x7eef55ff, 0x80000001,
618     0x00160614, 0xa4990005, 0xcc06f83e, 0xad289d1a, 0x98af6a06, 0x1c42af0b, 0x1272c177, 0x80000001,
619     0x03279a1d, 0x596a4053, 0x5085e9fe, 0x3a8c119a, 0x68396332, 0xa0698357, 0x91cb78f7, 0x80000001,
620     0x3db5fda8, 0xac411e4c, 0xe1de1cc1, 0xd7c321bd, 0xcefa4ed5, 0x6f2c637a, 0x9fe377e7, 0x80000001,
621     0xf6aef4b5, 0x9dc159ff, 0x02cffe23, 0x11ca87c9, 0x067953dc, 0x5d7b729a, 0x8c9f56e7, 0x80000001,
622     0xd714c9eb, 0x2a9a27ca, 0x394c7b9d, 0xa7878571, 0x29f17132, 0x2d677a13, 0x732f383f, 0x80000001,
623     0xb83077b1, 0xaf18da93, 0xbf5b2f26, 0xe5f0e7f0, 0x2f5c4c74, 0x21425568, 0x66dd3b8c, 0x80000000,
624     0x1555a492, 0x88000e00, 0x62777bd3, 0x86510af1, 0x0030002c, 0x00040010, 0x00000000, 0x40000000,
625     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
626     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
627     0x524936db, 0x0d556492, 0xeeaaae00, 0x4f89d9c4, 0x6bfaf2ac, 0xf96a1b18, 0xf35bf1b7, 0x80000001,
628     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
629     0x00930a2d, 0x07100015, 0x34180090, 0x3130c54d, 0x1134448c, 0x746599b1, 0x745f2e8f, 0x80000001,
630     0xb943f943, 0x706821a0, 0x9004d813, 0xa700ee05, 0xb87e14fd, 0x0000001e, 0x00000000, 0x50000000,
631     0x41278716, 0x6785a031, 0xa834e0c8, 0xee508168, 0x00300014, 0x92558e50, 0x50030497, 0x80000001,
632     0x00110640, 0xf5054005, 0x7c094852, 0xd637cb37, 0x07725e0b, 0x3d94b5cf, 0x2d66ea4f, 0x80000001,
633     0x85f928f6, 0x2bd880da, 0xc8d402e4, 0x5d9cafc5, 0x0e3cd639, 0xd27aae79, 0xc967ba27, 0x80000001,
634     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
635     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
636     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
637     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
638     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
639     0xc173a0d7, 0x76e1e02e, 0xb019c8a6, 0x48523960, 0xfcf54494, 0x58c607f1, 0x4c5b184f, 0x80000001,
640     0xd401b583, 0x080012ef, 0x02000400, 0x00800100, 0xa1e0d0c0, 0x00032a49, 0x00000000, 0x40000000,
641     0xc1951f9a, 0xe6e7602d, 0xb01d48b2, 0x355e196d, 0xf8b6ef99, 0x53a72a53, 0x4b17192f, 0x80000001,
642     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
643     0x42672600, 0xc8948049, 0x7027c10d, 0x9e4cbd63, 0x88b33d90, 0x22e4866f, 0x1472cd47, 0x80000001,
644     0xc1cf1ca7, 0x76d2a04a, 0x902a68d9, 0xd876a188, 0x32b95823, 0x0008a737, 0x80020006, 0x80000000,
645     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
646     0x055b2c8b, 0x602b2234, 0x08049845, 0x6206ee31, 0xbfdfe267, 0x0000000a, 0x00000000, 0x50000000,
647     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
648     0xc3e73117, 0x98cbc08b, 0x182f3125, 0x6b624d7d, 0x0f747218, 0xf54544d1, 0xe84e960e, 0x80000000,
649     0xc1bea084, 0x483ee03c, 0xf82368f0, 0xce4d4f64, 0x6eb34090, 0xfee46eaf, 0xf2f29ece, 0x80000000,
650     0xb65d7636, 0x14c118f3, 0xb03940f7, 0xe92f60ce, 0x91e2650b, 0x3702c4e9, 0x8e79b27d, 0x80000000,
651     0x57a94b22, 0x4b5c07ff, 0x057e4c12, 0xf99dd193, 0x2575863d, 0xefb92796, 0x46befa76, 0x80000001,
652     0xd21ec2d4, 0x0a11a535, 0x0102c32c, 0x6f7cf568, 0x0ef088ab, 0xac06b0d2, 0x225ec236, 0x80000001,
653     0xa1d45d4b, 0xbc878c39, 0xe5dfc4dc, 0x28c12fbd, 0x219948d3, 0x6361c386, 0x3bf0d5bb, 0x80000000,
654     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
655     0xc0a5182c, 0x75d18016, 0xb40d6060, 0xf137393d, 0xa9ef068a, 0xea22d40b, 0xf22e827e, 0x80000000,
656     0x9791af37, 0x08aaf11b, 0x0200045b, 0x00800100, 0xd021ce40, 0x0003906a, 0x00000000, 0x40000000,
657     0x00a9952a, 0xf5908012, 0xfc0f806f, 0x633a9539, 0x90ee040b, 0xc662fe0b, 0xdb525ece, 0x80000000,
658     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
659     0x82141f3a, 0x37c84055, 0x58358105, 0x904da95a, 0x90f2d993, 0x34e4bc2f, 0x2c32e977, 0x80000001,
660     0xc0909529, 0x758d400d, 0xf80be861, 0x6e3c5341, 0xbf70940b, 0xdc23a32d, 0xd8fe6d76, 0x80000000,
661     0x40cb1443, 0xd6baa020, 0x0418b0a7, 0x6442914f, 0xb271d00e, 0x0654390e, 0x035eaf87, 0x80000001,
662     0x09aa4ec0, 0x7043e20a, 0xf40d887a, 0x6b02b216, 0x8edf3ee8, 0x0000000a, 0x00000000, 0x50000000,
663     0x41d49adb, 0x57e7e046, 0xcc2b6905, 0xea4e4960, 0x4eb2a811, 0x18447f8f, 0x106ac417, 0x80000001,
664     0x00f31ad0, 0x865ee01c, 0xb40f607b, 0x3532fb37, 0xdeaf4209, 0xb0c2deab, 0xc03648ae, 0x80000000,
665     0x01121c12, 0xa6e3a019, 0xf8110897, 0xcd33b73b, 0x076f8e08, 0xde42e9ec, 0xe1627be6, 0x80000000,
666     0xb732770d, 0x864e198e, 0xf45be16d, 0x883a6ee7, 0x8c241d0f, 0x562328ea, 0x9969c945, 0x80000000,
667     0x5a67d076, 0xdbbda95a, 0x91a3e454, 0xfea4919b, 0xed366341, 0xfd59a096, 0x53fb0f8e, 0x80000001,
668     0x515fc077, 0x69c544fc, 0x44f44306, 0x377a6d62, 0xb72fe32a, 0xbab680b1, 0x2b2acf7e, 0x80000001,
669     0x6310df19, 0x5cb1acd5, 0x59f3d500, 0xb7c375c0, 0x89993a54, 0x45520006, 0x3b0cd013, 0x80000000,
670     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
671     0x01069b27, 0x96e8c00c, 0x4c0dd857, 0x7a22c525, 0x16a81083, 0xaa70ad26, 0x43795d65, 0x80000000,
672     0xd760a269, 0x2816ad6c, 0x5a4603a2, 0x00800144, 0xb52ac540, 0x0005c56f, 0x00000000, 0x40000000,
673     0x004291e4, 0x353a800b, 0x28014019, 0xf0103ce5, 0xd0244600, 0x01a06023, 0x1dbcda05, 0x80000000,
674     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
675     0x84099975, 0x99c240e9, 0x649b2a31, 0x305e9f71, 0x2c33901b, 0x65f58550, 0x56eb1fbf, 0x80000001,
676     0x0149a190, 0xf7130023, 0x8c1928c0, 0x2046d360, 0x71f0978c, 0x85427c8c, 0x8979f4ce, 0x80000000,
677     0x40e50c3b, 0x7711002b, 0x801df8b2, 0x0957eb61, 0x03b58917, 0x40560ad2, 0x2f7afab7, 0x80000001,
678     0x1163b657, 0x002a814f, 0x840c5840, 0xd701e40f, 0xc0641169, 0x0000000c, 0x00000000, 0x50000000,
679     0x00951014, 0xd76fc017, 0x7011787c, 0xe22dfd26, 0xb2eb8008, 0x3bc26469, 0xae2dffa6, 0x80000000,
680     0x802887e9, 0x44c44005, 0x8808b844, 0x7026991d, 0xbbec2106, 0x79e22809, 0xb736227e, 0x80000000,
681     0x40668af7, 0xd70e400c, 0x7c1998b3, 0x53407d4e, 0xdb70920d, 0x05e37f2c, 0x0d1ab517, 0x80000001,
682     0x39907979, 0x9940bb2d, 0xc1307352, 0xb06ab944, 0x31ab1f25, 0x0d056c2f, 0xe18e45b6, 0x80000000,
683     0x22415a40, 0x3ca34dc2, 0x9e1e850b, 0xefba79b4, 0x01b8e94f, 0x424af6d9, 0x6d57371f, 0x80000001,
684     0x12fc425d, 0x39d44570, 0xf101631a, 0x3476ef58, 0x1b6dffa9, 0xc2a63551, 0x3b3adde6, 0x80000001,
685     0x27fd652c, 0xed6cd041, 0x526de5cd, 0x18d2ebd1, 0xfa59745f, 0x60b1c565, 0x3b20d153, 0x80000000,
686     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
687     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
688     0x574f9e9c, 0x67dc5441, 0x0a27f323, 0xac9452ec, 0xfcf4970f, 0x000ab556, 0x00000000, 0x40000000,
689     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
690     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
691     0x86301f53, 0x3b60c1bd, 0x01437b5a, 0xc0b781c8, 0x29fd0fc7, 0xd5bd58fc, 0xd543d127, 0x80000001,
692     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
693     0x807605bc, 0x38cb6036, 0x2c197096, 0x87a549bb, 0xf73ede37, 0x961c6cdb, 0x2352c23f, 0x80000001,
694     0xd492ca49, 0x402ce0a9, 0x54978163, 0x63015c36, 0xd9724df6, 0x00000016, 0x00000000, 0x50000000,
695     0x40f30ac8, 0x469a802c, 0x501fe0a6, 0x8d434551, 0x6134f70c, 0x7be69ef1, 0x7be3605f, 0x80000001,
696     0x001a0390, 0x04c38005, 0x08062045, 0x542fc12a, 0xf3301908, 0xf633426c, 0xfab2a9ae, 0x80000000,
697     0xc409224d, 0x5961c0a2, 0xf46d8a00, 0x5d8e499e, 0x4939e0ad, 0x67d85ef5, 0x4d77214f, 0x80000001,
698     0x7b5f7bc2, 0xab41dcc7, 0x858123c9, 0x1d94fd7a, 0x3476653d, 0xfdfa2f57, 0x5b1f14a6, 0x80000001,
699     0x392ef6f7, 0x8e895bd3, 0x3315c682, 0x74c5d3da, 0xb47a1359, 0x014aaab7, 0x5486e8bf, 0x80000001,
700     0xda834d5e, 0x1afc0866, 0xd14c7ba4, 0x1288b579, 0xacef0b2f, 0xcfa67a91, 0x31aed2e6, 0x80000001,
701     0xb531f6c4, 0x6f1ad821, 0xff522f22, 0xdbe949e8, 0x4de1e9ef, 0x2b537dab, 0x60fd5204, 0x80000000,
702     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
703     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
704     0x20004000, 0x08001000, 0x02000400, 0x00800100, 0x00300040, 0x00040010, 0x00000000, 0x40000000,
705     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
706     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
707     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
708     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
709     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
710     0x5555d555, 0x55557555, 0x55555d55, 0x00555755, 0x00200060, 0x00000008, 0x00000000, 0x50000000,
711     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
712     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
713     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
714     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
715     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
716     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
717     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
718     0xfb04f7b3, 0xfba1daf4, 0xf7e81fdf, 0x00ce7be2, 0x00000000, 0x00000000, 0x00000000, 0x20000000,
719     0x515aab47, 0xe322076d, 0x347b2948, 0x14000028, 0x9421f3e5, 0x1215734e, 0x37b0bbfa, 0x10000000,
720     0x7d8ffc23, 0xfdf93e07, 0x0000055d, 0xc7000000, 0xed7f23fe, 0xe8ee937e, 0x00000005, 0x10000000,
721     0x92b969ed, 0x230d478b, 0x3069812b, 0x6b00001d, 0x2793e734, 0x47c34ec8, 0x244074c9, 0x10000000,
722     0xfd2d7b14, 0x4e301dcc, 0x025e3e60, 0x6f000000, 0xfefed1fe, 0x92bebfbe, 0x00027576, 0x10000000,
723     0x02ed06cc, 0x9084e13c, 0xe0133834, 0x3e000005, 0xd292842c, 0x3ff32f47, 0x22747661, 0x10000000,
724     0x3e2dfd53, 0x2eacde8c, 0x2af476d6, 0x270000d3, 0x65bf507f, 0xb73ee03f, 0xef02c87e, 0x10000000,
725     0x22d5e919, 0xd5e88edc, 0x9cc6aa37, 0xa9000036, 0xc0cd9772, 0xdd925545, 0x11f84a30, 0x10000000,
726     0x7be1fa58, 0xfcf13bf2, 0xa261a5b8, 0x7149f8e7, 0x4afe02fe, 0x734e845e, 0x9cb61a35, 0x10002ac4,
727     0x18c639d3, 0xe44b4a4a, 0x28887195, 0x2a000025, 0x3902cf86, 0x3af08821, 0x06f81730, 0x10000000,
728     0x7b8d7b32, 0x1c341b15, 0xea20751a, 0xb33ff0cd, 0x0000000f, 0x00000000, 0x00000000, 0x00000000,
729     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
730     0xfe267d48, 0x6d375ced, 0x1662fda1, 0xa45540e9, 0x00093f1b, 0x00000000, 0x00000000, 0x00000000,
731     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
732     0x6d73622b, 0xf6ab9213, 0x7b800763, 0x007b3f75, 0x00000000, 0x00000000, 0x00000000, 0x20000000,
733     0x7137095d, 0x75de3327, 0xccb22ae1, 0xead5120b, 0x0008c439, 0x00080010, 0x00000000, 0x30000000,
734     0x2bc85f36, 0x26cb3265, 0x000001a6, 0xee000000, 0x02f7f275, 0x15695358, 0x00000002, 0x10000000,
735     0xfc6a03da, 0xa767958f, 0xc4a412b8, 0x5add7a05, 0x0008a3c0, 0x00080010, 0x00000000, 0x30000000,
736     0x2b465e5f, 0xa6dcd1b8, 0x0075027a, 0x7d000000, 0x4579e4f8, 0x83bb433a, 0x0000b124, 0x10000000,
737     0x6bdc8363, 0x83e34e60, 0x6097b250, 0x74df1207, 0x0008a5c2, 0x00080010, 0x00000000, 0x30000000,
738     0xea206093, 0x466eb0dd, 0x98a78227, 0xfa00001c, 0xb477e076, 0x9f58ad78, 0x27817703, 0x10000000,
739     0x7df5979a, 0x65f25492, 0xf8d47378, 0xbfd4620c, 0x5fc6992c, 0x000520ff, 0x00000000, 0x30000000,
740     0x701666fe, 0x88a413ac, 0xc5360b6d, 0x761a7e62, 0x66b9a679, 0x883b0a3a, 0x7c2d1832, 0x10000e48,
741     0x7fa21828, 0x6407375c, 0x80444a66, 0x00800002, 0x00200040, 0x00080010, 0x00000000, 0x30000000,
742     0x6c82e39f, 0xc699d08d, 0x4916d2ae, 0xbd222862, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
743     0x20004000, 0x00a49000, 0x020c0400, 0x806d0134, 0x2026c044, 0x0000000f, 0x00000000, 0x30000000,
744     0xb8fcf590, 0xb7a896e3, 0x85092273, 0x27250a61, 0x0003b211, 0x00000000, 0x00000000, 0x00000000,
745     0xd880bbc1, 0x080014e8, 0x02000400, 0x00800100, 0x28e2b6c0, 0x0003ea6b, 0x00000000, 0x40000000,
746     0x816f9c6a, 0x57cf805a, 0xd440112c, 0x2472176c, 0xacfac5a5, 0xa14a3d78, 0x8ffb7847, 0x80000001,
747     0x82b226a1, 0x789220a3, 0x2c38a92a, 0x6e68176d, 0x6af9471e, 0xaa888216, 0x99f38507, 0x80000001,
748     0x43a3b09a, 0x19158081, 0x803fd973, 0x275eb367, 0x65f37818, 0x46a5a3b1, 0x55d7208f, 0x80000001,
749     0xc2911844, 0x57a300a6, 0xf0532166, 0xe788217d, 0x703c48b0, 0x000b607a, 0x80020006, 0x80000000,
750     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
751     0x45a03b68, 0x10986306, 0xa816406e, 0x67159455, 0x7268d968, 0x00000010, 0x00000000, 0x50000000,
752     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
753     0x464bb958, 0xd99f4127, 0x505439b0, 0x157c8b74, 0x17310d29, 0x99b73973, 0x1e22bda6, 0x80000001,
754     0x82b923f1, 0x88afc080, 0x9838f14e, 0x7261ff6c, 0xc8b2ff19, 0x0b45f931, 0x350ef0df, 0x80000001,
755     0xb8eff8c9, 0x58ef1ac5, 0x6945cb33, 0x73433cf9, 0x1326ce14, 0xb3d3eeec, 0xbb0e0885, 0x80000000,
756     0xd85fcc9a, 0x2ba267f9, 0x9d92e442, 0x41a5d79d, 0x2ef697c2, 0x16d9c317, 0x59f71cbf, 0x80000001,
757     0x1a5dd0da, 0x2ba0e8ee, 0x358bb43d, 0xbc9c8d92, 0x57f480bc, 0x12f89b95, 0x5cc71c97, 0x80000001,
758     0x2733e470, 0xdd4b0f41, 0xda3c2579, 0x81d371d1, 0x5a67a85f, 0x386592ce, 0x69394004, 0x80000000,
759     0x57a53032, 0xf7b6d0fe, 0x0200046b, 0x00800100, 0x5020c0c0, 0x000392ea, 0x00000000, 0x40000000,
760     0x80601272, 0xf5a8c012, 0x480ec05a, 0x5233712d, 0x8c72098b, 0x4ef46aae, 0x40770757, 0x80000001,
761     0x80ee1b0c, 0x56adc02e, 0x1414f885, 0xf5403d45, 0x4a73db0e, 0x6dc515d0, 0x5d1b3187, 0x80000001,
762     0xc1e59f1a, 0x9766004d, 0x242ba0e8, 0x9d4af353, 0x44b34392, 0x53451990, 0x49eb1587, 0x80000001,
763     0x807813c2, 0xc5e7c014, 0x0c0fa069, 0xc53d0b3e, 0x7872f60d, 0x46a4b8ef, 0x3626fb9f, 0x80000001,
764     0x81181a7c, 0x0810603d, 0x0426d0f1, 0x1458eb71, 0x6f74e415, 0x56358111, 0x447311af, 0x80000001,
765     0x458a4479, 0xe054216b, 0xc00a7027, 0x8506081d, 0xbca528e5, 0x0000000e, 0x00000000, 0x50000000,
766     0x41c8a598, 0x58274051, 0x082d190b, 0x6b601b78, 0x5f35c298, 0x5c360e32, 0x4b471acf, 0x80000001,
767     0x80d617f4, 0x663d4022, 0x140d586b, 0x95340f31, 0xefef3a09, 0xd933584c, 0xf1a295fe, 0x80000000,
768     0xc0c89d4e, 0x76b24020, 0x5412888a, 0x913b0942, 0x43b1b88b, 0x2bb3f00e, 0x241ae1a7, 0x80000001,
769     0x38a2f894, 0x484a9a8e, 0x1d139aca, 0x9242aaf9, 0x13a6db93, 0xa8a3e2cc, 0xb66a00ad, 0x80000000,
770     0x98f64d06, 0x0bcdc871, 0xbda2745f, 0x7aa973a1, 0x85771b44, 0x1a89f8b7, 0x5e7f20ef, 0x80000001,
771     0xd2e54357, 0x3a4e45b3, 0x151d3b5d, 0x72866174, 0x33b1c7b0, 0xf6875a93, 0x4d43042e, 0x80000001,
772     0xe633e348, 0x3d170eae, 0x82258551, 0xd1cf4dcd, 0xc52137dc, 0x48a4a90b, 0x3ea4d3db, 0x80000000,
773     0x96f62877, 0x3781b0b7, 0x25889c39, 0x008000cf, 0xbd2589c0, 0x0004b14c, 0x00000000, 0x40000000,
774     0x40288a4b, 0xa4bd2007, 0x1007e835, 0x6424db1c, 0xdbee4186, 0xf5b297ea, 0xf24293d6, 0x80000000,
775     0x807811c8, 0x05d1e015, 0xb00e105e, 0xc9365338, 0xa3f1398b, 0x24b3d4ad, 0x1dced61f, 0x80000001,
776     0x431b20a6, 0xe8f8c078, 0x8c4e9978, 0x95673d7c, 0x6136b11d, 0x8136d3f3, 0x70274a97, 0x80000001,
777     0x00268cb2, 0x9509a005, 0xc004d832, 0x2c1f9d17, 0x932d1084, 0xcbc1fa89, 0xcf4a5e96, 0x80000000,
778     0x005d0de8, 0x76338010, 0x74118077, 0x653c0744, 0xaab26e8c, 0x3534306e, 0x2526e38f, 0x80000001,
779     0x8ec975ac, 0x1027a0b6, 0x68024808, 0x7d01f409, 0xeee2d162, 0x0000000d, 0x00000000, 0x50000000,
780     0xc0979521, 0xa6846018, 0xd4129086, 0x753c9d45, 0xbd326d0c, 0x44143ece, 0x3362f73f, 0x80000001,
781     0x402e0eb6, 0x75354008, 0xe0060039, 0x53252f1e, 0xd46e5e85, 0xdaa25caa, 0xdb1273d6, 0x80000000,
782     0x40ca1768, 0x16da801a, 0x0c1a28af, 0x4c462d54, 0x7cf35f0f, 0x41c4854f, 0x2e56f217, 0x80000001,
783     0xb9d479c2, 0xd889fb6f, 0x9518dae0, 0xa0533316, 0x0669ce9a, 0xe5f4dc8e, 0xd15a2fbd, 0x80000000,
784     0x9c1951bc, 0xdc222a46, 0x49d49cac, 0x86b0c3aa, 0x3477dd49, 0x2dca7898, 0x6cb734b7, 0x80000001,
785     0x9035be2a, 0xa9b80495, 0x58f2c2ff, 0xee7b5d64, 0xffb03b2a, 0xe726b311, 0x45faf70e, 0x80000001,
786     0x283465af, 0x9d4fcfe8, 0x4a42557e, 0x44d2cdd1, 0x56d873df, 0xdb229ce7, 0x2b3ca412, 0x80000000,
787     0x58531a79, 0x76644eaf, 0x69e32b72, 0xf276e6ab, 0x53b4dbc2, 0x00085275, 0x00000000, 0x40000000,
788     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
789     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
790     0x580f49f3, 0x2d1cc818, 0x99a40487, 0x56afcbc3, 0xf63ae646, 0xbd5a9bd8, 0xb563a28f, 0x80000001,
791     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
792     0x00e28d36, 0x779f0024, 0xf82c00eb, 0xfc553569, 0x99347294, 0x51e52f90, 0x43c70cef, 0x80000001,
793     0x7b97fbec, 0x0069a1f7, 0x30025823, 0xfa013208, 0x57b2a4f3, 0x00000016, 0x00000000, 0x50000000,
794     0x409f0dc2, 0x76df001a, 0xc81db0b1, 0x70496f5b, 0xe373d590, 0x5d04b56f, 0x491f1747, 0x80000001,
795     0x001d07df, 0x156f4005, 0xdc084850, 0x6a2e3535, 0xe3300507, 0x1cb2d4cb, 0x0ddebf1f, 0x80000001,
796     0xc2311b27, 0xe94e803b, 0x804a7991, 0xda6ecf8d, 0x3a36d69e, 0x8df69693, 0x7d835bdf, 0x80000001,
797     0x3bd3fbdf, 0x5b1bdcdd, 0xb1606bd5, 0xbb9db58c, 0x68f4263f, 0xc168ffb5, 0x3bd6e096, 0x80000001,
798     0x6711e0f6, 0x5cadf043, 0xaa04f50a, 0x88b0d3aa, 0x2d77d1c8, 0x389a61b8, 0x6d033d5f, 0x80000001,
799     0x94ee468d, 0xca470695, 0xcd282365, 0xd383616d, 0x91f0bf2f, 0x0d971bd2, 0x5ea31adf, 0x80000001,
800     0x705b6f28, 0xae319524, 0x8ece5e4c, 0xe9e605e5, 0xa79b5dec, 0xb1027047, 0x4d5cff63, 0x80000000,
801     0xa9ec1813, 0xe7ea0faa, 0x6920e2e7, 0xd496c6c9, 0x00300025, 0x00040010, 0x00000000, 0x40000000,
802     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
803     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
804     0x5c934c96, 0x7eaf0b8d, 0x8eee6e61, 0x3bdf7fea, 0x51bddae5, 0xeacdb29d, 0xe707e01f, 0x80000001,
805     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
806     0x82a01204, 0x67bda0d0, 0x104ad939, 0xc15c0571, 0xd9746118, 0x6445ac90, 0x4beb1b0f, 0x80000001,
807     0xfc6b7e22, 0x3061a1b8, 0xbc01601c, 0xf500f01d, 0xf13a84fb, 0x0000001b, 0x00000000, 0x50000000,
808     0x80918876, 0xd638c018, 0xb02580af, 0x37476950, 0x61730212, 0x4084c86f, 0x3436f547, 0x80000001,
809     0x001603e7, 0x95254005, 0xd80c5875, 0xdd3c1340, 0xa031b10b, 0x0a339eed, 0xfc62ab2f, 0x80000000,
810     0x4496a6d6, 0xeaeca09e, 0x28b612af, 0x2f9f13b6, 0x163b38bc, 0xb35ad3f9, 0xa2178bdf, 0x80000001,
811     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
812     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
813     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
814     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
815     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
816     0x41b61d2e, 0xe74de045, 0xf02740d6, 0x2d595f68, 0x5936ad18, 0x6ee6bc13, 0x4bb32457, 0x80000001,
817     0x95aeb091, 0x08001187, 0x02000400, 0x00800100, 0x4a2196c0, 0x00036d6a, 0x00000000, 0x40000000,
818     0x41a81c80, 0x573b6038, 0x502380d3, 0xe05f1f70, 0x97f6dc18, 0x49b69fd3, 0x2e12f7c7, 0x80000001,
819     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
820     0x0175a3f5, 0xa8126029, 0x701a08cf, 0x52448358, 0xe232dd8d, 0x0a94140e, 0xf91eaa8f, 0x80000000,
821     0x81629899, 0x96fcc030, 0xc01ad8ba, 0x9c67f17c, 0x48f88e1a, 0x00079955, 0x80020006, 0x80000000,
822     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
823     0x030a181e, 0x50174186, 0xf404183a, 0xf9046421, 0x341ae2de, 0x00000008, 0x00000000, 0x50000000,
824     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
825     0x423026da, 0xf7d58047, 0xac1a38c3, 0xcb4c0f5f, 0x9432458f, 0xcfd4060e, 0xb00a4e16, 0x80000000,
826     0x80f01937, 0x177d4021, 0x501508a7, 0x113fc552, 0x0c31f28c, 0xd8a3a96e, 0xd2366e66, 0x80000000,
827     0xb459744f, 0x9490176e, 0x643e30f1, 0xae27dcbb, 0x299fd309, 0xf4922ea8, 0x79958964, 0x80000000,
828     0x95dcc756, 0xfb066738, 0xb15dfbd3, 0x0598178d, 0x5834b4ba, 0xd6889555, 0x3382e1ee, 0x80000001,
829     0xce39ba65, 0xb93b83b5, 0x18c512a6, 0x176f8554, 0x71ee83a4, 0x6d05cbf0, 0xfeea8b96, 0x80000000,
830     0x5fccdb3e, 0x2c520b10, 0x21bcfcad, 0x13b51db1, 0x5996cf4b, 0xec417885, 0x2ad8a7b2, 0x80000000,
831     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
832     0x808a1940, 0xc608e011, 0x380bf856, 0x582b552a, 0x432e7908, 0xf762f86b, 0xf76a937e, 0x80000000,
833     0x94fa299b, 0x382acdc9, 0x0200041f, 0x00800100, 0x47e2e6c0, 0x0004092b, 0x00000000, 0x40000000,
834     0x40cd995f, 0x65e8000e, 0x900a385f, 0x4a2b1522, 0x9dacb907, 0xbd42aeaa, 0xd2ea59f6, 0x80000000,
835     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
836     0xc1d1a0ac, 0xf7b3603c, 0x2c1ec0d0, 0x2342ad50, 0x03b2d08e, 0x25e4448f, 0x12a6ccd7, 0x80000001,
837     0x009a979b, 0xe5c0200a, 0xc4078852, 0xa5317d33, 0x61b00407, 0xd3d2f14c, 0xc92661ce, 0x80000000,
838     0xc09b11cc, 0x46ebc018, 0xb414e099, 0xce415150, 0xc232978d, 0x1a24356e, 0x05eabc37, 0x80000001,
839     0x83841959, 0xf0222196, 0x1c072041, 0x41015c0d, 0x24da3ade, 0x00000008, 0x00000000, 0x50000000,
840     0x013c1b1f, 0x378be026, 0x0c1758b6, 0xe040d351, 0xa2f26e8c, 0x1484156e, 0x01eeb2e7, 0x80000001,
841     0x80861528, 0x45d1c00f, 0xec095851, 0x63278b24, 0xc32e7e06, 0xac32684a, 0xb4f635be, 0x80000000,
842     0x80949955, 0x066e200d, 0x980a3064, 0x532d6d32, 0xe52ff507, 0xda52decb, 0xd272673e, 0x80000000,
843     0xf5867572, 0xc4e4f852, 0xd4485111, 0x1e2becc3, 0xd760f40b, 0x1c028168, 0x86f5a355, 0x80000000,
844     0x5862cb31, 0x2b656884, 0x51839c1a, 0xf49f7b97, 0x8636103e, 0xf6d94d96, 0x48b70136, 0x80000001,
845     0xce84ba8b, 0x494803e3, 0x84ca3ab3, 0xbb702354, 0x94ee55a4, 0x80e5e650, 0x0f06a20e, 0x80000001,
846     0x20e25c5e, 0x3c580b9c, 0x19c234af, 0xc6b541b0, 0x11d749cb, 0xe0b1df86, 0x2d10a8a2, 0x80000000,
847     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
848     0xc0649afa, 0xe5d8c008, 0x9406482c, 0x0210bef2, 0x05260e82, 0xa3b0a1c5, 0x3c293fe5, 0x80000000,
849     0xd4182164, 0xc6c38ead, 0x91c0a34b, 0x008000d9, 0xd7e4bc40, 0x0004da6c, 0x00000000, 0x40000000,
850     0x002394d5, 0xa3d4c005, 0xdc01b017, 0xe809e0b0, 0xf7dffc00, 0x25407502, 0x39b0f665, 0x80000000,
851     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
852     0x02731d91, 0x38c94066, 0x5c43895f, 0xa458856f, 0x2c74d296, 0x3b2550d1, 0x2976ea8f, 0x80000001,
853     0x40ef217f, 0x06c46008, 0xd0066868, 0x552e4f40, 0xac300a85, 0x3c81ccca, 0x7515e406, 0x80000000,
854     0x40858be0, 0xb77d2012, 0xfc1b08bf, 0x744dad64, 0xedb47c11, 0x29a53990, 0x196ed297, 0x80000001,
855     0x89f63cdd, 0x501b4107, 0x1802d01e, 0xbf019a0d, 0xd21ee166, 0x0000000a, 0x00000000, 0x50000000,
856     0xc080903a, 0x268b800f, 0xdc0fc885, 0x3e32e532, 0xff2ee709, 0xee63170b, 0xf4aa954e, 0x80000000,
857     0x003089ac, 0xd55d8006, 0x58085848, 0xc5269720, 0x326d3a85, 0xce62332a, 0xd61e670e, 0x80000000,
858     0x80fd1693, 0xf7818015, 0x141558b0, 0xa83d774e, 0x9ef1c38b, 0x16a3868d, 0x04aab57f, 0x80000001,
859     0xb89c78a5, 0x46d81a72, 0xe07881bc, 0x823fecf6, 0x70659812, 0x72b3a3eb, 0xa3e1d935, 0x80000000,
860     0x1e21d472, 0xcc824b45, 0xb5e6d4d5, 0xd5b1ddac, 0x7037dcc9, 0x268a99f8, 0x694b30df, 0x80000001,
861     0xcfde3d4c, 0x2979c481, 0x58e91ae3, 0x5973a757, 0xb72e6527, 0x9b461430, 0x1d7eb786, 0x80000001,
862     0x23abdf3e, 0xdcb54d55, 0x3dec84ec, 0x15c069bd, 0xd354cc53, 0xfad13ce4, 0x2ce4a912, 0x80000000,
863     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
864     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
865     0x16119827, 0x07572c0c, 0xde23eb4b, 0xbb5072c2, 0x11afd50e, 0x000839d3, 0x00000000, 0x40000000,
866     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
867     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
868     0xcb8b2ffa, 0x3c3682fe, 0x111a4b87, 0xa6b7b1ca, 0xeabc0e4c, 0x8f7bfb7a, 0x848763ff, 0x80000001,
869     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
870     0x007c069c, 0xb7272016, 0xf01cb0aa, 0xb04c8f5f, 0x40f6d614, 0x192696f2, 0xedb2931f, 0x80000000,
871     0xccd0acbb, 0x10ed838c, 0x9c3008d8, 0x840d2230, 0x7da8456b, 0x0000000f, 0x00000000, 0x50000000,
872     0x005d8a94, 0x95bda00c, 0x9414407c, 0x973e1945, 0xc0b2188d, 0x10741b8e, 0x0142b177, 0x80000001,
873     0x0012832e, 0x4452e005, 0x8008b841, 0xca24c90d, 0x88298185, 0x7cf20ca9, 0xbdae3aa6, 0x80000000,
874     0x41c71655, 0x5831803b, 0x70432947, 0xa1582970, 0x37b3bf97, 0x3dc4610f, 0x1952dbaf, 0x80000001,
875     0xb93f7968, 0xb9ad3adc, 0x10c392a9, 0xcc82a967, 0x0533adb0, 0xbc18bd55, 0x3baadbde, 0x80000001,
876     0x6102d6cd, 0xeb8dcd86, 0x3d7bfc21, 0xbe9a6395, 0x84369abc, 0x06f933b6, 0x52231a47, 0x80000001,
877     0xd0bbc019, 0x392ee4b3, 0xa0d78ab4, 0xe66e054b, 0xecadb224, 0x8065c50f, 0x0f8aa1b6, 0x80000001,
878     0x2fedeedb, 0xfe39f4c7, 0xc2b4264d, 0x4dca83c7, 0x85d58659, 0x41413a24, 0x3220c15b, 0x80000000,
879     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
880     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
881     0x20004000, 0x08001000, 0x02000400, 0x00800100, 0x00300040, 0x00040010, 0x00000000, 0x40000000,
882     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
883     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
884     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
885     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
886     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
887     0x5555d555, 0x55557555, 0x55555d55, 0x00555755, 0x00200060, 0x00000008, 0x00000000, 0x50000000,
888     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
889     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
890     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
891     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
892     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
893     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
894     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
895     0xf66ff050, 0x48b11753, 0xabdd7fd3, 0x00b171d6, 0x00000000, 0x00000000, 0x00000000, 0x20000000,
896     0x515aab47, 0xe322076d, 0x347b2948, 0x14000028, 0x9421f3e5, 0x1215734e, 0x37b0bbfa, 0x10000000,
897     0x3a22f62d, 0x7c03dba7, 0x00000415, 0xc2000000, 0x353e65fd, 0xcb8d83fe, 0x00000004, 0x10000000,
898     0x92b969ed, 0x230d478b, 0x3069812b, 0x6b00001d, 0x2793e734, 0x47c34ec8, 0x244074c9, 0x10000000,
899     0x7a9676ba, 0x0c729b86, 0x01983500, 0x0f000000, 0xb77e6b7e, 0x4a4e891e, 0x0002173e, 0x10000000,
900     0x02ed06cc, 0x9084e13c, 0xe0133834, 0x3e000005, 0xd292842c, 0x3ff32f47, 0x22747661, 0x10000000,
901     0x7c9b7aaa, 0x5d8d1d88, 0xf6125db7, 0x9e00007e, 0x143ee97e, 0x389ea71f, 0xabb6495e, 0x10000000,
902     0x22d5e919, 0xd5e88edc, 0x9cc6aa37, 0xa9000036, 0xc0cd9772, 0xdd925545, 0x11f84a30, 0x10000000,
903     0xb85873ef, 0x6b619a1a, 0x6992bc84, 0xc41c106d, 0x983b657b, 0x325d7fdc, 0x6965ca4d, 0x10001732,
904     0x18c639d3, 0xe44b4a4a, 0x28887195, 0x2a000025, 0x3902cf86, 0x3af08821, 0x06f81730, 0x10000000,
905     0x385075c0, 0x5b4559ac, 0x75d61496, 0x9a220c94, 0x00000006, 0x00000000, 0x00000000, 0x00000000,
906     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
907     0xf884f520, 0x1adcf91f, 0x35b32460, 0xd32f8c96, 0x00035d8d, 0x00000000, 0x00000000, 0x00000000,
908     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
909     0xe615547d, 0x847e4e2f, 0x1f62c738, 0x0065ab5f, 0x00000000, 0x00000000, 0x00000000, 0x20000000,
910     0x2e4a0c52, 0x7675d361, 0x38feabab, 0x66dfd221, 0x000de3c1, 0x00080010, 0x00000000, 0x30000000,
911     0xe028cb64, 0xf3bdec1d, 0x000000d9, 0x2a000000, 0xd4754172, 0xbd47d115, 0x00000001, 0x10000000,
912     0xf9b1032b, 0x1726b51b, 0x38c2c315, 0xf5e82c0c, 0x000edec6, 0x00080010, 0x00000000, 0x30000000,
913     0x9e8d4536, 0x43d94b17, 0x003fd120, 0x3e000000, 0x0173b770, 0xd228af56, 0x000085aa, 0x10000000,
914     0xab1e0195, 0x641b6d5b, 0x5c8b4208, 0xb6e38009, 0x000ba0c2, 0x00080010, 0x00000000, 0x30000000,
915     0xe0454ac5, 0x44126c4c, 0x2449892d, 0x7d00000e, 0x93ecafe7, 0x2ac4b091, 0x07c04719, 0x10000000,
916     0x78840833, 0xa6c6f49c, 0x79277b2b, 0xe1d7f816, 0xfd886636, 0x0005c15c, 0x00000000, 0x30000000,
917     0x250f5306, 0x75ddceee, 0x30a8720d, 0x550ba633, 0xd92d3b66, 0xe5c557d0, 0x0e783c98, 0x10000078,
918     0xb9c89063, 0xb350ee9d, 0xf49a417c, 0x00800005, 0x00200040, 0x00080010, 0x00000000, 0x30000000,
919     0x2327d111, 0x253b8cdf, 0x70d96216, 0x8e1bba55, 0x00000002, 0x00000000, 0x00000000, 0x00000000,
920     0x20004000, 0x019fb000, 0x020c0400, 0x806d0134, 0x2026c044, 0x0000000f, 0x00000000, 0x30000000,
921     0x67a75a97, 0x35de4ead, 0x9d2a8a9d, 0x0d38ea7f, 0x0001641b, 0x00000000, 0x00000000, 0x00000000,
922     0xd7f035d9, 0x08001176, 0x02000400, 0x00800100, 0x4c607b40, 0x00038b6a, 0x00000000, 0x40000000,
923     0x01001431, 0x57c4e04d, 0xc43e513f, 0x3c711d6a, 0x46fa0a23, 0x81b91d37, 0x67174757, 0x80000001,
924     0x0189196c, 0xd87b6070, 0xc8342124, 0x0869df67, 0x98f9a19f, 0xa3887fd6, 0x8ad778f7, 0x80000001,
925     0x41ed23b3, 0x5897603c, 0x482d3939, 0x0a5a1f61, 0x7df37615, 0x33b57951, 0x3a6b012f, 0x80000001,
926     0x01788eb3, 0x275e605e, 0x303b893d, 0x4d786970, 0xa93b4ea5, 0x0009be58, 0x80020006, 0x80000000,
927     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
928     0x43e53184, 0x505d8206, 0x1814c866, 0x400ed440, 0xdaa04edd, 0x0000000b, 0x00000000, 0x50000000,
929     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
930     0xc3e5aef7, 0xb89400a8, 0x603b995a, 0xbd5cef34, 0xc668019b, 0x2d54874d, 0xb03dddbd, 0x80000000,
931     0x017b9efd, 0xb7f06044, 0xcc25290f, 0xe657ed54, 0x71b09b94, 0xaf453610, 0x074aa986, 0x80000001,
932     0xb70af732, 0x48949945, 0xcd2bbb0c, 0xdd3906e1, 0xdb64d110, 0x8bc361ca, 0xa855e815, 0x80000000,
933     0x1431440d, 0x0b4e4649, 0xe16563ea, 0xf5a01b98, 0xcc369abd, 0x15c962b6, 0x4d930bff, 0x80000001,
934     0x14fec822, 0x5ab52643, 0xd52c1392, 0xba850177, 0xbe31482e, 0xadb6f212, 0x1d7abd0e, 0x80000001,
935     0x656162b5, 0x7cfe4dd9, 0x4a0bed36, 0x0cc32fc1, 0x6d629c54, 0x8e64180b, 0x41dce7f3, 0x80000000,
936     0x5608b53d, 0xf5ca4d7c, 0x02000356, 0x00800100, 0x25205540, 0x00036aca, 0x00000000, 0x40000000,
937     0x404a8b4e, 0x15716011, 0x8411b86a, 0xc03eab3c, 0xfd73bb8e, 0x3524e48f, 0x1d7ede17, 0x80000001,
938     0x40a00fa0, 0xf660e023, 0x30175889, 0xc447b74b, 0x51b53211, 0x66458751, 0x4d032097, 0x80000001,
939     0xc0f51776, 0xc7064021, 0xd41da8c4, 0xcd489b55, 0xce73950f, 0x35049e6f, 0x230ee317, 0x80000001,
940     0x00478bed, 0xd5c4400e, 0x7c0f286d, 0x7a471350, 0x4034420f, 0x29d4d590, 0x0f2acc2f, 0x80000001,
941     0x410015aa, 0x18808034, 0x2c286911, 0x4f5ecb76, 0xef353c96, 0x4895a131, 0x3416ff17, 0x80000001,
942     0x8473b97f, 0xd03c4109, 0x08093825, 0x18049013, 0x5d1e395a, 0x0000000b, 0x00000000, 0x50000000,
943     0xc1441ed5, 0x788fe03b, 0x8c295919, 0xcc5f4d79, 0xecf56496, 0x44e5a691, 0x3166fb5f, 0x80000001,
944     0x005211d7, 0xa5b9e011, 0x6c09c052, 0xf5333731, 0x11efe088, 0xcbe3496d, 0xd9ca76be, 0x80000000,
945     0x406195bc, 0x8652c011, 0x100db879, 0xa73bc148, 0x63f2568a, 0x1583c62e, 0x047ab9b7, 0x80000001,
946     0x7714f70b, 0xd841b95d, 0x7117a2cd, 0xca37fce0, 0x8924058f, 0x6533344a, 0x9d01cf7d, 0x80000000,
947     0x5664487b, 0x1b80674c, 0x1580cc23, 0xf5a4259c, 0x0776aac0, 0x11399ed7, 0x54df159f, 0x80000001,
948     0x50213ea8, 0xb9b8647c, 0x90e862f5, 0x6f785f62, 0x692f9aa8, 0x99d640b1, 0x1702b22e, 0x80000001,
949     0x63675f97, 0xbcb4cd02, 0x71f01cf9, 0x06bf8bbc, 0xe05fb652, 0xf4540caa, 0x3070af92, 0x80000000,
950     0xd6013287, 0xf61aaeec, 0x6926fb84, 0x008000b0, 0xb0a3cd40, 0x00043ceb, 0x00000000, 0x40000000,
951     0x40268656, 0x44b7c007, 0xa40a2041, 0x192f1d28, 0xfd30aa09, 0x0ec3662c, 0xf8aea467, 0x80000000,
952     0x40590ae3, 0xd601e012, 0xa412d070, 0xdd47cb4c, 0xb8347211, 0x429538f0, 0x2eaaf31f, 0x80000001,
953     0x41b999d7, 0x48a8403c, 0xc8371133, 0x8a5f5977, 0x4135fc18, 0x5b45fbd2, 0x45af1397, 0x80000001,
954     0x001606da, 0x34766005, 0x94046029, 0x55245b19, 0x41af4f85, 0xe222954b, 0xd616709e, 0x80000000,
955     0xc0438ad9, 0x164aa00b, 0xec11b87e, 0x9b431151, 0x7533760d, 0x2c04644f, 0x13cacf3f, 0x80000001,
956     0x072dcdca, 0x501a407c, 0x38013806, 0xb8016e07, 0x6bdd8ed9, 0x0000000b, 0x00000000, 0x50000000,
957     0x004c10cf, 0x264ec00e, 0x64106081, 0xd9445154, 0x9fb3b50d, 0x35447c4f, 0x1d4eddef, 0x80000001,
958     0x00198ab9, 0x04cc8005, 0xd804702e, 0x0f25d120, 0x2c6f4705, 0xd1225ecb, 0xc8c65d7e, 0x80000000,
959     0xc0841461, 0xa70f4010, 0x7414e0a9, 0x66490960, 0x8533d90e, 0x27a4528f, 0x0ddac8f7, 0x80000001,
960     0x3849783e, 0xd8161a46, 0x9cf4f29a, 0x3f444efd, 0x18e70a14, 0x9d93dbac, 0xb161f8e5, 0x80000000,
961     0xda7eceb3, 0x3c01e971, 0x59c0f48d, 0x88adf7a7, 0xf477ba47, 0x289a4577, 0x66cb2d17, 0x80000001,
962     0xce53bb04, 0x695f43c3, 0xecd372c1, 0x66738f59, 0x0faf2e26, 0xa1961af1, 0x1bf2b82e, 0x80000001,
963     0xa52b61fa, 0x2ce86e08, 0x6e0d252a, 0xacc4dbc2, 0x38936ed5, 0x9301bdc5, 0x1ffc84f2, 0x80000000,
964     0x95cca4f0, 0xe6be6fdc, 0x25b05398, 0x487bce85, 0x8fae583d, 0x00070911, 0x00000000, 0x40000000,
965     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
966     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
967     0x0734ad1d, 0x2a8b6120, 0x38834a32, 0x3971178e, 0x06b67321, 0x89e6aab3, 0x78b753e7, 0x80000001,
968     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
969     0x80790afe, 0xa8204013, 0xe82378ec, 0x28591f72, 0x8df56e95, 0x48159d31, 0x3256f8d7, 0x80000001,
970     0xda4df507, 0xe012408c, 0x5801301a, 0x9801300f, 0xd4e9fb6e, 0x00000010, 0x00000000, 0x50000000,
971     0x80538c9d, 0xf7266009, 0x2811b894, 0xe443cd5d, 0xec735e0c, 0x4664114e, 0x2c96f19f, 0x80000001,
972     0x001a8740, 0x35e8c005, 0x8c087857, 0x3b2fe13c, 0xdaf04307, 0xf792accb, 0xe5f288d6, 0x80000000,
973     0x413c17e5, 0x28db401e, 0xd029091a, 0xfd59b377, 0x07750894, 0x58d54111, 0x422b0f67, 0x80000001,
974     0x3938f93e, 0x3a3cbaee, 0x953a5b84, 0x2f72ed4d, 0x98ad9b29, 0x28d61db0, 0xec1e5f9e, 0x80000000,
975     0x614d5905, 0x2c22ed0a, 0x75c3cc9a, 0xb0aaefa4, 0x86f707c4, 0x1149e457, 0x576718e7, 0x80000001,
976     0x9160c0d7, 0x69bd84f5, 0x40f23301, 0x3a789960, 0x4e2f5929, 0xc5364a91, 0x330ad9f6, 0x80000001,
977     0x29e5e7a7, 0x8d7df0fa, 0x7e58bda4, 0x63d2e5d1, 0x649694df, 0x3a518705, 0x331cc173, 0x80000000,
978     0x9f4f968a, 0x56c2ce94, 0x2db9a33c, 0x7e84c0f1, 0x00300027, 0x00040010, 0x00000000, 0x40000000,
979     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
980     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
981     0x973f494e, 0x0ce72731, 0x1999b453, 0x6fa35dba, 0xe57a67bd, 0xac09e157, 0x9c27849f, 0x80000001,
982     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
983     0x01020b2c, 0xc77e602e, 0x7c2548e1, 0x7a52a965, 0xb8748513, 0x502532b0, 0x2fd6f13f, 0x80000001,
984     0xf9657c59, 0xe06b61ee, 0xd0006012, 0xf101fe1d, 0x2ef1c7f5, 0x00000015, 0x00000000, 0x50000000,
985     0xc0640a19, 0xd6f4000d, 0x681678a0, 0x273fc554, 0x42f2698c, 0x24c3ae2e, 0x0e52c3d7, 0x80000001,
986     0x001003ef, 0x05b9e005, 0xa006f05a, 0x422f293b, 0xc4304606, 0xf102756b, 0xe0928306, 0x80000000,
987     0x42fc9f70, 0x49dae04d, 0xcc5781cf, 0x8471758f, 0xa7762fa0, 0x62764a72, 0x4aaf1bc7, 0x80000001,
988     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
989     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
990     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
991     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
992     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
993     0x01a9961d, 0x372f0054, 0xa030e8f2, 0x74588d60, 0x63f6e617, 0x6c067a53, 0x3ca32777, 0x80000001,
994     0x9a063186, 0x08000f1e, 0x02000400, 0x00800100, 0x12de0740, 0x00026128, 0x00000000, 0x40000000,
995     0xc13116b0, 0xb6e78026, 0x1c1708ac, 0xb850ad60, 0xb6b55091, 0x35d57e91, 0xf4aeaf8f, 0x80000000,
996     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
997     0x00e39b75, 0x578f0017, 0x841118a0, 0x383da54e, 0xa6726d8b, 0xf413d86e, 0xe5a68f66, 0x80000000,
998     0x00a413d0, 0x16380013, 0x100a5064, 0xe6594778, 0x8474f110, 0x00055bb1, 0x80020006, 0x80000000,
999     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1000     0x03449586, 0xd01220f1, 0xc807803e, 0xc8020c14, 0xbc14ec55, 0x00000005, 0x00000000, 0x50000000,
1001     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1002     0x40e09b72, 0x46736018, 0xec09d064, 0xdd31e72e, 0x09ac4587, 0xc072f3cb, 0x5cdd99f5, 0x80000000,
1003     0xc07b9318, 0x46b4400f, 0xb00b106e, 0xd0322f3b, 0x856fd987, 0x9d62ecac, 0xad5a35fe, 0x80000000,
1004     0x32a971ed, 0x856d1618, 0xd050413c, 0xd125eab2, 0x421e2888, 0xb971d767, 0x693d63dc, 0x80000000,
1005     0xd24241ef, 0x3a5ae573, 0x8d161354, 0x7c8c497e, 0x3d735032, 0xd5d7eb54, 0x2a4ed4d6, 0x80000001,
1006     0x0a11318b, 0x18844249, 0x68830a0f, 0x1667e147, 0xd36c099f, 0x1f73e82d, 0xc27e3916, 0x80000000,
1007     0x9df7d86c, 0x8bcf8a2f, 0x099a7c55, 0xe5a657a7, 0xeb10e63f, 0x2d30a4c2, 0x1264600a, 0x80000000,
1008     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1009     0xc0869232, 0x75774018, 0xa4178872, 0xc93e1d38, 0xa1f3378f, 0x1bf4bfcf, 0xf8feb4df, 0x80000000,
1010     0xd7a42fc8, 0x26a9abdb, 0x0200045f, 0x00800100, 0x5763cfc0, 0x0003d2cb, 0x00000000, 0x40000000,
1011     0x006c11fd, 0x3535600a, 0x60098051, 0x41390132, 0xc131bc8a, 0xb873908d, 0xb8964b4e, 0x80000000,
1012     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1013     0xc0cd9aa6, 0xc743c016, 0x88102090, 0x883b9549, 0xe0b2e00b, 0xf7a3ff0e, 0xe992937e, 0x80000000,
1014     0x00449110, 0xf5350006, 0x2c05283c, 0x82306b2c, 0x9af0dd87, 0xcf72f9ac, 0xb43a4996, 0x80000000,
1015     0xc06e8ecb, 0x16e0e00f, 0x6410888b, 0x9a43eb55, 0x3473708d, 0x11543e6f, 0xfc5ab907, 0x80000000,
1016     0x43c31614, 0x801540c7, 0xf406002a, 0xf800d00a, 0xd594d0d4, 0x00000005, 0x00000000, 0x50000000,
1017     0xc096970a, 0x16b3e012, 0xb80d2879, 0xc03b0b47, 0x67728c0a, 0xeee3cece, 0xd7427dae, 0x80000000,
1018     0x00310c76, 0x94b12006, 0xb404d82f, 0x44200710, 0xec6dd704, 0x8001f249, 0x99220ebe, 0x80000000,
1019     0x40489110, 0xc5aa8005, 0xf0060844, 0x322a092b, 0xbcafeb06, 0xc372a44b, 0xb97e48ce, 0x80000000,
1020     0xb382f339, 0x7527d698, 0xc8531934, 0x832a30bb, 0xc11f010b, 0xc4120c67, 0x6d8d6724, 0x80000000,
1021     0xd59646be, 0x8b27a70d, 0xe95e5be4, 0xc79a0992, 0xbe756aba, 0xd0c8a6d5, 0x34aae1b6, 0x80000001,
1022     0x0a99b252, 0xd860e270, 0x9c939233, 0x95633f44, 0x296d2d9e, 0x2374712e, 0xd4e250be, 0x80000000,
1023     0x5e47d8ca, 0xdbcea9f7, 0xcd84cc59, 0x6ca72ba7, 0x1e94fac4, 0x5c617dc5, 0x182c7132, 0x80000000,
1024     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1025     0x803a117d, 0x564ee005, 0x38062829, 0xe22e7d18, 0xefabdf0d, 0x62920009, 0x92a1e0c6, 0x80000000,
1026     0xd23b29e7, 0x95f6cc77, 0xd98a7ae2, 0x0080010c, 0xaa257fc0, 0x0004ab4c, 0x00000000, 0x40000000,
1027     0xc0520eed, 0xf37ce005, 0xe803d01d, 0x552000da, 0x1eac6f85, 0x532212a9, 0xa63622de, 0x80000000,
1028     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1029     0xc1879a1f, 0x882e2024, 0x481ea8eb, 0xea46ed5b, 0x79f2da0d, 0x0b43f36e, 0xfabaa70f, 0x80000000,
1030     0x4081a283, 0x96452007, 0x0404484f, 0x6334b346, 0x60b24708, 0x8922b18c, 0x822dca36, 0x80000000,
1031     0x80578b13, 0x375f400c, 0xbc132898, 0x1347a15d, 0x2533ce8f, 0x07850f30, 0x05bebb5f, 0x80000001,
1032     0xc4b11c7c, 0x100a2095, 0x1c027812, 0x1f010c11, 0xe419895c, 0x00000007, 0x00000000, 0x50000000,
1033     0x80679127, 0x968b4007, 0xc408f063, 0x8a2bb32f, 0xb7efdf06, 0xda12bf2b, 0xcee66396, 0x80000000,
1034     0x001f0692, 0x24d76005, 0x6405c836, 0x4523cd19, 0x24adde05, 0xa2f2288a, 0xaa522546, 0x80000000,
1035     0x006511c0, 0xe6ac8006, 0x4008d865, 0x6130093c, 0x32f0e187, 0xe2a2df6c, 0xd74a6e9e, 0x80000000,
1036     0x360af5ef, 0x450cb8c3, 0x3c4438ff, 0x452734b9, 0x74e1100a, 0xfec268c8, 0x801d8e1c, 0x80000000,
1037     0xd9164cb8, 0x7beee8b0, 0x39a1ac60, 0x2faa41a0, 0x5e76db45, 0x1b89e357, 0x5a93187f, 0x80000001,
1038     0x4d0ab813, 0x688fe33f, 0xd4a9425b, 0x38601139, 0x2b6b191d, 0x043491ee, 0xd39a3c06, 0x80000000,
1039     0x9f37d818, 0x5bf16b0b, 0x95aabc88, 0x35a8c1a1, 0xc6d2c144, 0xa750dd43, 0x1f84885a, 0x80000000,
1040     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1041     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1042     0xcf59182d, 0xc6550dcc, 0x9acb0b05, 0x6f14150b, 0x13e7e69f, 0x00062a8f, 0x00000000, 0x40000000,
1043     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1044     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1045     0x02959538, 0x09ef8068, 0x8083c20c, 0xd0727b88, 0xfef4f122, 0x1e564851, 0x0f8abd47, 0x80000001,
1046     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1047     0x402702ea, 0xb6edc005, 0x3c13708d, 0x29497150, 0x70b4f990, 0xc6f52e4f, 0xfc0e9a66, 0x80000000,
1048     0x8727a72f, 0x2032c1e9, 0x000468ac, 0x26018423, 0x1d17b3d8, 0x00000007, 0x00000000, 0x50000000,
1049     0x001d0583, 0xa57a0005, 0xf408404f, 0x9427c726, 0x6bae5285, 0xbba23e8a, 0xcf8a5dfe, 0x80000000,
1050     0x000e0194, 0xd3df2005, 0xe006c835, 0x301f2af3, 0x6de7ae04, 0x7eb18bc8, 0xa0ce1f1e, 0x80000000,
1051     0x004c071f, 0x76e0c008, 0x1c10188d, 0x053a114c, 0x0131738a, 0xe7e33b8d, 0xd8ea682e, 0x80000000,
1052     0x750274ca, 0x06347831, 0xf48491c6, 0xdf4d4511, 0x82a6a399, 0x9ca434ac, 0xb195f7fd, 0x80000000,
1053     0xd924cb3f, 0x0b312951, 0x415e23dd, 0x5498718e, 0x39f6cc38, 0xef78f156, 0x3d0f08b6, 0x80000001,
1054     0xcc64b61b, 0xf8378326, 0xf49cb239, 0x7d5f3737, 0xbe6a5b1d, 0x0fd4960d, 0xd70e3ede, 0x80000000,
1055     0x200c5b10, 0x4ca72bba, 0x8dbc1cd7, 0x66ad79a7, 0x1d8de445, 0x7d606d42, 0x1a30726a, 0x80000000,
1056     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1057     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1058     0x20004000, 0x08001000, 0x02000400, 0x00800100, 0x00300040, 0x00040010, 0x00000000, 0x40000000,
1059     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1060     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1061     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1062     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1063     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1064     0x5555d555, 0x55557555, 0x55555d55, 0x00555755, 0x00200060, 0x00000008, 0x00000000, 0x50000000,
1065     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1066     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1067     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1068     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1069     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1070     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1071     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1072     0xae8165cc, 0xa5317199, 0x47bf37b3, 0x00879db5, 0x00000000, 0x00000000, 0x00000000, 0x20000000,
1073     0x515aab47, 0xe322076d, 0x347b2948, 0x14000028, 0x9421f3e5, 0x1215734e, 0x37b0bbfa, 0x10000000,
1074     0xb4d9edf7, 0x195e17c0, 0x0000025a, 0x7c000000, 0x697cad7b, 0xfc5b78dc, 0x00000002, 0x10000000,
1075     0x92b969ed, 0x230d478b, 0x3069812b, 0x6b00001d, 0x2793e734, 0x47c34ec8, 0x244074c9, 0x10000000,
1076     0x3145e75d, 0x78035439, 0x00993a7e, 0xf7000000, 0x1f7b787a, 0x8b7c215c, 0x000108ec, 0x10000000,
1077     0x02ed06cc, 0x9084e13c, 0xe0133834, 0x3e000005, 0xd292842c, 0x3ff32f47, 0x22747661, 0x10000000,
1078     0xf675f270, 0xb9e7f8af, 0xf501437a, 0x8a000030, 0xce7c9efc, 0x32fbdd7c, 0x44854c94, 0x10000000,
1079     0x22d5e919, 0xd5e88edc, 0x9cc6aa37, 0xa9000036, 0xc0cd9772, 0xdd925545, 0x11f84a30, 0x10000000,
1080     0x321beb1c, 0x68399475, 0x08bb3a9a, 0x6b07e626, 0xd7774376, 0xfa6bb6f9, 0x3ae1320b, 0x1000098a,
1081     0x18c639d3, 0xe44b4a4a, 0x28887195, 0x2a000025, 0x3902cf86, 0x3af08821, 0x06f81730, 0x10000000,
1082     0x70bfe8d9, 0x18df7555, 0x610dcb41, 0xc40cb443, 0x00000002, 0x00000000, 0x00000000, 0x00000000,
1083     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1084     0xefb965d6, 0x684dd451, 0x59165312, 0x961ae453, 0x00016706, 0x00000000, 0x00000000, 0x00000000,
1085     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1086     0x157d3389, 0xf17e6691, 0xdeaf8e37, 0x0023bcd2, 0x00000000, 0x00000000, 0x00000000, 0x20000000,
1087     0xf2db96f9, 0xb77bd5e1, 0xc1419453, 0xabeace39, 0x00176dd1, 0x00080010, 0x00000000, 0x30000000,
1088     0x909329ba, 0x1176c59f, 0x00000040, 0xed000000, 0x996ab7e1, 0x4742da4b, 0x00000000, 0x10000000,
1089     0x3c020361, 0xa8dcd8a6, 0x0d0cc40c, 0x46ea3c1b, 0x0018a2d4, 0x00080010, 0x00000000, 0x30000000,
1090     0x0dca216c, 0x5155a465, 0x0016785b, 0xea000000, 0x0be7d35d, 0xaaa315cd, 0x00000990, 0x10000000,
1091     0xaf890102, 0x6434cf16, 0xd47c5a38, 0xc3e52009, 0x0013a94c, 0x00080010, 0x00000000, 0x30000000,
1092     0xcd192107, 0xf14ca447, 0x9c1b3060, 0x33000006, 0x58a60f5c, 0x36a1364b, 0x00e00628, 0x10000000,
1093     0xbbfc0449, 0x57c59487, 0x10fbab73, 0x36dba014, 0x3c8fc041, 0x0008d97e, 0x00000000, 0x30000000,
1094     0x0ff5a5ba, 0x91e4457f, 0x803988a2, 0xf2054415, 0x699d81d8, 0x5b4247e7, 0x05b416d0, 0x10000092,
1095     0x2f8784cd, 0x42600be8, 0x1c55b133, 0x00800005, 0x00200040, 0x00080010, 0x00000000, 0x30000000,
1096     0x92fead9b, 0x727ec6dc, 0x1c5f60e5, 0x2c0f382a, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
1097     0x20004000, 0x03a11000, 0x020c0400, 0x806d0134, 0x2026c044, 0x0000000f, 0x00000000, 0x30000000,
1098     0xd4332fa7, 0xb2e2a707, 0x48787926, 0x9117c833, 0x0000630b, 0x00000000, 0x00000000, 0x00000000,
1099     0x9765b12f, 0x08000c36, 0x02000400, 0x00800100, 0x47dc3ac0, 0x00028c28, 0x00000000, 0x40000000,
1100     0x00958cf1, 0xb7386025, 0x5c2b211a, 0x8062fd55, 0x72f8b099, 0x6ba6e3f4, 0x0a76d43f, 0x80000001,
1101     0xc116110f, 0xf88ac04d, 0xb037e134, 0xf472616d, 0xfffb8aa0, 0xb348a2d7, 0x84df83e7, 0x80000001,
1102     0x80fda026, 0x7952a017, 0xc81ee927, 0x115e7d79, 0xab74e594, 0x1b954071, 0x0a36cab7, 0x80000001,
1103     0x409706a4, 0xc613e021, 0xb418e8c7, 0x1161c357, 0xd5ba8a96, 0x000785f5, 0x80020006, 0x80000000,
1104     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1105     0x4311281f, 0xa0222107, 0x300d7848, 0x6a061425, 0x345fd464, 0x0000000a, 0x00000000, 0x50000000,
1106     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1107     0x81b122b0, 0x96e98038, 0x2c1868c0, 0xbf3dd902, 0xec21358d, 0x24928b29, 0x5228fc2b, 0x80000000,
1108     0x80af1883, 0x2801001b, 0x781530d6, 0xd64f0f5a, 0x3bb0080e, 0xa1b4222f, 0xd4f67356, 0x80000000,
1109     0xf4177515, 0x27a0f6f8, 0x0cbe824e, 0x9c27c0bc, 0x1ce0b009, 0x27b20fc8, 0x781d8c1d, 0x80000000,
1110     0x50fe3e2a, 0x9b0c84d1, 0xf92bdb9f, 0xa59a9596, 0x67b6e5b8, 0x1088d1d6, 0x3feb00df, 0x80000001,
1111     0x4bcab5ad, 0x58cda29e, 0x88818233, 0x595dad4e, 0x59ea869c, 0xc364304e, 0xbdde2b95, 0x80000000,
1112     0x9fe9dbb6, 0xac318a6e, 0x698f946f, 0xdf9f4d9a, 0xeb15a7bb, 0x88b13204, 0x178c7462, 0x80000000,
1113     0x56dfb0f2, 0x1517ed4a, 0x02000314, 0x00800100, 0xc4dc4f40, 0x000261c7, 0x00000000, 0x40000000,
1114     0x004d8734, 0x267bc00f, 0x8014a8a0, 0xa4448550, 0x7772c78d, 0xed23c6ae, 0xd3ca758e, 0x80000000,
1115     0x408f8a27, 0x17988024, 0x2425f0d8, 0xfe598365, 0xffb73c96, 0x5f660d92, 0x369f0d27, 0x80000001,
1116     0x40db1bba, 0x785a2013, 0xa81830dd, 0x1a4a1165, 0x5033768e, 0x0ed41e0f, 0xf5c6a82f, 0x80000000,
1117     0x8046886f, 0xa68ac00b, 0x9c0f0888, 0x1f477b5c, 0xc6f36a8d, 0xddb3dfce, 0xc5da6266, 0x80000000,
1118     0xc092111f, 0x3886c017, 0x5c19f0eb, 0x5e572374, 0xc3745111, 0x1dc4dfd0, 0x03e2bf2f, 0x80000001,
1119     0x435eac2f, 0x7023a0cc, 0x3c067026, 0xb6045214, 0x609ee661, 0x0000000a, 0x00000000, 0x50000000,
1120     0x40981570, 0x88612019, 0xf417e0e1, 0xbc531371, 0xc233d40f, 0x0314458f, 0xebe29c7f, 0x80000000,
1121     0x80450ddc, 0xc667c00c, 0x18099060, 0x95327134, 0x9eadfa07, 0x7fe2968b, 0xa8b6269e, 0x80000000,
1122     0xc0569456, 0x476b200a, 0xf40b8888, 0x9b3df556, 0xc0b21609, 0xe813588d, 0xd1d27386, 0x80000000,
1123     0xb48e74cd, 0xd7a3978c, 0x50d05a57, 0x3c2956c1, 0xf2dfa18a, 0xe3321687, 0x6ed97494, 0x80000000,
1124     0x52c9c34f, 0xcb62e5a1, 0x5155ebe9, 0x939e5d97, 0x5db6423c, 0xf7491156, 0x460b016e, 0x80000001,
1125     0xcac0b3e7, 0x1873c277, 0x0090ba3b, 0xa35f013e, 0x696bf59b, 0x0b04a46e, 0xccba360e, 0x80000000,
1126     0x9d155807, 0xcbd669b7, 0xd583ac41, 0x81a5219d, 0x1c580740, 0x5ed1b346, 0x18a47052, 0x80000000,
1127     0x97e8b21b, 0xa5052b08, 0x55457339, 0x008000c2, 0xd2de93c0, 0x0002c6e8, 0x00000000, 0x40000000,
1128     0x80290460, 0xa5c4c006, 0xf00d7868, 0x1d373d3d, 0x2231bc0a, 0xef232f0d, 0xd94280de, 0x80000000,
1129     0xc07207c1, 0x876f8014, 0x402260ca, 0x61584961, 0xebf6c617, 0x57263552, 0x334b0097, 0x80000001,
1130     0xc1b3223f, 0x98e7e023, 0xbc29292c, 0x865d5d7e, 0xabf5b115, 0x45957f51, 0x24a6ebaf, 0x80000001,
1131     0x001684a3, 0xe5906005, 0xe0079849, 0x5b2fff38, 0x27b17c87, 0xdac2d74c, 0xc5c65fae, 0x80000000,
1132     0x40430a12, 0x6774e007, 0x2c0f909b, 0x9e469f60, 0x31739c0c, 0x0f74110f, 0xf4b2a25f, 0x80000000,
1133     0x4440b1f4, 0xb0156089, 0x1401f00b, 0x3c03c20f, 0xc4defde1, 0x0000000a, 0x00000000, 0x50000000,
1134     0x805c9066, 0xf771e00a, 0x5c1090a2, 0x3e47e761, 0x10f3648d, 0x0bd410af, 0xf602a6f7, 0x80000000,
1135     0x001a881f, 0x057ac005, 0x5404f03a, 0x1d28872c, 0xc0ee9805, 0xa5422d6a, 0xa78a28c6, 0x80000000,
1136     0x00611290, 0xe7782009, 0x400e9899, 0xe0440360, 0x77b31b0b, 0x05e3c48e, 0xea8695ff, 0x80000000,
1137     0xb71bf731, 0x871a1960, 0x98b29a0c, 0x522f54d2, 0x8c62d40c, 0x41a2ba09, 0x8cb9afcd, 0x80000000,
1138     0x163148c5, 0x6bd30725, 0x45960456, 0xeea921a4, 0x96374cc3, 0x273a0477, 0x5dbb2817, 0x80000001,
1139     0x4bbb357d, 0x78ab42ce, 0x78a5fa5b, 0x5064df45, 0x202c951f, 0x40151ecf, 0xeaa26546, 0x80000000,
1140     0x217fddae, 0x4c6d6be5, 0x4dcd6cc5, 0x4bb5b1b0, 0x7093c8cb, 0x55013fc4, 0x16d46b6a, 0x80000000,
1141     0x54552c3e, 0x7617adee, 0x19669321, 0xc46870b5, 0xa7e83f56, 0x0004f10d, 0x00000000, 0x40000000,
1142     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1143     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1144     0x02fd27ac, 0x696e004e, 0xfc34895e, 0x78634582, 0x39f5e818, 0x5b85dc92, 0x3e7f0d2f, 0x80000001,
1145     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1146     0x40638a4a, 0x285d4009, 0x0819b8d1, 0xc6552f71, 0xa674f891, 0x2b64ed90, 0x0e2ecea7, 0x80000001,
1147     0x04809fb9, 0xc0092059, 0x6c018012, 0x9801ea17, 0xb2e41068, 0x0000000c, 0x00000000, 0x50000000,
1148     0x405b108e, 0x67a1a008, 0xa00ee09a, 0x0b443360, 0xbdb3768c, 0x2283e5ce, 0x08c2c07f, 0x80000001,
1149     0x0015059b, 0x15eec005, 0x6c070050, 0x002b5f36, 0xc6af2806, 0xc1023eaa, 0xbbd2448e, 0x80000000,
1150     0xc0d41666, 0x9842c00e, 0xa81818d1, 0x574e116b, 0x90b3fc8f, 0x27b44bef, 0x0a5ac64f, 0x80000001,
1151     0xb703f74c, 0xb8083918, 0xb88c41f6, 0xe04a270a, 0x1c272515, 0x9483c52c, 0xa8a1ec4d, 0x80000000,
1152     0x9987ce33, 0xfbcf88c0, 0x9d843443, 0x61a4379f, 0xd4768e3f, 0x11396f16, 0x4a8f0f0f, 0x80000001,
1153     0xce823be0, 0xe922a3ba, 0xa0c29a9f, 0xa66c534f, 0x0aad9ea2, 0x77a58990, 0x06e295e6, 0x80000001,
1154     0x643a6130, 0x4cb0ed45, 0xd1ec3500, 0x24bce5b9, 0xc61297d0, 0xdc60e3a3, 0x234097e2, 0x80000000,
1155     0xd4d71a30, 0x55fa6cd8, 0xbdf8b3b4, 0x676ba6bf, 0x00300043, 0x00040010, 0x00000000, 0x40000000,
1156     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1157     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1158     0x8b43ba60, 0x4b0482a5, 0x108bea6f, 0x938383a1, 0x51f87a29, 0x7347ca15, 0x61b73a67, 0x80000001,
1159     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1160     0x8061087e, 0x07c7800c, 0xb01c68c9, 0x3c4fe56a, 0xaaf3af91, 0x2d04818f, 0x12c2cacf, 0x80000001,
1161     0x4f37cfba, 0x602fe167, 0xd4006008, 0xd701b824, 0xafaad0ef, 0x00000010, 0x00000000, 0x50000000,
1162     0xc04b8d39, 0x76c6a005, 0x600b787a, 0x21355549, 0xfcf16a08, 0x0bb2fcac, 0xf6329d17, 0x80000000,
1163     0x001004b4, 0x55cac005, 0xe4054048, 0xcf283731, 0x7ceee004, 0xc291ff8a, 0xb95a471e, 0x80000000,
1164     0x81781b10, 0x489f601a, 0x5c26a919, 0x4c52536d, 0xb8341f11, 0x30a4892f, 0x1a9ed96f, 0x80000001,
1165     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1166     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1167     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1168     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1169     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1170     0x015292b2, 0x46b3602e, 0x8c18e0b5, 0xe4520d5d, 0x9ff44d12, 0x90058092, 0x14032807, 0x80000001,
1171     0x9744ac58, 0x08000923, 0x02000400, 0x00800100, 0xb41627c0, 0x00012984, 0x00000000, 0x40000000,
1172     0x808591da, 0xf57c400c, 0x6c06384d, 0xbf3aff52, 0x3b34ec8a, 0xdb733b31, 0xdb6e492e, 0x80000000,
1173     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1174     0x0098164f, 0x4806a00b, 0xc40e589c, 0xe845035e, 0xf033e98b, 0x1fb43acf, 0xda22abe7, 0x80000000,
1175     0xc05e0ff0, 0x14fa0006, 0xf403582b, 0x4c530759, 0x496db711, 0x00024932, 0x80020006, 0x80000000,
1176     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1177     0x8250131b, 0x50050095, 0x94028026, 0x98008408, 0xd014d55b, 0x00000004, 0x00000000, 0x50000000,
1178     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1179     0x00479268, 0x55122005, 0x1c03182b, 0xfb2c4d0f, 0x20dc9883, 0xaab2b946, 0xaaae0006, 0x80000000,
1180     0x00480e9e, 0xd69cc005, 0xb005a84e, 0x1d2daf39, 0xed323b86, 0x1d1281ac, 0x94b2165e, 0x80000000,
1181     0x72c471a1, 0x04a0545f, 0xcc2288a3, 0xa4167082, 0x821a6983, 0xc6e10fe5, 0x6371947c, 0x80000000,
1182     0x8d893972, 0x7a2983a5, 0x68f8c325, 0x0c8ad187, 0x02b4dd2e, 0xcde81e35, 0xf882e406, 0x80000000,
1183     0x486a25dd, 0x68f8016f, 0x0c497a39, 0x5b456d27, 0x99a33311, 0xaab26669, 0x55560006, 0x80000000,
1184     0xda4fd2c6, 0xfc0ee89a, 0xad6434c0, 0xdfaaabaa, 0x31ca8cb2, 0xeb806842, 0x0cf04189, 0x80000000,
1185     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1186     0x80fb8f5a, 0x26616026, 0xc81a80a0, 0xe350ed50, 0x27f59c12, 0xc474c0d2, 0xe9766d7e, 0x80000000,
1187     0x57d8b163, 0xb51d0acd, 0x020003c4, 0x00800100, 0xfd9d9840, 0x00024607, 0x00000000, 0x40000000,
1188     0x809494a4, 0xa5b58008, 0x7406784d, 0x15328339, 0xc9b00b86, 0x863238aa, 0x5979a196, 0x80000000,
1189     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1190     0x40b517ad, 0x77b3200e, 0x2c0f1098, 0xb23bbb4d, 0x9d337a89, 0x56f37fed, 0xc3a27ab6, 0x80000000,
1191     0xc0621397, 0xa5d40005, 0xf8039837, 0x462a4930, 0xff30ed04, 0x3d716bca, 0x70a5c296, 0x80000000,
1192     0x40578dbc, 0x47aa0009, 0x8c0ed090, 0x4b436359, 0xebb33c0d, 0xcbf44a2e, 0xc62e6476, 0x80000000,
1193     0x0328945a, 0xf01000bb, 0x38060829, 0x4e006208, 0x661868de, 0x00000006, 0x00000000, 0x50000000,
1194     0x407d1217, 0x0720a00d, 0x4c0b487c, 0x0539494d, 0xe6b1d609, 0xfe23380d, 0xb83a5ebe, 0x80000000,
1195     0x00150646, 0x24c2e005, 0xcc021822, 0xd21b9f0b, 0xe8edaa82, 0x4f619b09, 0x7939d986, 0x80000000,
1196     0x002b0b22, 0x55eae005, 0xc404b040, 0xa3270736, 0xc2709404, 0xb742358a, 0x8dba2f56, 0x80000000,
1197     0xb1727333, 0x94ca94bf, 0xf03fb107, 0x0f1dee9c, 0x4b1bee87, 0xc4e18e86, 0x6f3d78bc, 0x80000000,
1198     0x527ec23f, 0x6abe257b, 0x45187b63, 0x4f90a387, 0x5ab407b6, 0xe7e7c1d4, 0x17ced0c6, 0x80000001,
1199     0x4babae97, 0xc8d66317, 0xe880320d, 0xc547af4e, 0x95ae9311, 0xf934d4f1, 0xbf2658c5, 0x80000000,
1200     0xdda45453, 0xabf3aa0b, 0xc1000384, 0x78a32f89, 0xadcf4645, 0xbb60caa3, 0x09a44329, 0x80000000,
1201     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1202     0xc0f59478, 0xd7b82015, 0x28150063, 0xc647af5c, 0x00300012, 0xd174aab0, 0xba31d17d, 0x80000000,
1203     0x4f292720, 0x45770a71, 0xd55a33ab, 0x008000d3, 0xcba11a40, 0x00031109, 0x00000000, 0x40000000,
1204     0x417f13bd, 0xd8a3e026, 0x002220cc, 0x00400150, 0xb6fb6d90, 0x38e4924d, 0x71c9c726, 0x80000000,
1205     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1206     0x80f797e6, 0x7801a010, 0x441208af, 0x4343dd53, 0xcb328a0c, 0xc723990d, 0xd36267fe, 0x80000000,
1207     0xc115907d, 0x35d9801b, 0x101088bb, 0xd4584796, 0x74745d08, 0x00045d31, 0x5555555c, 0x80000000,
1208     0x00760a63, 0xa7d2a00c, 0xa81020a2, 0x00481561, 0x3434b08e, 0xef647f90, 0xf1f2ba96, 0x80000000,
1209     0x446a9897, 0xc005a054, 0x7004e823, 0x6701e012, 0x785c1fe1, 0x00000008, 0x00000000, 0x50000000,
1210     0x00470ccc, 0x66494005, 0xc8079855, 0x6b2c8335, 0x482fb307, 0x65429e6b, 0x8b35ea0e, 0x80000000,
1211     0x001082dd, 0x24ca6005, 0xf004b03a, 0xe420c919, 0x906bc203, 0x4a4191e8, 0x6f25bffe, 0x80000000,
1212     0x00330b76, 0x9670e005, 0x8c063059, 0x6e30e740, 0xb7306486, 0x9d32782b, 0x97b60ed6, 0x80000000,
1213     0x72057290, 0x54293654, 0x683040e8, 0x5f24cca6, 0xd01fc709, 0xd8822367, 0x679d6a4c, 0x80000000,
1214     0x1735cb26, 0x6be6a760, 0x4980e435, 0x049fbf99, 0xd3758bc0, 0xdfb8e315, 0x3e8ef816, 0x80000001,
1215     0x486da860, 0x06b241de, 0x2063a1bb, 0x334c091f, 0x8b679892, 0xf662fccb, 0x666984d4, 0x80000000,
1216     0x1ba2d616, 0x9b06a73e, 0x8937cc06, 0x918db36e, 0x288f3b29, 0xf1f058e2, 0x10b85851, 0x80000000,
1217     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1218     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1219     0x0f459fb8, 0xb453ebc7, 0xc6d552fe, 0xcb12c76c, 0x6764b1b4, 0x0004a8cc, 0x00000000, 0x40000000,
1220     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1221     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1222     0x40f48fa9, 0x0914a018, 0xc425792d, 0x2b4d0b67, 0x88b2948e, 0xca03db8e, 0xd2366506, 0x80000000,
1223     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1224     0x001f042f, 0xf7478005, 0x880d9883, 0xb33e293c, 0x5333ee0d, 0xc4f3edcd, 0xe76658a6, 0x80000000,
1225     0x027790be, 0xc008609a, 0xa4055040, 0x3a00700f, 0x0fd6cf54, 0x00000006, 0x00000000, 0x50000000,
1226     0x001a04c0, 0x754d8005, 0xe804883e, 0xb323af1d, 0x8ead7584, 0x53620809, 0x86dde546, 0x80000000,
1227     0x000800e1, 0xf4244003, 0xa8033029, 0xe81bbf06, 0x55ac1082, 0x4ef15f48, 0x6f31c3fe, 0x80000000,
1228     0x0035869b, 0x56870005, 0xc007e862, 0xc02e2d38, 0x6bafa706, 0xaaf20a2a, 0xa39a1f9e, 0x80000000,
1229     0x719af114, 0x35b4d61e, 0xc860a96d, 0x68205ab3, 0x2a9c1406, 0x5ea12366, 0x58a13414, 0x80000000,
1230     0x51f23de6, 0x1aa065d8, 0x8d02cb5a, 0xaa90ed8c, 0xc3f51132, 0x83679954, 0x0b56a19e, 0x80000001,
1231     0xc6d82b5c, 0x87112115, 0xc454316a, 0x7f4134ff, 0x83a3fa8d, 0xfae24709, 0x818d9514, 0x80000000,
1232     0x19f24eb4, 0x7b76c7ad, 0xd13773f5, 0xdc906197, 0xac49e431, 0xf7b06661, 0x0f505731, 0x80000000,
1233     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1234     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1235     0x20004000, 0x08001000, 0x02000400, 0x00800100, 0x00300040, 0x00040010, 0x00000000, 0x40000000,
1236     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1237     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1238     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1239     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1240     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1241     0x5555d555, 0x55557555, 0x55555d55, 0x00555755, 0x00200060, 0x00000008, 0x00000000, 0x50000000,
1242     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1243     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1244     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1245     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1246     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1247     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1248     0x20006000, 0x0c000800, 0x01000400, 0x00800180, 0x00300020, 0x00040010, 0x80020006, 0x80000000,
1249 };
1250 
1251 
rkv_ver_align(RK_U32 val)1252 static RK_U32 rkv_ver_align(RK_U32 val)
1253 {
1254     return MPP_ALIGN(val, 8);
1255 }
1256 
rkv_len_align(RK_U32 val)1257 static RK_U32 rkv_len_align(RK_U32 val)
1258 {
1259     return (2 * MPP_ALIGN(val, 128));
1260 }
1261 
rkv_len_align_422(RK_U32 val)1262 static RK_U32 rkv_len_align_422(RK_U32 val)
1263 {
1264     return ((5 * MPP_ALIGN(val, 64)) / 2);
1265 }
1266 
vdpu383_setup_scale_origin_bufs(Av1dHalCtx * p_hal,MppFrame mframe)1267 static MPP_RET vdpu383_setup_scale_origin_bufs(Av1dHalCtx *p_hal, MppFrame mframe)
1268 {
1269     Vdpu383Av1dRegCtx *ctx = (Vdpu383Av1dRegCtx *)p_hal->reg_ctx;
1270     /* for 8K FrameBuf scale mode */
1271     size_t origin_buf_size = 0;
1272 
1273     origin_buf_size = mpp_frame_get_buf_size(mframe);
1274 
1275     if (!origin_buf_size) {
1276         mpp_err_f("origin_bufs get buf size failed\n");
1277         return MPP_NOK;
1278     }
1279     if (ctx->origin_bufs) {
1280         hal_bufs_deinit(ctx->origin_bufs);
1281         ctx->origin_bufs = NULL;
1282     }
1283     hal_bufs_init(&ctx->origin_bufs);
1284     if (!ctx->origin_bufs) {
1285         mpp_err_f("origin_bufs init fail\n");
1286         return MPP_ERR_NOMEM;
1287     }
1288     hal_bufs_setup(ctx->origin_bufs, 16, 1, &origin_buf_size);
1289 
1290     return MPP_OK;
1291 }
1292 
1293 
hal_av1d_alloc_res(void * hal)1294 static MPP_RET hal_av1d_alloc_res(void *hal)
1295 {
1296     MPP_RET ret = MPP_OK;
1297     Av1dHalCtx *p_hal = (Av1dHalCtx *)hal;
1298     RK_U32 max_cnt = p_hal->fast_mode ? VDPU_FAST_REG_SET_CNT : 1;
1299     RK_U32 i = 0;
1300     void *cdf_ptr;
1301     INP_CHECK(ret, NULL == p_hal);
1302 
1303     MEM_CHECK(ret, p_hal->reg_ctx = mpp_calloc_size(void, sizeof(Vdpu383Av1dRegCtx)));
1304     Vdpu383Av1dRegCtx *reg_ctx = (Vdpu383Av1dRegCtx *)p_hal->reg_ctx;
1305 
1306     //!< malloc buffers
1307     BUF_CHECK(ret, mpp_buffer_get(p_hal->buf_group, &reg_ctx->bufs, MPP_ALIGN(VDPU383_INFO_BUF_SIZE(max_cnt), SZ_2K)));
1308     mpp_buffer_attach_dev(reg_ctx->bufs, p_hal->dev);
1309     reg_ctx->bufs_fd = mpp_buffer_get_fd(reg_ctx->bufs);
1310     reg_ctx->bufs_ptr = mpp_buffer_get_ptr(reg_ctx->bufs);
1311 
1312 
1313     for (i = 0; i < max_cnt; i++) {
1314         reg_ctx->reg_buf[i].regs = mpp_calloc(Vdpu383Av1dRegSet, 1);
1315         memset(reg_ctx->reg_buf[i].regs, 0, sizeof(Vdpu383Av1dRegSet));
1316         reg_ctx->uncmps_offset[i] = VDPU383_UNCMPS_HEADER_OFFSET(i);
1317     }
1318 
1319     if (!p_hal->fast_mode) {
1320         reg_ctx->regs = reg_ctx->reg_buf[0].regs;
1321         reg_ctx->offset_uncomps = reg_ctx->uncmps_offset[0];
1322     }
1323 
1324     BUF_CHECK(ret, mpp_buffer_get(p_hal->buf_group, &reg_ctx->cdf_rd_def_base, 200 * MPP_ALIGN(sizeof(g_default_prob), 2048)));
1325     mpp_buffer_attach_dev(reg_ctx->cdf_rd_def_base, p_hal->dev);
1326     cdf_ptr = mpp_buffer_get_ptr(reg_ctx->cdf_rd_def_base);
1327     memcpy(cdf_ptr, g_default_prob, sizeof(g_default_prob));
1328     mpp_buffer_sync_end(reg_ctx->cdf_rd_def_base);
1329 
1330 __RETURN:
1331     return ret;
1332 __FAILED:
1333     return ret;
1334 }
1335 
vdpu_av1d_filtermem_release(Vdpu383Av1dRegCtx * ctx)1336 static void vdpu_av1d_filtermem_release(Vdpu383Av1dRegCtx *ctx)
1337 {
1338     BUF_PUT(ctx->filter_mem);
1339 }
1340 
hal_av1d_release_res(void * hal)1341 static void hal_av1d_release_res(void *hal)
1342 {
1343     Av1dHalCtx *p_hal = (Av1dHalCtx *)hal;
1344     Vdpu383Av1dRegCtx *reg_ctx = (Vdpu383Av1dRegCtx *)p_hal->reg_ctx;
1345     RK_U32 i = 0;
1346     RK_U32 max_cnt = p_hal->fast_mode ? MPP_ARRAY_ELEMS(reg_ctx->reg_buf) : 1;
1347 
1348     for (i = 0; i < max_cnt; i++)
1349         MPP_FREE(reg_ctx->reg_buf[i].regs);
1350 
1351     BUF_PUT(reg_ctx->cdf_rd_def_base);
1352     BUF_PUT(reg_ctx->bufs);
1353     for (i = 0; i < max_cnt; i++)
1354         BUF_PUT(reg_ctx->rcb_bufs[i]);
1355 
1356     vdpu_av1d_filtermem_release(reg_ctx);
1357     if (reg_ctx->cdf_segid_bufs) {
1358         hal_bufs_deinit(reg_ctx->cdf_segid_bufs);
1359         reg_ctx->cdf_segid_bufs = NULL;
1360     }
1361     if (reg_ctx->colmv_bufs) {
1362         hal_bufs_deinit(reg_ctx->colmv_bufs);
1363         reg_ctx->colmv_bufs = NULL;
1364     }
1365     if (reg_ctx->origin_bufs) {
1366         hal_bufs_deinit(reg_ctx->origin_bufs);
1367         reg_ctx->origin_bufs = NULL;
1368     }
1369 
1370     MPP_FREE(p_hal->reg_ctx);
1371 }
1372 
vdpu383_av1d_deinit(void * hal)1373 MPP_RET vdpu383_av1d_deinit(void *hal)
1374 {
1375     hal_av1d_release_res(hal);
1376 
1377     return MPP_OK;
1378 }
1379 
vdpu383_av1d_init(void * hal,MppHalCfg * cfg)1380 MPP_RET vdpu383_av1d_init(void *hal, MppHalCfg *cfg)
1381 {
1382     MPP_RET ret = MPP_OK;
1383     Av1dHalCtx *p_hal = (Av1dHalCtx *)hal;
1384     INP_CHECK(ret, NULL == p_hal);
1385     (void) cfg;
1386 
1387     FUN_CHECK(hal_av1d_alloc_res(hal));
1388 
1389     mpp_slots_set_prop(p_hal->slots, SLOTS_HOR_ALIGN, mpp_align_128_odd_plus_64);
1390     mpp_slots_set_prop(p_hal->slots, SLOTS_VER_ALIGN, rkv_ver_align);
1391     mpp_slots_set_prop(p_hal->slots, SLOTS_LEN_ALIGN, rkv_len_align);
1392 
1393 __RETURN:
1394     return MPP_OK;
1395 __FAILED:
1396     vdpu383_av1d_deinit(hal);
1397 
1398     return ret;
1399 }
1400 
1401 #define MAX_FRAME_DISTANCE 31
1402 #define MAX_ACTIVE_REFS AV1_ACTIVE_REFS_EX
1403 
GetRelativeDist(DXVA_PicParams_AV1 * dxva,RK_S32 a,RK_S32 b)1404 static RK_S32 GetRelativeDist(DXVA_PicParams_AV1 *dxva, RK_S32 a, RK_S32 b)
1405 {
1406     if (!dxva->order_hint_bits) return 0;
1407     const RK_S32 bits = dxva->order_hint_bits - 1;
1408 
1409     RK_S32 diff = a - b;
1410     RK_S32 m = 1 << bits;
1411     diff = (diff & (m - 1)) - (diff & m);
1412     return diff;
1413 }
1414 
1415 #undef MAX_FRAME_DISTANCE
1416 
mpp_clip_uintp2(RK_S32 a,RK_S32 p)1417 static RK_U32 mpp_clip_uintp2(RK_S32 a, RK_S32 p)
1418 {
1419     if (a & ~((1 << p) - 1)) return -a >> 31 & ((1 << p) - 1);
1420     else                   return  a;
1421 }
1422 
prepare_uncompress_header(Av1dHalCtx * p_hal,DXVA_PicParams_AV1 * dxva,RK_U64 * data,RK_U32 len)1423 static MPP_RET prepare_uncompress_header(Av1dHalCtx *p_hal, DXVA_PicParams_AV1 *dxva,
1424                                          RK_U64 *data, RK_U32 len)
1425 {
1426     BitputCtx_t bp;
1427     RK_S32 i, j;
1428     (void) p_hal;
1429 
1430     mpp_set_bitput_ctx(&bp, data, len);
1431 
1432     /* sequence header */
1433     mpp_put_bits(&bp, dxva->coding.current_operating_point, 12);
1434     mpp_put_bits(&bp, dxva->coding.use_128x128_superblock, 1);
1435     mpp_put_bits(&bp, dxva->coding.filter_intra, 1);
1436     mpp_put_bits(&bp, dxva->coding.intra_edge_filter, 1);
1437     mpp_put_bits(&bp, dxva->coding.interintra_compound, 1);
1438     mpp_put_bits(&bp, dxva->coding.masked_compound, 1);
1439     mpp_put_bits(&bp, dxva->coding.dual_filter, 1);
1440     mpp_put_bits(&bp, dxva->enable_order_hint, 1);
1441     mpp_put_bits(&bp, dxva->coding.jnt_comp, 1);
1442     mpp_put_bits(&bp, dxva->coding.enable_ref_frame_mvs, 1);
1443     {
1444         RK_S32 order_hint_bits_minus_1 = dxva->order_hint_bits ? (dxva->order_hint_bits - 1) : 0;
1445 
1446         mpp_put_bits(&bp, order_hint_bits_minus_1, 3);
1447     }
1448     {
1449         RK_U32 skip_loop_filter = 0; // TODO: control by user
1450         RK_U32 enable_cdef = !skip_loop_filter && !dxva->coded_lossless;
1451         RK_U32 enable_cdef_y = dxva->cdef.y_strengths[0].primary || dxva->cdef.y_strengths[0].secondary;
1452         RK_U32 enable_cdef_uv = dxva->cdef.uv_strengths[0].primary || dxva->cdef.uv_strengths[0].secondary;
1453 
1454         enable_cdef = enable_cdef && (dxva->cdef.bits || enable_cdef_y || enable_cdef_uv);
1455         mpp_put_bits(&bp, enable_cdef, 1);
1456     }
1457     mpp_put_bits(&bp, (dxva->bitdepth > 8) ? (dxva->bitdepth - 8) : 0, 3);
1458     {
1459         RK_U32 yuv_format = 0;
1460 
1461         if (dxva->format.mono_chrome)
1462             yuv_format = 0;  // 400
1463         else if (dxva->format.subsampling_y == 1 && dxva->format.subsampling_y == 1)
1464             yuv_format = 1;  // 420
1465         else if (dxva->format.subsampling_x == 1)
1466             yuv_format = 2;  // 422
1467         else
1468             yuv_format = 3;  // 444
1469 
1470         mpp_put_bits(&bp, yuv_format, 2);
1471     }
1472 
1473     mpp_put_bits(&bp, dxva->film_grain.matrix_coefficients, 8);
1474     mpp_put_bits(&bp, dxva->coding.film_grain_en, 1);
1475 
1476     /* frame uncompresss header */
1477     {
1478         RK_U32 frame_is_intra = dxva->format.frame_type == KEY_FRAME ||
1479                                 dxva->format.frame_type == INTRA_ONLY_FRAME;
1480 
1481         mpp_put_bits(&bp, frame_is_intra, 1);
1482         mpp_put_bits(&bp, dxva->coding.disable_cdf_update, 1);
1483         mpp_put_bits(&bp, dxva->coding.screen_content_tools, 1);
1484         mpp_put_bits(&bp, dxva->coding.integer_mv || frame_is_intra, 1);
1485         mpp_put_bits(&bp, dxva->order_hint, 8);
1486         mpp_put_bits(&bp, dxva->width, 16);
1487         mpp_put_bits(&bp, dxva->height, 16);
1488         mpp_put_bits(&bp, dxva->coding.superres, 1);
1489         mpp_put_bits(&bp, dxva->superres_denom, 5);
1490         mpp_put_bits(&bp, dxva->upscaled_width, 16);
1491         mpp_put_bits(&bp, dxva->coding.high_precision_mv, 1);
1492         mpp_put_bits(&bp, dxva->coding.intrabc, 1);
1493     }
1494 
1495     for (i = 0; i < ALLOWED_REFS_PER_FRAME_EX; i++)
1496         mpp_put_bits(&bp, dxva->ref_frame_valued ? dxva->ref_frame_idx[i] : (RK_U32) - 1, 3);
1497 
1498     mpp_put_bits(&bp, dxva->interp_filter, 3);
1499     mpp_put_bits(&bp, dxva->coding.switchable_motion_mode, 1);
1500     mpp_put_bits(&bp, dxva->coding.use_ref_frame_mvs, 1);
1501 
1502     {
1503         RK_U32 mapped_idx = 0;
1504 
1505         for (i = 0; i < NUM_REF_FRAMES; i++) {
1506             mpp_put_bits(&bp, dxva->frame_refs[i].order_hint, 8);
1507         }
1508         for (i = 0; i < ALLOWED_REFS_PER_FRAME_EX; i++) {
1509             mapped_idx = dxva->ref_frame_idx[i];
1510             mpp_put_bits(&bp, dxva->ref_order_hint[mapped_idx], 8);
1511         }
1512     }
1513 
1514     for (i = 0; i < ALLOWED_REFS_PER_FRAME_EX; ++i) {
1515         if (!dxva->order_hint_bits) {
1516             dxva->ref_frame_sign_bias[i] = 0;
1517         } else {
1518             if (dxva->frame_refs[i].Index >= 0) {
1519                 RK_S32 ref_frame_offset = dxva->frame_refs[dxva->ref_frame_idx[i]].order_hint;
1520                 RK_S32 rel_off = GetRelativeDist(dxva, ref_frame_offset, dxva->order_hint);
1521 
1522                 dxva->ref_frame_sign_bias[i] = (rel_off <= 0) ? 0 : 1;
1523             }
1524         }
1525         mpp_put_bits(&bp, dxva->ref_frame_sign_bias[i], 1);
1526     }
1527 
1528     mpp_put_bits(&bp, dxva->coding.disable_frame_end_update_cdf, 1);
1529 
1530     /* quantization params */
1531     mpp_put_bits(&bp, dxva->quantization.base_qindex, 8);
1532     mpp_put_bits(&bp, dxva->quantization.y_dc_delta_q, 7);
1533     mpp_put_bits(&bp, dxva->quantization.u_dc_delta_q, 7);
1534     mpp_put_bits(&bp, dxva->quantization.u_ac_delta_q, 7);
1535     mpp_put_bits(&bp, dxva->quantization.v_dc_delta_q, 7);
1536     mpp_put_bits(&bp, dxva->quantization.v_ac_delta_q, 7);
1537     mpp_put_bits(&bp, dxva->quantization.using_qmatrix, 1);
1538 
1539     /* segmentation params */
1540     mpp_put_bits(&bp, dxva->segmentation.enabled, 1);
1541     mpp_put_bits(&bp, dxva->segmentation.update_map, 1);
1542     mpp_put_bits(&bp, dxva->segmentation.temporal_update, 1);
1543 
1544     {
1545         RK_U32 mi_rows = MPP_ALIGN(dxva->width, 8) >> MI_SIZE_LOG2;
1546         RK_U32 mi_cols = MPP_ALIGN(dxva->height, 8) >> MI_SIZE_LOG2;
1547         /* index 0: AV1_REF_FRAME_LAST - AV1_REF_FRAME_LAST */
1548         RK_U32 prev_mi_rows = MPP_ALIGN(dxva->frame_refs[0].width, 8) >> MI_SIZE_LOG2;
1549         RK_U32 prev_mi_cols = MPP_ALIGN(dxva->frame_refs[0].height, 8) >> MI_SIZE_LOG2;
1550         RK_U32 use_prev_segmentation_ids  = dxva->segmentation.enabled && dxva->primary_ref_frame &&
1551                                             (mi_rows == prev_mi_rows) &&
1552                                             (mi_cols == prev_mi_cols);
1553 
1554         mpp_put_bits(&bp, use_prev_segmentation_ids, 1);
1555     }
1556 
1557     /* Segmentation data update */
1558     for (i = 0; i < MAX_SEGMENTS; i++)
1559         mpp_put_bits(&bp, dxva->segmentation.feature_mask[i], 8);
1560 
1561     for (i = 0; i < MAX_SEGMENTS; i++) {
1562         mpp_put_bits(&bp, dxva->segmentation.feature_data[i][0], 9);
1563         mpp_put_bits(&bp, dxva->segmentation.feature_data[i][1], 7);
1564         mpp_put_bits(&bp, dxva->segmentation.feature_data[i][2], 7);
1565         mpp_put_bits(&bp, dxva->segmentation.feature_data[i][3], 7);
1566         mpp_put_bits(&bp, dxva->segmentation.feature_data[i][4], 7);
1567         mpp_put_bits(&bp, dxva->segmentation.feature_data[i][5], 3);
1568     }
1569     mpp_put_bits(&bp, dxva->segmentation.last_active, 3);
1570     mpp_put_bits(&bp, dxva->segmentation.preskip, 1);
1571     mpp_put_bits(&bp, dxva->quantization.delta_q_present, 1);
1572     if (dxva->quantization.delta_q_present)
1573         mpp_put_bits(&bp, dxva->quantization.delta_q_res, 2);
1574     else
1575         mpp_put_bits(&bp, 1 << dxva->quantization.delta_q_res, 2);
1576 
1577     /* delta lf params */
1578     mpp_put_bits(&bp, dxva->loop_filter.delta_lf_present, 1);
1579     mpp_put_bits(&bp, 1 << dxva->loop_filter.delta_lf_res, 2);
1580     mpp_put_bits(&bp, dxva->loop_filter.delta_lf_multi, 1);
1581     mpp_put_bits(&bp, dxva->coded_lossless, 1);
1582     for (i = 0; i < MAX_SEGMENTS; ++i) {
1583         RK_S32 qindex, lossless;
1584 
1585         if (dxva->segmentation.feature_mask[i] & 0x1) {
1586             qindex = (dxva->quantization.base_qindex + dxva->segmentation.feature_data[i][SEG_LVL_ALT_Q]);
1587         } else {
1588             qindex = dxva->quantization.base_qindex;
1589         }
1590         qindex = mpp_clip_uintp2(qindex, 8);
1591         lossless = qindex == 0 && dxva->quantization.y_dc_delta_q == 0 &&
1592                    dxva->quantization.u_dc_delta_q == 0 &&
1593                    dxva->quantization.v_dc_delta_q == 0 &&
1594                    dxva->quantization.u_ac_delta_q == 0 &&
1595                    dxva->quantization.v_ac_delta_q == 0;
1596 
1597         mpp_put_bits(&bp, lossless, 1);
1598     }
1599     mpp_put_bits(&bp, dxva->all_lossless, 1);
1600 
1601     /* segmentation dequant */
1602     mpp_put_bits(&bp, dxva->quantization.qm_y, 4);
1603     mpp_put_bits(&bp, dxva->quantization.qm_u, 4);
1604     mpp_put_bits(&bp, dxva->quantization.qm_v, 4);
1605     mpp_put_bits(&bp, dxva->loop_filter.filter_level[0], 6);
1606     mpp_put_bits(&bp, dxva->loop_filter.filter_level[1], 6);
1607     mpp_put_bits(&bp, dxva->loop_filter.filter_level_u, 6);
1608     mpp_put_bits(&bp, dxva->loop_filter.filter_level_v, 6);
1609     mpp_put_bits(&bp, dxva->loop_filter.sharpness_level, 3);
1610     mpp_put_bits(&bp, dxva->loop_filter.mode_ref_delta_enabled, 1);
1611 
1612     for (i = 0; i < NUM_REF_FRAMES; i++)
1613         mpp_put_bits(&bp, dxva->loop_filter.ref_deltas[i], 7);
1614 
1615     for (i = 0; i < MAX_MODE_LF_DELTAS; i++)
1616         mpp_put_bits(&bp, dxva->loop_filter.mode_deltas[i], 7);
1617 
1618     /* cdef params */
1619     mpp_put_bits(&bp, dxva->cdef.damping + 3, 3);
1620     mpp_put_bits(&bp, dxva->cdef.bits, 2);
1621 
1622     for (i = 0; i < 8; i++)
1623         mpp_put_bits(&bp, dxva->cdef.y_strengths[i].primary, 4);
1624 
1625     for (i = 0; i < 8; i++)
1626         mpp_put_bits(&bp, dxva->cdef.uv_strengths[i].primary, 4);
1627 
1628     for (i = 0; i < 8; i++)
1629         mpp_put_bits(&bp, dxva->cdef.y_strengths[i].secondary, 2);
1630 
1631     for (i = 0; i < 8; i++)
1632         mpp_put_bits(&bp, dxva->cdef.uv_strengths[i].secondary, 2);
1633 
1634     {
1635         RK_U32 uses_lr = 0;
1636 
1637         for (i = 0; i < (dxva->format.mono_chrome ? 1 : 3); i++)
1638             uses_lr |= (dxva->loop_filter.frame_restoration_type[i] != AV1_RESTORE_NONE) ? 1 : 0;
1639         mpp_put_bits(&bp, uses_lr, 1);
1640     }
1641     for (i = 0; i < 3; ++i)
1642         mpp_put_bits(&bp, dxva->loop_filter.frame_restoration_type[i], 2);
1643     for (i = 0; i < 2; ++i) // 0:32x32, 1:64x64, 2:128x128, 3:256x256
1644         mpp_put_bits(&bp, dxva->loop_filter.log2_restoration_unit_size[i], 2);
1645 
1646     mpp_put_bits(&bp, dxva->coding.tx_mode, 2);
1647     mpp_put_bits(&bp, dxva->coding.reference_mode, 1);
1648     mpp_put_bits(&bp, dxva->skip_ref0, 3);
1649     mpp_put_bits(&bp, dxva->skip_ref1, 3);
1650     mpp_put_bits(&bp, dxva->coding.skip_mode, 1);
1651     mpp_put_bits(&bp, dxva->coding.warped_motion, 1);
1652     mpp_put_bits(&bp, dxva->coding.reduced_tx_set, 1);
1653 
1654     /* gm_type and gm_params */
1655     for (i = 0; i < ALLOWED_REFS_PER_FRAME_EX; ++i)
1656         mpp_put_bits(&bp, dxva->frame_refs[i].wmtype, 2);
1657 
1658     for (i = 0; i < ALLOWED_REFS_PER_FRAME_EX; ++i)
1659         for (j = 0; j < 6; j++)
1660             mpp_put_bits(&bp, dxva->frame_refs[i].wmmat_val[j], 17);
1661 
1662     /* film_grain_params */
1663     {
1664         mpp_put_bits(&bp, dxva->film_grain.apply_grain, 1);
1665         mpp_put_bits(&bp, dxva->film_grain.grain_seed, 16);
1666         mpp_put_bits(&bp, dxva->film_grain.update_grain, 1);
1667         mpp_put_bits(&bp, dxva->film_grain.num_y_points, 4);
1668 
1669         for (i = 0; i < 14; i++)
1670             mpp_put_bits(&bp, dxva->film_grain.scaling_points_y[i][0], 8);
1671 
1672         for (i = 0; i < 14; i++)
1673             mpp_put_bits(&bp, dxva->film_grain.scaling_points_y[i][1], 8);
1674 
1675         mpp_put_bits(&bp, dxva->film_grain.chroma_scaling_from_luma, 1);
1676         mpp_put_bits(&bp, dxva->film_grain.num_cb_points, 4);
1677 
1678         for (i = 0; i < 10; ++i)
1679             mpp_put_bits(&bp, dxva->film_grain.scaling_points_cb[i][0], 8);
1680 
1681         for (i = 0; i < 10; ++i)
1682             mpp_put_bits(&bp, dxva->film_grain.scaling_points_cb[i][1], 8);
1683 
1684         mpp_put_bits(&bp, dxva->film_grain.num_cr_points, 4);
1685         for (i = 0; i < 10; ++i)
1686             mpp_put_bits(&bp, dxva->film_grain.scaling_points_cr[i][0], 8);
1687 
1688         for (i = 0; i < 10; ++i)
1689             mpp_put_bits(&bp, dxva->film_grain.scaling_points_cr[i][1], 8);
1690 
1691         mpp_put_bits(&bp, dxva->film_grain.scaling_shift_minus8, 2);
1692         mpp_put_bits(&bp, dxva->film_grain.ar_coeff_lag, 2);
1693         for (i = 0; i < 24; ++i)
1694             mpp_put_bits(&bp, dxva->film_grain.ar_coeffs_y[i], 8);
1695 
1696         for (i = 0; i < 25; ++i)
1697             mpp_put_bits(&bp, dxva->film_grain.ar_coeffs_cb[i], 8);
1698 
1699         for (i = 0; i < 25; ++i)
1700             mpp_put_bits(&bp, dxva->film_grain.ar_coeffs_cr[i], 8);
1701 
1702         mpp_put_bits(&bp, dxva->film_grain.ar_coeff_shift_minus6, 2);
1703         mpp_put_bits(&bp, dxva->film_grain.grain_scale_shift, 2);
1704         mpp_put_bits(&bp, dxva->film_grain.cb_mult, 8);
1705         mpp_put_bits(&bp, dxva->film_grain.cb_luma_mult, 8);
1706         mpp_put_bits(&bp, dxva->film_grain.cb_offset, 9);
1707         mpp_put_bits(&bp, dxva->film_grain.cr_mult, 8);
1708         mpp_put_bits(&bp, dxva->film_grain.cr_luma_mult, 8);
1709         mpp_put_bits(&bp, dxva->film_grain.cr_offset, 9);
1710         mpp_put_bits(&bp, dxva->film_grain.overlap_flag, 1);
1711         mpp_put_bits(&bp, dxva->film_grain.clip_to_restricted_range, 1);
1712     }
1713 
1714     /* ref frame info */
1715     for (i = 0; i < NUM_REF_FRAMES; ++i)
1716         mpp_put_bits(&bp, dxva->frame_ref_state[i].upscaled_width, 16);
1717 
1718     for (i = 0; i < NUM_REF_FRAMES; ++i)
1719         mpp_put_bits(&bp, dxva->frame_ref_state[i].frame_height, 16);
1720 
1721     for (i = 0; i < NUM_REF_FRAMES; ++i)
1722         mpp_put_bits(&bp, dxva->frame_ref_state[i].frame_width, 16);
1723 
1724     for (i = 0; i < NUM_REF_FRAMES; ++i)
1725         mpp_put_bits(&bp, dxva->frame_ref_state[i].frame_type, 2);
1726 
1727     for (i = 0; i < NUM_REF_FRAMES; ++i) {
1728         mpp_put_bits(&bp, dxva->frame_refs[i].lst_frame_offset, 8);
1729         mpp_put_bits(&bp, dxva->frame_refs[i].lst2_frame_offset, 8);
1730         mpp_put_bits(&bp, dxva->frame_refs[i].lst3_frame_offset, 8);
1731         mpp_put_bits(&bp, dxva->frame_refs[i].gld_frame_offset, 8);
1732         mpp_put_bits(&bp, dxva->frame_refs[i].bwd_frame_offset, 8);
1733         mpp_put_bits(&bp, dxva->frame_refs[i].alt2_frame_offset, 8);
1734         mpp_put_bits(&bp, dxva->frame_refs[i].alt_frame_offset, 8);
1735     }
1736 
1737     {
1738         RK_U32 mapped_idx = 0;
1739         RK_U32 mapped_frame_width[8] = {0};
1740         RK_U32 mapped_frame_height[8] = {0};
1741 
1742         for (i = 0; i < ALLOWED_REFS_PER_FRAME_EX; i++) {
1743             mapped_idx = dxva->ref_frame_idx[i];
1744             mapped_frame_width[mapped_idx] = dxva->frame_ref_state[mapped_idx].frame_width;
1745             mapped_frame_height[mapped_idx] = dxva->frame_ref_state[mapped_idx].frame_height;
1746         }
1747         for (i = 0; i <= ALLOWED_REFS_PER_FRAME_EX; ++i) {
1748             RK_U32 hor_scale, ver_scale;
1749 
1750             if (dxva->coding.intrabc) {
1751                 hor_scale = dxva->width;
1752                 ver_scale = dxva->height;
1753             } else {
1754                 hor_scale = mapped_frame_width[i];
1755                 ver_scale = mapped_frame_height[i];
1756             }
1757             hor_scale = ((hor_scale << AV1_REF_SCALE_SHIFT) + dxva->width / 2) / dxva->width;
1758             ver_scale = ((ver_scale << AV1_REF_SCALE_SHIFT) + dxva->height / 2) / dxva->height;
1759 
1760             mpp_put_bits(&bp, hor_scale, 16);
1761             mpp_put_bits(&bp, ver_scale, 16);
1762         }
1763     }
1764 
1765     mpp_put_bits(&bp, (dxva->frame_header_size + 7) >> 3, 10);
1766     /* tile info */
1767     mpp_put_bits(&bp, dxva->tiles.cols, 7);
1768     mpp_put_bits(&bp, dxva->tiles.rows, 7);
1769     mpp_put_bits(&bp, dxva->tiles.context_update_id, 12);
1770     mpp_put_bits(&bp, dxva->tiles.tile_sz_mag + 1, 3);
1771     mpp_put_bits(&bp, dxva->tiles.cols * dxva->tiles.rows, 13);
1772     mpp_put_bits(&bp, dxva->tile_cols_log2 + dxva->tile_rows_log2, 12);
1773 
1774     for (i = 0; i < 64; i++)
1775         mpp_put_bits(&bp, dxva->tiles.widths[i], 7);
1776 
1777     for (i = 0; i < 64; i++)
1778         mpp_put_bits(&bp, dxva->tiles.heights[i], 10);
1779 
1780     mpp_put_align(&bp, 128, 0);
1781 
1782     return MPP_OK;
1783 }
1784 
update_size_offset(Vdpu383RcbInfo * info,RK_U32 reg_idx,RK_S32 offset,RK_S32 len,RK_S32 rcb_buf_idx)1785 static RK_S32 update_size_offset(Vdpu383RcbInfo *info, RK_U32 reg_idx,
1786                                  RK_S32 offset, RK_S32 len, RK_S32 rcb_buf_idx)
1787 {
1788     RK_S32 buf_size = 0;
1789 
1790     buf_size = MPP_RCB_BYTES(len);
1791     info[rcb_buf_idx].reg_idx = reg_idx;
1792     info[rcb_buf_idx].offset = offset;
1793     info[rcb_buf_idx].size = buf_size;
1794 
1795     return buf_size;
1796 }
1797 
1798 #define VDPU383_SET_BUF_PROTECT_VAL(buf_p, buf_size, val, set_byte_cnt) \
1799 do { \
1800     RK_U8 *but_p_tmp = (RK_U8 *)buf_p; \
1801     memset(&but_p_tmp[0], val, set_byte_cnt); \
1802     memset(&but_p_tmp[buf_size - set_byte_cnt], val, set_byte_cnt); \
1803 } while (0)
1804 
1805 #define VDPU383_DUMP_BUF_PROTECT_VAL(buf_p, buf_size, dump_byte_cnt) \
1806 do { \
1807     RK_U32 prot_loop; \
1808     RK_U8 *buf_p_tmp = (RK_U8 *)buf_p; \
1809     printf("======> protect buffer begin\n"); \
1810     for (prot_loop = 0; prot_loop < dump_byte_cnt; prot_loop++) { \
1811         if (prot_loop % 32 == 0 && prot_loop != 0) \
1812             printf("\n"); \
1813         printf("0x%02x ", buf_p_tmp[prot_loop]); \
1814     } \
1815     printf("\n"); \
1816     printf("======> protect buffer end\n"); \
1817     for (prot_loop = 0; prot_loop < dump_byte_cnt; prot_loop++) { \
1818         if (prot_loop % 32 == 0 && prot_loop != 0) \
1819             printf("\n"); \
1820         printf("0x%02x ", buf_p_tmp[buf_size - 1 - prot_loop]); \
1821     } \
1822     printf("\n"); \
1823 } while (0)
1824 
1825 #if 0
1826 static void rcb_buf_set_edge(Vdpu383Av1dRegCtx *reg_ctx, MppBuffer buf)
1827 {
1828     RK_U32 loop;
1829     RK_U8 *buf_p = mpp_buffer_get_ptr(buf);
1830 
1831     for (loop = 0; loop < RCB_BUF_COUNT; loop++) {
1832         VDPU383_SET_BUF_PROTECT_VAL(&buf_p[reg_ctx->rcb_buf_info[loop].offset],
1833                                     reg_ctx->rcb_buf_info[loop].size, 0xaa, 128);
1834     }
1835 }
1836 
1837 static void rcb_buf_dump_edge(Vdpu383Av1dRegCtx *reg_ctx, MppBuffer buf)
1838 {
1839     RK_U8 *buf_p = mpp_buffer_get_ptr(buf);
1840     RK_U32 loop;
1841 
1842     for (loop = 0; loop < RCB_BUF_COUNT; loop++) {
1843         // reg_ctx->rcb_buf_info[loop].reg;
1844         // reg_ctx->rcb_buf_info[loop].offset;
1845         // reg_ctx->rcb_buf_info[loop].size;
1846 
1847         printf("======> reg idx:%d\n", reg_ctx->rcb_buf_info[loop].reg);
1848         VDPU383_DUMP_BUF_PROTECT_VAL(&buf_p[reg_ctx->rcb_buf_info[loop].offset],
1849                                      reg_ctx->rcb_buf_info[loop].size, 128);
1850     }
1851 }
1852 #endif
1853 
av1d_refine_rcb_size(Vdpu383RcbInfo * rcb_info,RK_S32 width,RK_S32 height,void * data)1854 static void av1d_refine_rcb_size(Vdpu383RcbInfo *rcb_info,
1855                                  RK_S32 width, RK_S32 height, void* data)
1856 {
1857     RK_U32 rcb_bits = 0;
1858     DXVA_PicParams_AV1 *pic_param = (DXVA_PicParams_AV1*)data;
1859     RK_U32 tile_row_num = pic_param->tiles.rows;
1860     RK_U32 tile_col_num = pic_param->tiles.cols;
1861     RK_U32 bit_depth = pic_param->bitdepth;
1862     RK_U32 sb_size = pic_param->coding.use_128x128_superblock ? 128 : 64;
1863     RK_U32 ext_row_align_size = tile_row_num * 64 * 8;
1864     RK_U32 ext_col_align_size = tile_col_num * 64 * 8;
1865     RK_U32 filterd_row_append = 8192;
1866 
1867     width = MPP_ALIGN(width, sb_size);
1868     height = MPP_ALIGN(height, sb_size);
1869     /* RCB_STRMD_ROW && RCB_STRMD_TILE_ROW*/
1870     rcb_bits = ((width + 7) / 8) * 100;
1871     rcb_info[RCB_STRMD_ROW].size = MPP_RCB_BYTES(rcb_bits);
1872     rcb_info[RCB_STRMD_TILE_ROW].size = 0;
1873 
1874     /* RCB_INTER_ROW && RCB_INTER_TILE_ROW*/
1875     rcb_bits = ((width + 63) / 64) * 2752;
1876     rcb_info[RCB_INTER_ROW].size = MPP_RCB_BYTES(rcb_bits);
1877     rcb_bits += ext_row_align_size;
1878     if (tile_row_num > 1)
1879         rcb_info[RCB_INTER_TILE_ROW].size = MPP_RCB_BYTES(rcb_bits);
1880     else
1881         rcb_info[RCB_INTER_TILE_ROW].size = 0;
1882 
1883     /* RCB_INTRA_ROW && RCB_INTRA_TILE_ROW*/
1884     rcb_bits = MPP_ALIGN(width, 512) * (bit_depth + 2);
1885     rcb_bits = rcb_bits * 3; //TODO:
1886     rcb_info[RCB_INTRA_ROW].size = MPP_RCB_BYTES(rcb_bits);
1887     rcb_bits += ext_row_align_size;
1888     if (tile_row_num > 1)
1889         rcb_info[RCB_INTRA_TILE_ROW].size = MPP_RCB_BYTES(rcb_bits);
1890     else
1891         rcb_info[RCB_INTRA_TILE_ROW].size = 0;
1892 
1893     /* RCB_FILTERD_ROW && RCB_FILTERD_TILE_ROW*/
1894     if (width > 4096)
1895         filterd_row_append = 27648;
1896     rcb_bits = (RK_U32)(MPP_ALIGN(width, 64) * (32 * bit_depth + 10));
1897     rcb_info[RCB_FILTERD_ROW].size = filterd_row_append + MPP_RCB_BYTES(rcb_bits / 2);
1898     rcb_info[RCB_FILTERD_PROTECT_ROW].size = filterd_row_append + MPP_RCB_BYTES(rcb_bits / 2);
1899     rcb_bits += ext_row_align_size;
1900     if (tile_row_num > 1)
1901         rcb_info[RCB_FILTERD_TILE_ROW].size = MPP_RCB_BYTES(rcb_bits);
1902     else
1903         rcb_info[RCB_FILTERD_TILE_ROW].size = 0;
1904 
1905     /* RCB_FILTERD_TILE_COL */
1906     if (tile_col_num > 1) {
1907         rcb_bits = (MPP_ALIGN(height, 64) * (101 * bit_depth + 32)) + ext_col_align_size;
1908         rcb_info[RCB_FILTERD_TILE_COL].size = MPP_RCB_BYTES(rcb_bits);
1909     } else {
1910         rcb_info[RCB_FILTERD_TILE_COL].size = 0;
1911     }
1912 
1913 }
1914 
vdpu383_av1d_rcb_setup(Av1dHalCtx * p_hal,DXVA_PicParams_AV1 * dxva)1915 static void vdpu383_av1d_rcb_setup(Av1dHalCtx *p_hal, DXVA_PicParams_AV1 *dxva)
1916 {
1917     Vdpu383Av1dRegCtx *reg_ctx = (Vdpu383Av1dRegCtx *)p_hal->reg_ctx;
1918     RK_U32 offset = 0;
1919     RK_U32 max_cnt = p_hal->fast_mode ? VDPU_FAST_REG_SET_CNT : 1;
1920     RK_U32 i;
1921 
1922     offset += update_size_offset(reg_ctx->rcb_buf_info, 140, offset, VDPU383_RCB_STRMD_ROW_LEN,             RCB_STRMD_ROW          );
1923     offset += update_size_offset(reg_ctx->rcb_buf_info, 142, offset, VDPU383_RCB_STRMD_TILE_ROW_LEN,        RCB_STRMD_TILE_ROW     );
1924     offset += update_size_offset(reg_ctx->rcb_buf_info, 144, offset, VDPU383_RCB_INTER_ROW_LEN,             RCB_INTER_ROW          );
1925     offset += update_size_offset(reg_ctx->rcb_buf_info, 146, offset, VDPU383_RCB_INTER_TILE_ROW_LEN,        RCB_INTER_TILE_ROW     );
1926     offset += update_size_offset(reg_ctx->rcb_buf_info, 148, offset, VDPU383_RCB_INTRA_ROW_LEN,             RCB_INTRA_ROW          );
1927     offset += update_size_offset(reg_ctx->rcb_buf_info, 150, offset, VDPU383_RCB_INTRA_TILE_ROW_LEN,        RCB_INTRA_TILE_ROW     );
1928     offset += update_size_offset(reg_ctx->rcb_buf_info, 152, offset, VDPU383_RCB_FILTERD_ROW_LEN,           RCB_FILTERD_ROW        );
1929     offset += update_size_offset(reg_ctx->rcb_buf_info, 154, offset, VDPU383_RCB_FILTERD_PROTECT_ROW_LEN,   RCB_FILTERD_PROTECT_ROW);
1930     offset += update_size_offset(reg_ctx->rcb_buf_info, 156, offset, VDPU383_RCB_FILTERD_TILE_ROW_LEN,      RCB_FILTERD_TILE_ROW   );
1931     offset += update_size_offset(reg_ctx->rcb_buf_info, 158, offset, VDPU383_RCB_FILTERD_TILE_COL_LEN,      RCB_FILTERD_TILE_COL   );
1932     offset += update_size_offset(reg_ctx->rcb_buf_info, 160, offset, VDPU383_RCB_FILTERD_AV1_UP_TL_COL_LEN, RCB_FILTERD_AV1_UP_TILE_COL);
1933     reg_ctx->rcb_buf_size = offset;
1934 
1935     av1d_refine_rcb_size(reg_ctx->rcb_buf_info, dxva->width, dxva->height, dxva);
1936 
1937     for (i = 0; i < max_cnt; i++) {
1938         MppBuffer rcb_buf = reg_ctx->rcb_bufs[i];
1939 
1940         if (rcb_buf) {
1941             mpp_buffer_put(rcb_buf);
1942             reg_ctx->rcb_bufs[i] = NULL;
1943         }
1944         mpp_buffer_get(p_hal->buf_group, &rcb_buf, reg_ctx->rcb_buf_size);
1945         reg_ctx->rcb_bufs[i] = rcb_buf;
1946 
1947         // rcb_buf_set_edge(reg_ctx, rcb_buf);
1948         // rcb_buf_dump_edge(reg_ctx, rcb_buf);
1949     }
1950 
1951     return;
1952 }
1953 
vdpu383_av1d_rcb_reg_cfg(Av1dHalCtx * p_hal,MppBuffer buf)1954 static void vdpu383_av1d_rcb_reg_cfg(Av1dHalCtx *p_hal, MppBuffer buf)
1955 {
1956     Vdpu383Av1dRegCtx *reg_ctx = (Vdpu383Av1dRegCtx *)p_hal->reg_ctx;
1957     Vdpu383Av1dRegSet *regs = reg_ctx->regs;
1958     RK_U32 fd = mpp_buffer_get_fd(buf);
1959     RK_U32 i;
1960 
1961     regs->common_addr.reg140_rcb_strmd_row_offset           = fd;
1962     regs->common_addr.reg142_rcb_strmd_tile_row_offset      = fd;
1963     regs->common_addr.reg144_rcb_inter_row_offset           = fd;
1964     regs->common_addr.reg146_rcb_inter_tile_row_offset      = fd;
1965     regs->common_addr.reg148_rcb_intra_row_offset           = fd;
1966     regs->common_addr.reg150_rcb_intra_tile_row_offset      = fd;
1967     regs->common_addr.reg152_rcb_filterd_row_offset         = fd;
1968     regs->common_addr.reg154_rcb_filterd_protect_row_offset = fd;
1969     regs->common_addr.reg156_rcb_filterd_tile_row_offset    = fd;
1970     regs->common_addr.reg158_rcb_filterd_tile_col_offset    = fd;
1971     regs->common_addr.reg160_rcb_filterd_av1_upscale_tile_col_offset = fd;
1972 
1973     regs->common_addr.reg141_rcb_strmd_row_len            = reg_ctx->rcb_buf_info[RCB_STRMD_ROW].size;
1974     regs->common_addr.reg143_rcb_strmd_tile_row_len       = reg_ctx->rcb_buf_info[RCB_STRMD_TILE_ROW].size;
1975     regs->common_addr.reg145_rcb_inter_row_len            = reg_ctx->rcb_buf_info[RCB_INTER_ROW].size;
1976     regs->common_addr.reg147_rcb_inter_tile_row_len       = reg_ctx->rcb_buf_info[RCB_INTER_TILE_ROW].size;
1977     regs->common_addr.reg149_rcb_intra_row_len            = reg_ctx->rcb_buf_info[RCB_INTRA_ROW].size;
1978     regs->common_addr.reg151_rcb_intra_tile_row_len       = reg_ctx->rcb_buf_info[RCB_INTRA_TILE_ROW].size;
1979     regs->common_addr.reg153_rcb_filterd_row_len          = reg_ctx->rcb_buf_info[RCB_FILTERD_ROW].size;
1980     regs->common_addr.reg155_rcb_filterd_protect_row_len  = reg_ctx->rcb_buf_info[RCB_FILTERD_PROTECT_ROW].size;
1981     regs->common_addr.reg157_rcb_filterd_tile_row_len     = reg_ctx->rcb_buf_info[RCB_FILTERD_TILE_ROW].size;
1982     regs->common_addr.reg159_rcb_filterd_tile_col_len     = reg_ctx->rcb_buf_info[RCB_FILTERD_TILE_COL].size;
1983     regs->common_addr.reg161_rcb_filterd_av1_upscale_tile_col_len  = reg_ctx->rcb_buf_info[RCB_FILTERD_AV1_UP_TILE_COL].size;
1984 
1985     for (i = 0; i < RCB_BUF_COUNT; i++)
1986         mpp_dev_set_reg_offset(p_hal->dev, reg_ctx->rcb_buf_info[i].reg_idx, reg_ctx->rcb_buf_info[i].offset);
1987 }
1988 
vdpu383_av1d_colmv_setup(Av1dHalCtx * p_hal,DXVA_PicParams_AV1 * dxva)1989 static MPP_RET vdpu383_av1d_colmv_setup(Av1dHalCtx *p_hal, DXVA_PicParams_AV1 *dxva)
1990 {
1991     MPP_RET ret = MPP_ERR_UNKNOW;
1992     Vdpu383Av1dRegCtx *reg_ctx = (Vdpu383Av1dRegCtx *)p_hal->reg_ctx;
1993     size_t mv_size;
1994 
1995     /* the worst case is the frame is error with whole frame */
1996     mv_size = MPP_ALIGN(dxva->width, 64) / 64 * MPP_ALIGN(dxva->height, 64) / 64 * 1024;
1997     if (reg_ctx->colmv_bufs == NULL || reg_ctx->colmv_size < mv_size) {
1998         if (reg_ctx->colmv_bufs) {
1999             hal_bufs_deinit(reg_ctx->colmv_bufs);
2000             reg_ctx->colmv_bufs = NULL;
2001         }
2002 
2003         hal_bufs_init(&reg_ctx->colmv_bufs);
2004         if (reg_ctx->colmv_bufs == NULL) {
2005             mpp_err_f("colmv bufs init fail");
2006             goto __RETURN;
2007         }
2008         reg_ctx->colmv_size = mv_size;
2009         reg_ctx->colmv_count = mpp_buf_slot_get_count(p_hal->slots);
2010         hal_bufs_setup(reg_ctx->colmv_bufs, reg_ctx->colmv_count, 1, &mv_size);
2011     }
2012 
2013 __RETURN:
2014     return ret;
2015 }
2016 
vdpu383_av1d_cdf_setup(Av1dHalCtx * p_hal,DXVA_PicParams_AV1 * dxva)2017 static MPP_RET vdpu383_av1d_cdf_setup(Av1dHalCtx *p_hal, DXVA_PicParams_AV1 *dxva)
2018 {
2019     MPP_RET ret = MPP_ERR_UNKNOW;
2020     Vdpu383Av1dRegCtx *reg_ctx = (Vdpu383Av1dRegCtx *)p_hal->reg_ctx;
2021     size_t size = 0;
2022     size_t segid_size = (MPP_ALIGN(dxva->width, 128) / 128) * \
2023                         (MPP_ALIGN(dxva->height, 128) / 128) * \
2024                         32 * 16;
2025     size = ALL_CDF_SIZE + segid_size;
2026 
2027     /* the worst case is the frame is error with whole frame */
2028     if (reg_ctx->cdf_segid_bufs == NULL || reg_ctx->cdf_segid_size < size) {
2029         if (reg_ctx->cdf_segid_bufs) {
2030             hal_bufs_deinit(reg_ctx->cdf_segid_bufs);
2031             reg_ctx->cdf_segid_bufs = NULL;
2032         }
2033 
2034         hal_bufs_init(&reg_ctx->cdf_segid_bufs);
2035         if (reg_ctx->cdf_segid_bufs == NULL) {
2036             mpp_err_f("cdf bufs init fail");
2037             goto __RETURN;
2038         }
2039 
2040         reg_ctx->cdf_segid_size = size;
2041         reg_ctx->cdf_segid_count = mpp_buf_slot_get_count(p_hal->slots);
2042         hal_bufs_setup(reg_ctx->cdf_segid_bufs, reg_ctx->cdf_segid_count, 1, &size);
2043     }
2044 
2045 __RETURN:
2046     return ret;
2047 }
2048 
2049 /*
2050  * cdf buf structure:
2051  *
2052  *      base_addr0 +--------------------------+
2053  *      434x128bit |   def_non_coeff_cdf      |
2054  *  base_addr0+433 +--------------------------+
2055  *
2056  *      base_addr1 +--------------------------+
2057  *      354x128bit |     def_coeff_cdf_0      |
2058  *                 |   (base_q_idx <= 20)     |
2059  *                 +--------------------------+
2060  *      354x128bit |     def_coeff_cdf_1      |
2061  *                 | (20 < base_q_idx <= 60)  |
2062  *                 +--------------------------+
2063  *      354x128bit |     def_coeff_cdf_2      |
2064  *                 | (60 < base_q_idx <= 120) |
2065  *                 +--------------------------+
2066  *      354x128bit |     def_coeff_cdf_3      |
2067  *                 |   (base_q_idx > 120)     |
2068  * base_addr1+1415 +--------------------------+
2069  */
2070 
vdpu383_av1d_set_cdf(Av1dHalCtx * p_hal,DXVA_PicParams_AV1 * dxva)2071 static void vdpu383_av1d_set_cdf(Av1dHalCtx *p_hal, DXVA_PicParams_AV1 *dxva)
2072 {
2073     Vdpu383Av1dRegCtx *reg_ctx = (Vdpu383Av1dRegCtx *)p_hal->reg_ctx;
2074     Vdpu383Av1dRegSet *regs = reg_ctx->regs;
2075     RK_U32 coeff_cdf_idx = 0;
2076     RK_U32 mapped_idx = 0;
2077     HalBuf *cdf_buf = NULL;
2078     RK_U32 i = 0;
2079     MppBuffer buf_tmp = NULL;
2080 
2081     /* use para in decoder */
2082 #ifdef DUMP_AV1D_VDPU383_DATAS
2083     {
2084         char *cur_fname = "cabac_cdf_in.dat";
2085         memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path));
2086         sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname);
2087     }
2088 #endif
2089     if (dxva->format.frame_type == AV1_FRAME_KEY)
2090         for (i = 0; i < NUM_REF_FRAMES; i++)
2091             reg_ctx->ref_info_tbl[i].cdf_valid = 0;
2092     /* def coeff cdf idx */
2093     coeff_cdf_idx = dxva->quantization.base_qindex <= 20 ? 0 :
2094                     dxva->quantization.base_qindex <= 60  ? 1 :
2095                     dxva->quantization.base_qindex <= 120 ? 2 : 3;
2096 
2097     if (dxva->format.frame_type == AV1_FRAME_KEY ||
2098         dxva->primary_ref_frame == 7) { /* AV1_PRIMARY_REF_NONE */
2099         regs->av1d_addrs.reg184_av1_noncoef_rd_base = mpp_buffer_get_fd(reg_ctx->cdf_rd_def_base);
2100         regs->av1d_addrs.reg178_av1_coef_rd_base = mpp_buffer_get_fd(reg_ctx->cdf_rd_def_base);
2101 #ifdef DUMP_AV1D_VDPU383_DATAS
2102         {
2103             dump_data_to_file(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(reg_ctx->cdf_rd_def_base),
2104                               8 * NON_COEF_CDF_SIZE, 128, 0, 0);
2105             dump_data_to_file(dump_cur_fname_path, (RK_U8 *)mpp_buffer_get_ptr(reg_ctx->cdf_rd_def_base)
2106                               + NON_COEF_CDF_SIZE + COEF_CDF_SIZE * coeff_cdf_idx,
2107                               8 * COEF_CDF_SIZE, 128, 0, 1);
2108         }
2109 #endif
2110     } else {
2111         mapped_idx = dxva->ref_frame_idx[dxva->primary_ref_frame];
2112 
2113         coeff_cdf_idx = reg_ctx->ref_info_tbl[mapped_idx].coeff_idx;
2114         if (!dxva->coding.disable_frame_end_update_cdf &&
2115             reg_ctx->ref_info_tbl[mapped_idx].cdf_valid &&
2116             dxva->frame_refs[mapped_idx].Index != (CHAR)0xff &&
2117             dxva->frame_refs[mapped_idx].Index != 0x7f) {
2118             cdf_buf = hal_bufs_get_buf(reg_ctx->cdf_segid_bufs, dxva->frame_refs[mapped_idx].Index);
2119             buf_tmp = cdf_buf->buf[0];
2120         } else {
2121             buf_tmp = reg_ctx->cdf_rd_def_base;
2122         }
2123         regs->av1d_addrs.reg184_av1_noncoef_rd_base = mpp_buffer_get_fd(buf_tmp);
2124         regs->av1d_addrs.reg178_av1_coef_rd_base = mpp_buffer_get_fd(buf_tmp);
2125         regs->av1d_addrs.reg181_av1_rd_segid_base = mpp_buffer_get_fd(buf_tmp);
2126 #ifdef DUMP_AV1D_VDPU383_DATAS
2127         {
2128             dump_data_to_file(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(buf_tmp),
2129                               8 * NON_COEF_CDF_SIZE, 128, 0, 0);
2130             dump_data_to_file(dump_cur_fname_path, (RK_U8 *)mpp_buffer_get_ptr(buf_tmp)
2131                               + NON_COEF_CDF_SIZE + COEF_CDF_SIZE * coeff_cdf_idx,
2132                               8 * COEF_CDF_SIZE, 128, 0, 1);
2133         }
2134 #endif
2135     }
2136     cdf_buf = hal_bufs_get_buf(reg_ctx->cdf_segid_bufs, dxva->CurrPic.Index7Bits);
2137     regs->av1d_addrs.reg185_av1_noncoef_wr_base = mpp_buffer_get_fd(cdf_buf->buf[0]);
2138     regs->av1d_addrs.reg179_av1_coef_wr_base = mpp_buffer_get_fd(cdf_buf->buf[0]);
2139     regs->av1d_addrs.reg182_av1_wr_segid_base = mpp_buffer_get_fd(cdf_buf->buf[0]);
2140 
2141     /* byte, 434 x 128 bit = 434 x 16 byte */
2142     mpp_dev_set_reg_offset(p_hal->dev, 178, NON_COEF_CDF_SIZE + COEF_CDF_SIZE * coeff_cdf_idx);
2143     mpp_dev_set_reg_offset(p_hal->dev, 179, NON_COEF_CDF_SIZE);
2144     mpp_dev_set_reg_offset(p_hal->dev, 181, ALL_CDF_SIZE);
2145     mpp_dev_set_reg_offset(p_hal->dev, 182, ALL_CDF_SIZE);
2146 
2147     /* update params sync with "update buffer" */
2148     for (i = 0; i < NUM_REF_FRAMES; i++) {
2149         if (dxva->refresh_frame_flags & (1 << i)) {
2150             if (dxva->coding.disable_frame_end_update_cdf) {
2151                 if (dxva->show_existing_frame && dxva->format.frame_type == AV1_FRAME_KEY)
2152                     reg_ctx->ref_info_tbl[i].coeff_idx
2153                         = reg_ctx->ref_info_tbl[dxva->frame_to_show_map_idx].coeff_idx;
2154                 else
2155                     reg_ctx->ref_info_tbl[i].coeff_idx = coeff_cdf_idx;
2156             } else {
2157                 reg_ctx->ref_info_tbl[i].cdf_valid = 1;
2158                 reg_ctx->ref_info_tbl[i].coeff_idx = 0;
2159             }
2160         }
2161     }
2162 
2163 #ifdef DUMP_AV1D_VDPU383_DATAS
2164     {
2165         char *cur_fname = "cdf_rd_def.dat";
2166         memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path));
2167         sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname);
2168         dump_data_to_file(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(reg_ctx->cdf_rd_def_base),
2169                           (NON_COEF_CDF_SIZE + COEF_CDF_SIZE * 4) * 8, 128, 0, 0);
2170     }
2171 #endif
2172 
2173 }
2174 
vdpu383_av1d_gen_regs(void * hal,HalTaskInfo * task)2175 MPP_RET vdpu383_av1d_gen_regs(void *hal, HalTaskInfo *task)
2176 {
2177     MPP_RET ret = MPP_ERR_UNKNOW;
2178     Av1dHalCtx *p_hal = (Av1dHalCtx *)hal;
2179     Vdpu383Av1dRegCtx *ctx = (Vdpu383Av1dRegCtx *)p_hal->reg_ctx;
2180     Vdpu383Av1dRegSet *regs;
2181     DXVA_PicParams_AV1 *dxva = (DXVA_PicParams_AV1*)task->dec.syntax.data;
2182     RK_U32 i = 0;
2183     HalBuf *origin_buf = NULL;
2184     MppFrame mframe;
2185 
2186     INP_CHECK(ret, NULL == p_hal);
2187 
2188     ctx->refresh_frame_flags = dxva->refresh_frame_flags;
2189 
2190     if (task->dec.flags.parse_err ||
2191         task->dec.flags.ref_err) {
2192         mpp_err_f("parse err %d ref err %d\n",
2193                   task->dec.flags.parse_err, task->dec.flags.ref_err);
2194         goto __RETURN;
2195     }
2196 
2197     mpp_buf_slot_get_prop(p_hal->slots, dxva->CurrPic.Index7Bits, SLOT_FRAME_PTR, &mframe);
2198     if (mpp_frame_get_thumbnail_en(mframe) == MPP_FRAME_THUMBNAIL_ONLY &&
2199         MPP_MAX(dxva->width, dxva->height) > 4096 && ctx->origin_bufs == NULL) {
2200         vdpu383_setup_scale_origin_bufs(p_hal, mframe);
2201     }
2202 
2203     if (p_hal->fast_mode) {
2204         for (i = 0; i <  MPP_ARRAY_ELEMS(ctx->reg_buf); i++) {
2205             if (!ctx->reg_buf[i].valid) {
2206                 task->dec.reg_index = i;
2207                 ctx->regs = ctx->reg_buf[i].regs;
2208                 ctx->reg_buf[i].valid = 1;
2209                 ctx->offset_uncomps = ctx->uncmps_offset[i];
2210                 break;
2211             }
2212         }
2213     }
2214     regs = ctx->regs;
2215     memset(regs, 0, sizeof(*regs));
2216     p_hal->strm_len = (RK_S32)mpp_packet_get_length(task->dec.input_packet);
2217 
2218 #ifdef DUMP_AV1D_VDPU383_DATAS
2219     {
2220         memset(dump_cur_dir, 0, sizeof(dump_cur_dir));
2221         sprintf(dump_cur_dir, "av1/Frame%04d", dump_cur_frame);
2222         if (access(dump_cur_dir, 0)) {
2223             if (mkdir(dump_cur_dir))
2224                 mpp_err_f("error: mkdir %s\n", dump_cur_dir);
2225         }
2226         dump_cur_frame++;
2227     }
2228 #endif
2229 
2230     /* set reg -> ctrl reg */
2231     {
2232         regs->ctrl_regs.reg8_dec_mode          = 4; // av1
2233         regs->ctrl_regs.reg9.fbc_e             = 0;
2234         regs->ctrl_regs.reg9.buf_empty_en      = 0;
2235 
2236         regs->ctrl_regs.reg10.strmd_auto_gating_e    = 1;
2237         regs->ctrl_regs.reg10.inter_auto_gating_e    = 1;
2238         regs->ctrl_regs.reg10.intra_auto_gating_e    = 1;
2239         regs->ctrl_regs.reg10.transd_auto_gating_e   = 1;
2240         regs->ctrl_regs.reg10.recon_auto_gating_e    = 1;
2241         regs->ctrl_regs.reg10.filterd_auto_gating_e  = 1;
2242         regs->ctrl_regs.reg10.bus_auto_gating_e      = 1;
2243         regs->ctrl_regs.reg10.ctrl_auto_gating_e     = 1;
2244         regs->ctrl_regs.reg10.rcb_auto_gating_e      = 1;
2245         regs->ctrl_regs.reg10.err_prc_auto_gating_e  = 1;
2246 
2247         // regs->ctrl_regs.reg11.dec_timeout_dis        = 1;
2248 
2249         regs->ctrl_regs.reg13_core_timeout_threshold  = 0x3fffff;
2250 
2251         regs->ctrl_regs.reg16.error_proc_disable     = 1;
2252         regs->ctrl_regs.reg16.error_spread_disable   = 0;
2253         regs->ctrl_regs.reg16.roi_error_ctu_cal_en   = 0;
2254 
2255         regs->ctrl_regs.reg20_cabac_error_en_lowbits  = 0xffffffdf;
2256         regs->ctrl_regs.reg21_cabac_error_en_highbits = 0x3fffffff;
2257 
2258         regs->ctrl_regs.reg28.axi_perf_work_e = 1;
2259         regs->ctrl_regs.reg28.axi_cnt_type    = 1;
2260         regs->ctrl_regs.reg28.rd_latency_id   = 11;
2261 
2262         regs->ctrl_regs.reg29.addr_align_type     = 1;
2263         regs->ctrl_regs.reg29.ar_cnt_id_type      = 0;
2264         regs->ctrl_regs.reg29.aw_cnt_id_type      = 1;
2265         regs->ctrl_regs.reg29.ar_count_id         = 17;
2266         regs->ctrl_regs.reg29.aw_count_id         = 0;
2267         regs->ctrl_regs.reg29.rd_band_width_mode  = 0;
2268 
2269         regs->ctrl_regs.reg30.axi_wr_qos = 0;
2270         regs->ctrl_regs.reg30.axi_rd_qos = 0;
2271     }
2272 
2273     /* set reg -> pkt data */
2274     {
2275         MppBuffer mbuffer = NULL;
2276 
2277         /* uncompress header data */
2278         prepare_uncompress_header(p_hal, dxva, (RK_U64 *)ctx->header_data, sizeof(ctx->header_data) / 8);
2279         memcpy((char *)ctx->bufs_ptr, (void *)ctx->header_data, sizeof(ctx->header_data));
2280         regs->av1d_paras.reg67_global_len = VDPU383_UNCMPS_HEADER_SIZE / 16; // 128 bit as unit
2281         regs->common_addr.reg131_gbl_base = ctx->bufs_fd;
2282         // mpp_dev_set_reg_offset(p_hal->dev, 131, ctx->offset_uncomps);
2283 #ifdef DUMP_AV1D_VDPU383_DATAS
2284         {
2285             char *cur_fname = "global_cfg.dat";
2286             memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path));
2287             sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname);
2288             dump_data_to_file(dump_cur_fname_path, ctx->bufs_ptr,
2289                               8 * regs->av1d_paras.reg67_global_len * 16, 64, 0, 0);
2290         }
2291 #endif
2292         // input strm
2293         p_hal->strm_len = (RK_S32)mpp_packet_get_length(task->dec.input_packet);
2294         regs->av1d_paras.reg66_stream_len = MPP_ALIGN(p_hal->strm_len + 15, 128);
2295         mpp_buf_slot_get_prop(p_hal->packet_slots, task->dec.input, SLOT_BUFFER, &mbuffer);
2296         regs->common_addr.reg128_strm_base = mpp_buffer_get_fd(mbuffer);
2297         regs->av1d_paras.reg65_strm_start_bit = (ctx->offset_uncomps & 0xf) * 8; // bit start to decode
2298         mpp_dev_set_reg_offset(p_hal->dev, 128, ctx->offset_uncomps & 0xfffffff0);
2299         /* error */
2300         regs->av1d_addrs.reg169_error_ref_base = mpp_buffer_get_fd(mbuffer);
2301 #ifdef DUMP_AV1D_VDPU383_DATAS
2302         {
2303             char *cur_fname = "stream_in.dat";
2304             memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path));
2305             sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname);
2306             dump_data_to_file(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(mbuffer)
2307                               + ctx->offset_uncomps,
2308                               8 * p_hal->strm_len, 128, 0, 0);
2309         }
2310         {
2311             char *cur_fname = "stream_in_no_offset.dat";
2312             memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path));
2313             sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname);
2314             dump_data_to_file(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(mbuffer),
2315                               8 * p_hal->strm_len, 128, 0, 0);
2316         }
2317 #endif
2318     }
2319 
2320     /* set reg -> rcb */
2321     vdpu383_av1d_rcb_setup(p_hal, dxva);
2322     vdpu383_av1d_rcb_reg_cfg(p_hal, p_hal->fast_mode ? ctx->rcb_bufs[task->dec.reg_index] : ctx->rcb_bufs[0]);
2323 
2324     /* set reg -> para (stride, len) */
2325     {
2326         RK_U32 hor_virstride = 0;
2327         RK_U32 ver_virstride = 0;
2328         RK_U32 y_virstride = 0;
2329         RK_U32 uv_virstride = 0;
2330         RK_U32 mapped_idx;
2331 
2332         mpp_buf_slot_get_prop(p_hal->slots, dxva->CurrPic.Index7Bits, SLOT_FRAME_PTR, &mframe);
2333         if (mframe) {
2334             hor_virstride = mpp_frame_get_hor_stride(mframe);
2335             ver_virstride = mpp_frame_get_ver_stride(mframe);
2336             y_virstride = hor_virstride * ver_virstride;
2337             uv_virstride = hor_virstride * ver_virstride / 2;
2338 
2339             if (MPP_FRAME_FMT_IS_FBC(mpp_frame_get_fmt(mframe))) {
2340                 RK_U32 fbd_offset;
2341                 RK_U32 fbc_hdr_stride = mpp_frame_get_fbc_hdr_stride(mframe);
2342                 RK_U32 h = MPP_ALIGN(mpp_frame_get_height(mframe), 64);
2343 
2344                 regs->ctrl_regs.reg9.fbc_e = 1;
2345                 regs->av1d_paras.reg68_hor_virstride = fbc_hdr_stride / 64;
2346                 fbd_offset = regs->av1d_paras.reg68_hor_virstride * h * 4;
2347                 regs->av1d_addrs.reg193_fbc_payload_offset = fbd_offset;
2348             } else if (MPP_FRAME_FMT_IS_TILE(mpp_frame_get_fmt(mframe))) {
2349                 regs->ctrl_regs.reg9.tile_e = 1;
2350                 regs->av1d_paras.reg68_hor_virstride = MPP_ALIGN(hor_virstride * 6, 16) >> 4;
2351                 regs->av1d_paras.reg70_y_virstride = (y_virstride + uv_virstride) >> 4;
2352             } else {
2353                 regs->ctrl_regs.reg9.fbc_e = 0;
2354                 regs->av1d_paras.reg68_hor_virstride = hor_virstride >> 4;
2355                 regs->av1d_paras.reg69_raster_uv_hor_virstride = hor_virstride >> 4;
2356                 regs->av1d_paras.reg70_y_virstride = y_virstride >> 4;
2357             }
2358             /* error */
2359             regs->av1d_paras.reg80_error_ref_hor_virstride = regs->av1d_paras.reg68_hor_virstride;
2360             regs->av1d_paras.reg81_error_ref_raster_uv_hor_virstride = regs->av1d_paras.reg69_raster_uv_hor_virstride;
2361             regs->av1d_paras.reg82_error_ref_virstride = regs->av1d_paras.reg70_y_virstride;
2362         }
2363 
2364         for (i = 0; i < ALLOWED_REFS_PER_FRAME_EX; ++i) {
2365             mapped_idx = dxva->ref_frame_idx[i];
2366             if (dxva->frame_refs[mapped_idx].Index != (CHAR)0xff && dxva->frame_refs[mapped_idx].Index != 0x7f) {
2367                 mpp_buf_slot_get_prop(p_hal->slots, dxva->frame_refs[mapped_idx].Index, SLOT_FRAME_PTR, &mframe);
2368                 if (mframe) {
2369                     hor_virstride = mpp_frame_get_hor_stride(mframe);
2370                     ver_virstride = mpp_frame_get_ver_stride(mframe);
2371                     y_virstride = hor_virstride * ver_virstride;
2372                     if (MPP_FRAME_FMT_IS_FBC(mpp_frame_get_fmt(mframe))) {
2373                         hor_virstride = mpp_frame_get_fbc_hdr_stride(mframe) / 4;
2374                     } else if (MPP_FRAME_FMT_IS_TILE(mpp_frame_get_fmt(mframe))) {
2375                         hor_virstride = MPP_ALIGN(hor_virstride * 6, 16);
2376                         y_virstride += y_virstride / 2;
2377                     }
2378                     SET_REF_HOR_VIRSTRIDE(regs->av1d_paras, mapped_idx, hor_virstride >> 4);
2379                     SET_REF_RASTER_UV_HOR_VIRSTRIDE(regs->av1d_paras, mapped_idx, hor_virstride >> 4);
2380                     SET_REF_VIRSTRIDE(regs->av1d_paras, mapped_idx, y_virstride >> 4);
2381                 }
2382             }
2383         }
2384     }
2385 
2386     /* set reg -> para (ref, fbc, colmv) */
2387     {
2388         MppBuffer mbuffer = NULL;
2389         RK_U32 mapped_idx;
2390         mpp_buf_slot_get_prop(p_hal->slots, task->dec.output, SLOT_FRAME_PTR, &mframe);
2391         mpp_buf_slot_get_prop(p_hal->slots, task->dec.output, SLOT_BUFFER, &mbuffer);
2392         regs->av1d_addrs.reg168_decout_base = mpp_buffer_get_fd(mbuffer);
2393         regs->av1d_addrs.reg192_payload_st_cur_base = mpp_buffer_get_fd(mbuffer);
2394         // VDPU383_SET_BUF_PROTECT_VAL(mpp_buffer_get_ptr(mbuffer), mpp_buffer_get_size(mbuffer), 0xbb, 128);
2395 
2396         for (i = 0; i < ALLOWED_REFS_PER_FRAME_EX; i++) {
2397             mapped_idx = dxva->ref_frame_idx[i];
2398             if (dxva->frame_refs[mapped_idx].Index != (CHAR)0xff && dxva->frame_refs[mapped_idx].Index != 0x7f) {
2399                 mpp_buf_slot_get_prop(p_hal->slots, dxva->frame_refs[mapped_idx].Index, SLOT_BUFFER, &mbuffer);
2400                 if (ctx->origin_bufs && mpp_frame_get_thumbnail_en(mframe) == MPP_FRAME_THUMBNAIL_ONLY) {
2401                     origin_buf = hal_bufs_get_buf(ctx->origin_bufs, dxva->frame_refs[mapped_idx].Index);
2402                     mbuffer = origin_buf->buf[0];
2403                 }
2404                 if (mbuffer) {
2405                     SET_REF_BASE(regs->av1d_addrs, mapped_idx, mpp_buffer_get_fd(mbuffer));
2406                     SET_FBC_PAYLOAD_REF_BASE(regs->av1d_addrs, mapped_idx, mpp_buffer_get_fd(mbuffer));
2407                 }
2408             }
2409         }
2410 
2411         HalBuf *mv_buf = NULL;
2412         vdpu383_av1d_colmv_setup(p_hal, dxva);
2413         mv_buf = hal_bufs_get_buf(ctx->colmv_bufs, dxva->CurrPic.Index7Bits);
2414         regs->av1d_addrs.reg216_colmv_cur_base = mpp_buffer_get_fd(mv_buf->buf[0]);
2415 #ifdef DUMP_AV1D_VDPU383_DATAS
2416         memset(mpp_buffer_get_ptr(mv_buf->buf[0]), 0, mpp_buffer_get_size(mv_buf->buf[0]));
2417 #endif
2418         for (i = 0; i < NUM_REF_FRAMES; i++) {
2419             if (dxva->frame_refs[i].Index != (CHAR)0xff && dxva->frame_refs[i].Index != 0x7f) {
2420                 mv_buf = hal_bufs_get_buf(ctx->colmv_bufs, dxva->frame_refs[i].Index);
2421                 regs->av1d_addrs.reg217_232_colmv_ref_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]);
2422 #ifdef DUMP_AV1D_VDPU383_DATAS
2423                 {
2424                     char *cur_fname = "colmv_ref_frame";
2425                     memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path));
2426                     sprintf(dump_cur_fname_path, "%s/%s%d.dat", dump_cur_dir, cur_fname, i);
2427                     dump_data_to_file(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(mv_buf->buf[0]),
2428                                       8 * mpp_buffer_get_size(mv_buf->buf[0]), 64, 0, 0);
2429                 }
2430 #endif
2431             }
2432         }
2433     }
2434 
2435     {
2436         vdpu383_av1d_cdf_setup(p_hal, dxva);
2437         vdpu383_av1d_set_cdf(p_hal, dxva);
2438     }
2439     mpp_buffer_sync_end(ctx->bufs);
2440 
2441     {
2442         //scale down config
2443         MppBuffer mbuffer = NULL;
2444         RK_S32 fd = -1;
2445         MppFrameThumbnailMode thumbnail_mode;
2446 
2447         mpp_buf_slot_get_prop(p_hal->slots, dxva->CurrPic.Index7Bits, SLOT_BUFFER, &mbuffer);
2448         mpp_buf_slot_get_prop(p_hal->slots, dxva->CurrPic.Index7Bits,
2449                               SLOT_FRAME_PTR, &mframe);
2450         thumbnail_mode = mpp_frame_get_thumbnail_en(mframe);
2451         fd = mpp_buffer_get_fd(mbuffer);
2452 
2453         switch (thumbnail_mode) {
2454         case MPP_FRAME_THUMBNAIL_ONLY:
2455             regs->common_addr.reg133_scale_down_base = fd;
2456             origin_buf = hal_bufs_get_buf(ctx->origin_bufs, dxva->CurrPic.Index7Bits);
2457             fd = mpp_buffer_get_fd(origin_buf->buf[0]);
2458             regs->av1d_addrs.reg168_decout_base = fd;
2459             regs->av1d_addrs.reg192_payload_st_cur_base = fd;
2460             regs->av1d_addrs.reg169_error_ref_base = fd;
2461             vdpu383_setup_down_scale(mframe, p_hal->dev, &regs->ctrl_regs,
2462                                      (void *)&regs->av1d_paras);
2463             break;
2464         case MPP_FRAME_THUMBNAIL_MIXED:
2465             regs->common_addr.reg133_scale_down_base = fd;
2466             vdpu383_setup_down_scale(mframe, p_hal->dev, &regs->ctrl_regs,
2467                                      (void *)&regs->av1d_paras);
2468             break;
2469         case MPP_FRAME_THUMBNAIL_NONE:
2470         default:
2471             regs->ctrl_regs.reg9.scale_down_en = 0;
2472             break;
2473         }
2474     }
2475 
2476 __RETURN:
2477     return ret = MPP_OK;
2478 }
2479 
vdpu383_av1d_start(void * hal,HalTaskInfo * task)2480 MPP_RET vdpu383_av1d_start(void *hal, HalTaskInfo *task)
2481 {
2482     MPP_RET ret = MPP_ERR_UNKNOW;
2483     Av1dHalCtx *p_hal = (Av1dHalCtx *)hal;
2484     INP_CHECK(ret, NULL == p_hal);
2485     if (task->dec.flags.parse_err ||
2486         task->dec.flags.ref_err) {
2487         goto __RETURN;
2488     }
2489 
2490     Vdpu383Av1dRegCtx *reg_ctx = (Vdpu383Av1dRegCtx *)p_hal->reg_ctx;
2491     Vdpu383Av1dRegSet *regs = p_hal->fast_mode ?
2492                               reg_ctx->reg_buf[task->dec.reg_index].regs :
2493                               reg_ctx->regs;
2494     MppDev dev = p_hal->dev;
2495     do {
2496         MppDevRegWrCfg wr_cfg;
2497         MppDevRegRdCfg rd_cfg;
2498 
2499         wr_cfg.reg = &regs->ctrl_regs;
2500         wr_cfg.size = sizeof(regs->ctrl_regs);
2501         wr_cfg.offset = OFFSET_CTRL_REGS;
2502         ret = mpp_dev_ioctl(dev, MPP_DEV_REG_WR, &wr_cfg);
2503         if (ret) {
2504             mpp_err_f("set register write failed %d\n", ret);
2505             break;
2506         }
2507 
2508         wr_cfg.reg = &regs->common_addr;
2509         wr_cfg.size = sizeof(regs->common_addr);
2510         wr_cfg.offset = OFFSET_COMMON_ADDR_REGS;
2511         ret = mpp_dev_ioctl(dev, MPP_DEV_REG_WR, &wr_cfg);
2512         if (ret) {
2513             mpp_err_f("set register write failed %d\n", ret);
2514             break;
2515         }
2516 
2517         wr_cfg.reg = &regs->av1d_paras;
2518         wr_cfg.size = sizeof(regs->av1d_paras);
2519         wr_cfg.offset = OFFSET_AV1D_PARAS_REGS;
2520         ret = mpp_dev_ioctl(dev, MPP_DEV_REG_WR, &wr_cfg);
2521         if (ret) {
2522             mpp_err_f("set register write failed %d\n", ret);
2523             break;
2524         }
2525 
2526         wr_cfg.reg = &regs->av1d_addrs;
2527         wr_cfg.size = sizeof(regs->av1d_addrs);
2528         wr_cfg.offset = OFFSET_AV1D_ADDR_REGS;
2529         ret = mpp_dev_ioctl(dev, MPP_DEV_REG_WR, &wr_cfg);
2530         if (ret) {
2531             mpp_err_f("set register write failed %d\n", ret);
2532             break;
2533         }
2534 
2535         rd_cfg.reg = &regs->ctrl_regs.reg15;
2536         rd_cfg.size = sizeof(regs->ctrl_regs.reg15);
2537         rd_cfg.offset = OFFSET_INTERRUPT_REGS;
2538         ret = mpp_dev_ioctl(dev, MPP_DEV_REG_RD, &rd_cfg);
2539         if (ret) {
2540             mpp_err_f("set register read failed %d\n", ret);
2541             break;
2542         }
2543 
2544         /* rcb info for sram */
2545         vdpu383_set_rcbinfo(dev, (Vdpu383RcbInfo*)reg_ctx->rcb_buf_info);
2546 
2547         /* send request to hardware */
2548         ret = mpp_dev_ioctl(dev, MPP_DEV_CMD_SEND, NULL);
2549         if (ret) {
2550             mpp_err_f("send cmd failed %d\n", ret);
2551             break;
2552         }
2553     } while (0);
2554 
2555 __RETURN:
2556     return ret = MPP_OK;
2557 }
2558 
vdpu383_av1d_wait(void * hal,HalTaskInfo * task)2559 MPP_RET vdpu383_av1d_wait(void *hal, HalTaskInfo *task)
2560 {
2561     MPP_RET ret = MPP_ERR_UNKNOW;
2562     Av1dHalCtx *p_hal = (Av1dHalCtx *)hal;
2563 
2564     INP_CHECK(ret, NULL == p_hal);
2565     Vdpu383Av1dRegCtx *reg_ctx = (Vdpu383Av1dRegCtx *)p_hal->reg_ctx;
2566     Vdpu383Av1dRegSet *p_regs = p_hal->fast_mode ?
2567                                 reg_ctx->reg_buf[task->dec.reg_index].regs :
2568                                 reg_ctx->regs;
2569 #ifdef DUMP_AV1D_VDPU383_DATAS
2570     {
2571         char *cur_fname = "colmv_cur_frame.dat";
2572         DXVA_PicParams_AV1 *dxva = (DXVA_PicParams_AV1*)task->dec.syntax.data;
2573         HalBuf *mv_buf = NULL;
2574         mv_buf = hal_bufs_get_buf(reg_ctx->colmv_bufs, dxva->CurrPic.Index7Bits);
2575         memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path));
2576         sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname);
2577         dump_data_to_file(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(mv_buf->buf[0]),
2578                           8 * mpp_buffer_get_size(mv_buf->buf[0]), 64, 0, 0);
2579     }
2580     {
2581         char *cur_fname = "decout.dat";
2582         MppBuffer mbuffer = NULL;
2583         mpp_buf_slot_get_prop(p_hal->slots, task->dec.output, SLOT_BUFFER, &mbuffer);
2584         memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path));
2585         sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname);
2586         dump_data_to_file(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(mbuffer),
2587                           8 * mpp_buffer_get_size(mbuffer), 128, 0, 0);
2588     }
2589 #endif
2590 
2591     if (task->dec.flags.parse_err ||
2592         task->dec.flags.ref_err) {
2593         goto __SKIP_HARD;
2594     }
2595 
2596     // rcb_buf_dump_edge(reg_ctx, p_hal->fast_mode ? reg_ctx->rcb_bufs[task->dec.reg_index] : reg_ctx->rcb_bufs[0]);
2597     // {
2598     //     MppBuffer mbuffer = NULL;
2599     //     mpp_buf_slot_get_prop(p_hal->slots, task->dec.output, SLOT_BUFFER, &mbuffer);
2600     //     VDPU383_DUMP_BUF_PROTECT_VAL(mpp_buffer_get_ptr(mbuffer), mpp_buffer_get_size(mbuffer), 128);
2601     // }
2602 
2603     ret = mpp_dev_ioctl(p_hal->dev, MPP_DEV_CMD_POLL, NULL);
2604     if (ret)
2605         mpp_err_f("poll cmd failed %d\n", ret);
2606 #ifdef DUMP_AV1D_VDPU383_DATAS
2607     {
2608         char *cur_fname = "cabac_cdf_out.dat";
2609         HalBuf *cdf_buf = NULL;
2610         DXVA_PicParams_AV1 *dxva = (DXVA_PicParams_AV1*)task->dec.syntax.data;
2611         memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path));
2612         sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname);
2613         cdf_buf = hal_bufs_get_buf(reg_ctx->cdf_segid_bufs, dxva->CurrPic.Index7Bits);
2614         dump_data_to_file(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(cdf_buf->buf[0]),
2615                           (NON_COEF_CDF_SIZE + COEF_CDF_SIZE) * 8, 128, 0, 0);
2616     }
2617 #endif
2618 
2619     if (task->dec.flags.parse_err ||
2620         task->dec.flags.ref_err ||
2621         (!p_regs->ctrl_regs.reg15.rkvdec_frame_rdy_sta) ||
2622         p_regs->ctrl_regs.reg15.rkvdec_strm_error_sta ||
2623         p_regs->ctrl_regs.reg15.rkvdec_core_timeout_sta ||
2624         p_regs->ctrl_regs.reg15.rkvdec_ip_timeout_sta ||
2625         p_regs->ctrl_regs.reg15.rkvdec_bus_error_sta ||
2626         p_regs->ctrl_regs.reg15.rkvdec_buffer_empty_sta ||
2627         p_regs->ctrl_regs.reg15.rkvdec_colmv_ref_error_sta) {
2628         MppFrame mframe = NULL;
2629 
2630         mpp_buf_slot_get_prop(p_hal->slots, task->dec.output, SLOT_FRAME_PTR, &mframe);
2631         mpp_frame_set_errinfo(mframe, 1);
2632     }
2633 
2634 __SKIP_HARD:
2635     if (p_hal->fast_mode)
2636         reg_ctx->reg_buf[task->dec.reg_index].valid = 0;
2637 
2638     (void)task;
2639 __RETURN:
2640     return ret = MPP_OK;
2641 }
2642 
vdpu383_av1d_reset(void * hal)2643 MPP_RET vdpu383_av1d_reset(void *hal)
2644 {
2645     MPP_RET ret = MPP_ERR_UNKNOW;
2646     Av1dHalCtx *p_hal = (Av1dHalCtx *)hal;
2647 
2648     INP_CHECK(ret, NULL == p_hal);
2649 
2650 
2651 __RETURN:
2652     return ret = MPP_OK;
2653 }
2654 
vdpu383_av1d_flush(void * hal)2655 MPP_RET vdpu383_av1d_flush(void *hal)
2656 {
2657     MPP_RET ret = MPP_ERR_UNKNOW;
2658     Av1dHalCtx *p_hal = (Av1dHalCtx *)hal;
2659 
2660     INP_CHECK(ret, NULL == p_hal);
2661 
2662 __RETURN:
2663     return ret = MPP_OK;
2664 }
2665 
vdpu383_av1d_control(void * hal,MpiCmd cmd_type,void * param)2666 MPP_RET vdpu383_av1d_control(void *hal, MpiCmd cmd_type, void *param)
2667 {
2668     Av1dHalCtx *p_hal = (Av1dHalCtx *)hal;
2669     MPP_RET ret = MPP_ERR_UNKNOW;
2670 
2671     INP_CHECK(ret, NULL == p_hal);
2672 
2673     switch ((MpiCmd)cmd_type) {
2674     case MPP_DEC_SET_FRAME_INFO : {
2675         MppFrameFormat fmt = mpp_frame_get_fmt((MppFrame)param);
2676         RK_U32 imgwidth = mpp_frame_get_width((MppFrame)param);
2677         RK_U32 imgheight = mpp_frame_get_height((MppFrame)param);
2678 
2679         AV1D_DBG(AV1D_DBG_LOG, "control info: fmt %d, w %d, h %d\n", fmt, imgwidth, imgheight);
2680         if ((fmt & MPP_FRAME_FMT_MASK) == MPP_FMT_YUV422SP) {
2681             mpp_slots_set_prop(p_hal->slots, SLOTS_LEN_ALIGN, rkv_len_align_422);
2682         }
2683         if (MPP_FRAME_FMT_IS_FBC(fmt)) {
2684             vdpu383_afbc_align_calc(p_hal->slots, (MppFrame)param, 16);
2685         } else if (imgwidth > 1920 || imgheight > 1088) {
2686             mpp_slots_set_prop(p_hal->slots, SLOTS_HOR_ALIGN, mpp_align_128_odd_plus_64);
2687         }
2688         break;
2689     }
2690     case MPP_DEC_GET_THUMBNAIL_FRAME_INFO: {
2691         vdpu383_update_thumbnail_frame_info((MppFrame)param);
2692     } break;
2693     case MPP_DEC_SET_OUTPUT_FORMAT : {
2694     } break;
2695     default : {
2696     } break;
2697     }
2698 
2699 __RETURN:
2700     return ret = MPP_OK;
2701 }
2702 
2703 const MppHalApi hal_av1d_vdpu383 = {
2704     .name       = "av1d_vdpu383",
2705     .type       = MPP_CTX_DEC,
2706     .coding     = MPP_VIDEO_CodingAV1,
2707     .ctx_size   = sizeof(Vdpu383Av1dRegCtx),
2708     .flag       = 0,
2709     .init       = vdpu383_av1d_init,
2710     .deinit     = vdpu383_av1d_deinit,
2711     .reg_gen    = vdpu383_av1d_gen_regs,
2712     .start      = vdpu383_av1d_start,
2713     .wait       = vdpu383_av1d_wait,
2714     .reset      = vdpu383_av1d_reset,
2715     .flush      = vdpu383_av1d_flush,
2716     .control    = vdpu383_av1d_control,
2717 };
2718