Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wc1A7-0031cc-1Z for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jun 2026 13:27:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wc1A6-00Bw4h-1R for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jun 2026 13:27:34 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wc1A5-00Bw4Y-2v for pgsql-hackers@lists.postgresql.org; Tue, 23 Jun 2026 13:27:34 +0000 Received: from mail-ed1-x534.google.com ([2a00:1450:4864:20::534]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wc1A1-00000001vTE-3TdA for pgsql-hackers@postgresql.org; Tue, 23 Jun 2026 13:27:33 +0000 Received: by mail-ed1-x534.google.com with SMTP id 4fb4d7f45d1cf-697de335c18so1001022a12.2 for ; Tue, 23 Jun 2026 06:27:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782221243; cv=none; d=google.com; s=arc-20240605; b=Sg4nhKACxX9AW8qoWv4nMuo1XVxAFrRgNl304vO8XczV+5d+e74u4DfQ/nVQ/PMQkx tHtPGP690XqdGXVTO1SxFq/wjIVXFll5JWpaxAl3C8Gg2NeAn0zrZSGwhZmvOD+y3o3v rCrXizDMt1y+cxacOBq5IVGT5e0Ygc6qJSEy8fXhK3WgwkaBahd6+jEU5yCW9l0vqZGX jwmCrYORL4fLBK9MBbbZCzQtJMWIkuN05kvDa9bgZGjqKJeiYFVEQ7ku/YwChiWn2D35 Lme8OkfzBRXZYrcZ7d3imKHxBKSeIhSYWtVslUm4epIMnVrbvsteNRagcv4GiHU8+I9y HwbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=CyMLnNRXkzJHuVtE2QPR5t6shRzdWbYSiTkFcCIbbi4=; fh=TSyTSo86QwJrrD9h3BK64dgyXv+UjXWhrxt9IA1/O9A=; b=cLZnaCIgbzYGdlnJmHr8cr3vpMux69CMEZ8FIv/gSrc61gDqOfn3CvG3F0nAYt/YHY vtVZK8NTP8cVnPbxs0X+SoiScZP065lXvHRilWWJKhkRkbu7XAIzhMO3QvHIagXJeEKQ lp3R9JDkBjsUgzzQPC05Vu7PvbtcpMpuC82tYS3gbQYsk6+oakb00UxEkXYqcVARh2h4 7k3SnugLSQzIgojmE6hiTwKztTEcT0mK+GzQ/rgUsllZQ6uAx06QGs5+4HpM/QMYxeQn NQ8GibljP1XxmxlRqJB3cVfhE1vlvA8o4Xyai8qbnUaJpiDUMeFUVFDgTgdFaDlik4bC R+IQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782221243; x=1782826043; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=CyMLnNRXkzJHuVtE2QPR5t6shRzdWbYSiTkFcCIbbi4=; b=M4feexekt9u44LmFVTf3A2gFs7PbDskqPXNQ44T9lyZHb+qNip1j1/Bf0DM/PgylaC kZo+TRXZlAxhsyKzSVcN7CkS7wA0RzgaL8XXF1Dsu11Z75qhHsNOJ6lgagPzC0CMbeOD gpv+1zFZCY5M0ieApdTknjqUUvdOQYUoz/iTV8Qn2U3fkN9w+NePwsspApm1SPxyDzcc zwTWTyYrlFg60TCoUbAqdX/0SbIeLEL3X8Fzzvg3/l9e/aXA6fh+RAOxIs/Bqu2Gpo/Y A1gGpxiSxPk6UbGPndiu1mQ5W7VUSSx6rnSjv/NopcYt0kixG7EMlmMdVrXM+aizAFKq ID9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782221243; x=1782826043; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=CyMLnNRXkzJHuVtE2QPR5t6shRzdWbYSiTkFcCIbbi4=; b=iGt1Mk9fcdDbPdKxQ9QjahjgzDo5OlVm8eLrDmFR3j4W8WF+y0oAqj2K8UzNNBHxwN EM8nFmV7lVvKLa2GJnD5fa/LW8lydV+QYGqHODSEnA3h/WBkWU7FpD7ycntFWIli8XYf kuCn3OCwhhbj5QpDx90fq0+1eqDkGTc5Mu+4bM9xXNr7ir9sgwoV/PVTxGDqWHtRHZFV hUeMXLoZLEF0wwo47+4Y01ms8k5pHPGSwnuJD3hAttMDTyBJ6MkUsUIZ41YMIFIVtcAt DKykgjRSwoB3LfrdacL+IJUavIVQpZ3lpMO6tHqPaAvrSom5OS/LYdwfje9nsBH3gFiw SN/A== X-Forwarded-Encrypted: i=1; AFNElJ+8BfDwxHbTtPMtNGPFvcUNcNttOUjzKgNrhYRtRC4R8YhZJ8rU3Gp/+9TRopvAWm/+0owdtQYpS+OeGOO0@postgresql.org X-Gm-Message-State: AOJu0Yx7WysAb63o7Zsc42YuAIIRSNaSj5xDCeUMTetMlkx2JgF0rxd2 jdJCJegfppiFVm7uGWeTVpI2SRb7ZR2+WNCmHiJdEidXMsDzVFbDdFwGwI16PqAJW84gV9sPFcj 0p+NwtFG57pWi392LOFtvYzOXEy0S634= X-Gm-Gg: AfdE7clNrEZo8HKoc8hppofoU9eRXylwgcB5UNMVmH8Hs5ceX1G7bs5wroUuOauDb/c bWNpIcurQSSIGvRCQOtpG0X0bWRXRez/31X5VrjqqWFl7LVOSiq+LkD7VQISAE+pJShqzzCXX2V x61ixZ+jVRTFXQ3znzDMaDjYzrPYPMZRhtKKkRrbJ8VY+1WIJzhsGDXz1QerKESgc3X4cOPxh8J ot67HQOr2pOV/kOMNhNPgWYIKO2thnSm3VOgZj/rBl9fZDtN0Q4fy2L1tLSfOqHKQF7qpITVq2q ezzXQw== X-Received: by 2002:a05:6402:5303:b0:683:e394:cc0c with SMTP id 4fb4d7f45d1cf-696edc5b035mr9325211a12.4.1782221243034; Tue, 23 Jun 2026 06:27:23 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Imran Zaheer Date: Tue, 23 Jun 2026 18:27:10 +0500 X-Gm-Features: AVVi8Cdp9332fUGhNvwULEodBVxvYzj7sEkP8Q6PUTtgadxXB8Qyyd5K-dUzfZk Message-ID: Subject: Re: [WIP] Pipelined Recovery To: Xuneng Zhou Cc: assam258@gmail.com, Zsolt Parragi , Jakub Wartak , "Hayato Kuroda (Fujitsu)" , pgsql-hackers Content-Type: multipart/mixed; boundary="0000000000001a84cb0654ebb847" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001a84cb0654ebb847 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi I am attaching the new series of patches. What has changed? * Rebased * The patch set is now split into two new patches. This will make the code easier to understand and review. * The v4-0003 patch contains code mostly related to keeping the recovery states synced between the startup process and the pipeline process. Most of these changes were required to make the streaming replication work. * The v4-0002 patch now only contains the consumer code that handles receiving the decoded records from the shmem queue and moving the redo loop forward. * The v4-0004 contains some basic tests to see if the pipeline worker is functioning as expected. More testing was done by passing PG_TEST_INITDB_EXTRA_OPTS=3D"-c wal_pipeline=3Don" before running the recovery test suite. * Other than that, the cpu overhead during deserialization is optimized by skipping multiple copies of the decoded record and directly passing the pointer to the shmem queue. There is still some overhead visible during serialization that could be improved at the producer end. * Signal handling for the pipeline worker is improved so that promotion signals are sent to both the startup process and the producer worker by the postmaster. You will also find the new benchmarks attached [1] and the pdf report overview. A simple cpu profiling on the pipelined startup process shows that the cpu overhead during reading records has now been removed and offloaded to the producer worker. Before pipelining: Around 50% of the cpu time is spent on fetching the wal record. Note that in this workload pipeline is off so don't worry about the new func ReceiveRecord(), it's just a wrapper around ReadRecord(). Children Self Command Shared O Symbol - 98.85% 0.21% postgres postgres [.] PerformWalRecovery - 98.64% PerformWalRecovery - 51.00% ReceiveRecord - 50.78% ReadRecord - 50.52% XLogPrefetcherReadRecord - 49.61% XLogPrefetcherNextBlock + 25.33% XLogReadAhead + 22.32% PrefetchSharedBuffer + 0.76% smgropen - 46.68% ApplyWalRecord + 29.23% heap_redo + 9.51% heap2_redo + 4.74% btree_redo + 1.11% xlog_redo + 0.80% xact_redo After Pipelining: Here the only work needed to be done by the cpu is to get the decoded record from the queue. Other times (89.13%) cpu is worried about applying the wal recor= d. Children Self Command Shared O Symbol - 98.74% 0.37% postgres postgres [.] PerformWalRecovery - 98.37% PerformWalRecovery - 89.13% ApplyWalRecord + 56.89% heap_redo + 18.28% heap2_redo + 8.01% btree_redo + 2.02% xlog_redo + 1.15% xact_redo - 7.80% ReceiveRecord + 7.63% WalPipeline_ReceiveRecord If the recovery process is not I/O bound then we would be able to test this cpu optimization. Doing pgbench on a workload that is fully in memory shows around 30% performance gains. You can see more benchmarking details in the attached drive link [1] Some comments related to attached pdf and benchmarking, it is showing that we can get more performance advantage out of the pipeline when most of the workload is running in memory i.e. we have enough shared buffers configured. If you want to do some experiments, please be my guest; I would be happy to see more testing. You can share what performance advantage you are getting from this. You can also refer to the benchmarking script that I have been using [2]. Looking forward to your review, comments, etc. Thanks, Imran Zaheer [1]: https://drive.google.com/file/d/13FATRT3kjh_y1wWETpYQh4ZXVLNaYU4A/view= ?usp=3Dsharing [2]: https://github.com/imranzaheer612/pg-recovery-testing On Wed, Apr 22, 2026 at 2:44=E2=80=AFPM Xuneng Zhou = wrote: > > Hi Henson, Imran, > > On Wed, Apr 8, 2026 at 7:14=E2=80=AFPM Imran Zaheer wrote: > > > > Hi > > > > I am uploading the new version with the following fixes > > > > * Rebased version. > > * Skip serialization of decoded records. As pointed out by Henson, > > there was no need to serialize the records again > > for the sh_mq. We can simply pass the continuous bytes with minor > > pointer fixing to the sh_mq > > > > This time I am uploading the benchmarking results to drive and > > attaching the link here. Otherwise my mail will get holded for > > moderation (My guess is overall attachment size is greater than 1MB tha= ts why). > > > > I am still not sure whether my testing approach is good enough. > > Because sometimes I am not able to get the same performance > > improvement > > with the pgbench builtin scripts as I got with the custom sql scripts. > > Maybe pgbench is not creating enough WAL to test on > > or maybe I am missing something. > > > > Benchmarks: https://drive.google.com/file/d/1Y4SYVnrFEQRE5T2r87rrTr7SWC= 9m19Si/view?usp=3Dsharing > > > > Thanks & Regards > > Imran Zaheer > > > > Imran Zaheer > > > > On Wed, Apr 8, 2026 at 1:46=E2=80=AFPM Imran Zaheer wrote: > > > > > > > > > > > Hi Xuneng, Imran, and everyone, > > > > > > > > > > Hi Henson and Xuneng. > > > > > > Thanks for explaining the approaches to Xuneng. > > > > > > > > > > > The two approaches target different bottlenecks. The current patch > > > > parallelizes WAL decoding, which keeps the redo path single-threade= d > > > > and avoids the Hot Standby visibility problem entirely. > > > > > > > > > > You are right both approaches > > > target different bottlenecks. Pipeline patch aims to improve overall > > > cpu throughput > > > and to save CPU time by offloading the steps we can safely do in para= llel with > > > out causing synchronization problems. > > > > > > > One thing I am curious about in the current patch: WAL records are > > > > already in a serialized format on disk. The producer decodes them a= nd > > > > then re-serializes into a different custom format for shm_mq. What = is > > > > the advantage of this second serialization format over simply passi= ng > > > > the raw WAL bytes after CRC validation and letting the consumer dec= ode > > > > directly? Offloading CRC to a separate core could still improve > > > > throughput at the cost of higher total CPU usage, without needing t= he > > > > custom format. > > > > > > > > > > Thanks. You are right there was no need to serialize the decoded reco= rd again. > > > I was not aware that we already have continuous bytes in memory. In m= y > > > next patch > > > I will remove this extra serialization step. > > > > > > > Koichi's approach parallelizes redo (buffer I/O) itself, which atta= cks > > > > a larger cost =E2=80=94 Jakub's flamegraphs show BufferAlloc -> > > > > GetVictimBuffer -> FlushBuffer dominating in both p0 and p1 =E2=80= =94 but at > > > > the expense of much harder concurrency problems. > > > > > > > > Whether the decode pipelining ceiling is high enough, or whether th= e > > > > redo parallelization complexity is tractable, seems like the centra= l > > > > design question for this area. > > > > > > I still have to investigate the problem related to `GetVictimBuffer` = that > > > Jakub mentioned. But I was trying that how can we safely offload the = work done > > > by `XLogReadBufferForRedoExtended` to a separate > > > pipeline worker, or maybe we can try prefetching the buffer header so > > > the main redo > > > loop doesn't have to spend time getting the buffer > > Thanks for your clarification! I'll try to review this patch later. > > -- > Best, > Xuneng --0000000000001a84cb0654ebb847 Content-Type: text/x-patch; charset="UTF-8"; name="v4-0004-Pipelined-Recovery-Add-Tap-test.patch" Content-Disposition: attachment; filename="v4-0004-Pipelined-Recovery-Add-Tap-test.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqqo699e3 RnJvbSAxMDAyN2YyZTJhNmRiZGE3ZjQ5YWUzYjMwOWE1NTIyYWRkMjNmMjVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbXJhbiBaYWhlZXIgPGltcmFuLnpoaXJAZ21haWwuY29tPgpE YXRlOiBNb24sIDIyIEp1biAyMDI2IDEyOjM2OjQ1ICswNTAwClN1YmplY3Q6IFtQQVRDSCB2NCA0 LzRdIFBpcGVsaW5lZCBSZWNvdmVyeSAtIEFkZCBUYXAgdGVzdAoKU29tZSBiYXNpYyB0YXAgdGVz dCB0byBlbnN1cmUgcGlwZWxpbmUgaXMgd29ya2luZyBhcyBleHBlY3RlZC4KCk1vc3Qgb2YgdGhl IHRlc3RpbmcgaXMgZG9uZSBieSBydW5uaW5nIGFsbCB0aGUgdGVzdHMgdW5kZXIgdGhlIHJlY292 ZXJ5IHN1aXRlCndpdGggcGlwZWxpbmUgb24gYnkgZGVmYXVsdCBpLmUuIFBHX1RFU1RfSU5JVERC X0VYVFJBX09QVFM9Ii1jIHdhbF9waXBlbGluZT1vbiIKLS0tCiBzcmMvdGVzdC9yZWNvdmVyeS9t ZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWNvdmVyeS90LzA1NF93YWxw aXBlbGluZS5wbCB8IDIwOCArKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5n ZWQsIDIwOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVjb3Zl cnkvdC8wNTRfd2FscGlwZWxpbmUucGwKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS9t ZXNvbi5idWlsZCBiL3NyYy90ZXN0L3JlY292ZXJ5L21lc29uLmJ1aWxkCmluZGV4IDllYjhlZDEx NDI1Li4yNTFlMTgyMmRlYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVp bGQKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVpbGQKQEAgLTYyLDYgKzYyLDcgQEAg dGVzdHMgKz0gewogICAgICAgJ3QvMDUxX2VmZmVjdGl2ZV93YWxfbGV2ZWwucGwnLAogICAgICAg J3QvMDUyX2NoZWNrcG9pbnRfc2VnbWVudF9taXNzaW5nLnBsJywKICAgICAgICd0LzA1M19zdGFu ZGJ5X2xvZ2luX2V2ZW50X3RyaWdnZXIucGwnLAorICAgICAgJ3QvMDU0X3dhbHBpcGVsaW5lLnBs JywKICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTRf d2FscGlwZWxpbmUucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzA1NF93YWxwaXBlbGluZS5wbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDY4MmM4NzhjNzkKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzA1NF93YWxwaXBlbGluZS5wbApAQCAt MCwwICsxLDIwOCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjUtMjAyNiwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMKKyMgVGVzdHMgZm9yIHRoZSBXQUwgcGlwZWxpbmUgZmVh dHVyZSAod2FsX3BpcGVsaW5lIEdVQykuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czsKK3VzZSBUZXN0OjpNb3JlOworCisjIC0tLS0tLS0tLS0KKyMgSGVscGVycworIyAtLS0tLS0t LS0tCisKK3N1YiBzbHVycF9sb2cKK3sKKwlteSAoJG5vZGUpID0gQF87CisJb3BlbihteSAkZmgs ICc8JywgJG5vZGUtPmxvZ2ZpbGUoKSkgb3IgZGllICJDYW5ub3Qgb3BlbiBsb2c6ICQhIjsKKwlt eSBAbGluZXMgPSA8JGZoPjsKKwljbG9zZSgkZmgpOworCXJldHVybiBAbGluZXM7Cit9CisKK3N1 YiBsb2dfbWF0Y2hlcworeworCW15ICgkbm9kZSwgJHJlKSA9IEBfOworCXJldHVybiBncmVwIHsg LyRyZS8gfSBzbHVycF9sb2coJG5vZGUpOworfQorCisKKyMgIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworIyAgIHdhbF9waXBlbGluZSA9IG9uLCBiYXNpYyByZWNvdmVy eQorIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK215ICRub2Rl MSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncDEtcmVjb3ZlcnknKTsKKyRub2Rl MS0+aW5pdDsKKyRub2RlMS0+c3RhcnQ7CisKKyRub2RlMS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHF7CisgICAgQ1JFQVRFIFRBQkxFIHQgKGlkIHNlcmlhbCBQUklNQVJZIEtFWSwgdiB0ZXh0KTsK KyAgICBJTlNFUlQgSU5UTyB0ICh2KQorICAgIFNFTEVDVCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSw1MDAwMCkgaTsKK30pOworCisjIGdlbmVyYXRlIG1vcmUgV0FMCiskbm9k ZTEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworICAgIElOU0VSVCBJTlRPIHQgKHYpCisgICAg U0VMRUNUIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDUwMDAwKSBpOworfSk7 CisKKyMgY3Jhc2ggc3RvcCB0byBmb3JjZSBXQUwgcmVjb3ZlcnkKKyRub2RlMS0+c3RvcCgnaW1t ZWRpYXRlJyk7CisKKyMgcmVzdGFydCDihpIgcmVjb3ZlcnkgaGFwcGVucworJG5vZGUxLT5hcHBl bmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgIndhbF9waXBlbGluZSA9IG9uIik7Ciskbm9kZTEt PnN0YXJ0OworCisKKyMgUHJvZHVjZXIgc3RhcnRlZAorb2soc2NhbGFyIGxvZ19tYXRjaGVzKCRu b2RlMSwgcXIvXFt3YWxwaXBlbGluZVxdIHByb2R1Y2VyOiBzdGFydGVkIGF0LyksCisJJ3Byb2R1 Y2VyIHN0YXJ0ZWQgbWVzc2FnZSBmb3VuZCBpbiBsb2cnKTsKKworIyBQaXBlbGluZSBzdG9wcGVk IGNsZWFubHkKK29rKHNjYWxhciBsb2dfbWF0Y2hlcygkbm9kZTEsIHFyL1xbd2FscGlwZWxpbmVc XSBzaHV0ZG93bi8pLAorCSdwaXBlbGluZSBzdG9wcGVkIG1lc3NhZ2UgZm91bmQgaW4gbG9nJyk7 CisKKyMgQ29uc3VtZXIgcmVjZWl2ZWQgc2h1dGRvd24gZnJvbSBwcm9kdWNlcgorb2soc2NhbGFy IGxvZ19tYXRjaGVzKCRub2RlMSwgcXIvXFt3YWxwaXBlbGluZVxdIGNvbnN1bWVyOiByZWNlaXZl ZCBzaHV0ZG93biBtZXNzYWdlLyksCisJJ2NvbnN1bWVyIHJlY2VpdmVkIHNodXRkb3duIG1lc3Nh Z2UgZnJvbSBwcm9kdWNlcicpOworCisjIHNlbnQgPT0gcmVjZWl2ZWQKK215IEBleGl0X2xpbmVz ID0gbG9nX21hdGNoZXMoJG5vZGUxLAorCXFyL1xbd2FscGlwZWxpbmVcXSBwcm9kdWNlcjogZXhp dGluZzogc2VudD1cZCsgcmVjZWl2ZWQ9XGQrLyk7CitvayhzY2FsYXIgQGV4aXRfbGluZXMgPj0g MSwgJ3Byb2R1Y2VyIGV4aXRpbmcgbGluZSBmb3VuZCBpbiBsb2cnKTsKKworbXkgKCRzZW50LCAk cmVjdikgPSAkZXhpdF9saW5lc1stMV0gPX4gL3NlbnQ9KFxkKykgcmVjZWl2ZWQ9KFxkKykvOwor b2soZGVmaW5lZCAkc2VudCAmJiAkc2VudCA+IDAsICJzZW50IGNvdW50ICgkc2VudCkgaXMgcG9z aXRpdmUiKTsKK29rKGRlZmluZWQgJHJlY3YgJiYgJHJlY3YgPiAwLCAicmVjZWl2ZWQgY291bnQg KCRyZWN2KSBpcyBwb3NpdGl2ZSIpOworaXMoJHNlbnQsICRyZWN2LCAibm8gcmVjb3JkcyBsb3N0 IGluIHBpcGVsaW5lIHF1ZXVlOiBzZW50PSRzZW50IHJlY2VpdmVkPSRyZWN2Iik7CisKKyMgTm8g UEFOSUMKK29rKCEoc2NhbGFyIGxvZ19tYXRjaGVzKCRub2RlMSwgcXIvXGJQQU5JQ1xiLykpLAor CSdubyBQQU5JQyBtZXNzYWdlcyBkdXJpbmcgcGlwZWxpbmUgcmVjb3ZlcnknKTsKKworIyBEYXRh IGludGVncml0eQorbXkgJGNvdW50ID0gJG5vZGUxLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NF TEVDVCBjb3VudCgqKSBGUk9NIHQnKTsKK2lzKCRjb3VudCArIDAsIDEwMF8wMDAsICdhbGwgMTAw MDAwIHJvd3MgdmlzaWJsZSBhZnRlciBwaXBlbGluZSByZWNvdmVyeScpOworCiskbm9kZTEtPnN0 b3A7CisKKyMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKyMgICAgd2FsX3BpcGVsaW5lID0gb2ZmIChiYXNlbGluZSwgbm8gcGlw ZWxpbmUgbG9nIG1lc3NhZ2VzKQorIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitteSAkbm9kZTIgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyLT5uZXcoJ3AwLXJlY292ZXJ5Jyk7Ciskbm9kZTItPmluaXQ7Ciskbm9kZTIt PnN0YXJ0OworCiskbm9kZTItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworICAgIENSRUFURSBU QUJMRSB0IChpZCBzZXJpYWwgUFJJTUFSWSBLRVksIHYgdGV4dCk7CisgICAgSU5TRVJUIElOVE8g dCAodikKKyAgICBTRUxFQ1QgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsNTAw MDApIGk7Cit9KTsKKworIyBnZW5lcmF0ZSBtb3JlIFdBTAorJG5vZGUyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXsKKyAgICBJTlNFUlQgSU5UTyB0ICh2KQorICAgIFNFTEVDVCBtZDUoaTo6dGV4 dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1MDAwMCkgaTsKK30pOworCisjIGNyYXNoIHN0b3Ag dG8gZm9yY2UgV0FMIHJlY292ZXJ5Ciskbm9kZTItPnN0b3AoJ2ltbWVkaWF0ZScpOworCisjIHJl c3RhcnQg4oaSIHJlY292ZXJ5IGhhcHBlbnMKKyRub2RlMi0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVz cWwuY29uZicsICJ3YWxfcGlwZWxpbmUgPSBvZmYiKTsKKyRub2RlMi0+c3RhcnQ7CisKK29rKCEo c2NhbGFyIGxvZ19tYXRjaGVzKCRub2RlMiwgcXIvXFt3YWxwaXBlbGluZVxdIHByb2R1Y2VyOiBz dGFydGVkLykpLAorCSdubyBwaXBlbGluZSBsb2cgbWVzc2FnZXMgd2hlbiB3YWxfcGlwZWxpbmUg PSBvZmYnKTsKKworbXkgJGNvdW50MiA9ICRub2RlMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdT RUxFQ1QgY291bnQoKikgRlJPTSB0Jyk7CitpcygkY291bnQyICsgMCwgMTAwXzAwMCwgJ2FsbCBy b3dzIHByZXNlbnQgYWZ0ZXIgbm9uLXBpcGVsaW5lIHJlY292ZXJ5Jyk7CisKKyRub2RlMi0+c3Rv cDsKKworCisKKyMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgVGVzdCBwaXBlbGluZSBvbiB2cyBvZmYgcHJvZHVj ZSBpZGVudGljYWwgZGF0YSAoY2hlY2tzdW0gY29tcGFyaXNvbikKKyMgIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitt eSAkcHJpbWFyeSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJpbWFyeScpOwor JHByaW1hcnktPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAxKTsKKyRwcmltYXJ5LT5zdGFydDsK KworJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworICAgIENSRUFURSBUQUJMRSB0 IChpZCBzZXJpYWwgUFJJTUFSWSBLRVksIHYgdGV4dCk7CisgICAgSU5TRVJUIElOVE8gdCAodikK KyAgICBTRUxFQ1QgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMwMDAwKSBp OworfSk7CisKKyRwcmltYXJ5LT5iYWNrdXAoJ2JhY2t1cDMnKTsKKworJHByaW1hcnktPnNhZmVf cHNxbCgncG9zdGdyZXMnLCBxeworICAgIElOU0VSVCBJTlRPIHQgKHYpCisgICAgU0VMRUNUIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAzMDAwMCkgaTsKKyAgICBVUERBVEUg dCBTRVQgdiA9ICd4JyBXSEVSRSBpZCAlIDEwID0gMDsKK30pOworCisjIGVuc3VyZSBXQUwgYm91 bmRhcnkKKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCBwZ19zd2l0Y2hf d2FsKCknKTsKK215ICR0YXJnZXRfbHNuID0gJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAnU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpJyk7CisKK215ICRyZXBsaWNhX29uID0gUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdyZXBsaWNhX3AxJyk7CiskcmVwbGljYV9vbi0+ aW5pdF9mcm9tX2JhY2t1cCgkcHJpbWFyeSwgJ2JhY2t1cDMnLAorICAgIGhhc19zdHJlYW1pbmcg PT4gMSk7CiskcmVwbGljYV9vbi0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJ3YWxf cGlwZWxpbmUgPSBvblxuIik7CiskcmVwbGljYV9vbi0+c3RhcnQ7CisKK215ICRyZXBsaWNhX29m ZiA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncmVwbGljYV9wMCcpOworJHJlcGxp Y2Ffb2ZmLT5pbml0X2Zyb21fYmFja3VwKCRwcmltYXJ5LCAnYmFja3VwMycsCisgICAgaGFzX3N0 cmVhbWluZyA9PiAxKTsKKyRyZXBsaWNhX29mZi0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsICJ3YWxfcGlwZWxpbmUgPSBvZmZcbiIpOworJHJlcGxpY2Ffb2ZmLT5zdGFydDsKKworIyB3 YWl0IGZvciByZXBsaWNhcyB0byBjYXRjaCB1cAorJHByaW1hcnktPndhaXRfZm9yX2NhdGNodXAo JHJlcGxpY2Ffb24pOworJHByaW1hcnktPndhaXRfZm9yX2NhdGNodXAoJHJlcGxpY2Ffb2ZmKTsK KworbXkgJG1kNV9vbiAgPSAkcmVwbGljYV9vbi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAg IlNFTEVDVCBtZDUoc3RyaW5nX2FnZyhpZDo6dGV4dHx8diwgJywnIE9SREVSIEJZIGlkKSkgRlJP TSB0Iik7CisKK215ICRtZDVfb2ZmID0gJHJlcGxpY2Ffb2ZmLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKyAgICAiU0VMRUNUIG1kNShzdHJpbmdfYWdnKGlkOjp0ZXh0fHx2LCAnLCcgT1JERVIgQlkg aWQpKSBGUk9NIHQiKTsKKworaXMoJG1kNV9vbiwgJG1kNV9vZmYsCisgICAgJ3RhYmxlIGNoZWNr c3VtIGlkZW50aWNhbCBiZXR3ZWVuIHBpcGVsaW5lPW9uIGFuZCBwaXBlbGluZT1vZmYnKTsKKwor JHJlcGxpY2Ffb24tPnN0b3A7CiskcmVwbGljYV9vZmYtPnN0b3A7CiskcHJpbWFyeS0+c3RvcCgn ZmFzdCcpOworCisKKworIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIFRl c3QgcGlwZWxpbmUgd2hlbiBubyBuZWVkIG9mIHJlcGxheQorIyAjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKworbXkgJG5vZGUzID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCdwMS1zbWFsbC1yZXBsYXknKTsKKyRub2RlMy0+aW5pdDsKKyRub2RlMy0+c3RhcnQ7CisK KyMgY3Jhc2ggc3RvcCB0byBmb3JjZSBXQUwgcmVjb3ZlcnkKKyRub2RlMy0+c3RvcCgnaW1tZWRp YXRlJyk7CisKKyMgcmVzdGFydCDihpIgcmVjb3ZlcnkgaGFwcGVucworJG5vZGUzLT5hcHBlbmRf Y29uZigncG9zdGdyZXNxbC5jb25mJywgIndhbF9waXBlbGluZSA9IG9uIik7Ciskbm9kZTMtPnN0 YXJ0OworCitvayhzY2FsYXIgbG9nX21hdGNoZXMoJG5vZGUzLCBxci9cW3dhbHBpcGVsaW5lXF0g cHJvZHVjZXI6IGV4aXRpbmc6IHNlbnQ9MCByZWNlaXZlZD0wLyksCisJJ3BpcGVsaW5lIHByb2R1 Y2VyIHNlbnQgemVybyByZWNvcmRzJyk7CisKK29rKChzY2FsYXIgbG9nX21hdGNoZXMoJG5vZGUz LCBxci9yZWRvIGRvbmUgYXQvKSksCisJJ3BpcGVsaW5lIHJlZG8gZG9uZSBldmVuIHdpdGggdGlu eSByZXBsYXknKTsKKworJG5vZGUzLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlCi0tIAoyLjM0LjEKCg== --0000000000001a84cb0654ebb847 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0001-Pipelined-Recovery-Producer-Related-Code.patch" Content-Disposition: attachment; filename="v4-0001-Pipelined-Recovery-Producer-Related-Code.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqqo698v0 RnJvbSA1ODg1NjA1YTY1NzllNTE3ZjY2NDQyMmI3NjNlYzY4MzQ2NDg1MmQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbXJhbiBaYWhlZXIgPGltcmFuLnpoaXJAZ21haWwuY29tPgpE YXRlOiBNb24sIDIyIEp1biAyMDI2IDEyOjM5OjQ5ICswNTAwClN1YmplY3Q6IFtQQVRDSCB2NCAx LzRdIFBpcGVsaW5lZCBSZWNvdmVyeSAtIFByb2R1Y2VyIFJlbGF0ZWQgQ29kZQoKVGhpcyBpbmNs dWRlcyB0aGUgcHJvZHVjZXIgc3BlY2lmaWMgY29kZSBmb3IgdGhlIHByb2R1Y2VyLWNvbnN1bWVy CmFyY2hpdGVjdHVyZSBmb3IgV0FMIHJlcGxheSB0aGF0IHNlcGFyYXRlcyBXQUwgZGVjb2Rpbmcg ZnJvbSB0aGUgc3RhcnR1cApwcm9jZXNzLCBlbmFibGluZyBwYXJhbGxlbCBwcm9jZXNzaW5nIGJl dHdlZW4gZGlmZmVyZW10IHN0ZXBzIG9mIHJlcGxheS4KClRoZSBwcm9kdWNlciBpbmNsdWRlcyBh IGJhY2tncm91bmQgd29ya2VyIHRoYXQgcmVhZHMgYW5kIGRlY29kZXMgV0FMIHJlY29yZHMsCnRo ZW4gc2VuZCB0aGVtIHRvIHRoZSBzdGFydHVwIHByb2Nlc3MgZm9yIHRoZSByZWRvLiBJUEMgaGFw cGVucyB2aWEgc2hhcmVkCm1lbW9yeSBtZXNzYWdlIHF1ZXVlcyAoc2htX21xKSwgYWxsb3dpbmcg dGhlIGRlY29kZXIgdG8gcnVuIGFoZWFkIG9mCnRoZSBhcHBseSBwcm9jZXNzLgoKVGhpcyB3aWxs IGdpdmUgc29tZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgaW4gcmVjb3ZlcmllcyBmb3IgQ1BV LWJvdW5kCndvcmtsb2Fkcy4KCk5ldyBHVUM6IHdhbF9waXBlbGluZSAoZGVmYXVsdDogb2ZmKQoK QXV0aG9yOiBJbXJhbiBaYWhlZXIgPGltcmFuLnpoaXJAZ21haWwuY29tPgpJZGVhIGJ5OiBBbnRz IEFhc21hIDxhbnRzQGN5YmVydGVjLmF0PgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9t ZXNvbi5idWlsZCAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z3BpcGVsaW5lLmMgICAgIHwgNTY3ICsrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3ByZWZldGNoZXIuYyAgIHwgICAzICstCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYmd3b3JrZXIuYyAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9wb3N0bWFz dGVyL3Bvc3RtYXN0ZXIuYyAgICAgICAgICAgfCAgMTIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3BhcmFtZXRlcnMuZGF0ICAgICB8ICAxNSArCiBzcmMvYmFja2VuZC91dGlscy9taXNj L3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDIgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cu aCAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncGlw ZWxpbmUuaCAgICAgICAgICAgICB8IDEwNSArKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3Jl Y292ZXJ5LmggICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0 ZW1saXN0LmggICAgICAgICAgIHwgICAxICsKIDEzIGZpbGVzIGNoYW5nZWQsIDcyMCBpbnNlcnRp b25zKCspLCA2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2dwaXBlbGluZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2dwaXBlbGluZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9NYWtlZmlsZQpp bmRleCBhMzJmNDczZTBhMi4uYmEwYmYzNDM3NjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL01h a2VmaWxlCkBAIC0zMiw2ICszMiw3IEBAIE9CSlMgPSBcCiAJeGxvZ2JhY2t1cC5vIFwKIAl4bG9n ZnVuY3MubyBcCiAJeGxvZ2luc2VydC5vIFwKKwl4bG9ncGlwZWxpbmUubyBcCiAJeGxvZ3ByZWZl dGNoZXIubyBcCiAJeGxvZ3JlYWRlci5vIFwKIAl4bG9ncmVjb3ZlcnkubyBcCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL21lc29uLmJ1aWxkCmluZGV4IDA2YWFkYzdmMzE1Li5iZTM3YjQwNTgxZCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbWVzb24uYnVpbGQKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbWVzb24uYnVpbGQKQEAgLTIwLDYgKzIwLDcgQEAg YmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAneGxvZ2JhY2t1cC5jJywKICAgJ3hsb2dmdW5j cy5jJywKICAgJ3hsb2dpbnNlcnQuYycsCisgICd4bG9ncGlwZWxpbmUuYycsCiAgICd4bG9ncHJl ZmV0Y2hlci5jJywKICAgJ3hsb2dyZWNvdmVyeS5jJywKICAgJ3hsb2dzdGF0cy5jJywKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwaXBlbGluZS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3BpcGVsaW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmFiOWU2ZWNjYzE1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3BpcGVsaW5lLmMKQEAgLTAsMCArMSw1NjcgQEAKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHhsb2dwaXBlbGluZS5jCisgKiAgICBXQUwgcmVwbGF5 IHBpcGVsaW5lIGltcGxlbWVudGF0aW9uCisgKgorICogVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBh IHByb2R1Y2VyLWNvbnN1bWVyIHBpcGVsaW5lIGZvciBXQUwgcmVwbGF5LgorICogVGhlIHByb2R1 Y2VyIChiYWNrZ3JvdW5kIHdvcmtlcikgcmVhZHMgYW5kIGRlY29kZXMgV0FMIHJlY29yZHMgaW4g cGFyYWxsZWwKKyAqIHdpdGggdGhlIGNvbnN1bWVyIChzdGFydHVwIHByb2Nlc3MpIHRoYXQgYXBw bGllcyB0aGVtLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KiAgICBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncGlwZWxpbmUuYworICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPGZj bnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtX3hs b2cuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvcm1nci5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgi CisjaW5jbHVkZSAiYWNjZXNzL3hsb2dwaXBlbGluZS5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9n cHJlZmV0Y2hlci5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCisjaW5jbHVkZSAi YWNjZXNzL3hsb2dyZWNvcmQuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCisj aW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nX2ludGVy bmFsLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5j bHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlci5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvc3RhcnR1 cC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc20u aCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgi CisjaW5jbHVkZSAic3RvcmFnZS9tZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFs LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1fbXEuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobV90 b2MuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5 c3RlbXMuaCIKKyNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidXRpbHMvZWxv Zy5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVzb3du ZXIuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lb3V0Lmgi CisKKworLyoKKyAqIENvbnZlcnQgdmFsdWVzIG9mIEdVQ3MgbWVhc3VyZWQgaW4gbWVnYWJ5dGVz IHRvIGJ5dGVzCisgKi8KKyNkZWZpbmUgTUJUb0J5dGVzKG1idmFyKSAobWJ2YXIgKiAxMDI0ICog MTAyNCkKKworLyoKKyAqIFdhaXRpbmcgZm9yIGNvbnN1bWVyIGJlZm9yZSBleGl0aW5nIGdyYWNl ZnVsbHkuCisgKi8KKyNkZWZpbmUgTUFYX1NIVVRET1dOX1dBSVRfSVRFUlMgMTAwMAkvKiAxMDAw ICogMTBtcyA9IDEwIHNlY29uZHMgKi8KKworCisvKiBHbG9iYWwgc2hhcmVkIG1lbW9yeSBjb250 cm9sIHN0cnVjdHVyZSAqLworV2FsUGlwZWxpbmVTaG1DdGwgKldhbFBpcGVsaW5lU2htID0gTlVM TDsKKworc3RhdGljIHZvaWQgV2FsUGlwZWxpbmVTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0 YXRpYyB2b2lkIFdhbFBpcGVsaW5lU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVt Q2FsbGJhY2tzIFdhbFBpcGVsaW5lU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBX YWxQaXBlbGluZVNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFdhbFBpcGVsaW5lU2htZW1Jbml0 LAorfTsKKworWExvZ1ByZWZldGNoZXIgKnhsb2dwcmVmZXRjaGVyX3BpcGVsaW5lZCA9IE5VTEw7 CisKKy8qIExvY2FsIHN0YXRlIGZvciBwcm9kdWNlciAqLworc3RhdGljIGRzbV9zZWdtZW50ICpw cm9kdWNlcl9kc21fc2VnID0gTlVMTDsKK3N0YXRpYyBzaG1fbXEgKnByb2R1Y2VyX21xID0gTlVM TDsKK3N0YXRpYyBzaG1fbXFfaGFuZGxlICpwcm9kdWNlcl9tcV9oYW5kbGUgPSBOVUxMOworCisv KgorICogRmxhZ3Mgc2V0IGJ5IGludGVycnVwdCBoYW5kbGVycyBmb3IgbGF0ZXIgc2VydmljZSBp biB0aGUgcmVkbyBsb29wLgorICovCitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IGdvdF9T SUdIVVAgPSBmYWxzZTsKK3N0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgcHJvbW90ZV9zaWdu YWxlZCA9IGZhbHNlOworCisvKiBTaWduYWwgaGFuZGxlcnMgKi8KK3N0YXRpYyB2b2lkIFBpcGVs aW5lQmd3U2lnSHVwSGFuZGxlcihTSUdOQUxfQVJHUyk7CitzdGF0aWMgdm9pZCBQaXBlbGluZVBy b2NUcmlnZ2VySGFuZGxlcihTSUdOQUxfQVJHUyk7CisKK3N0YXRpYyB2b2lkIHdhbF9waXBlbGlu ZV9jbGVhbnVwX2NhbGxiYWNrKGludCBjb2RlLCBEYXR1bSBhcmcpOworc3RhdGljIFNpemUgc2Vy aWFsaXplX3dhbF9yZWNvcmQoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQsIGNoYXIgKipidWZmZXIp Oworc3RhdGljIHZvaWQgY2xlYW51cF9wcm9kdWNlcl9yZXNvdXJjZXModm9pZCk7CisKKy8qIGNv cGllZCBmcm9tIHhsb2dyZWNvdmVyeS5jICovCisvKiBQYXJhbWV0ZXJzIHBhc3NlZCBkb3duIGZy b20gUmVhZFJlY29yZCB0byB0aGUgWExvZ1BhZ2VSZWFkIGNhbGxiYWNrLiAqLwordHlwZWRlZiBz dHJ1Y3QgWExvZ1BhZ2VSZWFkUHJpdmF0ZQoreworCWludAkJCWVtb2RlOworCWJvb2wJCWZldGNo aW5nX2NrcHQ7CS8qIGFyZSB3ZSBmZXRjaGluZyBhIGNoZWNrcG9pbnQgcmVjb3JkPyAqLworCWJv b2wJCXJhbmRBY2Nlc3M7CisJVGltZUxpbmVJRAlyZXBsYXlUTEk7Cit9IFhMb2dQYWdlUmVhZFBy aXZhdGU7CisKKworLyoKKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgZm9yIFdBTCBQaXBlbGlu ZQorICovCitzdGF0aWMgdm9pZAorV2FsUGlwZWxpbmVTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQor eworCVNobWVtUmVxdWVzdFN0cnVjdCgubmFtZSA9ICJXQUwgUGlwZWxpbmUgQ3RsIiwKKwkJCQkJ ICAgLnNpemUgPSBzaXplb2YoV2FsUGlwZWxpbmVTaG1DdGwpLAorCQkJCQkgICAucHRyID0gKHZv aWQgKiopICZXYWxQaXBlbGluZVNobSwKKwkJKTsKK30KKworc3RhdGljIHZvaWQKK1dhbFBpcGVs aW5lU2htZW1Jbml0KHZvaWQgKmFyZykKK3sKKwltZW1zZXQoV2FsUGlwZWxpbmVTaG0sIDAsIHNp emVvZihXYWxQaXBlbGluZVNobUN0bCkpOworCisJU3BpbkxvY2tJbml0KCZXYWxQaXBlbGluZVNo bS0+bXV0ZXgpOworfQorCisKKy8qCisgKiBQcm9kdWNlciBGdW5jdGlvbi4KKyAqIE1haW4gbG9v cCBmb3IgdGhlIHByb2R1Y2VyIGJhY2tncm91bmQgd29ya2VyLgorICovCit2b2lkCitXYWxQaXBl bGluZV9Qcm9kdWNlck1haW4oRGF0dW0gbWFpbl9hcmcpCit7CisJZHNtX2hhbmRsZSAgICAgICAg ICAgaGFuZGxlID0gRGF0dW1HZXRVSW50MzIobWFpbl9hcmcpOworCWRzbV9zZWdtZW50ICAgICAg ICAJKnNlZzsKKwlzaG1fdG9jICAgICAgICAgICAgCSp0b2M7CisJV2FsUGlwZWxpbmVQYXJhbXMg IAkqcGFyYW1zOworCVhMb2dSZWFkZXJTdGF0ZSAgICAJKnhsb2dyZWFkZXI7CisJWExvZ1BhZ2VS ZWFkUHJpdmF0ZSAqcHJpdmF0ZTsKKwlYTG9nUmVjb3JkICAgICAgICAgCSpyZWNvcmQ7CisJVGlt ZUxpbmVJRCAgICAgICAgICAgcmVwbGF5VExJID0gMDsKKwlib29sIAkJCQkgZW5kX29mX3dhbCA9 IGZhbHNlOworCXVpbnQ2NAkJCQkgcmVjb3Jkc19zZW50OworCXVpbnQ2NAkJCQkgcmVjb3Jkc19y ZWNlaXZlZDsKKworCS8qCisJICogUHJvcGVybHkgYWNjZXB0IG9yIGlnbm9yZSBzaWduYWxzIHRo ZSBwb3N0bWFzdGVyIG1pZ2h0IHNlbmQgdXMuCisJICovCisJcHFzaWduYWwoU0lHSFVQLCBQaXBl bGluZUJnd1NpZ0h1cEhhbmRsZXIpOyAJLyogcmVsb2FkIGNvbmZpZyBmaWxlICovCisJcHFzaWdu YWwoU0lHVVNSMiwgUGlwZWxpbmVQcm9jVHJpZ2dlckhhbmRsZXIpOworCisJLyogUmVnaXN0ZXIg Y2xlYW51cCBjYWxsYmFjayAqLworCWJlZm9yZV9zaG1lbV9leGl0KHdhbF9waXBlbGluZV9jbGVh bnVwX2NhbGxiYWNrLCAoRGF0dW0pIDApOworCisJc2VnID0gZHNtX2F0dGFjaChoYW5kbGUpOwor CWlmIChzZWcgPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJbd2FscGlw ZWxpbmVdIHByb2R1Y2VyOiBjb3VsZCBub3QgbWFwIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdt ZW50IikpKTsKKworCXRvYyA9IHNobV90b2NfYXR0YWNoKFBHX1dBTF9QSVBFTElORV9NQUdJQywg ZHNtX3NlZ21lbnRfYWRkcmVzcyhzZWcpKTsKKwlpZiAodG9jID09IE5VTEwpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9T VEFURSksCisJCQkJIGVycm1zZygiW3dhbHBpcGVsaW5lXSBwcm9kdWNlcjogYmFkIG1hZ2ljIG51 bWJlciBpbiBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudCIpKSk7CisKKwkvKiBMb29rdXAg cGFyYW1zIGFuZCBxdWV1ZSAqLworCXBhcmFtcyA9IHNobV90b2NfbG9va3VwKHRvYywgMSwgZmFs c2UpOworCXByb2R1Y2VyX21xID0gc2htX3RvY19sb29rdXAodG9jLCAyLCBmYWxzZSk7CisKKwkv KiBTZXQgdXAgcHJvZHVjZXIgc2lkZSBvZiBxdWV1ZSAqLworCXByb2R1Y2VyX2RzbV9zZWcgPSBz ZWc7CisJc2htX21xX3NldF9zZW5kZXIocHJvZHVjZXJfbXEsIE15UHJvYyk7CisJcHJvZHVjZXJf bXFfaGFuZGxlID0gc2htX21xX2F0dGFjaChwcm9kdWNlcl9tcSwgc2VnLCBOVUxMKTsKKworCVNw aW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKwlXYWxQaXBlbGluZVNobS0+ cHJvZHVjZXJfcGlkID0gTXlQcm9jUGlkOworCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVT aG0tPm11dGV4KTsKKworCS8qIERTTSBpcyBub3cgYXR0YWNoZWQsIHNvIHNhZmUgdG8gdW5ibG9j ayB0aGUgc2lnbmFscyAqLworCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJ LyogU2V0IHVwIFdBTCByZWFkaW5nIHByb2Nlc3NvciAqLworCXByaXZhdGUgPSBwYWxsb2MwKHNp emVvZihYTG9nUGFnZVJlYWRQcml2YXRlKSk7CisJeGxvZ3JlYWRlciA9CisJCVhMb2dSZWFkZXJB bGxvY2F0ZSh3YWxfc2VnbWVudF9zaXplLCBOVUxMLAorCQkJCQkJICAgWExfUk9VVElORSgucGFn ZV9yZWFkID0gJlhMb2dQYWdlUmVhZCwKKwkJCQkJCQkJCSAgLnNlZ21lbnRfb3BlbiA9IE5VTEws CisJCQkJCQkJCQkgIC5zZWdtZW50X2Nsb3NlID0gd2FsX3NlZ21lbnRfY2xvc2UpLAorCQkJCQkJ ICAgcHJpdmF0ZSk7CisKKwlpZiAoIXhsb2dyZWFkZXIpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkgZXJybXNnKCJvdXQgb2YgbWVt b3J5IiksCisJCQkJIGVycmRldGFpbCgiRmFpbGVkIHdoaWxlIGFsbG9jYXRpbmcgYSBXQUwgcmVh ZGluZyBwcm9jZXNzb3IuIikpKTsKKwl4bG9ncmVhZGVyLT5zeXN0ZW1faWRlbnRpZmllciA9IEdl dFN5c3RlbUlkZW50aWZpZXIoKTsKKworCS8qCisJICogU2V0IHRoZSBXQUwgZGVjb2RlIGJ1ZmZl ciBzaXplLiAgVGhpcyBsaW1pdHMgaG93IGZhciBhaGVhZCB3ZSBjYW4gcmVhZAorCSAqIGluIHRo ZSBXQUwuCisJICovCisJWExvZ1JlYWRlclNldERlY29kZUJ1ZmZlcih4bG9ncmVhZGVyLCBOVUxM LCB3YWxfZGVjb2RlX2J1ZmZlcl9zaXplKTsKKworCS8qIEluaXQgc29tZSBpbXBvcnRhbnQgZ2xv YmFscyBiZWZvcmUgc3RhcnRpbmcgKi8KKwlyZXBsYXlUTEkgPSBwYXJhbXMtPlJlcGxheVRMSTsK KwlXYWxQaXBlbGluZV9JbXBvcnRSZWNvdmVyeVN0YXRlKHBhcmFtcyk7CisKKwkvKiBSZWluaXQg dGhlIFdBTCBwcmVmZXRjaGVyLiAqLworCXhsb2dwcmVmZXRjaGVyX3BpcGVsaW5lZCA9IFhMb2dQ cmVmZXRjaGVyQWxsb2NhdGUoeGxvZ3JlYWRlcik7CisKKworCWVsb2coTE9HLCAiW3dhbHBpcGVs aW5lXSBwcm9kdWNlcjogc3RhcnRlZCBhdCAlWC8lWCwgVExJICV1IiwKKwkJIExTTl9GT1JNQVRf QVJHUyhwYXJhbXMtPk5leHRSZWNQdHIpLCByZXBsYXlUTEkpOworCisJWExvZ1ByZWZldGNoZXJC ZWdpblJlYWQoeGxvZ3ByZWZldGNoZXJfcGlwZWxpbmVkLCBwYXJhbXMtPk5leHRSZWNQdHIpOwor CisJLyogSGFuZGxlIHRoZSBzaWduYWwgaWYgd2Ugd2VyZSBwcm9tb3RlZCBiZWZvcmUgdGhlIHBp cGVsaW5lIGxhdW5jaCAqLworCXByb21vdGVfc2lnbmFsZWQgPSBwYXJhbXMtPnByb21vdGVkQmVm b3JlTGF1bmNoOworCisJLyogTWFpbiBkZWNvZGluZyBsb29wICovCisJd2hpbGUgKHRydWUpCisJ eworCQlib29sIHNodXRkb3duX3JlcXVlc3RlZDsKKworCQkvKiBDaGVjayBpZiBjb25zdW1lciBy ZXF1ZXN0ZWQgdG8gc3RvcCBkZWNvZGluZyAqLworCQlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVs aW5lU2htLT5tdXRleCk7CisJCXNodXRkb3duX3JlcXVlc3RlZCA9IFdhbFBpcGVsaW5lU2htLT5z aHV0ZG93bl9yZXF1ZXN0ZWQ7CisJCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11 dGV4KTsKKworCQlpZiAoc2h1dGRvd25fcmVxdWVzdGVkKQorCQl7CisJCQllbG9nKERFQlVHMSwg Ilt3YWxwaXBlbGluZV0gcHJvZHVjZXI6IGdvdCBzaHV0ZG93biByZXF1ZXN0IGZyb20gdGhlIGNv bnN1bWVyLiIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBSZWFkIG5leHQgV0FMIHJlY29yZCAq LworCQlyZWNvcmQgPSBSZWFkUmVjb3JkKHhsb2dwcmVmZXRjaGVyX3BpcGVsaW5lZCwgTE9HLCBm YWxzZSwgcmVwbGF5VExJKTsKKworCQlpZiAocmVjb3JkID09IE5VTEwpCisJCXsKKwkJCWVuZF9v Zl93YWwgPSB0cnVlOworCQkJZWxvZyhERUJVRzEsICJbd2FscGlwZWxpbmVdIHByb2R1Y2VyOiBy ZWFjaGVkIGVuZCBvZiBXQUwiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogU3VjY2Vz c2Z1bGx5IGRlY29kZWQgYSByZWNvcmQuIFNlbmQgaXQgdG8gdGhlIGNvbnN1bWVyLgorCQkgKi8K KwkJaWYgKCFXYWxQaXBlbGluZV9TZW5kUmVjb3JkKHhsb2dyZWFkZXIpKQorCQl7CisJCQllbG9n KFdBUk5JTkcsICJbd2FscGlwZWxpbmVdIHByb2R1Y2VyOiBmYWlsZWQgdG8gc2VuZCByZWNvcmQs IHF1ZXVlIGZ1bGwgb3IgZGV0YWNoZWQiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogVXBkYXRl IG91ciBwb3NpdGlvbiBmb3IgbW9uaXRvcmluZyAqLworCQlTcGluTG9ja0FjcXVpcmUoJldhbFBp cGVsaW5lU2htLT5tdXRleCk7CisJCVdhbFBpcGVsaW5lU2htLT5wcm9kdWNlcl9sc24gPSB4bG9n cmVhZGVyLT5FbmRSZWNQdHI7CisJCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11 dGV4KTsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCX0KKworCisJaWYgKGVuZF9vZl93 YWwpCisJeworCQkvKiBOb3RpZnkgY29uc3VtZXIgd2UgbmVlZCB0byBleGl0IGFzIG5vIG1vcmUg cmVjb3JkcyBmb3VuZCAqLworCQlXYWxQaXBlbGluZV9TZW5kU2h1dGRvd24oKTsKKwkJV2FsUGlw ZWxpbmVfV2FpdEZvckNvbnN1bWVyU2h1dGRvd25SZXF1ZXN0KCk7CisJfQorCisJU3BpbkxvY2tB Y3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCXJlY29yZHNfc2VudCA9IFdhbFBpcGVs aW5lU2htLT5yZWNvcmRzX3NlbnQ7CisJcmVjb3Jkc19yZWNlaXZlZCA9IFdhbFBpcGVsaW5lU2ht LT5yZWNvcmRzX3JlY2VpdmVkOworCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11 dGV4KTsKKworCWVsb2coTE9HLCAiW3dhbHBpcGVsaW5lXSBwcm9kdWNlcjogZXhpdGluZzogc2Vu dD0iIFVJTlQ2NF9GT1JNQVQgIiByZWNlaXZlZD0iIFVJTlQ2NF9GT1JNQVQsCisJCSByZWNvcmRz X3NlbnQsIHJlY29yZHNfcmVjZWl2ZWQpOworCisJLyogQ2xlYW51cCAqLworCXBmcmVlKHByaXZh dGUpOworCVhMb2dSZWFkZXJGcmVlKHhsb2dyZWFkZXIpOworCVhMb2dQcmVmZXRjaGVyRnJlZSh4 bG9ncHJlZmV0Y2hlcl9waXBlbGluZWQpOworCURpc293blJlY292ZXJ5V2FrZXVwTGF0Y2goKTsK KwljbGVhbnVwX3Byb2R1Y2VyX3Jlc291cmNlcygpOworfQorCisvKgorICogUHJvZHVjZXIgRnVu Y3Rpb24uCisgKiBTZW5kIGEgZGVjb2RlZCBXQUwgcmVjb3JkIHRvIHRoZSBjb25zdW1lcgorICov Citib29sCitXYWxQaXBlbGluZV9TZW5kUmVjb3JkKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQor eworCWNoYXIgICAgICAgKmJ1ZmZlciA9IE5VTEw7CisJU2l6ZSAgICAgICAgbXNnbGVuOworCXNo bV9tcV9yZXN1bHQgcmVzOworCisKKwlpZiAoIXByb2R1Y2VyX21xX2hhbmRsZSkKKwkJcmV0dXJu IGZhbHNlOworCisJLyogU2VyaWFsaXplIHRoZSByZWNvcmQgKi8KKwltc2dsZW4gPSBzZXJpYWxp emVfd2FsX3JlY29yZChyZWNvcmQsICZidWZmZXIpOworCisJcmVzID0gc2htX21xX3NlbmQocHJv ZHVjZXJfbXFfaGFuZGxlLCBtc2dsZW4sIGJ1ZmZlciwgZmFsc2UsIHRydWUpOworCisJaWYgKHJl cyA9PSBTSE1fTVFfU1VDQ0VTUykKKwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVT aG0tPm11dGV4KTsKKwkJV2FsUGlwZWxpbmVTaG0tPnJlY29yZHNfc2VudCsrOworCQlXYWxQaXBl bGluZVNobS0+Ynl0ZXNfc2VudCArPSBtc2dsZW47CisJCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlw ZWxpbmVTaG0tPm11dGV4KTsKKworCQlwZnJlZShidWZmZXIpOworCQlyZXR1cm4gdHJ1ZTsKKwl9 CisKKwlpZiAocmVzID09IFNITV9NUV9ERVRBQ0hFRCkKKwl7CisJCWVsb2coUEFOSUMsICJbd2Fs cGlwZWxpbmVdIHByb2R1Y2VyOiBjb25zdW1lciBkZXRhY2hlZCIpOworCQlwZnJlZShidWZmZXIp OworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogU29tZSBvdGhlciBlcnJvciAqLworCWVsb2co UEFOSUMsICJbd2FscGlwZWxpbmVdIHByb2R1Y2VyOiBzaG1fbXFfc2VuZCBmYWlsZWQgd2l0aCBy ZXN1bHQgJWQiLCByZXMpOworCXBmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIGZhbHNlOworfQorCisv KgorICogUHJvZHVjZXIgRnVuY3Rpb24uCisgKiBTZW5kIHNodXRkb3duIG1lc3NhZ2UgdG8gY29u c3VtZXIKKyAqLworYm9vbAorV2FsUGlwZWxpbmVfU2VuZFNodXRkb3duKHZvaWQpCit7CisJV2Fs UmVjb3JkTXNnSGVhZGVyIGhkcjsKKwlzaG1fbXFfcmVzdWx0IHJlczsKKworCWlmICghcHJvZHVj ZXJfbXFfaGFuZGxlKQorCQlyZXR1cm4gZmFsc2U7CisKKwloZHIubXNnX3R5cGUgPSBXQUxfTVNH X1NIVVRET1dOOworCWhkci5lbmRSZWNQdHIgPSBJbnZhbGlkWExvZ1JlY1B0cjsKKworCXJlcyA9 IHNobV9tcV9zZW5kKHByb2R1Y2VyX21xX2hhbmRsZSwgc2l6ZW9mKGhkciksICZoZHIsIGZhbHNl LCB0cnVlKTsKKwlyZXR1cm4gKHJlcyA9PSBTSE1fTVFfU1VDQ0VTUyk7Cit9CisKKworLyoKKyAq IHNlcmlhbGl6ZV93YWxfcmVjb3JkIChQcm9kdWNlcikKKyAqCisgKiBQYWNrIGEgV2FsUmVjb3Jk TXNnSGVhZGVyIGZvbGxvd2VkIGJ5IHRoZSBEZWNvZGVkWExvZ1JlY29yZCBpbnRvIGEKKyAqIGNv bnRpZ3VvdXMgYnVmZmVyLCBjb252ZXJ0aW5nIGludGVyaW9yIHBvaW50ZXJzIHRvIHJlbGF0aXZl IG9mZnNldHMuCisgKgorICogT3V0cHV0IGJ1ZmZlciBsYXlvdXQ6CisgKiAgIFtXYWxSZWNvcmRN c2dIZWFkZXJdW0RlY29kZWRYTG9nUmVjb3JkICsgdHJhaWxpbmcgZGF0YV0KKyAqLworc3RhdGlj IFNpemUKK3NlcmlhbGl6ZV93YWxfcmVjb3JkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3JlYWRlciwg Y2hhciAqKm91dGJ1ZikKK3sKKwlEZWNvZGVkWExvZ1JlY29yZCAqZGVjID0geGxvZ3JlYWRlci0+ cmVjb3JkOworCURlY29kZWRYTG9nUmVjb3JkICpkZWNfY29weTsKKwlXYWxSZWNvcmRNc2dIZWFk ZXIgaGRyOworCVNpemUgcGF5bG9hZF9zaXplID0gZGVjLT5zaXplOworCVNpemUgdG90YWwgPSBz aXplb2YoV2FsUmVjb3JkTXNnSGVhZGVyKSArIHBheWxvYWRfc2l6ZTsKKwljaGFyICpidWYgPSBw YWxsb2ModG90YWwpOworCisJLyogYnVpbGQgaGVhZGVyICovCisJaGRyLm1zZ190eXBlICAgICAg ICAgID0gV0FMX01TR19SRUNPUkQ7CisJaGRyLnJlYWRSZWNQdHIgICAgICAgID0geGxvZ3JlYWRl ci0+UmVhZFJlY1B0cjsKKwloZHIuZW5kUmVjUHRyICAgICAgICAgPSB4bG9ncmVhZGVyLT5FbmRS ZWNQdHI7CisJaGRyLm1pc3NpbmdDb250cmVjUHRyID0geGxvZ3JlYWRlci0+bWlzc2luZ0NvbnRy ZWNQdHI7CisJaGRyLmFib3J0ZWRSZWNQdHIgICAgID0geGxvZ3JlYWRlci0+YWJvcnRlZFJlY1B0 cjsKKwloZHIub3ZlcndyaXR0ZW5SZWNQdHIgPSB4bG9ncmVhZGVyLT5vdmVyd3JpdHRlblJlY1B0 cjsKKwloZHIuZGVjb2RlZF9zaXplICAgICAgPSBwYXlsb2FkX3NpemU7CisKKwltZW1jcHkoYnVm LCAmaGRyLCBzaXplb2YoaGRyKSk7CisJbWVtY3B5KGJ1ZiArIHNpemVvZihoZHIpLCBkZWMsIHBh eWxvYWRfc2l6ZSk7CisKKwkvKgorCSAqIEZpeCB1cCB0aGUgaW50ZXJpb3IgcG9pbnRlcnM6IG1h aW5fZGF0YSBhbmQgZWFjaCBibG9jaydzIGRhdGEvYmtwX2ltYWdlCisJICogYXJlIGFic29sdXRl IGFkZHJlc3NlcyBpbiB0aGUgcHJvZHVjZXIuIENvbnZlcnQgdGhlbSB0byBieXRlIG9mZnNldHMK KwkgKiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgY29waWVkIERlY29kZWRYTG9nUmVjb3JkIHNvIHRo ZSBjb25zdW1lciBjYW4KKwkgKiByZWNvbnN0cnVjdCB0aGVtLgorCSAqLworCWRlY19jb3B5ID0g KERlY29kZWRYTG9nUmVjb3JkICopKGJ1ZiArIHNpemVvZihoZHIpKTsKKworCWlmIChkZWNfY29w eS0+bWFpbl9kYXRhX2xlbiA+IDApCisJCWRlY19jb3B5LT5tYWluX2RhdGEgPSAoY2hhciAqKSgo Y2hhciAqKWRlYy0+bWFpbl9kYXRhIC0gKGNoYXIgKilkZWMpOworCisJZm9yIChpbnQgaSA9IDA7 IGkgPD0gZGVjX2NvcHktPm1heF9ibG9ja19pZDsgaSsrKQorCXsKKwkJRGVjb2RlZEJrcEJsb2Nr ICpibGsgPSAmZGVjX2NvcHktPmJsb2Nrc1tpXTsKKwkJaWYgKCFibGstPmluX3VzZSkKKwkJCWNv bnRpbnVlOworCQlpZiAoYmxrLT5oYXNfZGF0YSkKKwkJCWJsay0+ZGF0YSA9IChjaGFyICopKChj aGFyICopZGVjLT5ibG9ja3NbaV0uZGF0YSAtIChjaGFyICopZGVjKTsKKwkJaWYgKGJsay0+aGFz X2ltYWdlKQorCQkJYmxrLT5ia3BfaW1hZ2UgPSAoY2hhciAqKSgoY2hhciAqKWRlYy0+YmxvY2tz W2ldLmJrcF9pbWFnZSAtIChjaGFyICopZGVjKTsKKwl9CisKKwkqb3V0YnVmID0gYnVmOworCXJl dHVybiB0b3RhbDsKK30KKworLyoKKyAqIFdlIG5lZWQgdG8gcHV0IHNvbWUgYXNzZXJ0aW9uIHRo YXQgb25seSBwaXBlbGluZSB3b3JrZXIgc2hvdWxkIGJlIHRvdWNoaW5nCisgKiB0aGUgc3BlY2lm aWMgY29kZS4KKyAqLworYm9vbCBBbVdhbFBpcGVsaW5lKHZvaWQpCit7CisJaWYgKE15QmFja2Vu ZFR5cGUgPT0gQl9CR19XT1JLRVIgJiYgTXlCZ3dvcmtlckVudHJ5KQorCXsKKwkJaWYgKHN0cm5j bXAoTXlCZ3dvcmtlckVudHJ5LT5iZ3dfbmFtZSwgIndhbCBwaXBlbGluZSIsIDEyKSA9PSAwKQor CQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogQ2xlYW4g dXAgcHJvZHVjZXItc2lkZSByZXNvdXJjZXMKKyAqLworc3RhdGljIHZvaWQKK2NsZWFudXBfcHJv ZHVjZXJfcmVzb3VyY2VzKHZvaWQpCit7CisJaWYgKHByb2R1Y2VyX21xX2hhbmRsZSkKKwl7CisJ CXNobV9tcV9kZXRhY2gocHJvZHVjZXJfbXFfaGFuZGxlKTsKKwkJcHJvZHVjZXJfbXFfaGFuZGxl ID0gTlVMTDsKKwl9CisKKwlpZiAocHJvZHVjZXJfZHNtX3NlZykKKwl7CisJCWRzbV9kZXRhY2go cHJvZHVjZXJfZHNtX3NlZyk7CisJCXByb2R1Y2VyX2RzbV9zZWcgPSBOVUxMOworCX0KKworCXBy b2R1Y2VyX21xID0gTlVMTDsKKworCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0tPm11 dGV4KTsKKwlXYWxQaXBlbGluZVNobS0+cHJvZHVjZXJfcGlkID0gMDsKKwlTcGluTG9ja1JlbGVh c2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7Cit9CisKKworLyoKKyAqIENsZWFudXAgY2FsbGJh Y2sgZm9yIHByb2Nlc3MgZXhpdAorICovCitzdGF0aWMgdm9pZAord2FsX3BpcGVsaW5lX2NsZWFu dXBfY2FsbGJhY2soaW50IGNvZGUsIERhdHVtIGFyZykKK3sKKwlwaWRfdCBteXBpZCA9IE15UHJv Y1BpZDsKKwlib29sIGlzX3Byb2R1Y2VyID0gZmFsc2U7CisKKwlpZiAoV2FsUGlwZWxpbmVTaG0p CisJeworCQlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisJCWlzX3By b2R1Y2VyID0gKFdhbFBpcGVsaW5lU2htLT5wcm9kdWNlcl9waWQgPT0gbXlwaWQpOworCQlTcGlu TG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisJfQorCisJaWYgKGlzX3Byb2R1 Y2VyKQorCQljbGVhbnVwX3Byb2R1Y2VyX3Jlc291cmNlcygpOworCWVsc2UKKwkJY2xlYW51cF9j b25zdW1lcl9yZXNvdXJjZXMoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCQlzaWduYWwgaGFuZGxlciByb3V0aW5lcworICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisgLyogU0lHVVNSMjogc2V0IGZsYWcgdG8gZmluaXNoIHJl Y292ZXJ5ICovCitzdGF0aWMgdm9pZAorUGlwZWxpbmVQcm9jVHJpZ2dlckhhbmRsZXIoU0lHTkFM X0FSR1MpCit7CisJcHJvbW90ZV9zaWduYWxlZCA9IHRydWU7CisJV2FrZXVwUmVjb3ZlcnkoKTsK K30KKworLyogU0lHSFVQOiBzZXQgZmxhZyB0byByZS1yZWFkIGNvbmZpZyBmaWxlIGF0IG5leHQg Y29udmVuaWVudCB0aW1lICovCitzdGF0aWMgdm9pZAorUGlwZWxpbmVCZ3dTaWdIdXBIYW5kbGVy KFNJR05BTF9BUkdTKQoreworCWdvdF9TSUdIVVAgPSB0cnVlOworCVdha2V1cFJlY292ZXJ5KCk7 Cit9CisKKy8qCisgKiBSZS1yZWFkIHRoZSBjb25maWcgZmlsZS4KKyAqCisgKiBJZiBvbmUgb2Yg dGhlIGNyaXRpY2FsIHdhbHJlY2VpdmVyIG9wdGlvbnMgaGFzIGNoYW5nZWQsIGZsYWcgeGxvZ3Jl Y292ZXJ5LmMKKyAqIHRvIHJlc3RhcnQgaXQuCisgKi8KK3N0YXRpYyB2b2lkCitQaXBlbGluZVJl cmVhZENvbmZpZyh2b2lkKQoreworCWNoYXIJICAgKmNvbm5pbmZvID0gcHN0cmR1cChQcmltYXJ5 Q29ubkluZm8pOworCWNoYXIJICAgKnNsb3RuYW1lID0gcHN0cmR1cChQcmltYXJ5U2xvdE5hbWUp OworCWJvb2wJCXRlbXBTbG90ID0gd2FsX3JlY2VpdmVyX2NyZWF0ZV90ZW1wX3Nsb3Q7CisJYm9v bAkJY29ubmluZm9DaGFuZ2VkOworCWJvb2wJCXNsb3RuYW1lQ2hhbmdlZDsKKwlib29sCQl0ZW1w U2xvdENoYW5nZWQgPSBmYWxzZTsKKworCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOwor CisJY29ubmluZm9DaGFuZ2VkID0gc3RyY21wKGNvbm5pbmZvLCBQcmltYXJ5Q29ubkluZm8pICE9 IDA7CisJc2xvdG5hbWVDaGFuZ2VkID0gc3RyY21wKHNsb3RuYW1lLCBQcmltYXJ5U2xvdE5hbWUp ICE9IDA7CisKKwkvKgorCSAqIHdhbF9yZWNlaXZlcl9jcmVhdGVfdGVtcF9zbG90IGlzIHVzZWQg b25seSB3aGVuIHdlIGhhdmUgbm8gc2xvdAorCSAqIGNvbmZpZ3VyZWQuICBXZSBkbyBub3QgbmVl ZCB0byB0cmFjayB0aGlzIGNoYW5nZSBpZiBpdCBoYXMgbm8gZWZmZWN0LgorCSAqLworCWlmICgh c2xvdG5hbWVDaGFuZ2VkICYmIHN0cmNtcChQcmltYXJ5U2xvdE5hbWUsICIiKSA9PSAwKQorCQl0 ZW1wU2xvdENoYW5nZWQgPSB0ZW1wU2xvdCAhPSB3YWxfcmVjZWl2ZXJfY3JlYXRlX3RlbXBfc2xv dDsKKwlwZnJlZShjb25uaW5mbyk7CisJcGZyZWUoc2xvdG5hbWUpOworCisJaWYgKGNvbm5pbmZv Q2hhbmdlZCB8fCBzbG90bmFtZUNoYW5nZWQgfHwgdGVtcFNsb3RDaGFuZ2VkKQorCQlTdGFydHVw UmVxdWVzdFdhbFJlY2VpdmVyUmVzdGFydCgpOworfQorCitib29sCitJc1Byb21vdGVTaWduYWxl ZFBpcGVsaW5lKHZvaWQpCit7CisJcmV0dXJuIHByb21vdGVfc2lnbmFsZWQ7Cit9CisKK3ZvaWQK K1Jlc2V0UHJvbW90ZVNpZ25hbGVkUGlwZWxpbmUodm9pZCkKK3sKKwlwcm9tb3RlX3NpZ25hbGVk ID0gZmFsc2U7Cit9CisKKy8qCisgKiBQcm9jZXNzIGFueSByZXF1ZXN0cyBvciBzaWduYWxzIHJl Y2VpdmVkIHJlY2VudGx5LgorICovCit2b2lkCitQcm9jZXNzUGlwZWxpbmVCZ3dJbnRlcnJ1cHRz KHZvaWQpCit7CisKKwlib29sIHNodXRkb3duX3JlcXVlc3RlZDsKKworCWlmIChnb3RfU0lHSFVQ KQorCXsKKwkJZ290X1NJR0hVUCA9IGZhbHNlOworCQlQaXBlbGluZVJlcmVhZENvbmZpZygpOwor CX0KKworCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKwlzaHV0ZG93 bl9yZXF1ZXN0ZWQgPSBXYWxQaXBlbGluZVNobS0+c2h1dGRvd25fcmVxdWVzdGVkOworCVNwaW5M b2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKworCWlmIChzaHV0ZG93bl9yZXF1 ZXN0ZWQpCisJCXByb2NfZXhpdCgwKTsKKworCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Cit9Clwg Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ3ByZWZldGNoZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2dwcmVmZXRjaGVyLmMKaW5kZXggODNhM2Y5N2E1N2MuLmFjOTFmZGYwNzhmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hlci5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRjaGVyLmMKQEAgLTI3LDYgKzI3LDcgQEAK IAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3BpcGVsaW5l LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dwcmVmZXRjaGVyLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3hsb2dyZWFkZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnRyb2wuaCIKQEAgLTM1NSw3 ICszNTYsNyBAQCBYTG9nUHJlZmV0Y2hSZWNvbmZpZ3VyZSh2b2lkKQogc3RhdGljIGlubGluZSB2 b2lkCiBYTG9nUHJlZmV0Y2hJbmNyZW1lbnQocGdfYXRvbWljX3VpbnQ2NCAqY291bnRlcikKIHsK LQlBc3NlcnQoQW1TdGFydHVwUHJvY2VzcygpIHx8ICFJc1VuZGVyUG9zdG1hc3Rlcik7CisJQXNz ZXJ0KEFtU3RhcnR1cFByb2Nlc3MoKSB8fCBBbVdhbFBpcGVsaW5lKCkgfHwgIUlzVW5kZXJQb3N0 bWFzdGVyKTsKIAlwZ19hdG9taWNfd3JpdGVfdTY0KGNvdW50ZXIsIHBnX2F0b21pY19yZWFkX3U2 NChjb3VudGVyKSArIDEpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9ncmVjb3ZlcnkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNv dmVyeS5jCmluZGV4IDRkNjE3OTViNDgzLi42ZGU0YTc1YzZjMiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKQEAgLTMxMDQsNyArMzEwNCw3IEBAIENvbmZpcm1S ZWNvdmVyeVBhdXNlZCh2b2lkKQogICogKGVtb2RlIG11c3QgYmUgZWl0aGVyIFBBTklDLCBMT0cp LiBJbiBzdGFuZGJ5IG1vZGUsIHJldHJpZXMgdW50aWwgYSB2YWxpZAogICogcmVjb3JkIGlzIGF2 YWlsYWJsZS4KICAqLwotc3RhdGljIFhMb2dSZWNvcmQgKgorWExvZ1JlY29yZCAqCiBSZWFkUmVj b3JkKFhMb2dQcmVmZXRjaGVyICp4bG9ncHJlZmV0Y2hlciwgaW50IGVtb2RlLAogCQkgICBib29s IGZldGNoaW5nX2NrcHQsIFRpbWVMaW5lSUQgcmVwbGF5VExJKQogewpAQCAtMzExMiw3ICszMTEy LDcgQEAgUmVhZFJlY29yZChYTG9nUHJlZmV0Y2hlciAqeGxvZ3ByZWZldGNoZXIsIGludCBlbW9k ZSwKIAlYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIgPSBYTG9nUHJlZmV0Y2hlckdldFJlYWRl cih4bG9ncHJlZmV0Y2hlcik7CiAJWExvZ1BhZ2VSZWFkUHJpdmF0ZSAqcHJpdmF0ZSA9IChYTG9n UGFnZVJlYWRQcml2YXRlICopIHhsb2dyZWFkZXItPnByaXZhdGVfZGF0YTsKIAotCUFzc2VydChB bVN0YXJ0dXBQcm9jZXNzKCkgfHwgIUlzVW5kZXJQb3N0bWFzdGVyKTsKKwlBc3NlcnQoQW1TdGFy dHVwUHJvY2VzcygpIHx8IEFtV2FsUGlwZWxpbmUoKSB8fCAhSXNVbmRlclBvc3RtYXN0ZXIpOwog CiAJLyogUGFzcyB0aHJvdWdoIHBhcmFtZXRlcnMgdG8gWExvZ1BhZ2VSZWFkICovCiAJcHJpdmF0 ZS0+ZmV0Y2hpbmdfY2twdCA9IGZldGNoaW5nX2NrcHQ7CkBAIC0zMjczLDcgKzMyNzMsNyBAQCBS ZWFkUmVjb3JkKFhMb2dQcmVmZXRjaGVyICp4bG9ncHJlZmV0Y2hlciwgaW50IGVtb2RlLAogICog WExvZ1BhZ2VSZWFkKCkgdG8gdHJ5IGZldGNoaW5nIHRoZSByZWNvcmQgZnJvbSBhbm90aGVyIHNv dXJjZSwgb3IgdG8KICAqIHNsZWVwIGFuZCByZXRyeS4KICAqLwotc3RhdGljIGludAoraW50CiBY TG9nUGFnZVJlYWQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLCBYTG9nUmVjUHRyIHRhcmdl dFBhZ2VQdHIsIGludCByZXFMZW4sCiAJCQkgWExvZ1JlY1B0ciB0YXJnZXRSZWNQdHIsIGNoYXIg KnJlYWRCdWYpCiB7CkBAIC0zMjg1LDcgKzMyODUsNyBAQCBYTG9nUGFnZVJlYWQoWExvZ1JlYWRl clN0YXRlICp4bG9ncmVhZGVyLCBYTG9nUmVjUHRyIHRhcmdldFBhZ2VQdHIsIGludCByZXFMZW4s CiAJaW50CQkJcjsKIAlpbnN0cl90aW1lCWlvX3N0YXJ0OwogCi0JQXNzZXJ0KEFtU3RhcnR1cFBy b2Nlc3MoKSB8fCAhSXNVbmRlclBvc3RtYXN0ZXIpOworCUFzc2VydChBbVN0YXJ0dXBQcm9jZXNz KCkgfHwgQW1XYWxQaXBlbGluZSgpfHwgIUlzVW5kZXJQb3N0bWFzdGVyKTsKIAogCVhMQnl0ZVRv U2VnKHRhcmdldFBhZ2VQdHIsIHRhcmdldFNlZ05vLCB3YWxfc2VnbWVudF9zaXplKTsKIAl0YXJn ZXRQYWdlT2ZmID0gWExvZ1NlZ21lbnRPZmZzZXQodGFyZ2V0UGFnZVB0ciwgd2FsX3NlZ21lbnRf c2l6ZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKaW5kZXggMmU0YWNhZDRmMDAuLjI0YjE4 OGYxYWY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKKysr IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCkBAIC0xMyw2ICsxMyw3IEBACiAj aW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgorI2lu Y2x1ZGUgImFjY2Vzcy94bG9ncGlwZWxpbmUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9yZXBhY2su aCIKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgpA QCAtMTY2LDYgKzE2NywxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0CiAJewogCQkuZm5fbmFtZSA9 ICJEYXRhQ2hlY2tzdW1zV29ya2VyTWFpbiIsCiAJCS5mbl9hZGRyID0gRGF0YUNoZWNrc3Vtc1dv cmtlck1haW4KKwl9LAorCXsKKwkJLmZuX25hbWUgPSAiV2FsUGlwZWxpbmVfUHJvZHVjZXJNYWlu IiwKKwkJLmZuX2FkZHIgPSBXYWxQaXBlbGluZV9Qcm9kdWNlck1haW4KIAl9CiB9OwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IDkwYzdjNDUyOGU4Li5iYzAyMzljMGNmZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKKysrIGIvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTkxLDYgKzkxLDcgQEAKIAogI2lu Y2x1ZGUgImFjY2Vzcy94bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIK KyNpbmNsdWRlICJhY2Nlc3MveGxvZ3BpcGVsaW5lLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dy ZWNvdmVyeS5oIgogI2luY2x1ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKICNpbmNsdWRlICJjb21t b24vcGdfcHJuZy5oIgpAQCAtMzkzNiwxMiArMzkzNywyMSBAQCBwcm9jZXNzX3BtX3Btc2lnbmFs KHZvaWQpCiAJCUNoZWNrUHJvbW90ZVNpZ25hbCgpKQogCXsKIAkJLyoKLQkJICogVGVsbCBzdGFy dHVwIHByb2Nlc3MgdG8gZmluaXNoIHJlY292ZXJ5LgorCQkgKiBUZWxsIHN0YXJ0dXAgcHJvY2Vz cyB0byBmaW5pc2ggcmVjb3ZlcnkuIEluY2FzZSBwaXBlbGluZSBpcyBlbmFibGVkCisJCSAqIGFs c28gc2lnbmFsIHRoZSBwaXBlbGluZSB3b3JrZXIuCiAJCSAqCiAJCSAqIExlYXZlIHRoZSBwcm9t b3RlIHNpZ25hbCBmaWxlIGluIHBsYWNlIGFuZCBsZXQgdGhlIFN0YXJ0dXAgcHJvY2VzcwogCQkg KiBkbyB0aGUgdW5saW5rLgogCQkgKi8KIAkJc2lnbmFsX2NoaWxkKFN0YXJ0dXBQTUNoaWxkLCBT SUdVU1IyKTsKKworCQlpZiAod2FsX3BpcGVsaW5lX2VuYWJsZWQgJiYgV2FsUGlwZWxpbmVfSXNB Y3RpdmUoKSkKKwkJeworCQkJcGlkX3QgcGlwZWxpbmVfYmd3ID0gV2FsUGlwZWxpbmVfR2V0UHJv ZHVjZXJQaWQoKTsKKworCQkJaWYgKHBpcGVsaW5lX2JndyAhPSBJbnZhbGlkUGlkKQorCQkJCXNp Z25hbF9jaGlsZChGaW5kUG9zdG1hc3RlckNoaWxkQnlQaWQocGlwZWxpbmVfYmd3KSwgU0lHVVNS Mik7CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5k YXQKaW5kZXggYWZhYTA1OGIwNDYuLjUwNTViMGY0ZjM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtMzUwOCw2ICszNTA4LDIxIEBACiAgIGJvb3RfdmFs ID0+ICdmYWxzZScsCiB9LAogCit7IG5hbWUgPT4gJ3dhbF9waXBlbGluZScsIHR5cGUgPT4gJ2Jv b2wnLCBjb250ZXh0ID0+ICdQR0NfUE9TVE1BU1RFUicsIGdyb3VwID0+ICdXQUxfUkVDT1ZFUlkn LAorICBzaG9ydF9kZXNjID0+ICdVc2UgcGFyYWxsZWwgd29ya2VycyB0byBzcGVlZHVwIHJlY292 ZXJ5LicsCisgIHZhcmlhYmxlID0+ICd3YWxfcGlwZWxpbmVfZW5hYmxlZCcsCisgIGJvb3RfdmFs ID0+ICdmYWxzZScsCit9LAorCit7IG5hbWUgPT4gJ3dhbF9waXBlbGluZV9xdWV1ZV9zaXplJywg dHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1BPU1RNQVNURVInLCBncm91cCA9PiAnV0FM X1JFQ09WRVJZJywKKyAgc2hvcnRfZGVzYyA9PiAnU2l6ZSBvZiB0aGUgc2hhcmVkIG1lbW9yeSBx dWV1ZSB1c2VkIGJ5IHRoZSBXQUwgcGlwZWxpbmUuJywKKyAgZmxhZ3MgPT4gJ0dVQ19VTklUX01C JywKKyAgdmFyaWFibGUgPT4gJ3dhbF9waXBlbGluZV9tcV9zaXplX21iJywKKyAgYm9vdF92YWwg PT4gJzEyOCcsCisgIG1pbiA9PiAnMScsCisgIG1heCA9PiAnMTAyNCcsCit9LAorCiB7IG5hbWUg PT4gJ3dhbF9yZWNlaXZlcl9jcmVhdGVfdGVtcF9zbG90JywgdHlwZSA9PiAnYm9vbCcsIGNvbnRl eHQgPT4gJ1BHQ19TSUdIVVAnLCBncm91cCA9PiAnUkVQTElDQVRJT05fU1RBTkRCWScsCiAgIHNo b3J0X2Rlc2MgPT4gJ1NldHMgd2hldGhlciBhIFdBTCByZWNlaXZlciBzaG91bGQgY3JlYXRlIGEg dGVtcG9yYXJ5IHJlcGxpY2F0aW9uIHNsb3QgaWYgbm8gcGVybWFuZW50IHNsb3QgaXMgY29uZmln dXJlZC4nLAogICB2YXJpYWJsZSA9PiAnd2FsX3JlY2VpdmVyX2NyZWF0ZV90ZW1wX3Nsb3QnLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IGFj MzhjZGRhYWY5Li40ZGM3OWRiMWIwNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMjg4LDYgKzI4OCw4IEBACiAjcmVjb3ZlcnlfcHJlZmV0 Y2ggPSB0cnkgICAgICAgICMgcHJlZmV0Y2ggcGFnZXMgcmVmZXJlbmNlZCBpbiB0aGUgV0FMPwog I3dhbF9kZWNvZGVfYnVmZmVyX3NpemUgPSA1MTJrQiAjIGxvb2thaGVhZCB3aW5kb3cgdXNlZCBm b3IgcHJlZmV0Y2hpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdl IHJlcXVpcmVzIHJlc3RhcnQpCisjd2FsX3BpcGVsaW5lID0gb2ZmICAgICAgICAgICAgICAjIGRl Y29kZSBpbiBwYXJhbGxlbAorI3dhbF9waXBlbGluZV9xdWV1ZV9zaXplID0gMTI4TUIKIAogIyAt IEFyY2hpdmluZyAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCmluZGV4IDRkZDk4NjI0MjA0Li45OTc5ZTA2NDMyNSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MveGxvZy5oCkBAIC00MCw2ICs0MCw4IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWlu X3dhbF9zaXplX21iOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfd2FsX3NpemVfbWI7CiBl eHRlcm4gUEdETExJTVBPUlQgaW50IHdhbF9rZWVwX3NpemVfbWI7CiBleHRlcm4gUEdETExJTVBP UlQgaW50IG1heF9zbG90X3dhbF9rZWVwX3NpemVfbWI7CitleHRlcm4gUEdETExJTVBPUlQgaW50 IHdhbF9waXBlbGluZV9tcV9zaXplX21iOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgd2FsX3Bp cGVsaW5lX2VuYWJsZWQ7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IFhMT0didWZmZXJzOwogZXh0 ZXJuIFBHRExMSU1QT1JUIGludCBYTG9nQXJjaGl2ZVRpbWVvdXQ7CiBleHRlcm4gUEdETExJTVBP UlQgaW50IHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy94bG9ncGlwZWxpbmUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncGlwZWxp bmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzMzMDkwNjMyYjQK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3BpcGVsaW5lLmgKQEAg LTAsMCArMSwxMDUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHhsb2dwaXBlbGluZS5o CisgKiAgICBXQUwgcmVwbGF5IHBpcGVsaW5lIGZvciBwYXJhbGxlbCByZWNvdmVyeQorICoKKyAq IFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBwcm9kdWNlci1jb25zdW1lciBwaXBlbGluZSBmb3Ig V0FMIHJlcGxheToKKyAqIC0gUHJvZHVjZXI6IGJhY2tncm91bmQgd29ya2VyIHRoYXQgcmVhZHMg YW5kIGRlY29kZXMgV0FMIHJlY29yZHMKKyAqIC0gQ29uc3VtZXI6IHN0YXJ0dXAgcHJvY2Vzczog Y29yZSByZWRvIGxvb3AKKyAqCisgKiBUaGUgcGlwZWxpbmUgdXNlcyBzaGFyZWQgbWVtb3J5IHF1 ZXVlcyAoc2htX21xKSB0byBwYXNzIGRlY29kZWQgV0FMCisgKiByZWNvcmRzIGZyb20gcHJvZHVj ZXIgdG8gY29uc3VtZXIsIGVuYWJsaW5nIHBhcmFsbGVsaXNtIHdoaWxlCisgKiBtYWludGFpbmlu ZyBzZXF1ZW50aWFsIHJlcGxheSBzZW1hbnRpY3MuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dwaXBlbGluZS5oCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpZm5kZWYgV0FMX1BJUEVMSU5FX0gKKyNkZWZpbmUgV0FMX1BJUEVMSU5FX0gK KworI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dy ZWNvdmVyeS5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIKKyNpbmNsdWRlICJzdG9y YWdlL2RzbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX21xLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9zcGluLmgiCisKKy8qCisgKiBNYWdpYyBudW1iZXIgZm9yIHNoYXJlZCBtZW1vcnkgVE9DCisg Ki8KKyNkZWZpbmUgUEdfV0FMX1BJUEVMSU5FX01BR0lDIDB4NTc0MTRDNTAgIC8qICJXQUxQIiAq LworCisvKgorICogTWVzc2FnZSB0eXBlcyBzZW50IHRocm91Z2ggdGhlIHBpcGVsaW5lCisgKi8K K3R5cGVkZWYgZW51bSBXYWxNc2dUeXBlCit7CisJV0FMX01TR19JTlZBTElEID0gMCwKKwlXQUxf TVNHX1JFQ09SRCwgICAgICAgICAvKiBEZWNvZGVkIFdBTCByZWNvcmQgKi8KKwlXQUxfTVNHX1NI VVRET1dOLCAgICAgICAvKiBHcmFjZWZ1bCBzaHV0ZG93biByZXF1ZXN0ICovCit9IFdhbE1zZ1R5 cGU7CisKKy8qIFdpcmUgaGVhZGVyIGZvciBhIHNlcmlhbGl6ZWQgV0FMIG1lc3NhZ2UgKi8KK3R5 cGVkZWYgc3RydWN0IFdhbFJlY29yZE1zZ0hlYWRlcgoreworCVdhbE1zZ1R5cGUgIG1zZ190eXBl OyAgICAgICAgICAgICAvKiBXQUxfTVNHX1JFQ09SRCBldGMgKi8KKwl1aW50MzIgICAgICBkZWNv ZGVkX3NpemU7ICAgICAgICAgLyogYnl0ZSBsZW5ndGggb2YgdGhlIHBheWxvYWQgdGhhdCBmb2xs b3dzICovCisJWExvZ1JlY1B0ciAgcmVhZFJlY1B0cjsgICAgICAgICAgIC8qIFhMb2dSZWFkZXJT dGF0ZS0+UmVhZFJlY1B0ciAqLworCVhMb2dSZWNQdHIgIGVuZFJlY1B0cjsgICAgICAgICAgICAv KiBYTG9nUmVhZGVyU3RhdGUtPkVuZFJlY1B0ciAqLworCVhMb2dSZWNQdHIgIG1pc3NpbmdDb250 cmVjUHRyOyAgICAvKiBYTG9nUmVhZGVyU3RhdGUtPm1pc3NpbmdDb250cmVjUHRyICovCisJWExv Z1JlY1B0ciAgYWJvcnRlZFJlY1B0cjsgICAgICAgIC8qIFhMb2dSZWFkZXJTdGF0ZS0+YWJvcnRl ZFJlY1B0ciAqLworCVhMb2dSZWNQdHIgIG92ZXJ3cml0dGVuUmVjUHRyOyAgICAvKiBYTG9nUmVh ZGVyU3RhdGUtPm92ZXJ3cml0dGVuUmVjUHRyICovCit9IFdhbFJlY29yZE1zZ0hlYWRlcjsKKwor LyoKKyAqIFNoYXJlZCBtZW1vcnkgY29udHJvbCBzdHJ1Y3R1cmUgZm9yIHRoZSBXQUwgcGlwZWxp bmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgV2FsUGlwZWxpbmVTaG1DdGwKK3sKKwkvKiBMaWZlY3lj bGUgbWFuYWdlbWVudCAqLworCXNsb2NrX3QgICAgICAgICBtdXRleDsKKwlib29sICAgICAgICAg ICAgaW5pdGlhbGl6ZWQ7CisJYm9vbCAgICAgICAgICAgIHNodXRkb3duX3JlcXVlc3RlZDsKKwor CS8qIFByb2R1Y2VyIHN0YXRlICovCisJcGlkX3QgICAgICAgICAgIHByb2R1Y2VyX3BpZDsKKwlY TG9nUmVjUHRyICAgICAgcHJvZHVjZXJfbHNuOyAgIC8qIExhc3QgTFNOIHJlYWQgYnkgcHJvZHVj ZXIgKi8KKworCS8qIENvbnN1bWVyIHN0YXRlICovCisJcGlkX3QgICAgICAgICAgIGNvbnN1bWVy X3BpZDsKKwlYTG9nUmVjUHRyICAgICAgY29uc3VtZXJfbHNuOyAgIC8qIExhc3QgTFNOIHJlY2ll dmVkIGJ5IGNvbnN1bWVyICovCisJWExvZ1JlY1B0ciAgICAgIGFwcGxpZWRfbHNuOyAgIAkvKiBM YXN0IExTTiBhcHBsaWVkIGJ5IGNvbnN1bWVyICovCisKKwkvKiBRdWV1ZSBoYW5kbGVzICovCisJ ZHNtX2hhbmRsZSAgICAgIGRzbV9zZWdfaGFuZGxlOworCXNobV9tcV9oYW5kbGUgICAqcHJvZHVj ZXJfbXFfaGFuZGxlOworCXNobV9tcV9oYW5kbGUgICAqY29uc3VtZXJfbXFfaGFuZGxlOworCisJ LyogU3RhdGlzdGljcyAqLworCXVpbnQ2NCAgICAgICAgICByZWNvcmRzX3NlbnQ7CisJdWludDY0 ICAgICAgICAgIHJlY29yZHNfcmVjZWl2ZWQ7CisJdWludDY0ICAgICAgICAgIGJ5dGVzX3NlbnQ7 CisJdWludDY0ICAgICAgICAgIGJ5dGVzX3JlY2VpdmVkOworfSBXYWxQaXBlbGluZVNobUN0bDsK KworLyogY29uc3VtZXIgbWF5IGhhdmUgdG8gY29tcHV0ZSBwcmVmZXRlY2hlciBzdGF0cyAqLwor ZXh0ZXJuIFBHRExMSU1QT1JUIFhMb2dQcmVmZXRjaGVyICp4bG9ncHJlZmV0Y2hlcl9waXBlbGlu ZWQ7CisKKworLyogUHJvZHVjZXIgZnVuY3Rpb25zIChjYWxsZWQgYnkgYmFja2dyb3VuZCB3b3Jr ZXIpICovCitleHRlcm4gdm9pZCBXYWxQaXBlbGluZV9Qcm9kdWNlck1haW4oRGF0dW0gbWFpbl9h cmcpOworZXh0ZXJuIGJvb2wgV2FsUGlwZWxpbmVfU2VuZFJlY29yZChYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCk7CitleHRlcm4gYm9vbCBXYWxQaXBlbGluZV9TZW5kU2h1dGRvd24odm9pZCk7Citl eHRlcm4gYm9vbCBBbVdhbFBpcGVsaW5lKHZvaWQpOworCisKK2V4dGVybiB2b2lkIFByb2Nlc3NQ aXBlbGluZUJnd0ludGVycnVwdHModm9pZCk7CitleHRlcm4gYm9vbCBJc1Byb21vdGVTaWduYWxl ZFBpcGVsaW5lKHZvaWQpOworZXh0ZXJuIHZvaWQgUmVzZXRQcm9tb3RlU2lnbmFsZWRQaXBlbGlu ZSh2b2lkKTsKKy8qIEdsb2JhbCBzaGFyZWQgbWVtb3J5IHBvaW50ZXIgKi8KK2V4dGVybiBXYWxQ aXBlbGluZVNobUN0bCAqV2FsUGlwZWxpbmVTaG07CisKKyNlbmRpZiAgIC8qIFdBTF9QSVBFTElO RV9IICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVy eS5oCmluZGV4IGJhNzc1MGRjYTBiLi44MWFjOTg0YTkwNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVj b3ZlcnkuaApAQCAtMjE3LDYgKzIxNywxMCBAQCBleHRlcm4gdm9pZCBHZXRYTG9nUmVjZWlwdFRp bWUoVGltZXN0YW1wVHogKnJ0aW1lLCBib29sICpmcm9tU3RyZWFtKTsKIGV4dGVybiBUaW1lc3Rh bXBUeiBHZXRMYXRlc3RYVGltZSh2b2lkKTsKIGV4dGVybiBUaW1lc3RhbXBUeiBHZXRDdXJyZW50 Q2h1bmtSZXBsYXlTdGFydFRpbWUodm9pZCk7CiBleHRlcm4gWExvZ1JlY1B0ciBHZXRDdXJyZW50 UmVwbGF5UmVjUHRyKFRpbWVMaW5lSUQgKnJlcGxheUVuZFRMSSk7CitleHRlcm4gWExvZ1JlY29y ZCAqUmVhZFJlY29yZChYTG9nUHJlZmV0Y2hlciAqeGxvZ3ByZWZldGNoZXIsIGludCBlbW9kZSwK KwkJICAgYm9vbCBmZXRjaGluZ19ja3B0LCBUaW1lTGluZUlEIHJlcGxheVRMSSk7CitleHRlcm4g aW50IFhMb2dQYWdlUmVhZChYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIsIFhMb2dSZWNQdHIg dGFyZ2V0UGFnZVB0ciwgaW50IHJlcUxlbiwKKwkJCSBYTG9nUmVjUHRyIHRhcmdldFJlY1B0ciwg Y2hhciAqcmVhZEJ1Zik7CiAKIGV4dGVybiBib29sIFByb21vdGVJc1RyaWdnZXJlZCh2b2lkKTsK IGV4dGVybiBib29sIENoZWNrUHJvbW90ZVNpZ25hbCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJz eXN0ZW1saXN0LmgKaW5kZXggOWFkNjE5MDgwYmUuLmU5ZmY2ZGU5YTFhIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3N1YnN5c3RlbWxpc3QuaApAQCAtNDIsNiArNDIsNyBAQCBQR19TSE1FTV9TVUJTWVNURU0o TXVsdGlYYWN0U2htZW1DYWxsYmFja3MpCiBQR19TSE1FTV9TVUJTWVNURU0oQnVmZmVyTWFuYWdl clNobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKFN0cmF0ZWd5Q3RsU2htZW1DYWxs YmFja3MpCiBQR19TSE1FTV9TVUJTWVNURU0oQnVmVGFibGVTaG1lbUNhbGxiYWNrcykKK1BHX1NI TUVNX1NVQlNZU1RFTShXYWxQaXBlbGluZVNobWVtQ2FsbGJhY2tzKQogCiAvKiBsb2NrIG1hbmFn ZXIgKi8KIFBHX1NITUVNX1NVQlNZU1RFTShMb2NrTWFuYWdlclNobWVtQ2FsbGJhY2tzKQotLSAK Mi4zNC4xCgo= --0000000000001a84cb0654ebb847 Content-Type: text/x-patch; charset="UTF-8"; name="v4-0002-Pipelined-Recovery-Consumer-Related-Code.patch" Content-Disposition: attachment; filename="v4-0002-Pipelined-Recovery-Consumer-Related-Code.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqqo69961 RnJvbSA2Yzg2YTlkOWVjMzdkOGM5NmUyMzkwOTk1NWE0YWQwZTM1MmRjZWE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbXJhbiBaYWhlZXIgPGltcmFuLnpoaXJAZ21haWwuY29tPgpE YXRlOiBNb24sIDIyIEp1biAyMDI2IDEyOjMwOjMwICswNTAwClN1YmplY3Q6IFtQQVRDSCB2NCAy LzRdIFBpcGVsaW5lZCBSZWNvdmVyeSAtIENvbnN1bWVyIFJlbGF0ZWQgQ29kZQoKVGhpcyBpbmNs dWRlcyB0aGUgY29uc3VtZXItc3BlY2lmaWMgY29kZSBmb3IgdGhlIHByb2R1Y2VyLWNvbnN1bWVy CmFyY2hpdGVjdHVyZSBmb3IgV0FMIHJlcGxheSB0aGF0IHNlcGFyYXRlcyBXQUwgZGVjb2Rpbmcg ZnJvbSB0aGUKcmVjb3ZlcnkgcHJvY2VzcywgZW5hYmxpbmcgcGFyYWxsZWwgcHJvY2Vzc2luZyBi ZXR3ZWVuIGRpZmZlcmVudCBzdGVwcwogb2YgcmVwbGF5LgoKVGhlIHN0YXJ0dXAgcHJvY2VzcyBh Y3QgYXMgY29uc3VtZXIgYW5kIHdpbGwgaW5pdGlhdGUgdGhlIHBpcGVsaW5lIGJlZm9yZQpzdGFy dGluZyB0aGUgcmVkbyBsb29wIGluc2lkZSBQZXJmb3JtV2FsUmVjb3ZlcnkoKSBhbmQgd2lsbCBj b25uZWN0IHRvCnRoZSBzaG0gbXEgdG8gcmVjZWl2ZSB0aGUgZGVjb2RlZCByZWNvcmRzIGRpcmVj dGx5LiBTdWJzZXF1ZW50bHksCml0IHdpbGwgYXBwbHkgdGhvc2UgcmVjb3JkcyBhbmQga2VlcCBv biBmZXRjaGluZyBuZXcgZGVjb2RlZCByZWNvcmRzIGluCnRoZSBtYWluIHJlZG8gbG9vcC4KCkZp bmFsbHksIGl0IHdpbGwgcmVjZWl2ZSBhIHNodXRkb3duIG1lc3NhZ2UgZnJvbSB0aGUgcHJvZHVj ZXIKKGJhc2VkIG9uIHRoZSBjb25zaXN0ZW5jeSBjaGVja3MsIHRoZSBwcm9kdWNlciB3aWxsIHRh a2UgY2FyZSBvZiB3aGV0aGVyCnRvIHN0b3AgZGVjb2Rpbmcgb3Igbm90KS4gVGhlIGNvbnN1bWVy IHdpbGwgZXhpdCB0aGUgbG9vcCBhbmQgbGF0ZXIgd2lsbAphc2sgdG8gZnVsbHkgc2h1dGRvd24g dGhlIHBpcGVsaW5lIHdvcmtlcnMgaW4gRmluaXNoV2FsUmVjb3ZlcnkoKS4KCkF1dGhvcjogSW1y YW4gWmFoZWVyIDxpbXJhbi56aGlyQGdtYWlsLmNvbT4KSWRlYSBieTogQW50cyBBYXNtYSA8YW50 c0BjeWJlcnRlYy5hdD4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncGlwZWxp bmUuYyB8IDQ3NiArKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9ncmVjb3ZlcnkuYyB8ICA3NCArKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3Bp cGVsaW5lLmggICAgICAgICB8ICAxOCArCiAzIGZpbGVzIGNoYW5nZWQsIDU2NiBpbnNlcnRpb25z KCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dwaXBlbGluZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3BpcGVs aW5lLmMKaW5kZXggYWI5ZTZlY2NjMTUuLmM0OGQyNzY4YTlhIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncGlwZWxpbmUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ncGlwZWxpbmUuYwpAQCAtODIsNiArODIsMTEgQEAgc3RhdGljIGRzbV9z ZWdtZW50ICpwcm9kdWNlcl9kc21fc2VnID0gTlVMTDsKIHN0YXRpYyBzaG1fbXEgKnByb2R1Y2Vy X21xID0gTlVMTDsKIHN0YXRpYyBzaG1fbXFfaGFuZGxlICpwcm9kdWNlcl9tcV9oYW5kbGUgPSBO VUxMOwogCisvKiBMb2NhbCBzdGF0ZSBmb3IgY29uc3VtZXIgKi8KK3N0YXRpYyBkc21fc2VnbWVu dCAqY29uc3VtZXJfZHNtX3NlZyA9IE5VTEw7CitzdGF0aWMgc2htX21xICpjb25zdW1lcl9tcSA9 IE5VTEw7CitzdGF0aWMgc2htX21xX2hhbmRsZSAqY29uc3VtZXJfbXFfaGFuZGxlID0gTlVMTDsK KwogLyoKICAqIEZsYWdzIHNldCBieSBpbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIGxhdGVyIHNlcnZp Y2UgaW4gdGhlIHJlZG8gbG9vcC4KICAqLwpAQCAtOTIsOSArOTcsMTMgQEAgc3RhdGljIHZvbGF0 aWxlIHNpZ19hdG9taWNfdCBwcm9tb3RlX3NpZ25hbGVkID0gZmFsc2U7CiBzdGF0aWMgdm9pZCBQ aXBlbGluZUJnd1NpZ0h1cEhhbmRsZXIoU0lHTkFMX0FSR1MpOwogc3RhdGljIHZvaWQgUGlwZWxp bmVQcm9jVHJpZ2dlckhhbmRsZXIoU0lHTkFMX0FSR1MpOwogCisvKiBGb3J3YXJkIGRlY2xhcmF0 aW9ucyAqLwogc3RhdGljIHZvaWQgd2FsX3BpcGVsaW5lX2NsZWFudXBfY2FsbGJhY2soaW50IGNv ZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgU2l6ZSBzZXJpYWxpemVfd2FsX3JlY29yZChYTG9nUmVh ZGVyU3RhdGUgKnJlY29yZCwgY2hhciAqKmJ1ZmZlcik7CitzdGF0aWMgRGVjb2RlZFhMb2dSZWNv cmQgKmRlc2VyaWFsaXplX3dhbF9yZWNvcmQoY29uc3QgY2hhciAqYnVmZmVyLCBTaXplIGxlbiwg WExvZ1JlYWRlclN0YXRlICpzdGFydHVwX3JlYWRlcik7CiBzdGF0aWMgdm9pZCBjbGVhbnVwX3By b2R1Y2VyX3Jlc291cmNlcyh2b2lkKTsKK3N0YXRpYyB2b2lkIGNsZWFudXBfY29uc3VtZXJfcmVz b3VyY2VzKHZvaWQpOworc3RhdGljIHZvaWQgV2FsUGlwZWxpbmVfV2FpdEZvckNvbnN1bWVyU2h1 dGRvd25SZXF1ZXN0KHZvaWQpOwogCiAvKiBjb3BpZWQgZnJvbSB4bG9ncmVjb3ZlcnkuYyAqLwog LyogUGFyYW1ldGVycyBwYXNzZWQgZG93biBmcm9tIFJlYWRSZWNvcmQgdG8gdGhlIFhMb2dQYWdl UmVhZCBjYWxsYmFjay4gKi8KQEAgLTEyNyw2ICsxMzYsMTczIEBAIFdhbFBpcGVsaW5lU2htZW1J bml0KHZvaWQgKmFyZykKIAlTcGluTG9ja0luaXQoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CiB9 CiAKKy8qCisgKiBDYWxsZWQgYnkgQ29uc3VtZXIuCisgKgorICogSW5pdGlhbGl6ZSBhbmQgc3Rh cnQgdGhlIFdBTCBwaXBlbGluZS4gVGhpcyB3aWxsIGJlIGNhbGxlZCBieSB0aGUgc3RhcnR1cAor ICogcHJvY2VzcyAoY29uc3VtZXIpIGFzIGEgcmVxdWVzdCB0byBzdGFydCB0aGUgcGlwZWxpbmUu CisgKi8KK3ZvaWQKK1dhbFBpcGVsaW5lX1N0YXJ0KFdhbFBpcGVsaW5lUGFyYW1zICpwYXJhbXMp Cit7CisJQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqaGFuZGxlOworCUJhY2tncm91bmRXb3JrZXIJ d29ya2VyOworCXNobV90b2NfZXN0aW1hdG9yIAllOworCVdhbFBpcGVsaW5lUGFyYW1zICAqc2hh cmVkX3BhcmFtczsKKwlkc21fc2VnbWVudAkJICAgKnNlZzsKKwlzaG1fdG9jCQkJICAgKnRvYzsK KwlzaG1fbXEJCQkgICAqbXE7CisJU2l6ZQkJCQlxdWV1ZV9zaXplOworCVNpemUJCQkJc2Vnc2l6 ZTsKKwlwaWRfdAkJIAkJcGlkOworCisJaWYgKHdhbF9waXBlbGluZV9tcV9zaXplX21iIDw9IDAp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJZXJybXNnKCJpbnZhbGlkIHdhbF9waXBlbGluZV9tcV9zaXplX21iIikp KTsKKworCXF1ZXVlX3NpemUgPSBNQlRvQnl0ZXMod2FsX3BpcGVsaW5lX21xX3NpemVfbWIpOwor CisJLyogU2V0IGluaXQgZmxhZyAqLworCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0t Pm11dGV4KTsKKwlpZiAoV2FsUGlwZWxpbmVTaG0tPmluaXRpYWxpemVkKQorCXsKKwkJU3Bpbkxv Y2tSZWxlYXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCQlyZXR1cm47CisJfQorCVdhbFBp cGVsaW5lU2htLT5pbml0aWFsaXplZCA9IHRydWU7CisJU3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBl bGluZVNobS0+bXV0ZXgpOworCisJLyoKKwkgKiBFc3RpbWF0ZSBob3cgbXVjaCBzaGFyZWQgbWVt b3J5IHdlIG5lZWQuCisJICoKKwkgKiBXZSBuZWVkIG9uZSBrZXkgdG8gcmVnaXN0ZXIgdGhlIGxv Y2F0aW9uIG9mIHRoZSBXYWxQaXBlbGluZVBhcmFtcywgYW5kCisJICogd2UgbmVlZCAxIGtleSB0 byB0cmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UgcXVldWUuCisJICovCisJc2htX3Rv Y19pbml0aWFsaXplX2VzdGltYXRvcigmZSk7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmZSwg c2l6ZW9mKFdhbFBpcGVsaW5lUGFyYW1zKSk7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmZSwg cXVldWVfc2l6ZSk7CisJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZlLCAyKTsKKwlzZWdzaXplID0g c2htX3RvY19lc3RpbWF0ZSgmZSk7CisKKwkvKiBDcmVhdGUgdGhlIHNoYXJlZCBtZW1vcnkgc2Vn bWVudCBhbmQgZXN0YWJsaXNoIGEgdGFibGUgb2YgY29udGVudHMuICovCisJc2VnID0gZHNtX2Ny ZWF0ZShzZWdzaXplLCAwKTsKKwlkc21fcGluX3NlZ21lbnQoc2VnKTsKKwl0b2MgPSBzaG1fdG9j X2NyZWF0ZShQR19XQUxfUElQRUxJTkVfTUFHSUMsIGRzbV9zZWdtZW50X2FkZHJlc3Moc2VnKSwK KwkJCQkJCSBzZWdzaXplKTsKKworCS8qIFNldHVwIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8g dGhlIHByb2R1Y2VyICovCisJc2hhcmVkX3BhcmFtcyA9IHNobV90b2NfYWxsb2NhdGUodG9jLCBz aXplb2YoV2FsUGlwZWxpbmVQYXJhbXMpKTsKKwlzaG1fdG9jX2luc2VydCh0b2MsIDEsIHNoYXJl ZF9wYXJhbXMpOworCSpzaGFyZWRfcGFyYW1zID0gKnBhcmFtczsKKworCS8qIFNldHVwIHRoZSBt ZXNzYWdlIHF1ZXVlICovCisJbXEgPSBzaG1fbXFfY3JlYXRlKHNobV90b2NfYWxsb2NhdGUodG9j LCBxdWV1ZV9zaXplKSwgcXVldWVfc2l6ZSk7CisJc2htX3RvY19pbnNlcnQodG9jLCAyLCBtcSk7 CisKKwkvKiB1cGRhdGUgc2hhcmVkIHN0YXRlICovCisJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBl bGluZVNobS0+bXV0ZXgpOworCVdhbFBpcGVsaW5lU2htLT5kc21fc2VnX2hhbmRsZSA9IGRzbV9z ZWdtZW50X2hhbmRsZShzZWcpOworCVdhbFBpcGVsaW5lU2htLT5jb25zdW1lcl9waWQgPSBNeVBy b2NQaWQ7CisJU3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCisJLyog U2V0IHVwIGNvbnN1bWVyIHNpZGUgb2YgdGhlIHF1ZXVlICovCisJY29uc3VtZXJfZHNtX3NlZyA9 IHNlZzsKKwljb25zdW1lcl9tcSA9IG1xOworCXNobV9tcV9zZXRfcmVjZWl2ZXIoY29uc3VtZXJf bXEsIE15UHJvYyk7CisJY29uc3VtZXJfbXFfaGFuZGxlID0gc2htX21xX2F0dGFjaChjb25zdW1l cl9tcSwgc2VnLCBOVUxMKTsKKworCS8qIFJlZ2lzdGVyIGJhY2tncm91bmQgd29ya2VyICovCisJ bWVtc2V0KCZ3b3JrZXIsIDAsIHNpemVvZih3b3JrZXIpKTsKKwl3b3JrZXIuYmd3X2ZsYWdzID0g QkdXT1JLRVJfU0hNRU1fQUNDRVNTOworCXdvcmtlci5iZ3dfc3RhcnRfdGltZSA9IEJnV29ya2Vy U3RhcnRfUG9zdG1hc3RlclN0YXJ0OworCXdvcmtlci5iZ3dfcmVzdGFydF90aW1lID0gQkdXX05F VkVSX1JFU1RBUlQ7CisJc3ByaW50Zih3b3JrZXIuYmd3X2xpYnJhcnlfbmFtZSwgInBvc3RncmVz Iik7CisJc3ByaW50Zih3b3JrZXIuYmd3X2Z1bmN0aW9uX25hbWUsICJXYWxQaXBlbGluZV9Qcm9k dWNlck1haW4iKTsKKwlzbnByaW50Zih3b3JrZXIuYmd3X25hbWUsIEJHV19NQVhMRU4sICJ3YWwg cGlwZWxpbmUgcHJvZHVjZXIiKTsKKwlzbnByaW50Zih3b3JrZXIuYmd3X3R5cGUsIEJHV19NQVhM RU4sICJ3YWwgcGlwZWxpbmUgcHJvZHVjZXIiKTsKKwl3b3JrZXIuYmd3X21haW5fYXJnID0gVUlu dDMyR2V0RGF0dW0oZHNtX3NlZ21lbnRfaGFuZGxlKHNlZykpOworCXdvcmtlci5iZ3dfbm90aWZ5 X3BpZCA9IE15UHJvY1BpZDsKKworCWlmICghUmVnaXN0ZXJEeW5hbWljQmFja2dyb3VuZFdvcmtl cigmd29ya2VyLCAmaGFuZGxlKSkKKwkJZ290byBmYWlsOworCisJaWYgKFdhaXRGb3JCYWNrZ3Jv dW5kV29ya2VyU3RhcnR1cChoYW5kbGUsICZwaWQpICE9IEJHV0hfU1RBUlRFRCkKKwkJZ290byBm YWlsOworCisJLyogUmVnaXN0ZXIgY2xlYW51cCBjYWxsYmFjayAqLworCWJlZm9yZV9zaG1lbV9l eGl0KHdhbF9waXBlbGluZV9jbGVhbnVwX2NhbGxiYWNrLCAoRGF0dW0pIDApOworCisJZXJlcG9y dChMT0csIChlcnJtc2coIlt3YWxwaXBlbGluZV0gc3RhcnRlZC4iKSkpOworCXJldHVybjsKKwor ZmFpbDoKKwlTcGluTG9ja0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisJV2FsUGlw ZWxpbmVTaG0tPmluaXRpYWxpemVkID0gZmFsc2U7CisJU3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBl bGluZVNobS0+bXV0ZXgpOworCisJY2xlYW51cF9jb25zdW1lcl9yZXNvdXJjZXMoKTsKKworCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VT KSwKKwkJCQkJZXJybXNnKCJjb3VsZCBub3Qgc3RhcnQgcGlwZWxpbmUgYmFja2dyb3VuZCB3b3Jr ZXIiKSwKKwkJCQkJZXJyaGludCgiTW9yZSBkZXRhaWxzIG1heSBiZSBhdmFpbGFibGUgaW4gdGhl IHNlcnZlciBsb2cuIikpKTsKK30KKworLyoKKyAqIFJlcXVlc3QgcHJvZHVjZXIgc2h1dGRvd24u CisgKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgY29uc3VtZXIgd2hlbiBpdCBubyBsb25nZXIgbmVl ZHMgcmVjb3Jkcy4KKyAqLworc3RhdGljIHZvaWQKK1dhbFBpcGVsaW5lX1JlcXVlc3RTaHV0ZG93 bih2b2lkKQoreworCWlmICghV2FsUGlwZWxpbmVTaG0pCisJCXJldHVybjsKKworCVNwaW5Mb2Nr QWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKwlXYWxQaXBlbGluZVNobS0+c2h1dGRv d25fcmVxdWVzdGVkID0gdHJ1ZTsKKwlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5t dXRleCk7Cit9CisKKy8qCisgKiBDb25zdW1lciBGdW5jdGlvbi4KKyAqIFN0b3AgdGhlIFdBTCBw aXBlbGluZS4gVGhpcyBiZSBjYWxsZWQgYmUgdGhlIHN0YXJ0dXAgcHJvY2VzcworICogKGNvbnN1 bWVyKS4gVGhpcyB3aWxsIG9ubHkgYmUgY2FsbGVkICBhbmQgdGhlIHRpbWUgdG8gcmVjb3Zlcnkg c2h1dGRvd24uCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyB3YWl0IHVudGlsIHRoZSBwaXBl bGluZSB3b3JrZXJzCisgKiBhcmUgZXhpdGVkLgorICovCit2b2lkCitXYWxQaXBlbGluZV9TdG9w KHZvaWQpCit7CisJaWYgKCFXYWxQaXBlbGluZVNobSB8fCAhV2FsUGlwZWxpbmVTaG0tPmluaXRp YWxpemVkKQorCQlyZXR1cm47CisKKwkvKiBBc2sgcHJvZHVjZXIgdG8gc3RvcCAqLworCVdhbFBp cGVsaW5lX1JlcXVlc3RTaHV0ZG93bigpOworCisJLyogV2FpdCBmb3IgcHJvZHVjZXIgdG8gZXhp dCAobWF4IDEwIHNlY29uZHMpICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKwl7 CisJCWJvb2wgcHJvZHVjZXJfYWxpdmU7CisKKwkJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGlu ZVNobS0+bXV0ZXgpOworCQlwcm9kdWNlcl9hbGl2ZSA9IChXYWxQaXBlbGluZVNobS0+cHJvZHVj ZXJfcGlkICE9IDApOworCQlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7 CisKKwkJaWYgKCFwcm9kdWNlcl9hbGl2ZSkKKwkJCWJyZWFrOworCisJCXBnX3VzbGVlcCgxMDAw MDApOyAvKiAxMDAgbXMgKi8KKwl9CisKKwljbGVhbnVwX2NvbnN1bWVyX3Jlc291cmNlcygpOwor CisJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCVdhbFBpcGVsaW5l U2htLT5pbml0aWFsaXplZCA9IGZhbHNlOworCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVT aG0tPm11dGV4KTsKKworCWVsb2coTE9HLCAiW3dhbHBpcGVsaW5lXSBzaHV0ZG93biIpOworfQog CiAvKgogICogUHJvZHVjZXIgRnVuY3Rpb24uCkBAIC0zNTMsNiArNTI5LDIxMCBAQCBXYWxQaXBl bGluZV9TZW5kU2h1dGRvd24odm9pZCkKIAlyZXR1cm4gKHJlcyA9PSBTSE1fTVFfU1VDQ0VTUyk7 CiB9CiAKKy8qCisgKiBDb25zdW1lciBGdW5jdGlvbi4KKyAqIFJlY2VpdmUgYW5kIGRlc2VyaWFs aXplIGEgV0FMIHJlY29yZCBmcm9tIHRoZSBwcm9kdWNlcgorICovCitEZWNvZGVkWExvZ1JlY29y ZCAqCitXYWxQaXBlbGluZV9SZWNlaXZlUmVjb3JkKFhMb2dSZWFkZXJTdGF0ZSAqc3RhcnR1cF9y ZWFkZXIpCit7CisJc2htX21xX3Jlc3VsdCByZXM7CisJU2l6ZSAgICAgICAgbmJ5dGVzOworCXZv aWQgICAgICAgKmRhdGE7CisJV2FsUmVjb3JkTXNnSGVhZGVyICpoZHI7CisJRGVjb2RlZFhMb2dS ZWNvcmQgKnJlY29yZDsKKworCWlmICghY29uc3VtZXJfbXFfaGFuZGxlKQorCQlyZXR1cm4gTlVM TDsKKworCS8qIFJlY2VpdmUgbWVzc2FnZSBmcm9tIHF1ZXVlICovCisJcmVzID0gc2htX21xX3Jl Y2VpdmUoY29uc3VtZXJfbXFfaGFuZGxlLCAmbmJ5dGVzLCAmZGF0YSwgZmFsc2UpOworCisJaWYg KHJlcyAhPSBTSE1fTVFfU1VDQ0VTUykKKwkJZWxvZyhFUlJPUiwgIlt3YWxwaXBlbGluZV0gY29u c3VtZXI6IGZhaWxlZCB0byByZWNlaXZlIHJlY29yZCIpOworCisJaGRyID0gKFdhbFJlY29yZE1z Z0hlYWRlciAqKSBkYXRhOworCisJLyogSGFuZGxlIGRpZmZlcmVudCBtZXNzYWdlIHR5cGVzICov CisJc3dpdGNoIChoZHItPm1zZ190eXBlKQorCXsKKwkJY2FzZSBXQUxfTVNHX1JFQ09SRDoKKwkJ CXJlY29yZCA9IGRlc2VyaWFsaXplX3dhbF9yZWNvcmQoKGNoYXIgKikgZGF0YSwgbmJ5dGVzLCBz dGFydHVwX3JlYWRlcik7CisKKwkJCS8qIFVwZGF0ZSBzdGF0aXN0aWNzICovCisJCQlTcGluTG9j a0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisJCQlXYWxQaXBlbGluZVNobS0+cmVj b3Jkc19yZWNlaXZlZCsrOworCQkJV2FsUGlwZWxpbmVTaG0tPmJ5dGVzX3JlY2VpdmVkICs9IG5i eXRlczsKKwkJCVdhbFBpcGVsaW5lU2htLT5jb25zdW1lcl9sc24gPSBoZHItPmVuZFJlY1B0cjsK KwkJCVNwaW5Mb2NrUmVsZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKworCQkJcmV0dXJu IHJlY29yZDsKKworCQljYXNlIFdBTF9NU0dfU0hVVERPV046CisJCQllbG9nKExPRywgIlt3YWxw aXBlbGluZV0gY29uc3VtZXI6IHJlY2VpdmVkIHNodXRkb3duIG1lc3NhZ2UgZnJvbSB0aGUgcHJv ZHVjZXIiKTsKKwkJCXJldHVybiBOVUxMOworCisJCWRlZmF1bHQ6CisJCQllbG9nKFBBTklDLCAi W3dhbHBpcGVsaW5lXSBjb25zdW1lcjogdW5rbm93biBtZXNzYWdlIHR5cGU6ICVkIiwKKwkJCQkg aGRyLT5tc2dfdHlwZSk7CisJCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBDb25zdW1l ciBGdW5jdGlvbi4KKyAqIENoZWNrIGlmIHByb2R1Y2VyIGlzIHN0aWxsIHJ1bm5pbmcKKyAqLwor Ym9vbAorV2FsUGlwZWxpbmVfQ2hlY2tQcm9kdWNlckFsaXZlKHZvaWQpCit7CisJcGlkX3QgICAg ICAgcGlkOworCWJvb2wgICAgICAgIGFsaXZlOworCisJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBl bGluZVNobS0+bXV0ZXgpOworCXBpZCA9IFdhbFBpcGVsaW5lU2htLT5wcm9kdWNlcl9waWQ7CisJ U3BpbkxvY2tSZWxlYXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCisJaWYgKHBpZCA9PSAw KQorCQlyZXR1cm4gZmFsc2U7CisKKwlhbGl2ZSA9IChraWxsKHBpZCwgMCkgPT0gMCk7CisKKwlp ZiAoIWFsaXZlKQorCXsKKwkJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgp OworCQlXYWxQaXBlbGluZVNobS0+cHJvZHVjZXJfcGlkID0gMDsKKwkJU3BpbkxvY2tSZWxlYXNl KCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCX0KKworCXJldHVybiBhbGl2ZTsKK30KKworLyoK KyAqIENvbnN1bWVyIEZ1bmN0aW9uLgorICogQ2hlY2sgaWYgcGlwZWxpbmUgaXMgYWN0aXZlCisg Ki8KK2Jvb2wKK1dhbFBpcGVsaW5lX0lzQWN0aXZlKHZvaWQpCit7CisJYm9vbCAgICAgICAgYWN0 aXZlOworCisJaWYgKCFXYWxQaXBlbGluZVNobSkKKwkJcmV0dXJuIGZhbHNlOworCisJU3Bpbkxv Y2tBY3F1aXJlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCWFjdGl2ZSA9IFdhbFBpcGVsaW5l U2htLT5pbml0aWFsaXplZCAmJiAhV2FsUGlwZWxpbmVTaG0tPnNodXRkb3duX3JlcXVlc3RlZDsK KwlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisKKwlyZXR1cm4gYWN0 aXZlOworfQorCisvKgorICogQ29uc3VtZXIgRnVuY3Rpb24uCisgKiBDaGVjayBpZiBwaWQgcGlw ZWxpbmUgZGVjb2RlciB3b3JrZXIKKyAqLworcGlkX3QKK1dhbFBpcGVsaW5lX0dldFByb2R1Y2Vy UGlkKHZvaWQpCit7CisJcGlkX3QgcGlkOworCisJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGlu ZVNobS0+bXV0ZXgpOworCXBpZCA9IFdhbFBpcGVsaW5lU2htLT5wcm9kdWNlcl9waWQ7CisJU3Bp bkxvY2tSZWxlYXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworCisJaWYgKCEocGlkID4gMCkp CisJCXBpZCA9IEludmFsaWRQaWQ7CisKKwlyZXR1cm4gcGlkOworfQorCisvKgorICogUHJvZHVj ZXIgRnVuY3Rpb24uCisgKiBQcm9kdWNlciBtYXkgY2FuIGV4aXQgd2l0aG91dCB3YWl0aW5nIGZv ciB0aGUgY29uc3VtZXIsIGJ1dCBpdHMgYmV0dGVyIHRvCisgKiB3YWl0IHVudGlsIGNvbnN1bWVy IHJlcXVlc3Qgc2h1dGRvd24uIFRoaXMgd2F5IGxvZyBtZXNzYWdlcyB3aWxsIHNob3cKKyAqIG5v IG9mIHJlY29yZHNfc2VudCAmIHJlY29yZHNfcmVjZWl2ZWQgcmVjb3JkcyBlcXVhbCB0byBlYWNo IG90aGVyLgorICovCitzdGF0aWMgdm9pZAorV2FsUGlwZWxpbmVfV2FpdEZvckNvbnN1bWVyU2h1 dGRvd25SZXF1ZXN0KHZvaWQpCit7CisJaW50CQkJaXRlcnMgPSAwOworCisJd2hpbGUgKHRydWUp CisJeworCQlib29sCQlzaHV0ZG93bl9yZXF1ZXN0ZWQ7CisKKwkJU3BpbkxvY2tBY3F1aXJlKCZX YWxQaXBlbGluZVNobS0+bXV0ZXgpOworCQlzaHV0ZG93bl9yZXF1ZXN0ZWQgPSBXYWxQaXBlbGlu ZVNobS0+c2h1dGRvd25fcmVxdWVzdGVkOworCQlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5l U2htLT5tdXRleCk7CisKKwkJaWYgKHNodXRkb3duX3JlcXVlc3RlZCkKKwkJCWJyZWFrOworCisJ CWlmICgrK2l0ZXJzID49IE1BWF9TSFVURE9XTl9XQUlUX0lURVJTKQorCQl7CisJCQllbG9nKFdB Uk5JTkcsCisJCQkJCSJbd2FscGlwZWxpbmVdIHByb2R1Y2VyOiB0aW1lZCBvdXQgd2FpdGluZyBm b3IgY29uc3VtZXIgIgorCQkJCQkidG8gYWNrbm93bGVkZ2Ugc2h1dGRvd24sIGV4aXRpbmcgYW55 d2F5Iik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEFsbG93IFNJR1RFUk0gLyBTSUdIVVAgdG8g aW50ZXJydXB0IHRoZSB3YWl0ICovCisJCVByb2Nlc3NQaXBlbGluZUJnd0ludGVycnVwdHMoKTsK KworCQlwZ191c2xlZXAoMTAwMDApOyAgLyogc2xlZXAgMTBtcyAqLworCX0KK30KKworLyoKKyAq IENvbnN1bWVyIEZ1bmN0aW9uLgorICogV2FpdCB1bmxlc3MgbGFzdCBzZW50IHJlY29yZCBieSB0 aGUgcGlwZWxpbmUgaXMgYXBwbGllZCBieSB0aGUKKyAqIHN0YXJ0dXAgcHJvY2Vzcy4KKyAqLwor dm9pZAorV2FsUGlwZWxpbmVfV2FpdEZvckNvbnN1bWVyQ2F0Y2h1cCh2b2lkKQoreworCVhMb2dS ZWNQdHIgcHJvZHVjZXJfbHNuOworCVhMb2dSZWNQdHIgY29uc3VtZXJfbHNuOworCisJZm9yICg7 OykKKwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKKwkJcHJv ZHVjZXJfbHNuID0gV2FsUGlwZWxpbmVTaG0tPnByb2R1Y2VyX2xzbjsKKwkJY29uc3VtZXJfbHNu ID0gV2FsUGlwZWxpbmVTaG0tPmFwcGxpZWRfbHNuOworCQlTcGluTG9ja1JlbGVhc2UoJldhbFBp cGVsaW5lU2htLT5tdXRleCk7CisKKwkJaWYgKHByb2R1Y2VyX2xzbiA9PSBjb25zdW1lcl9sc24p CisJCQlyZXR1cm47CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBzaG9ydCBz bGVlcCB0byBhdm9pZCBidXN5IGxvb3BpbmcgKi8KKwkJcGdfdXNsZWVwKDUwKTsgICAvKiA1MCBt aWNyb3NlY29uZHMgKi8KKwl9Cit9CisKKy8qCisgKiBDb25zdW1lciBGdW5jdGlvbi4KKyAqIEdl dCBwaXBlbGluZSBzdGF0aXN0aWNzCisgKi8KK3ZvaWQKK1dhbFBpcGVsaW5lX0dldFN0YXRzKHVp bnQ2NCAqcmVjb3Jkc19zZW50LCB1aW50NjQgKnJlY29yZHNfcmVjZWl2ZWQsCisJCQkJCSBYTG9n UmVjUHRyICpwcm9kdWNlcl9sc24sIFhMb2dSZWNQdHIgKmNvbnN1bWVyX2xzbikKK3sKKwlTcGlu TG9ja0FjcXVpcmUoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CisKKwlpZiAocmVjb3Jkc19zZW50 KQorCQkqcmVjb3Jkc19zZW50ID0gV2FsUGlwZWxpbmVTaG0tPnJlY29yZHNfc2VudDsKKwlpZiAo cmVjb3Jkc19yZWNlaXZlZCkKKwkJKnJlY29yZHNfcmVjZWl2ZWQgPSBXYWxQaXBlbGluZVNobS0+ cmVjb3Jkc19yZWNlaXZlZDsKKwlpZiAocHJvZHVjZXJfbHNuKQorCQkqcHJvZHVjZXJfbHNuID0g V2FsUGlwZWxpbmVTaG0tPnByb2R1Y2VyX2xzbjsKKwlpZiAoY29uc3VtZXJfbHNuKQorCQkqY29u c3VtZXJfbHNuID0gV2FsUGlwZWxpbmVTaG0tPmNvbnN1bWVyX2xzbjsKKworCVNwaW5Mb2NrUmVs ZWFzZSgmV2FsUGlwZWxpbmVTaG0tPm11dGV4KTsKK30KKwogCiAvKgogICogc2VyaWFsaXplX3dh bF9yZWNvcmQgKFByb2R1Y2VyKQpAQCAtNDExLDYgKzc5MSw3NiBAQCBzZXJpYWxpemVfd2FsX3Jl Y29yZChYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIsIGNoYXIgKipvdXRidWYpCiAJcmV0dXJu IHRvdGFsOwogfQogCisvKgorICogZGVzZXJpYWxpemVfd2FsX3JlY29yZCAoQ29uc3VtZXIpCisg KgorICogVW5wYWNrIGEgYnVmZmVyIHByb2R1Y2VkIGJ5IHNlcmlhbGl6ZV93YWxfcmVjb3JkLCBy ZXN0b3JlIGludGVyaW9yCisgKiBvZmZzZXRzIHRvIHBvaW50ZXJzLCBhbmQgYXR0YWNoIHRoZSBy ZWNvcmQgdG8gdGhlIHN0YXJ0dXAgcmVhZGVyLgorICoKKyAqIERhdGEgTGF5b3V0OgorICogCQlb V2FsUmVjb3JkTXNnSGVhZGVyXVtEZWNvZGVkWExvZ1JlY29yZCArIHRyYWlsaW5nIGRhdGFdCisg Ki8KK0RlY29kZWRYTG9nUmVjb3JkICoKK2Rlc2VyaWFsaXplX3dhbF9yZWNvcmQoY29uc3QgY2hh ciAqYnVmLCBTaXplIGxlbiwKKwkJCQkJICAgWExvZ1JlYWRlclN0YXRlICpzdGFydHVwX3JlYWRl cikKK3sKKwlXYWxSZWNvcmRNc2dIZWFkZXIgaGRyOworCURlY29kZWRYTG9nUmVjb3JkICpkZWM7 CisJY29uc3QgY2hhciAqcGF5bG9hZDsKKworCWlmIChsZW4gPCBzaXplb2YoaGRyKSkKKwkJcmV0 dXJuIE5VTEw7CisKKwltZW1jcHkoJmhkciwgYnVmLCBzaXplb2YoaGRyKSk7CisKKwlpZiAoaGRy LmRlY29kZWRfc2l6ZSAhPSBsZW4gLSBzaXplb2YoaGRyKSkKKwkJcmV0dXJuIE5VTEw7CisKKwor CS8qCisJICogV2UgZG9uJ3QgaGF2ZSB0byBjb3B5IHRoZSBkYXRhIHRvIHNvbWUgbG9jYWwgYnVm ZmVyLiBUaGUgZGVjb2RlZCBibGtzCisJICogYXJlIGNvbnRpbm91cyBieXRlcyBpbiBtZW1vcnkg YW5kIGhlbmNlIHdlIGNhbiBqdXN0IHBvaW50IHRvIGl0cyBsb2NhdGlvbgorCSAqIGluIHRoZSBz aF9tcQorCSAqLworCXBheWxvYWQgPSBidWYgKyBzaXplb2YoaGRyKTsKKwlkZWMgPSAoRGVjb2Rl ZFhMb2dSZWNvcmQgKikgcGF5bG9hZDsKKworCS8qCisJICogUmVzdG9yZSBpbnRlcmlvciBwb2lu dGVycyBmcm9tIG9mZnNldHMuCisJICogT2Zmc2V0IDAgbWVhbnMgdGhlIG9yaWdpbmFsIHBvaW50 ZXIgd2FzIE5VTEwuCisJICovCisJaWYgKGRlYy0+bWFpbl9kYXRhX2xlbiA+IDApCisJCWRlYy0+ bWFpbl9kYXRhID0gKGNoYXIgKilkZWMgKyAocHRyZGlmZl90KWRlYy0+bWFpbl9kYXRhOworCisJ Zm9yIChpbnQgaSA9IDA7IGkgPD0gZGVjLT5tYXhfYmxvY2tfaWQ7IGkrKykKKwl7CisJCURlY29k ZWRCa3BCbG9jayAqYmxrID0gJmRlYy0+YmxvY2tzW2ldOworCQlpZiAoIWJsay0+aW5fdXNlKQor CQkJY29udGludWU7CisJCWlmIChibGstPmhhc19kYXRhKQorCQkJYmxrLT5kYXRhID0gKGNoYXIg KilkZWMgKyAocHRyZGlmZl90KWJsay0+ZGF0YTsKKwkJaWYgKGJsay0+aGFzX2ltYWdlKQorCQkJ YmxrLT5ia3BfaW1hZ2UgPSAoY2hhciAqKWRlYyArIChwdHJkaWZmX3QpYmxrLT5ia3BfaW1hZ2U7 CisJfQorCisJLyogY2xlYXIgdGhlIHF1ZXVlIGxpbmsg4oCUIGl0IGJlbG9uZ3MgdG8gdGhlIHBy b2R1Y2VyJ3MgcXVldWUgKi8KKwlkZWMtPm5leHQgPSBOVUxMOworCisJLyogQXR0YWNoIHRvIHJl YWRlciwgb25seSB1cGRhdGluZyB0aGUgcHVibGljIHBhcmFtZXRlcnMgKi8KKwlzdGFydHVwX3Jl YWRlci0+cmVjb3JkICAgICAgICAgICAgPSBkZWM7CisJc3RhcnR1cF9yZWFkZXItPlJlYWRSZWNQ dHIgICAgICAgID0gZGVjLT5sc247CisJc3RhcnR1cF9yZWFkZXItPkRlY29kZVJlY1B0ciAgICAg ID0gZGVjLT5sc247CisJc3RhcnR1cF9yZWFkZXItPkVuZFJlY1B0ciAgICAgICAgID0gZGVjLT5u ZXh0X2xzbjsKKwlzdGFydHVwX3JlYWRlci0+TmV4dFJlY1B0ciAgICAgICAgPSBkZWMtPm5leHRf bHNuOworCXN0YXJ0dXBfcmVhZGVyLT5kZWNvZGVfcXVldWVfaGVhZCA9IGRlYzsKKwlzdGFydHVw X3JlYWRlci0+ZGVjb2RlX3F1ZXVlX3RhaWwgPSBkZWM7CisJc3RhcnR1cF9yZWFkZXItPm1pc3Np bmdDb250cmVjUHRyID0gaGRyLm1pc3NpbmdDb250cmVjUHRyOworCXN0YXJ0dXBfcmVhZGVyLT5h Ym9ydGVkUmVjUHRyICAgICA9IGhkci5hYm9ydGVkUmVjUHRyOworCXN0YXJ0dXBfcmVhZGVyLT5v dmVyd3JpdHRlblJlY1B0ciA9IGhkci5vdmVyd3JpdHRlblJlY1B0cjsKKworCXJldHVybiBkZWM7 Cit9CisKIC8qCiAgKiBXZSBuZWVkIHRvIHB1dCBzb21lIGFzc2VydGlvbiB0aGF0IG9ubHkgcGlw ZWxpbmUgd29ya2VyIHNob3VsZCBiZSB0b3VjaGluZwogICogdGhlIHNwZWNpZmljIGNvZGUuCkBA IC00NTEsNiArOTAxLDMyIEBAIGNsZWFudXBfcHJvZHVjZXJfcmVzb3VyY2VzKHZvaWQpCiAJU3Bp bkxvY2tSZWxlYXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOwogfQogCisvKgorICogQ2xlYW4g dXAgY29uc3VtZXItc2lkZSByZXNvdXJjZXMKKyAqLworc3RhdGljIHZvaWQKK2NsZWFudXBfY29u c3VtZXJfcmVzb3VyY2VzKHZvaWQpCit7CisJaWYgKGNvbnN1bWVyX21xX2hhbmRsZSkKKwl7CisJ CXNobV9tcV9kZXRhY2goY29uc3VtZXJfbXFfaGFuZGxlKTsKKwkJY29uc3VtZXJfbXFfaGFuZGxl ID0gTlVMTDsKKwl9CisKKwlpZiAoY29uc3VtZXJfZHNtX3NlZykKKwl7CisJCWRzbV91bnBpbl9z ZWdtZW50KGRzbV9zZWdtZW50X2hhbmRsZShjb25zdW1lcl9kc21fc2VnKSk7CisJCWRzbV9kZXRh Y2goY29uc3VtZXJfZHNtX3NlZyk7CisJCWNvbnN1bWVyX2RzbV9zZWcgPSBOVUxMOworCX0KKwor CWNvbnN1bWVyX21xID0gTlVMTDsKKworCVNwaW5Mb2NrQWNxdWlyZSgmV2FsUGlwZWxpbmVTaG0t Pm11dGV4KTsKKwlXYWxQaXBlbGluZVNobS0+Y29uc3VtZXJfcGlkID0gMDsKKwlXYWxQaXBlbGlu ZVNobS0+ZHNtX3NlZ19oYW5kbGUgPSBEU01fSEFORExFX0lOVkFMSUQ7CisJU3BpbkxvY2tSZWxl YXNlKCZXYWxQaXBlbGluZVNobS0+bXV0ZXgpOworfQogCiAvKgogICogQ2xlYW51cCBjYWxsYmFj ayBmb3IgcHJvY2VzcyBleGl0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9ncmVjb3ZlcnkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVy eS5jCmluZGV4IDZkZTRhNzVjNmMyLi45Y2MyOGM0YTcxNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKQEAgLTE2MDAsNyArMTYwMCw1NyBAQCBTaHV0ZG93bldh bFJlY292ZXJ5KHZvaWQpCiAJICogaXQsIGJ1dCBsZXQncyBkbyBpdCBmb3IgdGhlIHNha2Ugb2Yg dGlkaW5lc3MuCiAJICovCiAJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCkKLQkJRGlzb3du TGF0Y2goJlhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlXYWtldXBMYXRjaCk7CisKKy8qCisgKiBH ZXQgbmV4dCByZWNvcmQgZm9yIHJlZG8uCisgKgorICogVXNlIHRoZSBwaXBlbGluZSBpZiBlbmFi bGVkIGZvciBwYXJhbGxlbCBkZWNvZGluZyBhbmQgcmVjZWl2ZSBkZWNvZGVkCisgKiByZWNvcmRz IGZyb20gYSBzaGFyZWQgcXVldWUsIGVsc2UgcmVhZCBpdCBkaXJlY3RseS4KKyAqCisgKiBQYXJh bGxlbCBkZWNvZGluZyBoZWxwcyB1cyBvZmZsb2FkaW5nIHNvbWUgbG9hZCBmcm9tIHRoZSBDUFUg YW5kIGhlbmNlCisgKiBib29zdGluZyB0aGUgcmVjb3ZlcnkgcHJvY2Vzcy4KKyAqLworc3RhdGlj IFhMb2dSZWNvcmQgKgorUmVjZWl2ZVJlY29yZChYTG9nUHJlZmV0Y2hlciAqeGxvZ3ByZWZldGNo ZXIsIGludCBlbW9kZSwKKwkJCQlib29sIGZldGNoaW5nX2NrcHQsIFRpbWVMaW5lSUQgcmVwbGF5 VExJLAorCQkJCVhMb2dSZWFkZXJTdGF0ZSAqKmxvY2FscmVhZGVyKQoreworCisJWExvZ1JlY29y ZCAqcmVjb3JkID0gTlVMTDsKKwlYTG9nUmVhZGVyU3RhdGUgKnJlYWRlciA9ICpsb2NhbHJlYWRl cjsKKwlEZWNvZGVkWExvZ1JlY29yZCAqZGVjb2RlZF9yZWNvcmQgPSBOVUxMOworCisJLyoKKwkg KiBJZiBwaXBlbGluZSBub3QgZW5hYmxlZCByZWFkIHRoZSByZWNvcmQgZGlyZWN0bHkKKwkgKi8K KwlpZiAoIXdhbF9waXBlbGluZV9lbmFibGVkKQorCXsKKwkJcmVjb3JkID0gUmVhZFJlY29yZCh4 bG9ncHJlZmV0Y2hlciwgZW1vZGUsIGZldGNoaW5nX2NrcHQsIHJlcGxheVRMSSk7CisJCXJldHVy biByZWNvcmQ7CisJfQorCisJQXNzZXJ0IChXYWxQaXBlbGluZV9Jc0FjdGl2ZSgpKTsKKworCS8q CisJICogR2V0IHRoZSByZWNvcmQgZnJvbSB0aGUgcGlwZWxpbmUgbWVzc2FnZSBxdWV1ZQorCSAq LworCWRlY29kZWRfcmVjb3JkID0gV2FsUGlwZWxpbmVfUmVjZWl2ZVJlY29yZChyZWFkZXIpOwor CisJaWYgKGRlY29kZWRfcmVjb3JkKQorCXsKKwkJcmVjb3JkID0gJmRlY29kZWRfcmVjb3JkLT5o ZWFkZXI7CisJCXJldHVybiByZWNvcmQ7CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIFdlIHdp bGwgZW5kIHVwIGhlcmUgb25seSB3aGVuIHBpcGVsaW5lIGNvdWxkbid0IHJlYWQgbW9yZQorCQkg KiByZWNvcmRzIGFuZCBoYXZlIHNlbnQgYSBzaHV0ZG93biBtc2cuIFdlIHdpbGwgYWNrbm93bGRn ZSB0aGlzCisJCSAqIGFuZCB3aWxsIHRyaWdnZXIgcmVxdWVzdCB0byBzdG9wIG1vcmUgcGlwZWxp bmVkIGRlY29kaW5nLgorCQkgKi8KKwkJV2FsUGlwZWxpbmVfU3RvcCgpOworCQlyZXR1cm4gTlVM TDsKKwl9CiB9CiAKIC8qCkBAIC0xNjE1LDYgKzE2NjUsMTIgQEAgUGVyZm9ybVdhbFJlY292ZXJ5 KHZvaWQpCiAJYm9vbAkJcmVhY2hlZFJlY292ZXJ5VGFyZ2V0ID0gZmFsc2U7CiAJVGltZUxpbmVJ RAlyZXBsYXlUTEk7CiAKKwkvKgorCSAqIHN0YW5kYWxvbmUgYmFja2VuZCBtYXkgZXhpc3QgaW4g Y2FzZSBvZiBwZ19yZXdpbmQuCisJICovCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkJd2Fs X3BpcGVsaW5lX2VuYWJsZWQgPSBmYWxzZTsKKwogCS8qCiAJICogSW5pdGlhbGl6ZSBzaGFyZWQg dmFyaWFibGVzIGZvciB0cmFja2luZyBwcm9ncmVzcyBvZiBXQUwgcmVwbGF5LCBhcyBpZgogCSAq IHdlIGhhZCBqdXN0IHJlcGxheWVkIHRoZSByZWNvcmQgYmVmb3JlIHRoZSBSRURPIGxvY2F0aW9u IChvciB0aGUKQEAgLTE2OTQsNiArMTc1MCwxNyBAQCBQZXJmb3JtV2FsUmVjb3Zlcnkodm9pZCkK IAogCQlJblJlZG8gPSB0cnVlOwogCisJCWlmKHdhbF9waXBlbGluZV9lbmFibGVkKQorCQl7CisJ CQkvKgorCQkJICogU3RhcnR1cCBwcm9jIHBhcmFtZXRlcnMgdGhhdCBwaXBlbGluZSBzaG91bGQg YWxzbyBiZSBhd2FyZSBvZi4KKwkJCSAqLworCQkJV2FsUGlwZWxpbmVQYXJhbXMgKnBhcmFtcyA9 IHBhbGxvYzAoc2l6ZW9mKFdhbFBpcGVsaW5lUGFyYW1zKSk7CisKKwkJCXBhcmFtcy0+UmVwbGF5 VExJID0gcmVwbGF5VExJOworCQkJV2FsUGlwZWxpbmVfU3RhcnQocGFyYW1zKTsKKwkJfQorCiAJ CVJtZ3JTdGFydHVwKCk7CiAKIAkJZXJlcG9ydChMT0csCkBAIC0xODAyLDcgKzE4NjksNyBAQCBQ ZXJmb3JtV2FsUmVjb3Zlcnkodm9pZCkKIAkJCX0KIAogCQkJLyogRWxzZSwgdHJ5IHRvIGZldGNo IHRoZSBuZXh0IFdBTCByZWNvcmQgKi8KLQkJCXJlY29yZCA9IFJlYWRSZWNvcmQoeGxvZ3ByZWZl dGNoZXIsIExPRywgZmFsc2UsIHJlcGxheVRMSSk7CisJCQlyZWNvcmQgPSBSZWNlaXZlUmVjb3Jk KHhsb2dwcmVmZXRjaGVyLCBMT0csIGZhbHNlLCByZXBsYXlUTEksICZ4bG9ncmVhZGVyKTsKIAkJ fSB3aGlsZSAocmVjb3JkICE9IE5VTEwpOwogCiAJCS8qCkBAIC0xODExLDYgKzE4NzgsOSBAQCBQ ZXJmb3JtV2FsUmVjb3Zlcnkodm9pZCkKIAogCQlpZiAocmVhY2hlZFJlY292ZXJ5VGFyZ2V0KQog CQl7CisJCQlpZiAod2FsX3BpcGVsaW5lX2VuYWJsZWQpCisJCQkJV2FsUGlwZWxpbmVfU3RvcCgp OworCiAJCQlpZiAoIXJlYWNoZWRDb25zaXN0ZW5jeSkKIAkJCQllcmVwb3J0KEZBVEFMLAogCQkJ CQkJKGVycm1zZygicmVxdWVzdGVkIHJlY292ZXJ5IHN0b3AgcG9pbnQgaXMgYmVmb3JlIGNvbnNp c3RlbnQgcmVjb3ZlcnkgcG9pbnQiKSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2dwaXBlbGluZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dwaXBlbGluZS5oCmluZGV4 IDMzMzA5MDYzMmI0Li5hODk5NWQ1YzFhNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2dwaXBlbGluZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncGlwZWxpbmUuaApA QCAtODgsMTEgKzg4LDI5IEBAIHR5cGVkZWYgc3RydWN0IFdhbFBpcGVsaW5lU2htQ3RsCiAvKiBj b25zdW1lciBtYXkgaGF2ZSB0byBjb21wdXRlIHByZWZldGVjaGVyIHN0YXRzICovCiBleHRlcm4g UEdETExJTVBPUlQgWExvZ1ByZWZldGNoZXIgKnhsb2dwcmVmZXRjaGVyX3BpcGVsaW5lZDsKIAor LyoKKyAqIFB1YmxpYyBBUEkgZnVuY3Rpb25zCisgKi8KKworLyogU3RhcnQvc3RvcCB0aGUgcGlw ZWxpbmUgKi8KK2V4dGVybiB2b2lkIFdhbFBpcGVsaW5lX1N0YXJ0KFdhbFBpcGVsaW5lUGFyYW1z ICpwYXJhbXMpOworZXh0ZXJuIHZvaWQgV2FsUGlwZWxpbmVfU3RvcCh2b2lkKTsKIAogLyogUHJv ZHVjZXIgZnVuY3Rpb25zIChjYWxsZWQgYnkgYmFja2dyb3VuZCB3b3JrZXIpICovCiBleHRlcm4g dm9pZCBXYWxQaXBlbGluZV9Qcm9kdWNlck1haW4oRGF0dW0gbWFpbl9hcmcpOwogZXh0ZXJuIGJv b2wgV2FsUGlwZWxpbmVfU2VuZFJlY29yZChYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CiBleHRl cm4gYm9vbCBXYWxQaXBlbGluZV9TZW5kU2h1dGRvd24odm9pZCk7CisKKy8qIENvbnN1bWVyIGZ1 bmN0aW9ucyAoY2FsbGVkIGJ5IHN0YXJ0dXAgcHJvY2VzcykgKi8KK2V4dGVybiBEZWNvZGVkWExv Z1JlY29yZCAqV2FsUGlwZWxpbmVfUmVjZWl2ZVJlY29yZChYTG9nUmVhZGVyU3RhdGUgKnN0YXJ0 dXBfcmVhZGVyKTsKK2V4dGVybiBib29sIFdhbFBpcGVsaW5lX0NoZWNrUHJvZHVjZXJBbGl2ZSh2 b2lkKTsKKworLyogU3RhdHVzIGFuZCBtb25pdG9yaW5nICovCitleHRlcm4gYm9vbCBXYWxQaXBl bGluZV9Jc0FjdGl2ZSh2b2lkKTsKK2V4dGVybiBwaWRfdCBXYWxQaXBlbGluZV9HZXRQcm9kdWNl clBpZCh2b2lkKTsKK2V4dGVybiB2b2lkIFdhbFBpcGVsaW5lX1dhaXRGb3JDb25zdW1lckNhdGNo dXAodm9pZCk7CitleHRlcm4gdm9pZCBXYWxQaXBlbGluZV9HZXRTdGF0cyh1aW50NjQgKnJlY29y ZHNfc2VudCwgdWludDY0ICpyZWNvcmRzX3JlY2VpdmVkLAorCQkJCQkJCQkgIFhMb2dSZWNQdHIg KnByb2R1Y2VyX2xzbiwgWExvZ1JlY1B0ciAqY29uc3VtZXJfbHNuKTsKIGV4dGVybiBib29sIEFt V2FsUGlwZWxpbmUodm9pZCk7CiAKIAotLSAKMi4zNC4xCgo= --0000000000001a84cb0654ebb847 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0003-Pipelined-Recovery-Decoupling-startup-and-produce.patch" Content-Disposition: attachment; filename="v4-0003-Pipelined-Recovery-Decoupling-startup-and-produce.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqqo699b2 RnJvbSAxMDQxNDc4NWRjNWM3NjYxZGEyZjM5ZmUzZGI3OGIzMzU0NzhkZmUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbXJhbiBaYWhlZXIgPGltcmFuLnpoaXJAZ21haWwuY29tPgpE YXRlOiBNb24sIDIyIEp1biAyMDI2IDEyOjMzOjUzICswNTAwClN1YmplY3Q6IFtQQVRDSCB2NCAz LzRdIFBpcGVsaW5lZCBSZWNvdmVyeSAtIERlY291cGxpbmcgc3RhcnR1cCBhbmQgcHJvZHVjZXIK IHN0YXRlcy4KCkJlZm9yZSB0aGlzIHBhdGNoLCBtb3N0IHN0YXRlcy92YXJpYWJsZXMgd2VyZSBz dGF0aWNhbGx5IGRlZmluZWQKdW5kZXIgeGxvZ3JlY292ZXJ5LmMgYXMgdGhleSB3b3VsZCBvbmx5 IGJlIG5lZWRlZCBieSB0aGUgc3RhcnR1cCBwcm9jZXNzLgpIb3dldmVyLCB0byBpbXBsZW1lbnQg cGlwZWxpbmluZywgdGhlIHByb2R1Y2VyIChwYXJhbGxlbCBkZWNvZGVyKQpzaG91bGQgYWxzbyBi ZSBhd2FyZSBvZiB0aGVzZSBzdGF0aWMgc3RhdGVzLiBTb21lIG9mIHRoZXNlIHN0YXRlcyBzdGF5 cwpjb25zdGFudCB0aHJvdWdob3V0IGRlY29kaW5nL3JlY292ZXJ5LCB3aGlsZSBvdGhlcnMgbWF5 IGNoYW5nZSBkdXJpbmcKcmVjb3ZlcnkuCgpUbyBhZGRyZXNzIHRoaXMsIFdhbFBpcGVsaW5lUGFy YW1zIGNvbnRhaW5zIGEgc2V0IG9mIGFsbCBsb2NhbCBzdGF0ZXMKdGhhdCB0aGUgc3RhcnR1cCBw cm9jZXNzIGhhZCBiZWZvcmUgaXQgc3RhcnRlZCB0aGUgcGlwZWxpbmUuIFRoZXNlCnN0YXRlcyBh cmUgcGFzc2VkIHRvIHRoZSBwcm9kdWNlciwgd2hpY2ggdXBkYXRlcyB0aGVtIGFjY29yZGluZ2x5 CmJlZm9yZSBlbnRlcmluZyB0aGUgZGVjb2RpbmcgbG9vcC4gVGhpcyBpcyBkb25lIHVzaW5nCldh bFBpcGVsaW5lX0V4cG9ydFJlY292ZXJ5U3RhdGUoKSBhbmQgV2FsUGlwZWxpbmVfSW1wb3J0UmVj b3ZlcnlTdGF0ZSgpLgoKV2FsUGlwZWxpbmVfRXhwb3J0UmVjb3ZlcnlTdGF0ZSAtLT4gc2F2ZXMg YWxsIHRoZSBsb2NhbCBzdGFydHVwIHByb2Mgc3RhdGVzCldhbFBpcGVsaW5lX0ltcG9ydFJlY292 ZXJ5U3RhdGUgLS0+IGFwcGx5IHRob3NlIHN0YXRlcyB0byB0aGUgcHJvZHVjZXIgY29udGV4dAoK VG8gbWFuYWdlIHRoZSBzdGF0ZXMgdGhhdCBtYXkga2VlcCBjaGFuZ2luZyBkdXJpbmcgdGhlIHJl Y292ZXJ5LCB3ZQphZGRlZCB0aGVtIHRvIHRoZSBzaGFyZWQgbWVtb3J5IGluIFhMb2dSZWNvdmVy eUN0bERhdGEuIE5vdyB3aGVuZXZlcgp0aGUgc3RhcnR1cCBwcm9jIHVwZGF0ZXMgYW55IG9mIHN1 Y2ggbG9jYWwgc3RhdGVzIHRoZSBzaGFyZWQgc3RhdGUKaXMgYWxzbyB1cGF0ZWQgYWNjb3JkaW5n bHksICBzbyB0aGF0IHRoZSBwaXBlbGluZSBzdGF5IGF3YXJlIG9mIHRoaXMKdXBkYXRlIGR1cmlu ZyB0aGUgZGVjb2RpbmcuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAg ICAgICAgfCAgMTUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5j IHwgNTE4ICsrKysrKysrKysrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0 YW5kYnkuYyAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncGlwZWxpbmUu aCAgICAgICAgIHwgIDQ2ICsrCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmggICAg ICAgICB8ICA4NSArKysrCiA1IGZpbGVzIGNoYW5nZWQsIDYyOSBpbnNlcnRpb25zKCspLCAzNiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKaW5kZXggYTgxOTEyYjc0NDEu LjhjZGMxMTE5OTg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC01OSw2ICs1OSw3 IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJhY2Nlc3Mv eGxvZ2FyY2hpdmUuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUg ImFjY2Vzcy94bG9ncGlwZWxpbmUuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgog I2luY2x1ZGUgImFjY2Vzcy94bG9ncmVjb3ZlcnkuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0 aWxzLmgiCkBAIC02MjY5LDYgKzYyNzAsMTIgQEAgU3RhcnR1cFhMT0codm9pZCkKIAogCQkJCVBy b2NBcnJheUFwcGx5UmVjb3ZlcnlJbmZvKCZydW5uaW5nKTsKIAkJCX0KKworCQkJLyoKKwkJCSAq IEZpbmFseSB1cGRhdGUgdGhlIHNoYXJlZCBzdGFuZGJ5IHN0YXRlLCBzbyB0aGF0IHBpcGVsaW5l IHdvcmtlcgorCQkJICogc3RheSBjb25zaXN0ZW50IHdpdGggdGhlIHN0YXJ0dXAgcHJvY2Vzcy4K KwkJCSAqLworCQkJU2V0U2hhcmVkSG90U3RhbmRieVN0YXRlKCk7CiAJCX0KIAogCQkvKgpAQCAt ODkyNSw2ICs4OTMyLDEyIEBAIHhsb2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJ CXJ1bm5pbmcueGlkcyA9IHhpZHM7CiAKIAkJCVByb2NBcnJheUFwcGx5UmVjb3ZlcnlJbmZvKCZy dW5uaW5nKTsKKworCQkJLyoKKwkJCSAqIFVwZGF0ZSB0aGUgc2hhcmVkIHN0YW5kYnkgc3RhdGUs IHNvIHRoYXQgcGlwZWxpbmUgd29ya2VyCisJCQkgKiBzdGF5IGNvbnNpc3RlbnQgd2l0aCB0aGUg c3RhcnR1cCBwcm9jZXNzLgorCQkJICovCisJCQlTZXRTaGFyZWRIb3RTdGFuZGJ5U3RhdGUoKTsK IAkJfQogCiAJCS8qIENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weSBhbHdheXMgdHJhY2tzIHRo ZSBsYXRlc3QgY2twdCBYSUQgKi8KQEAgLTEwMTQ5LDcgKzEwMTYyLDcgQEAgR2V0T2xkZXN0UmVz dGFydFBvaW50KFhMb2dSZWNQdHIgKm9sZHJlY3B0ciwgVGltZUxpbmVJRCAqb2xkdGxpKQogdm9p ZAogWExvZ1NodXRkb3duV2FsUmN2KHZvaWQpCiB7Ci0JQXNzZXJ0KEFtU3RhcnR1cFByb2Nlc3Mo KSB8fCAhSXNVbmRlclBvc3RtYXN0ZXIpOworCUFzc2VydChBbVN0YXJ0dXBQcm9jZXNzKCkgfHwg QW1XYWxQaXBlbGluZSgpIHx8ICFJc1VuZGVyUG9zdG1hc3Rlcik7CiAKIAlTaHV0ZG93bldhbFJj digpOwogCVJlc2V0SW5zdGFsbFhMb2dGaWxlU2VnbWVudEFjdGl2ZSgpOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRleCA5Y2MyOGM0YTcxNy4uYmEzNjdlYzdi NjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCkBAIC0zNSw2 ICszNSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxv Z19pbnRlcm5hbC5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nYXJjaGl2ZS5oIgorI2luY2x1ZGUg ImFjY2Vzcy94bG9ncGlwZWxpbmUuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3ByZWZldGNoZXIu aCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9n cmVjb3ZlcnkuaCIKQEAgLTEwMCw2ICsxMDEsOCBAQCBpbnQJCQlyZWNvdmVyeV9taW5fYXBwbHlf ZGVsYXkgPSAwOwogY2hhcgkgICAqUHJpbWFyeUNvbm5JbmZvID0gTlVMTDsKIGNoYXIJICAgKlBy aW1hcnlTbG90TmFtZSA9IE5VTEw7CiBib29sCQl3YWxfcmVjZWl2ZXJfY3JlYXRlX3RlbXBfc2xv dCA9IGZhbHNlOworYm9vbAkJd2FsX3BpcGVsaW5lX2VuYWJsZWQgPSBmYWxzZTsKK2ludAkJCXdh bF9waXBlbGluZV9tcV9zaXplX21iID0gMTI4OwogCiAvKgogICogcmVjb3ZlcnlUYXJnZXRUaW1l TGluZUdvYWw6IHdoYXQgdGhlIHVzZXIgcmVxdWVzdGVkLCBpZiBhbnkKQEAgLTIwNiwxNyArMjA5 LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgWExvZ1BhZ2VSZWFkUHJpdmF0ZQogLyogZmxhZyB0byB0ZWxs IFhMb2dQYWdlUmVhZCB0aGF0IHdlIGhhdmUgc3RhcnRlZCByZXBsYXlpbmcgKi8KIHN0YXRpYyBi b29sIEluUmVkbyA9IGZhbHNlOwogCi0vKgotICogQ29kZXMgaW5kaWNhdGluZyB3aGVyZSB3ZSBn b3QgYSBXQUwgZmlsZSBmcm9tIGR1cmluZyByZWNvdmVyeSwgb3Igd2hlcmUKLSAqIHRvIGF0dGVt cHQgdG8gZ2V0IG9uZS4KLSAqLwotdHlwZWRlZiBlbnVtCi17Ci0JWExPR19GUk9NX0FOWSA9IDAs CQkJLyogcmVxdWVzdCB0byByZWFkIFdBTCBmcm9tIGFueSBzb3VyY2UgKi8KLQlYTE9HX0ZST01f QVJDSElWRSwJCQkvKiByZXN0b3JlZCB1c2luZyByZXN0b3JlX2NvbW1hbmQgKi8KLQlYTE9HX0ZS T01fUEdfV0FMLAkJCS8qIGV4aXN0aW5nIGZpbGUgaW4gcGdfd2FsICovCi0JWExPR19GUk9NX1NU UkVBTSwJCQkvKiBzdHJlYW1lZCBmcm9tIHByaW1hcnkgKi8KLX0gWExvZ1NvdXJjZTsKIAogLyog aHVtYW4tcmVhZGFibGUgbmFtZXMgZm9yIFhMb2dTb3VyY2VzLCBmb3IgZGVidWdnaW5nIG91dHB1 dCAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHhsb2dTb3VyY2VOYW1lc1tdID0geyJhbnki LCAiYXJjaGl2ZSIsICJwZ193YWwiLCAic3RyZWFtIn07CkBAIC0zNjUsMTIgKzM1Nyw2IEBAIHN0 YXRpYyB2b2lkIHJlY292ZXJ5UGF1c2VzSGVyZShib29sIGVuZE9mUmVjb3ZlcnkpOwogc3RhdGlj IGJvb2wgcmVjb3ZlcnlBcHBseURlbGF5KFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKIHN0YXRp YyB2b2lkIENvbmZpcm1SZWNvdmVyeVBhdXNlZCh2b2lkKTsKIAotc3RhdGljIFhMb2dSZWNvcmQg KlJlYWRSZWNvcmQoWExvZ1ByZWZldGNoZXIgKnhsb2dwcmVmZXRjaGVyLAotCQkJCQkJCSAgaW50 IGVtb2RlLCBib29sIGZldGNoaW5nX2NrcHQsCi0JCQkJCQkJICBUaW1lTGluZUlEIHJlcGxheVRM SSk7Ci0KLXN0YXRpYyBpbnQJWExvZ1BhZ2VSZWFkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3JlYWRl ciwgWExvZ1JlY1B0ciB0YXJnZXRQYWdlUHRyLAotCQkJCQkJIGludCByZXFMZW4sIFhMb2dSZWNQ dHIgdGFyZ2V0UmVjUHRyLCBjaGFyICpyZWFkQnVmKTsKIHN0YXRpYyBYTG9nUGFnZVJlYWRSZXN1 bHQgV2FpdEZvcldBTFRvQmVjb21lQXZhaWxhYmxlKFhMb2dSZWNQdHIgUmVjUHRyLAogCQkJCQkJ CQkJCQkJCSAgYm9vbCByYW5kQWNjZXNzLAogCQkJCQkJCQkJCQkJCSAgYm9vbCBmZXRjaGluZ19j a3B0LApAQCAtMzkyLDYgKzM3OCw3IEBAIHN0YXRpYyBib29sIEhvdFN0YW5kYnlBY3RpdmVJblJl cGxheSh2b2lkKTsKIAogc3RhdGljIHZvaWQgU2V0Q3VycmVudENodW5rU3RhcnRUaW1lKFRpbWVz dGFtcFR6IHh0aW1lKTsKIHN0YXRpYyB2b2lkIFNldExhdGVzdFhUaW1lKFRpbWVzdGFtcFR6IHh0 aW1lKTsKK3N0YXRpYyB2b2lkIFdhbFBpcGVsaW5lX0V4cG9ydFJlY292ZXJ5U3RhdGUoV2FsUGlw ZWxpbmVQYXJhbXMgKnBhcmFtcyk7CiAKIC8qCiAgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IGZv ciBXQUwgcmVjb3ZlcnkKQEAgLTQxMiw5ICszOTksMjcgQEAgWExvZ1JlY292ZXJ5U2htZW1Jbml0 KHZvaWQgKmFyZykKIAogCVNwaW5Mb2NrSW5pdCgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7 CiAJSW5pdFNoYXJlZExhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gp OworCUluaXRTaGFyZWRMYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5yZWNvdmVyeUFwcGx5RGVsYXlM YXRjaCk7CiAJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5 Tm90UGF1c2VkQ1YpOwogfQogCisvKgorICogV2UgbWF5IG5vdCBiZSBhYmxlIHRvIHNoYXJlIGV4 cGVjdGVkVExFcyBsaXN0IGFjcm9zcyB0aGUgc2hhcmVkbWVtb3J5LgorICogRm9yIG5vdyBqdXN0 IHRyaWdnZXIgdGhlIHN0YXJ0dXAgcHJvY2VzcyAoY29uc3VtZXIpIHRvCisgKiByZXJlYWQgdGhl IHRpbWVsaW5laGlzdG9yeSBmaWxlICB3aGVuZXZlciBwaXBlbGluZSB1cGRhdGVzIHRoZSB2YWx1 ZSBmb3IKKyAqIGV4cGVjdGVkVExFcy4gU28gdGhlIGNvbnN1bWVyIHByb2Mgd2lsbCB1cGRhdGUg ZXhwZWN0ZWRUTEVzICBsb2NhbGx5LgorICovCitzdGF0aWMgdm9pZAorUGlwZWxpbmVDb25zdW1l ckV4cGVjdGVkVExFc1VwZGF0ZVRMSShUaW1lTGluZUlEIHJlY292ZXJ5VGFyZ2V0VExJKQorewor CWlmICh3YWxfcGlwZWxpbmVfZW5hYmxlZCkKKwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1Jl Y292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCVhMb2dSZWNvdmVyeUN0bC0+ZXhwZWN0ZWRUTEVzVXBk YXRlVExJID0gcmVjb3ZlcnlUYXJnZXRUTEk7CisJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292 ZXJ5Q3RsLT5pbmZvX2xjayk7CisJfQorfQorCiAvKgogICogQSB0aGluIHdyYXBwZXIgdG8gZW5h YmxlIFN0YW5kYnlNb2RlIGFuZCBkbyBvdGhlciBwcmVwYXJhdG9yeSB3b3JrIGFzCiAgKiBuZWVk ZWQuCkBAIC00MjksOCArNDM0LDEyIEBAIEVuYWJsZVN0YW5kYnlNb2RlKHZvaWQpCiAJICogc3Rh bmRieSBhcyBpdCB3aWxsIGFsd2F5cyBiZSBpbiByZWNvdmVyeSB1bmxlc3MgcHJvbW90ZWQuIFdl IGRpc2FibGUKIAkgKiBzdGFydHVwIHByb2dyZXNzIHRpbWVvdXQgaW4gc3RhbmRieSBtb2RlIHRv IGF2b2lkIGNhbGxpbmcKIAkgKiBzdGFydHVwX3Byb2dyZXNzX3RpbWVvdXRfaGFuZGxlcigpIHVu bmVjZXNzYXJpbHkuCisJICoKKwkgKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGFsc28gYmUgY2FsbGVk IGZyb20gdGhlIHBpcGVsaW5lIHdvcmtlci4KKwkgKiBCdXQgdGltZW91dCBjb3VsZCBvbmx5IGJl IGRzaWFibGVkIGJ5IHRoZSBzdGFydHVwIHByb2Nlc3MuCiAJICovCi0JZGlzYWJsZV9zdGFydHVw X3Byb2dyZXNzX3RpbWVvdXQoKTsKKwlpZiAoIUFtV2FsUGlwZWxpbmUoKSkKKwkJZGlzYWJsZV9z dGFydHVwX3Byb2dyZXNzX3RpbWVvdXQoKTsKIH0KIAogLyoKQEAgLTQ5MCw3ICs0OTksMTAgQEAg SW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndhc1No dXRkb3duX3B0ciwKIAkgKiByZWNvdmVyeSwgaWYgcmVxdWlyZWQuCiAJICovCiAJaWYgKEFyY2hp dmVSZWNvdmVyeVJlcXVlc3RlZCkKKwl7CisJCU93bkxhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJl Y292ZXJ5QXBwbHlEZWxheUxhdGNoKTsKIAkJT3duTGF0Y2goJlhMb2dSZWNvdmVyeUN0bC0+cmVj b3ZlcnlXYWtldXBMYXRjaCk7CisJfQogCiAJLyoKIAkgKiBTZXQgdGhlIFdBTCByZWFkaW5nIHBy b2Nlc3NvciBub3csIGFzIGl0IHdpbGwgYmUgbmVlZGVkIHdoZW4gcmVhZGluZwpAQCAtOTYyLDYg Kzk3NCwxNCBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9sRmlsZSwg Ym9vbCAqd2FzU2h1dGRvd25fcHRyLAogCQltaW5SZWNvdmVyeVBvaW50VExJID0gMDsKIAl9CiAK KwkvKiB1cGRhdGUgc2hhcmVkIHN0YXRlLiAqLworCWlmICh3YWxfcGlwZWxpbmVfZW5hYmxlZCkK Kwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCVhM b2dSZWNvdmVyeUN0bC0+SW5BcmNoaXZlUmVjb3ZlcnkgPSBJbkFyY2hpdmVSZWNvdmVyeTsKKwkJ U3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwl9CisKIAkvKgog CSAqIFN0YXJ0IHJlY292ZXJ5IGFzc3VtaW5nIHRoYXQgdGhlIGZpbmFsIHJlY29yZCBpc24ndCBs b3N0LgogCSAqLwpAQCAtOTczLDYgKzk5MywxMiBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZp bGVEYXRhICpDb250cm9sRmlsZSwgYm9vbCAqd2FzU2h1dGRvd25fcHRyLAogCSpoYXZlVGJsc3Bj TWFwX3B0ciA9IGhhdmVUYmxzcGNNYXA7CiB9CiAKK3ZvaWQgRGlzb3duUmVjb3ZlcnlXYWtldXBM YXRjaCh2b2lkKQoreworCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQpCisJCURpc293bkxh dGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gpOworfQorCiAvKgogICog U2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVjb3Zlcnkgc2lnbmFsIGZpbGVzIGFuZCBpZiBzbywgc2V0 IHN0YXRlIGZvcgogICogcmVjb3ZlcnkuCkBAIC0xNDAyLDYgKzE0MjgsNTUgQEAgcmVhZF90YWJs ZXNwYWNlX21hcChMaXN0ICoqdGFibGVzcGFjZXMpCiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRp YyB2b2lkCitSZXNldFN0YXRlc0lmUGlwZWxpbmVkKHZvaWQpCit7CisJaWYgKHdhbF9waXBlbGlu ZV9lbmFibGVkKQorCXsKKwkJLyoKKwkJICogSW52YWxpZGF0ZSBwdHJzIHBvaW50aW5nIHRoZSBw aXBlbGluZSBzaGFyZWQgbWVzc2FnZSBxdWV1ZS4KKwkJICoKKwkJICogV2UgZG8gdGhpcyBiZWNh dXNlIGluc3RlYWQgb2YgcG9pbnRpbmcgdG8gdGhlIGRlY29kZV9idWZmZXIgKHRoZQorCQkgKiBu b3JtYWwgaS5lLiBwaXBlbGluZS1vZmYpIHJlYWRlciB3b3VsZCBiZSBwb2ludGluZyB0byB0aGUK KwkJICogc2hfbXEgKHJpbmcgYnVmZmVyKSB0byBnZXQgdGhlIG5leHQgZGVjb2RlZCByZWNvcmQu IEFuZCB3ZSBjYW5ub3QKKwkJICogY29udGludWUgbGlrZSB0aGlzIGZvciBmdXR1cmUgeGxvZyBy ZWFkIGkuZS4gRmluaXNoV2FsUmVjb3ZlcnkoKS4KKwkJICoKKwkJICogU2VlIHVuZGVyIGRlc2Vy aWFsaXplX3dhbF9yZWNvcmQoKSBmb3IgbW9yZSBkZXRhaWxzLgorCQkgKi8KKwkJeGxvZ3JlYWRl ci0+cmVjb3JkID0gTlVMTDsKKwkJeGxvZ3JlYWRlci0+ZGVjb2RlX3F1ZXVlX2hlYWQgPSBOVUxM OworCQl4bG9ncmVhZGVyLT5kZWNvZGVfcXVldWVfdGFpbCA9IE5VTEw7CisKKwkJLyoKKwkJICog SW52YWxpZGF0ZSBjb250ZW50cyBvZiBpbnRlcm5hbCBidWZmZXIgYmVmb3JlIHJlYWQgYXR0ZW1w dC4KKwkJICoKKwkJICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSB3ZXJlIHJlYWRpbmcgZnJv bSB0aGUgcGlwZWxpbmVkIHJlYWRlcgorCQkgKiBzbyBmYXIgYW5kIHVwZGF0aW5nIHRoZSBsb2Nh bCBidWZmZXIgcHVibGljIHN0YXRlcyBhY2NvcmRpbmdseS4KKwkJICogU28gYmV0dGVyIHRvIGlu dmFsaWRhdGUgdGhlIGFueSBjYWNoZWQgc3RhdGUgdGhhdCB3YXMgdGhlcmUKKwkJICogYmVmb3Jl IHRoZSBwaXBlbGluZSBzdGFydGVkLCBhbmQgZm9yY2UgYSByZXJlYWQgZm9yIHRoZSBmdXR1cmUK KwkJICogeGxvZyByZWFkcyBpLmUuIHJlZmV0Y2hpbmcgdGhlIGxhc3QgcmVjb3JkIGluIEZpbmlz aFdhbFJlY292ZXJ5KCkuCisJCSAqLworCQl4bG9ncmVhZGVyLT5yZWFkTGVuID0gMDsKKwkJeGxv Z3JlYWRlci0+c2VnLndzX3NlZ25vID0gMDsKKwkJeGxvZ3JlYWRlci0+c2Vnb2ZmID0gMDsKKwor CQkvKgorCQkgKiBVcGRhdGUgdGhlIHN0YXJ0dXAgcHJvYyBsb2NhbCBzdGF0ZSB3aXRoIHRoZSBw aXBlbGluZSBzdGF0ZSwKKwkJICogYmVjYXVzZSBwaXBlbGluZSB3YXMgZG9pbmcgdGhlIG1haW4g ZGVjb2RpbmcgYW5kIGhlbmNlIGhhdmUgdGhlIG1vcmUKKwkJICogdXBkYXRlZCBpbmZvcm1hdGlv bi4KKwkJICovCisJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7 CisJCUluQXJjaGl2ZVJlY292ZXJ5ID0gWExvZ1JlY292ZXJ5Q3RsLT5JbkFyY2hpdmVSZWNvdmVy eTsKKwkJbWlzc2luZ0NvbnRyZWNQdHIgPSBYTG9nUmVjb3ZlcnlDdGwtPm1pc3NpbmdDb250cmVj UHRyOworCQlhYm9ydGVkUmVjUHRyID0gWExvZ1JlY292ZXJ5Q3RsLT5hYm9ydGVkUmVjUHRyOwor CisJCS8qIG9ubHkgdXBkYXRlIGlmIGZvdW5kIGEgbmV3IHRpbWVsaW5lICovCisJCWlmIChyZWNv dmVyeVRhcmdldFRMSSA8IFhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlUYXJnZXRUTEkpCisJCQly ZWNvdmVyeVRhcmdldFRMSSA9IFhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlUYXJnZXRUTEk7CisJ CVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJfQorfQorCiAv KgogICogRmluaXNoIFdBTCByZWNvdmVyeS4KICAqCkBAIC0xNDIxLDYgKzE0OTYsOCBAQCBGaW5p c2hXYWxSZWNvdmVyeSh2b2lkKQogCVRpbWVMaW5lSUQJbGFzdFJlY1RMSTsKIAlYTG9nUmVjUHRy CWVuZE9mTG9nOwogCisJUmVzZXRTdGF0ZXNJZlBpcGVsaW5lZCgpOworCiAJLyoKIAkgKiBLaWxs IFdBTCByZWNlaXZlciwgaWYgaXQncyBzdGlsbCBydW5uaW5nLCBiZWZvcmUgd2UgY29udGludWUg dG8gd3JpdGUKIAkgKiB0aGUgc3RhcnR1cCBjaGVja3BvaW50IGFuZCBhYm9ydGVkLWNvbnRyZWNv cmQgcmVjb3Jkcy4gSXQgd2lsbCB0cnVtcApAQCAtMTQ3OCw2ICsxNTU1LDcgQEAgRmluaXNoV2Fs UmVjb3Zlcnkodm9pZCkKIAkJbGFzdFJlYyA9IFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVk UmVhZFJlY1B0cjsKIAkJbGFzdFJlY1RMSSA9IFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVk VExJOwogCX0KKwogCVhMb2dQcmVmZXRjaGVyQmVnaW5SZWFkKHhsb2dwcmVmZXRjaGVyLCBsYXN0 UmVjKTsKIAkodm9pZCkgUmVhZFJlY29yZCh4bG9ncHJlZmV0Y2hlciwgUEFOSUMsIGZhbHNlLCBs YXN0UmVjVExJKTsKIAllbmRPZkxvZyA9IHhsb2dyZWFkZXItPkVuZFJlY1B0cjsKQEAgLTE2MDAs NiArMTY3OCwxNyBAQCBTaHV0ZG93bldhbFJlY292ZXJ5KHZvaWQpCiAJICogaXQsIGJ1dCBsZXQn cyBkbyBpdCBmb3IgdGhlIHNha2Ugb2YgdGlkaW5lc3MuCiAJICovCiAJaWYgKEFyY2hpdmVSZWNv dmVyeVJlcXVlc3RlZCkKKwl7CisJCURpc293bkxhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292 ZXJ5QXBwbHlEZWxheUxhdGNoKTsKKworCQkvKgorCQkgKiBPbmx5IGRpc293biB0aGUgbGF0Y2gg aWYgd2UgKHN0YXJ0dXAgcHJvY2Vzcykgd2VyZSB0aGUgb3duZXIKKwkJICogaS5lLiBwaXBlbGlu ZSBkaXNhYmxlZC4KKwkJICovCisJCWlmICghd2FsX3BpcGVsaW5lX2VuYWJsZWQpCisJCQlEaXNv d25MYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5yZWNvdmVyeVdha2V1cExhdGNoKTsKKwl9Cit9CiAK IC8qCiAgKiBHZXQgbmV4dCByZWNvcmQgZm9yIHJlZG8uCkBAIC0xNzU4LDYgKzE4NDcsNyBAQCBQ ZXJmb3JtV2FsUmVjb3Zlcnkodm9pZCkKIAkJCVdhbFBpcGVsaW5lUGFyYW1zICpwYXJhbXMgPSBw YWxsb2MwKHNpemVvZihXYWxQaXBlbGluZVBhcmFtcykpOwogCiAJCQlwYXJhbXMtPlJlcGxheVRM SSA9IHJlcGxheVRMSTsKKwkJCVdhbFBpcGVsaW5lX0V4cG9ydFJlY292ZXJ5U3RhdGUocGFyYW1z KTsKIAkJCVdhbFBpcGVsaW5lX1N0YXJ0KHBhcmFtcyk7CiAJCX0KIApAQCAtMTk1Myw3ICsyMDQz LDkgQEAgc3RhdGljIHZvaWQKIEFwcGx5V2FsUmVjb3JkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3Jl YWRlciwgWExvZ1JlY29yZCAqcmVjb3JkLCBUaW1lTGluZUlEICpyZXBsYXlUTEkpCiB7CiAJRXJy b3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisJYm9vbCAJCXdha2V1cFdhbFJjdnIgPSBm YWxzZTsKIAlib29sCQlzd2l0Y2hlZFRMSSA9IGZhbHNlOworCWJvb2wJCXBpcGVsaW5lX2VuYWJs ZWRfc3RhbmRieSA9IGZhbHNlOwogCiAJLyogU2V0dXAgZXJyb3IgdHJhY2ViYWNrIHN1cHBvcnQg Zm9yIGVyZXBvcnQoKSAqLwogCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gcm1fcmVkb19lcnJvcl9j YWxsYmFjazsKQEAgLTIwNTQsNiArMjE0NiwyMiBAQCBBcHBseVdhbFJlY29yZChYTG9nUmVhZGVy U3RhdGUgKnhsb2dyZWFkZXIsIFhMb2dSZWNvcmQgKnJlY29yZCwgVGltZUxpbmVJRCAqcmVwbAog CVhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVkUmVhZFJlY1B0ciA9IHhsb2dyZWFkZXItPlJl YWRSZWNQdHI7CiAJWExvZ1JlY292ZXJ5Q3RsLT5sYXN0UmVwbGF5ZWRFbmRSZWNQdHIgPSB4bG9n cmVhZGVyLT5FbmRSZWNQdHI7CiAJWExvZ1JlY292ZXJ5Q3RsLT5sYXN0UmVwbGF5ZWRUTEkgPSAq cmVwbGF5VExJOworCisJLyoKKwkgKiBBcyB0aGUgcGlwZWxpbmUgKHByb2R1Y2VyKSB3YXMgcnVu bmluZyB3YXkgYWhlYWQgb2YgdGhlIHN0YXJ0dXAgcHJvYworCSAqIChjb25zdW1lciksIHNlZSBp ZiB0aGUgcHJvZHVjZXIgYXNrZWQgdG8gd2FrZXVwIHRoZSB3YWxfcmVjaWV2ZXIgYnkKKwkgKiB1 cGRhdGluZyB0aGUgdmFsdWUgb2YgYFdha2V1cFdhbFJjdnJSZWNQdHJgLgorCSAqLworCWlmIChY TG9nUmVjb3ZlcnlDdGwtPldha2V1cFdhbFJjdnJSZWNQdHIgIT0gSW52YWxpZFhMb2dSZWNQdHIg JiYKKwkJeGxvZ3JlYWRlci0+RW5kUmVjUHRyID49IFhMb2dSZWNvdmVyeUN0bC0+V2FrZXVwV2Fs UmN2clJlY1B0cikKKwl7CisJCUFzc2VydCh3YWxfcGlwZWxpbmVfZW5hYmxlZCk7CisKKwkJWExv Z1JlY292ZXJ5Q3RsLT5XYWtldXBXYWxSY3ZyUmVjUHRyID0gSW52YWxpZFhMb2dSZWNQdHI7CisJ CXdha2V1cFdhbFJjdnIgPSB0cnVlOworCX0KKworCXBpcGVsaW5lX2VuYWJsZWRfc3RhbmRieSA9 IFhMb2dSZWNvdmVyeUN0bC0+c3RhbmJ5RW5hYmxlZDsKIAlTcGluTG9ja1JlbGVhc2UoJlhMb2dS ZWNvdmVyeUN0bC0+aW5mb19sY2spOwogCiAJLyogLS0tLS0tCkBAIC0yMDg1LDggKzIxOTMsMTEg QEAgQXBwbHlXYWxSZWNvcmQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLCBYTG9nUmVjb3Jk ICpyZWNvcmQsIFRpbWVMaW5lSUQgKnJlcGwKIAkgKiBJZiBybV9yZWRvIGNhbGxlZCBYTG9nUmVx dWVzdFdhbFJlY2VpdmVyUmVwbHksIHRoZW4gd2Ugd2FrZSB1cCB0aGUKIAkgKiByZWNlaXZlciBz byB0aGF0IGl0IG5vdGljZXMgdGhlIHVwZGF0ZWQgbGFzdFJlcGxheWVkRW5kUmVjUHRyIGFuZCBz ZW5kcwogCSAqIGEgcmVwbHkgdG8gdGhlIHByaW1hcnkuCisJICoKKwkgKiBBbHNvIHdha2V1cCBp biBjYXNlIHJlcXVlc3RlZCBieSB0aGUgcGlwZWxpbmUgZGVjb2RlciBiZWZvcmUgd2FpdGluZwor CSAqIGZvciBtb3JlIHdhbC4KIAkgKi8KLQlpZiAoZG9SZXF1ZXN0V2FsUmVjZWl2ZXJSZXBseSkK KwlpZiAoZG9SZXF1ZXN0V2FsUmVjZWl2ZXJSZXBseSB8fCB3YWtldXBXYWxSY3ZyKQogCXsKIAkJ ZG9SZXF1ZXN0V2FsUmVjZWl2ZXJSZXBseSA9IGZhbHNlOwogCQlXYWxSY3ZSZXF1ZXN0QXBwbHlS ZXBseSgpOwpAQCAtMjEwNyw2ICsyMjE4LDE2IEBAIEFwcGx5V2FsUmVjb3JkKFhMb2dSZWFkZXJT dGF0ZSAqeGxvZ3JlYWRlciwgWExvZ1JlY29yZCAqcmVjb3JkLCBUaW1lTGluZUlEICpyZXBsCiAJ CS8qIFJlc2V0IHRoZSBwcmVmZXRjaGVyLiAqLwogCQlYTG9nUHJlZmV0Y2hSZWNvbmZpZ3VyZSgp OwogCX0KKworCS8qCisJICogQ29udXNtZXIgc2hvdWxkIGFsc28gZW5hYmxlIHRoZSBzdGFuZGJ5 IGlmIHBpcGxpbmUgaGF2ZS4KKwkgKi8KKwlpZiAocGlwZWxpbmVfZW5hYmxlZF9zdGFuZGJ5KQor CQlFbmFibGVTdGFuZGJ5TW9kZSgpOworCisJU3BpbkxvY2tBY3F1aXJlKCZXYWxQaXBlbGluZVNo bS0+bXV0ZXgpOworCVdhbFBpcGVsaW5lU2htLT5hcHBsaWVkX2xzbiA9IHhsb2dyZWFkZXItPkVu ZFJlY1B0cjsKKwlTcGluTG9ja1JlbGVhc2UoJldhbFBpcGVsaW5lU2htLT5tdXRleCk7CiB9CiAK IC8qCkBAIC0yMjMyLDEyICsyMzUzLDI3IEBAIENoZWNrUmVjb3ZlcnlDb25zaXN0ZW5jeSh2b2lk KQogCiAJQXNzZXJ0KEluQXJjaGl2ZVJlY292ZXJ5KTsKIAotCS8qCi0JICogYXNzdW1lIHRoYXQg d2UgYXJlIGNhbGxlZCBpbiB0aGUgc3RhcnR1cCBwcm9jZXNzLCBhbmQgaGVuY2UgZG9uJ3QgbmVl ZAotCSAqIGEgbG9jayB0byByZWFkIGxhc3RSZXBsYXllZEVuZFJlY1B0cgotCSAqLwotCWxhc3RS ZXBsYXllZEVuZFJlY1B0ciA9IFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRy OwotCWxhc3RSZXBsYXllZFRMSSA9IFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVkVExJOwor CisJaWYgKEFtU3RhcnR1cFByb2Nlc3MoKSkKKwl7CisJCS8qCisJCSAqIGFzc3VtZSB0aGF0IHdl IGFyZSBjYWxsZWQgaW4gdGhlIHN0YXJ0dXAgcHJvY2VzcywgYW5kIGhlbmNlIGRvbid0IG5lZWQK KwkJICogYSBsb2NrIHRvIHJlYWQgbGFzdFJlcGxheWVkRW5kUmVjUHRyCisJCSAqLworCQlsYXN0 UmVwbGF5ZWRFbmRSZWNQdHIgPSBYTG9nUmVjb3ZlcnlDdGwtPmxhc3RSZXBsYXllZEVuZFJlY1B0 cjsKKwkJbGFzdFJlcGxheWVkVExJID0gWExvZ1JlY292ZXJ5Q3RsLT5sYXN0UmVwbGF5ZWRUTEk7 CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIFdlIGNvdWxkIGJlIGluIHRoZSBwaXBlbGluZSB3 b3JrZXIsIHNvIHVwZGF0ZSB0aGUgc2hhcmVkIHN0YXRlcy4KKwkJICovCisJCVNwaW5Mb2NrQWNx dWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCWxhc3RSZXBsYXllZEVuZFJlY1B0 ciA9IFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyOworCQlsYXN0UmVwbGF5 ZWRUTEkgPSBYTG9nUmVjb3ZlcnlDdGwtPmxhc3RSZXBsYXllZFRMSTsKKwkJc3RhbmRieVN0YXRl ID0gWExvZ1JlY292ZXJ5Q3RsLT5zdGFuZGJ5U3RhdGU7CisJCVNwaW5Mb2NrUmVsZWFzZSgmWExv Z1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJfQogCiAJLyoKIAkgKiBIYXZlIHdlIHJlYWNoZWQg dGhlIHBvaW50IHdoZXJlIG91ciBiYXNlIGJhY2t1cCB3YXMgY29tcGxldGVkPwpAQCAtMjQyNCwx MiArMjU2MCwyOCBAQCBzdGF0aWMgdm9pZAogY2hlY2tUaW1lTGluZVN3aXRjaChYTG9nUmVjUHRy IGxzbiwgVGltZUxpbmVJRCBuZXdUTEksIFRpbWVMaW5lSUQgcHJldlRMSSwKIAkJCQkJVGltZUxp bmVJRCByZXBsYXlUTEkpCiB7CisKKwogCS8qIENoZWNrIHRoYXQgdGhlIHJlY29yZCBhZ3JlZXMg b24gd2hhdCB0aGUgY3VycmVudCAob2xkKSB0aW1lbGluZSBpcyAqLwogCWlmIChwcmV2VExJICE9 IHJlcGxheVRMSSkKIAkJZXJlcG9ydChQQU5JQywKIAkJCQkoZXJybXNnKCJ1bmV4cGVjdGVkIHBy ZXZpb3VzIHRpbWVsaW5lIElEICV1IChjdXJyZW50IHRpbWVsaW5lIElEICV1KSBpbiBjaGVja3Bv aW50IHJlY29yZCIsCiAJCQkJCQlwcmV2VExJLCByZXBsYXlUTEkpKSk7CiAKKworCS8qIFBpcGVs aW5lIG1heSBoYXZlIHVwZGF0ZWQgdGhlIGV4cGVjdGVkVExFcyAqLworCWlmICh3YWxfcGlwZWxp bmVfZW5hYmxlZCkKKwl7CisJCVRpbWVMaW5lSUQJdGFyZ2V0VExJOworCisJCVNwaW5Mb2NrQWNx dWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCXRhcmdldFRMSSA9IFhMb2dSZWNv dmVyeUN0bC0+ZXhwZWN0ZWRUTEVzVXBkYXRlVExJOworCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dS ZWNvdmVyeUN0bC0+aW5mb19sY2spOworCisJCWlmICh0YXJnZXRUTEkpCisJCQlleHBlY3RlZFRM RXMgPSByZWFkVGltZUxpbmVIaXN0b3J5KHRhcmdldFRMSSk7CisJfQorCiAJLyoKIAkgKiBUaGUg bmV3IHRpbWVsaW5lIGJldHRlciBiZSBpbiB0aGUgbGlzdCBvZiB0aW1lbGluZXMgd2UgZXhwZWN0 IHRvIHNlZSwKIAkgKiBhY2NvcmRpbmcgdG8gdGhlIHRpbWVsaW5lIGhpc3RvcnkuIEl0IHNob3Vs ZCBhbHNvIG5vdCBkZWNyZWFzZS4KQEAgLTI5NzEsOCArMzEyMywxMyBAQCBnZXRSZWNvdmVyeVN0 b3BSZWFzb24odm9pZCkKIHN0YXRpYyB2b2lkCiByZWNvdmVyeVBhdXNlc0hlcmUoYm9vbCBlbmRP ZlJlY292ZXJ5KQogewotCS8qIERvbid0IHBhdXNlIHVubGVzcyB1c2VycyBjYW4gY29ubmVjdCEg Ki8KLQlpZiAoIUxvY2FsSG90U3RhbmRieUFjdGl2ZSkKKwkvKgorCSAqIERvbid0IHBhdXNlIHVu bGVzcyB1c2VycyBjYW4gY29ubmVjdCEKKwkgKgorCSAqIEFzIHRoaXMgZnVuY3Rpb24gY291bGQg YmUgY2FsbGVkIGZyb20gdGhlIHBpcGVsaW5lIHByb2Nlc3Mgc28gYmV0dGVyCisJICogdG8gcmVs eSBvbiB0aGUgc2hhcmVkIHN0YXRlIHRoZW4gY2hlY2tpbmcgTG9jYWxIb3RTdGFuZGJ5QWN0aXZl LgorCSAqLworCWlmICghSG90U3RhbmRieUFjdGl2ZSgpKQogCQlyZXR1cm47CiAKIAkvKiBEb24n dCBwYXVzZSBhZnRlciBzdGFuZGJ5IHByb21vdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgKi8KQEAg LTMwNzcsNyArMzIzNCw3IEBAIHJlY292ZXJ5QXBwbHlEZWxheShYTG9nUmVhZGVyU3RhdGUgKnJl Y29yZCkKIAogCXdoaWxlICh0cnVlKQogCXsKLQkJUmVzZXRMYXRjaCgmWExvZ1JlY292ZXJ5Q3Rs LT5yZWNvdmVyeVdha2V1cExhdGNoKTsKKwkJUmVzZXRMYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5y ZWNvdmVyeUFwcGx5RGVsYXlMYXRjaCk7CiAKIAkJLyogVGhpcyBtaWdodCBjaGFuZ2UgcmVjb3Zl cnlfbWluX2FwcGx5X2RlbGF5LiAqLwogCQlQcm9jZXNzU3RhcnR1cFByb2NJbnRlcnJ1cHRzKCk7 CkBAIC0zMTAyLDcgKzMyNTksNyBAQCByZWNvdmVyeUFwcGx5RGVsYXkoWExvZ1JlYWRlclN0YXRl ICpyZWNvcmQpCiAKIAkJZWxvZyhERUJVRzIsICJyZWNvdmVyeSBhcHBseSBkZWxheSAlbGQgbWls bGlzZWNvbmRzIiwgbXNlY3MpOwogCi0JCSh2b2lkKSBXYWl0TGF0Y2goJlhMb2dSZWNvdmVyeUN0 bC0+cmVjb3ZlcnlXYWtldXBMYXRjaCwKKwkJKHZvaWQpIFdhaXRMYXRjaCgmWExvZ1JlY292ZXJ5 Q3RsLT5yZWNvdmVyeUFwcGx5RGVsYXlMYXRjaCwKIAkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9U SU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKIAkJCQkJCSBtc2VjcywKIAkJCQkJCSBXQUlU X0VWRU5UX1JFQ09WRVJZX0FQUExZX0RFTEFZKTsKQEAgLTMyMTcsNiArMzM3NCwxNyBAQCBSZWFk UmVjb3JkKFhMb2dQcmVmZXRjaGVyICp4bG9ncHJlZmV0Y2hlciwgaW50IGVtb2RlLAogCQkJewog CQkJCWFib3J0ZWRSZWNQdHIgPSB4bG9ncmVhZGVyLT5hYm9ydGVkUmVjUHRyOwogCQkJCW1pc3Np bmdDb250cmVjUHRyID0geGxvZ3JlYWRlci0+bWlzc2luZ0NvbnRyZWNQdHI7CisKKwkJCQkvKgor CQkJCSAqIEFsc28gdXBkYXRlIHRoZSBzaGFyZWQgc3RhdGUgaWYgbmVjZXNzYXJ5CisJCQkJICov CisJCQkJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQorCQkJCXsKKwkJCQkJU3BpbkxvY2tBY3F1 aXJlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKKwkJCQkJWExvZ1JlY292ZXJ5Q3RsLT5h Ym9ydGVkUmVjUHRyID0gYWJvcnRlZFJlY1B0cjsKKwkJCQkJWExvZ1JlY292ZXJ5Q3RsLT5taXNz aW5nQ29udHJlY1B0ciA9IG1pc3NpbmdDb250cmVjUHRyOworCQkJCQlTcGluTG9ja1JlbGVhc2Uo JlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJCX0KIAkJCX0KIAogCQkJaWYgKHJlYWRG aWxlID49IDApCkBAIC0zMjg0LDkgKzM0NTIsMzEgQEAgUmVhZFJlY29yZChYTG9nUHJlZmV0Y2hl ciAqeGxvZ3ByZWZldGNoZXIsIGludCBlbW9kZSwKIAkJCWlmICghSW5BcmNoaXZlUmVjb3Zlcnkg JiYgQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkICYmCiAJCQkJIWZldGNoaW5nX2NrcHQpCiAJCQl7 CisJCQkJLyoKKwkJCQkgKiBXYWl0IGZvciB0aGUgc3RhcnR1cCBwcm9jZXNzIHRvIGFwcGx5IHRo ZSBsYXN0IHNlbnQgcmVjb3JkCisJCQkJICogYnkgdGhlIHBpcGVsaW5lLCBvdGhlcndpc2Ugd2Ug d2lsbCBmYWlsIHRoZSBjb25zaXN0ZW5jeQorCQkJCSAqIGNoZWNrIGFzIGFsbCB0aGUgcmVjb3Jk cyBkZWNvZGVkIGJ5IHRoZSBwaXBlbGluZSBoYXZlIG5vdAorCQkJCSAqIGFycml2ZWQvY29uc3Vt ZWQgYnkgdGhlIGNvbnN1bWVyIChzdGF0dXAgcHJvYykgeWV0LgorCQkJCSAqLworCQkJCWlmICh3 YWxfcGlwZWxpbmVfZW5hYmxlZCAmJiBBbVdhbFBpcGVsaW5lKCkpCisJCQkJCVdhbFBpcGVsaW5l X1dhaXRGb3JDb25zdW1lckNhdGNodXAoKTsKKwogCQkJCWVyZXBvcnQoREVCVUcxLAogCQkJCQkJ KGVycm1zZ19pbnRlcm5hbCgicmVhY2hlZCBlbmQgb2YgV0FMIGluIHBnX3dhbCwgZW50ZXJpbmcg YXJjaGl2ZSByZWNvdmVyeSIpKSk7CiAJCQkJSW5BcmNoaXZlUmVjb3ZlcnkgPSB0cnVlOworCisJ CQkJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQorCQkJCXsKKwkJCQkJLyogYWxzbyB1cGRhdGUg dGhlIHNoYXJlZCBzdGF0ZSAqLworCQkJCQlTcGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVyeUN0 bC0+aW5mb19sY2spOworCQkJCQlYTG9nUmVjb3ZlcnlDdGwtPkluQXJjaGl2ZVJlY292ZXJ5ID0g SW5BcmNoaXZlUmVjb3Zlcnk7CisKKwkJCQkJLyogdXBkYXRlIHN0YXJ0dXAgcHJvYyAoY29uc3Vt ZXIpIGFib3V0IHRoZSBzdGFuZGJ5bW9kZSAqLworCQkJCQlpZiAoU3RhbmRieU1vZGVSZXF1ZXN0 ZWQpCisJCQkJCQlYTG9nUmVjb3ZlcnlDdGwtPnN0YW5ieUVuYWJsZWQgPSB0cnVlOworCQkJCQlT cGluTG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJCX0KKwogCQkJ CWlmIChTdGFuZGJ5TW9kZVJlcXVlc3RlZCkKIAkJCQkJRW5hYmxlU3RhbmRieU1vZGUoKTsKIApA QCAtMzc4Myw3ICszOTczLDggQEAgV2FpdEZvcldBTFRvQmVjb21lQXZhaWxhYmxlKFhMb2dSZWNQ dHIgUmVjUHRyLCBib29sIHJhbmRBY2Nlc3MsCiAJCQkJCQkJIExTTl9GT1JNQVRfQVJHUyhSZWNQ dHIpKTsKIAogCQkJCQkJLyogRG8gYmFja2dyb3VuZCB0YXNrcyB0aGF0IG1pZ2h0IGJlbmVmaXQg dXMgbGF0ZXIuICovCi0JCQkJCQlLbm93bkFzc2lnbmVkVHJhbnNhY3Rpb25JZHNJZGxlTWFpbnRl bmFuY2UoKTsKKwkJCQkJCWlmIChBbVN0YXJ0dXBQcm9jZXNzKCkpCisJCQkJCQkJS25vd25Bc3Np Z25lZFRyYW5zYWN0aW9uSWRzSWRsZU1haW50ZW5hbmNlKCk7CiAKIAkJCQkJCSh2b2lkKSBXYWl0 TGF0Y2goJlhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlXYWtldXBMYXRjaCwKIAkJCQkJCQkJCQkg V0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8CkBAIC0zNzk1LDYgKzM5ODYsOCBAQCBXYWl0Rm9y V0FMVG9CZWNvbWVBdmFpbGFibGUoWExvZ1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywK IAogCQkJCQkJLyogSGFuZGxlIGludGVycnVwdCBzaWduYWxzIG9mIHN0YXJ0dXAgcHJvY2VzcyAq LwogCQkJCQkJUHJvY2Vzc1N0YXJ0dXBQcm9jSW50ZXJydXB0cygpOworCQkJCQkJaWYgKHdhbF9w aXBlbGluZV9lbmFibGVkKQorCQkJCQkJCVByb2Nlc3NQaXBlbGluZUJnd0ludGVycnVwdHMoKTsK IAkJCQkJfQogCQkJCQlsYXN0X2ZhaWxfdGltZSA9IG5vdzsKIAkJCQkJY3VycmVudFNvdXJjZSA9 IFhMT0dfRlJPTV9BUkNISVZFOwpAQCAtMzgyMCw2ICs0MDEzLDE1IEBAIFdhaXRGb3JXQUxUb0Jl Y29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0ciwgYm9vbCByYW5kQWNjZXNzLAogCQkJCSB4 bG9nU291cmNlTmFtZXNbb2xkU291cmNlXSwgeGxvZ1NvdXJjZU5hbWVzW2N1cnJlbnRTb3VyY2Vd LAogCQkJCSBsYXN0U291cmNlRmFpbGVkID8gImZhaWx1cmUiIDogInN1Y2Nlc3MiKTsKIAorCQlp ZiAod2FsX3BpcGVsaW5lX2VuYWJsZWQpCisJCXsKKwkJCS8qIGFsc28gdXBkYXRlIHRoZSBzaGFy ZWQgc3RhdGUgKi8KKwkJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xj ayk7CisJCQlYTG9nUmVjb3ZlcnlDdGwtPmN1cnJlbnRTb3VyY2UgPSBjdXJyZW50U291cmNlOwor CQkJcGVuZGluZ1dhbFJjdlJlc3RhcnQgPSBYTG9nUmVjb3ZlcnlDdGwtPnBlbmRpbmdXYWxSY3ZS ZXN0YXJ0OworCQkJU3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsK KwkJfQorCiAJCS8qCiAJCSAqIFdlJ3ZlIG5vdyBoYW5kbGVkIHBvc3NpYmxlIGZhaWx1cmUuIFRy eSB0byByZWFkIGZyb20gdGhlIGNob3NlbgogCQkgKiBzb3VyY2UuCkBAIC0zODk0LDYgKzQwOTYs MTQgQEAgV2FpdEZvcldBTFRvQmVjb21lQXZhaWxhYmxlKFhMb2dSZWNQdHIgUmVjUHRyLCBib29s IHJhbmRBY2Nlc3MsCiAJCQkJCX0KIAkJCQkJcGVuZGluZ1dhbFJjdlJlc3RhcnQgPSBmYWxzZTsK IAorCQkJCQlpZiAod2FsX3BpcGVsaW5lX2VuYWJsZWQpCisJCQkJCXsKKwkJCQkJCS8qIGFsc28g dXBkYXRlIHRoZSBzaGFyZWQgc3RhdGUgKi8KKwkJCQkJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1Jl Y292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCQkJCQlYTG9nUmVjb3ZlcnlDdGwtPnBlbmRpbmdXYWxS Y3ZSZXN0YXJ0ID0gZmFsc2U7CisJCQkJCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVyeUN0 bC0+aW5mb19sY2spOworCQkJCQl9CisKIAkJCQkJLyoKIAkJCQkJICogTGF1bmNoIHdhbHJlY2Vp dmVyIGlmIG5lZWRlZC4KIAkJCQkJICoKQEAgLTM5NzEsNiArNDE4MSwxNSBAQCBXYWl0Rm9yV0FM VG9CZWNvbWVBdmFpbGFibGUoWExvZ1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJ CQkJCQlpZiAobGF0ZXN0Q2h1bmtTdGFydCA8PSBSZWNQdHIpCiAJCQkJCQkJewogCQkJCQkJCQlY TG9nUmVjZWlwdFRpbWUgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisKKwkJCQkJCQkJaWYgKHdh bF9waXBlbGluZV9lbmFibGVkKQorCQkJCQkJCQl7CisJCQkJCQkJCQkvKiBhbHNvIHVwZGF0ZSB0 aGUgc2hhcmVkIHN0YXRlICovCisJCQkJCQkJCQlTcGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVy eUN0bC0+aW5mb19sY2spOworCQkJCQkJCQkJWExvZ1JlY292ZXJ5Q3RsLT5YTG9nUmVjZWlwdFRp bWUgPSBYTG9nUmVjZWlwdFRpbWU7CisJCQkJCQkJCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNv dmVyeUN0bC0+aW5mb19sY2spOworCQkJCQkJCQl9CisKIAkJCQkJCQkJU2V0Q3VycmVudENodW5r U3RhcnRUaW1lKFhMb2dSZWNlaXB0VGltZSk7CiAJCQkJCQkJfQogCQkJCQkJfQpAQCAtMzk5OSw3 ICs0MjE4LDEyIEBAIFdhaXRGb3JXQUxUb0JlY29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0 ciwgYm9vbCByYW5kQWNjZXNzLAogCQkJCQkJaWYgKHJlYWRGaWxlIDwgMCkKIAkJCQkJCXsKIAkJ CQkJCQlpZiAoIWV4cGVjdGVkVExFcykKKwkJCQkJCQl7CiAJCQkJCQkJCWV4cGVjdGVkVExFcyA9 IHJlYWRUaW1lTGluZUhpc3RvcnkocmVjb3ZlcnlUYXJnZXRUTEkpOworCQkJCQkJCQlQaXBlbGlu ZUNvbnN1bWVyRXhwZWN0ZWRUTEVzVXBkYXRlVExJKHJlY292ZXJ5VGFyZ2V0VExJKTsKKwkJCQkJ CQl9CisKKwogCQkJCQkJCXJlYWRGaWxlID0gWExvZ0ZpbGVSZWFkKHJlYWRTZWdObywgcmVjZWl2 ZVRMSSwKIAkJCQkJCQkJCQkJCQlYTE9HX0ZST01fU1RSRUFNLCBmYWxzZSk7CiAJCQkJCQkJQXNz ZXJ0KHJlYWRGaWxlID49IDApOwpAQCAtNDAwOSw2ICs0MjMzLDEzIEBAIFdhaXRGb3JXQUxUb0Jl Y29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0ciwgYm9vbCByYW5kQWNjZXNzLAogCQkJCQkJ CS8qIGp1c3QgbWFrZSBzdXJlIHNvdXJjZSBpbmZvIGlzIGNvcnJlY3QuLi4gKi8KIAkJCQkJCQly ZWFkU291cmNlID0gWExPR19GUk9NX1NUUkVBTTsKIAkJCQkJCQlYTG9nUmVjZWlwdFNvdXJjZSA9 IFhMT0dfRlJPTV9TVFJFQU07CisJCQkJCQkJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQorCQkJ CQkJCXsKKwkJCQkJCQkJLyogYWxzbyB1cGRhdGUgdGhlIHNoYXJlZCBzdGF0ZSAqLworCQkJCQkJ CQlTcGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJCQkJCQlY TG9nUmVjb3ZlcnlDdGwtPlhMb2dSZWNlaXB0U291cmNlID0gWExvZ1JlY2VpcHRTb3VyY2U7CisJ CQkJCQkJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCQkJ CQkJfQogCQkJCQkJCXJldHVybiBYTFJFQURfU1VDQ0VTUzsKIAkJCQkJCX0KIAkJCQkJCWJyZWFr OwpAQCAtNDA0NiwxNSArNDI3Nyw0MCBAQCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFpbGFibGUoWExv Z1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJCQkJICovCiAJCQkJCWlmICghc3Ry ZWFtaW5nX3JlcGx5X3NlbnQpCiAJCQkJCXsKLQkJCQkJCVdhbFJjdlJlcXVlc3RBcHBseVJlcGx5 KCk7Ci0JCQkJCQlzdHJlYW1pbmdfcmVwbHlfc2VudCA9IHRydWU7CisJCQkJCQlpZiAod2FsX3Bp cGVsaW5lX2VuYWJsZWQgJiYgQW1XYWxQaXBlbGluZSgpKQorCQkJCQkJeworCQkJCQkJCS8qCisJ CQkJCQkJICogSW4gY2FzZSBvZiBwaXBlbGluZSBlbmFibGVkLCB3ZSBjYW5ub3QganVzdCBjYWxs CisJCQkJCQkJICogV2FsUmN2UmVxdWVzdEFwcGx5UmVwbHkoKSBkaXJlY3RseSBhcyB0aGUKKwkJ CQkJCQkgKiBjb25zdW1lciAoc3RhcnR1cCBwcm9jKSBydW5uaW5nIGJlaGluZWQgdGhlCisJCQkJ CQkJICogcGlwZWxpbmUgcHJvZHVjZXIgYW5kIGhhdmVuJ3QgYWN0dWFsbHkgcmVwbGF5ZWQKKwkJ CQkJCQkgKiBhbGwgdGhlIHdhbCByZWNlaXZlZCBmcm9tIHRoZSB3YWxfcmVjZWl2ZXIgeWV0Lgor CQkJCQkJCSAqCisJCQkJCQkJICogU28gaW4gb3JkZXIgdG8gbWFrZSB3YWtldXAgY29uc2lzdGVu dCwgbm90ZSB0aGUKKwkJCQkJCQkgKiBsc24gYW5kIGNvbnN1bWVyIHdpbGwgb25seSB3YWtldXAg d2FscmN2ciB3aGVuCisJCQkJCQkJICogdGhlIGxzbiBpcyByZXBsYXllZC4KKwkJCQkJCQkgKi8K KwkJCQkJCQlTcGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJ CQkJCVhMb2dSZWNvdmVyeUN0bC0+V2FrZXVwV2FsUmN2clJlY1B0ciA9IGZsdXNoZWRVcHRvOwor CQkJCQkJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCQkJ CQkJc3RyZWFtaW5nX3JlcGx5X3NlbnQgPSB0cnVlOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJ CQkJeworCQkJCQkJCVdhbFJjdlJlcXVlc3RBcHBseVJlcGx5KCk7CisJCQkJCQkJc3RyZWFtaW5n X3JlcGx5X3NlbnQgPSB0cnVlOworCQkJCQkJfQogCQkJCQl9CiAKIAkJCQkJLyogRG8gYW55IGJh Y2tncm91bmQgdGFza3MgdGhhdCBtaWdodCBiZW5lZml0IHVzIGxhdGVyLiAqLwotCQkJCQlLbm93 bkFzc2lnbmVkVHJhbnNhY3Rpb25JZHNJZGxlTWFpbnRlbmFuY2UoKTsKKwkJCQkJaWYgKEFtU3Rh cnR1cFByb2Nlc3MoKSkKKwkJCQkJCUtub3duQXNzaWduZWRUcmFuc2FjdGlvbklkc0lkbGVNYWlu dGVuYW5jZSgpOwogCiAJCQkJCS8qIFVwZGF0ZSBwZ19zdGF0X3JlY292ZXJ5X3ByZWZldGNoIGJl Zm9yZSBzbGVlcGluZy4gKi8KLQkJCQkJWExvZ1ByZWZldGNoZXJDb21wdXRlU3RhdHMoeGxvZ3By ZWZldGNoZXIpOworCQkJCQlpZiAoQW1XYWxQaXBlbGluZSgpKQorCQkJCQkJWExvZ1ByZWZldGNo ZXJDb21wdXRlU3RhdHMoeGxvZ3ByZWZldGNoZXJfcGlwZWxpbmVkKTsKKwkJCQkJZWxzZQorCQkJ CQkJWExvZ1ByZWZldGNoZXJDb21wdXRlU3RhdHMoeGxvZ3ByZWZldGNoZXIpOwogCiAJCQkJCS8q CiAJCQkJCSAqIFdhaXQgZm9yIG1vcmUgV0FMIHRvIGFycml2ZSwgd2hlbiB3ZSB3aWxsIGJlIHdv a2VuCkBAIC00MDg1LDYgKzQzNDEsOCBAQCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFpbGFibGUoWExv Z1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJICogcHJvY2Vzcy4KIAkJICovCiAJ CVByb2Nlc3NTdGFydHVwUHJvY0ludGVycnVwdHMoKTsKKwkJaWYgKHdhbF9waXBlbGluZV9lbmFi bGVkKQorCQkJUHJvY2Vzc1BpcGVsaW5lQmd3SW50ZXJydXB0cygpOwogCX0KIAogCXJldHVybiBY TFJFQURfRkFJTDsJCQkvKiBub3QgcmVhY2hlZCAqLwpAQCAtNDI1MCw2ICs0NTA4LDE4IEBAIHJl c2NhbkxhdGVzdFRpbWVMaW5lKFRpbWVMaW5lSUQgcmVwbGF5VExJLCBYTG9nUmVjUHRyIHJlcGxh eUxTTikKIAlsaXN0X2ZyZWVfZGVlcChleHBlY3RlZFRMRXMpOwogCWV4cGVjdGVkVExFcyA9IG5l d0V4cGVjdGVkVExFczsKIAorCS8qIFVwZGF0ZSBzaGFyZWQgc3RhdGUgKi8KKwlpZiAod2FsX3Bp cGVsaW5lX2VuYWJsZWQpCisJeworCQlQaXBlbGluZUNvbnN1bWVyRXhwZWN0ZWRUTEVzVXBkYXRl VExJKG5ld3RhcmdldCk7CisKKwkJLyogWFhYIE1heSBiZSB3ZSBjYW4gY29tYmluZSB0aGUgc3Bp biBsb2NrcyB3aXRoIGFib3V0IGNhbGwuICovCisJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292 ZXJ5Q3RsLT5pbmZvX2xjayk7CisJCVhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlUYXJnZXRUTEkg PSByZWNvdmVyeVRhcmdldFRMSTsKKwkJU3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwt PmluZm9fbGNrKTsKKwl9CisKKwogCS8qCiAJICogQXMgaW4gU3RhcnR1cFhMT0coKSwgdHJ5IHRv IGVuc3VyZSB3ZSBoYXZlIGFsbCB0aGUgaGlzdG9yeSBmaWxlcwogCSAqIGJldHdlZW4gdGhlIG9s ZCB0YXJnZXQgYW5kIG5ldyB0YXJnZXQgaW4gcGdfd2FsLgpAQCAtNDMzOCw2ICs0NjA4LDE1IEBA IFhMb2dGaWxlUmVhZChYTG9nU2VnTm8gc2Vnbm8sIFRpbWVMaW5lSUQgdGxpLAogCQlpZiAoc291 cmNlICE9IFhMT0dfRlJPTV9TVFJFQU0pCiAJCQlYTG9nUmVjZWlwdFRpbWUgPSBHZXRDdXJyZW50 VGltZXN0YW1wKCk7CiAKKwkJaWYgKHdhbF9waXBlbGluZV9lbmFibGVkKQorCQl7CisJCQkvKiBh bHNvIHVwZGF0ZSB0aGUgc2hhcmVkIHN0YXRlICovCisJCQlTcGluTG9ja0FjcXVpcmUoJlhMb2dS ZWNvdmVyeUN0bC0+aW5mb19sY2spOworCQkJWExvZ1JlY292ZXJ5Q3RsLT5YTG9nUmVjZWlwdFRp bWUgPSBYTG9nUmVjZWlwdFRpbWU7CisJCQlYTG9nUmVjb3ZlcnlDdGwtPlhMb2dSZWNlaXB0U291 cmNlID0gWExvZ1JlY2VpcHRTb3VyY2U7CisJCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVy eUN0bC0+aW5mb19sY2spOworCQl9CisKIAkJcmV0dXJuIGZkOwogCX0KIAlpZiAoZXJybm8gIT0g RU5PRU5UIHx8ICFub3Rmb3VuZE9rKSAvKiB1bmV4cGVjdGVkIGZhaWx1cmU/ICovCkBAIC00NDIy LDcgKzQ3MDEsMTAgQEAgWExvZ0ZpbGVSZWFkQW55VExJKFhMb2dTZWdObyBzZWdubywgWExvZ1Nv dXJjZSBzb3VyY2UpCiAJCQl7CiAJCQkJZWxvZyhERUJVRzEsICJnb3QgV0FMIHNlZ21lbnQgZnJv bSBhcmNoaXZlIik7CiAJCQkJaWYgKCFleHBlY3RlZFRMRXMpCisJCQkJewogCQkJCQlleHBlY3Rl ZFRMRXMgPSB0bGVzOworCQkJCQlQaXBlbGluZUNvbnN1bWVyRXhwZWN0ZWRUTEVzVXBkYXRlVExJ KHJlY292ZXJ5VGFyZ2V0VExJKTsKKwkJCQl9CiAJCQkJcmV0dXJuIGZkOwogCQkJfQogCQl9CkBA IC00NDMzLDcgKzQ3MTUsMTAgQEAgWExvZ0ZpbGVSZWFkQW55VExJKFhMb2dTZWdObyBzZWdubywg WExvZ1NvdXJjZSBzb3VyY2UpCiAJCQlpZiAoZmQgIT0gLTEpCiAJCQl7CiAJCQkJaWYgKCFleHBl Y3RlZFRMRXMpCisJCQkJewogCQkJCQlleHBlY3RlZFRMRXMgPSB0bGVzOworCQkJCQlQaXBlbGlu ZUNvbnN1bWVyRXhwZWN0ZWRUTEVzVXBkYXRlVExJKHJlY292ZXJ5VGFyZ2V0VExJKTsKKwkJCQl9 CiAJCQkJcmV0dXJuIGZkOwogCQkJfQogCQl9CkBAIC00NDU1LDE2ICs0NzQwLDUyIEBAIFhMb2dG aWxlUmVhZEFueVRMSShYTG9nU2VnTm8gc2Vnbm8sIFhMb2dTb3VyY2Ugc291cmNlKQogdm9pZAog U3RhcnR1cFJlcXVlc3RXYWxSZWNlaXZlclJlc3RhcnQodm9pZCkKIHsKKworCS8qCisJICogY3Vy cmVudFNvdXJjZSBpcyBhbHNvIGRlZmluZWQgYXMgcGlwZWxpbmUgc2hhcmVkIHN0YXRlIHZhcmlh YmxlLgorCSAqIFVwZGF0ZSB0aGUgc3RhdGUgYmVmb3JlIHByb2NlZGRpbmcuCisJICovCisJaWYg KHdhbF9waXBlbGluZV9lbmFibGVkKQorCXsKKwkJU3BpbkxvY2tBY3F1aXJlKCZYTG9nUmVjb3Zl cnlDdGwtPmluZm9fbGNrKTsKKwkJY3VycmVudFNvdXJjZSA9IFhMb2dSZWNvdmVyeUN0bC0+Y3Vy cmVudFNvdXJjZTsKKwkJU3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNr KTsKKwl9CisKIAlpZiAoY3VycmVudFNvdXJjZSA9PSBYTE9HX0ZST01fU1RSRUFNICYmIFdhbFJj dlJ1bm5pbmcoKSkKIAl7CiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJtc2coIldBTCByZWNlaXZl ciBwcm9jZXNzIHNodXRkb3duIHJlcXVlc3RlZCIpKSk7CiAKIAkJcGVuZGluZ1dhbFJjdlJlc3Rh cnQgPSB0cnVlOworCisJCS8qCisJCSAqIHBlbmRpbmdXYWxSY3ZSZXN0YXJ0IGlzIGFsc28gZGVm aW5lZCBhcyBwaXBlbGluZSBzaGFyZWQgc3RhdGUgdmFyaWFibGUuCisJCSAqIFVwZGF0ZSB0aGUg c3RhdGUgYmVmb3JlIHByb2NlZGRpbmcuCisJCSAqLworCQlpZiAod2FsX3BpcGVsaW5lX2VuYWJs ZWQpCisJCXsKKwkJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7 CisJCQlYTG9nUmVjb3ZlcnlDdGwtPnBlbmRpbmdXYWxSY3ZSZXN0YXJ0ID0gcGVuZGluZ1dhbFJj dlJlc3RhcnQ7CisJCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2sp OworCQl9CiAJfQogfQogCiAKKy8qCisgKiBzdGFuZGJ5U3RhdGUgaXMgYWxzbyBkZWZpbmVkIGFz IGEgc2hhcmVkIHN0YXRlLiBQaXBlbGluZSB3b3JrZXIgY2FuIGFsc28KKyAqIHVwZGF0ZSBpdHMg dmFsdWUsIHNvIGFsd2F5cyBjb25maXJtIHRoZSBzaGFyZWQgc3RhdGUgYmVmb3JlIHByb2NlZGRp bmcuCisgKi8KK3ZvaWQKK1NldFNoYXJlZEhvdFN0YW5kYnlTdGF0ZSh2b2lkKQoreworCVNwaW5M b2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJWExvZ1JlY292ZXJ5Q3Rs LT5zdGFuZGJ5U3RhdGUgPSBzdGFuZGJ5U3RhdGU7CisJU3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVj b3ZlcnlDdGwtPmluZm9fbGNrKTsKK30KKworCiAvKgogICogSGFzIGEgc3RhbmRieSBwcm9tb3Rp b24gYWxyZWFkeSBiZWVuIHRyaWdnZXJlZD8KICAqCkBAIC00NTE2LDExICs0ODM3LDE4IEBAIENo ZWNrRm9yU3RhbmRieVRyaWdnZXIodm9pZCkKIAlpZiAoTG9jYWxQcm9tb3RlSXNUcmlnZ2VyZWQp CiAJCXJldHVybiB0cnVlOwogCi0JaWYgKElzUHJvbW90ZVNpZ25hbGVkKCkgJiYgQ2hlY2tQcm9t b3RlU2lnbmFsKCkpCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgc3RhcnR1cCBwcm9jZXNzIHdhcyBz aWduYWxlZCBmb3IgcHJvbW90aW9uLiBJbiBjYXNlIHdlIGFyZQorCSAqIGNhbGxpbmcgdGhpcyBm dW5jdGlvbiBmcm9tIHRoZSBwaXBlbGluZSwgd2UgbmVlZCB0byBjaGVjayB0aGUgcHJvbW90aW9u CisJICogc2lnbmFscyBmb3IgdGhlIHBpcGVsaW5lIHdvcmtlciBpbnN0ZWFkLgorCSAqLworCWlm ICgoSXNQcm9tb3RlU2lnbmFsZWRQaXBlbGluZSgpIHx8IElzUHJvbW90ZVNpZ25hbGVkKCkpICYm CisJCUNoZWNrUHJvbW90ZVNpZ25hbCgpKQogCXsKIAkJZXJlcG9ydChMT0csIChlcnJtc2coInJl Y2VpdmVkIHByb21vdGUgcmVxdWVzdCIpKSk7CiAJCVJlbW92ZVByb21vdGVTaWduYWxGaWxlcygp OwogCQlSZXNldFByb21vdGVTaWduYWxlZCgpOworCQlSZXNldFByb21vdGVTaWduYWxlZFBpcGVs aW5lKCk7CiAJCVNldFByb21vdGVJc1RyaWdnZXJlZCgpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBA IC00NTU5LDYgKzQ4ODcsNyBAQCB2b2lkCiBXYWtldXBSZWNvdmVyeSh2b2lkKQogewogCVNldExh dGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gpOworCVNldExhdGNoKCZY TG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5QXBwbHlEZWxheUxhdGNoKTsKIH0KIAogLyoKQEAgLTQ3 MjgsNiArNTA1NywxNyBAQCBHZXRYTG9nUmVjZWlwdFRpbWUoVGltZXN0YW1wVHogKnJ0aW1lLCBi b29sICpmcm9tU3RyZWFtKQogCSAqLwogCUFzc2VydChJblJlY292ZXJ5KTsKIAorCS8qCisJICog SWYgcGlwZWxpbmUgZW5hYmxlZCwgZ2V0IHRoZSB1cGRhdGVkIHN0YXRlLgorCSAqLworCWlmICh3 YWxfcGlwZWxpbmVfZW5hYmxlZCkKKwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5 Q3RsLT5pbmZvX2xjayk7CisJCVhMb2dSZWNlaXB0VGltZSA9IFhMb2dSZWNvdmVyeUN0bC0+WExv Z1JlY2VpcHRUaW1lOworCQlYTG9nUmVjZWlwdFNvdXJjZSA9IFhMb2dSZWNvdmVyeUN0bC0+WExv Z1JlY2VpcHRTb3VyY2U7CisJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZv X2xjayk7CisJfQorCiAJKnJ0aW1lID0gWExvZ1JlY2VpcHRUaW1lOwogCSpmcm9tU3RyZWFtID0g KFhMb2dSZWNlaXB0U291cmNlID09IFhMT0dfRlJPTV9TVFJFQU0pOwogfQpAQCAtNDgxMyw2ICs1 MTUzLDExNCBAQCBSZWNvdmVyeVJlcXVpcmVzSW50UGFyYW1ldGVyKGNvbnN0IGNoYXIgKnBhcmFt X25hbWUsIGludCBjdXJyVmFsdWUsIGludCBtaW5WYWx1ZQogCX0KIH0KIAorLyoKKyAqIENhbGxl ZCBieSB0aGUgc3RhcnR1cCBwcm9jZXNzIGJlZm9yZSBsYXVuY2hpbmcgdGhlIHBpcGVsaW5lIHdv cmtlci4KKyAqIEV4cG9ydHMgcmVjb3Zlcnkgc3RhdGUgdmFyaWFibGVzIGludG8gV2FsUGlwZWxp bmVQYXJhbXMgc28gdGhlCisgKiBwcm9kdWNlciBiYWNrZ3JvdW5kIHdvcmtlciBjYW4gaW5pdGlh bGl6ZSBpdHNlbGYgd2l0aCB0aGUgc2FtZQorICogZW52aXJvbm1lbnQuCisgKi8KK3N0YXRpYyB2 b2lkCitXYWxQaXBlbGluZV9FeHBvcnRSZWNvdmVyeVN0YXRlKFdhbFBpcGVsaW5lUGFyYW1zICpw YXJhbXMpCit7CisJLyoKKwkgKiBJbiBvcmRlciB0byBzdGFydCBkZWNvZGluZyB0aHJvdWdoIHRo ZSBwaXBlbGluZSwKKwkgKiB0aGVzZSB2YXJpYWJsZXMgc2hvdWxkIGJlIHNhdmVkIGFuZCB0aGVu IHJlc3RvcmVkIGxhdGVyLgorCSAqLworCXBhcmFtcy0+TmV4dFJlY1B0ciA9IHhsb2dyZWFkZXIt Pk5leHRSZWNQdHI7CisJcGFyYW1zLT5yZWNvdmVyeVRhcmdldFRMSSA9IHJlY292ZXJ5VGFyZ2V0 VExJOworCXBhcmFtcy0+U3RhbmRieU1vZGVSZXF1ZXN0ZWQgPSBTdGFuZGJ5TW9kZVJlcXVlc3Rl ZDsKKwlwYXJhbXMtPlN0YW5kYnlNb2RlID0gU3RhbmRieU1vZGU7CisJcGFyYW1zLT5BcmNoaXZl UmVjb3ZlcnlSZXF1ZXN0ZWQgPSBBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQ7CisJcGFyYW1zLT5J bkFyY2hpdmVSZWNvdmVyeSA9IEluQXJjaGl2ZVJlY292ZXJ5OworCXBhcmFtcy0+bWluUmVjb3Zl cnlQb2ludFRMSSA9IG1pblJlY292ZXJ5UG9pbnRUTEk7CisJcGFyYW1zLT5taW5SZWNvdmVyeVBv aW50ID0gbWluUmVjb3ZlcnlQb2ludDsKKwlwYXJhbXMtPkluUmVkbyA9IEluUmVkbzsKKwlwYXJh bXMtPmN1cnJlbnRTb3VyY2UgPSBjdXJyZW50U291cmNlOworCXBhcmFtcy0+bGFzdFNvdXJjZUZh aWxlZCA9IGxhc3RTb3VyY2VGYWlsZWQ7CisJcGFyYW1zLT5wZW5kaW5nV2FsUmN2UmVzdGFydCA9 IHBlbmRpbmdXYWxSY3ZSZXN0YXJ0OworCXBhcmFtcy0+UmVkb1N0YXJ0VExJID0gUmVkb1N0YXJ0 VExJOworCXBhcmFtcy0+Q2hlY2tQb2ludExvYyA9IENoZWNrUG9pbnRMb2M7CisJcGFyYW1zLT5D aGVja1BvaW50VExJID0gQ2hlY2tQb2ludFRMSTsKKwlwYXJhbXMtPlJlZG9TdGFydExTTiA9IFJl ZG9TdGFydExTTjsKKwlwYXJhbXMtPnN0YW5kYnlTdGF0ZSA9IHN0YW5kYnlTdGF0ZTsKKwlwYXJh bXMtPmZsdXNoZWRVcHRvID0gZmx1c2hlZFVwdG87CisJcGFyYW1zLT5yZWNlaXZlVExJID0gcmVj ZWl2ZVRMSTsKKwlwYXJhbXMtPmFib3J0ZWRSZWNQdHIgPSBhYm9ydGVkUmVjUHRyOworCXBhcmFt cy0+bWlzc2luZ0NvbnRyZWNQdHIgPSBtaXNzaW5nQ29udHJlY1B0cjsKKwlwYXJhbXMtPmJhY2t1 cEVuZFJlcXVpcmVkID0gYmFja3VwRW5kUmVxdWlyZWQ7CisJcGFyYW1zLT5iYWNrdXBTdGFydFBv aW50ID0gYmFja3VwU3RhcnRQb2ludDsKKwlwYXJhbXMtPmJhY2t1cEVuZFBvaW50ID0gYmFja3Vw RW5kUG9pbnQ7CisJcGFyYW1zLT5jdXJGaWxlVExJID0gY3VyRmlsZVRMSTsKKworCS8qCisJICog U2F2aW5nIHByb21vdGlvbiBzaWduYWwgbm93LCBvdGhlcndpc2Ugd2Ugd29uJ3QgYmUgYWJsZSBo YW5sZGUgdGhpcworCSAqIHNpZ25hbCBiZWN1YXNlIHByb2RjdWVyIHByb2Nlc3Mgbm90IHN0YXJ0 ZWQgeWV0IGFuZCBzdGFydHVwIHByb2Mgd29uJ3QKKwkgKiBiZSByZXNwb25zaWJsZSBmb3IgZGVj b2RpbmcuCisJICovCisJcGFyYW1zLT5wcm9tb3RlZEJlZm9yZUxhdW5jaCA9IElzUHJvbW90ZVNp Z25hbGVkKCkgJiYgQ2hlY2tQcm9tb3RlU2lnbmFsKCk7CisKKwkvKgorCSAqIFRoZSBwaXBlbGlu ZSB3aWxsIGRvIHRoZSB3YWl0aW5nIGluIHRoaXMgY2FzZSBzdGFydHVwIHByb2Mgc2hvdWxkIGRp c293bgorCSAqIHRoZSBsYXRjaC4KKwkgKi8KKwlEaXNvd25SZWNvdmVyeVdha2V1cExhdGNoKCk7 CisKKwkvKgorCSAqIFVwZGF0ZSBzaGFyZWQgc3RhdGUgYmVmb3JlIHN0YXJ0aW5nLgorCSAqLwor CVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisJWExvZ1JlY292 ZXJ5Q3RsLT5JbkFyY2hpdmVSZWNvdmVyeSA9IEluQXJjaGl2ZVJlY292ZXJ5OworCVhMb2dSZWNv dmVyeUN0bC0+cGVuZGluZ1dhbFJjdlJlc3RhcnQgPSBwZW5kaW5nV2FsUmN2UmVzdGFydDsKKwlY TG9nUmVjb3ZlcnlDdGwtPmFib3J0ZWRSZWNQdHIgPSBhYm9ydGVkUmVjUHRyOworCVhMb2dSZWNv dmVyeUN0bC0+bWlzc2luZ0NvbnRyZWNQdHIgPSBtaXNzaW5nQ29udHJlY1B0cjsKKwlYTG9nUmVj b3ZlcnlDdGwtPmN1cnJlbnRTb3VyY2UgPSBjdXJyZW50U291cmNlOworCVhMb2dSZWNvdmVyeUN0 bC0+c3RhbmRieVN0YXRlID0gc3RhbmRieVN0YXRlOworCVhMb2dSZWNvdmVyeUN0bC0+WExvZ1Jl Y2VpcHRTb3VyY2UgPSBYTG9nUmVjZWlwdFNvdXJjZTsKKwlYTG9nUmVjb3ZlcnlDdGwtPlhMb2dS ZWNlaXB0VGltZSA9IFhMb2dSZWNlaXB0VGltZTsKKwlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNv dmVyeUN0bC0+aW5mb19sY2spOworfQorCisvKgorICogQ2FsbGVkIGJ5IHRoZSBwcm9kdWNlciBi YWNrZ3JvdW5kIHdvcmtlciBvbiBzdGFydHVwLgorICogSW1wb3J0cyByZWNvdmVyeSBzdGF0ZSBm cm9tIFdhbFBpcGVsaW5lUGFyYW1zIGludG8gdGhlIHdvcmtlcidzCisgKiBvd24gbG9jYWwgdmFy aWFibGVzLCBtaXJyb3JpbmcgdGhlIGVudmlyb25tZW50IHRoZSBzdGFydHVwIHByb2Nlc3MKKyAq IGhhZCB3aGVuIGl0IGxhdW5jaGVkIHRoZSBwaXBlbGluZS4KKyAqLwordm9pZAorV2FsUGlwZWxp bmVfSW1wb3J0UmVjb3ZlcnlTdGF0ZShXYWxQaXBlbGluZVBhcmFtcyAqcGFyYW1zKQoreworCVN0 YW5kYnlNb2RlID0gcGFyYW1zLT5TdGFuZGJ5TW9kZTsKKwlTdGFuZGJ5TW9kZVJlcXVlc3RlZCA9 IHBhcmFtcy0+U3RhbmRieU1vZGVSZXF1ZXN0ZWQ7CisJQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVk ID0gcGFyYW1zLT5BcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQ7CisJSW5BcmNoaXZlUmVjb3Zlcnkg PSBwYXJhbXMtPkluQXJjaGl2ZVJlY292ZXJ5OworCXJlY292ZXJ5VGFyZ2V0VExJID0gcGFyYW1z LT5yZWNvdmVyeVRhcmdldFRMSTsKKwltaW5SZWNvdmVyeVBvaW50VExJID0gcGFyYW1zLT5taW5S ZWNvdmVyeVBvaW50VExJOworCW1pblJlY292ZXJ5UG9pbnQgPSBwYXJhbXMtPm1pblJlY292ZXJ5 UG9pbnQ7CisJY3VycmVudFNvdXJjZSA9IHBhcmFtcy0+Y3VycmVudFNvdXJjZTsKKwlsYXN0U291 cmNlRmFpbGVkID0gcGFyYW1zLT5sYXN0U291cmNlRmFpbGVkOworCXBlbmRpbmdXYWxSY3ZSZXN0 YXJ0ID0gcGFyYW1zLT5wZW5kaW5nV2FsUmN2UmVzdGFydDsKKwlSZWRvU3RhcnRUTEkgPSBwYXJh bXMtPlJlZG9TdGFydFRMSTsKKwlSZWRvU3RhcnRMU04gPSBwYXJhbXMtPlJlZG9TdGFydExTTjsK KwlzdGFuZGJ5U3RhdGUgPSBwYXJhbXMtPnN0YW5kYnlTdGF0ZTsKKwlDaGVja1BvaW50TG9jID0g cGFyYW1zLT5DaGVja1BvaW50TG9jOworCUNoZWNrUG9pbnRUTEkgPSBwYXJhbXMtPkNoZWNrUG9p bnRUTEk7CisJZmx1c2hlZFVwdG8gPSBwYXJhbXMtPmZsdXNoZWRVcHRvOworCXJlY2VpdmVUTEkg PSBwYXJhbXMtPnJlY2VpdmVUTEk7CisJYWJvcnRlZFJlY1B0ciA9IHBhcmFtcy0+YWJvcnRlZFJl Y1B0cjsKKwltaXNzaW5nQ29udHJlY1B0ciA9IHBhcmFtcy0+bWlzc2luZ0NvbnRyZWNQdHI7CisJ SW5SZWRvID0gcGFyYW1zLT5JblJlZG87CisJYmFja3VwRW5kUmVxdWlyZWQgPSBwYXJhbXMtPmJh Y2t1cEVuZFJlcXVpcmVkOworCWJhY2t1cFN0YXJ0UG9pbnQgPSBwYXJhbXMtPmJhY2t1cFN0YXJ0 UG9pbnQ7CisJYmFja3VwRW5kUG9pbnQgPSBwYXJhbXMtPmJhY2t1cEVuZFBvaW50OworCWN1ckZp bGVUTEkgPSBwYXJhbXMtPmN1ckZpbGVUTEk7CisJSW5SZWNvdmVyeSA9IHRydWU7CisKKwkvKgor CSAqIEFzIHBpcGVsaW5lIHdpbGwgYmUgcmVhZGluZyB0aGUgd2FsLCBzbyBiZXR0ZXIgdG8gb3du IHRoZSBsYXRjaCB0byB3YWl0IGF0LgorCSAqLworCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0 ZWQpCisJCU93bkxhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gpOwor fQogCiAvKgogICogR1VDIGNoZWNrX2hvb2sgZm9yIHByaW1hcnlfc2xvdF9uYW1lCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9zdGFuZGJ5LmMKaW5kZXggZGU5MDkyZmRmNWIuLmY3ZjMxYTkxNmE3IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvc3RhbmRieS5jCkBAIC0xMTk3LDYgKzExOTcsNyBAQCBzdGFuZGJ5X3JlZG8o WExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCXJ1bm5pbmcueGlkcyA9IHhscmVjLT54aWRzOwog CiAJCVByb2NBcnJheUFwcGx5UmVjb3ZlcnlJbmZvKCZydW5uaW5nKTsKKwkJU2V0U2hhcmVkSG90 U3RhbmRieVN0YXRlKCk7CiAKIAkJLyoKIAkJICogVGhlIHN0YXJ0dXAgcHJvY2VzcyBjdXJyZW50 bHkgaGFzIG5vIGNvbnZlbmllbnQgd2F5IHRvIHNjaGVkdWxlCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZ3BpcGVsaW5lLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3BpcGVs aW5lLmgKaW5kZXggYTg5OTVkNWMxYTcuLmM0N2NjNzIxMjFjIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZ3BpcGVsaW5lLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dw aXBlbGluZS5oCkBAIC01NCw2ICs1NCw1MiBAQCB0eXBlZGVmIHN0cnVjdCBXYWxSZWNvcmRNc2dI ZWFkZXIKIAlYTG9nUmVjUHRyICBvdmVyd3JpdHRlblJlY1B0cjsgICAgLyogWExvZ1JlYWRlclN0 YXRlLT5vdmVyd3JpdHRlblJlY1B0ciAqLwogfSBXYWxSZWNvcmRNc2dIZWFkZXI7CiAKKy8qCisg KiBQYXJhbWV0ZXJzIHBhc3NlZCBmcm9tIFN0YXJ0dXBYTE9HIChjb25zdW1lciBzaWRlKQorICog dG8gdGhlIFdBTCBwaXBlbGluZSBwcm9kdWNlciBiYWNrZ3JvdW5kIHdvcmtlci4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgV2FsUGlwZWxpbmVQYXJhbXMKK3sKKwlib29sCQlTdGFuZGJ5TW9kZTsKKwli b29sCQlTdGFuZGJ5TW9kZVJlcXVlc3RlZDsKKwlib29sCQlBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0 ZWQ7CisJYm9vbAkJSW5BcmNoaXZlUmVjb3Zlcnk7CisJYm9vbAkJSW5SZWRvOworCWJvb2wgCQls YXN0U291cmNlRmFpbGVkOworCWJvb2wgCQlwZW5kaW5nV2FsUmN2UmVzdGFydDsKKwlib29sIAkJ YmFja3VwRW5kUmVxdWlyZWQ7CisJYm9vbCAJCXByb21vdGVkQmVmb3JlTGF1bmNoOworCisJVGlt ZUxpbmVJRCAgUmVkb1N0YXJ0VExJOworCVRpbWVMaW5lSUQgIENoZWNrUG9pbnRUTEk7CisJVGlt ZUxpbmVJRCAgcmVjb3ZlcnlUYXJnZXRUTEk7CisJVGltZUxpbmVJRAltaW5SZWNvdmVyeVBvaW50 VExJOworCVRpbWVMaW5lSUQgIFJlcGxheVRMSTsKKwlUaW1lTGluZUlECXJlY2VpdmVUTEk7CisK KwlYTG9nUmVjUHRyIAliYWNrdXBTdGFydFBvaW50OworCVhMb2dSZWNQdHIgCWJhY2t1cEVuZFBv aW50OworCVhMb2dSZWNQdHIgIENoZWNrUG9pbnRMb2M7CisJWExvZ1JlY1B0ciAgUmVkb1N0YXJ0 TFNOOworCVhMb2dSZWNQdHIgIE5leHRSZWNQdHI7CisJWExvZ1JlY1B0cgltaW5SZWNvdmVyeVBv aW50OworCVhMb2dSZWNQdHIgCWZsdXNoZWRVcHRvOworCVhMb2dSZWNQdHIgCWFib3J0ZWRSZWNQ dHI7CisJWExvZ1JlY1B0ciAJbWlzc2luZ0NvbnRyZWNQdHI7CisKKwlpbnQJcmVhZEZpbGU7CisJ WExvZ1NlZ05vIHJlYWRTZWdObzsKKwl1aW50MzIgcmVhZE9mZjsKKwl1aW50MzIgcmVhZExlbjsK KwlYTG9nU291cmNlIHJlYWRTb3VyY2U7CisJVGltZUxpbmVJRCBjdXJGaWxlVExJOworCisKKwlI b3RTdGFuZGJ5U3RhdGUgc3RhbmRieVN0YXRlOworCVhMb2dTb3VyY2UgCWN1cnJlbnRTb3VyY2U7 CisKK30gV2FsUGlwZWxpbmVQYXJhbXM7CisKIC8qCiAgKiBTaGFyZWQgbWVtb3J5IGNvbnRyb2wg c3RydWN0dXJlIGZvciB0aGUgV0FMIHBpcGVsaW5lCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVjb3Zl cnkuaAppbmRleCA4MWFjOTg0YTkwNC4uNDUzNTdhMjVjYWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3Jl Y292ZXJ5LmgKQEAgLTExLDcgKzExLDkgQEAKICNpZm5kZWYgWExPR1JFQ09WRVJZX0gKICNkZWZp bmUgWExPR1JFQ09WRVJZX0gKIAorI2luY2x1ZGUgImFjY2Vzcy94bG9ncHJlZmV0Y2hlci5oIgog I2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGls cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgImxpYi9zdHJp bmdpbmZvLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaCIKQEAgLTYw LDYgKzYyLDE3IEBAIHR5cGVkZWYgZW51bSBSZWNvdmVyeVBhdXNlU3RhdGUKIAlSRUNPVkVSWV9Q QVVTRUQsCQkJLyogcmVjb3ZlcnkgaXMgcGF1c2VkICovCiB9IFJlY292ZXJ5UGF1c2VTdGF0ZTsK IAorLyogQ29kZXMgaW5kaWNhdGluZyB3aGVyZSB3ZSBnb3QgYSBXQUwgZmlsZSBmcm9tIGR1cmlu ZyByZWNvdmVyeSwgb3Igd2hlcmUKKyAqIHRvIGF0dGVtcHQgdG8gZ2V0IG9uZS4KKyAqLwordHlw ZWRlZiBlbnVtCit7CisJWExPR19GUk9NX0FOWSA9IDAsCQkJLyogcmVxdWVzdCB0byByZWFkIFdB TCBmcm9tIGFueSBzb3VyY2UgKi8KKwlYTE9HX0ZST01fQVJDSElWRSwJCQkvKiByZXN0b3JlZCB1 c2luZyByZXN0b3JlX2NvbW1hbmQgKi8KKwlYTE9HX0ZST01fUEdfV0FMLAkJCS8qIGV4aXN0aW5n IGZpbGUgaW4gcGdfd2FsICovCisJWExPR19GUk9NX1NUUkVBTSwJCQkvKiBzdHJlYW1lZCBmcm9t IHByaW1hcnkgKi8KK30gWExvZ1NvdXJjZTsKKwogLyoKICAqIFNoYXJlZC1tZW1vcnkgc3RhdGUg Zm9yIFdBTCByZWNvdmVyeS4KICAqLwpAQCAtOTQsNiArMTA3LDE0IEBAIHR5cGVkZWYgc3RydWN0 IFhMb2dSZWNvdmVyeUN0bERhdGEKIAkgKi8KIAlMYXRjaAkJcmVjb3ZlcnlXYWtldXBMYXRjaDsK IAorCS8qCisJICogSW4gY2FzZSBwaXBlbGluZSBlbmFibGVkIHdlIHdpbGwgbmVlZCB0d28gbGF0 Y2hlcy4gT25lIHRoYXQgY2FuIGJlIHVzZWQKKwkgKiBieSB0aGUgcGlwZWxpbmUgZm9yIFdBTCB3 YWl0aW5nIGFuZCBvdGhlciB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZQorCSAqIHN0YXJ0dXAgcHJv Y2VzcyBmb3IgdGhlIGFwcGx5IGRlbGF5LiBCZWZvcmUgdGhpcyB3ZSBoYWQgb25seSBvbmUgbGF0 Y2gKKwkgKiBmb3IgYm90aCBjYXNlcy4KKwkgKi8KKwlMYXRjaAkJcmVjb3ZlcnlBcHBseURlbGF5 TGF0Y2g7CisKIAkvKgogCSAqIExhc3QgcmVjb3JkIHN1Y2Nlc3NmdWxseSByZXBsYXllZC4KIAkg Ki8KQEAgLTEyMSw2ICsxNDIsNjUgQEAgdHlwZWRlZiBzdHJ1Y3QgWExvZ1JlY292ZXJ5Q3RsRGF0 YQogCUNvbmRpdGlvblZhcmlhYmxlIHJlY292ZXJ5Tm90UGF1c2VkQ1Y7CiAKIAlzbG9ja190CQlp bmZvX2xjazsJCS8qIGxvY2tzIHNoYXJlZCB2YXJpYWJsZXMgc2hvd24gYWJvdmUgKi8KKworCS8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorCSAqIFZhcmlhYmxlcyB1c2UgZm9yIElQQyBiZXR3ZWVuIHBpcGVsaW5lIGFu ZCB0aGUgc3RhcnR1cCBwcm9jLgorCSAqIFRoZXNlIGFyZSBhbHNvIHRoZSBzdGF0aWMgdmFyaWFi bGVzIGluIHhsb2dyZWNvdmVyeS5jIGJ1dCB0aGVyZSBzdGF0ZQorCSAqIGtlZXAgb24gY2hhbmdp bmcuIFNvIHdlIGFkZGVkIHRoZW0gYXMgdGhlIHNoYXJlZCBzdGF0ZXMgc28gdGhhdCBib3RoCisJ ICogdGhlIHBpcGVsaW5lIGFuZCB0aGUgc3RhcnR1cCBwcm9jIHN0YXkgc3luY2VkIGlmIGFueSBv ZiB0aGVzZSBzdGF0ZQorCSAqIGNoYW5nZXMuCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisKKwkvKgor CSAqIFBpcGVsaW5lIGNvdWxkIGJlIHdhaXRpbmcgZm9yIHRoZSBzdGFydHVwIHByb2Nlc3MgdG8g Y2F0Y2h1cCB3aXRoIHRoZQorCSAqIGRlY29kZXIuIFRoaXMgY291bGQgaGFwcGVuZCB3aGVuIG5v IHdhaXQgd2FsIGlzIGF2YWlsYWJsZSBmcm9tIHRoZQorCSAqIGN1cnJlbnQgcmVzb3VyY2UgYW5k IG5vdyBwaXBsaW5lIGhhdmUgY2hhbmdlIHRoZSB3YWwgc3JvdWNlCisJICogaS5lIGVuYWJsaW5n IHN0YW5kYnkgaWYgcmVxdWVzdGVkLgorCSAqLworCWJvb2wJCXBpcGVsaW5lX3dhaXRpbmc7CisJ Ym9vbAkJSW5BcmNoaXZlUmVjb3Zlcnk7CisJYm9vbAkJcGVuZGluZ1dhbFJjdlJlc3RhcnQ7CisJ Ym9vbAkJc3RhbmJ5RW5hYmxlZDsKKworCS8qCisJICogVGhlIHRhcmdldCBUTEkgZm9yIHdoaWNo IGV4cGVjdGVkVExFcyBzaG91bGQgYmUgcmVjb21wdXRlZCBieSB0aGUKKwkgKiBjb25zdW1lcgor CSAqLworCVRpbWVMaW5lSUQJZXhwZWN0ZWRUTEVzVXBkYXRlVExJOworCisJLyoKKwkgKiBXZSBh bHNvIGV4cG9ydCB0aGUgcmVjb3ZlcnlUYXJnZXRUTEkgYXMgYSBXYWxQaXBlbGluZVBhcmFtcy4g QnV0IG90aGVyCisJICogdGhhbiBwYXNzaW5nIHRoZSBpbml0aWFsIHN0YXRlLCB0aGUgcmVjb3Zl cnlUYXJnZXRUTEkgY2FuIGFsc28gY2hhbmdlCisJICogaXQgc3RhdGUgZHVyaW5nIHRoZSBkZWNv ZGluZyBieSB0aGUgcHJvZGN1ZXIgKHNlZSByZXNjYW5MYXRlc3RUaW1lTGluZSgpKS4KKwkgKgor CSAqIFRoaXMgbWVhbiBhdCB0aGUgZW5kIG9mIHRoZSByZWNvdmVyeSwgIHRoZSBzdGFydHVwIHBy b2Nlc3Mgc2hvdWxkIGF3YXJlCisJICogb2YgYW55IHN1Y2ggc3RhdGUgY2hhbmdlcyBkb25lIGJ5 IHRoZSBwcm9kdWNlci4gVG8gaGFuZGxlIHRoaXMKKwkgKiBSZXNldFN0YXRlc0lmUGlwZWxpbmVk KCkgd2lsbCB1cGRhdGUgdGhlIHN0YXJ0dXAgbG9jYWwgcmVjb3ZlcnlUYXJnZXRUTEkKKwkgKiB3 aXRoIHVwZGF0ZWQgb25lLCBvbiBGaW5pc2hXYWxSZWNvdmVyeSgpLgorCSovCisJVGltZUxpbmVJ RAlyZWNvdmVyeVRhcmdldFRMSTsKKworCS8qCisJICogTm9ybWFseSB3ZSB3YWtldXAgd2FscmN2 ciBhZnRlciBzcGVjaWZpYyByZWNvcmRzIGhhdmUgYmVlbiBhcHBsaWVkLCBhcworCSAqIGRlY29k aW5nIGFuZCBhcGxseWluZyBhcmUgc2VxdWVudGlhbCBzbyB3ZSB3YWtldXAgYWZ0ZXIgZW5vdWdo IHJlY29yZHMKKwkgKiBkZWNvZGVkIHJlYWQuCisJICoKKwkgKiBCdXQgaW4gY2FzZSBvZiBwaXBl bGluZSByZWFkcyAoZGVjb2RlZCByZWNvcmRzKSBjb3VsZCBiZSBhaGVhZCBvZiB0aGUKKwkgKiBj b25zdW1lciBhcHBseSBsb29wLiBXZSBjYW5ub3Qgd2FrZXVwIHdhbCByY3ZyIGJhc2VkIG9uIGhv dyBtdWNoIHJlY29yZHMKKwkgKiBkZWNvZGVkLCBzbyB3ZSB0ZWxsIGNvbnN1bWVyIHRvIHdha2V1 cCBhZnRlciBvbmx5IGFmdGVyIGEgc3BlY2lmaWMgbHNuCisJICogKFdha2V1cFdhbFJjdnJSZWNQ dHIgc2V0IGJ5IHRoZSBwaXBlbGluZSkgaGFzIGJlZWQgcmVwbGF5ZWQuCisJICovCisJWExvZ1Jl Y1B0cglXYWtldXBXYWxSY3ZyUmVjUHRyOworCisJWExvZ1JlY1B0cglhYm9ydGVkUmVjUHRyOwor CVhMb2dSZWNQdHIJbWlzc2luZ0NvbnRyZWNQdHI7CisKKwlYTG9nU291cmNlCWN1cnJlbnRTb3Vy Y2U7CisJWExvZ1NvdXJjZQlYTG9nUmVjZWlwdFNvdXJjZTsKKworCUhvdFN0YW5kYnlTdGF0ZSBz dGFuZGJ5U3RhdGU7CisJVGltZXN0YW1wVHoJCVhMb2dSZWNlaXB0VGltZTsKIH0gWExvZ1JlY292 ZXJ5Q3RsRGF0YTsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIFhMb2dSZWNvdmVyeUN0bERhdGEgKlhM b2dSZWNvdmVyeUN0bDsKQEAgLTIwNSw2ICsyODUsOCBAQCB0eXBlZGVmIHN0cnVjdAogCWJvb2wJ CXJlY292ZXJ5X3NpZ25hbF9maWxlX2ZvdW5kOwogfSBFbmRPZldhbFJlY292ZXJ5SW5mbzsKIAor c3RydWN0IFdhbFBpcGVsaW5lUGFyYW1zOyAgIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KKwog ZXh0ZXJuIEVuZE9mV2FsUmVjb3ZlcnlJbmZvICpGaW5pc2hXYWxSZWNvdmVyeSh2b2lkKTsKIGV4 dGVybiB2b2lkIFNodXRkb3duV2FsUmVjb3Zlcnkodm9pZCk7CiBleHRlcm4gdm9pZCBSZW1vdmVQ cm9tb3RlU2lnbmFsRmlsZXModm9pZCk7CkBAIC0yMjUsMTEgKzMwNywxNCBAQCBleHRlcm4gaW50 IFhMb2dQYWdlUmVhZChYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIsIFhMb2dSZWNQdHIgdGFy Z2V0UGFnZVB0ciwgaQogZXh0ZXJuIGJvb2wgUHJvbW90ZUlzVHJpZ2dlcmVkKHZvaWQpOwogZXh0 ZXJuIGJvb2wgQ2hlY2tQcm9tb3RlU2lnbmFsKHZvaWQpOwogZXh0ZXJuIHZvaWQgV2FrZXVwUmVj b3Zlcnkodm9pZCk7CitleHRlcm4gdm9pZCBEaXNvd25SZWNvdmVyeVdha2V1cExhdGNoKHZvaWQp OworZXh0ZXJuIHZvaWQgU2V0U2hhcmVkSG90U3RhbmRieVN0YXRlKHZvaWQpOwogCiBleHRlcm4g dm9pZCBTdGFydHVwUmVxdWVzdFdhbFJlY2VpdmVyUmVzdGFydCh2b2lkKTsKIGV4dGVybiB2b2lk IFhMb2dSZXF1ZXN0V2FsUmVjZWl2ZXJSZXBseSh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgUmVjb3Zl cnlSZXF1aXJlc0ludFBhcmFtZXRlcihjb25zdCBjaGFyICpwYXJhbV9uYW1lLCBpbnQgY3VyclZh bHVlLCBpbnQgbWluVmFsdWUpOworZXh0ZXJuIHZvaWQgV2FsUGlwZWxpbmVfSW1wb3J0UmVjb3Zl cnlTdGF0ZShzdHJ1Y3QgV2FsUGlwZWxpbmVQYXJhbXMgKnBhcmFtcyk7CiAKIGV4dGVybiB2b2lk IHhsb2dfb3V0ZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwog Ci0tIAoyLjM0LjEKCg== --0000000000001a84cb0654ebb847 Content-Type: application/pdf; name="recoveries-becnhmark-v04.pdf" Content-Disposition: attachment; filename="recoveries-becnhmark-v04.pdf" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqqo6frj4 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 ThknLrHY/h3aJHHfjYZJ7AyN4sHNng9rZrPu0ZnZtROWgbmi79thk8cqYTHtfhgi6ibrqCSeOXFz F7Xrzm/hv7///p9Tbt8m4cVtRVnBMcKXyiAOlqgbR9kMHnBtiWCmw7WNTx2tOEcNNKEc8JU+yCt2 fVU1jgiw9pJ6AfB1Gv5pnD+OdMk4OX5/kCpY9+//B8i5lA8KZW5kc3RyZWFtCmVuZG9iagoxIDAg b2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgMiAwIFIgL1Jlc291cmNlcyA0IDAgUiAvQ29udGVu dHMgMyAwIFIgL01lZGlhQm94IFswIDAgMTE0NC4yMzEgMTYxOS4yMzFdCj4+CmVuZG9iago0IDAg b2JqCjw8IC9Qcm9jU2V0IFsgL1BERiAvVGV4dCBdIC9Db2xvclNwYWNlIDw8IC9DczEgNSAwIFIg L0NzMiAyNiAwIFIgPj4gL0ZvbnQKPDwgL1RUMSA2IDAgUiAvVFQ0IDkgMCBSIC9UVDIgNyAwIFIg L1RUMyA4IDAgUiA+PiAvWE9iamVjdCA8PCAvRm0xIDEwIDAgUgovRm0yIDEyIDAgUiAvRm0zIDE0 IDAgUiAvRm00IDE2IDAgUiAvRm01IDE4IDAgUiAvRm02IDIwIDAgUiAvRm03IDIyIDAgUiAvRm04 CjI0IDAgUiA+PiA+PgplbmRvYmoKMTAgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL1R5 cGUgL1hPYmplY3QgL1N1YnR5cGUgL0Zvcm0gL0Zvcm1UeXBlIDEgL0JCb3ggWzAgMCA3NSAxOThd Ci9SZXNvdXJjZXMgMTEgMCBSIC9Hcm91cCA8PCAvUyAvVHJhbnNwYXJlbmN5IC9DUyAyOCAwIFIg L0kgdHJ1ZSAvSyBmYWxzZSA+PgovTGVuZ3RoIDc2ID4+CnN0cmVhbQp4AStUCFQoVDAAQnNTBUNL C4WiVIVwhTwFfediQ4XkYgUDPWNzCxMTM0sgy8LEwsjUzBjIMjI0MjAztlQoTkbSygXUmqYQCAD4 AxIUCmVuZHN0cmVhbQplbmRvYmoKMTEgMCBvYmoKPDwgL1Byb2NTZXQgWyAvUERGIF0gL0NvbG9y U3BhY2UgPDwgL0NzMSA1IDAgUiA+PiA+PgplbmRvYmoKMTIgMCBvYmoKPDwgL0ZpbHRlciAvRmxh dGVEZWNvZGUgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0Zvcm0gL0Zvcm1UeXBlIDEgL0JCb3gg WzAgMCA3NSA1MF0KL1Jlc291cmNlcyAxMyAwIFIgL0dyb3VwIDw8IC9TIC9UcmFuc3BhcmVuY3kg L0NTIDI4IDAgUiAvSSB0cnVlIC9LIGZhbHNlID4+Ci9MZW5ndGggNzUgPj4Kc3RyZWFtCngBK1QI VChUMABCc1MFUwOFolSFcIU8BX3nYkOF5GIFAz1jcwsTEzNLIMvCxMLI1MwYyDIyNDIwM7ZUKE5G 6OQC6kxTCAQA0zsRmgplbmRzdHJlYW0KZW5kb2JqCjEzIDAgb2JqCjw8IC9Qcm9jU2V0IFsgL1BE RiBdIC9Db2xvclNwYWNlIDw8IC9DczEgNSAwIFIgPj4gPj4KZW5kb2JqCjE0IDAgb2JqCjw8IC9G aWx0ZXIgL0ZsYXRlRGVjb2RlIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9Gb3JtIC9Gb3JtVHlw ZSAxIC9CQm94IFswIDAgNzUgMjEwXQovUmVzb3VyY2VzIDE1IDAgUiAvR3JvdXAgPDwgL1MgL1Ry YW5zcGFyZW5jeSAvQ1MgMjggMCBSIC9JIHRydWUgL0sgZmFsc2UgPj4KL0xlbmd0aCA3NiA+Pgpz dHJlYW0KeAErVAhUKFQwAEJzUwUjQwOFolSFcIU8BX3nYkOF5GIFAz1jcwsTEzNLIMvCxMLI1MwY yDIyNDIwM7ZUKE5G0soF1JqmEAgA85IR9gplbmRzdHJlYW0KZW5kb2JqCjE1IDAgb2JqCjw8IC9Q cm9jU2V0IFsgL1BERiBdIC9Db2xvclNwYWNlIDw8IC9DczEgNSAwIFIgPj4gPj4KZW5kb2JqCjE2 IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9G b3JtIC9Gb3JtVHlwZSAxIC9CQm94IFswIDAgNzUgNTNdCi9SZXNvdXJjZXMgMTcgMCBSIC9Hcm91 cCA8PCAvUyAvVHJhbnNwYXJlbmN5IC9DUyAyOCAwIFIgL0kgdHJ1ZSAvSyBmYWxzZSA+PgovTGVu Z3RoIDc1ID4+CnN0cmVhbQp4AStUCFQoVDAAQnNTBVNjhaJUhXCFPAV952JDheRiBQM9Y3MLExMz SyDLwsTCyNTMGMgyMjQyMDO2VChORujkAupMUwgEANQZEaAKZW5kc3RyZWFtCmVuZG9iagoxNyAw IG9iago8PCAvUHJvY1NldCBbIC9QREYgXSAvQ29sb3JTcGFjZSA8PCAvQ3MxIDUgMCBSID4+ID4+ CmVuZG9iagoxOCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvVHlwZSAvWE9iamVjdCAv U3VidHlwZSAvRm9ybSAvRm9ybVR5cGUgMSAvQkJveCBbMCAwIDc1IDIzMF0KL1Jlc291cmNlcyAx OSAwIFIgL0dyb3VwIDw8IC9TIC9UcmFuc3BhcmVuY3kgL0NTIDI4IDAgUiAvSSB0cnVlIC9LIGZh bHNlID4+Ci9MZW5ndGggNzAgPj4Kc3RyZWFtCngBK1QIVChUMABCc1MFI2MDhaJUhXCFPAV952JD heRiBQM9AwMDM2NLM0NzMyDHzNjYzMDYSMFQoTgZVRdXmkIgAJx8EOYKZW5kc3RyZWFtCmVuZG9i agoxOSAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgXSAvQ29sb3JTcGFjZSA8PCAvQ3MxIDUgMCBS ID4+ID4+CmVuZG9iagoyMCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvVHlwZSAvWE9i amVjdCAvU3VidHlwZSAvRm9ybSAvRm9ybVR5cGUgMSAvQkJveCBbMCAwIDc1IDcyXQovUmVzb3Vy Y2VzIDIxIDAgUiAvR3JvdXAgPDwgL1MgL1RyYW5zcGFyZW5jeSAvQ1MgMjggMCBSIC9JIHRydWUg L0sgZmFsc2UgPj4KL0xlbmd0aCA2OCA+PgpzdHJlYW0KeAErVAhUKFQwAEJzUwVzI4WiVIVwhTwF fediQ4XkYgUDPQMDAzNjSzNDczMgx8zY2MzA2EjBUKE4GVVTGlcgAH7TEI4KZW5kc3RyZWFtCmVu ZG9iagoyMSAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgXSAvQ29sb3JTcGFjZSA8PCAvQ3MxIDUg MCBSID4+ID4+CmVuZG9iagoyMiAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvVHlwZSAv WE9iamVjdCAvU3VidHlwZSAvRm9ybSAvRm9ybVR5cGUgMSAvQkJveCBbMCAwIDc2IDI0Nl0KL1Jl c291cmNlcyAyMyAwIFIgL0dyb3VwIDw8IC9TIC9UcmFuc3BhcmVuY3kgL0NTIDI4IDAgUiAvSSB0 cnVlIC9LIGZhbHNlID4+Ci9MZW5ndGggNzAgPj4Kc3RyZWFtCngBK1QIVChUMABCczMFIxMzhaJU hXCFPAV952JDheRiBQM9AwMDM2NLM0OgvIGembGxmYGxkYKhQnEyqi6uNIVAAJ62EPYKZW5kc3Ry ZWFtCmVuZG9iagoyMyAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgXSAvQ29sb3JTcGFjZSA8PCAv Q3MxIDUgMCBSID4+ID4+CmVuZG9iagoyNCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAv VHlwZSAvWE9iamVjdCAvU3VidHlwZSAvRm9ybSAvRm9ybVR5cGUgMSAvQkJveCBbMCAwIDc2IDc1 XQovUmVzb3VyY2VzIDI1IDAgUiAvR3JvdXAgPDwgL1MgL1RyYW5zcGFyZW5jeSAvQ1MgMjggMCBS IC9JIHRydWUgL0sgZmFsc2UgPj4KL0xlbmd0aCA2OCA+PgpzdHJlYW0KeAErVAhUKFQwAEJzMwVz U4WiVIVwhTwFfediQ4XkYgUDPQMDAzNjSzNDoLSBnpmxsZmBsZGCoUJxMqqmNK5AAH/tEJYKZW5k c3RyZWFtCmVuZG9iagoyNSAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgXSAvQ29sb3JTcGFjZSA8 PCAvQ3MxIDUgMCBSID4+ID4+CmVuZG9iagoyOSAwIG9iago8PCAvTiAzIC9BbHRlcm5hdGUgL0Rl dmljZVJHQiAvTGVuZ3RoIDI2MTIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBnZZ3 VFPZFofPvTe90BIiICX0GnoJINI7SBUEUYlJgFAChoQmdkQFRhQRKVZkVMABR4ciY0UUC4OCYtcJ 8hBQxsFRREXl3YxrCe+tNfPemv3HWd/Z57fX2Wfvfde6AFD8ggTCdFgBgDShWBTu68FcEhPLxPcC GBABDlgBwOFmZgRH+EQC1Py9PZmZqEjGs/buLoBku9ssv1Amc9b/f5EiN0MkBgAKRdU2PH4mF+UC lFOzxRky/wTK9JUpMoYxMhahCaKsIuPEr2z2p+Yru8mYlybkoRpZzhm8NJ6Mu1DemiXho4wEoVyY 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 1FGgUbC+YGiz7+bGQrlCUeG9Lc5bDmzFbBVs7d1ms61q25ciXtH1YsviiuJPJdyS699ZfVf53cz2 hO29pfal+3fgdgh33N3puvNYmWJZXtnQruBdreXM8qLyt7tX7L5WYVtxYA9pj2SPtDKosr1Kr2pH 1afqpOqBGo+a5r3qe7ftndrH29e/321/0wGNA8UHPh4UHLx/yPdQa61BbcVh3OGsw8/rouq6v2d/ X39E7Ujxkc9HhUelx8KPddU71Nc3qDeUNsKNksax43HHb/3g9UN7E6vpUDOjufgEOCE58eLH+B/v ngw82XmKfarpJ/2f9rbQWopaodbc1om2pDZpe0x73+mA050dzh0tP5v/fPSM9pmas8pnS8+RzhWc mzmfd37yQsaF8YuJF4c6V3Q+urTk0p2usK7ey4GXr17xuXKp2737/FWXq2euOV07fZ19ve2G/Y3W Hruell/sfmnpte9tvelws/2W462OvgV95/pd+y/e9rp95Y7/nRsDiwb67i6+e/9e3D3pfd790Qep D14/zHo4/Wj9Y+zjoicKTyqeqj+t/dX412apvfTsoNdgz7OIZ4+GuEMv/5X5r0/DBc+pzytGtEbq R61Hz4z5jN16sfTF8MuMl9Pjhb8p/rb3ldGrn353+71nYsnE8GvR65k/St6ovjn61vZt52To5NN3 ae+mp4req74/9oH9oftj9MeR6exP+E+Vn40/d3wJ/PJ4Jm1m5t/3hPP7CmVuZHN0cmVhbQplbmRv YmoKNSAwIG9iagpbIC9JQ0NCYXNlZCAyOSAwIFIgXQplbmRvYmoKMzAgMCBvYmoKPDwgL04gMSAv QWx0ZXJuYXRlIC9EZXZpY2VHcmF5IC9MZW5ndGggMzM4NSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+ PgpzdHJlYW0KeAGlVwdcU1fbPzf3ZrDCnjLCRpYBZcuIzACyh+AiJoGEEWIgCIiLUqxg3eLAUdGi qEWrFYE6UYtW6satL9RSQanFWlxYfZ+bgMLb/t7v+35f7u9w/+c541n/89wDQtpbeFJpLgUhlCcp lIUncNKmpaWz6PcRAxkiTeSKNHn8AiknLi4apiBJvkRIvsf+Xt5EGCm57kLuNXbsf+xRBcICPsw6 Ba1EUMDPQwibjBDDhC+VFSKkMg3k1vMKpSQuA6yXk5QQDHgVzFEfXgtiZBEulAhlYj4rXMYrYYXz 8vJ4LHdXd1acLD9TnPsPVpOL/j+/vFw5aTf5s4CmXpCTGAVvV7C/QsALIbEv4EN8XmgiYG/A/UXi lBjAQQhRbKSFUxIARwIWyHOSOYCdATdmysKSAQcAviuSR5B4EkK4UakoKRWwCeDonPwocq0V4EzJ nJhYwKAL/4JfEJwO2AFwm0jIJXNmA/iJLD+BnOOIEMEUCENCAYMdhLe4kJs0jCsLihJJOdhJ3CgV BZN2gi6qejYvMg6wHWA7YW44qRf2oUZLC+PIPaFPLZLkxpC6ggCfFxYo/IU+jVEoSooAuTvgpEJZ ErkW7KFVZorDuIDDAO8VySJIOfhLG5DmKngGMaG78mSh4SCHmNCLZfIEMg7gI32XUJJMxhM4Qn+I UjAeEqJ8NAf+8pEEdSMWKkBiVKRAWYiH8qCxwAJnaOEwSwJNBjMKUA7IswD3fBwn++QKco0LksJY PsqEubmwckTOQgLYQbmS3CUfGtkjd+5V7Mwf1ugKGoPNv0ZyGBehfhgXAZqKuhSSYrAwD/rBIJXD WBbg0VrcgUnuKE5hrdIGcpzU0jesJR9WCBS6lOtIP5W2BYPNElQKY6RtCt8JQ4JNTITmR0QT/gRb oU0GM0qQi0I+WSEb0frJc9K3vo9a54Kto70fHbGRKJ+GeBXCzrngoWQ4PgVgzTuwO2d49adoKjSu MpE7SKU1K+K5s+rBXvC8XDZbzL+8cqC97JgRYt1cfuoCYu3Xajmv8IeMDKuTaJ5xXb297L9k9VM2 R2wbm9XY0bxRMEnwN96ALuo16hXqQ+oNxIL3L9ROai+ge9T78Nz5aM+nHJCcEoNcyQkl2/gYrphJ spADkclVjOZBNMhMCRV5Cod1PIhvAURPDrwjc+0CDBidi7EMIXcbPU4yQqk9C/ZV9j4xnq+QkAwh 9ZNs+Xt8/i8nZNT5yJSsMpFKZ9WXDQmlyvyRuRMujXkZg8qd2QfZ/exd7P3sF+yHiigo8se+xf6N 3cneASNP8bX4Efw43oK34h2IBb1W/DTeokD78WPwfPtx3dgToYzx2BNB8pM/fAJI7wuHOTj6rIyu CmQ+yH3IbJDzR2KYPXyyR3OVjPhoDpGx/N9ZNDrWYyuIMvuKU8q0Zrox6UxHpgeTw8SYlvC4M4MA WTOtmNFMQxiNYNozQ5jjPsZjJGO5ICEZRDLvExeVdS8NrBxhGumfCLIvU1Q53rC//+kja4yXZAUU jz5nmAacZKUmZQ0Z0TkSV0WGx1TQZNAkRvPADhnElawOEqg9rDFzyNpNVi1gPDZdkcN/4CjNl2ZP C6XZw1pltWLRQmgRtDDEormRctoEWiRgH3IWYU64EVyoerGIRXAIDyJoGJOVcDI8ZB1UxsiFCITR ACKE8CZr5GhvwRJlbMlq+c+ejj6FcNcoFBbDfQWh4HxpiUycJSpkceBmJGRxJXxXZ5Y72w2+iOQ9 i5yD0It4xf0JM+jgy2VFShlBvqhIFe5gesgYmSNr+Kq7gK1eyA++s6Fwb4hFSSgNzQLrRJBLGcS2 DC1BlagarULr0Wa0He1CDagRHUJH0TF0Gv2ALqIrqBPdgy9QD3qKBtBLNIRhGB3TwHQxY8wCs8Wc MHfMGwvAQrFoLAFLwzKwLEyCybEy7DOsGluDbcZ2YA3Yt1gLdhq7gF3F7mDdWB/2B/aWglPUKXoU M4odZQLFm8KhRFGSKDMpWZS5lFJKBWUFZSOljrKf0kQ5TblI6aR0UZ5SBnGEq+EGuCXugnvjwXgs no5n4jJ8IV6F1+B1eCNUgXb8Ot6F9+NvCBqhS7AIF8hNBJFM8Im5xEJiObGZ2EM0EWeJ60Q3MUC8 p2pQTalOVF8qlzqNmkWdR62k1lDrqUeo56Bq91Bf0mg0A+CFF/AljZZNm09bTttKO0A7RbtKe0Qb pNPpxnQnuj89ls6jF9Ir6Zvo++kn6dfoPfTXDDWGBcOdEcZIZ0gY5Ywaxl7GCcY1xmPGkIqWiq2K r0qsikClRGWlyi6VVpXLKj0qQ6raqvaq/qpJqtmqS1Q3qjaqnlO9r/pCTU3NSs1HLV5NrLZYbaPa QbXzat1qb9R11B3Vg9VnqMvVV6jvVj+lfkf9hYaGhp1GkEa6RqHGCo0GjTMaDzVeM3WZrkwuU8Bc xKxlNjGvMZ9pqmjaanI0Z2mWatZoHta8rNmvpaJlpxWsxdNaqFWr1aJ1S2tQW1fbTTtWO097ufZe 7QvavTp0HTudUB2BToXOTp0zOo90cV1r3WBdvu5nurt0z+n26NH07PW4etl61Xrf6F3SG9DX0Z+k n6JfrF+rf1y/ywA3sDPgGuQarDQ4ZHDT4K2hmSHHUGi4zLDR8JrhK6NxRkFGQqMqowNGnUZvjVnG ocY5xquNjxo/MCFMHE3iTeaZbDM5Z9I/Tm+c3zj+uKpxh8bdNaWYOpommM433WnaYTpoZm4WbiY1 22R2xqzf3MA8yDzbfJ35CfM+C12LAAuxxTqLkxZPWPosDiuXtZF1ljVgaWoZYSm33GF5yXLIyt4q 2arc6oDVA2tVa2/rTOt11m3WAzYWNlNtymz22dy1VbH1thXZbrBtt31lZ2+XarfU7qhdr72RPde+ 1H6f/X0HDYdAh7kOdQ43xtPGe4/PGb91/BVHiqOHo8ix1vGyE8XJ00nstNXpqjPV2cdZ4lznfMtF 3YXjUuSyz6Xb1cA12rXc9ajrswk2E9InrJ7QPuE924OdC9+3e246bpFu5W6tbn+4O7rz3Wvdb0zU mBg2cdHE5onPJzlNEk7aNum2h67HVI+lHm0ef3l6eco8Gz37vGy8Mry2eN3y1vOO817ufd6H6jPF Z5HPMZ83vp6+hb6HfH/3c/HL8dvr1zvZfrJw8q7Jj/yt/Hn+O/y7AlgBGQFfBXQFWgbyAusCfw6y DhIE1Qc95oznZHP2c55NYU+RTTky5VWwb/CC4FMheEh4SFXIpVCd0OTQzaEPw6zCssL2hQ2Ee4TP Dz8VQY2IilgdcYtrxuVzG7gDkV6RCyLPRqlHJUZtjvo52jFaFt06lTI1curaqfdjbGMkMUdjUSw3 dm3sgzj7uLlx38fT4uPia+N/TXBLKEtoT9RNnJ24N/Fl0pSklUn3kh2S5cltKZopM1IaUl6lhqSu Se2aNmHagmkX00zSxGnN6fT0lPT69MHpodPXT++Z4TGjcsbNmfYzi2demGUyK3fW8dmas3mzD2dQ M1Iz9ma848Xy6niDc7hztswZ4AfzN/CfCoIE6wR9Qn/hGuHjTP/MNZm9Wf5Za7P6RIGiGlG/OFi8 Wfw8OyJ7e/arnNic3TkfclNzD+Qx8jLyWiQ6khzJ2Xzz/OL8q1InaaW0a67v3PVzB2RRsvoCrGBm QXOhHvxT2iF3kH8u7y4KKKotej0vZd7hYu1iSXFHiWPJspLHpWGlX88n5vPnt5VZli0p617AWbBj IbZwzsK2RdaLKhb1LA5fvGeJ6pKcJT+Vs8vXlP/5WepnrRVmFYsrHn0e/vm+SmalrPLWUr+l278g vhB/cWnZxGWblr2vElT9WM2urql+t5y//Mcv3b7c+OWHFZkrLq30XLltFW2VZNXN1YGr96zRXlO6 5tHaqWub1rHWVa37c/3s9RdqJtVs36C6Qb6ha2P0xuZNNptWbXq3WbS5s3ZK7YEtpluWbXm1VbD1 2ragbY3bzbZXb3/7lfir2zvCdzTV2dXV7KTtLNr5666UXe1fe3/dUG9SX13/127J7q49CXvONng1 NOw13btyH2WffF/f/hn7r3wT8k1zo0vjjgMGB6oPooPyg0++zfj25qGoQ22HvQ83fmf73ZYjukeq mrCmkqaBo6KjXc1pzVdbIlvaWv1aj3zv+v3uY5bHao/rH195QvVExYkPJ0tPDp6Snuo/nXX6Udvs tntnpp25cTb+7KVzUefO/xD2w5l2TvvJ8/7nj13wvdDyo/ePRy96Xmzq8Og48pPHT0cueV5quux1 ufmKz5XWq5OvnrgWeO309ZDrP9zg3rjYGdN59Wbyzdu3Ztzqui243Xsn987zu0V3h+4thot91QOt BzUPTR/W/Wv8vw50eXYd7w7p7vg58ed7j/iPnv5S8Mu7nopfNX6teWzxuKHXvfdYX1jflSfTn/Q8 lT4d6q/8Tfu3Lc8cnn33e9DvHQPTBnqey55/+GP5C+MXu/+c9GfbYNzgw5d5L4deVb02fr3njfeb 9repbx8PzXtHf7fxr/F/tb6Pen//Q96HD/8GCQ/4YgplbmRzdHJlYW0KZW5kb2JqCjI2IDAgb2Jq ClsgL0lDQ0Jhc2VkIDMwIDAgUiBdCmVuZG9iagozMSAwIG9iago8PCAvTiAzIC9BbHRlcm5hdGUg L0RldmljZVJHQiAvTGVuZ3RoIDEwNzIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB hVVbaBxVGP43c3ZXyDoPYpuaSjp4ayhJ2aSiCbXRvSSbbeN22Vy0QZDN7NmdaSY748xseqH4UARB BKOCT4L3t0KfhHipti+2iNJCiRIMouBD641CpS8S1u/M7M7uhmBn2TPf/P9/vv/833/ODFH0StGy jC6FaKnq2oVMUnn+2LwSXacueoC6qZe6i6pjJfL5KcIlYsW987rzA4WE5frg9v7O6C1P3SXuqESh e2A3S466BHySKPyaatkuUZTBPnLCtQR+Cvh+GwsEzgtc8XFJ4AUfYy5iZgopxLwOLKtaEf7ou8AD C232Shv214AIzM3wKrd1VRFa5G2zrBvcc/jDXdxtkf8Hl4waavauPRhjzuL0Edz7UfsrpWJa4EeA z6nF8ekGvrasz+Ua+B/LTRaAHyPq2lVbnE0A7wMeK9sTs8Dg6dK02mQTr5zWZp6D/T7YVxfNI2Lu TuBvqwu5o8CC5xfVSUFXeohIimg8K/rdB9xvmwURg/VIEyWeHgceAD6uu9kZYOSS3nGWp4Xd4zmt pcQ6kUv66njxsOhTL/A1bmREXsH/u+XmG3lZrGrkRC7wsGHuePWCh8VcbWYSduRl8y4a6s9lL5f1 iWwj/n3NnhR2MfeKZXh7FGtjt+xaQdSOXOEHeXVWaAjO8FjRHs80cInmQkXiZNICRpWqtEkKFShD SdwtsuEpk04GLBxeDgvHUzNmsCMm7/n9+GaEQhVv5g3M1JEh1fcJ1TBfoz/BpwVMCqXwVIOtQtvz +Cu42eAxWQ+LswP4H2RT7BAbYaOksKfZM2yMpWEdZQcD7nxbHWI9N5HF53kJGbkXN4eKL6Eyl4oY f0WESU7A0KHFSm+t39forP2irl5949blM1/uasWusdUXrscun2nTTAfXYhDRqdrRu2kf/i18I7yG cT28EXAo4Z/CG/itQ61Wl7aqLvolVE+gJsPrxBLq1VEdb6tusIOjnc9s5Wv0sclolqsrvb4KQgH+ au5Ojs4OtOLjP8b/iq/FP4h/HP9Delv6VLogfSZ9Ln1HinRRuiR9LX0jnZe+COK377m/d4Kee3UI m6hC7Mdmve2KYn/KSXm3/LCclvfIj8pTQZQi98hD8qS8F57dQXdau1np0EGnY9Csqdb2ucTJ0AMm aB26F33WWxk7zscsVqzTCXDaUF/ssyqdQmz7OWtUxPrYEMtu2dUjYq8H3P55aPajqURnDTwyHklH EqRE9kVGI0ORwwI3z3dkL3yjGPHWcvlJfFuIUqZ1ytYrmqsMx+NPKgl86riSrar7B5SiYSiey1Fs 7nB7mZf2k/hOinlEtwve9y+082rL5j5LdOhv8d5r2eZrROccop7HW7Z+vBt3vEe0+oRas5d9PgqF vidyygeGvedQLIl318/1+m28w6JvEW2+Wa//+2G9vvkR+DeILhr/Af8leAsKZW5kc3RyZWFtCmVu ZG9iagoyOCAwIG9iagpbIC9JQ0NCYXNlZCAzMSAwIFIgXQplbmRvYmoKMiAwIG9iago8PCAvVHlw ZSAvUGFnZXMgL01lZGlhQm94IFswIDAgMTE0NC4yMzEgMTYxOS4yMzFdIC9Db3VudCAxIC9LaWRz IFsgMSAwIFIgXQo+PgplbmRvYmoKMzIgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIg MCBSIC9WZXJzaW9uIC8xLjQgPj4KZW5kb2JqCjI3IDAgb2JqClsgMSAwIFIgIC9YWVogMCAxNjE5 LjIzMSAwIF0KZW5kb2JqCjYgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBl IC9CYXNlRm9udCAvQUFBQUFCK0hlbHZldGljYU5ldWUgL0ZvbnREZXNjcmlwdG9yCjMzIDAgUiAv RW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcgL0ZpcnN0Q2hhciAzMiAvTGFzdENoYXIgMTIyIC9X aWR0aHMgWyAyNzgKMCAwIDAgMCAxMDAwIDAgMCAyNTkgMjU5IDAgMCAwIDM4OSAyNzggMCA1NTYg NTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1Ngo1NTYgMjc4IDAgMCA2MDAgMCAwIDAgNjQ4 IDY4NSA3MjIgNzA0IDYxMSAwIDc1OSA3MjIgMCAwIDAgMCA4NzEgMCAwIDAgMCA2ODUKNjQ4IDU3 NCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1MzcgNTkzIDUzNyA1OTMgNTM3IDI5NiA1NzQgNTU2 IDIyMiAyMjIgNTE5CjIyMiA4NTMgNTU2IDU3NCA1OTMgMCAzMzMgNTAwIDMxNSA1NTYgNTAwIDc1 OCAwIDUwMCA0ODAgXSA+PgplbmRvYmoKMzMgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9y IC9Gb250TmFtZSAvQUFBQUFCK0hlbHZldGljYU5ldWUgL0ZsYWdzIDMyIC9Gb250QkJveApbLTk1 MSAtNDgxIDE5ODcgMTA3N10gL0l0YWxpY0FuZ2xlIDAgL0FzY2VudCA5NTIgL0Rlc2NlbnQgLTIx MyAvQ2FwSGVpZ2h0CjcxNCAvU3RlbVYgOTUgL0xlYWRpbmcgMjggL1hIZWlnaHQgNTE3IC9TdGVt SCA4MCAvQXZnV2lkdGggNDQ3IC9NYXhXaWR0aCAyMjI1Ci9Gb250RmlsZTIgMzQgMCBSID4+CmVu ZG9iagozNCAwIG9iago8PCAvTGVuZ3RoMSAxMzY3NiAvTGVuZ3RoIDc5ODUgL0ZpbHRlciAvRmxh dGVEZWNvZGUgPj4Kc3RyZWFtCngBzXt7dBvXeee9gycBEAQIgHg/B8AQDwIgwcGLIPgQSZGiTJGS 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 TZfFofnl+SFPIuv0DUqe3yvsSfX2JBv5xFDUiW2gI9jn9Pbou5xRb34s0WMXK9JQJWx3xaKesE1v ckuADaVSHhQ+Dh+FbPX26KmHnMg/GXClnMmNNZPsKL/Zzvd62qkXZa07FUg1VOrwoIt8L05h6DUf GOYIl5XNCiT9bHN52RrMRyckp9eqOyPoPvax+dbn41lP17zG1NvDJ+j1BDA1Dlm/htDsoTyEXqkl eOnw6nZ+1R0pbaIExrczve2spJORGGEnNARVfvEGkl2xg6RMLTrgpvyLv7Y7D6ke9kMFWzfUHIQf b/0+chD/QAFelfiz4uM74I+OX9S8pxOj6bUOYgTzOFBO04gOnvrCygeED64/h/GW+H/c+il+j3eD hb/C73twRrrz+1urk+o4FPU7Lcx669jK+FSlFMY/sXxRuG/trPDO408dOyucw1wr2BGAELw+1jqN OY03BxVM+9jjkGWG5qW3be1UZ0EBZbvw4qIO166O9uu3eqrEdGGzZcfy6G2OdgXFAvAtiC8WVFAs qKBYUEGxoIJiQQXF0qmgWFBBoZdGaH+kjlAY1NEhB851lKPHMa5Ryq3c3BMUM4GekNUcNPnELvHL d31E+ODqdHI42qPVLegMXvcRQaCFAQsKn/wl4NiFvFut6JKU6USQ3simNr1zhlM9Oaq8GNDHP9d6 ltdb7+DxiYl5/lhN0Tf1nW528zfpPYM3+aNNsgbj0dvd9BLWzrvc9Ca3D3PTm9uRXe9l01vZBci2 BEym2DR2GXtRkprDv9CZZ/vxL4sW8B7yIltiB/EmYxP7jyMoVq3gX+McY2vK/Jz1YnX0pwdgbIL+ JjOzp+976PTFcydPLJzGv7Ji/w/wQzk7CmVuZHN0cmVhbQplbmRvYmoKOSAwIG9iago8PCAvVHlw ZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9BQUFBQUUrSGVsdmV0aWNhTmV1 ZSAvRm9udERlc2NyaXB0b3IKMzUgMCBSIC9Ub1VuaWNvZGUgMzYgMCBSIC9GaXJzdENoYXIgMzMg L0xhc3RDaGFyIDM1IC9XaWR0aHMgWyA1NzcgMCAyNzggXQo+PgplbmRvYmoKMzYgMCBvYmoKPDwg L0xlbmd0aCAyNDEgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBXZDNasQgFIX3PsVd TheDxtl0IYEyZSCL/tC0D2D0GoRGxZhF3r5XZzqFLg54f77D8fLz8DwEX4C/52hGLOB8sBnXuGWD MOHsA+skWG/KrWo9s+jEOMHjvhZchuAiKMUA+Acha8k7HJ5snPCh9t6yxezDDIev89g645bSNy4Y CgjW92DRkd2LTq96QeANPQ6W5r7sR6L+Nj73hECJiOiukUy0uCZtMOswI1NC9Opy6RkG+290ugKT u23KrldVbiKGKSmprBLysZYnepKEELq5/XLVuB7gHthsOVPWdqX2jRrPB7wfMsVU4zT9ANNYdrkK ZW5kc3RyZWFtCmVuZG9iagozNSAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnRO YW1lIC9BQUFBQUUrSGVsdmV0aWNhTmV1ZSAvRmxhZ3MgNCAvRm9udEJCb3gKWy05NTEgLTQ4MSAx OTg3IDEwNzddIC9JdGFsaWNBbmdsZSAwIC9Bc2NlbnQgOTUyIC9EZXNjZW50IC0yMTMgL0NhcEhl aWdodAo3MTQgL1N0ZW1WIDk1IC9MZWFkaW5nIDI4IC9YSGVpZ2h0IDUxNyAvU3RlbUggODAgL0F2 Z1dpZHRoIDQ0NyAvTWF4V2lkdGggMjIyNQovRm9udEZpbGUyIDM3IDAgUiA+PgplbmRvYmoKMzcg MCBvYmoKPDwgL0xlbmd0aDEgMjI2NCAvTGVuZ3RoIDExMTEgL0ZpbHRlciAvRmxhdGVEZWNvZGUg Pj4Kc3RyZWFtCngBrVZNTxtXFL1vZvwBdouHD+MyEGYwIMBO7eKQJlGV2qltmVipaGmUmUppYoGD qSBBqRNRqZW86aJedFNlQdUf0E2ryaYyziJIidKqSiTUNbtu+gOo1EWAnjczmdoJjVCVgTv33vPu uz7vaHzH1Zu3yhSkGomUXlgtrZF1ef6GO7Zwu6raOfsBPnJtbWnVybeIpImllc+v2bl3lEgoVMql RTunp/AnKwDsnJ2AH62sVtft3PMnfGjlxoKz7o0g71wtrTufTzvI1eul1bJd7zfhJ9ZufFZ18hX4 7NrNslPPdOQX7LWWO0MsUZwEC7Pvx8AU3C2Er8Pkn+48utL1zl9MFjkv+vm9q9zRH49+/Pbp7P6w 74E0g7TD6WPtERsHMRr038V6zfeAd2m7pAb1xlgTOwQKx9h9yHuW3qYYDVMPCgdjdB8r59uhJshK pMQaxNTcl8uRbIM6kWAXUS//L9LHCOWDMxQQPBQUfiMZy/Figzrm9LuMfWM02MFXjSwNbYKteOWT 42gVV9XcctZkV5EIcQBTGiIxruZNcSz/oR411Lpan12sq3m1Ulo0pTHLY6FcNxKqSfP6Mu4f6ZqZ NhQ3LBvGGfSReB9sQXndQIdPnQ7wFpTYQ5EnXlRNcXxO/0A3a1nFTGcNRdPUnLk1p5tbWUUzDFR5 XaZgzI9vc/aBs3cK6367yzx6oIVRr/OeyIRxzdyq15U6TmIhUa3ByAFwUl4jjuUaLD2n86V0VFM4 ENWiGngYWfTuiBfn9RyYaJxJ5wuSUrZF0oBLFLVB0AtYkr72iiR9/SiSdh1J0pDLtE1SGZxDXNLu wyWNvkRQV+H0IQrXbIVrhyjc06Zw78sV7nN5g2QYbPsshftfkcKRoyj8xpEUHnCZtimsgPMAV3jQ VTitmOQ+tFC49twjS//5DP9fyYdaJGe7lGJhzL4Mpr19MWdqBclLIUAahpQAezbLClRgowyTHWiK GHss/IpVH5X5bMPXMYHZA/OH8P3chiU2+fZdoKFNzDEedewQBk5Ox5xIKBzsPGs4gIcDHpI4IGED PgUbPIgwM3eTbzFN1npkTWYb+09YKrW/JHy3d0fY2Dst/AKGOINwTvidYizN2dyziIsUQTQJknhZ gaEIZj4w475rB9MPvg85wfc7fhj4JPIx5NwfdxkHOMFAC2OFA0oL4OWAl/zumcIcCLcA4xwYbwEE DuD9426Z4sCUDYy7MjCwkWCe7SZ1oT4gd5/GmMF6N8TJeOhrBBs8uZyRyY8gApuAnYIVYDqsAluH +S838d551mWE98VJJ+AntyF0VMbfTGrmxMnUdLi/700WHfEOsRfyPlSxLx5evHRpNh8cDgYGAsMj D/8NFxcvsuZ+njWLF97NSNJ5SYyMFFrC4n4eFKzr4HuatqPn7hJerQITmeS7dX05mUxmuM+fSya5 n05On7LqGY5kP6Ne/lrM8CsXK5RXbperywul98v4RUP/AIAhCrgKZW5kc3RyZWFtCmVuZG9iago3 IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UcnVlVHlwZSAvQmFzZUZvbnQgL0FBQUFB QytIZWx2ZXRpY2FOZXVlLUJvbGQgL0ZvbnREZXNjcmlwdG9yCjM4IDAgUiAvRW5jb2RpbmcgL01h Y1JvbWFuRW5jb2RpbmcgL0ZpcnN0Q2hhciAzMiAvTGFzdENoYXIgMTIyIC9XaWR0aHMgWyAyNzgK MCAwIDAgMCAxMDAwIDAgMCAyOTYgMjk2IDAgMCAwIDQwNyAwIDAgNTU2IDU1NiA1NTYgMCAwIDAg MCAwIDU1NiAwIDAgMCAwIDYwMAowIDAgMCAwIDcwNCA3NDEgNzQxIDY0OCAwIDc1OSAwIDAgMCAw IDAgOTA3IDAgMCA2NjcgMCAwIDAgNjExIDc0MSAwIDk0NCAwCjAgMCAwIDAgMCAwIDAgMCA1NzQg NjExIDU3NCA2MTEgNTc0IDMzMyA2MTEgNTkzIDI1OCAwIDU3NCAyNTggOTA2IDU5MyA2MTEKNjEx IDAgMzg5IDUzNyAzNTIgNTkzIDAgODE0IDAgNTE5IDUxOSBdID4+CmVuZG9iagozOCAwIG9iago8 PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9BQUFBQUMrSGVsdmV0aWNhTmV1ZS1C b2xkIC9GbGFncyAzMiAvRm9udEJCb3gKWy0xMDE4IC00ODEgMTQzNyAxMTQxXSAvSXRhbGljQW5n bGUgMCAvQXNjZW50IDk3NSAvRGVzY2VudCAtMjE3IC9DYXBIZWlnaHQKNzE0IC9TdGVtViAxNTcg L0xlYWRpbmcgMjkgL1hIZWlnaHQgNTE3IC9TdGVtSCAxMzIgL0F2Z1dpZHRoIDQ3OCAvTWF4V2lk dGgKMTUwMCAvRm9udEZpbGUyIDM5IDAgUiA+PgplbmRvYmoKMzkgMCBvYmoKPDwgL0xlbmd0aDEg MTA3NTIgL0xlbmd0aCA2MzQ1IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Aa1aCXAb 13l+b0EABAgsAOIkjiWAJXFfxEUSpEiKp0Rd1EGJlCzrlixLcmzXkm01btxGjmw5ZlNrxjlsJU2c OE6bjJnDDsNJbE2SyaTuTKNmnNSNlU7HiR3n6EzOaRNbYL9/d0FRPhKnNTRP+3ax+Pf/v//7j/eW t9168hCzsLuZjg0dOLHvZqZ8jHtx+JcDp24LK6dM2IZjz+Gbj5zQzt/PWFPiyPE7D6vnzfcyFn7u hkP7Dqrn7DUcqzfggnrOyzh23HDitjvUc8OXcPzs8Xcd0L5vLuB85sS+O7Tns8s4D9+078Qh9f7k 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 uHCDufRNAdoV4FO6s4928ipapahAQ1lLYTK+pBUow49oTv1Qt1YDaa82nsPrIko+1+xMeOntERbI KKufPCukR7ZnM9PDyWCur12qZYN2b9AS69GdbUoObEqlpobi9MX66dZAxIZ9P+fj5bFUqyM1Vuro iriMRovN57Q7zbpQsjAYs9s6h4rRfLvTaA+HnW02o9kdUUw3LL3Ktwh/DwpufWM1alQhT6OPor94 IjbRW52rey+w8pKasKjpsAEaPSz20rq7gn4AHauyOKx2V2j1GKtgKfOzue3b/dm+iDvTavZYOnw3 CPqHH95T/0684DcJupsEwdfB2R7AT+u6AMqbkjfN2prEjMdfXZ+rlZMSvxuPpqp5Td68umYnkqGq K/zBmx5l9Q5tMKGt9Gp3yS0ErhZyNXHWf0VlnHfUv44yLiWya/BgA5iagE42eF6teW/c0QGt8Byq tI3ZH1m/3/Pog3uEmXPbhT0PffL8jHCdoK9/gl9f/zjfg7y9q/4pvMt8FXmG/kbMDZqqL0KcZCxh jRhpQn+p7g3o1b0BJzaEDUZDLO6mNWOVV54/f4tw8oNPGgJBd8rlSXvWbhkSxuof5fvrAZvDG9Px JuGkoEPnBPvwoon/Cs8yYXVyNUAMaC7J9wqrATL1zeTnZvi5m940cWywlDz8hfp/cmt9/e+PHTvG 89jOFyATn6VH8DrnzT60kaYDTvSXHHbY4YKNARZG5qK/u0igWS7g7++6WQ96j1E2ho54gq1Bmpxk 69h6thHv3qfYZraFbWXT6JR3sBm2k13HdkMqx5/0IYDxMdASfzV9RtJrDh0/dei2owf2bTx08lB2 +F3HD7L/BSh49r4KZW5kc3RyZWFtCmVuZG9iago4IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0 eXBlIC9UcnVlVHlwZSAvQmFzZUZvbnQgL0FBQUFBRCtIZWx2ZXRpY2FOZXVlLUJvbGQgL0ZvbnRE ZXNjcmlwdG9yCjQwIDAgUiAvVG9Vbmljb2RlIDQxIDAgUiAvRmlyc3RDaGFyIDMzIC9MYXN0Q2hh ciAzMyAvV2lkdGhzIFsgNjM2IF0gPj4KZW5kb2JqCjQxIDAgb2JqCjw8IC9MZW5ndGggMjIzIC9G aWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AV2QvW7EIBCEe55iy0txwr4aIUUXneQiP4qT B8CwWEjxgjAu/PZZiHORUmzBzHyrYeV1eBooFJBvOdoRC/hALuMat2wRJpwDif4CLthyvJpmF5OE ZHjc14LLQD6CUgJAvjOylrzD6dHFCR+q9pod5kAznD6vY1PGLaUvXJAKdEJrcOh53bNJL2ZBkA09 D479UPYzU3+Jjz0hcCMm+p9KNjpck7GYDc0oVNdpdbtpgeT+WQcw+SN56bWq4ydmav7XqWj94r2S 3XLmNu0OrWgtEAjvp0ox1QVtvgGNgHB4CmVuZHN0cmVhbQplbmRvYmoKNDAgMCBvYmoKPDwgL1R5 cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQUFBQUFEK0hlbHZldGljYU5ldWUtQm9sZCAv RmxhZ3MgNCAvRm9udEJCb3gKWy0xMDE4IC00ODEgMTQzNyAxMTQxXSAvSXRhbGljQW5nbGUgMCAv QXNjZW50IDk3NSAvRGVzY2VudCAtMjE3IC9DYXBIZWlnaHQKNzE0IC9TdGVtViAxNTcgL0xlYWRp bmcgMjkgL1hIZWlnaHQgNTE3IC9TdGVtSCAxMzIgL0F2Z1dpZHRoIDQ3OCAvTWF4V2lkdGgKMTUw MCAvRm9udEZpbGUyIDQyIDAgUiA+PgplbmRvYmoKNDIgMCBvYmoKPDwgL0xlbmd0aDEgMjAxMiAv TGVuZ3RoIDk4OCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGtVc1v22QYf147cdev NG76GS/UXtquNJlare2EEIcwnIpShALdhr1JhCz11oxmrUY6hjREDquQLOiF6yqxy25InoQ2U6G2 Jw67cOWwA4LL/gCQkLYl/F47mKaUqUJ7I7/P9/P+3p+tJ5VraxZ1UJVEyhTLhVXylvQDRLx4vaL6 tnAG8pVLq5fLDftLotDY5eVPL/m29AvkN0tWYdG36SnkqSU4fJtNQw4vlSs3fFv6DvLI8kqxEZd+ hi2VCzca59Mj2OrVQtny81scyPTqyseVhl2FnFy9ZjXymQH7iR/bszPoAo3j4cvfX+JKaMzz8Die mbnier7rtT/YoPiY+++/8efbXP7247dfP5VqQ+HN0BryWhsdvBrxp/pxSoQfIf5JeJN3aVqCSz0p tkUhilJfiu2QTMdpiOLUDbKJjqZ2oKVppMkTo+GmHNqhCE0iSaX+oKyLpinV5Inihnsb0Rb14GAl 5VKnmv2sNKC71JaCl+ECHRyV6CvbUMbQahBY2qk7tY2qYUrgMJnaYNM2SqbQXYMr4iVwNo+RQjHg QcIWhVEj4yT6+ySA66EyrdNXdBs3jdJ8PUJhIUIPBZkQqtBHdIs26HPaRFiuv0WdQpgiwkOS0SU9 71JrzrjH2Ibpsvq6q1PiezAv5j844RJLq2q2pDvsQxhCGo5xDZqYVmcdcWT2PSNpqrZqzy3a6qy6 VFh0QiOeRMCyzQnVoQWjhP2MoTkZUwlUyzRfRZ8Q74MSpNsmOlxpdID0XBPPkBROz6uOOJoz3jWc qq44Gd1UNE3NOrs5w9nVFc00kSUFSIGYvwIfcwswS+OIH/G7LKAHWpi2zXvCEkY1Z9e2FRs38TxJ zWXUcOCmPEccyboskzN4KJPUFO5IakkNOEwdvVvT8wtGFkg0jqTtX5SSvofS9gAocjsAr92jtPMF URo5DKVdh6I0GiBtolQG5iintPtgSpPPITRgOHMAw1Wf4eoBDMeaGO55PsO9AW6A7APaXo/h/hfE 8MBhGB48FMPxAGkTwwowxznDRwOGM4pDwUcLhqv7Pln6z2/4/1Ke2EM5+51k4SamB5/E/uTtIMmb kFrgIeqjHDIEDDOR/SrwqdeCAk3WYrImsy9qj9nAhdqEkK+RcOHZnPDAm+souIlZ9DKMpIzfzNTM 9Kmpk339vaPJY1KC7Td7kcNu3dk4e/bc+7HR7ng8MXgn0C5e3GB3a+fZ3fxY1hDZFVFRh/7R8rXz Hj5+D6rfppOesn/DvxYTWtaulmZPT056QYZx7d9awuim1/nSU29ay9etSqlYeMdas06cXllepL8A h8LANgplbmRzdHJlYW0KZW5kb2JqCjQzIDAgb2JqCjw8IC9UaXRsZSAocmVjb3Zlcmllcy1iZWNu aG1hcmstdjA0KSAvUHJvZHVjZXIgKG1hY09TIFZlcnNpb24gMTUuNy4zIFwoQnVpbGQgMjRHNDE5 XCkgUXVhcnR6IFBERkNvbnRleHQpCi9DcmVhdG9yIChOdW1iZXJzKSAvQ3JlYXRpb25EYXRlIChE OjIwMjYwNjIzMTMxNDQzWjAwJzAwJykgL01vZERhdGUgKEQ6MjAyNjA2MjMxMzE0NDNaMDAnMDAn KQo+PgplbmRvYmoKeHJlZgowIDQ0CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwNDcyNyAwMDAw MCBuIAowMDAwMDE1Mzc1IDAwMDAwIG4gCjAwMDAwMDAwMjIgMDAwMDAgbiAKMDAwMDAwNDg0MSAw MDAwMCBuIAowMDAwMDEwNjA1IDAwMDAwIG4gCjAwMDAwMTU1NzcgMDAwMDAgbiAKMDAwMDAyNjMz MyAwMDAwMCBuIAowMDAwMDMzNDg4IDAwMDAwIG4gCjAwMDAwMjQzODEgMDAwMDAgbiAKMDAwMDAw NTA5NCAwMDAwMCBuIAowMDAwMDA1Mzc5IDAwMDAwIG4gCjAwMDAwMDU0NDggMDAwMDAgbiAKMDAw MDAwNTczMSAwMDAwMCBuIAowMDAwMDA1ODAwIDAwMDAwIG4gCjAwMDAwMDYwODUgMDAwMDAgbiAK MDAwMDAwNjE1NCAwMDAwMCBuIAowMDAwMDA2NDM3IDAwMDAwIG4gCjAwMDAwMDY1MDYgMDAwMDAg biAKMDAwMDAwNjc4NSAwMDAwMCBuIAowMDAwMDA2ODU0IDAwMDAwIG4gCjAwMDAwMDcxMzAgMDAw MDAgbiAKMDAwMDAwNzE5OSAwMDAwMCBuIAowMDAwMDA3NDc4IDAwMDAwIG4gCjAwMDAwMDc1NDcg MDAwMDAgbiAKMDAwMDAwNzgyMyAwMDAwMCBuIAowMDAwMDE0MTI4IDAwMDAwIG4gCjAwMDAwMTU1 MzIgMDAwMDAgbiAKMDAwMDAxNTMzOCAwMDAwMCBuIAowMDAwMDA3ODkyIDAwMDAwIG4gCjAwMDAw MTA2NDEgMDAwMDAgbiAKMDAwMDAxNDE2NSAwMDAwMCBuIAowMDAwMDE1NDY4IDAwMDAwIG4gCjAw MDAwMTYwNDEgMDAwMDAgbiAKMDAwMDAxNjMwNyAwMDAwMCBuIAowMDAwMDI0ODY5IDAwMDAwIG4g CjAwMDAwMjQ1NTUgMDAwMDAgbiAKMDAwMDAyNTEzNCAwMDAwMCBuIAowMDAwMDI2NzgwIDAwMDAw IG4gCjAwMDAwMjcwNTQgMDAwMDAgbiAKMDAwMDAzMzk1NyAwMDAwMCBuIAowMDAwMDMzNjYxIDAw MDAwIG4gCjAwMDAwMzQyMzAgMDAwMDAgbiAKMDAwMDAzNTMwNSAwMDAwMCBuIAp0cmFpbGVyCjw8 IC9TaXplIDQ0IC9Sb290IDMyIDAgUiAvSW5mbyA0MyAwIFIgL0lEIFsgPDRmYTcwN2M5Y2U4N2Nk Yjg0ZjcwOGVhNTljOTgzMDk4Pgo8NGZhNzA3YzljZTg3Y2RiODRmNzA4ZWE1OWM5ODMwOTg+IF0g Pj4Kc3RhcnR4cmVmCjM1NTIzCiUlRU9GCg== --0000000000001a84cb0654ebb847--