From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id D0574429BE for ; Sun, 10 Apr 2022 07:50:37 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 30DE568B32D; Sun, 10 Apr 2022 10:50:34 +0300 (EEST) Received: from conssluserg-02.nifty.com (conssluserg-02.nifty.com [210.131.2.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0D47968B231 for ; Sun, 10 Apr 2022 10:50:26 +0300 (EEST) Received: from [192.168.0.9] (M106073025034.v4.enabler.ne.jp [106.73.25.34]) (authenticated) by conssluserg-02.nifty.com with ESMTP id 23A7nrOu012113 for ; Sun, 10 Apr 2022 16:49:57 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-02.nifty.com 23A7nrOu012113 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1649576997; bh=dBfzys9uIim/hg6dmCAOtbX/PS3h6SQJYpVON7uB4dQ=; h=Date:Subject:To:References:From:In-Reply-To:From; b=lQc4rFsMVSY3UfAT1CvQjYDZBdUSlcCYz2/awkOy7g5T7YAq9RMRSdMkF8IxQoN+d EiDDqYwLC3q1LL8B6jhj7hILZxm5/akkV6pD+OTGZgjk4624yyvLOEVR6wFrorbIzn t+8DN2KBA2A2cpRSesWNQxqov+Cd5CZTug0kFgF9Ku+IbZkeVAZHx3XYJI0Odmwonw Fif2WQN1j6/00dJWA0+Rvdke3yHo0qsem2Bld/U8C0CBVLquZdSbWKFXUwElJyc9ko CRwFOP2iXwHqxHyW65qM9CSpFW1DUBE1qEAkkWMx6oW0FlynRxzt70tdB45WZPlEnX HGYmlQ/cR8wow== X-Nifty-SrcIP: [106.73.25.34] Message-ID: Date: Sun, 10 Apr 2022 16:49:53 +0900 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220409151518.38945-1-aimingoff@pc.nifty.jp> <536d4ee2-c767-fa5c-3543-5748c8f9686@passwd.hu> From: TADANO Tokumei In-Reply-To: <536d4ee2-c767-fa5c-3543-5748c8f9686@passwd.hu> Subject: Re: [FFmpeg-devel] [PATCH] libavformat/mpegts.c: add: parse EIT descriptors X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Ck9uIDIwMjIvMDQvMTAgMzozNCwgTWFydG9uIEJhbGludCB3cm90ZToKPiAKPiAKPiBPbiBTdW4s IDEwIEFwciAyMDIyLCBUQURBTk8gVG9rdW1laSB3cm90ZToKPiAKPj4gVGhpcyBwYXRjaCBhZGQg dG8gcGFyc2UgZGVzY3JpcHRvcnMgb24gRUlUIHBhY2tldHMuCj4+IFRoZSBwYXRjaCBpcyBpbnRl bmRlZCB0byBzZXQgaW5mb3JtYXRpb24gdG8gY3VycmVudCBwcm9ncmFtIGFuZC9vcgo+PiBBL1Yg c3RyZWFtLgo+PiBPbiBKYXBhbmVzZSBJU0RCLCBzb21lIGltcG9ydGFudCAvIHVzZWZ1bCBpbmZv cm1hdGlvbiBpcyBwcm92aWRlZAo+PiB2aWEgRUlUIG9ubHkuCj4+IHJlZjogQVJJQiBTVEQgQjEw IFRhYmxlIDYtMSwgU2VjdGlvbiA2LjEsIFBhcnQgMi4KPiAKPiBsaWJhdmZvcm1hdCBpcyBhIGdl bmVyaWMgQS1WIGRlbXV4IGxpYnJhcnksIHRoZXJlZm9yZSB3ZSBwcm9iYWJseSBkb24ndCB3YW50 IHRvIGFkZCBmdWxsIG9yIGV2ZW4gcGFydGlhbCBFSVQgcGFyc2luZyBjYXBhYmlsaXRlcyB0byBp dC4gRUlUIGlzIGV4cG9ydGVkIGFzIGEgZGF0YSBzdHJlYW0sIHRoZSBBUEkgdXNlciBjYW4gdXNl IHRoYXQgdG8gZ2V0IGFsbCBFSVQgcmVsYXRlZCBpbmZvcm1hdGlvbi4KClRoYW5rcyBmb3IgeW91 ciBjb21tZW50cy4KCkkgaGF2ZSBhIHBsYW4gdG8gYWRkIEVJVCBwYXJzaW5nIGNhcGFiaWxpdGll cyBmb3IgSmFwYW5lc2UgSVNEQjoKCiogZHVhbC1tb25vcmFsIGF1ZGlvIHN0cmVhbTogQXVkaW8g Y29tcG9uZW50IGRlc2NyaXB0b3IgKDB4QzQpCiAgIGxpYmF2Y29kZWMgYWxyZWFkeSBoYXMgY2Fw YWJpbGl0eSB0byBoYW5kbGUgSmFwYW5lc2UgZHVhbC1tb25vIGF1ZGlvLgogICAobGliYXZjb2Rl Yy9wYWNrZXQuaCwgbGliYXZjb2RlYy9hdnBhY2tldC5jLCBsaWJhdmNvZGVjL2FhY2RlY190ZW1w bGF0ZS5jLCAuLi4pCiAgIEhvd2V2ZXIsIHRoZSBpbmZvcm1hdGlvbiBvZiBkdWFsLW1vbm8gbW9k ZSBpcyBwcm92aWRlZCB2aWEgb25seSB0aGUgRUlUIGRlc2NyaXB0b3IuCiAgIFRodXMsIG1vc3Qg b2YgYXBwbGljYXRpb24gdHJlYXQgdGhlIGR1YWwtbW9ubyBhdWRpbyBzdHJlYW0gYXMgc3RlcmVv LgogICByZWY6IEFSSUIgU1RELUIxMCBQYXJ0IDIsIFNlY3Rpb24gNi4yLjI2CiAgIFRoZXJlIGlz IG5vIHN0YW5kYXJkIHdheSB0byBwYXNzIHRoZSBkdWFsLW1vbm8gYXVkaW8gaW5mb3JtYXRpb24u CiAgIE15IGlkZWEgaXMgdG8gYWRkIHNpZGUgZGF0YSBvZiBBVl9QS1RfREFUQV9KUF9EVUFMTU9O TyB0byB0aGUgYXVkaW8gc3RyZWFtCiAgIChTaW1pbGFyIHdheSB0byBET1ZJKS4KICAgVG8gcGxh eSB0aGUgZHVhbC1tb25vIGF1ZGlvIGNvcnJlY3RseSwgYXBwbGljYXRpb24gaGF2ZSB0byBzZXQg KG9yIHBhc3MpCiAgIEFWX1BLVF9EQVRBX0pQX0RVQUxNT05PIHNpZGUgZGF0YSBpbnRvIGVhY2gg YXVkaW8gcGFja2V0IGlmIHRoZSBzdHJlYW0gaGFzCiAgIEFWX1BLVF9EQVRBX0pQX0RVQUxNT05P IHNpZGUgZGF0YS4gKFRoZSBzdHJlYW0ncyBzaWRlIGRhdGEgaW5kaWNhdGVzIGRlZmF1bHQKICAg bW9kZSwgYW5kIHBhY2tldCdzIHNpZGUgZGF0YSBzaG91bGQgYmUgc2V0IHVzZXIgc2VsZWN0ZWQg bW9kZSkKCiogTGFuZ3VhZ2UgaW5mb3JtYXRpb24gb2YgQVJJQiBDYXB0aW9uOiBEYXRhIGNvbnRl bnQocykgZGVzY3JpcHRvciAoMHhDNykKICAgT24gRFZCLCBzaW1pbGFyIGluZm9ybWF0aW9uIGlz IHByb3ZpZGVkIGJ5IFN1YnRpdGxpbmcgZGVzY3JpcHRvciAoMHg1OSkuCiAgIEJ1dCBvbiBJU0RC LCBzdWNoIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIGJ5IHRoaXMgRUlUIGRlc2NyaXB0b3IuCiAg IHJlZjogQVJJQiBTVEQtQjEwIFBhcnQgMiwgU2VjdGlvbiA2LjIuMjggYW5kIEFubmV4IEoKICAg ICAgICBBUklCIFNURC1CMjQgRmFzY2ljbGUgMSBQYXJ0IDMgQ2hhcHRlciA5IFRhYmxlIDktMTcK Ck9uIERWQiwgbW9zdCBpbXBvcnRhbnQgaW5mb3JtYXRpb24gZm9yIEEvViBzdHJlYW0gYXJlIHBy b3ZpZGVkIGJ5IFBNVC4KQnV0IG9uIElTREIsIHNvbWUgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFy ZSBsYWNrZWQgd2l0aG91dCBwYXJzaW5nIEVJVC4KClJlZ2FyZHMsClRBREFOTwoKPiBSZWdhcmRz LAo+IE1hcnRvbgo+IAo+Pgo+PiBUaGlzIHBhdGNoIG9ubHkgcGFyc2Ugc2hvcnQgZXZlbnQgZGVz Y3JpcHRvciAoMHg0ZCkgYW5kIHNldCB0aXRsZQo+PiBpbmZvcm1hdGlvbiB0byB0aGUgcHJvZ3Jh bS4gSXQgbWF5IG5vdCBiZSB1c2VmdWwsIGJ1dCBhIGdvb2QgZXhhbXBsZQo+PiBvZiBFSVQgZGVz Y3JpcHRvciBjb21tb24gZm9yIERWQiBhbmQgSVNEQi4KPj4KPj4gTm90ZSB0aGF0IGl0IG9ubHkg cGFyc2UgRUlUIGZvciBhY3R1YWwgYW5kIHByZXNlbnQgVFMgc3RyZWFtIGFzIGJsbG93Ogo+PiAq IFBhcnNlIEVJVCB0YWJsZV9pZCAweDRFIChhY3R1YWwgVFMgc3RyZWFtKSBvbmx5Lgo+PiDCoHJl ZjogRFZCIEJsdWUgQm9vayBBMDM4IChFTiAzMDAgNDY4KSBUYWJsZSAyLCBTZWN0aW9uIDUuMS4z Lgo+PiAqIFBhcnNlIHNlY3Rpb24gbnVtYmVyIDB4MDAgb25seS4KPj4gwqBTZWN0aW9uIG51bWJl ciAweDAwIGlzIHByZXNlbnQgZXZlbnQuCj4+IMKgU2VjdGlvbiBudW1iZXIgMHgwMSBpcyBmb2xs b3dpbmcgKGkuZS4sIG5vdCBmb3IgcHJlc2VudCBzdHJlYW0pLgo+PiDCoFNlY3Rpb24gbnVtYmVy IDB4MDIgb3IgbGF0ZXIgbWF5IGNvbnRhaW4gZXZlbnQgZm9yIHByZXNlbnQgc3RyZWFtLAo+PiDC oGJ1dCBpdCBpcyBoYXJkIHRvIGRpc3Rpbmd1aXNoIGFuZCByYXJlbHkgc2VudC4KPj4gwqByZWY6 IERWQi1TSSBHdWlkZWxpbmVzIChUUyAxMDEgMjExKSBTZWN0aW9uIDQuMS40LjEuCj4+ICogRmlu ZCBhIHByb2dyYW0gYXNzb2NpYXRlZCB0byB0aGUgRUlUIGluIGFscmVhZHkgaW5pdGlhbGl6ZWQK Pj4gwqBBVlByb2dyYW0gYW5kIFByb2dyYW0gc3RydWN0dXJlcy4KPj4gwqBJZiBubyBwcm9ncmFt IGZvdW5kLCBhYm9ydCB0byBwYXJzZSB0aGUgRUlULgo+Pgo+PiBTaW5jZSBFSVQgcGFja2V0cyBt YXkgYmUgc2VudCBzZXZlcmFsIHRpbWVzIGZvciB0aGUgc2FtZSBwcm9ncmFtLAo+PiBhZGQgJ2Vp dF92ZXJzaW9uJyBpbiBQcm9ncmFtIHN0cnVjdHVyZSBhbmQgaWdub3JlIEVJVHMgd2l0aCB0aGUK Pj4gc2FtZSB2ZXJzaW9uIGFzIHByZXZpb3VzbHkgcGFyc2VkIG9uZS4KPj4KPj4gVGhlcmUgaXMg YSB3YXJuaW5nOiAidmFyaWFibGUgJ2xhbmd1YWdlJyBzZXQgYnV0IG5vdCB1c2VkIiBhdAo+PiBj b21waWxhdGlvbi4gSXQgc2hvdWxkIGJlIHJlc29sdmVkIGJ5IGxhdGVyIHBhdGNoZXMuCj4+Cj4+ IEFuIHNhbXBsZSBEVkIgVFMgZmlsZSBpcyBmb3VuZCBhdDoKPj4gwqBodHRwczovL3N0cmVhbXMu dmlkZW9sYW4ub3JnL3N0cmVhbXMvdHMvVGVsZXRleHQvVEVMRVRFWFRPLnRzCj4+IEFmdGVyIGFw bHlpbmcgdGhpcyBwYXRjaCwgZmZwcm9iZSBURUxFVEVYVE8udHMgc2hvd3MgdGlsZSBhczoKPj4g wqBQcm9ncmFtIDM0MAo+PiDCoMKgIE1ldGFkYXRhOgo+PiDCoMKgwqDCoCB0aXRsZcKgwqDCoMKg wqDCoMKgwqDCoMKgIDogTkFWWSA6IElOVkVTVElHQUNJw5NOIENSSU1JTkFMCj4+Cj4+IE1hbnkg c2FtcGxlIElTREIgVFMgZmlsZXMgYXJlIGZvdW5kIGF0Ogo+PiDCoGh0dHBzOi8vc3RyZWFtcy52 aWRlb2xhbi5vcmcvc3RyZWFtcy90cy9BUklCL2phcGFuLwo+PiBNb3N0IG9mIFRTIGZpbGVzIHNo b3cgdGhlaXIgdGl0bGUgYnkgZmZwcm9iZSwgYnV0IHVucmVjb2duaXphYmxlLgo+PiBJdCBpcyBk dWUgdG8gZW5jb2RpbmcgcHJvYmxlbSBvZiB0ZXh0IHN0cmluZy4KPj4gSXQgc2hvdWxkIGJlIGFs c28gcmVzb2x2ZWQgYnkgZnV0dXJlIHBhdGNoZXMuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFRBREFO TyBUb2t1bWVpIDxhaW1pbmdvZmZAcGMubmlmdHkuanA+Cj4+IC0tLQo+PiBsaWJhdmZvcm1hdC9t cGVndHMuYyB8IDEyOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst Cj4+IDEgZmlsZSBjaGFuZ2VkLCAxMjcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPj4K Pj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L21wZWd0cy5jIGIvbGliYXZmb3JtYXQvbXBlZ3Rz LmMKPj4gaW5kZXggNDlmNzczNTEyMy4uODQxN2Q3MWZiMyAxMDA2NDQKPj4gLS0tIGEvbGliYXZm b3JtYXQvbXBlZ3RzLmMKPj4gKysrIGIvbGliYXZmb3JtYXQvbXBlZ3RzLmMKPj4gQEAgLTEyMyw2 ICsxMjMsOCBAQCBzdHJ1Y3QgUHJvZ3JhbSB7Cj4+Cj4+IMKgwqDCoCAvKiogaGF2ZSB3ZSBmb3Vu ZCBwbXQgZm9yIHRoaXMgcHJvZ3JhbSAqLwo+PiDCoMKgwqAgaW50IHBtdF9mb3VuZDsKPj4gKwo+ PiArwqDCoMKgIGludCBlaXRfdmVyc2lvbjsKPj4gfTsKPj4KPj4gc3RydWN0IE1wZWdUU0NvbnRl eHQgewo+PiBAQCAtMzA0LDYgKzMwNiw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyX3Byb2dyYW0oc3Ry dWN0IFByb2dyYW0gKnApCj4+IMKgwqDCoCBwLT5uYl9waWRzID0gMDsKPj4gwqDCoMKgIHAtPm5i X3N0cmVhbXMgPSAwOwo+PiDCoMKgwqAgcC0+cG10X2ZvdW5kID0gMDsKPj4gK8KgwqDCoCBwLT5l aXRfdmVyc2lvbiA9IC0xOwo+PiB9Cj4+Cj4+IHN0YXRpYyB2b2lkIGNsZWFyX3Byb2dyYW1zKE1w ZWdUU0NvbnRleHQgKnRzKQo+PiBAQCAtMjYxNiw4ICsyNjE5LDEyIEBAIHN0YXRpYyB2b2lkIHBh dF9jYihNcGVnVFNGaWx0ZXIgKmZpbHRlciwgY29uc3QgdWludDhfdCAqc2VjdGlvbiwgaW50IHNl Y3Rpb25fbGVuCj4+IHN0YXRpYyB2b2lkIGVpdF9jYihNcGVnVFNGaWx0ZXIgKmZpbHRlciwgY29u c3QgdWludDhfdCAqc2VjdGlvbiwgaW50IHNlY3Rpb25fbGVuKQo+PiB7Cj4+IMKgwqDCoCBNcGVn VFNDb250ZXh0ICp0cyA9IGZpbHRlci0+dS5zZWN0aW9uX2ZpbHRlci5vcGFxdWU7Cj4+IC3CoMKg wqAgY29uc3QgdWludDhfdCAqcCwgKnBfZW5kOwo+PiArwqDCoMKgIGNvbnN0IHVpbnQ4X3QgKnAs ICpwX2VuZCwgKmRlc2NfbGlzdF9lbmQsICpkZXNjX2VuZDsKPj4gwqDCoMKgIFNlY3Rpb25IZWFk ZXIgaDEsICpoID0gJmgxOwo+PiArwqDCoMKgIEFWUHJvZ3JhbSAqcHJvZ3JhbTsKPj4gK8KgwqDC oCBzdHJ1Y3QgUHJvZ3JhbSAqcHJnOwo+PiArwqDCoMKgIGludCBkZXNjX2xlbjsKPj4gK8KgwqDC oCBjaGFyIGxhbmd1YWdlWzI1Ml07Cj4+Cj4+IMKgwqDCoCAvKgo+PiDCoMKgwqDCoCAqIFNvbWV0 aW1lcyB3ZSByZWNlaXZlIEVQRyBwYWNrZXRzIGJ1dCBTRFQgdGFibGUgZG8gbm90IGhhdmUKPj4g QEAgLTI2NDUsNiArMjY1Miw3IEBAIHN0YXRpYyB2b2lkIGVpdF9jYihNcGVnVFNGaWx0ZXIgKmZp bHRlciwgY29uc3QgdWludDhfdCAqc2VjdGlvbiwgaW50IHNlY3Rpb25fbGVuCj4+IMKgwqDCoMKg wqDCoMKgIHJldHVybjsKPj4KPj4gwqDCoMKgIGF2X2xvZyh0cy0+c3RyZWFtLCBBVl9MT0dfVFJB Q0UsICJFSVQ6IHRpZCByZWNlaXZlZCA9ICUuMDJ4XG4iLCBoLT50aWQpOwo+PiArwqDCoMKgIGhl eF9kdW1wX2RlYnVnKHRzLT5zdHJlYW0sIHNlY3Rpb24sIHNlY3Rpb25fbGVuKTsKPj4KPj4gwqDC oMKgIC8qKgo+PiDCoMKgwqDCoCAqIFNlcnZpY2VfaWQgMHhGRkZGIGlzIHJlc2VydmVkLCBpdCBp bmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCBFSVQgdGFibGUKPj4gQEAgLTI2NjQsNyArMjY3Miwx MjQgQEAgc3RhdGljIHZvaWQgZWl0X2NiKE1wZWdUU0ZpbHRlciAqZmlsdGVyLCBjb25zdCB1aW50 OF90ICpzZWN0aW9uLCBpbnQgc2VjdGlvbl9sZW4KPj4KPj4gwqDCoMKgIG5ld19kYXRhX3BhY2tl dChzZWN0aW9uLCBzZWN0aW9uX2xlbiwgdHMtPnBrdCk7Cj4+IMKgwqDCoCB0cy0+cGt0LT5zdHJl YW1faW5kZXggPSB0cy0+ZXBnX3N0cmVhbS0+aW5kZXg7Cj4+IC3CoMKgwqAgdHMtPnN0b3BfcGFy c2UgPSAxOwo+PiArCj4+ICvCoMKgwqAgLyogcGFyc2UgcHJlc2VudCBldmVudCBvZiBhY3R1YWwg VFMgc3RyZWFtIG9ubHkgKi8KPj4gK8KgwqDCoCBpZiAoaC0+dGlkICE9IEVJVF9USUQpCj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICvCoMKgwqAgaWYgKCFoLT5jdXJyZW50X25leHQpCj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICvCoMKgwqAgaWYgKHRzLT5za2lwX2NoYW5nZXMp Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICsKPj4gK8KgwqDCoCBhdl9sb2codHMtPnN0 cmVhbSwgQVZfTE9HX1RSQUNFLCAic2lkPTB4JXggc2VjX251bT0lZC8lZCB2ZXJzaW9uPSVkXG4i LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgaC0+aWQsIGgtPnNlY19udW0sIGgtPmxhc3Rfc2Vj X251bSwgaC0+dmVyc2lvbik7Cj4+ICsKPj4gK8KgwqDCoCAvKiBEVkItU0kgR3VpZGVsaW5lcyAo VFMgMTAxIDIxMSkgNC4xLjQuMSAqLwo+PiArwqDCoMKgIC8qIDB4MDAgaW5kaWNhdGVzIHByZXNl bnQgZXZlbnQsIDB4MDEgaW5kaWNhdGVzIGZvbGxvd2luZyBldmVudCAqLwo+PiArwqDCoMKgIC8q IDB4MDIgYW5kIGFmdGVyIGlzIG9wdGlvbmFsICovCj4+ICvCoMKgwqAgaWYgKGgtPnNlY19udW0g PiAwKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArCj4+ICvCoMKgwqAgcHJvZ3JhbSA9 IE5VTEw7Cj4+ICvCoMKgwqAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cy0+c3RyZWFtLT5uYl9wcm9n cmFtczsgaSsrKQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHRzLT5zdHJlYW0tPnByb2dyYW1zW2ld LT5pZCA9PSBoLT5pZCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJvZ3JhbSA9IHRzLT5z dHJlYW0tPnByb2dyYW1zW2ldOwo+PiArwqDCoMKgIGlmICghcHJvZ3JhbSB8fCBwcm9ncmFtLT5u Yl9zdHJlYW1faW5kZXhlcyA8PSAwKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArCj4+ ICvCoMKgwqAgcHJnID0gZ2V0X3Byb2dyYW0odHMsIGgtPmlkKTsKPj4gK8KgwqDCoCBpZiAoIXBy ZykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gK8KgwqDCoCBpZiAoaC0+dmVyc2lvbiA9 PSBwcmctPmVpdF92ZXJzaW9uKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArwqDCoMKg IHByZy0+ZWl0X3ZlcnNpb24gPSBoLT52ZXJzaW9uOwo+PiArCj4+ICvCoMKgwqAgLyogc2tpcCB0 c19pZCwgb3JpZ2luYWxfbmV0d29ya19pZCwgbGFzdF9zZWN0aW9uX25vLCBsYXN0X3RhYmxlX2lk ICovCj4+ICvCoMKgwqAgaWYgKHAgKyA2ID4gcF9lbmQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm47Cj4+ICvCoMKgwqAgcCArPSA2Owo+PiArCj4+ICvCoMKgwqAgZm9yICg7Oykgewo+PiArwqDC oMKgwqDCoMKgwqAgaW50IGVpZCwgdmFsOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBlaWQgPSBn ZXQxNigmcCwgcF9lbmQpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGVpZCA8IDApCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgwqDCoMKgwqAgewo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpbnQgaGgsIG1tLCBzcywgZF9oaCwgZF9tbSwgZF9zcywgcnVubmlu Z19zdGF0dXM7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZhbCA9IGdldDE2KCZwLCBwX2Vu ZCk7IC8qIERhdGUgKi8KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHZhbCA8IDApCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGhoID0gZ2V0OCgmcCwgcF9lbmQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpZiAoaGggPCAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtbSA9IGdldDgoJnAsIHBfZW5kKTsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKG1tIDwgMCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3MgPSBnZXQ4KCZwLCBw X2VuZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChzcyA8IDApCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGRfaGggPSBnZXQ4KCZwLCBwX2VuZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChk X2hoIDwgMCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZF9tbSA9IGdldDgoJnAsIHBfZW5kKTsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaWYgKGRfbW0gPCAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkX3NzID0gZ2V0OCgmcCwg cF9lbmQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZF9zcyA8IDApCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGRlc2NfbGVuID0gZ2V0MTYoJnAsIHBfZW5kKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKGRlc2NfbGVuIDwgMCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi cmVhazsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnVubmluZ19zdGF0dXMgPSAoZGVzY19s ZW4gJiAweGUwMDApID4+IDU7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyh0cy0+ c3RyZWFtLCBBVl9MT0dfVFJBQ0UsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgImVpZD0weCUwNHggc3RhcnQgJTAyeDolMDJ4OiUwMnggZHVyYXRpb24gJTAyeDolMDJ4 OiUwMnggcnVubmluZ19zdGF0dXM9JWRcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZWlkLCBoaCwgbW0sIHNzLCBkX2hoLCBkX21tLCBkX3NzLCBydW5uaW5nX3N0 YXR1cyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXNjX2xlbiAm PSAweDBmZmY7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXNjX2xpc3RfZW5kID0gcCArIGRlc2NfbGVu Owo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGRlc2NfbGlzdF9lbmQgPiBwX2VuZCkKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoOzsp IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGRlc2NfdGFnOwo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGRlc2NfdGFnID0gZ2V0OCgmcCwgZGVzY19saXN0X2VuZCk7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChkZXNjX3RhZyA8IDApCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRl c2NfbGVuID0gZ2V0OCgmcCwgZGVzY19saXN0X2VuZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGRlc2NfZW5kID0gcCArIGRlc2NfbGVuOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAoZGVzY19sZW4gPCAwIHx8IGRlc2NfZW5kID4gZGVzY19saXN0X2VuZCkKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBhdl9sb2codHMtPnN0cmVhbSwgQVZfTE9HX0RFQlVHLCAidGFnOiAweCUwMnggbGVuPSVk XG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlc2NfdGFnLCBk ZXNjX2xlbik7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3dpdGNoIChkZXNjX3Rh Zykgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjYXNlIDB4NGQ6wqAgLyogc2hvcnQgZXZl bnQgZGVzY3JpcHRvciAqLwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNoYXIgKnR4dDsKPj4gKwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGRlc2NfbGVuIDwg MykKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJl YWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsYW5ndWFnZVsw XSA9IGdldDgoJnAsIGRlc2NfZW5kKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGxhbmd1YWdlWzFdID0gZ2V0OCgmcCwgZGVzY19lbmQpOwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGFuZ3VhZ2VbMl0gPSBnZXQ4KCZwLCBkZXNj X2VuZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsYW5ndWFn ZVszXSA9ICdcMCc7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0 eHQgPSBnZXRzdHI4KCZwLCBkZXNjX2VuZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAoIXR4dCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBhdl9kaWN0X3NldCgmcHJvZ3JhbS0+bWV0YWRhdGEsICJ0aXRsZSIsIHR4dCwg MCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9mcmVlKHR4 dCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZWZh dWx0Ogo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBkZXNjX2Vu ZDsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIHAgPSBkZXNjX2xpc3Rf ZW5kOwo+PiArwqDCoMKgIH0KPj4gfQo+Pgo+PiBzdGF0aWMgdm9pZCBzZHRfY2IoTXBlZ1RTRmls dGVyICpmaWx0ZXIsIGNvbnN0IHVpbnQ4X3QgKnNlY3Rpb24sIGludCBzZWN0aW9uX2xlbikKPj4g LS0gCj4+IDIuMzAuMgo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+PiBmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IGZmbXBlZy1kZXZlbEBm Zm1wZWcub3JnCj4+IGh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1k ZXZlbAo+Pgo+PiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKPj4g ZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJl Ii4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGZm bXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwo+IGh0dHBz Oi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAo+IAo+IFRvIHVuc3Vi c2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbAo+IGZmbXBlZy1kZXZlbC1yZXF1ZXN0 QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QK ZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGlu Zm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1h aWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2Ny aWJlIi4K