Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w1cRs-000SIu-0I for pgsql-hackers@arkaria.postgresql.org; Sun, 15 Mar 2026 03:47:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w1cRo-003QNs-2X for pgsql-hackers@arkaria.postgresql.org; Sun, 15 Mar 2026 03:47:25 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w1cRo-003QNj-07 for pgsql-hackers@lists.postgresql.org; Sun, 15 Mar 2026 03:47:25 +0000 Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w1cRk-00000000C0q-3A6J for pgsql-hackers@lists.postgresql.org; Sun, 15 Mar 2026 03:47:23 +0000 Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-663a6bb0fa1so3869217a12.3 for ; Sat, 14 Mar 2026 20:47:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773546439; cv=none; d=google.com; s=arc-20240605; b=VJ67lqxu9YvjjnQHVSO7glp57Gb0/6CZ2HYvcPBoBTHhECDZZ4QBi54D1cc9vGUrkG kl8lZhXbgkajaswtIznFdHO+OqYsikiRm8w9Qsrxe4zTUj4e00PLuPA30SoUFngHd67h m8jKw+A+P4fsadg/kDgfZyrRhLVwoAXlW7YEXLIveixWRcTs1rQyU1D3GImU9JpsWECn dWPzB2EGydCI9/tZQjuBxqZTWIgmxwt3hDLjBY8Uc5ezE+EkW6q0NrI+LbwH6P/e+VED /a19I7/ojh1eqFdoYrr5YKqLf9O++pIhls1sP5tYtpmSVqu/uNKhEqgKIuqt7qeor5za G3Uw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=FR6nN6a71vRi+Of1VWiMd5TKiLcYAj6EIaFAv3v7K50=; fh=5oW8mt7+pVLpT5rBscLxj/JWyG4bENVbv9QP+Rn5gjM=; b=KK0+fKuP37UnCrW/1IKbZOsyAiehR+Khn/H/SRg0MnxfCiQdPiWuJ5Tz7jsoDGY9wr rDlhKKqesDXVfmFVrhEe8IaWqSKRURX6878jE+Nf9K7Uoc9/uj/GyP8so49D894hZE1M Bltk7vI/wgh/OSTm7+KD+2PQ0ExFLIZdem6dtnb0gpbU9RPtBgQBVP5ggZvv/YorABBO n6P5cRpeBHl4CpTKmzBZ4qYY2Ignuh9UO1bzxCBVWP3BdLkIK/JHgbkbmpD5fF9WZKJs 5EB5CyUcUpqBI45jXGrD3nA9joyqicpgDUkSyH+/h+S1RfAKlYa0J+bUMLV7F5LEyAxC PQWg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773546439; x=1774151239; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=FR6nN6a71vRi+Of1VWiMd5TKiLcYAj6EIaFAv3v7K50=; b=M31K+dzFyAOR0PZdgrFg/X1spkO747WN/0t6dL0b0wMmp+n1pL4xY8BvZhtI3bzGrb DeCBHWhcMA4b6bqZobmRPehUX8BQL59oFAWwVYZ36MWsR25dJ9kpe7VV3+GgTVE2vgOH BP2h5N0PNrd3I8LFWFZUw4B0ntdcfOiDMI1rQ/0AOFIzWbf8/bZQLh0Sf7nQqiBorktW +mzU3ilf5soNo3q/yXT6pbTHmZIlhHHl6OrGj+oF6N8tkgc6Lh/YWD6j8cubSWu7CjXW yqy8ylia0BvbHSLG9AUvQ3YbIMorkqmK0T+la7+XvGbH/TMQ+ZBxF9XMxt0La1TPVO3g iXUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773546439; x=1774151239; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=FR6nN6a71vRi+Of1VWiMd5TKiLcYAj6EIaFAv3v7K50=; b=AgrHkgegU/DXvjEjpWhDsDcqZQVim1tncMs5vi+2t+0UYP3lVfD5KkisDbwke47Oda DdsjVtp0Ua1QqP8yOXE1X0ENDejgFQIg4CgyqJWAVx1WNvmfqQTLniZIst4HXl5L5HX4 9fU9vpd6OGb9EAjC/cvB+ScNyZyLb1wqEbBN7HjDd35q6hT6h0JS6wkTpJ3COM+Z0EAK v3+DlKj0EyrpjlNwCpFA/8jJ2SVoWOpH3+i4+aVgQHh2543AlrVXN+6Z+1V+6CeGI7m3 rpgLdM1RaALbwohhSZ2+sXdsPcKtVXOz6jSTbhutMv6r+xHZUnK85CoF7ED4qt+2rtlD pNng== X-Forwarded-Encrypted: i=1; AJvYcCVoqgIle+BKctf8MA7TCrP2DvwwuOVfmUfQbjChmp4M9GMaeHCULJ1TooZeme9ZVpfnF6SexzyRFYINm2pJ@lists.postgresql.org X-Gm-Message-State: AOJu0Yw7GS2Tte+xao9mPwqQ8sOiibJYXQl4sTmIPfzH3gUzfDESKuHL 0tgaQi8p9KLKFwvB3W2VFXRLzzJp912fJZb1xDx1SHpqLqkZSZ0DIqvZ00WxSrF+e2ffGHtXchd C91aHdRKvkTS1jhblOaaC17aEIIadvh656wRqjr/IGA== X-Gm-Gg: ATEYQzwNFblDieHJAsUUlO7hq7joQ+M8XYKiouJ/qhpm8WHIIMCjR6zG6Ta5PcSSzAX hjDMMoYL14OIi74KNsF6NzoK0lEMIePPTBzzSINofPbkCPn55EKaGC3mg+ZKEyxavfQAaUHnbXS TqJndHttEwm1rT6eBF7RdMsqsZClme5F0BwKTvBywhGd7AxWmXn/Bm8rKQ4GJuLlbJbVdAyTwts iVCobI80CTmwZ6UT2L6doemiZyn+2bkMuei/LHlWUBW6+vph1FvwDWHvt5uEJFtVbhzp7vztmtS IxHS7gt1ZF/MP9gM1u/qKGNyPDAJj6K6NSNmx5aJoYjpOyE7Et1M/Tt2Mru6zHrktdGLssil1u9 9RH0EzC0= X-Received: by 2002:a05:6402:370a:b0:665:e9f:9021 with SMTP id 4fb4d7f45d1cf-6650e9f92b5mr403600a12.9.1773546439354; Sat, 14 Mar 2026 20:47:19 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Xuneng Zhou Date: Sun, 15 Mar 2026 11:47:06 +0800 X-Gm-Features: AaiRm51Ff3czQhMtxgcl7q4bTD8i44lzvAVPAsxbyuFiLS5DIbC89byzgwmuctw Message-ID: Subject: Re: Streamify more code paths To: Michael Paquier Cc: Andres Freund , pgsql-hackers , Nazir Bilal Yavuz Content-Type: multipart/mixed; boundary="00000000000082db66064d07f582" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000082db66064d07f582 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Mar 15, 2026 at 10:51=E2=80=AFAM Xuneng Zhou = wrote: > > On Sat, Mar 14, 2026 at 5:56=E2=80=AFPM Michael Paquier wrote: > > > > On Fri, Mar 13, 2026 at 10:39:52AM +0800, Xuneng Zhou wrote: > > > Thanks for fixing this and for taking the time to review and test > > > the patches. > > > > Looking at the rest, I have produced some numbers: > > pgstattuple_small (20k tuples, io_uring) base=3D 60839.9ms > > patch=3D10949.9ms 5.56x ( 82.0%) (reads=3D4139->260, > > io_time=3D49616.97->55.25ms) > > pgstattuple_small (20k tuples, worker=3D3) base=3D 60577.5ms > > patch=3D11470.0ms 5.28x ( 81.1%) (reads=3D4139->260, > > io_time=3D49359.79->69.60ms) > > hash_vacuum (1M tuples, io_uring) base=3D199929.0ms patch=3D161747.0ms > > 1.24x ( 19.1%) (reads=3D4665->1615, io_time=3D47084.8->9925.77ms) > > hash_vacuum (1M tuples, worker=3D12) base=3D203417.0ms patch=3D161687.0= ms > > 1.26x ( 20.5%) (reads=3D4665->1615, io_time=3D48356.3->9917.24ms) > > > > The hash vacuum numbers are less amazing here than yours. Trying out > > various configurations does not change the results much (I was puzzled > > for a couple of hours that I did not see any performance impact but > > forgot the eviction of the index pages from the shared buffers, that > > influences the numbers to what I have here), but I'll take it anyway. > > My guess is that the results are influenced by the write delay. Vacuum > operations can be write-intensive, so when both read and write delays > are set to 2 ~ 5 ms, a large portion of the runtime may be spent on > writes. According to Amdahl=E2=80=99s Law, the overall performance improv= ement > from optimizing a single component is limited by the fraction of time > that component actually contributes to the total execution time. In > this case, the potential rate of speedup from streaming the read path > could be masked by the time spent performing writes. > > To investigate this, I added a new option, write-delay. When it is set > to zero, the benchmark simulates a system with a fast write device and > a slow read device, reducing the proportion of time spent on writes. > Admittedly, this setup is somewhat artificial=E2=80=94we would not normal= ly > expect such a large discrepancy between read and write performance in > real systems. > > -- worker 12, write-delay 2 ms > hash_vacuum_medium base=3D 33743.2ms patch=3D 27371.3ms 1.23x > ( 18.9%) (reads=3D4662=E2=86=921612, read_time=3D8242.51=E2=86=921725.03= ms, > writes=3D12689=E2=86=9212651, write_time=3D25144.87=E2=86=9225041.75ms) > > -- worker 12, write-delay 0 ms > hash_vacuum_medium base=3D 8601.1ms patch=3D 2234.0ms 3.85x > ( 74.0%) (reads=3D4662=E2=86=921612, read_time=3D8021.65=E2=86=921637.87= ms, > writes=3D12689=E2=86=9212651, write_time=3D337.38=E2=86=92288.15ms) > > To better understand the behavior, the latest version of the script > separates the I/O time into read time and write time. This allows us > to directly observe their respective contributions and how they change > across runs. A further improvement would be to report the speedup for > the read and write components separately, making it easier to > understand where and how much the performance gains actually occur. The updated script now reports speedup separately for the read and write paths like this: hash_vacuum_medium base=3D 33747.2ms patch=3D 27379.7ms 1.23x (= 18.9%) read: 4662=E2=86=921612 ops 8238.72=E2=86=92= 1725.86ms (4.77x) write: 12689=E2=86=9212651 ops 25146.51=E2=86=9225053.57ms (1= .00x) I think it is useful to keep the write-delay option even with this reporting. Separating the read and write delays also helps reduce the overall runtime of the tests, especially for large data sizes: we only slow down the read path while keeping the write path fast. --=20 Best, Xuneng --00000000000082db66064d07f582 Content-Type: text/x-sh; charset="UTF-8"; name="run_streaming_benchmark.sh" Content-Disposition: attachment; filename="run_streaming_benchmark.sh" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmr7c16s0 IyEvdXNyL2Jpbi9lbnYgYmFzaApzZXQgLWV1byBwaXBlZmFpbAoKIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwojIFN0cmVhbWluZyBSZWFkIFBhdGNoZXMgQmVuY2htYXJrCiMKIyBVc2FnZTogLi9ydW5f c3RyZWFtaW5nX2JlbmNoLnNoIFtPUFRJT05TXSA8cGF0Y2g+CiMKIyBPcHRpb25zOgojICAgLS1j bGVhbiAgICAgICAgICAgUmVtb3ZlIGV4aXN0aW5nIGJ1aWxkcyBhbmQgc3RhcnQgZnJlc2gKIyAg IC0tYmFzZWxpbmUgICAgICAgIEFsc28gYnVpbGQgYW5kIHRlc3QgdmFuaWxsYSBQb3N0Z3JlU1FM IGZvciBjb21wYXJpc29uCiMgICAtLXRlc3QgVEVTVCAgICAgICBSdW4gc3BlY2lmaWMgdGVzdCAo Ymxvb21fc2NhbiwgYmxvb21fdmFjdXVtLCBwZ3N0YXR0dXBsZSwKIyAgICAgICAgICAgICAgICAg ICAgIHBnc3RhdGluZGV4LCBnaW5fdmFjdXVtLCB3YWxfbG9nZ2luZywgaGFzaF92YWN1dW0sIG9y ICJhbGwiKQojICAgLS1pby1tZXRob2QgTU9ERSAgSS9PIG1ldGhvZDogaW9fdXJpbmcsIHdvcmtl ciwgb3Igc3luYyAoZGVmYXVsdDogaW9fdXJpbmcpCiMgICAtLWlvLXdvcmtlcnMgTiAgICBOdW1i ZXIgb2YgSS9PIHdvcmtlcnMgZm9yIHdvcmtlciBtb2RlIChkZWZhdWx0OiAzKQojICAgLS1pby1j b25jdXJyZW5jeSBOICBNYXggY29uY3VycmVudCBJL09zIHBlciBwcm9jZXNzIChkZWZhdWx0OiA2 NCkKIyAgIC0tZGlyZWN0LWlvICAgICAgICAgRW5hYmxlIGRpcmVjdCBJTyAoZGVidWdfaW9fZGly ZWN0PWRhdGEpLCBieXBhc3NlcyBPUyBwYWdlIGNhY2hlCiMgICAtLXJlYWQtZGVsYXkgTVMgICAg IFNpbXVsYXRlIHJlYWQgbGF0ZW5jeSB2aWEgZG1fZGVsYXkgKHJlcXVpcmVzIHByZS1jcmVhdGVk IGRldmljZSkKIyAgIC0td3JpdGUtZGVsYXkgTVMgICAgU2ltdWxhdGUgd3JpdGUgbGF0ZW5jeSB2 aWEgZG1fZGVsYXkgKGRlZmF1bHQ6IDAsIHJlcXVpcmVzIC0tcmVhZC1kZWxheSkKIyAgIC0tcHJv ZmlsZSAgICAgICAgICAgRW5hYmxlIHBlcmYgcHJvZmlsaW5nIGFuZCBmbGFtZWdyYXBoIGdlbmVy YXRpb24KIwojIEVudmlyb25tZW50OgojICAgV09SS1JPT1QgICAgICAgQmFzZSBkaXJlY3Rvcnkg KGRlZmF1bHQ6ICRIT01FL3BnX2JlbmNoKQojICAgUkVQUyAgICAgICAgICAgUmVwZXRpdGlvbnMg cGVyIHRlc3QgKGRlZmF1bHQ6IDUpCiMgICBTSVpFUyAgICAgICAgICBUYWJsZSBzaXplcyB0byB0 ZXN0IChkZWZhdWx0OiAibGFyZ2UiKQojICAgRkxBTUVHUkFQSF9ESVIgUGF0aCB0byBGbGFtZUdy YXBoIHRvb2xzIChkZWZhdWx0OiAkSE9NRS9GbGFtZUdyYXBoKQojICAgRE1fREVMQVlfREVWICAg ZG1fZGVsYXkgZGV2aWNlIG5hbWUgZm9yIC0tcmVhZC1kZWxheSAoZGVmYXVsdDogImRlbGF5ZWQi KQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpsb2coKSB7IHByaW50ZiAnXDAzM1sxOzM0bT09Plww MzNbMG0gJXNcbicgIiQqIjsgfQpkaWUoKSB7IHByaW50ZiAnXDAzM1sxOzMxbUVSUk9SOlwwMzNb MG0gJXNcbicgIiQqIiA+JjI7IGV4aXQgMTsgfQoKIyAtLS0gQ0xJIHBhcnNpbmcgLS0tCkNMRUFO PTAKQkFTRUxJTkU9MApET19QUk9GSUxFPTAKRElSRUNUX0lPPTAKSU9fREVMQVlfTVM9IiIKV1JJ VEVfREVMQVlfTVM9IjAiClRFU1Q9ImFsbCIKSU9fTUVUSE9EPSIke0lPX01FVEhPRDotaW9fdXJp bmd9IgpJT19XT1JLRVJTPSIke0lPX1dPUktFUlM6LTN9IgpJT19NQVhfQ09OQ1VSUkVOQ1k9IiR7 SU9fTUFYX0NPTkNVUlJFTkNZOi02NH0iCkRNX0RFTEFZX0RFVj0iJHtETV9ERUxBWV9ERVY6LWRl bGF5ZWR9IgpQQVRDSD0iIgoKd2hpbGUgW1sgJCMgLWd0IDAgXV07IGRvCiAgY2FzZSAiJDEiIGlu CiAgICAtLWNsZWFuKSAgICAgICAgICBDTEVBTj0xIDs7CiAgICAtLWJhc2VsaW5lKSAgICAgICBC QVNFTElORT0xIDs7CiAgICAtLXByb2ZpbGUpICAgICAgICBET19QUk9GSUxFPTEgOzsKICAgIC0t ZGlyZWN0LWlvKSAgICAgIERJUkVDVF9JTz0xIDs7CiAgICAtLXJlYWQtZGVsYXkpICAgICBJT19E RUxBWV9NUz0iJDIiOyBzaGlmdCA7OwogICAgLS13cml0ZS1kZWxheSkgICAgV1JJVEVfREVMQVlf TVM9IiQyIjsgc2hpZnQgOzsKICAgIC0tdGVzdCkgICAgICAgICAgIFRFU1Q9IiQyIjsgc2hpZnQg OzsKICAgIC0taW8tbWV0aG9kKSAgICAgIElPX01FVEhPRD0iJDIiOyBzaGlmdCA7OwogICAgLS1p by13b3JrZXJzKSAgICAgSU9fV09SS0VSUz0iJDIiOyBzaGlmdCA7OwogICAgLS1pby1jb25jdXJy ZW5jeSkgSU9fTUFYX0NPTkNVUlJFTkNZPSIkMiI7IHNoaWZ0IDs7CiAgICAtaHwtLWhlbHApICAg ICAgICBzZWQgLW4gJzMsMjdwJyAiJDAiIHwgc2VkICdzL14jIFw/Ly8nOyBleGl0IDAgOzsKICAg IC0qKSAgICAgICAgICAgICAgIGRpZSAiVW5rbm93biBvcHRpb246ICQxIiA7OwogICAgKikgICAg ICAgICAgICAgICAgUEFUQ0g9IiQxIiA7OwogIGVzYWMKICBzaGlmdApkb25lCgojIFZhbGlkYXRl IGlvX21ldGhvZApjYXNlICIkSU9fTUVUSE9EIiBpbgogIGlvX3VyaW5nfHdvcmtlcnxzeW5jKSA7 OwogICopIGRpZSAiSW52YWxpZCAtLWlvLW1ldGhvZDogJElPX01FVEhPRCAobXVzdCBiZSBpb191 cmluZywgd29ya2VyLCBvciBzeW5jKSIgOzsKZXNhYwoKIyBWYWxpZGF0ZSBkbV9kZWxheSBkZXZp Y2UgaWYgLS1yZWFkLWRlbGF5IGlzIHVzZWQKaWYgW1sgLW4gIiRJT19ERUxBWV9NUyIgXV07IHRo ZW4KICBjb21tYW5kIC12IGRtc2V0dXAgPi9kZXYvbnVsbCAyPiYxIHx8IGRpZSAiLS1yZWFkLWRl bGF5IHJlcXVpcmVzIGRtc2V0dXAgKHN1ZG8gYXB0IGluc3RhbGwgZG1zZXR1cCkiCiAgc3VkbyBk bXNldHVwIHN0YXR1cyAiJERNX0RFTEFZX0RFViIgPi9kZXYvbnVsbCAyPiYxIFwKICAgIHx8IGRp ZSAiZG1fZGVsYXkgZGV2aWNlICckRE1fREVMQVlfREVWJyBub3QgZm91bmQuIENyZWF0ZSBpdCBm aXJzdCwgZS5nLjpcbiAgdW1vdW50IC9zcnYgJiYgZG1zZXR1cCBjcmVhdGUgJERNX0RFTEFZX0RF ViAtLXRhYmxlIFwiMCBcJChibG9ja2RldiAtLWdldHN6IC9kZXYvREVWSUNFKSBkZWxheSAvZGV2 L0RFVklDRSAwICRJT19ERUxBWV9NU1wiICYmIG1vdW50IC9kZXYvbWFwcGVyLyRETV9ERUxBWV9E RVYgL3Nydi8iCmZpCgpbWyAteiAiJFBBVENIIiBdXSAmJiBkaWUgIlVzYWdlOiAkMCBbLS1jbGVh bl0gWy0tYmFzZWxpbmVdIFstLXRlc3QgVEVTVF0gPHBhdGNoPiIKW1sgISAtZiAiJFBBVENIIiBd XSAmJiBkaWUgIlBhdGNoIG5vdCBmb3VuZDogJFBBVENIIgpbWyAiJFBBVENIIiAhPSAvKiBdXSAm JiBQQVRDSD0iJFBXRC8kUEFUQ0giCgojIC0tLSBQcm9maWxpbmcgdmFsaWRhdGlvbiAtLS0KRkxB TUVHUkFQSF9ESVI9IiR7RkxBTUVHUkFQSF9ESVI6LSRIT01FL0ZsYW1lR3JhcGh9IgpQRVJGX1NV RE89IiR7UEVSRl9TVURPOi1zdWRvfSIKUEVSRl9FVkVOVD0iJHtQRVJGX0VWRU5UOi1jeWNsZXN9 IiAgIyBjeWNsZXMgPSB1c2VyK2tlcm5lbDsgY3ljbGVzOnUgPSB1c2VyLW9ubHkKaWYgW1sgJERP X1BST0ZJTEUgLWVxIDEgXV07IHRoZW4KICBjb21tYW5kIC12IHBlcmYgPi9kZXYvbnVsbCAyPiYx IHx8IGRpZSAiTmVlZCBwZXJmIChzdWRvIGFwdCBpbnN0YWxsIGxpbnV4LXRvb2xzLSQodW5hbWUg LXIpKSIKICBbWyAteCAiJEZMQU1FR1JBUEhfRElSL3N0YWNrY29sbGFwc2UtcGVyZi5wbCIgXV0g fHwgZGllICJNaXNzaW5nICRGTEFNRUdSQVBIX0RJUi9zdGFja2NvbGxhcHNlLXBlcmYucGwgKGdp dCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vYnJlbmRhbmdyZWdnL0ZsYW1lR3JhcGgpIgogIFtb IC14ICIkRkxBTUVHUkFQSF9ESVIvZmxhbWVncmFwaC5wbCIgXV0gfHwgZGllICJNaXNzaW5nICRG TEFNRUdSQVBIX0RJUi9mbGFtZWdyYXBoLnBsIgpmaQoKIyAtLS0gQ29uZmlndXJhdGlvbiAtLS0K V09SS1JPT1Q9IiR7V09SS1JPT1Q6LSRIT01FL3BnX2JlbmNofSIKUkVQUz0iJHtSRVBTOi01fSIK U0laRVM9IiR7U0laRVM6LWxhcmdlfSIKClJPT1RfQkFTRT0iJFdPUktST09UL3ZhbmlsbGEiClBB VENIX1RBRz0kKGJhc2VuYW1lICIkUEFUQ0giIC5wYXRjaCB8IHRyIC1kYyAnWzphbG51bTpdXy0n IHwgY3V0IC1jMS00MCkKUk9PVF9QQVRDSD0iJFdPUktST09ULyRQQVRDSF9UQUciCgojIC0tLSBI ZWxwZXJzIC0tLQpwZygpIHsgZWNobyAiJDEvcGcvYmluLyQyIjsgfQoKcGlja19wb3J0KCkgewog IGZvciBwIGluICQoc2VxICIkezE6LTU0MzJ9IiA2MDAwMCk7IGRvCiAgICBsc29mIC1pVENQOiIk cCIgLXNUQ1A6TElTVEVOID4vZGV2L251bGwgMj4mMSB8fCB7IGVjaG8gIiRwIjsgcmV0dXJuOyB9 CiAgZG9uZQogIGRpZSAiTm8gZnJlZSBwb3J0IGZvdW5kIgp9CgpzZXRfaW9fZGVsYXkoKSB7CiAg bG9jYWwgbXM9IiQxIgogIFtbIC16ICIkSU9fREVMQVlfTVMiIF1dICYmIHJldHVybgogIGxvY2Fs IHRhYmxlIHNpemUgZGV2CiAgdGFibGU9JChzdWRvIGRtc2V0dXAgdGFibGUgIiRETV9ERUxBWV9E RVYiKQogIHNpemU9JChlY2hvICIkdGFibGUiIHwgYXdrICd7cHJpbnQgJDJ9JykKICBkZXY9JChl Y2hvICIkdGFibGUiIHwgYXdrICd7cHJpbnQgJDR9JykKICBsb2cgIlNldHRpbmcgZG1fZGVsYXkg b24gJERNX0RFTEFZX0RFViB0byAke21zfW1zIHJlYWQgLyAke1dSSVRFX0RFTEFZX01TfW1zIHdy aXRlIgogIHN1ZG8gZG1zZXR1cCBzdXNwZW5kICIkRE1fREVMQVlfREVWIgogIHN1ZG8gZG1zZXR1 cCByZWxvYWQgIiRETV9ERUxBWV9ERVYiIC0tdGFibGUgIjAgJHNpemUgZGVsYXkgJGRldiAwICRt cyAkZGV2IDAgJFdSSVRFX0RFTEFZX01TIgogIHN1ZG8gZG1zZXR1cCByZXN1bWUgIiRETV9ERUxB WV9ERVYiCn0KCiMgLS0tIEJ1aWxkIFBvc3RncmVTUUwgLS0tCmJ1aWxkX3BnKCkgewogIGxvY2Fs IFJPT1Q9IiQxIiBQQVRDSF9GSUxFPSIkezI6LX0iCiAgCiAgW1sgJENMRUFOIC1lcSAxIF1dICYm IHJtIC1yZiAiJFJPT1QiCiAgCiAgaWYgW1sgISAteCAiJChwZyAiJFJPT1QiIGluaXRkYikiIF1d OyB0aGVuCiAgICBsb2cgIkJ1aWxkaW5nIFBvc3RncmVTUUw6ICRST09UIgogICAgbWtkaXIgLXAg IiRST09UIgogICAgCiAgICBnaXQgY2xvbmUgLS1kZXB0aCAxIGh0dHBzOi8vZ2l0aHViLmNvbS9w b3N0Z3Jlcy9wb3N0Z3JlcyAiJFJPT1Qvc3JjIiAyPi9kZXYvbnVsbAogICAgY2QgIiRST09UL3Ny YyIKICAgIAogICAgW1sgLW4gIiRQQVRDSF9GSUxFIiBdXSAmJiB7IGxvZyAiQXBwbHlpbmcgcGF0 Y2giOyBnaXQgYXBwbHkgIiRQQVRDSF9GSUxFIjsgfQogICAgCiAgICAuL2NvbmZpZ3VyZSAtLXBy ZWZpeD0iJFJPT1QvcGciIC0td2l0aC1saWJ1cmluZyBcCiAgICAgIENGTEFHUz0nLU8yIC1nZ2Ri MyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlcicgPi9kZXYvbnVsbCAyPiYxCiAgICAKICAgIG1ha2Ug LWoiJChucHJvYykiIGluc3RhbGwgPi9kZXYvbnVsbCAyPiYxCiAgZWxzZQogICAgbG9nICJSZXVz aW5nIGJ1aWxkOiAkUk9PVCIKICAgIGNkICIkUk9PVC9zcmMiCiAgZmkKICAKICAjIEFsd2F5cyBp bnN0YWxsIGNvbnRyaWJzIChpZGVtcG90ZW50LCBjYXRjaGVzIHJldXNlZCBidWlsZHMgbWlzc2lu ZyBuZXcgZXh0ZW5zaW9ucykKICBtYWtlIC1DIGNvbnRyaWIvYmxvb20gaW5zdGFsbCA+L2Rldi9u dWxsIDI+JjEKICBtYWtlIC1DIGNvbnRyaWIvcGdzdGF0dHVwbGUgaW5zdGFsbCA+L2Rldi9udWxs IDI+JjEKICBtYWtlIC1DIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUgaW5zdGFsbCA+L2Rldi9udWxs IDI+JjEKICBtYWtlIC1DIGNvbnRyaWIvcGdfcHJld2FybSBpbnN0YWxsID4vZGV2L251bGwgMj4m MQp9CgojIC0tLSBDbHVzdGVyIG1hbmFnZW1lbnQgLS0tCmluaXRfY2x1c3RlcigpIHsKICBsb2Nh bCBST09UPSIkMSIgUE9SVD0iJDIiCiAgCiAgcm0gLXJmICIkUk9PVC9kYXRhIgogICIkKHBnICIk Uk9PVCIgaW5pdGRiKSIgLUQgIiRST09UL2RhdGEiIC0tbm8tbG9jYWxlID4vZGV2L251bGwgMj4m MQogIAogIGNhdCA+PiAiJFJPT1QvZGF0YS9wb3N0Z3Jlc3FsLmNvbmYiIDw8RU9GCnBvcnQgPSAk UE9SVApsaXN0ZW5fYWRkcmVzc2VzID0gJzEyNy4wLjAuMScKc2hhcmVkX2J1ZmZlcnMgPSAnMzJH QicKZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5ID0gMjAwCmlvX21ldGhvZCA9ICRJT19NRVRIT0QK aW9fd29ya2VycyA9ICRJT19XT1JLRVJTCmlvX21heF9jb25jdXJyZW5jeSA9ICRJT19NQVhfQ09O Q1VSUkVOQ1kKdHJhY2tfaW9fdGltaW5nID0gb24KdHJhY2tfd2FsX2lvX3RpbWluZyA9IG9uCnN5 bmNocm9ub3VzX2NvbW1pdCA9IG9uCmF1dG92YWN1dW0gPSBvZmYKY2hlY2twb2ludF90aW1lb3V0 ID0gMWgKbWF4X3dhbF9zaXplID0gMTBHQgptYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVy ID0gMApFT0YKICAKICBbWyAkRElSRUNUX0lPIC1lcSAxIF1dICYmIGVjaG8gImRlYnVnX2lvX2Rp cmVjdCA9IGRhdGEiID4+ICIkUk9PVC9kYXRhL3Bvc3RncmVzcWwuY29uZiIKICAKICAiJChwZyAi JFJPT1QiIHBnX2N0bCkiIC1EICIkUk9PVC9kYXRhIiAtbCAiJFJPT1Qvc2VydmVyLmxvZyIgc3Rh cnQgLXcgPi9kZXYvbnVsbAogIAogIHBzcWxfcnVuICIkUk9PVCIgIiRQT1JUIiAtYyAiQ1JFQVRF IEVYVEVOU0lPTiBJRiBOT1QgRVhJU1RTIHBnX2J1ZmZlcmNhY2hlOyIKICBwc3FsX3J1biAiJFJP T1QiICIkUE9SVCIgLWMgIkNSRUFURSBFWFRFTlNJT04gSUYgTk9UIEVYSVNUUyBwZ19wcmV3YXJt OyIKfQoKc3RvcF9jbHVzdGVyKCkgewogIGxvY2FsIFJPT1Q9IiQxIgogICIkKHBnICIkUk9PVCIg cGdfY3RsKSIgLUQgIiRST09UL2RhdGEiIHN0b3AgLW0gZmFzdCAyPi9kZXYvbnVsbCB8fCB0cnVl Cn0KCmRyb3BfY2FjaGVzKCkgewogIGxvY2FsIFJPT1Q9IiQxIiBQT1JUPSIkMiIKICBzaGlmdCAy CiAgbG9jYWwgcmVscz0oIiRAIikKICAKICAjIEV2aWN0IHRhcmdldCByZWxhdGlvbnMgZnJvbSBz aGFyZWQgYnVmZmVycyAobm8gUEcgcmVzdGFydCBuZWVkZWQpCiAgZm9yIHJlbCBpbiAiJHtyZWxz W0BdfSI7IGRvCiAgICBwc3FsX3J1biAiJFJPT1QiICIkUE9SVCIgLWMgIlNFTEVDVCBwZ19idWZm ZXJjYWNoZV9ldmljdF9yZWxhdGlvbignJHtyZWx9Jzo6cmVnY2xhc3MpOyIgPi9kZXYvbnVsbAog IGRvbmUKICAKICAjIERyb3AgT1MgcGFnZSBjYWNoZSAoc2tpcCB3aXRoIGRpcmVjdCBJTyDigJQg bm8gcGFnZSBjYWNoZSBpbnZvbHZlZCkKICBpZiBbWyAkRElSRUNUX0lPIC1lcSAwIF1dOyB0aGVu CiAgICBzeW5jCiAgICBlY2hvIDMgfCBzdWRvIHRlZSAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMg Pi9kZXYvbnVsbCAyPiYxIHx8IHRydWUKICAgIHNsZWVwIDIKICBmaQp9Cgpwc3FsX3J1bigpIHsK ICBsb2NhbCBST09UPSIkMSIgUE9SVD0iJDIiCiAgc2hpZnQgMgogICIkKHBnICIkUk9PVCIgcHNx bCkiIC1oIDEyNy4wLjAuMSAtcCAiJFBPUlQiIC1kIHBvc3RncmVzIC12IE9OX0VSUk9SX1NUT1A9 MSAtQXRxICIkQCIKfQoKIyAtLS0gVGltaW5nIC0tLQpydW5fdGltZWQoKSB7CiAgbG9jYWwgUk9P VD0iJDEiIFBPUlQ9IiQyIiBTUUw9IiQzIgogIGxvY2FsIG1zCiAgIyAtWDogaWdub3JlIC5wc3Fs cmMsIC12IE9OX0VSUk9SX1NUT1A9MTogZmFpbCBvbiBTUUwgZXJyb3JzCiAgIyBQYXJzZSBsYXN0 IFRpbWU6IGxpbmUsIGhhbmRsZSBib3RoICJtcyIgYW5kICJzIiB1bml0cwogIG1zPSQoIiQocGcg IiRST09UIiBwc3FsKSIgLWggMTI3LjAuMC4xIC1wICIkUE9SVCIgLWQgcG9zdGdyZXMgLVggLXYg T05fRVJST1JfU1RPUD0xIC1BdCBcCiAgICAtYyAnXHRpbWluZyBvbicgLWMgIiRTUUwiIDI+JjEg fCBcCiAgICBhd2sgJwogICAgICAvVGltZTovIHsKICAgICAgICB2YWw9JDI7IHVuaXQ9JDM7CiAg ICAgICAgaWYgKHVuaXQ9PSJtcyIpIG1zPXZhbDsKICAgICAgICBlbHNlIGlmICh1bml0PT0icyIp IG1zPXZhbCoxMDAwOwogICAgICB9CiAgICAgIEVORCB7IGlmIChtcz09IiIpIGV4aXQgMTsgcHJp bnRmICIlLjNmXG4iLCBtczsgfQogICAgJykKICAjIFZhbGlkYXRlIG51bWVyaWMgb3V0cHV0CiAg W1sgIiRtcyIgPX4gXlswLTldKyhcLlswLTldKyk/JCBdXSB8fCB7IGVjaG8gIkVSUk9SOiBOb24t bnVtZXJpYyB0aW1pbmc6ICRtcyIgPiYyOyByZXR1cm4gMTsgfQogIGVjaG8gIiRtcyIKfQoKIyAt LS0gSS9PIFN0YXRzIC0tLQojIFJ1biBTUUwgYW5kIGNhcHR1cmUgdGltaW5nICsgSS9PIHN0YXRz IGZyb20gcGdfc3RhdF9pbwojIFJlc2V0cyBzdGF0cyBiZWZvcmUgcXVlcnksIHdhaXRzIGZvciBm bHVzaCwgdGhlbiByZWFkcyBhYnNvbHV0ZSB2YWx1ZXMKIyBOb3RlOiBwZ19zdGF0X2lvIGhhcyBQ R1NUQVRfTUlOX0lOVEVSVkFMPTEwMDBtcyBmbHVzaCBkZWxheSwgc28gd2Ugd2FpdCAxLjVzCiMg ICAgICAgYWZ0ZXIgdGhlIHF1ZXJ5IHRvIGVuc3VyZSBzdGF0cyBhcmUgZmx1c2hlZCB0byBzaGFy ZWQgbWVtb3J5LgojIE5vdGU6IHBnX3N0YXRfaW8gY291bnRzIEkvTyBvcGVyYXRpb25zLCBub3Qg cGFnZXMgKHdpdGggaW9fY29tYmluZV9saW1pdD0xMjhrQiwKIyAgICAgICB1cCB0byAxNiBwYWdl cyBwZXIgb3BlcmF0aW9uKS4gVGhpcyBpcyBleHBlY3RlZCBiZWhhdmlvci4KIyBSZXR1cm5zOiBt cyxyZWFkcyxyZWFkX3RpbWUsd3JpdGVzLHdyaXRlX3RpbWUKcnVuX3RpbWVkX3dpdGhfaW8oKSB7 CiAgbG9jYWwgUk9PVD0iJDEiIFBPUlQ9IiQyIiBTUUw9IiQzIgogIGxvY2FsIHJlc3VsdAogIAog ICMgUmVzZXQgc3RhdHMsIHJ1biBxdWVyeSwgd2FpdCBmb3IgZmx1c2gsIHJlYWQgYWJzb2x1dGUg dmFsdWVzCiAgIyAtIEZpbHRlciBieSBjbGllbnQgYmFja2VuZCBhbmQgaW8gd29ya2VyIChleGNs dWRlcyBiZ3dyaXRlci9jaGVja3BvaW50ZXIpCiAgIyAtIDEuNXMgZGVsYXkgYWxsb3dzIHN0YXRz IHRvIGZsdXNoIChQR1NUQVRfTUlOX0lOVEVSVkFMPTEwMDBtcykKICByZXN1bHQ9JCgiJChwZyAi JFJPT1QiIHBzcWwpIiAtaCAxMjcuMC4wLjEgLXAgIiRQT1JUIiAtZCBwb3N0Z3JlcyAtWCAtdiBP Tl9FUlJPUl9TVE9QPTEgPDxFT1NRTApTRUxFQ1QgcGdfc3RhdF9yZXNldF9zaGFyZWQoJ2lvJyk7 ClxcdGltaW5nIG9uCiRTUUwKXFx0aW1pbmcgb2ZmClNFTEVDVCBwZ19zbGVlcCgxLjUpOwpcXHQg b24KU0VMRUNUIAogIENPQUxFU0NFKFNVTShyZWFkcyksMCk6OmJpZ2ludCwKICBDT0FMRVNDRShT VU0ocmVhZF90aW1lKSwwKTo6bnVtZXJpYygxMiwyKSwKICBDT0FMRVNDRShTVU0od3JpdGVzKSww KTo6YmlnaW50LAogIENPQUxFU0NFKFNVTSh3cml0ZV90aW1lKSwwKTo6bnVtZXJpYygxMiwyKQpG Uk9NIHBnX3N0YXRfaW8gCldIRVJFIG9iamVjdCA9ICdyZWxhdGlvbicgQU5EIGJhY2tlbmRfdHlw ZSBJTiAoJ2NsaWVudCBiYWNrZW5kJywgJ2lvIHdvcmtlcicpOwpFT1NRTAogIDI+JjEpCiAgCiAg IyBQYXJzZSB0aW1pbmcgKGxhc3QgVGltZTogbGluZSkKICBsb2NhbCBtcwogIG1zPSQoZWNobyAi JHJlc3VsdCIgfCBhd2sgJwogICAgL1RpbWU6LyB7CiAgICAgIHZhbD0kMjsgdW5pdD0kMzsKICAg ICAgaWYgKHVuaXQ9PSJtcyIpIG1zPXZhbDsKICAgICAgZWxzZSBpZiAodW5pdD09InMiKSBtcz12 YWwqMTAwMDsKICAgIH0KICAgIEVORCB7IGlmIChtcz09IiIpIGV4aXQgMTsgcHJpbnRmICIlLjNm XG4iLCBtczsgfQogICcpCiAgCiAgIyBQYXJzZSBJL08gc3RhdHMgKGxhc3Qgbm9uLWVtcHR5IGxp bmUgd2l0aCBwaXBlIHNlcGFyYXRvcjogcmVhZHN8cmVhZF90aW1lfHdyaXRlc3x3cml0ZV90aW1l KQogIGxvY2FsIHJlYWRzIHJlYWRfdGltZSB3cml0ZXMgd3JpdGVfdGltZQogIGxvY2FsIGlvX2xp bmUKICBpb19saW5lPSQoZWNobyAiJHJlc3VsdCIgfCBncmVwICd8JyB8IHRhaWwgLTEpCiAgcmVh ZHM9JChlY2hvICIkaW9fbGluZSIgICAgIHwgY3V0IC1kJ3wnIC1mMSB8IHRyIC1kICcgJykKICBy ZWFkX3RpbWU9JChlY2hvICIkaW9fbGluZSIgIHwgY3V0IC1kJ3wnIC1mMiB8IHRyIC1kICcgJykK ICB3cml0ZXM9JChlY2hvICIkaW9fbGluZSIgICAgfCBjdXQgLWQnfCcgLWYzIHwgdHIgLWQgJyAn KQogIHdyaXRlX3RpbWU9JChlY2hvICIkaW9fbGluZSIgfCBjdXQgLWQnfCcgLWY0IHwgdHIgLWQg JyAnKQogIAogICMgRGVmYXVsdCB0byAwIGlmIG5vdCBmb3VuZAogIFtbICIkcmVhZHMiICAgICAg PX4gXi0/WzAtOV0rJCAgICAgICAgICAgICBdXSB8fCByZWFkcz0wCiAgW1sgIiRyZWFkX3RpbWUi ICA9fiBeLT9bMC05XSsoXC5bMC05XSspPyQgXV0gfHwgcmVhZF90aW1lPTAKICBbWyAiJHdyaXRl cyIgICAgID1+IF4tP1swLTldKyQgICAgICAgICAgICAgXV0gfHwgd3JpdGVzPTAKICBbWyAiJHdy aXRlX3RpbWUiID1+IF4tP1swLTldKyhcLlswLTldKyk/JCBdXSB8fCB3cml0ZV90aW1lPTAKICAK ICBlY2hvICIkbXMsJHJlYWRzLCRyZWFkX3RpbWUsJHdyaXRlcywkd3JpdGVfdGltZSIKfQoKIyAt LS0gU3RhdGlzdGljcyAtLS0KY2FsY19tZWRpYW4oKSB7CiAgYXdrIC1GLCAnTlI+MXthWysrbl09 JDJ9RU5EewogICAgaWYobj09MCl7cHJpbnQgMDsgZXhpdH0KICAgIGZvcihpPTE7aTw9bjtpKysp Zm9yKGo9aSsxO2o8PW47aisrKWlmKGFbaV0+YVtqXSl7dD1hW2ldO2FbaV09YVtqXTthW2pdPXR9 CiAgICBwcmludCAobiUyKT9hW2ludChuLzIpKzFdOihhW24vMl0rYVtuLzIrMV0pLzIKICB9JyAi JDEiCn0KCmNhbGNfbWVkaWFuX2NvbCgpIHsKICBsb2NhbCBmaWxlPSIkMSIgY29sPSIkMiIKICBh d2sgLUYsIC12IGNvbD0iJGNvbCIgJ05SPjF7YVsrK25dPSRjb2x9RU5EewogICAgaWYobj09MCl7 cHJpbnQgMDsgZXhpdH0KICAgIGZvcihpPTE7aTw9bjtpKyspZm9yKGo9aSsxO2o8PW47aisrKWlm KGFbaV0+YVtqXSl7dD1hW2ldO2FbaV09YVtqXTthW2pdPXR9CiAgICBwcmludCAobiUyKT9hW2lu dChuLzIpKzFdOihhW24vMl0rYVtuLzIrMV0pLzIKICB9JyAiJGZpbGUiCn0KCmNhbGNfc3RhdHMo KSB7CiAgbG9jYWwgY3N2PSIkMSIKICBhd2sgLUYsICdOUj4xe2FbKytuXT0kMjtzKz0kMn1FTkR7 CiAgICBpZihuPT0wKWV4aXQKICAgIGZvcihpPTE7aTw9bjtpKyspZm9yKGo9aSsxO2o8PW47aisr KWlmKGFbaV0+YVtqXSl7dD1hW2ldO2FbaV09YVtqXTthW2pdPXR9CiAgICBtZWQ9KG4lMik/YVtp bnQobi8yKSsxXTooYVtuLzJdK2Fbbi8yKzFdKS8yCiAgICBhdmc9cy9uOyBmb3IoaT0xO2k8PW47 aSsrKXNzKz0oYVtpXS1hdmcpXjI7IHNkPXNxcnQoc3MvbikKICAgIHByaW50ZiAibWVkaWFuPSUu MWZtcyBtZWFuPSUuMWbCsSUuMWZtcyBuPSVkIiwgbWVkLCBhdmcsIHNkLCBuCiAgfScgIiRjc3Yi Cn0KCiMgLS0tIFByb2ZpbGluZyAtLS0KIyBSdW4gYSBTUUwgY29tbWFuZCB1bmRlciBwZXJmLCBh dHRhY2hpbmcgdG8gdGhlIGJhY2tlbmQgUElELgojIEdlbmVyYXRlcyBwZXJmLmRhdGEgYW5kIGZs YW1lZ3JhcGggU1ZHLgojICAgcHJvZmlsZV9zcWwgUk9PVCBQT1JUIExBQkVMIFNRTApwcm9maWxl X3NxbCgpIHsKICBbWyAkRE9fUFJPRklMRSAtbmUgMSBdXSAmJiByZXR1cm4KICAKICBsb2NhbCBS T09UPSIkMSIgUE9SVD0iJDIiIExBQkVMPSIkMyIgU1FMPSIkNCIKICBsb2NhbCBQUk9GX0RJUj0i JFJPT1QvcHJvZmlsZSIKICBta2RpciAtcCAiJFBST0ZfRElSIgogIAogIGxvY2FsIFBFUkZfREFU QT0iJFBST0ZfRElSLyR7TEFCRUx9LnBlcmYuZGF0YSIKICBsb2NhbCBTVkc9IiRQUk9GX0RJUi8k e0xBQkVMfS5zdmciCiAgbG9jYWwgcHNxbF9iaW4KICBwc3FsX2Jpbj0iJChwZyAiJFJPT1QiIHBz cWwpIgogIAogICMgVXNlIGEgdW5pcXVlIGFwcGxpY2F0aW9uX25hbWUgdG8gZmluZCB0aGUgYmFj a2VuZCBQSUQKICBsb2NhbCBBUFA9InByb2ZfJHtMQUJFTH1fJCQiCiAgCiAgIyBMYXVuY2ggYSBw c3FsIHNlc3Npb24gdGhhdCB3aWxsIGZpcnN0IGlkZW50aWZ5IGl0c2VsZiwgdGhlbiBydW4gdGhl IFNRTAogICMgVGhlIHBnX3NsZWVwKCkgZ2l2ZXMgdXMgdGltZSB0byBmaW5kIHRoZSBiYWNrZW5k IFBJRCBhbmQgYXR0YWNoIHBlcmYKICBQR0FQUE5BTUU9IiRBUFAiICIkcHNxbF9iaW4iIC1oIDEy Ny4wLjAuMSAtcCAiJFBPUlQiIC1kIHBvc3RncmVzIFwKICAgIC1YIC12IE9OX0VSUk9SX1NUT1A9 MSA8PEVPU1FMID4vZGV2L251bGwgMj4mMSAmClNFTEVDVCBwZ19zbGVlcCgyKTsKJFNRTApFT1NR TAogIGxvY2FsIFFVRVJZX1NIRUxMX1BJRD0kIQogIAogICMgRmluZCB0aGUgYmFja2VuZCBQSUQg dmlhIHBnX3N0YXRfYWN0aXZpdHkKICBsb2NhbCBCQUNLRU5EX1BJRD0iIgogIGZvciAoKG49MDsg bjwxMDA7IG4rKykpOyBkbwogICAgQkFDS0VORF9QSUQ9JCgiJHBzcWxfYmluIiAtaCAxMjcuMC4w LjEgLXAgIiRQT1JUIiAtZCBwb3N0Z3JlcyAtQXRxIFwKICAgICAgLWMgIlNFTEVDVCBwaWQgRlJP TSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIGFwcGxpY2F0aW9uX25hbWU9JyR7QVBQfScgT1JERVIg QlkgYmFja2VuZF9zdGFydCBERVNDIExJTUlUIDE7IiAyPi9kZXYvbnVsbCkKICAgIFtbIC1uICIk QkFDS0VORF9QSUQiICYmIC1kICIvcHJvYy8kQkFDS0VORF9QSUQiIF1dICYmIGJyZWFrCiAgICBz bGVlcCAwLjA1CiAgZG9uZQogIAogIGlmIFtbIC16ICIkQkFDS0VORF9QSUQiIHx8ICEgLWQgIi9w cm9jLyRCQUNLRU5EX1BJRCIgXV07IHRoZW4KICAgIGxvZyAiV0FSTklORzogQ291bGQgbm90IGZp bmQgYmFja2VuZCBQSUQgZm9yIHByb2ZpbGluZywgc2tpcHBpbmciCiAgICB3YWl0ICIkUVVFUllf U0hFTExfUElEIiAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICByZXR1cm4KICBmaQogIAogIGxvZyAi UHJvZmlsaW5nIGJhY2tlbmQgUElEICRCQUNLRU5EX1BJRCDihpIgJFBFUkZfREFUQSIKICAKICAj IEF0dGFjaCBwZXJmIHRvIHRoZSBiYWNrZW5kOyB3ZSBleHBsaWNpdGx5IGtpbGwgLUlOVCBpdCBh ZnRlciB0aGUgcXVlcnkgZmluaXNoZXMKICAkUEVSRl9TVURPIHBlcmYgcmVjb3JkIC1nIC0tY2Fs bC1ncmFwaCBkd2FyZiBcCiAgICAtcCAiJEJBQ0tFTkRfUElEIiAtbyAiJFBFUkZfREFUQSIgXAog ICAgLS1ldmVudD0iJFBFUkZfRVZFTlQiIDI+L2Rldi9udWxsICYKICBsb2NhbCBQRVJGX1BJRD0k IQogIHNsZWVwIDAuMQogIAogICMgVmVyaWZ5IHBlcmYgYWN0dWFsbHkgc3RhcnRlZCAocGVybWlz c2lvbnMsIHZhbGlkIFBJRCwgZXRjLikKICBpZiAhIGtpbGwgLTAgIiRQRVJGX1BJRCIgMj4vZGV2 L251bGw7IHRoZW4KICAgIGxvZyAiV0FSTklORzogcGVyZiByZWNvcmQgZmFpbGVkIHRvIHN0YXJ0 IChwZXJtaXNzaW9ucy9jb25maWc/KSwgc2tpcHBpbmcgZmxhbWVncmFwaCIKICAgIHdhaXQgIiRR VUVSWV9TSEVMTF9QSUQiIDI+L2Rldi9udWxsIHx8IHRydWUKICAgIHJldHVybgogIGZpCiAgCiAg IyBXYWl0IGZvciB0aGUgcXVlcnkgdG8gZmluaXNoCiAgd2FpdCAiJFFVRVJZX1NIRUxMX1BJRCIg Mj4vZGV2L251bGwgfHwgdHJ1ZQogIAogICMgR2l2ZSBwZXJmIGEgbW9tZW50IHRvIGZsdXNoLCB0 aGVuIHN0b3AgaXQKICBzbGVlcCAwLjUKICAkUEVSRl9TVURPIGtpbGwgLUlOVCAiJFBFUkZfUElE IiAyPi9kZXYvbnVsbCB8fCB0cnVlOyB3YWl0ICIkUEVSRl9QSUQiIDI+L2Rldi9udWxsIHx8IHRy dWUKICAKICAjIEdlbmVyYXRlIGZsYW1lZ3JhcGgKICBnZW5lcmF0ZV9mbGFtZWdyYXBoICIkUEVS Rl9EQVRBIiAiJFNWRyIgIiRMQUJFTCIKfQoKIyBDb252ZXJ0IHBlcmYuZGF0YSDihpIgZmxhbWVn cmFwaCBTVkcKIyAgIGdlbmVyYXRlX2ZsYW1lZ3JhcGggUEVSRl9EQVRBIFNWR19QQVRIIFRJVExF CmdlbmVyYXRlX2ZsYW1lZ3JhcGgoKSB7CiAgbG9jYWwgUEVSRl9EQVRBPSIkMSIgU1ZHPSIkMiIg VElUTEU9IiQzIgogIAogIFtbIC1mICIkUEVSRl9EQVRBIiBdXSB8fCByZXR1cm4KICAKICBsb2Nh bCBGT0xERUQ9IiR7UEVSRl9EQVRBJS5wZXJmLmRhdGF9LmZvbGRlZCIKICBpZiAkUEVSRl9TVURP IHBlcmYgc2NyaXB0IC1pICIkUEVSRl9EQVRBIiAyPi9kZXYvbnVsbCBcCiAgICAgIHwgIiRGTEFN RUdSQVBIX0RJUi9zdGFja2NvbGxhcHNlLXBlcmYucGwiID4gIiRGT0xERUQiIDI+L2Rldi9udWxs IFwKICAgICAgJiYgW1sgLXMgIiRGT0xERUQiIF1dOyB0aGVuCiAgICAiJEZMQU1FR1JBUEhfRElS L2ZsYW1lZ3JhcGgucGwiIC0tdGl0bGUgIiRUSVRMRSIgLS1jb3VudG5hbWUgc2FtcGxlcyBcCiAg ICAgICIkRk9MREVEIiA+ICIkU1ZHIiAyPi9kZXYvbnVsbAogICAgbG9nICJGbGFtZWdyYXBoOiAk U1ZHIgogICAgcm0gLWYgIiRGT0xERUQiCiAgZWxzZQogICAgbG9nICJXQVJOSU5HOiBGYWlsZWQg dG8gZ2VuZXJhdGUgZmxhbWVncmFwaCBmb3IgJFRJVExFIgogICAgcm0gLWYgIiRGT0xERUQiCiAg ZmkKfQoKIyAtLS0gQmVuY2htYXJrIHJ1bm5lciAtLS0KIyBiZW5jaG1hcmsgUk9PVCBQT1JUIE5B TUUgU1FMIFJFTEFUSU9OIFtSRUxBVElPTi4uLl0KYmVuY2htYXJrKCkgewogIGxvY2FsIFJPT1Q9 IiQxIiBQT1JUPSIkMiIgTkFNRT0iJDMiIFNRTD0iJDQiCiAgc2hpZnQgNAogIGxvY2FsIHJlbHM9 KCIkQCIpCiAgbG9jYWwgT1VUPSIkUk9PVC9yZXN1bHRzLyR7TkFNRX0uY3N2IgogIAogIG1rZGly IC1wICIkUk9PVC9yZXN1bHRzIgogIGVjaG8gInJ1bixtcyxyZWFkcyxyZWFkX3RpbWVfbXMsd3Jp dGVzLHdyaXRlX3RpbWVfbXMiID4gIiRPVVQiCiAgCiAgZm9yICgoaT0xOyBpPD1SRVBTOyBpKysp KTsgZG8KICAgIGRyb3BfY2FjaGVzICIkUk9PVCIgIiRQT1JUIiAiJHtyZWxzW0BdfSIKICAgIGxv Y2FsIHJlc3VsdCBtcyByZWFkcyByZWFkX3RpbWUgd3JpdGVzIHdyaXRlX3RpbWUKICAgIHJlc3Vs dD0kKHJ1bl90aW1lZF93aXRoX2lvICIkUk9PVCIgIiRQT1JUIiAiJFNRTCIpCiAgICBJRlM9Jywn IHJlYWQgLXIgbXMgcmVhZHMgcmVhZF90aW1lIHdyaXRlcyB3cml0ZV90aW1lIDw8PCIkcmVzdWx0 IgogICAgZWNobyAiJGksJG1zLCRyZWFkcywkcmVhZF90aW1lLCR3cml0ZXMsJHdyaXRlX3RpbWUi ID4+ICIkT1VUIgogICAgbG9nICIkTkFNRSBbJGkvJFJFUFNdOiAke21zfW1zIChyZWFkcz0kcmVh ZHMsIHJlYWRfdGltZT0ke3JlYWRfdGltZX1tcywgd3JpdGVzPSR3cml0ZXMsIHdyaXRlX3RpbWU9 JHt3cml0ZV90aW1lfW1zKSIKICBkb25lCn0KCiMgLS0tIERhdGEgc2V0dXAgZnVuY3Rpb25zIC0t LQpzZXR1cF9ibG9vbSgpIHsKICBsb2NhbCBST09UPSIkMSIgUE9SVD0iJDIiIFNJWkU9IiQzIgog IGxvY2FsIE5ST1dTCiAgY2FzZSAiJFNJWkUiIGluCiAgICBzbWFsbCkgIE5ST1dTPTEwMDAwMCA7 OwogICAgbWVkaXVtKSBOUk9XUz0xMDAwMDAwIDs7CiAgICBsYXJnZSkgIE5ST1dTPTEwMDAwMDAw IDs7CiAgICAqKSBkaWUgIkludmFsaWQgc2l6ZSAnJFNJWkUnIChtdXN0IGJlIHNtYWxsLCBtZWRp dW0sIG9yIGxhcmdlKSIgOzsKICBlc2FjCiAgCiAgbG9nICJDcmVhdGluZyBCbG9vbSB0ZXN0IGRh dGEgKCRTSVpFOiAkTlJPV1Mgcm93cykiCiAgcHNxbF9ydW4gIiRST09UIiAiJFBPUlQiIDw8U1FM CkNSRUFURSBFWFRFTlNJT04gSUYgTk9UIEVYSVNUUyBibG9vbTsKRFJPUCBUQUJMRSBJRiBFWElT VFMgYmxvb21fdGVzdDsKQ1JFQVRFIFRBQkxFIGJsb29tX3Rlc3QgKGlkIElOVCwgZGF0YSBURVhU LCB2YWwxIElOVCwgdmFsMiBJTlQpOwpJTlNFUlQgSU5UTyBibG9vbV90ZXN0IFNFTEVDVCBpLCAn ZGF0YV8nfHxpLCBpJTEwMDAsIGklMTAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsJE5ST1dTKSBp OwpDUkVBVEUgSU5ERVggYmxvb21faWR4IE9OIGJsb29tX3Rlc3QgVVNJTkcgYmxvb20gKHZhbDEs IHZhbDIpOwpWQUNVVU0gQU5BTFlaRSBibG9vbV90ZXN0OwpDSEVDS1BPSU5UOwpTUUwKfQoKc2V0 dXBfcGdzdGF0dHVwbGUoKSB7CiAgbG9jYWwgUk9PVD0iJDEiIFBPUlQ9IiQyIiBTSVpFPSIkMyIK ICBsb2NhbCBOUk9XUwogIGNhc2UgIiRTSVpFIiBpbgogICAgc21hbGwpICBOUk9XUz0xMDAwMDAg OzsKICAgIG1lZGl1bSkgTlJPV1M9MTAwMDAwMCA7OwogICAgbGFyZ2UpICBOUk9XUz0xMDAwMDAw MCA7OwogICAgKikgZGllICJJbnZhbGlkIHNpemUgJyRTSVpFJyAobXVzdCBiZSBzbWFsbCwgbWVk aXVtLCBvciBsYXJnZSkiIDs7CiAgZXNhYwogIAogIGxvZyAiQ3JlYXRpbmcgcGdzdGF0dHVwbGUg dGVzdCBkYXRhICgkU0laRTogJE5ST1dTIHJvd3MpIgogIHBzcWxfcnVuICIkUk9PVCIgIiRQT1JU IiA8PFNRTApDUkVBVEUgRVhURU5TSU9OIElGIE5PVCBFWElTVFMgcGdzdGF0dHVwbGU7CkRST1Ag VEFCTEUgSUYgRVhJU1RTIGhlYXBfdGVzdDsKQ1JFQVRFIFRBQkxFIGhlYXBfdGVzdCAoaWQgU0VS SUFMIFBSSU1BUlkgS0VZLCBkYXRhIFRFWFQpOwpJTlNFUlQgSU5UTyBoZWFwX3Rlc3QgKGRhdGEp IFNFTEVDVCByZXBlYXQoJ3gnLDEwMCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwkTlJPV1MpOwpW QUNVVU0gQU5BTFlaRSBoZWFwX3Rlc3Q7CkNIRUNLUE9JTlQ7ClNRTAp9CgpzZXR1cF9wZ3N0YXRp bmRleCgpIHsKICBsb2NhbCBST09UPSIkMSIgUE9SVD0iJDIiIFNJWkU9IiQzIgogIGxvY2FsIE5S T1dTCiAgY2FzZSAiJFNJWkUiIGluCiAgICBzbWFsbCkgIE5ST1dTPTEwMDAwMCA7OwogICAgbWVk aXVtKSBOUk9XUz0xMDAwMDAwIDs7CiAgICBsYXJnZSkgIE5ST1dTPTEwMDAwMDAwIDs7CiAgICAq KSBkaWUgIkludmFsaWQgc2l6ZSAnJFNJWkUnIChtdXN0IGJlIHNtYWxsLCBtZWRpdW0sIG9yIGxh cmdlKSIgOzsKICBlc2FjCiAgCiAgbG9nICJDcmVhdGluZyBwZ3N0YXRpbmRleCB0ZXN0IGRhdGEg KCRTSVpFOiAkTlJPV1Mgcm93cykiCiAgcHNxbF9ydW4gIiRST09UIiAiJFBPUlQiIDw8U1FMCkNS RUFURSBFWFRFTlNJT04gSUYgTk9UIEVYSVNUUyBwZ3N0YXR0dXBsZTsKRFJPUCBUQUJMRSBJRiBF WElTVFMgaWR4X3Rlc3Q7CkNSRUFURSBUQUJMRSBpZHhfdGVzdCAoaWQgU0VSSUFMIFBSSU1BUlkg S0VZLCBkYXRhIFRFWFQpOwpJTlNFUlQgSU5UTyBpZHhfdGVzdCAoZGF0YSkgU0VMRUNUICdkYXRh X3Jvd18nIHx8IGkgfHwgJ18nIHx8IHJlcGVhdCgneCcsNTApIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsJE5ST1dTKSBpOwpWQUNVVU0gQU5BTFlaRSBpZHhfdGVzdDsKQ0hFQ0tQT0lOVDsKU1FMCn0K CnNldHVwX2dpbigpIHsKICBsb2NhbCBST09UPSIkMSIgUE9SVD0iJDIiIFNJWkU9IiQzIgogIGxv Y2FsIE5ST1dTCiAgY2FzZSAiJFNJWkUiIGluCiAgICBzbWFsbCkgIE5ST1dTPTEwMDAwMCA7Owog ICAgbWVkaXVtKSBOUk9XUz0xMDAwMDAwIDs7CiAgICBsYXJnZSkgIE5ST1dTPTUwMDAwMDAgOzsK ICAgICopIGRpZSAiSW52YWxpZCBzaXplICckU0laRScgKG11c3QgYmUgc21hbGwsIG1lZGl1bSwg b3IgbGFyZ2UpIiA7OwogIGVzYWMKICAKICBsb2cgIkNyZWF0aW5nIEdJTiB0ZXN0IGRhdGEgKCRT SVpFOiAkTlJPV1Mgcm93cykiCiAgcHNxbF9ydW4gIiRST09UIiAiJFBPUlQiIDw8U1FMCkRST1Ag VEFCTEUgSUYgRVhJU1RTIGdpbl90ZXN0OwotLSBObyBQUklNQVJZIEtFWTogaXNvbGF0ZSBHSU4g aW5kZXggdmFjdXVtIGZyb20gYnRyZWUgb3ZlcmhlYWQKQ1JFQVRFIFRBQkxFIGdpbl90ZXN0IChp ZCBJTlQsIHRhZ3MgVEVYVFtdKTsKSU5TRVJUIElOVE8gZ2luX3Rlc3QgKGlkLCB0YWdzKQpTRUxF Q1QgaSwgQVJSQVkoU0VMRUNUICd0YWdfJ3x8KHJhbmRvbSgpKjEwMCk6OmludCBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDUpKQpGUk9NIGdlbmVyYXRlX3NlcmllcygxLCROUk9XUykgaTsKQ1JFQVRF IElOREVYIGdpbl9pZHggT04gZ2luX3Rlc3QgVVNJTkcgZ2luICh0YWdzKTsKVkFDVVVNIEFOQUxZ WkUgZ2luX3Rlc3Q7CkNIRUNLUE9JTlQ7ClNRTAp9CgpzZXR1cF9oYXNoKCkgewogIGxvY2FsIFJP T1Q9IiQxIiBQT1JUPSIkMiIgU0laRT0iJDMiCiAgbG9jYWwgTlJPV1MKICBjYXNlICIkU0laRSIg aW4KICAgIHNtYWxsKSAgTlJPV1M9NTAwMDAwIDs7CiAgICBtZWRpdW0pIE5ST1dTPTEwMDAwMDAg OzsKICAgIGxhcmdlKSAgTlJPV1M9MjAwMDAwMDAgOzsKICAgICopIGRpZSAiSW52YWxpZCBzaXpl ICckU0laRScgKG11c3QgYmUgc21hbGwsIG1lZGl1bSwgb3IgbGFyZ2UpIiA7OwogIGVzYWMKICAK ICBsb2cgIkNyZWF0aW5nIEhhc2ggdGVzdCBkYXRhICgkU0laRTogJE5ST1dTIHVuaXF1ZSB2YWx1 ZXMpIgogIHBzcWxfcnVuICIkUk9PVCIgIiRQT1JUIiA8PFNRTApEUk9QIFRBQkxFIElGIEVYSVNU UyBoYXNoX3Rlc3Q7Ci0tIE5vIFBSSU1BUlkgS0VZOiBpc29sYXRlIGhhc2ggaW5kZXggdmFjdXVt IGZyb20gYnRyZWUgb3ZlcmhlYWQKQ1JFQVRFIFRBQkxFIGhhc2hfdGVzdCAoaWQgSU5ULCBkYXRh IFRFWFQpOwpJTlNFUlQgSU5UTyBoYXNoX3Rlc3QgU0VMRUNUIGksICd4JyBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCROUk9XUykgaTsKQ1JFQVRFIElOREVYIGhhc2hfaWR4IE9OIGhhc2hfdGVzdCBV U0lORyBoYXNoIChpZCk7ClZBQ1VVTSBBTkFMWVpFIGhhc2hfdGVzdDsKQ0hFQ0tQT0lOVDsKU1FM Cn0KCnNldHVwX3dhbCgpIHsKICBsb2NhbCBST09UPSIkMSIgUE9SVD0iJDIiIFNJWkU9IiQzIgog IGxvY2FsIE5ST1dTCiAgY2FzZSAiJFNJWkUiIGluCiAgICBzbWFsbCkgIE5ST1dTPTEwMDAwMDAg OzsKICAgIG1lZGl1bSkgTlJPV1M9NTAwMDAwMCA7OwogICAgbGFyZ2UpICBOUk9XUz0yMDAwMDAw MCA7OwogICAgKikgZGllICJJbnZhbGlkIHNpemUgJyRTSVpFJyAobXVzdCBiZSBzbWFsbCwgbWVk aXVtLCBvciBsYXJnZSkiIDs7CiAgZXNhYwogIAogIGxvZyAiQ3JlYXRpbmcgdGFibGUgZm9yIEdJ TiBpbmRleCBidWlsZCAvIGxvZ19uZXdwYWdlX3JhbmdlIHRlc3QgKCRTSVpFOiAkTlJPV1Mgcm93 cykiCiAgcHNxbF9ydW4gIiRST09UIiAiJFBPUlQiIDw8U1FMCkRST1AgVEFCTEUgSUYgRVhJU1RT IHdhbF90ZXN0OwotLSBUYWJsZSB3aXRoIHRzdmVjdG9yIGNvbHVtbiBmb3IgR0lOIGluZGV4aW5n IChmdWxsLXRleHQgc2VhcmNoKQotLSBHSU4gaW5kZXggYnVpbGRzIGFsd2F5cyBjYWxsIGxvZ19u ZXdwYWdlX3JhbmdlKCkgYXQgdGhlIGVuZCBvZgotLSBnaW5idWlsZCgpIChnaW5pbnNlcnQuYykg dG8gV0FMLWxvZyBhbGwgaW5kZXggcGFnZXMuIApDUkVBVEUgVEFCTEUgd2FsX3Rlc3QgKGlkIElO VCwgZG9jIFRFWFQsIGRvY190c3YgVFNWRUNUT1IpOwpJTlNFUlQgSU5UTyB3YWxfdGVzdAogIFNF TEVDVCBpLAogICAgICAgICAnd29yZCcgfHwgKHJhbmRvbSgpKjEwMDAwKTo6aW50IHx8ICcgdGVy bScgfHwgKHJhbmRvbSgpKjEwMDAwKTo6aW50CiAgICAgICAgICAgfHwgJyB0b2tlbicgfHwgKHJh bmRvbSgpKjUwMDApOjppbnQgfHwgJyBwaHJhc2UnIHx8IChyYW5kb20oKSo4MDAwKTo6aW50LAog ICAgICAgICB0b190c3ZlY3Rvcignc2ltcGxlJywKICAgICAgICAgICAnd29yZCcgfHwgKHJhbmRv bSgpKjEwMDAwKTo6aW50IHx8ICcgdGVybScgfHwgKHJhbmRvbSgpKjEwMDAwKTo6aW50CiAgICAg ICAgICAgfHwgJyB0b2tlbicgfHwgKHJhbmRvbSgpKjUwMDApOjppbnQgfHwgJyBwaHJhc2UnIHx8 IChyYW5kb20oKSo4MDAwKTo6aW50KQogIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsJE5ST1dTKSBp OwpWQUNVVU0gQU5BTFlaRSB3YWxfdGVzdDsKQ0hFQ0tQT0lOVDsKU1FMCn0KCiMgLS0tIFRlc3Qg ZnVuY3Rpb25zIC0tLQp0ZXN0X2Jsb29tX3NjYW4oKSB7CiAgbG9jYWwgUk9PVD0iJDEiIFBPUlQ9 IiQyIiBMQUJFTD0iJDMiIFNJWkU9IiQ0IgogIHNldHVwX2Jsb29tICIkUk9PVCIgIiRQT1JUIiAi JFNJWkUiCiAgYmVuY2htYXJrICIkUk9PVCIgIiRQT1JUIiAiJHtMQUJFTH1fYmxvb21fc2Nhbl8k e1NJWkV9IiBcCiAgICAiU0VUIGVuYWJsZV9zZXFzY2FuPW9mZjsgU0VMRUNUIENPVU5UKCopIEZS T00gYmxvb21fdGVzdCBXSEVSRSB2YWwxPTQyIEFORCB2YWwyPTc7IiBcCiAgICBibG9vbV90ZXN0 IGJsb29tX2lkeAogICMgUHJvZmlsZSBhZnRlciBiZW5jaG1hcmsgcmVwczogc2hhcmVkX2J1ZmZl cnMgbWVtb3J5IGFscmVhZHkgZmF1bHRlZCBpbiwKICAjIHNvIHBhZ2UtZmF1bHQgbm9pc2UgaXMg Z29uZTsgZHJvcF9jYWNoZXMgZW5zdXJlcyBjb2xkIElPIGZvciB0aGUgcHJvZmlsZS4KICBpZiBb WyAkRE9fUFJPRklMRSAtZXEgMSBdXTsgdGhlbgogICAgZHJvcF9jYWNoZXMgIiRST09UIiAiJFBP UlQiIGJsb29tX3Rlc3QgYmxvb21faWR4CiAgICBwcm9maWxlX3NxbCAiJFJPT1QiICIkUE9SVCIg IiR7TEFCRUx9X2Jsb29tX3NjYW5fJHtTSVpFfSIgXAogICAgICAiU0VUIGVuYWJsZV9zZXFzY2Fu PW9mZjsgU0VMRUNUIENPVU5UKCopIEZST00gYmxvb21fdGVzdCBXSEVSRSB2YWwxPTQyIEFORCB2 YWwyPTc7IgogIGZpCn0KCnRlc3RfYmxvb21fdmFjdXVtKCkgewogIGxvY2FsIFJPT1Q9IiQxIiBQ T1JUPSIkMiIgTEFCRUw9IiQzIiBTSVpFPSIkNCIKICBsb2NhbCBPVVQ9IiRST09UL3Jlc3VsdHMv JHtMQUJFTH1fYmxvb21fdmFjdXVtXyR7U0laRX0uY3N2IgogIG1rZGlyIC1wICIkUk9PVC9yZXN1 bHRzIgogIGVjaG8gInJ1bixtcyxyZWFkcyxyZWFkX3RpbWVfbXMsd3JpdGVzLHdyaXRlX3RpbWVf bXMiID4gIiRPVVQiCiAgCiAgZm9yICgoaT0xOyBpPD1SRVBTOyBpKyspKTsgZG8KICAgICMgRnJl c2ggdGFibGUgZWFjaCBydW4gZm9yIGNvbnNpc3RlbnQgc3RhdGUKICAgIHNldHVwX2Jsb29tICIk Uk9PVCIgIiRQT1JUIiAiJFNJWkUiCiAgICAjIENyZWF0ZSAxMCUgZGVhZCB0dXBsZXMKICAgIHBz cWxfcnVuICIkUk9PVCIgIiRQT1JUIiAtYyAiREVMRVRFIEZST00gYmxvb21fdGVzdCBXSEVSRSBp ZCAlIDEwID0gMDsiCiAgICAKICAgIGRyb3BfY2FjaGVzICIkUk9PVCIgIiRQT1JUIiBibG9vbV90 ZXN0IGJsb29tX2lkeAogICAgbG9jYWwgcmVzdWx0IG1zIHJlYWRzIHJlYWRfdGltZSB3cml0ZXMg d3JpdGVfdGltZQogICAgcmVzdWx0PSQocnVuX3RpbWVkX3dpdGhfaW8gIiRST09UIiAiJFBPUlQi ICJWQUNVVU0gYmxvb21fdGVzdDsiKQogICAgSUZTPScsJyByZWFkIC1yIG1zIHJlYWRzIHJlYWRf dGltZSB3cml0ZXMgd3JpdGVfdGltZSA8PDwiJHJlc3VsdCIKICAgIGVjaG8gIiRpLCRtcywkcmVh ZHMsJHJlYWRfdGltZSwkd3JpdGVzLCR3cml0ZV90aW1lIiA+PiAiJE9VVCIKICAgIGxvZyAiJHtM QUJFTH1fYmxvb21fdmFjdXVtXyR7U0laRX0gWyRpLyRSRVBTXTogJHttc31tcyAocmVhZHM9JHJl YWRzLCByZWFkX3RpbWU9JHtyZWFkX3RpbWV9bXMsIHdyaXRlcz0kd3JpdGVzLCB3cml0ZV90aW1l PSR7d3JpdGVfdGltZX1tcykiCiAgZG9uZQogIAogIGlmIFtbICRET19QUk9GSUxFIC1lcSAxIF1d OyB0aGVuCiAgICBzZXR1cF9ibG9vbSAiJFJPT1QiICIkUE9SVCIgIiRTSVpFIgogICAgcHNxbF9y dW4gIiRST09UIiAiJFBPUlQiIC1jICJERUxFVEUgRlJPTSBibG9vbV90ZXN0IFdIRVJFIGlkICUg MTAgPSAwOyIKICAgIGRyb3BfY2FjaGVzICIkUk9PVCIgIiRQT1JUIiBibG9vbV90ZXN0IGJsb29t X2lkeAogICAgcHJvZmlsZV9zcWwgIiRST09UIiAiJFBPUlQiICIke0xBQkVMfV9ibG9vbV92YWN1 dW1fJHtTSVpFfSIgIlZBQ1VVTSBibG9vbV90ZXN0OyIKICBmaQp9Cgp0ZXN0X3Bnc3RhdHR1cGxl KCkgewogIGxvY2FsIFJPT1Q9IiQxIiBQT1JUPSIkMiIgTEFCRUw9IiQzIiBTSVpFPSIkNCIKICBs b2NhbCBPVVQ9IiRST09UL3Jlc3VsdHMvJHtMQUJFTH1fcGdzdGF0dHVwbGVfJHtTSVpFfS5jc3Yi CiAgbWtkaXIgLXAgIiRST09UL3Jlc3VsdHMiCiAgZWNobyAicnVuLG1zLHJlYWRzLHJlYWRfdGlt ZV9tcyx3cml0ZXMsd3JpdGVfdGltZV9tcyIgPiAiJE9VVCIKICAKICAjIFNldHVwIG9uY2Ug4oCU IHJvbGxlZC1iYWNrIERFTEVURSBrZWVwcyBsYXlvdXQgaWRlbnRpY2FsIGFjcm9zcyBhbGwgcmVw cwogIHNldHVwX3Bnc3RhdHR1cGxlICIkUk9PVCIgIiRQT1JUIiAiJFNJWkUiCiAgIyBSb2xsZWQt YmFjayBERUxFVEUgY2xlYXJzIHRoZSBhbGwtdmlzaWJsZSBiaXQgaW4gdGhlIFZpc2liaWxpdHkg TWFwIHNvCiAgIyBwZ3N0YXR0dXBsZV9hcHByb3ggbXVzdCBhY3R1YWxseSByZWFkIHRob3NlIHBh Z2VzIChpdCBza2lwcyBhbGwtdmlzaWJsZSBwYWdlcykuCiAgIyBVc2luZyBST0xMQkFDSyBrZWVw cyB0aGUgcGh5c2ljYWwgbGF5b3V0IGlkZW50aWNhbCBhY3Jvc3MgYWxsIHJlcHMgKG5vIFRPQVNU CiAgIyBvdXQtb2YtcGFnZSB1cGRhdGVzLCBubyBkaXJ0eSBwYWdlcyB0byBmbHVzaCBmcm9tIHNo YXJlZF9idWZmZXJzKS4KICBwc3FsX3J1biAiJFJPT1QiICIkUE9SVCIgLWMgIkJFR0lOOyBERUxF VEUgRlJPTSBoZWFwX3Rlc3QgV0hFUkUgaWQgJSA1MDAgPSAwOyBST0xMQkFDSzsiCiAgIyBXYXJt dXAgcGFzczogVGhlIHJvbGxlZC1iYWNrIERFTEVURSBsZWZ0IGV2ZXJ5IHRvdWNoZWQgdHVwbGUg d2l0aCBhbiB4bWF4CiAgIyBwb2ludGluZyB0byB0aGUgYWJvcnRlZCB0cmFuc2FjdGlvbiBidXQg bm8gaGludCBiaXRzIHNldC4gT24gdGhlIGZpcnN0CiAgIyBwZ3N0YXR0dXBsZV9hcHByb3ggY2Fs bCwgSGVhcFR1cGxlU2F0aXNmaWVzVmFjdXVtIOKGkiBIZWFwVHVwbGVTYXRpc2ZpZXNWYWN1dW1I b3Jpem9uCiAgIyBtdXN0IHJlc29sdmUgZWFjaCBzdWNoIHhtYXg6IFRyYW5zYWN0aW9uSWRJc0lu UHJvZ3Jlc3MgKFByb2NBcnJheSBzY2FuKSB0aGVuCiAgIyBUcmFuc2FjdGlvbklkRGlkQ29tbWl0 IChDTE9HIGxvb2t1cCkg4oCUIG9ubHkgdGhlbiBjYW4gaXQgY2FsbCBTZXRIaW50Qml0cyB0bwog ICMgc3RhbXAgSEVBUF9YTUFYX0lOVkFMSUQgYW5kIE1hcmtCdWZmZXJEaXJ0eUhpbnQuIFdpdGhv dXQgdGhpcyB3YXJtdXAsIHJlcCAxCiAgIyBwYXlzIH4xMTAwbXMgZXh0cmEgQ1BVIGZvciB0aG9z ZSBDTE9HL1Byb2NBcnJheSBsb29rdXBzLiBTdWJzZXF1ZW50IHJlcHMgaGl0CiAgIyB0aGUgZWFy bHktZXhpdCBhdCAiaWYgKHRfaW5mb21hc2sgJiBIRUFQX1hNQVhfSU5WQUxJRCkgcmV0dXJuIEhF QVBUVVBMRV9MSVZFIgogICMgYW5kIHNraXAgdGhlIGV4cGVuc2l2ZSBwYXRoIGVudGlyZWx5Lgog ICMgQWZ0ZXIgdGhpcyBwYXNzLCB0aGUgZGlydGllZCBoaW50LWJpdCBwYWdlcyBhcmUgZmx1c2hl ZCB0byBkaXNrIHZpYQogICMgZHJvcF9jYWNoZXMsIHNvIGFsbCByZXBzIHN0YXJ0IGZyb20gdGhl IHNhbWUgb24tZGlzayBzdGF0ZS4KICBwc3FsX3J1biAiJFJPT1QiICIkUE9SVCIgLWMgIlNFTEVD VCAqIEZST00gcGdzdGF0dHVwbGVfYXBwcm94KCdoZWFwX3Rlc3QnKTsiID4vZGV2L251bGwKCiAg Zm9yICgoaT0xOyBpPD1SRVBTOyBpKyspKTsgZG8KICAgIGRyb3BfY2FjaGVzICIkUk9PVCIgIiRQ T1JUIiBoZWFwX3Rlc3QgaGVhcF90ZXN0X3BrZXkKICAgIGxvY2FsIHJlc3VsdCBtcyByZWFkcyBy ZWFkX3RpbWUgd3JpdGVzIHdyaXRlX3RpbWUKICAgIHJlc3VsdD0kKHJ1bl90aW1lZF93aXRoX2lv ICIkUk9PVCIgIiRQT1JUIiAiU0VMRUNUICogRlJPTSBwZ3N0YXR0dXBsZV9hcHByb3goJ2hlYXBf dGVzdCcpOyIpCiAgICBJRlM9JywnIHJlYWQgLXIgbXMgcmVhZHMgcmVhZF90aW1lIHdyaXRlcyB3 cml0ZV90aW1lIDw8PCIkcmVzdWx0IgogICAgZWNobyAiJGksJG1zLCRyZWFkcywkcmVhZF90aW1l LCR3cml0ZXMsJHdyaXRlX3RpbWUiID4+ICIkT1VUIgogICAgbG9nICIke0xBQkVMfV9wZ3N0YXR0 dXBsZV8ke1NJWkV9IFskaS8kUkVQU106ICR7bXN9bXMgKHJlYWRzPSRyZWFkcywgcmVhZF90aW1l PSR7cmVhZF90aW1lfW1zLCB3cml0ZXM9JHdyaXRlcywgd3JpdGVfdGltZT0ke3dyaXRlX3RpbWV9 bXMpIgogIGRvbmUKICAKICBpZiBbWyAkRE9fUFJPRklMRSAtZXEgMSBdXTsgdGhlbgogICAgcHNx bF9ydW4gIiRST09UIiAiJFBPUlQiIC1jICJCRUdJTjsgREVMRVRFIEZST00gaGVhcF90ZXN0IFdI RVJFIGlkICUgNTAwID0gMDsgUk9MTEJBQ0s7IgogICAgZHJvcF9jYWNoZXMgIiRST09UIiAiJFBP UlQiIGhlYXBfdGVzdCBoZWFwX3Rlc3RfcGtleQogICAgcHJvZmlsZV9zcWwgIiRST09UIiAiJFBP UlQiICIke0xBQkVMfV9wZ3N0YXR0dXBsZV8ke1NJWkV9IiBcCiAgICAgICJTRUxFQ1QgKiBGUk9N IHBnc3RhdHR1cGxlX2FwcHJveCgnaGVhcF90ZXN0Jyk7IgogIGZpCn0KCnRlc3RfcGdzdGF0aW5k ZXgoKSB7CiAgbG9jYWwgUk9PVD0iJDEiIFBPUlQ9IiQyIiBMQUJFTD0iJDMiIFNJWkU9IiQ0Igog IHNldHVwX3Bnc3RhdGluZGV4ICIkUk9PVCIgIiRQT1JUIiAiJFNJWkUiCiAgYmVuY2htYXJrICIk Uk9PVCIgIiRQT1JUIiAiJHtMQUJFTH1fcGdzdGF0aW5kZXhfJHtTSVpFfSIgXAogICAgIlNFTEVD VCAqIEZST00gcGdzdGF0aW5kZXgoJ2lkeF90ZXN0X3BrZXknKTsiIFwKICAgIGlkeF90ZXN0IGlk eF90ZXN0X3BrZXkKICBpZiBbWyAkRE9fUFJPRklMRSAtZXEgMSBdXTsgdGhlbgogICAgZHJvcF9j YWNoZXMgIiRST09UIiAiJFBPUlQiIGlkeF90ZXN0IGlkeF90ZXN0X3BrZXkKICAgIHByb2ZpbGVf c3FsICIkUk9PVCIgIiRQT1JUIiAiJHtMQUJFTH1fcGdzdGF0aW5kZXhfJHtTSVpFfSIgXAogICAg ICAiU0VMRUNUICogRlJPTSBwZ3N0YXRpbmRleCgnaWR4X3Rlc3RfcGtleScpOyIKICBmaQp9Cgp0 ZXN0X2dpbl92YWN1dW0oKSB7CiAgbG9jYWwgUk9PVD0iJDEiIFBPUlQ9IiQyIiBMQUJFTD0iJDMi IFNJWkU9IiQ0IgogIGxvY2FsIE9VVD0iJFJPT1QvcmVzdWx0cy8ke0xBQkVMfV9naW5fdmFjdXVt XyR7U0laRX0uY3N2IgogIG1rZGlyIC1wICIkUk9PVC9yZXN1bHRzIgogIGVjaG8gInJ1bixtcyxy ZWFkcyxyZWFkX3RpbWVfbXMsd3JpdGVzLHdyaXRlX3RpbWVfbXMiID4gIiRPVVQiCiAgCiAgZm9y ICgoaT0xOyBpPD1SRVBTOyBpKyspKTsgZG8KICAgICMgRnJlc2ggdGFibGUgZWFjaCBydW4gZm9y IGNvbnNpc3RlbnQgc3RhdGUKICAgIHNldHVwX2dpbiAiJFJPT1QiICIkUE9SVCIgIiRTSVpFIgog ICAgCiAgICBkcm9wX2NhY2hlcyAiJFJPT1QiICIkUE9SVCIgZ2luX3Rlc3QgZ2luX2lkeAogICAg bG9jYWwgcmVzdWx0IG1zIHJlYWRzIHJlYWRfdGltZSB3cml0ZXMgd3JpdGVfdGltZQogICAgIyBW QUNVVU0gQU5BTFlaRSBmb3JjZXMgZ2ludmFjdXVtY2xlYW51cCgpIHRvIHJ1biBhbmQgc2NhbiBh bGwgcGFnZXMKICAgIHJlc3VsdD0kKHJ1bl90aW1lZF93aXRoX2lvICIkUk9PVCIgIiRQT1JUIiAi VkFDVVVNIEFOQUxZWkUgZ2luX3Rlc3Q7IikKICAgIElGUz0nLCcgcmVhZCAtciBtcyByZWFkcyBy ZWFkX3RpbWUgd3JpdGVzIHdyaXRlX3RpbWUgPDw8IiRyZXN1bHQiCiAgICBlY2hvICIkaSwkbXMs JHJlYWRzLCRyZWFkX3RpbWUsJHdyaXRlcywkd3JpdGVfdGltZSIgPj4gIiRPVVQiCiAgICBsb2cg IiR7TEFCRUx9X2dpbl92YWN1dW1fJHtTSVpFfSBbJGkvJFJFUFNdOiAke21zfW1zIChyZWFkcz0k cmVhZHMsIHJlYWRfdGltZT0ke3JlYWRfdGltZX1tcywgd3JpdGVzPSR3cml0ZXMsIHdyaXRlX3Rp bWU9JHt3cml0ZV90aW1lfW1zKSIKICBkb25lCiAgCiAgaWYgW1sgJERPX1BST0ZJTEUgLWVxIDEg XV07IHRoZW4KICAgIHNldHVwX2dpbiAiJFJPT1QiICIkUE9SVCIgIiRTSVpFIgogICAgZHJvcF9j YWNoZXMgIiRST09UIiAiJFBPUlQiIGdpbl90ZXN0IGdpbl9pZHgKICAgIHByb2ZpbGVfc3FsICIk Uk9PVCIgIiRQT1JUIiAiJHtMQUJFTH1fZ2luX3ZhY3V1bV8ke1NJWkV9IiAiVkFDVVVNIEFOQUxZ WkUgZ2luX3Rlc3Q7IgogIGZpCn0KCnRlc3RfaGFzaF92YWN1dW0oKSB7CiAgbG9jYWwgUk9PVD0i JDEiIFBPUlQ9IiQyIiBMQUJFTD0iJDMiIFNJWkU9IiQ0IgogIGxvY2FsIE9VVD0iJFJPT1QvcmVz dWx0cy8ke0xBQkVMfV9oYXNoX3ZhY3V1bV8ke1NJWkV9LmNzdiIKICBta2RpciAtcCAiJFJPT1Qv cmVzdWx0cyIKICBlY2hvICJydW4sbXMscmVhZHMscmVhZF90aW1lX21zLHdyaXRlcyx3cml0ZV90 aW1lX21zIiA+ICIkT1VUIgogIAogIGZvciAoKGk9MTsgaTw9UkVQUzsgaSsrKSk7IGRvCiAgICAj IEZyZXNoIHRhYmxlIGVhY2ggcnVuIGZvciBjb25zaXN0ZW50IHN0YXRlCiAgICBzZXR1cF9oYXNo ICIkUk9PVCIgIiRQT1JUIiAiJFNJWkUiCiAgICAjIENyZWF0ZSAxMCUgZGVhZCB0dXBsZXMKICAg IHBzcWxfcnVuICIkUk9PVCIgIiRQT1JUIiAtYyAiREVMRVRFIEZST00gaGFzaF90ZXN0IFdIRVJF IGlkICUgMTAgPSAwOyIKICAgIAogICAgZHJvcF9jYWNoZXMgIiRST09UIiAiJFBPUlQiIGhhc2hf dGVzdCBoYXNoX2lkeAogICAgbG9jYWwgcmVzdWx0IG1zIHJlYWRzIHJlYWRfdGltZSB3cml0ZXMg d3JpdGVfdGltZQogICAgcmVzdWx0PSQocnVuX3RpbWVkX3dpdGhfaW8gIiRST09UIiAiJFBPUlQi ICJWQUNVVU0gaGFzaF90ZXN0OyIpCiAgICBJRlM9JywnIHJlYWQgLXIgbXMgcmVhZHMgcmVhZF90 aW1lIHdyaXRlcyB3cml0ZV90aW1lIDw8PCIkcmVzdWx0IgogICAgZWNobyAiJGksJG1zLCRyZWFk cywkcmVhZF90aW1lLCR3cml0ZXMsJHdyaXRlX3RpbWUiID4+ICIkT1VUIgogICAgbG9nICIke0xB QkVMfV9oYXNoX3ZhY3V1bV8ke1NJWkV9IFskaS8kUkVQU106ICR7bXN9bXMgKHJlYWRzPSRyZWFk cywgcmVhZF90aW1lPSR7cmVhZF90aW1lfW1zLCB3cml0ZXM9JHdyaXRlcywgd3JpdGVfdGltZT0k e3dyaXRlX3RpbWV9bXMpIgogIGRvbmUKICAKICBpZiBbWyAkRE9fUFJPRklMRSAtZXEgMSBdXTsg dGhlbgogICAgc2V0dXBfaGFzaCAiJFJPT1QiICIkUE9SVCIgIiRTSVpFIgogICAgcHNxbF9ydW4g IiRST09UIiAiJFBPUlQiIC1jICJERUxFVEUgRlJPTSBoYXNoX3Rlc3QgV0hFUkUgaWQgJSAxMCA9 IDA7IgogICAgZHJvcF9jYWNoZXMgIiRST09UIiAiJFBPUlQiIGhhc2hfdGVzdCBoYXNoX2lkeAog ICAgcHJvZmlsZV9zcWwgIiRST09UIiAiJFBPUlQiICIke0xBQkVMfV9oYXNoX3ZhY3V1bV8ke1NJ WkV9IiAiVkFDVVVNIGhhc2hfdGVzdDsiCiAgZmkKfQoKdGVzdF93YWxfbG9nZ2luZygpIHsKICBs b2NhbCBST09UPSIkMSIgUE9SVD0iJDIiIExBQkVMPSIkMyIgU0laRT0iJDQiCiAgbG9jYWwgT1VU PSIkUk9PVC9yZXN1bHRzLyR7TEFCRUx9X3dhbF9sb2dnaW5nXyR7U0laRX0uY3N2IgogIG1rZGly IC1wICIkUk9PVC9yZXN1bHRzIgogIGVjaG8gInJ1bixtcyxyZWFkcyxyZWFkX3RpbWVfbXMsd3Jp dGVzLHdyaXRlX3RpbWVfbXMiID4gIiRPVVQiCiAgCiAgIyBCdWlsZCB0YWJsZSBvbmNlIC0gb25s eSByZWJ1aWxkIGluZGV4IGVhY2ggcmVwCiAgc2V0dXBfd2FsICIkUk9PVCIgIiRQT1JUIiAiJFNJ WkUiCiAgCiAgbG9jYWwgV0FMX1NRTD0iQ1JFQVRFIElOREVYIHdhbF90ZXN0X2dpbl9pZHggT04g d2FsX3Rlc3QgVVNJTkcgZ2luIChkb2NfdHN2KTsiCiAgCiAgZm9yICgoaT0xOyBpPD1SRVBTOyBp KyspKTsgZG8KICAgICMgRHJvcCBpbmRleCBmcm9tIHByZXZpb3VzIGl0ZXJhdGlvbgogICAgcHNx bF9ydW4gIiRST09UIiAiJFBPUlQiIC1jICJEUk9QIElOREVYIElGIEVYSVNUUyB3YWxfdGVzdF9n aW5faWR4OyIKICAgIAogICAgIyBEcm9wIE9TIGNhY2hlcyAtIHNvdXJjZSB0YWJsZSBwYWdlcyBh cmUgQ09MRCBvbiBkaXNrCiAgICBkcm9wX2NhY2hlcyAiJFJPT1QiICIkUE9SVCIgd2FsX3Rlc3QK ICAgIAogICAgIyBDUkVBVEUgSU5ERVggb24gR0lOICh0c3ZlY3Rvcl9vcHMpOgogICAgIyAtIEdJ TiBhbHdheXMgdXNlcyB0aGUgc2FtZSBidWlsZCBwYXRoOiBnaW5idWlsZCgpIHBvcHVsYXRlcyB0 aGUKICAgICMgICBpbmRleCBpbiBtZW1vcnksIGZsdXNoZXMgdG8gZGlzaywgdGhlbiBjYWxscyBs b2dfbmV3cGFnZV9yYW5nZSgpCiAgICAjICAgdG8gcmVhZCBBTEwgaW5kZXggcGFnZXMgYW5kIHdy aXRlIHRoZW0gdG8gV0FMIChnaW5pbnNlcnQuYzo3ODUtNzkwKQogICAgbG9jYWwgcmVzdWx0IG1z IHJlYWRzIHJlYWRfdGltZSB3cml0ZXMgd3JpdGVfdGltZQogICAgcmVzdWx0PSQocnVuX3RpbWVk X3dpdGhfaW8gIiRST09UIiAiJFBPUlQiICIkV0FMX1NRTCIpCiAgICBJRlM9JywnIHJlYWQgLXIg bXMgcmVhZHMgcmVhZF90aW1lIHdyaXRlcyB3cml0ZV90aW1lIDw8PCIkcmVzdWx0IgogICAgZWNo byAiJGksJG1zLCRyZWFkcywkcmVhZF90aW1lLCR3cml0ZXMsJHdyaXRlX3RpbWUiID4+ICIkT1VU IgogICAgbG9nICIke0xBQkVMfV93YWxfbG9nZ2luZ18ke1NJWkV9IFskaS8kUkVQU106ICR7bXN9 bXMgKHJlYWRzPSRyZWFkcywgcmVhZF90aW1lPSR7cmVhZF90aW1lfW1zLCB3cml0ZXM9JHdyaXRl cywgd3JpdGVfdGltZT0ke3dyaXRlX3RpbWV9bXMpIgogIGRvbmUKICAKICBpZiBbWyAkRE9fUFJP RklMRSAtZXEgMSBdXTsgdGhlbgogICAgcHNxbF9ydW4gIiRST09UIiAiJFBPUlQiIC1jICJEUk9Q IElOREVYIElGIEVYSVNUUyB3YWxfdGVzdF9naW5faWR4OyIKICAgIGRyb3BfY2FjaGVzICIkUk9P VCIgIiRQT1JUIiB3YWxfdGVzdAogICAgcHJvZmlsZV9zcWwgIiRST09UIiAiJFBPUlQiICIke0xB QkVMfV93YWxfbG9nZ2luZ18ke1NJWkV9IiAiJFdBTF9TUUwiCiAgZmkKfQoKIyAtLS0gUnVuIHRl c3RzIGZvciBhIGJ1aWxkIC0tLQp3YXJtdXBfY2F0YWxvZygpIHsKICBsb2NhbCBST09UPSIkMSIg UE9SVD0iJDIiCiAgIyBFeHBsaWNpdGx5IHByZXdhcm0gY2F0YWxvZyB0YWJsZXMgYW5kIHRoZWly IGluZGV4ZXMgaW50byBzaGFyZWRfYnVmZmVycwogICMgc28gcmVwIDEgZG9lc24ndCBwYXkgZGlz ay1yZWFkIGNvc3QgZm9yIGNhdGFsb2cgcGFnZXMuCiAgIyBwZ19idWZmZXJjYWNoZV9ldmljdF9y ZWxhdGlvbiBvbmx5IGV2aWN0cyB0aGUgdGVzdCByZWxhdGlvbiwgbm90IGNhdGFsb2dzLAogICMg c28gdGhlc2Ugc3RheSB3YXJtIGFjcm9zcyBhbGwgcmVwcy4KICBwc3FsX3J1biAiJFJPT1QiICIk UE9SVCIgPDxTUUwgPi9kZXYvbnVsbApTRUxFQ1QgcGdfcHJld2FybSgncGdfY2xhc3MnLCAgICAg J2J1ZmZlcicpOwpTRUxFQ1QgcGdfcHJld2FybSgncGdfYXR0cmlidXRlJywgJ2J1ZmZlcicpOwpT RUxFQ1QgcGdfcHJld2FybSgncGdfbmFtZXNwYWNlJywgJ2J1ZmZlcicpOwpTRUxFQ1QgcGdfcHJl d2FybSgncGdfcHJvYycsICAgICAgJ2J1ZmZlcicpOwpTRUxFQ1QgcGdfcHJld2FybSgncGdfdHlw ZScsICAgICAgJ2J1ZmZlcicpOwpTUUwKfQoKcnVuX3Rlc3RzKCkgewogIGxvY2FsIFJPT1Q9IiQx IiBMQUJFTD0iJDIiCiAgbG9jYWwgUE9SVAogIFBPUlQ9JChwaWNrX3BvcnQpCiAgCiAgbG9nICJb JExBQkVMXSBTdGFydGluZyBjbHVzdGVyIG9uIHBvcnQgJFBPUlQiCiAgaW5pdF9jbHVzdGVyICIk Uk9PVCIgIiRQT1JUIgogIHdhcm11cF9jYXRhbG9nICIkUk9PVCIgIiRQT1JUIgogIHNldF9pb19k ZWxheSAiJElPX0RFTEFZX01TIgogIAogIHRyYXAgInN0b3BfY2x1c3RlciAnJFJPT1QnIiBFWElU CiAgCiAgZm9yIFNJWkUgaW4gJFNJWkVTOyBkbwogICAgY2FzZSAiJFRFU1QiIGluCiAgICAgIGJs b29tX3NjYW4pICAgdGVzdF9ibG9vbV9zY2FuICIkUk9PVCIgIiRQT1JUIiAiJExBQkVMIiAiJFNJ WkUiIDs7CiAgICAgIGJsb29tX3ZhY3V1bSkgdGVzdF9ibG9vbV92YWN1dW0gIiRST09UIiAiJFBP UlQiICIkTEFCRUwiICIkU0laRSIgOzsKICAgICAgcGdzdGF0dHVwbGUpICB0ZXN0X3Bnc3RhdHR1 cGxlICIkUk9PVCIgIiRQT1JUIiAiJExBQkVMIiAiJFNJWkUiIDs7CiAgICAgIHBnc3RhdGluZGV4 KSAgdGVzdF9wZ3N0YXRpbmRleCAiJFJPT1QiICIkUE9SVCIgIiRMQUJFTCIgIiRTSVpFIiA7Owog ICAgICBnaW5fdmFjdXVtKSAgIHRlc3RfZ2luX3ZhY3V1bSAiJFJPT1QiICIkUE9SVCIgIiRMQUJF TCIgIiRTSVpFIiA7OwogICAgICBoYXNoX3ZhY3V1bSkgIHRlc3RfaGFzaF92YWN1dW0gIiRST09U IiAiJFBPUlQiICIkTEFCRUwiICIkU0laRSIgOzsKICAgICAgd2FsX2xvZ2dpbmcpICB0ZXN0X3dh bF9sb2dnaW5nICIkUk9PVCIgIiRQT1JUIiAiJExBQkVMIiAiJFNJWkUiIDs7CiAgICAgIGFsbCkK ICAgICAgICB0ZXN0X2Jsb29tX3ZhY3V1bSAiJFJPT1QiICIkUE9SVCIgIiRMQUJFTCIgIiRTSVpF IgogICAgICAgIHRlc3RfcGdzdGF0dHVwbGUgIiRST09UIiAiJFBPUlQiICIkTEFCRUwiICIkU0la RSIKICAgICAgICB0ZXN0X3Bnc3RhdGluZGV4ICIkUk9PVCIgIiRQT1JUIiAiJExBQkVMIiAiJFNJ WkUiCiAgICAgICAgdGVzdF9oYXNoX3ZhY3V1bSAiJFJPT1QiICIkUE9SVCIgIiRMQUJFTCIgIiRT SVpFIgogICAgICAgIHRlc3Rfd2FsX2xvZ2dpbmcgIiRST09UIiAiJFBPUlQiICIkTEFCRUwiICIk U0laRSIKICAgICAgICA7OwogICAgICAqKSBkaWUgIlVua25vd24gdGVzdDogJFRFU1QiIDs7CiAg ICBlc2FjCiAgZG9uZQogIAogIHN0b3BfY2x1c3RlciAiJFJPT1QiCiAgdHJhcCAtIEVYSVQKfQoK IyAtLS0gQ29tcGFyZSByZXN1bHRzIC0tLQpjb21wYXJlX3Jlc3VsdHMoKSB7CiAgbG9jYWwgYmFz ZV9jc3Y9IiQxIiBwYXRjaF9jc3Y9IiQyIiBsYWJlbD0iJDMiCiAgCiAgW1sgISAtZiAiJGJhc2Vf Y3N2IiB8fCAhIC1mICIkcGF0Y2hfY3N2IiBdXSAmJiByZXR1cm4KICAKICBsb2NhbCBiYXNlX21l ZCBwYXRjaF9tZWQKICBiYXNlX21lZD0kKGNhbGNfbWVkaWFuICIkYmFzZV9jc3YiKQogIHBhdGNo X21lZD0kKGNhbGNfbWVkaWFuICIkcGF0Y2hfY3N2IikKICAKICAjIEd1YXJkIGFnYWluc3QgZW1w dHkgb3IgemVybyB2YWx1ZXMgdG8gcHJldmVudCBkaXZpc2lvbiBieSB6ZXJvCiAgW1sgLXogIiRi YXNlX21lZCIgfHwgIiRiYXNlX21lZCIgPT0gIjAiIF1dICYmIGJhc2VfbWVkPSIwLjAwMSIKICBb WyAteiAiJHBhdGNoX21lZCIgfHwgIiRwYXRjaF9tZWQiID09ICIwIiBdXSAmJiBwYXRjaF9tZWQ9 IjAuMDAxIgogIAogIGxvY2FsIHNwZWVkdXAgcGN0CiAgc3BlZWR1cD0kKGF3ayAiQkVHSU4geyBw cmludGYgXCIlLjJmXCIsICRiYXNlX21lZCAvICRwYXRjaF9tZWQgfSIpCiAgcGN0PSQoYXdrICJC RUdJTiB7IHByaW50ZiBcIiUuMWZcIiwgKCRiYXNlX21lZCAtICRwYXRjaF9tZWQpIC8gJGJhc2Vf bWVkICogMTAwIH0iKQogIAogIGxvY2FsIGlvX2luZm89IiIgaW9fZGV0YWlsPSIiCiAgaWYgaGVh ZCAtMSAiJGJhc2VfY3N2IiB8IGdyZXAgLXEgInJlYWRzIjsgdGhlbgogICAgIyBTdGFuZGFyZCB0 ZXN0OiBjb2x1bW5zIGFyZSBydW4sbXMscmVhZHMscmVhZF90aW1lX21zLHdyaXRlcyx3cml0ZV90 aW1lX21zCiAgICBsb2NhbCBiYXNlX3JlYWRzIHBhdGNoX3JlYWRzIGJhc2VfcnRpbWUgcGF0Y2hf cnRpbWUgYmFzZV93cml0ZXMgcGF0Y2hfd3JpdGVzIGJhc2Vfd3RpbWUgcGF0Y2hfd3RpbWUKICAg IGJhc2VfcmVhZHM9JChjYWxjX21lZGlhbl9jb2wgIiRiYXNlX2NzdiIgMykKICAgIHBhdGNoX3Jl YWRzPSQoY2FsY19tZWRpYW5fY29sICIkcGF0Y2hfY3N2IiAzKQogICAgYmFzZV9ydGltZT0kKGNh bGNfbWVkaWFuX2NvbCAiJGJhc2VfY3N2IiA0KQogICAgcGF0Y2hfcnRpbWU9JChjYWxjX21lZGlh bl9jb2wgIiRwYXRjaF9jc3YiIDQpCiAgICBiYXNlX3dyaXRlcz0kKGNhbGNfbWVkaWFuX2NvbCAi JGJhc2VfY3N2IiA1KQogICAgcGF0Y2hfd3JpdGVzPSQoY2FsY19tZWRpYW5fY29sICIkcGF0Y2hf Y3N2IiA1KQogICAgYmFzZV93dGltZT0kKGNhbGNfbWVkaWFuX2NvbCAiJGJhc2VfY3N2IiA2KQog ICAgcGF0Y2hfd3RpbWU9JChjYWxjX21lZGlhbl9jb2wgIiRwYXRjaF9jc3YiIDYpCiAgICAjIERl ZmF1bHQgdG8gMCBpZiBlbXB0eQogICAgW1sgLXogIiRiYXNlX3JlYWRzIiBdXSAgICYmIGJhc2Vf cmVhZHM9MAogICAgW1sgLXogIiRwYXRjaF9yZWFkcyIgXV0gICYmIHBhdGNoX3JlYWRzPTAKICAg IFtbIC16ICIkYmFzZV9ydGltZSIgXV0gICAmJiBiYXNlX3J0aW1lPTAKICAgIFtbIC16ICIkcGF0 Y2hfcnRpbWUiIF1dICAmJiBwYXRjaF9ydGltZT0wCiAgICBbWyAteiAiJGJhc2Vfd3JpdGVzIiBd XSAgJiYgYmFzZV93cml0ZXM9MAogICAgW1sgLXogIiRwYXRjaF93cml0ZXMiIF1dICYmIHBhdGNo X3dyaXRlcz0wCiAgICBbWyAteiAiJGJhc2Vfd3RpbWUiIF1dICAgJiYgYmFzZV93dGltZT0wCiAg ICBbWyAteiAiJHBhdGNoX3d0aW1lIiBdXSAgJiYgcGF0Y2hfd3RpbWU9MAoKICAgICMgUGVyLWNv bXBvbmVudCBzcGVlZHVwIChndWFyZCBhZ2FpbnN0IGRpdmlzaW9uIGJ5IHplcm8pCiAgICBsb2Nh bCByX3NwZWVkdXAgd19zcGVlZHVwCiAgICBpZiBhd2sgIkJFR0lOIHsgZXhpdCAoJHBhdGNoX3J0 aW1lID4gMCkgPyAwIDogMSB9IjsgdGhlbgogICAgICByX3NwZWVkdXA9JChhd2sgIkJFR0lOIHsg cHJpbnRmIFwiJS4yZnhcIiwgJGJhc2VfcnRpbWUgLyAkcGF0Y2hfcnRpbWUgfSIpCiAgICBlbHNl CiAgICAgIHJfc3BlZWR1cD0ibi9hIgogICAgZmkKICAgIGlmIGF3ayAiQkVHSU4geyBleGl0ICgk cGF0Y2hfd3RpbWUgPiAwKSA/IDAgOiAxIH0iOyB0aGVuCiAgICAgIHdfc3BlZWR1cD0kKGF3ayAi QkVHSU4geyBwcmludGYgXCIlLjJmeFwiLCAkYmFzZV93dGltZSAvICRwYXRjaF93dGltZSB9IikK ICAgIGVsc2UKICAgICAgd19zcGVlZHVwPSJuL2EiCiAgICBmaQoKICAgIGlvX2luZm89JChwcmlu dGYgIlxuJS0yNnMgICByZWFkOiAgJXPihpIlcyBvcHMgICVz4oaSJXNtcyAgKCVzKSAgICB3cml0 ZTogICVz4oaSJXMgb3BzICAlc+KGkiVzbXMgICglcykiIFwKICAgICAgIiIgIiRiYXNlX3JlYWRz IiAiJHBhdGNoX3JlYWRzIiAiJGJhc2VfcnRpbWUiICIkcGF0Y2hfcnRpbWUiICIkcl9zcGVlZHVw IiBcCiAgICAgICIkYmFzZV93cml0ZXMiICIkcGF0Y2hfd3JpdGVzIiAiJGJhc2Vfd3RpbWUiICIk cGF0Y2hfd3RpbWUiICIkd19zcGVlZHVwIikKICBmaQogIAogIHByaW50ZiAiJS0yNnMgYmFzZT0l OC4xZm1zICBwYXRjaD0lOC4xZm1zICAlNS4yZnggICglNS4xZiUlKSVzXG4iIFwKICAgICIkbGFi ZWwiICIkYmFzZV9tZWQiICIkcGF0Y2hfbWVkIiAiJHNwZWVkdXAiICIkcGN0IiAiJGlvX2luZm8i Cn0KCnByaW50X3N1bW1hcnkoKSB7CiAgZWNobyAiIgogIGVjaG8gIuKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCIKICBlY2hvICIgICAgICAgICAgICAgICAgICAgICBT VFJFQU1JTkcgUkVBRCBCRU5DSE1BUksgUkVTVUxUUyAgICAgICAgICAgICAgICAgICAiCiAgZWNo byAi4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIgogIGVjaG8gIiIK ICAKICBpZiBbWyAkQkFTRUxJTkUgLWVxIDEgXV07IHRoZW4KICAgIHByaW50ZiAiJS0yNnMgJS0x N3MgJS0xN3MgJS03cyAlLTdzICVzXG4iICJURVNUIiAiQkFTRUxJTkUiICJQQVRDSEVEIiAiU1BF RURVUCIgIkNIQU5HRSIgIkkvTyBUSU1FIgogICAgZWNobyAi4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIgogICAgCiAgICBmb3Ig U0laRSBpbiAkU0laRVM7IGRvCiAgICAgIGZvciB0ZXN0X25hbWUgaW4gYmxvb21fc2NhbiBibG9v bV92YWN1dW0gcGdzdGF0dHVwbGUgcGdzdGF0aW5kZXggZ2luX3ZhY3V1bSBoYXNoX3ZhY3V1bSB3 YWxfbG9nZ2luZzsgZG8KICAgICAgICBbWyAiJFRFU1QiICE9ICJhbGwiICYmICIkVEVTVCIgIT0g IiR0ZXN0X25hbWUiIF1dICYmIGNvbnRpbnVlCiAgICAgICAgY29tcGFyZV9yZXN1bHRzIFwKICAg ICAgICAgICIkUk9PVF9CQVNFL3Jlc3VsdHMvYmFzZV8ke3Rlc3RfbmFtZX1fJHtTSVpFfS5jc3Yi IFwKICAgICAgICAgICIkUk9PVF9QQVRDSC9yZXN1bHRzL3BhdGNoZWRfJHt0ZXN0X25hbWV9XyR7 U0laRX0uY3N2IiBcCiAgICAgICAgICAiJHt0ZXN0X25hbWV9XyR7U0laRX0iCiAgICAgIGRvbmUK ICAgIGRvbmUKICBlbHNlCiAgICBlY2hvICJSZXN1bHRzIChwYXRjaGVkIG9ubHkpOiIKICAgIGVj aG8gIiIKICAgIGZvciBmIGluICIkUk9PVF9QQVRDSC9yZXN1bHRzLyIqLmNzdjsgZG8KICAgICAg W1sgLWYgIiRmIiBdXSB8fCBjb250aW51ZQogICAgICBwcmludGYgIiUtNDBzICVzXG4iICIkKGJh c2VuYW1lICIkZiIgLmNzdik6IiAiJChjYWxjX3N0YXRzICIkZiIpIgogICAgZG9uZQogIGZpCiAg CiAgZWNobyAiIgogIGVjaG8gIuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkCIKICBlY2hvICJDU1YgZmlsZXM6ICRST09UX1BBVENIL3Jlc3VsdHMvIgogIFtbICRCQVNF TElORSAtZXEgMSBdXSAmJiBlY2hvICJCYXNlbGluZTogICRST09UX0JBU0UvcmVzdWx0cy8iCiAg CiAgIyBMaXN0IGdlbmVyYXRlZCBmbGFtZWdyYXBocwogIGlmIFtbICRET19QUk9GSUxFIC1lcSAx IF1dOyB0aGVuCiAgICBsb2NhbCBzdmdzPSgpCiAgICBmb3IgZGlyIGluICIkUk9PVF9CQVNFL3By b2ZpbGUiICIkUk9PVF9QQVRDSC9wcm9maWxlIjsgZG8KICAgICAgW1sgLWQgIiRkaXIiIF1dIHx8 IGNvbnRpbnVlCiAgICAgIGZvciBzdmcgaW4gIiRkaXIiLyouc3ZnOyBkbwogICAgICAgIFtbIC1m ICIkc3ZnIiBdXSAmJiBzdmdzKz0oIiRzdmciKQogICAgICBkb25lCiAgICBkb25lCiAgICBpZiBb WyAkeyNzdmdzW0BdfSAtZ3QgMCBdXTsgdGhlbgogICAgICBlY2hvICIiCiAgICAgIGVjaG8gIkZs YW1lZ3JhcGhzOiIKICAgICAgZm9yIHN2ZyBpbiAiJHtzdmdzW0BdfSI7IGRvIGVjaG8gIiAgJHN2 ZyI7IGRvbmUKICAgIGZpCiAgZmkKICAKICBlY2hvICLilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZAiCn0KCiMgLS0tIE1haW4gLS0tCm1haW4oKSB7CiAgbG9nICJTdHJl YW1pbmcgUmVhZCBCZW5jaG1hcmsiCiAgbG9nICJQYXRjaDogJFBBVENIICgkUEFUQ0hfVEFHKSIK ICBsb2cgIlRlc3RzOiAkVEVTVCIKICBsb2cgIlNpemVzOiAkU0laRVMiCiAgbG9nICJSZXBzOiAg JFJFUFMiCiAgbG9nICJJL086ICAgJElPX01FVEhPRCAod29ya2Vycz0kSU9fV09SS0VSUywgY29u Y3VycmVuY3k9JElPX01BWF9DT05DVVJSRU5DWSkiCiAgW1sgJERJUkVDVF9JTyAtZXEgMSBdXSAm JiBsb2cgIkRpcmVjdCBJTzogZW5hYmxlZCAoZGVidWdfaW9fZGlyZWN0PWRhdGEpIgogIFtbIC1u ICIkSU9fREVMQVlfTVMiIF1dICYmIGxvZyAiSS9PIGRlbGF5OiAke0lPX0RFTEFZX01TfW1zIHJl YWQgLyAke1dSSVRFX0RFTEFZX01TfW1zIHdyaXRlIHZpYSBkbV9kZWxheSAoJERNX0RFTEFZX0RF VikiCiAgW1sgJERPX1BST0ZJTEUgLWVxIDEgXV0gJiYgbG9nICJQcm9maWxlOiBlbmFibGVkIChm bGFtZWdyYXBocyDihpIgPHJvb3Q+L3Byb2ZpbGUvKSIKICAKICAjIEJ1aWxkCiAgaWYgW1sgJEJB U0VMSU5FIC1lcSAxIF1dOyB0aGVuCiAgICBidWlsZF9wZyAiJFJPT1RfQkFTRSIgIiIKICBmaQog IGJ1aWxkX3BnICIkUk9PVF9QQVRDSCIgIiRQQVRDSCIKICAKICAjIFJ1biB0ZXN0cwogIGlmIFtb ICRCQVNFTElORSAtZXEgMSBdXTsgdGhlbgogICAgbG9nICJSdW5uaW5nIGJhc2VsaW5lIHRlc3Rz IgogICAgcnVuX3Rlc3RzICIkUk9PVF9CQVNFIiAiYmFzZSIKICBmaQogIAogIGxvZyAiUnVubmlu ZyBwYXRjaGVkIHRlc3RzIgogIHJ1bl90ZXN0cyAiJFJPT1RfUEFUQ0giICJwYXRjaGVkIgogIAog ICMgU3VtbWFyeQogIHByaW50X3N1bW1hcnkKfQoKbWFpbgo= --00000000000082db66064d07f582--