X-Original-To: alpine-aports@mail.alpinelinux.org Delivered-To: alpine-aports@mail.alpinelinux.org Received: from mail.alpinelinux.org (dallas-a1.alpinelinux.org [127.0.0.1]) by mail.alpinelinux.org (Postfix) with ESMTP id D304DDC15B6 for ; Wed, 2 Dec 2015 18:39:27 +0000 (UTC) Received: from mail-wm0-f48.google.com (mail-wm0-f48.google.com [74.125.82.48]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mail.alpinelinux.org (Postfix) with ESMTPS id 41498DC06D1 for ; Wed, 2 Dec 2015 18:39:26 +0000 (UTC) Received: by wmec201 with SMTP id c201so267242923wme.0 for ; Wed, 02 Dec 2015 10:39:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kampka-net.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :content-type; bh=KwxM2fqvowVUUMj2U4ZrFPb90rXCPyzAhxPRSxynYC0=; b=Q4j2Vy+2pt1d2g5j9uak/ulg8W/oiXchPS2Oun2uaTYFpnyw5PMAxOaIjy7RIe5Qum lGxrqQY+2BRCcmS4liis9nQcMAaf38z/9LTT+MTYGjVMs0DCkHRvBnd6AefY9NUDD15v /jNn1QY6c0Hbx98CdUHVTgWwcFkzzrZVp1FvLP1kHu4e0PJeQZNeo4tEPwIQhvtGQ+Nd YZkW28O3S1PVnN+OfKUvKeZeHxEKRYRACwoNrhg3GWzcA/O8WroQCPvJcLUZcIP2mZQp xFr1oD3R1ZNlV16Kv256dkwdmddm3+5ez3wGTHx4lP0dwMon2+FfetWgCvddRWMGHlJF TZkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:content-type; bh=KwxM2fqvowVUUMj2U4ZrFPb90rXCPyzAhxPRSxynYC0=; b=WtTQ7zDOIDRvCBOhjDXnbqVO2RfDVTE7Nd8qYnDnkTqzdZTpZDPmMcNztovNbFVmOA S178EfYjea02/oEMYXZzBja45ZRQvskS3kxj9D+jZrRYim7OHwbHdQrknoXjx2r4s+G5 ZQMJBwCmGNa2airtVtva/mlRIb91C7ukWyht6urzDFJlV0/cIaKJDA2jWOU2zdUfl8uK W9aQYzG8fNeIUUWgUdacie72YW3TCe7ng2mrFqsqnHLZmlzlTz/SDPsCfR7zY1FDaGcV Xx2jtEKb2IbZbYDUDDsCMdpvU1I1hIlc0J2rRdB1shFcB+4GaRiPXkSlbnozca2wopLv f1MQ== X-Gm-Message-State: ALoCoQkn3oZP8ab6pF/K63qRC+G384/fY8IkxryuEXUADYUdiLxPho3EJckyGdnmPg8HHjl2GQZx X-Received: by 10.194.94.100 with SMTP id db4mr6259980wjb.85.1449081565833; Wed, 02 Dec 2015 10:39:25 -0800 (PST) X-Mailinglist: alpine-aports Precedence: list List-Id: Alpine Development List-Unsubscribe: List-Post: List-Help: List-Subscribe: MIME-Version: 1.0 References: <1449081001-18989-1-git-send-email-christian@kampka.net> In-Reply-To: <1449081001-18989-1-git-send-email-christian@kampka.net> From: Christian Kampka Date: Wed, 02 Dec 2015 18:39:16 +0000 Message-ID: Subject: [alpine-aports] Re: [PATCH 3.0-stable] main/putty: fix CVE-2015-5309 To: alpine-aports@lists.alpinelinux.org Content-Type: multipart/alternative; boundary=047d7beb9458fb8c880525ee97ac X-Virus-Scanned: ClamAV using ClamSMTP --047d7beb9458fb8c880525ee97ac Content-Type: text/plain; charset=UTF-8 This patch has been superseded by v2 because of missing pkgrel bump. Christian Kampka schrieb am Mi., 2. Dez. 2015 um 19:30 Uhr: > fixes #4912 > --- > main/putty/APKBUILD | 14 ++- > main/putty/CVE-2015-5309.patch | 250 > +++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 259 insertions(+), 5 deletions(-) > create mode 100644 main/putty/CVE-2015-5309.patch > > diff --git a/main/putty/APKBUILD b/main/putty/APKBUILD > index 23acdd8..ae8b173 100644 > --- a/main/putty/APKBUILD > +++ b/main/putty/APKBUILD > @@ -11,7 +11,9 @@ depends_dev= > makedepends="$depends_dev" > install="" > subpackages="$pkgname-doc" > -source="http://the.earth.li/~sgtatham/putty/latest/putty-$pkgver.tar.gz" > +source="http://the.earth.li/~sgtatham/putty/$pkgver/putty-$pkgver.tar.gz > + CVE-2015-5309.patch > + " > > _builddir="$srcdir"/putty-$pkgver > prepare() { > @@ -38,7 +40,9 @@ package() { > cd "$_builddir" > make DESTDIR="$pkgdir" install || return 1 > } > - > -md5sums="75ff711e8b7cc9e0073bc511e1c1c14a putty-0.64.tar.gz" > -sha256sums="2a46c97a184144e3ec2392aca9acc64d062317a3a38b9a5f623a147eda5f3821 > putty-0.64.tar.gz" > -sha512sums="ba4d4086b8edcb6388924bf3d9b018841be36a9dbf298271c9d2ed063aae9854093e9ff6808bd1f65669d78369548639eb3c95fdec5e3f0daee4b1c7bb603051 > putty-0.64.tar.gz" > +md5sums="75ff711e8b7cc9e0073bc511e1c1c14a putty-0.64.tar.gz > +dfdc6d6f52e33811ce72f6f1614f71e8 CVE-2015-5309.patch" > +sha256sums="2a46c97a184144e3ec2392aca9acc64d062317a3a38b9a5f623a147eda5f3821 > putty-0.64.tar.gz > +b49a26d0ad2578acbe7e106fad010d333ca09ce5272774e4e2ce3805f37f9780 > CVE-2015-5309.patch" > +sha512sums="ba4d4086b8edcb6388924bf3d9b018841be36a9dbf298271c9d2ed063aae9854093e9ff6808bd1f65669d78369548639eb3c95fdec5e3f0daee4b1c7bb603051 > putty-0.64.tar.gz > +692f06ed53b8d4a6b3d041ece83d0d36601d0fcaa0b7a207b52ed57be0dea108681785466f65599ab85f4b8d164b0849c7d0b3f0f54999517390f06547163e5a > CVE-2015-5309.patch" > diff --git a/main/putty/CVE-2015-5309.patch > b/main/putty/CVE-2015-5309.patch > new file mode 100644 > index 0000000..2225b2c > --- /dev/null > +++ b/main/putty/CVE-2015-5309.patch > @@ -0,0 +1,250 @@ > +From 6056396f77cafc7e40da4d09f1d6212408dcb065 Mon Sep 17 00:00:00 2001 > +From: Ben Harris > +Date: Wed, 7 Oct 2015 23:54:39 +0100 > +Subject: [PATCH] More robust control sequence parameter handling. > + > +Parameters are now accumulated in unsigned integers and carefully checked > +for overflow (which is turned into saturation). Things that consume them > +now have explicit range checks (again, saturating) to ensure that their > +inputs are sane. This should make it much harder to cause overflow by > +supplying ludicrously large numbers. > + > +Fixes two bugs found with the help of afl-fuzz. One of them may be > +exploitable and is CVE-2015-5309. > +--- > + terminal.c | 49 +++++++++++++++++++++++++++++++++++++++++++------ > + terminal.h | 2 +- > + 2 files changed, 44 insertions(+), 7 deletions(-) > + > +diff --git a/terminal.c b/terminal.c > +index d8d0ea0..c7e2647 100644 > +--- a/terminal.c > ++++ b/terminal.c > +@@ -5,6 +5,7 @@ > + #include > + #include > + #include > ++#include > + > + #include > + #include > +@@ -3493,8 +3494,15 @@ static void term_out(Terminal *term) > + if (term->esc_nargs <= ARGS_MAX) { > + if (term->esc_args[term->esc_nargs - 1] == > ARG_DEFAULT) > + term->esc_args[term->esc_nargs - 1] = 0; > +- term->esc_args[term->esc_nargs - 1] = > +- 10 * term->esc_args[term->esc_nargs - 1] + c - > '0'; > ++ if (term->esc_args[term->esc_nargs - 1] <= > ++ UINT_MAX / 10 && > ++ term->esc_args[term->esc_nargs - 1] * 10 <= > ++ UINT_MAX - c - '0') > ++ term->esc_args[term->esc_nargs - 1] = > ++ 10 * term->esc_args[term->esc_nargs - 1] + > ++ c - '0'; > ++ else > ++ term->esc_args[term->esc_nargs - 1] = UINT_MAX; > + } > + term->termstate = SEEN_CSI; > + } else if (c == ';') { > +@@ -3510,8 +3518,10 @@ static void term_out(Terminal *term) > + term->esc_query = c; > + term->termstate = SEEN_CSI; > + } else > ++#define CLAMP(arg, lim) ((arg) = ((arg) > (lim)) ? (lim) : (arg)) > + switch (ANSI(c, term->esc_query)) { > + case 'A': /* CUU: move up N lines */ > ++ CLAMP(term->esc_args[0], term->rows); > + move(term, term->curs.x, > + term->curs.y - def(term->esc_args[0], 1), 1); > + seen_disp_event(term); > +@@ -3520,6 +3530,7 @@ static void term_out(Terminal *term) > + compatibility(ANSI); > + /* FALLTHROUGH */ > + case 'B': /* CUD: Cursor down */ > ++ CLAMP(term->esc_args[0], term->rows); > + move(term, term->curs.x, > + term->curs.y + def(term->esc_args[0], 1), 1); > + seen_disp_event(term); > +@@ -3535,23 +3546,27 @@ static void term_out(Terminal *term) > + compatibility(ANSI); > + /* FALLTHROUGH */ > + case 'C': /* CUF: Cursor right */ > ++ CLAMP(term->esc_args[0], term->cols); > + move(term, term->curs.x + def(term->esc_args[0], > 1), > + term->curs.y, 1); > + seen_disp_event(term); > + break; > + case 'D': /* CUB: move left N cols */ > ++ CLAMP(term->esc_args[0], term->cols); > + move(term, term->curs.x - def(term->esc_args[0], > 1), > + term->curs.y, 1); > + seen_disp_event(term); > + break; > + case 'E': /* CNL: move down N lines and CR */ > + compatibility(ANSI); > ++ CLAMP(term->esc_args[0], term->rows); > + move(term, 0, > + term->curs.y + def(term->esc_args[0], 1), 1); > + seen_disp_event(term); > + break; > + case 'F': /* CPL: move up N lines and CR */ > + compatibility(ANSI); > ++ CLAMP(term->esc_args[0], term->rows); > + move(term, 0, > + term->curs.y - def(term->esc_args[0], 1), 1); > + seen_disp_event(term); > +@@ -3559,12 +3574,14 @@ static void term_out(Terminal *term) > + case 'G': /* CHA */ > + case '`': /* HPA: set horizontal posn */ > + compatibility(ANSI); > ++ CLAMP(term->esc_args[0], term->cols); > + move(term, def(term->esc_args[0], 1) - 1, > + term->curs.y, 0); > + seen_disp_event(term); > + break; > + case 'd': /* VPA: set vertical posn */ > + compatibility(ANSI); > ++ CLAMP(term->esc_args[0], term->rows); > + move(term, term->curs.x, > + ((term->dec_om ? term->marg_t : 0) + > + def(term->esc_args[0], 1) - 1), > +@@ -3575,6 +3592,8 @@ static void term_out(Terminal *term) > + case 'f': /* HVP: set horz and vert posns at > once */ > + if (term->esc_nargs < 2) > + term->esc_args[1] = ARG_DEFAULT; > ++ CLAMP(term->esc_args[0], term->rows); > ++ CLAMP(term->esc_args[1], term->cols); > + move(term, def(term->esc_args[1], 1) - 1, > + ((term->dec_om ? term->marg_t : 0) + > + def(term->esc_args[0], 1) - 1), > +@@ -3610,6 +3629,7 @@ static void term_out(Terminal *term) > + break; > + case 'L': /* IL: insert lines */ > + compatibility(VT102); > ++ CLAMP(term->esc_args[0], term->rows); > + if (term->curs.y <= term->marg_b) > + scroll(term, term->curs.y, term->marg_b, > + -def(term->esc_args[0], 1), FALSE); > +@@ -3617,6 +3637,7 @@ static void term_out(Terminal *term) > + break; > + case 'M': /* DL: delete lines */ > + compatibility(VT102); > ++ CLAMP(term->esc_args[0], term->rows); > + if (term->curs.y <= term->marg_b) > + scroll(term, term->curs.y, term->marg_b, > + def(term->esc_args[0], 1), > +@@ -3626,11 +3647,13 @@ static void term_out(Terminal *term) > + case '@': /* ICH: insert chars */ > + /* XXX VTTEST says this is vt220, vt510 manual > says vt102 */ > + compatibility(VT102); > ++ CLAMP(term->esc_args[0], term->cols); > + insch(term, def(term->esc_args[0], 1)); > + seen_disp_event(term); > + break; > + case 'P': /* DCH: delete chars */ > + compatibility(VT102); > ++ CLAMP(term->esc_args[0], term->cols); > + insch(term, -def(term->esc_args[0], 1)); > + seen_disp_event(term); > + break; > +@@ -3708,6 +3731,8 @@ static void term_out(Terminal *term) > + compatibility(VT100); > + if (term->esc_nargs <= 2) { > + int top, bot; > ++ CLAMP(term->esc_args[0], term->rows); > ++ CLAMP(term->esc_args[1], term->rows); > + top = def(term->esc_args[0], 1) - 1; > + bot = (term->esc_nargs <= 1 > + || term->esc_args[1] == 0 ? > +@@ -4062,6 +4087,7 @@ static void term_out(Terminal *term) > + } > + break; > + case 'S': /* SU: Scroll up */ > ++ CLAMP(term->esc_args[0], term->rows); > + compatibility(SCOANSI); > + scroll(term, term->marg_t, term->marg_b, > + def(term->esc_args[0], 1), TRUE); > +@@ -4069,6 +4095,7 @@ static void term_out(Terminal *term) > + seen_disp_event(term); > + break; > + case 'T': /* SD: Scroll down */ > ++ CLAMP(term->esc_args[0], term->rows); > + compatibility(SCOANSI); > + scroll(term, term->marg_t, term->marg_b, > + -def(term->esc_args[0], 1), TRUE); > +@@ -4111,6 +4138,7 @@ static void term_out(Terminal *term) > + /* XXX VTTEST says this is vt220, vt510 manual > + * says vt100 */ > + compatibility(ANSIMIN); > ++ CLAMP(term->esc_args[0], term->cols); > + { > + int n = def(term->esc_args[0], 1); > + pos cursplus; > +@@ -4144,6 +4172,7 @@ static void term_out(Terminal *term) > + break; > + case 'Z': /* CBT */ > + compatibility(OTHER); > ++ CLAMP(term->esc_args[0], term->cols); > + { > + int i = def(term->esc_args[0], 1); > + pos old_curs = term->curs; > +@@ -4204,7 +4233,7 @@ static void term_out(Terminal *term) > + break; > + case ANSI('F', '='): /* set normal foreground */ > + compatibility(SCOANSI); > +- if (term->esc_args[0] >= 0 && term->esc_args[0] < > 16) { > ++ if (term->esc_args[0] < 16) { > + long colour = > + (sco2ansicolour[term->esc_args[0] & 0x7] | > + (term->esc_args[0] & 0x8)) << > +@@ -4218,7 +4247,7 @@ static void term_out(Terminal *term) > + break; > + case ANSI('G', '='): /* set normal background */ > + compatibility(SCOANSI); > +- if (term->esc_args[0] >= 0 && term->esc_args[0] < > 16) { > ++ if (term->esc_args[0] < 16) { > + long colour = > + (sco2ansicolour[term->esc_args[0] & 0x7] | > + (term->esc_args[0] & 0x8)) << > +@@ -4342,7 +4371,11 @@ static void term_out(Terminal *term) > + case '7': > + case '8': > + case '9': > +- term->esc_args[0] = 10 * term->esc_args[0] + c - '0'; > ++ if (term->esc_args[0] <= UINT_MAX / 10 && > ++ term->esc_args[0] * 10 <= UINT_MAX - c - '0') > ++ term->esc_args[0] = 10 * term->esc_args[0] + c - > '0'; > ++ else > ++ term->esc_args[0] = UINT_MAX; > + break; > + case 'L': > + /* > +@@ -4424,7 +4457,11 @@ static void term_out(Terminal *term) > + case '7': > + case '8': > + case '9': > +- term->esc_args[0] = 10 * term->esc_args[0] + c - '0'; > ++ if (term->esc_args[0] <= UINT_MAX / 10 && > ++ term->esc_args[0] * 10 <= UINT_MAX - c - '0') > ++ term->esc_args[0] = 10 * term->esc_args[0] + c - > '0'; > ++ else > ++ term->esc_args[0] = UINT_MAX; > + break; > + default: > + term->termstate = OSC_STRING; > +diff --git a/terminal.h b/terminal.h > +index 135ef45..01d5f57 100644 > +--- a/terminal.h > ++++ b/terminal.h > +@@ -172,7 +172,7 @@ struct terminal_tag { > + #define ARGS_MAX 32 /* max # of esc sequence arguments > */ > + #define ARG_DEFAULT 0 /* if an arg isn't specified */ > + #define def(a,d) ( (a) == ARG_DEFAULT ? (d) : (a) ) > +- int esc_args[ARGS_MAX]; > ++ unsigned esc_args[ARGS_MAX]; > + int esc_nargs; > + int esc_query; > + #define ANSI(x,y) ((x)+((y)<<8)) > +-- > +1.7.10.4 > + > -- > 2.6.2 > > --047d7beb9458fb8c880525ee97ac Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+VGhpcyBwYXRjaCBoYXMgYmVlbiBzdXBlcnNlZGVkIGJ5IHYyIGJlY2F1 c2Ugb2YgbWlzc2luZyBwa2dyZWwgYnVtcC48YnI+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3Rl Ij48ZGl2IGRpcj0ibHRyIj5DaHJpc3RpYW4gS2FtcGthICZsdDs8YSBocmVmPSJtYWlsdG86Y2hy aXN0aWFuQGthbXBrYS5uZXQiPmNocmlzdGlhbkBrYW1wa2EubmV0PC9hPiZndDsgc2NocmllYiBh bSBNaS4sIDIuIERlei4gMjAxNSB1bSAxOTozMMKgVWhyOjxicj48L2Rpdj48YmxvY2txdW90ZSBj bGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDox cHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij5maXhlcyAjNDkxMjxicj4NCi0tLTxicj4N CsKgbWFpbi9wdXR0eS9BUEtCVUlMRMKgIMKgIMKgIMKgIMKgIMKgIHzCoCAxNCArKy08YnI+DQrC oG1haW4vcHV0dHkvQ1ZFLTIwMTUtNTMwOS5wYXRjaCB8IDI1MCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKzxicj4NCsKgMiBmaWxlcyBjaGFuZ2VkLCAyNTkgaW5zZXJ0 aW9ucygrKSwgNSBkZWxldGlvbnMoLSk8YnI+DQrCoGNyZWF0ZSBtb2RlIDEwMDY0NCBtYWluL3B1 dHR5L0NWRS0yMDE1LTUzMDkucGF0Y2g8YnI+DQo8YnI+DQpkaWZmIC0tZ2l0IGEvbWFpbi9wdXR0 eS9BUEtCVUlMRCBiL21haW4vcHV0dHkvQVBLQlVJTEQ8YnI+DQppbmRleCAyM2FjZGQ4Li5hZThi MTczIDEwMDY0NDxicj4NCi0tLSBhL21haW4vcHV0dHkvQVBLQlVJTEQ8YnI+DQorKysgYi9tYWlu L3B1dHR5L0FQS0JVSUxEPGJyPg0KQEAgLTExLDcgKzExLDkgQEAgZGVwZW5kc19kZXY9PGJyPg0K wqBtYWtlZGVwZW5kcz0mcXVvdDskZGVwZW5kc19kZXYmcXVvdDs8YnI+DQrCoGluc3RhbGw9JnF1 b3Q7JnF1b3Q7PGJyPg0KwqBzdWJwYWNrYWdlcz0mcXVvdDskcGtnbmFtZS1kb2MmcXVvdDs8YnI+ DQotc291cmNlPSZxdW90OzxhIGhyZWY9Imh0dHA6Ly90aGUuZWFydGgubGkvfnNndGF0aGFtL3B1 dHR5L2xhdGVzdC9wdXR0eS0kcGtndmVyLnRhci5neiIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9 Il9ibGFuayI+aHR0cDovL3RoZS5lYXJ0aC5saS9+c2d0YXRoYW0vcHV0dHkvbGF0ZXN0L3B1dHR5 LSRwa2d2ZXIudGFyLmd6PC9hPiZxdW90Ozxicj4NCitzb3VyY2U9JnF1b3Q7PGEgaHJlZj0iaHR0 cDovL3RoZS5lYXJ0aC5saS9+c2d0YXRoYW0vcHV0dHkvJHBrZ3Zlci9wdXR0eS0kcGtndmVyLnRh ci5neiIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3RoZS5lYXJ0aC5s aS9+c2d0YXRoYW0vcHV0dHkvJHBrZ3Zlci9wdXR0eS0kcGtndmVyLnRhci5nejwvYT48YnI+DQor wqAgwqAgwqAgwqBDVkUtMjAxNS01MzA5LnBhdGNoPGJyPg0KK8KgIMKgIMKgIMKgJnF1b3Q7PGJy Pg0KPGJyPg0KwqBfYnVpbGRkaXI9JnF1b3Q7JHNyY2RpciZxdW90Oy9wdXR0eS0kcGtndmVyPGJy Pg0KwqBwcmVwYXJlKCkgezxicj4NCkBAIC0zOCw3ICs0MCw5IEBAIHBhY2thZ2UoKSB7PGJyPg0K wqAgwqAgwqAgwqAgY2QgJnF1b3Q7JF9idWlsZGRpciZxdW90Ozxicj4NCsKgIMKgIMKgIMKgIG1h a2UgREVTVERJUj0mcXVvdDskcGtnZGlyJnF1b3Q7IGluc3RhbGwgfHwgcmV0dXJuIDE8YnI+DQrC oH08YnI+DQotPGJyPg0KLW1kNXN1bXM9JnF1b3Q7NzVmZjcxMWU4YjdjYzllMDA3M2JjNTExZTFj MWMxNGHCoCBwdXR0eS0wLjY0LnRhci5neiZxdW90Ozxicj4NCi1zaGEyNTZzdW1zPSZxdW90OzJh NDZjOTdhMTg0MTQ0ZTNlYzIzOTJhY2E5YWNjNjRkMDYyMzE3YTNhMzhiOWE1ZjYyM2ExNDdlZGE1 ZjM4MjHCoCBwdXR0eS0wLjY0LnRhci5neiZxdW90Ozxicj4NCi1zaGE1MTJzdW1zPSZxdW90O2Jh NGQ0MDg2YjhlZGNiNjM4ODkyNGJmM2Q5YjAxODg0MWJlMzZhOWRiZjI5ODI3MWM5ZDJlZDA2M2Fh ZTk4NTQwOTNlOWZmNjgwOGJkMWY2NTY2OWQ3ODM2OTU0ODYzOWViM2M5NWZkZWM1ZTNmMGRhZWU0 YjFjN2JiNjAzMDUxwqAgcHV0dHktMC42NC50YXIuZ3omcXVvdDs8YnI+DQorbWQ1c3Vtcz0mcXVv dDs3NWZmNzExZThiN2NjOWUwMDczYmM1MTFlMWMxYzE0YcKgIHB1dHR5LTAuNjQudGFyLmd6PGJy Pg0KK2RmZGM2ZDZmNTJlMzM4MTFjZTcyZjZmMTYxNGY3MWU4wqAgQ1ZFLTIwMTUtNTMwOS5wYXRj aCZxdW90Ozxicj4NCitzaGEyNTZzdW1zPSZxdW90OzJhNDZjOTdhMTg0MTQ0ZTNlYzIzOTJhY2E5 YWNjNjRkMDYyMzE3YTNhMzhiOWE1ZjYyM2ExNDdlZGE1ZjM4MjHCoCBwdXR0eS0wLjY0LnRhci5n ejxicj4NCitiNDlhMjZkMGFkMjU3OGFjYmU3ZTEwNmZhZDAxMGQzMzNjYTA5Y2U1MjcyNzc0ZTRl MmNlMzgwNWYzN2Y5NzgwwqAgQ1ZFLTIwMTUtNTMwOS5wYXRjaCZxdW90Ozxicj4NCitzaGE1MTJz dW1zPSZxdW90O2JhNGQ0MDg2YjhlZGNiNjM4ODkyNGJmM2Q5YjAxODg0MWJlMzZhOWRiZjI5ODI3 MWM5ZDJlZDA2M2FhZTk4NTQwOTNlOWZmNjgwOGJkMWY2NTY2OWQ3ODM2OTU0ODYzOWViM2M5NWZk ZWM1ZTNmMGRhZWU0YjFjN2JiNjAzMDUxwqAgcHV0dHktMC42NC50YXIuZ3o8YnI+DQorNjkyZjA2 ZWQ1M2I4ZDRhNmIzZDA0MWVjZTgzZDBkMzY2MDFkMGZjYWEwYjdhMjA3YjUyZWQ1N2JlMGRlYTEw ODY4MTc4NTQ2NmY2NTU5OWFiODVmNGI4ZDE2NGIwODQ5YzdkMGIzZjBmNTQ5OTk1MTczOTBmMDY1 NDcxNjNlNWHCoCBDVkUtMjAxNS01MzA5LnBhdGNoJnF1b3Q7PGJyPg0KZGlmZiAtLWdpdCBhL21h aW4vcHV0dHkvQ1ZFLTIwMTUtNTMwOS5wYXRjaCBiL21haW4vcHV0dHkvQ1ZFLTIwMTUtNTMwOS5w YXRjaDxicj4NCm5ldyBmaWxlIG1vZGUgMTAwNjQ0PGJyPg0KaW5kZXggMDAwMDAwMC4uMjIyNWIy Yzxicj4NCi0tLSAvZGV2L251bGw8YnI+DQorKysgYi9tYWluL3B1dHR5L0NWRS0yMDE1LTUzMDku cGF0Y2g8YnI+DQpAQCAtMCwwICsxLDI1MCBAQDxicj4NCitGcm9tIDYwNTYzOTZmNzdjYWZjN2U0 MGRhNGQwOWYxZDYyMTI0MDhkY2IwNjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxPGJyPg0KK0Zy b206IEJlbiBIYXJyaXMgJmx0OzxhIGhyZWY9Im1haWx0bzpiamgyMUBiamgyMS5tZS51ayIgdGFy Z2V0PSJfYmxhbmsiPmJqaDIxQGJqaDIxLm1lLnVrPC9hPiZndDs8YnI+DQorRGF0ZTogV2VkLCA3 IE9jdCAyMDE1IDIzOjU0OjM5ICswMTAwPGJyPg0KK1N1YmplY3Q6IFtQQVRDSF0gTW9yZSByb2J1 c3QgY29udHJvbCBzZXF1ZW5jZSBwYXJhbWV0ZXIgaGFuZGxpbmcuPGJyPg0KKzxicj4NCitQYXJh bWV0ZXJzIGFyZSBub3cgYWNjdW11bGF0ZWQgaW4gdW5zaWduZWQgaW50ZWdlcnMgYW5kIGNhcmVm dWxseSBjaGVja2VkPGJyPg0KK2ZvciBvdmVyZmxvdyAod2hpY2ggaXMgdHVybmVkIGludG8gc2F0 dXJhdGlvbikuwqAgVGhpbmdzIHRoYXQgY29uc3VtZSB0aGVtPGJyPg0KK25vdyBoYXZlIGV4cGxp Y2l0IHJhbmdlIGNoZWNrcyAoYWdhaW4sIHNhdHVyYXRpbmcpIHRvIGVuc3VyZSB0aGF0IHRoZWly PGJyPg0KK2lucHV0cyBhcmUgc2FuZS7CoCBUaGlzIHNob3VsZCBtYWtlIGl0IG11Y2ggaGFyZGVy IHRvIGNhdXNlIG92ZXJmbG93IGJ5PGJyPg0KK3N1cHBseWluZyBsdWRpY3JvdXNseSBsYXJnZSBu dW1iZXJzLjxicj4NCis8YnI+DQorRml4ZXMgdHdvIGJ1Z3MgZm91bmQgd2l0aCB0aGUgaGVscCBv ZiBhZmwtZnV6ei7CoCBPbmUgb2YgdGhlbSBtYXkgYmU8YnI+DQorZXhwbG9pdGFibGUgYW5kIGlz IENWRS0yMDE1LTUzMDkuPGJyPg0KKy0tLTxicj4NCisgdGVybWluYWwuYyB8wqAgwqA0OSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tPGJyPg0KKyB0ZXJt aW5hbC5oIHzCoCDCoCAyICstPGJyPg0KKyAyIGZpbGVzIGNoYW5nZWQsIDQ0IGluc2VydGlvbnMo KyksIDcgZGVsZXRpb25zKC0pPGJyPg0KKzxicj4NCitkaWZmIC0tZ2l0IGEvdGVybWluYWwuYyBi L3Rlcm1pbmFsLmM8YnI+DQoraW5kZXggZDhkMGVhMC4uYzdlMjY0NyAxMDA2NDQ8YnI+DQorLS0t IGEvdGVybWluYWwuYzxicj4NCisrKysgYi90ZXJtaW5hbC5jPGJyPg0KK0BAIC01LDYgKzUsNyBA QDxicj4NCisgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7PGJyPg0KKyAjaW5jbHVkZSAmbHQ7c3Rk bGliLmgmZ3Q7PGJyPg0KKyAjaW5jbHVkZSAmbHQ7Y3R5cGUuaCZndDs8YnI+DQorKyNpbmNsdWRl ICZsdDtsaW1pdHMuaCZndDs8YnI+DQorPGJyPg0KKyAjaW5jbHVkZSAmbHQ7dGltZS5oJmd0Ozxi cj4NCisgI2luY2x1ZGUgJmx0O2Fzc2VydC5oJmd0Ozxicj4NCitAQCAtMzQ5Myw4ICszNDk0LDE1 IEBAIHN0YXRpYyB2b2lkIHRlcm1fb3V0KFRlcm1pbmFsICp0ZXJtKTxicj4NCivCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoGlmICh0ZXJtLSZndDtlc2NfbmFyZ3MgJmx0Oz0gQVJHU19NQVgp IHs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiAodGVybS0mZ3Q7 ZXNjX2FyZ3NbdGVybS0mZ3Q7ZXNjX25hcmdzIC0gMV0gPT0gQVJHX0RFRkFVTFQpPGJyPg0KK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdGVybS0mZ3Q7ZXNjX2FyZ3Nb dGVybS0mZ3Q7ZXNjX25hcmdzIC0gMV0gPSAwOzxicj4NCistwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgdGVybS0mZ3Q7ZXNjX2FyZ3NbdGVybS0mZ3Q7ZXNjX25hcmdzIC0gMV0gPTxi cj4NCistwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgMTAgKiB0ZXJtLSZn dDtlc2NfYXJnc1t0ZXJtLSZndDtlc2NfbmFyZ3MgLSAxXSArIGMgLSAmIzM5OzAmIzM5Ozs8YnI+ DQorK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICh0ZXJtLSZndDtlc2NfYXJn c1t0ZXJtLSZndDtlc2NfbmFyZ3MgLSAxXSAmbHQ7PTxicj4NCisrwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgVUlOVF9NQVggLyAxMCAmYW1wOyZhbXA7PGJyPg0KKyvCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0ZXJtLSZndDtlc2NfYXJnc1t0ZXJt LSZndDtlc2NfbmFyZ3MgLSAxXSAqIDEwICZsdDs9PGJyPg0KKyvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBVSU5UX01BWCAtIGMgLSAmIzM5OzAmIzM5Oyk8YnI+DQorK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRlcm0tJmd0O2VzY19hcmdzW3Rl cm0tJmd0O2VzY19uYXJncyAtIDFdID08YnI+DQorK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIDEwICogdGVybS0mZ3Q7ZXNjX2FyZ3NbdGVybS0mZ3Q7ZXNjX25h cmdzIC0gMV0gKzxicj4NCisrwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgYyAtICYjMzk7MCYjMzk7Ozxicj4NCisrwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgZWxzZTxicj4NCisrwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg dGVybS0mZ3Q7ZXNjX2FyZ3NbdGVybS0mZ3Q7ZXNjX25hcmdzIC0gMV0gPSBVSU5UX01BWDs8YnI+ DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgdGVybS0mZ3Q7dGVybXN0YXRlID0gU0VFTl9DU0k7PGJyPg0KK8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgfSBlbHNlIGlmIChjID09ICYjMzk7OyYjMzk7KSB7PGJyPg0KK0BAIC0z NTEwLDggKzM1MTgsMTAgQEAgc3RhdGljIHZvaWQgdGVybV9vdXQoVGVybWluYWwgKnRlcm0pPGJy Pg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdGVybS0mZ3Q7ZXNjX3F1ZXJ5 ID0gYzs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0ZXJtLSZndDt0ZXJtc3Rh dGUgPSBTRUVOX0NTSTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9IGVsc2U8YnI+DQor KyNkZWZpbmUgQ0xBTVAoYXJnLCBsaW0pICgoYXJnKSA9ICgoYXJnKSAmZ3Q7IChsaW0pKSA/IChs aW0pIDogKGFyZykpPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3dpdGNoIChB TlNJKGMsIHRlcm0tJmd0O2VzY19xdWVyeSkpIHs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBjYXNlICYjMzk7QSYjMzk7OsKgIMKgIMKgIMKgLyogQ1VVOiBtb3ZlIHVwIE4g bGluZXMgKi88YnI+DQorK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIENMQU1QKHRl cm0tJmd0O2VzY19hcmdzWzBdLCB0ZXJtLSZndDtyb3dzKTs8YnI+DQorwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBtb3ZlKHRlcm0sIHRlcm0tJmd0O2N1cnMueCw8YnI+DQorwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdGVybS0mZ3Q7Y3Vycy55IC0g ZGVmKHRlcm0tJmd0O2VzY19hcmdzWzBdLCAxKSwgMSk7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgc2Vlbl9kaXNwX2V2ZW50KHRlcm0pOzxicj4NCitAQCAtMzUyMCw2 ICszNTMwLDcgQEAgc3RhdGljIHZvaWQgdGVybV9vdXQoVGVybWluYWwgKnRlcm0pPGJyPg0KK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY29tcGF0aWJpbGl0eShBTlNJKTs8YnI+ DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAvKiBGQUxMVEhST1VHSCAqLzxi cj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNhc2UgJiMzOTtCJiMzOTs6wqAg wqAgwqAgwqAgwqAvKiBDVUQ6IEN1cnNvciBkb3duICovPGJyPg0KKyvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBDTEFNUCh0ZXJtLSZndDtlc2NfYXJnc1swXSwgdGVybS0mZ3Q7cm93 cyk7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbW92ZSh0ZXJtLCB0 ZXJtLSZndDtjdXJzLngsPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHRlcm0tJmd0O2N1cnMueSArIGRlZih0ZXJtLSZndDtlc2NfYXJnc1swXSwgMSksIDEp Ozxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHNlZW5fZGlzcF9ldmVu dCh0ZXJtKTs8YnI+DQorQEAgLTM1MzUsMjMgKzM1NDYsMjcgQEAgc3RhdGljIHZvaWQgdGVybV9v dXQoVGVybWluYWwgKnRlcm0pPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgY29tcGF0aWJpbGl0eShBTlNJKTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAvKiBGQUxMVEhST1VHSCAqLzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoGNhc2UgJiMzOTtDJiMzOTs6wqAgwqAgwqAgwqAgwqAvKiBDVUY6IEN1cnNvciByaWdo dCAqLzxicj4NCisrwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQ0xBTVAodGVybS0m Z3Q7ZXNjX2FyZ3NbMF0sIHRlcm0tJmd0O2NvbHMpOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoG1vdmUodGVybSwgdGVybS0mZ3Q7Y3Vycy54ICsgZGVmKHRlcm0tJmd0 O2VzY19hcmdzWzBdLCAxKSw8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgdGVybS0mZ3Q7Y3Vycy55LCAxKTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBzZWVuX2Rpc3BfZXZlbnQodGVybSk7PGJyPg0KK8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgY2FzZSAmIzM5O0QmIzM5OzrCoCDCoCDCoCDCoC8qIENVQjogbW92ZSBsZWZ0IE4g Y29scyAqLzxicj4NCisrwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQ0xBTVAodGVy bS0mZ3Q7ZXNjX2FyZ3NbMF0sIHRlcm0tJmd0O2NvbHMpOzxicj4NCivCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoG1vdmUodGVybSwgdGVybS0mZ3Q7Y3Vycy54IC0gZGVmKHRlcm0t Jmd0O2VzY19hcmdzWzBdLCAxKSw8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgdGVybS0mZ3Q7Y3Vycy55LCAxKTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBzZWVuX2Rpc3BfZXZlbnQodGVybSk7PGJyPg0KK8KgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgY2FzZSAmIzM5O0UmIzM5OzrCoCDCoCDCoCDCoC8qIENOTDogbW92ZSBkb3du IE4gbGluZXMgYW5kIENSICovPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgY29tcGF0aWJpbGl0eShBTlNJKTs8YnI+DQorK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIENMQU1QKHRlcm0tJmd0O2VzY19hcmdzWzBdLCB0ZXJtLSZndDtyb3dzKTs8YnI+DQor wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBtb3ZlKHRlcm0sIDAsPGJyPg0KK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRlcm0tJmd0O2N1cnMueSAr IGRlZih0ZXJtLSZndDtlc2NfYXJnc1swXSwgMSksIDEpOzxicj4NCivCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHNlZW5fZGlzcF9ldmVudCh0ZXJtKTs8YnI+DQorwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBicmVhazs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBjYXNlICYjMzk7RiYjMzk7OsKgIMKgIMKgIMKgLyogQ1BMOiBtb3ZlIHVw IE4gbGluZXMgYW5kIENSICovPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgY29tcGF0aWJpbGl0eShBTlNJKTs8YnI+DQorK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIENMQU1QKHRlcm0tJmd0O2VzY19hcmdzWzBdLCB0ZXJtLSZndDtyb3dzKTs8YnI+DQor wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBtb3ZlKHRlcm0sIDAsPGJyPg0KK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRlcm0tJmd0O2N1cnMueSAt IGRlZih0ZXJtLSZndDtlc2NfYXJnc1swXSwgMSksIDEpOzxicj4NCivCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHNlZW5fZGlzcF9ldmVudCh0ZXJtKTs8YnI+DQorQEAgLTM1NTks MTIgKzM1NzQsMTQgQEAgc3RhdGljIHZvaWQgdGVybV9vdXQoVGVybWluYWwgKnRlcm0pPGJyPg0K K8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY2FzZSAmIzM5O0cmIzM5OzrCoCDCoCDC oCDCoC8qIENIQSAqLzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNhc2Ug JiMzOTtgJiMzOTs6wqAgwqAgwqAgwqAvKiBIUEE6IHNldCBob3Jpem9udGFsIHBvc24gKi88YnI+ DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjb21wYXRpYmlsaXR5KEFOU0kp Ozxicj4NCisrwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQ0xBTVAodGVybS0mZ3Q7 ZXNjX2FyZ3NbMF0sIHRlcm0tJmd0O2NvbHMpOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoG1vdmUodGVybSwgZGVmKHRlcm0tJmd0O2VzY19hcmdzWzBdLCAxKSAtIDEs PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRlcm0tJmd0 O2N1cnMueSwgMCk7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc2Vl bl9kaXNwX2V2ZW50KHRlcm0pOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoGJyZWFrOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNhc2UgJiMz OTtkJiMzOTs6wqAgwqAgwqAgwqAvKiBWUEE6IHNldCB2ZXJ0aWNhbCBwb3NuICovPGJyPg0KK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY29tcGF0aWJpbGl0eShBTlNJKTs8YnI+ DQorK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIENMQU1QKHRlcm0tJmd0O2VzY19h cmdzWzBdLCB0ZXJtLSZndDtyb3dzKTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBtb3ZlKHRlcm0sIHRlcm0tJmd0O2N1cnMueCw8YnI+DQorwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKCh0ZXJtLSZndDtkZWNfb20gPyB0ZXJtLSZndDtt YXJnX3QgOiAwKSArPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgZGVmKHRlcm0tJmd0O2VzY19hcmdzWzBdLCAxKSAtIDEpLDxicj4NCitAQCAtMzU3NSw2 ICszNTkyLDggQEAgc3RhdGljIHZvaWQgdGVybV9vdXQoVGVybWluYWwgKnRlcm0pPGJyPg0KK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY2FzZSAmIzM5O2YmIzM5OzrCoCDCoCDCoCAv KiBIVlA6IHNldCBob3J6IGFuZCB2ZXJ0IHBvc25zIGF0IG9uY2UgKi88YnI+DQorwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiAodGVybS0mZ3Q7ZXNjX25hcmdzICZsdDsgMik8 YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0ZXJtLSZndDtl c2NfYXJnc1sxXSA9IEFSR19ERUZBVUxUOzxicj4NCisrwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgQ0xBTVAodGVybS0mZ3Q7ZXNjX2FyZ3NbMF0sIHRlcm0tJmd0O3Jvd3MpOzxicj4N CisrwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQ0xBTVAodGVybS0mZ3Q7ZXNjX2Fy Z3NbMV0sIHRlcm0tJmd0O2NvbHMpOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoG1vdmUodGVybSwgZGVmKHRlcm0tJmd0O2VzY19hcmdzWzFdLCAxKSAtIDEsPGJyPg0K K8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICgodGVybS0mZ3Q7ZGVj X29tID8gdGVybS0mZ3Q7bWFyZ190IDogMCkgKzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRlZih0ZXJtLSZndDtlc2NfYXJnc1swXSwgMSkgLSAxKSw8 YnI+DQorQEAgLTM2MTAsNiArMzYyOSw3IEBAIHN0YXRpYyB2b2lkIHRlcm1fb3V0KFRlcm1pbmFs ICp0ZXJtKTxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOzxi cj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNhc2UgJiMzOTtMJiMzOTs6wqAg wqAgwqAgwqAvKiBJTDogaW5zZXJ0IGxpbmVzICovPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgY29tcGF0aWJpbGl0eShWVDEwMik7PGJyPg0KKyvCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBDTEFNUCh0ZXJtLSZndDtlc2NfYXJnc1swXSwgdGVybS0mZ3Q7 cm93cyk7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgKHRlcm0t Jmd0O2N1cnMueSAmbHQ7PSB0ZXJtLSZndDttYXJnX2IpPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc2Nyb2xsKHRlcm0sIHRlcm0tJmd0O2N1cnMueSwgdGVy bS0mZ3Q7bWFyZ19iLDxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCAtZGVmKHRlcm0tJmd0O2VzY19hcmdzWzBdLCAxKSwgRkFMU0UpOzxicj4N CitAQCAtMzYxNyw2ICszNjM3LDcgQEAgc3RhdGljIHZvaWQgdGVybV9vdXQoVGVybWluYWwgKnRl cm0pPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7PGJyPg0K K8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY2FzZSAmIzM5O00mIzM5OzrCoCDCoCDC oCDCoC8qIERMOiBkZWxldGUgbGluZXMgKi88YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBjb21wYXRpYmlsaXR5KFZUMTAyKTs8YnI+DQorK8KgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIENMQU1QKHRlcm0tJmd0O2VzY19hcmdzWzBdLCB0ZXJtLSZndDtyb3dz KTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiAodGVybS0mZ3Q7 Y3Vycy55ICZsdDs9IHRlcm0tJmd0O21hcmdfYik8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBzY3JvbGwodGVybSwgdGVybS0mZ3Q7Y3Vycy55LCB0ZXJtLSZn dDttYXJnX2IsPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGRlZih0ZXJtLSZndDtlc2NfYXJnc1swXSwgMSksPGJyPg0KK0BAIC0zNjI2LDEx ICszNjQ3LDEzIEBAIHN0YXRpYyB2b2lkIHRlcm1fb3V0KFRlcm1pbmFsICp0ZXJtKTxicj4NCivC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNhc2UgJiMzOTtAJiMzOTs6wqAgwqAgwqAg wqAvKiBJQ0g6IGluc2VydCBjaGFycyAqLzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoC8qIFhYWCBWVFRFU1Qgc2F5cyB0aGlzIGlzIHZ0MjIwLCB2dDUxMCBtYW51YWwg c2F5cyB2dDEwMiAqLzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNv bXBhdGliaWxpdHkoVlQxMDIpOzxicj4NCisrwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgQ0xBTVAodGVybS0mZ3Q7ZXNjX2FyZ3NbMF0sIHRlcm0tJmd0O2NvbHMpOzxicj4NCivCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGluc2NoKHRlcm0sIGRlZih0ZXJtLSZndDtl c2NfYXJnc1swXSwgMSkpOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oHNlZW5fZGlzcF9ldmVudCh0ZXJtKTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBicmVhazs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjYXNl ICYjMzk7UCYjMzk7OsKgIMKgIMKgIMKgLyogRENIOiBkZWxldGUgY2hhcnMgKi88YnI+DQorwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjb21wYXRpYmlsaXR5KFZUMTAyKTs8YnI+ DQorK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIENMQU1QKHRlcm0tJmd0O2VzY19h cmdzWzBdLCB0ZXJtLSZndDtjb2xzKTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBpbnNjaCh0ZXJtLCAtZGVmKHRlcm0tJmd0O2VzY19hcmdzWzBdLCAxKSk7PGJyPg0K K8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc2Vlbl9kaXNwX2V2ZW50KHRlcm0p Ozxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOzxicj4NCitA QCAtMzcwOCw2ICszNzMxLDggQEAgc3RhdGljIHZvaWQgdGVybV9vdXQoVGVybWluYWwgKnRlcm0p PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY29tcGF0aWJpbGl0eShW VDEwMCk7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgKHRlcm0t Jmd0O2VzY19uYXJncyAmbHQ7PSAyKSB7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgaW50IHRvcCwgYm90Ozxicj4NCisrwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgQ0xBTVAodGVybS0mZ3Q7ZXNjX2FyZ3NbMF0sIHRlcm0tJmd0O3Jv d3MpOzxicj4NCisrwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQ0xBTVAo dGVybS0mZ3Q7ZXNjX2FyZ3NbMV0sIHRlcm0tJmd0O3Jvd3MpOzxicj4NCivCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRvcCA9IGRlZih0ZXJtLSZndDtlc2NfYXJnc1sw XSwgMSkgLSAxOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oGJvdCA9ICh0ZXJtLSZndDtlc2NfbmFyZ3MgJmx0Oz0gMTxicj4NCivCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8fCB0ZXJtLSZndDtlc2NfYXJnc1sx XSA9PSAwID88YnI+DQorQEAgLTQwNjIsNiArNDA4Nyw3IEBAIHN0YXRpYyB2b2lkIHRlcm1fb3V0 KFRlcm1pbmFsICp0ZXJtKTxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oH08YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBicmVhazs8YnI+DQor wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjYXNlICYjMzk7UyYjMzk7OsKgIMKgIMKg IMKgIMKgLyogU1U6IFNjcm9sbCB1cCAqLzxicj4NCisrwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgQ0xBTVAodGVybS0mZ3Q7ZXNjX2FyZ3NbMF0sIHRlcm0tJmd0O3Jvd3MpOzxicj4N CivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNvbXBhdGliaWxpdHkoU0NPQU5T SSk7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc2Nyb2xsKHRlcm0s IHRlcm0tJmd0O21hcmdfdCwgdGVybS0mZ3Q7bWFyZ19iLDxicj4NCivCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkZWYodGVybS0mZ3Q7ZXNjX2FyZ3NbMF0sIDEp LCBUUlVFKTs8YnI+DQorQEAgLTQwNjksNiArNDA5NSw3IEBAIHN0YXRpYyB2b2lkIHRlcm1fb3V0 KFRlcm1pbmFsICp0ZXJtKTxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oHNlZW5fZGlzcF9ldmVudCh0ZXJtKTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBicmVhazs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjYXNl ICYjMzk7VCYjMzk7OsKgIMKgIMKgIMKgIMKgLyogU0Q6IFNjcm9sbCBkb3duICovPGJyPg0KKyvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBDTEFNUCh0ZXJtLSZndDtlc2NfYXJnc1sw XSwgdGVybS0mZ3Q7cm93cyk7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgY29tcGF0aWJpbGl0eShTQ09BTlNJKTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBzY3JvbGwodGVybSwgdGVybS0mZ3Q7bWFyZ190LCB0ZXJtLSZndDttYXJnX2Is PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC1kZWYo dGVybS0mZ3Q7ZXNjX2FyZ3NbMF0sIDEpLCBUUlVFKTs8YnI+DQorQEAgLTQxMTEsNiArNDEzOCw3 IEBAIHN0YXRpYyB2b2lkIHRlcm1fb3V0KFRlcm1pbmFsICp0ZXJtKTxicj4NCivCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC8qIFhYWCBWVFRFU1Qgc2F5cyB0aGlzIGlzIHZ0MjIw LCB2dDUxMCBtYW51YWw8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg KiBzYXlzIHZ0MTAwICovPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg Y29tcGF0aWJpbGl0eShBTlNJTUlOKTs8YnI+DQorK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIENMQU1QKHRlcm0tJmd0O2VzY19hcmdzWzBdLCB0ZXJtLSZndDtjb2xzKTs8YnI+DQor wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB7PGJyPg0KK8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaW50IG4gPSBkZWYodGVybS0mZ3Q7ZXNjX2FyZ3Nb MF0sIDEpOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHBv cyBjdXJzcGx1czs8YnI+DQorQEAgLTQxNDQsNiArNDE3Miw3IEBAIHN0YXRpYyB2b2lkIHRlcm1f b3V0KFRlcm1pbmFsICp0ZXJtKTxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoGJyZWFrOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNhc2UgJiMz OTtaJiMzOTs6wqAgwqAgwqAgwqAgwqAvKiBDQlQgKi88YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBjb21wYXRpYmlsaXR5KE9USEVSKTs8YnI+DQorK8KgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIENMQU1QKHRlcm0tJmd0O2VzY19hcmdzWzBdLCB0ZXJtLSZn dDtjb2xzKTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB7PGJyPg0K K8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaW50IGkgPSBkZWYodGVy bS0mZ3Q7ZXNjX2FyZ3NbMF0sIDEpOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoHBvcyBvbGRfY3VycyA9IHRlcm0tJmd0O2N1cnM7PGJyPg0KK0BAIC00MjA0 LDcgKzQyMzMsNyBAQCBzdGF0aWMgdm9pZCB0ZXJtX291dChUZXJtaW5hbCAqdGVybSk8YnI+DQor wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBicmVhazs8YnI+DQorwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjYXNlIEFOU0koJiMzOTtGJiMzOTssICYjMzk7PSYjMzk7 KTrCoCDCoCDCoCAvKiBzZXQgbm9ybWFsIGZvcmVncm91bmQgKi88YnI+DQorwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjb21wYXRpYmlsaXR5KFNDT0FOU0kpOzxicj4NCistwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHRlcm0tJmd0O2VzY19hcmdzWzBdICZn dDs9IDAgJmFtcDsmYW1wOyB0ZXJtLSZndDtlc2NfYXJnc1swXSAmbHQ7IDE2KSB7PGJyPg0KKyvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAodGVybS0mZ3Q7ZXNjX2FyZ3NbMF0g Jmx0OyAxNikgezxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oGxvbmcgY29sb3VyID08YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAoc2NvMmFuc2ljb2xvdXJbdGVybS0mZ3Q7ZXNjX2FyZ3NbMF0gJmFtcDsgMHg3 XSB8PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg ICh0ZXJtLSZndDtlc2NfYXJnc1swXSAmYW1wOyAweDgpKSAmbHQ7Jmx0Ozxicj4NCitAQCAtNDIx OCw3ICs0MjQ3LDcgQEAgc3RhdGljIHZvaWQgdGVybV9vdXQoVGVybWluYWwgKnRlcm0pPGJyPg0K K8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7PGJyPg0KK8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY2FzZSBBTlNJKCYjMzk7RyYjMzk7LCAmIzM5Oz0mIzM5 Oyk6wqAgwqAgwqAgLyogc2V0IG5vcm1hbCBiYWNrZ3JvdW5kICovPGJyPg0KK8KgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY29tcGF0aWJpbGl0eShTQ09BTlNJKTs8YnI+DQorLcKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICh0ZXJtLSZndDtlc2NfYXJnc1swXSAm Z3Q7PSAwICZhbXA7JmFtcDsgdGVybS0mZ3Q7ZXNjX2FyZ3NbMF0gJmx0OyAxNikgezxicj4NCisr wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHRlcm0tJmd0O2VzY19hcmdzWzBd ICZsdDsgMTYpIHs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBsb25nIGNvbG91ciA9PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgKHNjbzJhbnNpY29sb3VyW3Rlcm0tJmd0O2VzY19hcmdzWzBdICZhbXA7IDB4 N10gfDxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCAodGVybS0mZ3Q7ZXNjX2FyZ3NbMF0gJmFtcDsgMHg4KSkgJmx0OyZsdDs8YnI+DQorQEAgLTQz NDIsNyArNDM3MSwxMSBAQCBzdGF0aWMgdm9pZCB0ZXJtX291dChUZXJtaW5hbCAqdGVybSk8YnI+ DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjYXNlICYjMzk7NyYjMzk7Ojxicj4NCivCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNhc2UgJiMzOTs4JiMzOTs6PGJyPg0KK8KgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgY2FzZSAmIzM5OzkmIzM5Ozo8YnI+DQorLcKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHRlcm0tJmd0O2VzY19hcmdzWzBdID0gMTAgKiB0ZXJtLSZndDtlc2NfYXJnc1sw XSArIGMgLSAmIzM5OzAmIzM5Ozs8YnI+DQorK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlm ICh0ZXJtLSZndDtlc2NfYXJnc1swXSAmbHQ7PSBVSU5UX01BWCAvIDEwICZhbXA7JmFtcDs8YnI+ DQorK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRlcm0tJmd0O2VzY19hcmdzWzBd ICogMTAgJmx0Oz0gVUlOVF9NQVggLSBjIC0gJiMzOTswJiMzOTspPGJyPg0KKyvCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0ZXJtLSZndDtlc2NfYXJnc1swXSA9IDEwICogdGVybS0m Z3Q7ZXNjX2FyZ3NbMF0gKyBjIC0gJiMzOTswJiMzOTs7PGJyPg0KKyvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBlbHNlPGJyPg0KKyvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0 ZXJtLSZndDtlc2NfYXJnc1swXSA9IFVJTlRfTUFYOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGJyZWFrOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNhc2UgJiMz OTtMJiMzOTs6PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLyo8YnI+DQorQEAg LTQ0MjQsNyArNDQ1NywxMSBAQCBzdGF0aWMgdm9pZCB0ZXJtX291dChUZXJtaW5hbCAqdGVybSk8 YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjYXNlICYjMzk7NyYjMzk7Ojxicj4NCivC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNhc2UgJiMzOTs4JiMzOTs6PGJyPg0KK8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgY2FzZSAmIzM5OzkmIzM5Ozo8YnI+DQorLcKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHRlcm0tJmd0O2VzY19hcmdzWzBdID0gMTAgKiB0ZXJtLSZndDtlc2NfYXJn c1swXSArIGMgLSAmIzM5OzAmIzM5Ozs8YnI+DQorK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGlmICh0ZXJtLSZndDtlc2NfYXJnc1swXSAmbHQ7PSBVSU5UX01BWCAvIDEwICZhbXA7JmFtcDs8 YnI+DQorK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRlcm0tJmd0O2VzY19hcmdz WzBdICogMTAgJmx0Oz0gVUlOVF9NQVggLSBjIC0gJiMzOTswJiMzOTspPGJyPg0KKyvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0ZXJtLSZndDtlc2NfYXJnc1swXSA9IDEwICogdGVy bS0mZ3Q7ZXNjX2FyZ3NbMF0gKyBjIC0gJiMzOTswJiMzOTs7PGJyPg0KKyvCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBlbHNlPGJyPg0KKyvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCB0ZXJtLSZndDtlc2NfYXJnc1swXSA9IFVJTlRfTUFYOzxicj4NCivCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoGJyZWFrOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRlZmF1 bHQ6PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdGVybS0mZ3Q7dGVybXN0YXRl ID0gT1NDX1NUUklORzs8YnI+DQorZGlmZiAtLWdpdCBhL3Rlcm1pbmFsLmggYi90ZXJtaW5hbC5o PGJyPg0KK2luZGV4IDEzNWVmNDUuLjAxZDVmNTcgMTAwNjQ0PGJyPg0KKy0tLSBhL3Rlcm1pbmFs Lmg8YnI+DQorKysrIGIvdGVybWluYWwuaDxicj4NCitAQCAtMTcyLDcgKzE3Miw3IEBAIHN0cnVj dCB0ZXJtaW5hbF90YWcgezxicj4NCisgI2RlZmluZSBBUkdTX01BWCAzMsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIC8qIG1heCAjIG9mIGVzYyBzZXF1ZW5jZSBhcmd1bWVudHMgKi88YnI+DQor ICNkZWZpbmUgQVJHX0RFRkFVTFQgMMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8qIGlmIGFuIGFy ZyBpc24mIzM5O3Qgc3BlY2lmaWVkICovPGJyPg0KKyAjZGVmaW5lIGRlZihhLGQpICggKGEpID09 IEFSR19ERUZBVUxUID8gKGQpIDogKGEpICk8YnI+DQorLcKgIMKgIGludCBlc2NfYXJnc1tBUkdT X01BWF07PGJyPg0KKyvCoCDCoCB1bnNpZ25lZCBlc2NfYXJnc1tBUkdTX01BWF07PGJyPg0KK8Kg IMKgIMKgaW50IGVzY19uYXJnczs8YnI+DQorwqAgwqAgwqBpbnQgZXNjX3F1ZXJ5Ozxicj4NCisg I2RlZmluZSBBTlNJKHgseSnCoCDCoCDCoCgoeCkrKCh5KSZsdDsmbHQ7OCkpPGJyPg0KKy0tPGJy Pg0KKzEuNy4xMC40PGJyPg0KKzxicj4NCi0tPGJyPg0KMi42LjI8YnI+DQo8YnI+DQo8L2Jsb2Nr cXVvdGU+PC9kaXY+PC9kaXY+DQo= --047d7beb9458fb8c880525ee97ac-- --- Unsubscribe: alpine-aports+unsubscribe@lists.alpinelinux.org Help: alpine-aports+help@lists.alpinelinux.org ---