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 8C7864B2FB for ; Mon, 3 Jun 2024 13:23:49 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 635C168D688; Mon, 3 Jun 2024 16:23:46 +0300 (EEST) Received: from mail-lj1-f179.google.com (mail-lj1-f179.google.com [209.85.208.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9A44A68D638 for ; Mon, 3 Jun 2024 16:23:39 +0300 (EEST) Received: by mail-lj1-f179.google.com with SMTP id 38308e7fff4ca-2e6f2534e41so36076861fa.0 for ; Mon, 03 Jun 2024 06:23:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1717421018; x=1718025818; darn=ffmpeg.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=REdy+E8McQ/aDIWVIQpZzrIVmGxCaF8SBTFpvo/0Kvc=; b=WPVZuT91JK9QtR8zFnC2eCko6DPlSgy/m5xma/bOGvBrOWzczqqVE+ZlsJaFVt9Who aaN1hVz/552EKrZ6MbANRQA4YfSjGhXFO0jtoNKjAhZU079iiAIWvMn+uHmx6Ue5rg5T Obk1v9E0O662cBunZrySvu07ECHmRnUHdQv4UHecKy+c4CS4TkssgWxs1BFSJnvE/LmP Y1uvrVg0IBD0MiyOIAZVMWGAtXPKbQbdqBIf7ju52hfGXt/Pf5TzoFFu7GzFo3mBbXPU yvOZ7cRBVuaxl8B0Jbl3x+4/Uih4fA0bcyLTH273yG5e9D2KrEQH2Vq1tY1rMzY8HICh l4rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717421018; x=1718025818; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=REdy+E8McQ/aDIWVIQpZzrIVmGxCaF8SBTFpvo/0Kvc=; b=GnsnOw7vIW/8sf4hTUGthfldznJW2svQMxJQ/AwZgY6VJztj5fykd091+aZjQDXsGK 8arXkvR2mIwDNwlWakUnr46tFiEf4Y4X273dx5f9jQDmFh25xAges7JVH+SGhKxD2D/p 11uhIPKA6IYX+vMr8bFpaTsUuroSHKMYD49ZqUbRO3N/ZR7wGk16oh9Hegrxd1TACn55 WIvmB5lfvIyOvayudC7IKiIZdo/3B+rHalsxjQia8aZ6+gVVcnxtEkKaJhVyYIqzJWlw VLMfoLdqeh7bcQSgz9aLM7HRgPMShE+Jq6S6njKa4rOO8LwiGryCYWTM104qBVTom7gV vlgQ== X-Gm-Message-State: AOJu0YxOBauWLjTSmBbLa1JPTabYqr4u1ntOScfatv317VfTk18JXKUj 7ynpjFgIHKhGNfN9cpqBQaAah3282/oPsZlk8lmbrE5PiJ5NOqLQjwzFwDrKhymb2tGZIUdWXW3 9eMYw57e4T5kDyzyyEJOJ3Mvt32HE4cfrmbc= X-Google-Smtp-Source: AGHT+IGYx97dc6TfajAYlN+4XiRHscnnI/ymy5Ki+Kue9a6ouXKwLZs+RmzVY97FZLatIOmMyOOCPfyxzdfxyAmkYcc= X-Received: by 2002:a05:651c:1059:b0:2ea:8462:5927 with SMTP id 38308e7fff4ca-2ea950e5aebmr59101721fa.15.1717421017858; Mon, 03 Jun 2024 06:23:37 -0700 (PDT) MIME-Version: 1.0 References: <20240528162629.28698-1-chris10317h5@gmail.com> <20240528162629.28698-2-chris10317h5@gmail.com> In-Reply-To: <20240528162629.28698-2-chris10317h5@gmail.com> From: Nuo Mi Date: Mon, 3 Jun 2024 21:23:32 +0800 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v4 1/1] avcodec: add external enc libvvenc for H266/VVC 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: SGkgYWxsLAoKVGVzdGVkIHdpdGgKLi9mZm1wZWcgLWYgbGF2ZmkgLWkgdGVzdHNyYz1kdXJhdGlv bj0xMDpzaXplPTEyODB4NzIwOnJhdGU9MzAgLWM6dgpsaWJ2dmVuYyB0ZXN0Lm1wNCAmJiAuL2Zm cGxheSAtc3RyaWN0IC0yIC1pIHRlc3QubXA0CgpJIHdpbGwgbWVyZ2UgaW4gMyBkYXlzIGlmIHRo ZXJlIGFyZSBubyBvYmplY3Rpb25zLgp0aGFuayB5b3UKCk9uIFdlZCwgTWF5IDI5LCAyMDI0IGF0 IDEyOjI34oCvQU0gQ2hyaXN0aWFuIEJhcnRuaWsgPGNocmlzMTAzMTdoNUBnbWFpbC5jb20+Cndy b3RlOgoKPiBGcm9tOiBUaG9tYXMgU2llZGVsIDx0aG9tYXMuZmZAc3Bpbi1kaWdpdGFsLmNvbT4K Pgo+IEFkZCBleHRlcm5hbCBlbmNvZGVyIFZWZW5DIGZvciBIMjY2L1ZWQyBlbmNvZGluZy4KPiBS ZWdpc3RlciBuZXcgZW5jb2RlciBsaWJ2dmVuYy4KPiBBZGQgbGlidnZlbmMgdG8gd3JhcCB0aGUg dnZlbmMgaW50ZXJmYWNlLgo+IGxpYnZ2ZW5jIGltcGxlbWVudHMgZW5jb2RlciBvcHRpb246IHBy ZXNldCxxcCxxcGEscGVyaW9kLAo+IHBhc3Nsb2dmaWxlLHN0YXRzLHZ2ZW5jLXBhcmFtcyxsZXZl bCx0aWVyLgo+IEVuYWJsZSBlbmNvZGVyIGJ5IGFkZGluZyAtLWVuYWJsZS1saWJ2dmVuYyBpbiBj b25maWd1cmUgc3RlcC4KPgo+IENvLWF1dGhvcmVkLWJ5OiBDaHJpc3RpYW4gQmFydG5payBjaHJp czEwMzE3aDVAZ21haWwuY29tCj4gU2lnbmVkLW9mZi1ieTogVGhvbWFzIFNpZWRlbCA8dGhvbWFz LmZmQHNwaW4tZGlnaXRhbC5jb20+Cj4gLS0tCj4gIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAg fCAgIDQgKwo+ICBkb2MvZW5jb2RlcnMudGV4aSAgICAgICAgIHwgIDY0ICsrKysrCj4gIGZmdG9v bHMvZmZtcGVnX211eF9pbml0LmMgfCAgIDIgKy0KPiAgbGliYXZjb2RlYy9NYWtlZmlsZSAgICAg ICB8ICAgMSArCj4gIGxpYmF2Y29kZWMvYWxsY29kZWNzLmMgICAgfCAgIDEgKwo+ICBsaWJhdmNv ZGVjL2xpYnZ2ZW5jLmMgICAgIHwgNTA3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCj4gIDYgZmlsZXMgY2hhbmdlZCwgNTc4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o LSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlidnZlbmMuYwo+Cj4gZGlmZiAt LWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+IGluZGV4IDk2YjE4MWZkMjEuLjA4MmNiY2E3 YmIgMTAwNzU1Cj4gLS0tIGEvY29uZmlndXJlCj4gKysrIGIvY29uZmlndXJlCj4gQEAgLTI5Myw2 ICsyOTMsNyBAQCBFeHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6Cj4gICAgLS1lbmFibGUtbGlidm9y YmlzICAgICAgIGVuYWJsZSBWb3JiaXMgZW4vZGVjb2RpbmcgdmlhIGxpYnZvcmJpcywKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlIGltcGxlbWVudGF0aW9uIGV4aXN0cyBbbm9d Cj4gICAgLS1lbmFibGUtbGlidnB4ICAgICAgICAgIGVuYWJsZSBWUDggYW5kIFZQOSBkZS9lbmNv ZGluZyB2aWEgbGlidnB4IFtub10KPiArICAtLWVuYWJsZS1saWJ2dmVuYyAgICAgICAgZW5hYmxl IEguMjY2L1ZWQyBlbmNvZGluZyB2aWEgdnZlbmMgW25vXQo+ICAgIC0tZW5hYmxlLWxpYndlYnAg ICAgICAgICBlbmFibGUgV2ViUCBlbmNvZGluZyB2aWEgbGlid2VicCBbbm9dCj4gICAgLS1lbmFi bGUtbGlieDI2NCAgICAgICAgIGVuYWJsZSBILjI2NCBlbmNvZGluZyB2aWEgeDI2NCBbbm9dCj4g ICAgLS1lbmFibGUtbGlieDI2NSAgICAgICAgIGVuYWJsZSBIRVZDIGVuY29kaW5nIHZpYSB4MjY1 IFtub10KPiBAQCAtMTk2Niw2ICsxOTY3LDcgQEAgRVhURVJOQUxfTElCUkFSWV9MSVNUPSIKPiAg ICAgIGxpYnZtYWYKPiAgICAgIGxpYnZvcmJpcwo+ICAgICAgbGlidnB4Cj4gKyAgICBsaWJ2dmVu Ywo+ICAgICAgbGlid2VicAo+ICAgICAgbGlieGV2ZAo+ICAgICAgbGlieGV2ZQo+IEBAIC0zNTYw LDYgKzM1NjIsNyBAQCBsaWJ2cHhfdnA4X2RlY29kZXJfZGVwcz0ibGlidnB4Igo+ICBsaWJ2cHhf dnA4X2VuY29kZXJfZGVwcz0ibGlidnB4Igo+ICBsaWJ2cHhfdnA5X2RlY29kZXJfZGVwcz0ibGli dnB4Igo+ICBsaWJ2cHhfdnA5X2VuY29kZXJfZGVwcz0ibGlidnB4Igo+ICtsaWJ2dmVuY19lbmNv ZGVyX2RlcHM9ImxpYnZ2ZW5jIgo+ICBsaWJ3ZWJwX2VuY29kZXJfZGVwcz0ibGlid2VicCIKPiAg bGlid2VicF9hbmltX2VuY29kZXJfZGVwcz0ibGlid2VicCIKPiAgbGlieDI2Ml9lbmNvZGVyX2Rl cHM9ImxpYngyNjIiCj4gQEAgLTcwMzAsNiArNzAzMyw3IEBAIGVuYWJsZWQgbGlidnB4ICAgICAg ICAgICAgJiYgewo+ICAgICAgZmkKPiAgfQo+Cj4gK2VuYWJsZWQgbGlidnZlbmMgICAgICAgICAg JiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYnZ2ZW5jICJsaWJ2dmVuYyA+PQo+IDEuNi4xIiAidnZl bmMvdnZlbmMuaCIgdnZlbmNfZ2V0X3ZlcnNpb24KPiAgZW5hYmxlZCBsaWJ3ZWJwICAgICAgICAg ICAmJiB7Cj4gICAgICBlbmFibGVkIGxpYndlYnBfZW5jb2RlciAgICAgICYmIHJlcXVpcmVfcGtn X2NvbmZpZyBsaWJ3ZWJwICJsaWJ3ZWJwCj4gPj0gMC4yLjAiIHdlYnAvZW5jb2RlLmggV2ViUEdl dEVuY29kZXJWZXJzaW9uCj4gICAgICBlbmFibGVkIGxpYndlYnBfYW5pbV9lbmNvZGVyICYmIGNo ZWNrX3BrZ19jb25maWcgbGlid2VicF9hbmltX2VuY29kZXIKPiAibGlid2VicG11eCA+PSAwLjQu MCIgd2VicC9tdXguaCBXZWJQQW5pbUVuY29kZXJPcHRpb25zSW5pdDsgfQo+IGRpZmYgLS1naXQg YS9kb2MvZW5jb2RlcnMudGV4aSBiL2RvYy9lbmNvZGVycy50ZXhpCj4gaW5kZXggYzgyZjMxNmY5 NC4uNDk2ODUyZmFlYiAxMDA2NDQKPiAtLS0gYS9kb2MvZW5jb2RlcnMudGV4aQo+ICsrKyBiL2Rv Yy9lbmNvZGVycy50ZXhpCj4gQEAgLTIzNzgsNiArMjM3OCw3MCBAQCBJbmRpY2F0ZXMgZnJhbWUg ZHVyYXRpb24KPiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbGlidnB4IHNlZToKPiAgQHVy bHtodHRwOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy99Cj4KPiArQHNlY3Rpb24gbGlidnZlbmMKPiAr Cj4gK1ZWZW5DIEguMjY2L1ZWQyBlbmNvZGVyIHdyYXBwZXIuCj4gKwo+ICtUaGlzIGVuY29kZXIg cmVxdWlyZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBsaWJ2dmVuYyBoZWFkZXJzIGFuZCBsaWJyYXJ5 Cj4gK2R1cmluZyBjb25maWd1cmF0aW9uLiBZb3UgbmVlZCB0byBleHBsaWNpdGx5IGNvbmZpZ3Vy ZSB0aGUgYnVpbGQgd2l0aAo+ICtAb3B0aW9uey0tZW5hYmxlLWxpYnZ2ZW5jfS4KPiArCj4gK1Ro ZSBWVmVuQyBwcm9qZWN0IHdlYnNpdGUgaXMgYXQKPiArQHVybHtodHRwczovL2dpdGh1Yi5jb20v ZnJhdW5ob2ZlcmhoaS92dmVuY30uCj4gKwo+ICtAc3Vic2VjdGlvbiBTdXBwb3J0ZWQgUGl4ZWwg Rm9ybWF0cwo+ICsKPiArVlZlbkMgc3VwcG9ydHMgb25seSAxMC1iaXQgY29sb3Igc3BhY2VzIGFz IGlucHV0LiBCdXQgdGhlIGludGVybmFsCj4gKGVuY29kZWQpCj4gK2JpdCBkZXB0aCBjYW4gYmUg c2V0IHRvIDgtYml0IG9yIDEwLWJpdCBhdCBydW50aW1lLgo+ICsKPiArQHN1YnNlY3Rpb24gT3B0 aW9ucwo+ICsKPiArQHRhYmxlIEBvcHRpb24KPiArQGl0ZW0gYgo+ICtTZXRzIHRhcmdldCB2aWRl byBiaXRyYXRlLgo+ICsKPiArQGl0ZW0gZwo+ICtTZXQgdGhlIEdPUCBzaXplLiBDdXJyZW50bHkg c3VwcG9ydCBmb3IgZz0xIChJbnRyYSBvbmx5KSBvciBkZWZhdWx0Lgo+ICsKPiArQGl0ZW0gcHJl c2V0Cj4gK1NldCB0aGUgVlZlbkMgcHJlc2V0Lgo+ICsKPiArQGl0ZW0gbGV2ZWxpZGMKPiArU2V0 IGxldmVsIGlkYy4KPiArCj4gK0BpdGVtIHRpZXIKPiArU2V0IHZ2YyB0aWVyLgo+ICsKPiArQGl0 ZW0gcXAKPiArU2V0IGNvbnN0YW50IHF1YW50aXphdGlvbiBwYXJhbWV0ZXIuCj4gKwo+ICtAaXRl bSBzdWJvcHQgQHZhcntib29sZWFufQo+ICtTZXQgc3ViamVjdGl2ZSAocGVyY2VwdHVhbGx5IG1v dGl2YXRlZCkgb3B0aW1pemF0aW9uLiBEZWZhdWx0IGlzIDEgKG9uKS4KPiArCj4gK0BpdGVtIGJp dGRlcHRoOCBAdmFye2Jvb2xlYW59Cj4gK1NldCA4Yml0IGNvZGluZyBtb2RlIGluc3RlYWQgb2Yg dXNpbmcgMTBiaXQuIERlZmF1bHQgaXMgMCAob2ZmKS4KPiArCj4gK0BpdGVtIHBlcmlvZAo+ICtz ZXQgKGludHJhKSByZWZyZXNoIHBlcmlvZCBpbiBzZWNvbmRzLgo+ICsKPiArQGl0ZW0gdnZlbmMt cGFyYW1zCj4gK1NldCB2dmVuYyBvcHRpb25zIHVzaW5nIGEgbGlzdCBvZiBAdmFye2tleX09QHZh cnt2YWx1ZX0gY291cGxlcyBzZXBhcmF0ZWQKPiArYnkgIjoiLiBTZWUgQGNvbW1hbmR7dnZlbmNh cHAgLS1mdWxsaGVscH0gb3IgQGNvbW1hbmR7dnZlbmNGRmFwcAo+IC0tZnVsbGhlbHB9IGZvciBh IGxpc3Qgb2Ygb3B0aW9ucy4KPiArCj4gK0ZvciBleGFtcGxlLCB0aGUgb3B0aW9ucyBtaWdodCBi ZSBwcm92aWRlZCBhczoKPiArCj4gK0BleGFtcGxlCj4gK2ludHJhcGVyaW9kPTY0OmRlY29kaW5n cmVmcmVzaHR5cGU9aWRyOnBvYzBpZHI9MTppbnRlcm5hbGJpdGRlcHRoPTgKPiArQGVuZCBleGFt cGxlCj4gKwo+ICtGb3IgZXhhbXBsZSB0aGUgZW5jb2Rpbmcgb3B0aW9ucyBtaWdodCBiZSBwcm92 aWRlZCB3aXRoCj4gQG9wdGlvbnstdnZlbmMtcGFyYW1zfToKPiArCj4gK0BleGFtcGxlCj4gK2Zm bXBlZyAtaSBpbnB1dCAtYzp2IGxpYnZ2ZW5jIC1iIDFNIC12dmVuYy1wYXJhbXMKPiBpbnRyYXBl cmlvZD02NDpkZWNvZGluZ3JlZnJlc2h0eXBlPWlkcjpwb2MwaWRyPTE6aW50ZXJuYWxiaXRkZXB0 aD04Cj4gb3V0cHV0Lm1wNAo+ICtAZW5kIGV4YW1wbGUKPiArCj4gK0BlbmQgdGFibGUKPiArCj4g IEBzZWN0aW9uIGxpYndlYnAKPgo+ICBsaWJ3ZWJwIFdlYlAgSW1hZ2UgZW5jb2RlciB3cmFwcGVy Cj4gZGlmZiAtLWdpdCBhL2ZmdG9vbHMvZmZtcGVnX211eF9pbml0LmMgYi9mZnRvb2xzL2ZmbXBl Z19tdXhfaW5pdC5jCj4gaW5kZXggODc5NzI2NTE0NS4uZWYyOTIyODU0YSAxMDA2NDQKPiAtLS0g YS9mZnRvb2xzL2ZmbXBlZ19tdXhfaW5pdC5jCj4gKysrIGIvZmZ0b29scy9mZm1wZWdfbXV4X2lu aXQuYwo+IEBAIC03MzksNyArNzM5LDcgQEAgc3RhdGljIGludCBuZXdfc3RyZWFtX3ZpZGVvKE11 eGVyICptdXgsIGNvbnN0Cj4gT3B0aW9uc0NvbnRleHQgKm8sCj4gICAgICAgICAgICAgICAgICAg ICAgIG9zdC0+bG9nZmlsZV9wcmVmaXggPyBvc3QtPmxvZ2ZpbGVfcHJlZml4IDoKPgo+IERFRkFV TFRfUEFTU19MT0dGSUxFTkFNRV9QUkVGSVgsCj4gICAgICAgICAgICAgICAgICAgICAgIG9zdF9p ZHgpOwo+IC0gICAgICAgICAgICBpZiAoIXN0cmNtcChvc3QtPmVuY19jdHgtPmNvZGVjLT5uYW1l LCAibGlieDI2NCIpKSB7Cj4gKyAgICAgICAgICAgIGlmICghc3RyY21wKG9zdC0+ZW5jX2N0eC0+ Y29kZWMtPm5hbWUsICJsaWJ4MjY0IikgfHwKPiAhc3RyY21wKG9zdC0+ZW5jX2N0eC0+Y29kZWMt Pm5hbWUsICJsaWJ2dmVuYyIpKSB7Cj4gICAgICAgICAgICAgICAgICBhdl9kaWN0X3NldCgmb3N0 LT5lbmNvZGVyX29wdHMsICJzdGF0cyIsIGxvZ2ZpbGVuYW1lLAo+IEFWX0RJQ1RfRE9OVF9PVkVS V1JJVEUpOwo+ICAgICAgICAgICAgICB9IGVsc2Ugewo+ICAgICAgICAgICAgICAgICAgaWYgKHZp ZGVvX2VuYy0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX1BBU1MyKSB7Cj4gZGlmZiAtLWdpdCBhL2xp YmF2Y29kZWMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL01ha2VmaWxlCj4gaW5kZXggMjQ0M2QyYzZm ZC4uNWQ3MzQ5MDkwZSAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCj4gKysrIGIv bGliYXZjb2RlYy9NYWtlZmlsZQo+IEBAIC0xMTUzLDYgKzExNTMsNyBAQCBPQkpTLSQoQ09ORklH X0xJQlZQWF9WUDhfREVDT0RFUikgICAgICAgICArPQo+IGxpYnZweGRlYy5vCj4gIE9CSlMtJChD T05GSUdfTElCVlBYX1ZQOF9FTkNPREVSKSAgICAgICAgICs9IGxpYnZweGVuYy5vCj4gIE9CSlMt JChDT05GSUdfTElCVlBYX1ZQOV9ERUNPREVSKSAgICAgICAgICs9IGxpYnZweGRlYy5vCj4gIE9C SlMtJChDT05GSUdfTElCVlBYX1ZQOV9FTkNPREVSKSAgICAgICAgICs9IGxpYnZweGVuYy5vCj4g K09CSlMtJChDT05GSUdfTElCVlZFTkNfRU5DT0RFUikgICAgICAgICAgICs9IGxpYnZ2ZW5jLm8K PiAgT0JKUy0kKENPTkZJR19MSUJXRUJQX0VOQ09ERVIpICAgICAgICAgICAgKz0gbGlid2VicGVu Y19jb21tb24ubwo+IGxpYndlYnBlbmMubwo+ICBPQkpTLSQoQ09ORklHX0xJQldFQlBfQU5JTV9F TkNPREVSKSAgICAgICArPSBsaWJ3ZWJwZW5jX2NvbW1vbi5vCj4gbGlid2VicGVuY19hbmltZW5j b2Rlci5vCj4gIE9CSlMtJChDT05GSUdfTElCWDI2Ml9FTkNPREVSKSAgICAgICAgICAgICs9IGxp YngyNjQubwo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jIGIvbGliYXZjb2Rl Yy9hbGxjb2RlY3MuYwo+IGluZGV4IGIxMDJhODA2OWUuLjU5ZDM2ZGJkNTYgMTAwNjQ0Cj4gLS0t IGEvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+ICsrKyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMK PiBAQCAtODAwLDYgKzgwMCw3IEBAIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYnZweF92cDhf ZW5jb2RlcjsKPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlidnB4X3ZwOF9kZWNvZGVyOwo+ ICBleHRlcm4gRkZDb2RlYyBmZl9saWJ2cHhfdnA5X2VuY29kZXI7Cj4gIGV4dGVybiBjb25zdCBG RkNvZGVjIGZmX2xpYnZweF92cDlfZGVjb2RlcjsKPiArZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZf bGlidnZlbmNfZW5jb2RlcjsKPiAgLyogcHJlZmVycmVkIG92ZXIgbGlid2VicCAqLwo+ICBleHRl cm4gY29uc3QgRkZDb2RlYyBmZl9saWJ3ZWJwX2FuaW1fZW5jb2RlcjsKPiAgZXh0ZXJuIGNvbnN0 IEZGQ29kZWMgZmZfbGlid2VicF9lbmNvZGVyOwo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2xp YnZ2ZW5jLmMgYi9saWJhdmNvZGVjL2xpYnZ2ZW5jLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAuLjlkZTNkODYzMGYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGli YXZjb2RlYy9saWJ2dmVuYy5jCj4gQEAgLTAsMCArMSw1MDcgQEAKPiArLyoKPiArICogSC4yNjYg ZW5jb2RpbmcgdXNpbmcgdGhlIFZWZW5DIGxpYnJhcnkKPiArICoKPiArICogQ29weXJpZ2h0IChD KSAyMDIyLCBUaG9tYXMgU2llZGVsCj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZG bXBlZy4KPiArICoKPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoK PiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICog TGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs b29yLCBCb3N0b24sIE1BCj4gMDIxMTAtMTMwMSBVU0EKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8 dnZlbmMvdnZlbmMuaD4KPiArI2luY2x1ZGUgPHZ2ZW5jL3Z2ZW5jQ2ZnLmg+Cj4gKyNpbmNsdWRl IDx2dmVuYy92ZXJzaW9uLmg+Cj4gKwo+ICsjaW5jbHVkZSAiYXZjb2RlYy5oIgo+ICsjaW5jbHVk ZSAiY29kZWNfaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImVuY29kZS5oIgo+ICsjaW5jbHVkZSAi aW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgInBhY2tldF9pbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAi cHJvZmlsZXMuaCIKPiArCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZ1dGlsLmgiCj4gKyNpbmNs dWRlICJsaWJhdnV0aWwvbWVtLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgo+ ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1v bi5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2ltZ3V0aWxzLmgiCj4gKyNpbmNsdWRlICJsaWJh dnV0aWwvZnJhbWUuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9sb2cuaCIKPiArI2luY2x1ZGUg ImxpYmF2dXRpbC9hdnN0cmluZy5oIgo+ICsKPiArI2RlZmluZSBWVkVOQ19WRVJTSU9OX0lOVCAg QVZfVkVSU0lPTl9JTlQoVlZFTkNfVkVSU0lPTl9NQUpPUiwgXAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWVkVOQ19WRVJTSU9OX01JTk9SLCBcCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWRU5DX1ZFUlNJT05fUEFUQ0gp Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBWVmVuQ0NvbnRleHQgewo+ICsgICAgQVZDbGFzcyAgICAg ICAgICpjbGFzczsKPiArICAgIHZ2ZW5jRW5jb2RlciAgICAqZW5jb2RlcjsKPiArICAgIHZ2ZW5j QWNjZXNzVW5pdCAqYXU7Cj4gKyAgICBib29sICAgICAgICAgICAgIGVuY29kZV9kb25lOwo+ICsg ICAgaW50ICAgcHJlc2V0Owo+ICsgICAgaW50ICAgcXA7Cj4gKyAgICBpbnQgICBxcGE7Cj4gKyAg ICBpbnQgICBpbnRyYV9yZWZyZXNoX3NlYzsKPiArICAgIGNoYXIgKmxldmVsOwo+ICsgICAgaW50 ICAgdGllcjsKPiArICAgIGNoYXIgKnN0YXRzOwo+ICsgICAgQVZEaWN0aW9uYXJ5ICp2dmVuY19v cHRzOwo+ICt9IFZWZW5DQ29udGV4dDsKPiArCj4gK3N0YXRpYyB2b2lkIHZ2ZW5jX2xvZ19jYWxs YmFjayh2b2lkICpjdHgsIGludCBsZXZlbCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQo+ICt7Cj4gKyAgICB2dmVuY19jb25m aWcgcGFyYW1zOwo+ICsgICAgdnZlbmNFbmNvZGVyICplbmNvZGVyID0gKHZ2ZW5jRW5jb2RlciAq KWN0eDsKPiArICAgIGlmIChlbmNvZGVyKSB7Cj4gKyAgICAgICAgdnZlbmNfY29uZmlnX2RlZmF1 bHQoJnBhcmFtcyk7Cj4gKyAgICAgICAgdnZlbmNfZ2V0X2NvbmZpZyhlbmNvZGVyLCAmcGFyYW1z KTsKPiArICAgICAgICBpZiAoKGludClwYXJhbXMubV92ZXJib3NpdHkgPj0gbGV2ZWwpCj4gKyAg ICAgICAgICAgIHZmcHJpbnRmKGxldmVsID09IDEgPyBzdGRlcnIgOiBzdGRvdXQsIGZtdCwgYXJn cyk7Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZ2ZW5jX3NldF92ZXJib3NpdG9y eSh2dmVuY19jb25maWcgKnBhcmFtcykKPiArewo+ICsgICAgaW50IGxvZ2xldmVsID0gYXZfbG9n X2dldF9sZXZlbCgpOwo+ICsgICAgcGFyYW1zLT5tX3ZlcmJvc2l0eSA9IFZWRU5DX1NJTEVOVDsK PiArICAgIGlmIChsb2dsZXZlbCA+PSBBVl9MT0dfREVCVUcpCj4gKyAgICAgICAgcGFyYW1zLT5t X3ZlcmJvc2l0eSA9IFZWRU5DX0RFVEFJTFM7Cj4gKyAgICBlbHNlIGlmIChsb2dsZXZlbCA+PSBB Vl9MT0dfVkVSQk9TRSkKPiArICAgICAgICBwYXJhbXMtPm1fdmVyYm9zaXR5ID0gVlZFTkNfTk9U SUNFOwo+ICsgICAgZWxzZSBpZiAobG9nbGV2ZWwgPj0gQVZfTE9HX0lORk8pCj4gKyAgICAgICAg cGFyYW1zLT5tX3ZlcmJvc2l0eSA9IFZWRU5DX1dBUk5JTkc7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHZ2ZW5jX3NldF9waWNfZm9ybWF0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgdnZlbmNfY29u ZmlnCj4gKnBhcmFtcykKPiArewo+ICsgICAgcGFyYW1zLT5tX2ludGVybkNocm9tYUZvcm1hdCA9 IFZWRU5DX0NIUk9NQV80MjA7Cj4gKyAgICBwYXJhbXMtPm1faW5wdXRCaXREZXB0aFswXSAgID0g MTA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZ2ZW5jX3NldF9jb2xvcl9mb3JtYXQoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LCB2dmVuY19jb25maWcKPiAqcGFyYW1zKQo+ICt7Cj4gKyAgICBpZiAo YXZjdHgtPmNvbG9yX3ByaW1hcmllcyAhPSBBVkNPTF9QUklfVU5TUEVDSUZJRUQpCj4gKyAgICAg ICAgcGFyYW1zLT5tX2NvbG91clByaW1hcmllcyA9IChpbnQpIGF2Y3R4LT5jb2xvcl9wcmltYXJp ZXM7Cj4gKyAgICBpZiAoYXZjdHgtPmNvbG9yc3BhY2UgIT0gQVZDT0xfU1BDX1VOU1BFQ0lGSUVE KQo+ICsgICAgICAgIHBhcmFtcy0+bV9tYXRyaXhDb2VmZmljaWVudHMgPSAoaW50KSBhdmN0eC0+ Y29sb3JzcGFjZTsKPiArICAgIGlmIChhdmN0eC0+Y29sb3JfdHJjICE9IEFWQ09MX1RSQ19VTlNQ RUNJRklFRCkgewo+ICsgICAgICAgIHBhcmFtcy0+bV90cmFuc2ZlckNoYXJhY3RlcmlzdGljcyA9 IChpbnQpIGF2Y3R4LT5jb2xvcl90cmM7Cj4gKwo+ICsgICAgICAgIGlmIChhdmN0eC0+Y29sb3Jf dHJjID09IEFWQ09MX1RSQ19TTVBURTIwODQpCj4gKyAgICAgICAgICAgIHBhcmFtcy0+bV9IZHJN b2RlID0gKGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMgPT0KPiBBVkNPTF9QUklfQlQyMDIwKSA/Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZFTkNfSERSX1BRX0JUMjAyMCA6IFZW RU5DX0hEUl9QUTsKPiArICAgICAgICBlbHNlIGlmIChhdmN0eC0+Y29sb3JfdHJjID09IEFWQ09M X1RSQ19CVDIwMjBfMTAgfHwKPiBhdmN0eC0+Y29sb3JfdHJjID09IEFWQ09MX1RSQ19BUklCX1NU RF9CNjcpCj4gKyAgICAgICAgICAgIHBhcmFtcy0+bV9IZHJNb2RlID0gKGF2Y3R4LT5jb2xvcl90 cmMgPT0gQVZDT0xfVFJDX0JUMjAyMF8xMAo+IHx8Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMgPT0KPiBBVkNPTF9QUklfQlQyMDIwIHx8 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5jb2xvcnNwYWNlID09 Cj4gQVZDT0xfU1BDX0JUMjAyMF9OQ0wgfHwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXZjdHgtPmNvbG9yc3BhY2UgPT0KPiBBVkNPTF9TUENfQlQyMDIwX0NMKSA/Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZFTkNfSERSX0hMR19CVDIwMjAgOiBWVkVO Q19IRFJfSExHOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChwYXJhbXMtPm1fSGRyTW9kZSA9PSBW VkVOQ19IRFJfT0ZGICYmCj4gKyAgICAgICAgKGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMgIT0gQVZD T0xfUFJJX1VOU1BFQ0lGSUVEIHx8Cj4gYXZjdHgtPmNvbG9yc3BhY2UgIT0gQVZDT0xfU1BDX1VO U1BFQ0lGSUVEKSkgewo+ICsgICAgICAgIHBhcmFtcy0+bV92dWlQYXJhbWV0ZXJzUHJlc2VudCA9 IDE7Cj4gKyAgICAgICAgcGFyYW1zLT5tX2NvbG91ckRlc2NyaXB0aW9uUHJlc2VudCA9IHRydWU7 Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZ2ZW5jX3NldF9mcmFtZXJhdGUoQVZD b2RlY0NvbnRleHQgKmF2Y3R4LCB2dmVuY19jb25maWcKPiAqcGFyYW1zKQo+ICt7Cj4gKyAgICBp ZiAoYXZjdHgtPmZyYW1lcmF0ZS5udW0gPiAwICYmIGF2Y3R4LT5mcmFtZXJhdGUuZGVuID4gMCkg ewo+ICsgICAgICAgIHBhcmFtcy0+bV9GcmFtZVJhdGUgPSBhdmN0eC0+ZnJhbWVyYXRlLm51bTsK PiArICAgICAgICBwYXJhbXMtPm1fRnJhbWVTY2FsZSA9IGF2Y3R4LT5mcmFtZXJhdGUuZGVuOwo+ ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBwYXJhbXMtPm1fRnJhbWVSYXRlID0gYXZjdHgtPnRp bWVfYmFzZS5kZW47Cj4gKyAgICAgICAgcGFyYW1zLT5tX0ZyYW1lU2NhbGUgPSBhdmN0eC0+dGlt ZV9iYXNlLm51bTsKPiArICAgIH0KPiArCj4gK0ZGX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklO R1MKPiArCj4gKyNpZiBGRl9BUElfVElDS1NfUEVSX0ZSQU1FCj4gKyAgICBpZiAoYXZjdHgtPnRp Y2tzX3Blcl9mcmFtZSA9PSAxKSB7Cj4gKyNlbmRpZgo+ICsgICAgICAgIHBhcmFtcy0+bV9UaWNr c1BlclNlY29uZCA9IC0xOyAgIC8qIGF1dG8gbW9kZSBmb3IgdGlja3MgcGVyIGZyYW1lCj4gPSAx ICovCj4gKyNpZiBGRl9BUElfVElDS1NfUEVSX0ZSQU1FCj4gKyAgICB9IGVsc2Ugewo+ICsgICAg ICAgIHBhcmFtcy0+bV9UaWNrc1BlclNlY29uZCA9Cj4gKyAgICAgICAgICAgIGNlaWwoKGF2Y3R4 LT50aW1lX2Jhc2UuZGVuIC8gKGRvdWJsZSkgYXZjdHgtPnRpbWVfYmFzZS5udW0pICoKPiArICAg ICAgICAgICAgICAgICAoZG91YmxlKSBhdmN0eC0+dGlja3NfcGVyX2ZyYW1lKTsKPiArICAgIH0K PiArI2VuZGlmCj4gK0ZGX0VOQUJMRV9ERVBSRUNBVElPTl9XQVJOSU5HUwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHZ2ZW5jX3BhcnNlX3Z2ZW5jX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgs IHZ2ZW5jX2NvbmZpZwo+ICpwYXJhbXMpCj4gK3sKPiArICAgIGludCBwYXJzZV9yZXQsIHJldDsK PiArICAgIFZWZW5DQ29udGV4dCAqczsKPiArICAgIGNvbnN0IEFWRGljdGlvbmFyeUVudHJ5ICpl biA9IE5VTEw7Cj4gKyAgICBzID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIHJldCA9IDA7Cj4g Kwo+ICsgICAgd2hpbGUgKChlbiA9IGF2X2RpY3RfaXRlcmF0ZShzLT52dmVuY19vcHRzLCBlbikp KSB7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJ2dmVuY19zZXRfcGFy YW06ICclczolcydcbiIsIGVuLT5rZXksCj4gKyAgICAgICAgICAgICAgIGVuLT52YWx1ZSk7Cj4g KyAgICAgICAgcGFyc2VfcmV0ID0gdnZlbmNfc2V0X3BhcmFtKHBhcmFtcywgZW4tPmtleSwgZW4t PnZhbHVlKTsKPiArICAgICAgICBzd2l0Y2ggKHBhcnNlX3JldCkgewo+ICsgICAgICAgIGNhc2Ug VlZFTkNfUEFSQU1fQkFEX05BTUU6Cj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiVW5rbm93biB2dmVuYyBvcHRpb246ICVzLlxuIiwKPiBlbi0+a2V5KTsKPiArICAg ICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgICAgICBicmVhazsKPiAr ICAgICAgICBjYXNlIFZWRU5DX1BBUkFNX0JBRF9WQUxVRToKPiArICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHZ2ZW5jIHZhbHVlIGZvciAlczoKPiAlcy5c biIsIGVuLT5rZXksIGVuLT52YWx1ZSk7Cj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlO VkFMKTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgZGVmYXVsdDoKPiArICAgICAg ICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAoIWF2X3N0cmNhc2Vj bXAoZW4tPmtleSwgInJjc3RhdHNmaWxlIikpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJ2dmVuYy1wYXJhbXMgMnBhc3Mgb3B0aW9uCj4gJ3Jjc3RhdHNmaWxl JyAiCj4gKyAgICAgICAgICAgICAgICAgICAibm90IGF2YWlsYWJsZS4gVXNlIG9wdGlvbiAncGFz c2xvZ2ZpbGUnXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsg ICAgICAgIH0KPiArICAgICAgICBpZiAoIWF2X3N0cmNhc2VjbXAoZW4tPmtleSwgInBhc3NlcyIp IHx8ICFhdl9zdHJjYXNlY21wKGVuLT5rZXksCj4gInBhc3MiKSkgewo+ICsgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgInZ2ZW5jLXBhcmFtcyAycGFzcyBvcHRpb24gJyVz JyAiCj4gKyAgICAgICAgICAgICAgICAgICAibm90IGF2YWlsYWJsZS4gVXNlIG9wdGlvbiAncGFz cydcbiIsIGVuLT5rZXkpOwo+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4g KyAgICAgICAgfQo+ICsgICAgfQo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGlj IGludCB2dmVuY19zZXRfcmNfbW9kZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIHZ2ZW5jX2NvbmZp ZyAqcGFyYW1zKQo+ICt7Cj4gKyAgICBwYXJhbXMtPm1fUkNOdW1QYXNzZXMgPSAxOwo+ICsgICAg aWYgKChhdmN0eC0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX1BBU1MxIHx8IGF2Y3R4LT5mbGFncyAm Cj4gQVZfQ09ERUNfRkxBR19QQVNTMikpIHsKPiArICAgICAgICBpZiAoIWF2Y3R4LT5iaXRfcmF0 ZSkgewo+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkEgYml0cmF0 ZSBtdXN0IGJlIHNldCB0byB1c2UgdHdvCj4gcGFzcyBtb2RlLlxuIik7Cj4gKyAgICAgICAgICAg IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHBhcmFtcy0+ bV9SQ051bVBhc3NlcyA9IDI7Cj4gKyAgICAgICAgaWYgKGF2Y3R4LT5mbGFncyAmIEFWX0NPREVD X0ZMQUdfUEFTUzEpCj4gKyAgICAgICAgICAgIHBhcmFtcy0+bV9SQ1Bhc3MgPSAxOwo+ICsgICAg ICAgIGVsc2UKPiArICAgICAgICAgICAgcGFyYW1zLT5tX1JDUGFzcyA9IDI7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgaWYgKGF2Y3R4LT5yY19tYXhfcmF0ZSkgewo+ICsjaWYgVlZFTkNfVkVSU0lPTl9J TlQgPj0gQVZfVkVSU0lPTl9JTlQoMSw4LDApCj4gKyAgICAgICAgcGFyYW1zLT5tX1JDTWF4Qml0 cmF0ZSA9IGF2Y3R4LT5yY19tYXhfcmF0ZTsKPiArI2VuZGlmCj4gKwo+ICsjaWYgVlZFTkNfVkVS U0lPTl9JTlQgPCBBVl9WRVJTSU9OX0lOVCgxLDExLDApCj4gKyAgICAgICAgLyogcmNfbWF4X3Jh dGUgd2l0aG91dCBhIGJpdF9yYXRlIGVuYWJsZXMgY2FwcGVkIENRRiBtb2RlLgo+ICsgICAgICAg IChRUCArIHN1YmouIG9wdGltaXphdGlvbiArIG1heC4gYml0cmF0ZSkgKi8KPiArICAgICAgICBp ZiAoIWF2Y3R4LT5iaXRfcmF0ZSkgewo+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIkNhcHBlZCBDb25zdGFudCBRdWFsaXR5IEZhY3Rvcgo+IG1vZGUgKGNhcHBlZCBD UUYpICIKPiArICAgICAgICAgICAgICAgICAgICJuZWVkcyBhdCBsZWFzdCB2dmVuYyB2ZXJzaW9u ID49IDEuMTEuMCAoY3VycmVudAo+IHZlcnNpb24gJXMpXG4iLCB2dmVuY19nZXRfdmVyc2lvbigp KTsKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArICAgICAgICB9Cj4g KyNlbmRpZgo+ICsgICAgfQo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg dnZlbmNfaW5pdF9leHRyYWRhdGEoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBWVmVuQ0NvbnRleHQg KnMpCj4gK3sKPiArICAgIGludCByZXQ7Cj4gKyAgICBpZiAoYXZjdHgtPmZsYWdzICYgQVZfQ09E RUNfRkxBR19HTE9CQUxfSEVBREVSKSB7Cj4gKyAgICAgICAgcmV0ID0gdnZlbmNfZ2V0X2hlYWRl cnMocy0+ZW5jb2Rlciwgcy0+YXUpOwo+ICsgICAgICAgIGlmICgwICE9IHJldCkgewo+ICsgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgImNhbm5vdCBnZXQgKFNQUyxQUFMp IGhlYWRlcnM6Cj4gJXNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICB2dmVuY19nZXRfbGFzdF9l cnJvcihzLT5lbmNvZGVyKSk7Cj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7 Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAocy0+YXUtPnBheWxvYWRVc2VkU2l6ZSA8 PSAwKSB7Cj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAg ICAgIH0KPiArCj4gKyAgICAgICAgYXZjdHgtPmV4dHJhZGF0YV9zaXplID0gcy0+YXUtPnBheWxv YWRVc2VkU2l6ZTsKPiArICAgICAgICBhdmN0eC0+ZXh0cmFkYXRhID0gYXZfbWFsbG9jeihhdmN0 eC0+ZXh0cmFkYXRhX3NpemUgKwo+IEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpOwo+ICsg ICAgICAgIGlmICghYXZjdHgtPmV4dHJhZGF0YSkgewo+ICsgICAgICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgbWVtY3B5KGF2Y3R4LT5l eHRyYWRhdGEsIHMtPmF1LT5wYXlsb2FkLCBhdmN0eC0+ZXh0cmFkYXRhX3NpemUpOwo+ICsgICAg fQo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBhdl9jb2xkIGludCB2dmVuY19p bml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICsgICAgaW50IHJldDsKPiArICAgIGlu dCBmcmFtZXJhdGU7Cj4gKyAgICBWVmVuQ0NvbnRleHQgKnM7Cj4gKyAgICB2dmVuY19jb25maWcg cGFyYW1zOwo+ICsgICAgdnZlbmNQcmVzZXRNb2RlIHByZXNldDsKPiArCj4gKyAgICBzID0gYXZj dHgtPnByaXZfZGF0YTsKPiArICAgIHByZXNldCA9ICh2dmVuY1ByZXNldE1vZGUpIHMtPnByZXNl dDsKPiArCj4gKyAgICBpZiAoYXZjdHgtPmZsYWdzICYgQVZfQ09ERUNfRkxBR19JTlRFUkxBQ0VE X0RDVCkgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiaW50ZXJsYWNl ZCBub3Qgc3VwcG9ydGVkXG4iKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ ICsgICAgfQo+ICsKPiArICAgIHZ2ZW5jX2NvbmZpZ19kZWZhdWx0KCZwYXJhbXMpOwo+ICsKPiAr ICAgIGlmIChhdmN0eC0+ZnJhbWVyYXRlLm51bSA+IDAgJiYgYXZjdHgtPmZyYW1lcmF0ZS5kZW4g PiAwKQo+ICsgICAgICAgIGZyYW1lcmF0ZSA9IGF2Y3R4LT5mcmFtZXJhdGUubnVtIC8gYXZjdHgt PmZyYW1lcmF0ZS5kZW47Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgZnJhbWVyYXRlID0gYXZjdHgt PnRpbWVfYmFzZS5kZW4gLyBhdmN0eC0+dGltZV9iYXNlLm51bTsKPiArCj4gKyAgICB2dmVuY19p bml0X2RlZmF1bHQoJnBhcmFtcywgYXZjdHgtPndpZHRoLCBhdmN0eC0+aGVpZ2h0LCBmcmFtZXJh dGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgYXZjdHgtPmJpdF9yYXRlLCBzLT5xcCwgcHJl c2V0KTsKPiArCj4gKyAgICB2dmVuY19zZXRfdmVyYm9zaXRvcnkoJnBhcmFtcyk7Cj4gKwo+ICsg ICAgaWYgKGF2Y3R4LT50aHJlYWRfY291bnQgPiAwKQo+ICsgICAgICAgIHBhcmFtcy5tX251bVRo cmVhZHMgPSBhdmN0eC0+dGhyZWFkX2NvdW50Owo+ICsKPiArICAgIC8qIEdPUCBzZXR0aW5ncyAo SURSL0NSQSkgKi8KPiArICAgIGlmIChhdmN0eC0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX0NMT1NF RF9HT1ApCj4gKyAgICAgICAgcGFyYW1zLm1fRGVjb2RpbmdSZWZyZXNoVHlwZSA9IFZWRU5DX0RS VF9JRFI7Cj4gKwo+ICsgICAgaWYgKGF2Y3R4LT5nb3Bfc2l6ZSA9PSAxKSB7Cj4gKyAgICAgICAg cGFyYW1zLm1fR09QU2l6ZSA9IDE7Cj4gKyAgICAgICAgcGFyYW1zLm1fSW50cmFQZXJpb2QgPSAx Owo+ICsgICAgfSBlbHNlCj4gKyAgICAgICAgcGFyYW1zLm1fSW50cmFQZXJpb2RTZWMgPSBzLT5p bnRyYV9yZWZyZXNoX3NlYzsKPiArCj4gKyAgICBwYXJhbXMubV9BY2Nlc3NVbml0RGVsaW1pdGVy ID0gdHJ1ZTsKPiArICAgIHBhcmFtcy5tX3VzZVBlcmNlcHRRUEEgPSBzLT5xcGE7Cj4gKyAgICBw YXJhbXMubV9sZXZlbFRpZXIgICAgID0gKHZ2ZW5jVGllcikgcy0+dGllcjsKPiArCj4gKyAgICBp ZiAoYXZjdHgtPmxldmVsID4gMCkKPiArICAgICAgICBwYXJhbXMubV9sZXZlbCA9ICh2dmVuY0xl dmVsKWF2Y3R4LT5sZXZlbDsKPiArCj4gKyAgICBpZiAocy0+bGV2ZWwpIHsKPiArICAgICAgICBp ZiAoVlZFTkNfUEFSQU1fQkFEX1ZBTFVFID09IHZ2ZW5jX3NldF9wYXJhbSgmcGFyYW1zLCAibGV2 ZWwiLAo+IHMtPmxldmVsKSkgewo+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkludmFsaWQgbGV2ZWxfaWRjOiAlcy5cbiIsCj4gcy0+bGV2ZWwpOwo+ICsgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4g KyAgICB2dmVuY19zZXRfZnJhbWVyYXRlKGF2Y3R4LCAmcGFyYW1zKTsKPiArCj4gKyAgICB2dmVu Y19zZXRfcGljX2Zvcm1hdChhdmN0eCwgJnBhcmFtcyk7Cj4gKwo+ICsgICAgdnZlbmNfc2V0X2Nv bG9yX2Zvcm1hdChhdmN0eCwgJnBhcmFtcyk7Cj4gKwo+ICsgICAgaWYgKChyZXQgPSB2dmVuY19w YXJzZV92dmVuY19wYXJhbXMoYXZjdHgsICZwYXJhbXMpKSAhPSAwKQo+ICsgICAgICAgIHJldHVy biByZXQ7Cj4gKwo+ICsgICAgaWYgKChyZXQgPSB2dmVuY19zZXRfcmNfbW9kZShhdmN0eCwgJnBh cmFtcykpICE9IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICBzLT5lbmNvZGVy ID0gdnZlbmNfZW5jb2Rlcl9jcmVhdGUoKTsKPiArICAgIGlmICghcy0+ZW5jb2Rlcikgewo+ICsg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IGNyZWF0ZSBsaWJ2dmVu YyBlbmNvZGVyXG4iKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAg fQo+ICsKPiArICAgIHZ2ZW5jX3NldF9tc2dfY2FsbGJhY2soJnBhcmFtcywgcy0+ZW5jb2Rlciwg dnZlbmNfbG9nX2NhbGxiYWNrKTsKPiArICAgIGlmICgocmV0ID0gdnZlbmNfZW5jb2Rlcl9vcGVu KHMtPmVuY29kZXIsICZwYXJhbXMpKSAhPSAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJjYW5ub3Qgb3BlbiBsaWJ2dmVuYyBlbmNvZGVyOiAlc1xuIiwKPiArICAg ICAgICAgICAgICAgdnZlbmNfZ2V0X2xhc3RfZXJyb3Iocy0+ZW5jb2RlcikpOwo+ICsgICAgICAg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsKPiArICAgIHZ2ZW5jX2dldF9j b25maWcocy0+ZW5jb2RlciwgJnBhcmFtcyk7ICAgICAvKiBnZXQgdGhlIGFkYXB0ZWQgY29uZmln Cj4gKi8KPiArCj4gKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19JTkZPLCAibGlidnZlbmMgdmVy c2lvbjogJXNcbiIsCj4gdnZlbmNfZ2V0X3ZlcnNpb24oKSk7Cj4gKyAgICBpZiAoYXZfbG9nX2dl dF9sZXZlbCgpID49IEFWX0xPR19WRVJCT1NFKQo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0lORk8sICIlc1xuIiwKPiB2dmVuY19nZXRfY29uZmlnX2FzX3N0cmluZygmcGFyYW1zLCBw YXJhbXMubV92ZXJib3NpdHkpKTsKPiArCj4gKyAgICBpZiAocGFyYW1zLm1fUkNOdW1QYXNzZXMg PT0gMikgewo+ICsgICAgICAgIGlmICgocmV0ID0gdnZlbmNfaW5pdF9wYXNzKHMtPmVuY29kZXIs IHBhcmFtcy5tX1JDUGFzcyAtIDEsCj4gcy0+c3RhdHMpKSAhPSAwKSB7Cj4gKyAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IGluaXQgcGFzcyAlZDogJXNcbiIs Cj4gcGFyYW1zLm1fUkNQYXNzLAo+ICsgICAgICAgICAgICAgICAgICAgdnZlbmNfZ2V0X2xhc3Rf ZXJyb3Iocy0+ZW5jb2RlcikpOwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5B TDsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgcy0+YXUgPSB2dmVuY19hY2Nlc3NV bml0X2FsbG9jKCk7Cj4gKyAgICBpZiAoIXMtPmF1KSB7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRkFUQUwsICJjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBBVQo+IHBheWxvYWRc biIpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICB9Cj4gKyAgICB2 dmVuY19hY2Nlc3NVbml0X2FsbG9jX3BheWxvYWQocy0+YXUsIGF2Y3R4LT53aWR0aCAqIGF2Y3R4 LT5oZWlnaHQpOwo+ICsgICAgaWYgKCFzLT5hdS0+cGF5bG9hZCkgewo+ICsgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0ZBVEFMLCAiY2Fubm90IGFsbG9jYXRlIHBheWxvYWQgbWVtb3J5IG9m Cj4gc2l6ZSAlZFxuIiwKPiArICAgICAgICAgICAgICAgYXZjdHgtPndpZHRoICogYXZjdHgtPmhl aWdodCk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArICAgIH0KPiArCj4g KyAgICBpZiAoKHJldCA9IHZ2ZW5jX2luaXRfZXh0cmFkYXRhKGF2Y3R4LCBzKSkgIT0gMCkKPiAr ICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIHMtPmVuY29kZV9kb25lID0gZmFsc2U7Cj4g KyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGF2X2NvbGQgaW50IHZ2ZW5jX2Nsb3Nl KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICsgICAgVlZlbkNDb250ZXh0ICpzID0gYXZj dHgtPnByaXZfZGF0YTsKPiArCj4gKyAgICBpZiAocy0+YXUpCj4gKyAgICAgICAgdnZlbmNfYWNj ZXNzVW5pdF9mcmVlKHMtPmF1LCB0cnVlKTsKPiArCj4gKyAgICBpZiAocy0+ZW5jb2Rlcikgewo+ ICsgICAgICAgIHZ2ZW5jX3ByaW50X3N1bW1hcnkocy0+ZW5jb2Rlcik7Cj4gKwo+ICsgICAgICAg IGlmICgwICE9IHZ2ZW5jX2VuY29kZXJfY2xvc2Uocy0+ZW5jb2RlcikpCj4gKyAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgdnZlbmNfZnJhbWUoQVZDb2RlY0NvbnRleHQg KmF2Y3R4LCBBVlBhY2tldCAqcGt0LAo+IGNvbnN0IEFWRnJhbWUgKmZyYW1lLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpnb3RfcGFja2V0KQo+ICt7Cj4gKyAgICBWVmVu Q0NvbnRleHQgKnMgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgdnZlbmNZVVZCdWZmZXIgKnB5 dXZidWY7Cj4gKyAgICB2dmVuY1lVVkJ1ZmZlciB5dXZidWY7Cj4gKyAgICBpbnQgcGljdF90eXBl Owo+ICsgICAgaW50IHJldDsKPiArCj4gKyAgICBweXV2YnVmID0gTlVMTDsKPiArICAgIGlmIChm cmFtZSAmJiBhdmN0eC0+cGl4X2ZtdCA9PSBBVl9QSVhfRk1UX1lVVjQyMFAxMCkgewo+ICsgICAg ICAgIHZ2ZW5jX1lVVkJ1ZmZlcl9kZWZhdWx0KCZ5dXZidWYpOwo+ICsgICAgICAgIHl1dmJ1Zi5w bGFuZXNbMF0ucHRyID0gKGludDE2X3QgKikgZnJhbWUtPmRhdGFbMF07Cj4gKyAgICAgICAgeXV2 YnVmLnBsYW5lc1sxXS5wdHIgPSAoaW50MTZfdCAqKSBmcmFtZS0+ZGF0YVsxXTsKPiArICAgICAg ICB5dXZidWYucGxhbmVzWzJdLnB0ciA9IChpbnQxNl90ICopIGZyYW1lLT5kYXRhWzJdOwo+ICsK PiArICAgICAgICB5dXZidWYucGxhbmVzWzBdLndpZHRoICA9IGZyYW1lLT53aWR0aDsKPiArICAg ICAgICB5dXZidWYucGxhbmVzWzBdLmhlaWdodCA9IGZyYW1lLT5oZWlnaHQ7Cj4gKyAgICAgICAg eXV2YnVmLnBsYW5lc1swXS5zdHJpZGUgPSBmcmFtZS0+bGluZXNpemVbMF0gPj4gMTsgLyogc3Ry aWRlIGlzCj4gdXNlZCBpbiAxNmJpdCBzYW1wbGVzIGluIHZ2ZW5jICovCj4gKwo+ICsgICAgICAg IHl1dmJ1Zi5wbGFuZXNbMV0ud2lkdGggID0gZnJhbWUtPndpZHRoID4+IDE7Cj4gKyAgICAgICAg eXV2YnVmLnBsYW5lc1sxXS5oZWlnaHQgPSBmcmFtZS0+aGVpZ2h0ID4+IDE7Cj4gKyAgICAgICAg eXV2YnVmLnBsYW5lc1sxXS5zdHJpZGUgPSBmcmFtZS0+bGluZXNpemVbMV0gPj4gMTsKPiArCj4g KyAgICAgICAgeXV2YnVmLnBsYW5lc1syXS53aWR0aCAgPSBmcmFtZS0+d2lkdGggPj4gMTsKPiAr ICAgICAgICB5dXZidWYucGxhbmVzWzJdLmhlaWdodCA9IGZyYW1lLT5oZWlnaHQgPj4gMTsKPiAr ICAgICAgICB5dXZidWYucGxhbmVzWzJdLnN0cmlkZSA9IGZyYW1lLT5saW5lc2l6ZVsyXSA+PiAx Owo+ICsKPiArICAgICAgICB5dXZidWYuY3RzID0gZnJhbWUtPnB0czsKPiArICAgICAgICB5dXZi dWYuY3RzVmFsaWQgPSB0cnVlOwo+ICsgICAgICAgIHB5dXZidWYgPSAmeXV2YnVmOwo+ICsgICAg fQo+ICsKPiArICAgIGlmICghcy0+ZW5jb2RlX2RvbmUpIHsKPiArICAgICAgICBpZiAodnZlbmNf ZW5jb2RlKHMtPmVuY29kZXIsIHB5dXZidWYsIHMtPmF1LCAmcy0+ZW5jb2RlX2RvbmUpICE9Cj4g MCkKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICB9IGVsc2UK PiArICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICBpZiAocy0+YXUtPnBheWxvYWRVc2VkU2l6 ZSA+IDApIHsKPiArICAgICAgICBpZiAoKHJldCA9IGZmX2dldF9lbmNvZGVfYnVmZmVyKGF2Y3R4 LCBwa3QsCj4gcy0+YXUtPnBheWxvYWRVc2VkU2l6ZSwgMCkpIDwgMCkKPiArICAgICAgICAgICAg cmV0dXJuIHJldDsKPiArCj4gKyAgICAgICAgbWVtY3B5KHBrdC0+ZGF0YSwgcy0+YXUtPnBheWxv YWQsIHMtPmF1LT5wYXlsb2FkVXNlZFNpemUpOwo+ICsKPiArICAgICAgICBpZiAocy0+YXUtPmN0 c1ZhbGlkKQo+ICsgICAgICAgICAgICBwa3QtPnB0cyA9IHMtPmF1LT5jdHM7Cj4gKyAgICAgICAg aWYgKHMtPmF1LT5kdHNWYWxpZCkKPiArICAgICAgICAgICAgcGt0LT5kdHMgPSBzLT5hdS0+ZHRz Owo+ICsgICAgICAgIHBrdC0+ZmxhZ3MgfD0gQVZfUEtUX0ZMQUdfS0VZICogcy0+YXUtPnJhcDsK PiArCj4gKyAgICAgICAgc3dpdGNoIChzLT5hdS0+c2xpY2VUeXBlKSB7Cj4gKyAgICAgICAgY2Fz ZSBWVkVOQ19JX1NMSUNFOgo+ICsgICAgICAgICAgICBwaWN0X3R5cGUgPSBBVl9QSUNUVVJFX1RZ UEVfSTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBWVkVOQ19QX1NMSUNF Ogo+ICsgICAgICAgICAgICBwaWN0X3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfUDsKPiArICAgICAg ICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBWVkVOQ19CX1NMSUNFOgo+ICsgICAgICAgICAg ICBwaWN0X3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfQjsKPiArICAgICAgICAgICAgYnJlYWs7Cj4g KyAgICAgICAgZGVmYXVsdDoKPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJVbmtub3duIHBpY3R1cmUgdHlwZQo+IGVuY291bnRlcmVkLlxuIik7Cj4gKyAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAg ZmZfc2lkZV9kYXRhX3NldF9lbmNvZGVyX3N0YXRzKHBrdCwgMCwgTlVMTCwgMCwgcGljdF90eXBl KTsKPiArCj4gKyAgICAgICAgKmdvdF9wYWNrZXQgPSAxOwo+ICsgICAgICAgIHJldHVybiAwOwo+ ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgZW51 bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXRzX3Z2ZW5jW10gPSB7Cj4gKyAgICBBVl9QSVhfRk1UX1lV VjQyMFAxMCwKPiArICAgIEFWX1BJWF9GTVRfTk9ORQo+ICt9Owo+ICsKPiArI2RlZmluZSBPRkZT RVQoeCkgb2Zmc2V0b2YoVlZlbkNDb250ZXh0LCB4KQo+ICsjZGVmaW5lIFZFIEFWX09QVF9GTEFH X1ZJREVPX1BBUkFNIHwgQVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFSQU0KPiArc3RhdGljIGNvbnN0 IEFWT3B0aW9uIG9wdGlvbnNbXSA9IHsKPiArICAgIHsgInByZXNldCIsICAgICAgICJzZXQgZW5j b2RpbmcgcHJlc2V0IiwgT0ZGU0VUKHByZXNldCksCj4gQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9 IDJ9LCAwLCA0LCBWRSwgInByZXNldCJ9LAo+ICsgICAgeyAiZmFzdGVyIiwgICAgICAgIjAiLCAw LCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSBWVkVOQ19GQVNURVJ9LAo+IElOVF9NSU4sIElO VF9NQVgsIFZFLCAicHJlc2V0IiB9LAo+ICsgICAgeyAiZmFzdCIsICAgICAgICAgIjEiLCAwLCBB Vl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSBWVkVOQ19GQVNUfSwKPiAgSU5UX01JTiwgSU5UX01B WCwgVkUsICJwcmVzZXQiIH0sCj4gKyAgICB7ICJtZWRpdW0iLCAgICAgICAiMiIsIDAsIEFWX09Q VF9UWVBFX0NPTlNULCB7Lmk2NCA9IFZWRU5DX01FRElVTX0sCj4gSU5UX01JTiwgSU5UX01BWCwg VkUsICJwcmVzZXQiIH0sCj4gKyAgICB7ICJzbG93IiwgICAgICAgICAiMyIsIDAsIEFWX09QVF9U WVBFX0NPTlNULCB7Lmk2NCA9IFZWRU5DX1NMT1d9LAo+ICBJTlRfTUlOLCBJTlRfTUFYLCBWRSwg InByZXNldCIgfSwKPiArICAgIHsgInNsb3dlciIsICAgICAgICI0IiwgMCwgQVZfT1BUX1RZUEVf Q09OU1QsIHsuaTY0ID0gVlZFTkNfU0xPV0VSfSwKPiBJTlRfTUlOLCBJTlRfTUFYLCBWRSwgInBy ZXNldCIgfSwKPiArICAgIHsgInFwIiwgICAgICAgICAgICJzZXQgcXVhbnRpemF0aW9uIiwgICAg ICAgICAgT0ZGU0VUKHFwKSwKPiBBVl9PUFRfVFlQRV9JTlQsICB7Lmk2NCA9IDMyfSwgLTEsIDYz LCBWRSB9LAo+ICsgICAgeyAicXBhIiwgICAgICAgICAgInNldCBzdWJqZWN0aXZlIChwZXJjZXB0 dWFsbHkgbW90aXZhdGVkKQo+IG9wdGltaXphdGlvbiIsIE9GRlNFVChxcGEpLCBBVl9PUFRfVFlQ RV9CT09MLCB7Lmk2NCA9IDF9LCAgMCwgMSwgVkV9LAo+ICsgICAgeyAicGFzc2xvZ2ZpbGUiLCAg IkZpbGVuYW1lIGZvciAyIHBhc3Mgc3RhdHMiLCBPRkZTRVQoc3RhdHMpLAo+IEFWX09QVF9UWVBF X1NUUklORywgey5zdHIgPSBOVUxMfSwgMCwgMCwgVkV9LAo+ICsgICAgeyAic3RhdHMiLCAgICAg ICAgIkZpbGVuYW1lIGZvciAyIHBhc3Mgc3RhdHMiLCBPRkZTRVQoc3RhdHMpLAo+IEFWX09QVF9U WVBFX1NUUklORywgey5zdHIgPSBOVUxMfSwgMCwgMCwgVkV9LAo+ICsgICAgeyAicGVyaW9kIiwg ICAgICAgInNldCAoaW50cmEpIHJlZnJlc2ggcGVyaW9kIGluIHNlY29uZHMiLAo+IE9GRlNFVChp bnRyYV9yZWZyZXNoX3NlYyksIEFWX09QVF9UWVBFX0lOVCwgIHsuaTY0ID0gMX0sICAxLCBJTlRf TUFYLCBWRSB9LAo+ICsgICAgeyAidnZlbmMtcGFyYW1zIiwgInNldCB0aGUgdnZlbmMgY29uZmln dXJhdGlvbiB1c2luZyBhIDotc2VwYXJhdGVkCj4gbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVy cyIsIE9GRlNFVCh2dmVuY19vcHRzKSwgQVZfT1BUX1RZUEVfRElDVCwgeyAwIH0sCj4gMCwgMCwg VkUgfSwKPiArICAgIHsgImxldmVsIiwgICAgICAgICJTcGVjaWZ5IGxldmVsIChhcyBkZWZpbmVk IGJ5IEFubmV4IEEpIiwKPiBPRkZTRVQobGV2ZWwpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3Ry ID0gTlVMTH0sIDAsIDAsIFZFfSwKPiArICAgIHsgInRpZXIiLCAgICAgICAgICJzZXQgdnZjIHRp ZXIiLCBPRkZTRVQodGllciksIEFWX09QVF9UWVBFX0lOVCwKPiB7Lmk2NCA9IDB9LCAgMCwgMSwg VkUsICJ0aWVyIn0sCj4gKyAgICB7ICJtYWluIiwgICAgICAgICAibWFpbiIsIDAsIEFWX09QVF9U WVBFX0NPTlNULCB7Lmk2NCA9IDB9LCBJTlRfTUlOLAo+IElOVF9NQVgsIFZFLCAidGllciJ9LAo+ ICsgICAgeyAiaGlnaCIsICAgICAgICAgImhpZ2giLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5p NjQgPSAxfSwgSU5UX01JTiwKPiBJTlRfTUFYLCBWRSwgInRpZXIifSwKPiArICAgIHtOVUxMfQo+ ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IEFWQ2xhc3MgY2xhc3MgPSB7Cj4gKyAgICAuY2xhc3Nf bmFtZSA9ICJsaWJ2dmVuYyIsCj4gKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9u YW1lLAo+ICsgICAgLm9wdGlvbiAgICAgPSBvcHRpb25zLAo+ICsgICAgLnZlcnNpb24gICAgPSBM SUJBVlVUSUxfVkVSU0lPTl9JTlQsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgRkZDb2RlY0Rl ZmF1bHQgdnZlbmNfZGVmYXVsdHNbXSA9IHsKPiArICAgIHsgImIiLCAiMCIgfSwKPiArICAgIHsg ImciLCAiLTEiIH0sCj4gKyAgICB7IE5VTEwgfSwKPiArfTsKPiArCj4gK2NvbnN0IEZGQ29kZWMg ZmZfbGlidnZlbmNfZW5jb2RlciA9IHsKPiArICAgIC5wLm5hbWUgICAgICAgICA9ICJsaWJ2dmVu YyIsCj4gKyAgICBDT0RFQ19MT05HX05BTUUoImxpYnZ2ZW5jIEguMjY2IC8gVlZDIiksCj4gKyAg ICAucC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCj4gKyAgICAucC5pZCAgICAg ICAgICAgPSBBVl9DT0RFQ19JRF9WVkMsCj4gKyAgICAucC5jYXBhYmlsaXRpZXMgPSBBVl9DT0RF Q19DQVBfRFIxIHwgQVZfQ09ERUNfQ0FQX0RFTEFZIHwKPiArICAgICAgICAgICAgICAgICAgICAg IEFWX0NPREVDX0NBUF9PVEhFUl9USFJFQURTLAo+ICsgICAgLnAucHJvZmlsZXMgICAgID0gTlVM TF9JRl9DT05GSUdfU01BTEwoZmZfdnZjX3Byb2ZpbGVzKSwKPiArICAgIC5wLnByaXZfY2xhc3Mg ICA9ICZjbGFzcywKPiArICAgIC5wLndyYXBwZXJfbmFtZSA9ICJsaWJ2dmVuYyIsCj4gKyAgICAu cHJpdl9kYXRhX3NpemUgPSBzaXplb2YoVlZlbkNDb250ZXh0KSwKPiArICAgIC5wLnBpeF9mbXRz ICAgICA9IHBpeF9mbXRzX3Z2ZW5jLAo+ICsgICAgLmluaXQgICAgICAgICAgID0gdnZlbmNfaW5p dCwKPiArICAgIEZGX0NPREVDX0VOQ09ERV9DQih2dmVuY19mcmFtZSksCj4gKyAgICAuY2xvc2Ug ICAgICAgICAgPSB2dmVuY19jbG9zZSwKPiArICAgIC5kZWZhdWx0cyAgICAgICA9IHZ2ZW5jX2Rl ZmF1bHRzLAo+ICsgICAgLmNhcHNfaW50ZXJuYWwgID0gRkZfQ09ERUNfQ0FQX0lOSVRfQ0xFQU5V UCB8Cj4gRkZfQ09ERUNfQ0FQX0FVVE9fVEhSRUFEUwo+ICt9Owo+IC0tCj4gMi4zNC4xCj4KPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGZmbXBlZy1k ZXZlbCBtYWlsaW5nIGxpc3QKPiBmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwo+IGh0dHBzOi8vZmZt cGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAo+Cj4gVG8gdW5zdWJzY3JpYmUs IHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVn Lm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4KPgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBl Zy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Zm bXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZm bXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIu Cg==