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 1wW1lO-002LDp-1W for pgsql-hackers@arkaria.postgresql.org; Sun, 07 Jun 2026 00:53:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wW1lL-00GiBe-33 for pgsql-hackers@arkaria.postgresql.org; Sun, 07 Jun 2026 00:53:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wW1lK-00GiBR-0u for pgsql-hackers@lists.postgresql.org; Sun, 07 Jun 2026 00:53:15 +0000 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wW1lE-00000001T5s-18ZY for pgsql-hackers@lists.postgresql.org; Sun, 07 Jun 2026 00:53:13 +0000 Received: by mail-wr1-x435.google.com with SMTP id ffacd0b85a97d-45ef1629ff4so2006472f8f.0 for ; Sat, 06 Jun 2026 17:53:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780793585; cv=none; d=google.com; s=arc-20240605; b=hffAvYTZ1tGsQBm2OVBIRObJCd0ODFgGqNs/JYJA6kFB/NpMptmtFFLMHZsXmPNX1V iJ49xFm4KHdSh8ahV5bvczvlICDmyVk3hdlCMIUIUU3DuDVqnbxDCJQt+lri1wOag6r1 e3HlLjCS21OsJdxY5rCb1aT+obqdFW9TJoeTanEgpkjZd2pM+DRgyHaIlpCbv4TSkCf5 UPZG4hdnO8v+I8Z1S2VUDocQnt9m5ckLZGHD0ziSCvcBw6R7TLMraCGeOPh4MzamFSG5 LCNVfDhElb8Sl+hQgHLmDWUyHX8hmDB3bP60S6QY67IrKmpWDCKS37bdBRVQX7kQXmc3 sK8A== 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=Bwznq3Npx8ADbqlJDjhnJRYDglsy2LvXyPPvi017faY=; fh=j3ufd1xm8LW/erEyB1Mlc0hYKq5IcGtifOIbXaChCxk=; b=Hi374qpnrApMSiUjzYq8f8GQZs/6e3iwGjpHrR3C5wyIIcpaMofoy1lBmrcClTcDK5 w9O4F0DNnTSKQnE4WrRp8kf/HInz4ToTchWSQlmiQ3QhwZrc//e2NClTBLzhEzxMWLte 3GPLawvEVmp68isYcGnyvDDYwQcfjph2fbfFp94kQJXWJAAAv8L1Q9J5ICnqMbjhNr43 CsXwZNstivxoe8AtosAsFPgJeTXoexNi8ZeY67O0kEGY2buZxE/DEciNWmzAOr40Ecpv gPscL1GYoyICS3uYWMPytPZy2KDNUMEJLAtdWvo2bUvcTXmcr+Dg/IWdNdA7bey8606c v9yg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20251104.gappssmtp.com; s=20251104; t=1780793585; x=1781398385; darn=lists.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=Bwznq3Npx8ADbqlJDjhnJRYDglsy2LvXyPPvi017faY=; b=T+VhU9mvepbU9coVh5hhMLvdEez+Vh0AdlMZZrroxVsVLCiJ7iKLtbhaOB4To3SWz3 fho/ke+qo+HcNOVaqDz43Ec4yKwxuiID0qjmsBtXje0cJWQcqW2s4ia7H1eyl6OrYmSH a0aSHSbFNYwXrETzY5Nl36Lbi1A7+Y1PIR1udGoV0PiIsm57gKsN+98nHFTtFRjx7e/2 sH/ia4Qxi+QQt8MUlkaOdUtZCgTPxbYkKufqdCHws4p5UHJJBqU4UhqCf7S2H3Oj0ldc kldmdanGCYaV3UykRFSKvSqRLmOTS8ZTPXQn0dcjNZfa/81Q/48DNN4bdr/ST7wSHutO kpVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780793585; x=1781398385; 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=Bwznq3Npx8ADbqlJDjhnJRYDglsy2LvXyPPvi017faY=; b=TPOUqFMAeNnTac+FF6ucK0SGQw/2288v+vSPpiwwwku0I/EB6DiYM+i9n894+s2xuZ uHxsCtD/K4fGj39c/9oh5Hrf9J51jQYZ97OsGYw4p1XkpE/uYcaxBW0rXdw6vGWR4gVE B8bGWcIbgu0xnaDeHGQXqOX2Olo2hgu0Nd5wNyXE2xL+gzwE49rpcXjwfpOPxKiRYaho +2Ld3VlKKgtsLI/7r01VXk5GlNvRc76CfnFbLewaAc5TgZRJ9Myq8WU/+NIDCJDevRTl pbrZMt78T+5BigJCW2LjUbwCy+IWwbWL2pVURpaG/D+GskV+/m4ydGdSHxciXVjo74U2 Ko4A== X-Forwarded-Encrypted: i=1; AFNElJ9DiHrlJWs7MoHkd2SnC0M4fhFgkjhC+/4G0oqtyQwijVIVx4sc8OloNGAUmIeH3jEAjBgGyt7kb8lVZ6CG@lists.postgresql.org X-Gm-Message-State: AOJu0YzyHB3944J0P+26l/9NPs228Xg13mJ/ZVLYCkvB6CuTgbuNH87a OXzdm3IW81kciVt2JZxiCKlBOKsUXgpvyRfqqadK30MCHHAQK5AxO8YnVr6/j61mIP3gTXLqy33 n7iCvjrvrpoWfcOCXYXZc2Otg3/CYT29h59OYrNOz8w== X-Gm-Gg: Acq92OHDFRmmV2Fsl2VMKsZ/cPyZir3GhXBrrVtvnLv8JRoDq+6k+9G/kqH60TQi67/ p5SzJq7+MJQ7CplL33PJUnzaSLLbaACj0uGIlb6N0zwDAsJBUquxduls4j05sfkM8SkeGhtW6Cx AfleByeB5tDMJpcXA4I6LheIS0GP1mgd4SYdYqDgyF2ZPUDMFThUdmqLdyEmT9YGZs/IwK6ezKy rYp1g/pEue3GRIyOAOHWOypVkHtARnM47bkJJazwbITdY1W1WsR+L4dpK4+xAW8j+wwnMArvPCy ixlzXTsq6jT8ctwMmxAPCzUS9D9gEyKviwVhUSmMgVsR4meHqewlWHUwYlFp/UV41uc9FR1Be8Y = X-Received: by 2002:a5d:5f44:0:b0:45e:e1a4:c4c3 with SMTP id ffacd0b85a97d-460302fd190mr15694649f8f.15.1780793584385; Sat, 06 Jun 2026 17:53:04 -0700 (PDT) MIME-Version: 1.0 References: <6sphk3ycctmbihlrykts7uj6mjakop6wrq2dhe3vnlmrnldz2f@uuwmkd6jjrxa> In-Reply-To: <6sphk3ycctmbihlrykts7uj6mjakop6wrq2dhe3vnlmrnldz2f@uuwmkd6jjrxa> From: Peter Geoghegan Date: Sat, 6 Jun 2026 20:52:27 -0400 X-Gm-Features: AVVi8Cev0YacRGok8WMlIj6xnlTt6JwA4IJ35zxwvQ5EBp6HOynastOUr6EDCo8 Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="0000000000000468e006539f51e8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000468e006539f51e8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Apr 5, 2026 at 7:01=E2=80=AFPM Andres Freund w= rote: > Why would it require creating a tableam shaped slot internally? It seems > rather silly to store a tuple fetched to verify visibility into a slot, w= here > it is never used. Storing in a tuple requires an indirect things like > IncrBufferRefCount(), which isn't that cheap. Attached is v26, which resolves many outstanding issues from when we paused work on this, at the end of the final CF for Postgres 19. I'll highlight each change with its own bullet-point. The stand-out item is probably: * A new patch now implements gistgetbatch, which makes GiST scans do index prefetching. Performance is very similar to nbtree, so query execution time reductions of 20x or more are quite possible. heapam's prefetching approach generalizes very well across all core index AMs that support plain scans. This proves that the amgetbatch design is general enough to completely replace amgettuple, without any real downsides for index AMs. I want to flag something up-front about the GiST patch: it fixes a long standing bug in GiST index-only scans [1]. But there's a catch/downside: the fix works (in part) by teaching the planner to disallow index-only scans that use orderbyclauses, such as the <-> operator. I'll discuss why this makes sense at the end of the email. Note that the ordered scan issue isn't related to the amgetbatch design; it's fundamentally a problem with GiST, which has long ignored the rules about buffer pins explained in the docs "Index Locking Considerations" section. Making it follow those rules seems impossible for ordered scans specifically (but is quite doable for all other GiST scan types). Slot-related improvements ------------------------- I made many improvements to the high-level slot-passing API functions. I also improved certain lower-level details of how we use slots within heapam_indexscan.c. To start: * Index-only scans no longer need to use a buffered tuple table slot at all. As such, IoS callers to table_index_getnext_slot are no longer required to "lend heapam a buffered tuple slot", as in previous versions. Andres pointed out that the previous approach was silly, and it was. Now index-only scans use a temp HeapTuple directly; calling heap_hot_search_buffer doesn't truly require passing a slot (not now, at least). > I could see passing an ine shaped slot to table_index_getnext_ios(), whic= h > would improve the layering for nodeIndexonlyscan.c further. It's a bit g= ross > that there's this stuff in IndexOnlyNext() > > /* > * Fill the scan tuple slot with data from the index. Th= is might be > * provided in either HeapTuple or IndexTuple format. Co= nceivably an > * index AM might fill both fields, in which case we pref= er the heap > * format, since it's probably a bit cheaper to fill a sl= ot from. > */ > if (scandesc->xs_hitup) > { Agreed that the layering improvements within nodeIndexonlyscan.c still didn't go far enough in previous versions. Which brings me to my next highlight/improvement: * Index-only scans now use their own virtual slot to retrieve rows through table_index_getnext_slot, in the obvious and idiomatic way (just like plain scans, though using a different slot type). Places like nodeIndexonlyscan.c no longer perform ad-hoc reading of IndexScanDesc fields such as xs_itup, xs_hitup, and xs_recheck. Implementing this item necessitated moving the "Fill the scan tuple slot with data from the index" logic into heapam_indexscan.c, just as you'd predicted. I think that that's basically fine. I'm not entirely sure if the relevant function needs to be exported so other table AMs can call it. A non-obvious advantage of this approach is that it fixes a theoretical latent bug in selfuncs.c: it will sometimes scans an nbtree index on a name column, with cstring index storage, while arguably expecting that there is a full NAMEDATALEN of storage for each datum. This is not actually a bug in practice; we don't really read past the end of batch memory, because selfuncs.c doesn't actually do anything that runs that risk. Better to nail it down, though. Note that I didn't invent a new table_index_getnext_ios shim function (which Andres suggested during related discussion). The existing table_index_getnext_slot already provided everything needed. table_index_getnext_slot will now assert that its caller is using the expected kind of slot (either TTS_IS_BUFFERTUPLE or TTS_IS_VIRTUAL) according to whether the scan is !scan->xs_want_itup. I don't feel very strongly about this point, though. IndexScanDesc and IndexFetchTableData structs --------------------------------------------- A few notable things to say here. > > > > - struct IndexFetchTableData *(*index_fetch_begin) (Relation re= l, uint32 flags); > > > > + struct IndexFetchTableData *(*index_fetch_begin) (IndexScanDe= sc scan, > > > > + = uint32 flags); > > > > > > I kinda wonder if this should look roughly like this instead: > > > > > > /* size of the tableam's IndexFetchTableData */ > > > size_t index_fetch_state_size; > > > void *(*index_fetch_begin) (Relation rel, IndexScanDesc scan, Ind= exFetchTableData *table_fetch, uint32 flags); > > > > > > Moving the allocation of the IndexFetchTableData to the caller. The = advantage > > > would be that this would allow us to later combine the allocation of = the > > > IndexScanDesc with the IndexFetchTableData, without again needing to = change > > > the tableam interface. Maybe it makes sense to share one allocation for everything in the way that you've outline here, but I haven't done that yet. That seems like strictly an optimization to me. However: * I completely removed the IndexFetchTableData struct, which seems pointless given our extensive use of IndexScanDesc in heapam_indexscan.c. We do keep the underlying heapam struct (IndexFetchHeapData), which is now accessed through a void pointer in IndexScanDesc -- exactly like it's done with index AMs. There's no more "inheritance from IndexFetchTableData", which seems to add nothing anymore. There's also a tangentially related index AM/table AM API improvement: * New IndexAmRoutine.amcanmarkpos field determines whether an index AM can support mark/restore. Only nbtree sets IndexAmRoutine.amcanmarkpos=3Dtrue. We now require that index AMs explicitly opt in to mark/restore support (like on master), rather than implicitly making every index AM support mark/restore just because they use amgetbatch. That was the theoretical contract in previous patch versions, which was silly; while hash index scans can arguably support mark/restore, allowing it makes no sense. And GiST index scans certainly cannot support it. GiST fundamentally expects to control the progress of the scan itself, even with the new gistgetbatch support (which is why it still sets IndexAmRoutine.amcanbackward=3Dfalse and IndexAmRoutine.amcanmarkpos=3Dfalse along with it, and why it doesn't even save sibling links in its opaque area). Batch allocation, layout, opaque areas -------------------------------------- I've improved how batches are laid out in memory. These improvements affect both table AMs and index AMs in various ways. Improving the layout of batches (and making related API enhancements) addressed problems in many areas. > I guess I was just a bit saddened by > indexam_util_batch_alloc() > ->table_index_fetch_batch_init() > having to do > > scan->heapRelation->rd_tableam->index_fetch_batch_init(scan, batc= h, new_alloc); > > that's a lot of indirection to go through. Most of the indirection is now avoided: * We now avoid calling index_fetch_batch_init during scans whose table AM didn't request any opaque area be made available in batches. In practice this means that heapam plain index scans (and all bitmap index scans) don't call index_fetch_batch_init at all. Now index_fetch_batch_init is strictly about initializing the table AM opaque area; scans without such an area in their batches will never receive any calls to their index_fetch_batch_init callback. * Layering improvement, related to the last item: We no longer condition whether a table AM opaque area is included in each allocated batch on whether the scan is index-only or not. We simply condition it on whether the table AM asked us for an opaque area at the start of the scan. Obviously, other table AMs might have "table AM opaque area" requirements that don't match heapam. The table AM can choose to use an opaque area for its own reasons, whatever they are. It can also control the precise layout of the opaque area. This area might include a per-item portion, usually for visibility info, but it doesn't have to; it can be a fixed-size struct or a simple array without any struct header. * We now make the table AM opaque area in each batch a single contiguous area. heapam uses a flexible array member for this (when it requests its own opaque area in the first place). * heapam_index_fetch_batch_init no longer needs to memset() visibility info as batches are allocated/recycled. The HeapBatchData struct now contains the bounds of a range of known-set items from the batch it is contained within (this information is in its header struct, before the flexible array member at the end). Visibility info for each batch item is stored in HeapBatchData's flexible array member. When index_fetch_batch_init is called, heapam_index_fetch_batch_init will just invalidate the HeapBatchData bounds instead of calling memset. Avoiding the memset might be a minor performance win (completely skipping most index_fetch_batch_init calls certainly was). But FWIW I actually did things this way because it seemed a bit clearer to me. And because it proves that the new flexible array scheme actually works. gistgetbatch support and batch layout ------------------------------------- As I mentioned, other changes to the batch layout specifically concern index AMs. One AM in particular: GiST. I mentioned at the start of this email that GiST scans are now supported. This improvement affects the core indexbatch.h contract for index AMs, but actually appears in the later GiST patch: * Index AMs can now optionally request a second, dynamically-sized opaque area (similar to those that table AMs request). This area should not be confused with the standard fixed-offset/fixed-size struct that the index AM must use in every batch. That remains mandatory, and is still at a fixed offset, known at compile time. Only GiST (and maybe SP-GiST) will find this second area concept useful. It's a relatively niche facility. In short, this new area gives those index AMs a way to store tuple-level state required to implement all of the features that weren't possible in earlier versions of the patch set. This other opaque area gives the index AM "just enough tuple-level processing to get by". gistgetbatch scans are fundamentally structured around generating batches for each leaf page, just like btgetbatch and hashgetbatch scans always were. However, a new amgettransform callback is registered when the AM needs to perform tuple-level processing later (at the point where the executor actually needs to return items). GiST's new amgettransform callback (gitgettransform) ---------------------------------------------------- This two-phase approach keeps the scan process simple. We store GiST's on-disk format tuples in currTuples (just like nbtree), only converting them into scan->xs_hitup format tuples when they are actually consumed/returned. That way we can size each batch's currTuples to BLCKSZ, enabling the same batch memory management strategy used in other index AMs -- we can freely recycle batches because their layout is fixed and predictable (for the duration of a given scan). Our approach generally simplifies resource management: GiST support functions like leaking memory, but amgettransform can reset an internal memory context every time another tuple is returned. We primarily need amgettransform to handle rechecks in the core executor, which might be required for any individual tuple, during any GiST index scan. GiST opclasses have always been permitted to implement a consistent function that can unpredictably cause individual tuples to require (or not require) a recheck in the core executor (unlike hash and nbtree, which always and never require a recheck respectively). That "tuple needs recheck" information must travel with the matching items in the same batch, so it can ultimately be returned to executor node callers (table_index_getnext_slot callers) at the tuple granularity. Why GiST ordered index-only scans were disabled, "virtual" batches ------------------------------------------------------------------ As I mentioned in passing at the start of this email, GiST ordered index-only scans are disabled in the planner by the GiST patch. This disabling is necessary to fully fix the bugs in GiST index-only scans [1]. Most GiST index-only scans now follow the exact same locking protocol as nbtree index-only scans, which fixes the bug for those scan types (note that GiST VACUUM now acquires cleanup locks that'll conflict with pins held by scans). But ordered scans are different, and require their own custom solution: disabling them altogether in the planner. The crucial difference between ordered GiST scans and "standard" GiST scans is in how batches are formed. Ordered scans use "virtual batches", which are groups of tuples that we *pretend* were returned from a single leaf page that stored the tuples in the scan's required sort order. In reality, the underlying tuples may originate from many different leaf pages. Holding many buffer pins as an interlock against concurrent TID recycling (released by gistunguardbatch during index-only scans) just isn't practical here, since we might have to hold an indeterminate number of pins at once. It seems very difficult, perhaps impossible, to limit the worst-case number of required pins. Why shouldn't a badly implemented GiST opclass require an ordered index-only scan to pin almost every leaf page in the index before GiST can return even one index tuple to the scan? How can we nail down all that stuff in a way that works in the general case? This isn't a problem for prefetching's read stream -- the problem is that the backend might run out of pins. I don't see a way around that problem. Even if it's possible, the effort and testing required to get it right seems unlikely to be worth it. Another closely related consequence of using virtual batches is that we cannot safely perform LP_DEAD-marking of index tuples within gistkillitemsbatch. That restriction is nothing new, though; that has never been supported. In general, using virtual batches (for ordered scans) implies restrictions similar to those that have long affected bitmap scans (no VM access due to the resulting TID interlock race conditions [2], no setting of LP_DEAD bits). Things I haven't done --------------------- * There have been recent CI failures on "linux-autoconf", that I haven't debugged. 001_aio.pl seems to reliably report "Dubious, test returned 4 (wstat 1024, 0x400)" on this CI target. I fully expect this v26 to fail when CFTester runs it through CI. I strongly suspect an issue in Andres' "Allow read_stream_reset() to not wait for IO completion" patch is involved here. It could just be a bug in the new 001_aio.pl tests added by that patch. It certainly cannot be a bug in index prefetching itself, since it isn't exercised by 001_aio.pl at all. * I've not given much thought to improving the cost model of index scans, to account for prefetching. I believe the planner's cost functions give bitmap scans an undue advantage over plain scans, at least with prefetching. It would definitely make sense to start thinking about how to fix this problem, but I haven't really started on that. I think that we probably need to do something like stop charging random_page_cost (and charge sequential page cost instead) once the scan has processed a certain number of index pages and/or heap pages. That is roughly how it's done already when costing bitmap heap scans. * Continued to care about pg_attribute_always_inline making certain function prototypes overlong and ugly. Andres has a patch to shorten pg_attribute_always_inline to pg_always_inline in the open CF, which will presumably be committed soon. I don't want to forego prototypes; I am particular about the order in which function definitions appear. For now, ugly and overlong prototypes seem acceptable (I won't commit any patches with that issue). > Which is what then made me think of embedding something like a > TableIndexFetchRoutine (with batch_init, reset, markpos, restrpos, end > members) in IndexScanDesc. That way table_index_{fetch_reset,batch_Init,.= ..}() > wouldn't need this level of indirection. * I didn't go this far. > > Code reuse is a virtue, but it isn't the highest virtue. Splitting up > > this function is possible but quite awkward. > > Not having the same code in multiple table AMs would make it easier to wr= ite > them, which would be nice in itself, but I am more concerned with ending = up > with copies of heapam_index_getnext_scanbatch_pos() in various AMs, us fi= nding > problems with heapam_index_getnext_scanbatch_pos() in a minor release, an= d > having a harder time adjusting things due to the copied code. * I still haven't made progress on making heapam_index_getnext_scanbatch_pos into a generic helper. * I haven't added SP-GiST support. I think that this can be done, but I'm not sure if it's worth the trouble. SP-GiST VACUUM seems to do some weird things with buffer pins, and I don't really understand how it deals with redirects. Besides, we might be better off keeping SP-GiST as-is, so we have one amgettuple index AM left for testing purposes. The GiST patch should remove any doubt that the new amgetbatch API is a suitable replacement for amgettuple; we should actually deprecate amgettuple at some point. But I'm in no hurry. [1] https://postgr.es/m/CAH2-Wz=3DjjiNL9FCh8C1L-GUH15f4WFTWub2x+_NucngcDDcH= Kw@mail.gmail.com [2] See commit 459e7bf8, which showed that bitmap scans cannot safely access the VM as an optimization (this is very similar to the extant bugs in GiST and SP-GiST) -- Peter Geoghegan --0000000000000468e006539f51e8 Content-Type: application/octet-stream; name="v26-0008-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Disposition: attachment; filename="v26-0008-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq31b3dw2 RnJvbSA1MmRiOWJjM2RhYTc1NjQ3NzkyNGE5N2NjNDVlNjQ2MzNlNjI2OWIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTI6NDEgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNiA4 LzldIGFpbzogRml4IHBnYWlvX2lvX3dhaXQoKSBmb3Igc3RhZ2VkIElPcyAoQikuCgpQcmV2aW91 c2x5LCBwZ2Fpb19pb193YWl0KCkncyBjYXNlcyBmb3IgUEdBSU9fSFNfREVGSU5FRCBhbmQKUEdB SU9fSFNfU1RBR0VEIGZlbGwgdGhyb3VnaCB0byB3YWl0aW5nIGZvciBjb21wbGV0aW9uLiAgVGhl IG93bmVyIG9ubHkKcHJvbWlzZXMgdG8gYWR2YW5jZSBpdCB0byBQR0FJT19IU19TVUJNSVRURUQu ICBUaGUgd2FpdGVyIG5lZWRzIHRvIGJlCnByZXBhcmVkIHRvIGNhbGwgLT53YWl0X29uZSgpIGl0 c2VsZiBvbmNlIHRoZSBJTyBpcyBzdWJtaXR0ZWQgaW4gb3JkZXIKdG8gZ3VhcmFudGVlIHByb2dy ZXNzIGFuZCBhdm9pZCBkZWFkbG9ja3Mgb24gSU8gbWV0aG9kcyB0aGF0IHByb3ZpZGUKLT53YWl0 X29uZSgpLgoKSW50cm9kdWNlIGEgbmV3IHBlci1iYWNrZW5kIGNvbmRpdGlvbiB2YXJpYWJsZSBz dWJtaXRfY3YsIHdva2VuIGJ5IGJ5CnBnYWlvX3N1Ym1pdF9zdGFnZSgpLCBhbmQgdXNlIGl0IHRv IHdhaXQgZm9yIHRoZSBzdGF0ZSB0byBhZHZhbmNlLiAgVGhlCm5ldyBicm9hZGNhc3QgZG9lc24n dCBzZWVtIHRvIGNhdXNlIGFueSBtZWFzdXJhYmxlIHNsb3dkb3duLCBzbyBpZGVhcwpmb3Igb3B0 aW1pemluZyB0aGUgY29tbW9uIG5vLXdhaXRlcnMgY2FzZSB3ZXJlIGFiYW5kb25lZCBmb3Igbm93 LgoKSXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byByZWFjaCBhbnkgcmVhbCBkZWFkbG9jayB3aXRo IGV4aXN0aW5nIEFJTwp1c2VycywgYnV0IHRoYXQgc2l0dWF0aW9uIGNvdWxkIGNoYW5nZS4gIFRo ZXJlJ3MgYWxzbyBubyByZWFzb24gdGhlCndhaXRlciBzaG91bGRuJ3QgYmVnaW4gdG8gd2FpdCB2 aWEgdGhlIElPIG1ldGhvZCBhcyBzb29uIGFzIHBvc3NpYmxlCmV2ZW4gd2l0aG91dCBhIGRlYWRs b2NrLgoKUGlja2VkIHVwIGJ5IHRlc3RpbmcgYSBwcm9wb3NlZCBJTyBtZXRob2QgdGhhdCBoYXMg LT53YWl0X29uZSgpLCBsaWtlCmlvX21ldGhvZD1pb191cmluZywgYW5kIGNvZGUgcmV2aWV3LgoK QmFja3BhdGNoLXRocm91Z2g6IDE4ClJldmlld2VkLWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNA YW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ElMkJoVUtHJTJC bVpZclNkbmhrLVhyQllPMThIODI5Szc3UzlnTUtVc3lrT2lUSnRxQjQzZyU0MG1haWwuZ21haWwu Y29tCi0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaCAgICAgICAgICAgIHwg IDcgKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyAgICAgICAgICAgICAgICAgfCA1 MCArKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5j ICAgICAgICAgICAgfCAgMSArCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50 eHQgICAgICAgfCAgMSArCiA0IGZpbGVzIGNoYW5nZWQsIDUxIGluc2VydGlvbnMoKyksIDggZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgKaW5kZXggOWNhNDA4N2FhLi5j M2FmZGU0ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaApAQCAtMjE2LDYgKzIxNiwx MyBAQCB0eXBlZGVmIHN0cnVjdCBQZ0Fpb0JhY2tlbmQKIAl1aW50MTYJCW51bV9zdGFnZWRfaW9z OwogCVBnQWlvSGFuZGxlICpzdGFnZWRfaW9zW1BHQUlPX1NVQk1JVF9CQVRDSF9TSVpFXTsKIAor CS8qCisJICogT3RoZXIgYmFja2VuZHMgc29tZXRpbWVzIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG93 bmluZyBiYWNrZW5kIHRvIHN1Ym1pdC4KKwkgKiBUaGUgcGVyLUlPIENWIHdvdWxkIHdvcmsgZm9y IHRoYXQgcHVycG9zZSwgYnV0IGEgcGVyLWJhY2tlbmQgQ1YgYWxsb3dzCisJICogZm9yIGp1c3Qg b25lIGJyb2FkY2FzdCBwZXIgc3VibWl0dGVkIGJhdGNoLgorCSAqLworCUNvbmRpdGlvblZhcmlh YmxlIHN1Ym1pdF9jdjsKKwogCS8qCiAJICogTGlzdCBvZiBpbi1mbGlnaHQgSU9zLiBBbHNvIGNv bnRhaW5zIElPcyB0aGF0IGFyZW4ndCBzdHJpY3RseSBzcGVha2luZwogCSAqIGluLWZsaWdodCBh bnltb3JlLCBidXQgaGF2ZSBiZWVuIHdhaXRlZC1mb3IgYW5kIGNvbXBsZXRlZCBieSBhbm90aGVy CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYWlvL2Fpby5jCmluZGV4IDcwMDlmYjdmNi4uY2UyZjczYmZmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9haW8uYwpAQCAtNTkzLDYgKzU5MywxNiBAQCBwZ2Fpb19pb193YXNfcmVjeWNsZWQoUGdB aW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5lcmF0aW9uLCBQZ0Fpb0hhbmRsZVN0YXRlCiAJ cmV0dXJuIGlvaC0+Z2VuZXJhdGlvbiAhPSByZWZfZ2VuZXJhdGlvbjsKIH0KIAorLyoKKyAqIFdo ZXRoZXIgd2UgbmVlZCB0byB3YWl0IHZpYSB0aGUgSU8gbWV0aG9kLiBEb24ndCBjaGVjayB2aWEg dGhlIElPIG1ldGhvZCBpZgorICogdGhlIGlzc3VpbmcgYmFja2VuZCBpcyBleGVjdXRpbmcgdGhl IElPIHN5bmNocm9ub3VzbHkuCisgKi8KK3N0YXRpYyBib29sCitwZ2Fpb19pb19uZWVkc193YWl0 X29uZShQZ0Fpb0hhbmRsZSAqaW9oKQoreworCXJldHVybiBwZ2Fpb19tZXRob2Rfb3BzLT53YWl0 X29uZSAmJiAhKGlvaC0+ZmxhZ3MgJiBQR0FJT19IRl9TWU5DSFJPTk9VUyk7Cit9CisKIC8qCiAg KiBXYWl0IGZvciBJTyB0byBjb21wbGV0ZS4gRXh0ZXJuYWwgY29kZSBzaG91bGQgbmV2ZXIgdXNl IHRoaXMsIG91dHNpZGUgb2YKICAqIHRoZSBBSU8gc3Vic3lzdGVtIHdhaXRzIGFyZSBvbmx5IGFs bG93ZWQgdmlhIHBnYWlvX3dyZWZfd2FpdCgpLgpAQCAtNjMyLDIzICs2NDIsMzggQEAgcGdhaW9f aW9fd2FpdChQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24pCiAJCQkJZWxv ZyhFUlJPUiwgIklPIGluIHdyb25nIHN0YXRlOiAlZCIsIHN0YXRlKTsKIAkJCQlicmVhazsKIAot CQkJY2FzZSBQR0FJT19IU19TVUJNSVRURUQ6CisJCQljYXNlIFBHQUlPX0hTX0RFRklORUQ6CisJ CQljYXNlIFBHQUlPX0hTX1NUQUdFRDoKIAogCQkJCS8qCi0JCQkJICogSWYgd2UgbmVlZCB0byB3 YWl0IHZpYSB0aGUgSU8gbWV0aG9kLCBkbyBzbyBub3cuIERvbid0Ci0JCQkJICogY2hlY2sgdmlh IHRoZSBJTyBtZXRob2QgaWYgdGhlIGlzc3VpbmcgYmFja2VuZCBpcyBleGVjdXRpbmcKLQkJCQkg KiB0aGUgSU8gc3luY2hyb25vdXNseS4KKwkJCQkgKiBUaGUgb3duZXIgaGFzbid0IHN1Ym1pdHRl ZCB0aGUgSU8geWV0LiBJZiB3ZSBuZWVkIHRvIHdhaXQKKwkJCQkgKiB2aWEgdGhlIElPIG1ldGhv ZCwgd2FpdCBmb3Igc3VibWlzc2lvbiwgZ2l2aW5nIHRoaXMgYmFja2VuZAorCQkJCSAqIHRoZSBj aGFuY2UgdG8gY2FsbCAtPndhaXRfb25lKCkuCiAJCQkJICovCi0JCQkJaWYgKHBnYWlvX21ldGhv ZF9vcHMtPndhaXRfb25lICYmICEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX1NZTkNIUk9OT1VTKSkK KwkJCQlpZiAocGdhaW9faW9fbmVlZHNfd2FpdF9vbmUoaW9oKSkKKwkJCQl7CisJCQkJCVBnQWlv QmFja2VuZCAqYmFja2VuZCA9ICZwZ2Fpb19jdGwtPmJhY2tlbmRfc3RhdGVbaW9oLT5vd25lcl9w cm9jbm9dOworCisJCQkJCUNvbmRpdGlvblZhcmlhYmxlUHJlcGFyZVRvU2xlZXAoJmJhY2tlbmQt PnN1Ym1pdF9jdik7CisJCQkJCXdoaWxlICghcGdhaW9faW9fd2FzX3JlY3ljbGVkKGlvaCwgcmVm X2dlbmVyYXRpb24sICZzdGF0ZSkgJiYKKwkJCQkJCSAgIChzdGF0ZSA9PSBQR0FJT19IU19ERUZJ TkVEIHx8CisJCQkJCQkJc3RhdGUgPT0gUEdBSU9fSFNfU1RBR0VEKSkKKwkJCQkJCUNvbmRpdGlv blZhcmlhYmxlU2xlZXAoJmJhY2tlbmQtPnN1Ym1pdF9jdiwgV0FJVF9FVkVOVF9BSU9fSU9fU1VC TUlUKTsKKwkJCQkJQ29uZGl0aW9uVmFyaWFibGVDYW5jZWxTbGVlcCgpOworCQkJCQljb250aW51 ZTsKKwkJCQl9CisJCQkJcGdfZmFsbHRocm91Z2g7CisKKwkJCWNhc2UgUEdBSU9fSFNfU1VCTUlU VEVEOgorCisJCQkJLyogSWYgd2UgbmVlZCB0byB3YWl0IHZpYSB0aGUgSU8gbWV0aG9kLCBkbyBz byBub3cuICovCisJCQkJaWYgKHBnYWlvX2lvX25lZWRzX3dhaXRfb25lKGlvaCkpCiAJCQkJewog CQkJCQlwZ2Fpb19tZXRob2Rfb3BzLT53YWl0X29uZShpb2gsIHJlZl9nZW5lcmF0aW9uKTsKIAkJ CQkJY29udGludWU7CiAJCQkJfQogCQkJCXBnX2ZhbGx0aHJvdWdoOwogCi0JCQkJLyogd2FpdGlu ZyBmb3Igb3duZXIgdG8gc3VibWl0ICovCi0JCQljYXNlIFBHQUlPX0hTX0RFRklORUQ6Ci0JCQlj YXNlIFBHQUlPX0hTX1NUQUdFRDoKIAkJCQkvKiB3YWl0aW5nIGZvciByZWFwZXIgdG8gY29tcGxl dGUgKi8KIAkJCQkvKiBmYWxsdGhyb3VnaCAqLwogCQkJY2FzZSBQR0FJT19IU19DT01QTEVURURf SU86CkBAIC0xMjI2LDYgKzEyNTEsMTUgQEAgcGdhaW9fc3VibWl0X3N0YWdlZCh2b2lkKQogCiAJ cGdhaW9fbXlfYmFja2VuZC0+bnVtX3N0YWdlZF9pb3MgPSAwOwogCisJLyoKKwkgKiBXYWtlIGFu eSBiYWNrZW5kIHRoYXQgc3RhcnRlZCB3YWl0aW5nIGZvciBhbnkgb2YgdGhlc2UgSU9zIGJlZm9y ZQorCSAqIHN1Ym1pc3Npb24sIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBjYWxsIC0+d2FpdF9vbmUo KSB0byBndWFyYW50ZWUKKwkgKiBwcm9ncmVzcyB3aXRoIHRoZSBjb25maWd1cmVkIElPIG1ldGhv ZC4gIE9uIGl0cyBzaWRlLCBwZ2Fpb19pb193YWl0KCkKKwkgKiBvbmx5IHdhaXRzIGZvciBzdWJt aXRfY3Ygb24gSU8gbWV0aG9kcyBuZWVkaW5nIHRoYXQuCisJICovCisJaWYgKHBnYWlvX21ldGhv ZF9vcHMtPndhaXRfb25lKQorCQlDb25kaXRpb25WYXJpYWJsZUJyb2FkY2FzdCgmcGdhaW9fbXlf YmFja2VuZC0+c3VibWl0X2N2KTsKKwogCXBnYWlvX2RlYnVnKERFQlVHNCwKIAkJCQkiYWlvOiBz dWJtaXR0ZWQgJWQgSU9zIiwKIAkJCQl0b3RhbF9zdWJtaXR0ZWQpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L2Fpb19pbml0LmMKaW5kZXggZGEzMGQ3OTJhLi42ZmMwMGE5MTcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vYWlvX2luaXQuYwpAQCAtMTk5LDYgKzE5OSw3IEBAIEFpb1NobWVtSW5pdCh2b2lkICphcmcp CiAKIAkJZGNsaXN0X2luaXQoJmJzLT5pZGxlX2lvcyk7CiAJCW1lbXNldChicy0+c3RhZ2VkX2lv cywgMCwgc2l6ZW9mKFBnQWlvSGFuZGxlICopICogUEdBSU9fU1VCTUlUX0JBVENIX1NJWkUpOwor CQlDb25kaXRpb25WYXJpYWJsZUluaXQoJmJzLT5zdWJtaXRfY3YpOwogCQlkY2xpc3RfaW5pdCgm YnMtPmluX2ZsaWdodF9pb3MpOwogCiAJCS8qIGluaXRpYWxpemUgcGVyLWJhY2tlbmQgSU9zICov CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVz LnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0Cmlu ZGV4IDU2MDY1OWY5NS4uN2MzMzI2MzQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAtMjAwLDYgKzIwMCw3IEBAIEFCSV9jb21wYXRp YmlsaXR5OgogU2VjdGlvbjogQ2xhc3NOYW1lIC0gV2FpdEV2ZW50SU8KIAogQUlPX0lPX0NPTVBM RVRJT04JIldhaXRpbmcgZm9yIGFub3RoZXIgcHJvY2VzcyB0byBjb21wbGV0ZSBJTy4iCitBSU9f SU9fU1VCTUlUCSJXYWl0aW5nIGZvciBhbm90aGVyIHByb2Nlc3MgdG8gc3VibWl0IElPLiIKIEFJ T19JT19VUklOR19TVUJNSVQJIldhaXRpbmcgZm9yIElPIHN1Ym1pc3Npb24gdmlhIGlvX3VyaW5n LiIKIEFJT19JT19VUklOR19FWEVDVVRJT04JIldhaXRpbmcgZm9yIElPIGV4ZWN1dGlvbiB2aWEg aW9fdXJpbmcuIgogQkFTRUJBQ0tVUF9SRUFECSJXYWl0aW5nIGZvciBiYXNlIGJhY2t1cCB0byBy ZWFkIGZyb20gYSBmaWxlLiIKLS0gCjIuNTMuMAoK --0000000000000468e006539f51e8 Content-Type: application/octet-stream; name="v26-0001-Add-slot-based-table-AM-index-scan-interface.patch" Content-Disposition: attachment; filename="v26-0001-Add-slot-based-table-AM-index-scan-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq31b3d50 RnJvbSA0M2NkNTkxOTU1MDM0NDczMDEwYjg1YTljOTU5YWYyZTY2NDYzNDc1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MzY6NTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNiAxLzldIEFk ZCBzbG90LWJhc2VkIHRhYmxlIEFNIGluZGV4IHNjYW4gaW50ZXJmYWNlLgoKQWRkIHRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdCwgYSBuZXcgdGFibGUgQU0gY2FsbGJhY2sgdGhhdCB3cmFwcyBib3Ro CnBsYWluIGFuZCBpbmRleC1vbmx5IGluZGV4IHNjYW5zIHRoYXQgdXNlIGFtZ2V0dHVwbGUuICBU d28gbmV3IGhlYXBhbQpjYWxsYmFja3MgYXJlIGludHJvZHVjZWQgLS0gb25lIGZvciBwbGFpbiBz Y2FucyBhbmQgb25lIGZvciBpbmRleC1vbmx5CnNjYW5zIC0tIHdoaWNoIGFuIHVwY29taW5nIGNv bW1pdCB0aGF0IGFkZHMgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlCndpbGwgZXhwYW5kIHRvIGZv dXIuICBUaGUgYXBwcm9wcmlhdGUgY2FsbGJhY2sgaXMgcmVzb2x2ZWQgb25jZSBpbgppbmRleF9i ZWdpbnNjYW4sIGFuZCBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgKHhzX2dldG5l eHRfc2xvdCkKb24gdGhlIEluZGV4U2NhbkRlc2Mgd2hlbiB0aGUgdGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90IHNoaW0gZnVuY3Rpb24gaXMKY2FsbGVkIGZyb20gZXhlY3V0b3Igbm9kZXMuICAoVGFi bGUgQU1zIGNhbiBjcmVhdGUgc3BlY2lhbGl6ZWQgdmFyaWFudHMKdG8gaGVscCB0aGUgY29tcGls ZXIgcHJvZHVjZSBtb3JlIGVmZmljaWVudCBjb2RlLCBidXQgdGhleSBzaG91bGQgYWx3YXlzCmJl IGFibGUgdG8gcHJvdmlkZSBleGFjdGx5IG9uZSBnZW5lcmljIGNhbGxiYWNrIGlmIHRoYXQgbWFr ZXMgc2Vuc2UuKQoKVGhpcyBtb3ZlcyBWTSBjaGVja3MgZm9yIGluZGV4LW9ubHkgc2NhbnMgb3V0 IG9mIHRoZSBleGVjdXRvciBhbmQgaW50bwpoZWFwYW0sIGVuYWJsaW5nIGJhdGNoaW5nIG9mIHZp c2liaWxpdHkgbWFwIGxvb2t1cHMgKHRob3VnaCBmb3Igbm93IHdlCmNvbnRpbnVlIHRvIGp1c3Qg cGVyZm9ybSByZXRhaWwgbG9va3VwcykuICBVc2luZyB0aGUgbmV3IGhpZ2hlciBsZXZlbApzbG90 LWJhc2VkIGludGVyZmFjZSBncmVhdGx5IHNpbXBsaWZpZXMgbm9kZUluZGV4b25seXNjYW4uYywg d2hpY2ggbm8KbG9uZ2VyIGhhcyB0byBkZWFsIHdpdGggdGhlIHZpc2liaWxpdHkgbWFwIGRpcmVj dGx5LiAgTW9yZSBpbXBvcnRhbnRseSwKdGhpcyBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVy YWwgaW1wcm92ZW1lbnQ6IHRhYmxlIEFNcyBjYW4gbm93CmltcGxlbWVudCBpbmRleC1vbmx5IHNj YW5zIHRoYXQgYXJlIG5vdCB0aWVkIHRvIGhlYXBhbSdzIHZpc2liaWxpdHkgbWFwLgoKQSBzbWFs bCBtaW5vcml0eSBvZiBjYWxsZXJzICgyIGNhbGxlcnMgaW4gdG90YWwpIGZ1bmRhbWVudGFsbHkg bmVlZCB0bwpwYXNzIGEgVElEIHRvIHRoZSB0YWJsZSBBTSAoYm90aCBwZXJmb3JtIGNvbnN0cmFp bnQgZW5mb3JjZW1lbnQpLiAgVGhlc2UKY2FsbGVycyBkb24ndCBhY3R1YWxseSBwZXJmb3JtIGlu ZGV4IHNjYW5zIChldmVuIGlmIHRoZWlyIFRJRHMgYXJlIHRha2VuCmZyb20gYW4gaW5kZXgpLCBh bmQgaGF2ZSBubyBuZWVkIGZvciBtb3N0IG9mIHRoZSBpbmRleCBzY2FuIG1hY2hpbmVyeS4KU3dp dGNoIHRoZXNlIGNhbGxlcnMgb3ZlciB0byB0aGUgbmV3IGZldGNoX3RpZCBpbnRlcmZhY2UgKHdo aWNoIHJlcGxhY2VzCnRoZSBwcmV2aW91cyBUSUQtYmFzZWQgaW5kZXhfZmV0Y2hfdHVwbGUgaW50 ZXJmYWNlKS4gIEFsbCBpbmRleCBzY2FuCmNhbGxlcnMgbm93IHVzZSB0aGUgbmV3IHNsb3QtYmFz ZWQgaW50ZXJmYWNlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QpLgoKVGhlIFZJU0lURURfUEFH RVNfTElNSVQgbWVjaGFuaXNtIHVzZWQgYnkgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSB0bwpj YXAgc2NhbiBvdmVyaGVhZCBkdXJpbmcgcGxhbm5pbmcgaXMgcmV3b3JrZWQgdG8gZ28gdGhyb3Vn aCBhIG5ldyBzY2FuCmRlc2NyaXB0b3IgaW50ZXJmYWNlICh4c192aXNpdGVkX3BhZ2VzX2xpbWl0 KSwgcmF0aGVyIHRoYW4gdHJhY2tpbmcgdGhlCmNvc3RzIGRpcmVjdGx5IGFuZCB0ZXJtaW5hdGlu ZyB0aGUgc2NhbiBpdHNlbGYsIGluIGFuIGFkLWhvYyB3YXkuICBUaGlzCmlzIG5lY2Vzc2FyeSBi ZWNhdXNlIGNhbGxlcnMgdGhhdCB1c2UgdGhlIG5ldyBzbG90LWJhc2VkIGludGVyZmFjZSBubwps b25nZXIgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHdoaWNoIGhlYXAgYmxvY2tzIHdlcmUgZmV0Y2hl ZC4gIFNpbWlsYXJseSwKbm9kZUluZGV4b25seXNjYW4uYyBjYW4gbm8gbG9uZ2VyIHVzZSBJbnN0 ckNvdW50VHVwbGVzMiB0byBjb3VudCBoZWFwCmZldGNoZXMgZHVyaW5nIGFuIEVYUExBSU4gQU5B TFlaRS4gIEVYUExBSU4gQU5BTFlaRSBub3cgb2J0YWlucyB0aGlzCmluZm9ybWF0aW9uIGZyb20g YSBuZXcgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGZpZWxkLCB3aGljaCB0YWJsZSBBTXMKYXJl IHJlcXVpcmVkIHRvIG1haW50YWluLgoKVGhvdWdoIGluZGVwZW5kZW50bHkgdXNlZnVsLCB0aGlz IGNvbW1pdCBpcyBwcmVwYXJhdG9yeSB3b3JrIGZvciBhbgp1cGNvbWluZyBjb21taXQgdGhhdCB3 aWxsIGFkZCBhbiBhbWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSwgd2hlcmUKdGhlIHRhYmxl IEFNIHRha2VzIGZ1bGwgcmVzcG9uc2liaWxpdHkgZm9yIG1hbmFnaW5nIHRoZSBwcm9ncmVzcyBv ZgppbmRleCBzY2Fucy4gIFRoYXQgd2lsbCBtb3ZlIG1vc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9u IG9mIHNjcm9sbGFibGUKY3Vyc29ycyBvdXQgb2YgaW5kZXggQU1zIGFuZCBpbnRvIHRhYmxlIEFN cywgbWFraW5nIGl0IGVzc2VudGlhbCB0aGF0CmV4ZWN1dG9yIG5vZGVzIHBhc3MgdGhlIGN1cnJl bnQgc2NhbiBkaXJlY3Rpb24gZG93biB0byB0aGUgdGFibGUgQU0uCgpUaGUgaGVhcGFtIHRhYmxl X2luZGV4X2dldG5leHRfc2xvdCBjYWxsYmFja3MgbWFrZSBhZ2dyZXNzaXZlIHVzZSBvZgpmb3Jj ZWQgaW5saW5pbmcgdG8gZW5zdXJlIHRoYXQgcGxhaW4gYW5kIGluZGV4LW9ubHkgY29kZSBwYXRo cyBhcmUgZnVsbHkKc3BlY2lhbGl6ZWQgYXQgY29tcGlsZSB0aW1lIGRlc3BpdGUgc2hhcmluZyBh IGNvbW1vbiBpbXBsZW1lbnRhdGlvbi4KVGVzdGluZyBoYXMgc2hvd24gdGhpcyBpcyBuZWNlc3Nh cnkgdG8ga2VlcCBpY2FjaGUgbWlzc2VzIHRvIGEgbWluaW11bSwKYXQgbGVhc3Qgd2l0aCB0aGUg dHdvIHVwY29taW5nIGFtZ2V0YmF0Y2ggdmFyaWFudHMuCgpBdXRob3I6IFBldGVyIEdlb2doZWdh biA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXpl bC5kZT4KUmV2aWV3ZWQtYnk6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3ptWXFoYWNCSDE2MXBlQVdiNWVGPUphN0NG QVErMGpTRU1xPXFuZkxWVE9PZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9nZW5hbS5oICAgICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbS5oICAgICAgICAgICAgICAgIHwgIDIzICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nh bi5oICAgICAgICAgICAgICAgfCAgNjYgKy0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o ICAgICAgICAgICAgICAgfCAyMTUgKysrKysrLS0tLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5z dHJ1bWVudF9ub2RlLmggICAgIHwgICA1ICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aCAgICAgICAgICAgICAgfCAgIDggLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYyAgIHwgIDExICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhz Y2FuLmMgfCA0NTkgKysrKysrKysrKysrKysrKysrKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC92aXNpYmlsaXR5bWFwLmMgICAgfCAgMjcgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9n ZW5hbS5jICAgICAgICAgICB8ICAyOCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4 YW0uYyAgICAgICAgIHwgMjQ0ICsrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idGluc2VydC5jICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJs ZWFtLmMgICAgICAgICB8ICAyNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1h cGkuYyAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMgICAg ICAgICAgfCAgMjggKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAg ICB8ICAyMyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcmVwYWNrLmMgICAgICAgICAgICAgIHwg ICA3ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyAgICAgICAgfCAgIDgg Ky0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jICAgICB8ICAxNCArLQog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jIHwgICAxICsKIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgICB8IDI0MSArLS0tLS0tLS0tLQog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jICAgICAgIHwgIDE2ICstCiBzcmMv YmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNr ZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAgICB8ICA5OSArLS0tLQogc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zdGF0cy5vdXQgICAgICAgIHwgIDYyICsrKwogc3JjL3Rlc3QvcmVn cmVzcy9zcWwvc3RhdHMuc3FsICAgICAgICAgICAgIHwgIDI5ICsrCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgfCAgIDEgLQogMjcgZmlsZXMgY2hhbmdlZCwgOTYz IGluc2VydGlvbnMoKyksIDcwMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4IDY4YmZl NDA1ZC4uMDVlZWM5MjA0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaApAQCAtMTU2LDYgKzE1Niw3IEBAIGV4dGVy biB2b2lkIGluZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAKIGV4 dGVybiBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24s CiAJCQkJCQkJCQkgUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQkJCQkJCSBib29sIGluZGV4 X29ubHlfc2NhbiwKIAkJCQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJCSBJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJCQkJCQkgaW50IG5rZXlzLCBp bnQgbm9yZGVyYnlzLApAQCAtMTc4LDE1ICsxNzksMTMgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfcGFy YWxsZWxzY2FuX2luaXRpYWxpemUoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogZXh0ZXJuIHZvaWQg aW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleFNj YW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLAogCQkJCQkJ CQkJCQkgIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJCQkJCQkgIGJvb2wgaW5kZXhfb25seV9z Y2FuLAogCQkJCQkJCQkJCQkgIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwK IAkJCQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkJCQkJCSAgUGFy YWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLAogCQkJCQkJCQkJCQkgIHVpbnQzMiBmbGFncyk7CiBl eHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAog CQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKLWV4dGVybiBib29sIGluZGV4X2Zl dGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7Ci1leHRl cm4gYm9vbCBpbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbiwKLQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBleHRlcm4g aW50NjQgaW5kZXhfZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICpiaXRt YXApOwogCiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICppbmRleF9idWxrX2RlbGV0ZShJ bmRleFZhY3V1bUluZm8gKmluZm8sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggNTE3NjQ3OGMyLi44MTE4 MTBhODggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTExOSw4ICsxMTksNiBAQCB0eXBlZGVmIHN0cnVj dCBCaXRtYXBIZWFwU2NhbkRlc2NEYXRhICpCaXRtYXBIZWFwU2NhbkRlc2M7CiAgKi8KIHR5cGVk ZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogewotCUluZGV4RmV0Y2hUYWJsZURhdGEgeHNf YmFzZTsJLyogQU0gaW5kZXBlbmRlbnQgcGFydCBvZiB0aGUgZGVzY3JpcHRvciAqLwotCiAJLyoK IAkgKiBDdXJyZW50IGhlYXAgYnVmZmVyIGluIHNjYW4gKGFuZCBpdHMgYmxvY2sgbnVtYmVyKSwg aWYgYW55LiAgTkI6IGlmCiAJICogeHNfYmxrIGlzIG5vdCBJbnZhbGlkQmxvY2tOdW1iZXIsIHdl IGhvbGQgYSBwaW4gaW4geHNfY2J1Zi4KQEAgLTEyOCw4ICsxMjYsMTMgQEAgdHlwZWRlZiBzdHJ1 Y3QgSW5kZXhGZXRjaEhlYXBEYXRhCiAJQnVmZmVyCQl4c19jYnVmOwogCUJsb2NrTnVtYmVyIHhz X2JsazsKIAotCS8qIEN1cnJlbnQgaGVhcCBibG9jaydzIGNvcnJlc3BvbmRpbmcgcGFnZSBpbiB0 aGUgdmlzaWJpbGl0eSBtYXAgKi8KLQlCdWZmZXIJCXhzX3ZtYnVmZmVyOworCS8qIEZvciB2aXNp YmlsaXR5IG1hcCBjaGVja3MgKGluZGV4LW9ubHkgc2NhbnMgYW5kIG9uLWFjY2VzcyBwcnVuaW5n KSAqLworCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CS8qIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciAqLwor CisJYm9vbAkJeHNfcmVhZG9ubHk7CS8qIHNjYW4gaXMgcmVhZC1vbmx5PyAqLworCisJLyogUGVy LXR1cGxlIGNvbnRleHQgZm9yIHBhZGRpbmcgIm5hbWUiIGNvbHVtbnMgZHVyaW5nIGluZGV4LW9u bHkgc2NhbnMgKi8KKwlNZW1vcnlDb250ZXh0IHhzX2l0dXBfY3h0OwogfSBJbmRleEZldGNoSGVh cERhdGE7CiAKIC8qIFJlc3VsdCBjb2RlcyBmb3IgSGVhcFR1cGxlU2F0aXNmaWVzVmFjdXVtICov CkBAIC00MzAsMTYgKzQzMywxNCBAQCBleHRlcm4gVHJhbnNhY3Rpb25JZCBoZWFwX2luZGV4X2Rl bGV0ZV90dXBsZXMoUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJCQkgIFRNX0luZGV4RGVsZXRlT3Ag KmRlbHN0YXRlKTsKIAogLyogaW4gaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgKi8KLWV4dGVybiBJ bmRleEZldGNoVGFibGVEYXRhICpoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVs LCB1aW50MzIgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pOwotZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNo X2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKTsKK2V4dGVybiBib29sIGhlYXBhbV9mZXRj aF90aWQoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciB0aWQsIFNuYXBzaG90IHNuYXBzaG90LAor CQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqYWxsX2RlYWQpOworZXh0ZXJuIHZv aWQgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZs YWdzKTsKK2V4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleFNjYW5EZXNj IHNjYW4pOworZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNj IHNjYW4pOwogZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0 aWQsIFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkgICBCdWZmZXIgYnVmZmVyLCBTbmFwc2hv dCBzbmFwc2hvdCwgSGVhcFR1cGxlIGhlYXBUdXBsZSwKIAkJCQkJCQkJICAgYm9vbCAqYWxsX2Rl YWQsIGJvb2wgZmlyc3RfY2FsbCk7Ci1leHRlcm4gYm9vbCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVw bGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCi0JCQkJCQkJCQkgSXRlbVBvaW50 ZXIgdGlkLCBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xv dCwgYm9vbCAqaGVhcF9jb250aW51ZSwKLQkJCQkJCQkJCSBib29sICphbGxfZGVhZCk7CiAKIC8q IGluIGhlYXAvcHJ1bmVoZWFwLmMgKi8KIGV4dGVybiB2b2lkIGhlYXBfcGFnZV9wcnVuZV9vcHQo UmVsYXRpb24gcmVsYXRpb24sIEJ1ZmZlciBidWZmZXIsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCAy ZWEwNmE2N2EuLjVjZTZhNTBmMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNj YW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0xNiw2ICsxNiw3IEBA CiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0 dXAuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1h cC5oIgogI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmls ZWxvY2F0b3IuaCIKQEAgLTI1LDYgKzI2LDcgQEAKIAogc3RydWN0IFBhcmFsbGVsVGFibGVTY2Fu RGVzY0RhdGE7CiBzdHJ1Y3QgVGFibGVTY2FuSW5zdHJ1bWVudGF0aW9uOworc3RydWN0IFR1cGxl VGFibGVTbG90OwogCiAvKgogICogR2VuZXJpYyBkZXNjcmlwdG9yIGZvciB0YWJsZSBzY2Fucy4g VGhpcyBpcyB0aGUgYmFzZS1jbGFzcyBmb3IgdGFibGUgc2NhbnMsCkBAIC0xMjAsMjIgKzEyMiw2 IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXJEYXRhCiB9IFBh cmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXJEYXRhOwogdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxC bG9ja1RhYmxlU2NhbldvcmtlckRhdGEgKlBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXI7CiAK LS8qCi0gKiBCYXNlIGNsYXNzIGZvciBmZXRjaGVzIGZyb20gYSB0YWJsZSB2aWEgYW4gaW5kZXgu IFRoaXMgaXMgdGhlIGJhc2UtY2xhc3MKLSAqIGZvciBzdWNoIHNjYW5zLCB3aGljaCBuZWVkcyB0 byBiZSBlbWJlZGRlZCBpbiB0aGUgcmVzcGVjdGl2ZSBzdHJ1Y3QgZm9yCi0gKiBpbmRpdmlkdWFs IEFNcy4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQotewotCVJlbGF0 aW9uCXJlbDsKLQotCS8qCi0JICogQml0bWFzayBvZiBTY2FuT3B0aW9ucyBhZmZlY3RpbmcgdGhl IHJlbGF0aW9uLiBObyBTT19JTlRFUk5BTF9GTEFHUyBhcmUKLQkgKiBwZXJtaXR0ZWQuCi0JICov Ci0JdWludDMyCQlmbGFnczsKLX0gSW5kZXhGZXRjaFRhYmxlRGF0YTsKLQogc3RydWN0IEluZGV4 U2Nhbkluc3RydW1lbnRhdGlvbjsKIAogLyoKQEAgLTE3MiwxMCArMTU4LDEwIEBAIHR5cGVkZWYg c3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlv biAqaW5zdHJ1bWVudDsKIAogCS8qCi0JICogSW4gYW4gaW5kZXgtb25seSBzY2FuLCBhIHN1Y2Nl c3NmdWwgYW1nZXR0dXBsZSBjYWxsIG11c3QgZmlsbCBlaXRoZXIKLQkgKiB4c19pdHVwIChhbmQg eHNfaXR1cGRlc2MpIG9yIHhzX2hpdHVwIChhbmQgeHNfaGl0dXBkZXNjKSB0byBwcm92aWRlIHRo ZQotCSAqIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHNjYW4uICBJdCBjYW4gZmlsbCBib3RoLCBpbiB3 aGljaCBjYXNlIHRoZSBoZWFwCi0JICogZm9ybWF0IHdpbGwgYmUgdXNlZC4KKwkgKiBJbiBhbiBp bmRleC1vbmx5IHNjYW4sIHRoZSBpbmRleCBBTSBmaWxscyBlaXRoZXIgeHNfaXR1cCBvciB4c19o aXR1cAorCSAqIHdpdGggdGhlIGRhdGEgdG8gYmUgcmV0dXJuZWQgYnkgdGhlIHNjYW4gKGl0IGNh biBmaWxsIGJvdGgsIGluIHdoaWNoCisJICogY2FzZSB0aGUgaGVhcCBmb3JtYXQgaXMgdXNlZCku ICBUaGUgdGFibGUgQU0gY29uc3VtZXMgdGhlc2UgdG8gZmlsbCB0aGUKKwkgKiBjYWxsZXIncyBz bG90IGR1cmluZyB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QuCiAJICovCiAJSW5kZXhUdXBsZQl4 c19pdHVwOwkJLyogaW5kZXggdHVwbGUgcmV0dXJuZWQgYnkgQU0gKi8KIAlzdHJ1Y3QgVHVwbGVE ZXNjRGF0YSAqeHNfaXR1cGRlc2M7CS8qIHJvd3R5cGUgZGVzY3JpcHRvciBvZiB4c19pdHVwICov CkBAIC0xODUsOSArMTcxLDI3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJ SXRlbVBvaW50ZXJEYXRhIHhzX2hlYXB0aWQ7IC8qIHJlc3VsdCAqLwogCWJvb2wJCXhzX2hlYXBf Y29udGludWU7CS8qIFQgaWYgbXVzdCBrZWVwIHdhbGtpbmcsIHBvdGVudGlhbAogCQkJCQkJCQkJ ICogZnVydGhlciByZXN1bHRzICovCi0JSW5kZXhGZXRjaFRhYmxlRGF0YSAqeHNfaGVhcGZldGNo OwogCi0JYm9vbAkJeHNfcmVjaGVjazsJCS8qIFQgbWVhbnMgc2NhbiBrZXlzIG11c3QgYmUgcmVj aGVja2VkICovCisJLyogVGFibGUgYWNjZXNzIG1ldGhvZCdzIHByaXZhdGUgc3RhdGUgKG5vdCB1 c2VkIGR1cmluZyBiaXRtYXAgc2NhbnMpICovCisJdm9pZAkgICAqeHNfaGVhcGZldGNoOwkvKiBh Y2Nlc3MtbWV0aG9kLXNwZWNpZmljIGluZm8gKi8KKworCS8qCisJICogUmVzb2x2ZWQgdGFibGVf aW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrLCB3aGljaCBpcyBzZXQgYnkKKwkgKiB0YWJsZV9p bmRleF9mZXRjaF9iZWdpbiBhdCB0aGUgc3RhcnQgb2YgYW1nZXR0dXBsZSBzY2Fucy4gIFJlcG9y dHMgdmlhCisJICogKnJlY2hlY2sgKGlmIG5vdCBOVUxMKSB3aGV0aGVyIHRoZSBzY2FuIGtleXMg bXVzdCBiZSByZWNoZWNrZWQuCisJICovCisJYm9vbAkJKCp4c19nZXRuZXh0X3Nsb3QpIChzdHJ1 Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sCisJCQkJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKKwkJCQkJCQkJCXN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJCWJv b2wgKnJlY2hlY2spOworCisJLyoKKwkgKiB4c19yZWNoZWNrIGlzIHNldCBieSBpbmRleCBBTXMs IGFuZCByZWFkIGJ5IHRhYmxlIEFNcy4KKwkgKgorCSAqIFNob3VsZCBub3QgYmUgY2hlY2tlZCBi eSBjb3JlIGV4ZWN1dG9yIG5vZGVzICh0aGV5IHNob3VsZCB1c2UgdGhlCisJICogeHNfZ2V0bmV4 dF9zbG90IGNhbGxiYWNrJ3MgcmVjaGVjayBhcmd1bWVudCBpbnN0ZWFkKS4KKwkgKi8KKwlib29s CQl4c19yZWNoZWNrOwogCiAJLyoKIAkgKiBXaGVuIGZldGNoaW5nIHdpdGggYW4gb3JkZXJpbmcg b3BlcmF0b3IsIHRoZSB2YWx1ZXMgb2YgdGhlIE9SREVSIEJZCkBAIC0xOTUsMTEgKzE5OSwyNyBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCSAqIHhzX3JlY2hlY2tvcmRlcmJ5 IGlzIHRydWUsIHRoZXNlIG5lZWQgdG8gYmUgcmVjaGVja2VkIGp1c3QgbGlrZSB0aGUKIAkgKiBz Y2FuIGtleXMsIGFuZCB0aGUgdmFsdWVzIHJldHVybmVkIGhlcmUgYXJlIGEgbG93ZXItYm91bmQg b24gdGhlIGFjdHVhbAogCSAqIHZhbHVlcy4KKwkgKgorCSAqIE5vdGU6IHVubGlrZSB4c19yZWNo ZWNrLCB0aGVzZSBmaWVsZHMgYXJlIHJlYWQgYnkgY29yZSBleGVjdXRvciBub2Rlcy4KIAkgKi8K IAlEYXR1bQkgICAqeHNfb3JkZXJieXZhbHM7CiAJYm9vbAkgICAqeHNfb3JkZXJieW51bGxzOwog CWJvb2wJCXhzX3JlY2hlY2tvcmRlcmJ5OwogCisJLyoKKwkgKiBJbmRleCBhdHRyaWJ1dGVzIGhv bGRpbmcgIm5hbWUiIGNvbHVtbnMgc3RvcmVkIGFzIGNzdHJpbmdzLCB3aGljaCB0aGUKKwkgKiB0 YWJsZSBBTSByZS1wYWRzIHRvIE5BTUVEQVRBTEVOIHdoZW4gZmlsbGluZyBhIHNsb3QgZnJvbSB4 c19pdHVwCisJICovCisJQXR0ck51bWJlciAqeHNfbmFtZV9jc3RyaW5nX2F0dG51bXM7CisJaW50 CQkJeHNfbmFtZV9jc3RyaW5nX2NvdW50OworCisJLyoKKwkgKiBBbiBhcHByb3hpbWF0ZSBsaW1p dCBvbiB0aGUgYW1vdW50IG9mIHdvcmssIG1lYXN1cmVkIGluIHBhZ2VzIHRvdWNoZWQsCisJICog aW1wb3NlZCBvbiB0aGUgaW5kZXggc2Nhbi4gIFRoZSBkZWZhdWx0LCAwLCBtZWFucyBubyBsaW1p dC4gIFVzZWQgYnkKKwkgKiBzZWxmdW5jcy5jIHRvIGJvdW5kIHRoZSBjb3N0IG9mIGdldF9hY3R1 YWxfdmFyaWFibGVfZW5kcG9pbnQoKS4KKwkgKi8KKwl1aW50OAkJeHNfdmlzaXRlZF9wYWdlc19s aW1pdDsKKwogCS8qIHBhcmFsbGVsIGluZGV4IHNjYW4gaW5mb3JtYXRpb24sIGluIHNoYXJlZCBt ZW1vcnkgKi8KIAlzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqcGFyYWxsZWxfc2Nh bjsKIH0gSW5kZXhTY2FuRGVzY0RhdGE7CkBAIC0yMTMsOCArMjMzLDYgQEAgdHlwZWRlZiBzdHJ1 Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YQogCWNoYXIJCXBzX3NuYXBzaG90X2RhdGFbRkxF WElCTEVfQVJSQVlfTUVNQkVSXTsKIH0JCQlQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhOwogCi1z dHJ1Y3QgVHVwbGVUYWJsZVNsb3Q7Ci0KIC8qIFN0cnVjdCBmb3Igc3RvcmFnZS1vci1pbmRleCBz Y2FucyBvZiBzeXN0ZW0gdGFibGVzICovCiB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEK IHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IGYyYzM2Njk2Yi4uMjgyZmRmMzdiIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmgKQEAgLTM4LDYgKzM4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQnVsa0luc2VydFN0YXRl RGF0YSBCdWxrSW5zZXJ0U3RhdGVEYXRhOwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhJbmZvIEluZGV4 SW5mbzsKIHR5cGVkZWYgc3RydWN0IFNhbXBsZVNjYW5TdGF0ZSBTYW1wbGVTY2FuU3RhdGU7CiB0 eXBlZGVmIHN0cnVjdCBTY2FuS2V5RGF0YSBTY2FuS2V5RGF0YTsKK3R5cGVkZWYgc3RydWN0IElu ZGV4U2NhbkRlc2NEYXRhICpJbmRleFNjYW5EZXNjOwogdHlwZWRlZiBzdHJ1Y3QgVmFsaWRhdGVJ bmRleFN0YXRlIFZhbGlkYXRlSW5kZXhTdGF0ZTsKIHR5cGVkZWYgc3RydWN0IFZhY3V1bVBhcmFt cyBWYWN1dW1QYXJhbXM7CiAKQEAgLTQ0Niw2MCArNDQ3LDYzIEBAIHR5cGVkZWYgc3RydWN0IFRh YmxlQW1Sb3V0aW5lCiAJICovCiAKIAkvKgotCSAqIFByZXBhcmUgdG8gZmV0Y2ggdHVwbGVzIGZy b20gdGhlIHJlbGF0aW9uLCBhcyBuZWVkZWQgd2hlbiBmZXRjaGluZwotCSAqIHR1cGxlcyBmb3Ig YW4gaW5kZXggc2Nhbi4gIFRoZSBjYWxsYmFjayBoYXMgdG8gcmV0dXJuIGFuCi0JICogSW5kZXhG ZXRjaFRhYmxlRGF0YSwgd2hpY2ggdGhlIEFNIHdpbGwgdHlwaWNhbGx5IGVtYmVkIGluIGEgbGFy Z2VyCi0JICogc3RydWN0dXJlIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKwkgKiBQcmVw YXJlIHRvIGZldGNoIHR1cGxlcywgYXMgbmVlZGVkIHdoZW4gZmV0Y2hpbmcgdHVwbGVzIGZvciBh biBpbmRleAorCSAqIHNjYW4uICBUaGUgY2FsbGJhY2sgc3RvcmVzIGl0cyBvd24gcHJpdmF0ZSBm ZXRjaCBzdGF0ZSBpbiB0aGUgaW5kZXgKKwkgKiBzY2FuIGRlc2NyaXB0b3IncyB4c19oZWFwZmV0 Y2ggZmllbGQgKGFuIG9wYXF1ZSBwb2ludGVyKS4KIAkgKgogCSAqIGZsYWdzIGlzIGEgYml0bWFz ayBvZiBTY2FuT3B0aW9ucyBhZmZlY3RpbmcgdW5kZXJseWluZyB0YWJsZSBzY2FuCiAJICogYmVo YXZpb3IuIFNlZSBzY2FuX2JlZ2luKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFzc2luZyB0 aGVzZS4KIAkgKgotCSAqIFR1cGxlcyBmb3IgYW4gaW5kZXggc2NhbiBjYW4gdGhlbiBiZSBmZXRj aGVkIHZpYSBpbmRleF9mZXRjaF90dXBsZS4KKwkgKiBDYWxsYmFjayBpcyByZXNwb25zaWJsZSBm b3Igc2V0dGluZyBJbmRleFNjYW5EZXNjLnhzX2dldG5leHRfc2xvdCB0bworCSAqIHRoZSBhcHBy b3ByaWF0ZSBzbG90LWJhc2VkIGNhbGxiYWNrLiAgVHVwbGVzIGNhbiB0aGVuIGJlIGZldGNoZWQg dmlhCisJICogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KCkuICBObyBzZXBhcmF0ZSBzbG90LWJh c2VkIGNhbGxiYWNrIGV4aXN0cyBpbgorCSAqIHRoaXMgc3RydWN0IQorCSAqCisJICogSW4gcHJp bmNpcGxlIGEgc2luZ2xlIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayAoc3RvcmVkIGhlcmUpIHdv dWxkCisJICogc3VmZmljZSwgYnV0IHVzaW5nIHNwZWNpYWxpemVkIHZhcmlhbnRzIGFsbG93cyB0 aGUgdGFibGUgQU0gdG8gcHJvdmlkZQorCSAqIG1pbmltYWwgY29kZSBiYXNlZCBvbiBjb25kaXRp b25zIHRoYXQgYXJlIGZpeGVkIGZvciB0aGUgd2hvbGUgc2NhbiBhcworCSAqIGFuIG9wdGltaXph dGlvbiAoZS5nLiwgdmFyaWFudHMgZm9yIHBsYWluIGluZGV4IHNjYW5zIGFuZCBpbmRleC1vbmx5 CisJICogc2NhbnMsIGVhY2ggd2l0aCBmZXdlciBicmFuY2hlcykuCisJICoKKwkgKiBOb3RlIHRo YXQgQU1zIHRoYXQgZG8gbm90IG5lY2Vzc2FyaWx5IHVwZGF0ZSBpbmRleGVzIHdoZW4gaW5kZXhl ZAorCSAqIGNvbHVtbnMgZG8gbm90IGNoYW5nZSwgbmVlZCB0byByZXR1cm4gdGhlIGN1cnJlbnQv Y29ycmVjdCB2ZXJzaW9uIG9mCisJICogdGhlIHR1cGxlIHRoYXQgaXMgdmlzaWJsZSB0byB0aGUg c25hcHNob3QsIGV2ZW4gaWYgdGhlIHRpZCBwb2ludHMgdG8gYW4KKwkgKiBvbGRlciB2ZXJzaW9u IG9mIHRoZSB0dXBsZS4KIAkgKi8KLQlzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqKCppbmRl eF9mZXRjaF9iZWdpbikgKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKTsKKwl2b2lkCQkoKmlu ZGV4X2ZldGNoX2JlZ2luKSAoSW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50MzIgZmxhZ3MpOwogCiAJ LyoKLQkgKiBSZXNldCBpbmRleCBmZXRjaC4gVHlwaWNhbGx5IHRoaXMgd2lsbCByZWxlYXNlIGNy b3NzIGluZGV4IGZldGNoCi0JICogcmVzb3VyY2VzIGhlbGQgaW4gSW5kZXhGZXRjaFRhYmxlRGF0 YS4KKwkgKiBSZXNldCBpbmRleCBzY2FuIGZvciBhIHJlc2Nhbi4gIFJlc2V0cyB0YWJsZS1vd25l ZCByZXNvdXJjZXMuCiAJICovCi0Jdm9pZAkJKCppbmRleF9mZXRjaF9yZXNldCkgKHN0cnVjdCBJ bmRleEZldGNoVGFibGVEYXRhICpkYXRhKTsKKwl2b2lkCQkoKmluZGV4X2ZldGNoX3Jlc2V0KSAo SW5kZXhTY2FuRGVzYyBzY2FuKTsKIAogCS8qCi0JICogUmVsZWFzZSByZXNvdXJjZXMgYW5kIGRl YWxsb2NhdGUgaW5kZXggZmV0Y2guCisJICogUmVsZWFzZSByZXNvdXJjZXMgYW5kIGRlYWxsb2Nh dGUgaW5kZXggc2NhbiBzdGF0ZS4KKwkgKi8KKwl2b2lkCQkoKmluZGV4X2ZldGNoX2VuZCkgKElu ZGV4U2NhbkRlc2Mgc2Nhbik7CisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBDYWxsYmFja3Mg Zm9yIG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFsIHR1cGxlcworCSAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogCSAqLwotCXZvaWQJCSgqaW5kZXhfZmV0Y2hfZW5kKSAoc3RydWN0IElu ZGV4RmV0Y2hUYWJsZURhdGEgKmRhdGEpOwogCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlk YCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKIAkgKiBhY2NvcmRp bmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZCB0aGUgdmlz aWJpbGl0eQogCSAqIHRlc3QsIHJldHVybiB0cnVlLCBmYWxzZSBvdGhlcndpc2UuCiAJICoKLQkg KiBOb3RlIHRoYXQgQU1zIHRoYXQgZG8gbm90IG5lY2Vzc2FyaWx5IHVwZGF0ZSBpbmRleGVzIHdo ZW4gaW5kZXhlZAotCSAqIGNvbHVtbnMgZG8gbm90IGNoYW5nZSwgbmVlZCB0byByZXR1cm4gdGhl IGN1cnJlbnQvY29ycmVjdCB2ZXJzaW9uIG9mCi0JICogdGhlIHR1cGxlIHRoYXQgaXMgdmlzaWJs ZSB0byB0aGUgc25hcHNob3QsIGV2ZW4gaWYgdGhlIHRpZCBwb2ludHMgdG8gYW4KLQkgKiBvbGRl ciB2ZXJzaW9uIG9mIHRoZSB0dXBsZS4KKwkgKiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwgY2FsbGJh Y2sgZm9yIHNpbmdsZS1zaG90IFRJRCBsb29rdXBzIHVzZWQgYnkKKwkgKiBjb25zdHJhaW50IGVu Zm9yY2VtZW50IGNvZGUgKHVuaXF1ZSBjaGVja3MgYW5kIHNpbWlsYXIpLgogCSAqCi0JICogKmNh bGxfYWdhaW4gaXMgZmFsc2Ugb24gdGhlIGZpcnN0IGNhbGwgdG8gaW5kZXhfZmV0Y2hfdHVwbGUg Zm9yIGEgdGlkLgotCSAqIElmIHRoZXJlIHBvdGVudGlhbGx5IGlzIGFub3RoZXIgdHVwbGUgbWF0 Y2hpbmcgdGhlIHRpZCwgKmNhbGxfYWdhaW4KLQkgKiBuZWVkcyB0byBiZSBzZXQgdG8gdHJ1ZSBi eSBpbmRleF9mZXRjaF90dXBsZSwgc2lnbmFsaW5nIHRvIHRoZSBjYWxsZXIKLQkgKiB0aGF0IGlu ZGV4X2ZldGNoX3R1cGxlIHNob3VsZCBiZSBjYWxsZWQgYWdhaW4gZm9yIHRoZSBzYW1lIHRpZC4K LQkgKgotCSAqICphbGxfZGVhZCwgaWYgYWxsX2RlYWQgaXMgbm90IE5VTEwsIHNob3VsZCBiZSBz ZXQgdG8gdHJ1ZSBieQotCSAqIGluZGV4X2ZldGNoX3R1cGxlIGlmZiBpdCBpcyBndWFyYW50ZWVk IHRoYXQgbm8gYmFja2VuZCBuZWVkcyB0byBzZWUKLQkgKiB0aGF0IHR1cGxlLiBJbmRleCBBTXMg Y2FuIHVzZSB0aGF0IHRvIGF2b2lkIHJldHVybmluZyB0aGF0IHRpZCBpbgotCSAqIGZ1dHVyZSBz ZWFyY2hlcy4KLQkgKi8KLQlib29sCQkoKmluZGV4X2ZldGNoX3R1cGxlKSAoc3RydWN0IEluZGV4 RmV0Y2hUYWJsZURhdGEgKnNjYW4sCi0JCQkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKLQkJCQkJ CQkJCSAgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90 LAotCQkJCQkJCQkJICBib29sICpjYWxsX2FnYWluLCBib29sICphbGxfZGVhZCk7Ci0KLQotCS8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotCSAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRp b25zIG9uIGluZGl2aWR1YWwgdHVwbGVzCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogKmFsbF9k ZWFkLCBpZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwgc2hvdWxkIGJlIHNldCB0byB0cnVlIGJ5IGZl dGNoX3RpZAorCSAqIGlmZiBpdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8gYmFja2VuZCBuZWVkcyB0 byBzZWUgdGhhdCB0dXBsZS4gSW5kZXggQU1zCisJICogY2FuIHVzZSB0aGF0IHRvIGF2b2lkIHJl dHVybmluZyB0aGF0IHRpZCBpbiBmdXR1cmUgc2VhcmNoZXMuCiAJICovCisJYm9vbAkJKCpmZXRj aF90aWQpIChSZWxhdGlvbiByZWwsCisJCQkJCQkJICBJdGVtUG9pbnRlciB0aWQsCisJCQkJCQkJ ICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJ CQkJCSAgYm9vbCAqYWxsX2RlYWQpOwogCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlkYCBp bnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKQEAgLTEyMzUsMTYgKzEy MzksMTkgQEAgdGFibGVfcGFyYWxsZWxzY2FuX3JlaW5pdGlhbGl6ZShSZWxhdGlvbiByZWwsIFBh cmFsbGVsVGFibGVTY2FuRGVzYyBwc2NhbikKICAqLwogCiAvKgotICogUHJlcGFyZSB0byBmZXRj aCB0dXBsZXMgZnJvbSB0aGUgcmVsYXRpb24sIGFzIG5lZWRlZCB3aGVuIGZldGNoaW5nIHR1cGxl cwotICogZm9yIGFuIGluZGV4IHNjYW4uCisgKiBQcmVwYXJlIHRvIGZldGNoIHR1cGxlcyBmcm9t IHRoZSByZWxhdGlvbiBhcyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4uCisgKiBUaGUgY2FsbGJhY2sg c3RvcmVzIGl0cyBwcml2YXRlIGZldGNoIHN0YXRlIGluIHRoZSBzY2FuJ3MgeHNfaGVhcGZldGNo CisgKiBmaWVsZC4KKyAqCisgKiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gY2FuIHRoZW4gYmUg ZmV0Y2hlZCB2aWEgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KCkuCiAgKgogICogZmxhZ3MgaXMg YSBiaXRtYXNrIG9mIFNjYW5PcHRpb25zLiBObyBTT19JTlRFUk5BTF9GTEFHUyBhcmUgcGVybWl0 dGVkLgotICoKLSAqIFR1cGxlcyBmb3IgYW4gaW5kZXggc2NhbiBjYW4gdGhlbiBiZSBmZXRjaGVk IHZpYSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZSgpLgogICovCi1zdGF0aWMgaW5saW5lIEluZGV4 RmV0Y2hUYWJsZURhdGEgKgotdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsLCB1 aW50MzIgZmxhZ3MpCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX2luZGV4X2ZldGNoX2JlZ2lu KEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogeworCVJlbGF0aW9uCXJlbCA9IHNj YW4tPmhlYXBSZWxhdGlvbjsKKwogCUFzc2VydCgoZmxhZ3MgJiBTT19JTlRFUk5BTF9GTEFHUykg PT0gMCk7CiAKIAkvKgpAQCAtMTI1NSw3NCArMTI2MiwxMDkgQEAgdGFibGVfaW5kZXhfZmV0Y2hf YmVnaW4oUmVsYXRpb24gcmVsLCB1aW50MzIgZmxhZ3MpCiAJaWYgKHVubGlrZWx5KFRyYW5zYWN0 aW9uSWRJc1ZhbGlkKENoZWNrWGlkQWxpdmUpICYmICFic3lzc2NhbikpCiAJCWVsb2coRVJST1Is ICJzY2FuIHN0YXJ0ZWQgZHVyaW5nIGxvZ2ljYWwgZGVjb2RpbmciKTsKIAotCXJldHVybiByZWwt PnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2JlZ2luKHJlbCwgZmxhZ3MpOworCXJlbC0+cmRfdGFi bGVhbS0+aW5kZXhfZmV0Y2hfYmVnaW4oc2NhbiwgZmxhZ3MpOwogfQogCiAvKgotICogUmVzZXQg aW5kZXggZmV0Y2guIFR5cGljYWxseSB0aGlzIHdpbGwgcmVsZWFzZSBjcm9zcyBpbmRleCBmZXRj aCByZXNvdXJjZXMKLSAqIGhlbGQgaW4gSW5kZXhGZXRjaFRhYmxlRGF0YS4KKyAqIFJlc2V0IGlu ZGV4IHNjYW4sIGZvciBhIHJlc2Nhbi4gUmVzZXRzIHRhYmxlLW93bmVkIHJlc291cmNlcy4KICAq Lwogc3RhdGljIGlubGluZSB2b2lkCi10YWJsZV9pbmRleF9mZXRjaF9yZXNldChzdHJ1Y3QgSW5k ZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKK3RhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4U2Nh bkRlc2Mgc2NhbikKIHsKLQlzY2FuLT5yZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX3Jlc2V0 KHNjYW4pOworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCisJc2Nhbi0+aGVhcFJlbGF0 aW9uLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKIH0KIAogLyoKLSAqIFJl bGVhc2UgcmVzb3VyY2VzIGFuZCBkZWFsbG9jYXRlIGluZGV4IGZldGNoLgorICogUmVsZWFzZSBy ZXNvdXJjZXMgYW5kIGRlYWxsb2NhdGUgdGhlIHRhYmxlIEFNJ3MgcHJpdmF0ZSBpbmRleCBmZXRj aCBzdGF0ZQorICogKHRoZSBzY2FuJ3MgeHNfaGVhcGZldGNoKQogICovCiBzdGF0aWMgaW5saW5l IHZvaWQKLXRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAq c2NhbikKK3RhYmxlX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiB7Ci0Jc2Nh bi0+cmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9lbmQoc2Nhbik7CisJQXNzZXJ0KHNjYW4t PnhzX2hlYXBmZXRjaCk7CisKKwlzY2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4 X2ZldGNoX2VuZChzY2FuKTsKIH0KIAogLyoKLSAqIEZldGNoZXMsIGFzIHBhcnQgb2YgYW4gaW5k ZXggc2NhbiwgdHVwbGUgYXQgYHRpZGAgaW50byBgc2xvdGAsIGFmdGVyIGRvaW5nCi0gKiBhIHZp c2liaWxpdHkgdGVzdCBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91 bmQgYW5kIHBhc3NlZAotICogdGhlIHZpc2liaWxpdHkgdGVzdCwgcmV0dXJucyB0cnVlLCBmYWxz ZSBvdGhlcndpc2UuIE5vdGUgdGhhdCAqdGlkIG1heSBiZQotICogbW9kaWZpZWQgd2hlbiB3ZSBy ZXR1cm4gdHJ1ZSAoc2VlIGxhdGVyIHJlbWFya3Mgb24gbXVsdGlwbGUgcm93IHZlcnNpb25zCi0g KiByZWFjaGFibGUgdmlhIGEgc2luZ2xlIGluZGV4IGVudHJ5KS4KKyAqIEZldGNoIHRoZSBuZXh0 IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwgc2Nhbm5pbmcgaW4gdGhlCisg KiBzcGVjaWZpZWQgZGlyZWN0aW9uLiAgUmV0dXJucyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWlu ZyB0aGUgc2NhbiBrZXlzIGFuZAorICogdGhlIHNuYXBzaG90IHdhcyBmb3VuZCwgZmFsc2Ugb3Ro ZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUKKyAqIHNwZWNpZmllZCBzbG90Lgog ICoKLSAqICpjYWxsX2FnYWluIG5lZWRzIHRvIGJlIGZhbHNlIG9uIHRoZSBmaXJzdCBjYWxsIHRv IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKCkgZm9yCi0gKiBhIHRpZC4gSWYgdGhlcmUgcG90ZW50 aWFsbHkgaXMgYW5vdGhlciB0dXBsZSBtYXRjaGluZyB0aGUgdGlkLCAqY2FsbF9hZ2FpbgotICog d2lsbCBiZSBzZXQgdG8gdHJ1ZSwgc2lnbmFsaW5nIHRoYXQgdGFibGVfaW5kZXhfZmV0Y2hfdHVw bGUoKSBzaG91bGQgYmUgY2FsbGVkCi0gKiBhZ2FpbiBmb3IgdGhlIHNhbWUgdGlkLgorICogRm9y IGEgcGxhaW4gaW5kZXggc2NhbiB0aGUgc2xvdCBob2xkcyB0aGUgdGFibGUgdHVwbGUuICBGb3Ig YW4gaW5kZXgtb25seQorICogc2NhbiB0aGUgdGFibGUgQU0gaW5zdGVhZCBmaWxscyB0aGUgc2xv dCBmcm9tIHRoZSBpbmRleCBkYXRhIHRoZSBpbmRleCBBTQorICogcGxhY2VkIGluIHNjYW4tPnhz X2l0dXAveHNfaGl0dXAuICBDYWxsZXIgbXVzdCBub3QgcmVhZCB4c19pdHVwL3hzX2hpdHVwCisg KiBJbmRleFNjYW5EZXNjIGZpZWxkcyBkaXJlY3RseS4KICAqCi0gKiAqYWxsX2RlYWQsIGlmIGFs bF9kZWFkIGlzIG5vdCBOVUxMLCB3aWxsIGJlIHNldCB0byB0cnVlIGJ5Ci0gKiB0YWJsZV9pbmRl eF9mZXRjaF90dXBsZSgpIGlmZiBpdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8gYmFja2VuZCBuZWVk cyB0byBzZWUKLSAqIHRoYXQgdHVwbGUuIEluZGV4IEFNcyBjYW4gdXNlIHRoYXQgdG8gYXZvaWQg cmV0dXJuaW5nIHRoYXQgdGlkIGluIGZ1dHVyZQotICogc2VhcmNoZXMuCisgKiBEaXNwYXRjaGVz IHRocm91Z2ggc2Nhbi0+eHNfZ2V0bmV4dF9zbG90LCB3aGljaCBpcyByZXNvbHZlZCBvbmNlIGJ5 CisgKiB0aGUgdGFibGUgQU0ncyBpbmRleF9mZXRjaF9iZWdpbiBjYWxsYmFjay4KICAqCi0gKiBU aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIHRhYmxlX3R1cGxlX2ZldGNo X3Jvd192ZXJzaW9uKCkKLSAqIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXJy ZW50bHkgdmlzaWJsZSB2ZXJzaW9uIG9mIGEgcm93IGlmCi0gKiB0aGUgQU0gc3VwcG9ydHMgc3Rv cmluZyBtdWx0aXBsZSByb3cgdmVyc2lvbnMgcmVhY2hhYmxlIHZpYSBhIHNpbmdsZSBpbmRleAot ICogZW50cnkgKGxpa2UgaGVhcCdzIEhPVCkuIFdoZXJlYXMgdGFibGVfdHVwbGVfZmV0Y2hfcm93 X3ZlcnNpb24oKSBvbmx5Ci0gKiBldmFsdWF0ZXMgdGhlIHR1cGxlIGV4YWN0bHkgYXQgYHRpZGAu IE91dHNpZGUgb2YgaW5kZXggZW50cnkgLT50YWJsZSB0dXBsZQotICogbG9va3VwcywgdGFibGVf dHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oKSBpcyB3aGF0J3MgdXN1YWxseSBuZWVkZWQuCisgKiBJ ZiByZWNoZWNrIGlzIG5vdCBOVUxMLCAqcmVjaGVjayBpcyBzZXQgKG9uIGEgdHJ1ZSByZXR1cm4p IHRvIGluZGljYXRlCisgKiB3aGV0aGVyIHRoZSBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQg YWdhaW5zdCB0aGUgcmV0dXJuZWQgdHVwbGUgKFhYWAorICogbWF5YmUgd2Ugc2hvdWxkIG1ha2Ug YSBub24tTlVMTCByZWNoZWNrIGFyZyBtYW5kYXRvcnk/KS4KKyAqCisgKiBPbiBzdWNjZXNzLCBy ZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdp bGwgYmUKKyAqIHJlbGVhc2VkIGJ5IGEgZnV0dXJlIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBv ciBpbmRleF9lbmRzY2FuIGNhbGwuCisgKgorICogTm90ZTogZm9yIG9yZGVyZWQgc2NhbnMsIHRo ZSBjYWxsZXIgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNrb3JkZXJieSBhbmQKKyAqIHJlY2hl Y2sgdGhlIE9SREVSIEJZIGV4cHJlc3Npb25zIGZvciBpdHNlbGYuIChYWFggU2hvdWxkIHRoZXkg aGF2ZSB0bz8pCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAotdGFibGVfaW5kZXhfZmV0Y2hfdHVw bGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCi0JCQkJCQlJdGVtUG9pbnRlciB0 aWQsCi0JCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCVR1cGxlVGFibGVTbG90ICpzbG90 LAotCQkJCQkJYm9vbCAqY2FsbF9hZ2FpbiwgYm9vbCAqYWxsX2RlYWQpCit0YWJsZV9pbmRleF9n ZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK KwkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqcmVjaGVjaykKIHsKLQlyZXR1cm4g c2Nhbi0+cmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF90dXBsZShzY2FuLCB0aWQsIHNuYXBz aG90LAotCQkJCQkJCQkJCQkJCXNsb3QsIGNhbGxfYWdhaW4sCi0JCQkJCQkJCQkJCQkJYWxsX2Rl YWQpOworCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkgfHwgc2Nhbi0+eHNfd2FudF9p dHVwKTsKKwlBc3NlcnQoVFRTX0lTX1ZJUlRVQUwoc2xvdCkgfHwgIXNjYW4tPnhzX3dhbnRfaXR1 cCk7CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwlyZXR1cm4gc2Nhbi0+eHNfZ2V0 bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgcmVjaGVjayk7CiB9CiAKIC8qCi0gKiBU aGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgdGFibGVfaW5kZXhfZmV0Y2hfdHVw bGUoKSB3aGljaAotICogcmV0dXJucyB3aGV0aGVyIHRoZXJlIGFyZSB0YWJsZSB0dXBsZSBpdGVt cyBjb3JyZXNwb25kaW5nIHRvIGFuIGluZGV4Ci0gKiBlbnRyeS4gIFRoaXMgbGlrZWx5IGlzIG9u bHkgdXNlZnVsIHRvIHZlcmlmeSBpZiB0aGVyZSdzIGEgY29uZmxpY3QgaW4gYQotICogdW5pcXVl IGluZGV4LgorICogRmV0Y2ggdHVwbGUgYXQgYHRpZGAgaW50byBgc2xvdGAsIGFmdGVyIGRvaW5n IGEgdmlzaWJpbGl0eSB0ZXN0IGFjY29yZGluZworICogdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBs ZSB3YXMgZm91bmQgYW5kIHBhc3NlZCB0aGUgdmlzaWJpbGl0eSB0ZXN0LCByZXR1cm5zCisgKiB0 cnVlLCBmYWxzZSBvdGhlcndpc2UuICBUaGlzIGlzIGEgbG93LWxldmVsIGludGVyZmFjZSBkZXNp Z25lZCBmb3IgdXNlIGJ5CisgKiBjb25zdHJhaW50IGVuZm9yY2VtZW50IGNvZGUsIHdoZXJlIHBh c3NpbmcgYSBUSUQgY2FuJ3QgYmUgYXZvaWRlZC4KKyAqCisgKiBOb3RlIHRoYXQgKnRpZCBtYXkg YmUgbW9kaWZpZWQgd2hlbiB3ZSByZXR1cm4gdHJ1ZSAoZS5nLiBkdWUgdG8gZm9sbG93aW5nIGEK KyAqIEhPVCBjaGFpbiBpbiBhIGhlYXBhbSB0YWJsZSkuICBDYWxsZXIgc2hvdWxkIGNvbnNpZGVy IHBhc3NpbmcgYSBwb2ludGVyIHRvCisgKiBhIG11dGFibGUgY29weSBvZiB0aGVpciBvcmlnaW5h bCBUSUQgdG8gYXZvaWQgdW53YW50ZWQgc2lkZS1lZmZlY3RzLgorICoKKyAqIElmIGFsbF9kZWFk IGlzIG5vdCBOVUxMLCAqYWxsX2RlYWQgd2lsbCBiZSBzZXQgdG8gdHJ1ZSBoZXJlIGlmZiBpdCBp cworICogZ3VhcmFudGVlZCB0aGF0IG5vIGJhY2tlbmQgbmVlZHMgdG8gc2VlIGFueSB0dXBsZSBy ZWFjaGFibGUgdGhyb3VnaAorICogY2FsbGVyJ3MgVElELiAgVGhpcyBtZWFucyB0aGF0IGl0IGlz IHNhZmUgdG8gbWFyayBhbiBpbmRleCB0dXBsZSBjb250YWluaW5nCisgKiB0aGlzIFRJRCBhcyBM UF9ERUFELgorICoKKyAqIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiB0YWJsZV90dXBsZV9m ZXRjaF9yb3dfdmVyc2lvbigpIGFuZCB0aGlzCisgKiBmdW5jdGlvbiBpcyB0aGF0IHdlIHJldHVy biB0aGUgY3VycmVudGx5IHZpc2libGUgdmVyc2lvbiBvZiBhIHJvdywgd2hpY2gKKyAqIG1hdHRl cnMgd2l0aCBBTXMgdGhhdCBzdXBwb3J0IHN0b3JpbmcgbXVsdGlwbGUgcm93IHZlcnNpb25zIHJl YWNoYWJsZSB2aWEgYQorICogc2luZ2xlIFRJRCAoZS5nLiwgZHVlIHRvIGhlYXBhbSdzIEhPVCBj aGFpbnMpLiAgVG8gcmVsaWFibHkgZXZhbHVhdGUKKyAqIGV4YWN0bHkgdGhlIHR1cGxlIGF0IGB0 aWRgLCBjYWxsIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgaW5zdGVhZC4KICAqLwot ZXh0ZXJuIGJvb2wgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGVfY2hlY2soUmVsYXRpb24gcmVsLAot CQkJCQkJCQkJCSAgSXRlbVBvaW50ZXIgdGlkLAotCQkJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNo b3QsCi0JCQkJCQkJCQkJICBib29sICphbGxfZGVhZCk7CitzdGF0aWMgaW5saW5lIGJvb2wKK3Rh YmxlX2ZldGNoX3RpZChSZWxhdGlvbiByZWwsCisJCQkJSXRlbVBvaW50ZXIgdGlkLAorCQkJCVNu YXBzaG90IHNuYXBzaG90LAorCQkJCVR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCWJvb2wgKmFs bF9kZWFkKQoreworCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPmZldGNoX3RpZChyZWwsIHRpZCwg c25hcHNob3QsIHNsb3QsIGFsbF9kZWFkKTsKK30KKworLyoKKyAqIENvbnZlbmllbmNlIHdyYXBw ZXIgYXJvdW5kIHRhYmxlX2ZldGNoX3RpZCgpIGZvciBjYWxsZXJzIHRoYXQganVzdCBuZWVkIHRv CisgKiBjaGVjayBpZiBhIHR1cGxlIGlzIHZpc2libGUuCisgKgorICogQ2FsbGVyIHNob3VsZCBu b3RlIHRoZSB0YWJsZV9mZXRjaF90aWQgd2FybmluZyBhYm91dCAqdGlkIGJlaW5nIG1vZGlmaWVk CisgKiB3aGVuIHdlIHJldHVybiB0cnVlIGluIHNvbWUgY2FzZXMuCisgKi8KK2V4dGVybiBib29s IHRhYmxlX2ZldGNoX3RpZF9jaGVjayhSZWxhdGlvbiByZWwsCisJCQkJCQkJCSAgSXRlbVBvaW50 ZXIgdGlkLAorCQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJCQkgIGJvb2wgKmFs bF9kZWFkKTsKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzMzYsOSArMTM3OCw4IEBAIGV4 dGVybiBib29sIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKFJlbGF0aW9uIHJlbCwKICAq IGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQgdGhlIHZpc2liaWxp dHkgdGVzdCwgcmV0dXJucwogICogdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLgogICoKLSAqIFNlZSB0 YWJsZV9pbmRleF9mZXRjaF90dXBsZSdzIGNvbW1lbnQgYWJvdXQgd2hhdCB0aGUgZGlmZmVyZW5j ZSBiZXR3ZWVuCi0gKiB0aGVzZSBmdW5jdGlvbnMgaXMuIEl0IGlzIGNvcnJlY3QgdG8gdXNlIHRo aXMgZnVuY3Rpb24gb3V0c2lkZSBvZiBpbmRleAotICogZW50cnktPnRhYmxlIHR1cGxlIGxvb2t1 cHMuCisgKiBTZWUgdGFibGVfZmV0Y2hfdGlkJ3MgY29tbWVudCBhYm91dCB3aGF0IHRoZSBkaWZm ZXJlbmNlIGJldHdlZW4gdGhlc2UKKyAqIGZ1bmN0aW9ucyBpcy4KICAqLwogc3RhdGljIGlubGlu ZSBib29sCiB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVyc2lvbihSZWxhdGlvbiByZWwsCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCBiL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCmluZGV4IDQwNzY5OTA0MC4uNDFhN2QzM2Yx IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaAorKysg Yi9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaApAQCAtOTgsMTMgKzk4LDE2 IEBAIEFjY3VtdWxhdGVJT1N0YXRzKElPU3RhdHMgKmRzdCwgSU9TdGF0cyAqc3JjKQogCiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJSW5zdHJ1bWVudGF0aW9uIGluZm9ybWF0aW9uIGZv ciBpbmRleHNjYW5zIChhbWdldHR1cGxlIGFuZCBhbWdldGJpdG1hcCkKKyAqCUluc3RydW1lbnRh dGlvbiBpbmZvcm1hdGlvbiBmb3IgaW5kZXggc2NhbnMgKHVzZWQgYnkgYWxsIEFNIGludGVyZmFj ZXMpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhT Y2FuSW5zdHJ1bWVudGF0aW9uCiB7CiAJLyogSW5kZXggc2VhcmNoIGNvdW50IChpbmNyZW1lbnRl ZCB3aXRoIHBnc3RhdF9jb3VudF9pbmRleF9zY2FuIGNhbGwpICovCiAJdWludDY0CQluc2VhcmNo ZXM7CisKKwkvKiBUYWJsZSB0dXBsZXMgZmV0Y2hlZCBjb3VudCAoaW5jcmVtZW50ZWQgZHVyaW5n IGluZGV4LW9ubHkgc2NhbnMpICovCisJdWludDY0CQludGFibGV0dXBsZWZldGNoZXM7CiB9IElu ZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggMTMz NTkxODBkLi5lMTUxYzgzZjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0xNzg5LDExICsxNzg5 LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKICAqCQlTY2FuRGVzYwkJICAgaW5k ZXggc2NhbiBkZXNjcmlwdG9yCiAgKgkJSW5zdHJ1bWVudAkJICAgbG9jYWwgaW5kZXggc2NhbiBp bnN0cnVtZW50YXRpb24KICAqCQlTaGFyZWRJbmZvCQkgICBwYXJhbGxlbCB3b3JrZXIgaW5zdHJ1 bWVudGF0aW9uIChubyBsZWFkZXIgZW50cnkpCi0gKgkJVGFibGVTbG90CQkgICBzbG90IGZvciBo b2xkaW5nIHR1cGxlcyBmZXRjaGVkIGZyb20gdGhlIHRhYmxlCi0gKgkJVk1CdWZmZXIJCSAgIGJ1 ZmZlciBpbiB1c2UgZm9yIHZpc2liaWxpdHkgbWFwIHRlc3RpbmcsIGlmIGFueQogICoJCVBzY2Fu TGVuCQkgICBzaXplIG9mIHBhcmFsbGVsIGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9yCi0gKgkJ TmFtZUNTdHJpbmdBdHROdW1zIGF0dG51bXMgb2YgbmFtZSB0eXBlZCBjb2x1bW5zIHRvIHBhZCB0 byBOQU1FREFUQUxFTgotICoJCU5hbWVDU3RyaW5nQ291bnQgICBudW1iZXIgb2YgZWxlbWVudHMg aW4gdGhlIE5hbWVDU3RyaW5nQXR0TnVtcyBhcnJheQogICogLS0tLS0tLS0tLS0tLS0tLQogICov CiB0eXBlZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUKQEAgLTE4MTIsMTEgKzE4MDgsNyBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVz Y0RhdGEgKmlvc3NfU2NhbkRlc2M7CiAJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppb3NzX0lu c3RydW1lbnQ7CiAJU2hhcmVkSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppb3NzX1NoYXJlZElu Zm87Ci0JVHVwbGVUYWJsZVNsb3QgKmlvc3NfVGFibGVTbG90OwotCUJ1ZmZlcgkJaW9zc19WTUJ1 ZmZlcjsKIAlTaXplCQlpb3NzX1BzY2FuTGVuOwotCUF0dHJOdW1iZXIgKmlvc3NfTmFtZUNTdHJp bmdBdHROdW1zOwotCWludAkJCWlvc3NfTmFtZUNTdHJpbmdDb3VudDsKIH0gSW5kZXhPbmx5U2Nh blN0YXRlOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtX2hhbmRsZXIuYwppbmRleCAyMjY4Y2MyNzcuLjg0MDJmMzk2OSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC02NzksNyArNjc5LDcgQEAgaGVhcGFtX3Jl bGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVh cCwKIAogCQl0YWJsZVNjYW4gPSBOVUxMOwogCQloZWFwU2NhbiA9IE5VTEw7Ci0JCWluZGV4U2Nh biA9IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwKKwkJaW5kZXhTY2FuID0gaW5k ZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4LCBmYWxzZSwKIAkJCQkJCQkJCXNuYXBzaG90 ID8gc25hcHNob3QgOiBTbmFwc2hvdEFueSwKIAkJCQkJCQkJCU5VTEwsIDAsIDAsCiAJCQkJCQkJ CQlTT19OT05FKTsKQEAgLTcyMiwxMSArNzIyLDE0IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zv cl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJaWYgKGlu ZGV4U2NhbiAhPSBOVUxMKQogCQl7Ci0JCQlpZiAoIWluZGV4X2dldG5leHRfc2xvdChpbmRleFNj YW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKKwkJCWJvb2wJCXJlY2hlY2s7CisKKwkJ CWlmICghdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJl Y3Rpb24sCisJCQkJCQkJCQkJICBzbG90LCAmcmVjaGVjaykpCiAJCQkJYnJlYWs7CiAKIAkJCS8q IFNpbmNlIHdlIHVzZWQgbm8gc2NhbiBrZXlzLCBzaG91bGQgbmV2ZXIgbmVlZCB0byByZWNoZWNr ICovCi0JCQlpZiAoaW5kZXhTY2FuLT54c19yZWNoZWNrKQorCQkJaWYgKHJlY2hlY2spCiAJCQkJ ZWxvZyhFUlJPUiwgIkNMVVNURVIgZG9lcyBub3Qgc3VwcG9ydCBsb3NzeSBpbmRleCBjb25kaXRp b25zIik7CiAJCX0KIAkJZWxzZQpAQCAtMjY4Miw3ICsyNjg1LDYgQEAgc3RhdGljIGNvbnN0IFRh YmxlQW1Sb3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS5pbmRleF9mZXRjaF9iZWdpbiA9IGhl YXBhbV9pbmRleF9mZXRjaF9iZWdpbiwKIAkuaW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1faW5k ZXhfZmV0Y2hfcmVzZXQsCiAJLmluZGV4X2ZldGNoX2VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF9l bmQsCi0JLmluZGV4X2ZldGNoX3R1cGxlID0gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlLAogCiAJ LnR1cGxlX2luc2VydCA9IGhlYXBhbV90dXBsZV9pbnNlcnQsCiAJLnR1cGxlX2luc2VydF9zcGVj dWxhdGl2ZSA9IGhlYXBhbV90dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUsCkBAIC0yNjkyLDYgKzI2 OTQsNyBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJ LnR1cGxlX3VwZGF0ZSA9IGhlYXBhbV90dXBsZV91cGRhdGUsCiAJLnR1cGxlX2xvY2sgPSBoZWFw YW1fdHVwbGVfbG9jaywKIAorCS5mZXRjaF90aWQgPSBoZWFwYW1fZmV0Y2hfdGlkLAogCS50dXBs ZV9mZXRjaF9yb3dfdmVyc2lvbiA9IGhlYXBhbV9mZXRjaF9yb3dfdmVyc2lvbiwKIAkudHVwbGVf Z2V0X2xhdGVzdF90aWQgPSBoZWFwX2dldF9sYXRlc3RfdGlkLAogCS50dXBsZV90aWRfdmFsaWQg PSBoZWFwYW1fdHVwbGVfdGlkX3ZhbGlkLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2luZGV4c2Nhbi5jCmluZGV4IDMzZDE0ZjFkZS4uOTA0YTNhNzM3IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCkBAIC0xNCwzMiArMTQsMTE0IEBACiAgKi8K ICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCiAjaW5j bHVkZSAiYWNjZXNzL2hlYXBhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCisjaW5j bHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0 ZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRp bHMuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKIAogCitzdGF0aWMgYm9v bCBoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2Nh biwKKwkJCQkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkg IFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJCQkJICBib29sICpyZWNoZWNrKTsKK3N0 YXRpYyBib29sIGhlYXBhbV9pbmRleF9vbmx5X3R1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5E ZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJ CQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkJCQkgYm9vbCAqcmVjaGVjayk7 CitzdGF0aWMgdm9pZCBoZWFwYW1fc3RvcmVfaW9zX3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBU dXBsZVRhYmxlU2xvdCAqc2xvdCk7CitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUg Ym9vbCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJ CQkJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkJCQkJIFR1 cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJCQkJCQkJCSBib29sIGluZGV4X29ubHksCisJ CQkJCQkJCQkJCQkJCQkJIGJvb2wgKnJlY2hlY2spOworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdh eXNfaW5saW5lIGJvb2wgaGVhcGFtX2luZGV4X2hlYXBfZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkJCQkJCQkJICAgVHVwbGVUYWJs ZVNsb3QgKnNsb3QsIGJvb2wgaW5kZXhfb25seSwKKwkJCQkJCQkJCQkJCQkJCSAgIGJvb2wgKmhl YXBfY29udGludWUsIGJvb2wgKmFsbF9kZWFkKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlz X2lubGluZSB2b2lkIGhlYXBhbV9pbmRleF9raWxsX2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLAor CQkJCQkJCQkJCQkJCQkJICBib29sIGFsbF9kZWFkKTsKKworLyoKKyAqIFNpbXBsZSwgc2luZ2xl LXNob3QgVElEIGxvb2t1cCBmb3IgY29uc3RyYWludCBlbmZvcmNlbWVudCBjb2RlICh1bmlxdWUK KyAqIGNoZWNrcyBhbmQgc2ltaWxhcikuICBUaGlzIGlzIGVzc2VudGlhbGx5IGp1c3QgYSBoZWFw X2hvdF9zZWFyY2hfYnVmZmVyCisgKiB3cmFwcGVyLgorICoKKyAqIFRoaXMgaXNuJ3QgYWN0dWFs bHkgcmVsYXRlZCB0byBpbmRleCBzY2FucywgYnV0IGtlZXBpbmcgaXQgbmVhcgorICogaGVhcF9o b3Rfc2VhcmNoX2J1ZmZlciBjYW4gaGVscCB0aGUgY29tcGlsZXIgZ2VuZXJhdGUgYmV0dGVyIGNv ZGUuCisgKi8KK2Jvb2wKK2hlYXBhbV9mZXRjaF90aWQoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRl ciB0aWQsIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9v bCAqYWxsX2RlYWQpCit7CisJQnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICpic2xvdCA9IChCdWZm ZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdDsKKwlCdWZmZXIJCWJ1ZjsKKwlib29sCQlmb3Vu ZDsKKworCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOworCisJYnVmID0gUmVhZEJ1 ZmZlcihyZWwsIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisKKwlMb2NrQnVmZmVy KGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCWZvdW5kID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZl cih0aWQsIHJlbCwgYnVmLCBzbmFwc2hvdCwKKwkJCQkJCQkJICAgJmJzbG90LT5iYXNlLnR1cGRh dGEsIGFsbF9kZWFkLCB0cnVlKTsKKwlic2xvdC0+YmFzZS50dXBkYXRhLnRfc2VsZiA9ICp0aWQ7 CisJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwlpZiAoZm91bmQpCisJ eworCQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CisJCUV4ZWNT dG9yZVBpbm5lZEJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xvdCwKKwkJ CQkJCQkJCSAgIGJ1Zik7CisJfQorCWVsc2UKKwkJUmVsZWFzZUJ1ZmZlcihidWYpOworCisJcmV0 dXJuIGZvdW5kOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEluZGV4IFNjYW4gQ2FsbGJh Y2tzIGZvciBoZWFwIEFNCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi1JbmRleEZldGNoVGFi bGVEYXRhICoKLWhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBm bGFncykKK3ZvaWQKK2hlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihJbmRleFNjYW5EZXNjIHNjYW4s IHVpbnQzMiBmbGFncykKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFsbG9jMF9v YmplY3QoSW5kZXhGZXRjaEhlYXBEYXRhKTsKIAotCWhzY2FuLT54c19iYXNlLnJlbCA9IHJlbDsK LQloc2Nhbi0+eHNfYmFzZS5mbGFncyA9IGZsYWdzOwogCWhzY2FuLT54c19jYnVmID0gSW52YWxp ZEJ1ZmZlcjsKIAloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCWhzY2FuLT54 c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAKLQlyZXR1cm4gJmhzY2FuLT54c19iYXNlOwor CS8qIFJlbWVtYmVyIGlmIHNjYW4gaXMgcmVhZC1vbmx5ICovCisJaHNjYW4tPnhzX3JlYWRvbmx5 ID0gKGZsYWdzICYgU09fSElOVF9SRUxfUkVBRF9PTkxZKSAhPSAwOworCisJLyogUmVzb2x2ZSB3 aGljaCB4c19nZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24gdG8gdXNlIGZvciB0aGlzIHNjYW4g Ki8KKwlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBo ZWFwYW1faW5kZXhfb25seV90dXBsZV9nZXRuZXh0X3Nsb3Q7CisJZWxzZQorCQlzY2FuLT54c19n ZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90OworCisJ LyoKKwkgKiBJbmRleC1vbmx5IHNjYW5zIHRoYXQgcmV0dXJuICJuYW1lIiBjb2x1bW5zIHN0b3Jl ZCBhcyBjc3RyaW5ncyBuZWVkIGEKKwkgKiBwZXItdHVwbGUgY29udGV4dCB0byByZS1wYWQgdGhl bSB0byBOQU1FREFUQUxFTiB3aGlsZSBmaWxsaW5nIHRoZSBzbG90CisJICogKHNlZSBoZWFwYW1f c3RvcmVfaW9zX3Nsb3QpLiAgeHNfbmFtZV9jc3RyaW5nX2NvdW50IGlzIHNldCBieQorCSAqIGlu ZGV4X2JlZ2luc2NhbiBiZWZvcmUgd2UgZ2V0IGhlcmUuCisJICovCisJaWYgKHNjYW4tPnhzX3dh bnRfaXR1cCAmJiBzY2FuLT54c19uYW1lX2NzdHJpbmdfY291bnQgPiAwKQorCQloc2Nhbi0+eHNf aXR1cF9jeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJ CQkJCQkJCQkJCQkgICAiaW5kZXgtb25seSBzY2FuIG5hbWUgY29sdW1ucyIsCisJCQkJCQkJCQkJ CQkgICBBTExPQ1NFVF9TTUFMTF9TSVpFUyk7CisKKwkvKiBFeHBvc2UgaGVhcGFtJ3MgcHJpdmF0 ZSBmZXRjaCBzdGF0ZSB0aHJvdWdoIHRoZSBzY2FuJ3Mgb3BhcXVlIHBvaW50ZXIgKi8KKwlzY2Fu LT54c19oZWFwZmV0Y2ggPSBoc2NhbjsKIH0KIAogdm9pZAotaGVhcGFtX2luZGV4X2ZldGNoX3Jl c2V0KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCitoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQo SW5kZXhTY2FuRGVzYyBzY2FuKQogewogCS8qCiAJICogUmVzZXRzIGFyZSBhIG5vLW9wLgpAQCAt NTEsOSArMTMzLDkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURh dGEgKnNjYW4pCiB9CiAKIHZvaWQKLWhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRh YmxlRGF0YSAqc2NhbikKK2hlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2Fu KQogewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICop IHNjYW47CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEg Kikgc2Nhbi0+eHNfaGVhcGZldGNoOwogCiAJLyogZHJvcCBwaW4gaWYgdGhlcmUncyBhIHBpbm5l ZCBoZWFwIHBhZ2UgKi8KIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCkBAIC02 Myw2ICsxNDUsMTAgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRh ICpzY2FuKQogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1ZmZlcikpCiAJCVJlbGVh c2VCdWZmZXIoaHNjYW4tPnhzX3ZtYnVmZmVyKTsKIAorCS8qIEZyZWUgdGhlIGluZGV4LW9ubHkg c2NhbiBuYW1lLWNvbHVtbiBjb250ZXh0LCBpZiBhbnkgKi8KKwlpZiAoaHNjYW4tPnhzX2l0dXBf Y3h0KQorCQlNZW1vcnlDb250ZXh0RGVsZXRlKGhzY2FuLT54c19pdHVwX2N4dCk7CisKIAlwZnJl ZShoc2Nhbik7CiB9CiAKQEAgLTIyOCwxOCArMzE0LDMxNiBAQCBoZWFwX2hvdF9zZWFyY2hfYnVm ZmVyKEl0ZW1Qb2ludGVyIHRpZCwgUmVsYXRpb24gcmVsYXRpb24sIEJ1ZmZlciBidWZmZXIsCiAJ cmV0dXJuIGZhbHNlOwogfQogCi1ib29sCi1oZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0 IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCi0JCQkJCQkgSXRlbVBvaW50ZXIgdGlkLAotCQkJ CQkJIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJ CQkJIGJvb2wgKmhlYXBfY29udGludWUsIGJvb2wgKmFsbF9kZWFkKQorLyogeHNfZ2V0bmV4dF9z bG90IGNhbGxiYWNrOiBhbWdldHR1cGxlLCBwbGFpbiBpbmRleCBzY2FuICovCitzdGF0aWMgcGdf YXR0cmlidXRlX2hvdCBib29sCitoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90 KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24s CisJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJICBib29sICpyZWNo ZWNrKQogewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRh ICopIHNjYW47Ci0JQnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICpic2xvdCA9IChCdWZmZXJIZWFw VHVwbGVUYWJsZVNsb3QgKikgc2xvdDsKKwlBc3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1cCk7CisJ QXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldHR1cGxlICE9IE5VTEwp OworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBz bG90LCBmYWxzZSwgcmVjaGVjayk7Cit9CisKKy8qIHhzX2dldG5leHRfc2xvdCBjYWxsYmFjazog YW1nZXR0dXBsZSwgaW5kZXgtb25seSBzY2FuICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2hvdCBi b29sCitoZWFwYW1faW5kZXhfb25seV90dXBsZV9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBz Y2FuLAorCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJIFR1cGxl VGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJIGJvb2wgKnJlY2hlY2spCit7CisJQXNzZXJ0KHNj YW4tPnhzX3dhbnRfaXR1cCk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbWdldHR1cGxlICE9IE5VTEwpOworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Ns b3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVlLCByZWNoZWNrKTsKK30KKworLyoKKyAqIEZp bGwgYW4gaW5kZXgtb25seSBzY2FuJ3MgcmVzdWx0IHNsb3QgZnJvbSB0aGUgZGF0YSB0aGUgaW5k ZXggQU0gcmV0dXJuZWQuCisgKgorICogVGhlIGRhdGEgaXMgcHJvdmlkZWQgaW4gZWl0aGVyIEhl YXBUdXBsZSAoeHNfaGl0dXApIG9yIEluZGV4VHVwbGUgKHhzX2l0dXApCisgKiBmb3JtYXQuICBB biBpbmRleCBBTSBtYXkgZmlsbCBib3RoLCBpbiB3aGljaCBjYXNlIHRoZSBoZWFwIGZvcm1hdCBp cyB1c2VkLAorICogc2luY2UgaXQncyBhIGJpdCBjaGVhcGVyIHRvIGZpbGwgYSBzbG90IGZyb20u ICAibmFtZSIgY29sdW1ucyBzdG9yZWQgYXMKKyAqIGNzdHJpbmdzIChlLmcuIGJ0cmVlIG5hbWVf b3BzKSBhcmUgcmUtcGFkZGVkIHRvIE5BTUVEQVRBTEVOIGFsbG9jYXRpb25zLAorICogd2hpY2gg bGl2ZSBpbiB0aGUgaGVhcCBBTSdzIHBlci10dXBsZSB4c19pdHVwX2N4dCAocmVzZXQgaGVyZSBv biBlYWNoIGNhbGwpLgorICoKKyAqIFRoaXMgcmVhZHMgdGhlIHRhYmxlIEFNJ3MgcHJpdmF0ZSBz Y2FuLXJlc3VsdCBmaWVsZHMgKHhzX2l0dXAsIHhzX2hpdHVwLAorICogZXRjLik7IGRvaW5nIHNv IGlzIHRoZSB0YWJsZSBBTSdzIGpvYiwgd2hpY2ggaXMgd2h5IHRoZSBleGVjdXRvciBhbmQgcGxh bm5lcgorICogcmVjZWl2ZSBhIGZpbGxlZCBzbG90IGZyb20gdGFibGVfaW5kZXhfZ2V0bmV4dF9z bG90IGluc3RlYWQuCisgKgorICogWFhYIFNob3VsZCB0aGlzIGJlIGV4cG9ydGVkIGZvciB1c2Ug Ynkgb3RoZXIgaW5kZXggQU1zLCBvciBtb3ZlZCB0byBhCisgKiBuZXV0cmFsIGZpbGUgc3VjaCBh cyBpbmRleGFtLmM/ICBOb3RlIHRoYXQgdGhlIG1lbW9yeSBjb250ZXh0IHdlJ3JlIHVzaW5nCisg KiBoZXJlIGxpdmVzIGluIEluZGV4RmV0Y2hIZWFwRGF0YS4KKyAqLworc3RhdGljIHZvaWQKK2hl YXBhbV9zdG9yZV9pb3Nfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpz bG90KQoreworCWlmIChzY2FuLT54c19oaXR1cCkKKwl7CisJCS8qCisJCSAqIFdlIGRvbid0IHRh a2UgdGhlIHRyb3VibGUgdG8gdmVyaWZ5IHRoYXQgdGhlIHByb3ZpZGVkIHR1cGxlIGhhcworCQkg KiBleGFjdGx5IHRoZSBzbG90J3MgZm9ybWF0LCBidXQgaXQgc2VlbXMgd29ydGggZG9pbmcgYSBx dWljayBjaGVjaworCQkgKiBvbiB0aGUgbnVtYmVyIG9mIGZpZWxkcy4KKwkJICovCisJCUFzc2Vy dChzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5uYXR0cyA9PQorCQkJICAgc2Nhbi0+eHNfaGl0 dXBkZXNjLT5uYXR0cyk7CisJCUV4ZWNGb3JjZVN0b3JlSGVhcFR1cGxlKHNjYW4tPnhzX2hpdHVw LCBzbG90LCBmYWxzZSk7CisJfQorCWVsc2UgaWYgKHNjYW4tPnhzX2l0dXApCisJeworCQlUdXBs ZURlc2MJaXR1cGRlc2MgPSBzY2FuLT54c19pdHVwZGVzYzsKKworCQkvKgorCQkgKiBOb3RlOiB3 ZSBtdXN0IHVzZSB0aGUgdHVwZGVzYyBzdXBwbGllZCBieSB0aGUgQU0gaW4KKwkJICogaW5kZXhf ZGVmb3JtX3R1cGxlLCBub3QgdGhlIHNsb3QncyB0dXBkZXNjLCBpbiBjYXNlIHRoZSBsYXR0ZXIg aGFzCisJCSAqIGRpZmZlcmVudCBkYXRhdHlwZXMgKHRoaXMgaGFwcGVucyBmb3IgYnRyZWUgbmFt ZV9vcHMgaW4KKwkJICogcGFydGljdWxhcikuIFRoZXknZCBiZXR0ZXIgaGF2ZSB0aGUgc2FtZSBu dW1iZXIgb2YgY29sdW1ucyB0aG91Z2gsCisJCSAqIGFzIHdlbGwgYXMgYmVpbmcgZGF0YXR5cGUt Y29tcGF0aWJsZSB3aGljaCBpcyBzb21ldGhpbmcgd2UgY2FuJ3Qgc28KKwkJICogZWFzaWx5IGNo ZWNrLgorCQkgKi8KKwkJQXNzZXJ0KHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3ItPm5hdHRzID09 IGl0dXBkZXNjLT5uYXR0cyk7CisKKwkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJCWluZGV4X2Rl Zm9ybV90dXBsZShzY2FuLT54c19pdHVwLCBpdHVwZGVzYywKKwkJCQkJCSAgIHNsb3QtPnR0c192 YWx1ZXMsIHNsb3QtPnR0c19pc251bGwpOworCisJCS8qCisJCSAqIENvcHkgYWxsIG5hbWUgY29s dW1ucyBzdG9yZWQgYXMgY3N0cmluZ3MgYmFjayBpbnRvIGEgTkFNRURBVEFMRU4KKwkJICogYnl0 ZSBzaXplZCBhbGxvY2F0aW9uLiAgV2UgbWFyayB0aGlzIGJyYW5jaCBhcyB1bmxpa2VseSBhcwor CQkgKiBnZW5lcmFsbHkgIm5hbWUiIGlzIHVzZWQgb25seSBmb3IgdGhlIHN5c3RlbSBjYXRhbG9n cyBhbmQgdGhpcworCQkgKiB3b3VsZCBoYXZlIHRvIGJlIGEgdXNlciBxdWVyeSBydW5uaW5nIG9u IHRob3NlIG9yIHNvbWUgb3RoZXIgdXNlcgorCQkgKiB0YWJsZSB3aXRoIGFuIGluZGV4IG9uIGEg bmFtZSBjb2x1bW4uCisJCSAqLworCQlpZiAodW5saWtlbHkoc2Nhbi0+eHNfbmFtZV9jc3RyaW5n X2F0dG51bXMgIT0gTlVMTCkpCisJCXsKKwkJCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAo SW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKworCQkJLyogZnJlZSB0 aGUgcHJldmlvdXMgdHVwbGUncyBuYW1lIGFsbG9jYXRpb25zICovCisJCQlNZW1vcnlDb250ZXh0 UmVzZXQoaHNjYW4tPnhzX2l0dXBfY3h0KTsKKworCQkJZm9yIChpbnQgaWR4ID0gMDsgaWR4IDwg c2Nhbi0+eHNfbmFtZV9jc3RyaW5nX2NvdW50OyBpZHgrKykKKwkJCXsKKwkJCQlpbnQJCQlhdHRu dW0gPSBzY2FuLT54c19uYW1lX2NzdHJpbmdfYXR0bnVtc1tpZHhdOworCQkJCU5hbWUJCW5hbWU7 CisKKwkJCQkvKiBza2lwIG51bGwgRGF0dW1zICovCisJCQkJaWYgKHNsb3QtPnR0c19pc251bGxb YXR0bnVtXSkKKwkJCQkJY29udGludWU7CisKKwkJCQluYW1lID0gKE5hbWUpIE1lbW9yeUNvbnRl eHRBbGxvYyhoc2Nhbi0+eHNfaXR1cF9jeHQsCisJCQkJCQkJCQkJCQkgTkFNRURBVEFMRU4pOwor CisJCQkJLyogdXNlIG5hbWVzdHJjcHkgdG8gemVyby1wYWQgYWxsIHRyYWlsaW5nIGJ5dGVzICov CisJCQkJbmFtZXN0cmNweShuYW1lLCBEYXR1bUdldENTdHJpbmcoc2xvdC0+dHRzX3ZhbHVlc1th dHRudW1dKSk7CisJCQkJc2xvdC0+dHRzX3ZhbHVlc1thdHRudW1dID0gTmFtZUdldERhdHVtKG5h bWUpOworCQkJfQorCQl9CisKKwkJRXhlY1N0b3JlVmlydHVhbFR1cGxlKHNsb3QpOworCX0KKwll bHNlCisJCWVsb2coRVJST1IsICJubyBkYXRhIHJldHVybmVkIGZvciBpbmRleC1vbmx5IHNjYW4i KTsKK30KKworLyoKKyAqIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBmb3IgYm90aCBoZWFwYW1faW5k ZXhfKl9nZXRuZXh0X3Nsb3QgdmFyaWFudHMuCisgKgorICogVGhlIHJlc3VsdCBpcyB0cnVlIGlm IGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2FzCisg KiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgT24gc3VjY2VzcyB0aGUgc2xvdCBpcyBmaWxsZWQ6 IGZvciBwbGFpbiBpbmRleAorICogc2NhbnMgd2l0aCB0aGUgaGVhcCB0dXBsZTsgZm9yIGluZGV4 LW9ubHkgc2NhbnMgd2l0aCB0aGUgaW5kZXggZGF0YSAoZnJvbQorICogeHNfaXR1cC94c19oaXR1 cCwgdmlhIGhlYXBhbV9zdG9yZV9pb3Nfc2xvdCkuICBJZiByZWNoZWNrIGlzIG5vdCBOVUxMLAor ICogKnJlY2hlY2sgcmVwb3J0cyB3aGV0aGVyIHRoZSBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNr ZWQgKG9ubHkgbWVhbmluZ2Z1bAorICogb24gYSB0cnVlIHJldHVybikuCisgKgorICogT24gc3Vj Y2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQs IGFuZCB3aWxsIGJlCisgKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGNhbGwgaGVyZSAob3IgYnkgYSBs YXRlciBjYWxsIHRvIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQKKyAqIHRocm91Z2ggaW5kZXhfZW5k c2NhbikuCisgKgorICogVGhlIGluZGV4X29ubHkgcGFyYW1ldGVyIGlzIGEgY29tcGlsZS10aW1l IGNvbnN0YW50IGF0IGVhY2ggY2FsbCBzaXRlLAorICogYWxsb3dpbmcgdGhlIGNvbXBpbGVyIHRv IHNwZWNpYWxpemUgdGhlIGNvZGUgZm9yIGVhY2ggdmFyaWFudC4KKyAqLworc3RhdGljIHBnX2F0 dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wKK2hlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCSAgVHVwbGVU YWJsZVNsb3QgKnNsb3QsIGJvb2wgaW5kZXhfb25seSwKKwkJCQkJCSAgYm9vbCAqcmVjaGVjaykK K3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBz Y2FuLT54c19oZWFwZmV0Y2g7CisJYm9vbAkgICAqaGVhcF9jb250aW51ZSA9ICZzY2FuLT54c19o ZWFwX2NvbnRpbnVlOworCWJvb2wJCWFsbF92aXNpYmxlID0gZmFsc2U7CisJYm9vbAkJYWxsX2Rl YWQ7CisJQmxvY2tOdW1iZXIgbGFzdF92aXNpdGVkX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVy OworCXVpbnQ4CQluX3Zpc2l0ZWRfcGFnZXMgPSAwOworCUl0ZW1Qb2ludGVyIHRpZCA9IE5VTEw7 CisKKwlmb3IgKDs7KQorCXsKKwkJYm9vbAkJZ290X2hlYXBfdHVwbGU7CisKKwkJaWYgKCEqaGVh cF9jb250aW51ZSkKKwkJeworCQkJLyogR2V0IHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleCAq LworCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKKworCQkJLyog SWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KKwkJCWlmICh0aWQg PT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJLyogRm9yIGluZGV4LW9ubHkgc2NhbnMsIGNoZWNr IHRoZSB2aXNpYmlsaXR5IG1hcCAqLworCQkJaWYgKGluZGV4X29ubHkpCisJCQkJYWxsX3Zpc2li bGUgPSBWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24sCisJCQkJCQkJCQkJCSBJdGVt UG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJCQkJCSAmaHNjYW4tPnhzX3ZtYnVm ZmVyKTsKKwkJfQorCisJCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhzX2hlYXB0 aWQpKTsKKworCQlpZiAoaW5kZXhfb25seSkKKwkJeworCQkJLyoKKwkJCSAqIFdlIGNhbiBza2lw IHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAgcGFnZSBvbgorCQkJ ICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBldmVyeWJvZHkuICBJbiBh bnkgY2FzZSwKKwkJCSAqIHdlIGhhdmUgbm8gdXNlIGZvciBhIGhlYXAgdHVwbGU6IHRoZSByZXN1 bHQgc2xvdCBpcyBmaWxsZWQgZnJvbQorCQkJICogdGhlIGluZGV4IGRhdGEgKHhzX2l0dXAveHNf aGl0dXApIGJlbG93LiAgV2UgdGhlcmVmb3JlIHBhc3Mgbm8KKwkJCSAqIHNsb3QgZG93biB0byBo ZWFwYW1faW5kZXhfaGVhcF9mZXRjaCAoaXQganVzdCB2ZXJpZmllcyB0aGF0IGEKKwkJCSAqIHZp c2libGUgdHVwbGUgZXhpc3RzKS4KKwkJCSAqLworCQkJaWYgKCFhbGxfdmlzaWJsZSkKKwkJCXsK KwkJCQkvKgorCQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sg dmlzaWJpbGl0eS4KKwkJCQkgKi8KKwkJCQlpZiAoc2Nhbi0+aW5zdHJ1bWVudCkKKwkJCQkJc2Nh bi0+aW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVzKys7CisKKwkJCQlnb3RfaGVhcF90dXBs ZSA9IGhlYXBhbV9pbmRleF9oZWFwX2ZldGNoKHNjYW4sIGhzY2FuLCBOVUxMLAorCQkJCQkJCQkJ CQkJCQkgaW5kZXhfb25seSwKKwkJCQkJCQkJCQkJCQkJIGhlYXBfY29udGludWUsCisJCQkJCQkJ CQkJCQkJCSAmYWxsX2RlYWQpOworCQkJCWhlYXBhbV9pbmRleF9raWxsX2l0ZW0oc2NhbiwgYWxs X2RlYWQpOworCisJCQkJaWYgKCFnb3RfaGVhcF90dXBsZSkKKwkJCQl7CisJCQkJCS8qCisJCQkJ CSAqIE5vIHZpc2libGUgdHVwbGUuICBJZiBjYWxsZXIgc2V0IGEgdmlzaXRlZC1wYWdlcyBsaW1p dAorCQkJCQkgKiAob25seSBzZWxmdW5jcy5jIGRvZXMgdGhpcyksIGNvdW50IGRpc3RpbmN0IGhl YXAgcGFnZXMKKwkJCQkJICogYW5kIGdpdmUgdXAgb25jZSB3ZSd2ZSB2aXNpdGVkIHRvbyBtYW55 LgorCQkJCQkgKi8KKwkJCQkJaWYgKHVubGlrZWx5KHNjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNfbGlt aXQgPiAwKSkKKwkJCQkJeworCQkJCQkJQXNzZXJ0KGhzY2FuLT54c19ibGsgPT0gSXRlbVBvaW50 ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKKworCQkJCQkJaWYgKGhzY2FuLT54c19ibGsgIT0gbGFz dF92aXNpdGVkX2Jsb2NrKQorCQkJCQkJeworCQkJCQkJCWxhc3RfdmlzaXRlZF9ibG9jayA9IGhz Y2FuLT54c19ibGs7CisJCQkJCQkJaWYgKCsrbl92aXNpdGVkX3BhZ2VzID4gc2Nhbi0+eHNfdmlz aXRlZF9wYWdlc19saW1pdCkKKwkJCQkJCQkJcmV0dXJuIGZhbHNlOwkvKiBnaXZlIHVwICovCisJ CQkJCQl9CisJCQkJCX0KKwkJCQkJY29udGludWU7CS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBu ZXh0IGluZGV4IGVudHJ5ICovCisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBPbmx5IE1WQ0Mgc25h cHNob3RzIGFyZSBzdXBwb3J0ZWQgd2l0aCBzdGFuZGFyZCBpbmRleC1vbmx5CisJCQkJICogc2Nh bnMsIHNvIHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIGtlZXAgZm9sbG93aW5nIHRoZSBIT1QK KwkJCQkgKiBjaGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRyeSBoYXMgYmVlbiBmb3VuZC4gIE90aGVy IGNhbGxlcnMKKwkJCQkgKiAoY3VycmVudGx5IG9ubHkgc2VsZnVuY3MuYykgdXNlIFNuYXBzaG90 Tm9uVmFjdXVtYWJsZSwgYW5kCisJCQkJICogd2FudCB1cyB0byBhc3N1bWUgdGhhdCBqdXN0IGhh dmluZyBvbmUgdmlzaWJsZSB0dXBsZSBpbiB0aGUKKwkJCQkgKiBob3QgY2hhaW4gaXMgYWx3YXlz IGdvb2QgZW5vdWdoLgorCQkJCSAqLworCQkJCUFzc2VydCghKCpoZWFwX2NvbnRpbnVlICYmIElz TVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkpOworCQkJfQorCQkJZWxzZQorCQkJewor CQkJCS8qCisJCQkJICogV2UgZGlkbid0IGFjY2VzcyB0aGUgaGVhcCwgc28gd2UnbGwgbmVlZCB0 byB0YWtlIGEKKwkJCQkgKiBwcmVkaWNhdGUgbG9jayBleHBsaWNpdGx5LCBhcyBpZiB3ZSBoYWQu ICBGb3Igbm93IHdlIGRvCisJCQkJICogdGhhdCBhdCBwYWdlIGxldmVsLgorCQkJCSAqLworCQkJ CVByZWRpY2F0ZUxvY2tQYWdlKHNjYW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJICBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJCSAgc2Nhbi0+eHNfc25hcHNob3QpOwor CQkJfQorCisJCQkvKgorCQkJICogRmlsbCB0aGUgY2FsbGVyJ3Mgc2xvdCBmcm9tIHRoZSBpbmRl eCBkYXRhIHRoZSBBTSByZXR1cm5lZCAobm93CisJCQkgKiBpbiBzY2FuLT54c19pdHVwIG9yIHNj YW4tPnhzX2hpdHVwKSwgYW5kIHJlcG9ydCB3aGV0aGVyIHRoZQorCQkJICogc2NhbiBrZXlzIG11 c3QgYmUgcmVjaGVja2VkLgorCQkJICovCisJCQloZWFwYW1fc3RvcmVfaW9zX3Nsb3Qoc2Nhbiwg c2xvdCk7CisJCQlBc3NlcnQocmVjaGVjayAhPSBOVUxMIHx8ICFzY2FuLT54c19yZWNoZWNrKTsK KwkJCWlmIChyZWNoZWNrKQorCQkJCSpyZWNoZWNrID0gc2Nhbi0+eHNfcmVjaGVjazsKKwkJCXJl dHVybiB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEZldGNoIHRoZSBuZXh0 IChvciBvbmx5KSB2aXNpYmxlIGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5kZXgKKwkJCSAqIGVudHJ5 LiAgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdyYWIgdGhlCisJ CQkgKiBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleC4KKwkJCSAqLworCQkJZ290X2hlYXBfdHVwbGUg PSBoZWFwYW1faW5kZXhfaGVhcF9mZXRjaChzY2FuLCBoc2Nhbiwgc2xvdCwKKwkJCQkJCQkJCQkJ CQkgaW5kZXhfb25seSwKKwkJCQkJCQkJCQkJCQkgaGVhcF9jb250aW51ZSwKKwkJCQkJCQkJCQkJ CQkgJmFsbF9kZWFkKTsKKwkJCWhlYXBhbV9pbmRleF9raWxsX2l0ZW0oc2NhbiwgYWxsX2RlYWQp OworCQkJaWYgKGdvdF9oZWFwX3R1cGxlKQorCQkJeworCQkJCUFzc2VydChyZWNoZWNrICE9IE5V TEwgfHwgIXNjYW4tPnhzX3JlY2hlY2spOworCQkJCWlmIChyZWNoZWNrKQorCQkJCQkqcmVjaGVj ayA9IHNjYW4tPnhzX3JlY2hlY2s7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKwl9CisK KwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBHZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVw bGUuCisgKgorICogVGhlIHJlc3VsdCBpcyBhIHZpc2libGUgaGVhcCB0dXBsZSBhc3NvY2lhdGVk IHdpdGggdGhlIGluZGV4IFRJRCBtb3N0CisgKiByZWNlbnRseSBmZXRjaGVkIGJ5IG91ciBjYWxs ZXIgaW4gc2Nhbi0+eHNfaGVhcHRpZCwgb3IgTlVMTCBpZiBubyBtb3JlCisgKiBtYXRjaGluZyB0 dXBsZXMgZXhpc3QuICAoVGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcgdHVwbGUg YmVjYXVzZQorICogb2YgSE9UIGNoYWlucywgYWx0aG91Z2ggd2hlbiB1c2luZyBhbiBNVkNDIHNu YXBzaG90IGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlCisgKiBmb3IgbW9yZSB0aGFuIG9uZSBzdWNo IHR1cGxlIHRvIGV4aXN0LikKKyAqCisgKiBPbiBzdWNjZXNzLCB0aGUgYnVmZmVyIGNvbnRhaW5p bmcgdGhlIGhlYXAgdHVwIGlzIHBpbm5lZC4gIFRoZSBwaW4gbXVzdCBiZQorICogZHJvcHBlZCBl bHNld2hlcmUuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sCito ZWFwYW1faW5kZXhfaGVhcF9mZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFw RGF0YSAqaHNjYW4sCisJCQkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCBpbmRleF9vbmx5 LAorCQkJCQkJYm9vbCAqaGVhcF9jb250aW51ZSwgYm9vbCAqYWxsX2RlYWQpCit7CisJUmVsYXRp b24JcmVsID0gc2Nhbi0+aGVhcFJlbGF0aW9uOworCUl0ZW1Qb2ludGVyIHRpZCA9ICZzY2FuLT54 c19oZWFwdGlkOworCVNuYXBzaG90CXNuYXBzaG90ID0gc2Nhbi0+eHNfc25hcHNob3Q7CisJSGVh cFR1cGxlRGF0YSBpZHh0dXBkYXRhOworCUhlYXBUdXBsZQloZWFwVHVwbGU7CiAJYm9vbAkJZ290 X2hlYXBfdHVwbGU7CiAKLQlBc3NlcnQoVFRTX0lTX0JVRkZFUlRVUExFKHNsb3QpKTsKKwkqYWxs X2RlYWQgPSBmYWxzZTsKKworCWlmIChpbmRleF9vbmx5KQorCXsKKwkJLyoKKwkJICogSW5kZXgt b25seSBzY2FucyBkb24ndCBwYXNzIGFuIG9uLWRpc2sgaGVhcCB0dXBsZSBzbG90LiAgVGhleSBv bmx5CisJCSAqIGNhbGwgaGVyZSB0byB2ZXJpZnkgdHVwbGUgdmlzaWJpbGl0eSwgc28gdGhleSBk b24ndCBldmVyIG5lZWQgb25lLgorCQkgKi8KKwkJcGdfYXNzdW1lKHNsb3QgPT0gTlVMTCk7CisJ CWhlYXBUdXBsZSA9ICZpZHh0dXBkYXRhOworCX0KKwllbHNlCisJeworCQlCdWZmZXJIZWFwVHVw bGVUYWJsZVNsb3QgKmJzbG90ID0gKEJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqKSBzbG90Owor CisJCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOworCQloZWFwVHVwbGUgPSAmYnNs b3QtPmJhc2UudHVwZGF0YTsKKwl9CiAKIAkvKiBXZSBjYW4gc2tpcCB0aGUgYnVmZmVyLXN3aXRj aGluZyBsb2dpYyBpZiB3ZSdyZSBvbiB0aGUgc2FtZSBwYWdlLiAqLwogCWlmIChoc2Nhbi0+eHNf YmxrICE9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSkKQEAgLTI1MiwxNCArNjM2LDEz IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAq c2NhbiwKIAkJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQogCQkJUmVsZWFzZUJ1 ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWFkQnVmZmVyKGhz Y2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2Jsayk7CisJCWhzY2FuLT54c19jYnVmID0gUmVh ZEJ1ZmZlcihyZWwsIGhzY2FuLT54c19ibGspOwogCiAJCS8qCiAJCSAqIFBydW5lIHBhZ2Ugd2hl biBpdCBpcyBwaW5uZWQgZm9yIHRoZSBmaXJzdCB0aW1lCiAJCSAqLwotCQloZWFwX3BhZ2VfcHJ1 bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYsCi0JCQkJCQkJJmhzY2Fu LT54c192bWJ1ZmZlciwKLQkJCQkJCQloc2Nhbi0+eHNfYmFzZS5mbGFncyAmIFNPX0hJTlRfUkVM X1JFQURfT05MWSk7CisJCWhlYXBfcGFnZV9wcnVuZV9vcHQocmVsLCBoc2Nhbi0+eHNfY2J1Ziwg JmhzY2FuLT54c192bWJ1ZmZlciwKKwkJCQkJCQloc2Nhbi0+eHNfcmVhZG9ubHkpOwogCX0KIAog CUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihoc2Nhbi0+eHNfY2J1ZikgPT0gaHNjYW4tPnhz X2Jsayk7CkBAIC0yNjgsMTMgKzY1MSwxMyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3Ry dWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJLyogT2J0YWluIHNoYXJlLWxvY2sgb24g dGhlIGJ1ZmZlciBzbyB3ZSBjYW4gZXhhbWluZSB2aXNpYmlsaXR5ICovCiAJTG9ja0J1ZmZlciho c2Nhbi0+eHNfY2J1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCWdvdF9oZWFwX3R1cGxlID0gaGVh cF9ob3Rfc2VhcmNoX2J1ZmZlcih0aWQsCi0JCQkJCQkJCQkJCWhzY2FuLT54c19iYXNlLnJlbCwK KwkJCQkJCQkJCQkJcmVsLAogCQkJCQkJCQkJCQloc2Nhbi0+eHNfY2J1ZiwKIAkJCQkJCQkJCQkJ c25hcHNob3QsCi0JCQkJCQkJCQkJCSZic2xvdC0+YmFzZS50dXBkYXRhLAorCQkJCQkJCQkJCQlo ZWFwVHVwbGUsCiAJCQkJCQkJCQkJCWFsbF9kZWFkLAogCQkJCQkJCQkJCQkhKmhlYXBfY29udGlu dWUpOwotCWJzbG90LT5iYXNlLnR1cGRhdGEudF9zZWxmID0gKnRpZDsKKwloZWFwVHVwbGUtPnRf c2VsZiA9ICp0aWQ7CiAJTG9ja0J1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgQlVGRkVSX0xPQ0tfVU5M T0NLKTsKIAogCWlmIChnb3RfaGVhcF90dXBsZSkKQEAgLTI4NSw4ICs2NjgsMTMgQEAgaGVhcGFt X2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCQkg Ki8KIAkJKmhlYXBfY29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBzaG90KTsKIAot CQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHNjYW4tPnJlbCk7Ci0JCUV4 ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xvdCwgaHNjYW4t PnhzX2NidWYpOworCQlpZiAoIWluZGV4X29ubHkpCisJCXsKKwkJCXNsb3QtPnR0c190YWJsZU9p ZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKKwkJCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSho ZWFwVHVwbGUsIHNsb3QsIGhzY2FuLT54c19jYnVmKTsKKwkJfQorCisJCXBnc3RhdF9jb3VudF9o ZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRpb24pOwogCX0KIAllbHNlCiAJewpAQCAtMjk2LDMg KzY4NCwyMiBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4sCiAKIAlyZXR1cm4gZ290X2hlYXBfdHVwbGU7CiB9CisKKy8qCisgKiBJZiB3 ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzLCBh cnJhbmdlIGZvciB0aGUKKyAqIGluZGV4IEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJ RC4gIFdlIGRvIG5vdCBkbyB0aGlzIHdoZW4gaW4gcmVjb3ZlcnkKKyAqIGJlY2F1c2UgaXQgbWF5 IHZpb2xhdGUgTVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50cyBpbiBSZWxhdGlvbkdldEluZGV4 U2NhbigpLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZAoraGVh cGFtX2luZGV4X2tpbGxfaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgYWxsX2RlYWQpCit7 CisJaWYgKHNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKKwkJcmV0dXJuOworCisJLyoKKwkg KiBUZWxsIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggQU0gdG8ga2lsbCBpdHMgZW50cnkgZm9yIHRo YXQgVElELiBOZXh0CisJICogdGFibGVhbV91dGlsX2ZldGNoX25leHRfdHVwbGVfdGlkIGNhbGwg d2lsbCB0ZWxsIGluZGV4IEFNIHRvIGtpbGwKKwkgKiB0aGUgdHVwbGUgaXQganVzdCByZXR1cm5l ZCB0byB1cyAtLSB0aGUgInByaW9yIiB0dXBsZS4KKwkgKi8KKwlzY2FuLT5raWxsX3ByaW9yX3R1 cGxlID0gYWxsX2RlYWQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92 aXNpYmlsaXR5bWFwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMK aW5kZXggNGZkNDcwNzAyLi40YmE5ZjQ4ZTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL3Zpc2liaWxpdHltYXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNp YmlsaXR5bWFwLmMKQEAgLTMxMyw3ICszMTMsMzIgQEAgdmlzaWJpbGl0eW1hcF9zZXQoQmxvY2tO dW1iZXIgaGVhcEJsaywKICAqIHNpbmNlIHdlIGRvbid0IGxvY2sgdGhlIHZpc2liaWxpdHkgbWFw IHBhZ2UgZWl0aGVyLCBpdCdzIGV2ZW4gcG9zc2libGUgdGhhdAogICogc29tZW9uZSBlbHNlIGNv dWxkIGhhdmUgY2hhbmdlZCB0aGUgYml0IGp1c3QgYmVmb3JlIHdlIGxvb2sgYXQgaXQsIGJ1dCB5 ZXQKICAqIHdlIG1pZ2h0IHNlZSB0aGUgb2xkIHZhbHVlLiAgSXQgaXMgdGhlIGNhbGxlcidzIHJl c3BvbnNpYmlsaXR5IHRvIGRlYWwgd2l0aAotICogYWxsIGNvbmN1cnJlbmN5IGlzc3VlcyEKKyAq IGFsbCBjb25jdXJyZW5jeSBpc3N1ZXMhICBJbiBwcmFjdGljZSBpdCBjYW4ndCBiZSBzdGFsZSBl bm91Z2ggdG8gbWF0dGVyIGZvcgorICogdGhlIHByaW1hcnkgdXNlIGNhc2U6IGluZGV4LW9ubHkg c2NhbnMgdGhhdCBjaGVjayB3aGV0aGVyIGEgaGVhcCBmZXRjaCBjYW4KKyAqIGJlIHNraXBwZWQu CisgKgorICogVGhlIGFyZ3VtZW50IGZvciB3aHkgaXQgY2FuJ3QgYmUgc3RhbGUgZW5vdWdoIHRv IG1hdHRlciBmb3IgdGhlIHByaW1hcnkgdXNlCisgKiBjYXNlIGlzIGFzIGZvbGxvd3M6CisgKgor ICogSW5zZXJ0czogd2UgbmVlZCB0byBkZXRlY3QgdGhhdCBhIFZNIGJpdCB3YXMgY2xlYXJlZCBi eSBhbiBpbnNlcnQgcmlnaHQKKyAqIGF3YXksIGJlY2F1c2UgdGhlIG5ldyB0dXBsZSBpcyBwcmVz ZW50IGluIHRoZSBpbmRleCBidXQgbm90IHlldCB2aXNpYmxlLgorICogUmVhZGluZyB0aGUgVElE IGZyb20gdGhlIGluZGV4IHBhZ2UgKHVuZGVyIGEgc2hhcmVkIGxvY2sgb24gdGhlIGluZGV4Cisg KiBidWZmZXIpIGlzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgaW5zZXJ0aW9uIG9mIHRoZSBUSUQgaW50 byB0aGUgaW5kZXggKHVuZGVyCisgKiBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUgc2FtZSBpbmRl eCBidWZmZXIpLiAgQmVjYXVzZSB0aGUgVk0gYml0IGlzIGNsZWFyZWQKKyAqIGJlZm9yZSB0aGUg aW5kZXggaXMgdXBkYXRlZCwgYW5kIGxvY2tpbmcvdW5sb2NraW5nIG9mIHRoZSBpbmRleCBwYWdl IGFjdHMKKyAqIGFzIGEgZnVsbCBtZW1vcnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRo ZSBjbGVhcmVkIGJpdCB3aGVuZXZlciB3ZQorICogc2VlIGEgcmVjZW50bHktaW5zZXJ0ZWQgVElE LgorICoKKyAqIERlbGV0ZXM6IHRoZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRl IGlzIE5PVCBzZXJpYWxpemVkIHdpdGggdGhlCisgKiBpbmRleCBwYWdlIGFjY2VzcywgYmVjYXVz ZSBkZWxldGVzIGRvIG5vdCB1cGRhdGUgdGhlIGluZGV4IHBhZ2UgKG9ubHkKKyAqIFZBQ1VVTSBy ZW1vdmVzIHRoZSBpbmRleCBUSUQpLiAgU28gd2UgbWF5IHNlZSBhIHNpZ25pZmljYW50bHkgc3Rh bGUgdmFsdWUuCisgKiBIb3dldmVyLCB3ZSBkb24ndCBuZWVkIHRvIGRldGVjdCB0aGUgZGVsZXRl IHJpZ2h0IGF3YXksIGJlY2F1c2UgdGhlIHR1cGxlCisgKiByZW1haW5zIHZpc2libGUgdW50aWwg dGhlIGRlbGV0aW5nIHRyYW5zYWN0aW9uIGNvbW1pdHMgb3IgdGhlIHN0YXRlbWVudAorICogZW5k cyAoaWYgaXQncyBvdXIgb3duIHRyYW5zYWN0aW9uKS4gIEluIGVpdGhlciBjYXNlLCB0aGUgbG9j ayBvbiB0aGUgVk0KKyAqIGJ1ZmZlciB3aWxsIGhhdmUgYmVlbiByZWxlYXNlZCAoYWN0aW5nIGFz IGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcKKyAqIHRoZSBiaXQuICBBbmQgZm9yIHVz IHRvIGhhdmUgYSBzbmFwc2hvdCB0aGF0IGluY2x1ZGVzIHRoZSBkZWxldGluZworICogdHJhbnNh Y3Rpb24gKG1ha2luZyB0aGUgdHVwbGUgaW52aXNpYmxlKSwgd2UgbXVzdCBoYXZlIGFjcXVpcmVk CisgKiBQcm9jQXJyYXlMb2NrIGFmdGVyIHRoYXQgdGltZSwgYWN0aW5nIGFzIGEgcmVhZCBiYXJy aWVyLgogICovCiB1aW50OAogdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzKFJlbGF0aW9uIHJlbCwg QmxvY2tOdW1iZXIgaGVhcEJsaywgQnVmZmVyICp2bWJ1ZikKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFt LmMKaW5kZXggMTQwODk4OWM1Li4zMTg1NThjY2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9nZW5hbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5j CkBAIC0xMjYsNiArMTI2LDEzIEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4 UmVsYXRpb24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19oaXR1cCA9IE5V TEw7CiAJc2Nhbi0+eHNfaGl0dXBkZXNjID0gTlVMTDsKIAorCXNjYW4tPnhzX2dldG5leHRfc2xv dCA9IE5VTEw7CisKKwlzY2FuLT54c19uYW1lX2NzdHJpbmdfYXR0bnVtcyA9IE5VTEw7CisJc2Nh bi0+eHNfbmFtZV9jc3RyaW5nX2NvdW50ID0gMDsKKworCXNjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNf bGltaXQgPSAwOworCiAJcmV0dXJuIHNjYW47CiB9CiAKQEAgLTE0OCw2ICsxNTUsOCBAQCBJbmRl eFNjYW5FbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQlwZnJlZShzY2FuLT5rZXlEYXRhKTsKIAlp ZiAoc2Nhbi0+b3JkZXJCeURhdGEgIT0gTlVMTCkKIAkJcGZyZWUoc2Nhbi0+b3JkZXJCeURhdGEp OworCWlmIChzY2FuLT54c19uYW1lX2NzdHJpbmdfYXR0bnVtcyAhPSBOVUxMKQorCQlwZnJlZShz Y2FuLT54c19uYW1lX2NzdHJpbmdfYXR0bnVtcyk7CiAKIAlwZnJlZShzY2FuKTsKIH0KQEAgLTQ1 NCw3ICs0NjMsNyBAQCBzeXN0YWJsZV9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAog CQkJCWVsb2coRVJST1IsICJjb2x1bW4gaXMgbm90IGluIGluZGV4Iik7CiAJCX0KIAotCQlzeXNz Y2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGlyZWwsCisJCXN5c3Nj YW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaXJlbCwgZmFsc2UsCiAJ CQkJCQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywgMCwKIAkJCQkJCQkJCQkgU09fTk9ORSk7 CiAJCWluZGV4X3Jlc2NhbihzeXNzY2FuLT5pc2NhbiwgaWR4a2V5LCBua2V5cywgTlVMTCwgMCk7 CkBAIC01MTgsNyArNTI3LDEwIEBAIHN5c3RhYmxlX2dldG5leHQoU3lzU2NhbkRlc2Mgc3lzc2Nh bikKIAogCWlmIChzeXNzY2FuLT5pcmVsKQogCXsKLQkJaWYgKGluZGV4X2dldG5leHRfc2xvdChz eXNzY2FuLT5pc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QpKQorCQli b29sCQlyZWNoZWNrOworCisJCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+ aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJIHN5c3NjYW4tPnNsb3QsICZy ZWNoZWNrKSkKIAkJewogCQkJYm9vbAkJc2hvdWxkRnJlZTsKIApAQCAtNTMzLDcgKzU0NSw3IEBA IHN5c3RhYmxlX2dldG5leHQoU3lzU2NhbkRlc2Mgc3lzc2NhbikKIAkJCSAqIGJlY2F1c2Ugd2Ug c3RpbGwgd291bGRuJ3QgbmVlZCB0byBzdXBwb3J0IGluZGV4ZXMgb24KIAkJCSAqIGV4cHJlc3Np b25zLgogCQkJICovCi0JCQlpZiAoc3lzc2Nhbi0+aXNjYW4tPnhzX3JlY2hlY2spCisJCQlpZiAo cmVjaGVjaykKIAkJCQllbG9nKEVSUk9SLCAic3lzdGVtIGNhdGFsb2cgc2NhbnMgd2l0aCBsb3Nz eSBpbmRleCBjb25kaXRpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQiKTsKIAkJfQogCX0KQEAgLTY0 Myw3ICs2NTUsNyBAQCBzeXN0YWJsZV9lbmRzY2FuKFN5c1NjYW5EZXNjIHN5c3NjYW4pCiAgKiB3 ZSBjb3VsZCBkbyBhIGhlYXBzY2FuIGFuZCBzb3J0LCBidXQgdGhlIHVzZXMgYXJlIGluIHBsYWNl cyB0aGF0CiAgKiBwcm9iYWJseSBkb24ndCBuZWVkIHRvIHN0aWxsIHdvcmsgd2l0aCBjb3JydXB0 ZWQgY2F0YWxvZyBpbmRleGVzLikKICAqIEZvciB0aGUgbW9tZW50LCB0aGVyZWZvcmUsIHRoZXNl IGZ1bmN0aW9ucyBhcmUgbWVyZWx5IHRoZSB0aGluZXN0IG9mCi0gKiB3cmFwcGVycyBhcm91bmQg aW5kZXhfYmVnaW5zY2FuL2luZGV4X2dldG5leHRfc2xvdC4gIFRoZSBtYWluIHJlYXNvbiBmb3IK KyAqIHdyYXBwZXJzIGFyb3VuZCBpbmRleF9iZWdpbnNjYW4vdGFibGVfaW5kZXhfZ2V0bmV4dF9z bG90LiAgVGhlIG1haW4gcmVhc29uIGZvcgogICogdGhlaXIgZXhpc3RlbmNlIGlzIHRvIGNlbnRy YWxpemUgcG9zc2libGUgZnV0dXJlIHN1cHBvcnQgb2YgbG9zc3kgb3BlcmF0b3JzCiAgKiBpbiBj YXRhbG9nIHNjYW5zLgogICovCkBAIC03MTYsNyArNzI4LDcgQEAgc3lzdGFibGVfYmVnaW5zY2Fu X29yZGVyZWQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCWlmIChUcmFuc2FjdGlvbklkSXNWYWxp ZChDaGVja1hpZEFsaXZlKSkKIAkJYnN5c3NjYW4gPSB0cnVlOwogCi0Jc3lzc2Nhbi0+aXNjYW4g PSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJlbGF0aW9uLAorCXN5c3NjYW4t PmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwgZmFs c2UsCiAJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwLAogCQkJCQkJCQkJIFNPX05P TkUpOwogCWluZGV4X3Jlc2NhbihzeXNzY2FuLT5pc2NhbiwgaWR4a2V5LCBua2V5cywgTlVMTCwg MCk7CkBAIC03MzQsMTMgKzc0NiwxNSBAQCBIZWFwVHVwbGUKIHN5c3RhYmxlX2dldG5leHRfb3Jk ZXJlZChTeXNTY2FuRGVzYyBzeXNzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKIAlI ZWFwVHVwbGUJaHR1cCA9IE5VTEw7CisJYm9vbAkJcmVjaGVjazsKIAogCUFzc2VydChzeXNzY2Fu LT5pcmVsKTsKLQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rp b24sIHN5c3NjYW4tPnNsb3QpKQorCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nh bi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCwKKwkJCQkJCQkJICZyZWNoZWNrKSkK IAkJaHR1cCA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGUoc3lzc2Nhbi0+c2xvdCwgZmFsc2UsIE5V TEwpOwogCiAJLyogU2VlIG5vdGVzIGluIHN5c3RhYmxlX2dldG5leHQgKi8KLQlpZiAoaHR1cCAm JiBzeXNzY2FuLT5pc2Nhbi0+eHNfcmVjaGVjaykKKwlpZiAoaHR1cCAmJiByZWNoZWNrKQogCQll bG9nKEVSUk9SLCAic3lzdGVtIGNhdGFsb2cgc2NhbnMgd2l0aCBsb3NzeSBpbmRleCBjb25kaXRp b25zIGFyZSBub3QgaW1wbGVtZW50ZWQiKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4 YW0uYwppbmRleCA3OTY3ZTkzOTguLmUxMjVmN2U2MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5k ZXhhbS5jCkBAIC0yNCw5ICsyNCw3IEBACiAgKgkJaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxp emUgLSBpbml0aWFsaXplIHBhcmFsbGVsIHNjYW4KICAqCQlpbmRleF9wYXJhbGxlbHJlc2NhbiAg LSAocmUpc3RhcnQgYSBwYXJhbGxlbCBzY2FuIG9mIGFuIGluZGV4CiAgKgkJaW5kZXhfYmVnaW5z Y2FuX3BhcmFsbGVsIC0gam9pbiBwYXJhbGxlbCBpbmRleCBzY2FuCi0gKgkJaW5kZXhfZ2V0bmV4 dF90aWQJLSBnZXQgdGhlIG5leHQgVElEIGZyb20gYSBzY2FuCi0gKgkJaW5kZXhfZmV0Y2hfaGVh cAkJLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKLSAqCQlpbmRleF9nZXRuZXh0X3Ns b3QJLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KKyAqCQlpbmRleF9nZXRuZXh0X3Rp ZAktIGFtZ2V0dHVwbGUgdGFibGUgQU0gaGVscGVyIHJvdXRpbmUKICAqCQlpbmRleF9nZXRiaXRt YXAgLSBnZXQgYWxsIHR1cGxlcyBmcm9tIGEgc2NhbgogICoJCWluZGV4X2J1bGtfZGVsZXRlCS0g YnVsayBkZWxldGlvbiBvZiBpbmRleCB0dXBsZXMKICAqCQlpbmRleF92YWN1dW1fY2xlYW51cAkt IHBvc3QtZGVsZXRpb24gY2xlYW51cCBvZiBhbiBpbmRleApAQCAtMTA1LDkgKzEwMywxNiBAQCBk byB7IFwKIAkJCSBDcHBBc1N0cmluZyhwbmFtZSksIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHNj YW4tPmluZGV4UmVsYXRpb24pKTsgXAogfSB3aGlsZSgwKQogCi1zdGF0aWMgSW5kZXhTY2FuRGVz YyBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKLQkJCQkJ CQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMsIFNuYXBzaG90IHNuYXBzaG90LAotCQkJ CQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwgYm9vbCB0ZW1wX3NuYXApOwor c3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVn aW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCisJCQkJCQkJCQkJCQkJCQkJ CQkgUmVsYXRpb24gaGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJCQkJCQkJCQkJIGludCBua2V5cywK KwkJCQkJCQkJCQkJCQkJCQkJCSBpbnQgbm9yZGVyYnlzLAorCQkJCQkJCQkJCQkJCQkJCQkJIFNu YXBzaG90IHNuYXBzaG90LAorCQkJCQkJCQkJCQkJCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVz YyBwc2NhbiwKKwkJCQkJCQkJCQkJCQkJCQkJCSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlu c3RydW1lbnQsCisJCQkJCQkJCQkJCQkJCQkJCQkgYm9vbCBpbmRleF9vbmx5X3NjYW4sCisJCQkJ CQkJCQkJCQkJCQkJCQkgYm9vbCB0ZW1wX3NuYXAsCisJCQkJCQkJCQkJCQkJCQkJCQkgdWludDMy IGZsYWdzKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2YWxpZGF0ZV9yZWxhdGlvbl9hc19pbmRleChS ZWxhdGlvbiByKTsKIAogCkBAIC0yNTYsMTMgKzI2MSwxMiBAQCBpbmRleF9pbnNlcnRfY2xlYW51 cChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2Fu KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQlSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJ CWJvb2wgaW5kZXhfb25seV9zY2FuLAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAogCQkJCUluZGV4 U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQlpbnQgbmtleXMsIGludCBub3Jk ZXJieXMsCiAJCQkJdWludDMyIGZsYWdzKQogewotCUluZGV4U2NhbkRlc2Mgc2NhbjsKLQogCUFz c2VydChzbmFwc2hvdCAhPSBJbnZhbGlkU25hcHNob3QpOwogCiAJLyogQ2hlY2sgdGhhdCBhIGhp c3RvcmljIHNuYXBzaG90IGlzIG5vdCB1c2VkIGZvciBub24tY2F0YWxvZyB0YWJsZXMgKi8KQEAg LTI3NSwyMCArMjc5LDEwIEBAIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24s CiAJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShoZWFwUmVsYXRpb24pKSkpOwogCX0KIAot CXNjYW4gPSBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIG5v cmRlcmJ5cywgc25hcHNob3QsIE5VTEwsIGZhbHNlKTsKLQotCS8qCi0JICogU2F2ZSBhZGRpdGlv bmFsIHBhcmFtZXRlcnMgaW50byB0aGUgc2NhbmRlc2MuICBFdmVyeXRoaW5nIGVsc2Ugd2FzIHNl dAotCSAqIHVwIGJ5IFJlbGF0aW9uR2V0SW5kZXhTY2FuLgotCSAqLwotCXNjYW4tPmhlYXBSZWxh dGlvbiA9IGhlYXBSZWxhdGlvbjsKLQlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OwotCXNj YW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OwotCi0JLyogcHJlcGFyZSB0byBmZXRjaCBpbmRl eCBtYXRjaGVzIGZyb20gdGFibGUgKi8KLQlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRl eF9mZXRjaF9iZWdpbihoZWFwUmVsYXRpb24sIGZsYWdzKTsKLQotCXJldHVybiBzY2FuOworCXJl dHVybiBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgaGVhcFJlbGF0aW9u LAorCQkJCQkJCQkJbmtleXMsIG5vcmRlcmJ5cywKKwkJCQkJCQkJCXNuYXBzaG90LCBOVUxMLCBp bnN0cnVtZW50LAorCQkJCQkJCQkJaW5kZXhfb25seV9zY2FuLCBmYWxzZSwgZmxhZ3MpOwogfQog CiAvKgpAQCAtMzAzLDI5ICsyOTcsMjQgQEAgaW5kZXhfYmVnaW5zY2FuX2JpdG1hcChSZWxhdGlv biBpbmRleFJlbGF0aW9uLAogCQkJCQkgICBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3Ry dW1lbnQsCiAJCQkJCSAgIGludCBua2V5cykKIHsKLQlJbmRleFNjYW5EZXNjIHNjYW47Ci0KIAlB c3NlcnQoc25hcHNob3QgIT0gSW52YWxpZFNuYXBzaG90KTsKKwlBc3NlcnQoSXNNVkNDTGlrZVNu YXBzaG90KHNuYXBzaG90KSk7CiAKLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGlu ZGV4UmVsYXRpb24sIG5rZXlzLCAwLCBzbmFwc2hvdCwgTlVMTCwgZmFsc2UpOwotCi0JLyoKLQkg KiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhp bmcgZWxzZSB3YXMgc2V0Ci0JICogdXAgYnkgUmVsYXRpb25HZXRJbmRleFNjYW4uCi0JICovCi0J c2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKLQlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1 bWVudDsKLQotCXJldHVybiBzY2FuOworCXJldHVybiBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwo aW5kZXhSZWxhdGlvbiwgTlVMTCwgbmtleXMsIDAsIHNuYXBzaG90LAorCQkJCQkJCQkJTlVMTCwg aW5zdHJ1bWVudCwgZmFsc2UsIGZhbHNlLCBTT19OT05FKTsKIH0KIAogLyoKICAqIGluZGV4X2Jl Z2luc2Nhbl9pbnRlcm5hbCAtLS0gY29tbW9uIGNvZGUgZm9yIGluZGV4X2JlZ2luc2NhbiB2YXJp YW50cworICoKKyAqIFdoZW4gaGVhcFJlbGF0aW9uIGlzIG5vdCBOVUxMLCBhbHNvIGluaXRpYWxp emVzIHRhYmxlIEFNIGluZGV4IHNjYW4gc3RhdGUuCiAgKi8KLXN0YXRpYyBJbmRleFNjYW5EZXNj Ci1pbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKK3N0YXRp YyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBJbmRleFNjYW5EZXNjCitpbmRleF9iZWdpbnNj YW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgUmVsYXRpb24gaGVhcFJlbGF0aW9u LAogCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywgU25hcHNob3Qgc25hcHNob3QsCi0J CQkJCQkgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLCBib29sIHRlbXBfc25hcCkKKwkJCQkJ CSBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sCisJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVu dGF0aW9uICppbnN0cnVtZW50LAorCQkJCQkJIGJvb2wgaW5kZXhfb25seV9zY2FuLCBib29sIHRl bXBfc25hcCwgdWludDMyIGZsYWdzKQogewogCUluZGV4U2NhbkRlc2Mgc2NhbjsKIApAQCAtMzQ5 LDYgKzMzOCw2MiBAQCBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxh dGlvbiwKIAlzY2FuLT5wYXJhbGxlbF9zY2FuID0gcHNjYW47CiAJc2Nhbi0+eHNfdGVtcF9zbmFw ID0gdGVtcF9zbmFwOwogCisJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5p bnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKKworCS8qCisJICogSW5pdGlhbGl6ZSBoZWFwLXNpZGUg c2NhbiBzdGF0ZSB3aGVuIGEgaGVhcCByZWxhdGlvbiBpcyBwcm92aWRlZC4KKwkgKiBCaXRtYXAg aW5kZXggc2NhbnMgZG9uJ3QgcHJvdmlkZSBvbmUuCisJICovCisJaWYgKGhlYXBSZWxhdGlvbiAh PSBOVUxMKQorCXsKKwkJc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcFJlbGF0aW9uOworCQlzY2Fu LT54c193YW50X2l0dXAgPSBpbmRleF9vbmx5X3NjYW47CisJCXNjYW4tPnhzX2hlYXBfY29udGlu dWUgPSBmYWxzZTsKKworCQkvKgorCQkgKiBGb3IgaW5kZXgtb25seSBzY2FucywgZmluZCBhbnkg Im5hbWUiIGNvbHVtbnMgc3RvcmVkIGFzIGNzdHJpbmdzCisJCSAqIChlLmcuIGJ0cmVlIG5hbWVf b3BzKSwgd2hpY2ggdGhlIHRhYmxlIEFNIG11c3QgcmUtcGFkIHRvCisJCSAqIE5BTUVEQVRBTEVO IHdoZW4gZmlsbGluZyBhIHNsb3QgZnJvbSB0aGUgaW5kZXggdHVwbGUuICBXZSBkZXRlY3QKKwkJ ICogdGhpcyBnZW5lcmljYWxseSBieSBsb29raW5nIGZvciBpbmRleCBhdHRyaWJ1dGVzIHdob3Nl IHN0b3JlZCB0eXBlCisJCSAqIGlzIENTVFJJTkdPSUQgd2hpbGUgdGhlaXIgb3BjbGFzcyBpbnB1 dCB0eXBlIGlzIE5BTUVPSUQuICBUaGlzIGlzCisJCSAqIGRvbmUgYmVmb3JlIHRhYmxlX2luZGV4 X2ZldGNoX2JlZ2luIHNvIHRoZSB0YWJsZSBBTSBjYW4gc2l6ZQorCQkgKiBwZXItdHVwbGUgd29y a3NwYWNlIGFjY29yZGluZ2x5LgorCQkgKi8KKwkJaWYgKGluZGV4X29ubHlfc2NhbikKKwkJewor CQkJaW50CQkJaW5kbmtleWF0dHMgPSBpbmRleFJlbGF0aW9uLT5yZF9pbmRleC0+aW5kbmtleWF0 dHM7CisJCQlpbnQJCQluYW1lY291bnQgPSAwOworCisJCQlmb3IgKGludCBhdHRudW0gPSAwOyBh dHRudW0gPCBpbmRua2V5YXR0czsgYXR0bnVtKyspCisJCQl7CisJCQkJaWYgKFR1cGxlRGVzY0F0 dHIoaW5kZXhSZWxhdGlvbi0+cmRfYXR0LCBhdHRudW0pLT5hdHR0eXBpZCA9PSBDU1RSSU5HT0lE ICYmCisJCQkJCWluZGV4UmVsYXRpb24tPnJkX29wY2ludHlwZVthdHRudW1dID09IE5BTUVPSUQp CisJCQkJCW5hbWVjb3VudCsrOworCQkJfQorCisJCQlpZiAobmFtZWNvdW50ID4gMCkKKwkJCXsK KwkJCQlpbnQJCQlpZHggPSAwOworCisJCQkJc2Nhbi0+eHNfbmFtZV9jc3RyaW5nX2F0dG51bXMg PSBwYWxsb2NfYXJyYXkoQXR0ck51bWJlciwgbmFtZWNvdW50KTsKKwkJCQlmb3IgKGludCBhdHRu dW0gPSAwOyBhdHRudW0gPCBpbmRua2V5YXR0czsgYXR0bnVtKyspCisJCQkJeworCQkJCQlpZiAo VHVwbGVEZXNjQXR0cihpbmRleFJlbGF0aW9uLT5yZF9hdHQsIGF0dG51bSktPmF0dHR5cGlkID09 IENTVFJJTkdPSUQgJiYKKwkJCQkJCWluZGV4UmVsYXRpb24tPnJkX29wY2ludHlwZVthdHRudW1d ID09IE5BTUVPSUQpCisJCQkJCQlzY2FuLT54c19uYW1lX2NzdHJpbmdfYXR0bnVtc1tpZHgrK10g PSAoQXR0ck51bWJlcikgYXR0bnVtOworCQkJCX0KKwkJCQlzY2FuLT54c19uYW1lX2NzdHJpbmdf Y291bnQgPSBuYW1lY291bnQ7CisJCQl9CisJCX0KKworCQkvKiBwcmVwYXJlIHRvIGZldGNoIGlu ZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAoc2V0cyB4c19oZWFwZmV0Y2gpICovCisJCXRhYmxlX2lu ZGV4X2ZldGNoX2JlZ2luKHNjYW4sIGZsYWdzKTsKKworCQkvKiB0YWJsZSBBTSBtdXN0IHNldCB0 aGVzZSBmb3IgdXMgKi8KKwkJQXNzZXJ0KHNjYW4tPnhzX2dldG5leHRfc2xvdCAhPSBOVUxMICYm IHNjYW4tPnhzX2hlYXBmZXRjaCAhPSBOVUxMKTsKKwl9CisKIAlyZXR1cm4gc2NhbjsKIH0KIApA QCAtMzc3LDcgKzQyMiw3IEBAIGluZGV4X3Jlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sCiAKIAkv KiByZXNldCB0YWJsZSBBTSBzdGF0ZSBmb3IgcmVzY2FuICovCiAJaWYgKHNjYW4tPnhzX2hlYXBm ZXRjaCkKLQkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwkJ dGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKIAlzY2FuLT5raWxsX3ByaW9yX3R1cGxl ID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KIAlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFs c2U7CkBAIC0zOTksNyArNDQ0LDcgQEAgaW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4p CiAJLyogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNj ZXNzZXMgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCXsKLQkJdGFibGVfaW5kZXhfZmV0 Y2hfZW5kKHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2Fu KTsKIAkJc2Nhbi0+eHNfaGVhcGZldGNoID0gTlVMTDsKIAl9CiAKQEAgLTQ1NCw3ICs0OTksNyBA QCBpbmRleF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAKIAkvKiByZXNldCB0YWJsZSBB TSBzdGF0ZSBmb3IgcmVzdG9yaW5nIHRoZSBtYXJrZWQgcG9zaXRpb24gKi8KIAlpZiAoc2Nhbi0+ eHNfaGVhcGZldGNoKQotCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0 Y2gpOworCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKIAogCXNjYW4tPmtpbGxfcHJp b3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBfY29udGlu dWUgPSBmYWxzZTsKQEAgLTU0MSw3ICs1ODYsNyBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRl eFNjYW5EZXNjIHNjYW4pCiAKIAkvKiByZXNldCB0YWJsZSBBTSBzdGF0ZSBmb3IgcmVzY2FuICov CiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKLQkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nh bi0+eHNfaGVhcGZldGNoKTsKKwkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKIAkv KiBhbXBhcmFsbGVscmVzY2FuIGlzIG9wdGlvbmFsOyBhc3N1bWUgbm8tb3AgaWYgbm90IHByb3Zp ZGVkIGJ5IEFNICovCiAJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFs bGVscmVzY2FuICE9IE5VTEwpCkBAIC01NTgsNDEgKzYwMywzMyBAQCBpbmRleF9wYXJhbGxlbHJl c2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAgKi8KIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2lu c2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKKwkJCQkJ CSBib29sIGluZGV4X29ubHlfc2NhbiwKIAkJCQkJCSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24g Kmluc3RydW1lbnQsCiAJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAogCQkJCQkJIFBh cmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwKIAkJCQkJCSB1aW50MzIgZmxhZ3MpCiB7CiAJU25h cHNob3QJc25hcHNob3Q7Ci0JSW5kZXhTY2FuRGVzYyBzY2FuOwogCiAJQXNzZXJ0KFJlbEZpbGVM b2NhdG9yRXF1YWxzKGhlYXByZWwtPnJkX2xvY2F0b3IsIHBzY2FuLT5wc19sb2NhdG9yKSk7CiAJ QXNzZXJ0KFJlbEZpbGVMb2NhdG9yRXF1YWxzKGluZGV4cmVsLT5yZF9sb2NhdG9yLCBwc2Nhbi0+ cHNfaW5kZXhsb2NhdG9yKSk7CiAKIAlzbmFwc2hvdCA9IFJlc3RvcmVTbmFwc2hvdChwc2Nhbi0+ cHNfc25hcHNob3RfZGF0YSk7CiAJUmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7Ci0Jc2NhbiA9 IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleHJlbCwgbmtleXMsIG5vcmRlcmJ5cywgc25h cHNob3QsCi0JCQkJCQkJCQlwc2NhbiwgdHJ1ZSk7CiAKLQkvKgotCSAqIFNhdmUgYWRkaXRpb25h bCBwYXJhbWV0ZXJzIGludG8gdGhlIHNjYW5kZXNjLiAgRXZlcnl0aGluZyBlbHNlIHdhcyBzZXQK LQkgKiB1cCBieSBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwuCi0JICovCi0Jc2Nhbi0+aGVhcFJl bGF0aW9uID0gaGVhcHJlbDsKLQlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OwotCXNjYW4t Pmluc3RydW1lbnQgPSBpbnN0cnVtZW50OwotCi0JLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBt YXRjaGVzIGZyb20gdGFibGUgKi8KLQlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9m ZXRjaF9iZWdpbihoZWFwcmVsLCBmbGFncyk7Ci0KLQlyZXR1cm4gc2NhbjsKKwlyZXR1cm4gaW5k ZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4cmVsLCBoZWFwcmVsLCBua2V5cywgbm9yZGVyYnlz LAorCQkJCQkJCQkJc25hcHNob3QsIHBzY2FuLCBpbnN0cnVtZW50LAorCQkJCQkJCQkJaW5kZXhf b25seV9zY2FuLCB0cnVlLCBmbGFncyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqIGlu ZGV4X2dldG5leHRfdGlkIC0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgorICogaW5kZXhf Z2V0bmV4dF90aWQgLSBhbWdldHR1cGxlIGludGVyZmFjZQogICoKICAqIFRoZSByZXN1bHQgaXMg dGhlIG5leHQgVElEIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cywKICAqIG9yIE5VTEwgaWYgbm8g bW9yZSBtYXRjaGluZyB0dXBsZXMgZXhpc3QuCisgKgorICogVGhpcyBzaG91bGQgb25seSBiZSBj YWxsZWQgYnkgdGFibGUgQU0gYW1nZXR0dXBsZS1iYXNlZCBpbmRleCBzY2FuCisgKiBjYWxsYmFj a3MuCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KIEl0ZW1Qb2ludGVyCkBAIC02MjMsNyArNjYw LDcgQEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbikKIAl7CiAJCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlICovCiAJCWlmIChzY2Fu LT54c19oZWFwZmV0Y2gpCi0JCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFw ZmV0Y2gpOworCQkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKIAkJcmV0dXJuIE5V TEw7CiAJfQpAQCAtNjM1LDk3ICs2NzIsNiBAQCBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCXJldHVybiAmc2Nhbi0+eHNfaGVh cHRpZDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLQotICoJCWluZGV4X2ZldGNoX2hlYXAgLSBn ZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKLSAqCi0gKiBUaGUgcmVzdWx0IGlzIGEgdmlz aWJsZSBoZWFwIHR1cGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1vc3QKLSAqIHJl Y2VudGx5IGZldGNoZWQgYnkgaW5kZXhfZ2V0bmV4dF90aWQsIG9yIE5VTEwgaWYgbm8gbW9yZSBt YXRjaGluZyB0dXBsZXMKLSAqIGV4aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1h dGNoaW5nIHR1cGxlIGJlY2F1c2Ugb2YgSE9UIGNoYWlucywKLSAqIGFsdGhvdWdoIHdoZW4gdXNp bmcgYW4gTVZDQyBzbmFwc2hvdCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3IgbW9yZSB0aGFu Ci0gKiBvbmUgc3VjaCB0dXBsZSB0byBleGlzdC4pCi0gKgotICogT24gc3VjY2VzcywgdGhlIGJ1 ZmZlciBjb250YWluaW5nIHRoZSBoZWFwIHR1cCBpcyBwaW5uZWQgKHRoZSBwaW4gd2lsbCBiZQot ICogZHJvcHBlZCBpbiBhIGZ1dHVyZSBpbmRleF9nZXRuZXh0X3RpZCwgaW5kZXhfZmV0Y2hfaGVh cCBvciBpbmRleF9lbmRzY2FuCi0gKiBjYWxsKS4KLSAqCi0gKiBOb3RlOiBjYWxsZXIgbXVzdCBj aGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9mIHRoZQotICog c2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBiZWNhdXNlIHdl IGRvbid0IGhhdmUKLSAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZpY2llbnRseSBp biB0aGUgZ2VuZXJhbCBjYXNlLgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1ib29sCi1pbmRl eF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCi17 Ci0JYm9vbAkJYWxsX2RlYWQgPSBmYWxzZTsKLQlib29sCQlmb3VuZDsKLQotCWZvdW5kID0gdGFi bGVfaW5kZXhfZmV0Y2hfdHVwbGUoc2Nhbi0+eHNfaGVhcGZldGNoLCAmc2Nhbi0+eHNfaGVhcHRp ZCwKLQkJCQkJCQkJCXNjYW4tPnhzX3NuYXBzaG90LCBzbG90LAotCQkJCQkJCQkJJnNjYW4tPnhz X2hlYXBfY29udGludWUsICZhbGxfZGVhZCk7Ci0KLQlpZiAoZm91bmQpCi0JCXBnc3RhdF9jb3Vu dF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRpb24pOwotCi0JLyoKLQkgKiBJZiB3ZSBzY2Fu bmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzLCB0ZWxsIGlu ZGV4Ci0JICogQU0gdG8ga2lsbCBpdHMgZW50cnkgZm9yIHRoYXQgVElEICh0aGlzIHdpbGwgdGFr ZSBlZmZlY3QgaW4gdGhlIG5leHQKLQkgKiBhbWdldHR1cGxlIGNhbGwsIGluIGluZGV4X2dldG5l eHRfdGlkKS4gIFdlIGRvIG5vdCBkbyB0aGlzIHdoZW4gaW4KLQkgKiByZWNvdmVyeSBiZWNhdXNl IGl0IG1heSB2aW9sYXRlIE1WQ0MgdG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4KLQkgKiBSZWxh dGlvbkdldEluZGV4U2NhbigpLgotCSAqLwotCWlmICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292 ZXJ5KQotCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7Ci0KLQlyZXR1cm4gZm91 bmQ7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QgLSBn ZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KLSAqCi0gKiBUaGUgcmVzdWx0IGlzIHRydWUg aWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMK LSAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBz cGVjaWZpZWQgc2xvdC4KLSAqCi0gKiBPbiBzdWNjZXNzLCByZXNvdXJjZXMgKGxpa2UgYnVmZmVy IHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdpbGwgYmUKLSAqIGRyb3BwZWQgYnkg YSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3IgaW5kZXhfZW5k c2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+eHNf cmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4ga2V5cyBpZiBy ZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCi0g KiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVyYWwg Y2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZ2V0bmV4dF9zbG90 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVT bG90ICpzbG90KQotewotCWZvciAoOzspCi0JewotCQlpZiAoIXNjYW4tPnhzX2hlYXBfY29udGlu dWUpCi0JCXsKLQkJCUl0ZW1Qb2ludGVyIHRpZDsKLQotCQkJLyogVGltZSB0byBmZXRjaCB0aGUg bmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8KLQkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNj YW4sIGRpcmVjdGlvbik7Ci0KLQkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3 ZSdyZSBkb25lICovCi0JCQlpZiAodGlkID09IE5VTEwpCi0JCQkJYnJlYWs7Ci0KLQkJCUFzc2Vy dChJdGVtUG9pbnRlckVxdWFscyh0aWQsICZzY2FuLT54c19oZWFwdGlkKSk7Ci0JCX0KLQotCQkv KgotCQkgKiBGZXRjaCB0aGUgbmV4dCAob3Igb25seSkgdmlzaWJsZSBoZWFwIHR1cGxlIGZvciB0 aGlzIGluZGV4IGVudHJ5LgotCQkgKiBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFy b3VuZCBhbmQgZ3JhYiB0aGUgbmV4dCBUSUQgZnJvbQotCQkgKiB0aGUgaW5kZXguCi0JCSAqLwot CQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7Ci0JCWlmIChp bmRleF9mZXRjaF9oZWFwKHNjYW4sIHNsb3QpKQotCQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0 dXJuIGZhbHNlOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfZ2V0Yml0bWFw IC0gZ2V0IGFsbCB0dXBsZXMgYXQgb25jZSBmcm9tIGFuIGluZGV4IHNjYW4KICAqCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwppbmRleCBjOGFmOTdkZDIuLmYxYjU1ZmIyMCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5jCkBAIC01NjAsOSArNTYwLDkgQEAgX2J0 X2NoZWNrX3VuaXF1ZShSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUsIFJl bGF0aW9uIGhlYXBSZWwsCiAJCQkJICogd2l0aCBvcHRpbWl6YXRpb25zIGxpa2UgaGVhcCdzIEhP VCwgd2UgaGF2ZSBqdXN0IGEgc2luZ2xlCiAJCQkJICogaW5kZXggZW50cnkgZm9yIHRoZSBlbnRp cmUgY2hhaW4uCiAJCQkJICovCi0JCQkJZWxzZSBpZiAodGFibGVfaW5kZXhfZmV0Y2hfdHVwbGVf Y2hlY2soaGVhcFJlbCwgJmh0aWQsCi0JCQkJCQkJCQkJCQkJICAgJlNuYXBzaG90RGlydHksCi0J CQkJCQkJCQkJCQkJICAgJmFsbF9kZWFkKSkKKwkJCQllbHNlIGlmICh0YWJsZV9mZXRjaF90aWRf Y2hlY2soaGVhcFJlbCwgJmh0aWQsCisJCQkJCQkJCQkJCSAgICZTbmFwc2hvdERpcnR5LAorCQkJ CQkJCQkJCQkgICAmYWxsX2RlYWQpKQogCQkJCXsKIAkJCQkJVHJhbnNhY3Rpb25JZCB4d2FpdDsK IApAQCAtNjE4LDggKzYxOCw4IEBAIF9idF9jaGVja191bmlxdWUoUmVsYXRpb24gcmVsLCBCVElu c2VydFN0YXRlIGluc2VydHN0YXRlLCBSZWxhdGlvbiBoZWFwUmVsLAogCQkJCQkgKiBlbnRyeS4K IAkJCQkJICovCiAJCQkJCWh0aWQgPSBpdHVwLT50X3RpZDsKLQkJCQkJaWYgKHRhYmxlX2luZGV4 X2ZldGNoX3R1cGxlX2NoZWNrKGhlYXBSZWwsICZodGlkLAotCQkJCQkJCQkJCQkJCSAgU25hcHNo b3RTZWxmLCBOVUxMKSkKKwkJCQkJaWYgKHRhYmxlX2ZldGNoX3RpZF9jaGVjayhoZWFwUmVsLCAm aHRpZCwKKwkJCQkJCQkJCQkJICBTbmFwc2hvdFNlbGYsIE5VTEwpKQogCQkJCQl7CiAJCQkJCQkv KiBOb3JtYWwgY2FzZSAtLS0gaXQncyBzdGlsbCBsaXZlICovCiAJCQkJCX0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dGFibGUvdGFibGVhbS5jCmluZGV4IDY4ZmYwOTY2Zi4uMGFjOWYwMTQzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90YWJsZS90YWJsZWFtLmMKQEAgLTIyOCwzMiArMjI4LDIwIEBAIHRhYmxlX2JlZ2luc2Nhbl9w YXJhbGxlbF90aWRyYW5nZShSZWxhdGlvbiByZWxhdGlvbiwKICAqLwogCiAvKgotICogVG8gcGVy Zm9ybSB0aGF0IGNoZWNrIHNpbXBseSBzdGFydCBhbiBpbmRleCBzY2FuLCBjcmVhdGUgdGhlIG5l Y2Vzc2FyeQotICogc2xvdCwgZG8gdGhlIGhlYXAgbG9va3VwLCBhbmQgc2h1dCBldmVyeXRoaW5n IGRvd24gYWdhaW4uIFRoaXMgY291bGQgYmUKLSAqIG9wdGltaXplZCwgYnV0IGlzIHVubGlrZWx5 IHRvIG1hdHRlciBmcm9tIGEgcGVyZm9ybWFuY2UgUE9WLiBJZiB0aGVyZQotICogZnJlcXVlbnRs eSBhcmUgbGl2ZSBpbmRleCBwb2ludGVycyBhbHNvIG1hdGNoaW5nIGEgdW5pcXVlIGluZGV4IGtl eSwgdGhlCi0gKiBDUFUgb3ZlcmhlYWQgb2YgdGhpcyByb3V0aW5lIGlzIHVubGlrZWx5IHRvIG1h dHRlci4KLSAqCi0gKiBOb3RlIHRoYXQgKnRpZCBtYXkgYmUgbW9kaWZpZWQgd2hlbiB3ZSByZXR1 cm4gdHJ1ZSBpZiB0aGUgQU0gc3VwcG9ydHMKLSAqIHN0b3JpbmcgbXVsdGlwbGUgcm93IHZlcnNp b25zIHJlYWNoYWJsZSB2aWEgYSBzaW5nbGUgaW5kZXggZW50cnkgKGxpa2UKLSAqIGhlYXAncyBI T1QpLgorICogQ2FsbGVyIHNob3VsZCBub3RlIHRoZSB0YWJsZV9mZXRjaF90aWQgd2FybmluZyBh Ym91dCAqdGlkIGJlaW5nIG1vZGlmaWVkCisgKiB3aGVuIHdlIHJldHVybiB0cnVlIGluIHNvbWUg Y2FzZXMKICAqLwogYm9vbAotdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGVfY2hlY2soUmVsYXRpb24g cmVsLAotCQkJCQkJCSAgSXRlbVBvaW50ZXIgdGlkLAotCQkJCQkJCSAgU25hcHNob3Qgc25hcHNo b3QsCi0JCQkJCQkJICBib29sICphbGxfZGVhZCkKK3RhYmxlX2ZldGNoX3RpZF9jaGVjayhSZWxh dGlvbiByZWwsCisJCQkJCSAgSXRlbVBvaW50ZXIgdGlkLAorCQkJCQkgIFNuYXBzaG90IHNuYXBz aG90LAorCQkJCQkgIGJvb2wgKmFsbF9kZWFkKQogewotCUluZGV4RmV0Y2hUYWJsZURhdGEgKnNj YW47CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0JYm9vbAkJY2FsbF9hZ2FpbiA9IGZhbHNlOwog CWJvb2wJCWZvdW5kOwogCiAJc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHJlbCwgTlVMTCk7Ci0J c2NhbiA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKHJlbCwgU09fTk9ORSk7Ci0JZm91bmQgPSB0 YWJsZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLCB0aWQsIHNuYXBzaG90LCBzbG90LCAmY2FsbF9h Z2FpbiwKLQkJCQkJCQkJCWFsbF9kZWFkKTsKLQl0YWJsZV9pbmRleF9mZXRjaF9lbmQoc2Nhbik7 CisJZm91bmQgPSB0YWJsZV9mZXRjaF90aWQocmVsLCB0aWQsIHNuYXBzaG90LCBzbG90LCBhbGxf ZGVhZCk7CiAJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKIAogCXJldHVybiBm b3VuZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCmluZGV4IDU0NTBhMjdmYS4u YzA5NDczYjk3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFw aS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKQEAgLTUzLDgg KzUzLDggQEAgR2V0VGFibGVBbVJvdXRpbmUoT2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91dGlu ZS0+aW5kZXhfZmV0Y2hfYmVnaW4gIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2Zl dGNoX3Jlc2V0ICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9lbmQgIT0g TlVMTCk7Ci0JQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX3R1cGxlICE9IE5VTEwpOwogCisJ QXNzZXJ0KHJvdXRpbmUtPmZldGNoX3RpZCAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+dHVw bGVfZmV0Y2hfcm93X3ZlcnNpb24gIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX3Rp ZF92YWxpZCAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+dHVwbGVfZ2V0X2xhdGVzdF90aWQg IT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMKaW5kZXggNDIxZDhjMzU5Li43YWZm NDgxMjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbnN0cmFpbnQuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMKQEAgLTEwNSwyMyArMTA1LDE0IEBA IHVuaXF1ZV9rZXlfcmVjaGVjayhQR19GVU5DVElPTl9BUkdTKQogCSAqIHJlbW92ZWQuCiAJICov CiAJdG1wdGlkID0gY2hlY2t0aWQ7CisJaWYgKCF0YWJsZV9mZXRjaF90aWQodHJpZ2RhdGEtPnRn X3JlbGF0aW9uLCAmdG1wdGlkLCBTbmFwc2hvdFNlbGYsCisJCQkJCQkgc2xvdCwgTlVMTCkpCiAJ ewotCQlJbmRleEZldGNoVGFibGVEYXRhICpzY2FuID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4o dHJpZ2RhdGEtPnRnX3JlbGF0aW9uLAotCQkJCQkJCQkJCQkJCQkJU09fTk9ORSk7Ci0JCWJvb2wJ CWNhbGxfYWdhaW4gPSBmYWxzZTsKLQotCQlpZiAoIXRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKHNj YW4sICZ0bXB0aWQsIFNuYXBzaG90U2VsZiwgc2xvdCwKLQkJCQkJCQkJCSAmY2FsbF9hZ2Fpbiwg TlVMTCkpCi0JCXsKLQkJCS8qCi0JCQkgKiBBbGwgcm93cyByZWZlcmVuY2VkIGJ5IHRoZSBpbmRl eCBlbnRyeSBhcmUgZGVhZCwgc28gc2tpcCB0aGUKLQkJCSAqIGNoZWNrLgotCQkJICovCi0JCQlF eGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOwotCQkJdGFibGVfaW5kZXhfZmV0Y2hf ZW5kKHNjYW4pOwotCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKLQkJfQotCQl0YWJs ZV9pbmRleF9mZXRjaF9lbmQoc2Nhbik7CisJCS8qCisJCSAqIEFsbCByb3dzIHJlZmVyZW5jZWQg YnkgdGhlIGluZGV4IGVudHJ5IGFyZSBkZWFkLCBzbyBza2lwIHRoZSBjaGVjaworCQkgKi8KKwkJ RXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKKwkJcmV0dXJuIFBvaW50ZXJHZXRE YXR1bShOVUxMKTsKIAl9CiAKIAkvKgpAQCAtMTY4LDkgKzE1OSw4IEBAIHVuaXF1ZV9rZXlfcmVj aGVjayhQR19GVU5DVElPTl9BUkdTKQogCQkvKgogCQkgKiBOb3RlOiB0aGlzIGlzIG5vdCBhIHJl YWwgaW5zZXJ0OyBpdCBpcyBhIGNoZWNrIHRoYXQgdGhlIGluZGV4IGVudHJ5CiAJCSAqIHRoYXQg aGFzIGFscmVhZHkgYmVlbiBpbnNlcnRlZCBpcyB1bmlxdWUuICBQYXNzaW5nIHRoZSB0dXBsZSdz IHRpZAotCQkgKiAoaS5lLiB1bm1vZGlmaWVkIGJ5IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKCkp IGlzIGNvcnJlY3QgZXZlbiBpZgotCQkgKiB0aGUgcm93IGlzIG5vdyBkZWFkLCBiZWNhdXNlIHRo YXQgaXMgdGhlIFRJRCB0aGUgaW5kZXggd2lsbCBrbm93Ci0JCSAqIGFib3V0LgorCQkgKiAoaS5l LiB1bm1vZGlmaWVkIGJ5IHRhYmxlX2ZldGNoX3RpZCgpKSBpcyBjb3JyZWN0IGV2ZW4gaWYgdGhl IHJvdworCQkgKiBpcyBub3cgZGVhZCwgYmVjYXVzZSB0aGF0IGlzIHRoZSBUSUQgdGhlIGluZGV4 IHdpbGwga25vdyBhYm91dC4KIAkJICovCiAJCWluZGV4X2luc2VydChpbmRleFJlbCwgdmFsdWVz LCBpc251bGwsICZjaGVja3RpZCwKIAkJCQkJIHRyaWdkYXRhLT50Z19yZWxhdGlvbiwgVU5JUVVF X0NIRUNLX0VYSVNUSU5HLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IDExMmMxN2IwZC4uZWJl ODUyNTAwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGlj IHZvaWQgc2hvd19yZWN1cnNpdmVfdW5pb25faW5mbyhSZWN1cnNpdmVVbmlvblN0YXRlICpyc3Rh dGUsCiBzdGF0aWMgdm9pZCBzaG93X21lbW9pemVfaW5mbyhNZW1vaXplU3RhdGUgKm1zdGF0ZSwg TGlzdCAqYW5jZXN0b3JzLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9p ZCBzaG93X2hhc2hhZ2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMp Owotc3RhdGljIHZvaWQgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3Rh dGUsIEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQgc2hvd19pbmRleHNjYW5faW5mbyhQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93 X3RpZGJpdG1hcF9pbmZvKEJpdG1hcEhlYXBTY2FuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkJ RXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X3NjYW5faW9fdXNhZ2UoU2NhblN0 YXRlICpwbGFuc3RhdGUsCkBAIC0xOTc4LDcgKzE5NzgsNyBAQCBFeHBsYWluTm9kZShQbGFuU3Rh dGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJ c2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAog CQkJCQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8o cGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwog CQkJYnJlYWs7CiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChJ bmRleE9ubHlTY2FuICopIHBsYW4pLT5pbmRleHF1YWwsCkBAIC0xOTkyLDE1ICsxOTkyLDEyIEBA IEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlp ZiAocGxhbi0+cXVhbCkKIAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1v dmVkIGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlpZiAo ZXMtPmFuYWx5emUpCi0JCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkhlYXAgRmV0Y2hlcyIsIE5V TEwsCi0JCQkJCQkJCQkgcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5udHVwbGVzMiwgMCwgZXMpOwot CQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4 c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBJbmRl eFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFuKS0+aW5k ZXhxdWFsb3JpZywKIAkJCQkJCSAgICJJbmRleCBDb25kIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMs IGVzKTsKLQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOworCQkJc2hv d19pbmRleHNjYW5faW5mbyhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfQml0 bWFwSGVhcFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEhlYXBTY2FuICopIHBsYW4p LT5iaXRtYXBxdWFsb3JpZywKQEAgLTM4NjcsMTUgKzM4NjQsMTYgQEAgc2hvd19oYXNoYWdnX2lu Zm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogfQogCiAvKgotICogU2hv dyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGV4IHNlYXJjaGVzIGZvciBhCisgKiBTaG93IGluZGV4 IHNjYW4gcmVsYXRlZCBleGVjdXRvciBpbnN0cnVtZW50YXRpb24gZm9yIGEKICAqIEluZGV4U2Nh bi9JbmRleE9ubHlTY2FuL0JpdG1hcEluZGV4U2NhbiBub2RlCiAgKi8KIHN0YXRpYyB2b2lkCi1z aG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRl ICplcykKK3Nob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5T dGF0ZSAqZXMpCiB7CiAJUGxhbgkgICAqcGxhbiA9IHBsYW5zdGF0ZS0+cGxhbjsKIAlTaGFyZWRJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gKlNoYXJlZEluZm8gPSBOVUxMOwotCXVpbnQ2NAkJbnNl YXJjaGVzID0gMDsKKwl1aW50NjQJCW5zZWFyY2hlcyA9IDAsCisJCQkJbnRhYmxldHVwbGVmZXRj aGVzID0gMDsKIAogCWlmICghZXMtPmFuYWx5emUpCiAJCXJldHVybjsKQEAgLTM4OTYsNiArMzg5 NCw3IEBAIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBs YWluU3RhdGUgKmVzKQogCQkJCUluZGV4T25seVNjYW5TdGF0ZSAqaW5kZXhzdGF0ZSA9ICgoSW5k ZXhPbmx5U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKIAkJCQluc2VhcmNoZXMgPSBpbmRleHN0 YXRlLT5pb3NzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCQludGFibGV0dXBsZWZldGNoZXMg PSBpbmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm50YWJsZXR1cGxlZmV0Y2hlczsKIAkJCQlT aGFyZWRJbmZvID0gaW5kZXhzdGF0ZS0+aW9zc19TaGFyZWRJbmZvOwogCQkJCWJyZWFrOwogCQkJ fQpAQCAtMzkxOSw5ICszOTE4LDEzIEBAIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0 ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogCQkJSW5kZXhTY2FuSW5zdHJ1bWVudGF0 aW9uICp3aW5zdHJ1bWVudCA9ICZTaGFyZWRJbmZvLT53aW5zdHJ1bWVudFtpXTsKIAogCQkJbnNl YXJjaGVzICs9IHdpbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCQludGFibGV0dXBsZWZldGNoZXMg Kz0gd2luc3RydW1lbnQtPm50YWJsZXR1cGxlZmV0Y2hlczsKIAkJfQogCX0KIAorCWlmIChub2Rl VGFnKHBsYW4pID09IFRfSW5kZXhPbmx5U2NhbikKKwkJRXhwbGFpblByb3BlcnR5VUludGVnZXIo IkhlYXAgRmV0Y2hlcyIsIE5VTEwsIG50YWJsZXR1cGxlZmV0Y2hlcywgZXMpOworCiAJRXhwbGFp blByb3BlcnR5VUludGVnZXIoIkluZGV4IFNlYXJjaGVzIiwgTlVMTCwgbnNlYXJjaGVzLCBlcyk7 CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3JlcGFjay5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcmVwYWNrLmMKaW5kZXggZWMxMDBlM2VlLi41ZGZmNGM4ZmQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3JlcGFjay5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3JlcGFjay5jCkBAIC0yODU5LDYgKzI4NTksNyBAQCBmaW5kX3RhcmdldF90dXBsZShS ZWxhdGlvbiByZWwsIENoYW5nZUNvbnRleHQgKmNoZ2N4dCwgVHVwbGVUYWJsZVNsb3QgKmxvY2F0 b3IsCiAJRm9ybV9wZ19pbmRleCBpZHggPSBjaGdjeHQtPmNjX2lkZW50X2luZGV4LT5yZF9pbmRl eDsKIAlJbmRleFNjYW5EZXNjIHNjYW47CiAJYm9vbAkJcmV0dmFsID0gZmFsc2U7CisJYm9vbAkJ cmVjaGVjazsKIAogCS8qCiAJICogU2NhbiBrZXkgaXMgcGFzc2VkIGJ5IGNhbGxlciwgc28gaXQg ZG9lcyBub3QgaGF2ZSB0byBiZSBjb25zdHJ1Y3RlZApAQCAtMjg3NywxMyArMjg3OCwxMyBAQCBm aW5kX3RhcmdldF90dXBsZShSZWxhdGlvbiByZWwsIENoYW5nZUNvbnRleHQgKmNoZ2N4dCwgVHVw bGVUYWJsZVNsb3QgKmxvY2F0b3IsCiAJfQogCiAJLyogWFhYIG5vIGluc3RydW1lbnRhdGlvbiBm b3Igbm93ICovCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGNoZ2N4dC0+Y2NfaWRlbnRf aW5kZXgsIEdldEFjdGl2ZVNuYXBzaG90KCksCisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWws IGNoZ2N4dC0+Y2NfaWRlbnRfaW5kZXgsIGZhbHNlLCBHZXRBY3RpdmVTbmFwc2hvdCgpLAogCQkJ CQkJICAgTlVMTCwgY2hnY3h0LT5jY19pZGVudF9rZXlfbmVudHJpZXMsIDAsIDApOwogCWluZGV4 X3Jlc2NhbihzY2FuLCBjaGdjeHQtPmNjX2lkZW50X2tleSwgY2hnY3h0LT5jY19pZGVudF9rZXlf bmVudHJpZXMsIE5VTEwsIDApOwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9y d2FyZFNjYW5EaXJlY3Rpb24sIHJldHJpZXZlZCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5l eHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgcmV0cmlldmVkLCAmcmVjaGVjaykp CiAJewogCQkvKiBCZSB3YXJ5IG9mIHRlbXBvcmFsIGNvbnN0cmFpbnRzICovCi0JCWlmIChzY2Fu LT54c19yZWNoZWNrICYmICFpZGVudGl0eV9rZXlfZXF1YWwoY2hnY3h0LCBsb2NhdG9yLCByZXRy aWV2ZWQpKQorCQlpZiAocmVjaGVjayAmJiAhaWRlbnRpdHlfa2V5X2VxdWFsKGNoZ2N4dCwgbG9j YXRvciwgcmV0cmlldmVkKSkKIAkJewogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAkJCWNv bnRpbnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCBlYjM4MzgxMjkuLjc3 OTFjNGU1ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTcyMSw2ICs3MjEs NyBAQCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVsYXRpb24gaGVhcCwg UmVsYXRpb24gaW5kZXgsCiAJaW50CQkJaTsKIAlib29sCQljb25mbGljdDsKIAlib29sCQlmb3Vu ZF9zZWxmOworCWJvb2wJCXJlY2hlY2s7CiAJRXhwckNvbnRleHQgKmVjb250ZXh0OwogCVR1cGxl VGFibGVTbG90ICpleGlzdGluZ19zbG90OwogCVR1cGxlVGFibGVTbG90ICpzYXZlX3NjYW50dXBs ZTsKQEAgLTgyMywxMiArODI0LDEzIEBAIGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3Ry YWludChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwKIHJldHJ5OgogCWNvbmZsaWN0ID0g ZmFsc2U7CiAJZm91bmRfc2VsZiA9IGZhbHNlOwotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNj YW4oaGVhcCwgaW5kZXgsCisJaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBpbmRl eCwgZmFsc2UsCiAJCQkJCQkJCSAmRGlydHlTbmFwc2hvdCwgTlVMTCwgaW5kbmtleWF0dHMsIDAs CiAJCQkJCQkJCSBTT19OT05FKTsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMs IGluZG5rZXlhdHRzLCBOVUxMLCAwKTsKIAotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3QoaW5k ZXhfc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGV4aXN0aW5nX3Nsb3QpKQorCXdoaWxlICh0 YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24s CisJCQkJCQkJCQlleGlzdGluZ19zbG90LCAmcmVjaGVjaykpCiAJewogCQlUcmFuc2FjdGlvbklk IHh3YWl0OwogCQlYTFRXX09wZXIJcmVhc29uX3dhaXQ7CkBAIC04NTgsNyArODYwLDcgQEAgcmV0 cnk6CiAJCQkJCSAgIGV4aXN0aW5nX3ZhbHVlcywgZXhpc3RpbmdfaXNudWxsKTsKIAogCQkvKiBJ ZiBsb3NzeSBpbmRleHNjYW4sIG11c3QgcmVjaGVjayB0aGUgY29uZGl0aW9uICovCi0JCWlmIChp bmRleF9zY2FuLT54c19yZWNoZWNrKQorCQlpZiAocmVjaGVjaykKIAkJewogCQkJaWYgKCFpbmRl eF9yZWNoZWNrX2NvbnN0cmFpbnQoaW5kZXgsCiAJCQkJCQkJCQkJICBjb25zdHJfcHJvY3MsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IGIyY2E1Y2JmMS4uNzVkYjVm MzYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwpAQCAtMTkxLDYgKzE5 MSw3IEBAIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4 b2lkLAogCVRyYW5zYWN0aW9uSWQgeHdhaXQ7CiAJUmVsYXRpb24JaWR4cmVsOwogCWJvb2wJCWZv dW5kOworCWJvb2wJCXJlY2hlY2s7CiAJVHlwZUNhY2hlRW50cnkgKiplcSA9IE5VTEw7CiAJYm9v bAkJaXNJZHhTYWZlVG9Ta2lwRHVwbGljYXRlczsKIApAQCAtMjA1LDcgKzIwNiw3IEBAIFJlbGF0 aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAogCXNrZXlf YXR0b2ZmID0gYnVpbGRfcmVwbGluZGV4X3NjYW5fa2V5KHNrZXksIHJlbCwgaWR4cmVsLCBzZWFy Y2hzbG90KTsKIAogCS8qIFN0YXJ0IGFuIGluZGV4IHNjYW4uICovCi0Jc2NhbiA9IGluZGV4X2Jl Z2luc2NhbihyZWwsIGlkeHJlbCwKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVs LCBmYWxzZSwKIAkJCQkJCSAgICZzbmFwLCBOVUxMLCBza2V5X2F0dG9mZiwgMCwgU09fTk9ORSk7 CiAKIHJldHJ5OgpAQCAtMjE0LDcgKzIxNSw3IEBAIHJldHJ5OgogCWluZGV4X3Jlc2NhbihzY2Fu LCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkvKiBUcnkgdG8gZmluZCB0aGUgdHVw bGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0 aW9uLCBvdXRzbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZv cndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90LCAmcmVjaGVjaykpCiAJewogCQkvKgogCQkgKiBB dm9pZCBleHBlbnNpdmUgZXF1YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5 IG9yCkBAIC0yMjgsNiArMjI5LDggQEAgcmV0cnk6CiAJCQlpZiAoIXR1cGxlc19lcXVhbChvdXRz bG90LCBzZWFyY2hzbG90LCBlcSwgTlVMTCkpCiAJCQkJY29udGludWU7CiAJCX0KKwkJZWxzZQor CQkJQXNzZXJ0KCFyZWNoZWNrKTsKIAogCQlFeGVjTWF0ZXJpYWxpemVTbG90KG91dHNsb3QpOwog CkBAIC02NDUsNiArNjQ4LDcgQEAgUmVsYXRpb25GaW5kRGVsZXRlZFR1cGxlSW5mb0J5SW5kZXgo UmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAogCVR1cGxlVGFibGVTbG90ICpzY2Fuc2xvdDsKIAlU eXBlQ2FjaGVFbnRyeSAqKmVxID0gTlVMTDsKIAlib29sCQlpc0lkeFNhZmVUb1NraXBEdXBsaWNh dGVzOworCWJvb2wJCXJlY2hlY2s7CiAJVHVwbGVEZXNjCWRlc2MgUEdfVVNFRF9GT1JfQVNTRVJU U19PTkxZID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwogCiAJQXNzZXJ0KGVxdWFsVHVwbGVEZXNj cyhkZXNjLCBzZWFyY2hzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yKSk7CkBAIC02NjksMTMgKzY3 MywxMyBAQCBSZWxhdGlvbkZpbmREZWxldGVkVHVwbGVJbmZvQnlJbmRleChSZWxhdGlvbiByZWws IE9pZCBpZHhvaWQsCiAJICogbm90IHlldCBjb21taXR0ZWQgb3IgdGhvc2UganVzdCBjb21taXR0 ZWQgcHJpb3IgdG8gdGhlIHNjYW4gYXJlCiAJICogZXhjbHVkZWQgaW4gdXBkYXRlX21vc3RfcmVj ZW50X2RlbGV0aW9uX2luZm8oKS4KIAkgKi8KLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwg aWR4cmVsLAorCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIGZhbHNlLAogCQkJ CQkJICAgU25hcHNob3RBbnksIE5VTEwsIHNrZXlfYXR0b2ZmLCAwLCBTT19OT05FKTsKIAogCWlu ZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkvKiBUcnkg dG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZv cndhcmRTY2FuRGlyZWN0aW9uLCBzY2Fuc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5l eHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2NhbnNsb3QsICZyZWNoZWNrKSkK IAl7CiAJCS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5k ZXggaXMgcHJpbWFyeSBrZXkgb3IKQEAgLTY4OSw2ICs2OTMsOCBAQCBSZWxhdGlvbkZpbmREZWxl dGVkVHVwbGVJbmZvQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJCQlpZiAoIXR1 cGxlc19lcXVhbChzY2Fuc2xvdCwgc2VhcmNoc2xvdCwgZXEsIE5VTEwpKQogCQkJCWNvbnRpbnVl OwogCQl9CisJCWVsc2UKKwkJCUFzc2VydCghcmVjaGVjayk7CiAKIAkJdXBkYXRlX21vc3RfcmVj ZW50X2RlbGV0aW9uX2luZm8oc2NhbnNsb3QsIG9sZGVzdHhtaW4sIGRlbGV0ZV94aWQsCiAJCQkJ CQkJCQkJIGRlbGV0ZV90aW1lLCBkZWxldGVfb3JpZ2luKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVCaXRtYXBJbmRleHNjYW4uYwppbmRleCA3OTc4NTE0ZTEuLjkwYjAxMGY5YiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYwpAQCAtMjA0LDYgKzIwNCw3 IEBAIEV4ZWNFbmRCaXRtYXBJbmRleFNjYW4oQml0bWFwSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJ CSAqIHdoaWNoIHdpbGwgaGF2ZSBhIG5ldyBCaXRtYXBJbmRleFNjYW5TdGF0ZSBhbmQgemVyb2Vk IHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5iaXNzX0lu c3RydW1lbnQtPm5zZWFyY2hlczsKKwkJQXNzZXJ0KG5vZGUtPmJpc3NfSW5zdHJ1bWVudC0+bnRh YmxldHVwbGVmZXRjaGVzID09IDApOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUluZGV4b25seXNjYW4uYwppbmRleCBkNTIwMTJlOGEuLjI4YTIzZGIwYiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVk ZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1 ZGUgImFjY2Vzcy90dXBkZXNjLmgiCi0jaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRv ci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKQEAgLTQyLDE0ICs0MSwxMSBA QAogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVJbmRleHNjYW4uaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgotI2luY2x1ZGUgInN0b3JhZ2UvcHJl ZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9y ZWwuaCIKIAogCiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkluZGV4T25seU5leHQoSW5kZXhPbmx5 U2NhblN0YXRlICpub2RlKTsKLXN0YXRpYyB2b2lkIFN0b3JlSW5kZXhUdXBsZShJbmRleE9ubHlT Y2FuU3RhdGUgKm5vZGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJCUluZGV4VHVwbGUg aXR1cCwgVHVwbGVEZXNjIGl0dXBkZXNjKTsKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02Niw3ICs2Miw3 IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCVNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uOwogCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CiAJVHVwbGVUYWJsZVNsb3Qg KnNsb3Q7Ci0JSXRlbVBvaW50ZXIgdGlkOworCWJvb2wJCXJlY2hlY2s7CiAKIAkvKgogCSAqIGV4 dHJhY3QgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gaW5kZXggc2NhbiBub2RlCkBAIC05Miw2 ICs4OCw3IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKi8K IAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9u LAogCQkJCQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgdHJ1ZSwK IAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19J bnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pb3NzX051bVNjYW5LZXlzLApAQCAtMTAwLDEx ICs5Nyw3IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJCQkJ CQkgICBTT19ISU5UX1JFTF9SRUFEX09OTFkgOiBTT19OT05FKTsKIAogCQlub2RlLT5pb3NzX1Nj YW5EZXNjID0gc2NhbmRlc2M7Ci0KLQotCQkvKiBTZXQgaXQgdXAgZm9yIGluZGV4LW9ubHkgc2Nh biAqLwotCQlub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwotCQlub2Rl LT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwkJQXNzZXJ0KG5vZGUtPmlvc3NfU2Nh bkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkJLyoKIAkJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0 byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZApAQCAtMTIxLDEwNCAr MTE0LDE0IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCS8qCiAJ ICogT0ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBs ZS4KIAkgKi8KLQl3aGlsZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW5kZXNjLCBkaXJl Y3Rpb24pKSAhPSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRl c2MsIGRpcmVjdGlvbiwgc2xvdCwgJnJlY2hlY2spKQogCXsKLQkJYm9vbAkJdHVwbGVfZnJvbV9o ZWFwID0gZmFsc2U7Ci0KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQkvKgotCQkgKiBX ZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBoZWFwIHBh Z2Ugb24KLQkJICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBldmVyeWJv ZHkuICBJbiBhbnkgY2FzZSwKLQkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhl IGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEgc291cmNlLgotCQkgKgotCQkgKiBOb3RlIG9uIE1lbW9y eSBPcmRlcmluZyBFZmZlY3RzOiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBub3QKLQkJ ICogbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgYnVmZmVyLCBhbmQgdGhlcmVmb3JlIHRoZSByZXN1 bHQgd2UgcmVhZAotCQkgKiBoZXJlIGNvdWxkIGJlIHNsaWdodGx5IHN0YWxlLiAgSG93ZXZlciwg aXQgY2FuJ3QgYmUgc3RhbGUgZW5vdWdoIHRvCi0JCSAqIG1hdHRlci4KLQkJICoKLQkJICogV2Ug bmVlZCB0byBkZXRlY3QgY2xlYXJpbmcgYSBWTSBiaXQgZHVlIHRvIGFuIGluc2VydCByaWdodCBh d2F5LAotCQkgKiBiZWNhdXNlIHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRleCBwYWdl IGJ1dCBub3QgdmlzaWJsZS4gVGhlCi0JCSAqIHJlYWRpbmcgb2YgdGhlIFRJRCBieSB0aGlzIHNj YW4gKHVzaW5nIGEgc2hhcmVkIGxvY2sgb24gdGhlIGluZGV4Ci0JCSAqIGJ1ZmZlcikgaXMgc2Vy aWFsaXplZCB3aXRoIHRoZSBpbnNlcnQgb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRleAotCQkgKiAo dXNpbmcgYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIGluZGV4IGJ1ZmZlcikuIEJlY2F1c2UgdGhl IFZNIGJpdAotCQkgKiBpcyBjbGVhcmVkIGJlZm9yZSB1cGRhdGluZyB0aGUgaW5kZXgsIGFuZCBs b2NraW5nL3VubG9ja2luZyBvZiB0aGUKLQkJICogaW5kZXggcGFnZSBhY3RzIGFzIGEgZnVsbCBt ZW1vcnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRoZQotCQkgKiBjbGVhcmVkIGJpdCBp ZiB3ZSBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCi0JCSAqCi0JCSAqIERlbGV0ZXMgZG8g bm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhciBvdXQKLQkJ ICogdGhlIFRJRCksIHNvIHRoZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlz IG5vdAotCQkgKiBzZXJpYWxpemVkIHdpdGggdGhpcyB0ZXN0IGJlbG93LCBhbmQgd2UgbWF5IHNl ZSBhIHZhbHVlIHRoYXQgaXMKLQkJICogc2lnbmlmaWNhbnRseSBzdGFsZS4gSG93ZXZlciwgd2Ug ZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlIHJpZ2h0Ci0JCSAqIGF3YXksIGJlY2F1c2UgdGhl IHR1cGxlIGlzIHN0aWxsIHZpc2libGUgdW50aWwgdGhlIGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0 aW9uIGNvbW1pdHMgb3IgdGhlIHN0YXRlbWVudCBlbmRzIChpZiBpdCdzIG91cgotCQkgKiB0cmFu c2FjdGlvbikuIEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwg aGF2ZQotCQkgKiBiZWVuIHJlbGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBiYXJyaWVyKSBhZnRl ciBjbGVhcmluZyB0aGUgYml0LgotCQkgKiBBbmQgZm9yIHVzIHRvIGhhdmUgYSBzbmFwc2hvdCB0 aGF0IGluY2x1ZGVzIHRoZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0 dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0IGhhdmUgYWNxdWlyZWQKLQkJICogUHJvY0FycmF5TG9j ayBhZnRlciB0aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJlYWQgYmFycmllci4KLQkJICoKLQkJICog SXQncyB3b3J0aCBnb2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0eSB0byBhdm9pZCBuZWVkaW5n IHRvIGxvY2sKLQkJICogdGhlIFZNIGJ1ZmZlciwgd2hpY2ggY291bGQgY2F1c2Ugc2lnbmlmaWNh bnQgY29udGVudGlvbi4KLQkJICovCi0JCWlmICghVk1fQUxMX1ZJU0lCTEUoc2NhbmRlc2MtPmhl YXBSZWxhdGlvbiwKLQkJCQkJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJ CQkJJm5vZGUtPmlvc3NfVk1CdWZmZXIpKQotCQl7Ci0JCQkvKgotCQkJICogUmF0cywgd2UgaGF2 ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5LgotCQkJICovCi0JCQlJbnN0 ckNvdW50VHVwbGVzMihub2RlLCAxKTsKLQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChzY2FuZGVz Yywgbm9kZS0+aW9zc19UYWJsZVNsb3QpKQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0 dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQotCQkJRXhlY0NsZWFyVHVwbGUobm9kZS0+ aW9zc19UYWJsZVNsb3QpOwotCi0JCQkvKgotCQkJICogT25seSBNVkNDIHNuYXBzaG90cyBhcmUg c3VwcG9ydGVkIGhlcmUsIHNvIHRoZXJlIHNob3VsZCBiZSBubwotCQkJICogbmVlZCB0byBrZWVw IGZvbGxvd2luZyB0aGUgSE9UIGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcwotCQkJICog YmVlbiBmb3VuZC4gIElmIHdlIGRpZCB3YW50IHRvIGFsbG93IHRoYXQsIHdlJ2QgbmVlZCB0byBr ZWVwCi0JCQkgKiBtb3JlIHN0YXRlIHRvIHJlbWVtYmVyIG5vdCB0byBjYWxsIGluZGV4X2dldG5l eHRfdGlkIG5leHQgdGltZS4KLQkJCSAqLwotCQkJaWYgKHNjYW5kZXNjLT54c19oZWFwX2NvbnRp bnVlKQotCQkJCWVsb2coRVJST1IsICJub24tTVZDQyBzbmFwc2hvdHMgYXJlIG5vdCBzdXBwb3J0 ZWQgaW4gaW5kZXgtb25seSBzY2FucyIpOwotCi0JCQkvKgotCQkJICogTm90ZTogYXQgdGhpcyBw b2ludCB3ZSBhcmUgaG9sZGluZyBhIHBpbiBvbiB0aGUgaGVhcCBwYWdlLCBhcwotCQkJICogcmVj b3JkZWQgaW4gc2NhbmRlc2MtPnhzX2NidWYuICBXZSBjb3VsZCByZWxlYXNlIHRoYXQgcGluIG5v dywKLQkJCSAqIGJ1dCBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIGl0J3MgYSB3aW4gdG8gZG8gc28u ICBUaGUgbmV4dCBpbmRleAotCQkJICogZW50cnkgbWlnaHQgcmVxdWlyZSBhIHZpc2l0IHRvIHRo ZSBzYW1lIGhlYXAgcGFnZS4KLQkJCSAqLwotCi0JCQl0dXBsZV9mcm9tX2hlYXAgPSB0cnVlOwot CQl9Ci0KLQkJLyoKLQkJICogRmlsbCB0aGUgc2NhbiB0dXBsZSBzbG90IHdpdGggZGF0YSBmcm9t IHRoZSBpbmRleC4gIFRoaXMgbWlnaHQgYmUKLQkJICogcHJvdmlkZWQgaW4gZWl0aGVyIEhlYXBU dXBsZSBvciBJbmRleFR1cGxlIGZvcm1hdC4gIENvbmNlaXZhYmx5IGFuCi0JCSAqIGluZGV4IEFN IG1pZ2h0IGZpbGwgYm90aCBmaWVsZHMsIGluIHdoaWNoIGNhc2Ugd2UgcHJlZmVyIHRoZSBoZWFw Ci0JCSAqIGZvcm1hdCwgc2luY2UgaXQncyBwcm9iYWJseSBhIGJpdCBjaGVhcGVyIHRvIGZpbGwg YSBzbG90IGZyb20uCi0JCSAqLwotCQlpZiAoc2NhbmRlc2MtPnhzX2hpdHVwKQotCQl7Ci0JCQkv KgotCQkJICogV2UgZG9uJ3QgdGFrZSB0aGUgdHJvdWJsZSB0byB2ZXJpZnkgdGhhdCB0aGUgcHJv dmlkZWQgdHVwbGUgaGFzCi0JCQkgKiBleGFjdGx5IHRoZSBzbG90J3MgZm9ybWF0LCBidXQgaXQg c2VlbXMgd29ydGggZG9pbmcgYSBxdWljawotCQkJICogY2hlY2sgb24gdGhlIG51bWJlciBvZiBm aWVsZHMuCi0JCQkgKi8KLQkJCUFzc2VydChzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5uYXR0 cyA9PQotCQkJCSAgIHNjYW5kZXNjLT54c19oaXR1cGRlc2MtPm5hdHRzKTsKLQkJCUV4ZWNGb3Jj ZVN0b3JlSGVhcFR1cGxlKHNjYW5kZXNjLT54c19oaXR1cCwgc2xvdCwgZmFsc2UpOwotCQl9Ci0J CWVsc2UgaWYgKHNjYW5kZXNjLT54c19pdHVwKQotCQkJU3RvcmVJbmRleFR1cGxlKG5vZGUsIHNs b3QsIHNjYW5kZXNjLT54c19pdHVwLCBzY2FuZGVzYy0+eHNfaXR1cGRlc2MpOwotCQllbHNlCi0J CQllbG9nKEVSUk9SLCAibm8gZGF0YSByZXR1cm5lZCBmb3IgaW5kZXgtb25seSBzY2FuIik7Ci0K IAkJLyoKIAkJICogSWYgdGhlIGluZGV4IHdhcyBsb3NzeSwgd2UgaGF2ZSB0byByZWNoZWNrIHRo ZSBpbmRleCBxdWFscy4KIAkJICovCi0JCWlmIChzY2FuZGVzYy0+eHNfcmVjaGVjaykKKwkJaWYg KHJlY2hlY2spCiAJCXsKIAkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IHNsb3Q7CiAJCQlp ZiAoIUV4ZWNRdWFsQW5kUmVzZXQobm9kZS0+cmVjaGVja3F1YWwsIGVjb250ZXh0KSkKQEAgLTI0 MSwxNiArMTQ0LDYgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJ CQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCiAJCQkJCSBlcnJtc2coImxvc3N5IGRpc3RhbmNlIGZ1bmN0aW9ucyBhcmUgbm90IHN1 cHBvcnRlZCBpbiBpbmRleC1vbmx5IHNjYW5zIikpKTsKLQotCQkvKgotCQkgKiBJZiB3ZSBkaWRu J3QgYWNjZXNzIHRoZSBoZWFwLCB0aGVuIHdlJ2xsIG5lZWQgdG8gdGFrZSBhIHByZWRpY2F0ZQot CQkgKiBsb2NrIGV4cGxpY2l0bHksIGFzIGlmIHdlIGhhZC4gIEZvciBub3cgd2UgZG8gdGhhdCBh dCBwYWdlIGxldmVsLgotCQkgKi8KLQkJaWYgKCF0dXBsZV9mcm9tX2hlYXApCi0JCQlQcmVkaWNh dGVMb2NrUGFnZShzY2FuZGVzYy0+aGVhcFJlbGF0aW9uLAotCQkJCQkJCSAgSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcih0aWQpLAotCQkJCQkJCSAgZXN0YXRlLT5lc19zbmFwc2hvdCk7Ci0KIAkJ cmV0dXJuIHNsb3Q7CiAJfQogCkBAIC0yNjEsNjIgKzE1NCw2IEBAIEluZGV4T25seU5leHQoSW5k ZXhPbmx5U2NhblN0YXRlICpub2RlKQogCXJldHVybiBFeGVjQ2xlYXJUdXBsZShzbG90KTsKIH0K IAotLyoKLSAqIFN0b3JlSW5kZXhUdXBsZQotICoJCUZpbGwgdGhlIHNsb3Qgd2l0aCBkYXRhIGZy b20gdGhlIGluZGV4IHR1cGxlLgotICoKLSAqIEF0IHNvbWUgcG9pbnQgdGhpcyBtaWdodCBiZSBn ZW5lcmFsbHktdXNlZnVsIGZ1bmN0aW9uYWxpdHksIGJ1dAotICogcmlnaHQgbm93IHdlIGRvbid0 IG5lZWQgaXQgZWxzZXdoZXJlLgotICovCi1zdGF0aWMgdm9pZAotU3RvcmVJbmRleFR1cGxlKElu ZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCi0JCQkJSW5kZXhU dXBsZSBpdHVwLCBUdXBsZURlc2MgaXR1cGRlc2MpCi17Ci0JLyoKLQkgKiBOb3RlOiB3ZSBtdXN0 IHVzZSB0aGUgdHVwZGVzYyBzdXBwbGllZCBieSB0aGUgQU0gaW4gaW5kZXhfZGVmb3JtX3R1cGxl LAotCSAqIG5vdCB0aGUgc2xvdCdzIHR1cGRlc2MsIGluIGNhc2UgdGhlIGxhdHRlciBoYXMgZGlm ZmVyZW50IGRhdGF0eXBlcwotCSAqICh0aGlzIGhhcHBlbnMgZm9yIGJ0cmVlIG5hbWVfb3BzIGlu IHBhcnRpY3VsYXIpLiAgVGhleSdkIGJldHRlciBoYXZlCi0JICogdGhlIHNhbWUgbnVtYmVyIG9m IGNvbHVtbnMgdGhvdWdoLCBhcyB3ZWxsIGFzIGJlaW5nIGRhdGF0eXBlLWNvbXBhdGlibGUKLQkg KiB3aGljaCBpcyBzb21ldGhpbmcgd2UgY2FuJ3Qgc28gZWFzaWx5IGNoZWNrLgotCSAqLwotCUFz c2VydChzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5uYXR0cyA9PSBpdHVwZGVzYy0+bmF0dHMp OwotCi0JRXhlY0NsZWFyVHVwbGUoc2xvdCk7Ci0JaW5kZXhfZGVmb3JtX3R1cGxlKGl0dXAsIGl0 dXBkZXNjLCBzbG90LT50dHNfdmFsdWVzLCBzbG90LT50dHNfaXNudWxsKTsKLQotCS8qCi0JICog Q29weSBhbGwgbmFtZSBjb2x1bW5zIHN0b3JlZCBhcyBjc3RyaW5ncyBiYWNrIGludG8gYSBOQU1F REFUQUxFTiBieXRlCi0JICogc2l6ZWQgYWxsb2NhdGlvbi4gIFdlIG1hcmsgdGhpcyBicmFuY2gg YXMgdW5saWtlbHkgYXMgZ2VuZXJhbGx5ICJuYW1lIgotCSAqIGlzIHVzZWQgb25seSBmb3IgdGhl IHN5c3RlbSBjYXRhbG9ncyBhbmQgdGhpcyB3b3VsZCBoYXZlIHRvIGJlIGEgdXNlcgotCSAqIHF1 ZXJ5IHJ1bm5pbmcgb24gdGhvc2Ugb3Igc29tZSBvdGhlciB1c2VyIHRhYmxlIHdpdGggYW4gaW5k ZXggb24gYSBuYW1lCi0JICogY29sdW1uLgotCSAqLwotCWlmICh1bmxpa2VseShub2RlLT5pb3Nz X05hbWVDU3RyaW5nQXR0TnVtcyAhPSBOVUxMKSkKLQl7Ci0JCWludAkJCWF0dGNvdW50ID0gbm9k ZS0+aW9zc19OYW1lQ1N0cmluZ0NvdW50OwotCi0JCWZvciAoaW50IGlkeCA9IDA7IGlkeCA8IGF0 dGNvdW50OyBpZHgrKykKLQkJewotCQkJaW50CQkJYXR0bnVtID0gbm9kZS0+aW9zc19OYW1lQ1N0 cmluZ0F0dE51bXNbaWR4XTsKLQkJCU5hbWUJCW5hbWU7Ci0KLQkJCS8qIHNraXAgbnVsbCBEYXR1 bXMgKi8KLQkJCWlmIChzbG90LT50dHNfaXNudWxsW2F0dG51bV0pCi0JCQkJY29udGludWU7Ci0K LQkJCS8qIGFsbG9jYXRlIHRoZSBOQU1FREFUQUxFTiBhbmQgY29weSB0aGUgZGF0dW0gaW50byB0 aGF0IG1lbW9yeSAqLwotCQkJbmFtZSA9IChOYW1lKSBNZW1vcnlDb250ZXh0QWxsb2Mobm9kZS0+ c3MucHMucHNfRXhwckNvbnRleHQtPmVjeHRfcGVyX3R1cGxlX21lbW9yeSwKLQkJCQkJCQkJCQkJ IE5BTUVEQVRBTEVOKTsKLQotCQkJLyogdXNlIG5hbWVzdHJjcHkgdG8gemVyby1wYWQgYWxsIHRy YWlsaW5nIGJ5dGVzICovCi0JCQluYW1lc3RyY3B5KG5hbWUsIERhdHVtR2V0Q1N0cmluZyhzbG90 LT50dHNfdmFsdWVzW2F0dG51bV0pKTsKLQkJCXNsb3QtPnR0c192YWx1ZXNbYXR0bnVtXSA9IE5h bWVHZXREYXR1bShuYW1lKTsKLQkJfQotCX0KLQotCUV4ZWNTdG9yZVZpcnR1YWxUdXBsZShzbG90 KTsKLX0KLQogLyoKICAqIEluZGV4T25seVJlY2hlY2sgLS0gYWNjZXNzIG1ldGhvZCByb3V0aW5l IHRvIHJlY2hlY2sgYSB0dXBsZSBpbiBFdmFsUGxhblF1YWwKICAqCkBAIC00MTAsMTMgKzI0Nyw2 IEBAIEV4ZWNFbmRJbmRleE9ubHlTY2FuKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAlpbmRl eFJlbGF0aW9uRGVzYyA9IG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjOwogCWluZGV4U2NhbkRlc2Mg PSBub2RlLT5pb3NzX1NjYW5EZXNjOwogCi0JLyogUmVsZWFzZSBWTSBidWZmZXIgcGluLCBpZiBh bnkuICovCi0JaWYgKG5vZGUtPmlvc3NfVk1CdWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQl7Ci0J CVJlbGVhc2VCdWZmZXIobm9kZS0+aW9zc19WTUJ1ZmZlcik7Ci0JCW5vZGUtPmlvc3NfVk1CdWZm ZXIgPSBJbnZhbGlkQnVmZmVyOwotCX0KLQogCS8qCiAJICogV2hlbiBlbmRpbmcgYSBwYXJhbGxl bCB3b3JrZXIsIGNvcHkgdGhlIHN0YXRpc3RpY3MgZ2F0aGVyZWQgYnkgdGhlCiAJICogd29ya2Vy IGJhY2sgaW50byBzaGFyZWQgbWVtb3J5IHNvIHRoYXQgaXQgY2FuIGJlIHBpY2tlZCB1cCBieSB0 aGUgbWFpbgpAQCAtNDM2LDYgKzI2Niw3IEBAIEV4ZWNFbmRJbmRleE9ubHlTY2FuKEluZGV4T25s eVNjYW5TdGF0ZSAqbm9kZSkKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25seVNj YW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hl cyArPSBub2RlLT5pb3NzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJd2luc3RydW1lbnQtPm50 YWJsZXR1cGxlZmV0Y2hlcyArPSBub2RlLT5pb3NzX0luc3RydW1lbnQtPm50YWJsZXR1cGxlZmV0 Y2hlczsKIAl9CiAKIAkvKgpAQCAtNTM1LDggKzM2Niw2IEBAIEV4ZWNJbml0SW5kZXhPbmx5U2Nh bihJbmRleE9ubHlTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlSZWxh dGlvbglpbmRleFJlbGF0aW9uOwogCUxPQ0tNT0RFCWxvY2ttb2RlOwogCVR1cGxlRGVzYwl0dXBE ZXNjOwotCWludAkJCWluZG5rZXlhdHRzOwotCWludAkJCW5hbWVjb3VudDsKIAogCS8qCiAJICog Y3JlYXRlIHN0YXRlIHN0cnVjdHVyZQpAQCAtNTczLDE1ICs0MDIsNiBAQCBFeGVjSW5pdEluZGV4 T25seVNjYW4oSW5kZXhPbmx5U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3Mp CiAJCQkJCQkgICZUVFNPcHNWaXJ0dWFsLAogCQkJCQkJICAwKTsKIAotCS8qCi0JICogV2UgbmVl ZCBhbm90aGVyIHNsb3QsIGluIGEgZm9ybWF0IHRoYXQncyBzdWl0YWJsZSBmb3IgdGhlIHRhYmxl IEFNLCBmb3IKLQkgKiB3aGVuIHdlIG5lZWQgdG8gZmV0Y2ggYSB0dXBsZSBmcm9tIHRoZSB0YWJs ZSBmb3IgcmVjaGVja2luZyB2aXNpYmlsaXR5LgotCSAqLwotCWluZGV4c3RhdGUtPmlvc3NfVGFi bGVTbG90ID0KLQkJRXhlY0FsbG9jVGFibGVTbG90KCZlc3RhdGUtPmVzX3R1cGxlVGFibGUsCi0J CQkJCQkgICBSZWxhdGlvbkdldERlc2NyKGN1cnJlbnRSZWxhdGlvbiksCi0JCQkJCQkgICB0YWJs ZV9zbG90X2NhbGxiYWNrcyhjdXJyZW50UmVsYXRpb24pLCAwKTsKLQogCS8qCiAJICogSW5pdGlh bGl6ZSByZXN1bHQgdHlwZSBhbmQgcHJvamVjdGlvbiBpbmZvLiAgVGhlIG5vZGUncyB0YXJnZXRs aXN0IHdpbGwKIAkgKiBjb250YWluIFZhcnMgd2l0aCB2YXJubyA9IElOREVYX1ZBUiwgcmVmZXJl bmNpbmcgdGhlIHNjYW4gdHVwbGUuCkBAIC02NzEsNDggKzQ5MSw2IEBAIEV4ZWNJbml0SW5kZXhP bmx5U2NhbihJbmRleE9ubHlTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykK IAkJaW5kZXhzdGF0ZS0+aW9zc19SdW50aW1lQ29udGV4dCA9IE5VTEw7CiAJfQogCi0JaW5kZXhz dGF0ZS0+aW9zc19OYW1lQ1N0cmluZ0F0dE51bXMgPSBOVUxMOwotCWluZG5rZXlhdHRzID0gaW5k ZXhSZWxhdGlvbi0+cmRfaW5kZXgtPmluZG5rZXlhdHRzOwotCW5hbWVjb3VudCA9IDA7Ci0KLQkv KgotCSAqIFRoZSAibmFtZSIgdHlwZSBmb3IgYnRyZWUgdXNlcyB0ZXh0X29wcyB3aGljaCByZXN1 bHRzIGluIHN0b3JpbmcKLQkgKiBjc3RyaW5ncyBpbiB0aGUgaW5kZXhlZCBrZXlzIHJhdGhlciB0 aGFuIG5hbWVzLiAgSGVyZSB3ZSBkZXRlY3QgdGhhdCBpbgotCSAqIGEgZ2VuZXJpYyB3YXkgaW4g Y2FzZSBvdGhlciBpbmRleCBBTXMgd2FudCB0byBkbyB0aGUgc2FtZSBvcHRpbWl6YXRpb24uCi0J ICogQ2hlY2sgZm9yIG9wY2xhc3NlcyB3aXRoIGFuIG9wY2ludHlwZSBvZiBOQU1FT0lEIGFuZCBh biBpbmRleCB0dXBsZQotCSAqIGRlc2NyaXB0b3Igd2l0aCBDU1RSSU5HT0lELiAgSWYgYW55IG9m IHRoZXNlIGFyZSBmb3VuZCwgY3JlYXRlIGFuIGFycmF5Ci0JICogbWFya2luZyB0aGUgaW5kZXgg YXR0cmlidXRlIG51bWJlciBvZiBlYWNoIG9mIHRoZW0uICBTdG9yZUluZGV4VHVwbGUoKQotCSAq IGhhbmRsZXMgY29weWluZyB0aGUgbmFtZSBEYXR1bXMgaW50byBhIE5BTUVEQVRBTEVOLWJ5dGUg YWxsb2NhdGlvbi4KLQkgKi8KLQotCS8qIEZpcnN0LCBjb3VudCB0aGUgbnVtYmVyIG9mIHN1Y2gg aW5kZXgga2V5cyAqLwotCWZvciAoaW50IGF0dG51bSA9IDA7IGF0dG51bSA8IGluZG5rZXlhdHRz OyBhdHRudW0rKykKLQl7Ci0JCWlmIChUdXBsZURlc2NBdHRyKGluZGV4UmVsYXRpb24tPnJkX2F0 dCwgYXR0bnVtKS0+YXR0dHlwaWQgPT0gQ1NUUklOR09JRCAmJgotCQkJaW5kZXhSZWxhdGlvbi0+ cmRfb3BjaW50eXBlW2F0dG51bV0gPT0gTkFNRU9JRCkKLQkJCW5hbWVjb3VudCsrOwotCX0KLQot CWlmIChuYW1lY291bnQgPiAwKQotCXsKLQkJaW50CQkJaWR4ID0gMDsKLQotCQkvKgotCQkgKiBO b3cgY3JlYXRlIGFuIGFycmF5IHRvIG1hcmsgdGhlIGF0dHJpYnV0ZSBudW1iZXJzIG9mIHRoZSBr ZXlzIHRoYXQKLQkJICogbmVlZCB0byBiZSBjb252ZXJ0ZWQgZnJvbSBjc3RyaW5nIHRvIG5hbWUu Ci0JCSAqLwotCQlpbmRleHN0YXRlLT5pb3NzX05hbWVDU3RyaW5nQXR0TnVtcyA9IHBhbGxvY19h cnJheShBdHRyTnVtYmVyLCBuYW1lY291bnQpOwotCi0JCWZvciAoaW50IGF0dG51bSA9IDA7IGF0 dG51bSA8IGluZG5rZXlhdHRzOyBhdHRudW0rKykKLQkJewotCQkJaWYgKFR1cGxlRGVzY0F0dHIo aW5kZXhSZWxhdGlvbi0+cmRfYXR0LCBhdHRudW0pLT5hdHR0eXBpZCA9PSBDU1RSSU5HT0lEICYm Ci0JCQkJaW5kZXhSZWxhdGlvbi0+cmRfb3BjaW50eXBlW2F0dG51bV0gPT0gTkFNRU9JRCkKLQkJ CQlpbmRleHN0YXRlLT5pb3NzX05hbWVDU3RyaW5nQXR0TnVtc1tpZHgrK10gPSAoQXR0ck51bWJl cikgYXR0bnVtOwotCQl9Ci0JfQotCi0JaW5kZXhzdGF0ZS0+aW9zc19OYW1lQ1N0cmluZ0NvdW50 ID0gbmFtZWNvdW50OwotCiAJLyoKIAkgKiBhbGwgZG9uZS4KIAkgKi8KQEAgLTc2OCwxNCArNTQ2 LDE0IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3RhdGUg Km5vZGUsCiAJbm9kZS0+aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxl bChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0 aW9uRGVzYywKKwkJCQkJCQkJIHRydWUsCiAJCQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1lbnQs CiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19O dW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2NhbiwKIAkJCQkJCQkJIFNjYW5SZWxJc1JlYWRP bmx5KCZub2RlLT5zcykgPwogCQkJCQkJCQkgU09fSElOVF9SRUxfUkVBRF9PTkxZIDogU09fTk9O RSk7Ci0Jbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKLQlub2RlLT5p b3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVz Yy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxj dWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCkBAIC04MTgsMTMgKzU5 NiwxNCBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5U2NhblN0 YXRlICpub2RlLAogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFy YWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgbm9kZS0+aW9zc19S ZWxhdGlvbkRlc2MsCisJCQkJCQkJCSB0cnVlLAogCQkJCQkJCQkgbm9kZS0+aW9zc19JbnN0cnVt ZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlv c3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4sCiAJCQkJCQkJCSBTY2FuUmVsSXNS ZWFkT25seSgmbm9kZS0+c3MpID8KIAkJCQkJCQkJIFNPX0hJTlRfUkVMX1JFQURfT05MWSA6IFNP X05PTkUpOwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7CisJQXNz ZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAqIElmIG5v IHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBh bmQgcGFzcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCmluZGV4IDM5ZjY2OTFlZS4u NDU3ZmJkYjA3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2Fu LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC04Niw2ICs4 Niw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAlTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbjsKIAlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOwogCVR1cGxlVGFibGVTbG90ICpzbG90 OworCWJvb2wJCXJlY2hlY2s7CiAKIAkvKgogCSAqIGV4dHJhY3QgbmVjZXNzYXJ5IGluZm9ybWF0 aW9uIGZyb20gaW5kZXggc2NhbiBub2RlCkBAIC0xMTAsNiArMTExLDcgQEAgSW5kZXhOZXh0KElu ZGV4U2NhblN0YXRlICpub2RlKQogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4o bm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRp b25EZXNjLAorCQkJCQkJCQkgICBmYWxzZSwKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hv dCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlz c19OdW1TY2FuS2V5cywKQEAgLTEzMiw3ICsxMzQsNyBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3Rh dGUgKm5vZGUpCiAJLyoKIAkgKiBvaywgbm93IHRoYXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZl dGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2Nh bmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xv dChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90LCAmcmVjaGVjaykpCiAJewogCQlDSEVDS19GT1Jf SU5URVJSVVBUUygpOwogCkBAIC0xNDAsNyArMTQyLDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0 YXRlICpub2RlKQogCQkgKiBJZiB0aGUgaW5kZXggd2FzIGxvc3N5LCB3ZSBoYXZlIHRvIHJlY2hl Y2sgdGhlIGluZGV4IHF1YWxzIHVzaW5nCiAJCSAqIHRoZSBmZXRjaGVkIHR1cGxlLgogCQkgKi8K LQkJaWYgKHNjYW5kZXNjLT54c19yZWNoZWNrKQorCQlpZiAocmVjaGVjaykKIAkJewogCQkJZWNv bnRleHQtPmVjeHRfc2NhbnR1cGxlID0gc2xvdDsKIAkJCWlmICghRXhlY1F1YWxBbmRSZXNldChu b2RlLT5pbmRleHF1YWxvcmlnLCBlY29udGV4dCkpCkBAIC0xNzgsNiArMTgwLDcgQEAgSW5kZXhO ZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJVHVwbGVUYWJsZVNsb3QgKnNs b3Q7CiAJUmVvcmRlclR1cGxlICp0b3Btb3N0ID0gTlVMTDsKIAlib29sCQl3YXNfZXhhY3Q7CisJ Ym9vbAkJcmVjaGVjazsKIAlEYXR1bQkgICAqbGFzdGZldGNoZWRfdmFsczsKIAlib29sCSAgICps YXN0ZmV0Y2hlZF9udWxsczsKIAlpbnQJCQljbXA7CkBAIC0yMDgsNiArMjExLDcgQEAgSW5kZXhO ZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqLwogCQlzY2FuZGVzYyA9 IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSAg IG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIGZhbHNlLAogCQkJCQkJCQkgICBl c3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJ CQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLApAQCAtMjY2LDcgKzI3MCw4IEBAIEluZGV4 TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBGZXRjaCBuZXh0IHR1 cGxlIGZyb20gdGhlIGluZGV4LgogCQkgKi8KIG5leHRfaW5kZXh0dXBsZToKLQkJaWYgKCFpbmRl eF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKKwkJ aWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0 aW9uLCBzbG90LAorCQkJCQkJCQkJICAmcmVjaGVjaykpCiAJCXsKIAkJCS8qCiAJCQkgKiBObyBt b3JlIHR1cGxlcyBmcm9tIHRoZSBpbmRleC4gIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGRyYWluIGFu eQpAQCAtMjgwLDcgKzI4NSw3IEBAIG5leHRfaW5kZXh0dXBsZToKIAkJICogSWYgdGhlIGluZGV4 IHdhcyBsb3NzeSwgd2UgaGF2ZSB0byByZWNoZWNrIHRoZSBpbmRleCBxdWFscyBhbmQKIAkJICog T1JERVIgQlkgZXhwcmVzc2lvbnMgdXNpbmcgdGhlIGZldGNoZWQgdHVwbGUuCiAJCSAqLwotCQlp ZiAoc2NhbmRlc2MtPnhzX3JlY2hlY2spCisJCWlmIChyZWNoZWNrKQogCQl7CiAJCQllY29udGV4 dC0+ZWN4dF9zY2FudHVwbGUgPSBzbG90OwogCQkJaWYgKCFFeGVjUXVhbEFuZFJlc2V0KG5vZGUt PmluZGV4cXVhbG9yaWcsIGVjb250ZXh0KSkKQEAgLTgxOCw2ICs4MjMsNyBAQCBFeGVjRW5kSW5k ZXhTY2FuKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcg SW5kZXhPbmx5U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVu dC0+bnNlYXJjaGVzICs9IG5vZGUtPmlzc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCUFzc2Vy dChub2RlLT5pc3NfSW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVzID09IDApOwogCX0KIAog CS8qCkBAIC0xNzA2LDYgKzE3MTIsNyBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRl eFNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5pc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNj YW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgbm9kZS0+ aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIGZhbHNlLAogCQkJCQkJCQkgbm9kZS0+aXNzX0lu c3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2Rl LT5pc3NfTnVtT3JkZXJCeUtleXMsCkBAIC0xNzU0LDYgKzE3NjEsNyBAQCBFeGVjSW5kZXhTY2Fu SW5pdGlhbGl6ZVdvcmtlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5pc3NfU2NhbkRl c2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0 aW9uLAogCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIGZhbHNlLAog CQkJCQkJCQkgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtU2Nh bktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yaV90cmlnZ2Vycy5jCmluZGV4IGRjODljNjg2My4uZTVhMjI4YTZmIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvcmlfdHJpZ2dlcnMuYwpAQCAtMjgwNCw3ICsyODA0LDcgQEAgcmlfRmFzdFBhdGhDaGVj ayhSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCWlkeF9yZWwgPSBpbmRleF9vcGVuKHJpaW5m by0+Y29uaW5kaWQsIEFjY2Vzc1NoYXJlTG9jayk7CiAKIAlzbG90ID0gdGFibGVfc2xvdF9jcmVh dGUocGtfcmVsLCBOVUxMKTsKLQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihwa19yZWwsIGlk eF9yZWwsCisJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4ocGtfcmVsLCBpZHhfcmVsLCBmYWxz ZSwKIAkJCQkJCQkgICBzbmFwc2hvdCwgTlVMTCwKIAkJCQkJCQkgICByaWluZm8tPm5rZXlzLCAw LAogCQkJCQkJCSAgIFNPX05PTkUpOwpAQCAtMjkxOCw3ICsyOTE4LDcgQEAgcmlfRmFzdFBhdGhC YXRjaEZsdXNoKFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnksIFJlbGF0aW9uIGZrX3JlbCwKIAkg Ki8KIAlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnBlbnRyeS0+Zmx1c2hfY3h0KTsK IAotCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwgc25hcHNob3Qs IE5VTEwsCisJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4ocGtfcmVsLCBpZHhfcmVsLCBmYWxz ZSwgc25hcHNob3QsIE5VTEwsCiAJCQkJCQkJICAgcmlpbmZvLT5ua2V5cywgMCwgU09fTk9ORSk7 CiAKIAlHZXRVc2VySWRBbmRTZWNDb250ZXh0KCZzYXZlZF91c2VyaWQsICZzYXZlZF9zZWNfY29u dGV4dCk7CkBAIC0zMTE0LDcgKzMxMTQsNyBAQCByaV9GYXN0UGF0aEZsdXNoQXJyYXkoUklfRmFz dFBhdGhFbnRyeSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCiAJICogV2FsayBh bGwgbWF0Y2hlcy4gIFRoZSBpbmRleCBBTSByZXR1cm5zIHRoZW0gaW4gaW5kZXggb3JkZXIuICBG b3IgZWFjaAogCSAqIG1hdGNoLCBmaW5kIHdoaWNoIGJhdGNoIGl0ZW0ocykgaXQgc2F0aXNmaWVz LgogCSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2Fu RGlyZWN0aW9uLCBwa19zbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNj YW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgcGtfc2xvdCwgTlVMTCkpCiAJewogCQlEYXR1 bQkJZm91bmRfdmFsOwogCQlib29sCQlmb3VuZF9udWxsOwpAQCAtMzE4Nyw3ICszMTg3LDcgQEAg cmlfRmFzdFBhdGhQcm9iZU9uZShSZWxhdGlvbiBwa19yZWwsIFJlbGF0aW9uIGlkeF9yZWwsCiAK IAlpbmRleF9yZXNjYW4oc2NhbmRlc2MsIHNrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAotCWlmIChp bmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkK KwlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVj dGlvbiwgc2xvdCwgTlVMTCkpCiAJewogCQlib29sCQljb25jdXJyZW50bHlfdXBkYXRlZDsKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCBiOTQ0OWI0NTcuLjdlNmNiZDgwMSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTEwMiw3ICsxMDIsNiBAQAogI2luY2x1ZGUgImFjY2Vz cy9naW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFi bGVhbS5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWMuaCIKQEAgLTI2Niw3ICsyNjUsNiBAQCBzdGF0 aWMgYm9vbCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJ CQkJCQkJCQkJIFNjYW5LZXkgc2NhbmtleXMsCiAJCQkJCQkJCQkJIGludDE2IHR5cExlbiwKIAkJ CQkJCQkJCQkgYm9vbCB0eXBCeVZhbCwKLQkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnRhYmxl c2xvdCwKIAkJCQkJCQkJCQkgTWVtb3J5Q29udGV4dCBvdXRlcmNvbnRleHQsCiAJCQkJCQkJCQkJ IERhdHVtICplbmRwb2ludERhdHVtKTsKIHN0YXRpYyBSZWxPcHRJbmZvICpmaW5kX2pvaW5faW5w dXRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVsaWRzKTsKQEAgLTcwMjAsNyArNzAx OCw2IEBAIGdldF9hY3R1YWxfdmFyaWFibGVfcmFuZ2UoUGxhbm5lckluZm8gKnJvb3QsIFZhcmlh YmxlU3RhdERhdGEgKnZhcmRhdGEsCiAJCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CiAJCQlS ZWxhdGlvbgloZWFwUmVsOwogCQkJUmVsYXRpb24JaW5kZXhSZWw7Ci0JCQlUdXBsZVRhYmxlU2xv dCAqc2xvdDsKIAkJCWludDE2CQl0eXBMZW47CiAJCQlib29sCQl0eXBCeVZhbDsKIAkJCVNjYW5L ZXlEYXRhIHNjYW5rZXlzWzFdOwpAQCAtNzAzOSw3ICs3MDM2LDYgQEAgZ2V0X2FjdHVhbF92YXJp YWJsZV9yYW5nZShQbGFubmVySW5mbyAqcm9vdCwgVmFyaWFibGVTdGF0RGF0YSAqdmFyZGF0YSwK IAkJCWluZGV4UmVsID0gaW5kZXhfb3BlbihpbmRleC0+aW5kZXhvaWQsIE5vTG9jayk7CiAKIAkJ CS8qIGJ1aWxkIHNvbWUgc3R1ZmYgbmVlZGVkIGZvciBpbmRleHNjYW4gZXhlY3V0aW9uICovCi0J CQlzbG90ID0gdGFibGVfc2xvdF9jcmVhdGUoaGVhcFJlbCwgTlVMTCk7CiAJCQlnZXRfdHlwbGVu Ynl2YWwodmFyZGF0YS0+YXR0dHlwZSwgJnR5cExlbiwgJnR5cEJ5VmFsKTsKIAogCQkJLyogc2V0 IHVwIGFuIElTIE5PVCBOVUxMIHNjYW4ga2V5IHNvIHRoYXQgd2UgaWdub3JlIG51bGxzICovCkBA IC03MDYxLDcgKzcwNTcsNiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlKFBsYW5uZXJJbmZv ICpyb290LCBWYXJpYWJsZVN0YXREYXRhICp2YXJkYXRhLAogCQkJCQkJCQkJCQkJCQkgc2Nhbmtl eXMsCiAJCQkJCQkJCQkJCQkJCSB0eXBMZW4sCiAJCQkJCQkJCQkJCQkJCSB0eXBCeVZhbCwKLQkJ CQkJCQkJCQkJCQkJIHNsb3QsCiAJCQkJCQkJCQkJCQkJCSBvbGRjb250ZXh0LAogCQkJCQkJCQkJ CQkJCQkgbWluKTsKIAkJCX0KQEAgLTcwODEsMTQgKzcwNzYsMTEgQEAgZ2V0X2FjdHVhbF92YXJp YWJsZV9yYW5nZShQbGFubmVySW5mbyAqcm9vdCwgVmFyaWFibGVTdGF0RGF0YSAqdmFyZGF0YSwK IAkJCQkJCQkJCQkJCQkJIHNjYW5rZXlzLAogCQkJCQkJCQkJCQkJCQkgdHlwTGVuLAogCQkJCQkJ CQkJCQkJCQkgdHlwQnlWYWwsCi0JCQkJCQkJCQkJCQkJCSBzbG90LAogCQkJCQkJCQkJCQkJCQkg b2xkY29udGV4dCwKIAkJCQkJCQkJCQkJCQkJIG1heCk7CiAJCQl9CiAKIAkJCS8qIENsZWFuIGV2 ZXJ5dGhpbmcgdXAgKi8KLQkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7Ci0K IAkJCWluZGV4X2Nsb3NlKGluZGV4UmVsLCBOb0xvY2spOwogCQkJdGFibGVfY2xvc2UoaGVhcFJl bCwgTm9Mb2NrKTsKIApAQCAtNzExMSw4ICs3MTAzLDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9y YW5nZShQbGFubmVySW5mbyAqcm9vdCwgVmFyaWFibGVTdGF0RGF0YSAqdmFyZGF0YSwKICAqCiAg KiBzY2Fua2V5cyBpcyBhIDEtZWxlbWVudCBzY2Fua2V5IGFycmF5IHNldCB1cCB0byByZWplY3Qg bnVsbHMuCiAgKiB0eXBMZW4vdHlwQnlWYWwgZGVzY3JpYmUgdGhlIGRhdGF0eXBlIG9mIHRoZSBp bmRleCdzIGZpcnN0IGNvbHVtbi4KLSAqIHRhYmxlc2xvdCBpcyBhIHNsb3Qgc3VpdGFibGUgdG8g aG9sZCB0YWJsZSB0dXBsZXMsIGluIGNhc2Ugd2UgbmVlZAotICogdG8gcHJvYmUgdGhlIGhlYXAu CiAgKiAoV2UgY291bGQgY29tcHV0ZSB0aGVzZSB2YWx1ZXMgbG9jYWxseSwgYnV0IHRoYXQgd291 bGQgbWVhbiBjb21wdXRpbmcgdGhlbQogICogdHdpY2Ugd2hlbiBnZXRfYWN0dWFsX3ZhcmlhYmxl X3JhbmdlIG5lZWRzIGJvdGggdGhlIG1pbiBhbmQgdGhlIG1heC4pCiAgKgpAQCAtNzEyNiwxOSAr NzExNiwxNiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWws CiAJCQkJCQkJIFNjYW5LZXkgc2NhbmtleXMsCiAJCQkJCQkJIGludDE2IHR5cExlbiwKIAkJCQkJ CQkgYm9vbCB0eXBCeVZhbCwKLQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnRhYmxlc2xvdCwKIAkJ CQkJCQkgTWVtb3J5Q29udGV4dCBvdXRlcmNvbnRleHQsCiAJCQkJCQkJIERhdHVtICplbmRwb2lu dERhdHVtKQogewogCWJvb2wJCWhhdmVfZGF0YSA9IGZhbHNlOwogCVNuYXBzaG90RGF0YSBTbmFw c2hvdE5vblZhY3V1bWFibGU7CiAJSW5kZXhTY2FuRGVzYyBpbmRleF9zY2FuOwotCUJ1ZmZlcgkJ dm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCUJsb2NrTnVtYmVyIGxhc3RfaGVhcF9ibG9jayA9 IEludmFsaWRCbG9ja051bWJlcjsKLQlpbnQJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcyA9IDA7Ci0J SXRlbVBvaW50ZXIgdGlkOwotCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwotCWJvb2wJ CWlzbnVsbFtJTkRFWF9NQVhfS0VZU107CisJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJYm9vbAkJ cmVjaGVjazsKKwlEYXR1bQkJdmFsOworCWJvb2wJCWlzbnVsbDsKIAlNZW1vcnlDb250ZXh0IG9s ZGNvbnRleHQ7CiAKIAkvKgpAQCAtNzE4NCw5NSArNzE3MSw1MSBAQCBnZXRfYWN0dWFsX3Zhcmlh YmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJICogYSBodWdlIGFtb3VudCBvZiB0aW1l IGhlcmUsIHNvIHdlIGdpdmUgdXAgb25jZSB3ZSd2ZSByZWFkIHRvbyBtYW55IGhlYXAKIAkgKiBw YWdlcy4gIFdoZW4gd2UgZmFpbCBmb3IgdGhhdCByZWFzb24sIHRoZSBjYWxsZXIgd2lsbCBlbmQg dXAgdXNpbmcKIAkgKiB3aGF0ZXZlciBleHRyZW1hbCB2YWx1ZSBpcyByZWNvcmRlZCBpbiBwZ19z dGF0aXN0aWMuCisJICoKKwkgKiBXZSBzZXQgeHNfdmlzaXRlZF9wYWdlc19saW1pdCB0byB0ZWxs IHRoZSB0YWJsZSBBTSB0byBjb3VudCBkaXN0aW5jdAorCSAqIGhlYXAgcGFnZXMgdmlzaXRlZCBm b3Igbm9uLXZpc2libGUgdHVwbGVzIGFuZCBnaXZlIHVwIGFmdGVyIHRoZSBsaW1pdAorCSAqIGlz IGV4Y2VlZGVkLgogCSAqLworI2RlZmluZSBWSVNJVEVEX1BBR0VTX0xJTUlUIDEwMAogCUluaXRO b25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAogCQkJCQkJCSAgR2xv YmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CiAKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2Fu KGhlYXBSZWwsIGluZGV4UmVsLAorCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJl bCwgaW5kZXhSZWwsIHRydWUsCiAJCQkJCQkJCSAmU25hcHNob3ROb25WYWN1dW1hYmxlLCBOVUxM LAogCQkJCQkJCQkgMSwgMCwKIAkJCQkJCQkJIFNPX05PTkUpOwotCS8qIFNldCBpdCB1cCBmb3Ig aW5kZXgtb25seSBzY2FuICovCi0JaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlB c3NlcnQoaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlpbmRleF9zY2FuLT54c192aXNpdGVk X3BhZ2VzX2xpbWl0ID0gVklTSVRFRF9QQUdFU19MSU1JVDsKIAlpbmRleF9yZXNjYW4oaW5kZXhf c2Nhbiwgc2NhbmtleXMsIDEsIE5VTEwsIDApOwogCisJc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRh YmxlU2xvdChSZWxhdGlvbkdldERlc2NyKGluZGV4UmVsKSwgJlRUU09wc1ZpcnR1YWwpOworCiAJ LyogRmV0Y2ggZmlyc3QvbmV4dCB0dXBsZSBpbiBzcGVjaWZpZWQgZGlyZWN0aW9uICovCi0Jd2hp bGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIpKSAh PSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgaW5k ZXhzY2FuZGlyLCBzbG90LCAmcmVjaGVjaykpCiAJewotCQlCbG9ja051bWJlciBibG9jayA9IEl0 ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKLQotCQlpZiAoIVZNX0FMTF9WSVNJQkxFKGhl YXBSZWwsCi0JCQkJCQkJYmxvY2ssCi0JCQkJCQkJJnZtYnVmZmVyKSkKLQkJewotCQkJLyogUmF0 cywgd2UgaGF2ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5ICovCi0JCQlp ZiAoIWluZGV4X2ZldGNoX2hlYXAoaW5kZXhfc2NhbiwgdGFibGVzbG90KSkKLQkJCXsKLQkJCQkv KgotCQkJCSAqIE5vIHZpc2libGUgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnksIHNvIHdlIG5l ZWQgdG8KLQkJCQkgKiBhZHZhbmNlIHRvIHRoZSBuZXh0IGVudHJ5LiAgQmVmb3JlIGRvaW5nIHNv LCBjb3VudCBoZWFwCi0JCQkJICogcGFnZSBmZXRjaGVzIGFuZCBnaXZlIHVwIGlmIHdlJ3ZlIGRv bmUgdG9vIG1hbnkuCi0JCQkJICoKLQkJCQkgKiBXZSBkb24ndCBjaGFyZ2UgYSBwYWdlIGZldGNo IGlmIHRoaXMgaXMgdGhlIHNhbWUgaGVhcCBwYWdlCi0JCQkJICogYXMgdGhlIHByZXZpb3VzIHR1 cGxlLiAgVGhpcyBpcyBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUsCi0JCQkJICogc2luY2Ugb3Ro ZXIgcmVjZW50bHktYWNjZXNzZWQgcGFnZXMgYXJlIHByb2JhYmx5IHN0aWxsIGluCi0JCQkJICog YnVmZmVycyB0b287IGJ1dCBpdCdzIGdvb2QgZW5vdWdoIGZvciB0aGlzIGhldXJpc3RpYy4KLQkJ CQkgKi8KLSNkZWZpbmUgVklTSVRFRF9QQUdFU19MSU1JVCAxMDAKLQotCQkJCWlmIChibG9jayAh PSBsYXN0X2hlYXBfYmxvY2spCi0JCQkJewotCQkJCQlsYXN0X2hlYXBfYmxvY2sgPSBibG9jazsK LQkJCQkJbl92aXNpdGVkX2hlYXBfcGFnZXMrKzsKLQkJCQkJaWYgKG5fdmlzaXRlZF9oZWFwX3Bh Z2VzID4gVklTSVRFRF9QQUdFU19MSU1JVCkKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWNv bnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQkJ CX0KLQotCQkJLyogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgaGVhcCB0dXBsZSBmb3IgYW55 dGhpbmcgKi8KLQkJCUV4ZWNDbGVhclR1cGxlKHRhYmxlc2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBX ZSBkb24ndCBjYXJlIHdoZXRoZXIgdGhlcmUncyBtb3JlIHRoYW4gb25lIHZpc2libGUgdHVwbGUg aW4KLQkJCSAqIHRoZSBIT1QgY2hhaW47IGlmIGFueSBhcmUgdmlzaWJsZSwgdGhhdCdzIGdvb2Qg ZW5vdWdoLgotCQkJICovCi0JCX0KLQotCQkvKgotCQkgKiBXZSBleHBlY3QgdGhhdCB0aGUgaW5k ZXggd2lsbCByZXR1cm4gZGF0YSBpbiBJbmRleFR1cGxlIG5vdAotCQkgKiBIZWFwVHVwbGUgZm9y bWF0LgotCQkgKi8KLQkJaWYgKCFpbmRleF9zY2FuLT54c19pdHVwKQotCQkJZWxvZyhFUlJPUiwg Im5vIGRhdGEgcmV0dXJuZWQgZm9yIGluZGV4LW9ubHkgc2NhbiIpOwotCiAJCS8qCiAJCSAqIFdl IGRvIG5vdCB5ZXQgc3VwcG9ydCByZWNoZWNrIGhlcmUuCiAJCSAqLwotCQlpZiAoaW5kZXhfc2Nh bi0+eHNfcmVjaGVjaykKKwkJaWYgKHJlY2hlY2spCiAJCQlicmVhazsKIAotCQkvKiBPSyB0byBk ZWNvbnN0cnVjdCB0aGUgaW5kZXggdHVwbGUgKi8KLQkJaW5kZXhfZGVmb3JtX3R1cGxlKGluZGV4 X3NjYW4tPnhzX2l0dXAsCi0JCQkJCQkgICBpbmRleF9zY2FuLT54c19pdHVwZGVzYywKLQkJCQkJ CSAgIHZhbHVlcywgaXNudWxsKTsKKwkJLyogUmVhZCB0aGUgaW5kZXgncyBmaXJzdCBjb2x1bW4g dmFsdWUgb3V0IG9mIHRoZSBzbG90ICovCisJCXZhbCA9IHNsb3RfZ2V0YXR0cihzbG90LCAxLCAm aXNudWxsKTsKIAogCQkvKiBTaG91bGRuJ3QgaGF2ZSBnb3QgYSBudWxsLCBidXQgYmUgY2FyZWZ1 bCAqLwotCQlpZiAoaXNudWxsWzBdKQorCQlpZiAoaXNudWxsKQogCQkJZWxvZyhFUlJPUiwgImZv dW5kIHVuZXhwZWN0ZWQgbnVsbCB2YWx1ZSBpbiBpbmRleCBcIiVzXCIiLAogCQkJCSBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShpbmRleFJlbCkpOwogCiAJCS8qIENvcHkgdGhlIGluZGV4IGNvbHVt biB2YWx1ZSBvdXQgdG8gY2FsbGVyJ3MgY29udGV4dCAqLwogCQlvbGRjb250ZXh0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG91dGVyY29udGV4dCk7Ci0JCSplbmRwb2ludERhdHVtID0gZGF0dW1D b3B5KHZhbHVlc1swXSwgdHlwQnlWYWwsIHR5cExlbik7CisJCSplbmRwb2ludERhdHVtID0gZGF0 dW1Db3B5KHZhbCwgdHlwQnlWYWwsIHR5cExlbik7CiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKIAkJaGF2ZV9kYXRhID0gdHJ1ZTsKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHZt YnVmZmVyICE9IEludmFsaWRCdWZmZXIpCi0JCVJlbGVhc2VCdWZmZXIodm1idWZmZXIpOworCUV4 ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CiAJaW5kZXhfZW5kc2NhbihpbmRleF9z Y2FuKTsKIAogCXJldHVybiBoYXZlX2RhdGE7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N0YXRzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHMub3V0 CmluZGV4IGJiYjFkYjNjNC4uZmU2ZjUxYTZhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N0YXRzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRz Lm91dApAQCAtODk3LDYgKzg5Nyw2OCBAQCBTRUxFQ1QgaWR4X3NjYW4sIHN0YXRzX3Jlc2V0IElT IE5PVCBOVUxMIEFTIGhhc19zdGF0c19yZXNldAogICAgICAgICAwIHwgdAogKDEgcm93KQogCist LSBUZXN0IHBnX3N0YXRfYWxsX2luZGV4ZXMuaWR4X3R1cF9yZWFkIGNvdW50ZXIKK0NSRUFURSBU RU1QT1JBUlkgVEFCTEUgdGVzdF9pZHhfdHVwX3JlYWQgQVMKKyAgU0VMRUNUIGcgQVMgYSBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAyMDApIGc7CitDUkVBVEUgSU5ERVggT04gdGVzdF9pZHhfdHVw X3JlYWQoYSk7CitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7CitTRVQgZW5hYmxlX2luZGV4b25s eXNjYW4gPSBvZmY7CistLSBwbGFpbiBpbmRleCBzY2FuCitTRVQgZW5hYmxlX2JpdG1hcHNjYW4g PSBvZmY7CitFWFBMQUlOIChDT1NUUyBvZmYpIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfaWR4 X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFORCAyMDA7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdGVzdF9pZHhfdHVw X3JlYWRfYV9pZHggb24gdGVzdF9pZHhfdHVwX3JlYWQKKyAgICAgICAgIEluZGV4IENvbmQ6ICgo YSA+PSAxKSBBTkQgKGEgPD0gMjAwKSkKKygzIHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9N IHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFORCAyMDA7CisgY291bnQgCist LS0tLS0tCisgICAyMDAKKygxIHJvdykKKworLS0gYml0bWFwIGluZGV4IHNjYW4KK1NFVCBlbmFi bGVfaW5kZXhzY2FuID0gb2ZmOworU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0gb247CitFWFBMQUlO IChDT1NUUyBvZmYpIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJF IGEgQkVUV0VFTiAxIEFORCAyMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgQml0bWFwIEhl YXAgU2NhbiBvbiB0ZXN0X2lkeF90dXBfcmVhZAorICAgICAgICAgUmVjaGVjayBDb25kOiAoKGEg Pj0gMSkgQU5EIChhIDw9IDIwMCkpCisgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24g dGVzdF9pZHhfdHVwX3JlYWRfYV9pZHgKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgoYSA+ PSAxKSBBTkQgKGEgPD0gMjAwKSkKKyg1IHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRl c3RfaWR4X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFORCAyMDA7CisgY291bnQgCistLS0t LS0tCisgICAyMDAKKygxIHJvdykKKworUkVTRVQgZW5hYmxlX3NlcXNjYW47CitSRVNFVCBlbmFi bGVfaW5kZXhvbmx5c2NhbjsKK1JFU0VUIGVuYWJsZV9pbmRleHNjYW47CitSRVNFVCBlbmFibGVf Yml0bWFwc2NhbjsKKy0tIFdlIGV4cGVjdCBhIHRvdGFsIG9mIDQwMCB0dXBsZXMgcmVhZCAoMjAw IGZyb20gcGxhaW4gaW5kZXggc2NhbiwgMjAwIGZyb20KKy0tIGJpdG1hcCBpbmRleCBzY2FuKS4g IEhvd2V2ZXIsIHdlIG9ubHkgZXhwZWN0IDIwMCB0dXBsZSBmZXRjaGVzLCBiZWNhdXNlCistLSBi aXRtYXAgaW5kZXggc2NhbnMvaGVhcCBzY2FucyBkb24ndCBhZmZlY3QgdGhlIHJlbGV2YW50IGNv dW50ZXIuCitTRUxFQ1QgcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CisgcGdfc3RhdF9mb3Jj ZV9uZXh0X2ZsdXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKwor U0VMRUNUIGlkeF90dXBfcmVhZCwgaWR4X3R1cF9mZXRjaCBGUk9NIHBnX3N0YXRfYWxsX2luZGV4 ZXMKKyAgV0hFUkUgaW5kZXhyZWxpZCA9ICd0ZXN0X2lkeF90dXBfcmVhZF9hX2lkeCc6OnJlZ2Ns YXNzOworIGlkeF90dXBfcmVhZCB8IGlkeF90dXBfZmV0Y2ggCistLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICA0MDAgfCAgICAgICAgICAgMjAwCisoMSByb3cpCisKK0RS T1AgVEFCTEUgdGVzdF9pZHhfdHVwX3JlYWQ7CiAtLS0tLQogLS0gVGVzdCByZXNldCBvZiBzb21l IHN0YXRzIGZvciBzaGFyZWQgdGFibGUKIC0tLS0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9zdGF0cy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0cy5zcWwKaW5kZXgg NjEwZmQyMWZhLi45MjNkMmNiYzAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0 YXRzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0cy5zcWwKQEAgLTM5Niw2ICsz OTYsMzUgQEAgU0VMRUNUIHBnX3N0YXRfcmVzZXRfc2luZ2xlX3RhYmxlX2NvdW50ZXJzKCd0ZXN0 X2xhc3Rfc2Nhbl9wa2V5Jzo6cmVnY2xhc3MpOwogU0VMRUNUIGlkeF9zY2FuLCBzdGF0c19yZXNl dCBJUyBOT1QgTlVMTCBBUyBoYXNfc3RhdHNfcmVzZXQKICAgRlJPTSBwZ19zdGF0X2FsbF9pbmRl eGVzIFdIRVJFIGluZGV4cmVsaWQgPSAndGVzdF9sYXN0X3NjYW5fcGtleSc6OnJlZ2NsYXNzOwog CistLSBUZXN0IHBnX3N0YXRfYWxsX2luZGV4ZXMuaWR4X3R1cF9yZWFkIGNvdW50ZXIKK0NSRUFU RSBURU1QT1JBUlkgVEFCTEUgdGVzdF9pZHhfdHVwX3JlYWQgQVMKKyAgU0VMRUNUIGcgQVMgYSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMDApIGc7CitDUkVBVEUgSU5ERVggT04gdGVzdF9pZHhf dHVwX3JlYWQoYSk7CisKK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsKK1NFVCBlbmFibGVfaW5k ZXhvbmx5c2NhbiA9IG9mZjsKKy0tIHBsYWluIGluZGV4IHNjYW4KK1NFVCBlbmFibGVfYml0bWFw c2NhbiA9IG9mZjsKK0VYUExBSU4gKENPU1RTIG9mZikgU0VMRUNUIGNvdW50KCopIEZST00gdGVz dF9pZHhfdHVwX3JlYWQgV0hFUkUgYSBCRVRXRUVOIDEgQU5EIDIwMDsKK1NFTEVDVCBjb3VudCgq KSBGUk9NIHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFORCAyMDA7CistLSBi aXRtYXAgaW5kZXggc2NhbgorU0VUIGVuYWJsZV9pbmRleHNjYW4gPSBvZmY7CitTRVQgZW5hYmxl X2JpdG1hcHNjYW4gPSBvbjsKK0VYUExBSU4gKENPU1RTIG9mZikgU0VMRUNUIGNvdW50KCopIEZS T00gdGVzdF9pZHhfdHVwX3JlYWQgV0hFUkUgYSBCRVRXRUVOIDEgQU5EIDIwMDsKK1NFTEVDVCBj b3VudCgqKSBGUk9NIHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFORCAyMDA7 CitSRVNFVCBlbmFibGVfc2Vxc2NhbjsKK1JFU0VUIGVuYWJsZV9pbmRleG9ubHlzY2FuOworUkVT RVQgZW5hYmxlX2luZGV4c2NhbjsKK1JFU0VUIGVuYWJsZV9iaXRtYXBzY2FuOworCistLSBXZSBl eHBlY3QgYSB0b3RhbCBvZiA0MDAgdHVwbGVzIHJlYWQgKDIwMCBmcm9tIHBsYWluIGluZGV4IHNj YW4sIDIwMCBmcm9tCistLSBiaXRtYXAgaW5kZXggc2NhbikuICBIb3dldmVyLCB3ZSBvbmx5IGV4 cGVjdCAyMDAgdHVwbGUgZmV0Y2hlcywgYmVjYXVzZQorLS0gYml0bWFwIGluZGV4IHNjYW5zL2hl YXAgc2NhbnMgZG9uJ3QgYWZmZWN0IHRoZSByZWxldmFudCBjb3VudGVyLgorU0VMRUNUIHBnX3N0 YXRfZm9yY2VfbmV4dF9mbHVzaCgpOworU0VMRUNUIGlkeF90dXBfcmVhZCwgaWR4X3R1cF9mZXRj aCBGUk9NIHBnX3N0YXRfYWxsX2luZGV4ZXMKKyAgV0hFUkUgaW5kZXhyZWxpZCA9ICd0ZXN0X2lk eF90dXBfcmVhZF9hX2lkeCc6OnJlZ2NsYXNzOworRFJPUCBUQUJMRSB0ZXN0X2lkeF90dXBfcmVh ZDsKKwogLS0tLS0KIC0tIFRlc3QgcmVzZXQgb2Ygc29tZSBzdGF0cyBmb3Igc2hhcmVkIHRhYmxl CiAtLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA4Y2Y0MGM4NzAuLmY1ZjcxNDkz NCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEzMzMsNyArMTMzMyw2IEBAIEluZGV4 RGVsZXRlUHJlZmV0Y2hTdGF0ZQogSW5kZXhEb0NoZWNrQ2FsbGJhY2sKIEluZGV4RWxlbQogSW5k ZXhGZXRjaEhlYXBEYXRhCi1JbmRleEZldGNoVGFibGVEYXRhCiBJbmRleEluZm8KIEluZGV4TGlz dAogSW5kZXhPbmx5U2NhbgotLSAKMi41My4wCgo= --0000000000000468e006539f51e8 Content-Type: application/octet-stream; name="v26-0006-heapam-Add-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v26-0006-heapam-Add-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq31b3ee4 RnJvbSAyMTFlNmNhYWZlODk4MTZjNWE5YmM1ODU3OTFkZTMzOGYyMmFkZjdhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NTg6MDkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNiA2LzldIGhl YXBhbTogQWRkIGluZGV4IHNjYW4gSS9PIHByZWZldGNoaW5nLgoKVGhpcyBjb21taXQgaW1wbGVt ZW50cyBJL08gcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIChhbmQgaW5kZXgtb25seQpzY2Fu cyB0aGF0IHJlcXVpcmUgaGVhcCBmZXRjaGVzKS4gVGhpcyB3YXMgbWFkZSBwb3NzaWJsZSBieSB0 aGUgcmVjZW50CmFkZGl0aW9uIG9mIGJhdGNoaW5nIGludGVyZmFjZXMgdG8gYm90aCB0aGUgdGFi bGUgQU0gYW5kIGluZGV4IEFNIEFQSXMuCgpUaGUgYW1nZXRiYXRjaCBpbmRleCBBTSBpbnRlcmZh Y2UgcHJvdmlkZXMgYmF0Y2hlcyBvZiBtYXRjaGluZyBUSURzCihyYXRoZXIgdGhhbiBvbmUgdHVw bGUgYXQgYSB0aW1lKSwgZWFjaCBvZiB3aGljaCBtdXN0IGJlIHRha2VuIGZyb20KaW5kZXggdHVw bGVzIHRoYXQgYXBwZWFyIHRvZ2V0aGVyIG9uIGEgc2luZ2xlIGluZGV4IHBhZ2UuICBUaGlzIGFs bG93cwptdWx0aXBsZSBiYXRjaGVzIHRvIGJlIGhlbGQgb3BlbiBzaW11bHRhbmVvdXNseS4gIEdp dmluZyB0aGUgdGFibGUgQU0gYW4KZXhwbGljaXQgdW5kZXJzdGFuZGluZyBvZiBpbmRleCBBTSBj b25jZXB0cy9pbmRleCBwYWdlIGJvdW5kYXJpZXMgYWxsb3dzCml0IHRvIGNvbnNpZGVyIGFsbCBv ZiB0aGUgcmVsZXZhbnQgY29zdHMgYW5kIGJlbmVmaXRzLgoKUHJlZmV0Y2hpbmcgaXMgaW1wbGVt ZW50ZWQgdXNpbmcgYSBwcmVmZXRjaGluZyBwb3NpdGlvbiB1bmRlciB0aGUKY29udHJvbCBvZiB0 aGUgdGFibGUgQU0uICBUaGlzIGlzIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgc2NhbiBwb3NpdGlv bgphZGRlZCBieSBjb21taXQgRklYTUUsIHdoaWNoIGludHJvZHVjZWQgdGhlIGFtZ2V0YmF0Y2gg aW50ZXJmYWNlLiAgQQpyZWFkIHN0cmVhbSBjYWxsYmFjayBhZHZhbmNlcyB0aGUgcmVhZCBzdHJl YW0gYXMgbmVlZGVkIHRvIHByb3ZpZGUKc3VmZmljaWVudGx5IG1hbnkgaGVhcCBibG9jayBudW1i ZXJzIHRvIG1haW50YWluIHRoZSByZWFkIHN0cmVhbSdzCnRhcmdldCBwcmVmZXRjaCBkaXN0YW5j ZS4KClRlc3RpbmcgaGFzIHNob3duIHRoYXQgaW5kZXggcHJlZmV0Y2hpbmcgY2FuIG1ha2UgaW5k ZXggc2NhbnMgbXVjaApmYXN0ZXIuICBMYXJnZSByYW5nZSBzY2FucyB0aGF0IHJldHVybiBtYW55 IHR1cGxlcyBjYW4gYmUgYXMgbXVjaCBhcyAzMHgKZmFzdGVyIHdpdGggbG9jYWwgU1NEcyB3aGVu IGJ1ZmZlcmVkIEkvTyBpcyB1c2VkLCBhbmQgNTB4IGZhc3RlciBvciBtb3JlCndpdGggaGlnaGVy LWxhdGVuY3kgc3RvcmFnZSBzdWNoIGFzIG5ldHdvcmstYXR0YWNoZWQgYmxvY2sgZGV2aWNlcywK d2hlcmUgdGhlIGJlbmVmaXQgb2YgaGlkaW5nIEkvTyBsYXRlbmN5IHRocm91Z2ggcHJlZmV0Y2hp bmcgaXMgZXZlbgpncmVhdGVyLgoKQSBuZXcgR1VDIChlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNo KSBjb250cm9scyB0aGUgdXNlIG9mIGluZGV4CnByZWZldGNoaW5nLiAgVGhlIGRlZmF1bHQgc2V0 dGluZyBpcyAnb24nLCBzbyBhbGwgcGxhaW4gaW5kZXggc2NhbnMgdXNlCnByZWZldGNoaW5nIHdo ZXJlIHN1cHBvcnQgZXhpc3RzLiAgQWxsIGluZGV4LW9ubHkgc2NhbnMgd2lsbCBhbHNvIHVzZQpw cmVmZXRjaGluZyBhdXRvbWF0aWNhbGx5IHdoZXJlIHN1cHBvcnRlZCAob25jZSB0aGUgc2NhbiBz dGFydHMgdG8KcmVxdWlyZSBhIHNpZ25pZmljYW50IG51bWJlciBvZiBoZWFwIGZldGNoZXMpLgoK QW4gaW1wb3J0YW50IGdvYWwgb2YgdGhlIGFtZ2V0YmF0Y2ggZGVzaWduIGlzIHRvIGVuYWJsZSB0 aGUgdGFibGUgQU0ncwpyZWFkIHN0cmVhbSBjYWxsYmFjayB0byBhZHZhbmNlIGl0cyBwcmVmZXRj aCBwb3NpdGlvbiB1c2luZyBUSURzIHRoYXQKYXBwZWFyIG9uIGEgbGVhZiBwYWdlIHRoYXQncyBh aGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgbGVhZgpwYWdlLiAgVGhpcyBpcyBj cnVjaWFsIHdpdGggc2NhbnMgb2YgaW5kZXhlcyB3aGVyZSBlYWNoIGxlYWYgcGFnZQpoYXBwZW5z IHRvIGhhdmUgcmVsYXRpdmVseSBmZXcgZGlzdGluY3QgaGVhcCBibG9ja3MgYW1vbmcgaXRzIG1h dGNoaW5nClRJRHMgKGFzIHdlbGwgYXMgd2l0aCBzY2FucyB3aXRoIGxlYWYgcGFnZXMgdGhhdCBo YXZlIHJlbGF0aXZlbHkgZmV3CnRvdGFsIG1hdGNoaW5nIGl0ZW1zKS4gIEluZGV4IHNjYW5zIGNh biBoYXZlIGFzIG1hbnkgYXMgNjQgb3BlbiBiYXRjaGVzLAp3aGljaCB0ZXN0aW5nIGhhcyBzaG93 biB0byBiZSBhYm91dCB0aGUgbWF4aW11bSBudW1iZXIgdGhhdCBjYW4gZXZlciBiZQp1c2VmdWwu ICBCYXRjaGVzIGFyZSBtYWludGFpbmVkIGluIHNjYW4gb3JkZXIgdXNpbmcgYSBzaW1wbGUgcmlu ZyBidWZmZXIKZGF0YSBzdHJ1Y3R1cmUuCgpJbiByYXJlIGNhc2VzIHdoZXJlIHRoZSBzY2FuIGV4 Y2VlZHMgdGhpcyBxdWFzaS1hcmJpdHJhcnkgbGltaXQgb2YgNjQsCnRoZSByZWFkIHN0cmVhbSBp cyB0ZW1wb3JhcmlseSBwYXVzZWQgdXNpbmcgdGhlIHJlYWQgc3RyZWFtIHBhdXNpbmcKbWVjaGFu aXNtIGFkZGVkIGJ5IGNvbW1pdCAzODIyOWNiOS4gIFByZWZldGNoaW5nICh2aWEgdGhlIHJlYWQg c3RyZWFtKQppcyByZXN1bWVkIG9ubHkgYWZ0ZXIgdGhlIHNjYW4gcG9zaXRpb24gYWR2YW5jZXMg YmV5b25kIGl0cyBjdXJyZW50IG9wZW4KYmF0Y2ggYW5kIHRoZW4gZnJlZXMgYW5kIHJlbW92ZXMg dGhlIGJhdGNoIGZyb20gdGhlIHNjYW4ncyBiYXRjaCByaW5nCmJ1ZmZlci4gIFRlc3RpbmcgaGFz IHNob3duIHRoYXQgaXQgaXNuJ3QgdmVyeSBjb21tb24gZm9yIHNjYW5zIHRvIGhvbGQKb3BlbiBt b3JlIHRoYW4gYWJvdXQgMTAgYmF0Y2hlcyB0byBnZXQgdGhlIGRlc2lyZWQgSS9PIHByZWZldGNo CmRpc3RhbmNlLgoKVGhlIGhldXJpc3RpYyB1c2VkIHRvIGRlY2lkZSB3aGVuIHRvIGJlZ2luIHBy ZWZldGNoaW5nIGRlbGF5cwppbml0aWFsaXphdGlvbiBvZiB0aGUgc2NhbidzIHJlYWQgc3RyZWFt IHVudGlsIHRoZSBzY2FuIHRyYW5zaXRpb25zIGZyb20KaXRzIGZpcnN0IGJhdGNoIHRvIGl0cyBz ZWNvbmQgYmF0Y2guICBFYWNoIGJhdGNoIGNvcnJlc3BvbmRzIHRvIG1hdGNoaW5nClRJRHMgZnJv bSBhIHNpbmdsZSBpbmRleCBsZWFmIHBhZ2UsIHNvIHByZWZldGNoaW5nIG9ubHkgYmVnaW5zIG9u Y2UgdGhlCnNjYW4gcmVhZHMgZnJvbSBpdHMgc2Vjb25kIGxlYWYgcGFnZSBjb250YWluaW5nIGF0 IGxlYXN0IG9uZSBtYXRjaGluZwppdGVtLiAgQSBzZWxlY3RpdmUgaW5kZXggc2NhbiB0aGF0IHRv dWNoZXMgb25seSBvbmUgbGVhZiBwYWdlIG5ldmVyCnJlYWNoZXMgdGhlIHNlY29uZCBiYXRjaCwg c28gdGhlIGhldXJpc3RpYyBjb3JyZWN0bHkgYXZvaWRzIHByZWZldGNoaW5nCm92ZXJoZWFkLiAg VGhlIHBpY3R1cmUgZm9yIG1vcmUgY29tcGxpY2F0ZWQgY2FzZXMgaXMgbWl4ZWQuCgpUaGUgc2Ft ZSBwcmluY2lwbGUgYXBwbGllcyB0byBuZXN0bG9vcCBpbm5lciBpbmRleCBzY2FucyB3aXRoIHZl cnkgdGlnaHQKbGltaXRzIChlLmcuLCBhIGNvcnJlbGF0ZWQgc3VicXVlcnkgd2l0aCBMSU1JVCAx KSwgd2hlcmUgZWFjaCByZXNjYW4KcmVhZHMgZnJvbSBvbmx5IGEgc2luZ2xlIGxlYWYgcGFnZTog dGhlIGhldXJpc3RpYyBhdm9pZHMgdGhlIGNvc3Qgb2YKcmVwZWF0ZWRseSByZXNldHRpbmcgYSBy ZWFkIHN0cmVhbSBhY3Jvc3MgbWFueSByZXNjYW5zLiAgT24gdGhlIG90aGVyCmhhbmQsIHNvbWUg c2VsZWN0aXZlIHNjYW5zIHRoYXQgYWNjZXNzIHJhbmRvbWx5LW9yZGVyZWQgaGVhcCBwYWdlcyB3 b3VsZApnZW51aW5lbHkgYmVuZWZpdCBmcm9tIHByZWZldGNoaW5nLCBidXQgbmV2ZXIgZ2V0IGFz IGZhciBhcyByZWFjaGluZwp0aGVpciBzZWNvbmQgYmF0Y2ggLS0gYSBtaXNzZWQgb3Bwb3J0dW5p dHksIHdoZXJlIHRoZSBoZXVyaXN0aWMgaXMKb3Zlcmx5IGNhdXRpb3VzLgoKQ29udmVyc2VseSwg dGhlIGhldXJpc3RpYyBpcyBub3QgY2F1dGlvdXMgZW5vdWdoIHdpdGggc2xpZ2h0bHkgbGVzcwpz ZWxlY3RpdmUgbmVzdGxvb3AgaW5uZXIgc2NhbnMgKGUuZy4sIExJTUlUIDMgd2l0aGluIGEgTEFU RVJBTCBqb2luKS4KVGhlc2UgcmVzY2FucyBtYXkgc3BhbiB0d28gbGVhZiBwYWdlcywganVzdCBi YXJlbHkgY3Jvc3NpbmcgdGhlCnNlY29uZC1iYXRjaCB0aHJlc2hvbGQsIHdoaWxlIHN0aWxsIG9u bHkgbmVlZGluZyB0byBmZXRjaCB0d28gb3IgdGhyZWUKaGVhcCBwYWdlcyAtLSBub3QgZW5vdWdo IGZvciBwcmVmZXRjaGluZyB0byByZWFsaXN0aWNhbGx5IGhlbHAgb3IgcGF5CmZvciBpdHNlbGYg b24gYW55IGluZGl2aWR1YWwgcmVzY2FuLiAgU3VjaCBxdWVyaWVzIGFyZSByZWdyZXNzZWQgYnkg dGhlCndvcmsgZnJvbSB0aGlzIGNvbW1pdCAocmVsYXRpdmUgdG8gUG9zdGdyZVNRTCAxOCksIHRo b3VnaCBvbmx5IHdoZW4gdGhlCnNjYW4gaGFzIHRvIHJlYWQgaGVhcCBwYWdlcyBmcm9tIHN0b3Jh Z2UuCgpBZGRpbmcgYSBzbWFydGVyIGhldXJpc3RpYyB0aGF0IGFkZHJlc3NlcyBib3RoIHNob3J0 Y29taW5ncyByZW1haW5zIGFzCndvcmsgZm9yIGEgZnV0dXJlIHJlbGVhc2UuICBQYXNzaW5nIGRv d24gYW4gRXhlY1NldFR1cGxlQm91bmQgc3R5bGUgaGludAphbmQgdXNpbmcgdGhhdCBoaW50IHRv IGluZmx1ZW5jZSBob3cgdGhlIHJlYWQgc3RyZWFtIHJhbXBzIHVwIGl0cwpkaXN0YW5jZSBzZWVt cyBsaWtlIGEgcHJvbWlzaW5nIGFwcHJvYWNoLgoKQXV0aG9yOiBUb21hcyBWb25kcmEgPHRvbWFz QHZvbmRyYS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2Vk LWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLWJ5OiBUaG9t YXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9z dGdyLmVzL20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRlYmFiQGVudGVycHJpc2Vk Yi5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAg fCAgMTMgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaCAgICAgICAgICAgICAgIHwg ICA5ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAgICAgICAgICAgICAgICAgfCAg NDIgKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgICAgfCA1MDgg KysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5j ICAgICAgICAgfCAgMzYgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRh dCAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2Ft cGxlIHwgICAxICsKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAg ICB8ICAxNiArCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAgICAgICAgICAgICAgICAg fCAgODkgKystCiBkb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sICAgICAgICAgICAgICAgICAgICAg fCAgIDggKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgICAgICAgIHwg ICAzICstCiAxMyBmaWxlcyBjaGFuZ2VkLCA3MTggaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IGFiZWY2MTYwNy4uNmEwYjZlYjgxIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbS5oCkBAIC0xMzUsNiArMTM1LDE5IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFw RGF0YQogCS8qIFBsYWluIGluZGV4IHNjYW4geHNfbGFzdGluYmxvY2sgb3B0aW1pemF0aW9uICov CiAJYm9vbAkJeHNfbGFzdGluYmxvY2s7IC8qIGxhc3QgVElEIG9uIHRoaXMgYmxvY2sgaW4gY3Vy cmVudCBiYXRjaD8gKi8KIAorCS8qCisJICogUmVhZCBzdHJlYW0gc3RhdGUgZm9yIHByZWZldGNo aW5nIChvbmx5IHVzZWQgZHVyaW5nIGFtZ2V0YmF0Y2ggc2NhbnMpLgorCSAqCisJICogVGhlIHJl YWQgc3RyZWFtIG1vdmVzIGFoZWFkIG9mIHRoZSBzY2FuJ3MgY3VycmVudCBwb3NpdGlvbiB1c2lu ZyBpdHMKKwkgKiBvd24gcHJlZmV0Y2hpbmcgcG9zaXRpb24gKHBlciBjb252ZW50aW9ucyBzdXBw b3J0ZWQgYnkgaW5kZXhiYXRjaC5jKS4KKwkgKiBUaGUgcmVhZCBzdHJlYW0gaXMgYWxsb2NhdGVk IGVhcmx5IGluIHRoZSBzY2FuLCBhbmQgcmVzZXQgb24gcmVzY2FuCisJICogKGFuZCB3aGVuIHRo ZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzKS4KKwkgKi8KKwlib29sCQl4c19wYXVzZWQ7CQkvKiBw YXVzZWQgdW50aWwgbmV4dCBiYXRjaCBpcyByZWFkPyAqLworCVNjYW5EaXJlY3Rpb24geHNfcmVh ZF9zdHJlYW1fZGlyOwkvKiBpbmRleCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVtYmVyIHhz X3ByZWZldGNoX2Jsb2NrOwkvKiBsYXN0IGJsb2NrIHJldHVybmVkIHRvIHhzX3JlYWRfc3RyZWFt ICovCisJUmVhZFN0cmVhbSAqeHNfcmVhZF9zdHJlYW07IC8qIHByZWZldGNoaW5nIHJlYWQgc3Ry ZWFtICovCisKIAkvKiBQZXItdHVwbGUgY29udGV4dCBmb3IgcGFkZGluZyAibmFtZSIgY29sdW1u cyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyAqLwogCU1lbW9yeUNvbnRleHQgeHNfaXR1cF9jeHQ7 CiB9IEluZGV4RmV0Y2hIZWFwRGF0YTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9p bmRleGJhdGNoLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oCmluZGV4IDM0ODQx MGI1OC4uYWZmMjMxZWQ1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRj aC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKQEAgLTQ0LDYgKzQ0LDcg QEAgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAlBc3Nl cnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAK IAlzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvcy52YWxpZCA9IGZhbHNlOworCXNjYW4tPmJhdGNo cmluZ2J1Zi5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOwogCXNjYW4tPmJhdGNocmluZ2J1Zi5t YXJrUG9zLnZhbGlkID0gZmFsc2U7CiAKIAlzY2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNoID0g TlVMTDsKQEAgLTY1LDE2ICs2NiwxNiBAQCBleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfdW5ndWFy ZF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogLyoKICAq IEZldGNoIHRoZSBuZXh0IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1zIGZvciB0aGUgc2NhbiAob3Ig dGhlIGZpcnN0KS4KICAqCi0gKiBDYWxsZWQgd2hlbiBjYWxsZXIncyBjdXJyZW50IGJhdGNoIChw YXNzZWQgdG8gdXMgYXMgcHJpb3JCYXRjaCkgaGFzIG5vIG1vcmUKLSAqIG1hdGNoaW5nIGl0ZW1z IGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4gIENhbGxlciBwYXNzZXMgYSBOVUxMCi0gKiBw cmlvckJhdGNoIG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBzY2FuLgorICogQ2FsbGVk IHdoZW4gY2FsbGVyJ3MgY3VycmVudCBzY2FuQmF0Y2gvcHJlZmV0Y2hCYXRjaCAocGFzc2VkIHRv IHVzIGFzCisgKiBwcmlvckJhdGNoKSBoYXMgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBpbiB0aGUg Z2l2ZW4gc2NhbiBkaXJlY3Rpb24uICBDYWxsZXIKKyAqIHBhc3NlcyBhIE5VTEwgcHJpb3JCYXRj aCBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlIGZvciB0aGUgc2Nhbi4KICAqCiAgKiBSZXR1cm5zIHRo ZSBuZXh0IGJhdGNoIHRvIGJlIHByb2Nlc3NlZCBieSBjYWxsZXIgaW4gdGhlIGdpdmVuIHNjYW4K ICAqIGRpcmVjdGlvbiwgb3IgTlVMTCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoZXMgaW4g dGhhdCBkaXJlY3Rpb24uCiAgKgogICogVGhpcyBpcyB3aGVyZSBiYXRjaGVzIGFyZSBhcHBlbmRl ZCB0byB0aGUgc2NhbidzIHJpbmcgYnVmZmVyLiAgV2UgZG9uJ3QKICAqIGZyZWUgYW55IGJhdGNo ZXMgaGVyZSwgdGhvdWdoOyB0aGF0IGlzIGxlZnQgdXAgdG8gdGhlIGNhbGxlci4gIFRoZSBjYWxs ZXIKLSAqIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGFkdmFuY2luZyB0aGVpciBwb3NpdGlvbi4K KyAqIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGFkdmFuY2luZyB0aGVpciBzY2FuUG9zL3ByZWZl dGNoUG9zIHBvc2l0aW9uLgogICovCiBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUg SW5kZXhTY2FuQmF0Y2gKIHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCBk YjU2NjA1YjYuLmJlMzlhMzFkZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNj YW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0yMjEsNiArMjIxLDEw IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQogCSAqIFRoaXMgYWxsb3dzIHRh YmxlIEFNcyB0byBhdm9pZCByZWR1bmRhbnQgYW1nZXRiYXRjaCBjYWxscyB3aXRoIHRoZSBzYW1l CiAJICogcHJpb3JiYXRjaCAtLSB0aGUgaW5kZXggQU0gbWlnaHQgbmVlZCB0byByZWFkIGFkZGl0 aW9uYWwgaW5kZXggcGFnZXMgdG8KIAkgKiBkZXRlcm1pbmUgdGhlcmUgYXJlIG5vIG1vcmUgbWF0 Y2hpbmcgaXRlbXMgYmV5b25kIGNhbGxlcidzIHByaW9yYmF0Y2guCisJICogSW4gcGFydGljdWxh ciwgZHVyaW5nIHByZWZldGNoaW5nIHRoZSByZWFkIHN0cmVhbSBjYWxsYmFjayBkaXNjb3ZlcnMK KwkgKiB0aGUgZW5kLW9mLXNjYW4gdmlhIHByZWZldGNoQmF0Y2guICB0YWJsZWFtX3V0aWxfZmV0 Y2hfbmV4dF9iYXRjaCgpCisJICogY2hlY2tzIHRoZXNlIGZsYWdzIHNvIHRoYXQgdGhlIHNjYW4g c2lkZSBkb2Vzbid0IHJlcGVhdCB0aGUgc2FtZQorCSAqIGFtZ2V0YmF0Y2ggY2FsbCB3aGVuIGl0 IGxhdGVyIHJlYWNoZXMgdGhhdCBiYXRjaCBhcyBzY2FuQmF0Y2guCiAJICovCiAJYm9vbAkJa25v d25FbmRCYWNrd2FyZDsKIAlib29sCQlrbm93bkVuZEZvcndhcmQ7CkBAIC0yNzEsMTEgKzI3NSwx NCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOwog ICogY3VycmVudCByZWFkIHBvc2l0aW9uIGJ5IF9tdWx0aXBsZV8gYmF0Y2hlcy9pbmRleCBwYWdl cy4gIFRoZSBmdXJ0aGVyIG91dAogICogdGhlIHRhYmxlIEFNIHJlYWRzIGFoZWFkIGxpa2UgdGhp cywgdGhlIGZ1cnRoZXIgaXQgY2FuIHNlZSBpbnRvIHRoZSBmdXR1cmUuCiAgKiBUaGF0IHdheSB0 aGUgdGFibGUgQU0gaXMgYWJsZSB0byByZW9yZGVyIHdvcmsgYXMgYWdncmVzc2l2ZWx5IGFzIGRl c2lyZWQuCisgKiBJbmRleCBzY2FucyBzb21ldGltZXMgbmVlZCB0byByZWFkYWhlYWQgYnkgc2V2 ZXJhbCBkb3plbiBiYXRjaGVzIGluIG9yZGVyCisgKiB0byBtYWludGFpbiBhbiBvcHRpbWFsIEkv TyBwcmVmZXRjaCBkaXN0YW5jZSAoZm9yIHJlYWRpbmcgdGFibGUgYmxvY2tzKS4KICAqLwogdHlw ZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5nQnVmZmVyCiB7CiAJLyogY3VycmVudCBwb3NpdGlvbnMgaW4g SW5kZXhTY2FuRGVzY0RhdGEuYmF0Y2hidWZbXSBmb3Igc2NhbiAqLwogCUJhdGNoUmluZ0l0ZW1Q b3Mgc2NhblBvczsJLyogc2NhbidzIHJlYWQgcG9zaXRpb24gKi8KKwlCYXRjaFJpbmdJdGVtUG9z IHByZWZldGNoUG9zOwkvKiBwcmVmZXRjaGluZyBwb3NpdGlvbiAqLwogCUJhdGNoUmluZ0l0ZW1Q b3MgbWFya1BvczsJLyogbWFyay9yZXN0b3JlIHBvc2l0aW9uICovCiAKIAkvKiBtYXJrUG9zJ3Mg YmF0Y2ggKG5vdCBpbiByaW5nIGJ1ZmZlciB3aGVuIG1hcmtCYXRjaCAhPSBzY2FuQmF0Y2gpICov CkBAIC01NzgsNiArNTg1LDQxIEBAIGluZGV4X3NjYW5fYmF0Y2hfaW5kZXhfb3BhcXVlX2R5bihJ bmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiAJCU1BWEFMSUdO KHNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9keW4pOwogfQogCisvKgorICogQ29tcGFyZSB0d28g YmF0Y2ggcmluZyBwb3NpdGlvbnMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLgorICoKKyAq IFJldHVybnMgbmVnYXRpdmUgaWYgcG9zMSBpcyBiZWhpbmQgcG9zMiwgMCBpZiBlcXVhbCwgcG9z aXRpdmUgaWYgcG9zMSBpcworICogYWhlYWQgb2YgcG9zMi4KKyAqLworc3RhdGljIGlubGluZSBp bnQKK2luZGV4X3NjYW5fcG9zX2NtcChCYXRjaFJpbmdJdGVtUG9zICpwb3MxLCBCYXRjaFJpbmdJ dGVtUG9zICpwb3MyLAorCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWludDgJ CWJhdGNoZGlmZjsKKworCUFzc2VydChwb3MxLT52YWxpZCAmJiBwb3MyLT52YWxpZCk7CisKKwli YXRjaGRpZmYgPSAoaW50OCkgKHBvczEtPmJhdGNoIC0gcG9zMi0+YmF0Y2gpOworCisJQXNzZXJ0 KGJhdGNoZGlmZiA+IC1JTkRFWF9TQ0FOX01BWF9CQVRDSEVTICYmCisJCSAgIGJhdGNoZGlmZiA8 IElOREVYX1NDQU5fTUFYX0JBVENIRVMpOworCisJaWYgKGJhdGNoZGlmZiAhPSAwKQorCXsKKwkJ LyogUmVzb2x2ZSBjb21wYXJpc29uIHVzaW5nIGRpZmZlcmluZyBiYXRjaCBvZmZzZXRzICovCisJ CXJldHVybiBiYXRjaGRpZmY7CisJfQorCisJLyoKKwkgKiBSZXNvbHZlIGNvbXBhcmlzb24gdXNp bmcgaXRlbXNbXS13aXNlIGluZGV4ZXMgZnJvbSBjYWxsZXIncyBwb3NpdGlvbnMsCisJICogc2lu Y2UgYm90aCBwb3NpdGlvbnMgcG9pbnQgdG8gdGhlIHNhbWUgcmluZyBidWZmZXIgYmF0Y2gKKwkg Ki8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQlyZXR1cm4gcG9z MS0+aXRlbSAtIHBvczItPml0ZW07CisJZWxzZQorCQlyZXR1cm4gcG9zMi0+aXRlbSAtIHBvczEt Pml0ZW07Cit9CisKIC8qCiAgKiBBZHZhbmNlIHBvc2l0aW9uIHRvIGl0cyBuZXh0IGl0ZW0gaW4g dGhlIGJhdGNoLgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0Lmgg Yi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCmluZGV4IGYyZmQ1ZDMxNS4uNDE5MzAwYTZi IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNs dWRlL29wdGltaXplci9jb3N0LmgKQEAgLTUyLDYgKzUyLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JU IGludCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOwogZXh0ZXJuIFBHRExMSU1QT1JU IGJvb2wgZW5hYmxlX3NlcXNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5k ZXhzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4b25seXNjYW47Citl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoOwogZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2JpdG1hcHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQg Ym9vbCBlbmFibGVfdGlkc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zb3J0 OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCmluZGV4IDczZThj ZmY3OC4uMjVhYWM1ZGY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIK ICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5 bWFwLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNsdWRlICJzdG9yYWdlL3By ZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMv bWVtdXRpbHMuaCIKQEAgLTkzLDYgKzk0LDE1IEBAIHN0YXRpYyB2b2lkIGhlYXBhbV9pbmRleF9i YXRjaF9wb3NfdmlzaWJpbGl0eShJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCSAgSW5k ZXhTY2FuQmF0Y2ggYmF0Y2gsCiAJCQkJCQkJCQkJCSAgSGVhcEJhdGNoRGF0YSAqaGJhdGNoLAog CQkJCQkJCQkJCQkgIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcyk7CitzdGF0aWMgcGdfbm9pbmxpbmUg dm9pZCBoZWFwYW1faW5kZXhfZGlyY2hhbmdlX3Jlc2V0KEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNj YW4sCisJCQkJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJ CSBCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1Zik7CitzdGF0aWMgcGdfYXR0cmlidXRlX2Fs d2F5c19pbmxpbmUgdm9pZCBoZWFwYW1faW5kZXhfY29uc2lkZXJfcHJlZmV0Y2hpbmcoSW5kZXhT Y2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCQkJCQkJIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNj YW4sCisJCQkJCQkJCQkJCQkJCQkJCQkgYm9vbCBoYWRFeGlzdGluZ1NjYW5CYXRjaCk7CitzdGF0 aWMgQmxvY2tOdW1iZXIgaGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2soUmVhZFN0cmVh bSAqc3RyZWFtLAorCQkJCQkJCQkJCQkJCXZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJ CQkJCQkJCQkJCQl2b2lkICpwZXJfYnVmZmVyX2RhdGEpOwogCiAvKgogICogU2ltcGxlLCBzaW5n bGUtc2hvdCBUSUQgbG9va3VwIGZvciBjb25zdHJhaW50IGVuZm9yY2VtZW50IGNvZGUgKHVuaXF1 ZQpAQCAtMTYwLDYgKzE3MCwxMCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4oSW5kZXhTY2Fu RGVzYyBzY2FuLCB1aW50MzIgZmxhZ3MpCiAJLyogeHNfbGFzdGluYmxvY2sgb3B0aW1pemF0aW9u IHN0YXRlICovCiAJQXNzZXJ0KCFoc2Nhbi0+eHNfbGFzdGluYmxvY2spOwogCisJLyogUmVhZCBz dHJlYW0gc3RhdGUgKG90aGVyIGZpZWxkcyBpbml0aWFsaXplZCBieSBjYWxsYmFjaykgKi8KKwlB c3NlcnQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9PSBOb01vdmVtZW50U2NhbkRpcmVjdGlv bik7CisJQXNzZXJ0KGhzY2FuLT54c19yZWFkX3N0cmVhbSA9PSBOVUxMKTsKKwogCS8qIFJlc29s dmUgd2hpY2ggeHNfZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9uIHRvIHVzZSBmb3IgdGhpcyBz Y2FuICovCiAJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9 IE5VTEwpCiAJewpAQCAtMjM3LDYgKzI1MSwxNSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQo SW5kZXhTY2FuRGVzYyBzY2FuKQogCS8qIFJlc2NhbnMgc2hvdWxkIGF2b2lkIGFuIGV4Y2Vzc2l2 ZSBudW1iZXIgb2YgVk0gbG9va3VwcyAqLwogCWhzY2FuLT54c192bV9pdGVtcyA9IDE7CiAKKwkv KiBEZWZlbnNpdmVseSBkbyBhbiB1bmNvbmRpdGlvbmFsIHJlYWQgc3RyZWFtIGRpcmVjdGlvbiBy ZXNldCAqLworCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPSBOb01vdmVtZW50U2NhbkRpcmVj dGlvbjsKKworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJeworCQloc2Nhbi0+eHNfcGF1 c2VkID0gZmFsc2U7CisJCXJlYWRfc3RyZWFtX3Jlc2V0KGhzY2FuLT54c19yZWFkX3N0cmVhbSk7 CisJfQorCiAJLyogUmVzZXQgYmF0Y2ggcmluZyBidWZmZXIgc3RhdGUgKi8KIAlpZiAoc2Nhbi0+ dXNlYmF0Y2hyaW5nKQogCQl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4sIGZhbHNl KTsKQEAgLTI2MSw2ICsyODQsOSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4U2NhbkRl c2Mgc2NhbikKIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIpKQogCQlSZWxl YXNlQnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7CiAKKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3Ry ZWFtKQorCQlyZWFkX3N0cmVhbV9lbmQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwogCS8qIEZy ZWUgdGhlIGluZGV4LW9ubHkgc2NhbiBuYW1lLWNvbHVtbiBjb250ZXh0LCBpZiBhbnkgKi8KIAlp ZiAoaHNjYW4tPnhzX2l0dXBfY3h0KQogCQlNZW1vcnlDb250ZXh0RGVsZXRlKGhzY2FuLT54c19p dHVwX2N4dCk7CkBAIC0yODksOCArMzE1LDE2IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9tYXJrcG9z KEluZGV4U2NhbkRlc2Mgc2NhbikKIHZvaWQKIGhlYXBhbV9pbmRleF9mZXRjaF9yZXN0cnBvcyhJ bmRleFNjYW5EZXNjIHNjYW4pCiB7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRl eEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOworCiAJQXNzZXJ0KHNjYW4tPnVz ZWJhdGNocmluZyk7CiAKKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCXsKKwkJaHNjYW4t PnhzX3BhdXNlZCA9IGZhbHNlOworCQlyZWFkX3N0cmVhbV9yZXNldChoc2Nhbi0+eHNfcmVhZF9z dHJlYW0pOworCX0KKwogCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3Moc2Nhbik7 CiB9CiAKQEAgLTgyNyw3ICs4NjEsMTQgQEAgaGVhcGFtX2luZGV4X2hlYXBfZmV0Y2goSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAogCQlpZiAoQnVmZmVySXNW YWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsK IAotCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIocmVsLCBoc2Nhbi0+eHNfYmxrKTsKKwkJ LyoKKwkJICogV2hlbiB1c2luZyBhIHJlYWQgc3RyZWFtLCB0aGUgc3RyZWFtIHdpbGwgYWxyZWFk eSBrbm93IHdoaWNoIGJsb2NrCisJCSAqIG51bWJlciBjb21lcyBuZXh0ICh0aG91Z2ggYW4gYXNz ZXJ0aW9uIHdpbGwgdmVyaWZ5IGEgbWF0Y2ggYmVsb3cpCisJCSAqLworCQlpZiAoaHNjYW4tPnhz X3JlYWRfc3RyZWFtKQorCQkJaHNjYW4tPnhzX2NidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZl cihoc2Nhbi0+eHNfcmVhZF9zdHJlYW0sIE5VTEwpOworCQllbHNlCisJCQloc2Nhbi0+eHNfY2J1 ZiA9IFJlYWRCdWZmZXIocmVsLCBoc2Nhbi0+eHNfYmxrKTsKIAogCQkvKgogCQkgKiBQcnVuZSBw YWdlIHdoZW4gaXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQpAQCAtOTQ3LDYgKzk4OCwx MiBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbgogCUFzc2VydChzY2FuUG9zLT52YWxpZCB8fCBp bmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID09IDApOwogCUFzc2VydChhbGxfdmlzaWJsZSA9 PSBOVUxMIHx8IHNjYW4tPnhzX3dhbnRfaXR1cCk7CiAKKwkvKiBIYW5kbGUgcmVzZXR0aW5nIHRo ZSByZWFkIHN0cmVhbSB3aGVuIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgKi8KKwlpZiAoaHNjYW4t PnhzX3JlYWRfc3RyZWFtX2RpciA9PSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbikKKwkJaHNjYW4t PnhzX3JlYWRfc3RyZWFtX2RpciA9IGRpcmVjdGlvbjsJLyogZmlyc3QgY2FsbCAqLworCWVsc2Ug aWYgKHVubGlrZWx5KGhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgIT0gZGlyZWN0aW9uKSkKKwkJ aGVhcGFtX2luZGV4X2RpcmNoYW5nZV9yZXNldChoc2NhbiwgZGlyZWN0aW9uLCBiYXRjaHJpbmdi dWYpOworCiAJLyoKIAkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGxvYWRlZCBzY2Fu QmF0Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAogCSAqIG1hdGNoaW5nIGl0ZW0ncyBUSUQv aW5kZXggdHVwbGUgZnJvbQpAQCAtOTU2LDcgKzEwMDMsNyBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4 dF9zY2FuYmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpo c2NhbgogCXsKIAkJLyoKIAkJICogc2NhblBvcyBpcyB2YWxpZCwgc28gc2NhbkJhdGNoIG11c3Qg YWxyZWFkeSBiZSBsb2FkZWQgaW4gYmF0Y2ggcmluZwotCQkgKiBidWZmZXIuICBXZSByZWx5IG9u IHRoYXQgaGVyZS4KKwkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUgKGNhbid0IGRv IHRoaXMgd2l0aCBwcmVmZXRjaEJhdGNoKS4KIAkJICovCiAJCXBnX2Fzc3VtZShiYXRjaHJpbmdi dWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CiAKQEAgLTk4OSw2ICsxMDM2LDggQEAg aGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4KIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJaGVhcGFtX2lu ZGV4X2NvbnNpZGVyX3ByZWZldGNoaW5nKHNjYW4sIGhzY2FuLCBoYWRFeGlzdGluZ1NjYW5CYXRj aCk7CisKIAkvKgogCSAqIEFkdmFuY2VkIHNjYW5CYXRjaC4gIE5vdyBwb3NpdGlvbiBzY2FuUG9z IHRvIHRoZSBzdGFydCBvZiBuZXcKIAkgKiBzY2FuQmF0Y2guCkBAIC0xMDA0LDYgKzEwNTMsNyBA QCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbgogCXsKIAkJSW5kZXhTY2FuQmF0Y2ggaGVhZEJhdGNo ID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLAogCQkJCQkJCQkJCQkJCWJhdGNocmluZ2J1Zi0+aGVh ZEJhdGNoKTsKKwkJQmF0Y2hSaW5nSXRlbVBvcyAqcHJlZmV0Y2hQb3MgPSAmYmF0Y2hyaW5nYnVm LT5wcmVmZXRjaFBvczsKIAogCQlBc3NlcnQoaGVhZEJhdGNoICE9IHNjYW5CYXRjaCk7CiAJCUFz c2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCAhPSBzY2FuUG9zLT5iYXRjaCk7CkBAIC0xMDEx LDEyICsxMDYxLDQ4IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuCiAJCS8qIGZyZWUgb2Jzb2xl c2NlbnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCiAJCXRh YmxlYW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CiAKKwkJLyoKKwkJICog SWYgd2UncmUgYWJvdXQgdG8gcmVsZWFzZSB0aGUgYmF0Y2ggdGhhdCBwcmVmZXRjaFBvcyBjdXJy ZW50bHkKKwkJICogcG9pbnRzIHRvLCBqdXN0IGludmFsaWRhdGUgcHJlZmV0Y2hQb3MuICBTZWUg dGhlIGNvbW1lbnRzIGFib3V0CisJCSAqIHByZWZldGNoUG9zL3NjYW5Qb3Mgd2l0aGluIGhlYXBh bV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrIGZvciBhbgorCQkgKiBleHBsYW5hdGlvbi4KKwkJ ICoKKwkJICogVGhpcyBoYW5kbGluZyBpcyBhcHByb3hpbWF0ZWx5IHRoZSBvcHBvc2l0ZSBvZiBy ZXN1bWluZyBhIHBhdXNlZAorCQkgKiByZWFkIHN0cmVhbTogdGhpcyBoZWxwcyB0aGUgc2NhbiBk ZWFsIHdpdGggcHJlZmV0Y2hQb3MgZmFsbGluZworCQkgKiBiZWhpbmQgc2NhblBvcywgd2hlcmVh cyBwYXVzaW5nIGlzIHVzZWQgd2hlbiBzY2FuUG9zIGhhcyBmYWxsZW4KKwkJICogYmVoaW5kICh2 ZXJ5IGZhciBiZWhpbmQpIHByZWZldGNoUG9zLgorCQkgKi8KKwkJaWYgKHByZWZldGNoUG9zLT52 YWxpZCAmJgorCQkJcHJlZmV0Y2hQb3MtPmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNo KQorCQkJcHJlZmV0Y2hQb3MtPnZhbGlkID0gZmFsc2U7CisKIAkJLyogUmVtb3ZlIHRoZSBiYXRj aCBmcm9tIHRoZSByaW5nIGJ1ZmZlciAoZXZlbiBpZiBpdCdzIG1hcmtCYXRjaCkgKi8KIAkJYmF0 Y2hyaW5nYnVmLT5oZWFkQmF0Y2grKzsKKworCQlpZiAodW5saWtlbHkoaHNjYW4tPnhzX3BhdXNl ZCkpCisJCXsKKwkJCS8qCisJCQkgKiBoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jayBw YXVzZWQgdGhlIHNjYW4ncyByZWFkIHN0cmVhbQorCQkJICogZHVlIHRvIG91ciBydW5uaW5nIG91 dCBvZiBmcmVlIGJhdGNoIHNsb3RzLiAgTm93IHRoYXQgd2UndmUKKwkJCSAqIGZyZWVkIHVwIG9u ZSBzdWNoIHNsb3QsIHdlIGNhbiByZXN1bWUgdGhlIHJlYWQgc3RyZWFtIChzaW5jZQorCQkJICog dGhlcmUncyBub3cgc3BhY2UgZm9yIGhlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrIHRv IHN0b3JlCisJCQkgKiBvbmUgbW9yZSBiYXRjaCkuCisJCQkgKgorCQkJICogTm90ZTogSXQncyBq dXN0IGFib3V0IHBvc3NpYmxlIHRoYXQgcHJlZmV0Y2hQb3Mgd2FzIGp1c3QgKG9yIGlzCisJCQkg KiBqdXN0IGFib3V0IHRvIGJlKSBpbnZhbGlkYXRlZCB3aXRoIGxvdyBJTkRFWF9TQ0FOX01BWF9C QVRDSEVTLgorCQkJICovCisJCQlBc3NlcnQoIXByZWZldGNoUG9zLT52YWxpZCB8fAorCQkJCSAg IGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIHByZWZldGNoUG9zLT5iYXRjaCkpOworCQkJ QXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOworCisJCQlyZWFkX3N0cmVhbV9y ZXN1bWUoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwkJCWhzY2FuLT54c19wYXVzZWQgPSBmYWxz ZTsKKwkJfQogCX0KIAogCS8qIEluIHByYWN0aWNlIHNjYW5CYXRjaCB3aWxsIGFsd2F5cyBiZSB0 aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KIAlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFk QmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCUFzc2VydCghaHNjYW4tPnhzX3BhdXNlZCk7CiAK IAlyZXR1cm4gaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChzY2FuLCBoc2NhbiwgZGly ZWN0aW9uLAogCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBvcywgYWxsX3Zpc2libGUpOwpA QCAtMTE0MCw2ICsxMjI2LDEzIEBAIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAogICogKGltcG9ydGFu dCBmb3IgaW5uZXIgaW5kZXggc2NhbnMgb2YgYW50aS1qb2lucyBhbmQgc2VtaS1qb2lucyksIGFu ZCB0aGUKICAqIG5lZWQgdG8gdW5ndWFyZCBiYXRjaGVzIHByb21wdGx5LgogICoKKyAqIEluIG5v IGV2ZW50IHdpbGwgdGhlIHNjYW4gYmUgYWxsb3dlZCB0byBndWFyZCBtb3JlIHRoYW4gb25lIGJh dGNoIGF0IGEKKyAqIHRpbWUuICBUaGUgcHJpbWFyeSByZWFzb24gZm9yIHRoaXMgcmVzdHJpY3Rp b24gaXMgdG8gYXZvaWQgdW5pbnRlbmRlZAorICogaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlYWQg c3RyZWFtLCB3aGljaCBoYXMgaXRzIG93biBzdHJhdGVneSBmb3Iga2VlcGluZworICogdGhlIG51 bWJlciBvZiBwaW5zIGhlbGQgYnkgdGhlIGJhY2tlbmQgdW5kZXIgY29udHJvbC4gIChVbmd1YXJk aW5nIHZpYQorICogdGhlIGFtdW5ndWFyZGJhdGNoIGNhbGxiYWNrIG9mdGVuIG1lYW5zIHJlbGVh c2luZyBhIGJ1ZmZlciBwaW4gb24gYW4KKyAqIGluZGV4IHBhZ2UsIHdoaWNoIGNvdW50cyBhZ2Fp bnN0IHRoZSBzYW1lIHNoYXJlZCBwaW4gbGltaXQuKQorICoKICAqIE9uY2Ugd2UndmUgcmVzb2x2 ZWQgdmlzaWJpbGl0eSBmb3IgYWxsIGl0ZW1zIGluIGEgYmF0Y2gsIHdlIGNhbiBzYWZlbHkKICAq IHVuZ3VhcmQgaXQgYnkgY2FsbGluZyBhbXVuZ3VhcmRiYXRjaC4gIFRoaXMgaXMgc2FmZSB3aXRo IHJlc3BlY3QgdG8KICAqIGNvbmN1cnJlbnQgVkFDVVVNIGJlY2F1c2UgdGhlIGJhdGNoJ3MgZ3Vh cmQgKHR5cGljYWxseSBhIGJ1ZmZlciBwaW4gb24gdGhlCkBAIC0xMjg4LDMgKzEzODEsNDE0IEBA IGhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCWVsc2UKIAkJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gc2Nh bi0+bWF4aXRlbXNiYXRjaDsKIH0KKworLyoKKyAqIEhhbmRsZSBhIGNoYW5nZSBpbiBpbmRleCBz Y2FuIGRpcmVjdGlvbiAoYXQgdGhlIHR1cGxlIGdyYW51bGFyaXR5KS4KKyAqCisgKiBSZXNldHMg dGhlIHJlYWQgc3RyZWFtLCBzaW5jZSB3ZSBjYW4ndCByZWx5IG9uIHNjYW5Qb3MgY29udGludWlu ZyB0byBhZ3JlZQorICogd2l0aCB0aGUgYmxvY2tzIHRoYXQgcmVhZCBzdHJlYW0gYWxyZWFkeSBj b25zdW1lZCB1c2luZyBwcmVmZXRjaFBvcy4KKyAqCisgKiBOb3RlOiBpZmYgdGhlIHNjYW4gX2Nv bnRpbnVlc18gaW4gdGhpcyBuZXcgZGlyZWN0aW9uLCBhbmQgYWN0dWFsbHkgc3RlcHMKKyAqIG9m ZiBzY2FuQmF0Y2ggdG8gYW4gZWFybGllciBpbmRleCBwYWdlLCB0YWJsZWFtX3V0aWxfZmV0Y2hf bmV4dF9iYXRjaCB3aWxsCisgKiBkZWFsIHdpdGggaXQuICBCdXQgdGhhdCBtaWdodCBuZXZlciBo YXBwZW47IHRoZSBzY2FuIG1pZ2h0IHlldCBjaGFuZ2UKKyAqIGRpcmVjdGlvbiBhZ2FpbiAob3Ig anVzdCBlbmQgYmVmb3JlIHJldHVybmluZyBtb3JlIGl0ZW1zKS4KKyAqLworc3RhdGljIHBnX25v aW5saW5lIHZvaWQKK2hlYXBhbV9pbmRleF9kaXJjaGFuZ2VfcmVzZXQoSW5kZXhGZXRjaEhlYXBE YXRhICpoc2NhbiwKKwkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJIEJh dGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmKQoreworCS8qIFJlc2V0IHJlYWQgc3RyZWFtIHN0 YXRlICovCisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOworCWhzY2Fu LT54c19wYXVzZWQgPSBmYWxzZTsKKwloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gZGlyZWN0 aW9uOworCisJLyogUmVzZXQgcmVhZCBzdHJlYW0gaXRzZWxmICovCisJaWYgKGhzY2FuLT54c19y ZWFkX3N0cmVhbSkKKwkJcmVhZF9zdHJlYW1fcmVzZXQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsK K30KKworLyoKKyAqIERlY2lkZSB3aGV0aGVyIHRvIHN0YXJ0IGEgcmVhZCBzdHJlYW0gZm9yIGhl YXAgYmxvY2sgcHJlZmV0Y2hpbmcgZHVyaW5nIGFuCisgKiBpbmRleCBzY2FuCisgKi8KK3N0YXRp YyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSB2b2lkCitoZWFwYW1faW5kZXhfY29uc2lkZXJf cHJlZmV0Y2hpbmcoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgIEluZGV4RmV0Y2hIZWFw RGF0YSAqaHNjYW4sCisJCQkJCQkJCSAgYm9vbCBoYWRFeGlzdGluZ1NjYW5CYXRjaCkKK3sKKwor CS8qIFJldHVybiBlYXJseSB3aGVuIHByZWZldGNoaW5nIGlzIGFscmVhZHkgaW4gdXNlICovCisJ aWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwkJcmV0dXJuOworCisJQXNzZXJ0KCFzY2FuLT5i YXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQpOworCisJLyoKKwkgKiBXZSBkZWxheSBpbml0 aWFsaXppbmcgdGhlIHN0cmVhbSB1bnRpbCByZWFkaW5nIGZyb20gdGhlIHNjYW4ncyBzZWNvbmQK KwkgKiBiYXRjaC4gIFRoaXMgaGV1cmlzdGljIGF2b2lkcyB3YXN0aW5nIGN5Y2xlcyBvbiBzdGFy dGluZyBhIHJlYWQgc3RyZWFtCisJICogZm9yIHZlcnkgc2VsZWN0aXZlIGluZGV4IHNjYW5zLgor CSAqLworCWlmICghaGFkRXhpc3RpbmdTY2FuQmF0Y2gpCisJCXJldHVybjsKKworCS8qCisJICog V2UgYWxzbyBkZWxheSBjcmVhdGluZyBhIHJlYWQgc3RyZWFtIGR1cmluZyBpbmRleC1vbmx5IHNj YW5zIHRoYXQKKwkgKiBoYXZlbid0IGRvbmUgYW55IGhlYXAgZmV0Y2hlcyB5ZXQuICBXZSBkb24n dCB3YW50IHRvIHdhc3RlIGFueSBjeWNsZXMKKwkgKiBvbiBhbGxvY2F0aW5nIGEgcmVhZCBzdHJl YW0gdW50aWwgd2UgaGF2ZSBhIGRlbW9uc3RyYXRlZCBuZWVkIHRvCisJICogcGVyZm9ybSBoZWFw IGZldGNoZXMuCisJICovCisJaWYgKGhzY2FuLT54c19ibGsgPT0gSW52YWxpZEJsb2NrTnVtYmVy KQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdlIGF2b2lkIHByZWZldGNoaW5nIGR1cmluZyBzY2Fu cyB3aGVyZSB3ZSdyZSB1bmFibGUgdG8gdW5ndWFyZCAodW5waW4pCisJICogZWFjaCBiYXRjaCdz IGJ1ZmZlcnMgcmlnaHQgYXdheSAobm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMpLiAgV2UgYXJlIG5v dAorCSAqIHByZXBhcmVkIHRvIHNlbnNpYmx5IGxpbWl0IHRoZSB0b3RhbCBudW1iZXIgb2YgYnVm ZmVyIHBpbnMgaGVsZC4gIFRoZQorCSAqIHJlYWQgc3RyZWFtIGhhbmRsZXMgYWxsIHBpbiByZXNv dXJjZSBtYW5hZ2VtZW50IGZvciB1cywgYW5kIGtub3dzCisJICogbm90aGluZyBhYm91dCBwaW5z IGhlbGQgb24gaW5kZXggcGFnZXMvd2l0aGluIGJhdGNoZXMuCisJICovCisJaWYgKCFzY2FuLT5N VkNDU2NhbikKKwkJcmV0dXJuOworCisJLyogR1VDIGdhdGVzIHdoZXRoZXIgb3Igbm90IHdlIHVz ZSBwcmVmZXRjaGluZyAqLworCWlmICghZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCkKKwkJcmV0 dXJuOworCisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtID0KKwkJcmVhZF9zdHJlYW1fYmVnaW5fcmVs YXRpb24oUkVBRF9TVFJFQU1fREVGQVVMVCwgTlVMTCwKKwkJCQkJCQkJICAgc2Nhbi0+aGVhcFJl bGF0aW9uLCBNQUlOX0ZPUktOVU0sCisJCQkJCQkJCSAgIGhlYXBhbV9pbmRleF9wcmVmZXRjaF9u ZXh0X2Jsb2NrLCBzY2FuLCAwKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbmV4dCBibG9jayB0 byB0aGUgcmVhZCBzdHJlYW0gd2hlbiBwZXJmb3JtaW5nIGluZGV4IHByZWZldGNoaW5nLgorICoK KyAqIFRoZSBpbml0aWFsIGJhdGNoIGlzIGFsd2F5cyBsb2FkZWQgYnkgaGVhcGFtX2luZGV4X2dl dG5leHRfc2NhbmJhdGNoX3Bvcy4KKyAqIFdlIGRvbid0IGdldCBjYWxsZWQgdW50aWwgdGhlIGZp cnN0IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyIGNhbGwsIHdoZW4gYQorICogaGVhcCBibG9jayBp cyByZXF1ZXN0ZWQgZnJvbSB0aGUgc2NhbidzIHN0cmVhbSBmb3IgdGhlIGZpcnN0IHRpbWUuCisg KgorICogVGhlIHBvc2l0aW9uIG9mIHRoZSByZWFkX3N0cmVhbSBpcyBzdG9yZWQgaW4gcHJlZmV0 Y2hQb3MuICBJdCBpcyB0eXBpY2FsCisgKiBmb3IgcHJlZmV0Y2hQb3MgdG8gY29uc2lzdGVudGx5 IHN0YXkgYWhlYWQgb2YgdGhlIHNjYW5Qb3MgcG9zaXRpb24gdGhhdCdzCisgKiB1c2VkIHRvIHRy YWNrIHRoZSBuZXh0IFRJRCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zIHdpbGwg cmV0dXJuCisgKiB0byB0aGUgc2NhbiAoYWZ0ZXIgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0IGNhbGxl ZCkuICBIb3dldmVyLCB0aGF0IGlzbid0IGEKKyAqIHN0cmljdCBwcmVjb25kaXRpb24gKHRob3Vn aCBhcyBleHBsYWluZWQgYmVsb3cgd2UgaW1wbGVtZW50IGEgc2NoZW1lCisgKiBlc3NlbnRpYWxs eSBlcXVpdmFsZW50IHRvIG1ha2luZyBpdCBhIHN0cmljdCBwcmVjb25kaXRpb24pLiAgVGhlcmUg aXMgYQorICogcG9zdGNvbmRpdGlvbiB0aGF0IGFsd2F5cyBob2xkcywgdGhvdWdoOiB3aGVuIHdl IHJldHVybiwgd2UgYWx3YXlzIGxlYXZlCisgKiBzY2FuUG9zIDw9IHByZWZldGNoUG9zLgorICov CitzdGF0aWMgQmxvY2tOdW1iZXIKK2hlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrKFJl YWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJIHZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwK KwkJCQkJCQkJIHZvaWQgKnBlcl9idWZmZXJfZGF0YSkKK3sKKwlJbmRleFNjYW5EZXNjIHNjYW4g PSAoSW5kZXhTY2FuRGVzYykgY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCUluZGV4RmV0Y2hIZWFw RGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsK KwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJ QmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZiYXRjaHJpbmdidWYtPnNjYW5Qb3M7CisJQmF0 Y2hSaW5nSXRlbVBvcyAqcHJlZmV0Y2hQb3MgPSAmYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvczsK KwlIZWFwQmF0Y2hEYXRhICpoYmF0Y2ggPSBOVUxMOworCVNjYW5EaXJlY3Rpb24geHNfcmVhZF9z dHJlYW1fZGlyID0gaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpcjsKKwlJbmRleFNjYW5CYXRjaCBw cmVmZXRjaEJhdGNoOworCisJLyoKKwkgKiBzY2FuUG9zIG11c3QgYWx3YXlzIGJlIHZhbGlkIHdo ZW4gcHJlZmV0Y2hpbmcgdGFrZXMgcGxhY2UuICBUaGVyZSBoYXMKKwkgKiB0byBiZSBhdCBsZWFz dCBvbmUgYmF0Y2gsIGxvYWRlZCBhcyBvdXIgc2NhbkJhdGNoLiAgVGhlIHNjYW4gZGlyZWN0aW9u CisJICogbXVzdCBiZSBlc3RhYmxpc2hlZCwgdG9vLgorCSAqLworCUFzc2VydChpbmRleF9zY2Fu X2JhdGNoX2NvdW50KHNjYW4pID4gMCk7CisJQXNzZXJ0KHNjYW5Qb3MtPnZhbGlkICYmIGluZGV4 X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKSk7CisJQXNzZXJ0KHNjYW4t Pk1WQ0NTY2FuKTsKKwlBc3NlcnQoIWhzY2FuLT54c19wYXVzZWQpOworCUFzc2VydCh4c19yZWFk X3N0cmVhbV9kaXIgIT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pOworCisJLyoKKwkgKiBIYW5k bGUgaW5pdGlhbGl6YXRpb24gb24gdGhlIGZpcnN0IGNhbGwgaGVyZSwgd2hlbiBwcmVmZXRjaFBv cyBpc24ndAorCSAqIHlldCB2YWxpZCAoYWxzbyBoYW5kbGVzIHRoZSBwcmVmZXRjaFBvcyA8IHNj YW5Qb3MgZWRnZSBjYXNlKS4KKwkgKgorCSAqIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2U6IHdlIGlu aXRpYWxpemUgcHJlZmV0Y2hQb3MgdXNpbmcgdGhlIGN1cnJlbnQKKwkgKiBzY2FuUG9zIGFuZCBy ZXR1cm4gdGhhdCBpdGVtJ3MgaGVhcCBibG9jayBkaXJlY3RseSwgcmF0aGVyIHRoYW4KKwkgKiBw cmVmZXRjaGluZyBhaGVhZC4gIEluIG90aGVyIHdvcmRzLCB3ZSByZXR1cm4gdGhlIGhlYXAgYmxv Y2sgZnJvbSB0aGUKKwkgKiBUSUQgcGFzc2VkIHRvIGhlYXBhbV9pbmRleF9oZWFwX2ZldGNoIGF0 IHRoZSBwb2ludCB3aGVyZSBpdCBjYWxsZWQKKwkgKiByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciAo dHlwaWNhbGx5IHRoZSBmaXJzdCBzdWNoIGNhbGwgZm9yIHRoZSBlbnRpcmUKKwkgKiBzY2FuLCBt YWRlIHNob3J0bHkgYWZ0ZXIgdGhlIHNjYW4ncyByZWFkIHN0cmVhbSBpcyBjcmVhdGVkKS4KKwkg KgorCSAqIFRoZXJlJ3MgYWxzbyBhbiBlZGdlIGNhc2UgdGhhdCB3ZSBoYW5kbGUgdXNpbmcgZXhh Y3RseSB0aGUgc2FtZSBzdGVwcy4KKwkgKiBJdCdzIHBvc3NpYmxlIGZvciBwcmVmZXRjaFBvcyB0 byAiZmFsbCBiZWhpbmQiIHNjYW5Qb3MsIGF0IGxlYXN0IGluIGEKKwkgKiB0cml2aWFsIHNlbnNl OiBpZiBtYW55IGFkamFjZW50IG1hdGNoaW5nIGl0ZW1zIGNvbnRhaW4gVElEcyB0aGF0IGFsbAor CSAqIHBvaW50IHRvIHRoZSBzYW1lIGhlYXAgYmxvY2ssIHNjYW5Qb3MgY2FuIGFjdHVhbGx5IG92 ZXJ0YWtlIHByZWZldGNoUG9zCisJICogKHByZWZldGNoUG9zIGNhbid0IGFkdmFuY2UgdW50aWwg d2UncmUgYWN0dWFsbHkgY2FsbGVkKS4gIEEgc2ltaWxhcgorCSAqIGlzc3VlIGFyaXNlcyBkdXJp bmcgaW5kZXgtb25seSBzY2FucyB0aGF0IHJlcXVpcmUgb25seSBhIGZldyBoZWFwCisJICogZmV0 Y2hlczogd2UnbGwgdGVuZCB0byBiZSBjYWxsZWQgZmFyIGxlc3Mgb2Z0ZW4gdGhhbiB3ZSdkIGJl IGNhbGxlZAorCSAqIGR1cmluZyBhbiBlcXVpdmFsZW50IHBsYWluIGluZGV4IHNjYW4gZHVlIHRv IGFsbC12aXNpYmxlIGl0ZW1zLiAgQW4KKwkgKiBhbGwtdmlzaWJsZSBpdGVtIHdpbGwgYWR2YW5j ZSBzY2FuUG9zLCBidXQgY2FuJ3QgdHJpZ2dlciBhIGNhbGwgdG8gaGVyZQorCSAqIChqdXN0IGxp a2UgYW4gaXRlbSB0aGF0IHBvaW50cyB0byB0aGUgc2FtZSBoZWFwIGJsb2NrIHRoYXQgdGhlIHBy ZXZpb3VzCisJICogaXRlbSBhbHNvIHBvaW50ZWQgdG8pLgorCSAqCisJICogVGhpcyBzY2hlbWUg cHJvZHVjZXMgZXhhY3RseSB0aGUgc2FtZSBibG9jayBwcmVmZXRjaCByZXF1ZXN0cyBhcyBhCisJ ICogc2NoZW1lIHRoYXQgcmVxdWlyZXMgaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3Bv cyB0byBhY3RpdmVseQorCSAqIGVuc3VyZSB0aGF0ICJwcmVmZXRjaFBvcyA8IHNjYW5Qb3MiIGNh biBuZXZlciBoYXBwZW4uICBUaGF0IGlzbid0IGEKKwkgKiBzdHJpY3QgcHJlY29uZGl0aW9uIGZv ciB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgbWFraW5nIGl0IGV4cGxpY2l0IHdvdWxkCisJICogaW1w b3NlIGEgcGVyZm9ybWFuY2UgcGVuYWx0eSBvbiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0 Y2hfcG9zLgorCSAqCisJICogTm90ZTogd2hlbiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0 Y2hfcG9zIGZyZWVzIGEgYmF0Y2ggdGhhdAorCSAqIHByZWZldGNoUG9zIHBvaW50cyB0bywgaXQn bGwgYXQgbGVhc3QgaW52YWxpZGF0ZSBwcmVmZXRjaFBvcyBmb3IgdXMuCisJICogVGhpcyByZW1v dmVzIGFueSBkYW5nZXIgb2YgcHJlZmV0Y2hQb3MuYmF0Y2ggZmFsbGluZyBzbyBmYXIgYmVoaW5k CisJICogc2NhblBvcy5iYXRjaCB0aGF0IGl0IHdyYXBzIGFyb3VuZCAoYW5kIGFwcGVhcnMgdG8g YmUgYWhlYWQgb2Ygc2NhblBvcworCSAqIGluc3RlYWQgb2YgYmVoaW5kIGl0KS4gIEluIG90aGVy IHdvcmRzLCBpbiBhIGNlcnRhaW4gc2Vuc2Ugd2UgYWN0dWFsbHkKKwkgKiBfY2FuXyB0cnVzdCBo ZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zIHRvIG5vdCBsZXQgcHJlZmV0Y2hQb3MK KwkgKiBmYWxsIGJlaGluZCBzY2FuUG9zOiBpdCBjYW4ndCBoYXBwZW4gYXQgdGhlIGJhdGNoIGdy YW51bGFyaXR5IChvbmx5IGF0CisJICogdGhlIGl0ZW0vdHVwbGUgZ3JhbnVsYXJpdHksIHdoaWNo IHdlIGNhbiBhbHdheXMgY29wZSB3aXRoIGhlcmUpLgorCSAqLworCWlmICghcHJlZmV0Y2hQb3Mt PnZhbGlkIHx8CisJCWluZGV4X3NjYW5fcG9zX2NtcChwcmVmZXRjaFBvcywgc2NhblBvcywgeHNf cmVhZF9zdHJlYW1fZGlyKSA8IDApCisJeworCQlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbTsKKwor CQkqcHJlZmV0Y2hQb3MgPSAqc2NhblBvczsKKwkJcHJlZmV0Y2hCYXRjaCA9IGluZGV4X3NjYW5f YmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKTsKKworCQkvKgorCQkgKiBXZSBtdXN0IGF2 b2lkIGtlZXBpbmcgYW55IGJhdGNoIGd1YXJkZWQgZm9yIG1vcmUgdGhhbiBhbiBpbnN0YW50LAor CQkgKiB0byBhdm9pZCB1bmRlc2lyYWJsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc2NhbidzIHJl YWQgc3RyZWFtLiBTZWUKKwkJICogY29tbWVudCBhbmQgYXNzZXJ0aW9uIGF0IHRoZSB0b3Agb2Yg dGhlIGxvb3AgYmVsb3cuCisJCSAqLworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJ CQkvKgorCQkJICogSW5kZXgtb25seSBzY2FuIGJhdGNoZXMgYXJlbid0IHVuZ3VhcmRlZCBpbW1l ZGlhdGVseS4gIERlYWwKKwkJCSAqIHdpdGggdGhhdC4KKwkJCSAqLworCQkJaGJhdGNoID0gaW5k ZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhKHNjYW4sIHByZWZldGNoQmF0Y2gpOworCisJCQkvKgor CQkJICogVGhlIHJlcXVlc3RlZCBpdGVtIGNhbid0IGJlIGFsbC12aXNpYmxlIGFjY29yZGluZyB0 byBpdHMKKwkJCSAqIGJhdGNoJ3MgY2FjaGVkIHZpc2liaWxpdHkgaW5mb3JtYXRpb247IGlmIGl0 IHdlcmUsIHdlJ2QgbmV2ZXIKKwkJCSAqIGhhdmUgYmVlbiBjYWxsZWQgaW4gdGhlIGZpcnN0IHBs YWNlCisJCQkgKi8KKwkJCUFzc2VydChIRUFQX0JBVENIX1ZJU19DQUNIRUQoaGJhdGNoLCBwcmVm ZXRjaFBvcy0+aXRlbSkgJiYKKwkJCQkgICAhaGJhdGNoLT5iYXRjaHZpc1twcmVmZXRjaFBvcy0+ aXRlbV0pOworCisJCQkvKgorCQkJICogTG9hZCBhbnkgdmlzaWJpbGl0eSBpbmZvIG5vdCBhbHJl YWR5IHNldCB0aHJvdWdoIHNjYW5CYXRjaCwgc28KKwkJCSAqIHRoYXQgc2NhbkJhdGNoL3ByZWZl dGNoQmF0Y2ggaXMgdW5ndWFyZGVkIHJpZ2h0IGF3YXkuCisJCQkgKgorCQkJICogTm90ZTogV2Ug cmVseSBvbiBoZWFwYW1faW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkgbm90CisJCQkgKiBvdmVy d3JpdGluZyB0aGUgZXhpc3RpbmcgYmF0Y2h2aXNbXSBmb3Igc2NhblBvcy9wcmVmZXRjaFBvcwor CQkJICogKHBsdXMgYW55IG90aGVyIGl0ZW1zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gY2FjaGVk KS4KKwkJCSAqLworCQkJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gc2Nhbi0+bWF4aXRlbXNiYXRjaDsJ LyogbXVzdCB1bmd1YXJkICovCisJCQlpZiAocHJlZmV0Y2hCYXRjaC0+aXNHdWFyZGVkKQorCQkJ CWhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShzY2FuLCB4c19yZWFkX3N0cmVhbV9k aXIsCisJCQkJCQkJCQkJCQkgIHByZWZldGNoQmF0Y2gsIGhiYXRjaCwKKwkJCQkJCQkJCQkJCSAg cHJlZmV0Y2hQb3MpOworCisJCQkvKgorCQkJICogTGF0ZXIgY2FsbHMgdG8gaGVhcGFtX2luZGV4 X2JhdGNoX3Bvc192aXNpYmlsaXR5IHdpbGwgYWx3YXlzCisJCQkgKiB1bmd1YXJkIHRoZSBiYXRj aCByaWdodCBhd2F5LCB3aGljaCB3ZSByZWx5IG9uIGJlbG93CisJCQkgKi8KKwkJfQorCisJCUFz c2VydCghcHJlZmV0Y2hCYXRjaC0+aXNHdWFyZGVkKTsKKworCQlpdGVtID0gJnByZWZldGNoQmF0 Y2gtPml0ZW1zW3ByZWZldGNoUG9zLT5pdGVtXTsKKwkJaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2Nr ID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+dGFibGVUaWQpOworCisJCS8qCisJ CSAqIFNwZWNpYWwgY2FzZTogd2hlbiB3ZSByZXR1cm4sIHByZWZldGNoUG9zIHdvbid0IGJlIGFo ZWFkIG9mIHNjYW5Qb3MKKwkJICogKGl0J2xsIGp1c3QgYmUgZXF1YWwgdG8gc2NhblBvcykuICBX ZSdyZSBtZXJlbHkgZmV0Y2hpbmcgdGhyb3VnaCBhCisJCSAqIHJlYWQgc3RyZWFtOyB0cnVlIHBy ZWZldGNoaW5nIGhhc24ndCByZWFsbHkgc3RhcnRlZCB5ZXQuCisJCSAqLworCQlBc3NlcnQoaW5k ZXhfc2Nhbl9wb3NfY21wKHNjYW5Qb3MsIHByZWZldGNoUG9zLCB4c19yZWFkX3N0cmVhbV9kaXIp ID09IDApOworCisJCXJldHVybiBoc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2s7CisJfQorCisJLyoK KwkgKiBXZSdyZSBwaWNraW5nIHVwIHByZWZldGNoaW5nIGZyb20gd2hlcmUgdGhlIGxhc3QgY2Fs bCBoZXJlIGxlZnQgb2ZmCisJICovCisJQXNzZXJ0KGluZGV4X3NjYW5fcG9zX2NtcChzY2FuUG9z LCBwcmVmZXRjaFBvcywgeHNfcmVhZF9zdHJlYW1fZGlyKSA8PSAwKTsKKwlwcmVmZXRjaEJhdGNo ID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBwcmVmZXRjaFBvcy0+YmF0Y2gpOworCWlmIChzY2Fu LT54c193YW50X2l0dXApCisJCWhiYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2hfdGFibGVfYXJlYShz Y2FuLCBwcmVmZXRjaEJhdGNoKTsKKworCS8qCisJICogQXNzZXJ0IGluIHBhc3NpbmcgdGhhdCB4 c19wcmVmZXRjaF9ibG9jayBtYXRjaGVzIHRoZSBsYXN0IGl0ZW0gd2UKKwkgKiByZXR1cm5lZC4K KwkgKgorCSAqIE5vdGU6IHdlIGRvbid0IGFjdHVhbGx5IG5lZWQgYSB4c19wcmVmZXRjaF9ibG9j ayBmaWVsZCBhdCBhbGw7IHdlIGNvdWxkCisJICoganVzdCB0YWtlIHRoZSBsYXN0IGJsb2NrIHdl IHJldHVybmVkIGZyb20gcHJlZmV0Y2hQb3MgZGlyZWN0bHkgaW5zdGVhZC4KKwkgKiBCdXQgbWFp bnRhaW5pbmcgeHNfcHJlZmV0Y2hfYmxvY2sgZXhwbGljaXRseSBpcyBzbGlnaHRseSBtb3JlIHJv YnVzdC4KKwkgKiBJdCBnaXZlcyB1cyBhIHdheSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbGFzdCBj YWxsIGhlcmUgbGVmdCBwcmVmZXRjaFBvcworCSAqIGluIGEgY29uc2lzdGVudCBzdGF0ZSAoZS5n Liwgd2hlbiB0aGUgcmVhZCBzdHJlYW0gaGFkIHRvIGJlIHBhdXNlZCkuCisJICovCisjaWZkZWYg VVNFX0FTU0VSVF9DSEVDS0lORworCXsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKmxhc3RpdGVtID0g JnByZWZldGNoQmF0Y2gtPml0ZW1zW3ByZWZldGNoUG9zLT5pdGVtXTsKKwkJQmxvY2tOdW1iZXIg bGFzdF9ibG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJmxhc3RpdGVtLT50YWJsZVRp ZCk7CisKKwkJLyoKKwkJICogTm90ZTogd2hlbiBhIHByZXZpb3VzIGNhbGwgcGF1c2VkIHRoZSBy ZWFkIHN0cmVhbSwgcHJlZmV0Y2hQb3MKKwkJICogbWlnaHQgcG9pbnQgdG8gYW4gaXRlbSB3aG9z ZSBUSUQgZG9lc24ndCBtYXRjaCBsYXN0X2Jsb2NrLiAgVGhpcworCQkgKiBjYW4gb25seSBoYXBw ZW4gd2hlbiB0aGUgaXRlbSB3YXMgbmV2ZXIgcmV0dXJuZWQgZHVlIHRvIGl0IGJlaW5nCisJCSAq IGFsbC12aXNpYmxlLgorCQkgKi8KKwkJQXNzZXJ0KGxhc3RfYmxvY2sgPT0gaHNjYW4tPnhzX3By ZWZldGNoX2Jsb2NrIHx8CisJCQkgICAoSEVBUF9CQVRDSF9WSVNfQ0FDSEVEKGhiYXRjaCwgcHJl ZmV0Y2hQb3MtPml0ZW0pICYmCisJCQkJaGJhdGNoLT5iYXRjaHZpc1twcmVmZXRjaFBvcy0+aXRl bV0pKTsKKwl9CisjZW5kaWYKKworCWZvciAoOzspCisJeworCQlCYXRjaE1hdGNoaW5nSXRlbSAq aXRlbTsKKwkJQmxvY2tOdW1iZXIgcHJlZmV0Y2hfYmxvY2s7CisKKwkJLyoKKwkJICogV2UgbmV2 ZXIgY2FsbCBhbWdldGJhdGNoIHdpdGhvdXQgaW1tZWRpYXRlbHkgdW5ndWFyZGluZyB0aGUgYmF0 Y2gKKwkJICogb25jZSBwcmVmZXRjaGluZyBiZWdpbnMuICBUaGF0IHdheSBpbmRleCBBTXMgd29u J3QgaG9sZCBvbnRvIGFueQorCQkgKiAiZXh0cmEiIGluZGV4IHBhZ2UgcGlucyBuZWVkZWQgYXMg VElEIHJlY3ljbGluZyBpbnRlcmxvY2sgZ3VhcmRzLgorCQkgKgorCQkgKiBUaGlzIGlzIGRlZmVu c2l2ZS4gIFRoZSByZWFkIHN0cmVhbSB0cmllcyB0byBiZSBjYXJlZnVsIGFib3V0IG5vdAorCQkg KiBwaW5uaW5nIHRvbyBtYW55IGJ1ZmZlcnMsIGFuZCB0aGF0J3MgaGFyZGVyIHRvIGRvIHJlbGlh Ymx5IGlmIHRoZXJlCisJCSAqIGFyZSB2YXJpYWJsZSBudW1iZXJzIG9mIHBpbnMgdGFrZW4gd2l0 aG91dCBzdWNoIGNhcmUuCisJCSAqLworCQlBc3NlcnQoIXByZWZldGNoQmF0Y2gtPmlzR3VhcmRl ZCk7CisKKwkJLyogSW5jcmVtZW50IHByZWZldGNoUG9zIHRvIGRldGVybWluZSB0aGUgbmV4dCBp dGVtIHRvIHByZWZldGNoICovCisJCWlmICghaW5kZXhfc2Nhbl9wb3NfYWR2YW5jZSh4c19yZWFk X3N0cmVhbV9kaXIsIHByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKSkKKwkJeworCQkJLyoKKwkJ CSAqIFJhbiBvdXQgb2YgaXRlbXMgZnJvbSBwcmVmZXRjaEJhdGNoLiAgVHJ5IHRvIGFkdmFuY2Ug dG8gdGhlCisJCQkgKiBzY2FuJ3MgbmV4dCBiYXRjaC4KKwkJCSAqLworCQkJaWYgKHVubGlrZWx5 KGluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBDYW4n dCBhZHZhbmNlIHByZWZldGNoQmF0Y2ggYmVjYXVzZSBhbGwgYXZhaWxhYmxlCisJCQkJICogYmF0 Y2hyaW5nYnVmIGJhdGNoIHNsb3RzIGFyZSBjdXJyZW50bHkgaW4gdXNlLgorCQkJCSAqCisJCQkJ ICogRGVhbCB3aXRoIHRoaXMgYnkgbW9tZW50YXJpbHkgcGF1c2luZyB0aGUgcmVhZCBzdHJlYW0u CisJCQkJICogaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyB3aWxsIHJlc3VtZSB0 aGUgcmVhZAorCQkJCSAqIHN0cmVhbSBsYXRlciwgdGhvdWdoIG9ubHkgYWZ0ZXIgc2NhblBvcyBo YXMgY29uc3VtZWQgYWxsCisJCQkJICogcmVtYWluaW5nIGl0ZW1zIGZyb20gc2NhbkJhdGNoIChh dCB3aGljaCBwb2ludCB0aGUgY3VycmVudAorCQkJCSAqIGhlYWQgYmF0Y2ggd2lsbCBiZSBmcmVl ZCwgbWFraW5nIGEgc2xvdCBhdmFpbGFibGUgZm9yIHJldXNlCisJCQkJICogaGVyZSBieSB1cyku CisJCQkJICoKKwkJCQkgKiBJbiBwcmFjdGljZSB3ZSBoYXJkbHkgZXZlciBuZWVkIHRvIGRvIHRo aXMuICBJdCB3b3VsZCBiZQorCQkJCSAqIHBvc3NpYmxlIHRvIGF2b2lkIHRoZSBuZWVkIHRvIHBh dXNlIHRoZSByZWFkIHN0cmVhbSBieQorCQkJCSAqIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgc2xv dHMsIGJ1dCB0aGF0IHdvdWxkIGFkZCBjb21wbGV4aXR5CisJCQkJICogZm9yIG5vIHJlYWwgYmVu ZWZpdC4gIEl0IGFsc28gc2VlbXMgbGlrZSBhIGdvb2QgaWRlYSB0bworCQkJCSAqIGltcG9zZSBz b21lIGhhcmQgbGltaXQgb24gdGhlIG51bWJlciBvZiBiYXRjaGVzIHRoYXQKKwkJCQkgKiBwcmVm ZXRjaFBvcyBjYW4gZ2V0IGFoZWFkIG9mIHNjYW5Qb3MgYnkgKGVzcGVjaWFsbHkgaW4gdGhlCisJ CQkJICogY2FzZSBvZiBpbmRleC1vbmx5IHNjYW5zLCB3aGVyZSB3ZSBvZnRlbiB3b24ndCBoYXZl IGFueQorCQkJCSAqIGhlYXAgYmxvY2sgdG8gcmV0dXJuIGZyb20gbW9zdCBvZiB0aGUgc2Nhbidz IGJhdGNoZXMpLgorCQkJCSAqLworCQkJCWhzY2FuLT54c19wYXVzZWQgPSB0cnVlOworCisJCQkJ LyoKKwkJCQkgKiBCZWZvcmUgcmV0dXJuaW5nLCBhZHZhbmNlIHByZWZldGNoUG9zIGluIHRoZSBv cHBvc2l0ZQorCQkJCSAqIGRpcmVjdGlvbiB0byB0aGUgb25lIHVzZWQgYnkgdGhlIHNjYW4uICBU aGlzIHVuZG9lcyB0aGUKKwkJCQkgKiBlZmZlY3RzIG9mIHRoZSBtb3N0IHJlY2VudCBhZHZhbmNl LiAgVGhhdCB3YXkgd2UnbGwgYWx3YXlzCisJCQkJICogbGVhdmUgcHJlZmV0Y2hQb3MgaW4gYSBz dGF0ZSB0aGF0J3MgY29uc2lzdGVudCB3aXRoIHRoZQorCQkJCSAqIHdvcmsgdGhhdCB3ZSBhY3R1 YWxseSBwZXJmb3JtZWQgbW9zdCByZWNlbnRseS4gIChUaGlzIG1pZ2h0CisJCQkJICogbm90IGJl IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IHZhcmlvdXMgcG9zaXRpb25hbCBzdGF0ZQorCQkJCSAq IGFzc2VydGlvbnMgZXhwZWN0IGl0LikKKwkJCQkgKi8KKwkJCQlpZiAoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZCh4c19yZWFkX3N0cmVhbV9kaXIpKQorCQkJCXsKKwkJCQkJQXNzZXJ0KHByZWZldGNo UG9zLT5pdGVtID09IHByZWZldGNoQmF0Y2gtPmxhc3RJdGVtICsgMSk7CisJCQkJCXByZWZldGNo UG9zLT5pdGVtID0gcHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW07CisJCQkJfQorCQkJCWVsc2UKKwkJ CQl7CisJCQkJCUFzc2VydChwcmVmZXRjaFBvcy0+aXRlbSA9PSBwcmVmZXRjaEJhdGNoLT5maXJz dEl0ZW0gLSAxKTsKKwkJCQkJcHJlZmV0Y2hQb3MtPml0ZW0gPSBwcmVmZXRjaEJhdGNoLT5maXJz dEl0ZW07CisJCQkJfQorCisJCQkJcmV0dXJuIHJlYWRfc3RyZWFtX3BhdXNlKHN0cmVhbSk7CisJ CQl9CisJCQkvKiBlbHNlIHdlIGhhdmUgYSBmcmVlIGJhdGNocmluZ2J1ZiBzbG90IHRvIGZpdCBh bm90aGVyIGJhdGNoICovCisKKwkJCXByZWZldGNoQmF0Y2ggPSB0YWJsZWFtX3V0aWxfZmV0Y2hf bmV4dF9iYXRjaChzY2FuLAorCQkJCQkJCQkJCQkJCQkgIHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJ CQkJCQkJCQkJCQkJICBwcmVmZXRjaEJhdGNoLAorCQkJCQkJCQkJCQkJCQkgIHByZWZldGNoUG9z KTsKKwkJCWlmICghcHJlZmV0Y2hCYXRjaCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIE5vIG1vcmUg YmF0Y2hlcyBpbiB0aGlzIGRpcmVjdGlvbiwgc28gYWxsIHRoZSBiYXRjaGVzIHRoYXQKKwkJCQkg KiB0aGUgc2NhbiB3aWxsIGV2ZXIgcmVxdWlyZSBoYXZlIG5vdyBiZWVuIHJldHVybmVkCisJCQkJ ICovCisJCQkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwkJCX0KKworCQkJLyoKKwkJCSAq IEhhdmUgYSBuZXcgcHJlZmV0Y2hCYXRjaC4KKwkJCSAqCisJCQkgKiB0YWJsZWFtX3V0aWxfZmV0 Y2hfbmV4dF9iYXRjaCBhbHJlYWR5IGFwcGVuZGVkIHRoZSBuZXcgYmF0Y2ggdG8KKwkJCSAqIGJh dGNocmluZ2J1ZiBmb3IgdXMsIGJ1dCB3ZSBtdXN0IGFkdmFuY2UgcHJlZmV0Y2hQb3Mgb3Vyc2Vs dmVzLgorCQkJICogUG9zaXRpb24gcHJlZmV0Y2hQb3MgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXcg YmF0Y2guCisJCQkgKi8KKwkJCWluZGV4X3NjYW5fcG9zX25leHRiYXRjaCh4c19yZWFkX3N0cmVh bV9kaXIsCisJCQkJCQkJCQkgcHJlZmV0Y2hCYXRjaCwgcHJlZmV0Y2hQb3MpOworCisJCQlpZiAo aGJhdGNoKQorCQkJeworCQkJCUFzc2VydChzY2FuLT54c193YW50X2l0dXApOworCisJCQkJLyog YnVsay1sb2FkIHZpc2liaWxpdHkgaW5mbyB0byB1bmd1YXJkIGJhdGNoIGltbWVkaWF0ZWx5ICov CisJCQkJaGJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhKHNjYW4sIHByZWZldGNo QmF0Y2gpOworCisJCQkJQXNzZXJ0KGhzY2FuLT54c192bV9pdGVtcyA9PSBzY2FuLT5tYXhpdGVt c2JhdGNoKTsKKwkJCQlpZiAocHJlZmV0Y2hCYXRjaC0+aXNHdWFyZGVkKQorCQkJCQloZWFwYW1f aW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoc2NhbiwgeHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJ CQkJCQkJCQkJCSAgcHJlZmV0Y2hCYXRjaCwgaGJhdGNoLAorCQkJCQkJCQkJCQkJCSAgcHJlZmV0 Y2hQb3MpOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogcHJlZmV0Y2hQb3Mgbm93IHBvaW50cyB0 byB0aGUgbmV4dCBpdGVtIHdob3NlIFRJRCdzIGhlYXAgYmxvY2sKKwkJICogbnVtYmVyIG1pZ2h0 IG5lZWQgdG8gYmUgcHJlZmV0Y2hlZAorCQkgKi8KKwkJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2go c2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKSA9PSBwcmVmZXRjaEJhdGNoKTsKKwkJQXNzZXJ0KHBy ZWZldGNoUG9zLT5pdGVtID49IHByZWZldGNoQmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJICAgcHJl ZmV0Y2hQb3MtPml0ZW0gPD0gcHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW0pOworCQkvKiBzY2FuUG9z IG11c3QgYmUgPCBwcmVmZXRjaFBvcyB3aGVuIHdlIHJldHVybiBmcm9tIHRoaXMgbG9vcCBwYXRo ICovCisJCUFzc2VydChpbmRleF9zY2FuX3Bvc19jbXAoc2NhblBvcywgcHJlZmV0Y2hQb3MsIHhz X3JlYWRfc3RyZWFtX2RpcikgPCAwKTsKKworCQlpZiAoaGJhdGNoKQorCQl7CisJCQlBc3NlcnQo c2Nhbi0+eHNfd2FudF9pdHVwKTsKKwkJCUFzc2VydChIRUFQX0JBVENIX1ZJU19DQUNIRUQoaGJh dGNoLCBwcmVmZXRjaFBvcy0+aXRlbSkpOworCisJCQlpZiAoaGJhdGNoLT5iYXRjaHZpc1twcmVm ZXRjaFBvcy0+aXRlbV0pCisJCQl7CisJCQkJLyogaXRlbSBpcyBrbm93biB0byBiZSBhbGwtdmlz aWJsZSAtLSBkb24ndCBwcmVmZXRjaCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJ aXRlbSA9ICZwcmVmZXRjaEJhdGNoLT5pdGVtc1twcmVmZXRjaFBvcy0+aXRlbV07CisJCXByZWZl dGNoX2Jsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+dGFibGVUaWQpOwor CisJCWlmIChwcmVmZXRjaF9ibG9jayA9PSBoc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2spCisJCXsK KwkJCS8qCisJCQkgKiBwcmVmZXRjaF9ibG9jayBtYXRjaGVzIHRoZSBsYXN0IHByZWZldGNoUG9z IGl0ZW0ncyBUSUQncyBoZWFwCisJCQkgKiBibG9jayBudW1iZXI7IHdlIG11c3Qgbm90IHJldHVy biB0aGUgc2FtZSBwcmVmZXRjaF9ibG9jayB0d2ljZQorCQkJICogKHR3aWNlIGluIHN1Y2Nlc3Np b24pCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV2UgaGF2ZSBhIG5ldyBoZWFw IGJsb2NrIG51bWJlciB0byByZXR1cm4gdG8gcmVhZCBzdHJlYW0gKi8KKwkJaHNjYW4tPnhzX3By ZWZldGNoX2Jsb2NrID0gcHJlZmV0Y2hfYmxvY2s7CisJCXJldHVybiBwcmVmZXRjaF9ibG9jazsK Kwl9CisKKwlwZ191bnJlYWNoYWJsZSgpOworCisJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsK K30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCmluZGV4IDc5M2ZiMjY4Ny4uMTg4 YjAzNTY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAgLTUsMTUgKzUs MjIgQEAKICAqCiAgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgY29yZSBpbmZyYXN0cnVjdHVy ZSBmb3IgYmF0Y2gtYmFzZWQgaW5kZXggc2NhbnMsCiAgKiB3aGljaCBhbGxvdyBpbmRleCBBTXMg dG8gcmV0dXJuIG11bHRpcGxlIG1hdGNoaW5nIFRJRHMgcGVyIHBhZ2UgaW4gYSBzaW5nbGUKLSAq IGNhbGwuICBUaGUgYmF0Y2ggcmluZyBidWZmZXIgaXMgb3duZWQgYnkgdGhlIHRhYmxlIEFNLgor ICogY2FsbC4gIFRoZSBiYXRjaCByaW5nIGJ1ZmZlciBpcyBvd25lZCBieSB0aGUgdGFibGUgQU0s IHR5cGljYWxseSBtYWludGFpbmVkCisgKiBhbG9uZ3NpZGUgYSByZWFkIHN0cmVhbSB1c2VkIGZv ciBwcmVmZXRjaGluZyB0YWJsZSBibG9ja3MuCiAgKgotICogVGhlIHJpbmcgYnVmZmVyIGxvYWRz IGJhdGNoZXMgaW4gaW5kZXgga2V5IHNwYWNlL2luZGV4IHNjYW4gb3JkZXIuCisgKiBUaGUgcmlu ZyBidWZmZXIgbG9hZHMgYmF0Y2hlcyBpbiBpbmRleCBrZXkgc3BhY2UvaW5kZXggc2NhbiBvcmRl ci4gIFRoaXMKKyAqIGFsbG93cyB0aGUgdGFibGUgQU0gdG8gbWFpbnRhaW4gYW4gYWRlcXVhdGUg cHJlZmV0Y2ggZGlzdGFuY2U6IGl0cyByZWFkCisgKiBzdHJlYW0gY2FsbGJhY2sgaXMgdGhlcmVi eSBhYmxlIHRvIHJlcXVlc3QgdGFibGUgYmxvY2tzIHJlZmVyZW5jZWQgYnkgaW5kZXgKKyAqIHBh Z2VzIHRoYXQgYXJlIHdlbGwgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbidzIGlu ZGV4IHBhZ2UuCiAgKgogICogTW9zdCBmdW5jdGlvbnMgaGVyZSBhcmUgdGFibGUgQU0gdXRpbGl0 aWVzICh0YWJsZWFtX3V0aWxfKiksIGNhbGxlZCBieQogICogdGFibGUgQU1zIGR1cmluZyBhbWdl dGJhdGNoIGluZGV4IHNjYW5zLiAgVGhlc2UgbWFuYWdlIHRoZSBiYXRjaCByaW5nCiAgKiBidWZm ZXIncyBsaWZlY3ljbGUgYW5kIHBvc2l0aW9uYWwgc3RhdGUsIGFuZCBoZWxwIHdpdGggY2VydGFp biBhc3BlY3RzIG9mCiAgKiByZXNvdXJjZSBtYW5hZ2VtZW50LiAgVGhlIHRhYmxlIEFNIHVzZXMg c2NhblBvcyAoYW5kIGl0cyBzY2FuQmF0Y2ggYmF0Y2gpCi0gKiB0byByZXR1cm4gaXRlbXMgZnJv bSBiYXRjaGVzIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2guCisgKiB0byByZXR1cm4gaXRlbXMgZnJv bSBiYXRjaGVzIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2guICBUYWJsZSBBTXMgdGhhdAorICogc3Vw cG9ydCBpbmRleCBJL08gcHJlZmV0Y2hpbmcgdXNlIHByZWZldGNoUG9zIChhbmQgaXRzIHByZWZl dGNoQmF0Y2ggYmF0Y2gpCisgKiBieSBpbXBsZW1lbnRpbmcgYSByZWFkIHN0cmVhbSBjYWxsYmFj ayB0aGF0IGNvbnN1bWVzIGl0ZW1zIHdlbGwgYWhlYWQgb2YKKyAqIHNjYW5Qb3MuCiAgKgogICog VGhlcmUgYXJlIGFsc28gc29tZSBpbmRleCBBTSB1dGlsaXRpZXMgKGluZGV4YW1fdXRpbF8qKSwg Y2FsbGVkIGJ5IGluZGV4CiAgKiBBTXMgdGhhdCBpbXBsZW1lbnQgdGhlIGFtZ2V0YmF0Y2ggaW50 ZXJmYWNlLCB0byBoZWxwIG1hbmFnZSByZXNvdXJjZXMgbGlrZQpAQCAtNTgsNiArNjUsNyBAQCB0 YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBlbmRz Y2FuKQogCWJvb2wJCW1hcmtCYXRjaEZyZWVkID0gZmFsc2U7CiAKIAliYXRjaHJpbmdidWYtPnNj YW5Qb3MudmFsaWQgPSBmYWxzZTsKKwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0g ZmFsc2U7CiAJYmF0Y2hyaW5nYnVmLT5tYXJrUG9zLnZhbGlkID0gZmFsc2U7CiAKIAlmb3IgKHVp bnQ4IGkgPSBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaDsgaSAhPSBiYXRjaHJpbmdidWYtPm5leHRC YXRjaDsgaSsrKQpAQCAtMTc2LDcgKzE4NCwxMiBAQCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX21h cmtfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKICAqIHRoZSBjdXJyZW50IHNjYW5CYXRjaCB3aGVu IG5lZWRlZC4KICAqCiAgKiBXZSBqdXN0IGRpc2NhcmQgYWxsIGJhdGNoZXMgKG90aGVyIHRoYW4g bWFya0JhdGNoL3Jlc3RvcmVkIHNjYW5CYXRjaCksCi0gKiBleGNlcHQgd2hlbiBtYXJrQmF0Y2gg aXMgYWxyZWFkeSB0aGUgc2NhbidzIGN1cnJlbnQgc2NhbkJhdGNoLgorICogZXhjZXB0IHdoZW4g bWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRjaC4gIFdlIGFs d2F5cworICogaW52YWxpZGF0ZSBwcmVmZXRjaFBvcy4gIFRoZSByZWFkIHN0cmVhbSBhbmQgcmVs YXRlZCBwcmVmZXRjaGluZyBzdGF0ZSBhcmUKKyAqIHJlc2V0IGJ5IHRoZSBjYWxsZXIgKHdoaWNo IGNhbGxzIHRoaXMgZnVuY3Rpb24gYXMgaXQgcmVzZXRzIHRoYXQgc3RhdGUpLgorICogVGhpcyBh cHByb2FjaCBrZWVwcyB0aGluZ3Mgc2ltcGxlIGZvciB0YWJsZSBBTXM6IG1vc3QgY29kZSB0aGF0 IGRlYWxzIHdpdGgKKyAqIGJhdGNoZXMgaXMgdGhlcmVieSBhYmxlIHRvIGFzc3VtZSB0aGF0IHRo ZSBjb21tb24gY2FzZSB3aGVyZSBzY2FuIGRpcmVjdGlvbgorICogbmV2ZXIgY2hhbmdlcyBpcyB0 aGUgb25seSBjYXNlLgogICoKICAqIE5vdGU6IFRoaXMgcmVsaWVzIG9uIHRoZSBhc3N1bXB0aW9u IHRoYXQgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQgc2NhblBvcy4KICAqIFRhYmxlIEFNcyBzaG91 bGQgb25seSBjYWxsIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQgZnJvbSB3aXRoaW4gdGhl aXIKQEAgLTIwMyw2ICsyMTYsMTQgQEAgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3Bv cyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJQXNzZXJ0KG1hcmtQb3MtPml0ZW0gPj0gbWFya0JhdGNo LT5maXJzdEl0ZW0gJiYKIAkJICAgbWFya1Bvcy0+aXRlbSA8PSBtYXJrQmF0Y2gtPmxhc3RJdGVt KTsKIAorCS8qCisJICogUmVzdG9yaW5nIGEgbWFyayBhbHdheXMgcmVxdWlyZXMgc3RvcHBpbmcg cHJlZmV0Y2hpbmcuICBUaGlzIGlzIHNpbWlsYXIKKwkgKiB0byB0aGUgaGFuZGxpbmcgdGFibGUg QU1zIGltcGxlbWVudCB0byBkZWFsIHdpdGggYSB0dXBsZS1sZXZlbCBjaGFuZ2UKKwkgKiBpbiB0 aGUgc2NhbidzIGRpcmVjdGlvbi4gIFRoZSByZWFkIHN0cmVhbSBtdXN0IGhhdmUgYWxyZWFkeSBi ZWVuIHJlc2V0CisJICogYnkgdGhlIGNhbGxlciAodmlhIHRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0 KS4KKwkgKi8KKwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CisKIAlp ZiAoc2NhbkJhdGNoID09IG1hcmtCYXRjaCkKIAl7CiAJCS8qIG1hcmtCYXRjaCBpcyBhbHJlYWR5 IHNjYW5CYXRjaDsgbmVlZG4ndCBjaGFuZ2UgYmF0Y2hyaW5nYnVmICovCkBAIC0yNzMsNiArMjk0 LDEzIEBAIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBz Y2FuKQogICogdG8gZGV0ZXJtaW5lIHdoaWNoIGJhdGNoIGNvbWVzIG5leHQgaW4gdGhlIG5ldyBz Y2FuIGRpcmVjdGlvbi4gIFRoaXMKICAqIGFwcHJvYWNoIGlzbid0IHBhcnRpY3VsYXJseSBlZmZp Y2llbnQsIGJ1dCBpdCB3b3JrcyB3ZWxsIGVub3VnaCBmb3Igd2hhdAogICogb3VnaHQgdG8gYmUg YSByZWxhdGl2ZWx5IHJhcmUgb2NjdXJyZW5jZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIHJl c2V0IHRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0gYmVmb3JlIGNhbGxpbmcgaGVyZS4gIFRoYXQKKyAq IG5lZWRzIHRvIGhhcHBlbiBhcyBzb29uIGFzIHRoZSBzY2FuIHJlcXVlc3RzIGEgdHVwbGUgaW4g d2hhdGV2ZXIgc2NhbgorICogZGlyZWN0aW9uIGlzIG9wcG9zaXRlLXRvLWN1cnJlbnQuICBXZSBv bmx5IGRlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUKKyAqIHNjYW4gYmFja3MgdXAgYnkgZW5v dWdoIGl0ZW1zIHRvIGNyb3NzIGEgYmF0Y2ggYm91bmRhcnkgKHdoZW4gdGhlIHNjYW4KKyAqIHJl c3VtZXMgc2Nhbm5pbmcgaW4gaXRzIG9yaWdpbmFsIGRpcmVjdGlvbi9lbmRzIGJlZm9yZSBjcm9z c2luZyBhIGJvdW5kYXJ5LAorICogdGhlcmUgaXNuJ3QgYW55IG5lZWQgdG8gY2FsbCBoZXJlKS4K ICAqLwogdm9pZAogdGFibGVhbV91dGlsX3NjYW5iYXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVz YyBzY2FuKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggMWM1NzVlNTZm Li42ZmNiODE1ZjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3Rz aXplLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMTQ2 LDYgKzE0Niw3IEBAIGludAkJCW1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOwog Ym9vbAkJZW5hYmxlX3NlcXNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4c2NhbiA9IHRy dWU7CiBib29sCQllbmFibGVfaW5kZXhvbmx5c2NhbiA9IHRydWU7Citib29sCQllbmFibGVfaW5k ZXhzY2FuX3ByZWZldGNoID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9iaXRtYXBzY2FuID0gdHJ1ZTsK IGJvb2wJCWVuYWJsZV90aWRzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9zb3J0ID0gdHJ1ZTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggYWZhYTA1OGIw Li5hY2U1NmY3YTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0 CkBAIC05NDEsNiArOTQxLDEzIEBACiAgIGJvb3RfdmFsID0+ICd0cnVlJywKIH0sCiAKK3sgbmFt ZSA9PiAnZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCcsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0 ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKKyAgc2hv cnRfZGVzYyA9PiAnRW5hYmxlcyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMgYW5kIGluZGV4 LW9ubHkgc2NhbnMuJywKKyAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKKyAgdmFyaWFibGUgPT4g J2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gnLAorICBib290X3ZhbCA9PiAndHJ1ZScsCit9LAor CiB7IG5hbWUgPT4gJ2VuYWJsZV9tYXRlcmlhbCcsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKICAgc2hvcnRf ZGVzYyA9PiAnRW5hYmxlcyB0aGUgcGxhbm5lclwncyB1c2Ugb2YgbWF0ZXJpYWxpemF0aW9uLics CiAgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggYWMzOGNkZGFhLi44NzA1ZGQ1ZjMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9z cmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTQzMSw2ICs0 MzEsNyBAQAogI2VuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ID0gb24KICNlbmFibGVfaW5kZXhzY2Fu ID0gb24KICNlbmFibGVfaW5kZXhvbmx5c2NhbiA9IG9uCisjZW5hYmxlX2luZGV4c2Nhbl9wcmVm ZXRjaCA9IG9uCiAjZW5hYmxlX21hdGVyaWFsID0gb24KICNlbmFibGVfbWVtb2l6ZSA9IG9uCiAj ZW5hYmxlX21lcmdlam9pbiA9IG9uCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNn bWwgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggZmE1NjZjOWU1Li44ZTlkOGYyYWMg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv Y29uZmlnLnNnbWwKQEAgLTU5MzgsNiArNTkzOCwyMiBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9 IgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxp c3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1pbmRleHNjYW4tcHJlZmV0Y2giIHhyZWZsYWJlbD0iZW5h YmxlX2luZGV4c2Nhbl9wcmVmZXRjaCI+CisgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfaW5k ZXhzY2FuX3ByZWZldGNoPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8 aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmVuYWJsZV9pbmRleHNjYW5fcHJl ZmV0Y2g8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAg PC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBh cmE+CisgICAgICAgIEVuYWJsZXMgb3IgZGlzYWJsZXMgcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNj YW4gYW5kIGluZGV4LW9ubHkgc2NhbgorICAgICAgICBwbGFuIHR5cGVzLiAgUHJlZmV0Y2hpbmcg Y2FuIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgcmVhZGluZyB0YWJsZSBBTQorICAgICAgICBwYWdl cyBhaGVhZCBvZiB3aGVuIHRoZXkgYXJlIG5lZWRlZCBkdXJpbmcgaW5kZXggc2NhbnMuICBUaGUg ZGVmYXVsdAorICAgICAgICBpcyA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJh PgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxp c3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1tYXRlcmlhbCIgeHJlZmxhYmVsPSJlbmFibGVfbWF0ZXJp YWwiPgogICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX21hdGVyaWFsPC92YXJuYW1lPiAoPHR5 cGU+Ym9vbGVhbjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggMjdm Y2QwNGQ1Li5hZmEzZmUyZDcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtODU0LDkgKzg1NCwxMiBAQCBhbWdl dGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgIDxwYXJhPgogICAgVGhlIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIGFuIGFsdGVybmF0aXZlIHRvCiAgICA8 ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHRoYXQgcmV0dXJucyBtYXRjaGluZyBpbmRl eCBlbnRyaWVzIGluIGJhdGNoZXMKLSAgIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuICBCeSBy ZXR1cm5pbmcgYWxsIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgZnJvbSBhCi0gICBzaW5nbGUgaW5k ZXggcGFnZSB0b2dldGhlciwgdGhlIHRhYmxlIEFNIGdhaW5zIHZpc2liaWxpdHkgaW50byB3aGlj aCB0YWJsZQotICAgYmxvY2tzIHdpbGwgYmUgbmVlZGVkIGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAg IHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuIFRoaXMgZW5hYmxlcyB0aGUgdGFibGUgYWNjZXNz IG1ldGhvZCB0bworICAgb3B0aW1pemUgdGFibGUgYmxvY2sgYWNjZXNzIHBhdHRlcm5zIGFuZCBw ZXJmb3JtIEkvTyBwcmVmZXRjaGluZy4KKyAgIEJ5IHJldHVybmluZyBhbGwgbWF0Y2hpbmcgaW5k ZXggZW50cmllcyBmcm9tIGEgc2luZ2xlIGluZGV4IHBhZ2UgdG9nZXRoZXIsCisgICB0aGUgdGFi bGUgQU0gY2FuIHJlYWRhaGVhZCB0aHJvdWdoIHRoZSBpbmRleCBhbmQgaWRlbnRpZnkgd2hpY2gg dGFibGUKKyAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCwgYWxsb3dpbmcgcHJlZmV0Y2hpbmcgb2Yg dGFibGUgQU0gcGFnZXMgZHVyaW5nCisgICBvcmRlcmVkIGluZGV4IHNjYW5zLgogICA8L3BhcmE+ CiAKICAgPHBhcmE+CkBAIC05OTAsNyArOTkzLDkgQEAgYW11bmd1YXJkYmF0Y2ggKEluZGV4U2Nh bkRlc2Mgc2NhbiwKICAgICB0byBmcmVlIHRoZSBwaW5zIGF0IGFuIG9wcG9ydHVuZSBwb2ludCAo YXQgYSBtaW5pbXVtIHdoZW5ldmVyCiAgICAgPGZ1bmN0aW9uPmFtZW5kc2NhbjwvZnVuY3Rpb24+ IGlzIGNhbGxlZCwgYW5kIHR5cGljYWxseSB3aGVuCiAgICAgPGZ1bmN0aW9uPmFtcmVzY2FuPC9m dW5jdGlvbj4gaXMgY2FsbGVkKS4gIEl0IG11c3QgYWxzbyBrZWVwIHRoZSBudW1iZXIgb2YKLSAg ICByZXRhaW5lZCBwaW5zIGZpeGVkIGFuZCBzbWFsbC4KKyAgICByZXRhaW5lZCBwaW5zIGZpeGVk IGFuZCBzbWFsbCwgdG8gYXZvaWQgZXhoYXVzdGluZyB0aGUgYmFja2VuZCdzIGJ1ZmZlcgorICAg IHBpbiBsaW1pdCAod2hpY2ggaXMgc2hhcmVkIHdpdGggdGhlIHRhYmxlIEFNJ3MgcmVhZCBzdHJl YW0gZm9yIGluZGV4IHNjYW4KKyAgICBwcmVmZXRjaGluZykuCiAgICA8L3BhcmE+CiAgIDwvbm90 ZT4KIApAQCAtMTUzMiw2ICsxNTM3LDYwIEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5 cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgIG9yIHZpY2UgdmVy c2EsIGlmIGl0cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJ IG9yIHRoZSBvdGhlci4KICAgPC9wYXJhPgogCisgIDxzZWN0MiBpZD0iaW5kZXgtc2Nhbm5pbmct YmF0Y2hlcyI+CisgICA8dGl0bGU+VGFibGUgQU0gQ29uc2lkZXJhdGlvbnMgZm9yIEJhdGNoIFNj YW5uaW5nPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgVGhpcyBzZWN0aW9uIGlzIHByaW1hcmls eSByZWxldmFudCB0byA8bGluayBsaW5rZW5kPSJ0YWJsZWFtIj50YWJsZSBhY2Nlc3MKKyAgICAg bWV0aG9kPC9saW5rPiBhdXRob3JzLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBXaGVu IGFuIGluZGV4IHNjYW4gdXNlcyB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBp bnRlcmZhY2UsIHRoZQorICAgIHRhYmxlIEFNIGhhcyBzb2xlIGNvbnRyb2wgb3ZlciB0aGUgPHN0 cnVjdG5hbWU+SW5kZXhTY2FuRGVzYzwvc3RydWN0bmFtZT4ncworICAgIDxzdHJ1Y3RmaWVsZD5i YXRjaHJpbmdidWY8L3N0cnVjdGZpZWxkPiwgaW5jbHVkaW5nIGNyZWF0aW5nLCByZXNldHRpbmcs CisgICAgYW5kIGVuZGluZyB0aGUgYmF0Y2ggcmluZyBidWZmZXIgd2l0aGluIHRoZSBhcHByb3By aWF0ZSB0YWJsZSBBTQorICAgIGNhbGxiYWNrcywgYW5kIG1hbmFnaW5nIHBvc2l0aW9uYWwgc3Rh dGUgYW5kIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NraW5nCisgICAgKHRoYXQgaXMsIGRldGVybWlu aW5nIHdoZW4gdG8gdW5ndWFyZCBlYWNoIGJhdGNoLCB3aGljaCB3aWxsIHR5cGljYWxseQorICAg IHJlbGVhc2UgYW4gaW5kZXggcGFnZSBidWZmZXIgcGluIGFzc29jaWF0ZWQgd2l0aCB0aGUgYmF0 Y2gpLiAgSW5kZXggYWNjZXNzCisgICAgbWV0aG9kcyBzaG91bGQgbm90IGFjY2VzcyBvciBtYW5p cHVsYXRlIHRoZXNlIGZpZWxkcy4gIFNlZSB0aGUKKyAgICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jPC9maWxlbmFtZT4KKyAgICBpbXBsZW1lbnRh dGlvbiBmb3IgYSByZWZlcmVuY2UgZXhhbXBsZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+Cisg ICAgVGhlIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2l0aGluCisg ICAgPHN0cnVjdGZpZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0ZmllbGQ+IHRyYWNrcyB3aGljaCBi YXRjaCBhbmQgaXRlbSB3aXRoaW4KKyAgICB0aGF0IGJhdGNoIHdpbGwgYmUgcmV0dXJuZWQgbmV4 dCB0byB0aGUgZXhlY3V0b3IuICBUaGUgdGFibGUgQU0gbXVzdCBhZHZhbmNlCisgICAgPHN0cnVj dGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBhcyB0dXBsZXMgYXJlIHJldHVybmVkIGJ5Cisg ICAgPGZ1bmN0aW9uPnRhYmxlX2luZGV4X2dldG5leHRfc2xvdDwvZnVuY3Rpb24+LCBhbmQgbXVz dCBhbHNvIG1vZGlmeSB0aGlzCisgICAgZmllbGQgd2hlbiByZXN0b3JpbmcgYSBzYXZlZCBtYXJr LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgPHN0cnVjdGZpZWxkPnByZWZldGNo UG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdHJhY2tzIHRoZSBwb3NpdGlvbiB1c2VkCisgICAgZm9y IEkvTyBwcmVmZXRjaGluZy4gIEl0IGlzIGdlbmVyYWxseSBhZHZhbmNlZCBieSBpbml0aWFsaXpp bmcgaXQgZnJvbQorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gd2l0aGlu IGEgcmVhZCBzdHJlYW0gY2FsbGJhY2ssIGFsbG93aW5nCisgICAgdGhlIHRhYmxlIEFNIHRvIHBy ZWZldGNoIHRhYmxlIGJsb2NrcyBwb2ludGVkIHRvIGJ5IGl0ZW1zIHRoYXQgYXJlIHdlbGwKKyAg ICBhaGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uLiAgSW5pdGlhbGx5CisgICAgPHN0 cnVjdGZpZWxkPnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVsZD4gc3RhcnRzIGF0CisgICAgPHN0cnVj dGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiwgYnV0IGFzIHRoZSByZWFkIHN0cmVhbSByYW1w cyB1cCBpdCBjYW4KKyAgICBnZXQgZmFyIGFoZWFkICZtZGFzaDsgc3Bhbm5pbmcgbXVsdGlwbGUg aW5kZXggcGFnZXMgaWYgbmVjZXNzYXJ5IHRvCisgICAgbWFpbnRhaW4gYW4gb3B0aW1hbCBJL08g cHJlZmV0Y2ggZGlzdGFuY2UgZm9yIHRhYmxlIGJsb2NrIHJlYWRzLiAgQSBtYWpvcgorICAgIGdv YWwgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIHRv IGFsbG93IHRoZQorICAgIHRhYmxlIEFNIHRvIHByZWZldGNoIHdpdGhvdXQgYmVpbmcgbGltaXRl ZCB0byBpdGVtcyBmcm9tIHRoZSBjdXJyZW50CisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0 cnVjdGZpZWxkPiBiYXRjaCdzIGluZGV4IGxlYWYgcGFnZS4KKyAgIDwvcGFyYT4KKworICAgPHBh cmE+CisgICAgRm9yIGRldGFpbHMgb24gdGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIGR1cmlu ZyBiYXRjaCBzY2FucywgaW5jbHVkaW5nCisgICAgdGhlIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVk aWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBwb2xpY3kgYW5kIHRoZQorICAgIDxmdW5jdGlvbj5h bXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+IGNhbGxiYWNrLCBzZWUKKyAgICA8eHJlZiBsaW5rZW5k PSJpbmRleC1sb2NraW5nIi8+LgorICAgPC9wYXJhPgorCisgIDwvc2VjdDI+CisKICA8L3NlY3Qx PgogCiAgPHNlY3QxIGlkPSJpbmRleC1sb2NraW5nIj4KQEAgLTE2MzQsNyArMTY5MywyNyBAQCBh bXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lk IG9wY2ludHlwZSk7CiAgICBpbW1lZGlhdGVseSBhZnRlciBzY2FubmluZyB0aGUgY29ycmVzcG9u ZGluZyBpbmRleCBlbnRyeS4gIFRoaXMgaXMKICAgIGV4cGVuc2l2ZSBmb3IgYSBudW1iZXIgb2Yg cmVhc29ucy4gIFRoZQogICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZh Y2UsIGJ5IGNvbnRyYXN0LCB3YXMgZGVzaWduZWQgdG8KLSAgIGFsbG93IHNjYW5zIHRvIGJlIDxx dW90ZT5hc3luY2hyb25vdXM8L3F1b3RlPi4KKyAgIGFsbG93IHNjYW5zIHRvIGJlIDxxdW90ZT5h c3luY2hyb25vdXM8L3F1b3RlPjogYnkgY29sbGVjdGluZyBiYXRjaGVzIG9mCisgICBUSURzIGZy b20gbXVsdGlwbGUgaW5kZXggcGFnZXMsIHRoZSB0YWJsZSBBTSBjYW4gcHJlZmV0Y2ggdGhlIGNv cnJlc3BvbmRpbmcKKyAgIHRhYmxlIGJsb2NrcyB3ZWxsIGFoZWFkIG9mIHRoZSBjdXJyZW50IHNj YW4gcG9zaXRpb24gKHVzaW5nIGFzeW5jaHJvbm91cworICAgSS9PIHdoZW4gYXZhaWxhYmxlKSwg YWxsb3dpbmcgYSBtb3JlIGVmZmljaWVudCBoZWFwIGFjY2VzcyBwYXR0ZXJuLiAgTm90CisgICBh bGwgc2NhbnMgZW5kIHVwIGJlaW5nIGFzeW5jaHJvbm91cyBpbiBwcmFjdGljZSwgYnV0IHRoZSBp bnRlcmZhY2UgaXMKKyAgIGRlc2lnbmVkIHRvIGFsbG93IGl0LiAgUGVyIHRoZSBhYm92ZSBhbmFs eXNpcywgd2UgbXVzdCB1c2UgdGhlIHN5bmNocm9ub3VzCisgICBhcHByb2FjaCBmb3Igbm9uLU1W Q0MtY29tcGxpYW50IHNuYXBzaG90cyAoZXZlbiB3aGVuIHVzaW5nIHRoZQorICAgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UpLCBidXQgYW4gYXN5bmNocm9ub3VzIHNj YW4gaXMKKyAgIHdvcmthYmxlIGZvciBwbGFpbiBpbmRleCBzY2FucyB0aGF0IHVzZSBhbiBNVkND IHNuYXBzaG90LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBCZWNhdXNlIHRoZSB0YWJsZSBB TSByZWFkcyBtdWx0aXBsZSBpbmRleCBsZWFmIHBhZ2VzIGFoZWFkIHZpYQorICAgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiB0byBmYWNpbGl0YXRlIHRoaXMgcHJlZmV0Y2hpbmcsIGEg bm9uLU1WQ0MKKyAgIHNjYW4gd291bGQgaGF2ZSB0byBob2xkIHRoZSBUSUQgcmVjeWNsaW5nIGlu dGVybG9jayBhY3Jvc3MgdGhlIGVudGlyZQorICAgcmVhZC1haGVhZCB3aW5kb3csIHNpbmNlIGl0 IGhhcyBubyBoZWFwLXZpc2liaWxpdHkgYmFja3N0b3AgdG8gZmFsbCBiYWNrIG9uLgorICAgVGhh dCBpcyBpbXByYWN0aWNhbCwgc28gSS9PIHByZWZldGNoaW5nIHdpdGgKKyAgIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gaXMgb25seSBwb3NzaWJsZSB3aGVuIGFuIE1WQ0MtY29tcGxp YW50CisgICBzbmFwc2hvdCBpcyBpbiB1c2UuICBBbiBNVkNDIHNjYW4gZWl0aGVyIGRyb3BzIHRo ZSBpbnRlcmxvY2sgaW1tZWRpYXRlbHkgb3IsCisgICBmb3IgaW5kZXgtb25seSBzY2FucywgaG9s ZHMgb25seSBhIGJvdW5kZWQgbnVtYmVyIG9mIHBpbnMgKG9uZSBwZXIgaW4tZmxpZ2h0CisgICBi YXRjaCkuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC90 YWJsZWFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sCmluZGV4IDljY2Y1YjczOS4u NDU0MmUwMGI0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKQEAgLTEyOSw2ICsxMjksMTQgQEAgbXlfdGFibGVhbV9o YW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAgIG9wdGlvbmFsKSwgdGhlIGJsb2NrIG51bWJlciBu ZWVkcyB0byBwcm92aWRlIGxvY2FsaXR5LgogIDwvcGFyYT4KIAorIDxwYXJhPgorICBUYWJsZSBh Y2Nlc3MgbWV0aG9kcyBtdXN0IHN1cHBvcnQgb3JkZXJlZCBpbmRleCBzY2FucyB1c2luZyB0aGUK KyAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UuIFNlZSBhbHNvCisg IDx4cmVmIGxpbmtlbmQ9ImluZGV4LXNjYW5uaW5nLWJhdGNoZXMiLz4gZm9yIGRldGFpbHMgb24g aW50ZXJmYWNpbmcgd2l0aAorICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGluZGV4 IGFjY2VzcyBtZXRob2RzLCBhbmQgbWFuYWdpbmcgdGhlCisgIHNjYW4ncyBwb3NpdGlvbi4KKyA8 L3BhcmE+CisKICA8cGFyYT4KICAgRm9yIGNyYXNoIHNhZmV0eSwgYW4gQU0gY2FuIHVzZSBwb3N0 Z3JlcycgPGxpbmsKICAgbGlua2VuZD0id2FsIj48YWNyb255bT5XQUw8L2Fjcm9ueW0+PC9saW5r Piwgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb24uCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lz dmlld3Mub3V0CmluZGV4IDEzMmI1NmE1OC4uMzJiYzNkZDNlIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTY2LDYgKzE2Niw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0 aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVf aW5jcmVtZW50YWxfc29ydCAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleG9ubHlzY2FuICAgICAg ICAgICB8IG9uCiAgZW5hYmxlX2luZGV4c2NhbiAgICAgICAgICAgICAgIHwgb24KKyBlbmFibGVf aW5kZXhzY2FuX3ByZWZldGNoICAgICAgfCBvbgogIGVuYWJsZV9tYXRlcmlhbCAgICAgICAgICAg ICAgICB8IG9uCiAgZW5hYmxlX21lbW9pemUgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVf bWVyZ2Vqb2luICAgICAgICAgICAgICAgfCBvbgpAQCAtMTgwLDcgKzE4MSw3IEBAIHNlbGVjdCBu YW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsK ICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAg ICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwgb24K LSgyNSByb3dzKQorKDI2IHJvd3MpCiAKIC0tIFRoZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBk ZXNjcmlwdGlvbnMgZm9yIHZhcmlvdXMgdHlwZXMuICBJbmplY3Rpb25Qb2ludAogLS0gbWF5IGJl IHByZXNlbnQgb3IgYWJzZW50LCBkZXBlbmRpbmcgb24gaGlzdG9yeSBzaW5jZSBsYXN0IHBvc3Rt YXN0ZXIgc3RhcnQuCi0tIAoyLjUzLjAKCg== --0000000000000468e006539f51e8 Content-Type: application/octet-stream; name="v26-0007-Allow-read_stream_reset-to-not-wait-for-IO-compl.patch" Content-Disposition: attachment; filename="v26-0007-Allow-read_stream_reset-to-not-wait-for-IO-compl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq31b3e63 RnJvbSBiMDliZjU0MTBkY2EyYWI3NTkyNGMwMTU3ZDlhOTIyZjRiYjQ2ZDM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgNSBBcHIgMjAyNiAwMDo0Mzo1NCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI2IDcv OV0gQWxsb3cgcmVhZF9zdHJlYW1fcmVzZXQoKSB0byBub3Qgd2FpdCBmb3IgSU8KIGNvbXBsZXRp b24KCk5vdCB3YWl0aW5nIGZvciBJTyBkdXJpbmcgcmVhZF9zdHJlYW1fcmVzZXQoKSBjYW4gYmUg aW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZQppbiBjYXNlcyB3aGVyZSByZWFkIHN0cmVhbXMgYXJl IGZyZXF1ZW50bHkgcmVzZXQgYmVmb3JlIHRoZSBlbmQgaXMKcmVhY2hlZC4gQ3VycmVudCB1c2Vy cyBkbyBub3QgY29tbW9ubHkgZG8gdGhhdCwgYnV0IHRoZSB1cGNvbWluZyB3b3JrIHRvIHVzZSBh CnJlYWQgc3RyZWFtIHRvIHByZWZldGNoIHRhYmxlIGJsb2NrcyBhcyBwYXJ0IG9mIGluZGV4IHNj YW5zIGNhbiBkbyBzbwpmcmVxdWVudGx5IGluIHNvbWUgcXVlcnkgcGF0dGVybnMuIEUuZy4gaWYg dGhlcmUgaXMgYW4gaW5kZXggc2NhbiBvbiB0aGUgaW5uZXIKc2lkZSBvZiBhIG5lc3RlZCBsb29w IGFudGlqb2luLgoKVGhpcyB0YWtlcyBhIGJpdCBvZiBjYXJlIHRvIGRvIHJpZ2h0LiBKdXN0IGlu dHJvZHVjaW5nIHN1cHBvcnQgZm9yIGFiYW5kb25pbmcKYSBBSU8gaGFuZGxlIGNvdWxkIGxlYWQg dG8gdGhlIElPJ3MgY29tcGxldGlvbiBub3QgYmVpbmcgcHJvY2Vzc2VkIHVudGlsIHRoZQpiYWNr ZW5kIGV4aXRzLiBUaGF0J3MgYmFkIGJlY2F1c2UgaXQgd291bGQgbGVhZCB0byByZXNvdXJjZXMg aGVsZCBvbnRvIGZvciB0aGUKSU8gKGUuZy4gYnVmZmVyIHBpbnMpIG5vdCBiZWluZyByZWxlYXNl ZCBhbmQgdGhlIGhhbmRsZSBzaG93aW5nIHVwIGluIHBnX2Fpb3MuCgpUbyBhdm9pZCB0aGF0LCB0 aGUgZXhpc3RpbmcgcmVzb3duZXIgY2xlYW51cCBpcyBjaGFuZ2VkIHRvIHdhaXQgZm9yIHRoZSBJ TydzCmNvbXBsZXRpb24sIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBieSB0aGUgZW5kIG9mIHRoZSBz dGF0ZW1lbnQgdGhlIElPIGhhcwpjb21wbGV0ZWQuIFdlIG1pZ2h0IGV2ZW50dWFsbHkgd2FudCB0 byByZWxheCB0aGF0IGZvciBzb21lIG9wZXJhdGlvbnMgKGUuZy4sCmZvciBiYWNrZ3JvdW5kIFdB TCB3cml0ZXMgb3Igb3Bwb3J0dW5pc3RpYyBwcmVmZXRjaGluZykuCgpEaXNjdXNzaW9uOiBodHRw czovL3Bvc3Rnci5lcy9tL2YzeHhmcmthZmp4cHlxeHl3Y3hyaWN4Z3lpemppcmZjZXljaHl4c2du N2J3anA1ZWRhQGt3YmR1aHk3dGZtdQotLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmggICAg ICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyAgICAgICAg ICAgICAgIHwgMTAyICsrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMgICAgICAgfCAgMzEgKysrKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyAgICAgICAgIHwgIDM0ICsrKysrKysKIHNyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vdC8wMDFfYWlvLnBsICAgICAgfCAxMDcgKysrKysrKysrKysrKysrKysrKysKIHNyYy90 ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwgfCAgIDIgKy0KIHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYyAgICAgICAgfCAgMzggKysrKystLQogOCBmaWxl cyBjaGFuZ2VkLCAyODUgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW8uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmgK aW5kZXggZWM1NDNiNzg0Li5hYjdmYWQxMzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYWlvLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW8uaApAQCAtMzI4LDYgKzMyOCw4 IEBAIGV4dGVybiBpbnQJcGdhaW9fd3JlZl9nZXRfaWQoUGdBaW9XYWl0UmVmICppb3cpOwogZXh0 ZXJuIHZvaWQgcGdhaW9fd3JlZl93YWl0KFBnQWlvV2FpdFJlZiAqaW93KTsKIGV4dGVybiBib29s IHBnYWlvX3dyZWZfY2hlY2tfZG9uZShQZ0Fpb1dhaXRSZWYgKmlvdyk7CiAKK2V4dGVybiB2b2lk IHBnYWlvX3dyZWZfYWJhbmRvbihQZ0Fpb1dhaXRSZWYgKmlvdyk7CisKIAogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggNjgzN2IzNWZjLi5jMDJiZmQ2 ODUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMjUyLDYgKzI1Miw3IEBAIGV4dGVybiBib29sIFN0 YXJ0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKIAkJCQkJCQkg aW50ICpuYmxvY2tzLAogCQkJCQkJCSBpbnQgZmxhZ3MpOwogZXh0ZXJuIGJvb2wgV2FpdFJlYWRC dWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOworZXh0ZXJuIHZvaWQgQWJh bmRvblJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOwogCiBleHRl cm4gdm9pZCBSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgVW5sb2Nr UmVsZWFzZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL2Fpby5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKaW5kZXggOGY3 ZTI2NjA3Li43MDA5ZmI3ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fp by5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCkBAIC0xNTIsMTEgKzE1Miwx NSBAQCBjb25zdCBJb01ldGhvZE9wcyAqcGdhaW9fbWV0aG9kX29wczsKICAqIG9wZXJhdGlvbiBz dWNjZWVkZWQgYW5kIGRldGFpbHMgYWJvdXQgdGhlIGZpcnN0IGZhaWx1cmUsIGlmIGFueS4gVGhl IGVycm9yCiAgKiBjYW4gYmUgcmFpc2VkIC8gbG9nZ2VkIHdpdGggcGdhaW9fcmVzdWx0X3JlcG9y dCgpLgogICoKLSAqIFRoZSBsaWZldGltZSBvZiB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYmUgKnJl dCBuZWVkcyB0byBiZSBhdCBsZWFzdCBhcyBsb25nCi0gKiBhcyB0aGUgcGFzc2VkIGluIHJlc293 bmVyLiBJZiB0aGUgcmVzb3duZXIgcmVsZWFzZXMgcmVzb3VyY2VzIGJlZm9yZSB0aGUgSU8KLSAq IGNvbXBsZXRlcyAodHlwaWNhbGx5IGR1ZSB0byBhbiBlcnJvciksIHRoZSByZWZlcmVuY2UgdG8g KnJldCB3aWxsIGJlCi0gKiBjbGVhcmVkLiBJbiBjYXNlIG9mIHJlc293bmVyIGNsZWFudXAgKnJl dCB3aWxsIG5vdCBiZSB1cGRhdGVkIHdpdGggdGhlCi0gKiByZXN1bHRzIG9mIHRoZSBJTyBvcGVy YXRpb24uCisgKiBUaGUgbGlmZXRpbWUgb2YgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5ICpyZXQg bmVlZHMgdG8gYmUgYXQgbGVhc3QgYXMgbG9uZworICogYXMgdGhlIHBhc3NlZCBpbiByZXNvd25l ci4KKyAqCisgKiBJZiB0aGUgcmVzb3duZXIgcmVsZWFzZXMgcmVzb3VyY2VzIGJlZm9yZSB0aGUg SU8gY29tcGxldGVzICh0eXBpY2FsbHkgZHVlCisgKiB0byBhbiBlcnJvciksIHRoZSByZWZlcmVu Y2UgdG8gKnJldCB3aWxsIGJlIGNsZWFyZWQuIEluIGNhc2Ugb2YgcmVzb3duZXIKKyAqIGNsZWFu dXAgKnJldCB3aWxsIG5vdCBiZSB1cGRhdGVkIHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIElPIG9w ZXJhdGlvbi4KKyAqCisgKiBJZiB0aGUgY2FsbGVyIGxvc2VzIGludGVyZXN0IGluIHRoZSBJTyBi ZWZvcmUgY29tcGxldGlvbgorICogcGdhaW9fd3JlZl9hYmFuZG9uKCkgY2FuIGJlIHVzZWQuCiAg Ki8KIFBnQWlvSGFuZGxlICoKIHBnYWlvX2lvX2FjcXVpcmUoc3RydWN0IFJlc291cmNlT3duZXJE YXRhICpyZXNvd25lciwgUGdBaW9SZXR1cm4gKnJldCkKQEAgLTI3OCw2ICsyODIsMTQgQEAgcGdh aW9faW9fcmVsZWFzZV9yZXNvd25lcihkbGlzdF9ub2RlICppb2hfbm9kZSwgYm9vbCBvbl9lcnJv cikKIAlSZXNvdXJjZU93bmVyRm9yZ2V0QWlvSGFuZGxlKGlvaC0+cmVzb3duZXIsICZpb2gtPnJl c293bmVyX25vZGUpOwogCWlvaC0+cmVzb3duZXIgPSBOVUxMOwogCisJLyoKKwkgKiBOZWVkIHRv IHVucmVnaXN0ZXIgdGhlIHJlcG9ydGluZyBvZiB0aGUgSU8ncyByZXN1bHQsIHRoZSBtZW1vcnkg aXQncworCSAqIHJlZmVyZW5jaW5nIGxpa2VseSBoYXMgZ29uZSBhd2F5LiBEbyBzbyBiZWZvcmUg cG90ZW50aWFsbHkgd2FpdGluZworCSAqIGJlbG93LCBhcyB0aGF0IGNvdWxkIGNhdXNlIHRoZSB1 bmRlc2lyZWQgd3JpdGVzLgorCSAqLworCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCisJCWlvaC0+ cmVwb3J0X3JldHVybiA9IE5VTEw7CisKIAlzd2l0Y2ggKChQZ0Fpb0hhbmRsZVN0YXRlKSBpb2gt PnN0YXRlKQogCXsKIAkJY2FzZSBQR0FJT19IU19JRExFOgpAQCAtMzAwLDIyICszMTIsMzIgQEAg cGdhaW9faW9fcmVsZWFzZV9yZXNvd25lcihkbGlzdF9ub2RlICppb2hfbm9kZSwgYm9vbCBvbl9l cnJvcikKIAkJCWlmICghb25fZXJyb3IpCiAJCQkJZWxvZyhXQVJOSU5HLCAiQUlPIGhhbmRsZSB3 YXMgbm90IHN1Ym1pdHRlZCIpOwogCQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCQkJYnJlYWs7 CisKKwkJCS8qIG5vdyB0aGF0IHRoZSBJTyBpcyBzdWJtaXR0ZWQsIG5lZWQgdG8gd2FpdCAqLwor CQkJcGdfZmFsbHRocm91Z2g7CiAJCWNhc2UgUEdBSU9fSFNfU1VCTUlUVEVEOgogCQljYXNlIFBH QUlPX0hTX0NPTVBMRVRFRF9JTzoKIAkJY2FzZSBQR0FJT19IU19DT01QTEVURURfU0hBUkVEOgog CQljYXNlIFBHQUlPX0hTX0NPTVBMRVRFRF9MT0NBTDoKLQkJCS8qIHRoaXMgaXMgZXhwZWN0ZWQg dG8gaGFwcGVuICovCisKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGV4cGVjdGVkIHRvIGhhcHBlbiwg ZS5nLiBhZnRlciBhbiBlcnJvciBvciBhZnRlcgorCQkJICogcGdhaW9fd3JlZl9hYmFuZG9uKCkg d2FzIGNhbGxlZC4KKwkJCSAqCisJCQkgKiBGb3Igbm93IGFsd2F5cyB3YWl0IGZvciB0aGUgSU8n cyBjb21wbGV0aW9uIGR1cmluZyByZXNvd25lcgorCQkJICogY2xlYW51cC4gVGhpcyBwcm92aWRl cyBhIGJvdW5kIG9uIGhvdyBsb25nIGFmdGVyIGFuIGVycm9yIG9yCisJCQkgKiBwZ2Fpb193cmVm X2FiYW5kb24oKSBhbiBJTyBoYW5kbGUgd2lsbCBzaG93IHVwIGFzIHVzZWQgYW5kIGhvdworCQkJ ICogbG9uZyBhbiB1bmNvbXBsZXRlZCBJTyBjYW4gY2F1c2UgcmVzb3VyY2VzIHRvIGJlIHJldGFp bmVkLgorCQkJICoKKwkJCSAqIEl0IGlzIHF1aXRlIHBvc3NpYmxlIHRoYXQgd2UgZXZlbnR1YWxs eSB3YW50IHRvIHN1cHBvcnQgSU8KKwkJCSAqIG9wZXJhdGlvbnMgdGhhdCBsYXN0IGxvbmdlciwg ZS5nLiBmb3IgV0FMIHdyaXRlcyBpbiB0aGUKKwkJCSAqIGJhY2tncm91bmQuIElmIHNvIHdlIHdp bGwgZWl0aGVyIG5lZWQgdG8gdXNlIGEgbG9uZ2VyIGxpdmVkCisJCQkgKiByZXNvd25lciBvciBh ZGQgYSBmbGFnIGNvbnRyb2xsaW5nIHdoZW4gdGhpcyBjbGVhbnVwIGhhcHBlbnMuCisJCQkgKi8K KwkJCXBnYWlvX2lvX3dhaXQoaW9oLCBpb2gtPmdlbmVyYXRpb24pOwogCQkJYnJlYWs7CiAJfQog Ci0JLyoKLQkgKiBOZWVkIHRvIHVucmVnaXN0ZXIgdGhlIHJlcG9ydGluZyBvZiB0aGUgSU8ncyBy ZXN1bHQsIHRoZSBtZW1vcnkgaXQncwotCSAqIHJlZmVyZW5jaW5nIGxpa2VseSBoYXMgZ29uZSBh d2F5LgotCSAqLwotCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCi0JCWlvaC0+cmVwb3J0X3JldHVy biA9IE5VTEw7Ci0KIAlSRVNVTUVfSU5URVJSVVBUUygpOwogfQogCkBAIC0xMDUwLDYgKzEwNzIs NTggQEAgcGdhaW9fd3JlZl9jaGVja19kb25lKFBnQWlvV2FpdFJlZiAqaW93KQogCXJldHVybiBm YWxzZTsKIH0KIAorLyoKKyAqIERlY2xhcmUgdGhhdCBhIHdhaXQgcmVmZXJlbmNlIHRvIGFuIElP LCBzdGFydGVkIGJ5IHRoaXMgYmFja2VuZCwgaXMgbm90IG9mCisgKiBpbnRlcmVzdCB0byB0aGlz IGJhY2tlbmQgYW55bW9yZS4gT25jZSBjYWxsZWQsIHRoZSBQZ0Fpb1JldHVybiAqcmV0IHBhc3Nl ZAorICogdG8gcGdhaW9faW9fYWNxdWlyZVtfbmJdKCkgd2lsbCBub3QgYmUgdXBkYXRlZCBhbnlt b3JlIGFuZCB0aHVzIGNhbiBiZQorICogZnJlZWQuCisgKi8KK3ZvaWQKK3BnYWlvX3dyZWZfYWJh bmRvbihQZ0Fpb1dhaXRSZWYgKmlvdykKK3sKKwl1aW50NjQJCXJlZl9nZW5lcmF0aW9uOworCWJv b2wJCWFtX293bmVyOworCVBnQWlvSGFuZGxlICppb2g7CisJUGdBaW9IYW5kbGVTdGF0ZSBzdGF0 ZTsKKworCWlvaCA9IHBnYWlvX2lvX2Zyb21fd3JlZihpb3csICZyZWZfZ2VuZXJhdGlvbik7CisK KwlhbV9vd25lciA9IGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKKworCS8qCisJ ICogSXQgaXMgc2FmZSB0byBwZXJmb3JtIHRoaXMgY2hlY2sgYmVmb3JlIGNoZWNraW5nIGlmIHRo ZSBJTyB3YXMgcmVjeWNsZWQKKwkgKiAoYW5kIGJlZm9yZSB3ZSBob2xkIGludGVycnVwdHMpIGFz IHRoZSBvd25lciBvZiBhbiBJTyBjYW5ub3QgY2hhbmdlLgorCSAqLworCWlmICghYW1fb3duZXIp CisJCWVsb2coRVJST1IsICJvbmx5IElPcyBvd25lZCBieSBjdXJyZW50IGJhY2tlbmQgY2FuIGJl IGFiYW5kb25lZCIpOworCisJLyoKKwkgKiBUbyBlbnN1cmUgdGhhdCB0aGUgSU8gd29uJ3QgYmUg cmVjeWNsZWQgd2hpbGUgd2UgY2hlY2sgKGUuZy4gZHVyaW5nIHRoZQorCSAqIGVtaXNzaW9uIG9m IGEgZGVidWcgbWVzc2FnZSkuCisJICovCisJSE9MRF9JTlRFUlJVUFRTKCk7CisKKwlpZiAoIXBn YWlvX2lvX3dhc19yZWN5Y2xlZChpb2gsIHJlZl9nZW5lcmF0aW9uLCAmc3RhdGUpKQorCXsKKwkJ cGdhaW9fZGVidWdfaW8oREVCVUczLCBpb2gsCisJCQkJCSAgICJkaXNjYXJkaW5nIHJlc3VsdCAl cCwgcmVzb3duZXI6ICVwIiwKKwkJCQkJICAgaW9oLT5yZXBvcnRfcmV0dXJuLCBpb2gtPnJlc293 bmVyKTsKKworCQlpZiAoc3RhdGUgPCBQR0FJT19IU19TVUJNSVRURUQpCisJCQllbG9nKEVSUk9S LCAiYWJhbmRvbmluZyBJTyBpbiB3cm9uZyBzdGF0ZTogJWQiLCBzdGF0ZSk7CisKKwkJLyoKKwkJ ICogQWxsIHdlIG5lZWQgdG8gZG8gdG8gYWJhbmRvbiB0aGUgSU8gaXMgdG8gY2xlYXIgaXRzIHJl cG9ydF9yZXR1cm4KKwkJICogZmllbGQuIFdpdGhvdXQgdGhhdCB3ZSBjb3VsZCBlbmQgdXAgd3Jp dGluZyB0byBmcmVlZC9yZXVzZWQgbWVtb3J5CisJCSAqIHdoZW4gdGhlIElPIGNvbXBsZXRlcy4K KwkJICovCisJCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCisJCQlpb2gtPnJlcG9ydF9yZXR1cm4g PSBOVUxMOworCX0KKworCVJFU1VNRV9JTlRFUlJVUFRTKCk7Cit9CisKIAogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVh ZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXgg YTMxODUzOWU1Li4xMjVkOGJhYmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0u YwpAQCAtMTEwLDcgKzExMCw4IEBAIHN0cnVjdCBSZWFkU3RyZWFtCiAJICogZm9yIElPIGNvbWJp bmluZyBldmVuIGluIGNhc2VzIHdoZXJlIHRoZSBJL08gc3Vic3lzdGVtIGNhbiBrZWVwIHVwIGF0 IGEKIAkgKiBsb3cgcmVhZC1haGVhZCBkaXN0YW5jZSwgYXMgZG9pbmcgbGFyZ2VyIElPcyBpcyBt b3JlIGVmZmljaWVudC4KIAkgKgotCSAqIFNldCB0byAwIHdoZW4gdGhlIGVuZCBvZiB0aGUgc3Ry ZWFtIGlzIHJlYWNoZWQuCisJICogU2V0IHRvIDAgd2hlbiB0aGUgZW5kIG9mIHRoZSBzdHJlYW0g aXMgcmVhY2hlZCBhbmQgdG8gLTEgd2hlbiB0aGUKKwkgKiBzdHJlYW0gaXMgcmVzZXQuCiAJICov CiAJaW50MTYJCWNvbWJpbmVfZGlzdGFuY2U7CiAJaW50MTYJCXJlYWRhaGVhZF9kaXN0YW5jZTsK QEAgLTU1Myw4ICs1NTQsOCBAQCByZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3JlYWQoUmVhZFN0 cmVhbSAqc3RyZWFtKQogc3RhdGljIGlubGluZSBib29sCiByZWFkX3N0cmVhbV9zaG91bGRfbG9v a19haGVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiB7Ci0JLyogSWYgdGhlIGNhbGxiYWNrIGhhcyBz aWduYWxlZCBlbmQtb2Ytc3RyZWFtLCB3ZSdyZSBkb25lICovCi0JaWYgKHN0cmVhbS0+cmVhZGFo ZWFkX2Rpc3RhbmNlID09IDApCisJLyogSWYgd2UgcmVhY2hlZCBlbmQtb2Ytc3RyZWFtIG9yIGEg cmVzZXQsIHdlJ3JlIGRvbmUgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0g MCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogbmV2ZXIgc3RhcnQgbW9yZSBJT3MgdGhhbiBvdXIg Y2FwICovCkBAIC02MzIsNyArNjMzLDcgQEAgcmVhZF9zdHJlYW1fc2hvdWxkX2lzc3VlX25vdyhS ZWFkU3RyZWFtICpzdHJlYW0pCiAJICogSWYgdGhlIGNhbGxiYWNrIGhhcyBzaWduYWxlZCBlbmQt b2Ytc3RyZWFtLCBzdGFydCB0aGUgcGVuZGluZyByZWFkCiAJICogaW1tZWRpYXRlbHkuIFRoZXJl IGlzIG5vIGZ1cnRoZXIgcG90ZW50aWFsIGZvciBJTyBjb21iaW5pbmcuCiAJICovCi0JaWYgKHN0 cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID09IDApCisJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rp c3RhbmNlIDw9IDApCiAJCXJldHVybiB0cnVlOwogCiAJLyoKQEAgLTc0MCw3ICs3NDEsNyBAQCBy ZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkgKiBzdHJlYW0uICBJ biB0aGUgd29yc3QgY2FzZSB3ZSBjYW4gYWx3YXlzIG1ha2UgcHJvZ3Jlc3Mgb25lIGJ1ZmZlciBh dCBhCiAJICogdGltZS4KIAkgKi8KLQlBc3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA+IDAg fHwgc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPT0gMCk7CisJQXNzZXJ0KHN0cmVhbS0+cGlu bmVkX2J1ZmZlcnMgPiAwIHx8IHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApOwogCiAJ aWYgKHN0cmVhbS0+YmF0Y2hfbW9kZSkKIAkJcGdhaW9fZXhpdF9iYXRjaG1vZGUoKTsKQEAgLTEx NDYsOCArMTE0Nyw4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVh bSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAl7CiAJCUFzc2VydChzdHJlYW0tPm9sZGVzdF9i dWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCk7CiAKLQkJLyogRW5kIG9m IHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID09 IDApCisJCS8qIEVuZCBvZiBzdHJlYW0gLyByZXNldCByZWFjaGVkPyAgKi8KKwkJaWYgKHN0cmVh bS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApCiAJCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAog CQkvKgpAQCAtMTE4OCw3ICsxMTg5LDE3IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJQXNzZXJ0KHN0cmVhbS0+ aW9zW2lvX2luZGV4XS5vcC5idWZmZXJzID09CiAJCQkgICAmc3RyZWFtLT5idWZmZXJzW29sZGVz dF9idWZmZXJfaW5kZXhdKTsKIAotCQluZWVkZWRfd2FpdCA9IFdhaXRSZWFkQnVmZmVycygmc3Ry ZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJLyoKKwkJICogSWYgdGhlIHN0cmVhbSBoYXMgYmVl biByZXNldCwgZG9uJ3QgZXZlbiB3YWl0IGZvciB0aGUgSU8sIGp1c3QKKwkJICogYWJhbmRvbiBp dC4KKwkJICovCisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA8IDApCisJCXsKKwkJ CUFiYW5kb25SZWFkQnVmZmVycygmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJCW5lZWRl ZF93YWl0ID0gZmFsc2U7CisJCX0KKwkJZWxzZQorCQkJbmVlZGVkX3dhaXQgPSBXYWl0UmVhZEJ1 ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CiAKIAkJQXNzZXJ0KHN0cmVhbS0+aW9z X2luX3Byb2dyZXNzID4gMCk7CiAJCXN0cmVhbS0+aW9zX2luX3Byb2dyZXNzLS07CkBAIC0xNDIw LDggKzE0MzEsOCBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJlYW0pCiAJQnVm ZmVyCQlidWZmZXI7CiAKIAkvKiBTdG9wIGxvb2tpbmcgYWhlYWQuICovCi0Jc3RyZWFtLT5yZWFk YWhlYWRfZGlzdGFuY2UgPSAwOwotCXN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZSA9IDA7CisJc3Ry ZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAtMTsKKwlzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2Ug PSAtMTsKIAogCS8qIEZvcmdldCBidWZmZXJlZCBibG9jayBudW1iZXIgYW5kIGZhc3QgcGF0aCBz dGF0ZS4gKi8KIAlzdHJlYW0tPmJ1ZmZlcmVkX2Jsb2NrbnVtID0gSW52YWxpZEJsb2NrTnVtYmVy OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBjYzM5OGRiMTIuLjY4ODFjNjIw YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTE2MTMsNiArMTYxMywxMCBA QCBTdGFydFJlYWRCdWZmZXJzSW1wbChSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLAog ICogYnVmZmVycyBtdXN0IHJlbWFpbiB2YWxpZCB1bnRpbCBXYWl0UmVhZEJ1ZmZlcnMoKSBpcyBj YWxsZWQsIGFuZCBhbnkKICAqIGZvcndhcmRlZCBidWZmZXJzIG11c3QgYWxzbyBiZSBwcmVzZXJ2 ZWQgZm9yIGEgY29udGludWluZyBjYWxsIHVubGVzcwogICogdGhleSBhcmUgZXhwbGljaXRseSBy ZWxlYXNlZC4KKyAqCisgKiBJZiB0cnVlIHdhcyByZXR1cm5lZCwgdGhlIG1lbW9yeSB1bmRlcmx5 aW5nIHRoZSBSZWFkQnVmZmVyc09wZXJhdGlvbiBuZWVkcworICogdG8gc3RheSBhcm91bmQgdW50 aWwgZWl0aGVyIFdhaXRSZWFkQnVmZmVycygpIG9yIEFiYW5kb25SZWFkQnVmZmVycygpIGlzCisg KiBjYWxsZWQgKG9yIGFuIGVycm9yIGlzIHRocm93bikuCiAgKi8KIGJvb2wKIFN0YXJ0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKQEAgLTIxNzQsNiArMjE3OCwz NiBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGlu dCAqbmJsb2Nrc19wcm9ncmVzcykKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIERlY2xhcmUg dGhhdCB0aGlzIGJhY2tlbmQgaXMgbm90IGludGVyZXN0ZWQgaW4gdGhlIG9wZXJhdGlvbiBhbnlt b3JlLiBUaGlzCisgKiBuZWVkcyB0byBiZSBjYWxsZWQgaWYgU3RhcnRSZWFkQnVmZmVycygpIHJl dHVybmVkIHRydWUgYW5kIHRoZQorICogUmVhZEJ1ZmZlcnNPcGVyYXRpb24gaXMgdG8gYmUgZnJl ZWQgd2l0aG91dCBjYWxsaW5nIFdhaXRSZWFkQnVmZmVycygpCisgKiAobGVhdmluZyBlcnJvcnMg YXNpZGUpLgorICoKKyAqIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byByZWxl YXNlIGJ1ZmZlciBwaW5zIChzZWVtcyBzaW1wbGVyCisgKiB0aGF0IHdheSwgYXMgdGhhdCBhbHJl YWR5IGlzIHJlcXVpcmVkIGlmIG5vIElPIGhhZCBiZWVuIG5lY2Vzc2FyeSkuCisgKi8KK3ZvaWQK K0FiYW5kb25SZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQorewor CVBnQWlvV2FpdFJlZiBpb193cmVmID0gb3BlcmF0aW9uLT5pb193cmVmOworCisJLyogc2VlIGVx dWl2YWxlbnQgV2FpdFJlYWRCdWZmZXJzKCkgY2hlY2sgKi8KKwlpZiAoIXBnYWlvX3dyZWZfdmFs aWQoJmlvX3dyZWYpICYmIGlvX21ldGhvZCAhPSBJT01FVEhPRF9TWU5DKQorCQllbG9nKEVSUk9S LCAiYWJhbmRvbmluZyByZWFkIG9wZXJhdGlvbiB0aGF0IGRpZG4ndCByZWFkIik7CisKKwlpZiAo IXBnYWlvX3dyZWZfdmFsaWQoJmlvX3dyZWYpKQorCQlyZXR1cm47CisKKwlwZ2Fpb193cmVmX2Ns ZWFyKCZvcGVyYXRpb24tPmlvX3dyZWYpOworCisJLyogY2FuJ3QgYWJhbmRvbiBmb3JlaWduIElP cyAobm9yIGRvIHdlIG5lZWQgdG8pICovCisJaWYgKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbykKKwkJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisJZWxzZQorCQlwZ2Fpb193cmVmX2FiYW5k b24oJmlvX3dyZWYpOworfQorCiAvKgogICogQnVmZmVyQWxsb2MgLS0gc3Vicm91dGluZSBmb3Ig UGluQnVmZmVyRm9yQmxvY2suICBIYW5kbGVzIGxvb2t1cCBvZiBhIHNoYXJlZAogICoJCWJ1ZmZl ci4gIElmIG5vIGJ1ZmZlciBleGlzdHMgYWxyZWFkeSwgc2VsZWN0cyBhIHJlcGxhY2VtZW50IHZp Y3RpbSBhbmQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlv LnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKaW5kZXggNjNjYWRk NjRjLi4xZmJjYTJiNTkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8w MDFfYWlvLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlvLnBsCkBA IC0xNSw2ICsxNSwxMCBAQCB1c2UgVGVzdEFpbzsKIG15IEBtZXRob2RzID0gVGVzdEFpbzo6c3Vw cG9ydGVkX2lvX21ldGhvZHMoKTsKIG15ICVub2RlczsKIAorIyBQdXR0aW5nIGl0IGlubGluZSBt YWtlcyBwZXJsdGlkeSBkbyB1Z2x5IHRoaW5ncworbXkgJGNvdW50X215X2Fpb3NfcXVlcnkgPQor ICAnU0VMRUNUIGNvdW50KCopIEZST00gcGdfYWlvcyBXSEVSRSBwaWQgPSBwZ19iYWNrZW5kX3Bp ZCgpJzsKKwogCiAjIyMKICMgQ3JlYXRlIGFuZCBjb25maWd1cmUgb25lIGluc3RhbmNlIGZvciBl YWNoIGlvX21ldGhvZApAQCAtMTYxNiw2ICsxNjIwLDYxIEBAIElOU0VSVCBJTlRPIHRtcF9vayBT RUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApOwogCQkJcXF8U0VMRUNUIGJsb2Nrb2ZmLCBi bG9ja251bSwgaW9fcmVxZCBhbmQgbm90IGZvcmVpZ25faW8sIG5ibG9ja3MgRlJPTSByZWFkX2J1 ZmZlcnMoJyR0YWJsZScsIDEsIDMpfCwKIAkJCXFyL14wXHwxXHx0XHwyXG4yXHwzXHxmXHwxJC8s CiAJCQlxci9eJC8pOworCisKKwkJIyMjCisJCSMgVGVzdCB0aGF0IGFiYW5kb25pbmcgSU8gd29y a3MgYW5kIHRoYXQgaXQgZG9lcyBub3QgY2F1c2UgaXNzdWVzLgorCQkjIyMKKworCQkjIFRlc3Qg dGhhdCBldmVuIGFmdGVyIGFiYW5kb25pbmcgSU8gd2UgZG8gd2FpdCBmb3IgdGhlIElPcyBhdCB0 aGUgZW5kCisJCSMgb2YgdGhlIHN0YXRlbWVudC4KKwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxT RVQgaW9fY29tYmluZV9saW1pdD0yfCk7CisJCSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VMRUNU IGV2aWN0X3JlbCgnJHRhYmxlJyl8KTsKKwkJcHNxbF9saWtlKAorCQkJJGlvX21ldGhvZCwKKwkJ CSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgJiBhYmFuZG9uIGl0IiwK KwkJCXFxfFNFTEVDVCBhYmFuZG9uZWQsIGNvdW50KCopIEZST00gcmVhZF9idWZmZXJzKCckdGFi bGUnLCAwLCA2LCBhYmFuZG9uX2FmdGVyID0+IDIpIEdST1VQIEJZIDEgT1JERVIgQlkgMXwsCisJ CQlxci9eZlx8MVxudFx8MiQvLAorCQkJcXIvXiQvKTsKKwkJIyBEdWUgdG8gdGhlIGVuZC1vZi1z dGF0ZW1lbnQgd2FpdCB0aGVyZSBzaG91bGQgYmUgbm8gSU9zIGFueW1vcmUKKwkJaXMoJHBzcWxf YS0+cXVlcnlfc2FmZSgkY291bnRfbXlfYWlvc19xdWVyeSksIDAsCisJCQkiJGlvX21ldGhvZDog JHBlcnNpc3RlbmN5OiBhYmFuZG9uZWQgSU8gY29tcGxldGVkIGJ5IGVuZCBvZiBzdGF0ZW1lbnQi CisJCSk7CisKKwkJIyBUZXN0IHRoYXQgYWZ0ZXIgYWJhbmRvbmluZyBJTyBidWZmZXIgYWNjZXNz IHN0aWxsIHdvcmtzLgorCQkjCisJCSMgRmlyc3QgdGVzdCB0aGF0IGJ5IGp1c3QgaXNzdWluZyBh bm90aGVyIHJlYWRfYnVmZmVycygpIGluIHRoZSBzYW1lCisJCSMgc3RhdGVtZW50IChzbyB0aGF0 IHRoZSBhYmFuZG9uZWQgSU9zIGFyZW4ndCB3YWl0ZWQtZm9yIGR1cmluZworCQkjIGVuZC1vZi1z dGF0ZW1lbnQgcmVzb3duZXIgaGFuZGxpbmcpLgorCQkkcHNxbF9hLT5xdWVyeV9zYWZlKHFxfFNF TEVDVCBldmljdF9yZWwoJyR0YWJsZScpfCk7CisJCXBzcWxfbGlrZSgKKwkJCSRpb19tZXRob2Qs CisJCQkkcHNxbF9hLAorCQkJIiRwZXJzaXN0ZW5jeTogcmVhZCBidWZmZXJzICYgYWJhbmRvbiBp dCAmIHJlYWQgYWdhaW4iLAorCQkJcXF8CisJCQkgICBTRUxFQ1QgU1VNKG5ibG9ja3MpIEZST00g cmVhZF9idWZmZXJzKCckdGFibGUnLCAwLCA0LCBhYmFuZG9uX2FmdGVyID0+IDIpCisJCQkgICBV TklPTiBBTEwKKwkJCSAgIFNFTEVDVCBTVU0obmJsb2NrcykgRlJPTSByZWFkX2J1ZmZlcnMoJyR0 YWJsZScsIDAsIDQpCisJCQkgICB8LAorCQkJcXIvXjRcbjQkLywKKwkJCXFyL14kLyk7CisKKwkJ IyBOb3cgdGVzdCB0aGF0IGEgcGxhaW4gU0VMRUNUIG5lZWRpbmcgYnVmZmVycyBhZmZlY3RlZCBi eSBhYmFuZG9uZWQKKwkJIyBJTyB3b3JrCisJCSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VMRUNU IGV2aWN0X3JlbCgnJHRhYmxlJyl8KTsKKwkJcHNxbF9saWtlKAorCQkJJGlvX21ldGhvZCwKKwkJ CSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgJiBhYmFuZG9uIGl0ICYg cmVhZCBhZ2FpbiB2aWEgU0VMRUNUIiwKKwkJCXFxfAorCQkJICAgU0VMRUNUIFNVTShuYmxvY2tz KSBGUk9NIHJlYWRfYnVmZmVycygnJHRhYmxlJywgMCwgNCwgYWJhbmRvbl9hZnRlciA9PiAyKQor CQkJICAgVU5JT04gQUxMCisJCQkgICBTRUxFQ1QgU1VNKGRhdGEpIEZST00gJHRhYmxlIFdIRVJF IGRhdGEgPCAxMDAwCisJCQkgICB8LAorCQkJcXIvXjRcbjQ5OTUwMCQvLAorCQkJcXIvXiQvKTsK KwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxSRVNFVCBpb19jb21iaW5lX2xpbWl0fCk7CiAJfQog CiAJIyBUaGUgcmVtYWluaW5nIHRlc3RzIGRvbid0IG1ha2Ugc2Vuc2UgZm9yIHRlbXAgdGFibGVz LCBhcyB0aGV5IGFyZQpAQCAtMTgzNyw2ICsxODk2LDU0IEBAIHJlYWRfYnVmZmVycygnJHRhYmxl JywgMCwgNCl8LAogCSRwc3FsX2EtPntzdGRvdXR9ID0gJyc7CiAKIAorCSMjIworCSMgVGVzdCB0 aGF0IGFiYW5kb25pbmcgSU8gYWN0dWFsbHkgYXZvaWRzIHdhaXRpbmcgZm9yIElPLgorCSMjIwor CisJIyBUZXN0aW5nIG5vdCB3YWl0aW5nIG9ubHkgd29ya3MgaWYgdGhlIElPIG1ldGhvZCBkb2Vz bid0IGV4ZWN1dGUgSU8KKwkjIHN5bmNocm9ub3VzbHksIHdoaWNoIGlzIHdoeSB3ZSBmdW5kYW1l bnRhbGx5IGNhbid0IHRlc3Qgd2l0aAorCSMgaW9fbWV0aG9kPXN5bmMuIEZ1cnRoZXJtb3JlIHdl IG5lZWQgdG8gd29yayBhcm91bmQgaW9fbWV0aG9kPWlvX3VyaW5nCisJIyBwb3RlbnRpYWxseSBl eGVjdXRpbmcgdGhlIElPIHN5bmNocm9ub3VzbHkgLSB3ZSBjYW4gZG8gc28gYnkgbWFraW5nIHRo ZQorCSMgSU9zIGJpZyBlbm91Z2ggKGMuZi4gcGdhaW9fdXJpbmdfc2hvdWxkX3VzZV9hc3luYygp KS4KKwkjCisJIyBUbyBtYWtlIHRoZSB0ZXN0IHJlbGlhYmxlIHdlIGhhdmUgdG8gYWJhbmRvbiBh bGwgSU9zLCBhcyB3YWl0aW5nIGZvcgorCSMgc29tZSBJT3MgY291bGQgbGVhZCB0byBhbHNvIGNv bnN1bWluZyB0aGUgY29tcGxldGlvbiBvZiB0aGUgSU8gdGhhdCB3aWxsCisJIyB0cmlnZ2VyIGEg d2FpdCBpbiB0aGUgY29tcGxldGlvbi4KKwlpZiAoJGlvX21ldGhvZCBuZSAnc3luYycpCisJewor CQkkcHNxbF9hLT5xdWVyeV9zYWZlKHFxfFNFTEVDVCBldmljdF9yZWwoJyR0YWJsZScpfCk7CisJ CSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VUIGlvX2NvbWJpbmVfbGltaXQ9NXwpOworCQkkcHNx bF9iLT5xdWVyeV9zYWZlKAorCQkJcXEvU0VMRUNUIGlual9pb19jb21wbGV0aW9uX3dhaXQoCisJ CSAgIHJlbGZpbGVub2RlPT5wZ19yZWxhdGlvbl9maWxlbm9kZSgnJHRhYmxlJyksCisJCSAgIGJs b2Nrbm89PjQpOy8pOworCQlvaygxLAorCQkJIiRpb19tZXRob2Q6ICRwZXJzaXN0ZW5jeTogY29u ZmlndXJlIHdhaXQgaW4gY29tcGxldGlvbiBvZiBibG9jayA0IgorCQkpOworCisJCSMgTmVlZCB0 byBlbmQgdGhlIHdhaXQgaW4gdGhlIGNvbXBsZXRpb24gYmVmb3JlIHRoZSBzdGF0ZW1lbnQgaXMg b3ZlciwKKwkJIyBvdGhlcndpc2Ugd2UnbGwgd2FpdCBkdXJpbmcgcmVzb3duZXIgY2xlYW51cCBh dCB0aGUgZW5kIG9mIHRoZQorCQkjIHN0YXRlbWVudC4KKwkJcHNxbF9saWtlKAorCQkJJGlvX21l dGhvZCwKKwkJCSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgYWJhbmRv bmluZyBibG9ja2VkIElPIGF2b2lkcyB3YWl0IiwKKwkJCXFxfAorCQkJICAgU0VMRUNUIGNvdW50 KCopID4gMCBGUk9NIHJlYWRfYnVmZmVycygnJHRhYmxlJywgMCwgMTAsIGFiYW5kb25fYWZ0ZXIg PT4gMCkgV0hFUkUgYWJhbmRvbmVkCisJCQkgICBVTklPTiBBTEwKKwkJCSAgIFNFTEVDVCBjb3Vu dCgqKSA+IDAgRlJPTSBwZ19haW9zIFdIRVJFIHBpZCA9IHBnX2JhY2tlbmRfcGlkKCkKKwkJCSAg IFVOSU9OIEFMTAorCQkJICAgU0VMRUNUIGlual9pb19jb21wbGV0aW9uX2NvbnRpbnVlKCkgSVMg Tk9UIE5VTEwKKwkJCXwsCisJCQlxci9edFxudFxudCQvLAorCQkJcXIvXiQvKTsKKwkJaXMoJHBz cWxfYS0+cXVlcnlfc2FmZSgkY291bnRfbXlfYWlvc19xdWVyeSksIDAsCisJCQkiJGlvX21ldGhv ZDogJHBlcnNpc3RlbmN5OiBhYmFuZG9uZWQgSU8gaXMgY29tcGxldGVkIGF0IGVuZCBvZiBzdGF0 ZW1lbnQiCisJCSk7CisKKwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxSRVNFVCBpb19jb21iaW5l X2xpbWl0fCk7CisJfQorCiAJJHBzcWxfYS0+cXVpdCgpOwogCSRwc3FsX2ItPnF1aXQoKTsKIAkk cHNxbF9jLT5xdWl0KCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rl c3RfYWlvLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4w LnNxbAppbmRleCA3NjJhYzI5NTEuLmZmM2IyMDBjZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCkBAIC01Myw3ICs1Myw3IEBAIENSRUFURSBGVU5DVElP TiBidWZmZXJfY2FsbF90ZXJtaW5hdGVfaW8oYnVmZmVyIGludCwgZm9yX2lucHV0IGJvb2wsIHN1 Y2NlZWQgYm9vCiBSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJQ1QKIEFTICdNT0RVTEVfUEFU SE5BTUUnIExBTkdVQUdFIEM7CiAKLUNSRUFURSBGVU5DVElPTiByZWFkX2J1ZmZlcnMocmVsIHJl Z2NsYXNzLCBzdGFydGJsb2NrIGludDQsIG5ibG9ja3MgaW50NCwgT1VUIGJsb2Nrb2ZmIGludDQs IE9VVCBibG9ja251bSBpbnQ0LCBPVVQgaW9fcmVxZCBib29sLCBPVVQgZm9yZWlnbl9pbyBib29s LCBPVVQgbmJsb2NrcyBpbnQ0LCBPVVQgYnVmIGludDRbXSkKK0NSRUFURSBGVU5DVElPTiByZWFk X2J1ZmZlcnMocmVsIHJlZ2NsYXNzLCBzdGFydGJsb2NrIGludDQsIG5ibG9ja3MgaW50NCwgYWJh bmRvbl9hZnRlciBpbnQ0IERFRkFVTFQgLTEsIE9VVCBibG9ja29mZiBpbnQ0LCBPVVQgYmxvY2tu dW0gaW50NCwgT1VUIGlvX3JlcWQgYm9vbCwgT1VUIGZvcmVpZ25faW8gYm9vbCwgT1VUIGFiYW5k b25lZCBib29sLCBPVVQgbmJsb2NrcyBpbnQ0LCBPVVQgYnVmIGludDRbXSkKIFJFVFVSTlMgU0VU T0YgcmVjb3JkIFNUUklDVAogQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKIApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCmluZGV4IDM1ZWZiYTFhNS4uNjQ4NTJjNGU0IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCkBAIC02OTgsMTEgKzY5OCwxMyBAQCBy ZWFkX2J1ZmZlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAlPaWQJCQlyZWxpZCA9IFBHX0dFVEFSR19P SUQoMCk7CiAJQmxvY2tOdW1iZXIgc3RhcnRibG9jayA9IFBHX0dFVEFSR19VSU5UMzIoMSk7CiAJ aW50MzIJCW5ibG9ja3MgPSBQR19HRVRBUkdfSU5UMzIoMik7CisJaW50MzIJCWFiYW5kb25fYWZ0 ZXIgPSBQR19HRVRBUkdfSU5UMzIoMyk7CiAJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVy blNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOwogCVJlbGF0aW9uCXJlbDsKIAlTTWdyUmVs YXRpb24gc21ncjsKIAlpbnQJCQluYmxvY2tzX2RvbmUgPSAwOwogCWludAkJCW5ibG9ja3NfZGlz cCA9IDA7CisJaW50CQkJbmJsb2Nrc193YWl0ID0gMDsKIAlpbnQJCQluaW9zID0gMDsKIAlSZWFk QnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uczsKIAlCdWZmZXIJICAgKmJ1ZmZlcnM7CkBAIC03 MjQsNiArNzI2LDkgQEAgcmVhZF9idWZmZXJzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcmVsID0gcmVs YXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAlzbWdyID0gUmVsYXRpb25HZXRT bWdyKHJlbCk7CiAKKwlpZiAoYWJhbmRvbl9hZnRlciA8IDApCisJCWFiYW5kb25fYWZ0ZXIgPSBu YmxvY2tzOworCiAJLyoKIAkgKiBEbyBTdGFydFJlYWRCdWZmZXJzKCkgdW50aWwgSU8gZm9yIGFs bCB0aGUgcmVxdWlyZWQgYmxvY2tzIGhhcyBiZWVuCiAJICogc3RhcnRlZCAoaWYgcmVxdWlyZWQp LgpAQCAtNzU4LDkgKzc2MywxNyBAQCByZWFkX2J1ZmZlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAlm b3IgKGludCBuaW8gPSAwOyBuaW8gPCBuaW9zOyBuaW8rKykKIAl7CiAJCVJlYWRCdWZmZXJzT3Bl cmF0aW9uICpvcGVyYXRpb24gPSAmb3BlcmF0aW9uc1tuaW9dOworCQlpbnQJCQluYmxvY2tzX3Ro aXNfaW8gPSBuYmxvY2tzX3Blcl9pb1tuaW9dOwogCiAJCWlmIChpb19yZXFkc1tuaW9dKQotCQkJ V2FpdFJlYWRCdWZmZXJzKG9wZXJhdGlvbik7CisJCXsKKwkJCWlmIChuYmxvY2tzX3dhaXQgPCBh YmFuZG9uX2FmdGVyKQorCQkJCVdhaXRSZWFkQnVmZmVycyhvcGVyYXRpb24pOworCQkJZWxzZQor CQkJCUFiYW5kb25SZWFkQnVmZmVycyhvcGVyYXRpb24pOworCQl9CisKKwkJbmJsb2Nrc193YWl0 ICs9IG5ibG9ja3NfdGhpc19pbzsKIAl9CiAKIAkvKgpAQCAtNzcwLDggKzc4Myw4IEBAIHJlYWRf YnVmZmVycyhQR19GVU5DVElPTl9BUkdTKQogCXsKIAkJUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9w ZXJhdGlvbiA9ICZvcGVyYXRpb25zW25pb107CiAJCWludAkJCW5ibG9ja3NfdGhpc19pbyA9IG5i bG9ja3NfcGVyX2lvW25pb107Ci0JCURhdHVtCQl2YWx1ZXNbNl0gPSB7MH07Ci0JCWJvb2wJCW51 bGxzWzZdID0gezB9OworCQlEYXR1bQkJdmFsdWVzWzddID0gezB9OworCQlib29sCQludWxsc1s3 XSA9IHswfTsKIAkJQXJyYXlUeXBlICAqYnVmZmVyc19hcnI7CiAKIAkJLyogY29udmVydCBidWZm ZXIgYXJyYXkgdG8gZGF0dW0gYXJyYXkgKi8KQEAgLTgwNCwxNCArODE3LDE4IEBAIHJlYWRfYnVm ZmVycyhQR19GVU5DVElPTl9BUkdTKQogCQl2YWx1ZXNbM10gPSBCb29sR2V0RGF0dW0oaW9fcmVx ZHNbbmlvXSA/IG9wZXJhdGlvbi0+Zm9yZWlnbl9pbyA6IGZhbHNlKTsKIAkJbnVsbHNbM10gPSBm YWxzZTsKIAotCQkvKiBuYmxvY2tzICovCi0JCXZhbHVlc1s0XSA9IEludDMyR2V0RGF0dW0obmJs b2Nrc190aGlzX2lvKTsKKwkJLyogYWJhbmRvbmVkICovCisJCXZhbHVlc1s0XSA9IEJvb2xHZXRE YXR1bShuYmxvY2tzX2Rpc3AgPj0gYWJhbmRvbl9hZnRlcik7CiAJCW51bGxzWzRdID0gZmFsc2U7 CiAKLQkJLyogYXJyYXkgb2YgYnVmZmVycyAqLwotCQl2YWx1ZXNbNV0gPSBQb2ludGVyR2V0RGF0 dW0oYnVmZmVyc19hcnIpOworCQkvKiBuYmxvY2tzICovCisJCXZhbHVlc1s1XSA9IEludDMyR2V0 RGF0dW0obmJsb2Nrc190aGlzX2lvKTsKIAkJbnVsbHNbNV0gPSBmYWxzZTsKIAorCQkvKiBhcnJh eSBvZiBidWZmZXJzICovCisJCXZhbHVlc1s2XSA9IFBvaW50ZXJHZXREYXR1bShidWZmZXJzX2Fy cik7CisJCW51bGxzWzZdID0gZmFsc2U7CisKIAkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZv LT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CiAKIAkJbmJsb2Nr c19kaXNwICs9IG5ibG9ja3NfdGhpc19pbzsKQEAgLTEwNjQsNiArMTA4MSwxMyBAQCBpbmpfaW9f Y29tcGxldGlvbl93YWl0X21hdGNoZXMoUGdBaW9IYW5kbGUgKmlvaCkKIAkJIShpbmpfYmxvY2tu byA+PSBpb19ibG9ja25vICYmIGlual9ibG9ja25vIDwgKGlvX2Jsb2Nrbm8gKyB0ZC0+c21nci5u YmxvY2tzKSkpCiAJCXJldHVybiBmYWxzZTsKIAorCWVyZXBvcnQoTE9HLAorCQkJZXJybXNnKCJ3 YWl0IGluamVjdGlvbiBwb2ludCBtYXRjaGVzIGZvciBJTyAlZCwgaW5qIGJsb2Nrbm8gJWQsIGlv IGJsb2Nrbm8gJWQsIGlvIG5ibG9ja3MgJWQiLAorCQkJCSAgIHBnYWlvX2lvX2dldF9pZChpb2gp LAorCQkJCSAgIGlual9ibG9ja25vLCBpb19ibG9ja25vLCB0ZC0+c21nci5uYmxvY2tzCisJCQkJ ICAgKSwKKwkJCWVycmhpZGVzdG10KHRydWUpLCBlcnJoaWRlY29udGV4dCh0cnVlKSk7CisKIAly ZXR1cm4gdHJ1ZTsKIH0KIAotLSAKMi41My4wCgo= --0000000000000468e006539f51e8 Content-Type: application/octet-stream; name="v26-0009-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Disposition: attachment; filename="v26-0009-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq31b3dn1 RnJvbSA3Zjk2MjNjMzBhYWFiZDY3ZWJkNzQwYzg2YjE0MmRmOTliNGZhMGUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTk6MDggLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNiA5 LzldIFdJUDogYWlvOiBidWZtZ3I6IEZpeCByYWNlIGNvbmRpdGlvbiBsZWFkaW5nIHRvCiBkZWFk bG9ja3Mgd2l0aCBpb191cmluZwoKSWYgYmFja2VuZCBBIGlzIGluIHRoZSBwcm9jZXNzIG9mIHN0 YXJ0aW5nIElPIGZvciBhIGJ1ZmZlciwgdGhlcmUgaXMgYSBzaG9ydApwZXJpb2QgaW4gd2hpY2gg dGhlIGJ1ZmZlciBpcyBtYXJrZWQgYXMgSU9fSU5fUFJPR1JFU1Mgd2l0aG91dCBoYXZpbmcgYW4K YXNzb2NpYXRlZCBBSU8gd2FpdCByZWZlcmVuY2UuIElmIGEgYmFja2VuZCBCIGRvZXMgV2FpdElP KCkgb24gdGhhdCBidWZmZXIsCml0J2xsIHdhaXQgZm9yIHRoZSBidWZmZXIncyBJTyBjb25kaXRp b24gdmFyaWFibGUgdG8gYmUgc2V0LiBNb3N0IG9mIHRoZSB0aW1lCnRoYXQgaXMgT0ssIHdoZW4g dGhlIElPIG9uIHRoZSBidWZmZXIgZmluaXNoZXMsIHRoZSBDViB3aWxsIGJlIHNpZ25hbGxlZC4K SG93ZXZlciwgd2l0aCBpb191cmluZywgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgaXNzdWVyIChB KSBvZiB0aGUgSU8gbmV2ZXIKZ2V0cyBhcm91bmQgdG8gZG9pbmcgc28sIGUuZy4gYmVjYXVzZSBp dCBpcyB3YWl0aW5nIGZvciBzb21ldGhpbmcgZG9uZSBieSBCLgoKVG8gZml4IHRoYXQsIHdlIG5l ZWQgdG8gc2lnbmFsIHRoZSBDViB3aGVuIHN0YWdpbmcgSU8uIFRoYXQncyBhbm5veWluZyBhcyBD Vgpicm9hZGNhc3RzIGFyZSBub3QgY2hlYXAuIFNvIHdlIGF0IGxlYXN0IGF2b2lkIGl0IGZvciB0 aGUgY29tbW9uIGNhc2Ugb2YgSU8KYmVpbmcgZXhlY3V0ZWQgc3luY2hyb25vdXNseS4KCkkgaG9w ZSB0aGF0IGV2ZW50dWFsbHkgd2UgY2FuIGdldCBhd2F5IGZyb20gbmVlZGluZyBtdWx0aXBsZSBz eXN0ZW1zIGZvcgpzaWduYWxsaW5nIElPIGNvbXBsZXRpb24sIGJ1dCB3ZSBhcmUgY2xlYXJseSBu b3QgdGhlcmUgeWV0LgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIHwg MjIgKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMo KyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCA2 ODgxYzYyMGMuLjFiMjllMGNhZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAg LTgzMjEsNyArODMyMSw3IEBAIE1hcmtEaXJ0eUFsbFVucGlubmVkQnVmZmVycyhpbnQzMiAqYnVm ZmVyc19kaXJ0aWVkLAogICogcmVwbGFjZWQgd2hpbGUgSU8gaXMgb25nb2luZy4KICAqLwogc3Rh dGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKLWJ1ZmZlcl9zdGFnZV9jb21tb24o UGdBaW9IYW5kbGUgKmlvaCwgYm9vbCBpc193cml0ZSwgYm9vbCBpc190ZW1wKQorYnVmZmVyX3N0 YWdlX2NvbW1vbihQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhLCBib29sIGlzX3dyaXRl LCBib29sIGlzX3RlbXApCiB7CiAJdWludDY0CSAgICppb19kYXRhOwogCXVpbnQ4CQloYW5kbGVf ZGF0YV9sZW47CkBAIC04NDIwLDcgKzg0MjAsMjMgQEAgYnVmZmVyX3N0YWdlX2NvbW1vbihQZ0Fp b0hhbmRsZSAqaW9oLCBib29sIGlzX3dyaXRlLCBib29sIGlzX3RlbXApCiAJCSAqIGtlZXBzIHRy YWNrLgogCQkgKi8KIAkJaWYgKCFpc190ZW1wKQorCQl7CiAJCQlSZXNvdXJjZU93bmVyRm9yZ2V0 QnVmZmVySU8oQ3VycmVudFJlc291cmNlT3duZXIsIGJ1ZmZlcik7CisKKwkJCS8qCisJCQkgKiBB IGJhY2tlbmQgbWlnaHQgaGF2ZSBzdGFydGVkIHdhaXRpbmcgZm9yIHRoZSBJTyB1c2luZyB0aGUK KwkJCSAqIGJ1ZmZlcidzIGNvbmRpdGlvbiB2YXJpYWJsZSwgYnV0IG9uY2UgdGhlIElPIGlzIHN1 Ym1pdHRlZCwgaXQKKwkJCSAqIHNob3VsZCB3YWl0IHZpYSB0aGUgQUlPIHN1YnN5c3RlbSwgYXMg YSB3YWl0ZXIgbWlnaHQgbmVlZCB0bworCQkJICogY29tcGxldGUgdGhlIElPLgorCQkJICoKKwkJ CSAqIEhvd2V2ZXIsIGRvaW5nIGJyb2FkY2FzdHMgaXMgbm90IGZyZWUsIHNvIHdlIGxpa2UgdG8g YXZvaWQgaXQKKwkJCSAqIHdoZW4gbm90IG5lY2Vzc2FyeS4gSWYgdGhlIElPIGlzIGJlaW5nIGV4 ZWN1dGVkIHN5bmNocm9ub3VzbHksCisJCQkgKiB0aGlzIGJhY2tlbmQgd2lsbCBhbHdheXMgZW5k IHVwIHNpZ25hbGxpbmcgdGhlIElPQ1Ygd2l0aG91dAorCQkJICogZnVydGhlciB3YWl0aW5nLCB0 aGVyZWZvcmUgYXZvaWQgZG9pbmcgc28gaGVyZS4KKwkJCSAqLworCQkJaWYgKCEoY2JfZGF0YSAm IFJFQURfQlVGRkVSU19TWU5DSFJPTk9VU0xZKSkKKwkJCQlDb25kaXRpb25WYXJpYWJsZUJyb2Fk Y2FzdChCdWZmZXJEZXNjcmlwdG9yR2V0SU9DVihidWZfaGRyKSk7CisJCX0KIAl9CiB9CiAKQEAg LTg5MTYsNyArODkzMiw3IEBAIGJ1ZmZlcl9yZWFkdl9yZXBvcnQoUGdBaW9SZXN1bHQgcmVzdWx0 LCBjb25zdCBQZ0Fpb1RhcmdldERhdGEgKnRkLAogc3RhdGljIHZvaWQKIHNoYXJlZF9idWZmZXJf cmVhZHZfc3RhZ2UoUGdBaW9IYW5kbGUgKmlvaCwgdWludDggY2JfZGF0YSkKIHsKLQlidWZmZXJf c3RhZ2VfY29tbW9uKGlvaCwgZmFsc2UsIGZhbHNlKTsKKwlidWZmZXJfc3RhZ2VfY29tbW9uKGlv aCwgY2JfZGF0YSwgZmFsc2UsIGZhbHNlKTsKIH0KIAogc3RhdGljIFBnQWlvUmVzdWx0CkBAIC04 OTY3LDcgKzg5ODMsNyBAQCBzaGFyZWRfYnVmZmVyX3JlYWR2X2NvbXBsZXRlX2xvY2FsKFBnQWlv SGFuZGxlICppb2gsIFBnQWlvUmVzdWx0IHByaW9yX3Jlc3VsdCwKIHN0YXRpYyB2b2lkCiBsb2Nh bF9idWZmZXJfcmVhZHZfc3RhZ2UoUGdBaW9IYW5kbGUgKmlvaCwgdWludDggY2JfZGF0YSkKIHsK LQlidWZmZXJfc3RhZ2VfY29tbW9uKGlvaCwgZmFsc2UsIHRydWUpOworCWJ1ZmZlcl9zdGFnZV9j b21tb24oaW9oLCBjYl9kYXRhLCBmYWxzZSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBQZ0Fpb1Jlc3Vs dAotLSAKMi41My4wCgo= --0000000000000468e006539f51e8 Content-Type: application/octet-stream; name="v26-0004-WIP-Adopt-amgetbatch-interface-in-GiST-index-AM.patch" Content-Disposition: attachment; filename="v26-0004-WIP-Adopt-amgetbatch-interface-in-GiST-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq31b3et6 RnJvbSAwOGYwNTY3YzQzMGJkYmVlMDc4NTA1MWNlYjUwMDRhYmNlYTc2NTQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v biwgMSBKdW4gMjAyNiAxOTozNTo0NyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI2IDQvOV0gV0lQ OiBBZG9wdCBhbWdldGJhdGNoIGludGVyZmFjZSBpbiBHaVNUIGluZGV4IEFNLgoKUmVwbGFjZSBn aXN0Z2V0dHVwbGUgd2l0aCBnaXN0Z2V0YmF0Y2gsIGEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRz IHRoZQpuZXcgYW1nZXRiYXRjaCBpbnRlcmZhY2UgYWRkZWQgYnkgY29tbWl0IEZJWE1FLiAgUGxh aW4gaW5kZXggc2NhbnMgb2YKR2lTVCBpbmRleGVzIG5vdyByZXR1cm4gbWF0Y2hpbmcgaXRlbXMg aW4gYmF0Y2hlcyBjb25zaXN0aW5nIG9mIGFsbCBvZgp0aGUgbWF0Y2hlcyBmcm9tIGEgZ2l2ZW4g bGVhZiBwYWdlLiAgVGhpcyBnaXZlcyB0aGUgdGFibGUgQU0gdGhlIGFiaWxpdHkKdG8gcGVyZm9y bSBvcHRpbWl6YXRpb25zIGxpa2UgaW5kZXggcHJlZmV0Y2hpbmcgZHVyaW5nIEdpU1QgaW5kZXgg c2NhbnMuCgpSZXR1cm5lZCBiYXRjaGVzIGhvbGQgbm8gYnVmZmVyIHBpbnMgb24gaW5kZXggcGFn ZXMsIHBlciB0aGUgYW1nZXRiYXRjaAppbnRlcmZhY2UncyBjb250cmFjdC4gIFRoaXMgZ3JlYXRs eSBzaW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQKZHVyaW5nIGluZGV4IHByZWZldGNoaW5n LCB3aGVyZSB0aGUgcmVhZCBzdHJlYW0gaXMgZXhwZWN0ZWQgdG8gaG9sZCBtYW55CnBpbnMgb24g aGVhcCBwYWdlcy4gIFRoZSBhbWdldGJhdGNoIGludGVyZmFjZSByZXF1aXJlcyB0aGF0IGluZGV4 IEFNcwp0YWtlIHRoZSBzYW1lIHN0YW5kYXJkaXplZCBhcHByb2FjaCB0byBwaW4gbWFuYWdlbWVu dCBmb3IgcGlucyB0aGF0IGFyZQp1c2VkIHRvIHByZXZlbnQgdW5zYWZlIGNvbmN1cnJlbnQgVElE IHJlY3ljbGluZyBieSBWQUNVVU0gKHRoYXQgd2F5CnByZWZldGNoaW5nIGNhbiBob2xkIG9wZW4g bXVsdGlwbGUgYmF0Y2hlcyB3aXRob3V0IGl0IGFmZmVjdGluZyB0aGUgcmVhZApzdHJlYW0pLiAg Rm9yIGFuIG9yZGluYXJ5IEdpU1QgYmF0Y2ggdGhpcyBpbnRlcmxvY2sgcGluIGlzIHRoZSBwaW4g b24KaXRzIHNpbmdsZSBsZWFmIHBhZ2UsIGhlbGQgb25seSBmb3IgYXMgbG9uZyBhcyB0aGUgdGFi bGUgQU0gc3RpbGwgbmVlZHMKaXQgYXMgYW4gaW50ZXJsb2NrIChqdXN0IGxpa2UgZHVyaW5nIG5i dHJlZSBhbmQgaGFzaCBzY2FucykuCgpOZWFyZXN0LW5laWdoYm9yIChvcmRlcmVkKSBzY2FucyBh cmUgaGFuZGxlZCBxdWl0ZSBkaWZmZXJlbnRseSwgYmVjYXVzZQp0aGVpciBtYXRjaGVzIGRvbid0 IG5hdHVyYWxseSBhcnJpdmUgb25lIGxlYWYgcGFnZSBhdCBhIHRpbWUuICBIZXJlCmdpc3RnZXRi YXRjaCBpbnN0ZWFkIGRyYWlucyB0aGUgc2NhbidzIGRpc3RhbmNlLW9yZGVyZWQgcGFpcmluZyBo ZWFwLApwYWNraW5nIHRoZSBtYXRjaGluZyBsZWFmIGl0ZW1zIGludG8gYSBzaW5nbGUgInZpcnR1 YWwiIGJhdGNoIGluCmRpc3RhbmNlIG9yZGVyLCB0eXBpY2FsbHkgc3Bhbm5pbmcgbWFueSBsZWFm IHBhZ2VzLiAgV2UncmUgZWZmZWN0aXZlbHkKcHJldGVuZGluZyB0aGF0IHRoZSBtYXRjaGVzIHdl IGZvdW5kIHdlcmUgaW4gdXNlZnVsIG9yZGVyLCB0b2dldGhlciBvbgp0aGUgc2FtZSBsZWFmIHBh Z2UgLS0gdGhvdWdoIHRoYXQgaXNuJ3QgcmVhbGx5IHRydWUuICBWaXJ0dWFsIGJhdGNoZXMKY29t ZSB3aXRoIHJlc3RyaWN0aW9ucyB0aGF0IG1ha2UgdGhlIHByZXRlbnNlIHNhZmU6IGFuIG9yZGVy ZWQgc2NhbiBpcwpuZXZlciBwbGFubmVkIGFzIGFuIGluZGV4LW9ubHkgc2NhbiwgYW5kIGdpc3Rr aWxsaXRlbXNiYXRjaCBkb2VzIG5vdGhpbmcKZm9yIGEgdmlydHVhbCBiYXRjaC4gIEEgdmlydHVh bCBiYXRjaCB0aGVyZWZvcmUgbmV2ZXIgaG9sZHMgYSBUSUQKcmVjeWNsaW5nIGludGVybG9jayBw aW4gYXQgYWxsOyB0aGUgcGluIG9uIGVhY2ggdW5kZXJseWluZyBsZWFmIHBhZ2UgaXMKaW5zdGVh ZCBkcm9wcGVkIHJpZ2h0IGF3YXksIGFzIHRoZSBwYWdlIGlzIHNjYW5uZWQgaW50byB0aGUgcXVl dWUuCgpUaGUgaW50ZXJsb2NrIHBpbiBhbHNvIGZpeGVzIGEgcHJlLWV4aXN0aW5nIGJ1ZyBpbiB3 aGljaCBHaVNUIGluZGV4LW9ubHkKc2NhbnMgY291bGQgcmV0dXJuIHdyb25nIGFuc3dlcnMgWzFd LiAgQW4gaW5kZXgtb25seSBzY2FuIHRydXN0cyB0aGUKdmlzaWJpbGl0eSBtYXAgaW5zdGVhZCBv ZiBmZXRjaGluZyB0aGUgaGVhcCB0dXBsZSwgc28gaXQgbXVzdCBrZWVwClZBQ1VVTSBmcm9tIHJl Y3ljbGluZyBhIGhlYXAgVElEIGJldHdlZW4gdGhlIG1vbWVudCBpdCByZWFkcyBhbiBpbmRleApl bnRyeSBhbmQgdGhlIG1vbWVudCBpdCBjb25zdWx0cyB0aGUgdmlzaWJpbGl0eSBtYXA7IG90aGVy d2lzZSBpdCBjYW4KcmVwb3J0IGluZGV4ZWQgdmFsdWVzIHRoYXQgYmVsb25nIHRvIGFuIHVucmVs YXRlZCwgc2luY2UtcmVjeWNsZWQgaGVhcAp0dXBsZS4gIFRoZSByZXRhaW5lZCBsZWFmLXBhZ2Ug YnVmZmVyIHBpbiBpcyB0aGF0IGludGVybG9jayAtLSBidXQgb25seQppZiBWQUNVVU0gaG9ub3Jz IGl0LiAgZ2lzdHZhY3V1bXBhZ2UgdGhlcmVmb3JlIG5vdyBhY3F1aXJlcyBhIGNsZWFudXAKbG9j ayBvbiBlYWNoIGxlYWYgcGFnZSAocmF0aGVyIHRoYW4gYSBwbGFpbiBleGNsdXNpdmUgbG9jayks IHNvIGEKY29uY3VycmVudCBzY2FuJ3MgcGluIGhvbGRzIFZBQ1VVTSBvZmYgZnJvbSByZWN5Y2xp bmcgdGhhdCBwYWdlJ3MgVElEcwp1bnRpbCB0aGUgc2NhbiBoYXMgZmluaXNoZWQgaXRzIHZpc2li aWxpdHkgY2hlY2tzLiAgVGhpcyBzYW1lIGludGVybG9jawpyZXF1aXJlbWVudCBpcyB3aHkgb3Jk ZXJlZCBzY2FucyBjYW5ub3QgYmUgaW5kZXgtb25seTogYSB2aXJ0dWFsIGJhdGNoCmRyb3BzIGVh Y2ggbGVhZiBwYWdlJ3MgcGluIGFzIHNvb24gYXMgdGhlIHBhZ2UgaXMgc2Nhbm5lZCwgc28gaXQg aGFzIG5vCmJvdW5kZWQgcGluIHRvIG9mZmVyIGFzIHRoZSByZWN5Y2xpbmcgaW50ZXJsb2NrIHRo YXQgYW4gaW5kZXgtb25seSBzY2FuCmRlcGVuZHMgb24uICBSYXRoZXIgdGhhbiB3b3JrIGFyb3Vu ZCB0aGF0ICh3aGljaCBzZWVtcyBwcm9oaWJpdGl2ZWx5CmNvbXBsaWNhdGVkKSwgdGhlIHBsYW5u ZXIgbmV2ZXIgYnVpbGRzIGFuIGluZGV4LW9ubHkgc2NhbiB0aGF0IHVzZXMKb3JkZXJpbmcgb3Bl cmF0b3JzOyB0aG9zZSBzY2FucyBhcmUgY29zdGVkIGFuZCBleGVjdXRlZCBhcyBwbGFpbiBpbmRl eApzY2Fucywgd2hpY2ggZmV0Y2ggYW5kIHJlY2hlY2sgdGhlIGhlYXAgdHVwbGUgYW5kIHNvIHdl cmUgbmV2ZXIgc3ViamVjdAp0byB0aGUgYnVnLgoKZ2lzdGtpbGxpdGVtc2JhdGNoICh0aGUgR2lT VCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV3IGFta2lsbGl0ZW1zYmF0Y2gKaW50ZXJmYWNlKSBw ZXJmb3JtcyBMUF9ERUFEIG1hcmtpbmcgb2YgZGVhZCBpbmRleCBlbnRyaWVzLCBmb2xsb3dpbmcg dGhlCnNhbWUgYXBwcm9hY2ggYXMgdGhlIG90aGVyIGFtZ2V0YmF0Y2ggQU1zOiBpdCBjb21wYXJl cyB0aGUgYmF0Y2gncyBzYXZlZApMU04gYWdhaW5zdCB0aGUgY3VycmVudCBsZWFmIHBhZ2UgTFNO IHRvIGRldGVjdCBjb25jdXJyZW50IHBhZ2UKbW9kaWZpY2F0aW9ucy4gIEl0IGRvZXMgbm90aGlu ZyBmb3IgdmlydHVhbCBiYXRjaGVzLCBzbyBuZWFyZXN0LW5laWdoYm9yCnNjYW5zIGRvbid0IHNl dCBMUF9ERUFEIGJpdHMgLS0gdGhvdWdoIHRoYXQgaXNuJ3QgcmVhbGx5IG5ldy4gIEdpU1QgZG9l cwpub3cgc2V0IExQX0RFQUQgYml0cyBkdXJpbmcgc2NhbnMgdGhhdCBvbmx5IGV2ZXIgdG91Y2gg YSBzaW5nbGUgbGVhZgpwYWdlLCBmaXhpbmcgYSBsb25nc3RhbmRpbmcgb3ZlcnNpZ2h0IGluIGl0 cyBwcmV2aW91cyBhcHByb2FjaCwgd2hpY2gKd2FzIHVuYWJsZSB0byBtYXJrIGRlYWQgaXRlbXMg aW4gdGhhdCBjYXNlIChzZWUgY2hhbmdlZCBvdXRwdXQgdG8gYW4KZXhpc3Rpbmcga2lsbHR1cGxl cy5vdXQgdGVzdCBjYXNlKS4KClRoZSBnaXN0Z2V0YmF0Y2ggaW1wbGVtZW50YXRpb24gbWFrZXMg dXNlIG9mIG5ldyBiYXRjaC1yZWxhdGVkIGNvcmUKaW5mcmFzdHJ1Y3R1cmUuICBHaVNUIG5vdyBy ZWdpc3RlcnMgYW4gYW1nZXR0cmFuc2Zvcm0gY2FsbGJhY2ssIHdoaWNoCnNldHMgdGhlIHNjYW4g ZGVzY3JpcHRvcidzIHBlci10dXBsZSByZWNoZWNrIGZsYWdzLiAgSXQgYWxzbyBzZXRzCm9yZGVy LWJ5IGRpc3RhbmNlcywgYW5kIHJlY29uc3RydWN0cyBhIGhlYXAgdHVwbGUgZm9yIGluZGV4LW9u bHkgc2NhbnMuCkl0IGlzIGNhbGxlZCBqdXN0IGJlZm9yZSB0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3QgcmV0dXJucyBhbm90aGVyIHR1cGxlLgpMaWtlIG5idHJlZSwgdGhlIHNjYW4gdXNlcyBhIGN1 cnJUdXBsZXMgc3RvcmFnZSBhcmVhIHRvIHN0b3JlIEluZGV4VHVwbGUKc3RydWN0cyBpbiB0aGVp ciBvcmlnaW5hbCBvbi1kaXNrIHJlcHJlc2VudGF0aW9uLiAgVW5saWtlIG5idHJlZSwgR2lTVAp1 c2VzIGFtZ2V0dHJhbnNmb3JtIHRvIGNvbnZlcnQgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0 dXBsZXMgaW50byBhCmhlYXAgdHVwbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuZGVybHlpbmcg aW5kZXhlZCB0eXBlLiAgVGhpcyBzY2hlbWUKYWxzbyByZWxpZXMgb24gYSBuZXcgZmFjaWxpdHkg dGhhdCBhbGxvd3MgaW5kZXggQU1zIHRvIHJlcXVlc3QgdGhlaXIgb3duCnNlcGFyYXRlIGR5bmFt aWNhbGx5IHNpemVkIGFyZWEgZm9yIHN1cHBsZW1lbnRhbCBtZXRhZGF0YSAoR2lTVApvcGNsYXNz ZXMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXByZXNlbnQgdGhhdCBhbnkgdHVwbGUgbmVlZHMgYSBy ZWNoZWNrLApzbyB3ZSBoYXZlIHRvIHNodXR0bGUgdGhhdCBpbmZvcm1hdGlvbiBhcm91bmQgd2l0 aCB0aGUgYmF0Y2gpLgoKWzFdIGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xej1qamlOTDlGQ2g4 QzFMLUdVSDE1ZjRXRlRXdWIyeCtfTnVjbmdjRERjSEt3QG1haWwuZ21haWwuY29tCgpBdXRob3I6 IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1h cGkuaCAgICAgICAgICAgICAgICAgICAgfCAgIDUgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3Rf cHJpdmF0ZS5oICAgICAgICAgICAgIHwgIDY0ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nh bi5oICAgICAgICAgICAgICAgICAgfCAgNTEgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2Jy aW4uYyAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0 aWwuYyAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvUkVBRE1F ICAgICAgICAgICAgICAgIHwgIDkwICsrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5j ICAgICAgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0 LmMgICAgICAgICAgICAgfCA1NzkgKysrKysrKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0c2Nhbi5jICAgICAgICAgICAgfCAgNDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3R1dGlsLmMgICAgICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdHZhY3V1bS5jICAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoLmMgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2luZGV4c2Nhbi5jICAgIHwgIDIyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvYW1hcGkuYyAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2dlbmFtLmMgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGJhdGNoLmMgICAgICAgICB8ICAyMCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRyZWUuYyAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn dXRpbHMuYyAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhv bmx5c2Nhbi5jICAgICAgfCAgMTIgLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBh dGguYyAgICAgICAgIHwgICA1ICstCiBjb250cmliL2Jsb29tL2JsdXRpbHMuYyAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2Nhc2gub3V0 ICAgICAgICAgIHwgICA2ICstCiBjb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvZGF0ZS5vdXQg ICAgICAgICAgfCAgIDYgKy0KIGNvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9mbG9hdDQub3V0 ICAgICAgICB8ICAgNiArLQogY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2Zsb2F0OC5vdXQg ICAgICAgIHwgICAyICstCiBjb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50Mi5vdXQgICAg ICAgICAgfCAgIDYgKy0KIGNvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9pbnQ0Lm91dCAgICAg ICAgICB8ICAgNiArLQogY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2ludDgub3V0ICAgICAg ICAgIHwgICAyICstCiBjb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50ZXJ2YWwub3V0ICAg ICAgfCAgIDIgKy0KIGNvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1lLm91dCAgICAgICAg ICB8ICAgMiArLQogY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL3RpbWVzdGFtcC5vdXQgICAg IHwgICAyICstCiBjb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvdGltZXN0YW1wdHoub3V0ICAg fCAgIDIgKy0KIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAgICAgICAgICAgICB8 IDEzNiArKystCiAuLi4vbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jICAg fCAgIDEgKwogLi4uL21vZHVsZXMvaW5kZXgvZXhwZWN0ZWQva2lsbHR1cGxlcy5vdXQgICAgIHwg IDc5ICsrLQogc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9zcGVjcy9raWxsdHVwbGVzLnNwZWMgIHwg IDE4ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgICAgfCAg MTQgKy0KIC4uLi9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleF9zcGdpc3Qub3V0ICB8ICAx OCArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9naXN0Lm91dCAgICAgICAgICAgIHwgIDUy ICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9naXN0LnNxbCAgICAgICAgICAgICAgICAgfCAgIDgg Ky0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMiAr CiA0MSBmaWxlcyBjaGFuZ2VkLCA4NzUgaW5zZXJ0aW9ucygrKSwgNDE5IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2FtYXBpLmgKaW5kZXggMDI3OTNhMTE1Li4xNTdjMWE4ZGYgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCkBA IC0yMTIsNiArMjEyLDEwIEBAIHR5cGVkZWYgdm9pZCAoKmFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9u KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiB2b2lkICgqYW1raWxsaXRlbXNiYXRjaF9m dW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCQkgICBJbmRleFNjYW5CYXRj aCBiYXRjaCk7CiAKKy8qIFNldCB1cCB0aGUgc2NhbidzIHhzX2hpdHVwIG91dHB1dCB0dXBsZSBm b3IgdGhlIGdpdmVuIGJhdGNoIGl0ZW0gKi8KK3R5cGVkZWYgdm9pZCAoKmFtZ2V0dHJhbnNmb3Jt X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSBJbmRleFNjYW5CYXRj aCBiYXRjaCwgaW50IGl0ZW0pOworCiAvKiBmZXRjaCBhbGwgdmFsaWQgdHVwbGVzICovCiB0eXBl ZGVmIGludDY0ICgqYW1nZXRiaXRtYXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJ CQkJCQkJCQkgICBUSURCaXRtYXAgKnRibSk7CkBAIC0zMjYsNiArMzMwLDcgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlhbWdldGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8q IGNhbiBiZSBOVUxMICovCiAJYW11bmd1YXJkYmF0Y2hfZnVuY3Rpb24gYW11bmd1YXJkYmF0Y2g7 IC8qIGNhbiBiZSBOVUxMICovCiAJYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbiBhbWtpbGxpdGVt c2JhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtZ2V0dHJhbnNmb3JtX2Z1bmN0aW9uIGFtZ2V0 dHJhbnNmb3JtOyAvKiBjYW4gYmUgTlVMTCAqLwogCWFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0 Yml0bWFwOwkvKiBjYW4gYmUgTlVMTCAqLwogCWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47 CiAJYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2dpc3RfcHJpdmF0ZS5oCmluZGV4IDQ0NTE0ZjFjYi4uNDIyNWIwNzllIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2dpc3RfcHJpdmF0ZS5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlICJhY2Nl c3MvYW1hcGkuaCIKICNpbmNsdWRlICJhY2Nlc3MvZ2lzdC5oIgorI2luY2x1ZGUgImFjY2Vzcy9p bmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJsaWIvcGFp cmluZ2hlYXAuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgpAQCAtMTIwLDEwICsxMjEs NiBAQCB0eXBlZGVmIHN0cnVjdCBHSVNUU2VhcmNoSGVhcEl0ZW0KIAlJdGVtUG9pbnRlckRhdGEg aGVhcFB0cjsKIAlib29sCQlyZWNoZWNrOwkJLyogVCBpZiBxdWFscyBtdXN0IGJlIHJlY2hlY2tl ZCAqLwogCWJvb2wJCXJlY2hlY2tEaXN0YW5jZXM7CS8qIFQgaWYgZGlzdGFuY2VzIG11c3QgYmUg cmVjaGVja2VkICovCi0JSGVhcFR1cGxlCXJlY29udHVwOwkJLyogZGF0YSByZWNvbnN0cnVjdGVk IGZyb20gdGhlIGluZGV4LCB1c2VkIGluCi0JCQkJCQkJCSAqIGluZGV4LW9ubHkgc2NhbnMgKi8K LQlPZmZzZXROdW1iZXIgb2ZmbnVtOwkJLyogdHJhY2sgb2Zmc2V0IGluIHBhZ2UgdG8gbWFyayB0 dXBsZSBhcwotCQkJCQkJCQkgKiBMUF9ERUFEICovCiB9IEdJU1RTZWFyY2hIZWFwSXRlbTsKIAog LyogVW52aXNpdGVkIGl0ZW0sIGVpdGhlciBpbmRleCBwYWdlIG9yIGhlYXAgdHVwbGUgKi8KQEAg LTE0OCw2ICsxNDUsNDUgQEAgdHlwZWRlZiBzdHJ1Y3QgR0lTVFNlYXJjaEl0ZW0KIAkob2Zmc2V0 b2YoR0lTVFNlYXJjaEl0ZW0sIGRpc3RhbmNlcykgKyBcCiAJIHNpemVvZihJbmRleE9yZGVyQnlE aXN0YW5jZSkgKiAobl9kaXN0YW5jZXMpKQogCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRv IHRoZSBHaVNUIGluZGV4IEFNICovCit0eXBlZGVmIHN0cnVjdCBHSVNUQmF0Y2hEYXRhCit7CisJ LyogbGVhZiBwYWdlJ3MgYnVmZmVyIHBpbiAqLworCUJ1ZmZlcgkJYnVmOworCS8qIGxlYWYgcGFn ZSdzIGJsb2NrIG51bWJlciAoSW52YWxpZEJsb2NrTnVtYmVyIG1lYW5zICJ2aXJ0dWFsIiBiYXRj aCkgKi8KKwlCbG9ja051bWJlciBibGtubzsKK30gR0lTVEJhdGNoRGF0YTsKKworLyogQWNjZXNz IHRoZSBHaVNULXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBw b2ludGVyICovCisjZGVmaW5lIEdJU1RCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpIFwKKwlpbmRl eGFtX3V0aWxfYmF0Y2hfZ2V0X2FtZGF0YShzY2FuLCBiYXRjaCwgR0lTVEJhdGNoRGF0YSkKKwor LyoKKyAqIFBlci1pdGVtIHByaXZhdGUgR2lTVCBkYXRhLiAgV2UgbGF5IG91dCB0aGUgaW5kZXgg QU0ncyBkeW5hbWljIG9wYXF1ZSBhcmVhCisgKiBhcyBhbiBhcnJheSBvZiB0aGVzZSwgb25lIHBl ciBiYXRjaCBpdGVtLCBhbmQgc3Vic2NyaXB0IGl0IHZpYQorICogR0lTVEJhdGNoR2V0SXRlbS4K KyAqCisgKiBHaVNUIG1hdGNoaW5nIGlzIHBvdGVudGlhbGx5IGxvc3N5LCBhbmQgdGhlIENvbnNp c3RlbnQgZnVuY3Rpb24ncyByZWNoZWNrCisgKiBmbGFnIHZhcmllcyBmcm9tIG9uZSBpdGVtIHRv IHRoZSBuZXh0LCBzbyBldmVyeSBiYXRjaCBpdGVtIHJlY29yZHMgaXRzIG93bgorICogcXVhbCBy ZWNoZWNrIGZsYWcgaGVyZTsgZ2lzdGdldHRyYW5zZm9ybSByZXBvcnRzIGl0IGFzIHRoZSBpdGVt J3MgeHNfcmVjaGVjay4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgR0lTVEJhdGNoSXRlbQoreworCWJv b2wJCXJlY2hlY2s7CQkvKiBUIGlmIHF1YWxzIG11c3QgYmUgcmVjaGVja2VkICovCisJYm9vbAkJ cmVjaGVja0Rpc3RhbmNlczsJLyogVCBpZiBkaXN0YW5jZXMgYXJlIGxvc3N5IGxvd2VyIGJvdW5k cyAqLworCS8qIG51bWJlck9mT3JkZXJCeXMgZW50cmllcyAqLworCUluZGV4T3JkZXJCeURpc3Rh bmNlIGRpc3RhbmNlc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSBHSVNUQmF0Y2hJdGVtOwor CisjZGVmaW5lIFNpemVPZkdJU1RCYXRjaEl0ZW0obl9kaXN0YW5jZXMpIFwKKwkob2Zmc2V0b2Yo R0lTVEJhdGNoSXRlbSwgZGlzdGFuY2VzKSArIFwKKwkgc2l6ZW9mKEluZGV4T3JkZXJCeURpc3Rh bmNlKSAqIChuX2Rpc3RhbmNlcykpCisKKyNkZWZpbmUgR0lTVEJhdGNoR2V0SXRlbShzY2FuLCBi YXRjaCwgaXRlbSkgXAorCShBc3NlcnRNYWNybygoaXRlbSkgPj0gMCAmJiAoaXRlbSkgPCBNYXhJ bmRleFR1cGxlc1BlclBhZ2UpLCBcCisJIChHSVNUQmF0Y2hJdGVtICopICgoY2hhciAqKSBpbmRl eF9zY2FuX2JhdGNoX2luZGV4X29wYXF1ZV9keW4oKHNjYW4pLCAoYmF0Y2gpKSArIFwKKwkJCQkJ CShTaXplKSAoaXRlbSkgKiBTaXplT2ZHSVNUQmF0Y2hJdGVtKChzY2FuKS0+bnVtYmVyT2ZPcmRl ckJ5cykpKQorCiAvKgogICogR0lTVFNjYW5PcGFxdWVEYXRhOiBwcml2YXRlIHN0YXRlIGZvciBh IHNjYW4gb2YgYSBHaVNUIGluZGV4CiAgKi8KQEAgLTE1OSwyMyArMTk1LDkgQEAgdHlwZWRlZiBz dHJ1Y3QgR0lTVFNjYW5PcGFxdWVEYXRhCiAJcGFpcmluZ2hlYXAgKnF1ZXVlOwkJCS8qIHF1ZXVl IG9mIHVudmlzaXRlZCBpdGVtcyAqLwogCU1lbW9yeUNvbnRleHQgcXVldWVDeHQ7CQkvKiBjb250 ZXh0IGhvbGRpbmcgdGhlIHF1ZXVlICovCiAJYm9vbAkJcXVhbF9vazsJCS8qIGZhbHNlIGlmIHF1 YWwgY2FuIG5ldmVyIGJlIHNhdGlzZmllZCAqLwotCWJvb2wJCWZpcnN0Q2FsbDsJCS8qIHRydWUg dW50aWwgZmlyc3QgZ2lzdGdldHR1cGxlIGNhbGwgKi8KIAogCS8qIHByZS1hbGxvY2F0ZWQgd29y a3NwYWNlIGFycmF5cyAqLwogCUluZGV4T3JkZXJCeURpc3RhbmNlICpkaXN0YW5jZXM7CS8qIG91 dHB1dCBhcmVhIGZvciBnaXN0aW5kZXhfa2V5dGVzdCAqLwotCi0JLyogaW5mbyBhYm91dCBraWxs ZWQgaXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCi0J T2Zmc2V0TnVtYmVyICpraWxsZWRJdGVtczsJLyogb2Zmc2V0IG51bWJlcnMgb2Yga2lsbGVkIGl0 ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQg aXRlbXMgKi8KLQlCbG9ja051bWJlciBjdXJCbGtubzsJCS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJs b2NrICovCi0JR2lzdE5TTgkJY3VyUGFnZUxTTjsJCS8qIHBvcyBpbiB0aGUgV0FMIHN0cmVhbSB3 aGVuIHBhZ2Ugd2FzIHJlYWQgKi8KLQotCS8qIEluIGEgbm9uLW9yZGVyZWQgc2VhcmNoLCByZXR1 cm5hYmxlIGhlYXAgaXRlbXMgYXJlIHN0b3JlZCBoZXJlOiAqLwotCUdJU1RTZWFyY2hIZWFwSXRl bSBwYWdlRGF0YVtCTENLU1ogLyBzaXplb2YoSW5kZXhUdXBsZURhdGEpXTsKLQlPZmZzZXROdW1i ZXIgblBhZ2VEYXRhOwkJLyogbnVtYmVyIG9mIHZhbGlkIGl0ZW1zIGluIGFycmF5ICovCi0JT2Zm c2V0TnVtYmVyIGN1clBhZ2VEYXRhOwkvKiBuZXh0IGl0ZW0gdG8gcmV0dXJuICovCi0JTWVtb3J5 Q29udGV4dCBwYWdlRGF0YUN4dDsJLyogY29udGV4dCBob2xkaW5nIHRoZSBmZXRjaGVkIHR1cGxl cywgZm9yCi0JCQkJCQkJCSAqIGluZGV4LW9ubHkgc2NhbnMgKi8KIH0gR0lTVFNjYW5PcGFxdWVE YXRhOwogCiB0eXBlZGVmIEdJU1RTY2FuT3BhcXVlRGF0YSAqR0lTVFNjYW5PcGFxdWU7CkBAIC00 NTgsNyArNDgwLDExIEBAIGV4dGVybiBYTG9nUmVjUHRyIGdpc3RYTG9nU3BsaXQoYm9vbCBwYWdl X2lzX2xlYWYsCiAJCQkJCQkJCUJ1ZmZlciBsZWZ0Y2hpbGRidWYsIGJvb2wgbWFya2ZvbGxvd3Jp Z2h0KTsKIAogLyogZ2lzdGdldC5jICovCi1leHRlcm4gYm9vbCBnaXN0Z2V0dHVwbGUoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gdm9pZCBnaXN0a2lsbGl0 ZW1zYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitleHRl cm4gSW5kZXhTY2FuQmF0Y2ggZ2lzdGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0 ZXJuIHZvaWQgZ2lzdHVuZ3VhcmRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIGdpc3RnZXR0cmFuc2Zvcm0oSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgaW50IGl0ZW0pOwogZXh0ZXJuIGludDY0IGdpc3Rn ZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gYm9v bCBnaXN0Y2FucmV0dXJuKFJlbGF0aW9uIGluZGV4LCBpbnQgYXR0bm8pOwogCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNj YW4uaAppbmRleCA3ZDZhNWY1ZDQuLmRiNTY2MDViNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv YWNjZXNzL3JlbHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0x NTcsNiArMTU3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQmF0Y2hNYXRjaGluZ0l0ZW0KICAqCiAgKiAg IFt0YWJsZSBBTSBvcGFxdWUgYXJlYV0gICAgPC0gYWxsb2NhdGlvbiBiYXNlLCBhdCAtKGJhdGNo X2Jhc2Vfb2Zmc2V0KQogICogICBbdGFibGUgQU0gcGVyLWl0ZW0gYXJlYV0gIDwtIHN1cHBsZW1l bnRhbCBmbGV4aWJsZSBhcnJheSBwZXItaXRlbSBkYXRhCisgKiAgIFtpbmRleCBBTSBkeW4gb3Bh cXVlXSAgICAgPC0gb3B0aW9uYWwsIGR5bmFtaWNhbGx5IHNpemVkCiAgKiAgIFtpbmRleCBBTSBz dGF0aWMgb3BhcXVlXSAgPC0gYXQgLShiYXRjaF9pbmRleF9vcGFxdWVfc3RhdGljKQogICogICBb SW5kZXhTY2FuQmF0Y2hEYXRhXSAgICAgIDwtIGJhdGNoIHBvaW50ZXIsIHJldHVybmVkIGJ5IGFt Z2V0YmF0Y2gKICAqICAgW2l0ZW1zW21heGl0ZW1zYmF0Y2hdXQpAQCAtMTY0LDEyICsxNjUsMTIg QEAgdHlwZWRlZiBzdHJ1Y3QgQmF0Y2hNYXRjaGluZ0l0ZW0KICAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbmRleC1vbmx5IHNjYW5zIChiYXRjaF90dXBsZXNfd29ya3NwYWNlKQog ICoKICAqIGJhdGNoX2Jhc2Vfb2Zmc2V0IGNvbWJpbmVzIHRoZSB0YWJsZSBBTSBvcGFxdWUgYXJl YSAoaXRzIGZpeGVkLXNpemUgaGVhZGVyCi0gKiBwbHVzIGl0cyBwZXItaXRlbSBhcmVhKSwgYW5k IHRoZSBzdGF0aWMgaW5kZXggQU0gb3BhcXVlIGFyZWEgaW50byBhIHNpbmdsZQotICogb2Zmc2V0 IGZyb20gdGhlIGJhdGNoIHBvaW50ZXIgdG8gdGhlIHRydWUgYWxsb2NhdGlvbiBiYXNlLiAgVGhl Ci0gKiBpbmRleGJhdGNoLmMgdXRpbGl0aWVzIHBmcmVlIGEgYmF0Y2ggYnkgcGFzc2luZyBwZnJl ZSBhIHBvaW50ZXIgcmV0dXJuZWQgYnkKLSAqIGluZGV4X3NjYW5fYmF0Y2hfYmFzZS4gIFdlIHJl bHkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBiYXRjaGVzIGhhdmUgYSBmaXhlZAotICogbGF5b3V0 IGZvciB0aGUgZHVyYXRpb24gb2YgYW4gaW5kZXggc2NhbiAoYmF0Y2hlcyBhcmUgY2FjaGVkIGZv ciByZXVzZSB0bwotICogYXZvaWQgcGFsbG9jIGNodXJuKS4KKyAqIHBsdXMgaXRzIHBlci1pdGVt IGFyZWEpLCB0aGUgb3B0aW9uYWwgZHluYW1pYyBpbmRleCBBTSBvcGFxdWUgYXJlYSwgYW5kIHRo ZQorICogc3RhdGljIGluZGV4IEFNIG9wYXF1ZSBhcmVhIGludG8gYSBzaW5nbGUgb2Zmc2V0IGZy b20gdGhlIGJhdGNoIHBvaW50ZXIgdG8KKyAqIHRoZSB0cnVlIGFsbG9jYXRpb24gYmFzZS4gIFRo ZSBpbmRleGJhdGNoLmMgdXRpbGl0aWVzIHBmcmVlIGEgYmF0Y2ggYnkKKyAqIHBhc3NpbmcgcGZy ZWUgYSBwb2ludGVyIHJldHVybmVkIGJ5IGluZGV4X3NjYW5fYmF0Y2hfYmFzZS4gIFdlIHJlbHkg b24gdGhlCisgKiBhc3N1bXB0aW9uIHRoYXQgYmF0Y2hlcyBoYXZlIGEgZml4ZWQgbGF5b3V0IGZv ciB0aGUgZHVyYXRpb24gb2YgYW4gaW5kZXgKKyAqIHNjYW4gKGJhdGNoZXMgYXJlIGNhY2hlZCBm b3IgcmV1c2UgdG8gYXZvaWQgcGFsbG9jIGNodXJuKS4KICAqCiAgKiBUaGUgdGFibGUgQU0gYWNj ZXNzZXMgaXRzIG9wYXF1ZSBhcmVhIHVzaW5nIHRoZSBpbmRleF9zY2FuX2JhdGNoX3RhYmxlX2Fy ZWEKICAqIHNoaW0gYWNjZXNzb3IuICBUaGUgYXJlYSBpcyBhIHNpbmdsZSBjb250aWd1b3VzIGJs b2NrOiBhIGZpeGVkLXNpemUgaGVhZGVyCkBAIC0xODQsMTEgKzE4NSwyMiBAQCB0eXBlZGVmIHN0 cnVjdCBCYXRjaE1hdGNoaW5nSXRlbQogICogQml0bWFwIHNjYW5zIGludm9sdmluZyBhbiBhbWdl dGJpdG1hcCByb3V0aW5lIHRoYXQgZmluZHMgaXQgY29udmVuaWVudCB0bwogICogcmV1c2UgYmF0 Y2ggaW5mcmFzdHJ1Y3R1cmUgaW50ZXJuYWxseSBuZXZlciBnZXQgYSB0YWJsZSBBTSBvcGFxdWUg YXJlYS4KICAqCi0gKiBBbiBpbmRleCBBTSBnZXRzIGEgbWFuZGF0b3J5IHN0YXRpYyBhcmVhIChi YXRjaF9pbmRleF9vcGFxdWVfc3RhdGljKSwgd2hpY2gKLSAqIGhhcyBhIHNpemUga25vd24gYXQg Y29tcGlsZSB0aW1lIC0tIE1BWEFMSUdOKHNpemVvZih0aGUgQU0ncyBzdHJ1Y3QpKSAtLQotICog YW5kIGlzIGFjY2Vzc2VkIHZpYSBpbmRleGFtX3V0aWxfYmF0Y2hfZ2V0X2FtZGF0YSBhdCB0aGF0 IGZpeGVkIG9mZnNldC4KLSAqIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgYnV0IGxlc3MgZmxleGli bGUgdGhhbiB0aGUgdGFibGUgQU0gc2NoZW1lOiBldmVyeQotICogaW5kZXggQU0gdXNlcyB0aGUg c2FtZSBnZW5lcmljIGZpeGVkLXNpemUgaGVhZGVyLgorICogQW4gaW5kZXggQU0gZ2V0cyB0d28g b3BhcXVlIGFyZWFzLCBib3RoIGJlZm9yZSB0aGUgYmF0Y2ggcG9pbnRlciwgZGl2aWRlZCBieQor ICogd2hhdCBpcyBrbm93biB3aGVuLiAgVGhlIG1hbmRhdG9yeSBzdGF0aWMgYXJlYSAoYmF0Y2hf aW5kZXhfb3BhcXVlX3N0YXRpYykKKyAqIGhhcyBhIHNpemUga25vd24gYXQgY29tcGlsZSB0aW1l IC0tIE1BWEFMSUdOKHNpemVvZih0aGUgQU0ncyBzdHJ1Y3QpKSAtLSBhbmQKKyAqIGlzIGFjY2Vz c2VkIHZpYSBpbmRleGFtX3V0aWxfYmF0Y2hfZ2V0X2FtZGF0YSBhdCB0aGF0IGZpeGVkIG9mZnNl dC4gIFRoaXMgaXMKKyAqIG1vcmUgZWZmaWNpZW50IGJ1dCBsZXNzIGZsZXhpYmxlIHRoYW4gdGhl IHRhYmxlIEFNIHNjaGVtZTogZXZlcnkgaW5kZXggQU0KKyAqIHVzZXMgdGhlIHNhbWUgZ2VuZXJp YyBmaXhlZC1zaXplIGhlYWRlci4KKyAqCisgKiBJbmRleCBBTXMgY2FuIHVzZSBhIHNlY29uZCwg b3B0aW9uYWwgZHluYW1pY2FsbHktc2l6ZWQgcHJpdmF0ZSBhcmVhCisgKiAoYmF0Y2hfaW5kZXhf b3BhcXVlX2R5bikgdGhhdCBzaXRzIGp1c3QgYmVmb3JlIHRoZSBzdGF0aWMgYXJlYS4gIEl0cyBz aXplCisgKiBpcyBjaG9zZW4gYXQgc2NhbiBzdGFydCByYXRoZXIgdGhhbiBhdCBjb21waWxlIHRp bWUuICBJdCBpcyBhY2Nlc3NlZCB2aWEKKyAqIGluZGV4X3NjYW5fYmF0Y2hfaW5kZXhfb3BhcXVl X2R5bi4gIFRoaXMgc2Vjb25kIGFyZWEgaXMgZ2VuZXJhbGx5IG9ubHkgdXNlZAorICogZHVyaW5n IHNjYW5zIHdoZXJlIGxhcmdlIGFtb3VudHMgb2Ygc3VwcGxlbWVudGFsIG1ldGFkYXRhIGFyZSBy ZXF1aXJlZCwKKyAqIHRoYXQgY2Fubm90IHJlYXNvbmFibHkgYmUgYWxsb2NhdGVkIGZvciBldmVy eSBzY2FuLiAgVHlwaWNhbGx5LCB0aGlzIGlzCisgKiBncmFudWxhciBpbmZvcm1hdGlvbiBhYm91 dCB0aGUgYmF0Y2gncyBpdGVtcyBmb3IgdXNlIGJ5IHRoZSBpbmRleCBBTSdzCisgKiBhbWdldHRy YW5zZm9ybSByb3V0aW5lLiAgSW5kZXggQU1zIGNhbm5vdCBleHBlY3QgdGhpcyBzcGFjZSB0byBi ZSBhbGxvY2F0ZWQKKyAqIGR1cmluZyBiaXRtYXAgaW5kZXggc2NhbnMuCiAgKi8KIHR5cGVkZWYg c3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQogewpAQCAtMzk4LDYgKzQxMCw3IEBAIHR5cGVkZWYg c3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJLyogYmF0Y2ggc2l6ZSBpbmZvcm1hdGlvbiwgc2V0 IG9uY2UgYnkgaW5kZXggQU0gaW4gYW1iZWdpbnNjYW4gKi8KIAl1aW50MTYJCW1heGl0ZW1zYmF0 Y2g7CS8qIHNpemUgb2YgZWFjaCBiYXRjaCdzIGl0ZW1zW10gYXJyYXkgKi8KIAl1aW50MTYJCWJh dGNoX2luZGV4X29wYXF1ZV9zdGF0aWM7CS8qIGNvbXBpbGUtdGltZSBvcGFxdWUgc2l6ZSAqLwor CVNpemUJCWJhdGNoX2luZGV4X29wYXF1ZV9keW47IC8qIG9wdGlvbmFsIGR5bmFtaWMgb3BhcXVl IHNpemUgKi8KIAl1aW50MTYJCWJhdGNoX3R1cGxlc193b3Jrc3BhY2U7IC8qIGN1cnJUdXBsZXMg d29ya3NwYWNlIHNpemUgKi8KIAogCS8qCkBAIC01NDksNiArNTYyLDIyIEBAIGluZGV4X3NjYW5f YmF0Y2hfdGFibGVfYXJlYShJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpCiAJcmV0dXJuIGluZGV4X3NjYW5fYmF0Y2hfYmFzZShzY2FuLCBiYXRjaCk7CiB9CiAK Ky8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpbmRleCBBTSdzIGR5bmFtaWMgb3BhcXVl IGFyZWEuCisgKgorICogVGhpcyBvcHRpb25hbCBhcmVhIChzaXplZCBiYXRjaF9pbmRleF9vcGFx dWVfZHluKSBzaXRzIGltbWVkaWF0ZWx5IGJlZm9yZQorICogdGhlIGluZGV4IEFNJ3Mgc3RhdGlj IG9wYXF1ZSBhcmVhLiAgQ29yZSBjb2RlIHRyZWF0cyBpdCBhcyBhIHNpbmdsZSBvcGFxdWUKKyAq IGFsbG9jYXRpb247IHRoZSBpbmRleCBBTSBhbG9uZSBkZWNpZGVzIGl0cyBpbnRlcm5hbCBzdHJ1 Y3R1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitpbmRleF9zY2FuX2JhdGNoX2luZGV4 X29wYXF1ZV9keW4oSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNo KQoreworCUFzc2VydChzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfZHluID4gMCk7CisKKwlyZXR1 cm4gKGNoYXIgKikgYmF0Y2ggLSBzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc3RhdGljIC0KKwkJ TUFYQUxJR04oc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX2R5bik7Cit9CisKIC8qCiAgKiBBZHZh bmNlIHBvc2l0aW9uIHRvIGl0cyBuZXh0IGl0ZW0gaW4gdGhlIGJhdGNoLgogICoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9i cmluL2JyaW4uYwppbmRleCAyZDlkMDRhYTMuLjQ3OTlhNDBiNyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2Jy aW4uYwpAQCAtMzAyLDYgKzMwMiw3IEBAIGJyaW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CS5hbWdldGJhdGNoID0gTlVMTCwKIAkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJLmFta2ls bGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0cmFuc2Zvcm0gPSBOVUxMLAogCQkuYW1nZXRi aXRtYXAgPSBicmluZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gYnJpbmVuZHNjYW4sCiAJCS5h bXBvc3Jlc2V0ID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2lu dXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggMGU4YjZhNTQ5 Li5jZWI5Y2I0NDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCkBAIC04Nyw2ICs4Nyw3IEBA IGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAogCQku YW11bmd1YXJkYmF0Y2ggPSBOVUxMLAogCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5h bWdldHRyYW5zZm9ybSA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGdpbmdldGJpdG1hcCwKIAkJ LmFtZW5kc2NhbiA9IGdpbmVuZHNjYW4sCiAJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L1JFQURNRSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L1JFQURNRQppbmRleCA3NTQ0NWIwNzQuLjAwYjk0ZDlmNyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpc3QvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L1JF QURNRQpAQCAtNDgsNyArNDgsNyBAQCBUaGUgb3JpZ2luYWwgYWxnb3JpdGhtcyB3ZXJlIG1vZGlm aWVkIGluIHNldmVyYWwgd2F5czoKIAogKiBUaGV5IGhhZCB0byBiZSBhZGFwdGVkIHRvIFBvc3Rn cmVTUUwgY29udmVudGlvbnMuIEZvciBleGFtcGxlLCB0aGUgU0VBUkNICiAgIGFsZ29yaXRobSB3 YXMgY29uc2lkZXJhYmx5IGNoYW5nZWQsIGJlY2F1c2UgaW4gUG9zdGdyZVNRTCB0aGUgc2VhcmNo IGZ1bmN0aW9uCi0gIHNob3VsZCByZXR1cm4gb25lIHR1cGxlIChuZXh0KSwgbm90IGFsbCB0dXBs ZXMgYXQgb25jZS4gQWxzbywgaXQgc2hvdWxkCisgIHJldHVybnMgbWF0Y2hpbmcgdHVwbGVzIGlu Y3JlbWVudGFsbHksIG5vdCBhbGwgYXQgb25jZS4gQWxzbywgaXQgc2hvdWxkCiAgIHJlbGVhc2Ug cGFnZSBsb2NrcyBiZXR3ZWVuIGNhbGxzLgogKiBTaW5jZSB3ZSBhZGRlZCBzdXBwb3J0IGZvciB2 YXJpYWJsZSBsZW5ndGgga2V5cywgaXQncyBub3QgcG9zc2libGUgdG8KICAgZ3VhcmFudGVlIGVu b3VnaCBmcmVlIHNwYWNlIGZvciBhbGwga2V5cyBvbiBwYWdlcyBhZnRlciBzcGxpdHRpbmcuIFVz ZXIKQEAgLTcxLDIwICs3MSwyNCBAQCB3YXMgbm90IHRvdWNoZWQgaW4gdGhlIHBhcGVyLgogU2Vh cmNoIEFsZ29yaXRobQogLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgc2VhcmNoIGNvZGUgbWFpbnRh aW5zIGEgcXVldWUgb2YgdW52aXNpdGVkIGl0ZW1zLCB3aGVyZSBhbiAiaXRlbSIgaXMKLWVpdGhl ciBhIGhlYXAgdHVwbGUga25vd24gdG8gc2F0aXNmeSB0aGUgc2VhcmNoIGNvbmRpdGlvbnMsIG9y IGFuIGluZGV4Ci1wYWdlIHRoYXQgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBzZWFyY2ggY29uZGl0 aW9ucyBhY2NvcmRpbmcgdG8gaW5zcGVjdGlvbgotb2YgaXRzIHBhcmVudCBwYWdlJ3MgZG93bmxp bmsgaXRlbS4gIEluaXRpYWxseSB0aGUgcm9vdCBwYWdlIGlzIHNlYXJjaGVkCi10byBmaW5kIHVu dmlzaXRlZCBpdGVtcyBpbiBpdC4gIFRoZW4gd2UgcHVsbCBpdGVtcyBmcm9tIHRoZSBxdWV1ZS4g IEEKLWhlYXAgdHVwbGUgcG9pbnRlciBpcyBqdXN0IHJldHVybmVkIGltbWVkaWF0ZWx5OyBhbiBp bmRleCBwYWdlIGVudHJ5Ci1jYXVzZXMgdGhhdCBwYWdlIHRvIGJlIHNlYXJjaGVkLCBnZW5lcmF0 aW5nIG1vcmUgcXVldWUgZW50cmllcy4KK1RoZSBzZWFyY2ggY29kZSBtYWludGFpbnMgYSBxdWV1 ZSBvZiB1bnZpc2l0ZWQgaXRlbXMuICBGb3IgYSBwbGFpbiBpbmRleAorc2NhbiBhbiAiaXRlbSIg aXMgYWx3YXlzIGFuIGluZGV4IHBhZ2UgdGhhdCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHNlYXJj aAorY29uZGl0aW9ucyBhY2NvcmRpbmcgdG8gaW5zcGVjdGlvbiBvZiBpdHMgcGFyZW50IHBhZ2Un cyBkb3dubGluayBpdGVtOworbWF0Y2hpbmcgaGVhcCB0dXBsZXMgYXJlIG5vdCBxdWV1ZWQsIGJ1 dCBhcmUgZ2F0aGVyZWQgaW50byBhIGJhdGNoIGFzIGVhY2gKK2xlYWYgcGFnZSBpcyBzY2FubmVk IChzZWUgIlJldHVybmluZyBtYXRjaGVzIGluIGJhdGNoZXMiLCBiZWxvdykuICBGb3IgYQorbmVh cmVzdC1uZWlnaGJvciAob3JkZXJlZCkgc2NhbiB0aGUgcXVldWUgYWRkaXRpb25hbGx5IGhvbGRz IGhlYXAgdHVwbGVzCitrbm93biB0byBzYXRpc2Z5IHRoZSBzZWFyY2ggY29uZGl0aW9ucywgc28g dGhhdCBoZWFwIHR1cGxlcyBhbmQgaW5kZXgKK3BhZ2VzIGNhbiBiZSBpbnRlcmxlYXZlZCBpbiBk aXN0YW5jZSBvcmRlci4gIEluaXRpYWxseSB0aGUgcm9vdCBwYWdlIGlzCithZGRlZCB0byB0aGUg cXVldWUuICBUaGVuIHdlIHB1bGwgaXRlbXMgZnJvbSB0aGUgcXVldWU6IGFuIGluZGV4IHBhZ2UK K2VudHJ5IGNhdXNlcyB0aGF0IHBhZ2UgdG8gYmUgc2Nhbm5lZCwgZ2VuZXJhdGluZyBtb3JlIHF1 ZXVlIGVudHJpZXMsIHdoaWxlCithIGhlYXAgdHVwbGUgZW50cnkgKG9yZGVyZWQgc2NhbnMgb25s eSkgaXMgYSBtYXRjaCB0byBiZSByZXR1cm5lZC4KIAotVGhlIHF1ZXVlIGlzIGtlcHQgb3JkZXJl ZCB3aXRoIGhlYXAgdHVwbGUgaXRlbXMgYXQgdGhlIGZyb250LCB0aGVuCi1pbmRleCBwYWdlIGVu dHJpZXMsIHdpdGggYW55IG5ld2x5LWFkZGVkIGluZGV4IHBhZ2UgZW50cnkgaW5zZXJ0ZWQKLWJl Zm9yZSBleGlzdGluZyBpbmRleCBwYWdlIGVudHJpZXMuICBUaGlzIGVuc3VyZXMgZGVwdGgtZmly c3QgdHJhdmVyc2FsCi1vZiB0aGUgaW5kZXgsIGFuZCBpbiBwYXJ0aWN1bGFyIGNhdXNlcyB0aGUg Zmlyc3QgZmV3IGhlYXAgdHVwbGVzIHRvIGJlCi1yZXR1cm5lZCBhcyBzb29uIGFzIHBvc3NpYmxl LiAgVGhhdCBpcyBoZWxwZnVsIGluIGNhc2UgdGhlcmUgaXMgYSBMSU1JVAotdGhhdCByZXF1aXJl cyBvbmx5IGEgZmV3IHR1cGxlcyB0byBiZSBwcm9kdWNlZC4KK1RoZSBxdWV1ZSBpcyBrZXB0IG9y ZGVyZWQgc28gdGhhdCB3ZSBwZXJmb3JtIGEgZGVwdGgtZmlyc3QgdHJhdmVyc2FsIG9mCit0aGUg aW5kZXg6IGFueSBuZXdseS1hZGRlZCBpbmRleCBwYWdlIGVudHJ5IGlzIGluc2VydGVkIGJlZm9y ZSBleGlzdGluZworaW5kZXggcGFnZSBlbnRyaWVzLCBhbmQgKGZvciBvcmRlcmVkIHNjYW5zKSBo ZWFwIHR1cGxlIGl0ZW1zIGFyZSBrZXB0IGF0Cit0aGUgZnJvbnQuICBUaGlzIGNhdXNlcyB0aGUg Zmlyc3QgZmV3IG1hdGNoaW5nIGhlYXAgdHVwbGVzIHRvIGJlIHJldHVybmVkCithcyBzb29uIGFz IHBvc3NpYmxlLCB3aGljaCBpcyBoZWxwZnVsIGluIGNhc2UgdGhlcmUgaXMgYSBMSU1JVCB0aGF0 CityZXF1aXJlcyBvbmx5IGEgZmV3IHR1cGxlcyB0byBiZSBwcm9kdWNlZC4KIAogVG8gaW1wbGVt ZW50IG5lYXJlc3QtbmVpZ2hib3Igc2VhcmNoLCB0aGUgcXVldWUgZW50cmllcyBhcmUgYXVnbWVu dGVkCiB3aXRoIGRpc3RhbmNlIGRhdGE6IGhlYXAgdHVwbGUgZW50cmllcyBhcmUgbGFiZWxlZCB3 aXRoIGV4YWN0IGRpc3RhbmNlCkBAIC05NCwxNyArOTgsMTggQEAgcXVldWUgZW50cmllcyBhcmUg cmV0cmlldmVkIGluIHNtYWxsZXN0LWRpc3RhbmNlLWZpcnN0IG9yZGVyLCB3aXRoCiBlbnRyaWVz IGhhdmluZyBpZGVudGljYWwgZGlzdGFuY2VzIG1hbmFnZWQgYXMgc3RhdGVkIGluIHRoZSBwcmV2 aW91cwogcGFyYWdyYXBoLgogCi1UaGUgc2VhcmNoIGFsZ29yaXRobSBrZWVwcyBhbiBpbmRleCBw YWdlIGxvY2tlZCBvbmx5IGxvbmcgZW5vdWdoIHRvIHNjYW4KLWl0cyBlbnRyaWVzIGFuZCBxdWV1 ZSB0aG9zZSB0aGF0IHNhdGlzZnkgdGhlIHNlYXJjaCBjb25kaXRpb25zLiAgU2luY2UKLWluc2Vy dGlvbnMgY2FuIG9jY3VyIGNvbmN1cnJlbnRseSB3aXRoIHNlYXJjaGVzLCBpdCBpcyBwb3NzaWJs ZSBmb3IgYW4KLWluZGV4IGNoaWxkIHBhZ2UgdG8gYmUgc3BsaXQgYmV0d2VlbiB0aGUgdGltZSB3 ZSBtYWtlIGEgcXVldWUgZW50cnkgZm9yIGl0Ci0od2hpbGUgdmlzaXRpbmcgaXRzIHBhcmVudCBw YWdlKSBhbmQgdGhlIHRpbWUgd2UgYWN0dWFsbHkgcmVhY2ggYW5kIHNjYW4KLXRoZSBjaGlsZCBw YWdlLiAgVG8gYXZvaWQgbWlzc2luZyB0aGUgZW50cmllcyB0aGF0IHdlcmUgbW92ZWQgdG8gdGhl IHJpZ2h0Ci1zaWJsaW5nLCB3ZSBkZXRlY3Qgd2hldGhlciBhIHNwbGl0IGhhcyBvY2N1cnJlZCBi eSBjb21wYXJpbmcgdGhlIGNoaWxkCi1wYWdlJ3MgTlNOIChub2RlIHNlcXVlbmNlIG51bWJlciwg YSBzcGVjaWFsLXB1cnBvc2UgTFNOKSB0byB0aGUgTFNOIHRoYXQKLXRoZSBwYXJlbnQgaGFkIHdo ZW4gdmlzaXRlZC4gIElmIGl0IGRpZCwgdGhlIHNpYmxpbmcgcGFnZSBpcyBpbW1lZGlhdGVseQot YWRkZWQgdG8gdGhlIGZyb250IG9mIHRoZSBxdWV1ZSwgZW5zdXJpbmcgdGhhdCBpdHMgaXRlbXMg d2lsbCBiZSBzY2FubmVkCi1pbiB0aGUgc2FtZSBvcmRlciBhcyBpZiB0aGV5IHdlcmUgc3RpbGwg b24gdGhlIG9yaWdpbmFsIGNoaWxkIHBhZ2UuCitUaGUgc2VhcmNoIGFsZ29yaXRobSBrZWVwcyBh biBpbmRleCBwYWdlIGxvY2tlZCBvbmx5IGxvbmcgZW5vdWdoIHRvIHNjYW4gaXRzCitlbnRyaWVz IC0tIHF1ZXVlaW5nIHRoZSBjaGlsZCBwYWdlcyB0aGF0IHNhdGlzZnkgdGhlIHNlYXJjaCBjb25k aXRpb25zLCBhbmQKK2dhdGhlcmluZyBhbnkgbWF0Y2hpbmcgaGVhcCB0dXBsZXMgKGludG8gYSBi YXRjaCwgb3Igb250byB0aGUgcXVldWUgZm9yIGFuCitvcmRlcmVkIHNjYW4pLiAgU2luY2UgaW5z ZXJ0aW9ucyBjYW4gb2NjdXIgY29uY3VycmVudGx5IHdpdGggc2VhcmNoZXMsIGl0IGlzCitwb3Nz aWJsZSBmb3IgYW4gaW5kZXggY2hpbGQgcGFnZSB0byBiZSBzcGxpdCBiZXR3ZWVuIHRoZSB0aW1l IHdlIG1ha2UgYSBxdWV1ZQorZW50cnkgZm9yIGl0ICh3aGlsZSB2aXNpdGluZyBpdHMgcGFyZW50 IHBhZ2UpIGFuZCB0aGUgdGltZSB3ZSBhY3R1YWxseSByZWFjaAorYW5kIHNjYW4gdGhlIGNoaWxk IHBhZ2UuICBUbyBhdm9pZCBtaXNzaW5nIHRoZSBlbnRyaWVzIHRoYXQgd2VyZSBtb3ZlZCB0byB0 aGUKK3JpZ2h0IHNpYmxpbmcsIHdlIGRldGVjdCB3aGV0aGVyIGEgc3BsaXQgaGFzIG9jY3VycmVk IGJ5IGNvbXBhcmluZyB0aGUgY2hpbGQKK3BhZ2UncyBOU04gKG5vZGUgc2VxdWVuY2UgbnVtYmVy LCBhIHNwZWNpYWwtcHVycG9zZSBMU04pIHRvIHRoZSBMU04gdGhhdCB0aGUKK3BhcmVudCBoYWQg d2hlbiB2aXNpdGVkLiAgSWYgaXQgZGlkLCB0aGUgc2libGluZyBwYWdlIGlzIGltbWVkaWF0ZWx5 IGFkZGVkIHRvCit0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlLCBlbnN1cmluZyB0aGF0IGl0cyBpdGVt cyB3aWxsIGJlIHNjYW5uZWQgaW4gdGhlIHNhbWUKK29yZGVyIGFzIGlmIHRoZXkgd2VyZSBzdGls bCBvbiB0aGUgb3JpZ2luYWwgY2hpbGQgcGFnZS4KIAogQXMgaXMgdXN1YWwgaW4gUG9zdGdyZXMs IHRoZSBzZWFyY2ggYWxnb3JpdGhtIG9ubHkgZ3VhcmFudGVlcyB0byBmaW5kIGluZGV4CiBlbnRy aWVzIHRoYXQgZXhpc3RlZCBiZWZvcmUgdGhlIHNjYW4gc3RhcnRlZDsgaW5kZXggZW50cmllcyBh ZGRlZCBkdXJpbmcKQEAgLTExNiw2ICsxMjEsMzYgQEAgQW55IHN1Y2ggZW5sYXJnZW1lbnQgd291 bGQgYmUgdG8gYWRkIGNoaWxkIGl0ZW1zIHRoYXQgd2UgYXJlbid0IGludGVyZXN0ZWQKIGluIHJl dHVybmluZyBhbnl3YXkuCiAKIAorUmV0dXJuaW5nIG1hdGNoZXMgaW4gYmF0Y2hlcworLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaVNUIGltcGxlbWVudHMgdGhlIGFtZ2V0YmF0Y2gg aW5kZXggQU0gaW50ZXJmYWNlLCB3aG9zZSBjb250cmFjdCBpcworZG9jdW1lbnRlZCBpbiBkb2Mv c3JjL3NnbWwvaW5kZXhhbS5zZ21sIChzZWUgYWxzbworc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9SRUFETUUpLiAgRWFjaCBjYWxsIGhhbmRzIHRoZSB0YWJsZSBBTSBhIGJhdGNoIG9mCittYXRj aGluZyBUSURzIHJhdGhlciB0aGFuIGEgc2luZ2xlIFRJRC4gIEdpU1QgZm9ybXMgdHdvIGtpbmRz IG9mIGJhdGNoOgorCisqIEEgcGxhaW4gKG5vbi1vcmRlcmVkKSBzY2FuIHJldHVybnMgb25lICJj b252ZW50aW9uYWwiIGJhdGNoIHBlciBsZWFmCisgIHBhZ2UsIGhvbGRpbmcgYWxsIG9mIHRoYXQg cGFnZSdzIG1hdGNoaW5nIFRJRHMgaW4gcGh5c2ljYWwgb3JkZXIuICBBcyBpbgorICBuYnRyZWUg YW5kIGhhc2gsIHRoZSBiYXRjaCByZXRhaW5zIHRoZSBsZWFmIHBhZ2UncyBidWZmZXIgcGluICh0 aG91Z2ggbm90CisgIGl0cyBjb250ZW50IGxvY2spIGFzIHRoZSBpbnRlcmxvY2sgYWdhaW5zdCBj b25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkKKyAgVkFDVVVNLgorCisqIEEgbmVhcmVzdC1uZWln aGJvciAob3JkZXJlZCkgc2NhbiByZXR1cm5zIGEgc2luZ2xlICJ2aXJ0dWFsIiBiYXRjaC4gIEl0 cworICBtYXRjaGVzIGRvbid0IGFycml2ZSBvbmUgbGVhZiBwYWdlIGF0IGEgdGltZSwgc28gaW5z dGVhZCB3ZSBkcmFpbiB0aGUKKyAgZGlzdGFuY2Utb3JkZXJlZCBxdWV1ZSwgY29weWluZyBtYXRj aGluZyBUSURzIGludG8gdGhlIGJhdGNoIGluIGRpc3RhbmNlCisgIG9yZGVyIC0tIHR5cGljYWxs eSBzcGFubmluZyBtYW55IGxlYWYgcGFnZXMuICBBIHZpcnR1YWwgYmF0Y2ggcmV0YWlucyBubwor ICBidWZmZXIgcGluOyBlYWNoIGxlYWYgcGFnZSdzIHBpbiBpcyBkcm9wcGVkIGFzIHNvb24gYXMg dGhlIHBhZ2UgaXMgc2Nhbm5lZC4KKworVkFDVVVNIGhvbm9ycyBhIGJhdGNoJ3MgcGluIGJ5IHRh a2luZyBhIGNsZWFudXAgbG9jayBvbiB0aGUgbGVhZiBwYWdlIChzZWUKKyJCdWxrIGRlbGV0ZSBh bGdvcml0aG0gKFZBQ1VVTSkiLCBiZWxvdyksIGp1c3QgYXMgbmJ0cmVlIGRvZXMuICBCZWNhdXNl IGEKK3ZpcnR1YWwgYmF0Y2ggaG9sZHMgbm8gc3VjaCBwaW4sIG9yZGVyZWQgc2NhbnMgY29tZSB3 aXRoIHR3byByZXN0cmljdGlvbnMsCitib3RoIGFsc28gc2VlbiBpbiBiaXRtYXAgKGFtZ2V0Yml0 bWFwKSBzY2FucyBhbmQgYm90aCBleHBsYWluZWQgaW4KK2RvYy9zcmMvc2dtbC9pbmRleGFtLnNn bWw6IHRoZXkgbmV2ZXIgc2V0IExQX0RFQUQgYml0cyAoZ2lzdGtpbGxpdGVtc2JhdGNoCitkb2Vz IG5vdGhpbmcgZm9yIGEgdmlydHVhbCBiYXRjaCksIGFuZCB0aGV5IGFyZSBuZXZlciBwbGFubmVk IGFzIGluZGV4LW9ubHkKK3NjYW5zIChhIHZpcnR1YWwgYmF0Y2ggaGFzIG5vIHBpbiB0byBvZmZl ciBhcyB0aGUgVElELXJlY3ljbGluZyBpbnRlcmxvY2sKK3RoYXQgaW5kZXgtb25seSBzY2FucyBk ZXBlbmQgb24pLgorCisKIEluc2VydCBBbGdvcml0aG0KIC0tLS0tLS0tLS0tLS0tLS0KIApAQCAt NDUyLDYgKzQ4NywxMSBAQCBCLXRyZWUgVkFDVVVNIHVzZXMsIGJ1dCBiZWNhdXNlIHdlIGFscmVh ZHkgaGF2ZSBOU05zIG9uIHBhZ2VzLCB0byBkZXRlY3QgcGFnZQogc3BsaXRzIGR1cmluZyBzZWFy Y2hlcywgd2UgZG9uJ3QgbmVlZCBhICJ2YWN1dW0gY3ljbGUgSUQiIGNvbmNlcHQgZm9yIHRoYXQK IGxpa2UgQi10cmVlIGRvZXMuCiAKK1dlIHRha2UgYSBmdWxsIGNsZWFudXAgbG9jayBvbiBldmVy eSBsZWFmIHBhZ2UgYXMgd2Ugc2NhbiBpdCwgZXZlbiBsZWFmCitwYWdlcyB3aXRoIG5vIGRlbGV0 YWJsZSB0dXBsZXMuICBBcyBpbiBuYnRyZWUsIHRoaXMgaXMgdGhlIGludGVybG9jayB0aGF0Cito b2xkcyBjb25jdXJyZW50IHNjYW5zIG9mZiBmcm9tIFRJRCByZWN5Y2xpbmc7IHNlZSAiUmV0dXJu aW5nIG1hdGNoZXMgaW4KK2JhdGNoZXMiLCBhYm92ZS4KKwogV2hpbGUgd2Ugc2NhbiBhbGwgdGhl IHBhZ2VzLCB3ZSBhbHNvIG1ha2Ugbm90ZSBvZiBhbnkgY29tcGxldGVseSBlbXB0eSBsZWFmCiBw YWdlcy4gV2Ugd2lsbCB0cnkgdG8gdW5saW5rIHRoZW0gZnJvbSB0aGUgdHJlZSBhZnRlciB0aGUg c2Nhbi4gV2UgYWxzbyByZWNvcmQKIHRoZSBibG9jayBudW1iZXJzIG9mIGFsbCBpbnRlcm5hbCBw YWdlczsgdGhleSBhcmUgbmVlZGVkIHRvIGxvY2F0ZSBwYXJlbnRzIG9mCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9n aXN0LmMKaW5kZXggNjdiMTYwNTNhLi44OGI4YTRkZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9naXN0L2dpc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMK QEAgLTEwMywxMCArMTAzLDExIEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5h bWFkanVzdG1lbWJlcnMgPSBnaXN0YWRqdXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gZ2lz dGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lzdHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBn aXN0Z2V0dHVwbGUsCi0JCS5hbWdldGJhdGNoID0gTlVMTCwKLQkJLmFtdW5ndWFyZGJhdGNoID0g TlVMTCwKLQkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEws CisJCS5hbWdldGJhdGNoID0gZ2lzdGdldGJhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBnaXN0 dW5ndWFyZGJhdGNoLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IGdpc3RraWxsaXRlbXNiYXRjaCwK KwkJLmFtZ2V0dHJhbnNmb3JtID0gZ2lzdGdldHRyYW5zZm9ybSwKIAkJLmFtZ2V0Yml0bWFwID0g Z2lzdGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGdpc3RlbmRzY2FuLAogCQkuYW1wb3NyZXNl dCA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMKaW5kZXggNGQ3YzEwMGQ3Li5kZDVj YTBiZjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMKQEAgLTI3LDY4ICsyNyw3OCBAQAog I2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAvKgotICogZ2lzdGtpbGxpdGVtcygpIC0tIHNldCBM UF9ERUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwotICogdG9sZCB1 cyB3ZXJlIGtpbGxlZC4KLSAqCi0gKiBXZSByZS1yZWFkIHBhZ2UgaGVyZSwgc28gaXQncyBpbXBv cnRhbnQgdG8gY2hlY2sgcGFnZSBMU04uIElmIHRoZSBwYWdlCi0gKiBoYXMgYmVlbiBtb2RpZmll ZCBzaW5jZSB0aGUgbGFzdCByZWFkIChhcyBkZXRlcm1pbmVkIGJ5IExTTiksIHdlIGNhbm5vdAot ICogZmxhZyBhbnkgZW50cmllcyBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIG9sZCBl bnRyeSB3YXMgdmFjdXVtZWQKLSAqIGF3YXkgYW5kIHRoZSBUSUQgd2FzIHJlLXVzZWQgYnkgYSBj b21wbGV0ZWx5IGRpZmZlcmVudCBoZWFwIHR1cGxlLgorICogZ2lzdGtpbGxpdGVtc2JhdGNoKCkg LS0gTWFyayBkZWFkIGl0ZW1zJyBpbmRleCB0dXBsZXMgTFBfREVBRAogICovCi1zdGF0aWMgdm9p ZAotZ2lzdGtpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCit2b2lkCitnaXN0a2lsbGl0ZW1z YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKLQlHSVNU U2Nhbk9wYXF1ZSBzbyA9IChHSVNUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUdJU1RCYXRj aERhdGEgKmdiYXRjaCA9IEdJU1RCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOworCVJlbGF0aW9u CXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJQnVmZmVyCQlidWZmZXI7CiAJUGFnZQkJcGFn ZTsKLQlPZmZzZXROdW1iZXIgb2ZmbnVtOwotCUl0ZW1JZAkJaWlkOwotCWludAkJCWk7CiAJYm9v bAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7CisJWExvZ1JlY1B0cglsYXRlc3Rsc247CiAKLQlB c3NlcnQoc28tPmN1ckJsa25vICE9IEludmFsaWRCbG9ja051bWJlcik7Ci0JQXNzZXJ0KFhMb2dS ZWNQdHJJc1ZhbGlkKHNvLT5jdXJQYWdlTFNOKSk7Ci0JQXNzZXJ0KHNvLT5raWxsZWRJdGVtcyAh PSBOVUxMKTsKKwlBc3NlcnQoYmF0Y2gtPm51bURlYWQgPiAwKTsKIAotCWJ1ZmZlciA9IFJlYWRC dWZmZXIoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPmN1ckJsa25vKTsKLQlpZiAoIUJ1ZmZlcklz VmFsaWQoYnVmZmVyKSkKKwkvKgorCSAqIFNraXAgdmlydHVhbCAob3JkZXJlZC1zY2FuKSBiYXRj aGVzLCBzaW5jZSB0aGVyZSdzIG5vIHByYWN0aWNhbCB3YXkgdG8KKwkgKiB2aXNpdCBhbGwgb2Yg dGhlIGluZGV4IHBhZ2VzIHRoYXQgdGhlc2UgdHVwbGVzIHJlYWxseSBjYW1lIGZyb20KKwkgKi8K KwlpZiAoZ2JhdGNoLT5ibGtubyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCiAJCXJldHVybjsKIAor CWJ1ZmZlciA9IFJlYWRCdWZmZXIocmVsLCBnYmF0Y2gtPmJsa25vKTsKIAlMb2NrQnVmZmVyKGJ1 ZmZlciwgR0lTVF9TSEFSRSk7Ci0JZ2lzdGNoZWNrcGFnZShzY2FuLT5pbmRleFJlbGF0aW9uLCBi dWZmZXIpOworCWdpc3RjaGVja3BhZ2UocmVsLCBidWZmZXIpOwogCXBhZ2UgPSBCdWZmZXJHZXRQ YWdlKGJ1ZmZlcik7CiAKLQkvKgotCSAqIElmIHBhZ2UgTFNOIGRpZmZlcnMgaXQgbWVhbnMgdGhh dCB0aGUgcGFnZSB3YXMgbW9kaWZpZWQgc2luY2UgdGhlIGxhc3QKLQkgKiByZWFkLiBraWxsZWRJ dGVtcyBjb3VsZCBiZSBub3QgdmFsaWQgc28gTFBfREVBRCBoaW50cyBhcHBseWluZyBpcyBub3QK LQkgKiBzYWZlLgotCSAqLwotCWlmIChCdWZmZXJHZXRMU05BdG9taWMoYnVmZmVyKSAhPSBzby0+ Y3VyUGFnZUxTTikKLQkJZ290byB1bmxvY2s7Ci0KLQlBc3NlcnQoR2lzdFBhZ2VJc0xlYWYocGFn ZSkpOwotCi0JLyoKLQkgKiBNYXJrIGFsbCBraWxsZWRJdGVtcyBhcyBkZWFkLiBXZSBuZWVkIG5v IGFkZGl0aW9uYWwgcmVjaGVjaywgYmVjYXVzZSwKLQkgKiBpZiBwYWdlIHdhcyBtb2RpZmllZCwg Y3VyUGFnZUxTTiBtdXN0IGhhdmUgY2hhbmdlZC4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc28t Pm51bUtpbGxlZDsgaSsrKQorCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWZmZXIp OworCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5sc24gIT0g bGF0ZXN0bHNuKQogCXsKLQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCXsKLQkJCS8qCi0JCQkg KiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbiB1cGRh dGUgdGhlCi0JCQkgKiBwYWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdl IGFyZSBub3QgYWxsb3dlZCwKLQkJCSAqIHRoZXJlJ3Mgbm8gcG9pbnQgY29udGludWluZy4KLQkJ CSAqLwotCQkJaWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZmZlcikpCi0JCQkJZ290byB1 bmxvY2s7Ci0JCX0KKwkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLworCQlVbmxv Y2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCXJldHVybjsKKwl9CiAKLQkJb2ZmbnVtID0gc28t PmtpbGxlZEl0ZW1zW2ldOwotCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7Ci0J CUl0ZW1JZE1hcmtEZWFkKGlpZCk7Ci0JCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7CisJLyogSXRl cmF0ZSB0aHJvdWdoIGJhdGNoLT5kZWFkSXRlbXNbXSBpbiBpbmRleCBwYWdlIG9yZGVyICovCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBiYXRjaC0+bnVtRGVhZDsgaSsrKQorCXsKKwkJaW50CQkJaXRl bUluZGV4ID0gYmF0Y2gtPmRlYWRJdGVtc1tpXTsKKwkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9IGJh dGNoLT5pdGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0OworCQlJdGVtSWQJCWlpZCA9IFBhZ2VH ZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKKworCQlBc3NlcnQoaXRlbUluZGV4ID49IGJhdGNoLT5m aXJzdEl0ZW0gJiYgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJCUFzc2VydChpID09 IDAgfHwKKwkJCSAgIG9mZm51bSA+IGJhdGNoLT5pdGVtc1tiYXRjaC0+ZGVhZEl0ZW1zW2kgLSAx XV0uaW5kZXhPZmZzZXQpOworCQlBc3NlcnQob2ZmbnVtIDw9IFBhZ2VHZXRNYXhPZmZzZXROdW1i ZXIocGFnZSkpOworCQlBc3NlcnQoSXRlbVBvaW50ZXJFcXVhbHMoJigoSW5kZXhUdXBsZSkgUGFn ZUdldEl0ZW0ocGFnZSwgaWlkKSktPnRfdGlkLAorCQkJCQkJCQkgJmJhdGNoLT5pdGVtc1tpdGVt SW5kZXhdLnRhYmxlVGlkKSk7CisKKwkJLyoKKwkJICogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQs IGlmIGl0IGlzbid0IGFscmVhZHkuICBTaW5jZSB0aGlzIGhhcHBlbnMKKwkJICogd2hpbGUgaG9s ZGluZyBhIHNoYXJlZCBidWZmZXIgbG9jaywgaXQncyBwb3NzaWJsZSB0aGF0IG11bHRpcGxlCisJ CSAqIHByb2Nlc3NlcyBhdHRlbXB0IHRvIGRvIHRoaXMgc2ltdWx0YW5lb3VzbHksIGxlYWRpbmcg dG8gbXVsdGlwbGUKKwkJICogZnVsbC1wYWdlIGltYWdlcyBiZWluZyBzZW50IHRvIFdBTCAoaWYg d2FsX2xvZ19oaW50cyBvciBkYXRhCisJCSAqIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdoaWNo IGlzIHVuZGVzaXJhYmxlLgorCQkgKi8KKwkJaWYgKCFJdGVtSWRJc0RlYWQoaWlkKSkKKwkJewor CQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBVc2UgdGhlIGhp bnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbiB1cGRhdGUKKwkJCQkgKiB0 aGUgcGFnZSB3aGlsZSBqdXN0IGhvbGRpbmcgYSBzaGFyZSBsb2NrLiBJZiB3ZSBhcmUgbm90CisJ CQkJICogYWxsb3dlZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgorCQkJCSAqLworCQkJ CWlmICghQnVmZmVyQmVnaW5TZXRIaW50Qml0cyhidWZmZXIpKQorCQkJCQlnb3RvIHVubG9jazsK KwkJCX0KKworCQkJSXRlbUlkTWFya0RlYWQoaWlkKTsKKwkJCWtpbGxlZHNvbWV0aGluZyA9IHRy dWU7CisJCX0KIAl9CiAKIAlpZiAoa2lsbGVkc29tZXRoaW5nKQpAQCAtOTksMTIgKzEwOSw2IEBA IGdpc3RraWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCiB1bmxvY2s6CiAJVW5sb2NrUmVs ZWFzZUJ1ZmZlcihidWZmZXIpOwotCi0JLyoKLQkgKiBBbHdheXMgcmVzZXQgdGhlIHNjYW4gc3Rh dGUsIHNvIHdlIGRvbid0IGxvb2sgZm9yIHNhbWUgaXRlbXMgb24gb3RoZXIKLQkgKiBwYWdlcy4K LQkgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKIH0KIAogLyoKQEAgLTMyMCwxNCArMzI0LDI5IEBA IGdpc3RpbmRleF9rZXl0ZXN0KEluZGV4U2NhbkRlc2Mgc2NhbiwKICAqIG15RGlzdGFuY2VzOiBk aXN0YW5jZXMgYXJyYXkgYXNzb2NpYXRlZCB3aXRoIHBhZ2VJdGVtLCBvciBOVUxMIGF0IHRoZSBy b290CiAgKiB0Ym06IGlmIG5vdCBOVUxMLCBnaXN0Z2V0Yml0bWFwJ3Mgb3V0cHV0IGJpdG1hcAog ICogbnRpZHM6IGlmIG5vdCBOVUxMLCBnaXN0Z2V0Yml0bWFwJ3Mgb3V0cHV0IHR1cGxlIGNvdW50 ZXIKKyAqIG5ld2JhdGNoOiBpZiBub3QgTlVMTCwgb3JkaW5hcnkgKHVub3JkZXJlZCkgZ2lzdGdl dGJhdGNoIHNjYW4KICAqCi0gKiBJZiB0Ym0vbnRpZHMgYXJlbid0IE5VTEwsIHdlIGFyZSBkb2lu ZyBhbiBhbWdldGJpdG1hcCBzY2FuLCBhbmQgaGVhcAotICogdHVwbGVzIHNob3VsZCBiZSByZXBv cnRlZCBkaXJlY3RseSBpbnRvIHRoZSBiaXRtYXAuICBJZiB0aGV5IGFyZSBOVUxMLAotICogd2Un cmUgZG9pbmcgYSBwbGFpbiBvciBvcmRlcmVkIGluZGV4c2Nhbi4gIEZvciBhIHBsYWluIGluZGV4 c2NhbiwgaGVhcAotICogdHVwbGUgVElEcyBhcmUgcmV0dXJuZWQgaW50byBzby0+cGFnZURhdGFb XS4gIEZvciBhbiBvcmRlcmVkIGluZGV4c2NhbiwKLSAqIGhlYXAgdHVwbGUgVElEcyBhcmUgcHVz aGVkIGludG8gaW5kaXZpZHVhbCBzZWFyY2ggcXVldWUgaXRlbXMuICBJbiBhbgotICogaW5kZXgt b25seSBzY2FuLCByZWNvbnN0cnVjdGVkIGluZGV4IHR1cGxlcyBhcmUgcmV0dXJuZWQgYWxvbmcg d2l0aCB0aGUKLSAqIFRJRHMuCisgKiBJZiB0Ym0vbnRpZHMgYXJlbid0IE5VTEwsIHdlIGFyZSBk b2luZyBhbiBhbWdldGJpdG1hcCBzY2FuLCBhbmQgbWF0Y2hpbmcKKyAqIGhlYXAgdHVwbGVzIGFy ZSByZXBvcnRlZCBkaXJlY3RseSBpbnRvIHRoZSBiaXRtYXAuCisgKgorICogT3RoZXJ3aXNlLCBp ZiBuZXdiYXRjaCBpc24ndCBOVUxMLCB3ZSdyZSBkb2luZyBhIG5vbi1vcmRlcmVkIGFtZ2V0YmF0 Y2gKKyAqIHNjYW46IG1hdGNoaW5nIGl0ZW1zIFRJRHMgZnJvbSBhIGxlYWYgcGFnZSBhcmUgc3Rv cmVkIGludG8gY2FsbGVyJ3MKKyAqIG5ld2JhdGNoIHRvIHJldHVybiB2aWEgZ2lzdGdldGJhdGNo LiAgSWYgd2UgZG9uJ3Qgc2F2ZSBhbnkgaXRlbXMgaW4KKyAqIG5ld2JhdGNoLCBjYWxsZXIgbmVl ZHMgdG8gZmluZCB0aGUgbmV4dCBsZWFmIHBhZ2UgdGhhdCBoYXMgbWF0Y2hlcyBhbmQgc2F2ZQor ICogaXRzIGl0ZW1zIGluIG5ld2JhdGNoIGluc3RlYWQgKGlmIHRoZXJlIGlzIG5vbmUgdGhlbiBj YWxsZXIgc2hvdWxkIHJlbGVhc2UKKyAqIG5ld2JhdGNoKS4KKyAqCisgKiBPdGhlcndpc2UgKG5l d2JhdGNoIGFuZCB0Ym0gYm90aCBOVUxMKSB3ZSdyZSBzY2FubmluZyBhIHBhZ2UgZm9yIGFuIG9y ZGVyZWQKKyAqIChuZWFyZXN0LW5laWdoYm9yKSBnaXN0Z2V0YmF0Y2ggc2NhbjogbWF0Y2hpbmcg bGVhZiBoZWFwIHR1cGxlcyBhcmUgcHVzaGVkIG9udG8KKyAqIHRoZSBzZWFyY2ggcXVldWUgYXMg R0lTVFNlYXJjaEl0ZW1zIGNhcnJ5aW5nIHRoZWlyIGRpc3RhbmNlcywgc28gdGhlIHF1ZXVlCisg KiBjYW4gbGF0ZXIgYmUgZHJhaW5lZCBpbiBkaXN0YW5jZSBvcmRlci4gIFRoZSBwYWdlJ3MgYnVm ZmVyIHBpbiBpcyBkcm9wcGVkCisgKiBiZWZvcmUgcmV0dXJuaW5nLiAgVGhpcyBjYW4gb25seSBo YXBwZW4gZHVyaW5nIGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBzY2FucywKKyAqIHdoaWNoIGlzIHdo YXQgbWFrZXMgaXQgc2FmZS4gIEdyb3VwcyBvZiBlbnF1ZXVlZCBpdGVtcyB3aWxsIGV2ZW50dWFs bHkgYmUKKyAqIHJldHVybmVkIChpbiB0aGUgZXhwZWN0ZWQgb3JkZXIpIGFzICJ2aXJ0dWFsIGJh dGNoZXMiLCBidXQgd2UgZG9uJ3QgZG8gdGhhdAorICogaGVyZS4KKyAqCisgKiBJbiBhbGwgY2Fz ZXMsIGxvd2VyIGluZGV4IHBhZ2VzIGFyZSBwdXNoZWQgb250byB0aGUgc2VhcmNoIHF1ZXVlIHRv IGJlCisgKiB2aXNpdGVkIGxhdGVyLgogICoKICAqIElmIHdlIGRldGVjdCB0aGF0IHRoZSBpbmRl eCBwYWdlIGhhcyBzcGxpdCBzaW5jZSB3ZSBzYXcgaXRzIGRvd25saW5rCiAgKiBpbiB0aGUgcGFy ZW50LCB3ZSBwdXNoIGl0cyBuZXcgcmlnaHQgc2libGluZyBvbnRvIHRoZSBxdWV1ZSBzbyB0aGUK QEAgLTMzNSwxMCArMzU0LDEwIEBAIGdpc3RpbmRleF9rZXl0ZXN0KEluZGV4U2NhbkRlc2Mgc2Nh biwKICAqLwogc3RhdGljIHZvaWQKIGdpc3RTY2FuUGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEdJ U1RTZWFyY2hJdGVtICpwYWdlSXRlbSwKLQkJCSBJbmRleE9yZGVyQnlEaXN0YW5jZSAqbXlEaXN0 YW5jZXMsIFRJREJpdG1hcCAqdGJtLCBpbnQ2NCAqbnRpZHMpCisJCQkgSW5kZXhPcmRlckJ5RGlz dGFuY2UgKm15RGlzdGFuY2VzLCBUSURCaXRtYXAgKnRibSwgaW50NjQgKm50aWRzLAorCQkJIElu ZGV4U2NhbkJhdGNoIG5ld2JhdGNoKQogewogCUdJU1RTY2FuT3BhcXVlIHNvID0gKEdJU1RTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JR0lTVFNUQVRFICAqZ2lzdHN0YXRlID0gc28tPmdpc3Rz dGF0ZTsKIAlSZWxhdGlvbglyID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlCdWZmZXIJCWJ1ZmZl cjsKIAlQYWdlCQlwYWdlOwpAQCAtMzQ3LDcgKzM2NiwxMiBAQCBnaXN0U2NhblBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBHSVNUU2VhcmNoSXRlbSAqcGFnZUl0ZW0sCiAJT2Zmc2V0TnVtYmVyIGk7 CiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAKKwkvKiBzdGF0ZSB1c2VkIHdoZW4gc2F2aW5nIG1h dGNoaW5nIGl0ZW1zIGludG8gY2FsbGVyJ3MgbmV3YmF0Y2ggKi8KKwlpbnQJCQlpdGVtSW5kZXgg PSAwOworCWludAkJCXR1cGxlT2Zmc2V0ID0gMDsKKwogCUFzc2VydCghR0lTVFNlYXJjaEl0ZW1J c0hlYXAoKnBhZ2VJdGVtKSk7CisJQXNzZXJ0KCFuZXdiYXRjaCB8fCB0Ym0gPT0gTlVMTCk7CiAK IAlidWZmZXIgPSBSZWFkQnVmZmVyKHNjYW4tPmluZGV4UmVsYXRpb24sIHBhZ2VJdGVtLT5ibGtu byk7CiAJTG9ja0J1ZmZlcihidWZmZXIsIEdJU1RfU0hBUkUpOwpAQCAtNDAzLDE4ICs0MjcsNiBA QCBnaXN0U2NhblBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBHSVNUU2VhcmNoSXRlbSAqcGFnZUl0 ZW0sCiAJCXJldHVybjsKIAl9CiAKLQlzby0+blBhZ2VEYXRhID0gc28tPmN1clBhZ2VEYXRhID0g MDsKLQlzY2FuLT54c19oaXR1cCA9IE5VTEw7CQkvKiBtaWdodCBwb2ludCBpbnRvIHBhZ2VEYXRh Q3h0ICovCi0JaWYgKHNvLT5wYWdlRGF0YUN4dCkKLQkJTWVtb3J5Q29udGV4dFJlc2V0KHNvLT5w YWdlRGF0YUN4dCk7Ci0KLQkvKgotCSAqIFdlIHNhdmUgdGhlIExTTiBvZiB0aGUgcGFnZSBhcyB3 ZSByZWFkIGl0LCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciBpdAotCSAqIGlzIHNhZmUgdG8gYXBw bHkgTFBfREVBRCBoaW50cyB0byB0aGUgcGFnZSBsYXRlci4gVGhpcyBhbGxvd3MgdXMgdG8KLQkg KiBkcm9wIHRoZSBwaW4gZm9yIE1WQ0Mgc2NhbnMsIHdoaWNoIGFsbG93cyB2YWN1dW0gdG8gYXZv aWQgYmxvY2tpbmcuCi0JICovCi0Jc28tPmN1clBhZ2VMU04gPSBCdWZmZXJHZXRMU05BdG9taWMo YnVmZmVyKTsKLQogCS8qCiAJICogY2hlY2sgYWxsIHR1cGxlcyBvbiBwYWdlCiAJICovCkBAIC00 NjQsMjQgKzQ3NiwyNCBAQCBnaXN0U2NhblBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBHSVNUU2Vh cmNoSXRlbSAqcGFnZUl0ZW0sCiAJCWVsc2UgaWYgKHNjYW4tPm51bWJlck9mT3JkZXJCeXMgPT0g MCAmJiBHaXN0UGFnZUlzTGVhZihwYWdlKSkKIAkJewogCQkJLyoKLQkJCSAqIE5vbi1vcmRlcmVk IHNjYW4sIHNvIHJlcG9ydCB0dXBsZXMgaW4gc28tPnBhZ2VEYXRhW10KKwkJCSAqIHVub3JkZXJl ZCBhbWdldGJhdGNoIHNjYW4sIHNvIGp1c3Qgc3RvcmUgYW5vdGhlciBtYXRjaGluZyBpdGVtCisJ CQkgKiBpbiBjYWxsZXIncyBiYXRjaCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IG9yZGVyaW5nCiAJ CQkgKi8KLQkJCXNvLT5wYWdlRGF0YVtzby0+blBhZ2VEYXRhXS5oZWFwUHRyID0gaXQtPnRfdGlk OwotCQkJc28tPnBhZ2VEYXRhW3NvLT5uUGFnZURhdGFdLnJlY2hlY2sgPSByZWNoZWNrOwotCQkJ c28tPnBhZ2VEYXRhW3NvLT5uUGFnZURhdGFdLm9mZm51bSA9IGk7CisJCQluZXdiYXRjaC0+aXRl bXNbaXRlbUluZGV4XS50YWJsZVRpZCA9IGl0LT50X3RpZDsKKwkJCW5ld2JhdGNoLT5pdGVtc1tp dGVtSW5kZXhdLmluZGV4T2Zmc2V0ID0gaTsKKwkJCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhd LnR1cGxlT2Zmc2V0ID0gMDsKKwkJCUdJU1RCYXRjaEdldEl0ZW0oc2NhbiwgbmV3YmF0Y2gsIGl0 ZW1JbmRleCktPnJlY2hlY2sgPSByZWNoZWNrOwogCi0JCQkvKgotCQkJICogSW4gYW4gaW5kZXgt b25seSBzY2FuLCBhbHNvIGZldGNoIHRoZSBkYXRhIGZyb20gdGhlIHR1cGxlLiAgVGhlCi0JCQkg KiByZWNvbnN0cnVjdGVkIHR1cGxlcyBhcmUgc3RvcmVkIGluIHBhZ2VEYXRhQ3h0LgotCQkJICov CiAJCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQogCQkJewotCQkJCW9sZGN4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhzby0+cGFnZURhdGFDeHQpOwotCQkJCXNvLT5wYWdlRGF0YVtzby0+blBh Z2VEYXRhXS5yZWNvbnR1cCA9Ci0JCQkJCWdpc3RGZXRjaFR1cGxlKGdpc3RzdGF0ZSwgciwgaXQp OwotCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCQkJCS8qIENvcHkgb24tZGlz ayBmb3JtYXQgaW5kZXggdHVwbGUgaW50byBjdXJyVHVwbGVzICovCisJCQkJU2l6ZQkJaXR1cHN6 ID0gSW5kZXhUdXBsZVNpemUoaXQpOworCisJCQkJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0u dHVwbGVPZmZzZXQgPSB0dXBsZU9mZnNldDsKKwkJCQltZW1jcHkobmV3YmF0Y2gtPmN1cnJUdXBs ZXMgKyB0dXBsZU9mZnNldCwgaXQsIGl0dXBzeik7CisJCQkJdHVwbGVPZmZzZXQgKz0gTUFYQUxJ R04oaXR1cHN6KTsKIAkJCX0KLQkJCXNvLT5uUGFnZURhdGErKzsKKwkJCWl0ZW1JbmRleCsrOwog CQl9CiAJCWVsc2UKIAkJewpAQCAtNTAwLDE3ICs1MTIsMTUgQEAgZ2lzdFNjYW5QYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgR0lTVFNlYXJjaEl0ZW0gKnBhZ2VJdGVtLAogCiAJCQlpZiAoR2lzdFBh Z2VJc0xlYWYocGFnZSkpCiAJCQl7Ci0JCQkJLyogQ3JlYXRpbmcgaGVhcC10dXBsZSBHSVNUU2Vh cmNoSXRlbSAqLworCQkJCS8qIENyZWF0aW5nIGhlYXAtdHVwbGUgR0lTVFNlYXJjaEl0ZW0gZm9y IG9yZGVyZWQgc2VhcmNoICovCisJCQkJQXNzZXJ0KHNjYW4tPm51bWJlck9mT3JkZXJCeXMgPiAw KTsKKwkJCQlBc3NlcnQobmV3YmF0Y2ggPT0gTlVMTCk7CisJCQkJQXNzZXJ0KHNjYW4tPmJhdGNo SW1tZWRpYXRlVW5ndWFyZCk7CisKIAkJCQlpdGVtLT5ibGtubyA9IEludmFsaWRCbG9ja051bWJl cjsKIAkJCQlpdGVtLT5kYXRhLmhlYXAuaGVhcFB0ciA9IGl0LT50X3RpZDsKIAkJCQlpdGVtLT5k YXRhLmhlYXAucmVjaGVjayA9IHJlY2hlY2s7CiAJCQkJaXRlbS0+ZGF0YS5oZWFwLnJlY2hlY2tE aXN0YW5jZXMgPSByZWNoZWNrX2Rpc3RhbmNlczsKLQotCQkJCS8qCi0JCQkJICogSW4gYW4gaW5k ZXgtb25seSBzY2FuLCBhbHNvIGZldGNoIHRoZSBkYXRhIGZyb20gdGhlIHR1cGxlLgotCQkJCSAq LwotCQkJCWlmIChzY2FuLT54c193YW50X2l0dXApCi0JCQkJCWl0ZW0tPmRhdGEuaGVhcC5yZWNv bnR1cCA9IGdpc3RGZXRjaFR1cGxlKGdpc3RzdGF0ZSwgciwgaXQpOwogCQkJfQogCQkJZWxzZQog CQkJewpAQCAtNTM1LDYgKzU0NSwzMSBAQCBnaXN0U2NhblBhZ2UoSW5kZXhTY2FuRGVzYyBzY2Fu LCBHSVNUU2VhcmNoSXRlbSAqcGFnZUl0ZW0sCiAJCX0KIAl9CiAKKwlpZiAobmV3YmF0Y2gpCisJ eworCQkvKiBGaW5hbGl6ZSByZXN1bHQgYmF0Y2ggZHVyaW5nIGEgbm9uLW9yZGVyZWQgYW1nZXRi YXRjaCBzY2FuICovCisJCUFzc2VydChzY2FuLT5udW1iZXJPZk9yZGVyQnlzID09IDAgJiYgdGJt ID09IE5VTEwpOworCisJCW5ld2JhdGNoLT5kaXIgPSBGb3J3YXJkU2NhbkRpcmVjdGlvbjsKKwkJ bmV3YmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IGl0ZW1JbmRl eCAtIDE7CisKKwkJaWYgKGl0ZW1JbmRleCA+IDApCisJCXsKKwkJCUdJU1RCYXRjaERhdGEgKmdu ZXdiYXRjaDsKKworCQkJQXNzZXJ0KEdpc3RQYWdlSXNMZWFmKHBhZ2UpKTsKKworCQkJZ25ld2Jh dGNoID0gR0lTVEJhdGNoR2V0RGF0YShzY2FuLCBuZXdiYXRjaCk7CisJCQlnbmV3YmF0Y2gtPmJ1 ZiA9IGJ1ZmZlcjsKKwkJCWduZXdiYXRjaC0+Ymxrbm8gPSBCdWZmZXJHZXRCbG9ja051bWJlcihi dWZmZXIpOworCisJCQlpbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoKHNjYW4sIG5ld2JhdGNoLCBi dWZmZXIpOworCQkJcmV0dXJuOworCQl9CisJCS8qIGVsc2UgY2FsbGVyIG5lZWRzIHRvIGZpbmQg YW5vdGhlciBwYWdlIHRvIGZpbGwgbmV3YmF0Y2ggKi8KKwl9CisKIAlVbmxvY2tSZWxlYXNlQnVm ZmVyKGJ1ZmZlcik7CiB9CiAKQEAgLTU2MywyMiArNTk4LDI5IEBAIGdldE5leHRHSVNUU2VhcmNo SXRlbShHSVNUU2Nhbk9wYXF1ZSBzbykKIH0KIAogLyoKLSAqIEZldGNoIG5leHQgaGVhcCB0dXBs ZSBpbiBhbiBvcmRlcmVkIHNlYXJjaAorICogZ2lzdGdldGJhdGNoX29yZGVyZWQoKSAtLSBkcmFp biB0aGUgcXVldWUgaW50byBjYWxsZXIncyBuZXdiYXRjaCBpbgorICogZGlzdGFuY2Ugb3JkZXIK KyAqCisgKiBIZWxwZXIgZm9yIGdpc3RnZXRiYXRjaCdzIG9yZGVyZWQgKG5lYXJlc3QtbmVpZ2hi b3IpIHBhdGguICBUaGUgcGFpcmluZy1oZWFwCisgKiBxdWV1ZSAoc28tPnF1ZXVlKSBob2xkcyBi b3RoIHVudmlzaXRlZCBpbmRleCBwYWdlcyBhbmQgbWF0Y2hpbmcgbGVhZiBoZWFwCisgKiB0dXBs ZXMsIG9yZGVyZWQgYnkgKGxvd2VyLWJvdW5kKSBkaXN0YW5jZS4gIFdlIHBvcCBpdGVtcyBpbiB0 aGF0IG9yZGVyLAorICogZGlzcGF0Y2hpbmcgb24gdGhlIGl0ZW0gdHlwZS4gIEEgcG9wcGVkIGhl YXAgdHVwbGUgaXMgYXBwZW5kZWQgdG8gdGhlCisgKiBiYXRjaC4gIFdlIHN0b3Agb25jZSB0aGUg YmF0Y2ggaXMgZnVsbCAobWF4aXRlbXNiYXRjaCBpdGVtcykgb3IgdGhlIHF1ZXVlCisgKiBpcyBl eGhhdXN0ZWQsIGxlYXZpbmcgYW55IHJlbWFpbmluZyBpdGVtcyBxdWV1ZWQgZm9yIHRoZSBuZXh0 IGNhbGwuCisgKgorICogQmVjYXVzZSB0aGUgcXVldWUgaXMgZHJhaW5lZCBpbiBub25kZWNyZWFz aW5nIGRpc3RhbmNlIG9yZGVyIGFjcm9zcyB0aGUgd2hvbGUKKyAqIHNjYW4gKGEgZG93bmxpbmsn cyBkaXN0YW5jZSBpcyBhIGxvd2VyIGJvdW5kIG9uIGl0cyBzdWJ0cmVlLCBzbyBpdGVtcyBwdXNo ZWQKKyAqIHdoaWxlIHNjYW5uaW5nIGEgcGFnZSBuZXZlciBzb3J0IGFoZWFkIG9mIGl0ZW1zIGFs cmVhZHkgcG9wcGVkKSwgdGhlCisgKiBiYXRjaGVzIHdlIGVtaXQgYXJlIGdsb2JhbGx5IGRpc3Rh bmNlLW9yZGVyZWQuCiAgKi8KLXN0YXRpYyBib29sCi1nZXROZXh0TmVhcmVzdChJbmRleFNjYW5E ZXNjIHNjYW4pCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKK2dpc3RnZXRiYXRjaF9vcmRlcmVkKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gpCiB7CiAJR0lTVFNjYW5P cGFxdWUgc28gPSAoR0lTVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29sCQlyZXMgPSBm YWxzZTsKKwlHSVNUQmF0Y2hEYXRhICpnbmV3YmF0Y2g7CisJaW50CQkJbml0ZW1zID0gMDsKIAot CWlmIChzY2FuLT54c19oaXR1cCkKLQl7Ci0JCS8qIGZyZWUgcHJldmlvdXNseSByZXR1cm5lZCB0 dXBsZSAqLwotCQlwZnJlZShzY2FuLT54c19oaXR1cCk7Ci0JCXNjYW4tPnhzX2hpdHVwID0gTlVM TDsKLQl9Ci0KLQlkbworCWZvciAoOzspCiAJewogCQlHSVNUU2VhcmNoSXRlbSAqaXRlbSA9IGdl dE5leHRHSVNUU2VhcmNoSXRlbShzbyk7CiAKQEAgLTU4OCwxNjIgKzYzMCwyMzMgQEAgZ2V0TmV4 dE5lYXJlc3QoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQlpZiAoR0lTVFNlYXJjaEl0ZW1Jc0hlYXAo Kml0ZW0pKQogCQl7CiAJCQkvKiBmb3VuZCBhIGhlYXAgaXRlbSBhdCBjdXJyZW50bHkgbWluaW1h bCBkaXN0YW5jZSAqLwotCQkJc2Nhbi0+eHNfaGVhcHRpZCA9IGl0ZW0tPmRhdGEuaGVhcC5oZWFw UHRyOwotCQkJc2Nhbi0+eHNfcmVjaGVjayA9IGl0ZW0tPmRhdGEuaGVhcC5yZWNoZWNrOworCQkJ R0lTVEJhdGNoSXRlbSAqYml0ZW0gPSBHSVNUQmF0Y2hHZXRJdGVtKHNjYW4sIG5ld2JhdGNoLCBu aXRlbXMpOwogCi0JCQlpbmRleF9zdG9yZV9mbG9hdDhfb3JkZXJieV9kaXN0YW5jZXMoc2Nhbiwg c28tPm9yZGVyQnlUeXBlcywKLQkJCQkJCQkJCQkJCSBpdGVtLT5kaXN0YW5jZXMsCi0JCQkJCQkJ CQkJCQkgaXRlbS0+ZGF0YS5oZWFwLnJlY2hlY2tEaXN0YW5jZXMpOworCQkJbmV3YmF0Y2gtPml0 ZW1zW25pdGVtc10udGFibGVUaWQgPSBpdGVtLT5kYXRhLmhlYXAuaGVhcFB0cjsKKwkJCW5ld2Jh dGNoLT5pdGVtc1tuaXRlbXNdLmluZGV4T2Zmc2V0ID0gLTE7CS8qIG1lYW5pbmdsZXNzIGhlcmUg Ki8KKwkJCW5ld2JhdGNoLT5pdGVtc1tuaXRlbXNdLnR1cGxlT2Zmc2V0ID0gMDsKIAotCQkJLyog aW4gYW4gaW5kZXgtb25seSBzY2FuLCBhbHNvIHJldHVybiB0aGUgcmVjb25zdHJ1Y3RlZCB0dXBs ZS4gKi8KLQkJCWlmIChzY2FuLT54c193YW50X2l0dXApCi0JCQkJc2Nhbi0+eHNfaGl0dXAgPSBp dGVtLT5kYXRhLmhlYXAucmVjb250dXA7Ci0JCQlyZXMgPSB0cnVlOworCQkJYml0ZW0tPnJlY2hl Y2sgPSBpdGVtLT5kYXRhLmhlYXAucmVjaGVjazsKKwkJCWJpdGVtLT5yZWNoZWNrRGlzdGFuY2Vz ID0gaXRlbS0+ZGF0YS5oZWFwLnJlY2hlY2tEaXN0YW5jZXM7CisJCQltZW1jcHkoYml0ZW0tPmRp c3RhbmNlcywgaXRlbS0+ZGlzdGFuY2VzLAorCQkJCSAgIHNpemVvZihpdGVtLT5kaXN0YW5jZXNb MF0pICogc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyk7CisKKwkJCW5pdGVtcysrOworCQkJcGZyZWUo aXRlbSk7CisKKwkJCWlmIChuaXRlbXMgPT0gc2Nhbi0+bWF4aXRlbXNiYXRjaCkKKwkJCQlicmVh azsJCQkvKiBiYXRjaCBmdWxsOyByZW1haW5pbmcgaXRlbXMgc3RheSBxdWV1ZWQgKi8KIAkJfQog CQllbHNlCiAJCXsKIAkJCS8qIHZpc2l0IGFuIGluZGV4IHBhZ2UsIGV4dHJhY3QgaXRzIGl0ZW1z IGludG8gcXVldWUgKi8KIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJCWdpc3RTY2Fu UGFnZShzY2FuLCBpdGVtLCBpdGVtLT5kaXN0YW5jZXMsIE5VTEwsIE5VTEwpOworCQkJZ2lzdFNj YW5QYWdlKHNjYW4sIGl0ZW0sIGl0ZW0tPmRpc3RhbmNlcywgTlVMTCwgTlVMTCwgTlVMTCk7CisJ CQlwZnJlZShpdGVtKTsKIAkJfQorCX0KIAotCQlwZnJlZShpdGVtKTsKLQl9IHdoaWxlICghcmVz KTsKKwlpZiAobml0ZW1zID09IDApCisJeworCQkvKiBObyBtYXRjaGluZyBpdGVtcyByZW1haW46 IHRoZSBzY2FuIGlzIGV4aGF1c3RlZCAqLworCQlpbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRjaChz Y2FuLCBuZXdiYXRjaCk7CisJCXJldHVybiBOVUxMOworCX0KIAotCXJldHVybiByZXM7CisJLyoK KwkgKiBBbiBvcmRlcmVkIGJhdGNoIGlzICJ2aXJ0dWFsIjogaXRzIGl0ZW1zIGNvbWUgZnJvbSBt YW55IGxlYWYgcGFnZXMsCisJICogd2hvc2UgcGlucyBnaXN0U2NhblBhZ2UgYWxyZWFkeSBkcm9w cGVkLCBzbyBpdCBob2xkcyBubyBUSUQgcmVjeWNsaW5nCisJICogaW50ZXJsb2NrLiAgSXQgaGFz IG5vIHNpbmdsZSBvcmlnaW5hdGluZyBwYWdlLCBhbmQgd2UgZG9uJ3QgdHJhY2sgdGhvc2UKKwkg KiBpbmRleCBwYWdlcyBpbiBhbnkgY2FzZSAoZ2lzdGtpbGxpdGVtc2JhdGNoIHdpbGwganVzdCBz a2lwIGl0KS4KKwkgKi8KKwlBc3NlcnQoIW5ld2JhdGNoLT5pc0d1YXJkZWQpOworCisJbmV3YmF0 Y2gtPmRpciA9IEZvcndhcmRTY2FuRGlyZWN0aW9uOworCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSAw OworCW5ld2JhdGNoLT5sYXN0SXRlbSA9IG5pdGVtcyAtIDE7CisKKwlnbmV3YmF0Y2ggPSBHSVNU QmF0Y2hHZXREYXRhKHNjYW4sIG5ld2JhdGNoKTsKKwlnbmV3YmF0Y2gtPmJ1ZiA9IEludmFsaWRC dWZmZXI7CisJZ25ld2JhdGNoLT5ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKKworCXJldHVy biBuZXdiYXRjaDsKIH0KIAogLyoKLSAqIGdpc3RnZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0 dXBsZSBpbiB0aGUgc2NhbgorICogZ2lzdGdldGJhdGNoKCkgLS0gR2V0IHRoZSBmaXJzdCBvciBu ZXh0IGJhdGNoIG9mIGl0ZW1zIGluIGEgc2NhbgogICovCi1ib29sCi1naXN0Z2V0dHVwbGUoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitnaXN0 Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBT Y2FuRGlyZWN0aW9uIGRpcikKIHsKIAlHSVNUU2Nhbk9wYXF1ZSBzbyA9IChHSVNUU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOworCWJvb2wJCWZpcnN0Q2FsbCA9IChwcmlvcmJhdGNoID09IE5VTEwp OworCUluZGV4U2NhbkJhdGNoIG5ld2JhdGNoOworCUdJU1RTZWFyY2hJdGVtIGZha2VJdGVtOwog CiAJaWYgKGRpciAhPSBGb3J3YXJkU2NhbkRpcmVjdGlvbikKIAkJZWxvZyhFUlJPUiwgIkdpU1Qg b25seSBzdXBwb3J0cyBmb3J3YXJkIHNjYW4gZGlyZWN0aW9uIik7CiAKIAlpZiAoIXNvLT5xdWFs X29rKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCi0JaWYgKHNvLT5maXJzdENh bGwpCisJLyogQWxsb2NhdGUgYSBiYXRjaCB0byBwYXNzIHRvIGdpc3RTY2FuUGFnZSBvciBnaXN0 Z2V0YmF0Y2hfb3JkZXJlZCAqLworCW5ld2JhdGNoID0gaW5kZXhhbV91dGlsX2FsbG9jX2JhdGNo KHNjYW4pOworCisJaWYgKGZpcnN0Q2FsbCkKIAl7Ci0JCS8qIEJlZ2luIHRoZSBzY2FuIGJ5IHBy b2Nlc3NpbmcgdGhlIHJvb3QgcGFnZSAqLwotCQlHSVNUU2VhcmNoSXRlbSBmYWtlSXRlbTsKLQor CQkvKiBCZWdpbiB0aGUgc2NhbiBieSBwcmVwYXJpbmcgdG8gcHJvY2VzcyB0aGUgcm9vdCBwYWdl ICovCiAJCXBnc3RhdF9jb3VudF9pbmRleF9zY2FuKHNjYW4tPmluZGV4UmVsYXRpb24pOwogCQlp ZiAoc2Nhbi0+aW5zdHJ1bWVudCkKIAkJCXNjYW4tPmluc3RydW1lbnQtPm5zZWFyY2hlcysrOwog Ci0JCXNvLT5maXJzdENhbGwgPSBmYWxzZTsKLQkJc28tPmN1clBhZ2VEYXRhID0gc28tPm5QYWdl RGF0YSA9IDA7Ci0JCXNjYW4tPnhzX2hpdHVwID0gTlVMTDsKLQkJaWYgKHNvLT5wYWdlRGF0YUN4 dCkKLQkJCU1lbW9yeUNvbnRleHRSZXNldChzby0+cGFnZURhdGFDeHQpOworCQlBc3NlcnQoc2Nh bi0+eHNfaGl0dXAgPT0gTlVMTCk7CiAKKwkJLyogZ2lzdFNjYW5QYWdlIHJvb3QgcGFnZSBjYWxs IHNldHVwICovCiAJCWZha2VJdGVtLmJsa25vID0gR0lTVF9ST09UX0JMS05POwogCQltZW1zZXQo JmZha2VJdGVtLmRhdGEucGFyZW50bHNuLCAwLCBzaXplb2YoR2lzdE5TTikpOwotCQlnaXN0U2Nh blBhZ2Uoc2NhbiwgJmZha2VJdGVtLCBOVUxMLCBOVUxMLCBOVUxMKTsKIAl9CiAKKwkvKgorCSAq IE9yZGVyZWQgKG5lYXJlc3QtbmVpZ2hib3IpIHNjYW4sIHdoaWNoIHJldHVybnMgInZpcnR1YWwi IGJhdGNoZXMKKwkgKi8KIAlpZiAoc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyA+IDApCiAJewotCQkv KiBNdXN0IGZldGNoIHR1cGxlcyBpbiBzdHJpY3QgZGlzdGFuY2Ugb3JkZXIgKi8KLQkJcmV0dXJu IGdldE5leHROZWFyZXN0KHNjYW4pOwotCX0KLQllbHNlCi0JewotCQkvKiBGZXRjaCB0dXBsZXMg aW5kZXgtcGFnZS1hdC1hLXRpbWUgKi8KLQkJZm9yICg7OykKKwkJaWYgKGZpcnN0Q2FsbCkKIAkJ ewotCQkJaWYgKHNvLT5jdXJQYWdlRGF0YSA8IHNvLT5uUGFnZURhdGEpCi0JCQl7Ci0JCQkJaWYg KHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgJiYgc28tPmN1clBhZ2VEYXRhID4gMCkKLQkJCQl7Ci0K LQkJCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCQl7Ci0JCQkJCQlNZW1vcnlD b250ZXh0IG9sZEN4dCA9Ci0JCQkJCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKHNvLT5naXN0c3Rh dGUtPnNjYW5DeHQpOwotCi0JCQkJCQlzby0+a2lsbGVkSXRlbXMgPQotCQkJCQkJCShPZmZzZXRO dW1iZXIgKikgcGFsbG9jKE1heEluZGV4VHVwbGVzUGVyUGFnZQotCQkJCQkJCQkJCQkJCSogc2l6 ZW9mKE9mZnNldE51bWJlcikpOwotCi0JCQkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ3h0 KTsKLQkJCQkJfQotCQkJCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heEluZGV4VHVwbGVzUGVyUGFn ZSkKLQkJCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0KLQkJCQkJCQlzby0+ cGFnZURhdGFbc28tPmN1clBhZ2VEYXRhIC0gMV0ub2ZmbnVtOwotCQkJCX0KLQkJCQkvKiBjb250 aW51aW5nIHRvIHJldHVybiB0dXBsZXMgZnJvbSBhIGxlYWYgcGFnZSAqLwotCQkJCXNjYW4tPnhz X2hlYXB0aWQgPSBzby0+cGFnZURhdGFbc28tPmN1clBhZ2VEYXRhXS5oZWFwUHRyOwotCQkJCXNj YW4tPnhzX3JlY2hlY2sgPSBzby0+cGFnZURhdGFbc28tPmN1clBhZ2VEYXRhXS5yZWNoZWNrOwot Ci0JCQkJLyogaW4gYW4gaW5kZXgtb25seSBzY2FuLCBhbHNvIHJldHVybiB0aGUgcmVjb25zdHJ1 Y3RlZCB0dXBsZSAqLwotCQkJCWlmIChzY2FuLT54c193YW50X2l0dXApCi0JCQkJCXNjYW4tPnhz X2hpdHVwID0gc28tPnBhZ2VEYXRhW3NvLT5jdXJQYWdlRGF0YV0ucmVjb250dXA7Ci0KLQkJCQlz by0+Y3VyUGFnZURhdGErKzsKLQotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCi0JCQkvKgotCQkJ ICogQ2hlY2sgdGhlIGxhc3QgcmV0dXJuZWQgdHVwbGUgYW5kIGFkZCBpdCB0byBraWxsZWRJdGVt cyBpZgotCQkJICogbmVjZXNzYXJ5Ci0JCQkgKi8KLQkJCWlmIChzY2FuLT5raWxsX3ByaW9yX3R1 cGxlCi0JCQkJJiYgc28tPmN1clBhZ2VEYXRhID4gMAotCQkJCSYmIHNvLT5jdXJQYWdlRGF0YSA9 PSBzby0+blBhZ2VEYXRhKQotCQkJewotCi0JCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxM KQotCQkJCXsKLQkJCQkJTWVtb3J5Q29udGV4dCBvbGRDeHQgPQotCQkJCQkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKHNvLT5naXN0c3RhdGUtPnNjYW5DeHQpOwotCi0JCQkJCXNvLT5raWxsZWRJdGVt cyA9Ci0JCQkJCQkoT2Zmc2V0TnVtYmVyICopIHBhbGxvYyhNYXhJbmRleFR1cGxlc1BlclBhZ2UK LQkJCQkJCQkJCQkJCSogc2l6ZW9mKE9mZnNldE51bWJlcikpOwotCi0JCQkJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRDeHQpOwotCQkJCX0KLQkJCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heElu ZGV4VHVwbGVzUGVyUGFnZSkKLQkJCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10g PQotCQkJCQkJc28tPnBhZ2VEYXRhW3NvLT5jdXJQYWdlRGF0YSAtIDFdLm9mZm51bTsKLQkJCX0K LQkJCS8qIGZpbmQgYW5kIHByb2Nlc3MgdGhlIG5leHQgaW5kZXggcGFnZSAqLwotCQkJZG8KLQkJ CXsKLQkJCQlHSVNUU2VhcmNoSXRlbSAqaXRlbTsKLQotCQkJCWlmICgoc28tPmN1ckJsa25vICE9 IEludmFsaWRCbG9ja051bWJlcikgJiYgKHNvLT5udW1LaWxsZWQgPiAwKSkKLQkJCQkJZ2lzdGtp bGxpdGVtcyhzY2FuKTsKLQotCQkJCWl0ZW0gPSBnZXROZXh0R0lTVFNlYXJjaEl0ZW0oc28pOwot Ci0JCQkJaWYgKCFpdGVtKQotCQkJCQlyZXR1cm4gZmFsc2U7Ci0KLQkJCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOwotCi0JCQkJLyogc2F2ZSBjdXJyZW50IGl0ZW0gQmxvY2tOdW1iZXIgZm9yIG5l eHQgZ2lzdGtpbGxpdGVtcygpIGNhbGwgKi8KLQkJCQlzby0+Y3VyQmxrbm8gPSBpdGVtLT5ibGtu bzsKLQotCQkJCS8qCi0JCQkJICogV2hpbGUgc2Nhbm5pbmcgYSBsZWFmIHBhZ2UsIEl0ZW1Qb2lu dGVycyBvZiBtYXRjaGluZyBoZWFwCi0JCQkJICogdHVwbGVzIGFyZSBzdG9yZWQgaW4gc28tPnBh Z2VEYXRhLiAgSWYgdGhlcmUgYXJlIGFueSBvbgotCQkJCSAqIHRoaXMgcGFnZSwgd2UgZmFsbCBv dXQgb2YgdGhlIGlubmVyICJkbyIgYW5kIGxvb3AgYXJvdW5kIHRvCi0JCQkJICogcmV0dXJuIHRo ZW0uCi0JCQkJICovCi0JCQkJZ2lzdFNjYW5QYWdlKHNjYW4sIGl0ZW0sIGl0ZW0tPmRpc3RhbmNl cywgTlVMTCwgTlVMTCk7Ci0KLQkJCQlwZnJlZShpdGVtKTsKLQkJCX0gd2hpbGUgKHNvLT5uUGFn ZURhdGEgPT0gMCk7CisJCQkvKiBBY3R1YWxseSBwcm9jZXNzIHRoZSByb290IHBhZ2UgKi8KKwkJ CWdpc3RTY2FuUGFnZShzY2FuLCAmZmFrZUl0ZW0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwog CQl9CisKKwkJLyogZWxzZSBzYXZlIG1hdGNoZXMgYmVsb3cgdGhlIHJvb3QgaW50byBuZXdiYXRj aCAqLworCQlyZXR1cm4gZ2lzdGdldGJhdGNoX29yZGVyZWQoc2NhbiwgbmV3YmF0Y2gpOworCX0K KworCS8qCisJICogTm9uLW9yZGVyZWQgc2Nhbiwgd2hpY2ggcmV0dXJucyBndWFyZGFibGUgYmF0 Y2hlcyBpbiB0aGUgb3JkZXIgdGhhdCB0aGUKKwkgKiBzY2FuIHZpc2l0cyB0aGVpciBsZWFmIHBh Z2VzIGluCisJICovCisJaWYgKGZpcnN0Q2FsbCkKKwl7CisJCS8qIEFjdHVhbGx5IHByb2Nlc3Mg dGhlIHJvb3QgcGFnZSAqLworCQlnaXN0U2NhblBhZ2Uoc2NhbiwgJmZha2VJdGVtLCBOVUxMLCBO VUxMLCBOVUxMLCBuZXdiYXRjaCk7CisJCWlmIChuZXdiYXRjaC0+Zmlyc3RJdGVtIDw9IG5ld2Jh dGNoLT5sYXN0SXRlbSkKKwkJCXJldHVybiBuZXdiYXRjaDsKKwl9CisJLyogZWxzZSBzYXZlIG1h dGNoZXMgYmVsb3cgdGhlIHJvb3QgaW50byBuZXdiYXRjaCAqLworCisJZm9yICg7OykKKwl7CisJ CUdJU1RTZWFyY2hJdGVtICppdGVtID0gZ2V0TmV4dEdJU1RTZWFyY2hJdGVtKHNvKTsKKworCQlp ZiAoaXRlbSA9PSBOVUxMKQorCQl7CisJCQkvKiBObyBtb3JlIGluZGV4IHBhZ2VzIHRvIHNjYW47 IHRoZSBzY2FuIGlzIGV4aGF1c3RlZCAqLworCQkJaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2go c2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOworCisJCS8qIFNjYW4gdGhpcyBxdWV1ZWQgaW5kZXggcGFnZTsgbWF0Y2hpbmcg bGVhZiBpdGVtcyBnbyBpbnRvIHRoZSBiYXRjaCAqLworCQlnaXN0U2NhblBhZ2Uoc2NhbiwgaXRl bSwgaXRlbS0+ZGlzdGFuY2VzLCBOVUxMLCBOVUxMLCBuZXdiYXRjaCk7CisJCXBmcmVlKGl0ZW0p OworCisJCS8qIElmIHRoaXMgbGVhZiBwYWdlIHByb2R1Y2VkIG1hdGNoaW5nIGl0ZW1zLCByZXR1 cm4gdGhlIGJhdGNoICovCisJCWlmIChuZXdiYXRjaC0+Zmlyc3RJdGVtIDw9IG5ld2JhdGNoLT5s YXN0SXRlbSkKKwkJCXJldHVybiBuZXdiYXRjaDsKKwl9CisKKwlwZ191bnJlYWNoYWJsZSgpOwor CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBnaXN0dW5ndWFyZGJhdGNoKCkgLS0gRHJvcCBh IGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKGJ1ZmZlciBwaW4pCisgKgorICogQ2Fs bGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0J3Mgc2FmZSB0byBkcm9wIHRoZSBidWZmZXIgcGlu IGhlbGQgdG8KKyAqIHByZXZlbnQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTS4K KyAqLwordm9pZAorZ2lzdHVuZ3VhcmRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2Nh bkJhdGNoIGJhdGNoKQoreworCUdJU1RCYXRjaERhdGEgKmdiYXRjaCA9IEdJU1RCYXRjaEdldERh dGEoc2NhbiwgYmF0Y2gpOworCisJLyogU2hvdWxkIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgaWZm ICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgKi8KKwlBc3NlcnQoIXNjYW4tPmJhdGNoSW1tZWRpYXRl VW5ndWFyZCk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1YXJkZWQpOworCisJUmVsZWFzZUJ1ZmZlcihn YmF0Y2gtPmJ1Zik7Cit9CisKKy8qCisgKiBnaXN0Z2V0dHJhbnNmb3JtKCkgLS0gU2V0IHVwIHRo ZSBzY2FuJ3MgcGVyLXR1cGxlIG91dHB1dCBmb3Igb25lIGJhdGNoIGl0ZW0KKyAqCisgKiBJbXBs ZW1lbnRzIHRoZSBhbWdldHRyYW5zZm9ybSBpbnRlcmZhY2UuICBUaGUgdGFibGUgQU0gY2FsbHMg dGhpcyBhcyBpdAorICogcmV0dXJucyBlYWNoIGl0ZW0gb2YgYSBHaVNUIHNjYW4sIHRvIHNldCB0 aGUgc2NhbiBkZXNjcmlwdG9yJ3MgcGVyLXR1cGxlCisgKiBvdXRwdXQgZnJvbSB0aGUgaXRlbSdz IHBlci1pdGVtIGRhdGEuCisgKgorICogICAtIFdlIGFsd2F5cyBhcHBseSB0aGUgaXRlbSdzIHF1 YWwgcmVjaGVjayBmbGFnIHRvIHNjYW4tPnhzX3JlY2hlY2suCisgKiAgIC0gRm9yIG9yZGVyZWQg c2NhbnMsIHdlIHJlcG9ydCB0aGUgaXRlbSdzIG93biBPUkRFUiBCWSBkaXN0YW5jZXMgKHN0b3Jl ZCBpbgorICogICAgIHRoZSBwZXItaXRlbSBpbmRleCBBTSBhcmVhIGJ5IGdpc3RnZXRiYXRjaF9v cmRlcmVkKSBhcyB4c19vcmRlcmJ5dmFscy4KKyAqICAgICBUaGV5IGFyZSBmbGFnZ2VkIGZvciBy ZWNoZWNrIG9ubHkgd2hlbiB0aGUgZGlzdGFuY2UgZnVuY3Rpb24gd2FzIGxvc3N5IGZvcgorICog ICAgIHRoYXQgaXRlbTsgYW4gZXhhY3QgZGlzdGFuY2UgaXMgcmVwb3J0ZWQgYXMgZmluYWwsIHdo aWxlIGEgbG9zc3kgbG93ZXIKKyAqICAgICBib3VuZCBpcyByZWNoZWNrZWQgYnkgdGhlIGV4ZWN1 dG9yJ3MgcmVvcmRlciBxdWV1ZSB0byByZWNvbXB1dGUgdGhlIHRydWUKKyAqICAgICBvcmRlci4K KyAqICAgLSBGb3IgaW5kZXgtb25seSBzY2Fucywgd2UgcmVjb25zdHJ1Y3QgdGhlIG9yaWdpbmFs bHkgaW5kZXhlZCB2YWx1ZXMgZnJvbQorICogICAgIHRoZSBzdG9yZWQgb24tZGlzayBpbmRleCB0 dXBsZSBpbnRvIGEgaGVhcCB0dXBsZSwgZXhwb3NlZCBhcyB4c19oaXR1cC4KKyAqCisgKiBUaGUg cmVjb25zdHJ1Y3RlZCB0dXBsZSBsaXZlcyBpbiB0aGUgc2NhbidzIG1lbW9yeSBjb250ZXh0IGFu ZCBvbmx5IG5lZWRzIHRvCisgKiBvdXRsaXZlIGEgc2luZ2xlIHRhYmxlX2luZGV4X2dldG5leHRf c2xvdCBjYWxsICh0aGUgZXhlY3V0b3IgY29waWVzIGl0IGludG8KKyAqIHRoZSBzY2FuIHNsb3Qp LiAgV2UgZnJlZSB0aGUgcHJldmlvdXNseSByZXR1cm5lZCB0dXBsZSBiZWZvcmUgYnVpbGRpbmcg dGhlCisgKiBuZXh0IG9uZS4KKyAqLwordm9pZAorZ2lzdGdldHRyYW5zZm9ybShJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLCBpbnQgaXRlbSkKK3sKKwlHSVNUU2Nhbk9w YXF1ZSBzbyA9IChHSVNUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUdJU1RCYXRjaEl0ZW0g KmJpdGVtID0gR0lTVEJhdGNoR2V0SXRlbShzY2FuLCBiYXRjaCwgaXRlbSk7CisKKwlBc3NlcnQo aXRlbSA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmIGl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKwor CS8qIEFwcGx5IHRoaXMgaXRlbSdzIHF1YWwgcmVjaGVjayBmbGFnICovCisJc2Nhbi0+eHNfcmVj aGVjayA9IGJpdGVtLT5yZWNoZWNrOworCisJLyogSW5kZXgtb25seSBzY2FuIChjYW4ndCBiZSBv cmRlcmVkKSAqLworCWlmIChzY2FuLT54c193YW50X2l0dXApCisJeworCQkvKiBSZWNvbnN0cnVj dCBhIHJldHVybmFibGUgaGVhcCB0dXBsZSBmcm9tIHN0YXNoZWQgaW5kZXggdHVwbGUgKi8KKwkJ SW5kZXhUdXBsZQlpdHVwID0gKEluZGV4VHVwbGUpIChiYXRjaC0+Y3VyclR1cGxlcyArCisJCQkJ CQkJCQkJIGJhdGNoLT5pdGVtc1tpdGVtXS50dXBsZU9mZnNldCk7CisJCU1lbW9yeUNvbnRleHQg b2xkY3h0OworCisJCUFzc2VydChzY2FuLT5udW1iZXJPZk9yZGVyQnlzID09IDApOworCisJCWlm IChzY2FuLT54c19oaXR1cCkKKwkJeworCQkJcGZyZWUoc2Nhbi0+eHNfaGl0dXApOworCQkJc2Nh bi0+eHNfaGl0dXAgPSBOVUxMOworCQl9CisKKwkJLyogcmVjb25zdHJ1Y3QgdGhlIG9yaWdpbmFs bHkgaW5kZXhlZCB2YWx1ZXMgYXMgYSBoZWFwIHR1cGxlICovCisJCW9sZGN4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhzby0+Z2lzdHN0YXRlLT5zY2FuQ3h0KTsKKwkJc2Nhbi0+eHNfaGl0dXAg PSBnaXN0RmV0Y2hUdXBsZShzby0+Z2lzdHN0YXRlLCBzY2FuLT5pbmRleFJlbGF0aW9uLCBpdHVw KTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJfQorCisJLyogT3JkZXJlZCBz Y2FuIChtdXN0IGJlIGEgcGxhaW4gaW5kZXggc2NhbikgKi8KKwllbHNlIGlmIChzY2FuLT5udW1i ZXJPZk9yZGVyQnlzID4gMCkKKwl7CisJCS8qCisJCSAqIE5vdGU6IFRoaXMgaXMgYSAidmlydHVh bCIgYmF0Y2guICBUaGUgaXRlbXMgZnJvbSBjYWxsZXIncyBiYXRjaAorCQkgKiB3ZXJlIHN0b3Jl ZCBpbiB0aGUgYmF0Y2ggaW4gZGlzdGFuY2Ugb3JkZXIgYnkgZ2lzdGdldGJhdGNoX29yZGVyZWQs CisJCSAqIHJpZ2h0IGJlZm9yZSBnaXN0Z2V0YmF0Y2ggcmV0dXJuZWQgaXQuCisJCSAqLworCQlB c3NlcnQoR0lTVEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCktPmJsa25vID09IEludmFsaWRCbG9j a051bWJlcik7CisJCWluZGV4X3N0b3JlX2Zsb2F0OF9vcmRlcmJ5X2Rpc3RhbmNlcyhzY2FuLCBz by0+b3JkZXJCeVR5cGVzLAorCQkJCQkJCQkJCQkgYml0ZW0tPmRpc3RhbmNlcywKKwkJCQkJCQkJ CQkJIGJpdGVtLT5yZWNoZWNrRGlzdGFuY2VzKTsKIAl9CiB9CiAKQEAgLTc2NSwxOSArODc4LDEw IEBAIGdpc3RnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIAkJ c2Nhbi0+aW5zdHJ1bWVudC0+bnNlYXJjaGVzKys7CiAKIAkvKiBCZWdpbiB0aGUgc2NhbiBieSBw cm9jZXNzaW5nIHRoZSByb290IHBhZ2UgKi8KLQlzby0+Y3VyUGFnZURhdGEgPSBzby0+blBhZ2VE YXRhID0gMDsKLQlzY2FuLT54c19oaXR1cCA9IE5VTEw7Ci0JaWYgKHNvLT5wYWdlRGF0YUN4dCkK LQkJTWVtb3J5Q29udGV4dFJlc2V0KHNvLT5wYWdlRGF0YUN4dCk7Ci0KIAlmYWtlSXRlbS5ibGtu byA9IEdJU1RfUk9PVF9CTEtOTzsKIAltZW1zZXQoJmZha2VJdGVtLmRhdGEucGFyZW50bHNuLCAw LCBzaXplb2YoR2lzdE5TTikpOwotCWdpc3RTY2FuUGFnZShzY2FuLCAmZmFrZUl0ZW0sIE5VTEws IHRibSwgJm50aWRzKTsKKwlnaXN0U2NhblBhZ2Uoc2NhbiwgJmZha2VJdGVtLCBOVUxMLCB0Ym0s ICZudGlkcywgTlVMTCk7CiAKLQkvKgotCSAqIFdoaWxlIHNjYW5uaW5nIGEgbGVhZiBwYWdlLCBJ dGVtUG9pbnRlcnMgb2YgbWF0Y2hpbmcgaGVhcCB0dXBsZXMgd2lsbAotCSAqIGJlIHN0b3JlZCBk aXJlY3RseSBpbnRvIHRibSwgc28gd2UgZG9uJ3QgbmVlZCB0byBkZWFsIHdpdGggdGhlbSBoZXJl LgotCSAqLwogCWZvciAoOzspCiAJewogCQlHSVNUU2VhcmNoSXRlbSAqaXRlbSA9IGdldE5leHRH SVNUU2VhcmNoSXRlbShzbyk7CkBAIC03ODcsNyArODkxLDggQEAgZ2lzdGdldGJpdG1hcChJbmRl eFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRT KCk7CiAKLQkJZ2lzdFNjYW5QYWdlKHNjYW4sIGl0ZW0sIGl0ZW0tPmRpc3RhbmNlcywgdGJtLCAm bnRpZHMpOworCQkvKiBTY2FuIHRoaXMgcXVldWVkIGluZGV4IHBhZ2U7IG1hdGNoaW5nIGxlYWYg aXRlbXMgZ28gaW50byB0Ym0gKi8KKwkJZ2lzdFNjYW5QYWdlKHNjYW4sIGl0ZW0sIGl0ZW0tPmRp c3RhbmNlcywgdGJtLCAmbnRpZHMsIE5VTEwpOwogCiAJCXBmcmVlKGl0ZW0pOwogCX0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RzY2FuLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0c2Nhbi5jCmluZGV4IGM2NWY5M2FiZC4uOWZkYzAzYmQzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9naXN0L2dpc3RzY2FuLmMKQEAgLTEwNCwxMiArMTA0LDMyIEBAIGdpc3RiZWdpbnNj YW4oUmVsYXRpb24gciwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCQlzY2FuLT54c19vcmRl cmJ5dmFscyA9IHBhbGxvYzBfYXJyYXkoRGF0dW0sIHNjYW4tPm51bWJlck9mT3JkZXJCeXMpOwog CQlzY2FuLT54c19vcmRlcmJ5bnVsbHMgPSBwYWxsb2NfYXJyYXkoYm9vbCwgc2Nhbi0+bnVtYmVy T2ZPcmRlckJ5cyk7CiAJCW1lbXNldChzY2FuLT54c19vcmRlcmJ5bnVsbHMsIHRydWUsIHNpemVv Zihib29sKSAqIHNjYW4tPm51bWJlck9mT3JkZXJCeXMpOwotCX0KIAotCXNvLT5raWxsZWRJdGVt cyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKLQlzby0+ Y3VyQmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0Jc28tPmN1clBhZ2VMU04gPSBJbnZhbGlk WExvZ1JlY1B0cjsKKwkJLyoKKwkJICogT3JkZXJlZCBzY2FucyBmaWxsIGEgInZpcnR1YWwiIGJh dGNoIGJ5IGRyYWluaW5nIHRoZQorCQkgKiBkaXN0YW5jZS1vcmRlcmVkIHF1ZXVlLCBzbyB0aGUg YmF0Y2ggc2l6ZSBpcyBhIHR1bmluZyBrbm9iIHdpdGggbm8KKwkJICogbmF0dXJhbCB2YWx1ZS4g VGVzdGluZyBoYXMgc2hvd24gdGhhdCBhIHZlcnkgc21hbGwgc2l6ZSB3aWxsCisJCSAqIGluY3Jl YXNlIHBlci1iYXRjaCBvdmVyaGVhZCAoYW5kIGxpa2VseSBpbnN0cnVjdGlvbi1jYWNoZSBtaXNz ZXMpLAorCQkgKiB3aGlsZSBhIGxhcmdlIHNpemUgKHN1Y2ggYXMgTWF4SW5kZXhUdXBsZXNQZXJQ YWdlKSByaXNrcyBwcm9kdWNpbmcKKwkJICogbWFueSB0dXBsZXMgdGhhdCBhIExJTUlUIG5vZGUg bmV2ZXIgY29uc3VtZXMuICBUaGlzIG1heGl0ZW1zYmF0Y2gKKwkJICogaXMgYSBjb21wcm9taXNl LgorCQkgKi8KKwkJc2Nhbi0+bWF4aXRlbXNiYXRjaCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAv IDMyOworCX0KKwllbHNlCisJCXNjYW4tPm1heGl0ZW1zYmF0Y2ggPSBNYXhJbmRleFR1cGxlc1Bl clBhZ2U7CisKKwlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc3RhdGljID0gTUFYQUxJR04oc2l6 ZW9mKEdJU1RCYXRjaERhdGEpKTsKKworCS8qCisJICogVXNlIHNlY29uZCBvcGFxdWUgYXJlYSBm b3Igb3VyIHBlci1pdGVtIEdJU1RCYXRjaEl0ZW0gYXJyYXkKKwkgKgorCSAqIFhYWCBNb3N0IHNj YW5zIG9ubHkgbmVlZCB0byBzdG9yZSBhIHJlY2hlY2sgZmxhZy4gIFdlIGNvdWxkIHNhdmUgbWVt b3J5CisJICogaW4gdGhhdCBjb21tb24gY2FzZSBieSBqdXN0IGFza2luZyBmb3IgYW4gYXJyYXkg b2YgYm9vbGVhbnMgaGVyZS4KKwkgKi8KKwlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfZHluID0K KwkJU2l6ZU9mR0lTVEJhdGNoSXRlbShzY2FuLT5udW1iZXJPZk9yZGVyQnlzKSAqIHNjYW4tPm1h eGl0ZW1zYmF0Y2g7CisJc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IEJMQ0tTWjsKIAog CXNjYW4tPm9wYXF1ZSA9IHNvOwogCkBAIC0xNjgsOCArMTg4LDcgQEAgZ2lzdHJlc2NhbihJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkga2V5LCBpbnQgbmtleXMsCiAKIAkvKgogCSAqIElmIHdl J3JlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgb24gdGhlIGZpcnN0IGNhbGwsIGFsc28gaW5p dGlhbGl6ZSBhCi0JICogdHVwbGUgZGVzY3JpcHRvciB0byByZXByZXNlbnQgdGhlIHJldHVybmVk IGluZGV4IHR1cGxlcyBhbmQgY3JlYXRlIGEKLQkgKiBtZW1vcnkgY29udGV4dCB0byBob2xkIHRo ZW0gZHVyaW5nIHRoZSBzY2FuLgorCSAqIHR1cGxlIGRlc2NyaXB0b3IgdG8gcmVwcmVzZW50IHRo ZSByZXR1cm5lZCBpbmRleCB0dXBsZXMuCiAJICovCiAJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAm JiAhc2Nhbi0+eHNfaGl0dXBkZXNjKQogCXsKQEAgLTIwMywxMSArMjIyLDYgQEAgZ2lzdHJlc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkga2V5LCBpbnQgbmtleXMsCiAJCX0KIAkJVHVw bGVEZXNjRmluYWxpemUoc28tPmdpc3RzdGF0ZS0+ZmV0Y2hUdXBkZXNjKTsKIAkJc2Nhbi0+eHNf aGl0dXBkZXNjID0gc28tPmdpc3RzdGF0ZS0+ZmV0Y2hUdXBkZXNjOwotCi0JCS8qIEFsc28gY3Jl YXRlIGEgbWVtb3J5IGNvbnRleHQgdGhhdCB3aWxsIGhvbGQgdGhlIHJldHVybmVkIHR1cGxlcyAq LwotCQlzby0+cGFnZURhdGFDeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoc28tPmdpc3RzdGF0 ZS0+c2NhbkN4dCwKLQkJCQkJCQkJCQkJCSJHaVNUIHBhZ2UgZGF0YSBjb250ZXh0IiwKLQkJCQkJ CQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOwogCX0KIAogCS8qIGNyZWF0ZSBuZXcsIGVt cHR5IHBhaXJpbmcgaGVhcCBmb3Igc2VhcmNoIHF1ZXVlICovCkBAIC0yMTUsOCArMjI5LDYgQEAg Z2lzdHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkga2V5LCBpbnQgbmtleXMsCiAJ c28tPnF1ZXVlID0gcGFpcmluZ2hlYXBfYWxsb2NhdGUocGFpcmluZ2hlYXBfR0lTVFNlYXJjaEl0 ZW1fY21wLCBzY2FuKTsKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ3h0KTsKIAotCXNvLT5m aXJzdENhbGwgPSB0cnVlOwotCiAJLyogVXBkYXRlIHNjYW4ga2V5LCBpZiBhIG5ldyBvbmUgaXMg Z2l2ZW4gKi8KIAlpZiAoa2V5ICYmIHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJewpAQCAtMzQw LDcgKzM1Miw4IEBAIGdpc3RyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IGtleSwg aW50IG5rZXlzLAogCQkJcGZyZWUoZm5fZXh0cmFzKTsKIAl9CiAKLQkvKiBhbnkgcHJldmlvdXMg eHNfaGl0dXAgd2lsbCBoYXZlIGJlZW4gcGZyZWUnZCBpbiBjb250ZXh0IHJlc2V0cyBhYm92ZSAq LworCWlmIChzY2FuLT54c19oaXR1cCkKKwkJcGZyZWUoc2Nhbi0+eHNfaGl0dXApOwogCXNjYW4t PnhzX2hpdHVwID0gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvZ2lzdHV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMKaW5kZXgg MGY1OGY2MTg3Li5hNjg3NzE4ZTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0 L2dpc3R1dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHV0aWwuYwpAQCAt MjMsNiArMjMsNyBAQAogI2luY2x1ZGUgInV0aWxzL2Zsb2F0LmgiCiAjaW5jbHVkZSAidXRpbHMv Zm1ncnByb3Rvcy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0 aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMv c25hcG1nci5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCkBAIC02NzAsNiArNjcxLDcg QEAgZ2lzdEZldGNoVHVwbGUoR0lTVFNUQVRFICpnaXN0c3RhdGUsIFJlbGF0aW9uIHIsIEluZGV4 VHVwbGUgdHVwbGUpCiAJRGF0dW0JCWZldGNoYXR0W0lOREVYX01BWF9LRVlTXTsKIAlib29sCQlp c251bGxbSU5ERVhfTUFYX0tFWVNdOwogCWludAkJCWk7CisJSGVhcFR1cGxlCWh0dXA7CiAKIAlm b3IgKGkgPSAwOyBpIDwgSW5kZXhSZWxhdGlvbkdldE51bWJlck9mS2V5QXR0cmlidXRlcyhyKTsg aSsrKQogCXsKQEAgLTcxNyw3ICs3MTksMTIgQEAgZ2lzdEZldGNoVHVwbGUoR0lTVFNUQVRFICpn aXN0c3RhdGUsIFJlbGF0aW9uIHIsIEluZGV4VHVwbGUgdHVwbGUpCiAJfQogCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjeHQpOwogCi0JcmV0dXJuIGhlYXBfZm9ybV90dXBsZShnaXN0c3RhdGUt PmZldGNoVHVwZGVzYywgZmV0Y2hhdHQsIGlzbnVsbCk7CisJaHR1cCA9IGhlYXBfZm9ybV90dXBs ZShnaXN0c3RhdGUtPmZldGNoVHVwZGVzYywgZmV0Y2hhdHQsIGlzbnVsbCk7CisKKwkvKiBjbGVh bnVwICovCisJTWVtb3J5Q29udGV4dFJlc2V0KGdpc3RzdGF0ZS0+dGVtcEN4dCk7CisKKwlyZXR1 cm4gaHR1cDsKIH0KIAogZmxvYXQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0 L2dpc3R2YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYwppbmRl eCA2ODZhMDQxODAuLmFkMGI3YTcxZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvZ2lzdHZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0u YwpAQCAtMzI2LDEwICszMjYsMTEgQEAgcmVzdGFydDoKIAlyZWN1cnNlX3RvID0gSW52YWxpZEJs b2NrTnVtYmVyOwogCiAJLyoKLQkgKiBXZSBhcmUgbm90IGdvaW5nIHRvIHN0YXkgaGVyZSBmb3Ig YSBsb25nIHRpbWUsIGFnZ3Jlc3NpdmVseSBncmFiIGFuCi0JICogZXhjbHVzaXZlIGxvY2suCisJ ICogR2V0IGEgZnVsbCBjbGVhbnVwIGxvY2sgb24gdGhpcyBwYWdlLiAgV2UgbXVzdCBnZXQgc3Vj aCBhIGxvY2sgb24gZXZlcnkKKwkgKiBsZWFmIHBhZ2Ugb3ZlciB0aGUgY291cnNlIG9mIHRoZSB2 YWN1dW0gc2Nhbiwgd2hldGhlciBvciBub3QgaXQKKwkgKiBhY3R1YWxseSBjb250YWlucyBhbnkg ZGVsZXRhYmxlIHR1cGxlcy4KIAkgKi8KLQlMb2NrQnVmZmVyKGJ1ZmZlciwgR0lTVF9FWENMVVNJ VkUpOworCUxvY2tCdWZmZXJGb3JDbGVhbnVwKGJ1ZmZlcik7CiAJcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmZmVyKTsKIAogCWlmIChnaXN0UGFnZVJlY3ljbGFibGUocGFnZSkpCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoLmMKaW5kZXggYTk3YTA2OGNmLi40YjA4YjI4NWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo LmMKQEAgLTExOCw2ICsxMTgsNyBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQku YW1nZXRiYXRjaCA9IGhhc2hnZXRiYXRjaCwKIAkJLmFtdW5ndWFyZGJhdGNoID0gaGFzaHVuZ3Vh cmRiYXRjaCwKIAkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBoYXNoa2lsbGl0ZW1zYmF0Y2gsCisJCS5h bWdldHRyYW5zZm9ybSA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGhhc2hnZXRiaXRtYXAsCiAJ CS5hbWVuZHNjYW4gPSBoYXNoZW5kc2NhbiwKIAkJLmFtcG9zcmVzZXQgPSBOVUxMLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCmluZGV4IGUxMzdlYzFjNi4uNzU2 NTNkMWEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhz Y2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCkBA IC05OTcsMTEgKzk5NywyMyBAQCBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAkJCQkJCQkJQmF0Y2hS aW5nSXRlbVBvcyAqc2NhblBvcywKIAkJCQkJCQkJYm9vbCAqYWxsX3Zpc2libGUpCiB7CisJYW1n ZXR0cmFuc2Zvcm1fZnVuY3Rpb24gYW1nZXR0cmFuc2Zvcm0gPQorCQlzY2FuLT5pbmRleFJlbGF0 aW9uLT5yZF9pbmRhbS0+YW1nZXR0cmFuc2Zvcm07CiAJSGVhcEJhdGNoRGF0YSAqaGJhdGNoOwog CiAJLyogU2V0IHhzX2hlYXB0aWQsIHdoaWNoIGNhbGxlciAoYW5kIGNvcmUgZXhlY3V0b3IpIHdp bGwgbmVlZCAqLwogCXNjYW4tPnhzX2hlYXB0aWQgPSBzY2FuQmF0Y2gtPml0ZW1zW3NjYW5Qb3Mt Pml0ZW1dLnRhYmxlVGlkOwogCisJLyoKKwkgKiBMZXQgdGhlIGluZGV4IEFNIHNldCB0aGlzIGl0 ZW0ncyBwZXItdHVwbGUgb3V0cHV0LiAgQW4gQU0gdGhhdCBwcm92aWRlcworCSAqIGFtZ2V0dHJh bnNmb3JtIHVzZXMgaXQgdG8gc2V0IHRoZSBpdGVtJ3MgcXVhbCByZWNoZWNrIGZsYWcKKwkgKiAo c2Nhbi0+eHNfcmVjaGVjayksIGFuIG9yZGVyZWQgc2NhbidzIE9SREVSIEJZIGRpc3RhbmNlcwor CSAqICh4c19vcmRlcmJ5dmFscy94c19yZWNoZWNrb3JkZXJieSksIGFuZCBhbiBpbmRleC1vbmx5 IHNjYW4ncyByZXR1cm5hYmxlCisJICogdHVwbGUgKHhzX2hpdHVwKS4KKwkgKi8KKwlpZiAoYW1n ZXR0cmFuc2Zvcm0gIT0gTlVMTCkKKwkJYW1nZXR0cmFuc2Zvcm0oc2Nhbiwgc2NhbkJhdGNoLCBz Y2FuUG9zLT5pdGVtKTsKKwogCWlmIChhbGxfdmlzaWJsZSA9PSBOVUxMKQogCXsKIAkJLyoKQEAg LTEwMTQsOCArMTAyNiwxNCBAQCBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAkvKiBJbmRleC1vbmx5 IHNjYW4gKi8KIAlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKIAotCXNjYW4tPnhzX2l0dXAg PSAoSW5kZXhUdXBsZSkgKHNjYW5CYXRjaC0+Y3VyclR1cGxlcyArCi0JCQkJCQkJCSAgc2NhbkJh dGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50dXBsZU9mZnNldCk7CisJLyoKKwkgKiBVbmxlc3Mg dGhlIGluZGV4IEFNIGFscmVhZHkgcHJvZHVjZWQgdGhlIHJldHVybmFibGUgdHVwbGUgdmlhCisJ ICogYW1nZXR0cmFuc2Zvcm0gYWJvdmUgKGluIHhzX2hpdHVwKSwgc2V0IHRoZSBvcmlnaW5hbCBp bmRleCB0dXBsZSB0aGF0CisJICogYW1nZXRiYXRjaCBzdG9yZWQgaW4gY3VyclR1cGxlcyBpbiB4 c19pdHVwLgorCSAqLworCWlmIChhbWdldHRyYW5zZm9ybSA9PSBOVUxMKQorCQlzY2FuLT54c19p dHVwID0gKEluZGV4VHVwbGUpIChzY2FuQmF0Y2gtPmN1cnJUdXBsZXMgKworCQkJCQkJCQkJICBz Y2FuQmF0Y2gtPml0ZW1zW3NjYW5Qb3MtPml0ZW1dLnR1cGxlT2Zmc2V0KTsKIAogCS8qCiAJICog U2V0IHZpc2liaWxpdHkgaW5mbyBmb3IgdGhlIGN1cnJlbnQgc2NhblBvcyBpdGVtIChwbHVzIHBv c3NpYmx5IHNvbWUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMKaW5kZXggZDRhZGJiZWIyLi45ODg2 ZjQ5ZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCkBAIC01OCw2ICs1OCw3IEBAIEdldElu ZGV4QW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJLyogQXNzZXJ0IHRoYXQgQU0gZG9lc24ndCBo YXZlIGFuIGludmFsaWQgY29tYmluYXRpb24gb2YgY2FsbGJhY2tzICovCiAJQXNzZXJ0KChyb3V0 aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpID09IChyb3V0aW5lLT5hbXVuZ3VhcmRiYXRjaCAhPSBO VUxMKSk7CiAJQXNzZXJ0KHJvdXRpbmUtPmFta2lsbGl0ZW1zYmF0Y2ggPT0gTlVMTCB8fCByb3V0 aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT5hbWdldHRyYW5zZm9y bSA9PSBOVUxMIHx8IHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRp bmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCB8fCByb3V0aW5lLT5hbXBvc3Jlc2V0ID09IE5VTEwpOwog CiAJcmV0dXJuIHJvdXRpbmU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv Z2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmluZGV4IDMwYWY0ZTQx Mi4uMjIwZjIzZTU3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0u YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtMTMxLDYgKzEzMSw3 IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBua2V5 cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBOVUxMOwogCiAJc2Nh bi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRpYyA9IDA7CisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3Bh cXVlX2R5biA9IDA7CiAJc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IDA7CiAJc2Nhbi0+ YmF0Y2hfb3BhcXVlX3NpemUgPSAwOwogCXNjYW4tPmJhdGNoX3Blcl9pdGVtX3NpemUgPSAwOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKaW5kZXggNzViOWJiNDVmLi43OTNmYjI2 ODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtNTkzLDEzICs1OTMs MTUgQEAgaW5kZXhhbV91dGlsX2FsbG9jX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJICoK IAkJICogVGhpcyBjb21iaW5lcyB0aGUgdGFibGUgQU0gb3BhcXVlIGFyZWEgKGl0cyBmaXhlZC1z aXplIGhlYWRlciBwbHVzCiAJCSAqIGFueSBwZXItaXRlbSBhcmVhIHVzZWQgZHVyaW5nIGluZGV4 LW9ubHkgc2NhbnMpIGFuZCB0aGUgaW5kZXggQU0ncwotCQkgKiBzdGF0aWMgb3BhcXVlIGFyZWEg aW50byBhIHNpbmdsZSBvZmZzZXQgdXNlZCB0byBmaW5kIHRoZSB0cnVlCi0JCSAqIGFsbG9jYXRp b24gYmFzZSBmcm9tIHRoZSBiYXRjaCBwb2ludGVyLiAgKFRoaXMgaXMgYWxzbyB3aGVyZSB0aGUK LQkJICogZml4ZWQtc2l6ZSB0YWJsZSBBTSBvcGFxdWUgYXJlYSBjYW4gYmUgZm91bmQuKQorCQkg KiBvcGFxdWUgYXJlYXMgKHN0YXRpYyBwbHVzIHRoZSBvcHRpb25hbCBkeW5hbWljKSBpbnRvIGEg c2luZ2xlCisJCSAqIG9mZnNldCB1c2VkIHRvIGZpbmQgdGhlIHRydWUgYWxsb2NhdGlvbiBiYXNl IGZyb20gdGhlIGJhdGNoCisJCSAqIHBvaW50ZXIuICAoVGhpcyBpcyBhbHNvIHdoZXJlIHRoZSBm aXhlZC1zaXplIHRhYmxlIEFNIG9wYXF1ZSBhcmVhCisJCSAqIGNhbiBiZSBmb3VuZC4pCiAJCSAq LwogCQlpZiAoc2Nhbi0+YmF0Y2hfYmFzZV9vZmZzZXQgPT0gMCkKIAkJewogCQkJU2l6ZQkJdGFi bGVfYXJlYSA9IDA7CisJCQlTaXplCQlpbmRleF9keW5fYXJlYTsKIAogCQkJLyoKIAkJCSAqIFRo ZSB0YWJsZSBBTSBvcGFxdWUgYXJlYSBpcyBhIHNpbmdsZSBjb250aWd1b3VzIGJsb2NrOiBhCkBA IC02MTksOCArNjIxLDE4IEBAIGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChJbmRleFNjYW5EZXNj IHNjYW4pCiAJCQkJCQkJCQkgIChTaXplKSBzY2FuLT5iYXRjaF9wZXJfaXRlbV9zaXplICoKIAkJ CQkJCQkJCSAgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CiAKKwkJCS8qCisJCQkgKiBUaGUgb3B0aW9u YWwgZHluYW1pYyBpbmRleCBBTSBvcGFxdWUgYXJlYQorCQkJICogKGJhdGNoX2luZGV4X29wYXF1 ZV9keW4gYnl0ZXMpIHNpdHMgYmV0d2VlbiB0aGUgdGFibGUgQU0gYXJlYQorCQkJICogYW5kIHRo ZSBzdGF0aWMgaW5kZXggQU0gb3BhcXVlIGFyZWEKKwkJCSAqLworCQkJaW5kZXhfZHluX2FyZWEg PSBNQVhBTElHTihzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfZHluKTsKIAotCQkJc2Nhbi0+YmF0 Y2hfYmFzZV9vZmZzZXQgPSB0YWJsZV9hcmVhICsKKwkJCS8qCisJCQkgKiBpbmRleF9keW5fYXJl YSBpcyBhbGxvd2VkIHRvIGJlIHZlcnkgbGFyZ2UsIHNvIHdlJ3JlIGNhcmVmdWwgdG8KKwkJCSAq IG5vdCBsZXQgaXQgb3ZlcmZsb3cKKwkJCSAqLworCQkJc2Nhbi0+YmF0Y2hfYmFzZV9vZmZzZXQg PSB0YWJsZV9hcmVhICsgaW5kZXhfZHluX2FyZWEgKwogCQkJCXNjYW4tPmJhdGNoX2luZGV4X29w YXF1ZV9zdGF0aWM7CiAJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXggM2Qz MzQ0ODRkLi5jZDJiMmNkY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpAQCAtMTY2 LDYgKzE2Niw3IEBAIGJ0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1nZXRiYXRjaCA9 IGJ0Z2V0YmF0Y2gsCiAJCS5hbXVuZ3VhcmRiYXRjaCA9IGJ0dW5ndWFyZGJhdGNoLAogCQkuYW1r aWxsaXRlbXNiYXRjaCA9IGJ0a2lsbGl0ZW1zYmF0Y2gsCisJCS5hbWdldHRyYW5zZm9ybSA9IE5V TEwsCiAJCS5hbWdldGJpdG1hcCA9IGJ0Z2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gYnRlbmRz Y2FuLAogCQkuYW1wb3NyZXNldCA9IGJ0cG9zcmVzZXQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3Nw Z3V0aWxzLmMKaW5kZXggNzQ1NDM1ZGEzLi40NzE1M2I0YjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Bn aXN0L3NwZ3V0aWxzLmMKQEAgLTkyLDYgKzkyLDcgQEAgc3BnaGFuZGxlcihQR19GVU5DVElPTl9B UkdTKQogCQkuYW1nZXRiYXRjaCA9IE5VTEwsCiAJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCiAJ CS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtZ2V0dHJhbnNmb3JtID0gTlVMTCwKIAkJ LmFtZ2V0Yml0bWFwID0gc3BnZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gc3BnZW5kc2NhbiwK IAkJLmFtcG9zcmVzZXQgPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlz Y2FuLmMKaW5kZXggZWI0YzhjYTVhLi5hMjljOTExY2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUluZGV4b25seXNjYW4uYwpAQCAtMTMyLDE4ICsxMzIsNiBAQCBJbmRleE9ubHlOZXh0KElu ZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJCX0KIAkJfQogCi0JCS8qCi0JCSAqIFdlIGRvbid0 IGN1cnJlbnRseSBzdXBwb3J0IHJlY2hlY2tpbmcgT1JERVIgQlkgZGlzdGFuY2VzLiAgKEluCi0J CSAqIHByaW5jaXBsZSwgaWYgdGhlIGluZGV4IGNhbiBzdXBwb3J0IHJldHJpZXZhbCBvZiB0aGUg b3JpZ2luYWxseQotCQkgKiBpbmRleGVkIHZhbHVlLCBpdCBzaG91bGQgYmUgYWJsZSB0byBwcm9k dWNlIGFuIGV4YWN0IGRpc3RhbmNlCi0JCSAqIGNhbGN1bGF0aW9uIHRvby4gIFNvIGl0J3Mgbm90 IGNsZWFyIHRoYXQgYWRkaW5nIGNvZGUgaGVyZSBmb3IKLQkJICogcmVjaGVjay9yZS1zb3J0IHdv dWxkIGJlIHdvcnRoIHRoZSB0cm91YmxlLiAgQnV0IHdlIHNob3VsZCBhdCBsZWFzdAotCQkgKiB0 aHJvdyBhbiBlcnJvciBpZiBzb21lb25lIHRyaWVzIGl0LikKLQkJICovCi0JCWlmIChzY2FuZGVz Yy0+bnVtYmVyT2ZPcmRlckJ5cyA+IDAgJiYgc2NhbmRlc2MtPnhzX3JlY2hlY2tvcmRlcmJ5KQot CQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAotCQkJCQkgZXJybXNnKCJsb3NzeSBkaXN0YW5jZSBmdW5jdGlvbnMgYXJlIG5vdCBz dXBwb3J0ZWQgaW4gaW5kZXgtb25seSBzY2FucyIpKSk7CiAJCXJldHVybiBzbG90OwogCX0KIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXggOTRmZWRmMzJjLi42MjRiNmQw ZjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpAQCAtOTUxLDkgKzk1MSwx MiBAQCBidWlsZF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCS8qCiAJICogMy4gQ2hlY2sgaWYgYW4gaW5kZXgtb25seSBzY2FuIGlzIHBvc3NpYmxlLiAg SWYgd2UncmUgbm90IGJ1aWxkaW5nCiAJICogcGxhaW4gaW5kZXhzY2FucywgdGhpcyBpc24ndCBy ZWxldmFudCBzaW5jZSBiaXRtYXAgc2NhbnMgZG9uJ3Qgc3VwcG9ydAotCSAqIGluZGV4IGRhdGEg cmV0cmlldmFsIGFueXdheS4KKwkgKiBpbmRleCBkYXRhIHJldHJpZXZhbCBhbnl3YXkuICBJZiB0 aGVyZSBhcmUgb3JkZXJpbmcgb3BlcmF0b3JzIHRoZW4gd2UKKwkgKiBhc3N1bWUgdGhhdCBhbiBp bmRleC1vbmx5IHNjYW4gaXMgdW5zYWZlIGR1ZSB0byB0aGUgZGlmZmljdWx0eSB3aXRoCisJICog aG9sZGluZyBpbmRleCBwYWdlIHBpbnMgc3VmZmljaWVudCB0byBhdm9pZCBjb25jdXJyZW50IFRJ RCByZWN5Y2xpbmcuCiAJICovCiAJaW5kZXhfb25seV9zY2FuID0gKHNjYW50eXBlICE9IFNUX0JJ VE1BUFNDQU4gJiYKKwkJCQkJICAgb3JkZXJieWNsYXVzZXMgPT0gTklMICYmCiAJCQkJCSAgIGNo ZWNrX2luZGV4X29ubHkocmVsLCBpbmRleCkpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2NvbnRyaWIv Ymxvb20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5kZXggMjQ5YWY0OGU2 Li4xNjg4NDJiYzcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCisrKyBiL2Nv bnRyaWIvYmxvb20vYmx1dGlscy5jCkBAIC0xNTAsNiArMTUwLDcgQEAgYmxoYW5kbGVyKFBHX0ZV TkNUSU9OX0FSR1MpCiAJCS5hbWdldGJhdGNoID0gTlVMTCwKIAkJLmFtdW5ndWFyZGJhdGNoID0g TlVMTCwKIAkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0cmFuc2Zvcm0gPSBO VUxMLAogCQkuYW1nZXRiaXRtYXAgPSBibGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJsZW5k c2NhbiwKIAkJLmFtcG9zcmVzZXQgPSBOVUxMLApkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9n aXN0L2V4cGVjdGVkL2Nhc2gub3V0IGIvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2Nhc2gu b3V0CmluZGV4IDdmYmM3MzU1OS4uNTZmZDFlYjQ5IDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVl X2dpc3QvZXhwZWN0ZWQvY2FzaC5vdXQKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVk L2Nhc2gub3V0CkBAIC03NCwxMCArNzQsMTAgQEAgU0VMRUNUIGNvdW50KCopIEZST00gbW9uZXl0 bXAgV0hFUkUgYSA+ICAnMjI2NDkuNjQnOjptb25leTsKIAogRVhQTEFJTiAoQ09TVFMgT0ZGKQog U0VMRUNUIGEsIGEgPC0+ICcyMTQ3Mi43OScgRlJPTSBtb25leXRtcCBPUkRFUiBCWSBhIDwtPiAn MjE0NzIuNzknIExJTUlUIDM7Ci0gICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIExpbWl0 Ci0gICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIG1vbmV5aWR4IG9uIG1vbmV5dG1wCisgICAt PiAgSW5kZXggU2NhbiB1c2luZyBtb25leWlkeCBvbiBtb25leXRtcAogICAgICAgICAgT3JkZXIg Qnk6IChhIDwtPiAnJDIxLDQ3Mi43OSc6Om1vbmV5KQogKDMgcm93cykKIApkaWZmIC0tZ2l0IGEv Y29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2RhdGUub3V0IGIvY29udHJpYi9idHJlZV9naXN0 L2V4cGVjdGVkL2RhdGUub3V0CmluZGV4IDVkYjg2NGJiOC4uNGEzNjBiZWE2IDEwMDY0NAotLS0g YS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvZGF0ZS5vdXQKKysrIGIvY29udHJpYi9idHJl ZV9naXN0L2V4cGVjdGVkL2RhdGUub3V0CkBAIC03NCwxMCArNzQsMTAgQEAgU0VMRUNUIGNvdW50 KCopIEZST00gZGF0ZXRtcCBXSEVSRSBhID4gICcyMDAxLTAyLTEzJzo6ZGF0ZTsKIAogRVhQTEFJ TiAoQ09TVFMgT0ZGKQogU0VMRUNUIGEsIGEgPC0+ICcyMDAxLTAyLTEzJyBGUk9NIGRhdGV0bXAg T1JERVIgQlkgYSA8LT4gJzIwMDEtMDItMTMnIExJTUlUIDM7Ci0gICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogIExpbWl0Ci0gICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGRhdGVpZHggb24gZGF0 ZXRtcAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZGF0ZWlkeCBvbiBkYXRldG1wCiAgICAgICAg ICBPcmRlciBCeTogKGEgPC0+ICcwMi0xMy0yMDAxJzo6ZGF0ZSkKICgzIHJvd3MpCiAKZGlmZiAt LWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9mbG9hdDQub3V0IGIvY29udHJpYi9i dHJlZV9naXN0L2V4cGVjdGVkL2Zsb2F0NC5vdXQKaW5kZXggZGZlNzMyMDQ5Li44ODc4YTMxN2Mg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9mbG9hdDQub3V0CisrKyBi L2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9mbG9hdDQub3V0CkBAIC03NCwxMCArNzQsMTAg QEAgU0VMRUNUIGNvdW50KCopIEZST00gZmxvYXQ0dG1wIFdIRVJFIGEgPiAgLTE3OS4wOjpmbG9h dDQ7CiAKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBhLCBhIDwtPiAnLTE3OS4wJyBGUk9N IGZsb2F0NHRtcCBPUkRFUiBCWSBhIDwtPiAnLTE3OS4wJyBMSU1JVCAzOwotICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNp bmcgZmxvYXQ0aWR4IG9uIGZsb2F0NHRtcAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZmxvYXQ0 aWR4IG9uIGZsb2F0NHRtcAogICAgICAgICAgT3JkZXIgQnk6IChhIDwtPiAnLTE3OSc6OnJlYWwp CiAoMyByb3dzKQogCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvZmxv YXQ4Lm91dCBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9mbG9hdDgub3V0CmluZGV4IGVi ZDBlZjNkNi4uNzYzMDkxYjVjIDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0 ZWQvZmxvYXQ4Lm91dAorKysgYi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvZmxvYXQ4Lm91 dApAQCAtNzcsNyArNzcsNyBAQCBTRUxFQ1QgYSwgYSA8LT4gJy0xODkwLjAnIEZST00gZmxvYXQ4 dG1wIE9SREVSIEJZIGEgPC0+ICctMTg5MC4wJyBMSU1JVCAzOwogICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAgIC0+ICBJbmRleCBP bmx5IFNjYW4gdXNpbmcgZmxvYXQ4aWR4IG9uIGZsb2F0OHRtcAorICAgLT4gIEluZGV4IFNjYW4g dXNpbmcgZmxvYXQ4aWR4IG9uIGZsb2F0OHRtcAogICAgICAgICAgT3JkZXIgQnk6IChhIDwtPiAn LTE4OTAnOjpkb3VibGUgcHJlY2lzaW9uKQogKDMgcm93cykKIApkaWZmIC0tZ2l0IGEvY29udHJp Yi9idHJlZV9naXN0L2V4cGVjdGVkL2ludDIub3V0IGIvY29udHJpYi9idHJlZV9naXN0L2V4cGVj dGVkL2ludDIub3V0CmluZGV4IDUwYTMzMjkzOS4uMjQ1ZmE0YmU2IDEwMDY0NAotLS0gYS9jb250 cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50Mi5vdXQKKysrIGIvY29udHJpYi9idHJlZV9naXN0 L2V4cGVjdGVkL2ludDIub3V0CkBAIC03NCwxMCArNzQsMTAgQEAgU0VMRUNUIGNvdW50KCopIEZS T00gaW50MnRtcCBXSEVSRSBhID4gIDIzNzo6aW50MjsKIAogRVhQTEFJTiAoQ09TVFMgT0ZGKQog U0VMRUNUIGEsIGEgPC0+ICcyMzcnIEZST00gaW50MnRtcCBPUkRFUiBCWSBhIDwtPiAnMjM3JyBM SU1JVCAzOwotICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBMaW1pdAotICAgLT4gIEluZGV4IE9ubHkgU2Nh biB1c2luZyBpbnQyaWR4IG9uIGludDJ0bXAKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGludDJp ZHggb24gaW50MnRtcAogICAgICAgICAgT3JkZXIgQnk6IChhIDwtPiAnMjM3Jzo6c21hbGxpbnQp CiAoMyByb3dzKQogCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50 NC5vdXQgYi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50NC5vdXQKaW5kZXggNmJiZGM3 YzNmLi40MWJlZDFmNmUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9p bnQ0Lm91dAorKysgYi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50NC5vdXQKQEAgLTc0 LDEwICs3NCwxMCBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSBpbnQ0dG1wIFdIRVJFIGEgPiAgMjM3 OjppbnQ0OwogCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgYSwgYSA8LT4gJzIzNycgRlJP TSBpbnQ0dG1wIE9SREVSIEJZIGEgPC0+ICcyMzcnIExJTUlUIDM7Ci0gICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogIExpbWl0Ci0gICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGludDRpZHggb24gaW50NHRt cAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgaW50NGlkeCBvbiBpbnQ0dG1wCiAgICAgICAgICBP cmRlciBCeTogKGEgPC0+IDIzNykKICgzIHJvd3MpCiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRy ZWVfZ2lzdC9leHBlY3RlZC9pbnQ4Lm91dCBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9p bnQ4Lm91dAppbmRleCBlZmY3N2MyNmIuLjJiYmRkNzY1NyAxMDA2NDQKLS0tIGEvY29udHJpYi9i dHJlZV9naXN0L2V4cGVjdGVkL2ludDgub3V0CisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBl Y3RlZC9pbnQ4Lm91dApAQCAtNzcsNyArNzcsNyBAQCBTRUxFQ1QgYSwgYSA8LT4gJzQ2NDU3MTI5 MTM1NDg0MScgRlJPTSBpbnQ4dG1wIE9SREVSIEJZIGEgPC0+ICc0NjQ1NzEyOTEzNTQ4NDEnCiAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBMaW1p dAotICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBpbnQ4aWR4IG9uIGludDh0bXAKKyAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIGludDhpZHggb24gaW50OHRtcAogICAgICAgICAgT3JkZXIgQnk6 IChhIDwtPiAnNDY0NTcxMjkxMzU0ODQxJzo6YmlnaW50KQogKDMgcm93cykKIApkaWZmIC0tZ2l0 IGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2ludGVydmFsLm91dCBiL2NvbnRyaWIvYnRy ZWVfZ2lzdC9leHBlY3RlZC9pbnRlcnZhbC5vdXQKaW5kZXggNGMzZDQ5NGU0Li40ZWQxOTYxOTgg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9pbnRlcnZhbC5vdXQKKysr IGIvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2ludGVydmFsLm91dApAQCAtNzcsNyArNzcs NyBAQCBTRUxFQ1QgYSwgYSA8LT4gJzE5OSBkYXlzIDIxOjIxOjIzJyBGUk9NIGludGVydmFsdG1w IE9SREVSIEJZIGEgPC0+ICcxOTkgZGF5cyAyMQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICBMaW1pdAotICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBpbnRlcnZh bGlkeCBvbiBpbnRlcnZhbHRtcAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgaW50ZXJ2YWxpZHgg b24gaW50ZXJ2YWx0bXAKICAgICAgICAgIE9yZGVyIEJ5OiAoYSA8LT4gJ0AgMTk5IGRheXMgMjEg aG91cnMgMjEgbWlucyAyMyBzZWNzJzo6aW50ZXJ2YWwpCiAoMyByb3dzKQogCmRpZmYgLS1naXQg YS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvdGltZS5vdXQgYi9jb250cmliL2J0cmVlX2dp c3QvZXhwZWN0ZWQvdGltZS5vdXQKaW5kZXggZWM5NWVmNzdjLi4xYjlkYTRlMTkgMTAwNjQ0Ci0t LSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1lLm91dAorKysgYi9jb250cmliL2J0 cmVlX2dpc3QvZXhwZWN0ZWQvdGltZS5vdXQKQEAgLTc3LDcgKzc3LDcgQEAgU0VMRUNUIGEsIGEg PC0+ICcxMDo1NzoxMScgRlJPTSB0aW1ldG1wIE9SREVSIEJZIGEgPC0+ICcxMDo1NzoxMScgTElN SVQgMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogIExpbWl0Ci0gICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5n IHRpbWVpZHggb24gdGltZXRtcAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdGltZWlkeCBvbiB0 aW1ldG1wCiAgICAgICAgICBPcmRlciBCeTogKGEgPC0+ICcxMDo1NzoxMSc6OnRpbWUgd2l0aG91 dCB0aW1lIHpvbmUpCiAoMyByb3dzKQogCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3Qv ZXhwZWN0ZWQvdGltZXN0YW1wLm91dCBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1l c3RhbXAub3V0CmluZGV4IDBkOTRmMmYyNC4uY2MzNjI0ZjA4IDEwMDY0NAotLS0gYS9jb250cmli L2J0cmVlX2dpc3QvZXhwZWN0ZWQvdGltZXN0YW1wLm91dAorKysgYi9jb250cmliL2J0cmVlX2dp c3QvZXhwZWN0ZWQvdGltZXN0YW1wLm91dApAQCAtNzcsNyArNzcsNyBAQCBTRUxFQ1QgYSwgYSA8 LT4gJzIwMDQtMTAtMjYgMDg6NTU6MDgnIEZST00gdGltZXN0YW1wdG1wIE9SREVSIEJZIGEgPC0+ ICcyMDA0LTEwLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAgTGltaXQKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgdGltZXN0YW1w aWR4IG9uIHRpbWVzdGFtcHRtcAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdGltZXN0YW1waWR4 IG9uIHRpbWVzdGFtcHRtcAogICAgICAgICAgT3JkZXIgQnk6IChhIDwtPiAnVHVlIE9jdCAyNiAw ODo1NTowOCAyMDA0Jzo6dGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lKQogKDMgcm93cykKIApk aWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL3RpbWVzdGFtcHR6Lm91dCBi L2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1lc3RhbXB0ei5vdXQKaW5kZXggNzVhMTVh NDI1Li44OGQyNDA0YzQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90 aW1lc3RhbXB0ei5vdXQKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL3RpbWVzdGFt cHR6Lm91dApAQCAtMTk3LDcgKzE5Nyw3IEBAIFNFTEVDVCBhLCBhIDwtPiAnMjAxOC0xMi0xOCAx MDo1OTo1NCBHTVQrMicgRlJPTSB0aW1lc3RhbXB0enRtcCBPUkRFUiBCWSBhIDwtPiAnCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIExp bWl0Ci0gICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIHRpbWVzdGFtcHR6aWR4IG9uIHRpbWVz dGFtcHR6dG1wCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyB0aW1lc3RhbXB0emlkeCBvbiB0aW1l c3RhbXB0enRtcAogICAgICAgICAgT3JkZXIgQnk6IChhIDwtPiAnVHVlIERlYyAxOCAwNDo1OTo1 NCAyMDE4IFBTVCc6OnRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZSkKICgzIHJvd3MpCiAKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5z Z21sCmluZGV4IDM4YjZhNDAwNC4uMjdmY2QwNGQ1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv aW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTE3Miw2ICsx NzIsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogICAgIGFtZ2V0YmF0Y2hfZnVu Y3Rpb24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbXVuZ3VhcmRiYXRjaF9m dW5jdGlvbiBhbXVuZ3VhcmRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWtpbGxpdGVt c2JhdGNoX2Z1bmN0aW9uIGFta2lsbGl0ZW1zYmF0Y2g7CS8qIGNhbiBiZSBOVUxMICovCisgICAg YW1nZXR0cmFuc2Zvcm1fZnVuY3Rpb24gYW1nZXR0cmFuc2Zvcm07IC8qIGNhbiBiZSBOVUxMICov CiAgICAgYW1nZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7ICAgLyogY2FuIGJlIE5VTEwg Ki8KICAgICBhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwogICAgIGFtcG9zcmVzZXRfZnVu Y3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KQEAgLTcxNiw2ICs3MTcsMTggQEAg YW1iZWdpbnNjYW4gKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAgICAgICBhbmQgc2libGluZyBw YWdlIGxpbmtzKS4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVt PgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPnNjYW4tJmd0O2JhdGNoX2luZGV4X29wYXF1 ZV9keW48L2xpdGVyYWw+OiB0aGUgc2l6ZSBvZiBhbgorICAgICAgb3B0aW9uYWwgc2Vjb25kIHBl ci1iYXRjaCBvcGFxdWUgYXJlYSwgb3IgMCBpZiB0aGUgaW5kZXggQU0gZG9lcyBub3QgbmVlZAor ICAgICAgb25lLiAgVW5saWtlIHRoZSBhcmVhIGFib3ZlLCBpdHMgc2l6ZSBuZWVkIG5vdCBiZSBr bm93biBhdCBjb21waWxlIHRpbWU7CisgICAgICB0aGUgaW5kZXggQU0gbWF5IGNob29zZSBpdCBh dCB0aGUgc3RhcnQgb2YgZWFjaCBzY2FuLiAgSXQgc2l0cyBpbW1lZGlhdGVseQorICAgICAgYmVm b3JlIHRoZSBzdGF0aWMgYXJlYSwgYW5kIGNvcmUgY29kZSB0cmVhdHMgaXQgYXMgYSBzaW5nbGUg b3BhcXVlCisgICAgICBhbGxvY2F0aW9uIHRoYXQgdGhlIGluZGV4IEFNIGxheXMgb3V0IGhvd2V2 ZXIgaXQgbGlrZXMgKGZvciBleGFtcGxlLCB0bworICAgICAgY2FycnkgcGVyLWl0ZW0gbWF0Y2gg bWV0YWRhdGEsIHN1Y2ggYXMgYSByZWNoZWNrIGZsYWcgb3Igb3JkZXItYnkKKyAgICAgIGRpc3Rh bmNlcywgdGhhdCBtdXN0IHRyYXZlbCB3aXRoIHRoZSBiYXRjaCkuCisgICAgIDwvcGFyYT4KKyAg ICA8L2xpc3RpdGVtPgogICAgIDxsaXN0aXRlbT4KICAgICAgPHBhcmE+CiAgICAgICA8bGl0ZXJh bD5zY2FuLSZndDtiYXRjaF90dXBsZXNfd29ya3NwYWNlPC9saXRlcmFsPjogdGhlIHNpemUgaW4g Ynl0ZXMKQEAgLTczNiw3ICs3NDksOCBAQCBhbWJlZ2luc2NhbiAoUmVsYXRpb24gaW5kZXhSZWxh dGlvbiwKICAgIDxmdW5jdGlvbj5hbWJlZ2luc2NhbjwvZnVuY3Rpb24+LCBzaW5jZSB0aGUgdmFs dWUgYXBwbGllcyB0byBldmVyeSBpdGVtIHRoZQogICAgc2NhbiByZXR1cm5zLiAgVGhlIHZhbHVl IHNldCBoZXJlIHBlcnNpc3RzIGFjcm9zcyBhbnkgc3Vic2VxdWVudAogICAgPGZ1bmN0aW9uPmFt cmVzY2FuPC9mdW5jdGlvbj4gY2FsbHMuICBCLXRyZWUgKGFsd2F5cyBmYWxzZSkgYW5kIGhhc2gg KGFsd2F5cwotICAgdHJ1ZSkgd29yayB0aGlzIHdheS4KKyAgIHRydWUpIHdvcmsgdGhpcyB3YXk7 IHNlZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGJlbG93IGZvciB0aGUgY2FzZQor ICAgd2hlcmUgdGhlIHJlY2hlY2sgcmVxdWlyZW1lbnQgdmFyaWVzIHBlciBpdGVtLgogICA8L3Bh cmE+CiAKICAgPHBhcmE+CkBAIC04OTAsMjAgKzkwNCw0NiBAQCBhbWdldGJhdGNoIChJbmRleFNj YW5EZXNjIHNjYW4sCiAgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB1c2luZyA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IG11c3Qgc2V0CiAgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNo ZWNrPC9saXRlcmFsPiB0byBpbmRpY2F0ZSB3aGV0aGVyIHJlY2hlY2tpbmcgb2YKICAgIHNjYW4g a2V5cyBpcyByZXF1aXJlZCwgaW4gdGhlIHNhbWUgd2F5IGFzIDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4KLSAgIGRvZXMuIEhvd2V2ZXIsIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hl Y2s8L2xpdGVyYWw+IG11c3QgYmUgc2V0IGNvbnNpc3RlbnRseQotICAgZm9yIGFuIGVudGlyZSBz Y2FuIHJhdGhlciB0aGFuIHZhcnlpbmcgb24gYSBwZXItdHVwbGUgYmFzaXMuIFRoaXMgaXMgYSBr ZXkKLSAgIGRpZmZlcmVuY2UgZnJvbSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCB3 aGljaCBjYW4gc2V0Ci0gICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBp bmRlcGVuZGVudGx5IGZvciBlYWNoIHR1cGxlIGl0IHJldHVybnMuCi0gICBJbmRleCBhY2Nlc3Mg bWV0aG9kcyB0aGF0IHJlcXVpcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyCi0gICA8bGl0ZXJhbD5z Y2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IHVzZSB0aGUgPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPgotICAgaW50ZXJmYWNlIGluc3RlYWQgb2YgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPi4KKyAgIGRvZXMuICBBbiA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IGFjY2VzcyBtZXRob2QgY2Fubm90IHNldAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNf cmVjaGVjazwvbGl0ZXJhbD4gYXMgaXQgcmV0dXJucyBlYWNoIGl0ZW0gdGhlIHdheQorICAgPGZ1 bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBkb2VzLCBiZWNhdXNlIGl0cyBpbnRlcmZhY2Ug ZGVjb3VwbGVzIHRoZQorICAgb3JkZXIgb2YgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBjYWxscyBmcm9tIHRoZSBvcmRlciBpbiB3aGljaAorICAgaXRlbXMgYXJlIGxhdGVyIHJldHVy bmVkIHRvIHRoZSBzY2FuLiAgV2hlbiB0aGUgcmVjaGVjayByZXF1aXJlbWVudCBpcyBhCisgICBm aXhlZCBwcm9wZXJ0eSBvZiB0aGUgd2hvbGUgc2NhbiwgdGhlIGFjY2VzcyBtZXRob2Qgc2ltcGx5 IHNldHMKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVyYWw+IG9uY2UsIGF0 IHNjYW4gc3RhcnQgKGluIGl0cworICAgPGZ1bmN0aW9uPmFtYmVnaW5zY2FuPC9mdW5jdGlvbj4g cm91dGluZSk6IEItdHJlZSBhbHdheXMgc2V0cyBpdCBmYWxzZSwgYW5kCisgICBoYXNoIGFsd2F5 cyBzZXRzIGl0IHRydWUuICBXaGVuIGl0IGluc3RlYWQgdmFyaWVzIGZyb20gb25lIG1hdGNoaW5n CisgICBpdGVtIHRvIHRoZSBuZXh0LCB0aGUgYWNjZXNzIG1ldGhvZCByZWNvcmRzIHRoZSBwZXIt aXRlbSB2YWx1ZSBpbiB0aGUgYmF0Y2gKKyAgIGFuZCBwcm92aWRlcyBhbiA8ZnVuY3Rpb24+YW1n ZXR0cmFuc2Zvcm08L2Z1bmN0aW9uPiBjYWxsYmFjayAoc2VlIGJlbG93KSwKKyAgIHdoaWNoIHRo ZSB0YWJsZSBBTSBpbnZva2VzIGZvciBlYWNoIHJldHVybmVkIGl0ZW0gdG8gc2V0CisgICA8bGl0 ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBmcm9tIHRoYXQgcmVjb3JkZWQgc3Rh dGU7IEdpU1Qgd29ya3MKKyAgIHRoaXMgd2F5LgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBT aW1pbGFybHksIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBk b2VzIG5vdCBjdXJyZW50bHkKLSAgIHN1cHBvcnQgaW5kZXgtb25seSBzY2FucyB0aGF0IHJldHVy biBkYXRhIGluIHRoZSBmb3JtIG9mIGEKLSAgIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwvc3RydWN0 bmFtZT4gcG9pbnRlciBzdG9yZWQgaW4KLSAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2hpdHVwPC9s aXRlcmFsPi4KKyAgIEZvciBpbmRleC1vbmx5IHNjYW5zLCBhbiA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+IGFjY2VzcyBtZXRob2QKKyAgIG5vcm1hbGx5IHJldHVybnMgdGhlIG1hdGNo aW5nIG9uLWRpc2sgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4KKyAgIGRpcmVj dGx5OiB0aGUgYmF0Y2ggaW5mcmFzdHJ1Y3R1cmUgY29waWVzIDxzdHJ1Y3RuYW1lPkluZGV4VHVw bGU8L3N0cnVjdG5hbWU+CisgICByZWNvcmRzIGZyb20gaW5kZXggcGFnZXMgaW50byBhIGxvY2Fs IGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBiYXRjaCwgYW5kCisgICB0aGUgdGFibGUgQU0g ZXhwb3NlcyB0aGUgY3VycmVudCBvbmUgdmlhIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2l0dXA8L2xp dGVyYWw+LgorICAgPGxpdGVyYWw+eHNfaXR1cGRlc2M8L2xpdGVyYWw+IHdvcmtzIGluIHRoZSBz YW1lIHdheSBhcyBhbHJlYWR5IGRlc2NyaWJlZCBmb3IKKyAgIDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4sIGFuZCB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IG5vdCBzZXQgdGhl CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19pdHVwPC9saXRlcmFsPiBmaWVsZCBpdHNlbGYuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEFuIGFjY2VzcyBtZXRob2Qgd2hvc2UgcmV0dXJuYWJs ZSB2YWx1ZXMgbXVzdCBiZSByZWNvbnN0cnVjdGVkIChyYXRoZXIgdGhhbgorICAgcmV0dXJuZWQg YXMgYSBzdG9yZWQgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4pIGluc3RlYWQg cHJvdmlkZXMgYW4KKyAgIDxmdW5jdGlvbj5hbWdldHRyYW5zZm9ybTwvZnVuY3Rpb24+IGNhbGxi YWNrIHRoYXQgc2V0cworICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfaGl0dXA8L2xpdGVyYWw+IHRv IGEgcmVjb25zdHJ1Y3RlZAorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1lPi4g IEJlY2F1c2UgcHJlZmV0Y2hpbmcga2VlcHMgc2V2ZXJhbAorICAgYmF0Y2hlcyBvcGVuIGFuZCBj b25zdW1lcyB0aGVpciBpdGVtcyBhc3luY2hyb25vdXNseSwgdGhlcmUgaXMgbm8gYXV0b21hdGlj CisgICBzaW5nbGUtdHVwbGUgbGlmZXRpbWUgYXMgdGhlcmUgaXMgd2l0aCA8ZnVuY3Rpb24+YW1n ZXR0dXBsZTwvZnVuY3Rpb24+OyB0aGUKKyAgIGFjY2VzcyBtZXRob2QgbWFuYWdlcyB0aGlzIGl0 c2VsZiwgdHlwaWNhbGx5IGJ5IHJlY29uc3RydWN0aW5nIGludG8gYQorICAgc2Nhbi1saWZldGlt ZSBtZW1vcnkgY29udGV4dCBhbmQgZnJlZWluZyB0aGUgcHJldmlvdXNseSByZXR1cm5lZCB0dXBs ZSBlYWNoCisgICB0aW1lIDxmdW5jdGlvbj5hbWdldHRyYW5zZm9ybTwvZnVuY3Rpb24+IGlzIGNh bGxlZCwgc28gdGhhdCBvbmx5IG9uZQorICAgcmVjb25zdHJ1Y3RlZCB0dXBsZSBpcyB2YWxpZCBh dCBhIHRpbWUuICBHaVNUIHVzZXMgdGhpcyBhcHByb2FjaCBmb3IgaXRzCisgICBpbmRleC1vbmx5 IHNjYW5zLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC05MzAsOSArOTcwLDEwIEBAIGFtdW5n dWFyZGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBsZWFmIHBhZ2UsIHdoaWNoIHByZXZl bnRzIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieQogICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21t YW5kPi4KICAgIEZvcm1hbGx5LCBhbiBpbmRleCBBTSBtYXkgaG9sZCBhIGRpZmZlcmVudCBraW5k IG9mIGludGVybG9jaywgb3IgbXVsdGlwbGUKLSAgIGludGVybG9ja3MsIGluIGl0cyBwZXItYmF0 Y2ggb3BhcXVlIGFyZWEsIGJ1dCBpbiBwcmFjdGljZSBib3RoIGJ1aWx0LWluCi0gICBpbmRleCBB TXMgdGhhdCBzdXBwb3J0IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gJm1kYXNoOyBC LXRyZWUgYW5kCi0gICBoYXNoICZtZGFzaDsgaG9sZCBhIHNpbmdsZSBidWZmZXIgcGluLiAgU2Vl IDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4KKyAgIGludGVybG9ja3MsIGluIGl0cyBw ZXItYmF0Y2ggb3BhcXVlIGFyZWEsIGJ1dCBpbiBwcmFjdGljZSB0aGUgYnVpbHQtaW4KKyAgIGlu ZGV4IEFNcyB0aGF0IHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBob2xk IGEgc2luZ2xlIGJ1ZmZlcgorICAgcGluOiBCLXRyZWUsIGhhc2gsIGFuZCBHaVNUIGJhdGNoZXMg ZWFjaCByZXRhaW4gdGhlIHBpbiBvbiB0aGUgYmF0Y2gncyBvbmUKKyAgIGluZGV4IGxlYWYgcGFn ZS4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+CiAgICBmb3IgZGV0YWlscyBv biBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhpcyBmdW5jdGlv bgogICAgd2lsbCBiZSBjYWxsZWQgYXQgbW9zdCBvbmNlIGZvciBlYWNoIGd1YXJkZWQgYmF0Y2g7 IGl0IGlzIG5vdCBjYWxsZWQgd2hlbgogICAgdGhlIGluZGV4IEFNIGhhcyBhbHJlYWR5IHVuZ3Vh cmRlZCB0aGUgYmF0Y2ggaXRzZWxmIChhcyBpdCBkb2VzIHdoZW4KQEAgLTk3NSw4ICsxMDE2LDgg QEAgYW1raWxsaXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbmRleCBBTXMgKHRob3NlIHRoYXQgZG9uJ3QgY2FuIGxlYXZl CiAgICB0aGUgZmllbGQgc2V0IHRvIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+KSwgYnV0IGRvaW5n IHNvIGlzIHJlY29tbWVuZGVkIGZvcgogICAgcGVyZm9ybWFuY2UsIGFzIGl0IGFsbG93cyBmdXR1 cmUgc2NhbnMgdG8gc2tpcCBrbm93bi1kZWFkIGluZGV4IGVudHJpZXMuCi0gICBCb3RoIGNvcmUg aW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBjdXJyZW50bHkgc3VwcG9ydAotICAgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlIGFuZCBoYXNoKSBpbXBsZW1lbnQKKyAgIEFs bCB0aHJlZSBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgY3VycmVudGx5IHN1cHBvcnQK KyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gKEItdHJlZSwgaGFzaCwgYW5kIEdp U1QpIGltcGxlbWVudAogICAgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gbWFya2luZywgdGhv dWdoIHRoaXJkLXBhcnR5IGluZGV4IGFjY2VzcyBtZXRob2RzCiAgICBhcmUgZnJlZSB0byBjaG9v c2Ugd2hldGhlciB0byBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlLiAgVGhlIHRhYmxlIEFNIG1heQog ICAgY2FsbCA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3NjYW5wb3Nfa2lsbGl0ZW08L2Z1bmN0aW9u PiB0byBtYXJrIGRlYWQgaXRlbXMgYXMKQEAgLTEwMTYsNyArMTA1Nyw3IEBAIGFta2lsbGl0ZW1z YmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4g cmVjeWNsaW5nIHRhYmxlIFRJRHMgJm1kYXNoOyBzbyBpdCB3b3VsZCBiZQogICAgdW5zYWZlIHRv IGFzc3VtZSB0aGF0IGluZGV4IGVudHJpZXMgc3RpbGwgcG9pbnQgdG8gdGhlIHNhbWUgaGVhcC90 YWJsZQogICAgdHVwbGVzLiAgU2luY2UgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gbWFya2lu ZyBpcyBvbmx5IGFuIG9wdGltaXphdGlvbgotICAgaGludCwgaXQgaXMgYWx3YXlzIHNhZmUgdG8g c2tpcCBpdC4gIEJvdGggQi10cmVlIGFuZCBoYXNoIHVzZSB0aGlzCisgICBoaW50LCBpdCBpcyBh bHdheXMgc2FmZSB0byBza2lwIGl0LiAgQi10cmVlLCBoYXNoLCBhbmQgR2lTVCB1c2UgdGhpcwog ICAgYXBwcm9hY2guCiAgIDwvcGFyYT4KIApAQCAtMTA1NSw2ICsxMDk2LDQxIEBAIGFta2lsbGl0 ZW1zYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGlu Zz4KK3ZvaWQKK2FtZ2V0dHJhbnNmb3JtIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAg ICAgICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisgICAgICAgICAgICAgICAgaW50IGl0ZW0pOwor PC9wcm9ncmFtbGlzdGluZz4KKyAgIENhbGxlZCBieSB0aGUgdGFibGUgQU0gYXMgaXQgcmV0dXJu cyBlYWNoIG1hdGNoaW5nIGl0ZW0KKyAgICg8cmVwbGFjZWFibGU+aXRlbTwvcmVwbGFjZWFibGU+ IGlzIGFuIGluZGV4IGludG8gdGhlIGJhdGNoJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5pdGVtczwvc3Ry dWN0ZmllbGQ+IGFycmF5KSBvZiBhbiA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+Cisg ICBzY2FuLCB0byBzZXQgdXAgdGhlIHNjYW4ncyBwZXItdHVwbGUgb3V0cHV0IGZyb20gcGVyLWl0 ZW0gc3RhdGUgdGhhdCB0aGUKKyAgIGFjY2VzcyBtZXRob2QgcmVjb3JkZWQgaW4gdGhlIGJhdGNo LiAgVGhpcyBpcyBuZWVkZWQgd2hlbiB0aGF0IG91dHB1dCBjYW5ub3QKKyAgIGJlIGEgZml4ZWQg cHJvcGVydHkgb2YgdGhlIHdob2xlIHNjYW4uICBBbiBhY2Nlc3MgbWV0aG9kIG1heSB1c2UgaXQg dG8gc2V0CisgICA8c3RydWN0ZmllbGQ+eHNfcmVjaGVjazwvc3RydWN0ZmllbGQ+ICh3aGVuIHRo ZSBuZWVkIHRvIHJlY2hlY2sgdGhlIHNjYW4KKyAgIGNvbmRpdGlvbnMgdmFyaWVzIGZyb20gb25l IG1hdGNoaW5nIGl0ZW0gdG8gdGhlIG5leHQpLCB0byBzZXQKKyAgIDxzdHJ1Y3RmaWVsZD54c19v cmRlcmJ5dmFsczwvc3RydWN0ZmllbGQ+IGFuZAorICAgPHN0cnVjdGZpZWxkPnhzX3JlY2hlY2tv cmRlcmJ5PC9zdHJ1Y3RmaWVsZD4gZm9yIGFuIG9yZGVyZWQKKyAgIChuZWFyZXN0LW5laWdoYm9y KSBzY2FuLCBhbmQgdG8gc2V0IDxzdHJ1Y3RmaWVsZD54c19oaXR1cDwvc3RydWN0ZmllbGQ+IGZv cgorICAgYW4gaW5kZXgtb25seSBzY2FuIHdob3NlIHJldHVybmFibGUgdHVwbGUgbXVzdCBiZSBy ZWNvbnN0cnVjdGVkIHJhdGhlciB0aGFuCisgICByZXR1cm5lZCBkaXJlY3RseSBhcyBhIHN0b3Jl ZCBpbmRleCB0dXBsZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSW1wbGVtZW50aW5nIDxm dW5jdGlvbj5hbWdldHRyYW5zZm9ybTwvZnVuY3Rpb24+IGlzIG9wdGlvbmFsLCBhbmQgaXMgb25s eQorICAgbWVhbmluZ2Z1bCB0b2dldGhlciB3aXRoIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4uICBBbiBhY2Nlc3MgbWV0aG9kCisgICBuZWVkIG9ubHkgcHJvdmlkZSBpdCB3aGVuIHNv bWUgcGFydCBvZiBpdHMgcGVyLXR1cGxlIG91dHB1dCB2YXJpZXMgZnJvbSBvbmUKKyAgIG1hdGNo aW5nIGl0ZW0gdG8gdGhlIG5leHQuICBXaGVuIGV2ZXJ5IHN1Y2ggb3V0cHV0IGlzIGluc3RlYWQg YSBmaXhlZAorICAgcHJvcGVydHkgb2YgdGhlIHdob2xlIHNjYW4gJm1kYXNoOyBvciwgZm9yIGlu ZGV4LW9ubHkgc2NhbnMsIGlzIHRoZSBvbi1kaXNrCisgICBpbmRleCB0dXBsZSByZXR1cm5lZCBk aXJlY3RseSB2aWEgPHN0cnVjdGZpZWxkPnhzX2l0dXA8L3N0cnVjdGZpZWxkPiAmbWRhc2g7Cisg ICB0aGUgZmllbGQgY2FuIGJlIGxlZnQgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4sIGFzIEItdHJl ZSBhbmQgaGFzaCBkby4gIEdpU1QKKyAgIHByb3ZpZGVzIG9uZSBiZWNhdXNlIHBhcnRzIG9mIGl0 cyBwZXItdHVwbGUgb3V0cHV0ICh0aGUgcmVjaGVjayBmbGFnLCB0aGUKKyAgIDxsaXRlcmFsPk9S REVSIEJZPC9saXRlcmFsPiBkaXN0YW5jZXMsIGFuZCB0aGUgcmVjb25zdHJ1Y3RlZCBpbmRleC1v bmx5CisgICB0dXBsZXMpIHZhcnkgcGVyIG1hdGNoaW5nIGl0ZW0sIGFzIGRlc2NyaWJlZCBhYm92 ZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgogaW50NjQKIGFtZ2V0 Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICAgICAgICAgICAgVElEQml0bWFwICp0Ym0p OwpAQCAtMTM1Miw4ICsxNDI4LDI4IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUg Y21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJhPgogCiAgIDxw YXJhPgotICAgTm90ZSB0aGF0IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMg ZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0Ci0gICBvcmRlcmluZyBvcGVyYXRvcnMuCisgICBBbiA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGFjY2VzcyBtZXRob2QgY2FuIHN1cHBvcnQg b3JkZXJpbmcKKyAgIG9wZXJhdG9ycyBieSBwcm92aWRpbmcgYW4gPGZ1bmN0aW9uPmFtZ2V0dHJh bnNmb3JtPC9mdW5jdGlvbj4gY2FsbGJhY2s6IGl0CisgICByZWNvcmRzIGVhY2ggbWF0Y2hpbmcg aXRlbSdzIG9yZGVyaW5nIHZhbHVlcyBpbiB0aGUgYmF0Y2gsIGFuZCB0aGUgdGFibGUgQU0KKyAg IGNhbGxzIDxmdW5jdGlvbj5hbWdldHRyYW5zZm9ybTwvZnVuY3Rpb24+IGFzIGl0IHJldHVybnMg ZWFjaCBpdGVtIHRvIHNldAorICAgPHN0cnVjdGZpZWxkPnhzX29yZGVyYnl2YWxzPC9zdHJ1Y3Rm aWVsZD4gYW5kCisgICA8c3RydWN0ZmllbGQ+eHNfcmVjaGVja29yZGVyYnk8L3N0cnVjdGZpZWxk PiBmcm9tIHRoYXQgcmVjb3JkZWQgc3RhdGUuICBHaVNUCisgICB1c2VzIHRoaXMgZm9yIG5lYXJl c3QtbmVpZ2hib3Igc2NhbnMuICBBcyB3aXRoCisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNo ZWNrPC9saXRlcmFsPiwgdGhlc2UgdmFsdWVzIGNhbm5vdCBiZSBzZXQgZGlyZWN0bHkgYXMKKyAg IGl0ZW1zIGFyZSByZXR1cm5lZCwgYmVjYXVzZSBwcmVmZXRjaGluZyBkZWNvdXBsZXMgdGhlIG9y ZGVyIG9mCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbGxzIGZyb20gdGhl IG9yZGVyIGluIHdoaWNoIGl0ZW1zIGFyZQorICAgcmV0dXJuZWQgdG8gdGhlIHNjYW4uCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFNjYW5zIHRoYXQgdXNlIG9yZGVyaW5nIG9wZXJhdG9ycyBh cmUgbmV2ZXIgcGxhbm5lZCBhcyBpbmRleC1vbmx5IHNjYW5zLgorICAgQmVjYXVzZSBhbiBvcmRl cmVkIHNjYW4gY2FuIGNvbGxlY3QgbWF0Y2hpbmcgaXRlbXMgZnJvbSBtYW55IGluZGV4IGxlYWYK KyAgIHBhZ2VzIHdpdGhvdXQgcmV0YWluaW5nIGEgYnVmZmVyIHBpbiBvbiBhbnkgb2YgdGhlbSAo R2lTVCdzCisgICA8cXVvdGU+dmlydHVhbDwvcXVvdGU+IG5lYXJlc3QtbmVpZ2hib3IgYmF0Y2hl cyB3b3JrIHRoaXMgd2F5KSwgaXQgaGFzIG5vCisgICBwaW4gdG8gc2VydmUgYXMgdGhlIGludGVy bG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyB0aGF0IGFuCisgICBpbmRleC1v bmx5IHNjYW4gZGVwZW5kcyBvbiAoc2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4p LiAgVGhlCisgICBwbGFubmVyIHRoZXJlZm9yZSBjb3N0cyBhbmQgZXhlY3V0ZXMgc3VjaCBzY2Fu cyBhcyBwbGFpbiBpbmRleCBzY2Fucywgd2hpY2gKKyAgIGFsd2F5cyBmZXRjaCBhbmQgcmVjaGVj ayB0aGUgaGVhcCB0dXBsZS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jIGIvc3JjL3Rlc3Qv bW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCmluZGV4IDNmNWJlNjA4Mi4u YzY5OTBjYWI1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1 bW15X2luZGV4X2FtLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1t eV9pbmRleF9hbS5jCkBAIC0zMzgsNiArMzM4LDcgQEAgZGloYW5kbGVyKFBHX0ZVTkNUSU9OX0FS R1MpCiAJCS5hbWdldGJhdGNoID0gTlVMTCwKIAkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJ LmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0cmFuc2Zvcm0gPSBOVUxMLAogCQku YW1nZXRiaXRtYXAgPSBOVUxMLAogCQkuYW1lbmRzY2FuID0gZGllbmRzY2FuLAogCQkuYW1wb3Ny ZXNldCA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L2V4cGVjdGVk L2tpbGx0dXBsZXMub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9leHBlY3RlZC9raWxsdHVw bGVzLm91dAppbmRleCBhM2RiMmM0MDkuLjExMGMzZDQ0NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv bW9kdWxlcy9pbmRleC9leHBlY3RlZC9raWxsdHVwbGVzLm91dAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL2luZGV4L2V4cGVjdGVkL2tpbGx0dXBsZXMub3V0CkBAIC0xNTIsNiArMTUyLDgzIEBAIGYK IHN0ZXAgZHJvcF90YWJsZTogRFJPUCBUQUJMRSBJRiBFWElTVFMga2lsbF9wcmlvcl90dXBsZTsK IHN0ZXAgZHJvcF9leHRfYnRyZWVfZ2lzdDogRFJPUCBFWFRFTlNJT04gYnRyZWVfZ2lzdDsKIAor c3RhcnRpbmcgcGVybXV0YXRpb246IGNyZWF0ZV90YWJsZSBmaWxsXzUwMCBjcmVhdGVfZXh0X2J0 cmVlX2dpc3QgY3JlYXRlX2dpc3QgZmx1c2ggZGlzYWJsZV9zZXEgZGlzYWJsZV9iaXRtYXAgbWVh c3VyZSBhY2Nlc3Nfb3JkZXJlZCBmbHVzaCByZXN1bHQgbWVhc3VyZSBhY2Nlc3Nfb3JkZXJlZCBm bHVzaCByZXN1bHQgZGVsZXRlIGZsdXNoIG1lYXN1cmUgYWNjZXNzX29yZGVyZWQgZmx1c2ggcmVz dWx0IG1lYXN1cmUgYWNjZXNzX29yZGVyZWQgZmx1c2ggcmVzdWx0IGRyb3BfdGFibGUgZHJvcF9l eHRfYnRyZWVfZ2lzdAorc3RlcCBjcmVhdGVfdGFibGU6IENSRUFURSBURU1QT1JBUlkgVEFCTEUg a2lsbF9wcmlvcl90dXBsZShrZXkgaW50IG5vdCBudWxsLCBjYXQgdGV4dCBub3QgbnVsbCk7Citz dGVwIGZpbGxfNTAwOiBJTlNFUlQgSU5UTyBraWxsX3ByaW9yX3R1cGxlKGtleSwgY2F0KSBTRUxF Q1QgZy5pLCAnYScgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwKSBnKGkpOworc3RlcCBjcmVh dGVfZXh0X2J0cmVlX2dpc3Q6IENSRUFURSBFWFRFTlNJT04gYnRyZWVfZ2lzdDsKK3N0ZXAgY3Jl YXRlX2dpc3Q6IENSRUFURSBJTkRFWCBraWxsX3ByaW9yX3R1cGxlX2dpc3QgT04ga2lsbF9wcmlv cl90dXBsZSBVU0lORyBnaXN0IChrZXkpOworc3RlcCBmbHVzaDogU0VMRUNUIEZST00gcGdfc3Rh dF9mb3JjZV9uZXh0X2ZsdXNoKCk7CitzdGVwIGRpc2FibGVfc2VxOiBTRVQgZW5hYmxlX3NlcXNj YW4gPSBmYWxzZTsKK3N0ZXAgZGlzYWJsZV9iaXRtYXA6IFNFVCBlbmFibGVfYml0bWFwc2NhbiA9 IGZhbHNlOworc3RlcCBtZWFzdXJlOiBVUERBVEUgY291bnRlciBTRVQgaGVhcF9hY2Nlc3NlcyA9 IChTRUxFQ1QgaGVhcF9ibGtzX3JlYWQgKyBoZWFwX2Jsa3NfaGl0IEZST00gcGdfc3RhdGlvX2Fs bF90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdraWxsX3ByaW9yX3R1cGxlJyk7CitzdGVwIGFjY2Vz c19vcmRlcmVkOiBFWFBMQUlOIChBTkFMWVpFLCBDT1NUUyBPRkYsIFRJTUlORyBPRkYsIFNVTU1B UlkgT0ZGLCBCVUZGRVJTIE9GRikgU0VMRUNUICogRlJPTSBraWxsX3ByaW9yX3R1cGxlIE9SREVS IEJZIGtleSA8LT4gMTsKK1FVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmRleCBTY2FuIHVzaW5nIGtpbGxfcHJpb3JfdHVwbGVf Z2lzdCBvbiBraWxsX3ByaW9yX3R1cGxlIChhY3R1YWwgcm93cz01MDAuMDAgbG9vcHM9MSkKKyAg T3JkZXIgQnk6IChrZXkgPC0+IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBJbmRleCBTZWFyY2hlczogMSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCisoMyByb3dzKQorCitzdGVwIGZsdXNoOiBTRUxFQ1QgRlJPTSBwZ19zdGF0X2ZvcmNlX25l eHRfZmx1c2goKTsKK3N0ZXAgcmVzdWx0OiBTRUxFQ1QgKChoZWFwX2Jsa3NfcmVhZCArIGhlYXBf Ymxrc19oaXQgLSBjb3VudGVyLmhlYXBfYWNjZXNzZXMpID4gMCkgQVMgaGFzX25ld19oZWFwX2Fj Y2Vzc2VzIEZST00gY291bnRlciwgcGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVsbmFtZSA9 ICdraWxsX3ByaW9yX3R1cGxlJzsKK2hhc19uZXdfaGVhcF9hY2Nlc3NlcworLS0tLS0tLS0tLS0t LS0tLS0tLS0tCit0ICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCBtZWFzdXJl OiBVUERBVEUgY291bnRlciBTRVQgaGVhcF9hY2Nlc3NlcyA9IChTRUxFQ1QgaGVhcF9ibGtzX3Jl YWQgKyBoZWFwX2Jsa3NfaGl0IEZST00gcGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVsbmFt ZSA9ICdraWxsX3ByaW9yX3R1cGxlJyk7CitzdGVwIGFjY2Vzc19vcmRlcmVkOiBFWFBMQUlOIChB TkFMWVpFLCBDT1NUUyBPRkYsIFRJTUlORyBPRkYsIFNVTU1BUlkgT0ZGLCBCVUZGRVJTIE9GRikg U0VMRUNUICogRlJPTSBraWxsX3ByaW9yX3R1cGxlIE9SREVSIEJZIGtleSA8LT4gMTsKK1FVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CitJbmRleCBTY2FuIHVzaW5nIGtpbGxfcHJpb3JfdHVwbGVfZ2lzdCBvbiBraWxsX3ByaW9yX3R1 cGxlIChhY3R1YWwgcm93cz01MDAuMDAgbG9vcHM9MSkKKyAgT3JkZXIgQnk6IChrZXkgPC0+IDEp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorICBJbmRleCBTZWFyY2hlczogMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisoMyByb3dzKQorCitzdGVw IGZsdXNoOiBTRUxFQ1QgRlJPTSBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKK3N0ZXAgcmVz dWx0OiBTRUxFQ1QgKChoZWFwX2Jsa3NfcmVhZCArIGhlYXBfYmxrc19oaXQgLSBjb3VudGVyLmhl YXBfYWNjZXNzZXMpID4gMCkgQVMgaGFzX25ld19oZWFwX2FjY2Vzc2VzIEZST00gY291bnRlciwg cGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdraWxsX3ByaW9yX3R1cGxlJzsK K2hhc19uZXdfaGVhcF9hY2Nlc3NlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0ICAgICAgICAg ICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCBkZWxldGU6IERFTEVURSBGUk9NIGtpbGxfcHJp b3JfdHVwbGU7CitzdGVwIGZsdXNoOiBTRUxFQ1QgRlJPTSBwZ19zdGF0X2ZvcmNlX25leHRfZmx1 c2goKTsKK3N0ZXAgbWVhc3VyZTogVVBEQVRFIGNvdW50ZXIgU0VUIGhlYXBfYWNjZXNzZXMgPSAo U0VMRUNUIGhlYXBfYmxrc19yZWFkICsgaGVhcF9ibGtzX2hpdCBGUk9NIHBnX3N0YXRpb19hbGxf dGFibGVzIFdIRVJFIHJlbG5hbWUgPSAna2lsbF9wcmlvcl90dXBsZScpOworc3RlcCBhY2Nlc3Nf b3JkZXJlZDogRVhQTEFJTiAoQU5BTFlaRSwgQ09TVFMgT0ZGLCBUSU1JTkcgT0ZGLCBTVU1NQVJZ IE9GRiwgQlVGRkVSUyBPRkYpIFNFTEVDVCAqIEZST00ga2lsbF9wcmlvcl90dXBsZSBPUkRFUiBC WSBrZXkgPC0+IDE7CitRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCitJbmRleCBTY2FuIHVzaW5nIGtpbGxfcHJpb3JfdHVwbGVfZ2lzdCBv biBraWxsX3ByaW9yX3R1cGxlIChhY3R1YWwgcm93cz0wLjAwIGxvb3BzPTEpCisgIE9yZGVyIEJ5 OiAoa2V5IDwtPiAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCisgIEluZGV4IFNlYXJjaGVzOiAxICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisoMyByb3dz KQorCitzdGVwIGZsdXNoOiBTRUxFQ1QgRlJPTSBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsK K3N0ZXAgcmVzdWx0OiBTRUxFQ1QgKChoZWFwX2Jsa3NfcmVhZCArIGhlYXBfYmxrc19oaXQgLSBj b3VudGVyLmhlYXBfYWNjZXNzZXMpID4gMCkgQVMgaGFzX25ld19oZWFwX2FjY2Vzc2VzIEZST00g Y291bnRlciwgcGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdraWxsX3ByaW9y X3R1cGxlJzsKK2hhc19uZXdfaGVhcF9hY2Nlc3NlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0 ICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCBtZWFzdXJlOiBVUERBVEUgY291 bnRlciBTRVQgaGVhcF9hY2Nlc3NlcyA9IChTRUxFQ1QgaGVhcF9ibGtzX3JlYWQgKyBoZWFwX2Js a3NfaGl0IEZST00gcGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdraWxsX3By aW9yX3R1cGxlJyk7CitzdGVwIGFjY2Vzc19vcmRlcmVkOiBFWFBMQUlOIChBTkFMWVpFLCBDT1NU UyBPRkYsIFRJTUlORyBPRkYsIFNVTU1BUlkgT0ZGLCBCVUZGRVJTIE9GRikgU0VMRUNUICogRlJP TSBraWxsX3ByaW9yX3R1cGxlIE9SREVSIEJZIGtleSA8LT4gMTsKK1FVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZGV4IFNjYW4gdXNp bmcga2lsbF9wcmlvcl90dXBsZV9naXN0IG9uIGtpbGxfcHJpb3JfdHVwbGUgKGFjdHVhbCByb3dz PTAuMDAgbG9vcHM9MSkKKyAgT3JkZXIgQnk6IChrZXkgPC0+IDEpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgSW5kZXggU2Vh cmNoZXM6IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKygzIHJvd3MpCisKK3N0ZXAgZmx1c2g6IFNFTEVDVCBGUk9NIHBn X3N0YXRfZm9yY2VfbmV4dF9mbHVzaCgpOworc3RlcCByZXN1bHQ6IFNFTEVDVCAoKGhlYXBfYmxr c19yZWFkICsgaGVhcF9ibGtzX2hpdCAtIGNvdW50ZXIuaGVhcF9hY2Nlc3NlcykgPiAwKSBBUyBo YXNfbmV3X2hlYXBfYWNjZXNzZXMgRlJPTSBjb3VudGVyLCBwZ19zdGF0aW9fYWxsX3RhYmxlcyBX SEVSRSByZWxuYW1lID0gJ2tpbGxfcHJpb3JfdHVwbGUnOworaGFzX25ld19oZWFwX2FjY2Vzc2Vz CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3QgICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQor CitzdGVwIGRyb3BfdGFibGU6IERST1AgVEFCTEUgSUYgRVhJU1RTIGtpbGxfcHJpb3JfdHVwbGU7 CitzdGVwIGRyb3BfZXh0X2J0cmVlX2dpc3Q6IERST1AgRVhURU5TSU9OIGJ0cmVlX2dpc3Q7CisK IHN0YXJ0aW5nIHBlcm11dGF0aW9uOiBjcmVhdGVfdGFibGUgZmlsbF8xMCBjcmVhdGVfZXh0X2J0 cmVlX2dpc3QgY3JlYXRlX2dpc3QgZmx1c2ggZGlzYWJsZV9zZXEgZGlzYWJsZV9iaXRtYXAgbWVh c3VyZSBhY2Nlc3MgZmx1c2ggcmVzdWx0IG1lYXN1cmUgYWNjZXNzIGZsdXNoIHJlc3VsdCBkZWxl dGUgZmx1c2ggbWVhc3VyZSBhY2Nlc3MgZmx1c2ggcmVzdWx0IG1lYXN1cmUgYWNjZXNzIGZsdXNo IHJlc3VsdCBkcm9wX3RhYmxlIGRyb3BfZXh0X2J0cmVlX2dpc3QKIHN0ZXAgY3JlYXRlX3RhYmxl OiBDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIGtpbGxfcHJpb3JfdHVwbGUoa2V5IGludCBub3QgbnVs bCwgY2F0IHRleHQgbm90IG51bGwpOwogc3RlcCBmaWxsXzEwOiBJTlNFUlQgSU5UTyBraWxsX3By aW9yX3R1cGxlKGtleSwgY2F0KSBTRUxFQ1QgZy5pLCAnYScgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwgMTApIGcoaSk7CkBAIC0yMjMsNyArMzAwLDcgQEAgc3RlcCBmbHVzaDogU0VMRUNUIEZST00g cGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CiBzdGVwIHJlc3VsdDogU0VMRUNUICgoaGVhcF9i bGtzX3JlYWQgKyBoZWFwX2Jsa3NfaGl0IC0gY291bnRlci5oZWFwX2FjY2Vzc2VzKSA+IDApIEFT IGhhc19uZXdfaGVhcF9hY2Nlc3NlcyBGUk9NIGNvdW50ZXIsIHBnX3N0YXRpb19hbGxfdGFibGVz IFdIRVJFIHJlbG5hbWUgPSAna2lsbF9wcmlvcl90dXBsZSc7CiBoYXNfbmV3X2hlYXBfYWNjZXNz ZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdCAgICAgICAgICAgICAgICAgICAgCitmICAgICAg ICAgICAgICAgICAgICAKICgxIHJvdykKIAogc3RlcCBkcm9wX3RhYmxlOiBEUk9QIFRBQkxFIElG IEVYSVNUUyBraWxsX3ByaW9yX3R1cGxlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9p bmRleC9zcGVjcy9raWxsdHVwbGVzLnNwZWMgYi9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L3NwZWNz L2tpbGx0dXBsZXMuc3BlYwppbmRleCAzYjk4ZmY5ZjcuLmY1ZDJmZDc3MyAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9zcGVjcy9raWxsdHVwbGVzLnNwZWMKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy9pbmRleC9zcGVjcy9raWxsdHVwbGVzLnNwZWMKQEAgLTQ3LDYgKzQ3LDkgQEAg c3RlcCByZXN1bHQgeyBTRUxFQ1QgKChoZWFwX2Jsa3NfcmVhZCArIGhlYXBfYmxrc19oaXQgLSBj b3VudGVyLmhlYXBfYWNjZXNzZXMpID4KIAogc3RlcCBhY2Nlc3MgeyBFWFBMQUlOIChBTkFMWVpF LCBDT1NUUyBPRkYsIFRJTUlORyBPRkYsIFNVTU1BUlkgT0ZGLCBCVUZGRVJTIE9GRikgU0VMRUNU ICogRlJPTSBraWxsX3ByaW9yX3R1cGxlIFdIRVJFIGtleSA9IDE7IH0KIAorIyBuZWFyZXN0LW5l aWdoYm9yIChvcmRlci1ieSBvcGVyYXRvcikgc2NhbiAoY2Fubm90IHNldCBMUF9ERUFEIGJpdHMp CitzdGVwIGFjY2Vzc19vcmRlcmVkIHsgRVhQTEFJTiAoQU5BTFlaRSwgQ09TVFMgT0ZGLCBUSU1J TkcgT0ZGLCBTVU1NQVJZIE9GRiwgQlVGRkVSUyBPRkYpIFNFTEVDVCAqIEZST00ga2lsbF9wcmlv cl90dXBsZSBPUkRFUiBCWSBrZXkgPC0+IDE7IH0KKwogc3RlcCBkZWxldGUgeyBERUxFVEUgRlJP TSBraWxsX3ByaW9yX3R1cGxlOyB9CiAKIHN0ZXAgZHJvcF90YWJsZSB7IERST1AgVEFCTEUgSUYg RVhJU1RTIGtpbGxfcHJpb3JfdHVwbGU7IH0KQEAgLTk2LDcgKzk5LDIwIEBAIHBlcm11dGF0aW9u CiAgIG1lYXN1cmUgYWNjZXNzIGZsdXNoIHJlc3VsdAogICBkcm9wX3RhYmxlIGRyb3BfZXh0X2J0 cmVlX2dpc3QKIAotIyBUZXN0IGdpc3QsIGJ1dCB3aXRoIGZld2VyIHJvd3MgLSBzaG93cyB0aGF0 IGtpbGxpdGVtcyBkb2Vzbid0IHdvcmsgYW55bW9yZSEKKyMgR2lTVCBkb2Vzbid0IHNldCBMUF9E RUFEIGJpdHMgZm9yIG9yZGVyZWQgc2NhbnMsIHNvIGV2ZXJ5IGFjY2VzcyByZS12aXNpdHMKKyMg dGhlIGhlYXAKK3Blcm11dGF0aW9uCisgIGNyZWF0ZV90YWJsZSBmaWxsXzUwMCBjcmVhdGVfZXh0 X2J0cmVlX2dpc3QgY3JlYXRlX2dpc3QgZmx1c2gKKyAgZGlzYWJsZV9zZXEgZGlzYWJsZV9iaXRt YXAKKyAgbWVhc3VyZSBhY2Nlc3Nfb3JkZXJlZCBmbHVzaCByZXN1bHQKKyAgbWVhc3VyZSBhY2Nl c3Nfb3JkZXJlZCBmbHVzaCByZXN1bHQKKyAgZGVsZXRlIGZsdXNoCisgIG1lYXN1cmUgYWNjZXNz X29yZGVyZWQgZmx1c2ggcmVzdWx0CisgIG1lYXN1cmUgYWNjZXNzX29yZGVyZWQgZmx1c2ggcmVz dWx0CisgIGRyb3BfdGFibGUgZHJvcF9leHRfYnRyZWVfZ2lzdAorCisjIFRlc3QgZ2lzdCB3aXRo IGZld2VyIHJvd3MsIGV4ZXJjaXNpbmcgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBkZWFkIHR1cGxl cyBhcmUKKyMgb24gYSBzaW5nbGUgcGFnZQogcGVybXV0YXRpb24KICAgY3JlYXRlX3RhYmxlIGZp bGxfMTAgY3JlYXRlX2V4dF9idHJlZV9naXN0IGNyZWF0ZV9naXN0IGZsdXNoCiAgIGRpc2FibGVf c2VxIGRpc2FibGVfYml0bWFwCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2NyZWF0ZV9pbmRleC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRl eC5vdXQKaW5kZXggNTU1MzhjNGM0Li45NzBiODU3YzYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKQEAgLTQ3NSw5ICs0NzUsOSBAQCBTRUxFQ1QgY291bnQo KikgRlJPTSBwb2ludF90YmwgcCBXSEVSRSBwLmYxIH49ICcoLTUsIC0xMiknOwogCiBFWFBMQUlO IChDT1NUUyBPRkYpCiBTRUxFQ1QgKiBGUk9NIHBvaW50X3RibCBPUkRFUiBCWSBmMSA8LT4gJzAs MSc7Ci0gICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5kZXggT25seSBT Y2FuIHVzaW5nIGdwb2ludGluZCBvbiBwb2ludF90YmwKKyAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEluZGV4IFNjYW4gdXNpbmcgZ3BvaW50aW5kIG9uIHBvaW50X3RibAogICAgT3JkZXIg Qnk6IChmMSA8LT4gJygwLDEpJzo6cG9pbnQpCiAoMiByb3dzKQogCkBAIC01MTMsOSArNTEzLDkg QEAgU0VMRUNUICogRlJPTSBwb2ludF90YmwgV0hFUkUgZjEgSVMgTlVMTDsKIAogRVhQTEFJTiAo Q09TVFMgT0ZGKQogU0VMRUNUICogRlJPTSBwb2ludF90YmwgV0hFUkUgZjEgSVMgTk9UIE5VTEwg T1JERVIgQlkgZjEgPC0+ICcwLDEnOwotICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotIEluZGV4IE9ubHkgU2NhbiB1c2luZyBncG9pbnRpbmQgb24gcG9pbnRfdGJsCisgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIGdwb2ludGluZCBvbiBw b2ludF90YmwKICAgIEluZGV4IENvbmQ6IChmMSBJUyBOT1QgTlVMTCkKICAgIE9yZGVyIEJ5OiAo ZjEgPC0+ICcoMCwxKSc6OnBvaW50KQogKDMgcm93cykKQEAgLTUzOSw3ICs1MzksNyBAQCBFWFBM QUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgKiBGUk9NIHBvaW50X3RibCBXSEVSRSBmMSA8QCAnKC0x MCwtMTApLCgxMCwxMCknOjogYm94IE9SREVSIEJZIGYxIDwtPiAnMCwxJzsKICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5kZXggT25seSBTY2FuIHVzaW5nIGdw b2ludGluZCBvbiBwb2ludF90YmwKKyBJbmRleCBTY2FuIHVzaW5nIGdwb2ludGluZCBvbiBwb2lu dF90YmwKICAgIEluZGV4IENvbmQ6IChmMSA8QCAnKDEwLDEwKSwoLTEwLC0xMCknOjpib3gpCiAg ICBPcmRlciBCeTogKGYxIDwtPiAnKDAsMSknOjpwb2ludCkKICgzIHJvd3MpCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleF9zcGdpc3Qub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXhfc3BnaXN0Lm91dAppbmRleCBjNmJl YjBlZmEuLmRkZmZjYTJlNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9j cmVhdGVfaW5kZXhfc3BnaXN0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Ny ZWF0ZV9pbmRleF9zcGdpc3Qub3V0CkBAIC0zMzMsNyArMzMzLDcgQEAgRlJPTSBxdWFkX3BvaW50 X3RibDsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBXaW5kb3dBZ2cKICAgIFdpbmRvdzogdzEgQVMg KE9SREVSIEJZIChwIDwtPiAnKDAsMCknOjpwb2ludCkgUk9XUyBVTkJPVU5ERUQgUFJFQ0VESU5H KQotICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzcF9xdWFkX2luZCBvbiBxdWFkX3BvaW50 X3RibAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc3BfcXVhZF9pbmQgb24gcXVhZF9wb2ludF90 YmwKICAgICAgICAgIE9yZGVyIEJ5OiAocCA8LT4gJygwLDApJzo6cG9pbnQpCiAoNCByb3dzKQog CkBAIC0zNTQsNyArMzU0LDcgQEAgRlJPTSBxdWFkX3BvaW50X3RibCBXSEVSRSBwIDxAIGJveCAn KDIwMCwyMDAsMTAwMCwxMDAwKSc7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgV2luZG93QWdnCiAg ICBXaW5kb3c6IHcxIEFTIChPUkRFUiBCWSAocCA8LT4gJygwLDApJzo6cG9pbnQpIFJPV1MgVU5C T1VOREVEIFBSRUNFRElORykKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc3BfcXVhZF9p bmQgb24gcXVhZF9wb2ludF90YmwKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNwX3F1YWRfaW5k IG9uIHF1YWRfcG9pbnRfdGJsCiAgICAgICAgICBJbmRleCBDb25kOiAocCA8QCAnKDEwMDAsMTAw MCksKDIwMCwyMDApJzo6Ym94KQogICAgICAgICAgT3JkZXIgQnk6IChwIDwtPiAnKDAsMCknOjpw b2ludCkKICg1IHJvd3MpCkBAIC0zNzYsNyArMzc2LDcgQEAgRlJPTSBxdWFkX3BvaW50X3RibCBX SEVSRSBwIElTIE5PVCBOVUxMOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBXaW5kb3dBZ2cK ICAgIFdpbmRvdzogdzEgQVMgKE9SREVSIEJZIChwIDwtPiAnKDMzMyw0MDApJzo6cG9pbnQpIFJP V1MgVU5CT1VOREVEIFBSRUNFRElORykKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc3Bf cXVhZF9pbmQgb24gcXVhZF9wb2ludF90YmwKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNwX3F1 YWRfaW5kIG9uIHF1YWRfcG9pbnRfdGJsCiAgICAgICAgICBJbmRleCBDb25kOiAocCBJUyBOT1Qg TlVMTCkKICAgICAgICAgIE9yZGVyIEJ5OiAocCA8LT4gJygzMzMsNDAwKSc6OnBvaW50KQogKDUg cm93cykKQEAgLTUwMyw3ICs1MDMsNyBAQCBGUk9NIGtkX3BvaW50X3RibDsKIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICBXaW5kb3dBZ2cKICAgIFdpbmRvdzogdzEgQVMgKE9SREVSIEJZIChwIDwtPiAn KDAsMCknOjpwb2ludCkgUk9XUyBVTkJPVU5ERUQgUFJFQ0VESU5HKQotICAgLT4gIEluZGV4IE9u bHkgU2NhbiB1c2luZyBzcF9rZF9pbmQgb24ga2RfcG9pbnRfdGJsCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBzcF9rZF9pbmQgb24ga2RfcG9pbnRfdGJsCiAgICAgICAgICBPcmRlciBCeTogKHAg PC0+ICcoMCwwKSc6OnBvaW50KQogKDQgcm93cykKIApAQCAtNTI0LDcgKzUyNCw3IEBAIEZST00g a2RfcG9pbnRfdGJsIFdIRVJFIHAgPEAgYm94ICcoMjAwLDIwMCwxMDAwLDEwMDApJzsKIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICBXaW5kb3dBZ2cKICAgIFdpbmRvdzogdzEgQVMgKE9SREVSIEJZIChw IDwtPiAnKDAsMCknOjpwb2ludCkgUk9XUyBVTkJPVU5ERUQgUFJFQ0VESU5HKQotICAgLT4gIElu ZGV4IE9ubHkgU2NhbiB1c2luZyBzcF9rZF9pbmQgb24ga2RfcG9pbnRfdGJsCisgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBzcF9rZF9pbmQgb24ga2RfcG9pbnRfdGJsCiAgICAgICAgICBJbmRleCBD b25kOiAocCA8QCAnKDEwMDAsMTAwMCksKDIwMCwyMDApJzo6Ym94KQogICAgICAgICAgT3JkZXIg Qnk6IChwIDwtPiAnKDAsMCknOjpwb2ludCkKICg1IHJvd3MpCkBAIC01NDYsNyArNTQ2LDcgQEAg RlJPTSBrZF9wb2ludF90YmwgV0hFUkUgcCBJUyBOT1QgTlVMTDsKIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgV2luZG93QWdnCiAgICBXaW5kb3c6IHcxIEFTIChPUkRFUiBCWSAocCA8LT4gJygz MzMsNDAwKSc6OnBvaW50KSBST1dTIFVOQk9VTkRFRCBQUkVDRURJTkcpCi0gICAtPiAgSW5kZXgg T25seSBTY2FuIHVzaW5nIHNwX2tkX2luZCBvbiBrZF9wb2ludF90YmwKKyAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIHNwX2tkX2luZCBvbiBrZF9wb2ludF90YmwKICAgICAgICAgIEluZGV4IENvbmQ6 IChwIElTIE5PVCBOVUxMKQogICAgICAgICAgT3JkZXIgQnk6IChwIDwtPiAnKDMzMyw0MDApJzo6 cG9pbnQpCiAoNSByb3dzKQpAQCAtNTY3LDEwICs1NjcsMTAgQEAgU0VUIGV4dHJhX2Zsb2F0X2Rp Z2l0cyA9IDA7CiBDUkVBVEUgSU5ERVggT04gcXVhZF9wb2ludF90Ymxfb3JkX3NlcTEgVVNJTkcg c3BnaXN0KHApIElOQ0xVREUoZGlzdCk7CiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgcCwg ZGlzdCBGUk9NIHF1YWRfcG9pbnRfdGJsX29yZF9zZXExIE9SREVSIEJZIHAgPC0+ICcwLDAnIExJ TUlUIDEwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAgIC0+ICBJbmRleCBPbmx5IFNj YW4gdXNpbmcgcXVhZF9wb2ludF90Ymxfb3JkX3NlcTFfcF9kaXN0X2lkeCBvbiBxdWFkX3BvaW50 X3RibF9vcmRfc2VxMQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcXVhZF9wb2ludF90Ymxfb3Jk X3NlcTFfcF9kaXN0X2lkeCBvbiBxdWFkX3BvaW50X3RibF9vcmRfc2VxMQogICAgICAgICAgT3Jk ZXIgQnk6IChwIDwtPiAnKDAsMCknOjpwb2ludCkKICgzIHJvd3MpCiAKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2lzdC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2dpc3Qub3V0CmluZGV4IGM3NWJiYjIzYi4uODEwZGI4YjhmIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dpc3Qub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvZ2lzdC5vdXQKQEAgLTc0LDEzICs3NCwxMyBAQCBzZWxlY3QgcCBmcm9tIGdpc3RfdGJs IHdoZXJlIHAgPEAgYm94KHBvaW50KDAsMCksIHBvaW50KDAuNSwgMC41KSk7CiAgKDAuNSwwLjUp CiAoMTEgcm93cykKIAotLS0gQWxzbyB0ZXN0IGFuIGluZGV4LW9ubHkga25uLXNlYXJjaAorLS0g QWxzbyB0ZXN0IGEga25uLXNlYXJjaAogZXhwbGFpbiAoY29zdHMgb2ZmKQogc2VsZWN0IHAgZnJv bSBnaXN0X3RibCB3aGVyZSBwIDxAIGJveChwb2ludCgwLDApLCBwb2ludCgwLjUsIDAuNSkpCiBv cmRlciBieSBwIDwtPiBwb2ludCgwLjIwMSwgMC4yMDEpOwotICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5kZXggT25seSBTY2FuIHVz aW5nIGdpc3RfdGJsX3BvaW50X2luZGV4IG9uIGdpc3RfdGJsCisgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgZ2lzdF90Ymxf cG9pbnRfaW5kZXggb24gZ2lzdF90YmwKICAgIEluZGV4IENvbmQ6IChwIDxAICcoMC41LDAuNSks KDAsMCknOjpib3gpCiAgICBPcmRlciBCeTogKHAgPC0+ICcoMC4yMDEsMC4yMDEpJzo6cG9pbnQp CiAoMyByb3dzKQpAQCAtMTA2LDkgKzEwNiw5IEBAIG9yZGVyIGJ5IHAgPC0+IHBvaW50KDAuMjAx LCAwLjIwMSk7CiBleHBsYWluIChjb3N0cyBvZmYpCiBzZWxlY3QgcCBmcm9tIGdpc3RfdGJsIHdo ZXJlIHAgPEAgYm94KHBvaW50KDAsMCksIHBvaW50KDAuNSwgMC41KSkKIG9yZGVyIGJ5IHBvaW50 KDAuMTAxLCAwLjEwMSkgPC0+IHA7Ci0gICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZ2lzdF90Ymxf cG9pbnRfaW5kZXggb24gZ2lzdF90YmwKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBnaXN0X3RibF9wb2ludF9pbmRleCBv biBnaXN0X3RibAogICAgSW5kZXggQ29uZDogKHAgPEAgJygwLjUsMC41KSwoMCwwKSc6OmJveCkK ICAgIE9yZGVyIEJ5OiAocCA8LT4gJygwLjEwMSwwLjEwMSknOjpwb2ludCkKICgzIHJvd3MpCkBA IC0xMzgsMTIgKzEzOCwxMiBAQCBzZWxlY3QgcCBmcm9tCiAgICAgICAgICAgKGJveChwb2ludCgw LjgsMC44KSwgcG9pbnQoMS4wLDEuMCkpKSkgYXMgdihiYikKIGNyb3NzIGpvaW4gbGF0ZXJhbAog ICAoc2VsZWN0IHAgZnJvbSBnaXN0X3RibCB3aGVyZSBwIDxAIGJiIG9yZGVyIGJ5IHAgPC0+IGJi WzBdIGxpbWl0IDIpIHNzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogIE5lc3RlZCBMb29wCiAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgogICAgLT4g IExpbWl0Ci0gICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGdpc3RfdGJsX3BvaW50 X2luZGV4IG9uIGdpc3RfdGJsCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBnaXN0X3Ri bF9wb2ludF9pbmRleCBvbiBnaXN0X3RibAogICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHAg PEAgIipWQUxVRVMqIi5jb2x1bW4xKQogICAgICAgICAgICAgICAgT3JkZXIgQnk6IChwIDwtPiAo IipWQUxVRVMqIi5jb2x1bW4xKVswXSkKICg2IHJvd3MpCkBAIC0yMDMsMTMgKzIwMywxMyBAQCBz ZWxlY3QgYiBmcm9tIGdpc3RfdGJsIHdoZXJlIGIgPEAgYm94KHBvaW50KDUsNSksIHBvaW50KDYs NikpOwogICg2LDYpLCg2LDYpCiAoMjEgcm93cykKIAotLS0gQWxzbyB0ZXN0IGFuIGluZGV4LW9u bHkga25uLXNlYXJjaAorLS0gQWxzbyB0ZXN0IGEga25uLXNlYXJjaAogZXhwbGFpbiAoY29zdHMg b2ZmKQogc2VsZWN0IGIgZnJvbSBnaXN0X3RibCB3aGVyZSBiIDxAIGJveChwb2ludCg1LDUpLCBw b2ludCg2LDYpKQogb3JkZXIgYnkgYiA8LT4gcG9pbnQoNS4yLCA1LjkxKTsKLSAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5kZXggT25seSBT Y2FuIHVzaW5nIGdpc3RfdGJsX2JveF9pbmRleCBvbiBnaXN0X3RibAorICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgZ2lzdF90Ymxf Ym94X2luZGV4IG9uIGdpc3RfdGJsCiAgICBJbmRleCBDb25kOiAoYiA8QCAnKDYsNiksKDUsNSkn Ojpib3gpCiAgICBPcmRlciBCeTogKGIgPC0+ICcoNS4yLDUuOTEpJzo6cG9pbnQpCiAoMyByb3dz KQpAQCAtMjQ1LDkgKzI0NSw5IEBAIG9yZGVyIGJ5IGIgPC0+IHBvaW50KDUuMiwgNS45MSk7CiBl eHBsYWluIChjb3N0cyBvZmYpCiBzZWxlY3QgYiBmcm9tIGdpc3RfdGJsIHdoZXJlIGIgPEAgYm94 KHBvaW50KDUsNSksIHBvaW50KDYsNikpCiBvcmRlciBieSBwb2ludCg1LjIsIDUuOTEpIDwtPiBi OwotICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZ2lzdF90YmxfYm94X2luZGV4IG9uIGdpc3RfdGJsCisg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1 c2luZyBnaXN0X3RibF9ib3hfaW5kZXggb24gZ2lzdF90YmwKICAgIEluZGV4IENvbmQ6IChiIDxA ICcoNiw2KSwoNSw1KSc6OmJveCkKICAgIE9yZGVyIEJ5OiAoYiA8LT4gJyg1LjIsNS45MSknOjpw b2ludCkKICgzIHJvd3MpCkBAIC0zNzMsMjAgKzM3MywyNiBAQCBzZWxlY3QgY291bnQoKikgZnJv bSBnaXN0X3RibDsKICAxMDAwMQogKDEgcm93KQogCi0tLSBUaGlzIGNhc2UgaXNuJ3Qgc3VwcG9y dGVkLCBidXQgaXQgc2hvdWxkIGF0IGxlYXN0IEVYUExBSU4gY29ycmVjdGx5LgorLS0gQW4gb3Jk ZXJpbmctb3BlcmF0b3IgKG5lYXJlc3QtbmVpZ2hib3IpIHNjYW4gaXMgbmV2ZXIgcGxhbm5lZCBh cyBhbgorLS0gaW5kZXgtb25seSBzY2FuLCBzbyB0aGlzIGxvc3N5LWRpc3RhbmNlIGNhc2UgcnVu cyBhcyBhIHBsYWluIGluZGV4IHNjYW4gdGhhdAorLS0gcmVjaGVja3MgdGhlIGRpc3RhbmNlcyBh Z2FpbnN0IHRoZSBoZWFwIHR1cGxlLgogZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQogc2Vs ZWN0IHAgZnJvbSBnaXN0X3RibCBvcmRlciBieSBjaXJjbGUocCwxKSA8LT4gcG9pbnQoMCwwKSBs aW1pdCAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICBMaW1pdAogICAgT3V0cHV0OiBwLCAoKGNpcmNsZShwLCAnMSc6OmRvdWJsZSBwcmVj aXNpb24pIDwtPiAnKDAsMCknOjpwb2ludCkpCi0gICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5n IGdpc3RfdGJsX211bHRpX2luZGV4IG9uIHB1YmxpYy5naXN0X3RibAorICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgZ2lzdF90YmxfbXVsdGlfaW5kZXggb24gcHVibGljLmdpc3RfdGJsCiAgICAgICAg ICBPdXRwdXQ6IHAsIChjaXJjbGUocCwgJzEnOjpkb3VibGUgcHJlY2lzaW9uKSA8LT4gJygwLDAp Jzo6cG9pbnQpCi0gICAgICAgICBPcmRlciBCeTogKChjaXJjbGUoZ2lzdF90YmwucCwgJzEnOjpk b3VibGUgcHJlY2lzaW9uKSkgPC0+ICcoMCwwKSc6OnBvaW50KQorICAgICAgICAgT3JkZXIgQnk6 IChjaXJjbGUoZ2lzdF90YmwucCwgJzEnOjpkb3VibGUgcHJlY2lzaW9uKSA8LT4gJygwLDApJzo6 cG9pbnQpCiAoNSByb3dzKQogCiBzZWxlY3QgcCBmcm9tIGdpc3RfdGJsIG9yZGVyIGJ5IGNpcmNs ZShwLDEpIDwtPiBwb2ludCgwLDApIGxpbWl0IDE7Ci1FUlJPUjogIGxvc3N5IGRpc3RhbmNlIGZ1 bmN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleC1vbmx5IHNjYW5zCisgICBwICAgCist LS0tLS0tCisgKDAsMCkKKygxIHJvdykKKwogLS0gRm9yY2UgYW4gaW5kZXggYnVpbGQgdXNpbmcg YnVmZmVyaW5nLgogY3JlYXRlIGluZGV4IGdpc3RfdGJsX2JveF9pbmRleF9mb3JjaW5nX2J1ZmZl cmluZyBvbiBnaXN0X3RibCB1c2luZyBnaXN0IChwKQogICB3aXRoIChidWZmZXJpbmc9b24sIGZp bGxmYWN0b3I9NTApOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2lzdC5zcWwg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9naXN0LnNxbAppbmRleCA2ZjFmYzY1ZjEuLjM2OWViNDU3 NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2lzdC5zcWwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvZ2lzdC5zcWwKQEAgLTY1LDcgKzY1LDcgQEAgc2VsZWN0IHAgZnJvbSBn aXN0X3RibCB3aGVyZSBwIDxAIGJveChwb2ludCgwLDApLCBwb2ludCgwLjUsIDAuNSkpOwogLS0g ZXhlY3V0ZSB0aGUgc2FtZQogc2VsZWN0IHAgZnJvbSBnaXN0X3RibCB3aGVyZSBwIDxAIGJveChw b2ludCgwLDApLCBwb2ludCgwLjUsIDAuNSkpOwogCi0tLSBBbHNvIHRlc3QgYW4gaW5kZXgtb25s eSBrbm4tc2VhcmNoCistLSBBbHNvIHRlc3QgYSBrbm4tc2VhcmNoCiBleHBsYWluIChjb3N0cyBv ZmYpCiBzZWxlY3QgcCBmcm9tIGdpc3RfdGJsIHdoZXJlIHAgPEAgYm94KHBvaW50KDAsMCksIHBv aW50KDAuNSwgMC41KSkKIG9yZGVyIGJ5IHAgPC0+IHBvaW50KDAuMjAxLCAwLjIwMSk7CkBAIC0x MDksNyArMTA5LDcgQEAgc2VsZWN0IGIgZnJvbSBnaXN0X3RibCB3aGVyZSBiIDxAIGJveChwb2lu dCg1LDUpLCBwb2ludCg2LDYpKTsKIC0tIGV4ZWN1dGUgdGhlIHNhbWUKIHNlbGVjdCBiIGZyb20g Z2lzdF90Ymwgd2hlcmUgYiA8QCBib3gocG9pbnQoNSw1KSwgcG9pbnQoNiw2KSk7CiAKLS0tIEFs c28gdGVzdCBhbiBpbmRleC1vbmx5IGtubi1zZWFyY2gKKy0tIEFsc28gdGVzdCBhIGtubi1zZWFy Y2gKIGV4cGxhaW4gKGNvc3RzIG9mZikKIHNlbGVjdCBiIGZyb20gZ2lzdF90Ymwgd2hlcmUgYiA8 QCBib3gocG9pbnQoNSw1KSwgcG9pbnQoNiw2KSkKIG9yZGVyIGJ5IGIgPC0+IHBvaW50KDUuMiwg NS45MSk7CkBAIC0xNjQsNyArMTY0LDkgQEAgZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQog c2VsZWN0IGNvdW50KCopIGZyb20gZ2lzdF90Ymw7CiBzZWxlY3QgY291bnQoKikgZnJvbSBnaXN0 X3RibDsKIAotLS0gVGhpcyBjYXNlIGlzbid0IHN1cHBvcnRlZCwgYnV0IGl0IHNob3VsZCBhdCBs ZWFzdCBFWFBMQUlOIGNvcnJlY3RseS4KKy0tIEFuIG9yZGVyaW5nLW9wZXJhdG9yIChuZWFyZXN0 LW5laWdoYm9yKSBzY2FuIGlzIG5ldmVyIHBsYW5uZWQgYXMgYW4KKy0tIGluZGV4LW9ubHkgc2Nh biwgc28gdGhpcyBsb3NzeS1kaXN0YW5jZSBjYXNlIHJ1bnMgYXMgYSBwbGFpbiBpbmRleCBzY2Fu IHRoYXQKKy0tIHJlY2hlY2tzIHRoZSBkaXN0YW5jZXMgYWdhaW5zdCB0aGUgaGVhcCB0dXBsZS4K IGV4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKIHNlbGVjdCBwIGZyb20gZ2lzdF90Ymwgb3Jk ZXIgYnkgY2lyY2xlKHAsMSkgPC0+IHBvaW50KDAsMCkgbGltaXQgMTsKIHNlbGVjdCBwIGZyb20g Z2lzdF90Ymwgb3JkZXIgYnkgY2lyY2xlKHAsMSkgPC0+IHBvaW50KDAsMCkgbGltaXQgMTsKZGlm ZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMjY3YWMxNDYyLi5lNDIwOTU2ODIgMTAwNjQ0Ci0t LSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMDYzLDYgKzEwNjMsOCBAQCBHQlRfTlVNS0VZX1IKIEdC VF9WQVJLRVkKIEdCVF9WQVJLRVlfUgogR0VORVJBTF9OQU1FCitHSVNUQmF0Y2hEYXRhCitHSVNU QmF0Y2hJdGVtCiBHSVNUQnVpbGRCdWZmZXJzCiBHSVNUQnVpbGRTdGF0ZQogR0lTVERlbGV0ZWRQ YWdlQ29udGVudHMKLS0gCjIuNTMuMAoK --0000000000000468e006539f51e8 Content-Type: application/octet-stream; name="v26-0003-Adopt-amgetbatch-interface-in-hash-index-AM.patch" Content-Disposition: attachment; filename="v26-0003-Adopt-amgetbatch-interface-in-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq31b3f07 RnJvbSA5YzliNzEzZDUxODk0N2I0NjY2ZTUzNTg0MmI2NTMzNzhkMjllNWY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyNiAzLzldIEFk b3B0IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGluIGhhc2ggaW5kZXggQU0uCgpSZXBsYWNlIGhhc2hn ZXR0dXBsZSB3aXRoIGhhc2hnZXRiYXRjaCwgYSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhl Cm5ldyBhbWdldGJhdGNoIGludGVyZmFjZSBhZGRlZCBieSBjb21taXQgRklYTUUuICBQbGFpbiBp bmRleCBzY2FucyBvZgpoYXNoIGluZGV4ZXMgbm93IHJldHVybiBtYXRjaGluZyBpdGVtcyBpbiBi YXRjaGVzIGNvbnNpc3Rpbmcgb2YgYWxsIG9mCnRoZSBtYXRjaGVzIGZyb20gYSBnaXZlbiBidWNr ZXQgb3Igb3ZlcmZsb3cgcGFnZS4gIFRoaXMgZ2l2ZXMgdGhlIHRhYmxlCkFNIHRoZSBhYmlsaXR5 IHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZwpo YXNoIGluZGV4IHNjYW5zLgoKUmV0dXJuZWQgYmF0Y2hlcyBob2xkIG5vIGJ1ZmZlciBwaW5zIG9u IGluZGV4IHBhZ2VzLCBwZXIgdGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlJ3MgY29udHJhY3QuICBU aGlzIGdyZWF0bHkgc2ltcGxpZmllcyByZXNvdXJjZSBtYW5hZ2VtZW50CmR1cmluZyBpbmRleCBw cmVmZXRjaGluZywgd2hlcmUgdGhlIHJlYWQgc3RyZWFtIGlzIGV4cGVjdGVkIHRvIGhvbGQgbWFu eQpwaW5zIG9uIGhlYXAgcGFnZXMuICBUaGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UgcmVxdWlyZXMg dGhhdCBpbmRleCBBTXMKdGFrZSB0aGUgc2FtZSBzdGFuZGFyZGl6ZWQgYXBwcm9hY2ggdG8gcGlu IG1hbmFnZW1lbnQgZm9yIHBpbnMgdGhhdCBhcmUKdXNlZCB0byBwcmV2ZW50IHVuc2FmZSBjb25j dXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNICh0aGF0IHdheQpwcmVmZXRjaGluZyBjYW4g aG9sZCBvcGVuIG11bHRpcGxlIGJhdGNoZXMgd2l0aG91dCBpdCBhZmZlY3RpbmcgdGhlIHJlYWQK c3RyZWFtKS4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgaGFzaCBzdGlsbCBob2xkcyBvbiB0byBwaW5z IG5lZWRlZCBmb3IgaXRzCm93biBpbnRlcm5hbCBwdXJwb3NlcyAoZS5nLiwgaXQnbGwgc3RpbGwg aG9sZCBvbnRvIGEgcGluIGR1cmluZyBhIGJ1Y2tldApzcGxpdCkuCgpoYXNoa2lsbGl0ZW1zYmF0 Y2ggKHRoZSBoYXNoIGltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXcgYW1raWxsaXRlbXNiYXRjaApp bnRlcmZhY2UpIHBlcmZvcm1zIExQX0RFQUQgbWFya2luZyBvZiBkZWFkIGluZGV4IGVudHJpZXMs IHdoaWxlCmZvbGxvd2luZyBzbGlnaHRseSBkaWZmZXJlbnQgcnVsZXMgdG8gdGhlIG9sZCBhcHBy b2FjaC4gIEl0IHJlbGllcyBvbgpjb21wYXJpbmcgdGhlIGJhdGNoJ3Mgc2F2ZWQgTFNOIGFnYWlu c3QgdGhlIGN1cnJlbnQgcGFnZSBMU04gdG8gZGV0ZWN0CmNvbmN1cnJlbnQgcGFnZSBtb2RpZmlj YXRpb25zLCB3aGljaCBpbiB0dXJuIHJlcXVpcmVzIGZha2UgTFNOIHN1cHBvcnQKZm9yIHVubG9n Z2VkIHJlbGF0aW9ucy4gIFByZXBhcmF0b3J5IGNvbW1pdCBlNTgzNmY3YiBhZGRlZCB0aGF0IHN1 cHBvcnQKdG8gdGhlIGhhc2ggaW5kZXggQU0uCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdA Ym93dC5pZT4KUmV2aWV3ZWQtYnk6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpSZXZp ZXdlZC1ieTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3ptWXFoYWNCSDE2MXBlQVdiNWVGPUphN0NGQVErMGpT RU1xPXFuZkxWVE9PZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oYXNo LmggICAgICAgICAgICB8ICA4MSArKy0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFE TUUgICAgICAgfCAgMzEgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAg fCAyMTQgKysrKysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxv Zy5jICB8ICAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYyAgIHwgIDIx ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMgfCAzNDUgKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jICAg fCAxMjkgKy0tLS0tLS0tLQogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAgICAgIHwg IDI5ICsrLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgIHwgICAzICstCiA5 IGZpbGVzIGNoYW5nZWQsIDM0NyBpbnNlcnRpb25zKCspLCA1MTAgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9o YXNoLmgKaW5kZXggYTg3MDJmMGU1Li4xYTJlMDJmOWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaApAQCAtMTgsNiAr MTgsNyBAQAogI2RlZmluZSBIQVNIX0gKIAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2lu Y2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNp bmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgpAQCAt MTAwLDU3ICsxMDEsMTggQEAgdHlwZWRlZiBIYXNoUGFnZU9wYXF1ZURhdGEgKkhhc2hQYWdlT3Bh cXVlOwogICovCiAjZGVmaW5lIEhBU0hPX1BBR0VfSUQJCTB4RkY4MAogCi10eXBlZGVmIHN0cnVj dCBIYXNoU2NhblBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICov CisvKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBoYXNoIGluZGV4IEFNICovCit0eXBl ZGVmIHN0cnVjdCBIYXNoQmF0Y2hEYXRhCiB7Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7CS8q IFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9mZnNl dDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCi19IEhhc2hTY2FuUG9z SXRlbTsKKwlCdWZmZXIJCWJ1ZjsJCQkvKiBpbmRleCBwYWdlJ3MgYnVmZmVyIHBpbiAqLworCUJs b2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogaW5kZXggcGFnZSdzIGJsb2NrIG51bWJlciAqLworCUJs b2NrTnVtYmVyIHByZXZQYWdlOwkJLyogaW5kZXggcGFnZSdzIGxlZnQgc2libGluZyAqLworCUJs b2NrTnVtYmVyIG5leHRQYWdlOwkJLyogaW5kZXggcGFnZSdzIHJpZ2h0IHNpYmxpbmcgKi8KK30g SGFzaEJhdGNoRGF0YTsKIAotdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5Qb3NEYXRhCi17Ci0JQnVm ZmVyCQlidWY7CQkJLyogaWYgdmFsaWQsIHRoZSBidWZmZXIgaXMgcGlubmVkICovCi0JQmxvY2tO dW1iZXIgY3VyclBhZ2U7CQkvKiBjdXJyZW50IGhhc2ggaW5kZXggcGFnZSAqLwotCUJsb2NrTnVt YmVyIG5leHRQYWdlOwkJLyogbmV4dCBvdmVyZmxvdyBwYWdlICovCi0JQmxvY2tOdW1iZXIgcHJl dlBhZ2U7CQkvKiBwcmV2IG92ZXJmbG93IG9yIGJ1Y2tldCBwYWdlICovCi0KLQkvKgotCSAqIFRo ZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3Jl YXNpbmcKLQkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBj b252ZW5pZW50IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3Rh cnQgYXQgdGhlIGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVl ZCBib3RoIGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVy LgotCSAqIGl0ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0 IHJldHVybmVkIHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2 YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlk IGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4 IGluIGl0ZW1zW10gKi8KLQotCUhhc2hTY2FuUG9zSXRlbSBpdGVtc1tNYXhJbmRleFR1cGxlc1Bl clBhZ2VdOwkvKiBNVVNUIEJFIExBU1QgKi8KLX0gSGFzaFNjYW5Qb3NEYXRhOwotCi0jZGVmaW5l IEhhc2hTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tO dW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlk KChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikgXAotKQot Ci0jZGVmaW5lIEhhc2hTY2FuUG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNy byhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZl cklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9z KS5jdXJyUGFnZSkgXAotKQotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9z KSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2Fu cG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCQkoc2NhbnBvcykubmV4dFBh Z2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3MpLnByZXZQYWdlID0gSW52YWxp ZEJsb2NrTnVtYmVyOyBcCi0JCShzY2FucG9zKS5maXJzdEl0ZW0gPSAwOyBcCi0JCShzY2FucG9z KS5sYXN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLml0ZW1JbmRleCA9IDA7IFwKLQl9IHdoaWxl ICgwKQorLyogQWNjZXNzIHRoZSBoYXNoLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJ bmRleFNjYW5CYXRjaCBwb2ludGVyICovCisjZGVmaW5lIEhhc2hCYXRjaEdldERhdGEoc2Nhbiwg YmF0Y2gpIFwKKwlpbmRleGFtX3V0aWxfYmF0Y2hfZ2V0X2FtZGF0YShzY2FuLCBiYXRjaCwgSGFz aEJhdGNoRGF0YSkKIAogLyoKICAqCUhhc2hTY2FuT3BhcXVlRGF0YSBpcyBwcml2YXRlIHN0YXRl IGZvciBhIGhhc2ggaW5kZXggc2Nhbi4KQEAgLTE3OCwxNSArMTQwLDYgQEAgdHlwZWRlZiBzdHJ1 Y3QgSGFzaFNjYW5PcGFxdWVEYXRhCiAJICogcmVmZXJyZWQgb25seSB3aGVuIGhhc2hzb19idWNf cG9wdWxhdGVkIGlzIHRydWUuCiAJICovCiAJYm9vbAkJaGFzaHNvX2J1Y19zcGxpdDsKLQkvKiBp bmZvIGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2 ZXIgdXNlZCkgKi8KLQlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRl eGVzIG9mIGtpbGxlZCBpdGVtcyAqLwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBj dXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCi0KLQkvKgotCSAqIElkZW50aWZ5IGFsbCB0aGUgbWF0 Y2hpbmcgaXRlbXMgb24gYSBwYWdlIGFuZCBzYXZlIHRoZW0gaW4KLQkgKiBIYXNoU2NhblBvc0Rh dGEKLQkgKi8KLQlIYXNoU2NhblBvc0RhdGEgY3VyclBvczsJLyogY3VycmVudCBwb3NpdGlvbiBk YXRhICovCiB9IEhhc2hTY2FuT3BhcXVlRGF0YTsKIAogdHlwZWRlZiBIYXNoU2Nhbk9wYXF1ZURh dGEgKkhhc2hTY2FuT3BhcXVlOwpAQCAtMzY4LDExICszMjEsMTUgQEAgZXh0ZXJuIGJvb2wgaGFz aGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJ ICAgSW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1ZSwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hh bmdlZCwKIAkJCQkJICAgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKLWV4dGVybiBib29s IGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4 dGVybiBJbmRleFNjYW5CYXRjaCBoYXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0 aW9uIGRpcik7CiBleHRlcm4gaW50NjQgaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4s IFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiBJbmRleFNjYW5EZXNjIGhhc2hiZWdpbnNjYW4oUmVs YXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgaGFzaHJl c2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywK IAkJCQkJICAgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBo YXNodW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gp OworZXh0ZXJuIHZvaWQgaGFzaGtpbGxpdGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5k ZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFzaGVuZHNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmhhc2hidWxrZGVsZXRlKElu ZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAq c3RhdHMsCkBAIC00NDUsOCArNDAyLDkgQEAgZXh0ZXJuIHZvaWQgX2hhc2hfZmluaXNoX3NwbGl0 KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBvYnVmLAogCQkJCQkJCSAgIHVp bnQzMiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICovCi1leHRlcm4gYm9vbCBfaGFzaF9u ZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wg X2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRl cm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCk7CitleHRlcm4g SW5kZXhTY2FuQmF0Y2ggX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3RydWN0IEhTcG9vbCBIU3Bv b2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpAQCAtNDc2LDcgKzQzNCw2IEBA IGV4dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxvY2tfZnJvbV9uZXdidWNrZXQoUmVs YXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hfZ2V0X25l d2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQpOwog ZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJlbGF0aW9u IHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJCQkgdWludDMyIGxvd21hc2ssIHVp bnQzMiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5E ZXNjIHNjYW4pOwogCiAvKiBoYXNoLmMgKi8KIGV4dGVybiB2b2lkIGhhc2hidWNrZXRjbGVhbnVw KFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKaW5k ZXggZmM5MDMxMTE3Li45NzJiYjY2NmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKQEAgLTI1NSwy OCArMjU1LDI5IEBAIFRoZSByZWFkZXIgYWxnb3JpdGhtIGlzOgogCQlyZXRha2UgdGhlIGJ1ZmZl ciBjb250ZW50IGxvY2sgb24gbmV3IGJ1Y2tldAogCQlhcnJhbmdlIHRvIHNjYW4gdGhlIG9sZCBi dWNrZXQgbm9ybWFsbHkgYW5kIHRoZSBuZXcgYnVja2V0IGZvcgogICAgICAgICAgdHVwbGVzIHdo aWNoIGFyZSBub3QgbW92ZWQtYnktc3BsaXQKLS0tIHRoZW4sIHBlciByZWFkIHJlcXVlc3Q6Cist LSB0aGVuLCBwZXIgYmF0Y2ggKHBhZ2UpIHJlcXVlc3Q6CiAJcmVhY3F1aXJlIGNvbnRlbnQgbG9j ayBvbiBjdXJyZW50IHBhZ2UKIAlzdGVwIHRvIG5leHQgcGFnZSBpZiBuZWNlc3NhcnkgKG5vIGNo YWluaW5nIG9mIGNvbnRlbnQgbG9ja3MsIGJ1dCBrZWVwCiAJdGhlIHBpbiBvbiB0aGUgcHJpbWFy eSBidWNrZXQgdGhyb3VnaG91dCB0aGUgc2NhbikKLQlzYXZlIGFsbCB0aGUgbWF0Y2hpbmcgdHVw bGVzIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYW4gaXRlbXMgYXJyYXkKLQlyZWxlYXNl IHBpbiBhbmQgY29udGVudCBsb2NrIChidXQgaWYgaXQgaXMgcHJpbWFyeSBidWNrZXQgcGFnZSBy ZXRhaW4KLQlpdHMgcGluIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2NhbikKLQlnZXQgdHVwbGUgZnJv bSBhbiBpdGVtIGFycmF5CisJc2F2ZSBhbGwgdGhlIG1hdGNoaW5nIHR1cGxlcyBmcm9tIGN1cnJl bnQgaW5kZXggcGFnZSBpbnRvIGEgYmF0Y2gKKwlyZWxlYXNlIGNvbnRlbnQgbG9jayBvbiBjdXJy ZW50IHBhZ2UgcmV0dXJuIGJhdGNoIHRvIHRhYmxlIEFNICh0YWJsZSBBTQorCXdpbGwgZHJvcCBi YXRjaCdzIGJ1ZmZlciBwaW4sIHRob3VnaCBwcmltYXJ5IGJ1Y2tldCBwYWdlIHBpbiBpcyBrZXB0 CisJdW50aWwgdGhlIGVuZCBvZiB0aGUgc2NhbikKIC0tIGF0IHNjYW4gc2h1dGRvd246Ci0JcmVs ZWFzZSBhbGwgcGlucyBzdGlsbCBoZWxkCisJcmVsZWFzZSBzY2FuLW93bmVkIHBpbnMgKGUuZy4s IHByaW1hcnkgYnVja2V0IHBhZ2UgcGluKSBhcyBuZWVkZWQKIAogSG9sZGluZyB0aGUgYnVmZmVy IHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBmb3IgdGhlIHdob2xlIHNjYW4gcHJldmVu dHMKLXRoZSByZWFkZXIncyBjdXJyZW50LXR1cGxlIHBvaW50ZXIgZnJvbSBiZWluZyBpbnZhbGlk YXRlZCBieSBzcGxpdHMgb3IKLWNvbXBhY3Rpb25zLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVja2V0 cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikKK3RoZSBidWNrZXQgZnJvbSBiZWlu ZyByZW9yZ2FuaXplZCBieSBzcGxpdHMgb3IgY29tcGFjdGlvbnMgd2hpbGUgdGhlIHNjYW4gaXMK K2luIHByb2dyZXNzLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVja2V0cyBjYW4gc3RpbGwgYmUgc3Bs aXQgb3IgY29tcGFjdGVkLikKIAotVG8gbWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFz aCBpbmRleCBzY2FuIGFsd2F5cyBzZWFyY2hlcyB0aGUgZW50aXJlCi1oYXNoIHBhZ2UgdG8gaWRl bnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBhdCBvbmNlLCBjb3B5aW5nIHRoZWlyIGhlYXAg dHVwbGUKLUlEcyBpbnRvIGJhY2tlbmQtbG9jYWwgc3RvcmFnZS4gVGhlIGhlYXAgdHVwbGUgSURz IGFyZSB0aGVuIHByb2Nlc3NlZCB3aGlsZSBub3QKLWhvbGRpbmcgYW55IHBhZ2UgbG9jayB3aXRo aW4gdGhlIGluZGV4IHRoZXJlYnksIGFsbG93aW5nIGNvbmN1cnJlbnQgaW5zZXJ0aW9uCi10byBo YXBwZW4gb24gdGhlIHNhbWUgaW5kZXggcGFnZSB3aXRob3V0IGFueSByZXF1aXJlbWVudCBvZiBy ZS1maW5kaW5nIHRoZQotY3VycmVudCBzY2FuIHBvc2l0aW9uIGZvciB0aGUgcmVhZGVyLiBXZSBk byBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZQotYnVja2V0IHBhZ2UsIHRvIHByb3RlY3Qg YWdhaW5zdCBjb25jdXJyZW50IGRlbGV0aW9ucyBhbmQgYnVja2V0IHNwbGl0LgorVG8gbWluaW1p emUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBzY2FucyBhbHdheXMgc2VhcmNoIHRo ZSBlbnRpcmUKK2hhc2ggcGFnZSB0byBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIGF0 IG9uY2UsIHJldHVybmluZyB0aGVtIGluCitiYXRjaGVzIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0 YWJsZSBBTSBwcm9jZXNzZXMgYmF0Y2hlcyB3aGlsZSBubyBwYWdlIGxvY2sKK2lzIGhlbGQgd2l0 aGluIHRoZSBpbmRleCwgYWxsb3dpbmcgY29uY3VycmVudCBpbnNlcnRpb24gdG8gaGFwcGVuIG9u IHRoZQorc2FtZSBpbmRleCBwYWdlIHdpdGhvdXQgYW55IHJlcXVpcmVtZW50IG9mIHJlLWZpbmRp bmcgdGhlIGN1cnJlbnQgc2NhbgorcG9zaXRpb24gZm9yIHRoZSByZWFkZXIuICBUaGUgdGFibGUg QU0gY29udHJvbHMgd2hlbiBiYXRjaCBidWZmZXIgcGlucyBhcmUKK2Ryb3BwZWQuICBXZSBkbyBj b250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCB0bworcHJv dGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYnVja2V0IHNwbGl0cy4KIAogVG8gYWxsb3cgZm9yIHNj YW5zIGR1cmluZyBhIGJ1Y2tldCBzcGxpdCwgaWYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzY2FuLCB0 aGUKIGJ1Y2tldCBpcyBtYXJrZWQgYXMgYnVja2V0LWJlaW5nLXBvcHVsYXRlZCwgaXQgc2NhbiBh bGwgdGhlIHR1cGxlcyBpbiB0aGF0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggNTQwZjJiY2Q0 Li5hOTdhMDY4Y2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTExNCwxMCArMTE0LDEwIEBA IGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWFkanVzdG1lbWJlcnMgPSBoYXNo YWRqdXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbiwKIAkJLmFtcmVz Y2FuID0gaGFzaHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBoYXNoZ2V0dHVwbGUsCi0JCS5hbWdl dGJhdGNoID0gTlVMTCwKLQkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKLQkJLmFta2lsbGl0ZW1z YmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gaGFz aGdldGJhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBoYXNodW5ndWFyZGJhdGNoLAorCQkuYW1r aWxsaXRlbXNiYXRjaCA9IGhhc2hraWxsaXRlbXNiYXRjaCwKIAkJLmFtZ2V0Yml0bWFwID0gaGFz aGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuLAogCQkuYW1wb3NyZXNldCA9 IE5VTEwsCkBAIC0zMDAsNTMgKzMwMCwyOCBAQCBoYXNoaW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0 dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogCiAKIC8qCi0gKgloYXNoZ2V0dHVwbGUoKSAtLSBH ZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhlIHNjYW4uCisgKgloYXNoZ2V0YmF0Y2goKSAtLSBHZXQg dGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8KLWJvb2wK LWhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5k ZXhTY2FuQmF0Y2gKK2hhc2hnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIHByaW9yYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCUhhc2hTY2FuT3BhcXVlIHNv ID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOwogCiAJLyogSGFz aCBpbmRleGVzIGFyZSBhbHdheXMgbG9zc3kgc2luY2Ugd2Ugc3RvcmUgb25seSB0aGUgaGFzaCBj b2RlICovCi0Jc2Nhbi0+eHNfcmVjaGVjayA9IHRydWU7CisJQXNzZXJ0KHNjYW4tPnhzX3JlY2hl Y2spOwogCi0JLyoKLQkgKiBJZiB3ZSd2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRoaXMgc2Nhbiwg d2UgY2FuIGp1c3QgYWR2YW5jZSBpdCBpbiB0aGUKLQkgKiBhcHByb3ByaWF0ZSBkaXJlY3Rpb24u ICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsIGEgcm91dGluZSB0bwotCSAqIGdl dCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KLQkgKi8KLQlpZiAoIUhhc2hTY2FuUG9zSXNW YWxpZChzby0+Y3VyclBvcykpCi0JCXJlcyA9IF9oYXNoX2ZpcnN0KHNjYW4sIGRpcik7Ci0JZWxz ZQorCWlmIChwcmlvcmJhdGNoID09IE5VTEwpCiAJewotCQkvKgotCQkgKiBDaGVjayB0byBzZWUg aWYgd2Ugc2hvdWxkIGtpbGwgdGhlIHByZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJICovCi0J CWlmIChzY2FuLT5raWxsX3ByaW9yX3R1cGxlKQotCQl7Ci0JCQkvKgotCQkJICogWWVzLCBzbyBy ZW1lbWJlciBpdCBmb3IgbGF0ZXIuIChXZSdsbCBkZWFsIHdpdGggYWxsIHN1Y2ggdHVwbGVzCi0J CQkgKiBhdCBvbmNlIHJpZ2h0IGFmdGVyIGxlYXZpbmcgdGhlIGluZGV4IHBhZ2Ugb3IgYXQgZW5k IG9mIHNjYW4uKQotCQkJICogSW4gY2FzZSBpZiBjYWxsZXIgcmV2ZXJzZXMgdGhlIGluZGV4c2Nh biBkaXJlY3Rpb24gaXQgaXMgcXVpdGUKLQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhlIHNhbWUgaXRl bSBtaWdodCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0aW1lcy4KLQkJCSAqIEJ1dCwgd2UgZG9uJ3Qg ZGV0ZWN0IHRoYXQ7IGluc3RlYWQsIHdlIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MKLQkJCSAqIGVu dHJpZXMuCi0JCQkgKi8KLQkJCWlmIChzby0+a2lsbGVkSXRlbXMgPT0gTlVMTCkKLQkJCQlzby0+ a2lsbGVkSXRlbXMgPSBwYWxsb2NfYXJyYXkoaW50LCBNYXhJbmRleFR1cGxlc1BlclBhZ2UpOwor CQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JCQlpZiAoc28tPm51bUtp bGxlZCA8IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKLQkJCQlzby0+a2lsbGVkSXRlbXNbc28tPm51 bUtpbGxlZCsrXSA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKLQkJfQorCQlfaGFzaF9kcm9wc2Nh bmJ1ZihyZWwsIHNvKTsKIAotCQkvKgotCQkgKiBOb3cgY29udGludWUgdGhlIHNjYW4uCi0JCSAq LwotCQlyZXMgPSBfaGFzaF9uZXh0KHNjYW4sIGRpcik7CisJCS8qIEluaXRpYWxpemUgdGhlIHNj YW4sIGFuZCByZXR1cm4gZmlyc3QgYmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgKi8KKwkJcmV0dXJu IF9oYXNoX2ZpcnN0KHNjYW4sIGRpcik7CiAJfQogCi0JcmV0dXJuIHJlczsKKwkvKiBSZXR1cm4g YmF0Y2ggcG9zaXRpb25lZCBhZnRlciBjYWxsZXIncyBiYXRjaCAoaW4gZGlyZWN0aW9uICdkaXIn KSAqLworCXJldHVybiBfaGFzaF9uZXh0KHNjYW4sIGRpciwgcHJpb3JiYXRjaCk7CiB9CiAKIApA QCAtMzU2LDI2ICszMzEsMjYgQEAgaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpCiBpbnQ2NAogaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4s IFRJREJpdG1hcCAqdGJtKQogewotCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCWlu dDY0CQludGlkcyA9IDA7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKIAotCXJlcyA9IF9o YXNoX2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKTsKKwliYXRjaCA9IF9oYXNoX2Zp cnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKTsKIAotCXdoaWxlIChyZXMpCisJd2hpbGUg KGJhdGNoICE9IE5VTEwpCiAJewotCQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+ Y3VyclBvcy5pdGVtSW5kZXhdOworCQlmb3IgKGludCBpdGVtSW5kZXggPSBiYXRjaC0+Zmlyc3RJ dGVtOworCQkJIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW07CisJCQkgaXRlbUluZGV4Kysp CisJCXsKKwkJCXRibV9hZGRfdHVwbGVzKHRibSwgJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRh YmxlVGlkLCAxLCB0cnVlKTsKKwkJCW50aWRzKys7CisJCX0KIAogCQkvKgotCQkgKiBfaGFzaF9m aXJzdCBhbmQgX2hhc2hfbmV4dCBoYW5kbGUgZWxpbWluYXRlIGRlYWQgaW5kZXggZW50cmllcwot CQkgKiB3aGVuZXZlciBzY2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlcyBpcyB0cnVlLiAgVGhlcmVm b3JlLCB0aGVyZSdzCi0JCSAqIG5vdGhpbmcgdG8gZG8gaGVyZSBleGNlcHQgYWRkIHRoZSByZXN1 bHRzIHRvIHRoZSBUSURCaXRtYXAuCisJCSAqIF9oYXNoX25leHQgcmVsZWFzZXMgdGhlIHByaW9y IGJhdGNoIGZvciBiaXRtYXAgY2FsbGVycyBiZWZvcmUKKwkJICogYWxsb2NhdGluZyB0aGUgbmV4 dCBvbmUsIHNvIG9ubHkgb25lIGJhdGNoIGlzIGV2ZXIgdXNlZCBhdCBhIHRpbWUKIAkJICovCi0J CXRibV9hZGRfdHVwbGVzKHRibSwgJihjdXJySXRlbS0+aGVhcFRpZCksIDEsIHRydWUpOwotCQlu dGlkcysrOwotCi0JCXJlcyA9IF9oYXNoX25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24p OworCQliYXRjaCA9IF9oYXNoX25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGJhdGNo KTsKIAl9CiAKIAlyZXR1cm4gbnRpZHM7CkBAIC0zOTcsMTcgKzM3MiwxNyBAQCBoYXNoYmVnaW5z Y2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4gPSBSZWxh dGlvbkdldEluZGV4U2NhbihyZWwsIG5rZXlzLCBub3JkZXJieXMpOwogCiAJc28gPSAoSGFzaFNj YW5PcGFxdWUpIHBhbGxvY19vYmplY3QoSGFzaFNjYW5PcGFxdWVEYXRhKTsKLQlIYXNoU2NhblBv c0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9IEludmFs aWRCdWZmZXI7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsK IAogCXNvLT5oYXNoc29fYnVjX3BvcHVsYXRlZCA9IGZhbHNlOwogCXNvLT5oYXNoc29fYnVjX3Nw bGl0ID0gZmFsc2U7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwotCXNvLT5udW1LaWxsZWQg PSAwOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CisJc2Nhbi0+eHNfcmVjaGVjayA9IHRydWU7CisJ c2Nhbi0+bWF4aXRlbXNiYXRjaCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZTsKKwlzY2FuLT5iYXRj aF9pbmRleF9vcGFxdWVfc3RhdGljID0gTUFYQUxJR04oc2l6ZW9mKEhhc2hCYXRjaERhdGEpKTsK KwlzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID0gMDsKIAogCXJldHVybiBzY2FuOwogfQpA QCAtNDIyLDE4ICszOTcsOCBAQCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nhbktl eSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlv bjsKIAotCWlmIChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVm b3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwot CQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCX0K LQogCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JLyogc2V0IHBvc2l0aW9uIGludmFs aWQgKHRoaXMgd2lsbCBjYXVzZSBfaGFzaF9maXJzdCBjYWxsKSAqLwotCUhhc2hTY2FuUG9zSW52 YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0KIAkvKiBVcGRhdGUgc2NhbiBrZXksIGlmIGEgbmV3IG9u ZSBpcyBnaXZlbiAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJ CW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5udW1iZXJPZktleXMgKiBzaXpl b2YoU2NhbktleURhdGEpKTsKQEAgLTQ0Miw2ICs0MDcsMTEyIEBAIGhhc2hyZXNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJc28tPmhhc2hz b19idWNfc3BsaXQgPSBmYWxzZTsKIH0KIAorLyoKKyAqCWhhc2h1bmd1YXJkYmF0Y2goKSAtLSBE cm9wIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKGJ1ZmZlciBwaW4pCisgKgorICog Q2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0J3Mgc2FmZSB0byBkcm9wIHRoZSBidWZmZXIg cGluIGhlbGQgdG8KKyAqIHByZXZlbnQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VV TS4KKyAqLwordm9pZAoraGFzaHVuZ3VhcmRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIGJhdGNoKQoreworCUhhc2hCYXRjaERhdGEgKmhhc2hiYXRjaCA9IEhhc2hCYXRj aEdldERhdGEoc2NhbiwgYmF0Y2gpOworCisJLyogU2hvdWxkIGJlIGNhbGxlZCBleGFjdGx5IG9u Y2UgaWZmICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgKi8KKwlBc3NlcnQoIXNjYW4tPmJhdGNoSW1t ZWRpYXRlVW5ndWFyZCk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1YXJkZWQpOworCisJUmVsZWFzZUJ1 ZmZlcihoYXNoYmF0Y2gtPmJ1Zik7Cit9CisKKy8qCisgKgloYXNoa2lsbGl0ZW1zYmF0Y2goKSAt LSBNYXJrIGRlYWQgaXRlbXMnIGluZGV4IHR1cGxlcyBMUF9ERUFECisgKi8KK3ZvaWQKK2hhc2hr aWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQor eworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJSGFzaEJhdGNoRGF0YSAq aGFzaGJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CisJQnVmZmVyCQlidWY7 CisJUGFnZQkJcGFnZTsKKwlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CisJYm9vbAkJa2lsbGVkc29t ZXRoaW5nID0gZmFsc2U7CisJWExvZ1JlY1B0cglsYXRlc3Rsc247CisKKwlBc3NlcnQoYmF0Y2gt Pm51bURlYWQgPiAwKTsKKworCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGhhc2hiYXRjaC0+Y3Vy clBhZ2UsIEhBU0hfUkVBRCwKKwkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19Q QUdFKTsKKworCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCUFzc2VydChi YXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0bHNuKQor CXsKKwkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLworCQlfaGFzaF9yZWxidWYo cmVsLCBidWYpOworCQlyZXR1cm47CisJfQorCisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsK KwlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKKworCS8qIEl0ZXJhdGUgdGhyb3Vn aCBiYXRjaC0+ZGVhZEl0ZW1zW10gaW4gaW5kZXggcGFnZSBvcmRlciAqLworCWZvciAoaW50IGkg PSAwOyBpIDwgYmF0Y2gtPm51bURlYWQ7IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRleCA9IGJh dGNoLT5kZWFkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpjdXJySXRlbSA9ICZiYXRj aC0+aXRlbXNbaXRlbUluZGV4XTsKKwkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9IGN1cnJJdGVtLT5p bmRleE9mZnNldDsKKwkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7 CisKKwkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkgICBpdGVt SW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKwkJQXNzZXJ0KGkgPT0gMCB8fAorCQkJICAgb2Zm bnVtID4gYmF0Y2gtPml0ZW1zW2JhdGNoLT5kZWFkSXRlbXNbaSAtIDFdXS5pbmRleE9mZnNldCk7 CisJCUFzc2VydChvZmZudW0gPD0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSk7CisJCUFz c2VydChJdGVtUG9pbnRlckVxdWFscygmKChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBp aWQpKS0+dF90aWQsCisJCQkJCQkJCSAmY3Vyckl0ZW0tPnRhYmxlVGlkKSk7CisKKwkJLyoKKwkJ ICogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0IGlzbid0IGFscmVhZHkuICBTaW5jZSB0 aGlzIGhhcHBlbnMKKwkJICogd2hpbGUgaG9sZGluZyBhIHNoYXJlZCBidWZmZXIgbG9jaywgaXQn cyBwb3NzaWJsZSB0aGF0IG11bHRpcGxlCisJCSAqIHByb2Nlc3NlcyBhdHRlbXB0IHRvIGRvIHRo aXMgc2ltdWx0YW5lb3VzbHksIGxlYWRpbmcgdG8gbXVsdGlwbGUKKwkJICogZnVsbC1wYWdlIGlt YWdlcyBiZWluZyBzZW50IHRvIFdBTCAoaWYgd2FsX2xvZ19oaW50cyBvciBkYXRhCisJCSAqIGNo ZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdoaWNoIGlzIHVuZGVzaXJhYmxlLgorCQkgKi8KKwkJaWYg KCFJdGVtSWRJc0RlYWQoaWlkKSkKKwkJeworCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCisJCQl7 CisJCQkJLyoKKwkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNr IGlmIHdlIGNhbiB1cGRhdGUKKwkJCQkgKiB0aGUgcGFnZSB3aGlsZSBqdXN0IGhvbGRpbmcgYSBz aGFyZSBsb2NrLiBJZiB3ZSBhcmUgbm90CisJCQkJICogYWxsb3dlZCwgdGhlcmUncyBubyBwb2lu dCBjb250aW51aW5nLgorCQkJCSAqLworCQkJCWlmICghQnVmZmVyQmVnaW5TZXRIaW50Qml0cyhi dWYpKQorCQkJCQlnb3RvIHVubG9ja19wYWdlOworCQkJfQorCisJCQkvKiBmb3VuZCB0aGUgaXRl bSAqLworCQkJSXRlbUlkTWFya0RlYWQoaWlkKTsKKwkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7 CisJCX0KKwl9CisKKwkvKgorCSAqIFNpbmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRlciBpZiBu ZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4gV2hlbmV2ZXIKKwkgKiB3ZSBtYXJrIGFueXRoaW5n IExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKKwkgKiBMSF9QQUdFX0hBU19ERUFEX1RV UExFUyBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEgaGludC4KKwkgKi8KKwlpZiAoa2ls bGVkc29tZXRoaW5nKQorCXsKKwkJb3BhcXVlLT5oYXNob19mbGFnIHw9IExIX1BBR0VfSEFTX0RF QURfVFVQTEVTOworCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhidWYsIHRydWUsIHRydWUpOwor CX0KKwordW5sb2NrX3BhZ2U6CisJX2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKK30KKwogLyoKICAq CWhhc2hlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAqLwpAQCAtNDUxLDE3ICs1MjIs OCBAQCBoYXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJSGFzaFNjYW5PcGFxdWUgc28g PSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5p bmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0J ewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVk IGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9oYXNoX2tpbGxfaXRlbXMo c2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7CiAKLQlpZiAoc28tPmtp bGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJdGVtcyk7CiAJcGZyZWUoc28p OwogCXNjYW4tPm9wYXF1ZSA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoX3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5j CmluZGV4IDIwNjA2MjBjNy4uZTI2ZWU4YmI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoX3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hs b2cuYwpAQCAtMTE0MSwxNCArMTE0MSwxNCBAQCBoYXNoX21hc2soY2hhciAqcGFnZWRhdGEsIEJs b2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBoYXNoIGJ1Y2tldCBhbmQgb3ZlcmZsb3cg cGFnZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUKIAkJICogTFBfRkxBR1Mgd2l0aG91 dCBlbWl0dGluZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sgdGhlIGxpbmUKLQkJICogcG9p bnRlciBmbGFncy4gU2VlIGhhc2hnZXR0dXBsZSgpLCBfaGFzaF9raWxsX2l0ZW1zKCkgZm9yIGRl dGFpbHMuCisJCSAqIHBvaW50ZXIgZmxhZ3MuIFNlZSBoYXNoa2lsbGl0ZW1zYmF0Y2goKSBmb3Ig ZGV0YWlscy4KIAkJICovCiAJCW1hc2tfbHBfZmxhZ3MocGFnZSk7CiAJfQogCiAJLyoKIAkgKiBJ dCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBoaW50IGJpdCBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBt YXkgcmVtYWluCi0JICogdW5sb2dnZWQuIFNvLCBtYXNrIGl0LiBTZWUgX2hhc2hfa2lsbF9pdGVt cygpIGZvciBkZXRhaWxzLgorCSAqIHVubG9nZ2VkLiBTbywgbWFzayBpdC4gU2VlIGhhc2hraWxs aXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCSAqLwogCW9wYXF1ZS0+aGFzaG9fZmxhZyAmPSB+ TEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNocGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwpp bmRleCA4MDk5YjBkMDIuLjExZTNkYjQ3MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5j CkBAIC0yODAsMzEgKzI4MCwyNCBAQCBfaGFzaF9kcm9wYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVy IGJ1ZikKIH0KIAogLyoKLSAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJz IHVzZWQgaW4gc2Nhbi4KKyAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJz IG93bmVkIGJ5IHNjYW4uCiAgKgotICogVGhpcyByb3V0aW5lIHVucGlucyB0aGUgYnVmZmVycyB1 c2VkIGR1cmluZyBzY2FuIG9uIHdoaWNoIHdlCi0gKiBob2xkIG5vIGxvY2suCisgKiBUaGlzIHJv dXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIGZvciB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQg Zm9yIHRoZQorICogYnVja2V0IHBhZ2Ugb2YgYSBidWNrZXQgYmVpbmcgc3BsaXQgYXMgbmVlZGVk LgogICovCiB2b2lkCiBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxhdGlvbiByZWwsIEhhc2hTY2FuT3Bh cXVlIHNvKQogewotCS8qIHJlbGVhc2UgcGluIHdlIGhvbGQgb24gcHJpbWFyeSBidWNrZXQgcGFn ZSAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikgJiYKLQkJc28t Pmhhc2hzb19idWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBo ZWxkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2UgKi8KKwlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFz aHNvX2J1Y2tldF9idWYpKQogCQlfaGFzaF9kcm9wYnVmKHJlbCwgc28tPmhhc2hzb19idWNrZXRf YnVmKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCi0JLyogcmVs ZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlICBvZiBidWNrZXQgYmVpbmcg c3BsaXQgKi8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYp ICYmCi0JCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiAhPSBzby0+Y3VyclBvcy5idWYpCisJ LyogcmVsZWFzZSBwaW4gaGVsZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlIG9mIGJ1Y2tldCBiZWlu ZyBzcGxpdCAqLworCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1 ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpOwog CXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiByZWxl YXNlIGFueSBwaW4gd2Ugc3RpbGwgaG9sZCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5jdXJy UG9zLmJ1ZikpCi0JCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNvLT5j dXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7Ci0KIAkvKiByZXNldCBzcGxpdCBzY2FuICovCiAJ c28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQg PSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2gu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYwppbmRleCA4OWQxYzViYzYu LjYzYTdiYTY4OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJj aC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYwpAQCAtMjIsMTA1 ICsyMiw5NCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCiAKLXN0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgQnVmZmVyICpidWZQLAotCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIGJv b2wgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgYnVmLCBTY2FuRGly ZWN0aW9uIGRpciwKKwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIHN0YXRpYyBpbnQJ X2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2Us Ci0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1z dGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBp dGVtSW5kZXgsCisJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9u IGRpciwKKwkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK3N0YXRpYyBpbmxpbmUg dm9pZCBfaGFzaF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBiYXRjaCwgaW50IGl0ZW1JbmRleCwK IAkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwogc3RhdGlj IHZvaWQgX2hhc2hfcmVhZG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZnAsCiAJ CQkJCQkgICBQYWdlICpwYWdlcCwgSGFzaFBhZ2VPcGFxdWUgKm9wYXF1ZXApOwogCiAvKgotICoJ X2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX25l eHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlP biBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1h eQotICoJCWJlIHBpbm5lZCBidXQgbm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRl eCBpZGVudGlmaWVzCi0gKgkJd2hpY2ggaXRlbSB3YXMgcHJldmlvdXNseSByZXR1cm5lZC4KKyAq CQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSBiYXRjaCB3 aXRoIGl0ZW1zCisgKgkJYWxyZWFkeSByZXR1cm5lZC4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBl eGl0LCBzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgVElEIG9mIHRoZSBuZXh0Ci0gKgkJ aGVhcCB0dXBsZS4gIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgYXMgbmVlZGVkLgorICoJCU9uIHN1 Y2Nlc3NmdWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMg ZnJvbQorICoJCW5leHQgcGFnZS4gIE90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcg dGhhdCB0aGVyZSBhcmUgbm8KKyAqCQlmdXJ0aGVyIG1hdGNoZXMuICBObyBsb2NrcyBhcmUgZXZl ciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUg dHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlIHdpdGggcGluCi0gKgkJaGVsZCBvbiBidWNrZXQgcGFn ZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93Ci0gKgkJcGFnZS4KKyAqCQlS ZXRhaW5zIHBpbnMgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIF9oYXNoX2ZpcnN0Lgog ICovCi1ib29sCi1faGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCitJbmRleFNjYW5CYXRjaAorX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoKQogewogCVJlbGF0aW9uCXJl bCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCUhhc2hC YXRjaERhdGEgKmhhc2hwcmlvcmJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBwcmlvcmJh dGNoKTsKIAlCbG9ja051bWJlciBibGtubzsKIAlCdWZmZXIJCWJ1ZjsKLQlib29sCQllbmRfb2Zf c2NhbiA9IGZhbHNlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCiAJLyoKLQkgKiBBZHZhbmNl IHRvIHRoZSBuZXh0IHR1cGxlIG9uIHRoZSBjdXJyZW50IHBhZ2U7IG9yIGlmIGRvbmUsIHRyeSB0 byByZWFkCi0JICogZGF0YSBmcm9tIHRoZSBuZXh0IG9yIHByZXZpb3VzIHBhZ2UgYmFzZWQgb24g dGhlIHNjYW4gZGlyZWN0aW9uLiBCZWZvcmUKLQkgKiBtb3ZpbmcgdG8gdGhlIG5leHQgb3IgcHJl dmlvdXMgcGFnZSBtYWtlIHN1cmUgdGhhdCB3ZSBkZWFsIHdpdGggYWxsIHRoZQotCSAqIGtpbGxl ZCBpdGVtcy4KKwkgKiBUaGUgY29yZSBjb2RlIG11c3QgZGVhbCB3aXRoIGNyb3NzLWJhdGNoIHNj YW4gZGlyZWN0aW9uIGNoYW5nZXMgZm9yIHVzLgorCSAqIEEgYmF0Y2ggbWFuYWdlbWVudCByb3V0 aW5lIHRoYXQgZmxpcHMgcHJpb3JiYXRjaCdzIHNjYW4gZGlyZWN0aW9uIGlzCisJICogdXNlZCBm b3IgdGhpcy4KKwkgKi8KKwlBc3NlcnQocHJpb3JiYXRjaC0+ZGlyID09IGRpcik7CisKKwkvKgor CSAqIERldGVybWluZSB3aGljaCBwYWdlIHRvIHJlYWQgbmV4dCBiYXNlZCBvbiBzY2FuIGRpcmVj dGlvbiBhbmQgZGV0YWlscworCSAqIHRha2VuIGZyb20gdGhlIHByaW9yIGJhdGNoCiAJICovCiAJ aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0JCWlmICgrK3NvLT5jdXJyUG9z Lml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0JCQlpZiAoc28tPm51bUtp bGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKKwkJYmxrbm8gPSBoYXNocHJp b3JiYXRjaC0+bmV4dFBhZ2U7CisJZWxzZQorCQlibGtubyA9IGhhc2hwcmlvcmJhdGNoLT5wcmV2 UGFnZTsKIAotCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKLQkJCWlmIChCbG9ja051 bWJlcklzVmFsaWQoYmxrbm8pKQotCQkJewotCQkJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJs a25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwotCQkJCWlmICghX2hhc2hfcmVhZHBh Z2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJ ZWxzZQotCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJfQotCX0KKwkvKgorCSAqIEZvciBiaXRt YXAgc2NhbiBjYWxsZXJzLCByZWxlYXNlIHRoZSBwcmlvciBiYXRjaCBub3cgc28gdGhhdCB0aGUK KwkgKiBhbGxvY2F0aW9uIGJlbG93IGNhbiByZXVzZSBpdHMgbWVtb3J5LiAgVGhhdCB3YXkgYml0 bWFwIHNjYW5zIG5ldmVyCisJICogbmVlZCBtb3JlIHRoYW4gb25lIGJhdGNoIGFsbG9jYXRpb24u CisJICovCisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJCWluZGV4YW1fdXRpbF9yZWxlYXNl X2JhdGNoKHNjYW4sIHByaW9yYmF0Y2gpOworCisJaWYgKCFCbG9ja051bWJlcklzVmFsaWQoYmxr bm8pKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXh0IGJhdGNo ICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2goc2Nhbik7CisKKwkvKiBHZXQg dGhlIGJ1ZmZlciBmb3IgbmV4dCBiYXRjaCAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikpCisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09W RVJGTE9XX1BBR0UpOwogCWVsc2UKIAl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8 IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKLQkJewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQot CQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7CisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJs a25vLCBIQVNIX1JFQUQsCisJCQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BB R0UpOwogCi0JCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCQkJaWYgKEJsb2NrTnVt YmVySXNWYWxpZChibGtubykpCi0JCQl7Ci0JCQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxr bm8sIEhBU0hfUkVBRCwKLQkJCQkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19Q QUdFKTsKLQotCQkJCS8qCi0JCQkJICogV2UgYWx3YXlzIG1haW50YWluIHRoZSBwaW4gb24gYnVj a2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4KLQkJCQkgKiBvcGVyYXRpb24sIHNvIHJlbGVhc2luZyB0 aGUgYWRkaXRpb25hbCBwaW4gd2UgaGF2ZSBhY3F1aXJlZAotCQkJCSAqIGhlcmUuCi0JCQkJICov Ci0JCQkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQkJYnVmID09IHNv LT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQkJX2hhc2hfZHJvcGJ1ZihyZWwsIGJ1Zik7 Ci0KLQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCQkJCWVuZF9v Zl9zY2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0J CX0KKwkJLyoKKwkJICogV2UgYWx3YXlzIG1haW50YWluIHRoZSBwaW4gb24gYnVja2V0IHBhZ2Ug Zm9yIHdob2xlIHNjYW4gb3BlcmF0aW9uLAorCQkgKiBzbyByZWxlYXNpbmcgdGhlIGFkZGl0aW9u YWwgcGluIHdlIGhhdmUgYWNxdWlyZWQgaGVyZS4KKwkJICovCisJCWlmIChidWYgPT0gc28tPmhh c2hzb19idWNrZXRfYnVmIHx8CisJCQlidWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVm KQorCQkJX2hhc2hfZHJvcGJ1ZihyZWwsIGJ1Zik7CiAJfQogCi0JaWYgKGVuZF9vZl9zY2FuKQor CS8qIFJlYWQgdGhlIG5leHQgcGFnZSBhbmQgbG9hZCBpdGVtcyBpbnRvIGFsbG9jYXRlZCBiYXRj aCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgYnVmLCBkaXIsIGJhdGNoKSkKIAl7Ci0J CV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwotCQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28t PmN1cnJQb3MpOwotCQlyZXR1cm4gZmFsc2U7CisJCWluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNo KHNjYW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JLyogT0ssIGl0ZW1JbmRleCBz YXlzIHdoYXQgdG8gcmV0dXJuICovCi0JY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28t PmN1cnJQb3MuaXRlbUluZGV4XTsKLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBU aWQ7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZXR1cm4gdGhlIGJhdGNoIGNvbnRhaW5pbmcgbWF0 Y2hlZCBpdGVtcyBmcm9tIG5leHQgcGFnZSAqLworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKQEAg LTI3MCwyMiArMjU5LDIwIEBAIF9oYXNoX3JlYWRwcmV2KEluZGV4U2NhbkRlc2Mgc2NhbiwKIH0K IAogLyoKLSAqCV9oYXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgaXRlbSBpbiBhIHNjYW4u CisgKglfaGFzaF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGJhdGNoIG9mIGl0ZW1zIGluIGEg c2Nhbi4KICAqCi0gKgkJV2UgZmluZCB0aGUgZmlyc3QgaXRlbSAob3IsIGlmIGJhY2t3YXJkIHNj YW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZQotICoJCWluZGV4IHRoYXQgc2F0aXNmaWVzIHRoZSBx dWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NhbgotICoJCWRlc2NyaXB0b3IuCisg KgkJV2UgZmluZCB0aGUgZmlyc3QgYmF0Y2ggb2YgaXRlbXMgKG9yLCBpZiBiYWNrd2FyZCBzY2Fu LCB0aGUgbGFzdAorICoJCWJhdGNoKSBpbiB0aGUgaW5kZXggdGhhdCBzYXRpc2ZpZXMgdGhlIHF1 YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoCisgKgkJdGhlIHNjYW4gZGVzY3JpcHRvci4KICAq Ci0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBpZiB0aGUgcGFnZSBjb250YWluaW5nIGN1cnJlbnQg aW5kZXggdHVwbGUgaXMgYW4KLSAqCQlvdmVyZmxvdyBwYWdlLCBib3RoIHBpbiBhbmQgbG9jayBh cmUgcmVsZWFzZWQgd2hlcmVhcyBpZiBpdCBpcyBhIGJ1Y2tldAotICoJCXBhZ2UgdGhlbiBpdCBp cyBwaW5uZWQgYnV0IG5vdCBsb2NrZWQgYW5kIGRhdGEgYWJvdXQgdGhlIG1hdGNoaW5nCi0gKgkJ dHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGludG8gc28tPmN1cnJQb3MsCi0g KgkJc2Nhbi0+eHNfaGVhcHRpZCBpcyBzZXQgdG8gdGhlIGhlYXAgVElEIG9mIHRoZSBjdXJyZW50 IHR1cGxlLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5p bmcgbWF0Y2hpbmcgaXRlbXMuCisgKgkJT3RoZXJ3aXNlIHJldHVybnMgTlVMTCwgaW5kaWNhdGlu ZyB0aGF0IHRoZXJlIGFyZSBubyBmdXJ0aGVyIG1hdGNoZXMuCisgKgkJTm8gbG9ja3MgYXJlIGV2 ZXIgaGVsZCB3aGVuIHdlIHJldHVybi4KICAqCi0gKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3Jl IHR1cGxlcyksIHdlIHJldHVybiBmYWxzZSwgd2l0aCBwaW4gaGVsZCBvbgotICoJCWJ1Y2tldCBw YWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tzIGhlbGQgb24gb3ZlcmZsb3cgcGFnZS4KKyAqCQlXZSBh bHdheXMgcmV0YWluIG91ciBvd24gcGluIG9uIHRoZSBidWNrZXQgcGFnZS4gIFdoZW4gd2UgcmV0 dXJuIGEKKyAqCQliYXRjaCB3aXRoIGEgYnVja2V0IHBhZ2UsIGl0IHdpbGwgcmV0YWluIGl0cyBv d24gcmVmZXJlbmNlIHBpbi4KICAqLwotYm9vbAorSW5kZXhTY2FuQmF0Y2gKIF9oYXNoX2ZpcnN0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24JcmVs ID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTI5Niw3ICsyODMsNyBAQCBfaGFzaF9maXJzdChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCUJ1ZmZlcgkJYnVmOwogCVBh Z2UJCXBhZ2U7CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwotCUhhc2hTY2FuUG9zSXRlbSAqY3Vy ckl0ZW07CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAKIAlwZ3N0YXRfY291bnRfaW5kZXhfc2Nh bihyZWwpOwogCWlmIChzY2FuLT5pbnN0cnVtZW50KQpAQCAtMzI2LDcgKzMxMyw3IEBAIF9oYXNo X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICogaXRlbXMg aW4gdGhlIGluZGV4LgogCSAqLwogCWlmIChjdXItPnNrX2ZsYWdzICYgU0tfSVNOVUxMKQotCQly ZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkgKiBPa2F5IHRvIGNvbXB1dGUg dGhlIGhhc2gga2V5LiAgV2Ugd2FudCB0byBkbyB0aGlzIGJlZm9yZSBhY3F1aXJpbmcgYW55CkBA IC00MTksMTkxICs0MDYsMTUyIEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpCiAJCQlfaGFzaF9yZWFkbmV4dChzY2FuLCAmYnVmLCAmcGFnZSwgJm9w YXF1ZSk7CiAJfQogCi0JLyogcmVtZW1iZXIgd2hpY2ggYnVmZmVyIHdlIGhhdmUgcGlubmVkLCBp ZiBhbnkgKi8KLQlBc3NlcnQoQnVmZmVySXNJbnZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpOwotCXNv LT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2gg Ki8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChzY2FuKTsKIAotCS8qIE5vdyBm aW5kIGFsbCB0aGUgdHVwbGVzIHNhdGlzZnlpbmcgdGhlIHF1YWxpZmljYXRpb24gZnJvbSBhIHBh Z2UgKi8KLQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCXJldHVybiBm YWxzZTsKKwkvKiBSZWFkIHRoZSBmaXJzdCBwYWdlIGFuZCBsb2FkIGl0ZW1zIGludG8gYWxsb2Nh dGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCBidWYsIGRpciwgYmF0Y2gp KQorCXsKKwkJaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgYmF0Y2gpOworCQlyZXR1 cm4gTlVMTDsKKwl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1cm4gKi8K LQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwot CXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCS8qIGlmIHdlJ3JlIGhl cmUsIF9oYXNoX3JlYWRwYWdlIGZvdW5kIGEgdmFsaWQgdHVwbGVzICovCi0JcmV0dXJuIHRydWU7 CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5nIG1hdGNoZWQgaXRlbXMgKi8KKwlyZXR1 cm4gYmF0Y2g7CiB9CiAKIC8qCi0gKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9t IGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisgKglfaGFzaF9yZWFkcGFnZSgp IC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGJhdGNoCiAgKgogICoJ V2Ugc2NhbiBhbGwgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGluZGV4IHBhZ2UgYW5kIHNhdmUg dGhlbSBpbnRvCi0gKglzby0+Y3VyclBvcyBpZiBpdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRp b24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCisgKgl0aGUgYmF0Y2ggaWYgdGhleSBzYXRpc2Z5IHRo ZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcwogICoJYXJlIGZvdW5kIGluIHRo ZSBjdXJyZW50IHBhZ2UsIHdlIG1vdmUgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZQogICoJ aW4gYSBidWNrZXQgY2hhaW4gYXMgaW5kaWNhdGVkIGJ5IHRoZSBkaXJlY3Rpb24uCiAgKgogICoJ UmV0dXJuIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGFyZSBmb3VuZCBlbHNlIHJldHVybiBm YWxzZS4KICAqLwogc3RhdGljIGJvb2wKLV9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpcikKK19oYXNoX3JlYWRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgQnVmZmVyIGJ1ZiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkgICBJbmRl eFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9u OwogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0J QnVmZmVyCQlidWY7CisJSGFzaEJhdGNoRGF0YSAqaGFzaGJhdGNoID0gSGFzaEJhdGNoR2V0RGF0 YShzY2FuLCBiYXRjaCk7CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CiAJ T2Zmc2V0TnVtYmVyIG9mZm51bTsKIAl1aW50MTYJCWl0ZW1JbmRleDsKIAotCWJ1ZiA9ICpidWZQ OwogCUFzc2VydChCdWZmZXJJc1ZhbGlkKGJ1ZikpOwogCV9oYXNoX2NoZWNrcGFnZShyZWwsIGJ1 ZiwgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKIAlwYWdlID0gQnVmZmVyR2V0 UGFnZShidWYpOwogCW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCi0Jc28tPmN1 cnJQb3MuYnVmID0gYnVmOwotCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tO dW1iZXIoYnVmKTsKKwloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwloYXNoYmF0Y2gtPmN1cnJQYWdl ID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKKwliYXRjaC0+ZGlyID0gZGlyOwogCiAJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCUJsb2NrTnVtYmVyIHByZXZfYmxr bm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0KIAkJZm9yICg7OykKIAkJewogCQkJLyogbmV3IHBh Z2UsIGxvY2F0ZSBzdGFydGluZyBwb3NpdGlvbiBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlvZmZu dW0gPSBfaGFzaF9iaW5zZWFyY2gocGFnZSwgc28tPmhhc2hzb19za19oYXNoKTsKIAotCQkJaXRl bUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBk aXIpOworCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFn ZSwgb2ZmbnVtLCBkaXIsCisJCQkJCQkJCQkJCQkgICBiYXRjaCk7CiAKIAkJCWlmIChpdGVtSW5k ZXggIT0gMCkKIAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBt YXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICogdGhlIG5l eHQgcGFnZS4gQmVmb3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueQot CQkJICoga2lsbGVkIGl0ZW1zLgorCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1 cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCB0cnkgdG8KKwkJCSAqIG1vdmUgdG8gdGhlIG5leHQg cGFnZQogCQkJICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9p dGVtcyhzY2FuKTsKLQotCQkJLyoKLQkJCSAqIElmIHRoaXMgaXMgYSBwcmltYXJ5IGJ1Y2tldCBw YWdlLCBoYXNob19wcmV2Ymxrbm8gaXMgbm90IGEgcmVhbAotCQkJICogYmxvY2sgbnVtYmVyLgot CQkJICovCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8 fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCi0J CQkJcHJldl9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJCWVsc2UKLQkJCQlwcmV2X2Js a25vID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87Ci0KIAkJCV9oYXNoX3JlYWRuZXh0KHNjYW4s ICZidWYsICZwYWdlLCAmb3BhcXVlKTsKLQkJCWlmIChCdWZmZXJJc1ZhbGlkKGJ1ZikpCi0JCQl7 Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCQkJCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0g QnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgot CQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHByZXZpb3VzIGJsb2NrIG51bWJlcnMgZm9yIHNjcm9s bGFibGUKLQkJCQkgKiBjdXJzb3JzIHRvIGtub3cgdGhlIHN0YXJ0IHBvc2l0aW9uIGFuZCByZXR1 cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5nIHRoYXQgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMg d2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBkb24ndCByZXNldCBjdXJyUGFnZSBvciBsc24sIGJl Y2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hhc2hfa2lsbF9pdGVtcyB0byBiZSBjYWxsZWQgZm9y IHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0JCQkJICogZnVuY3Rpb24gcmV0dXJucy4KLQkJCQkg Ki8KLQkJCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IHByZXZfYmxrbm87Ci0JCQkJc28tPmN1cnJQ b3MubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0g YnVmOworCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJCQkJcmV0dXJuIGZhbHNlOwotCQkJ fQorCisJCQloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCWhhc2hiYXRjaC0+Y3VyclBhZ2UgPSBC dWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQl9CiAKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVt ID0gMDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwotCQlzby0+Y3Vy clBvcy5pdGVtSW5kZXggPSAwOworCQliYXRjaC0+Zmlyc3RJdGVtID0gMDsKKwkJYmF0Y2gtPmxh c3RJdGVtID0gaXRlbUluZGV4IC0gMTsKIAl9CiAJZWxzZQogCXsKLQkJQmxvY2tOdW1iZXIgbmV4 dF9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQogCQlmb3IgKDs7KQogCQl7CiAJCQkvKiBu ZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJpbmFyeSBzZWFyY2ggKi8KIAkJ CW9mZm51bSA9IF9oYXNoX2JpbnNlYXJjaF9sYXN0KHBhZ2UsIHNvLT5oYXNoc29fc2tfaGFzaCk7 CiAKLQkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2Us IG9mZm51bSwgZGlyKTsKKwkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1z KHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyLAorCQkJCQkJCQkJCQkJICAgYmF0Y2gpOwogCiAJCQlp ZiAoaXRlbUluZGV4ICE9IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKIAkJCQlicmVhazsKIAogCQkJ LyoKLQkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJl bnQgcGFnZSwgbW92ZSB0bwotCQkJICogdGhlIHByZXZpb3VzIHBhZ2UuIEJlZm9yZSBsZWF2aW5n IHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aAotCQkJICogYW55IGtpbGxlZCBpdGVtcy4KKwkJ CSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFn ZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRvIHRoZSBwcmV2aW91cyBwYWdlCiAJCQkgKi8KLQkJCWlm IChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQlp ZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5j dXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJbmV4dF9ibGtu byA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCiAJCQlfaGFzaF9yZWFkcHJldihzY2FuLCAm YnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0JCQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQotCQkJewot CQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1 ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyoKLQkJ CQkgKiBSZW1lbWJlciBuZXh0IGFuZCBwcmV2aW91cyBibG9jayBudW1iZXJzIGZvciBzY3JvbGxh YmxlCi0JCQkJICogY3Vyc29ycyB0byBrbm93IHRoZSBzdGFydCBwb3NpdGlvbiBhbmQgcmV0dXJu IGZhbHNlCi0JCQkJICogaW5kaWNhdGluZyB0aGF0IG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIHdl cmUgZm91bmQuIEFsc28sCi0JCQkJICogZG9uJ3QgcmVzZXQgY3VyclBhZ2Ugb3IgbHNuLCBiZWNh dXNlIHdlIGV4cGVjdAotCQkJCSAqIF9oYXNoX2tpbGxfaXRlbXMgdG8gYmUgY2FsbGVkIGZvciB0 aGUgb2xkIHBhZ2UgYWZ0ZXIgdGhpcwotCQkJCSAqIGZ1bmN0aW9uIHJldHVybnMuCi0JCQkJICov Ci0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQkJc28t PmN1cnJQb3MubmV4dFBhZ2UgPSBuZXh0X2Jsa25vOwotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1 ZjsKKwkJCWlmICghQnVmZmVySXNWYWxpZChidWYpKQogCQkJCXJldHVybiBmYWxzZTsKLQkJCX0K KworCQkJaGFzaGJhdGNoLT5idWYgPSBidWY7CisJCQloYXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVm ZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAkJfQogCi0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9 IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBh Z2UgLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhJbmRleFR1cGxlc1BlclBhZ2Ug LSAxOworCQliYXRjaC0+Zmlyc3RJdGVtID0gaXRlbUluZGV4OworCQliYXRjaC0+bGFzdEl0ZW0g PSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwogCX0KIAotCWlmIChzby0+Y3VyclBvcy5idWYg PT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFz aHNvX3NwbGl0X2J1Y2tldF9idWYpCisJLyoKKwkgKiBTYXZlZCBhdCBsZWFzdCBvbmUgbWF0Y2gg aW4gYmF0Y2guaXRlbXNbXS4gIFByZXBhcmUgZm9yIGhhc2hnZXRiYXRjaCB0bworCSAqIHJldHVy biBpdCBieSBpbml0aWFsaXppbmcgcmVtYWluaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgorCSAq LworCWlmIChoYXNoYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKKwkJaGFz aGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQogCXsKLQkJc28tPmN1 cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCXNvLT5jdXJyUG9zLm5leHRQ YWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0JCUxvY2tCdWZmZXIoc28tPmN1cnJQb3Mu YnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkvKgorCQkgKiBCYXRjaCdzIGJ1ZmZlciBpcyBl aXRoZXIgdGhlIHByaW1hcnkgYnVja2V0LCBvciBhIGJ1Y2tldCBiZWluZworCQkgKiBwb3B1bGF0 ZWQgZHVlIHRvIGEgc3BsaXQuCisJCSAqCisJCSAqIEluY3JlbWVudCBsb2NhbCByZWZlcmVuY2Ug Y291bnQgc28gdGhhdCBiYXRjaCBnZXRzIGFuIGluZGVwZW5kZW50CisJCSAqIGJ1ZmZlciByZWZl cmVuY2UgdGhhdCBjYW4gYmUgcmVsZWFzZWQgKGJ5IHRoZSBjb3JlIGNvZGUvdGFibGUgQU0pCisJ CSAqIGJlZm9yZSB0aGUgaGFzaHNvX2J1Y2tldF9idWYvaGFzaHNvX3NwbGl0X2J1Y2tldF9idWYg cmVmZXJlbmNlcyBhcmUKKwkJICogcmVsZWFzZWQuCisJCSAqLworCQlJbmNyQnVmZmVyUmVmQ291 bnQoaGFzaGJhdGNoLT5idWYpOworCisJCS8qIENhbiBvbmx5IHVzZSBvcGFxdWUtPmhhc2hvX25l eHRibGtubyAqLworCQloYXNoYmF0Y2gtPnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwor CQloYXNoYmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87CiAJfQogCWVs c2UKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87 Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0JCV9o YXNoX3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXNvLT5jdXJyUG9zLmJ1ZiA9IElu dmFsaWRCdWZmZXI7CisJCS8qIENhbiB1c2Ugb3BhcXVlLT5oYXNob19wcmV2Ymxrbm8gYW5kIG9w YXF1ZS0+aGFzaG9fbmV4dGJsa25vICovCisJCWhhc2hiYXRjaC0+cHJldlBhZ2UgPSBvcGFxdWUt Pmhhc2hvX3ByZXZibGtubzsKKwkJaGFzaGJhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9f bmV4dGJsa25vOwogCX0KIAotCUFzc2VydChzby0+Y3VyclBvcy5maXJzdEl0ZW0gPD0gc28tPmN1 cnJQb3MubGFzdEl0ZW0pOworCS8qIHdlIHNhdmVkIG9uZSBvciBtb3JlIG1hdGNoZXMgaW4gYmF0 Y2guaXRlbXNbXSAqLworCWluZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2goc2NhbiwgYmF0Y2gsIGhh c2hiYXRjaC0+YnVmKTsKKworCUFzc2VydChiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0 SXRlbSk7CiAJcmV0dXJuIHRydWU7CiB9CiAKIC8qCiAgKiBMb2FkIGFsbCB0aGUgcXVhbGlmaWVk IGl0ZW1zIGZyb20gYSBjdXJyZW50IGluZGV4IHBhZ2UKLSAqIGludG8gc28tPmN1cnJQb3MuIEhl bHBlciBmdW5jdGlvbiBmb3IgX2hhc2hfcmVhZHBhZ2UuCisgKiBpbnRvIGJhdGNoLiBIZWxwZXIg ZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgogICovCiBzdGF0aWMgaW50CiBfaGFzaF9sb2Fk X3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKLQkJCQkJCSAg IE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQorCQkJCQkJICAgT2Zmc2V0 TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkgICBJbmRleFNjYW5CYXRj aCBiYXRjaCkKIHsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+ b3BhcXVlOwogCUluZGV4VHVwbGUJaXR1cDsKQEAgLTY0MCw3ICs1ODgsNyBAQCBfaGFzaF9sb2Fk X3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJCQlfaGFz aF9jaGVja3F1YWwoc2NhbiwgaXR1cCkpCiAJCQl7CiAJCQkJLyogdHVwbGUgaXMgcXVhbGlmaWVk LCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9m Zm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVt LCBpdHVwKTsKIAkJCQlpdGVtSW5kZXgrKzsKIAkJCX0KIAkJCWVsc2UKQEAgLTY4Nyw3ICs2MzUs NyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2Ug cGFnZSwKIAkJCXsKIAkJCQlpdGVtSW5kZXgtLTsKIAkJCQkvKiB0dXBsZSBpcyBxdWFsaWZpZWQs IHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJX2hhc2hfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2Zm bnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9zYXZlaXRlbShiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0s IGl0dXApOwogCQkJfQogCQkJZWxzZQogCQkJewpAQCAtNzA2LDEzICs2NTQsMTQgQEAgX2hhc2hf bG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJfQog fQogCi0vKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5k ZXhdICovCisvKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBiYXRjaC0+aXRlbXNbaXRlbUluZGV4 XSAqLwogc3RhdGljIGlubGluZSB2b2lkCi1faGFzaF9zYXZlaXRlbShIYXNoU2Nhbk9wYXF1ZSBz bywgaW50IGl0ZW1JbmRleCwKK19oYXNoX3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIGJhdGNoLCBp bnQgaXRlbUluZGV4LAogCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVw KQogewotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRl bUluZGV4XTsKKwlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0ZW0gPSAmYmF0Y2gtPml0ZW1zW2l0 ZW1JbmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAtPnRfdGlkOworCWN1cnJJdGVt LT50YWJsZVRpZCA9IGl0dXAtPnRfdGlkOwogCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51 bTsKKwljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSAwOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1 dGlsLmMKaW5kZXggMWQxYjA1Zjg3Li44OGEzZjNhZDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHV0aWwuYwpAQCAtMTYsMTAgKzE2LDggQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9oYXNoLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKLSNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5o IgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKLSNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogI2RlZmluZSBDQUxDX05FV19CVUNLRVQo b2xkX2J1Y2tldCwgbG93bWFzaykgXAogCQkJb2xkX2J1Y2tldCB8IChsb3dtYXNrICsgMSkKQEAg LTMzLDcgKzMxLDcgQEAgX2hhc2hfY2hlY2txdWFsKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhU dXBsZSBpdHVwKQogCS8qCiAJICogQ3VycmVudGx5LCB3ZSBjYW4ndCBjaGVjayBhbnkgb2YgdGhl IHNjYW4gY29uZGl0aW9ucyBzaW5jZSB3ZSBkbyBub3QKIAkgKiBoYXZlIHRoZSBvcmlnaW5hbCBp bmRleCBlbnRyeSB2YWx1ZSB0byBzdXBwbHkgdG8gdGhlIHNrX2Z1bmMuIEFsd2F5cwotCSAqIHJl dHVybiB0cnVlOyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0dHVwbGUgYWxyZWFkeSBzZXQgdGhlIHJl Y2hlY2sgZmxhZworCSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0YmF0Y2gg YWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxhZwogCSAqIHRvIG1ha2UgdGhlIG1haW4gaW5kZXhz Y2FuIGNvZGUgZG8gaXQuCiAJICovCiAjaWZkZWYgTk9UX1VTRUQKQEAgLTUwNSwxMjggKzUwMywz IEBAIF9oYXNoX2dldF9uZXdidWNrZXRfZnJvbV9vbGRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNr ZXQgb2xkX2J1Y2tldCwKIAogCXJldHVybiBuZXdfYnVja2V0OwogfQotCi0vKgotICogX2hhc2hf a2lsbF9pdGVtcyAtIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2Fs bGVyIGhhcwotICogdG9sZCB1cyB3ZXJlIGtpbGxlZC4KLSAqCi0gKiBzY2FuLT5vcGFxdWUsIHJl ZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdoIHNvLCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0 aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkIHR1cGxlcyB0aGVyZW9uIChnZW5lcmFsbHks IHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBpZiBzby0+bnVtS2lsbGVkID4gMCkuCi0g KgotICogVGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgcGFnZSBhbmQgbWF5 IG9yIG1heSBub3QgaGF2ZSB0aGUKLSAqIHBhZ2UgcGlubmVkIGluIGEgYnVmZmVyLiAgTm90ZSB0 aGF0IHJlYWQtbG9jayBpcyBzdWZmaWNpZW50IGZvciBzZXR0aW5nCi0gKiBMUF9ERUFEIHN0YXR1 cyAod2hpY2ggaXMgb25seSBhIGhpbnQpLgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHBp biBvbiBidWNrZXQgYnVmZmVyLCBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBwaW4KLSAqIG9uIG92 ZXJmbG93IGJ1ZmZlciwgYXMgaW5kaWNhdGVkIGJ5IEhhc2hTY2FuUG9zSXNQaW5uZWQoc28tPmN1 cnJQb3MpLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWlu ZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0bwotICogZGVsZXRlLgotICoKLSAqIFRoZXJlIGFy ZSBuZXZlciBhbnkgc2NhbnMgYWN0aXZlIGluIGEgYnVja2V0IGF0IHRoZSB0aW1lIFZBQ1VVTSBi ZWdpbnMsCi0gKiBiZWNhdXNlIFZBQ1VVTSB0YWtlcyBhIGNsZWFudXAgbG9jayBvbiB0aGUgcHJp bWFyeSBidWNrZXQgcGFnZSBhbmQgc2NhbnMKLSAqIGhvbGQgYSBwaW4uICBBIHNjYW4gY2FuIGJl Z2luIGFmdGVyIFZBQ1VVTSBsZWF2ZXMgdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UKLSAqIGJ1dCBi ZWZvcmUgaXQgZmluaXNoZXMgdGhlIGVudGlyZSBidWNrZXQsIGJ1dCBpdCBjYW4gbmV2ZXIgcGFz cyBWQUNVVU0sCi0gKiBiZWNhdXNlIFZBQ1VVTSBhbHdheXMgbG9ja3MgdGhlIG5leHQgcGFnZSBi ZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrIG9uCi0gKiB0aGUgcHJldmlvdXMgb25lLiAgVGhlcmVm b3JlLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFjY2lkZW50YWxseQotICoga2lsbGlu ZyBhIFRJRCB0aGF0IGhhcyBiZWVuIHJldXNlZCBmb3IgYW4gdW5yZWxhdGVkIHR1cGxlLgotICov Ci12b2lkCi1faGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlIYXNoU2Nh bk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCVJlbGF0aW9uCXJl bCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQmxvY2tOdW1iZXIgYmxrbm87Ci0JQnVmZmVyCQli dWY7Ci0JUGFnZQkJcGFnZTsKLQlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JT2Zmc2V0TnVtYmVy IG9mZm51bSwKLQkJCQltYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVkID0gc28tPm51bUtpbGxlZDsK LQlpbnQJCQlpOwotCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOwotCWJvb2wJCWhhdmVQ aW4gPSBmYWxzZTsKLQotCUFzc2VydChzby0+bnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KHNvLT5r aWxsZWRJdGVtcyAhPSBOVUxMKTsKLQlBc3NlcnQoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJy UG9zKSk7Ci0KLQkvKgotCSAqIEFsd2F5cyByZXNldCB0aGUgc2NhbiBzdGF0ZSwgc28gd2UgZG9u J3QgbG9vayBmb3Igc2FtZSBpdGVtcyBvbiBvdGhlcgotCSAqIHBhZ2VzLgotCSAqLwotCXNvLT5u dW1LaWxsZWQgPSAwOwotCi0JYmxrbm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKLQlpZiAoSGFz aFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JewotCQkvKgotCQkgKiBXZSBhbHJlYWR5 IGhhdmUgcGluIG9uIHRoaXMgYnVmZmVyLCBzbywgYWxsIHdlIG5lZWQgdG8gZG8gaXMKLQkJICog YWNxdWlyZSBsb2NrIG9uIGl0LgotCQkgKi8KLQkJaGF2ZVBpbiA9IHRydWU7Ci0JCWJ1ZiA9IHNv LT5jdXJyUG9zLmJ1ZjsKLQkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKLQl9 Ci0JZWxzZQotCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELCBMSF9P VkVSRkxPV19QQUdFKTsKLQotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7Ci0Jb3BhcXVlID0g SGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0JbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJl cihwYWdlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1LaWxsZWQ7IGkrKykKLQl7Ci0JCWludAkJ CWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJSGFzaFNjYW5Qb3NJdGVtICpjdXJy SXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCi0JCW9mZm51bSA9IGN1cnJJ dGVtLT5pbmRleE9mZnNldDsKLQotCQlBc3NlcnQoaXRlbUluZGV4ID49IHNvLT5jdXJyUG9zLmZp cnN0SXRlbSAmJgotCQkJICAgaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKLQot CQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKLQkJewotCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0 SXRlbUlkKHBhZ2UsIG9mZm51bSk7Ci0JCQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRleFR1cGxl KSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOwotCi0JCQlpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0 dXBsZS0+dF90aWQsICZjdXJySXRlbS0+aGVhcFRpZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRz b21ldGhpbmcpCi0JCQkJewotCQkJCQkvKgotCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJh c3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgotCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hp bGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxv d2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1 ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKLQkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJ fQotCi0JCQkJLyogZm91bmQgdGhlIGl0ZW0gKi8KLQkJCQlJdGVtSWRNYXJrRGVhZChpaWQpOwot CQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7Ci0JCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVy IHNlYXJjaCBsb29wICovCi0JCQl9Ci0JCQlvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51 bSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFNpbmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRlciBp ZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4gV2hlbmV2ZXIKLQkgKiB3ZSBtYXJrIGFueXRo aW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKLQkgKiBMSF9QQUdFX0hBU19ERUFE X1RVUExFUyBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEgaGludC4KLQkgKi8KLQlpZiAo a2lsbGVkc29tZXRoaW5nKQotCXsKLQkJb3BhcXVlLT5oYXNob19mbGFnIHw9IExIX1BBR0VfSEFT X0RFQURfVFVQTEVTOwotCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhidWYsIHRydWUsIHRydWUp OwotCX0KLQotdW5sb2NrX3BhZ2U6Ci0JaWYgKGhhdmVQaW4pCi0JCUxvY2tCdWZmZXIoc28tPmN1 cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwotCWVsc2UKLQkJX2hhc2hfcmVsYnVmKHJl bCwgYnVmKTsKLX0KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mv c3JjL3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IGYwMmQzNmMyZi4uMzhiNmE0MDA0IDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFt LnNnbWwKQEAgLTczNSw3ICs3MzUsOCBAQCBhbWJlZ2luc2NhbiAoUmVsYXRpb24gaW5kZXhSZWxh dGlvbiwKICAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVyYWw+IGhlcmUsIGlu CiAgICA8ZnVuY3Rpb24+YW1iZWdpbnNjYW48L2Z1bmN0aW9uPiwgc2luY2UgdGhlIHZhbHVlIGFw cGxpZXMgdG8gZXZlcnkgaXRlbSB0aGUKICAgIHNjYW4gcmV0dXJucy4gIFRoZSB2YWx1ZSBzZXQg aGVyZSBwZXJzaXN0cyBhY3Jvc3MgYW55IHN1YnNlcXVlbnQKLSAgIDxmdW5jdGlvbj5hbXJlc2Nh bjwvZnVuY3Rpb24+IGNhbGxzLiAgQi10cmVlIChhbHdheXMgZmFsc2UpIHdvcmsgdGhpcyB3YXku CisgICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBjYWxscy4gIEItdHJlZSAoYWx3YXlz IGZhbHNlKSBhbmQgaGFzaCAoYWx3YXlzCisgICB0cnVlKSB3b3JrIHRoaXMgd2F5LgogICA8L3Bh cmE+CiAKICAgPHBhcmE+CkBAIC04NzMsNyArODc0LDggQEAgYW1nZXRiYXRjaCAoSW5kZXhTY2Fu RGVzYyBzY2FuLAogICAgSXQgaXMgdXAgdG8gdGhlIHRhYmxlIEFNIGNhbGxlciB0byBkZWNpZGUg d2hlbiBpdCBzaG91bGQgYmUgcmVsZWFzZWQuICBOb3RlCiAgICBhbHNvIHRoYXQgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgbXVzdCBuZXZlciBtb2RpZnkgdGhlCiAg ICA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+IHBhcmFtZXRlci4gIFRoZSBj b3JlCi0gICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS88L2ZpbGVuYW1lPiBp bXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhCisgICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS88L2ZpbGVuYW1lPiBhbmQKKyAgIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC88L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZQogICAgcmVmZXJlbmNlIGV4 YW1wbGVzIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZS4K ICAgPC9wYXJhPgogCkBAIC05MjgsMTIgKzkzMCwxMiBAQCBhbXVuZ3VhcmRiYXRjaCAoSW5kZXhT Y2FuRGVzYyBzY2FuLAogICAgbGVhZiBwYWdlLCB3aGljaCBwcmV2ZW50cyBjb25jdXJyZW50IFRJ RCByZWN5Y2xpbmcgYnkKICAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uCiAgICBGb3JtYWxs eSwgYW4gaW5kZXggQU0gbWF5IGhvbGQgYSBkaWZmZXJlbnQga2luZCBvZiBpbnRlcmxvY2ssIG9y IG11bHRpcGxlCi0gICBpbnRlcmxvY2tzLCBpbiBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhLCBi dXQgaW4gcHJhY3RpY2UgdGhlIGJ1aWx0LWluCi0gICBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gJm1kYXNoOyBCLXRyZWUKLSAgICZtZGFzaDsg aG9sZHMgYSBzaW5nbGUgYnVmZmVyIHBpbi4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2Nr aW5nIi8+IGZvcgotICAgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGlu ZGV4IHNjYW5zLiAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlCi0gICBjYWxsZWQgYXQgbW9zdCBvbmNl IGZvciBlYWNoIGd1YXJkZWQgYmF0Y2g7IGl0IGlzIG5vdCBjYWxsZWQgd2hlbiB0aGUgaW5kZXgK LSAgIEFNIGhhcyBhbHJlYWR5IHVuZ3VhcmRlZCB0aGUgYmF0Y2ggaXRzZWxmIChhcyBpdCBkb2Vz IHdoZW4KKyAgIGludGVybG9ja3MsIGluIGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEsIGJ1dCBp biBwcmFjdGljZSBib3RoIGJ1aWx0LWluCisgICBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gJm1kYXNoOyBCLXRyZWUgYW5kCisgICBoYXNoICZt ZGFzaDsgaG9sZCBhIHNpbmdsZSBidWZmZXIgcGluLiAgU2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4 LWxvY2tpbmciLz4KKyAgIGZvciBkZXRhaWxzIG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudCBkdXJp bmcgaW5kZXggc2NhbnMuICBUaGlzIGZ1bmN0aW9uCisgICB3aWxsIGJlIGNhbGxlZCBhdCBtb3N0 IG9uY2UgZm9yIGVhY2ggZ3VhcmRlZCBiYXRjaDsgaXQgaXMgbm90IGNhbGxlZCB3aGVuCisgICB0 aGUgaW5kZXggQU0gaGFzIGFscmVhZHkgdW5ndWFyZGVkIHRoZSBiYXRjaCBpdHNlbGYgKGFzIGl0 IGRvZXMgd2hlbgogICAgPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0 ZmllbGQ+IGlzIHRydWUsIHdoaWNoIGlzIHRoZQogICAgY29tbW9uIGNhc2UpLgogICA8L3BhcmE+ CkBAIC05NzMsOCArOTc1LDggQEAgYW1raWxsaXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2Fu LAogICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbmRleCBBTXMgKHRob3NlIHRo YXQgZG9uJ3QgY2FuIGxlYXZlCiAgICB0aGUgZmllbGQgc2V0IHRvIDxsaXRlcmFsPk5VTEw8L2xp dGVyYWw+KSwgYnV0IGRvaW5nIHNvIGlzIHJlY29tbWVuZGVkIGZvcgogICAgcGVyZm9ybWFuY2Us IGFzIGl0IGFsbG93cyBmdXR1cmUgc2NhbnMgdG8gc2tpcCBrbm93bi1kZWFkIGluZGV4IGVudHJp ZXMuCi0gICBUaGUgY29yZSBpbmRleCBhY2Nlc3MgbWV0aG9kIHRoYXQgY3VycmVudGx5IHN1cHBv cnRzCi0gICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IChCLXRyZWUpIGltcGxlbWVu dHMKKyAgIEJvdGggY29yZSBpbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IGN1cnJlbnRseSBzdXBw b3J0CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IChCLXRyZWUgYW5kIGhhc2gp IGltcGxlbWVudAogICAgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gbWFya2luZywgdGhvdWdo IHRoaXJkLXBhcnR5IGluZGV4IGFjY2VzcyBtZXRob2RzCiAgICBhcmUgZnJlZSB0byBjaG9vc2Ug d2hldGhlciB0byBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlLiAgVGhlIHRhYmxlIEFNIG1heQogICAg Y2FsbCA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3NjYW5wb3Nfa2lsbGl0ZW08L2Z1bmN0aW9uPiB0 byBtYXJrIGRlYWQgaXRlbXMgYXMKQEAgLTEwMTQsNyArMTAxNiw4IEBAIGFta2lsbGl0ZW1zYmF0 Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gcmVj eWNsaW5nIHRhYmxlIFRJRHMgJm1kYXNoOyBzbyBpdCB3b3VsZCBiZQogICAgdW5zYWZlIHRvIGFz c3VtZSB0aGF0IGluZGV4IGVudHJpZXMgc3RpbGwgcG9pbnQgdG8gdGhlIHNhbWUgaGVhcC90YWJs ZQogICAgdHVwbGVzLiAgU2luY2UgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gbWFya2luZyBp cyBvbmx5IGFuIG9wdGltaXphdGlvbgotICAgaGludCwgaXQgaXMgYWx3YXlzIHNhZmUgdG8gc2tp cCBpdC4gIEItdHJlZSB1c2VzIHRoaXMgYXBwcm9hY2guCisgICBoaW50LCBpdCBpcyBhbHdheXMg c2FmZSB0byBza2lwIGl0LiAgQm90aCBCLXRyZWUgYW5kIGhhc2ggdXNlIHRoaXMKKyAgIGFwcHJv YWNoLgogICA8L3BhcmE+CiAKICAgPHdhcm5pbmc+CkBAIC0xMTA0LDggKzExMDcsOCBAQCBhbWdl dGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9m dW5jdGlvbj4gc2NhbnM7IGR1cmluZwogICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBzY2FucyB0aGUgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4KICAgIGlzIHN0cmljdGx5 IG93bmVkIGJ5IHRoZSBjYWxsZXIgKHRoZSB0YWJsZSBBTSksIGFuZCB0aGUgaW5kZXggQU0gbXVz dAotICAgbmV2ZXIgcmVsZWFzZSBpdC4gIFNlZSA8ZnVuY3Rpb24+X2J0X25leHQ8L2Z1bmN0aW9u PiBmb3IgYSByZWZlcmVuY2UKLSAgIGV4YW1wbGUuCisgICBuZXZlciByZWxlYXNlIGl0LiAgU2Vl IDxmdW5jdGlvbj5fYnRfbmV4dDwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPl9oYXNoX25l eHQ8L2Z1bmN0aW9uPiBmb3IgcmVmZXJlbmNlIGV4YW1wbGVzLgogICA8L3BhcmE+CiAKICAgPHBh cmE+CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDZmNTgwYjJjMS4uMjY3YWMxNDYyIDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTIzMyw2ICsxMjMzLDcgQEAgSGFzaAogSGFz aEFnZ0JhdGNoCiBIYXNoQWdnU3BpbGwKIEhhc2hBbGxvY0Z1bmMKK0hhc2hCYXRjaERhdGEKIEhh c2hCdWlsZFN0YXRlCiBIYXNoQnVsa0RlbGV0ZVN0cmVhbVByaXZhdGUKIEhhc2hDb21wYXJlRnVu YwpAQCAtMTI1NCw4ICsxMjU1LDYgQEAgSGFzaFBhZ2VTdGF0CiBIYXNoUGF0aAogSGFzaFNjYW5P cGFxdWUKIEhhc2hTY2FuT3BhcXVlRGF0YQotSGFzaFNjYW5Qb3NEYXRhCi1IYXNoU2NhblBvc0l0 ZW0KIEhhc2hTa2V3QnVja2V0CiBIYXNoU3RhdGUKIEhhc2hWYWx1ZUZ1bmMKLS0gCjIuNTMuMAoK --0000000000000468e006539f51e8 Content-Type: application/octet-stream; name="v26-0005-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Disposition: attachment; filename="v26-0005-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq31b3em5 RnJvbSBiZGZiZmQwYTllNmVkN2Q2NTJmMWE2ZDE5NDc4OTBhZmQxZWY1MzIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MjI6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNiA1LzldIGhl YXBhbTogT3B0aW1pemUgcGluIHRyYW5zZmVycyBkdXJpbmcgaW5kZXggc2NhbnMuCgpBZGQgYW4g eHNfbGFzdGluYmxvY2sgZmxhZyB0byBJbmRleEZldGNoSGVhcERhdGEgdGhhdCB0cmFja3Mgd2hl dGhlciB0aGUKY3VycmVudCBUSUQgaXMgdGhlIGxhc3Qgb25lIG9uIGl0cyBoZWFwIGJsb2NrIHdp dGhpbiB0aGUgY3VycmVudCBiYXRjaC4KV2hlbiBpdCBpcywgaGVhcGFtX2luZGV4X2hlYXBfZmV0 Y2ggY2FuIHRyYW5zZmVyIGl0cyBidWZmZXIgcGluIHRvIHRoZQpzbG90ICh2aWEgRXhlY1N0b3Jl UGlubmVkQnVmZmVySGVhcFR1cGxlKSBpbnN0ZWFkIG9mIGluY3JlbWVudGluZyB0aGUKcGluIGNv dW50LCBzYXZpbmcgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZDb3VudC9SZWxlYXNlQnVmZmVyIGNh bGxzLgpUaGlzIG9wdGltaXphdGlvbiBpcyBub3QgdXNlZCBmb3IgaW5kZXgtb25seSBzY2FucyBi ZWNhdXNlIGFsbC12aXNpYmxlCml0ZW1zIGNhbiBiZSBza2lwcGVkLCB3aGljaCB3b3VsZCBicmVh ayBibG9jayBkZWR1cGxpY2F0aW9uIHN5bW1ldHJ5CmJldHdlZW4gdGhlIHNjYW4gYW5kIHRoZSBy ZWFkIHN0cmVhbSAoYmVzaWRlcywgdGhlIHBlcmZvcm1hbmNlIG9mIHRoaXMKY29kZSBwYXRoIGNh biBvbmx5IG1hdHRlciB3aGVuIG1hbnkgaGVhcCBmZXRjaGVzIGFyZSByZXF1aXJlZCwgd2hpY2gg aXMKaG9wZWZ1bGx5IHJhcmUgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMpLgoKQWxzbyBhZGQgYW4g ZXhwbGljaXQgRXhlY0NsZWFyVHVwbGUgdG8gdGhlIGJsb2NrLXN3aXRjaCBwYXRoIGluCmhlYXBh bV9pbmRleF9oZWFwX2ZldGNoIHRvIHJlbGVhc2UgdGhlIHBpbiB0cmFuc2ZlcnJlZCB0byB0aGUg c2xvdCBvbgp0aGUgcHJldmlvdXMgY2FsbCAoanVzdCBiZWZvcmUgY2FsbGluZyBSZWxlYXNlQnVm ZmVyIGFzIHBhcnQgb2YgbW92aW5nCm9uIHRvIHRoZSBzY2FuJ3MgbmV4dCBibG9jaykuICBUaGlz IGZpeGVzIGEgcGVyZm9ybWFuY2UgcHJvYmxlbSB3aGVyZQp0aGUgY29kZSBwYXRoIGluIHF1ZXN0 aW9uIHRyaWdnZXJzIEdldFByaXZhdGVSZWZDb3VudEVudHJ5U2xvdyBjYWxscwptb3JlIG9mdGVu IHRoYW4gb25lIHdvdWxkIGhvcGUuICBUaGUgdW5kZXJseWluZyBpc3N1ZSBoYXMgYmVlbiB0aWVk IHRvCnRoZSBwaW4gaW4gdGhlIHNsb3QgYmVpbmcgaGVsZCwgZXZlbiBpZiB3ZSBkZWNpZGUgdG8g cmVsZWFzZSB0aGUgYnVmZmVyCmFuZCBtb3ZlIG9uOiBFeGVjU3RvcmVCdWZmZXJIZWFwVHVwbGUg d2lsbCBmaXJzdCBmYWlsIHRvIGhpdCB0aGUKYmFja2VuZC1sb2NhbCBjYWNoZSBmb3IgdGhlIHJl bGVhc2Ugb2YgdGhlIG9sZCBwaW4gKGJlY2F1c2Ugd2UganVzdApwaW5uZWQgYW5kIGxvY2tlZCB0 aGUgbmV3IGJ1ZmZlciksIGNhdXNpbmcgYSBjYWNoZSBtaXNzIGluc2lkZQpJbmNyQnVmZmVyUmVm Q291bnQuCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KU3VnZ2VzdGVkLWJ5 OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLWJ5OiBBbmRyZXMg RnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vQ0FIMi1Xej1ENExydTlCa3ZxYVJuRlJQRGFaYmZUT2RXY3h3MTN6eUc2R1ZGVHR6X3Z3QG1h aWwuZ21haWwuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAg ICAgIHwgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIHwg NzUgKysrKysrKysrKysrKysrKysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCA3NiBpbnNlcnRpb25z KCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFw YW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCAyOTRhYTBhNGUuLmFiZWY2 MTYwNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTMyLDYgKzEzMiw5IEBAIHR5cGVkZWYgc3RydWN0 IEluZGV4RmV0Y2hIZWFwRGF0YQogCiAJYm9vbAkJeHNfcmVhZG9ubHk7CS8qIHNjYW4gaXMgcmVh ZC1vbmx5PyAqLwogCisJLyogUGxhaW4gaW5kZXggc2NhbiB4c19sYXN0aW5ibG9jayBvcHRpbWl6 YXRpb24gKi8KKwlib29sCQl4c19sYXN0aW5ibG9jazsgLyogbGFzdCBUSUQgb24gdGhpcyBibG9j ayBpbiBjdXJyZW50IGJhdGNoPyAqLworCiAJLyogUGVyLXR1cGxlIGNvbnRleHQgZm9yIHBhZGRp bmcgIm5hbWUiIGNvbHVtbnMgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMgKi8KIAlNZW1vcnlDb250 ZXh0IHhzX2l0dXBfY3h0OwogfSBJbmRleEZldGNoSGVhcERhdGE7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKaW5kZXggNzU2NTNkMWEwLi43M2U4Y2ZmNzggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTE1Nyw2ICsx NTcsOSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4oSW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50 MzIgZmxhZ3MpCiAJLyogUmVtZW1iZXIgaWYgc2NhbiBpcyByZWFkLW9ubHkgKi8KIAloc2Nhbi0+ eHNfcmVhZG9ubHkgPSAoZmxhZ3MgJiBTT19ISU5UX1JFTF9SRUFEX09OTFkpICE9IDA7CiAKKwkv KiB4c19sYXN0aW5ibG9jayBvcHRpbWl6YXRpb24gc3RhdGUgKi8KKwlBc3NlcnQoIWhzY2FuLT54 c19sYXN0aW5ibG9jayk7CisKIAkvKiBSZXNvbHZlIHdoaWNoIHhzX2dldG5leHRfc2xvdCBpbXBs ZW1lbnRhdGlvbiB0byB1c2UgZm9yIHRoaXMgc2NhbiAqLwogCWlmIChzY2FuLT5pbmRleFJlbGF0 aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKQogCXsKQEAgLTgxMiw2ICs4MTUsMTUg QEAgaGVhcGFtX2luZGV4X2hlYXBfZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNo SGVhcERhdGEgKmhzY2FuLAogCQkvKiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidzIGJsb2NrIG51bWJl ciBmb3IgbmV4dCB0aW1lICovCiAJCWhzY2FuLT54c19ibGsgPSBJdGVtUG9pbnRlckdldEJsb2Nr TnVtYmVyKHRpZCk7CiAKKwkJLyoKKwkJICogRHJvcCB0aGUgeHNfYmxrIHBpbiBpbmRlcGVuZGVu dGx5IGhlbGQgb24gYnkgc2xvdCAoaWYgYW55KSBub3csCisJCSAqIGJlZm9yZSBjYWxsaW5nIFJl bGVhc2VCdWZmZXIuICBUaGlzIGF2b2lkcyBleHBlbnNpdmUgY2FsbHMgdG8KKwkJICogR2V0UHJp dmF0ZVJlZkNvdW50RW50cnlTbG93IGNhdXNlZCBieSBFeGVjU3RvcmVCdWZmZXJIZWFwVHVwbGUK KwkJICogZmFpbGluZyB0byBoaXQgdGhlIGJhY2tlbmQncyBjYWNoZSBmb3IgdGhlIHJlbGVhc2Ug b2YgdGhlIG9sZCBwaW4uCisJCSAqLworCQlpZiAoIWluZGV4X29ubHkpCisJCQlFeGVjQ2xlYXJU dXBsZShzbG90KTsKKwogCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJCQlS ZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIApAQCAtODUwLDcgKzg2MiwzNCBAQCBoZWFw YW1faW5kZXhfaGVhcF9mZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0 YSAqaHNjYW4sCiAJCWlmICghaW5kZXhfb25seSkKIAkJewogCQkJc2xvdC0+dHRzX3RhYmxlT2lk ID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOwotCQkJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKGhl YXBUdXBsZSwgc2xvdCwgaHNjYW4tPnhzX2NidWYpOworCisJCQkvKgorCQkJICogSWYgdGhpcyBp cyB0aGUgbGFzdCBUSUQgb24gdGhlIGN1cnJlbnQgaGVhcCBibG9jayB3aXRoaW4gdGhlCisJCQkg KiBiYXRjaCwgdHJhbnNmZXIgb3VyIGJ1ZmZlciBwaW4gdG8gdGhlIHNsb3QgcmF0aGVyIHRoYW4g aGF2aW5nCisJCQkgKiB0aGUgc2xvdCBpbmNyZW1lbnQgdGhlIHBpbiBjb3VudC4gIFRoaXMgc2F2 ZXMgYSBwYWlyIG9mCisJCQkgKiBJbmNyQnVmZmVyUmVmQ291bnQgYW5kIFJlbGVhc2VCdWZmZXIg Y2FsbHMsIHNpbmNlIHRoZSBjYWxsZXIKKwkJCSAqIHdvdWxkIGp1c3QgcmVsZWFzZSBpdHMgcGlu IG9uIHhzX2NidWYgd2hlbiBzd2l0Y2hpbmcgdG8gdGhlCisJCQkgKiBuZXh0IGJsb2NrIGFueXdh eS4KKwkJCSAqCisJCQkgKiBXZSBjYW4gb25seSBkbyB0aGlzIHdoZW4gaGVhcF9jb250aW51ZSBp cyBmYWxzZSwgc2luY2UKKwkJCSAqIG90aGVyd2lzZSB0aGUgY2FsbGVyIHdpbGwgbmVlZCB4c19j YnVmIHRvIHJlbWFpbiB2YWxpZCBmb3IgdGhlCisJCQkgKiBuZXh0IGNhbGwuCisJCQkgKi8KKwkJ CWlmIChoc2Nhbi0+eHNfbGFzdGluYmxvY2sgJiYgISpoZWFwX2NvbnRpbnVlKQorCQkJeworCQkJ CUV4ZWNTdG9yZVBpbm5lZEJ1ZmZlckhlYXBUdXBsZShoZWFwVHVwbGUsIHNsb3QsIGhzY2FuLT54 c19jYnVmKTsKKwkJCQloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJCQkJaHNjYW4t PnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKKworCQkJCS8qCisJCQkJICogTm90ZTogdGhl IHBpbiBub3cgb3duZWQgYnkgdGhlIHNsb3QgaXMgZXhwZWN0ZWQgdG8gYmUKKwkJCQkgKiByZWxl YXNlZCBvbiB0aGUgbmV4dCBjYWxsIGhlcmUsIHZpYSBhbiBleHBsaWNpdAorCQkJCSAqIEV4ZWND bGVhclR1cGxlLiAgVGhpcyBhdm9pZHMgY2h1cm4gaW4gdGhlIGJhY2tlbmQncyBwcml2YXRlCisJ CQkJICogcmVmY291bnQgY2FjaGUuCisJCQkJICovCisJCQl9CisJCQllbHNlCisJCQkJRXhlY1N0 b3JlQnVmZmVySGVhcFR1cGxlKGhlYXBUdXBsZSwgc2xvdCwgaHNjYW4tPnhzX2NidWYpOwogCQl9 CiAKIAkJcGdzdGF0X2NvdW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7CkBAIC0x MDE2LDE1ICsxMDU1LDQ3IEBAIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAogCiAJaWYgKGFsbF92aXNp YmxlID09IE5VTEwpCiAJeworCQlpbnQJCQluZXh0SXRlbTsKKwkJYm9vbAkJaGFzTmV4dDsKKwog CQkvKgogCQkgKiBQbGFpbiBpbmRleCBzY2FuLgorCQkgKgorCQkgKiBEZXRlcm1pbmUgaWYgdGhl IG5leHQgaXRlbSBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiBpcyBvbiBhCisJCSAqIGRp ZmZlcmVudCBoZWFwIGJsb2NrLiAgV2hlbiBpdCBpcywgaGVhcGFtX2luZGV4X2hlYXBfZmV0Y2gg Y2FuCisJCSAqIHRyYW5zZmVyIGl0cyBidWZmZXIgcGluIHRvIHRoZSBzbG90IGluc3RlYWQgb2Yg aW5jcmVtZW50aW5nIHRoZSBwaW4KKwkJICogY291bnQsIHNhdmluZyBhIHBhaXIgb2YgSW5jckJ1 ZmZlclJlZkNvdW50L1JlbGVhc2VCdWZmZXIgY2FsbHMuCisJCSAqCisJCSAqIE5vdGU6IFdlIGNh bm5vdCBkbyB0aGlzIGZvciBpbmRleC1vbmx5IHNjYW5zIGJlY2F1c2UgYWxsLXZpc2libGUKKwkJ ICogaXRlbXMgYXJlIHNraXBwZWQgYnkgYm90aCB0aGUgc2NhbiBhbmQgdGhlIHJlYWQgc3RyZWFt IGNhbGxiYWNrLiBJdAorCQkgKiBkb2Vzbid0IHNlZW0gd29ydGggdGhlIHRyb3VibGUgb2YgcmVh c29uaW5nIGFib3V0IHRoZXNlIGlzc3VlcywKKwkJICogc2luY2UgdGhlIG9wdGltaXphdGlvbiBv bmx5IGhlbHBzIHdoZW4gaGVhcCBmZXRjaGVzIGFyZSByZXF1aXJlZC4KKwkJICoKKwkJICogTm90 ZTogV2UgZGVsaWJlcmF0ZWx5IGRvbid0IGNvbnNpZGVyIHRoZSBiYXRjaCBhZnRlciBzY2FuQmF0 Y2gsCisJCSAqIGJlY2F1c2UgZG9pbmcgc28gd291bGQgYWRkIGNvbXBsZXhpdHkgZm9yIGxpdHRs ZSBiZW5lZml0LiAgSXQncworCQkgKiBva2F5IGlmIHhzX2xhc3RpbmJsb2NrIGlzIHNwdXJpb3Vz bHkgc2V0IHRvIGZhbHNlLgogCQkgKi8KIAkJQXNzZXJ0KCFzY2FuLT54c193YW50X2l0dXApOwor CQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQl7CisJCQluZXh0SXRl bSA9IHNjYW5Qb3MtPml0ZW0gKyAxOworCQkJaGFzTmV4dCA9IChuZXh0SXRlbSA8PSBzY2FuQmF0 Y2gtPmxhc3RJdGVtKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCW5leHRJdGVtID0gc2NhblBvcy0+ aXRlbSAtIDE7CisJCQloYXNOZXh0ID0gKG5leHRJdGVtID49IHNjYW5CYXRjaC0+Zmlyc3RJdGVt KTsKKwkJfQorCisJCWhzY2FuLT54c19sYXN0aW5ibG9jayA9IGhhc05leHQgJiYKKwkJCUl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIoJnNjYW5CYXRjaC0+aXRlbXNbbmV4dEl0ZW1dLnRhYmxlVGlk KSAhPQorCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmc2Nhbi0+eHNfaGVhcHRpZCk7CisK IAkJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOwogCX0KIAogCS8qIEluZGV4LW9ubHkgc2NhbiAq LwotCUFzc2VydChzY2FuLT54c193YW50X2l0dXApOworCUFzc2VydChzY2FuLT54c193YW50X2l0 dXAgJiYgIWhzY2FuLT54c19sYXN0aW5ibG9jayk7CiAKIAkvKgogCSAqIFVubGVzcyB0aGUgaW5k ZXggQU0gYWxyZWFkeSBwcm9kdWNlZCB0aGUgcmV0dXJuYWJsZSB0dXBsZSB2aWEKLS0gCjIuNTMu MAoK --0000000000000468e006539f51e8 Content-Type: application/octet-stream; name="v26-0002-Add-amgetbatch-interface-and-adopt-it-in-nbtree.patch" Content-Disposition: attachment; filename="v26-0002-Add-amgetbatch-interface-and-adopt-it-in-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq31b3f88 RnJvbSBkM2Q5MjAwNDU0NGUxOTZhNDk3OTA3NjI3MGI2ZGM2ZWUyOTZlMWU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NDg6NDMgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNiAyLzldIEFk ZCBhbWdldGJhdGNoIGludGVyZmFjZSBhbmQgYWRvcHQgaXQgaW4gbmJ0cmVlLgoKQWRkIGEgbmV3 IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2VzcyBt ZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbiBpbmRleCBzY2FucyBhbmQgaW5kZXgtb25seSBzY2Fu cyB0aGF0IHJldHVybiBpbmRleAplbnRyaWVzIGluIGJhdGNoZXMgY29tcHJpc2luZyBhbGwgbWF0 Y2hpbmcgaXRlbXMgZnJvbSBhbiBpbmRleCBwYWdlLApyYXRoZXIgdGhhbiBvbmUgbWF0Y2ggYXQg YSB0aW1lLiAgQWxzbyBzd2l0Y2ggbmJ0cmVlIG92ZXIgZnJvbQphbWdldHR1cGxlIHRvIHRoZSBu ZXcgYW1nZXRiYXRjaCBpbnRlcmZhY2UuCgpUaGUgbmV3IGludGVyZmFjZSBhbGxvd3MgdGhlIHRh YmxlIEFNIHRvIGFwcGx5IGtub3dsZWRnZSBvZiB3aGljaCBUSURzCndpbGwgYmUgcmV0dXJuZWQg dG8gdGhlIHNjYW4gaW4gdGhlIG5lYXIgZnV0dXJlIHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucwps aWtlIEkvTyBwcmVmZXRjaGluZy4gIFByZWZldGNoaW5nIGlzIHNldCB0byBiZSBhZGRlZCBieSBh biB1cGNvbWluZyBjb21taXQuCgpXaXRoIGFtZ2V0YmF0Y2gsIGEgc2Nhbi1sZXZlbCBwb2xpY3kg ZGV0ZXJtaW5lcyB3aGV0aGVyIGVhY2ggYmF0Y2gncwppbmRleCBwYWdlIGJ1ZmZlciBwaW4gaXMg ZHJvcHBlZCBlYWdlcmx5IGJ5IHRoZSBpbmRleCBBTSAoZm9yIHBsYWluCnNjYW5zIHdpdGggYW4g TVZDQyBzbmFwc2hvdCwgd2hlcmUgdGhlIHNuYXBzaG90IGl0c2VsZiBwcmV2ZW50cyBUSUQKcmVj eWNsaW5nIHByb2JsZW1zKSBvciByZXRhaW5lZCBhcyBhbiBpbnRlcmxvY2sgYWdhaW5zdCBjb25j dXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgVGhlIGludGVybG9jayBpcyByZXRhaW5l ZCBmb3IgcGxhaW4gbm9uLU1WQ0Mgc2NhbnMKYW5kIGZvciBpbmRleC1vbmx5IHNjYW5zLCBhbmQg aXMgZHJvcHBlZCBieSB0aGUgdGFibGUgQU0gdmlhIHRoZSBuZXcKYW11bmd1YXJkYmF0Y2ggY2Fs bGJhY2sgd2hlbiBpdCBpcyBzYWZlIHRvIGRvIHNvLiAoQWN0dWFsbHksIGluZGV4IEFNcwphcmUg dXN1YWxseSBhYmxlIHRvIGRyb3AgdGhlIHBpbiBhdCB0aGUgc2FtZSB0aW1lIHRoYXQgdGhleSBy ZWxlYXNlIHRoZQpsb2NrLiAgSW4gcHJhY3RpY2UsIHRoZSBhbXVuZ3VhcmRiYXRjaCBjYWxsYmFj ayBpcyBvbmx5IHJlYWxseSBuZWVkZWQKZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMsIHdoZXJlIGRy b3BwaW5nIHRoZSBwaW4gaW50ZXJsb2NrIG1pZ2h0IG5lZWQgdG8KYmUgZGVsYXllZCBldmVyIHNv IHNsaWdodGx5LCBhcyBleHBsYWluZWQgYmVsb3cuKQoKVGhpcyBleHRlbmRzIHRoZSBkcm9wUGlu IG1lY2hhbmlzbSBhZGRlZCB0byBuYnRyZWUgYnkgY29tbWl0IDJlZDViODdmLAphbmQgZ2VuZXJh bGl6ZXMgaXQgdG8gd29yayB3aXRoIGFsbCBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IHRoZSBuZXcK YW1nZXRiYXRjaCBpbnRlcmZhY2UgKExQX0RFQUQgbWFya2luZyBvZiBpbmRleCBlbnRyaWVzIG11 c3QgYmUgcGVyZm9ybWVkCmJ5IGltcGxlbWVudGluZyB0aGUgbmV3IGFta2lsbGl0ZW1zYmF0Y2gg Y2FsbGJhY2ssIHdoaWNoIGhhcyBhCmRvY3VtZW50ZWQgY29udHJhY3QgZGVzY3JpYmluZyBob3cg aW5kZXggQU1zIG11c3QgcmVhc29uIGFib3V0CmNvbmN1cnJlbnQgVElEIHJlY3ljbGluZykuICBT Y2FucyBjYW4gYWx3YXlzIHNhZmVseSBkcm9wIGluZGV4IHBhZ2UgcGlucwplYWdlcmx5LCBwcm92 aWRlZCB0aGUgc2NhbiB1c2VzIGFuIE1WQ0Mgc25hcHNob3QgKHVubGlrZSB0aGUgbmJ0cmVlCmRy b3BQaW4gb3B0aW1pemF0aW9uLCB3aGljaCBoYWQgbm8gd2F5IG9mIGRvaW5nIHRoaXMgc2FmZWx5 IGR1cmluZwppbmRleC1vbmx5IHNjYW5zIGR1ZSB0byBob3cgYW1nZXR0dXBsZSB3b3JrcywgYW5k IG9ubHkgZ2FpbmVkIHN1cHBvcnQKZm9yIHNjYW5zIG9mIHVubG9nZ2VkIHJlbGF0aW9ucyBpbiBy ZWNlbnQgY29tbWl0IDhhODc5MTE5KS4KClRoZSBvbGQgYW1tYXJrcG9zIGFuZCBhbXJlc3RycG9z IGluZGV4IEFNIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC4gIFdpdGgKYW1nZXRiYXRjaCwgbWFyay9y ZXN0b3JlIG9mIHNjYW4gcG9zaXRpb25zIGlzIG1hbmFnZWQgYnkgdGhlIHRhYmxlIEFNLAp3aXRo IGhlbHAgZnJvbSBpbmRleGJhdGNoLmMgdXRpbGl0eSBmdW5jdGlvbnMsIHJhdGhlciB0aGFuIGJl aW5nIHdob2xseQpkZWxlZ2F0ZWQgdG8gdGhlIGluZGV4IEFNLiAgVGhlIG5ldyBpbmRleF9mZXRj aF9tYXJrcG9zIGFuZAppbmRleF9mZXRjaF9yZXN0cnBvcyB0YWJsZSBBTSBjYWxsYmFja3MgbXVz dCBiZSBpbXBsZW1lbnRlZCB0byBtYWtlIGFsbAp0aGlzIHdvcmsuICBBcyBhIGZ1cnRoZXIgY29u ZGl0aW9uLCBtYXJrL3Jlc3RvcmUgaXMgb25seSBzdXBwb3J0ZWQgYnkKaW5kZXggQU1zIHRoYXQg b3B0IGluIGJ5IHNldHRpbmcgdGhlIG5ldyBhbWNhbm1hcmtwb3MgZmxhZyAob25seSBuYnRyZWUK c2V0cyB0aGlzIHRvIHRydWUpLiAgVGhpcyBhbWNhbm1hcmtwb3MgZmxhZyBzY2hlbWUgYXZvaWRz IHRoZSBhc3N1bXB0aW9uCnRoYXQgZXZlcnkgaW5kZXggQU1zIGlzIGNhcGFibGUgb2YgcGlja2lu ZyB1cCBhIHNjYW4gZnJvbSBhIHByZXZpb3VzbHkKc2F2ZWQgbWFya0JhdGNoLgoKQW4gdXBjb21p bmcgY29tbWl0IHRoYXQgd2lsbCBhZGQgaW5kZXggcHJlZmV0Y2hpbmcgd2lsbCB1c2UgYSByZWFk CnN0cmVhbSB0byByZWFkIGhlYXAgcGFnZXMgZHVyaW5nIGluZGV4IHNjYW5zLiAgUmVhZCBzdHJl YW0gaXMgY2FyZWZ1bCB0bwpsaW1pdCBob3cgbWFueSB0aGluZ3MgaXQgcGlucywgbGVzdCB3ZSBy dW4gaW50byBwcm9ibGVtcyBkdWUgdG8gaGF2aW5nCnRvbyBtYW55IGJ1ZmZlcnMgcGlubmVkLiAg U2ltcGx5IG5ldmVyIGhvbGRpbmcgb24gdG8gaW5kZXggcGFnZSBidWZmZXIKcGlucyBncmVhdGx5 IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBmb3IgaW5kZXggcHJlZmV0Y2hpbmc7CnRo ZXJlJ3Mgbm8gcmlzayBvZiB1bmludGVuZGVkIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSByZWFk IHN0cmVhbSBhbmQKaW5kZXggQU0uICBUaGUgb25seSBkb3duc2lkZSBpcyB0aGF0IHdlIGNhbm5v dCBzdXBwb3J0IHByZWZldGNoaW5nCmR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNu YXBzaG90LCB3aGljaCBzZWVtcyBxdWl0ZSBhY2NlcHRhYmxlLgoKSW4gcHJhY3RpY2UsIGhlYXBh bSBkb2Vzbid0IGRyb3AgZWFjaCBiYXRjaCdzIGluZGV4IHBhZ2UgYnVmZmVyIHBpbiBhdAp0aGUg ZWFybGllc3Qgb3Bwb3J0dW5pdHkgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMuICBUaGlzIHdhcyBk ZWVtZWQKbmVjZXNzYXJ5IHRvIGF2b2lkIHJlZ3Jlc3NpbmcgaW5kZXgtb25seSBzY2FucyB3aXRo IGEgTElNSVQsIGluCnBhcnRpY3VsYXIgd2l0aCBuZXN0bG9vcCBhbnRpLWpvaW5zIGFuZCBuZXN0 bG9vcCBzZW1pLWpvaW5zOyBlYWdlcmx5CmxvYWRpbmcgYWxsIHRoZSB2aXNpYmlsaXR5IGluZm9y bWF0aW9uIHVwIGZyb250IHJlZ3Jlc3NlZCBzdWNoIHF1ZXJpZXMuClRoZSBuZXcgYW1nZXRiYXRj aCBpbnRlcmZhY2UgZ2l2ZXMgdGFibGUgQU1zIHRoZSBhdXRob3JpdHkgdG8gZGVjaWRlCndoZW4g dG8gZHJvcCBpbmRleCBwYWdlIHBpbnMvdW5ndWFyZCBiYXRjaGVzLCBzbyB0aGlzIGNhbiBiZSBj b25zaWRlcmVkCmEgaGVhcGFtIGltcGxlbWVudGF0aW9uIGRldGFpbCAoaW5kZXggQU1zIGRvbid0 IG5lZWQgdG8ga25vdyBhYm91dCBpdCkuClRoaXMgc2NoZW1lIGVuYWJsZXMgaW5kZXggcHJlZmV0 Y2hpbmcgdG8gYWNxdWlyZSBhbmQgdGhlbiBkcm9wIGFueSBleHRyYQpiYXRjaCBpbmRleCBwYWdl IHBpbiB3aXRoaW4gaXRzIHJlYWQgc3RyZWFtIGNhbGxiYWNrIC0tIGV2ZW4gd2hlbiBhbgppbmRl eC1vbmx5IHNjYW4gKHRoYXQgbXVzdCBwZXJmb3JtIHNvbWUgaGVhcCBmZXRjaGVzKSBob2xkcyBv cGVuIHNldmVyYWwKaW5kZXggYmF0Y2hlcyBhdCBvbmNlIGluIG9yZGVyIHRvIG1haW50YWluIGFu IGFkZXF1YXRlIHByZWZldGNoCmRpc3RhbmNlLiAgVGhlIHJlYWQgc3RyZWFtIGNhbm5vdCBvYnNl cnZlIGFueSBjaGFuZ2UgaW4gdGhlIGJhY2tlbmQncwpidWZmZXIgcGluIGxpbWl0LgoKSW5kZXgg YWNjZXNzIG1ldGhvZHMgdGhhdCBzdXBwb3J0IHBsYWluIGluZGV4IHNjYW5zIG11c3Qgbm93IGlt cGxlbWVudAplaXRoZXIgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIG9yIHRoZSBhbWdldHR1cGxl IGludGVyZmFjZSAobm90IGJvdGgpLgpVcGNvbWluZyBwYXRjaGVzIHdpbGwgYWRkIHN1cHBvcnQg Zm9yIGFtZ2V0YmF0Y2ggdG8gdGhlIGhhc2ggYW5kIEdpU1QKaW5kZXggQU1zLiAoWFhYIFdlIHNo b3VsZCBiZSBhYmxlIHRvIGFkZCBzdXBwb3J0IGZvciBTUC1HaVNUIHRvbywgd2hpY2gKaXMgdGhl IGxhc3QgcmVtYWluaW5nIGFtZ2V0dHVwbGUgaW5kZXggQU0uICBUaGF0IHdvdWxkIGFsbG93IHVz IHRvCmRlY2xhcmUgYW1nZXR0dXBsZSBkZXByZWNhdGVkLikKCkF1dGhvcjogVG9tYXMgVm9uZHJh IDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpS ZXZpZXdlZC1ieTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdlZC1i eTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRw czovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4LTUwMDBiODk0ZWJhYkBlbnRl cnByaXNlZGIuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vZWZhYzMyMzgtNmYz NC00MWVhLWEzOTMtMjZjYzA0NDFiNTA2JTQwdm9uZHJhLm1lCi0tLQogc3JjL2luY2x1ZGUvYWNj ZXNzL2FtYXBpLmggICAgICAgICAgICAgICAgICAgIHwgIDI5ICstCiBzcmMvaW5jbHVkZS9hY2Nl c3MvZ2VuYW0uaCAgICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW0uaCAgICAgICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv aW5kZXhiYXRjaC5oICAgICAgICAgICAgICAgfCAyMzIgKysrKysrCiBzcmMvaW5jbHVkZS9hY2Nl c3MvbmJ0cmVlLmggICAgICAgICAgICAgICAgICAgfCAxOTAgKystLS0KIHNyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICAgICB8IDQwNSArKysrKysrKy0KIHNyYy9pbmNs dWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICAgICB8ICA4OCArLQogc3JjL2luY2x1 ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvYnJpbi9icmluLmMgICAgICAgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2luZ2V0LmMgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQv YWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2guYyAgICAgICAgICAgICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyAgICB8IDU1NCArKysrKysrKysrKystCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAgICAgfCAgIDggKwogc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgICAgIHwgMTI5ICstLQogc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyAgICAgICAgIHwgNzgwICsrKysrKysrKysrKysrKysr Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkICAgICAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FICAgICAgICAgICAgICB8ICA3NCArLQog c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMgICAgICAgICAgIHwgIDEzICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMgICAgICAgfCAyMDcgKysrLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAgICAgICB8IDQ2OSArKysr KystLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyAgICAgICAgIHwg NTY2ICsrKysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYyAg ICAgICAgICB8IDI0NSAtLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5j ICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5j ICAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5j ICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAg ICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMgICAgICAgICAg ICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMg ICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jICAgICAg ICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMgICAgICAg ICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICAgICAg ICB8ICAgNiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jICAgICAgICAg IHwgICA4ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMgICAg fCAgIDkgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMgICAgICAgICAgICAgICB8 ICAgOCArLQogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyAgICAgICAgICAgICAgIHwg ICAyICstCiBjb250cmliL2Jsb29tL2JsdXRpbHMuYyAgICAgICAgICAgICAgICAgICAgICAgfCAg IDcgKy0KIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAgICAgICAgICAgICB8IDU4 NCArKysrKysrKysrKy0tCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sICAgICAg ICAgICAgfCAgMTMgKy0KIC4uLi9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2Ft LmMgICB8ICAgNyArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAg ICAgIHwgIDE1ICstCiA0NSBmaWxlcyBjaGFuZ2VkLCAzMzQ4IGluc2VydGlvbnMoKyksIDEzOTQg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4 YmF0Y2guaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRl eGJhdGNoLmMKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9hbWFwaS5oCmluZGV4IDc5MjQwMzMzNS4uMDI3OTNhMTE1IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv YW1hcGkuaApAQCAtMTk5LDYgKzE5OSwxOSBAQCB0eXBlZGVmIHZvaWQgKCphbXJlc2Nhbl9mdW5j dGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIHR5cGVkZWYgYm9vbCAoKmFtZ2V0dHVwbGVfZnVu Y3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb24pOwogCisvKiBuZXh0IGJhdGNoIG9mIHZhbGlkIHR1cGxlcyAqLwordHlwZWRlZiBJbmRl eFNjYW5CYXRjaCAoKmFtZ2V0YmF0Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJ CQkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJCQkJCQkJCSAgIFNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKKworLyogZHJvcCBUSUQgcmVjeWNsaW5nIGludGVybG9j ayBoZWxkIHRvIHByZXZlbnQgY29uY3VycmVudCBWQUNVVU0gcmVjeWNsaW5nICovCit0eXBlZGVm IHZvaWQgKCphbXVuZ3VhcmRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJ CQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCisvKiBtYXJrIGRlYWQgaXRlbXMgaW4g aW5kZXggcGFnZSAqLwordHlwZWRlZiB2b2lkICgqYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbikg KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7 CisKIC8qIGZldGNoIGFsbCB2YWxpZCB0dXBsZXMgKi8KIHR5cGVkZWYgaW50NjQgKCphbWdldGJp dG1hcF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSAgIFRJREJpdG1h cCAqdGJtKTsKQEAgLTIwNiwxMSArMjE5LDkgQEAgdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFw X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogLyogZW5kIGluZGV4IHNjYW4gKi8KIHR5 cGVkZWYgdm9pZCAoKmFtZW5kc2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAK LS8qIG1hcmsgY3VycmVudCBzY2FuIHBvc2l0aW9uICovCi10eXBlZGVmIHZvaWQgKCphbW1hcmtw b3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOwotCi0vKiByZXN0b3JlIG1hcmtlZCBz Y2FuIHBvc2l0aW9uICovCi10eXBlZGVmIHZvaWQgKCphbXJlc3RycG9zX2Z1bmN0aW9uKSAoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKKy8qIGludmFsaWRhdGUgaW5kZXggQU0gc3RhdGUgdGhhdCBpbmRl cGVuZGVudGx5IHRyYWNrcyBzY2FuJ3MgcG9zaXRpb24gKi8KK3R5cGVkZWYgdm9pZCAoKmFtcG9z cmVzZXRfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gpOwogCiAvKgogICogQ2FsbGJhY2sgZnVuY3Rpb24gc2lnbmF0dXJlcyAtIGZv ciBwYXJhbGxlbCBpbmRleCBzY2Fucy4KQEAgLTI1NSw2ICsyNjYsOCBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleEFtUm91dGluZQogCWJvb2wJCWFtY29uc2lzdGVudG9yZGVyaW5nOwogCS8qIGRvZXMg QU0gc3VwcG9ydCBiYWNrd2FyZCBzY2FubmluZz8gKi8KIAlib29sCQlhbWNhbmJhY2t3YXJkOwor CS8qIGRvZXMgQU0gc3VwcG9ydCBtYXJrL3Jlc3RvcmUgb2YgYSBzY2FuIHBvc2l0aW9uPyAqLwor CWJvb2wJCWFtY2FubWFya3BvczsKIAkvKiBkb2VzIEFNIHN1cHBvcnQgVU5JUVVFIGluZGV4ZXM/ ICovCiAJYm9vbAkJYW1jYW51bmlxdWU7CiAJLyogZG9lcyBBTSBzdXBwb3J0IG11bHRpLWNvbHVt biBpbmRleGVzPyAqLwpAQCAtMzEwLDEwICszMjMsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhB bVJvdXRpbmUKIAlhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsKIAlhbXJlc2Nhbl9m dW5jdGlvbiBhbXJlc2NhbjsKIAlhbWdldHR1cGxlX2Z1bmN0aW9uIGFtZ2V0dHVwbGU7IC8qIGNh biBiZSBOVUxMICovCisJYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUg TlVMTCAqLworCWFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uIGFtdW5ndWFyZGJhdGNoOyAvKiBjYW4g YmUgTlVMTCAqLworCWFta2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24gYW1raWxsaXRlbXNiYXRjaDsg LyogY2FuIGJlIE5VTEwgKi8KIAlhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsJLyog Y2FuIGJlIE5VTEwgKi8KIAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwotCWFtbWFya3Bv c19mdW5jdGlvbiBhbW1hcmtwb3M7CS8qIGNhbiBiZSBOVUxMICovCi0JYW1yZXN0cnBvc19mdW5j dGlvbiBhbXJlc3RycG9zOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtcG9zcmVzZXRfZnVuY3Rpb24g YW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogCS8qIGludGVyZmFjZSBmdW5jdGlvbnMg dG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogCWFtZXN0aW1hdGVwYXJhbGxlbHNj YW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgLyogY2FuIGJlIE5VTEwgKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2dlbmFtLmgKaW5kZXggMDVlZWM5MjA0Li42MTU2ODZkYzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC05 Niw2ICs5Niw3IEBAIHR5cGVkZWYgYm9vbCAoKkluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrKSAoSXRl bVBvaW50ZXIgaXRlbXB0ciwgdm9pZCAqc3RhdGUpOwogCiAvKiBzdHJ1Y3QgZGVmaW5pdGlvbnMg YXBwZWFyIGluIHJlbHNjYW4uaCAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEg KkluZGV4U2NhbkRlc2M7Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4 U2NhbkJhdGNoOwogdHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRhICpTeXNTY2FuRGVzYzsK IAogdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqUGFyYWxsZWxJbmRl eFNjYW5EZXNjOwpAQCAtMTY5LDggKzE3MCw2IEBAIGV4dGVybiB2b2lkIGluZGV4X3Jlc2NhbihJ bmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkgU2NhbktleSBrZXlzLCBpbnQgbmtleXMsCiAJCQkJ CQkgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4gdm9pZCBpbmRleF9l bmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBpbmRleF9tYXJrcG9zKElu ZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBpbmRleF9yZXN0cnBvcyhJbmRleFNjYW5E ZXNjIHNjYW4pOwogZXh0ZXJuIFNpemUgaW5kZXhfcGFyYWxsZWxzY2FuX2VzdGltYXRlKFJlbGF0 aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCQkJCQkJaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLCBT bmFwc2hvdCBzbmFwc2hvdCk7CiBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlh bGl6ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCkBAIC0xODQsOCArMTgzLDYgQEAgZXh0ZXJuIElu ZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJ CQkJCQkJCQkJCSAgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAogCQkJCQkJCQkJCQkgIFBhcmFs bGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwKIAkJCQkJCQkJCQkJICB1aW50MzIgZmxhZ3MpOwotZXh0 ZXJuIEl0ZW1Qb2ludGVyIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwKLQkJ CQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiBleHRlcm4gaW50NjQgaW5kZXhfZ2V0 Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICpiaXRtYXApOwogCiBleHRlcm4g SW5kZXhCdWxrRGVsZXRlUmVzdWx0ICppbmRleF9idWxrX2RlbGV0ZShJbmRleFZhY3V1bUluZm8g KmluZm8sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggODExODEwYTg4Li4yOTRhYTBhNGUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv aGVhcGFtLmgKQEAgLTEyOCw2ICsxMjgsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoSGVh cERhdGEKIAogCS8qIEZvciB2aXNpYmlsaXR5IG1hcCBjaGVja3MgKGluZGV4LW9ubHkgc2NhbnMg YW5kIG9uLWFjY2VzcyBwcnVuaW5nKSAqLwogCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CS8qIHZpc2li aWxpdHkgbWFwIGJ1ZmZlciAqLworCWludAkJCXhzX3ZtX2l0ZW1zOwkvKiAjIGl0ZW1zIHRvIHJl c29sdmUgdmlzaWJpbGl0eSBpbmZvIGZvciAqLwogCiAJYm9vbAkJeHNfcmVhZG9ubHk7CS8qIHNj YW4gaXMgcmVhZC1vbmx5PyAqLwogCkBAIC00MzYsOCArNDM3LDEyIEBAIGV4dGVybiBUcmFuc2Fj dGlvbklkIGhlYXBfaW5kZXhfZGVsZXRlX3R1cGxlcyhSZWxhdGlvbiByZWwsCiBleHRlcm4gYm9v bCBoZWFwYW1fZmV0Y2hfdGlkKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgdGlkLCBTbmFwc2hv dCBzbmFwc2hvdCwKIAkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgKmFsbF9kZWFk KTsKIGV4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihJbmRleFNjYW5EZXNjIHNj YW4sIHVpbnQzMiBmbGFncyk7CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hfYmF0Y2hf aW5pdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRj aCk7CiBleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKIGV4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKK2V4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9tYXJrcG9zKEluZGV4U2NhbkRl c2Mgc2Nhbik7CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzdHJwb3MoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKIGV4dGVybiBib29sIGhlYXBfaG90X3NlYXJjaF9idWZmZXIoSXRlbVBv aW50ZXIgdGlkLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJICAgQnVmZmVyIGJ1ZmZlciwg U25hcHNob3Qgc25hcHNob3QsIEhlYXBUdXBsZSBoZWFwVHVwbGUsCiAJCQkJCQkJCSAgIGJvb2wg KmFsbF9kZWFkLCBib29sIGZpcnN0X2NhbGwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2luZGV4YmF0Y2guaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4zNDg0MTBiNTgKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oCkBAIC0wLDAgKzEsMjMyIEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBpbmRleGJhdGNoLmgKKyAqCSAgQmF0Y2gtYmFzZWQg aW5kZXggc2NhbiBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLgor ICoKKyAqIFByb3ZpZGVzIGZ1bmN0aW9ucyB1c2VkIGJ5IHRhYmxlIEFNcyB0byBtYW5hZ2UgYW4g aW5kZXggc2NhbidzIHBvc2l0aW9uYWwKKyAqIHN0YXRlIChzdG9yZWQgaW4gSW5kZXhTY2FuRGVz Yy5iYXRjaHJpbmdidWYpLCBhbmQgdG8gbWFuYWdlIHVuZGVybHlpbmcKKyAqIHJlc291cmNlcyBz dWNoIGFzIG1lbW9yeSBhbmQgYnVmZmVyIHBpbnMuICBBbHNvIHByb3ZpZGVzIHZhcmlvdXMgdXRp bGl0eQorICogZnVuY3Rpb25zIHVzZWQgYnkgaW5kZXggQU1zIGZvciBiYXRjaCByZXNvdXJjZSBt YW5hZ2VtZW50LgorICoKKyAqIFRoaXMgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUgZWxlbWVudGFy eSBvcGVyYXRpb25zIGZvciBtYW5pcHVsYXRpbmcgdGhlCisgKiBzY2FuJ3MgcmluZyBidWZmZXIg KGUuZy4sIGZvciBhcHBlbmRpbmcgYSBiYXRjaCkuICBUaG9zZSBhcmUgaW1wbGVtZW50ZWQgYXMK KyAqIGlubGluZSBmdW5jdGlvbnMgZGVmaW5lZCBiZXNpZGUgSW5kZXhTY2FuRGVzYyBhbmQgSW5k ZXhTY2FuQmF0Y2guCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAq IHNyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2lmbmRlZiBJTkRFWEJBVENIX0gKKyNkZWZpbmUgSU5ERVhCQVRDSF9ICisKKyNpbmNs dWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKKyNpbmNsdWRl ICJhY2Nlc3MvcmVsc2Nhbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCisjaW5jbHVkZSAi dXRpbHMvcmVsLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFV0aWxpdGllcyBjYWxs ZWQgYnkgdGFibGUgQU1zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFNl dHMgdXAgdGhlIGJhdGNoIHJpbmcgYnVmZmVyIHN0cnVjdHVyZSBmb3IgdXNlIGJ5IGFuIGluZGV4 IHNjYW4uCisgKgorICogQ2FsbGVkIGZyb20gdGFibGUgQU0ncyBpbmRleF9mZXRjaF9iZWdpbiBj YWxsYmFjayBkdXJpbmcgYW1nZXRiYXRjaCBzY2Fucy4KKyAqLworc3RhdGljIGlubGluZSB2b2lk Cit0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUFz c2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsK KworCXNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CisJc2Nhbi0+YmF0 Y2hyaW5nYnVmLm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKKworCXNjYW4tPmJhdGNocmluZ2J1Zi5t YXJrQmF0Y2ggPSBOVUxMOworCXNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0Y2ggPSAwOworCXNj YW4tPmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2ggPSAwOworCisJc2Nhbi0+dXNlYmF0Y2hyaW5nID0g dHJ1ZTsKK30KKworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldChJbmRl eFNjYW5EZXNjIHNjYW4sIGJvb2wgZW5kc2Nhbik7CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxf YmF0Y2hzY2FuX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91 dGlsX2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQg dGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOwor ZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX3NjYW5iYXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVz YyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9zY2FucG9zX2tpbGxpdGVtKEluZGV4 U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIHRh YmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gpOworCisvKgorICogRmV0Y2ggdGhlIG5leHQgYmF0Y2ggb2YgbWF0Y2hpbmcgaXRl bXMgZm9yIHRoZSBzY2FuIChvciB0aGUgZmlyc3QpLgorICoKKyAqIENhbGxlZCB3aGVuIGNhbGxl cidzIGN1cnJlbnQgYmF0Y2ggKHBhc3NlZCB0byB1cyBhcyBwcmlvckJhdGNoKSBoYXMgbm8gbW9y ZQorICogbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLiAgQ2FsbGVy IHBhc3NlcyBhIE5VTEwKKyAqIHByaW9yQmF0Y2ggb24gdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3Ig dGhlIHNjYW4uCisgKgorICogUmV0dXJucyB0aGUgbmV4dCBiYXRjaCB0byBiZSBwcm9jZXNzZWQg YnkgY2FsbGVyIGluIHRoZSBnaXZlbiBzY2FuCisgKiBkaXJlY3Rpb24sIG9yIE5VTEwgd2hlbiB0 aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGVzIGluIHRoYXQgZGlyZWN0aW9uLgorICoKKyAqIFRoaXMg aXMgd2hlcmUgYmF0Y2hlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHNjYW4ncyByaW5nIGJ1ZmZlci4g IFdlIGRvbid0CisgKiBmcmVlIGFueSBiYXRjaGVzIGhlcmUsIHRob3VnaDsgdGhhdCBpcyBsZWZ0 IHVwIHRvIHRoZSBjYWxsZXIuICBUaGUgY2FsbGVyCisgKiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZv ciBhZHZhbmNpbmcgdGhlaXIgcG9zaXRpb24uCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3 YXlzX2lubGluZSBJbmRleFNjYW5CYXRjaAordGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkgIElu ZGV4U2NhbkJhdGNoIHByaW9yQmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlJbmRl eFNjYW5CYXRjaCBiYXRjaCA9IE5VTEw7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYg UEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKworCUFzc2Vy dChzY2FuLT51c2ViYXRjaHJpbmcpOworCisJaWYgKCFwcmlvckJhdGNoKQorCXsKKwkJLyogRmly c3QgY2FsbCBmb3IgdGhlIHNjYW4gKi8KKwkJQXNzZXJ0KHBvcyA9PSAmYmF0Y2hyaW5nYnVmLT5z Y2FuUG9zKTsKKwl9CisJZWxzZSBpZiAodW5saWtlbHkocHJpb3JCYXRjaC0+ZGlyICE9IGRpcmVj dGlvbikpCisJeworCQkvKgorCQkgKiBXZSBkZXRlY3RlZCBhIGNoYW5nZSBpbiBzY2FuIGRpcmVj dGlvbiBhY3Jvc3MgYmF0Y2hlcy4gIFByZXBhcmUKKwkJICogc2NhbidzIGJhdGNocmluZ2J1ZiBz dGF0ZSBmb3IgdXMgdG8gZ2V0IHRoZSBuZXh0IGJhdGNoIGZvciB0aGUKKwkJICogb3Bwb3NpdGUg c2NhbiBkaXJlY3Rpb24gdG8gdGhlIG9uZSB1c2VkIHdoZW4gcHJpb3JCYXRjaCB3YXMKKwkJICog cmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKwkJICovCisJCXRhYmxlYW1fdXRpbF9zY2FuYmF0Y2hf ZGlyY2hhbmdlKHNjYW4pOworCisJCS8qIHByaW9yQmF0Y2ggaXMgbm93IGJhdGNocmluZ2J1Zidz IG9ubHkgYmF0Y2ggKi8KKwkJQXNzZXJ0KHBvcy0+YmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5oZWFk QmF0Y2gpOworCQlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSAxKTsKKwl9 CisJZWxzZSBpZiAoaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoc2NhbiwgcG9zLT5iYXRjaCArIDEp KQorCXsKKwkJLyogTmV4dCBiYXRjaCBhbHJlYWR5IGxvYWRlZCBmb3IgdXMgKi8KKwkJYmF0Y2gg PSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKTsKKworCQlBc3NlcnQocHJp b3JCYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJCUFzc2VydChiYXRjaC0+ZGlyID09IGRpcmVj dGlvbik7CisJCUFzc2VydChiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJ CXJldHVybiBiYXRjaDsKKwl9CisKKwkvKgorCSAqIEFzc2VydCBwcmVjb25kaXRpb25zIGZvciBj YWxsaW5nIGFtZ2V0YmF0Y2guCisJICoKKwkgKiBwcmlvckJhdGNoIGhhZCBiZXR0ZXIgYmUgZm9y IHRoZSBsYXN0IHZhbGlkIGJhdGNoIGN1cnJlbnRseSBpbiB0aGUgcmluZworCSAqIGJ1ZmZlciAo YmF0Y2hlcyBtdXN0IHN0YXkgaW4gc2NhbiBvcmRlcikuICBJZiBpdCBpc24ndCB0aGVuIHdlIHNo b3VsZAorCSAqIGhhdmUgYWxyZWFkeSByZXR1cm5lZCBzb21lIGV4aXN0aW5nIGxvYWRlZCBiYXRj aCBlYXJsaWVyLgorCSAqLworCUFzc2VydCghaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsK KwlBc3NlcnQoIXByaW9yQmF0Y2ggfHwKKwkJICAgKGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2Nh bikgPiAwICYmIHByaW9yQmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24gJiYKKwkJCWluZGV4X3NjYW5f YmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2ggLSAxKSA9PSBwcmlvckJhdGNoKSk7 CisKKwkvKgorCSAqIEJlZm9yZSB3ZSBjYWxsIGFtZ2V0YmF0Y2ggYWdhaW4sIGNoZWNrIGlmIHBy aW9yQmF0Y2ggaXMgYWxyZWFkeSBrbm93bgorCSAqIHRvIGJlIHRoZSBsYXN0IGJhdGNoIHdpdGgg bWF0Y2hpbmcgaXRlbXMgaW4gdGhpcyBzY2FuIGRpcmVjdGlvbgorCSAqLworCWlmIChwcmlvckJh dGNoICYmCisJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikgPworCQkgcHJpb3JC YXRjaC0+a25vd25FbmRGb3J3YXJkIDoKKwkJIHByaW9yQmF0Y2gtPmtub3duRW5kQmFja3dhcmQp KQorCQlyZXR1cm4gTlVMTDsKKworCWJhdGNoID0gc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5k YW0tPmFtZ2V0YmF0Y2goc2NhbiwgcHJpb3JCYXRjaCwKKwkJCQkJCQkJCQkJCQkgIGRpcmVjdGlv bik7CisJaWYgKGJhdGNoKQorCXsKKwkJLyogV2UgZ290IHRoZSBiYXRjaCBmcm9tIHRoZSBpbmRl eCBBTSAqLworCQlBc3NlcnQoYmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24pOworCQlBc3NlcnQoYmF0 Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCisJCS8qIEFwcGVuZCBiYXRjaCB0 byB0aGUgZW5kIG9mIHJpbmcgYnVmZmVyL3dyaXRlIGl0IHRvIGJ1ZmZlciBpbmRleCAqLworCQlp bmRleF9zY2FuX2JhdGNoX2FwcGVuZChzY2FuLCBiYXRjaCk7CisKKwkJLyoKKwkJICogVGhlb3Jl dGljYWxseSB3ZSBzaG91bGQgc2V0IGtub3duRW5kRm9yd2FyZC9rbm93bkVuZEJhY2t3YXJkIHRv CisJCSAqIGZhbHNlICh3aGljaGV2ZXIgaXMgdXNlZCB3aGVuIG1vdmluZyBpbiB0aGUgb3Bwb3Np dGUgZGlyZWN0aW9uKQorCQkgKiB3aGVuIHRoaXMgaXMgdGhlIHNjYW4ncyBmaXJzdCByZXR1cm5l ZCBiYXRjaC4gIFdlIGRvbid0IGJvdGhlcgorCQkgKiBiZWNhdXNlIHRoZSBpbmRleCBBTSBzaG91 bGQgYWx3YXlzIHJlY29yZCB0aGF0IGZhY3QgaW4gaXRzIG93bgorCQkgKiBvcGFxdWUgYXJlYS4g IChUaGVzZSBmaWVsZHMgb25seSBleGlzdCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgaW5kZXgKKwkJ ICogQU1zIHNldHRpbmcgX2FueV8gZmllbGQgZnJvbSBhbnkgcHJpb3JiYXRjaCB0aGF0IHdlIHBh c3MgdG8gdGhlbS4KKwkJICogQmVzaWRlcywgaXQgd291bGQgYmUgY3VtYmVyc29tZSBmb3IgaW5k ZXggQU1zIHRvIGtlZXAgdHJhY2sgb2YKKwkJICogd2hpY2ggYmF0Y2ggaXMgdGhlIGN1cnJlbnQg YW1nZXRiYXRjaCBjYWxsJ3Mgb3JpZ2luYWwgcHJpb3JiYXRjaC4pCisJCSAqLworCX0KKwllbHNl CisJeworCQkvKiBhbWdldGJhdGNoIHJldHVybmVkIE5VTEwgKi8KKwkJaWYgKHByaW9yQmF0Y2gp CisJCXsKKwkJCS8qCisJCQkgKiBUaGVyZSBhcmUgbm8gZnVydGhlciBtYXRjaGVzIHRvIGJlIGZv dW5kIGluIHRoZSBjdXJyZW50IHNjYW4KKwkJCSAqIGRpcmVjdGlvbiwgZm9sbG93aW5nIHByaW9y QmF0Y2guICBSZW1lbWJlciB0aGF0IHByaW9yQmF0Y2ggaXMKKwkJCSAqIHRoZSBsYXN0IGJhdGNo IHdpdGggbWF0Y2hpbmcgaXRlbXMuCisJCQkgKi8KKwkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKGRpcmVjdGlvbikpCisJCQkJcHJpb3JCYXRjaC0+a25vd25FbmRGb3J3YXJkID0gdHJ1ZTsK KwkJCWVsc2UKKwkJCQlwcmlvckJhdGNoLT5rbm93bkVuZEJhY2t3YXJkID0gdHJ1ZTsKKwkJfQor CX0KKworCXJldHVybiBiYXRjaDsKK30KKworLyoKKyAqIEZldGNoIHRoZSBuZXh0IG1hdGNoaW5n IFRJRCBmb3IgdGhlIHNjYW4gKG9yIHRoZSBmaXJzdCkuCisgKgorICogVGhpcyBpcyB0aGUgYW1n ZXR0dXBsZSBlcXVpdmFsZW50IG9mIHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoLgorICoK KyAqIFRoZXJlIGlzIG5vIGJhdGNoLWxpa2Ugc3RhdGUgZm9yIHVzIHRvIG1hbmFnZSAodHlwaWNh bGx5IHRoYXQncyB1cCB0byB0aGUKKyAqIGluZGV4IEFNIHdoZW4gaXQgaW1wbGVtZW50cyBhbWdl dHR1cGxlKS4KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIEl0ZW1Qb2lu dGVyCit0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF90dXBsZV90aWQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlib29sCQlmb3VuZDsKKworCUFzc2VydCgh c2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKworCWZvdW5kID0gc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtZ2V0dHVwbGUoc2NhbiwgZGlyZWN0aW9uKTsKKworCS8qIFJlc2V0IGtpbGwgZmxh ZyBpbW1lZGlhdGVseSBmb3Igc2FmZXR5ICovCisJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZh bHNlOworCUFzc2VydCghc2Nhbi0+eHNfaGVhcF9jb250aW51ZSk7CisKKwkvKiBJZiB3ZSdyZSBv dXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAqLworCWlmICghZm91bmQpCisJCXJldHVy biBOVUxMOworCisJLyogUmV0dXJuIHRoZSBUSUQgb2YgdGhlIHR1cGxlIHdlIGZvdW5kICovCisJ cmV0dXJuICZzY2FuLT54c19oZWFwdGlkOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KiBVdGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4IEFNcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCitleHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkgIEJ1ZmZlciBidWYpOworZXh0 ZXJuIEluZGV4U2NhbkJhdGNoIGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChJbmRleFNjYW5EZXNj IHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8qCisgKiBVdGlsaXR5IG1hY3Jv IGZvciBhY2Nlc3NpbmcgdGhlIGluZGV4IEFNJ3Mgc3RhdGljIHBlci1iYXRjaCBvcGFxdWUgZGF0 YS4KKyAqCisgKiBFYWNoIGJhdGNoIGFsbG9jYXRpb24gcGxhY2VzIHRoZSBzdGF0aWMgaW5kZXgg QU0gb3BhcXVlIGFyZWEgYXQgYSBmaXhlZAorICogbmVnYXRpdmUgb2Zmc2V0IGZyb20gdGhlIElu ZGV4U2NhbkJhdGNoIHBvaW50ZXIgKHNlZSBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2gpLgorICog VGhpcyBtYWNybyByZXR1cm5zIGEgdHlwZWQgcG9pbnRlciB0byB0aGF0IGFyZWEsIGFzc2VydGlu ZyB0aGF0IGV2ZXJ5Ym9keQorICogaGFzIHRoZSBzYW1lIGlkZWEgYWJvdXQgd2hlcmUgaXQgaXMg aW4gcGFzc2luZy4KKyAqLworI2RlZmluZSBpbmRleGFtX3V0aWxfYmF0Y2hfZ2V0X2FtZGF0YShz Y2FuLCBiYXRjaCwgdHlwZSkgXAorCShBc3NlcnRNYWNybygoc2NhbiktPmJhdGNoX2luZGV4X29w YXF1ZV9zdGF0aWMgPT0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSksIFwKKwkgKCh0eXBlICopICgo Y2hhciAqKSAoYmF0Y2gpIC0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSkpKQorCisjZW5kaWYJCQkJ CQkJLyogSU5ERVhCQVRDSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0 cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggMzA5N2U5YmIxLi5lZjkz ODJmNzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgTkJUUkVF X0gKIAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJh dGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgpAQCAtOTI0LDExMiArOTI1LDYgQEAgdHlw ZWRlZiBzdHJ1Y3QgQlRWYWN1dW1Qb3N0aW5nRGF0YQogCiB0eXBlZGVmIEJUVmFjdXVtUG9zdGlu Z0RhdGEgKkJUVmFjdXVtUG9zdGluZzsKIAotLyoKLSAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhl IGJ0cmVlLXByaXZhdGUgc3RhdGUgbmVlZGVkIGZvciBhbiBpbmRleHNjYW4uCi0gKiBUaGlzIGNv bnNpc3RzIG9mIHByZXByb2Nlc3NlZCBzY2FuIGtleXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlz KCkgZm9yCi0gKiBkZXRhaWxzIG9mIHRoZSBwcmVwcm9jZXNzaW5nKSwgaW5mb3JtYXRpb24gYWJv dXQgdGhlIGN1cnJlbnQgbG9jYXRpb24KLSAqIG9mIHRoZSBzY2FuLCBhbmQgaW5mb3JtYXRpb24g YWJvdXQgdGhlIG1hcmtlZCBsb2NhdGlvbiwgaWYgYW55LiAgKFdlIHVzZQotICogQlRTY2FuUG9z RGF0YSB0byByZXByZXNlbnQgdGhlIGRhdGEgbmVlZGVkIGZvciBlYWNoIG9mIGN1cnJlbnQgYW5k IG1hcmtlZAotICogbG9jYXRpb25zLikJSW4gYWRkaXRpb24gd2UgY2FuIHJlbWVtYmVyIHNvbWUg a25vd24ta2lsbGVkIGluZGV4IGVudHJpZXMKLSAqIHRoYXQgbXVzdCBiZSBtYXJrZWQgYmVmb3Jl IHdlIGNhbiBtb3ZlIG9mZiB0aGUgY3VycmVudCBwYWdlLgotICoKLSAqIEluZGV4IHNjYW5zIHdv cmsgYSBwYWdlIGF0IGEgdGltZTogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBhZ2UsIGlkZW50 aWZ5Ci0gKiBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlIGFuZCBzYXZlIHRoZW0g aW4gQlRTY2FuUG9zRGF0YSwgdGhlbgotICogcmVsZWFzZSB0aGUgcmVhZC1sb2NrIHdoaWxlIHJl dHVybmluZyB0aGUgaXRlbXMgdG8gdGhlIGNhbGxlciBmb3IKLSAqIHByb2Nlc3NpbmcuICBUaGlz IGFwcHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jayB0cmFmZmljLiAgV2UgbXVzdCBhbHdheXMK LSAqIGRyb3AgdGhlIGxvY2sgdG8gbWFrZSBpdCBva2F5IGZvciBjYWxsZXIgdG8gcHJvY2VzcyB0 aGUgcmV0dXJuZWQgaXRlbXMuCi0gKiBXaGV0aGVyIG9yIG5vdCB3ZSBjYW4gYWxzbyByZWxlYXNl IHRoZSBwaW4gZHVyaW5nIHRoaXMgd2luZG93IHdpbGwgdmFyeS4KLSAqIFdlIGRyb3AgdGhlIHBp biAod2hlbiBzby0+ZHJvcFBpbikgdG8gYXZvaWQgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkgVkFDVVVN Ci0gKiAoc2VlIG5idHJlZS9SRUFETUUgc2VjdGlvbiBhYm91dCBtYWtpbmcgY29uY3VycmVudCBU SUQgcmVjeWNsaW5nIHNhZmUpLgotICogV2UnbGwgYWx3YXlzIHJlbGVhc2UgYm90aCB0aGUgbG9j ayBhbmQgdGhlIHBpbiBvbiB0aGUgY3VycmVudCBwYWdlIGJlZm9yZQotICogbW92aW5nIG9uIHRv IGl0cyBzaWJsaW5nIHBhZ2UuCi0gKgotICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkg c2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKLSAqIG1hdGNoZWQg aXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGUgSW5kZXhU dXBsZXMgZ28KLSAqIGludG8gYSBzZXBhcmF0ZSB3b3Jrc3BhY2UgYXJyYXk7IGVhY2ggQlRTY2Fu UG9zSXRlbSBzdG9yZXMgaXRzIHR1cGxlJ3MKLSAqIG9mZnNldCB3aXRoaW4gdGhhdCBhcnJheS4g IFBvc3RpbmcgbGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwKLSAqIGFsbG93 aW5nIHRoZSBzYW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4gdGhlIHBvc3Rp bmcgbGlzdAotICogdHVwbGUuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zSXRlbQkv KiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2ggKi8KLXsKLQlJdGVtUG9pbnRlckRh dGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVt YmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8K LQlMb2NhdGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdv cmtzcGFjZSwgaWYgYW55ICovCi19IEJUU2NhblBvc0l0ZW07Ci0KLXR5cGVkZWYgc3RydWN0IEJU U2NhblBvc0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBjdXJyUGFnZSBidWYgKGludmFsaWQg bWVhbnMgdW5waW5uZWQpICovCi0KLQkvKiBwYWdlIGRldGFpbHMgYXMgb2YgdGhlIHNhdmVkIHBv c2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJ CS8qIHBhZ2UgcmVmZXJlbmNlZCBieSBpdGVtcyBhcnJheSAqLwotCUJsb2NrTnVtYmVyIHByZXZQ YWdlOwkJLyogY3VyclBhZ2UncyBsZWZ0IGxpbmsgKi8KLQlCbG9ja051bWJlciBuZXh0UGFnZTsJ CS8qIGN1cnJQYWdlJ3MgcmlnaHQgbGluayAqLwotCVhMb2dSZWNQdHIJbHNuOwkJCS8qIGN1cnJQ YWdlJ3MgTFNOICh3aGVuIHNvLT5kcm9wUGluKSAqLwotCi0JLyogc2NhbiBkaXJlY3Rpb24gZm9y IHRoZSBzYXZlZCBwb3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JU2NhbkRpcmVj dGlvbiBkaXI7Ci0KLQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4s IG5leHRUdXBsZU9mZnNldCBpcyB0aGUgZmlyc3QgZnJlZQotCSAqIGxvY2F0aW9uIGluIHRoZSBh c3NvY2lhdGVkIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlLgotCSAqLwotCWludAkJCW5leHRUdXBs ZU9mZnNldDsKLQotCS8qCi0JICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCB0cmFjayB3aGV0aGVy IHdlIHRoaW5rIHRoZXJlIG1heSBiZSBtYXRjaGluZwotCSAqIGluZGV4IGVudHJpZXMgdG8gdGhl IGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHBhZ2UsIHJlc3BlY3RpdmVseS4KLQkgKi8K LQlib29sCQltb3JlTGVmdDsKLQlib29sCQltb3JlUmlnaHQ7Ci0KLQkvKgotCSAqIFRoZSBpdGVt cyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcK LQkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5p ZW50IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQg dGhlIGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3Ro IGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAq IGl0ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVy bmVkIHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBp bmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4 IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0 ZW1zW10gKi8KLQotCUJUU2NhblBvc0l0ZW0gaXRlbXNbTWF4VElEc1BlckJUcmVlUGFnZV07CS8q IE1VU1QgQkUgTEFTVCAqLwotfSBCVFNjYW5Qb3NEYXRhOwotCi10eXBlZGVmIEJUU2NhblBvc0Rh dGEgKkJUU2NhblBvczsKLQotI2RlZmluZSBCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBcCi0o IFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8 fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNWYWxp ZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc1VucGluKHNjYW5wb3MpIFwK LQlkbyB7IFwKLQkJUmVsZWFzZUJ1ZmZlcigoc2NhbnBvcykuYnVmKTsgXAotCQkoc2NhbnBvcyku YnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIEJUU2NhblBvc1Vu cGluSWZQaW5uZWQoc2NhbnBvcykgXAotCWRvIHsgXAotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQo c2NhbnBvcykpIFwKLQkJCUJUU2NhblBvc1VucGluKHNjYW5wb3MpOyBcCi0JfSB3aGlsZSAoMCkK LQotI2RlZmluZSBCVFNjYW5Qb3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3Jv KEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVy SXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3Mp LmN1cnJQYWdlKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAot CWRvIHsgXAotCQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcyku Y3VyclBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQl9IHdoaWxlICgwKQotCiAvKiBXZSBu ZWVkIG9uZSBvZiB0aGVzZSBmb3IgZWFjaCBlcXVhbGl0eS10eXBlIFNLX1NFQVJDSEFSUkFZIHNj YW4ga2V5ICovCiB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogewpAQCAtMTA1MCw2ICs5 NDUsNDMgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KIAlTY2FuS2V5CQloaWdoX2Nv bXBhcmU7CS8qIGFycmF5J3MgPCBvciA8PSB1cHBlciBib3VuZCAqLwogfSBCVEFycmF5S2V5SW5m bzsKIAorLyogUGVyLWJhdGNoIGRhdGEgcHJpdmF0ZSB0byB0aGUgYnRyZWUgaW5kZXggQU0gKi8K K3R5cGVkZWYgc3RydWN0IEJUQmF0Y2hEYXRhCit7CisJQnVmZmVyCQlidWY7CQkJLyogbGVhZiBw YWdlJ3MgYnVmZmVyIHBpbiAqLworCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogbGVhZiBwYWdl J3MgYmxvY2sgbnVtYmVyICovCisJQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBsZWFmIHBhZ2Un cyBsZWZ0IHNpYmxpbmcgKi8KKwlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIGxlYWYgcGFnZSdz IHJpZ2h0IHNpYmxpbmcgKi8KKwlib29sCQltb3JlTGVmdDsJCS8qIG1vcmUgcGFnZXMgb2YgaW50 ZXJlc3QgdG8gdGhlIGxlZnQ/ICovCisJYm9vbAkJbW9yZVJpZ2h0OwkJLyogbW9yZSBwYWdlcyBv ZiBpbnRlcmVzdCB0byB0aGUgcmlnaHQ/ICovCit9IEJUQmF0Y2hEYXRhOworCisvKiBBY2Nlc3Mg dGhlIGJ0cmVlLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBw b2ludGVyICovCisjZGVmaW5lIEJUQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKSBcCisJaW5kZXhh bV91dGlsX2JhdGNoX2dldF9hbWRhdGEoc2NhbiwgYmF0Y2gsIEJUQmF0Y2hEYXRhKQorCisvKgor ICogQlRTY2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9y IGFuIGluZGV4c2Nhbi4KKyAqIFRoaXMgY29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5 cyAoc2VlIF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKKyAqIGRldGFpbHMgb2YgdGhlIHByZXBy b2Nlc3NpbmcpLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgYXJyYXkKKyAqIGtl eXMuICBUaGVyZSBhcmUgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZSBjdXJyZW50IGFycmF5IGtl eXMgdHJhY2sgdGhlCisgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2NhbiB0aHJvdWdoIHRoZSBp bmRleCdzIGtleSBzcGFjZSAoc2VlIF9idF9yZWFkcGFnZSwKKyAqIGJ0cG9zcmVzZXQsIGFuZCBf YnRfYWR2YW5jZV9hcnJheV9rZXlzKSwgYnV0IHdlIGRvbid0IHRyYWNrIGFueXRoaW5nIGFib3V0 CisgKiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uL2JhdGNoIGluIHRoaXMgb3BhcXVlIHN0cnVj dC4KKyAqCisgKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWUsIGFzIHJlcXVpcmVk IGJ5IHRoZSBhbWdldGJhdGNoIGNvbnRyYWN0OgorICogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhl IHBhZ2UsIGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UKKyAqIGFu ZCByZXR1cm4gdGhlbSBpbiBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaC4gIFdlIHRoZW4gcmVsZWFz ZSB0aGUgcmVhZC1sb2NrCisgKiB1c2luZyBhbWdldGJhdGNoIHV0aWxpdHkgcm91dGluZXMuICBU aGlzIGFwcHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jaworICogdHJhZmZpYy4gIF9idF9uZXh0 IGlzIHBhc3NlZCBwcmlvcmJhdGNoLCB3aGljaCBoYXMgYSBCVEJhdGNoRGF0YSBhcmVhIHRoYXQK KyAqIHRlbGxzIHVzIHdoaWNoIHBhZ2UgaXMgbmV4dCBpbiBsaW5lIHRvIGJlIHJlYWQgaW4gdGhl IGdpdmVuIHNjYW4gZGlyZWN0aW9uCisgKiAodGhpcyBpcyBvZnRlbiB0aGUgc2FtZSBwcmlvcmJh dGNoIHBhc3NlZCB0byBidGdldGJhdGNoIGJ5IGNvcmUgY29kZSkuCisgKgorICogSWYgd2UgYXJl IGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUg Zm9yIGVhY2gKKyAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRzIHRhYmxlIFRJRCBh bmQgb2Zmc2V0LiAgUG9zdGluZyBsaXN0IHR1cGxlcworICogc3RvcmUgYSAiYmFzZSIgdHVwbGUg b25jZSwgYWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHVzZWQgZm9yIGVhY2ggVElEIGluCisg KiB0aGUgcG9zdGluZyBsaXN0LgorICovCiB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRh CiB7CiAJLyogdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgX2J0X3ByZXByb2Nlc3Nfa2V5cygpOiAq LwpAQCAtMTA2NiwzMiArOTk4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQog CUJUQXJyYXlLZXlJbmZvICphcnJheUtleXM7CS8qIGluZm8gYWJvdXQgZWFjaCBlcXVhbGl0eS10 eXBlIGFycmF5IGtleSAqLwogCUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7CQkvKiBPUkRFUiBwcm9j cyBmb3IgcmVxdWlyZWQgZXF1YWxpdHkga2V5cyAqLwogCU1lbW9yeUNvbnRleHQgYXJyYXlDb250 ZXh0OyAvKiBzY2FuLWxpZmVzcGFuIGNvbnRleHQgZm9yIGFycmF5IGRhdGEgKi8KLQotCS8qIGlu Zm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZl ciB1c2VkKSAqLwotCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4 ZXMgb2Yga2lsbGVkIGl0ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1 cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8KLQlib29sCQlkcm9wUGluOwkJLyogZHJvcCBsZWFmIHBp biBiZWZvcmUgYnRnZXR0dXBsZSByZXR1cm5zPyAqLwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9p bmcgYW4gaW5kZXgtb25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKLQkgKiB3 b3Jrc3BhY2VzIGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNo IGlzIG9mIHNpemUKLQkgKiBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxs IHBhZ2UncyB3b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JY2hhcgkgICAqY3VyclR1cGxlczsJCS8q IHR1cGxlIHN0b3JhZ2UgZm9yIGN1cnJQb3MgKi8KLQljaGFyCSAgICptYXJrVHVwbGVzOwkJLyog dHVwbGUgc3RvcmFnZSBmb3IgbWFya1BvcyAqLwotCi0JLyoKLQkgKiBJZiB0aGUgbWFya2VkIHBv c2l0aW9uIGlzIG9uIHRoZSBzYW1lIHBhZ2UgYXMgY3VycmVudCBwb3NpdGlvbiwgd2UKLQkgKiBk b24ndCB1c2UgbWFya1BvcywgYnV0IGp1c3Qga2VlcCB0aGUgbWFya2VkIGl0ZW1JbmRleCBpbiBt YXJrSXRlbUluZGV4Ci0JICogKGFsbCB0aGUgcmVzdCBvZiBjdXJyUG9zIGlzIHZhbGlkIGZvciB0 aGUgbWFyayBwb3NpdGlvbikuIEhlbmNlLCB0bwotCSAqIGRldGVybWluZSBpZiB0aGVyZSBpcyBh IG1hcmssIGZpcnN0IGxvb2sgYXQgbWFya0l0ZW1JbmRleCwgdGhlbiBhdAotCSAqIG1hcmtQb3Mu Ci0JICovCi0JaW50CQkJbWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4LCBvciAtMSBpZiBub3Qg dmFsaWQgKi8KLQotCS8qIGtlZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVuY3kg Ki8KLQlCVFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8K LQlCVFNjYW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRpb24sIGlmIGFueSAqLwog fSBCVFNjYW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEJUU2Nhbk9wYXF1ZURhdGEgKkJUU2Nhbk9w YXF1ZTsKQEAgLTExNjAsMTQgKzEwNjYsMTcgQEAgZXh0ZXJuIGJvb2wgYnRpbnNlcnQoUmVsYXRp b24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiBleHRlcm4gSW5kZXhTY2FuRGVz YyBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBl eHRlcm4gU2l6ZSBidGVzdGltYXRlcGFyYWxsZWxzY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlz LCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lkICp0 YXJnZXQpOwotZXh0ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBidGdldGJhdGNoKEluZGV4U2Nh bkRlc2Mgc2NhbiwKKwkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJCQkJ CSBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgYnRnZXRiaXRtYXAoSW5kZXhTY2Fu RGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gdm9pZCBidHJlc2NhbihJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJIFNjYW5L ZXkgb3JkZXJieXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQgYnR1bmd1YXJkYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitleHRlcm4gdm9pZCBi dGtpbGxpdGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gp OwogZXh0ZXJuIHZvaWQgYnRwYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0 ZXJuIHZvaWQgYnRlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidG1h cmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGJ0cmVzdHJwb3MoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGJ0cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpi dGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCSAgIEluZGV4QnVs a0RlbGV0ZVJlc3VsdCAqc3RhdHMsCiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlQ2FsbGJh Y2sgY2FsbGJhY2ssCkBAIC0xMjcxLDggKzExODAsOSBAQCBleHRlcm4gdm9pZCBfYnRfcHJlcHJv Y2Vzc19rZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVu Y3Rpb25zIGluIG5idHJlYWRwYWdlLmMKICAqLwotZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkgT2Zmc2V0TnVtYmVy IG9mZm51bSwgYm9vbCBmaXJzdHBhZ2UpOworZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsCisJCQkJCQkgU2NhbkRpcmVj dGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkgYm9vbCBmaXJzdHBhZ2UpOwog ZXh0ZXJuIHZvaWQgX2J0X3N0YXJ0X2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50CV9idF9iaW5zcmNoX2FycmF5X3NrZXkoRm1ncklu Zm8gKm9yZGVycHJvYywKIAkJCQkJCQkJICAgYm9vbCBjdXJfZWxlbV90cmlnLCBTY2FuRGlyZWN0 aW9uIGRpciwKQEAgLTEyODcsMTUgKzExOTcsMTUgQEAgZXh0ZXJuIEJUU3RhY2sgX2J0X3NlYXJj aChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJ CQkgIEJ1ZmZlciAqYnVmUCwgaW50IGFjY2VzcywgYm9vbCByZXR1cm5zdGFjayk7CiBleHRlcm4g T2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3Rh dGUgaW5zZXJ0c3RhdGUpOwogZXh0ZXJuIGludDMyIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwg QlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdlLCBPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLWV4dGVy biBib29sIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsK LWV4dGVybiBib29sIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfYnRfbmV4dChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCSAgIEluZGV4U2NhbkJh dGNoIHByaW9yYmF0Y2gpOwogZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9u IHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCk7CiAKIC8qCiAgKiBwcm90b3R5cGVz IGZvciBmdW5jdGlvbnMgaW4gbmJ0dXRpbHMuYwogICovCiBleHRlcm4gQlRTY2FuSW5zZXJ0IF9i dF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXApOwotZXh0ZXJuIHZvaWQg X2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRf dmFjdXVtX2N5Y2xlaWQoUmVsYXRpb24gcmVsKTsKIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3N0YXJ0 X3ZhY3V1bShSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW0oUmVsYXRp b24gcmVsKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDVjZTZhNTBmMi4uN2Q2YTVmNWQ0IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmgKQEAgLTEyMiwxMyArMTIyLDE5NSBAQCB0eXBlZGVmIHN0cnVjdCBQYXJh bGxlbEJsb2NrVGFibGVTY2FuV29ya2VyRGF0YQogfSBQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29y a2VyRGF0YTsKIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXJEYXRh ICpQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyOwogCisvKgorICogTG9jYXRpb24gb2YgYSBC YXRjaE1hdGNoaW5nSXRlbSB3aXRoaW4gdGhlIHNjYW4ncyByaW5nIGJ1ZmZlcgorICovCit0eXBl ZGVmIHN0cnVjdCBCYXRjaFJpbmdJdGVtUG9zCit7CisJLyogUG9zaXRpb24gcmVmZXJlbmNlcyBh IHZhbGlkIEluZGV4U2NhbkRlc2NEYXRhLmJhdGNoYnVmW10gZW50cnk/ICovCisJYm9vbAkJdmFs aWQ7CisKKwkvKiBJbmRleFNjYW5EZXNjRGF0YS5iYXRjaGJ1ZltdLXdpc2UgaW5kZXggdG8gcmVs ZXZhbnQgSW5kZXhTY2FuQmF0Y2ggKi8KKwl1aW50OAkJYmF0Y2g7CisKKwkvKiBJbmRleFNjYW5C YXRjaC5pdGVtc1tdLXdpc2UgaW5kZXggdG8gcmVsZXZhbnQgQmF0Y2hNYXRjaGluZ0l0ZW0gKi8K KwlpbnQJCQlpdGVtOworCit9IEJhdGNoUmluZ0l0ZW1Qb3M7CisKKy8qCisgKiBNYXRjaGluZyBp dGVtIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2ggKGluIHJldHVybmVkIEluZGV4U2NhbkJhdGNoKSBk dXJpbmcgYW4KKyAqIGluZGV4IHNjYW4uICBVc2VkIGJ5IHRhYmxlIEFNIHRvIGxvY2F0ZSByZWxl dmFudCBtYXRjaGluZyB0YWJsZSB0dXBsZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hNYXRj aGluZ0l0ZW0KK3sKKwlJdGVtUG9pbnRlckRhdGEgdGFibGVUaWQ7CS8qIFRJRCBvZiByZWZlcmVu Y2VkIHRhYmxlIGl0ZW0gKi8KKwlPZmZzZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0 ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFnZSAqLworCUxvY2F0aW9uSW5kZXggdHVwbGVPZmZzZXQ7 CS8qIGluZGV4IHR1cGxlJ3MgY3VyclR1cGxlcyBvZmZzZXQsIGlmIGFueSAqLworfSBCYXRjaE1h dGNoaW5nSXRlbTsKKworLyoKKyAqIERhdGEgYWJvdXQgb25lIGJhdGNoIG9mIGl0ZW1zIHJldHVy bmVkIGJ5IChhbmQgcGFzc2VkIHRvKSBhbWdldGJhdGNoIGR1cmluZworICogaW5kZXggc2NhbnMu CisgKgorICogRWFjaCBiYXRjaCBhbGxvY2F0aW9uIGhhcyB0aGUgZm9sbG93aW5nIG1lbW9yeSBs YXlvdXQ6CisgKgorICogICBbdGFibGUgQU0gb3BhcXVlIGFyZWFdICAgIDwtIGFsbG9jYXRpb24g YmFzZSwgYXQgLShiYXRjaF9iYXNlX29mZnNldCkKKyAqICAgW3RhYmxlIEFNIHBlci1pdGVtIGFy ZWFdICA8LSBzdXBwbGVtZW50YWwgZmxleGlibGUgYXJyYXkgcGVyLWl0ZW0gZGF0YQorICogICBb aW5kZXggQU0gc3RhdGljIG9wYXF1ZV0gIDwtIGF0IC0oYmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRp YykKKyAqICAgW0luZGV4U2NhbkJhdGNoRGF0YV0gICAgICA8LSBiYXRjaCBwb2ludGVyLCByZXR1 cm5lZCBieSBhbWdldGJhdGNoCisgKiAgIFtpdGVtc1ttYXhpdGVtc2JhdGNoXV0KKyAqICAgW2N1 cnJUdXBsZXMgd29ya3NwYWNlXSAgICA8LSBpbmRleCBBTSBzdG9yZXMgaW5kZXggdHVwbGVzIGhl cmUgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgtb25seSBzY2Fu cyAoYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSkKKyAqCisgKiBiYXRjaF9iYXNlX29mZnNldCBjb21i aW5lcyB0aGUgdGFibGUgQU0gb3BhcXVlIGFyZWEgKGl0cyBmaXhlZC1zaXplIGhlYWRlcgorICog cGx1cyBpdHMgcGVyLWl0ZW0gYXJlYSksIGFuZCB0aGUgc3RhdGljIGluZGV4IEFNIG9wYXF1ZSBh cmVhIGludG8gYSBzaW5nbGUKKyAqIG9mZnNldCBmcm9tIHRoZSBiYXRjaCBwb2ludGVyIHRvIHRo ZSB0cnVlIGFsbG9jYXRpb24gYmFzZS4gIFRoZQorICogaW5kZXhiYXRjaC5jIHV0aWxpdGllcyBw ZnJlZSBhIGJhdGNoIGJ5IHBhc3NpbmcgcGZyZWUgYSBwb2ludGVyIHJldHVybmVkIGJ5CisgKiBp bmRleF9zY2FuX2JhdGNoX2Jhc2UuICBXZSByZWx5IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgYmF0 Y2hlcyBoYXZlIGEgZml4ZWQKKyAqIGxheW91dCBmb3IgdGhlIGR1cmF0aW9uIG9mIGFuIGluZGV4 IHNjYW4gKGJhdGNoZXMgYXJlIGNhY2hlZCBmb3IgcmV1c2UgdG8KKyAqIGF2b2lkIHBhbGxvYyBj aHVybikuCisgKgorICogVGhlIHRhYmxlIEFNIGFjY2Vzc2VzIGl0cyBvcGFxdWUgYXJlYSB1c2lu ZyB0aGUgaW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhCisgKiBzaGltIGFjY2Vzc29yLiAgVGhl IGFyZWEgaXMgYSBzaW5nbGUgY29udGlndW91cyBibG9jazogYSBmaXhlZC1zaXplIGhlYWRlcgor ICogKHNpemVkIGJhdGNoX29wYXF1ZV9zaXplLCBwb3NzaWJseSB6ZXJvKSBpbW1lZGlhdGVseSBm b2xsb3dlZCBieSBhIHBlci1pdGVtCisgKiBhcmVhIChzaXplZCBtYXhpdGVtc2JhdGNoICogYmF0 Y2hfcGVyX2l0ZW1fc2l6ZSwgd2hpY2ggY2FuIGFsc28gYmUgemVybykuCisgKiBUaGlzIGxldHMg dGhlIHRhYmxlIEFNIGRlc2NyaWJlIHRoZSB3aG9sZSBhcmVhIHdpdGggYSBzaW5nbGUgQyBzdHJ1 Y3QgdGhhdAorICogaGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGZvciBpdHMgcGVyLWl0ZW0g ZGF0YS4gIFRoZSB0YWJsZSBBTSdzCisgKiB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbiBjYWxsYmFj ayBpcyBwZXJtaXR0ZWQgdG8gdmFyeSB0aGUgbGF5b3V0IG9mIGl0cworICogb3BhcXVlIGFyZWEg YXMgaXQgc2VlcyBmaXQsIG9mdGVuIGJhc2VkIG9uIHRoZSByZXF1aXJlbWVudHMgb2Ygb25lCisg KiBwYXJ0aWN1bGFyIHNjYW4gKGUuZy4sIGhlYXBhbSBpbmRleC1vbmx5IHNjYW5zIHVzZSBpdCB0 byBjYWNoZSB2aXNpYmlsaXR5CisgKiBpbmZvcm1hdGlvbiwgd2hlcmVhcyBoZWFwYW0gcmVxdWly ZXMgbm8gcHJpdmF0ZSBhcmVhIGR1cmluZyBwbGFpbiBzY2FucykuCisgKiBCaXRtYXAgc2NhbnMg aW52b2x2aW5nIGFuIGFtZ2V0Yml0bWFwIHJvdXRpbmUgdGhhdCBmaW5kcyBpdCBjb252ZW5pZW50 IHRvCisgKiByZXVzZSBiYXRjaCBpbmZyYXN0cnVjdHVyZSBpbnRlcm5hbGx5IG5ldmVyIGdldCBh IHRhYmxlIEFNIG9wYXF1ZSBhcmVhLgorICoKKyAqIEFuIGluZGV4IEFNIGdldHMgYSBtYW5kYXRv cnkgc3RhdGljIGFyZWEgKGJhdGNoX2luZGV4X29wYXF1ZV9zdGF0aWMpLCB3aGljaAorICogaGFz IGEgc2l6ZSBrbm93biBhdCBjb21waWxlIHRpbWUgLS0gTUFYQUxJR04oc2l6ZW9mKHRoZSBBTSdz IHN0cnVjdCkpIC0tCisgKiBhbmQgaXMgYWNjZXNzZWQgdmlhIGluZGV4YW1fdXRpbF9iYXRjaF9n ZXRfYW1kYXRhIGF0IHRoYXQgZml4ZWQgb2Zmc2V0LgorICogVGhpcyBpcyBtb3JlIGVmZmljaWVu dCBidXQgbGVzcyBmbGV4aWJsZSB0aGFuIHRoZSB0YWJsZSBBTSBzY2hlbWU6IGV2ZXJ5CisgKiBp bmRleCBBTSB1c2VzIHRoZSBzYW1lIGdlbmVyaWMgZml4ZWQtc2l6ZSBoZWFkZXIuCisgKi8KK3R5 cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQoreworCS8qIEluZGV4IHBhZ2UncyBMU04s IG9wdGlvbmFsbHkgdXNlZCBieSBhbWtpbGxpdGVtc2JhdGNoIHJvdXRpbmVzICovCisJWExvZ1Jl Y1B0cglsc247CisKKwkvKiBzY2FuIGRpcmVjdGlvbiB3aGVuIHRoZSBpbmRleCBwYWdlIHdhcyBy ZWFkICovCisJU2NhbkRpcmVjdGlvbiBkaXI7CisKKwkvKgorCSAqIGtub3duRW5kQmFja3dhcmQg YW5kIGtub3duRW5kRm9yd2FyZCBpbmRpY2F0ZSB0aGF0IHRoaXMgYmF0Y2ggaXMgdGhlCisJICog bGFzdCBvbmUgd2l0aCBtYXRjaGluZyBpdGVtcyBpbiB0aGUgcmVsZXZhbnQgc2NhbiBkaXJlY3Rp b24uICBXaGVuCisJICogYW1nZXRiYXRjaCByZXR1cm5zIE5VTEwgZm9yIGEgZ2l2ZW4gZGlyZWN0 aW9uLCB0aGUgY29ycmVzcG9uZGluZyBmbGFnCisJICogaXMgc2V0IG9uIHRoZSBwcmlvcmJhdGNo IHRoYXQgd2FzIHBhc3NlZCB0byB0aGF0IGNhbGwuICBXZSBjYW5ub3Qga25vdworCSAqIHRoaXMg d2hlbiBhIGJhdGNoIGlzIGZpcnN0IHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2g7IGl0IG9ubHkgYmVj b21lcworCSAqIGFwcGFyZW50IHdoZW4gd2UgdHJ5IGFuZCBmYWlsIHRvIGNvbnRpbnVlIHRoZSBz Y2FuIHBhc3QgaXQuCisJICoKKwkgKiBUaGlzIGFsbG93cyB0YWJsZSBBTXMgdG8gYXZvaWQgcmVk dW5kYW50IGFtZ2V0YmF0Y2ggY2FsbHMgd2l0aCB0aGUgc2FtZQorCSAqIHByaW9yYmF0Y2ggLS0g dGhlIGluZGV4IEFNIG1pZ2h0IG5lZWQgdG8gcmVhZCBhZGRpdGlvbmFsIGluZGV4IHBhZ2VzIHRv CisJICogZGV0ZXJtaW5lIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIGl0ZW1zIGJleW9uZCBj YWxsZXIncyBwcmlvcmJhdGNoLgorCSAqLworCWJvb2wJCWtub3duRW5kQmFja3dhcmQ7CisJYm9v bAkJa25vd25FbmRGb3J3YXJkOworCisJLyoKKwkgKiBCYXRjaCBzdGlsbCBob2xkcyBUSUQgcmVj eWNsaW5nIGludGVybG9jaz8KKwkgKi8KKwlib29sCQlpc0d1YXJkZWQ7CisKKwkvKgorCSAqIE1h dGNoaW5nIGl0ZW1zIHN0YXRlIGZvciB0aGlzIGJhdGNoLiAgT3V0cHV0IGJ5IGluZGV4IEFNIGZv ciB0YWJsZSBBTS4KKwkgKgorCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBp biBpbmRleCBvcmRlciAoaWUsIGJ5IGluY3JlYXNpbmcKKwkgKiBpbmRleG9mZnNldCkuICBXaGVu IHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IGZvciBpbmRleCBBTXMKKwkgKiB0 byBmaWxsIHRoZSBhcnJheSBiYWNrLXRvLWZyb250LCBzdGFydGluZyBhdCB0aGUgbGFzdCBpdGVt IHNsb3QgYW5kCisJICogZmlsbGluZyBkb3dud2FyZHMuICBUaGlzIGlzIHdoeSB3ZSBuZWVkIGJv dGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYQorCSAqIGxhc3QtdmFsaWQtZW50cnkgY291bnRl ci4KKwkgKgorCSAqIE5vdGU6IHRoZXNlIGFyZSBzaWduZWQgYmVjYXVzZSBpdCdzIHNvbWV0aW1l cyBjb252ZW5pZW50IHRvIHVzZSAtMSB0bworCSAqIHJlcHJlc2VudCBhbiBvdXQtb2YtYm91bmRz IHNwYWNlIGp1c3QgYmVmb3JlIGZpcnN0SXRlbSAod2hlbiBpdCdzIDApLgorCSAqLworCWludAkJ CWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKwlpbnQJCQls YXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLworCisJLyogaW5mbyBh Ym91dCBkZWFkIGl0ZW1zLCBpZiBhbnkgKHBhbGxvYydkIHNlcGFyYXRlbHksIE5VTEwgaWYgdW51 c2VkKSAqLworCWludAkJCW51bURlYWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBp dGVtcyAqLworCWludAkJICAgKmRlYWRJdGVtczsJCS8qIGl0ZW1zW10td2lzZSBpbmRleGVzIG9m IGRlYWQgaXRlbXMgKi8KKworCS8qCisJICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkg c2NhbiwgdGhpcyBpcyB0aGUgdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UKKwkgKiBmb3IgdGhlIG1h dGNoaW5nIHR1cGxlcyAodHVwbGVzIHJlZmVyZW5jZWQgYnkgaXRlbXNbXSkuICBUaGUgd29ya3Nw YWNlCisJICogc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBBTSAoYmF0Y2hfdHVwbGVz X3dvcmtzcGFjZSkuCisJICoKKwkgKiBjdXJyVHVwbGVzIHBvaW50cyBpbnRvIHRoZSB0cmFpbGlu ZyBwb3J0aW9uIG9mIHRoaXMgYWxsb2NhdGlvbiwKKwkgKiBkaXJlY3RseSBwYXN0IGl0ZW1zW10u ICBJdCBpcyBOVUxMIGZvciBwbGFpbiBpbmRleCBzY2Fucy4KKwkgKi8KKwljaGFyCSAgICpjdXJy VHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgaXRlbXNbXSAqLworCUJhdGNoTWF0Y2hpbmdJ dGVtIGl0ZW1zW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07IC8qIG1hdGNoaW5nIGl0ZW1zICovCit9 IEluZGV4U2NhbkJhdGNoRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRh ICpJbmRleFNjYW5CYXRjaDsKKworLyoKKyAqIFN0YXRlIHVzZWQgYnkgdGFibGUgQU1zIHRvIG1h bmFnZSBhbiBpbmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaAorICogaW50ZXJmYWNl LiAgU2NhbnMgdXNlIGEgcmluZyBidWZmZXIgb2YgYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJh dGNoLgorICoKKyAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgcHJvdmlkZXMgdGFibGUgQU1zIHdpdGgg YSB3YXkgdG8gcmVhZCBhaGVhZCBvZiB0aGUKKyAqIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBieSBf bXVsdGlwbGVfIGJhdGNoZXMvaW5kZXggcGFnZXMuICBUaGUgZnVydGhlciBvdXQKKyAqIHRoZSB0 YWJsZSBBTSByZWFkcyBhaGVhZCBsaWtlIHRoaXMsIHRoZSBmdXJ0aGVyIGl0IGNhbiBzZWUgaW50 byB0aGUgZnV0dXJlLgorICogVGhhdCB3YXkgdGhlIHRhYmxlIEFNIGlzIGFibGUgdG8gcmVvcmRl ciB3b3JrIGFzIGFnZ3Jlc3NpdmVseSBhcyBkZXNpcmVkLgorICovCit0eXBlZGVmIHN0cnVjdCBC YXRjaFJpbmdCdWZmZXIKK3sKKwkvKiBjdXJyZW50IHBvc2l0aW9ucyBpbiBJbmRleFNjYW5EZXNj RGF0YS5iYXRjaGJ1ZltdIGZvciBzY2FuICovCisJQmF0Y2hSaW5nSXRlbVBvcyBzY2FuUG9zOwkv KiBzY2FuJ3MgcmVhZCBwb3NpdGlvbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3MgbWFya1BvczsJLyog bWFyay9yZXN0b3JlIHBvc2l0aW9uICovCisKKwkvKiBtYXJrUG9zJ3MgYmF0Y2ggKG5vdCBpbiBy aW5nIGJ1ZmZlciB3aGVuIG1hcmtCYXRjaCAhPSBzY2FuQmF0Y2gpICovCisJSW5kZXhTY2FuQmF0 Y2ggbWFya0JhdGNoOworCisJLyoKKwkgKiBoZWFkQmF0Y2ggaXMgYW4gaW5kZXggdG8gdGhlIGVh cmxpZXN0IHN0aWxsLXZhbGlkIHJpbmcgYnVmZmVyIGJhdGNoCisJICogc2xvdCBpbiBiYXRjaGJ1 ZltdLiAgVGhlIGFjdHVhbCBhcnJheSBwb3NpdGlvbiBmb3IgaXRzIEluZGV4U2NhbkJhdGNoCisJ ICogaXMgaGVhZEJhdGNoICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKSwgc2luY2UgdGhl c2UgaW5kZXhlcyB1c2UKKwkgKiB1bnNpZ25lZCB3cmFwcGluZyBhcml0aG1ldGljLiAgaGVhZEJh dGNoIG11c3QgYmUgdGhlIHNjYW4ncyBjdXJyZW50CisJICogc2NhbkJhdGNoIChpLmUuIHRoZSBj dXJyZW50IHNjYW5Qb3MgYmF0Y2gpLgorCSAqLworCXVpbnQ4CQloZWFkQmF0Y2g7CisKKwkvKgor CSAqIG5leHRCYXRjaCBpcyBhbiBpbmRleCB0byB0aGUgbmV4dCBfZW1wdHlfIHJpbmcgYnVmZmVy IGJhdGNoIHNsb3QgaW4KKwkgKiBiYXRjaGJ1ZltdIChpLmUuIGl0J3MgdGhlIHRhaWwgZW50cnkg b2Ygb3VyIHJpbmcgYnVmZmVyKS4gIFRoZSBhY3R1YWwKKwkgKiBiYXRjaGJ1ZltdIGFycmF5IHBv c2l0aW9uIGlzIG5leHRCYXRjaCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIDEpLgorCSAqIE5l dyBiYXRjaGVzIGNhbiBvbmx5IGJlIHNhZmVseSBhcHBlbmRlZCB0byB0aGlzIHRhaWwgcG9zaXRp b24gd2hlbgorCSAqICFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoKS4KKwkgKgorCSAqIE5vdGU6IHRo ZSBzY2FuJ3MgbW9zdCByZWNlbnRseSBhcHBlbmRlZCBiYXRjaCBpcyBhbHdheXMgbG9jYXRlZCBh dAorCSAqIChuZXh0QmF0Y2ggLSAxKSAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSkuCisJ ICovCisJdWludDgJCW5leHRCYXRjaDsKK30gQmF0Y2hSaW5nQnVmZmVyOworCiBzdHJ1Y3QgSW5k ZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCiAvKgogICogV2UgdXNlIHRoZSBzYW1lIEluZGV4U2Nh bkRlc2NEYXRhIHN0cnVjdHVyZSBmb3IgYm90aCBhbWdldHR1cGxlLWJhc2VkCiAgKiBhbmQgYW1n ZXRiaXRtYXAtYmFzZWQgaW5kZXggc2NhbnMuICBTb21lIGZpZWxkcyBhcmUgb25seSByZWxldmFu dCBpbgotICogYW1nZXR0dXBsZS1iYXNlZCBzY2Fucy4KKyAqIGFtZ2V0dHVwbGUtYmFzZWQgc2Nh bnMuICBPdGhlcnMgYXJlIG9ubHkgdXNlZCBpbiBhbWdldGJhdGNoLWJhc2VkIHNjYW5zLgorICoK KyAqIFRoZSByaW5nIGJ1ZmZlciB1c2VkIGJ5IGFtZ2V0YmF0Y2ggc2NhbnMgaXMgc3RvcmVkIGhl cmUgYXMgYSBmaXhlZCBhcnJheSBvZgorICogcG9pbnRlcnMgdG8gYmF0Y2hlcy4gIFdlIG5lZWQg YSBtaW5pbXVtIG9mIHR3byByaW5nIGJ1ZmZlciBiYXRjaGVzIChidXQgdXNlCisgKiBJTkRFWF9T Q0FOX01BWF9CQVRDSEVTKSwgc2luY2UgdGFibGUgQU1zIG9ubHkgcmVtb3ZlIGEgYmF0Y2ggYWZ0 ZXIgdGhleSd2ZQorICogYWxyZWFkeSBjYWxsZWQgYW1nZXRiYXRjaCBhZ2FpbiBhbmQgYXBwZW5k ZWQgdGhlIHJldHVybmVkIGJhdGNoLgogICovCisjZGVmaW5lIElOREVYX1NDQU5fQ0FDSEVfQkFU Q0hFUwkyCisjZGVmaW5lIElOREVYX1NDQU5fTUFYX0JBVENIRVMJCTY0CisKK1N0YXRpY0Fzc2Vy dERlY2woSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyA8PSBQR19JTlQ4X01BWCArIDEsCisJCQkJICJp bmRleF9zY2FuX2JhdGNoX2xvYWRlZCByZWxpZXMgb24gaW50OCByaW5nIGJ1ZmZlciBhcml0aG1l dGljIik7CitTdGF0aWNBc3NlcnREZWNsKChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTICYgKElOREVY X1NDQU5fTUFYX0JBVENIRVMgLSAxKSkgPT0gMCwKKwkJCQkgIklOREVYX1NDQU5fTUFYX0JBVENI RVMgbXVzdCBiZSBhIHBvd2VyIG9mIDIiKTsKKwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVz Y0RhdGEKIHsKIAkvKiBzY2FuIHBhcmFtZXRlcnMgKi8KQEAgLTEzOSw2ICszMjEsMjYgQEAgdHlw ZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlpbnQJCQludW1iZXJPZk9yZGVyQnlzOwkv KiBudW1iZXIgb2Ygb3JkZXJpbmcgb3BlcmF0b3JzICovCiAJc3RydWN0IFNjYW5LZXlEYXRhICpr ZXlEYXRhOwkvKiBhcnJheSBvZiBpbmRleCBxdWFsaWZpZXIgZGVzY3JpcHRvcnMgKi8KIAlzdHJ1 Y3QgU2NhbktleURhdGEgKm9yZGVyQnlEYXRhOwkvKiBhcnJheSBvZiBvcmRlcmluZyBvcCBkZXNj cmlwdG9ycyAqLworCisJLyogaW5kZXggYWNjZXNzIG1ldGhvZCdzIHByaXZhdGUgc3RhdGUgKi8K Kwl2b2lkCSAgICpvcGFxdWU7CQkJLyogYWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBpbmZvICovCisK KwkvKiBzY2FuJ3MgYW1nZXRiYXRjaCBzdGF0ZSAob25seSB1c2VkIGJ5IGFtZ2V0YmF0Y2gvdXNl YmF0Y2hyaW5nIHNjYW5zKSAqLworCUJhdGNoUmluZ0J1ZmZlciBiYXRjaHJpbmdidWY7CisKKwkv KgorCSAqIEFycmF5IG9mIHBvaW50ZXJzIHRvIHJlY3ljbGFibGUgYmF0Y2hlcywgdXNlZCBieSBh bGwgYW1nZXRiYXRjaCBzY2FucworCSAqIGFuZCBieSBhbWdldGJpdG1hcCBzY2FucyBvZiBhbiBp bmRleCBBTSB0aGF0IHN1cHBvcnRzIGFtZ2V0YmF0Y2gKKwkgKi8KKwlJbmRleFNjYW5CYXRjaCBi YXRjaGNhY2hlW0lOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFU107CisKKwkvKiBBcnJheSBvZiBwb2lu dGVycyB0byBiYXRjaGVzLCByZWZlcmVuY2VkIHdpdGhpbiBiYXRjaHJpbmdidWYgKi8KKwlJbmRl eFNjYW5CYXRjaCBiYXRjaGJ1ZltJTkRFWF9TQ0FOX01BWF9CQVRDSEVTXTsKKworCWJvb2wJCXVz ZWJhdGNocmluZzsJLyogc2NhbiB1c2VzIGFtZ2V0YmF0Y2gvYmF0Y2hyaW5nYnVmPyAqLworCWJv b2wJCWJhdGNoSW1tZWRpYXRlVW5ndWFyZDsJLyogZWFnZXJseSBkcm9wIFRJRCByZWN5Y2xpbmcK KwkJCQkJCQkJCQkgKiBpbnRlcmxvY2s/ICovCisKIAlib29sCQl4c193YW50X2l0dXA7CS8qIGNh bGxlciByZXF1ZXN0cyBpbmRleCB0dXBsZXMgKi8KIAlib29sCQl4c190ZW1wX3NuYXA7CS8qIHVu cmVnaXN0ZXIgc25hcHNob3QgYXQgc2NhbiBlbmQ/ICovCiAKQEAgLTE0NywxMyArMzQ5LDEyIEBA IHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJYm9vbAkJaWdub3JlX2tpbGxlZF90 dXBsZXM7CS8qIGRvIG5vdCByZXR1cm4ga2lsbGVkIGVudHJpZXMgKi8KIAlib29sCQl4YWN0U3Rh cnRlZEluUmVjb3Zlcnk7CS8qIHByZXZlbnRzIGtpbGxpbmcvc2VlaW5nIGtpbGxlZAogCQkJCQkJ CQkJCSAqIHR1cGxlcyAqLwotCi0JLyogaW5kZXggYWNjZXNzIG1ldGhvZCdzIHByaXZhdGUgc3Rh dGUgKi8KLQl2b2lkCSAgICpvcGFxdWU7CQkJLyogYWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBpbmZv ICovCisJLyogeHNfc25hcHNob3QgdXNlcyBhbiBNVkNDIHNuYXBzaG90PyAqLworCWJvb2wJCU1W Q0NTY2FuOwogCiAJLyoKLQkgKiBJbnN0cnVtZW50YXRpb24gY291bnRlcnMgbWFpbnRhaW5lZCBi eSBhbGwgaW5kZXggQU1zIGR1cmluZyBib3RoCi0JICogYW1nZXR0dXBsZSBjYWxscyBhbmQgYW1n ZXRiaXRtYXAgY2FsbHMgKHVubGVzcyBmaWVsZCByZW1haW5zIE5VTEwpCisJICogSW5zdHJ1bWVu dGF0aW9uIGNvdW50ZXJzIG1haW50YWluZWQgZHVyaW5nIGFtZ2V0YmF0Y2gsIGFtZ2V0Yml0bWFw LCBhbmQKKwkgKiBhbWdldHR1cGxlIHNjYW5zICh1bmxlc3MgZmllbGQgcmVtYWlucyBOVUxMKQog CSAqLwogCXN0cnVjdCBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQ7CiAKQEAg LTE3Nyw4ICszNzgsOSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCiAJLyoK IAkgKiBSZXNvbHZlZCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgY2FsbGJhY2ssIHdoaWNoIGlz IHNldCBieQotCSAqIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luIGF0IHRoZSBzdGFydCBvZiBhbWdl dHR1cGxlIHNjYW5zLiAgUmVwb3J0cyB2aWEKLQkgKiAqcmVjaGVjayAoaWYgbm90IE5VTEwpIHdo ZXRoZXIgdGhlIHNjYW4ga2V5cyBtdXN0IGJlIHJlY2hlY2tlZC4KKwkgKiB0YWJsZV9pbmRleF9m ZXRjaF9iZWdpbiBhdCB0aGUgc3RhcnQgb2YgYW1nZXRiYXRjaC9hbWdldHR1cGxlIHNjYW5zLgor CSAqIFJlcG9ydHMgdmlhICpyZWNoZWNrIChpZiBub3QgTlVMTCkgd2hldGhlciB0aGUgc2NhbiBr ZXlzIG11c3QgYmUKKwkgKiByZWNoZWNrZWQuCiAJICovCiAJYm9vbAkJKCp4c19nZXRuZXh0X3Ns b3QpIChzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sCiAJCQkJCQkJCQlTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbiwKQEAgLTE5Myw2ICszOTUsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhT Y2FuRGVzY0RhdGEKIAkgKi8KIAlib29sCQl4c19yZWNoZWNrOwogCisJLyogYmF0Y2ggc2l6ZSBp bmZvcm1hdGlvbiwgc2V0IG9uY2UgYnkgaW5kZXggQU0gaW4gYW1iZWdpbnNjYW4gKi8KKwl1aW50 MTYJCW1heGl0ZW1zYmF0Y2g7CS8qIHNpemUgb2YgZWFjaCBiYXRjaCdzIGl0ZW1zW10gYXJyYXkg Ki8KKwl1aW50MTYJCWJhdGNoX2luZGV4X29wYXF1ZV9zdGF0aWM7CS8qIGNvbXBpbGUtdGltZSBv cGFxdWUgc2l6ZSAqLworCXVpbnQxNgkJYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZTsgLyogY3VyclR1 cGxlcyB3b3Jrc3BhY2Ugc2l6ZSAqLworCisJLyoKKwkgKiBUYWJsZSBBTSBiYXRjaCBvcGFxdWUg c2l6aW5nLCBzZXQgb25jZSBieSBpbmRleF9mZXRjaF9iZWdpbiAoZXhjZXB0CisJICogZHVyaW5n IGJpdG1hcCBzY2FucykKKwkgKi8KKwl1aW50MTYJCWJhdGNoX29wYXF1ZV9zaXplOwkvKiB0YWJs ZSBBTSBmaXhlZC1zaXplIG9wYXF1ZSBhcmVhIHNpemUgKi8KKwl1aW50MTYJCWJhdGNoX3Blcl9p dGVtX3NpemU7CS8qIHBlci1pdGVtIHRhYmxlIEFNIGFyZWEgc2l6ZSAqLworCisJLyogT2Zmc2V0 IHVzZWQgYnkgaW5kZXhfc2Nhbl9iYXRjaF9iYXNlIChzZXQgb24gZmlyc3QgYmF0Y2ggYWxsb2Mp ICovCisJU2l6ZQkJYmF0Y2hfYmFzZV9vZmZzZXQ7CisKIAkvKgogCSAqIFdoZW4gZmV0Y2hpbmcg d2l0aCBhbiBvcmRlcmluZyBvcGVyYXRvciwgdGhlIHZhbHVlcyBvZiB0aGUgT1JERVIgQlkKIAkg KiBleHByZXNzaW9ucyBvZiB0aGUgbGFzdCByZXR1cm5lZCB0dXBsZSwgYWNjb3JkaW5nIHRvIHRo ZSBpbmRleC4gIElmCkBAIC0yNDQsNCArNDYxLDE3NiBAQCB0eXBlZGVmIHN0cnVjdCBTeXNTY2Fu RGVzY0RhdGEKIAlzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CiB9IFN5c1NjYW5EZXNjRGF0 YTsKIAorLyoKKyAqIEhvdyBtYW55IGJhdGNoZXMgYXJlIGN1cnJlbnRseSBsb2FkZWQgaW4gdGhl IHJpbmcgYnVmZmVyPworICovCitzdGF0aWMgaW5saW5lIHVpbnQ4CitpbmRleF9zY2FuX2JhdGNo X2NvdW50KEluZGV4U2NhbkRlc2NEYXRhICpzY2FuKQoreworCXJldHVybiAodWludDgpIChzY2Fu LT5iYXRjaHJpbmdidWYubmV4dEJhdGNoIC0KKwkJCQkJc2Nhbi0+YmF0Y2hyaW5nYnVmLmhlYWRC YXRjaCk7Cit9CisKKy8qCisgKiBEbyB3ZSBhbHJlYWR5IGhhdmUgYSBiYXRjaCBsb2FkZWQgYXQg J2lkeCcgb2Zmc2V0IGluIHNjYW4ncyByaW5nIGJ1ZmZlcj8KKyAqCisgKiBOT1RFOiBhIHN0YWxl IGJhdGNoIGlkeCBjYW4gYWxpYXMgYSBjdXJyZW50bHktbG9hZGVkIHJhbmdlIGR1ZSB0bworICog d3JhcGFyb3VuZCwgcHJvZHVjaW5nIGEgZmFsc2UgcG9zaXRpdmUuICBGYWxzZSBuZWdhdGl2ZXMg YXJlIG5vdCBwb3NzaWJsZS4KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX2Jh dGNoX2xvYWRlZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgdWludDggaWR4KQoreworCXJldHVy biAoaW50OCkgKGlkeCAtIHNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0Y2gpID49IDAgJiYKKwkJ KGludDgpIChpZHggLSBzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNoKSA8IDA7Cit9CisKKy8q CisgKiBIYXZlIHdlIGxvYWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmF0Y2hlcz8KKyAqLwor c3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX2JhdGNoX2Z1bGwoSW5kZXhTY2FuRGVzY0Rh dGEgKnNjYW4pCit7CisJcmV0dXJuIGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gSU5E RVhfU0NBTl9NQVhfQkFUQ0hFUzsKK30KKworLyoKKyAqIFJldHVybiBiYXRjaCBmb3IgdGhlIHBy b3ZpZGVkIGluZGV4LgorICovCitzdGF0aWMgaW5saW5lIEluZGV4U2NhbkJhdGNoCitpbmRleF9z Y2FuX2JhdGNoKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCB1aW50OCBpZHgpCit7CisJQXNzZXJ0 KGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIGlkeCkpOworCisJcmV0dXJuIHNjYW4tPmJh dGNoYnVmW2lkeCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSldOworfQorCisvKgorICog QXBwZW5kIGdpdmVuIGJhdGNoIHRvIHNjYW4ncyBiYXRjaCByaW5nIGJ1ZmZlci4KKyAqLworc3Rh dGljIGlubGluZSB2b2lkCitpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChJbmRleFNjYW5EZXNjRGF0 YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJQmF0Y2hSaW5nQnVmZmVyICpyaW5n YnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwl1aW50OAkJbmV4dEJhdGNoID0gcmluZ2J1Zi0+ bmV4dEJhdGNoOworCisJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOworCisJ c2Nhbi0+YmF0Y2hidWZbbmV4dEJhdGNoICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKV0g PSBiYXRjaDsKKwlyaW5nYnVmLT5uZXh0QmF0Y2grKzsKK30KKworLyoKKyAqIFJldHVybiB0aGUg dHJ1ZSBhbGxvY2F0aW9uIGJhc2Ugb2YgYSBiYXRjaCAodXNlZCB0byBwZnJlZSBiYXRjaGVzKQor ICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgoraW5kZXhfc2Nhbl9iYXRjaF9iYXNlKEluZGV4U2Nh bkRlc2NEYXRhICpzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlBc3NlcnQoc2Nhbi0+ YmF0Y2hfYmFzZV9vZmZzZXQgPiAwKTsKKworCXJldHVybiAoY2hhciAqKSBiYXRjaCAtIHNjYW4t PmJhdGNoX2Jhc2Vfb2Zmc2V0OworfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUg dGFibGUgQU0gb3BhcXVlIGFyZWEuCisgKgorICogVGhpcyBhcmVhIHN0YXJ0cyB3aXRoIHRoZSB0 YWJsZSBBTSdzIGZpeGVkLXNpemUgaGVhZGVyIChzaXplZAorICogYmF0Y2hfb3BhcXVlX3NpemUs IHdoaWNoIG1heSBiZSB6ZXJvKSBhbmQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgaXRzCisg KiBwZXItaXRlbSBhcmVhIChwcmVzZW50IG9ubHkgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMpLiAg Q2FsbGVycyBtdXN0IG5vdAorICogZGVyZWZlcmVuY2UgYmV5b25kIHdoYXQgdGhleSByZXNlcnZl ZCB2aWEgYmF0Y2hfb3BhcXVlX3NpemUgYW5kCisgKiBiYXRjaF9wZXJfaXRlbV9zaXplLgorICov CitzdGF0aWMgaW5saW5lIHZvaWQgKgoraW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhKEluZGV4 U2NhbkRlc2NEYXRhICpzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKgorCSAqIFRo ZSB0YWJsZSBBTSBvcGFxdWUgYXJlYSBpcyBhbHdheXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUg YmF0Y2gncworCSAqIGFsbG9jYXRlZCBzcGFjZQorCSAqLworCXJldHVybiBpbmRleF9zY2FuX2Jh dGNoX2Jhc2Uoc2NhbiwgYmF0Y2gpOworfQorCisvKgorICogQWR2YW5jZSBwb3NpdGlvbiB0byBp dHMgbmV4dCBpdGVtIGluIHRoZSBiYXRjaC4KKyAqCisgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGl0 ZW0gd2l0aGluIHRoZSBwcm92aWRlZCBiYXRjaCAob3IgdG8gdGhlIHByZXZpb3VzIGl0ZW0sCisg KiB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcykuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBw b3NpdGlvbiBjb3VsZCBiZSBhZHZhbmNlZC4gIFJldHVybnMgZmFsc2Ugd2hlbiB0aGVyZQorICog YXJlIG5vIG1vcmUgaXRlbXMgZnJvbSB0aGUgYmF0Y2ggcmVtYWluaW5nIGluIHRoZSBnaXZlbiBz Y2FuIGRpcmVjdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX3Bvc19h ZHZhbmNlKFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkgICBJbmRleFNjYW5CYXRjaCBi YXRjaCwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCS8qCisJICogT24gZW50cnksIHBvcy0+ aXRlbSBtdXN0IGJlIHZhbGlkLCBhbmQgbXVzdCBhY3R1YWxseSBwb2ludCB0byBhIHZhbGlkCisJ ICogaXRlbSBmb3IgdGhpcyBiYXRjaC4gIFRoZXJlIGlzIGV4YWN0bHkgb25lIGV4Y2VwdGlvbjog cG9zLT5pdGVtIG1heQorCSAqIGluaXRpYWxseSBzaXQgb25lIHN0ZXAgb3V0c2lkZSB0aGUgYmF0 Y2ggd2hlbiBjYWxsZXIganVzdCBmbGlwcGVkIGl0cworCSAqIHNjYW4gZGlyZWN0aW9uLiAgcG9z LT5pdGVtIHdpbGwgcG9pbnQgdG8gYSB2YWxpZCBpdGVtIG9uY2Ugd2UgcmV0dXJuCisJICogKHdl IF9tdXN0XyByZXR1cm4gdHJ1ZSB3aGVuIHBhc3NlZCBhIGp1c3Qtc3RlcHBlZC1vZmYtYmF0Y2gg cG9zaXRpb24pLgorCSAqCisJICogVGhpcyBwcmVjb25kaXRpb24gZW5zdXJlcyB0aGF0IGNhbGxl cnMgYWN0dWFsbHkgc3RlcCB0byB0aGUgbmV4dCBiYXRjaAorCSAqIHdoZW4gaW5kaWNhdGVkIChv ciBmbGlwIHRoZSBzY2FuIGRpcmVjdGlvbiBpbnN0ZWFkLCB3aGljaCBjYW4gaGFwcGVuCisJICog cmlnaHQgYWZ0ZXIgYSBjdXJzb3IgdHJpZXMgdG8gc3RlcCBvZmYgdGhlIGZpbmFsIGJhdGNoIGlu IHRoZSBnaXZlbgorCSAqIHNjYW4gZGlyZWN0aW9uKS4gIFRhYmxlIEFNcyBtdXN0IGF2b2lkIGFt YmlndW91cyBwb3NpdGlvbmFsIHN0YXRlcy4KKwkgKi8KKwlBc3NlcnQocG9zLT52YWxpZCk7CisK KwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCXsKKwkJLyogUHJlY29u ZGl0aW9uOiB2YWxpZC1vci1qdXN0LWJlZm9yZS1zdGFydCBpdGVtIHBvc2l0aW9uICovCisJCUFz c2VydChwb3MtPml0ZW0gPj0gYmF0Y2gtPmZpcnN0SXRlbSAtIDEpOworCQlBc3NlcnQocG9zLT5p dGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisKKwkJaWYgKCsrcG9zLT5pdGVtID4gYmF0Y2gtPmxh c3RJdGVtKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCQkJCQkJLyogU2NhbkRpcmVjdGlv bklzQmFja3dhcmQgKi8KKwl7CisJCS8qIFByZWNvbmRpdGlvbjogdmFsaWQtb3ItanVzdC1wYXN0 LWVuZCBpdGVtIHBvc2l0aW9uICovCisJCUFzc2VydChwb3MtPml0ZW0gPj0gYmF0Y2gtPmZpcnN0 SXRlbSk7CisJCUFzc2VydChwb3MtPml0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtICsgMSk7CisKKwkJ aWYgKC0tcG9zLT5pdGVtIDwgYmF0Y2gtPmZpcnN0SXRlbSkKKwkJCXJldHVybiBmYWxzZTsKKwl9 CisKKwkvKiBBZHZhbmNlZCB3aXRoaW4gYmF0Y2ggKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoK KyAqIEFkdmFuY2UgYmF0Y2ggcG9zaXRpb24gdG8gdGhlIHN0YXJ0IG9mIGl0cyBuZXcgYmF0Y2gu CisgKgorICogV2hlbiB3ZSdyZSBjYWxsZWQsIHRoaXMgcG9zaXRpb24gc2hvdWxkIHBvaW50IHRv IGEgYmF0Y2ggdGhhdCBjYWxsZXIganVzdAorICogZmluaXNoZWQgY29uc3VtaW5nIGZyb20uICBX aGVuIHdlIHJldHVybiwgdGhpcyBwb3NpdGlvbiB3aWxsIHBvaW50IHRvCisgKiBuZXh0QmF0Y2gs IHRoZSBuZXh0IGJhdGNoIGZyb20gdGhlIHJpbmcgYnVmZmVyLiAgV2UnbGwgaGF2ZSBhbHNvIHNl dCB0aGUKKyAqIHBvc2l0aW9uJ3MgaXRlbSBvZmZzZXQgdG8gbmV4dEJhdGNoJ3MgZmlyc3QgaXRl bSBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uCisgKiAod2hpY2ggaXMgYWN0dWFsbHkgbmV4dEJhdGNo J3MgX2xhc3RfIGl0ZW0gd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLgorICoKKyAqIG5leHRCYXRj aCBkb2Vzbid0IGhhdmUgdG8gYmUgKGFuZCBvZnRlbiBpc24ndCkgdGhlIG1vc3QgcmVjZW50bHkg YXBwZW5kZWQKKyAqIGJhdGNoIGluIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBJdCBpcyBtZXJl bHkgdGhlIG5leHQgYmF0Y2ggaW4gbGluZSB0byBiZQorICogY29uc3VtZWQgZnJvbSB0aGUgcG9p bnQgb2YgdmlldyBvZiBvdXIgY2FsbGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2luZGV4 X3NjYW5fcG9zX25leHRiYXRjaChTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCSBJbmRl eFNjYW5CYXRjaCBuZXh0QmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlBc3NlcnQo bmV4dEJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKwlBc3NlcnQobmV4dEJhdGNoLT5maXJzdEl0 ZW0gPD0gbmV4dEJhdGNoLT5sYXN0SXRlbSk7CisKKwkvKiBJbmNyZW1lbnQgYmF0Y2ggKG1pZ2h0 IHdyYXApLCBvciBpbml0aWFsaXplIGl0IHRvIHplcm8gKi8KKwlpZiAocG9zLT52YWxpZCkKKwkJ cG9zLT5iYXRjaCsrOworCWVsc2UKKwkJcG9zLT5iYXRjaCA9IDA7CisKKwlwb3MtPnZhbGlkID0g dHJ1ZTsKKworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCXBvcy0+ aXRlbSA9IG5leHRCYXRjaC0+Zmlyc3RJdGVtOworCWVsc2UKKwkJcG9zLT5pdGVtID0gbmV4dEJh dGNoLT5sYXN0SXRlbTsKK30KKwogI2VuZGlmCQkJCQkJCS8qIFJFTFNDQU5fSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmgKaW5kZXggMjgyZmRmMzdiLi5jZWJiMDlmZmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApA QCAtNDU0LDEwICs0NTQsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkgKiBm bGFncyBpcyBhIGJpdG1hc2sgb2YgU2Nhbk9wdGlvbnMgYWZmZWN0aW5nIHVuZGVybHlpbmcgdGFi bGUgc2NhbgogCSAqIGJlaGF2aW9yLiBTZWUgc2Nhbl9iZWdpbigpIGZvciBtb3JlIGluZm9ybWF0 aW9uIG9uIHBhc3NpbmcgdGhlc2UuCiAJICoKLQkgKiBDYWxsYmFjayBpcyByZXNwb25zaWJsZSBm b3Igc2V0dGluZyBJbmRleFNjYW5EZXNjLnhzX2dldG5leHRfc2xvdCB0bwotCSAqIHRoZSBhcHBy b3ByaWF0ZSBzbG90LWJhc2VkIGNhbGxiYWNrLiAgVHVwbGVzIGNhbiB0aGVuIGJlIGZldGNoZWQg dmlhCi0JICogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KCkuICBObyBzZXBhcmF0ZSBzbG90LWJh c2VkIGNhbGxiYWNrIGV4aXN0cyBpbgotCSAqIHRoaXMgc3RydWN0IQorCSAqIENhbGxiYWNrIGlz IHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIHNjYW4ncyBiYXRjaCByaW5nIGJ1ZmZl cgorCSAqICh3aGVuIHRoZSBzY2FuJ3MgaW5kZXggQU0gc3VwcG9ydHMgdGhlIGFtZ2V0YmF0Y2gg aW50ZXJmYWNlKSwgYW5kIGZvcgorCSAqIHNldHRpbmcgSW5kZXhTY2FuRGVzYy54c19nZXRuZXh0 X3Nsb3QgdG8gdGhlIGFwcHJvcHJpYXRlIHNsb3QtYmFzZWQKKwkgKiBjYWxsYmFjay4gIFR1cGxl cyBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYSB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoKS4KKwkg KiBObyBzZXBhcmF0ZSBzbG90LWJhc2VkIGNhbGxiYWNrIGV4aXN0cyBpbiB0aGlzIHN0cnVjdCEK IAkgKgogCSAqIEluIHByaW5jaXBsZSBhIHNpbmdsZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sg KHN0b3JlZCBoZXJlKSB3b3VsZAogCSAqIHN1ZmZpY2UsIGJ1dCB1c2luZyBzcGVjaWFsaXplZCB2 YXJpYW50cyBhbGxvd3MgdGhlIHRhYmxlIEFNIHRvIHByb3ZpZGUKQEAgLTQ2OSw5ICs0NzAsMjQg QEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkgKiBjb2x1bW5zIGRvIG5vdCBjaGFu Z2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgogCSAqIHRo ZSB0dXBsZSB0aGF0IGlzIHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQg cG9pbnRzIHRvIGFuCiAJICogb2xkZXIgdmVyc2lvbiBvZiB0aGUgdHVwbGUuCisJICoKKwkgKiBD YWxsYmFjayBhbHNvIGluaXRpYWxpemVzIHRoZSBzY2FuIGRlc2NyaXB0b3IncyBiYXRjaF9vcGFx dWVfc2l6ZSBhbmQKKwkgKiBiYXRjaF9wZXJfaXRlbV9zaXplIGZpZWxkcywgdG8gbGV0IHRoZSBj b3JlIGNvZGUga25vdyBob3cgbXVjaCBtZW1vcnkKKwkgKiB3aWxsIGJlIHJlcXVpcmVkIGluIHRo ZSB0YWJsZSBBTSBwb3J0aW9ucyBvZiBlYWNoIGJhdGNoIGFsbG9jYXRpb24KKwkgKiAoZHVyaW5n IGFtZ2V0YmF0Y2ggaW5kZXggc2NhbnMpLiAgU2VlIHJlbHNjYW4uaCBmb3IgZnVsbCBkZXRhaWxz LgogCSAqLwogCXZvaWQJCSgqaW5kZXhfZmV0Y2hfYmVnaW4pIChJbmRleFNjYW5EZXNjIHNjYW4s IHVpbnQzMiBmbGFncyk7CiAKKwkvKgorCSAqIEluaXRpYWxpemUgdGFibGUgQU0ncyBwZXItYmF0 Y2ggb3BhcXVlIGFyZWEgd2l0aGluIGEgYmF0Y2ggYWxsb2NhdGlvbi4KKwkgKgorCSAqIENhbGxl ZCBieSBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2ggZm9yIGVhY2ggbmV3IG9yIHJlY3ljbGVkIGJh dGNoLCBidXQKKwkgKiBvbmx5IHdoZW4gdGhlIHRhYmxlIEFNIHJlc2VydmVkIGFuIG9wYXF1ZSBh cmVhIGZvciB0aGUgc2NhbiAoYnkgc2V0dGluZworCSAqIGJhdGNoX29wYXF1ZV9zaXplIGFuZC9v ciBiYXRjaF9wZXJfaXRlbV9zaXplIHRvIGEgdmFsdWUgPiAwKS4KKwkgKi8KKwl2b2lkCQkoKmlu ZGV4X2ZldGNoX2JhdGNoX2luaXQpIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJICAg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCiAJLyoKIAkgKiBSZXNldCBpbmRleCBzY2FuIGZvciBh IHJlc2Nhbi4gIFJlc2V0cyB0YWJsZS1vd25lZCByZXNvdXJjZXMuCiAJICovCkBAIC00ODIsNiAr NDk4LDE2IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICovCiAJdm9pZAkJKCpp bmRleF9mZXRjaF9lbmQpIChJbmRleFNjYW5EZXNjIHNjYW4pOwogCisJLyoKKwkgKiBNYXJrIHRo ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24gc28gaXQgY2FuIGJlIHJlc3RvcmVkIGxhdGVyCisJICov CisJdm9pZAkJKCppbmRleF9mZXRjaF9tYXJrcG9zKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKwor CS8qCisJICogUmVzdG9yZSBhIHByZXZpb3VzbHkgbWFya2VkIHNjYW4gcG9zaXRpb24KKwkgKi8K Kwl2b2lkCQkoKmluZGV4X2ZldGNoX3Jlc3RycG9zKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKwog CS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBvcGVy YXRpb25zIG9uIGluZGl2aWR1YWwgdHVwbGVzCiAJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjc2 LDYgKzEzMDIsNDQgQEAgdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2Fu KQogCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfcmVzZXQoc2Nh bik7CiB9CiAKKy8qCisgKiBNYXJrIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24gc28gaXQgY2Fu IGJlIHJlc3RvcmVkIGxhdGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfaW5kZXhf ZmV0Y2hfbWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0KHNjYW4tPnhzX2hl YXBmZXRjaCAmJiBzY2FuLT51c2ViYXRjaHJpbmcpOworCisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5y ZF90YWJsZWFtLT5pbmRleF9mZXRjaF9tYXJrcG9zKHNjYW4pOworfQorCisvKgorICogUmVzdG9y ZSBhIHByZXZpb3VzbHkgbWFya2VkIHNjYW4gcG9zaXRpb24KKyAqCisgKiBOT1RFOiB0aGlzIG9u bHkgcmVzdG9yZXMgdGhlIGJhdGNoIHBvc2l0aW9uYWwgc3RhdGUgb2YgdGhlIHRhYmxlIEFNLiAg U2VlCisgKiBjb21tZW50cyBmb3IgRXhlY1Jlc3RyUG9zKCkuCisgKi8KK3N0YXRpYyBpbmxpbmUg dm9pZAordGFibGVfaW5kZXhfZmV0Y2hfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQorewor CUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2ggJiYgc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKwlBc3Nl cnQoIXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpOwkvKiBub3QgdXNlZCB3aXRoIGFtZ2V0YmF0Y2gg Ki8KKworCS8qCisJICogRm9yIGhlYXAsIGluIHRoZSBwcmVzZW5jZSBvZiBIT1QgY2hhaW5zLCBt YXJrL3Jlc3RvcmUgb25seSB3b3JrcworCSAqIGNvcnJlY3RseSBpZiB0aGUgc2NhbidzIHNuYXBz aG90IGlzIE1WQ0Mtc2FmZTsgdGhhdCBlbnN1cmVzIHRoYXQKKwkgKiB0aGVyZSdzIGF0IG1vc3Qg b25lIHJldHVybmFibGUgdHVwbGUgaW4gZWFjaCBIT1QgY2hhaW4sIGFuZCBzbworCSAqIHJlc3Rv cmluZyB0aGUgcHJpb3Igc3RhdGUgYXQgdGhlIHNjYW4gaXRlbSBncmFudWxhcml0eSBpcyBzdWZm aWNpZW50LgorCSAqIFNpbmNlIHRoZSBvbmx5IGN1cnJlbnQgdXNlciBvZiBtYXJrL3Jlc3RvcmUg ZnVuY3Rpb25hbGl0eSBpcworCSAqIG5vZGVNZXJnZWpvaW4uYywgdGhpcyBlZmZlY3RpdmVseSBt ZWFucyB0aGF0IG1lcmdlLWpvaW4gcGxhbnMgb25seSB3b3JrCisJICogZm9yIE1WQ0Mgc25hcHNo b3RzLgorCSAqLworCUFzc2VydChzY2FuLT5NVkNDU2Nhbik7CisJc2Nhbi0+eHNfaGVhcF9jb250 aW51ZSA9IGZhbHNlOworCisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9m ZXRjaF9yZXN0cnBvcyhzY2FuKTsKK30KKwogLyoKICAqIFJlbGVhc2UgcmVzb3VyY2VzIGFuZCBk ZWFsbG9jYXRlIHRoZSB0YWJsZSBBTSdzIHByaXZhdGUgaW5kZXggZmV0Y2ggc3RhdGUKICAqICh0 aGUgc2NhbidzIHhzX2hlYXBmZXRjaCkKQEAgLTEyODgsNiArMTM1MiwyMiBAQCB0YWJsZV9pbmRl eF9mZXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRf dGFibGVhbS0+aW5kZXhfZmV0Y2hfZW5kKHNjYW4pOwogfQogCisvKgorICogSW5pdGlhbGl6ZSB0 YWJsZSBBTSdzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSB3aXRoaW4gYSBiYXRjaCBhbGxvY2F0aW9u LgorICoKKyAqIENhbGxlZCBieSBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2ggZm9yIGVhY2ggbmV3 IG9yIHJlY3ljbGVkIGJhdGNoLCBidXQgb25seQorICogd2hlbiB0aGUgdGFibGUgQU0gcmVzZXJ2 ZWQgYW4gb3BhcXVlIGFyZWEgZm9yIHRoZSBzY2FuIChzZWUgdGhlIGNhbGxiYWNrJ3MKKyAqIGRv Y3VtZW50YXRpb24pLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX2luZGV4X2ZldGNo X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sK KwlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoICYmIHNjYW4tPnVzZWJhdGNocmluZyk7CisJQXNz ZXJ0KHNjYW4tPmJhdGNoX29wYXF1ZV9zaXplID4gMCB8fCBzY2FuLT5iYXRjaF9wZXJfaXRlbV9z aXplID4gMCk7CisKKwlzY2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNo X2JhdGNoX2luaXQoc2NhbiwgYmF0Y2gpOworfQorCiAvKgogICogRmV0Y2ggdGhlIG5leHQgdHVw bGUgZnJvbSBhbiBpbmRleCBzY2FuIGludG8gYHNsb3RgLCBzY2FubmluZyBpbiB0aGUKICAqIHNw ZWNpZmllZCBkaXJlY3Rpb24uICBSZXR1cm5zIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRo ZSBzY2FuIGtleXMgYW5kCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDI3YTJjNjgxNS4uMGFjMTZi OTMxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTQzNywxMiArMTQzNywxMiBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleE9wdEluZm8KIAlib29sCQlhbW9wdGlvbmFsa2V5OwogCWJvb2wJCWFtc2Vh cmNoYXJyYXk7CiAJYm9vbAkJYW1zZWFyY2hudWxsczsKLQkvKiBkb2VzIEFNIGhhdmUgYW1nZXR0 dXBsZSBpbnRlcmZhY2U/ICovCi0JYm9vbAkJYW1oYXNnZXR0dXBsZTsKKwkvKiBkb2VzIEFNIGhh dmUgYW1nZXRiYXRjaCAob3IgZ2V0dHVwbGUpIGludGVyZmFjZT8gKi8KKwlib29sCQlhbWNhbnBs YWluc2NhbjsKIAkvKiBkb2VzIEFNIGhhdmUgYW1nZXRiaXRtYXAgaW50ZXJmYWNlPyAqLwogCWJv b2wJCWFtaGFzZ2V0Yml0bWFwOwogCWJvb2wJCWFtY2FucGFyYWxsZWw7Ci0JLyogZG9lcyBBTSBo YXZlIGFtbWFya3BvcyBpbnRlcmZhY2U/ICovCisJLyogaXMgQU0gcHJlcGFyZWQgZm9yIHVzIHRv IHJlc3RvcmUgYSBtYXJrPyAqLwogCWJvb2wJCWFtY2FubWFya3BvczsKIAkvKiBBTSdzIGNvc3Qg ZXN0aW1hdG9yICovCiAJLyogUmF0aGVyIHRoYW4gaW5jbHVkZSBhbWFwaS5oIGhlcmUsIHdlIGRl Y2xhcmUgYW1jb3N0ZXN0aW1hdGUgbGlrZSB0aGlzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvYnJpbi9icmluLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKaW5k ZXggYmRiMzA3NTJlLi4yZDlkMDRhYTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9i cmluL2JyaW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI2NCw2 ICsyNjQsNyBAQCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1jb25zaXN0ZW50 ZXF1YWxpdHkgPSBmYWxzZSwKIAkJLmFtY29uc2lzdGVudG9yZGVyaW5nID0gZmFsc2UsCiAJCS5h bWNhbmJhY2t3YXJkID0gZmFsc2UsCisJCS5hbWNhbm1hcmtwb3MgPSBmYWxzZSwKIAkJLmFtY2Fu dW5pcXVlID0gZmFsc2UsCiAJCS5hbWNhbm11bHRpY29sID0gdHJ1ZSwKIAkJLmFtb3B0aW9uYWxr ZXkgPSB0cnVlLApAQCAtMjk4LDEwICsyOTksMTIgQEAgYnJpbmhhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYnJpbmJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gYnJp bnJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJ CS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJ LmFtZ2V0Yml0bWFwID0gYnJpbmdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJyaW5lbmRzY2Fu LAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3Ny ZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5p dHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvZ2luL2dpbmdldC5jCmluZGV4IDZiMTQ4ZTY5YS4uOGY3MDMzZDYyIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aW4vZ2luZ2V0LmMKQEAgLTE5NTMsOSArMTk1Myw5IEBAIGdpbmdldGJpdG1hcChJbmRleFNjYW5E ZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCSAqIGludG8gdGhlIG1haW4gaW5kZXgsIGFuZCBz byB3ZSBtaWdodCB2aXNpdCBpdCBhIHNlY29uZCB0aW1lIGR1cmluZyB0aGUKIAkgKiBtYWluIHNj YW4uICBUaGlzIGlzIG9rYXkgYmVjYXVzZSB3ZSdsbCBqdXN0IHJlLXNldCB0aGUgc2FtZSBiaXQg aW4gdGhlCiAJICogYml0bWFwLiAgKFRoZSBwb3NzaWJpbGl0eSBvZiBkdXBsaWNhdGUgdmlzaXRz IGlzIGEgbWFqb3IgcmVhc29uIHdoeSBHSU4KLQkgKiBjYW4ndCBzdXBwb3J0IHRoZSBhbWdldHR1 cGxlIEFQSSwgaG93ZXZlci4pIE5vdGUgdGhhdCBpdCB3b3VsZCBub3QgZG8KLQkgKiB0byBzY2Fu IHRoZSBtYWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0LCBzaW5jZSBjb25jdXJyZW50 Ci0JICogY2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBlbnRyaWVzIGVudGlyZWx5Lgor CSAqIGNhbid0IHN1cHBvcnQgZWl0aGVyIHRoZSBhbWdldHR1cGxlIG9yIGFtZ2V0YmF0Y2ggQVBJ LikgTm90ZSB0aGF0IGl0CisJICogd291bGQgbm90IGRvIHRvIHNjYW4gdGhlIG1haW4gaW5kZXgg YmVmb3JlIHRoZSBwZW5kaW5nIGxpc3QsIHNpbmNlCisJICogY29uY3VycmVudCBjbGVhbnVwIGNv dWxkIHRoZW4gbWFrZSB1cyBtaXNzIGVudHJpZXMgZW50aXJlbHkuCiAJICovCiAJc2NhblBlbmRp bmdJbnNlcnQoc2NhbiwgdGJtLCAmbnRpZHMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCmlu ZGV4IGU3Y2JhODFkNC4uMGU4YjZhNTQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2luL2dpbnV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwpAQCAt NDksNiArNDksNyBAQCBnaW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWNvbnNpc3Rl bnRlcXVhbGl0eSA9IGZhbHNlLAogCQkuYW1jb25zaXN0ZW50b3JkZXJpbmcgPSBmYWxzZSwKIAkJ LmFtY2FuYmFja3dhcmQgPSBmYWxzZSwKKwkJLmFtY2FubWFya3BvcyA9IGZhbHNlLAogCQkuYW1j YW51bmlxdWUgPSBmYWxzZSwKIAkJLmFtY2FubXVsdGljb2wgPSB0cnVlLAogCQkuYW1vcHRpb25h bGtleSA9IHRydWUsCkBAIC04MywxMCArODQsMTIgQEAgZ2luaGFuZGxlcihQR19GVU5DVElPTl9B UkdTKQogCQkuYW1iZWdpbnNjYW4gPSBnaW5iZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGdpbnJl c2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5h bXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJLmFt Z2V0Yml0bWFwID0gZ2luZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2luZW5kc2NhbiwKLQkJ LmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQg PSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJh bGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lz dC9naXN0LmMKaW5kZXggODU2NWUyMjViLi42N2IxNjA1M2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 LmMKQEAgLTY5LDYgKzY5LDcgQEAgZ2lzdGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFt Y29uc2lzdGVudGVxdWFsaXR5ID0gZmFsc2UsCiAJCS5hbWNvbnNpc3RlbnRvcmRlcmluZyA9IGZh bHNlLAogCQkuYW1jYW5iYWNrd2FyZCA9IGZhbHNlLAorCQkuYW1jYW5tYXJrcG9zID0gZmFsc2Us CiAJCS5hbWNhbnVuaXF1ZSA9IGZhbHNlLAogCQkuYW1jYW5tdWx0aWNvbCA9IHRydWUsCiAJCS5h bW9wdGlvbmFsa2V5ID0gdHJ1ZSwKQEAgLTEwMywxMCArMTA0LDEyIEBAIGdpc3RoYW5kbGVyKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGdpc3RiZWdpbnNjYW4sCiAJCS5hbXJl c2NhbiA9IGdpc3RyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gZ2lzdGdldHR1cGxlLAorCQkuYW1n ZXRiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVt c2JhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gZ2lzdGdldGJpdG1hcCwKIAkJLmFtZW5k c2NhbiA9IGdpc3RlbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3Mg PSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2Fu ID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVz Y2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwppbmRleCA4ZDhjZDMwZGMuLjU0MGYyYmNk NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwpAQCAtODAsNiArODAsNyBAQCBoYXNoaGFuZGxlcihQ R19GVU5DVElPTl9BUkdTKQogCQkuYW1jb25zaXN0ZW50ZXF1YWxpdHkgPSB0cnVlLAogCQkuYW1j b25zaXN0ZW50b3JkZXJpbmcgPSBmYWxzZSwKIAkJLmFtY2FuYmFja3dhcmQgPSB0cnVlLAorCQku YW1jYW5tYXJrcG9zID0gZmFsc2UsCiAJCS5hbWNhbnVuaXF1ZSA9IGZhbHNlLAogCQkuYW1jYW5t dWx0aWNvbCA9IGZhbHNlLAogCQkuYW1vcHRpb25hbGtleSA9IGZhbHNlLApAQCAtMTE0LDEwICsx MTUsMTIgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0g aGFzaGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gaGFzaHJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUg PSBoYXNoZ2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNo ID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBo YXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gaGFzaGVuZHNjYW4sCi0JCS5hbW1hcmtwb3Mg PSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJ LmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0g TlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggODQwMmYzOTY5Li44Y2M3NzU3NTIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMjY4Myw4ICsyNjgzLDExIEBAIHN0 YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAkucGFyYWxsZWxz Y2FuX3JlaW5pdGlhbGl6ZSA9IHRhYmxlX2Jsb2NrX3BhcmFsbGVsc2Nhbl9yZWluaXRpYWxpemUs CiAKIAkuaW5kZXhfZmV0Y2hfYmVnaW4gPSBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4sCisJLmlu ZGV4X2ZldGNoX2JhdGNoX2luaXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdCwKIAku aW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQsCiAJLmluZGV4X2Zl dGNoX2VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF9lbmQsCisJLmluZGV4X2ZldGNoX21hcmtwb3Mg PSBoZWFwYW1faW5kZXhfZmV0Y2hfbWFya3BvcywKKwkuaW5kZXhfZmV0Y2hfcmVzdHJwb3MgPSBo ZWFwYW1faW5kZXhfZmV0Y2hfcmVzdHJwb3MsCiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1 cGxlX2luc2VydCwKIAkudHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlID0gaGVhcGFtX3R1cGxlX2lu c2VydF9zcGVjdWxhdGl2ZSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNj YW4uYwppbmRleCA5MDRhM2E3MzcuLmUxMzdlYzFjNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAiYWNj ZXNzL2FtYXBpLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgorI2luY2x1ZGUgImFjY2Vz cy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJh Y2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCkBA IC0yNCw2ICsyNSwzOCBAQAogI2luY2x1ZGUgInV0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oIgogCiAK Ky8qCisgKiBoZWFwYW0ncyBwZXItYmF0Y2ggcHJpdmF0ZSBvcGFxdWUgYXJlYSAob25seSB1c2Vk IGR1cmluZyBpbmRleC1vbmx5IHNjYW5zKS4KKyAqCisgKiBNYWludGFpbnMgYSBwZXItYmF0Y2gg dmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBjYWNoZSwgcG9wdWxhdGVkIG9uIGRlbWFuZAorICogdXNp bmcgdGhlIHZpc2liaWxpdHkgbWFwLiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgd2Ugc2V0IGVhY2gg YmF0Y2ggaXRlbSdzCisgKiBiYXRjaHZpc1tdIGVudHJ5IGV4YWN0bHkgb25jZSAob3Igbm90IGF0 IGFsbCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IEhlYXBCYXRjaERhdGEKK3sKKwkvKgorCSAqIFJh bmdlIG9mIGJhdGNodmlzW10gZW50cmllcyB3aXRoIHZhbGlkIHZpc2liaWxpdHkgaW5mbywgaW4g aXRlbXNbXS13aXNlCisJICogdGVybXMuICBBbiBpdGVtJ3MgdmlzaWJpbGl0eSBpcyBjYWNoZWQg aWZmIGZpcnN0VmlzU2V0IDw9IGl0ZW0gPD0KKwkgKiBsYXN0VmlzU2V0LgorCSAqLworCWludAkJ CWZpcnN0VmlzU2V0OwkvKiBmaXJzdCB2YWxpZCBiYXRjaHZpc1tdIGVudHJ5LCBvciA+IGxhc3Qg Ki8KKwlpbnQJCQlsYXN0VmlzU2V0OwkJLyogbGFzdCB2YWxpZCBiYXRjaHZpc1tdIGVudHJ5LCBv ciA8IGZpcnN0ICovCisKKwkvKiBtYXhpdGVtc2JhdGNoLW1hbnkgYWxsLXZpc2libGUgc3RhdGVz LCB2YWxpZCBvbmx5IHdpdGhpbiByYW5nZSAqLworCWJvb2wJCWJhdGNodmlzW0ZMRVhJQkxFX0FS UkFZX01FTUJFUl07Cit9IEhlYXBCYXRjaERhdGE7CisKKyNkZWZpbmUgSEVBUF9CQVRDSF9WSVNf Q0FDSEVEKGhiYXRjaCwgaXRlbSkgXAorCSgoaXRlbSkgPj0gKGhiYXRjaCktPmZpcnN0VmlzU2V0 ICYmIChpdGVtKSA8PSAoaGJhdGNoKS0+bGFzdFZpc1NldCkKKworc3RhdGljIGJvb2wgaGVhcGFt X2luZGV4X3BsYWluX2JhdGNoX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJ CQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJICBUdXBsZVRh YmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJCQkJCSAgYm9vbCAqcmVjaGVjayk7CitzdGF0aWMgYm9v bCBoZWFwYW1faW5kZXhfb25seV9iYXRjaF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2Fu LAorCQkJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJIFR1 cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJCQkJIGJvb2wgKnJlY2hlY2spOwogc3RhdGlj IGJvb2wgaGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNj IHNjYW4sCiAJCQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQkJ CQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKQEAgLTM3LDEyICs3MCwyOSBAQCBzdGF0aWMgcGdf YXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2MgcwogCQkJCQkJCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK IAkJCQkJCQkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCQkJCQkJCQkJ IGJvb2wgaW5kZXhfb25seSwKKwkJCQkJCQkJCQkJCQkJCQkgYm9vbCBhbWdldGJhdGNoLAogCQkJ CQkJCQkJCQkJCQkJCSBib29sICpyZWNoZWNrKTsKIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlz X2lubGluZSBib29sIGhlYXBhbV9pbmRleF9oZWFwX2ZldGNoKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAkJCQkJCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVT bG90ICpzbG90LCBib29sIGluZGV4X29ubHksCiAJCQkJCQkJCQkJCQkJCQkgICBib29sICpoZWFw X2NvbnRpbnVlLCBib29sICphbGxfZGVhZCk7CiBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19p bmxpbmUgdm9pZCBoZWFwYW1faW5kZXhfa2lsbF9pdGVtKEluZGV4U2NhbkRlc2Mgc2NhbiwKLQkJ CQkJCQkJCQkJCQkJCSAgYm9vbCBhbGxfZGVhZCk7CisJCQkJCQkJCQkJCQkJCQkgIGJvb2wgYWxs X2RlYWQsCisJCQkJCQkJCQkJCQkJCQkgIGJvb2wgYW1nZXRiYXRjaCk7CitzdGF0aWMgcGdfYXR0 cmlidXRlX2Fsd2F5c19pbmxpbmUgSXRlbVBvaW50ZXIgaGVhcGFtX2luZGV4X2dldG5leHRfc2Nh bmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJCQkJCQkJCSBJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkJCQkJCQkJCQkJCQkgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkJCQkJCQkJCSBib29sICphbGxfdmlzaWJsZSk7Citz dGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQo SW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCQkgIEluZGV4RmV0Y2hIZWFwRGF0YSAq aHNjYW4sCisJCQkJCQkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJ CQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoLAorCQkJCQkJCQkJCQkJCQkgIEJhdGNo UmluZ0l0ZW1Qb3MgKnNjYW5Qb3MsCisJCQkJCQkJCQkJCQkJCSAgYm9vbCAqYWxsX3Zpc2libGUp Oworc3RhdGljIHZvaWQgaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KEluZGV4U2Nh bkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJ CQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCQkJICBIZWFwQmF0Y2hEYXRh ICpoYmF0Y2gsCisJCQkJCQkJCQkJCSAgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKTsKIAogLyoKICAq IFNpbXBsZSwgc2luZ2xlLXNob3QgVElEIGxvb2t1cCBmb3IgY29uc3RyYWludCBlbmZvcmNlbWVu dCBjb2RlICh1bmlxdWUKQEAgLTkyLDE4ICsxNDIsNTEgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2Jl Z2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogewogCUluZGV4RmV0Y2hIZWFw RGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOwogCi0JaHNj YW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCS8qIHRhYmxlIEFNIG9wYXF1ZSBhcmVhIHNp emUgaXMgc2V0IGJlbG93IGZvciBpbmRleC1vbmx5IHNjYW5zICovCisJc2Nhbi0+YmF0Y2hfb3Bh cXVlX3NpemUgPSAwOworCXNjYW4tPmJhdGNoX3Blcl9pdGVtX3NpemUgPSAwOworCisJLyogQ3Vy cmVudCBoZWFwIGJsb2NrIHN0YXRlICovCisJQXNzZXJ0KGhzY2FuLT54c19jYnVmID09IEludmFs aWRCdWZmZXIpOwogCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JaHNjYW4t PnhzX3ZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKworCS8qIFZNIHJlbGF0ZWQgc3RhdGUgKi8K KwlBc3NlcnQoaHNjYW4tPnhzX3ZtYnVmZmVyID09IEludmFsaWRCdWZmZXIpOworCWhzY2FuLT54 c192bV9pdGVtcyA9IDE7CiAKIAkvKiBSZW1lbWJlciBpZiBzY2FuIGlzIHJlYWQtb25seSAqLwog CWhzY2FuLT54c19yZWFkb25seSA9IChmbGFncyAmIFNPX0hJTlRfUkVMX1JFQURfT05MWSkgIT0g MDsKIAogCS8qIFJlc29sdmUgd2hpY2ggeHNfZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9uIHRv IHVzZSBmb3IgdGhpcyBzY2FuICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKLQkJc2Nhbi0+ eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90Owor CWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKQor CXsKKwkJLyogYW1nZXRiYXRjaCBpbmRleCBBTSAqLworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVw KQorCQl7CisJCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfb25seV9iYXRj aF9nZXRuZXh0X3Nsb3Q7CisKKwkJCS8qCisJCQkgKiBJbmRleC1vbmx5IHNjYW5zIGNhY2hlIHZp c2liaWxpdHkgaW5mbyBpbiBhIEhlYXBCYXRjaERhdGEgcGVyCisJCQkgKiBiYXRjaDogYSBmaXhl ZC1zaXplIGhlYWRlciBmb2xsb3dlZCBieSBhIHBlci1pdGVtIGJhdGNodmlzW10KKwkJCSAqIGFy cmF5CisJCQkgKi8KKwkJCXNjYW4tPmJhdGNoX29wYXF1ZV9zaXplID0gb2Zmc2V0b2YoSGVhcEJh dGNoRGF0YSwgYmF0Y2h2aXMpOworCQkJc2Nhbi0+YmF0Y2hfcGVyX2l0ZW1fc2l6ZSA9IHNpemVv Zihib29sKTsKKwkJfQorCQllbHNlCisJCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1f aW5kZXhfcGxhaW5fYmF0Y2hfZ2V0bmV4dF9zbG90OworCisJCS8qIFNldCB1cCBzY2FuJ3MgYmF0 Y2ggcmluZyBidWZmZXIgaW4gcGFzc2luZyAqLworCQl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2lu aXQoc2Nhbik7CisJfQogCWVsc2UKLQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2lu ZGV4X3BsYWluX3R1cGxlX2dldG5leHRfc2xvdDsKKwl7CisJCS8qIGFtZ2V0dHVwbGUgaW5kZXgg QU0gKi8KKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCXNjYW4tPnhzX2dldG5leHRfc2xv dCA9IGhlYXBhbV9pbmRleF9vbmx5X3R1cGxlX2dldG5leHRfc2xvdDsKKwkJZWxzZQorCQkJc2Nh bi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5leHRfc2xv dDsKKwl9CiAKIAkvKgogCSAqIEluZGV4LW9ubHkgc2NhbnMgdGhhdCByZXR1cm4gIm5hbWUiIGNv bHVtbnMgc3RvcmVkIGFzIGNzdHJpbmdzIG5lZWQgYQpAQCAtMTIwLDEyICsyMDMsNDIgQEAgaGVh cGFtX2luZGV4X2ZldGNoX2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQog CXNjYW4tPnhzX2hlYXBmZXRjaCA9IGhzY2FuOwogfQogCisvKgorICogSW5pdGlhbGl6ZSB0aGUg aGVhcCB0YWJsZSBBTSdzIHBlci1iYXRjaCBvcGFxdWUgYXJlYQorICovCit2b2lkCitoZWFwYW1f aW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IGJhdGNoKQoreworCUhlYXBCYXRjaERhdGEgKmhiYXRjaDsKKworCS8qCisJICogVGhlIGNvcmUg Y29kZSBzaG91bGQgb25seSBjYWxsIGhlcmUgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMuICBQbGFp bgorCSAqIHNjYW5zIGRvbid0IHJlcXVlc3QgYSBIZWFwQmF0Y2hEYXRhIGFyZWEgYXQgYWxsLgor CSAqLworCUFzc2VydChzY2FuLT54c193YW50X2l0dXAgJiYgc2Nhbi0+dXNlYmF0Y2hyaW5nKTsK KworCS8qIFJlc2V0dGluZyB0aGUgdmFsaWQgcmFuZ2UgbWFrZXMgaXQgc2FmZSB0byB1c2UvcmVj eWNsZSB0aGUgYmF0Y2ggKi8KKwloYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoX3RhYmxlX2FyZWEo c2NhbiwgYmF0Y2gpOworCWhiYXRjaC0+Zmlyc3RWaXNTZXQgPSBJTlRfTUFYOworCWhiYXRjaC0+ bGFzdFZpc1NldCA9IC0xOworfQorCisvKgorICogUmVzZXQgdGFibGUgQU0gaW5kZXggc2NhbiBz dGF0ZSBpbiBwcmVwYXJhdGlvbiBmb3IgYSByZXNjYW4KKyAqLwogdm9pZAogaGVhcGFtX2luZGV4 X2ZldGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKKwlJbmRleEZldGNoSGVhcERhdGEg KmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7CisKKwkv KiBSZXNjYW5zIHNob3VsZCBhdm9pZCBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIFZNIGxvb2t1cHMg Ki8KKwloc2Nhbi0+eHNfdm1faXRlbXMgPSAxOworCisJLyogUmVzZXQgYmF0Y2ggcmluZyBidWZm ZXIgc3RhdGUgKi8KKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQl0YWJsZWFtX3V0aWxfYmF0 Y2hzY2FuX3Jlc2V0KHNjYW4sIGZhbHNlKTsKKwogCS8qCi0JICogUmVzZXRzIGFyZSBhIG5vLW9w LgotCSAqCiAJICogRGVsaWJlcmF0ZWx5IGF2b2lkIGRyb3BwaW5nIHBpbnMgbm93IGhlbGQgaW4g eHNfY2J1ZiBhbmQgeHNfdm1idWZmZXIuCiAJICogVGhpcyBzYXZlcyBjeWNsZXMgZHVyaW5nIGNl cnRhaW4gdGlnaHQgbmVzdGVkIGxvb3Agam9pbnMgKGl0IGNhbiBhdm9pZAogCSAqIHJlcGVhdGVk IHBpbm5pbmcgYW5kIHVucGlubmluZyBvZiB0aGUgc2FtZSBidWZmZXIgYWNyb3NzIHJlc2NhbnMp LgpAQCAtMTQ5LDkgKzI2MiwzNSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4U2NhbkRl c2Mgc2NhbikKIAlpZiAoaHNjYW4tPnhzX2l0dXBfY3h0KQogCQlNZW1vcnlDb250ZXh0RGVsZXRl KGhzY2FuLT54c19pdHVwX2N4dCk7CiAKKwkvKiBGcmVlIGFsbCBiYXRjaCByZWxhdGVkIHJlc291 cmNlcyAqLworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCXRhYmxlYW1fdXRpbF9iYXRjaHNj YW5fZW5kKHNjYW4pOworCiAJcGZyZWUoaHNjYW4pOwogfQogCisvKgorICogU2F2ZSBiYXRjaCBy aW5nIGJ1ZmZlcidzIGN1cnJlbnQgc2NhblBvcyBhcyBpdHMgbWFya1BvcworICovCit2b2lkCito ZWFwYW1faW5kZXhfZmV0Y2hfbWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0 KHNjYW4tPnVzZWJhdGNocmluZyk7CisKKwl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX21hcmtfcG9z KHNjYW4pOworfQorCisvKgorICogUmVzdG9yZSBiYXRjaCByaW5nIGJ1ZmZlcidzIG1hcmtQb3Mg aW50byBpdHMgc2NhblBvcworICovCit2b2lkCitoZWFwYW1faW5kZXhfZmV0Y2hfcmVzdHJwb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUFzc2VydChzY2FuLT51c2ViYXRjaHJpbmcpOworCisJ dGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhzY2FuKTsKK30KKwogLyoKICAqCWhl YXBfaG90X3NlYXJjaF9idWZmZXIJLSBzZWFyY2ggSE9UIGNoYWluIGZvciB0dXBsZSBzYXRpc2Z5 aW5nIHNuYXBzaG90CiAgKgpAQCAtMzE0LDYgKzQ1MywzNCBAQCBoZWFwX2hvdF9zZWFyY2hfYnVm ZmVyKEl0ZW1Qb2ludGVyIHRpZCwgUmVsYXRpb24gcmVsYXRpb24sIEJ1ZmZlciBidWZmZXIsCiAJ cmV0dXJuIGZhbHNlOwogfQogCisvKiB4c19nZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0YmF0 Y2gsIHBsYWluIGluZGV4IHNjYW4gKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IGJvb2wKK2hl YXBhbV9pbmRleF9wbGFpbl9iYXRjaF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAor CQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCSAgVHVwbGVUYWJs ZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkgIGJvb2wgKnJlY2hlY2spCit7CisJQXNzZXJ0KCFzY2Fu LT54c193YW50X2l0dXAgJiYgc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKwlBc3NlcnQoc2Nhbi0+aW5k ZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisKKwlyZXR1cm4gaGVh cGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZhbHNlLCB0cnVl LAorCQkJCQkJCQkJIHJlY2hlY2spOworfQorCisvKiB4c19nZXRuZXh0X3Nsb3QgY2FsbGJhY2s6 IGFtZ2V0YmF0Y2gsIGluZGV4LW9ubHkgc2NhbiAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3Qg Ym9vbAoraGVhcGFtX2luZGV4X29ubHlfYmF0Y2hfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mg c2NhbiwKKwkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCSBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJCSBib29sICpyZWNoZWNrKQoreworCUFzc2VydChz Y2FuLT54c193YW50X2l0dXAgJiYgc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKwlBc3NlcnQoc2Nhbi0+ aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisKKwlyZXR1cm4g aGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIHRydWUsIHRy dWUsCisJCQkJCQkJCQkgcmVjaGVjayk7Cit9CisKIC8qIHhzX2dldG5leHRfc2xvdCBjYWxsYmFj azogYW1nZXR0dXBsZSwgcGxhaW4gaW5kZXggc2NhbiAqLwogc3RhdGljIHBnX2F0dHJpYnV0ZV9o b3QgYm9vbAogaGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5E ZXNjIHNjYW4sCkBAIC0zMjEsMTAgKzQ4OCwxMSBAQCBoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVf Z2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSAgVHVwbGVUYWJsZVNs b3QgKnNsb3QsCiAJCQkJCQkJCQkgIGJvb2wgKnJlY2hlY2spCiB7Ci0JQXNzZXJ0KCFzY2FuLT54 c193YW50X2l0dXApOworCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwICYmICFzY2FuLT51c2Vi YXRjaHJpbmcpOwogCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0 dXBsZSAhPSBOVUxMKTsKIAotCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4s IGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UsIHJlY2hlY2spOworCXJldHVybiBoZWFwYW1faW5kZXhf Z2V0bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkJ CQkJIHJlY2hlY2spOwogfQogCiAvKiB4c19nZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0dHVw bGUsIGluZGV4LW9ubHkgc2NhbiAqLwpAQCAtMzM0LDEwICs1MDIsMTEgQEAgaGVhcGFtX2luZGV4 X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBU dXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQkJCSBib29sICpyZWNoZWNrKQogewotCUFzc2Vy dChzY2FuLT54c193YW50X2l0dXApOworCUFzc2VydChzY2FuLT54c193YW50X2l0dXAgJiYgIXNj YW4tPnVzZWJhdGNocmluZyk7CiAJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbWdldHR1cGxlICE9IE5VTEwpOwogCi0JcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Ns b3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVlLCByZWNoZWNrKTsKKwlyZXR1cm4gaGVhcGFt X2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIHRydWUsIGZhbHNlLAor CQkJCQkJCQkJIHJlY2hlY2spOwogfQogCiAvKgpAQCAtNDI4LDcgKzU5Nyw3IEBAIGhlYXBhbV9z dG9yZV9pb3Nfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQog fQogCiAvKgotICogQ29tbW9uIGltcGxlbWVudGF0aW9uIGZvciBib3RoIGhlYXBhbV9pbmRleF8q X2dldG5leHRfc2xvdCB2YXJpYW50cy4KKyAqIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBmb3IgYWxs IGZvdXIgaGVhcGFtX2luZGV4XypfZ2V0bmV4dF9zbG90IHZhcmlhbnRzLgogICoKICAqIFRoZSBy ZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cyBhbmQgdGhl IHNuYXBzaG90IHdhcwogICogZm91bmQsIGZhbHNlIG90aGVyd2lzZS4gIE9uIHN1Y2Nlc3MgdGhl IHNsb3QgaXMgZmlsbGVkOiBmb3IgcGxhaW4gaW5kZXgKQEAgLTQ0MSwxMyArNjEwLDEzIEBAIGhl YXBhbV9zdG9yZV9pb3Nfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpz bG90KQogICogZHJvcHBlZCBieSBhIGZ1dHVyZSBjYWxsIGhlcmUgKG9yIGJ5IGEgbGF0ZXIgY2Fs bCB0byBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kCiAgKiB0aHJvdWdoIGluZGV4X2VuZHNjYW4pLgog ICoKLSAqIFRoZSBpbmRleF9vbmx5IHBhcmFtZXRlciBpcyBhIGNvbXBpbGUtdGltZSBjb25zdGFu dCBhdCBlYWNoIGNhbGwgc2l0ZSwKLSAqIGFsbG93aW5nIHRoZSBjb21waWxlciB0byBzcGVjaWFs aXplIHRoZSBjb2RlIGZvciBlYWNoIHZhcmlhbnQuCisgKiBUaGUgaW5kZXhfb25seSBhbmQgYW1n ZXRiYXRjaCBwYXJhbWV0ZXJzIGFyZSBjb21waWxlLXRpbWUgY29uc3RhbnRzIGF0IGVhY2gKKyAq IGNhbGwgc2l0ZSwgYWxsb3dpbmcgdGhlIGNvbXBpbGVyIHRvIHNwZWNpYWxpemUgdGhlIGNvZGUg Zm9yIGVhY2ggdmFyaWFudC4KICAqLwogc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5l IGJvb2wKIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wg aW5kZXhfb25seSwKLQkJCQkJCSAgYm9vbCAqcmVjaGVjaykKKwkJCQkJCSAgYm9vbCBhbWdldGJh dGNoLCBib29sICpyZWNoZWNrKQogewogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5k ZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKIAlib29sCSAgICpoZWFwX2Nv bnRpbnVlID0gJnNjYW4tPnhzX2hlYXBfY29udGludWU7CkBAIC00NTcsNiArNjI2LDggQEAgaGVh cGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uLAogCXVpbnQ4CQluX3Zpc2l0ZWRfcGFnZXMgPSAwOwogCUl0ZW1Qb2ludGVyIHRp ZCA9IE5VTEw7CiAKKwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOwor CiAJZm9yICg7OykKIAl7CiAJCWJvb2wJCWdvdF9oZWFwX3R1cGxlOwpAQCAtNDY0LDE0ICs2MzUs MjIgQEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAogCQlpZiAoISpoZWFwX2NvbnRpbnVlKQogCQl7CiAJCQkvKiBH ZXQgdGhlIG5leHQgVElEIGZyb20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0 X3RpZChzY2FuLCBkaXJlY3Rpb24pOworCQkJaWYgKGFtZ2V0YmF0Y2gpCisJCQkJdGlkID0gaGVh cGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhzY2FuLCBoc2NhbiwKKwkJCQkJCQkJCQkJ CQkJIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkJIGluZGV4X29ubHkgPworCQkJCQkJCQkJCQkJ CQkgJmFsbF92aXNpYmxlIDogTlVMTCk7CisJCQllbHNlCisJCQkJdGlkID0gdGFibGVhbV91dGls X2ZldGNoX25leHRfdHVwbGVfdGlkKHNjYW4sIGRpcmVjdGlvbik7CiAKIAkJCS8qIElmIHdlJ3Jl IG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCiAJCQlpZiAodGlkID09IE5VTEwp CiAJCQkJYnJlYWs7CiAKLQkJCS8qIEZvciBpbmRleC1vbmx5IHNjYW5zLCBjaGVjayB0aGUgdmlz aWJpbGl0eSBtYXAgKi8KLQkJCWlmIChpbmRleF9vbmx5KQorCQkJcGdzdGF0X2NvdW50X2luZGV4 X3R1cGxlcyhzY2FuLT5pbmRleFJlbGF0aW9uLCAxKTsKKworCQkJLyogRm9yIG5vbi1iYXRjaCBp bmRleC1vbmx5IHNjYW5zLCBjaGVjayB0aGUgdmlzaWJpbGl0eSBtYXAgKi8KKwkJCWlmIChpbmRl eF9vbmx5ICYmICFhbWdldGJhdGNoKQogCQkJCWFsbF92aXNpYmxlID0gVk1fQUxMX1ZJU0lCTEUo c2Nhbi0+aGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cih0aWQpLAogCQkJCQkJCQkJCQkgJmhzY2FuLT54c192bWJ1ZmZlcik7CkBAIC01MDEsNyArNjgw LDcgQEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQkJCQkJCQkgaW5kZXhfb25seSwKIAkJCQkJCQkJ CQkJCQkJIGhlYXBfY29udGludWUsCiAJCQkJCQkJCQkJCQkJCSAmYWxsX2RlYWQpOwotCQkJCWhl YXBhbV9pbmRleF9raWxsX2l0ZW0oc2NhbiwgYWxsX2RlYWQpOworCQkJCWhlYXBhbV9pbmRleF9r aWxsX2l0ZW0oc2NhbiwgYWxsX2RlYWQsIGFtZ2V0YmF0Y2gpOwogCiAJCQkJaWYgKCFnb3RfaGVh cF90dXBsZSkKIAkJCQl7CkBAIC01MzIsNyArNzExLDcgQEAgaGVhcGFtX2luZGV4X2dldG5leHRf c2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCSAq IHdhbnQgdXMgdG8gYXNzdW1lIHRoYXQganVzdCBoYXZpbmcgb25lIHZpc2libGUgdHVwbGUgaW4g dGhlCiAJCQkJICogaG90IGNoYWluIGlzIGFsd2F5cyBnb29kIGVub3VnaC4KIAkJCQkgKi8KLQkJ CQlBc3NlcnQoISgqaGVhcF9jb250aW51ZSAmJiBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFw c2hvdCkpKTsKKwkJCQlBc3NlcnQoISgqaGVhcF9jb250aW51ZSAmJiBzY2FuLT5NVkNDU2Nhbikp OwogCQkJfQogCQkJZWxzZQogCQkJewpAQCAtNTY4LDcgKzc0Nyw3IEBAIGhlYXBhbV9pbmRleF9n ZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK IAkJCQkJCQkJCQkJCQkgaW5kZXhfb25seSwKIAkJCQkJCQkJCQkJCQkgaGVhcF9jb250aW51ZSwK IAkJCQkJCQkJCQkJCQkgJmFsbF9kZWFkKTsKLQkJCWhlYXBhbV9pbmRleF9raWxsX2l0ZW0oc2Nh biwgYWxsX2RlYWQpOworCQkJaGVhcGFtX2luZGV4X2tpbGxfaXRlbShzY2FuLCBhbGxfZGVhZCwg YW1nZXRiYXRjaCk7CiAJCQlpZiAoZ290X2hlYXBfdHVwbGUpCiAJCQl7CiAJCQkJQXNzZXJ0KHJl Y2hlY2sgIT0gTlVMTCB8fCAhc2Nhbi0+eHNfcmVjaGVjayk7CkBAIC02OTEsMTUgKzg3MCwzMzIg QEAgaGVhcGFtX2luZGV4X2hlYXBfZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNo SGVhcERhdGEgKmhzY2FuLAogICogYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZSBNVkNDIHRvIGRvIHNv LiAgU2VlIGNvbW1lbnRzIGluIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCiAgKi8KIHN0YXRpYyBw Z19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSB2b2lkCi1oZWFwYW1faW5kZXhfa2lsbF9pdGVtKElu ZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBhbGxfZGVhZCkKK2hlYXBhbV9pbmRleF9raWxsX2l0ZW0o SW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGFsbF9kZWFkLCBib29sIGFtZ2V0YmF0Y2gpCiB7CiAJ aWYgKHNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKIAkJcmV0dXJuOwogCi0JLyoKLQkgKiBU ZWxsIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggQU0gdG8ga2lsbCBpdHMgZW50cnkgZm9yIHRoYXQg VElELiBOZXh0Ci0JICogdGFibGVhbV91dGlsX2ZldGNoX25leHRfdHVwbGVfdGlkIGNhbGwgd2ls bCB0ZWxsIGluZGV4IEFNIHRvIGtpbGwKLQkgKiB0aGUgdHVwbGUgaXQganVzdCByZXR1cm5lZCB0 byB1cyAtLSB0aGUgInByaW9yIiB0dXBsZS4KLQkgKi8KLQlzY2FuLT5raWxsX3ByaW9yX3R1cGxl ID0gYWxsX2RlYWQ7CisJaWYgKGFtZ2V0YmF0Y2gpCisJeworCQlpZiAoYWxsX2RlYWQpCisJCQl0 YWJsZWFtX3V0aWxfc2NhbnBvc19raWxsaXRlbShzY2FuKTsKKwl9CisJZWxzZQorCXsKKwkJLyoK KwkJICogVGVsbCBhbWdldHR1cGxlLWJhc2VkIGluZGV4IEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZv ciB0aGF0IFRJRC4gTmV4dAorCQkgKiB0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF90dXBsZV90aWQg Y2FsbCB3aWxsIHRlbGwgaW5kZXggQU0gdG8ga2lsbAorCQkgKiB0aGUgdHVwbGUgaXQganVzdCBy ZXR1cm5lZCB0byB1cyAtLSB0aGUgInByaW9yIiB0dXBsZS4KKwkJICovCisJCXNjYW4tPmtpbGxf cHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKwl9Cit9CisKKy8qCisgKiBHZXQgbmV4dCBUSUQgZnJv bSBiYXRjaCByaW5nIGJ1ZmZlciwgbW92aW5nIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4K KyAqIEFsc28gc2V0cyAqYWxsX3Zpc2libGUgZm9yIGl0ZW0gd2hlbiBjYWxsZXIgcGFzc2VzIGEg bm9uLU5VTEwgYXJnLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSXRl bVBvaW50ZXIKK2hlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbiwgYm9vbCAqYWxsX3Zpc2libGUpCit7CisJQmF0Y2hSaW5nQnVmZmVyICpi YXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNj YW5Qb3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRj aCA9IE5VTEw7CisJYm9vbAkJaGFkRXhpc3RpbmdTY2FuQmF0Y2g7CisKKwlBc3NlcnQoIXNjYW5Q b3MtPnZhbGlkIHx8IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsK KwlBc3NlcnQoc2NhblBvcy0+dmFsaWQgfHwgaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9 PSAwKTsKKwlBc3NlcnQoYWxsX3Zpc2libGUgPT0gTlVMTCB8fCBzY2FuLT54c193YW50X2l0dXAp OworCisJLyoKKwkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGxvYWRlZCBzY2FuQmF0 Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAorCSAqIG1hdGNoaW5nIGl0ZW0ncyBUSUQvaW5k ZXggdHVwbGUgZnJvbQorCSAqLworCWhhZEV4aXN0aW5nU2NhbkJhdGNoID0gc2NhblBvcy0+dmFs aWQ7CisJaWYgKHNjYW5Qb3MtPnZhbGlkKQorCXsKKwkJLyoKKwkJICogc2NhblBvcyBpcyB2YWxp ZCwgc28gc2NhbkJhdGNoIG11c3QgYWxyZWFkeSBiZSBsb2FkZWQgaW4gYmF0Y2ggcmluZworCQkg KiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQgaGVyZS4KKwkJICovCisJCXBnX2Fzc3VtZShiYXRj aHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisKKwkJc2NhbkJhdGNoID0g aW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwkJaWYgKGluZGV4X3Nj YW5fcG9zX2FkdmFuY2UoZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIHNjYW5Qb3MpKQorCQkJcmV0dXJu IGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlvbiwK KwkJCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBvcywKKwkJCQkJCQkJCQkJCSAgIGFsbF92 aXNpYmxlKTsKKwl9CisKKwkvKgorCSAqIEVpdGhlciByYW4gb3V0IG9mIGl0ZW1zIGZyb20gb3Vy IGV4aXN0aW5nIHNjYW5CYXRjaCwgb3IgaXQgaGFzbid0IGJlZW4KKwkgKiBsb2FkZWQgeWV0IChi ZWNhdXNlIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVudGlyZSBzY2FuKS4K KwkgKiBUcnkgdG8gYWR2YW5jZSBzY2FuQmF0Y2ggdG8gdGhlIG5leHQgYmF0Y2ggKG9yIGdldCB0 aGUgZmlyc3QgYmF0Y2gpLgorCSAqLworCXNjYW5CYXRjaCA9IHRhYmxlYW1fdXRpbF9mZXRjaF9u ZXh0X2JhdGNoKHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJICBzY2FuQmF0Y2gsIHNjYW5Q b3MpOworCisJaWYgKCFzY2FuQmF0Y2gpCisJeworCQkvKgorCQkgKiBXZSdyZSBkb25lOyBubyBt b3JlIGJhdGNoZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCisJCSAqCisJCSAqIE5v dGU6IHNjYW5Qb3MgaXMgZ2VuZXJhbGx5IHN0aWxsIHZhbGlkIGF0IHRoaXMgcG9pbnQuICBUaGUg c2NhbgorCQkgKiBtaWdodCBzdGlsbCBiYWNrIHVwIGluIHRoZSBvdGhlciBkaXJlY3Rpb24sIG9y IHJlc3RvcmUgYSBzYXZlZCBtYXJrCisJCSAqICh0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3Rv cmVfcG9zIHJlcXVpcmVzIHRoZSBzY2FuIHRvIGhhdmUgYm90aAorCQkgKiBhIHZhbGlkIHNjYW5Q b3MgYW5kIHZhbGlkIG1hcmtQb3MpLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoK KwkgKiBBZHZhbmNlZCBzY2FuQmF0Y2guICBOb3cgcG9zaXRpb24gc2NhblBvcyB0byB0aGUgc3Rh cnQgb2YgbmV3CisJICogc2NhbkJhdGNoLgorCSAqLworCWluZGV4X3NjYW5fcG9zX25leHRiYXRj aChkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcyk7CisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0 Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpID09IHNjYW5CYXRjaCk7CisKKwkvKgorCSAqIFJlbW92 ZSB0aGUgaGVhZCBiYXRjaCBmcm9tIHRoZSBiYXRjaCByaW5nIGJ1ZmZlciAoZXhjZXB0IHdoZW4g dGhpcyBuZXcKKwkgKiBzY2FuQmF0Y2ggaXMgb3VyIG9ubHkgb25lKQorCSAqLworCWlmIChoYWRF eGlzdGluZ1NjYW5CYXRjaCkKKwl7CisJCUluZGV4U2NhbkJhdGNoIGhlYWRCYXRjaCA9IGluZGV4 X3NjYW5fYmF0Y2goc2NhbiwKKwkJCQkJCQkJCQkJCQliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7 CisKKwkJQXNzZXJ0KGhlYWRCYXRjaCAhPSBzY2FuQmF0Y2gpOworCQlBc3NlcnQoYmF0Y2hyaW5n YnVmLT5oZWFkQmF0Y2ggIT0gc2NhblBvcy0+YmF0Y2gpOworCisJCS8qIGZyZWUgb2Jzb2xlc2Nl bnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCisJCXRhYmxl YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CisKKwkJLyogUmVtb3ZlIHRo ZSBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1ZmZlciAoZXZlbiBpZiBpdCdzIG1hcmtCYXRjaCkgKi8K KwkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2grKzsKKwl9CisKKwkvKiBJbiBwcmFjdGljZSBzY2Fu QmF0Y2ggd2lsbCBhbHdheXMgYmUgdGhlIHJpbmcgYnVmZmVyJ3MgaGVhZEJhdGNoICovCisJQXNz ZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKKworCXJldHVy biBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKHNjYW4sIGhzY2FuLCBkaXJlY3Rpb24s CisJCQkJCQkJCQkJICAgc2NhbkJhdGNoLCBzY2FuUG9zLCBhbGxfdmlzaWJsZSk7Cit9CisKKy8q CisgKiBTYXZlIHRoZSBjdXJyZW50IHNjYW5Qb3Mvc2NhbkJhdGNoIGl0ZW0ncyBUSUQgaW4gc2Nh bidzIHhzX2hlYXB0aWQsIGFuZAorICogcmV0dXJuIGEgcG9pbnRlciB0byB0aGF0IFRJRC4gIFdo ZW4gYWxsX3Zpc2libGUgaXNuJ3QgTlVMTCAoZHVyaW5nIGFuCisgKiBpbmRleC1vbmx5IHNjYW4p LCBhbHNvIHNldHMgaXRlbSdzIHZpc2liaWxpdHkgc3RhdHVzIGluICphbGxfdmlzaWJsZS4KKyAq CisgKiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zIGhlbHBlciBmdW5jdGlvbi4K KyAqLworc3RhdGljIGlubGluZSBJdGVtUG9pbnRlcgoraGVhcGFtX2luZGV4X3JldHVybl9zY2Fu cG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJ CQkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQlJbmRleFNjYW5CYXRjaCBz Y2FuQmF0Y2gsCisJCQkJCQkJCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MsCisJCQkJCQkJCWJv b2wgKmFsbF92aXNpYmxlKQoreworCUhlYXBCYXRjaERhdGEgKmhiYXRjaDsKKworCS8qIFNldCB4 c19oZWFwdGlkLCB3aGljaCBjYWxsZXIgKGFuZCBjb3JlIGV4ZWN1dG9yKSB3aWxsIG5lZWQgKi8K KwlzY2FuLT54c19oZWFwdGlkID0gc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50YWJs ZVRpZDsKKworCWlmIChhbGxfdmlzaWJsZSA9PSBOVUxMKQorCXsKKwkJLyoKKwkJICogUGxhaW4g aW5kZXggc2Nhbi4KKwkJICovCisJCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwkJcmV0 dXJuICZzY2FuLT54c19oZWFwdGlkOworCX0KKworCS8qIEluZGV4LW9ubHkgc2NhbiAqLworCUFz c2VydChzY2FuLT54c193YW50X2l0dXApOworCisJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1cGxl KSAoc2NhbkJhdGNoLT5jdXJyVHVwbGVzICsKKwkJCQkJCQkJICBzY2FuQmF0Y2gtPml0ZW1zW3Nj YW5Qb3MtPml0ZW1dLnR1cGxlT2Zmc2V0KTsKKworCS8qCisJICogU2V0IHZpc2liaWxpdHkgaW5m byBmb3IgdGhlIGN1cnJlbnQgc2NhblBvcyBpdGVtIChwbHVzIHBvc3NpYmx5IHNvbWUKKwkgKiBh ZGRpdGlvbmFsIGl0ZW1zIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSBhcyBuZWVkZWQK KwkgKi8KKwloYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoX3RhYmxlX2FyZWEoc2Nhbiwgc2NhbkJh dGNoKTsKKwlpZiAoIUhFQVBfQkFUQ0hfVklTX0NBQ0hFRChoYmF0Y2gsIHNjYW5Qb3MtPml0ZW0p KQorCQloZWFwYW1faW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoc2NhbiwgZGlyZWN0aW9uLAor CQkJCQkJCQkJCSAgc2NhbkJhdGNoLCBoYmF0Y2gsIHNjYW5Qb3MpOworCisJLyogRmluYWxseSwg c2V0IGFsbF92aXNpYmxlIGZvciBjYWxsZXIgKi8KKwkqYWxsX3Zpc2libGUgPSBoYmF0Y2gtPmJh dGNodmlzW3NjYW5Qb3MtPml0ZW1dOworCisJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOworfQor CisvKgorICogT2J0YWluIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gZm9yIGEgVElEIGZyb20gY2Fs bGVyJ3MgYmF0Y2guCisgKgorICogQ2FsbGVkIGR1cmluZyBhbWdldGJhdGNoIGluZGV4LW9ubHkg c2NhbnMuICBXZSBhbHdheXMgbWFrZSBzdXJlIHRoYXQgdGhlCisgKiB2aXNpYmlsaXR5IG9mIGNh bGxlcidzIGl0ZW0gKGFuIG9mZnNldCBpbnRvIGNhbGxlcidzIGJhdGNoLT5pdGVtc1tdIGFycmF5 KQorICogaGFzIGJlZW4gc2V0IGluIGl0cyBiYXRjaCdzIGJhdGNodmlzW10uICBXZSBtaWdodCBh bHNvIHNldCB2aXNpYmlsaXR5IGluZm8KKyAqIGZvciBvdGhlciBpdGVtcyBmcm9tIGNhbGxlcidz IGJhdGNoIG1vcmUgcHJvYWN0aXZlbHkgd2hlbiB0aGF0IG1ha2VzIHNlbnNlLgorICoKKyAqIEV2 ZXJ5IGl0ZW0gaGFzIGl0cyBiYXRjaHZpc1tdIGVudHJ5IHNldCBleGFjdGx5IG9uY2UgKG9yIG5l dmVyKS4gIFdlIG1ha2UKKyAqIHN1cmUgdGhhdCB0aGUgc2NhbiBoYXMgYSBmaXhlZCBwaWN0dXJl IG9mIHdoaWNoIGJsb2NrcyBpdCdsbCBuZWVkIHRvIGZldGNoCisgKiBpbiB0aGUgbmVhciBmdXR1 cmUuICBJZiBjYWxsZXIncyBwb3NpdGlvbidzIGl0ZW0gKG9yIG90aGVyIG5lYXJieSBpdGVtcykK KyAqIGFscmVhZHkgaGF2ZSBhIHZhbGlkIGJhdGNodmlzW10gZW50cnksIHdlIG11c3QgYXZvaWQg Y2xvYmJlcmluZyB0aGF0IGVudHJ5LgorICoKKyAqIFdlIGtlZXAgdHdvIGNvbXBldGluZyBjb25z aWRlcmF0aW9ucyBpbiBiYWxhbmNlIHdoZW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0bworICogY2hl Y2sgYWRkaXRpb25hbCBpdGVtczogdGhlIG5lZWQgdG8ga2VlcCB0aGUgY29zdCBvZiB2aXNpYmls aXR5IG1hcCBhY2Nlc3MKKyAqIHVuZGVyIGNvbnRyb2wgd2hlbiBtb3N0IGl0ZW1zIHdpbGwgbmV2 ZXIgYmUgcmV0dXJuZWQgYnkgdGhlIHNjYW4gYW55d2F5CisgKiAoaW1wb3J0YW50IGZvciBpbm5l ciBpbmRleCBzY2FucyBvZiBhbnRpLWpvaW5zIGFuZCBzZW1pLWpvaW5zKSwgYW5kIHRoZQorICog bmVlZCB0byB1bmd1YXJkIGJhdGNoZXMgcHJvbXB0bHkuCisgKgorICogT25jZSB3ZSd2ZSByZXNv bHZlZCB2aXNpYmlsaXR5IGZvciBhbGwgaXRlbXMgaW4gYSBiYXRjaCwgd2UgY2FuIHNhZmVseQor ICogdW5ndWFyZCBpdCBieSBjYWxsaW5nIGFtdW5ndWFyZGJhdGNoLiAgVGhpcyBpcyBzYWZlIHdp dGggcmVzcGVjdCB0bworICogY29uY3VycmVudCBWQUNVVU0gYmVjYXVzZSB0aGUgYmF0Y2gncyBn dWFyZCAodHlwaWNhbGx5IGEgYnVmZmVyIHBpbiBvbiB0aGUKKyAqIG9yaWdpbmF0aW5nIGluZGV4 IHBhZ2UpIGJsb2NrcyBWQUNVVU0gZnJvbSBhY3F1aXJpbmcgYSBjb25mbGljdGluZyBjbGVhbnVw CisgKiBsb2NrIG9uIHRoYXQgcGFnZS4gIENvcHlpbmcgdGhlIHJlbGV2YW50IHZpc2liaWxpdHkg bWFwIGRhdGEgaW50byBvdXIgbG9jYWwKKyAqIGNhY2hlIHN1ZmZpY2VzIHRvIHByZXZlbnQgdW5z YWZlIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZzogaWYgYW55IG9mIHRoZXNlCisgKiBUSURzIHBv aW50IHRvIGRlYWQgaGVhcCB0dXBsZXMsIFZBQ1VVTSBjYW5ub3QgcG9zc2libHkgcmV0dXJuIGZy b20KKyAqIGFtYnVsa2RlbGV0ZSBhbmQgbWFyayB0aGUgcG9pbnRlZC10byBoZWFwIHBhZ2VzIGFz IGFsbC12aXNpYmxlLiAgVkFDVVVNCisgKiBfY2FuXyBkbyBzbyBvbmNlIHRoZSBiYXRjaCBpcyB1 bmd1YXJkZWQsIGJ1dCB0aGF0J3Mgb2theTsgd2UnbGwgYmUgd29ya2luZworICogb2ZmIG9mIGNh Y2hlZCB2aXNpYmlsaXR5IGluZm8gdGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVhZCBUSURzIGFy ZSBOT1QKKyAqIGFsbC12aXNpYmxlLgorICoKKyAqIFdoYXQgYWJvdXQgdGhlIG9wcG9zaXRlIGNh c2UsIHdoZXJlIGEgcGFnZSB3YXMgYWxsLXZpc2libGUgd2hlbiB3ZSBjYWNoZWQKKyAqIHRoZSBW TSBiaXRzIGJ1dCB0dXBsZXMgb24gaXQgYXJlIGRlbGV0ZWQgYWZ0ZXJ3YXJkcz8gIFRoYXQgaXMg c2FmZSB0b286IGFueQorICogdHVwbGUgdGhhdCB3YXMgdmlzaWJsZSB0byBhbGwgd2hlbiB3ZSBy ZWFkIHRoZSBWTSBtdXN0IGFsc28gYmUgdmlzaWJsZSB0bworICogb3VyIE1WQ0Mgc25hcHNob3Qs IHNvIGl0IGlzIGNvcnJlY3QgdG8gc2tpcCB0aGUgaGVhcCBmZXRjaCBmb3IgdGhvc2UgVElEcy4K KyAqLworc3RhdGljIHZvaWQKK2hlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkgIEluZGV4 U2NhbkJhdGNoIGJhdGNoLCBIZWFwQmF0Y2hEYXRhICpoYmF0Y2gsCisJCQkJCQkJCSAgQmF0Y2hS aW5nSXRlbVBvcyAqcG9zKQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhG ZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlpbnQJCQlwb3NJdGVtID0gcG9z LT5pdGVtOworCWludAkJCWxvSXRlbSwKKwkJCQloaUl0ZW07CisJQmxvY2tOdW1iZXIgY3Vydm1o ZWFwYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJYm9vbAkJY3Vydm1oZWFwYWxsdmlzID0g ZmFsc2U7CisKKwlBc3NlcnQoaGJhdGNoID09IGluZGV4X3NjYW5fYmF0Y2hfdGFibGVfYXJlYShz Y2FuLCBiYXRjaCkpOworCisJLyoKKwkgKiBUaGUgYmF0Y2ggbXVzdCBzdGlsbCBiZSBndWFyZGVk IHdoZW5ldmVyIHdlJ3JlIGNhbGxlZC4KKwkgKgorCSAqIGFtdW5ndWFyZGJhdGNoIGNhbid0IGJl IGNhbGxlZCB1bnRpbCB3ZSd2ZSBhbHJlYWR5IHNldCBfZXZlcnlfIGJhdGNoCisJICogaXRlbSdz IGJhdGNodmlzW10gc3RhdHVzLCBidXQgaWYgd2UndmUgYWxyZWFkeSBkb25lIHNvIGZvciB0aGlz IGJhdGNoCisJICogdGhlbiBpdCBzaG91bGRuJ3QgZXZlciBnZXQgcGFzc2VkIHRvIHVzIGFnYWlu IGJ5IHNvbWUgc3Vic2VxdWVudCBjYWxsLgorCSAqIChUaGlzIHJlbGllcyBvbiBpbmRleC1vbmx5 IHNjYW5zIGFsd2F5cyBiZWluZyAhYmF0Y2hJbW1lZGlhdGVVbmd1YXJkLikKKwkgKi8KKwlBc3Nl cnQoYmF0Y2gtPmlzR3VhcmRlZCAmJiAhc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKwor CS8qCisJICogU2V0IHZpc2liaWxpdHkgaW5mbyBmb3IgYSByYW5nZSBvZiBpdGVtcywgaW4gc2Nh biBvcmRlci4KKwkgKgorCSAqIE5vdGU6IHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyBkb2VzIG5v dCBsb2NrIHRoZSB2aXNpYmlsaXR5IG1hcCBidWZmZXIsCisJICogc28gdGhlIHJlc3VsdCBjb3Vs ZCBiZSBzbGlnaHRseSBzdGFsZS4gIFNlZSB0aGUgIk1lbW9yeSBvcmRlcmluZworCSAqIGVmZmVj dHMiIGRpc2N1c3Npb24gYWJvdmUgdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzIGZvciBhbiBleHBs YW5hdGlvbgorCSAqIG9mIHdoeSB0aGlzIGlzIG9rYXkuCisJICovCisJaWYgKFNjYW5EaXJlY3Rp b25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwl7CisJCWludAkJCWxhc3RTZXRJdGVtID0gTWluKGJh dGNoLT5sYXN0SXRlbSwKKwkJCQkJCQkJCSAgcG9zSXRlbSArIGhzY2FuLT54c192bV9pdGVtcyAt IDEpOworCisJCWZvciAoaW50IHNldEl0ZW0gPSBwb3NJdGVtOyBzZXRJdGVtIDw9IGxhc3RTZXRJ dGVtOyBzZXRJdGVtKyspCisJCXsKKwkJCUl0ZW1Qb2ludGVyIHRpZCA9ICZiYXRjaC0+aXRlbXNb c2V0SXRlbV0udGFibGVUaWQ7CisJCQlCbG9ja051bWJlciBoZWFwYmxrbm8gPSBJdGVtUG9pbnRl ckdldEJsb2NrTnVtYmVyKHRpZCk7CisKKwkJCS8qIE11c3QgbmV2ZXIgb3ZlcndyaXRlIGFueSBi YXRjaCBpdGVtJ3MgY2FjaGVkIHZpc2liaWxpdHkgaW5mbyAqLworCQkJaWYgKEhFQVBfQkFUQ0hf VklTX0NBQ0hFRChoYmF0Y2gsIHNldEl0ZW0pKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoaGVh cGJsa25vICE9IGN1cnZtaGVhcGJsa25vKQorCQkJeworCQkJCWN1cnZtaGVhcGFsbHZpcyA9IFZN X0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwgaGVhcGJsa25vLAorCQkJCQkJCQkJCQkJ ICZoc2Nhbi0+eHNfdm1idWZmZXIpOworCQkJCWN1cnZtaGVhcGJsa25vID0gaGVhcGJsa25vOwor CQkJfQorCisJCQloYmF0Y2gtPmJhdGNodmlzW3NldEl0ZW1dID0gY3Vydm1oZWFwYWxsdmlzOwor CQl9CisKKwkJLyogV2UganVzdCBjYWNoZWQgdmlzaWJpbGl0eSBmb3IgaXRlbXMgW3Bvc0l0ZW0s IGxhc3RTZXRJdGVtXSAqLworCQlsb0l0ZW0gPSBwb3NJdGVtOworCQloaUl0ZW0gPSBsYXN0U2V0 SXRlbTsKKwl9CisJZWxzZQorCXsKKwkJaW50CQkJbGFzdFNldEl0ZW0gPSBNYXgoYmF0Y2gtPmZp cnN0SXRlbSwKKwkJCQkJCQkJCSAgcG9zSXRlbSAtIGhzY2FuLT54c192bV9pdGVtcyArIDEpOwor CisJCWZvciAoaW50IHNldEl0ZW0gPSBwb3NJdGVtOyBzZXRJdGVtID49IGxhc3RTZXRJdGVtOyBz ZXRJdGVtLS0pCisJCXsKKwkJCUl0ZW1Qb2ludGVyIHRpZCA9ICZiYXRjaC0+aXRlbXNbc2V0SXRl bV0udGFibGVUaWQ7CisJCQlCbG9ja051bWJlciBoZWFwYmxrbm8gPSBJdGVtUG9pbnRlckdldEJs b2NrTnVtYmVyKHRpZCk7CisKKwkJCS8qIE11c3QgbmV2ZXIgb3ZlcndyaXRlIGFueSBiYXRjaCBp dGVtJ3MgY2FjaGVkIHZpc2liaWxpdHkgaW5mbyAqLworCQkJaWYgKEhFQVBfQkFUQ0hfVklTX0NB Q0hFRChoYmF0Y2gsIHNldEl0ZW0pKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoaGVhcGJsa25v ICE9IGN1cnZtaGVhcGJsa25vKQorCQkJeworCQkJCWN1cnZtaGVhcGFsbHZpcyA9IFZNX0FMTF9W SVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwgaGVhcGJsa25vLAorCQkJCQkJCQkJCQkJICZoc2Nh bi0+eHNfdm1idWZmZXIpOworCQkJCWN1cnZtaGVhcGJsa25vID0gaGVhcGJsa25vOworCQkJfQor CisJCQloYmF0Y2gtPmJhdGNodmlzW3NldEl0ZW1dID0gY3Vydm1oZWFwYWxsdmlzOworCQl9CisK KwkJLyogV2UganVzdCBjYWNoZWQgdmlzaWJpbGl0eSBmb3IgaXRlbXMgW2xhc3RTZXRJdGVtLCBw b3NJdGVtXSAqLworCQlsb0l0ZW0gPSBsYXN0U2V0SXRlbTsKKwkJaGlJdGVtID0gcG9zSXRlbTsK Kwl9CisKKwkvKgorCSAqIEV4dGVuZCB0aGUgYmF0Y2gncyB2YWxpZCByYW5nZSB0byBjb3ZlciB0 aGUgaXRlbXMgd2UganVzdCBjYWNoZWQuICBUaGUKKwkgKiBzZXQgb2YgY2FjaGVkIGl0ZW1zIGlz IGFsd2F5cyBjb250aWd1b3VzLCBiZWNhdXNlIHRoZSBzY2FuIHZpc2l0cyBpdGVtcworCSAqIGlu IG9yZGVyIGFuZCBvbmx5IGV2ZXIgZXh0ZW5kcyB0aGUgcmFuZ2UgZnJvbSBmaXJzdEl0ZW0gZm9y d2FyZHMgb3IKKwkgKiBmcm9tIGxhc3RJdGVtIGJhY2t3YXJkcy4KKwkgKi8KKwlBc3NlcnQoaGJh dGNoLT5maXJzdFZpc1NldCA+IGhiYXRjaC0+bGFzdFZpc1NldCB8fAkvKiBzdGlsbCBjb250aWd1 b3VzPyAqLworCQkgICAobG9JdGVtIDw9IGhiYXRjaC0+bGFzdFZpc1NldCArIDEgJiYKKwkJCWhp SXRlbSA+PSBoYmF0Y2gtPmZpcnN0VmlzU2V0IC0gMSkpOworCWhiYXRjaC0+Zmlyc3RWaXNTZXQg PSBNaW4oaGJhdGNoLT5maXJzdFZpc1NldCwgbG9JdGVtKTsKKwloYmF0Y2gtPmxhc3RWaXNTZXQg PSBNYXgoaGJhdGNoLT5sYXN0VmlzU2V0LCBoaUl0ZW0pOworCisJLyoKKwkgKiBJdCdzIHNhZmUg dG8gdW5ndWFyZCB0aGUgYmF0Y2ggKHZpYSBhbXVuZ3VhcmRiYXRjaCkgYXMgc29vbiBhcyB3ZSd2 ZQorCSAqIHJlc29sdmVkIHRoZSB2aXNpYmlsaXR5IHN0YXR1cyBvZiBhbGwgb2YgaXRzIGl0ZW1z ICh1bmxlc3MgdGhpcyBpcyBhCisJICogbm9uLU1WQ0Mgc2NhbikKKwkgKi8KKwlpZiAoaGJhdGNo LT5maXJzdFZpc1NldCA8PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCWhiYXRjaC0+bGFzdFZpc1Nl dCA+PSBiYXRjaC0+bGFzdEl0ZW0pCisJeworCQlBc3NlcnQoaGJhdGNoLT5maXJzdFZpc1NldCA9 PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkgICBoYmF0Y2gtPmxhc3RWaXNTZXQgPT0gYmF0Y2gt Pmxhc3RJdGVtKTsKKworCQkvKgorCQkgKiBOb3RlOiBub2RlSW5kZXhvbmx5c2Nhbi5jIG9ubHkg c3VwcG9ydHMgTVZDQyBzbmFwc2hvdHMsIGJ1dCB3ZQorCQkgKiBzdGlsbCBjb3BlIHdpdGggaW5k ZXgtb25seSBzY2FuIGNhbGxlcnMgd2l0aCBvdGhlciBzbmFwc2hvdCB0eXBlcy4KKwkJICogVGhp cyBpcyBjZXJ0YWlubHkgbm90IHVuZXhwZWN0ZWQ7IHNlbGZ1bmNzLmMgcGVyZm9ybXMgaW5kZXgt b25seQorCQkgKiBzY2FucyB0aGF0IHVzZSBTbmFwc2hvdE5vblZhY3V1bWFibGUuCisJCSAqLwor CQlpZiAoc2Nhbi0+TVZDQ1NjYW4pCisJCQl0YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRjaChzY2Fu LCBiYXRjaCk7CisJfQorCisJLyoKKwkgKiBFbHNlIGNoZWNrIHZpc2liaWxpdHkgZm9yIHR3aWNl IGFzIG1hbnkgaXRlbXMgbmV4dCB0aW1lLCBvciBhbGwgaXRlbXMuCisJICogV2UgY2hlY2sgYWxs IGl0ZW1zIGluIG9uZSBnbyBvbmNlIHdlJ3JlIHBhc3NlZCB0aGUgc2NhbidzIGZpcnN0IGJhdGNo LgorCSAqLworCWVsc2UgaWYgKGhzY2FuLT54c192bV9pdGVtcyA8IChiYXRjaC0+bGFzdEl0ZW0g LSBiYXRjaC0+Zmlyc3RJdGVtKSkKKwkJaHNjYW4tPnhzX3ZtX2l0ZW1zICo9IDI7CisJZWxzZQor CQloc2Nhbi0+eHNfdm1faXRlbXMgPSBzY2FuLT5tYXhpdGVtc2JhdGNoOwogfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L01ha2VmaWxlCmluZGV4IDZmMmUzMDYxYS4uZTZkNjgxYjQwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIE9CSlMgPSBcCiAJYW1hcGkubyBcCiAJ YW12YWxpZGF0ZS5vIFwKIAlnZW5hbS5vIFwKLQlpbmRleGFtLm8KKwlpbmRleGFtLm8gXAorCWlu ZGV4YmF0Y2gubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1r CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCmluZGV4IGVmYTAwNzAzMC4uZDRhZGJiZWIyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYwpAQCAtNTUsNiArNTUsMTEgQEAgR2V0SW5kZXhBbVJvdXRp bmUoT2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91dGluZS0+YW1yZXNjYW4gIT0gTlVMTCk7CiAJ QXNzZXJ0KHJvdXRpbmUtPmFtZW5kc2NhbiAhPSBOVUxMKTsKIAorCS8qIEFzc2VydCB0aGF0IEFN IGRvZXNuJ3QgaGF2ZSBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGNhbGxiYWNrcyAqLworCUFz c2VydCgocm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKSA9PSAocm91dGluZS0+YW11bmd1YXJk YmF0Y2ggIT0gTlVMTCkpOworCUFzc2VydChyb3V0aW5lLT5hbWtpbGxpdGVtc2JhdGNoID09IE5V TEwgfHwgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+YW1n ZXRiYXRjaCAhPSBOVUxMIHx8IHJvdXRpbmUtPmFtcG9zcmVzZXQgPT0gTlVMTCk7CisKIAlyZXR1 cm4gcm91dGluZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dl bmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCAzMTg1NThjY2Iu LjMwYWY0ZTQxMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTg5LDYgKzg5LDggQEAg UmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBp bnQgbm9yZGVyYnlzKQogCXNjYW4tPnhzX3NuYXBzaG90ID0gSW52YWxpZFNuYXBzaG90OwkvKiBj YWxsZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8KIAlzY2FuLT5udW1iZXJPZktleXMgPSBua2V5 czsKIAlzY2FuLT5udW1iZXJPZk9yZGVyQnlzID0gbm9yZGVyYnlzOworCXNjYW4tPnVzZWJhdGNo cmluZyA9IGZhbHNlOyAvKiBzZXQgbGF0ZXIgZm9yIGFtZ2V0YmF0Y2ggY2FsbGVycyAqLworCW1l bXNldCgmc2Nhbi0+YmF0Y2hjYWNoZSwgMCwgc2l6ZW9mKHNjYW4tPmJhdGNoY2FjaGUpKTsKIAog CS8qCiAJICogV2UgYWxsb2NhdGUga2V5IHdvcmtzcGFjZSBoZXJlLCBidXQgaXQgd29uJ3QgZ2V0 IGZpbGxlZCB1bnRpbCBhbXJlc2Nhbi4KQEAgLTEyOCw2ICsxMzAsMTIgQEAgUmVsYXRpb25HZXRJ bmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlz KQogCiAJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gTlVMTDsKIAorCXNjYW4tPmJhdGNoX2luZGV4 X29wYXF1ZV9zdGF0aWMgPSAwOworCXNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPSAwOwor CXNjYW4tPmJhdGNoX29wYXF1ZV9zaXplID0gMDsKKwlzY2FuLT5iYXRjaF9wZXJfaXRlbV9zaXpl ID0gMDsKKwlzY2FuLT5iYXRjaF9iYXNlX29mZnNldCA9IDA7CisKIAlzY2FuLT54c19uYW1lX2Nz dHJpbmdfYXR0bnVtcyA9IE5VTEw7CiAJc2Nhbi0+eHNfbmFtZV9jc3RyaW5nX2NvdW50ID0gMDsK IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggZTEyNWY3ZTYwLi5hMGNiZTdiNzkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtMTMsMTggKzEzLDE1IEBACiAgKiBJ TlRFUkZBQ0UgUk9VVElORVMKICAqCQlpbmRleF9vcGVuCQktIG9wZW4gYW4gaW5kZXggcmVsYXRp b24gYnkgcmVsYXRpb24gT0lECiAgKgkJaW5kZXhfY2xvc2UJCS0gY2xvc2UgYW4gaW5kZXggcmVs YXRpb24KLSAqCQlpbmRleF9iZWdpbnNjYW4gLSBzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXggd2l0 aCBhbWdldHR1cGxlCisgKgkJaW5kZXhfYmVnaW5zY2FuIC0gc3RhcnQgYSBzY2FuIG9mIGFuIGlu ZGV4IHdpdGggYW1nZXRiYXRjaC9hbWdldHR1cGxlCiAgKgkJaW5kZXhfYmVnaW5zY2FuX2JpdG1h cCAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFtZ2V0Yml0bWFwCiAgKgkJaW5kZXhf cmVzY2FuCS0gcmVzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXgKICAqCQlpbmRleF9lbmRzY2FuCS0g ZW5kIGEgc2NhbgogICoJCWluZGV4X2luc2VydAktIGluc2VydCBhbiBpbmRleCB0dXBsZSBpbnRv IGEgcmVsYXRpb24KLSAqCQlpbmRleF9tYXJrcG9zCS0gbWFyayBhIHNjYW4gcG9zaXRpb24KLSAq CQlpbmRleF9yZXN0cnBvcwktIHJlc3RvcmUgYSBzY2FuIHBvc2l0aW9uCiAgKgkJaW5kZXhfcGFy YWxsZWxzY2FuX2VzdGltYXRlIC0gZXN0aW1hdGUgc2hhcmVkIG1lbW9yeSBmb3IgcGFyYWxsZWwg c2NhbgogICoJCWluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplIC0gaW5pdGlhbGl6ZSBwYXJh bGxlbCBzY2FuCiAgKgkJaW5kZXhfcGFyYWxsZWxyZXNjYW4gIC0gKHJlKXN0YXJ0IGEgcGFyYWxs ZWwgc2NhbiBvZiBhbiBpbmRleAogICoJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbCAtIGpvaW4g cGFyYWxsZWwgaW5kZXggc2NhbgotICoJCWluZGV4X2dldG5leHRfdGlkCS0gYW1nZXR0dXBsZSB0 YWJsZSBBTSBoZWxwZXIgcm91dGluZQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVw bGVzIGZyb20gYSBzY2FuCiAgKgkJaW5kZXhfYnVsa19kZWxldGUJLSBidWxrIGRlbGV0aW9uIG9m IGluZGV4IHR1cGxlcwogICoJCWluZGV4X3ZhY3V1bV9jbGVhbnVwCS0gcG9zdC1kZWxldGlvbiBj bGVhbnVwIG9mIGFuIGluZGV4CkBAIC0yNTQsNyArMjUxLDcgQEAgaW5kZXhfaW5zZXJ0X2NsZWFu dXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIH0KIAogLyoKLSAqIGluZGV4X2JlZ2luc2NhbiAt IHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFtZ2V0dHVwbGUKKyAqIGluZGV4X2JlZ2lu c2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFtZ2V0YmF0Y2gvYW1nZXR0dXBs ZQogICoKICAqIENhbGxlciBtdXN0IGJlIGhvbGRpbmcgc3VpdGFibGUgbG9ja3Mgb24gdGhlIGhl YXAgYW5kIHRoZSBpbmRleC4KICAqLwpAQCAtMzM5LDYgKzMzNiw3IEBAIGluZGV4X2JlZ2luc2Nh bl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBSZWxhdGlvbiBoZWFwUmVsYXRpb24s CiAJc2Nhbi0+eHNfdGVtcF9zbmFwID0gdGVtcF9zbmFwOwogCiAJc2Nhbi0+eHNfc25hcHNob3Qg PSBzbmFwc2hvdDsKKwlzY2FuLT5NVkNDU2NhbiA9IElzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hv dCk7CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CiAKIAkvKgpAQCAtMzUwLDYgKzM0 OCw3IEBAIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXBSZWxhdGlv bjsKIAkJc2Nhbi0+eHNfd2FudF9pdHVwID0gaW5kZXhfb25seV9zY2FuOwogCQlzY2FuLT54c19o ZWFwX2NvbnRpbnVlID0gZmFsc2U7CisJCXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCA9IChz Y2FuLT5NVkNDU2NhbiAmJiAhaW5kZXhfb25seV9zY2FuKTsKIAogCQkvKgogCQkgKiBGb3IgaW5k ZXgtb25seSBzY2FucywgZmluZCBhbnkgIm5hbWUiIGNvbHVtbnMgc3RvcmVkIGFzIGNzdHJpbmdz CkBAIC0zOTQsNiArMzkzLDE0IEBAIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBp bmRleFJlbGF0aW9uLCBSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCUFzc2VydChzY2FuLT54c19n ZXRuZXh0X3Nsb3QgIT0gTlVMTCAmJiBzY2FuLT54c19oZWFwZmV0Y2ggIT0gTlVMTCk7CiAJfQog CisJLyoKKwkgKiBCaXRtYXAgaW5kZXggc2NhbnMgc2hvdWxkIG5ldmVyIHVzZSBhIGJhdGNoIHJp bmcgYnVmZmVyICh0aG91Z2ggY2FuIHVzZQorCSAqIHRoZSBzY2FuJ3MgYmF0Y2ggY2FjaGUpLiAg UGxhaW4gaW5kZXggc2NhbnMgKGFuZCBpbmRleC1vbmx5IHNjYW5zKQorCSAqIHNob3VsZCBvbmx5 IHVzZSBhIGJhdGNoIHJpbmcgYnVmZmVyIHdpdGggYW4gYW1nZXRiYXRjaCBpbmRleCBBTS4KKwkg Ki8KKwlBc3NlcnQoIXNjYW4tPnhzX2hlYXBmZXRjaCA/ICFzY2FuLT51c2ViYXRjaHJpbmcgOgor CQkgICAoaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkgPT0gc2Nh bi0+dXNlYmF0Y2hyaW5nKTsKKwogCXJldHVybiBzY2FuOwogfQogCkBAIC00NDEsNyArNDQ4LDIx IEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCVNDQU5fQ0hFQ0tTOwogCUNI RUNLX1NDQU5fUFJPQ0VEVVJFKGFtZW5kc2Nhbik7CiAKLQkvKiBSZWxlYXNlIHJlc291cmNlcyAo bGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8qCisJICogYW1nZXRi aXRtYXAgc2NhbnMgb2YgYW4gaW5kZXggQU0gdGhhdCBzdXBwb3J0cyBhbWdldGJhdGNoIG1ha2Ug bGltaXRlZAorCSAqIHVzZSBvZiB0aGUgc2NhbidzIGJhdGNoIGNhY2hlLiAgQ2hlY2sgZm9yIHRo YXQuCisJICovCisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcgJiYgc2Nhbi0+YmF0Y2hjYWNoZVsw XSAhPSBOVUxMKQorCXsKKwkJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCA9PSBOVUxMKTsKKwkJ QXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwp OworCQlwZnJlZShpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2Nhbiwgc2Nhbi0+YmF0Y2hjYWNoZVsw XSkpOworCX0KKworCS8qCisJICogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMg YW5kIGJhdGNoIHJpbmcgYnVmZmVyKSBoZWxkIGJ5CisJICogdGFibGUgQU0gZm9yIGluZGV4IHNj YW4KKwkgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCXsKIAkJdGFibGVfaW5kZXhfZmV0 Y2hfZW5kKHNjYW4pOwpAQCAtNDYxLDUyICs0ODIsNiBAQCBpbmRleF9lbmRzY2FuKEluZGV4U2Nh bkRlc2Mgc2NhbikKIAlJbmRleFNjYW5FbmQoc2Nhbik7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0t LS0KLSAqCQlpbmRleF9tYXJrcG9zICAtIG1hcmsgYSBzY2FuIHBvc2l0aW9uCi0gKiAtLS0tLS0t LS0tLS0tLS0tCi0gKi8KLXZvaWQKLWluZGV4X21hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQot ewotCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtbWFya3Bvcyk7Ci0KLQlz Y2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJrcG9zKHNjYW4pOwotfQotCi0vKiAt LS0tLS0tLS0tLS0tLS0tCi0gKgkJaW5kZXhfcmVzdHJwb3MJLSByZXN0b3JlIGEgc2NhbiBwb3Np dGlvbgotICoKLSAqIE5PVEU6IHRoaXMgb25seSByZXN0b3JlcyB0aGUgaW50ZXJuYWwgc2NhbiBz dGF0ZSBvZiB0aGUgaW5kZXggQU0uICBTZWUKLSAqIGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3Mo KS4KLSAqCi0gKiBOT1RFOiBGb3IgaGVhcCwgaW4gdGhlIHByZXNlbmNlIG9mIEhPVCBjaGFpbnMs IG1hcmsvcmVzdG9yZSBvbmx5IHdvcmtzCi0gKiBjb3JyZWN0bHkgaWYgdGhlIHNjYW4ncyBzbmFw c2hvdCBpcyBNVkNDLXNhZmU7IHRoYXQgZW5zdXJlcyB0aGF0IHRoZXJlJ3MgYXQKLSAqIG1vc3Qg b25lIHJldHVybmFibGUgdHVwbGUgaW4gZWFjaCBIT1QgY2hhaW4sIGFuZCBzbyByZXN0b3Jpbmcg dGhlIHByaW9yCi0gKiBzdGF0ZSBhdCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGluZGV4IEFNIGlz IHN1ZmZpY2llbnQuICBTaW5jZSB0aGUgb25seQotICogY3VycmVudCB1c2VyIG9mIG1hcmsvcmVz dG9yZSBmdW5jdGlvbmFsaXR5IGlzIG5vZGVNZXJnZWpvaW4uYywgdGhpcwotICogZWZmZWN0aXZl bHkgbWVhbnMgdGhhdCBtZXJnZS1qb2luIHBsYW5zIG9ubHkgd29yayBmb3IgTVZDQyBzbmFwc2hv dHMuICBUaGlzCi0gKiBjb3VsZCBiZSBmaXhlZCBpZiBuZWNlc3NhcnksIGJ1dCBmb3Igbm93IGl0 IHNlZW1zIHVuaW1wb3J0YW50LgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi12b2lkCi1pbmRl eF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCi17Ci0JQXNzZXJ0KElzTVZDQ0xpa2VTbmFw c2hvdChzY2FuLT54c19zbmFwc2hvdCkpOwotCi0JU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9Q Uk9DRURVUkUoYW1yZXN0cnBvcyk7Ci0KLQkvKiByZXNldCB0YWJsZSBBTSBzdGF0ZSBmb3IgcmVz dG9yaW5nIHRoZSBtYXJrZWQgcG9zaXRpb24gKi8KLQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQot CQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKLQotCXNjYW4tPmtpbGxfcHJpb3JfdHVw bGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwotCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBm YWxzZTsKLQotCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc3RycG9zKHNjYW4p OwotfQotCiAvKgogICogRXN0aW1hdGVzIHRoZSBzaGFyZWQgbWVtb3J5IG5lZWRlZCBmb3IgcGFy YWxsZWwgc2NhbiwgaW5jbHVkaW5nIGFueQogICogQU0tc3BlY2lmaWMgcGFyYWxsZWwgc2NhbiBz dGF0ZS4KQEAgLTYyMiw1NiArNTk3LDYgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0 aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogCQkJCQkJCQkJaW5kZXhfb25seV9zY2Fu LCB0cnVlLCBmbGFncyk7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqIGluZGV4X2dldG5l eHRfdGlkIC0gYW1nZXR0dXBsZSBpbnRlcmZhY2UKLSAqCi0gKiBUaGUgcmVzdWx0IGlzIHRoZSBu ZXh0IFRJRCBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMsCi0gKiBvciBOVUxMIGlmIG5vIG1vcmUg bWF0Y2hpbmcgdHVwbGVzIGV4aXN0LgotICoKLSAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVk IGJ5IHRhYmxlIEFNIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggc2NhbgotICogY2FsbGJhY2tzLgot ICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1JdGVtUG9pbnRlcgotaW5kZXhfZ2V0bmV4dF90aWQo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlib29sCQlm b3VuZDsKLQotCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0dHVwbGUp OwotCi0JLyogWFhYOiB3ZSBzaG91bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQg b3IgcmVnaXN0ZXJlZCAqLwotCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWlu KSk7Ci0KLQkvKgotCSAqIFRoZSBBTSdzIGFtZ2V0dHVwbGUgcHJvYyBmaW5kcyB0aGUgbmV4dCBp bmRleCBlbnRyeSBtYXRjaGluZyB0aGUgc2NhbgotCSAqIGtleXMsIGFuZCBwdXRzIHRoZSBUSUQg aW50byBzY2FuLT54c19oZWFwdGlkLiAgSXQgc2hvdWxkIGFsc28gc2V0Ci0JICogc2Nhbi0+eHNf cmVjaGVjayBhbmQgcG9zc2libHkgc2Nhbi0+eHNfaXR1cC9zY2FuLT54c19oaXR1cCwgdGhvdWdo IHdlCi0JICogcGF5IG5vIGF0dGVudGlvbiB0byB0aG9zZSBmaWVsZHMgaGVyZS4KLQkgKi8KLQlm b3VuZCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldHR1cGxlKHNjYW4sIGRp cmVjdGlvbik7Ci0KLQkvKiBSZXNldCBraWxsIGZsYWcgaW1tZWRpYXRlbHkgZm9yIHNhZmV0eSAq LwotCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsKLQlzY2FuLT54c19oZWFwX2NvbnRp bnVlID0gZmFsc2U7Ci0KLQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUg ZG9uZSAqLwotCWlmICghZm91bmQpCi0JewotCQkvKiByZXNldCB0YWJsZSBBTSBzdGF0ZSAqLwot CQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQotCQkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nh bik7Ci0KLQkJcmV0dXJuIE5VTEw7Ci0JfQotCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNj YW4tPnhzX2hlYXB0aWQpKTsKLQotCXBnc3RhdF9jb3VudF9pbmRleF90dXBsZXMoc2Nhbi0+aW5k ZXhSZWxhdGlvbiwgMSk7Ci0KLQkvKiBSZXR1cm4gdGhlIFRJRCBvZiB0aGUgdHVwbGUgd2UgZm91 bmQuICovCi0JcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOwotfQotCiAvKiAtLS0tLS0tLS0tLS0t LS0tCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgYXQgb25jZSBmcm9tIGFu IGluZGV4IHNjYW4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5k ZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjc1YjliYjQ1ZgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAgLTAsMCArMSw3ODAg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guYworICoJICBCYXRjaC1i YXNlZCBpbmRleCBzY2FuIGluZnJhc3RydWN0dXJlIGZvciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZh Y2UuCisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUg Zm9yIGJhdGNoLWJhc2VkIGluZGV4IHNjYW5zLAorICogd2hpY2ggYWxsb3cgaW5kZXggQU1zIHRv IHJldHVybiBtdWx0aXBsZSBtYXRjaGluZyBUSURzIHBlciBwYWdlIGluIGEgc2luZ2xlCisgKiBj YWxsLiAgVGhlIGJhdGNoIHJpbmcgYnVmZmVyIGlzIG93bmVkIGJ5IHRoZSB0YWJsZSBBTS4KKyAq CisgKiBUaGUgcmluZyBidWZmZXIgbG9hZHMgYmF0Y2hlcyBpbiBpbmRleCBrZXkgc3BhY2UvaW5k ZXggc2NhbiBvcmRlci4KKyAqCisgKiBNb3N0IGZ1bmN0aW9ucyBoZXJlIGFyZSB0YWJsZSBBTSB1 dGlsaXRpZXMgKHRhYmxlYW1fdXRpbF8qKSwgY2FsbGVkIGJ5CisgKiB0YWJsZSBBTXMgZHVyaW5n IGFtZ2V0YmF0Y2ggaW5kZXggc2NhbnMuICBUaGVzZSBtYW5hZ2UgdGhlIGJhdGNoIHJpbmcKKyAq IGJ1ZmZlcidzIGxpZmVjeWNsZSBhbmQgcG9zaXRpb25hbCBzdGF0ZSwgYW5kIGhlbHAgd2l0aCBj ZXJ0YWluIGFzcGVjdHMgb2YKKyAqIHJlc291cmNlIG1hbmFnZW1lbnQuICBUaGUgdGFibGUgQU0g dXNlcyBzY2FuUG9zIChhbmQgaXRzIHNjYW5CYXRjaCBiYXRjaCkKKyAqIHRvIHJldHVybiBpdGVt cyBmcm9tIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKyAqCisgKiBUaGVyZSBhcmUg YWxzbyBzb21lIGluZGV4IEFNIHV0aWxpdGllcyAoaW5kZXhhbV91dGlsXyopLCBjYWxsZWQgYnkg aW5kZXgKKyAqIEFNcyB0aGF0IGltcGxlbWVudCB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UsIHRv IGhlbHAgbWFuYWdlIHJlc291cmNlcyBsaWtlCisgKiBtZW1vcnksIGxvY2tzLCBhbmQgYnVmZmVy IHBpbnMuICBJbmRleCBBTXMgZnJlZSBhbmQgdW5sb2NrIGJhdGNoZXMgYXMKKyAqIGRlc2NyaWJl ZCBpbiBpbmRleGFtLnNnbWwuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIw MjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQor ICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhiYXRjaC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3Mv aW5kZXhiYXRjaC5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiY29t bW9uL2ludC5oIgorI2luY2x1ZGUgImxpYi9xdW5pcXVlLmgiCisKK3N0YXRpYyB2b2lkIHJlbGVh c2VfYW5kX3VuZ3VhcmRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCwKKwkJCQkJCQkJCSAgYm9vbCBhbGxvd19jYWNoZSk7CitzdGF0aWMgaW5saW5lIGJvb2wg YmF0Y2hfY2FjaGVfc3RvcmUoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRj aCk7CitzdGF0aWMgaW50CWJhdGNoX2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2 b2lkICp2Yik7CisKKy8qCisgKiBSZXNldCByaW5nIGJ1ZmZlciBhbmQgcmVsYXRlZCBwb3NpdGlv bmFsIHN0YXRlIHVzZWQgZHVyaW5nIGFuIGFtZ2V0YmF0Y2gKKyAqIGluZGV4IHNjYW4uCisgKgor ICogVGFibGUgQU0gY2FsbGVyIHNob3VsZCBwYXNzIGVuZHNjYW49ZmFsc2UsIHdoaWNoIG1ha2Vz IHVzIGNhY2hlIGFueSBmcmVlZAorICogYmF0Y2hlcyBmb3IgcmV1c2Ugb24gcmVzY2FuLiAgV2Ug cmVsZWFzZSBzY2FuJ3MgbWFya0JhdGNoIGhlcmUgZWl0aGVyIHdheS4KKyAqLwordm9pZAordGFi bGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgZW5kc2Nh bikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdi dWY7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2g7 CisJYm9vbAkJbWFya0JhdGNoRnJlZWQgPSBmYWxzZTsKKworCWJhdGNocmluZ2J1Zi0+c2NhblBv cy52YWxpZCA9IGZhbHNlOworCWJhdGNocmluZ2J1Zi0+bWFya1Bvcy52YWxpZCA9IGZhbHNlOwor CisJZm9yICh1aW50OCBpID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2g7IGkgIT0gYmF0Y2hyaW5n YnVmLT5uZXh0QmF0Y2g7IGkrKykKKwl7CisJCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gaW5kZXhf c2Nhbl9iYXRjaChzY2FuLCBpKTsKKworCQlpZiAoYmF0Y2ggPT0gbWFya0JhdGNoKQorCQkJbWFy a0JhdGNoRnJlZWQgPSB0cnVlOworCisJCXJlbGVhc2VfYW5kX3VuZ3VhcmRfYmF0Y2goc2Nhbiwg YmF0Y2gsICFlbmRzY2FuKTsKKwl9CisKKwlpZiAoIW1hcmtCYXRjaEZyZWVkICYmIHVubGlrZWx5 KG1hcmtCYXRjaCkpCisJCXJlbGVhc2VfYW5kX3VuZ3VhcmRfYmF0Y2goc2NhbiwgbWFya0JhdGNo LCAhZW5kc2Nhbik7CisKKwliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9IDA7CisJYmF0Y2hyaW5n YnVmLT5uZXh0QmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gTlVMTDsKK30K KworLyoKKyAqIEZyZWUgcmVzb3VyY2VzIGF0IGVuZCBvZiBhIGJhdGNoIGluZGV4IHNjYW4uCisg KgorICogQ2FsbGVkIGJ5IHRhYmxlIEFNIHdoZW4gYW4gaW5kZXggc2NhbiBpcyBlbmRpbmcsIHJp Z2h0IGJlZm9yZSB0aGUgb3duaW5nCisgKiBzY2FuIGRlc2NyaXB0b3IgZ29lcyBhd2F5LiAgQ2xl YW5zIHVwIGFsbCBiYXRjaCByZWxhdGVkIHJlc291cmNlcy4KKyAqLwordm9pZAordGFibGVhbV91 dGlsX2JhdGNoc2Nhbl9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCS8qIEZyZWUgYWxsIHJl bWFpbmluZyBsb2FkZWQgYmF0Y2hlcyAoZXZlbiBtYXJrQmF0Y2gpLCBieXBhc3NpbmcgY2FjaGUg Ki8KKwl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4sIHRydWUpOworCisJZm9yIChp bnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwl7CisJCUluZGV4 U2NhbkJhdGNoIGNhY2hlZCA9IHNjYW4tPmJhdGNoY2FjaGVbaV07CisKKwkJaWYgKGNhY2hlZCA9 PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJaWYgKGNhY2hlZC0+ZGVhZEl0ZW1zKQorCQkJcGZy ZWUoY2FjaGVkLT5kZWFkSXRlbXMpOworCQlwZnJlZShpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2Nh biwgY2FjaGVkKSk7CisJfQorfQorCisvKgorICogU2V0IGEgbWFyayBmcm9tIHNjYW5Qb3MgcG9z aXRpb24KKyAqCisgKiBDYWxsZWQgZnJvbSB0aGUgdGFibGUgQU0ncyBpbmRleF9mZXRjaF9tYXJr cG9zIGNhbGxiYWNrLiAgU2F2ZXMgdGhlIGN1cnJlbnQKKyAqIHNjYW4gcG9zaXRpb24gYW5kIGFz c29jaWF0ZWQgYmF0Y2ggc28gdGhhdCB0aGUgc2NhbiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcwor ICogcG9pbnQgbGF0ZXIsIHZpYSB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zLiAg VGhlIG1hcmtlZCBiYXRjaCBpcworICogcmV0YWluZWQgYW5kIG5vdCBmcmVlZCB1bnRpbCBhIG5l dyBtYXJrIGlzIHNldCBvciB0aGUgc2NhbiBlbmRzIChvciB1bnRpbAorICogdGhlIG1hcmsgaXMg cmVzdG9yZWQpLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX21hcmtfcG9zKElu ZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZz Y2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5i YXRjaHJpbmdidWYuc2NhblBvczsKKwlCYXRjaFJpbmdJdGVtUG9zICptYXJrUG9zID0gJmJhdGNo cmluZ2J1Zi0+bWFya1BvczsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9zY2Fu X2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2gg PSBiYXRjaHJpbmdidWYtPm1hcmtCYXRjaDsKKwlib29sCQlmcmVlTWFya0JhdGNoOworCisJQXNz ZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWNhbm1hcmtwb3MpOworCUFzc2Vy dChzY2FuLT5NVkNDU2Nhbik7CisKKwkvKgorCSAqIEEgbWFyayBtdXN0IHBvaW50IGF0IGEgcmVh bCBtYXRjaGluZyBpdGVtLiAgV2UgcmVxdWlyZSB0aGUgY29yZQorCSAqIGV4ZWN1dG9yIHRvIG9u bHkgdGFrZSBhIG1hcmsganVzdCBhZnRlciBhIHN1Y2Nlc3NmdWwgdHVwbGUgZmV0Y2guCisJICov CisJQXNzZXJ0KHNjYW5Qb3MtPnZhbGlkKTsKKwlBc3NlcnQoc2NhblBvcy0+aXRlbSA+PSBzY2Fu QmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkgICBzY2FuUG9zLT5pdGVtIDw9IHNjYW5CYXRjaC0+bGFz dEl0ZW0pOworCisJLyoKKwkgKiBGcmVlIHRoZSBwcmV2aW91cyBtYXJrIGJhdGNoIChpZiBhbnkp IC0tIGJ1dCBvbmx5IGlmIGl0IGlzbid0IG91cgorCSAqIHNjYW5CYXRjaC4gIERlZmVuc2l2ZWx5 IG1ha2Ugc3VyZSB0aGF0IG1hcmtCYXRjaCBpc24ndCBzb21lIGxhdGVyCisJICogc3RpbGwtbmVl ZGVkIGJhdGNoLCB0b28uCisJICovCisJaWYgKCFtYXJrQmF0Y2ggfHwgbWFya0JhdGNoID09IHNj YW5CYXRjaCkKKwl7CisJCS8qIERlZmluaXRlbHkgbm8gbWFya0JhdGNoIHRoYXQgd2Ugc2hvdWxk IGZyZWUgbm93ICovCisJCWZyZWVNYXJrQmF0Y2ggPSBmYWxzZTsKKwl9CisJZWxzZSBpZiAobGlr ZWx5KCFpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChzY2FuLCBtYXJrUG9zLT5iYXRjaCkpKQorCXsK KwkJLyogRGVmaW5pdGVseSBoYXZlIGEgbm8tbG9uZ2VyLWxvYWRlZCBtYXJrQmF0Y2ggdG8gZnJl ZSAqLworCQlmcmVlTWFya0JhdGNoID0gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICog aW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQgaW5kaWNhdGVzIHRoYXQgbWFya1Bvcy0+YmF0Y2ggaXMg bG9hZGVkLAorCQkgKiBidXQgYWZ0ZXIgJ2JhdGNoJyB3cmFwcyBhcm91bmQgYSBzdGFsZSBiYXRj aCBvZmZzZXQgY2FuIGFsaWFzIGEKKwkJICogY3VycmVudGx5LWxvYWRlZCByYW5nZSAoZmFsc2Ug cG9zaXRpdmUpLiAgQ29uZmlybSBieSBjaGVja2luZworCQkgKiB3aGV0aGVyIHRoZSBiYXRjaCBw b2ludGVyIGluIG1hcmtQb3MtPmJhdGNoJ3Mgc2xvdCBzdGlsbCBtYXRjaGVzLgorCQkgKi8KKwkJ ZnJlZU1hcmtCYXRjaCA9IChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIG1hcmtQb3MtPmJhdGNoKSAh PSBtYXJrQmF0Y2gpOworCX0KKworCWlmIChmcmVlTWFya0JhdGNoKQorCQlyZWxlYXNlX2FuZF91 bmd1YXJkX2JhdGNoKHNjYW4sIG1hcmtCYXRjaCwgdHJ1ZSk7CisKKwkvKiBjb3B5IHRoZSBzY2Fu J3MgcG9zaXRpb24gKi8KKwliYXRjaHJpbmdidWYtPm1hcmtQb3MgPSAqc2NhblBvczsKKwliYXRj aHJpbmdidWYtPm1hcmtCYXRjaCA9IHNjYW5CYXRjaDsKK30KKworLyoKKyAqIFJlc3RvcmUgc2Nh blBvcyB0byB0aGUgcHJldmlvdXNseSBzYXZlZCBtYXJrUG9zIHBvc2l0aW9uLgorICoKKyAqIENh bGxlZCBmcm9tIHRoZSB0YWJsZSBBTSdzIGluZGV4X2ZldGNoX3Jlc3RycG9zIGNhbGxiYWNrLiAg UmVzdG9yZXMgdGhlCisgKiBzY2FuIHRvIGEgcG9zaXRpb24gc2F2ZWQgdXNpbmcgdGFibGVhbV91 dGlsX2JhdGNoc2Nhbl9tYXJrX3BvcyBlYXJsaWVyLgorICogVGhlIHNjYW4ncyBtYXJrUG9zIGJl Y29tZXMgaXRzIHNjYW5Qb3MuICBUaGUgbWFya2VkIGJhdGNoIGlzIHJlc3RvcmVkIGFzCisgKiB0 aGUgY3VycmVudCBzY2FuQmF0Y2ggd2hlbiBuZWVkZWQuCisgKgorICogV2UganVzdCBkaXNjYXJk IGFsbCBiYXRjaGVzIChvdGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3JlZCBzY2FuQmF0Y2gpLAor ICogZXhjZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNj YW5CYXRjaC4KKyAqCisgKiBOb3RlOiBUaGlzIHJlbGllcyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0 IHdlIGFscmVhZHkgaGF2ZSBhIHZhbGlkIHNjYW5Qb3MuCisgKiBUYWJsZSBBTXMgc2hvdWxkIG9u bHkgY2FsbCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc2V0IGZyb20gd2l0aGluIHRoZWlyCisg KiBzY2FuJ3MgaW5kZXhfZmV0Y2hfcmVzZXQgY2FsbGJhY2sgdG8gYXZvaWQgYnJlYWtpbmcgdGhp cyBhc3N1bXB0aW9uLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3RvcmVf cG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1 ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZz Y2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsKKwlCYXRjaFJpbmdJdGVtUG9zICptYXJrUG9zID0g JmJhdGNocmluZ2J1Zi0+bWFya1BvczsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRj aHJpbmdidWYtPm1hcmtCYXRjaDsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9z Y2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCUFzc2VydChzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1jYW5tYXJrcG9zKTsKKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4p OworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCisJLyoKKwkgKiBUaGUgY29yZSBleGVj dXRvciBtdXN0IG9ubHkgYXNrIHVzIHRvIHJlc3RvcmUgYSBtYXJrIHdoZW4gaXQgYWxyZWFkeQor CSAqIGhhZCB1cyB0YWtlIG9uZSBvbiBpdHMgYmVoYWxmIGF0IHNvbWUgcG9pbnQgZHVyaW5nIHRo ZSBvbmdvaW5nIHNjYW4KKwkgKi8KKwlBc3NlcnQobWFya1Bvcy0+dmFsaWQpOworCUFzc2VydCht YXJrUG9zLT5pdGVtID49IG1hcmtCYXRjaC0+Zmlyc3RJdGVtICYmCisJCSAgIG1hcmtQb3MtPml0 ZW0gPD0gbWFya0JhdGNoLT5sYXN0SXRlbSk7CisKKwlpZiAoc2NhbkJhdGNoID09IG1hcmtCYXRj aCkKKwl7CisJCS8qIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHNjYW5CYXRjaDsgbmVlZG4ndCBjaGFu Z2UgYmF0Y2hyaW5nYnVmICovCisJCUFzc2VydChzY2FuUG9zLT5iYXRjaCA9PSBtYXJrUG9zLT5i YXRjaCk7CisKKwkJc2NhblBvcy0+aXRlbSA9IG1hcmtQb3MtPml0ZW07CisJCXJldHVybjsKKwl9 CisKKwkvKgorCSAqIEEgYmF0Y2ggaXMgYWx3YXlzIHVuZ3VhcmRlZCBieSB0aGUgdGltZSB0aGUg c2NhbiBtb3ZlcyBvbiB0byBhIGxhdGVyCisJICogYmF0Y2gsIHNvIG1hcmtCYXRjaCAobm93IGJl aGluZCBzY2FuQmF0Y2gpIGNhbm5vdCBzdGlsbCBiZSBndWFyZGVkCisJICovCisJQXNzZXJ0KCFt YXJrQmF0Y2gtPmlzR3VhcmRlZCk7CisKKwkvKgorCSAqIG1hcmtCYXRjaCBpcyBiZWhpbmQgc2Nh bkJhdGNoLCBhbmQgc28gbXVzdCBub3QgYmUgc2F2ZWQgaW4gcmluZyBidWZmZXIKKwkgKiBhbnlt b3JlLiAgV2UgaGF2ZSB0byBkZWFsIHdpdGggcmVzdG9yaW5nIHRoZSBtYXJrIHRoZSBoYXJkIHdh eTogYnkKKwkgKiBpbnZhbGlkYXRpbmcgYWxsIG90aGVyIGxvYWRlZCBiYXRjaGVzLiAgVGhpcyBp cyBzaW1pbGFyIHRvIHRoZSBjYXNlCisJICogd2hlcmUgdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5n ZXMgYW5kIHRoZSBzY2FuIGFjdHVhbGx5IGNyb3NzZXMKKwkgKiBiYXRjaC9pbmRleCBwYWdlIGJv dW5kYXJpZXMgKHNlZSB0YWJsZWFtX3V0aWxfc2NhbmJhdGNoX2RpcmNoYW5nZSkuCisJICoKKwkg KiBGaXJzdCwgZnJlZSBhbGwgYmF0Y2hlcyB0aGF0IGFyZSBzdGlsbCBpbiB0aGUgcmluZyBidWZm ZXIuCisJICovCisJZm9yICh1aW50OCBpID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2g7IGkgIT0g YmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2g7IGkrKykKKwl7CisJCUluZGV4U2NhbkJhdGNoIGJhdGNo ID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBpKTsKKworCQlBc3NlcnQoYmF0Y2ggIT0gbWFya0Jh dGNoKTsKKworCQl0YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaChzY2FuLCBiYXRjaCk7CisJfQor CisJLyoKKwkgKiBOZXh0ICJhcHBlbmQiIHN0YW5kYWxvbmUgbWFya0JhdGNoLCB3aGljaCB3aWxs IGJlY29tZSBzY2FuQmF0Y2gKKwkgKiAoc2NhbkJhdGNoIGlzIGFsd2F5cyB0aGUgcmluZyBidWZm ZXIncyBoZWFkQmF0Y2gpCisJICovCisJbWFya1Bvcy0+YmF0Y2ggPSAwOworCWJhdGNocmluZ2J1 Zi0+c2NhblBvcyA9ICptYXJrUG9zOworCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoID0gYmF0Y2hy aW5nYnVmLT5oZWFkQmF0Y2ggPSBtYXJrUG9zLT5iYXRjaDsKKwlpbmRleF9zY2FuX2JhdGNoX2Fw cGVuZChzY2FuLCBtYXJrQmF0Y2gpOworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGJh dGNocmluZ2J1Zi0+c2NhblBvcy5iYXRjaCkgPT0gbWFya0JhdGNoKTsKKworCS8qCisJICogRmlu YWxseSwgY2FsbCBhbXBvc3Jlc2V0IHRvIGxldCBpbmRleCBBTSBrbm93IHRvIGludmFsaWRhdGUg YW55IHByaXZhdGUKKwkgKiBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZSBzY2Fu J3MgcHJvZ3Jlc3MKKwkgKi8KKwlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFt cG9zcmVzZXQpCisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KHNj YW4sIG1hcmtCYXRjaCk7CisKKwkvKgorCSAqIE5vdGU6IG1hcmtCYXRjaC5kZWFkSXRlbXNbXSBt aWdodCBhbHJlYWR5IGNvbnRhaW4gZGVhZCBpdGVtcywgYW5kIG1pZ2h0CisJICogeWV0IGhhdmUg bW9yZSBkZWFkIGl0ZW1zIHNhdmVkLiAgdGFibGVhbV91dGlsX3JlbGVhc2VfYmF0Y2ggaXMgcHJl cGFyZWQKKwkgKiBmb3IgdGhhdC4KKwkgKi8KK30KKworLyoKKyAqIEhhbmRsZSBjcm9zcy1iYXRj aCBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24KKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0gd2hl biBpdHMgc2NhbiBjaGFuZ2VzIGRpcmVjdGlvbiBpbiBhIHdheSB0aGF0CisgKiBuZWNlc3NpdGF0 ZXMgYmFja2luZyB0aGUgc2NhbiB1cCB0byBhbiBpbmRleCBwYWdlIG9yaWdpbmFsbHkgYXNzb2Np YXRlZAorICogd2l0aCBhIG5vdy1mcmVlZCBiYXRjaC4KKyAqCisgKiBXaGVuIHdlIHJldHVybiwg YmF0Y2hyaW5nYnVmIHdpbGwgb25seSBjb250YWluIG9uZSBiYXRjaCAodGhlIGN1cnJlbnQKKyAq IGhlYWRCYXRjaC9zY2FuQmF0Y2gpIGFuZCB3aWxsIGxvb2sgYXMgaWYgdGhlIG5ldyBzY2FuIGRp cmVjdGlvbiBoYWQgYmVlbgorICogdXNlZCBmcm9tIHRoZSBzdGFydC4gIENhbGxlciBjYW4gdGhl biBzYWZlbHkgcGFzcyB0aGlzIGJhdGNoIHRvIGFtZ2V0YmF0Y2gKKyAqIHRvIGRldGVybWluZSB3 aGljaCBiYXRjaCBjb21lcyBuZXh0IGluIHRoZSBuZXcgc2NhbiBkaXJlY3Rpb24uICBUaGlzCisg KiBhcHByb2FjaCBpc24ndCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LCBidXQgaXQgd29ya3Mgd2Vs bCBlbm91Z2ggZm9yIHdoYXQKKyAqIG91Z2h0IHRvIGJlIGEgcmVsYXRpdmVseSByYXJlIG9jY3Vy cmVuY2UuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9zY2FuYmF0Y2hfZGlyY2hhbmdlKEluZGV4 U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2Fu LT5iYXRjaHJpbmdidWY7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoOworCisJQXNzZXJ0KHNj YW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWNhbmJhY2t3YXJkKTsKKworCS8qCisJICog UmVsZWFzZSBiYXRjaGVzIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgImZpbmFsIiBiYXRjaCwg d29ya2luZworCSAqIGJhY2t3YXJkcyB1bnRpbCB0aGUgY3VycmVudCBoZWFkIGJhdGNoICh3aGlj aCBpcyBhbHNvIHRoZSBjdXJyZW50CisJICogc2NhbkJhdGNoKSBpcyB0aGUgb25seSBiYXRjaCBo YXNuJ3QgYmVlbiBmcmVlZAorCSAqLworCXdoaWxlIChpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNj YW4pID4gMSkKKwl7CisJCXVpbnQ4CQlmaW5hbGlkeCA9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNo IC0gMTsKKwkJSW5kZXhTY2FuQmF0Y2ggZmluYWwgPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGZp bmFsaWR4KTsKKworCQlBc3NlcnQoZmluYWxpZHggIT0gYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLmJh dGNoKTsKKworCQl0YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaChzY2FuLCBmaW5hbCk7CisJCWJh dGNocmluZ2J1Zi0+bmV4dEJhdGNoLS07CisJfQorCisJLyogc2NhbkJhdGNoIGlzIG5vdyB0aGUg b25seSBiYXRjaCBzdGlsbCBsb2FkZWQgKi8KKwlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0 Y2ggPT0gYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLmJhdGNoKTsKKwlzY2FuQmF0Y2ggPSBpbmRleF9z Y2FuX2JhdGNoKHNjYW4sIGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKworCS8qCisJICogRmxp cCBzY2FuQmF0Y2gncyBzY2FuIGRpcmVjdGlvbiB0byByZWZsZWN0IHRoZSByZXZlcnNhbC4gIEFs c28gcmVzZXQKKwkgKiBhbnkgaW5kZXggQU0gc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNr cyBzY2FuIHByb2dyZXNzLgorCSAqLworCXNjYW5CYXRjaC0+ZGlyID0gLXNjYW5CYXRjaC0+ZGly OworCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldCkKKwkJc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQoc2Nhbiwgc2NhbkJhdGNoKTsK K30KKworLyoKKyAqIFJlY29yZCB0aGF0IHNjYW5Qb3MgaXRlbSBpcyBkZWFkCisgKgorICogUmVj b3JkcyBhbiBvZmZzZXQgdG8gdGhlIGN1cnJlbnQgc2NhbkJhdGNoL3NjYW5Qb3MgaXRlbSwgc2F2 aW5nIGl0IGluCisgKiBzY2FuQmF0Y2gncyBkZWFkSXRlbXMgYXJyYXkuICBUaGUgaXRlbXMnIGlu ZGV4IHR1cGxlcyB3aWxsIGxhdGVyIGJlCisgKiBtYXJrZWQgTFBfREVBRCB3aGVuIGN1cnJlbnQg c2NhbkJhdGNoIGlzIGZyZWVkLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfc2NhbnBvc19raWxs aXRlbShJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9 ICZzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2gg PSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCWlmIChzY2FuQmF0 Y2gtPmRlYWRJdGVtcyA9PSBOVUxMKQorCQlzY2FuQmF0Y2gtPmRlYWRJdGVtcyA9IHBhbGxvY19h cnJheShpbnQsIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCWlmIChzY2FuQmF0Y2gtPm51bURlYWQg PCBzY2FuLT5tYXhpdGVtc2JhdGNoKQorCQlzY2FuQmF0Y2gtPmRlYWRJdGVtc1tzY2FuQmF0Y2gt Pm51bURlYWQrK10gPSBzY2FuUG9zLT5pdGVtOworfQorCisvKgorICogUmVsZWFzZSByZXNvdXJj ZXMgYXNzb2NpYXRlZCB3aXRoIGEgYmF0Y2gKKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0ncyBh bWdldGJhdGNoIGluZGV4IHNjYW4gaW1wbGVtZW50YXRpb24gd2hlbiBpdCBpcworICogZmluaXNo ZWQgd2l0aCBhIGJhdGNoIGFuZCB3aXNoZXMgdG8gcmVsZWFzZSBpdHMgcmVzb3VyY2VzLgorICoK KyAqIENhbGxpbmcgaGVyZSB3aGVuICdiYXRjaCcgaXMgYWxzbyBiYXRjaHJpbmdidWYubWFya0Jh dGNoIGlzIGEgbm8tb3AuICBUYWJsZQorICogQU0gY2FsbGVycyBnZW5lcmFsbHkgd29uJ3QgbmVl ZCB0byB3b3JyeSBhYm91dCB0aGlzIGJlY2F1c2UgaXQgaXMgaGFuZGxlZAorICogYXMgYSBzcGVj aWFsIGNhc2UgYnkgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSAoYmVzaWRlcywgdGhlIHNj YW4gY2FuCisgKiBvbmx5IGhhdmUgb25lIG1hcmtCYXRjaCBhdCBhIHRpbWUpLgorICoKKyAqIFdl IGNhbGwgYW11bmd1YXJkYmF0Y2ggdG8gZHJvcCB0aGUgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sg KGUuZy4gYnVmZmVyCisgKiBwaW4pIHdoZW4gaXQgaGFzbid0IGJlZW4gZHJvcHBlZCB5ZXQuICBG b3IgcGxhaW4gTVZDQyBzY2FucyAod2hlcmUKKyAqIGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBpcyBz ZXQpLCB0aGUgaW50ZXJsb2NrIHdhcyBhbHJlYWR5IGRyb3BwZWQgZWFnZXJseQorICogaW4gaW5k ZXhhbV91dGlsX3VubG9ja19iYXRjaCwgc28gd2Ugc2tpcCB0aGUgYW11bmd1YXJkYmF0Y2ggY2Fs bCBoZXJlLgorICogSW5kZXgtb25seSBzY2FucyBtdXN0IGRlbGF5IGRyb3BwaW5nIHRoZSBpbnRl cmxvY2sgdW50aWwgdmlzaWJpbGl0eSBpcworICogcmVzb2x2ZWQgZm9yIGFsbCBpdGVtcyBpbiB0 aGUgYmF0Y2gsIHNvIGFtdW5ndWFyZGJhdGNoIG1heSBzdGlsbCBuZWVkIHRvCisgKiBhY3QgaGVy ZS4gIEZvciBub24tTVZDQyBzbmFwc2hvdCBzY2FucywgdGhlIGludGVybG9jayBpcyBhbHdheXMg aGVsZAorICogdW50aWwgYW11bmd1YXJkYmF0Y2ggZHJvcHMgaXQgaGVyZSAtLSB0aGlzIGlzIHRo ZSBvbmx5IHBsYWNlIHdpbGxpbmcgdG8KKyAqIHVuZ3VhcmQgYSBub24tTVZDQyBzY2FuJ3MgYmF0 Y2guCisgKgorICogV2hlbiB0aGUgYmF0Y2ggaGFzIGRlYWQgaXRlbXMgKG51bURlYWQgPiAwKSBh bmQgdGhlIGluZGV4IEFNIHByb3ZpZGVzIGFuCisgKiBhbWtpbGxpdGVtc2JhdGNoIGNhbGxiYWNr LCB3ZSBjYWxsIGl0IHRvIHNldCBMUF9ERUFEIGJpdHMgaW4gdGhlIGluZGV4CisgKiBwYWdlLiAg VGhpcyBpcyB0aGUgbmF0dXJhbCBwbGFjZSB0byBraWxsIGluZGV4IGl0ZW1zIGJlY2F1c2UgaXQn cyB0aGUKKyAqIHBvaW50IHdoZW4gd2Uga25vdyBmb3Igc3VyZSB0aGF0IG5vIGZ1cnRoZXIgdGFi bGUgYWNjZXNzZXMgd2lsbCB0YWtlCisgKiBwbGFjZSBmb3IgdGhhdCBiYXRjaCdzIGl0ZW1zLgor ICovCit2b2lkCit0YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qIGRvbid0IGZyZWUgY2FsbGVyJ3MgYmF0Y2gg aWYgaXQgaXMgc2NhbidzIGN1cnJlbnQgbWFya0JhdGNoICovCisJaWYgKGJhdGNoID09IHNjYW4t PmJhdGNocmluZ2J1Zi5tYXJrQmF0Y2gpCisJCXJldHVybjsKKworCS8qIFBhc3MgdGhyb3VnaCB0 byBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbiwgd2l0aCBhbGxvd19jYWNoZT10cnVlICovCisJcmVs ZWFzZV9hbmRfdW5ndWFyZF9iYXRjaChzY2FuLCBiYXRjaCwgdHJ1ZSk7Cit9CisKKy8qCisgKiBG cmVlIGEgYmF0Y2gsIG9wdGlvbmFsbHkgY2FjaGluZyBpdCBmb3IgcmV1c2UuCisgKgorICogV2hl biBhbGxvd19jYWNoZSBpcyB0cnVlLCB3ZSB0cnkgdG8gc3RvcmUgdGhlIGJhdGNoIGluIHRoZSBz Y2FuJ3MgYmF0Y2gKKyAqIGNhY2hlIGZvciBsYXRlciByZXVzZS4gIFdoZW4gYWxsb3dfY2FjaGUg aXMgZmFsc2UgKHR5cGljYWxseSBiZWNhdXNlIHRoZQorICogc2NhbiBpcyBzaHV0dGluZyBkb3du KSwgd2UgcGZyZWUgdGhlIGNhbGxlcidzIGJhdGNoIHVuY29uZGl0aW9uYWxseS4KKyAqLworc3Rh dGljIHZvaWQKK3JlbGVhc2VfYW5kX3VuZ3VhcmRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCSAgYm9vbCBhbGxvd19jYWNoZSkKK3sKKwlBc3Nl cnQoIShzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQgJiYgYmF0Y2gtPmlzR3VhcmRlZCkpOwor CUFzc2VydChiYXRjaC0+aXNHdWFyZGVkIHx8IHNjYW4tPk1WQ0NTY2FuKTsKKworCS8qIERyb3Ag VElEIHJlY3ljbGluZyBpbnRlcmxvY2sgdmlhIGFtdW5ndWFyZGJhdGNoIGFzIG5lZWRlZCAqLwor CWlmICghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkICYmIGJhdGNoLT5pc0d1YXJkZWQpCisJ CXRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoKTsKKworCS8qCisJICogTGV0 IHRoZSBpbmRleCBBTSBzZXQgTFBfREVBRCBiaXRzIGluIHRoZSBpbmRleCBwYWdlLCBpZiBhcHBs aWNhYmxlLgorCSAqCisJICogYmF0Y2guZGVhZEl0ZW1zW10gaXMgbm93IGluIHdoYXRldmVyIG9y ZGVyIHRoZSBzY2FuIHJldHVybmVkIGl0ZW1zIGluLgorCSAqIFdlIG1pZ2h0IGhhdmUgZXZlbiBz YXZlZCB0aGUgc2FtZSBpdGVtL1RJRCB0d2ljZS4KKwkgKgorCSAqIFNvcnQgYW5kIHVuaXF1ZS1p ZnkgZGVhZEl0ZW1zW10uICBUaGF0IHdheSB0aGUgaW5kZXggQU0gY2FuIHNhZmVseQorCSAqIGFz c3VtZSB0aGF0IGl0ZW1zIHdpbGwgYWx3YXlzIGJlIGluIHRoZWlyIG9yaWdpbmFsIGluZGV4IHBh Z2Ugb3JkZXIuCisJICovCisJaWYgKGJhdGNoLT5udW1EZWFkID4gMCAmJgorCQlzY2FuLT5pbmRl eFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1raWxsaXRlbXNiYXRjaCAhPSBOVUxMKQorCXsKKwkJaWYg KGJhdGNoLT5udW1EZWFkID4gMSkKKwkJeworCQkJcXNvcnQoYmF0Y2gtPmRlYWRJdGVtcywgYmF0 Y2gtPm51bURlYWQsIHNpemVvZihpbnQpLAorCQkJCSAgYmF0Y2hfY29tcGFyZV9pbnQpOworCQkJ YmF0Y2gtPm51bURlYWQgPSBxdW5pcXVlKGJhdGNoLT5kZWFkSXRlbXMsIGJhdGNoLT5udW1EZWFk LAorCQkJCQkJCQkJIHNpemVvZihpbnQpLCBiYXRjaF9jb21wYXJlX2ludCk7CisJCX0KKworCQlz Y2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1raWxsaXRlbXNiYXRjaChzY2FuLCBiYXRj aCk7CisJfQorCisJLyoKKwkgKiBUcnkgdG8gc3RvcmUgY2FsbGVyJ3MgYmF0Y2ggaW4gdGhpcyBh bWdldGJhdGNoIHNjYW4ncyBjYWNoZSBvZgorCSAqIHByZXZpb3VzbHkgcmVsZWFzZWQgYmF0Y2hl cyBmaXJzdCAod2hlbiBjYWxsZXIgcmVxdWVzdHMgaXQpCisJICovCisJaWYgKGFsbG93X2NhY2hl ICYmIGJhdGNoX2NhY2hlX3N0b3JlKHNjYW4sIGJhdGNoKSkKKwkJcmV0dXJuOworCisJLyoganVz dCBwZnJlZSB0aGUgY2FsbGVyJ3MgYmF0Y2ggKHBsdXMgYmF0Y2gncyBkZWFkSXRlbXMsIGlmIGFu eSkgKi8KKwlpZiAoYmF0Y2gtPmRlYWRJdGVtcykKKwkJcGZyZWUoYmF0Y2gtPmRlYWRJdGVtcyk7 CisJcGZyZWUoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNjYW4sIGJhdGNoKSk7Cit9CisKKy8qCisg KiBEcm9wIHRoZSBiYXRjaCdzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIHZpYSBhbXVuZ3VhcmRi YXRjaAorICoKKyAqIENhbGxlZCBieSB0aGUgdGFibGUgQU0gd2hlbiBpdCdzIHNhZmUgdG8gZHJv cCB3aGF0ZXZlciBpbnRlcmxvY2sgdGhlIGluZGV4CisgKiBBTSBob2xkcyB0byBwcmV2ZW50IHVu c2FmZSBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNICh0eXBpY2FsbHkgYQorICog YnVmZmVyIHBpbiBvbiB0aGUgYmF0Y2gncyBpbmRleCBwYWdlIGluIGJhdGNoJ3Mgb3BhcXVlIGFy ZWEpLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRjaChJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qIFNob3VsZCBiZSBjYWxsZWQgZXhh Y3RseSBvbmNlIGlmZiAhYmF0Y2hJbW1lZGlhdGVVbmd1YXJkICovCisJQXNzZXJ0KCFzY2FuLT5i YXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCUFzc2VydChiYXRjaC0+aXNHdWFyZGVkKTsKKworCXNj YW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXVuZ3VhcmRiYXRjaChzY2FuLCBiYXRjaCk7 CisKKwliYXRjaC0+aXNHdWFyZGVkID0gZmFsc2U7Cit9CisKKy8qCisgKiBVbmxvY2sgYmF0Y2gn cyBpbmRleCBwYWdlIGJ1ZmZlciBsb2NrCisgKgorICogVW5sb2NrcyB0aGUgZ2l2ZW4gYnVmZmVy IGluIHByZXBhcmF0aW9uIGZvciBhbWdldGJhdGNoIHJldHVybmluZyBpdGVtcworICogc2F2ZWQg aW4gdGhhdCBiYXRjaC4gIFBlcmZvcm1zIGV4dHJhIHN0ZXBzIHJlcXVpcmVkIGJ5IGFtZ2V0YmF0 Y2ggY2FsbGVycworICogaW4gcGFzc2luZy4KKyAqCisgKiBPbmx5IGNhbGwgaGVyZSB3aGVuIGEg YmF0Y2ggaGFzIG9uZSBvciBtb3JlIG1hdGNoaW5nIGl0ZW1zIHRvIHJldHVybiB1c2luZworICog YW1nZXRiYXRjaCAob3IgZm9yIGFtZ2V0Yml0bWFwIHRvIGxvYWQgaW50byBpdHMgYml0bWFwIG9m IG1hdGNoaW5nIFRJRHMpLgorICogV2hlbiBhbiBpbmRleCBwYWdlIGhhcyBubyBtYXRjaGVzLCBp dCdzIGFsd2F5cyBzYWZlIGZvciBpbmRleCBBTXMgdG8gZHJvcAorICogYm90aCB0aGUgbG9jayBh bmQgdGhlIHBpbiBmb3IgdGhlbXNlbHZlcy4KKyAqCisgKiBOb3RlOiBJdCBpcyBjb252ZW5pZW50 IGZvciBpbmRleCBBTXMgdGhhdCBpbXBsZW1lbnQgYm90aCBhbWdldGJhdGNoIGFuZAorICogYW1n ZXRiaXRtYXAgdG8gY29uc2lzdGVudGx5IHVzZSB0aGUgc2FtZSBiYXRjaCBtYW5hZ2VtZW50IGFw cHJvYWNoLCBzaW5jZQorICogdGhhdCBhdm9pZHMgaW50cm9kdWNpbmcgc3BlY2lhbCBjYXNlcyB0 byBsb3dlci1sZXZlbCBjb2RlLiAgV2UgZHJvcCBib3RoCisgKiB0aGUgbG9jayBhbmQgdGhlIHBp biBvbiBiYXRjaCdzIHBhZ2Ugb24gYmVoYWxmIG9mIGFtZ2V0Yml0bWFwIGNhbGxlcnMuCisgKgor ICogRm9yIGFtZ2V0YmF0Y2ggY2FsbGVycywgd2hlbiBiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgaXMg c2V0IChwbGFpbiBNVkNDCisgKiBzY2FucyksIHdlIGFsc28gcmVsZWFzZSB0aGUgcGluIGhlcmUg KHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jaykuICBUaGUKKyAqIGJhdGNoIHdpbGwgYmUgbWFy a2VkICJ1bmd1YXJkZWQiLCBwcmV2ZW50aW5nIHRoZSB0YWJsZSBBTSBmcm9tIHNwdXJpb3VzbHkK KyAqIGNhbGxpbmcgYW11bmd1YXJkYmF0Y2ggbGF0ZXIgb24uCisgKgorICogSW5kZXggQU1zIHdo b3NlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIGlzIG5vdCBqdXN0IGEgYnVmZmVyIHBpbiwgb3Ig d2hvc2UKKyAqIGFtdW5ndWFyZGJhdGNoIGRvZXMgbm90IHNpbXBseSByZWxlYXNlIGEgcGluLCBh cmUgbm90IG9ibGlnYXRlZCB0byB1c2UgdGhpcworICogZnVuY3Rpb24uICBUaGV5IGNhbiBpbXBs ZW1lbnQgdGhlaXIgb3duIGVxdWl2YWxlbnQuICBTdWNoIGluZGV4IEFNcyBhcmUgYWxzbworICog ZnJlZSB0byB1c2UgdGhlIGJhdGNoIExTTiBmaWVsZCB0aGVtc2VsdmVzOyB0aGVpciBhbWtpbGxp dGVtc2JhdGNoIHJvdXRpbmUKKyAqIGNhbiB1c2UgdGhhdCBMU04gaW4gdGhlIHVzdWFsIHdheSwg b3IgaW4gd2hhdGV2ZXIgd2F5IHRoZSBBTSBkZWVtcyBuZWNlc3NhcnkKKyAqIChjb3JlIGNvZGUg d2lsbCBub3QgdXNlIGl0IGZvciBhbnkgb3RoZXIgcHVycG9zZSkuCisgKi8KK3ZvaWQKK2luZGV4 YW1fdXRpbF91bmxvY2tfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCwgQnVmZmVyIGJ1ZikKK3sKKwkvKiBiYXRjaCBtdXN0IGhhdmUgb25lIG9yIG1vcmUgbWF0 Y2hpbmcgaXRlbXMgcmV0dXJuZWQgYnkgaW5kZXggQU0gKi8KKwlBc3NlcnQoYmF0Y2gtPmZpcnN0 SXRlbSA+PSAwICYmIGJhdGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKworCWlm IChzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQkvKiBhbWdldGJhdGNoIChub3QgYW1nZXRiaXRt YXApIGNhbGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOworCisJ CS8qCisJCSAqIEhhdmUgdG8gc2V0IGJhdGNoLT5sc24gc28gdGhhdCBhbWtpbGxpdGVtc2JhdGNo IGNhbGxiYWNrIGhhcyBhIHdheQorCQkgKiB0byBkZXRlY3Qgd2hlbiBjb25jdXJyZW50IHRhYmxl IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUKKwkJICogdGFrZW4gcGxhY2UuICBJ dCdsbCBvbmx5IGJlIHNhZmUgZm9yIGFta2lsbGl0ZW1zYmF0Y2ggdG8gc2V0IGluZGV4CisJCSAq IHR1cGxlIExQX0RFQUQgYml0cyB3aGVuIHRoZSBwYWdlIExTTiBoYXNuJ3QgYWR2YW5jZWQgYmV0 d2VlbiB0aGVuCisJCSAqIGFuZCBub3cuCisJCSAqLworCQliYXRjaC0+bHNuID0gQnVmZmVyR2V0 TFNOQXRvbWljKGJ1Zik7CisKKwkJLyoKKwkJICogRHJvcCB0aGUgcGluIGhlcmUgZHVyaW5nIHNj YW5zIHRoYXQgZG9uJ3QgcmVxdWlyZSBhbiBleHBsaWNpdCBUSUQKKwkJICogcmVjeWNsaW5nIGlu dGVybG9jayAoYSBwaW4gd2lsbCBibG9jayBjbGVhbnVwIGxvY2sgYWNxdWlzaXRpb24gYnkKKwkJ ICogaW5kZXggdmFjdXVtaW5nKQorCQkgKi8KKwkJaWYgKHNjYW4tPmJhdGNoSW1tZWRpYXRlVW5n dWFyZCkKKwkJeworCQkJLyogZHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluICovCisJCQlV bmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJCQliYXRjaC0+aXNHdWFyZGVkID0gZmFsc2U7CS8q IHdvbid0IGNhbGwgYW11bmd1YXJkYmF0Y2ggKi8KKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJ CQkgKiBqdXN0IGRyb3AgdGhlIGxvY2s7IGluZGV4IEFNJ3MgYW11bmd1YXJkYmF0Y2ggY2FsbGJh Y2sgd2lsbCBiZQorCQkJICogY2FsbGVkIHRvIGRyb3AgdGhlIHBpbiBsYXRlciBvbiwgd2hlbiB0 aGUgdGFibGUgQU0gZGV0ZXJtaW5lcworCQkJICogdGhhdCBpdCBpcyBzYWZlIHRvIGRvIHNvCisJ CQkgKi8KKwkJCVVubG9ja0J1ZmZlcihidWYpOworCQkJYmF0Y2gtPmlzR3VhcmRlZCA9IHRydWU7 CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiaXRtYXAgKG5vdCBhbWdldGJhdGNoKSBj YWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiA9PSBOVUxMKTsKKworCQkvKgor CQkgKiBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKGFtdW5ndWFyZGJhdGNoIGlzIG5l dmVyIGNhbGxlZAorCQkgKiBkdXJpbmcgYml0bWFwIGluZGV4IHNjYW5zKQorCQkgKi8KKwkJVW5s b2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCX0KK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGJh dGNoCisgKgorICogVXNlZCBieSBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IGFtZ2V0YmF0Y2ggaW50 ZXJmYWNlIChib3RoIGR1cmluZyBhbWdldGJhdGNoCisgKiBhbmQgYW1nZXRiaXRtYXAgc2NhbnMp LgorICoKKyAqIFJldHVybnMgSW5kZXhTY2FuQmF0Y2ggd2l0aCBzcGFjZSB0byBmaXQgc2Nhbi0+ bWF4aXRlbXNiYXRjaC1tYW55CisgKiBCYXRjaE1hdGNoaW5nSXRlbSBlbnRyaWVzLiAgVGhpcyB3 aWxsIGVpdGhlciBiZSBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaCwgb3IKKyAqIGEgYmF0Y2ggcmVj eWNsZWQgZnJvbSB0aGUgY2FjaGUgbWFuYWdlZCBieSBpbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRj aC4gIFNlZQorICogY29tbWVudHMgYWJvdmUgaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2guCisg KgorICogSG91c2VrZWVwaW5nIGZpZWxkcyAoYnVmLCBrbm93bkVuZEJhY2t3YXJkL0ZvcndhcmQs IGZpcnN0SXRlbSwgbGFzdEl0ZW0sCisgKiBudW1EZWFkLCBkZWFkSXRlbXMsIGN1cnJUdXBsZXMp IGFyZSBpbml0aWFsaXplZCBoZXJlLiAgVGhlIHRhYmxlIEFNJ3MKKyAqIGJhdGNoX2luaXQgY2Fs bGJhY2sgaXMgaW52b2tlZCBoZXJlIHRvIGluaXRpYWxpemUgdGhlIHRhYmxlIEFNIG9wYXF1ZSBh cmVhLgorICogVGhlIGluZGV4IEFNIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZmlsbGluZyBp biBpdHMgcGVyLWJhdGNoIG9wYXF1ZQorICogZmllbGRzIGFuZCB0aGUgbWF0Y2hpbmcgaXRlbXNb XSBhcnJheS4KKyAqCisgKiBPbmNlIHRoZSBiYXRjaCBoYXMgdGhlIHJlcXVpcmVkIG1hdGNoaW5n IGl0ZW1zLCBjYWxsZXIgc2hvdWxkIGdlbmVyYWxseQorICogcGFzcyBpdCB0byBpbmRleGFtX3V0 aWxfdW5sb2NrX2JhdGNoLCBhaGVhZCBvZiBpdCBiZWluZyByZXR1cm5lZCB0aHJvdWdoCisgKiBp bmRleCBBTSdzIGFtZ2V0YmF0Y2ggcm91dGluZS4gIElmIGl0IHR1cm5zIG91dCB0aGF0IHRoZSBi YXRjaCB3b24ndCBuZWVkCisgKiB0byBiZSByZXR1cm5lZCBsaWtlIHRoaXMgKGUuZy4sIGR1ZSB0 byB0aGUgc2NhbiBoYXZpbmcgbm8gbW9yZSBtYXRjaGVzKSwKKyAqIGNhbGxlciBzaG91bGQgcGFz cyBpdHMgZW1wdHkvdW51c2VkIGJhdGNoIHRvIGluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoLgor ICovCitJbmRleFNjYW5CYXRjaAoraW5kZXhhbV91dGlsX2FsbG9jX2JhdGNoKEluZGV4U2NhbkRl c2Mgc2NhbikKK3sKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IE5VTEw7CisKKwkvKiBJbmRleCBB TSBtdXN0IGhhdmUgc2V0IGl0cyBvcGFxdWUgc3BhY2UgdG8gc29tZXRoaW5nIGFscmVhZHkgKi8K KwlBc3NlcnQoc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRpYyA+IDApOworCisJLyogRmly c3QgbG9vayBmb3IgYW4gZXhpc3RpbmcgYmF0Y2ggZnJvbSB0aGUgY2FjaGUgKi8KKwlpZiAoc2Nh bi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NB Q0hFX0JBVENIRVM7IGkrKykKKwkJeworCQkJaWYgKHNjYW4tPmJhdGNoY2FjaGVbaV0gIT0gTlVM TCkKKwkJCXsKKwkJCQkvKiBSZXR1cm4gY2FjaGVkIHVucmVmZXJlbmNlZCBiYXRjaCAqLworCQkJ CWJhdGNoID0gc2Nhbi0+YmF0Y2hjYWNoZVtpXTsKKwkJCQlzY2FuLT5iYXRjaGNhY2hlW2ldID0g TlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwllbHNlIGlmIChzY2FuLT5iYXRjaGNh Y2hlWzBdICE9IE5VTEwpCisJeworCQkvKgorCQkgKiBSZXVzZSBjYWNoZWQgYmF0Y2ggZnJvbSBw cmlvciBhbWdldGJpdG1hcCBpdGVyYXRpb24uICBUaGlzIHBhdGggaXMKKwkJICogaGl0IG9uIGV2 ZXJ5IGFtZ2V0Yml0bWFwIGNhbGwgaGVyZSBhZnRlciB0aGUgc2NhbidzIGZpcnN0LgorCQkgKi8K KwkJYmF0Y2ggPSBzY2FuLT5iYXRjaGNhY2hlWzBdOworCQlzY2FuLT5iYXRjaGNhY2hlWzBdID0g TlVMTDsKKwl9CisKKwlpZiAoIWJhdGNoKQorCXsKKwkJc2l6ZV90CQlvcGFxdWVfYXJlYXNfcHJl Zml4X3N6LAorCQkJCQliYXNlX3N6LAorCQkJCQlpb3NfdG90YWxfdHJhaWxpbmdfc3osCisJCQkJ CWFsbG9jc3o7CisJCWNoYXIJICAgKnJhd19iYXRjaF9hbGxvYzsKKworCQkvKgorCQkgKiBMYXpp bHkgY29tcHV0ZSBiYXRjaF9iYXNlX29mZnNldCBvbiBmaXJzdCBjYWxsIGhlcmUgZm9yIHNjYW4u CisJCSAqCisJCSAqIFRoaXMgY29tYmluZXMgdGhlIHRhYmxlIEFNIG9wYXF1ZSBhcmVhIChpdHMg Zml4ZWQtc2l6ZSBoZWFkZXIgcGx1cworCQkgKiBhbnkgcGVyLWl0ZW0gYXJlYSB1c2VkIGR1cmlu ZyBpbmRleC1vbmx5IHNjYW5zKSBhbmQgdGhlIGluZGV4IEFNJ3MKKwkJICogc3RhdGljIG9wYXF1 ZSBhcmVhIGludG8gYSBzaW5nbGUgb2Zmc2V0IHVzZWQgdG8gZmluZCB0aGUgdHJ1ZQorCQkgKiBh bGxvY2F0aW9uIGJhc2UgZnJvbSB0aGUgYmF0Y2ggcG9pbnRlci4gIChUaGlzIGlzIGFsc28gd2hl cmUgdGhlCisJCSAqIGZpeGVkLXNpemUgdGFibGUgQU0gb3BhcXVlIGFyZWEgY2FuIGJlIGZvdW5k LikKKwkJICovCisJCWlmIChzY2FuLT5iYXRjaF9iYXNlX29mZnNldCA9PSAwKQorCQl7CisJCQlT aXplCQl0YWJsZV9hcmVhID0gMDsKKworCQkJLyoKKwkJCSAqIFRoZSB0YWJsZSBBTSBvcGFxdWUg YXJlYSBpcyBhIHNpbmdsZSBjb250aWd1b3VzIGJsb2NrOiBhCisJCQkgKiBmaXhlZC1zaXplIGhl YWRlciAoYmF0Y2hfb3BhcXVlX3NpemUgYnl0ZXMpIGltbWVkaWF0ZWx5CisJCQkgKiBmb2xsb3dl ZCBieSBhIHBlci1pdGVtIGFyZWEgKGJhdGNoX3Blcl9pdGVtX3NpemUgYnl0ZXMgcGVyCisJCQkg KiBiYXRjaCBpdGVtKS4KKwkJCSAqCisJCQkgKiBXZSBkZWxpYmVyYXRlbHkgTUFYQUxJR04gb25s eSB0aGUgY29tYmluZWQgc2l6ZSwgbmV2ZXIgdGhlCisJCQkgKiBoZWFkZXIgb3IgdGhlIHBlci1p dGVtIGFyZWEgaW5kaXZpZHVhbGx5LiAgVGhpcyBsZXRzIHRoZSB0YWJsZQorCQkJICogQU0gbGF5 IG91dCB0aGUgd2hvbGUgYXJlYSBhcyBhIHNpbmdsZSBDIHN0cnVjdCB3aXRoIGEgZmxleGlibGUK KwkJCSAqIGFycmF5IG1lbWJlciBmb3IgaXRzIHBlci1pdGVtIGRhdGEuICBJdCBhbHNvIGFsbG93 cyB0YWJsZSBBTXMKKwkJCSAqIHRvIG5vdCB1c2UgYSBwZXItaXRlbSBhcmVhIGF0IGFsbCwgYnV0 IHN0aWxsIHVzZSBhIGZpeGVkLXNpemUKKwkJCSAqIHN0cnVjdC4KKwkJCSAqLworCQkJaWYgKHNj YW4tPnVzZWJhdGNocmluZykKKwkJCQl0YWJsZV9hcmVhID0gTUFYQUxJR04oc2Nhbi0+YmF0Y2hf b3BhcXVlX3NpemUgKworCQkJCQkJCQkJICAoU2l6ZSkgc2Nhbi0+YmF0Y2hfcGVyX2l0ZW1fc2l6 ZSAqCisJCQkJCQkJCQkgIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCisKKwkJCXNjYW4tPmJhdGNo X2Jhc2Vfb2Zmc2V0ID0gdGFibGVfYXJlYSArCisJCQkJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVl X3N0YXRpYzsKKwkJfQorCisJCS8qCisJCSAqIFN1YnRvdGFsICMxOiB0aGUgc2l6ZSBvZiBib3Ro IEFNIG9wYXF1ZSBhcmVhcyAodGhlIHRhYmxlIEFNJ3MKKwkJICogaGVhZGVyIHBsdXMgaXRzIHBl ci1pdGVtIGFyZWEsIGFuZCB0aGUgaW5kZXggQU0ncyBhcmVhKSBsb2NhdGVkCisJCSAqIGJlZm9y ZSB0aGUgc3RhcnQgb2YgSW5kZXhTY2FuQmF0Y2hEYXRhCisJCSAqLworCQlvcGFxdWVfYXJlYXNf cHJlZml4X3N6ID0gc2Nhbi0+YmF0Y2hfYmFzZV9vZmZzZXQ7CisJCUFzc2VydChvcGFxdWVfYXJl YXNfcHJlZml4X3N6ID09IE1BWEFMSUdOKG9wYXF1ZV9hcmVhc19wcmVmaXhfc3opKTsKKworCQkv KiBTdWJ0b3RhbCAjMjogSW5kZXhTY2FuQmF0Y2hEYXRhIGFuZCBpdHMgaXRlbXNbbWF4aXRlbXNi YXRjaF0gKi8KKwkJYmFzZV9zeiA9IE1BWEFMSUdOKG9mZnNldG9mKEluZGV4U2NhbkJhdGNoRGF0 YSwgaXRlbXMpICsKKwkJCQkJCSAgIHNpemVvZihCYXRjaE1hdGNoaW5nSXRlbSkgKiBzY2FuLT5t YXhpdGVtc2JhdGNoKTsKKworCQkvKgorCQkgKiBTdWJ0b3RhbCAjMzogdGhlIGN1cnJUdXBsZXMg d29ya3NwYWNlIHRoYXQgY29tZXMgYWZ0ZXIgaXRlbXNbXSwKKwkJICogd2hlcmUgdGhlIGluZGV4 IEFNIHN0b3JlcyBpbmRleCB0dXBsZXMgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMKKwkJICovCisJ CWlvc190b3RhbF90cmFpbGluZ19zeiA9IDA7CisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJ CXsKKwkJCWlvc190b3RhbF90cmFpbGluZ19zeiA9IHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3Bh Y2U7CisJCQlwZ19hc3N1bWUoaW9zX3RvdGFsX3RyYWlsaW5nX3N6ID4gMCk7CisJCQlBc3NlcnQo aW9zX3RvdGFsX3RyYWlsaW5nX3N6ID09IE1BWEFMSUdOKGlvc190b3RhbF90cmFpbGluZ19zeikp OworCQl9CisKKwkJLyogVG90YWwgYmF0Y2ggYWxsb2NhdGlvbiBzaXplIGlzIHRoZSBzdW0gb2Yg b3VyIHRocmVlIHN1YnRvdGFscyAqLworCQlhbGxvY3N6ID0gb3BhcXVlX2FyZWFzX3ByZWZpeF9z eiArIGJhc2Vfc3ogKyBpb3NfdG90YWxfdHJhaWxpbmdfc3o7CisJCXJhd19iYXRjaF9hbGxvYyA9 IHBhbGxvYyhhbGxvY3N6KTsKKwkJYmF0Y2ggPSAoSW5kZXhTY2FuQmF0Y2gpIChyYXdfYmF0Y2hf YWxsb2MgKyBvcGFxdWVfYXJlYXNfcHJlZml4X3N6KTsKKwkJQXNzZXJ0KGluZGV4X3NjYW5fYmF0 Y2hfYmFzZShzY2FuLCBiYXRjaCkgPT0gcmF3X2JhdGNoX2FsbG9jKTsKKworCQkvKiBjdXJyVHVw bGVzIChpZiBhbnkpIGlzIGRpcmVjdGx5IGFmdGVyIGl0ZW1zW10gKi8KKwkJYmF0Y2gtPmN1cnJU dXBsZXMgPSBOVUxMOworCQlpZiAoaW9zX3RvdGFsX3RyYWlsaW5nX3N6KQorCQkJYmF0Y2gtPmN1 cnJUdXBsZXMgPSAoY2hhciAqKSBiYXRjaCArIGJhc2Vfc3o7CisJCUFzc2VydCghc2Nhbi0+eHNf d2FudF9pdHVwIHx8IGJhdGNoLT5jdXJyVHVwbGVzICE9IE5VTEwpOworCisJCS8qCisJCSAqIEJh dGNoZXMgZ2V0IHRoZWlyIG93biBwYWxsb2MnZCBkZWFkSXRlbXMgYXMgbmVlZGVkICh0aG91Z2gg Y2FjaGVkCisJCSAqIGJhdGNoZXMga2VlcCB0aGVpciBkZWFkSXRlbXMgYWxsb2NhdGlvbiB3aGVu IHJlY3ljbGVkKQorCQkgKi8KKwkJYmF0Y2gtPmRlYWRJdGVtcyA9IE5VTEw7CisJfQorCisJLyog V2UgaGFkIGJldHRlciBoYXZlIGNvbXB1dGVkIGJhdGNoX2Jhc2Vfb2Zmc2V0IGJ5IG5vdyAqLwor CUFzc2VydChzY2FuLT5iYXRjaF9iYXNlX29mZnNldCA+IDApOworCisJLyoKKwkgKiBMZXQgdGhl IHRhYmxlIEFNIGluaXRpYWxpemUgaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSwgYnV0IG9ubHkg d2hlbiBpdAorCSAqIHJlc2VydmVkIG9uZSBmb3IgdGhpcyBzY2FuOiBhIGZpeGVkLXNpemUgaGVh ZGVyIChiYXRjaF9vcGFxdWVfc2l6ZSksIG9yCisJICogYSBwZXItaXRlbSBhcmVhIChiYXRjaF9w ZXJfaXRlbV9zaXplKS4gIFVubGlrZSBpbmRleCBBTXMsIHRhYmxlIEFNcworCSAqIGRvbid0IGhh dmUgdG8gcHJvdmlkZSBhbnkgb3BhcXVlIGRhdGEgKGJpdG1hcCBpbmRleCBzY2FucyB0aGF0IHJl dXNlCisJICogdGhlIGJhdGNoIGluZnJhc3RydWN0dXJlIHNpbWlsYXJseSBuZXZlciB1c2Ugb25l LCBzaW5jZSB0aGUgdGFibGUgQU0KKwkgKiBpc24ndCBkaXJlY3RseSBpbnZvbHZlZCkuCisJICov CisJaWYgKHNjYW4tPnVzZWJhdGNocmluZyAmJgorCQkoc2Nhbi0+YmF0Y2hfb3BhcXVlX3NpemUg PiAwIHx8IHNjYW4tPmJhdGNoX3Blcl9pdGVtX3NpemUgPiAwKSkKKwkJdGFibGVfaW5kZXhfZmV0 Y2hfYmF0Y2hfaW5pdChzY2FuLCBiYXRjaCk7CisKKwkvKiBzaGFyZWQgaW5pdGlhbGl6YXRpb24g Ki8KKwliYXRjaC0+a25vd25FbmRCYWNrd2FyZCA9IGZhbHNlOworCWJhdGNoLT5rbm93bkVuZEZv cndhcmQgPSBmYWxzZTsKKwliYXRjaC0+aXNHdWFyZGVkID0gZmFsc2U7CisJYmF0Y2gtPmZpcnN0 SXRlbSA9IC0xOworCWJhdGNoLT5sYXN0SXRlbSA9IC0xOworCWJhdGNoLT5udW1EZWFkID0gMDsK KworCXJldHVybiBiYXRjaDsKK30KKworLyoKKyAqIFJlbGVhc2UgYWxsb2NhdGVkIGJhdGNoCisg KgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaW5kZXggQU1zIHRvIHJlbGVhc2UgYSBi YXRjaCBhbGxvY2F0ZWQgYnkKKyAqIGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaC4gIEJhdGNoZXMg YXJlIGNhY2hlZCBoZXJlIGZvciByZXVzZSB0byByZWR1Y2UKKyAqIHBhbGxvYy9wZnJlZSBvdmVy aGVhZC4KKyAqCisgKiBJdCdzIHNhZmUgdG8gcmVsZWFzZSBhIGJhdGNoIGltbWVkaWF0ZWx5IHdo ZW4gaXQgd2FzIHVzZWQgdG8gcmVhZCBhIHBhZ2UKKyAqIHRoYXQgcmV0dXJuZWQgbm8gbWF0Y2hl cyB0byB0aGUgc2Nhbi4gIEJhdGNoZXMgYWN0dWFsbHkgcmV0dXJuZWQgYnkgaW5kZXgKKyAqIEFN J3MgYW1nZXRiYXRjaCByb3V0aW5lIChpLmUuIGJhdGNoZXMgZm9yIHBhZ2VzIHdpdGggb25lIG9y IG1vcmUgbWF0Y2hlcykKKyAqIG11c3QgYmUgcmVsZWFzZWQgYnkgdGFibGVhbV91dGlsX3JlbGVh c2VfYmF0Y2gsIHdoaWNoIGNhbGxzIGhlcmUgYWZ0ZXIgdGhlCisgKiBpbmRleCBBTSdzIGFta2ls bGl0ZW1zYmF0Y2ggcm91dGluZSAoaWYgYW55KS4gIEluZGV4IEFNcyB0aGF0IHVzZSBiYXRjaGVz CisgKiBzaG91bGQgY2FsbCBoZXJlIHRvIHJlbGVhc2UgYSBiYXRjaCBmcm9tIHRoZWlyIGFtZ2V0 YmF0Y2ggb3IgYW1nZXRiaXRtYXAKKyAqIHJvdXRpbmVzLgorICoKKyAqIFRoZSBydWxlcyBmb3Ig YmF0Y2ggb3duZXJzaGlwIGRpZmZlciBzbGlnaHRseSBmb3IgYW1nZXRiaXRtYXAgc2NhbnM7IHNl ZQorICogdGhlIGFtZ2V0Yml0bWFwIGRvY3VtZW50YXRpb24gaW4gZG9jL3NyYy9zZ21sL2luZGV4 YW0uc2dtbCBmb3IgZGV0YWlscy4KKyAqLwordm9pZAoraW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0 Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlpZiAoIXNj YW4tPnVzZWJhdGNocmluZykKKwl7CisJCS8qCisJCSAqIGFtZ2V0Yml0bWFwIHNjYW4gY2FsbGVy LgorCQkgKgorCQkgKiBhbWdldGJpdG1hcCByb3V0aW5lcyBhcmUgcmVxdWlyZWQgdG8gYWxsb2Nh dGUgbm8gbW9yZSB0aGFuIG9uZQorCQkgKiBiYXRjaCBhdCBhIHRpbWUsIHNvIHdlJ2xsIGFsd2F5 cyBoYXZlIGEgZnJlZSBzbG90LgorCQkgKi8KKwkJQXNzZXJ0KHNjYW4tPmJhdGNoY2FjaGVbMF0g PT0gTlVMTCk7CisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CisJCUFzc2Vy dChiYXRjaC0+ZGVhZEl0ZW1zID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPmN1cnJUdXBsZXMg PT0gTlVMTCk7CisKKwkJc2Nhbi0+YmF0Y2hjYWNoZVswXSA9IGJhdGNoOworCQlyZXR1cm47CisJ fQorCisJLyogYW1nZXRiYXRjaCBzY2FuIGNhbGxlciAqLworCUFzc2VydChzY2FuLT5oZWFwUmVs YXRpb24gIT0gTlVMTCk7CisKKwkvKgorCSAqIFRyeSB0byBzdG9yZSBjYWxsZXIncyBiYXRjaCBp biB0aGlzIGFtZ2V0YmF0Y2ggc2NhbidzIGNhY2hlIG9mCisJICogcHJldmlvdXNseSByZWxlYXNl ZCBiYXRjaGVzIGZpcnN0CisJICovCisJaWYgKGJhdGNoX2NhY2hlX3N0b3JlKHNjYW4sIGJhdGNo KSkKKwkJcmV0dXJuOworCisJLyogQ2FjaGUgZnVsbDsganVzdCBmcmVlIHRoZSBjYWxsZXIncyBi YXRjaCAqLworCWlmIChiYXRjaC0+ZGVhZEl0ZW1zKQorCQlwZnJlZShiYXRjaC0+ZGVhZEl0ZW1z KTsKKwlwZnJlZShpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2NhbiwgYmF0Y2gpKTsKK30KKworLyoK KyAqIFRyeSB0byBzdG9yZSBhIGJhdGNoIGluIHRoZSBzY2FuJ3MgYmF0Y2ggY2FjaGUuCisgKgor ICogUmV0dXJucyB0cnVlIGlmIGEgZnJlZSBzbG90IHdhcyBmb3VuZCwgZmFsc2UgaWYgdGhlIGNh Y2hlIGlzIGZ1bGwuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorYmF0Y2hfY2FjaGVfc3RvcmUo SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlmb3IgKGludCBp ID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJaWYgKHNjYW4t PmJhdGNoY2FjaGVbaV0gPT0gTlVMTCkKKwkJeworCQkJc2Nhbi0+YmF0Y2hjYWNoZVtpXSA9IGJh dGNoOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8q CisgKiBxc29ydCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBpbnQgYXJyYXlzCisgKi8KK3N0YXRp YyBpbnQKK2JhdGNoX2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikK K3sKKwlpbnQJCQlhID0gKigoY29uc3QgaW50ICopIHZhKTsKKwlpbnQJCQliID0gKigoY29uc3Qg aW50ICopIHZiKTsKKworCXJldHVybiBwZ19jbXBfczMyKGEsIGIpOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L21lc29uLmJ1aWxkCmluZGV4IGRhNjRjYjU5NS4uODNkZmEzZjJiIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCkBAIC01LDQgKzUsNSBAQCBiYWNrZW5kX3NvdXJjZXMg Kz0gZmlsZXMoCiAgICdhbXZhbGlkYXRlLmMnLAogICAnZ2VuYW0uYycsCiAgICdpbmRleGFtLmMn LAorICAnaW5kZXhiYXRjaC5jJywKICkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvUkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggY2I5 MjFjYTJlLi5hMzc4NjliNzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv UkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC0xNzksMTgg KzE3OSwxNSBAQCBob2xkIG9uIHRvIHRoZSBwaW4gKHVzZWQgd2hlbiByZWFkaW5nIGZyb20gdGhl IGxlYWYgcGFnZSkgdW50aWwgX2FmdGVyXwogdGhleSdyZSBkb25lIHZpc2l0aW5nIHRoZSBoZWFw IChmb3IgVElEcyBmcm9tIHBpbm5lZCBsZWFmIHBhZ2UpIHByZXZlbnRzCiBjb25jdXJyZW50IFRJ RCByZWN5Y2xpbmcuICBWQUNVVU0gY2Fubm90IGdldCBhIGNvbmZsaWN0aW5nIGNsZWFudXAgbG9j awogdW50aWwgdGhlIGluZGV4IHNjYW4gaXMgdG90YWxseSBmaW5pc2hlZCBwcm9jZXNzaW5nIGl0 cyBsZWFmIHBhZ2UuCitUaGlzIGlzIHJlcXVpcmVkIGJ5IGFueSBpbmRleCBBTSB0aGF0IGltcGxl bWVudHMgdGhlIGFtZ2V0YmF0Y2gKK2ludGVyZmFjZS4gIChTZWUgYWxzbywgZG9jL3NyYy9zZ21s L2luZGV4YW0uc2dtbCkuCiAKLVRoaXMgYXBwcm9hY2ggaXMgZmFpcmx5IGNvYXJzZSwgc28gd2Ug YXZvaWQgaXQgd2hlbmV2ZXIgcG9zc2libGUuICBJbgotcHJhY3RpY2UgbW9zdCBpbmRleCBzY2Fu cyB3b24ndCBob2xkIG9udG8gdGhlaXIgcGluLCBhbmQgc28gd29uJ3QgYmxvY2sKLVZBQ1VVTS4g IFRoZXNlIGluZGV4IHNjYW5zIG11c3QgZGVhbCB3aXRoIFRJRCByZWN5Y2xpbmcgZGlyZWN0bHks IHdoaWNoIGlzCi1tb3JlIGNvbXBsaWNhdGVkIGFuZCBub3QgYWx3YXlzIHBvc3NpYmxlLiAgU2Vl IGxhdGVyIHNlY3Rpb24gb24gbWFraW5nCi1jb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZS4K LQotT3Bwb3J0dW5pc3RpYyBpbmRleCB0dXBsZSBkZWxldGlvbiBwZXJmb3JtcyBhbG1vc3QgdGhl IHNhbWUgcGFnZS1sZXZlbAotbW9kaWZpY2F0aW9ucyB3aGlsZSBvbmx5IGhvbGRpbmcgYW4gZXhj bHVzaXZlIGxvY2suICBUaGlzIGlzIHNhZmUgYmVjYXVzZQotdGhlcmUgaXMgbm8gcXVlc3Rpb24g b2YgVElEIHJlY3ljbGluZyB0YWtpbmcgcGxhY2UgbGF0ZXIgb24gLS0gb25seSBWQUNVVU0KLWNh biBtYWtlIFRJRHMgcmVjeWNsYWJsZS4gIFNlZSBhbHNvIHNpbXBsZSBkZWxldGlvbiBhbmQgYm90 dG9tLXVwCi1kZWxldGlvbiwgYmVsb3cuCitPcHBvcnR1bmlzdGljIGluZGV4IHR1cGxlIGRlbGV0 aW9uIHBlcmZvcm1zIHRoZSBzYW1lIHBhZ2UtbGV2ZWwKK21vZGlmaWNhdGlvbnMgYXMgVkFDVVVN LCB3aGlsZSBvbmx5IGhvbGRpbmcgYW4gZXhjbHVzaXZlIGxvY2suICBUaGlzIGlzCitzYWZlIGJl Y2F1c2UgdGhlcmUgaXMgbm8gcXVlc3Rpb24gb2YgVElEIHJlY3ljbGluZyB0YWtpbmcgcGxhY2Ug LS0gb25seQorVkFDVVVNIGNhbiBtYWtlIFRJRHMgcmVjeWNsYWJsZS4gIEluIG90aGVyIHdvcmRz LCBWQUNVVU0ncyBjbGVhbnVwIGxvY2sKK3NlcnZlcyB0byBwcm90ZWN0IG5vbi1NVkNDIHNuYXBz aG90IHNjYW5zIGZyb20gY29uY3VycmVudCBUSUQgcmVjeWNsaW5nCitoYXphcmRzOyBpdCBkb2Vz bid0IHByb3RlY3QgdGhlIEItVHJlZSBzdHJ1Y3R1cmUgaXRzZWxmLgogCiBCZWNhdXNlIGEgcGlu IGlzIG5vdCBhbHdheXMgaGVsZCwgYW5kIGEgcGFnZSBjYW4gYmUgc3BsaXQgZXZlbiB3aGlsZQog c29tZW9uZSBkb2VzIGhvbGQgYSBwaW4gb24gaXQsIGl0IGlzIHBvc3NpYmxlIHRoYXQgYW4gaW5k ZXhzY2FuIHdpbGwKQEAgLTQ0MCw1NCArNDM3LDYgQEAgd2hlbmV2ZXIgaXQgaXMgc3Vic2VxdWVu dGx5IHRha2VuIGZyb20gdGhlIEZTTSBmb3IgcmV1c2UuICBUaGUgZGVsZXRlZAogcGFnZSdzIGNv bnRlbnRzIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIHNwbGl0IG9wZXJhdGlvbiAoaXQgd2ls bCBiZWNvbWUKIHRoZSBuZXcgcmlnaHQgc2libGluZyBwYWdlKS4KIAotTWFraW5nIGNvbmN1cnJl bnQgVElEIHJlY3ljbGluZyBzYWZlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLQotQXMgZXhwbGFpbmVkIGluIHRoZSBlYXJsaWVyIHNlY3Rpb24gYWJvdXQgZGVsZXRpbmcg aW5kZXggdHVwbGVzIGR1cmluZwotVkFDVVVNLCB3ZSBpbXBsZW1lbnQgYSBsb2NraW5nIHByb3Rv Y29sIHRoYXQgYWxsb3dzIGluZGl2aWR1YWwgaW5kZXggc2NhbnMKLXRvIGF2b2lkIGNvbmN1cnJl bnQgVElEIHJlY3ljbGluZy4gIEluZGV4IHNjYW5zIG9wdC1vdXQgKGFuZCBzbyBkcm9wIHRoZWly Ci1sZWFmIHBhZ2UgcGluIHdoZW4gdmlzaXRpbmcgdGhlIGhlYXApIHdoZW5ldmVyIGl0J3Mgc2Fm ZSB0byBkbyBzbywgdGhvdWdoLgotRHJvcHBpbmcgdGhlIHBpbiBlYXJseSBpcyB1c2VmdWwgYmVj YXVzZSBpdCBhdm9pZHMgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkKLVZBQ1VVTS4gIFRoaXMgaXMgcGFy dGljdWxhcmx5IGltcG9ydGFudCB3aXRoIGluZGV4IHNjYW5zIHVzZWQgYnkgY3Vyc29ycywKLXNp bmNlIGlkbGUgY3Vyc29ycyBzb21ldGltZXMgc3RvcCBmb3IgcmVsYXRpdmVseSBsb25nIHBlcmlv ZHMgb2YgdGltZS4gIEluCi1leHRyZW1lIGNhc2VzLCBhIGNsaWVudCBhcHBsaWNhdGlvbiBtYXkg aG9sZCBvbiB0byBhbiBpZGxlIGN1cnNvcnMgZm9yCi1ob3VycyBvciBldmVuIGRheXMuICBCbG9j a2luZyBWQUNVVU0gZm9yIHRoYXQgbG9uZyBjb3VsZCBiZSBkaXNhc3Ryb3VzLgotCi1JbmRleCBz Y2FucyB0aGF0IGRvbid0IGhvbGQgb24gdG8gYSBidWZmZXIgcGluIGFyZSBwcm90ZWN0ZWQgYnkg aG9sZGluZyBhbgotTVZDQyBzbmFwc2hvdCBpbnN0ZWFkLiAgVGhpcyBtb3JlIGxpbWl0ZWQgaW50 ZXJsb2NrIHByZXZlbnRzIHdyb25nIGFuc3dlcnMKLXRvIHF1ZXJpZXMsIGJ1dCBpdCBkb2VzIG5v dCBwcmV2ZW50IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBpdHNlbGYgKG9ubHkKLWhvbGRpbmcg b250byB0aGUgbGVhZiBwYWdlIHBpbiB3aGlsZSBhY2Nlc3NpbmcgdGhlIGhlYXAgZW5zdXJlcyB0 aGF0KS4KLQotSW5kZXgtb25seSBzY2FucyBjYW4gbmV2ZXIgZHJvcCB0aGVpciBidWZmZXIgcGlu LCBzaW5jZSB0aGV5IGFyZSB1bmFibGUgdG8KLXRvbGVyYXRlIGhhdmluZyBhIHJlZmVyZW5jZWQg VElEIGJlY29tZSByZWN5Y2xhYmxlLiAgSW5kZXgtb25seSBzY2FucwotdHlwaWNhbGx5IGp1c3Qg dmlzaXQgdGhlIHZpc2liaWxpdHkgbWFwIChub3QgdGhlIGhlYXAgcHJvcGVyKSwgYW5kIHNvIHdp bGwKLW5vdCByZWxpYWJseSBub3RpY2UgdGhhdCBhbnkgc3RhbGUgVElEIHJlZmVyZW5jZSAoZm9y IGEgVElEIHRoYXQgcG9pbnRlZAotdG8gYSBkZWFkLXRvLWFsbCBoZWFwIGl0ZW0gYXQgZmlyc3Qp IHdhcyBjb25jdXJyZW50bHkgbWFya2VkIExQX1VOVVNFRCBpbgotdGhlIGhlYXAgYnkgVkFDVVVN LiAgVGhpcyBjb3VsZCBlYXNpbHkgYWxsb3cgVkFDVVVNIHRvIHNldCB0aGUgd2hvbGUgaGVhcAot cGFnZSB0byBhbGwtdmlzaWJsZSBpbiB0aGUgdmlzaWJpbGl0eSBtYXAgaW1tZWRpYXRlbHkgYWZ0 ZXJ3YXJkcy4gIEFuIE1WQ0MKLXNuYXBzaG90IGlzIG9ubHkgc3VmZmljaWVudCB0byBhdm9pZCBw cm9ibGVtcyBkdXJpbmcgcGxhaW4gaW5kZXggc2NhbnMKLWJlY2F1c2UgdGhleSBtdXN0IGFjY2Vz cyBncmFudWxhciB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIGZyb20gdGhlIGhlYXAKLXByb3Blci4g IEEgcGxhaW4gaW5kZXggc2NhbiB3aWxsIGV2ZW4gcmVjb2duaXplIExQX1VOVVNFRCBpdGVtcyBp biB0aGUKLWhlYXAgKGl0ZW1zIHRoYXQgY291bGQgYmUgcmVjeWNsZWQgYnV0IGhhdmVuJ3QgYmVl biBqdXN0IHlldCkgYXMgIm5vdAotdmlzaWJsZSIgLS0gZXZlbiB3aGVuIHRoZSBoZWFwIHBhZ2Ug aXMgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgYWxsLXZpc2libGUuCi0KLUxQX0RFQUQgc2V0dGluZyBv ZiBpbmRleCB0dXBsZXMgYnkgdGhlIGtpbGxfcHJpb3JfdHVwbGUgb3B0aW1pemF0aW9uCi0oZGVz Y3JpYmVkIGluIGZ1bGwgaW4gc2ltcGxlIGRlbGV0aW9uLCBiZWxvdykgaXMgYWxzbyBtb3JlIGNv bXBsaWNhdGVkIGZvcgotaW5kZXggc2NhbnMgdGhhdCBkcm9wIHRoZWlyIGxlYWYgcGFnZSBwaW5z LiAgV2UgbXVzdCBiZSBjYXJlZnVsIHRvIGF2b2lkCi1MUF9ERUFELW1hcmtpbmcgYW55IG5ldyBp bmRleCB0dXBsZSB0aGF0IGxvb2tzIGxpa2UgYSBrbm93bi1kZWFkIGluZGV4Ci10dXBsZSBiZWNh dXNlIGl0IGhhcHBlbnMgdG8gc2hhcmUgdGhlIHNhbWUgVElELCBmb2xsb3dpbmcgY29uY3VycmVu dCBUSUQKLXJlY3ljbGluZy4gIEl0J3MganVzdCBhYm91dCBwb3NzaWJsZSB0aGF0IHNvbWUgb3Ro ZXIgc2Vzc2lvbiBpbnNlcnRlZCBhCi1uZXcsIHVucmVsYXRlZCBpbmRleCB0dXBsZSwgb24gdGhl IHNhbWUgbGVhZiBwYWdlLCB3aGljaCBoYXMgdGhlIHNhbWUKLW9yaWdpbmFsIFRJRC4gIEl0IHdv dWxkIGJlIHRvdGFsbHkgd3JvbmcgdG8gTFBfREVBRC1zZXQgdGhpcyBuZXcsCi11bnJlbGF0ZWQg aW5kZXggdHVwbGUuCi0KLVdlIGhhbmRsZSB0aGlzIGtpbGxfcHJpb3JfdHVwbGUgcmFjZSBjb25k aXRpb24gYnkgaGF2aW5nIGFmZmVjdGVkIGluZGV4Ci1zY2FucyBjb25zZXJ2YXRpdmVseSBhc3N1 bWUgdGhhdCBhbnkgY2hhbmdlIHRvIHRoZSBsZWFmIHBhZ2UgYXQgYWxsCi1pbXBsaWVzIHRoYXQg aXQgd2FzIHJlYWNoZWQgYnkgYnRidWxrZGVsZXRlIGluIHRoZSBpbnRlcmltIHBlcmlvZCB3aGVu IG5vCi1idWZmZXIgcGluIHdhcyBoZWxkLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBub3Qgc2V0 dGluZyBhbnkgTFBfREVBRCBiaXRzCi1vbiB0aGUgbGVhZiBwYWdlIGF0IGFsbCB3aGVuIHRoZSBw YWdlJ3MgTFNOIGhhcyBjaGFuZ2VkLiAgKFRoaXMgaXMgd2h5IHdlCi1pbXBsZW1lbnQgImZha2Ui IExTTnMgZm9yIHVubG9nZ2VkIGluZGV4IHJlbGF0aW9ucy4pCi0KIEZhc3RwYXRoIEZvciBJbmRl eCBJbnNlcnRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNzM0LDcgKzY4 Myw3IEBAIG9mIHJlYWRlcnMgY291bGQgc3RpbGwgbW92ZSByaWdodCB0byByZWNvdmVyIGlmIHdl IGRpZG4ndCBjb3VwbGUKIHNhbWUtbGV2ZWwgbG9ja3MpLCBidXQgd2UgcHJlZmVyIHRvIGJlIGNv bnNlcnZhdGl2ZSBoZXJlLgogCiBEdXJpbmcgcmVjb3ZlcnkgYWxsIGluZGV4IHNjYW5zIHN0YXJ0 IHdpdGggaWdub3JlX2tpbGxlZF90dXBsZXMgPSBmYWxzZQotYW5kIHdlIG5ldmVyIHNldCBraWxs X3ByaW9yX3R1cGxlLiBXZSBkbyB0aGlzIGJlY2F1c2UgdGhlIG9sZGVzdCB4bWluCithbmQgd2Ug bmV2ZXIgTFBfREVBRC1tYXJrIHR1cGxlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBvbGRlc3Qg eG1pbgogb24gdGhlIHN0YW5kYnkgc2VydmVyIGNhbiBiZSBvbGRlciB0aGFuIHRoZSBvbGRlc3Qg eG1pbiBvbiB0aGUgcHJpbWFyeQogc2VydmVyLCB3aGljaCBtZWFucyB0dXBsZXMgY2FuIGJlIG1h cmtlZCBMUF9ERUFEIGV2ZW4gd2hlbiB0aGV5IGFyZQogc3RpbGwgdmlzaWJsZSBvbiB0aGUgc3Rh bmRieS4gV2UgZG9uJ3QgV0FMIGxvZyB0dXBsZSBMUF9ERUFEIGJpdHMsIGJ1dApAQCAtNzU2LDkg KzcwNSw4IEBAIG5vbi1NVkNDIHNjYW5zIGlzIG5vdCByZXF1aXJlZCBvbiBzdGFuZGJ5IG5vZGVz LiBXZSBzdGlsbCBnZXQgYSBmdWxsCiBjbGVhbnVwIGxvY2sgd2hlbiByZXBsYXlpbmcgVkFDVVVN IHJlY29yZHMgZHVyaW5nIHJlY292ZXJ5LCBidXQgcmVjb3ZlcnkKIGRvZXMgbm90IG5lZWQgdG8g bG9jayBldmVyeSBsZWFmIHBhZ2UgKG9ubHkgdGhvc2UgbGVhZiBwYWdlcyB0aGF0IGhhdmUKIGl0 ZW1zIHRvIGRlbGV0ZSkgLS0gdGhhdCdzIHN1ZmZpY2llbnQgdG8gYXZvaWQgYnJlYWtpbmcgaW5k ZXgtb25seSBzY2FucwotZHVyaW5nIHJlY292ZXJ5IChzZWUgc2VjdGlvbiBhYm92ZSBhYm91dCBt YWtpbmcgVElEIHJlY3ljbGluZyBzYWZlKS4gVGhhdAotbGVhdmVzIGNvbmNlcm4gb25seSBmb3Ig cGxhaW4gaW5kZXggc2NhbnMuIChYWFg6IE5vdCBhY3R1YWxseSBjbGVhciB3aHkKLXRoaXMgaXMg dG90YWxseSB1bm5lY2Vzc2FyeSBkdXJpbmcgcmVjb3ZlcnkuKQorZHVyaW5nIHJlY292ZXJ5LiBU aGF0IGxlYXZlcyBjb25jZXJuIG9ubHkgZm9yIHBsYWluIGluZGV4IHNjYW5zLgorKFhYWDogTm90 IGFjdHVhbGx5IGNsZWFyIHdoeSB0aGlzIGlzIHRvdGFsbHkgdW5uZWNlc3NhcnkgZHVyaW5nIHJl Y292ZXJ5LikKIAogTVZDQyBzbmFwc2hvdCBwbGFpbiBpbmRleCBzY2FucyBhcmUgYWx3YXlzIHNh ZmUsIGZvciB0aGUgc2FtZSByZWFzb25zIHRoYXQKIHRoZXkncmUgc2FmZSBkdXJpbmcgb3JpZ2lu YWwgZXhlY3V0aW9uLiAgSGVhcFR1cGxlU2F0aXNmaWVzVG9hc3QoKSBkb2Vzbid0CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCmluZGV4IDA1NDcwMzg2MS4uYjljMjc5NTA4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwpAQCAtMTA2MCw2ICsxMDYwLDkgQEAgX2J0X3JlbGJ1 ZihSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYpCiAgKiBMb2NrIGlzIGFjcXVpcmVkIHdpdGhvdXQg YWNxdWlyaW5nIGFub3RoZXIgcGluLiAgVGhpcyBpcyBsaWtlIGEgcmF3CiAgKiBMb2NrQnVmZmVy KCkgY2FsbCwgYnV0IHBlcmZvcm1zIGV4dHJhIHN0ZXBzIG5lZWRlZCBieSBWYWxncmluZC4KICAq CisgKiBOb3RlOiBfYnRfYmF0Y2hfdW5sb2NrIGluIG5idHNlYXJjaC5jIChpbmRleGFtX3V0aWxf dW5sb2NrX2JhdGNoIHdyYXBwZXIKKyAqIGZ1bmN0aW9uKSBoYXMgbWF0Y2hpbmcgVmFsZ3JpbmQg YnVmZmVyIGxvY2sgaW5zdHJ1bWVudGF0aW9uLgorICoKICAqIE5vdGU6IENhbGxlciBtYXkgbmVl ZCB0byBjYWxsIF9idF9jaGVja3BhZ2UoKSB3aXRoIGJ1ZiB3aGVuIHBpbiBvbiBidWYKICAqIHdh c24ndCBvcmlnaW5hbGx5IGFjcXVpcmVkIGluIF9idF9nZXRidWYoKSBvciBfYnRfcmVsYW5kZ2V0 YnVmKCkuCiAgKi8KQEAgLTExMDEsMTMgKzExMDQsMTkgQEAgX2J0X3VubG9ja2J1ZihSZWxhdGlv biByZWwsIEJ1ZmZlciBidWYpCiAJICogQnVmZmVyIGlzIHBpbm5lZCBhbmQgbG9ja2VkLCB3aGlj aCBtZWFucyB0aGF0IGl0IGlzIGV4cGVjdGVkIHRvIGJlCiAJICogZGVmaW5lZCBhbmQgYWRkcmVz c2FibGUuICBDaGVjayB0aGF0IHByb2FjdGl2ZWx5LgogCSAqLwotCVZBTEdSSU5EX0NIRUNLX01F TV9JU19ERUZJTkVEKEJ1ZmZlckdldFBhZ2UoYnVmKSwgQkxDS1NaKTsKKyNpZiBkZWZpbmVkKFVT RV9WQUxHUklORCkKKwlQYWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOworCisJVkFMR1JJ TkRfQ0hFQ0tfTUVNX0lTX0RFRklORUQocGFnZSwgQkxDS1NaKTsKKyNlbmRpZgogCiAJLyogTG9j a0J1ZmZlcigpIGFzc2VydHMgdGhhdCBwaW4gaXMgaGVsZCBieSB0aGlzIGJhY2tlbmQgKi8KIAlM b2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKIAorI2lmIGRlZmluZWQoVVNFX1ZB TEdSSU5EKQogCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkpCi0JCVZBTEdSSU5E X01BS0VfTUVNX05PQUNDRVNTKEJ1ZmZlckdldFBhZ2UoYnVmKSwgQkxDS1NaKTsKKwkJVkFMR1JJ TkRfTUFLRV9NRU1fTk9BQ0NFU1MocGFnZSwgQkxDS1NaKTsKKyNlbmRpZgogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCmluZGV4IDQ0OGE1MTQxMi4uMmM2YTNk MjZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCkBAIC0zMiw2ICsz Miw3IEBAIHR5cGVkZWYgc3RydWN0IEJUUmVhZFBhZ2VTdGF0ZQogewogCS8qIElucHV0IHBhcmFt ZXRlcnMsIHNldCBieSBfYnRfcmVhZHBhZ2UgZm9yIF9idF9jaGVja2tleXMgKi8KIAlTY2FuRGly ZWN0aW9uIGRpcjsJCQkvKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uICovCisJQmxvY2tOdW1iZXIg Y3VycnBhZ2U7CQkvKiBjdXJyZW50IHBhZ2UgYmVpbmcgcmVhZCAqLwogCU9mZnNldE51bWJlciBt aW5vZmY7CQkvKiBMb3dlc3Qgbm9uLXBpdm90IHR1cGxlJ3Mgb2Zmc2V0ICovCiAJT2Zmc2V0TnVt YmVyIG1heG9mZjsJCS8qIEhpZ2hlc3Qgbm9uLXBpdm90IHR1cGxlJ3Mgb2Zmc2V0ICovCiAJSW5k ZXhUdXBsZQlmaW5hbHR1cDsJCS8qIE5lZWRlZCBieSBzY2FucyB3aXRoIGFycmF5IGtleXMgKi8K QEAgLTYzLDE0ICs2NCwxMyBAQCBzdGF0aWMgYm9vbCBfYnRfc2NhbmJlaGluZF9jaGVja2tleXMo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkJCQkJCQkJCSBJbmRleFR1 cGxlIGZpbmFsdHVwKTsKIHN0YXRpYyBib29sIF9idF9vcHBvZGlyX2NoZWNra2V5cyhJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCQkJCQkJCQkgIEluZGV4VHVwbGUgZmlu YWx0dXApOwotc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0 ZW1JbmRleCwKLQkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwot c3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRl bUluZGV4LAotCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVy RGF0YSAqaGVhcFRpZCwKLQkJCQkJCQkJICBJbmRleFR1cGxlIGl0dXApOwotc3RhdGljIGlubGlu ZSB2b2lkIF9idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4 LAotCQkJCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJCQkJCSAgIEl0ZW1Qb2lu dGVyIGhlYXBUaWQsIGludCB0dXBsZU9mZnNldCk7CitzdGF0aWMgdm9pZCBfYnRfc2F2ZWl0ZW0o SW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZu dW0sCisJCQkJCQkgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KTsKK3N0YXRpYyBp bnQJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRl bUluZGV4LAorCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVy RGF0YSAqdGFibGVUaWQsCisJCQkJCQkJCSAgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zm c2V0KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfYnRfc2F2ZXBvc3RpbmdpdGVtKEluZGV4U2NhbkJh dGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQkJ CQkJICAgSXRlbVBvaW50ZXIgdGFibGVUaWQsIGludCBiYXNlT2Zmc2V0KTsKIHN0YXRpYyBib29s IF9idF9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBzdGF0 ZSwgYm9vbCBhcnJheUtleXMsCiAJCQkJCQkgIEluZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0 cyk7CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2tfY29tcGFyZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLApAQCAtMTExLDE1ICsxMTEsMTUgQEAgc3RhdGljIGJvb2wgX2J0X3Zl cmlmeV9rZXlzX3dpdGhfYXJyYXlrZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKIAogLyoKLSAq CV9idF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRv IHNvLT5jdXJyUG9zCisgKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50 IGluZGV4IHBhZ2UgaW50byBuZXdiYXRjaC4KICAqCi0gKiBDYWxsZXIgbXVzdCBoYXZlIHBpbm5l ZCBhbmQgcmVhZC1sb2NrZWQgc28tPmN1cnJQb3MuYnVmOyB0aGUgYnVmZmVyJ3Mgc3RhdGUKLSAq IGlzIG5vdCBjaGFuZ2VkIGhlcmUuICBBbHNvLCBjdXJyUG9zLm1vcmVMZWZ0IGFuZCBtb3JlUmln aHQgbXVzdCBiZSB2YWxpZDsKLSAqIHRoZXkgYXJlIHVwZGF0ZWQgYXMgYXBwcm9wcmlhdGUuICBB bGwgb3RoZXIgZmllbGRzIG9mIHNvLT5jdXJyUG9zIGFyZQorICogQ2FsbGVyIG11c3QgaGF2ZSBw aW5uZWQgYW5kIHJlYWQtbG9ja2VkIG5ld2JhdGNoLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlIGlz CisgKiBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgbmV3YmF0Y2gncyBtb3JlTGVmdCBhbmQgbW9y ZVJpZ2h0IG11c3QgYmUgdmFsaWQ7CisgKiB0aGV5IGFyZSB1cGRhdGVkIGFzIGFwcHJvcHJpYXRl LiAgQWxsIG90aGVyIGZpZWxkcyBvZiBuZXdiYXRjaCBhcmUKICAqIGluaXRpYWxpemVkIGZyb20g c2NyYXRjaCBoZXJlLgogICoKICAqIFdlIHNjYW4gdGhlIGN1cnJlbnQgcGFnZSBzdGFydGluZyBh dCBvZmZudW0gYW5kIG1vdmluZyBpbiB0aGUgaW5kaWNhdGVkCi0gKiBkaXJlY3Rpb24uICBBbGwg aXRlbXMgbWF0Y2hpbmcgdGhlIHNjYW4ga2V5cyBhcmUgbG9hZGVkIGludG8gY3VyclBvcy5pdGVt cy4KKyAqIGRpcmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzIGFyZSBz YXZlZCBpbiBuZXdiYXRjaC5pdGVtcy4KICAqIG1vcmVMZWZ0IG9yIG1vcmVSaWdodCAoYXMgYXBw cm9wcmlhdGUpIGlzIGNsZWFyZWQgaWYgX2J0X2NoZWNra2V5cyByZXBvcnRzCiAgKiB0aGF0IHRo ZXJlIGNhbiBiZSBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBzY2FuIGRp cmVjdGlvbgogICogKGNvdWxkIGp1c3QgYmUgZm9yIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRl eCBzY2FuIHdoZW4gc2NhbiBoYXMgYXJyYXlzKS4KQEAgLTEzMSwxMSArMTMxLDEyIEBAIHN0YXRp YyBib29sIF9idF92ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4p OwogICogUmV0dXJucyB0cnVlIGlmIGFueSBtYXRjaGluZyBpdGVtcyBmb3VuZCBvbiB0aGUgcGFn ZSwgZmFsc2UgaWYgbm9uZS4KICAqLwogYm9vbAotX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkgYm9vbCBm aXJzdHBhZ2UpCitfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRj aCBuZXdiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwg Ym9vbCBmaXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsK IAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRj aERhdGEgKmJ0bmV3YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBuZXdiYXRjaCk7CiAJUGFn ZQkJcGFnZTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBtaW5vZmY7CkBA IC0xNDQsMjMgKzE0NSwyMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAlib29sCQlhcnJheUtleXMsCiAJ CQkJaWdub3JlX2tpbGxlZF90dXBsZXMgPSBzY2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlczsKIAlp bnQJCQlpdGVtSW5kZXgsCisJCQkJdHVwbGVPZmZzZXQgPSAwLAogCQkJCWluZG5hdHRzOwogCiAJ Lyogc2F2ZSB0aGUgcGFnZS9idWZmZXIgYmxvY2sgbnVtYmVyLCBhbG9uZyB3aXRoIGl0cyBzaWJs aW5nIGxpbmtzICovCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlw YWdlID0gQnVmZmVyR2V0UGFnZShidG5ld2JhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdl dE9wYXF1ZShwYWdlKTsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVt YmVyKHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MucHJldlBhZ2UgPSBvcGFxdWUtPmJ0 cG9fcHJldjsKLQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+YnRwb19uZXh0OwotCS8q IGRlbGF5IHNldHRpbmcgc28tPmN1cnJQb3MubHNuIHVudGlsIF9idF9kcm9wX2xvY2tfYW5kX21h eWJlX3BpbiAqLwotCXBzdGF0ZS5kaXIgPSBzby0+Y3VyclBvcy5kaXIgPSBkaXI7Ci0Jc28tPmN1 cnJQb3MubmV4dFR1cGxlT2Zmc2V0ID0gMDsKKwlwc3RhdGUuY3VycnBhZ2UgPSBidG5ld2JhdGNo LT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ0bmV3YmF0Y2gtPmJ1Zik7CisJYnRu ZXdiYXRjaC0+cHJldlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJldjsKKwlidG5ld2JhdGNoLT5uZXh0 UGFnZSA9IG9wYXF1ZS0+YnRwb19uZXh0OworCXBzdGF0ZS5kaXIgPSBuZXdiYXRjaC0+ZGlyID0g ZGlyOwogCiAJLyogZWl0aGVyIG1vcmVSaWdodCBvciBtb3JlTGVmdCBzaG91bGQgYmUgc2V0IG5v dyAobWF5IGJlIHVuc2V0IGxhdGVyKSAqLwotCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikgPyBzby0+Y3VyclBvcy5tb3JlUmlnaHQgOgotCQkgICBzby0+Y3VyclBvcy5tb3JlTGVm dCk7CisJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IGJ0bmV3YmF0Y2gtPm1v cmVSaWdodCA6IGJ0bmV3YmF0Y2gtPm1vcmVMZWZ0KTsKIAlBc3NlcnQoIVBfSUdOT1JFKG9wYXF1 ZSkpOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwogCUFzc2VydCgh c28tPm5lZWRQcmltU2Nhbik7CiAKIAkvKiBpbml0aWFsaXplIGxvY2FsIHZhcmlhYmxlcyAqLwpA QCAtMTg4LDE0ICsxODYsMTQgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJewogCQkvKiBhbGxvdyBuZXh0 L3ByZXYgcGFnZSB0byBiZSByZWFkIGJ5IG90aGVyIHdvcmtlciB3aXRob3V0IGRlbGF5ICovCiAJ CWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCQlfYnRfcGFyYWxsZWxfcmVsZWFz ZShzY2FuLCBzby0+Y3VyclBvcy5uZXh0UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9zLmN1cnJQ YWdlKTsKKwkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIGJ0bmV3YmF0Y2gtPm5leHRQYWdl LAorCQkJCQkJCQkgYnRuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCQllbHNlCi0JCQlfYnRfcGFyYWxs ZWxfcmVsZWFzZShzY2FuLCBzby0+Y3VyclBvcy5wcmV2UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJy UG9zLmN1cnJQYWdlKTsKKwkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIGJ0bmV3YmF0Y2gt PnByZXZQYWdlLAorCQkJCQkJCQkgYnRuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCX0KIAotCVByZWRp Y2F0ZUxvY2tQYWdlKHJlbCwgc28tPmN1cnJQb3MuY3VyclBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90 KTsKKwlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIHBzdGF0ZS5jdXJycGFnZSwgc2Nhbi0+eHNfc25h cHNob3QpOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7CkBAIC0yMTIs MTEgKzIxMCwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNr a2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVs ZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3Vy clBvcy5tb3JlUmlnaHQgPSBmYWxzZTsKKwkJCQkJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gZmFs c2U7CiAJCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxs ZWxfc2NhbikKIAkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJ CQkJCQkJCQkJCSAgIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJCQkJCQkJCQkgICBidG5l d2JhdGNoLT5jdXJyUGFnZSk7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC0y ODAsMjYgKzI3OCwyNiBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQlpZiAoIUJUcmVlVHVwbGVJc1Bv c3RpbmcoaXR1cCkpCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwotCQkJCQlfYnRfc2F2 ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5l d2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQkJaXRl bUluZGV4Kys7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0 OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qIFNldCB1cCBwb3N0aW5nIGxpc3Qg c3RhdGUgKGFuZCByZW1lbWJlciBmaXJzdCBUSUQpICovCi0JCQkJCXR1cGxlT2Zmc2V0ID0KLQkJ CQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCWJh c2VPZmZzZXQgPQorCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKG5ld2JhdGNoLCBpdGVtSW5k ZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJICBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgMCks Ci0JCQkJCQkJCQkJCSAgaXR1cCk7CisJCQkJCQkJCQkJCSAgaXR1cCwgJnR1cGxlT2Zmc2V0KTsK IAkJCQkJaXRlbUluZGV4Kys7CiAKIAkJCQkJLyogUmVtZW1iZXIgYWxsIGxhdGVyIFRJRHMgKG11 c3QgYmUgYXQgbGVhc3Qgb25lKSAqLwogCQkJCQlmb3IgKGludCBpID0gMTsgaSA8IEJUcmVlVHVw bGVHZXROUG9zdGluZyhpdHVwKTsgaSsrKQogCQkJCQl7Ci0JCQkJCQlfYnRfc2F2ZXBvc3Rpbmdp dGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0obmV3 YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9zdGlu Z04oaXR1cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJCQkJYmFzZU9m ZnNldCk7CiAJCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQkJfQogCQkJCX0KQEAgLTMzOSwxMiArMzM3 LDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQl9CiAKIAkJaWYgKCFwc3RhdGUuY29udGludWVzY2Fu KQotCQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCQlidG5ld2JhdGNoLT5tb3Jl UmlnaHQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4IDw9IE1heFRJRHNQZXJCVHJlZVBh Z2UpOwotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRl bSA9IGl0ZW1JbmRleCAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCW5ld2Jh dGNoLT5maXJzdEl0ZW0gPSAwOworCQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAx OwogCX0KIAllbHNlCiAJewpAQCAtMzYxLDExICszNTgsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJ CQkJCSFfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUuZmluYWx0dXAp KQogCQkJCXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiBh ZnRlciBhbGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKKwkJCQkJYnRu ZXdiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7 CiAJCQkJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQogCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1z Y2FuX3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2Up OworCQkJCQkJCQkJCQkJCSAgIGJ0bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZh bHNlOwogCQkJCX0KIAkJCX0KQEAgLTQ2NiwyNyArNDYzLDI3IEBAIF9idF9yZWFkcGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAog CQkJCXsKIAkJCQkJLyogUmVtZW1iZXIgaXQgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCV9i dF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCQlfYnRfc2F2ZWl0 ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJ CX0KIAkJCQllbHNlCiAJCQkJewogCQkJCQl1aW50MTYJCW5pdGVtcyA9IEJUcmVlVHVwbGVHZXRO UG9zdGluZyhpdHVwKTsKLQkJCQkJaW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VP ZmZzZXQ7CiAKIAkJCQkJLyogU2V0IHVwIHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVy IGxhc3QgVElEKSAqLwogCQkJCQlpdGVtSW5kZXgtLTsKLQkJCQkJdHVwbGVPZmZzZXQgPQotCQkJ CQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJYmFz ZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMobmV3YmF0Y2gsIGl0ZW1JbmRl eCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBuaXRl bXMgLSAxKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJICBpdHVwLCAmdHVwbGVP ZmZzZXQpOwogCiAJCQkJCS8qIFJlbWVtYmVyIGFsbCBwcmlvciBUSURzIChtdXN0IGJlIGF0IGxl YXN0IG9uZSkgKi8KIAkJCQkJZm9yIChpbnQgaSA9IG5pdGVtcyAtIDI7IGkgPj0gMDsgaS0tKQog CQkJCQl7CiAJCQkJCQlpdGVtSW5kZXgtLTsKLQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28s IGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwg aXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVw LCBpKSwKLQkJCQkJCQkJCQkJdHVwbGVPZmZzZXQpOworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsK IAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTUwMiwxMiArNDk5LDExIEBAIF9idF9yZWFkcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVt LAogCQkgKiBiZSBmb3VuZCB0aGVyZQogCQkgKi8KIAkJaWYgKCFwc3RhdGUuY29udGludWVzY2Fu KQotCQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKKwkJCWJ0bmV3YmF0Y2gtPm1vcmVM ZWZ0ID0gZmFsc2U7CiAKIAkJQXNzZXJ0KGl0ZW1JbmRleCA+PSAwKTsKLQkJc28tPmN1cnJQb3Mu Zmlyc3RJdGVtID0gaXRlbUluZGV4OwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IE1heFRJRHNQ ZXJCVHJlZVBhZ2UgLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhUSURzUGVyQlRy ZWVQYWdlIC0gMTsKKwkJbmV3YmF0Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJbmV3YmF0 Y2gtPmxhc3RJdGVtID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7CiAJfQogCiAJLyoKQEAgLTUy NCw3ICs1MjAsNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkgKi8KIAlBc3NlcnQoIXBzdGF0ZS5mb3Jj ZW5vbnJlcXVpcmVkKTsKIAotCXJldHVybiAoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5j dXJyUG9zLmxhc3RJdGVtKTsKKwlyZXR1cm4gKG5ld2JhdGNoLT5maXJzdEl0ZW0gPD0gbmV3YmF0 Y2gtPmxhc3RJdGVtKTsKIH0KIAogLyoKQEAgLTEwMjcsOTAgKzEwMjMsOTEgQEAgX2J0X29wcG9k aXJfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJcmV0 dXJuIHRydWU7CiB9CiAKLS8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0 ZW1zW2l0ZW1JbmRleF0gKi8KKy8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0 ZW1zW2l0ZW1JbmRleF0gKi8KIHN0YXRpYyB2b2lkCi1fYnRfc2F2ZWl0ZW0oQlRTY2FuT3BhcXVl IHNvLCBpbnQgaXRlbUluZGV4LAotCQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUg aXR1cCkKK19idF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRl eCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVP ZmZzZXQpCiB7Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNb aXRlbUluZGV4XTsKLQogCUFzc2VydCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkgJiYgIUJUcmVl VHVwbGVJc1Bvc3RpbmcoaXR1cCkpOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3Rp ZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVz KQorCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkID0gaXR1cC0+dF90aWQ7CisJ bmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaW5kZXhPZmZzZXQgPSBvZmZudW07CisKKwlpZiAo bmV3YmF0Y2gtPmN1cnJUdXBsZXMpCiAJewogCQlTaXplCQlpdHVwc3ogPSBJbmRleFR1cGxlU2l6 ZShpdHVwKTsKIAotCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSBzby0+Y3VyclBvcy5uZXh0VHVw bGVPZmZzZXQ7Ci0JCW1lbWNweShzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBs ZU9mZnNldCwgaXR1cCwgaXR1cHN6KTsKLQkJc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0ICs9 IE1BWEFMSUdOKGl0dXBzeik7CisJCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnR1cGxlT2Zm c2V0ID0gKnR1cGxlT2Zmc2V0OworCQltZW1jcHkobmV3YmF0Y2gtPmN1cnJUdXBsZXMgKyAqdHVw bGVPZmZzZXQsIGl0dXAsIGl0dXBzeik7CisJCSp0dXBsZU9mZnNldCArPSBNQVhBTElHTihpdHVw c3opOwogCX0KIH0KIAogLyoKICAqIFNldHVwIHN0YXRlIHRvIHNhdmUgVElEcy9pdGVtcyBmcm9t IGEgc2luZ2xlIHBvc3RpbmcgbGlzdCB0dXBsZS4KICAqCi0gKiBTYXZlcyBhbiBpbmRleCBpdGVt IGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSBmb3IgVElEIHRoYXQgaXMKLSAqIHJl dHVybmVkIHRvIHNjYW4gZmlyc3QuICBTZWNvbmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBwb3N0 aW5nIGxpc3Qgc2hvdWxkCi0gKiBiZSBzYXZlZCBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0 ZW0oKS4KKyAqIFNhdmVzIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5k ZXhdIGZvciBUSUQgdGhhdCBpcyByZXR1cm5lZAorICogdG8gc2NhbiBmaXJzdC4gIFNlY29uZCBv ciBzdWJzZXF1ZW50IFRJRHMgZm9yIHBvc3RpbmcgbGlzdCBzaG91bGQgYmUgc2F2ZWQKKyAqIGJ5 IGNhbGxpbmcgX2J0X3NhdmVwb3N0aW5naXRlbSgpLgogICoKLSAqIFJldHVybnMgYW4gb2Zmc2V0 IGludG8gdHVwbGUgc3RvcmFnZSBzcGFjZSB0aGF0IG1haW4gdHVwbGUgaXMgc3RvcmVkIGF0IGlm Ci0gKiBuZWVkZWQuCisgKiBSZXR1cm5zIGJhc2VPZmZzZXQsIGFuIG9mZnNldCBpbnRvIHR1cGxl IHN0b3JhZ2Ugc3BhY2UgdGhhdCBtYWluIHR1cGxlIGlzCisgKiBzdG9yZWQgYXQgaWYgbmVlZGVk LgogICovCiBzdGF0aWMgaW50Ci1fYnRfc2V0dXBwb3N0aW5naXRlbXMoQlRTY2FuT3BhcXVlIHNv LCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkgIGNvbnN0IEl0ZW1Q b2ludGVyRGF0YSAqaGVhcFRpZCwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3NldHVwcG9zdGluZ2l0 ZW1zKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LAorCQkJCQkgIE9mZnNl dE51bWJlciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGFibGVUaWQsCisJCQkJCSAg SW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1 cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0 ZW0gKml0ZW0gPSAmbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKIAlBc3NlcnQoQlRyZWVU dXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwot CWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCisJ aXRlbS0+dGFibGVUaWQgPSAqdGFibGVUaWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07 CisKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBsZXMpCiAJewogCQkvKiBTYXZlIGJhc2UgSW5kZXhU dXBsZSAodHJ1bmNhdGUgcG9zdGluZyBsaXN0KSAqLwogCQlJbmRleFR1cGxlCWJhc2U7CiAJCVNp emUJCWl0dXBzeiA9IEJUcmVlVHVwbGVHZXRQb3N0aW5nT2Zmc2V0KGl0dXApOwogCiAJCWl0dXBz eiA9IE1BWEFMSUdOKGl0dXBzeik7Ci0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHNvLT5jdXJy UG9zLm5leHRUdXBsZU9mZnNldDsKLQkJYmFzZSA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBs ZXMgKyBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQpOworCQlpdGVtLT50dXBsZU9mZnNldCA9 ICp0dXBsZU9mZnNldDsKKwkJYmFzZSA9IChJbmRleFR1cGxlKSAobmV3YmF0Y2gtPmN1cnJUdXBs ZXMgKyAqdHVwbGVPZmZzZXQpOwogCQltZW1jcHkoYmFzZSwgaXR1cCwgaXR1cHN6KTsKIAkJLyog RGVmZW5zaXZlbHkgcmVkdWNlIHdvcmsgYXJlYSBpbmRleCB0dXBsZSBoZWFkZXIgc2l6ZSAqLwog CQliYXNlLT50X2luZm8gJj0gfklOREVYX1NJWkVfTUFTSzsKIAkJYmFzZS0+dF9pbmZvIHw9IGl0 dXBzejsKLQkJc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0ICs9IGl0dXBzejsKKwkJKnR1cGxl T2Zmc2V0ICs9IGl0dXBzejsKIAotCQlyZXR1cm4gY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0OworCQly ZXR1cm4gaXRlbS0+dHVwbGVPZmZzZXQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBT YXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZvciBj dXJyZW50IHBvc3RpbmcKKyAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1z W2l0ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZwogICogdHVwbGUuCiAgKgogICogQXNzdW1l cyB0aGF0IF9idF9zZXR1cHBvc3RpbmdpdGVtcygpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZv ciBjdXJyZW50Ci0gKiBwb3N0aW5nIGxpc3QgdHVwbGUuICBDYWxsZXIgcGFzc2VzIGl0cyByZXR1 cm4gdmFsdWUgYXMgdHVwbGVPZmZzZXQuCisgKiBwb3N0aW5nIGxpc3QgdHVwbGUuICBDYWxsZXIg cGFzc2VzIGl0cyByZXR1cm4gdmFsdWUgYXMgYmFzZU9mZnNldC4KICAqLwogc3RhdGljIGlubGlu ZSB2b2lkCi1fYnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRl eCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1 cGxlT2Zmc2V0KQorX2J0X3NhdmVwb3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwg aW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJSXRlbVBvaW50ZXIgdGFi bGVUaWQsIGludCBiYXNlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNv LT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAm bmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFw VGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwlpdGVtLT50YWJsZVRpZCA9 ICp0YWJsZVRpZDsKKwlpdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKIAogCS8qCiAJICogSGF2 ZSBpbmRleC1vbmx5IHNjYW5zIHJldHVybiB0aGUgc2FtZSBiYXNlIEluZGV4VHVwbGUgZm9yIGV2 ZXJ5IFRJRAogCSAqIHRoYXQgb3JpZ2luYXRlcyBmcm9tIHRoZSBzYW1lIHBvc3RpbmcgbGlzdAog CSAqLwotCWlmIChzby0+Y3VyclR1cGxlcykKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gdHVw bGVPZmZzZXQ7CisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQorCQlpdGVtLT50dXBsZU9mZnNl dCA9IGJhc2VPZmZzZXQ7CiB9CiAKICNkZWZpbmUgTE9PS19BSEVBRF9SRVFVSVJFRF9SRUNIRUNL UyAJMwpAQCAtMjgyMSwxNCArMjgxOCwxNSBAQCBuZXdfcHJpbV9zY2FuOgogCSAqCiAJICogTm90 ZTogV2UgbWFrZSBhIHNvZnQgYXNzdW1wdGlvbiB0aGF0IHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0 aW9uIHdpbGwKIAkgKiBhbHNvIGJlIHVzZWQgd2l0aGluIF9idF9uZXh0LCB3aGVuIGl0IGlzIGFz a2VkIHRvIHN0ZXAgb2ZmIHRoaXMgcGFnZS4KLQkgKiBJdCBpcyB1cCB0byBfYnRfbmV4dCB0byBj YW5jZWwgdGhpcyBzY2hlZHVsZWQgcHJpbWl0aXZlIGluZGV4IHNjYW4KLQkgKiB3aGVuZXZlciBp dCBzdGVwcyB0byBhIHBhZ2UgaW4gdGhlIGRpcmVjdGlvbiBvcHBvc2l0ZSBjdXJyUG9zLmRpci4K KwkgKiBUaGUgc2NhbiBkaXJlY3Rpb24gbWlnaHQgYmUgcmV2ZXJzZWQgZHVyaW5nIHRoZSBuZXh0 IGFtZ2V0YmF0Y2ggY2FsbCwKKwkgKiBidXQgbm90IGJlZm9yZSBhIGNhbGwgdG8gYnRwb3NyZXNl dCB0aGF0IHJlc2V0cyB0aGUgYXJyYXkga2V5cyB0byB0aGUKKwkgKiBmaXJzdCBwb3NpdGlvbnMv ZWxlbWVudHMgdXNlZCB3aGVuIHNjYW5uaW5nIGluIHRoaXMgb3RoZXIgZGlyZWN0aW9uLgogCSAq LwogCXBzdGF0ZS0+Y29udGludWVzY2FuID0gZmFsc2U7CS8qIFRlbGwgX2J0X3JlYWRwYWdlIHdl J3JlIGRvbmUuLi4gKi8KIAlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsJLyogLi4uYnV0IGNhbGwg X2J0X2ZpcnN0IGFnYWluICovCiAKIAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJX2J0X3Bh cmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJ X2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHBzdGF0ZS0+Y3VycnBhZ2UpOwog CiAJLyogQ2FsbGVyJ3MgdHVwbGUgZG9lc24ndCBtYXRjaCB0aGUgbmV3IHF1YWwgKi8KIAlyZXR1 cm4gZmFsc2U7CkBAIC0yODQxLDkgKzI4MzksOCBAQCBlbmRfdG9wbGV2ZWxfc2NhbjoKIAkgKiBU aGlzIGVuZHMgdGhlIGVudGlyZSB0b3AtbGV2ZWwgc2NhbiBpbiB0aGUgY3VycmVudCBzY2FuIGRp cmVjdGlvbi4KIAkgKgogCSAqIE5vdGU6IFRoZSBzY2FuJ3MgYXJyYXlzIChpbmNsdWRpbmcgYW55 IG5vbi1yZXF1aXJlZCBhcnJheXMpIGFyZSBub3cgaW4KLQkgKiB0aGVpciBmaW5hbCBwb3NpdGlv bnMgZm9yIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLiAgSWYgdGhlIHNjYW4KLQkgKiBkaXJl Y3Rpb24gaGFwcGVucyB0byBjaGFuZ2UsIHRoZW4gdGhlIGFycmF5cyB3aWxsIGFscmVhZHkgYmUg aW4gdGhlaXIKLQkgKiBmaXJzdCBwb3NpdGlvbnMgZm9yIHdoYXQgd2lsbCB0aGVuIGJlIHRoZSBj dXJyZW50IHNjYW4gZGlyZWN0aW9uLgorCSAqIHRoZWlyIGZpbmFsIHBvc2l0aW9ucyBmb3IgdGhl IGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uICBUaGlzIGlzIGp1c3QKKwkgKiBkZWZlbnNpdmUuCiAJ ICovCiAJcHN0YXRlLT5jb250aW51ZXNjYW4gPSBmYWxzZTsJLyogVGVsbCBfYnRfcmVhZHBhZ2Ug d2UncmUgZG9uZS4uLiAqLwogCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsJLyogLi4uYW5kIGRv bid0IGNhbGwgX2J0X2ZpcnN0IGFnYWluICovCkBAIC0yOTEwLDE3ICsyOTA3LDkgQEAgX2J0X2Fk dmFuY2VfYXJyYXlfa2V5c19pbmNyZW1lbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwKIAkvKgogCSAqIFRoZSBhcnJheSBrZXlzIGFyZSBub3cgZXhoYXVzdGVkLgogCSAq Ci0JICogUmVzdG9yZSB0aGUgYXJyYXkga2V5cyB0byB0aGUgc3RhdGUgdGhleSB3ZXJlIGluIGlt bWVkaWF0ZWx5IGJlZm9yZSB3ZQotCSAqIHdlcmUgY2FsbGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQg dGhlIGFycmF5cyBvbmx5IGV2ZXIgcmF0Y2hldCBpbiB0aGUKLQkgKiBjdXJyZW50IHNjYW4gZGly ZWN0aW9uLgotCSAqCi0JICogV2l0aG91dCB0aGlzLCBzY2FucyBjb3VsZCBvdmVybG9vayBtYXRj aGluZyB0dXBsZXMgd2hlbiB0aGUgc2NhbgotCSAqIGRpcmVjdGlvbiBnZXRzIHJldmVyc2VkIGp1 c3QgYmVmb3JlIGJ0Z2V0dHVwbGUgcnVucyBvdXQgb2YgaXRlbXMgdG8KLQkgKiByZXR1cm4sIGJ1 dCBqdXN0IGFmdGVyIF9idF9yZWFkcGFnZSBwcmVwYXJlcyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhl Ci0JICogc2NhbidzIGZpbmFsIHBhZ2UgaW4gc28tPmN1cnJQb3MuICBXaGVuIHdlJ3JlIG9uIHRo ZSBmaW5hbCBwYWdlIGl0IGlzCi0JICogdHlwaWNhbCBmb3Igc28tPmN1cnJQb3MgdG8gZ2V0IGlu dmFsaWRhdGVkIG9uY2UgYnRnZXR0dXBsZSBmaW5hbGx5Ci0JICogcmV0dXJucyBmYWxzZSwgd2hp Y2gnbGwgZWZmZWN0aXZlbHkgaW52YWxpZGF0ZSB0aGUgc2NhbidzIGFycmF5IGtleXMuCi0JICog VGhhdCBoYXNuJ3QgaGFwcGVuZWQgeWV0LCB0aG91Z2ggLS0gYW5kIGluIGdlbmVyYWwgaXQgbWF5 IG5ldmVyIGhhcHBlbi4KKwkgKiBEZWZlbnNpdmVseSByZXN0b3JlIHRoZSBhcnJheSBrZXlzIHRv IHRoZSBwb3NpdGlvbnMgdGhleSB3ZXJlIGluCisJICogaW1tZWRpYXRlbHkgYmVmb3JlIHdlIHdl cmUgY2FsbGVkIChpLmUuIHRvIHRoZWlyIGZpbmFsIHBvc2l0aW9ucyBmb3IKKwkgKiB0aGUgY3Vy cmVudCBzY2FuIGRpcmVjdGlvbikuCiAJICovCiAJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2Nhbiwg LWRpcik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmluZGV4IDNkZjJjNzUyZS4uM2Qz MzQ0ODRkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKQEAgLTEyOCw2ICsxMjgsNyBA QCBidGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtY29uc2lzdGVudGVxdWFsaXR5ID0g dHJ1ZSwKIAkJLmFtY29uc2lzdGVudG9yZGVyaW5nID0gdHJ1ZSwKIAkJLmFtY2FuYmFja3dhcmQg PSB0cnVlLAorCQkuYW1jYW5tYXJrcG9zID0gdHJ1ZSwKIAkJLmFtY2FudW5pcXVlID0gdHJ1ZSwK IAkJLmFtY2FubXVsdGljb2wgPSB0cnVlLAogCQkuYW1vcHRpb25hbGtleSA9IHRydWUsCkBAIC0x NjEsMTEgKzE2MiwxMyBAQCBidGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYWRqdXN0 bWVtYmVycyA9IGJ0YWRqdXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gYnRiZWdpbnNjYW4s CiAJCS5hbXJlc2NhbiA9IGJ0cmVzY2FuLAotCQkuYW1nZXR0dXBsZSA9IGJ0Z2V0dHVwbGUsCisJ CS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBidGdldGJhdGNoLAorCQkuYW11 bmd1YXJkYmF0Y2ggPSBidHVuZ3VhcmRiYXRjaCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBidGtp bGxpdGVtc2JhdGNoLAogCQkuYW1nZXRiaXRtYXAgPSBidGdldGJpdG1hcCwKIAkJLmFtZW5kc2Nh biA9IGJ0ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IGJ0bWFya3BvcywKLQkJLmFtcmVzdHJwb3Mg PSBidHJlc3RycG9zLAorCQkuYW1wb3NyZXNldCA9IGJ0cG9zcmVzZXQsCiAJCS5hbWVzdGltYXRl cGFyYWxsZWxzY2FuID0gYnRlc3RpbWF0ZXBhcmFsbGVsc2NhbiwKIAkJLmFtaW5pdHBhcmFsbGVs c2NhbiA9IGJ0aW5pdHBhcmFsbGVsc2NhbiwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBidHBhcmFs bGVscmVzY2FuLApAQCAtMjI0LDE4ICsyMjcsMTggQEAgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBE YXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiB9CiAKIC8qCi0gKglidGdldHR1cGxlKCkgLS0g R2V0IHRoZSBuZXh0IHR1cGxlIGluIHRoZSBzY2FuLgorICoJYnRnZXRiYXRjaCgpIC0tIEdldCB0 aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAqLwotYm9vbAot YnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhT Y2FuQmF0Y2gKK2J0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBw cmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOworCUluZGV4U2NhbkJhdGNoIGJh dGNoID0gcHJpb3JiYXRjaDsKIAogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7 CiAKIAkvKiBidHJlZSBpbmRleGVzIGFyZSBuZXZlciBsb3NzeSAqLwotCXNjYW4tPnhzX3JlY2hl Y2sgPSBmYWxzZTsKKwlBc3NlcnQoIXNjYW4tPnhzX3JlY2hlY2spOwogCiAJLyogRWFjaCBsb29w IGl0ZXJhdGlvbiBwZXJmb3JtcyBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJZG8K QEAgLTI0Myw0NSArMjQ2LDIwIEBAIGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKIAkJLyoKIAkJICogSWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXplZCB0 aGlzIHNjYW4sIHdlIGNhbiBqdXN0IGFkdmFuY2UgaXQgaW4KIAkJICogdGhlIGFwcHJvcHJpYXRl IGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwKLQkJICogX2J0 X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY2FuLgorCQkgKiBfYnRfZmly c3QoKSB0byBnZXQgdGhlIGZpcnN0IGJhdGNoIGluIHRoZSBzY2FuLgogCQkgKi8KLQkJaWYgKCFC VFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJCXJlcyA9IF9idF9maXJzdChzY2FuLCBk aXIpOworCQlpZiAoYmF0Y2ggPT0gTlVMTCkKKwkJCWJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIGRp cik7CiAJCWVsc2UKLQkJewotCQkJLyoKLQkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQg a2lsbCB0aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxlLgotCQkJICovCi0JCQlpZiAoc2Nhbi0+ a2lsbF9wcmlvcl90dXBsZSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFllcywgcmVtZW1iZXIgaXQg Zm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBzdWNoCi0JCQkJICogdHVwbGVzIGF0IG9u Y2UgcmlnaHQgYmVmb3JlIGxlYXZpbmcgdGhlIGluZGV4IHBhZ2UuKSAgVGhlCi0JCQkJICogdGVz dCBmb3IgbnVtS2lsbGVkIG92ZXJydW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZQotCQkJ CSAqIGNhbGxlciByZXZlcnNlcyBkaXJlY3Rpb24gaW4gdGhlIGluZGV4c2NhbiB0aGVuIHRoZSBz YW1lCi0JCQkJICogaXRlbSBtaWdodCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0aW1lcy4gSXQncyBu b3Qgd29ydGgKLQkJCQkgKiB0cnlpbmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0 ZWN0IGl0LCBidXQgaW5zdGVhZAotCQkJCSAqIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MgZW50cmll cy4KLQkJCQkgKi8KLQkJCQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJCXNvLT5r aWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIE1heFRJRHNQZXJCVHJlZVBhZ2UpOwotCQkJ CWlmIChzby0+bnVtS2lsbGVkIDwgTWF4VElEc1BlckJUcmVlUGFnZSkKLQkJCQkJc28tPmtpbGxl ZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCQl9CisJ CQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIGRpciwgYmF0Y2gpOwogCi0JCQkvKgotCQkJICogTm93 IGNvbnRpbnVlIHRoZSBzY2FuLgotCQkJICovCi0JCQlyZXMgPSBfYnRfbmV4dChzY2FuLCBkaXIp OwotCQl9Ci0KLQkJLyogSWYgd2UgaGF2ZSBhIHR1cGxlLCByZXR1cm4gaXQgLi4uICovCi0JCWlm IChyZXMpCisJCS8qIElmIHdlIGhhdmUgYSBiYXRjaCwgcmV0dXJuIGl0IC4uLiAqLworCQlpZiAo YmF0Y2gpCiAJCQlicmVhazsKIAkJLyogLi4uIG90aGVyd2lzZSBzZWUgaWYgd2UgbmVlZCBhbm90 aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJfSB3aGlsZSAoc28tPm51bUFycmF5S2V5cyAm JiBfYnRfc3RhcnRfcHJpbV9zY2FuKHNjYW4pKTsKIAotCXJldHVybiByZXM7CisJcmV0dXJuIGJh dGNoOwogfQogCiAvKgpAQCAtMjkxLDM4ICsyNjksNDMgQEAgaW50NjQKIGJ0Z2V0Yml0bWFwKElu ZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCWlu dDY0CQludGlkcyA9IDA7Ci0JSXRlbVBvaW50ZXIgaGVhcFRpZDsKKwlJdGVtUG9pbnRlciB0YWJs ZVRpZDsKIAogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CiAKIAkvKiBFYWNo IGxvb3AgaXRlcmF0aW9uIHBlcmZvcm1zIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8K IAlkbwogCXsKLQkJLyogRmV0Y2ggdGhlIGZpcnN0IHBhZ2UgJiB0dXBsZSAqLwotCQlpZiAoX2J0 X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJLyogRmV0Y2ggdGhlIGZpcnN0 IGJhdGNoICovCisJCWlmICgoYmF0Y2ggPSBfYnRfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJl Y3Rpb24pKSkKIAkJewotCQkJLyogU2F2ZSB0dXBsZSBJRCwgYW5kIGNvbnRpbnVlIHNjYW5uaW5n ICovCi0JCQloZWFwVGlkID0gJnNjYW4tPnhzX2hlYXB0aWQ7Ci0JCQl0Ym1fYWRkX3R1cGxlcyh0 Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKKwkJCWludAkJCWl0ZW1JbmRleCA9IDA7CisKKwkJCS8q IFNhdmUgZmlyc3QgdHVwbGUncyBUSUQgKi8KKwkJCXRhYmxlVGlkID0gJmJhdGNoLT5pdGVtc1tp dGVtSW5kZXhdLnRhYmxlVGlkOworCQkJdGJtX2FkZF90dXBsZXModGJtLCB0YWJsZVRpZCwgMSwg ZmFsc2UpOwogCQkJbnRpZHMrKzsKIAogCQkJZm9yICg7OykKIAkJCXsKLQkJCQkvKgotCQkJCSAq IEFkdmFuY2UgdG8gbmV4dCB0dXBsZSB3aXRoaW4gcGFnZS4gIFRoaXMgaXMgdGhlIHNhbWUgYXMg dGhlCi0JCQkJICogZWFzeSBjYXNlIGluIF9idF9uZXh0KCkuCi0JCQkJICovCi0JCQkJaWYgKCsr c28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCisJCQkJLyogQWR2 YW5jZSB0byBuZXh0IFRJRCB3aXRoaW4gcGFnZS1zaXplZCBiYXRjaCAqLworCQkJCWlmICgrK2l0 ZW1JbmRleCA+IGJhdGNoLT5sYXN0SXRlbSkKIAkJCQl7Ci0JCQkJCS8qIGxldCBfYnRfbmV4dCBk byB0aGUgaGVhdnkgbGlmdGluZyAqLwotCQkJCQlpZiAoIV9idF9uZXh0KHNjYW4sIEZvcndhcmRT Y2FuRGlyZWN0aW9uKSkKKwkJCQkJLyoKKwkJCQkJICogX2J0X25leHQgcmVsZWFzZXMgdGhlIHBy aW9yIGJhdGNoIGZvciBiaXRtYXAgY2FsbGVycworCQkJCQkgKiBiZWZvcmUgYWxsb2NhdGluZyB0 aGUgbmV4dCBvbmUsIHNvIG9ubHkgb25lIGJhdGNoIGlzCisJCQkJCSAqIGV2ZXIgdXNlZCBhdCBh IHRpbWUKKwkJCQkJICovCisJCQkJCWl0ZW1JbmRleCA9IDA7CisJCQkJCWJhdGNoID0gX2J0X25l eHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGJhdGNoKTsKKwkJCQkJaWYgKCFiYXRjaCkK IAkJCQkJCWJyZWFrOwogCQkJCX0KIAotCQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51 ZSBzY2FubmluZyAqLwotCQkJCWhlYXBUaWQgPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQ b3MuaXRlbUluZGV4XS5oZWFwVGlkOwotCQkJCXRibV9hZGRfdHVwbGVzKHRibSwgaGVhcFRpZCwg MSwgZmFsc2UpOworCQkJCXRhYmxlVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxl VGlkOworCQkJCXRibV9hZGRfdHVwbGVzKHRibSwgdGFibGVUaWQsIDEsIGZhbHNlKTsKIAkJCQlu dGlkcysrOwogCQkJfQogCQl9CkBAIC0zNDksOCArMzMyLDYgQEAgYnRiZWdpbnNjYW4oUmVsYXRp b24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAKIAkvKiBhbGxvY2F0ZSBwcml2YXRl IHdvcmtzcGFjZSAqLwogCXNvID0gcGFsbG9jX29iamVjdChCVFNjYW5PcGFxdWVEYXRhKTsKLQlC VFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNv LT5tYXJrUG9zKTsKIAlpZiAoc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJc28tPmtleURhdGEg PSAoU2NhbktleSkgcGFsbG9jKHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0 YSkpOwogCWVsc2UKQEAgLTM2NCwxOSArMzQ1LDEyIEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJl bCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNvLT5vcmRlclByb2NzID0gTlVMTDsKIAlz by0+YXJyYXlDb250ZXh0ID0gTlVMTDsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7CQkvKiB1 bnRpbCBuZWVkZWQgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKLQotCS8qCi0JICogV2UgZG9uJ3Qg a25vdyB5ZXQgd2hldGhlciB0aGUgc2NhbiB3aWxsIGJlIGluZGV4LW9ubHksIHNvIHdlIGRvIG5v dAotCSAqIGFsbG9jYXRlIHRoZSB0dXBsZSB3b3Jrc3BhY2UgYXJyYXlzIHVudGlsIGJ0cmVzY2Fu LiAgSG93ZXZlciwgd2Ugc2V0IHVwCi0JICogc2Nhbi0+eHNfaXR1cGRlc2Mgd2hldGhlciB3ZSds bCBuZWVkIGl0IG9yIG5vdCwgc2luY2UgdGhhdCdzIHNvIGNoZWFwLgotCSAqLwotCXNvLT5jdXJy VHVwbGVzID0gc28tPm1hcmtUdXBsZXMgPSBOVUxMOwotCi0Jc2Nhbi0+eHNfaXR1cGRlc2MgPSBS ZWxhdGlvbkdldERlc2NyKHJlbCk7Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT54c19y ZWNoZWNrID0gZmFsc2U7CisJc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJl bCk7CisJc2Nhbi0+bWF4aXRlbXNiYXRjaCA9IE1heFRJRHNQZXJCVHJlZVBhZ2U7CisJc2Nhbi0+ YmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRpYyA9IE1BWEFMSUdOKHNpemVvZihCVEJhdGNoRGF0YSkp OworCXNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPSBCTENLU1o7CiAKIAlyZXR1cm4gc2Nh bjsKIH0KQEAgLTM5MCw2NCArMzY0LDE4MSBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAo QlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkg cmVhZCBsb2NrcywgYnV0IGdvdHRhIGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNW YWxpZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2Us IGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkK LQkJCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1 cnJQb3MpOwotCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQkvKgot CSAqIFdlIHByZWZlciB0byBlYWdlcmx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgYmVmb3JlIGJ0Z2V0 dHVwbGUgcmV0dXJucy4KLQkgKiBUaGlzIGF2b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQgdG8gYWNx dWlyZSBhIGNsZWFudXAgbG9jayBvbiB0aGUgcGFnZS4KLQkgKgotCSAqIFdlIGNhbm5vdCBzYWZl bHkgZHJvcCBsZWFmIHBhZ2UgcGlucyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyBkdWUgdG8gYQot CSAqIHJhY2UgY29uZGl0aW9uIGludm9sdmluZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBhbGwtdmlz aWJsZSBpbiB0aGUgVk0uCi0JICogSXQncyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5kZXggc2Nh bnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdC4KLQkgKgotCSAqIEFsc28gb3B0IG91dCBv ZiBkcm9wcGluZyBsZWFmIHBhZ2UgcGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAgc2NhbnMuCi0J ICogUGlucyBjYW5ub3QgYmUgaGVsZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQgZHVyaW5nIGJp dG1hcCBzY2FucyBlaXRoZXIKLQkgKiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXZvaWQgd2Fz dGluZyBjeWNsZXMgb24gYWNxdWlyaW5nIHBhZ2UgTFNOcy4KLQkgKgotCSAqIFNlZSBuYnRyZWUv UkVBRE1FIHNlY3Rpb24gb24gbWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgot CSAqCi0JICogTm90ZTogc28tPmRyb3BQaW4gc2hvdWxkIG5ldmVyIGNoYW5nZSBhY3Jvc3MgcmVz Y2Fucy4KLQkgKi8KLQlzby0+ZHJvcFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYmCi0JCQkJ ICAgSXNNVkNDTGlrZVNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSAmJgotCQkJCSAgIHNjYW4t PmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKLQotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0Jc28t Pm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7Ci0Jc28tPm9w cG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJr UG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKLQotCS8qCi0JICogQWxs b2NhdGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cywgaWYgbmVlZGVkIGZvciBhbiBpbmRleC1vbmx5 IHNjYW4gYW5kCi0JICogbm90IGFscmVhZHkgZG9uZSBpbiBhIHByZXZpb3VzIHJlc2NhbiBjYWxs LiAgVG8gc2F2ZSBvbiBwYWxsb2MKLQkgKiBvdmVyaGVhZCwgYm90aCB3b3Jrc3BhY2VzIGFyZSBh bGxvY2F0ZWQgYXMgb25lIHBhbGxvYyBibG9jazsgb25seSB0aGlzCi0JICogZnVuY3Rpb24gYW5k IGJ0ZW5kc2NhbiBrbm93IHRoYXQuCi0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBz by0+Y3VyclR1cGxlcyA9PSBOVUxMKQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBw YWxsb2MoQkxDS1NaICogMik7Ci0JCXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBC TENLU1o7Ci0JfQotCiAJLyoKIAkgKiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNj YW5rZXkgJiYgc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEs IHNjYW5rZXksIHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNv LT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5v cHBvc2l0ZURpckNoZWNrID0gZmFsc2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRp bCBfYnRfcHJlcHJvY2Vzc19rZXlzIHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJ CS8qIGRpdHRvICovCiB9CiAKKy8qCisgKglidHVuZ3VhcmRiYXRjaCgpIC0tIERyb3AgYmF0Y2gn cyBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoYnVmZmVyIHBpbikKKyAqCisgKiBDYWxsZWQgYnkg dGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRyb3AgdGhlIGJ1ZmZlciBwaW4gaGVsZCB0 bworICogcHJldmVudCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNLgorICovCit2 b2lkCitidHVuZ3VhcmRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJh dGNoKQoreworCUJUQmF0Y2hEYXRhICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0 Y2gpOworCisJLyogU2hvdWxkIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgaWZmICFiYXRjaEltbWVk aWF0ZVVuZ3VhcmQgKi8KKwlBc3NlcnQoIXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCk7CisJ QXNzZXJ0KGJhdGNoLT5pc0d1YXJkZWQpOworCisJUmVsZWFzZUJ1ZmZlcihidGJhdGNoLT5idWYp OworfQorCisvKgorICoJYnRraWxsaXRlbXNiYXRjaCgpIC0tIE1hcmsgZGVhZCBpdGVtcycgaW5k ZXggdHVwbGVzIExQX0RFQUQKKyAqLwordm9pZAorYnRraWxsaXRlbXNiYXRjaChJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4t PmluZGV4UmVsYXRpb247CisJQlRCYXRjaERhdGEgKmJ0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShz Y2FuLCBiYXRjaCk7CisJUGFnZQkJcGFnZTsKKwlCVFBhZ2VPcGFxdWUgb3BhcXVlOworCWJvb2wJ CWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOworCUJ1ZmZlcgkJYnVmOworCVhMb2dSZWNQdHIJbGF0 ZXN0bHNuOworCisJQXNzZXJ0KGJhdGNoLT5udW1EZWFkID4gMCk7CisKKwlidWYgPSBfYnRfZ2V0 YnVmKHJlbCwgYnRiYXRjaC0+Y3VyclBhZ2UsIEJUX1JFQUQpOworCisJbGF0ZXN0bHNuID0gQnVm ZmVyR2V0TFNOQXRvbWljKGJ1Zik7CisJQXNzZXJ0KGJhdGNoLT5sc24gPD0gbGF0ZXN0bHNuKTsK KwlpZiAoYmF0Y2gtPmxzbiAhPSBsYXRlc3Rsc24pCisJeworCQkvKiBNb2RpZmllZCwgZ2l2ZSB1 cCBvbiBoaW50aW5nICovCisJCV9idF9yZWxidWYocmVsLCBidWYpOworCQlyZXR1cm47CisJfQor CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUo cGFnZSk7CisKKwkvKiBJdGVyYXRlIHRocm91Z2ggYmF0Y2gtPmRlYWRJdGVtc1tdIGluIGxlYWYg cGFnZSBvcmRlciAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgYmF0Y2gtPm51bURlYWQ7IGkrKykK Kwl7CisJCWludAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5kZWFkSXRlbXNbaV07CisJCUJhdGNoTWF0 Y2hpbmdJdGVtICpraXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKKwkJT2Zmc2V0TnVt YmVyIG9mZm51bSA9IGtpdGVtLT5pbmRleE9mZnNldDsKKwkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0 SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisJCUluZGV4VHVwbGUJaXR1cGxlID0gKEluZGV4VHVwbGUp IFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7CisJCWJvb2wJCWtpbGx0dXBsZSA9IGZhbHNlOworCisJ CUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJiBpdGVtSW5kZXggPD0gYmF0 Y2gtPmxhc3RJdGVtKTsKKwkJQXNzZXJ0KGkgPT0gMCB8fAorCQkJICAgb2ZmbnVtID49IGJhdGNo LT5pdGVtc1tiYXRjaC0+ZGVhZEl0ZW1zW2kgLSAxXV0uaW5kZXhPZmZzZXQpOworCQlBc3NlcnQo b2ZmbnVtID49IFBfRklSU1REQVRBS0VZKG9wYXF1ZSkgJiYKKwkJCSAgIG9mZm51bSA8PSBQYWdl R2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpKTsKKworCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhp dHVwbGUpKQorCQl7CisJCQlpbnQJCQlwaSA9IGkgKyAxOworCQkJaW50CQkJbnBvc3RpbmcgPSBC VHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKKwkJCWludAkJCWo7CisKKwkJCS8qCisJCQkg KiBBIHBvc3RpbmcgbGlzdCB0dXBsZSBjYW4gb25seSBiZSBtYXJrZWQgTFBfREVBRCBvbmNlIGV2 ZXJ5IG9uZQorCQkJICogb2YgaXRzIGhlYXAgVElEcyBpcyBrbm93biBkZWFkLiAgTWF0Y2ggZWFj aCBoZWFwIFRJRCBhZ2FpbnN0CisJCQkgKiBzdWNjZXNzaXZlIGRlYWQgaXRlbXMsIHdoaWNoIGFy ZSBpbiBoZWFwIFRJRCBvcmRlciBqdXN0IGxpa2UKKwkJCSAqIHRoZSBwb3N0aW5nIGxpc3QgaXRz ZWxmLgorCQkJICovCisJCQlmb3IgKGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKKwkJCXsKKwkJ CQlJdGVtUG9pbnRlciBpdGVtID0gQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXBsZSwgaik7CisK KwkJCQlpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0sICZraXRlbS0+dGFibGVUaWQpKQorCQkJ CQlicmVhazsJCS8qIG91dCBvZiBwb3N0aW5nIGxpc3QgbG9vcCAqLworCisJCQkJQXNzZXJ0KGtp dGVtLT5pbmRleE9mZnNldCA9PSBvZmZudW0pOworCisJCQkJLyoKKwkJCQkgKiBSZWFkLWFoZWFk IHRvIGxhdGVyIGtpdGVtcyBoZXJlLgorCQkJCSAqCisJCQkJICogV2UgcmVseSBvbiB0aGUgYXNz dW1wdGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0ZW0gaGVyZQorCQkJCSAqIHdpbGwgcHJldmVu dCB1cyBmcm9tIGNvbnNpZGVyaW5nIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUKKwkJCQkgKiBmdWxs eSBkZWFkIGJ5IG5vdCBtYXRjaGluZyBpdHMgbmV4dCBoZWFwIFRJRCBpbiBuZXh0IGxvb3AKKwkJ CQkgKiBpdGVyYXRpb24uCisJCQkJICoKKwkJCQkgKiBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHRo aXMgaXMgdGhlIGZpbmFsIGhlYXAgVElEIGluIHRoZQorCQkJCSAqIHBvc3RpbmcgbGlzdCB0dXBs ZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxlZCByZWdhcmRsZXNzIChpLmUuCisJCQkJICogd2UgaGFu ZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBsYXN0IGtpdGVtIGlzIGFsc28gdGhlIGxhc3QKKwkJCQkg KiBoZWFwIFRJRCBpbiB0aGUgbGFzdCBpbmRleCB0dXBsZSBjb3JyZWN0bHkgLS0gcG9zdGluZyB0 dXBsZQorCQkJCSAqIHN0aWxsIGdldHMga2lsbGVkKS4KKwkJCQkgKi8KKwkJCQlpZiAocGkgPCBi YXRjaC0+bnVtRGVhZCkKKwkJCQkJa2l0ZW0gPSAmYmF0Y2gtPml0ZW1zW2JhdGNoLT5kZWFkSXRl bXNbcGkrK11dOworCQkJfQorCisJCQkvKgorCQkJICogRG9uJ3QgYm90aGVyIGFkdmFuY2luZyB0 aGUgb3V0ZXJtb3N0IGxvb3AncyBpbnQgaXRlcmF0b3IgdG8KKwkJCSAqIGF2b2lkIHByb2Nlc3Np bmcgZGVhZCBpdGVtcyB0aGF0IHJlbGF0ZSB0byB0aGUgc2FtZSBvZmZudW0vCisJCQkgKiBwb3N0 aW5nIGxpc3QgdHVwbGUuICBUaGlzIG1pY3JvLW9wdGltaXphdGlvbiBoYXJkbHkgc2VlbXMgd29y dGgKKwkJCSAqIGl0LiAgKEZ1cnRoZXIgaXRlcmF0aW9ucyBvZiB0aGUgb3V0ZXJtb3N0IGxvb3Ag d2lsbCBmYWlsIHRvCisJCQkgKiBtYXRjaCBvbiB0aGlzIHNhbWUgcG9zdGluZyBsaXN0J3MgZmly c3QgaGVhcCBUSUQgaW5zdGVhZCwgc28KKwkJCSAqIHdlJ2xsIGFkdmFuY2UgdG8gdGhlIG5leHQg b2ZmbnVtL2luZGV4IHR1cGxlIHByZXR0eSBxdWlja2x5LikKKwkJCSAqLworCQkJaWYgKGogPT0g bnBvc3RpbmcpCisJCQkJa2lsbHR1cGxlID0gdHJ1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUFz c2VydChJdGVtUG9pbnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwgJmtpdGVtLT50YWJsZVRpZCkp OworCQkJa2lsbHR1cGxlID0gdHJ1ZTsKKwkJfQorCisJCS8qCisJCSAqIE1hcmsgaW5kZXggaXRl bSBhcyBkZWFkLCBpZiBpdCBpc24ndCBhbHJlYWR5LiAgU2luY2UgdGhpcyBoYXBwZW5zCisJCSAq IHdoaWxlIGhvbGRpbmcgYSBzaGFyZWQgYnVmZmVyIGxvY2ssIGl0J3MgcG9zc2libGUgdGhhdCBt dWx0aXBsZQorCQkgKiBwcm9jZXNzZXMgYXR0ZW1wdCB0byBkbyB0aGlzIHNpbXVsdGFuZW91c2x5 LCBsZWFkaW5nIHRvIG11bHRpcGxlCisJCSAqIGZ1bGwtcGFnZSBpbWFnZXMgYmVpbmcgc2VudCB0 byBXQUwgKGlmIHdhbF9sb2dfaGludHMgb3IgZGF0YQorCQkgKiBjaGVja3N1bXMgYXJlIGVuYWJs ZWQpLCB3aGljaCBpcyB1bmRlc2lyYWJsZS4KKwkJICovCisJCWlmIChraWxsdHVwbGUgJiYgIUl0 ZW1JZElzRGVhZChpaWQpKQorCQl7CisJCQlpZiAoIWtpbGxlZHNvbWV0aGluZykKKwkJCXsKKwkJ CQkvKgorCQkJCSAqIFVzZSB0aGUgaGludCBiaXQgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgaWYg d2UgY2FuIHVwZGF0ZQorCQkJCSAqIHRoZSBwYWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJl IGxvY2suIElmIHdlIGFyZSBub3QKKwkJCQkgKiBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNv bnRpbnVpbmcuCisJCQkJICovCisJCQkJaWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1Zikp CisJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7CisJCQl9CisKKwkJCS8qIGZvdW5kIHRoZSBpdGVtL2Fs bCBwb3N0aW5nIGxpc3QgaXRlbXMgKi8KKwkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7CisJCQlraWxs ZWRzb21ldGhpbmcgPSB0cnVlOworCQl9CisJfQorCisJLyoKKwkgKiBTaW5jZSB0aGlzIGNhbiBi ZSByZWRvbmUgbGF0ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuCisJICoKKwkgKiBX aGVuZXZlciB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MK KwkgKiBCVFBfSEFTX0dBUkJBR0UgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVzdCBhIGhpbnQu ICAoTm90ZSB0aGF0IHdlCisJICogb25seSByZWx5IG9uIHRoZSBwYWdlLWxldmVsIGZsYWcgaW4g IWhlYXBrZXlzcGFjZSBpbmRleGVzLikKKwkgKi8KKwlpZiAoa2lsbGVkc29tZXRoaW5nKQorCXsK KwkJb3BhcXVlLT5idHBvX2ZsYWdzIHw9IEJUUF9IQVNfR0FSQkFHRTsKKwkJQnVmZmVyRmluaXNo U2V0SGludEJpdHMoYnVmLCB0cnVlLCB0cnVlKTsKKwl9CisKK3VubG9ja19wYWdlOgorCV9idF9y ZWxidWYocmVsLCBidWYpOworfQorCiAvKgogICoJYnRlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBh IHNjYW4KICAqLwpAQCAtNDU2LDExNiArNTQ3LDYzIEBAIGJ0ZW5kc2NhbihJbmRleFNjYW5EZXNj IHNjYW4pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OwogCi0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBkcm9w IHRoZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJ LyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVt cyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwot CQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQlzby0+bWFya0l0 ZW1JbmRleCA9IC0xOwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1hcmtQb3MpOwotCi0J LyogTm8gbmVlZCB0byBpbnZhbGlkYXRlIHBvc2l0aW9ucywgdGhlIFJBTSBpcyBhYm91dCB0byBi ZSBmcmVlZC4gKi8KLQogCS8qIFJlbGVhc2Ugc3RvcmFnZSAqLwogCWlmIChzby0+a2V5RGF0YSAh PSBOVUxMKQogCQlwZnJlZShzby0+a2V5RGF0YSk7CiAJLyogc28tPmFycmF5S2V5cyBhbmQgc28t Pm9yZGVyUHJvY3MgYXJlIGluIGFycmF5Q29udGV4dCAqLwogCWlmIChzby0+YXJyYXlDb250ZXh0 ICE9IE5VTEwpCiAJCU1lbW9yeUNvbnRleHREZWxldGUoc28tPmFycmF5Q29udGV4dCk7Ci0JaWYg KHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKQotCQlwZnJlZShzby0+a2lsbGVkSXRlbXMpOwotCWlm IChzby0+Y3VyclR1cGxlcyAhPSBOVUxMKQotCQlwZnJlZShzby0+Y3VyclR1cGxlcyk7Ci0JLyog c28tPm1hcmtUdXBsZXMgc2hvdWxkIG5vdCBiZSBwZnJlZSdkLCBzZWUgYnRyZXNjYW4gKi8KIAlw ZnJlZShzbyk7CiB9CiAKIC8qCi0gKglidG1hcmtwb3MoKSAtLSBzYXZlIGN1cnJlbnQgc2NhbiBw b3NpdGlvbgorICoJYnRwb3NyZXNldCgpIC0tIHJlc2V0IGFycmF5IGtleSBzdGF0ZSBmb3Igc2Nh biBwb3NpdGlvbiBjaGFuZ2UKKyAqCisgKiBDYWxsZWQgYnkgdGhlIGNvcmUgc3lzdGVtIHdoZW4g dGhlIHNjYW4ncyBsb2dpY2FsIHBvc2l0aW9uIGlzIGFib3V0IHRvCisgKiBjaGFuZ2UgaW4gYSB3 YXkgdGhhdCBpbnZhbGlkYXRlcyBvdXIgYXJyYXkga2V5IHN0YXRlLiAgVGhpcyBoYXBwZW5zIHdo ZW4KKyAqIHJlc3RvcmluZyBhIG1hcmtlZCBwb3NpdGlvbiwgb3Igd2hlbiB0aGUgc2NhbiBjcm9z c2VzIGEgYmF0Y2ggYm91bmRhcnkKKyAqIHdoaWxlIG1vdmluZyBpbiB0aGUgb3Bwb3NpdGUgZGly ZWN0aW9uIHRvIHRoZSBvbmUgb3JpZ2luYWxseSB1c2VkLgorICoKKyAqIEZvciBkaXJlY3Rpb24g Y2hhbmdlcywgdGhlIGNvcmUgc3lzdGVtIHdpbGwgaGF2ZSBhbHJlYWR5IGZsaXBwZWQgdGhlCisg KiBiYXRjaCdzIGRpciBmaWVsZCBiZWZvcmUgY2FsbGluZyBoZXJlOyB3ZSB1c2UgdGhpcyB1cGRh dGVkIGRpcmVjdGlvbiB3aGVuCisgKiByZXNldHRpbmcgb3VyIGFycmF5IGtleXMuICBGb3IgbWFy ayByZXN0b3JhdGlvbiwgdGhlIGJhdGNoJ3MgZGlyIHdpbGwKKyAqIHJldGFpbiBpdHMgb3JpZ2lu YWwgdmFsdWUgKGZyb20gd2hlbiBidGdldGJhdGNoIHJldHVybmVkIGl0KS4KICAqLwogdm9pZAot YnRtYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK2J0cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0YmF0Y2ggPSBCVEJhdGNoR2V0 RGF0YShzY2FuLCBiYXRjaCk7CiAKLQkvKiBUaGVyZSBtYXkgYmUgYW4gb2xkIG1hcmsgd2l0aCBh IHBpbiAoYnV0IG5vIGxvY2spLiAqLwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1hcmtQ b3MpOworCWlmICghc28tPm51bUFycmF5S2V5cykKKwkJcmV0dXJuOwogCiAJLyoKLQkgKiBKdXN0 IHJlY29yZCB0aGUgY3VycmVudCBpdGVtSW5kZXguICBJZiB3ZSBsYXRlciBzdGVwIHRvIG5leHQg cGFnZQotCSAqIGJlZm9yZSByZWxlYXNpbmcgdGhlIG1hcmtlZCBwb3NpdGlvbiwgX2J0X3N0ZXBw YWdlIG1ha2VzIGEgZnVsbCBjb3B5IG9mCi0JICogdGhlIGN1cnJQb3Mgc3RydWN0IGluIG1hcmtQ b3MuICBJZiAoYXMgb2Z0ZW4gaGFwcGVucykgdGhlIG1hcmsgaXMgbW92ZWQKLQkgKiBiZWZvcmUg d2UgbGVhdmUgdGhlIHBhZ2UsIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhhdCB3b3JrLgorCSAqIFJl c2V0IGFycmF5IGtleXMgdG8gaW5pdGlhbCBzdGF0ZSBmb3IgdGhlIGJhdGNoJ3Mgc2NhbiBkaXJl Y3Rpb24uICBBbHNvCisJICogY2xlYXIgbmVlZFByaW1TY2FuIGFuZCByZWxhdGVkIGZsYWdzLiAg VGhlc2Ugd2VyZSBzZXQgYmFzZWQgb24gdGhlIHNvZnQKKwkgKiBhc3N1bXB0aW9uIHRoYXQgdGhl IHNjYW4gd291bGQgYWx3YXlzIHByb2NlZWQgaW4gdGhlIHNhbWUgZGlyZWN0aW9uLgorCSAqCisJ ICogVGhlc2Ugc3RlcHMgd29yayBhcm91bmQgdGhlIHNvZnQgYXNzdW1wdGlvbiBiZWluZyB2aW9s YXRlZDogdGhleSBmb3JjZQorCSAqIHRoZSBzY2FuIHRvIHN0ZXAgdG8gdGhlIG5leHQvcHJldmlv dXMgcGFnZSwgbWFraW5nIHRoZSBhcnJheXMgcmVjb3Zlci4KKwkgKiBXaGVuIHdlIGdvIHRvIHJl YWQgdGhhdCBwYWdlLCBfYnRfcmVhZHBhZ2Ugd2lsbCByZWxpYWJseSBkZXRlcm1pbmUgaWYgYQor CSAqIHByaW1pdGl2ZSBzY2FuIHJlYWxseSBpcyBuZWVkZWQgYmFzZWQgb24gdGhlIHBhZ2UncyB0 dXBsZXMuICBJZiB0aGVyZSdzCisJICogYSBwcmltaXRpdmUgc2NhbiwgaXQgd2lsbCByZXBvc2l0 aW9uIHRoZSBzY2FuIHVzaW5nIG5ldyBhcnJheSB2YWx1ZXMKKwkgKiAoYmFzZWQgb24gdGhlIHR1 cGxlcyBmcm9tIHRoZSBuZWlnaGJvcmluZyBwYWdlIHdlJ2xsIHN0ZXAgb24gdG8pLgorCSAqCisJ ICogV2UgbmVlZCB0byByZXNldCB0aGUgYXJyYXkga2V5IHN0YXRlIGluIHRoZSBjb3JyZWN0IGRp cmVjdGlvbiBzbyB0aGF0CisJICogd2Ugd29uJ3QgZ2V0IGNvbmZ1c2VkLiAgV2hlbiB0aGUgYXJy YXkga2V5cyBhcmUgYmVoaW5kIHRoZSBrZXkgc3BhY2UKKwkgKiBmb3IgdGhlIHBhZ2Ugd2UncmUg c3RlcHBpbmcgb24gdG8gKGJlaGluZCBpbiB0ZXJtcyBvZiB0aGUgc2NhbiBkaXIpLAorCSAqIHRo ZXkgd2lsbCBjYXRjaCB1cCBhdXRvbWF0aWNhbGx5LiAgQnV0IHdoZW4gdGhleSdyZSBhaGVhZCBv ZiB0aGF0CisJICogcGFnZSdzIGtleSBzcGFjZSwgdGhlIHNjYW4gY291bGQgbWlzcyBtYXRjaGlu ZyB0dXBsZXMuCiAJICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlz by0+bWFya0l0ZW1JbmRleCA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKKwlfYnRfc3RhcnRfYXJy YXlfa2V5cyhzY2FuLCBiYXRjaC0+ZGlyKTsKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChi YXRjaC0+ZGlyKSkKKwkJYnRiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAllbHNlCi0JewotCQlC VFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAt MTsKLQl9Ci19Ci0KLS8qCi0gKglidHJlc3RycG9zKCkgLS0gcmVzdG9yZSBzY2FuIHRvIGxhc3Qg c2F2ZWQgcG9zaXRpb24KLSAqLwotdm9pZAotYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4p Ci17Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCi0J aWYgKHNvLT5tYXJrSXRlbUluZGV4ID49IDApCi0JewotCQkvKgotCQkgKiBUaGUgc2NhbiBoYXMg bmV2ZXIgbW92ZWQgdG8gYSBuZXcgcGFnZSBzaW5jZSB0aGUgbGFzdCBtYXJrLiAgSnVzdAotCQkg KiByZXN0b3JlIHRoZSBpdGVtSW5kZXguCi0JCSAqCi0JCSAqIE5COiBJbiB0aGlzIGNhc2Ugd2Ug Y2FuJ3QgY291bnQgb24gYW55dGhpbmcgaW4gc28tPm1hcmtQb3MgdG8gYmUKLQkJICogYWNjdXJh dGUuCi0JCSAqLwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBzby0+bWFya0l0ZW1JbmRleDsK LQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogVGhlIHNjYW4gbW92ZWQgdG8gYSBuZXcgcGFnZSBh ZnRlciBsYXN0IG1hcmsgb3IgcmVzdG9yZSwgYW5kIHdlIGFyZQotCQkgKiBub3cgcmVzdG9yaW5n IHRvIHRoZSBtYXJrZWQgcGFnZS4gIFdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFkCi0JCSAqIGxv Y2tzLCBidXQgaWYgd2UncmUgc3RpbGwgaG9sZGluZyB0aGUgcGluIGZvciB0aGUgY3VycmVudCBw b3NpdGlvbiwKLQkJICogd2UgbXVzdCBkcm9wIGl0LgotCQkgKi8KLQkJaWYgKEJUU2NhblBvc0lz VmFsaWQoc28tPmN1cnJQb3MpKQotCQl7Ci0JCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBh Z2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+ IDApCi0JCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJCUJUU2NhblBvc1VucGluSWZQaW5uZWQo c28tPmN1cnJQb3MpOwotCQl9Ci0KLQkJaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPm1hcmtQb3Mp KQotCQl7Ci0JCQkvKiBidW1wIHBpbiBvbiBtYXJrIGJ1ZmZlciBmb3IgYXNzaWdubWVudCB0byBj dXJyZW50IGJ1ZmZlciAqLwotCQkJaWYgKEJUU2NhblBvc0lzUGlubmVkKHNvLT5tYXJrUG9zKSkK LQkJCQlJbmNyQnVmZmVyUmVmQ291bnQoc28tPm1hcmtQb3MuYnVmKTsKLQkJCW1lbWNweSgmc28t PmN1cnJQb3MsICZzby0+bWFya1BvcywKLQkJCQkgICBvZmZzZXRvZihCVFNjYW5Qb3NEYXRhLCBp dGVtc1sxXSkgKwotCQkJCSAgIHNvLT5tYXJrUG9zLmxhc3RJdGVtICogc2l6ZW9mKEJUU2NhblBv c0l0ZW0pKTsKLQkJCWlmIChzby0+Y3VyclR1cGxlcykKLQkJCQltZW1jcHkoc28tPmN1cnJUdXBs ZXMsIHNvLT5tYXJrVHVwbGVzLAotCQkJCQkgICBzby0+bWFya1Bvcy5uZXh0VHVwbGVPZmZzZXQp OwotCQkJLyogUmVzZXQgdGhlIHNjYW4ncyBhcnJheSBrZXlzIChzZWUgX2J0X3N0ZXBwYWdlIGZv ciB3aHkpICovCi0JCQlpZiAoc28tPm51bUFycmF5S2V5cykKLQkJCXsKLQkJCQlfYnRfc3RhcnRf YXJyYXlfa2V5cyhzY2FuLCBzby0+Y3VyclBvcy5kaXIpOwotCQkJCXNvLT5uZWVkUHJpbVNjYW4g PSBmYWxzZTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5j dXJyUG9zKTsKLQl9CisJCWJ0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwlzby0+bmVlZFByaW1T Y2FuID0gZmFsc2U7CisJc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKKwlzby0+b3Bwb3NpdGVEaXJD aGVjayA9IGZhbHNlOwogfQogCiAvKgpAQCAtODg0LDE1ICs5MjIsNiBAQCBfYnRfcGFyYWxsZWxf c2VpemUoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciAqbmV4dF9zY2FuX3BhZ2UsCiAJ Km5leHRfc2Nhbl9wYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCSpsYXN0X2N1cnJfcGFnZSA9 IEludmFsaWRCbG9ja051bWJlcjsKIAotCS8qCi0JICogUmVzZXQgc28tPmN1cnJQb3MsIGFuZCBp bml0aWFsaXplIG1vcmVMZWZ0L21vcmVSaWdodCBzdWNoIHRoYXQgdGhlIG5leHQKLQkgKiBjYWxs IHRvIF9idF9yZWFkbmV4dHBhZ2UgdHJlYXRzIHRoaXMgYmFja2VuZCBzaW1pbGFybHkgdG8gYSBz ZXJpYWwKLQkgKiBiYWNrZW5kIHRoYXQgc3RlcHMgZnJvbSAqbGFzdF9jdXJyX3BhZ2UgdG8gKm5l eHRfc2Nhbl9wYWdlICh1bmxlc3MgdGhpcwotCSAqIGJhY2tlbmQncyBzby0+Y3VyclBvcyBpcyBp bml0aWFsaXplZCBieSBfYnRfcmVhZGZpcnN0cGFnZSBiZWZvcmUgdGhlbikuCi0JICovCi0JQlRT Y2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0Jc28tPmN1cnJQb3MubW9yZUxlZnQgPSBz by0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOwotCiAJaWYgKGZpcnN0KQogCXsKIAkJLyoKQEAg LTEwNDIsOCArMTA3MSw2IEBAIF9idF9wYXJhbGxlbF9kb25lKEluZGV4U2NhbkRlc2Mgc2NhbikK IAlCVFBhcmFsbGVsU2NhbkRlc2MgYnRzY2FuOwogCWJvb2wJCXN0YXR1c19jaGFuZ2VkID0gZmFs c2U7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQogCS8qIERv IG5vdGhpbmcsIGZvciBub24tcGFyYWxsZWwgc2NhbnMgKi8KIAlpZiAocGFyYWxsZWxfc2NhbiA9 PSBOVUxMKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRl eCBhYWU2YWNiN2YuLjRjOTRiOWU1OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJj aC5jCkBAIC0yMyw1MyArMjMsNDggQEAKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJz dG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1 ZGUgInV0aWxzL21lbWRlYnVnLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIAotc3RhdGlj IGlubGluZSB2b2lkIF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJU U2Nhbk9wYXF1ZSBzbyk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2J0X2JhdGNoX3VubG9jayhJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJCQkJQnVmZmVyIGJ1 Zik7CiBzdGF0aWMgQnVmZmVyIF9idF9tb3ZlcmlnaHQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBo ZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJCUJ1ZmZlciBidWYsIGJvb2wgZm9ydXBk YXRlLCBCVFN0YWNrIHN0YWNrLAogCQkJCQkJCWludCBhY2Nlc3MpOwogc3RhdGljIE9mZnNldE51 bWJlciBfYnRfYmluc3JjaChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIEJ1ZmZlciBi dWYpOwogc3RhdGljIGludAlfYnRfYmluc3JjaF9wb3N0aW5nKEJUU2Nhbkluc2VydCBrZXksIFBh Z2UgcGFnZSwKIAkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSk7Ci1zdGF0aWMgaW5saW5lIHZv aWQgX2J0X3JldHVybml0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5PcGFxdWUgc28pOwot c3RhdGljIGJvb2wgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpOwotc3RhdGljIGJvb2wgX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2Fu LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXIpOwotc3Rh dGljIGJvb2wgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVy IGJsa25vLAotCQkJCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9u IGRpciwKLQkJCQkJCQkgYm9vbCBzZWl6ZWQpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9y ZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRj aCwKKwkJCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7Citz dGF0aWMgSW5kZXhTY2FuQmF0Y2ggX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IEJsb2NrTnVtYmVyIGJsa25vLAorCQkJCQkJCQkJICAgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtu bywKKwkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSk7CiBzdGF0 aWMgQnVmZmVyIF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KFJlbGF0aW9uIHJlbCwgQmxvY2tO dW1iZXIgKmJsa25vLAogCQkJCQkJCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vKTsKLXN0 YXRpYyBib29sIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiAKIAogLyoKLSAqCV9idF9kcm9wX2xvY2tfYW5kX21h eWJlX3BpbigpCisgKiBfYnRfYmF0Y2hfdW5sb2NrKCkgLS0gbmJ0cmVlIHdyYXBwZXIgZm9yIGlu ZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2guCiAgKgotICogVW5sb2NrIHNvLT5jdXJyUG9zLmJ1Zi4g IElmIHNjYW4gaXMgc28tPmRyb3BQaW4sIGRyb3AgdGhlIHBpbiwgdG9vLgotICogRHJvcHBpbmcg dGhlIHBpbiBwcmV2ZW50cyBWQUNVVU0gZnJvbSBibG9ja2luZyBvbiBhY3F1aXJpbmcgYSBjbGVh bnVwIGxvY2suCisgKiBQZXJmb3JtcyB0aGUgc2FtZSBWYWxncmluZCBpbnN0cnVtZW50YXRpb24g YXMgX2J0X3VubG9ja2J1Zi4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1fYnRfZHJvcF9sb2Nr X2FuZF9tYXliZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pCitfYnRfYmF0Y2hf dW5sb2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJ1ZmZlciBi dWYpCiB7Ci0JaWYgKCFzby0+ZHJvcFBpbikKLQl7Ci0JCS8qIEp1c3QgZHJvcCB0aGUgbG9jayAo bm90IHRoZSBwaW4pICovCi0JCV9idF91bmxvY2tidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwot CQlyZXR1cm47Ci0JfQorI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCVBhZ2UJCXBhZ2UgPSBC dWZmZXJHZXRQYWdlKGJ1Zik7CiAKLQkvKgotCSAqIERyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhl IHBpbi4KLQkgKgotCSAqIEhhdmUgdG8gc2V0IHNvLT5jdXJyUG9zLmxzbiBzbyB0aGF0IF9idF9r aWxsaXRlbXMgaGFzIGEgd2F5IHRvIGRldGVjdAotCSAqIHdoZW4gY29uY3VycmVudCBoZWFwIFRJ RCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4gcGxhY2UuCi0JICovCi0Jc28t PmN1cnJQb3MubHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKHNvLT5jdXJyUG9zLmJ1Zik7Ci0JX2J0 X3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxp ZEJ1ZmZlcjsKKwlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5FRChwYWdlLCBCTENLU1opOwor I2VuZGlmCisKKwlpbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoKHNjYW4sIGJhdGNoLCBidWYpOwor CisjaWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCisJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZl cnMoc2Nhbi0+aW5kZXhSZWxhdGlvbikpCisJCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKHBh Z2UsIEJMQ0tTWik7CisjZW5kaWYKIH0KIAogLyoKQEAgLTg2MCwyNiArODU1LDI1IEBAIF9idF9j b21wYXJlKFJlbGF0aW9uIHJlbCwKIH0KIAogLyoKLSAqCV9idF9maXJzdCgpIC0tIEZpbmQgdGhl IGZpcnN0IGl0ZW0gaW4gYSBzY2FuLgorICoJX2J0X2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3Qg YmF0Y2ggaW4gYSBzY2FuLgogICoKICAqCQlXZSBuZWVkIHRvIGJlIGNsZXZlciBhYm91dCB0aGUg ZGlyZWN0aW9uIG9mIHNjYW4sIHRoZSBzZWFyY2gKLSAqCQljb25kaXRpb25zLCBhbmQgdGhlIHRy ZWUgb3JkZXJpbmcuICBXZSBmaW5kIHRoZSBmaXJzdCBpdGVtIChvciwKLSAqCQlpZiBiYWNrd2Fy ZHMgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4gdGhlIHRyZWUgdGhhdCBzYXRpc2ZpZXMgdGhlCi0g KgkJcXVhbGlmaWNhdGlvbnMgaW4gdGhlIHNjYW4ga2V5LiAgT24gc3VjY2VzcyBleGl0LCBkYXRh IGFib3V0IHRoZQotICoJCW1hdGNoaW5nIHR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxv YWRlZCBpbnRvIHNvLT5jdXJyUG9zLiAgV2UnbGwKLSAqCQlkcm9wIGFsbCBsb2NrcyBhbmQgaG9s ZCBvbnRvIGEgcGluIG9uIHBhZ2UncyBidWZmZXIsIGV4Y2VwdCBkdXJpbmcKLSAqCQlzby0+ZHJv cFBpbiBzY2Fucywgd2hlbiB3ZSBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4uCi0gKgkJ X2J0X3JldHVybml0ZW0gc2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJldHVybiB0byBzY2FuIG9uIHN1 Y2Nlc3MgZXhpdC4KKyAqCQljb25kaXRpb25zLCBhbmQgdGhlIHRyZWUgb3JkZXJpbmcuICBXZSBm aW5kIHRoZSBmaXJzdCBsZWFmIHBhZ2UgKG9yCisgKgkJdGhlIGxhc3QgbGVhZiBwYWdlLCB3aGVu IHNjYW5uaW5nIGJhY2t3YXJkcykgaW4gdGhlIHRyZWUgd2l0aCBhdCBsZWFzdAorICoJCW9uZSB0 dXBsZSB0aGF0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbnMgaW4gdGhlIHNjYW4ga2V5LiAg T24KKyAqCQlzdWNjZXNzIGV4aXQsIHdlIHJldHVybiBhIG5ldyBiYXRjaCB3aXRoIHRoYXQgcGFn ZSdzIG1hdGNoaW5nIGl0ZW1zLgogICoKLSAqIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBpdGVt cyBpbiB0aGUgaW5kZXgsIHdlIHJldHVybiBmYWxzZSwgd2l0aCBubwotICogcGlucyBvciBsb2Nr cyBoZWxkLiAgc28tPmN1cnJQb3Mgd2lsbCByZW1haW4gaW52YWxpZC4KKyAqIElmIHRoZXJlIGFy ZSBubyBtYXRjaGluZyBpdGVtcyBpbiB0aGUgaW5kZXggKGluIHRoZSBnaXZlbiBzY2FuIGRpcmVj dGlvbiksCisgKiB3ZSBqdXN0IHJldHVybiBOVUxMLiAgTm90ZSB0aGF0IHJldHVybmluZyBOVUxM IGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGUKKyAqIGVuZCBvZiB0aGUgdG9wLWxldmVsIHNj YW47IGNhbGxlciBzaG91bGQgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0bworICogZGV0ZXJtaW5l IGlmIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gaXMgcmVxdWlyZWQuCiAgKgogICogTm90 ZSB0aGF0IHNjYW4tPmtleURhdGFbXSwgYW5kIHRoZSBzby0+a2V5RGF0YVtdIHNjYW5rZXkgYnVp bHQgZnJvbSBpdCwKICAqIGFyZSBib3RoIHNlYXJjaC10eXBlIHNjYW5rZXlzIChzZWUgbmJ0cmVl L1JFQURNRSBmb3IgbW9yZSBhYm91dCB0aGlzKS4KICAqIFdpdGhpbiB0aGlzIHJvdXRpbmUsIHdl IGJ1aWxkIGEgdGVtcG9yYXJ5IGluc2VydGlvbi10eXBlIHNjYW5rZXkgdG8gdXNlCiAgKiBpbiBs b2NhdGluZyB0aGUgc2NhbiBzdGFydCBwb3NpdGlvbi4KICAqLwotYm9vbAorSW5kZXhTY2FuQmF0 Y2gKIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogewog CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CkBAIC04OTIsOCArODg2LDggQEAg X2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJU3RyYXRl Z3lOdW1iZXIgc3RyYXRfdG90YWwgPSBJbnZhbGlkU3RyYXRlZ3k7CiAJQmxvY2tOdW1iZXIgYmxr bm8gPSBJbnZhbGlkQmxvY2tOdW1iZXIsCiAJCQkJbGFzdGN1cnJibGtubzsKLQotCUFzc2VydCgh QlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOworCUluZGV4U2NhbkJhdGNoIGZpcnN0YmF0 Y2g7CisJQlRCYXRjaERhdGEgKmJ0Zmlyc3RiYXRjaDsKIAogCS8qCiAJICogRXhhbWluZSB0aGUg c2NhbiBrZXlzIGFuZCBlbGltaW5hdGUgYW55IHJlZHVuZGFudCBrZXlzOyBhbHNvIG1hcmsgdGhl CkBAIC05MDksNyArOTAzLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCiAJewogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCQlfYnRfcGFy YWxsZWxfZG9uZShzY2FuKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAl9CiAK IAkvKgpAQCAtOTE4LDcgKzkxMiw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQogCSAqLwogCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwg JiYKIAkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCB0 cnVlKSkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsJCQkvKiBkZWZpbml0ZWx5IGRv bmUgKHNvLT5uZWVkUHJpbVNjYW4gaXMgdW5zZXQpICovCiAKIAkvKgogCSAqIEluaXRpYWxpemUg dGhlIHNjYW4ncyBhcnJheXMgKGlmIGFueSkgZm9yIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9u CkBAIC05MzgsMTEgKzkzMiw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCQlBc3NlcnQoYmxr bm8gIT0gUF9OT05FKTsKIAotCQlpZiAoIV9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxh c3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJX2J0X3JldHVy bml0ZW0oc2Nhbiwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIF9idF9yZWFkbmV4dHBh Z2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSk7CiAJfQogCiAJLyoKQEAg LTE1MDIsMTcgKzE0OTIsMjEgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCiAJCWRlZmF1bHQ6CiAJCQkvKiBjYW4ndCBnZXQgaGVyZSwgYnV0IGtlZXAg Y29tcGlsZXIgcXVpZXQgKi8KIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgc3RyYXRfdG90 YWw6ICVkIiwgKGludCkgc3RyYXRfdG90YWwpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJu IE5VTEw7CiAJfQogCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJhdGNoIGJlZm9yZSBs b2NraW5nIGFueXRoaW5nICovCisJZmlyc3RiYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRj aChzY2FuKTsKKwlidGZpcnN0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBmaXJzdGJhdGNo KTsKKwogCS8qCiAJICogVXNlIHRoZSBtYW51ZmFjdHVyZWQgaW5zZXJ0aW9uIHNjYW4ga2V5IHRv IGRlc2NlbmQgdGhlIHRyZWUgYW5kCiAJICogcG9zaXRpb24gb3Vyc2VsdmVzIG9uIHRoZSB0YXJn ZXQgbGVhZiBwYWdlLgogCSAqLwogCUFzc2VydChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIp ID09IGluc2tleS5iYWNrd2FyZCk7Ci0JX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZz by0+Y3VyclBvcy5idWYsIEJUX1JFQUQsIGZhbHNlKTsKKwlfYnRfc2VhcmNoKHJlbCwgTlVMTCwg Jmluc2tleSwgJmJ0Zmlyc3RiYXRjaC0+YnVmLCBCVF9SRUFELCBmYWxzZSk7CiAKLQlpZiAoIUJ1 ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwlpZiAodW5saWtlbHkoIUJ1ZmZlcklzVmFs aWQoYnRmaXJzdGJhdGNoLT5idWYpKSkKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7 CiAKQEAgLTE1MjgsMjIgKzE1MjIsMjMgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCiAJCWlmIChJc29sYXRpb25Jc1NlcmlhbGl6YWJsZSgpKQogCQl7 CiAJCQlQcmVkaWNhdGVMb2NrUmVsYXRpb24ocmVsLCBzY2FuLT54c19zbmFwc2hvdCk7Ci0JCQlf YnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCwg ZmFsc2UpOworCQkJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZidGZpcnN0YmF0Y2gt PmJ1ZiwgQlRfUkVBRCwgZmFsc2UpOwogCQl9CiAKLQkJaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5j dXJyUG9zLmJ1ZikpCisJCWlmICghQnVmZmVySXNWYWxpZChidGZpcnN0YmF0Y2gtPmJ1ZikpCiAJ CXsKIAkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQkJcmV0dXJuIGZhbHNlOworCQkJaW5k ZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgZmlyc3RiYXRjaCk7CisJCQlyZXR1cm4gTlVM TDsKIAkJfQogCX0KIAogCS8qIHBvc2l0aW9uIHRvIHRoZSBwcmVjaXNlIGl0ZW0gb24gdGhlIHBh Z2UgKi8KLQlvZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIHNvLT5jdXJyUG9zLmJ1 Zik7CisJb2ZmbnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBidGZpcnN0YmF0Y2gtPmJ1 Zik7CiAKIAkvKgogCSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUg c2NhbiAodXN1YWxseSB0aGUgcGFnZQotCSAqIGN1cnJlbnRseSBpbiBzby0+Y3VyclBvcy5idWYp LgorCSAqIGN1cnJlbnRseSBpbiBmaXJzdGJhdGNoLmJ1ZikuCiAJICoKIAkgKiBJZiBpbnNrZXku bmV4dGtleSA9IGZhbHNlIGFuZCBpbnNrZXkuYmFja3dhcmQgPSBmYWxzZSwgb2ZmbnVtIGlzCiAJ ICogcG9zaXRpb25lZCBhdCB0aGUgZmlyc3Qgbm9uLXBpdm90IHR1cGxlID49IGluc2tleS5zY2Fu a2V5cy4KQEAgLTE1NjEsMTY0ICsxNTU2LDcyIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIGZvciB0aGUgcGFnZS4gIEZvciBleGFtcGxlLCB3 aGVuIGluc2tleSBpcyBib3RoIDwgdGhlIGxlYWYgcGFnZSdzIGhpZ2gKIAkgKiBrZXkgYW5kID4g YWxsIG9mIGl0cyBub24tcGl2b3QgdHVwbGVzLCBvZmZudW0gd2lsbCBiZSAibWF4b2ZmICsgMSIu CiAJICovCi0JaWYgKCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBvZmZudW0sIGRpcikpCi0JCXJl dHVybiBmYWxzZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsK KwlyZXR1cm4gX2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgb2ZmbnVtLCBkaXIp OwogfQogCiAvKgotICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgaXRlbSBpbiBhIHNjYW4u CisgKglfYnRfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBiYXRjaCBpbiBhIHNjYW4uCiAgKgotICoJ CU9uIGVudHJ5LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2gg bWF5IGJlIHBpbm5lZAotICoJCWJ1dCBpcyBub3QgbG9ja2VkLCBhbmQgc28tPmN1cnJQb3MuaXRl bUluZGV4IGlkZW50aWZpZXMgd2hpY2ggaXRlbSB3YXMKLSAqCQlwcmV2aW91c2x5IHJldHVybmVk LgorICoJCU9uIGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUgYmF0Y2ggdGhhdCB3YXMg bGFzdCByZXR1cm5lZCBieQorICoJCWJ0Z2V0YmF0Y2guICBXZSdsbCB1c2UgdGhlIHByaW9yIGJh dGNoJ3MgcG9zaXRpb25pbmcgaW5mb3JtYXRpb24gdG8KKyAqCQlkZWNpZGUgd2hpY2ggbGVhZiBw YWdlIHRvIHJlYWQgbmV4dC4KICAqCi0gKgkJT24gc3VjY2VzcyBleGl0LCBzby0+Y3VyclBvcyBp cyB1cGRhdGVkIGFzIG5lZWRlZCwgYW5kIF9idF9yZXR1cm5pdGVtCi0gKgkJc2V0cyB0aGUgbmV4 dCBpdGVtIHRvIHJldHVybiB0byB0aGUgc2Nhbi4gIHNvLT5jdXJyUG9zIHJlbWFpbnMgdmFsaWQu Ci0gKgotICoJCU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSBpbnZhbGlkYXRl IHNvLT5jdXJyUG9zLiAgSXQnbGwKLSAqCQlzdGlsbCBiZSBwb3NzaWJsZSBmb3IgdGhlIHNjYW4g dG8gcmV0dXJuIHR1cGxlcyBieSBjaGFuZ2luZyBkaXJlY3Rpb24sCi0gKgkJdGhvdWdoIHdlJ2xs IG5lZWQgdG8gY2FsbCBfYnRfZmlyc3QgYW5ldyBpbiB0aGF0IG90aGVyIGRpcmVjdGlvbi4KKyAq CQlPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgdGhlIG5leHQgYmF0Y2guICBUaGVyZSBtdXN0IGJl IGF0IGxlYXN0IG9uZQorICoJCW1hdGNoaW5nIHR1cGxlIG9uIGFueSByZXR1cm5lZCBiYXRjaCAo ZWxzZSB3ZSdkIGp1c3QgcmV0dXJuIE5VTEwpLgorICoJCU5vdGUgdGhhdCByZXR1cm5pbmcgTlVM TCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIGVuZCBvZiB0aGUKKyAqCQl0b3AtbGV2ZWwg c2NhbjsgY2FsbGVyIHNob3VsZCBjaGVjayBzby0+bmVlZFByaW1TY2FuIHRvIGRldGVybWluZQor ICoJCWlmIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gaXMgcmVxdWlyZWQuCiAgKi8KLWJv b2wKLV9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRl eFNjYW5CYXRjaAorX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCkKIHsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+ Y3VyclBvcykpOwotCi0JLyoKLQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBw YWdlOyBvciBpZiB0aGVyZSdzIG5vIG1vcmUsIHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQg cGFnZSB3aXRoIGRhdGEuCi0JICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkK LQl7Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVt KQotCQl7Ci0JCQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxz ZTsKLQkJfQotCX0KLQllbHNlCi0JewotCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBz by0+Y3VyclBvcy5maXJzdEl0ZW0pCi0JCXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRp cikpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwg c28pOwotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogUmV0dXJuIHRoZSBpbmRleCBpdGVtIGZy b20gc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XSB0byB0aGUKLSAqIGlu ZGV4IHNjYW4gYnkgc2V0dGluZyB0aGUgcmVsZXZhbnQgZmllbGRzIGluIGNhbGxlcidzIGluZGV4 IHNjYW4gZGVzY3JpcHRvcgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9yZXR1cm5pdGVt KEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKQotewotCUJUU2NhblBvc0l0ZW0g KmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0K LQkvKiBNb3N0IHJlY2VudCBfYnRfcmVhZHBhZ2UgbXVzdCBoYXZlIHN1Y2NlZWRlZCAqLwotCUFz c2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9z Lml0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0pOwotCUFzc2VydChzby0+Y3VyclBv cy5pdGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOwotCi0JLyogUmV0dXJuIG5leHQg aXRlbSwgcGVyIGFtZ2V0dHVwbGUgY29udHJhY3QgKi8KLQlzY2FuLT54c19oZWFwdGlkID0gY3Vy ckl0ZW0tPmhlYXBUaWQ7Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQlzY2FuLT54c19pdHVwID0g KEluZGV4VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Ci19 Ci0KLS8qCi0gKglfYnRfc3RlcHBhZ2UoKSAtLSBTdGVwIHRvIG5leHQgcGFnZSBjb250YWluaW5n IHZhbGlkIGRhdGEgZm9yIHNjYW4KLSAqCi0gKiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2Ug dGhhdCBwZXJmb3JtcyBmaW5hbCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBP biBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBw aW5uZWQsIHRob3VnaAotICogbmV2ZXIgbG9ja2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQ aW4gdGhlcmUgd29uJ3QgZXZlbiBiZSBhIHBpbiBoZWxkLAotICogdGhvdWdoIHNvLT5jdXJyUG9z LmN1cnJQYWdlIG11c3Qgc3RpbGwgYmUgc2V0IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKLSAq Lwotc3RhdGljIGJvb2wKLV9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRwcmlvcmJhdGNoID0gQlRCYXRjaEdldERhdGEoc2Nhbiwg cHJpb3JiYXRjaCk7CiAJQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJbGFzdGN1cnJibGtubzsKLQot CUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKiBCZWZvcmUgbGVh dmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JaWYgKHNv LT5udW1LaWxsZWQgPiAwKQotCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOworCWJvb2wJCW1vcmVJbkRp cjsKIAogCS8qCi0JICogQmVmb3JlIHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0 aGUgcGFnZSBkYXRhIGlmIHRoZXJlIHdhcyBhCi0JICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRz IGl0LgorCSAqIFRoZSBjb3JlIGNvZGUgbXVzdCBkZWFsIHdpdGggY3Jvc3MtYmF0Y2ggc2NhbiBk aXJlY3Rpb24gY2hhbmdlcyBmb3IgdXMuCisJICogQSBiYXRjaCBtYW5hZ2VtZW50IHJvdXRpbmUg dGhhdCBmbGlwcyBwcmlvcmJhdGNoJ3Mgc2NhbiBkaXJlY3Rpb24gKGFuZAorCSAqIGNhbGxzIGJ0 cG9zcmVzZXQgdG8gZGVhbCB3aXRoIHRoZSBzY2FuJ3MgYXJyYXkga2V5cykgaXMgdXNlZCBmb3Ig dGhpcy4KIAkgKi8KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qIGJ1bXAg cGluIG9uIGN1cnJlbnQgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIG1hcmsgYnVmZmVyICovCi0J CWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JCQlJbmNyQnVmZmVyUmVmQ291 bnQoc28tPmN1cnJQb3MuYnVmKTsKLQkJbWVtY3B5KCZzby0+bWFya1BvcywgJnNvLT5jdXJyUG9z LAotCQkJICAgb2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCSAgIHNvLT5j dXJyUG9zLmxhc3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsKLQkJaWYgKHNvLT5tYXJr VHVwbGVzKQotCQkJbWVtY3B5KHNvLT5tYXJrVHVwbGVzLCBzby0+Y3VyclR1cGxlcywKLQkJCQkg ICBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQpOwotCQlzby0+bWFya1Bvcy5pdGVtSW5kZXgg PSBzby0+bWFya0l0ZW1JbmRleDsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQotCQkvKgot CQkgKiBJZiB3ZSdyZSBqdXN0IGFib3V0IHRvIHN0YXJ0IHRoZSBuZXh0IHByaW1pdGl2ZSBpbmRl eCBzY2FuCi0JCSAqIChwb3NzaWJsZSB3aXRoIGEgc2NhbiB0aGF0IGhhcyBhcnJheXMga2V5cywg YW5kIG5lZWRzIHRvIHNraXAgdG8KLQkJICogY29udGludWUgaW4gdGhlIGN1cnJlbnQgc2NhbiBk aXJlY3Rpb24pLCBtb3JlTGVmdC9tb3JlUmlnaHQgb25seQotCQkgKiBpbmRpY2F0ZSB0aGUgZW5k IG9mIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuLiAgVGhleSBtdXN0Ci0JCSAqIG5l dmVyIGJlIHRha2VuIHRvIGluZGljYXRlIHRoYXQgdGhlIHRvcC1sZXZlbCBpbmRleCBzY2FuIGhh cyBlbmRlZAotCQkgKiAodGhhdCB3b3VsZCBiZSB3cm9uZykuCi0JCSAqCi0JCSAqIFdlIGNvdWxk IGhhbmRsZSB0aGlzIGNhc2UgYnkgdHJlYXRpbmcgdGhlIGN1cnJlbnQgYXJyYXkga2V5cyBhcwot CQkgKiBtYXJrUG9zIHN0YXRlLiAgQnV0IGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBhcnJheSBz dGF0ZSBsaWtlIHRoaXMKLQkJICogd291bGQgYWRkIGNvbXBsZXhpdHkuICBJbnN0ZWFkLCB3ZSBq dXN0IHVuc2V0IG1hcmtQb3MncyBjb3B5IG9mCi0JCSAqIG1vcmVSaWdodCBvciBtb3JlTGVmdCAo d2hpY2hldmVyIG1pZ2h0IGJlIGFmZmVjdGVkKSwgd2hpbGUgbWFraW5nCi0JCSAqIGJ0cmVzdHJw b3MgcmVzZXQgdGhlIHNjYW4ncyBhcnJheXMgdG8gdGhlaXIgaW5pdGlhbCBzY2FuIHBvc2l0aW9u cy4KLQkJICogSW4gZWZmZWN0LCBidHJlc3RycG9zIGxlYXZlcyBhZHZhbmNpbmcgdGhlIGFycmF5 cyB1cCB0byB0aGUgZmlyc3QKLQkJICogX2J0X3JlYWRwYWdlIGNhbGwgKHRoYXQgdGFrZXMgcGxh Y2UgYWZ0ZXIgaXQgaGFzIHJlc3RvcmVkIG1hcmtQb3MpLgotCQkgKi8KLQkJaWYgKHNvLT5uZWVk UHJpbVNjYW4pCi0JCXsKLQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKHNvLT5jdXJyUG9z LmRpcikpCi0JCQkJc28tPm1hcmtQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQkJCWVsc2UKLQkJCQlz by0+bWFya1Bvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCX0KLQotCQkvKiBtYXJrL3Jlc3RvcmUgbm90 IHN1cHBvcnRlZCBieSBwYXJhbGxlbCBzY2FucyAqLwotCQlBc3NlcnQoIXNjYW4tPnBhcmFsbGVs X3NjYW4pOwotCX0KLQotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOworCUFz c2VydChwcmlvcmJhdGNoLT5kaXIgPT0gZGlyKTsKIAogCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFn ZSB3aXRoIGRhdGEgKi8KIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlibGtu byA9IHNvLT5jdXJyUG9zLm5leHRQYWdlOworCQlibGtubyA9IGJ0cHJpb3JiYXRjaC0+bmV4dFBh Z2U7CiAJZWxzZQotCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCWxhc3RjdXJyYmxr bm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKKwkJYmxrbm8gPSBidHByaW9yYmF0Y2gtPnByZXZQ YWdlOworCWxhc3RjdXJyYmxrbm8gPSBidHByaW9yYmF0Y2gtPmN1cnJQYWdlOworCW1vcmVJbkRp ciA9IFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCWJ0cHJpb3JiYXRjaC0+bW9yZVJp Z2h0IDogYnRwcmlvcmJhdGNoLT5tb3JlTGVmdDsKIAogCS8qCi0JICogQ2FuY2VsIHByaW1pdGl2 ZSBpbmRleCBzY2FucyB0aGF0IHdlcmUgc2NoZWR1bGVkIHdoZW4gdGhlIGNhbGwgdG8KLQkgKiBf YnRfcmVhZHBhZ2UgZm9yIGN1cnJQb3MgaGFwcGVuZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJl Y3Rpb24gdG8gdGhlCi0JICogb25lIHRoYXQgd2UncmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mg b2theSB0byBsZWF2ZSB0aGUgc2NhbidzIGFycmF5Ci0JICoga2V5cyBhcy1pcywgc2luY2UgdGhl IG5leHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0aGVtLikKKwkgKiBGb3IgYml0bWFwIHNj YW4gY2FsbGVycywgcmVsZWFzZSB0aGUgcHJpb3IgYmF0Y2ggbm93IHNvIHRoYXQKKwkgKiBfYnRf cmVhZG5leHRwYWdlIGNhbiByZXVzZSBpdHMgbWVtb3J5LiAgVGhhdCB3YXkgYml0bWFwIHNjYW5z IG5ldmVyCisJICogbmVlZCBtb3JlIHRoYW4gb25lIGJhdGNoIGFsbG9jYXRpb24uCiAJICovCi0J aWYgKHNvLT5jdXJyUG9zLmRpciAhPSBkaXIpCi0JCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsK KwlpZiAoIXNjYW4tPnVzZWJhdGNocmluZykKKwkJaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2go c2NhbiwgcHJpb3JiYXRjaCk7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8ICFtb3JlSW5EaXIp CisJeworCQkvKgorCQkgKiBwcmlvcmJhdGNoJ3MgcGFnZSBpcyBrbm93biB0byBiZSB0aGUgZmlu YWwgbGVhZiBwYWdlIHdpdGggbWF0Y2hlcworCQkgKiBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uIChp dHMgX2J0X3JlYWRwYWdlIGNhbGwgZmlndXJlZCB0aGF0IG91dCkuCisJCSAqCisJCSAqIE5vdGU6 IGlmIHNvLT5uZWVkUHJpbVNjYW4gaXMgc2V0LCB0aGVuIHByaW9yYmF0Y2gncyBsZWFmIHBhZ2Ug aXMKKwkJICogYWN0dWFsbHkganVzdCB0aGUgZmluYWwgcGFnZSBmb3IgdGhlIGN1cnJlbnQgcHJp bWl0aXZlIGluZGV4IHNjYW4KKwkJICogaW4gdGhpcyBzY2FuIGRpcmVjdGlvbiAodGhlIHNjYW4g d2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpLgorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6 ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2Fu ICE9IE5VTEwgJiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3Vy cmJsa25vLCBmYWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJp bVNjYW4gd2Fzbid0IHNldCAqLwogCiAJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxr bm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQpAQCAtMTczMiwxNzggKzE2MzUsMTY5 IEBAIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog ICogdG8gc3RvcCB0aGUgc2NhbiBvbiB0aGlzIHBhZ2UgYnkgY2FsbGluZyBfYnRfY2hlY2trZXlz IGFnYWluc3QgdGhlIGhpZ2gKICAqIGtleS4gIFNlZSBfYnRfcmVhZHBhZ2UgZm9yIGZ1bGwgZGV0 YWlscy4KICAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSBwaW5uZWQgYW5kIGxv Y2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4KKyAqIE9uIGVudHJ5LCBmaXJzdGJhdGNoIG11 c3QgYmUgcGlubmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCiAgKiBQYXJh bGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBoYXZlIHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGlu ZyBoZXJlLgogICoKLSAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBzby0+Y3VyclBvcyBh bmQgcmV0YWluZWQgbG9ja3MgYW5kIHBpbnMKLSAqIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxl cyBhcyB0aG9zZSBsYWlkIG91dCBmb3IgX2J0X3JlYWRuZXh0cGFnZSBleGl0LgotICogTGlrZSBf YnRfcmVhZG5leHRwYWdlLCBvdXIgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiB0aGVyZSBhcmUg YW55IG1hdGNoaW5nCi0gKiByZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCisgKiBPbiBz dWNjZXNzIGV4aXQsIHJldHVybnMgdW5sb2NrZWQgYmF0Y2ggY29udGFpbmluZyBkYXRhIGZyb20g dGhlIG5leHQgcGFnZQorICogdGhhdCBoYXMgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGl0ZW0uICBJ ZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlCisgKiBnaXZlbiBzY2FuIGRpcmVj dGlvbiwgd2UganVzdCByZXR1cm4gTlVMTC4gIE5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTAorICog ZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHRoZSBlbmQgb2YgdGhlIHRvcC1sZXZlbCBzY2FuOyBi dGdldGJhdGNoIGFuZAorICogYnRnZXRiaXRtYXAgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0byBk ZXRlcm1pbmUgaWYgYW5vdGhlciBwcmltaXRpdmUgaW5kZXgKKyAqIHNjYW4gaXMgcmVxdWlyZWQu CiAgKgogICogV2UgYWx3YXlzIHJlbGVhc2UgdGhlIHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBj YWxsZXIsIHJlZ2FyZGxlc3Mgb2YKICAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBf YnRfcGFyYWxsZWxfcmVsZWFzZSBhcyBzb29uIGFzIHBvc3NpYmxlLgogICovCi1zdGF0aWMgYm9v bAotX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2Zm bnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKK3N0YXRpYyBJbmRleFNjYW5CYXRjaAorX2J0X3JlYWRm aXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoLAor CQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpi dGZpcnN0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBmaXJzdGJhdGNoKTsKKwlCbG9ja051 bWJlciBibGtubywKKwkJCQlsYXN0Y3VycmJsa25vOworCWJvb2wJCW1vcmVJbkRpcjsKIAotCXNv LT5udW1LaWxsZWQgPSAwOwkJCS8qIGp1c3QgcGFyYW5vaWEgKi8KLQlzby0+bWFya0l0ZW1JbmRl eCA9IC0xOwkJLyogZGl0dG8gKi8KLQotCS8qIEluaXRpYWxpemUgc28tPmN1cnJQb3MgZm9yIHRo ZSBmaXJzdCBwYWdlIChwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZikgKi8KKwkvKiBJbml0aWFsaXpl IGZpcnN0YmF0Y2gncyBwb3NpdGlvbiBmb3IgdGhlIGZpcnN0IHBhZ2UgKi8KIAlpZiAoc28tPm5l ZWRQcmltU2NhbikKIAl7CiAJCUFzc2VydChzby0+bnVtQXJyYXlLZXlzKTsKIAotCQlzby0+Y3Vy clBvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJ CWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdo dCA9IHRydWU7CiAJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKIAl9CiAJZWxzZSBpZiAoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCXsKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBm YWxzZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5t b3JlTGVmdCA9IGZhbHNlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJfQog CWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3Mu bW9yZVJpZ2h0ID0gZmFsc2U7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCQli dGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCX0KIAogCS8qCiAJICogQXR0ZW1wdCB0 byBsb2FkIG1hdGNoaW5nIHR1cGxlcyBmcm9tIHRoZSBmaXJzdCBwYWdlLgogCSAqCi0JICogTm90 ZSB0aGF0IF9idF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIHNvLT5jdXJy UG9zIGZpZWxkcy4KKwkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmluaXNoIGluaXRp YWxpemluZyB0aGUgZmlyc3RiYXRjaCBmaWVsZHMuCiAJICogX2J0X3JlYWRwYWdlIGFsc28gcmVs ZWFzZXMgcGFyYWxsZWwgc2NhbiAoZXZlbiB3aGVuIGl0IHJldHVybnMgZmFsc2UpLgogCSAqLwot CWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBvZmZudW0sIHRydWUpKQorCWlmIChfYnRfcmVh ZHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgZGlyLCBvZmZudW0sIHRydWUpKQogCXsKLQkJUmVsYXRp b24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQotCQkvKgotCQkgKiBfYnRfcmVhZHBhZ2Ug c3VjY2VlZGVkLiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9uCi0JCSAqIHNv LT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSByZXR1cm5pbmcgdHVw bGVzLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0J CV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKLQkJcmV0dXJuIHRydWU7CisJ CS8qIF9idF9yZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIGZpcnN0YmF0Y2gu aXRlbXNbXSAqLworCQlfYnRfYmF0Y2hfdW5sb2NrKHNjYW4sIGZpcnN0YmF0Y2gsIGJ0Zmlyc3Ri YXRjaC0+YnVmKTsKKwkJcmV0dXJuIGZpcnN0YmF0Y2g7CiAJfQogCi0JLyogVGhlcmUncyBubyBh Y3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRoZSBwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZiAqLwot CV9idF91bmxvY2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPmN1cnJQb3MuYnVmKTsKKwkv KiBUaGVyZSdzIG5vIGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgcmV0dXJuZWQg YnkgX2J0X3NlYXJjaCAqLworCV9idF9yZWxidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgYnRmaXJz dGJhdGNoLT5idWYpOwogCi0JLyogQ2FsbCBfYnRfcmVhZG5leHRwYWdlIHVzaW5nIGl0cyBfYnRf c3RlcHBhZ2Ugd3JhcHBlciBmdW5jdGlvbiAqLwotCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRp cikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBXYWxrIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRh ICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYmxrbm8gPSBidGZpcnN0 YmF0Y2gtPm5leHRQYWdlOworCWVsc2UKKwkJYmxrbm8gPSBidGZpcnN0YmF0Y2gtPnByZXZQYWdl OworCWxhc3RjdXJyYmxrbm8gPSBidGZpcnN0YmF0Y2gtPmN1cnJQYWdlOworCW1vcmVJbkRpciA9 IFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0 IDogYnRmaXJzdGJhdGNoLT5tb3JlTGVmdDsKIAotCS8qIF9idF9yZWFkcGFnZSBmb3IgYSBsYXRl ciBwYWdlIChub3cgaW4gc28tPmN1cnJQb3MpIHN1Y2NlZWRlZCAqLwotCXJldHVybiB0cnVlOwor CS8qIFJlbGVhc2UgZmlyc3RiYXRjaCAod2lsbCBiZSByZWN5Y2xlZCBpZiB3ZSByZWFjaCBfYnRf cmVhZG5leHRwYWdlKSAqLworCWluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGZpcnN0 YmF0Y2gpOworCisJaWYgKGJsa25vID09IFBfTk9ORSB8fCAhbW9yZUluRGlyKQorCXsKKwkJLyoK KwkJICogZmlyc3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGly ZWN0aW9uICh0aG91Z2gKKwkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2Fu IHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6 ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2Fu ICE9IE5VTEwgJiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3Vy cmJsa25vLCBmYWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJp bVNjYW4gd2Fzbid0IHNldCAqLworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxr bm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCiAvKgogICoJX2J0X3JlYWRuZXh0 cGFnZSgpIC0tIFJlYWQgbmV4dCBwYWdlIGNvbnRhaW5pbmcgdmFsaWQgZGF0YSBmb3IgX2J0X25l eHQKICAqCi0gKiBDYWxsZXIncyBibGtubyBpcyB0aGUgbmV4dCBpbnRlcmVzdGluZyBwYWdlJ3Mg bGluaywgdGFrZW4gZnJvbSBlaXRoZXIgdGhlCi0gKiBwcmV2aW91c2x5LXNhdmVkIHJpZ2h0IGxp bmsgb3IgbGVmdCBsaW5rLiAgbGFzdGN1cnJibGtubyBpcyB0aGUgcGFnZSB0aGF0Ci0gKiB3YXMg Y3VycmVudCBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIGJsa25vIGxpbmsgd2FzIHNhdmVkLCB3aGlj aCB3ZSB1c2UgdG8KLSAqIHJlYXNvbiBhYm91dCBjb25jdXJyZW50IHBhZ2Ugc3BsaXRzL3BhZ2Ug ZGVsZXRpb25zIGR1cmluZyBiYWNrd2FyZHMgc2NhbnMuCi0gKiBJbiB0aGUgY29tbW9uIGNhc2Ug d2hlcmUgc2VpemVkPWZhbHNlLCBibGtubyBpcyBlaXRoZXIgc28tPmN1cnJQb3MubmV4dFBhZ2UK LSAqIG9yIHNvLT5jdXJyUG9zLnByZXZQYWdlLCBhbmQgbGFzdGN1cnJibGtubyBpcyBzby0+Y3Vy clBvcy5jdXJyUGFnZS4KKyAqIENhbGxlcidzIGJsa25vIGlzIHRoZSBwcmlvciBiYXRjaCdzIG5l eHRQYWdlIG9yIHByZXZQYWdlIChkZXBlbmRpbmcgb24gdGhlCisgKiBjdXJyZW50IHNjYW4gZGly ZWN0aW9uKSwgYW5kIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHByaW9yIGJhdGNoJ3MgY3VyclBhZ2Uu CisgKiBXZSB1c2UgbGFzdGN1cnJibGtubyB0byByZWFzb24gYWJvdXQgY29uY3VycmVudCBwYWdl IHNwbGl0cy9wYWdlIGRlbGV0aW9ucworICogZHVyaW5nIGJhY2t3YXJkcyBzY2Fucy4KICAqCi0g KiBPbiBlbnRyeSwgc28tPmN1cnJQb3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBieSBjYWxsZXIuICBz by0+Y3VyclBvcy5idWYgbXVzdAotICogYmUgSW52YWxpZEJ1ZmZlci91bnBpbm5lZCBhcyBuZWVk ZWQgYnkgY2FsbGVyIChub3RlIHRoYXQgbGFzdGN1cnJibGtubwotICogd29uJ3QgbmVlZCB0byBi ZSByZWFkIGFnYWluIGluIGFsbW9zdCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwgc2NhbiBjYWxsZXJz Ci0gKiB0aGF0IHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlIHNob3VsZCBwYXNz IHNlaXplZD10cnVlOyBzdWNoIGEKLSAqIGNhbGxlcidzIGJsa25vIGFuZCBsYXN0Y3VycmJsa25v IGFyZ3VtZW50cyBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLgotICogc2VpemVkPWZhbHNlIGNh bGxlcnMganVzdCBwYXNzIHVzIHRoZSBibGtuby9sYXN0Y3VycmJsa25vIHRha2VuIGZyb20gdGhl aXIKLSAqIHNvLT5jdXJyUG9zLCB3aGljaCAoYWxvbmcgd2l0aCBzby0+Y3VyclBvcyBpdHNlbGYp IGNhbiBiZSB1c2VkIHRvIGVuZCB0aGUKLSAqIHNjYW4uICBBIHNlaXplZD1mYWxzZSBjYWxsZXIn cyBibGtubyBjYW4gbmV2ZXIgYmUgYXNzdW1lZCB0byBiZSB0aGUgcGFnZQotICogdGhhdCBtdXN0 IGJlIHJlYWQgbmV4dCBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLCB0aG91Z2guICBXZSBtdXN0IGZp Z3VyZSB0aGF0Ci0gKiBwYXJ0IG91dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXppbmcgdGhlIHNjYW4g KHRoZSBjb3JyZWN0IHBhZ2UgdG8gcmVhZCBtaWdodAotICogYWxyZWFkeSBiZSBiZXlvbmQgdGhl IHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtubyBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLAotICog dW5sZXNzIGJsa25vL3NvLT5jdXJyUG9zLm5leHRQYWdlL3NvLT5jdXJyUG9zLnByZXZQYWdlIGlz IGFscmVhZHkgUF9OT05FLAotICogb3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1vcmVSaWdodC9zby0+ Y3VyclBvcy5tb3JlTGVmdCBpcyBhbHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVudHJ5LCBubyBwYWdl IHNob3VsZCBiZSBsb2NrZWQgYnkgY2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nlc3MgZXhpdCwgc28t PmN1cnJQb3MgaXMgdXBkYXRlZCB0byBjb250YWluIGRhdGEgZnJvbSB0aGUgbmV4dAotICogaW50 ZXJlc3RpbmcgcGFnZSwgYW5kIHdlIHJldHVybiB0cnVlLiAgV2UgaG9sZCBhIHBpbiBvbiB0aGUg YnVmZmVyIG9uCi0gKiBzdWNjZXNzIGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28tPmRyb3BQaW4gaW5k ZXggc2NhbnMsIHdoZW4gd2UgZHJvcCB0aGUgcGluCi0gKiBlYWdlcmx5IHRvIGF2b2lkIGJsb2Nr aW5nIFZBQ1VVTSkuCisgKiBPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgdW5sb2NrZWQgYmF0Y2gg Y29udGFpbmluZyBkYXRhIGZyb20gdGhlIG5leHQgcGFnZQorICogdGhhdCBoYXMgYXQgbGVhc3Qg b25lIG1hdGNoaW5nIGl0ZW0uICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcwor ICogaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLiAgTm90 ZSB0aGF0IHJldHVybmluZyBOVUxMCisgKiBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIGVu ZCBvZiB0aGUgdG9wLWxldmVsIHNjYW47IGJ0Z2V0YmF0Y2ggYW5kCisgKiBidGdldGJpdG1hcCBj aGVjayBzby0+bmVlZFByaW1TY2FuIHRvIGRldGVybWluZSBpZiBhbm90aGVyIHByaW1pdGl2ZSBp bmRleAorICogc2NhbiBpcyByZXF1aXJlZC4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBt YXRjaGluZyByZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24sIHdlIGludmFsaWRhdGUKLSAq IHNvLT5jdXJyUG9zICh3aGlsZSBlbnN1cmluZyBpdCByZXRhaW5zIG5vIGxvY2tzIG9yIHBpbnMp LCBhbmQgcmV0dXJuIGZhbHNlLgotICoKLSAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZv ciBhIHBhcmFsbGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCi0gKiBzdWNjZXNzIG9yIGZh aWx1cmU7IHdlJ2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJs ZS4KKyAqIFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IHNlaXplIHRoZSBzY2FuIGJlZm9yZSBj YWxsaW5nIGhlcmUuICBibGtubyBhbmQKKyAqIGxhc3RjdXJyYmxrbm8gc2hvdWxkIGNvbWUgZnJv bSB0aGUgc2VpemVkIHNjYW4uICBXZSdsbCByZWxlYXNlIHRoZSBzY2FuIGFzCisgKiBzb29uIGFz IHBvc3NpYmxlLgogICovCi1zdGF0aWMgYm9vbAorc3RhdGljIEluZGV4U2NhbkJhdGNoCiBfYnRf cmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJ IEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIHNlaXpl ZCkKKwkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJv b2wgZmlyc3RwYWdlKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0J QlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUluZGV4U2Nh bkJhdGNoIG5ld2JhdGNoOworCUJUQmF0Y2hEYXRhICpidG5ld2JhdGNoOwogCi0JQXNzZXJ0KHNv LT5jdXJyUG9zLmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gfHwgc2VpemVkKTsKLQlBc3NlcnQo IShibGtubyA9PSBQX05PTkUgJiYgc2VpemVkKSk7Ci0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5l ZChzby0+Y3VyclBvcykpOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXcgYmF0Y2ggYmVmb3Jl IGxvY2tpbmcgYW55dGhpbmcgKi8KKwluZXdiYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRj aChzY2FuKTsKKwlidG5ld2JhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgbmV3YmF0Y2gpOwog CiAJLyoKLQkgKiBSZW1lbWJlciB0aGF0IHRoZSBzY2FuIGFscmVhZHkgcmVhZCBsYXN0Y3VycmJs a25vLCBhIHBhZ2UgdG8gdGhlIGxlZnQKLQkgKiBvZiBibGtubyAob3IgcmVtZW1iZXIgcmVhZGlu ZyBhIHBhZ2UgdG8gdGhlIHJpZ2h0LCBmb3IgYmFja3dhcmRzIHNjYW5zKQorCSAqIG5ld2JhdGNo IHdpbGwgYmUgdGhlIGJhdGNoIGZvciBibGtubywgYSBwYWdlIHRvIHRoZSByaWdodCBvZgorCSAq IGxhc3RjdXJyYmxrbm8gKG9yIHRvIHRoZSBsZWZ0LCB3aGVuIHRoZSBzY2FuIGlzIG1vdmluZyBi YWNrd2FyZHMpLgorCSAqCisJICogTm90ZTogY2FsbGVyJ3MgYmxrbm8gaXMgdGVudGF0aXZlLiAg bmV3YmF0Y2ggYWN0dWFsbHkgc3RvcmVzIG1hdGNoZXMKKwkgKiBmcm9tIHRoZSBuZXh0IGxlYWYg cGFnZSBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uIHRoYXQgaGFzIGF0IGxlYXN0IG9uZQorCSAqIG1h dGNoaW5nIGl0ZW0uICBUaGlzIGlzIHVzdWFsbHkgY2FsbGVyJ3MgYmxrbm8gcGFnZSwgYnV0IG1p Z2h0IGJlIHNvbWUKKwkgKiBvdGhlciBwYWdlIHRvIGl0cyByaWdodCAob3IgdG8gaXRzIGxlZnQp IGluc3RlYWQuCiAJICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJc28t PmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCWVsc2UKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0 ID0gdHJ1ZTsKKwlidG5ld2JhdGNoLT5tb3JlTGVmdCA9IHRydWU7CS8qIGZvciBsYXN0Y3VycmJs a25vIChvciB0ZW50YXRpdmUpICovCisJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsJLyog dGVudGF0aXZlIChvciBmb3IgbGFzdGN1cnJibGtubykgKi8KIAogCWZvciAoOzspCiAJewogCQlQ YWdlCQlwYWdlOwogCQlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCi0JCWlmIChibGtubyA9PSBQX05P TkUgfHwKLQkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPwotCQkJICFzby0+Y3VyclBv cy5tb3JlUmlnaHQgOiAhc28tPmN1cnJQb3MubW9yZUxlZnQpKQotCQl7Ci0JCQkvKiBtb3N0IHJl Y2VudCBfYnRfcmVhZHBhZ2UgY2FsbCAoZm9yIGxhc3RjdXJyYmxrbm8pIGVuZGVkIHNjYW4gKi8K LQkJCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vICYmICFzZWl6 ZWQpOwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlfYnRfcGFyYWxs ZWxfZG9uZShzY2FuKTsJLyogaWZmICFzby0+bmVlZFByaW1TY2FuICovCi0JCQlyZXR1cm4gZmFs c2U7Ci0JCX0KLQotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCi0JCS8qIHBhcmFsbGVs IHNjYW4gbXVzdCBuZXZlciBhY3R1YWxseSB2aXNpdCBzby0+Y3VyclBvcyBibGtubyAqLwotCQlp ZiAoIXNlaXplZCAmJiBzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKLQkJCSFfYnRfcGFy YWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQotCQl7Ci0J CQkvKiB3aG9sZSBzY2FuIGlzIG5vdyBkb25lIChvciBhbm90aGVyIHByaW1pdGl2ZSBzY2FuIHJl cXVpcmVkKSAqLwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlyZXR1 cm4gZmFsc2U7Ci0JCX0KKwkJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+ bmVlZFByaW1TY2FuKTsKKwkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSAmJiBsYXN0Y3VycmJsa25v ICE9IFBfTk9ORSk7CiAKIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJewog CQkJLyogcmVhZCBibGtubywgYnV0IGNoZWNrIGZvciBpbnRlcnJ1cHRzIGZpcnN0ICovCiAJCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOwotCQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldGJ1Zihy ZWwsIGJsa25vLCBCVF9SRUFEKTsKKwkJCWJ0bmV3YmF0Y2gtPmJ1ZiA9IF9idF9nZXRidWYocmVs LCBibGtubywgQlRfUkVBRCk7CiAJCX0KIAkJZWxzZQogCQl7CiAJCQkvKiByZWFkIGJsa25vLCBh dm9pZGluZyByYWNlIChhbHNvIGNoZWNrcyBmb3IgaW50ZXJydXB0cykgKi8KLQkJCXNvLT5jdXJy UG9zLmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwgJmJsa25vLAorCQkJYnRu ZXdiYXRjaC0+YnVmID0gX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQocmVsLCAmYmxrbm8sCiAJ CQkJCQkJCQkJCQkJCSBsYXN0Y3VycmJsa25vKTsKLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0g SW52YWxpZEJ1ZmZlcikKKwkJCWlmIChidG5ld2JhdGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcikK IAkJCXsKIAkJCQkvKiBtdXN0IGhhdmUgYmVlbiBhIGNvbmN1cnJlbnQgZGVsZXRpb24gb2YgbGVm dG1vc3QgcGFnZSAqLwotCQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCQkJ CV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQkJCXJldHVybiBmYWxzZTsKKwkJCQlpbmRleGFt X3V0aWxfcmVsZWFzZV9iYXRjaChzY2FuLCBuZXdiYXRjaCk7CisJCQkJcmV0dXJuIE5VTEw7CiAJ CQl9CiAJCX0KIAotCQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCQlw YWdlID0gQnVmZmVyR2V0UGFnZShidG5ld2JhdGNoLT5idWYpOwogCQlvcGFxdWUgPSBCVFBhZ2VH ZXRPcGFxdWUocGFnZSk7CiAJCWxhc3RjdXJyYmxrbm8gPSBibGtubzsKIAkJaWYgKGxpa2VseSgh UF9JR05PUkUob3BhcXVlKSkpCkBAIC0xOTExLDE3ICsxODA1LDE3IEBAIF9idF9yZWFkbmV4dHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKIAkJCS8qIHNlZSBpZiB0 aGVyZSBhcmUgYW55IG1hdGNoZXMgb24gdGhpcyBwYWdlICovCiAJCQlpZiAoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXIpKQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIg bW9yZVJpZ2h0IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBk aXIsIFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFn ZShzY2FuLCBuZXdiYXRjaCwgZGlyLAorCQkJCQkJCQkgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwg Zmlyc3RwYWdlKSkKIAkJCQkJYnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFn ZTsKKwkJCQlibGtubyA9IGJ0bmV3YmF0Y2gtPm5leHRQYWdlOwogCQkJfQogCQkJZWxzZQogCQkJ ewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZUxlZnQgaWYgd2UgY2FuIHN0 b3AgKi8KLQkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUGFnZUdldE1heE9mZnNldE51 bWJlcihwYWdlKSwgc2VpemVkKSkKKwkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNo LCBkaXIsCisJCQkJCQkJCSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBmaXJzdHBhZ2Up KQogCQkJCQlicmVhazsKLQkJCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOworCQkJCWJs a25vID0gYnRuZXdiYXRjaC0+cHJldlBhZ2U7CiAJCQl9CiAJCX0KIAkJZWxzZQpAQCAtMTkzNiwx OSArMTgzMCwzOCBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tO dW1iZXIgYmxrbm8sCiAJCX0KIAogCQkvKiBubyBtYXRjaGluZyB0dXBsZXMgb24gdGhpcyBwYWdl ICovCi0JCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlzZWl6ZWQgPSBmYWxz ZTsJCQkvKiByZWxlYXNlZCBieSBfYnRfcmVhZHBhZ2UgKG9yIGJ5IHVzKSAqLworCQlfYnRfcmVs YnVmKHJlbCwgYnRuZXdiYXRjaC0+YnVmKTsKKworCQkvKiBDb250aW51ZSB0aGUgc2NhbiBpbiB0 aGlzIGRpcmVjdGlvbj8gKi8KKwkJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkJKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCQkgIWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA6ICFidG5l d2JhdGNoLT5tb3JlTGVmdCkpCisJCXsKKwkJCS8qCisJCQkgKiBibGtubyBfYnRfcmVhZHBhZ2Ug Y2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0aG91Z2ggaWYKKwkJCSAqIHNvLT5u ZWVkUHJpbVNjYW4gd2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkK KwkJCSAqLworCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCQlpbmRleGFtX3V0aWxfcmVs ZWFzZV9iYXRjaChzY2FuLCBuZXdiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCS8q IHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLwor CQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCQkhX2J0X3BhcmFsbGVsX3Nl aXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJeworCQkJaW5kZXhh bV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CQkv KiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKwkJfQorCisJCWZpcnN0 cGFnZSA9IGZhbHNlOwkJLyogbmV4dCBwYWdlIGNhbm5vdCBiZSBmaXJzdCAqLwogCX0KIAotCS8q Ci0JICogX2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0 aGUgcGluKSBvbgotCSAqIHNvLT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0 dXBsZSByZXR1cm5pbmcgdHVwbGVzLgotCSAqLwotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFn ZSA9PSBibGtubyk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0J X2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHJlbCwgc28pOworCS8qIF9idF9yZWFkcGFnZSBz YXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIG5ld2JhdGNoLml0ZW1zW10gKi8KKwlBc3NlcnQo YnRuZXdiYXRjaC0+Y3VyclBhZ2UgPT0gYmxrbm8pOworCV9idF9iYXRjaF91bmxvY2soc2Nhbiwg bmV3YmF0Y2gsIGJ0bmV3YmF0Y2gtPmJ1Zik7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbmV3 YmF0Y2g7CiB9CiAKIC8qCkBAIC0yMTc0LDI1ICsyMDg3LDI5IEBAIF9idF9nZXRfZW5kcG9pbnQo UmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KQogICogUGFyYWxsZWwg c2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVy ZS4KICAqIEV4aXQgY29uZGl0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIF9idF9maXJzdCgpLgog ICovCi1zdGF0aWMgYm9vbAorc3RhdGljIEluZGV4U2NhbkJhdGNoCiBfYnRfZW5kcG9pbnQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBz Y2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoOworCUJUQmF0Y2hEYXRhICpi dGZpcnN0YmF0Y2g7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNl dE51bWJlciBzdGFydDsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp OwotCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CisJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkg c2Nhbi0+b3BhcXVlKS0+bmVlZFByaW1TY2FuKTsKKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBm aXJzdCBiYXRjaCBiZWZvcmUgbG9ja2luZyBhbnl0aGluZyAqLworCWZpcnN0YmF0Y2ggPSBpbmRl eGFtX3V0aWxfYWxsb2NfYmF0Y2goc2Nhbik7CisJYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERh dGEoc2NhbiwgZmlyc3RiYXRjaCk7CiAKIAkvKgogCSAqIFNjYW4gZG93biB0byB0aGUgbGVmdG1v c3Qgb3IgcmlnaHRtb3N0IGxlYWYgcGFnZS4gIFRoaXMgaXMgYSBzaW1wbGlmaWVkCiAJICogdmVy c2lvbiBvZiBfYnRfc2VhcmNoKCkuCiAJICovCi0Jc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldF9l bmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpOworCWJ0Zmlyc3Ri YXRjaC0+YnVmID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3 YXJkKGRpcikpOwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJaWYg KCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVmKSkKIAl7CiAJCS8qCiAJCSAqIEVtcHR5 IGluZGV4LiBMb2NrIHRoZSB3aG9sZSByZWxhdGlvbiwgYXMgbm90aGluZyBmaW5lciB0byBsb2Nr CkBAIC0yMjAwLDEwICsyMTE3LDExIEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQogCQkgKi8KIAkJUHJlZGljYXRlTG9ja1JlbGF0aW9uKHJlbCwg c2Nhbi0+eHNfc25hcHNob3QpOwogCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJcmV0dXJu IGZhbHNlOworCQlpbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRjaChzY2FuLCBmaXJzdGJhdGNoKTsK KwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3Mu YnVmKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShidGZpcnN0YmF0Y2gtPmJ1Zik7CiAJb3BhcXVl ID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCUFzc2VydChQX0lTTEVBRihvcGFxdWUpKTsKIApA QCAtMjIyOSw5ICsyMTQ3LDUgQEAgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpCiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0IHBh Z2Ugb2YgdGhlIHNjYW4uCiAJICovCi0JaWYgKCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBzdGFy dCwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwot CXJldHVybiB0cnVlOworCXJldHVybiBfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBmaXJzdGJhdGNo LCBzdGFydCwgZGlyKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0dXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwppbmRleCAw MTRmYWExNjIuLmI2Yzk3N2I5NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnR1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwpA QCAtMTksMTAgKzE5LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKICNpbmNsdWRl ICJhY2Nlc3MvcmVsb3B0aW9ucy5oIgotI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5j bHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKLSNpbmNsdWRlICJjb21tb24vaW50LmgiCi0jaW5j bHVkZSAibGliL3F1bmlxdWUuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJz dG9yYWdlL2x3bG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgpAQCAtMzEs NyArMjgsNiBAQAogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbnQJX2J0X2Nv bXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2Yik7CiBzdGF0aWMgaW50CV9i dF9rZWVwX25hdHRzKFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBsYXN0bGVmdCwKIAkJCQkJCSAg IEluZGV4VHVwbGUgZmlyc3RyaWdodCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5KTsKIApAQCAtMTQ2 LDI0NyArMTQyLDYgQEAgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1 cCkKIAlyZXR1cm4ga2V5OwogfQogCi0vKgotICogcXNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbiBm b3IgaW50IGFycmF5cwotICovCi1zdGF0aWMgaW50Ci1fYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9p ZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQotewotCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEp OwotCWludAkJCWIgPSAqKChjb25zdCBpbnQgKikgdmIpOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIo YSwgYik7Ci19Ci0KLS8qCi0gKiBfYnRfa2lsbGl0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9y IGl0ZW1zIGFuIGluZGV4c2NhbiBjYWxsZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkCi0g KgotICogc2Nhbi0+b3BhcXVlLCByZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFp bnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBs ZXMgdGhlcmVvbiAoZ2VuZXJhbGx5LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYg c28tPm51bUtpbGxlZCA+IDApLgotICoKLSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2Nr IG9uIHRoZSBzby0+Y3VyclBvcyBwYWdlLCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4g d2hlbiAhc28tPmRyb3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9j a2VkLgotICogSXQnbGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBi ZWZvcmUgY2FsbGluZyBoZXJlLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJl Zm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0byBzZXQKLSAqIExQX0RFQUQu ICBJZiB0aGUgc2NhbiBpcyBvbmUgdGhhdCBob2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdl dCBwYWdlCi0gKiBjb250aW51b3VzbHkgZnJvbSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMg dW50aWwgYXBwbHlpbmcgdGhpcyBmdW5jdGlvbgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGlu IHNjYW4pLCBWQUNVVU0gY2Fubm90IGhhdmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCi0gKiBw YWdlLCBzbyB0aGUgcGFnZSdzIFRJRHMgY2FuJ3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4g IFRoZXJlJ3Mgbm8gcmlzawotICogdGhhdCB3ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxl IHRoYXQgaGFwcGVucyB0byB1c2UgYSByZWN5Y2xlZCBUSUQKLSAqIHdpdGggYSBub3ctcmVtb3Zl ZCB0dXBsZSB3aXRoIHRoZSBzYW1lIFRJRCAodGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQot ICogcGFnZSkuICBXZSBjYW4ndCByZWx5IG9uIHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBi dWZmZXIgcGlucyBlYWdlcmx5Ci0gKiAoc28tPmRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdl IG11c3QgY29uZGl0aW9uIHNldHRpbmcgTFBfREVBRCBiaXRzIG9uCi0gKiB0aGUgcGFnZSBMU04g aGF2aW5nIG5vdCBjaGFuZ2VkIHNpbmNlIGJhY2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBw YWdlLgotICogV2UgdG90YWxseSBnaXZlIHVwIG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4g dGhlIHBhZ2UgTFNOIGNoYW5nZWQuCi0gKgotICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4g ZHVyaW5nICFzby0+ZHJvcFBpbiBzY2FucywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCi0gKiBXZSBj b3BlIHdpdGggY2FzZXMgd2hlcmUgaXRlbXMgaGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8gaW5zZXJ0 aW9ucy4gIElmIGFuCi0gKiBpdGVtIGhhcyBtb3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFnZSBkdWUg dG8gYSBzcGxpdCwgd2UnbGwgZmFpbCB0byBmaW5kIGl0Ci0gKiBhbmQganVzdCBnaXZlIHVwIG9u IGl0LgotICovCi12b2lkCi1fYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlS ZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChC VFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlQYWdlCQlwYWdlOwotCUJUUGFnZU9wYXF1ZSBv cGFxdWU7Ci0JT2Zmc2V0TnVtYmVyIG1pbm9mZjsKLQlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWlu dAkJCW51bUtpbGxlZCA9IHNvLT5udW1LaWxsZWQ7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0g ZmFsc2U7Ci0JQnVmZmVyCQlidWY7Ci0KLQlBc3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0 KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0 aW9uICE9IE5VTEwpOyAvKiBjYW4ndCBiZSBhIGJpdG1hcCBpbmRleCBzY2FuICovCi0KLQkvKiBB bHdheXMgaW52YWxpZGF0ZSBzby0+a2lsbGVkSXRlbXNbXSBiZWZvcmUgbGVhdmluZyBzby0+Y3Vy clBvcyAqLwotCXNvLT5udW1LaWxsZWQgPSAwOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGl0ZXJh dGUgdGhyb3VnaCBzby0+a2lsbGVkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXI7IHRoZQotCSAq IGxvb3AgYmVsb3cgZXhwZWN0cyB0aGlzICh3aGVuIG1hcmtpbmcgcG9zdGluZyBsaXN0IHR1cGxl cywgYXQgbGVhc3QpLgotCSAqIHNvLT5raWxsZWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBv cmRlciB0aGUgc2NhbiByZXR1cm5lZCBpdGVtcyBpbi4KLQkgKiBTY3JvbGxhYmxlIGN1cnNvciBz Y2FucyBtaWdodCBoYXZlIGV2ZW4gc2F2ZWQgdGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCi0JICoK LQkgKiBTb3J0IGFuZCB1bmlxdWUtaWZ5IHNvLT5raWxsZWRJdGVtc1tdIHRvIGRlYWwgd2l0aCBh bGwgdGhpcy4KLQkgKi8KLQlpZiAobnVtS2lsbGVkID4gMSkKLQl7Ci0JCXFzb3J0KHNvLT5raWxs ZWRJdGVtcywgbnVtS2lsbGVkLCBzaXplb2YoaW50KSwgX2J0X2NvbXBhcmVfaW50KTsKLQkJbnVt S2lsbGVkID0gcXVuaXF1ZShzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCks Ci0JCQkJCQkJX2J0X2NvbXBhcmVfaW50KTsKLQl9Ci0KLQlpZiAoIXNvLT5kcm9wUGluKQotCXsK LQkJLyoKLQkJICogV2UgaGF2ZSBoZWxkIHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJl YWQgdGhlIGluZGV4IHR1cGxlcywKLQkJICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBp dC4gIFRoZSBwaW4gd2lsbCBoYXZlIHByZXZlbnRlZAotCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMg ZnJvbSByZWN5Y2xpbmcgYW55IG9mIHRoZSBUSURzIG9uIHRoZSBwYWdlLgotCQkgKi8KLQkJQXNz ZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9z LmJ1ZjsKLQkJX2J0X2xvY2tidWYocmVsLCBidWYsIEJUX1JFQUQpOwotCX0KLQllbHNlCi0Jewot CQlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKLQotCQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNv LT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFn ZSwgQlRfUkVBRCk7Ci0KLQkJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0J CUFzc2VydChzby0+Y3VyclBvcy5sc24gPD0gbGF0ZXN0bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9z LmxzbiAhPSBsYXRlc3Rsc24pCi0JCXsKLQkJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRp bmcgKi8KLQkJCV9idF9yZWxidWYocmVsLCBidWYpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyog VW5tb2RpZmllZCwgaGludGluZyBpcyBzYWZlICovCi0JfQotCi0JcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmKTsKLQlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0JbWlub2ZmID0gUF9G SVJTVERBVEFLRVkob3BhcXVlKTsKLQltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBh Z2UpOwotCi0JLyogSXRlcmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFn ZSBvcmRlciAqLwotCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlp bnQJCQlpdGVtSW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUJUU2NhblBvc0l0ZW0gKmtp dGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0JCU9mZnNldE51bWJlciBvZmZu dW0gPSBraXRlbS0+aW5kZXhPZmZzZXQ7Ci0KLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3Vy clBvcy5maXJzdEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRl bSk7Ci0JCUFzc2VydChpID09IDAgfHwKLQkJCSAgIG9mZm51bSA+PSBzby0+Y3VyclBvcy5pdGVt c1tzby0+a2lsbGVkSXRlbXNbaSAtIDFdXS5pbmRleE9mZnNldCk7Ci0KLQkJaWYgKG9mZm51bSA8 IG1pbm9mZikKLQkJCWNvbnRpbnVlOwkJCS8qIHB1cmUgcGFyYW5vaWEgKi8KLQkJd2hpbGUgKG9m Zm51bSA8PSBtYXhvZmYpCi0JCXsKLQkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdl LCBvZmZudW0pOwotCQkJSW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0 ZW0ocGFnZSwgaWlkKTsKLQkJCWJvb2wJCWtpbGx0dXBsZSA9IGZhbHNlOwotCi0JCQlpZiAoQlRy ZWVUdXBsZUlzUG9zdGluZyhpdHVwbGUpKQotCQkJewotCQkJCWludAkJCXBpID0gaSArIDE7Ci0J CQkJaW50CQkJbnBvc3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKLQkJCQlp bnQJCQlqOwotCi0JCQkJLyoKLQkJCQkgKiBOb3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVl biBtb2RpZmllZCBpbiBhbG1vc3QgYW55IHdheQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQg aXQgKGluIHRoZSAhc28tPmRyb3BQaW4gY2FzZSksIHNvIGl0J3MKLQkJCQkgKiBwb3NzaWJsZSB0 aGF0IHRoaXMgcG9zdGluZyBsaXN0IHR1cGxlIHdhc24ndCBhIHBvc3RpbmcgbGlzdAotCQkJCSAq IHR1cGxlIHdoZW4gd2UgZmlyc3QgZW5jb3VudGVyZWQgaXRzIGhlYXAgVElEcy4KLQkJCQkgKi8K LQkJCQlmb3IgKGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKLQkJCQl7Ci0JCQkJCUl0ZW1Qb2lu dGVyIGl0ZW0gPSBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsKLQotCQkJCQlpZiAo IUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0sICZraXRlbS0+aGVhcFRpZCkpCi0JCQkJCQlicmVhazsJ Lyogb3V0IG9mIHBvc3RpbmcgbGlzdCBsb29wICovCi0KLQkJCQkJLyoKLQkJCQkJICoga2l0ZW0g bXVzdCBoYXZlIG1hdGNoaW5nIG9mZm51bSB3aGVuIGhlYXAgVElEcyBtYXRjaCwKLQkJCQkJICog dGhvdWdoIG9ubHkgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0Ci0JCQkJ CSAqIGhhdmUgYmVlbiBjb25jdXJyZW50bHkgbW9kaWZpZWQKLQkJCQkJICovCi0JCQkJCUFzc2Vy dChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtIHx8ICFzby0+ZHJvcFBpbik7Ci0KLQkJCQkJ LyoKLQkJCQkJICogUmVhZC1haGVhZCB0byBsYXRlciBraXRlbXMgaGVyZS4KLQkJCQkJICoKLQkJ CQkJICogV2UgcmVseSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0ZW0g aGVyZQotCQkJCQkgKiB3aWxsIHByZXZlbnQgdXMgZnJvbSBjb25zaWRlcmluZyB0aGUgcG9zdGlu ZyBsaXN0IHR1cGxlCi0JCQkJCSAqIGZ1bGx5IGRlYWQgYnkgbm90IG1hdGNoaW5nIGl0cyBuZXh0 IGhlYXAgVElEIGluIG5leHQKLQkJCQkJICogbG9vcCBpdGVyYXRpb24uCi0JCQkJCSAqCi0JCQkJ CSAqIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBpcyB0aGUgZmluYWwgaGVhcCBUSUQgaW4K LQkJCQkJICogdGhlIHBvc3RpbmcgbGlzdCB0dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxlZAot CQkJCQkgKiByZWdhcmRsZXNzIChpLmUuIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbGFz dAotCQkJCQkgKiBraXRlbSBpcyBhbHNvIHRoZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGlu ZGV4IHR1cGxlCi0JCQkJCSAqIGNvcnJlY3RseSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMg a2lsbGVkKS4KLQkJCQkJICovCi0JCQkJCWlmIChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVt ID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5raWxsZWRJdGVtc1twaSsrXV07Ci0JCQkJfQotCi0J CQkJLyoKLQkJCQkgKiBEb24ndCBib3RoZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdz IGludCBpdGVyYXRvciB0bwotCQkJCSAqIGF2b2lkIHByb2Nlc3Npbmcga2lsbGVkIGl0ZW1zIHRo YXQgcmVsYXRlIHRvIHRoZSBzYW1lCi0JCQkJICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4g IFRoaXMgbWljcm8tb3B0aW1pemF0aW9uIGhhcmRseQotCQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAg KEZ1cnRoZXIgaXRlcmF0aW9ucyBvZiB0aGUgb3V0ZXJtb3N0IGxvb3AKLQkJCQkgKiB3aWxsIGZh aWwgdG8gbWF0Y2ggb24gdGhpcyBzYW1lIHBvc3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAKLQkJCQkg KiBUSUQgaW5zdGVhZCwgc28gd2UnbGwgYWR2YW5jZSB0byB0aGUgbmV4dCBvZmZudW0vaW5kZXgK LQkJCQkgKiB0dXBsZSBwcmV0dHkgcXVpY2tseS4pCi0JCQkJICovCi0JCQkJaWYgKGogPT0gbnBv c3RpbmcpCi0JCQkJCWtpbGx0dXBsZSA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmIChJdGVtUG9p bnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwgJmtpdGVtLT5oZWFwVGlkKSkKLQkJCQlraWxsdHVw bGUgPSB0cnVlOwotCi0JCQkvKgotCQkJICogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0 IGlzbid0IGFscmVhZHkuICBTaW5jZSB0aGlzCi0JCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRpbmcg YSBidWZmZXIgbG9jayBwb3NzaWJseSBpbiBzaGFyZWQgbW9kZSwKLQkJCSAqIGl0J3MgcG9zc2li bGUgdGhhdCBtdWx0aXBsZSBwcm9jZXNzZXMgYXR0ZW1wdCB0byBkbyB0aGlzCi0JCQkgKiBzaW11 bHRhbmVvdXNseSwgbGVhZGluZyB0byBtdWx0aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNl bnQKLQkJCSAqIHRvIFdBTCAoaWYgd2FsX2xvZ19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUg ZW5hYmxlZCksIHdoaWNoCi0JCQkgKiBpcyB1bmRlc2lyYWJsZS4KLQkJCSAqLwotCQkJaWYgKGtp bGx0dXBsZSAmJiAhSXRlbUlkSXNEZWFkKGlpZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRzb21l dGhpbmcpCi0JCQkJewotCQkJCQkvKgotCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3Ry dWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgotCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUg anVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxvd2Vk LCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1ZmZl ckJlZ2luU2V0SGludEJpdHMoYnVmKSkKLQkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJfQot Ci0JCQkJLyogZm91bmQgdGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLwotCQkJCUl0 ZW1JZE1hcmtEZWFkKGlpZCk7Ci0JCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQlicmVh azsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9IE9m ZnNldE51bWJlck5leHQob2ZmbnVtKTsKLQkJfQotCX0KLQotCS8qCi0JICogU2luY2UgdGhpcyBj YW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LgotCSAqCi0J ICogV2hlbmV2ZXIgd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFn ZSdzCi0JICogQlRQX0hBU19HQVJCQUdFIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBo aW50LiAgKE5vdGUgdGhhdCB3ZQotCSAqIG9ubHkgcmVseSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFn IGluICFoZWFwa2V5c3BhY2UgaW5kZXhlcy4pCi0JICovCi0JaWYgKGtpbGxlZHNvbWV0aGluZykK LQl7Ci0JCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFTX0dBUkJBR0U7Ci0JCUJ1ZmZlckZp bmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlp ZiAoIXNvLT5kcm9wUGluKQotCQlfYnRfdW5sb2NrYnVmKHJlbCwgYnVmKTsKLQllbHNlCi0JCV9i dF9yZWxidWYocmVsLCBidWYpOwotfQotCi0KIC8qCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVz IG1hbmFnZSBhIHNoYXJlZC1tZW1vcnkgYXJlYSBpbiB3aGljaCB3ZSB0cmFjawogICogYXNzaWdu bWVudCBvZiAidmFjdXVtIGN5Y2xlIElEcyIgdG8gY3VycmVudGx5LWFjdGl2ZSBidHJlZSB2YWN1 dW1pbmcKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMKaW5kZXggZGZmN2QyODZmLi4zYmM1 ZTVjY2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCkBAIC0xMDk1LDE1ICsxMDk1 LDE1IEBAIGJ0cmVlX21hc2soY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkv KgogCQkgKiBJbiBidHJlZSBsZWFmIHBhZ2VzLCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhl IExQX0ZMQUdTIHdpdGhvdXQKIAkJICogZW1pdHRpbmcgYW55IFdBTCByZWNvcmQuIEhlbmNlLCBt YXNrIHRoZSBsaW5lIHBvaW50ZXIgZmxhZ3MuIFNlZQotCQkgKiBfYnRfa2lsbGl0ZW1zKCksIF9i dF9jaGVja191bmlxdWUoKSBmb3IgZGV0YWlscy4KKwkJICogYnRraWxsaXRlbXNiYXRjaCgpLCBf YnRfY2hlY2tfdW5pcXVlKCkgZm9yIGRldGFpbHMuCiAJCSAqLwogCQltYXNrX2xwX2ZsYWdzKHBh Z2UpOwogCX0KIAogCS8qCiAJICogQlRQX0hBU19HQVJCQUdFIGlzIGp1c3QgYW4gdW4tbG9nZ2Vk IGhpbnQgYml0LiBTbywgbWFzayBpdC4gU2VlCi0JICogX2J0X2RlbGV0ZV9vcl9kZWR1cF9vbmVf cGFnZSgpLCBfYnRfa2lsbGl0ZW1zKCksIGFuZCBfYnRfY2hlY2tfdW5pcXVlKCkKLQkgKiBmb3Ig ZGV0YWlscy4KKwkgKiBfYnRfZGVsZXRlX29yX2RlZHVwX29uZV9wYWdlKCksIGJ0a2lsbGl0ZW1z YmF0Y2goKSwgYW5kCisJICogX2J0X2NoZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgogCSAqLwog CW1hc2tvcGFxLT5idHBvX2ZsYWdzICY9IH5CVFBfSEFTX0dBUkJBR0U7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCBmMmVlMzMzZjYuLjc0NTQzNWRhMyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwpAQCAtNTQsNiArNTQsNyBAQCBzcGdoYW5kbGVyKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWNvbnNpc3RlbnRlcXVhbGl0eSA9IGZhbHNlLAogCQkuYW1j b25zaXN0ZW50b3JkZXJpbmcgPSBmYWxzZSwKIAkJLmFtY2FuYmFja3dhcmQgPSBmYWxzZSwKKwkJ LmFtY2FubWFya3BvcyA9IGZhbHNlLAogCQkuYW1jYW51bmlxdWUgPSBmYWxzZSwKIAkJLmFtY2Fu bXVsdGljb2wgPSBmYWxzZSwKIAkJLmFtb3B0aW9uYWxrZXkgPSB0cnVlLApAQCAtODgsMTAgKzg5 LDEyIEBAIHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gc3Bn YmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBzcGdyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gc3Bn Z2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVM TCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBzcGdnZXRi aXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBzcGdlbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwK LQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGlt YXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJ CS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90YWJsZS90YWJsZWFtYXBpLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFw aS5jCmluZGV4IGMwOTQ3M2I5Ny4uMGZmZjgwMWE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90 YWJsZWFtYXBpLmMKQEAgLTUzLDYgKzUzLDkgQEAgR2V0VGFibGVBbVJvdXRpbmUoT2lkIGFtaGFu ZGxlcikKIAlBc3NlcnQocm91dGluZS0+aW5kZXhfZmV0Y2hfYmVnaW4gIT0gTlVMTCk7CiAJQXNz ZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX3Jlc2V0ICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5l LT5pbmRleF9mZXRjaF9lbmQgIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNo X2JhdGNoX2luaXQgIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX21hcmtw b3MgIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX3Jlc3RycG9zICE9IE5V TEwpOwogCiAJQXNzZXJ0KHJvdXRpbmUtPmZldGNoX3RpZCAhPSBOVUxMKTsKIAlBc3NlcnQocm91 dGluZS0+dHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24gIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4 Y21kcy5jCmluZGV4IDlhYjc0YzhkZi4uMWNhZmZlYjg5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9pbmRleGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNt ZHMuYwpAQCAtODg1LDcgKzg4NSw3IEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwK IAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1z ZygiYWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aWNvbHVtbiBpbmRl eGVzIiwKIAkJCQkJCWFjY2Vzc01ldGhvZE5hbWUpKSk7Ci0JaWYgKGV4Y2x1c2lvbiAmJiBhbVJv dXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCkKKwlpZiAoZXhjbHVzaW9uICYmIGFtUm91dGluZS0+ YW1nZXR0dXBsZSA9PSBOVUxMICYmIGFtUm91dGluZS0+YW1nZXRiYXRjaCA9PSBOVUxMKQogCQll cmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVE KSwKIAkJCQkgZXJybXNnKCJhY2Nlc3MgbWV0aG9kIFwiJXNcIiBkb2VzIG5vdCBzdXBwb3J0IGV4 Y2x1c2lvbiBjb25zdHJhaW50cyIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjQW1pLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKaW5kZXggMzdmZTAzZmRj Li45NzlhODUyZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKQEAgLTQyOSw3ICs0MjksNyBAQCBF eGVjU3VwcG9ydHNNYXJrUmVzdG9yZShQYXRoICpwYXRobm9kZSkKIAkJY2FzZSBUX0luZGV4T25s eVNjYW46CiAKIAkJCS8qCi0JCQkgKiBOb3QgYWxsIGluZGV4IHR5cGVzIHN1cHBvcnQgbWFyay9y ZXN0b3JlLgorCQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IHJlc3RvcmluZyBhIG1h cmsKIAkJCSAqLwogCQkJcmV0dXJuIGNhc3ROb2RlKEluZGV4UGF0aCwgcGF0aG5vZGUpLT5pbmRl eGluZm8tPmFtY2FubWFya3BvczsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlz Y2FuLmMKaW5kZXggMjhhMjNkYjBiLi5lYjRjOGNhNWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUluZGV4b25seXNjYW4uYwpAQCAtMzE1LDcgKzMxNSw3IEBAIEV4ZWNJbmRleE9ubHlNYXJr UG9zKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJfQogCX0KIAotCWluZGV4X21hcmtwb3Mo bm9kZS0+aW9zc19TY2FuRGVzYyk7CisJdGFibGVfaW5kZXhfZmV0Y2hfbWFya3Bvcyhub2RlLT5p b3NzX1NjYW5EZXNjKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzQ0LDcgKzM0NCw3IEBAIEV4ZWNJ bmRleE9ubHlSZXN0clBvcyhJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCX0KIAl9CiAKLQlp bmRleF9yZXN0cnBvcyhub2RlLT5pb3NzX1NjYW5EZXNjKTsKKwl0YWJsZV9pbmRleF9mZXRjaF9y ZXN0cnBvcyhub2RlLT5pb3NzX1NjYW5EZXNjKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUluZGV4c2Nhbi5jCmluZGV4IDQ1N2ZiZGIwNy4uNzQ0OTQyZjA1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC04NzIsNyArODcyLDcgQEAgRXhlY0luZGV4 TWFya1BvcyhJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJfQogCX0KIAotCWluZGV4X21hcmtwb3Mo bm9kZS0+aXNzX1NjYW5EZXNjKTsKKwl0YWJsZV9pbmRleF9mZXRjaF9tYXJrcG9zKG5vZGUtPmlz c19TY2FuRGVzYyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTkwMSw3ICs5MDEsNyBAQCBFeGVjSW5k ZXhSZXN0clBvcyhJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJfQogCX0KIAotCWluZGV4X3Jlc3Ry cG9zKG5vZGUtPmlzc19TY2FuRGVzYyk7CisJdGFibGVfaW5kZXhfZmV0Y2hfcmVzdHJwb3Mobm9k ZS0+aXNzX1NjYW5EZXNjKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1l cmdlam9pbi5jCmluZGV4IGY4NDIxYTc0Yy4uNmU4ZmUwN2Y2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZU1lcmdlam9pbi5jCkBAIC01NCw4ICs1NCw4IEBACiAgKgkJdGhlIGlubmVyICI1J3MiLiBU aGlzIHJlcXVpcmVzIHJlcG9zaXRpb25pbmcgdGhlIGlubmVyICJjdXJzb3IiCiAgKgkJdG8gcG9p bnQgYXQgdGhlIGZpcnN0IGlubmVyICI1Ii4gVGhpcyBpcyBkb25lIGJ5ICJtYXJraW5nIiB0aGUK ICAqCQlmaXJzdCBpbm5lciA1IHNvIHdlIGNhbiByZXN0b3JlIHRoZSAiY3Vyc29yIiB0byBpdCBi ZWZvcmUgam9pbmluZwotICoJCXdpdGggdGhlIHNlY29uZCBvdXRlciA1LiBUaGUgYWNjZXNzIG1l dGhvZCBpbnRlcmZhY2UgcHJvdmlkZXMKLSAqCQlyb3V0aW5lcyB0byBtYXJrIGFuZCByZXN0b3Jl IHRvIGEgdHVwbGUuCisgKgkJd2l0aCB0aGUgc2Vjb25kIG91dGVyIDUuIFRoZSB0YWJsZSBBTSBp bnRlcmZhY2UgcHJvdmlkZXMKKyAqCQlyb3V0aW5lcyB0byBtYXJrIGFuZCByZXN0b3JlIHRvIGEg dHVwbGUgZHVyaW5nIGluZGV4IHNjYW5zLgogICoKICAqCiAgKgkJRXNzZW50aWFsIG9wZXJhdGlv biBvZiB0aGUgbWVyZ2Ugam9pbiBhbGdvcml0aG0gaXMgYXMgZm9sbG93czoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDNmNWQ0ZmEzMS4uOTRmZWRmMzJjIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIC8qIFdoZXRo ZXIgd2UgYXJlIGxvb2tpbmcgZm9yIHBsYWluIGluZGV4c2NhbiwgYml0bWFwIHNjYW4sIG9yIGVp dGhlciAqLwogdHlwZWRlZiBlbnVtCiB7Ci0JU1RfSU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1cHBv cnQgYW1nZXR0dXBsZSAqLworCVNUX0lOREVYU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0 dHVwbGUgb3IgYW1nZXRiYXRjaCAqLwogCVNUX0JJVE1BUFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9y dCBhbWdldGJpdG1hcCAqLwogCVNUX0FOWVNDQU4sCQkJCQkvKiBlaXRoZXIgaXMgb2theSAqLwog fSBTY2FuVHlwZUNvbnRyb2w7CkBAIC03NDYsNyArNzQ2LDcgQEAgZ2V0X2luZGV4X3BhdGhzKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJewogCQlJbmRleFBhdGggICppcGF0 aCA9IChJbmRleFBhdGggKikgbGZpcnN0KGxjKTsKIAotCQlpZiAoaW5kZXgtPmFtaGFzZ2V0dHVw bGUpCisJCWlmIChpbmRleC0+YW1jYW5wbGFpbnNjYW4pCiAJCQlhZGRfcGF0aChyZWwsIChQYXRo ICopIGlwYXRoKTsKIAogCQlpZiAoaW5kZXgtPmFtaGFzZ2V0Yml0bWFwICYmCkBAIC04MzQsNyAr ODM0LDcgQEAgYnVpbGRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbCwKIAlzd2l0Y2ggKHNjYW50eXBlKQogCXsKIAkJY2FzZSBTVF9JTkRFWFNDQU46Ci0JCQlp ZiAoIWluZGV4LT5hbWhhc2dldHR1cGxlKQorCQkJaWYgKCFpbmRleC0+YW1jYW5wbGFpbnNjYW4p CiAJCQkJcmV0dXJuIE5JTDsKIAkJCWJyZWFrOwogCQljYXNlIFNUX0JJVE1BUFNDQU46CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXggN2M0YmUxNzQ4Li41NGJiYzY2OTIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTMxMCwxMSArMzEwLDExIEBAIGdl dF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwg Ym9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFyY2hhcnJheSA9IGFtcm91dGluZS0+YW1z ZWFyY2hhcnJheTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51bGxzID0gYW1yb3V0aW5lLT5hbXNlYXJj aG51bGxzOwogCQkJCWluZm8tPmFtY2FucGFyYWxsZWwgPSBhbXJvdXRpbmUtPmFtY2FucGFyYWxs ZWw7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0g TlVMTCk7CisJCQkJaW5mby0+YW1jYW5wbGFpbnNjYW4gPSAoYW1yb3V0aW5lLT5hbWdldGJhdGNo ICE9IE5VTEwgfHwKKwkJCQkJCQkJCQlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CiAJ CQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwICE9IE5VTEwg JiYKIAkJCQkJcmVsYXRpb24tPnJkX3RhYmxlYW0tPnNjYW5fYml0bWFwX25leHRfdHVwbGUgIT0g TlVMTDsKLQkJCQlpbmZvLT5hbWNhbm1hcmtwb3MgPSAoYW1yb3V0aW5lLT5hbW1hcmtwb3MgIT0g TlVMTCAmJgotCQkJCQkJCQkJICBhbXJvdXRpbmUtPmFtcmVzdHJwb3MgIT0gTlVMTCk7CisJCQkJ aW5mby0+YW1jYW5tYXJrcG9zID0gYW1yb3V0aW5lLT5hbWNhbm1hcmtwb3M7CiAJCQkJaW5mby0+ YW1jb3N0ZXN0aW1hdGUgPSBhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRlOwogCQkJCUFzc2VydChp bmZvLT5hbWNvc3Rlc3RpbWF0ZSAhPSBOVUxMKTsKIApAQCAtNDExLDcgKzQxMSw3IEBAIGdldF9y ZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9v bCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFyY2hhcnJheSA9IGZhbHNlOwogCQkJCWluZm8t PmFtc2VhcmNobnVsbHMgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7 Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IGZhbHNlOworCQkJCWluZm8tPmFtY2FucGxhaW5z Y2FuID0gZmFsc2U7CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBmYWxzZTsKIAkJCQlpbmZv LT5hbWNhbm1hcmtwb3MgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWNvc3Rlc3RpbWF0ZSA9IE5VTEw7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKaW5kZXggMGIxZDgw YjViLi4wZDBiZDQ2OGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0 aW9uLmMKQEAgLTgzNiw2ICs4MzYsNyBAQCBJc0luZGV4VXNhYmxlRm9yUmVwbGljYUlkZW50aXR5 RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0dHJtYXApCiB7CiAJQXR0ck51bWJlcglr ZXljb2w7CiAJb2lkdmVjdG9yICAqaW5kY2xhc3M7CisJY29uc3QgSW5kZXhBbVJvdXRpbmUgKmFt cm91dGluZTsKIAogCS8qIFRoZSBpbmRleCBtdXN0IG5vdCBiZSBhIHBhcnRpYWwgaW5kZXggKi8K IAlpZiAoIWhlYXBfYXR0aXNudWxsKGlkeHJlbC0+cmRfaW5kZXh0dXBsZSwgQW51bV9wZ19pbmRl eF9pbmRwcmVkLCBOVUxMKSkKQEAgLTg4NywxMCArODg4LDEyIEBAIElzSW5kZXhVc2FibGVGb3JS ZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGlkeHJlbCwgQXR0ck1hcCAqYXR0cm1hcCkKIAkJ cmV0dXJuIGZhbHNlOwogCiAJLyoKLQkgKiBUaGUgZ2l2ZW4gaW5kZXggYWNjZXNzIG1ldGhvZCBt dXN0IGltcGxlbWVudCAiYW1nZXR0dXBsZSIsIHdoaWNoIHdpbGwKLQkgKiBiZSB1c2VkIGxhdGVy IHRvIGZldGNoIHRoZSB0dXBsZXMuICBTZWUgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleCgp LgorCSAqIFRoZSBnaXZlbiBpbmRleCBhY2Nlc3MgbWV0aG9kIG11c3QgaW1wbGVtZW50ICJhbWdl dHR1cGxlIiBvcgorCSAqICJhbWdldGJhdGNoIiwgd2hpY2ggd2lsbCBiZSB1c2VkIGxhdGVyIHRv IGZldGNoIHRoZSB0dXBsZXMuICBTZWUKKwkgKiBSZWxhdGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4 KCkuCiAJICovCi0JaWYgKEdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5y ZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxlID09IE5VTEwpCisJYW1yb3V0aW5lID0gR2V0SW5kZXhB bVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxzZSk7CisJaWYgKGFtcm91 dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMICYmIGFtcm91dGluZS0+YW1nZXRiYXRjaCA9PSBOVUxM KQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5j CmluZGV4IGM4MWZiNjFhMC4uZGRmZDFiNTVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvYW11dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKQEAg LTM2MywxMCArMzYzLDExIEBAIGluZGV4YW1fcHJvcGVydHkoRnVuY3Rpb25DYWxsSW5mbyBmY2lu Zm8sCiAJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jbHVzdGVyYWJsZSk7CiAKIAkJCWNh c2UgQU1QUk9QX0lOREVYX1NDQU46Ci0JCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0 dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0 dXBsZSAhPSBOVUxMIHx8CisJCQkJCQkJICAgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsK IAogCQkJY2FzZSBBTVBST1BfQklUTUFQX1NDQU46Ci0JCQkJUEdfUkVUVVJOX0JPT0wocm91dGlu ZS0+YW1nZXRiaXRtYXAgPyB0cnVlIDogZmFsc2UpOworCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRp bmUtPmFtZ2V0Yml0bWFwICE9IE5VTEwpOwogCiAJCQljYXNlIEFNUFJPUF9CQUNLV0FSRF9TQ0FO OgogCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FuYmFja3dhcmQpOwpAQCAtMzkyLDcg KzM5Myw4IEBAIGluZGV4YW1fcHJvcGVydHkoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQlQ R19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbm11bHRpY29sKTsKIAogCQljYXNlIEFNUFJPUF9D QU5fRVhDTFVERToKLQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgPyB0cnVl IDogZmFsc2UpOworCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxM IHx8CisJCQkJCQkgICByb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOwogCiAJCWNhc2UgQU1Q Uk9QX0NBTl9JTkNMVURFOgogCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5pbmNsdWRl KTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgYi9jb250cmli L2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCmluZGV4IGI3NGFiNWY3YS4uYzg4YTBlYzFkIDEwMDY0 NAotLS0gYS9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCisrKyBiL2NvbnRyaWIvYW1j aGVjay92ZXJpZnlfbmJ0cmVlLmMKQEAgLTM5Myw3ICszOTMsNyBAQCBidF9jaGVja19ldmVyeV9s ZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIGJvb2wgaGVhcGtleXNwYWNlLAog CQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOwogCiAJLyoKLQkgKiBUaGlzIGFzc2Vy dGlvbiBtYXRjaGVzIHRoZSBvbmUgaW4gaW5kZXhfZ2V0bmV4dF90aWQoKS4gIFNlZSBwYWdlCisJ ICogVGhpcyBhc3NlcnRpb24gbWF0Y2hlcyB0aGUgb25lIGluIGhlYXBhbV9pbmRleHNjYW4uYy4g IFNlZSBwYWdlCiAJICogcmVjeWNsaW5nLyJ2aXNpYmxlIHRvIGV2ZXJ5b25lIiBub3RlcyBpbiBu YnRyZWUgUkVBRE1FLgogCSAqLwogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRY bWluKSk7CmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYyBiL2NvbnRyaWIvYmxv b20vYmx1dGlscy5jCmluZGV4IDUxMTFjZGM2ZC4uMjQ5YWY0OGU2IDEwMDY0NAotLS0gYS9jb250 cmliL2Jsb29tL2JsdXRpbHMuYworKysgYi9jb250cmliL2Jsb29tL2JsdXRpbHMuYwpAQCAtMTEz LDYgKzExMyw3IEBAIGJsaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1jb25zaXN0ZW50 ZXF1YWxpdHkgPSBmYWxzZSwKIAkJLmFtY29uc2lzdGVudG9yZGVyaW5nID0gZmFsc2UsCiAJCS5h bWNhbmJhY2t3YXJkID0gZmFsc2UsCisJCS5hbWNhbm1hcmtwb3MgPSBmYWxzZSwKIAkJLmFtY2Fu dW5pcXVlID0gZmFsc2UsCiAJCS5hbWNhbm11bHRpY29sID0gdHJ1ZSwKIAkJLmFtb3B0aW9uYWxr ZXkgPSB0cnVlLApAQCAtMTQ2LDEwICsxNDcsMTIgQEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9OX0FS R1MpCiAJCS5hbWJlZ2luc2NhbiA9IGJsYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBibHJlc2Nh biwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbXVu Z3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJLmFtZ2V0 Yml0bWFwID0gYmxnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBibGVuZHNjYW4sCi0JCS5hbW1h cmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVM TCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxz Y2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXgg ZjQ4ZGEzMTg1Li5mMDJkMzZjMmYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtMTE3LDYgKzExNyw4IEBAIHR5 cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAgICAgYm9vbCAgICAgICAgYW1jb25zaXN0ZW50 b3JkZXJpbmc7CiAgICAgLyogZG9lcyBBTSBzdXBwb3J0IGJhY2t3YXJkIHNjYW5uaW5nPyAqLwog ICAgIGJvb2wgICAgICAgIGFtY2FuYmFja3dhcmQ7CisgICAgLyogZG9lcyBBTSBzdXBwb3J0IG1h cmsvcmVzdG9yZSBvZiBhIHNjYW4gcG9zaXRpb24/ICovCisgICAgYm9vbCAgICAgICAgYW1jYW5t YXJrcG9zOwogICAgIC8qIGRvZXMgQU0gc3VwcG9ydCBVTklRVUUgaW5kZXhlcz8gKi8KICAgICBi b29sICAgICAgICBhbWNhbnVuaXF1ZTsKICAgICAvKiBkb2VzIEFNIHN1cHBvcnQgbXVsdGktY29s dW1uIGluZGV4ZXM/ICovCkBAIC0xNjcsMTAgKzE2OSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRl eEFtUm91dGluZQogICAgIGFtYmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogICAgIGFt cmVzY2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwogICAgIGFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0 dXBsZTsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdl dGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uIGFt dW5ndWFyZGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFta2lsbGl0ZW1zYmF0Y2hfZnVu Y3Rpb24gYW1raWxsaXRlbXNiYXRjaDsJLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWdldGJpdG1h cF9mdW5jdGlvbiBhbWdldGJpdG1hcDsgICAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZW5kc2Nh bl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0gICAgYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3Bvczsg ICAgICAgLyogY2FuIGJlIE5VTEwgKi8KLSAgICBhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJw b3M7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3Ny ZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogICAgIC8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8g c3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogICAgIGFtZXN0aW1hdGVwYXJhbGxlbHNj YW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgICAgLyogY2FuIGJlIE5VTEwgKi8K QEAgLTI4MCw2ICsyODQsMTkgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKICAgIHBy ZWRpY2F0ZXMsIGFuIHVwZGF0ZSBvZiBzdWNoIGFuIGF0dHJpYnV0ZSBhbHdheXMgZGlzYWJsZXMg PGFjcm9ueW0+SE9UPC9hY3JvbnltPi4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgVGhlIDxz dHJ1Y3RmaWVsZD5hbWNhbm1hcmtwb3M8L3N0cnVjdGZpZWxkPiBmbGFnIGluZGljYXRlcyB3aGV0 aGVyIHRoZQorICAgaW5kZXggYWNjZXNzIG1ldGhvZCBzdXBwb3J0cyBtYXJraW5nIGEgc2NhbiBw b3NpdGlvbiBhbmQgbGF0ZXIgcmVzdG9yaW5nCisgICB0aGUgc2NhbiB0byBpdC4gIFRoZSBwbGFu bmVyIHVzZXMgdGhpcyB0byBkZWNpZGUgd2hldGhlciBhbiBpbmRleCBzY2FuIGNhbgorICAgYmUg dXNlZCBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIG1lcmdlIGpvaW4gZGlyZWN0bHksIG9yIHdoZXRo ZXIgYQorICAgPGxpdGVyYWw+TWF0ZXJpYWxpemU8L2xpdGVyYWw+IG5vZGUgbXVzdCBiZSBpbnRl cnBvc2VkLiAgTWFyayBhbmQgcmVzdG9yZQorICAgYnVpbGQgb24gdGhlIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gYmF0Y2ggaW50ZXJmYWNlIChzZWUgPHhyZWYKKyAgICBsaW5rZW5k PSJpbmRleC1zY2FubmluZyIvPiksIHNvIGFuIGFjY2VzcyBtZXRob2QgdGhhdCBwcm92aWRlcwor ICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiAobm90IDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4pIG11c3QKKyAgIGxlYXZlIHRoaXMgZmFsc2UuICBBbiA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGFjY2VzcyBtZXRob2QgbWF5CisgICBhbHNvIGxlYXZlIGl0 IGZhbHNlIGlmIGl0cyBzY2FucyBjYW5ub3QgYmUgcmV3b3VuZCB0byBhbiBlYXJsaWVyIHBvc2l0 aW9uLgorICA8L3BhcmE+CisKICA8L3NlY3QxPgogCiAgPHNlY3QxIGlkPSJpbmRleC1mdW5jdGlv bnMiPgpAQCAtNjc2LDggKzY5Myw0OSBAQCBhbWJlZ2luc2NhbiAoUmVsYXRpb24gaW5kZXhSZWxh dGlvbiwKICAgIDxlbXBoYXNpcz5tdXN0PC9lbXBoYXNpcz4gY3JlYXRlIHRoaXMgc3RydWN0IGJ5 IGNhbGxpbmcKICAgIDxmdW5jdGlvbj5SZWxhdGlvbkdldEluZGV4U2NhbigpPC9mdW5jdGlvbj4u ICBJbiBtb3N0IGNhc2VzCiAgICA8ZnVuY3Rpb24+YW1iZWdpbnNjYW48L2Z1bmN0aW9uPiBkb2Vz IGxpdHRsZSBiZXlvbmQgbWFraW5nIHRoYXQgY2FsbCBhbmQgcGVyaGFwcwotICAgYWNxdWlyaW5n IGxvY2tzOworICAgYWNxdWlyaW5nIGxvY2tzIGFuZCBpbml0aWFsaXppbmcgc3RhbmRhcmQgPHN0 cnVjdG5hbWU+SW5kZXhTY2FuRGVzYzwvc3RydWN0bmFtZT4gZmllbGRzOwogICAgdGhlIGludGVy ZXN0aW5nIHBhcnRzIG9mIGluZGV4LXNjYW4gc3RhcnR1cCBhcmUgaW4gPGZ1bmN0aW9uPmFtcmVz Y2FuPC9mdW5jdGlvbj4uCisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHVzZSB0aGUgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UKKyAgIG11c3QgYWxzbyBzZXQg dGhlIGZvbGxvd2luZyBmaWVsZHMgaW4gdGhlIHNjYW4gZGVzY3JpcHRvcjoKKyAgIDxpdGVtaXpl ZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPnNjYW4t Jmd0O21heGl0ZW1zYmF0Y2g8L2xpdGVyYWw+OiB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMK KyAgICAgIHRoYXQgY2FuIGFwcGVhciBpbiBhIHNpbmdsZSBiYXRjaCAodHlwaWNhbGx5IGRlcml2 ZWQgZnJvbSB0aGUgaW5kZXggcGFnZQorICAgICAgc2l6ZSwgZS5nLiwgPGxpdGVyYWw+TWF4SW5k ZXhUdXBsZXNQZXJQYWdlPC9saXRlcmFsPikuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5zY2FuLSZndDti YXRjaF9pbmRleF9vcGFxdWVfc3RhdGljPC9saXRlcmFsPjogdGhlCisgICAgICA8ZnVuY3Rpb24+ TUFYQUxJR048L2Z1bmN0aW9uPidkIHNpemUgb2YgdGhlIGluZGV4IEFNJ3MgbWFuZGF0b3J5IHBl ci1iYXRjaAorICAgICAgb3BhcXVlIGFyZWEsIHdob3NlIHNpemUgaXMgZml4ZWQgYXQgY29tcGls ZSB0aW1lLiAgRWFjaCBiYXRjaCBhbGxvY2F0aW9uCisgICAgICByZXNlcnZlcyB0aGlzIG11Y2gg c3BhY2UgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZQorICAgICAgPHN0cnVjdG5hbWU+SW5kZXhTY2Fu QmF0Y2hEYXRhPC9zdHJ1Y3RuYW1lPiBwb2ludGVyLCBmb3IgdXNlIGJ5IHRoZSBpbmRleAorICAg ICAgQU0gdG8gc3RvcmUgcGVyLXBhZ2UgbmF2aWdhdGlvbiBzdGF0ZSAoZS5nLiwgYmF0Y2ggaW5k ZXggcGFnZSdzIGJ1ZmZlciBwaW4KKyAgICAgIGFuZCBzaWJsaW5nIHBhZ2UgbGlua3MpLgorICAg ICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgor ICAgICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZTwvbGl0ZXJhbD46 IHRoZSBzaXplIGluIGJ5dGVzCisgICAgICBvZiB0aGUgcGVyLWJhdGNoIHR1cGxlIHN0b3JhZ2Ug d29ya3NwYWNlIHVzZWQgZm9yIGluZGV4LW9ubHkgc2NhbnMKKyAgICAgICh0eXBpY2FsbHkgPGxp dGVyYWw+QkxDS1NaPC9saXRlcmFsPiksIG9yIDAgaWYgdGhlIGluZGV4IEFNIGRvZXMgbm90Cisg ICAgICBzdXBwb3J0IGluZGV4LW9ubHkgc2NhbnMuICBUaGUgd29ya3NwYWNlIGlzIGFjY2Vzc2li bGUgdmlhCisgICAgICA8c3RydWN0ZmllbGQ+YmF0Y2gtJmd0O2N1cnJUdXBsZXM8L3N0cnVjdGZp ZWxkPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4K KyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQW4gPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBhY2Nlc3MgbWV0aG9kIHdob3NlIHJlY2hlY2sgcmVxdWlyZW1lbnQgaXMKKyAgIGEgZml4 ZWQgcHJvcGVydHkgb2YgdGhlIHdob2xlIHNjYW4gKHJhdGhlciB0aGFuIHNvbWV0aGluZyB0aGF0 IHZhcmllcyBmcm9tCisgICBvbmUgbWF0Y2hpbmcgaXRlbSB0byB0aGUgbmV4dCkgc2hvdWxkIGFs c28gc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBoZXJlLCBp bgorICAgPGZ1bmN0aW9uPmFtYmVnaW5zY2FuPC9mdW5jdGlvbj4sIHNpbmNlIHRoZSB2YWx1ZSBh cHBsaWVzIHRvIGV2ZXJ5IGl0ZW0gdGhlCisgICBzY2FuIHJldHVybnMuICBUaGUgdmFsdWUgc2V0 IGhlcmUgcGVyc2lzdHMgYWNyb3NzIGFueSBzdWJzZXF1ZW50CisgICA8ZnVuY3Rpb24+YW1yZXNj YW48L2Z1bmN0aW9uPiBjYWxscy4gIEItdHJlZSAoYWx3YXlzIGZhbHNlKSB3b3JrIHRoaXMgd2F5 LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC03NDksNiArODA3LDI0OCBAQCBhbWdldHR1cGxl IChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8c3RydWN0ZmllbGQ+YW1nZXR0dXBsZTwvc3RydWN0 ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFt ZT4KICAgIHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgogICA8L3BhcmE+CisgIDxub3RlPgor ICAgPHBhcmE+CisgICAgQXMgb2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1l PiB2ZXJzaW9uIDIwLCBtYXJrL3Jlc3RvcmUgb2YKKyAgICBzY2FuIHBvc2l0aW9ucyBpcyBidWls dCBvbiB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2U7CisgICAg PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBzY2FucyBkbyBub3Qgc3VwcG9ydCBtYXJr L3Jlc3RvcmUuICBUaGUKKyAgICBpbXBsZW1lbnRhdGlvbiBsaXZlcyBpbiB0aGUgdGFibGUgQU0s IHRocm91Z2ggaXRzCisgICAgPGZ1bmN0aW9uPnRhYmxlX2luZGV4X2ZldGNoX21hcmtwb3M8L2Z1 bmN0aW9uPiBhbmQKKyAgICA8ZnVuY3Rpb24+dGFibGVfaW5kZXhfZmV0Y2hfcmVzdHJwb3M8L2Z1 bmN0aW9uPiBpbXBsZW1lbnRhdGlvbnMuICBBbgorICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gYWNjZXNzIG1ldGhvZCBtdXN0IGFkZGl0aW9uYWxseSBhZHZlcnRpc2UKKyAgICBz dXBwb3J0IGJ5IHNldHRpbmcgPHN0cnVjdGZpZWxkPmFtY2FubWFya3Bvczwvc3RydWN0ZmllbGQ+ OyB3aGVuIGl0IGRvZXMKKyAgICBub3QsIHRoZSBwbGFubmVyIG1hdGVyaWFsaXplcyB0aGUgc2Nh bidzIG91dHB1dCByYXRoZXIgdGhhbiByZWx5aW5nIG9uCisgICAgbWFyay9yZXN0b3JlLgorICAg PC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CitJbmRleFNj YW5CYXRjaAorYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAgSW5k ZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKyAgICAgICAgICAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBSZXR1cm4gdGhlIG5leHQgYmF0Y2ggb2YgaW5k ZXggdHVwbGVzIGluIHRoZSBnaXZlbiBzY2FuLCBtb3ZpbmcgaW4gdGhlCisgICBnaXZlbiBkaXJl Y3Rpb24gKGZvcndhcmQgb3IgYmFja3dhcmQgaW4gdGhlIGluZGV4KS4gIFJldHVybnMgYW4gaW5z dGFuY2Ugb2YKKyAgIDx0eXBlPkluZGV4U2NhbkJhdGNoPC90eXBlPiB3aXRoIGluZGV4IHR1cGxl cyBsb2FkZWQsIG9yCisgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBpZiB0aGVyZSBhcmUgbm8g bW9yZSBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVuCisgICBzY2FuIGRpcmVjdGlvbi4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g aW50ZXJmYWNlIGlzIGFuIGFsdGVybmF0aXZlIHRvCisgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwv ZnVuY3Rpb24+IHRoYXQgcmV0dXJucyBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGluIGJhdGNoZXMK KyAgIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuICBCeSByZXR1cm5pbmcgYWxsIG1hdGNoaW5n IGluZGV4IGVudHJpZXMgZnJvbSBhCisgICBzaW5nbGUgaW5kZXggcGFnZSB0b2dldGhlciwgdGhl IHRhYmxlIEFNIGdhaW5zIHZpc2liaWxpdHkgaW50byB3aGljaCB0YWJsZQorICAgYmxvY2tzIHdp bGwgYmUgbmVlZGVkIGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgor ICAgVGhlIHRhYmxlIEFNIHBhc3NlcyA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPiB0byBp bmRpY2F0ZSB3aGVyZSB0aGUKKyAgIGluZGV4IEFNIHNob3VsZCBjb250aW51ZSBzY2FubmluZyBm cm9tIChvciA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBvbiB0aGUKKyAgIGZpcnN0IGNhbGwgZm9y IHRoZSBzY2FuKS4gIFRoZSBpbmRleCBBTSB1c2VzIGluZm9ybWF0aW9uIGZyb20KKyAgIDxsaXRl cmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IHRvIGRldGVybWluZSB3aGljaCBpbmRleCBwYWdlIHRv IHJlYWQgbmV4dC4KKyAgIFVubGlrZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCB3 aGVyZSB0aGUgaW5kZXggQU0gbWFpbnRhaW5zIGl0cworICAgb3duIHNjYW4gcG9zaXRpb24sIHdp dGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpdCBpcyB0aGUgY2FsbGVyCisgICB0 aGF0IGNvbnRyb2xzIHRoZSBwcm9ncmVzcyBvZiB0aGUgc2NhbiB0aHJvdWdoIHRoZSBpbmRleC4g IFRoZSBjYWxsZXIKKyAgIHdpbGwgdHlwaWNhbGx5IHBhc3MgdGhlIG1vc3QgcmVjZW50bHkgcmV0 dXJuZWQgYmF0Y2gsIGJ1dCB0aGlzIGlzIG5vdAorICAgZ3VhcmFudGVlZCAmbWRhc2g7IGZvciBl eGFtcGxlLCBmb2xsb3dpbmcgdGhlIHJlc3RvcmF0aW9uIG9mIGEgbWFya2VkCisgICBwb3NpdGlv biwgYW4gZWFybGllciBiYXRjaCBtYXkgYmUgcGFzc2VkIGluc3RlYWQuCisgIDwvcGFyYT4KKwor ICA8cGFyYT4KKyAgIEEgYmF0Y2ggcmV0dXJuZWQgYnkgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBpcyBhc3NvY2lhdGVkIHdpdGggYW4KKyAgIGluZGV4IHBhZ2UgY29udGFpbmluZyBh dCBsZWFzdCBvbmUgbWF0Y2hpbmcgaXRlbS90dXBsZS4gIEEgYnVmZmVyCisgICBwaW4gY2FuIGJl IGhlbGQgb250byBieSB0aGUgdGFibGUgQU0gYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3Vy cmVudCBUSUQKKyAgIHJlY3ljbGluZyBieSA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LiAgVGhl IHRhYmxlIEFNIGRyb3BzIHRoaXMgaW50ZXJsb2NrCisgICBieSBjYWxsaW5nIDxmdW5jdGlvbj5h bXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+IHdoZW4gaXQgaXMgc2FmZSB0byBkbyBzby4KKyAgIFNl ZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+IGZvciBkZXRhaWxzIG9uIGJ1ZmZlciBw aW4gbWFuYWdlbWVudAorICAgZHVyaW5nIGluZGV4IHNjYW5zLgorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBBIDx0eXBlPkluZGV4U2NhbkJhdGNoPC90eXBlPiB0aGF0IGlzIHJldHVybmVkIGJ5 CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlzIG5vIGxvbmdlciBtYW5hZ2Vk IGJ5IHRoZSBhY2Nlc3MgbWV0aG9kLgorICAgSXQgaXMgdXAgdG8gdGhlIHRhYmxlIEFNIGNhbGxl ciB0byBkZWNpZGUgd2hlbiBpdCBzaG91bGQgYmUgcmVsZWFzZWQuICBOb3RlCisgICBhbHNvIHRo YXQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgbXVzdCBuZXZlciBt b2RpZnkgdGhlCisgICA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+IHBhcmFt ZXRlci4gIFRoZSBjb3JlCisgICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS88 L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhCisgICByZWZlcmVuY2UgZXhhbXBs ZXMgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLgorICA8 L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgc2FtZSBjYXZlYXRzIGRlc2NyaWJlZCBmb3IgPGZ1 bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhcHBseSBoZXJlCisgICB0b286IGFuIGVudHJ5 IGluIHRoZSByZXR1cm5lZCBiYXRjaCBtZWFucyBvbmx5IHRoYXQgdGhlIGluZGV4IGNvbnRhaW5z CisgICBhbiBlbnRyeSB0aGF0IG1hdGNoZXMgdGhlIHNjYW4ga2V5cywgbm90IHRoYXQgdGhlIHR1 cGxlIG5lY2Vzc2FyaWx5IHN0aWxsCisgICBleGlzdHMgaW4gdGhlIGhlYXAgb3Igd2lsbCBwYXNz IHRoZSBjYWxsZXIncyBzbmFwc2hvdCB0ZXN0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJ bmRleCBhY2Nlc3MgbWV0aG9kcyB1c2luZyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IG11c3Qgc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiB0byBp bmRpY2F0ZSB3aGV0aGVyIHJlY2hlY2tpbmcgb2YKKyAgIHNjYW4ga2V5cyBpcyByZXF1aXJlZCwg aW4gdGhlIHNhbWUgd2F5IGFzIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgIGRv ZXMuIEhvd2V2ZXIsIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVyYWw+IG11c3Qg YmUgc2V0IGNvbnNpc3RlbnRseQorICAgZm9yIGFuIGVudGlyZSBzY2FuIHJhdGhlciB0aGFuIHZh cnlpbmcgb24gYSBwZXItdHVwbGUgYmFzaXMuIFRoaXMgaXMgYSBrZXkKKyAgIGRpZmZlcmVuY2Ug ZnJvbSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCB3aGljaCBjYW4gc2V0CisgICA8 bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBpbmRlcGVuZGVudGx5IGZvciBl YWNoIHR1cGxlIGl0IHJldHVybnMuCisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHJlcXVp cmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyCisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNr PC9saXRlcmFsPiBtdXN0IHVzZSB0aGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPgor ICAgaW50ZXJmYWNlIGluc3RlYWQgb2YgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPi4K KyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgU2ltaWxhcmx5LCB0aGUgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UgZG9lcyBub3QgY3VycmVudGx5CisgICBzdXBwb3J0 IGluZGV4LW9ubHkgc2NhbnMgdGhhdCByZXR1cm4gZGF0YSBpbiB0aGUgZm9ybSBvZiBhCisgICA8 c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IHBvaW50ZXIgc3RvcmVkIGluCisgICA8 bGl0ZXJhbD5zY2FuLSZndDt4c19oaXR1cDwvbGl0ZXJhbD4uCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIFRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIG11c3QgcHJvdmlkZSBlaXRoZXIgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPgorICAgb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1 bmN0aW9uPiwgYnV0IG5vdCBib3RoLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlk ZWQgaWYgdGhlCisgICBhY2Nlc3MgbWV0aG9kIHN1cHBvcnRzIDxxdW90ZT5wbGFpbjwvcXVvdGU+ IGluZGV4IHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKKyAgIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+IGZpZWxkIGluIGl0cworICAgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8 L3N0cnVjdG5hbWU+IHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgorICA8L3BhcmE+CisKKyAg PHBhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkCithbXVuZ3VhcmRiYXRjaCAoSW5kZXhTY2Fu RGVzYyBzY2FuLAorICAgICAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKzwvcHJv Z3JhbWxpc3Rpbmc+CisgICBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNICh2aWEKKyAgIDxmdW5jdGlv bj50YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRjaDwvZnVuY3Rpb24+KSB3aGVuIGl0IGlzIHNhZmUg dG8gZHJvcAorICAgdGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIHRoYXQgdGhlIGluZGV4IEFN IGhvbGRzIG9uIHRoZSBiYXRjaCdzIGluZGV4CisgICBsZWFmIHBhZ2UsIHdoaWNoIHByZXZlbnRz IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieQorICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5k Pi4KKyAgIEZvcm1hbGx5LCBhbiBpbmRleCBBTSBtYXkgaG9sZCBhIGRpZmZlcmVudCBraW5kIG9m IGludGVybG9jaywgb3IgbXVsdGlwbGUKKyAgIGludGVybG9ja3MsIGluIGl0cyBwZXItYmF0Y2gg b3BhcXVlIGFyZWEsIGJ1dCBpbiBwcmFjdGljZSB0aGUgYnVpbHQtaW4KKyAgIGluZGV4IEFNIHRo YXQgc3VwcG9ydHMgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7IEItdHJl ZQorICAgJm1kYXNoOyBob2xkcyBhIHNpbmdsZSBidWZmZXIgcGluLiAgU2VlIDx4cmVmIGxpbmtl bmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yCisgICBkZXRhaWxzIG9uIGJ1ZmZlciBwaW4gbWFuYWdl bWVudCBkdXJpbmcgaW5kZXggc2NhbnMuICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUKKyAgIGNhbGxl ZCBhdCBtb3N0IG9uY2UgZm9yIGVhY2ggZ3VhcmRlZCBiYXRjaDsgaXQgaXMgbm90IGNhbGxlZCB3 aGVuIHRoZSBpbmRleAorICAgQU0gaGFzIGFscmVhZHkgdW5ndWFyZGVkIHRoZSBiYXRjaCBpdHNl bGYgKGFzIGl0IGRvZXMgd2hlbgorICAgPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFy ZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUsIHdoaWNoIGlzIHRoZQorICAgY29tbW9uIGNhc2UpLgor ICA8L3BhcmE+CisKKyAgPG5vdGU+CisgICA8cGFyYT4KKyAgICBUaGUgaW5kZXggQU0gbWF5IGNo b29zZSB0byByZXRhaW4gaXRzIG93biBidWZmZXIgcGlucyB3aGVuIHRoaXMgc2VydmVzIGFuCisg ICAgaW50ZXJuYWwgcHVycG9zZSAoZm9yIGV4YW1wbGUsIG1haW50YWluaW5nIGEgZGVzY2VudCBz dGFjayBvZiBwaW5uZWQgaW5kZXgKKyAgICBwYWdlcyBmb3IgcmV1c2UgYWNyb3NzIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbHMpLiAgSG93ZXZlciwKKyAgICBhbnkgc2NoZW1l IHRoYXQgcmV0YWlucyBidWZmZXIgcGlucyBtYW5hZ2VkIGJ5IHRoZSBpbmRleCBBTSBtdXN0IGJl IHN1cmUKKyAgICB0byBmcmVlIHRoZSBwaW5zIGF0IGFuIG9wcG9ydHVuZSBwb2ludCAoYXQgYSBt aW5pbXVtIHdoZW5ldmVyCisgICAgPGZ1bmN0aW9uPmFtZW5kc2NhbjwvZnVuY3Rpb24+IGlzIGNh bGxlZCwgYW5kIHR5cGljYWxseSB3aGVuCisgICAgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlv bj4gaXMgY2FsbGVkKS4gIEl0IG11c3QgYWxzbyBrZWVwIHRoZSBudW1iZXIgb2YKKyAgICByZXRh aW5lZCBwaW5zIGZpeGVkIGFuZCBzbWFsbC4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxw YXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9u IGlzIHJlcXVpcmVkIGZvciBhbnkgaW5kZXgKKyAgIGFjY2VzcyBtZXRob2QgdGhhdCBwcm92aWRl cyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+ Cis8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkCithbWtpbGxpdGVtc2JhdGNoIChJbmRleFNjYW5EZXNj IHNjYW4sCisgICAgICAgICAgICAgICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7Cis8L3Byb2dy YW1saXN0aW5nPgorICAgQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0IGhhcyBmaW5pc2hl ZCBwcm9jZXNzaW5nIGEgYmF0Y2ggdGhhdAorICAgY29udGFpbnMgZGVhZCBpdGVtcywgdG8gc2V0 IDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgaW4gdGhlIGJhdGNoJ3MKKyAgIGluZGV4 IHBhZ2UuICBUaGUgYmF0Y2gncyBpbmRleCBwYWdlIHdpbGwgbm90IGJlIGxvY2tlZCBieSB0aGUg Y2FsbGVyOyB0aGUKKyAgIGluZGV4IEFNIG11c3QgYWNxdWlyZSBhbmQgcmVsZWFzZSBpdHMgb3du IGxvY2sgKGFuZCBwaW4pIG9uIHRoZSBpbmRleCBwYWdlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBJbXBsZW1lbnRpbmcgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBp cyBvcHRpb25hbCBmb3IKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW5kZXgg QU1zICh0aG9zZSB0aGF0IGRvbid0IGNhbiBsZWF2ZQorICAgdGhlIGZpZWxkIHNldCB0byA8bGl0 ZXJhbD5OVUxMPC9saXRlcmFsPiksIGJ1dCBkb2luZyBzbyBpcyByZWNvbW1lbmRlZCBmb3IKKyAg IHBlcmZvcm1hbmNlLCBhcyBpdCBhbGxvd3MgZnV0dXJlIHNjYW5zIHRvIHNraXAga25vd24tZGVh ZCBpbmRleCBlbnRyaWVzLgorICAgVGhlIGNvcmUgaW5kZXggYWNjZXNzIG1ldGhvZCB0aGF0IGN1 cnJlbnRseSBzdXBwb3J0cworICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10 cmVlKSBpbXBsZW1lbnRzCisgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5nLCB0 aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNjZXNzIG1ldGhvZHMKKyAgIGFyZSBmcmVlIHRvIGNo b29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0aGlzIGZlYXR1cmUuICBUaGUgdGFibGUgQU0gbWF5 CisgICBjYWxsIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfc2NhbnBvc19raWxsaXRlbTwvZnVuY3Rp b24+IHRvIG1hcmsgZGVhZCBpdGVtcyBhcworICAgdGhlIHNjYW4gcHJvZ3Jlc3Nlcy4gIElmIHRo ZSBiYXRjaCBjb250YWlucyBhbnkgc3VjaCBkZWFkIGl0ZW1zLCB0aGUgYmF0Y2gncworICAgPHN0 cnVjdGZpZWxkPmRlYWRJdGVtczwvc3RydWN0ZmllbGQ+IGFycmF5IHdpbGwgaGF2ZSBiZWVuIHNv cnRlZCBhbmQKKyAgIGRlZHVwbGljYXRlZCBiZWZvcmUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0 Y2g8L2Z1bmN0aW9uPiBpcyBjYWxsZWQsIHdpdGgKKyAgIGl0ZW0gb2Zmc2V0cyBhcHBlYXJpbmcg aW4gYXNjZW5kaW5nIG9yZGVyICh0aGF0IGlzLCBpbiBpbmRleCBwYWdlIG9yZGVyLAorICAgd2hp Y2ggaXMgYWxzbyBiYXRjaCBvcmRlcikgYW5kIG5vIG9mZnNldCBhcHBlYXJpbmcgbW9yZSB0aGFu IG9uY2UuICBJbmRleAorICAgYWNjZXNzIG1ldGhvZHMgY2FuIHJlbHkgb24gdGhpcyBvcmRlcmlu ZyB3aGVuIHByb2Nlc3NpbmcgZGVhZCBpdGVtczogdGhlCisgICA8c3RydWN0ZmllbGQ+ZGVhZEl0 ZW1zPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgY2FuIGJlIHdhbGtlZCBpbiBsb2Nrc3RlcCB3aXRoCisg ICB0aGUgaW5kZXggcGFnZSdzIGl0ZW0gcG9pbnRlcnMsIHNpbmNlIGJvdGggYXJlIGluIGFzY2Vu ZGluZyBwYWdlIG9mZnNldAorICAgbnVtYmVyIG9yZGVyLiAgVGhpcyBhbHNvIG1lYW5zIHRoZSB0 YWJsZSBBTSBuZWVkIG5vdCBjYWxsCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3NjYW5wb3Nf a2lsbGl0ZW08L2Z1bmN0aW9uPiBpbiBhbnkgcGFydGljdWxhciBvcmRlci4KKyAgPC9wYXJhPgor CisgIDxub3RlPgorICAgPHBhcmE+CisgICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1 bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiByZWx5IG9uIHRoZQorICAgIDxzdHJ1Y3RmaWVs ZD5raWxsX3ByaW9yX3R1cGxlPC9zdHJ1Y3RmaWVsZD4gbWVjaGFuaXNtIGluc3RlYWQgdG8gbWFy ayBkZWFkCisgICAgdHVwbGVzLgorICAgPC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+Cisg ICBXaGVuIGltcGxlbWVudGluZyA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+ LCB0aGUgaW5kZXggQU0KKyAgIG11c3QgdmVyaWZ5IHRoYXQgdGhlIGluZGV4IHBhZ2UgaGFzIG5v dCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBiYXRjaCB3YXMKKyAgIG9yaWdpbmFsbHkgcmVhZC4g IFRoZSBzdGFuZGFyZCB3YXkgdG8gZG8gdGhpcyBpcyB0byBjYWxsCisgICA8ZnVuY3Rpb24+aW5k ZXhhbV91dGlsX3VubG9ja19iYXRjaDwvZnVuY3Rpb24+IGR1cmluZworICAgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiwgd2hpY2ggcmVsZWFzZXMgdGhlIGluZGV4IHBhZ2UgbG9jayBh bmQKKyAgIHNhdmVzIHRoZSBwYWdlIExTTiBpbgorICAgdGhlIGJhdGNoJ3MgPHN0cnVjdGZpZWxk Pmxzbjwvc3RydWN0ZmllbGQ+IGZpZWxkLiAgTGF0ZXIsIHdpdGhpbgorICAgPGZ1bmN0aW9uPmFt a2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiwgdGhlIGluZGV4IEFNIHJlLXJlYWRzIHRoZSBwYWdl LAorICAgY29tcGFyZXMgdGhlIGN1cnJlbnQgcGFnZSBMU04gYWdhaW5zdAorICAgPHN0cnVjdGZp ZWxkPmJhdGNoLSZndDtsc248L3N0cnVjdGZpZWxkPiwgYW5kIGdpdmVzIHVwIG9uIHNldHRpbmcK KyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgaWYgdGhlIExTTiBoYXMgYWR2YW5j ZWQuICBBbiBhZHZhbmNlZCBMU04KKyAgIGluZGljYXRlcyB0aGF0IHRoZSBwYWdlIHdhcyBtb2Rp ZmllZCAmbWRhc2g7IHBvc3NpYmx5IGJ5CisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJl Y3ljbGluZyB0YWJsZSBUSURzICZtZGFzaDsgc28gaXQgd291bGQgYmUKKyAgIHVuc2FmZSB0byBh c3N1bWUgdGhhdCBpbmRleCBlbnRyaWVzIHN0aWxsIHBvaW50IHRvIHRoZSBzYW1lIGhlYXAvdGFi bGUKKyAgIHR1cGxlcy4gIFNpbmNlIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtpbmcg aXMgb25seSBhbiBvcHRpbWl6YXRpb24KKyAgIGhpbnQsIGl0IGlzIGFsd2F5cyBzYWZlIHRvIHNr aXAgaXQuICBCLXRyZWUgdXNlcyB0aGlzIGFwcHJvYWNoLgorICA8L3BhcmE+CisKKyAgPHdhcm5p bmc+CisgICA8cGFyYT4KKyAgICBUaGlzIExTTiBjb21wYXJpc29uIHRlY2huaXF1ZSByZXF1aXJl cyB0aGUgaW5kZXggQU0gdG8gdXNlIGZha2UKKyAgICAobW9ub3RvbmljYWxseSBpbmNyZWFzaW5n KSBMU05zIG9uIGl0cyBwYWdlcyBmb3IgcmVsYXRpb25zIHdoZXJlIFdBTCBpcworICAgIG5vdCBn ZW5lcmF0ZWQsIHNpbmNlIHJlYWwgTFNOcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGF0IGNhc2Uu ICBTZWUgdGhlCisgICAgQi10cmVlIGluZGV4IGltcGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5j ZSBleGFtcGxlIG9mIHRoaXMKKyAgICB0ZWNobmlxdWUuICBBbiBpbmRleCBBTSB0aGF0IGRvZXMg bm90IGltcGxlbWVudCBmYWtlIExTTnMgY2FuIHN0aWxsCisgICAgcHJvdmlkZSA8ZnVuY3Rpb24+ YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+LCBidXQgc2hvdWxkIHNpbXBseSBkbworICAgIG5v dGhpbmcgd2hlbiB0aGUgcmVsYXRpb24gZG9lcyBub3QgZ2VuZXJhdGUgV0FMIChpLmUuLCB3aGVu CisgICAgPGZ1bmN0aW9uPlJlbGF0aW9uTmVlZHNXQUwoKTwvZnVuY3Rpb24+IGlzIGZhbHNlKSwg c2luY2UgdGhlIExTTgorICAgIGNvbXBhcmlzb24gd291bGQgYmUgdW5yZWxpYWJsZS4KKyAgIDwv cGFyYT4KKyAgPC93YXJuaW5nPgorCisgIDx0aXA+CisgICA8cGFyYT4KKyAgICBJbmRleCBBTXMg YXJlIG5vdCBvYmxpZ2F0ZWQgdG8gdXNlCisgICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF91bmxv Y2tfYmF0Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7IHRoZXkgY2FuIGltcGxlbWVudAorICAgIHRoZWly IG93biBlcXVpdmFsZW50LCBhbmQgYXJlIGZyZWUgdG8gdXNlIHRoZSBiYXRjaAorICAgIDxzdHJ1 Y3RmaWVsZD5sc248L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiB3aGF0ZXZlciB3YXkgdGhleSBkZWVt IG5lY2Vzc2FyeQorICAgPC9wYXJhPgorICA8L3RpcD4KKworICA8cGFyYT4KKyAgIFRoaXMgTFNO LWJhc2VkIHZlcmlmaWNhdGlvbiBtZWFucyB0aGF0IHRoZSB0YWJsZSBBTSBuZWVkIG5vdCBjb25z aWRlcgorICAgd2hldGhlciB1bmd1YXJkaW5nIGEgYmF0Y2ggY291bGQgaW50cm9kdWNlIFRJRCBy ZWN5Y2xpbmcgaGF6YXJkcyBmb3IgYQorICAgc3Vic2VxdWVudCA8ZnVuY3Rpb24+YW1raWxsaXRl bXNiYXRjaDwvZnVuY3Rpb24+IGNhbGwuICBUaGUgaGF6YXJkcyBhcmUgdGhlCisgICBzYW1lIGlu IGJvdGggY2FzZXMsIGJ1dCBzaW5jZSA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rp b24+CisgICBpbmRlcGVuZGVudGx5IHZlcmlmaWVzIHRoZSBwYWdlIExTTiBhbmQgY2FuIGFsd2F5 cyBzYWZlbHkgZ2l2ZSB1cCBvbgorICAgc2V0dGluZyA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFs PiBiaXRzLCBjb3JyZWN0bmVzcyBpcyBvYnZpb3VzIHdpdGhvdXQgYW55CisgICBjb3VwbGluZyBi ZXR3ZWVuIHRoZSB0d28uCisgIDwvcGFyYT4KIAogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4K QEAgLTc2OCw4ICsxMDY4LDggQEAgYW1nZXRiaXRtYXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAg IGl0c2VsZiwgYW5kIHRoZXJlZm9yZSBjYWxsZXJzIHJlY2hlY2sgYm90aCB0aGUgc2NhbiBjb25k aXRpb25zIGFuZCB0aGUKICAgIHBhcnRpYWwgaW5kZXggcHJlZGljYXRlIChpZiBhbnkpIGZvciBy ZWNoZWNrYWJsZSB0dXBsZXMuICBUaGF0IG1pZ2h0IG5vdAogICAgYWx3YXlzIGJlIHRydWUsIGhv d2V2ZXIuCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQKLSAgIDxmdW5j dGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2Fubm90IGJlIHVzZWQgaW4gdGhlIHNhbWUgaW5k ZXggc2NhbjsgdGhlcmUKKyAgIE9ubHkgb25lIG9mIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVu Y3Rpb24+LCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LAorICAgb3IgPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gaW5kZXggc2Nh bjsgdGhlcmUKICAgIGFyZSBvdGhlciByZXN0cmljdGlvbnMgdG9vIHdoZW4gdXNpbmcgPGZ1bmN0 aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIGFzIGV4cGxhaW5lZAogICAgaW4gPHhyZWYgbGlu a2VuZD0iaW5kZXgtc2Nhbm5pbmciLz4uCiAgIDwvcGFyYT4KQEAgLTc4MSw2ICsxMDgxLDM5IEBA IGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBzdHJ1Y3QgbXVzdCBiZSBzZXQg dG8gTlVMTC4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMg dGhhdCBzdXBwb3J0IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gd2lsbAorICAgdHlw aWNhbGx5IGFsc28gc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwgYW5k IGFsbW9zdCBhbGwgb2YKKyAgIHRoZSBpbmRleCBBTSdzIGludGVybmFsIHNjYW5uaW5nIGNvZGUg aXMgc2hhcmVkIGJldHdlZW4gdGhlIHR3byBwYXRocy4gIFRoZQorICAgbWFpbiBkaWZmZXJlbmNl IGlzIHRoYXQgZHVyaW5nIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IG9ubHkgb25l CisgICBiYXRjaCBpcyBhbGxvY2F0ZWQgYXQgYSB0aW1lICh2aWEgPGZ1bmN0aW9uPmluZGV4YW1f dXRpbF9hbGxvY19iYXRjaDwvZnVuY3Rpb24+KSwKKyAgIHVubGlrZSA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IHdoZXJlIHRoZSB0YWJsZSBBTSBtYW5hZ2VzIHNldmVyYWwKKyAgIGJh dGNoZXMgaW4gYSBkZWRpY2F0ZWQgYmF0Y2ggcmluZyBidWZmZXIgZGF0YSBzdHJ1Y3R1cmUuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBvbmx5IGNoYW5nZSBuZWVkZWQgdG8gbWFpbnRh aW4gdGhpcyBpbnZhcmlhbnQgaXMgYSBzaW5nbGUgY2FsbCB0bworICAgPGZ1bmN0aW9uPmluZGV4 YW1fdXRpbF9yZWxlYXNlX2JhdGNoPC9mdW5jdGlvbj4gYXQgdGhlIHBvaW50IHdoZXJlIHRoZQor ICAgc2NhbiBtb3ZlcyBiZXR3ZWVuIGluZGV4IHBhZ2VzLCBjb25kaXRpb25hbCBvbiB0aGUgc2Nh bidzCisgICA8c3RydWN0ZmllbGQ+dXNlYmF0Y2hyaW5nPC9zdHJ1Y3RmaWVsZD4gZmllbGQgYmVp bmcgZmFsc2UgKGluZGljYXRpbmcgYQorICAgYml0bWFwIGluZGV4IHNjYW4pLiAgVGhlIGluZGV4 IEFNIHJlbGVhc2VzIGl0cyBwcmlvciBiYXRjaAorICAganVzdCBhcyBpdCBpcyBhYm91dCB0byBn ZW5lcmF0ZSB0aGUgbmV4dCBiYXRjaCAmbWRhc2g7IHRoZSBzYW1lIHBvaW50CisgICB3aGVyZSBp dCBleHRyYWN0cyBuYXZpZ2F0aW9uIHN0YXRlIChzdWNoIGFzIHNpYmxpbmctcGFnZSBsaW5rcykg ZnJvbQorICAgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4uICBObyBvdGhlciBjaGFuZ2Vz IHRvIHRoZSBpbmRleCBBTSdzCisgICBzY2FubmluZyBsb2dpYyBhcmUgbmVlZGVkLiAgVGhpcyBl YXJseSByZWxlYXNlIGlzIHNwZWNpZmljIHRvCisgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1 bmN0aW9uPiBzY2FuczsgZHVyaW5nCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IHNjYW5zIHRoZSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPgorICAgaXMgc3RyaWN0bHkg b3duZWQgYnkgdGhlIGNhbGxlciAodGhlIHRhYmxlIEFNKSwgYW5kIHRoZSBpbmRleCBBTSBtdXN0 CisgICBuZXZlciByZWxlYXNlIGl0LiAgU2VlIDxmdW5jdGlvbj5fYnRfbmV4dDwvZnVuY3Rpb24+ IGZvciBhIHJlZmVyZW5jZQorICAgZXhhbXBsZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg VGhlIHJlbGVhc2VkIGJhdGNoIGlzIGNhY2hlZCBpbnRlcm5hbGx5IGFuZCByZXVzZWQgYnkgdGhl IG5leHQKKyAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2g8L2Z1bmN0aW9uPiBj YWxsLCBhdm9pZGluZyByZXBlYXRlZAorICAgbWVtb3J5IGFsbG9jYXRpb24gZHVyaW5nIHRoZSBi aXRtYXAgc2Nhbi4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgogdm9p ZApAQCAtNzk1LDMyICsxMTI4LDUyIEBAIGFtZW5kc2NhbiAoSW5kZXhTY2FuRGVzYyBzY2FuKTsK ICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2b2lkCi1hbW1hcmtwb3MgKEluZGV4U2NhbkRl c2Mgc2Nhbik7CithbXBvc3Jlc2V0IChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAgICBJ bmRleFNjYW5CYXRjaCBiYXRjaCk7CiA8L3Byb2dyYW1saXN0aW5nPgotICAgTWFyayBjdXJyZW50 IHNjYW4gcG9zaXRpb24uICBUaGUgYWNjZXNzIG1ldGhvZCBuZWVkIG9ubHkgc3VwcG9ydCBvbmUK LSAgIHJlbWVtYmVyZWQgc2NhbiBwb3NpdGlvbiBwZXIgc2Nhbi4KKyAgIE5vdGlmeSB0aGUgaW5k ZXggQU0gdGhhdCB0aGUgdGFibGUgQU0gaXMgYWJvdXQgdG8gY2hhbmdlIHRoZSBzY2FuJ3MKKyAg IGxvZ2ljYWwgcG9zaXRpb24gaW4gYSB3YXkgdGhhdCBtYXkgaW52YWxpZGF0ZSBpbmRleCBBTSBz dGF0ZSB0aGF0CisgICBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgc2NhbidzIHByb2dyZXNzLiAg VGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4KKyAgIHRoZSB0YWJsZSBBTSBpcyBhYm91dCB0 byBwcm9jZXNzIGEgYmF0Y2ggaW4gYSBkaWZmZXJlbnQgZGlyZWN0aW9uIHRoYW4KKyAgIHdhcyB1 c2VkIHdoZW4gdGhlIGJhdGNoIHdhcyBvcmlnaW5hbGx5IHJldHVybmVkIGJ5CisgICA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBhbmQgYWxzbyB3aGVuIGEgbWFya2VkIHNjYW4gcG9z aXRpb24gaXMKKyAgIGFib3V0IHRvIGJlIHJlc3RvcmVkLiAgU29tZSBpbmRleCBBTXMgbWFpbnRh aW4gaW50ZXJuYWwgc3RhdGUgdGhhdAorICAgYWR2YW5jZXMgaW4gbG9ja3N0ZXAgd2l0aCB0aGUg c2NhbiB1bmRlciB0aGUgc29mdCBhc3N1bXB0aW9uIHRoYXQgdGhlIHNjYW4KKyAgIGRpcmVjdGlv biB3aWxsIG5vdCBjaGFuZ2UuICBTdWNoIHN0YXRlIG1heSBmYWxsIGJlaGluZCB0aGUgc2Nhbidz IHRydWUKKyAgIHBvc2l0aW9uIHdpdGhvdXQgaGFybSAoc2ltcGx5IHJlYWRpbmcgdGhlIG5leHQg aW5kZXggcGFnZSB3aWxsIGFsbG93IHRoZQorICAgc3RhdGUgdG8gPHF1b3RlPmNhdGNoIHVwPC9x dW90ZT4pLCBidXQgbXVzdCBuZXZlciBnZXQgYWhlYWQgb2YgaXQuICBXaGVuCisgICB0aGUgc2Nh biBkaXJlY3Rpb24gY2hhbmdlcyBvciBhIG1hcmtlZCBwb3NpdGlvbiBpcyByZXN0b3JlZCwgdGhl IGFzc3VtcHRpb24KKyAgIGlzIHZpb2xhdGVkLCBzbyB0aGUgaW5kZXggQU0gbXVzdCByZXNldCB0 aGUgc3RhdGUgdG8gYSBzYWZlIHN0YXJ0aW5nIHBvaW50CisgICBmb3IgdGhlIG5ldyBkaXJlY3Rp b24uICBGb3IgZXhhbXBsZSwgQi10cmVlIHVzZXMgdGhpcyBjYWxsYmFjayB0byByZXNldCBpdHMK KyAgIDxsaXRlcmFsPlNjYWxhckFycmF5T3BFeHByPC9saXRlcmFsPiBhcnJheSBrZXlzIHRvIHRo ZWlyIGluaXRpYWwgcG9zaXRpb25zCisgICBmb3IgdGhlIG5ldyBzY2FuIGRpcmVjdGlvbi4KICAg PC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9u PiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlIGFjY2VzcwotICAgbWV0aG9k IHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMuICBJZiBpdCBkb2Vzbid0LAotICAgdGhlIDxzdHJ1Y3Rm aWVsZD5hbW1hcmtwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5k ZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3QgbWF5IGJlIHNldCB0byBOVUxMLgor ICAgV2hlbiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGlzIGNhbGxlZCBkdWUgdG8g YSBjcm9zcy1iYXRjaAorICAgZGlyZWN0aW9uIGNoYW5nZSwgdGhlIGNvcmUgc3lzdGVtIHdpbGwg aGF2ZSBhbHJlYWR5IGZsaXBwZWQgdGhlIGJhdGNoJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5kaXI8L3N0 cnVjdGZpZWxkPiBmaWVsZCB0byByZWZsZWN0IHRoZSBuZXcgc2NhbiBkaXJlY3Rpb24KKyAgIGJl Zm9yZSBtYWtpbmcgdGhlIGNhbGwuICBUaGUgaW5kZXggQU0gc2hvdWxkIHVzZSB0aGlzIHVwZGF0 ZWQgZGlyZWN0aW9uCisgICB3aGVuIHJlc2V0dGluZyBhbnkgc3RhdGUgdGhhdCBkZXBlbmRzIG9u IGtub3dpbmcgd2hpY2ggd2F5IHRoZSBzY2FuIGlzCisgICBwcm9jZWVkaW5nLiAgV2hlbiBjYWxs ZWQgdG8gcmVzdG9yZSBhIG1hcmtlZCBwb3NpdGlvbiwgdGhlIGJhdGNoJ3MKKyAgIDxzdHJ1Y3Rm aWVsZD5kaXI8L3N0cnVjdGZpZWxkPiBpcyBub3QgbW9kaWZpZWQ7IGl0IHJldGFpbnMgdGhlIGRp cmVjdGlvbgorICAgZnJvbSB3aGVuIHRoZSBiYXRjaCB3YXMgb3JpZ2luYWxseSByZXR1cm5lZC4g IEluIGJvdGggY2FzZXMsIHRoZSBiYXRjaAorICAgcGFzc2VkIHRvIDxmdW5jdGlvbj5hbXBvc3Jl c2V0PC9mdW5jdGlvbj4gaXMgdGhlIGJhdGNoIHRoYXQgd2lsbCBuZXh0IGJlCisgICBwYXNzZWQg dG8gPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBhcyBpdHMKKyAgIDxsaXRlcmFsPnBy aW9yYmF0Y2g8L2xpdGVyYWw+LiAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgdGhlCisgICA8bGl0 ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi48c3RydWN0ZmllbGQ+ZGlyPC9zdHJ1Y3RmaWVsZD4g ZmllbGQgaXMKKyAgIGd1YXJhbnRlZWQgdG8gaGF2ZSB0aGUgc2FtZSBzY2FuIGRpcmVjdGlvbiBh cyB3aGVuCisgICA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IHdhcyBjYWxsZWQuCiAg IDwvcGFyYT4KIAogICA8cGFyYT4KLTxwcm9ncmFtbGlzdGluZz4KLXZvaWQKLWFtcmVzdHJwb3Mg KEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci08L3Byb2dyYW1saXN0aW5nPgotICAgUmVzdG9yZSB0aGUg c2NhbiB0byB0aGUgbW9zdCByZWNlbnRseSBtYXJrZWQgcG9zaXRpb24uCi0gIDwvcGFyYT4KLQot ICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1yZXN0cnBvczwvZnVuY3Rpb24+IGZ1bmN0aW9u IG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMg b3JkZXJlZCBzY2Fucy4gIElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtcmVz dHJwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRp bmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3QgbWF5IGJlIHNldCB0byBOVUxMLgorICAgSW5kZXgg YWNjZXNzIG1ldGhvZHMgdGhhdCBoYXZlIHByaXZhdGUgc3RhdGUgd2hpY2ggbXVzdCBiZSByZXNl dCB3aGVuIHRoZQorICAgc2NhbiBwb3NpdGlvbiBjaGFuZ2VzIG11c3QgcHJvdmlkZSBhbiA8ZnVu Y3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+CisgICBpbXBsZW1lbnRhdGlvbi4gIEluZGV4IEFN cyB3aXRoIG5vIHN1Y2ggc3RhdGUgbWF5IHNldAorICAgPHN0cnVjdGZpZWxkPmFtcG9zcmVzZXQ8 L3N0cnVjdGZpZWxkPiB0byBOVUxMLiAgVGhlCisgICA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVu Y3Rpb24+IGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdoZW4gdGhlCisgICBhY2Nlc3Mg bWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMgdGhyb3VnaCB0aGUKKyAgIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBA IC05NzUsNiArMTMyOCw4IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlw ZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgICAgICBBY2Nlc3MgbWV0aG9kcyB0 aGF0IGFsd2F5cyByZXR1cm4gZW50cmllcyBpbiB0aGUgbmF0dXJhbCBvcmRlcmluZwogICAgICAg IG9mIHRoZWlyIGRhdGEgKHN1Y2ggYXMgYnRyZWUpIHNob3VsZCBzZXQKICAgICAgICA8c3RydWN0 ZmllbGQ+YW1jYW5vcmRlcjwvc3RydWN0ZmllbGQ+IHRvIHRydWUuCisgICAgICAgQm90aCA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVu Y3Rpb24+CisgICAgICAgc2NhbnMgc3VwcG9ydCB0aGlzIGNhcGFiaWxpdHkuCiAgICAgICAgQ3Vy cmVudGx5LCBzdWNoIGFjY2VzcyBtZXRob2RzIG11c3QgdXNlIGJ0cmVlLWNvbXBhdGlibGUgc3Ry YXRlZ3kKICAgICAgICBudW1iZXJzIGZvciB0aGVpciBlcXVhbGl0eSBhbmQgb3JkZXJpbmcgb3Bl cmF0b3JzLgogICAgICAgPC9wYXJhPgpAQCAtOTk0LDM0ICsxMzQ5LDQwIEBAIGFtdHJhbnNsYXRl Y21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBl KTsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gZnVuY3Rpb24gaGFzIGEgPGxpdGVyYWw+ZGlyZWN0aW9uPC9saXRlcmFsPiBhcmd1 bWVudCwKKyAgIE5vdGUgdGhhdCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5z IGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydAorICAgb3JkZXJpbmcgb3BlcmF0b3JzLgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBm dW5jdGlvbiBoYXMgYSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAogICAg d2hpY2ggY2FuIGJlIGVpdGhlciA8bGl0ZXJhbD5Gb3J3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJh bD4gKHRoZSBub3JtYWwgY2FzZSkKICAgIG9yICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rp b248L2xpdGVyYWw+LiAgSWYgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIKICAgIDxmdW5jdGlvbj5hbXJl c2NhbjwvZnVuY3Rpb24+IHNwZWNpZmllcyA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248 L2xpdGVyYWw+LCB0aGVuIHRoZQotICAgc2V0IG9mIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaXMg dG8gYmUgc2Nhbm5lZCBiYWNrLXRvLWZyb250IHJhdGhlciB0aGFuIGluCi0gICB0aGUgbm9ybWFs IGZyb250LXRvLWJhY2sgZGlyZWN0aW9uLCBzbyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rp b24+IG11c3QgcmV0dXJuCi0gICB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUgaW5kZXgs IHJhdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUgYXMgaXQKLSAgIG5vcm1hbGx5IHdvdWxkLiAgKFRo aXMgd2lsbCBvbmx5IG9jY3VyIGZvciBhY2Nlc3MKLSAgIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVj dGZpZWxkPmFtY2Fub3JkZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLikgIEFmdGVyIHRoZQotICAg Zmlyc3QgY2FsbCwgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBh cmVkIHRvIGFkdmFuY2UgdGhlIHNjYW4gaW4KKyAgIHJldHVybmVkIGJhdGNoIG11c3QgYmUgdGhl IGJhdGNoIGNvbnRhaW5pbmcgdGhlIGxhc3QgbWF0Y2hpbmcgaXRlbShzKSwKKyAgIHJhdGhlciB0 aGFuIHRoZSBiYXRjaCBjb250YWluaW5nIHRoZSBmaXJzdCBtYXRjaGluZyBpdGVtKHMpLgorICAg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFu Y2UgdGhlIHNjYW4gaW4KICAgIGVpdGhlciBkaXJlY3Rpb24gZnJvbSB0aGUgbW9zdCByZWNlbnRs eSByZXR1cm5lZCBlbnRyeS4gIChCdXQgaWYKICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJk PC9zdHJ1Y3RmaWVsZD4gaXMgZmFsc2UsIGFsbCBzdWJzZXF1ZW50CiAgICBjYWxscyB3aWxsIGhh dmUgdGhlIHNhbWUgZGlyZWN0aW9uIGFzIHRoZSBmaXJzdCBvbmUuKQogICA8L3BhcmE+CiAKICAg PHBhcmE+Ci0gICBBY2Nlc3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgb3JkZXJlZCBzY2FucyBtdXN0 IHN1cHBvcnQgPHF1b3RlPm1hcmtpbmc8L3F1b3RlPiBhCi0gICBwb3NpdGlvbiBpbiBhIHNjYW4g YW5kIGxhdGVyIHJldHVybmluZyB0byB0aGUgbWFya2VkIHBvc2l0aW9uLiAgVGhlIHNhbWUKLSAg IHBvc2l0aW9uIG1pZ2h0IGJlIHJlc3RvcmVkIG11bHRpcGxlIHRpbWVzLiAgSG93ZXZlciwgb25s eSBvbmUgcG9zaXRpb24gbmVlZAotICAgYmUgcmVtZW1iZXJlZCBwZXIgc2NhbjsgYSBuZXcgPGZ1 bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rpb24+IGNhbGwgb3ZlcnJpZGVzIHRoZQotICAgcHJldmlv dXNseSBtYXJrZWQgcG9zaXRpb24uICBBbiBhY2Nlc3MgbWV0aG9kIHRoYXQgZG9lcyBub3Qgc3Vw cG9ydCBvcmRlcmVkCi0gICBzY2FucyBuZWVkIG5vdCBwcm92aWRlIDxmdW5jdGlvbj5hbW1hcmtw b3M8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPgotICAgZnVu Y3Rpb25zIGluIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPjsgc2V0IHRo b3NlIHBvaW50ZXJzIHRvIE5VTEwKLSAgIGluc3RlYWQuCisgICBBbiA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IGluZGV4IEFNIGNhbiBzdXBwb3J0IG1hcmsvcmVzdG9yZSBvZgorICAg c2NhbiBwb3NpdGlvbnMgYnkgc2V0dGluZyA8c3RydWN0ZmllbGQ+YW1jYW5tYXJrcG9zPC9zdHJ1 Y3RmaWVsZD4KKyAgICg8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGluZGV4IEFNcyBk byBub3Qgc3VwcG9ydCBtYXJrL3Jlc3RvcmUpLgorICAgVGhlIG1hcmsvcmVzdG9yZSBpbXBsZW1l bnRhdGlvbiBsaXZlcyBpbiB0aGUgdGFibGUgQU0gYW5kIHdvcmtzIHdpdGggYW55CisgICA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGltcGxlbWVudGF0aW9uOyBob3dldmVyLCBhbiBh Y2Nlc3MgbWV0aG9kCisgICB3aG9zZSBzY2FucyBjYW5ub3QgYmUgcmV3b3VuZCB0byBhbiBlYXJs aWVyIHBvc2l0aW9uIHNob3VsZCBsZWF2ZQorICAgPHN0cnVjdGZpZWxkPmFtY2FubWFya3Bvczwv c3RydWN0ZmllbGQ+IGZhbHNlLCBpbiB3aGljaCBjYXNlIHRoZSBwbGFubmVyCisgICBtYXRlcmlh bGl6ZXMgdGhlIHNjYW4ncyBvdXRwdXQgd2hlcmUgbWFyay9yZXN0b3JlIHdvdWxkIGJlIG5lZWRl ZC4KKyAgIFNlcGFyYXRlbHksIGluZGV4IEFNcyB0aGF0IG1haW50YWluIGludGVybmFsIHN0YXRl IHdoaWNoIHRyYWNrcyB0aGUgc2NhbidzCisgICBwcm9ncmVzcyBtdXN0IHByb3ZpZGUgYW4gPGZ1 bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBjYWxsYmFjayB0byBiZQorICAgbm90aWZpZWQg d2hlbiB0aGUgc2NhbidzIGxvZ2ljYWwgcG9zaXRpb24gY2hhbmdlcyB1bmV4cGVjdGVkbHksIHN1 Y2ggYXMKKyAgIGR1cmluZyBtYXJrL3Jlc3RvcmU7IHNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1m dW5jdGlvbnMiLz4gZm9yIGRldGFpbHMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEJvdGgg dGhlIHNjYW4gcG9zaXRpb24gYW5kIHRoZSBtYXJrIHBvc2l0aW9uIChpZiBhbnkpIG11c3QgYmUg bWFpbnRhaW5lZAorICAgVGhlIHNjYW4gcG9zaXRpb24gKGlmIGFueSkgbXVzdCBiZSBtYWludGFp bmVkIGJ5IHRoZSB0YWJsZSBBTSBhbmQgaW5kZXggQU0KICAgIGNvbnNpc3RlbnRseSBpbiB0aGUg ZmFjZSBvZiBjb25jdXJyZW50IGluc2VydGlvbnMgb3IgZGVsZXRpb25zIGluIHRoZQogICAgaW5k ZXguICBJdCBpcyBPSyBpZiBhIGZyZXNobHktaW5zZXJ0ZWQgZW50cnkgaXMgbm90IHJldHVybmVk IGJ5IGEgc2NhbiB0aGF0CiAgICB3b3VsZCBoYXZlIGZvdW5kIHRoZSBlbnRyeSBpZiBpdCBoYWQg ZXhpc3RlZCB3aGVuIHRoZSBzY2FuIHN0YXJ0ZWQsIG9yIGZvcgpAQCAtMTA0MCwxNSArMTQwMSwx NyBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWls eSwgT2lkIG9wY2ludHlwZSk7CiAgICB3aGljaCB0aGUgaW5kZXggcmV0dXJucyB0aGUgYWN0dWFs IGRhdGEgbm90IGp1c3QgdGhlIFRJRCBvZiB0aGUgaGVhcCB0dXBsZS4KICAgIFRoaXMgd2lsbCBv bmx5IGF2b2lkIEkvTyBpZiB0aGUgdmlzaWJpbGl0eSBtYXAgc2hvd3MgdGhhdCB0aGUgVElEIGlz IG9uIGFuCiAgICBhbGwtdmlzaWJsZSBwYWdlOyBlbHNlIHRoZSBoZWFwIHR1cGxlIG11c3QgYmUg dmlzaXRlZCBhbnl3YXkgdG8gY2hlY2sKLSAgIE1WQ0MgdmlzaWJpbGl0eS4gIEJ1dCB0aGF0IGlz IG5vIGNvbmNlcm4gb2YgdGhlIGFjY2VzcyBtZXRob2Qncy4KKyAgIE1WQ0MgdmlzaWJpbGl0eS4g IEJ1dCB0aGF0IGlzIG5vIGNvbmNlcm4gb2YgdGhlIGluZGV4IGFjY2VzcyBtZXRob2Qncy4KICAg PC9wYXJhPgogCiAgIDxwYXJhPgotICAgSW5zdGVhZCBvZiB1c2luZyA8ZnVuY3Rpb24+YW1nZXR0 dXBsZTwvZnVuY3Rpb24+LCBhbiBpbmRleCBzY2FuIGNhbiBiZSBkb25lIHdpdGgKLSAgIDxmdW5j dGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHRvIGZldGNoIGFsbCB0dXBsZXMgaW4gb25lIGNh bGwuICBUaGlzIGNhbiBiZQotICAgbm90aWNlYWJseSBtb3JlIGVmZmljaWVudCB0aGFuIDxmdW5j dGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYmVjYXVzZSBpdCBhbGxvd3MKLSAgIGF2b2lkaW5n IGxvY2svdW5sb2NrIGN5Y2xlcyB3aXRoaW4gdGhlIGFjY2VzcyBtZXRob2QuICBJbiBwcmluY2lw bGUKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNob3VsZCBoYXZlIHRoZSBz YW1lIGVmZmVjdHMgYXMgcmVwZWF0ZWQKKyAgIEluc3RlYWQgb2YgdXNpbmcgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBvcgorICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PiwgYW4gaW5kZXggc2NhbiBjYW4gYmUgZG9uZSB3aXRoCisgICA8ZnVuY3Rpb24+YW1nZXRiaXRt YXA8L2Z1bmN0aW9uPiB0byBmZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBjYWxsLiAgVGhpcyBjYW4K KyAgIGJlIG5vdGljZWFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiB3aXRoIGFuIDxxdW90ZT5vcmRl cmVkPC9xdW90ZT4gc2NhbgorICAgYmVjYXVzZSBpdCBhbGxvd3MgZWZmaWNpZW50IHNlcXVlbnRp YWwgYWNjZXNzIHRvIHRhYmxlIEFNIHBhZ2VzIGNvbnRhaW5pbmcKKyAgIG1hdGNoZXMuICBJbiBw cmluY2lwbGUgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2hvdWxkIGhhdmUgdGhl CisgICBzYW1lIGVmZmVjdHMgYXMgcmVwZWF0ZWQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBvcgogICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBjYWxscywgYnV0IHdl IGltcG9zZSBzZXZlcmFsIHJlc3RyaWN0aW9ucyB0bwogICAgc2ltcGxpZnkgbWF0dGVycy4gIEZp cnN0IG9mIGFsbCwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gcmV0dXJucyBhbGwK ICAgIHR1cGxlcyBhdCBvbmNlIGFuZCBtYXJraW5nIG9yIHJlc3RvcmluZyBzY2FuIHBvc2l0aW9u cyBpc24ndApAQCAtMTA1OSwxNSArMTQyMiwxNSBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBh cmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICBBbHNvLCB0 aGVyZSBpcyBubyBwcm92aXNpb24gZm9yIGluZGV4LW9ubHkgc2NhbnMgd2l0aAogICAgPGZ1bmN0 aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIHNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byByZXR1 cm4gdGhlIGNvbnRlbnRzIG9mCiAgICBpbmRleCB0dXBsZXMuCi0gICBGaW5hbGx5LCA8ZnVuY3Rp b24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPgotICAgZG9lcyBub3QgZ3VhcmFudGVlIGFueSBsb2Nr aW5nIG9mIHRoZSByZXR1cm5lZCB0dXBsZXMsIHdpdGggaW1wbGljYXRpb25zCi0gICBzcGVsbGVk IG91dCBpbiA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+LgorICAgRmluYWxseSwgPGZ1 bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gZG9lcyBub3QgaG9sZCBhbnkgaW5kZXggcGFn ZSBwaW5zCisgICBhZnRlciBpdCByZXR1cm5zIChzaW1pbGFybHkgdG8gPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBzY2FucyB3aXRoCisgICBhbiBNVkNDIHNuYXBzaG90KSwgYXMgZGVz Y3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4uCiAgIDwvcGFyYT4KIAog ICA8cGFyYT4KICAgIE5vdGUgdGhhdCBpdCBpcyBwZXJtaXR0ZWQgZm9yIGFuIGFjY2VzcyBtZXRo b2QgdG8gaW1wbGVtZW50IG9ubHkKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+ IGFuZCBub3QgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgb3IgdmljZSB2ZXJzYSwK LSAgIGlmIGl0cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJ IG9yIHRoZSBvdGhlci4KKyAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZCBu b3QgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPi88ZnVuY3Rpb24+YW1nZXR0dXBsZTwv ZnVuY3Rpb24+LAorICAgb3IgdmljZSB2ZXJzYSwgaWYgaXRzIGludGVybmFsIGltcGxlbWVudGF0 aW9uIGlzIHVuc3VpdGVkIHRvIG9uZSBBUEkgb3IgdGhlIG90aGVyLgogICA8L3BhcmE+CiAKICA8 L3NlY3QxPgpAQCAtMTEyMywxMSArMTQ4NiwxOSBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBh cmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICAgIDwvbGlz dGl0ZW0+CiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAgIEFuIGluZGV4IHNj YW4gbXVzdCBtYWludGFpbiBhIHBpbgotICAgICAgIG9uIHRoZSBpbmRleCBwYWdlIGhvbGRpbmcg dGhlIGl0ZW0gbGFzdCByZXR1cm5lZCBieQotICAgICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4sIGFuZCA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gY2Fubm90IGRl bGV0ZQotICAgICAgIGVudHJpZXMgZnJvbSBwYWdlcyB0aGF0IGFyZSBwaW5uZWQgYnkgb3RoZXIg YmFja2VuZHMuICBUaGUgbmVlZAotICAgICAgIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJl bG93LgorICAgICAgIEEgcGluIG11c3QgYmUgaGVsZCBvbiBhbnkgaW5kZXggcGFnZSB3aG9zZSBp dGVtcyBtaWdodCBzdGlsbCBuZWVkIHRvCisgICAgICAgYmUgZm9sbG93ZWQsIGFuZCA8ZnVuY3Rp b24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gbXVzdCBhY3F1aXJlIGEKKyAgICAgICBjbGVhbnVw IGxvY2sgb24gZWFjaCBpbmRleCBwYWdlLCB3aGljaCB3aWxsIGJsb2NrIGlmIGFueSBvdGhlcgor ICAgICAgIGJhY2tlbmQgaG9sZHMgYSBwaW4gb24gdGhhdCBwYWdlLgorICAgICAgIEZvciA8ZnVu Y3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHNjYW5zLCB0aGUgaW5kZXggYWNjZXNzIG1ldGhv ZAorICAgICAgIG1hbmFnZXMgdGhpcyBwaW4gZGlyZWN0bHkuCisgICAgICAgRm9yIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMsIHRoZSBpbmRleCBBTSBob2xkcyBhIGJ1ZmZl cgorICAgICAgIHBpbiBvbiBlYWNoIGJhdGNoJ3MgaW5kZXggbGVhZiBwYWdlIChpbiBpdHMgcGVy LWJhdGNoIG9wYXF1ZSBhcmVhKS4KKyAgICAgICBEZXBlbmRpbmcgb24gYSBzY2FuLWxldmVsIHBv bGljeSBkZXNjcmliZWQgYmVsb3csIHRoZSBpbnRlcmxvY2sgaXMgdGhlbgorICAgICAgIGVpdGhl ciBkcm9wcGVkIGVhZ2VybHkgYnkgY29yZSBjb2RlIGJlZm9yZSB0aGUgYmF0Y2ggaXMgcmV0dXJu ZWQgdG8gdGhlCisgICAgICAgdGFibGUgQU0sIG9yIHJldGFpbmVkIHVudGlsIHRoZSB0YWJsZSBB TSByZWxlYXNlcyBpdCAodmlhIHRoZSBpbmRleCBBTSdzCisgICAgICAgPGZ1bmN0aW9uPmFtdW5n dWFyZGJhdGNoPC9mdW5jdGlvbj4gY2FsbGJhY2spLgorICAgICAgIFRoZSBuZWVkIGZvciB0aGlz IHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93LgogICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVt PgogICAgIDwvaXRlbWl6ZWRsaXN0PgpAQCAtMTEzOCwzOSArMTUwOSw5NiBAQCBhbXRyYW5zbGF0 ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlw ZSk7CiAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LgogICAgVGhpcyBjcmVhdGVzIG5vIHNl cmlvdXMgcHJvYmxlbXMgaWYgdGhhdCBpdGVtCiAgICBudW1iZXIgaXMgc3RpbGwgdW51c2VkIHdo ZW4gdGhlIHJlYWRlciByZWFjaGVzIGl0LCBzaW5jZSBhbiBlbXB0eQotICAgaXRlbSBzbG90IHdp bGwgYmUgaWdub3JlZCBieSA8ZnVuY3Rpb24+aGVhcF9mZXRjaCgpPC9mdW5jdGlvbj4uICBCdXQg d2hhdCBpZiBhCisgICBpdGVtIHNsb3Qgd2lsbCBzaW1wbHkgYmUgdHJlYXRlZCBhcyBub3Qtdmlz aWJsZS4gIEJ1dCB3aGF0IGlmIGEKICAgIHRoaXJkIGJhY2tlbmQgaGFzIGFscmVhZHkgcmUtdXNl ZCB0aGUgaXRlbSBzbG90IGZvciBzb21ldGhpbmcgZWxzZT8KICAgIFdoZW4gdXNpbmcgYW4gTVZD Qy1jb21wbGlhbnQgc25hcHNob3QsIHRoZXJlIGlzIG5vIHByb2JsZW0gYmVjYXVzZQogICAgdGhl IG5ldyBvY2N1cGFudCBvZiB0aGUgc2xvdCBpcyBjZXJ0YWluIHRvIGJlIHRvbyBuZXcgdG8gcGFz cyB0aGUKICAgIHNuYXBzaG90IHRlc3QuICBIb3dldmVyLCB3aXRoIGEgbm9uLU1WQ0MtY29tcGxp YW50IHNuYXBzaG90IChzdWNoIGFzCiAgICA8bGl0ZXJhbD5TbmFwc2hvdEFueTwvbGl0ZXJhbD4p LCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBhY2NlcHQgYW5kIHJldHVybgotICAgYSByb3cgdGhh dCBkb2VzIG5vdCBpbiBmYWN0IG1hdGNoIHRoZSBzY2FuIGtleXMuICBXZSBjb3VsZCBkZWZlbmQK LSAgIGFnYWluc3QgdGhpcyBzY2VuYXJpbyBieSByZXF1aXJpbmcgdGhlIHNjYW4ga2V5cyB0byBi ZSByZWNoZWNrZWQKLSAgIGFnYWluc3QgdGhlIGhlYXAgcm93IGluIGFsbCBjYXNlcywgYnV0IHRo YXQgaXMgdG9vIGV4cGVuc2l2ZS4gIEluc3RlYWQsCi0gICB3ZSB1c2UgYSBwaW4gb24gYW4gaW5k ZXggcGFnZSBhcyBhIHByb3h5IHRvIGluZGljYXRlIHRoYXQgdGhlIHJlYWRlcgotICAgbWlnaHQg c3RpbGwgYmUgPHF1b3RlPmluIGZsaWdodDwvcXVvdGU+IGZyb20gdGhlIGluZGV4IGVudHJ5IHRv IHRoZSBtYXRjaGluZwotICAgaGVhcCBlbnRyeS4gIE1ha2luZyA8ZnVuY3Rpb24+YW1idWxrZGVs ZXRlPC9mdW5jdGlvbj4gYmxvY2sgb24gc3VjaCBhIHBpbiBlbnN1cmVzCi0gICB0aGF0IDxjb21t YW5kPlZBQ1VVTTwvY29tbWFuZD4gY2Fubm90IGRlbGV0ZSB0aGUgaGVhcCBlbnRyeSBiZWZvcmUg dGhlIHJlYWRlcgotICAgaXMgZG9uZSB3aXRoIGl0LiAgVGhpcyBzb2x1dGlvbiBjb3N0cyBsaXR0 bGUgaW4gcnVuIHRpbWUsIGFuZCBhZGRzIGJsb2NraW5nCi0gICBvdmVyaGVhZCBvbmx5IGluIHRo ZSByYXJlIGNhc2VzIHdoZXJlIHRoZXJlIGFjdHVhbGx5IGlzIGEgY29uZmxpY3QuCisgICBhIHdo b2xseSB1bnJlbGF0ZWQgcm93IChvbmUgdGhhdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBzYXRpc2Z5 IHRoZSBzY2FuCisgICBrZXlzKS4gIFdlIGNhbiBvcHRpb25hbGx5IHVzZSBhIHBpbiBvbiBhbiBp bmRleCBwYWdlIGFzIGEgcHJveHkgdG8gaW5kaWNhdGUKKyAgIHRoYXQgdGhlIHJlYWRlciBtaWdo dCBzdGlsbCBiZSA8cXVvdGU+aW4gZmxpZ2h0PC9xdW90ZT4gZnJvbSB0aGUgaW5kZXgKKyAgIGVu dHJ5IHRvIHRoZSBtYXRjaGluZyBoZWFwIGVudHJ5LiAgTWFraW5nIDxmdW5jdGlvbj5hbWJ1bGtk ZWxldGU8L2Z1bmN0aW9uPgorICAgYmxvY2sgb24gc3VjaCBhIHBpbiBlbnN1cmVzIHRoYXQgPGNv bW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBjYW5ub3QgZGVsZXRlCisgICB0aGUgaGVhcCBlbnRyeSBi ZWZvcmUgdGhlIHJlYWRlciBpcyBkb25lIHdpdGggaXQuICBUaGlzIHNvbHV0aW9uIGNvc3RzCisg ICBsaXR0bGUgaW4gcnVuIHRpbWUsIGFuZCBhZGRzIGJsb2NraW5nIG92ZXJoZWFkIG9ubHkgaW4g dGhlIHJhcmUgY2FzZXMgd2hlcmUKKyAgIHRoZXJlIGFjdHVhbGx5IGlzIGEgY29uZmxpY3QuICBG b3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYW4KKyAgIE1WQ0MtY29tcGxpYW50IHNuYXBz aG90LCBob2xkaW5nIHRoZSBwaW4gaXMgdW5uZWNlc3NhcnkgYmVjYXVzZSB0aGUgc2NhbgorICAg d2lsbCBhbHdheXMgdmlzaXQgdGhlIGhlYXAgcGFnZSwgd2hlcmUgdGhlIHNuYXBzaG90IGl0c2Vs ZiB3aWxsIHJlamVjdCBhbnkKKyAgIHJlY3ljbGVkIFRJRCdzIG5ldyBvY2N1cGFudC4gIChJbmRl eC1vbmx5IHNjYW5zIGFyZSBhIHNwZWNpYWwgY2FzZSwgYXMKKyAgIGRpc2N1c3NlZCBiZWxvdy4p CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoaXMgc29sdXRpb24gcmVxdWlyZXMgdGhhdCBp bmRleCBzY2FucyBiZSA8cXVvdGU+c3luY2hyb25vdXM8L3F1b3RlPjogd2UgaGF2ZQotICAgdG8g ZmV0Y2ggZWFjaCBoZWFwIHR1cGxlIGltbWVkaWF0ZWx5IGFmdGVyIHNjYW5uaW5nIHRoZSBjb3Jy ZXNwb25kaW5nIGluZGV4Ci0gICBlbnRyeS4gIFRoaXMgaXMgZXhwZW5zaXZlIGZvciBhIG51bWJl ciBvZiByZWFzb25zLiAgQW4KLSAgIDxxdW90ZT5hc3luY2hyb25vdXM8L3F1b3RlPiBzY2FuIGlu IHdoaWNoIHdlIGNvbGxlY3QgbWFueSBUSURzIGZyb20gdGhlIGluZGV4LAotICAgYW5kIG9ubHkg dmlzaXQgdGhlIGhlYXAgdHVwbGVzIHNvbWV0aW1lIGxhdGVyLCByZXF1aXJlcyBtdWNoIGxlc3Mg aW5kZXgKLSAgIGxvY2tpbmcgb3ZlcmhlYWQgYW5kIGNhbiBhbGxvdyBhIG1vcmUgZWZmaWNpZW50 IGhlYXAgYWNjZXNzIHBhdHRlcm4uCi0gICBQZXIgdGhlIGFib3ZlIGFuYWx5c2lzLCB3ZSBtdXN0 IHVzZSB0aGUgc3luY2hyb25vdXMgYXBwcm9hY2ggZm9yCi0gICBub24tTVZDQy1jb21wbGlhbnQg c25hcHNob3RzLCBidXQgYW4gYXN5bmNocm9ub3VzIHNjYW4gaXMgd29ya2FibGUKLSAgIGZvciBh IHF1ZXJ5IHVzaW5nIGFuIE1WQ0Mgc25hcHNob3QuCisgICBUaGlzIHNvbHV0aW9uIHJlcXVpcmVz IHRoYXQgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBpbmRleCBzY2FucyBiZQorICAg PHF1b3RlPnN5bmNocm9ub3VzPC9xdW90ZT46IHRoZSB0YWJsZSBBTSBtdXN0IGZldGNoIGVhY2gg aGVhcCB0dXBsZQorICAgaW1tZWRpYXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhlIGNvcnJlc3BvbmRp bmcgaW5kZXggZW50cnkuICBUaGlzIGlzCisgICBleHBlbnNpdmUgZm9yIGEgbnVtYmVyIG9mIHJl YXNvbnMuICBUaGUKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNl LCBieSBjb250cmFzdCwgd2FzIGRlc2lnbmVkIHRvCisgICBhbGxvdyBzY2FucyB0byBiZSA8cXVv dGU+YXN5bmNocm9ub3VzPC9xdW90ZT4uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEluIGFu IDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGluZGV4IHNjYW4sIHRoZSBhY2Nlc3Mg bWV0aG9kIGRvZXMgbm90Ci0gICBrZWVwIGFuIGluZGV4IHBpbiBvbiBhbnkgb2YgdGhlIHJldHVy bmVkIHR1cGxlcy4gIFRoZXJlZm9yZQotICAgaXQgaXMgb25seSBzYWZlIHRvIHVzZSBzdWNoIHNj YW5zIHdpdGggTVZDQy1jb21wbGlhbnQgc25hcHNob3RzLgorICAgV2hldGhlciBhIGJhdGNoJ3Mg VElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKHR5cGljYWxseSBhbiBpbmRleCBwYWdlIGJ1ZmZlcgor ICAgcGluKSBpcyBkcm9wcGVkIGltbWVkaWF0ZWx5IG9yIGRlZmVycmVkIGlzIGNvbnRyb2xsZWQg YnkgYSBnZW5lcmljLAorICAgc2Nhbi1sZXZlbCBwb2xpY3kgdGhhdCBpcyBkZXRlcm1pbmVkIHdo ZW4gdGhlIHNjYW4gaXMgb3BlbmVkICZtZGFzaDsgaXQgaXMKKyAgIG5vdCB1bmRlciB0aGUgY29u dHJvbCBvZiBlaXRoZXIgdGhlIGluZGV4IEFNIG9yIHRoZSB0YWJsZSBBTS4gIFRoZSBzY2FuJ3MK KyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBmbGFn IGVuY29kZXMgdGhpcyBwb2xpY3kuCisgICBJdCBpcyBzZXQgYmFzZWQgb24gdHdvIGNyaXRlcmlh IHRoYXQgYXJlIGtub3duIHRvIHRoZSBjb3JlIHNjYW4gbWFjaGluZXJ5OgorICAgd2hldGhlciB0 aGUgc2NhbiB1c2VzIGFuIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90LCBhbmQgd2hldGhlciBpdCBp cyBhbgorICAgaW5kZXgtb25seSBzY2FuLiAgU3BlY2lmaWNhbGx5LAorICAgPHN0cnVjdGZpZWxk PmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUgd2hlbiB0aGUgc2Nh biB1c2VzCisgICBhbiBNVkNDIHNuYXBzaG90IGFuZCBpcyA8ZW1waGFzaXM+bm90PC9lbXBoYXNp cz4gYW4gaW5kZXgtb25seSBzY2FuLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIDxz dHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBpcyB0cnVlLCB0 aGUKKyAgIGludGVybG9jayBpcyBkcm9wcGVkIGluc2lkZQorICAgPGZ1bmN0aW9uPmluZGV4YW1f dXRpbF91bmxvY2tfYmF0Y2g8L2Z1bmN0aW9uPiAoYmVmb3JlIHRoZSBiYXRjaCBpcyBldmVuCisg ICByZXR1cm5lZCB0byB0aGUgdGFibGUgQU0pLCBiZWNhdXNlIGEgcGxhaW4gaW5kZXggc2NhbiB3 aXRoIGFuIE1WQ0MKKyAgIHNuYXBzaG90IHdpbGwgYWx3YXlzIHZpc2l0IHRoZSBoZWFwIHBhZ2Us IHdoZXJlIHRoZSBNVkNDIHZpc2liaWxpdHkgY2hlY2sKKyAgIGlzIGF1dGhvcml0YXRpdmUgJm1k YXNoOyBldmVuIGlmIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gcmVjeWNsZXMgYSBUSUQsCisg ICB0aGUgbmV3IG9jY3VwYW50IGNhbm5vdCBwYXNzIHRoZSBzbmFwc2hvdCB0ZXN0LgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBXaGVuIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3Vh cmQ8L3N0cnVjdGZpZWxkPiBpcyBmYWxzZSwgdGhlCisgICBpbnRlcmxvY2sgaXMgcmV0YWluZWQg dW50aWwgdGhlIHRhYmxlIEFNIGV4cGxpY2l0bHkgcmVsZWFzZXMgaXQgYnkgY2FsbGluZworICAg PGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoPC9mdW5jdGlvbj4gKHdoaWNoIGlu dm9rZXMgdGhlIGluZGV4CisgICBBTSdzIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rp b24+IGNhbGxiYWNrKSwgYmVjYXVzZSB0aGUgc2NhbiBjYW5ub3QKKyAgIHJlbHkgb24gdGhhdCBo ZWFwIHBhZ2UgTVZDQyBiYWNrc3RvcC4gIEZvciBub24tTVZDQyBzY2FucywgdGhlcmUgaXMgbm8g TVZDQworICAgc25hcHNob3QgdG8gcmVqZWN0IGEgcmVjeWNsZWQgVElEJ3MgbmV3IG9jY3VwYW50 IGF0IGFsbC4gIEZvciBpbmRleC1vbmx5CisgICBzY2FucywgZXZlbiB3aXRoIGFuIE1WQ0Mgc25h cHNob3QsIHRoZSBzY2FuIHR5cGljYWxseSBhdm9pZHMgdmlzaXRpbmcgdGhlCisgICBoZWFwIHBh Z2UgYWx0b2dldGhlciAodXNpbmcgdGhlIHZpc2liaWxpdHkgbWFwIGluc3RlYWQpLCBzbyB0aGUg TVZDQyBjaGVjaworICAgdGhhdCB3b3VsZCBjYXRjaCBhIHJlY3ljbGVkIFRJRCB1c3VhbGx5IG5l dmVyIHJ1bnMuICBJbiBib3RoIGNhc2VzIHRoZQorICAgaW50ZXJsb2NrIG9uIHRoZSBpbmRleCBw YWdlIGlzIHdoYXQgcHJldmVudHMgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBmcm9tCisgICBy ZWN5Y2xpbmcgVElEcyB3aGlsZSB0aGUgc2NhbiBpcyBzdGlsbCBpbiBmbGlnaHQuCisgIDwvcGFy YT4KKworICA8cGFyYT4KKyAgIFdoZW4gPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFy ZDwvc3RydWN0ZmllbGQ+IGlzIGZhbHNlLCB0aGUgdGFibGUKKyAgIEFNIGRlY2lkZXMgPGVtcGhh c2lzPndoZW48L2VtcGhhc2lzPiB0byBjYWxsCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3Vu Z3VhcmRfYmF0Y2g8L2Z1bmN0aW9uPjsgdGhlIGluZGV4IEFNJ3MKKyAgIDxmdW5jdGlvbj5hbXVu Z3VhcmRiYXRjaDwvZnVuY3Rpb24+IGNhbGxiYWNrIGRlY2lkZXMKKyAgIDxlbXBoYXNpcz53aGF0 PC9lbXBoYXNpcz4gdG8gcmVsZWFzZS4gIFdoZW4KKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVk aWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBpcyB0cnVlLCB0aGUgaW5kZXggQU0KKyAgIGRyb3Bz IHRoZSBpbnRlcmxvY2sgaXRzZWxmIChpbnNpZGUKKyAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxf dW5sb2NrX2JhdGNoPC9mdW5jdGlvbj4pLCBhbmQKKyAgIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRj aDwvZnVuY3Rpb24+IGlzIG5ldmVyIGNhbGxlZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg U2ltaWxhcmx5LCBhbiA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBpbmRleCBzY2Fu IGlzIGluaGVyZW50bHkKKyAgIGFzeW5jaHJvbm91czogYWxsIG1hdGNoaW5nIFRJRHMgYXJlIGNv bGxlY3RlZCBpbnRvIGEgYml0bWFwIGJlZm9yZSBhbnkgaGVhcAorICAgYWNjZXNzIGJlZ2lucy4g IFN1Y2ggc2NhbnMgdGhlcmVmb3JlIHJlcXVpcmUgYW4gTVZDQy1jb21wbGlhbnQgc25hcHNob3Qs CisgICBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhlIGFjY2VzcyBtZXRob2QgdG8gaG9sZCBp bmRleCBwYWdlIHBpbnMuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEluZGV4IGFjY2VzcyBt ZXRob2RzIHRoYXQgdXNlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gbXVzdCBtYW5h Z2UKKyAgIHBpbiBsaWZldGltZSB0aGVtc2VsdmVzLCBzaW5jZSB0aGVyZSBpcyBubyB0YWJsZSBB TSBpbnRlcm1lZGlhcnkgKHVubGlrZQorICAgd2l0aCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+KS4gIFRoZSBpbmRleCBBTSBtdXN0IGhvbGQgYSBwaW4gb24gdGhlCisgICBjdXJyZW50 IGluZGV4IHBhZ2UgdW50aWwgdGhlIHNjYW4gbW92ZXMgdG8gYSBkaWZmZXJlbnQgcGFnZSBvciBl bmRzLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVm L2NyZWF0ZV90YWJsZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbApp bmRleCBlMzQyNTg1YzcuLjJhMzU1ODY4ZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9j cmVhdGVfdGFibGUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21s CkBAIC0xMTczLDEyICsxMTczLDEzIEBAIFdJVEggKCBNT0RVTFVTIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5udW1lcmljX2xpdGVyYWw8L3JlcGxhY2VhYmxlPiwgUkVNCiAgICAgIDwv cGFyYT4KIAogICAgICA8cGFyYT4KLSAgICAgIFRoZSBhY2Nlc3MgbWV0aG9kIG11c3Qgc3VwcG9y dCA8bGl0ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPiAoc2VlIDx4cmVmCi0gICAgICBsaW5rZW5k PSJpbmRleGFtIi8+KTsgYXQgcHJlc2VudCB0aGlzIG1lYW5zIDxhY3JvbnltPkdJTjwvYWNyb255 bT4KLSAgICAgIGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91Z2ggaXQncyBhbGxvd2VkLCB0aGVyZSBp cyBsaXR0bGUgcG9pbnQgaW4gdXNpbmcKLSAgICAgIEItdHJlZSBvciBoYXNoIGluZGV4ZXMgd2l0 aCBhbiBleGNsdXNpb24gY29uc3RyYWludCwgYmVjYXVzZSB0aGlzCi0gICAgICBkb2VzIG5vdGhp bmcgdGhhdCBhbiBvcmRpbmFyeSB1bmlxdWUgY29uc3RyYWludCBkb2Vzbid0IGRvIGJldHRlci4K LSAgICAgIFNvIGluIHByYWN0aWNlIHRoZSBhY2Nlc3MgbWV0aG9kIHdpbGwgYWx3YXlzIGJlIDxh Y3JvbnltPkdpU1Q8L2Fjcm9ueW0+IG9yCisgICAgICBUaGUgYWNjZXNzIG1ldGhvZCBtdXN0IHN1 cHBvcnQgZWl0aGVyIDxsaXRlcmFsPmFtZ2V0YmF0Y2g8L2xpdGVyYWw+CisgICAgICBvciA8bGl0 ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPiAoc2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4YW0iLz4p OyBhdAorICAgICAgcHJlc2VudCB0aGlzIG1lYW5zIDxhY3JvbnltPkdJTjwvYWNyb255bT4gY2Fu bm90IGJlIHVzZWQuICBBbHRob3VnaAorICAgICAgaXQncyBhbGxvd2VkLCB0aGVyZSBpcyBsaXR0 bGUgcG9pbnQgaW4gdXNpbmcgQi10cmVlIG9yIGhhc2ggaW5kZXhlcworICAgICAgd2l0aCBhbiBl eGNsdXNpb24gY29uc3RyYWludCwgYmVjYXVzZSB0aGlzIGRvZXMgbm90aGluZyB0aGF0IGFuCisg ICAgICBvcmRpbmFyeSB1bmlxdWUgY29uc3RyYWludCBkb2Vzbid0IGRvIGJldHRlci4gIFNvIGlu IHByYWN0aWNlIHRoZQorICAgICAgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5cyBiZSA8YWNyb255 bT5HaVNUPC9hY3JvbnltPiBvcgogICAgICAgPGFjcm9ueW0+U1AtR2lTVDwvYWNyb255bT4uCiAg ICAgIDwvcGFyYT4KIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9h bS9kdW1teV9pbmRleF9hbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1t eV9pbmRleF9hbS5jCmluZGV4IDMxZjhkMmI4MS4uM2Y1YmU2MDgyIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCkBAIC0zMDMsNiArMzAz LDcgQEAgZGloYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWNvbnNpc3RlbnRlcXVhbGl0 eSA9IGZhbHNlLAogCQkuYW1jb25zaXN0ZW50b3JkZXJpbmcgPSBmYWxzZSwKIAkJLmFtY2FuYmFj a3dhcmQgPSBmYWxzZSwKKwkJLmFtY2FubWFya3BvcyA9IGZhbHNlLAogCQkuYW1jYW51bmlxdWUg PSBmYWxzZSwKIAkJLmFtY2FubXVsdGljb2wgPSBmYWxzZSwKIAkJLmFtb3B0aW9uYWxrZXkgPSBm YWxzZSwKQEAgLTMzNCwxMCArMzM1LDEyIEBAIGRpaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQog CQkuYW1iZWdpbnNjYW4gPSBkaWJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZGlyZXNjYW4sCiAJ CS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJk YmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1h cCA9IE5VTEwsCiAJCS5hbWVuZHNjYW4gPSBkaWVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxM LAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0 aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwK IAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCBmNWY3MTQ5MzQuLjZmNTgwYjJjMSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTIw OSw2ICsyMDksNyBAQCBCT09MCiBCT09MRUFOCiBCT1gKIEJUQXJyYXlLZXlJbmZvCitCVEJhdGNo RGF0YQogQlRCdWlsZFN0YXRlCiBCVENhbGxiYWNrU3RhdGUKIEJUQ3ljbGVJZApAQCAtMjM2LDgg KzIzNyw2IEBAIEJUU2Nhbkluc2VydERhdGEKIEJUU2NhbktleVByZXByb2MKIEJUU2Nhbk9wYXF1 ZQogQlRTY2FuT3BhcXVlRGF0YQotQlRTY2FuUG9zRGF0YQotQlRTY2FuUG9zSXRlbQogQlRTaGFy ZWQKIEJUU29ydEFycmF5Q29udGV4dAogQlRTcG9vbApAQCAtMjY2LDYgKzI2NSw5IEBAIEJhc2VC YWNrdXBDbWQKIEJhc2VCYWNrdXBUYXJnZXRIYW5kbGUKIEJhc2VCYWNrdXBUYXJnZXRUeXBlCiBC YXRjaE1WQ0NTdGF0ZQorQmF0Y2hNYXRjaGluZ0l0ZW0KK0JhdGNoUmluZ0J1ZmZlcgorQmF0Y2hS aW5nSXRlbVBvcwogQmVnaW5EaXJlY3RNb2RpZnlfZnVuY3Rpb24KIEJlZ2luRm9yZWlnbkluc2Vy dF9mdW5jdGlvbgogQmVnaW5Gb3JlaWduTW9kaWZ5X2Z1bmN0aW9uCkBAIC0xMjYxLDYgKzEyNjMs NyBAQCBIYmFMaW5lCiBIZWFkbGluZUpzb25TdGF0ZQogSGVhZGxpbmVQYXJzZWRUZXh0CiBIZWFk bGluZVdvcmRFbnRyeQorSGVhcEJhdGNoRGF0YQogSGVhcENoZWNrQ29udGV4dAogSGVhcENoZWNr UmVhZFN0cmVhbURhdGEKIEhlYXBQYWdlRnJlZXplCkBAIC0xMzQyLDYgKzEzNDUsOCBAQCBJbmRl eE9yZGVyQnlEaXN0YW5jZQogSW5kZXhQYXRoCiBJbmRleFJ1bnRpbWVLZXlJbmZvCiBJbmRleFNj YW4KK0luZGV4U2NhbkJhdGNoCitJbmRleFNjYW5CYXRjaERhdGEKIEluZGV4U2NhbkRlc2MKIElu ZGV4U2NhbkRlc2NEYXRhCiBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24KQEAgLTM1ODYsMjAgKzM1 OTEsMjIgQEAgYW1jYW5yZXR1cm5fZnVuY3Rpb24KIGFtY29zdGVzdGltYXRlX2Z1bmN0aW9uCiBh bWVuZHNjYW5fZnVuY3Rpb24KIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24KK2FtZ2V0 YmF0Y2hfZnVuY3Rpb24KIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uCiBhbWdldHRyZWVoZWlnaHRfZnVu Y3Rpb24KIGFtZ2V0dHVwbGVfZnVuY3Rpb24KIGFtaW5pdHBhcmFsbGVsc2Nhbl9mdW5jdGlvbgog YW1pbnNlcnRfZnVuY3Rpb24KIGFtaW5zZXJ0Y2xlYW51cF9mdW5jdGlvbgotYW1tYXJrcG9zX2Z1 bmN0aW9uCithbWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9uCiBhbW9wdGlvbnNfZnVuY3Rpb24KIGFt cGFyYWxsZWxyZXNjYW5fZnVuY3Rpb24KK2FtcG9zcmVzZXRfZnVuY3Rpb24KIGFtcHJvcGVydHlf ZnVuY3Rpb24KIGFtcmVzY2FuX2Z1bmN0aW9uCi1hbXJlc3RycG9zX2Z1bmN0aW9uCiBhbXRyYW5z bGF0ZV9jbXB0eXBlX2Z1bmN0aW9uCiBhbXRyYW5zbGF0ZV9zdHJhdGVneV9mdW5jdGlvbgorYW11 bmd1YXJkYmF0Y2hfZnVuY3Rpb24KIGFtdmFjdXVtY2xlYW51cF9mdW5jdGlvbgogYW12YWxpZGF0 ZV9mdW5jdGlvbgogYXJyYXlfaXRlcgotLSAKMi41My4wCgo= --0000000000000468e006539f51e8--