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 1vEIzl-009ic6-H3 for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Oct 2025 03:06:37 +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 1vEIzk-005PxM-Fu for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Oct 2025 03:06:35 +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 1vEIzj-005PxE-PW for pgsql-hackers@lists.postgresql.org; Thu, 30 Oct 2025 03:06:35 +0000 Received: from mail-yx1-xb130.google.com ([2607:f8b0:4864:20::b130]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vEIzf-004UdP-1O for pgsql-hackers@postgresql.org; Thu, 30 Oct 2025 03:06:33 +0000 Received: by mail-yx1-xb130.google.com with SMTP id 956f58d0204a3-63e330a1360so735003d50.3 for ; Wed, 29 Oct 2025 20:06:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761793590; x=1762398390; darn=postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=rlp1eRH1cxoN5vrXM/x0i9gS6l/eaK4rpichcNdgTZk=; b=KVbw9bi6IU9fKL6gRMl6e//6xwNR2SP2+eLMohFb9t2yO8y030lnABohjdNcG4Eg1k lnqXljjLW8EyEb5hnSc6bCqP0MtI1qDcClPFAE1cL6kSMWhqcds3mKNLNC0TwmxBljin NCfw09fhguQrpjPYXQcaACh/ZFoqh9nj6PGtN1S8O1KP++3movvRVQpBWD3zv9d+Ic6I I/rJN6vbU+NuTclVUgLq/Wbs2QBq0Crn1xO+PJL8ss/bstxk9vf2gpw4IRlSfm+rybjX x4eR9jF0x69d7Fs4JRgbpO8nAHq7fAbv12Irhsv++BAA9Lf3ucH5toWUTSb6+wPDofIw 66Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761793590; x=1762398390; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=rlp1eRH1cxoN5vrXM/x0i9gS6l/eaK4rpichcNdgTZk=; b=iqp32CfihfuCaW3NhviwF9Yg0Y55RYztIroQ60LnTLpRJ1KWPTqOqb4BDIooXe2CCr DBPKLNxJGRnZ/XrsLIi9jVZMXFQmr6QnBXHDzUomUCWYHPbGsL3m4I+c8nfUCoG2VKFK v+JTg+wGj+JH7btsP6W7Xwo56+B0x18WtJro0MnnGcz6nYVCMfwD+DPq2yPXhr5sKjwT m9jeOd7SvaogbROAyxJupCYoRi7ibm8mJQGlLdmmro496+xUvjNYlbPkp9dqRA+MXpw+ 11Vt2vNKqI+33lc4ZkkIgb0tVAh2YVh2+9nllvbfjZp7jk8H672ec/Iwnz8mGLJDMRQU 7FfA== X-Forwarded-Encrypted: i=1; AJvYcCUx5BssdgJXjYAcYA4neEhoDhG/6RqLf6TN3xMpDn7oLtKvN2H8CAaYIENPeXgOqrIl7hvR7xJRDZ8j2FZl@postgresql.org X-Gm-Message-State: AOJu0Yx6OP1NyHNuOmgRU5o5vrCTZMPz6o/KcO56wJc9OgMzIoN7i/ms A6K0quVlOp1BwWpi9+3uri6JGjuFOfZ98MqZWVgzSeRsa9K3lEvrncm8 X-Gm-Gg: ASbGncup0+IZ9rxr63HmkmBPg5s7bAxrdwMCeuwhqxLBiJfZC1AEa4UuDfMiiuWdthq fr4RCLcTFzlFJHXAJTwkAzP7JEkHcqdbwInKrBb6ovNJB856vPHnZqBr6d+J3k5j/Fm9pjEqSXG 2lSuDEnvOAtUbV5JPc3GL42VVK6Cs6s5KPkRmZx/sgp3cI0eFTzR9DA69AsD7O8NZdyyYuC8Owx YjXisWFTk9KZpAG1AQZS0uLeiRL18wrAJ5kEGZ2DHbWweGlCLaR6g/Od7N0lZQsm0MOnkTsoTR6 MmQtZas8/d5edxcAsGhZ/nxBpnx7YyvBkvNbqWWTCCrT7bv5M/dmh+po4f1UHoARp+xKE+niz6U jUwZKSszXKladW1+kZoUzzR6vivk6QBRCUl/ClC4VgLh47yM3W6X8raSymgftQW8m0gVsPCfU/U Pp0W8qHbhiEguXsjphU5G+bL3XCmqPuDGkTvdpmqr46jcql2xSfboHAA== X-Google-Smtp-Source: AGHT+IElmuRzffGVeXNyWblRwxeff3T3CizW35FjZ8UPCaAM+Y2diIRPiTYmdahOiVDwTfE/PcFU7Q== X-Received: by 2002:a05:690e:10c4:b0:63e:b48:69c1 with SMTP id 956f58d0204a3-63f76dc751fmr3750235d50.46.1761793590456; Wed, 29 Oct 2025 20:06:30 -0700 (PDT) Received: from ?IPV6:2600:1700:8952:80:9140:3c88:5a9c:1166? ([2600:1700:8952:80:9140:3c88:5a9c:1166]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-63f4c3bc6e3sm4764627d50.3.2025.10.29.20.06.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 29 Oct 2025 20:06:29 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------PZgw3gxKOelH0lyZvnc5y670" Message-ID: <38f24c47-646f-4001-a292-5e671ac453db@gmail.com> Date: Wed, 29 Oct 2025 21:06:30 -0600 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] Add Windows support for backtrace_functions (MSVC only) To: Euler Taveira , =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: Michael Paquier , Jakub Wartak , pgsql-hackers References: <202510281643.xoy2do2in3bw@alvherre.pgsql> Content-Language: en-US From: Bryan Green In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------PZgw3gxKOelH0lyZvnc5y670 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 10/29/2025 6:53 AM, Euler Taveira wrote: > On Tue, Oct 28, 2025, at 1:51 PM, Álvaro Herrera wrote: >> On 2025-Oct-27, Euler Taveira wrote: >> >>> On Mon, Oct 27, 2025, at 2:58 PM, Bryan Green wrote: >>>> Thanks for even glancing at this. I did not add any regression >>>> tests because the output goes to the server log and not the client. >>> >>> Since Michael said WIN32-specific tests and mentioned log pattern, he is >>> referring to TAP tests. You can add src/test/modules/test_backtrace that >>> exercises this code path. >> >> Hmm, are we really sure this is necessary? >> > > Good question. We are testing an external API. Maybe a test in this thread is > enough to convince someone that the code is correct. > Right, attached is v2 with TAP tests added. The test checks whether postgres.pdb exists on disk to figure out what kind of output to expect, then verifies the actual backtrace format matches. This ought to catch the case where the PDB is there but DbgHelp can't load it for some reason, which seems like the most likely failure mode. It also runs a bunch of errors in quick succession to make sure we don't crash or anything. (Can't really detect memory leaks without external tools, so didn't try.)>>> I didn't test your patch but I'm wondering if we could add an >>> abstraction here. I mean invent pg_backtrace() and >>> pg_backtrace_symbols() that maps to the current functions (Unix-like). >> >> Do we really need this? I don't think we're going to add support for >> backtraces anywhere else any time soon, so this looks premature. What >> other programs do you think we have where this would be useful? I have >> a really hard time imagining that things like psql and pg_dump would be >> improved by having backtrace-reporting support. And if we have a single >> place in the code using a facility, then ISTM the platform-specific code >> can live there with no damage. >> > > It was just a suggestion; not a requirement. As you said it would avoid rework > in the future if or when someone decides to use this code in other parts of the > software. I wouldn't propose this change if I knew it was complicated to have a > simple and clean abstraction. > > I am not convinced that we need an abstraction considering our backtrace logic for both platforms is in one place at the moment and not spread throughout the source. I have a hard time imagining this being used anywhere but where it currently is... I am more than happy to do as the community wishes though. The latest patch has tap tests now and I look forward to any guidance the community wishes to provide. Bryan Green --------------PZgw3gxKOelH0lyZvnc5y670 Content-Type: text/plain; charset=UTF-8; name="v2-0001-Add-Windows-support-for-backtrace_functions.patch" Content-Disposition: attachment; filename*0="v2-0001-Add-Windows-support-for-backtrace_functions.patch" Content-Transfer-Encoding: base64 RnJvbSAxYWVkOWE3NTcyYmNkZmJkNzg5YTY5ZWVhNWQ0YTdjN2E0N2IzMDBhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBHcmVlbiA8ZGJyeWFuLmdyZWVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCAyMSBPY3QgMjAyNSAxOTozMToyOSAtMDUwMApTdWJqZWN0OiBb UEFUQ0ggdjJdIEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGJhY2t0cmFjZV9mdW5jdGlvbnMu CgpiYWNrdHJhY2VfZnVuY3Rpb25zIGhhcyBiZWVuIFVuaXgtb25seSB1cCB0byBub3csIGJl Y2F1c2Ugd2UgcmVsaWVkIG9uCmdsaWJjJ3MgYmFja3RyYWNlKCkgb3Igc2ltaWxhciBwbGF0 Zm9ybSBmYWNpbGl0aWVzLiAgV2luZG93cyBkb2Vzbid0IGhhdmUKYW55dGhpbmcgZXF1aXZh bGVudCBpbiBpdHMgc3RhbmRhcmQgQyBsaWJyYXJ5LCBidXQgaXQgZG9lcyBoYXZlIHRoZSBE YmdIZWxwCkFQSSwgd2hpY2ggY2FuIGRvIHRoZSBzYW1lIHRoaW5nIGlmIHlvdSBhc2sgaXQg bmljZWx5LgoKVGhlIHRyaWNreSBiaXQgaXMgdGhhdCBEYmdIZWxwIG5lZWRzIHRvIGJlIGlu aXRpYWxpemVkIHdpdGggU3ltSW5pdGlhbGl6ZSgpCmJlZm9yZSB5b3UgY2FuIHVzZSBpdCwg YW5kIHRoYXQncyBhIGZhaXJseSBleHBlbnNpdmUgb3BlcmF0aW9uLiAgV2UgZG9uJ3QKd2Fu dCB0byBkbyB0aGF0IGV2ZXJ5IHRpbWUgd2UgZ2VuZXJhdGUgYSBiYWNrdHJhY2UuICBGb3J0 dW5hdGVseSwgaXQgdHVybnMKb3V0IHRoYXQgd2UgY2FuIGluaXRpYWxpemUgb25jZSBwZXIg cHJvY2VzcyBhbmQgcmV1c2UgdGhlIGhhbmRsZSwgd2hpY2ggaXMKc2FmZSBzaW5jZSB3ZSdy ZSBob2xkaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrIGR1cmluZyBlcnJvciByZXBvcnRpbmcgYW55 d2F5LgpTbyB0aGUgY29kZSBqdXN0IGluaXRpYWxpemVzIGxhemlseSBvbiBmaXJzdCB1c2Uu CgpJZiBTeW1Jbml0aWFsaXplIGZhaWxzLCB3ZSBkb24ndCBjb25zaWRlciB0aGF0IGFuIGVy cm9yOyB3ZSBqdXN0IHNpbGVudGx5CmRlY2xpbmUgdG8gZ2VuZXJhdGUgYmFja3RyYWNlcy4g IFRoaXMgc2VlbXMgcmVhc29uYWJsZSBzaW5jZSBiYWNrdHJhY2VzIGFyZQphIGRlYnVnZ2lu ZyBhaWQsIG5vdCBjcml0aWNhbCB0byBvcGVyYXRpb24uICBJdCBhbHNvIG1hdGNoZXMgdGhl IGJlaGF2aW9yCm9uIHBsYXRmb3JtcyB3aGVyZSBiYWNrdHJhY2UoKSBpc24ndCBhdmFpbGFi bGUuCgpTeW1ib2wgcmVzb2x1dGlvbiBxdWFsaXR5IGRlcGVuZHMgb24gd2hldGhlciBQREIg ZmlsZXMgYXJlIHByZXNlbnQuICBJZiB0aGV5CmFyZSwgRGJnSGVscCBjYW4gZ2l2ZSB1cyBz b3VyY2UgZmlsZSBwYXRocyBhbmQgbGluZSBudW1iZXJzLCB3aGljaCBpcyBncmVhdC4KSWYg bm90LCBpdCBjYW4gc3RpbGwgZ2l2ZSB1cyBmdW5jdGlvbiBuYW1lcyBieSByZWFkaW5nIHRo ZSBleHBvcnQgdGFibGUsIGFuZAp0aGF0IHR1cm5zIG91dCB0byBiZSBnb29kIGVub3VnaCBi ZWNhdXNlIHBvc3RncmVzLmV4ZSBleHBvcnRzIHRob3VzYW5kcyBvZgpmdW5jdGlvbnMuICAo WW91IGdldCBleHBvcnQgc3ltYm9scyBvbiBXaW5kb3dzIHdoZXRoZXIgeW91IGxpa2UgaXQg b3Igbm90LAp1bmxlc3MgeW91IGdvIG91dCBvZiB5b3VyIHdheSB0byBzdXBwcmVzcyB0aGVt LiAgTWlnaHQgYXMgd2VsbCB0YWtlIGFkdmFudGFnZQpvZiB0aGF0LikgIEZ1bGx5IHN0cmlw cGVkIGJpbmFyaWVzIHdvdWxkIG9ubHkgc2hvdyBhZGRyZXNzZXMsIGJ1dCB0aGF0J3Mgbm90 CmEgc2NlbmFyaW8gdGhhdCBhcHBsaWVzIHRvIFBvc3RncmVzLCBzbyB3ZSBkb24ndCB3b3Jy eSBhYm91dCBpdC4KClRoZSBUQVAgdGVzdCB2ZXJpZmllcyB0aGF0IHN5bWJvbCByZXNvbHV0 aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBib3RoIHRoZQp3aXRoLVBEQiBhbmQgd2l0aG91dC1Q REIgY2FzZXMuICBXZSBoYXZlIHRvIHVzZSBUQVAgYmVjYXVzZSBiYWNrdHJhY2VzIGdvCnRv IHRoZSBzZXJ2ZXIgbG9nLCBub3QgdG8gcHNxbC4gIFRoZSB0ZXN0IGZpZ3VyZXMgb3V0IHdo aWNoIGNhc2Ugc2hvdWxkCmFwcGx5IGJ5IGNoZWNraW5nIHdoZXRoZXIgcG9zdGdyZXMucGRi IGV4aXN0cyBvbiBkaXNrLCB0aGVuIHBhcnNlcyB0aGUKYmFja3RyYWNlIG91dHB1dCB0byBz ZWUgd2hhdCB3ZSBhY3R1YWxseSBnb3QuICBJZiB0aG9zZSBkb24ndCBtYXRjaCwgdGhhdCdz CmEgYnVnLiAgVGhpcyBzaG91bGQgY2F0Y2ggdGhlIGNhc2Ugd2hlcmUgdGhlIFBEQiBleGlz dHMgYnV0IERiZ0hlbHAgZmFpbHMKdG8gbG9hZCBpdCwgd2hpY2ggc2VlbXMgbGlrZSB0aGUg bW9zdCBsaWtlbHkgd2F5IHRoaXMgY291bGQgYnJlYWsuCgpUaGUgdGVzdCBhbHNvIHZlcmlm aWVzIHRoYXQgd2UgY2FuIGdlbmVyYXRlIGEgYnVuY2ggb2YgYmFja3RyYWNlcyBpbiBxdWlj awpzdWNjZXNzaW9uIHdpdGhvdXQgY3Jhc2hpbmcsIHdoaWNoIGlzIHJlYWxseSBqdXN0IGEg YmFzaWMgc2FuaXR5IGNoZWNrLiAgSXQKZG9lc24ndCBhdHRlbXB0IHRvIGRldGVjdCBtZW1v cnkgbGVha3MsIHNpbmNlIHRoYXQgd291bGQgcmVxdWlyZSBleHRlcm5hbAp0b29scyB3ZSBk b24ndCB3YW50IHRvIGRlcGVuZCBvbi4KCkF1dGhvcjogQnJ5YW4gR3JlZW4KLS0tCiBzcmMv YmFja2VuZC9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUgKwogc3Jj L2JhY2tlbmQvdXRpbHMvZXJyb3IvZWxvZy5jICAgICAgICAgICAgICAgIHwgMTc0ICsrKysr KysKIHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL01ha2VmaWxlICAgICAgfCAg MzMgKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvUkVBRE1FICAgICAgICB8 IDIyNCArKysrKysrKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvbWVzb24u YnVpbGQgICB8ICAxMyArCiAuLi4vdGVzdF9iYWNrdHJhY2UvdC90X3dpbmRvd3NfYmFja3Ry YWNlLnBsICAgfCA0MjggKysrKysrKysrKysrKysrKysrCiAuLi4vdGVzdF9iYWNrdHJhY2Uv dGVzdF9iYWNrdHJhY2UtLTEuMC5zcWwgICAgfCAgNjYgKysrCiAuLi4vdGVzdF9iYWNrdHJh Y2UvdGVzdF9iYWNrdHJhY2UuY29udHJvbCAgICAgfCAgIDUgKwogOSBmaWxlcyBjaGFuZ2Vk LCA5NDkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9iYWNrdHJhY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL1JFQURNRQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL3QvdF93aW5kb3dzX2Jh Y2t0cmFjZS5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9i YWNrdHJhY2UvdGVzdF9iYWNrdHJhY2UtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL3Rlc3RfYmFja3RyYWNlLmNvbnRyb2wK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL21l c29uLmJ1aWxkCmluZGV4IGI4MzFhNTQxNjUuLmVlYjY5YzQwNzkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL21lc29uLmJ1aWxkCkBA IC0xLDYgKzEsMTEgQEAKICMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjUsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAKIGJhY2tlbmRfYnVpbGRfZGVwcyA9IFtiYWNr ZW5kX2NvZGVdCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJyBhbmQgY2MuZ2V0X2lk KCkgPT0gJ21zdmMnCisgIGJhY2tlbmRfYnVpbGRfZGVwcyArPSBjYy5maW5kX2xpYnJhcnko J2RiZ2hlbHAnKQorZW5kaWYKKwogYmFja2VuZF9zb3VyY2VzID0gW10KIGJhY2tlbmRfbGlu a193aXRoID0gW3BncG9ydF9zcnYsIGNvbW1vbl9zcnZdCiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2Vycm9yL2Vsb2cuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Vycm9yL2Vs b2cuYwppbmRleCAyOTY0M2M1MTQzLi5mYzQyMWNlNDQ0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9lcnJvci9lbG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3Iv ZWxvZy5jCkBAIC0xNDAsNiArMTQwLDEzIEBAIHN0YXRpYyB2b2lkIHdyaXRlX3N5c2xvZyhp bnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmxpbmUpOwogc3RhdGljIHZvaWQgd3JpdGVfZXZlbnRs b2coaW50IGxldmVsLCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKTsKICNlbmRpZgogCisj aWZkZWYgX01TQ19WRVIKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8ZGJnaGVs cC5oPgorc3RhdGljIGJvb2wgd2luMzJfYmFja3RyYWNlX3N5bWJvbHNfaW5pdGlhbGl6ZWQg PSBmYWxzZTsKK3N0YXRpYyBIQU5ETEUgd2luMzJfYmFja3RyYWNlX3Byb2Nlc3MgPSBOVUxM OworI2VuZGlmCisKIC8qIFdlIHByb3ZpZGUgYSBzbWFsbCBzdGFjayBvZiBFcnJvckRhdGEg cmVjb3JkcyBmb3IgcmUtZW50cmFudCBjYXNlcyAqLwogI2RlZmluZSBFUlJPUkRBVEFfU1RB Q0tfU0laRSAgNQogCkBAIC0xMTE2LDYgKzExMjMsMTggQEAgZXJyYmFja3RyYWNlKHZvaWQp CiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBfTVNDX1ZFUgorLyoKKyAqIENsZWFudXAgZnVu Y3Rpb24gZm9yIERiZ0hlbHAgcmVzb3VyY2VzLgorICogQ2FsbGVkIHZpYSBvbl9wcm9jX2V4 aXQoKSB0byByZWxlYXNlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgU3ltSW5pdGlhbGl6ZSgp LgorICovCitzdGF0aWMgdm9pZAord2luMzJfYmFja3RyYWNlX2NsZWFudXAoaW50IGNvZGUs IERhdHVtIGFyZykKK3sKKwlTeW1DbGVhbnVwKHdpbjMyX2JhY2t0cmFjZV9wcm9jZXNzKTsK K30KKyNlbmRpZgorCiAvKgogICogQ29tcHV0ZSBiYWNrdHJhY2UgZGF0YSBhbmQgYWRkIGl0 IHRvIHRoZSBzdXBwbGllZCBFcnJvckRhdGEuICBudW1fc2tpcAogICogc3BlY2lmaWVzIGhv dyBtYW55IGlubmVyIGZyYW1lcyB0byBza2lwLiAgVXNlIHRoaXMgdG8gYXZvaWQgc2hvd2lu ZyB0aGUKQEAgLTExNDcsNiArMTE2NiwxNjEgQEAgc2V0X2JhY2t0cmFjZShFcnJvckRhdGEg KmVkYXRhLCBpbnQgbnVtX3NraXApCiAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZlcnJ0 cmFjZSwKIAkJCQkJCQkJICAgImluc3VmZmljaWVudCBtZW1vcnkgZm9yIGJhY2t0cmFjZSBn ZW5lcmF0aW9uIik7CiAJfQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKwl7CisJCXZvaWQJ ICAgKnN0YWNrWzEwMF07CisJCURXT1JECQlmcmFtZXM7CisJCURXT1JECQlpOworCQl3Y2hh cl90CQlidWZmZXJbc2l6ZW9mKFNZTUJPTF9JTkZPVykgKyBNQVhfU1lNX05BTUUgKiBzaXpl b2Yod2NoYXJfdCldOworCQlQU1lNQk9MX0lORk9XIHN5bWJvbDsKKwkJY2hhcgkgICAqdXRm OF9idWZmZXI7CisJCWludAkJCXV0ZjhfbGVuOworCisJCWlmICghd2luMzJfYmFja3RyYWNl X3N5bWJvbHNfaW5pdGlhbGl6ZWQpCisJCXsKKwkJCXdpbjMyX2JhY2t0cmFjZV9wcm9jZXNz ID0gR2V0Q3VycmVudFByb2Nlc3MoKTsKKworCQkJU3ltU2V0T3B0aW9ucyhTWU1PUFRfVU5E TkFNRSB8CisJCQkJCQkgIFNZTU9QVF9ERUZFUlJFRF9MT0FEUyB8CisJCQkJCQkgIFNZTU9Q VF9MT0FEX0xJTkVTIHwKKwkJCQkJCSAgU1lNT1BUX0ZBSUxfQ1JJVElDQUxfRVJST1JTKTsK KworCQkJaWYgKFN5bUluaXRpYWxpemUod2luMzJfYmFja3RyYWNlX3Byb2Nlc3MsIE5VTEws IFRSVUUpKQorCQkJeworCQkJCXdpbjMyX2JhY2t0cmFjZV9zeW1ib2xzX2luaXRpYWxpemVk ID0gdHJ1ZTsKKwkJCQlvbl9wcm9jX2V4aXQod2luMzJfYmFja3RyYWNlX2NsZWFudXAsIDAp OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURXT1JECQllcnJvciA9IEdldExhc3RFcnJv cigpOworCisJCQkJZWxvZyhXQVJOSU5HLCAiU3ltSW5pdGlhbGl6ZSBmYWlsZWQgd2l0aCBl cnJvciAlbHUiLCBlcnJvcik7CisJCQl9CisJCX0KKworCQlmcmFtZXMgPSBDYXB0dXJlU3Rh Y2tCYWNrVHJhY2UobnVtX3NraXAsIGxlbmd0aG9mKHN0YWNrKSwgc3RhY2ssIE5VTEwpOwor CisJCWlmIChmcmFtZXMgPT0gMCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm ZXJydHJhY2UsICJcbk5vIHN0YWNrIGZyYW1lcyBjYXB0dXJlZCIpOworCQkJZWRhdGEtPmJh Y2t0cmFjZSA9IGVycnRyYWNlLmRhdGE7CisJCQlyZXR1cm47CisJCX0KKworCQlzeW1ib2wg PSAoUFNZTUJPTF9JTkZPVykgYnVmZmVyOworCQlzeW1ib2wJICAtPk1heE5hbWVMZW4gPSBN QVhfU1lNX05BTUU7CisJCXN5bWJvbAkgIC0+U2l6ZU9mU3RydWN0ID0gc2l6ZW9mKFNZTUJP TF9JTkZPVyk7CisKKwkJZm9yIChpID0gMDsgaSA8IGZyYW1lczsgaSsrKQorCQl7CisJCQlE V09SRDY0CQlhZGRyZXNzID0gKERXT1JENjQpIChzdGFja1tpXSk7CisJCQlEV09SRDY0CQlk aXNwbGFjZW1lbnQgPSAwOworCQkJQk9PTAkJc3ltX3Jlc3VsdDsKKworCQkJc3ltX3Jlc3Vs dCA9IFN5bUZyb21BZGRyVyh3aW4zMl9iYWNrdHJhY2VfcHJvY2VzcywKKwkJCQkJCQkJCSAg YWRkcmVzcywKKwkJCQkJCQkJCSAgJmRpc3BsYWNlbWVudCwKKwkJCQkJCQkJCSAgc3ltYm9s KTsKKworCQkJaWYgKHN5bV9yZXN1bHQpCisJCQl7CisJCQkJSU1BR0VITFBfTElORVc2NCBs aW5lOworCQkJCURXT1JECQlsaW5lX2Rpc3BsYWNlbWVudCA9IDA7CisKKwkJCQlsaW5lLlNp emVPZlN0cnVjdCA9IHNpemVvZihJTUFHRUhMUF9MSU5FVzY0KTsKKworCQkJCWlmIChTeW1H ZXRMaW5lRnJvbUFkZHJXNjQod2luMzJfYmFja3RyYWNlX3Byb2Nlc3MsCisJCQkJCQkJCQkJ ICBhZGRyZXNzLAorCQkJCQkJCQkJCSAgJmxpbmVfZGlzcGxhY2VtZW50LAorCQkJCQkJCQkJ CSAgJmxpbmUpKQorCQkJCXsKKwkJCQkJLyogQ29udmVydCBzeW1ib2wgbmFtZSB0byBVVEYt OCAqLworCQkJCQl1dGY4X2xlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfVVRGOCwgMCwg c3ltYm9sLT5OYW1lLCAtMSwKKwkJCQkJCQkJCQkJCSAgIE5VTEwsIDAsIE5VTEwsIE5VTEwp OworCQkJCQlpZiAodXRmOF9sZW4gPiAwKQorCQkJCQl7CisJCQkJCQljaGFyCSAgICpmaWxl bmFtZV91dGY4OworCQkJCQkJaW50CQkJZmlsZW5hbWVfbGVuOworCisJCQkJCQl1dGY4X2J1 ZmZlciA9IHBhbGxvYyh1dGY4X2xlbik7CisJCQkJCQlXaWRlQ2hhclRvTXVsdGlCeXRlKENQ X1VURjgsIDAsIHN5bWJvbC0+TmFtZSwgLTEsCisJCQkJCQkJCQkJCXV0ZjhfYnVmZmVyLCB1 dGY4X2xlbiwgTlVMTCwgTlVMTCk7CisKKwkJCQkJCS8qIENvbnZlcnQgZmlsZSBuYW1lIHRv IFVURi04ICovCisJCQkJCQlmaWxlbmFtZV9sZW4gPSBXaWRlQ2hhclRvTXVsdGlCeXRlKENQ X1VURjgsIDAsCisJCQkJCQkJCQkJCQkJCSAgIGxpbmUuRmlsZU5hbWUsIC0xLAorCQkJCQkJ CQkJCQkJCQkgICBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKwkJCQkJCWlmIChmaWxlbmFtZV9s ZW4gPiAwKQorCQkJCQkJeworCQkJCQkJCWZpbGVuYW1lX3V0ZjggPSBwYWxsb2MoZmlsZW5h bWVfbGVuKTsKKwkJCQkJCQlXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAsIGxpbmUu RmlsZU5hbWUsIC0xLAorCQkJCQkJCQkJCQkJZmlsZW5hbWVfdXRmOCwgZmlsZW5hbWVfbGVu LAorCQkJCQkJCQkJCQkJTlVMTCwgTlVMTCk7CisKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZv KCZlcnJ0cmFjZSwKKwkJCQkJCQkJCQkJICJcbiVzKzB4JWxseCBbJXM6JWx1XSIsCisJCQkJ CQkJCQkJCSB1dGY4X2J1ZmZlciwKKwkJCQkJCQkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcp IGRpc3BsYWNlbWVudCwKKwkJCQkJCQkJCQkJIGZpbGVuYW1lX3V0ZjgsCisJCQkJCQkJCQkJ CSAodW5zaWduZWQgbG9uZykgbGluZS5MaW5lTnVtYmVyKTsKKworCQkJCQkJCXBmcmVlKGZp bGVuYW1lX3V0ZjgpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCWFw cGVuZFN0cmluZ0luZm8oJmVycnRyYWNlLAorCQkJCQkJCQkJCQkgIlxuJXMrMHglbGx4IFsw eCVsbHhdIiwKKwkJCQkJCQkJCQkJIHV0ZjhfYnVmZmVyLAorCQkJCQkJCQkJCQkgKHVuc2ln bmVkIGxvbmcgbG9uZykgZGlzcGxhY2VtZW50LAorCQkJCQkJCQkJCQkgKHVuc2lnbmVkIGxv bmcgbG9uZykgYWRkcmVzcyk7CisJCQkJCQl9CisKKwkJCQkJCXBmcmVlKHV0ZjhfYnVmZmVy KTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8qIENvbnZlcnNpb24gZmFp bGVkLCB1c2UgYWRkcmVzcyBvbmx5ICovCisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJ0 cmFjZSwKKwkJCQkJCQkJCQkgIlxuWzB4JWxseF0iLAorCQkJCQkJCQkJCSAodW5zaWduZWQg bG9uZyBsb25nKSBhZGRyZXNzKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJewor CQkJCQkvKiBObyBsaW5lIGluZm8sIGNvbnZlcnQgc3ltYm9sIG5hbWUgb25seSAqLworCQkJ CQl1dGY4X2xlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfVVRGOCwgMCwgc3ltYm9sLT5O YW1lLCAtMSwKKwkJCQkJCQkJCQkJCSAgIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworCQkJCQlp ZiAodXRmOF9sZW4gPiAwKQorCQkJCQl7CisJCQkJCQl1dGY4X2J1ZmZlciA9IHBhbGxvYyh1 dGY4X2xlbik7CisJCQkJCQlXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAsIHN5bWJv bC0+TmFtZSwgLTEsCisJCQkJCQkJCQkJCXV0ZjhfYnVmZmVyLCB1dGY4X2xlbiwgTlVMTCwg TlVMTCk7CisKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmVycnRyYWNlLAorCQkJCQkJCQkJ CSAiXG4lcysweCVsbHggWzB4JWxseF0iLAorCQkJCQkJCQkJCSB1dGY4X2J1ZmZlciwKKwkJ CQkJCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgZGlzcGxhY2VtZW50LAorCQkJCQkJCQkJ CSAodW5zaWduZWQgbG9uZyBsb25nKSBhZGRyZXNzKTsKKworCQkJCQkJcGZyZWUodXRmOF9i dWZmZXIpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLyogQ29udmVyc2lv biBmYWlsZWQsIHVzZSBhZGRyZXNzIG9ubHkgKi8KKwkJCQkJCWFwcGVuZFN0cmluZ0luZm8o JmVycnRyYWNlLAorCQkJCQkJCQkJCSAiXG5bMHglbGx4XSIsCisJCQkJCQkJCQkJICh1bnNp Z25lZCBsb25nIGxvbmcpIGFkZHJlc3MpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxz ZQorCQkJeworCQkJCWFwcGVuZFN0cmluZ0luZm8oJmVycnRyYWNlLAorCQkJCQkJCQkgIlxu WzB4JWxseF0iLAorCQkJCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgYWRkcmVzcyk7CisJ CQl9CisJCX0KKwl9CiAjZWxzZQogCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmVycnRyYWNl LAogCQkJCQkJICAgImJhY2t0cmFjZSBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkg dGhpcyBpbnN0YWxsYXRpb24iKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVz b24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDE0ZmM3NjFj NGMuLmNjYjYzZjJiNTcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVp bGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApAQCAtMTQsNiArMTQsNyBA QCBzdWJkaXIoJ3Bsc2FtcGxlJykKIHN1YmRpcignc3BnaXN0X25hbWVfb3BzJykKIHN1YmRp cignc3NsX3Bhc3NwaHJhc2VfY2FsbGJhY2snKQogc3ViZGlyKCd0ZXN0X2FpbycpCitzdWJk aXIoJ3Rlc3RfYmFja3RyYWNlJykKIHN1YmRpcigndGVzdF9iaW5hcnloZWFwJykKIHN1YmRp cigndGVzdF9iaXRtYXBzZXQnKQogc3ViZGlyKCd0ZXN0X2Jsb29tZmlsdGVyJykKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvTWFrZWZpbGUgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjNlMzExMmNkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL01ha2VmaWxlCkBAIC0wLDAgKzEsMzMg QEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JhY2t0cmFjZS9NYWtlZmlsZQorIworIyBN YWtlZmlsZSBmb3IgV2luZG93cyBiYWNrdHJhY2UgdGVzdGluZyBtb2R1bGUKKworTU9EVUxF X2JpZyA9IHRlc3RfYmFja3RyYWNlCitPQkpTID0gdGVzdF9iYWNrdHJhY2UubworCitFWFRF TlNJT04gPSB0ZXN0X2JhY2t0cmFjZQorREFUQSA9IHRlc3RfYmFja3RyYWNlLS0xLjAuc3Fs CisKKyMgT25seSBUQVAgdGVzdHMgLSBubyBTUUwgcmVncmVzc2lvbiB0ZXN0cyBzaW5jZSBi YWNrdHJhY2VzCisjIGdvIHRvIHNlcnZlciBsb2dzLCBub3QgdG8gY2xpZW50IG91dHB1dAor VEFQX1RFU1RTID0gMQorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmln CitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hT KQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JhY2t0cmFjZQordG9w X2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9N YWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWIt Z2xvYmFsLm1rCitlbmRpZgorCisjIFBsYXRmb3JtLXNwZWNpZmljIHRlc3QgaGFuZGxpbmcK K2lmZXEgKCQoUE9SVE5BTUUpLHdpbjMyKQorICAgICMgUnVuIGFsbCB0ZXN0cyBvbiBXaW5k b3dzCisgICAgUFJPVkVfRkxBR1MgKz0gLXYKK2Vsc2UKKyAgICAjIFNraXAgdGVzdHMgb24g bm9uLVdpbmRvd3MgcGxhdGZvcm1zCisgICAgVEFQX1RFU1RTID0gMAorZW5kaWYKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvUkVBRE1FIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2JhY2t0cmFjZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uNzM4ODMyMGFkOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvUkVBRE1FCkBAIC0wLDAgKzEsMjI0IEBACis9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICAgICAgIFdp bmRvd3MgQmFja3RyYWNlIFRlc3RzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitU QVAgdGVzdHMgZm9yIHRoZSBXaW5kb3dzIGJhY2t0cmFjZSBpbXBsZW1lbnRhdGlvbiwgd2hp Y2ggdXNlcyB0aGUgRGJnSGVscCBBUEkKK3RvIGNhcHR1cmUgYW5kIGZvcm1hdCBzdGFjayB0 cmFjZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaHkgVEFQIFRlc3RzPwor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmFja3RyYWNlcyBhcHBlYXIgaW4gdGhl IHNlcnZlciBsb2csIG5vdCBpbiBwc3FsIG91dHB1dC4gIFNvIHdlIGNhbid0IHVzZSBTUUwK K3Rlc3RzIHRvIHZhbGlkYXRlIHRoZW07IHdlIG5lZWQgVEFQIHRlc3RzIHRoYXQgY2FuIHJl YWQgdGhlIGFjdHVhbCBsb2cgZmlsZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CitUZXN0IEZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Rfd2luZG93c19i YWNrdHJhY2UucGwKKworICBUZXN0cyBiYWNrdHJhY2UgZ2VuZXJhdGlvbiBpbiB0d28gc2Nl bmFyaW9zOgorCisgICgxKSBXSVRIIFBEQiBGSUxFOiBwb3N0Z3Jlcy5wZGIgZXhpc3RzIGFs b25nc2lkZSBwb3N0Z3Jlcy5leGUKKyAgICAgIEV4cGVjdGVkOiBGdW5jdGlvbiBuYW1lcywg c291cmNlIGZpbGVzLCBsaW5lIG51bWJlcnMsIGFkZHJlc3NlcworICAgICAgVmFsaWRhdGVz OiBEYmdIZWxwIGxvYWRzIHRoZSBQREIgYW5kIHJlc29sdmVzIGZ1bGwgc3ltYm9scworCisg ICgyKSBXSVRIT1VUIFBEQiBGSUxFOiBwb3N0Z3Jlcy5wZGIgaXMgYWJzZW50CisgICAgICBF eHBlY3RlZDogRnVuY3Rpb24gbmFtZXMgYW5kIGFkZHJlc3NlcyAoZnJvbSBleHBvcnQgdGFi bGUpCisgICAgICBWYWxpZGF0ZXM6IFdlIGNhbiBzdGlsbCBnZXQgdXNlZnVsIGJhY2t0cmFj ZXMgd2l0aG91dCBkZWJ1ZyBpbmZvCisKKyAgVGhlIHRlc3QgZmlndXJlcyBvdXQgd2hpY2gg c2NlbmFyaW8gYXBwbGllcyBieSBjaGVja2luZyB3aGV0aGVyIHBvc3RncmVzLnBkYgorICBl eGlzdHMsIHRoZW4gdmFsaWRhdGVzIHRoYXQgdGhlIGFjdHVhbCBiYWNrdHJhY2UgZm9ybWF0 IG1hdGNoZXMgZXhwZWN0YXRpb25zLgorICBJZiB0aGUgUERCIGlzIHByZXNlbnQgYnV0IHdl IGRvbid0IGdldCBzb3VyY2UgZmlsZXMsIHRoYXQncyBhIGJ1Zy4KKworICBXaGF0IGdldHMg dGVzdGVkOgorCisgICAgLSBCYXNpYyBmdW5jdGlvbmFsaXR5IChiYWNrdHJhY2VzIGFwcGVh ciBpbiBsb2dzKQorICAgIC0gU3ltYm9sIHJlc29sdXRpb24gKGNvcnJlY3QgZm9ybWF0IGZv ciBzY2VuYXJpbykKKyAgICAtIFZhcmlvdXMgZXJyb3IgdHlwZXMgKGRpdi1ieS16ZXJvLCBj b25zdHJhaW50cywgZXRjKQorICAgIC0gUEwvcGdTUUwgYW5kIHRyaWdnZXIgaW50ZWdyYXRp b24KKyAgICAtIFN0YWJpbGl0eSAoMjAgcmFwaWQgZXJyb3JzIGRvbid0IGNyYXNoIGFueXRo aW5nKQorICAgIC0gRGJnSGVscCBpbml0aWFsaXphdGlvbiBkb2Vzbid0IGZhaWwKKworICBX aGF0IGRvZXNuJ3QgZ2V0IHRlc3RlZDoKKworICAgIC0gTWVtb3J5IGxlYWtzICh3b3VsZCBu ZWVkIERyLiBNZW1vcnkgb3Igc2ltaWxhcikKKyAgICAtIFN5bWJvbCBzZXJ2ZXJzICh3b3Vs ZCBuZWVkIG5ldHdvcmsgc2V0dXApCisgICAgLSBTdHJpcHBlZCBiaW5hcmllcyAobm90IHJl bGV2YW50IGZvciBQb3N0Z3JlcykKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1J1 bm5pbmcgdGhlIFRlc3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQcmVyZXF1 aXNpdGVzOgorCisgIC0gV2luZG93cyAodGVzdCBza2lwcyBvbiBvdGhlciBwbGF0Zm9ybXMp CisgIC0gTVNWQyBidWlsZCAobmVlZHMgRGJnSGVscCkKKyAgLSBQZXJsIHdpdGggUG9zdGdy ZVNRTDo6VGVzdCBtb2R1bGVzCisKK0Zyb20gdGhlIFBvc3RncmVTUUwgYnVpbGQgZGlyZWN0 b3J5OgorCisgIG1lc29uIHRlc3QgLS1zdWl0ZSB0ZXN0X2JhY2t0cmFjZSAtLXZlcmJvc2UK KworT3Igd2l0aCBwcm92ZToKKworICBzZXQgUEVSTDVMSUI9QzpccGF0aFx0b1xwb3N0Z3Jl c1xzcmNcdGVzdFxwZXJsCisgIHByb3ZlIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJh Y2UvdC90X3dpbmRvd3NfYmFja3RyYWNlLnBsCisKK1RvIHRlc3QgYm90aCBzY2VuYXJpb3M6 CisKKyAgKDEpIFdJVEggUERCOiBKdXN0IHJ1biB0aGUgdGVzdCBub3JtYWxseQorICAgICAg LSBQREIgc2hvdWxkIGJlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBwb3N0Z3Jlcy5leGUK KyAgICAgIC0gVGVzdCBleHBlY3RzIHRvIGZpbmQgc291cmNlIGZpbGUgaW5mb3JtYXRpb24K KworICAoMikgV0lUSE9VVCBQREI6IERlbGV0ZSB0aGUgUERCIGZpbGUgYW5kIHJlLXJ1bgor ICAgICAgLSBkZWwgYnVpbGRfZGlyXHRtcF9pbnN0YWxsXC4uLlxiaW5ccG9zdGdyZXMucGRi CisgICAgICAtIFRlc3QgZXhwZWN0cyBleHBvcnQgc3ltYm9scyBvbmx5CisKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCitFeHBlY3RlZCBPdXRwdXQKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisKK1dpdGggUERCOgorCisgIFBEQiBmaWxlIGZvdW5kOiBDOlwuLi5ccG9z dGdyZXMucGRiCisgIEVYUEVDVEVEOiBTY2VuYXJpbyAxIChmdWxsIFBEQiBzeW1ib2xzKQor ICBBQ1RVQUw6IFNjZW5hcmlvIDEgKGZvdW5kIHNvdXJjZSBmaWxlcyBhbmQgc3ltYm9scykK KyAgb2sgLSBTY2VuYXJpbyBtYXRjaGVzIGV4cGVjdGF0aW9uOiBTY2VuYXJpbyAxCisKKyAg RVJST1I6ICBkaXZpc2lvbiBieSB6ZXJvCisgIEJBQ0tUUkFDRToKKyAgaW50NGRpdisweDJh IFtDOlxwb3N0Z3Jlc1xzcmNcYmFja2VuZFx1dGlsc1xhZHRcaW50LmM6ODQxXSBbMHgwMDAw N0ZGNi4uLl0KKyAgRXhlY0ludGVycEV4cHIrMHgxYjMgW0M6XHBvc3RncmVzXHNyY1xiYWNr ZW5kXGV4ZWN1dG9yXGV4ZWNFeHBySW50ZXJwLmM6MjM0NV0KKyAgLi4uCisKK1dpdGhvdXQg UERCOgorCisgIFBEQiBmaWxlIG5vdCBmb3VuZDogQzpcLi4uXHBvc3RncmVzLnBkYgorICBF WFBFQ1RFRDogU2NlbmFyaW8gMiAoZXhwb3J0IHN5bWJvbHMgb25seSkKKyAgQUNUVUFMOiBT Y2VuYXJpbyAyIChmb3VuZCBzeW1ib2xzIGJ1dCBubyBzb3VyY2UgZmlsZXMpCisgIG9rIC0g U2NlbmFyaW8gbWF0Y2hlcyBleHBlY3RhdGlvbjogU2NlbmFyaW8gMgorCisgIEVSUk9SOiAg ZGl2aXNpb24gYnkgemVybworICBCQUNLVFJBQ0U6CisgIGludDRkaXYrMHgyYSBbMHgwMDAw N0ZGNi4uLl0KKyAgRXhlY0ludGVycEV4cHIrMHgxYjMgWzB4MDAwMDdGRjYuLi5dCisgIC4u LgorCitOb3RlOiBQb3N0Z3JlcyBleHBvcnRzIH4xMSwwMDAgZnVuY3Rpb25zLCBzbyBldmVu IHdpdGhvdXQgYSBQREIsIHlvdSBnZXQKK2Z1bmN0aW9uIG5hbWVzLiAgRnVsbHkgc3RyaXBw ZWQgYmluYXJpZXMgd291bGQgb25seSBzaG93IGFkZHJlc3NlcywgYnV0Cit0aGF0J3Mgbm90 IGEgc2NlbmFyaW8gd2UgY2FyZSBhYm91dCBmb3IgUG9zdGdyZXMuCisKK0ZhaWx1cmUgKFBE QiBleGlzdHMgYnV0IGRvZXNuJ3QgbG9hZCk6CisKKyAgUERCIGZpbGUgZm91bmQ6IEM6XC4u Llxwb3N0Z3Jlcy5wZGIKKyAgRVhQRUNURUQ6IFNjZW5hcmlvIDEgKGZ1bGwgUERCIHN5bWJv bHMpCisgIEFDVFVBTDogU2NlbmFyaW8gMiAoZm91bmQgc3ltYm9scyBidXQgbm8gc291cmNl IGZpbGVzKQorICBub3Qgb2sgLSBQREIgZmlsZSBleGlzdHMgYnV0IHN5bWJvbHMgbm90IGxv YWRpbmchCisKKyAgVGhpcyBtZWFucyBEYmdIZWxwIGNvdWxkbid0IGxvYWQgdGhlIFBEQi4g IFBvc3NpYmxlIGNhdXNlczogY29ycnVwdGVkIFBEQiwKKyAgbWlzbWF0Y2hlZCBQREIgKGZy b20gZGlmZmVyZW50IGJ1aWxkKSwgb3IgRGJnSGVscCBpbml0aWFsaXphdGlvbiBmYWlsZWQu CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIb3cgSXQgV29ya3MKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB0ZXN0IHZhbGlkYXRlcyBleHBlY3RlZCB2cyBh Y3R1YWw6CisKKyAgMS4gQ2hlY2sgaWYgcG9zdGdyZXMucGRiIGV4aXN0cyBvbiBkaXNrCisg ICAgIC0+IElmIHllcywgZXhwZWN0IGZ1bGwgUERCIHN5bWJvbHMKKyAgICAgLT4gSWYgbm8s IGV4cGVjdCBleHBvcnQgc3ltYm9scyBvbmx5CisKKyAgMi4gUGFyc2UgdGhlIGJhY2t0cmFj ZSBvdXRwdXQKKyAgICAgLT4gSWYgc291cmNlIGZpbGVzIHByZXNlbnQsIGdvdCBQREIgc3lt Ym9scworICAgICAtPiBJZiBubyBzb3VyY2UgZmlsZXMsIGdvdCBleHBvcnRzIG9ubHkKKwor ICAzLiBDb21wYXJlIGV4cGVjdGVkIHRvIGFjdHVhbAorICAgICAtPiBQYXNzIGlmIHRoZXkg bWF0Y2gKKyAgICAgLT4gRmFpbCBpZiB0aGV5IGRvbid0IChpbmRpY2F0ZXMgYSBwcm9ibGVt KQorCitUaGlzIGNhdGNoZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIFBEQiBleGlzdHMgYnV0IERi Z0hlbHAgZmFpbHMgdG8gbG9hZCBpdCwKK3doaWNoIGlzIHRoZSBtb3N0IGxpa2VseSBmYWls dXJlIG1vZGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb25maWd1cmF0aW9u CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdGVzdCBjb25maWd1cmVzIHRo ZSBzZXJ2ZXIgd2l0aDoKKworICBiYWNrdHJhY2VfZnVuY3Rpb25zID0gJ2ludDRkaXYsaW50 NGluLEV4ZWNJbnRlcnBFeHByJworICBsb2dfZXJyb3JfdmVyYm9zaXR5ID0gdmVyYm9zZQor ICBsb2dnaW5nX2NvbGxlY3RvciA9IG9uCisgIGxvZ19kZXN0aW5hdGlvbiA9ICdzdGRlcnIn CisgIGxvZ19taW5fbWVzc2FnZXMgPSBlcnJvcgorCitOb3RoaW5nIGZhbmN5LiAgSnVzdCBl bm91Z2ggdG8gZ2VuZXJhdGUgYmFja3RyYWNlcyBhbmQgbWFrZSB0aGVtIGVhc3kgdG8gZmlu ZAoraW4gdGhlIGxvZ3MuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaW1pdGF0 aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB0ZXN0IHZlcmlmaWVz IGJhc2ljIGZ1bmN0aW9uYWxpdHkuICBJdCBkb2VzIG5vdDoKKworICAtIERldGVjdCBtZW1v cnkgbGVha3MgKHdvdWxkIG5lZWQgRHIuIE1lbW9yeSwgQVNBTiwgb3Igc2ltaWxhcikKKyAg LSBUZXN0IHN5bWJvbCBzZXJ2ZXIgc2NlbmFyaW9zICh3b3VsZCBuZWVkIG5ldHdvcmsgc2V0 dXAgYW5kIGNvbmZpZykKKyAgLSBWYWxpZGF0ZSBzeW1ib2wgYWNjdXJhY3kgaW4gZGV0YWls IChqdXN0IGNoZWNrcyBmb3JtYXQpCisgIC0gVGVzdCBwZXJmb3JtYW5jZSBvciBtZW1vcnkg dXNhZ2UKKyAgLSBWYWxpZGF0ZSBwYXRoIHJlbWFwcGluZyAoZnV0dXJlIHdvcmspCisKK1Ro ZSB0ZXN0IGVuc3VyZXMgdGhlIGZlYXR1cmUgd29ya3MgYW5kIGRvZXNuJ3QgY3Jhc2guICBU aGF0J3MgYWJvdXQgaXQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUcm91Ymxl c2hvb3RpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyJQREIgZmlsZSBleGlz dHMgYnV0IHN5bWJvbHMgbm90IGxvYWRpbmchIgorCisgIFRoZSBQREIgaXMgdGhlcmUgYnV0 IERiZ0hlbHAgY291bGRuJ3QgdXNlIGl0LgorCisgIENoZWNrOgorICAgIC0gSXMgdGhlIFBE QiBjb3JydXB0ZWQ/CisgICAgLSBEb2VzIHRoZSBQREIgbWF0Y2ggdGhlIGV4ZWN1dGFibGU/ IChzYW1lIGJ1aWxkKQorICAgIC0gQXJlIHRoZXJlIFN5bUluaXRpYWxpemUgZXJyb3JzIGlu IHRoZSBsb2c/CisKKyJTY2VuYXJpbyBtaXNtYXRjaCIgKG90aGVyIHRoYW4gUERCIG5vdCBs b2FkaW5nKQorCisgIFNvbWV0aGluZyB3ZWlyZCBoYXBwZW5lZC4gIExvb2sgYXQgdGhlIHRl c3Qgb3V0cHV0IHRvIHNlZSB3aGF0IHdhcyBleHBlY3RlZAorICB2cyB3aGF0IHdhcyBmb3Vu ZCwgYW5kIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgorCitObyBiYWNrdHJhY2VzIGF0 IGFsbAorCisgIENoZWNrOgorICAgIC0gSXMgYmFja3RyYWNlX2Z1bmN0aW9ucyBjb25maWd1 cmVkPworICAgIC0gSXMgbG9nZ2luZ19jb2xsZWN0b3IgZW5hYmxlZD8KKyAgICAtIEFyZSB0 aGVyZSBTeW1Jbml0aWFsaXplIGZhaWx1cmVzIGluIHRoZSBsb2c/CisKK09ubHkgYWRkcmVz c2VzLCBubyBmdW5jdGlvbiBuYW1lcyAoZXZlbiB3aXRob3V0IFBEQikKKworICBUaGlzIHdv dWxkIGJlIHZlcnkgc3RyYW5nZSwgc2luY2UgUG9zdGdyZXMgZXhwb3J0cyB0aG91c2FuZHMg b2YgZnVuY3Rpb25zLgorICBEYmdIZWxwIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGVtIGZy b20gdGhlIGV4cG9ydCB0YWJsZS4gIENoZWNrIHRoYXQKKyAgcG9zdGdyZXMuZXhlIHdhcyBs aW5rZWQgbm9ybWFsbHkuCisKK1Rlc3QgaGFuZ3MKKworICBQcm9iYWJseSBhIGxvZ2dpbmcg aXNzdWUuICBDaGVjayB0aGF0IGxvZ2dpbmdfY29sbGVjdG9yIGlzIHdvcmtpbmcgYW5kCisg IGxvZyBmaWxlcyBhcmUgYXBwZWFyaW5nIGluIHRoZSBkYXRhIGRpcmVjdG9yeS4KKworLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N5bWJvbCBTZXJ2ZXJzCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCitUaGlzIHRlc3QgZG9lc24ndCB0cnkgdG8gZXhlcmNpc2Ugc3lt Ym9sIHNlcnZlciBmdW5jdGlvbmFsaXR5LiAgSXQganVzdCBjaGVja3MKK3doZXRoZXIgYSBs b2NhbCBQREIgZmlsZSBnZXRzIHVzZWQuICBTeW1ib2wgc2VydmVycyBhcmUgYSBkZXBsb3lt ZW50IGNvbmNlcm4sCitub3QgYSBmdW5jdGlvbmFsaXR5IHRlc3QuCisKK0ZvciBkZXBsb3lt ZW50cywgeW91J2QgdHlwaWNhbGx5IGVpdGhlcjoKKyAgLSBTaGlwIFBEQiBmaWxlcyBhbG9u Z3NpZGUgZXhlY3V0YWJsZXMgKGRldmVsb3BtZW50L3N0YWdpbmcpCisgIC0gRG9uJ3Qgc2hp cCBQREIgZmlsZXMgKHByb2R1Y3Rpb24sIHNtYWxsZXIgZm9vdHByaW50KQorCitJbiB0aGUg bGF0dGVyIGNhc2UsIHlvdSBzdGlsbCBnZXQgdXNlZnVsIGJhY2t0cmFjZXMgZnJvbSB0aGUg ZXhwb3J0IHRhYmxlLgorV2hldGhlciB0aGF0J3Mgc3VmZmljaWVudCBkZXBlbmRzIG9uIHlv dXIgZGVidWdnaW5nIG5lZWRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JhY2t0cmFjZS9tZXNvbi5idWlsZCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvbWVzb24uYnVpbGQKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYjhiMWI4ZTE5OAotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvbWVzb24uYnVpbGQKQEAg LTAsMCArMSwxMyBAQAorIyBUQVAgdGVzdHMgLSBvbmx5IHJ1biBvbiBXaW5kb3dzCitpZiBo b3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgdGVzdHMgKz0geworICAgICduYW1lJzogJ3Rl c3RfYmFja3RyYWNlJywKKyAgICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwK KyAgICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAgICd0YXAnOiB7Cisg ICAgICAndGVzdHMnOiBbCisgICAgICAgICd0L3Rfd2luZG93c19iYWNrdHJhY2UucGwnLAor ICAgICAgXSwKKyAgICB9LAorICB9CitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2JhY2t0cmFjZS90L3Rfd2luZG93c19iYWNrdHJhY2UucGwgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL3QvdF93aW5kb3dzX2JhY2t0cmFjZS5wbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43NjA5ZGE5OWViCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JhY2t0cmFjZS90L3Rfd2luZG93 c19iYWNrdHJhY2UucGwKQEAgLTAsMCArMSw0MjggQEAKKyMhL3Vzci9iaW4vcGVybAorCisj IENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKworIyBUZXN0IFdpbmRvd3MgYmFja3RyYWNlIGdlbmVyYXRpb24gdXNpbmcgRGJnSGVs cCBBUEkuCisjCisjIFRoZSBtYWluIHRoaW5nIHdlIG5lZWQgdG8gdmVyaWZ5IGlzIHRoYXQg dGhlIERiZ0hlbHAgaW50ZWdyYXRpb24gYWN0dWFsbHkKKyMgd29ya3MsIGFuZCB0aGF0IHdl IGNhbiByZXNvbHZlIHN5bWJvbHMgYm90aCB3aXRoIGFuZCB3aXRob3V0IFBEQiBmaWxlcwor IyBwcmVzZW50LiAgV2UgZG9uJ3QgdHJ5IHRvIHRlc3Qgc3ltYm9sIHNlcnZlciBzY2VuYXJp b3Mgb3IgYW55dGhpbmcgZmFuY3k7CisjIGp1c3QgY2hlY2sgdGhhdCBpZiB5b3UgaGF2ZSBh IFBEQiwgeW91IGdldCBzb3VyY2UgZmlsZSBpbmZvLCBhbmQgaWYgeW91CisjIGRvbid0LCB5 b3Ugc3RpbGwgZ2V0IGZ1bmN0aW9uIG5hbWVzIGZyb20gdGhlIGV4cG9ydCB0YWJsZSAod2hp Y2ggd29ya3MKKyMgYmVjYXVzZSBwb3N0Z3Jlcy5leGUgZXhwb3J0cyB0aG91c2FuZHMgb2Yg ZnVuY3Rpb25zKS4KKyMKKyMgVGhlIHRlc3QgYXV0b21hdGljYWxseSBkZXRlY3RzIHdoaWNo IHNpdHVhdGlvbiBhcHBsaWVzIGJ5IGNoZWNraW5nIHdoZXRoZXIKKyMgcG9zdGdyZXMucGRi IGV4aXN0cyBhbG9uZ3NpZGUgcG9zdGdyZXMuZXhlLiAgVGhpcyBhdm9pZHMgdGhlIG5lZWQg dG8ga25vdworIyBob3cgdGhlIGV4ZWN1dGFibGUgd2FzIGJ1aWx0IG9yIHdoYXQgYnVpbGQg dHlwZSB3ZSdyZSB0ZXN0aW5nLiAgSWYgdGhlIFBEQgorIyBpcyB0aGVyZSBidXQgd2UgZG9u J3QgZ2V0IHNvdXJjZSBpbmZvLCB0aGF0J3MgYSBidWcuICBJZiBpdCdzIG5vdCB0aGVyZQor IyBidXQgd2Ugc29tZWhvdyBnZXQgc291cmNlIGluZm8gYW55d2F5LCB0aGF0J3Mgd2VpcmQg YW5kIHdvcnRoIGludmVzdGlnYXRpbmcuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3Mg RkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNl IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgU2tpcCBp ZiBub3QgV2luZG93cworaWYgKCReTyBuZSAnTVNXaW4zMicpCit7CisJcGxhbiBza2lwX2Fs bCA9PiAnV2luZG93cy1zcGVjaWZpYyBiYWNrdHJhY2UgdGVzdHMnOworfQorCisjIEluaXRp YWxpemUgbm9kZQorbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J2JhY2t0cmFjZV90ZXN0Jyk7Ciskbm9kZS0+aW5pdDsKKworIyBDb25maWd1cmUgZm9yIGRl dGFpbGVkIGxvZ2dpbmcgd2l0aCBiYWNrdHJhY2VzCiskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bv c3RncmVzcWwuY29uZicsIHFxeworYmFja3RyYWNlX2Z1bmN0aW9ucyA9ICdpbnQ0ZGl2LGlu dDRpbixFeGVjSW50ZXJwRXhwcicKK2xvZ19lcnJvcl92ZXJib3NpdHkgPSB2ZXJib3NlCits b2dnaW5nX2NvbGxlY3RvciA9IG9uCitsb2dfZGVzdGluYXRpb24gPSAnc3RkZXJyJworbG9n X21pbl9tZXNzYWdlcyA9IGVycm9yCit9KTsKKworJG5vZGUtPnN0YXJ0OworCisjIEhlbHBl ciB0byBnZXQgcmVjZW50IGxvZyBjb250ZW50LgorIyBCYWNrdHJhY2VzIGdvIHRvIHRoZSBz ZXJ2ZXIgbG9nLCBub3QgdG8gcHNxbCBvdXRwdXQsIHNvIHdlIG5lZWQgdG8gcmVhZAorIyB0 aGUgYWN0dWFsIGxvZyBmaWxlcyB0byB2YWxpZGF0ZSBhbnl0aGluZy4KK3N1YiBnZXRfcmVj ZW50X2xvZ19jb250ZW50Cit7CisJbXkgJGxvZ19kaXIgPSAkbm9kZS0+ZGF0YV9kaXIgLiAn L2xvZyc7CisJbXkgQGxvZ19maWxlcyA9IGdsb2IoIiRsb2dfZGlyLyoubG9nICRsb2dfZGly LyouY3N2Iik7CisKKwkjIEdldCB0aGUgbW9zdCByZWNlbnQgbG9nIGZpbGUKKwlteSAkbGF0 ZXN0X2xvZyA9IChzb3J0IHsgLU0gJGEgPD0+IC1NICRiIH0gQGxvZ19maWxlcylbMF07CisK KwlyZXR1cm4gJycgdW5sZXNzIGRlZmluZWQgJGxhdGVzdF9sb2cgJiYgLWYgJGxhdGVzdF9s b2c7CisKKwlteSAkY29udGVudCA9ICcnOworCW9wZW4obXkgJGZoLCAnPCcsICRsYXRlc3Rf bG9nKSBvciByZXR1cm4gJyc7CisJeworCQlsb2NhbCAkLzsKKwkJJGNvbnRlbnQgPSA8JGZo PjsKKwl9CisJY2xvc2UoJGZoKTsKKworCXJldHVybiAkY29udGVudDsKK30KKworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworIyBGaXJzdCwgdmVyaWZ5IGJhc2ljIGZ1bmN0aW9uYWxp dHkgYW5kIGZpZ3VyZSBvdXQgd2hhdCBzY2VuYXJpbyB3ZSdyZSBpbi4KKyMKKyMgV2UgdHJp Z2dlciBhbiBlcnJvciBhbmQgY2hlY2sgdGhhdCAoYSkgaXQgYWN0dWFsbHkgZ2VuZXJhdGVz IGEgYmFja3RyYWNlLAorIyBhbmQgKGIpIHdlIGNhbiB0ZWxsIGZyb20gdGhlIGJhY2t0cmFj ZSBmb3JtYXQgd2hldGhlciB3ZSBoYXZlIFBEQiBzeW1ib2xzCisjIG9yIGp1c3QgZXhwb3J0 cy4gIFRoZW4gd2UgY29tcGFyZSB0aGF0IHRvIHdoYXQgd2Ugc2hvdWxkIGhhdmUgYmFzZWQg b24KKyMgd2hldGhlciBwb3N0Z3Jlcy5wZGIgZXhpc3RzIG9uIGRpc2suCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisKK25vdGUoJycpOworbm90ZSgnPT09IFBBUlQgMTogQmFzaWMg RXJyb3IgVGVzdHMgJiBTY2VuYXJpbyBEZXRlY3Rpb24gPT09Jyk7CisKKyMjIyBUZXN0IDE6 IERpdmlzaW9uIGJ5IHplcm8KK215ICgkcmV0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2Rl LT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgMS8wOyIpOworb2soJHJldCAhPSAwLCAnZGl2 aXNpb24gYnkgemVybyBlcnJvciBvY2N1cnJlZCcpOworbGlrZSgkc3RkZXJyLCBxci9kaXZp c2lvbiBieSB6ZXJvL2ksICdkaXZpc2lvbiBieSB6ZXJvIGVycm9yIG1lc3NhZ2UgaW4gcHNx bCcpOworCitzbGVlcCAxOworbXkgJGxvZ19jb250ZW50ID0gZ2V0X3JlY2VudF9sb2dfY29u dGVudCgpOworbGlrZSgkbG9nX2NvbnRlbnQsIHFyL0VSUk9SOi4qZGl2aXNpb24gYnkgemVy by9pLCAnZXJyb3IgbG9nZ2VkIHRvIHNlcnZlciBsb2cnKTsKK2xpa2UoJGxvZ19jb250ZW50 LCBxci9CQUNLVFJBQ0U6L2ksICdCQUNLVFJBQ0UgaGVhZGVyIGluIGxvZycpOworCisjIyMg VGVzdCAyOiBEZXRlY3Qgc2NlbmFyaW8gYW5kIHZhbGlkYXRlIGl0IG1hdGNoZXMgZXhwZWN0 YXRpb25zCisjCisjIFRoZSBiYWNrdHJhY2UgZm9ybWF0IHRlbGxzIHVzIHdoYXQgRGJnSGVs cCBhY3R1YWxseSBnYXZlIHVzLiAgU291cmNlIGZpbGUKKyMgcGF0aHMgbWVhbiB3ZSBnb3Qg UERCIHN5bWJvbHM7IGxhY2sgdGhlcmVvZiBtZWFucyBleHBvcnQgc3ltYm9scyBvbmx5Lgor IworIyBXZSB0aGVuIGNoZWNrIHdoZXRoZXIgcG9zdGdyZXMucGRiIGV4aXN0cyBvbiBkaXNr LiAgSWYgaXQgZG9lcywgd2Ugc2hvdWxkCisjIGhhdmUgZ290dGVuIFBEQiBzeW1ib2xzOyBp ZiBub3QsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBleHBvcnRzIG9ubHkuCisjIE1pc21hdGNo ZXMgaW5kaWNhdGUgYSBwcm9ibGVtIHdpdGggRGJnSGVscCBpbml0aWFsaXphdGlvbiBvciBQ REIgbG9hZGluZy4KK215ICRoYXNfc291cmNlX2ZpbGVzID0gKCRsb2dfY29udGVudCA9fiAv XFtbXHc6XFxcL10rXC5cdys6XGQrXF0vKTsgICMgW2ZpbGUuYzoxMjNdCitteSAkaGFzX3N5 bWJvbHMgPSAoJGxvZ19jb250ZW50ID1+IC9cdytcKzB4WzAtOWEtZkEtRl0rLyk7ICAgICAg ICAgICAjIGZ1bmN0aW9uKzB4QUJDCitteSAkaGFzX2FkZHJlc3NlcyA9ICgkbG9nX2NvbnRl bnQgPX4gL1xbMHhbMC05YS1mQS1GXStcXS8pOyAgICAgICAgICAjIFsweEFCQ0RFRl0KKwor b2soJGhhc19zeW1ib2xzIHx8ICRoYXNfYWRkcmVzc2VzLCAnYmFja3RyYWNlIGhhcyB2YWxp ZCBmb3JtYXQnKTsKKworIyBEZXRlcm1pbmUgRVhQRUNURUQgc2NlbmFyaW8gYmFzZWQgb24g UERCIGZpbGUgZXhpc3RlbmNlLgorIworIyBXZSBuZWVkIHRvIGZpbmQgd2hlcmUgcG9zdGdy ZXMuZXhlIGFjdHVhbGx5IGxpdmVzLiAgVGhlIFRBUCB0ZXN0IGZyYW1ld29yaworIyBjcmVh dGVzIGEgdGVtcG9yYXJ5IGluc3RhbGwsIGFuZCB3ZSBjYW4gZmluZCB0aGUgYmluIGRpcmVj dG9yeSBieSBsb29raW5nCisjIGF0IHRoZSBwYXJlbnQgb2YgdGhlIGRhdGEgZGlyZWN0b3J5 LiAgSWYgdGhhdCBkb2Vzbid0IHdvcmssIHNlYXJjaCBQQVRILgorIyAoVGhpcyBpcyBhIGJp dCB1Z2x5IGJ1dCB0aGVyZSdzIG5vIGRpcmVjdCB3YXkgdG8gYXNrIHRoZSB0ZXN0IG5vZGUg Zm9yCisjIGl0cyBiaW4gZGlyZWN0b3J5LikKK215ICRkYXRhZGlyID0gJG5vZGUtPmRhdGFf ZGlyOworbXkgJHBvc3RncmVzX2V4ZTsKKworIyBUcnkgdG8gZmluZCB0aGUgYmluIGRpcmVj dG9yeSByZWxhdGl2ZSB0byBkYXRhIGRpcmVjdG9yeQorIyBUeXBpY2FsIHN0cnVjdHVyZTog Li4uL3RtcF9pbnN0YWxsL1BPUlRfWFhYL2RhdGEgYW5kIC4uLi90bXBfaW5zdGFsbC9QT1JU X1hYWC9iaW4KK2lmICgkZGF0YWRpciA9fiAvXiguKylbXFxcL11bXlxcXC9dKyQvKQorewor CW15ICRiYXNlID0gJDE7ICAjIEdldCBwYXJlbnQgZGlyZWN0b3J5CisJJHBvc3RncmVzX2V4 ZSA9ICIkYmFzZS9iaW4vcG9zdGdyZXMuZXhlIjsKK30KKworIyBGYWxsYmFjazogdHJ5IHRv IGNvbnN0cnVjdCBmcm9tIHRlc3QgZW52aXJvbm1lbnQKK2lmICghZGVmaW5lZCgkcG9zdGdy ZXNfZXhlKSB8fCAhLWYgJHBvc3RncmVzX2V4ZSkKK3sKKwkjIFRyeSB1c2luZyBQQVRIIC0g dGhlIHRlc3Qgc2V0cyB1cCBQQVRIIHRvIGluY2x1ZGUgdGhlIGJpbiBkaXJlY3RvcnkKKwlt eSAkcGF0aF9kaXJzID0gJEVOVntQQVRIfTsKKwlmb3JlYWNoIG15ICRkaXIgKHNwbGl0KC87 LywgJHBhdGhfZGlycykpCisJeworCQlteSAkY2FuZGlkYXRlID0gIiRkaXIvcG9zdGdyZXMu ZXhlIjsKKwkJaWYgKC1mICRjYW5kaWRhdGUpCisJCXsKKwkJCSRwb3N0Z3Jlc19leGUgPSAk Y2FuZGlkYXRlOworCQkJbGFzdDsKKwkJfQorCX0KK30KKworIyBJZiBzdGlsbCBub3QgZm91 bmQsIGp1c3QgdXNlIHRoZSBjb21tYW5kIG5hbWUgYW5kIG5vdGUgdGhhdCB3ZSBjb3VsZG4n dCBmaW5kIGl0CitpZiAoIWRlZmluZWQoJHBvc3RncmVzX2V4ZSkpCit7CisJJHBvc3RncmVz X2V4ZSA9ICdwb3N0Z3Jlcy5leGUnOworfQorCitteSAkcG9zdGdyZXNfcGRiID0gJHBvc3Rn cmVzX2V4ZTsKKyRwb3N0Z3Jlc19wZGIgPX4gcy9cLmV4ZSQvLnBkYi9pOworCitteSAkZXhw ZWN0ZWRfc2NlbmFyaW87CitpZiAoLWYgJHBvc3RncmVzX3BkYikKK3sKKwkkZXhwZWN0ZWRf c2NlbmFyaW8gPSAxOyAgIyBQREIgZXhpc3RzLCB3ZSBTSE9VTEQgaGF2ZSBmdWxsIHN5bWJv bHMKKwlub3RlKCJQREIgZmlsZSBmb3VuZDogJHBvc3RncmVzX3BkYiIpOworCW5vdGUoIkVY UEVDVEVEOiBTY2VuYXJpbyAxIChmdWxsIFBEQiBzeW1ib2xzKSIpOworfQorZWxzZQorewor CSRleHBlY3RlZF9zY2VuYXJpbyA9IDI7ICAjIE5vIFBEQiwgd2UgU0hPVUxEIGhhdmUgZXhw b3J0IHN5bWJvbHMgb25seQorCW5vdGUoIlBEQiBmaWxlIG5vdCBmb3VuZDogJHBvc3RncmVz X3BkYiIpOworCW5vdGUoIkVYUEVDVEVEOiBTY2VuYXJpbyAyIChleHBvcnQgc3ltYm9scyBv bmx5KSIpOworfQorCisjIERldGVybWluZSBBQ1RVQUwgc2NlbmFyaW8gZnJvbSBsb2cgb3V0 cHV0CitteSAkYWN0dWFsX3NjZW5hcmlvOworaWYgKCRoYXNfc291cmNlX2ZpbGVzICYmICRo YXNfc3ltYm9scykKK3sKKwkkYWN0dWFsX3NjZW5hcmlvID0gMTsgICMgRnVsbCBQREIgc3lt Ym9scworCW5vdGUoJ0FDVFVBTDogU2NlbmFyaW8gMSAoZm91bmQgc291cmNlIGZpbGVzIGFu ZCBzeW1ib2xzKScpOworfQorZWxzaWYgKCRoYXNfc3ltYm9scyAmJiAhJGhhc19zb3VyY2Vf ZmlsZXMpCit7CisJJGFjdHVhbF9zY2VuYXJpbyA9IDI7ICAjIEV4cG9ydCBzeW1ib2xzIG9u bHkKKwlub3RlKCdBQ1RVQUw6IFNjZW5hcmlvIDIgKGZvdW5kIHN5bWJvbHMgYnV0IG5vIHNv dXJjZSBmaWxlcyknKTsKK30KK2Vsc2UKK3sKKwkkYWN0dWFsX3NjZW5hcmlvID0gMDsgICMg VW5rbm93bi9pbnZhbGlkCisJZmFpbCgnVW5hYmxlIHRvIGRldGVybWluZSBzY2VuYXJpbyAt IFBvc3RncmVTUUwgc2hvdWxkIGFsd2F5cyBoYXZlIGV4cG9ydCBzeW1ib2xzJyk7CisJbm90 ZSgnRXhwZWN0ZWQgZWl0aGVyIFNjZW5hcmlvIDEgKHdpdGggUERCKSBvciBTY2VuYXJpbyAy ICh3aXRob3V0IFBEQiknKTsKK30KKworIyBDUklUSUNBTCBURVNUOiBWYWxpZGF0ZSBhY3R1 YWwgbWF0Y2hlcyBleHBlY3RlZC4KKyMKKyMgVGhpcyBpcyB0aGUgbWFpbiBwb2ludCBvZiB0 aGUgdGVzdC4gIFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgRGJnSGVscCBpcworIyBhY3R1YWxs eSBsb2FkaW5nIHN5bWJvbHMgY29ycmVjdGx5LiAgSWYgdGhlIFBEQiBleGlzdHMgYnV0IHdl IGRvbid0IGdldAorIyBzb3VyY2UgZmlsZXMsIHRoYXQncyBhIGJ1Zy4gIElmIHRoZSBQREIg ZG9lc24ndCBleGlzdCBidXQgd2Ugc29tZWhvdyBnZXQKKyMgc291cmNlIGZpbGVzIGFueXdh eSwgdGhhdCdzIGJpemFycmUgYW5kIHdvcnRoIGludmVzdGlnYXRpbmcuCitpZiAoJGFjdHVh bF9zY2VuYXJpbyA9PSAkZXhwZWN0ZWRfc2NlbmFyaW8pCit7CisJcGFzcygiU2NlbmFyaW8g bWF0Y2hlcyBleHBlY3RhdGlvbjogU2NlbmFyaW8gJGFjdHVhbF9zY2VuYXJpbyIpOworCW5v dGUoJycpOworCWlmICgkYWN0dWFsX3NjZW5hcmlvID09IDEpIHsKKwkJbm90ZSgnKioqIFND RU5BUklPIDE6IEZ1bGwgUERCIHN5bWJvbHMgKGJ1aWxkIFdJVEggLnBkYiBmaWxlKSAqKion KTsKKwkJbm90ZSgnQnVpbGQgdHlwZTogUmVsZWFzZS9EZWJ1Zy9EZWJ1Z09wdGltaXplZCBX SVRIIC5wZGIgZmlsZScpOworCQlub3RlKCdGb3JtYXQ6IGZ1bmN0aW9uK29mZnNldCBbZmls ZS5jOmxpbmVdIFsweGFkZHJlc3NdJyk7CisJfQorCWVsc2lmICgkYWN0dWFsX3NjZW5hcmlv ID09IDIpIHsKKwkJbm90ZSgnKioqIFNDRU5BUklPIDI6IEV4cG9ydCBzeW1ib2xzIG9ubHkg KGJ1aWxkIFdJVEhPVVQgLnBkYiBmaWxlKSAqKionKTsKKwkJbm90ZSgnQnVpbGQgdHlwZTog UmVsZWFzZSBXSVRIT1VUIC5wZGIgZmlsZScpOworCQlub3RlKCdGb3JtYXQ6IGZ1bmN0aW9u K29mZnNldCBbMHhhZGRyZXNzXScpOworCX0KKwlub3RlKCcnKTsKK30KK2Vsc2lmICgkZXhw ZWN0ZWRfc2NlbmFyaW8gPT0gMSAmJiAkYWN0dWFsX3NjZW5hcmlvID09IDIpCit7CisJZmFp bCgnUERCIGZpbGUgZXhpc3RzIGJ1dCBzeW1ib2xzIG5vdCBsb2FkaW5nIScpOworCW5vdGUo IlBEQiBmaWxlIGZvdW5kIGF0OiAkcG9zdGdyZXNfcGRiIik7CisJbm90ZSgnRXhwZWN0ZWQ6 IEZ1bGwgUERCIHN5bWJvbHMgd2l0aCBzb3VyY2UgZmlsZXMnKTsKKwlub3RlKCdBY3R1YWw6 IE9ubHkgZXhwb3J0IHN5bWJvbHMgKG5vIHNvdXJjZSBmaWxlcyknKTsKKwlub3RlKCdUaGlz IGluZGljYXRlcyBQREIgaXMgbm90IGJlaW5nIGxvYWRlZCBieSBEYmdIZWxwJyk7Cit9Citl bHNpZiAoJGV4cGVjdGVkX3NjZW5hcmlvID09IDIgJiYgJGFjdHVhbF9zY2VuYXJpbyA9PSAx KQoreworCWZhaWwoJ0ZvdW5kIFBEQiBzeW1ib2xzIGJ1dCBQREIgZmlsZSBkb2VzIG5vdCBl eGlzdCEnKTsKKwlub3RlKCJQREIgZmlsZSBub3QgZm91bmQgYXQ6ICRwb3N0Z3Jlc19wZGIi KTsKKwlub3RlKCdFeHBlY3RlZDogRXhwb3J0IHN5bWJvbHMgb25seScpOworCW5vdGUoJ0Fj dHVhbDogRnVsbCBQREIgc3ltYm9scyB3aXRoIHNvdXJjZSBmaWxlcycpOworCW5vdGUoJ1Ro aXMgaXMgdW5leHBlY3RlZCAtIHdoZXJlIGFyZSB0aGUgc3ltYm9scyBjb21pbmcgZnJvbT8n KTsKK30KK2Vsc2UKK3sKKwlmYWlsKCJTY2VuYXJpbyBtaXNtYXRjaDogZXhwZWN0ZWQgJGV4 cGVjdGVkX3NjZW5hcmlvLCBnb3QgJGFjdHVhbF9zY2VuYXJpbyIpOworfQorCitteSAkc2Nl bmFyaW8gPSAkYWN0dWFsX3NjZW5hcmlvOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CisjIE5vdyB2YWxpZGF0ZSB0aGUgYmFja3RyYWNlIGZvcm1hdCBtYXRjaGVzIHdoYXQgd2Ug ZXhwZWN0IGZvciB0aGlzIHNjZW5hcmlvLgorIworIyBJZiB3ZSBoYXZlIFBEQiBzeW1ib2xz LCBjaGVjayBmb3IgZnVuY3Rpb24gbmFtZXMsIHNvdXJjZSBmaWxlcywgYW5kIGFkZHJlc3Nl cy4KKyMgSWYgd2Ugb25seSBoYXZlIGV4cG9ydHMsIGNoZWNrIHRoYXQgc291cmNlIGZpbGVz IGFyZSBhYnNlbnQgKGFzIGV4cGVjdGVkKS4KKyMgVGhlIHBvaW50IGlzIHRvIHZlcmlmeSB0 aGF0IHRoZSBmb3JtYXQgaXMgc2FuZSwgbm90IGp1c3QgdGhhdCBpdCBleGlzdHMuCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUoJycpOworbm90ZSgnPT09IFBBUlQgMjog Rm9ybWF0IFZhbGlkYXRpb24gPT09Jyk7CisKK2lmICgkc2NlbmFyaW8gPT0gMSkKK3sKKwkj IFNjZW5hcmlvIDE6IEZ1bGwgUERCIHN5bWJvbHMKKwlsaWtlKCRsb2dfY29udGVudCwgcXIv XHcrXCsweFswLTlhLWZBLUZdKy8sCisJCSdTY2VuYXJpbyAxOiBmdW5jdGlvbitvZmZzZXQg Zm9ybWF0IHByZXNlbnQnKTsKKworCWxpa2UoJGxvZ19jb250ZW50LCBxci9cW1tcdzpcXFwv XStcLlx3KzpcZCtcXS8sCisJCSdTY2VuYXJpbyAxOiBzb3VyY2UgZmlsZXMgYW5kIGxpbmUg bnVtYmVycyBwcmVzZW50Jyk7CisKKwlsaWtlKCRsb2dfY29udGVudCwgcXIvXFsweFswLTlh LWZBLUZdK1xdLywKKwkJJ1NjZW5hcmlvIDE6IGFkZHJlc3NlcyBwcmVzZW50Jyk7CisKKwkj IEV4dHJhY3QgZXhhbXBsZSBwYXRocyB0byBzaG93IGluIHRlc3Qgb3V0cHV0CisJbXkgQGV4 YW1wbGVfcGF0aHMgPSAoJGxvZ19jb250ZW50ID1+IC9cWyhbXlxdXStcLlx3KzpcZCspXF0v Zyk7CisKKwlpZiAoQGV4YW1wbGVfcGF0aHMpCisJeworCQlwYXNzKCdTY2VuYXJpbyAxOiBi YWNrdHJhY2UgaW5jbHVkZXMgc291cmNlIGZpbGUgcGF0aHMnKTsKKwkJbm90ZSgiRXhhbXBs ZSBwYXRoOiAkZXhhbXBsZV9wYXRoc1swXSIpOworCX0KKwllbHNlCisJeworCQlmYWlsKCdT Y2VuYXJpbyAxOiBubyBzb3VyY2UgZmlsZSBwYXRocyBmb3VuZCcpOworCX0KK30KK2Vsc2lm ICgkc2NlbmFyaW8gPT0gMikKK3sKKwkjIFNjZW5hcmlvIDI6IEV4cG9ydCBzeW1ib2xzIG9u bHkKKwlsaWtlKCRsb2dfY29udGVudCwgcXIvXHcrXCsweFswLTlhLWZBLUZdKy8sCisJCSdT Y2VuYXJpbyAyOiBmdW5jdGlvbitvZmZzZXQgZm9ybWF0IHByZXNlbnQnKTsKKworCWxpa2Uo JGxvZ19jb250ZW50LCBxci9cWzB4WzAtOWEtZkEtRl0rXF0vLAorCQknU2NlbmFyaW8gMjog YWRkcmVzc2VzIHByZXNlbnQnKTsKKworCXVubGlrZSgkbG9nX2NvbnRlbnQsIHFyL1xbW1x3 OlxcXC9dK1wuXHcrOlxkK1xdLywKKwkJJ1NjZW5hcmlvIDI6IG5vIHNvdXJjZSBmaWxlcyAo ZXhwZWN0ZWQgd2l0aG91dCBQREIpJyk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKKyMgVGVzdCB0aGF0IGJhY2t0cmFjZXMgd29yayBmb3IgdmFyaW91cyB0eXBlcyBvZiBl cnJvcnMuCisjCisjIFRoZSBiYWNrdHJhY2UgbWVjaGFuaXNtIHNob3VsZCB3b3JrIHJlZ2Fy ZGxlc3Mgb2Ygd2hhdCB0cmlnZ2VyZWQgdGhlIGVycm9yLgorIyBUcnkgYSBmZXcgZGlmZmVy ZW50IGVycm9yIHR5cGVzIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3Qgc29tZWhvdyBkZXBlbmRl bnQgb24KKyMgdGhlIGVycm9yIHBhdGguICBBbHNvIGNoZWNrIHRoYXQgUEwvcGdTUUwgYW5k IHRyaWdnZXJzIHdvcmssIHNpbmNlIHRob3NlIGdvCisjIHRocm91Z2ggZGlmZmVyZW50IGNv ZGUgcGF0aHMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUoJycpOworbm90 ZSgnPT09IFBBUlQgMzogRXJyb3IgU2NlbmFyaW8gQ292ZXJhZ2UgPT09Jyk7CisKKyMjIyBU ZXN0OiBUeXBlIGNvbnZlcnNpb24gZXJyb3IKKygkcmV0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9 ICRub2RlLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgJ2ludmFsaWQnOjppbnRlZ2VyOyIp Oworb2soJHJldCAhPSAwLCAndHlwZSBjb252ZXJzaW9uIGVycm9yIG9jY3VycmVkJyk7Cits aWtlKCRzdGRlcnIsIHFyL2ludmFsaWQgaW5wdXQgc3ludGF4L2ksICd0eXBlIGNvbnZlcnNp b24gZXJyb3IgbWVzc2FnZScpOworCisjIyMgVGVzdDogQ29uc3RyYWludCB2aW9sYXRpb24K KyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0ZXN0X3RhYmxl IChpZCBpbnRlZ2VyIFBSSU1BUlkgS0VZKTsiKTsKKygkcmV0LCAkc3Rkb3V0LCAkc3RkZXJy KSA9ICRub2RlLT5wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRlc3RfdGFibGUg VkFMVUVTICgxKSwgKDEpOyIpOworb2soJHJldCAhPSAwLCAnY29uc3RyYWludCB2aW9sYXRp b24gb2NjdXJyZWQnKTsKK2xpa2UoJHN0ZGVyciwgcXIvKGR1cGxpY2F0ZSBrZXl8dW5pcXVl IGNvbnN0cmFpbnQpL2ksICdjb25zdHJhaW50IHZpb2xhdGlvbiBtZXNzYWdlJyk7CisKKyMj IyBUZXN0OiBQTC9wZ1NRTCBuZXN0ZWQgZnVuY3Rpb24KKyRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXsKKwlDUkVBVEUgRlVOQ1RJT04gbmVzdGVkX2Z1bmMoKSBSRVRVUk5TIHZv aWQgQVMgJCQKKwlCRUdJTgorCQlQRVJGT1JNIDEvMDsKKwlFTkQ7CisJJCQgTEFOR1VBR0Ug cGxwZ3NxbDsKK30pOworCisoJHJldCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9kZS0+cHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIG5lc3RlZF9mdW5jKCk7Iik7CitvaygkcmV0ICE9IDAs ICduZXN0ZWQgZnVuY3Rpb24gZXJyb3Igb2NjdXJyZWQnKTsKKworc2xlZXAgMTsKKyRsb2df Y29udGVudCA9IGdldF9yZWNlbnRfbG9nX2NvbnRlbnQoKTsKK215IEBhZGRyZXNzZXMgPSAo JGxvZ19jb250ZW50ID1+IC9cWzB4WzAtOWEtZkEtRl0rXF0vZyk7CitteSAkZnJhbWVfY291 bnQgPSBzY2FsYXIgQGFkZHJlc3NlczsKK29rKCRmcmFtZV9jb3VudCA+PSAzLAorCSJQTC9w Z1NRTCBlcnJvciBoYXMgZGVlcGVyIHN0YWNrIChmb3VuZCAkZnJhbWVfY291bnQgZnJhbWVz KSIpOworCisjIyMgVGVzdDogVHJpZ2dlciBlcnJvcgorJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxeworCUNSRUFURSBUQUJMRSB0cmlnZ2VyX3Rlc3QgKHZhbCBpbnRlZ2VyKTsK KworCUNSRUFURSBGVU5DVElPTiB0cmlnZ2VyX2Z1bmMoKSBSRVRVUk5TIHRyaWdnZXIgQVMg JCQKKwlCRUdJTgorCQlQRVJGT1JNIDEvMDsKKwkJUkVUVVJOIE5FVzsKKwlFTkQ7CisJJCQg TEFOR1VBR0UgcGxwZ3NxbDsKKworCUNSRUFURSBUUklHR0VSIHRlc3RfdHJpZ2dlciBCRUZP UkUgSU5TRVJUIE9OIHRyaWdnZXJfdGVzdAorCQlGT1IgRUFDSCBST1cgRVhFQ1VURSBGVU5D VElPTiB0cmlnZ2VyX2Z1bmMoKTsKK30pOworCisoJHJldCwgJHN0ZG91dCwgJHN0ZGVycikg PSAkbm9kZS0+cHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0cmlnZ2VyX3Rlc3Qg VkFMVUVTICgxKTsiKTsKK29rKCRyZXQgIT0gMCwgJ3RyaWdnZXIgZXJyb3Igb2NjdXJyZWQn KTsKK2xpa2UoJHN0ZGVyciwgcXIvZGl2aXNpb24gYnkgemVyby9pLCAndHJpZ2dlciBlcnJv ciBtZXNzYWdlJyk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVmVyaWZ5IHRo YXQgcmVwZWF0ZWQgYmFja3RyYWNlIGdlbmVyYXRpb24gZG9lc24ndCBjYXVzZSBwcm9ibGVt cy4KKyMKKyMgV2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIGRldGVjdCBtZW1vcnkgbGVh a3MgaW4gdGhpcyB0ZXN0LCBidXQgd2UgY2FuCisjIGF0IGxlYXN0IGNoZWNrIHRoYXQgdGhl IHNlcnZlciBkb2Vzbid0IGNyYXNoIG9yIHN0YXJ0IHNwZXdpbmcgZXJyb3JzIGFmdGVyCisj IHdlJ3ZlIGdlbmVyYXRlZCBhIGJ1bmNoIG9mIGJhY2t0cmFjZXMuICBBbHNvIHZlcmlmeSB0 aGF0IERiZ0hlbHAgZG9lc24ndAorIyBsb2cgYW55IGluaXRpYWxpemF0aW9uIGZhaWx1cmVz LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlKCcnKTsKK25vdGUoJz09PSBQ QVJUIDQ6IFN0YWJpbGl0eSBUZXN0cyA9PT0nKTsKKworIyMjIFRlc3Q6IE11bHRpcGxlIGVy cm9ycyBkb24ndCBjcmFzaCB0aGUgc2VydmVyCitteSAkZXJyb3JfY291bnQgPSAwOworZm9y IG15ICRpICgxLi4yMCkKK3sKKwkoJHJldCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9kZS0+ cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIDEvMDsiKTsKKwkkZXJyb3JfY291bnQrKyBpZiAo JHJldCAhPSAwKTsKK30KKworaXMoJGVycm9yX2NvdW50LCAyMCwgJ2FsbCAyMCByYXBpZCBl cnJvcnMgb2NjdXJyZWQgKERiZ0hlbHAgc3RhYmxlKScpOworCitzbGVlcCAyOworJGxvZ19j b250ZW50ID0gZ2V0X3JlY2VudF9sb2dfY29udGVudCgpOworQGFkZHJlc3NlcyA9ICgkbG9n X2NvbnRlbnQgPX4gL1xbMHhbMC05YS1mQS1GXStcXS9nKTsKK29rKHNjYWxhcihAYWRkcmVz c2VzKSA+PSAyMCwKKwknbXVsdGlwbGUgcmFwaWQgZXJyb3JzIHByb2R1Y2VkIGJhY2t0cmFj ZXMgKCcgLiBzY2FsYXIoQGFkZHJlc3NlcykgLiAnIGFkZHJlc3NlcyBmb3VuZCknKTsKKwor IyMjIFRlc3Q6IE5vIFN5bUluaXRpYWxpemUgZmFpbHVyZXMKK3VubGlrZSgkbG9nX2NvbnRl bnQsIHFyL1N5bUluaXRpYWxpemUuKmZhaWxlZC9pLAorCSdubyBTeW1Jbml0aWFsaXplIGZh aWx1cmVzIGluIGxvZycpOworCisjIyMgVGVzdDogUmVwZWF0ZWQgZXJyb3JzIGluIHNhbWUg c2Vzc2lvbgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworCURPICQkCisJQkVH SU4KKwkJRk9SIGkgSU4gMS4uMTAgTE9PUAorCQkJQkVHSU4KKwkJCQlFWEVDVVRFICdTRUxF Q1QgMS8wJzsKKwkJCUVYQ0VQVElPTgorCQkJCVdIRU4gZGl2aXNpb25fYnlfemVybyBUSEVO CisJCQkJCU5VTEw7ICAtLSBTd2FsbG93IHRoZSBlcnJvcgorCQkJRU5EOworCQlFTkQgTE9P UDsKKwlFTkQgJCQ7Cit9KTsKKworcGFzcygncmVwZWF0ZWQgZXJyb3JzIGluIHNhbWUgc2Vz c2lvbiBkaWQgbm90IGNyYXNoJyk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMg U3VtbWFyeQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitub3RlKCcnKTsKK25vdGUo Jz09PSBURVNUIFNVTU1BUlkgPT09Jyk7Citub3RlKCJTY2VuYXJpbzogJHNjZW5hcmlvIik7 Citub3RlKCcnKTsKKworaWYgKCRzY2VuYXJpbyA9PSAxKSB7CisJbm90ZSgnQlVJTEQgVFlQ RTogUmVsZWFzZS9EZWJ1Zy9EZWJ1Z09wdGltaXplZCBXSVRIIC5wZGIgZmlsZScpOworCW5v dGUoJycpOworCW5vdGUoJ1ZhbGlkYXRlZDonKTsKKwlub3RlKCcgIOKckyBGdW5jdGlvbiBu YW1lcyB3aXRoIG9mZnNldHMnKTsKKwlub3RlKCcgIOKckyBTb3VyY2UgZmlsZXMgYW5kIGxp bmUgbnVtYmVycycpOworCW5vdGUoJyAg4pyTIE1lbW9yeSBhZGRyZXNzZXMnKTsKKwlub3Rl KCcgIOKckyBTdGFjayBkZXB0aCAoc2hhbGxvdyBhbmQgbmVzdGVkKScpOworCW5vdGUoJyAg 4pyTIE11bHRpcGxlIGVycm9yIHNjZW5hcmlvcycpOworCW5vdGUoJyAg4pyTIFN0YWJpbGl0 eSAoMjAgcmFwaWQgZXJyb3JzLCBubyBjcmFzaGVzKScpOworCW5vdGUoJyAg4pyTIE5vIERi Z0hlbHAgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMnKTsKK30KK2Vsc2lmICgkc2NlbmFyaW8g PT0gMikgeworCW5vdGUoJ0JVSUxEIFRZUEU6IFJlbGVhc2UgV0lUSE9VVCAucGRiIGZpbGUn KTsKKwlub3RlKCcnKTsKKwlub3RlKCdWYWxpZGF0ZWQ6Jyk7CisJbm90ZSgnICDinJMgRnVu Y3Rpb24gbmFtZXMgd2l0aCBvZmZzZXRzJyk7CisJbm90ZSgnICDinJMgTWVtb3J5IGFkZHJl c3NlcycpOworCW5vdGUoJyAg4pyXIE5vIHNvdXJjZSBmaWxlcyAoZXhwZWN0ZWQgLSBubyBQ REIpJyk7CisJbm90ZSgnICDinJMgU3RhY2sgZGVwdGggKHNoYWxsb3cgYW5kIG5lc3RlZCkn KTsKKwlub3RlKCcgIOKckyBNdWx0aXBsZSBlcnJvciBzY2VuYXJpb3MnKTsKKwlub3RlKCcg IOKckyBTdGFiaWxpdHkgKDIwIHJhcGlkIGVycm9ycywgbm8gY3Jhc2hlcyknKTsKKwlub3Rl KCcgIOKckyBObyBEYmdIZWxwIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzJyk7Cit9Citub3Rl KCc9PT09PT09PT09PT09PT09PT09PScpOworbm90ZSgnJyk7CisKKyRub2RlLT5zdG9wOwor Citkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9i YWNrdHJhY2UvdGVzdF9iYWNrdHJhY2UtLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYmFja3RyYWNlL3Rlc3RfYmFja3RyYWNlLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLmYyZTYxNGExOGQKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL3Rlc3RfYmFja3RyYWNlLS0xLjAuc3Fs CkBAIC0wLDAgKzEsNjYgQEAKKy8qIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2Uv dGVzdF9iYWNrdHJhY2UtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlz IHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xl Y2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2JhY2t0cmFjZSIgdG8gbG9hZCB0aGlz IGZpbGUuIFxxdWl0CisKKy0tCistLSBUZXN0IGZ1bmN0aW9ucyBmb3IgV2luZG93cyBiYWNr dHJhY2UgZnVuY3Rpb25hbGl0eQorLS0KKworLS0gRnVuY3Rpb24gdGhhdCB0cmlnZ2VycyBh IGRpdmlzaW9uIGJ5IHplcm8gZXJyb3IKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2JhY2t0cmFj ZV9kaXZfYnlfemVybygpCitSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQk CitCRUdJTgorICAgIFBFUkZPUk0gMS8wOworRU5EOworJCQ7CisKKy0tIEZ1bmN0aW9uIHRo YXQgdHJpZ2dlcnMgYSB0eXBlIGNvbnZlcnNpb24gZXJyb3IKK0NSRUFURSBGVU5DVElPTiB0 ZXN0X2JhY2t0cmFjZV90eXBlX2Vycm9yKCkKK1JFVFVSTlMgaW50ZWdlcgorTEFOR1VBR0Ug cGxwZ3NxbAorQVMgJCQKK0JFR0lOCisgICAgUkVUVVJOICdub3QgYSBudW1iZXInOjppbnRl Z2VyOworRU5EOworJCQ7CisKKy0tIE5lc3RlZCBmdW5jdGlvbiBjYWxscyB0byB0ZXN0IGNh bGwgc3RhY2sgZGVwdGgKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2JhY2t0cmFjZV9sZXZlbDMo KQorUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorQkVHSU4KKyAgICBQ RVJGT1JNIDEvMDsKK0VORDsKKyQkOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9iYWNrdHJh Y2VfbGV2ZWwyKCkKK1JFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0JF R0lOCisgICAgUEVSRk9STSB0ZXN0X2JhY2t0cmFjZV9sZXZlbDMoKTsKK0VORDsKKyQkOwor CitDUkVBVEUgRlVOQ1RJT04gdGVzdF9iYWNrdHJhY2VfbGV2ZWwxKCkKK1JFVFVSTlMgdm9p ZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0JFR0lOCisgICAgUEVSRk9STSB0ZXN0X2Jh Y2t0cmFjZV9sZXZlbDIoKTsKK0VORDsKKyQkOworCistLSBUZXN0IGFycmF5IGJvdW5kcyBl cnJvcgorQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYmFja3RyYWNlX2FycmF5X2JvdW5kcygpCitS RVRVUk5TIGludGVnZXIKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitCRUdJTgorICAgIFJF VFVSTiAoJ3sxLDIsM30nOjppbnRbXSlbMTBdOworRU5EOworJCQ7CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL3Rlc3RfYmFja3RyYWNlLmNvbnRyb2wg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL3Rlc3RfYmFja3RyYWNlLmNvbnRy b2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYWMyN2IyODI4Nwot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvdGVz dF9iYWNrdHJhY2UuY29udHJvbApAQCAtMCwwICsxLDUgQEAKKyMgdGVzdF9iYWNrdHJhY2Ug ZXh0ZW5zaW9uCitjb21tZW50ID0gJ1Rlc3QgbW9kdWxlIGZvciBXaW5kb3dzIGJhY2t0cmFj ZSBmdW5jdGlvbmFsaXR5JworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRo bmFtZSA9ICckbGliZGlyL3Rlc3RfYmFja3RyYWNlJworcmVsb2NhdGFibGUgPSB0cnVlCi0t IAoyLjQ2LjAud2luZG93cy4xCgo= --------------PZgw3gxKOelH0lyZvnc5y670--