diff mbox

[FFmpeg-devel] libavformat/aac: Parse all ID3 tags present between ADTS frames

Message ID 3f64fb9c-237c-98bd-4f72-e986f86612e1@avm.se
State Accepted
Commit a26c9fdd1b4c047d6c89e29774928fd7bf347e8b
Headers show

Commit Message

Mattias Amnefelt April 4, 2018, 11 p.m. UTC
On 2018-04-04 09:22, Mattias Amnefelt wrote:
> On 2018-04-04 03:42, James Almer wrote:
>> On 4/3/2018 10:40 PM, Carl Eugen Hoyos wrote:
>>> 2018-04-04 3:38 GMT+02:00, James Almer <jamrial@gmail.com>:
>>>> On 4/3/2018 10:33 PM, Carl Eugen Hoyos wrote:
>>>>> The "-f aac" looks like a bad idea to me.
>>>>> It's also true for the tests above, but that's still not reason to
>>>>> add more.
>>>>>
>>>>> Please avoid top-posting here, Carl Eugen
>>>> At least in one of them it was added because the sample had too few
>>>> frames and probing was detecting it with a score of 1, which seemed 
>>>> too
>>>> fragile.
>>> I believe that it is good to have a sample that is detected with
>>> a small score as part of fate.
>>>
>>> Carl Eugen
>> When i asked it was suggested to just force the demuxer. I have no
>> opinion one way or another, so feel free to change it.
> I have to admit I just copy-n-pasted the test above. I just 
> double-checked and all the id3 tag tests pass without -f aac now. I'm 
> not sure if anything has changed since the test was added or not. Do 
> you want a patch which removes it for all of them?
>
>
Here's an updated version of the patch without -f aac

/mattiasa
From 1d5ab8e48502c570b562ef4fdb6cf674f1d91e93 Mon Sep 17 00:00:00 2001
From: Mattias Amnefelt <mattiasa@avm.se>
Date: Mon, 2 Apr 2018 11:30:40 +0200
Subject: [PATCH] libavformat/aac: Parse all ID3 tags present between ADTS
 frames

Some ADTS streams can have multiple ID3 tags between frames. This
change parses all of them, rather than just the first one.

Signed-off-by: Mattias Amnefelt <mattiasa@avm.se>
---
 libavformat/aacdec.c                     |  14 +-
 tests/fate/demux.mak                     |   3 +-
 tests/ref/fate/adts-id3v2-two-tags-demux | 475 +++++++++++++++++++++++++++++++
 3 files changed, 486 insertions(+), 6 deletions(-)
 create mode 100644 tests/ref/fate/adts-id3v2-two-tags-demux

Comments

Mattias Amnefelt April 9, 2018, 8:05 a.m. UTC | #1
On 2018-04-05 01:00, Mattias Amnefelt wrote:
> On 2018-04-04 09:22, Mattias Amnefelt wrote:
>> On 2018-04-04 03:42, James Almer wrote:
>>> On 4/3/2018 10:40 PM, Carl Eugen Hoyos wrote:
>>>> 2018-04-04 3:38 GMT+02:00, James Almer <jamrial@gmail.com>:
>>>>> On 4/3/2018 10:33 PM, Carl Eugen Hoyos wrote:
>>>>>> The "-f aac" looks like a bad idea to me.
>>>>>> It's also true for the tests above, but that's still not reason to
>>>>>> add more.
>>>>>>
>>>>>> Please avoid top-posting here, Carl Eugen
>>>>> At least in one of them it was added because the sample had too few
>>>>> frames and probing was detecting it with a score of 1, which 
>>>>> seemed too
>>>>> fragile.
>>>> I believe that it is good to have a sample that is detected with
>>>> a small score as part of fate.
>>>>
>>>> Carl Eugen
>>> When i asked it was suggested to just force the demuxer. I have no
>>> opinion one way or another, so feel free to change it.
>> I have to admit I just copy-n-pasted the test above. I just 
>> double-checked and all the id3 tag tests pass without -f aac now. I'm 
>> not sure if anything has changed since the test was added or not. Do 
>> you want a patch which removes it for all of them?
>>
>>
> Here's an updated version of the patch without -f aac
>
> /mattiasa

Did anyone have any options on the updated patch?

/mattiasa
rshaffer@tunein.com April 11, 2018, 7:42 p.m. UTC | #2
On Mon, Apr 9, 2018 at 1:05 AM, Mattias Amnefelt <mattiasa@avm.se> wrote:

> On 2018-04-05 01:00, Mattias Amnefelt wrote:
>
>> On 2018-04-04 09:22, Mattias Amnefelt wrote:
>>
>>> On 2018-04-04 03:42, James Almer wrote:
>>>
>>>> On 4/3/2018 10:40 PM, Carl Eugen Hoyos wrote:
>>>>
>>>>> 2018-04-04 3:38 GMT+02:00, James Almer <jamrial@gmail.com>:
>>>>>
>>>>>> On 4/3/2018 10:33 PM, Carl Eugen Hoyos wrote:
>>>>>>
>>>>>>> The "-f aac" looks like a bad idea to me.
>>>>>>> It's also true for the tests above, but that's still not reason to
>>>>>>> add more.
>>>>>>>
>>>>>>> Please avoid top-posting here, Carl Eugen
>>>>>>>
>>>>>> At least in one of them it was added because the sample had too few
>>>>>> frames and probing was detecting it with a score of 1, which seemed
>>>>>> too
>>>>>> fragile.
>>>>>>
>>>>> I believe that it is good to have a sample that is detected with
>>>>> a small score as part of fate.
>>>>>
>>>>> Carl Eugen
>>>>>
>>>> When i asked it was suggested to just force the demuxer. I have no
>>>> opinion one way or another, so feel free to change it.
>>>>
>>> I have to admit I just copy-n-pasted the test above. I just
>>> double-checked and all the id3 tag tests pass without -f aac now. I'm not
>>> sure if anything has changed since the test was added or not. Do you want a
>>> patch which removes it for all of them?
>>>
>>>
>>> Here's an updated version of the patch without -f aac
>>
>> /mattiasa
>>
>
> Did anyone have any options on the updated patch?
>
>
> /mattiasa
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>

This seems like a nice thing to have. If there are no other comments on
Mattias' patch or test, would one of the maintainers be willing to merge it?

-Richard
Michael Niedermayer April 12, 2018, 12:09 a.m. UTC | #3
On Wed, Apr 11, 2018 at 12:42:07PM -0700, Richard Shaffer wrote:
> On Mon, Apr 9, 2018 at 1:05 AM, Mattias Amnefelt <mattiasa@avm.se> wrote:
> 
> > On 2018-04-05 01:00, Mattias Amnefelt wrote:
> >
> >> On 2018-04-04 09:22, Mattias Amnefelt wrote:
> >>
> >>> On 2018-04-04 03:42, James Almer wrote:
> >>>
> >>>> On 4/3/2018 10:40 PM, Carl Eugen Hoyos wrote:
> >>>>
> >>>>> 2018-04-04 3:38 GMT+02:00, James Almer <jamrial@gmail.com>:
> >>>>>
> >>>>>> On 4/3/2018 10:33 PM, Carl Eugen Hoyos wrote:
> >>>>>>
> >>>>>>> The "-f aac" looks like a bad idea to me.
> >>>>>>> It's also true for the tests above, but that's still not reason to
> >>>>>>> add more.
> >>>>>>>
> >>>>>>> Please avoid top-posting here, Carl Eugen
> >>>>>>>
> >>>>>> At least in one of them it was added because the sample had too few
> >>>>>> frames and probing was detecting it with a score of 1, which seemed
> >>>>>> too
> >>>>>> fragile.
> >>>>>>
> >>>>> I believe that it is good to have a sample that is detected with
> >>>>> a small score as part of fate.
> >>>>>
> >>>>> Carl Eugen
> >>>>>
> >>>> When i asked it was suggested to just force the demuxer. I have no
> >>>> opinion one way or another, so feel free to change it.
> >>>>
> >>> I have to admit I just copy-n-pasted the test above. I just
> >>> double-checked and all the id3 tag tests pass without -f aac now. I'm not
> >>> sure if anything has changed since the test was added or not. Do you want a
> >>> patch which removes it for all of them?
> >>>
> >>>
> >>> Here's an updated version of the patch without -f aac
> >>
> >> /mattiasa
> >>
> >
> > Did anyone have any options on the updated patch?
> >
> >
> > /mattiasa
> >
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel@ffmpeg.org
> > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >
> 
> This seems like a nice thing to have. If there are no other comments on
> Mattias' patch or test, would one of the maintainers be willing to merge it?

i dont think iam maintainer of aac/ac3 but will apply as this was laying
around for a while and is rather simple so shouldnt need that lomng for a
reply  thus it appears noone has a comment ...

thanks

[...]
diff mbox

Patch

diff --git a/libavformat/aacdec.c b/libavformat/aacdec.c
index 5ec706bdc7..685458b911 100644
--- a/libavformat/aacdec.c
+++ b/libavformat/aacdec.c
@@ -154,11 +154,15 @@  static int adts_aac_read_packet(AVFormatContext *s, AVPacket *pkt)
 {
     int ret, fsize;
 
-    ret = av_get_packet(s->pb, pkt, FFMAX(ID3v2_HEADER_SIZE, ADTS_HEADER_SIZE));
-
-    if (ret >= ID3v2_HEADER_SIZE && ff_id3v2_match(pkt->data, ID3v2_DEFAULT_MAGIC)) {
-        if ((ret = handle_id3(s, pkt)) >= 0)
-            ret = av_get_packet(s->pb, pkt, ADTS_HEADER_SIZE);
+    // Parse all the ID3 headers between frames
+    while (1) {
+        ret = av_get_packet(s->pb, pkt, FFMAX(ID3v2_HEADER_SIZE, ADTS_HEADER_SIZE));
+        if (ret >= ID3v2_HEADER_SIZE && ff_id3v2_match(pkt->data, ID3v2_DEFAULT_MAGIC)) {
+            if ((ret = handle_id3(s, pkt)) >= 0) {
+                continue;
+            }
+        }
+        break;
     }
 
     if (ret < 0)
diff --git a/tests/fate/demux.mak b/tests/fate/demux.mak
index 306904b9de..ef9e677821 100644
--- a/tests/fate/demux.mak
+++ b/tests/fate/demux.mak
@@ -1,10 +1,11 @@ 
 FATE_SAMPLES_DEMUX-$(call DEMDEC, AVI, FRAPS) += fate-avio-direct
 fate-avio-direct: CMD = framecrc -avioflags direct -i $(TARGET_SAMPLES)/fraps/fraps-v5-bouncing-balls-partial.avi -avioflags direct
 
-FATE_SAMPLES_DEMUX-$(call DEMDEC, AAC, AAC) += fate-adts-demux fate-adts-id3v1-demux fate-adts-id3v2-demux
+FATE_SAMPLES_DEMUX-$(call DEMDEC, AAC, AAC) += fate-adts-demux fate-adts-id3v1-demux fate-adts-id3v2-demux fate-adts-id3v2-two-tags-demux
 fate-adts-demux: CMD = crc -i $(TARGET_SAMPLES)/aac/ct_faac-adts.aac -c:a copy
 fate-adts-id3v1-demux: CMD = framecrc -f aac -i $(TARGET_SAMPLES)/aac/id3v1.aac -c:a copy
 fate-adts-id3v2-demux: CMD = framecrc -f aac -i $(TARGET_SAMPLES)/aac/id3v2.aac -c:a copy
+fate-adts-id3v2-two-tags-demux: CMD = framecrc -i $(TARGET_SAMPLES)/aac/id3v2_two_tags.aac -c:a copy
 
 FATE_SAMPLES_DEMUX-$(CONFIG_AEA_DEMUXER) += fate-aea-demux
 fate-aea-demux: CMD = crc -i $(TARGET_SAMPLES)/aea/chirp.aea -c:a copy
diff --git a/tests/ref/fate/adts-id3v2-two-tags-demux b/tests/ref/fate/adts-id3v2-two-tags-demux
new file mode 100644
index 0000000000..4fffd2e767
--- /dev/null
+++ b/tests/ref/fate/adts-id3v2-two-tags-demux
@@ -0,0 +1,475 @@ 
+#tb 0: 1/28224000
+#media_type 0: audio
+#codec_id 0: aac
+#sample_rate 0: 48000
+#channel_layout 0: 4
+#channel_layout_name 0: mono
+0,          0,          0,   602112,      128, 0x23291993
+0,     602112,     602112,   602112,      128, 0x23291993
+0,    1204224,    1204224,   602112,      128, 0x23291993
+0,    1806336,    1806336,   602112,      128, 0x23291993
+0,    2408448,    2408448,   602112,      128, 0x23291993
+0,    3010560,    3010560,   602112,      128, 0x23291993
+0,    3612672,    3612672,   602112,      128, 0x23291993
+0,    4214784,    4214784,   602112,      128, 0x23291993
+0,    4816896,    4816896,   602112,      128, 0x23291993
+0,    5419008,    5419008,   602112,      128, 0x23291993
+0,    6021120,    6021120,   602112,      128, 0x23291993
+0,    6623232,    6623232,   602112,      128, 0x23291993
+0,    7225344,    7225344,   602112,      128, 0x23291993
+0,    7827456,    7827456,   602112,      128, 0x23291993
+0,    8429568,    8429568,   602112,      128, 0x23291993
+0,    9031680,    9031680,   602112,      128, 0x23291993
+0,    9633792,    9633792,   602112,      128, 0x23291993
+0,   10235904,   10235904,   602112,      128, 0x23291993
+0,   10838016,   10838016,   602112,      128, 0x23291993
+0,   11440128,   11440128,   602112,      128, 0x23291993
+0,   12042240,   12042240,   602112,      128, 0x23291993
+0,   12644352,   12644352,   602112,      128, 0x23291993
+0,   13246464,   13246464,   602112,      128, 0x23291993
+0,   13848576,   13848576,   602112,      128, 0x23291993
+0,   14450688,   14450688,   602112,      128, 0x23291993
+0,   15052800,   15052800,   602112,      128, 0x23291993
+0,   15654912,   15654912,   602112,      128, 0x23291993
+0,   16257024,   16257024,   602112,      128, 0x23291993
+0,   16859136,   16859136,   602112,      128, 0x23291993
+0,   17461248,   17461248,   602112,      128, 0x23291993
+0,   18063360,   18063360,   602112,      128, 0x23291993
+0,   18665472,   18665472,   602112,      128, 0x23291993
+0,   19267584,   19267584,   602112,      128, 0x23291993
+0,   19869696,   19869696,   602112,      128, 0x23291993
+0,   20471808,   20471808,   602112,      128, 0x23291993
+0,   21073920,   21073920,   602112,      128, 0x23291993
+0,   21676032,   21676032,   602112,      128, 0x23291993
+0,   22278144,   22278144,   602112,      128, 0x23291993
+0,   22880256,   22880256,   602112,      128, 0x23291993
+0,   23482368,   23482368,   602112,      128, 0x23291993
+0,   24084480,   24084480,   602112,      128, 0x23291993
+0,   24686592,   24686592,   602112,      128, 0x23291993
+0,   25288704,   25288704,   602112,      128, 0x23291993
+0,   25890816,   25890816,   602112,      128, 0x23291993
+0,   26492928,   26492928,   602112,      128, 0x23291993
+0,   27095040,   27095040,   602112,      128, 0x23291993
+0,   27697152,   27697152,   602112,      128, 0x23291993
+0,   28299264,   28299264,   602112,      128, 0x23291993
+0,   28901376,   28901376,   602112,      128, 0x23291993
+0,   29503488,   29503488,   602112,      128, 0x23291993
+0,   30105600,   30105600,   602112,      128, 0x23291993
+0,   30707712,   30707712,   602112,      128, 0x23291993
+0,   31309824,   31309824,   602112,      128, 0x23291993
+0,   31911936,   31911936,   602112,      128, 0x23291993
+0,   32514048,   32514048,   602112,      128, 0x23291993
+0,   33116160,   33116160,   602112,      128, 0x23291993
+0,   33718272,   33718272,   602112,      128, 0x23291993
+0,   34320384,   34320384,   602112,      128, 0x23291993
+0,   34922496,   34922496,   602112,      128, 0x23291993
+0,   35524608,   35524608,   602112,      128, 0x23291993
+0,   36126720,   36126720,   602112,      128, 0x23291993
+0,   36728832,   36728832,   602112,      128, 0x23291993
+0,   37330944,   37330944,   602112,      128, 0x23291993
+0,   37933056,   37933056,   602112,      128, 0x23291993
+0,   38535168,   38535168,   602112,      128, 0x23291993
+0,   39137280,   39137280,   602112,      128, 0x23291993
+0,   39739392,   39739392,   602112,      128, 0x23291993
+0,   40341504,   40341504,   602112,      128, 0x23291993
+0,   40943616,   40943616,   602112,      128, 0x23291993
+0,   41545728,   41545728,   602112,      128, 0x23291993
+0,   42147840,   42147840,   602112,      128, 0x23291993
+0,   42749952,   42749952,   602112,      128, 0x23291993
+0,   43352064,   43352064,   602112,      128, 0x23291993
+0,   43954176,   43954176,   602112,      128, 0x23291993
+0,   44556288,   44556288,   602112,      128, 0x23291993
+0,   45158400,   45158400,   602112,      128, 0x23291993
+0,   45760512,   45760512,   602112,      128, 0x23291993
+0,   46362624,   46362624,   602112,      128, 0x23291993
+0,   46964736,   46964736,   602112,      128, 0x23291993
+0,   47566848,   47566848,   602112,      128, 0x23291993
+0,   48168960,   48168960,   602112,      128, 0x23291993
+0,   48771072,   48771072,   602112,      128, 0x23291993
+0,   49373184,   49373184,   602112,      128, 0x23291993
+0,   49975296,   49975296,   602112,      128, 0x23291993
+0,   50577408,   50577408,   602112,      128, 0x23291993
+0,   51179520,   51179520,   602112,      128, 0x23291993
+0,   51781632,   51781632,   602112,      128, 0x23291993
+0,   52383744,   52383744,   602112,      128, 0x23291993
+0,   52985856,   52985856,   602112,      128, 0x23291993
+0,   53587968,   53587968,   602112,      128, 0x23291993
+0,   54190080,   54190080,   602112,      128, 0x23291993
+0,   54792192,   54792192,   602112,      128, 0x23291993
+0,   55394304,   55394304,   602112,      128, 0x23291993
+0,   55996416,   55996416,   602112,      128, 0x23291993
+0,   56598528,   56598528,   602112,      128, 0x23291993
+0,   57200640,   57200640,   602112,      128, 0x23291993
+0,   57802752,   57802752,   602112,      128, 0x23291993
+0,   58404864,   58404864,   602112,      128, 0x23291993
+0,   59006976,   59006976,   602112,      128, 0x23291993
+0,   59609088,   59609088,   602112,      128, 0x23291993
+0,   60211200,   60211200,   602112,      128, 0x23291993
+0,   60813312,   60813312,   602112,      128, 0x23291993
+0,   61415424,   61415424,   602112,      128, 0x23291993
+0,   62017536,   62017536,   602112,      128, 0x23291993
+0,   62619648,   62619648,   602112,      128, 0x23291993
+0,   63221760,   63221760,   602112,      128, 0x23291993
+0,   63823872,   63823872,   602112,      128, 0x23291993
+0,   64425984,   64425984,   602112,      128, 0x23291993
+0,   65028096,   65028096,   602112,      128, 0x23291993
+0,   65630208,   65630208,   602112,      128, 0x23291993
+0,   66232320,   66232320,   602112,      128, 0x23291993
+0,   66834432,   66834432,   602112,      128, 0x23291993
+0,   67436544,   67436544,   602112,      128, 0x23291993
+0,   68038656,   68038656,   602112,      128, 0x23291993
+0,   68640768,   68640768,   602112,      128, 0x23291993
+0,   69242880,   69242880,   602112,      128, 0x23291993
+0,   69844992,   69844992,   602112,      128, 0x23291993
+0,   70447104,   70447104,   602112,      128, 0x23291993
+0,   71049216,   71049216,   602112,      128, 0x23291993
+0,   71651328,   71651328,   602112,      128, 0x23291993
+0,   72253440,   72253440,   602112,      128, 0x23291993
+0,   72855552,   72855552,   602112,      128, 0x23291993
+0,   73457664,   73457664,   602112,      128, 0x23291993
+0,   74059776,   74059776,   602112,      128, 0x23291993
+0,   74661888,   74661888,   602112,      128, 0x23291993
+0,   75264000,   75264000,   602112,      128, 0x23291993
+0,   75866112,   75866112,   602112,      128, 0x23291993
+0,   76468224,   76468224,   602112,      128, 0x23291993
+0,   77070336,   77070336,   602112,      128, 0x23291993
+0,   77672448,   77672448,   602112,      128, 0x23291993
+0,   78274560,   78274560,   602112,      128, 0x23291993
+0,   78876672,   78876672,   602112,      128, 0x23291993
+0,   79478784,   79478784,   602112,      128, 0x23291993
+0,   80080896,   80080896,   602112,      128, 0x23291993
+0,   80683008,   80683008,   602112,      128, 0x23291993
+0,   81285120,   81285120,   602112,      128, 0x23291993
+0,   81887232,   81887232,   602112,      128, 0x23291993
+0,   82489344,   82489344,   602112,      128, 0x23291993
+0,   83091456,   83091456,   602112,      128, 0x23291993
+0,   83693568,   83693568,   602112,      128, 0x23291993
+0,   84295680,   84295680,   602112,      128, 0x23291993
+0,   84897792,   84897792,   602112,      128, 0x23291993
+0,   85499904,   85499904,   602112,      128, 0x23291993
+0,   86102016,   86102016,   602112,      128, 0x23291993
+0,   86704128,   86704128,   602112,      128, 0x23291993
+0,   87306240,   87306240,   602112,      128, 0x23291993
+0,   87908352,   87908352,   602112,      128, 0x23291993
+0,   88510464,   88510464,   602112,      128, 0x23291993
+0,   89112576,   89112576,   602112,      128, 0x23291993
+0,   89714688,   89714688,   602112,      128, 0x23291993
+0,   90316800,   90316800,   602112,      128, 0x23291993
+0,   90918912,   90918912,   602112,      128, 0x23291993
+0,   91521024,   91521024,   602112,      128, 0x23291993
+0,   92123136,   92123136,   602112,      128, 0x23291993
+0,   92725248,   92725248,   602112,      128, 0x23291993
+0,   93327360,   93327360,   602112,      128, 0x23291993
+0,   93929472,   93929472,   602112,      128, 0x23291993
+0,   94531584,   94531584,   602112,      128, 0x23291993
+0,   95133696,   95133696,   602112,      128, 0x23291993
+0,   95735808,   95735808,   602112,      128, 0x23291993
+0,   96337920,   96337920,   602112,      128, 0x23291993
+0,   96940032,   96940032,   602112,      128, 0x23291993
+0,   97542144,   97542144,   602112,      128, 0x23291993
+0,   98144256,   98144256,   602112,      128, 0x23291993
+0,   98746368,   98746368,   602112,      128, 0x23291993
+0,   99348480,   99348480,   602112,      128, 0x23291993
+0,   99950592,   99950592,   602112,      128, 0x23291993
+0,  100552704,  100552704,   602112,      128, 0x23291993
+0,  101154816,  101154816,   602112,      128, 0x23291993
+0,  101756928,  101756928,   602112,      128, 0x23291993
+0,  102359040,  102359040,   602112,      128, 0x23291993
+0,  102961152,  102961152,   602112,      128, 0x23291993
+0,  103563264,  103563264,   602112,      128, 0x23291993
+0,  104165376,  104165376,   602112,      128, 0x23291993
+0,  104767488,  104767488,   602112,      128, 0x23291993
+0,  105369600,  105369600,   602112,      128, 0x23291993
+0,  105971712,  105971712,   602112,      128, 0x23291993
+0,  106573824,  106573824,   602112,      128, 0x23291993
+0,  107175936,  107175936,   602112,      128, 0x23291993
+0,  107778048,  107778048,   602112,      128, 0x23291993
+0,  108380160,  108380160,   602112,      128, 0x23291993
+0,  108982272,  108982272,   602112,      128, 0x23291993
+0,  109584384,  109584384,   602112,      128, 0x23291993
+0,  110186496,  110186496,   602112,      128, 0x23291993
+0,  110788608,  110788608,   602112,      128, 0x23291993
+0,  111390720,  111390720,   602112,      128, 0x23291993
+0,  111992832,  111992832,   602112,      128, 0x23291993
+0,  112594944,  112594944,   602112,      128, 0x23291993
+0,  113197056,  113197056,   602112,      128, 0x23291993
+0,  113799168,  113799168,   602112,      128, 0x23291993
+0,  114401280,  114401280,   602112,      128, 0x23291993
+0,  115003392,  115003392,   602112,      128, 0x23291993
+0,  115605504,  115605504,   602112,      128, 0x23291993
+0,  116207616,  116207616,   602112,      128, 0x23291993
+0,  116809728,  116809728,   602112,      128, 0x23291993
+0,  117411840,  117411840,   602112,      128, 0x23291993
+0,  118013952,  118013952,   602112,      128, 0x23291993
+0,  118616064,  118616064,   602112,      128, 0x23291993
+0,  119218176,  119218176,   602112,      128, 0x23291993
+0,  119820288,  119820288,   602112,      128, 0x23291993
+0,  120422400,  120422400,   602112,      128, 0x23291993
+0,  121024512,  121024512,   602112,      128, 0x23291993
+0,  121626624,  121626624,   602112,      128, 0x23291993
+0,  122228736,  122228736,   602112,      128, 0x23291993
+0,  122830848,  122830848,   602112,      128, 0x23291993
+0,  123432960,  123432960,   602112,      128, 0x23291993
+0,  124035072,  124035072,   602112,      128, 0x23291993
+0,  124637184,  124637184,   602112,      128, 0x23291993
+0,  125239296,  125239296,   602112,      128, 0x23291993
+0,  125841408,  125841408,   602112,      128, 0x23291993
+0,  126443520,  126443520,   602112,      128, 0x23291993
+0,  127045632,  127045632,   602112,      128, 0x23291993
+0,  127647744,  127647744,   602112,      128, 0x23291993
+0,  128249856,  128249856,   602112,      128, 0x23291993
+0,  128851968,  128851968,   602112,      128, 0x23291993
+0,  129454080,  129454080,   602112,      128, 0x23291993
+0,  130056192,  130056192,   602112,      128, 0x23291993
+0,  130658304,  130658304,   602112,      128, 0x23291993
+0,  131260416,  131260416,   602112,      128, 0x23291993
+0,  131862528,  131862528,   602112,      128, 0x23291993
+0,  132464640,  132464640,   602112,      128, 0x23291993
+0,  133066752,  133066752,   602112,      128, 0x23291993
+0,  133668864,  133668864,   602112,      128, 0x23291993
+0,  134270976,  134270976,   602112,      128, 0x23291993
+0,  134873088,  134873088,   602112,      128, 0x23291993
+0,  135475200,  135475200,   602112,      128, 0x23291993
+0,  136077312,  136077312,   602112,      128, 0x23291993
+0,  136679424,  136679424,   602112,      128, 0x23291993
+0,  137281536,  137281536,   602112,      128, 0x23291993
+0,  137883648,  137883648,   602112,      128, 0x23291993
+0,  138485760,  138485760,   602112,      128, 0x23291993
+0,  139087872,  139087872,   602112,      128, 0x23291993
+0,  139689984,  139689984,   602112,      128, 0x23291993
+0,  140292096,  140292096,   602112,      128, 0x23291993
+0,  140894208,  140894208,   602112,      128, 0x23291993
+0,  141496320,  141496320,   602112,      128, 0x23291993
+0,  142098432,  142098432,   602112,      128, 0x23291993
+0,  142700544,  142700544,   602112,      128, 0x23291993
+0,  143302656,  143302656,   602112,      128, 0x23291993
+0,  143904768,  143904768,   602112,      128, 0x23291993
+0,  144506880,  144506880,   602112,      128, 0x23291993
+0,  145108992,  145108992,   602112,      128, 0x23291993
+0,  145711104,  145711104,   602112,      128, 0x23291993
+0,  146313216,  146313216,   602112,      128, 0x23291993
+0,  146915328,  146915328,   602112,      128, 0x23291993
+0,  147517440,  147517440,   602112,      128, 0x23291993
+0,  148119552,  148119552,   602112,      128, 0x23291993
+0,  148721664,  148721664,   602112,      128, 0x23291993
+0,  149323776,  149323776,   602112,      128, 0x23291993
+0,  149925888,  149925888,   602112,      128, 0x23291993
+0,  150528000,  150528000,   602112,      128, 0x23291993
+0,  151130112,  151130112,   602112,      128, 0x23291993
+0,  151732224,  151732224,   602112,      128, 0x23291993
+0,  152334336,  152334336,   602112,      128, 0x23291993
+0,  152936448,  152936448,   602112,      128, 0x23291993
+0,  153538560,  153538560,   602112,      128, 0x23291993
+0,  154140672,  154140672,   602112,      128, 0x23291993
+0,  154742784,  154742784,   602112,      128, 0x23291993
+0,  155344896,  155344896,   602112,      128, 0x23291993
+0,  155947008,  155947008,   602112,      128, 0x23291993
+0,  156549120,  156549120,   602112,      128, 0x23291993
+0,  157151232,  157151232,   602112,      128, 0x23291993
+0,  157753344,  157753344,   602112,      128, 0x23291993
+0,  158355456,  158355456,   602112,      128, 0x23291993
+0,  158957568,  158957568,   602112,      128, 0x23291993
+0,  159559680,  159559680,   602112,      128, 0x23291993
+0,  160161792,  160161792,   602112,      128, 0x23291993
+0,  160763904,  160763904,   602112,      128, 0x23291993
+0,  161366016,  161366016,   602112,      128, 0x23291993
+0,  161968128,  161968128,   602112,      128, 0x23291993
+0,  162570240,  162570240,   602112,      128, 0x23291993
+0,  163172352,  163172352,   602112,      128, 0x23291993
+0,  163774464,  163774464,   602112,      128, 0x23291993
+0,  164376576,  164376576,   602112,      128, 0x23291993
+0,  164978688,  164978688,   602112,      128, 0x23291993
+0,  165580800,  165580800,   602112,      128, 0x23291993
+0,  166182912,  166182912,   602112,      128, 0x23291993
+0,  166785024,  166785024,   602112,      128, 0x23291993
+0,  167387136,  167387136,   602112,      128, 0x23291993
+0,  167989248,  167989248,   602112,      128, 0x23291993
+0,  168591360,  168591360,   602112,      128, 0x23291993
+0,  169193472,  169193472,   602112,      128, 0x23291993
+0,  169795584,  169795584,   602112,      128, 0x23291993
+0,  170397696,  170397696,   602112,      128, 0x23291993
+0,  170999808,  170999808,   602112,      128, 0x23291993
+0,  171601920,  171601920,   602112,      128, 0x23291993
+0,  172204032,  172204032,   602112,      128, 0x23291993
+0,  172806144,  172806144,   602112,      128, 0x23291993
+0,  173408256,  173408256,   602112,      128, 0x23291993
+0,  174010368,  174010368,   602112,      128, 0x23291993
+0,  174612480,  174612480,   602112,      128, 0x23291993
+0,  175214592,  175214592,   602112,      128, 0x23291993
+0,  175816704,  175816704,   602112,      128, 0x23291993
+0,  176418816,  176418816,   602112,      128, 0x23291993
+0,  177020928,  177020928,   602112,      128, 0x23291993
+0,  177623040,  177623040,   602112,      128, 0x23291993
+0,  178225152,  178225152,   602112,      128, 0x23291993
+0,  178827264,  178827264,   602112,      128, 0x23291993
+0,  179429376,  179429376,   602112,      128, 0x23291993
+0,  180031488,  180031488,   602112,      128, 0x23291993
+0,  180633600,  180633600,   602112,      128, 0x23291993
+0,  181235712,  181235712,   602112,      128, 0x23291993
+0,  181837824,  181837824,   602112,      128, 0x23291993
+0,  182439936,  182439936,   602112,      128, 0x23291993
+0,  183042048,  183042048,   602112,      128, 0x23291993
+0,  183644160,  183644160,   602112,      128, 0x23291993
+0,  184246272,  184246272,   602112,      128, 0x23291993
+0,  184848384,  184848384,   602112,      128, 0x23291993
+0,  185450496,  185450496,   602112,      128, 0x23291993
+0,  186052608,  186052608,   602112,      128, 0x23291993
+0,  186654720,  186654720,   602112,      128, 0x23291993
+0,  187256832,  187256832,   602112,      128, 0x23291993
+0,  187858944,  187858944,   602112,      128, 0x23291993
+0,  188461056,  188461056,   602112,      128, 0x23291993
+0,  189063168,  189063168,   602112,      128, 0x23291993
+0,  189665280,  189665280,   602112,      128, 0x23291993
+0,  190267392,  190267392,   602112,      128, 0x23291993
+0,  190869504,  190869504,   602112,      128, 0x23291993
+0,  191471616,  191471616,   602112,      128, 0x23291993
+0,  192073728,  192073728,   602112,      128, 0x23291993
+0,  192675840,  192675840,   602112,      128, 0x23291993
+0,  193277952,  193277952,   602112,      128, 0x23291993
+0,  193880064,  193880064,   602112,      128, 0x23291993
+0,  194482176,  194482176,   602112,      128, 0x23291993
+0,  195084288,  195084288,   602112,      128, 0x23291993
+0,  195686400,  195686400,   602112,      128, 0x23291993
+0,  196288512,  196288512,   602112,      128, 0x23291993
+0,  196890624,  196890624,   602112,      128, 0x23291993
+0,  197492736,  197492736,   602112,      128, 0x23291993
+0,  198094848,  198094848,   602112,      128, 0x23291993
+0,  198696960,  198696960,   602112,      128, 0x23291993
+0,  199299072,  199299072,   602112,      128, 0x23291993
+0,  199901184,  199901184,   602112,      128, 0x23291993
+0,  200503296,  200503296,   602112,      128, 0x23291993
+0,  201105408,  201105408,   602112,      128, 0x23291993
+0,  201707520,  201707520,   602112,      128, 0x23291993
+0,  202309632,  202309632,   602112,      128, 0x23291993
+0,  202911744,  202911744,   602112,      128, 0x23291993
+0,  203513856,  203513856,   602112,      128, 0x23291993
+0,  204115968,  204115968,   602112,      128, 0x23291993
+0,  204718080,  204718080,   602112,      128, 0x23291993
+0,  205320192,  205320192,   602112,      128, 0x23291993
+0,  205922304,  205922304,   602112,      128, 0x23291993
+0,  206524416,  206524416,   602112,      128, 0x23291993
+0,  207126528,  207126528,   602112,      128, 0x23291993
+0,  207728640,  207728640,   602112,      128, 0x23291993
+0,  208330752,  208330752,   602112,      128, 0x23291993
+0,  208932864,  208932864,   602112,      128, 0x23291993
+0,  209534976,  209534976,   602112,      128, 0x23291993
+0,  210137088,  210137088,   602112,      128, 0x23291993
+0,  210739200,  210739200,   602112,      128, 0x23291993
+0,  211341312,  211341312,   602112,      128, 0x23291993
+0,  211943424,  211943424,   602112,      128, 0x23291993
+0,  212545536,  212545536,   602112,      128, 0x23291993
+0,  213147648,  213147648,   602112,      128, 0x23291993
+0,  213749760,  213749760,   602112,      128, 0x23291993
+0,  214351872,  214351872,   602112,      128, 0x23291993
+0,  214953984,  214953984,   602112,      128, 0x23291993
+0,  215556096,  215556096,   602112,      128, 0x23291993
+0,  216158208,  216158208,   602112,      128, 0x23291993
+0,  216760320,  216760320,   602112,      128, 0x23291993
+0,  217362432,  217362432,   602112,      128, 0x23291993
+0,  217964544,  217964544,   602112,      128, 0x23291993
+0,  218566656,  218566656,   602112,      128, 0x23291993
+0,  219168768,  219168768,   602112,      128, 0x23291993
+0,  219770880,  219770880,   602112,      128, 0x23291993
+0,  220372992,  220372992,   602112,      128, 0x23291993
+0,  220975104,  220975104,   602112,      128, 0x23291993
+0,  221577216,  221577216,   602112,      128, 0x23291993
+0,  222179328,  222179328,   602112,      128, 0x23291993
+0,  222781440,  222781440,   602112,      128, 0x23291993
+0,  223383552,  223383552,   602112,      128, 0x23291993
+0,  223985664,  223985664,   602112,      128, 0x23291993
+0,  224587776,  224587776,   602112,      128, 0x23291993
+0,  225189888,  225189888,   602112,      128, 0x23291993
+0,  225792000,  225792000,   602112,      128, 0x23291993
+0,  226394112,  226394112,   602112,      128, 0x23291993
+0,  226996224,  226996224,   602112,      128, 0x23291993
+0,  227598336,  227598336,   602112,      128, 0x23291993
+0,  228200448,  228200448,   602112,      128, 0x23291993
+0,  228802560,  228802560,   602112,      128, 0x23291993
+0,  229404672,  229404672,   602112,      128, 0x23291993
+0,  230006784,  230006784,   602112,      128, 0x23291993
+0,  230608896,  230608896,   602112,      128, 0x23291993
+0,  231211008,  231211008,   602112,      128, 0x23291993
+0,  231813120,  231813120,   602112,      128, 0x23291993
+0,  232415232,  232415232,   602112,      128, 0x23291993
+0,  233017344,  233017344,   602112,      128, 0x23291993
+0,  233619456,  233619456,   602112,      128, 0x23291993
+0,  234221568,  234221568,   602112,      128, 0x23291993
+0,  234823680,  234823680,   602112,      128, 0x23291993
+0,  235425792,  235425792,   602112,      128, 0x23291993
+0,  236027904,  236027904,   602112,      128, 0x23291993
+0,  236630016,  236630016,   602112,      128, 0x23291993
+0,  237232128,  237232128,   602112,      128, 0x23291993
+0,  237834240,  237834240,   602112,      128, 0x23291993
+0,  238436352,  238436352,   602112,      128, 0x23291993
+0,  239038464,  239038464,   602112,      128, 0x23291993
+0,  239640576,  239640576,   602112,      128, 0x23291993
+0,  240242688,  240242688,   602112,      128, 0x23291993
+0,  240844800,  240844800,   602112,      128, 0x23291993
+0,  241446912,  241446912,   602112,      128, 0x23291993
+0,  242049024,  242049024,   602112,      128, 0x23291993
+0,  242651136,  242651136,   602112,      128, 0x23291993
+0,  243253248,  243253248,   602112,      128, 0x23291993
+0,  243855360,  243855360,   602112,      128, 0x23291993
+0,  244457472,  244457472,   602112,      128, 0x23291993
+0,  245059584,  245059584,   602112,      128, 0x23291993
+0,  245661696,  245661696,   602112,      128, 0x23291993
+0,  246263808,  246263808,   602112,      128, 0x23291993
+0,  246865920,  246865920,   602112,      128, 0x23291993
+0,  247468032,  247468032,   602112,      128, 0x23291993
+0,  248070144,  248070144,   602112,      128, 0x23291993
+0,  248672256,  248672256,   602112,      128, 0x23291993
+0,  249274368,  249274368,   602112,      128, 0x23291993
+0,  249876480,  249876480,   602112,      128, 0x23291993
+0,  250478592,  250478592,   602112,      128, 0x23291993
+0,  251080704,  251080704,   602112,      128, 0x23291993
+0,  251682816,  251682816,   602112,      128, 0x23291993
+0,  252284928,  252284928,   602112,      128, 0x23291993
+0,  252887040,  252887040,   602112,      128, 0x23291993
+0,  253489152,  253489152,   602112,      128, 0x23291993
+0,  254091264,  254091264,   602112,      128, 0x23291993
+0,  254693376,  254693376,   602112,      128, 0x23291993
+0,  255295488,  255295488,   602112,      128, 0x23291993
+0,  255897600,  255897600,   602112,      128, 0x23291993
+0,  256499712,  256499712,   602112,      128, 0x23291993
+0,  257101824,  257101824,   602112,      128, 0x23291993
+0,  257703936,  257703936,   602112,      128, 0x23291993
+0,  258306048,  258306048,   602112,      128, 0x23291993
+0,  258908160,  258908160,   602112,      128, 0x23291993
+0,  259510272,  259510272,   602112,      128, 0x23291993
+0,  260112384,  260112384,   602112,      128, 0x23291993
+0,  260714496,  260714496,   602112,      128, 0x23291993
+0,  261316608,  261316608,   602112,      128, 0x23291993
+0,  261918720,  261918720,   602112,      128, 0x23291993
+0,  262520832,  262520832,   602112,      128, 0x23291993
+0,  263122944,  263122944,   602112,      128, 0x23291993
+0,  263725056,  263725056,   602112,      128, 0x23291993
+0,  264327168,  264327168,   602112,      128, 0x23291993
+0,  264929280,  264929280,   602112,      128, 0x23291993
+0,  265531392,  265531392,   602112,      128, 0x23291993
+0,  266133504,  266133504,   602112,      128, 0x23291993
+0,  266735616,  266735616,   602112,      128, 0x23291993
+0,  267337728,  267337728,   602112,      128, 0x23291993
+0,  267939840,  267939840,   602112,      128, 0x23291993
+0,  268541952,  268541952,   602112,      128, 0x23291993
+0,  269144064,  269144064,   602112,      128, 0x23291993
+0,  269746176,  269746176,   602112,      128, 0x23291993
+0,  270348288,  270348288,   602112,      128, 0x23291993
+0,  270950400,  270950400,   602112,      128, 0x23291993
+0,  271552512,  271552512,   602112,      128, 0x23291993
+0,  272154624,  272154624,   602112,      128, 0x23291993
+0,  272756736,  272756736,   602112,      128, 0x23291993
+0,  273358848,  273358848,   602112,      128, 0x23291993
+0,  273960960,  273960960,   602112,      128, 0x23291993
+0,  274563072,  274563072,   602112,      128, 0x23291993
+0,  275165184,  275165184,   602112,      128, 0x23291993
+0,  275767296,  275767296,   602112,      128, 0x23291993
+0,  276369408,  276369408,   602112,      128, 0x23291993
+0,  276971520,  276971520,   602112,      128, 0x23291993
+0,  277573632,  277573632,   602112,      128, 0x23291993
+0,  278175744,  278175744,   602112,      128, 0x23291993
+0,  278777856,  278777856,   602112,      128, 0x23291993
+0,  279379968,  279379968,   602112,      128, 0x23291993
+0,  279982080,  279982080,   602112,      128, 0x23291993
+0,  280584192,  280584192,   602112,      128, 0x23291993
+0,  281186304,  281186304,   602112,      128, 0x23291993
+0,  281788416,  281788416,   602112,      128, 0x23291993