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.94.2) (envelope-from ) id 1uyEHl-005MqY-Uj for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Sep 2025 18:50:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uyEHi-00D21Z-Ce for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Sep 2025 18:50:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uyEHh-00D21O-L3 for pgsql-hackers@lists.postgresql.org; Mon, 15 Sep 2025 18:50:42 +0000 Received: from mail-il1-x12a.google.com ([2607:f8b0:4864:20::12a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uyEHf-000aS6-1i for pgsql-hackers@lists.postgresql.org; Mon, 15 Sep 2025 18:50:41 +0000 Received: by mail-il1-x12a.google.com with SMTP id e9e14a558f8ab-4234e6c0762so12445955ab.3 for ; Mon, 15 Sep 2025 11:50:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757962239; x=1758567039; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=MhH771kEt3THIBixLRstOSX0R8ON/GhtC1PT1geGMgI=; b=UcaV0pyYiBjFqxp+T35lW8aCsHgNDwjDnXOLkEaw/UGSQmLFo5IuscIxiz0YyVdbRE dYyiutwNikfTI2QbWObWnALmcFbuhu9MJJhaBL38+c/WGLFXor51hULDAEjnYdLFqwj4 AIQp+vsnV8O4UzelhWLxW21qGlVVYC/8aBiyRIw7YH1FD4qkVj3Fiafg6G+NzcOEDgL/ usV1Rlh9VDuBsZC1oMeJEzfeDSRVPEhqjFAK9HAC74ME0Y7GWEDbWvXUZ8uHHEeNTjeU RAV7obRUciNTeyQtVOCMPK4UG0iojV9/ElNaIo4A36AGSqqtjAbQSKTpvLO3KybtDazt /jvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757962239; x=1758567039; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=MhH771kEt3THIBixLRstOSX0R8ON/GhtC1PT1geGMgI=; b=HUMknXGVTP5tvQGmyzKdnmDTIRo925/r+yp+KvPLE9aif9l3/r1I9ZUowEFUQCgWoS MRZNCVWXbovUVxgpJHfSdp6ka04hkKKqs0mJYG8VaJWk3H9YNutXqyrCe/htMb8J3aKD AKQPT5r21M8o3HFjOa0doOQLejleOHkjLSgPrMeluBPG9SsL1ZKfXwgiP8e3MagkieOe oIbIF4SpfBH9FQzonfR0qDb2W1fAHuhz5YpxEKQNxEBs2SLHValZZJS55R488qzvmwMx 53uSDe+uMhs0HEAt1Ta9Jhwi+z8g/bA6fwJRcNcN52KpnPMls4Y9+o6e54KHKGihhpJU bZjA== X-Forwarded-Encrypted: i=1; AJvYcCU/oT9C6VJxMrURB6mCHW2h5KUyBd6iOXSjLcT5m8pzEj16DQJgCU6uIDV2uGvJXkq2V56Al8Ealg05t7PP@lists.postgresql.org X-Gm-Message-State: AOJu0YyuxPobi6GOfg/VyGbCtuCvxrv4BIi81+mnGgOZOCYk+kgxX+Qn KnOyLoPScB2Ofjje54uF2rATsp3+d/3U4HvC1L3xqoqQABBg5GAhqTQArV7MnO9OUZzcTCEk7X/ H0OU6b5yNNURRtbI6H279CtgTBBz00cTF3/zJfgdqVQ== X-Gm-Gg: ASbGncuYFKpToUzQmGX6FDIFjg9LTg62mWXxyvnnNW4ys7tq2zGXiOwe//rYu1EkjKY nouE5o/jWo4bPfKR+voxbpN7lVg0PmEl2TofoZ58utT6jbg8MOxP/2xX5HgY/5J6uphlQHQwAfB kBgJvhGQRcWoYVOmxaj42mPtTSLJepImQdu1NcslkCGOZUiqrX5CA5cCIgoTDQqF8vfEhzC6rqh 8IZpQ== X-Google-Smtp-Source: AGHT+IETC+XWucuZAAB1/WM7NOP+46uhnuRh+98M1kDlZdJzYAKe/3Igw+P/cin4/GSUi8K4CaYWdRPNHp0vRue0c4E= X-Received: by 2002:a05:6e02:1a89:b0:3f1:931f:bc33 with SMTP id e9e14a558f8ab-420a4174333mr130638665ab.24.1757962238953; Mon, 15 Sep 2025 11:50:38 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Alexander Korotkov Date: Mon, 15 Sep 2025 21:50:24 +0300 X-Gm-Features: AS18NWAp4nfKELd2mu1DrJ5tbOa0o1m20P8zcK6A6qkc4G1wdHUoikGOX8rrrmQ Message-ID: Subject: Re: POC: Parallel processing of indexes in autovacuum To: Masahiko Sawada Cc: Daniil Davydov <3danissimo@gmail.com>, Sami Imseih , Matheus Alcantara , Maxim Orlov , Postgres hackers Content-Type: multipart/mixed; boundary="000000000000c84f89063edb7ada" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c84f89063edb7ada Content-Type: multipart/alternative; boundary="000000000000c84f87063edb7ad8" --000000000000c84f87063edb7ad8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi! On Tue, Aug 19, 2025 at 12:04=E2=80=AFAM Masahiko Sawada wrote: > > On Mon, Aug 18, 2025 at 1:31=E2=80=AFAM Daniil Davydov <3danissimo@gmail.= com> wrote: > > > > > > On Fri, Aug 15, 2025 at 3:41=E2=80=AFAM Masahiko Sawada wrote: > > > > > > > > 2. when an autovacuum worker (not parallel vacuum worker) who uses > > > parallel vacuum gets SIGHUP, it errors out with the error message > > > "parameter "max_stack_depth" cannot be set during a parallel > > > operation". Autovacuum checks the configuration file reload in > > > vacuum_delay_point(), and while reloading the configuration file, it > > > attempts to set max_stack_depth in > > > InitializeGUCOptionsFromEnvironment() (which is called by > > > ProcessConfigFileInternal()). However, it cannot change > > > max_stack_depth since the worker is in parallel mode but > > > max_stack_depth doesn't have GUC_ALLOW_IN_PARALLEL flag. This doesn't > > > happen in regular backends who are using parallel queries because the= y > > > check the configuration file reload at the end of each SQL command. > > > > > > > Hm, this is a really serious problem. I see only two ways to solve it (both are > > not really good) : > > 1) > > Do not allow processing of the config file during parallel autovacuum > > execution. > > > > 2) > > Teach the autovacuum to enter parallel mode only during the index vacuum/cleanup > > phase. I'm a bit wary about it, because the design says that we should > > be in parallel > > mode during the whole parallel operation. But actually, if we can make > > sure that all > > launched workers are exited, I don't see reasons, why can't we just > > exit parallel mode > > at the end of parallel_vacuum_process_all_indexes. > > > > What do you think about it? > > Hmm, given that we're trying to support parallel heap vacuum on > another thread[1] and we will probably support it in autovacuums, it > seems to me that these approaches won't work. > > Another idea would be to allow autovacuum workers to process the > config file even in parallel mode. GUC changes in the leader worker > would not affect parallel vacuum workers, but it is fine to me. In the > context of autovacuum, only specific GUC parameters related to > cost-based delays need to be affected also to parallel vacuum workers. > Probably we need some changes to compute_parallel_delay() so that > parallel workers can compute the sleep time based on the new > vacuum_cost_limit and vacuum_cost_delay after the leader process > (i.e., autovacuum worker) reloads the config file. > > > > > Again, thank you for the review. Please, see v10 patches (only 0001 > > has been changed) : > > 1) Reserve and release workers only inside parallel_vacuum_process_all_indexes. > > 2) Add try/catch block to the parallel_vacuum_process_all_indexes, so we can > > release workers even after an error. This required adding a static > > variable to account > > for the total number of reserved workers (av_nworkers_reserved). > > 3) Cap autovacuum_max_parallel_workers by max_worker_processes only inside > > autovacuum code. Assign hook has been removed. > > 4) Use shmem value for determining the maximum number of parallel autovacuum > > workers (eliminate race condition between launcher and leader process). > > Thank you for updating the patch! I'll review the new version patches. I've rebased this patchset to the current master. That required me to move the new GUC definition to guc_parameters.dat. Also, I adjusted typedefs.list and made pgindent. Some notes about the patch. + { + { + "autovacuum_parallel_workers", + "Maximum number of parallel autovacuum workers that can be used for processing this table.", + RELOPT_KIND_HEAP, + ShareUpdateExclusiveLock + }, + -1, -1, 1024 + }, Should we use MAX_PARALLEL_WORKER_LIMIT instead of hard-coded 1024 here? - * Support routines for parallel vacuum execution. + * Support routines for parallel vacuum and autovacuum execution. In the + * future comments, the word "vacuum" will refer to both vacuum and + * autovacuum. Not sure about the usage of word "future" here. It doesn't look clear what it means. Could we use "below" or "within this file"? I see parallel_vacuum_process_all_indexes() have a TRY/CATCH block. As I heard, the overhead of setting/doing jumps is platform-dependent, and not harmless on some platforms. Therefore, can we skip TRY/CATCH block for non-autovacuum vacuum? Possibly we could move it to AutoVacWorkerMain(), that would save us from repeatedly setting a jump in autovacuum workers too= . In general, I think this patchset badly lack of testing. I think it needs tap tests checking from the logs that autovacuum has been done in parallel. Also, it would be good to set up some injection points, and check that reserved autovacuum parallel workers are getting released correctly in the case of errors. ------ Regards, Alexander Korotkov Supabase --000000000000c84f87063edb7ad8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi!

On Tue, Aug 19, 2025 at 12:04=E2=80=AFAM Masahi= ko Sawada <sawada.mshk@gmail.co= m> wrote:
>
> On Mon, Aug 18, 2025 at 1:31=E2=80=AFAM Da= niil Davydov <3danissimo@gmail.c= om> wrote:
> >
> >
> > On Fri, Aug 15, 20= 25 at 3:41=E2=80=AFAM Masahiko Sawada <sawada.mshk@gmail.com> wrote:
> > >
> >=
> > > 2. when an autovacuum worker (not parallel vacuum worker= ) who uses
> > > parallel vacuum gets SIGHUP, it errors out wit= h the error message
> > > "parameter "max_stack_depth= " cannot be set during a parallel
> > > operation". A= utovacuum checks the configuration file reload in
> > > vacuum_= delay_point(), and while reloading the configuration file, it
> > = > attempts to set max_stack_depth in
> > > InitializeGUCOpti= onsFromEnvironment() (which is called by
> > > ProcessConfigFil= eInternal()). However, it cannot change
> > > max_stack_depth s= ince the worker is in parallel mode but
> > > max_stack_depth d= oesn't have GUC_ALLOW_IN_PARALLEL flag. This doesn't
> > &= gt; happen in regular backends who are using parallel queries because they<= br>> > > check the configuration file reload at the end of each SQ= L command.
> > >
> >
> > Hm, this is a really= serious problem. I see only two ways to solve it (both are
> > no= t really good) :
> > 1)
> > Do not allow processing of th= e config file during parallel autovacuum
> > execution.
> &g= t;
> > 2)
> > Teach the autovacuum to enter parallel mode= only during the index vacuum/cleanup
> > phase. I'm a bit war= y about it, because the design says that we should
> > be in paral= lel
> > mode during the whole parallel operation. But actually, if= we can make
> > sure that all
> > launched workers are e= xited, I don't see reasons, why can't we just
> > exit par= allel mode
> > at the end of parallel_vacuum_process_all_indexes.<= br>> >
> > What do you think about it?
>
> Hmm, = given that we're trying to support parallel heap vacuum on
> anot= her thread[1] and we will probably support it in autovacuums, it
> se= ems to me that these approaches won't work.
>
> Another ide= a would be to allow autovacuum workers to process the
> config file e= ven in parallel mode. GUC changes in the leader worker
> would not af= fect parallel vacuum workers, but it is fine to me. In the
> context = of autovacuum, only specific GUC parameters related to
> cost-based d= elays need to be affected also to parallel vacuum workers.
> Probably= we need some changes to compute_parallel_delay() so that
> parallel = workers can compute the sleep time based on the new
> vacuum_cost_lim= it and vacuum_cost_delay after the leader process
> (i.e., autovacuum= worker) reloads the config file.
>
> >
> > Again, = thank you for the review. Please, see v10 patches (only 0001
> > h= as been changed) :
> > 1) Reserve and release workers only inside = parallel_vacuum_process_all_indexes.
> > 2) Add try/catch block to= the parallel_vacuum_process_all_indexes, so we can
> > release wo= rkers even after an error. This required adding a static
> > varia= ble to account
> > for the total number of reserved workers (av_nw= orkers_reserved).
> > 3) Cap autovacuum_max_parallel_workers by ma= x_worker_processes only inside
> > autovacuum code. Assign hook ha= s been removed.
> > 4) Use shmem value for determining the maximum= number of parallel autovacuum
> > workers (eliminate race conditi= on between launcher and leader process).
>
> Thank you for upda= ting the patch! I'll review the new version patches.

I've re= based this patchset to the current master.=C2=A0 That required me to move t= he new GUC definition to guc_parameters.dat.=C2=A0 Also, I adjusted typedef= s.list and made pgindent.=C2=A0 Some notes about the patch.

+ =C2=A0 {
+ =C2=A0 =C2=A0 =C2=A0 {
+ =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 "autovacuum_parallel_workers",
+ =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 "Maximum number of parallel autovacuum wor= kers that can be used for processing this table.",
+ =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 RELOPT_KIND_HEAP,
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 ShareUpdateExclusiveLock
+ =C2=A0 =C2=A0 =C2=A0 },
+ =C2=A0 =C2= =A0 =C2=A0 -1, -1, 1024
+ =C2=A0 },

Should we use MAX_PARA= LLEL_WORKER_LIMIT instead of hard-coded 1024 here?

- * =C2=A0 Support routines for parallel vacuum execution.
+ * = =C2=A0 Support routines for parallel vacuum and autovacuum execution. In th= e
+ * =C2=A0 future comments, the word "vacuum" will refer to = both vacuum and
+ * =C2=A0 autovacuum.

Not sure about the = usage of word "future" here.=C2=A0 It doesn't look clear what= it means.=C2=A0 Could we use "below" or "within this file&q= uot;?

I see parallel_vacuum_process_all_indexes() have a TRY/CATCH b= lock.=C2=A0 As I heard, the overhead of setting/doing jumps is platform-dep= endent, and not harmless on some platforms.=C2=A0 Therefore, can we skip TR= Y/CATCH block for non-autovacuum vacuum?=C2=A0 Possibly we could move it to= AutoVacWorkerMain(), that would save us from repeatedly setting a jump in = autovacuum workers too.

In general, I think this patchset badly lack= of testing.=C2=A0 I think it needs tap tests checking from the logs that a= utovacuum has been done in parallel.=C2=A0 Also, it would be good to set up= some injection points, and check that reserved autovacuum parallel workers= are getting released correctly in the case of errors.

------
Reg= ards,
Alexander Korotkov
Supabase
=C2=A0
--000000000000c84f87063edb7ad8-- --000000000000c84f89063edb7ada Content-Type: application/octet-stream; name="v11-0001-Parallel-index-autovacuum.patch" Content-Disposition: attachment; filename="v11-0001-Parallel-index-autovacuum.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mflgndj90 RnJvbSBjNDBiZmNlMmY4MTIzNzAzMTVjYTllYTczNWI5ZDNkMzEzODRkNGQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogTW9uLCAxNSBTZXAgMjAyNSAyMToxMjowMSArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjExIDEvM10gUGFyYWxsZWwgaW5kZXggYXV0b3ZhY3V1bQoKLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYyAgICAgICAgfCAgMTEgKysKIHNyYy9iYWNrZW5k L2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMgICAgICAgICB8ICA2OCArKysrKysrKy0KIHNyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAgICAgICAgICB8IDE0NCArKysrKysrKysr KysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAgICAgICAgICAgICB8 ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCAgICAgfCAg IDkgKysKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAg MSArCiBzcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMgICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oICAgICAgICAgICB8ICAgNSArCiBz cmMvaW5jbHVkZS91dGlscy9yZWwuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKwogMTAg ZmlsZXMgY2hhbmdlZCwgMjQwIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYwppbmRleCAwYWYzZmVhNjhmYS4uMWM5OGQ0M2M2 ZWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCkBAIC0yMjIsNiArMjIy LDE1IEBAIHN0YXRpYyByZWxvcHRfaW50IGludFJlbE9wdHNbXSA9CiAJCX0sCiAJCVNQR0lTVF9E RUZBVUxUX0ZJTExGQUNUT1IsIFNQR0lTVF9NSU5fRklMTEZBQ1RPUiwgMTAwCiAJfSwKKwl7CisJ CXsKKwkJCSJhdXRvdmFjdXVtX3BhcmFsbGVsX3dvcmtlcnMiLAorCQkJIk1heGltdW0gbnVtYmVy IG9mIHBhcmFsbGVsIGF1dG92YWN1dW0gd29ya2VycyB0aGF0IGNhbiBiZSB1c2VkIGZvciBwcm9j ZXNzaW5nIHRoaXMgdGFibGUuIiwKKwkJCVJFTE9QVF9LSU5EX0hFQVAsCisJCQlTaGFyZVVwZGF0 ZUV4Y2x1c2l2ZUxvY2sKKwkJfSwKKwkJLTEsIC0xLCAxMDI0CisJfSwKIAl7CiAJCXsKIAkJCSJh dXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQiLApAQCAtMTg3Miw2ICsxODgxLDggQEAgZGVmYXVs dF9yZWxvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUsIHJlbG9wdF9raW5k IGtpbmQpCiAJCXsiZmlsbGZhY3RvciIsIFJFTE9QVF9UWVBFX0lOVCwgb2Zmc2V0b2YoU3RkUmRP cHRpb25zLCBmaWxsZmFjdG9yKX0sCiAJCXsiYXV0b3ZhY3V1bV9lbmFibGVkIiwgUkVMT1BUX1RZ UEVfQk9PTCwKIAkJb2Zmc2V0b2YoU3RkUmRPcHRpb25zLCBhdXRvdmFjdXVtKSArIG9mZnNldG9m KEF1dG9WYWNPcHRzLCBlbmFibGVkKX0sCisJCXsiYXV0b3ZhY3V1bV9wYXJhbGxlbF93b3JrZXJz IiwgUkVMT1BUX1RZUEVfSU5ULAorCQlvZmZzZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0p ICsgb2Zmc2V0b2YoQXV0b1ZhY09wdHMsIGF1dG92YWN1dW1fcGFyYWxsZWxfd29ya2Vycyl9LAog CQl7ImF1dG92YWN1dW1fdmFjdXVtX3RocmVzaG9sZCIsIFJFTE9QVF9UWVBFX0lOVCwKIAkJb2Zm c2V0b2YoU3RkUmRPcHRpb25zLCBhdXRvdmFjdXVtKSArIG9mZnNldG9mKEF1dG9WYWNPcHRzLCB2 YWN1dW1fdGhyZXNob2xkKX0sCiAJCXsiYXV0b3ZhY3V1bV92YWN1dW1fbWF4X3RocmVzaG9sZCIs IFJFTE9QVF9UWVBFX0lOVCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1 bXBhcmFsbGVsLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jCmluZGV4 IDBmZWVhMWQzMGVjLi40MjIxZTYwODRmNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdmFjdXVtcGFyYWxsZWwuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJh bGxlbC5jCkBAIC0xLDcgKzEsOSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogdmFjdXVt cGFyYWxsZWwuYwotICoJICBTdXBwb3J0IHJvdXRpbmVzIGZvciBwYXJhbGxlbCB2YWN1dW0gZXhl Y3V0aW9uLgorICoJICBTdXBwb3J0IHJvdXRpbmVzIGZvciBwYXJhbGxlbCB2YWN1dW0gYW5kIGF1 dG92YWN1dW0gZXhlY3V0aW9uLiBJbiB0aGUKKyAqCSAgZnV0dXJlIGNvbW1lbnRzLCB0aGUgd29y ZCAidmFjdXVtIiB3aWxsIHJlZmVyIHRvIGJvdGggdmFjdXVtIGFuZAorICoJICBhdXRvdmFjdXVt LgogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0aGF0IGFyZSBpbnRlbmRlZCB0 byBzdXBwb3J0IHNldHRpbmcgdXAsIHVzaW5nLAogICogYW5kIHRlYXJpbmcgZG93biBhIFBhcmFs bGVsVmFjdXVtU3RhdGUuCkBAIC0zNCw2ICszNiw3IEBACiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5z dHJ1bWVudC5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgogI2luY2x1ZGUgInBnc3Rh dC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgpAQCAtMjI1LDYgKzIyOCw4IEBAIHN0YXRpYyBpbnQJcGFyYWxsZWxfdmFj dXVtX2NvbXB1dGVfd29ya2VycyhSZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLCBpbnQK IAkJCQkJCQkJCQkJYm9vbCAqd2lsbF9wYXJhbGxlbF92YWN1dW0pOwogc3RhdGljIHZvaWQgcGFy YWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxsX2luZGV4ZXMoUGFyYWxsZWxWYWN1dW1TdGF0ZSAqcHZz LCBpbnQgbnVtX2luZGV4X3NjYW5zLAogCQkJCQkJCQkJCQkJYm9vbCB2YWN1dW0pOworc3RhdGlj IHZvaWQgcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxsX2luZGV4ZXNfaW50ZXJuYWwoUGFyYWxs ZWxWYWN1dW1TdGF0ZSAqcHZzLAorCQkJCQkJCQkJCQkJCQkgaW50IG51bV9pbmRleF9zY2Fucywg Ym9vbCB2YWN1dW0pOwogc3RhdGljIHZvaWQgcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3Nfc2FmZV9p bmRleGVzKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cyk7CiBzdGF0aWMgdm9pZCBwYXJhbGxlbF92 YWN1dW1fcHJvY2Vzc191bnNhZmVfaW5kZXhlcyhQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMpOwog c3RhdGljIHZvaWQgcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3Nfb25lX2luZGV4KFBhcmFsbGVsVmFj dXVtU3RhdGUgKnB2cywgUmVsYXRpb24gaW5kcmVsLApAQCAtMzczLDggKzM3OCw5IEBAIHBhcmFs bGVsX3ZhY3V1bV9pbml0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gKmluZHJlbHMsIGludCBuaW5k ZXhlcywKIAlzaGFyZWQtPnF1ZXJ5aWQgPSBwZ3N0YXRfZ2V0X215X3F1ZXJ5X2lkKCk7CiAJc2hh cmVkLT5tYWludGVuYW5jZV93b3JrX21lbV93b3JrZXIgPQogCQkobmluZGV4ZXNfbXdtID4gMCkg PwotCQltYWludGVuYW5jZV93b3JrX21lbSAvIE1pbihwYXJhbGxlbF93b3JrZXJzLCBuaW5kZXhl c19td20pIDoKLQkJbWFpbnRlbmFuY2Vfd29ya19tZW07CisJCXZhY193b3JrX21lbSAvIE1pbihw YXJhbGxlbF93b3JrZXJzLCBuaW5kZXhlc19td20pIDoKKwkJdmFjX3dvcmtfbWVtOworCiAJc2hh cmVkLT5kZWFkX2l0ZW1zX2luZm8ubWF4X2J5dGVzID0gdmFjX3dvcmtfbWVtICogKHNpemVfdCkg MTAyNDsKIAogCS8qIFByZXBhcmUgRFNBIHNwYWNlIGZvciBkZWFkIGl0ZW1zICovCkBAIC01NTMs MTIgKzU1OSwxNyBAQCBwYXJhbGxlbF92YWN1dW1fY29tcHV0ZV93b3JrZXJzKFJlbGF0aW9uICpp bmRyZWxzLCBpbnQgbmluZGV4ZXMsIGludCBucmVxdWVzdGVkLAogCWludAkJCW5pbmRleGVzX3Bh cmFsbGVsX2J1bGtkZWwgPSAwOwogCWludAkJCW5pbmRleGVzX3BhcmFsbGVsX2NsZWFudXAgPSAw OwogCWludAkJCXBhcmFsbGVsX3dvcmtlcnM7CisJaW50CQkJbWF4X3dvcmtlcnM7CisKKwltYXhf d29ya2VycyA9IEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSA/CisJCWF1dG92YWN1dW1fbWF4 X3BhcmFsbGVsX3dvcmtlcnMgOgorCQltYXhfcGFyYWxsZWxfbWFpbnRlbmFuY2Vfd29ya2VyczsK IAogCS8qCiAJICogV2UgZG9uJ3QgYWxsb3cgcGVyZm9ybWluZyBwYXJhbGxlbCBvcGVyYXRpb24g aW4gc3RhbmRhbG9uZSBiYWNrZW5kIG9yCiAJICogd2hlbiBwYXJhbGxlbGlzbSBpcyBkaXNhYmxl ZC4KIAkgKi8KLQlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyIHx8IG1heF9wYXJhbGxlbF9tYWludGVu YW5jZV93b3JrZXJzID09IDApCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlciB8fCBtYXhfd29ya2Vy cyA9PSAwKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC01OTcsOCArNjA4LDggQEAgcGFyYWxsZWxf dmFjdXVtX2NvbXB1dGVfd29ya2VycyhSZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLCBp bnQgbnJlcXVlc3RlZCwKIAlwYXJhbGxlbF93b3JrZXJzID0gKG5yZXF1ZXN0ZWQgPiAwKSA/CiAJ CU1pbihucmVxdWVzdGVkLCBuaW5kZXhlc19wYXJhbGxlbCkgOiBuaW5kZXhlc19wYXJhbGxlbDsK IAotCS8qIENhcCBieSBtYXhfcGFyYWxsZWxfbWFpbnRlbmFuY2Vfd29ya2VycyAqLwotCXBhcmFs bGVsX3dvcmtlcnMgPSBNaW4ocGFyYWxsZWxfd29ya2VycywgbWF4X3BhcmFsbGVsX21haW50ZW5h bmNlX3dvcmtlcnMpOworCS8qIENhcCBieSBHVUMgdmFyaWFibGUgKi8KKwlwYXJhbGxlbF93b3Jr ZXJzID0gTWluKHBhcmFsbGVsX3dvcmtlcnMsIG1heF93b3JrZXJzKTsKIAogCXJldHVybiBwYXJh bGxlbF93b3JrZXJzOwogfQpAQCAtNjEwLDYgKzYyMSwzMCBAQCBwYXJhbGxlbF92YWN1dW1fY29t cHV0ZV93b3JrZXJzKFJlbGF0aW9uICppbmRyZWxzLCBpbnQgbmluZGV4ZXMsIGludCBucmVxdWVz dGVkLAogc3RhdGljIHZvaWQKIHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX2FsbF9pbmRleGVzKFBh cmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgaW50IG51bV9pbmRleF9zY2FucywKIAkJCQkJCQkJCWJv b2wgdmFjdXVtKQoreworCS8qCisJICogUGFyYWxsZWwgYXV0b3ZhY3V1bSBjYW4gcmVzZXJ2ZSBw YXJhbGxlbCB3b3JrZXJzLiBVc2UgdHJ5L2NhdGNoIGJsb2NrCisJICogdG8gbWFrZSBlbnN1cmUg dGhhdCBhbGwgd29ya2VycyBhcmUgcmVsZWFzZWQuCisJICovCisJUEdfVFJZKCk7CisJeworCQlw YXJhbGxlbF92YWN1dW1fcHJvY2Vzc19hbGxfaW5kZXhlc19pbnRlcm5hbChwdnMsIG51bV9pbmRl eF9zY2FucywKKwkJCQkJCQkJCQkJCQkgZmFsc2UpOworCX0KKwlQR19DQVRDSCgpOworCXsKKwkJ LyogUmVsZWFzZSBhbGwgcmVzZXJ2ZWQgcGFyYWxsZWwgd29ya2VycywgaWYgYW55LiAqLworCQlp ZiAoQW1BdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpKQorCQkJQXV0b1ZhY3V1bVJlbGVhc2VBbGxQ YXJhbGxlbFdvcmtlcnMoKTsKKworCQlQR19SRV9USFJPVygpOworCX0KKwlQR19FTkRfVFJZKCk7 Cit9CisKK3N0YXRpYyB2b2lkCitwYXJhbGxlbF92YWN1dW1fcHJvY2Vzc19hbGxfaW5kZXhlc19p bnRlcm5hbChQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsCisJCQkJCQkJCQkJCSBpbnQgbnVtX2lu ZGV4X3NjYW5zLCBib29sIHZhY3V1bSkKIHsKIAlpbnQJCQlud29ya2VyczsKIAlQVkluZFZhY1N0 YXR1cyBuZXdfc3RhdHVzOwpAQCAtNjQ2LDYgKzY4MSwxMyBAQCBwYXJhbGxlbF92YWN1dW1fcHJv Y2Vzc19hbGxfaW5kZXhlcyhQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIGludCBudW1faW5kZXhf c2NhbgogCSAqLwogCW53b3JrZXJzID0gTWluKG53b3JrZXJzLCBwdnMtPnBjeHQtPm53b3JrZXJz KTsKIAorCS8qCisJICogUmVzZXJ2ZSB3b3JrZXJzIGluIGF1dG92YWN1dW0gZ2xvYmFsIHN0YXRl LiBOb3RlLCB0aGF0IHdlIG1heSBiZSBnaXZlbgorCSAqIGZld2VyIHdvcmtlcnMgdGhhbiB3ZSBy ZXF1ZXN0ZWQuCisJICovCisJaWYgKEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSAmJiBud29y a2VycyA+IDApCisJCW53b3JrZXJzID0gQXV0b1ZhY3V1bVJlc2VydmVQYXJhbGxlbFdvcmtlcnMo bndvcmtlcnMpOworCiAJLyoKIAkgKiBTZXQgaW5kZXggdmFjdXVtIHN0YXR1cyBhbmQgbWFyayB3 aGV0aGVyIHBhcmFsbGVsIHZhY3V1bSB3b3JrZXIgY2FuCiAJICogcHJvY2VzcyBpdC4KQEAgLTY5 MCw2ICs3MzIsMTYgQEAgcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxsX2luZGV4ZXMoUGFyYWxs ZWxWYWN1dW1TdGF0ZSAqcHZzLCBpbnQgbnVtX2luZGV4X3NjYW4KIAogCQlMYXVuY2hQYXJhbGxl bFdvcmtlcnMocHZzLT5wY3h0KTsKIAorCQlpZiAoQW1BdXRvVmFjdXVtV29ya2VyUHJvY2Vzcygp ICYmCisJCQlwdnMtPnBjeHQtPm53b3JrZXJzX2xhdW5jaGVkIDwgbndvcmtlcnMpCisJCXsKKwkJ CS8qCisJCQkgKiBUZWxsIGF1dG92YWN1dW0gdGhhdCB3ZSBjb3VsZCBub3QgbGF1bmNoIGFsbCB0 aGUgcHJldmlvdXNseQorCQkJICogcmVzZXJ2ZWQgd29ya2Vycy4KKwkJCSAqLworCQkJQXV0b1Zh Y3V1bVJlbGVhc2VQYXJhbGxlbFdvcmtlcnMobndvcmtlcnMgLSBwdnMtPnBjeHQtPm53b3JrZXJz X2xhdW5jaGVkKTsKKwkJfQorCiAJCWlmIChwdnMtPnBjeHQtPm53b3JrZXJzX2xhdW5jaGVkID4g MCkKIAkJewogCQkJLyoKQEAgLTczOCw2ICs3OTAsMTAgQEAgcGFyYWxsZWxfdmFjdXVtX3Byb2Nl c3NfYWxsX2luZGV4ZXMoUGFyYWxsZWxWYWN1dW1TdGF0ZSAqcHZzLCBpbnQgbnVtX2luZGV4X3Nj YW4KIAogCQlmb3IgKGludCBpID0gMDsgaSA8IHB2cy0+cGN4dC0+bndvcmtlcnNfbGF1bmNoZWQ7 IGkrKykKIAkJCUluc3RyQWNjdW1QYXJhbGxlbFF1ZXJ5KCZwdnMtPmJ1ZmZlcl91c2FnZVtpXSwg JnB2cy0+d2FsX3VzYWdlW2ldKTsKKworCQkvKiBBbHNvIHJlbGVhc2UgYWxsIHByZXZpb3VzbHkg cmVzZXJ2ZWQgcGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXJzICovCisJCWlmIChBbUF1dG9WYWN1 dW1Xb3JrZXJQcm9jZXNzKCkgJiYgcHZzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCA+IDApCisJ CQlBdXRvVmFjdXVtUmVsZWFzZVBhcmFsbGVsV29ya2VycyhwdnMtPnBjeHQtPm53b3JrZXJzX2xh dW5jaGVkKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9h dXRvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwppbmRleCBk Y2U0YzhjNDViOS4uMmJjZDJjZWIyYTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvYXV0b3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5j CkBAIC0xNTAsNiArMTUwLDEyIEBAIGludAkJCUxvZ19hdXRvdmFjdXVtX21pbl9kdXJhdGlvbiA9 IDYwMDAwMDsKIHN0YXRpYyBkb3VibGUgYXZfc3RvcmFnZV9wYXJhbV9jb3N0X2RlbGF5ID0gLTE7 CiBzdGF0aWMgaW50CWF2X3N0b3JhZ2VfcGFyYW1fY29zdF9saW1pdCA9IC0xOwogCisvKgorICog VmFyaWFibGUgdG8ga2VlcCBudW1iZXIgb2YgY3VycmVudGx5IHJlc2VydmVkIHBhcmFsbGVsIGF1 dG92YWN1dW0gd29ya2Vycy4KKyAqIEl0IGlzIG9ubHkgcmVsZXZhbnQgZm9yIHBhcmFsbGVsIGF1 dG92YWN1dW0gbGVhZGVyIHByb2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQJYXZfbndvcmtlcnNfcmVz ZXJ2ZWQgPSAwOworCiAvKiBGbGFncyBzZXQgYnkgc2lnbmFsIGhhbmRsZXJzICovCiBzdGF0aWMg dm9sYXRpbGUgc2lnX2F0b21pY190IGdvdF9TSUdVU1IyID0gZmFsc2U7CiAKQEAgLTI4NCw2ICsy OTAsOCBAQCB0eXBlZGVmIHN0cnVjdCBBdXRvVmFjdXVtV29ya0l0ZW0KICAqIGF2X3dvcmtJdGVt cwkJd29yayBpdGVtIGFycmF5CiAgKiBhdl9ud29ya2Vyc0ZvckJhbGFuY2UgdGhlIG51bWJlciBv ZiBhdXRvdmFjdXVtIHdvcmtlcnMgdG8gdXNlIHdoZW4KICAqIAkJCQkJY2FsY3VsYXRpbmcgdGhl IHBlciB3b3JrZXIgY29zdCBsaW1pdAorICogYXZfZnJlZVBhcmFsbGVsV29ya2VycyB0aGUgbnVt YmVyIG9mIGZyZWUgcGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXJzCisgKiBhdl9tYXhQYXJhbGxl bFdvcmtlcnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIGF1dG92YWN1dW0gd29ya2Vy cwogICoKICAqIFRoaXMgc3RydWN0IGlzIHByb3RlY3RlZCBieSBBdXRvdmFjdXVtTG9jaywgZXhj ZXB0IGZvciBhdl9zaWduYWwgYW5kIHBhcnRzCiAgKiBvZiB0aGUgd29ya2VyIGxpc3QgKHNlZSBh Ym92ZSkuCkBAIC0yOTgsNiArMzA2LDggQEAgdHlwZWRlZiBzdHJ1Y3QKIAlXb3JrZXJJbmZvCWF2 X3N0YXJ0aW5nV29ya2VyOwogCUF1dG9WYWN1dW1Xb3JrSXRlbSBhdl93b3JrSXRlbXNbTlVNX1dP UktJVEVNU107CiAJcGdfYXRvbWljX3VpbnQzMiBhdl9ud29ya2Vyc0ZvckJhbGFuY2U7CisJdWlu dDMyCQlhdl9mcmVlUGFyYWxsZWxXb3JrZXJzOworCXVpbnQzMgkJYXZfbWF4UGFyYWxsZWxXb3Jr ZXJzOwogfSBBdXRvVmFjdXVtU2htZW1TdHJ1Y3Q7CiAKIHN0YXRpYyBBdXRvVmFjdXVtU2htZW1T dHJ1Y3QgKkF1dG9WYWN1dW1TaG1lbTsKQEAgLTM2Myw2ICszNzMsNyBAQCBzdGF0aWMgdm9pZCBh dXRvdmFjX3JlcG9ydF93b3JraXRlbShBdXRvVmFjdXVtV29ya0l0ZW0gKndvcmtpdGVtLAogc3Rh dGljIHZvaWQgYXZsX3NpZ3VzcjJfaGFuZGxlcihTSUdOQUxfQVJHUyk7CiBzdGF0aWMgYm9vbCBh dl93b3JrZXJfYXZhaWxhYmxlKHZvaWQpOwogc3RhdGljIHZvaWQgY2hlY2tfYXZfd29ya2VyX2d1 Y3Modm9pZCk7CitzdGF0aWMgdm9pZCBhZGp1c3RfZnJlZV9wYXJhbGxlbF93b3JrZXJzKGludCBw cmV2X21heF9wYXJhbGxlbF93b3JrZXJzKTsKIAogCiAKQEAgLTc2Miw2ICs3NzMsOCBAQCBQcm9j ZXNzQXV0b1ZhY0xhdW5jaGVySW50ZXJydXB0cyh2b2lkKQogCWlmIChDb25maWdSZWxvYWRQZW5k aW5nKQogCXsKIAkJaW50CQkJYXV0b3ZhY3V1bV9tYXhfd29ya2Vyc19wcmV2ID0gYXV0b3ZhY3V1 bV9tYXhfd29ya2VyczsKKwkJaW50CQkJYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2Vyc19w cmV2ID0KKwkJCWF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnM7CiAKIAkJQ29uZmlnUmVs b2FkUGVuZGluZyA9IGZhbHNlOwogCQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKQEAg LTc3OCw2ICs3OTEsMTUgQEAgUHJvY2Vzc0F1dG9WYWNMYXVuY2hlckludGVycnVwdHModm9pZCkK IAkJaWYgKGF1dG92YWN1dW1fbWF4X3dvcmtlcnNfcHJldiAhPSBhdXRvdmFjdXVtX21heF93b3Jr ZXJzKQogCQkJY2hlY2tfYXZfd29ya2VyX2d1Y3MoKTsKIAorCQkvKgorCQkgKiBJZiBhdXRvdmFj dXVtX21heF9wYXJhbGxlbF93b3JrZXJzIGNoYW5nZWQsIHdlIG11c3QgdGFrZSBjYXJlIG9mCisJ CSAqIHRoZSBjb3JyZWN0IHZhbHVlIG9mIGF2YWlsYWJsZSBwYXJhbGxlbCBhdXRvdmFjdXVtIHdv cmtlcnMgaW4KKwkJICogc2htZW0uCisJCSAqLworCQlpZiAoYXV0b3ZhY3V1bV9tYXhfcGFyYWxs ZWxfd29ya2Vyc19wcmV2ICE9CisJCQlhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzKQor CQkJYWRqdXN0X2ZyZWVfcGFyYWxsZWxfd29ya2VycyhhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93 b3JrZXJzX3ByZXYpOworCiAJCS8qIHJlYnVpbGQgdGhlIGxpc3QgaW4gY2FzZSB0aGUgbmFwdGlt ZSBjaGFuZ2VkICovCiAJCXJlYnVpbGRfZGF0YWJhc2VfbGlzdChJbnZhbGlkT2lkKTsKIAl9CkBA IC0yODcwLDggKzI4OTIsMTIgQEAgdGFibGVfcmVjaGVja19hdXRvdmFjKE9pZCByZWxpZCwgSFRB QiAqdGFibGVfdG9hc3RfbWFwLAogCQkgKi8KIAkJdGFiLT5hdF9wYXJhbXMuaW5kZXhfY2xlYW51 cCA9IFZBQ09QVFZBTFVFX1VOU1BFQ0lGSUVEOwogCQl0YWItPmF0X3BhcmFtcy50cnVuY2F0ZSA9 IFZBQ09QVFZBTFVFX1VOU1BFQ0lGSUVEOwotCQkvKiBBcyBvZiBub3csIHdlIGRvbid0IHN1cHBv cnQgcGFyYWxsZWwgdmFjdXVtIGZvciBhdXRvdmFjdXVtICovCi0JCXRhYi0+YXRfcGFyYW1zLm53 b3JrZXJzID0gLTE7CisKKwkJLyogRGVjaWRlIHdoZXRoZXIgd2UgbmVlZCB0byBwcm9jZXNzIGlu ZGV4ZXMgb2YgdGFibGUgaW4gcGFyYWxsZWwuICovCisJCXRhYi0+YXRfcGFyYW1zLm53b3JrZXJz ID0gYXZvcHRzCisJCQk/IGF2b3B0cy0+YXV0b3ZhY3V1bV9wYXJhbGxlbF93b3JrZXJzCisJCQk6 IC0xOworCiAJCXRhYi0+YXRfcGFyYW1zLmZyZWV6ZV9taW5fYWdlID0gZnJlZXplX21pbl9hZ2U7 CiAJCXRhYi0+YXRfcGFyYW1zLmZyZWV6ZV90YWJsZV9hZ2UgPSBmcmVlemVfdGFibGVfYWdlOwog CQl0YWItPmF0X3BhcmFtcy5tdWx0aXhhY3RfZnJlZXplX21pbl9hZ2UgPSBtdWx0aXhhY3RfZnJl ZXplX21pbl9hZ2U7CkBAIC0zMzUyLDYgKzMzNzgsODUgQEAgQXV0b1ZhY3V1bVJlcXVlc3RXb3Jr KEF1dG9WYWN1dW1Xb3JrSXRlbVR5cGUgdHlwZSwgT2lkIHJlbGF0aW9uSWQsCiAJcmV0dXJuIHJl c3VsdDsKIH0KIAorLyoKKyAqIEluIG9yZGVyIHRvIG1lZXQgdGhlICdhdXRvdmFjdXVtX21heF9w YXJhbGxlbF93b3JrZXJzJyBsaW1pdCwgbGVhZGVyCisgKiBhdXRvdmFjdXVtIHByb2Nlc3MgbXVz dCBjYWxsIHRoaXMgZnVuY3Rpb24uIEl0IHJldHVybnMgdGhlIG51bWJlciBvZgorICogcGFyYWxs ZWwgd29ya2VycyB0aGF0IGFjdHVhbGx5IGNhbiBiZSBsYXVuY2hlZCBhbmQgcmVzZXJ2ZXMgdGhl c2Ugd29ya2VycworICogKGlmIGFueSkgaW4gZ2xvYmFsIGF1dG92YWN1dW0gc3RhdGUuCisgKgor ICogTk9URTogV2Ugd2lsbCB0cnkgdG8gcHJvdmlkZSBhcyBtYW55IHdvcmtlcnMgYXMgcmVxdWVz dGVkLCBldmVuIGlmIGNhbGxlcgorICogd2lsbCBvY2N1cHkgYWxsIGF2YWlsYWJsZSB3b3JrZXJz LgorICovCitpbnQKK0F1dG9WYWN1dW1SZXNlcnZlUGFyYWxsZWxXb3JrZXJzKGludCBud29ya2Vy cykKK3sKKwlpbnQJCQlucmVzZXJ2ZWQ7CisKKwkvKiBPbmx5IGxlYWRlciB3b3JrZXIgY2FuIGNh bGwgdGhpcyBmdW5jdGlvbi4gKi8KKwlBc3NlcnQoQW1BdXRvVmFjdXVtV29ya2VyUHJvY2Vzcygp ICYmICFJc1BhcmFsbGVsV29ya2VyKCkpOworCisJLyoKKwkgKiBXZSBjYW4gb25seSByZXNlcnZl IHdvcmtlcnMgYXQgdGhlIGJlZ2lubmluZyBvZiBwYXJhbGxlbCBpbmRleAorCSAqIHByb2Nlc3Np bmcsIHNvIHdlIG11c3Qgbm90IGhhdmUgYW55IHJlc2VydmVkIHdvcmtlcnMgcmlnaHQgbm93Lgor CSAqLworCUFzc2VydChhdl9ud29ya2Vyc19yZXNlcnZlZCA9PSAwKTsKKworCUxXTG9ja0FjcXVp cmUoQXV0b3ZhY3V1bUxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKiBQcm92aWRlIGFzIG1hbnkg d29ya2VycyBhcyB3ZSBjYW4uICovCisJbnJlc2VydmVkID0gTWluKEF1dG9WYWN1dW1TaG1lbS0+ YXZfZnJlZVBhcmFsbGVsV29ya2VycywgbndvcmtlcnMpOworCUF1dG9WYWN1dW1TaG1lbS0+YXZf ZnJlZVBhcmFsbGVsV29ya2VycyAtPSBud29ya2VyczsKKworCS8qIFJlbWVtYmVyIGhvdyBtYW55 IHdvcmtlcnMgd2UgaGF2ZSByZXNlcnZlZC4gKi8KKwlhdl9ud29ya2Vyc19yZXNlcnZlZCArPSBu d29ya2VyczsKKworCUxXTG9ja1JlbGVhc2UoQXV0b3ZhY3V1bUxvY2spOworCXJldHVybiBucmVz ZXJ2ZWQ7Cit9CisKKy8qCisgKiBMZWFkZXIgYXV0b3ZhY3V1bSBwcm9jZXNzIG11c3QgY2FsbCB0 aGlzIGZ1bmN0aW9uIGluIG9yZGVyIHRvIHVwZGF0ZSBnbG9iYWwKKyAqIGF1dG92YWN1dW0gc3Rh dGUsIHNvIG90aGVyIGxlYWRlcnMgd2lsbCBiZSBhYmxlIHRvIHVzZSB0aGVzZSBwYXJhbGxlbAor ICogd29ya2Vycy4KKyAqCisgKiAnbndvcmtlcnMnIC0gaG93IG1hbnkgd29ya2VycyBjYWxsZXIg d2FudHMgdG8gcmVsZWFzZS4KKyAqLwordm9pZAorQXV0b1ZhY3V1bVJlbGVhc2VQYXJhbGxlbFdv cmtlcnMoaW50IG53b3JrZXJzKQoreworCS8qIE9ubHkgbGVhZGVyIHdvcmtlciBjYW4gY2FsbCB0 aGlzIGZ1bmN0aW9uLiAqLworCUFzc2VydChBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkgJiYg IUlzUGFyYWxsZWxXb3JrZXIoKSk7CisKKwlMV0xvY2tBY3F1aXJlKEF1dG92YWN1dW1Mb2NrLCBM V19FWENMVVNJVkUpOworCisJLyoKKwkgKiBJZiB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYWxs ZWwgd29ya2VycyB3YXMgcmVkdWNlZCBkdXJpbmcgZXhlY3V0aW9uLAorCSAqIHdlIG11c3QgY2Fw IGF2YWlsYWJsZSB3b3JrZXJzIG51bWJlciBieSBpdHMgbmV3IHZhbHVlLgorCSAqLworCUF1dG9W YWN1dW1TaG1lbS0+YXZfZnJlZVBhcmFsbGVsV29ya2VycyA9CisJCU1pbihBdXRvVmFjdXVtU2ht ZW0tPmF2X2ZyZWVQYXJhbGxlbFdvcmtlcnMgKyBud29ya2VycywKKwkJCUF1dG9WYWN1dW1TaG1l bS0+YXZfbWF4UGFyYWxsZWxXb3JrZXJzKTsKKworCS8qIERvbid0IGhhdmUgdG8gcmVtZW1iZXIg dGhlc2Ugd29ya2VycyBhbnltb3JlLiAqLworCWF2X253b3JrZXJzX3Jlc2VydmVkIC09IG53b3Jr ZXJzOworCisJTFdMb2NrUmVsZWFzZShBdXRvdmFjdXVtTG9jayk7Cit9CisKKy8qCisgKiBTYW1l IGFzIGFib3ZlLCBidXQgcmVsZWFzZSAqYWxsKiBwYXJhbGxlbCB3b3JrZXJzLCB0aGF0IHdlcmUg cmVzZXJ2ZWQgYnkKKyAqIGN1cnJlbnQgbGVhZGVyIGF1dG92YWN1dW0gcHJvY2Vzcy4KKyAqLwor dm9pZAorQXV0b1ZhY3V1bVJlbGVhc2VBbGxQYXJhbGxlbFdvcmtlcnModm9pZCkKK3sKKwkvKiBP bmx5IGxlYWRlciB3b3JrZXIgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbi4gKi8KKwlBc3NlcnQoQW1B dXRvVmFjdXVtV29ya2VyUHJvY2VzcygpICYmICFJc1BhcmFsbGVsV29ya2VyKCkpOworCisJaWYg KGF2X253b3JrZXJzX3Jlc2VydmVkID4gMCkKKwkJQXV0b1ZhY3V1bVJlbGVhc2VQYXJhbGxlbFdv cmtlcnMoYXZfbndvcmtlcnNfcmVzZXJ2ZWQpOworfQorCiAvKgogICogYXV0b3ZhY19pbml0CiAg KgkJVGhpcyBpcyBjYWxsZWQgYXQgcG9zdG1hc3RlciBpbml0aWFsaXphdGlvbi4KQEAgLTM0MTIs NiArMzUxNywxMCBAQCBBdXRvVmFjdXVtU2htZW1Jbml0KHZvaWQpCiAJCUFzc2VydCghZm91bmQp OwogCiAJCUF1dG9WYWN1dW1TaG1lbS0+YXZfbGF1bmNoZXJwaWQgPSAwOworCQlBdXRvVmFjdXVt U2htZW0tPmF2X21heFBhcmFsbGVsV29ya2VycyA9CisJCQlNaW4oYXV0b3ZhY3V1bV9tYXhfcGFy YWxsZWxfd29ya2VycywgbWF4X3dvcmtlcl9wcm9jZXNzZXMpOworCQlBdXRvVmFjdXVtU2htZW0t PmF2X2ZyZWVQYXJhbGxlbFdvcmtlcnMgPQorCQkJQXV0b1ZhY3V1bVNobWVtLT5hdl9tYXhQYXJh bGxlbFdvcmtlcnM7CiAJCWRjbGlzdF9pbml0KCZBdXRvVmFjdXVtU2htZW0tPmF2X2ZyZWVXb3Jr ZXJzKTsKIAkJZGxpc3RfaW5pdCgmQXV0b1ZhY3V1bVNobWVtLT5hdl9ydW5uaW5nV29ya2Vycyk7 CiAJCUF1dG9WYWN1dW1TaG1lbS0+YXZfc3RhcnRpbmdXb3JrZXIgPSBOVUxMOwpAQCAtMzQ5Mywz ICszNjAyLDM0IEBAIGNoZWNrX2F2X3dvcmtlcl9ndWNzKHZvaWQpCiAJCQkJIGVycmRldGFpbCgi VGhlIHNlcnZlciB3aWxsIG9ubHkgc3RhcnQgdXAgdG8gXCJhdXRvdmFjdXVtX3dvcmtlcl9zbG90 c1wiICglZCkgYXV0b3ZhY3V1bSB3b3JrZXJzIGF0IGEgZ2l2ZW4gdGltZS4iLAogCQkJCQkJICAg YXV0b3ZhY3V1bV93b3JrZXJfc2xvdHMpKSk7CiB9CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCBu dW1iZXIgb2YgZnJlZSBwYXJhbGxlbCB3b3JrZXJzIGNvcnJlc3BvbmRzIHRvIHRoZQorICogYXV0 b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycyBwYXJhbWV0ZXIgKGFmdGVyIGl0IHdhcyBjaGFu Z2VkKS4KKyAqLworc3RhdGljIHZvaWQKK2FkanVzdF9mcmVlX3BhcmFsbGVsX3dvcmtlcnMoaW50 IHByZXZfbWF4X3BhcmFsbGVsX3dvcmtlcnMpCit7CisJTFdMb2NrQWNxdWlyZShBdXRvdmFjdXVt TG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qCisJICogQ2FwIHRoZSBudW1iZXIgb2YgZnJlZSB3 b3JrZXJzIGJ5IG5ldyBwYXJhbWV0ZXIncyB2YWx1ZSwgaWYgbmVlZGVkLgorCSAqLworCUF1dG9W YWN1dW1TaG1lbS0+YXZfZnJlZVBhcmFsbGVsV29ya2VycyA9CisJCU1pbihBdXRvVmFjdXVtU2ht ZW0tPmF2X2ZyZWVQYXJhbGxlbFdvcmtlcnMsCisJCQlhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93 b3JrZXJzKTsKKworCWlmIChhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzID4gcHJldl9t YXhfcGFyYWxsZWxfd29ya2VycykKKwl7CisJCS8qCisJCSAqIElmIHVzZXIgd2FudHMgdG8gaW5j cmVhc2UgbnVtYmVyIG9mIHBhcmFsbGVsIGF1dG92YWN1dW0gd29ya2Vycywgd2UKKwkJICogbXVz dCBpbmNyZWFzZSBudW1iZXIgb2YgZnJlZSB3b3JrZXJzLgorCQkgKi8KKwkJQXV0b1ZhY3V1bVNo bWVtLT5hdl9mcmVlUGFyYWxsZWxXb3JrZXJzICs9CisJCQkoYXV0b3ZhY3V1bV9tYXhfcGFyYWxs ZWxfd29ya2VycyAtIHByZXZfbWF4X3BhcmFsbGVsX3dvcmtlcnMpOworCX0KKworCUF1dG9WYWN1 dW1TaG1lbS0+YXZfbWF4UGFyYWxsZWxXb3JrZXJzID0gYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxf d29ya2VyczsKKworCUxXTG9ja1JlbGVhc2UoQXV0b3ZhY3V1bUxvY2spOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9p bml0L2dsb2JhbHMuYwppbmRleCBkMzFjYjQ1YTA1OC4uZmQwMGQ2Zjg5ZGMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2luaXQvZ2xvYmFscy5jCkBAIC0xNDMsNiArMTQzLDcgQEAgaW50CQkJTkJ1ZmZlcnMgPSAxNjM4 NDsKIGludAkJCU1heENvbm5lY3Rpb25zID0gMTAwOwogaW50CQkJbWF4X3dvcmtlcl9wcm9jZXNz ZXMgPSA4OwogaW50CQkJbWF4X3BhcmFsbGVsX3dvcmtlcnMgPSA4OworaW50CQkJYXV0b3ZhY3V1 bV9tYXhfcGFyYWxsZWxfd29ya2VycyA9IDA7CiBpbnQJCQlNYXhCYWNrZW5kcyA9IDA7CiAKIC8q IEdVQyBwYXJhbWV0ZXJzIGZvciB2YWN1dW0gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf cGFyYW1ldGVycy5kYXQKaW5kZXggNmJjNmJlMTNkMmEuLjE5MjYyMTg1NThhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtMjExMiw2ICsyMTEyLDE1IEBA CiAgIG1heCA9PiAnTUFYX0JBQ0tFTkRTJywKIH0sCiAKK3sgbmFtZSA9PiAnYXV0b3ZhY3V1bV9t YXhfcGFyYWxsZWxfd29ya2VycycsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BHQ19TSUdI VVAnLCBncm91cCA9PiAnVkFDVVVNX0FVVE9WQUNVVU0nLAorICBzaG9ydF9kZXNjID0+ICdNYXhp bXVtIG51bWJlciBvZiBwYXJhbGxlbCBhdXRvdmFjdXVtIHdvcmtlcnMsIHRoYXQgY2FuIGJlIHRh a2VuIGZyb20gYmd3b3JrZXJzIHBvb2wuJywKKyAgbG9uZ19kZXNjID0+ICdUaGlzIHBhcmFtZXRl ciBpcyBjYXBwZWQgYnkgIm1heF93b3JrZXJfcHJvY2Vzc2VzIiAobm90IGJ5ICJhdXRvdmFjdXVt X21heF93b3JrZXJzIiEpLicsCisgIHZhcmlhYmxlID0+ICdhdXRvdmFjdXVtX21heF9wYXJhbGxl bF93b3JrZXJzJywKKyAgYm9vdF92YWwgPT4gJzAnLAorICBtaW4gPT4gJzAnLAorICBtYXggPT4g J01BWF9CQUNLRU5EUycsCit9LAorCiB7IG5hbWUgPT4gJ21heF9wYXJhbGxlbF9tYWludGVuYW5j ZV93b3JrZXJzJywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91 cCA9PiAnUkVTT1VSQ0VTX1dPUktFUl9QUk9DRVNTRVMnLAogICBzaG9ydF9kZXNjID0+ICdTZXRz IHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCBwcm9jZXNzZXMgcGVyIG1haW50ZW5hbmNl IG9wZXJhdGlvbi4nLAogICB2YXJpYWJsZSA9PiAnbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dv cmtlcnMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNv bmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl CmluZGV4IGMzNmZjYjlhYjYxLi5kMjc3ZmVmMTczNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNjg0LDYgKzY4NCw3IEBACiBhdXRvdmFj dXVtX3dvcmtlcl9zbG90cyA9IDE2CSMgYXV0b3ZhY3V1bSB3b3JrZXIgc2xvdHMgdG8gYWxsb2Nh dGUKIAkJCQkJIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCiAjYXV0b3ZhY3V1bV9tYXhfd29y a2VycyA9IDMJCSMgbWF4IG51bWJlciBvZiBhdXRvdmFjdXVtIHN1YnByb2Nlc3NlcworI2F1dG92 YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMgPSAwCSMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQg bGltaXRlZCBieSBtYXhfd29ya2VyX3Byb2Nlc3NlcwogI2F1dG92YWN1dW1fbmFwdGltZSA9IDFt aW4JCSMgdGltZSBiZXR3ZWVuIGF1dG92YWN1dW0gcnVucwogI2F1dG92YWN1dW1fdmFjdXVtX3Ro cmVzaG9sZCA9IDUwCSMgbWluIG51bWJlciBvZiByb3cgdXBkYXRlcyBiZWZvcmUKIAkJCQkJIyB2 YWN1dW0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYyBiL3NyYy9i aW4vcHNxbC90YWItY29tcGxldGUuaW4uYwppbmRleCA2YjIwYTQ0MDRiMi4uMGZiMDRlMDhjNWQg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYworKysgYi9zcmMvYmlu L3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKQEAgLTE0MDIsNiArMTQwMiw3IEBAIHN0YXRpYyBjb25z dCBjaGFyICpjb25zdCB0YWJsZV9zdG9yYWdlX3BhcmFtZXRlcnNbXSA9IHsKIAkiYXV0b3ZhY3V1 bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UiLAogCSJhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVl emVfbWluX2FnZSIsCiAJImF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2UiLAor CSJhdXRvdmFjdXVtX3BhcmFsbGVsX3dvcmtlcnMiLAogCSJhdXRvdmFjdXVtX3ZhY3V1bV9jb3N0 X2RlbGF5IiwKIAkiYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9saW1pdCIsCiAJImF1dG92YWN1dW1f dmFjdXVtX2luc2VydF9zY2FsZV9mYWN0b3IiLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlz Y2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCAxYmVmOTg0NzFjMy4uODU5 MjY0MTU2NTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9p bmNsdWRlL21pc2NhZG1pbi5oCkBAIC0xNzcsNiArMTc3LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JU IGludCBNYXhCYWNrZW5kczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgTWF4Q29ubmVjdGlvbnM7 CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF93b3JrZXJfcHJvY2Vzc2VzOwogZXh0ZXJuIFBH RExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxfd29ya2VyczsKK2V4dGVybiBQR0RMTElNUE9SVCBp bnQgYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VyczsKIAogZXh0ZXJuIFBHRExMSU1QT1JU IGludCBjb21taXRfdGltZXN0YW1wX2J1ZmZlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG11 bHRpeGFjdF9tZW1iZXJfYnVmZmVyczsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0 ZXIvYXV0b3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgKaW5k ZXggZTgxMzVmNDFhMWMuLjkwNGM1Y2UzN2Q4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0 bWFzdGVyL2F1dG92YWN1dW0uaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1 dW0uaApAQCAtNjQsNiArNjQsMTEgQEAgcGdfbm9yZXR1cm4gZXh0ZXJuIHZvaWQgQXV0b1ZhY1dv cmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnQKIGV4dGVybiBi b29sIEF1dG9WYWN1dW1SZXF1ZXN0V29yayhBdXRvVmFjdXVtV29ya0l0ZW1UeXBlIHR5cGUsCiAJ CQkJCQkJCSAgT2lkIHJlbGF0aW9uSWQsIEJsb2NrTnVtYmVyIGJsa25vKTsKIAorLyogcGFyYWxs ZWwgYXV0b3ZhY3V1bSBzdHVmZiAqLworZXh0ZXJuIGludAlBdXRvVmFjdXVtUmVzZXJ2ZVBhcmFs bGVsV29ya2VycyhpbnQgbndvcmtlcnMpOworZXh0ZXJuIHZvaWQgQXV0b1ZhY3V1bVJlbGVhc2VQ YXJhbGxlbFdvcmtlcnMoaW50IG53b3JrZXJzKTsKK2V4dGVybiB2b2lkIEF1dG9WYWN1dW1SZWxl YXNlQWxsUGFyYWxsZWxXb3JrZXJzKHZvaWQpOworCiAvKiBzaGFyZWQgbWVtb3J5IHN0dWZmICov CiBleHRlcm4gU2l6ZSBBdXRvVmFjdXVtU2htZW1TaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgQXV0 b1ZhY3V1bVNobWVtSW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3Jl bC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKaW5kZXggYjU1MjM1OTkxNWYuLmVkZDI4Njgw OGJmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAorKysgYi9zcmMvaW5jbHVk ZS91dGlscy9yZWwuaApAQCAtMzExLDYgKzMxMSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBGb3JlaWdu S2V5Q2FjaGVJbmZvCiB0eXBlZGVmIHN0cnVjdCBBdXRvVmFjT3B0cwogewogCWJvb2wJCWVuYWJs ZWQ7CisKKwkvKgorCSAqIE1heCBudW1iZXIgb2YgcGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXJz LiBJZiB2YWx1ZSBpcyAwIHRoZW4gcGFyYWxsZWwKKwkgKiBkZWdyZWUgd2lsbCBjb21wdXRlZCBi YXNlZCBvbiBudW1iZXIgb2YgaW5kZXhlcy4KKwkgKi8KKwlpbnQJCQlhdXRvdmFjdXVtX3BhcmFs bGVsX3dvcmtlcnM7CisKIAlpbnQJCQl2YWN1dW1fdGhyZXNob2xkOwogCWludAkJCXZhY3V1bV9t YXhfdGhyZXNob2xkOwogCWludAkJCXZhY3V1bV9pbnNfdGhyZXNob2xkOwotLSAKMi4zOS41IChB cHBsZSBHaXQtMTU0KQoK --000000000000c84f89063edb7ada Content-Type: application/octet-stream; name="v11-0003-Documentation-for-parallel-autovacuum.patch" Content-Disposition: attachment; filename="v11-0003-Documentation-for-parallel-autovacuum.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mflgndjm2 RnJvbSA0NWMxODUzNDY4MmRjNGRmZjIxOTUxOGUyMTEyYjQ4NjFlM2Y2YmFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBUdWUsIDIyIEp1bCAyMDI1IDEyOjMxOjIwICswNzAwClN1YmplY3Q6IFtQQVRD SCB2MTEgMy8zXSBEb2N1bWVudGF0aW9uIGZvciBwYXJhbGxlbCBhdXRvdmFjdXVtCgotLS0KIGRv Yy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgfCAxOCArKysrKysrKysrKysrKysrKysK IGRvYy9zcmMvc2dtbC9tYWludGVuYW5jZS5zZ21sICAgICAgfCAxMiArKysrKysrKysrKysKIGRv Yy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgfCAyMCArKysrKysrKysrKysrKysrKysr KwogMyBmaWxlcyBjaGFuZ2VkLCA1MCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGU5YjQy MGYzZGRiLi5mZmFiNmM2YmVhOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtMjgzNSw2ICsyODM1LDcgQEAgaW5j bHVkZV9kaXIgJ2NvbmYuZCcKICAgICAgICAgPHBhcmE+CiAgICAgICAgICBXaGVuIGNoYW5naW5n IHRoaXMgdmFsdWUsIGNvbnNpZGVyIGFsc28gYWRqdXN0aW5nCiAgICAgICAgICA8eHJlZiBsaW5r ZW5kPSJndWMtbWF4LXBhcmFsbGVsLXdvcmtlcnMiLz4sCisgICAgICAgICA8eHJlZiBsaW5rZW5k PSJndWMtYXV0b3ZhY3V1bS1tYXgtcGFyYWxsZWwtd29ya2VycyIvPiwKICAgICAgICAgIDx4cmVm IGxpbmtlbmQ9Imd1Yy1tYXgtcGFyYWxsZWwtbWFpbnRlbmFuY2Utd29ya2VycyIvPiwgYW5kCiAg ICAgICAgICA8eHJlZiBsaW5rZW5kPSJndWMtbWF4LXBhcmFsbGVsLXdvcmtlcnMtcGVyLWdhdGhl ciIvPi4KICAgICAgICAgPC9wYXJhPgpAQCAtOTE5Niw2ICs5MTk3LDIzIEBAIENPUFkgcG9zdGdy ZXNfbG9nIEZST00gJy9mdWxsL3BhdGgvdG8vbG9nZmlsZS5jc3YnIFdJVEggY3N2OwogICAgICAg IDwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICAgPHZhcmxpc3RlbnRy eSBpZD0iZ3VjLWF1dG92YWN1dW0tbWF4LXBhcmFsbGVsLXdvcmtlcnMiIHhyZWZsYWJlbD0iYXV0 b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycyI+CisgICAgICAgIDx0ZXJtPjx2YXJuYW1lPmF1 dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnM8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90 eXBlPikKKyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmF1 dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnM8L3Zhcm5hbWU+PC9wcmltYXJ5PgorICAgICAg ICAgPHNlY29uZGFyeT5jb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvc2Vjb25kYXJ5PgorICAgICAg ICA8L2luZGV4dGVybT4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgICA8cGFyYT4KKyAgICAgICAgICBTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJhbGxl bCBhdXRvdmFjdXVtIHdvcmtlcnMgdGhhdAorICAgICAgICAgIGNhbiBiZSB1c2VkIGZvciBwYXJh bGxlbCBpbmRleCB2YWN1dW1pbmcgYXQgb25lIHRpbWUuIElzIGNhcHBlZCBieQorICAgICAgICAg IDx4cmVmIGxpbmtlbmQ9Imd1Yy1tYXgtd29ya2VyLXByb2Nlc3NlcyIvPi4gVGhlIGRlZmF1bHQg aXMgMCwKKyAgICAgICAgICB3aGljaCBtZWFucyBubyBwYXJhbGxlbCBpbmRleCB2YWN1dW1pbmcu CisgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVu dHJ5PgorCiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgIDwvc2VjdDI+CiAKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9tYWludGVuYW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21sL21haW50ZW5hbmNl LnNnbWwKaW5kZXggZTdhOWY1OGMwMTUuLjRlNDUwYmE5MDY2IDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvbWFpbnRlbmFuY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbWFpbnRlbmFuY2Uuc2dt bApAQCAtODk2LDYgKzg5NiwxOCBAQCBISU5UOiAgRXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFD VVVNIGluIHRoYXQgZGF0YWJhc2UuCiAgICAgYXV0b3ZhY3V1bSB3b3JrZXJzJyBhY3Rpdml0eS4K ICAgIDwvcGFyYT4KIAorICAgPHBhcmE+CisgICAgSWYgYW4gYXV0b3ZhY3V1bSB3b3JrZXIgcHJv Y2VzcyBjb21lcyBhY3Jvc3MgYSB0YWJsZSB3aXRoIHRoZSBlbmFibGVkCisgICAgPHhyZWYgbGlu a2VuZD0icmVsb3B0aW9uLWF1dG92YWN1dW0tcGFyYWxsZWwtd29ya2VycyIvPiBzdG9yYWdlIHBh cmFtZXRlciwKKyAgICBpdCB3aWxsIGxhdW5jaCBwYXJhbGxlbCB3b3JrZXJzIGluIG9yZGVyIHRv IHZhY3V1bSBpbmRleGVzIG9mIHRoaXMgdGFibGUKKyAgICBpbiBhIHBhcmFsbGVsIG1vZGUuIFBh cmFsbGVsIHdvcmtlcnMgYXJlIHRha2VuIGZyb20gdGhlIHBvb2wgb2YgcHJvY2Vzc2VzCisgICAg ZXN0YWJsaXNoZWQgYnkgPHhyZWYgbGlua2VuZD0iZ3VjLW1heC13b3JrZXItcHJvY2Vzc2VzIi8+ LCBsaW1pdGVkIGJ5CisgICAgPHhyZWYgbGlua2VuZD0iZ3VjLW1heC1wYXJhbGxlbC13b3JrZXJz Ii8+LgorICAgIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXJz IHRoYXQgY2FuIGJlIGFjdGl2ZSBhdCBvbmUKKyAgICB0aW1lIGlzIGxpbWl0ZWQgYnkgdGhlIDx4 cmVmIGxpbmtlbmQ9Imd1Yy1hdXRvdmFjdXVtLW1heC1wYXJhbGxlbC13b3JrZXJzIi8+CisgICAg Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuCisgICA8L3BhcmE+CisKICAgIDxwYXJhPgogICAgIElm IHNldmVyYWwgbGFyZ2UgdGFibGVzIGFsbCBiZWNvbWUgZWxpZ2libGUgZm9yIHZhY3V1bWluZyBp biBhIHNob3J0CiAgICAgYW1vdW50IG9mIHRpbWUsIGFsbCBhdXRvdmFjdXVtIHdvcmtlcnMgbWln aHQgYmVjb21lIG9jY3VwaWVkIHdpdGgKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3Jl YXRlX3RhYmxlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCmluZGV4 IGRjMDAwZTkxM2MxLi4yODhkZTZiMGZmZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9j cmVhdGVfdGFibGUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21s CkBAIC0xNzE3LDYgKzE3MTcsMjYgQEAgV0lUSCAoIE1PRFVMVVMgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFibGU+LCBSRU0KICAgICA8L2xp c3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgPHZhcmxpc3RlbnRyeSBpZD0icmVsb3B0 aW9uLWF1dG92YWN1dW0tcGFyYWxsZWwtd29ya2VycyIgeHJlZmxhYmVsPSJhdXRvdmFjdXVtX3Bh cmFsbGVsX3dvcmtlcnMiPgorICAgIDx0ZXJtPjxsaXRlcmFsPmF1dG92YWN1dW1fcGFyYWxsZWxf d29ya2VyczwvbGl0ZXJhbD4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgIDxpbmRleHRlcm0+ CisgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmF1dG92YWN1dW1fcGFyYWxsZWxfd29ya2VyczwvdmFy bmFtZT4gc3RvcmFnZSBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgPC9pbmRleHRlcm0+CisgICAg PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBTZXRzIHRoZSBtYXhp bXVtIG51bWJlciBvZiBwYXJhbGxlbCBhdXRvdmFjdXVtIHdvcmtlcnMgdGhhdCBjYW4gcHJvY2Vz cworICAgICAgaW5kZXhlcyBvZiB0aGlzIHRhYmxlLgorICAgICAgVGhlIGRlZmF1bHQgdmFsdWUg aXMgLTEsIHdoaWNoIG1lYW5zIG5vIHBhcmFsbGVsIGluZGV4IHZhY3V1bWluZyBmb3IKKyAgICAg IHRoaXMgdGFibGUuIElmIHZhbHVlIGlzIDAgdGhlbiBwYXJhbGxlbCBkZWdyZWUgd2lsbCBjb21w dXRlZCBiYXNlZCBvbgorICAgICAgbnVtYmVyIG9mIGluZGV4ZXMuCisgICAgICBOb3RlIHRoYXQg dGhlIGNvbXB1dGVkIG51bWJlciBvZiB3b3JrZXJzIG1heSBub3QgYWN0dWFsbHkgYmUgYXZhaWxh YmxlIGF0CisgICAgICBydW4gdGltZS4gSWYgdGhpcyBvY2N1cnMsIHRoZSBhdXRvdmFjdXVtIHdp bGwgcnVuIHdpdGggZmV3ZXIgd29ya2VycworICAgICAgdGhhbiBleHBlY3RlZC4KKyAgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgPHZhcmxpc3Rl bnRyeSBpZD0icmVsb3B0aW9uLWF1dG92YWN1dW0tdmFjdXVtLXRocmVzaG9sZCIgeHJlZmxhYmVs PSJhdXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQiPgogICAgIDx0ZXJtPjxsaXRlcmFsPmF1dG92 YWN1dW1fdmFjdXVtX3RocmVzaG9sZDwvbGl0ZXJhbD4sIDxsaXRlcmFsPnRvYXN0LmF1dG92YWN1 dW1fdmFjdXVtX3RocmVzaG9sZDwvbGl0ZXJhbD4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQogICAg IDxpbmRleHRlcm0+Ci0tIAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCgo= --000000000000c84f89063edb7ada Content-Type: application/octet-stream; name="v11-0002-Logging-for-parallel-autovacuum.patch" Content-Disposition: attachment; filename="v11-0002-Logging-for-parallel-autovacuum.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mflgndjk1 RnJvbSBhZjIwNDBjYjU0MDhmMzg3Njc0OGY5NWRkOGVlMDU1MzU4MzE0Y2FhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBNb24sIDE4IEF1ZyAyMDI1IDE1OjE0OjI1ICswNzAwClN1YmplY3Q6IFtQQVRD SCB2MTEgMi8zXSBMb2dnaW5nIGZvciBwYXJhbGxlbCBhdXRvdmFjdXVtCgotLS0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyAgfCAyNyArKysrKysrKysrKysrKysrKysrKysr KystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYyB8IDI4ICsrKysrKysr KysrKysrKysrKy0tLS0tLS0tLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmggICAgICAg ICB8IDE2ICsrKysrKysrKysrKystLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg ICAgICB8ICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgNTkgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCmluZGV4IDk4MWQ5MzgwYTky Li42ZmU4NGQ4NzQ3YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVt bGF6eS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwpAQCAtMzQ3 LDYgKzM0NywxMiBAQCB0eXBlZGVmIHN0cnVjdCBMVlJlbFN0YXRlCiAKIAkvKiBJbnN0cnVtZW50 YXRpb24gY291bnRlcnMgKi8KIAlpbnQJCQludW1faW5kZXhfc2NhbnM7CisKKwkvKgorCSAqIE51 bWJlciBvZiBwbGFubmVkIGFuZCBhY3R1YWxseSBsYXVuY2hlZCBwYXJhbGxlbCB3b3JrZXJzIGZv ciBhbGwgaW5kZXgKKwkgKiBzY2Fucywgb3IgTlVMTAorCSAqLworCVBWV29ya2Vyc1VzYWdlICp3 b3JrZXJzX3VzYWdlOwogCS8qIENvdW50ZXJzIHRoYXQgZm9sbG93IGFyZSBvbmx5IGZvciBzY2Fu bmVkX3BhZ2VzICovCiAJaW50NjQJCXR1cGxlc19kZWxldGVkOyAvKiAjIGRlbGV0ZWQgZnJvbSB0 YWJsZSAqLwogCWludDY0CQl0dXBsZXNfZnJvemVuOwkvKiAjIG5ld2x5IGZyb3plbiAqLwpAQCAt Njg3LDYgKzY5MywxNiBAQCBoZWFwX3ZhY3V1bV9yZWwoUmVsYXRpb24gcmVsLCBjb25zdCBWYWN1 dW1QYXJhbXMgcGFyYW1zLAogCQlpbmRuYW1lcyA9IHBhbGxvYyhzaXplb2YoY2hhciAqKSAqIHZh Y3JlbC0+bmluZGV4ZXMpOwogCQlmb3IgKGludCBpID0gMDsgaSA8IHZhY3JlbC0+bmluZGV4ZXM7 IGkrKykKIAkJCWluZG5hbWVzW2ldID0gcHN0cmR1cChSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh2 YWNyZWwtPmluZHJlbHNbaV0pKTsKKworCQkvKgorCQkgKiBBbGxvY2F0ZSBzcGFjZSBmb3Igd29y a2VycyB1c2FnZSBzdGF0aXN0aWNzLiBUaHVzLCB3ZSBleHBsaWNpdGx5CisJCSAqIG1ha2UgY2xl YXIgdGhhdCBzdWNoIHN0YXRpc3RpY3MgbXVzdCBiZSBhY2N1bXVsYXRlZC4gRm9yIG5vdywgdGhp cworCQkgKiBpcyB1c2VkIG9ubHkgYnkgYXV0b3ZhY3V1bSBsZWFkZXIgd29ya2VyLCBiZWNhdXNl IGl0IG11c3QgbG9nIGl0IGluCisJCSAqIHRoZSBlbmQgb2YgdGFibGUgcHJvY2Vzc2luZy4KKwkJ ICovCisJCXZhY3JlbC0+d29ya2Vyc191c2FnZSA9IEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3Mo KSA/CisJCQkoUFZXb3JrZXJzVXNhZ2UgKikgcGFsbG9jMChzaXplb2YoUFZXb3JrZXJzVXNhZ2Up KSA6CisJCQlOVUxMOwogCX0KIAogCS8qCkBAIC0xMDExLDYgKzEwMjcsMTEgQEAgaGVhcF92YWN1 dW1fcmVsKFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAkJCQkJCQkg dmFjcmVsLT5yZWxuYW1lc3BhY2UsCiAJCQkJCQkJIHZhY3JlbC0+cmVsbmFtZSwKIAkJCQkJCQkg dmFjcmVsLT5udW1faW5kZXhfc2NhbnMpOworCQkJaWYgKHZhY3JlbC0+d29ya2Vyc191c2FnZSkK KwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsCisJCQkJCQkJCSBfKCJ3b3JrZXJzIHVzYWdlIHN0 YXRpc3RpY3MgZm9yIGFsbCBvZiBpbmRleCBzY2FucyA6IGxhdW5jaGVkIGluIHRvdGFsID0gJWQs IHBsYW5uZWQgaW4gdG90YWwgPSAlZFxuIiksCisJCQkJCQkJCSB2YWNyZWwtPndvcmtlcnNfdXNh Z2UtPm5sYXVuY2hlZCwKKwkJCQkJCQkJIHZhY3JlbC0+d29ya2Vyc191c2FnZS0+bnBsYW5uZWQp OwogCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCBfKCJwYWdlczogJXUgcmVtb3ZlZCwgJXUgcmVt YWluLCAldSBzY2FubmVkICglLjJmJSUgb2YgdG90YWwpLCAldSBlYWdlcmx5IHNjYW5uZWRcbiIp LAogCQkJCQkJCSB2YWNyZWwtPnJlbW92ZWRfcGFnZXMsCiAJCQkJCQkJIG5ld19yZWxfcGFnZXMs CkBAIC0yNjM5LDcgKzI2NjAsOCBAQCBsYXp5X3ZhY3V1bV9hbGxfaW5kZXhlcyhMVlJlbFN0YXRl ICp2YWNyZWwpCiAJewogCQkvKiBPdXRzb3VyY2UgZXZlcnl0aGluZyB0byBwYXJhbGxlbCB2YXJp YW50ICovCiAJCXBhcmFsbGVsX3ZhY3V1bV9idWxrZGVsX2FsbF9pbmRleGVzKHZhY3JlbC0+cHZz LCBvbGRfbGl2ZV90dXBsZXMsCi0JCQkJCQkJCQkJCXZhY3JlbC0+bnVtX2luZGV4X3NjYW5zKTsK KwkJCQkJCQkJCQkJdmFjcmVsLT5udW1faW5kZXhfc2NhbnMsCisJCQkJCQkJCQkJCXZhY3JlbC0+ d29ya2Vyc191c2FnZSk7CiAKIAkJLyoKIAkJICogRG8gYSBwb3N0Y2hlY2sgdG8gY29uc2lkZXIg YXBwbHlpbmcgd3JhcGFyb3VuZCBmYWlsc2FmZSBub3cuICBOb3RlCkBAIC0zMDUyLDcgKzMwNzQs OCBAQCBsYXp5X2NsZWFudXBfYWxsX2luZGV4ZXMoTFZSZWxTdGF0ZSAqdmFjcmVsKQogCQkvKiBP dXRzb3VyY2UgZXZlcnl0aGluZyB0byBwYXJhbGxlbCB2YXJpYW50ICovCiAJCXBhcmFsbGVsX3Zh Y3V1bV9jbGVhbnVwX2FsbF9pbmRleGVzKHZhY3JlbC0+cHZzLCByZWx0dXBsZXMsCiAJCQkJCQkJ CQkJCXZhY3JlbC0+bnVtX2luZGV4X3NjYW5zLAotCQkJCQkJCQkJCQllc3RpbWF0ZWRfY291bnQp OworCQkJCQkJCQkJCQllc3RpbWF0ZWRfY291bnQsCisJCQkJCQkJCQkJCXZhY3JlbC0+d29ya2Vy c191c2FnZSk7CiAJfQogCiAJLyogUmVzZXQgdGhlIHByb2dyZXNzIGNvdW50ZXJzICovCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwppbmRleCA0MjIxZTYwODRmNS4uY2FkYTE3MjJi NzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwpAQCAtMjI3LDkgKzIyNywx MCBAQCBzdHJ1Y3QgUGFyYWxsZWxWYWN1dW1TdGF0ZQogc3RhdGljIGludAlwYXJhbGxlbF92YWN1 dW1fY29tcHV0ZV93b3JrZXJzKFJlbGF0aW9uICppbmRyZWxzLCBpbnQgbmluZGV4ZXMsIGludCBu cmVxdWVzdGVkLAogCQkJCQkJCQkJCQlib29sICp3aWxsX3BhcmFsbGVsX3ZhY3V1bSk7CiBzdGF0 aWMgdm9pZCBwYXJhbGxlbF92YWN1dW1fcHJvY2Vzc19hbGxfaW5kZXhlcyhQYXJhbGxlbFZhY3V1 bVN0YXRlICpwdnMsIGludCBudW1faW5kZXhfc2NhbnMsCi0JCQkJCQkJCQkJCQlib29sIHZhY3V1 bSk7CisJCQkJCQkJCQkJCQlib29sIHZhY3V1bSwgUFZXb3JrZXJzVXNhZ2UgKnd1c2FnZSk7CiBz dGF0aWMgdm9pZCBwYXJhbGxlbF92YWN1dW1fcHJvY2Vzc19hbGxfaW5kZXhlc19pbnRlcm5hbChQ YXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsCi0JCQkJCQkJCQkJCQkJCSBpbnQgbnVtX2luZGV4X3Nj YW5zLCBib29sIHZhY3V1bSk7CisJCQkJCQkJCQkJCQkJCSBpbnQgbnVtX2luZGV4X3NjYW5zLCBi b29sIHZhY3V1bSwKKwkJCQkJCQkJCQkJCQkJIFBWV29ya2Vyc1VzYWdlICp3dXNhZ2UpOwogc3Rh dGljIHZvaWQgcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3Nfc2FmZV9pbmRleGVzKFBhcmFsbGVsVmFj dXVtU3RhdGUgKnB2cyk7CiBzdGF0aWMgdm9pZCBwYXJhbGxlbF92YWN1dW1fcHJvY2Vzc191bnNh ZmVfaW5kZXhlcyhQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMpOwogc3RhdGljIHZvaWQgcGFyYWxs ZWxfdmFjdXVtX3Byb2Nlc3Nfb25lX2luZGV4KFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgUmVs YXRpb24gaW5kcmVsLApAQCAtNTA0LDcgKzUwNSw3IEBAIHBhcmFsbGVsX3ZhY3V1bV9yZXNldF9k ZWFkX2l0ZW1zKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cykKICAqLwogdm9pZAogcGFyYWxsZWxf dmFjdXVtX2J1bGtkZWxfYWxsX2luZGV4ZXMoUGFyYWxsZWxWYWN1dW1TdGF0ZSAqcHZzLCBsb25n IG51bV90YWJsZV90dXBsZXMsCi0JCQkJCQkJCQlpbnQgbnVtX2luZGV4X3NjYW5zKQorCQkJCQkJ CQkJaW50IG51bV9pbmRleF9zY2FucywgUFZXb3JrZXJzVXNhZ2UgKnd1c2FnZSkKIHsKIAlBc3Nl cnQoIUlzUGFyYWxsZWxXb3JrZXIoKSk7CiAKQEAgLTUxNSw3ICs1MTYsNyBAQCBwYXJhbGxlbF92 YWN1dW1fYnVsa2RlbF9hbGxfaW5kZXhlcyhQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIGxvbmcg bnVtX3RhYmxlX3R1cAogCXB2cy0+c2hhcmVkLT5yZWx0dXBsZXMgPSBudW1fdGFibGVfdHVwbGVz OwogCXB2cy0+c2hhcmVkLT5lc3RpbWF0ZWRfY291bnQgPSB0cnVlOwogCi0JcGFyYWxsZWxfdmFj dXVtX3Byb2Nlc3NfYWxsX2luZGV4ZXMocHZzLCBudW1faW5kZXhfc2NhbnMsIHRydWUpOworCXBh cmFsbGVsX3ZhY3V1bV9wcm9jZXNzX2FsbF9pbmRleGVzKHB2cywgbnVtX2luZGV4X3NjYW5zLCB0 cnVlLCB3dXNhZ2UpOwogfQogCiAvKgpAQCAtNTIzLDcgKzUyNCw4IEBAIHBhcmFsbGVsX3ZhY3V1 bV9idWxrZGVsX2FsbF9pbmRleGVzKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgbG9uZyBudW1f dGFibGVfdHVwCiAgKi8KIHZvaWQKIHBhcmFsbGVsX3ZhY3V1bV9jbGVhbnVwX2FsbF9pbmRleGVz KFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgbG9uZyBudW1fdGFibGVfdHVwbGVzLAotCQkJCQkJ CQkJaW50IG51bV9pbmRleF9zY2FucywgYm9vbCBlc3RpbWF0ZWRfY291bnQpCisJCQkJCQkJCQlp bnQgbnVtX2luZGV4X3NjYW5zLCBib29sIGVzdGltYXRlZF9jb3VudCwKKwkJCQkJCQkJCVBWV29y a2Vyc1VzYWdlICp3dXNhZ2UpCiB7CiAJQXNzZXJ0KCFJc1BhcmFsbGVsV29ya2VyKCkpOwogCkBA IC01MzUsNyArNTM3LDcgQEAgcGFyYWxsZWxfdmFjdXVtX2NsZWFudXBfYWxsX2luZGV4ZXMoUGFy YWxsZWxWYWN1dW1TdGF0ZSAqcHZzLCBsb25nIG51bV90YWJsZV90dXAKIAlwdnMtPnNoYXJlZC0+ cmVsdHVwbGVzID0gbnVtX3RhYmxlX3R1cGxlczsKIAlwdnMtPnNoYXJlZC0+ZXN0aW1hdGVkX2Nv dW50ID0gZXN0aW1hdGVkX2NvdW50OwogCi0JcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxsX2lu ZGV4ZXMocHZzLCBudW1faW5kZXhfc2NhbnMsIGZhbHNlKTsKKwlwYXJhbGxlbF92YWN1dW1fcHJv Y2Vzc19hbGxfaW5kZXhlcyhwdnMsIG51bV9pbmRleF9zY2FucywgZmFsc2UsIHd1c2FnZSk7CiB9 CiAKIC8qCkBAIC02MjAsNyArNjIyLDcgQEAgcGFyYWxsZWxfdmFjdXVtX2NvbXB1dGVfd29ya2Vy cyhSZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLCBpbnQgbnJlcXVlc3RlZCwKICAqLwog c3RhdGljIHZvaWQKIHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX2FsbF9pbmRleGVzKFBhcmFsbGVs VmFjdXVtU3RhdGUgKnB2cywgaW50IG51bV9pbmRleF9zY2FucywKLQkJCQkJCQkJCWJvb2wgdmFj dXVtKQorCQkJCQkJCQkJYm9vbCB2YWN1dW0sIFBWV29ya2Vyc1VzYWdlICp3dXNhZ2UpCiB7CiAJ LyoKIAkgKiBQYXJhbGxlbCBhdXRvdmFjdXVtIGNhbiByZXNlcnZlIHBhcmFsbGVsIHdvcmtlcnMu IFVzZSB0cnkvY2F0Y2ggYmxvY2sKQEAgLTYyOSw3ICs2MzEsNyBAQCBwYXJhbGxlbF92YWN1dW1f cHJvY2Vzc19hbGxfaW5kZXhlcyhQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIGludCBudW1faW5k ZXhfc2NhbgogCVBHX1RSWSgpOwogCXsKIAkJcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxsX2lu ZGV4ZXNfaW50ZXJuYWwocHZzLCBudW1faW5kZXhfc2NhbnMsCi0JCQkJCQkJCQkJCQkJIGZhbHNl KTsKKwkJCQkJCQkJCQkJCQkgZmFsc2UsIHd1c2FnZSk7CiAJfQogCVBHX0NBVENIKCk7CiAJewpA QCAtNjQ0LDcgKzY0Niw4IEBAIHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX2FsbF9pbmRleGVzKFBh cmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgaW50IG51bV9pbmRleF9zY2FuCiAKIHN0YXRpYyB2b2lk CiBwYXJhbGxlbF92YWN1dW1fcHJvY2Vzc19hbGxfaW5kZXhlc19pbnRlcm5hbChQYXJhbGxlbFZh Y3V1bVN0YXRlICpwdnMsCi0JCQkJCQkJCQkJCSBpbnQgbnVtX2luZGV4X3NjYW5zLCBib29sIHZh Y3V1bSkKKwkJCQkJCQkJCQkJIGludCBudW1faW5kZXhfc2NhbnMsIGJvb2wgdmFjdXVtLAorCQkJ CQkJCQkJCQkgUFZXb3JrZXJzVXNhZ2UgKnd1c2FnZSkKIHsKIAlpbnQJCQlud29ya2VyczsKIAlQ VkluZFZhY1N0YXR1cyBuZXdfc3RhdHVzOwpAQCAtNzY4LDYgKzc3MSwxMyBAQCBwYXJhbGxlbF92 YWN1dW1fcHJvY2Vzc19hbGxfaW5kZXhlc19pbnRlcm5hbChQYXJhbGxlbFZhY3V1bVN0YXRlICpw dnMsCiAJCQkJCQkJCQkgImxhdW5jaGVkICVkIHBhcmFsbGVsIHZhY3V1bSB3b3JrZXJzIGZvciBp bmRleCBjbGVhbnVwIChwbGFubmVkOiAlZCkiLAogCQkJCQkJCQkJIHB2cy0+cGN4dC0+bndvcmtl cnNfbGF1bmNoZWQpLAogCQkJCQkJCXB2cy0+cGN4dC0+bndvcmtlcnNfbGF1bmNoZWQsIG53b3Jr ZXJzKSkpOworCisJCS8qIFJlbWVtYmVyIHRoZXNlIHZhbHVlcywgaWYgd2UgYXNrZWQgdG8uICov CisJCWlmICh3dXNhZ2UgIT0gTlVMTCkKKwkJeworCQkJd3VzYWdlLT5ubGF1bmNoZWQgKz0gcHZz LT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZDsKKwkJCXd1c2FnZS0+bnBsYW5uZWQgKz0gbndvcmtl cnM7CisJCX0KIAl9CiAKIAkvKiBWYWN1dW0gdGhlIGluZGV4ZXMgdGhhdCBjYW4gYmUgcHJvY2Vz c2VkIGJ5IG9ubHkgbGVhZGVyIHByb2Nlc3MgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmgKaW5kZXggMTRl ZWNjYmQ3MTguLjA4MjlhOTY1OGYyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy92 YWN1dW0uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaApAQCAtMjk1LDYgKzI5 NSwxNiBAQCB0eXBlZGVmIHN0cnVjdCBWYWNEZWFkSXRlbXNJbmZvCiAJaW50NjQJCW51bV9pdGVt czsJCS8qIGN1cnJlbnQgIyBvZiBlbnRyaWVzICovCiB9IFZhY0RlYWRJdGVtc0luZm87CiAKKy8q CisgKiBQVldvcmtlcnNVc2FnZSBzdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgdG90YWwgbnVtYmVy IG9mIGxhdW5jaGVkIGFuZCBwbGFubmVkCisgKiB3b3JrZXJzIGR1cmluZyBwYXJhbGxlbCB2YWN1 dW0uCisgKi8KK3R5cGVkZWYgc3RydWN0IFBWV29ya2Vyc1VzYWdlCit7CisJaW50CQkJbmxhdW5j aGVkOworCWludAkJCW5wbGFubmVkOworfSBQVldvcmtlcnNVc2FnZTsKKwogLyogR1VDIHBhcmFt ZXRlcnMgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgZGVmYXVsdF9zdGF0aXN0aWNzX3Rhcmdl dDsJLyogUEdETExJTVBPUlQgZm9yIFBvc3RHSVMgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQg dmFjdXVtX2ZyZWV6ZV9taW5fYWdlOwpAQCAtMzg5LDExICszOTksMTMgQEAgZXh0ZXJuIFRpZFN0 b3JlICpwYXJhbGxlbF92YWN1dW1fZ2V0X2RlYWRfaXRlbXMoUGFyYWxsZWxWYWN1dW1TdGF0ZSAq cHZzLAogZXh0ZXJuIHZvaWQgcGFyYWxsZWxfdmFjdXVtX3Jlc2V0X2RlYWRfaXRlbXMoUGFyYWxs ZWxWYWN1dW1TdGF0ZSAqcHZzKTsKIGV4dGVybiB2b2lkIHBhcmFsbGVsX3ZhY3V1bV9idWxrZGVs X2FsbF9pbmRleGVzKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywKIAkJCQkJCQkJCQkJCWxvbmcg bnVtX3RhYmxlX3R1cGxlcywKLQkJCQkJCQkJCQkJCWludCBudW1faW5kZXhfc2NhbnMpOworCQkJ CQkJCQkJCQkJaW50IG51bV9pbmRleF9zY2FucywKKwkJCQkJCQkJCQkJCVBWV29ya2Vyc1VzYWdl ICp3dXNhZ2UpOwogZXh0ZXJuIHZvaWQgcGFyYWxsZWxfdmFjdXVtX2NsZWFudXBfYWxsX2luZGV4 ZXMoUGFyYWxsZWxWYWN1dW1TdGF0ZSAqcHZzLAogCQkJCQkJCQkJCQkJbG9uZyBudW1fdGFibGVf dHVwbGVzLAogCQkJCQkJCQkJCQkJaW50IG51bV9pbmRleF9zY2FucywKLQkJCQkJCQkJCQkJCWJv b2wgZXN0aW1hdGVkX2NvdW50KTsKKwkJCQkJCQkJCQkJCWJvb2wgZXN0aW1hdGVkX2NvdW50LAor CQkJCQkJCQkJCQkJUFZXb3JrZXJzVXNhZ2UgKnd1c2FnZSk7CiBleHRlcm4gdm9pZCBwYXJhbGxl bF92YWN1dW1fbWFpbihkc21fc2VnbWVudCAqc2VnLCBzaG1fdG9jICp0b2MpOwogCiAvKiBpbiBj b21tYW5kcy9hbmFseXplLmMgKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggYTEzZTgx NjI4OTAuLjZmOWM0MTg2ODljIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjM2Niw2 ICsyMzY2LDcgQEAgUHVsbEZpbHRlck9wcwogUHVzaEZpbHRlcgogUHVzaEZpbHRlck9wcwogUHVz aEZ1bmN0aW9uCitQVldvcmtlcnNVc2FnZQogUHlDRnVuY3Rpb24KIFB5TWV0aG9kRGVmCiBQeU1v ZHVsZURlZgotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK --000000000000c84f89063edb7ada--