From patchwork Tue Apr 3 05:58:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mattias Amnefelt X-Patchwork-Id: 8298 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp3310943jad; Mon, 2 Apr 2018 22:59:11 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+b94IiWJ8Qio2kZS46zgMwW9Xy1Y2SMsxCo6ZUEDQSw2D1JJXAR+S26pqCP4R6lmXZvb/U X-Received: by 10.28.236.145 with SMTP id h17mr2564290wmi.43.1522735150797; Mon, 02 Apr 2018 22:59:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522735150; cv=none; d=google.com; s=arc-20160816; b=X2o86t+pc0bsZ7/aC7LNPUZQPNkMuzA7+LsyInGxRt5Xo+sKiLGlbBzeFSJ8yDUMv8 L6LWKbXwe5Pagq658aOnkX6GjtsJDDo4t8sYFwEgySxg50XKSSGnBEr0HrFkTEJonWlb UI4ixrXMafZf2E3NVdLvwzucLhpamhNTuiWkGHGJq5L5IaFEhSMkeHNkjVVexbLYjr1E 2qOS/6ClJ8ZwdhthLz8W2himV18xZnU7blmRbK38wbkiyf/dXutRcAByxWCpsYihjhKt 4AuAntauN4oZGI/fk8qb4G2r5C8OEHNDKjLasS3aGYueznQ6nLJ5ESEp4NKRo44Yn97T Hmxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:to:delivered-to :arc-authentication-results; bh=K6V2Go16eZnl9y6UNQQITsDTIfpC4wHDBPizqj8ozUs=; b=HqK3P8K7zo0UMPUyU7gxrkmnFmwJ9H9Eb6UZkkqJrAryZPupfgHP78Yrn96Zdbl1n1 6zxCCa8zqprymZVQ19rpPDy7CN9rkhrhRdVcn/hGYjHxUIUr1G18Ad8uTtIIEHIIk1qC nHb3C8D9SppgYnbehuUvJL5wND0ohGiXFfofYD9w4SjeYVo4QW4CCHTgWshh4lTO6Ajd EjaVwVJUlOhmzvpzIws0SGgUJSjqJX/v0rH30uZXCDFZu6V3oa77Hm2B8wKAzEvkhqAO 83Vdd5Klwce/SJO2dESlhiikQtrJeaXTqNkOVV7N7HThf6xtA78kobxmUw0OAurmpyOD qVNQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id m27si1506959wrm.408.2018.04.02.22.59.06; Mon, 02 Apr 2018 22:59:10 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 33D15689B93; Tue, 3 Apr 2018 08:58:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from moist.coloti.se (moist.coloti.se [159.253.24.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 899F3680872 for ; Tue, 3 Apr 2018 08:58:37 +0300 (EEST) Received: from pluto.avm.se (c83-249-32-182.bredband.comhem.se [83.249.32.182]) by moist.coloti.se (Postfix) with ESMTPSA id 5F7EB198005F for ; Tue, 3 Apr 2018 07:58:57 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by pluto.avm.se (Postfix) with ESMTP id A2DCBE0071 for ; Tue, 3 Apr 2018 07:59:19 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at pluto.avm.se X-Spam-Flag: NO X-Spam-Score: -2.9 X-Spam-Level: X-Spam-Status: No, score=-2.9 tagged_above=-200 required=6.31 tests=[ALL_TRUSTED=-1, BAYES_00=-1.9] autolearn=ham Received: from pluto.avm.se ([127.0.0.1]) by localhost (pluto.avm.se [127.0.0.1]) (amavisd-new, port 10024) with LMTP id C2oqzPR8XUo1 for ; Tue, 3 Apr 2018 07:59:11 +0200 (CEST) Received: from lapetus.cantemo.com (c-969671d5.018-180-73746f39.cust.bredbandsbolaget.se [213.113.150.150]) by pluto.avm.se (Postfix) with ESMTPSA id B14FEE002C for ; Tue, 3 Apr 2018 07:59:11 +0200 (CEST) To: ffmpeg-devel@ffmpeg.org References: <1600c26d-13ac-8e95-7cda-aab5a79f29ca@avm.se> From: Mattias Amnefelt Message-ID: Date: Tue, 3 Apr 2018 07:58:53 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: Content-Language: sv Subject: Re: [FFmpeg-devel] [PATCH] libavformat/aac: Parse all ID3 tags present between ADTS frames X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Yes, my feeling was also that it's better to handle this when possible. You are of course correct that the two tags needs to be inbetween frames. Sorry about that, I stripped the sample down too much. I updated with a sample which has two frames. This new sample fails the test without the patch. /mattiasa On 2018-04-02 23:25, Richard Shaffer wrote: > It seems like some software can insert an additional ID3v2 tag instead > of appending a frame to an existing one. One could argue that that is > somewhat broken, but I agree it's better to handle it instead of > returning an error. The changes in aacdec.c look ok to me. > > The fate sample you provided has two tags at the beginning of the > file. These will actually get parsed by avformat_open_input calling > ff_id3v2_read_dict and not by the adts demuxer. The ff_id3v2_read_dict > code path will already parse multiple tags, which is why the test > passes. In order to exercise your code change, the ID3v2 tags would > have to be between ADTS frames. > > -Richard > > On Mon, Apr 2, 2018 at 4:35 AM, Mattias Amnefelt wrote: >> This is a follow-up to https://patchwork.ffmpeg.org/patch/7477/ and changes >> so all ID3 tags between ADTS frames gets parsed, not just the first one. >> >> Sample media for the included fate test is available at >> http://mattias.amnefe.lt/tmp/id3v2_two_tags.aac >> >> >> >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel From 8d587983b6cc5c535e29f0898d4cac433cd0a609 Mon Sep 17 00:00:00 2001 From: Mattias Amnefelt 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 --- 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 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..fc581f81ad 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 -f aac -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