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 1w8EGT-000KTK-33 for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 09:23:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8EGS-004jAQ-2P for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 09:23:01 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w8EGS-004jAI-0J for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 09:23:00 +0000 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w8EGP-000000009qp-20n9 for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 09:22:59 +0000 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-358e3cc5e7eso313206a91.0 for ; Thu, 02 Apr 2026 02:22:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775121777; cv=none; d=google.com; s=arc-20240605; b=kJ4z+qUN9RsLe6bUxl1uhmuB9X7K4XPHymjgsXJ/nxk9VZRuVONpT/ISEGdLQhqe2N 9fEFo/wxnkx1mD2wSZiQpJS3eyNHiE2DERhMM3yrtzqk4QqXTK2QjAEPmvpW5qj+jMmZ tgkaPOan+qN5jLf5Jb9IRrObZGgsboEc7jk2g2RWGMUecwU0avdbH4t1zOxIF+U0qVsh TyneQD66dxi9x3tMbFhhvfIThRN6ncCS8lp/GuIbOLvxHujj1CxBRI1nWzeRM7fGUc7+ lDb2UpisWUDHAphYFD2JbLz1w04bN+hUY+IuthWF4YCkMQWO8sEkA+zV2PRNhUGd4aXz DchA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=VymJaaF2VqQfPPn9b+hZXjYtSy/supLkeRKXJCrJym0=; fh=CLXHl6CQH9uUCsUPG9B7d1XWav8Zorxo1aUKLUAfd08=; b=QtEotD6Dunshp2oc0WNrVOHIaLqcTBGqLJkvIL1Mep10ndESTWZ2bWPEh5HjVAtd6j LYN64f/yZqmvkzEywUQHUkoaJBjBpD9LCJtnsYAsN77D7IS2Hc73HiirTkI5Lc6Ik99q 52qhzruRV/sKueN0MTsYcAGNMDd31XuyVPg8gusNQbk1DSun3Uge/VeppUu3EoFkB7Hl /gImPPC3NE8NWG2RNmeXyE9e2BsgY9oCLfnYoOzplWkT56kVx9YpviMBMIAVvQEOi8ey FI7K2L1zaHnBW7SqUoPVao8bEjNit4YV+AI7vd+aAHNzajyATLWawP0pkbtQ9YvJft0K r3Ig==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775121777; x=1775726577; 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=VymJaaF2VqQfPPn9b+hZXjYtSy/supLkeRKXJCrJym0=; b=T6CFz4eX5OReQDEElRCH++6wyhnAWmtEpgaIL340RIi6vcOrckOs17xpIW3YA/R9Fd LJIoDREM+LlDkr6TfM0vmE6KZD/eiKtKX0LaEo29ABin93OyXY99dk+Dg36LZstWM3Bl uj4d1QCGFbtlk+rYUWAVLtETkjCR2xlIIw0/u3RIYh1HI30Qfd1uKDuNIwm9MffoCS2P m8Zn0hDSWpd3IpWZ+4weRu8juJAjQ+5ewahqgZfOuuol9PZVbRkrGU7P1HdondJqDi7z x77fwqIxR9qJ/M2Ydok8KtlSmXzJPH6HDwsK232+dG3A6h/JkTum1FBw5PHnLRV3gK+R 7SJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775121777; x=1775726577; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=VymJaaF2VqQfPPn9b+hZXjYtSy/supLkeRKXJCrJym0=; b=EbZ2CS4C1bJU6RRDi1eEqZ8IdF0NGf6bPZx/WuQOfsUUlwI+99yupExGo/X5X8xfgY v6PSAZ2ULz70HWb2E8fUgNWyR3p2InBk3rmVPgOo2B9l+Mvsn1F857fhZWU2aHjGvkED ugF9XNVfNRujI+R3SIlKOVIXlwEE1ZtEHhyO+7UoKBXx7eq08N0o/GnKAjjkPFJVzkEj TdPwg6WGcRxM6HQygvNH2W9E6r3bQKhVerriEBZ3gjw+wTbxHzEdSirUGZBDuRGFn928 UNRV/9DW+KHyHib43i4SlA6QeC+QQJ2GQ9AyXPtOjCxci2qsWE2F4bTUvIHnBQVHeivX eF7g== X-Forwarded-Encrypted: i=1; AJvYcCUsjKo2XACYoQ8vCSEa64rPff3z75mmLcrO94LeOGZJEXgRSwS7rlYm0WisbXhjDLsN7VZ1Bj+3WcTP+02E@lists.postgresql.org X-Gm-Message-State: AOJu0Yw3yunpUX9ijX9tJxGSeVlAin/Ip/7we4ZOlXu+MmEEg2z/AKpb RBCknrKdXN5ktfBiBYyoERfPm9DLlJVjRjurMnGYuPDSe7BHDnV8O3qn5qP0UfdGSfvgeJ/eaXQ ZVzsFbYwNIbVzCb6mAmLjOn9a9A6h9FI= X-Gm-Gg: AeBDieuNxQOVLy7bYGbiWNoKZ0yFV+A/1FQNvb2qoqcoFGxw4ITfWbXcKwwawWZAGVL Pb1nOa+fMqbT9Jqfz8znNfjJ0bEqfsyil63JGeLlCOqO6pWWP/nnPyLWYyn+WpByzGDY9+dcJqv p4+NtrOn77vBqosgwZziNkTUurfE91JnEGHJG3oc22/Ecyd1pacLu7n+pWZ09vs3vwgqy2nmckL q6LyqHTjn1dh/Y93ZQhAt4iA2DKdZ4I3ZANmOWOENfequblXQ4/ZUt4T4r6s7cfwFT+FGYc3kFD Zzw1ylP/ X-Received: by 2002:a17:90b:1fc4:b0:35a:189b:43db with SMTP id 98e67ed59e1d1-35dc6ea78fbmr6846168a91.4.1775121776609; Thu, 02 Apr 2026 02:22:56 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Masahiko Sawada Date: Thu, 2 Apr 2026 02:22:17 -0700 X-Gm-Features: AQROBzCcreHF5RVvJscfcmi6lYvc5Ut4WP71LvridQQ0agwY-xoVnFZeOhF8_w0 Message-ID: Subject: Re: POC: Parallel processing of indexes in autovacuum To: Daniil Davydov <3danissimo@gmail.com> Cc: SATYANARAYANA NARLAPURAM , Bharath Rupireddy , Sami Imseih , Alexander Korotkov , Matheus Alcantara , Maxim Orlov , Postgres hackers Content-Type: multipart/mixed; boundary="000000000000eda3d5064e76be1b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000eda3d5064e76be1b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 1, 2026 at 2:43=E2=80=AFPM Daniil Davydov <3danissimo@gmail.com= > wrote: > > Hi, > > On Thu, Apr 2, 2026 at 1:55=E2=80=AFAM Masahiko Sawada wrote: > > > > Overall, the results show no noticeable overhead from the polling appro= ach. > > Great news! Thank you for these measurements! > > BTW, I caught myself thinking that Tom Lane and maybe some other people m= ight > not like our parameter propagation logic. We are not building any new > capability, but supplying an utilitarian solution for a single feature. > Perhaps someone will not consider this a good way to develop new features= . Agreed, this is the one of the reasons why I summarized and conducted the performance evaluation. I've also experimented with the idea of using proc signal to propagate the vacuum delay parameters update. The attached patch can be aplied on top of v36 patch. While it requires adding a new function to parallel.c and requires a bit more codes, it uses the exisiting infrastructure for the propagation. Given that this propagation logic works only when parallel vacuum workers are running, testing the propagation logic in TAP tests using injection points becomes complicated, so I removed. What do you think about this idea? Regards, -- Masahiko Sawada Amazon Web Services: https://aws.amazon.com --000000000000eda3d5064e76be1b Content-Type: text/x-patch; charset="US-ASCII"; name="0001-POC-use-proc-signals-to-propagate-the-shared-vacuum-.patch" Content-Disposition: attachment; filename="0001-POC-use-proc-signals-to-propagate-the-shared-vacuum-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnh9mv3i0 RnJvbSBmOTBhNDNlMGE2Mjk3NTExMTQ0ZjJiMzFiMzIyZTUwOGJjZGMzMzY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNv bT4KRGF0ZTogVGh1LCAyIEFwciAyMDI2IDAyOjA3OjIzIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0g UE9DOiB1c2UgcHJvYyBzaWduYWxzIHRvIHByb3BhZ2F0ZSB0aGUgc2hhcmVkIHZhY3V1bSBkZWxh eQogcGFyYW1ldGVycy4KCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5j ICAgICAgICAgIHwgIDEyIC0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5j ICAgICAgICAgfCAgMjAgKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyAgICAgICAg ICAgICAgICAgfCAgMzggKysrLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVs LmMgICAgICAgICB8IDE0NiArKysrKysrKy0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3Byb2NzaWduYWwuYyAgICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcGFy YWxsZWwuaCAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFj dXVtLmggICAgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3Np Z25hbC5oICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dG92 YWN1dW0vTWFrZWZpbGUgICAgIHwgICA0IC0KIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9hdXRvdmFj dXVtL21lc29uLmJ1aWxkICB8ICAgMyAtCiAuLi4vdC8wMDFfcGFyYWxsZWxfYXV0b3ZhY3V1bS5w bCAgICAgICAgICAgICAgfCAgNzggLS0tLS0tLS0tLQogMTEgZmlsZXMgY2hhbmdlZCwgMTIyIGlu c2VydGlvbnMoKyksIDE5NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1s YXp5LmMKaW5kZXggMzkzOTVhZWQwZDUuLjg4YzcxY2Q4NWI2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvdmFjdXVtbGF6eS5jCkBAIC0xNTIsNyArMTUyLDYgQEAKICNpbmNsdWRlICJzdG9yYWdlL2xh dGNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWFk X3N0cmVhbS5oIgotI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogI2luY2x1ZGUg InV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3BnX3J1c2FnZS5oIgogI2luY2x1 ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgpAQCAtODYzLDE3ICs4NjIsNiBAQCBoZWFwX3ZhY3V1bV9y ZWwoUmVsYXRpb24gcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgKnBhcmFtcywKIAlsYXp5X2NoZWNr X3dyYXBhcm91bmRfZmFpbHNhZmUodmFjcmVsKTsKIAlkZWFkX2l0ZW1zX2FsbG9jKHZhY3JlbCwg cGFyYW1zLT5ud29ya2Vycyk7CiAKLSNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUwotCi0JLyoK LQkgKiBVc2VkIGJ5IHRlc3RzIHRvIHBhdXNlIGJlZm9yZSBwYXJhbGxlbCB2YWN1dW0gaXMgbGF1 bmNoZWQsIGFsbG93aW5nCi0JICogdGVzdCBjb2RlIHRvIG1vZGlmeSBjb25maWd1cmF0aW9uIHRo YXQgdGhlIGxlYWRlciB0aGVuIHByb3BhZ2F0ZXMgdG8KLQkgKiB3b3JrZXJzLgotCSAqLwotCWlm IChBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkgJiYgUGFyYWxsZWxWYWN1dW1Jc0FjdGl2ZSh2 YWNyZWwpKQotCQlJTkpFQ1RJT05fUE9JTlQoImF1dG92YWN1dW0tc3RhcnQtcGFyYWxsZWwtdmFj dXVtIiwgTlVMTCk7Ci0jZW5kaWYKLQogCS8qCiAJICogQ2FsbCBsYXp5X3NjYW5faGVhcCB0byBw ZXJmb3JtIGFsbCByZXF1aXJlZCBoZWFwIHBydW5pbmcsIGluZGV4CiAJICogdmFjdXVtaW5nLCBh bmQgaGVhcCB2YWN1dW1pbmcgKHBsdXMgcmVsYXRlZCBwcm9jZXNzaW5nKQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3BhcmFsbGVsLmMKaW5kZXggYWIxZGZiMzBlNzMuLmE4YmEwOTgzMmZjIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMKQEAgLTEwMzUsNiArMTAzNSwyNiBAQCBQ YXJhbGxlbENvbnRleHRBY3RpdmUodm9pZCkKIAlyZXR1cm4gIWRsaXN0X2lzX2VtcHR5KCZwY3h0 X2xpc3QpOwogfQogCisvKgorICogU2VuZCBhIHNpZ25hbCB0byBhbGwgd29ya2Vycy4KKyAqLwor dm9pZAorU2VuZFByb2NTaWduYWxUb1BhcmFsbGVsV29ya2VycyhQYXJhbGxlbENvbnRleHQgKnBj eHQsIFByb2NTaWduYWxSZWFzb24gcmVhc29uKQoreworCWZvciAoaW50IGkgPSAwOyBpIDwgcGN4 dC0+bndvcmtlcnNfbGF1bmNoZWQ7IGkrKykKKwl7CisJCXBpZF90CQlwaWQ7CisKKwkJaWYgKHBj eHQtPndvcmtlcltpXS5lcnJvcl9tcWggPT0gTlVMTCB8fAorCQkJcGN4dC0+d29ya2VyW2ldLmJn d2hhbmRsZSA9PSBOVUxMIHx8CisJCQlHZXRCYWNrZ3JvdW5kV29ya2VyUGlkKHBjeHQtPndvcmtl cltpXS5iZ3doYW5kbGUsCisJCQkJCQkJCSAgICZwaWQpICE9IEJHV0hfU1RBUlRFRCkKKwkJCWNv bnRpbnVlOworCisJCSh2b2lkKSBTZW5kUHJvY1NpZ25hbChwaWQsIHJlYXNvbiwgUGFyYWxsZWxM ZWFkZXJQcm9jTnVtYmVyKTsKKwl9Cit9CisKIC8qCiAgKiBIYW5kbGUgcmVjZWlwdCBvZiBhbiBp bnRlcnJ1cHQgaW5kaWNhdGluZyBhIHBhcmFsbGVsIHdvcmtlciBtZXNzYWdlLgogICoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdmFjdXVtLmMKaW5kZXggNjJkMDNjOGUxOTAuLjJiZjUzZGViYzRlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92 YWN1dW0uYwpAQCAtNjIxLDYgKzYyMSw5IEBAIHZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIGNvbnN0 IFZhY3V1bVBhcmFtcyAqcGFyYW1zLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlCiAJCVZh Y3V1bVNoYXJlZENvc3RCYWxhbmNlID0gTlVMTDsKIAkJVmFjdXVtQWN0aXZlTldvcmtlcnMgPSBO VUxMOwogCisJCVBhcmFsbGVsVmFjdXVtU2hhcmVkQ29zdFBhcmFtcyA9IE5VTEw7CisJCUN1cnJl bnRQYXJhbGxlbFZhY3V1bVN0YXRlID0gTlVMTDsKKwogCQkvKgogCQkgKiBMb29wIHRvIHByb2Nl c3MgZWFjaCBzZWxlY3RlZCByZWxhdGlvbi4KIAkJICovCkBAIC0yNDM1LDE5ICsyNDM4LDggQEAg dmFjdXVtX2RlbGF5X3BvaW50KGJvb2wgaXNfYW5hbHl6ZSkKIAkvKiBBbHdheXMgY2hlY2sgZm9y IGludGVycnVwdHMgKi8KIAlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JaWYgKEludGVycnVw dFBlbmRpbmcpCi0JCXJldHVybjsKLQotCWlmIChJc1BhcmFsbGVsV29ya2VyKCkpCi0JewotCQkv KgotCQkgKiBVcGRhdGUgY29zdC1iYXNlZCB2YWN1dW0gZGVsYXkgcGFyYW1ldGVycyBmb3IgYSBw YXJhbGxlbCBhdXRvdmFjdXVtCi0JCSAqIHdvcmtlciBpZiBhbnkgY2hhbmdlcyBhcmUgZGV0ZWN0 ZWQuCi0JCSAqLwotCQlwYXJhbGxlbF92YWN1dW1fdXBkYXRlX3NoYXJlZF9kZWxheV9wYXJhbXMo KTsKLQl9Ci0KLQlpZiAoIVZhY3V1bUNvc3RBY3RpdmUgJiYgIUNvbmZpZ1JlbG9hZFBlbmRpbmcp CisJaWYgKEludGVycnVwdFBlbmRpbmcgfHwKKwkJKCFWYWN1dW1Db3N0QWN0aXZlICYmICFDb25m aWdSZWxvYWRQZW5kaW5nICYmICFQYXJhbGxlbFZhY3V1bVBhcmFtc1VwZGF0ZVBlbmRpbmcpKQog CQlyZXR1cm47CiAKIAkvKgpAQCAtMjQ2OSw2ICsyNDYxLDI2IEBAIHZhY3V1bV9kZWxheV9wb2lu dChib29sIGlzX2FuYWx5emUpCiAJCXBhcmFsbGVsX3ZhY3V1bV9wcm9wYWdhdGVfc2hhcmVkX2Rl bGF5X3BhcmFtcygpOwogCX0KIAorCS8qCisJICogVXBkYXRlIGNvc3QtYmFzZWQgdmFjdXVtIGRl bGF5IHBhcmFtZXRlcnMgZm9yIGEgcGFyYWxsZWwgYXV0b3ZhY3V1bQorCSAqIHdvcmtlciBpZiBy ZXF1ZXN0ZWQgZnJvbSB0aGUgYXV0b3ZhY3V1bSB3b3JrZXIgKHRoZSBsZWFkZXIgcHJvY2Vzcyku CisJICovCisJaWYgKFBhcmFsbGVsVmFjdXVtUGFyYW1zVXBkYXRlUGVuZGluZyAmJiBQYXJhbGxl bFZhY3V1bVNoYXJlZENvc3RQYXJhbXMgIT0gTlVMTCkKKwl7CisJCUFzc2VydChJc1BhcmFsbGVs V29ya2VyKCkpOworCisJCVBhcmFsbGVsVmFjdXVtUGFyYW1zVXBkYXRlUGVuZGluZyA9IGZhbHNl OworCQlwYXJhbGxlbF92YWN1dW1fdXBkYXRlX3NoYXJlZF9kZWxheV9wYXJhbXMoKTsKKworCQll bG9nKERFQlVHMiwKKwkJCSAicGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXIgdXBkYXRlZCBjb3N0 IHBhcmFtczogY29zdF9saW1pdD0lZCwgY29zdF9kZWxheT0lZywgY29zdF9wYWdlX21pc3M9JWQs IGNvc3RfcGFnZV9kaXJ0eT0lZCwgY29zdF9wYWdlX2hpdD0lZCIsCisJCQkgdmFjdXVtX2Nvc3Rf bGltaXQsCisJCQkgdmFjdXVtX2Nvc3RfZGVsYXksCisJCQkgVmFjdXVtQ29zdFBhZ2VNaXNzLAor CQkJIFZhY3V1bUNvc3RQYWdlRGlydHksCisJCQkgVmFjdXVtQ29zdFBhZ2VIaXQpOworCX0KKwog CS8qCiAJICogSWYgd2UgZGlzYWJsZWQgY29zdC1iYXNlZCBkZWxheXMgYWZ0ZXIgcmVsb2FkaW5n IHRoZSBjb25maWcgZmlsZSwKIAkgKiByZXR1cm4uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy92YWN1dW1wYXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFy YWxsZWwuYwppbmRleCBiYWMzYmQyODIxNC4uYzNkN2FkMjM2NmUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdmFjdXVtcGFyYWxsZWwuYwpAQCAtMjEsOSArMjEsOCBAQAogICogRm9yIHBhcmFsbGVsIGF1 dG92YWN1dW0sIHdlIG5lZWQgdG8gcHJvcGFnYXRlIGNvc3QtYmFzZWQgdmFjdXVtIGRlbGF5CiAg KiBwYXJhbWV0ZXJzIGZyb20gdGhlIGxlYWRlciB0byBpdHMgd29ya2VycywgYXMgdGhlIGxlYWRl cidzIHBhcmFtZXRlcnMgY2FuCiAgKiBjaGFuZ2UgZXZlbiB3aGlsZSBwcm9jZXNzaW5nIGEgdGFi bGUgKGUuZy4sIGR1ZSB0byBhIGNvbmZpZyByZWxvYWQpLgotICogVGhlIFBWU2hhcmVkQ29zdFBh cmFtcyBzdHJ1Y3QgbWFuYWdlcyB0aGVzZSBwYXJhbWV0ZXJzIHVzaW5nIGEKLSAqIGdlbmVyYXRp b24gY291bnRlci4gRWFjaCBwYXJhbGxlbCB3b3JrZXIgcG9sbHMgdGhpcyBzaGFyZWQgc3RhdGUg YW5kCi0gKiByZWZyZXNoZXMgaXRzIGxvY2FsIGRlbGF5IHBhcmFtZXRlcnMgd2hlbmV2ZXIgYSBj aGFuZ2UgaXMgZGV0ZWN0ZWQuCisgKiBBZnRlciB0aGUgYXV0b3ZhY3V1bSBwcm9jZXNzIHVwZGF0 ZXMgYW55IHZhY3V1bSBkZWxheSBwYXJhbWV0ZXJzLCBpdAorICogbm90aWZpZXMgaXRzIHBhcmFs bGVsIHZhY3V1bSB3b3JrZXJzIHRvIHJlZnJlc2ggdGhlaXIgbG9jYWwgcGFyYW1ldGVycy4KICAq CiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50 cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCkBAIC00Niw3ICs0NSw2IEBACiAjaW5j bHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNs dWRlICJ0Y29wL3Rjb3Bwcm90LmgiCi0jaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50Lmgi CiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAK QEAgLTY3LDE3ICs2NSw2IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IFBWU2hhcmVkQ29zdFBhcmFt cwogewotCS8qCi0JICogVGhlIGdlbmVyYXRpb24gY291bnRlciBpcyBpbmNyZW1lbnRlZCBieSB0 aGUgbGVhZGVyIHByb2Nlc3MgZWFjaCB0aW1lCi0JICogaXQgdXBkYXRlcyB0aGUgc2hhcmVkIGNv c3QtYmFzZWQgdmFjdXVtIGRlbGF5IHBhcmFtZXRlcnMuIFBhcmFsbGVsCi0JICogdmFjdXVtIHdv cmtlcnMgY29tcGFyZSBpdCB3aXRoIHRoZWlyIGxvY2FsIGdlbmVyYXRpb24sCi0JICogc2hhcmVk X3BhcmFtc19nZW5lcmF0aW9uX2xvY2FsLCB0byBkZXRlY3Qgd2hldGhlciB0aGV5IG5lZWQgdG8g cmVmcmVzaAotCSAqIHRoZWlyIGxvY2FsIHBhcmFtZXRlcnMuIFRoZSBnZW5lcmF0aW9uIHN0YXJ0 cyBmcm9tIDEgc28gdGhhdCBhIGZyZXNobHkKLQkgKiBzdGFydGVkIHdvcmtlciAod2hvc2UgbG9j YWwgY29weSBpcyAwKSB3aWxsIGFsd2F5cyBsb2FkIHRoZSBpbml0aWFsCi0JICogcGFyYW1ldGVy cyBvbiBpdHMgZmlyc3QgY2hlY2suCi0JICovCi0JcGdfYXRvbWljX3VpbnQzMiBnZW5lcmF0aW9u OwotCiAJc2xvY2tfdAkJbXV0ZXg7CQkJLyogcHJvdGVjdHMgYWxsIGZpZWxkcyBiZWxvdyAqLwog CiAJLyogUGFyYW1ldGVycyB0byBzaGFyZSB3aXRoIHBhcmFsbGVsIHdvcmtlcnMgKi8KQEAgLTI3 MSwxNiArMjU4LDIxIEBAIHN0cnVjdCBQYXJhbGxlbFZhY3V1bVN0YXRlCiAJUFZJbmRWYWNTdGF0 dXMgc3RhdHVzOwogfTsKIAotc3RhdGljIFBWU2hhcmVkQ29zdFBhcmFtcyAqcHZfc2hhcmVkX2Nv c3RfcGFyYW1zID0gTlVMTDsKKy8qCisgKiBQYXJhbGxlbFZhY3V1bVNoYXJlZENvc3RQYXJhbXMg YW5kIEN1cnJlbnRQYXJhbGxlbFZhY3V1bVN0YXRlIGFyZQorICogdXNlZCBvbmx5IGZvciBhbiBh dXRvdmFjdXVtIHdvcmtlciB0byBwcm9wYWdhdGUgdGhlIHNoYXJlZCB2YWN1dW0KKyAqIGRlbGF5 IHBhcmFtZXRlcnMgdG8gaXRzIHBhcmFsbGVsIHZhY3V1bSB3b3JrZXJzLgorICoKKyAqIEN1cnJl bnRQYXJhbGxlbFZhY3V1bVN0YXRlIGlzIHNldCBvbmx5IGluIHRoZSBsZWFkZXIgcHJvY2VzcyAo aS5lLiwKKyAqIGF1dG92YWN1dW0gd29ya2VyIHByb2Nlc3NlcykuCisgKi8KK1BWU2hhcmVkQ29z dFBhcmFtcyAqUGFyYWxsZWxWYWN1dW1TaGFyZWRDb3N0UGFyYW1zID0gTlVMTDsKK1BhcmFsbGVs VmFjdXVtU3RhdGUgKkN1cnJlbnRQYXJhbGxlbFZhY3V1bVN0YXRlID0gTlVMTDsKIAogLyoKLSAq IFdvcmtlci1sb2NhbCBjb3B5IG9mIHRoZSBsYXN0IGNvc3QtcGFyYW1ldGVyIGdlbmVyYXRpb24g dGhpcyB3b3JrZXIgaGFzCi0gKiBhcHBsaWVkLiAgSW5pdGlhbGl6ZWQgdG8gMDsgc2luY2UgdGhl IGxlYWRlciBpbml0aWFsaXplcyB0aGUgc2hhcmVkCi0gKiBnZW5lcmF0aW9uIGNvdW50ZXIgdG8g MSwgdGhlIGZpcnN0IGNhbGwgdG8KLSAqIHBhcmFsbGVsX3ZhY3V1bV91cGRhdGVfc2hhcmVkX2Rl bGF5X3BhcmFtcygpIHdpbGwgYWx3YXlzIGRldGVjdCBhCi0gKiBtaXNtYXRjaCBhbmQgcmVhZCB0 aGUgaW5pdGlhbCBwYXJhbWV0ZXJzIGZyb20gc2hhcmVkIG1lbW9yeS4KKyAqIElzIHRoZXJlIGFu IHVwZGF0ZSBvbiB0aGUgc2hhcmVkIHZhY3V1bSBkZWxheSBwYXJhbWV0ZXJzPwogICovCi1zdGF0 aWMgdWludDMyIHNoYXJlZF9wYXJhbXNfZ2VuZXJhdGlvbl9sb2NhbCA9IDA7Cit2b2xhdGlsZSBz aWdfYXRvbWljX3QgUGFyYWxsZWxWYWN1dW1QYXJhbXNVcGRhdGVQZW5kaW5nID0gZmFsc2U7CiAK IHN0YXRpYyBpbnQJcGFyYWxsZWxfdmFjdXVtX2NvbXB1dGVfd29ya2VycyhSZWxhdGlvbiAqaW5k cmVscywgaW50IG5pbmRleGVzLCBpbnQgbnJlcXVlc3RlZCwKIAkJCQkJCQkJCQkJYm9vbCAqd2ls bF9wYXJhbGxlbF92YWN1dW0pOwpAQCAtNDYzLDEwICs0NTUsMTAgQEAgcGFyYWxsZWxfdmFjdXVt X2luaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLAogCWlm IChzaGFyZWQtPmlzX2F1dG92YWN1dW0pCiAJewogCQlwYXJhbGxlbF92YWN1dW1fc2V0X2Nvc3Rf cGFyYW1ldGVycygmc2hhcmVkLT5jb3N0X3BhcmFtcyk7Ci0JCXBnX2F0b21pY19pbml0X3UzMigm c2hhcmVkLT5jb3N0X3BhcmFtcy5nZW5lcmF0aW9uLCAxKTsKIAkJU3BpbkxvY2tJbml0KCZzaGFy ZWQtPmNvc3RfcGFyYW1zLm11dGV4KTsKIAotCQlwdl9zaGFyZWRfY29zdF9wYXJhbXMgPSAmKHNo YXJlZC0+Y29zdF9wYXJhbXMpOworCQlQYXJhbGxlbFZhY3V1bVNoYXJlZENvc3RQYXJhbXMgPSAm KHNoYXJlZC0+Y29zdF9wYXJhbXMpOworCQlDdXJyZW50UGFyYWxsZWxWYWN1dW1TdGF0ZSA9IHB2 czsKIAl9CiAKIAlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX1ZBQ1VVTV9LRVlf U0hBUkVELCBzaGFyZWQpOwpAQCAtNTM1LDcgKzUyNywxMCBAQCBwYXJhbGxlbF92YWN1dW1fZW5k KFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqaXN0YXRz KQogCUV4aXRQYXJhbGxlbE1vZGUoKTsKIAogCWlmIChBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNz KCkpCi0JCXB2X3NoYXJlZF9jb3N0X3BhcmFtcyA9IE5VTEw7CisJeworCQlQYXJhbGxlbFZhY3V1 bVNoYXJlZENvc3RQYXJhbXMgPSBOVUxMOworCQlDdXJyZW50UGFyYWxsZWxWYWN1dW1TdGF0ZSA9 IE5VTEw7CisJfQogCiAJcGZyZWUocHZzLT53aWxsX3BhcmFsbGVsX3ZhY3V1bSk7CiAJcGZyZWUo cHZzKTsKQEAgLTYyNyw2ICs2MjIsMjMgQEAgcGFyYWxsZWxfdmFjdXVtX3NldF9jb3N0X3BhcmFt ZXRlcnMoUFZTaGFyZWRDb3N0UGFyYW1zICpwYXJhbXMpCiAJcGFyYW1zLT5jb3N0X3BhZ2VfbWlz cyA9IFZhY3V1bUNvc3RQYWdlTWlzczsKIH0KIAorLyoKKyAqIEhhbmRsZSByZWNlaXB0IG9mIGFu IGludGVycnVwdCBpbmRpY2F0aW5nIGFuIHVwZGF0ZSBvZiB0aGUgc2hhcmVkIHZhY3V1bQorICog ZGVsYXkgcGFyYW1ldGVycy4KKyAqLwordm9pZAorSGFuZGxlUGFyYWxsZWxWYWN1dW1QYXJhbXNV cGRhdGUodm9pZCkKK3sKKwlpZiAoUGFyYWxsZWxWYWN1dW1TaGFyZWRDb3N0UGFyYW1zID09IE5V TEwpCisJCXJldHVybjsKKworCS8qCisJICogVXBkYXRlIHRoZSBzaGFyZWQgZGVsYXkgcGFyYW1l dGVycyBhdCB0aGUgbmV4dCB2YWN1dW1fZGVsYXlfcG9pbnQoKQorCSAqIHRpbWUuCisJICovCisJ UGFyYWxsZWxWYWN1dW1QYXJhbXNVcGRhdGVQZW5kaW5nID0gdHJ1ZTsKK30KKwogLyoKICAqIFVw ZGF0ZXMgdGhlIGNvc3QtYmFzZWQgdmFjdXVtIGRlbGF5IHBhcmFtZXRlcnMgZm9yIHBhcmFsbGVs IGF1dG92YWN1dW0KICAqIHdvcmtlcnMuCkBAIC02MzYsNDAgKzY0OCwxOCBAQCBwYXJhbGxlbF92 YWN1dW1fc2V0X2Nvc3RfcGFyYW1ldGVycyhQVlNoYXJlZENvc3RQYXJhbXMgKnBhcmFtcykKIHZv aWQKIHBhcmFsbGVsX3ZhY3V1bV91cGRhdGVfc2hhcmVkX2RlbGF5X3BhcmFtcyh2b2lkKQogewot CXVpbnQzMgkJcGFyYW1zX2dlbmVyYXRpb247Ci0KIAlBc3NlcnQoSXNQYXJhbGxlbFdvcmtlcigp KTsKKwlBc3NlcnQoUGFyYWxsZWxWYWN1dW1TaGFyZWRDb3N0UGFyYW1zKTsKIAotCS8qIFF1aWNr IHJldHVybiBpZiB0aGUgd29ya2VyIGlzIG5vdCBydW5uaW5nIGZvciB0aGUgYXV0b3ZhY3V1bSAq LwotCWlmIChwdl9zaGFyZWRfY29zdF9wYXJhbXMgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JcGFy YW1zX2dlbmVyYXRpb24gPSBwZ19hdG9taWNfcmVhZF91MzIoJnB2X3NoYXJlZF9jb3N0X3BhcmFt cy0+Z2VuZXJhdGlvbik7Ci0JQXNzZXJ0KHNoYXJlZF9wYXJhbXNfZ2VuZXJhdGlvbl9sb2NhbCA8 PSBwYXJhbXNfZ2VuZXJhdGlvbik7Ci0KLQkvKiBSZXR1cm4gaWYgcGFyYW1ldGVycyBoYWQgbm90 IGNoYW5nZWQgaW4gdGhlIGxlYWRlciAqLwotCWlmIChwYXJhbXNfZ2VuZXJhdGlvbiA9PSBzaGFy ZWRfcGFyYW1zX2dlbmVyYXRpb25fbG9jYWwpCi0JCXJldHVybjsKLQotCVNwaW5Mb2NrQWNxdWly ZSgmcHZfc2hhcmVkX2Nvc3RfcGFyYW1zLT5tdXRleCk7Ci0JVmFjdXVtQ29zdERlbGF5ID0gcHZf c2hhcmVkX2Nvc3RfcGFyYW1zLT5jb3N0X2RlbGF5OwotCVZhY3V1bUNvc3RMaW1pdCA9IHB2X3No YXJlZF9jb3N0X3BhcmFtcy0+Y29zdF9saW1pdDsKLQlWYWN1dW1Db3N0UGFnZURpcnR5ID0gcHZf c2hhcmVkX2Nvc3RfcGFyYW1zLT5jb3N0X3BhZ2VfZGlydHk7Ci0JVmFjdXVtQ29zdFBhZ2VIaXQg PSBwdl9zaGFyZWRfY29zdF9wYXJhbXMtPmNvc3RfcGFnZV9oaXQ7Ci0JVmFjdXVtQ29zdFBhZ2VN aXNzID0gcHZfc2hhcmVkX2Nvc3RfcGFyYW1zLT5jb3N0X3BhZ2VfbWlzczsKLQlTcGluTG9ja1Jl bGVhc2UoJnB2X3NoYXJlZF9jb3N0X3BhcmFtcy0+bXV0ZXgpOworCVNwaW5Mb2NrQWNxdWlyZSgm UGFyYWxsZWxWYWN1dW1TaGFyZWRDb3N0UGFyYW1zLT5tdXRleCk7CisJVmFjdXVtQ29zdERlbGF5 ID0gUGFyYWxsZWxWYWN1dW1TaGFyZWRDb3N0UGFyYW1zLT5jb3N0X2RlbGF5OworCVZhY3V1bUNv c3RMaW1pdCA9IFBhcmFsbGVsVmFjdXVtU2hhcmVkQ29zdFBhcmFtcy0+Y29zdF9saW1pdDsKKwlW YWN1dW1Db3N0UGFnZURpcnR5ID0gUGFyYWxsZWxWYWN1dW1TaGFyZWRDb3N0UGFyYW1zLT5jb3N0 X3BhZ2VfZGlydHk7CisJVmFjdXVtQ29zdFBhZ2VIaXQgPSBQYXJhbGxlbFZhY3V1bVNoYXJlZENv c3RQYXJhbXMtPmNvc3RfcGFnZV9oaXQ7CisJVmFjdXVtQ29zdFBhZ2VNaXNzID0gUGFyYWxsZWxW YWN1dW1TaGFyZWRDb3N0UGFyYW1zLT5jb3N0X3BhZ2VfbWlzczsKKwlTcGluTG9ja1JlbGVhc2Uo JlBhcmFsbGVsVmFjdXVtU2hhcmVkQ29zdFBhcmFtcy0+bXV0ZXgpOwogCiAJVmFjdXVtVXBkYXRl Q29zdHMoKTsKLQotCXNoYXJlZF9wYXJhbXNfZ2VuZXJhdGlvbl9sb2NhbCA9IHBhcmFtc19nZW5l cmF0aW9uOwotCi0JZWxvZyhERUJVRzIsCi0JCSAicGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXIg dXBkYXRlZCBjb3N0IHBhcmFtczogY29zdF9saW1pdD0lZCwgY29zdF9kZWxheT0lZywgY29zdF9w YWdlX21pc3M9JWQsIGNvc3RfcGFnZV9kaXJ0eT0lZCwgY29zdF9wYWdlX2hpdD0lZCIsCi0JCSB2 YWN1dW1fY29zdF9saW1pdCwKLQkJIHZhY3V1bV9jb3N0X2RlbGF5LAotCQkgVmFjdXVtQ29zdFBh Z2VNaXNzLAotCQkgVmFjdXVtQ29zdFBhZ2VEaXJ0eSwKLQkJIFZhY3V1bUNvc3RQYWdlSGl0KTsK IH0KIAogLyoKQEAgLTY4NSwzMCArNjc1LDMwIEBAIHBhcmFsbGVsX3ZhY3V1bV9wcm9wYWdhdGVf c2hhcmVkX2RlbGF5X3BhcmFtcyh2b2lkKQogCS8qCiAJICogUXVpY2sgcmV0dXJuIGlmIHRoZSBs ZWFkZXIgcHJvY2VzcyBpcyBub3Qgc2hhcmluZyB0aGUgZGVsYXkgcGFyYW1ldGVycy4KIAkgKi8K LQlpZiAocHZfc2hhcmVkX2Nvc3RfcGFyYW1zID09IE5VTEwpCisJaWYgKFBhcmFsbGVsVmFjdXVt U2hhcmVkQ29zdFBhcmFtcyA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAkvKgogCSAqIENoZWNrIGlm IGFueSBkZWxheSBwYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZC4gV2UgY2FuIHJlYWQgdGhlbSB3aXRo b3V0CiAJICogbG9ja3MgYXMgb25seSB0aGUgbGVhZGVyIGNhbiBtb2RpZnkgdGhlbS4KIAkgKi8K LQlpZiAodmFjdXVtX2Nvc3RfZGVsYXkgPT0gcHZfc2hhcmVkX2Nvc3RfcGFyYW1zLT5jb3N0X2Rl bGF5ICYmCi0JCXZhY3V1bV9jb3N0X2xpbWl0ID09IHB2X3NoYXJlZF9jb3N0X3BhcmFtcy0+Y29z dF9saW1pdCAmJgotCQlWYWN1dW1Db3N0UGFnZURpcnR5ID09IHB2X3NoYXJlZF9jb3N0X3BhcmFt cy0+Y29zdF9wYWdlX2RpcnR5ICYmCi0JCVZhY3V1bUNvc3RQYWdlSGl0ID09IHB2X3NoYXJlZF9j b3N0X3BhcmFtcy0+Y29zdF9wYWdlX2hpdCAmJgotCQlWYWN1dW1Db3N0UGFnZU1pc3MgPT0gcHZf c2hhcmVkX2Nvc3RfcGFyYW1zLT5jb3N0X3BhZ2VfbWlzcykKKwlpZiAodmFjdXVtX2Nvc3RfZGVs YXkgPT0gUGFyYWxsZWxWYWN1dW1TaGFyZWRDb3N0UGFyYW1zLT5jb3N0X2RlbGF5ICYmCisJCXZh Y3V1bV9jb3N0X2xpbWl0ID09IFBhcmFsbGVsVmFjdXVtU2hhcmVkQ29zdFBhcmFtcy0+Y29zdF9s aW1pdCAmJgorCQlWYWN1dW1Db3N0UGFnZURpcnR5ID09IFBhcmFsbGVsVmFjdXVtU2hhcmVkQ29z dFBhcmFtcy0+Y29zdF9wYWdlX2RpcnR5ICYmCisJCVZhY3V1bUNvc3RQYWdlSGl0ID09IFBhcmFs bGVsVmFjdXVtU2hhcmVkQ29zdFBhcmFtcy0+Y29zdF9wYWdlX2hpdCAmJgorCQlWYWN1dW1Db3N0 UGFnZU1pc3MgPT0gUGFyYWxsZWxWYWN1dW1TaGFyZWRDb3N0UGFyYW1zLT5jb3N0X3BhZ2VfbWlz cykKIAkJcmV0dXJuOwogCiAJLyogVXBkYXRlIHRoZSBzaGFyZWQgZGVsYXkgcGFyYW1ldGVycyAq LwotCVNwaW5Mb2NrQWNxdWlyZSgmcHZfc2hhcmVkX2Nvc3RfcGFyYW1zLT5tdXRleCk7Ci0JcGFy YWxsZWxfdmFjdXVtX3NldF9jb3N0X3BhcmFtZXRlcnMocHZfc2hhcmVkX2Nvc3RfcGFyYW1zKTsK LQlTcGluTG9ja1JlbGVhc2UoJnB2X3NoYXJlZF9jb3N0X3BhcmFtcy0+bXV0ZXgpOworCVNwaW5M b2NrQWNxdWlyZSgmUGFyYWxsZWxWYWN1dW1TaGFyZWRDb3N0UGFyYW1zLT5tdXRleCk7CisJcGFy YWxsZWxfdmFjdXVtX3NldF9jb3N0X3BhcmFtZXRlcnMoUGFyYWxsZWxWYWN1dW1TaGFyZWRDb3N0 UGFyYW1zKTsKKwlTcGluTG9ja1JlbGVhc2UoJlBhcmFsbGVsVmFjdXVtU2hhcmVkQ29zdFBhcmFt cy0+bXV0ZXgpOwogCi0JLyoKLQkgKiBJbmNyZW1lbnQgdGhlIGdlbmVyYXRpb24gb2YgdGhlIHBh cmFtZXRlcnMsIGkuZS4gbGV0IHBhcmFsbGVsIHdvcmtlcnMKLQkgKiBrbm93IHRoYXQgdGhleSBz aG91bGQgcmUtcmVhZCBzaGFyZWQgY29zdCBwYXJhbXMuCi0JICovCi0JcGdfYXRvbWljX2ZldGNo X2FkZF91MzIoJnB2X3NoYXJlZF9jb3N0X3BhcmFtcy0+Z2VuZXJhdGlvbiwgMSk7CisJQXNzZXJ0 KEN1cnJlbnRQYXJhbGxlbFZhY3V1bVN0YXRlKTsKKwlTZW5kUHJvY1NpZ25hbFRvUGFyYWxsZWxX b3JrZXJzKEN1cnJlbnRQYXJhbGxlbFZhY3V1bVN0YXRlLT5wY3h0LAorCQkJCQkJCQkJUFJPQ1NJ R19QQVJBTExFTF9WQUNVVU1fUEFSQU1TX1VQREFURSk7CisKKwllbG9nKExPRywgIlhYWCBTRU5E IFBST0NTSUdTIik7CiB9CiAKIC8qCkBAIC05MTIsMTYgKzkwMiw2IEBAIHBhcmFsbGVsX3ZhY3V1 bV9wcm9jZXNzX2FsbF9pbmRleGVzKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgaW50IG51bV9p bmRleF9zY2FuCiAJCQkJCQkJcHZzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCwgbndvcmtlcnMp KSk7CiAJfQogCi0jaWZkZWYgVVNFX0lOSkVDVElPTl9QT0lOVFMKLQotCS8qCi0JICogVXNlZCBi eSB0ZXN0cyB0byBwYXVzZSBhZnRlciB3b3JrZXJzIGFyZSBsYXVuY2hlZCBidXQgYmVmb3JlIGlu ZGV4Ci0JICogdmFjdXVtaW5nIGJlZ2lucy4KLQkgKi8KLQlpZiAoQW1BdXRvVmFjdXVtV29ya2Vy UHJvY2VzcygpICYmIG53b3JrZXJzID4gMCkKLQkJSU5KRUNUSU9OX1BPSU5UKCJhdXRvdmFjdXVt LWxlYWRlci1iZWZvcmUtaW5kZXhlcy1wcm9jZXNzaW5nIiwgTlVMTCk7Ci0jZW5kaWYKLQogCS8q IFZhY3V1bSB0aGUgaW5kZXhlcyB0aGF0IGNhbiBiZSBwcm9jZXNzZWQgYnkgb25seSBsZWFkZXIg cHJvY2VzcyAqLwogCXBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX3Vuc2FmZV9pbmRleGVzKHB2cyk7 CiAKQEAgLTEyNjIsMTAgKzEyNDIsMTAgQEAgcGFyYWxsZWxfdmFjdXVtX21haW4oZHNtX3NlZ21l bnQgKnNlZywgc2htX3RvYyAqdG9jKQogCQkgKiBQYXJhbGxlbCBhdXRvdmFjdXVtIHdvcmtlcnMg aW5pdGlhbGl6ZSBjb3N0LWJhc2VkIGRlbGF5IHBhcmFtZXRlcnMKIAkJICogZnJvbSB0aGUgbGVh ZGVyJ3Mgc2hhcmVkIHN0YXRlIHJhdGhlciB0aGFuIEdVQyBkZWZhdWx0cywgYmVjYXVzZQogCQkg KiB0aGUgbGVhZGVyIG1heSBoYXZlIGFwcGxpZWQgcGVyLXRhYmxlIG9yIGF1dG92YWN1dW0tc3Bl Y2lmaWMKLQkJICogb3ZlcnJpZGVzLiAgcHZfc2hhcmVkX2Nvc3RfcGFyYW1zIG11c3QgYmUgc2V0 IGJlZm9yZSBjYWxsaW5nCi0JCSAqIHBhcmFsbGVsX3ZhY3V1bV91cGRhdGVfc2hhcmVkX2RlbGF5 X3BhcmFtcygpLgorCQkgKiBvdmVycmlkZXMuICBQYXJhbGxlbFZhY3V1bVNoYXJlZENvc3RQYXJh bXMgbXVzdCBiZSBzZXQgYmVmb3JlCisJCSAqIGNhbGxpbmcgcGFyYWxsZWxfdmFjdXVtX3VwZGF0 ZV9zaGFyZWRfZGVsYXlfcGFyYW1zKCkuCiAJCSAqLwotCQlwdl9zaGFyZWRfY29zdF9wYXJhbXMg PSAmKHNoYXJlZC0+Y29zdF9wYXJhbXMpOworCQlQYXJhbGxlbFZhY3V1bVNoYXJlZENvc3RQYXJh bXMgPSAmKHNoYXJlZC0+Y29zdF9wYXJhbXMpOwogCQlwYXJhbGxlbF92YWN1dW1fdXBkYXRlX3No YXJlZF9kZWxheV9wYXJhbXMoKTsKIAl9CiAJZWxzZQpAQCAtMTMyNyw3ICsxMzA3LDcgQEAgcGFy YWxsZWxfdmFjdXVtX21haW4oZHNtX3NlZ21lbnQgKnNlZywgc2htX3RvYyAqdG9jKQogCUZyZWVB Y2Nlc3NTdHJhdGVneShwdnMuYnN0cmF0ZWd5KTsKIAogCWlmIChzaGFyZWQtPmlzX2F1dG92YWN1 dW0pCi0JCXB2X3NoYXJlZF9jb3N0X3BhcmFtcyA9IE5VTEw7CisJCVBhcmFsbGVsVmFjdXVtU2hh cmVkQ29zdFBhcmFtcyA9IE5VTEw7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2ln bmFsLmMKaW5kZXggN2UwMTdjOGQ1M2IuLmJmNGYxN2NhOGI0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvcHJvY3NpZ25hbC5jCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvcGFy YWxsZWwuaCIKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgorI2luY2x1ZGUgImNvbW1hbmRz L3ZhY3V1bS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgog I2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKQEAgLTcwMyw2ICs3MDQsOSBAQCBwcm9jc2ln bmFsX3NpZ3VzcjFfaGFuZGxlcihTSUdOQUxfQVJHUykKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBS T0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1QpKQogCQlIYW5kbGVSZWNvdmVyeUNvbmZsaWN0SW50ZXJy dXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUEFSQUxMRUxfVkFDVVVNX1BB UkFNU19VUERBVEUpKQorCQlIYW5kbGVQYXJhbGxlbFZhY3V1bVBhcmFtc1VwZGF0ZSgpOworCiAJ U2V0TGF0Y2goTXlMYXRjaCk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9w YXJhbGxlbC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3BhcmFsbGVsLmgKaW5kZXggNjBmODU3Njc1 ZTAuLjkwMDg0NTgxZjdjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcGFyYWxsZWwu aAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcGFyYWxsZWwuaApAQCAtMTksNiArMTksNyBAQAog I2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgogI2lu Y2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWdu YWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobV9tcS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ht X3RvYy5oIgogCkBAIC03MSw2ICs3Miw3IEBAIGV4dGVybiB2b2lkIFdhaXRGb3JQYXJhbGxlbFdv cmtlcnNUb0F0dGFjaChQYXJhbGxlbENvbnRleHQgKnBjeHQpOwogZXh0ZXJuIHZvaWQgV2FpdEZv clBhcmFsbGVsV29ya2Vyc1RvRmluaXNoKFBhcmFsbGVsQ29udGV4dCAqcGN4dCk7CiBleHRlcm4g dm9pZCBEZXN0cm95UGFyYWxsZWxDb250ZXh0KFBhcmFsbGVsQ29udGV4dCAqcGN4dCk7CiBleHRl cm4gYm9vbCBQYXJhbGxlbENvbnRleHRBY3RpdmUodm9pZCk7CitleHRlcm4gdm9pZCBTZW5kUHJv Y1NpZ25hbFRvUGFyYWxsZWxXb3JrZXJzKFBhcmFsbGVsQ29udGV4dCAqcGN4dCwgUHJvY1NpZ25h bFJlYXNvbiByZWFzb24pOwogCiBleHRlcm4gdm9pZCBIYW5kbGVQYXJhbGxlbE1lc3NhZ2VJbnRl cnJ1cHQodm9pZCk7CiBleHRlcm4gdm9pZCBQcm9jZXNzUGFyYWxsZWxNZXNzYWdlcyh2b2lkKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvdmFjdXVtLmgKaW5kZXggNjlmZWMwNzQ5MWIuLjhiNTllM2FlMWMyIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAorKysgYi9zcmMvaW5jbHVkZS9jb21t YW5kcy92YWN1dW0uaApAQCAtMzYwLDYgKzM2MCwxMCBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50 IHZhY3V1bV9jb3N0X2xpbWl0OwogCiBleHRlcm4gUEdETExJTVBPUlQgaW50NjQgcGFyYWxsZWxf dmFjdXVtX3dvcmtlcl9kZWxheV9uczsKIAorZXh0ZXJuIFBHRExMSU1QT1JUIHN0cnVjdCBQVlNo YXJlZENvc3RQYXJhbXMgKlBhcmFsbGVsVmFjdXVtU2hhcmVkQ29zdFBhcmFtczsKK2V4dGVybiBQ R0RMTElNUE9SVCBzdHJ1Y3QgUGFyYWxsZWxWYWN1dW1TdGF0ZSAqQ3VycmVudFBhcmFsbGVsVmFj dXVtU3RhdGU7CitleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFBhcmFs bGVsVmFjdXVtUGFyYW1zVXBkYXRlUGVuZGluZzsKKwogLyogaW4gY29tbWFuZHMvdmFjdXVtLmMg Ki8KIGV4dGVybiB2b2lkIEV4ZWNWYWN1dW0oUGFyc2VTdGF0ZSAqcHN0YXRlLCBWYWN1dW1TdG10 ICp2YWNzdG10LCBib29sIGlzVG9wTGV2ZWwpOwogZXh0ZXJuIHZvaWQgdmFjdXVtKExpc3QgKnJl bGF0aW9ucywgY29uc3QgVmFjdXVtUGFyYW1zICpwYXJhbXMsCkBAIC00MjUsNiArNDI5LDcgQEAg ZXh0ZXJuIHZvaWQgcGFyYWxsZWxfdmFjdXVtX2NsZWFudXBfYWxsX2luZGV4ZXMoUGFyYWxsZWxW YWN1dW1TdGF0ZSAqcHZzLAogZXh0ZXJuIHZvaWQgcGFyYWxsZWxfdmFjdXVtX3VwZGF0ZV9zaGFy ZWRfZGVsYXlfcGFyYW1zKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGFyYWxsZWxfdmFjdXVtX3Byb3Bh Z2F0ZV9zaGFyZWRfZGVsYXlfcGFyYW1zKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGFyYWxsZWxfdmFj dXVtX21haW4oZHNtX3NlZ21lbnQgKnNlZywgc2htX3RvYyAqdG9jKTsKK2V4dGVybiB2b2lkIEhh bmRsZVBhcmFsbGVsVmFjdXVtUGFyYW1zVXBkYXRlKHZvaWQpOwogCiAvKiBpbiBjb21tYW5kcy9h bmFseXplLmMgKi8KIGV4dGVybiB2b2lkIGFuYWx5emVfcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIg KnJlbGF0aW9uLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAppbmRleCAzNDhmYmE1M2E5My4uYWM5 YTZlODQxZmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisr KyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zOSw5ICszOSwxMSBAQCB0 eXBlZGVmIGVudW0KIAlQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNULAkvKiBiYWNrZW5kIGlzIGJs b2NraW5nIHJlY292ZXJ5LCBjaGVjawogCQkJCQkJCQkgKiBQR1BST0MtPnBlbmRpbmdSZWNvdmVy eUNvbmZsaWN0cyBmb3IgdGhlCiAJCQkJCQkJCSAqIHJlYXNvbiAqLworCVBST0NTSUdfUEFSQUxM RUxfVkFDVVVNX1BBUkFNU19VUERBVEUsCS8qIHBhcmFsbGVsIGF1dG92YWN1dW0gd29ya2VyOgor CQkJCQkJCQkJCQkgKiByZWxvYWQgY29zdCBwYXJhbXMgKi8KIH0gUHJvY1NpZ25hbFJlYXNvbjsK IAotI2RlZmluZSBOVU1fUFJPQ1NJR05BTFMgKFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1QgKyAx KQorI2RlZmluZSBOVU1fUFJPQ1NJR05BTFMgKFBST0NTSUdfUEFSQUxMRUxfVkFDVVVNX1BBUkFN U19VUERBVEUgKyAxKQogCiB0eXBlZGVmIGVudW0KIHsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9hdXRvdmFjdXVtL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1 dG92YWN1dW0vTWFrZWZpbGUKaW5kZXggMTg4ZWM5Zjk2YTIuLmQ5MWEzNDA1ZTM0IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0b3ZhY3V1bS9NYWtlZmlsZQorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfYXV0b3ZhY3V1bS9NYWtlZmlsZQpAQCAtNCwxMCArNCw2IEBAIFBH RklMRURFU0MgPSAidGVzdF9hdXRvdmFjdXVtIC0gdGVzdCBjb2RlIGZvciBwYXJhbGxlbCBhdXRv dmFjdXVtIgogCiBUQVBfVEVTVFMgPSAxCiAKLUVYVFJBX0lOU1RBTEwgPSBzcmMvdGVzdC9tb2R1 bGVzL2luamVjdGlvbl9wb2ludHMKLQotZXhwb3J0IGVuYWJsZV9pbmplY3Rpb25fcG9pbnRzCi0K IGlmZGVmIFVTRV9QR1hTCiBQR19DT05GSUcgPSBwZ19jb25maWcKIFBHWFMgOj0gJChzaGVsbCAk KFBHX0NPTkZJRykgLS1wZ3hzKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1 dG92YWN1dW0vbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0b3ZhY3V1bS9t ZXNvbi5idWlsZAppbmRleCA4NmUzOTJiYzBkZS4uOTRhM2U4YTAzOGQgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9hdXRvdmFjdXVtL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9hdXRvdmFjdXVtL21lc29uLmJ1aWxkCkBAIC01LDkgKzUsNiBAQCB0ZXN0 cyArPSB7CiAgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAogICAnYmQnOiBtZXNv bi5jdXJyZW50X2J1aWxkX2RpcigpLAogICAndGFwJzogewotICAgICdlbnYnOiB7Ci0gICAgICAg J2VuYWJsZV9pbmplY3Rpb25fcG9pbnRzJzogZ2V0X29wdGlvbignaW5qZWN0aW9uX3BvaW50cycp ID8gJ3llcycgOiAnbm8nLAotICAgIH0sCiAgICAgJ3Rlc3RzJzogWwogICAgICAgJ3QvMDAxX3Bh cmFsbGVsX2F1dG92YWN1dW0ucGwnLAogICAgIF0sCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYXV0b3ZhY3V1bS90LzAwMV9wYXJhbGxlbF9hdXRvdmFjdXVtLnBsIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2F1dG92YWN1dW0vdC8wMDFfcGFyYWxsZWxfYXV0b3ZhY3V1bS5wbApp bmRleCA5ZTY1ZWFmYjU0OS4uNjUzNmEzYjI2NWEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9hdXRvdmFjdXVtL3QvMDAxX3BhcmFsbGVsX2F1dG92YWN1dW0ucGwKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2F1dG92YWN1dW0vdC8wMDFfcGFyYWxsZWxfYXV0b3ZhY3V1bS5w bApAQCAtOSwxMSArOSw2IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBv c3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKLWlmICgkRU5We2VuYWJs ZV9pbmplY3Rpb25fcG9pbnRzfSBuZSAneWVzJykKLXsKLQlwbGFuIHNraXBfYWxsID0+ICdJbmpl Y3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCc7Ci19Ci0KICMgQmVmb3Jl IGVhY2ggdGVzdCB3ZSBzaG91bGQgZGlzYWJsZSBhdXRvdmFjdXVtIGZvciAndGVzdF9hdXRvdmFj JyB0YWJsZSBhbmQKICMgZ2VuZXJhdGUgc29tZSBkZWFkIHR1cGxlcyBpbiBpdC4gUmV0dXJucyB0 aGUgY3VycmVudCBhdXRvdmFjdXVtX2NvdW50IG9mCiAjIHRoZSB0YWJsZSB0ZXN0X2F1dG92YWMu CkBAIC02NiwyMCArNjEsNiBAQCBsb2dfYXV0b3ZhY3V1bV9taW5fZHVyYXRpb24gPSAtMQogfSk7 CiAkbm9kZS0+c3RhcnQ7CiAKLSMgQ2hlY2sgaWYgdGhlIGV4dGVuc2lvbiBpbmplY3Rpb25fcG9p bnRzIGlzIGF2YWlsYWJsZSwgYXMgaXQgbWF5IGJlCi0jIHBvc3NpYmxlIHRoYXQgdGhpcyBzY3Jp cHQgaXMgcnVuIHdpdGggaW5zdGFsbGNoZWNrLCB3aGVyZSB0aGUgbW9kdWxlCi0jIHdvdWxkIG5v dCBiZSBpbnN0YWxsZWQgYnkgZGVmYXVsdC4KLWlmICghJG5vZGUtPmNoZWNrX2V4dGVuc2lvbign aW5qZWN0aW9uX3BvaW50cycpKQotewotCXBsYW4gc2tpcF9hbGwgPT4gJ0V4dGVuc2lvbiBpbmpl Y3Rpb25fcG9pbnRzIG5vdCBpbnN0YWxsZWQnOwotfQotCi0jIENyZWF0ZSBhbGwgZnVuY3Rpb25z IG5lZWRlZCBmb3IgdGVzdGluZwotJG5vZGUtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxcXsK LQlDUkVBVEUgRVhURU5TSU9OIGluamVjdGlvbl9wb2ludHM7Ci19KTsKLQogbXkgJGluZGV4ZXNf bnVtID0gMzsKIG15ICRpbml0aWFsX3Jvd3NfbnVtID0gMTBfMDAwOwogbXkgJGF1dG92YWN1dW1f cGFyYWxsZWxfd29ya2VycyA9IDI7CkBAIC0xMzQsNjQgKzExNSw1IEBAIG9rKCAkbm9kZS0+bG9n X2NvbnRhaW5zKAogCQlxci9wYXJhbGxlbCB3b3JrZXJzOiBpbmRleCB2YWN1dW06IDIgcGxhbm5l ZCwgMiBsYXVuY2hlZCBpbiB0b3RhbC8sCiAJCSRsb2dfb2Zmc2V0KSk7CiAKLSMgVGVzdCAyOgot IyBDaGVjayB3aGV0aGVyIHBhcmFsbGVsIGF1dG92YWN1dW0gbGVhZGVyIGNhbiBwcm9wYWdhdGUg Y29zdC1iYXNlZCBwYXJhbWV0ZXJzCi0jIHRvIHRoZSBwYXJhbGxlbCB3b3JrZXJzLgotCi0kYXZf Y291bnQgPSBwcmVwYXJlX2Zvcl9uZXh0X3Rlc3QoJG5vZGUsIDIpOwotJGxvZ19vZmZzZXQgPSAt cyAkbm9kZS0+bG9nZmlsZTsKLQotJG5vZGUtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxcXsK LQlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ2F1dG92YWN1dW0tc3RhcnQtcGFyYWxs ZWwtdmFjdXVtJywgJ3dhaXQnKTsKLQlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ2F1 dG92YWN1dW0tbGVhZGVyLWJlZm9yZS1pbmRleGVzLXByb2Nlc3NpbmcnLCAnd2FpdCcpOwotCi0J QUxURVIgVEFCTEUgdGVzdF9hdXRvdmFjIFNFVCAoYXV0b3ZhY3V1bV9wYXJhbGxlbF93b3JrZXJz ID0gMSwgYXV0b3ZhY3V1bV9lbmFibGVkID0gdHJ1ZSk7Ci19KTsKLQotIyBXYWl0IHVudGlsIHBh cmFsbGVsIGF1dG92YWN1dW0gaXMgaW5pdGVkCi0kbm9kZS0+d2FpdF9mb3JfZXZlbnQoJ2F1dG92 YWN1dW0gd29ya2VyJywKLQknYXV0b3ZhY3V1bS1zdGFydC1wYXJhbGxlbC12YWN1dW0nKTsKLQot IyBVcGRhdGUgdGhlIHNoYXJlZCBjb3N0LWJhc2VkIGRlbGF5IHBhcmFtZXRlcnMuCi0kbm9kZS0+ c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHFxewotCUFMVEVSIFNZU1RFTSBTRVQgdmFjdXVtX2Nv c3RfbGltaXQgPSA1MDA7Ci0JQUxURVIgU1lTVEVNIFNFVCB2YWN1dW1fY29zdF9wYWdlX21pc3Mg PSAxMDsKLQlBTFRFUiBTWVNURU0gU0VUIHZhY3V1bV9jb3N0X3BhZ2VfZGlydHkgPSAxMDsKLQlB TFRFUiBTWVNURU0gU0VUIHZhY3V1bV9jb3N0X3BhZ2VfaGl0ID0gMTA7Ci0JU0VMRUNUIHBnX3Jl bG9hZF9jb25mKCk7Ci19KTsKLQotIyBSZXN1bWUgdGhlIGxlYWRlciBwcm9jZXNzIHRvIHVwZGF0 ZSB0aGUgc2hhcmVkIHBhcmFtZXRlcnMgZHVyaW5nIGhlYXAgc2NhbiAoaS5lLgotIyB2YWN1dW1f ZGVsYXlfcG9pbnQoKSBpcyBjYWxsZWQpIGFuZCBsYXVuY2ggYSBwYXJhbGxlbCB2YWN1dW0gd29y a2VyLCBidXQgaXQgc3RvcHMKLSMgYmVmb3JlIHZhY3V1bWluZyBpbmRleGVzIGR1ZSB0byB0aGUg aW5qZWN0aW9uIHBvaW50LgotJG5vZGUtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxcXsKLQlT RUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtldXAoJ2F1dG92YWN1dW0tc3RhcnQtcGFyYWxsZWwt dmFjdXVtJyk7Ci19KTsKLSRub2RlLT53YWl0X2Zvcl9ldmVudCgnYXV0b3ZhY3V1bSB3b3JrZXIn LAotCSdhdXRvdmFjdXVtLWxlYWRlci1iZWZvcmUtaW5kZXhlcy1wcm9jZXNzaW5nJyk7Ci0KLSMg Q2hlY2sgd2hldGhlciBwYXJhbGxlbCB3b3JrZXIgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgYWxsIHBh cmFtZXRlcnMgZHVyaW5nCi0jIGluZGV4IHByb2Nlc3NpbmcKLSRub2RlLT53YWl0X2Zvcl9sb2co Ci0JcXIvcGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXIgdXBkYXRlZCBjb3N0IHBhcmFtczogY29z dF9saW1pdD01MDAsIGNvc3RfZGVsYXk9MiwgY29zdF9wYWdlX21pc3M9MTAsIGNvc3RfcGFnZV9k aXJ0eT0xMCwgY29zdF9wYWdlX2hpdD0xMC8sCi0JJGxvZ19vZmZzZXQpOwotCi0kbm9kZS0+c2Fm ZV9wc3FsKAotCSdwb3N0Z3JlcycsIHFxewotCVNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dha2V1 cCgnYXV0b3ZhY3V1bS1sZWFkZXItYmVmb3JlLWluZGV4ZXMtcHJvY2Vzc2luZycpOwotfSk7Ci0K LXdhaXRfZm9yX2F1dG92YWN1dW1fY29tcGxldGUoJG5vZGUsICRhdl9jb3VudCk7Ci0KLSMgQ2xl YW51cAotJG5vZGUtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxcXsKLQlTRUxFQ1QgaW5qZWN0 aW9uX3BvaW50c19kZXRhY2goJ2F1dG92YWN1dW0tc3RhcnQtcGFyYWxsZWwtdmFjdXVtJyk7Ci0J U0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCdhdXRvdmFjdXVtLWxlYWRlci1iZWZvcmUt aW5kZXhlcy1wcm9jZXNzaW5nJyk7Ci19KTsKLQogJG5vZGUtPnN0b3A7CiBkb25lX3Rlc3Rpbmco KTsKLS0gCjIuNTMuMAoK --000000000000eda3d5064e76be1b--