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 1vImv5-00ERcO-2Z for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Nov 2025 11:52: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 1vImv2-005quv-2j for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Nov 2025 11:52:16 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vImv2-005qum-0H for pgsql-hackers@lists.postgresql.org; Tue, 11 Nov 2025 11:52:16 +0000 Received: from relay1-d.mail.gandi.net ([2001:4b98:dc4:8::221]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vImuv-0079Rr-2n for pgsql-hackers@lists.postgresql.org; Tue, 11 Nov 2025 11:52:15 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 5E5C143A40; Tue, 11 Nov 2025 11:52:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1762861923; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=BbfZPd2jqPRNBFgpUr6HlnRNFLF7ij+FdNge5JEAl0A=; b=IpZqgC656uoPpsyDpstKf1NJf/6USWtPcs7VpWlvYpFqN1zBf38tdPWHEL8hEUr5EozMze y7zAvfiDM1IbbZV4AQU34gOqRa+UazUTt7ChYyJA5hLUG89+55uGWhVqAFS6c67FcmWHuC K43f9qIFPtt9OSyVK95PDGLzYL4xxOLbKeoBDztzcm5nEslDEKdltrot84HFE4eNnRupzL pbYEE1rhdHhyLWkkLviSHk4bQEy+hryFiNvYwqrRhTGZW5LEKz4tmdK8Mn3YJ2g84IENz+ hieXmMoADTiTmiWbUiGT+wICgr54wAjb2o2NfBuxhYW6/LXhCqjrwkR+AvaFew== Content-Type: multipart/mixed; boundary="------------Mky2abyS3YoHwGs5syrGiO88" Message-ID: <7b824e42-02de-4f4a-a81d-5acc89d417ea@vondra.me> Date: Tue, 11 Nov 2025 12:52:01 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Adding basic NUMA awareness To: Jakub Wartak Cc: Alexey Makhmutov , PostgreSQL Hackers , Andres Freund References: <1b5bf372-6d40-4022-bf4f-367ffb61ee51@vondra.me> <51e51832-7f47-412a-a1a6-b972101cc8cb@vondra.me> <874435bd-5e25-4a7c-a5d5-8ef0c262d788@vondra.me> <6636d842-e8a5-44bc-a206-6df415380a7b@vondra.me> <659c44a5-f616-492c-ab81-60273d2fe7f6@vondra.me> <9c31717c-fe38-4824-9bb7-e4f0ac4f1991@vondra.me> <92e23c85-f646-4bab-b5e0-df30d8ddf4bd@postgrespro.ru> <72506e5a-92ac-47fb-9d3a-3b7b420af985@vondra.me> Content-Language: en-US From: Tomas Vondra In-Reply-To: X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvtdduudduucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpegtkfffgggfuffvvehfhfgjsehmtderredtvdejnecuhfhrohhmpefvohhmrghsucggohhnughrrgcuoehtohhmrghssehvohhnughrrgdrmhgvqeenucggtffrrghtthgvrhhnpeefgffggeeftddttefftdfgkeduieejveffieejhfetteethfdvffdvkeegueffleenucffohhmrghinhepphhoshhtghhrvghsqhhlrdhorhhgnecukfhppeekiedrgeelrddvfedtrddvtdeinecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepkeeirdegledrvdeftddrvddtiedphhgvlhhopegluddtrddufeejrddtrddvngdpmhgrihhlfhhrohhmpehtohhmrghssehvohhnughrrgdrmhgvpdhnsggprhgtphhtthhopeegpdhrtghpthhtohepjhgrkhhusgdrfigrrhhtrghksegvnhhtvghrphhrihhsvggusgdrtghomhdprhgtphhtthhopegrrdhmrghkhhhmuhhtohhvsehpohhsthhgrhgvshhprhhordhruhdprhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehlihhsthhsrdhpohhsthhgrhgvshhqlhdrohhrghdprhgtphhtthhopegrnhgurhgvshesrghnrghrrgiivghlrdguvg X-GND-Sasl: tomas@vondra.me List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------Mky2abyS3YoHwGs5syrGiO88 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi, here's a rebased patch series, fixing most of the smaller issues from v20251101, and making cfbot happy (hopefully). On 11/6/25 15:02, Jakub Wartak wrote: > On Tue, Nov 4, 2025 at 10:21 PM Tomas Vondra wrote: > > Hi Tomas, > >>> 0007a: pg_buffercache_pgproc returns pgproc_ptr and fastpath_ptr in >>> bigint and not hex? I've wanted to adjust that to TEXTOID, but instead >>> I've thought it is going to be simpler to use to_hex() -- see 0009 >>> attached. >>> >> >> I don't know. I added simply because it might be useful for development, >> but we probably don't want to expose these pointers at all. >> >>> 0007b: pg_buffercache_pgproc -- nitpick, but maybe it would be better >>> called pg_shm_pgproc? >>> >> >> Right. It does not belong to pg_buffercache at all, I just added it >> there because I've been messing with that code already. > > Please keep them in for at least for some time (perhaps standalone > patch marked as not intended to be commited would work?). I find the > view extermely useful as it will allow us pinpointing local-vs-remote > NUMA fetches (we need to know the addres). > Are you referring to the _pgproc view specifically, or also to the view with buffer partitions? I don't intend to remove the view for shared buffers, that's indeed useful. >>> 0007c with check_numa='buffers,procs' throws 'mbind Invalid argument' >>> during start: >>> >>> 2025-11-04 10:02:27.055 CET [58464] DEBUG: NUMA: >>> pgproc_init_partition procs 0x7f8d30400000 endptr 0x7f8d30800000 >>> num_procs 2523 node 0 >>> 2025-11-04 10:02:27.057 CET [58464] DEBUG: NUMA: >>> pgproc_init_partition procs 0x7f8d30800000 endptr 0x7f8d30c00000 >>> num_procs 2523 node 1 >>> 2025-11-04 10:02:27.059 CET [58464] DEBUG: NUMA: >>> pgproc_init_partition procs 0x7f8d30c00000 endptr 0x7f8d31000000 >>> num_procs 2523 node 2 >>> 2025-11-04 10:02:27.061 CET [58464] DEBUG: NUMA: >>> pgproc_init_partition procs 0x7f8d31000000 endptr 0x7f8d31400000 >>> num_procs 2523 node 3 >>> 2025-11-04 10:02:27.062 CET [58464] DEBUG: NUMA: >>> pgproc_init_partition procs 0x7f8d31400000 endptr 0x7f8d31407cb0 >>> num_procs 38 node -1 >>> mbind: Invalid argument >>> mbind: Invalid argument >>> mbind: Invalid argument >>> mbind: Invalid argument >>> >> >> I'll take a look, but I don't recall seeing such errors. >> > > Alexy also reported this earlier, here > https://www.postgresql.org/message-id/92e23c85-f646-4bab-b5e0-df30d8ddf4bd%40postgrespro.ru > (just use HP, set some high max_connections). I've double checked this > too , numa_tonode_memory() len needs to HP size. > OK, I'll investigate this. >>> 0007d: so we probably need numa_warn()/numa_error() wrappers (this was >>> initially part of NUMA observability patches but got removed during >>> the course of action), I'm attaching 0008. With that you'll get >>> something a little more up to our standards: >>> 2025-11-04 10:27:07.140 CET [59696] DEBUG: >>> fastpath_parititon_init node = 3, ptr = 0x7f4f4d400000, endptr = >>> 0x7f4f4d4b1660 >>> 2025-11-04 10:27:07.140 CET [59696] WARNING: libnuma: ERROR: mbind >>> >> >> Not sure. > > Any particular objections? We need to somehow emit them into the logs. > No idea, I think it'd be better to make sure this failure can't happen, but maybe it's not possible. I don't understand the mbind failure well enough. >>> 0007f: The "mbind: Invalid argument"" issue itself with the below addition: > [..] >>> >>> but mbind() was called for just 0x7f39eeab1660−0x7f39eea00000 = >>> 0xB1660 = 726624 bytes, but if adjust blindly endptr in that >>> fastpath_partition_init() to be "char *endptr = ptr + 2*1024*1024;" >>> (HP) it doesn't complain anymore and I get success: > [..] >> >> Hmm, so it seems like another hugepage-related issue. The mbind manpage >> says this about "len": >> >> EINVAL An invalid value was specified for flags or mode; or addr + len >> was less than addr; or addr is not a multiple of the system page size. >> >> I don't think that requires (addr+len) to be a multiple of page size, >> but maybe that is required. > > I do think that 'system page size' means above HP page size, but this > time it's just for fastpath_partition_init(), the earlier one seems to > aligned fine (?? -- i havent really checked but there's no error) > Hmmm, ok. Will check. But maybe let's not focus too much on the PGPROC partitioning, I don't think that's likely to go into 19. >>> 0006d: I've got one SIGBUS during a call to select >>> pg_buffercache_numa_pages(); and it looks like that memory accessed is >>> simply not mapped? (bug) >>> >>> Program received signal SIGBUS, Bus error. >>> pg_buffercache_numa_pages (fcinfo=0x561a97e8e680) at >>> ../contrib/pg_buffercache/pg_buffercache_pages.c:386 >>> 386 pg_numa_touch_mem_if_required(ptr); >>> (gdb) print ptr >>> $1 = 0x7f4ed0200000 >>> (gdb) where >>> #0 pg_buffercache_numa_pages (fcinfo=0x561a97e8e680) at >>> ../contrib/pg_buffercache/pg_buffercache_pages.c:386 >>> #1 0x0000561a672a0efe in ExecMakeFunctionResultSet >>> (fcache=0x561a97e8e5d0, econtext=econtext@entry=0x561a97e8dab8, >>> argContext=0x561a97ec62a0, isNull=0x561a97e8e578, >>> isDone=isDone@entry=0x561a97e8e5c0) at >>> ../src/backend/executor/execSRF.c:624 >>> [..] >>> >>> Postmaster had still attached shm (visible via smaps), and if you >>> compare closely 0x7f4ed0200000 against sorted smaps: >>> >>> 7f4921400000-7f4b21400000 rw-s 252600000 00:11 151111 >>> /anon_hugepage (deleted) >>> 7f4b21400000-7f4d21400000 rw-s 452600000 00:11 151111 >>> /anon_hugepage (deleted) >>> 7f4d21400000-7f4f21400000 rw-s 652600000 00:11 151111 >>> /anon_hugepage (deleted) >>> 7f4f21400000-7f4f4bc00000 rw-s 852600000 00:11 151111 >>> /anon_hugepage (deleted) >>> 7f4f4bc00000-7f4f4c000000 rw-s 87ce00000 00:11 151111 >>> /anon_hugepage (deleted) >>> >>> it's NOT there at all (there's no mmap region starting with >>> 0x"7f4e" ). It looks like because pg_buffercache_numa_pages() is not >>> aware of this new mmaped() regions and instead does simple loop over >>> all NBuffers with "for (char *ptr = startptr; ptr < endptr; ptr += >>> os_page_size)"? >>> >> >> I'm confused. How could that mapping be missing? Was this with huge >> pages / how many did you reserve on the nodes? > > > OK I made and error and paritally got it correct (it crashes reliably) > and partially mislead You, appologies, let me explain. There were two > questions for me: > a) why we make single mmap() and after numa_tonode_memory() we get > plenty of mappings > b) why we get SIGBUS (I've thought they are not continus, but they are > after triple-checking) > > ad a) My testing shows that on HP,as stated initially ("all of this > was on 4s/4 NUMA nodes with HP on"). That's what the codes does, you > get single mmaps() (resulting in single entry in smaps), but afte > noda_tonode_memory() there's many of them. Even on laptop: > > System has 1 NUMA nodes (0 to 0). > Attempting to allocate 8.000000 MB of HugeTLB memory... > Successfully allocated HugeTLB memory at 0x755828800000, smaps before: > 755828800000-755829000000 rw-s 00000000 00:11 259808 > /anon_hugepage (deleted) > Pinning first part (from 0x755828800000) to NUMA node 0... > smaps after: > 755828800000-755828c00000 rw-s 00000000 00:11 259808 > /anon_hugepage (deleted) > 755828c00000-755829000000 rw-s 00400000 00:11 259808 > /anon_hugepage (deleted) > Pinning second part (from 0x755828c00000) to NUMA node 0... > smaps after: > 755828800000-755828c00000 rw-s 00000000 00:11 259808 > /anon_hugepage (deleted) > 755828c00000-755829000000 rw-s 00400000 00:11 259808 > /anon_hugepage (deleted) > > It gets even more funny, below I have 8MB HP=on, but just issue 2x > numa_tonode_memory(for len 2MB on 4MB ptr to node0) (two times for > ptr, second time in half of that): > > System has 1 NUMA nodes (0 to 0). > Attempting to allocate 8.000000 MB of HugeTLB memory... > Successfully allocated HugeTLB memory at 0x7302dda00000, smaps before: > 7302dda00000-7302de200000 rw-s 00000000 00:11 284859 > /anon_hugepage (deleted) > Pinning first part (from 0x7302dda00000) to NUMA node 0... > smaps after: > 7302dda00000-7302ddc00000 rw-s 00000000 00:11 284859 > /anon_hugepage (deleted) > 7302ddc00000-7302de200000 rw-s 00200000 00:11 284859 > /anon_hugepage (deleted) > Pinning second part (from 0x7302dde00000) to NUMA node 0... > smaps after: > 7302dda00000-7302ddc00000 rw-s 00000000 00:11 284859 > /anon_hugepage (deleted) > 7302ddc00000-7302dde00000 rw-s 00200000 00:11 284859 > /anon_hugepage (deleted) > 7302dde00000-7302de000000 rw-s 00400000 00:11 284859 > /anon_hugepage (deleted) > 7302de000000-7302de200000 rw-s 00600000 00:11 284859 > /anon_hugepage (deleted) > > Why 4 instead of 1? Because some mappings are now "default" becauswe > their policy was not altered: > > $ grep huge /proc/$(pidof testnumammapsplit)/numa_maps > 7302dda00000 bind:0 file=/anon_hugepage\040(deleted) huge > 7302ddc00000 default file=/anon_hugepage\040(deleted) huge > 7302dde00000 bind:0 file=/anon_hugepage\040(deleted) huge > 7302de000000 default file=/anon_hugepage\040(deleted) huge > > Back to originnal error, they are consecutive regions and earlier problem is > > error: 0x7f4ed0200000 > start: 0x7f4921400000 > end: 0x7f4f4c000000 > > so it fits into that range (that was my mistate earlier, using just > grep not checking are they really within that), but... > >> Maybe there were not enough huge pages left on one of the nodes? > > ad b) right, something like that. I've investigated that SIGBUS there > (it's going to be long): > > with shared_buffers=32GB, huge_pages 17715 (+1 from what postgres -C > shared_memory_size_in_huge_pages returns), right after startup, but no > touch: > > Program received signal SIGBUS, Bus error. > pg_buffercache_numa_pages (fcinfo=0x5572038790b8) at > ../contrib/pg_buffercache/pg_buffercache_pages.c:386 > 386 pg_numa_touch_mem_if_required(ptr); > (gdb) where > #0 pg_buffercache_numa_pages (fcinfo=0x5572038790b8) at > ../contrib/pg_buffercache/pg_buffercache_pages.c:386 > #1 0x00005571f54ddb7d in ExecMakeTableFunctionResult > (setexpr=0x557203870d40, econtext=0x557203870ba8, > argContext=, expectedDesc=0x557203870f80, > randomAccess=false) at ../src/backend/executor/execSRF.c:234 > [..] > (gdb) print ptr > $1 = 0x7f6cf8400000 > (gdb) > > > then it shows?! no available hugepage on one of the nodes (while gdb > is hanging and preving autorestart): > > root@swiatowid:/sys/devices/system/node# grep -r -i HugePages_Free node*/meminfo > node0/meminfo:Node 0 HugePages_Free: 299 > node1/meminfo:Node 1 HugePages_Free: 299 > node2/meminfo:Node 2 HugePages_Free: 299 > node3/meminfo:Node 3 HugePages_Free: 0 > > but they are equal in terms of size: > node0/meminfo:Node 0 HugePages_Total: 4429 > node1/meminfo:Node 1 HugePages_Total: 4429 > node2/meminfo:Node 2 HugePages_Total: 4429 > node3/meminfo:Node 3 HugePages_Total: 4428 > > smaps shows that this address (7f6cf8400000) is mapped in this mapping: > 7f6b49c00000-7f6d49c00000 rw-s 652600000 00:11 86064 > /anon_hugepage (deleted) > > numa_maps for this region shows this is this mapping on node3 (notice > N3 + bind:3 matches lack of memory on Node 3 HugePAges_Free): > 7f6b49c00000 bind:3 file=/anon_hugepage\040(deleted) huge dirty=3444 > N3=3444 kernelpagesize_kB=2048 > > the surrounding area of this looks like that: > > 7f6549c00000 bind:0 file=/anon_hugepage\040(deleted) huge dirty=4096 > N0=4096 kernelpagesize_kB=2048 > 7f6749c00000 bind:1 file=/anon_hugepage\040(deleted) huge dirty=4096 > N1=4096 kernelpagesize_kB=2048 > 7f6949c00000 bind:2 file=/anon_hugepage\040(deleted) huge dirty=4096 > N2=4096 kernelpagesize_kB=2048 > 7f6b49c00000 bind:3 file=/anon_hugepage\040(deleted) huge dirty=3444 > N3=3444 kernelpagesize_kB=2048 <-- this is the one > 7f6d49c00000 default file=/anon_hugepage\040(deleted) huge dirty=107 > mapmax=6 N3=107 kernelpagesize_kB=2048 > > Notice it's just N3=3444, while the others are much larger. So > something was using that hugepages memory on N3: > > # grep kernelpagesize_kB=2048 /proc/1679/numa_maps | grep -Po > N[0-4]=[0-9]+ | sort > N0=2 > N0=4096 > N1=2 > N1=4096 > N2=2 > N2=4096 > N3=1 > N3=1 > N3=1 > N3=1 > N3=107 > N3=13 > N3=3 > N3=3444 > > So per above it's not there (at least not as 2MB HP). But the number > of mappings is wild there! (node where it is failing has plenty of > memory, no hugepage memory left, but it has like 40k+ of small > mappings!) > > # grep -Po 'N[0-3]=' /proc/1679/numa_maps | sort | uniq -c > 17 N0= > 10 N1= > 3 N2= > 40434 N3= > > most of them are `anon_inode:[io_uring]` (and I had > max_connections=10k). You may ask why in spite of Andres optimization > for reducing number segments for uring, it's not working for me ? Well > I've just noticed way too silent failure to active this (altough I'm > on 6.14.x): > 2025-11-06 13:34:49.128 CET [1658] DEBUG: can't use combined > memory mapping for io_uring, kernel or liburing too old > and I dont have io_uring_queue_init_mem()/HAVE_LIBURING_QUEUE_INIT_MEM > apparently on liburing-2.3 (Debian's default). See [1] for more info > (fix is not commited yet sadly). > > Next try, now with io_method = worker and right before start: > > root@swiatowid:/sys/devices/system/node# grep -r -i HugePages_Total > node*/meminfo > node0/meminfo:Node 0 HugePages_Total: 4429 > node1/meminfo:Node 1 HugePages_Total: 4429 > node2/meminfo:Node 2 HugePages_Total: 4429 > node3/meminfo:Node 3 HugePages_Total: 4428 > and HugePages_Free were 100% (if postgresql was down). After start > (but without doing anything else): > root@swiatowid:/sys/devices/system/node# grep -r -i HugePages_Free node*/meminfo > node0/meminfo:Node 0 HugePages_Free: 4393 > node1/meminfo:Node 1 HugePages_Free: 4395 > node2/meminfo:Node 2 HugePages_Free: 4395 > node3/meminfo:Node 3 HugePages_Free: 3446 > > So sadly the picture is the same (something stole my HP on N3 and it's > PostgreSQL on it's own). After some time of investigating that ("who > stole my hugepage across whole OS"), I've just added MAP_POPULATE to > the mix of PG_MMAP_FLAGS and got this after start: > > root@swiatowid:/sys/devices/system/node# grep -r -i HugePages_Free node*/meminfo > node0/meminfo:Node 0 HugePages_Free: 0 > node1/meminfo:Node 1 HugePages_Free: 0 > node2/meminfo:Node 2 HugePages_Free: 0 > node3/meminfo:Node 3 HugePages_Free: 1 > > and then the SELECT to pg_buffercache_numa works fine(!). > > Another ways that I have found to eliminate that SIGBUS > a. Would be to throw much more HugePages (so that node does not run to > HugePages_Free), but that's not real option. > b. Then I've reminded myself that I could be running custom kernel > with experimental CONFIG_READ_ONLY_THP_FOR_FS (to reduce iTLB misses > tranparently with specially linked PG; will double check exact stuff > later), so I've thrown never into > /sys/kernel/mm/transparent_hugepage/enabled and defrag too (yes , > disabled THP) and with that -- drumroll -- that SELECT works. The very > same PG picture after startup (where earlier it would crash), now > after SELECT it looks like that: > > root@swiatowid:/sys/devices/system/node# grep -r -i HugePages_Free node*/meminfo > node0/meminfo:Node 0 HugePages_Free: 83 > node1/meminfo:Node 1 HugePages_Free: 0 > node2/meminfo:Node 2 HugePages_Free: 81 > node3/meminfo:Node 3 HugePages_Free: 82 > > Hope that helps a little. To me it sounds like THP used that memory > somehow and we've also wanted to use. With numa_interleave_ptr() that > wouldn't be a problem because probably it would something else > available, but not here as we indicated exact node. > >>> 0006e: >>> I'm seeking confirmation, but is this the issue we have discussed >>> on PgconfEU related to lack of detection of Mems_allowed, right? e.g. >>> $ numactl --membind="0,1" --cpunodebind="0,1" >>> /usr/pgsql19/bin/pg_ctl -D /path start >>> still shows 4 NUMA nodes used. Current patches use >>> numa_num_configured_nodes(), but it says 'This count includes any >>> nodes that are currently DISABLED'. So I was wondering if I could help >>> by migrating towards numa_num_task_nodes() / numa_get_mems_allowed()? >>> It's the same as You wrote earlier to Alexy? >>> >> >> If "mems_allowed" refers to nodes allowing memory allocation, then yes, >> this would be one way to get into that issue. Oh, is this what happened >> in 0006d? > > OK, thanks for confirmation. No, 0006d was about normal numactl run, > without --membind. > I didn't have time to look into all this info about mappings, io_uring yet, so no response from me. >> I did get a couple of "operation canceled" failures, but only on fairly >> old kernel versions (6.1 which came as default with the VM). > > OK, I'll try to see that later too. > > btw QQ regarding partitioned clockwise as I had thought: does this > opens a road towards multiple BGwriters? (outside of this > $thread/v1/PoC) > I don't think the clocksweep partitioning is required for multiple bgwriters, but it might make it easier. regards -- Tomas Vondra --------------Mky2abyS3YoHwGs5syrGiO88 Content-Type: text/x-patch; charset=UTF-8; name="v20251111-0007-NUMA-partition-PGPROC.patch" Content-Disposition: attachment; filename="v20251111-0007-NUMA-partition-PGPROC.patch" Content-Transfer-Encoding: base64 RnJvbSA3ZjgwOTZkMjk0ZWQ5ZDY5Yzk1M2ZmOTdiZTdmNDZkYjA1OGNkMmNiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAxMSBOb3YgMjAyNSAxMjoxMDowMyArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUxMTExIDcvN10gTlVNQTogcGFydGl0aW9uIFBHUFJPQwoKVGhlIGdvYWwgaXMgdG8g ZGlzdHJpYnV0ZSBQcm9jQXJyYXkgKG9yIHJhdGhlciBQR1BST0MgZW50cmllcyBhbmQKYXNz b2NpYXRlZCBmYXN0LXBhdGggYXJyYXlzKSB0byBOVU1BIG5vZGVzLgoKV2UgY2FuJ3QgZG8g dGhpcyBieSBzaW1wbHkgaW50ZXJsZWF2aW5nIHBhZ2VzLCBiZWNhdXNlIHRoYXQgd291bGRu J3QKd29yayBmb3IgYm90aCBwYXJ0cyBhdCB0aGUgc2FtZSB0aW1lLiBXZSB3YW50IHRvIHBs YWNlIHRoZSBQR1BST0MgYW5kCml0J3MgZmFzdC1wYXRoIGxvY2tpbmcgc3RydWN0cyBvbiB0 aGUgc2FtZSBub2RlLCBidXQgdGhlIHN0cnVjdHMgYXJlCm9mIGRpZmZlcmVudCBzaXplcywg ZXRjLgoKQW5vdGhlciBwcm9ibGVtIGlzIHRoYXQgUEdQUk9DIGVudHJpZXMgYXJlIGZhaXJs eSBzbWFsbCwgc28gd2l0aCBodWdlCnBhZ2VzIGFuZCByZWFzb25hYmxlIHZhbHVlcyBvZiBt YXhfY29ubmVjdGlvbnMgZXZlcnl0aGluZyBmaXRzIG9udG8gYQpzaW5nbGUgcGFnZS4gV2Ug ZG9uJ3Qgd2FudCB0byBtYWtlIHRoaXMgaW5jb21wYXRpYmxlIHdpdGggaHVnZSBwYWdlcy4K Ck5vdGU6IElmIHdlIGV2ZW50dWFsbHkgc3dpdGNoIHRvIGFsbG9jYXRpbmcgc2VwYXJhdGUg c2hhcmVkIHNlZ21lbnRzIGZvcgpkaWZmZXJlbnQgcGFydHMgKHRvIGFsbG93IG9uLWxpbmUg cmVzaXppbmcpLCB3ZSBjb3VsZCBrZWVwIHVzaW5nIHJlZ3VsYXIKcGFnZXMgZm9yIHByb2Nh cnJheSwgYW5kIHRoaXMgd291bGQgbm90IGJlIHN1Y2ggYW4gaXNzdWUuCgpUbyBtYWtlIHRo aXMgd29yaywgd2Ugc3BsaXQgdGhlIFBHUFJPQyBhcnJheSBpbnRvIHBlci1ub2RlIHNlZ21l bnRzLAplYWNoIHdpdGggYWJvdXQgKE1heEJhY2tlbmRzIC8gbnVtYV9ub2RlcykgZW50cmll cywgYW5kIG9uZSBzZWdtZW50IGZvcgphdXhpbGlhcnkgcHJvY2Vzc2VzIGFuZCBwcmVwYXJl ZCB0cmFuc2F0aW9ucy4gQW5kIHdlIGRvIHRoZSBzYW1lIHRoaW5nCmZvciBmYXN0LXBhdGgg YXJyYXlzLgoKVGhlIFBHUFJPQyBzZWdtZW50cyBhcmUgbGFpZCBvdXQgbGlrZSB0aGlzIChl LmcuIGZvciAyIE5VTUEgbm9kZXMpOgoKIC0gUEdQUk9DIGFycmF5IC8gbm9kZSAjMAogLSBQ R1BST0MgYXJyYXkgLyBub2RlICMxCiAtIFBHUFJPQyBhcnJheSAvIGF1eCBwcm9jZXNzZXMg KyAyUEMgdHJhbnNhY3Rpb25zCiAtIGZhc3QtcGF0aCBhcnJheXMgLyBub2RlICMwCiAtIGZh c3QtcGF0aCBhcnJheXMgLyBub2RlICMxCiAtIGZhc3QtcGF0aCBhcnJheXMgLyBhdXggcHJv Y2Vzc2VzICsgMlBDIHRyYW5zYWN0aW9uCgpFYWNoIHNlZ21lbnQgaXMgYWxpZ25lZCB0byAo c3RhcnRzIGF0KSBtZW1vcnkgcGFnZSwgYW5kIGlzIGVmZmVjdGl2ZWx5IGEKbXVsdGlwbGUg b2YgbXVsdGlwbGUgbWVtb3J5IHBhZ2VzLgoKSGF2aW5nIGEgc2luZ2xlIFBHUFJPQyBhcnJh eSBtYWRlIGNlcnRhaW4gb3BlcmF0aW9ucyBlYXNpZXJzIC0gZS5nLiBpdAp3YXMgcG9zc2li bGUgdG8gaXRlcmF0ZSB0aGUgYXJyYXksIGFuZCBHZXROdW1iZXJGcm9tUEdQcm9jKCkgY291 bGQKY2FsY3VsYXRlIG9mZnNldCBieSBzaW1wbHkgc3VidHJhY3RpbmcgUEdQUk9DIHBvaW50 ZXJzLiBXaXRoIG11bHRpcGxlCnNlZ21lbnRzIHRoYXQncyBub3QgcG9zc2libGUsIGJ1dCB0 aGUgZmFsbG91dCBpcyBtaW5pbWFsLgoKTW9zdCBwbGFjZXMgYWNjZXNzZWQgUEdQUk9DIHRo cm91Z2ggUFJPQ19IRFItPmFsbFByb2NzLCBhbmQgY2FuIGNvbnRpbnVlCnRvIGRvIHNvLCBl eGNlcHQgdGhhdCBub3cgdGhleSBnZXQgYSBwb2ludGVyIHRvIHRoZSBQR1BST0MgKHdoaWNo IG1vc3QKcGxhY2VzIHdhbnRlZCBhbnl3YXkpLgoKV2l0aCB0aGUgZmVhdHVyZSBkaXNhYmxl ZCwgdGhlcmUncyBvbmx5IGEgc2luZ2xlICJwYXJ0aXRpb24iIGZvciBhbGwKUEdQUk9DIGVu dHJpZXMuCgpTaW1pbGFybHkgdG8gdGhlIGJ1ZmZlciBwYXJ0aXRpb25pbmcsIHRoaXMgaW50 cm9kdWNlcyBhIHNtYWxsICJyZWdpc3RyeSIKb2YgcGFydGl0aW9ucywgYXMgYSBzb3VyY2Ug b2YgdHJ1dGguIEFuZCB0aGVuIGFsc28gYSBuZXcgInN5c3RlbSIgdmlldwoicGdfYnVmZmVy Y2FjaGVfcGdwcm9jIiBzaG93aW5nIGJhc2ljIGluZnJvbWF0aW9uIGFib3V1dCB0aGUgcGFy dGl0aW9ucy4KCk5vdGU6IFRoZXJlJ3MgYW4gaW5kaXJlY3Rpb24sIHRob3VnaC4gQnV0IHRo ZSBwb2ludGVyIGRvZXMgbm90IGNoYW5nZSwKc28gaG9wZWZ1bGx5IHRoYXQncyBub3QgYW4g aXNzdWUuIEFuZCBlYWNoIFBHUFJPQyBlbnRyeSBnZXRzIGFuIGV4cGxpY2l0CnByb2NudW1i ZXIgZmllbGQsIHdoaWNoIGlzIHRoZSBpbmRleCBpbiBhbGxQcm9jcywgR2V0TnVtYmVyRnJv bVBHUHJvYwpjYW4gc2ltcGx5IHJldHVybiB0aGF0LgoKRWFjaCBQR1BST0MgYWxzbyBnZXRz IG51bWFfbm9kZSwgdHJhY2tpbmcgdGhlIE5VTUEgbm9kZSwgc28gdGhhdCB3ZQpkb24ndCBo YXZlIHRvIHJlY2FsY3VsYXRlIHRoYXQuIFRoaXMgaXMgdXNlZCBieSBJbml0UHJvY2Vzcygp IHRvIHBpY2sKYSBQR1BST0MgZW50cnkgZnJvbSB0aGUgbG9jYWwgTlVNQSBub2RlLgoKTm90 ZTogVGhlIHNjaGVkdWxlciBtYXkgbWlncmF0ZSB0aGUgcHJvY2VzcyB0byBhIGRpZmZlcmVu dCBDUFUvbm9kZQpsYXRlci4gTWF5YmUgd2Ugc2hvdWxkIGNvbnNpZGVyIHBpbm5pbmcgdGhl IHByb2Nlc3MgdG8gdGhlIG5vZGU/CgpOb3RlOiBUaGVyZSdzIHNvbWUgY2hhbGxlbmdlcyBp biBtYWtpbmcgdGhpcyB3b3JrIG9uIEVYRUNfQkFDS0VORCwgZXZlbgppZiB3ZSBkb24ndCBz dXBwb3J0IE5VTUEgb24gcGxhdGZvcm1zIHRoYXQgcmVxdWlyZSB0aGlzLgotLS0KIC4uLi9w Z19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsICAgICAgICAgICAgICB8ICAxOSArCiBjb250 cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgfCAgOTYgKystCiBz cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMgICAgICAgICAgICAgfCAgIDQgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMgICAgICAgICB8ICAgMyAr LQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jICAgICAgIHwgICA0 ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jICAgICAgICAgICAgICAgfCAg IDIgKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jICAgICAgICB8 ICAgMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYyAgICAgICAg IHwgICAyICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgICAgICAg ICB8ICAgMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAgICAg ICAgIHwgIDg1ICsrLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYyAgICAgICAg ICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jICAgICAg ICAgICAgICAgfCA1NTEgKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9wb3J0L3Bn X251bWEuaCAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jLmggICAgICAgICAgICAgICAgICAgIHwgIDE4ICstCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogMTUgZmlsZXMgY2hhbmdl ZCwgNzIzIGluc2VydGlvbnMoKyksIDczIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbCBiL2Nv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAppbmRl eCBkYzJjZTAxOTI4My4uMzA2MDYzZTE1OWUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVm ZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAorKysgYi9jb250cmliL3Bn X2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKQEAgLTMzLDMgKzMz LDIyIEBAIFJFVk9LRSBBTEwgT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyBGUk9NIFBV QkxJQzsKIAogR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19idWZmZXJjYWNoZV9wYXJ0 aXRpb25zKCkgVE8gcGdfbW9uaXRvcjsKIEdSQU5UIFNFTEVDVCBPTiBwZ19idWZmZXJjYWNo ZV9wYXJ0aXRpb25zIFRPIHBnX21vbml0b3I7CisKKy0tIFJlZ2lzdGVyIHRoZSBuZXcgZnVu Y3Rpb25zLgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGdw cm9jKCkKK1JFVFVSTlMgU0VUT0YgUkVDT1JECitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bn X2J1ZmZlcmNhY2hlX3BncHJvYycKK0xBTkdVQUdFIEMgUEFSQUxMRUwgU0FGRTsKKworLS0g Q3JlYXRlIGEgdmlldyBmb3IgY29udmVuaWVudCBhY2Nlc3MuCitDUkVBVEUgVklFVyBwZ19i dWZmZXJjYWNoZV9wZ3Byb2MgQVMKKwlTRUxFQ1QgUC4qIEZST00gcGdfYnVmZmVyY2FjaGVf cGdwcm9jKCkgQVMgUAorCShwYXJ0aXRpb24gaW50ZWdlciwKKwkgbnVtYV9ub2RlIGludGVn ZXIsIG51bV9wcm9jcyBpbnRlZ2VyLCBwZ3Byb2NfcHRyIGJpZ2ludCwgZmFzdHBhdGhfcHRy IGJpZ2ludCk7CisKKy0tIERvbid0IHdhbnQgdGhlc2UgdG8gYmUgYXZhaWxhYmxlIHRvIHB1 YmxpYy4KK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGdwcm9jKCkg RlJPTSBQVUJMSUM7CitSRVZPS0UgQUxMIE9OIHBnX2J1ZmZlcmNhY2hlX3BncHJvYyBGUk9N IFBVQkxJQzsKKworR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19idWZmZXJjYWNoZV9w Z3Byb2MoKSBUTyBwZ19tb25pdG9yOworR1JBTlQgU0VMRUNUIE9OIHBnX2J1ZmZlcmNhY2hl X3BncHJvYyBUTyBwZ19tb25pdG9yOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJj YWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9w Z19idWZmZXJjYWNoZV9wYWdlcy5jCmluZGV4IDEzNzlkNTRjYzVkLi5mMzQwZmNmNDIwYyAx MDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdl cy5jCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMu YwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgInBvcnQvcGdfbnVtYS5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdy LmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXku aCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5o IgpAQCAtMjksNyArMzAsOCBAQAogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfRVZJQ1RfQUxM X0VMRU0gMwogCiAjZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9OVU1BX0VMRU0JMwotI2RlZmlu ZSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNCTExCisjZGVmaW5lIE5VTV9CVUZG RVJDQUNIRV9QQVJUSVRJT05TX0VMRU0JMTIKKyNkZWZpbmUgTlVNX0JVRkZFUkNBQ0hFX1BH UFJPQ19FTEVNCTUKIAogUEdfTU9EVUxFX01BR0lDX0VYVCgKIAkJCQkJLm5hbWUgPSAicGdf YnVmZmVyY2FjaGUiLApAQCAtMTA0LDYgKzEwNiw3IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEo cGdfYnVmZmVyY2FjaGVfZXZpY3QpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19idWZmZXJj YWNoZV9ldmljdF9yZWxhdGlvbik7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNh Y2hlX2V2aWN0X2FsbCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNhY2hlX3Bh cnRpdGlvbnMpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19idWZmZXJjYWNoZV9wZ3Byb2Mp OwogCiAKIC8qIE9ubHkgbmVlZCB0byB0b3VjaCBtZW1vcnkgb25jZSBwZXIgYmFja2VuZCBw cm9jZXNzIGxpZmV0aW1lICovCkBAIC05MzEsMyArOTM0LDk0IEBAIHBnX2J1ZmZlcmNhY2hl X3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAllbHNlCiAJCVNSRl9SRVRVUk5fRE9O RShmdW5jY3R4KTsKIH0KKworLyoKKyAqIElucXVpcmUgYWJvdXQgcGFydGl0aW9uaW5nIG9m IFBHUFJPQyBhcnJheS4KKyAqLworRGF0dW0KK3BnX2J1ZmZlcmNhY2hlX3BncHJvYyhQR19G VU5DVElPTl9BUkdTKQoreworCUZ1bmNDYWxsQ29udGV4dCAqZnVuY2N0eDsKKwlNZW1vcnlD b250ZXh0IG9sZGNvbnRleHQ7CisJVHVwbGVEZXNjCXR1cGxlZGVzYzsKKwlUdXBsZURlc2MJ ZXhwZWN0ZWRfdHVwbGVkZXNjOworCUhlYXBUdXBsZQl0dXBsZTsKKwlEYXR1bQkJcmVzdWx0 OworCisJaWYgKFNSRl9JU19GSVJTVENBTEwoKSkKKwl7CisJCWZ1bmNjdHggPSBTUkZfRklS U1RDQUxMX0lOSVQoKTsKKworCQkvKiBTd2l0Y2ggY29udGV4dCB3aGVuIGFsbG9jYXRpbmcg c3R1ZmYgdG8gYmUgdXNlZCBpbiBsYXRlciBjYWxscyAqLworCQlvbGRjb250ZXh0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7CisK KwkJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBlKGZjaW5mbywgTlVMTCwgJmV4cGVjdGVkX3R1 cGxlZGVzYykgIT0gVFlQRUZVTkNfQ09NUE9TSVRFKQorCQkJZWxvZyhFUlJPUiwgInJldHVy biB0eXBlIG11c3QgYmUgYSByb3cgdHlwZSIpOworCisJCWlmIChleHBlY3RlZF90dXBsZWRl c2MtPm5hdHRzICE9IE5VTV9CVUZGRVJDQUNIRV9QR1BST0NfRUxFTSkKKwkJCWVsb2coRVJS T1IsICJpbmNvcnJlY3QgbnVtYmVyIG9mIG91dHB1dCBhcmd1bWVudHMiKTsKKworCQkvKiBD b25zdHJ1Y3QgYSB0dXBsZSBkZXNjcmlwdG9yIGZvciB0aGUgcmVzdWx0IHJvd3MuICovCisJ CXR1cGxlZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKGV4cGVjdGVkX3R1cGxlZGVz Yy0+bmF0dHMpOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJl cikgMSwgInBhcnRpdGlvbiIsCisJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CisJCVR1cGxl RGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAyLCAibnVtYV9ub2RlIiwK KwkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxl ZGVzYywgKEF0dHJOdW1iZXIpIDMsICJudW1fcHJvY3MiLAorCQkJCQkJICAgSU5UNE9JRCwg LTEsIDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikg NCwgInBncHJvY19wdHIiLAorCQkJCQkJICAgSU5UOE9JRCwgLTEsIDApOworCQlUdXBsZURl c2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgNSwgImZhc3RwYXRoX3B0ciIs CisJCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CisKKwkJZnVuY2N0eC0+dXNlcl9mY3R4ID0g Qmxlc3NUdXBsZURlc2ModHVwbGVkZXNjKTsKKworCQkvKiBSZXR1cm4gdG8gb3JpZ2luYWwg Y29udGV4dCB3aGVuIGFsbG9jYXRpbmcgdHJhbnNpZW50IG1lbW9yeSAqLworCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJLyogU2V0IG1heCBjYWxscyBhbmQg cmVtZW1iZXIgdGhlIHVzZXIgZnVuY3Rpb24gY29udGV4dC4gKi8KKwkJZnVuY2N0eC0+bWF4 X2NhbGxzID0gUHJvY1BhcnRpdGlvbkNvdW50KCk7CisJfQorCisJZnVuY2N0eCA9IFNSRl9Q RVJDQUxMX1NFVFVQKCk7CisKKwlpZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwgZnVuY2N0eC0+ bWF4X2NhbGxzKQorCXsKKwkJdWludDMyCQlpID0gZnVuY2N0eC0+Y2FsbF9jbnRyOworCisJ CWludAkJCW51bWFfbm9kZSwKKwkJCQkJbnVtX3Byb2NzOworCisJCXZvaWQJICAgKnBncHJv Y19wdHIsCisJCQkJICAgKmZhc3RwYXRoX3B0cjsKKworCQlEYXR1bQkJdmFsdWVzW05VTV9C VUZGRVJDQUNIRV9QR1BST0NfRUxFTV07CisJCWJvb2wJCW51bGxzW05VTV9CVUZGRVJDQUNI RV9QR1BST0NfRUxFTV07CisKKwkJUHJvY1BhcnRpdGlvbkdldChpLCAmbnVtYV9ub2RlLCAm bnVtX3Byb2NzLAorCQkJCQkJICZwZ3Byb2NfcHRyLCAmZmFzdHBhdGhfcHRyKTsKKworCQl2 YWx1ZXNbMF0gPSBJbnQzMkdldERhdHVtKGkpOworCQludWxsc1swXSA9IGZhbHNlOworCisJ CXZhbHVlc1sxXSA9IEludDMyR2V0RGF0dW0obnVtYV9ub2RlKTsKKwkJbnVsbHNbMV0gPSBm YWxzZTsKKworCQl2YWx1ZXNbMl0gPSBJbnQzMkdldERhdHVtKG51bV9wcm9jcyk7CisJCW51 bGxzWzJdID0gZmFsc2U7CisKKwkJdmFsdWVzWzNdID0gUG9pbnRlckdldERhdHVtKHBncHJv Y19wdHIpOworCQludWxsc1szXSA9IGZhbHNlOworCisJCXZhbHVlc1s0XSA9IFBvaW50ZXJH ZXREYXR1bShmYXN0cGF0aF9wdHIpOworCQludWxsc1s0XSA9IGZhbHNlOworCisJCS8qIEJ1 aWxkIGFuZCByZXR1cm4gdGhlIHR1cGxlLiAqLworCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBs ZSgoVHVwbGVEZXNjKSBmdW5jY3R4LT51c2VyX2ZjdHgsIHZhbHVlcywgbnVsbHMpOworCQly ZXN1bHQgPSBIZWFwVHVwbGVHZXREYXR1bSh0dXBsZSk7CisKKwkJU1JGX1JFVFVSTl9ORVhU KGZ1bmNjdHgsIHJlc3VsdCk7CisJfQorCWVsc2UKKwkJU1JGX1JFVFVSTl9ET05FKGZ1bmNj dHgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCmluZGV4IGVhNDNiNDMyZGFm Li43ZDU4OWJhYzExNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v Y2xvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwpAQCAtNTc1 LDcgKzU3NSw3IEBAIFRyYW5zYWN0aW9uR3JvdXBVcGRhdGVYaWRTdGF0dXMoVHJhbnNhY3Rp b25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsCiAJLyogV2FsayB0aGUgbGlzdCBhbmQgdXBk YXRlIHRoZSBzdGF0dXMgb2YgYWxsIFhJRHMuICovCiAJd2hpbGUgKG5leHRpZHggIT0gSU5W QUxJRF9QUk9DX05VTUJFUikKIAl7Ci0JCVBHUFJPQwkgICAqbmV4dHByb2MgPSAmUHJvY0ds b2JhbC0+YWxsUHJvY3NbbmV4dGlkeF07CisJCVBHUFJPQwkgICAqbmV4dHByb2MgPSBQcm9j R2xvYmFsLT5hbGxQcm9jc1tuZXh0aWR4XTsKIAkJaW50NjQJCXRoaXNwYWdlbm8gPSBuZXh0 cHJvYy0+Y2xvZ0dyb3VwTWVtYmVyUGFnZTsKIAogCQkvKgpAQCAtNjM0LDcgKzYzNCw3IEBA IFRyYW5zYWN0aW9uR3JvdXBVcGRhdGVYaWRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhp ZFN0YXR1cyBzdGF0dXMsCiAJICovCiAJd2hpbGUgKHdha2VpZHggIT0gSU5WQUxJRF9QUk9D X05VTUJFUikKIAl7Ci0JCVBHUFJPQwkgICAqd2FrZXByb2MgPSAmUHJvY0dsb2JhbC0+YWxs UHJvY3Nbd2FrZWlkeF07CisJCVBHUFJPQwkgICAqd2FrZXByb2MgPSBQcm9jR2xvYmFsLT5h bGxQcm9jc1t3YWtlaWR4XTsKIAogCQl3YWtlaWR4ID0gcGdfYXRvbWljX3JlYWRfdTMyKCZ3 YWtlcHJvYy0+Y2xvZ0dyb3VwTmV4dCk7CiAJCXBnX2F0b21pY193cml0ZV91MzIoJndha2Vw cm9jLT5jbG9nR3JvdXBOZXh0LCBJTlZBTElEX1BST0NfTlVNQkVSKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCmluZGV4IDg5ZDBiZmE3NzYwLi5lMGUxNzI5MzUz NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCkBAIC0yODIsNyAr MjgyLDcgQEAgVHdvUGhhc2VTaG1lbUluaXQodm9pZCkKIAkJCVR3b1BoYXNlU3RhdGUtPmZy ZWVHWGFjdHMgPSAmZ3hhY3RzW2ldOwogCiAJCQkvKiBhc3NvY2lhdGUgaXQgd2l0aCBhIFBH UFJPQyBhc3NpZ25lZCBieSBJbml0UHJvY0dsb2JhbCAqLwotCQkJZ3hhY3RzW2ldLnBncHJv Y25vID0gR2V0TnVtYmVyRnJvbVBHUHJvYygmUHJlcGFyZWRYYWN0UHJvY3NbaV0pOworCQkJ Z3hhY3RzW2ldLnBncHJvY25vID0gR2V0TnVtYmVyRnJvbVBHUHJvYyhQcmVwYXJlZFhhY3RQ cm9jc1tpXSk7CiAJCX0KIAl9CiAJZWxzZQpAQCAtNDQ3LDYgKzQ0Nyw3IEBAIE1hcmtBc1By ZXBhcmluZ0d1dHMoR2xvYmFsVHJhbnNhY3Rpb24gZ3hhY3QsIEZ1bGxUcmFuc2FjdGlvbklk IGZ4aWQsCiAKIAkvKiBJbml0aWFsaXplIHRoZSBQR1BST0MgZW50cnkgKi8KIAlNZW1TZXQo cHJvYywgMCwgc2l6ZW9mKFBHUFJPQykpOworCXByb2MtPnByb2NudW1iZXIgPSBneGFjdC0+ cGdwcm9jbm87CiAJZGxpc3Rfbm9kZV9pbml0KCZwcm9jLT5saW5rcyk7CiAJcHJvYy0+d2Fp dFN0YXR1cyA9IFBST0NfV0FJVF9TVEFUVVNfT0s7CiAJaWYgKExvY2FsVHJhbnNhY3Rpb25J ZElzVmFsaWQoTXlQcm9jLT52eGlkLmx4aWQpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9s YXVuY2hfYmFja2VuZC5jCmluZGV4IDk3NjYzOGE1OGFjLi41ZTdiMGFjODg1MCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jCisrKyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYwpAQCAtMTA3LDggKzEwNyw4 IEBAIHR5cGVkZWYgc3RydWN0CiAJTFdMb2NrUGFkZGVkICpNYWluTFdMb2NrQXJyYXk7CiAJ c2xvY2tfdCAgICAqUHJvY1N0cnVjdExvY2s7CiAJUFJPQ19IRFIgICAqUHJvY0dsb2JhbDsK LQlQR1BST0MJICAgKkF1eGlsaWFyeVByb2NzOwotCVBHUFJPQwkgICAqUHJlcGFyZWRYYWN0 UHJvY3M7CisJUEdQUk9DCSAgICoqQXV4aWxpYXJ5UHJvY3M7CisJUEdQUk9DCSAgICoqUHJl cGFyZWRYYWN0UHJvY3M7CiAJdm9sYXRpbGUgUE1TaWduYWxEYXRhICpQTVNpZ25hbFN0YXRl OwogCVByb2NTaWduYWxIZWFkZXIgKlByb2NTaWduYWw7CiAJcGlkX3QJCVBvc3RtYXN0ZXJQ aWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jIGIvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYwppbmRleCBjZTZiNTI5OTMyNC4uMzI4ODkw MGJiNmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKKysr IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYwpAQCAtMjkyLDcgKzI5Miw3IEBA IFBnQXJjaFdha2V1cCh2b2lkKQogCSAqIGJlIHJlbGF1bmNoZWQgc2hvcnRseSBhbmQgd2ls bCBzdGFydCBhcmNoaXZpbmcuCiAJICovCiAJaWYgKGFyY2hfcGdwcm9jbm8gIT0gSU5WQUxJ RF9QUk9DX05VTUJFUikKLQkJU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW2FyY2hf cGdwcm9jbm9dLnByb2NMYXRjaCk7CisJCVNldExhdGNoKCZQcm9jR2xvYmFsLT5hbGxQcm9j c1thcmNoX3BncHJvY25vXS0+cHJvY0xhdGNoKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvd2Fsc3VtbWFyaXplci5jCmluZGV4IGM0YTg4OGEwODFjLi5mNTg0NGFhNWI2YSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMKKysr IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMKQEAgLTY0OSw3ICs2 NDksNyBAQCBXYWtldXBXYWxTdW1tYXJpemVyKHZvaWQpCiAJTFdMb2NrUmVsZWFzZShXQUxT dW1tYXJpemVyTG9jayk7CiAKIAlpZiAocGdwcm9jbm8gIT0gSU5WQUxJRF9QUk9DX05VTUJF UikKLQkJU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW3BncHJvY25vXS5wcm9jTGF0 Y2gpOworCQlTZXRMYXRjaCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbcGdwcm9jbm9dLT5wcm9j TGF0Y2gpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmX2luaXQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMK aW5kZXggNTg3ODU5YTU3NTQuLmJkY2RiY2M2YjVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zl9pbml0LmMKQEAgLTc5OSw2ICs3OTksOCBAQCBjaGVja19kZWJ1Z19udW1h KGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKIAogCQlp ZiAocGdfc3RyY2FzZWNtcChpdGVtLCAiYnVmZmVycyIpID09IDApCiAJCQlmbGFncyB8PSBO VU1BX0JVRkZFUlM7CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoaXRlbSwgInByb2NzIikg PT0gMCkKKwkJCWZsYWdzIHw9IE5VTUFfUFJPQ1M7CiAJCWVsc2UKIAkJewogCQkJR1VDX2No ZWNrX2VycmRldGFpbCgiSW52YWxpZCBvcHRpb24gXCIlc1wiLiIsIGl0ZW0pOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKaW5kZXggODEwYTU0OWVmY2UuLjA5Mzcy OTI2NDNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlz dC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKQEAgLTQ3 Miw3ICs0NzIsNyBAQCBTdHJhdGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBz dHJhdGVneSwgdWludDMyICpidWZfc3RhdGUsIGJvb2wgKmZyb21fcgogCQkgKiBhY3R1YWxs eSBmaW5lIGJlY2F1c2UgcHJvY0xhdGNoIGlzbid0IGV2ZXIgZnJlZWQsIHNvIHdlIGp1c3Qg Y2FuCiAJCSAqIHBvdGVudGlhbGx5IHNldCB0aGUgd3JvbmcgcHJvY2VzcycgKG9yIG5vIHBy b2Nlc3MnKSBsYXRjaC4KIAkJICovCi0JCVNldExhdGNoKCZQcm9jR2xvYmFsLT5hbGxQcm9j c1tiZ3dwcm9jbm9dLnByb2NMYXRjaCk7CisJCVNldExhdGNoKCZQcm9jR2xvYmFsLT5hbGxQ cm9jc1tiZ3dwcm9jbm9dLT5wcm9jTGF0Y2gpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3Byb2NhcnJheS5jCmluZGV4IDIwMGY3MmM2ZTI1Li43ZTI4ZmJkZmVhMyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKKysrIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKQEAgLTI2OCw3ICsyNjgsNyBAQCB0 eXBlZGVmIGVudW0gS0FYQ29tcHJlc3NSZWFzb24KIAogc3RhdGljIFByb2NBcnJheVN0cnVj dCAqcHJvY0FycmF5OwogCi1zdGF0aWMgUEdQUk9DICphbGxQcm9jczsKK3N0YXRpYyBQR1BS T0MgKiphbGxQcm9jczsKIAogLyoKICAqIENhY2hlIHRvIHJlZHVjZSBvdmVyaGVhZCBvZiBy ZXBlYXRlZCBjYWxscyB0byBUcmFuc2FjdGlvbklkSXNJblByb2dyZXNzKCkKQEAgLTM2OSw2 ICszNjksOCBAQCBzdGF0aWMgaW5saW5lIEZ1bGxUcmFuc2FjdGlvbklkIEZ1bGxYaWRSZWxh dGl2ZVRvKEZ1bGxUcmFuc2FjdGlvbklkIHJlbCwKIAkJCQkJCQkJCQkJCSAgVHJhbnNhY3Rp b25JZCB4aWQpOwogc3RhdGljIHZvaWQgR2xvYmFsVmlzVXBkYXRlQXBwbHkoQ29tcHV0ZVhp ZEhvcml6b25zUmVzdWx0ICpob3Jpem9ucyk7CiAKK3N0YXRpYyB2b2lkIEFzc2VydENoZWNr QWxsUHJvY3Modm9pZCk7CisKIC8qCiAgKiBSZXBvcnQgc2hhcmVkLW1lbW9yeSBzcGFjZSBu ZWVkZWQgYnkgUHJvY0FycmF5U2htZW1Jbml0CiAgKi8KQEAgLTQ3Niw2ICs0NzgsOCBAQCBQ cm9jQXJyYXlBZGQoUEdQUk9DICpwcm9jKQogCUxXTG9ja0FjcXVpcmUoUHJvY0FycmF5TG9j aywgTFdfRVhDTFVTSVZFKTsKIAlMV0xvY2tBY3F1aXJlKFhpZEdlbkxvY2ssIExXX0VYQ0xV U0lWRSk7CiAKKwlBc3NlcnRDaGVja0FsbFByb2NzKCk7CisKIAlpZiAoYXJyYXlQLT5udW1Q cm9jcyA+PSBhcnJheVAtPm1heFByb2NzKQogCXsKIAkJLyoKQEAgLTUwMiw3ICs1MDYsNyBA QCBQcm9jQXJyYXlBZGQoUEdQUk9DICpwcm9jKQogCQlpbnQJCQl0aGlzX3Byb2NubyA9IGFy cmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKIAogCQlBc3NlcnQodGhpc19wcm9jbm8gPj0gMCAm JiB0aGlzX3Byb2NubyA8IChhcnJheVAtPm1heFByb2NzICsgTlVNX0FVWElMSUFSWV9QUk9D UykpOwotCQlBc3NlcnQoYWxsUHJvY3NbdGhpc19wcm9jbm9dLnBneGFjdG9mZiA9PSBpbmRl eCk7CisJCUFzc2VydChhbGxQcm9jc1t0aGlzX3Byb2Nub10tPnBneGFjdG9mZiA9PSBpbmRl eCk7CiAKIAkJLyogSWYgd2UgaGF2ZSBmb3VuZCBvdXIgcmlnaHQgcG9zaXRpb24gaW4gdGhl IGFycmF5LCBicmVhayAqLwogCQlpZiAodGhpc19wcm9jbm8gPiBwZ3Byb2NubykKQEAgLTUz OCwxMSArNTQyLDEzIEBAIFByb2NBcnJheUFkZChQR1BST0MgKnByb2MpCiAJCWludAkJCXBy b2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKIAogCQlBc3NlcnQocHJvY25vID49 IDAgJiYgcHJvY25vIDwgKGFycmF5UC0+bWF4UHJvY3MgKyBOVU1fQVVYSUxJQVJZX1BST0NT KSk7Ci0JCUFzc2VydChhbGxQcm9jc1twcm9jbm9dLnBneGFjdG9mZiA9PSBpbmRleCAtIDEp OworCQlBc3NlcnQoYWxsUHJvY3NbcHJvY25vXS0+cGd4YWN0b2ZmID09IGluZGV4IC0gMSk7 CiAKLQkJYWxsUHJvY3NbcHJvY25vXS5wZ3hhY3RvZmYgPSBpbmRleDsKKwkJYWxsUHJvY3Nb cHJvY25vXS0+cGd4YWN0b2ZmID0gaW5kZXg7CiAJfQogCisJQXNzZXJ0Q2hlY2tBbGxQcm9j cygpOworCiAJLyoKIAkgKiBSZWxlYXNlIGluIHJldmVyc2VkIGFjcXVpc2l0aW9uIG9yZGVy LCB0byByZWR1Y2UgZnJlcXVlbmN5IG9mIGhhdmluZyB0bwogCSAqIHdhaXQgZm9yIFhpZEdl bkxvY2sgd2hpbGUgaG9sZGluZyBQcm9jQXJyYXlMb2NrLgpAQCAtNTc4LDEwICs1ODQsMTIg QEAgUHJvY0FycmF5UmVtb3ZlKFBHUFJPQyAqcHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RY aWQpCiAJTFdMb2NrQWNxdWlyZShQcm9jQXJyYXlMb2NrLCBMV19FWENMVVNJVkUpOwogCUxX TG9ja0FjcXVpcmUoWGlkR2VuTG9jaywgTFdfRVhDTFVTSVZFKTsKIAorCUFzc2VydENoZWNr QWxsUHJvY3MoKTsKKwogCW15b2ZmID0gcHJvYy0+cGd4YWN0b2ZmOwogCiAJQXNzZXJ0KG15 b2ZmID49IDAgJiYgbXlvZmYgPCBhcnJheVAtPm51bVByb2NzKTsKLQlBc3NlcnQoUHJvY0ds b2JhbC0+YWxsUHJvY3NbYXJyYXlQLT5wZ3Byb2Nub3NbbXlvZmZdXS5wZ3hhY3RvZmYgPT0g bXlvZmYpOworCUFzc2VydChQcm9jR2xvYmFsLT5hbGxQcm9jc1thcnJheVAtPnBncHJvY25v c1tteW9mZl1dLT5wZ3hhY3RvZmYgPT0gbXlvZmYpOwogCiAJaWYgKFRyYW5zYWN0aW9uSWRJ c1ZhbGlkKGxhdGVzdFhpZCkpCiAJewpAQCAtNjM2LDExICs2NDQsMTMgQEAgUHJvY0FycmF5 UmVtb3ZlKFBHUFJPQyAqcHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpCiAJCWludAkJ CXByb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKIAogCQlBc3NlcnQocHJvY25v ID49IDAgJiYgcHJvY25vIDwgKGFycmF5UC0+bWF4UHJvY3MgKyBOVU1fQVVYSUxJQVJZX1BS T0NTKSk7Ci0JCUFzc2VydChhbGxQcm9jc1twcm9jbm9dLnBneGFjdG9mZiAtIDEgPT0gaW5k ZXgpOworCQlBc3NlcnQoYWxsUHJvY3NbcHJvY25vXS0+cGd4YWN0b2ZmIC0gMSA9PSBpbmRl eCk7CiAKLQkJYWxsUHJvY3NbcHJvY25vXS5wZ3hhY3RvZmYgPSBpbmRleDsKKwkJYWxsUHJv Y3NbcHJvY25vXS0+cGd4YWN0b2ZmID0gaW5kZXg7CiAJfQogCisJQXNzZXJ0Q2hlY2tBbGxQ cm9jcygpOworCiAJLyoKIAkgKiBSZWxlYXNlIGluIHJldmVyc2VkIGFjcXVpc2l0aW9uIG9y ZGVyLCB0byByZWR1Y2UgZnJlcXVlbmN5IG9mIGhhdmluZyB0bwogCSAqIHdhaXQgZm9yIFhp ZEdlbkxvY2sgd2hpbGUgaG9sZGluZyBQcm9jQXJyYXlMb2NrLgpAQCAtODYwLDcgKzg3MCw3 IEBAIFByb2NBcnJheUdyb3VwQ2xlYXJYaWQoUEdQUk9DICpwcm9jLCBUcmFuc2FjdGlvbklk IGxhdGVzdFhpZCkKIAkvKiBXYWxrIHRoZSBsaXN0IGFuZCBjbGVhciBhbGwgWElEcy4gKi8K IAl3aGlsZSAobmV4dGlkeCAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQogCXsKLQkJUEdQUk9D CSAgICpuZXh0cHJvYyA9ICZhbGxQcm9jc1tuZXh0aWR4XTsKKwkJUEdQUk9DCSAgICpuZXh0 cHJvYyA9IGFsbFByb2NzW25leHRpZHhdOwogCiAJCVByb2NBcnJheUVuZFRyYW5zYWN0aW9u SW50ZXJuYWwobmV4dHByb2MsIG5leHRwcm9jLT5wcm9jQXJyYXlHcm91cE1lbWJlclhpZCk7 CiAKQEAgLTg4MCw3ICs4OTAsNyBAQCBQcm9jQXJyYXlHcm91cENsZWFyWGlkKFBHUFJPQyAq cHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpCiAJICovCiAJd2hpbGUgKHdha2VpZHgg IT0gSU5WQUxJRF9QUk9DX05VTUJFUikKIAl7Ci0JCVBHUFJPQwkgICAqbmV4dHByb2MgPSAm YWxsUHJvY3Nbd2FrZWlkeF07CisJCVBHUFJPQwkgICAqbmV4dHByb2MgPSBhbGxQcm9jc1t3 YWtlaWR4XTsKIAogCQl3YWtlaWR4ID0gcGdfYXRvbWljX3JlYWRfdTMyKCZuZXh0cHJvYy0+ cHJvY0FycmF5R3JvdXBOZXh0KTsKIAkJcGdfYXRvbWljX3dyaXRlX3UzMigmbmV4dHByb2Mt PnByb2NBcnJheUdyb3VwTmV4dCwgSU5WQUxJRF9QUk9DX05VTUJFUik7CkBAIC0xNTI2LDcg KzE1MzYsNyBAQCBUcmFuc2FjdGlvbklkSXNJblByb2dyZXNzKFRyYW5zYWN0aW9uSWQgeGlk KQogCQlweGlkcyA9IG90aGVyX3N1YnhpZHN0YXRlc1twZ3hhY3RvZmZdLmNvdW50OwogCQlw Z19yZWFkX2JhcnJpZXIoKTsJCS8qIHBhaXJzIHdpdGggYmFycmllciBpbiBHZXROZXdUcmFu c2FjdGlvbklkKCkgKi8KIAkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1twZ3hhY3Rv ZmZdOwotCQlwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJcHJvYyA9IGFsbFByb2Nz W3BncHJvY25vXTsKIAkJZm9yIChqID0gcHhpZHMgLSAxOyBqID49IDA7IGotLSkKIAkJewog CQkJLyogRmV0Y2ggeGlkIGp1c3Qgb25jZSAtIHNlZSBHZXROZXdUcmFuc2FjdGlvbklkICov CkBAIC0xNjIyLDcgKzE2MzIsNiBAQCBUcmFuc2FjdGlvbklkSXNJblByb2dyZXNzKFRyYW5z YWN0aW9uSWQgeGlkKQogCXJldHVybiBmYWxzZTsKIH0KIAotCiAvKgogICogRGV0ZXJtaW5l IFhJRCBob3Jpem9ucy4KICAqCkBAIC0xNzQwLDcgKzE3NDksNyBAQCBDb21wdXRlWGlkSG9y aXpvbnMoQ29tcHV0ZVhpZEhvcml6b25zUmVzdWx0ICpoKQogCWZvciAoaW50IGluZGV4ID0g MDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdw cm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9 ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3Bn cHJvY25vXTsKIAkJaW50OAkJc3RhdHVzRmxhZ3MgPSBQcm9jR2xvYmFsLT5zdGF0dXNGbGFn c1tpbmRleF07CiAJCVRyYW5zYWN0aW9uSWQgeGlkOwogCQlUcmFuc2FjdGlvbklkIHhtaW47 CkBAIC0yMjI0LDcgKzIyMzMsNyBAQCBHZXRTbmFwc2hvdERhdGEoU25hcHNob3Qgc25hcHNo b3QpCiAJCQlUcmFuc2FjdGlvbklkIHhpZCA9IFVJTlQzMl9BQ0NFU1NfT05DRShvdGhlcl94 aWRzW3BneGFjdG9mZl0pOwogCQkJdWludDgJCXN0YXR1c0ZsYWdzOwogCi0JCQlBc3NlcnQo YWxsUHJvY3NbYXJyYXlQLT5wZ3Byb2Nub3NbcGd4YWN0b2ZmXV0ucGd4YWN0b2ZmID09IHBn eGFjdG9mZik7CisJCQlBc3NlcnQoYWxsUHJvY3NbYXJyYXlQLT5wZ3Byb2Nub3NbcGd4YWN0 b2ZmXV0tPnBneGFjdG9mZiA9PSBwZ3hhY3RvZmYpOwogCiAJCQkvKgogCQkJICogSWYgdGhl IHRyYW5zYWN0aW9uIGhhcyBubyBYSUQgYXNzaWduZWQsIHdlIGNhbiBza2lwIGl0OyBpdApA QCAtMjI5OCw3ICsyMzA3LDcgQEAgR2V0U25hcHNob3REYXRhKFNuYXBzaG90IHNuYXBzaG90 KQogCQkJCQlpZiAobnN1YnhpZHMgPiAwKQogCQkJCQl7CiAJCQkJCQlpbnQJCQlwZ3Byb2Nu byA9IHBncHJvY25vc1twZ3hhY3RvZmZdOwotCQkJCQkJUEdQUk9DCSAgICpwcm9jID0gJmFs bFByb2NzW3BncHJvY25vXTsKKwkJCQkJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3Bn cHJvY25vXTsKIAogCQkJCQkJcGdfcmVhZF9iYXJyaWVyKCk7CS8qIHBhaXJzIHdpdGggR2V0 TmV3VHJhbnNhY3Rpb25JZCAqLwogCkBAIC0yNDk5LDcgKzI1MDgsNyBAQCBQcm9jQXJyYXlJ bnN0YWxsSW1wb3J0ZWRYbWluKFRyYW5zYWN0aW9uSWQgeG1pbiwKIAlmb3IgKGluZGV4ID0g MDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdw cm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9 ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3Bn cHJvY25vXTsKIAkJaW50CQkJc3RhdHVzRmxhZ3MgPSBQcm9jR2xvYmFsLT5zdGF0dXNGbGFn c1tpbmRleF07CiAJCVRyYW5zYWN0aW9uSWQgeGlkOwogCkBAIC0yNzI1LDcgKzI3MzQsNyBA QCBHZXRSdW5uaW5nVHJhbnNhY3Rpb25EYXRhKHZvaWQpCiAJCWlmIChUcmFuc2FjdGlvbklk UHJlY2VkZXMoeGlkLCBvbGRlc3REYXRhYmFzZVJ1bm5pbmdYaWQpKQogCQl7CiAJCQlpbnQJ CQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJCVBHUFJPQwkgICAq cHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCQlQR1BST0MJICAgKnByb2MgPSBhbGxQ cm9jc1twZ3Byb2Nub107CiAKIAkJCWlmIChwcm9jLT5kYXRhYmFzZUlkID09IE15RGF0YWJh c2VJZCkKIAkJCQlvbGRlc3REYXRhYmFzZVJ1bm5pbmdYaWQgPSB4aWQ7CkBAIC0yNzU2LDcg KzI3NjUsNyBAQCBHZXRSdW5uaW5nVHJhbnNhY3Rpb25EYXRhKHZvaWQpCiAJCWZvciAoaW5k ZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJCXsKIAkJCWlu dAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQkJUEdQUk9DCSAg ICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJCVBHUFJPQwkgICAqcHJvYyA9IGFs bFByb2NzW3BncHJvY25vXTsKIAkJCWludAkJCW5zdWJ4aWRzOwogCiAJCQkvKgpAQCAtMjg1 OCw3ICsyODY3LDcgQEAgR2V0T2xkZXN0QWN0aXZlVHJhbnNhY3Rpb25JZChib29sIGluQ29t bWl0T25seSwgYm9vbCBhbGxEYnMpCiAJewogCQlUcmFuc2FjdGlvbklkIHhpZDsKIAkJaW50 CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAq cHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFBy b2NzW3BncHJvY25vXTsKIAogCQkvKiBGZXRjaCB4aWQganVzdCBvbmNlIC0gc2VlIEdldE5l d1RyYW5zYWN0aW9uSWQgKi8KIAkJeGlkID0gVUlOVDMyX0FDQ0VTU19PTkNFKG90aGVyX3hp ZHNbaW5kZXhdKTsKQEAgLTMwMjAsNyArMzAyOSw3IEBAIEdldFZpcnR1YWxYSURzRGVsYXlp bmdDaGtwdChpbnQgKm52eGlkcywgaW50IHR5cGUpCiAJZm9yIChpbmRleCA9IDA7IGluZGV4 IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0g YXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJv Y3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107 CiAKIAkJaWYgKChwcm9jLT5kZWxheUNoa3B0RmxhZ3MgJiB0eXBlKSAhPSAwKQogCQl7CkBA IC0zMDYxLDcgKzMwNzAsNyBAQCBIYXZlVmlydHVhbFhJRHNEZWxheWluZ0Noa3B0KFZpcnR1 YWxUcmFuc2FjdGlvbklkICp2eGlkcywgaW50IG52eGlkcywgaW50IHR5cGUpCiAJZm9yIChp bmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWlu dAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAg KnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQ cm9jc1twZ3Byb2Nub107CiAJCVZpcnR1YWxUcmFuc2FjdGlvbklkIHZ4aWQ7CiAKIAkJR0VU X1ZYSURfRlJPTV9QR1BST0ModnhpZCwgKnByb2MpOwpAQCAtMzE4OSw3ICszMTk4LDcgQEAg QmFja2VuZFBpZEdldFByb2NXaXRoTG9jayhpbnQgcGlkKQogCiAJZm9yIChpbmRleCA9IDA7 IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7Ci0JCVBHUFJPQwkgICAq cHJvYyA9ICZhbGxQcm9jc1thcnJheVAtPnBncHJvY25vc1tpbmRleF1dOworCQlQR1BST0MJ ICAgKnByb2MgPSBhbGxQcm9jc1thcnJheVAtPnBncHJvY25vc1tpbmRleF1dOwogCiAJCWlm IChwcm9jLT5waWQgPT0gcGlkKQogCQl7CkBAIC0zMjMyLDcgKzMyNDEsNyBAQCBCYWNrZW5k WGlkR2V0UGlkKFRyYW5zYWN0aW9uSWQgeGlkKQogCQlpZiAob3RoZXJfeGlkc1tpbmRleF0g PT0geGlkKQogCQl7CiAJCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2lu ZGV4XTsKLQkJCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCQlQ R1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJCXJlc3VsdCA9IHBy b2MtPnBpZDsKIAkJCWJyZWFrOwpAQCAtMzMwMSw3ICszMzEwLDcgQEAgR2V0Q3VycmVudFZp cnR1YWxYSURzKFRyYW5zYWN0aW9uSWQgbGltaXRYbWluLCBib29sIGV4Y2x1ZGVYbWluMCwK IAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQog CXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBH UFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJv YyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAkJdWludDgJCXN0YXR1c0ZsYWdzID0gUHJvY0ds b2JhbC0+c3RhdHVzRmxhZ3NbaW5kZXhdOwogCiAJCWlmIChwcm9jID09IE15UHJvYykKQEAg LTM0MDMsNyArMzQxMiw3IEBAIEdldENvbmZsaWN0aW5nVmlydHVhbFhJRHMoVHJhbnNhY3Rp b25JZCBsaW1pdFhtaW4sIE9pZCBkYk9pZCkKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBh cnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJh eVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1tw Z3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAog CQkvKiBFeGNsdWRlIHByZXBhcmVkIHRyYW5zYWN0aW9ucyAqLwogCQlpZiAocHJvYy0+cGlk ID09IDApCkBAIC0zNDY4LDcgKzM0NzcsNyBAQCBTaWduYWxWaXJ0dWFsVHJhbnNhY3Rpb24o VmlydHVhbFRyYW5zYWN0aW9uSWQgdnhpZCwgUHJvY1NpZ25hbFJlYXNvbiBzaWdtb2RlLAog CWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJ ewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQ Uk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9j ID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCQlWaXJ0dWFsVHJhbnNhY3Rpb25JZCBwcm9jdnhp ZDsKIAogCQlHRVRfVlhJRF9GUk9NX1BHUFJPQyhwcm9jdnhpZCwgKnByb2MpOwpAQCAtMzUy Myw3ICszNTMyLDcgQEAgTWluaW11bUFjdGl2ZUJhY2tlbmRzKGludCBtaW4pCiAJZm9yIChp bmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWlu dAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAg KnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQ cm9jc1twZ3Byb2Nub107CiAKIAkJLyoKIAkJICogU2luY2Ugd2UncmUgbm90IGhvbGRpbmcg YSBsb2NrLCBuZWVkIHRvIGJlIHByZXBhcmVkIHRvIGRlYWwgd2l0aApAQCAtMzU2OSw3ICsz NTc4LDcgQEAgQ291bnREQkJhY2tlbmRzKE9pZCBkYXRhYmFzZWlkKQogCWZvciAoaW5kZXgg PSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlw Z3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9j ID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3Nb cGdwcm9jbm9dOwogCiAJCWlmIChwcm9jLT5waWQgPT0gMCkKIAkJCWNvbnRpbnVlOwkJCS8q IGRvIG5vdCBjb3VudCBwcmVwYXJlZCB4YWN0cyAqLwpAQCAtMzU5OCw3ICszNjA3LDcgQEAg Q291bnREQkNvbm5lY3Rpb25zKE9pZCBkYXRhYmFzZWlkKQogCWZvciAoaW5kZXggPSAwOyBp bmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2Nu byA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFs bFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9j bm9dOwogCiAJCWlmIChwcm9jLT5waWQgPT0gMCkKIAkJCWNvbnRpbnVlOwkJCS8qIGRvIG5v dCBjb3VudCBwcmVwYXJlZCB4YWN0cyAqLwpAQCAtMzYyOSw3ICszNjM4LDcgQEAgQ2FuY2Vs REJCYWNrZW5kcyhPaWQgZGF0YWJhc2VpZCwgUHJvY1NpZ25hbFJlYXNvbiBzaWdtb2RlLCBi b29sIGNvbmZsaWN0UGVuZGluZykKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAt Pm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBn cHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nu b107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQlpZiAo ZGF0YWJhc2VpZCA9PSBJbnZhbGlkT2lkIHx8IHByb2MtPmRhdGFiYXNlSWQgPT0gZGF0YWJh c2VpZCkKIAkJewpAQCAtMzY3MCw3ICszNjc5LDcgQEAgQ291bnRVc2VyQmFja2VuZHMoT2lk IHJvbGVpZCkKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBp bmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRl eF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJP QwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQlpZiAocHJvYy0+cGlkID09 IDApCiAJCQljb250aW51ZTsJCQkvKiBkbyBub3QgY291bnQgcHJlcGFyZWQgeGFjdHMgKi8K QEAgLTM3MzMsNyArMzc0Miw3IEBAIENvdW50T3RoZXJEQkJhY2tlbmRzKE9pZCBkYXRhYmFz ZUlkLCBpbnQgKm5iYWNrZW5kcywgaW50ICpucHJlcGFyZWQpCiAJCWZvciAoaW5kZXggPSAw OyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJCXsKIAkJCWludAkJCXBn cHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQkJUEdQUk9DCSAgICpwcm9j ID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2Nz W3BncHJvY25vXTsKIAkJCXVpbnQ4CQlzdGF0dXNGbGFncyA9IFByb2NHbG9iYWwtPnN0YXR1 c0ZsYWdzW2luZGV4XTsKIAogCQkJaWYgKHByb2MtPmRhdGFiYXNlSWQgIT0gZGF0YWJhc2VJ ZCkKQEAgLTM3OTksNyArMzgwOCw3IEBAIFRlcm1pbmF0ZU90aGVyREJCYWNrZW5kcyhPaWQg ZGF0YWJhc2VJZCkKIAlmb3IgKGkgPSAwOyBpIDwgcHJvY0FycmF5LT5udW1Qcm9jczsgaSsr KQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpXTsKLQkJUEdQ Uk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9j ID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCWlmIChwcm9jLT5kYXRhYmFzZUlkICE9IGRh dGFiYXNlSWQpCiAJCQljb250aW51ZTsKQEAgLTUyMjcsMyArNTIzNiwxNSBAQCBLbm93bkFz c2lnbmVkWGlkc1Jlc2V0KHZvaWQpCiAKIAlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2sp OwogfQorCitzdGF0aWMgdm9pZAorQXNzZXJ0Q2hlY2tBbGxQcm9jcyh2b2lkKQoreworCVBy b2NBcnJheVN0cnVjdCAqYXJyYXlQID0gcHJvY0FycmF5OworCWludAkJbnVtUHJvY3MgPSBh cnJheVAtPm51bVByb2NzOworCisJZm9yIChpbnQgcGd4YWN0b2ZmID0gMDsgcGd4YWN0b2Zm IDwgbnVtUHJvY3M7IHBneGFjdG9mZisrKQorCXsKKwkJQXNzZXJ0KGFsbFByb2NzW2FycmF5 UC0+cGdwcm9jbm9zW3BneGFjdG9mZl1dLT5wZ3hhY3RvZmYgPT0gcGd4YWN0b2ZmKTsKKwl9 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYwppbmRleCA0Y2M3ZjY0NWMzMS4uZDAxZjQ4 Njg3NmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYwpAQCAtMjg3Niw3ICsyODc2LDcg QEAgRmFzdFBhdGhUcmFuc2ZlclJlbGF0aW9uTG9ja3MoTG9ja01ldGhvZCBsb2NrTWV0aG9k VGFibGUsIGNvbnN0IExPQ0tUQUcgKmxvY2t0YWcKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwg UHJvY0dsb2JhbC0+YWxsUHJvY0NvdW50OyBpKyspCiAJewotCQlQR1BST0MJICAgKnByb2Mg PSAmUHJvY0dsb2JhbC0+YWxsUHJvY3NbaV07CisJCVBHUFJPQwkgICAqcHJvYyA9IFByb2NH bG9iYWwtPmFsbFByb2NzW2ldOwogCQl1aW50MzIJCWo7CiAKIAkJTFdMb2NrQWNxdWlyZSgm cHJvYy0+ZnBJbmZvTG9jaywgTFdfRVhDTFVTSVZFKTsKQEAgLTMxMzUsNyArMzEzNSw3IEBA IEdldExvY2tDb25mbGljdHMoY29uc3QgTE9DS1RBRyAqbG9ja3RhZywgTE9DS01PREUgbG9j a21vZGUsIGludCAqY291bnRwKQogCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IFByb2NHbG9i YWwtPmFsbFByb2NDb3VudDsgaSsrKQogCQl7Ci0JCQlQR1BST0MJICAgKnByb2MgPSAmUHJv Y0dsb2JhbC0+YWxsUHJvY3NbaV07CisJCQlQR1BST0MJICAgKnByb2MgPSBQcm9jR2xvYmFs LT5hbGxQcm9jc1tpXTsKIAkJCXVpbnQzMgkJajsKIAogCQkJLyogQSBiYWNrZW5kIG5ldmVy IGJsb2NrcyBpdHNlbGYgKi8KQEAgLTM4MjIsNyArMzgyMiw3IEBAIEdldExvY2tTdGF0dXNE YXRhKHZvaWQpCiAJICovCiAJZm9yIChpID0gMDsgaSA8IFByb2NHbG9iYWwtPmFsbFByb2ND b3VudDsgKytpKQogCXsKLQkJUEdQUk9DCSAgICpwcm9jID0gJlByb2NHbG9iYWwtPmFsbFBy b2NzW2ldOworCQlQR1BST0MJICAgKnByb2MgPSBQcm9jR2xvYmFsLT5hbGxQcm9jc1tpXTsK IAogCQkvKiBTa2lwIGJhY2tlbmRzIHdpdGggcGlkPTAsIGFzIHRoZXkgZG9uJ3QgaG9sZCBm YXN0LXBhdGggbG9ja3MgKi8KIAkJaWYgKHByb2MtPnBpZCA9PSAwKQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcm9jLmMKaW5kZXggMTUwNGZhZmU2ZDguLjBhMGNlOThiNzI1IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTI5LDIyICsyOSwzMyBAQAogICovCiAjaW5jbHVkZSAi cG9zdGdyZXMuaCIKIAorI2lmZGVmIFVTRV9MSUJOVU1BCisjaW5jbHVkZSA8c2NoZWQuaD4K KyNlbmRpZgorCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAj aW5jbHVkZSA8c3lzL3RpbWUuaD4KIAorI2lmZGVmIFVTRV9MSUJOVU1BCisjaW5jbHVkZSA8 bnVtYS5oPgorI2luY2x1ZGUgPG51bWFpZi5oPgorI2VuZGlmCisKICNpbmNsdWRlICJhY2Nl c3MvdHJhbnNhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUg ImFjY2Vzcy94bG9ndXRpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3dhaXQuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJw b3J0L3BnX251bWEuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9zbG90c3luYy5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L3N5bmNyZXAuaCIKICNpbmNsdWRlICJzdG9yYWdlL2NvbmRpdGlvbl92YXJpYWJsZS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCisj aW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWdu YWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3By b2NhcnJheS5oIgpAQCAtNzcsOCArODgsOCBAQCBOT05fRVhFQ19TVEFUSUMgc2xvY2tfdCAq UHJvY1N0cnVjdExvY2sgPSBOVUxMOwogCiAvKiBQb2ludGVycyB0byBzaGFyZWQtbWVtb3J5 IHN0cnVjdHVyZXMgKi8KIFBST0NfSERSICAgKlByb2NHbG9iYWwgPSBOVUxMOwotTk9OX0VY RUNfU1RBVElDIFBHUFJPQyAqQXV4aWxpYXJ5UHJvY3MgPSBOVUxMOwotUEdQUk9DCSAgICpQ cmVwYXJlZFhhY3RQcm9jcyA9IE5VTEw7CitOT05fRVhFQ19TVEFUSUMgUEdQUk9DICoqQXV4 aWxpYXJ5UHJvY3MgPSBOVUxMOworUEdQUk9DCSAgICoqUHJlcGFyZWRYYWN0UHJvY3MgPSBO VUxMOwogCiBzdGF0aWMgRGVhZExvY2tTdGF0ZSBkZWFkbG9ja19zdGF0ZSA9IERTX05PVF9Z RVRfQ0hFQ0tFRDsKIApAQCAtOTEsNiArMTAyLDI5IEBAIHN0YXRpYyB2b2lkIEF1eGlsaWFy eVByb2NLaWxsKGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgQ2hlY2tEZWFk TG9jayh2b2lkKTsKIAogCisvKiBudW1iZXIgb2YgTlVNQSBub2RlcyAoYXMgcmV0dXJuZWQg YnkgbnVtYV9udW1fY29uZmlndXJlZF9ub2RlcykgKi8KK3N0YXRpYyBpbnQJbnVtYV9ub2Rl cyA9IC0xOwkvKiBudW1iZXIgb2Ygbm9kZXMgd2hlbiBzaXppbmcgKi8KK3N0YXRpYyBTaXpl IG51bWFfcGFnZV9zaXplID0gMDsgLyogcGFnZSB1c2VkIHRvIHNpemUgcGFydGl0aW9ucyAq Lworc3RhdGljIGJvb2wgbnVtYV9jYW5fcGFydGl0aW9uID0gZmFsc2U7IC8qIGNhbiBtYXAg dG8gTlVNQSBub2Rlcz8gKi8KK3N0YXRpYyBpbnQJbnVtYV9wcm9jc19wZXJfbm9kZSA9IC0x OwkvKiBwZ3Byb2NzIHBlciBub2RlICovCisKK3N0YXRpYyB2b2lkIHBncHJvY19wYXJ0aXRp b25zX3ByZXBhcmUodm9pZCk7CitzdGF0aWMgY2hhciAqcGdwcm9jX3BhcnRpdGlvbl9pbml0 KGNoYXIgKnB0ciwgaW50IG51bV9wcm9jcywKKwkJCQkJCQkJICAgaW50IGFsbHByb2NzX2lu ZGV4LCBpbnQgbm9kZSk7CitzdGF0aWMgY2hhciAqZmFzdHBhdGhfcGFydGl0aW9uX2luaXQo Y2hhciAqcHRyLCBpbnQgbnVtX3Byb2NzLAorCQkJCQkJCQkJIGludCBhbGxwcm9jc19pbmRl eCwgaW50IG5vZGUsCisJCQkJCQkJCQkgU2l6ZSBmcExvY2tCaXRzU2l6ZSwgU2l6ZSBmcFJl bElkU2l6ZSk7CisKK3R5cGVkZWYgc3RydWN0IFBHUHJvY1BhcnRpdGlvbgoreworCWludAkJ CW51bV9wcm9jczsKKwlpbnQJCQludW1hX25vZGU7CisJdm9pZAkgICAqcGdwcm9jX3B0cjsK Kwl2b2lkCSAgICpmYXN0cGF0aF9wdHI7Cit9IFBHUHJvY1BhcnRpdGlvbjsKKworc3RhdGlj IFBHUHJvY1BhcnRpdGlvbiAqcGFydGl0aW9ucyA9IE5VTEw7CisKIC8qCiAgKiBSZXBvcnQg c2hhcmVkLW1lbW9yeSBzcGFjZSBuZWVkZWQgYnkgUEdQUk9DLgogICovCkBAIC0xMDEsMTEg KzEzNSw0MSBAQCBQR1Byb2NTaG1lbVNpemUodm9pZCkKIAlTaXplCQlUb3RhbFByb2NzID0K IAkJYWRkX3NpemUoTWF4QmFja2VuZHMsIGFkZF9zaXplKE5VTV9BVVhJTElBUllfUFJPQ1Ms IG1heF9wcmVwYXJlZF94YWN0cykpOwogCisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIENBQ0hF TElORUFMSUdOKG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZihQR1BST0MgKikpKSk7CiAJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZihQR1BS T0MpKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNp emVvZigqUHJvY0dsb2JhbC0+eGlkcykpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVs X3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMpKSk7 CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigq UHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MpKSk7CiAKKwkvKgorCSAqIFRvIHN1cHBvcnQgTlVN QSBwYXJ0aXRpb25pbmcsIHRoZSBQR1BST0MgYXJyYXkgd2lsbCBiZSBkaXZpZGVkIGludG8K KwkgKiBtdWx0aXBsZSBjaHVua3MgLSBvbmUgcGVyIE5VTUEgbm9kZSwgYW5kIG9uZSBleHRy YSBmb3IgYXV4aWxpYXJ5LzJQQworCSAqIGVudHJpZXMgKHdoaWNoIGFyZSBub3QgYXNzaWdu ZWQgdG8gYW55IE5VTUEgbm9kZSkuCisJICoKKwkgKiBXZSBjYW4ndCBzaW1wbHkgbWFwIHBh Z2VzIG9mIGEgc2luZ2xlIGNvbnRpbnVvdXMgYXJyYXksIGJlY2F1c2UgdGhlCisJICogUEdQ Uk9DIGVudHJpZXMgYXJlIHZlcnkgc21hbGwgYW5kIHRvbyBtYW55IG9mIHRoZW0gd291bGQg Zml0IG9uIGEKKwkgKiBzaW5nbGUgcGFnZSAoYXQgbGVhc3Qgd2l0aCBodWdlIHBhZ2VzKS4g RmFyIG1vcmUgdGhhbiByZWFzb25hYmxlIHZhbHVlcworCSAqIG9mIG1heF9jb25uZWN0aW9u cy4gU28gaW5zdGVhZCB3ZSBjdXQgdGhlIGFycmF5IGludG8gc2VwYXJhdGUgcGllY2VzCisJ ICogZm9yIGVhY2ggbm9kZS4KKwkgKgorCSAqIEVhY2ggcGllY2UgbWF5IG5lZWQgdXAgdG8g b25lIG1lbW9yeSBwYWdlIG9mIHBhZGRpbmcsIHRvIG1ha2UgaXQKKwkgKiBhbGlnbmVkIHdp dGggbWVtb3J5IHBhZ2UgKGZvciBOVU1BKSwgU28gd2UganVzdCBhZGQgYSBwYWdlIC0gaXQn cyBhIGJpdAorCSAqIHdhc3RlZnVsLCBidXQgc2hvdWxkIG5vdCBtYXR0ZXIgbXVjaCAtIE5V TUEgaXMgbWVhbnQgZm9yIGxhcmdlIGJveGVzLAorCSAqIHNvIGEgY291cGxlIHBhZ2VzIGlz IG5lZ2xpZ2libGUuCisJICoKKwkgKiBXZSBvbmx5IGRvIHRoaXMgd2l0aCBOVU1BIHBhcnRp dGlvbmluZy4gV2l0aCB0aGUgR1VDIGRpc2FibGVkLCBvciB3aGVuCisJICogd2UgZmluZCB3 ZSBjYW4ndCBkbyB0aGF0IGZvciBzb21lIHJlYXNvbiwgd2UganVzdCBhbGxvY2F0ZSB0aGUg UEdQUk9DCisJICogYXJyYXkgYXMgYSBzaW5nbGUgY2h1bmsuIFRoaXMgaXMgZGV0ZXJtaW5l ZCBieSB0aGUgZWFybGllciBjYWxsIHRvCisJICogcGdwcm9jX3BhcnRpdGlvbnNfcHJlcGFy ZSgpLgorCSAqCisJICogWFhYIEl0IG1pZ2h0IGJlIG1vcmUgcGFpbmZ1bCB3aXRoIHZlcnkg bGFyZ2UgaHVnZSBwYWdlcyAoZS5nLiAxR0IpLgorCSAqLworCWlmICgoKG51bWFfZmxhZ3Mg JiBOVU1BX1BST0NTKSAhPSAwKSAmJiBudW1hX2Nhbl9wYXJ0aXRpb24pCisJeworCQlBc3Nl cnQobnVtYV9ub2RlcyA+IDApOworCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUo KG51bWFfbm9kZXMgKyAxKSwgbnVtYV9wYWdlX3NpemUpKTsKKwl9CisKIAlyZXR1cm4gc2l6 ZTsKIH0KIApAQCAtMTMwLDYgKzE5NCw2MCBAQCBGYXN0UGF0aExvY2tTaG1lbVNpemUodm9p ZCkKIAogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCAoZnBM b2NrQml0c1NpemUgKyBmcFJlbElkU2l6ZSkpKTsKIAorCS8qCisJICogV2hlbiBhcHBseWlu ZyBOVU1BIHRvIHRoZSBmYXN0LXBhdGggbG9ja3MsIHdlIGZvbGxvdyB0aGUgc2FtZSBsb2dp YyBhcworCSAqIGZvciBQR1BST0MgZW50cmllcy4gU2VlIHRoZSBjb21tZW50cyBpbiBQR1By b2NTaG1lbVNpemUoKS4KKwkgKgorCSAqIElmIFBHUFJPQyBwYXJ0aXRpb25pbmcgaXMgZW5h YmxlZCwgYW5kIHdlIGRlY2lkZWQgaXQncyBwb3NzaWJsZSwgd2UKKwkgKiBuZWVkIHRvIGFk ZCBvbmUgbWVtb3J5IHBhZ2UgcGVyIE5VTUEgbm9kZSAoYW5kIG9uZSBmb3IgYXV4aWxpYXJ5 LzJQQworCSAqIHByb2Nlc3NlcykgdG8gYWxsb3cgcHJvcGVyIGFsaWdubWVudC4KKwkgKgor CSAqIFhYWCBUaGlzIGlzIGEgYSBiaXQgd2FzdGVmdWwsIGJlY2F1c2UgaXQgbWlnaHQgYWN0 dWFsbHkgYWRkIHBhZ2VzIGV2ZW4KKwkgKiB3aGVuIG5vdCBzdHJpY3RseSBuZWVkZWQgKGlm IGl0J3MgYWxyZWFkeSBhbGlnbmVkKS4gQW5kIHdlIGFsd2F5cworCSAqIGFzc3VtZSB3ZSds bCBhZGQgYSB3aG9sZSBwYWdlLCBldmVuIGlmIHRoZSBhbGlnbm1lbnQgbmVlZHMgb25seSBs ZXNzCisJICogbWVtb3J5LgorCSAqLworCWlmICgoKG51bWFfZmxhZ3MgJiBOVU1BX1BST0NT KSAhPSAwKSAmJiBudW1hX2Nhbl9wYXJ0aXRpb24pCisJeworCQlBc3NlcnQobnVtYV9ub2Rl cyA+IDApOworCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoKG51bWFfbm9kZXMg KyAxKSwgbnVtYV9wYWdlX3NpemUpKTsKKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3Rh dGljIFNpemUKK1BHUHJvY1BhcnRpdGlvbnNTaG1lbVNpemUodm9pZCkKK3sKKwlTaXplCQlz aXplID0gMDsKKworCS8qCisJICogSWYgUEdQUk9DIHBhcnRpdGlvbmluZyBpcyBlbmFibGVk LCBhbmQgd2UgZGVjaWRlZCBpdCdzIHBvc3NpYmxlLCB3ZQorCSAqIG5lZWQgdG8gYWRkIG9u ZSBtZW1vcnkgcGFnZSBwZXIgTlVNQSBub2RlIChhbmQgb25lIGZvciBhdXhpbGlhcnkvMlBD CisJICogcHJvY2Vzc2VzKSB0byBhbGxvdyBwcm9wZXIgYWxpZ25tZW50LgorCSAqCisJICog WFhYIFRoaXMgaXMgYSBhIGJpdCB3YXN0ZWZ1bCwgYmVjYXVzZSBpdCBtaWdodCBhY3R1YWxs eSBhZGQgcGFnZXMgZXZlbgorCSAqIHdoZW4gbm90IHN0cmljdGx5IG5lZWRlZCAoaWYgaXQn cyBhbHJlYWR5IGFsaWduZWQpLiBBbmQgd2UgYWx3YXlzCisJICogYXNzdW1lIHdlJ2xsIGFk ZCBhIHdob2xlIHBhZ2UsIGV2ZW4gaWYgdGhlIGFsaWdubWVudCBuZWVkcyBvbmx5IGxlc3MK KwkgKiBtZW1vcnkuCisJICovCisJaWYgKCgobnVtYV9mbGFncyAmIE5VTUFfUFJPQ1MpICE9 IDApICYmIG51bWFfY2FuX3BhcnRpdGlvbikKKwl7CisJCUFzc2VydChudW1hX25vZGVzID4g MCk7CisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZSgobnVtYV9ub2RlcyArIDEp LCBudW1hX3BhZ2Vfc2l6ZSkpOworCisJCS8qCisJCSAqIEFsc28gYWNjb3VudCBmb3IgYSBz bWFsbCByZWdpc3RyeSBvZiBwYXJ0aXRpb25zLCBhIHNpbXBsZSBhcnJheSBvZgorCQkgKiBw YXJ0aXRpb25zIGF0IHRoZSBiZWdpbm5pbmcuCisJCSAqLworCQlzaXplID0gYWRkX3NpemUo c2l6ZSwgbXVsX3NpemUoKG51bWFfbm9kZXMgKyAxKSwgc2l6ZW9mKFBHUHJvY1BhcnRpdGlv bikpKTsKKwl9CisJZWxzZQorCXsKKwkJLyogb3RoZXJ3aXNlIGFkZCBvbmx5IGEgdGlueSBy ZWdpc3RyeSwgd2l0aCBhIHNpbmdsZSBwYXJ0aXRpb24gKi8KKwkJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIHNpemVvZihQR1Byb2NQYXJ0aXRpb24pKTsKKwl9CisKIAlyZXR1cm4gc2l6ZTsK IH0KIApAQCAtMTQxLDYgKzI1OSw5IEBAIFByb2NHbG9iYWxTaG1lbVNpemUodm9pZCkKIHsK IAlTaXplCQlzaXplID0gMDsKIAorCS8qIGNhbGN1bGF0ZSBwYXJ0aXRpb24gaW5mbyBmb3Ig cGdwcm9jIGVudHJpZXMgZXRjICovCisJcGdwcm9jX3BhcnRpdGlvbnNfcHJlcGFyZSgpOwor CiAJLyogUHJvY0dsb2JhbCAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBzaXplb2YoUFJP Q19IRFIpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9mKHNsb2NrX3QpKTsKQEAg LTE0OSw2ICsyNzAsOCBAQCBQcm9jR2xvYmFsU2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFBHUHJvY1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6 ZSwgRmFzdFBhdGhMb2NrU2htZW1TaXplKCkpOwogCisJc2l6ZSA9IGFkZF9zaXplKHNpemUs IFBHUHJvY1BhcnRpdGlvbnNTaG1lbVNpemUoKSk7CisKIAlyZXR1cm4gc2l6ZTsKIH0KIApA QCAtMTkzLDcgKzMxNiw3IEBAIFByb2NHbG9iYWxTZW1hcyh2b2lkKQogdm9pZAogSW5pdFBy b2NHbG9iYWwodm9pZCkKIHsKLQlQR1BST0MJICAgKnByb2NzOworCVBHUFJPQwkgICoqcHJv Y3M7CiAJaW50CQkJaSwKIAkJCQlqOwogCWJvb2wJCWZvdW5kOwpAQCAtMjEyLDYgKzMzNSw5 IEBAIEluaXRQcm9jR2xvYmFsKHZvaWQpCiAJCVNobWVtSW5pdFN0cnVjdCgiUHJvYyBIZWFk ZXIiLCBzaXplb2YoUFJPQ19IRFIpLCAmZm91bmQpOwogCUFzc2VydCghZm91bmQpOwogCisJ LyogWFhYIGNhbGwgYWdhaW4sIEVYRUNfQkFDS0VORCBtYXkgbm90IHNlZSB0aGUgYWxyZWFk eSBjb21wdXRlZCB2YWx1ZSAqLworCXBncHJvY19wYXJ0aXRpb25zX3ByZXBhcmUoKTsKKwog CS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzLgogCSAqLwpAQCAtMjI2 LDYgKzM1MiwxNSBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCXBnX2F0b21pY19pbml0X3Uz MigmUHJvY0dsb2JhbC0+cHJvY0FycmF5R3JvdXBGaXJzdCwgSU5WQUxJRF9QUk9DX05VTUJF Uik7CiAJcGdfYXRvbWljX2luaXRfdTMyKCZQcm9jR2xvYmFsLT5jbG9nR3JvdXBGaXJzdCwg SU5WQUxJRF9QUk9DX05VTUJFUik7CiAKKwkvKiBQR1BST0MgcGFydGl0aW9uIHJlZ2lzdHJ5 ICovCisJcmVxdWVzdFNpemUgPSBQR1Byb2NQYXJ0aXRpb25zU2htZW1TaXplKCk7CisKKwlw dHIgPSBTaG1lbUluaXRTdHJ1Y3QoIlBHUFJPQyBwYXJ0aXRpb25zIiwKKwkJCQkJCSAgcmVx dWVzdFNpemUsCisJCQkJCQkgICZmb3VuZCk7CisKKwlwYXJ0aXRpb25zID0gKFBHUHJvY1Bh cnRpdGlvbiAqKSBwdHI7CisKIAkvKgogCSAqIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhbGwg dGhlIFBHUFJPQyBzdHJ1Y3R1cmVzIHdlJ2xsIG5lZWQuICBUaGVyZSBhcmUKIAkgKiBzaXgg c2VwYXJhdGUgY29uc3VtZXJzOiAoMSkgbm9ybWFsIGJhY2tlbmRzLCAoMikgYXV0b3ZhY3V1 bSB3b3JrZXJzIGFuZApAQCAtMjQxLDIxICszNzYsMTEwIEBAIEluaXRQcm9jR2xvYmFsKHZv aWQpCiAJCQkJCQkgIHJlcXVlc3RTaXplLAogCQkJCQkJICAmZm91bmQpOwogCi0JTWVtU2V0 KHB0ciwgMCwgcmVxdWVzdFNpemUpOwotCi0JcHJvY3MgPSAoUEdQUk9DICopIHB0cjsKLQlw dHIgPSAoY2hhciAqKSBwdHIgKyBUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJPQyk7CisJLyog YWxscHJvY3MgKGFycmF5IG9mIHBvaW50ZXJzIHRvIFBHUFJPQyBlbnRyaWVzKSAqLworCXBy b2NzID0gKFBHUFJPQyAqKikgcHRyOworCXB0ciA9IChjaGFyICopIHB0ciArIENBQ0hFTElO RUFMSUdOKFRvdGFsUHJvY3MgKiBzaXplb2YoUEdQUk9DICopKTsKIAogCVByb2NHbG9iYWwt PmFsbFByb2NzID0gcHJvY3M7CiAJLyogWFhYIGFsbFByb2NDb3VudCBpc24ndCByZWFsbHkg YWxsIG9mIHRoZW07IGl0IGV4Y2x1ZGVzIHByZXBhcmVkIHhhY3RzICovCiAJUHJvY0dsb2Jh bC0+YWxsUHJvY0NvdW50ID0gTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTOwog CisJLyoKKwkgKiBJZiBOVU1BIHBhcnRpdGlvbmluZyBpcyBlbmFibGVkLCBhbmQgd2UgZGVj aWRlZCB3ZSBhY3R1YWxseSBjYW4gZG8gdGhlCisJICogcGFydGl0aW9uaW5nLCBhbGxvY2F0 ZSB0aGUgY2h1bmtzLgorCSAqCisJICogT3RoZXJ3aXNlIHdlJ2xsIGFsbG9jYXRlIGEgc2lu Z2xlIGFycmF5IGZvciBldmVyeXRoaW5nLiBJdCdzIG5vdCBxdWl0ZQorCSAqIHdoYXQgd2Ug ZGlkIHdpdGhvdXQgTlVNQSwgYmVjYXVzZSB0aGVyZSdzIGFuIGV4dHJhIGxldmVsIG9mCisJ ICogaW5kaXJlY3Rpb24sIGJ1dCBpdCdzIHRoZSBiZXN0IHdlIGNhbiBkby4KKwkgKi8KKwlp ZiAoKChudW1hX2ZsYWdzICYgTlVNQV9QUk9DUykgIT0gMCkgJiYgbnVtYV9jYW5fcGFydGl0 aW9uKQorCXsKKwkJaW50CQkJbm9kZV9wcm9jczsKKwkJaW50CQkJdG90YWxfcHJvY3MgPSAw OworCisJCUFzc2VydChudW1hX3Byb2NzX3Blcl9ub2RlID4gMCk7CisJCUFzc2VydChudW1h X25vZGVzID4gMCk7CisKKwkJLyogbWFrZSBzdXJlIHRvIGFsaWduIHRoZSBQR1BST0MgYXJy YXkgdG8gbWVtb3J5IHBhZ2UgKi8KKwkJcHRyID0gKGNoYXIgKikgVFlQRUFMSUdOKG51bWFf cGFnZV9zaXplLCBwdHIpOworCisJCS8qCisJCSAqIE5vdyBpbml0aWFsaXplIHRoZSBQR1BS T0MgcGFydGl0aW9uIHJlZ2lzdHJ5IHdpdGggb25lIHBhcnRpdGlvbgorCQkgKiBwZXIgTlVN QSBub2RlIChhbmQgdGhlbiBvbmUgZXh0cmEgcGFydGl0aW9uIGZvciBhdXhpbGlhcnkgcHJv Y3MpLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IG51bWFfbm9kZXM7IGkrKykKKwkJewor CQkJLyogdGhlIGxhc3QgTlVNQSBub2RlIG1heSBnZXQgZmV3ZXIgUEdQUk9DIGVudHJpZXMs IGJ1dCBtZWggKi8KKwkJCW5vZGVfcHJvY3MgPSBNaW4obnVtYV9wcm9jc19wZXJfbm9kZSwg TWF4QmFja2VuZHMgLSB0b3RhbF9wcm9jcyk7CisKKwkJCS8qIGZpbGwgaW4gdGhlIHBhcnRp dGlvbiBpbmZvICovCisJCQlwYXJ0aXRpb25zW2ldLm51bV9wcm9jcyA9IG5vZGVfcHJvY3M7 CisJCQlwYXJ0aXRpb25zW2ldLm51bWFfbm9kZSA9IGk7CisJCQlwYXJ0aXRpb25zW2ldLnBn cHJvY19wdHIgPSBwdHI7CisKKwkJCXB0ciA9IHBncHJvY19wYXJ0aXRpb25faW5pdChwdHIs IG5vZGVfcHJvY3MsIHRvdGFsX3Byb2NzLCBpKTsKKworCQkJLyogc2hvdWxkIGhhdmUgYmVl biBhbGlnbmVkICovCisJCQlBc3NlcnQocHRyID09IChjaGFyICopIFRZUEVBTElHTihudW1h X3BhZ2Vfc2l6ZSwgcHRyKSk7CisKKwkJCXRvdGFsX3Byb2NzICs9IG5vZGVfcHJvY3M7CisK KwkJCS8qIGRvbid0IHVuZGVyZmxvdy9vdmVyZmxvdyB0aGUgYWxsb2NhdGlvbiAqLworCQkJ QXNzZXJ0KChwdHIgPiAoY2hhciAqKSBwcm9jcykgJiYgKHB0ciA8PSAoY2hhciAqKSBwcm9j cyArIHJlcXVlc3RTaXplKSk7CisJCX0KKworCQlBc3NlcnQodG90YWxfcHJvY3MgPT0gTWF4 QmFja2VuZHMpOworCisJCS8qCisJCSAqIEFsc28gYnVpbGQgUEdQUk9DIGVudHJpZXMgZm9y IGF1eGlsaWFyeSBwcm9jcyAvIHByZXBhcmVkIHhhY3RzICh3ZQorCQkgKiBob3dldmVyIGRv bid0IGFzc2lnbiB0aG9zZSB0byBhbnkgTlVNQSBub2RlKS4KKwkJICovCisJCW5vZGVfcHJv Y3MgPSAoTlVNX0FVWElMSUFSWV9QUk9DUyArIG1heF9wcmVwYXJlZF94YWN0cyk7CisKKwkJ LyogZmlsbCBpbiB0aGUgcGFydGl0aW9uIGluZm8gKi8KKwkJcGFydGl0aW9uc1tudW1hX25v ZGVzXS5udW1fcHJvY3MgPSBub2RlX3Byb2NzOworCQlwYXJ0aXRpb25zW251bWFfbm9kZXNd Lm51bWFfbm9kZSA9IC0xOworCQlwYXJ0aXRpb25zW251bWFfbm9kZXNdLnBncHJvY19wdHIg PSBwdHI7CisKKwkJcHRyID0gcGdwcm9jX3BhcnRpdGlvbl9pbml0KHB0ciwgbm9kZV9wcm9j cywgdG90YWxfcHJvY3MsIC0xKTsKKworCQl0b3RhbF9wcm9jcyArPSBub2RlX3Byb2NzOwor CisJCS8qIGRvbid0IG92ZXJmbG93IHRoZSBhbGxvY2F0aW9uICovCisJCUFzc2VydCgocHRy ID4gKGNoYXIgKikgcHJvY3MpICYmIChwdHIgPD0gKGNoYXIgKikgcHJvY3MgKyByZXF1ZXN0 U2l6ZSkpOworCisJCUFzc2VydCh0b3RhbF9wcm9jcyA9IFRvdGFsUHJvY3MpOworCX0KKwll bHNlCisJeworCQkvKiBqdXN0IHRyZWF0IGV2ZXJ5dGhpbmcgYXMgYSBzaW5nbGUgYXJyYXks IHdpdGggbm8gYWxpZ25tZW50ICovCisJCXB0ciA9IHBncHJvY19wYXJ0aXRpb25faW5pdChw dHIsIFRvdGFsUHJvY3MsIDAsIC0xKTsKKworCQkvKiBmaWxsIGluIHRoZSBwYXJ0aXRpb24g aW5mbyAqLworCQlwYXJ0aXRpb25zWzBdLm51bV9wcm9jcyA9IFRvdGFsUHJvY3M7CisJCXBh cnRpdGlvbnNbMF0ubnVtYV9ub2RlID0gLTE7CisJCXBhcnRpdGlvbnNbMF0ucGdwcm9jX3B0 ciA9IHB0cjsKKworCQkvKiBkb24ndCBvdmVyZmxvdyB0aGUgYWxsb2NhdGlvbiAqLworCQlB c3NlcnQoKHB0ciA+IChjaGFyICopIHByb2NzKSAmJiAocHRyIDw9IChjaGFyICopIHByb2Nz ICsgcmVxdWVzdFNpemUpKTsKKwl9CisKKwkvKgorCSAqIERvbid0IG1lbXNldCB0aGUgbWVt b3J5IGJlZm9yZSBsb2NhdGluZyBpdCB0byBOVU1BIG5vZGVzICh3aGljaCByZXF1aXJlcwor CSAqIHRoZSBwYWdlcyB0byBiZSBhbGxvY2F0ZWQgYnV0IG5vdCB5ZXQgZmF1bHRlZCBpbiBt ZW1vcnkpLgorCSAqLworCU1lbVNldChwdHIsIDAsIHJlcXVlc3RTaXplKTsKKwogCS8qCiAJ ICogQWxsb2NhdGUgYXJyYXlzIG1pcnJvcmluZyBQR1BST0MgZmllbGRzIGluIGEgZGVuc2Ug bWFubmVyLiBTZWUKIAkgKiBQUk9DX0hEUi4KIAkgKgogCSAqIFhYWDogSXQgbWlnaHQgbWFr ZSBzZW5zZSB0byBpbmNyZWFzZSBwYWRkaW5nIGZvciB0aGVzZSBhcnJheXMsIGdpdmVuCiAJ ICogaG93IGhvdGx5IHRoZXkgYXJlIGFjY2Vzc2VkLgorCSAqCisJICogWFhYIFdvdWxkIGl0 IG1ha2Ugc2Vuc2UgdG8gTlVNQS1wYXJ0aXRpb24gdGhlc2UgY2h1bmtzIHRvbywgc29tZWhv dz8KKwkgKiBCdXQgdGhvc2UgYXJyYXlzIGFyZSB0aW55LCBmaXQgaW50byBhIHNpbmdsZSBt ZW1vcnkgcGFnZSwgc28gd291bGQgbmVlZAorCSAqIHRvIGJlIG1hZGUgbW9yZSBjb21wbGV4 LiBOb3Qgc3VyZS4KIAkgKi8KIAlQcm9jR2xvYmFsLT54aWRzID0gKFRyYW5zYWN0aW9uSWQg KikgcHRyOwogCXB0ciA9IChjaGFyICopIHB0ciArIChUb3RhbFByb2NzICogc2l6ZW9mKCpQ cm9jR2xvYmFsLT54aWRzKSk7CkBAIC0yOTEsMjMgKzUxNSw5MSBAQCBJbml0UHJvY0dsb2Jh bCh2b2lkKQogCS8qIFJlc2VydmUgc3BhY2UgZm9yIHNlbWFwaG9yZXMuICovCiAJUEdSZXNl cnZlU2VtYXBob3JlcyhQcm9jR2xvYmFsU2VtYXMoKSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwg VG90YWxQcm9jczsgaSsrKQorCS8qCisJICogTWltaWMgdGhlIGxvZ2ljIHdlIHVzZWQgdG8g cGFydGl0aW9uIFBHUFJPQyBlbnRyaWVzLgorCSAqLworCisJLyoKKwkgKiBJZiBOVU1BIHBh cnRpdGlvbmluZyBpcyBlbmFibGVkLCBhbmQgd2UgZGVjaWRlZCB3ZSBhY3R1YWxseSBjYW4g ZG8gdGhlCisJICogcGFydGl0aW9uaW5nLCBhbGxvY2F0ZSB0aGUgY2h1bmtzLgorCSAqCisJ ICogT3RoZXJ3aXNlIHdlJ2xsIGFsbG9jYXRlIGEgc2luZ2xlIGFycmF5IGZvciBldmVyeXRo aW5nLiBJdCdzIG5vdCBxdWl0ZQorCSAqIHdoYXQgd2UgZGlkIHdpdGhvdXQgTlVNQSwgYmVj YXVzZSB0aGVyZSdzIGFuIGV4dHJhIGxldmVsIG9mCisJICogaW5kaXJlY3Rpb24sIGJ1dCBp dCdzIHRoZSBiZXN0IHdlIGNhbiBkby4KKwkgKi8KKwlpZiAoKChudW1hX2ZsYWdzICYgTlVN QV9QUk9DUykgIT0gMCkgJiYgbnVtYV9jYW5fcGFydGl0aW9uKQogCXsKLQkJUEdQUk9DCSAg ICpwcm9jID0gJnByb2NzW2ldOworCQlpbnQJCQlub2RlX3Byb2NzOworCQlpbnQJCQl0b3Rh bF9wcm9jcyA9IDA7CiAKLQkJLyogQ29tbW9uIGluaXRpYWxpemF0aW9uIGZvciBhbGwgUEdQ Uk9DcywgcmVnYXJkbGVzcyBvZiB0eXBlLiAqLworCQlBc3NlcnQobnVtYV9wcm9jc19wZXJf bm9kZSA+IDApOworCisJCS8qIGJ1aWxkIFBHUFJPQyBlbnRyaWVzIGZvciBOVU1BIG5vZGVz ICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1hX25vZGVzOyBpKyspCisJCXsKKwkJCS8qIHRo ZSBsYXN0IE5VTUEgbm9kZSBtYXkgZ2V0IGZld2VyIFBHUFJPQyBlbnRyaWVzLCBidXQgbWVo ICovCisJCQlub2RlX3Byb2NzID0gTWluKG51bWFfcHJvY3NfcGVyX25vZGUsIE1heEJhY2tl bmRzIC0gdG90YWxfcHJvY3MpOworCisJCQkvKiBtYWtlIHN1cmUgdG8gYWxpZ24gdGhlIFBH UFJPQyBhcnJheSB0byBtZW1vcnkgcGFnZSAqLworCQkJZnBQdHIgPSAoY2hhciAqKSBUWVBF QUxJR04obnVtYV9wYWdlX3NpemUsIGZwUHRyKTsKKworCQkJLyogcmVtZW1iZXIgdGhpcyBw b2ludGVyIHRvbyAqLworCQkJcGFydGl0aW9uc1tpXS5mYXN0cGF0aF9wdHIgPSBmcFB0cjsK KwkJCUFzc2VydChub2RlX3Byb2NzID09IHBhcnRpdGlvbnNbaV0ubnVtX3Byb2NzKTsKKwor CQkJZnBQdHIgPSBmYXN0cGF0aF9wYXJ0aXRpb25faW5pdChmcFB0ciwgbm9kZV9wcm9jcywg dG90YWxfcHJvY3MsIGksCisJCQkJCQkJCQkJCWZwTG9ja0JpdHNTaXplLCBmcFJlbElkU2l6 ZSk7CisKKwkJCXRvdGFsX3Byb2NzICs9IG5vZGVfcHJvY3M7CisKKwkJCS8qIGRvbid0IG92 ZXJmbG93IHRoZSBhbGxvY2F0aW9uICovCisJCQlBc3NlcnQoZnBQdHIgPD0gZnBFbmRQdHIp OworCQl9CisKKwkJQXNzZXJ0KHRvdGFsX3Byb2NzID09IE1heEJhY2tlbmRzKTsKIAogCQkv KgotCQkgKiBTZXQgdGhlIGZhc3QtcGF0aCBsb2NrIGFycmF5cywgYW5kIG1vdmUgdGhlIHBv aW50ZXIuIFdlIGludGVybGVhdmUKLQkJICogdGhlIHR3byBhcnJheXMsIHRvIChob3BlZnVs bHkpIGdldCBzb21lIGxvY2FsaXR5IGZvciBlYWNoIGJhY2tlbmQuCisJCSAqIEFsc28gYnVp bGQgUEdQUk9DIGVudHJpZXMgZm9yIGF1eGlsaWFyeSBwcm9jcyAvIHByZXBhcmVkIHhhY3Rz ICh3ZQorCQkgKiBob3dldmVyIGRvbid0IGFzc2lnbiB0aG9zZSB0byBhbnkgTlVNQSBub2Rl KS4KIAkJICovCi0JCXByb2MtPmZwTG9ja0JpdHMgPSAodWludDY0ICopIGZwUHRyOwotCQlm cFB0ciArPSBmcExvY2tCaXRzU2l6ZTsKKwkJbm9kZV9wcm9jcyA9IChOVU1fQVVYSUxJQVJZ X1BST0NTICsgbWF4X3ByZXBhcmVkX3hhY3RzKTsKKworCQkvKiBtYWtlIHN1cmUgdG8gYWxp Z24gdGhlIFBHUFJPQyBhcnJheSB0byBtZW1vcnkgcGFnZSAqLworCQlmcFB0ciA9IChjaGFy ICopIFRZUEVBTElHTihudW1hX3BhZ2Vfc2l6ZSwgZnBQdHIpOworCisJCS8qIHJlbWVtYmVy IHRoaXMgcG9pbnRlciB0b28gKi8KKwkJcGFydGl0aW9uc1tudW1hX25vZGVzXS5mYXN0cGF0 aF9wdHIgPSBmcFB0cjsKKwkJQXNzZXJ0KG5vZGVfcHJvY3MgPT0gcGFydGl0aW9uc1tudW1h X25vZGVzXS5udW1fcHJvY3MpOwogCi0JCXByb2MtPmZwUmVsSWQgPSAoT2lkICopIGZwUHRy OwotCQlmcFB0ciArPSBmcFJlbElkU2l6ZTsKKwkJZnBQdHIgPSBmYXN0cGF0aF9wYXJ0aXRp b25faW5pdChmcFB0ciwgbm9kZV9wcm9jcywgdG90YWxfcHJvY3MsIC0xLAorCQkJCQkJCQkJ CWZwTG9ja0JpdHNTaXplLCBmcFJlbElkU2l6ZSk7CiAKKwkJdG90YWxfcHJvY3MgKz0gbm9k ZV9wcm9jczsKKworCQkvKiBkb24ndCBvdmVyZmxvdyB0aGUgYWxsb2NhdGlvbiAqLworCQlB c3NlcnQoZnBQdHIgPD0gZnBFbmRQdHIpOworCisJCUFzc2VydCh0b3RhbF9wcm9jcyA9IFRv dGFsUHJvY3MpOworCX0KKwllbHNlCisJeworCQkvKiByZW1lbWJlciB0aGlzIHBvaW50ZXIg dG9vICovCisJCXBhcnRpdGlvbnNbMF0uZmFzdHBhdGhfcHRyID0gZnBQdHI7CisJCUFzc2Vy dChUb3RhbFByb2NzID09IHBhcnRpdGlvbnNbMF0ubnVtX3Byb2NzKTsKKworCQkvKiBqdXN0 IHRyZWF0IGV2ZXJ5dGhpbmcgYXMgYSBzaW5nbGUgYXJyYXksIHdpdGggbm8gYWxpZ25tZW50 ICovCisJCWZwUHRyID0gZmFzdHBhdGhfcGFydGl0aW9uX2luaXQoZnBQdHIsIFRvdGFsUHJv Y3MsIDAsIC0xLAorCQkJCQkJCQkJCWZwTG9ja0JpdHNTaXplLCBmcFJlbElkU2l6ZSk7CisK KwkJLyogZG9uJ3Qgb3ZlcmZsb3cgdGhlIGFsbG9jYXRpb24gKi8KIAkJQXNzZXJ0KGZwUHRy IDw9IGZwRW5kUHRyKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVG90YWxQcm9jczsgaSsr KQorCXsKKwkJUEdQUk9DCSAgICpwcm9jID0gcHJvY3NbaV07CisKKwkJQXNzZXJ0KHByb2Mt PnByb2NudW1iZXIgPT0gaSk7CiAKIAkJLyoKIAkJICogU2V0IHVwIHBlci1QR1BST0Mgc2Vt YXBob3JlLCBsYXRjaCwgYW5kIGZwSW5mb0xvY2suICBQcmVwYXJlZCB4YWN0CkBAIC0zNzEs OSArNjYzLDYgQEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAkJcGdfYXRvbWljX2luaXRfdTY0 KCYocHJvYy0+d2FpdFN0YXJ0KSwgMCk7CiAJfQogCi0JLyogU2hvdWxkIGhhdmUgY29uc3Vt ZWQgZXhhY3RseSB0aGUgZXhwZWN0ZWQgYW1vdW50IG9mIGZhc3QtcGF0aCBtZW1vcnkuICov Ci0JQXNzZXJ0KGZwUHRyID09IGZwRW5kUHRyKTsKLQogCS8qCiAJICogU2F2ZSBwb2ludGVy cyB0byB0aGUgYmxvY2tzIG9mIFBHUFJPQyBzdHJ1Y3R1cmVzIHJlc2VydmVkIGZvciBhdXhp bGlhcnkKIAkgKiBwcm9jZXNzZXMgYW5kIHByZXBhcmVkIHRyYW5zYWN0aW9ucy4KQEAgLTQ0 MCw3ICs3MjksNTEgQEAgSW5pdFByb2Nlc3Modm9pZCkKIAogCWlmICghZGxpc3RfaXNfZW1w dHkocHJvY2dsb2JhbGxpc3QpKQogCXsKLQkJTXlQcm9jID0gZGxpc3RfY29udGFpbmVyKFBH UFJPQywgbGlua3MsIGRsaXN0X3BvcF9oZWFkX25vZGUocHJvY2dsb2JhbGxpc3QpKTsKKwkJ LyoKKwkJICogV2l0aCBudW1hIGludGVybGVhdmluZyBvZiBQR1BST0MsIHRyeSB0byBnZXQg YSBQUk9DIGVudHJ5IGZyb20gdGhlCisJCSAqIHJpZ2h0IE5VTUEgbm9kZSAod2hlbiB0aGUg cHJvY2VzcyBzdGFydHMpLgorCQkgKgorCQkgKiBYWFggVGhlIHByb2Nlc3MgbWF5IG1vdmUg dG8gYSBkaWZmZXJlbnQgTlVNQSBub2RlIGxhdGVyLCBidXQKKwkJICogdGhlcmUncyBub3Qg bXVjaCB3ZSBjYW4gZG8gYWJvdXQgdGhhdC4KKwkJICovCisJCWlmICgobnVtYV9mbGFncyAm IE5VTUFfUFJPQ1MpICE9IDApCisJCXsKKwkJCWRsaXN0X211dGFibGVfaXRlciBpdGVyOwor CQkJaW50CQlub2RlOworCisjaWZkZWYgVVNFX0xJQk5VTUEKKwkJCWludAljcHUgPSBzY2hl ZF9nZXRjcHUoKTsKKworCQkJaWYgKGNwdSA8IDApCisJCQkJZWxvZyhFUlJPUiwgImdldGNw dSBmYWlsZWQ6ICVtIik7CisKKwkJCW5vZGUgPSBudW1hX25vZGVfb2ZfY3B1KGNwdSk7Cisj ZWxzZQorCQkJLyogRklYTUUgaXMgZGVmYXVsdGluZyB0byAwIGNvcnJlY3Q/ICovCisJCQlu b2RlID0gMDsKKyNlbmRpZgorCisJCQlNeVByb2MgPSBOVUxMOworCisJCQlkbGlzdF9mb3Jl YWNoX21vZGlmeShpdGVyLCBwcm9jZ2xvYmFsbGlzdCkKKwkJCXsKKwkJCQlQR1BST0MJICAg KnByb2M7CisKKwkJCQlwcm9jID0gZGxpc3RfY29udGFpbmVyKFBHUFJPQywgbGlua3MsIGl0 ZXIuY3VyKTsKKworCQkJCWlmIChwcm9jLT5udW1hX25vZGUgPT0gbm9kZSkKKwkJCQl7CisJ CQkJCU15UHJvYyA9IHByb2M7CisJCQkJCWRsaXN0X2RlbGV0ZShpdGVyLmN1cik7CisJCQkJ CWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIGRpZG4ndCBmaW5kIFBHUFJPQyBm cm9tIHRoZSBjb3JyZWN0IE5VTUEgbm9kZSwgcGljayBhbnkgZnJlZSBvbmUgKi8KKwkJaWYg KE15UHJvYyA9PSBOVUxMKQorCQkJTXlQcm9jID0gZGxpc3RfY29udGFpbmVyKFBHUFJPQywg bGlua3MsIGRsaXN0X3BvcF9oZWFkX25vZGUocHJvY2dsb2JhbGxpc3QpKTsKKwogCQlTcGlu TG9ja1JlbGVhc2UoUHJvY1N0cnVjdExvY2spOwogCX0KIAllbHNlCkBAIC02NTEsNyArOTg0 LDcgQEAgSW5pdEF1eGlsaWFyeVByb2Nlc3Modm9pZCkKIAkgKi8KIAlmb3IgKHByb2N0eXBl ID0gMDsgcHJvY3R5cGUgPCBOVU1fQVVYSUxJQVJZX1BST0NTOyBwcm9jdHlwZSsrKQogCXsK LQkJYXV4cHJvYyA9ICZBdXhpbGlhcnlQcm9jc1twcm9jdHlwZV07CisJCWF1eHByb2MgPSBB dXhpbGlhcnlQcm9jc1twcm9jdHlwZV07CiAJCWlmIChhdXhwcm9jLT5waWQgPT0gMCkKIAkJ CWJyZWFrOwogCX0KQEAgLTEwNTksNyArMTM5Miw3IEBAIEF1eGlsaWFyeVByb2NLaWxsKGlu dCBjb2RlLCBEYXR1bSBhcmcpCiAJaWYgKE15UHJvYy0+cGlkICE9IChpbnQpIGdldHBpZCgp KQogCQllbG9nKFBBTklDLCAiQXV4aWxpYXJ5UHJvY0tpbGwoKSBjYWxsZWQgaW4gY2hpbGQg cHJvY2VzcyIpOwogCi0JYXV4cHJvYyA9ICZBdXhpbGlhcnlQcm9jc1twcm9jdHlwZV07CisJ YXV4cHJvYyA9IEF1eGlsaWFyeVByb2NzW3Byb2N0eXBlXTsKIAogCUFzc2VydChNeVByb2Mg PT0gYXV4cHJvYyk7CiAKQEAgLTExMDgsNyArMTQ0MSw3IEBAIEF1eGlsaWFyeVBpZEdldFBy b2MoaW50IHBpZCkKIAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9BVVhJTElBUllf UFJPQ1M7IGluZGV4KyspCiAJewotCQlQR1BST0MJICAgKnByb2MgPSAmQXV4aWxpYXJ5UHJv Y3NbaW5kZXhdOworCQlQR1BST0MJICAgKnByb2MgPSBBdXhpbGlhcnlQcm9jc1tpbmRleF07 CiAKIAkJaWYgKHByb2MtPnBpZCA9PSBwaWQpCiAJCXsKQEAgLTE5OTgsNyArMjMzMSw3IEBA IFByb2NTZW5kU2lnbmFsKFByb2NOdW1iZXIgcHJvY051bWJlcikKIAlpZiAocHJvY051bWJl ciA8IDAgfHwgcHJvY051bWJlciA+PSBQcm9jR2xvYmFsLT5hbGxQcm9jQ291bnQpCiAJCWVs b2coRVJST1IsICJwcm9jTnVtYmVyIG91dCBvZiByYW5nZSIpOwogCi0JU2V0TGF0Y2goJlBy b2NHbG9iYWwtPmFsbFByb2NzW3Byb2NOdW1iZXJdLnByb2NMYXRjaCk7CisJU2V0TGF0Y2go JlByb2NHbG9iYWwtPmFsbFByb2NzW3Byb2NOdW1iZXJdLT5wcm9jTGF0Y2gpOwogfQogCiAv KgpAQCAtMjA3MywzICsyNDA2LDE3MyBAQCBCZWNvbWVMb2NrR3JvdXBNZW1iZXIoUEdQUk9D ICpsZWFkZXIsIGludCBwaWQpCiAKIAlyZXR1cm4gb2s7CiB9CisKKy8qCisgKiBwZ3Byb2Nf cGFydGl0aW9uc19wcmVwYXJlCisgKgkJQ2FsY3VsYXRlIHBhcmFtZXRlcnMgZm9yIHBhcnRp dGlvbmluZyBidWZmZXJzLgorICoKKyAqIE5VTUEgcGFydGl0aW9uaW5nCisgKgorICogTm93 IGJ1aWxkIHRoZSBhY3R1YWwgUEdQUk9DIGFycmF5cywgb25lICJjaHVuayIgcGVyIE5VTUEg bm9kZSAoYW5kIG9uZQorICogZXh0cmEgZm9yIGF1eGlsaWFyeSBwcm9jZXNzZXMgYW5kIDJQ QyB0cmFuc2FjdGlvbnMsIG5vdCBhc3NvY2lhdGVkIHdpdGgKKyAqIGFueSBwYXJ0aWN1bGFy IG5vZGUpLgorICoKKyAqIEZpcnN0IGRldGVybWluZSBob3cgbWFueSAiYmFja2VuZCIgcHJv Y3MgdG8gYWxsb2NhdGUgcGVyIE5VTUEgbm9kZS4gVGhlCisgKiBjb3VudCBtYXkgbm90IGJl IGV4YWN0bHkgZGl2aXNpYmxlLCBidXQgd2UgbW9zdGx5IGlnbm9yZSB0aGF0LiBUaGUgbGFz dAorICogbm9kZSBtYXkgZ2V0IHNvbWV3aGF0IGZld2VyIFBHUFJPQyBlbnRyaWVzLCBidXQg dGhlIGltYmFsYW5jZSBvdWdodCB0bworICogYmUgcHJldHR5IHNtYWxsIChpZiBNYXhCYWNr ZW5kcyA+PiBudW1hX25vZGVzKS4KKyAqCisgKiBYWFggQSBmYWlyZXIgZGlzdHJpYnV0aW9u IGlzIHBvc3NpYmxlLCBidXQgbm90IHdvcnRoIGl0IGZvciBub3cuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3Byb2NfcGFydGl0aW9uc19wcmVwYXJlKHZvaWQpCit7CisJLyogYmFpbCBvdXQg aWYgYWxyZWFkeSBpbml0aWFsaXplZCAoY2FsY3VsYXRlIG9ubHkgb25jZSkgKi8KKwlpZiAo bnVtYV9ub2RlcyAhPSAtMSkKKwkJcmV0dXJuOworCisJLyogWFhYIG9ubHkgZ2l2ZXMgdXMg dGhlIG51bWJlciwgdGhlIG5vZGVzIG1heSBub3QgYmUgMCwgMSwgMiwgLi4uICovCisjaWZk ZWYgVVNFX0xJQk5VTUEKKwludW1hX25vZGVzID0gbnVtYV9udW1fY29uZmlndXJlZF9ub2Rl cygpOworI2Vsc2UKKwludW1hX25vZGVzID0gMTsKKyNlbmRpZgorCisJLyogWFhYIGNhbiB0 aGlzIGhhcHBlbj8gKi8KKwlpZiAobnVtYV9ub2RlcyA8IDEpCisJCW51bWFfbm9kZXMgPSAx OworCisJLyoKKwkgKiBYWFggQSBiaXQgd2VpcmQuIERvIHdlIG5lZWQgdG8gd29ycnkgYWJv dXQgcG9zdG1hc3Rlcj8gQ291bGQgdGhpcyBldmVuCisJICogcnVuIG91dHNpZGUgcG9zdG1h c3Rlcj8gSSBkb24ndCB0aGluayBzby4KKwkgKgorCSAqIFhYWCBBbm90aGVyIGlzc3VlIGlz IHdlIG1heSBnZXQgZGlmZmVyZW50IHZhbHVlcyB0aGFuIHdoZW4gc2l6aW5nIHRoZQorCSAq IHRoZSBtZW1vcnksIGJlY2F1c2UgYXQgdGhhdCBwb2ludCB3ZSBkaWRuJ3Qga25vdyBpZiB3 ZSBnZXQgaHVnZSBwYWdlcywKKwkgKiBzbyB3ZSBhc3N1bWVkIHdlIHdpbGwuIFNob3VsZG4n dCBjYXVzZSBjcmFzaGVzLCBidXQgd2UgbWlnaHQgYWxsb2NhdGUKKwkgKiBzaGFyZWQgbWVt b3J5IGFuZCB0aGVuIG5vdCB1c2Ugc29tZSBvZiBpdCAoYmVjYXVzZSBvZiB0aGUgYWxpZ25t ZW50CisJICogdGhhdCB3ZSBkb24ndCBhY3R1YWxseSBuZWVkKS4gTm90IHN1cmUgYWJvdXQg YmV0dGVyIHdheSwgZ29vZCBmb3Igbm93LgorCSAqLworCS8vIEFzc2VydCghSXNVbmRlclBv c3RtYXN0ZXIpOworCisJbnVtYV9wYWdlX3NpemUgPSBwZ19udW1hX3BhZ2Vfc2l6ZSgpOwor CisJbnVtYV9wcm9jc19wZXJfbm9kZSA9IChNYXhCYWNrZW5kcyArIChudW1hX25vZGVzIC0g MSkpIC8gbnVtYV9ub2RlczsKKworCWVsb2coREVCVUcxLCAiTlVNQTogcGdwcm9jIGJhY2tl bmRzICVkIG51bV9ub2RlcyAlZCBwZXJfbm9kZSAlZCIsCisJCSBNYXhCYWNrZW5kcywgbnVt YV9ub2RlcywgbnVtYV9wcm9jc19wZXJfbm9kZSk7CisKKwlBc3NlcnQobnVtYV9ub2RlcyAq IG51bWFfcHJvY3NfcGVyX25vZGUgPj0gTWF4QmFja2VuZHMpOworCisJLyogc3VjY2VzcyAq LworCW51bWFfY2FuX3BhcnRpdGlvbiA9IHRydWU7Cit9CisKKy8qCisgKgorICovCitzdGF0 aWMgY2hhciAqCitwZ3Byb2NfcGFydGl0aW9uX2luaXQoY2hhciAqcHRyLCBpbnQgbnVtX3By b2NzLCBpbnQgYWxscHJvY3NfaW5kZXgsIGludCBub2RlKQoreworCVBHUFJPQwkgICAqcHJv Y3Nfbm9kZTsKKworCS8qIGFsbG9jYXRlIHRoZSBQR1BST0MgY2h1bmsgZm9yIHRoaXMgbm9k ZSAqLworCXByb2NzX25vZGUgPSAoUEdQUk9DICopIHB0cjsKKworCS8qIHBvaW50ZXIgcmln aHQgYWZ0ZXIgdGhpcyBhcnJheSAqLworCXB0ciA9IChjaGFyICopIHB0ciArIG51bV9wcm9j cyAqIHNpemVvZihQR1BST0MpOworCisJLyoKKwkgKiBpZiBub2RlIHNwZWNpZmllZCwgbW92 ZSB0byBub2RlIC0gZG8gdGhpcyBiZWZvcmUgd2Ugc3RhcnQgdG91Y2hpbmcgdGhlCisJICog bWVtb3J5LCB0byBtYWtlIHN1cmUgaXQncyBub3QgbWFwcGVkIHRvIGFueSBub2RlIHlldAor CSAqLworCWlmIChub2RlICE9IC0xKQorCXsKKwkJLyogYWxpZ24gdGhlIHBvaW50ZXIgdG8g dGhlIG5leHQgcGFnZSAqLworCQlwdHIgPSAoY2hhciAqKSBUWVBFQUxJR04obnVtYV9wYWdl X3NpemUsIHB0cik7CisKKwkJcGdfbnVtYV9tb3ZlX3RvX25vZGUoKGNoYXIgKikgcHJvY3Nf bm9kZSwgcHRyLCBub2RlKTsKKwl9CisKKwllbG9nKERFQlVHMSwgIk5VTUE6IHBncHJvY19w YXJ0aXRpb25faW5pdCBwcm9jcyAlcCBlbmRwdHIgJXAgbnVtX3Byb2NzICVkIG5vZGUgJWQi LAorCQkgcHJvY3Nfbm9kZSwgcHRyLCBudW1fcHJvY3MsIG5vZGUpOworCisJLyogYWRkIHBv aW50ZXJzIHRvIHRoZSBQR1BST0MgZW50cmllcyB0byBhbGxQcm9jcyAqLworCWZvciAoaW50 IGkgPSAwOyBpIDwgbnVtX3Byb2NzOyBpKyspCisJeworCQlwcm9jc19ub2RlW2ldLm51bWFf bm9kZSA9IG5vZGU7CisJCXByb2NzX25vZGVbaV0ucHJvY251bWJlciA9IGFsbHByb2NzX2lu ZGV4OworCisJCVByb2NHbG9iYWwtPmFsbFByb2NzW2FsbHByb2NzX2luZGV4XSA9ICZwcm9j c19ub2RlW2ldOworCisJCWFsbHByb2NzX2luZGV4Kys7CisJfQorCisJcmV0dXJuIHB0cjsK K30KKworc3RhdGljIGNoYXIgKgorZmFzdHBhdGhfcGFydGl0aW9uX2luaXQoY2hhciAqcHRy LCBpbnQgbnVtX3Byb2NzLCBpbnQgYWxscHJvY3NfaW5kZXgsIGludCBub2RlLAorCQkJCQkJ U2l6ZSBmcExvY2tCaXRzU2l6ZSwgU2l6ZSBmcFJlbElkU2l6ZSkKK3sKKwljaGFyCSAgICpl bmRwdHIgPSBwdHIgKyBudW1fcHJvY3MgKiAoZnBMb2NrQml0c1NpemUgKyBmcFJlbElkU2l6 ZSk7CisKKwkvKgorCSAqIGlmIG5vZGUgc3BlY2lmaWVkLCBtb3ZlIHRvIG5vZGUgLSBkbyB0 aGlzIGJlZm9yZSB3ZSBzdGFydCB0b3VjaGluZyB0aGUKKwkgKiBtZW1vcnksIHRvIG1ha2Ug c3VyZSBpdCdzIG5vdCBtYXBwZWQgdG8gYW55IG5vZGUgeWV0CisJICovCisJaWYgKG5vZGUg IT0gLTEpCisJCXBnX251bWFfbW92ZV90b19ub2RlKHB0ciwgZW5kcHRyLCBub2RlKTsKKwor CS8qCisJICogTm93IHBvaW50IHRoZSBQR1BST0MgZW50cmllcyB0byB0aGUgZmFzdC1wYXRo IGFycmF5cywgYW5kIGFsc28gYWR2YW5jZQorCSAqIHRoZSBmcFB0ci4KKwkgKi8KKwlmb3Ig KGludCBpID0gMDsgaSA8IG51bV9wcm9jczsgaSsrKQorCXsKKwkJUEdQUk9DCSAgICpwcm9j ID0gUHJvY0dsb2JhbC0+YWxsUHJvY3NbYWxscHJvY3NfaW5kZXhdOworCisJCS8qIGNyb3Nz LWNoZWNrIHdlIGdvdCB0aGUgZXhwZWN0ZWQgTlVNQSBub2RlICovCisJCUFzc2VydChwcm9j LT5udW1hX25vZGUgPT0gbm9kZSk7CisJCUFzc2VydChwcm9jLT5wcm9jbnVtYmVyID09IGFs bHByb2NzX2luZGV4KTsKKworCQkvKgorCQkgKiBTZXQgdGhlIGZhc3QtcGF0aCBsb2NrIGFy cmF5cywgYW5kIG1vdmUgdGhlIHBvaW50ZXIuIFdlIGludGVybGVhdmUKKwkJICogdGhlIHR3 byBhcnJheXMsIHRvIChob3BlZnVsbHkpIGdldCBzb21lIGxvY2FsaXR5IGZvciBlYWNoIGJh Y2tlbmQuCisJCSAqLworCQlwcm9jLT5mcExvY2tCaXRzID0gKHVpbnQ2NCAqKSBwdHI7CisJ CXB0ciArPSBmcExvY2tCaXRzU2l6ZTsKKworCQlwcm9jLT5mcFJlbElkID0gKE9pZCAqKSBw dHI7CisJCXB0ciArPSBmcFJlbElkU2l6ZTsKKworCQlBc3NlcnQocHRyIDw9IGVuZHB0cik7 CisKKwkJYWxscHJvY3NfaW5kZXgrKzsKKwl9CisKKwlBc3NlcnQocHRyID09IGVuZHB0cik7 CisKKwlyZXR1cm4gZW5kcHRyOworfQorCitpbnQKK1Byb2NQYXJ0aXRpb25Db3VudCh2b2lk KQoreworCWlmICgoKG51bWFfZmxhZ3MgJiBOVU1BX1BST0NTKSAhPSAwKSAmJiBudW1hX2Nh bl9wYXJ0aXRpb24pCisJCXJldHVybiAobnVtYV9ub2RlcyArIDEpOworCisJcmV0dXJuIDE7 Cit9CisKK3ZvaWQKK1Byb2NQYXJ0aXRpb25HZXQoaW50IGlkeCwgaW50ICpub2RlLCBpbnQg Km5wcm9jcywgdm9pZCAqKnByb2NzcHRyLCB2b2lkICoqZnBwdHIpCit7CisJUEdQcm9jUGFy dGl0aW9uICpwYXJ0ID0gJnBhcnRpdGlvbnNbaWR4XTsKKworCUFzc2VydCgoaWR4ID49IDAp ICYmIChpZHggPCBQcm9jUGFydGl0aW9uQ291bnQoKSkpOworCisJKm5wcm9jcyA9IHBhcnQt Pm51bV9wcm9jczsKKwkqcHJvY3NwdHIgPSBwYXJ0LT5wZ3Byb2NfcHRyOworCSpmcHB0ciA9 IHBhcnQtPmZhc3RwYXRoX3B0cjsKKwkqbm9kZSA9IHBhcnQtPm51bWFfbm9kZTsKK30KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BvcnQvcGdfbnVtYS5oIGIvc3JjL2luY2x1ZGUvcG9y dC9wZ19udW1hLmgKaW5kZXggOTczNGFhMzE1ZmYuLmFhNTI0ZjZmN2YzIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9wb3J0L3BnX251bWEuaAorKysgYi9zcmMvaW5jbHVkZS9wb3J0L3Bn X251bWEuaApAQCAtMjMsNiArMjMsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgdm9pZCBwZ19u dW1hX21vdmVfdG9fbm9kZShjaGFyICpzdGFydHB0ciwgY2hhciAqZW5kcHRyLCBpbnQgbgog ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBudW1hX2ZsYWdzOwogCiAjZGVmaW5lCQlOVU1BX0JV RkZFUlMJCTB4MDEKKyNkZWZpbmUJCU5VTUFfUFJPQ1MJCQkweDAyCiAKICNpZmRlZiBVU0Vf TElCTlVNQQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaCBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCmluZGV4IGM2ZjVlYmNlZWZkLi4yMWYyNjE5ZmQ0 MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wcm9jLmgKQEAgLTIwMiw2ICsyMDIsOCBAQCBzdHJ1Y3QgUEdQUk9D CiAJCQkJCQkJCSAqIHZhY3V1bSBtdXN0IG5vdCByZW1vdmUgdHVwbGVzIGRlbGV0ZWQgYnkK IAkJCQkJCQkJICogeGlkID49IHhtaW4gISAqLwogCisJaW50CQkJcHJvY251bWJlcjsJCS8q IGluZGV4IGluIFByb2NHbG9iYWwtPmFsbFByb2NzICovCisKIAlpbnQJCQlwaWQ7CQkJLyog QmFja2VuZCdzIHByb2Nlc3MgSUQ7IDAgaWYgcHJlcGFyZWQgeGFjdCAqLwogCiAJaW50CQkJ cGd4YWN0b2ZmOwkJLyogb2Zmc2V0IGludG8gdmFyaW91cyBQcm9jR2xvYmFsLT5hcnJheXMg d2l0aApAQCAtMzI3LDYgKzMyOSw5IEBAIHN0cnVjdCBQR1BST0MKIAlQR1BST0MJICAgKmxv Y2tHcm91cExlYWRlcjsJLyogbG9jayBncm91cCBsZWFkZXIsIGlmIEknbSBhIG1lbWJlciAq LwogCWRsaXN0X2hlYWQJbG9ja0dyb3VwTWVtYmVyczsJLyogbGlzdCBvZiBtZW1iZXJzLCBp ZiBJJ20gYSBsZWFkZXIgKi8KIAlkbGlzdF9ub2RlCWxvY2tHcm91cExpbms7CS8qIG15IG1l bWJlciBsaW5rLCBpZiBJJ20gYSBtZW1iZXIgKi8KKworCS8qIE5VTUEgbm9kZSAqLworCWlu dAkJCW51bWFfbm9kZTsKIH07CiAKIC8qIE5PVEU6ICJ0eXBlZGVmIHN0cnVjdCBQR1BST0Mg UEdQUk9DIiBhcHBlYXJzIGluIHN0b3JhZ2UvbG9jay5oLiAqLwpAQCAtMzkxLDcgKzM5Niw3 IEBAIGV4dGVybiBQR0RMTElNUE9SVCBQR1BST0MgKk15UHJvYzsKIHR5cGVkZWYgc3RydWN0 IFBST0NfSERSCiB7CiAJLyogQXJyYXkgb2YgUEdQUk9DIHN0cnVjdHVyZXMgKG5vdCBpbmNs dWRpbmcgZHVtbWllcyBmb3IgcHJlcGFyZWQgdHhucykgKi8KLQlQR1BST0MJICAgKmFsbFBy b2NzOworCVBHUFJPQwkgICoqYWxsUHJvY3M7CiAKIAkvKiBBcnJheSBtaXJyb3JpbmcgUEdQ Uk9DLnhpZCBmb3IgZWFjaCBQR1BST0MgY3VycmVudGx5IGluIHRoZSBwcm9jYXJyYXkgKi8K IAlUcmFuc2FjdGlvbklkICp4aWRzOwpAQCAtNDM4LDEzICs0NDMsMTMgQEAgdHlwZWRlZiBz dHJ1Y3QgUFJPQ19IRFIKIAogZXh0ZXJuIFBHRExMSU1QT1JUIFBST0NfSERSICpQcm9jR2xv YmFsOwogCi1leHRlcm4gUEdETExJTVBPUlQgUEdQUk9DICpQcmVwYXJlZFhhY3RQcm9jczsK K2V4dGVybiBQR0RMTElNUE9SVCBQR1BST0MgKipQcmVwYXJlZFhhY3RQcm9jczsKIAogLyoK ICAqIEFjY2Vzc29ycyBmb3IgZ2V0dGluZyBQR1BST0MgZ2l2ZW4gYSBQcm9jTnVtYmVyIGFu ZCB2aWNlIHZlcnNhLgogICovCi0jZGVmaW5lIEdldFBHUHJvY0J5TnVtYmVyKG4pICgmUHJv Y0dsb2JhbC0+YWxsUHJvY3NbKG4pXSkKLSNkZWZpbmUgR2V0TnVtYmVyRnJvbVBHUHJvYyhw cm9jKSAoKHByb2MpIC0gJlByb2NHbG9iYWwtPmFsbFByb2NzWzBdKQorI2RlZmluZSBHZXRQ R1Byb2NCeU51bWJlcihuKSAoUHJvY0dsb2JhbC0+YWxsUHJvY3NbKG4pXSkKKyNkZWZpbmUg R2V0TnVtYmVyRnJvbVBHUHJvYyhwcm9jKSAoKHByb2MpLT5wcm9jbnVtYmVyKQogCiAvKgog ICogV2Ugc2V0IGFzaWRlIHNvbWUgZXh0cmEgUEdQUk9DIHN0cnVjdHVyZXMgZm9yICJzcGVj aWFsIHdvcmtlciIgcHJvY2Vzc2VzLApAQCAtNDgwLDcgKzQ4NSw3IEBAIGV4dGVybiBQR0RM TElNUE9SVCBib29sIGxvZ19sb2NrX3dhaXRzOwogCiAjaWZkZWYgRVhFQ19CQUNLRU5ECiBl eHRlcm4gUEdETExJTVBPUlQgc2xvY2tfdCAqUHJvY1N0cnVjdExvY2s7Ci1leHRlcm4gUEdE TExJTVBPUlQgUEdQUk9DICpBdXhpbGlhcnlQcm9jczsKK2V4dGVybiBQR0RMTElNUE9SVCBQ R1BST0MgKipBdXhpbGlhcnlQcm9jczsKICNlbmRpZgogCiAKQEAgLTUyMCw0ICs1MjUsNyBA QCBleHRlcm4gUEdQUk9DICpBdXhpbGlhcnlQaWRHZXRQcm9jKGludCBwaWQpOwogZXh0ZXJu IHZvaWQgQmVjb21lTG9ja0dyb3VwTGVhZGVyKHZvaWQpOwogZXh0ZXJuIGJvb2wgQmVjb21l TG9ja0dyb3VwTWVtYmVyKFBHUFJPQyAqbGVhZGVyLCBpbnQgcGlkKTsKIAorZXh0ZXJuIGlu dAlQcm9jUGFydGl0aW9uQ291bnQodm9pZCk7CitleHRlcm4gdm9pZCBQcm9jUGFydGl0aW9u R2V0KGludCBpZHgsIGludCAqbm9kZSwgaW50ICpucHJvY3MsIHZvaWQgKipwcm9jc3B0ciwg dm9pZCAqKmZwcHRyKTsKKwogI2VuZGlmCQkJCQkJCS8qIF9QUk9DX0hfICovCmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGNiNTJjNDE3NTkyLi5iMTFiMDQ4MThiZSAxMDA2 NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE4ODEsNiArMTg4MSw3IEBAIFBHUF9N UEkKIFBHUF9QdWJLZXkKIFBHUF9TMksKIFBHUGluZworUEdQcm9jUGFydGl0aW9uCiBQR1F1 ZXJ5Q2xhc3MKIFBHUlVzYWdlCiBQR1NlbWFwaG9yZQotLSAKMi41MS4xCgo= --------------Mky2abyS3YoHwGs5syrGiO88 Content-Type: text/x-patch; charset=UTF-8; name="v20251111-0006-NUMA-shared-buffers-partitioning.patch" Content-Disposition: attachment; filename="v20251111-0006-NUMA-shared-buffers-partitioning.patch" Content-Transfer-Encoding: base64 RnJvbSA3MDVjZTkxNTIyMDU5YWZjOThmZjMzOWNjNjQwYWI3YWEzOGQ0YWM3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAxMSBOb3YgMjAyNSAxMjowNTozNSArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUxMTExIDYvN10gTlVNQTogc2hhcmVkIGJ1ZmZlcnMgcGFydGl0aW9uaW5nCgpFbnN1 cmUgc2hhcmVkIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBmcm9tIGFsbCBOVU1BIG5vZGVzLCBp biBhIGJhbGFuY2VkCndheSwgaW5zdGVhZCBvZiBqdXN0IHVzaW5nIHRoZSBub2RlIHdoZXJl IFBvc3RncmVzIGluaXRpYWxseSBzdGFydHMsIG9yCndoZXJlIHRoZSBrZXJuZWwgZGVjaWRl cyB0byBtaWdyYXRlIHRoZSBwYWdlLCBldGMuIFdpdGggcHJlLXdhcm1pbmcKcGVyZm9ybWVk IGJ5IGEgc2luZ2xlIGJhY2tlbmQsIHRoaXMgY2FuIGVhc2lseSByZXN1bHQgaW4gc2V2ZXJl bHkKdW5iYWxhbmNlZCBtZW1vcnkgZGlzdHJpYnV0aW9uICh3aXRoIG1vc3QgZnJvbSBhIHNp bmdsZSBOVU1BIG5vZGUpLgoKVGhlIGtlcm5lbCB3b3VsZCBldmVudHVhbGx5IG1vdmUgc29t ZSBvZiB0aGUgbWVtb3J5IHRvIG90aGVyIG5vZGVzCih0aGFua3MgdG8gem9uZV9yZWNsYWlt KSwgYnV0IHRoYXQgdGVuZHMgdG8gdGFrZSBhIGxvbmcgdGltZS4gU28gdGhpcwpwYXRjaCBp bXByb3ZlcyBwcmVkaWN0YWJpbGl0eSwgcmVkdWNlcyB0aGUgdGltZSBuZWVkZWQgZm9yIHdh cm11cApkdXJpbmcgYmVuY2htYXJraW5nLCBldGMuICBJdCdzIGxlc3MgZGVwZW5kZW50IG9u IHdoYXQgdGhlIENQVQpzY2hlZHVsZXIgZG9lcywgZXRjLgoKRnVydGhlcm1vcmUsIHRoZSBi dWZmZXJzIGFyZSBtYXBwZWQgdG8gTlVNQSBub2RlcyBpbiBhIGRldGVybWluaXN0aWMKd2F5 LCBzbyB0aGlzIGFsc28gYWxsb3dzIGZ1cnRoZXIgaW1wcm92ZW1lbnRzIGxpa2UgYmFja2Vu ZHMgdXNpbmcKYnVmZmVycyBmcm9tIHRoZSBzYW1lIE5VTUEgbm9kZS4KClRoZSBlZmZlY3Qg aXMgc2ltaWxhciB0bwoKICAgICBudW1hY3RsIC0taW50ZXJsZWF2ZT1hbGwKCmJ1dCB0aGVy ZSdzIGEgbnVtYmVyIG9mIGltcG9ydGFudCBkaWZmZXJlbmNlcy4KCkZpcnN0bHksIGl0J3Mg YXBwbGllZCBvbmx5IHRvIHNoYXJlZCBidWZmZXJzIChhbmQgYWxzbyB0byBkZXNjcmlwdG9y cyksCm5vdCB0byB0aGUgd2hvbGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LiBJdCdzIG5vdCBj bGVhciB3ZSdkIHdhbnQgdG8gdXNlCmludGVybGVhdmluZyBmb3IgYWxsIHBhcnRzLCBzdG9y aW5nIGVudHJpZXMgd2l0aCBkaWZmZXJlbnQgc2l6ZXMgYW5kCmxpZmUgY3ljbGVzIChlLmcu IFByb2NBcnJheSBtYXkgbmVlZCBkaWZmZXJlbnQgYXBwcm9hY2gpLgoKU2Vjb25kbHksIGl0 IGNvbnNpZGVycyB0aGUgcGFnZSBhbmQgYmxvY2sgc2l6ZSwgYW5kIG1ha2VzIHN1cmUgdG8g YWx3YXlzCnB1dCB0aGUgd2hvbGUgYnVmZmVyIG9uIGEgc2luZ2xlIE5VTUEgbm9kZSAoZXZl biBpZiBpdCBoYXBwZW5zIHRvIHVzZQptdWx0aXBsZSBtZW1vcnkgcGFnZXMpLCBhbmQgdG8g a2VlcCB0aGUgYnVmZmVyIGFuZCBpdCdzIGRlc2NyaXB0b3Igb24KdGhlIHNhbWUgTlVNQSBu b2RlLiBUaGUgc2VyaW91c25lc3MvbGlrZWxpaG9vZCBvZiB0aGVzZSBpc3N1ZXMgZGVwZW5k cwpvbiB0aGUgbWVtb3J5IHBhZ2Ugc2l6ZSAocmVndWxhciB2cy4gaHVnZSBwYWdlcykuCgpU aGUgbWFwcGluZyBvZiBtZW1vcnkgdG8gTlVNQSBub2RlcyBoYXBwZW5zIGluIGxhcmdlciBj aHVua3MuIFRoaXMgaXMKcmVxdWlyZWQgdG8gaGFuZGxlIGJ1ZmZlciBkZXNjcmlwdG9ycyAo d2hpY2ggYXJlIHNtYWxsZXIgdGhhbiBidWZmZXJzKSwKYW5kIHNvIG1hbnkgbW9yZSBmaXQg b250byBhIHNpbmdsZSBtZW1vcnkgcGFnZS4KClRoZSBudW1iZXIgb2YgYnVmZmVyIGRlc2Ny aXB0b3JzIHBlciBtZW1vcnkgcGFnZSBkZXRlcm1pbmVzIHRoZSBzbWFsbGVzdApudW1iZXIg b2YgYnVmZmVycyB0aGF0IGNhbiBiZSBwbGFjZWQgb24gYSBOVU1BIG5vZGUuIFdpdGggMk1C IGh1Z2UgcGFnZXMKdGhpcyBpcyAyNTZNQiwgd2l0aCA0S0IgcGFnZXMgdGhpcyBpcyA1MTJL QikuIE5vZGVzIGdldCBhIG11bHRpcGxlIG9mCnRoaXMsIGFuZCB3ZSB0cnkgdG8ga2VlcCB0 aGUgbm9kZXMgYmFsYW5jZWQgLSB0aGUgbGFzdCBub2RlIGNhbiBnZXQgbGVzcwptZW1vcnks IHRob3VnaC4KClRoZSAiYnVmZmVyIHBhcnRpdGlvbnMiIG1heSBub3QgYmUgMToxIHdpdGgg TlVNQSBub2Rlcy4gVGhlcmUncyBhCm1pbmltYWwgbnVtYmVyIG9mIHBhcnRpdGlvbnMgKGRl ZmF1bHQ6IDQpIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGV2ZW4gd2l0aApmZXdlciBOVU1BIG5v ZGVzLCBvciBubyBOVU1BIGF0IGFsbC4gRWFjaCBub2RlIGdldHMgdGhlIHNhbWUgbnVtYmVy IG9mCnBhcnRpdGlvbnMsIHRvIGtlZXAgdGhpbmdzIHNpbXBsZS4gRm9yIGV4YW1wbGUsIHdp dGggMiBub2RlcyB0aGVyZSdsbCBiZQo0IHBhcnRpdGlvbnMsIHdpdGggZWFjaCBub2RlIGdl dHRpbmcgMiBvZiB0aGVtLiBXaXRoIDMgbm9kZXMgdGhlcmUnbGwgYmUKNiBwYXJ0aXRpb25z IChhZ2FpbiwgMiBwZXIgbm9kZSkuCgpOb3RlczoKCiogVGhlIGZlYXR1cmUgaXMgZW5hYmxl ZCBieSBkZWJ1Z19udW1hID0gYnVmZmVycyBHVUMgKGRlZmF1bHQ6IGVtcHR5KSwKICB3aGlj aCB3b3JrcyBzaW1pbGFybHkgdG8gZGVidWdfaW9fZGlyZWN0LgoKKiBUaGlzIHBhdGNoIHBh cnRpdGlvbnMganVzdCBzaGFyZWQgYnVmZmVycywgbm90IHRoZSB3aG9sZSBzaGFyZWQKICBt ZW1vcnkuIEEgbGF0ZXIgcGF0Y2ggd2lsbCBkbyB0aGF0IGZvciBQR1BST0MsIGJ1dCBpdCdz IHRyaWNreSBhbmQKICByZXF1aXJlcyBhIGRpZmZlcmVudCBhcHByb2FjaCBiZWNhdXNlIG9m IGh1Z2UgcGFnZXMuCi0tLQogLi4uL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwgICAg ICAgICAgICAgIHwgICAxICsKIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2Fj aGVfcGFnZXMuYyB8ICA0NCArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2lu aXQuYyAgICAgICAgIHwgNTY5ICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvZnJlZWxpc3QuYyAgICAgICAgIHwgIDg4ICsrLQogc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgIDEwICsKIHNyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVk ZS9wb3J0L3BnX251bWEuaCAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwogc3JjL2luY2x1 ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmggICAgICAgICAgIHwgIDE0ICstCiBzcmMvaW5j bHVkZS9zdG9yYWdlL2J1Zm1nci5oICAgICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2lu Y2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmggICAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9w b3J0L3BnX251bWEuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2NCArKwogMTEg ZmlsZXMgY2hhbmdlZCwgNzM2IGluc2VydGlvbnMoKyksIDY4IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0t MS43LnNxbCBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0t MS43LnNxbAppbmRleCAyYzRkNTYwNTE0ZC4uZGMyY2UwMTkyODMgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbAorKysg Yi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwK QEAgLTEzLDYgKzEzLDcgQEAgTEFOR1VBR0UgQyBQQVJBTExFTCBTQUZFOwogQ1JFQVRFIFZJ RVcgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyBBUwogCVNFTEVDVCBQLiogRlJPTSBwZ19i dWZmZXJjYWNoZV9wYXJ0aXRpb25zKCkgQVMgUAogCShwYXJ0aXRpb24gaW50ZWdlciwJCQkt LSBwYXJ0aXRpb24gaW5kZXgKKwkgbnVtYV9ub2RlIGludGVnZXIsCQkJLS0gTlVNQSBub2Rl IG9mIHRoZSBwYXJ0aXRpb29uCiAJIG51bV9idWZmZXJzIGludGVnZXIsCQktLSBudW1iZXIg b2YgYnVmZmVycyBpbiB0aGUgcGFydGl0aW9uCiAJIGZpcnN0X2J1ZmZlciBpbnRlZ2VyLAkJ LS0gZmlyc3QgYnVmZmVyIG9mIHBhcnRpdGlvbgogCSBsYXN0X2J1ZmZlciBpbnRlZ2VyLAkJ LS0gbGFzdCBidWZmZXIgb2YgcGFydGl0aW9uCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2J1 ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgYi9jb250cmliL3BnX2J1ZmZlcmNh Y2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKaW5kZXggODUzNmUyZGViZWYuLjEzNzlkNTRj YzVkIDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hl X3BhZ2VzLmMKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9w YWdlcy5jCkBAIC04MTMsMTkgKzgxMywyMSBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25z KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXR1cGxlZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVE ZXNjKGV4cGVjdGVkX3R1cGxlZGVzYy0+bmF0dHMpOwogCQlUdXBsZURlc2NJbml0RW50cnko dHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMSwgInBhcnRpdGlvbiIsCiAJCQkJCQkgICBJTlQ0 T0lELCAtMSwgMCk7Ci0JCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVt YmVyKSAyLCAibnVtX2J1ZmZlcnMiLAorCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNj LCAoQXR0ck51bWJlcikgMiwgIm51bWFfbm9kZSIsCiAJCQkJCQkgICBJTlQ0T0lELCAtMSwg MCk7Ci0JCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAzLCAi Zmlyc3RfYnVmZmVyIiwKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJO dW1iZXIpIDMsICJudW1fYnVmZmVycyIsCiAJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7Ci0J CVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA0LCAibGFzdF9i dWZmZXIiLAorCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikg NCwgImZpcnN0X2J1ZmZlciIsCiAJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7Ci0JCVR1cGxl RGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA1LCAibnVtX3Bhc3NlcyIs CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA1LCAibGFz dF9idWZmZXIiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0 RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgNiwgIm51bV9wYXNzZXMiLAogCQkJCQkJ ICAgSU5UOE9JRCwgLTEsIDApOwotCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAo QXR0ck51bWJlcikgNiwgIm5leHRfYnVmZmVyIiwKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1 cGxlZGVzYywgKEF0dHJOdW1iZXIpIDcsICJuZXh0X2J1ZmZlciIsCiAJCQkJCQkgICBJTlQ0 T0lELCAtMSwgMCk7Ci0JCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVt YmVyKSA3LCAidG90YWxfYWxsb2NzIiwKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVz YywgKEF0dHJOdW1iZXIpIDgsICJ0b3RhbF9hbGxvY3MiLAogCQkJCQkJICAgSU5UOE9JRCwg LTEsIDApOwotCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikg OCwgIm51bV9hbGxvY3MiLAorCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0 ck51bWJlcikgOSwgIm51bV9hbGxvY3MiLAogCQkJCQkJICAgSU5UOE9JRCwgLTEsIDApOwog CQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMTAsICJ0b3Rh bF9yZXFfYWxsb2NzIiwKIAkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKQEAgLTg0OSw3ICs4 NTEsOCBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ ewogCQl1aW50MzIJCWkgPSBmdW5jY3R4LT5jYWxsX2NudHI7CiAKLQkJaW50CQkJbnVtX2J1 ZmZlcnMsCisJCWludAkJCW51bWFfbm9kZSwKKwkJCQkJbnVtX2J1ZmZlcnMsCiAJCQkJCWZp cnN0X2J1ZmZlciwKIAkJCQkJbGFzdF9idWZmZXI7CiAKQEAgLTg2OCw3ICs4NzEsNyBAQCBw Z19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCURhdHVtCQl2 YWx1ZXNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CiAJCWJvb2wJCW51bGxz W05VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU1dOwogCi0JCUJ1ZmZlclBhcnRpdGlv bkdldChpLCAmbnVtX2J1ZmZlcnMsCisJCUJ1ZmZlclBhcnRpdGlvbkdldChpLCAmbnVtYV9u b2RlLCAmbnVtX2J1ZmZlcnMsCiAJCQkJCQkgICAmZmlyc3RfYnVmZmVyLCAmbGFzdF9idWZm ZXIpOwogCiAJCUNsb2NrU3dlZXBQYXJ0aXRpb25HZXRJbmZvKGksCkBAIC04ODYsMzYgKzg4 OSwzOSBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CXZhbHVlc1swXSA9IEludDMyR2V0RGF0dW0oaSk7CiAJCW51bGxzWzBdID0gZmFsc2U7CiAK LQkJdmFsdWVzWzFdID0gSW50MzJHZXREYXR1bShudW1fYnVmZmVycyk7CisJCXZhbHVlc1sx XSA9IEludDMyR2V0RGF0dW0obnVtYV9ub2RlKTsKIAkJbnVsbHNbMV0gPSBmYWxzZTsKIAot CQl2YWx1ZXNbMl0gPSBJbnQzMkdldERhdHVtKGZpcnN0X2J1ZmZlcik7CisJCXZhbHVlc1sy XSA9IEludDMyR2V0RGF0dW0obnVtX2J1ZmZlcnMpOwogCQludWxsc1syXSA9IGZhbHNlOwog Ci0JCXZhbHVlc1szXSA9IEludDMyR2V0RGF0dW0obGFzdF9idWZmZXIpOworCQl2YWx1ZXNb M10gPSBJbnQzMkdldERhdHVtKGZpcnN0X2J1ZmZlcik7CiAJCW51bGxzWzNdID0gZmFsc2U7 CiAKLQkJdmFsdWVzWzRdID0gSW50NjRHZXREYXR1bShjb21wbGV0ZV9wYXNzZXMpOworCQl2 YWx1ZXNbNF0gPSBJbnQzMkdldERhdHVtKGxhc3RfYnVmZmVyKTsKIAkJbnVsbHNbNF0gPSBm YWxzZTsKIAotCQl2YWx1ZXNbNV0gPSBJbnQzMkdldERhdHVtKG5leHRfdmljdGltX2J1ZmZl cik7CisJCXZhbHVlc1s1XSA9IEludDY0R2V0RGF0dW0oY29tcGxldGVfcGFzc2VzKTsKIAkJ bnVsbHNbNV0gPSBmYWxzZTsKIAotCQl2YWx1ZXNbNl0gPSBJbnQ2NEdldERhdHVtKGJ1ZmZl cl90b3RhbF9hbGxvY3MpOworCQl2YWx1ZXNbNl0gPSBJbnQzMkdldERhdHVtKG5leHRfdmlj dGltX2J1ZmZlcik7CiAJCW51bGxzWzZdID0gZmFsc2U7CiAKLQkJdmFsdWVzWzddID0gSW50 NjRHZXREYXR1bShidWZmZXJfYWxsb2NzKTsKKwkJdmFsdWVzWzddID0gSW50NjRHZXREYXR1 bShidWZmZXJfdG90YWxfYWxsb2NzKTsKIAkJbnVsbHNbN10gPSBmYWxzZTsKIAotCQl2YWx1 ZXNbOF0gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl90b3RhbF9yZXFfYWxsb2NzKTsKKwkJdmFs dWVzWzhdID0gSW50NjRHZXREYXR1bShidWZmZXJfYWxsb2NzKTsKIAkJbnVsbHNbOF0gPSBm YWxzZTsKIAotCQl2YWx1ZXNbOV0gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl9yZXFfYWxsb2Nz KTsKKwkJdmFsdWVzWzldID0gSW50NjRHZXREYXR1bShidWZmZXJfdG90YWxfcmVxX2FsbG9j cyk7CiAJCW51bGxzWzldID0gZmFsc2U7CiAKLQkJdmFsdWVzWzEwXSA9IFBvaW50ZXJHZXRE YXR1bShhcnJheSk7CisJCXZhbHVlc1sxMF0gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl9yZXFf YWxsb2NzKTsKIAkJbnVsbHNbMTBdID0gZmFsc2U7CiAKKwkJdmFsdWVzWzExXSA9IFBvaW50 ZXJHZXREYXR1bShhcnJheSk7CisJCW51bGxzWzExXSA9IGZhbHNlOworCiAJCS8qIEJ1aWxk IGFuZCByZXR1cm4gdGhlIHR1cGxlLiAqLwogCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZSgo VHVwbGVEZXNjKSBmdW5jY3R4LT51c2VyX2ZjdHgsIHZhbHVlcywgbnVsbHMpOwogCQlyZXN1 bHQgPSBIZWFwVHVwbGVHZXREYXR1bSh0dXBsZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmX2luaXQuYwppbmRleCAwMzYyZmRhMjRhYS4uNTg3ODU5YTU3NTQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwpAQCAtMTQsNiArMTQsMTIgQEAKICAq LwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpZmRlZiBVU0VfTElCTlVNQQorI2luY2x1 ZGUgPG51bWEuaD4KKyNpbmNsdWRlIDxudW1haWYuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAi cG9ydC9wZ19udW1hLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9haW8uaCIKICNpbmNsdWRlICJz dG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgpA QCAtMjksMTUgKzM1LDI0IEBAIENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVkICpC dWZmZXJJT0NWQXJyYXk7CiBXcml0ZWJhY2tDb250ZXh0IEJhY2tlbmRXcml0ZWJhY2tDb250 ZXh0OwogQ2twdFNvcnRJdGVtICpDa3B0QnVmZmVySWRzOwogCi0vKiAqCi0gKiBudW1iZXIg b2YgYnVmZmVyIHBhcnRpdGlvbnMgKi8KLSNkZWZpbmUgTlVNX0NMT0NLX1NXRUVQX1BBUlRJ VElPTlMJNAorLyoKKyAqIE1pbmltdW0gbnVtYmVyIG9mIGJ1ZmZlciBwYXJ0aXRpb25zLCBu byBtYXR0ZXIgdGhlIG51bWJlciBvZiBOVU1BIG5vZGVzLgorICovCisjZGVmaW5lIE1JTl9C VUZGRVJfUEFSVElUSU9OUwk0CiAKIC8qIEFycmF5IG9mIHN0cnVjdHMgd2l0aCBpbmZvcm1h dGlvbiBhYm91dCBidWZmZXIgcmFuZ2VzICovCiBCdWZmZXJQYXJ0aXRpb25zICpCdWZmZXJQ YXJ0aXRpb25zQXJyYXkgPSBOVUxMOwogCitzdGF0aWMgdm9pZCBidWZmZXJfcGFydGl0aW9u c19wcmVwYXJlKHZvaWQpOwogc3RhdGljIHZvaWQgYnVmZmVyX3BhcnRpdGlvbnNfaW5pdCh2 b2lkKTsKIAorLyogbnVtYmVyIG9mIE5VTUEgbm9kZXMgKGFzIHJldHVybmVkIGJ5IG51bWFf bnVtX2NvbmZpZ3VyZWRfbm9kZXMpICovCitzdGF0aWMgaW50CW51bWFfbm9kZXMgPSAtMTsJ LyogbnVtYmVyIG9mIG5vZGVzIHdoZW4gc2l6aW5nICovCitzdGF0aWMgU2l6ZSBudW1hX3Bh Z2Vfc2l6ZSA9IDA7IC8qIHBhZ2UgdXNlZCB0byBzaXplIHBhcnRpdGlvbnMgKi8KK3N0YXRp YyBib29sIG51bWFfY2FuX3BhcnRpdGlvbiA9IGZhbHNlOyAvKiBjYW4gbWFwIHRvIE5VTUEg bm9kZXM/ICovCitzdGF0aWMgaW50CW51bWFfYnVmZmVyc19wZXJfbm9kZSA9IC0xOyAvKiBi dWZmZXJzIHBlciBub2RlICovCitzdGF0aWMgaW50CW51bWFfcGFydGl0aW9ucyA9IDA7CS8q IHRvdGFsIChtdWx0aXBsZSBvZiBub2RlcykgKi8KKwogLyoKICAqIERhdGEgU3RydWN0dXJl czoKICAqCQlidWZmZXJzIGxpdmUgaW4gYSBmcmVlbGlzdCBhbmQgYSBsb29rdXAgZGF0YSBz dHJ1Y3R1cmUuCkBAIC04NSwyNSArMTAwLDg1IEBAIEJ1ZmZlck1hbmFnZXJTaG1lbUluaXQo dm9pZCkKIAkJCQlmb3VuZElPQ1YsCiAJCQkJZm91bmRCdWZDa3B0LAogCQkJCWZvdW5kUGFy dHM7CisJU2l6ZQkJYnVmZmVyX2FsaWduOworCisJLyoKKwkgKiBEZXRlcm1pbmUgdGhlIG1l bW9yeSBwYWdlIHNpemUgdXNlZCB0byBwYXJ0aXRpb24gc2hhcmVkIGJ1ZmZlcnMgb3Zlcgor CSAqIHRoZSBhdmFpbGFibGUgTlVNQSBub2Rlcy4KKwkgKgorCSAqIFhYWCBXZSBoYXZlIHRv IGNhbGwgcHJlcGFyZSBhZ2FpbiwgYmVjYXVzZSB3aXRoIEVYRUNfQkFDS0VORCB3ZSBtYXkg bm90CisJICogc2VlIHRoZSB2YWx1ZXMgYWxyZWFkeSBjYWxjdWxhdGVkIGluIEJ1ZmZlck1h bmFnZXJTaG1lbVNpemUoKS4KKwkgKgorCSAqIFhYWCBXZSBuZWVkIHRvIGJlIGNhcmVmdWwg dG8gZ2V0IHRoZSBzYW1lIHZhbHVlIHdoZW4gY2FsY3VsYXRpbmcgdGhlCisJICogYW5kIHRo ZW4gbGF0ZXIgd2hlbiBpbml0aWFsaXppbmcgdGhlIHN0cnVjdHMgYWZ0ZXIgYWxsb2NhdGlv biwgb3IgdG8gbm90CisJICogZGVwZW5kIG9uIHRoYXQgdmFsdWUgdG9vIG11Y2guIEJlZm9y ZSB0aGUgYWxsb2NhdGlvbiB3ZSBkb24ndCBrbm93IGlmIHdlCisJICogZ2V0IGh1Z2UgcGFn ZXMsIHNvIHdlIGp1c3QgaGF2ZSB0byBhc3N1bWUgd2UgZG8uCisJICovCisJYnVmZmVyX3Bh cnRpdGlvbnNfcHJlcGFyZSgpOworCisJLyoKKwkgKiBXaXRoIE5VTUEgd2UgbmVlZCB0byBl bnN1cmUgdGhlIGJ1ZmZlcnMgYXJlIHByb3Blcmx5IGFsaWduZWQgbm90IGp1c3QKKwkgKiB0 byBQR19JT19BTElHTl9TSVpFLCBidXQgYWxzbyB0byBtZW1vcnkgcGFnZSBzaXplLiBOVU1B IHdvcmtzIG9uIHBhZ2UKKwkgKiBncmFudWxhcml0eSwgYW5kIHdlIGRvbid0IHdhbnQgYSBi dWZmZXIgdG8gZ2V0IHNwbGl0IHRvIG11bHRpcGxlIG5vZGVzCisJICogKHdoZW4gc3Bhbm5p bmcgbXVsdGlwbGUgbWVtb3J5IHBhZ2VzKS4KKwkgKgorCSAqIFdlIGFsc28gZG9uJ3Qgd2Fu dCB0byBpbnRlcmZlcmUgd2l0aCBvdGhlciBwYXJ0cyBvZiBzaGFyZWQgbWVtb3J5LAorCSAq IHdoaWNoIGNvdWxkIGVhc2lseSBoYXBwZW4gd2l0aCBodWdlIHBhZ2VzIChlLmcuIHdpdGgg ZGF0YSBzdG9yZWQgYmVmb3JlCisJICogYnVmZmVycykuCisJICoKKwkgKiBXZSBkbyB0aGlz IGJ5IGFsaWduaW5nIHRvIHRoZSBsYXJnZXIgb2YgdGhlIHR3byB2YWx1ZXMgKHdlIGtub3cg Ym90aAorCSAqIGFyZSBwb3dlci1vZi10d28gdmFsdWVzLCBzbyB0aGUgbGFyZ2VyIHZhbHVl IGlzIGF1dG9tYXRpY2FsbHkgYQorCSAqIG11bHRpcGxlIG9mIHRoZSBsZXNzZXIgb25lKS4K KwkgKgorCSAqIFhYWCBNYXliZSB0aGVyZSdzIGEgd2F5IHRvIHVzZSBsZXNzIGFsaWdubWVu dD8KKwkgKgorCSAqIFhYWCBNYXliZSB3aXRoIChudW1hX3BhZ2Vfc2l6ZSA+IFBHX0lPX0FM SUdOX1NJWkUpLCB3ZSBkb24ndCBuZWVkIHRvCisJICogYWxpZ24gdG8gbnVtYV9wYWdlX3Np emU/IEVzcGVjaWFsbHkgZm9yIHZlcnkgbGFyZ2UgaHVnZSBwYWdlcyAoZS5nLiAxR0IpCisJ ICogdGhhdCBkb2Vzbid0IHNlZW0gcXVpdGUgd29ydGggaXQuIE1heWJlIHdlIHNob3VsZCBz aW1wbHkgYWxpZ24gdG8KKwkgKiBCTENLU1osIHNvIHRoYXQgYnVmZmVycyBkb24ndCBnZXQg c3BsaXQ/IFN0aWxsLCB3ZSBtaWdodCBpbnRlcmZlcmUgd2l0aAorCSAqIG90aGVyIHN0dWZm IHN0b3JlZCBpbiBzaGFyZWQgbWVtb3J5IHRoYXQgd2Ugd2FudCB0byBhbGxvY2F0ZSBvbiBh CisJICogcGFydGljdWxhciBOVU1BIG5vZGUgKGUuZy4gUHJvY0FycmF5KS4KKwkgKgorCSAq IFhYWCBNYXliZSB3aXRoICJ0b28gbGFyZ2UiIGh1Z2UgcGFnZXMgd2Ugc2hvdWxkIGp1c3Qg bm90IGRvIHRoaXMsIG9yCisJICogbWF5YmUgZG8gdGhpcyBvbmx5IGZvciBzdWZmaWNpZW50 bHkgbGFyZ2UgYXJlYXMgKGUuZy4gc2hhcmVkIGJ1ZmZlcnMsCisJICogYnV0IG5vdCBQcm9j QXJyYXkpLgorCSAqLworCWJ1ZmZlcl9hbGlnbiA9IE1heChudW1hX3BhZ2Vfc2l6ZSwgUEdf SU9fQUxJR05fU0laRSk7CisKKwkvKiBvbmUgcGFnZSBpcyBhIG11bHRpcGxlIG9mIHRoZSBv dGhlciAqLworCUFzc2VydCgoKG51bWFfcGFnZV9zaXplICUgUEdfSU9fQUxJR05fU0laRSkg PT0gMCkgfHwKKwkJICAgKChQR19JT19BTElHTl9TSVpFICUgbnVtYV9wYWdlX3NpemUpID09 IDApKTsKIAogCS8qIGFsbG9jYXRlIHRoZSBwYXJ0aXRpb24gcmVnaXN0cnkgZmlyc3QgKi8K IAlCdWZmZXJQYXJ0aXRpb25zQXJyYXkgPSAoQnVmZmVyUGFydGl0aW9ucyAqKQogCQlTaG1l bUluaXRTdHJ1Y3QoIkJ1ZmZlciBQYXJ0aXRpb25zIiwKIAkJCQkJCW9mZnNldG9mKEJ1ZmZl clBhcnRpdGlvbnMsIHBhcnRpdGlvbnMpICsKLQkJCQkJCW11bF9zaXplKHNpemVvZihCdWZm ZXJQYXJ0aXRpb24pLCBOVU1fQ0xPQ0tfU1dFRVBfUEFSVElUSU9OUyksCisJCQkJCQltdWxf c2l6ZShzaXplb2YoQnVmZmVyUGFydGl0aW9uKSwgbnVtYV9wYXJ0aXRpb25zKSwKIAkJCQkJ CSZmb3VuZFBhcnRzKTsKIAotCS8qIEFsaWduIGRlc2NyaXB0b3JzIHRvIGEgY2FjaGVsaW5l IGJvdW5kYXJ5LiAqLworCS8qCisJICogQWxpZ24gZGVzY3JpcHRvcnMgdG8gYSBjYWNoZWxp bmUgYm91bmRhcnksIGFuZCBtZW1vcnkgcGFnZS4KKwkgKgorCSAqIFdlIHdhbnQgdG8gZGlz dHJpYnV0ZSBib3RoIHRvIE5VTUEgbm9kZXMsIHNvIHRoYXQgZWFjaCBidWZmZXIgYW5kIGl0 J3MKKwkgKiBkZXNjcmlwdG9yIGFyZSBvbiB0aGUgc2FtZSBOVU1BIG5vZGUuIFNvIHdlIGFs aWduIGJvdGggdGhlIHNhbWUgd2F5LgorCSAqCisJICogWFhYIFRoZSBtZW1vcnkgcGFnZSBp cyBhbHdheXMgbGFyZ2VyIHRoYW4gY2FjaGVsaW5lLCBzbyB0aGUgY2FjaGVsaW5lCisJICog cmVmZXJlbmNlIGlzIGEgYml0IHVubmVjZXNzYXJ5LgorCSAqCisJICogWFhYIEluIHByaW5j aXBsZSB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyB3aXRoIE5VTUEsIG90aGVyd2lzZSB3ZSBj b3VsZAorCSAqIHN0aWxsIGFsaWduIGp1c3QgdG8gY2FjaGVsaW5lLCBhcyBiZWZvcmUuCisJ ICovCiAJQnVmZmVyRGVzY3JpcHRvcnMgPSAoQnVmZmVyRGVzY1BhZGRlZCAqKQotCQlTaG1l bUluaXRTdHJ1Y3QoIkJ1ZmZlciBEZXNjcmlwdG9ycyIsCi0JCQkJCQlOQnVmZmVycyAqIHNp emVvZihCdWZmZXJEZXNjUGFkZGVkKSwKLQkJCQkJCSZmb3VuZERlc2NzKTsKKwkJVFlQRUFM SUdOKGJ1ZmZlcl9hbGlnbiwKKwkJCQkgIFNobWVtSW5pdFN0cnVjdCgiQnVmZmVyIERlc2Ny aXB0b3JzIiwKKwkJCQkJCQkJICBOQnVmZmVycyAqIHNpemVvZihCdWZmZXJEZXNjUGFkZGVk KSArIGJ1ZmZlcl9hbGlnbiwKKwkJCQkJCQkJICAmZm91bmREZXNjcykpOwogCiAJLyogQWxp Z24gYnVmZmVyIHBvb2wgb24gSU8gcGFnZSBzaXplIGJvdW5kYXJ5LiAqLwogCUJ1ZmZlckJs b2NrcyA9IChjaGFyICopCi0JCVRZUEVBTElHTihQR19JT19BTElHTl9TSVpFLAorCQlUWVBF QUxJR04oYnVmZmVyX2FsaWduLAogCQkJCSAgU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgQmxv Y2tzIiwKLQkJCQkJCQkJICBOQnVmZmVycyAqIChTaXplKSBCTENLU1ogKyBQR19JT19BTElH Tl9TSVpFLAorCQkJCQkJCQkgIE5CdWZmZXJzICogKFNpemUpIEJMQ0tTWiArIGJ1ZmZlcl9h bGlnbiwKIAkJCQkJCQkJICAmZm91bmRCdWZzKSk7CiAKIAkvKiBBbGlnbiBjb25kaXRpb24g dmFyaWFibGVzIHRvIGNhY2hlbGluZSBib3VuZGFyeS4gKi8KQEAgLTEzMyw3ICsyMDgsMTAg QEAgQnVmZmVyTWFuYWdlclNobWVtSW5pdCh2b2lkKQogCXsKIAkJaW50CQkJaTsKIAotCQkv KiBJbml0aWFsaXplIGJ1ZmZlciBwYXJ0aXRpb25zIChjYWxjdWxhdGUgYnVmZmVyIHJhbmdl cykuICovCisJCS8qCisJCSAqIEluaXRpYWxpemUgYnVmZmVyIHBhcnRpdGlvbnMsIGluY2x1 ZGluZyBtb3ZpbmcgbWVtb3J5IHRvIGRpZmZlcmVudAorCQkgKiBOVU1BIG5vZGVzIChpZiBl bmFibGVkIGJ5IEdVQykuCisJCSAqLwogCQlidWZmZXJfcGFydGl0aW9uc19pbml0KCk7CiAK IAkJLyoKQEAgLTE3MiwxOSArMjUwLDI2IEBAIEJ1ZmZlck1hbmFnZXJTaG1lbUluaXQodm9p ZCkKICAqCiAgKiBjb21wdXRlIHRoZSBzaXplIG9mIHNoYXJlZCBtZW1vcnkgZm9yIHRoZSBi dWZmZXIgcG9vbCBpbmNsdWRpbmcKICAqIGRhdGEgcGFnZXMsIGJ1ZmZlciBkZXNjcmlwdG9y cywgaGFzaCB0YWJsZXMsIGV0Yy4KKyAqCisgKiBYWFggQ2FsbGVkIGJlZm9yZSBhbGxvY2F0 aW9uLCBzbyB3ZSBkb24ndCBrbm93IGlmIGh1Z2UgcGFnZXMgZ2V0IHVzZWQgeWV0LgorICog U28gd2UgbmVlZCB0byBhc3N1bWUgaHVnZSBwYWdlcyBnZXQgdXNlZCwgYW5kIHVzZSBnZXRf bWVtb3J5X3BhZ2Vfc2l6ZSgpCisgKiB0byBjYWxjdWxhdGUgdGhlIGxhcmdlc3QgcG9zc2li bGUgbWVtb3J5IHBhZ2UuCiAgKi8KIFNpemUKIEJ1ZmZlck1hbmFnZXJTaG1lbVNpemUodm9p ZCkKIHsKIAlTaXplCQlzaXplID0gMDsKIAorCS8qIGNhbGN1bGF0ZSBwYXJ0aXRpb24gaW5m byBmb3IgYnVmZmVycyAqLworCWJ1ZmZlcl9wYXJ0aXRpb25zX3ByZXBhcmUoKTsKKwogCS8q IHNpemUgb2YgYnVmZmVyIGRlc2NyaXB0b3JzICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUs IG11bF9zaXplKE5CdWZmZXJzLCBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCkpKTsKIAkvKiB0 byBhbGxvdyBhbGlnbmluZyBidWZmZXIgZGVzY3JpcHRvcnMgKi8KLQlzaXplID0gYWRkX3Np emUoc2l6ZSwgUEdfQ0FDSEVfTElORV9TSVpFKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwg TWF4KG51bWFfcGFnZV9zaXplLCBQR19JT19BTElHTl9TSVpFKSk7CiAKIAkvKiBzaXplIG9m IGRhdGEgcGFnZXMsIHBsdXMgYWxpZ25tZW50IHBhZGRpbmcgKi8KLQlzaXplID0gYWRkX3Np emUoc2l6ZSwgUEdfSU9fQUxJR05fU0laRSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE1h eChudW1hX3BhZ2Vfc2l6ZSwgUEdfSU9fQUxJR05fU0laRSkpOwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBtdWxfc2l6ZShOQnVmZmVycywgQkxDS1NaKSk7CiAKIAkvKiBzaXplIG9mIHN0 dWZmIGNvbnRyb2xsZWQgYnkgZnJlZWxpc3QuYyAqLwpAQCAtMjAxLDExICsyODYsMjQ0IEBA IEJ1ZmZlck1hbmFnZXJTaG1lbVNpemUodm9pZCkKIAogCS8qIGFjY291bnQgZm9yIHJlZ2lz dHJ5IG9mIE5VTUEgcGFydGl0aW9ucyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBNQVhB TElHTihvZmZzZXRvZihCdWZmZXJQYXJ0aXRpb25zLCBwYXJ0aXRpb25zKSArCi0JCQkJCQkJ CSAgIG11bF9zaXplKHNpemVvZihCdWZmZXJQYXJ0aXRpb24pLCBOVU1fQ0xPQ0tfU1dFRVBf UEFSVElUSU9OUykpKTsKKwkJCQkJCQkJICAgbXVsX3NpemUoc2l6ZW9mKEJ1ZmZlclBhcnRp dGlvbiksIG51bWFfcGFydGl0aW9ucykpKTsKIAogCXJldHVybiBzaXplOwogfQogCisvKgor ICogQ2FsY3VsYXRlIHRoZSBOVU1BIG5vZGUgZm9yIGEgZ2l2ZW4gYnVmZmVyLgorICovCitp bnQKK0J1ZmZlckdldE5vZGUoQnVmZmVyIGJ1ZmZlcikKK3sKKwkvKiBub3QgTlVNQSBwYXJ0 aXRpb25pbmcgKi8KKwlpZiAobnVtYV9idWZmZXJzX3Blcl9ub2RlID09IC0xKQorCQlyZXR1 cm4gMDsKKworCS8qIG5vIE5VTUEtYXdhcmUgcGFydGl0aW9uaW5nICovCisJaWYgKChudW1h X2ZsYWdzICYgTlVNQV9CVUZGRVJTKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAo YnVmZmVyIC8gbnVtYV9idWZmZXJzX3Blcl9ub2RlKTsKK30KKworLyoKKyAqIGJ1ZmZlcl9w YXJ0aXRpb25zX3ByZXBhcmUKKyAqCQlDYWxjdWxhdGUgcGFyYW1ldGVycyBmb3IgcGFydGl0 aW9uaW5nIGJ1ZmZlcnMuCisgKgorICogV2Ugd2FudCB0byBzcGxpdCB0aGUgc2hhcmVkIGJ1 ZmZlcnMgaW50byBtdWx0aXBsZSBwYXJ0aXRpb25zLCBvZiByb3VnaGx5CisgKiB0aGUgc2Ft ZSBzaXplLiBUaGlzIGlzIG1lYW50IHRvIHNlcnZlIG11bHRpcGxlIHB1cnBvc2VzLiBXZSB3 YW50IHRvIG1hcAorICogdGhlIHBhcnRpdGlvbnMgdG8gZGlmZmVyZW50IE5VTUEgbm9kZXMs IHRvIGJhbGFuY2UgbWVtb3J5IHVzYWdlLCBhbmQKKyAqIGFsbG93IHBhcnRpdGlvbmluZyBz b21lIGRhdGEgc3RydWN0dXJlcyBidWlsdCBvbiB0b3Agb2YgYnVmZmVycywgdG8gZ2l2ZQor ICogcHJlZmVyZW5jZSB0byBsb2NhbCBhY2Nlc3MgKGJ1ZmZlcnMgb24gdGhlIHNhbWUgTlVN QSBub2RlKS4gVGhpcyBhcHBsaWVzCisgKiBtb3N0bHkgdG8gZnJlZWxpc3RzIGFuZCBjbG9j a3N3ZWVwLgorICoKKyAqIFdlIG1heSB3YW50IHRvIHVzZSBwYXJ0aXRpb25pbmcgZXZlbiBv biBub24tTlVNQSBzeXN0ZW1zLCBvciB3aGVuIHJ1bm5pbmcKKyAqIG9uIGEgc2luZ2xlIE5V TUEgbm9kZS4gUGFydGl0aW9uaW5nIHRoZSBmcmVlbGlzdC9jbG9ja3N3ZWVwIGlzIGJlbmVm aWNpYWwKKyAqIGV2ZW4gd2l0aG91dCB0aGUgTlVNQSBlZmZlY3RzLgorICoKKyAqIFNvIHdl IHRyeSB0byBhbHdheXMgYnVpbGQgYXQgbGVhc3QgNCBwYXJ0aXRpb25zIChNSU5fQlVGRkVS X1BBUlRJVElPTlMpCisgKiBpbiB0b3RhbCwgb3IgYXQgbGVhc3Qgb25lIHBhcnRpdGlvbiBw ZXIgTlVNQSBub2RlLiBXZSBhbHdheXMgY3JlYXRlIHRoZQorICogc2FtZSBudW1iZXIgb2Yg cGFydGl0aW9ucyBwZXIgTlVNQSBub2RlLgorICoKKyAqIFNvbWUgZXhhbXBsZXM6CisgKgor ICogLSBub24tTlVNQSBzeXN0ZW0gKG9yIDEgTlVNQSBub2RlKTogNCBwYXJ0aXRpb25zIGZv ciB0aGUgc2luZ2xlIG5vZGUKKyAqCisgKiAtIDIgTlVNQSBub2RlczogNCBwYXJ0aXRpb25z LCAyIGZvciBlYWNoIG5vZGUKKyAqCisgKiAtIDMgTlVNQSBub2RlczogNiBwYXJ0aXRpb25z LCAyIGZvciBlYWNoIG5vZGUKKyAqCisgKiAtIDQrIE5VTUEgbm9kZXM6IG9uZSBwYXJ0aXRp b24gcGVyIG5vZGUKKyAqCisgKiBOVU1BIHdvcmtzIG9uIHRoZSBtZW1vcnktcGFnZSBncmFu dWxhcml0eSwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgc21hbGxlc3QKKyAqIGFtb3VudCBvZiBt ZW1vcnkgd2UgY2FuIGFsbG9jYXRlIHRvIHNpbmdsZSBub2RlLiBUaGlzIGlzIGRldGVybWlu ZWQgYnkKKyAqIGhvdyBtYW55IEJ1ZmZlckRlc2NyaXB0b3JzIGZpdCBvbnRvIGEgc2luZ2xl IG1lbW9yeSBwYWdlLCBzbyB0aGlzIGRlcGVuZHMKKyAqIG9uIGh1Z2UgcGFnZSBzdXBwb3J0 LiBXaXRoIDJNQiBodWdlIHBhZ2VzICh0eXBpY2FsIG9uIHg4NiBMaW51eCksIHRoaXMgaXMK KyAqIDMyNzY4IGJ1ZmZlcnMgKDI1Nk1CKS4gV2l0aCByZWd1bGFyIDRrQiBwYWdlcywgaXQn cyA2NCBidWZmZXJzICg1MTJLQikuCisgKgorICogTm90ZTogVGhpcyBpcyBkZXRlcm1pbmVk IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiwgaS5lLiB3ZSBkb24ndCBrbm93IGlmIHRoZQorICog YWxsb2NhdGlvbiBnb3QgdG8gdXNlIGh1Z2UgcGFnZXMuIFNvIHVubGVzcyBodWdlX3BhZ2Vz PW9mZiB3ZSBhc3N1bWUgd2UncmUKKyAqIHVzaW5nIGh1Z2UgcGFnZXMuCisgKgorICogVGhp cyBtaW5pbWFsIHNpemUgcmVxdWlyZW1lbnQgb25seSBtYXR0ZXJzIGZvciB0aGUgcGVyLW5v ZGUgYW1vdW50IG9mCisgKiBtZW1vcnksIG5vdCBmb3IgdGhlIGluZGl2aWR1YWwgcGFydGl0 aW9ucy4gVGhlIHBhcnRpdGlvbnMgZm9yIHRoZSBzYW1lCisgKiBub2RlIGFyZSBhIGNvbnRp Z3VvdXMgY2h1bmsgb2YgbWVtb3J5LCB3aGljaCBjYW4gYmUgc3BsaXQgYXJiaXRyYXJpbHks CisgKiBpdCdzIGluZGVwZW5kZW50IG9mIHRoZSBOVU1BIGdyYW51bGFyaXR5LgorICoKKyAq IFhYWCBUaGlzIHBhdGNoIG9ubHkgaW1wbGVtZW50cyBwbGFjaW5nIHRoZSBidWZmZXJzIG9u dG8gZGlmZmVyZW50IE5VTUEKKyAqIG5vZGVzLiBUaGUgZnJlZWxpc3QvY2xvY2tzd2VlcCBw YXJ0aXRpb25pbmcgaXMgaW1wbGVtZW50ZWQgaW4gc2VwYXJhdGUKKyAqIHBhdGNoZXMgZWFy bGllciBpbiB0aGUgcGF0Y2ggc2VyaWVzLiBUaG9zZSBwYXRjaGVzIGhvd2V2ZXIgdXNlIHRo ZSBzYW1lCisgKiBidWZmZXIgcGFydGl0aW9uIHJlZ2lzdHJ5LCB0byBhbGlnbiB0aGUgcGFy dGl0aW9ucy4KKyAqCisgKgorICogWFhYIFRoaXMgbmVlZHMgdG8gY29uc2lkZXIgdGhlIG1p bmltdW0gY2h1bmsgc2l6ZSwgaS5lLiB3ZSBjYW4ndCBzcGxpdAorICogYnVmZmVycyBiZXlv bmQgc29tZSBwb2ludCwgYXQgc29tZSBwb2ludCBpdCBnZXRzIHdlIHJ1biBpbnRvIHRoZSBz aXplIG9mCisgKiBidWZmZXIgZGVzY3JpcHRvcnMuIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBn aXZlIHByZWZlcmVuY2UgdG8gb25lIG9mIHRoZXNlCisgKiAocHJvYmFibHkgYXQgbGVhc3Qg cHJpbnQgYSB3YXJuaW5nKS4KKyAqCisgKiBYWFggV2Ugd2FudCB0byBkbyB0aGlzIGV2ZW4g d2l0aCBudW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZT1mYWxzZSwgc28gdGhhdCB0aGUKKyAqIG90 aGVyIHBhdGNoZXMgY2FuIGRvIHRoZWlyIHBhcnRpdGlvbmluZy4gQnV0IGluIHRoYXQgY2Fz ZSB3ZSBkb24ndCBuZWVkIHRvCisgKiBlbmZvcmNlIHRoZSBtaW4gY2h1bmsgc2l6ZSAocHJv YmFibHkpPworICoKKyAqIFhYWCBXZSBuZWVkIHRvIG9ubHkgY2FsbCB0aGlzIG9uY2UsIHdo ZW4gc2l6aW5nIHRoZSBtZW1vcnkuIEJ1dCBhdCB0aGF0CisgKiBwb2ludCB3ZSBkb24ndCBr bm93IGlmIHdlIGdldCB0byB1c2UgaHVnZSBwYWdlcyBvciBub3QgKHVubGVzcyB3aGVuIGh1 Z2UKKyAqIHBhZ2VzIGFyZSBkaXNhYmxlZCkuIFdlJ2xsIHByb2NlZWQgYXMgaWYgdGhlIGh1 Z2UgcGFnZXMgd2VyZSB1c2VkLCBhbmQgd2UKKyAqIG1heSBoYXZlIHRvIHVzZSBsYXJnZXIg cGFydGl0aW9ucy4gTWF5YmUgdGhlcmUncyBzb21lIHNvcnQgb2YgZmFsbGJhY2ssCisgKiBi dXQgZm9yIG5vdyB3ZSBzaW1wbHkgZGlzYWJsZSB0aGUgTlVNQSBwYXJ0aXRpb25pbmcgLSBp dCBzaW1wbHkgbWVhbnMgdGhlCisgKiBzaGFyZWQgYnVmZmVycyBhcmUgdG9vIHNtYWxsLgor ICoKKyAqIFhYWCBXZSBkb24ndCBuZWVkIHRvIG1ha2UgZWFjaCBwYXJ0aXRpb24gYSBtdWx0 aXBsZSBvZiBtaW5fcGFydGl0aW9uX3NpemUuCisgKiBUaGF0J3Mgc29tZXRoaW5nIHdlIG5l ZWQgdG8gZG8gZm9yIGEgbm9kZSAoYmVjYXVzZSBOVU1BIHdvcmtzIGF0IGdyYW51bGFyaXR5 CisgKiBvZiBwYWdlcyksIGJ1dCBwYXJ0aXRpb25zIGZvciBhIHNpbmdsZSBub2RlIGNhbiBz cGxpdCB0aGF0IGFyYml0cmFyaWx5LgorICogQWx0aG91Z2gga2VlcGluZyB0aGUgc2l6ZXMg cG93ZXItb2YtdHdvIHdvdWxkIGFsbG93IGNhbGN1bGF0aW5nIGV2ZXJ5dGhpbmcKKyAqIGFz IHNoaWZ0L21hc2ssIHdpdGhvdXQgZXhwZW5zaXZlIGRpdmlzaW9uL21vZHVsbyBvcGVyYXRp b25zLgorICovCitzdGF0aWMgdm9pZAorYnVmZmVyX3BhcnRpdGlvbnNfcHJlcGFyZSh2b2lk KQoreworCS8qCisJICogTWluaW11bSBudW1iZXIgb2YgYnVmZmVycyB3ZSBjYW4gYWxsb2Nh dGUgdG8gYSBOVU1BIG5vZGUgKGRldGVybWluZWQgYnkKKwkgKiBob3cgbWFueSBCdWZmZXJE ZXNjcmlwdG9ycyBmaXQgb250byBhIG1lbW9yeSBwYWdlKS4KKwkgKi8KKwlpbnQJCQltaW5f bm9kZV9idWZmZXJzOworCisJLyoKKwkgKiBNYXhpbXVtIG51bWJlciBvZiBub2RlcyB3ZSBj YW4gc3BsaXQgc2hhcmVkIGJ1ZmZlcnMgdG8sIGFzc3VtaW5nIGVhY2gKKwkgKiBub2RlIGdl dHMgdGhlIHNtYWxsZXN0IGFsbG9jYXRhYmxlIGNodW5rICh0aGUgbGFzdCBub2RlIGNhbiBn ZXQgYQorCSAqIHNtYWxsZXIgYW1vdW50IG9mIG1lbW9yeSwgbm90IHRoZSBmdWxsIGNodW5r KS4KKwkgKi8KKwlpbnQJCQltYXhfbm9kZXM7CisKKwkvKgorCSAqIEhvdyBtYW55IHBhcnRp dGlvbnMgdG8gY3JlYXRlIHBlciBub2RlLiBDb3VsZCBiZSBtb3JlIHRoYW4gMSBmb3Igc21h bGwKKwkgKiBudW1iZXIgb2Ygbm9kZXMgKG9mIG5vbi1OVU1BIHN5c3RlbXMpLgorCSAqLwor CWludAkJCW51bV9wYXJ0aXRpb25zX3Blcl9ub2RlOworCisJLyogYmFpbCBvdXQgaWYgYWxy ZWFkeSBpbml0aWFsaXplZCAoY2FsY3VsYXRlIG9ubHkgb25jZSkgKi8KKwlpZiAobnVtYV9u b2RlcyAhPSAtMSkKKwkJcmV0dXJuOworCisJLyogWFhYIG9ubHkgZ2l2ZXMgdXMgdGhlIG51 bWJlciwgdGhlIG5vZGVzIG1heSBub3QgYmUgMCwgMSwgMiwgLi4uICovCisjaWYgVVNFX0xJ Qk5VTUEKKwludW1hX25vZGVzID0gbnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpOworI2Vs c2UKKwkvKiB3aXRob3V0IE5VTUEsIGFzc3VtZSB0aGVyZSdzIGp1c3Qgb25lIG5vZGUgKi8K KwludW1hX25vZGVzID0gMTsKKyNlbmRpZgorCisJLyogd2Ugc2hvdWxkIG5ldmVyIGdldCBo ZXJlIHdpdGhvdXQgYXQgbGVhc3Qgb25lIE5VTUEgbm9kZSAqLworCUFzc2VydChudW1hX25v ZGVzID4gMCk7CisKKwkvKgorCSAqIFhYWCBBIGJpdCB3ZWlyZC4gRG8gd2UgbmVlZCB0byB3 b3JyeSBhYm91dCBwb3N0bWFzdGVyPyBDb3VsZCB0aGlzIGV2ZW4KKwkgKiBydW4gb3V0c2lk ZSBwb3N0bWFzdGVyPyBJIGRvbid0IHRoaW5rIHNvLgorCSAqCisJICogWFhYIEFub3RoZXIg aXNzdWUgaXMgd2UgbWF5IGdldCBkaWZmZXJlbnQgdmFsdWVzIHRoYW4gd2hlbiBzaXppbmcg dGhlCisJICogdGhlIG1lbW9yeSwgYmVjYXVzZSBhdCB0aGF0IHBvaW50IHdlIGRpZG4ndCBr bm93IGlmIHdlIGdldCBodWdlIHBhZ2VzLAorCSAqIHNvIHdlIGFzc3VtZWQgd2Ugd2lsbC4g U2hvdWxkbid0IGNhdXNlIGNyYXNoZXMsIGJ1dCB3ZSBtaWdodCBhbGxvY2F0ZQorCSAqIHNo YXJlZCBtZW1vcnkgYW5kIHRoZW4gbm90IHVzZSBzb21lIG9mIGl0IChiZWNhdXNlIG9mIHRo ZSBhbGlnbm1lbnQKKwkgKiB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IG5lZWQpLiBOb3Qgc3Vy ZSBhYm91dCBiZXR0ZXIgd2F5LCBnb29kIGZvciBub3cuCisJICovCisJbnVtYV9wYWdlX3Np emUgPSBwZ19udW1hX3BhZ2Vfc2l6ZSgpOworCisJLyogbWFrZSBzdXJlIHRoZSBjaHVua3Mg d2lsbCBhbGlnbiBuaWNlbHkgKi8KKwlBc3NlcnQoQkxDS1NaICUgc2l6ZW9mKEJ1ZmZlckRl c2NQYWRkZWQpID09IDApOworCUFzc2VydChudW1hX3BhZ2Vfc2l6ZSAlIHNpemVvZihCdWZm ZXJEZXNjUGFkZGVkKSA9PSAwKTsKKwlBc3NlcnQoKChCTENLU1ogJSBudW1hX3BhZ2Vfc2l6 ZSkgPT0gMCkgfHwgKChudW1hX3BhZ2Vfc2l6ZSAlIEJMQ0tTWikgPT0gMCkpOworCisJLyoK KwkgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgYnVmZmVycyB3ZSBjYW4gYWxsb2NhdGUgZnJv bSBhIHNpbmdsZSBub2RlLCB1c2luZworCSAqIHRoZSBtZW1vcnkgcGFnZSBzaXplIChkZXRl cm1pbmVkIGJ5IGJ1ZmZlciBkZXNjcmlwdG9ycykuIE5VTUEgYWxsb2NhdGVzCisJICogbWVt b3J5IGluIHBhZ2VzLCBhbmQgd2UgbmVlZCB0byBkbyB0aGF0IGZvciBib3RoIGJ1ZmZlcnMg YW5kCisJICogZGVzY3JpcHRvcnMgYXQgdGhlIHNhbWUgdGltZS4KKwkgKgorCSAqIEluIHBy YWN0aWNlIHRoZSBCTENLU1ogZG9lc24ndCByZWFsbHkgbWF0dGVyLCBiZWNhdXNlIGl0J3Mg bXVjaCBsYXJnZXIKKwkgKiB0aGFuIEJ1ZmZlckRlc2NQYWRkZWQsIHNvIHRoZSByZXN1bHQg aXMgZGV0ZXJtaW5lZCBidWZmZXIgZGVzY3JpcHRvcnMuCisJICovCisJbWluX25vZGVfYnVm ZmVycyA9IChudW1hX3BhZ2Vfc2l6ZSAvIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSk7CisK KwkvKgorCSAqIE1heGltdW0gbnVtYmVyIG9mIG5vZGVzIChlYWNoIGdldHRpbmcgbWluX25v ZGVfYnVmZmVycykgd2UgY2FuIGhhbmRsZQorCSAqIGdpdmVuIHRoZSBjdXJyZW50IHNoYXJl ZCBidWZmZXJzIHNpemUuIFRoZSBsYXN0IG5vZGUgaXMgYWxsb3dlZCB0byBiZQorCSAqIHNt YWxsZXIgKGhhbGYgb2YgdGhlIG90aGVyIG5vZGVzKS4KKwkgKi8KKwltYXhfbm9kZXMgPSAo TkJ1ZmZlcnMgKyAobWluX25vZGVfYnVmZmVycyAvIDIpKSAvIG1pbl9ub2RlX2J1ZmZlcnM7 CisKKwkvKgorCSAqIENhbiB3ZSBhY3R1YWxseSBkbyBOVU1BIHBhcnRpdGlvbmluZyB3aXRo IHRoZXNlIHNldHRpbmdzPyBJZiB3ZSBjYW4ndAorCSAqIGhhbmRsZSB0aGUgY3VycmVudCBu dW1iZXIgb2Ygbm9kZXMsIHRoZW4gbm8uCisJICoKKwkgKiBYWFggVGhpcyBzaG91bGRuJ3Qg YmUgYSBiaWcgaXNzdWUgaW4gcHJhY3RpY2UuIE5VTUEgc3lzdGVtcyB0eXBpY2FsbHkKKwkg KiBydW4gd2l0aCBsYXJnZSBzaGFyZWQgYnVmZmVycywgd2hpY2ggYWxzbyBtYWtlcyB0aGUg aW1iYWxhbmNlIGlzc3VlcworCSAqIGZhaXJseSBzaWduaWZpY2FudCAoaXQncyBxdWljayB0 byByZWJhbGFuY2UgMTI4TUIsIG11Y2ggc2xvd2VyIHRvIGRvCisJICogdGhhdCBmb3IgMjU2 R0IpLgorCSAqLworCW51bWFfY2FuX3BhcnRpdGlvbiA9IHRydWU7CS8qIGFzc3VtZSB3ZSBj YW4gYWxsb2NhdGUgdG8gbm9kZXMgKi8KKwlpZiAobnVtYV9ub2RlcyA+IG1heF9ub2RlcykK Kwl7CisJCWVsb2coTk9USUNFLCAic2hhcmVkIGJ1ZmZlcnMgdG9vIHNtYWxsIGZvciAlZCBu b2RlcyAobWF4IG5vZGVzICVkKSIsCisJCQkgbnVtYV9ub2RlcywgbWF4X25vZGVzKTsKKwkJ bnVtYV9jYW5fcGFydGl0aW9uID0gZmFsc2U7CisJfQorCWVsc2UgaWYgKChudW1hX2ZsYWdz ICYgTlVNQV9CVUZGRVJTKSA9PSAwKQorCXsKKwkJZWxvZyhOT1RJQ0UsICJOVU1BLXBhcnRp dGlvbmluZyBvZiBidWZmZXJzIGRpc2FibGVkIik7CisJCW51bWFfY2FuX3BhcnRpdGlvbiA9 IGZhbHNlOworCX0KKworCS8qCisJICogV2Uga25vdyB3ZSBjYW4gcGFydGl0aW9uIHRvIHRo ZSBkZXNpcmVkIG51bWJlciBvZiBub2Rlcywgbm93IGl0J3MgdGltZQorCSAqIHRvIGZpZ3Vy ZSBvdXQgaG93IG1hbnkgcGFydGl0aW9ucyB3ZSBuZWVkIHBlciBub2RlLiBXZSBzaW1wbHkg YWRkCisJICogcGFydGl0aW9ucyBwZXIgbm9kZSB1bnRpbCB3ZSByZWFjaCBNSU5fQlVGRkVS X1BBUlRJVElPTlMuCisJICoKKwkgKiBYWFggTWF5YmUgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0 byBrZWVwIHRoZSBhY3R1YWwgcGFydGl0aW9uIHNpemUgYSBwb3dlcgorCSAqIG9mIDIsIHRv IG1ha2UgdGhlIGNhbGN1bGF0aW9ucyBzaW1wbGVyIChzaGlmdCBpbnN0ZWFkIG9mIG1vZCku CisJICovCisJbnVtX3BhcnRpdGlvbnNfcGVyX25vZGUgPSAxOworCisJd2hpbGUgKG51bWFf bm9kZXMgKiBudW1fcGFydGl0aW9uc19wZXJfbm9kZSA8IE1JTl9CVUZGRVJfUEFSVElUSU9O UykKKwkJbnVtX3BhcnRpdGlvbnNfcGVyX25vZGUrKzsKKworCS8qIG5vdyB3ZSBrbm93IHRo ZSB0b3RhbCBudW1iZXIgb2YgcGFydGl0aW9ucyAqLworCW51bWFfcGFydGl0aW9ucyA9IChu dW1hX25vZGVzICogbnVtX3BhcnRpdGlvbnNfcGVyX25vZGUpOworCisJLyoKKwkgKiBGaW5h bGx5LCBjYWxjdWxhdGUgaG93IG1hbnkgYnVmZmVycyB3ZSdsbCBhc3NpZ24gdG8gYSBzaW5n bGUgTlVNQSBub2RlLgorCSAqIElmIHdlIGhhdmUgb25seSBhIHNpbmdsZSBub2RlLCBvciB3 aGVuIHdlIGNhbid0IHBhcnRpdGlvbiBmb3Igc29tZQorCSAqIHJlYXNvbiwganVzdCB0YWtl IGEgImZhaXIgc2hhcmUiIG9mIGJ1ZmZlcnMuIFRoaXMgY2FuIGhhcHBlbiBmb3IgYQorCSAq IG51bWJlciBvZiByZWFzb25zIC0gbWlzc2luZyBOVU1BIHN1cHBvcnQsIHBhcnRpdGlvbmlu ZyBvZiBidWZmZXJzIG5vdAorCSAqIGVuYWJsZWQsIG9yIG5vdCBlbm91Z2ggYnVmZmVycyBm b3IgdGhpcyBtYW55IG5vZGVzLgorCSAqCisJICogV2Ugc3RpbGwgYnVpbGQgcGFydGl0aW9u cywgYmVjYXVzZSB3ZSB3YW50IHRvIGFsbG93IHBhcnRpdGlvbmluZyBvZgorCSAqIHRoZSBj bG9jay1zd2VlcCBsYXRlci4KKwkgKgorCSAqIFRoZSBudW1iZXIgb2YgYnVmZmVycyBmb3Ig ZWFjaCBwYXJ0aXRpb24gaXMgY2FsY3VsYXRlZCBsYXRlciwgb25jZSB3ZQorCSAqIGhhdmUg YWxsb2NhdGVkIHRoZSBzaGFyZWQgbWVtb3J5IChiZWNhdXNlIHRoYXQncyB3aGVyZSB3ZSBz dG9yZSBpdCkuCisJICoKKwkgKiBYWFggSW4gYm90aCBjYXNlcyB0aGUgbGFzdCBub2RlIGNh biBnZXQgZmV3ZXIgYnVmZmVycy4KKwkgKi8KKwlpZiAoIW51bWFfY2FuX3BhcnRpdGlvbikK Kwl7CisJCW51bWFfYnVmZmVyc19wZXJfbm9kZSA9IChOQnVmZmVycyArIChudW1hX25vZGVz IC0gMSkpIC8gbnVtYV9ub2RlczsKKwl9CisJZWxzZQorCXsKKwkJbnVtYV9idWZmZXJzX3Bl cl9ub2RlID0gbWluX25vZGVfYnVmZmVyczsKKwkJd2hpbGUgKG51bWFfYnVmZmVyc19wZXJf bm9kZSAqIG51bWFfbm9kZXMgPCBOQnVmZmVycykKKwkJCW51bWFfYnVmZmVyc19wZXJfbm9k ZSArPSBtaW5fbm9kZV9idWZmZXJzOworCisJCS8qIHRoZSBsYXN0IG5vZGUgc2hvdWxkIGdl dCBhdCBsZWFzdCBzb21lIGJ1ZmZlcnMgKi8KKwkJQXNzZXJ0KE5CdWZmZXJzIC0gKG51bWFf bm9kZXMgLSAxKSAqIG51bWFfYnVmZmVyc19wZXJfbm9kZSA+IDApOworCX0KKworCWVsb2co REVCVUcxLCAiTlVNQTogYnVmZmVycyAlZCBwYXJ0aXRpb25zICVkIG51bV9ub2RlcyAlZCBw ZXJfbm9kZSAlZCBidWZmZXJzX3Blcl9ub2RlICVkIChtaW4gJWQpIiwKKwkJIE5CdWZmZXJz LCBudW1hX3BhcnRpdGlvbnMsIG51bWFfbm9kZXMsIG51bV9wYXJ0aXRpb25zX3Blcl9ub2Rl LAorCQkgbnVtYV9idWZmZXJzX3Blcl9ub2RlLCBtaW5fbm9kZV9idWZmZXJzKTsKK30KKwog LyoKICAqIFNhbml0eSBjaGVja3Mgb2YgYnVmZmVycyBwYXJ0aXRpb25zIC0gdGhlcmUgbXVz dCBiZSBubyBnYXBzLCBpdCBtdXN0IGNvdmVyCiAgKiB0aGUgd2hvbGUgcmFuZ2Ugb2YgYnVm ZmVycywgZXRjLgpAQCAtMjY3LDMzICs1ODUsMTM3IEBAIGJ1ZmZlcl9wYXJ0aXRpb25zX2lu aXQodm9pZCkKIHsKIAlpbnQJCQlyZW1haW5pbmdfYnVmZmVycyA9IE5CdWZmZXJzOwogCWlu dAkJCWJ1ZmZlciA9IDA7CisJaW50CQkJcGFydHNfcGVyX25vZGUgPSAobnVtYV9wYXJ0aXRp b25zIC8gbnVtYV9ub2Rlcyk7CisJY2hhcgkgICAqYnVmZmVyc19wdHIsCisJCQkgICAqZGVz Y3JpcHRvcnNfcHRyOwogCi0JLyogbnVtYmVyIG9mIGJ1ZmZlcnMgcGVyIHBhcnRpdGlvbiAo bWFrZSBzdXJlIHRvIG5vdCBvdmVyZmxvdykgKi8KLQlpbnQJCQlwYXJ0X2J1ZmZlcnMKLQkJ PSAoKGludDY0KSBOQnVmZmVycyArIChOVU1fQ0xPQ0tfU1dFRVBfUEFSVElUSU9OUyAtIDEp KSAvIE5VTV9DTE9DS19TV0VFUF9QQVJUSVRJT05TOwotCi0JQnVmZmVyUGFydGl0aW9uc0Fy cmF5LT5ucGFydGl0aW9ucyA9IE5VTV9DTE9DS19TV0VFUF9QQVJUSVRJT05TOworCUJ1ZmZl clBhcnRpdGlvbnNBcnJheS0+bnBhcnRpdGlvbnMgPSBudW1hX3BhcnRpdGlvbnM7CisJQnVm ZmVyUGFydGl0aW9uc0FycmF5LT5ubm9kZXMgPSBudW1hX25vZGVzOwogCi0JZm9yIChpbnQg biA9IDA7IG4gPCBCdWZmZXJQYXJ0aXRpb25zQXJyYXktPm5wYXJ0aXRpb25zOyBuKyspCisJ Zm9yIChpbnQgbiA9IDA7IG4gPCBudW1hX25vZGVzOyBuKyspCiAJewotCQlCdWZmZXJQYXJ0 aXRpb24gKnBhcnQgPSAmQnVmZmVyUGFydGl0aW9uc0FycmF5LT5wYXJ0aXRpb25zW25dOwor CQkvKiBidWZmZXJzIHRoaXMgbm9kZSBzaG91bGQgZ2V0IChsYXN0IG5vZGUgY2FuIGdldCBm ZXdlcikgKi8KKwkJaW50CQkJbm9kZV9idWZmZXJzID0gTWluKHJlbWFpbmluZ19idWZmZXJz LCBudW1hX2J1ZmZlcnNfcGVyX25vZGUpOwogCi0JCS8qIGJ1ZmZlcnMgdGhpcyBwYXJ0aXRp b24gc2hvdWxkIGdldCAobGFzdCBwYXJ0aXRpb24gY2FuIGdldCBmZXdlcikgKi8KLQkJaW50 CQkJbnVtX2J1ZmZlcnMgPSBNaW4ocmVtYWluaW5nX2J1ZmZlcnMsIHBhcnRfYnVmZmVycyk7 CisJCS8qIHNwbGl0IG5vZGUgYnVmZmVycyBuZXR3ZWVuIHBhcnRpdGlvbnMgKGxhc3Qgb25l IGNhbiBnZXQgZmV3ZXIpICovCisJCWludAkJCXBhcnRfYnVmZmVycyA9IChub2RlX2J1ZmZl cnMgKyAocGFydHNfcGVyX25vZGUgLSAxKSkgLyBwYXJ0c19wZXJfbm9kZTsKIAotCQlyZW1h aW5pbmdfYnVmZmVycyAtPSBudW1fYnVmZmVyczsKKwkJcmVtYWluaW5nX2J1ZmZlcnMgLT0g bm9kZV9idWZmZXJzOwogCi0JCUFzc2VydCgobnVtX2J1ZmZlcnMgPiAwKSAmJiAobnVtX2J1 ZmZlcnMgPD0gcGFydF9idWZmZXJzKSk7Ci0JCUFzc2VydCgoYnVmZmVyID49IDApICYmIChi dWZmZXIgPCBOQnVmZmVycykpOworCQlBc3NlcnQoKG5vZGVfYnVmZmVycyA+IDApICYmIChu b2RlX2J1ZmZlcnMgPD0gTkJ1ZmZlcnMpKTsKKwkJQXNzZXJ0KChuID49IDApICYmIChuIDwg bnVtYV9ub2RlcykpOworCisJCWZvciAoaW50IHAgPSAwOyBwIDwgcGFydHNfcGVyX25vZGU7 IHArKykKKwkJeworCQkJaW50CQkJaWR4ID0gKG4gKiBwYXJ0c19wZXJfbm9kZSkgKyBwOwor CQkJQnVmZmVyUGFydGl0aW9uICpwYXJ0ID0gJkJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+cGFy dGl0aW9uc1tpZHhdOworCQkJaW50CQkJbnVtX2J1ZmZlcnMgPSBNaW4obm9kZV9idWZmZXJz LCBwYXJ0X2J1ZmZlcnMpOwogCi0JCXBhcnQtPm51bV9idWZmZXJzID0gbnVtX2J1ZmZlcnM7 Ci0JCXBhcnQtPmZpcnN0X2J1ZmZlciA9IGJ1ZmZlcjsKLQkJcGFydC0+bGFzdF9idWZmZXIg PSBidWZmZXIgKyAobnVtX2J1ZmZlcnMgLSAxKTsKKwkJCUFzc2VydCgoaWR4ID49IDApICYm IChpZHggPCBudW1hX3BhcnRpdGlvbnMpKTsKKwkJCUFzc2VydCgoYnVmZmVyID49IDApICYm IChidWZmZXIgPCBOQnVmZmVycykpOworCQkJQXNzZXJ0KChudW1fYnVmZmVycyA+IDApICYm IChudW1fYnVmZmVycyA8PSBwYXJ0X2J1ZmZlcnMpKTsKIAotCQlidWZmZXIgKz0gbnVtX2J1 ZmZlcnM7CisJCQkvKiBYWFggd2Ugc2hvdWxkIGdldCB0aGUgYWN0dWFsIG5vZGUgSUQgZnJv bSB0aGUgbWFzayAqLworCQkJaWYgKG51bWFfY2FuX3BhcnRpdGlvbikKKwkJCQlwYXJ0LT5u dW1hX25vZGUgPSBuOworCQkJZWxzZQorCQkJCXBhcnQtPm51bWFfbm9kZSA9IC0xOworCisJ CQlwYXJ0LT5udW1fYnVmZmVycyA9IG51bV9idWZmZXJzOworCQkJcGFydC0+Zmlyc3RfYnVm ZmVyID0gYnVmZmVyOworCQkJcGFydC0+bGFzdF9idWZmZXIgPSBidWZmZXIgKyAobnVtX2J1 ZmZlcnMgLSAxKTsKKworCQkJZWxvZyhERUJVRzEsICJOVU1BOiBidWZmZXIgJWQgbm9kZSAl ZCBwYXJ0aXRpb24gJWQgYnVmZmVycyAlZCBmaXJzdCAlZCBsYXN0ICVkIiwgaWR4LCBuLCBw LCBudW1fYnVmZmVycywgYnVmZmVyLCBidWZmZXIgKyAobnVtX2J1ZmZlcnMgLSAxKSk7CisK KwkJCWJ1ZmZlciArPSBudW1fYnVmZmVyczsKKwkJCW5vZGVfYnVmZmVycyAtPSBwYXJ0X2J1 ZmZlcnM7CisJCX0KIAl9CiAKIAlBc3NlcnRDaGVja0J1ZmZlclBhcnRpdGlvbnMoKTsKKwor CS8qCisJICogV2l0aCBidWZmZXJzIGludGVybGVhdmluZyBkaXNhYmxlZCAob3IgY2FuJ3Qg cGFydGl0aW9uLCBiZWNhdXNlIG9mCisJICogc2hhcmVkIGJ1ZmZlcnMgYmVpbmcgdG9vIHNt YWxsKSwgd2UncmUgZG9uZS4KKwkgKi8KKwlpZiAoKChudW1hX2ZsYWdzICYgTlVNQV9CVUZG RVJTKSA9PSAwKSB8fCAhbnVtYV9jYW5fcGFydGl0aW9uKQorCQlyZXR1cm47CisKKwkvKgor CSAqIEFzc2lnbiBjaHVua3Mgb2YgYnVmZmVycyBhbmQgYnVmZmVyIGRlc2NyaXB0b3JzIHRv IHRoZSBhdmFpbGFibGUgTlVNQQorCSAqIG5vZGVzLiBXZSBjYW4ndCB1c2UgdGhlIHJlZ3Vs YXIgaW50ZXJsZWF2aW5nLCBiZWNhdXNlIHdpdGggcmVndWxhcgorCSAqIG1lbW9yeSBwYWdl cyAoc21hbGxlciB0aGFuIEJMQ0tTWikgd2UnZCBzcGxpdCBhbGwgYnVmZmVycyB0byBtdWx0 aXBsZQorCSAqIE5VTUEgbm9kZXMuIEFuZCB3ZSBkb24ndCB3YW50IHRoYXQuCisJICoKKwkg KiBCdXQgZXZlbiB3aXRoIGh1Z2UgcGFnZXMgaXQgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYSB0 byBub3QgbWFwIHBhZ2VzCisJICogb25lIGJ5IG9uZS4KKwkgKgorCSAqIFNvIHdlIGFsd2F5 cyBhc3NpZ24gYSBsYXJnZXIgY29udGlndW91cyBjaHVuayBvZiBidWZmZXJzIHRvIHRoZSBz YW1lCisJICogTlVNQSBub2RlLCBhcyBjYWxjdWxhdGVkIGJ5IGNob29zZV9jaHVua19idWZm ZXJzKCkuIFdlIHRyeSB0byBrZWVwIHRoZQorCSAqIGNodW5rcyBsYXJnZSBlbm91Z2ggdG8g d29yayBib3RoIGZvciBidWZmZXJzIGFuZCBidWZmZXIgZGVzY3JpcHRvcnMsCisJICogYnV0 IG5vdCB0b28gbGFyZ2UuIFNlZSB0aGUgY29tbWVudHMgYXQgY2hvb3NlX2NodW5rX2J1ZmZl cnMoKSBmb3IKKwkgKiBkZXRhaWxzLgorCSAqCisJICogVGhhbmtzIHRvIHRoZSBlYXJsaWVy IGFsaWdubWVudCAodG8gbWVtb3J5IHBhZ2UgZXRjLiksIHdlIGtub3cgdGhlCisJICogYnVm ZmVycyB3b24ndCBnZXQgc3BsaXQsIGV0Yy4KKwkgKgorCSAqIFRoaXMgYWxzbyBtYWtlcyBp dCBlYXNpZXIgLyBzdHJhaWdodGZvcndhcmQgdG8gY2FsY3VsYXRlIHdoaWNoIE5VTUEKKwkg KiBub2RlIGEgYnVmZmVyIGJlbG9uZ3MgdG8gKGl0J3MgYSBtYXR0ZXIgb2YgZGl2aWRlICsg bW9kKS4gU2VlCisJICogQnVmZmVyR2V0Tm9kZSgpLgorCSAqCisJICogV2UgbmVlZCB0byBh Y2NvdW50IGZvciBwYXJ0aXRpb25zIGJlaW5nIG9mIGRpZmZlcmVudCBsZW5ndGgsIHdoZW4g dGhlCisJICogTkJ1ZmZlcnMgaXMgbm90IG5pY2VseSBkaXZpc2libGUuIFRvIGRvIHRoYXQg d2Uga2VlcCB0cmFjayBvZiB0aGUgc3RhcnQKKwkgKiBvZiB0aGUgbmV4dCBwYXJ0aXRpb24u CisJICoKKwkgKiBXZSBhbHdheXMgbWFwIGFsbCBwYXJ0aXRpb25zIGZvciB0aGUgc2FtZSBu b2RlIGF0IG9uY2UsIHNvIHRoYXQgd2UKKwkgKiBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0 IGFsaWdubWVudCBvZiBtZW1vcnkgcGFnZXMgdGhhdCBnZXQgc3BsaXQKKwkgKiBiZXR3ZWVu IHBhcnRpdGlvbnMgKHdlIG9ubHkgd29ycnkgYWJvdXQgbWluX25vZGVfYnVmZmVycyBmb3Ig d2hvbGUKKwkgKiBOVU1BIG5vZGVzLCBub3QgZm9yIGluZGl2aWR1YWwgcGFydGl0aW9ucyku CisJICovCisJYnVmZmVyc19wdHIgPSBCdWZmZXJCbG9ja3M7CisJZGVzY3JpcHRvcnNfcHRy ID0gKGNoYXIgKikgQnVmZmVyRGVzY3JpcHRvcnM7CisKKwlmb3IgKGludCBuID0gMDsgbiA8 IG51bWFfbm9kZXM7IG4rKykKKwl7CisJCWNoYXIJICAgKnN0YXJ0cHRyLAorCQkJCSAgICpl bmRwdHI7CisJCWludAkJCW51bV9idWZmZXJzID0gMDsKKworCQkvKiBzdW0gYnVmZmVycyBp biBhbGwgcGFydGl0aW9ucyBmb3IgdGhpcyBub2RlICovCisJCWZvciAoaW50IHAgPSAwOyBw IDwgcGFydHNfcGVyX25vZGU7IHArKykKKwkJeworCQkJaW50CQlwaWR4ID0gKG4gKiBwYXJ0 c19wZXJfbm9kZSArIHApOworCQkJQnVmZmVyUGFydGl0aW9uICpwYXJ0ID0gJkJ1ZmZlclBh cnRpdGlvbnNBcnJheS0+cGFydGl0aW9uc1twaWR4XTsKKworCQkJQXNzZXJ0KHBhcnQtPm51 bWFfbm9kZSA9PSBuKTsKKworCQkJbnVtX2J1ZmZlcnMgKz0gcGFydC0+bnVtX2J1ZmZlcnM7 CisJCX0KKworCQkvKiBmaXJzdCBtYXAgYnVmZmVycyAqLworCQlzdGFydHB0ciA9IGJ1ZmZl cnNfcHRyOworCQllbmRwdHIgPSBzdGFydHB0ciArICgoU2l6ZSkgbnVtX2J1ZmZlcnMgKiBC TENLU1opOworCQlidWZmZXJzX3B0ciA9IGVuZHB0cjsJLyogc3RhcnQgb2YgdGhlIG5leHQg cGFydGl0aW9uICovCisKKwkJZWxvZyhERUJVRzEsICJOVU1BOiBidWZmZXJfcGFydGl0aW9u c19pbml0OiAlZCA9PiBidWZmZXJzICVkIHN0YXJ0ICVwIGVuZCAlcCAoc2l6ZSAlemQpIiwK KwkJCSBuLCBudW1fYnVmZmVycywgc3RhcnRwdHIsIGVuZHB0ciwgKGVuZHB0ciAtIHN0YXJ0 cHRyKSk7CisKKwkJcGdfbnVtYV9tb3ZlX3RvX25vZGUoc3RhcnRwdHIsIGVuZHB0ciwgbik7 CisKKwkJLyogbm93IGRvIHRoZSBzYW1lIGZvciBidWZmZXIgZGVzY3JpcHRvcnMgKi8KKwkJ c3RhcnRwdHIgPSBkZXNjcmlwdG9yc19wdHI7CisJCWVuZHB0ciA9IHN0YXJ0cHRyICsgKChT aXplKSBudW1fYnVmZmVycyAqIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSk7CisJCWRlc2Ny aXB0b3JzX3B0ciA9IGVuZHB0cjsKKworCQllbG9nKERFQlVHMSwgIk5VTUE6IGJ1ZmZlcl9w YXJ0aXRpb25zX2luaXQ6ICVkID0+IGRlc2NyaXB0b3JzICVkIHN0YXJ0ICVwIGVuZCAlcCAo c2l6ZSAlemQpIiwKKwkJCSBuLCBudW1fYnVmZmVycywgc3RhcnRwdHIsIGVuZHB0ciwgKGVu ZHB0ciAtIHN0YXJ0cHRyKSk7CisKKwkJcGdfbnVtYV9tb3ZlX3RvX25vZGUoc3RhcnRwdHIs IGVuZHB0ciwgbik7CisJfQorCisJLyogd2Ugc2hvdWxkIGhhdmUgY29uc3VtZWQgdGhlIGFy cmF5cyBleGFjdGx5ICovCisJQXNzZXJ0KGJ1ZmZlcnNfcHRyID09IEJ1ZmZlckJsb2NrcyAr IChTaXplKSBOQnVmZmVycyAqIEJMQ0tTWik7CisJQXNzZXJ0KGRlc2NyaXB0b3JzX3B0ciA9 PSAoY2hhciAqKSBCdWZmZXJEZXNjcmlwdG9ycyArIChTaXplKSBOQnVmZmVycyAqIHNpemVv ZihCdWZmZXJEZXNjUGFkZGVkKSk7CiB9CiAKIGludApAQCAtMzAyLDE0ICs3MjQsMjEgQEAg QnVmZmVyUGFydGl0aW9uQ291bnQodm9pZCkKIAlyZXR1cm4gQnVmZmVyUGFydGl0aW9uc0Fy cmF5LT5ucGFydGl0aW9uczsKIH0KIAoraW50CitCdWZmZXJQYXJ0aXRpb25Ob2Rlcyh2b2lk KQoreworCXJldHVybiBCdWZmZXJQYXJ0aXRpb25zQXJyYXktPm5ub2RlczsKK30KKwogdm9p ZAotQnVmZmVyUGFydGl0aW9uR2V0KGludCBpZHgsIGludCAqbnVtX2J1ZmZlcnMsCitCdWZm ZXJQYXJ0aXRpb25HZXQoaW50IGlkeCwgaW50ICpub2RlLCBpbnQgKm51bV9idWZmZXJzLAog CQkJCSAgIGludCAqZmlyc3RfYnVmZmVyLCBpbnQgKmxhc3RfYnVmZmVyKQogewogCWlmICgo aWR4ID49IDApICYmIChpZHggPCBCdWZmZXJQYXJ0aXRpb25zQXJyYXktPm5wYXJ0aXRpb25z KSkKIAl7CiAJCUJ1ZmZlclBhcnRpdGlvbiAqcGFydCA9ICZCdWZmZXJQYXJ0aXRpb25zQXJy YXktPnBhcnRpdGlvbnNbaWR4XTsKIAorCQkqbm9kZSA9IHBhcnQtPm51bWFfbm9kZTsKIAkJ Km51bV9idWZmZXJzID0gcGFydC0+bnVtX2J1ZmZlcnM7CiAJCSpmaXJzdF9idWZmZXIgPSBw YXJ0LT5maXJzdF9idWZmZXI7CiAJCSpsYXN0X2J1ZmZlciA9IHBhcnQtPmxhc3RfYnVmZmVy OwpAQCAtMzIyLDggKzc1MSw4MiBAQCBCdWZmZXJQYXJ0aXRpb25HZXQoaW50IGlkeCwgaW50 ICpudW1fYnVmZmVycywKIAogLyogcmV0dXJuIHBhcmFtZXRlcnMgYmVmb3JlIHRoZSBwYXJ0 aXRpb25zIGFyZSBpbml0aWFsaXplZCAoZHVyaW5nIHNpemluZykgKi8KIHZvaWQKLUJ1ZmZl clBhcnRpdGlvblBhcmFtcyhpbnQgKm51bV9wYXJ0aXRpb25zKQorQnVmZmVyUGFydGl0aW9u UGFyYW1zKGludCAqbnVtX3BhcnRpdGlvbnMsIGludCAqbnVtX25vZGVzKQogewogCWlmIChu dW1fcGFydGl0aW9ucykKLQkJKm51bV9wYXJ0aXRpb25zID0gTlVNX0NMT0NLX1NXRUVQX1BB UlRJVElPTlM7CisJCSpudW1fcGFydGl0aW9ucyA9IG51bWFfcGFydGl0aW9uczsKKworCWlm IChudW1fbm9kZXMpCisJCSpudW1fbm9kZXMgPSBudW1hX25vZGVzOworfQorCisvKiBYWFgg dGhlIEdVQyBob29rcyBzaG91bGQgcHJvYmFibHkgYmUgc29tZXdoZXJlIGVsc2U/ICovCiti b29sCitjaGVja19kZWJ1Z19udW1hKGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwgR3Vj U291cmNlIHNvdXJjZSkKK3sKKwlib29sCQlyZXN1bHQgPSB0cnVlOworCWludAkJCWZsYWdz OworCisjaWYgVVNFX0xJQk5VTUEgPT0gMAorCWlmIChzdHJjbXAoKm5ld3ZhbCwgIiIpICE9 IDApCisJeworCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJcIiVzXCIgaXMgbm90IHN1cHBvcnRl ZCBvbiB0aGlzIHBsYXRmb3JtLiIsCisJCQkJCQkJImRlYnVnX251bWEiKTsKKwkJcmVzdWx0 ID0gZmFsc2U7CisJfQorCWZsYWdzID0gMDsKKyNlbHNlCisJTGlzdAkgICAqZWxlbWxpc3Q7 CisJTGlzdENlbGwgICAqbDsKKwljaGFyCSAgICpyYXdzdHJpbmc7CisKKwkvKiBOZWVkIGEg bW9kaWZpYWJsZSBjb3B5IG9mIHN0cmluZyAqLworCXJhd3N0cmluZyA9IHBzdHJkdXAoKm5l d3ZhbCk7CisKKwlpZiAoIVNwbGl0R1VDTGlzdChyYXdzdHJpbmcsICcsJywgJmVsZW1saXN0 KSkKKwl7CisJCUdVQ19jaGVja19lcnJkZXRhaWwoIkludmFsaWQgbGlzdCBzeW50YXggaW4g cGFyYW1ldGVyIFwiJXNcIi4iLAorCQkJCQkJCSJkZWJ1Z19udW1hIik7CisJCXBmcmVlKHJh d3N0cmluZyk7CisJCWxpc3RfZnJlZShlbGVtbGlzdCk7CisJCXJldHVybiBmYWxzZTsKKwl9 CisKKwlmbGFncyA9IDA7CisJZm9yZWFjaChsLCBlbGVtbGlzdCkKKwl7CisJCWNoYXIJICAg Kml0ZW0gPSAoY2hhciAqKSBsZmlyc3QobCk7CisKKwkJaWYgKHBnX3N0cmNhc2VjbXAoaXRl bSwgImJ1ZmZlcnMiKSA9PSAwKQorCQkJZmxhZ3MgfD0gTlVNQV9CVUZGRVJTOworCQllbHNl CisJCXsKKwkJCUdVQ19jaGVja19lcnJkZXRhaWwoIkludmFsaWQgb3B0aW9uIFwiJXNcIi4i LCBpdGVtKTsKKwkJCXJlc3VsdCA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlw ZnJlZShyYXdzdHJpbmcpOworCWxpc3RfZnJlZShlbGVtbGlzdCk7CisjZW5kaWYKKworCWlm ICghcmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogU2F2ZSB0aGUgZmxhZ3MgaW4g KmV4dHJhLCBmb3IgdXNlIGJ5IGFzc2lnbl9kZWJ1Z19pb19kaXJlY3QgKi8KKwkqZXh0cmEg PSBndWNfbWFsbG9jKExPRywgc2l6ZW9mKGludCkpOworCWlmICghKmV4dHJhKQorCQlyZXR1 cm4gZmFsc2U7CisJKigoaW50ICopICpleHRyYSkgPSBmbGFnczsKKworCXJldHVybiByZXN1 bHQ7Cit9CisKK3ZvaWQKK2Fzc2lnbl9kZWJ1Z19udW1hKGNvbnN0IGNoYXIgKm5ld3ZhbCwg dm9pZCAqZXh0cmEpCit7CisJaW50CQkgICAqZmxhZ3MgPSAoaW50ICopIGV4dHJhOworCisJ bnVtYV9mbGFncyA9ICpmbGFnczsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYnVmZmVyL2ZyZWVsaXN0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVl bGlzdC5jCmluZGV4IDhiZTc3YTljOGIxLi44MTBhNTQ5ZWZjZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYworKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCkBAIC0xMjQsNyArMTI0LDkgQEAgdHlwZWRlZiBz dHJ1Y3QKIAkvL2ludAkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoNjQpKSkgYmd3cHJvY25v OwogCiAJLyogaW5mbyBhYm91dCBmcmVlbGlzdCBwYXJ0aXRpb25pbmcgKi8KKwlpbnQJCQlu dW1fbm9kZXM7CQkvKiBlZmZlY3RpdmVseSBudW1iZXIgb2YgTlVNQSBub2RlcyAqLwogCWlu dAkJCW51bV9wYXJ0aXRpb25zOworCWludAkJCW51bV9wYXJ0aXRpb25zX3Blcl9ub2RlOwog CiAJLyogY2xvY2tzd2VlcCBwYXJ0aXRpb25zICovCiAJQ2xvY2tTd2VlcAlzd2VlcHNbRkxF WElCTEVfQVJSQVlfTUVNQkVSXTsKQEAgLTI3MCwxNiArMjcyLDcyIEBAIENsb2NrU3dlZXBU aWNrKENsb2NrU3dlZXAgKnN3ZWVwKQogICogY2FsY3VsYXRlX3BhcnRpdGlvbl9pbmRleAog ICoJCWNhbGN1bGF0ZSB0aGUgYnVmZmVyIC8gY2xvY2stc3dlZXAgcGFydGl0aW9uIHRvIHVz ZQogICoKLSAqIHVzZSBQSUQgdG8gZGV0ZXJtaW5lIHRoZSBidWZmZXIgcGFydGl0aW9uCi0g KgotICogWFhYIFdlIGNvdWxkIHVzZSBOVU1BIG5vZGUgLyBjb3JlIElEIHRvIHBpY2sgcGFy dGl0aW9uLCBidXQgd2UnZCBuZWVkCi0gKiB0byBoYW5kbGUgY2FzZXMgd2l0aCBmZXdlciBu b2Rlcy9jb3JlcyB0aGFuIHBhcnRpdGlvbnMgc29tZWhvdy4gQWx0aG91Z2gsCi0gKiBtYXli ZSB0aGUgYmFsYW5jaW5nIHdvdWxkIGhhbmRsZSB0aGF0IHRvby4KKyAqIFdpdGggbGlibnVt YSwgdXNlIHRoZSBOVU1BIG5vZGUgYW5kIENQVSB0byBwaWNrIHRoZSBwYXJ0aXRpb24uIE90 aGVyd2lzZQorICogdXNlIGp1c3QgUElEIGluc3RlYWQgb2YgQ1BVICh3ZSBhc3N1bWUgZXZl cnl0aGluZyBpcyBhIHNpbmdsZSBOVU1BIG5vZGUpLgogICovCiBzdGF0aWMgaW50CiBjYWxj dWxhdGVfcGFydGl0aW9uX2luZGV4KHZvaWQpCiB7Ci0JcmV0dXJuIChNeVByb2NQaWQgJSBT dHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zKTsKKwlpbnQJCWNwdSwKKwkJCW5vZGUs CisJCQlpbmRleDsKKworCS8qCisJICogVGhlIGJ1ZmZlcnMgYXJlIHBhcnRpdGlvbmVkLCBz byBkZXRlcm1pbmUgdGhlIENQVS9OVU1BIG5vZGUsIGFuZCBwaWNrIGEKKwkgKiBwYXJ0aXRp b24gYmFzZWQgb24gdGhhdC4KKwkgKgorCSAqIFdpdGhvdXQgTlVNQSBhc3N1bWUgZXZlcnl0 aGluZyBpcyBhIHNpbmdsZSBOVU1BIG5vZGUsIGFuZCB3ZSBwaWNrIHRoZQorCSAqIHBhcnRp dGlvbiBiYXNlZCBvbiBQSUQgKHdlIG1heSBub3QgaGF2ZSBzY2hlZF9nZXRjcHUpLgorCSAq LworI2lmZGVmIFVTRV9MSUJOVU1BCisJY3B1ID0gc2NoZWRfZ2V0Y3B1KCk7CisKKwlpZiAo Y3B1IDwgMCkKKwkJZWxvZyhFUlJPUiwgInNjaGVkX2dldGNwdSBmYWlsZWQ6ICVtIik7CisK Kwlub2RlID0gbnVtYV9ub2RlX29mX2NwdShjcHUpOworI2Vsc2UKKwljcHUgPSBNeVByb2NQ aWQ7CisJbm9kZSA9IDA7CisjZW5kaWYKKworCUFzc2VydChTdHJhdGVneUNvbnRyb2wtPm51 bV9wYXJ0aXRpb25zID09CisJCSAgIChTdHJhdGVneUNvbnRyb2wtPm51bV9ub2RlcyAqIFN0 cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnNfcGVyX25vZGUpKTsKKworCS8qCisJICog WFhYIFdlIHNob3VsZCd0IGdldCBub2RlcyB0aGF0IHdlIGhhdmVuJ3QgY29uc2lkZXJlZCB3 aGlsZSBidWlsZGluZyB0aGUKKwkgKiBwYXJ0aXRpb25zLiBNYXliZSBpZiB3ZSBhbGxvdyB0 aGlzIChlLmcuIGR1ZSB0byBzdXBwb3J0IGFkanVzdGluZyB0aGUKKwkgKiBOVU1BIHN0dWZm IGF0IHJ1bnRpbWUpLCB3ZSBzaG91bGQganVzdCBkbyBvdXIgYmVzdCB0byBtaW5pbWl6ZSB0 aGUKKwkgKiBjb25mbGljdHMgc29tZWhvdy4gQnV0IGl0J2xsIG1ha2UgdGhlIG1hcHBpbmcg aGFyZGVyLCBzbyBmb3Igbm93IHdlCisJICogaWdub3JlIGl0LgorCSAqLworCWlmIChub2Rl ID4gU3RyYXRlZ3lDb250cm9sLT5udW1fbm9kZXMpCisJCWVsb2coRVJST1IsICJub2RlIG91 dCBvZiByYW5nZTogJWQgPiAldSIsIGNwdSwgU3RyYXRlZ3lDb250cm9sLT5udW1fbm9kZXMp OworCisJLyoKKwkgKiBGaW5kIHRoZSBwYXJ0aXRpb24uIElmIHdlIGhhdmUgYSBzaW5nbGUg cGFydGl0aW9uIHBlciBub2RlLCB3ZSBjYW4KKwkgKiBjYWxjdWxhdGUgdGhlIGluZGV4IGRp cmVjdGx5IGZyb20gbm9kZS4gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gZG8gdHdvCisJICogc3Rl cHMsIHVzaW5nIG5vZGUgYW5kIHRoZW4gY3B1LgorCSAqLworCWlmIChTdHJhdGVneUNvbnRy b2wtPm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlID09IDEpCisJeworCQkvKiBmYXN0LXBhdGgg Ki8KKwkJaW5kZXggPSAobm9kZSAlIFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMp OworCX0KKwllbHNlCisJeworCQlpbnQJCQlpbmRleF9ncm91cCwKKwkJCQkJaW5kZXhfcGFy dDsKKworCQkvKiB0d28gc3RlcHMgLSBjYWxjdWxhdGUgZ3JvdXAgZnJvbSBub2RlLCBwYXJ0 aXRpb24gZnJvbSBjcHUgKi8KKwkJaW5kZXhfZ3JvdXAgPSAobm9kZSAlIFN0cmF0ZWd5Q29u dHJvbC0+bnVtX25vZGVzKTsKKwkJaW5kZXhfcGFydCA9IChjcHUgJSBTdHJhdGVneUNvbnRy b2wtPm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlKTsKKworCQlpbmRleCA9IChpbmRleF9ncm91 cCAqIFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnNfcGVyX25vZGUpCisJCQkrIGlu ZGV4X3BhcnQ7CisJfQorCisJcmV0dXJuIGluZGV4OwogfQogCiAvKgpAQCAtOTQ3LDcgKzEw MDUsNyBAQCBTdHJhdGVneVNobWVtU2l6ZSh2b2lkKQogCVNpemUJCXNpemUgPSAwOwogCWlu dAkJCW51bV9wYXJ0aXRpb25zOwogCi0JQnVmZmVyUGFydGl0aW9uUGFyYW1zKCZudW1fcGFy dGl0aW9ucyk7CisJQnVmZmVyUGFydGl0aW9uUGFyYW1zKCZudW1fcGFydGl0aW9ucywgTlVM TCk7CiAKIAkvKiBzaXplIG9mIGxvb2t1cCBoYXNoIHRhYmxlIC4uLiBzZWUgY29tbWVudCBp biBTdHJhdGVneUluaXRpYWxpemUgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQnVmVGFi bGVTaG1lbVNpemUoTkJ1ZmZlcnMgKyBOVU1fQlVGRkVSX1BBUlRJVElPTlMpKTsKQEAgLTk3 NCw5ICsxMDMyLDE3IEBAIFN0cmF0ZWd5SW5pdGlhbGl6ZShib29sIGluaXQpCiB7CiAJYm9v bAkJZm91bmQ7CiAKKwlpbnQJCQludW1fbm9kZXM7CiAJaW50CQkJbnVtX3BhcnRpdGlvbnM7 CisJaW50CQkJbnVtX3BhcnRpdGlvbnNfcGVyX25vZGU7CiAKIAludW1fcGFydGl0aW9ucyA9 IEJ1ZmZlclBhcnRpdGlvbkNvdW50KCk7CisJbnVtX25vZGVzID0gQnVmZmVyUGFydGl0aW9u Tm9kZXMoKTsKKworCS8qIGFsd2F5cyBhIG11bHRpcGxlIG9mIE5VTUEgbm9kZXMgKi8KKwlB c3NlcnQobnVtX3BhcnRpdGlvbnMgJSBudW1fbm9kZXMgPT0gMCk7CisKKwludW1fcGFydGl0 aW9uc19wZXJfbm9kZSA9IChudW1fcGFydGl0aW9ucyAvIG51bV9ub2Rlcyk7CiAKIAkvKgog CSAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBidWZmZXIgbG9va3VwIGhhc2h0YWJsZS4KQEAg LTEwMTEsNyArMTA3Nyw4IEBAIFN0cmF0ZWd5SW5pdGlhbGl6ZShib29sIGluaXQpCiAJCS8q IEluaXRpYWxpemUgdGhlIGNsb2NrIHN3ZWVwIHBvaW50ZXJzIChmb3IgYWxsIHBhcnRpdGlv bnMpICovCiAJCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3BhcnRpdGlvbnM7IGkrKykKIAkJ ewotCQkJaW50CQkJbnVtX2J1ZmZlcnMsCisJCQlpbnQJCQlub2RlLAorCQkJCQkJbnVtX2J1 ZmZlcnMsCiAJCQkJCQlmaXJzdF9idWZmZXIsCiAJCQkJCQlsYXN0X2J1ZmZlcjsKIApAQCAt MTAyMCw3ICsxMDg3LDggQEAgU3RyYXRlZ3lJbml0aWFsaXplKGJvb2wgaW5pdCkKIAkJCXBn X2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0ubmV4dFZpY3Rp bUJ1ZmZlciwgMCk7CiAKIAkJCS8qIGdldCBpbmZvIGFib3V0IHRoZSBidWZmZXIgcGFydGl0 aW9uICovCi0JCQlCdWZmZXJQYXJ0aXRpb25HZXQoaSwgJm51bV9idWZmZXJzLCAmZmlyc3Rf YnVmZmVyLCAmbGFzdF9idWZmZXIpOworCQkJQnVmZmVyUGFydGl0aW9uR2V0KGksICZub2Rl LCAmbnVtX2J1ZmZlcnMsCisJCQkJCQkJICAgJmZpcnN0X2J1ZmZlciwgJmxhc3RfYnVmZmVy KTsKIAogCQkJLyoKIAkJCSAqIEZJWE1FIFRoaXMgbWF5IG5vdCBxdWl0ZSByaWdodCwgYmVj YXVzZSBpZiBOQnVmZmVycyBpcyBub3QgYQpAQCAtMTA1Niw2ICsxMTI0LDggQEAgU3RyYXRl Z3lJbml0aWFsaXplKGJvb2wgaW5pdCkKIAogCQkvKiBpbml0aWFsaXplIHRoZSBwYXJ0aXRp b25lZCBjbG9ja3N3ZWVwICovCiAJCVN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMg PSBudW1fcGFydGl0aW9uczsKKwkJU3RyYXRlZ3lDb250cm9sLT5udW1fbm9kZXMgPSBudW1f bm9kZXM7CisJCVN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnNfcGVyX25vZGUgPSBu dW1fcGFydGl0aW9uc19wZXJfbm9kZTsKIAl9CiAJZWxzZQogCQlBc3NlcnQoIWluaXQpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCAxMTI4 MTY3YzAyNS4uODE5MmMyNzA2NmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3BhcmFtZXRlcnMuZGF0CkBAIC02MzYsNiArNjM2LDE2IEBACiAgIG9wdGlvbnMgPT4gJ2Rl YnVnX2xvZ2ljYWxfcmVwbGljYXRpb25fc3RyZWFtaW5nX29wdGlvbnMnLAogfSwKIAoreyBu YW1lID0+ICdkZWJ1Z19udW1hJywgdHlwZSA9PiAnc3RyaW5nJywgY29udGV4dCA9PiAnUEdD X1BPU1RNQVNURVInLCBncm91cCA9PiAnREVWRUxPUEVSX09QVElPTlMnLAorICBzaG9ydF9k ZXNjID0+ICdOVU1BLWF3YXJlIHBhcnRpdGlvbmluZyBvZiBzaGFyZWQgbWVtb3J5LicsCisg IGxvbmdfZGVzYyA9PiAnQW4gZW1wdHkgc3RyaW5nIGRpc2FibGVzIE5VTUEtYXdhcmUgcGFy dGl0aW9uaW5nLicsCisgIGZsYWdzID0+ICdHVUNfTElTVF9JTlBVVCB8IEdVQ19OT1RfSU5f U0FNUExFJywKKyAgdmFyaWFibGUgPT4gJ2RlYnVnX251bWFfc3RyaW5nJywKKyAgYm9vdF92 YWwgPT4gJyIiJywKKyAgY2hlY2tfaG9vayA9PiAnY2hlY2tfZGVidWdfbnVtYScsCisgIGFz c2lnbl9ob29rID0+ICdhc3NpZ25fZGVidWdfbnVtYScsCit9LAorCiB7IG5hbWUgPT4gJ2Rl YnVnX3BhcmFsbGVsX3F1ZXJ5JywgdHlwZSA9PiAnZW51bScsIGNvbnRleHQgPT4gJ1BHQ19V U0VSU0VUJywgZ3JvdXAgPT4gJ0RFVkVMT1BFUl9PUFRJT05TJywKICAgc2hvcnRfZGVzYyA9 PiAnRm9yY2VzIHRoZSBwbGFubmVyXCdzIHVzZSBwYXJhbGxlbCBxdWVyeSBub2Rlcy4nLAog ICBsb25nX2Rlc2MgPT4gJ1RoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgdGVzdGluZyB0aGUgcGFy YWxsZWwgcXVlcnkgaW5mcmFzdHJ1Y3R1cmUgYnkgZm9yY2luZyB0aGUgcGxhbm5lciB0byBn ZW5lcmF0ZSBwbGFucyB0aGF0IGNvbnRhaW4gbm9kZXMgdGhhdCBwZXJmb3JtIHR1cGxlIGNv bW11bmljYXRpb24gYmV0d2VlbiB3b3JrZXJzIGFuZCB0aGUgbWFpbiBwcm9jZXNzLicsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IDAyMDliMjA2N2EyLi40MDRl YjM0MzJmOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVz LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTU5NSw2 ICs1OTUsNyBAQCBzdGF0aWMgY2hhciAqc2VydmVyX3ZlcnNpb25fc3RyaW5nOwogc3RhdGlj IGludAlzZXJ2ZXJfdmVyc2lvbl9udW07CiBzdGF0aWMgY2hhciAqZGVidWdfaW9fZGlyZWN0 X3N0cmluZzsKIHN0YXRpYyBjaGFyICpyZXN0cmljdF9ub25zeXN0ZW1fcmVsYXRpb25fa2lu ZF9zdHJpbmc7CitzdGF0aWMgY2hhciAqZGVidWdfbnVtYV9zdHJpbmc7CiAKICNpZmRlZiBI QVZFX1NZU0xPRwogI2RlZmluZQlERUZBVUxUX1NZU0xPR19GQUNJTElUWSBMT0dfTE9DQUww CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3J0L3BnX251bWEuaCBiL3NyYy9pbmNsdWRl L3BvcnQvcGdfbnVtYS5oCmluZGV4IDlkMWVhNmQwZGI4Li45NzM0YWEzMTVmZiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcG9ydC9wZ19udW1hLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9y dC9wZ19udW1hLmgKQEAgLTE3LDYgKzE3LDEyIEBACiBleHRlcm4gUEdETExJTVBPUlQgaW50 IHBnX251bWFfaW5pdCh2b2lkKTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgcGdfbnVtYV9x dWVyeV9wYWdlcyhpbnQgcGlkLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICoqcGFnZXMs IGludCAqc3RhdHVzKTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgcGdfbnVtYV9nZXRfbWF4 X25vZGUodm9pZCk7CitleHRlcm4gUEdETExJTVBPUlQgU2l6ZSBwZ19udW1hX3BhZ2Vfc2l6 ZSh2b2lkKTsKK2V4dGVybiBQR0RMTElNUE9SVCB2b2lkIHBnX251bWFfbW92ZV90b19ub2Rl KGNoYXIgKnN0YXJ0cHRyLCBjaGFyICplbmRwdHIsIGludCBub2RlKTsKKworZXh0ZXJuIFBH RExMSU1QT1JUIGludCBudW1hX2ZsYWdzOworCisjZGVmaW5lCQlOVU1BX0JVRkZFUlMJCTB4 MDEKIAogI2lmZGVmIFVTRV9MSUJOVU1BCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvYnVmX2ludGVybmFscy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJu YWxzLmgKaW5kZXggMTExOGIzODYyMjguLjMzMzc3ODQxYzU3IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL2J1Zl9pbnRlcm5hbHMuaApAQCAtMjk5LDEwICsyOTksMTAgQEAgdHlwZWRlZiBzdHJ1 Y3QgQnVmZmVyRGVzYwogICogbGluZSBzaXplZC4KICAqCiAgKiBYWFg6IEFzIHRoaXMgaXMg cHJpbWFyaWx5IG1hdHRlcnMgaW4gaGlnaGx5IGNvbmN1cnJlbnQgd29ya2xvYWRzIHdoaWNo Ci0gKiBwcm9iYWJseSBhbGwgYXJlIDY0Yml0IHRoZXNlIGRheXMsIGFuZCB0aGUgc3BhY2Ug d2FzdGFnZSB3b3VsZCBiZSBhIGJpdAotICogbW9yZSBub3RpY2VhYmxlIG9uIDMyYml0IHN5 c3RlbXMsIHdlIGRvbid0IGZvcmNlIHRoZSBzdHJpZGUgdG8gYmUgY2FjaGUKLSAqIGxpbmUg c2l6ZWQgb24gdGhvc2UuIElmIHNvbWVib2R5IGRvZXMgYWN0dWFsIHBlcmZvcm1hbmNlIHRl c3RpbmcsIHdlIGNhbgotICogcmVldmFsdWF0ZS4KKyAqIHByb2JhYmx5IGFsbCBhcmUgNjRi aXQgdGhlc2UgZGF5cy4gV2UgZm9yY2UgdGhlIHN0cmlkZSB0byBiZSBjYWNoZSBsaW5lCisg KiBzaXplZCBldmVuIG9uIDMyYml0IHN5c3RlbXMsIHdoZXJlIHRoZSBzcGFjZSB3YXN0YWdl IGlzIGJlIGEgYml0IG1vcmUKKyAqIG5vdGljZWFibGUsIHRvIGFsbG93IHBhcnRpdGlvbmlu ZyBvZiBzaGFyZWQgYnVmZmVycyAod2hpY2ggcmVxdWlyZXMgdGhlCisgKiBtZW1vcnkgcGFn ZSBiZSBhIG11bHRpcGxlIG9mIGJ1ZmZlciBkZXNjcmlwdG9yKS4KICAqCiAgKiBOb3RlIHRo YXQgbG9jYWwgYnVmZmVyIGRlc2NyaXB0b3JzIGFyZW4ndCBmb3JjZWQgdG8gYmUgYWxpZ25l ZCAtIGFzIHRoZXJlJ3MKICAqIG5vIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRob3NlIGl0J3Mg dW5saWtlbHkgdG8gYmUgYmVuZWZpY2lhbC4KQEAgLTMxMiw3ICszMTIsNyBAQCB0eXBlZGVm IHN0cnVjdCBCdWZmZXJEZXNjCiAgKiBwbGF0Zm9ybSB3aXRoIGVpdGhlciAzMiBvciAxMjgg Ynl0ZSBsaW5lIHNpemVzLCBpdCdzIGdvb2QgdG8gYWxpZ24gdG8KICAqIGJvdW5kYXJpZXMg YW5kIGF2b2lkIGZhbHNlIHNoYXJpbmcuCiAgKi8KLSNkZWZpbmUgQlVGRkVSREVTQ19QQURf VE9fU0laRQkoU0laRU9GX1ZPSURfUCA9PSA4ID8gNjQgOiAxKQorI2RlZmluZSBCVUZGRVJE RVNDX1BBRF9UT19TSVpFCTY0CiAKIHR5cGVkZWYgdW5pb24gQnVmZmVyRGVzY1BhZGRlZAog ewpAQCAtNTU1LDggKzU1NSw4IEBAIGV4dGVybiB2b2lkIEF0RU9YYWN0X0xvY2FsQnVmZmVy cyhib29sIGlzQ29tbWl0KTsKIAogZXh0ZXJuIGludAlCdWZmZXJQYXJ0aXRpb25Db3VudCh2 b2lkKTsKIGV4dGVybiBpbnQJQnVmZmVyUGFydGl0aW9uTm9kZXModm9pZCk7Ci1leHRlcm4g dm9pZCBCdWZmZXJQYXJ0aXRpb25HZXQoaW50IGlkeCwgaW50ICpudW1fYnVmZmVycywKK2V4 dGVybiB2b2lkIEJ1ZmZlclBhcnRpdGlvbkdldChpbnQgaWR4LCBpbnQgKm5vZGUsIGludCAq bnVtX2J1ZmZlcnMsCiAJCQkJCQkJICAgaW50ICpmaXJzdF9idWZmZXIsIGludCAqbGFzdF9i dWZmZXIpOwotZXh0ZXJuIHZvaWQgQnVmZmVyUGFydGl0aW9uUGFyYW1zKGludCAqbnVtX3Bh cnRpdGlvbnMpOworZXh0ZXJuIHZvaWQgQnVmZmVyUGFydGl0aW9uUGFyYW1zKGludCAqbnVt X3BhcnRpdGlvbnMsIGludCAqbnVtX25vZGVzKTsKIAogI2VuZGlmCQkJCQkJCS8qIEJVRk1H Ul9JTlRFUk5BTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggNGU3YjFmY2Q0YWIu LjUxMDAxOGRiMTE1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTE1NiwxMCArMTU2LDEy IEBAIHR5cGVkZWYgc3RydWN0IFJlYWRCdWZmZXJzT3BlcmF0aW9uIFJlYWRCdWZmZXJzT3Bl cmF0aW9uOwogLyoKICAqIGluZm9ybWF0aW9uIGFib3V0IG9uZSBwYXJ0aXRpb24gb2Ygc2hh cmVkIGJ1ZmZlcnMKICAqCisgKiBudW1hX25vZCBzcGVjaWZpZXMgbm9kZSBmb3IgdGhpcyBw YXJ0aXRpb24gKC0xIG1lYW5zIGFsbG9jYXRlZCBvbiBhbnkgbm9kZSkKICAqIGZpcnN0L2xh c3QgYnVmZmVyIC0gdGhlIHZhbHVlcyBhcmUgaW5jbHVzaXZlCiAgKi8KIHR5cGVkZWYgc3Ry dWN0IEJ1ZmZlclBhcnRpdGlvbgogeworCWludAkJCW51bWFfbm9kZTsJCS8qIE5VTUEgbm9k ZSAoLTEgbm8gbm9kZSkgKi8KIAlpbnQJCQludW1fYnVmZmVyczsJLyogbnVtYmVyIG9mIGJ1 ZmZlcnMgKi8KIAlpbnQJCQlmaXJzdF9idWZmZXI7CS8qIGZpcnN0IGJ1ZmZlciBvZiBwYXJ0 aXRpb24gKi8KIAlpbnQJCQlsYXN0X2J1ZmZlcjsJLyogbGFzdCBidWZmZXIgb2YgcGFydGl0 aW9uICovCkBAIC0xNjksNiArMTcxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQnVmZmVyUGFydGl0 aW9uCiB0eXBlZGVmIHN0cnVjdCBCdWZmZXJQYXJ0aXRpb25zCiB7CiAJaW50CQkJbnBhcnRp dGlvbnM7CS8qIG51bWJlciBvZiBwYXJ0aXRpb25zICovCisJaW50CQkJbm5vZGVzOwkJCS8q IG51bWJlciBvZiBOVU1BIG5vZGVzICovCiAJQnVmZmVyUGFydGl0aW9uIHBhcnRpdGlvbnNb RkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0gQnVmZmVyUGFydGl0aW9uczsKIApAQCAtMzQ2 LDYgKzM0OSw3IEBAIGV4dGVybiB2b2lkIEV2aWN0UmVsVW5waW5uZWRCdWZmZXJzKFJlbGF0 aW9uIHJlbCwKIC8qIGluIGJ1Zl9pbml0LmMgKi8KIGV4dGVybiB2b2lkIEJ1ZmZlck1hbmFn ZXJTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gU2l6ZSBCdWZmZXJNYW5hZ2VyU2htZW1TaXpl KHZvaWQpOworZXh0ZXJuIGludAlCdWZmZXJHZXROb2RlKEJ1ZmZlciBidWZmZXIpOwogCiAv KiBpbiBsb2NhbGJ1Zi5jICovCiBleHRlcm4gdm9pZCBBdFByb2NFeGl0X0xvY2FsQnVmZmVy cyh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5oIGIv c3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmgKaW5kZXggODJhYzg2NDZhOGQuLjE1MzA0 ZGYwZGU1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ndWNfaG9va3MuaAorKysg Yi9zcmMvaW5jbHVkZS91dGlscy9ndWNfaG9va3MuaApAQCAtMTc1LDQgKzE3NSw3IEBAIGV4 dGVybiBib29sIGNoZWNrX3N5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzKGNoYXIgKipuZXd2 YWwsIHZvaWQgKipleHRyYSwKIAkJCQkJCQkJCQkJIEd1Y1NvdXJjZSBzb3VyY2UpOwogZXh0 ZXJuIHZvaWQgYXNzaWduX3N5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzKGNvbnN0IGNoYXIg Km5ld3ZhbCwgdm9pZCAqZXh0cmEpOwogCitleHRlcm4gYm9vbCBjaGVja19kZWJ1Z19udW1h KGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSk7CitleHRl cm4gdm9pZCBhc3NpZ25fZGVidWdfbnVtYShjb25zdCBjaGFyICpuZXd2YWwsIHZvaWQgKmV4 dHJhKTsKKwogI2VuZGlmCQkJCQkJCS8qIEdVQ19IT09LU19IICovCmRpZmYgLS1naXQgYS9z cmMvcG9ydC9wZ19udW1hLmMgYi9zcmMvcG9ydC9wZ19udW1hLmMKaW5kZXggMzM2OGE0M2Ez MzguLjhlZTBlN2QyMTFjIDEwMDY0NAotLS0gYS9zcmMvcG9ydC9wZ19udW1hLmMKKysrIGIv c3JjL3BvcnQvcGdfbnVtYS5jCkBAIC0xOCw2ICsxOCw5IEBACiAKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKICNpbmNsdWRlICJwb3J0L3BnX251bWEuaCIKKyNpbmNsdWRlICJzdG9yYWdl L3BnX3NobWVtLmgiCisKK2ludAludW1hX2ZsYWdzOwogCiAvKgogICogQXQgdGhpcyBwb2lu dCB3ZSBwcm92aWRlIHN1cHBvcnQgb25seSBmb3IgTGludXggdGhhbmtzIHRvIGxpYm51bWEs IGJ1dCBpbgpAQCAtMTA2LDYgKzEwOSwzNiBAQCBwZ19udW1hX2dldF9tYXhfbm9kZSh2b2lk KQogCXJldHVybiBudW1hX21heF9ub2RlKCk7CiB9CiAKKy8qCisgKiBwZ19udW1hX21vdmVf dG9fbm9kZQorICoJCW1vdmUgbWVtb3J5IHRvIGRpZmZlcmVudCBOVU1BIG5vZGVzIGluIGxh cmdlciBjaHVua3MKKyAqCisgKiBzdGFydHB0ciAtIHN0YXJ0IG9mIHRoZSByZWdpb24gKHNo b3VsZCBiZSBhbGlnbmVkIHRvIHBhZ2Ugc2l6ZSkKKyAqIGVuZHB0ciAtIGVuZCBvZiB0aGUg cmVnaW9uIChkb2Vzbid0IG5lZWQgdG8gYmUgYWxpZ25lZCkKKyAqIG5vZGUgLSBub2RlIHRv IG1vdmUgdGhlIG1lbW9yeSB0bworICoKKyAqIFRoZSAic3RhcnRwdHIiIGlzIGV4cGVjdGVk IHRvIGJlIGEgbXVsdGlwbGUgb2Ygc3lzdGVtIG1lbW9yeSBwYWdlIHNpemUsIGFzCisgKiBk ZXRlcm1pbmVkIGJ5IHBnX251bWFfcGFnZV9zaXplLgorICoKKyAqIFhYWCBXZSBvbmx5IGV4 cGVjdCB0byBkbyB0aGlzIGR1cmluZyBzdGFydHVwLCB3aGVuIHRoZSBzaGFyZWQgbWVtb3J5 IGlzCisgKiBzdGlsbCBiZWluZyBzZXR1cC4KKyAqLwordm9pZAorcGdfbnVtYV9tb3ZlX3Rv X25vZGUoY2hhciAqc3RhcnRwdHIsIGNoYXIgKmVuZHB0ciwgaW50IG5vZGUpCit7CisJU2l6 ZQkJc3ogPSAoZW5kcHRyIC0gc3RhcnRwdHIpOworCisJQXNzZXJ0KChpbnQ2NCkgc3RhcnRw dHIgJSBwZ19udW1hX3BhZ2Vfc2l6ZSgpID09IDApOworCisJLyoKKwkgKiBudW1hX3Rvbm9k ZV9tZW1vcnkgZG9lcyBub3QgYWN0dWFsbHkgY2F1c2UgYSBwYWdlIGZhdWx0LCBhbmQgdGh1 cyBkb2VzCisJICogbm90IGxvY2F0ZSB0aGUgbWVtb3J5IG9uIHRoZSBub2RlLiBTbyBpdCdz IGZhc3QsIGF0IGxlYXN0IGNvbXBhcmVkIHRvCisJICogcGdfbnVtYV9xdWVyeV9wYWdlcywg YW5kIGRvZXMgbm90IG1ha2Ugc3RhcnR1cCBsb25nZXIuIEJ1dCBpdCBhbHNvCisJICogbWVh bnMgdGhlIGV4cGVuc2l2ZSBwYXJ0IGhhcHBlbiBsYXRlciwgb24gdGhlIGZpcnN0IGFjY2Vz cy4KKwkgKi8KKwludW1hX3Rvbm9kZV9tZW1vcnkoc3RhcnRwdHIsIHN6LCBub2RlKTsKK30K KwogI2Vsc2UKIAogLyogRW1wdHkgd3JhcHBlcnMgKi8KQEAgLTEyOCw0ICsxNjEsMzUgQEAg cGdfbnVtYV9nZXRfbWF4X25vZGUodm9pZCkKIAlyZXR1cm4gMDsKIH0KIAordm9pZAorcGdf bnVtYV9tb3ZlX3RvX25vZGUoY2hhciAqc3RhcnRwdHIsIGNoYXIgKmVuZHB0ciwgaW50IG5v ZGUpCit7CisJLyogd2UgZG9uJ3QgZXhwZWN0IHRvIGV2ZXIgZ2V0IGhlcmUgaW4gYnVpbGRz IHdpdGhvdXQgbGlibnVtYSAqLworCUFzc2VydChmYWxzZSk7Cit9CisKKyNlbmRpZgorCitT aXplCitwZ19udW1hX3BhZ2Vfc2l6ZSh2b2lkKQoreworCVNpemUJCW9zX3BhZ2Vfc2l6ZTsK KwlTaXplCQlodWdlX3BhZ2Vfc2l6ZTsKKworI2lmZGVmIFdJTjMyCisJU1lTVEVNX0lORk8g c3lzaW5mbzsKKworCUdldFN5c3RlbUluZm8oJnN5c2luZm8pOworCW9zX3BhZ2Vfc2l6ZSA9 IHN5c2luZm8uZHdQYWdlU2l6ZTsKKyNlbHNlCisJb3NfcGFnZV9zaXplID0gc3lzY29uZihf U0NfUEFHRVNJWkUpOwogI2VuZGlmCisKKwkvKiBhc3N1bWUgaHVnZSBwYWdlcyBnZXQgdXNl ZCwgdW5sZXNzIEhVR0VfUEFHRVNfT0ZGICovCisJaWYgKGh1Z2VfcGFnZXNfc3RhdHVzICE9 IEhVR0VfUEFHRVNfT0ZGKQorCQlHZXRIdWdlUGFnZVNpemUoJmh1Z2VfcGFnZV9zaXplLCBO VUxMKTsKKwllbHNlCisJCWh1Z2VfcGFnZV9zaXplID0gMDsKKworCXJldHVybiBNYXgob3Nf cGFnZV9zaXplLCBodWdlX3BhZ2Vfc2l6ZSk7Cit9Ci0tIAoyLjUxLjEKCg== --------------Mky2abyS3YoHwGs5syrGiO88 Content-Type: text/x-patch; charset=UTF-8; name="v20251111-0005-clock-sweep-weighted-balancing.patch" Content-Disposition: attachment; filename="v20251111-0005-clock-sweep-weighted-balancing.patch" Content-Transfer-Encoding: base64 RnJvbSBjOTc2MzViZGQzNTg1OGI0NGRlMDMwMTIyNjhmNTIxNjc4Y2IxZWRjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCA2IEF1ZyAyMDI1IDAxOjA5OjU3ICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNTExMTEgNS83XSBjbG9jay1zd2VlcDogd2VpZ2h0ZWQgYmFsYW5jaW5nCgpUaGUgcGFy dGl0aW9ucyBtYXkgbm90IGJlIG9mIGV4YWN0bHkgdGhlIHNhbWUgc2l6ZSwgc28gY29uc2lk ZXIgdGhhdAp3aGVuIGJhbGFuY2luZyBjbG9ja3N3ZWVwIGFsbG9jYXRpb25zLgoKTm90ZTog VGhpcyBtYXkgYmUgbW9yZSBpbXBvcnRhbnQgd2l0aCBOVU1BLWF3YXJlIHBhcnRpdGlvbmlu Zywgd2hpY2gKcmVzdHJpY3RzIHRoZSBhbGxvd2VkIHNpemVzIG9mIHBhcnRpaW9ucyAoZXNw ZWNpYWxseSB3aXRoIGh1Z2UgcGFnZXMpLgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL2ZyZWVsaXN0LmMgfCA2MyArKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIDEgZmls ZSBjaGFuZ2VkLCA1MyBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwppbmRleCAzYWY4MmUyNjdjNi4uOGJlNzdh OWM4YjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0 LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtNjE5 LDYgKzYxOSwyMCBAQCBTdHJhdGVneVN5bmNCYWxhbmNlKHZvaWQpCiAJCQlhdmdfYWxsb2Nz LAkJCS8qIGF2ZXJhZ2UgYWxsb2NhdGlvbnMgKHBlciBwYXJ0aXRpb24pICovCiAJCQlkZWx0 YV9hbGxvY3MgPSAwOwkvKiBzdW0gb2YgYWxsb2NzIGFib3ZlIGF2ZXJhZ2UgKi8KIAorCS8q CisJICogU2l6ZSBvZiBhIHBhcnRpdGlvbiwgdXNlZCB0byBjYWxjdWxhdGUgd2VpZ2h0ZWQg YXZlcmFnZSAodGhlIGZpcnN0CisJICogcGFydGl0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIHRo ZSBsYXJnZXN0IG9uZSwgYW5kIHNvIHdpbGwgYmUgY291bnRlZAorCSAqIGFzIGEgInVuaXQi IHBhcnRpdGlvbiB3aXRoIHdlaWdodCAxLjApLgorCSAqLworCWludDMyCW51bV9idWZmZXJz ID0gU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbMF0ubnVtQnVmZmVyczsKKworCS8qCisJICog VG90YWwgd2VpZ2h0IG9mIHBhcnRpdGlvbnMuIElmIHRoZSBwYXJ0aXRpb25zIGhhdmUgdGhl IHNhbWUgc2l6ZSwKKwkgKiB0aGUgd2VpZ2h0IHNob3VsZCBiZSBlcXVhbCB0aGUgcGFydGl0 aW9uIGNvdW50IChtb2R1bG8gcm91bmRpbmcKKwkgKiBlcnJvcnMsIGV0Yy4pCisJICovCisJ ZG91YmxlCXdlaWdodCA9IDAuMDsKKwogCS8qCiAJICogQ29sbGVjdCB0aGUgbnVtYmVyIG9m IGFsbG9jYXRpb25zIHJlcXVlc3RlZCBpbiB0aGUgcGFzdCBpbnRlcnZhbC4KIAkgKiBXaGls ZSBhdCBpdCwgcmVzZXQgdGhlIGNvdW50ZXIgdG8gc3RhcnQgdGhlIG5ldyBpbnRlcnZhbC4K QEAgLTY0NSwxNiArNjU5LDI3IEBAIFN0cmF0ZWd5U3luY0JhbGFuY2Uodm9pZCkKIAkJcGdf YXRvbWljX2ZldGNoX2FkZF91NjQoJnN3ZWVwLT5udW1Ub3RhbFJlcXVlc3RlZEFsbG9jcywg YWxsb2NzW2ldKTsKIAogCQl0b3RhbF9hbGxvY3MgKz0gYWxsb2NzW2ldOworCisJCS8qIHdl aWdodCBvZiB0aGUgcGFydGl0aW9uLCByZWxhdGl2ZSB0byB0aGUgInVuaXQiIHBhcnRpdGlv biAqLworCQl3ZWlnaHQgKz0gKHN3ZWVwLT5udW1CdWZmZXJzICogMS4wIC8gbnVtX2J1ZmZl cnMpOwogCX0KIAogCS8qCi0JICogQ2FsY3VsYXRlIHRoZSAiZmFpciBzaGFyZSIgb2YgYWxs b2NhdGlvbnMgcGVyIHBhcnRpdGlvbi4KKwkgKiBYWFggTm90IHN1cmUgaWYgdGhlIHRvdGFs X3dlaWdodCBtaWdodCBleGNlZWQgbnVtX3BhcnRpdGlvbnMgZHVlIHRvCisJICogcm91bmRp bmcgZXJyb3JzLgorCSAqLworCUFzc2VydCgod2VpZ2h0ID4gMC4wKSAmJiAod2VpZ2h0IDw9 IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMpKTsKKworCS8qCisJICogQ2FsY3Vs YXRlIHRoZSAiZmFpciBzaGFyZSIgb2YgYWxsb2NhdGlvbnMgcGVyIHBhcnRpdGlvbi4gVGhp cyBpcyB0aGUKKwkgKiBudW1iZXIgb2YgYWxsb2NhdGlvbnMgZm9yIHRoZSAidW5pdCIgcGFy dGl0aW9uIHdpdGggbnVtX2J1ZmZlcnMsIHdlJ2xsCisJICogbmVlZCB0byBhZGp1c3QgaXQg dXNpbmcgdGhlIHBlci1wYXJ0aXRpb24gd2VpZ2h0LgogCSAqCiAJICogWFhYIFRoZSBsYXN0 IHBhcnRpdGlvbiBjb3VsZCBiZSBzbWFsbGVyLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBi ZQogCSAqIGV4cGVjdGVkIHRvIGhhbmRsZSBmZXdlciBhbGxvY2F0aW9ucy4gU28gdGhpcyBz aG91bGQgYmUgYSB3ZWlnaHRlZAogCSAqIGF2ZXJhZ2UuIEJ1dCBmb3Igbm93IGEgc2ltcGxl IGF2ZXJhZ2UgaXMgZ29vZCBlbm91Z2guCiAJICovCi0JYXZnX2FsbG9jcyA9ICh0b3RhbF9h bGxvY3MgLyBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zKTsKKwlhdmdfYWxsb2Nz ID0gKHRvdGFsX2FsbG9jcyAvIHdlaWdodCk7CiAKIAkvKgogCSAqIENhbGN1bGF0ZSB0aGUg ImRlbHRhIiBmcm9tIGJhbGFuY2VkIHN0YXRlLCBpLmUuIGhvdyBtYW55IGFsbG9jYXRpb25z CkBAIC02NjIsOCArNjg3LDE0IEBAIFN0cmF0ZWd5U3luY0JhbGFuY2Uodm9pZCkKIAkgKi8K IAlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnM7 IGkrKykKIAl7Ci0JCWlmIChhbGxvY3NbaV0gPiBhdmdfYWxsb2NzKQotCQkJZGVsdGFfYWxs b2NzICs9IChhbGxvY3NbaV0gLSBhdmdfYWxsb2NzKTsKKwkJQ2xvY2tTd2VlcCAqc3dlZXAg PSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV07CisKKwkJLyogbnVtYmVyIG9mIGFsbG9j YXRpb25zIGV4cGVjdGVkIGZvciB0aGlzIHBhcnRpdGlvbiAqLworCQlkb3VibGUJcGFydF93 ZWlnaHQgPSAoc3dlZXAtPm51bUJ1ZmZlcnMgKiAxLjAgLyBudW1fYnVmZmVycyk7CisJCXVp bnQzMglwYXJ0X2FsbG9jcyA9IGF2Z19hbGxvY3MgKiBwYXJ0X3dlaWdodDsKKworCQlpZiAo YWxsb2NzW2ldID4gcGFydF9hbGxvY3MpCisJCQlkZWx0YV9hbGxvY3MgKz0gKGFsbG9jc1tp XSAtIHBhcnRfYWxsb2NzKTsKIAl9CiAKIAkvKgpAQCAtNzI2LDYgKzc1NywxMCBAQCBTdHJh dGVneVN5bmNCYWxhbmNlKHZvaWQpCiAJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5 Q29udHJvbC0+c3dlZXBzW2ldOwogCQl1aW50OAkJYmFsYW5jZVtNQVhfQlVGRkVSX1BBUlRJ VElPTlNdOwogCisJCS8qIG51bWJlciBvZiBhbGxvY2F0aW9ucyBleHBlY3RlZCBmb3IgdGhp cyBwYXJ0aXRpb24gKi8KKwkJZG91YmxlCXBhcnRfd2VpZ2h0ID0gKHN3ZWVwLT5udW1CdWZm ZXJzICogMS4wIC8gbnVtX2J1ZmZlcnMpOworCQl1aW50MzIJcGFydF9hbGxvY3MgPSBhdmdf YWxsb2NzICogcGFydF93ZWlnaHQ7CisKIAkJLyogbG9jaywgd2UncmUgZ29pbmcgdG8gbW9k aWZ5IHRoZSBiYWxhbmNlIHdlaWdodHMgKi8KIAkJU3BpbkxvY2tBY3F1aXJlKCZzd2VlcC0+ Y2xvY2tfc3dlZXBfbG9jayk7CiAKQEAgLTczMyw3ICs3NjgsNyBAQCBTdHJhdGVneVN5bmNC YWxhbmNlKHZvaWQpCiAJCW1lbXNldChiYWxhbmNlLCAwLCBzaXplb2YodWludDgpICogTUFY X0JVRkZFUl9QQVJUSVRJT05TKTsKIAogCQkvKiBkb2VzIHRoaXMgcGFydGl0aW9uIGhhcyBm ZXdlciBvciBtb3JlIHRoYW4gYXZnX2FsbG9jcz8gKi8KLQkJaWYgKGFsbG9jc1tpXSA8IGF2 Z19hbGxvY3MpCisJCWlmIChhbGxvY3NbaV0gPCBwYXJ0X2FsbG9jcykKIAkJewogCQkJLyog ZmV3ZXIgLSBkb24ndCByZWRpcmVjdCBhbnkgYWxsb2NhdGlvbnMgZWxzZXdoZXJlICovCiAJ CQliYWxhbmNlW2ldID0gMTAwOwpAQCAtNzQ3LDIyICs3ODIsMzAgQEAgU3RyYXRlZ3lTeW5j QmFsYW5jZSh2b2lkKQogCQkJICogYSBmcmFjdGlvbiBwcm9wb3J0aW9uYWwgdG8gKGV4Y2Vz cy9kZWx0YSkgZnJvbSB0aGlzIG9uZS4KIAkJCSAqLwogCi0JCQkvKiBmcmFjdGlvbiBvZiB0 aGUgInRvdGFsIiBkZWx0YSAqLwotCQkJZG91YmxlCWRlbHRhX2ZyYWMgPSAoYWxsb2NzW2ld IC0gYXZnX2FsbG9jcykgKiAxLjAgLyBkZWx0YV9hbGxvY3M7CisJCQkvKiBmcmFjdGlvbiBv ZiB0aGUgInRvdGFsIiBkZWx0YSByZXByZXNlbnRlZCBieSAiZXhjZXNzIiBhbGxvY2F0aW9u cyAqLworCQkJZG91YmxlCWRlbHRhX2ZyYWMgPSAoYWxsb2NzW2ldIC0gcGFydF9hbGxvY3Mp ICogMS4wIC8gZGVsdGFfYWxsb2NzOwogCiAJCQkvKiBrZWVwIGp1c3QgZW5vdWdoIGFsbG9j YXRpb25zIHRvIG1lZXQgdGhlIHRhcmdldCAqLwotCQkJYmFsYW5jZVtpXSA9ICgxMDAuMCAq IGF2Z19hbGxvY3MgLyBhbGxvY3NbaV0pOworCQkJYmFsYW5jZVtpXSA9ICgxMDAuMCAqIHBh cnRfYWxsb2NzIC8gYWxsb2NzW2ldKTsKIAogCQkJLyogcmVkaXJlY3QgdGhlIGV4dHJhIGFs bG9jYXRpb25zICovCiAJCQlmb3IgKGludCBqID0gMDsgaiA8IFN0cmF0ZWd5Q29udHJvbC0+ bnVtX3BhcnRpdGlvbnM7IGorKykKIAkJCXsKKwkJCQlDbG9ja1N3ZWVwICpzd2VlcDIgPSAm U3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbal07CisKKwkJCQkvKiBudW1iZXIgb2YgYWxsb2Nh dGlvbnMgZXhwZWN0ZWQgZm9yIHRoaXMgcGFydGl0aW9uICovCisJCQkJZG91YmxlCXBhcnRf d2VpZ2h0XzIgPSAoc3dlZXAyLT5udW1CdWZmZXJzICogMS4wIC8gbnVtX2J1ZmZlcnMpOwor CQkJCXVpbnQzMglwYXJ0X2FsbG9jc18yID0gYXZnX2FsbG9jcyAqIHBhcnRfd2VpZ2h0XzI7 CisKIAkJCQkvKiBIb3cgbWFueSBhbGxvY2F0aW9ucyB0byByZWNlaXZlIGZyb20gaS10aCBw YXJ0aXRpb24/ICovCi0JCQkJdWludDMyCXJlY2VpdmVfYWxsb2NzID0gZGVsdGFfZnJhYyAq IChhdmdfYWxsb2NzIC0gYWxsb2NzW2pdKTsKKwkJCQl1aW50MzIJcmVjZWl2ZV9hbGxvY3Mg PSBkZWx0YV9mcmFjICogKHBhcnRfYWxsb2NzXzIgLSBhbGxvY3Nbal0pOwogCiAJCQkJLyog aWdub3JlIHBhcnRpdGlvbnMgdGhhdCBkb24ndCBuZWVkIGFkZGl0aW9uYWwgYWxsb2NhdGlv bnMgKi8KLQkJCQlpZiAoYWxsb2NzW2pdID4gYXZnX2FsbG9jcykKKwkJCQlpZiAoYWxsb2Nz W2pdID4gcGFydF9hbGxvY3NfMikKIAkJCQkJY29udGludWU7CiAKKwkJCQlBc3NlcnQocmVj ZWl2ZV9hbGxvY3MgPj0gMCk7CisKIAkJCQkvKiBmcmFjdGlvbiB0byByZWRpcmVjdCAqLwog CQkJCWJhbGFuY2Vbal0gPSAoMTAwLjAgKiByZWNlaXZlX2FsbG9jcyAvIGFsbG9jc1tpXSkg KyAwLjU7CiAJCQl9Ci0tIAoyLjUxLjEKCg== --------------Mky2abyS3YoHwGs5syrGiO88 Content-Type: text/x-patch; charset=UTF-8; name="v20251111-0004-clock-sweep-scan-all-partitions.patch" Content-Disposition: attachment; filename="v20251111-0004-clock-sweep-scan-all-partitions.patch" Content-Transfer-Encoding: base64 RnJvbSBiZTY4NGQ1OTIzODA3NjVlODU3YmNjODVmYjMyODA3YzUyMTJlOGIyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAxNSBPY3QgMjAyNSAxMzo1OToyOSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUxMTExIDQvN10gY2xvY2stc3dlZXA6IHNjYW4gYWxsIHBhcnRpdGlvbnMKCldoZW4g bG9va2luZyBmb3IgYSBmcmVlIGJ1ZmZlciwgc2NhbiBhbGwgY2xvY2stc3dlZXAgcGFydGl0 aW9ucywgbm90Cmp1c3QgdGhlICJob21lIiBvbmUuIEFsbCBidWZmZXJzIGluIHRoZSBob21l IHBhcnRpdGlvbiBtYXkgYmUgcGlubmVkLCBpbgp3aGljaCBjYXNlIHdlIHNob3VsZCBub3Qg ZmFpbC4gSW5zdGVhZCwgYWR2YW5jZSB0byB0aGUgbmV4dCBwYXJ0aXRpb24sCmluIGEgcm91 bmQtcm9iaW4gd2F5LCBhbmQgb25seSBmYWlsIGFmdGVyIHNjYW5uaW5nIHRocm91Z2ggYWxs IG9mIHRoZW0uCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyAg ICAgfCA5MSArKysrKysrKysrKysrKysrLS0tLS0tLQogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8w Mjdfc3RyZWFtX3JlZ3Jlc3MucGwgfCAgNSAtLQogMiBmaWxlcyBjaGFuZ2VkLCA2MyBpbnNl cnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIv ZnJlZWxpc3QuYwppbmRleCAxNjkwNzEwMzJiNC4uM2FmODJlMjY3YzYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtMTY3LDYgKzE2Nyw5IEBAIHN0YXRp YyBCdWZmZXJEZXNjICpHZXRCdWZmZXJGcm9tUmluZyhCdWZmZXJBY2Nlc3NTdHJhdGVneSBz dHJhdGVneSwKIHN0YXRpYyB2b2lkIEFkZEJ1ZmZlclRvUmluZyhCdWZmZXJBY2Nlc3NTdHJh dGVneSBzdHJhdGVneSwKIAkJCQkJCQlCdWZmZXJEZXNjICpidWYpOwogc3RhdGljIENsb2Nr U3dlZXAgKkNob29zZUNsb2NrU3dlZXAoYm9vbCBiYWxhbmNlKTsKK3N0YXRpYyBCdWZmZXJE ZXNjICpTdHJhdGVneUdldEJ1ZmZlclBhcnRpdGlvbihDbG9ja1N3ZWVwICpzd2VlcCwKKwkJ CQkJCQkJCQkJICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCQkJ ICB1aW50MzIgKmJ1Zl9zdGF0ZSk7CiAKIC8qCiAgKiBjbG9ja3N3ZWVwIGFsbG9jYXRpb24g YmFsYW5jaW5nCkBAIC0yMDEsMTAgKzIwNCw5IEBAIHN0YXRpYyBpbnQgY2xvY2tzd2VlcF9j b3VudCA9IDA7CiAgKiBpZCBvZiB0aGUgYnVmZmVyIG5vdyB1bmRlciB0aGUgaGFuZC4KICAq Lwogc3RhdGljIGlubGluZSB1aW50MzIKLUNsb2NrU3dlZXBUaWNrKHZvaWQpCitDbG9ja1N3 ZWVwVGljayhDbG9ja1N3ZWVwICpzd2VlcCkKIHsKIAl1aW50MzIJCXZpY3RpbTsKLQlDbG9j a1N3ZWVwICpzd2VlcCA9IENob29zZUNsb2NrU3dlZXAodHJ1ZSk7CiAKIAkvKgogCSAqIEF0 b21pY2FsbHkgbW92ZSBoYW5kIGFoZWFkIG9uZSBidWZmZXIgLSBpZiB0aGVyZSdzIHNldmVy YWwgcHJvY2Vzc2VzCkBAIC0zNzAsNyArMzcyLDggQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVm ZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpm cm9tX3IKIHsKIAlCdWZmZXJEZXNjICpidWY7CiAJaW50CQkJYmd3cHJvY25vOwotCWludAkJ CXRyeWNvdW50ZXI7CisJQ2xvY2tTd2VlcCAqc3dlZXAsCisJCQkgICAqc3dlZXBfc3RhcnQ7 CQkvKiBzdGFydGluZyBjbG9jay1zd2VlcCBwYXJ0aXRpb24gKi8KIAogCSpmcm9tX3Jpbmcg PSBmYWxzZTsKIApAQCAtNDI0LDM3ICs0MjcsNjkgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVm ZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpm cm9tX3IKIAkvKgogCSAqIFVzZSB0aGUgImNsb2NrIHN3ZWVwIiBhbGdvcml0aG0gdG8gZmlu ZCBhIGZyZWUgYnVmZmVyCiAJICoKLQkgKiBYWFggTm90ZSB0aGF0IENsb2NrU3dlZXBUaWNr KCkgaXMgTlVNQS1hd2FyZSwgaS5lLiBpdCBvbmx5IGxvb2tzIGF0Ci0JICogYnVmZmVycyBm cm9tIGEgc2luZ2xlIHBhcnRpdGlvbiwgYWxpZ25lZCB3aXRoIHRoZSBOVU1BIG5vZGUuIFRo YXQgbWVhbnMKLQkgKiBpdCBvbmx5IGFjY2Vzc2VzIGJ1ZmZlcnMgZnJvbSB0aGUgc2FtZSBO VU1BIG5vZGUuCi0JICoKLQkgKiBYWFggVGhhdCBhbHNvIG1lYW5zIGVhY2ggcHJvY2VzcyAi c3dlZXBzIiBvbmx5IGEgZnJhY3Rpb24gb2YgYnVmZmVycywKLQkgKiBldmVuIGlmIHRoZSBv dGhlciBidWZmZXJzIGFyZSBiZXR0ZXIgY2FuZGlkYXRlcyBmb3IgZXZpY3Rpb24uIE1heWJl Ci0JICogdGhlcmUgc2hvdWxkIGJlIHNvbWUgbG9naWMgdG8gInN0ZWFsIiBidWZmZXJzIGZy b20gb3RoZXIgZnJlZWxpc3RzIG9yCi0JICogb3RoZXIgbm9kZXM/CisJICogU3RhcnQgd2l0 aCB0aGUgInByZWZlcnJlZCIgcGFydGl0aW9uLCBhbmQgdGhlbiBwcm9jZWVkIGluIGEgcm91 bmQtcm9iaW4KKwkgKiBtYW5uZXIuIElmIHdlIGN5Y2xlIGJhY2sgdG8gdGhlIHN0YXJ0aW5n IHBhcnRpdGlvbiwgaXQgbWVhbnMgbm9uZSBvZiB0aGUKKwkgKiBwYXJ0aXRpb25zIGhhcyB1 bnBpbm5lZCBidWZmZXJzLgogCSAqCi0JICogWFhYIFdvdWxkIHRoYXQgYWxzbyBtZWFuIHdl J2QgaGF2ZSBtdWx0aXBsZSBiZ3dyaXRlcnMsIG9uZSBmb3IgZWFjaAotCSAqIG5vZGUsIG9y IHdvdWxkIG9uZSBiZ3dyaXRlciBoYW5kbGUgYWxsIG9mIHRoYXQ/CisJICogWFhYIERvZXMg dGhpcyBuZWVkIHRvIGRvIHNpbWlsYXIgYmFsYW5jaW5nICJiYWxhbmNpbmciIGFzIGZvciBi Z3dyaXRlcgorCSAqIGluIFN0cmF0ZWd5U3luY0JhbGFuY2U/IE1heWJlIGl0J3MgYmUgZW5v dWdoIHRvIHNpbXBseSBwaWNrIHRoZSBpbml0aWFsCisJICogcGFydGl0aW9uIHRoYXQgd2F5 PyBXZSdkIG9ubHkgZ2V0dGluZyBhIHNpbmdsZSBidWZmZXIsIHNvIG5vdCBtdWNoIGNoYW5j ZQorCSAqIHRvIGJhbGFuY2Ugb3ZlciBtYW55IGFsbG9jYXRpb25zLgogCSAqCi0JICogWFhY IFRoaXMgb25seSBzZWFyY2hlcyBhIHNpbmdsZSBwYXJ0aXRpb24sIHdoaWNoIGNhbiByZXN1 bHQgaW4gIm5vCi0JICogdW5waW5uZWQgYnVmZmVycyBhdmFpbGFibGUiIGV2ZW4gaWYgdGhl cmUgYXJlIGJ1ZmZlcnMgaW4gb3RoZXIKLQkgKiBwYXJ0aXRpb25zLiBTaG91bGQgYmUgZml4 ZWQgYnkgZmFsbGluZyBiYWNrIHRvIG90aGVyIHBhcnRpdGlvbnMgaWYKLQkgKiBuZWVkZWQu Ci0JICoKLQkgKiBYWFggQWxzbywgdGhlIHRyeWNvdW50ZXIgc2hvdWxkIG5vdCBiZSBzZXQg dG8gTkJ1ZmZlcnMsIGJ1dCB0byBidWZmZXIKLQkgKiBjb3VudCBmb3IgdGhhdCBvbmUgcGFy dGl0aW9uLiBJbiBmYWN0LCB0aGlzIHNob3VsZCBub3QgY2FsbCBDbG9ja1N3ZWVwVGljawot CSAqIGZvciBldmVyeSBpdGVyYXRpb24uIFRoZSBjYWxsIGlzIGxpa2VseSBxdWl0ZSBleHBl bnNpdmUgKGRvZXMgYSBsb3QKLQkgKiBvZiBzdHVmZiksIGFuZCBhbHNvIG1heSByZXR1cm4g YSBkaWZmZXJlbnQgcGFydGl0aW9uIG9uIGVhY2ggY2FsbC4KLQkgKiBXZSBzaG91bGQganVz dCBkbyBpdCBvbmNlLCBhbmQgdGhlbiBkbyB0aGUgZm9yKDs7KSBsb29wLiBBbmQgdGhlbgot CSAqIG1heWJlIGFkdmFuY2UgdG8gdGhlIG5leHQgcGFydGl0aW9uLCB1bnRpbCB3ZSBzY2Fu IHRocm91Z2ggYWxsIG9mIHRoZW0uCisJICogWFhYIEJ1dCBhY3R1YWxseSwgd2UncmUgY2Fs bGluZyBDaG9vc2VDbG9ja1N3ZWVwKCkgd2l0aCBiYWxhbmNlPXRydWUsIHNvCisJICogbWF5 YmUgaXQgYWxyZWFkeSBkb2VzIGJhbGFuY2luZz8KIAkgKi8KLQl0cnljb3VudGVyID0gTkJ1 ZmZlcnM7CisJc3dlZXAgPSBDaG9vc2VDbG9ja1N3ZWVwKHRydWUpOworCXN3ZWVwX3N0YXJ0 ID0gc3dlZXA7CisJZm9yICg7OykKKwl7CisJCWJ1ZiA9IFN0cmF0ZWd5R2V0QnVmZmVyUGFy dGl0aW9uKHN3ZWVwLCBzdHJhdGVneSwgYnVmX3N0YXRlKTsKKworCQkvKiBmb3VuZCBhIGJ1 ZmZlciBpbiB0aGUgInN3ZWVwIiBwYXJ0aXRpb24sIHdlJ3JlIGRvbmUgKi8KKwkJaWYgKGJ1 ZiAhPSBOVUxMKQorCQkJcmV0dXJuIGJ1ZjsKKworCQkvKgorCQkgKiBUcnkgYWR2YW5jaW5n IHRvIHRoZSBuZXh0IHBhcnRpdGlvbiwgcm91bmQtcm9iaW4gKGlmIGxhc3QgcGFydGl0aW9u LAorCQkgKiB3cmFwIGFyb3VuZCB0byB0aGUgYmVnaW5uaW5nKS4KKwkJICoKKwkJICogWFhY IFRoaXMgaXMgYSBiaXQgdWdseSwgdGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gYWR2 YW5jZSB0byB0aGUKKwkJICogbmV4dCBwYXJ0aXRpb24uCisJCSAqLworCQlpZiAoc3dlZXAg PT0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW1N0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRp dGlvbnMgLSAxXSkKKwkJCXN3ZWVwID0gU3RyYXRlZ3lDb250cm9sLT5zd2VlcHM7CisJCWVs c2UKKwkJCXN3ZWVwKys7CisKKwkJLyogd2UndmUgc2Nhbm5lZCBhbGwgcGFydGl0aW9ucyAq LworCQlpZiAoc3dlZXAgPT0gc3dlZXBfc3RhcnQpCisJCQlicmVhazsKKwl9CisKKwkvKiB3 ZSBzaG91bGRuJ3QgZ2V0IGhlcmUgaWYgdGhlcmUgYXJlIHVucGlubmVkIGJ1ZmZlcnMgKi8K KwllbG9nKEVSUk9SLCAibm8gdW5waW5uZWQgYnVmZmVycyBhdmFpbGFibGUiKTsKK30KKwor LyoKKyAqIFN0cmF0ZWd5R2V0QnVmZmVyUGFydGl0aW9uCisgKgkJZ2V0IGEgZnJlZSBidWZm ZXIgZnJvbSBhIHNpbmdsZSBjbG9jay1zd2VlcCBwYXJ0aXRpb24KKyAqCisgKiBSZXR1cm5z IE5VTEwgaWYgdGhlcmUgYXJlIG5vIGZyZWUgKHVucGlubmVkKSBidWZmZXJzIGluIHRoZSBw YXJ0aXRpb24uCisqLworc3RhdGljIEJ1ZmZlckRlc2MgKgorU3RyYXRlZ3lHZXRCdWZmZXJQ YXJ0aXRpb24oQ2xvY2tTd2VlcCAqc3dlZXAsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0 ZWd5LAorCQkJCQkJICAgdWludDMyICpidWZfc3RhdGUpCit7CisJQnVmZmVyRGVzYyAqYnVm OworCWludAkJCXRyeWNvdW50ZXI7CisKKwl0cnljb3VudGVyID0gc3dlZXAtPm51bUJ1ZmZl cnM7CiAJZm9yICg7OykKIAl7CiAJCXVpbnQzMgkJb2xkX2J1Zl9zdGF0ZTsKIAkJdWludDMy CQlsb2NhbF9idWZfc3RhdGU7CiAKLQkJYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihDbG9j a1N3ZWVwVGljaygpKTsKKwkJYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihDbG9ja1N3ZWVw VGljayhzd2VlcCkpOwogCiAJCS8qCiAJCSAqIENoZWNrIHdoZXRoZXIgdGhlIGJ1ZmZlciBj YW4gYmUgdXNlZCBhbmQgcGluIGl0IGlmIHNvLiBEbyB0aGlzCkBAIC00ODIsNyArNTE3LDcg QEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVp bnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAkJCQkJICogb25lIGV2ZW50dWFsbHks IGJ1dCBpdCdzIHByb2JhYmx5IGJldHRlciB0byBmYWlsIHRoYW4KIAkJCQkJICogdG8gcmlz ayBnZXR0aW5nIHN0dWNrIGluIGFuIGluZmluaXRlIGxvb3AuCiAJCQkJCSAqLwotCQkJCQll bG9nKEVSUk9SLCAibm8gdW5waW5uZWQgYnVmZmVycyBhdmFpbGFibGUiKTsKKwkJCQkJcmV0 dXJuIE5VTEw7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJfQpAQCAtNTAxLDcgKzUzNiw3IEBA IFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50 MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJCQkJaWYgKHBnX2F0b21pY19jb21wYXJl X2V4Y2hhbmdlX3UzMigmYnVmLT5zdGF0ZSwgJm9sZF9idWZfc3RhdGUsCiAJCQkJCQkJCQkJ CQkgICBsb2NhbF9idWZfc3RhdGUpKQogCQkJCXsKLQkJCQkJdHJ5Y291bnRlciA9IE5CdWZm ZXJzOworCQkJCQl0cnljb3VudGVyID0gc3dlZXAtPm51bUJ1ZmZlcnM7CiAJCQkJCWJyZWFr OwogCQkJCX0KIAkJCX0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDI3X3N0 cmVhbV9yZWdyZXNzLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjdfc3RyZWFtX3JlZ3Jl c3MucGwKaW5kZXggOThiMTQ2ZWQ0YjcuLjU4OWM3OWQ5N2QzIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWNvdmVyeS90LzAyN19zdHJlYW1fcmVncmVzcy5wbAorKysgYi9zcmMvdGVzdC9y ZWNvdmVyeS90LzAyN19zdHJlYW1fcmVncmVzcy5wbApAQCAtMTgsMTEgKzE4LDYgQEAgJG5v ZGVfcHJpbWFyeS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdtYXhfY29ubmVj dGlvbnMnLCAnMjUnKTsKICRub2RlX3ByaW1hcnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3Fs LmNvbmYnLAogCSdtYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zID0gMTAnKTsKIAotIyBUaGUg ZGVmYXVsdCBpcyAxTUIsIHdoaWNoIGlzIG5vdCBlbm91Z2ggd2l0aCBjbG9jay1zd2VlcCBw YXJ0aXRpb25pbmcuCi0jIEluY3JlYXNlIHRvIDMyTUIsIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0 ICJubyB1bnBpbm5lZCBidWZmZXJzIi4KLSRub2RlX3ByaW1hcnktPmFwcGVuZF9jb25mKCdw b3N0Z3Jlc3FsLmNvbmYnLAotCSdzaGFyZWRfYnVmZmVycyA9IDMyTUInKTsKLQogIyBFbmFi bGUgcGdfc3RhdF9zdGF0ZW1lbnRzIHRvIGZvcmNlIHRlc3RzIHRvIGRvIHF1ZXJ5IGp1bWJs aW5nLgogIyBwZ19zdGF0X3N0YXRlbWVudHMubWF4IHNob3VsZCBiZSBsYXJnZSBlbm91Z2gg dG8gaG9sZCBhbGwgdGhlIGVudHJpZXMKICMgb2YgdGhlIHJlZ3Jlc3Npb24gZGF0YWJhc2Uu Ci0tIAoyLjUxLjEKCg== --------------Mky2abyS3YoHwGs5syrGiO88 Content-Type: text/x-patch; charset=UTF-8; name="v20251111-0003-clock-sweep-balancing-of-allocations.patch" Content-Disposition: attachment; filename*0="v20251111-0003-clock-sweep-balancing-of-allocations.patch" Content-Transfer-Encoding: base64 RnJvbSAzOTMxNmZhYTFjOGJkMGYyMDMyMGI0NDgxY2IwYzA1YmFiMTRkZDQ2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAyOSBPY3QgMjAyNSAyMTo0NTozNCArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUxMTExIDMvN10gY2xvY2stc3dlZXA6IGJhbGFuY2luZyBvZiBhbGxvY2F0aW9ucwoK SWYgYmFja2VuZHMgb25seSBhbGxvY2F0ZSBidWZmZXJzIGZyb20gdGhlICJob21lIiBwYXJ0 aXRpb24sIHRoYXQgbWF5CmNhdXNlIHNpZ25pZmljYW50IG1pc2JhbGFuY2UuIFNvbWUgcGFy dGl0aW9ucyBtaWdodCBiZSBvdmVydXNlZCwgd2hpbGUKb3RoZXIgcGFydGl0aW9ucyB3b3Vs ZCBiZSBsZWZ0IHVudXNlZC4gSW4gb3RoZXIgd29yZHMsIHNoYXJlZCBidWZmZXJzCndvdWxk IG5vdCBiZSB1c2VkIGVmZmljaWVudGx5LgoKV2Ugd2FudCBhbGwgcGFydGl0aW9ucyB0byBi ZSB1c2VkIGFib3V0IHRoZSBzYW1lLCBpLmUuIHNlcnZlIGFib3V0IHRoZQpzYW1lIG51bWJl ciBvZiBhbGxvY2F0aW9ucy4gVG8gYWNoaWV2ZSB0aGF0LCBhbGxvY2F0aW9ucyBmcm9tIHBh cnRpdGlvbnMKdGhhdCBhcmUgInRvbyBidXN5IiBtYXkgZ2V0IHJlZGlyZWN0ZWQgdG8gb3Ro ZXIgcGFydGl0aW9ucy4gVGhlIHN5c3RlbQpjb3VudHMgYWxsb2NhdGlvbnMgcmVxdWVzdGVk IGZyb20gZWFjaCBwYXJ0aXRpb24sIGNhbGN1bGF0ZXMgdGhlICJmYWlyCnNoYXJlIiAoYXZl cmFnZSBwZXIgcGFydGl0aW9uKSwgYW5kIHRoZW4gcmVkaXJlY3RzZXhjZXNzIGFsbG9jYXRp b25zIHRvCm90aGVyIHBhcnRpdGlvbnMuCgpFYWNoIHBhcnRpdGlvbiBnZXRzIGEgc2V0IG9m IGNvZWZmaWNpZW50cyBkZXRlcm1pbmluZyB0aGUgZnJhY3Rpb24gb2YKYWxsb2NhdGlvbnMg dG8gcmVkaXJlY3QgdG8gb3RoZXIgcGFydGl0aW9ucy4gVGhlIGNvZWZmaWNpZW50cyBtYXkg YmUKaW50ZXJwcmV0ZWQgYXMgYSAiYnVkZ2V0IiBmb3IgZWFjaCBvZiB0aGUgcGFydGl0aW9u LCBpLmUuIHRoZSBudW1iZXIgb2YKYWxsb2NhdGlvbnMgdG8gc2VydmUgZnJvbSB0aGF0IHBh cnRpdGlvbiwgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dApwYXJ0aXRpb24gKGluIGEgcm91 bmQtcm9iaW4gbWFubmVyKS4KCkFsbCBvZiB0aGlzIGlzIHRpZWQgdG8gdGhlIHBhcnRpdGlv biB3aGVyZSB0aGUgYWxsb2NhdGlvbiB3YXMgcmVxdWVzdGVkLgpFYWNoIHBhcnRpdGlvbiBo YXMgYSBzZXBhcmF0ZSBzZXQgb2YgY29lZmZpY2llbnRzLgoKV2UgbWlnaHQgYWxzbyB0cmVh dCB0aGUgY29lZmZpY2llbnRzIGFzIHByb2JhYmlsaXRpZXMsIGFuZCB1c2UgUFJORyB0bwpk ZXRlcm1pbmUgd2hlcmUgdG8gZGlyZWN0IGluZGl2aWR1YWwgcmVxdWVzdHMuIEJ1dCBhIFBS Tkcgc2VlbXMgZmFpcmx5CmV4cGVuc2l2ZSwgYW5kIHRoZSBidWRnZXQgYXBwcm9hY2ggd29y a3Mgd2VsbC4KCldlIGludGVudGlvbmFsbHkga2VlcCB0aGUgImJ1ZGdldCIgZmFpcmx5IGxv dywgd2l0aCB0aGUgc3VtIGZvciBhIGdpdmVuCnBhcnRpdGlvbiAxMDAuIFRoYXQgbWVhbnMg d2UgZ2V0IHRvIHRoZSBzYW1lIHBhcnRpdGlvbiBhZnRlciBvbmx5IDEwMAphbGxvY2F0aW9u cywga2VlcGluZyBpdCBtb3JlIGJhbGFuY2VkLiBJdCB3b3VsZG4ndCBiZSBoYXJkIHRvIG1h a2UgdGhlCmJ1ZGdldHMgaGlnaGVyIChlLmcuIG1hdGNoaW5nIHRoZSBudW1iZXIgb2YgYWxs b2NhdGlvbnMgcGVyIHJvdW5kKSwgYnV0Cml0IG1pZ2h0IGFsc28gbWFrZSB0aGUgYmVoYXZp b3IgbGVzcyBzbW9vdGggKGxvbmcgcGVyaW9kIG9mIGFsbG9jYXRpb25zCmZyb20gZWFjaCBw YXJ0aXRpb24pLgoKVGhpcyBpcyB2ZXJ5IHNpbXBsZS9jaGVhcCwgYW5kIG92ZXIgbWFueSBh bGxvY2F0aW9ucyBpdCBoYXMgdGhlIHNhbWUKZWZmZWN0LiBGb3IgcGVyaW9kcyBvZiBsb3cg YWN0aXZpdHkgaXQgbWF5IGRpdmVyZ2UsIGJ1dCB0aGF0IGRvZXMgbm90Cm1hdHRlciBtdWNo ICh3ZSBjYXJlIGFib3V0IGhpZ2gtYWN0aXZpdHkgcGVyaW9kcyBtdWNoIG1vcmUpLgotLS0K IC4uLi9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsICAgICAgICAgICAgICB8ICAgNSAr LQogY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jIHwgIDQz ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgICAgfCAg IDMgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyAgICAgICAgIHwg Mzc3ICsrKysrKysrKysrKysrKysrLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJu YWxzLmggICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgg ICAgICAgICAgICAgICAgICB8ICAxMiArLQogNiBmaWxlcyBjaGFuZ2VkLCA0MTkgaW5zZXJ0 aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZm ZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsIGIvY29udHJpYi9wZ19idWZm ZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCmluZGV4IDE0ZTc1MGJlZWZm Li4yYzRkNTYwNTE0ZCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19i dWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUv cGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbApAQCAtMjEsNyArMjEsMTAgQEAgQ1JFQVRF IFZJRVcgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyBBUwogCSBudW1fcGFzc2VzIGJpZ2lu dCwJCQktLSBjbG9ja3N3ZWVwIHBhc3NlcwogCSBuZXh0X2J1ZmZlciBpbnRlZ2VyLAkJLS0g bmV4dCB2aWN0aW0gYnVmZmVyIGZvciBjbG9ja3N3ZWVwCiAJIHRvdGFsX2FsbG9jcyBiaWdp bnQsCQktLSBoYW5kbGVkIGFsbG9jcyAocnVubmluZyB0b3RhbCkKLQkgbnVtX2FsbG9jcyBi aWdpbnQpOwkJLS0gaGFuZGxlZCBhbGxvY3MgKGN1cnJlbnQgY3ljbGUpCisJIG51bV9hbGxv Y3MgYmlnaW50LAkJCS0tIGhhbmRsZWQgYWxsb2NzIChjdXJyZW50IGN5Y2xlKQorCSB0b3Rh bF9yZXFfYWxsb2NzIGJpZ2ludCwJLS0gcmVxdWVzdGVkIGFsbG9jcyAocnVubmluZyB0b3Rh bCkKKwkgbnVtX3JlcV9hbGxvY3MgYmlnaW50LAkJLS0gaGFuZGxlZCBhbGxvY3MgKGN1cnJl bnQgY3ljbGUpCisJIHdlaWdodHMgaW50W10pOwkJCS0tIGJhbGFuY2luZyB3ZWlnaHRzCiAK IC0tIERvbid0IHdhbnQgdGhlc2UgdG8gYmUgYXZhaWxhYmxlIHRvIHB1YmxpYy4KIFJFVk9L RSBBTEwgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucygpIEZST00gUFVC TElDOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNo ZV9wYWdlcy5jIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdl cy5jCmluZGV4IDE4NTZlZmI4Nzg2Li44NTM2ZTJkZWJlZiAxMDA2NDQKLS0tIGEvY29udHJp Yi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCisrKyBiL2NvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYwpAQCAtMTUsNiArMTUsOCBA QAogI2luY2x1ZGUgInBvcnQvcGdfbnVtYS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2lu dGVybmFscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAidXRp bHMvYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0 aWxzL3JlbC5oIgogCiAKQEAgLTI3LDcgKzI5LDcgQEAKICNkZWZpbmUgTlVNX0JVRkZFUkNB Q0hFX0VWSUNUX0FMTF9FTEVNIDMKIAogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfTlVNQV9F TEVNCTMKLSNkZWZpbmUgTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTQk4CisjZGVm aW5lIE5VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU0JMTEKIAogUEdfTU9EVUxFX01B R0lDX0VYVCgKIAkJCQkJLm5hbWUgPSAicGdfYnVmZmVyY2FjaGUiLApAQCAtNzk0LDYgKzc5 Niw4IEBAIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAog CWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCiAJeworCQlUeXBlQ2FjaGVFbnRyeSAqdHlwZW50 cnkgPSBsb29rdXBfdHlwZV9jYWNoZShJTlQ0T0lELCAwKTsKKwogCQlmdW5jY3R4ID0gU1JG X0ZJUlNUQ0FMTF9JTklUKCk7CiAKIAkJLyogU3dpdGNoIGNvbnRleHQgd2hlbiBhbGxvY2F0 aW5nIHN0dWZmIHRvIGJlIHVzZWQgaW4gbGF0ZXIgY2FsbHMgKi8KQEAgLTgyMyw2ICs4Mjcs MTIgQEAgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJ CQkJICAgSU5UOE9JRCwgLTEsIDApOwogCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNj LCAoQXR0ck51bWJlcikgOCwgIm51bV9hbGxvY3MiLAogCQkJCQkJICAgSU5UOE9JRCwgLTEs IDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMTAs ICJ0b3RhbF9yZXFfYWxsb2NzIiwKKwkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKKwkJVHVw bGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDExLCAibnVtX3JlcV9h bGxvY3MiLAorCQkJCQkJICAgSU5UOE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50 cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMTIsICJ3ZWlndGhzIiwKKwkJCQkJCSAgIHR5 cGVudHJ5LT50eXBhcnJheSwgLTEsIDApOwogCiAJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IEJs ZXNzVHVwbGVEZXNjKHR1cGxlZGVzYyk7CiAKQEAgLTg0MywxMSArODUzLDE3IEBAIHBnX2J1 ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJZmlyc3RfYnVm ZmVyLAogCQkJCQlsYXN0X2J1ZmZlcjsKIAotCQl1aW50NjQJCWJ1ZmZlcl90b3RhbF9hbGxv Y3M7CisJCXVpbnQ2NAkJYnVmZmVyX3RvdGFsX2FsbG9jcywKKwkJCQkJYnVmZmVyX3RvdGFs X3JlcV9hbGxvY3M7CiAKIAkJdWludDMyCQljb21wbGV0ZV9wYXNzZXMsCiAJCQkJCW5leHRf dmljdGltX2J1ZmZlciwKLQkJCQkJYnVmZmVyX2FsbG9jczsKKwkJCQkJYnVmZmVyX2FsbG9j cywKKwkJCQkJYnVmZmVyX3JlcV9hbGxvY3M7CisKKwkJaW50CQkgICAqd2VpZ2h0czsKKwkJ RGF0dW0JICAgKmR3ZWlnaHRzOworCQlBcnJheVR5cGUgICphcnJheTsKIAogCQlEYXR1bQkJ dmFsdWVzW05VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU1dOwogCQlib29sCQludWxs c1tOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNXTsKQEAgLTg1Niw4ICs4NzIsMTYg QEAgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQkJ ICAgJmZpcnN0X2J1ZmZlciwgJmxhc3RfYnVmZmVyKTsKIAogCQlDbG9ja1N3ZWVwUGFydGl0 aW9uR2V0SW5mbyhpLAotCQkJCQkJCQkgICAmY29tcGxldGVfcGFzc2VzLCAmbmV4dF92aWN0 aW1fYnVmZmVyLAotCQkJCQkJCQkgICAmYnVmZmVyX3RvdGFsX2FsbG9jcywgJmJ1ZmZlcl9h bGxvY3MpOworCQkJCQkJCQkgJmNvbXBsZXRlX3Bhc3NlcywgJm5leHRfdmljdGltX2J1ZmZl ciwKKwkJCQkJCQkJICZidWZmZXJfdG90YWxfYWxsb2NzLCAmYnVmZmVyX2FsbG9jcywKKwkJ CQkJCQkJICZidWZmZXJfdG90YWxfcmVxX2FsbG9jcywgJmJ1ZmZlcl9yZXFfYWxsb2NzLAor CQkJCQkJCQkgJndlaWdodHMpOworCisJCWR3ZWlnaHRzID0gcGFsbG9jX2FycmF5KERhdHVt LCBmdW5jY3R4LT5tYXhfY2FsbHMpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGZ1bmNjdHgt Pm1heF9jYWxsczsgaSsrKQorCQkJZHdlaWdodHNbaV0gPSBJbnQzMkdldERhdHVtKHdlaWdo dHNbaV0pOworCisJCWFycmF5ID0gY29uc3RydWN0X2FycmF5X2J1aWx0aW4oZHdlaWdodHMs IGZ1bmNjdHgtPm1heF9jYWxscywgSU5UNE9JRCk7CiAKIAkJdmFsdWVzWzBdID0gSW50MzJH ZXREYXR1bShpKTsKIAkJbnVsbHNbMF0gPSBmYWxzZTsKQEAgLTg4Myw2ICs5MDcsMTUgQEAg cGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQl2YWx1ZXNb N10gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl9hbGxvY3MpOwogCQludWxsc1s3XSA9IGZhbHNl OwogCisJCXZhbHVlc1s4XSA9IEludDY0R2V0RGF0dW0oYnVmZmVyX3RvdGFsX3JlcV9hbGxv Y3MpOworCQludWxsc1s4XSA9IGZhbHNlOworCisJCXZhbHVlc1s5XSA9IEludDY0R2V0RGF0 dW0oYnVmZmVyX3JlcV9hbGxvY3MpOworCQludWxsc1s5XSA9IGZhbHNlOworCisJCXZhbHVl c1sxMF0gPSBQb2ludGVyR2V0RGF0dW0oYXJyYXkpOworCQludWxsc1sxMF0gPSBmYWxzZTsK KwogCQkvKiBCdWlsZCBhbmQgcmV0dXJuIHRoZSB0dXBsZS4gKi8KIAkJdHVwbGUgPSBoZWFw X2Zvcm1fdHVwbGUoKFR1cGxlRGVzYykgZnVuY2N0eC0+dXNlcl9mY3R4LCB2YWx1ZXMsIG51 bGxzKTsKIAkJcmVzdWx0ID0gSGVhcFR1cGxlR2V0RGF0dW0odHVwbGUpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBhMzA5MmNlODAxZC4uODJjNjQ1YTNiMDAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC0zOTEyLDYgKzM5MTIs OSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkvKiBh c3N1bWUgd2UgY2FuIGhpYmVybmF0ZSwgYW55IHBhcnRpdGlvbiBjYW4gc2V0IHRvIGZhbHNl ICovCiAJYm9vbAkJaGliZXJuYXRlID0gdHJ1ZTsKIAorCS8qIHRyaWdnZXIgcGFydGl0aW9u IHJlYmFsYW5jaW5nIGZpcnN0ICovCisJU3RyYXRlZ3lTeW5jQmFsYW5jZSgpOworCiAJLyog Z2V0IHRoZSBudW1iZXIgb2YgY2xvY2tzd2VlcCBwYXJ0aXRpb25zLCBhbmQgdG90YWwgYWxs b2MgY291bnQgKi8KIAlTdHJhdGVneVN5bmNQcmVwYXJlKCZudW1fcGFydGl0aW9ucywgJnJl Y2VudF9hbGxvYyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2ZyZWVsaXN0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCmlu ZGV4IGQ0MGIwOWY3ZTY5Li4xNjkwNzEwMzJiNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9mcmVlbGlzdC5jCkBAIC0zNCw2ICszNCwyMyBAQAogI2RlZmluZSBJTlRfQUNDRVNT X09OQ0UodmFyKQkoKGludCkoKigodm9sYXRpbGUgaW50ICopJih2YXIpKSkpCiAKIAorLyoK KyAqIFhYWCBuZWVkZWQgZm9yIG1ha2UgQ2xvY2tTd2VlcCBmaXhlZC1zaXplLCBzaG91bGQg YmUgdGllZCB0byB0aGUgbnVtYmVyCisgKiBvZiBidWZmZXIgcGFydGl0aW9ucyAoYnVmbWdy LmMgYWxyZWFkeSBoYXMgTUFYX0NMT0NLU1dFRVBfUEFSVElUSU9OUywgc28KKyAqIGF0IGxl YXN0IHNldCBpdCB0byB0aGUgc2FtZSB2YWx1ZSkuCisgKi8KKyNkZWZpbmUgTUFYX0JVRkZF Ul9QQVJUSVRJT05TCQkzMgorCisvKgorICogQ29lZmZpY2llbnQgdXNlZCB0byBjb21iaW5l IHRoZSBvbGQgYW5kIG5ldyBiYWxhbmNlIGNvZWZmaWNpZW50cywgdXNpbmcKKyAqIHdlaWdo dGVkIGF2ZXJhZ2UuIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbW9yZSB0aGUgb2xkIHZh bHVlIGFmZmVjdHMgdGhlCisgKiByZXN1bHQuCisgKgorICogWFhYIERvZXNuJ3QgdGhpcyBp bnZhbGlkYXRlIHRoZSBpbnRlcnByZXRhdGlvbiBhcyBhIHByb2JhYmlsaXR5IHRvIGFsbG9j YXRlCisgKiBmcm9tIGEgZ2l2ZW4gcGFydGl0aW9uPyBEb2VzIGl0IHN0aWxsIHN1bSB0byAx MDAlPworICovCisjZGVmaW5lIENMT0NLU1dFRVBfSElTVE9SWV9DT0VGRgkwLjUKKwogLyoK ICAqIEluZm9ybWF0aW9uIGFib3V0IG9uZSBwYXJ0aXRpb24gb2YgdGhlIENsb2NrU3dlZXAg KG9uIGEgc3Vic2V0IG9mIGJ1ZmZlcnMpLgogICoKQEAgLTY2LDkgKzgzLDI4IEBAIHR5cGVk ZWYgc3RydWN0CiAJdWludDMyCQljb21wbGV0ZVBhc3NlczsgLyogQ29tcGxldGUgY3ljbGVz IG9mIHRoZSBjbG9jay1zd2VlcCAqLwogCXBnX2F0b21pY191aW50MzIgbnVtQnVmZmVyQWxs b2NzOwkvKiBCdWZmZXJzIGFsbG9jYXRlZCBzaW5jZSBsYXN0IHJlc2V0ICovCiAKKwkvKgor CSAqIEJ1ZmZlcnMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiB0aGlzIHBh cnRpdGlvbiAoYnV0IG1pZ2h0CisJICogaGF2ZSBiZWVuIHJlZGlyZWN0ZWQgdG8ga2VlcCBh bGxvY2F0aW9ucyBiYWxhbmNlZCkuCisJICovCisJcGdfYXRvbWljX3VpbnQzMiBudW1SZXF1 ZXN0ZWRBbGxvY3M7CisKIAkvKiBydW5uaW5nIHRvdGFsIG9mIGFsbG9jcyAqLwogCXBnX2F0 b21pY191aW50NjQgbnVtVG90YWxBbGxvY3M7CisJcGdfYXRvbWljX3VpbnQ2NCBudW1Ub3Rh bFJlcXVlc3RlZEFsbG9jczsKIAorCS8qCisJICogV2VpZ2h0cyB0byBiYWxhbmNlIGJ1ZmZl ciBhbGxvY2F0aW9ucyBmb3IgYWxsIHRoZSBwYXJ0aXRpb25zLiBFYWNoCisJICogcGFydGl0 aW9uIGdldHMgYSB2ZWN0b3Igb2Ygd2VpZ2h0cyAwLTEwMCwgZGV0ZXJtaW5pbmcgd2hhdCBm cmFjdGlvbgorCSAqIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUgZnJvbSB0aGF0IHBhcnRpY3Vs YXIuIFNvIFs3NSwgMTUsIDUsIDVdIHdvdWxkCisJICogbWVhbiA3NSUgYWxsb2NhdGlvbnMg c2hvdWxkIGdvIGZyb20gcGFydGl0aW9uIDAsIDE1JSBmcm9tIHBhcnRpdGlvbgorCSAqIDEs IGFuZCA1JSBmcm9tIHBhcnRpdGlvbnMgMiYzLiBFYWNoIHBhcnRpdGlvbiBnZXRzIGEgZGlm ZmVyZW50IHZlY3RvcgorCSAqIG9mIHdlaWdodHMuCisJICoKKwkgKiBYWFggQWxsb2NhdGUg YSBmaXhlZC1sZW5ndGggYXJyYXksIHRvIHNpbXBsaWZ5IHdvcmtpbmcgd2l0aCBhcnJheSBv ZgorCSAqIHRoZSBzdHJ1Y3RzLCBldGMuCisJICovCisJdWludDgJCWJhbGFuY2VbTUFYX0JV RkZFUl9QQVJUSVRJT05TXTsKIH0gQ2xvY2tTd2VlcDsKIAogLyoKQEAgLTEzMCw3ICsxNjYs MzMgQEAgc3RhdGljIEJ1ZmZlckRlc2MgKkdldEJ1ZmZlckZyb21SaW5nKEJ1ZmZlckFjY2Vz c1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQkJIHVpbnQzMiAqYnVmX3N0YXRlKTsKIHN0 YXRpYyB2b2lkIEFkZEJ1ZmZlclRvUmluZyhCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVn eSwKIAkJCQkJCQlCdWZmZXJEZXNjICpidWYpOwotc3RhdGljIENsb2NrU3dlZXAgKkNob29z ZUNsb2NrU3dlZXAodm9pZCk7CitzdGF0aWMgQ2xvY2tTd2VlcCAqQ2hvb3NlQ2xvY2tTd2Vl cChib29sIGJhbGFuY2UpOworCisvKgorICogY2xvY2tzd2VlcCBhbGxvY2F0aW9uIGJhbGFu Y2luZworICoKKyAqIFRvIGJhbGFuY2UgYWxsb2NhdGlvbnMgZnJvbSBjbG9ja3N3ZWVwIHBh cnRpdGlvbnMsIGVhY2ggcGFydGl0aW9uIGdldHMKKyAqIGEgc2V0IG9mICJ3ZWlnaHRzIiBk ZXRlcm1pbmluZyB0aGUgZnJhY3Rpb24gb2YgYWxsb2NhdGlvbnMgdG8gcmVkaXJlY3QKKyAq IHRvIG90aGVyIHBhcnRpdGlvbnMuCisgKgorICogV2UgY291bGQgZG8gdGhhdCBiYXNlZCBv biBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLCBidXQgdGhhdCBzZWVtcyB0b28KKyAqIGV4 cGVuc2l2ZS4gU28gaW5zdGVhZCB3ZSBzaW1wbHkgdHJlYXQgdGhlIHByb2JhYmlsaXRpZXMg YXMgYSBidWRnZXQsIGkuZS4KKyAqIGEgbnVtYmVyIG9mIGFsbG9jYXRpb25zIHRvIHNlcnZl IGZyb20gdGhhdCBwYXJ0aXRpb24sIGJlZm9yZSBtb3ZpbmcgdG8KKyAqIHRoZSBuZXh0IHBh cnRpdGlvbiAoaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIpLgorICoKKyAqIFRoaXMgaXMgdmVy eSBzaW1wbGUvY2hlYXAsIGFuZCBvdmVyIG1hbnkgYWxsb2NhdGlvbnMgaXQgaGFzIHRoZSBz YW1lCisgKiBlZmZlY3QuIEZvciBwZXJpb2RzIG9mIGxvdyBhY3Rpdml0eSBpdCBtYXkgZGl2 ZXJnZSwgYnV0IHRoYXQgZG9lcyBub3QKKyAqIG1hdHRlciBtdWNoICh3ZSBjYXJlIGFib3V0 IGhpZ2gtYWN0aXZpdHkgcGVyaW9kcyBtdWNoIG1vcmUpLgorICoKKyAqIFdlIGludGVudGlv bmFsbHkga2VlcCB0aGUgImJ1ZGdldCIgZmFpcmx5IGxvdywgd2l0aCB0aGUgc3VtIGZvciBh IGdpdmVuCisgKiBwYXJ0aXRpb24gMTAwLiBUaGF0IG1lYW5zIHdlIGdldCB0byB0aGUgc2Ft ZSBwYXJ0aXRpb24gYWZ0ZXIgb25seSAxMDAKKyAqIGFsbG9jYXRpb25zLCBrZWVwaW5nIGl0 IG1vcmUgYmFsYW5jZXMuIEl0IHdvdWxkbid0IGJlIGhhcmQgdG8gbWFrZSB0aGUKKyAqIGJ1 ZGdldHMgaGlnaGVyIChzYXksIHRvIG1hdGNoIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgYWxs b2NhdGlvbnMsIGkuZS4KKyAqIGFib3V0IHRoZSBhdmVyYWdlIG51bWJlciBvZiBhbGxvY2F0 aW9ucyBmcm9tIHRoZSBwYXN0IGludGVydmFsKS4KKyAqLworc3RhdGljIGludCBjbG9ja3N3 ZWVwX3BhcnRpdGlvbl9vcHRpbWFsID0gLTE7CitzdGF0aWMgaW50IGNsb2Nrc3dlZXBfcGFy dGl0aW9uID0gLTE7CitzdGF0aWMgaW50IGNsb2Nrc3dlZXBfY291bnQgPSAwOwogCiAvKgog ICogQ2xvY2tTd2VlcFRpY2sgLSBIZWxwZXIgcm91dGluZSBmb3IgU3RyYXRlZ3lHZXRCdWZm ZXIoKQpAQCAtMTQyLDcgKzIwNCw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDMyCiBDbG9ja1N3 ZWVwVGljayh2b2lkKQogewogCXVpbnQzMgkJdmljdGltOwotCUNsb2NrU3dlZXAgKnN3ZWVw ID0gQ2hvb3NlQ2xvY2tTd2VlcCgpOworCUNsb2NrU3dlZXAgKnN3ZWVwID0gQ2hvb3NlQ2xv Y2tTd2VlcCh0cnVlKTsKIAogCS8qCiAJICogQXRvbWljYWxseSBtb3ZlIGhhbmQgYWhlYWQg b25lIGJ1ZmZlciAtIGlmIHRoZXJlJ3Mgc2V2ZXJhbCBwcm9jZXNzZXMKQEAgLTIzMywxMSAr Mjk1LDU5IEBAIGNhbGN1bGF0ZV9wYXJ0aXRpb25faW5kZXgodm9pZCkKICAqIGFuZCB0aGF0 J3MgY2hlYXBlci4gQnV0IGhvdyB3b3VsZCB0aGF0IGRlYWwgd2l0aCBvZGQgbnVtYmVyIG9m IG5vZGVzPwogICovCiBzdGF0aWMgQ2xvY2tTd2VlcCAqCi1DaG9vc2VDbG9ja1N3ZWVwKHZv aWQpCitDaG9vc2VDbG9ja1N3ZWVwKGJvb2wgYmFsYW5jZSkKIHsKLQlpbnQJCQlpbmRleCA9 IGNhbGN1bGF0ZV9wYXJ0aXRpb25faW5kZXgoKTsKKwkvKiBXaGF0J3MgdGhlICJvcHRpbWFs IiBwYXJ0aXRpb24/ICovCisJaW50CQlpbmRleCA9IGNhbGN1bGF0ZV9wYXJ0aXRpb25faW5k ZXgoKTsKKwlDbG9ja1N3ZWVwICpzd2VlcCA9ICZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tp bmRleF07CisKKwkvKgorCSAqIERpZCB3ZSBtaWdyYXRlIHRvIGEgZGlmZmVyZW50IGNvcmUg LyBOVU1BIG5vZGUsIGFmZmVjdGluZyB0aGUKKwkgKiBjbG9ja3N3ZWVwIHBhcnRpdGlvbiB3 ZSBzaG91bGQgdXNlPyBTd2l0Y2ggdG8gdGhhdCBwYXJ0aXRpb24uCisJICovCisJaWYgKGNs b2Nrc3dlZXBfcGFydGl0aW9uX29wdGltYWwgIT0gaW5kZXgpCisJeworCQljbG9ja3N3ZWVw X3BhcnRpdGlvbl9vcHRpbWFsID0gaW5kZXg7CisJCWNsb2Nrc3dlZXBfcGFydGl0aW9uID0g aW5kZXg7CisJCWNsb2Nrc3dlZXBfY291bnQgPSBzd2VlcC0+YmFsYW5jZVtpbmRleF07CisJ fQorCisJLyogd2Ugc2hvdWxkIGhhdmUgYSB2YWxpZCBwYXJ0aXRpb24gKi8KKwlBc3NlcnQo Y2xvY2tzd2VlcF9wYXJ0aXRpb25fb3B0aW1hbCAhPSAtMSk7CisJQXNzZXJ0KGNsb2Nrc3dl ZXBfcGFydGl0aW9uICE9IC0xKTsKKworCS8qCisJICogSWYgcmViYWxhbmNpbmcgaXMgZW5h YmxlZCwgdXNlIHRoZSB3ZWlnaHRzIHRvIHJlZGlyZWN0IHRoZSBhbGxvY2F0aW9ucworCSAq IHRvIG1hdGNoIHRoZSBkZXNpcmVkIGRpc3RyaWJ1dGlvbi4gV2UgZG8gdGhhdCBieSB1c2lu ZyB0aGUgcGFydGl0aW9ucworCSAqIGluIGEgcm91bmQtcm9iaW4gd2F5LCBhZnRlciBhbGxv Y2F0aW5nIHRoZSAid2VpZ2h0IiBvZiBhbGxvY2F0aW9ucworCSAqIGZyb20gZWFjaCBwYXJ0 aXRpb25zLgorCSAqLworCWlmIChiYWxhbmNlKQorCXsKKwkJLyoKKwkJICogUmFuIG91dCBv ZiBhbGxvY2F0aW9ucyBmcm9tIHRoZSBjdXJyZW50IHBhcnRpdGlvbj8gTW92ZSB0byB0aGUK KwkJICogbmV4dCBwYXJ0aXRpb24gd2l0aCBub24temVybyB3ZWlnaHQsIGFuZCB1c2UgdGhl IHdlaWdodCBhcyBhCisJCSAqIGJ1ZGdldCBmb3IgYWxsb2NhdGlvbnMuCisJCSAqLworCQl3 aGlsZSAoY2xvY2tzd2VlcF9jb3VudCA9PSAwKQorCQl7CisJCQljbG9ja3N3ZWVwX3BhcnRp dGlvbgorCQkJCT0gKGNsb2Nrc3dlZXBfcGFydGl0aW9uICsgMSkgJSBTdHJhdGVneUNvbnRy b2wtPm51bV9wYXJ0aXRpb25zOworCisJCQlBc3NlcnQoKGNsb2Nrc3dlZXBfcGFydGl0aW9u ID49IDApICYmCisJCQkJICAgKGNsb2Nrc3dlZXBfcGFydGl0aW9uIDwgU3RyYXRlZ3lDb250 cm9sLT5udW1fcGFydGl0aW9ucykpOworCisJCQljbG9ja3N3ZWVwX2NvdW50ID0gc3dlZXAt PmJhbGFuY2VbY2xvY2tzd2VlcF9wYXJ0aXRpb25dOworCQl9CiAKLQlyZXR1cm4gJlN0cmF0 ZWd5Q29udHJvbC0+c3dlZXBzW2luZGV4XTsKKwkJLyogYWNjb3VudCBmb3IgdGhlIGFsbG9j YXRpb24gLSB0YWtlIGl0IGZyb20gdGhlIGJ1ZGdldCAqLworCQktLWNsb2Nrc3dlZXBfY291 bnQ7CisKKwkJLyogYWNjb3VudCBmb3IgdGhlIGFsbG9jIGluIHRoZSAib3B0aW1hbCIgKG9y aWdpbmFsKSBwYXJ0aXRpb24gKi8KKwkJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoJnN3ZWVw LT5udW1SZXF1ZXN0ZWRBbGxvY3MsIDEpOworCX0KKworCXJldHVybiAmU3RyYXRlZ3lDb250 cm9sLT5zd2VlcHNbY2xvY2tzd2VlcF9wYXJ0aXRpb25dOwogfQogCiAvKgpAQCAtMzA5LDcg KzQxOSw3IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0 ZWd5LCB1aW50MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJICogdGhlIHJhdGUgb2Yg YnVmZmVyIGNvbnN1bXB0aW9uLiAgTm90ZSB0aGF0IGJ1ZmZlcnMgcmVjeWNsZWQgYnkgYQog CSAqIHN0cmF0ZWd5IG9iamVjdCBhcmUgaW50ZW50aW9uYWxseSBub3QgY291bnRlZCBoZXJl LgogCSAqLwotCXBnX2F0b21pY19mZXRjaF9hZGRfdTMyKCZDaG9vc2VDbG9ja1N3ZWVwKCkt Pm51bUJ1ZmZlckFsbG9jcywgMSk7CisJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoJkNob29z ZUNsb2NrU3dlZXAoZmFsc2UpLT5udW1CdWZmZXJBbGxvY3MsIDEpOwogCiAJLyoKIAkgKiBV c2UgdGhlICJjbG9jayBzd2VlcCIgYWxnb3JpdGhtIHRvIGZpbmQgYSBmcmVlIGJ1ZmZlcgpA QCAtNDE3LDYgKzUyNywyMjQgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3Ry YXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAl9CiB9 CiAKKy8qCisgKiBTdHJhdGVneVN5bmNCYWxhbmNlCisgKgkJdXBkYXRlIHBhcnRpdGlvbiB3 ZWlnaHRzLCB0byBiYWxhbmNlIHRoZSBidWZmZXIgYWxsb2NhdGlvbnMKKyAqCisgKiBXZSB3 YW50IHRvIGdpdmUgcHJlZmVyZW5jZSB0byBhbGxvY2F0aW5nIGJ1ZmZlcnMgb24gdGhlIHNh bWUgTlVNQSBub2RlLAorICogYnV0IHRoYXQgbWlnaHQgbGVhZCB0byBpbWJhbGFuY2UgLSBh IHNpbmdsZSBwcm9jZXNzIHdvdWxkIG9ubHkgdXNlIGEKKyAqIGZyYWN0aW9uIG9mIHNoYXJl ZCBidWZmZXJzLiBXZSBkb24ndCB3YW50IHRoYXQsIHdlIHdhbnQgdG8gdXRpbGl6ZSB0aGUK KyAqIHdob2xlIHNoYXJlZCBidWZmZXJzLiBUaGUgbnVtYmVyIG9mIGFsbG9jYXRpb25zIGlu IGVhY2ggcGFydGl0aW9uIG1heQorICogYWxzbyBjaGFuZ2Ugb3ZlciB0aW1lLCBzbyB3ZSBu ZWVkIHRvIGFkYXB0IHRvIHRoYXQuCisgKgorICogVG8gYWxsb3cgdGhpcyAiYWRhcHRpdmUg YmFsYW5jaW5nIiwgZWFjaCBwYXJ0aXRpb24gaGFzIGEgc2V0IG9mIHdlaWdodHMsCisgKiBk ZXRlcm1pbmluZyB3aGF0IGZyYWN0aW9uIG9mIGFsbG9jYXRpb25zIHRvIGRpcmVjdCB0byBv dGhlciBwYXJ0aXRpb25zLgorICogRm9yIHNpbXBsaWNpdHkgdGhlIGNvZWZmaWNpZW50cyBh cmUgaW50ZWdlcnMgMC0xMDAsIGV4cHJlc3NpbmcgdGhlCisgKiBwZXJjZW50YWdlIG9mIGFs bG9jYXRpb25zIHJlZGlyZWN0ZWQgdG8gdGhhdCBwYXJ0aXRpb24uCisgKgorICogQ29uc2lk ZXIgZm9yIGV4YW1wbGUgd2VpZ2h0cyBbNTAsIDI1LCAyNSwgMF0gZm9yIG9uZSBvZiA0IHBh cnRpdGlvbnMuCisgKiBUaGlzIG1lYW5zIDUwJSBvZiBhbGxvY2F0aW9ucyB3aWxsIGJlIHJl ZGlyZWN0ZWQgdG8gcGFydGl0aW9uIDAsIDI1JQorICogdG8gcGFydGl0aW9ucyAxIGFuZCAy LCBhbmQgbm8gYWxsb2NhdGlvbnMgd2lsbCBnbyB0byBwYXJ0aXRpb24gMy4KKyAqCisgKiBU byBjYWxjdWxhdGUgdGhlc2Ugd2VpZ2h0cywgYXNzdW1lIHdlIGtub3cgdGhlIG51bWJlciBv ZiBhbGxvY2F0aW9ucworICogcmVxdWVzdGVkIGZvciBlYWNoIHBhcnRpdGlvbiBpbiB0aGUg cGFzdCBpbnRlcnZhbC4gV2UgY2FuIHVzZSB0aGlzIHRvCisgKiBjYWxjdWxhdGUgd2VpZ2h0 cyBmb3IgdGhlIGZvbGxvd2luZyBpbnRlcnZhbCwgYWltaW5nIHRvIGFsbG9jYXRlIHRoZQor ICogc2FtZSAoZmFpciBzaGFyZSkgbnVtYmVyIG9mIGJ1ZmZlcnMgZnJvbSBlYWNoIHBhcnRp dGlvbi4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGJhc2VkIG9uIG51bWJlciBvZiBhbGxvY2F0 aW9ucyAib3JpZ2luYXRpbmciIGluIGEgZ2l2ZW4KKyAqIHBhcnRpdGlvbi4gSWYgYW4gYWxs b2NhdGlvbiBpcyByZXF1ZXN0ZWQgaW4gYSBwYXJ0aXRpb24gQSwgaXQncyBjb3VudGVkCisg KiBhcyBhbGxvY2F0aW9uIGZvciBBLCBldmVuIGlmIGl0IGdldHMgcmVkaXJlY3RlZCB0byBz b21lIG90aGVyIHBhcnRpdGlvbi4KKyAqIFRoZSBwYXRjaCBhZGRlcyBhIG5ldyBjb3VudGVy IHRvIHRyYWNrIHRoaXMuCisgKgorICogVGhlIG1haW4gb2JzZXJ2YXRpb24gaXMgdGhhdCBw YXJ0aXRpb25zIGdldCBkaXZpZGVkIGludG8gdHdvIGdyb3VwcywKKyAqIGRlcGVuZGluZyBv biB3aGV0aGVyIHRoZSBudW1iZXIgYWxsb2NhdGlvbnMgaXMgaGlnaGVyIG9yIGxvd2VyIHRo YW4gdGhlCisgKiB0YXJnZXQgYXZlcmFnZS4gQnV0IHRoZSAidG90YWwgZGVsdGEiIGZvciB0 aGVzZSB0d28gZ3JvdXBzIGlzIHRoZQorICogc2FtZSwgaS5lLiBzdW0oYWJzKGFsbG9jcyAt IGF2Z19hbGxvY3MpKSBpcyB0aGUgc2FtZS4gVGhlcmVmb3JlLCB0aGUKKyAqIHRhc2sgaXMg dG8gImRpc3RyaWJ1dGUiIHRoZSBleGNlc3MgYWxsb2NhdGlvbnMgYmV0d2VlbiB0aGUgcGFy dGl0aW9ucworICogd2l0aCBub3QgZW5vdWdoIGFsbG9jYXRpb25zLgorICoKKyAqIFBhcnRp dGlvbnMgd2l0aCAobmFsbG9jcyA8IGF2Z19uYWxsb2NzKSBkb24ndCByZWRpcmVjdCBhbnkg YWxsb2NhdGlvbnMuCisgKgorICogUGFydGl0aW9ucyB3aXRoIChuYWxsb2NzID4gYXZnX25h bGxvY3MpIHJlZGlyZWN0IHRoZSBleHRyYSBhbGxvY2F0aW9ucywKKyAqIHdpdGggZWFjaCB0 YXJnZXQgYWxsb2NhdGlvbiBnZXR0aW5nIGEgcHJvcG9ydGlvbmFsIHBhcnQgKHdpdGggcmVz cGVjdAorICogdG8gdGhlIHRvdGFsIGRlbHRhKS4KKyAqCisgKiBYWFggSW4gcHJpbmNpcGxl IHdlIG1pZ2h0IGRvIHdpdGhvdXQgdGhlIG5ldyAicmVxdWVzdGVkQWxsb2NzIiBjb3VudGVy LAorICogYnV0IHdlJ2QgbmVlZCB0byBzb2x2ZSB0aGUgbWF0cml4IGVxdWF0aW9uIEF4PWIs IHdpdGggW0EsYl0ga25vd24KKyAqICh3ZWlnaHRzIGFuZCBhbGxvY3MpLCBhbmQgY2FsY3Vs YXRlIHggKHJlcXVlc3RlZCBhbGxvY3MpLiBCdXQgaXQncyBub3QKKyAqIHF1aXRlIGNsZWFy IHRoaXMnZCBhbHdheXMgaGF2ZSBhIHNvbHV0aW9uLgorICovCit2b2lkCitTdHJhdGVneVN5 bmNCYWxhbmNlKHZvaWQpCit7CisJLyogc25hcHNob3Qgb2YgYWxsb2NzIGZvciBwYXJ0aXRp b25zICovCisJdWludDMyCWFsbG9jc1tNQVhfQlVGRkVSX1BBUlRJVElPTlNdOworCisJdWlu dDMyCXRvdGFsX2FsbG9jcyA9IDAsCS8qIHRvdGFsIG51bWJlciBvZiBhbGxvY2F0aW9ucyAq LworCQkJYXZnX2FsbG9jcywJCQkvKiBhdmVyYWdlIGFsbG9jYXRpb25zIChwZXIgcGFydGl0 aW9uKSAqLworCQkJZGVsdGFfYWxsb2NzID0gMDsJLyogc3VtIG9mIGFsbG9jcyBhYm92ZSBh dmVyYWdlICovCisKKwkvKgorCSAqIENvbGxlY3QgdGhlIG51bWJlciBvZiBhbGxvY2F0aW9u cyByZXF1ZXN0ZWQgaW4gdGhlIHBhc3QgaW50ZXJ2YWwuCisJICogV2hpbGUgYXQgaXQsIHJl c2V0IHRoZSBjb3VudGVyIHRvIHN0YXJ0IHRoZSBuZXcgaW50ZXJ2YWwuCisJICoKKwkgKiBX ZSBsb2NrIHRoZSBwYXJ0aXRpb25zIG9uZSBieSBvbmUsIHNvIHRoaXMgaXMgbm90IGV4YWN0 bHkgY29uc2lzdGVudAorCSAqIHNuYXBzaG90IG9mIHRoZSBjb3VudHMsIGFuZCB0aGUgcmVz ZXRzIGhhcHBlbiBiZWZvcmUgd2UgdXBkYXRlIHRoZQorCSAqIHdlaWdodHMgdG9vLiBCdXQg d2UncmUgb25seSBsb29raW5nIGZvciBoZXVyaXN0aWNzIGFueXdheSwgc28gdGhpcworCSAq IHNob3VsZCBiZSBnb29kIGVub3VnaC4KKwkgKgorCSAqIEEgc2ltaWxhciBpc3N1ZSBhcHBs aWVzIHRvIHRoZSBjb3VudGVyIHJlc2V0IC0gd2UgaGF2ZW4ndCB1cGRhdGVkCisJICogdGhl IHdlaWdodHMgeWV0LiBTaG91bGQgYmUgZmluZSwgd2UnbGwgc2ltcGx5IGNvbnNpZGVyIHRo aXMgaW4gdGhlCisJICogbmV4dCBiYWxhbmNpbmcgY3ljbGUuCisJICoKKwkgKiBYWFggRG9l cyB0aGlzIG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIGNvbXBsZXRlUGFzc2VzIHRvbz8KKwkg Ki8KKwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlv bnM7IGkrKykKKwl7CisJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+ c3dlZXBzW2ldOworCisJCS8qIG5vIG5lZWQgZm9yIGEgc3BpbmxvY2sgKi8KKwkJYWxsb2Nz W2ldID0gcGdfYXRvbWljX2V4Y2hhbmdlX3UzMigmc3dlZXAtPm51bVJlcXVlc3RlZEFsbG9j cywgMCk7CisKKwkJLyogYWRkIHRoZSBhbGxvY3MgdG8gcnVubmluZyB0b3RhbCAqLworCQlw Z19hdG9taWNfZmV0Y2hfYWRkX3U2NCgmc3dlZXAtPm51bVRvdGFsUmVxdWVzdGVkQWxsb2Nz LCBhbGxvY3NbaV0pOworCisJCXRvdGFsX2FsbG9jcyArPSBhbGxvY3NbaV07CisJfQorCisJ LyoKKwkgKiBDYWxjdWxhdGUgdGhlICJmYWlyIHNoYXJlIiBvZiBhbGxvY2F0aW9ucyBwZXIg cGFydGl0aW9uLgorCSAqCisJICogWFhYIFRoZSBsYXN0IHBhcnRpdGlvbiBjb3VsZCBiZSBz bWFsbGVyLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZQorCSAqIGV4cGVjdGVkIHRvIGhh bmRsZSBmZXdlciBhbGxvY2F0aW9ucy4gU28gdGhpcyBzaG91bGQgYmUgYSB3ZWlnaHRlZAor CSAqIGF2ZXJhZ2UuIEJ1dCBmb3Igbm93IGEgc2ltcGxlIGF2ZXJhZ2UgaXMgZ29vZCBlbm91 Z2guCisJICovCisJYXZnX2FsbG9jcyA9ICh0b3RhbF9hbGxvY3MgLyBTdHJhdGVneUNvbnRy b2wtPm51bV9wYXJ0aXRpb25zKTsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSAiZGVsdGEi IGZyb20gYmFsYW5jZWQgc3RhdGUsIGkuZS4gaG93IG1hbnkgYWxsb2NhdGlvbnMKKwkgKiB3 ZSdkIG5lZWQgdG8gcmVkaXN0cmlidXRlLgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwg U3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uczsgaSsrKQorCXsKKwkJaWYgKGFsbG9j c1tpXSA+IGF2Z19hbGxvY3MpCisJCQlkZWx0YV9hbGxvY3MgKz0gKGFsbG9jc1tpXSAtIGF2 Z19hbGxvY3MpOworCX0KKworCS8qCisJICogU2tpcCB0aGUgcmViYWxhbmNpbmcgd2hlbiB0 aGVyZSdzIG5vdCBlbm91Z2ggYWN0aXZpdHkuIEluIHRoaXMgY2FzZQorCSAqIHdlIGp1c3Qg a2VlcCB0aGUgY3VycmVudCB3ZWlnaHRzLgorCSAqCisJICogWFhYIFRoZSB0aHJlc2hvbGQg b2YgMTAwIGFsbG9jYXRpb24gaXMgcHJldHR5IGFyYml0cmFyeS4KKwkgKgorCSAqIFhYWCBN YXliZSBhIGJldHRlciBzdHJhdGVneSB3b3VsZCBiZSB0byBzbG93bHkgcmV0dXJuIHRvIHRo ZSBkZWZhdWx0CisJICogd2VpZ2h0cywgd2l0aCBlYWNoIHBhcnRpdGlvbiBhbGxvY2F0aW9u IG9ubHkgZnJvbSBpdHNlbGY/CisJICoKKwkgKiBYWFggTWF5YmUgd2Ugc2hvdWxkbid0IGV2 ZW4gcmVzZXQgdGhlIGNvdW50ZXJzIGluIHRoaXMgY2FzZT8gQnV0IGl0CisJICogc2hvdWxk IG5vdCBtYXR0ZXIsIGlmIHRoZSBhY3Rpdml0eSBpcyBsb3cuCisJICovCisJaWYgKGF2Z19h bGxvY3MgPCAxMDApCisJeworCQllbG9nKERFQlVHMSwgInJlYmFsYW5jZSBza2lwcGVkOiBu b3QgZW5vdWdoIGFsbG9jYXRpb25zIChhbGxvY3M6ICV1KSIsCisJCQkgYXZnX2FsbG9jcyk7 CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIExpa2V3aXNlLCBza2lwIHJlYmFsYW5jaW5n IGlmIHRoZSBtaXNiYWxhbmNlIGlzIG5vdCBzaWduaWZpY2FudC4gV2UKKwkgKiBjb25zaWRl ciBpdCBhY2NlcHRhYmxlIGlmIHRoZSBhbW91bnQgb2YgYWxsb2NhdGlvbnMgd2UnZCBuZWVk IHRvCisJICogcmVkaXN0cmlidXRlIGlzIGxlc3MgdGhhbiAxMCUgb2YgdGhlIGF2ZXJhZ2Uu CisJICoKKwkgKiBYWFggQWdhaW4sIHRoZXNlIHRocmVzaG9sZCBhcmUgcmF0aGVyIGFyYml0 cmFyeS4KKwkgKi8KKwlpZiAoZGVsdGFfYWxsb2NzIDwgKGF2Z19hbGxvY3MgKiAwLjEpKQor CXsKKwkJZWxvZyhERUJVRzEsICJyZWJhbGFuY2Ugc2tpcHBlZDogZGVsdGEgd2l0aGluIGxp bWl0IChkZWx0YTogJXUsIHRocmVzaG9sZDogJXUpIiwKKwkJCSBkZWx0YV9hbGxvY3MsICh1 aW50MzIpIChhdmdfYWxsb2NzICogMC4xKSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAq IEdvdCB0byBkbyB0aGUgcmViYWxhbmNpbmcuIEdvIHRocm91Z2ggdGhlIHBhcnRpdGlvbnMs IGFuZCBmb3IgZWFjaAorCSAqIHBhcnRpdGlvbiBkZWNpZGUgaWYgaXQgZ2V0cyB0byByZWRp cmVjdCBvciByZWNlaXZlIGFsbG9jYXRpb25zLgorCSAqCisJICogSWYgYSBwYXJ0aXRpb24g aGFzIGZld2VyIHRoYW4gYXZlcmFnZSBhbGxvY2F0aW9ucywgaXQgd29uJ3QgcmVkaXJlY3QK KwkgKiBhbnkgYWxsb2NhdGlvbnMgdG8gb3RoZXIgcGFydGl0aW9ucy4gU28gaXQgb25seSBo YXMgYSBzaW5nbGUgbm9uLXplcm8KKwkgKiB3ZWlnaHQsIGFuZCB0aGF0J3MgZm9yIGl0c2Vs Zi4KKwkgKgorCSAqIElmIGEgcGFydHRpb24gaGFzIG1vcmUgdGhhbiBhdmVyYWdlIGFsbG9j YXRpb25zLCBpdCB3b24ndCByZWNlaXZlCisJICogYW55IHJlZGlyZWN0ZWQgYWxsb2NhdGlv bnMuIEluc3RlYWQsIHRoZSBleGNlc3MgYWxsb2NhdGlvbnMgYXJlCisJICogcmVkaXJlY3Rl ZCB0byB0aGUgb3RoZXIgcGFydGl0aW9ucy4KKwkgKgorCSAqIFRoZSByZWRpc3RyaWJ1dGlv biBpcyAicHJvcG9ydGlvbmFsIiAtIGlmIHRoZSBleGNlc3MgYWxsb2NhdGlvbnMgb2YKKwkg KiBhIHBhcnRpdGlvbiByZXByZXNlbnQgMTAlIG9mIHRoZSAiZGVsdGEiLCB0aGVuIGVhY2gg cGFydGl0aW9uIHRoYXQKKwkgKiBuZWVkcyBtb3JlIGFsbG9jYXRpb25zIHdpbGwgZ2V0IDEw JSBvZiB0aGUgZ2FwIGZyb20gdGhpcyBvbmUuCisJICoKKwkgKiBYWFggV2Ugc2hvdWxkIGFk ZCBoeXN0ZXJlc2lzLCB0byAiZGFtcGVuIiB0aGUgY2hhbmdlcywgYW5kIG1ha2UKKwkgKiBz dXJlIGl0IGRvZXMgbm90IG9zY2lsbGF0ZSB0b28gbXVjaC4KKwkgKgorCSAqIFhYWCBJZGVh bGx5LCB0aGUgYWx0ZXJuYXRpdmUgcGFydGl0aW9ucyB0byB1c2UgZmlyc3Qgd291bGQgYmUg dGhlCisJICogb3RoZXIgcGFydGl0aW9ucyBmb3IgdGhlIHNhbWUgbm9kZSAoaWYgYW55KS4K KwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRp dGlvbnM7IGkrKykKKwl7CisJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJv bC0+c3dlZXBzW2ldOworCQl1aW50OAkJYmFsYW5jZVtNQVhfQlVGRkVSX1BBUlRJVElPTlNd OworCisJCS8qIGxvY2ssIHdlJ3JlIGdvaW5nIHRvIG1vZGlmeSB0aGUgYmFsYW5jZSB3ZWln aHRzICovCisJCVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOwor CisJCS8qIHJlc2V0IHRoZSB3ZWlnaHRzIHRvIHN0YXJ0IGZyb20gc2NyYXRjaCAqLworCQlt ZW1zZXQoYmFsYW5jZSwgMCwgc2l6ZW9mKHVpbnQ4KSAqIE1BWF9CVUZGRVJfUEFSVElUSU9O Uyk7CisKKwkJLyogZG9lcyB0aGlzIHBhcnRpdGlvbiBoYXMgZmV3ZXIgb3IgbW9yZSB0aGFu IGF2Z19hbGxvY3M/ICovCisJCWlmIChhbGxvY3NbaV0gPCBhdmdfYWxsb2NzKQorCQl7CisJ CQkvKiBmZXdlciAtIGRvbid0IHJlZGlyZWN0IGFueSBhbGxvY2F0aW9ucyBlbHNld2hlcmUg Ki8KKwkJCWJhbGFuY2VbaV0gPSAxMDA7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJ ICogbW9yZSAtIHJlZGlzdHJpYnV0ZSB0aGUgZXhjZXNzIGFsbG9jYXRpb25zCisJCQkgKgor CQkJICogRWFjaCAidGFyZ2V0IiBwYXJ0aXRpb24gKHdpdGggbGVzcyB0aGFuIGF2Z19hbGxv Y3MpIHNob3VsZCBnZXQKKwkJCSAqIGEgZnJhY3Rpb24gcHJvcG9ydGlvbmFsIHRvIChleGNl c3MvZGVsdGEpIGZyb20gdGhpcyBvbmUuCisJCQkgKi8KKworCQkJLyogZnJhY3Rpb24gb2Yg dGhlICJ0b3RhbCIgZGVsdGEgKi8KKwkJCWRvdWJsZQlkZWx0YV9mcmFjID0gKGFsbG9jc1tp XSAtIGF2Z19hbGxvY3MpICogMS4wIC8gZGVsdGFfYWxsb2NzOworCisJCQkvKiBrZWVwIGp1 c3QgZW5vdWdoIGFsbG9jYXRpb25zIHRvIG1lZXQgdGhlIHRhcmdldCAqLworCQkJYmFsYW5j ZVtpXSA9ICgxMDAuMCAqIGF2Z19hbGxvY3MgLyBhbGxvY3NbaV0pOworCisJCQkvKiByZWRp cmVjdCB0aGUgZXh0cmEgYWxsb2NhdGlvbnMgKi8KKwkJCWZvciAoaW50IGogPSAwOyBqIDwg U3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uczsgaisrKQorCQkJeworCQkJCS8qIEhv dyBtYW55IGFsbG9jYXRpb25zIHRvIHJlY2VpdmUgZnJvbSBpLXRoIHBhcnRpdGlvbj8gKi8K KwkJCQl1aW50MzIJcmVjZWl2ZV9hbGxvY3MgPSBkZWx0YV9mcmFjICogKGF2Z19hbGxvY3Mg LSBhbGxvY3Nbal0pOworCisJCQkJLyogaWdub3JlIHBhcnRpdGlvbnMgdGhhdCBkb24ndCBu ZWVkIGFkZGl0aW9uYWwgYWxsb2NhdGlvbnMgKi8KKwkJCQlpZiAoYWxsb2NzW2pdID4gYXZn X2FsbG9jcykKKwkJCQkJY29udGludWU7CisKKwkJCQkvKiBmcmFjdGlvbiB0byByZWRpcmVj dCAqLworCQkJCWJhbGFuY2Vbal0gPSAoMTAwLjAgKiByZWNlaXZlX2FsbG9jcyAvIGFsbG9j c1tpXSkgKyAwLjU7CisJCQl9CisJCX0KKworCQkvKiBjb21iaW5lIHRoZSBvbGQgYW5kIG5l dyB3ZWlnaHRzIChoeXN0ZXJlc2lzKSAqLworCQlmb3IgKGludCBqID0gMDsgaiA8IE1BWF9C VUZGRVJfUEFSVElUSU9OUzsgaisrKQorCQl7CisJCQlzd2VlcC0+YmFsYW5jZVtqXQorCQkJ CT0gQ0xPQ0tTV0VFUF9ISVNUT1JZX0NPRUZGICogc3dlZXAtPmJhbGFuY2Vbal0gKworCQkJ CSAgKDEuMCAtIENMT0NLU1dFRVBfSElTVE9SWV9DT0VGRikgKiBiYWxhbmNlW2pdOworCQl9 CisKKwkJU3BpbkxvY2tSZWxlYXNlKCZzd2VlcC0+Y2xvY2tfc3dlZXBfbG9jayk7CisJfQor fQorCiAvKgogICogU3RyYXRlZ3lTeW5jUHJlcGFyZSAtLSBwcmVwYXJlIGZvciBzeW5jIG9m IGFsbCBwYXJ0aXRpb25zCiAgKgpAQCAtNDQzLDYgKzc3MSw3IEBAIFN0cmF0ZWd5U3luY1By ZXBhcmUoaW50ICpudW1fcGFydHMsIHVpbnQzMiAqbnVtX2J1Zl9hbGxvYykKIAl7CiAJCUNs b2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldOwogCisJCS8q IFhYWCB3ZSBkb24ndCBuZWVkIHRoZSBzcGlubG9jayB0byByZWFkIGF0b21pY3MsIG5vPyAq LwogCQlTcGluTG9ja0FjcXVpcmUoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKIAkJaWYg KG51bV9idWZfYWxsb2MpCiAJCXsKQEAgLTYyNyw3ICs5NTYsMjEgQEAgU3RyYXRlZ3lJbml0 aWFsaXplKGJvb2wgaW5pdCkKIAkJCS8qIENsZWFyIHN0YXRpc3RpY3MgKi8KIAkJCVN0cmF0 ZWd5Q29udHJvbC0+c3dlZXBzW2ldLmNvbXBsZXRlUGFzc2VzID0gMDsKIAkJCXBnX2F0b21p Y19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0ubnVtQnVmZmVyQWxsb2Nz LCAwKTsKKwkJCXBnX2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNb aV0ubnVtUmVxdWVzdGVkQWxsb2NzLCAwKTsKIAkJCXBnX2F0b21pY19pbml0X3U2NCgmU3Ry YXRlZ3lDb250cm9sLT5zd2VlcHNbaV0ubnVtVG90YWxBbGxvY3MsIDApOworCQkJcGdfYXRv bWljX2luaXRfdTY0KCZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5udW1Ub3RhbFJlcXVl c3RlZEFsbG9jcywgMCk7CisKKwkJCS8qCisJCQkgKiBJbml0aWFsaXplIHRoZSB3ZWlnaHRz IC0gc3RhcnQgYnkgYWxsb2NhdGluZyAxMDAlIGJ1ZmZlcnMgZnJvbQorCQkJICogdGhlIGN1 cnJlbnQgbm9kZSAvIHBhcnRpdGlvbi4KKwkJCSAqLworCQkJZm9yIChpbnQgaiA9IDA7IGog PCBNQVhfQlVGRkVSX1BBUlRJVElPTlM7IGorKykKKwkJCXsKKwkJCQlpZiAoaSA9PSBqKQor CQkJCQlTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5iYWxhbmNlW2ldID0gMTAwOworCQkJ CWVsc2UKKwkJCQkJU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0uYmFsYW5jZVtqXSA9IDA7 CisJCQl9CiAJCX0KIAogCQkvKiBObyBwZW5kaW5nIG5vdGlmaWNhdGlvbiAqLwpAQCAtMTAw MSw4ICsxMzQ0LDEwIEBAIFN0cmF0ZWd5UmVqZWN0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IHN0cmF0ZWd5LCBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJvbV9yCiAKIHZvaWQKIENs b2NrU3dlZXBQYXJ0aXRpb25HZXRJbmZvKGludCBpZHgsCi0JCQkJCQkgICB1aW50MzIgKmNv bXBsZXRlX3Bhc3NlcywgdWludDMyICpuZXh0X3ZpY3RpbV9idWZmZXIsCi0JCQkJCQkgICB1 aW50NjQgKmJ1ZmZlcl90b3RhbF9hbGxvY3MsIHVpbnQzMiAqYnVmZmVyX2FsbG9jcykKKwkJ CQkJCSB1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywgdWludDMyICpuZXh0X3ZpY3RpbV9idWZm ZXIsCisJCQkJCQkgdWludDY0ICpidWZmZXJfdG90YWxfYWxsb2NzLCB1aW50MzIgKmJ1ZmZl cl9hbGxvY3MsCisJCQkJCQkgdWludDY0ICpidWZmZXJfdG90YWxfcmVxX2FsbG9jcywgdWlu dDMyICpidWZmZXJfcmVxX2FsbG9jcywKKwkJCQkJCSBpbnQgKip3ZWlnaHRzKQogewogCUNs b2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2lkeF07CiAKQEAg LTEwMTAsMTEgKzEzNTUsMjEgQEAgQ2xvY2tTd2VlcFBhcnRpdGlvbkdldEluZm8oaW50IGlk eCwKIAogCS8qIGdldCB0aGUgY2xvY2tzd2VlcCBzdGF0cyAqLwogCSpjb21wbGV0ZV9wYXNz ZXMgPSBzd2VlcC0+Y29tcGxldGVQYXNzZXM7CisKKwkvKiBjYWxjdWxhdGUgdGhlIGFjdHVh bCBidWZmZXIgSUQgKi8KIAkqbmV4dF92aWN0aW1fYnVmZmVyID0gcGdfYXRvbWljX3JlYWRf dTMyKCZzd2VlcC0+bmV4dFZpY3RpbUJ1ZmZlcik7CisJKm5leHRfdmljdGltX2J1ZmZlciA9 IHN3ZWVwLT5maXJzdEJ1ZmZlciArICgqbmV4dF92aWN0aW1fYnVmZmVyICUgc3dlZXAtPm51 bUJ1ZmZlcnMpOwogCi0JKmJ1ZmZlcl9hbGxvY3MgPSBwZ19hdG9taWNfcmVhZF91MzIoJnN3 ZWVwLT5udW1CdWZmZXJBbGxvY3MpOwogCSpidWZmZXJfdG90YWxfYWxsb2NzID0gcGdfYXRv bWljX3JlYWRfdTY0KCZzd2VlcC0+bnVtVG90YWxBbGxvY3MpOworCSpidWZmZXJfYWxsb2Nz ID0gcGdfYXRvbWljX3JlYWRfdTMyKCZzd2VlcC0+bnVtQnVmZmVyQWxsb2NzKTsKIAotCS8q IGNhbGN1bGF0ZSB0aGUgYWN0dWFsIGJ1ZmZlciBJRCAqLwotCSpuZXh0X3ZpY3RpbV9idWZm ZXIgPSBzd2VlcC0+Zmlyc3RCdWZmZXIgKyAoKm5leHRfdmljdGltX2J1ZmZlciAlIHN3ZWVw LT5udW1CdWZmZXJzKTsKKwkqYnVmZmVyX3RvdGFsX3JlcV9hbGxvY3MgPSBwZ19hdG9taWNf cmVhZF91NjQoJnN3ZWVwLT5udW1Ub3RhbFJlcXVlc3RlZEFsbG9jcyk7CisJKmJ1ZmZlcl9y ZXFfYWxsb2NzID0gcGdfYXRvbWljX3JlYWRfdTMyKCZzd2VlcC0+bnVtUmVxdWVzdGVkQWxs b2NzKTsKKworCS8qIHJldHVybiB0aGUgd2VpZ2h0cyBpbiBhIG5ld2x5IGFsbG9jYXRlZCBh cnJheSAqLworCSp3ZWlnaHRzID0gcGFsbG9jX2FycmF5KGludCwgU3RyYXRlZ3lDb250cm9s LT5udW1fcGFydGl0aW9ucyk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBTdHJhdGVneUNvbnRy b2wtPm51bV9wYXJ0aXRpb25zOyBpKyspCisJeworCQkoKndlaWdodHMpW2ldID0gKGludCkg c3dlZXAtPmJhbGFuY2VbaV07CisJfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9idWZfaW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5h bHMuaAppbmRleCAzMzA3MTkwZjYxMS4uMTExOGIzODYyMjggMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmX2ludGVybmFscy5oCkBAIC01MDgsNiArNTA4LDcgQEAgZXh0ZXJuIEJ1ZmZlckRl c2MgKlN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAog ZXh0ZXJuIGJvb2wgU3RyYXRlZ3lSZWplY3RCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kg c3RyYXRlZ3ksCiAJCQkJCQkJCSBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJvbV9yaW5nKTsK IAorZXh0ZXJuIHZvaWQgU3RyYXRlZ3lTeW5jQmFsYW5jZSh2b2lkKTsKIGV4dGVybiB2b2lk IFN0cmF0ZWd5U3luY1ByZXBhcmUoaW50ICpudW1fcGFydHMsIHVpbnQzMiAqbnVtX2J1Zl9h bGxvYyk7CiBleHRlcm4gaW50CVN0cmF0ZWd5U3luY1N0YXJ0KGludCBwYXJ0aXRpb24sIHVp bnQzMiAqY29tcGxldGVfcGFzc2VzLAogCQkJCQkJCSAgaW50ICpmaXJzdF9idWZmZXIsIGlu dCAqbnVtX2J1ZmZlcnMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggNzA1MmY5ZGU1N2Mu LjRlN2IxZmNkNGFiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTM2MCwxMSArMzYwLDEz IEBAIGV4dGVybiBpbnQJR2V0QWNjZXNzU3RyYXRlZ3lQaW5MaW1pdChCdWZmZXJBY2Nlc3NT dHJhdGVneSBzdHJhdGVneSk7CiAKIGV4dGVybiB2b2lkIEZyZWVBY2Nlc3NTdHJhdGVneShC dWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7CiBleHRlcm4gdm9pZCBDbG9ja1N3ZWVw UGFydGl0aW9uR2V0SW5mbyhpbnQgaWR4LAotCQkJCQkJCQkJICAgdWludDMyICpjb21wbGV0 ZV9wYXNzZXMsCi0JCQkJCQkJCQkgICB1aW50MzIgKm5leHRfdmljdGltX2J1ZmZlciwKLQkJ CQkJCQkJCSAgIHVpbnQ2NCAqYnVmZmVyX3RvdGFsX2FsbG9jcywKLQkJCQkJCQkJCSAgIHVp bnQzMiAqYnVmZmVyX2FsbG9jcyk7Ci0KKwkJCQkJCQkJCSB1aW50MzIgKmNvbXBsZXRlX3Bh c3NlcywKKwkJCQkJCQkJCSB1aW50MzIgKm5leHRfdmljdGltX2J1ZmZlciwKKwkJCQkJCQkJ CSB1aW50NjQgKmJ1ZmZlcl90b3RhbF9hbGxvY3MsCisJCQkJCQkJCQkgdWludDMyICpidWZm ZXJfYWxsb2NzLAorCQkJCQkJCQkJIHVpbnQ2NCAqYnVmZmVyX3RvdGFsX3JlcV9hbGxvY3Ms CisJCQkJCQkJCQkgdWludDMyICpidWZmZXJfcmVxX2FsbG9jcywKKwkJCQkJCQkJCSBpbnQg Kip3ZWlnaHRzKTsKIAogLyogaW5saW5lIGZ1bmN0aW9ucyAqLwogCi0tIAoyLjUxLjEKCg== --------------Mky2abyS3YoHwGs5syrGiO88 Content-Type: text/x-patch; charset=UTF-8; name="v20251111-0002-clock-sweep-basic-partitioning.patch" Content-Disposition: attachment; filename="v20251111-0002-clock-sweep-basic-partitioning.patch" Content-Transfer-Encoding: base64 RnJvbSAzNGM1ZDM1NzRmYTdlZmE0OGRlN2Q1YTk5OTIxOTExYjYzZDA0YjMwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAxMSBOb3YgMjAyNSAxMjowMzozMiArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUxMTExIDIvN10gY2xvY2stc3dlZXA6IGJhc2ljIHBhcnRpdGlvbmluZwoKUGFydGl0 aW9ucyB0aGUgImNsb2NrLXN3ZWVwIiBhbGdvcml0aG0gdG8gd29yayBvbiBpbmRpdmlkdWFs IHBhcnRpdGlvbnMsCm9uZSBieSBvbmUuIEVhY2ggYmFja2VuZCBwcm9jZXNzIGlzIG1hcHBl ZCB0byBvbmUgImhvbWUiIHBhcnRpdGlvbiwgd2l0aAphbiBpbmRlcGVuZGVudCBjbG9jayBo YW5kLiBUaGlzIHJlZHVjZXMgY29udGVudGlvbiBmb3Igd29ya2xvYWRzIHdpdGgKc2lnbmlm aWNhbnQgYnVmZmVyIHByZXNzdXJlLgoKVGhlIHBhdGNoIGV4dGVuZHMgdGhlICJwZ19idWZm ZXJjYWNoZV9wYXJ0aXRpb25zIiB2aWV3IHRvIGluY2x1ZGUKaW5mb3JtYXRpb24gYWJvdXQg dGhlIGNsb2NrLXN3ZWVwIGFjdGl2aXR5LgoKTm90ZTogVGhpcyBuZWVkcyBzb21lIHNvcnQg b2YgImJhbGFuY2luZyIgd2hlbiBvbmUgb2YgdGhlIHBhcnRpdGlvbnMgaXMKbXVjaCBidXNp ZXIgdGhhbiB0aGUgcmVzdCAoZS5nLiBiZWNhdXNlIHRoZXJlJ3MgYSBzaW5nbGUgYmFja2Vu ZCBjb25zdW1pbmcKYSBsb3Qgb2YgYnVmZmVycyBmcm9tIGl0KS4KCk5vdGU6IFRoZXJlJ3Mg YSBwcm9ibGVtIHdpdGggc29tZSB0ZXN0cyBydW5uaW5nIG91dCBvZiB1bnBpbm5lZCBidWZm ZXJzLApkdWUgdG8gKGludGVudGlvbmFsbHkpIHNldHRpbmcgc2hhcmVkIGJ1ZmZlcnMgdmVy eSBsb3cuIFRoYXQgaGFwcGVucwpiZWNhdXNlIFN0cmF0ZWd5R2V0QnVmZmVyKCkgb25seSBz ZWFyY2hlcyBhIHNpbmdsZSBwYXJ0aXRpb24sIGFuZCBpdApoYXMgYSBjb3VwbGUgbW9yZSBp c3N1ZXMuCi0tLQogLi4uL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwgICAgICAgICAg ICAgIHwgICA4ICstCiBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3Bh Z2VzLmMgfCAgMzggKystCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5j ICAgICAgICAgfCAgIDggKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg ICAgICAgICAgIHwgMTg2ICsrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvZnJlZWxpc3QuYyAgICAgICAgIHwgMjgzICsrKysrKysrKysrKysrKy0tLQogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmggICAgICAgICAgIHwgICA1ICstCiBzcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oICAgICAgICAgICAgICAgICAgfCAgIDUgKwogc3Jj L3Rlc3QvcmVjb3ZlcnkvdC8wMjdfc3RyZWFtX3JlZ3Jlc3MucGwgICAgIHwgICA1ICsKIHNy Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiA5 IGZpbGVzIGNoYW5nZWQsIDQzMyBpbnNlcnRpb25zKCspLCAxMDYgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42 LS0xLjcuc3FsIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42 LS0xLjcuc3FsCmluZGV4IGYxYzIwOTYwYjdlLi4xNGU3NTBiZWVmZiAxMDA2NDQKLS0tIGEv Y29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCisr KyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNx bApAQCAtMTUsNyArMTUsMTMgQEAgQ1JFQVRFIFZJRVcgcGdfYnVmZmVyY2FjaGVfcGFydGl0 aW9ucyBBUwogCShwYXJ0aXRpb24gaW50ZWdlciwJCQktLSBwYXJ0aXRpb24gaW5kZXgKIAkg bnVtX2J1ZmZlcnMgaW50ZWdlciwJCS0tIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBwYXJ0 aXRpb24KIAkgZmlyc3RfYnVmZmVyIGludGVnZXIsCQktLSBmaXJzdCBidWZmZXIgb2YgcGFy dGl0aW9uCi0JIGxhc3RfYnVmZmVyIGludGVnZXIpOwkJLS0gbGFzdCBidWZmZXIgb2YgcGFy dGl0aW9uCisJIGxhc3RfYnVmZmVyIGludGVnZXIsCQktLSBsYXN0IGJ1ZmZlciBvZiBwYXJ0 aXRpb24KKworCSAtLSBjbG9ja3N3ZWVwIGNvdW50ZXJzCisJIG51bV9wYXNzZXMgYmlnaW50 LAkJCS0tIGNsb2Nrc3dlZXAgcGFzc2VzCisJIG5leHRfYnVmZmVyIGludGVnZXIsCQktLSBu ZXh0IHZpY3RpbSBidWZmZXIgZm9yIGNsb2Nrc3dlZXAKKwkgdG90YWxfYWxsb2NzIGJpZ2lu dCwJCS0tIGhhbmRsZWQgYWxsb2NzIChydW5uaW5nIHRvdGFsKQorCSBudW1fYWxsb2NzIGJp Z2ludCk7CQktLSBoYW5kbGVkIGFsbG9jcyAoY3VycmVudCBjeWNsZSkKIAogLS0gRG9uJ3Qg d2FudCB0aGVzZSB0byBiZSBhdmFpbGFibGUgdG8gcHVibGljLgogUkVWT0tFIEFMTCBPTiBG VU5DVElPTiBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKCkgRlJPTSBQVUJMSUM7CmRpZmYg LS1naXQgYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMg Yi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKaW5kZXgg OGE5ODBiZDE4NjQuLjE4NTZlZmI4Nzg2IDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZl cmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKKysrIGIvY29udHJpYi9wZ19idWZmZXJj YWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5l IE5VTV9CVUZGRVJDQUNIRV9FVklDVF9BTExfRUxFTSAzCiAKICNkZWZpbmUgTlVNX0JVRkZF UkNBQ0hFX05VTUFfRUxFTQkzCi0jZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05T X0VMRU0JNAorI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNCTgKIAog UEdfTU9EVUxFX01BR0lDX0VYVCgKIAkJCQkJLm5hbWUgPSAicGdfYnVmZmVyY2FjaGUiLApA QCAtODA5LDEyICs4MDksMjAgQEAgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5D VElPTl9BUkdTKQogCQl0dXBsZWRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYyhleHBl Y3RlZF90dXBsZWRlc2MtPm5hdHRzKTsKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVz YywgKEF0dHJOdW1iZXIpIDEsICJwYXJ0aXRpb24iLAogCQkJCQkJICAgSU5UNE9JRCwgLTEs IDApOwotCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMSwg Im51bV9idWZmZXJzIiwKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJO dW1iZXIpIDIsICJudW1fYnVmZmVycyIsCiAJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7Ci0J CVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAyLCAiZmlyc3Rf YnVmZmVyIiwKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIp IDMsICJmaXJzdF9idWZmZXIiLAogCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOwotCQlUdXBs ZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMywgImxhc3RfYnVmZmVy IiwKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDQsICJs YXN0X2J1ZmZlciIsCiAJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0lu aXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA1LCAibnVtX3Bhc3NlcyIsCisJCQkJ CQkgICBJTlQ4T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2Ms IChBdHRyTnVtYmVyKSA2LCAibmV4dF9idWZmZXIiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEs IDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgNywg InRvdGFsX2FsbG9jcyIsCisJCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CisJCVR1cGxlRGVz Y0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA4LCAibnVtX2FsbG9jcyIsCisJ CQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CiAKIAkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gQmxl c3NUdXBsZURlc2ModHVwbGVkZXNjKTsKIApAQCAtODM1LDEyICs4NDMsMjIgQEAgcGdfYnVm ZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQlmaXJzdF9idWZm ZXIsCiAJCQkJCWxhc3RfYnVmZmVyOwogCisJCXVpbnQ2NAkJYnVmZmVyX3RvdGFsX2FsbG9j czsKKworCQl1aW50MzIJCWNvbXBsZXRlX3Bhc3NlcywKKwkJCQkJbmV4dF92aWN0aW1fYnVm ZmVyLAorCQkJCQlidWZmZXJfYWxsb2NzOworCiAJCURhdHVtCQl2YWx1ZXNbTlVNX0JVRkZF UkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CiAJCWJvb2wJCW51bGxzW05VTV9CVUZGRVJDQUNI RV9QQVJUSVRJT05TX0VMRU1dOwogCiAJCUJ1ZmZlclBhcnRpdGlvbkdldChpLCAmbnVtX2J1 ZmZlcnMsCiAJCQkJCQkgICAmZmlyc3RfYnVmZmVyLCAmbGFzdF9idWZmZXIpOwogCisJCUNs b2NrU3dlZXBQYXJ0aXRpb25HZXRJbmZvKGksCisJCQkJCQkJCSAgICZjb21wbGV0ZV9wYXNz ZXMsICZuZXh0X3ZpY3RpbV9idWZmZXIsCisJCQkJCQkJCSAgICZidWZmZXJfdG90YWxfYWxs b2NzLCAmYnVmZmVyX2FsbG9jcyk7CisKIAkJdmFsdWVzWzBdID0gSW50MzJHZXREYXR1bShp KTsKIAkJbnVsbHNbMF0gPSBmYWxzZTsKIApAQCAtODUzLDYgKzg3MSwxOCBAQCBwZ19idWZm ZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXZhbHVlc1szXSA9IElu dDMyR2V0RGF0dW0obGFzdF9idWZmZXIpOwogCQludWxsc1szXSA9IGZhbHNlOwogCisJCXZh bHVlc1s0XSA9IEludDY0R2V0RGF0dW0oY29tcGxldGVfcGFzc2VzKTsKKwkJbnVsbHNbNF0g PSBmYWxzZTsKKworCQl2YWx1ZXNbNV0gPSBJbnQzMkdldERhdHVtKG5leHRfdmljdGltX2J1 ZmZlcik7CisJCW51bGxzWzVdID0gZmFsc2U7CisKKwkJdmFsdWVzWzZdID0gSW50NjRHZXRE YXR1bShidWZmZXJfdG90YWxfYWxsb2NzKTsKKwkJbnVsbHNbNl0gPSBmYWxzZTsKKworCQl2 YWx1ZXNbN10gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl9hbGxvY3MpOworCQludWxsc1s3XSA9 IGZhbHNlOworCiAJCS8qIEJ1aWxkIGFuZCByZXR1cm4gdGhlIHR1cGxlLiAqLwogCQl0dXBs ZSA9IGhlYXBfZm9ybV90dXBsZSgoVHVwbGVEZXNjKSBmdW5jY3R4LT51c2VyX2ZjdHgsIHZh bHVlcywgbnVsbHMpOwogCQlyZXN1bHQgPSBIZWFwVHVwbGVHZXREYXR1bSh0dXBsZSk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwppbmRleCA1MjhhMzY4YThiNy4u MDM2MmZkYTI0YWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zl9pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwpA QCAtMzE5LDMgKzMxOSwxMSBAQCBCdWZmZXJQYXJ0aXRpb25HZXQoaW50IGlkeCwgaW50ICpu dW1fYnVmZmVycywKIAogCWVsb2coRVJST1IsICJpbnZhbGlkIHBhcnRpdGlvbiBpbmRleCIp OwogfQorCisvKiByZXR1cm4gcGFyYW1ldGVycyBiZWZvcmUgdGhlIHBhcnRpdGlvbnMgYXJl IGluaXRpYWxpemVkIChkdXJpbmcgc2l6aW5nKSAqLwordm9pZAorQnVmZmVyUGFydGl0aW9u UGFyYW1zKGludCAqbnVtX3BhcnRpdGlvbnMpCit7CisJaWYgKG51bV9wYXJ0aXRpb25zKQor CQkqbnVtX3BhcnRpdGlvbnMgPSBOVU1fQ0xPQ0tfU1dFRVBfUEFSVElUSU9OUzsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggMzI3ZGRiN2FkYzguLmEzMDky Y2U4MDFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMzYwOCwz MyArMzYwOCwyOSBAQCBCdWZmZXJTeW5jKGludCBmbGFncykKIH0KIAogLyoKLSAqIEJnQnVm ZmVyU3luYyAtLSBXcml0ZSBvdXQgc29tZSBkaXJ0eSBidWZmZXJzIGluIHRoZSBwb29sLgor ICogSW5mb3JtYXRpb24gc2F2ZWQgYmV0d2VlbiBjYWxscyBzbyB3ZSBjYW4gZGV0ZXJtaW5l IHRoZSBzdHJhdGVneQorICogcG9pbnQncyBhZHZhbmNlIHJhdGUgYW5kIGF2b2lkIHNjYW5u aW5nIGFscmVhZHktY2xlYW5lZCBidWZmZXJzLgogICoKLSAqIFRoaXMgaXMgY2FsbGVkIHBl cmlvZGljYWxseSBieSB0aGUgYmFja2dyb3VuZCB3cml0ZXIgcHJvY2Vzcy4KKyAqIFhYWCBP bmUgdmFsdWUgcGVyIHBhcnRpdGlvbi4gV2UgZG9uJ3Qga25vdyBob3cgbWFueSBwYXJ0aXRp b25zIGFyZQorICogdGhlcmUsIHNvIGFsbG9jYXRlIDMyLCBzaG91bGQgYmUgZW5vdWdoIGZv ciB0aGUgUG9DIHBhdGNoLgogICoKLSAqIFJldHVybnMgdHJ1ZSBpZiBpdCdzIGFwcHJvcHJp YXRlIGZvciB0aGUgYmd3cml0ZXIgcHJvY2VzcyB0byBnbyBpbnRvCi0gKiBsb3ctcG93ZXIg aGliZXJuYXRpb24gbW9kZS4gIChUaGlzIGhhcHBlbnMgaWYgdGhlIHN0cmF0ZWd5IGNsb2Nr LXN3ZWVwCi0gKiBoYXMgYmVlbiAibGFwcGVkIiBhbmQgbm8gYnVmZmVyIGFsbG9jYXRpb25z IGhhdmUgb2NjdXJyZWQgcmVjZW50bHksCi0gKiBvciBpZiB0aGUgYmd3cml0ZXIgaGFzIGJl ZW4gZWZmZWN0aXZlbHkgZGlzYWJsZWQgYnkgc2V0dGluZwotICogYmd3cml0ZXJfbHJ1X21h eHBhZ2VzIHRvIDAuKQorICogWFhYIG1pZ2h0IGJlIGJldHRlciB0byBoYXZlIGEgcGVyLXBh cnRpdGlvbiBzdHJ1Y3Qgd2l0aCBhbGwgdGhlIGluZm8KICAqLwotYm9vbAotQmdCdWZmZXJT eW5jKFdyaXRlYmFja0NvbnRleHQgKndiX2NvbnRleHQpCisjZGVmaW5lIE1BWF9DTE9DS1NX RUVQX1BBUlRJVElPTlMgMzIKK3N0YXRpYyBib29sIHNhdmVkX2luZm9fdmFsaWQgPSBmYWxz ZTsKK3N0YXRpYyBpbnQJcHJldl9zdHJhdGVneV9idWZfaWRbTUFYX0NMT0NLU1dFRVBfUEFS VElUSU9OU107CitzdGF0aWMgdWludDMyIHByZXZfc3RyYXRlZ3lfcGFzc2VzW01BWF9DTE9D S1NXRUVQX1BBUlRJVElPTlNdOworc3RhdGljIGludAluZXh0X3RvX2NsZWFuW01BWF9DTE9D S1NXRUVQX1BBUlRJVElPTlNdOworc3RhdGljIHVpbnQzMiBuZXh0X3Bhc3Nlc1tNQVhfQ0xP Q0tTV0VFUF9QQVJUSVRJT05TXTsKKworCitzdGF0aWMgYm9vbAorQmdCdWZmZXJTeW5jUGFy dGl0aW9uKFdyaXRlYmFja0NvbnRleHQgKndiX2NvbnRleHQsIGludCBudW1fcGFydGl0aW9u cywKKwkJCQkJICBpbnQgcGFydGl0aW9uLCBpbnQgcmVjZW50X2FsbG9jX3BhcnRpdGlvbikK IHsKIAkvKiBpbmZvIG9idGFpbmVkIGZyb20gZnJlZWxpc3QuYyAqLwogCWludAkJCXN0cmF0 ZWd5X2J1Zl9pZDsKIAl1aW50MzIJCXN0cmF0ZWd5X3Bhc3NlczsKLQl1aW50MzIJCXJlY2Vu dF9hbGxvYzsKLQotCS8qCi0JICogSW5mb3JtYXRpb24gc2F2ZWQgYmV0d2VlbiBjYWxscyBz byB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBzdHJhdGVneQotCSAqIHBvaW50J3MgYWR2YW5jZSBy YXRlIGFuZCBhdm9pZCBzY2FubmluZyBhbHJlYWR5LWNsZWFuZWQgYnVmZmVycy4KLQkgKi8K LQlzdGF0aWMgYm9vbCBzYXZlZF9pbmZvX3ZhbGlkID0gZmFsc2U7Ci0Jc3RhdGljIGludAlw cmV2X3N0cmF0ZWd5X2J1Zl9pZDsKLQlzdGF0aWMgdWludDMyIHByZXZfc3RyYXRlZ3lfcGFz c2VzOwotCXN0YXRpYyBpbnQJbmV4dF90b19jbGVhbjsKLQlzdGF0aWMgdWludDMyIG5leHRf cGFzc2VzOwogCiAJLyogTW92aW5nIGF2ZXJhZ2VzIG9mIGFsbG9jYXRpb24gcmF0ZSBhbmQg Y2xlYW4tYnVmZmVyIGRlbnNpdHkgKi8KIAlzdGF0aWMgZmxvYXQgc21vb3RoZWRfYWxsb2Mg PSAwOwpAQCAtMzY2MiwyNSArMzY1OCwxNiBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29u dGV4dCAqd2JfY29udGV4dCkKIAlsb25nCQluZXdfc3RyYXRlZ3lfZGVsdGE7CiAJdWludDMy CQluZXdfcmVjZW50X2FsbG9jOwogCisJLyogYnVmZmVyIHJhbmdlIGZvciB0aGUgY2xvY2tz d2VlcCBwYXJ0aXRpb24gKi8KKwlpbnQJCQlmaXJzdF9idWZmZXI7CisJaW50CQkJbnVtX2J1 ZmZlcnM7CisKIAkvKgogCSAqIEZpbmQgb3V0IHdoZXJlIHRoZSBjbG9jay1zd2VlcCBjdXJy ZW50bHkgaXMsIGFuZCBob3cgbWFueSBidWZmZXIKIAkgKiBhbGxvY2F0aW9ucyBoYXZlIGhh cHBlbmVkIHNpbmNlIG91ciBsYXN0IGNhbGwuCiAJICovCi0Jc3RyYXRlZ3lfYnVmX2lkID0g U3RyYXRlZ3lTeW5jU3RhcnQoJnN0cmF0ZWd5X3Bhc3NlcywgJnJlY2VudF9hbGxvYyk7Ci0K LQkvKiBSZXBvcnQgYnVmZmVyIGFsbG9jIGNvdW50cyB0byBwZ3N0YXQgKi8KLQlQZW5kaW5n QmdXcml0ZXJTdGF0cy5idWZfYWxsb2MgKz0gcmVjZW50X2FsbG9jOwotCi0JLyoKLQkgKiBJ ZiB3ZSdyZSBub3QgcnVubmluZyB0aGUgTFJVIHNjYW4sIGp1c3Qgc3RvcCBhZnRlciBkb2lu ZyB0aGUgc3RhdHMKLQkgKiBzdHVmZi4gIFdlIG1hcmsgdGhlIHNhdmVkIHN0YXRlIGludmFs aWQgc28gdGhhdCB3ZSBjYW4gcmVjb3ZlciBzYW5lbHkKLQkgKiBpZiBMUlUgc2NhbiBpcyB0 dXJuZWQgYmFjayBvbiBsYXRlci4KLQkgKi8KLQlpZiAoYmd3cml0ZXJfbHJ1X21heHBhZ2Vz IDw9IDApCi0JewotCQlzYXZlZF9pbmZvX3ZhbGlkID0gZmFsc2U7Ci0JCXJldHVybiB0cnVl OwotCX0KKwlzdHJhdGVneV9idWZfaWQgPSBTdHJhdGVneVN5bmNTdGFydChwYXJ0aXRpb24s ICZzdHJhdGVneV9wYXNzZXMsCisJCQkJCQkJCQkJJmZpcnN0X2J1ZmZlciwgJm51bV9idWZm ZXJzKTsKIAogCS8qCiAJICogQ29tcHV0ZSBzdHJhdGVneV9kZWx0YSA9IGhvdyBtYW55IGJ1 ZmZlcnMgaGF2ZSBiZWVuIHNjYW5uZWQgYnkgdGhlCkBAIC0zNjkyLDE3ICszNjc5LDE3IEBA IEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQogCSAqLwogCWlm IChzYXZlZF9pbmZvX3ZhbGlkKQogCXsKLQkJaW50MzIJCXBhc3Nlc19kZWx0YSA9IHN0cmF0 ZWd5X3Bhc3NlcyAtIHByZXZfc3RyYXRlZ3lfcGFzc2VzOworCQlpbnQzMgkJcGFzc2VzX2Rl bHRhID0gc3RyYXRlZ3lfcGFzc2VzIC0gcHJldl9zdHJhdGVneV9wYXNzZXNbcGFydGl0aW9u XTsKIAotCQlzdHJhdGVneV9kZWx0YSA9IHN0cmF0ZWd5X2J1Zl9pZCAtIHByZXZfc3RyYXRl Z3lfYnVmX2lkOwotCQlzdHJhdGVneV9kZWx0YSArPSAobG9uZykgcGFzc2VzX2RlbHRhICog TkJ1ZmZlcnM7CisJCXN0cmF0ZWd5X2RlbHRhID0gc3RyYXRlZ3lfYnVmX2lkIC0gcHJldl9z dHJhdGVneV9idWZfaWRbcGFydGl0aW9uXTsKKwkJc3RyYXRlZ3lfZGVsdGEgKz0gKGxvbmcp IHBhc3Nlc19kZWx0YSAqIG51bV9idWZmZXJzOwogCiAJCUFzc2VydChzdHJhdGVneV9kZWx0 YSA+PSAwKTsKIAotCQlpZiAoKGludDMyKSAobmV4dF9wYXNzZXMgLSBzdHJhdGVneV9wYXNz ZXMpID4gMCkKKwkJaWYgKChpbnQzMikgKG5leHRfcGFzc2VzW3BhcnRpdGlvbl0gLSBzdHJh dGVneV9wYXNzZXMpID4gMCkKIAkJewogCQkJLyogd2UncmUgb25lIHBhc3MgYWhlYWQgb2Yg dGhlIHN0cmF0ZWd5IHBvaW50ICovCi0JCQlidWZzX3RvX2xhcCA9IHN0cmF0ZWd5X2J1Zl9p ZCAtIG5leHRfdG9fY2xlYW47CisJCQlidWZzX3RvX2xhcCA9IHN0cmF0ZWd5X2J1Zl9pZCAt IG5leHRfdG9fY2xlYW5bcGFydGl0aW9uXTsKICNpZmRlZiBCR1dfREVCVUcKIAkJCWVsb2co REVCVUcyLCAiYmd3cml0ZXIgYWhlYWQ6IGJndyAldS0ldSBzdHJhdGVneSAldS0ldSBkZWx0 YT0lbGQgbGFwPSVkIiwKIAkJCQkgbmV4dF9wYXNzZXMsIG5leHRfdG9fY2xlYW4sCkBAIC0z NzEwLDExICszNjk3LDExIEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9j b250ZXh0KQogCQkJCSBzdHJhdGVneV9kZWx0YSwgYnVmc190b19sYXApOwogI2VuZGlmCiAJ CX0KLQkJZWxzZSBpZiAobmV4dF9wYXNzZXMgPT0gc3RyYXRlZ3lfcGFzc2VzICYmCi0JCQkJ IG5leHRfdG9fY2xlYW4gPj0gc3RyYXRlZ3lfYnVmX2lkKQorCQllbHNlIGlmIChuZXh0X3Bh c3Nlc1twYXJ0aXRpb25dID09IHN0cmF0ZWd5X3Bhc3NlcyAmJgorCQkJCSBuZXh0X3RvX2Ns ZWFuW3BhcnRpdGlvbl0gPj0gc3RyYXRlZ3lfYnVmX2lkKQogCQl7CiAJCQkvKiBvbiBzYW1l IHBhc3MsIGJ1dCBhaGVhZCBvciBhdCBsZWFzdCBub3QgYmVoaW5kICovCi0JCQlidWZzX3Rv X2xhcCA9IE5CdWZmZXJzIC0gKG5leHRfdG9fY2xlYW4gLSBzdHJhdGVneV9idWZfaWQpOwor CQkJYnVmc190b19sYXAgPSBudW1fYnVmZmVycyAtIChuZXh0X3RvX2NsZWFuW3BhcnRpdGlv bl0gLSBzdHJhdGVneV9idWZfaWQpOwogI2lmZGVmIEJHV19ERUJVRwogCQkJZWxvZyhERUJV RzIsICJiZ3dyaXRlciBhaGVhZDogYmd3ICV1LSV1IHN0cmF0ZWd5ICV1LSV1IGRlbHRhPSVs ZCBsYXA9JWQiLAogCQkJCSBuZXh0X3Bhc3NlcywgbmV4dF90b19jbGVhbiwKQEAgLTM3MzQs OSArMzcyMSw5IEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0 KQogCQkJCSBzdHJhdGVneV9wYXNzZXMsIHN0cmF0ZWd5X2J1Zl9pZCwKIAkJCQkgc3RyYXRl Z3lfZGVsdGEpOwogI2VuZGlmCi0JCQluZXh0X3RvX2NsZWFuID0gc3RyYXRlZ3lfYnVmX2lk OwotCQkJbmV4dF9wYXNzZXMgPSBzdHJhdGVneV9wYXNzZXM7Ci0JCQlidWZzX3RvX2xhcCA9 IE5CdWZmZXJzOworCQkJbmV4dF90b19jbGVhbltwYXJ0aXRpb25dID0gc3RyYXRlZ3lfYnVm X2lkOworCQkJbmV4dF9wYXNzZXNbcGFydGl0aW9uXSA9IHN0cmF0ZWd5X3Bhc3NlczsKKwkJ CWJ1ZnNfdG9fbGFwID0gbnVtX2J1ZmZlcnM7CiAJCX0KIAl9CiAJZWxzZQpAQCAtMzc1MCwx NSArMzczNywxNiBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4 dCkKIAkJCSBzdHJhdGVneV9wYXNzZXMsIHN0cmF0ZWd5X2J1Zl9pZCk7CiAjZW5kaWYKIAkJ c3RyYXRlZ3lfZGVsdGEgPSAwOwotCQluZXh0X3RvX2NsZWFuID0gc3RyYXRlZ3lfYnVmX2lk OwotCQluZXh0X3Bhc3NlcyA9IHN0cmF0ZWd5X3Bhc3NlczsKLQkJYnVmc190b19sYXAgPSBO QnVmZmVyczsKKwkJbmV4dF90b19jbGVhbltwYXJ0aXRpb25dID0gc3RyYXRlZ3lfYnVmX2lk OworCQluZXh0X3Bhc3Nlc1twYXJ0aXRpb25dID0gc3RyYXRlZ3lfcGFzc2VzOworCQlidWZz X3RvX2xhcCA9IG51bV9idWZmZXJzOwogCX0KIAogCS8qIFVwZGF0ZSBzYXZlZCBpbmZvIGZv ciBuZXh0IHRpbWUgKi8KLQlwcmV2X3N0cmF0ZWd5X2J1Zl9pZCA9IHN0cmF0ZWd5X2J1Zl9p ZDsKLQlwcmV2X3N0cmF0ZWd5X3Bhc3NlcyA9IHN0cmF0ZWd5X3Bhc3NlczsKLQlzYXZlZF9p bmZvX3ZhbGlkID0gdHJ1ZTsKKwlwcmV2X3N0cmF0ZWd5X2J1Zl9pZFtwYXJ0aXRpb25dID0g c3RyYXRlZ3lfYnVmX2lkOworCXByZXZfc3RyYXRlZ3lfcGFzc2VzW3BhcnRpdGlvbl0gPSBz dHJhdGVneV9wYXNzZXM7CisJLyogWFhYIHRoaXMgbmVlZHMgdG8gaGFwcGVuIG9ubHkgYWZ0 ZXIgYWxsIHBhcnRpdGlvbnMgKi8KKwkvKiBzYXZlZF9pbmZvX3ZhbGlkID0gdHJ1ZTsgKi8K IAogCS8qCiAJICogQ29tcHV0ZSBob3cgbWFueSBidWZmZXJzIGhhZCB0byBiZSBzY2FubmVk IGZvciBlYWNoIG5ldyBhbGxvY2F0aW9uLCBpZSwKQEAgLTM3NjYsOSArMzc1NCw5IEBAIEJn QnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQogCSAqCiAJICogSWYg dGhlIHN0cmF0ZWd5IHBvaW50IGRpZG4ndCBtb3ZlLCB3ZSBkb24ndCB1cGRhdGUgdGhlIGRl bnNpdHkgZXN0aW1hdGUKIAkgKi8KLQlpZiAoc3RyYXRlZ3lfZGVsdGEgPiAwICYmIHJlY2Vu dF9hbGxvYyA+IDApCisJaWYgKHN0cmF0ZWd5X2RlbHRhID4gMCAmJiByZWNlbnRfYWxsb2Nf cGFydGl0aW9uID4gMCkKIAl7Ci0JCXNjYW5zX3Blcl9hbGxvYyA9IChmbG9hdCkgc3RyYXRl Z3lfZGVsdGEgLyAoZmxvYXQpIHJlY2VudF9hbGxvYzsKKwkJc2NhbnNfcGVyX2FsbG9jID0g KGZsb2F0KSBzdHJhdGVneV9kZWx0YSAvIChmbG9hdCkgcmVjZW50X2FsbG9jX3BhcnRpdGlv bjsKIAkJc21vb3RoZWRfZGVuc2l0eSArPSAoc2NhbnNfcGVyX2FsbG9jIC0gc21vb3RoZWRf ZGVuc2l0eSkgLwogCQkJc21vb3RoaW5nX3NhbXBsZXM7CiAJfQpAQCAtMzc3OCw3ICszNzY2 LDcgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRleHQgKndiX2NvbnRleHQpCiAJICog c3RyYXRlZ3kgcG9pbnQgYW5kIHdoZXJlIHdlJ3ZlIHNjYW5uZWQgYWhlYWQgdG8sIGJhc2Vk IG9uIHRoZSBzbW9vdGhlZAogCSAqIGRlbnNpdHkgZXN0aW1hdGUuCiAJICovCi0JYnVmc19h aGVhZCA9IE5CdWZmZXJzIC0gYnVmc190b19sYXA7CisJYnVmc19haGVhZCA9IG51bV9idWZm ZXJzIC0gYnVmc190b19sYXA7CiAJcmV1c2FibGVfYnVmZmVyc19lc3QgPSAoZmxvYXQpIGJ1 ZnNfYWhlYWQgLyBzbW9vdGhlZF9kZW5zaXR5OwogCiAJLyoKQEAgLTM3ODYsMTAgKzM3NzQs MTAgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRleHQgKndiX2NvbnRleHQpCiAJICog YSB0cnVlIGF2ZXJhZ2Ugd2Ugd2FudCBhIGZhc3QtYXR0YWNrLCBzbG93LWRlY2xpbmUgYmVo YXZpb3I6IHdlCiAJICogaW1tZWRpYXRlbHkgZm9sbG93IGFueSBpbmNyZWFzZS4KIAkgKi8K LQlpZiAoc21vb3RoZWRfYWxsb2MgPD0gKGZsb2F0KSByZWNlbnRfYWxsb2MpCi0JCXNtb290 aGVkX2FsbG9jID0gcmVjZW50X2FsbG9jOworCWlmIChzbW9vdGhlZF9hbGxvYyA8PSAoZmxv YXQpIHJlY2VudF9hbGxvY19wYXJ0aXRpb24pCisJCXNtb290aGVkX2FsbG9jID0gcmVjZW50 X2FsbG9jX3BhcnRpdGlvbjsKIAllbHNlCi0JCXNtb290aGVkX2FsbG9jICs9ICgoZmxvYXQp IHJlY2VudF9hbGxvYyAtIHNtb290aGVkX2FsbG9jKSAvCisJCXNtb290aGVkX2FsbG9jICs9 ICgoZmxvYXQpIHJlY2VudF9hbGxvY19wYXJ0aXRpb24gLSBzbW9vdGhlZF9hbGxvYykgLwog CQkJc21vb3RoaW5nX3NhbXBsZXM7CiAKIAkvKiBTY2FsZSB0aGUgZXN0aW1hdGUgYnkgYSBH VUMgdG8gYWxsb3cgbW9yZSBhZ2dyZXNzaXZlIHR1bmluZy4gKi8KQEAgLTM4MTYsNyArMzgw NCw3IEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQogCSAq IHRoZSBCR1cgd2lsbCBiZSBjYWxsZWQgZHVyaW5nIHRoZSBzY2FuX3dob2xlX3Bvb2wgdGlt ZTsgc2xpY2UgdGhlCiAJICogYnVmZmVyIHBvb2wgaW50byB0aGF0IG1hbnkgc2VjdGlvbnMu CiAJICovCi0JbWluX3NjYW5fYnVmZmVycyA9IChpbnQpIChOQnVmZmVycyAvIChzY2FuX3do b2xlX3Bvb2xfbWlsbGlzZWNvbmRzIC8gQmdXcml0ZXJEZWxheSkpOworCW1pbl9zY2FuX2J1 ZmZlcnMgPSAoaW50KSAobnVtX2J1ZmZlcnMgLyAoc2Nhbl93aG9sZV9wb29sX21pbGxpc2Vj b25kcyAvIEJnV3JpdGVyRGVsYXkpKTsKIAogCWlmICh1cGNvbWluZ19hbGxvY19lc3QgPCAo bWluX3NjYW5fYnVmZmVycyArIHJldXNhYmxlX2J1ZmZlcnNfZXN0KSkKIAl7CkBAIC0zODQx LDIwICszODI5LDIwIEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250 ZXh0KQogCS8qIEV4ZWN1dGUgdGhlIExSVSBzY2FuICovCiAJd2hpbGUgKG51bV90b19zY2Fu ID4gMCAmJiByZXVzYWJsZV9idWZmZXJzIDwgdXBjb21pbmdfYWxsb2NfZXN0KQogCXsKLQkJ aW50CQkJc3luY19zdGF0ZSA9IFN5bmNPbmVCdWZmZXIobmV4dF90b19jbGVhbiwgdHJ1ZSwK KwkJaW50CQkJc3luY19zdGF0ZSA9IFN5bmNPbmVCdWZmZXIobmV4dF90b19jbGVhbltwYXJ0 aXRpb25dLCB0cnVlLAogCQkJCQkJCQkJCQkgICB3Yl9jb250ZXh0KTsKIAotCQlpZiAoKytu ZXh0X3RvX2NsZWFuID49IE5CdWZmZXJzKQorCQlpZiAoKytuZXh0X3RvX2NsZWFuW3BhcnRp dGlvbl0gPj0gKGZpcnN0X2J1ZmZlciArIG51bV9idWZmZXJzKSkKIAkJewotCQkJbmV4dF90 b19jbGVhbiA9IDA7Ci0JCQluZXh0X3Bhc3NlcysrOworCQkJbmV4dF90b19jbGVhbltwYXJ0 aXRpb25dID0gZmlyc3RfYnVmZmVyOworCQkJbmV4dF9wYXNzZXNbcGFydGl0aW9uXSsrOwog CQl9CiAJCW51bV90b19zY2FuLS07CiAKIAkJaWYgKHN5bmNfc3RhdGUgJiBCVUZfV1JJVFRF TikKIAkJewogCQkJcmV1c2FibGVfYnVmZmVycysrOwotCQkJaWYgKCsrbnVtX3dyaXR0ZW4g Pj0gYmd3cml0ZXJfbHJ1X21heHBhZ2VzKQorCQkJaWYgKCsrbnVtX3dyaXR0ZW4gPj0gKGJn d3JpdGVyX2xydV9tYXhwYWdlcyAvIG51bV9wYXJ0aXRpb25zKSkKIAkJCXsKIAkJCQlQZW5k aW5nQmdXcml0ZXJTdGF0cy5tYXh3cml0dGVuX2NsZWFuKys7CiAJCQkJYnJlYWs7CkBAIC0z ODY4LDcgKzM4NTYsNyBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29u dGV4dCkKIAogI2lmZGVmIEJHV19ERUJVRwogCWVsb2coREVCVUcxLCAiYmd3cml0ZXI6IHJl Y2VudF9hbGxvYz0ldSBzbW9vdGhlZD0lLjJmIGRlbHRhPSVsZCBhaGVhZD0lZCBkZW5zaXR5 PSUuMmYgcmV1c2FibGVfZXN0PSVkIHVwY29taW5nX2VzdD0lZCBzY2FubmVkPSVkIHdyb3Rl PSVkIHJldXNhYmxlPSVkIiwKLQkJIHJlY2VudF9hbGxvYywgc21vb3RoZWRfYWxsb2MsIHN0 cmF0ZWd5X2RlbHRhLCBidWZzX2FoZWFkLAorCQkgcmVjZW50X2FsbG9jX3BhcnRpdGlvbiwg c21vb3RoZWRfYWxsb2MsIHN0cmF0ZWd5X2RlbHRhLCBidWZzX2FoZWFkLAogCQkgc21vb3Ro ZWRfZGVuc2l0eSwgcmV1c2FibGVfYnVmZmVyc19lc3QsIHVwY29taW5nX2FsbG9jX2VzdCwK IAkJIGJ1ZnNfdG9fbGFwIC0gbnVtX3RvX3NjYW4sCiAJCSBudW1fd3JpdHRlbiwKQEAgLTM4 OTgsOCArMzg4Niw3NCBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29u dGV4dCkKICNlbmRpZgogCX0KIAorCS8qIGNhbiB0aGlzIHBhcnRpdGlvbiBoaWJlcm5hdGUg Ki8KKwlyZXR1cm4gKGJ1ZnNfdG9fbGFwID09IDAgJiYgcmVjZW50X2FsbG9jX3BhcnRpdGlv biA9PSAwKTsKK30KKworLyoKKyAqIEJnQnVmZmVyU3luYyAtLSBXcml0ZSBvdXQgc29tZSBk aXJ0eSBidWZmZXJzIGluIHRoZSBwb29sLgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIHBlcmlv ZGljYWxseSBieSB0aGUgYmFja2dyb3VuZCB3cml0ZXIgcHJvY2Vzcy4KKyAqCisgKiBSZXR1 cm5zIHRydWUgaWYgaXQncyBhcHByb3ByaWF0ZSBmb3IgdGhlIGJnd3JpdGVyIHByb2Nlc3Mg dG8gZ28gaW50bworICogbG93LXBvd2VyIGhpYmVybmF0aW9uIG1vZGUuICAoVGhpcyBoYXBw ZW5zIGlmIHRoZSBzdHJhdGVneSBjbG9jay1zd2VlcAorICogaGFzIGJlZW4gImxhcHBlZCIg YW5kIG5vIGJ1ZmZlciBhbGxvY2F0aW9ucyBoYXZlIG9jY3VycmVkIHJlY2VudGx5LAorICog b3IgaWYgdGhlIGJnd3JpdGVyIGhhcyBiZWVuIGVmZmVjdGl2ZWx5IGRpc2FibGVkIGJ5IHNl dHRpbmcKKyAqIGJnd3JpdGVyX2xydV9tYXhwYWdlcyB0byAwLikKKyAqLworYm9vbAorQmdC dWZmZXJTeW5jKFdyaXRlYmFja0NvbnRleHQgKndiX2NvbnRleHQpCit7CisJLyogaW5mbyBv YnRhaW5lZCBmcm9tIGZyZWVsaXN0LmMgKi8KKwl1aW50MzIJCXJlY2VudF9hbGxvYzsKKwl1 aW50MzIJCXJlY2VudF9hbGxvY19wYXJ0aXRpb247CisJaW50CQkJbnVtX3BhcnRpdGlvbnM7 CisKKwkvKiBhc3N1bWUgd2UgY2FuIGhpYmVybmF0ZSwgYW55IHBhcnRpdGlvbiBjYW4gc2V0 IHRvIGZhbHNlICovCisJYm9vbAkJaGliZXJuYXRlID0gdHJ1ZTsKKworCS8qIGdldCB0aGUg bnVtYmVyIG9mIGNsb2Nrc3dlZXAgcGFydGl0aW9ucywgYW5kIHRvdGFsIGFsbG9jIGNvdW50 ICovCisJU3RyYXRlZ3lTeW5jUHJlcGFyZSgmbnVtX3BhcnRpdGlvbnMsICZyZWNlbnRfYWxs b2MpOworCisJQXNzZXJ0KG51bV9wYXJ0aXRpb25zIDw9IE1BWF9DTE9DS1NXRUVQX1BBUlRJ VElPTlMpOworCisJLyogUmVwb3J0IGJ1ZmZlciBhbGxvYyBjb3VudHMgdG8gcGdzdGF0ICov CisJUGVuZGluZ0JnV3JpdGVyU3RhdHMuYnVmX2FsbG9jICs9IHJlY2VudF9hbGxvYzsKKwor CS8qIGF2ZXJhZ2UgYWxsb2MgYnVmZmVycyBwZXIgcGFydGl0aW9uICovCisJcmVjZW50X2Fs bG9jX3BhcnRpdGlvbiA9IChyZWNlbnRfYWxsb2MgLyBudW1fcGFydGl0aW9ucyk7CisKKwkv KgorCSAqIElmIHdlJ3JlIG5vdCBydW5uaW5nIHRoZSBMUlUgc2NhbiwganVzdCBzdG9wIGFm dGVyIGRvaW5nIHRoZSBzdGF0cworCSAqIHN0dWZmLiAgV2UgbWFyayB0aGUgc2F2ZWQgc3Rh dGUgaW52YWxpZCBzbyB0aGF0IHdlIGNhbiByZWNvdmVyIHNhbmVseQorCSAqIGlmIExSVSBz Y2FuIGlzIHR1cm5lZCBiYWNrIG9uIGxhdGVyLgorCSAqLworCWlmIChiZ3dyaXRlcl9scnVf bWF4cGFnZXMgPD0gMCkKKwl7CisJCXNhdmVkX2luZm9fdmFsaWQgPSBmYWxzZTsKKwkJcmV0 dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBub3cgcHJvY2VzcyB0aGUgY2xvY2tzd2VlcCBw YXJ0aXRpb25zLCBvbmUgYnkgb25lLCB1c2luZyB0aGUgc2FtZQorCSAqIGNsZWFudXAgdGhh dCB3ZSB1c2VkIGZvciBhbGwgYnVmZmVycworCSAqCisJICogWFhYIE1heWJlIHdlIHNob3Vs ZCByYW5kb21pemUgdGhlIG9yZGVyIG9mIHBhcnRpdGlvbnMgYSBiaXQsIHNvIHRoYXQgd2UK KwkgKiBkb24ndCBzdGFydCBmcm9tIHBhcnRpdGlvbiAwIGFsbCB0aGUgdGltZT8gUGVyaGFw cyBub3QgZW50aXJlbHksIGJ1dCBhdAorCSAqIGxlYXN0IHBpY2sgYSByYW5kb20gc3RhcnRp bmcgcG9pbnQ/CisJICovCisJZm9yIChpbnQgcGFydGl0aW9uID0gMDsgcGFydGl0aW9uIDwg bnVtX3BhcnRpdGlvbnM7IHBhcnRpdGlvbisrKQorCXsKKwkJLyogaGliZXJuYXRlIGlmIGFs bCBwYXJ0aXRpb25zIGNhbiBoaWJlcm5hdGUgKi8KKwkJaGliZXJuYXRlICY9IEJnQnVmZmVy U3luY1BhcnRpdGlvbih3Yl9jb250ZXh0LCBudW1fcGFydGl0aW9ucywKKwkJCQkJCQkJCQkg ICBwYXJ0aXRpb24sIHJlY2VudF9hbGxvY19wYXJ0aXRpb24pOworCX0KKworCS8qIG5vdyB0 aGF0IHdlJ3ZlIHNjYW5uZWQgYWxsIHBhcnRpdGlvbnMsIG1hcmsgdGhlIGNhY2hlZCBpbmZv IGFzIHZhbGlkICovCisJc2F2ZWRfaW5mb192YWxpZCA9IHRydWU7CisKIAkvKiBSZXR1cm4g dHJ1ZSBpZiBPSyB0byBoaWJlcm5hdGUgKi8KLQlyZXR1cm4gKGJ1ZnNfdG9fbGFwID09IDAg JiYgcmVjZW50X2FsbG9jID09IDApOworCXJldHVybiBoaWJlcm5hdGU7CiB9CiAKIC8qCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwppbmRleCAyOGQ5NTJiMzUzNC4u ZDQwYjA5ZjdlNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2Zy ZWVsaXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwpA QCAtMTUsMjcgKzE1LDQ3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaWZk ZWYgVVNFX0xJQk5VTUEKKyNpbmNsdWRlIDxzY2hlZC5oPgorI2VuZGlmCisKKyNpZmRlZiBV U0VfTElCTlVNQQorI2luY2x1ZGUgPG51bWEuaD4KKyNpbmNsdWRlIDxudW1haWYuaD4KKyNl bmRpZgorCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWZfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvcHJvYy5oIgogCiAjZGVmaW5lIElOVF9BQ0NFU1NfT05DRSh2YXIpCSgoaW50KSgqKCh2 b2xhdGlsZSBpbnQgKikmKHZhcikpKSkKIAogCiAvKgotICogVGhlIHNoYXJlZCBmcmVlbGlz dCBjb250cm9sIGluZm9ybWF0aW9uLgorICogSW5mb3JtYXRpb24gYWJvdXQgb25lIHBhcnRp dGlvbiBvZiB0aGUgQ2xvY2tTd2VlcCAob24gYSBzdWJzZXQgb2YgYnVmZmVycykuCisgKgor ICogWFhYIFNob3VsZCBiZSBjYXJlZnVsIHRvIGFsaWduIHRoaXMgdG8gY2FjaGVsaW5lcywg ZXRjLgogICovCiB0eXBlZGVmIHN0cnVjdAogewogCS8qIFNwaW5sb2NrOiBwcm90ZWN0cyB0 aGUgdmFsdWVzIGJlbG93ICovCi0Jc2xvY2tfdAkJYnVmZmVyX3N0cmF0ZWd5X2xvY2s7CisJ c2xvY2tfdAkJY2xvY2tfc3dlZXBfbG9jazsKKworCS8qIHJhbmdlIGZvciB0aGlzIGNsb2Nr IHdlZXAgcGFydGl0aW9uICovCisJaW50MzIJCWZpcnN0QnVmZmVyOworCWludDMyCQludW1C dWZmZXJzOwogCiAJLyoKIAkgKiBjbG9jay1zd2VlcCBoYW5kOiBpbmRleCBvZiBuZXh0IGJ1 ZmZlciB0byBjb25zaWRlciBncmFiYmluZy4gTm90ZSB0aGF0CiAJICogdGhpcyBpc24ndCBh IGNvbmNyZXRlIGJ1ZmZlciAtIHdlIG9ubHkgZXZlciBpbmNyZWFzZSB0aGUgdmFsdWUuIFNv LCB0bwogCSAqIGdldCBhbiBhY3R1YWwgYnVmZmVyLCBpdCBuZWVkcyB0byBiZSB1c2VkIG1v ZHVsbyBOQnVmZmVycy4KKwkgKgorCSAqIFhYWCBUaGlzIGlzIHJlbGF0aXZlIHRvIGZpcnN0 QnVmZmVyLCBzbyBuZWVkcyB0byBiZSBvZmZzZXQgcHJvcGVybHkuCisJICoKKwkgKiBYWFgg Zmlyc3RCdWZmZXIgKyAobmV4dFZpY3RpbUJ1ZmZlciAlIG51bUJ1ZmZlcnMpCiAJICovCiAJ cGdfYXRvbWljX3VpbnQzMiBuZXh0VmljdGltQnVmZmVyOwogCkBAIC00NiwxMSArNjYsMzIg QEAgdHlwZWRlZiBzdHJ1Y3QKIAl1aW50MzIJCWNvbXBsZXRlUGFzc2VzOyAvKiBDb21wbGV0 ZSBjeWNsZXMgb2YgdGhlIGNsb2NrLXN3ZWVwICovCiAJcGdfYXRvbWljX3VpbnQzMiBudW1C dWZmZXJBbGxvY3M7CS8qIEJ1ZmZlcnMgYWxsb2NhdGVkIHNpbmNlIGxhc3QgcmVzZXQgKi8K IAorCS8qIHJ1bm5pbmcgdG90YWwgb2YgYWxsb2NzICovCisJcGdfYXRvbWljX3VpbnQ2NCBu dW1Ub3RhbEFsbG9jczsKKworfSBDbG9ja1N3ZWVwOworCisvKgorICogVGhlIHNoYXJlZCBm cmVlbGlzdCBjb250cm9sIGluZm9ybWF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdAorewor CS8qIFNwaW5sb2NrOiBwcm90ZWN0cyB0aGUgdmFsdWVzIGJlbG93ICovCisJc2xvY2tfdAkJ YnVmZmVyX3N0cmF0ZWd5X2xvY2s7CisKIAkvKgogCSAqIEJnd29ya2VyIHByb2Nlc3MgdG8g YmUgbm90aWZpZWQgdXBvbiBhY3Rpdml0eSBvciAtMSBpZiBub25lLiBTZWUKIAkgKiBTdHJh dGVneU5vdGlmeUJnV3JpdGVyLgogCSAqLwogCWludAkJCWJnd3Byb2NubzsKKwkvLyB0aGUg X2F0dHJpYnV0ZV8gZG9lcyBub3Qgd29yayBvbiBXaW5kb3dzLCBpdCBzZWVtcworCS8vaW50 CQkJX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg2NCkpKSBiZ3dwcm9jbm87CisKKwkvKiBpbmZv IGFib3V0IGZyZWVsaXN0IHBhcnRpdGlvbmluZyAqLworCWludAkJCW51bV9wYXJ0aXRpb25z OworCisJLyogY2xvY2tzd2VlcCBwYXJ0aXRpb25zICovCisJQ2xvY2tTd2VlcAlzd2VlcHNb RkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0gQnVmZmVyU3RyYXRlZ3lDb250cm9sOwogCiAv KiBQb2ludGVycyB0byBzaGFyZWQgc3RhdGUgKi8KQEAgLTg5LDYgKzEzMCw3IEBAIHN0YXRp YyBCdWZmZXJEZXNjICpHZXRCdWZmZXJGcm9tUmluZyhCdWZmZXJBY2Nlc3NTdHJhdGVneSBz dHJhdGVneSwKIAkJCQkJCQkJCSB1aW50MzIgKmJ1Zl9zdGF0ZSk7CiBzdGF0aWMgdm9pZCBB ZGRCdWZmZXJUb1JpbmcoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkJCQkJ QnVmZmVyRGVzYyAqYnVmKTsKK3N0YXRpYyBDbG9ja1N3ZWVwICpDaG9vc2VDbG9ja1N3ZWVw KHZvaWQpOwogCiAvKgogICogQ2xvY2tTd2VlcFRpY2sgLSBIZWxwZXIgcm91dGluZSBmb3Ig U3RyYXRlZ3lHZXRCdWZmZXIoKQpAQCAtMTAwLDYgKzE0Miw3IEBAIHN0YXRpYyBpbmxpbmUg dWludDMyCiBDbG9ja1N3ZWVwVGljayh2b2lkKQogewogCXVpbnQzMgkJdmljdGltOworCUNs b2NrU3dlZXAgKnN3ZWVwID0gQ2hvb3NlQ2xvY2tTd2VlcCgpOwogCiAJLyoKIAkgKiBBdG9t aWNhbGx5IG1vdmUgaGFuZCBhaGVhZCBvbmUgYnVmZmVyIC0gaWYgdGhlcmUncyBzZXZlcmFs IHByb2Nlc3NlcwpAQCAtMTA3LDE0ICsxNTAsMTQgQEAgQ2xvY2tTd2VlcFRpY2sodm9pZCkK IAkgKiBhcHBhcmVudCBvcmRlci4KIAkgKi8KIAl2aWN0aW0gPQotCQlwZ19hdG9taWNfZmV0 Y2hfYWRkX3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyLCAxKTsKKwkJ cGdfYXRvbWljX2ZldGNoX2FkZF91MzIoJnN3ZWVwLT5uZXh0VmljdGltQnVmZmVyLCAxKTsK IAotCWlmICh2aWN0aW0gPj0gTkJ1ZmZlcnMpCisJaWYgKHZpY3RpbSA+PSBzd2VlcC0+bnVt QnVmZmVycykKIAl7CiAJCXVpbnQzMgkJb3JpZ2luYWxWaWN0aW0gPSB2aWN0aW07CiAKIAkJ LyogYWx3YXlzIHdyYXAgd2hhdCB3ZSBsb29rIHVwIGluIEJ1ZmZlckRlc2NyaXB0b3JzICov Ci0JCXZpY3RpbSA9IHZpY3RpbSAlIE5CdWZmZXJzOworCQl2aWN0aW0gPSB2aWN0aW0gJSBz d2VlcC0+bnVtQnVmZmVyczsKIAogCQkvKgogCQkgKiBJZiB3ZSdyZSB0aGUgb25lIHRoYXQg anVzdCBjYXVzZWQgYSB3cmFwYXJvdW5kLCBmb3JjZQpAQCAtMTQwLDE5ICsxODMsNjEgQEAg Q2xvY2tTd2VlcFRpY2sodm9pZCkKIAkJCQkgKiBjb3VsZCBsZWFkIHRvIGFuIG92ZXJmbG93 IG9mIG5leHRWaWN0aW1CdWZmZXJzLCBidXQgdGhhdCdzCiAJCQkJICogaGlnaGx5IHVubGlr ZWx5IGFuZCB3b3VsZG4ndCBiZSBwYXJ0aWN1bGFybHkgaGFybWZ1bC4KIAkJCQkgKi8KLQkJ CQlTcGluTG9ja0FjcXVpcmUoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xv Y2spOworCQkJCVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOwog Ci0JCQkJd3JhcHBlZCA9IGV4cGVjdGVkICUgTkJ1ZmZlcnM7CisJCQkJd3JhcHBlZCA9IGV4 cGVjdGVkICUgc3dlZXAtPm51bUJ1ZmZlcnM7CiAKLQkJCQlzdWNjZXNzID0gcGdfYXRvbWlj X2NvbXBhcmVfZXhjaGFuZ2VfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm5leHRWaWN0aW1CdWZm ZXIsCisJCQkJc3VjY2VzcyA9IHBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3UzMigmc3dl ZXAtPm5leHRWaWN0aW1CdWZmZXIsCiAJCQkJCQkJCQkJCQkJCSAmZXhwZWN0ZWQsIHdyYXBw ZWQpOwogCQkJCWlmIChzdWNjZXNzKQotCQkJCQlTdHJhdGVneUNvbnRyb2wtPmNvbXBsZXRl UGFzc2VzKys7Ci0JCQkJU3BpbkxvY2tSZWxlYXNlKCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZl cl9zdHJhdGVneV9sb2NrKTsKKwkJCQkJc3dlZXAtPmNvbXBsZXRlUGFzc2VzKys7CisJCQkJ U3BpbkxvY2tSZWxlYXNlKCZzd2VlcC0+Y2xvY2tfc3dlZXBfbG9jayk7CiAJCQl9CiAJCX0K IAl9Ci0JcmV0dXJuIHZpY3RpbTsKKworCS8qIFhYWCBidWZmZXIgSURzIGFyZSAxLWJhc2Vk LCB3ZSdyZSBjYWxjdWxhdGluZyAwLWJhc2VkIGluZGV4ZXMgKi8KKwlBc3NlcnQoQnVmZmVy SXNWYWxpZCgxICsgc3dlZXAtPmZpcnN0QnVmZmVyICsgKHZpY3RpbSAlIHN3ZWVwLT5udW1C dWZmZXJzKSkpOworCisJcmV0dXJuIHN3ZWVwLT5maXJzdEJ1ZmZlciArIHZpY3RpbTsKK30K KworLyoKKyAqIGNhbGN1bGF0ZV9wYXJ0aXRpb25faW5kZXgKKyAqCQljYWxjdWxhdGUgdGhl IGJ1ZmZlciAvIGNsb2NrLXN3ZWVwIHBhcnRpdGlvbiB0byB1c2UKKyAqCisgKiB1c2UgUElE IHRvIGRldGVybWluZSB0aGUgYnVmZmVyIHBhcnRpdGlvbgorICoKKyAqIFhYWCBXZSBjb3Vs ZCB1c2UgTlVNQSBub2RlIC8gY29yZSBJRCB0byBwaWNrIHBhcnRpdGlvbiwgYnV0IHdlJ2Qg bmVlZAorICogdG8gaGFuZGxlIGNhc2VzIHdpdGggZmV3ZXIgbm9kZXMvY29yZXMgdGhhbiBw YXJ0aXRpb25zIHNvbWVob3cuIEFsdGhvdWdoLAorICogbWF5YmUgdGhlIGJhbGFuY2luZyB3 b3VsZCBoYW5kbGUgdGhhdCB0b28uCisgKi8KK3N0YXRpYyBpbnQKK2NhbGN1bGF0ZV9wYXJ0 aXRpb25faW5kZXgodm9pZCkKK3sKKwlyZXR1cm4gKE15UHJvY1BpZCAlIFN0cmF0ZWd5Q29u dHJvbC0+bnVtX3BhcnRpdGlvbnMpOworfQorCisvKgorICogQ2hvb3NlQ2xvY2tTd2VlcAor ICoJCXBpY2sgYSBjbG9ja3N3ZWVwIHBhcnRpdGlvbiBiYXNlZCBvbiBOVU1BIG5vZGUgYW5k IENQVQorICoKKyAqIFRoZSBudW1iZXIgb2YgY2xvY2tzd2VlcCBwYXJ0aXRpb25zIG1heSBu b3QgbWF0Y2ggdGhlIG51bWJlciBvZiBOVU1BCisgKiBub2RlcywgYnV0IGl0IHNob3VsZCBu b3QgYmUgbG93ZXIuIEVhY2ggcGFydGl0aW9uIHNob3VsZCBiZSBtYXBwZWQgdG8KKyAqIGEg c2luZ2xlIE5VTUEgbm9kZSwgYnV0IGEgbm9kZSBtYXkgaGF2ZSBtdWx0aXBsZSBwYXJ0aXRp b25zLiBJZiB0aGVyZQorICogYXJlIG11bHRpcGxlIHBhcnRpdGlvbnMgcGVyIG5vZGUgKGFs bCBub2RlcyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZgorICogcGFydGl0aW9ucyksIHdlIHBp Y2sgdGhlIHBhcnRpdGlvbiB1c2luZyBDUFUuCisgKgorICogWFhYIE1heWJlIHdlIHNob3Vs ZCBkbyBib3RoIHRoZSB0b3RhbCBhbmQgInBlciBncm91cCIgY291bnRzIGEgcG93ZXIgb2YK KyAqIHR3bz8gVGhhdCdkIGFsbG93IHVzaW5nIHNoaWZ0cyBpbnN0ZWFkIG9mIGRpdmlzaW9u cyBpbiB0aGUgY2FsY3VsYXRpb24sCisgKiBhbmQgdGhhdCdzIGNoZWFwZXIuIEJ1dCBob3cg d291bGQgdGhhdCBkZWFsIHdpdGggb2RkIG51bWJlciBvZiBub2Rlcz8KKyAqLworc3RhdGlj IENsb2NrU3dlZXAgKgorQ2hvb3NlQ2xvY2tTd2VlcCh2b2lkKQoreworCWludAkJCWluZGV4 ID0gY2FsY3VsYXRlX3BhcnRpdGlvbl9pbmRleCgpOworCisJcmV0dXJuICZTdHJhdGVneUNv bnRyb2wtPnN3ZWVwc1tpbmRleF07CiB9CiAKIC8qCkBAIC0yMjQsOSArMzA5LDM1IEBAIFN0 cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50MzIg KmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJICogdGhlIHJhdGUgb2YgYnVmZmVyIGNvbnN1 bXB0aW9uLiAgTm90ZSB0aGF0IGJ1ZmZlcnMgcmVjeWNsZWQgYnkgYQogCSAqIHN0cmF0ZWd5 IG9iamVjdCBhcmUgaW50ZW50aW9uYWxseSBub3QgY291bnRlZCBoZXJlLgogCSAqLwotCXBn X2F0b21pY19mZXRjaF9hZGRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm51bUJ1ZmZlckFsbG9j cywgMSk7CisJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoJkNob29zZUNsb2NrU3dlZXAoKS0+ bnVtQnVmZmVyQWxsb2NzLCAxKTsKIAotCS8qIFVzZSB0aGUgImNsb2NrIHN3ZWVwIiBhbGdv cml0aG0gdG8gZmluZCBhIGZyZWUgYnVmZmVyICovCisJLyoKKwkgKiBVc2UgdGhlICJjbG9j ayBzd2VlcCIgYWxnb3JpdGhtIHRvIGZpbmQgYSBmcmVlIGJ1ZmZlcgorCSAqCisJICogWFhY IE5vdGUgdGhhdCBDbG9ja1N3ZWVwVGljaygpIGlzIE5VTUEtYXdhcmUsIGkuZS4gaXQgb25s eSBsb29rcyBhdAorCSAqIGJ1ZmZlcnMgZnJvbSBhIHNpbmdsZSBwYXJ0aXRpb24sIGFsaWdu ZWQgd2l0aCB0aGUgTlVNQSBub2RlLiBUaGF0IG1lYW5zCisJICogaXQgb25seSBhY2Nlc3Nl cyBidWZmZXJzIGZyb20gdGhlIHNhbWUgTlVNQSBub2RlLgorCSAqCisJICogWFhYIFRoYXQg YWxzbyBtZWFucyBlYWNoIHByb2Nlc3MgInN3ZWVwcyIgb25seSBhIGZyYWN0aW9uIG9mIGJ1 ZmZlcnMsCisJICogZXZlbiBpZiB0aGUgb3RoZXIgYnVmZmVycyBhcmUgYmV0dGVyIGNhbmRp ZGF0ZXMgZm9yIGV2aWN0aW9uLiBNYXliZQorCSAqIHRoZXJlIHNob3VsZCBiZSBzb21lIGxv Z2ljIHRvICJzdGVhbCIgYnVmZmVycyBmcm9tIG90aGVyIGZyZWVsaXN0cyBvcgorCSAqIG90 aGVyIG5vZGVzPworCSAqCisJICogWFhYIFdvdWxkIHRoYXQgYWxzbyBtZWFuIHdlJ2QgaGF2 ZSBtdWx0aXBsZSBiZ3dyaXRlcnMsIG9uZSBmb3IgZWFjaAorCSAqIG5vZGUsIG9yIHdvdWxk IG9uZSBiZ3dyaXRlciBoYW5kbGUgYWxsIG9mIHRoYXQ/CisJICoKKwkgKiBYWFggVGhpcyBv bmx5IHNlYXJjaGVzIGEgc2luZ2xlIHBhcnRpdGlvbiwgd2hpY2ggY2FuIHJlc3VsdCBpbiAi bm8KKwkgKiB1bnBpbm5lZCBidWZmZXJzIGF2YWlsYWJsZSIgZXZlbiBpZiB0aGVyZSBhcmUg YnVmZmVycyBpbiBvdGhlcgorCSAqIHBhcnRpdGlvbnMuIFNob3VsZCBiZSBmaXhlZCBieSBm YWxsaW5nIGJhY2sgdG8gb3RoZXIgcGFydGl0aW9ucyBpZgorCSAqIG5lZWRlZC4KKwkgKgor CSAqIFhYWCBBbHNvLCB0aGUgdHJ5Y291bnRlciBzaG91bGQgbm90IGJlIHNldCB0byBOQnVm ZmVycywgYnV0IHRvIGJ1ZmZlcgorCSAqIGNvdW50IGZvciB0aGF0IG9uZSBwYXJ0aXRpb24u IEluIGZhY3QsIHRoaXMgc2hvdWxkIG5vdCBjYWxsIENsb2NrU3dlZXBUaWNrCisJICogZm9y IGV2ZXJ5IGl0ZXJhdGlvbi4gVGhlIGNhbGwgaXMgbGlrZWx5IHF1aXRlIGV4cGVuc2l2ZSAo ZG9lcyBhIGxvdAorCSAqIG9mIHN0dWZmKSwgYW5kIGFsc28gbWF5IHJldHVybiBhIGRpZmZl cmVudCBwYXJ0aXRpb24gb24gZWFjaCBjYWxsLgorCSAqIFdlIHNob3VsZCBqdXN0IGRvIGl0 IG9uY2UsIGFuZCB0aGVuIGRvIHRoZSBmb3IoOzspIGxvb3AuIEFuZCB0aGVuCisJICogbWF5 YmUgYWR2YW5jZSB0byB0aGUgbmV4dCBwYXJ0aXRpb24sIHVudGlsIHdlIHNjYW4gdGhyb3Vn aCBhbGwgb2YgdGhlbS4KKwkgKi8KIAl0cnljb3VudGVyID0gTkJ1ZmZlcnM7CiAJZm9yICg7 OykKIAl7CkBAIC0zMDYsNiArNDE3LDQ2IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFj Y2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9y CiAJfQogfQogCisvKgorICogU3RyYXRlZ3lTeW5jUHJlcGFyZSAtLSBwcmVwYXJlIGZvciBz eW5jIG9mIGFsbCBwYXJ0aXRpb25zCisgKgorICogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Yg Y2xvY2tzd2VlcCBwYXJ0aXRpb25zLCBhbmQgY2FsY3VsYXRlIHRoZSByZWNlbnQKKyAqIGJ1 ZmZlcnMgYWxsb2NzIChhcyBhIHN1bSBvZiBhbGwgdGhlIHBhcnRpdGlvbnMpLiBUaGlzIGFs bG93cyBCZ0J1ZmZlclN5bmMKKyAqIHRvIGNhbGN1bGF0ZSBhdmVyYWdlIG51bWJlciBvZiBh bGxvY2F0aW9ucyBwZXIgcGFydGl0aW9uIGZvciB0aGUgbmV4dAorICogc3luYyBjeWNsZS4K KyAqCisgKiBJbiBhZGRpdGlvbiBpdCByZXR1cm5zIHRoZSBjb3VudCBvZiByZWNlbnQgYnVm ZmVyIGFsbG9jcywgd2hpY2ggaXMgYSB0b3RhbAorICogc3VtbWVkIGZyb20gYWxsIHBhcnRp dGlvbnMuIFRoZSBhbGxvYyBjb3VudHMgYXJlIHJlc2V0IGFmdGVyIGJlaW5nIHJlYWQsCisg KiBhcyB0aGUgcGFydGl0aW9ucyBhcmUgd2Fsa2VkLgorICovCit2b2lkCitTdHJhdGVneVN5 bmNQcmVwYXJlKGludCAqbnVtX3BhcnRzLCB1aW50MzIgKm51bV9idWZfYWxsb2MpCit7CisJ Km51bV9idWZfYWxsb2MgPSAwOworCSpudW1fcGFydHMgPSBTdHJhdGVneUNvbnRyb2wtPm51 bV9wYXJ0aXRpb25zOworCisJLyoKKwkgKiBXZSBsb2NrIHRoZSBwYXJ0aXRpb25zIG9uZSBi eSBvbmUsIHNvIG5vdCBleGFjbHkgaW4gc3luYywgYnV0IHRoYXQKKwkgKiBzaG91bGQgYmUg ZmluZS4gV2UncmUgb25seSBsb29raW5nIGZvciBoZXVyaXN0aWNzIGFueXdheS4KKwkgKi8K Kwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnM7 IGkrKykKKwl7CisJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dl ZXBzW2ldOworCisJCVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2sp OworCQlpZiAobnVtX2J1Zl9hbGxvYykKKwkJeworCQkJdWludDMyCWFsbG9jcyA9IHBnX2F0 b21pY19leGNoYW5nZV91MzIoJnN3ZWVwLT5udW1CdWZmZXJBbGxvY3MsIDApOworCisJCQkv KiBpbmNsdWRlIHRoZSBjb3VudCBpbiB0aGUgcnVubmluZyB0b3RhbCAqLworCQkJcGdfYXRv bWljX2ZldGNoX2FkZF91NjQoJnN3ZWVwLT5udW1Ub3RhbEFsbG9jcywgYWxsb2NzKTsKKwor CQkJKm51bV9idWZfYWxsb2MgKz0gYWxsb2NzOworCQl9CisJCVNwaW5Mb2NrUmVsZWFzZSgm c3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOworCX0KK30KKwogLyoKICAqIFN0cmF0ZWd5U3lu Y1N0YXJ0IC0tIHRlbGwgQmdCdWZmZXJTeW5jIHdoZXJlIHRvIHN0YXJ0IHN5bmNpbmcKICAq CkBAIC0zMTMsMzcgKzQ2NCw0NCBAQCBTdHJhdGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nlc3NT dHJhdGVneSBzdHJhdGVneSwgdWludDMyICpidWZfc3RhdGUsIGJvb2wgKmZyb21fcgogICog QmdCdWZmZXJTeW5jKCkgd2lsbCBwcm9jZWVkIGNpcmN1bGFybHkgYXJvdW5kIHRoZSBidWZm ZXIgYXJyYXkgZnJvbSB0aGVyZS4KICAqCiAgKiBJbiBhZGRpdGlvbiwgd2UgcmV0dXJuIHRo ZSBjb21wbGV0ZWQtcGFzcyBjb3VudCAod2hpY2ggaXMgZWZmZWN0aXZlbHkKLSAqIHRoZSBo aWdoZXItb3JkZXIgYml0cyBvZiBuZXh0VmljdGltQnVmZmVyKSBhbmQgdGhlIGNvdW50IG9m IHJlY2VudCBidWZmZXIKLSAqIGFsbG9jcyBpZiBub24tTlVMTCBwb2ludGVycyBhcmUgcGFz c2VkLiAgVGhlIGFsbG9jIGNvdW50IGlzIHJlc2V0IGFmdGVyCi0gKiBiZWluZyByZWFkLgor ICogdGhlIGhpZ2hlci1vcmRlciBiaXRzIG9mIG5leHRWaWN0aW1CdWZmZXIpLgorICoKKyAq IFRoaXMgb25seSBjb25zaWRlcnMgYSBzaW5nbGUgY2xvY2tzd2VlcCBwYXJ0aXRpb24sIGFz IEJnQnVmZmVyU3luYyBsb29rcworICogYXQgdGhlbSBvbmUgYnkgb25lLgogICovCiBpbnQK LVN0cmF0ZWd5U3luY1N0YXJ0KHVpbnQzMiAqY29tcGxldGVfcGFzc2VzLCB1aW50MzIgKm51 bV9idWZfYWxsb2MpCitTdHJhdGVneVN5bmNTdGFydChpbnQgcGFydGl0aW9uLCB1aW50MzIg KmNvbXBsZXRlX3Bhc3NlcywKKwkJCQkgIGludCAqZmlyc3RfYnVmZmVyLCBpbnQgKm51bV9i dWZmZXJzKQogewogCXVpbnQzMgkJbmV4dFZpY3RpbUJ1ZmZlcjsKIAlpbnQJCQlyZXN1bHQ7 CisJQ2xvY2tTd2VlcCAqc3dlZXAgPSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbcGFydGl0 aW9uXTsKIAotCVNwaW5Mb2NrQWNxdWlyZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3Ry YXRlZ3lfbG9jayk7Ci0JbmV4dFZpY3RpbUJ1ZmZlciA9IHBnX2F0b21pY19yZWFkX3UzMigm U3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyKTsKLQlyZXN1bHQgPSBuZXh0Vmlj dGltQnVmZmVyICUgTkJ1ZmZlcnM7CisJQXNzZXJ0KChwYXJ0aXRpb24gPj0gMCkgJiYgKHBh cnRpdGlvbiA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMpKTsKKworCVNwaW5M b2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOworCW5leHRWaWN0aW1CdWZm ZXIgPSBwZ19hdG9taWNfcmVhZF91MzIoJnN3ZWVwLT5uZXh0VmljdGltQnVmZmVyKTsKKwly ZXN1bHQgPSBuZXh0VmljdGltQnVmZmVyICUgc3dlZXAtPm51bUJ1ZmZlcnM7CisKKwkqZmly c3RfYnVmZmVyID0gc3dlZXAtPmZpcnN0QnVmZmVyOworCSpudW1fYnVmZmVycyA9IHN3ZWVw LT5udW1CdWZmZXJzOwogCiAJaWYgKGNvbXBsZXRlX3Bhc3NlcykKIAl7Ci0JCSpjb21wbGV0 ZV9wYXNzZXMgPSBTdHJhdGVneUNvbnRyb2wtPmNvbXBsZXRlUGFzc2VzOworCQkqY29tcGxl dGVfcGFzc2VzID0gc3dlZXAtPmNvbXBsZXRlUGFzc2VzOwogCiAJCS8qCiAJCSAqIEFkZGl0 aW9uYWxseSBhZGQgdGhlIG51bWJlciBvZiB3cmFwYXJvdW5kcyB0aGF0IGhhcHBlbmVkIGJl Zm9yZQogCQkgKiBjb21wbGV0ZVBhc3NlcyBjb3VsZCBiZSBpbmNyZW1lbnRlZC4gQy5mLiBD bG9ja1N3ZWVwVGljaygpLgogCQkgKi8KLQkJKmNvbXBsZXRlX3Bhc3NlcyArPSBuZXh0Vmlj dGltQnVmZmVyIC8gTkJ1ZmZlcnM7CisJCSpjb21wbGV0ZV9wYXNzZXMgKz0gbmV4dFZpY3Rp bUJ1ZmZlciAvIHN3ZWVwLT5udW1CdWZmZXJzOwogCX0KKwlTcGluTG9ja1JlbGVhc2UoJnN3 ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKIAotCWlmIChudW1fYnVmX2FsbG9jKQotCXsKLQkJ Km51bV9idWZfYWxsb2MgPSBwZ19hdG9taWNfZXhjaGFuZ2VfdTMyKCZTdHJhdGVneUNvbnRy b2wtPm51bUJ1ZmZlckFsbG9jcywgMCk7Ci0JfQotCVNwaW5Mb2NrUmVsZWFzZSgmU3RyYXRl Z3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7Ci0JcmV0dXJuIHJlc3VsdDsKKwkv KiBYWFggYnVmZmVyIElEcyBzdGFydCBhdCAxLCB3ZSdyZSBjYWxjdWxhdGluZyAwLWJhc2Vk IGluZGV4ZXMgKi8KKwlBc3NlcnQoQnVmZmVySXNWYWxpZCgxICsgc3dlZXAtPmZpcnN0QnVm ZmVyICsgcmVzdWx0KSk7CisKKwlyZXR1cm4gc3dlZXAtPmZpcnN0QnVmZmVyICsgcmVzdWx0 OwogfQogCiAvKgpAQCAtMzgwLDYgKzUzOCw5IEBAIFNpemUKIFN0cmF0ZWd5U2htZW1TaXpl KHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZSA9IDA7CisJaW50CQkJbnVtX3BhcnRpdGlvbnM7CisK KwlCdWZmZXJQYXJ0aXRpb25QYXJhbXMoJm51bV9wYXJ0aXRpb25zKTsKIAogCS8qIHNpemUg b2YgbG9va3VwIGhhc2ggdGFibGUgLi4uIHNlZSBjb21tZW50IGluIFN0cmF0ZWd5SW5pdGlh bGl6ZSAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCdWZUYWJsZVNobWVtU2l6ZShOQnVm ZmVycyArIE5VTV9CVUZGRVJfUEFSVElUSU9OUykpOwpAQCAtMzg3LDYgKzU0OCwxMCBAQCBT dHJhdGVneVNobWVtU2l6ZSh2b2lkKQogCS8qIHNpemUgb2YgdGhlIHNoYXJlZCByZXBsYWNl bWVudCBzdHJhdGVneSBjb250cm9sIGJsb2NrICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUs IE1BWEFMSUdOKHNpemVvZihCdWZmZXJTdHJhdGVneUNvbnRyb2wpKSk7CiAKKwkvKiBzaXpl IG9mIGNsb2Nrc3dlZXAgcGFydGl0aW9ucyAoYXQgbGVhc3Qgb25lIHBlciBOVU1BIG5vZGUp ICovCisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE1BWEFMSUdOKG11bF9zaXplKHNpemVvZihD bG9ja1N3ZWVwKSwKKwkJCQkJCQkJCQkJbnVtX3BhcnRpdGlvbnMpKSk7CisKIAlyZXR1cm4g c2l6ZTsKIH0KIApAQCAtNDAyLDYgKzU2NywxMCBAQCBTdHJhdGVneUluaXRpYWxpemUoYm9v bCBpbml0KQogewogCWJvb2wJCWZvdW5kOwogCisJaW50CQkJbnVtX3BhcnRpdGlvbnM7CisK KwludW1fcGFydGl0aW9ucyA9IEJ1ZmZlclBhcnRpdGlvbkNvdW50KCk7CisKIAkvKgogCSAq IEluaXRpYWxpemUgdGhlIHNoYXJlZCBidWZmZXIgbG9va3VwIGhhc2h0YWJsZS4KIAkgKgpA QCAtNDE5LDcgKzU4OCw4IEBAIFN0cmF0ZWd5SW5pdGlhbGl6ZShib29sIGluaXQpCiAJICov CiAJU3RyYXRlZ3lDb250cm9sID0gKEJ1ZmZlclN0cmF0ZWd5Q29udHJvbCAqKQogCQlTaG1l bUluaXRTdHJ1Y3QoIkJ1ZmZlciBTdHJhdGVneSBTdGF0dXMiLAotCQkJCQkJc2l6ZW9mKEJ1 ZmZlclN0cmF0ZWd5Q29udHJvbCksCisJCQkJCQlNQVhBTElHTihvZmZzZXRvZihCdWZmZXJT dHJhdGVneUNvbnRyb2wsIHN3ZWVwcykpICsKKwkJCQkJCU1BWEFMSUdOKHNpemVvZihDbG9j a1N3ZWVwKSAqIG51bV9wYXJ0aXRpb25zKSwKIAkJCQkJCSZmb3VuZCk7CiAKIAlpZiAoIWZv dW5kKQpAQCAtNDMxLDE1ICs2MDEsNDAgQEAgU3RyYXRlZ3lJbml0aWFsaXplKGJvb2wgaW5p dCkKIAogCQlTcGluTG9ja0luaXQoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5 X2xvY2spOwogCi0JCS8qIEluaXRpYWxpemUgdGhlIGNsb2NrLXN3ZWVwIHBvaW50ZXIgKi8K LQkJcGdfYXRvbWljX2luaXRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm5leHRWaWN0aW1CdWZm ZXIsIDApOworCQkvKiBJbml0aWFsaXplIHRoZSBjbG9jayBzd2VlcCBwb2ludGVycyAoZm9y IGFsbCBwYXJ0aXRpb25zKSAqLworCQlmb3IgKGludCBpID0gMDsgaSA8IG51bV9wYXJ0aXRp b25zOyBpKyspCisJCXsKKwkJCWludAkJCW51bV9idWZmZXJzLAorCQkJCQkJZmlyc3RfYnVm ZmVyLAorCQkJCQkJbGFzdF9idWZmZXI7CisKKwkJCVNwaW5Mb2NrSW5pdCgmU3RyYXRlZ3lD b250cm9sLT5zd2VlcHNbaV0uY2xvY2tfc3dlZXBfbG9jayk7CisKKwkJCXBnX2F0b21pY19p bml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0ubmV4dFZpY3RpbUJ1ZmZlciwg MCk7CisKKwkJCS8qIGdldCBpbmZvIGFib3V0IHRoZSBidWZmZXIgcGFydGl0aW9uICovCisJ CQlCdWZmZXJQYXJ0aXRpb25HZXQoaSwgJm51bV9idWZmZXJzLCAmZmlyc3RfYnVmZmVyLCAm bGFzdF9idWZmZXIpOworCisJCQkvKgorCQkJICogRklYTUUgVGhpcyBtYXkgbm90IHF1aXRl IHJpZ2h0LCBiZWNhdXNlIGlmIE5CdWZmZXJzIGlzIG5vdCBhCisJCQkgKiBwZXJmZWN0IG11 bHRpcGxlIG9mIG51bUJ1ZmZlcnMsIHRoZSBsYXN0IHBhcnRpdGlvbiB3aWxsIGhhdmUKKwkJ CSAqIG51bUJ1ZmZlcnMgc2V0IHRvbyBoaWdoLiBidWZfaW5pdCBoYW5kbGVzIHRoaXMgYnkg dHJhY2tpbmcgdGhlCisJCQkgKiByZW1haW5pbmcgbnVtYmVyIG9mIGJ1ZmZlcnMsIGFuZCBu b3Qgb3ZlcmZsb3dpbmcuCisJCQkgKi8KKwkJCVN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ld Lm51bUJ1ZmZlcnMgPSBudW1fYnVmZmVyczsKKwkJCVN0cmF0ZWd5Q29udHJvbC0+c3dlZXBz W2ldLmZpcnN0QnVmZmVyID0gZmlyc3RfYnVmZmVyOwogCi0JCS8qIENsZWFyIHN0YXRpc3Rp Y3MgKi8KLQkJU3RyYXRlZ3lDb250cm9sLT5jb21wbGV0ZVBhc3NlcyA9IDA7Ci0JCXBnX2F0 b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5udW1CdWZmZXJBbGxvY3MsIDApOwor CQkJLyogQ2xlYXIgc3RhdGlzdGljcyAqLworCQkJU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNb aV0uY29tcGxldGVQYXNzZXMgPSAwOworCQkJcGdfYXRvbWljX2luaXRfdTMyKCZTdHJhdGVn eUNvbnRyb2wtPnN3ZWVwc1tpXS5udW1CdWZmZXJBbGxvY3MsIDApOworCQkJcGdfYXRvbWlj X2luaXRfdTY0KCZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5udW1Ub3RhbEFsbG9jcywg MCk7CisJCX0KIAogCQkvKiBObyBwZW5kaW5nIG5vdGlmaWNhdGlvbiAqLwogCQlTdHJhdGVn eUNvbnRyb2wtPmJnd3Byb2NubyA9IC0xOworCisJCS8qIGluaXRpYWxpemUgdGhlIHBhcnRp dGlvbmVkIGNsb2Nrc3dlZXAgKi8KKwkJU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9u cyA9IG51bV9wYXJ0aXRpb25zOwogCX0KIAllbHNlCiAJCUFzc2VydCghaW5pdCk7CkBAIC04 MDMsMyArOTk4LDIzIEBAIFN0cmF0ZWd5UmVqZWN0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IHN0cmF0ZWd5LCBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJvbV9yCiAKIAlyZXR1cm4g dHJ1ZTsKIH0KKwordm9pZAorQ2xvY2tTd2VlcFBhcnRpdGlvbkdldEluZm8oaW50IGlkeCwK KwkJCQkJCSAgIHVpbnQzMiAqY29tcGxldGVfcGFzc2VzLCB1aW50MzIgKm5leHRfdmljdGlt X2J1ZmZlciwKKwkJCQkJCSAgIHVpbnQ2NCAqYnVmZmVyX3RvdGFsX2FsbG9jcywgdWludDMy ICpidWZmZXJfYWxsb2NzKQoreworCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29u dHJvbC0+c3dlZXBzW2lkeF07CisKKwlBc3NlcnQoKGlkeCA+PSAwKSAmJiAoaWR4IDwgU3Ry YXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9ucykpOworCisJLyogZ2V0IHRoZSBjbG9ja3N3 ZWVwIHN0YXRzICovCisJKmNvbXBsZXRlX3Bhc3NlcyA9IHN3ZWVwLT5jb21wbGV0ZVBhc3Nl czsKKwkqbmV4dF92aWN0aW1fYnVmZmVyID0gcGdfYXRvbWljX3JlYWRfdTMyKCZzd2VlcC0+ bmV4dFZpY3RpbUJ1ZmZlcik7CisKKwkqYnVmZmVyX2FsbG9jcyA9IHBnX2F0b21pY19yZWFk X3UzMigmc3dlZXAtPm51bUJ1ZmZlckFsbG9jcyk7CisJKmJ1ZmZlcl90b3RhbF9hbGxvY3Mg PSBwZ19hdG9taWNfcmVhZF91NjQoJnN3ZWVwLT5udW1Ub3RhbEFsbG9jcyk7CisKKwkvKiBj YWxjdWxhdGUgdGhlIGFjdHVhbCBidWZmZXIgSUQgKi8KKwkqbmV4dF92aWN0aW1fYnVmZmVy ID0gc3dlZXAtPmZpcnN0QnVmZmVyICsgKCpuZXh0X3ZpY3RpbV9idWZmZXIgJSBzd2VlcC0+ bnVtQnVmZmVycyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9p bnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCmluZGV4 IDEzOTA1NWE0YTdkLi4zMzA3MTkwZjYxMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9idWZfaW50ZXJuYWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50 ZXJuYWxzLmgKQEAgLTUwOCw3ICs1MDgsOSBAQCBleHRlcm4gQnVmZmVyRGVzYyAqU3RyYXRl Z3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiBleHRlcm4gYm9v bCBTdHJhdGVneVJlamVjdEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwK IAkJCQkJCQkJIEJ1ZmZlckRlc2MgKmJ1ZiwgYm9vbCBmcm9tX3JpbmcpOwogCi1leHRlcm4g aW50CVN0cmF0ZWd5U3luY1N0YXJ0KHVpbnQzMiAqY29tcGxldGVfcGFzc2VzLCB1aW50MzIg Km51bV9idWZfYWxsb2MpOworZXh0ZXJuIHZvaWQgU3RyYXRlZ3lTeW5jUHJlcGFyZShpbnQg Km51bV9wYXJ0cywgdWludDMyICpudW1fYnVmX2FsbG9jKTsKK2V4dGVybiBpbnQJU3RyYXRl Z3lTeW5jU3RhcnQoaW50IHBhcnRpdGlvbiwgdWludDMyICpjb21wbGV0ZV9wYXNzZXMsCisJ CQkJCQkJICBpbnQgKmZpcnN0X2J1ZmZlciwgaW50ICpudW1fYnVmZmVycyk7CiBleHRlcm4g dm9pZCBTdHJhdGVneU5vdGlmeUJnV3JpdGVyKGludCBiZ3dwcm9jbm8pOwogCiBleHRlcm4g U2l6ZSBTdHJhdGVneVNobWVtU2l6ZSh2b2lkKTsKQEAgLTU1NCw1ICs1NTYsNiBAQCBleHRl cm4gaW50CUJ1ZmZlclBhcnRpdGlvbkNvdW50KHZvaWQpOwogZXh0ZXJuIGludAlCdWZmZXJQ YXJ0aXRpb25Ob2Rlcyh2b2lkKTsKIGV4dGVybiB2b2lkIEJ1ZmZlclBhcnRpdGlvbkdldChp bnQgaWR4LCBpbnQgKm51bV9idWZmZXJzLAogCQkJCQkJCSAgIGludCAqZmlyc3RfYnVmZmVy LCBpbnQgKmxhc3RfYnVmZmVyKTsKK2V4dGVybiB2b2lkIEJ1ZmZlclBhcnRpdGlvblBhcmFt cyhpbnQgKm51bV9wYXJ0aXRpb25zKTsKIAogI2VuZGlmCQkJCQkJCS8qIEJVRk1HUl9JTlRF Uk5BTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggMjQ4NjBjNmMyYzQuLjcwNTJm OWRlNTdjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTM1OSw2ICszNTksMTEgQEAgZXh0 ZXJuIGludAlHZXRBY2Nlc3NTdHJhdGVneUJ1ZmZlckNvdW50KEJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IHN0cmF0ZWd5KTsKIGV4dGVybiBpbnQJR2V0QWNjZXNzU3RyYXRlZ3lQaW5MaW1pdChC dWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7CiAKIGV4dGVybiB2b2lkIEZyZWVBY2Nl c3NTdHJhdGVneShCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7CitleHRlcm4gdm9p ZCBDbG9ja1N3ZWVwUGFydGl0aW9uR2V0SW5mbyhpbnQgaWR4LAorCQkJCQkJCQkJICAgdWlu dDMyICpjb21wbGV0ZV9wYXNzZXMsCisJCQkJCQkJCQkgICB1aW50MzIgKm5leHRfdmljdGlt X2J1ZmZlciwKKwkJCQkJCQkJCSAgIHVpbnQ2NCAqYnVmZmVyX3RvdGFsX2FsbG9jcywKKwkJ CQkJCQkJCSAgIHVpbnQzMiAqYnVmZmVyX2FsbG9jcyk7CiAKIAogLyogaW5saW5lIGZ1bmN0 aW9ucyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjdfc3RyZWFtX3Jl Z3Jlc3MucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAyN19zdHJlYW1fcmVncmVzcy5wbApp bmRleCA1ODljNzlkOTdkMy4uOThiMTQ2ZWQ0YjcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Y292ZXJ5L3QvMDI3X3N0cmVhbV9yZWdyZXNzLnBsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5 L3QvMDI3X3N0cmVhbV9yZWdyZXNzLnBsCkBAIC0xOCw2ICsxOCwxMSBAQCAkbm9kZV9wcmlt YXJ5LT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ21heF9jb25uZWN0aW9ucycs ICcyNScpOwogJG5vZGVfcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZics CiAJJ21heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMgPSAxMCcpOwogCisjIFRoZSBkZWZhdWx0 IGlzIDFNQiwgd2hpY2ggaXMgbm90IGVub3VnaCB3aXRoIGNsb2NrLXN3ZWVwIHBhcnRpdGlv bmluZy4KKyMgSW5jcmVhc2UgdG8gMzJNQiwgc28gdGhhdCB3ZSBkb24ndCBnZXQgIm5vIHVu cGlubmVkIGJ1ZmZlcnMiLgorJG5vZGVfcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVz cWwuY29uZicsCisJJ3NoYXJlZF9idWZmZXJzID0gMzJNQicpOworCiAjIEVuYWJsZSBwZ19z dGF0X3N0YXRlbWVudHMgdG8gZm9yY2UgdGVzdHMgdG8gZG8gcXVlcnkganVtYmxpbmcuCiAj IHBnX3N0YXRfc3RhdGVtZW50cy5tYXggc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBob2xk IGFsbCB0aGUgZW50cmllcwogIyBvZiB0aGUgcmVncmVzc2lvbiBkYXRhYmFzZS4KZGlmZiAt LWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNTZlMjUwMjZmYmYuLmNiNTJjNDE3NTkyIDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNDI4LDYgKzQyOCw3IEBAIENsaWVu dENlcnROYW1lCiBDbGllbnRDb25uZWN0aW9uSW5mbwogQ2xpZW50RGF0YQogQ2xpZW50U29j a2V0CitDbG9ja1N3ZWVwCiBDbG9uZVB0clR5cGUKIENsb3NlUG9ydGFsU3RtdAogQ2xvc2VQ dHJUeXBlCi0tIAoyLjUxLjEKCg== --------------Mky2abyS3YoHwGs5syrGiO88 Content-Type: text/x-patch; charset=UTF-8; name="v20251111-0001-Infrastructure-for-partitioning-shared-buf.patch" Content-Disposition: attachment; filename*0="v20251111-0001-Infrastructure-for-partitioning-shared-buf.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmYzM1Yjg2NGM1MzUwYjg2NDAwMDAzNjhkZGMxZDgyYmQ0YWQzNzU2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAxNyBTZXAgMjAyNSAyMzowNDoyOSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUxMTExIDEvN10gSW5mcmFzdHJ1Y3R1cmUgZm9yIHBhcnRpdGlvbmluZyBzaGFyZWQg YnVmZmVycwoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaW1wbGUgInJlZ2lzdHJ5IiBvZiBi dWZmZXIgcGFydGl0aW9ucywga2VlcGluZwp0cmFjayBvZiB0aGUgZmlyc3QvbGFzdCBidWZm ZXIsIGV0Yy4gVGhpcyBzZXJ2ZXMgYXMgYSBzb3VyY2Ugb2YgdHJ1dGgKZm9yIGxhdGVyIHBh dGNoZXMgKGUuZy4gdG8gcGFydGl0aW9uIGNsb2NrLXN3ZWVwKS4KClRoZSByZWdpc3RyeSBp cyBhIHNtYWxsIEJ1ZmZlclBhcnRpdGlvbnMgYXJyYXkgaW4gc2hhcmVkIG1lbW9yeSwgd2l0 aApwYXJ0aXRpb25zIHNpemVkIHRvIGJlIGEgZmFpciBzaGFyZSBvZiBzaGFyZWQgYnVmZmVy cy4gTGF0ZXIgcGF0Y2hlcyBtYXkKaW1wcm92ZSB0aGlzIHRvIGNvbnNpZGVyIE5VTUEsIGFu ZCBzaW1pbGFyIGRldGFpbHMuCgpXaXRoIHRoZSBmZWF0dXJlIGRpc2FibGVkIChHVUMgc2V0 IHRvIGVtcHR5IGxpc3QpLCB0aGVyZSdsbCBiZSBhIHNpbmdsZQpwYXJ0aXRpb24gZm9yIGFs bCB0aGUgYnVmZmVycyAoYW5kIGl0IHdvbid0IGJlIG1hcHBlZCB0byBhIE5VTUEgbm9kZSku CgpOb3RlczoKCiogTWF5YmUgdGhlIG51bWJlciBvZiBwYXJ0aXRpb25zIHNob3VsZCBiZSBj b25maWd1cmFibGU/IFJpZ2h0IG5vdyBpdCdzCiAgaGFyZC1jb2RlZCBhcyA0LCBidXQgdGVz dGluZyBzaG93cyBpbmNyZWFzaW5nIHRvIGUuZy4gMTYpIGNhbiBiZQogIGJlbmVmaWNpYWwu CgoqIFRoaXMgcGFydGl0aW9uaW5nIGlzIGluZGVwZW5kZW50IG9mIHRoZSBwYXJ0aXRpb25z IGRlZmluZWQgaW4KICBsd2xvY2suaCwgd2hpY2ggZGVmaW5lcyAxMjggcGFydGl0aW9ucyB0 byByZWR1Y2UgbG9jayBjb25mbGljdCBvbiB0aGUKICBidWZmZXIgbWFwcGluZyBoYXNodGFi bGUuIFRoZSBudW1iZXIgb2YgcGFydGl0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoaXMKICBwYXRj aCBpcyBleHBlY3RlZCB0byBiZSBtdWNoIGxvd2VyIChhIGRvemVuIG9yIHNvKS4KLS0tCiBj b250cmliL3BnX2J1ZmZlcmNhY2hlL01ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDIgKy0K IGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvbWVzb24uYnVpbGQgICAgICAgICAgICB8ICAgMSAr CiAuLi4vcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbCAgICAgICAgICAgICAgfCAgMjUg KysrCiBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLmNvbnRyb2wgfCAg IDIgKy0KIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyB8 ICA4NiArKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQu YyAgICAgICAgIHwgMTQ0ICsrKysrKysrKysrKysrKysrLQogc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZfaW50ZXJuYWxzLmggICAgICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmbWdyLmggICAgICAgICAgICAgICAgICB8ICAxOSArKysKIHNyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMiArCiA5IGZpbGVzIGNoYW5n ZWQsIDI4NCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNx bAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvTWFrZWZpbGUgYi9jb250 cmliL3BnX2J1ZmZlcmNhY2hlL01ha2VmaWxlCmluZGV4IDVmNzQ4NTQzZTJlLi4wZTYxOGY2 NmFlYyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9NYWtlZmlsZQorKysg Yi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL01ha2VmaWxlCkBAIC05LDcgKzksNyBAQCBFWFRF TlNJT04gPSBwZ19idWZmZXJjYWNoZQogREFUQSA9IHBnX2J1ZmZlcmNhY2hlLS0xLjIuc3Fs IHBnX2J1ZmZlcmNhY2hlLS0xLjItLTEuMy5zcWwgXAogCXBnX2J1ZmZlcmNhY2hlLS0xLjEt LTEuMi5zcWwgcGdfYnVmZmVyY2FjaGUtLTEuMC0tMS4xLnNxbCBcCiAJcGdfYnVmZmVyY2Fj aGUtLTEuMy0tMS40LnNxbCBwZ19idWZmZXJjYWNoZS0tMS40LS0xLjUuc3FsIFwKLQlwZ19i dWZmZXJjYWNoZS0tMS41LS0xLjYuc3FsCisJcGdfYnVmZmVyY2FjaGUtLTEuNS0tMS42LnNx bCBwZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCiBQR0ZJTEVERVNDID0gInBnX2J1ZmZl cmNhY2hlIC0gbW9uaXRvcmluZyBvZiBzaGFyZWQgYnVmZmVyIGNhY2hlIGluIHJlYWwtdGlt ZSIKIAogUkVHUkVTUyA9IHBnX2J1ZmZlcmNhY2hlIHBnX2J1ZmZlcmNhY2hlX251bWEKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvbWVzb24uYnVpbGQgYi9jb250cmli L3BnX2J1ZmZlcmNhY2hlL21lc29uLmJ1aWxkCmluZGV4IDdjZDAzOWExZGY5Li43YzMxMTQx ODgxZiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9tZXNvbi5idWlsZAor KysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL21lc29uLmJ1aWxkCkBAIC0yNCw2ICsyNCw3 IEBAIGluc3RhbGxfZGF0YSgKICAgJ3BnX2J1ZmZlcmNhY2hlLS0xLjMtLTEuNC5zcWwnLAog ICAncGdfYnVmZmVyY2FjaGUtLTEuNC0tMS41LnNxbCcsCiAgICdwZ19idWZmZXJjYWNoZS0t MS41LS0xLjYuc3FsJywKKyAgJ3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwnLAogICAn cGdfYnVmZmVyY2FjaGUuY29udHJvbCcsCiAgIGt3YXJnczogY29udHJpYl9kYXRhX2FyZ3Ms CiApCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hl LS0xLjYtLTEuNy5zcWwgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hl LS0xLjYtLTEuNy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmYxYzIwOTYwYjdlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNo ZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCkBAIC0wLDAgKzEsMjUgQEAKKy8qIGNv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbCAqLwor CistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhh biB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJBTFRFUiBFWFRFTlNJT04gcGdf YnVmZmVyY2FjaGUgVVBEQVRFIFRPICcxLjcnIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQK KworLS0gUmVnaXN0ZXIgdGhlIG5ldyBmdW5jdGlvbnMuCitDUkVBVEUgT1IgUkVQTEFDRSBG VU5DVElPTiBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKCkKK1JFVFVSTlMgU0VUT0YgUkVD T1JECitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMn CitMQU5HVUFHRSBDIFBBUkFMTEVMIFNBRkU7CisKKy0tIENyZWF0ZSBhIHZpZXcgZm9yIGNv bnZlbmllbnQgYWNjZXNzLgorQ1JFQVRFIFZJRVcgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9u cyBBUworCVNFTEVDVCBQLiogRlJPTSBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKCkgQVMg UAorCShwYXJ0aXRpb24gaW50ZWdlciwJCQktLSBwYXJ0aXRpb24gaW5kZXgKKwkgbnVtX2J1 ZmZlcnMgaW50ZWdlciwJCS0tIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBwYXJ0aXRpb24K KwkgZmlyc3RfYnVmZmVyIGludGVnZXIsCQktLSBmaXJzdCBidWZmZXIgb2YgcGFydGl0aW9u CisJIGxhc3RfYnVmZmVyIGludGVnZXIpOwkJLS0gbGFzdCBidWZmZXIgb2YgcGFydGl0aW9u CisKKy0tIERvbid0IHdhbnQgdGhlc2UgdG8gYmUgYXZhaWxhYmxlIHRvIHB1YmxpYy4KK1JF Vk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucygpIEZST00g UFVCTElDOworUkVWT0tFIEFMTCBPTiBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zIEZST00g UFVCTElDOworCitHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3Bh cnRpdGlvbnMoKSBUTyBwZ19tb25pdG9yOworR1JBTlQgU0VMRUNUIE9OIHBnX2J1ZmZlcmNh Y2hlX3BhcnRpdGlvbnMgVE8gcGdfbW9uaXRvcjsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf YnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUuY29udHJvbCBiL2NvbnRyaWIvcGdfYnVmZmVy Y2FjaGUvcGdfYnVmZmVyY2FjaGUuY29udHJvbAppbmRleCBiMDMwYmEzYTZmYS4uMTE0OTk1 NTA5NDUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2Fj aGUuY29udHJvbAorKysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hl LmNvbnRyb2wKQEAgLTEsNSArMSw1IEBACiAjIHBnX2J1ZmZlcmNhY2hlIGV4dGVuc2lvbgog Y29tbWVudCA9ICdleGFtaW5lIHRoZSBzaGFyZWQgYnVmZmVyIGNhY2hlJwotZGVmYXVsdF92 ZXJzaW9uID0gJzEuNicKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjcnCiBtb2R1bGVfcGF0aG5h bWUgPSAnJGxpYmRpci9wZ19idWZmZXJjYWNoZScKIHJlbG9jYXRhYmxlID0gdHJ1ZQpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5j IGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCmluZGV4 IGFiNzkwNTMzZmY2Li44YTk4MGJkMTg2NCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZm ZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVy Y2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYwpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmlu ZSBOVU1fQlVGRkVSQ0FDSEVfRVZJQ1RfQUxMX0VMRU0gMwogCiAjZGVmaW5lIE5VTV9CVUZG RVJDQUNIRV9OVU1BX0VMRU0JMworI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9O U19FTEVNCTQKIAogUEdfTU9EVUxFX01BR0lDX0VYVCgKIAkJCQkJLm5hbWUgPSAicGdfYnVm ZmVyY2FjaGUiLApAQCAtMTAwLDYgKzEwMSw3IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdf YnVmZmVyY2FjaGVfdXNhZ2VfY291bnRzKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfYnVm ZmVyY2FjaGVfZXZpY3QpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19idWZmZXJjYWNoZV9l dmljdF9yZWxhdGlvbik7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNhY2hlX2V2 aWN0X2FsbCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlv bnMpOwogCiAKIC8qIE9ubHkgbmVlZCB0byB0b3VjaCBtZW1vcnkgb25jZSBwZXIgYmFja2Vu ZCBwcm9jZXNzIGxpZmV0aW1lICovCkBAIC03NzYsMyArNzc4LDg3IEBAIHBnX2J1ZmZlcmNh Y2hlX2V2aWN0X2FsbChQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJOX0RBVFVNKHJl c3VsdCk7CiB9CisKKy8qCisgKiBJbnF1aXJlIGFib3V0IHBhcnRpdGlvbmluZyBvZiBidWZm ZXJzIGJldHdlZW4gTlVNQSBub2Rlcy4KKyAqLworRGF0dW0KK3BnX2J1ZmZlcmNhY2hlX3Bh cnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRleHQgKmZ1bmNj dHg7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVR1cGxlRGVzYwl0dXBsZWRlc2M7 CisJVHVwbGVEZXNjCWV4cGVjdGVkX3R1cGxlZGVzYzsKKwlIZWFwVHVwbGUJdHVwbGU7CisJ RGF0dW0JCXJlc3VsdDsKKworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlmdW5j Y3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisKKwkJLyogU3dpdGNoIGNvbnRleHQgd2hl biBhbGxvY2F0aW5nIHN0dWZmIHRvIGJlIHVzZWQgaW4gbGF0ZXIgY2FsbHMgKi8KKwkJb2xk Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21l bW9yeV9jdHgpOworCisJCWlmIChnZXRfY2FsbF9yZXN1bHRfdHlwZShmY2luZm8sIE5VTEws ICZleHBlY3RlZF90dXBsZWRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lURSkKKwkJCWVsb2co RVJST1IsICJyZXR1cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKTsKKworCQlpZiAoZXhw ZWN0ZWRfdHVwbGVkZXNjLT5uYXR0cyAhPSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19F TEVNKQorCQkJZWxvZyhFUlJPUiwgImluY29ycmVjdCBudW1iZXIgb2Ygb3V0cHV0IGFyZ3Vt ZW50cyIpOworCisJCS8qIENvbnN0cnVjdCBhIHR1cGxlIGRlc2NyaXB0b3IgZm9yIHRoZSBy ZXN1bHQgcm93cy4gKi8KKwkJdHVwbGVkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2Mo ZXhwZWN0ZWRfdHVwbGVkZXNjLT5uYXR0cyk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBs ZWRlc2MsIChBdHRyTnVtYmVyKSAxLCAicGFydGl0aW9uIiwKKwkJCQkJCSAgIElOVDRPSUQs IC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIp IDEsICJudW1fYnVmZmVycyIsCisJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CisJCVR1cGxl RGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAyLCAiZmlyc3RfYnVmZmVy IiwKKwkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1 cGxlZGVzYywgKEF0dHJOdW1iZXIpIDMsICJsYXN0X2J1ZmZlciIsCisJCQkJCQkgICBJTlQ0 T0lELCAtMSwgMCk7CisKKwkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gQmxlc3NUdXBsZURlc2Mo dHVwbGVkZXNjKTsKKworCQkvKiBSZXR1cm4gdG8gb3JpZ2luYWwgY29udGV4dCB3aGVuIGFs bG9jYXRpbmcgdHJhbnNpZW50IG1lbW9yeSAqLworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY29udGV4dCk7CisKKwkJLyogU2V0IG1heCBjYWxscyBhbmQgcmVtZW1iZXIgdGhlIHVz ZXIgZnVuY3Rpb24gY29udGV4dC4gKi8KKwkJZnVuY2N0eC0+bWF4X2NhbGxzID0gQnVmZmVy UGFydGl0aW9uQ291bnQoKTsKKwl9CisKKwlmdW5jY3R4ID0gU1JGX1BFUkNBTExfU0VUVVAo KTsKKworCWlmIChmdW5jY3R4LT5jYWxsX2NudHIgPCBmdW5jY3R4LT5tYXhfY2FsbHMpCisJ eworCQl1aW50MzIJCWkgPSBmdW5jY3R4LT5jYWxsX2NudHI7CisKKwkJaW50CQkJbnVtX2J1 ZmZlcnMsCisJCQkJCWZpcnN0X2J1ZmZlciwKKwkJCQkJbGFzdF9idWZmZXI7CisKKwkJRGF0 dW0JCXZhbHVlc1tOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNXTsKKwkJYm9vbAkJ bnVsbHNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CisKKwkJQnVmZmVyUGFy dGl0aW9uR2V0KGksICZudW1fYnVmZmVycywKKwkJCQkJCSAgICZmaXJzdF9idWZmZXIsICZs YXN0X2J1ZmZlcik7CisKKwkJdmFsdWVzWzBdID0gSW50MzJHZXREYXR1bShpKTsKKwkJbnVs bHNbMF0gPSBmYWxzZTsKKworCQl2YWx1ZXNbMV0gPSBJbnQzMkdldERhdHVtKG51bV9idWZm ZXJzKTsKKwkJbnVsbHNbMV0gPSBmYWxzZTsKKworCQl2YWx1ZXNbMl0gPSBJbnQzMkdldERh dHVtKGZpcnN0X2J1ZmZlcik7CisJCW51bGxzWzJdID0gZmFsc2U7CisKKwkJdmFsdWVzWzNd ID0gSW50MzJHZXREYXR1bShsYXN0X2J1ZmZlcik7CisJCW51bGxzWzNdID0gZmFsc2U7CisK KwkJLyogQnVpbGQgYW5kIHJldHVybiB0aGUgdHVwbGUuICovCisJCXR1cGxlID0gaGVhcF9m b3JtX3R1cGxlKChUdXBsZURlc2MpIGZ1bmNjdHgtPnVzZXJfZmN0eCwgdmFsdWVzLCBudWxs cyk7CisJCXJlc3VsdCA9IEhlYXBUdXBsZUdldERhdHVtKHR1cGxlKTsKKworCQlTUkZfUkVU VVJOX05FWFQoZnVuY2N0eCwgcmVzdWx0KTsKKwl9CisJZWxzZQorCQlTUkZfUkVUVVJOX0RP TkUoZnVuY2N0eCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZl ci9idWZfaW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwpp bmRleCA2ZmQzYTZiYmFjNS4uNTI4YTM2OGE4YjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvYnVmX2luaXQuYwpAQCAtMTcsNiArMTcsMTEgQEAKICNpbmNsdWRlICJzdG9yYWdl L2Fpby5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUg InN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1 ZGUgInV0aWxzL2d1Y19ob29rcy5oIgorI2luY2x1ZGUgInV0aWxzL3ZhcmxlbmEuaCIKIAog QnVmZmVyRGVzY1BhZGRlZCAqQnVmZmVyRGVzY3JpcHRvcnM7CiBjaGFyCSAgICpCdWZmZXJC bG9ja3M7CkBAIC0yNCw2ICsyOSwxNCBAQCBDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBh ZGRlZCAqQnVmZmVySU9DVkFycmF5OwogV3JpdGViYWNrQ29udGV4dCBCYWNrZW5kV3JpdGVi YWNrQ29udGV4dDsKIENrcHRTb3J0SXRlbSAqQ2twdEJ1ZmZlcklkczsKIAorLyogKgorICog bnVtYmVyIG9mIGJ1ZmZlciBwYXJ0aXRpb25zICovCisjZGVmaW5lIE5VTV9DTE9DS19TV0VF UF9QQVJUSVRJT05TCTQKKworLyogQXJyYXkgb2Ygc3RydWN0cyB3aXRoIGluZm9ybWF0aW9u IGFib3V0IGJ1ZmZlciByYW5nZXMgKi8KK0J1ZmZlclBhcnRpdGlvbnMgKkJ1ZmZlclBhcnRp dGlvbnNBcnJheSA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9wYXJ0aXRpb25zX2lu aXQodm9pZCk7CiAKIC8qCiAgKiBEYXRhIFN0cnVjdHVyZXM6CkBAIC03MCw3ICs4MywxNSBA QCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQpCiAJYm9vbAkJZm91bmRCdWZzLAogCQkJ CWZvdW5kRGVzY3MsCiAJCQkJZm91bmRJT0NWLAotCQkJCWZvdW5kQnVmQ2twdDsKKwkJCQlm b3VuZEJ1ZkNrcHQsCisJCQkJZm91bmRQYXJ0czsKKworCS8qIGFsbG9jYXRlIHRoZSBwYXJ0 aXRpb24gcmVnaXN0cnkgZmlyc3QgKi8KKwlCdWZmZXJQYXJ0aXRpb25zQXJyYXkgPSAoQnVm ZmVyUGFydGl0aW9ucyAqKQorCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBQYXJ0aXRpb25z IiwKKwkJCQkJCW9mZnNldG9mKEJ1ZmZlclBhcnRpdGlvbnMsIHBhcnRpdGlvbnMpICsKKwkJ CQkJCW11bF9zaXplKHNpemVvZihCdWZmZXJQYXJ0aXRpb24pLCBOVU1fQ0xPQ0tfU1dFRVBf UEFSVElUSU9OUyksCisJCQkJCQkmZm91bmRQYXJ0cyk7CiAKIAkvKiBBbGlnbiBkZXNjcmlw dG9ycyB0byBhIGNhY2hlbGluZSBib3VuZGFyeS4gKi8KIAlCdWZmZXJEZXNjcmlwdG9ycyA9 IChCdWZmZXJEZXNjUGFkZGVkICopCkBAIC0xMTIsNiArMTMzLDkgQEAgQnVmZmVyTWFuYWdl clNobWVtSW5pdCh2b2lkKQogCXsKIAkJaW50CQkJaTsKIAorCQkvKiBJbml0aWFsaXplIGJ1 ZmZlciBwYXJ0aXRpb25zIChjYWxjdWxhdGUgYnVmZmVyIHJhbmdlcykuICovCisJCWJ1ZmZl cl9wYXJ0aXRpb25zX2luaXQoKTsKKwogCQkvKgogCQkgKiBJbml0aWFsaXplIGFsbCB0aGUg YnVmZmVyIGhlYWRlcnMuCiAJCSAqLwpAQCAtMTc1LDUgKzE5OSwxMjMgQEAgQnVmZmVyTWFu YWdlclNobWVtU2l6ZSh2b2lkKQogCS8qIHNpemUgb2YgY2hlY2twb2ludCBzb3J0IGFycmF5 IGluIGJ1Zm1nci5jICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKE5CdWZm ZXJzLCBzaXplb2YoQ2twdFNvcnRJdGVtKSkpOwogCisJLyogYWNjb3VudCBmb3IgcmVnaXN0 cnkgb2YgTlVNQSBwYXJ0aXRpb25zICovCisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE1BWEFM SUdOKG9mZnNldG9mKEJ1ZmZlclBhcnRpdGlvbnMsIHBhcnRpdGlvbnMpICsKKwkJCQkJCQkJ ICAgbXVsX3NpemUoc2l6ZW9mKEJ1ZmZlclBhcnRpdGlvbiksIE5VTV9DTE9DS19TV0VFUF9Q QVJUSVRJT05TKSkpOworCiAJcmV0dXJuIHNpemU7CiB9CisKKy8qCisgKiBTYW5pdHkgY2hl Y2tzIG9mIGJ1ZmZlcnMgcGFydGl0aW9ucyAtIHRoZXJlIG11c3QgYmUgbm8gZ2FwcywgaXQg bXVzdCBjb3ZlcgorICogdGhlIHdob2xlIHJhbmdlIG9mIGJ1ZmZlcnMsIGV0Yy4KKyAqLwor c3RhdGljIHZvaWQKK0Fzc2VydENoZWNrQnVmZmVyUGFydGl0aW9ucyh2b2lkKQoreworI2lm ZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlpbnQJCQludW1fYnVmZmVycyA9IDA7CisKKwlB c3NlcnQoQnVmZmVyUGFydGl0aW9uc0FycmF5LT5ucGFydGl0aW9ucyA+IDApOworCisJZm9y IChpbnQgaSA9IDA7IGkgPCBCdWZmZXJQYXJ0aXRpb25zQXJyYXktPm5wYXJ0aXRpb25zOyBp KyspCisJeworCQlCdWZmZXJQYXJ0aXRpb24gKnBhcnQgPSAmQnVmZmVyUGFydGl0aW9uc0Fy cmF5LT5wYXJ0aXRpb25zW2ldOworCisJCS8qCisJCSAqIFdlIGNhbiBnZXQgYSBzaW5nbGUt YnVmZmVyIHBhcnRpdGlvbiwgaWYgdGhlIHNpemluZyBmb3JjZXMgdGhlIGxhc3QKKwkJICog cGFydGl0aW9uIHRvIGJlIGp1c3Qgb25lIGJ1ZmZlci4gQnV0IGl0J3MgdW5saWtlbHkgKGFu ZAorCQkgKiB1bmRlc2lyYWJsZSkuCisJCSAqLworCQlBc3NlcnQocGFydC0+Zmlyc3RfYnVm ZmVyIDw9IHBhcnQtPmxhc3RfYnVmZmVyKTsKKwkJQXNzZXJ0KChwYXJ0LT5sYXN0X2J1ZmZl ciAtIHBhcnQtPmZpcnN0X2J1ZmZlciArIDEpID09IHBhcnQtPm51bV9idWZmZXJzKTsKKwor CQludW1fYnVmZmVycyArPSBwYXJ0LT5udW1fYnVmZmVyczsKKworCQkvKgorCQkgKiBUaGUg Zmlyc3QgcGFydGl0aW9uIG5lZWRzIHRvIHN0YXJ0IG9uIGJ1ZmZlciAwLiBMYXRlciBwYXJ0 aXRpb25zCisJCSAqIG5lZWQgdG8gYmUgY29udGlndW91cywgd2l0aG91dCBza2lwcGluZyBh bnkgYnVmZmVycy4KKwkJICovCisJCWlmIChpID09IDApCisJCXsKKwkJCUFzc2VydChwYXJ0 LT5maXJzdF9idWZmZXIgPT0gMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlCdWZmZXJQYXJ0 aXRpb24gKnByZXYgPSAmQnVmZmVyUGFydGl0aW9uc0FycmF5LT5wYXJ0aXRpb25zW2kgLSAx XTsKKworCQkJQXNzZXJ0KChwYXJ0LT5maXJzdF9idWZmZXIgLSAxKSA9PSBwcmV2LT5sYXN0 X2J1ZmZlcik7CisJCX0KKworCQkvKiB0aGUgbGFzdCBwYXJ0aXRpb24gbmVlZHMgdG8gZW5k IG9uIGJ1ZmZlciAoTkJ1ZmZlcnMgLSAxKSAqLworCQlpZiAoaSA9PSAoQnVmZmVyUGFydGl0 aW9uc0FycmF5LT5ucGFydGl0aW9ucyAtIDEpKQorCQl7CisJCQlBc3NlcnQocGFydC0+bGFz dF9idWZmZXIgPT0gKE5CdWZmZXJzIC0gMSkpOworCQl9CisJfQorCisJQXNzZXJ0KG51bV9i dWZmZXJzID09IE5CdWZmZXJzKTsKKyNlbmRpZgorfQorCisvKgorICogYnVmZmVyX3BhcnRp dGlvbnNfaW5pdAorICoJCUluaXRpYWxpemUgYXJyYXkgb2YgYnVmZmVyIHBhcnRpdGlvbnMu CisgKi8KK3N0YXRpYyB2b2lkCitidWZmZXJfcGFydGl0aW9uc19pbml0KHZvaWQpCit7CisJ aW50CQkJcmVtYWluaW5nX2J1ZmZlcnMgPSBOQnVmZmVyczsKKwlpbnQJCQlidWZmZXIgPSAw OworCisJLyogbnVtYmVyIG9mIGJ1ZmZlcnMgcGVyIHBhcnRpdGlvbiAobWFrZSBzdXJlIHRv IG5vdCBvdmVyZmxvdykgKi8KKwlpbnQJCQlwYXJ0X2J1ZmZlcnMKKwkJPSAoKGludDY0KSBO QnVmZmVycyArIChOVU1fQ0xPQ0tfU1dFRVBfUEFSVElUSU9OUyAtIDEpKSAvIE5VTV9DTE9D S19TV0VFUF9QQVJUSVRJT05TOworCisJQnVmZmVyUGFydGl0aW9uc0FycmF5LT5ucGFydGl0 aW9ucyA9IE5VTV9DTE9DS19TV0VFUF9QQVJUSVRJT05TOworCisJZm9yIChpbnQgbiA9IDA7 IG4gPCBCdWZmZXJQYXJ0aXRpb25zQXJyYXktPm5wYXJ0aXRpb25zOyBuKyspCisJeworCQlC dWZmZXJQYXJ0aXRpb24gKnBhcnQgPSAmQnVmZmVyUGFydGl0aW9uc0FycmF5LT5wYXJ0aXRp b25zW25dOworCisJCS8qIGJ1ZmZlcnMgdGhpcyBwYXJ0aXRpb24gc2hvdWxkIGdldCAobGFz dCBwYXJ0aXRpb24gY2FuIGdldCBmZXdlcikgKi8KKwkJaW50CQkJbnVtX2J1ZmZlcnMgPSBN aW4ocmVtYWluaW5nX2J1ZmZlcnMsIHBhcnRfYnVmZmVycyk7CisKKwkJcmVtYWluaW5nX2J1 ZmZlcnMgLT0gbnVtX2J1ZmZlcnM7CisKKwkJQXNzZXJ0KChudW1fYnVmZmVycyA+IDApICYm IChudW1fYnVmZmVycyA8PSBwYXJ0X2J1ZmZlcnMpKTsKKwkJQXNzZXJ0KChidWZmZXIgPj0g MCkgJiYgKGJ1ZmZlciA8IE5CdWZmZXJzKSk7CisKKwkJcGFydC0+bnVtX2J1ZmZlcnMgPSBu dW1fYnVmZmVyczsKKwkJcGFydC0+Zmlyc3RfYnVmZmVyID0gYnVmZmVyOworCQlwYXJ0LT5s YXN0X2J1ZmZlciA9IGJ1ZmZlciArIChudW1fYnVmZmVycyAtIDEpOworCisJCWJ1ZmZlciAr PSBudW1fYnVmZmVyczsKKwl9CisKKwlBc3NlcnRDaGVja0J1ZmZlclBhcnRpdGlvbnMoKTsK K30KKworaW50CitCdWZmZXJQYXJ0aXRpb25Db3VudCh2b2lkKQoreworCXJldHVybiBCdWZm ZXJQYXJ0aXRpb25zQXJyYXktPm5wYXJ0aXRpb25zOworfQorCit2b2lkCitCdWZmZXJQYXJ0 aXRpb25HZXQoaW50IGlkeCwgaW50ICpudW1fYnVmZmVycywKKwkJCQkgICBpbnQgKmZpcnN0 X2J1ZmZlciwgaW50ICpsYXN0X2J1ZmZlcikKK3sKKwlpZiAoKGlkeCA+PSAwKSAmJiAoaWR4 IDwgQnVmZmVyUGFydGl0aW9uc0FycmF5LT5ucGFydGl0aW9ucykpCisJeworCQlCdWZmZXJQ YXJ0aXRpb24gKnBhcnQgPSAmQnVmZmVyUGFydGl0aW9uc0FycmF5LT5wYXJ0aXRpb25zW2lk eF07CisKKwkJKm51bV9idWZmZXJzID0gcGFydC0+bnVtX2J1ZmZlcnM7CisJCSpmaXJzdF9i dWZmZXIgPSBwYXJ0LT5maXJzdF9idWZmZXI7CisJCSpsYXN0X2J1ZmZlciA9IHBhcnQtPmxh c3RfYnVmZmVyOworCisJCXJldHVybjsKKwl9CisKKwllbG9nKEVSUk9SLCAiaW52YWxpZCBw YXJ0aXRpb24gaW5kZXgiKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmX2ludGVybmFscy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgK aW5kZXggNTQwMGM1NmE5NjUuLjEzOTA1NWE0YTdkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1 Zl9pbnRlcm5hbHMuaApAQCAtMzQ1LDYgKzM0NSw3IEBAIHR5cGVkZWYgc3RydWN0IFdyaXRl YmFja0NvbnRleHQKIAogLyogaW4gYnVmX2luaXQuYyAqLwogZXh0ZXJuIFBHRExMSU1QT1JU IEJ1ZmZlckRlc2NQYWRkZWQgKkJ1ZmZlckRlc2NyaXB0b3JzOworZXh0ZXJuIFBHRExMSU1Q T1JUIEJ1ZmZlclBhcnRpdGlvbnMgKkJ1ZmZlclBhcnRpdGlvbnNBcnJheTsKIGV4dGVybiBQ R0RMTElNUE9SVCBDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRlZCAqQnVmZmVySU9D VkFycmF5OwogZXh0ZXJuIFBHRExMSU1QT1JUIFdyaXRlYmFja0NvbnRleHQgQmFja2VuZFdy aXRlYmFja0NvbnRleHQ7CiAKQEAgLTU0OSw0ICs1NTAsOSBAQCBleHRlcm4gdm9pZCBEcm9w UmVsYXRpb25Mb2NhbEJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsCiBleHRlcm4g dm9pZCBEcm9wUmVsYXRpb25BbGxMb2NhbEJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0 b3IpOwogZXh0ZXJuIHZvaWQgQXRFT1hhY3RfTG9jYWxCdWZmZXJzKGJvb2wgaXNDb21taXQp OwogCitleHRlcm4gaW50CUJ1ZmZlclBhcnRpdGlvbkNvdW50KHZvaWQpOworZXh0ZXJuIGlu dAlCdWZmZXJQYXJ0aXRpb25Ob2Rlcyh2b2lkKTsKK2V4dGVybiB2b2lkIEJ1ZmZlclBhcnRp dGlvbkdldChpbnQgaWR4LCBpbnQgKm51bV9idWZmZXJzLAorCQkJCQkJCSAgIGludCAqZmly c3RfYnVmZmVyLCBpbnQgKmxhc3RfYnVmZmVyKTsKKwogI2VuZGlmCQkJCQkJCS8qIEJVRk1H Ul9JTlRFUk5BTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggYjVmOGYzYzVkNDIu LjI0ODYwYzZjMmM0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTE1Myw2ICsxNTMsMjUg QEAgc3RydWN0IFJlYWRCdWZmZXJzT3BlcmF0aW9uCiAKIHR5cGVkZWYgc3RydWN0IFJlYWRC dWZmZXJzT3BlcmF0aW9uIFJlYWRCdWZmZXJzT3BlcmF0aW9uOwogCisvKgorICogaW5mb3Jt YXRpb24gYWJvdXQgb25lIHBhcnRpdGlvbiBvZiBzaGFyZWQgYnVmZmVycworICoKKyAqIGZp cnN0L2xhc3QgYnVmZmVyIC0gdGhlIHZhbHVlcyBhcmUgaW5jbHVzaXZlCisgKi8KK3R5cGVk ZWYgc3RydWN0IEJ1ZmZlclBhcnRpdGlvbgoreworCWludAkJCW51bV9idWZmZXJzOwkvKiBu dW1iZXIgb2YgYnVmZmVycyAqLworCWludAkJCWZpcnN0X2J1ZmZlcjsJLyogZmlyc3QgYnVm ZmVyIG9mIHBhcnRpdGlvbiAqLworCWludAkJCWxhc3RfYnVmZmVyOwkvKiBsYXN0IGJ1ZmZl ciBvZiBwYXJ0aXRpb24gKi8KK30gQnVmZmVyUGFydGl0aW9uOworCisvKiBhbiBhcnJheSBv ZiBpbmZvcm1hdGlvbiBhYm91dCBhbGwgcGFydGl0aW9ucyAqLwordHlwZWRlZiBzdHJ1Y3Qg QnVmZmVyUGFydGl0aW9ucworeworCWludAkJCW5wYXJ0aXRpb25zOwkvKiBudW1iZXIgb2Yg cGFydGl0aW9ucyAqLworCUJ1ZmZlclBhcnRpdGlvbiBwYXJ0aXRpb25zW0ZMRVhJQkxFX0FS UkFZX01FTUJFUl07Cit9IEJ1ZmZlclBhcnRpdGlvbnM7CisKIC8qIHRvIGF2b2lkIGhhdmlu ZyB0byBleHBvc2UgYnVmX2ludGVybmFscy5oIGhlcmUgKi8KIHR5cGVkZWYgc3RydWN0IFdy aXRlYmFja0NvbnRleHQgV3JpdGViYWNrQ29udGV4dDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAppbmRleCA0MzI1MDkyNzdjOS4uNTZlMjUwMjZmYmYgMTAwNjQ0Ci0tLSBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC0zNDcsNiArMzQ3LDggQEAgQnVmZmVyRGVzY1BhZGRlZAog QnVmZmVySGVhcFR1cGxlVGFibGVTbG90CiBCdWZmZXJMb29rdXBFbnQKIEJ1ZmZlck1hbmFn ZXJSZWxhdGlvbgorQnVmZmVyUGFydGl0aW9uCitCdWZmZXJQYXJ0aXRpb25zCiBCdWZmZXJT dHJhdGVneUNvbnRyb2wKIEJ1ZmZlclRhZwogQnVmZmVyVXNhZ2UKLS0gCjIuNTEuMQoK --------------Mky2abyS3YoHwGs5syrGiO88--