From unknown Fri Sep 05 19:18:46 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#24108 <24108@debbugs.gnu.org> To: bug#24108 <24108@debbugs.gnu.org> Subject: Status: CLONE_NEWUSER tests fail with EPERM instead of being skipped on Grsecurity kernels Reply-To: bug#24108 <24108@debbugs.gnu.org> Date: Sat, 06 Sep 2025 02:18:46 +0000 retitle 24108 CLONE_NEWUSER tests fail with EPERM instead of being skipped = on Grsecurity kernels reassign 24108 guix submitter 24108 sapientech@openmailbox.org severity 24108 normal tag 24108 notabug thanks From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 29 19:50:48 2016 Received: (at submit) by debbugs.gnu.org; 29 Jul 2016 23:50:48 +0000 Received: from localhost ([127.0.0.1]:51012 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTHYG-0000dN-DK for submit@debbugs.gnu.org; Fri, 29 Jul 2016 19:50:48 -0400 Received: from eggs.gnu.org ([208.118.235.92]:38264) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTHBX-00006t-BK for submit@debbugs.gnu.org; Fri, 29 Jul 2016 19:27:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bTHBB-0004gV-HS for submit@debbugs.gnu.org; Fri, 29 Jul 2016 19:27:14 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,T_DKIM_INVALID, T_FILL_THIS_FORM_SHORT autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:60985) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bTHBB-0004ff-AZ for submit@debbugs.gnu.org; Fri, 29 Jul 2016 19:26:57 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57321) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bTHAu-0000fT-Jn for bug-guix@gnu.org; Fri, 29 Jul 2016 19:26:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bTHAd-0004cG-RN for bug-guix@gnu.org; Fri, 29 Jul 2016 19:26:39 -0400 Received: from mail2.openmailbox.org ([62.4.1.33]:59341) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bTHAc-0004bb-Ll for bug-guix@gnu.org; Fri, 29 Jul 2016 19:26:23 -0400 Received: by mail2.openmailbox.org (Postfix, from userid 1001) id C5DA2108E46; Sat, 30 Jul 2016 01:26:20 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=openmailbox.org; s=openmailbox; t=1469834780; bh=HWV6RHDsgrbXfJQwxQAL1/U9f8BM4ESoX6sZt2nWd0w=; h=Date:From:To:Subject:From; b=Jgg1Zf6EOkOGvqg067ERLLsjaM/hmR5wdgfrEEEeV8gBdkMwkdN+Jy1UtVJaohYg7 sNA7GvEKNnzdGLuuWIr5yjPEEosff8FaTZhlRW/EuNWplhARXDEFfHlc7WFOSoFTXw zOmhb73gw4O1sBtFABg64p7YJP/pEO/LrWueQvWU= Received: from www.openmailbox.org (unknown [10.91.130.51]) by mail2.openmailbox.org (Postfix) with ESMTP id B5885109F24 for ; Sat, 30 Jul 2016 01:26:10 +0200 (CEST) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_e9a6df70a27b00c7c1a80573c06d6b2d" Date: Fri, 29 Jul 2016 19:26:10 -0400 From: sapientech@openmailbox.org To: bug-guix@gnu.org Subject: guix make tests failure Message-ID: <4c03321977ef605cc34a23986d83ce47@openmailbox.org> X-Sender: sapientech@openmailbox.org User-Agent: Roundcube Webmail/1.0.6 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Fri, 29 Jul 2016 19:50:46 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --=_e9a6df70a27b00c7c1a80573c06d6b2d Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi all, Attached is the output log of `make tests`. Commands leading up to make tests: $ guix environment guix --ad-hoc git vim $ ./bootstrap $ ./configure $ make tests --=_e9a6df70a27b00c7c1a80573c06d6b2d Content-Transfer-Encoding: base64 Content-Type: text/plain; name=config.log Content-Disposition: attachment; filename=config.log; size=46318 VGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hp bGUKcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2Vz IGEgbWlzdGFrZS4KCkl0IHdhcyBjcmVhdGVkIGJ5IEdOVSBHdWl4IGNvbmZpZ3VyZSAwLjEwLjAs IHdoaWNoIHdhcwpnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuICBJbnZvY2F0aW9uIGNv bW1hbmQgbGluZSB3YXMKCiAgJCAuL2NvbmZpZ3VyZSAKCiMjIC0tLS0tLS0tLSAjIwojIyBQbGF0 Zm9ybS4gIyMKIyMgLS0tLS0tLS0tICMjCgpob3N0bmFtZSA9IGZyZWV0b3AKdW5hbWUgLW0gPSB4 ODZfNjQKdW5hbWUgLXIgPSA0LjYuNC1nbnUtMjAxNjA3MTkyMDQwLTEtZ3JzZWMKdW5hbWUgLXMg PSBMaW51eAp1bmFtZSAtdiA9ICMxIFNNUCBQUkVFTVBUIFdlZCBKdWwgMjAgMTU6Mzc6MzQgVVlU IDIwMTYKCi91c3IvYmluL3VuYW1lIC1wID0gdW5rbm93bgovYmluL3VuYW1lIC1YICAgICA9IHVu a25vd24KCi9iaW4vYXJjaCAgICAgICAgICAgICAgPSB1bmtub3duCi91c3IvYmluL2FyY2ggLWsg ICAgICAgPSB1bmtub3duCi91c3IvY29udmV4L2dldHN5c2luZm8gPSB1bmtub3duCi91c3IvYmlu L2hvc3RpbmZvICAgICAgPSB1bmtub3duCi9iaW4vbWFjaGluZSAgICAgICAgICAgPSB1bmtub3du Ci91c3IvYmluL29zbGV2ZWwgICAgICAgPSB1bmtub3duCi9iaW4vdW5pdmVyc2UgICAgICAgICAg PSB1bmtub3duCgpQQVRIOiAvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgw cmg3LXByb2ZpbGUvYmluClBBVEg6IC9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYz cjM5eDByaDctcHJvZmlsZS9zYmluClBBVEg6IC91c3IvbG9jYWwvc2JpbgpQQVRIOiAvdXNyL2xv Y2FsL2JpbgpQQVRIOiAvdXNyL2JpbgpQQVRIOiAvdXNyL2xpYi9qdm0vZGVmYXVsdC9iaW4KUEFU SDogL3Vzci9iaW4vc2l0ZV9wZXJsClBBVEg6IC91c3IvYmluL3ZlbmRvcl9wZXJsClBBVEg6IC91 c3IvYmluL2NvcmVfcGVybApQQVRIOiAvaG9tZS9zYXBpZW50ZWNoLy5ndWl4LXByb2ZpbGUvYmlu ClBBVEg6IC9ob21lL3NhcGllbnRlY2gvLmd1aXgtcHJvZmlsZS9zYmluCgoKIyMgLS0tLS0tLS0t LS0gIyMKIyMgQ29yZSB0ZXN0cy4gIyMKIyMgLS0tLS0tLS0tLS0gIyMKCmNvbmZpZ3VyZToyNTc0 OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsCmNvbmZpZ3VyZToyNjQyOiBy ZXN1bHQ6IC9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmls ZS9iaW4vaW5zdGFsbCAtYwpjb25maWd1cmU6MjY1MzogY2hlY2tpbmcgd2hldGhlciBidWlsZCBl bnZpcm9ubWVudCBpcyBzYW5lCmNvbmZpZ3VyZToyNzA4OiByZXN1bHQ6IHllcwpjb25maWd1cmU6 Mjg1OTogY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAKY29uZmlndXJlOjI4OTg6 IHJlc3VsdDogL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9m aWxlL2Jpbi9ta2RpciAtcApjb25maWd1cmU6MjkwNTogY2hlY2tpbmcgZm9yIGdhd2sKY29uZmln dXJlOjI5MjE6IGZvdW5kIC9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDBy aDctcHJvZmlsZS9iaW4vZ2F3awpjb25maWd1cmU6MjkzMjogcmVzdWx0OiBnYXdrCmNvbmZpZ3Vy ZToyOTQzOiBjaGVja2luZyB3aGV0aGVyIG1ha2Ugc2V0cyAkKE1BS0UpCmNvbmZpZ3VyZToyOTY1 OiByZXN1bHQ6IHllcwpjb25maWd1cmU6Mjk5NDogY2hlY2tpbmcgd2hldGhlciBtYWtlIHN1cHBv cnRzIG5lc3RlZCB2YXJpYWJsZXMKY29uZmlndXJlOjMwMTE6IHJlc3VsdDogeWVzCmNvbmZpZ3Vy ZTozMTUwOiBjaGVja2luZyB3aGV0aGVyIG1ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcwpj b25maWd1cmU6MzE2NzogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjMxOTQ6IGNoZWNraW5nIGZvciBz dHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgbWFrZQpjb25maWd1cmU6MzIyMjogcmVzdWx0OiBHTlUK Y29uZmlndXJlOjMyOTM6IGNoZWNraW5nIGZvciBnY2MKY29uZmlndXJlOjMzMDk6IGZvdW5kIC9n bnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vZ2Nj CmNvbmZpZ3VyZTozMzIwOiByZXN1bHQ6IGdjYwpjb25maWd1cmU6MzU0OTogY2hlY2tpbmcgZm9y IEMgY29tcGlsZXIgdmVyc2lvbgpjb25maWd1cmU6MzU1ODogZ2NjIC0tdmVyc2lvbiA+JjUKZ2Nj IChHQ0MpIDQuOS4zCkNvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBj b25kaXRpb25zLiAgVGhlcmUgaXMgTk8Kd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCgpjb25maWd1cmU6MzU2 OTogJD8gPSAwCmNvbmZpZ3VyZTozNTU4OiBnY2MgLXYgPiY1ClVzaW5nIGJ1aWx0LWluIHNwZWNz LgpDT0xMRUNUX0dDQz1nY2MKQ09MTEVDVF9MVE9fV1JBUFBFUj0vZ251L3N0b3JlL3NqdmNpcnJp MmJnN3E1aGxya2F5d2hteGxsaWswY2Z4LWdjYy00LjkuMy9saWJleGVjL2djYy94ODZfNjQtdW5r bm93bi1saW51eC1nbnUvNC45LjMvbHRvLXdyYXBwZXIKVGFyZ2V0OiB4ODZfNjQtdW5rbm93bi1s aW51eC1nbnUKQ29uZmlndXJlZCB3aXRoOiAKVGhyZWFkIG1vZGVsOiBwb3NpeApnY2MgdmVyc2lv biA0LjkuMyAoR0NDKSAKY29uZmlndXJlOjM1Njk6ICQ/ID0gMApjb25maWd1cmU6MzU1ODogZ2Nj IC1WID4mNQpnY2M6IGVycm9yOiB1bnJlY29nbml6ZWQgY29tbWFuZCBsaW5lIG9wdGlvbiAnLVYn CmdjYzogZmF0YWwgZXJyb3I6IG5vIGlucHV0IGZpbGVzCmNvbXBpbGF0aW9uIHRlcm1pbmF0ZWQu CmNvbmZpZ3VyZTozNTY5OiAkPyA9IDEKY29uZmlndXJlOjM1NTg6IGdjYyAtcXZlcnNpb24gPiY1 CmdjYzogZXJyb3I6IHVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgb3B0aW9uICctcXZlcnNpb24n CmdjYzogZmF0YWwgZXJyb3I6IG5vIGlucHV0IGZpbGVzCmNvbXBpbGF0aW9uIHRlcm1pbmF0ZWQu CmNvbmZpZ3VyZTozNTY5OiAkPyA9IDEKY29uZmlndXJlOjM1ODk6IGNoZWNraW5nIHdoZXRoZXIg dGhlIEMgY29tcGlsZXIgd29ya3MKY29uZmlndXJlOjM2MTE6IGdjYyAgICBjb25mdGVzdC5jICA+ JjUKY29uZmlndXJlOjM2MTU6ICQ/ID0gMApjb25maWd1cmU6MzY2MzogcmVzdWx0OiB5ZXMKY29u ZmlndXJlOjM2NjY6IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUg bmFtZQpjb25maWd1cmU6MzY2ODogcmVzdWx0OiBhLm91dApjb25maWd1cmU6MzY3NDogY2hlY2tp bmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcwpjb25maWd1cmU6MzY4MTogZ2NjIC1vIGNvbmZ0 ZXN0ICAgIGNvbmZ0ZXN0LmMgID4mNQpjb25maWd1cmU6MzY4NTogJD8gPSAwCmNvbmZpZ3VyZToz NzA3OiByZXN1bHQ6IApjb25maWd1cmU6MzcyOTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jv c3MgY29tcGlsaW5nCmNvbmZpZ3VyZTozNzM3OiBnY2MgLW8gY29uZnRlc3QgICAgY29uZnRlc3Qu YyAgPiY1CmNvbmZpZ3VyZTozNzQxOiAkPyA9IDAKY29uZmlndXJlOjM3NDg6IC4vY29uZnRlc3QK Y29uZmlndXJlOjM3NTI6ICQ/ID0gMApjb25maWd1cmU6Mzc2NzogcmVzdWx0OiBubwpjb25maWd1 cmU6Mzc3MjogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMKY29uZmlndXJlOjM3 OTQ6IGdjYyAtYyAgIGNvbmZ0ZXN0LmMgPiY1CmNvbmZpZ3VyZTozNzk4OiAkPyA9IDAKY29uZmln dXJlOjM4MTk6IHJlc3VsdDogbwpjb25maWd1cmU6MzgyMzogY2hlY2tpbmcgd2hldGhlciB3ZSBh cmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyCmNvbmZpZ3VyZTozODQyOiBnY2MgLWMgICBjb25m dGVzdC5jID4mNQpjb25maWd1cmU6Mzg0MjogJD8gPSAwCmNvbmZpZ3VyZTozODUxOiByZXN1bHQ6 IHllcwpjb25maWd1cmU6Mzg2MDogY2hlY2tpbmcgd2hldGhlciBnY2MgYWNjZXB0cyAtZwpjb25m aWd1cmU6Mzg4MDogZ2NjIC1jIC1nICBjb25mdGVzdC5jID4mNQpjb25maWd1cmU6Mzg4MDogJD8g PSAwCmNvbmZpZ3VyZTozOTIxOiByZXN1bHQ6IHllcwpjb25maWd1cmU6MzkzODogY2hlY2tpbmcg Zm9yIGdjYyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkKY29uZmlndXJlOjQwMDE6IGdjYyAgLWMg LWcgLU8yICBjb25mdGVzdC5jID4mNQpjb25maWd1cmU6NDAwMTogJD8gPSAwCmNvbmZpZ3VyZTo0 MDE0OiByZXN1bHQ6IG5vbmUgbmVlZGVkCmNvbmZpZ3VyZTo0MDM5OiBjaGVja2luZyB3aGV0aGVy IGdjYyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIKY29uZmlndXJlOjQwNjE6IGdjYyAt YyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0Mi5vCmNvbmZpZ3VyZTo0MDY0OiAkPyA9IDAKY29uZmln dXJlOjQwNjE6IGdjYyAtYyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0Mi5vCmNvbmZpZ3VyZTo0MDY0 OiAkPyA9IDAKY29uZmlndXJlOjQwNzY6IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo0MDk1OiBjaGVj a2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mIGdjYwpjb25maWd1cmU6NDIwNjogcmVzdWx0OiBnY2Mz CmNvbmZpZ3VyZTo0MjI3OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvcgpj b25maWd1cmU6NDI1ODogZ2NjIC1FICBjb25mdGVzdC5jCmNvbmZpZ3VyZTo0MjU4OiAkPyA9IDAK Y29uZmlndXJlOjQyNzI6IGdjYyAtRSAgY29uZnRlc3QuYwpjb25mdGVzdC5jOjExOjI4OiBmYXRh bCBlcnJvcjogYWNfbm9uZXhpc3RlbnQuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQogI2lu Y2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCmNv bXBpbGF0aW9uIHRlcm1pbmF0ZWQuCmNvbmZpZ3VyZTo0MjcyOiAkPyA9IDEKY29uZmlndXJlOiBm YWlsZWQgcHJvZ3JhbSB3YXM6CnwgLyogY29uZmRlZnMuaCAqLwp8ICNkZWZpbmUgUEFDS0FHRV9O QU1FICJHTlUgR3VpeCIKfCAjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiZ3VpeCIKfCAjZGVmaW5l IFBBQ0tBR0VfVkVSU0lPTiAiMC4xMC4wIgp8ICNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIkdOVSBH dWl4IDAuMTAuMCIKfCAjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJidWctZ3VpeEBnbnUub3Jn Igp8ICNkZWZpbmUgUEFDS0FHRV9VUkwgImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ndWl4 LyIKfCAjZGVmaW5lIFBBQ0tBR0UgImd1aXgiCnwgI2RlZmluZSBWRVJTSU9OICIwLjEwLjAiCnwg LyogZW5kIGNvbmZkZWZzLmguICAqLwp8ICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgpjb25m aWd1cmU6NDI5NzogcmVzdWx0OiBnY2MgLUUKY29uZmlndXJlOjQzMTc6IGdjYyAtRSAgY29uZnRl c3QuYwpjb25maWd1cmU6NDMxNzogJD8gPSAwCmNvbmZpZ3VyZTo0MzMxOiBnY2MgLUUgIGNvbmZ0 ZXN0LmMKY29uZnRlc3QuYzoxMToyODogZmF0YWwgZXJyb3I6IGFjX25vbmV4aXN0ZW50Lmg6IE5v IHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgXgpjb21waWxhdGlvbiB0ZXJtaW5hdGVkLgpjb25maWd1 cmU6NDMzMTogJD8gPSAxCmNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgp8IC8qIGNvbmZk ZWZzLmggKi8KfCAjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiR05VIEd1aXgiCnwgI2RlZmluZSBQQUNL QUdFX1RBUk5BTUUgImd1aXgiCnwgI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIjAuMTAuMCIKfCAj ZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJHTlUgR3VpeCAwLjEwLjAiCnwgI2RlZmluZSBQQUNLQUdF X0JVR1JFUE9SVCAiYnVnLWd1aXhAZ251Lm9yZyIKfCAjZGVmaW5lIFBBQ0tBR0VfVVJMICJodHRw Oi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3VpeC8iCnwgI2RlZmluZSBQQUNLQUdFICJndWl4Igp8 ICNkZWZpbmUgVkVSU0lPTiAiMC4xMC4wIgp8IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KfCAjaW5j bHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KY29uZmlndXJlOjQzNjA6IGNoZWNraW5nIGZvciBncmVw IHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZQpjb25maWd1cmU6NDQxODogcmVzdWx0OiAv Z251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL2dy ZXAKY29uZmlndXJlOjQ0MjM6IGNoZWNraW5nIGZvciBlZ3JlcApjb25maWd1cmU6NDQ4NTogcmVz dWx0OiAvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUv YmluL2dyZXAgLUUKY29uZmlndXJlOjQ0OTA6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZp bGVzCmNvbmZpZ3VyZTo0NTEwOiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQpjb25maWd1 cmU6NDUxMDogJD8gPSAwCmNvbmZpZ3VyZTo0NTgzOiBnY2MgLW8gY29uZnRlc3QgLWcgLU8yICAg Y29uZnRlc3QuYyAgPiY1CmNvbmZpZ3VyZTo0NTgzOiAkPyA9IDAKY29uZmlndXJlOjQ1ODM6IC4v Y29uZnRlc3QKY29uZmlndXJlOjQ1ODM6ICQ/ID0gMApjb25maWd1cmU6NDU5NDogcmVzdWx0OiB5 ZXMKY29uZmlndXJlOjQ2MDc6IGNoZWNraW5nIGZvciBzeXMvdHlwZXMuaApjb25maWd1cmU6NDYw NzogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKY29uZmlndXJlOjQ2MDc6ICQ/ID0gMApj b25maWd1cmU6NDYwNzogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjQ2MDc6IGNoZWNraW5nIGZvciBz eXMvc3RhdC5oCmNvbmZpZ3VyZTo0NjA3OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQpj b25maWd1cmU6NDYwNzogJD8gPSAwCmNvbmZpZ3VyZTo0NjA3OiByZXN1bHQ6IHllcwpjb25maWd1 cmU6NDYwNzogY2hlY2tpbmcgZm9yIHN0ZGxpYi5oCmNvbmZpZ3VyZTo0NjA3OiBnY2MgLWMgLWcg LU8yICBjb25mdGVzdC5jID4mNQpjb25maWd1cmU6NDYwNzogJD8gPSAwCmNvbmZpZ3VyZTo0NjA3 OiByZXN1bHQ6IHllcwpjb25maWd1cmU6NDYwNzogY2hlY2tpbmcgZm9yIHN0cmluZy5oCmNvbmZp Z3VyZTo0NjA3OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQpjb25maWd1cmU6NDYwNzog JD8gPSAwCmNvbmZpZ3VyZTo0NjA3OiByZXN1bHQ6IHllcwpjb25maWd1cmU6NDYwNzogY2hlY2tp bmcgZm9yIG1lbW9yeS5oCmNvbmZpZ3VyZTo0NjA3OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5j ID4mNQpjb25maWd1cmU6NDYwNzogJD8gPSAwCmNvbmZpZ3VyZTo0NjA3OiByZXN1bHQ6IHllcwpj b25maWd1cmU6NDYwNzogY2hlY2tpbmcgZm9yIHN0cmluZ3MuaApjb25maWd1cmU6NDYwNzogZ2Nj IC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+JjUKY29uZmlndXJlOjQ2MDc6ICQ/ID0gMApjb25maWd1 cmU6NDYwNzogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjQ2MDc6IGNoZWNraW5nIGZvciBpbnR0eXBl cy5oCmNvbmZpZ3VyZTo0NjA3OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQpjb25maWd1 cmU6NDYwNzogJD8gPSAwCmNvbmZpZ3VyZTo0NjA3OiByZXN1bHQ6IHllcwpjb25maWd1cmU6NDYw NzogY2hlY2tpbmcgZm9yIHN0ZGludC5oCmNvbmZpZ3VyZTo0NjA3OiBnY2MgLWMgLWcgLU8yICBj b25mdGVzdC5jID4mNQpjb25maWd1cmU6NDYwNzogJD8gPSAwCmNvbmZpZ3VyZTo0NjA3OiByZXN1 bHQ6IHllcwpjb25maWd1cmU6NDYwNzogY2hlY2tpbmcgZm9yIHVuaXN0ZC5oCmNvbmZpZ3VyZTo0 NjA3OiBnY2MgLWMgLWcgLU8yICBjb25mdGVzdC5jID4mNQpjb25maWd1cmU6NDYwNzogJD8gPSAw CmNvbmZpZ3VyZTo0NjA3OiByZXN1bHQ6IHllcwpjb25maWd1cmU6NDYyMDogY2hlY2tpbmcgbWlu aXgvY29uZmlnLmggdXNhYmlsaXR5CmNvbmZpZ3VyZTo0NjIwOiBnY2MgLWMgLWcgLU8yICBjb25m dGVzdC5jID4mNQpjb25mdGVzdC5jOjU0OjI2OiBmYXRhbCBlcnJvcjogbWluaXgvY29uZmlnLmg6 IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKICNpbmNsdWRlIDxtaW5peC9jb25maWcuaD4KICAg ICAgICAgICAgICAgICAgICAgICAgICBeCmNvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCmNvbmZpZ3Vy ZTo0NjIwOiAkPyA9IDEKY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CnwgLyogY29uZmRl ZnMuaCAqLwp8ICNkZWZpbmUgUEFDS0FHRV9OQU1FICJHTlUgR3VpeCIKfCAjZGVmaW5lIFBBQ0tB R0VfVEFSTkFNRSAiZ3VpeCIKfCAjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMC4xMC4wIgp8ICNk ZWZpbmUgUEFDS0FHRV9TVFJJTkcgIkdOVSBHdWl4IDAuMTAuMCIKfCAjZGVmaW5lIFBBQ0tBR0Vf QlVHUkVQT1JUICJidWctZ3VpeEBnbnUub3JnIgp8ICNkZWZpbmUgUEFDS0FHRV9VUkwgImh0dHA6 Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ndWl4LyIKfCAjZGVmaW5lIFBBQ0tBR0UgImd1aXgiCnwg I2RlZmluZSBWRVJTSU9OICIwLjEwLjAiCnwgI2RlZmluZSBTVERDX0hFQURFUlMgMQp8ICNkZWZp bmUgSEFWRV9TWVNfVFlQRVNfSCAxCnwgI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQp8ICNkZWZp bmUgSEFWRV9TVERMSUJfSCAxCnwgI2RlZmluZSBIQVZFX1NUUklOR19IIDEKfCAjZGVmaW5lIEhB VkVfTUVNT1JZX0ggMQp8ICNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQp8ICNkZWZpbmUgSEFWRV9J TlRUWVBFU19IIDEKfCAjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQp8ICNkZWZpbmUgSEFWRV9VTklT VERfSCAxCnwgLyogZW5kIGNvbmZkZWZzLmguICAqLwp8ICNpbmNsdWRlIDxzdGRpby5oPgp8ICNp ZmRlZiBIQVZFX1NZU19UWVBFU19ICnwgIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KfCAjZW5kaWYK fCAjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICnwgIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgp8ICNlbmRp Zgp8ICNpZmRlZiBTVERDX0hFQURFUlMKfCAjIGluY2x1ZGUgPHN0ZGxpYi5oPgp8ICMgaW5jbHVk ZSA8c3RkZGVmLmg+CnwgI2Vsc2UKfCAjIGlmZGVmIEhBVkVfU1RETElCX0gKfCAjICBpbmNsdWRl IDxzdGRsaWIuaD4KfCAjIGVuZGlmCnwgI2VuZGlmCnwgI2lmZGVmIEhBVkVfU1RSSU5HX0gKfCAj IGlmICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiBkZWZpbmVkIEhBVkVfTUVNT1JZX0gKfCAjICBp bmNsdWRlIDxtZW1vcnkuaD4KfCAjIGVuZGlmCnwgIyBpbmNsdWRlIDxzdHJpbmcuaD4KfCAjZW5k aWYKfCAjaWZkZWYgSEFWRV9TVFJJTkdTX0gKfCAjIGluY2x1ZGUgPHN0cmluZ3MuaD4KfCAjZW5k aWYKfCAjaWZkZWYgSEFWRV9JTlRUWVBFU19ICnwgIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgp8ICNl bmRpZgp8ICNpZmRlZiBIQVZFX1NURElOVF9ICnwgIyBpbmNsdWRlIDxzdGRpbnQuaD4KfCAjZW5k aWYKfCAjaWZkZWYgSEFWRV9VTklTVERfSAp8ICMgaW5jbHVkZSA8dW5pc3RkLmg+CnwgI2VuZGlm CnwgI2luY2x1ZGUgPG1pbml4L2NvbmZpZy5oPgpjb25maWd1cmU6NDYyMDogcmVzdWx0OiBubwpj b25maWd1cmU6NDYyMDogY2hlY2tpbmcgbWluaXgvY29uZmlnLmggcHJlc2VuY2UKY29uZmlndXJl OjQ2MjA6IGdjYyAtRSAgY29uZnRlc3QuYwpjb25mdGVzdC5jOjIxOjI2OiBmYXRhbCBlcnJvcjog bWluaXgvY29uZmlnLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKICNpbmNsdWRlIDxtaW5p eC9jb25maWcuaD4KICAgICAgICAgICAgICAgICAgICAgICAgICBeCmNvbXBpbGF0aW9uIHRlcm1p bmF0ZWQuCmNvbmZpZ3VyZTo0NjIwOiAkPyA9IDEKY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3 YXM6CnwgLyogY29uZmRlZnMuaCAqLwp8ICNkZWZpbmUgUEFDS0FHRV9OQU1FICJHTlUgR3VpeCIK fCAjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiZ3VpeCIKfCAjZGVmaW5lIFBBQ0tBR0VfVkVSU0lP TiAiMC4xMC4wIgp8ICNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIkdOVSBHdWl4IDAuMTAuMCIKfCAj ZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJidWctZ3VpeEBnbnUub3JnIgp8ICNkZWZpbmUgUEFD S0FHRV9VUkwgImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ndWl4LyIKfCAjZGVmaW5lIFBB Q0tBR0UgImd1aXgiCnwgI2RlZmluZSBWRVJTSU9OICIwLjEwLjAiCnwgI2RlZmluZSBTVERDX0hF QURFUlMgMQp8ICNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCnwgI2RlZmluZSBIQVZFX1NZU19T VEFUX0ggMQp8ICNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCnwgI2RlZmluZSBIQVZFX1NUUklOR19I IDEKfCAjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQp8ICNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQp8 ICNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKfCAjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQp8ICNk ZWZpbmUgSEFWRV9VTklTVERfSCAxCnwgLyogZW5kIGNvbmZkZWZzLmguICAqLwp8ICNpbmNsdWRl IDxtaW5peC9jb25maWcuaD4KY29uZmlndXJlOjQ2MjA6IHJlc3VsdDogbm8KY29uZmlndXJlOjQ2 MjA6IGNoZWNraW5nIGZvciBtaW5peC9jb25maWcuaApjb25maWd1cmU6NDYyMDogcmVzdWx0OiBu bwpjb25maWd1cmU6NDY0MTogY2hlY2tpbmcgd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBf X0VYVEVOU0lPTlNfXwpjb25maWd1cmU6NDY1OTogZ2NjIC1jIC1nIC1PMiAgY29uZnRlc3QuYyA+ JjUKY29uZmlndXJlOjQ2NTk6ICQ/ID0gMApjb25maWd1cmU6NDY2NjogcmVzdWx0OiB5ZXMKY29u ZmlndXJlOjQ2ODk6IGNoZWNraW5nIHdoZXRoZXIgTkxTIGlzIHJlcXVlc3RlZApjb25maWd1cmU6 NDY5ODogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjQ3Mzk6IGNoZWNraW5nIGZvciBtc2dmbXQKY29u ZmlndXJlOiB0cnlpbmcgL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJo Ny1wcm9maWxlL2Jpbi9tc2dmbXQuLi4KMCB0cmFuc2xhdGVkIG1lc3NhZ2VzLgpjb25maWd1cmU6 NDc3MTogcmVzdWx0OiAvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3 LXByb2ZpbGUvYmluL21zZ2ZtdApjb25maWd1cmU6NDc4MDogY2hlY2tpbmcgZm9yIGdtc2dmbXQK Y29uZmlndXJlOjQ4MTE6IHJlc3VsdDogL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejds ZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi9tc2dmbXQKY29uZmlndXJlOjQ4NjI6IGNoZWNraW5nIGZv ciB4Z2V0dGV4dApjb25maWd1cmU6IHRyeWluZyAvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2Jx Mnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL3hnZXR0ZXh0Li4uCi9nbnUvc3RvcmUvMzJuY3dr aGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4veGdldHRleHQ6IHdhcm5pbmc6 IGZpbGUgJy9kZXYvbnVsbCcgZXh0ZW5zaW9uICcnIGlzIHVua25vd247IHdpbGwgdHJ5IEMKY29u ZmlndXJlOjQ4OTQ6IHJlc3VsdDogL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNy Mzl4MHJoNy1wcm9maWxlL2Jpbi94Z2V0dGV4dApjb25maWd1cmU6NDk0MDogY2hlY2tpbmcgZm9y IG1zZ21lcmdlCmNvbmZpZ3VyZTogdHJ5aW5nIC9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEy eHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vbXNnbWVyZ2UuLi4KY29uZmlndXJlOjQ5NzE6IHJl c3VsdDogL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxl L2Jpbi9tc2dtZXJnZQpjb25maWd1cmU6NTAwODogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUK Y29uZmlndXJlOjUwMjI6IHJlc3VsdDogeDg2XzY0LXVua25vd24tbGludXgtZ251CmNvbmZpZ3Vy ZTo1MDQyOiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlCmNvbmZpZ3VyZTo1MDU1OiByZXN1bHQ6 IHg4Nl82NC11bmtub3duLWxpbnV4LWdudQpjb25maWd1cmU6NTA5OTogY2hlY2tpbmcgZm9yIGxk IHVzZWQgYnkgR0NDCmNvbmZpZ3VyZTo1MTYzOiByZXN1bHQ6IC9nbnUvc3RvcmUvMzJuY3draGpt enlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vbGQKY29uZmlndXJlOjUxNzA6IGNo ZWNraW5nIGlmIHRoZSBsaW5rZXIgKC9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYz cjM5eDByaDctcHJvZmlsZS9iaW4vbGQpIGlzIEdOVSBsZApjb25maWd1cmU6NTE4MzogcmVzdWx0 OiB5ZXMKY29uZmlndXJlOjUxOTA6IGNoZWNraW5nIGZvciBzaGFyZWQgbGlicmFyeSBydW4gcGF0 aCBvcmlnaW4KY29uZmlndXJlOjUyMDM6IHJlc3VsdDogZG9uZQpjb25maWd1cmU6NTc3NTogY2hl Y2tpbmcgZm9yIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUKY29uZmlndXJlOjU3OTM6IGdjYyAt byBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jICAtV2wsLWZyYW1ld29yayAtV2wsQ29yZUZv dW5kYXRpb24gPiY1CmNvbmZ0ZXN0LmM6MjY6NDI6IGZhdGFsIGVycm9yOiBDb3JlRm91bmRhdGlv bi9DRlByZWZlcmVuY2VzLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKICNpbmNsdWRlIDxD b3JlRm91bmRhdGlvbi9DRlByZWZlcmVuY2VzLmg+CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF4KY29tcGlsYXRpb24gdGVybWluYXRlZC4KY29uZmlndXJlOjU3OTM6 ICQ/ID0gMQpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKfCAvKiBjb25mZGVmcy5oICov CnwgI2RlZmluZSBQQUNLQUdFX05BTUUgIkdOVSBHdWl4Igp8ICNkZWZpbmUgUEFDS0FHRV9UQVJO QU1FICJndWl4Igp8ICNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIwLjEwLjAiCnwgI2RlZmluZSBQ QUNLQUdFX1NUUklORyAiR05VIEd1aXggMC4xMC4wIgp8ICNkZWZpbmUgUEFDS0FHRV9CVUdSRVBP UlQgImJ1Zy1ndWl4QGdudS5vcmciCnwgI2RlZmluZSBQQUNLQUdFX1VSTCAiaHR0cDovL3d3dy5n bnUub3JnL3NvZnR3YXJlL2d1aXgvIgp8ICNkZWZpbmUgUEFDS0FHRSAiZ3VpeCIKfCAjZGVmaW5l IFZFUlNJT04gIjAuMTAuMCIKfCAjZGVmaW5lIFNURENfSEVBREVSUyAxCnwgI2RlZmluZSBIQVZF X1NZU19UWVBFU19IIDEKfCAjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCnwgI2RlZmluZSBIQVZF X1NURExJQl9IIDEKfCAjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQp8ICNkZWZpbmUgSEFWRV9NRU1P UllfSCAxCnwgI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCnwgI2RlZmluZSBIQVZFX0lOVFRZUEVT X0ggMQp8ICNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCnwgI2RlZmluZSBIQVZFX1VOSVNURF9IIDEK fCAjZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKfCAjZGVmaW5lIF9BTExfU09VUkNFIDEKfCAjZGVm aW5lIF9HTlVfU09VUkNFIDEKfCAjZGVmaW5lIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyAxCnwg I2RlZmluZSBfVEFOREVNX1NPVVJDRSAxCnwgLyogZW5kIGNvbmZkZWZzLmguICAqLwp8ICNpbmNs dWRlIDxDb3JlRm91bmRhdGlvbi9DRlByZWZlcmVuY2VzLmg+CnwgaW50CnwgbWFpbiAoKQp8IHsK fCBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKE5VTEwsIE5VTEwpCnwgICA7CnwgICByZXR1cm4g MDsKfCB9CmNvbmZpZ3VyZTo1ODAyOiByZXN1bHQ6IG5vCmNvbmZpZ3VyZTo1ODA5OiBjaGVja2lu ZyBmb3IgQ0ZMb2NhbGVDb3B5Q3VycmVudApjb25maWd1cmU6NTgyNzogZ2NjIC1vIGNvbmZ0ZXN0 IC1nIC1PMiAgIGNvbmZ0ZXN0LmMgIC1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiA+ JjUKY29uZnRlc3QuYzoyNjozNzogZmF0YWwgZXJyb3I6IENvcmVGb3VuZGF0aW9uL0NGTG9jYWxl Lmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9D RkxvY2FsZS5oPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgpjb21waWxh dGlvbiB0ZXJtaW5hdGVkLgpjb25maWd1cmU6NTgyNzogJD8gPSAxCmNvbmZpZ3VyZTogZmFpbGVk IHByb2dyYW0gd2FzOgp8IC8qIGNvbmZkZWZzLmggKi8KfCAjZGVmaW5lIFBBQ0tBR0VfTkFNRSAi R05VIEd1aXgiCnwgI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImd1aXgiCnwgI2RlZmluZSBQQUNL QUdFX1ZFUlNJT04gIjAuMTAuMCIKfCAjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJHTlUgR3VpeCAw LjEwLjAiCnwgI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiYnVnLWd1aXhAZ251Lm9yZyIKfCAj ZGVmaW5lIFBBQ0tBR0VfVVJMICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3VpeC8iCnwg I2RlZmluZSBQQUNLQUdFICJndWl4Igp8ICNkZWZpbmUgVkVSU0lPTiAiMC4xMC4wIgp8ICNkZWZp bmUgU1REQ19IRUFERVJTIDEKfCAjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQp8ICNkZWZpbmUg SEFWRV9TWVNfU1RBVF9IIDEKfCAjZGVmaW5lIEhBVkVfU1RETElCX0ggMQp8ICNkZWZpbmUgSEFW RV9TVFJJTkdfSCAxCnwgI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKfCAjZGVmaW5lIEhBVkVfU1RS SU5HU19IIDEKfCAjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCnwgI2RlZmluZSBIQVZFX1NURElO VF9IIDEKfCAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQp8ICNkZWZpbmUgX19FWFRFTlNJT05TX18g MQp8ICNkZWZpbmUgX0FMTF9TT1VSQ0UgMQp8ICNkZWZpbmUgX0dOVV9TT1VSQ0UgMQp8ICNkZWZp bmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEKfCAjZGVmaW5lIF9UQU5ERU1fU09VUkNFIDEK fCAvKiBlbmQgY29uZmRlZnMuaC4gICovCnwgI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGTG9j YWxlLmg+CnwgaW50CnwgbWFpbiAoKQp8IHsKfCBDRkxvY2FsZUNvcHlDdXJyZW50KCk7CnwgICA7 CnwgICByZXR1cm4gMDsKfCB9CmNvbmZpZ3VyZTo1ODM2OiByZXN1bHQ6IG5vCmNvbmZpZ3VyZTo1 ODg1OiBjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliYwpjb25maWd1cmU6NTkwNTogZ2Nj IC1vIGNvbmZ0ZXN0IC1nIC1PMiAgIGNvbmZ0ZXN0LmMgID4mNQpjb25maWd1cmU6NTkwNTogJD8g PSAwCmNvbmZpZ3VyZTo1OTE0OiByZXN1bHQ6IHllcwpjb25maWd1cmU6NjcwNTogY2hlY2tpbmcg d2hldGhlciB0byB1c2UgTkxTCmNvbmZpZ3VyZTo2NzA3OiByZXN1bHQ6IHllcwpjb25maWd1cmU6 NjcxMDogY2hlY2tpbmcgd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbQpjb25m aWd1cmU6NjcyMTogcmVzdWx0OiBsaWJjCmNvbmZpZ3VyZTo2Nzg3OiBjaGVja2luZyBmb3Igc2Vk CmNvbmZpZ3VyZTo2ODA1OiBmb3VuZCAvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xm M3IzOXgwcmg3LXByb2ZpbGUvYmluL3NlZApjb25maWd1cmU6NjgxNzogcmVzdWx0OiAvZ251L3N0 b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL3NlZApjb25m aWd1cmU6Njg2NzogY2hlY2tpbmcgZm9yIHRoZSBHdWl4IHN5c3RlbSB0eXBlCmNvbmZpZ3VyZTo2 ODY5OiByZXN1bHQ6IHg4Nl82NC1saW51eApjb25maWd1cmU6NjkyMzogY2hlY2tpbmcgZm9yIHRo ZSBzdG9yZSBkaXJlY3RvcnkKY29uZmlndXJlOjY5MjU6IHJlc3VsdDogL2dudS9zdG9yZQpjb25m aWd1cmU6Njk0NzogY2hlY2tpbmcgdGhlIGxlbmd0aCBvZiB0aGUgaW5zdGFsbGVkIHNvY2tldCBm aWxlIG5hbWUKY29uZmlndXJlOjY5NTQ6IHJlc3VsdDogNDAKY29uZmlndXJlOjY5NTg6IGNoZWNr aW5nIGZvciB1bml0IHRlc3Qgcm9vdCBkaXJlY3RvcnkKY29uZmlndXJlOjY5NjU6IHJlc3VsdDog L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcApjb25maWd1cmU6Njk3 MDogY2hlY2tpbmcgdGhlIGxlbmd0aCBvZiB0aGUgc29ja2V0IGZpbGUgbmFtZSB1c2VkIGluIHRl c3RzCmNvbmZpZ3VyZTo2OTc3OiByZXN1bHQ6IDc1CmNvbmZpZ3VyZTo2OTgxOiBjaGVja2luZyB0 aGUgbGVuZ3RoIG9mIGEgdHlwaWNhbCBoYXNoIGJhbmcgbGluZQpjb25maWd1cmU6Njk4ODogcmVz dWx0OiA3Mwpjb25maWd1cmU6Njk5MzogY2hlY2tpbmcgdGhlIGxlbmd0aCBvZiBhIGhhc2ggYmFu ZyBsaW5lIHVzZWQgaW4gdGVzdHMKY29uZmlndXJlOjcwMDA6IHJlc3VsdDogMTEyCmNvbmZpZ3Vy ZTo3MDk0OiBjaGVja2luZyBmb3IgcGtnLWNvbmZpZwpjb25maWd1cmU6NzExMjogZm91bmQgL2du dS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi9wa2ct Y29uZmlnCmNvbmZpZ3VyZTo3MTI0OiByZXN1bHQ6IC9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3 YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vcGtnLWNvbmZpZwpjb25maWd1cmU6NzE0OTog Y2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uIDAuOS4wCmNvbmZpZ3VyZTo3 MTUyOiByZXN1bHQ6IHllcwpjb25maWd1cmU6NzE2MjogY2hlY2tpbmcgZm9yIEdVSUxFCmNvbmZp Z3VyZTo3MTY5OiAkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiZ3VpbGUtMi4w ID49IDIuMC43Igpjb25maWd1cmU6NzE3MjogJD8gPSAwCmNvbmZpZ3VyZTo3MTg2OiAkUEtHX0NP TkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiZ3VpbGUtMi4wID49IDIuMC43Igpjb25maWd1 cmU6NzE4OTogJD8gPSAwCmNvbmZpZ3VyZTo3MjQ3OiByZXN1bHQ6IHllcwpjb25maWd1cmU6NzI1 MzogY2hlY2tpbmcgZm9yIGd1aWxlCmNvbmZpZ3VyZTo3MjcxOiBmb3VuZCAvZ251L3N0b3JlLzMy bmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL2d1aWxlCmNvbmZpZ3Vy ZTo3MjgzOiByZXN1bHQ6IC9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDBy aDctcHJvZmlsZS9iaW4vZ3VpbGUKY29uZmlndXJlOjcyOTM6IGNoZWNraW5nIGZvciBndWlsZApj b25maWd1cmU6NzMxMTogZm91bmQgL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNy Mzl4MHJoNy1wcm9maWxlL2Jpbi9ndWlsZApjb25maWd1cmU6NzMyMzogcmVzdWx0OiAvZ251L3N0 b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL2d1aWxkCmNv bmZpZ3VyZTo3MzM3OiBjaGVja2luZyBmb3IgZ3VpbGUKY29uZmlndXJlOjczNjc6IHJlc3VsdDog L2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi9n dWlsZQpjb25maWd1cmU6NzM5NjogY2hlY2tpbmcgZm9yIEd1aWxlIHZlcnNpb24gPj0gMi4wCmNv bmZpZ3VyZTo3NDE3OiByZXN1bHQ6IDIuMC4xMQpjb25maWd1cmU6NzQyMjogY2hlY2tpbmcgZm9y IGd1aWxkCmNvbmZpZ3VyZTo3NDUyOiByZXN1bHQ6IC9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3 YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vZ3VpbGQKY29uZmlndXJlOjc0NjQ6IGNoZWNr aW5nIGZvciBndWlsZS1jb25maWcKY29uZmlndXJlOjc0ODI6IGZvdW5kIC9nbnUvc3RvcmUvMzJu Y3draGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vZ3VpbGUtY29uZmlnCmNv bmZpZ3VyZTo3NDk0OiByZXN1bHQ6IC9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYz cjM5eDByaDctcHJvZmlsZS9iaW4vZ3VpbGUtY29uZmlnCmNvbmZpZ3VyZTo3NTQ5OiBjaGVja2lu ZyBpZiAoanNvbikgaXMgYXZhaWxhYmxlCmNvbmZpZ3VyZTo3NTU2OiByZXN1bHQ6IHllcwpjb25m aWd1cmU6NzU3MjogY2hlY2tpbmcgd2hldGhlciAvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2Jx Mnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL2d1aWxlIHByb3ZpZGVzIGZlYXR1cmUgJ3JlZ2V4 Jwpjb25maWd1cmU6NzU3NjogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjc1NzI6IGNoZWNraW5nIHdo ZXRoZXIgL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxl L2Jpbi9ndWlsZSBwcm92aWRlcyBmZWF0dXJlICdwb3NpeCcKY29uZmlndXJlOjc1NzY6IHJlc3Vs dDogeWVzCmNvbmZpZ3VyZTo3NTcyOiBjaGVja2luZyB3aGV0aGVyIC9nbnUvc3RvcmUvMzJuY3dr aGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vZ3VpbGUgcHJvdmlkZXMgZmVh dHVyZSAnc29ja2V0Jwpjb25maWd1cmU6NzU3NjogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjc1NzI6 IGNoZWNraW5nIHdoZXRoZXIgL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4 MHJoNy1wcm9maWxlL2Jpbi9ndWlsZSBwcm92aWRlcyBmZWF0dXJlICduZXQtZGInCmNvbmZpZ3Vy ZTo3NTc2OiByZXN1bHQ6IHllcwpjb25maWd1cmU6NzU3MjogY2hlY2tpbmcgd2hldGhlciAvZ251 L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL2d1aWxl IHByb3ZpZGVzIGZlYXR1cmUgJ3RocmVhZHMnCmNvbmZpZ3VyZTo3NTc2OiByZXN1bHQ6IHllcwpj b25maWd1cmU6NzU4NzogY2hlY2tpbmcgd2hldGhlciAoc3JmaSBzcmZpLTM3KSBpcyBhZmZlY3Rl ZCBieSBodHRwOi8vYnVncy5nbnUub3JnLzEzMTc2CmNvbmZpZ3VyZTo3NjAzOiByZXN1bHQ6IG5v CmNvbmZpZ3VyZTo3NjE2OiBjaGVja2luZyB3aGV0aGVyIGxpYmMgcHJvdmlkZXMgJ21vdW50Jwpj b25maWd1cmU6NzYzMTogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjc2NDU6IGNoZWNraW5nIGZvciBn emlwCmNvbmZpZ3VyZTo3NjYzOiBmb3VuZCAvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6 N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL2d6aXAKY29uZmlndXJlOjc2NzU6IHJlc3VsdDogL2du dS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi9nemlw CmNvbmZpZ3VyZTo3Njg1OiBjaGVja2luZyBmb3IgYnppcDIKY29uZmlndXJlOjc3MDM6IGZvdW5k IC9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4v YnppcDIKY29uZmlndXJlOjc3MTU6IHJlc3VsdDogL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdi cTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi9iemlwMgpjb25maWd1cmU6NzcyNTogY2hlY2tp bmcgZm9yIHh6CmNvbmZpZ3VyZTo3NzQzOiBmb3VuZCAvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdq N2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL3h6CmNvbmZpZ3VyZTo3NzU1OiByZXN1bHQ6 IC9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4v eHoKY29uZmlndXJlOjc3ODM6IGNoZWNraW5nIGZvciBuaXgtaW5zdGFudGlhdGUKY29uZmlndXJl Ojc4MTY6IHJlc3VsdDogbm8KY29uZmlndXJlOjc4MjM6IGNoZWNraW5nIGZvciBuaXgtaGFzaApj b25maWd1cmU6Nzg1NjogcmVzdWx0OiBubwpjb25maWd1cmU6Nzg4MTogY2hlY2tpbmcgZm9yIE5p eHBrZ3Mgc291cmNlIHRyZWUKY29uZmlndXJlOjc4ODg6IHJlc3VsdDogbm90IGZvdW5kCmNvbmZp Z3VyZTo3OTMyOiBjaGVja2luZyBmb3IgbGliZ2NyeXB0LWNvbmZpZwpjb25maWd1cmU6Nzk1MDog Zm91bmQgL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxl L2Jpbi9saWJnY3J5cHQtY29uZmlnCmNvbmZpZ3VyZTo3OTYyOiByZXN1bHQ6IC9nbnUvc3RvcmUv MzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vbGliZ2NyeXB0LWNv bmZpZwpjb25maWd1cmU6Nzk3MDogY2hlY2tpbmcgbGliZ2NyeXB0J3MgbGlicmFyeSBkaXJlY3Rv cnkKY29uZmlndXJlOjc5ODE6IHJlc3VsdDogL2dudS9zdG9yZS83d2ZicHJwMWI5YjI1Y3JsaWRn Nmg3YjZocGliMmI5OS1saWJnY3J5cHQtMS42LjUvbGliCmNvbmZpZ3VyZTo3OTkzOiBjaGVja2lu ZyBmb3IgbGliZ2NyeXB0IHNoYXJlZCBsaWJyYXJ5IG5hbWUKY29uZmlndXJlOjc5OTU6IHJlc3Vs dDogL2dudS9zdG9yZS83d2ZicHJwMWI5YjI1Y3JsaWRnNmg3YjZocGliMmI5OS1saWJnY3J5cHQt MS42LjUvbGliL2xpYmdjcnlwdApjb25maWd1cmU6ODAwMTogY2hlY2tpbmcgd2hldGhlciAvZ251 L3N0b3JlLzd3ZmJwcnAxYjliMjVjcmxpZGc2aDdiNmhwaWIyYjk5LWxpYmdjcnlwdC0xLjYuNS9s aWIvbGliZ2NyeXB0IGNhbiBiZSBkeW5hbWljYWxseSBsb2FkZWQKY29uZmlndXJlOjgwMTY6IHJl c3VsdDogeWVzCmNvbmZpZ3VyZTo4MDI1OiBjaGVja2luZyB6bGliJ3MgbGlicmFyeSBkaXJlY3Rv cnkKY29uZmlndXJlOjgwMzI6IHJlc3VsdDogL2dudS9zdG9yZS9oc3hoZm1qZ2g4bTRjMHBhdnEz Z2QzZ2Nybjh6cmd4ai16bGliLTEuMi44L2xpYgpjb25maWd1cmU6ODA0MTogY2hlY2tpbmcgZm9y IHpsaWIncyBzaGFyZWQgbGlicmFyeSBuYW1lCmNvbmZpZ3VyZTo4MDQzOiByZXN1bHQ6IC9nbnUv c3RvcmUvaHN4aGZtamdoOG00YzBwYXZxM2dkM2djcm44enJneGotemxpYi0xLjIuOC9saWIvbGli egpjb25maWd1cmU6ODEzNDogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBkYWVtb24KY29uZmln dXJlOjgxMzY6IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo4MTk3OiBjaGVja2luZyBmb3IgZysrCmNv bmZpZ3VyZTo4MjEzOiBmb3VuZCAvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3Iz OXgwcmg3LXByb2ZpbGUvYmluL2crKwpjb25maWd1cmU6ODIyNDogcmVzdWx0OiBnKysKY29uZmln dXJlOjgyNTE6IGNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbgpjb25maWd1cmU6ODI2 MDogZysrIC0tdmVyc2lvbiA+JjUKZysrIChHQ0MpIDQuOS4zCkNvcHlyaWdodCAoQykgMjAxNSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUg dGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8Kd2FycmFudHk7 IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuCgpjb25maWd1cmU6ODI3MTogJD8gPSAwCmNvbmZpZ3VyZTo4MjYwOiBnKysgLXYg PiY1ClVzaW5nIGJ1aWx0LWluIHNwZWNzLgpDT0xMRUNUX0dDQz1nKysKQ09MTEVDVF9MVE9fV1JB UFBFUj0vZ251L3N0b3JlL3NqdmNpcnJpMmJnN3E1aGxya2F5d2hteGxsaWswY2Z4LWdjYy00Ljku My9saWJleGVjL2djYy94ODZfNjQtdW5rbm93bi1saW51eC1nbnUvNC45LjMvbHRvLXdyYXBwZXIK VGFyZ2V0OiB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKQ29uZmlndXJlZCB3aXRoOiAKVGhyZWFk IG1vZGVsOiBwb3NpeApnY2MgdmVyc2lvbiA0LjkuMyAoR0NDKSAKY29uZmlndXJlOjgyNzE6ICQ/ ID0gMApjb25maWd1cmU6ODI2MDogZysrIC1WID4mNQpnKys6IGVycm9yOiB1bnJlY29nbml6ZWQg Y29tbWFuZCBsaW5lIG9wdGlvbiAnLVYnCmcrKzogZmF0YWwgZXJyb3I6IG5vIGlucHV0IGZpbGVz CmNvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCmNvbmZpZ3VyZTo4MjcxOiAkPyA9IDEKY29uZmlndXJl OjgyNjA6IGcrKyAtcXZlcnNpb24gPiY1CmcrKzogZXJyb3I6IHVucmVjb2duaXplZCBjb21tYW5k IGxpbmUgb3B0aW9uICctcXZlcnNpb24nCmcrKzogZmF0YWwgZXJyb3I6IG5vIGlucHV0IGZpbGVz CmNvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCmNvbmZpZ3VyZTo4MjcxOiAkPyA9IDEKY29uZmlndXJl OjgyNzU6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVy CmNvbmZpZ3VyZTo4Mjk0OiBnKysgLWMgICBjb25mdGVzdC5jcHAgPiY1CmNvbmZpZ3VyZTo4Mjk0 OiAkPyA9IDAKY29uZmlndXJlOjgzMDM6IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo4MzEyOiBjaGVj a2luZyB3aGV0aGVyIGcrKyBhY2NlcHRzIC1nCmNvbmZpZ3VyZTo4MzMyOiBnKysgLWMgLWcgIGNv bmZ0ZXN0LmNwcCA+JjUKY29uZmlndXJlOjgzMzI6ICQ/ID0gMApjb25maWd1cmU6ODM3MzogcmVz dWx0OiB5ZXMKY29uZmlndXJlOjgzOTg6IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgZysr CmNvbmZpZ3VyZTo4NTA5OiByZXN1bHQ6IGdjYzMKY29uZmlndXJlOjg1Mzc6IGNoZWNraW5nIHdo ZXRoZXIgZysrIHN1cHBvcnRzIEMrKzExCmNvbmZpZ3VyZTo4NTYxOiBnKysgLWMgLXN0ZD1jKysx MSAtZyAtTzIgIGNvbmZ0ZXN0LmNwcCA+JjUKY29uZmlndXJlOjg1NjE6ICQ/ID0gMApjb25maWd1 cmU6ODU3MDogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjg2MjE6IGNoZWNraW5nIGZvciByYW5saWIK Y29uZmlndXJlOjg2Mzc6IGZvdW5kIC9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYz cjM5eDByaDctcHJvZmlsZS9iaW4vcmFubGliCmNvbmZpZ3VyZTo4NjQ4OiByZXN1bHQ6IHJhbmxp Ygpjb25maWd1cmU6ODY4MDogY2hlY2tpbmcgZm9yIHNwZWNpYWwgQyBjb21waWxlciBvcHRpb25z IG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMKY29uZmlndXJlOjg3MjU6IHJlc3VsdDogbm8KY29uZmln dXJlOjg3MzE6IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9y IGxhcmdlIGZpbGVzCmNvbmZpZ3VyZTo4NzU2OiBnKysgLWMgLWcgLU8yICBjb25mdGVzdC5jcHAg PiY1CmNvbmZpZ3VyZTo4NzU2OiAkPyA9IDAKY29uZmlndXJlOjg3ODg6IHJlc3VsdDogbm8KY29u ZmlndXJlOjg4NzQ6IGNoZWNraW5nIGZvciBCWjJfYnpXcml0ZU9wZW4gaW4gLWxiejIKY29uZmln dXJlOjg4OTk6IGcrKyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jcHAgLWxiejIgICA+ JjUKY29uZmlndXJlOjg4OTk6ICQ/ID0gMApjb25maWd1cmU6ODkwODogcmVzdWx0OiB5ZXMKY29u ZmlndXJlOjg5MjE6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IKY29u ZmlndXJlOjg5NDg6IGcrKyAtRSAgY29uZnRlc3QuY3BwCmNvbmZpZ3VyZTo4OTQ4OiAkPyA9IDAK Y29uZmlndXJlOjg5NjI6IGcrKyAtRSAgY29uZnRlc3QuY3BwCmNvbmZ0ZXN0LmNwcDoyOToyODog ZmF0YWwgZXJyb3I6IGFjX25vbmV4aXN0ZW50Lmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkK ICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg Xgpjb21waWxhdGlvbiB0ZXJtaW5hdGVkLgpjb25maWd1cmU6ODk2MjogJD8gPSAxCmNvbmZpZ3Vy ZTogZmFpbGVkIHByb2dyYW0gd2FzOgp8IC8qIGNvbmZkZWZzLmggKi8KfCAjZGVmaW5lIFBBQ0tB R0VfTkFNRSAiR05VIEd1aXgiCnwgI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImd1aXgiCnwgI2Rl ZmluZSBQQUNLQUdFX1ZFUlNJT04gIjAuMTAuMCIKfCAjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJH TlUgR3VpeCAwLjEwLjAiCnwgI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiYnVnLWd1aXhAZ251 Lm9yZyIKfCAjZGVmaW5lIFBBQ0tBR0VfVVJMICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUv Z3VpeC8iCnwgI2RlZmluZSBQQUNLQUdFICJndWl4Igp8ICNkZWZpbmUgVkVSU0lPTiAiMC4xMC4w Igp8ICNkZWZpbmUgU1REQ19IRUFERVJTIDEKfCAjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQp8 ICNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEKfCAjZGVmaW5lIEhBVkVfU1RETElCX0ggMQp8ICNk ZWZpbmUgSEFWRV9TVFJJTkdfSCAxCnwgI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKfCAjZGVmaW5l IEhBVkVfU1RSSU5HU19IIDEKfCAjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCnwgI2RlZmluZSBI QVZFX1NURElOVF9IIDEKfCAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQp8ICNkZWZpbmUgX19FWFRF TlNJT05TX18gMQp8ICNkZWZpbmUgX0FMTF9TT1VSQ0UgMQp8ICNkZWZpbmUgX0dOVV9TT1VSQ0Ug MQp8ICNkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEKfCAjZGVmaW5lIF9UQU5ERU1f U09VUkNFIDEKfCAjZGVmaW5lIEVOQUJMRV9OTFMgMQp8ICNkZWZpbmUgSEFWRV9HRVRURVhUIDEK fCAjZGVmaW5lIEhBVkVfRENHRVRURVhUIDEKfCAvKiBlbmQgY29uZmRlZnMuaC4gICovCnwgI2lu Y2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CmNvbmZpZ3VyZTo4OTg3OiByZXN1bHQ6IGcrKyAtRQpj b25maWd1cmU6OTAwNzogZysrIC1FICBjb25mdGVzdC5jcHAKY29uZmlndXJlOjkwMDc6ICQ/ID0g MApjb25maWd1cmU6OTAyMTogZysrIC1FICBjb25mdGVzdC5jcHAKY29uZnRlc3QuY3BwOjI5OjI4 OiBmYXRhbCBlcnJvcjogYWNfbm9uZXhpc3RlbnQuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9y eQogI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBeCmNvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCmNvbmZpZ3VyZTo5MDIxOiAkPyA9IDEKY29uZmln dXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CnwgLyogY29uZmRlZnMuaCAqLwp8ICNkZWZpbmUgUEFD S0FHRV9OQU1FICJHTlUgR3VpeCIKfCAjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiZ3VpeCIKfCAj ZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMC4xMC4wIgp8ICNkZWZpbmUgUEFDS0FHRV9TVFJJTkcg IkdOVSBHdWl4IDAuMTAuMCIKfCAjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJidWctZ3VpeEBn bnUub3JnIgp8ICNkZWZpbmUgUEFDS0FHRV9VUkwgImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2Fy ZS9ndWl4LyIKfCAjZGVmaW5lIFBBQ0tBR0UgImd1aXgiCnwgI2RlZmluZSBWRVJTSU9OICIwLjEw LjAiCnwgI2RlZmluZSBTVERDX0hFQURFUlMgMQp8ICNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAx CnwgI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQp8ICNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCnwg I2RlZmluZSBIQVZFX1NUUklOR19IIDEKfCAjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQp8ICNkZWZp bmUgSEFWRV9TVFJJTkdTX0ggMQp8ICNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKfCAjZGVmaW5l IEhBVkVfU1RESU5UX0ggMQp8ICNkZWZpbmUgSEFWRV9VTklTVERfSCAxCnwgI2RlZmluZSBfX0VY VEVOU0lPTlNfXyAxCnwgI2RlZmluZSBfQUxMX1NPVVJDRSAxCnwgI2RlZmluZSBfR05VX1NPVVJD RSAxCnwgI2RlZmluZSBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MgMQp8ICNkZWZpbmUgX1RBTkRF TV9TT1VSQ0UgMQp8ICNkZWZpbmUgRU5BQkxFX05MUyAxCnwgI2RlZmluZSBIQVZFX0dFVFRFWFQg MQp8ICNkZWZpbmUgSEFWRV9EQ0dFVFRFWFQgMQp8IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KfCAj aW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KY29uZmlndXJlOjkwNTI6IGNoZWNraW5nIGJ6bGli LmggdXNhYmlsaXR5CmNvbmZpZ3VyZTo5MDUyOiBnKysgLWMgLWcgLU8yICBjb25mdGVzdC5jcHAg PiY1CmNvbmZpZ3VyZTo5MDUyOiAkPyA9IDAKY29uZmlndXJlOjkwNTI6IHJlc3VsdDogeWVzCmNv bmZpZ3VyZTo5MDUyOiBjaGVja2luZyBiemxpYi5oIHByZXNlbmNlCmNvbmZpZ3VyZTo5MDUyOiBn KysgLUUgIGNvbmZ0ZXN0LmNwcApjb25maWd1cmU6OTA1MjogJD8gPSAwCmNvbmZpZ3VyZTo5MDUy OiByZXN1bHQ6IHllcwpjb25maWd1cmU6OTA1MjogY2hlY2tpbmcgZm9yIGJ6bGliLmgKY29uZmln dXJlOjkwNTI6IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo5MDY3OiBjaGVja2luZyBmb3IgU1FMSVRF Mwpjb25maWd1cmU6OTA3NDogJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgInNx bGl0ZTMgPj0gMy42LjE5Igpjb25maWd1cmU6OTA3NzogJD8gPSAwCmNvbmZpZ3VyZTo5MDkxOiAk UEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAic3FsaXRlMyA+PSAzLjYuMTkiCmNv bmZpZ3VyZTo5MDk0OiAkPyA9IDAKY29uZmlndXJlOjkxNTI6IHJlc3VsdDogeWVzCmNvbmZpZ3Vy ZTo5MTkzOiBjaGVja2luZyBmb3IgZ2NyeV9tZF9vcGVuIGluIC1sZ2NyeXB0CmNvbmZpZ3VyZTo5 MjE4OiBnKysgLW8gY29uZnRlc3QgLWcgLU8yICAgIGNvbmZ0ZXN0LmNwcCAtbGdjcnlwdCAgID4m NQpjb25maWd1cmU6OTIxODogJD8gPSAwCmNvbmZpZ3VyZTo5MjI3OiByZXN1bHQ6IHllcwpjb25m aWd1cmU6OTIzNTogY2hlY2tpbmcgZ2NyeXB0LmggdXNhYmlsaXR5CmNvbmZpZ3VyZTo5MjM1OiBn KysgLWMgLWcgLU8yICBjb25mdGVzdC5jcHAgPiY1CmNvbmZpZ3VyZTo5MjM1OiAkPyA9IDAKY29u ZmlndXJlOjkyMzU6IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo5MjM1OiBjaGVja2luZyBnY3J5cHQu aCBwcmVzZW5jZQpjb25maWd1cmU6OTIzNTogZysrIC1FICBjb25mdGVzdC5jcHAKY29uZmlndXJl OjkyMzU6ICQ/ID0gMApjb25maWd1cmU6OTIzNTogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjkyMzU6 IGNoZWNraW5nIGZvciBnY3J5cHQuaApjb25maWd1cmU6OTIzNTogcmVzdWx0OiB5ZXMKY29uZmln dXJlOjkyNTM6IGNoZWNraW5nIGZvciBjaHJvb3QKY29uZmlndXJlOjkyNTM6IGcrKyAtbyBjb25m dGVzdCAtZyAtTzIgICBjb25mdGVzdC5jcHAgID4mNQpjb25maWd1cmU6OTI1MzogJD8gPSAwCmNv bmZpZ3VyZTo5MjUzOiByZXN1bHQ6IHllcwpjb25maWd1cmU6OTI1MzogY2hlY2tpbmcgZm9yIHVu c2hhcmUKY29uZmlndXJlOjkyNTM6IGcrKyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5j cHAgID4mNQpjb25maWd1cmU6OTI1MzogJD8gPSAwCmNvbmZpZ3VyZTo5MjUzOiByZXN1bHQ6IHll cwpjb25maWd1cmU6OTI2NTogY2hlY2tpbmcgc2NoZWQuaCB1c2FiaWxpdHkKY29uZmlndXJlOjky NjU6IGcrKyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmNwcCA+JjUKY29uZmlndXJlOjkyNjU6ICQ/ID0g MApjb25maWd1cmU6OTI2NTogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjkyNjU6IGNoZWNraW5nIHNj aGVkLmggcHJlc2VuY2UKY29uZmlndXJlOjkyNjU6IGcrKyAtRSAgY29uZnRlc3QuY3BwCmNvbmZp Z3VyZTo5MjY1OiAkPyA9IDAKY29uZmlndXJlOjkyNjU6IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo5 MjY1OiBjaGVja2luZyBmb3Igc2NoZWQuaApjb25maWd1cmU6OTI2NTogcmVzdWx0OiB5ZXMKY29u ZmlndXJlOjkyNjU6IGNoZWNraW5nIHN5cy9wYXJhbS5oIHVzYWJpbGl0eQpjb25maWd1cmU6OTI2 NTogZysrIC1jIC1nIC1PMiAgY29uZnRlc3QuY3BwID4mNQpjb25maWd1cmU6OTI2NTogJD8gPSAw CmNvbmZpZ3VyZTo5MjY1OiByZXN1bHQ6IHllcwpjb25maWd1cmU6OTI2NTogY2hlY2tpbmcgc3lz L3BhcmFtLmggcHJlc2VuY2UKY29uZmlndXJlOjkyNjU6IGcrKyAtRSAgY29uZnRlc3QuY3BwCmNv bmZpZ3VyZTo5MjY1OiAkPyA9IDAKY29uZmlndXJlOjkyNjU6IHJlc3VsdDogeWVzCmNvbmZpZ3Vy ZTo5MjY1OiBjaGVja2luZyBmb3Igc3lzL3BhcmFtLmgKY29uZmlndXJlOjkyNjU6IHJlc3VsdDog eWVzCmNvbmZpZ3VyZTo5MjY1OiBjaGVja2luZyBzeXMvbW91bnQuaCB1c2FiaWxpdHkKY29uZmln dXJlOjkyNjU6IGcrKyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmNwcCA+JjUKY29uZmlndXJlOjkyNjU6 ICQ/ID0gMApjb25maWd1cmU6OTI2NTogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjkyNjU6IGNoZWNr aW5nIHN5cy9tb3VudC5oIHByZXNlbmNlCmNvbmZpZ3VyZTo5MjY1OiBnKysgLUUgIGNvbmZ0ZXN0 LmNwcApjb25maWd1cmU6OTI2NTogJD8gPSAwCmNvbmZpZ3VyZTo5MjY1OiByZXN1bHQ6IHllcwpj b25maWd1cmU6OTI2NTogY2hlY2tpbmcgZm9yIHN5cy9tb3VudC5oCmNvbmZpZ3VyZTo5MjY1OiBy ZXN1bHQ6IHllcwpjb25maWd1cmU6OTI2NTogY2hlY2tpbmcgc3lzL3N5c2NhbGwuaCB1c2FiaWxp dHkKY29uZmlndXJlOjkyNjU6IGcrKyAtYyAtZyAtTzIgIGNvbmZ0ZXN0LmNwcCA+JjUKY29uZmln dXJlOjkyNjU6ICQ/ID0gMApjb25maWd1cmU6OTI2NTogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjky NjU6IGNoZWNraW5nIHN5cy9zeXNjYWxsLmggcHJlc2VuY2UKY29uZmlndXJlOjkyNjU6IGcrKyAt RSAgY29uZnRlc3QuY3BwCmNvbmZpZ3VyZTo5MjY1OiAkPyA9IDAKY29uZmlndXJlOjkyNjU6IHJl c3VsdDogeWVzCmNvbmZpZ3VyZTo5MjY1OiBjaGVja2luZyBmb3Igc3lzL3N5c2NhbGwuaApjb25m aWd1cmU6OTI2NTogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjkyODQ6IGNoZWNraW5nIGZvciBsdXRp bWVzCmNvbmZpZ3VyZTo5Mjg0OiBnKysgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuY3Bw ICA+JjUKY29uZmlndXJlOjkyODQ6ICQ/ID0gMApjb25maWd1cmU6OTI4NDogcmVzdWx0OiB5ZXMK Y29uZmlndXJlOjkyODQ6IGNoZWNraW5nIGZvciBsY2hvd24KY29uZmlndXJlOjkyODQ6IGcrKyAt byBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jcHAgID4mNQpjb25maWd1cmU6OTI4NDogJD8g PSAwCmNvbmZpZ3VyZTo5Mjg0OiByZXN1bHQ6IHllcwpjb25maWd1cmU6OTI4NDogY2hlY2tpbmcg Zm9yIHBvc2l4X2ZhbGxvY2F0ZQpjb25maWd1cmU6OTI4NDogZysrIC1vIGNvbmZ0ZXN0IC1nIC1P MiAgIGNvbmZ0ZXN0LmNwcCAgPiY1CmNvbmZpZ3VyZTo5Mjg0OiAkPyA9IDAKY29uZmlndXJlOjky ODQ6IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo5Mjg0OiBjaGVja2luZyBmb3Igc2NoZWRfc2V0YWZm aW5pdHkKY29uZmlndXJlOjkyODQ6IGcrKyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5j cHAgID4mNQpjb25maWd1cmU6OTI4NDogJD8gPSAwCmNvbmZpZ3VyZTo5Mjg0OiByZXN1bHQ6IHll cwpjb25maWd1cmU6OTI4NDogY2hlY2tpbmcgZm9yIHN0YXR2ZnMKY29uZmlndXJlOjkyODQ6IGcr KyAtbyBjb25mdGVzdCAtZyAtTzIgICBjb25mdGVzdC5jcHAgID4mNQpjb25maWd1cmU6OTI4NDog JD8gPSAwCmNvbmZpZ3VyZTo5Mjg0OiByZXN1bHQ6IHllcwpjb25maWd1cmU6OTI4NDogY2hlY2tp bmcgZm9yIG5hbm9zbGVlcApjb25maWd1cmU6OTI4NDogZysrIC1vIGNvbmZ0ZXN0IC1nIC1PMiAg IGNvbmZ0ZXN0LmNwcCAgPiY1CmNvbmZpZ3VyZTo5Mjg0OiAkPyA9IDAKY29uZmlndXJlOjkyODQ6 IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo5Mjg0OiBjaGVja2luZyBmb3Igc3Ryc2lnbmFsCmNvbmZp Z3VyZTo5Mjg0OiBnKysgLW8gY29uZnRlc3QgLWcgLU8yICAgY29uZnRlc3QuY3BwICA+JjUKY29u ZmlndXJlOjkyODQ6ICQ/ID0gMApjb25maWd1cmU6OTI4NDogcmVzdWx0OiB5ZXMKY29uZmlndXJl OjkyOTQ6IGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIGEgbGluayB0 byBhIHN5bWxpbmsKY29uZmlndXJlOjkyOTg6IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo5MzE3OiBj aGVja2luZyBsb2NhbGUgdXNhYmlsaXR5CmNvbmZpZ3VyZTo5MzE3OiBnKysgLWMgLWcgLU8yICBj b25mdGVzdC5jcHAgPiY1CmNvbmZpZ3VyZTo5MzE3OiAkPyA9IDAKY29uZmlndXJlOjkzMTc6IHJl c3VsdDogeWVzCmNvbmZpZ3VyZTo5MzE3OiBjaGVja2luZyBsb2NhbGUgcHJlc2VuY2UKY29uZmln dXJlOjkzMTc6IGcrKyAtRSAgY29uZnRlc3QuY3BwCmNvbmZpZ3VyZTo5MzE3OiAkPyA9IDAKY29u ZmlndXJlOjkzMTc6IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo5MzE3OiBjaGVja2luZyBmb3IgbG9j YWxlCmNvbmZpZ3VyZTo5MzE3OiByZXN1bHQ6IHllcwpjb25maWd1cmU6OTMzNzogY2hlY2tpbmcg c3lzL3BlcnNvbmFsaXR5LmggdXNhYmlsaXR5CmNvbmZpZ3VyZTo5MzM3OiBnKysgLWMgLWcgLU8y ICBjb25mdGVzdC5jcHAgPiY1CmNvbmZpZ3VyZTo5MzM3OiAkPyA9IDAKY29uZmlndXJlOjkzMzc6 IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo5MzM3OiBjaGVja2luZyBzeXMvcGVyc29uYWxpdHkuaCBw cmVzZW5jZQpjb25maWd1cmU6OTMzNzogZysrIC1FICBjb25mdGVzdC5jcHAKY29uZmlndXJlOjkz Mzc6ICQ/ID0gMApjb25maWd1cmU6OTMzNzogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjkzMzc6IGNo ZWNraW5nIGZvciBzeXMvcGVyc29uYWxpdHkuaApjb25maWd1cmU6OTMzNzogcmVzdWx0OiB5ZXMK Y29uZmlndXJlOjkzNTA6IGNoZWNraW5nIGxpbnV4L2ZzLmggdXNhYmlsaXR5CmNvbmZpZ3VyZTo5 MzUwOiBnKysgLWMgLWcgLU8yICBjb25mdGVzdC5jcHAgPiY1CmNvbmZpZ3VyZTo5MzUwOiAkPyA9 IDAKY29uZmlndXJlOjkzNTA6IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo5MzUwOiBjaGVja2luZyBs aW51eC9mcy5oIHByZXNlbmNlCmNvbmZpZ3VyZTo5MzUwOiBnKysgLUUgIGNvbmZ0ZXN0LmNwcApj b25maWd1cmU6OTM1MDogJD8gPSAwCmNvbmZpZ3VyZTo5MzUwOiByZXN1bHQ6IHllcwpjb25maWd1 cmU6OTM1MDogY2hlY2tpbmcgZm9yIGxpbnV4L2ZzLmgKY29uZmlndXJlOjkzNTA6IHJlc3VsdDog eWVzCmNvbmZpZ3VyZTo5MzYxOiBjaGVja2luZyBpZiAoZ251dGxzKSBpcyBhdmFpbGFibGUKY29u ZmlndXJlOjkzNjg6IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo5Mzc5OiBjaGVja2luZyBmb3IgZGVm YXVsdCBzdWJzdGl0dXRlIFVSTHMKY29uZmlndXJlOjkzODE6IHJlc3VsdDogaHR0cHM6Ly9taXJy b3IuaHlkcmEuZ251Lm9yZwpjb25maWd1cmU6OTM5MTogY2hlY2tpbmcgd2hldGhlciBHdWlsZSdz IGN1c3RvbSBiaW5hcnkgaW5wdXQgcG9ydHMgc3VwcG9ydCAnc2V0dmJ1ZicKY29uZmlndXJlOjk0 MDU6IHJlc3VsdDogeWVzCmNvbmZpZ3VyZTo5NDE3OiBjaGVja2luZyBmb3IgdW5pdCB0ZXN0IHJv b3QgZGlyZWN0b3J5CmNvbmZpZ3VyZTo5NDI0OiByZXN1bHQ6IC9ob21lL3NhcGllbnRlY2gvRGV2 L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAKY29uZmlndXJlOjk0MzM6IGNoZWNraW5nIGZvciBndWls ZQpjb25maWd1cmU6OTQ2MzogcmVzdWx0OiAvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6 N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL2d1aWxlCmNvbmZpZ3VyZTo5NDcxOiBjaGVja2luZyB0 aGUgY3VycmVudCBpbnN0YWxsYXRpb24ncyBsb2NhbHN0YXRlZGlyCmNvbmZpZ3VyZTo5NDg1OiBy ZXN1bHQ6IG5vbmUKY29uZmlndXJlOjk1NjM6IGNoZWNraW5nIGZvciBkb3QKY29uZmlndXJlOjk1 ODE6IGZvdW5kIC9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJv ZmlsZS9iaW4vZG90CmNvbmZpZ3VyZTo5NTk0OiByZXN1bHQ6IC9nbnUvc3RvcmUvMzJuY3draGpt enlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vZG90CmNvbmZpZ3VyZTo5NjA5OiBj aGVja2luZyBmb3IgZW1hY3MKY29uZmlndXJlOjk2MjU6IGZvdW5kIC9nbnUvc3RvcmUvMzJuY3dr aGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vZW1hY3MKY29uZmlndXJlOjk2 MzY6IHJlc3VsdDogZW1hY3MKY29uZmlndXJlOjk2NjA6IGNoZWNraW5nIHdoZXJlIC5lbGMgZmls ZXMgc2hvdWxkIGdvCmNvbmZpZ3VyZTo5NjczOiAkRU1BQ1MgLWJhdGNoIC1RIC1ldmFsICcod2hp bGUgbG9hZC1wYXRoIChwcmluYyAoY29uY2F0IChjYXIgbG9hZC1wYXRoKSAiXG4iKSkgKHNldHEg bG9hZC1wYXRoIChjZHIgbG9hZC1wYXRoKSkpJyA8L2Rldi9udWxsID5jb25mdGVzdC5vdXQKY29u ZmlndXJlOjk2NzY6ICQ/ID0gMApjb25maWd1cmU6OTY4OTogcmVzdWx0OiAke2RhdGFkaXJ9L2Vt YWNzL3NpdGUtbGlzcApjb25maWd1cmU6OTgyMDogY2hlY2tpbmcgdGhhdCBnZW5lcmF0ZWQgZmls ZXMgYXJlIG5ld2VyIHRoYW4gY29uZmlndXJlCmNvbmZpZ3VyZTo5ODI2OiByZXN1bHQ6IGRvbmUK Y29uZmlndXJlOjk4ODE6IGNyZWF0aW5nIC4vY29uZmlnLnN0YXR1cwoKIyMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSAjIwojIyBSdW5uaW5nIGNvbmZpZy5zdGF0dXMuICMjCiMjIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gIyMKClRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgR05VIEd1aXggY29uZmln LnN0YXR1cyAwLjEwLjAsIHdoaWNoIHdhcwpnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjku ICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKCiAgQ09ORklHX0ZJTEVTICAgID0gCiAgQ09O RklHX0hFQURFUlMgID0gCiAgQ09ORklHX0xJTktTICAgID0gCiAgQ09ORklHX0NPTU1BTkRTID0g CiAgJCAuL2NvbmZpZy5zdGF0dXMgCgpvbiBmcmVldG9wCgpjb25maWcuc3RhdHVzOjk5MjogY3Jl YXRpbmcgbml4L3NjcmlwdHMvbGlzdC1ydW50aW1lLXJvb3RzCmNvbmZpZy5zdGF0dXM6OTkyOiBj cmVhdGluZyBuaXgvc2NyaXB0cy9zdWJzdGl0dXRlCmNvbmZpZy5zdGF0dXM6OTkyOiBjcmVhdGlu ZyBuaXgvc2NyaXB0cy9ndWl4LWF1dGhlbnRpY2F0ZQpjb25maWcuc3RhdHVzOjk5MjogY3JlYXRp bmcgbml4L3NjcmlwdHMvb2ZmbG9hZApjb25maWcuc3RhdHVzOjk5MjogY3JlYXRpbmcgTWFrZWZp bGUKY29uZmlnLnN0YXR1czo5OTI6IGNyZWF0aW5nIHBvL2d1aXgvTWFrZWZpbGUuaW4KY29uZmln LnN0YXR1czo5OTI6IGNyZWF0aW5nIHBvL3BhY2thZ2VzL01ha2VmaWxlLmluCmNvbmZpZy5zdGF0 dXM6OTkyOiBjcmVhdGluZyBndWl4L2NvbmZpZy5zY20KY29uZmlnLnN0YXR1czo5OTI6IGNyZWF0 aW5nIHNjcmlwdHMvZ3VpeApjb25maWcuc3RhdHVzOjk5MjogY3JlYXRpbmcgdGVzdC1lbnYKY29u ZmlnLnN0YXR1czo5OTI6IGNyZWF0aW5nIHByZS1pbnN0LWVudgpjb25maWcuc3RhdHVzOjk5Mjog Y3JlYXRpbmcgZW1hY3MvZ3VpeC1jb25maWcuZWwKY29uZmlnLnN0YXR1czo5OTI6IGNyZWF0aW5n IGVtYWNzL2d1aXgtaGVscGVyLnNjbQpjb25maWcuc3RhdHVzOjk5MjogY3JlYXRpbmcgbml4L2Nv bmZpZy5oCmNvbmZpZy5zdGF0dXM6MTIyMTogZXhlY3V0aW5nIGRlcGZpbGVzIGNvbW1hbmRzCmNv bmZpZy5zdGF0dXM6MTIyMTogZXhlY3V0aW5nIHBvLWRpcmVjdG9yaWVzIGNvbW1hbmRzCgojIyAt LS0tLS0tLS0tLS0tLS0tICMjCiMjIENhY2hlIHZhcmlhYmxlcy4gIyMKIyMgLS0tLS0tLS0tLS0t LS0tLSAjIwoKYWNfY3ZfYnVpbGQ9eDg2XzY0LXVua25vd24tbGludXgtZ251CmFjX2N2X2NfY29t cGlsZXJfZ251PXllcwphY19jdl9jeHhfY29tcGlsZXJfZ251PXllcwphY19jdl9lbnZfQ0NDX3Nl dD0KYWNfY3ZfZW52X0NDQ192YWx1ZT0KYWNfY3ZfZW52X0NDX3NldD0KYWNfY3ZfZW52X0NDX3Zh bHVlPQphY19jdl9lbnZfQ0ZMQUdTX3NldD0KYWNfY3ZfZW52X0NGTEFHU192YWx1ZT0KYWNfY3Zf ZW52X0NQUEZMQUdTX3NldD0KYWNfY3ZfZW52X0NQUEZMQUdTX3ZhbHVlPQphY19jdl9lbnZfQ1BQ X3NldD0KYWNfY3ZfZW52X0NQUF92YWx1ZT0KYWNfY3ZfZW52X0NYWENQUF9zZXQ9CmFjX2N2X2Vu dl9DWFhDUFBfdmFsdWU9CmFjX2N2X2Vudl9DWFhGTEFHU19zZXQ9CmFjX2N2X2Vudl9DWFhGTEFH U192YWx1ZT0KYWNfY3ZfZW52X0NYWF9zZXQ9CmFjX2N2X2Vudl9DWFhfdmFsdWU9CmFjX2N2X2Vu dl9FTUFDU0xPQURQQVRIX3NldD0KYWNfY3ZfZW52X0VNQUNTTE9BRFBBVEhfdmFsdWU9CmFjX2N2 X2Vudl9FTUFDU19zZXQ9CmFjX2N2X2Vudl9FTUFDU192YWx1ZT0KYWNfY3ZfZW52X0dVSUxFX0NG TEFHU19zZXQ9CmFjX2N2X2Vudl9HVUlMRV9DRkxBR1NfdmFsdWU9CmFjX2N2X2Vudl9HVUlMRV9M SUJTX3NldD0KYWNfY3ZfZW52X0dVSUxFX0xJQlNfdmFsdWU9CmFjX2N2X2Vudl9MREZMQUdTX3Nl dD0KYWNfY3ZfZW52X0xERkxBR1NfdmFsdWU9CmFjX2N2X2Vudl9MSUJTX3NldD0KYWNfY3ZfZW52 X0xJQlNfdmFsdWU9CmFjX2N2X2Vudl9QS0dfQ09ORklHX0xJQkRJUl9zZXQ9CmFjX2N2X2Vudl9Q S0dfQ09ORklHX0xJQkRJUl92YWx1ZT0KYWNfY3ZfZW52X1BLR19DT05GSUdfUEFUSF9zZXQ9c2V0 CmFjX2N2X2Vudl9QS0dfQ09ORklHX1BBVEhfdmFsdWU9L2dudS9zdG9yZS8zMm5jd2toam16eXE3 ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2xpYi9wa2djb25maWc6Oi9ob21lL3NhcGllbnRl Y2gvLmd1aXgtcHJvZmlsZS9saWIvcGtnY29uZmlnCmFjX2N2X2Vudl9QS0dfQ09ORklHX3NldD0K YWNfY3ZfZW52X1BLR19DT05GSUdfdmFsdWU9CmFjX2N2X2Vudl9TUUxJVEUzX0NGTEFHU19zZXQ9 CmFjX2N2X2Vudl9TUUxJVEUzX0NGTEFHU192YWx1ZT0KYWNfY3ZfZW52X1NRTElURTNfTElCU19z ZXQ9CmFjX2N2X2Vudl9TUUxJVEUzX0xJQlNfdmFsdWU9CmFjX2N2X2Vudl9idWlsZF9hbGlhc19z ZXQ9CmFjX2N2X2Vudl9idWlsZF9hbGlhc192YWx1ZT0KYWNfY3ZfZW52X2hvc3RfYWxpYXNfc2V0 PQphY19jdl9lbnZfaG9zdF9hbGlhc192YWx1ZT0KYWNfY3ZfZW52X3RhcmdldF9hbGlhc19zZXQ9 CmFjX2N2X2Vudl90YXJnZXRfYWxpYXNfdmFsdWU9CmFjX2N2X2Z1bmNfY2hyb290PXllcwphY19j dl9mdW5jX2xjaG93bj15ZXMKYWNfY3ZfZnVuY19sdXRpbWVzPXllcwphY19jdl9mdW5jX25hbm9z bGVlcD15ZXMKYWNfY3ZfZnVuY19wb3NpeF9mYWxsb2NhdGU9eWVzCmFjX2N2X2Z1bmNfc2NoZWRf c2V0YWZmaW5pdHk9eWVzCmFjX2N2X2Z1bmNfc3RhdHZmcz15ZXMKYWNfY3ZfZnVuY19zdHJzaWdu YWw9eWVzCmFjX2N2X2Z1bmNfdW5zaGFyZT15ZXMKYWNfY3ZfZ3VpeF9jYmlwc19zdXBwb3J0X3Nl dHZidWY9eWVzCmFjX2N2X2d1aXhfY3h4MTFfc3VwcG9ydD15ZXMKYWNfY3ZfZ3VpeF9oYXNoX2Jh bmdfbGVuZ3RoPTczCmFjX2N2X2d1aXhfc29ja2V0X2ZpbGVfbmFtZV9sZW5ndGg9NDAKYWNfY3Zf Z3VpeF9zcmZpXzM3X2Jyb2tlbj1ubwphY19jdl9ndWl4X3Rlc3RfaGFzaF9iYW5nX2xlbmd0aD0x MTIKYWNfY3ZfZ3VpeF90ZXN0X3Jvb3Q9L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dp cC90ZXN0LXRtcAphY19jdl9ndWl4X3Rlc3Rfc29ja2V0X2ZpbGVfbmFtZV9sZW5ndGg9NzUKYWNf Y3ZfaGVhZGVyX2J6bGliX2g9eWVzCmFjX2N2X2hlYWRlcl9nY3J5cHRfaD15ZXMKYWNfY3ZfaGVh ZGVyX2ludHR5cGVzX2g9eWVzCmFjX2N2X2hlYWRlcl9saW51eF9mc19oPXllcwphY19jdl9oZWFk ZXJfbG9jYWxlPXllcwphY19jdl9oZWFkZXJfbWVtb3J5X2g9eWVzCmFjX2N2X2hlYWRlcl9taW5p eF9jb25maWdfaD1ubwphY19jdl9oZWFkZXJfc2NoZWRfaD15ZXMKYWNfY3ZfaGVhZGVyX3N0ZGM9 eWVzCmFjX2N2X2hlYWRlcl9zdGRpbnRfaD15ZXMKYWNfY3ZfaGVhZGVyX3N0ZGxpYl9oPXllcwph Y19jdl9oZWFkZXJfc3RyaW5nX2g9eWVzCmFjX2N2X2hlYWRlcl9zdHJpbmdzX2g9eWVzCmFjX2N2 X2hlYWRlcl9zeXNfbW91bnRfaD15ZXMKYWNfY3ZfaGVhZGVyX3N5c19wYXJhbV9oPXllcwphY19j dl9oZWFkZXJfc3lzX3BlcnNvbmFsaXR5X2g9eWVzCmFjX2N2X2hlYWRlcl9zeXNfc3RhdF9oPXll cwphY19jdl9oZWFkZXJfc3lzX3N5c2NhbGxfaD15ZXMKYWNfY3ZfaGVhZGVyX3N5c190eXBlc19o PXllcwphY19jdl9oZWFkZXJfdW5pc3RkX2g9eWVzCmFjX2N2X2hvc3Q9eDg2XzY0LXVua25vd24t bGludXgtZ251CmFjX2N2X2xpYl9iejJfQloyX2J6V3JpdGVPcGVuPXllcwphY19jdl9saWJfZ2Ny eXB0X2djcnlfbWRfb3Blbj15ZXMKYWNfY3Zfb2JqZXh0PW8KYWNfY3ZfcGF0aF9CWklQMj0vZ251 L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL2J6aXAy CmFjX2N2X3BhdGhfRE9UX1VTRVJfUFJPR1JBTT0vZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2Jx Mnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL2RvdAphY19jdl9wYXRoX0VHUkVQPScvZ251L3N0 b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL2dyZXAgLUUn CmFjX2N2X3BhdGhfR01TR0ZNVD0vZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3Iz OXgwcmg3LXByb2ZpbGUvYmluL21zZ2ZtdAphY19jdl9wYXRoX0dSRVA9L2dudS9zdG9yZS8zMm5j d2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi9ncmVwCmFjX2N2X3BhdGhf R1VJTEQ9L2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxl L2Jpbi9ndWlsZAphY19jdl9wYXRoX0dVSUxFPS9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEy eHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vZ3VpbGUKYWNfY3ZfcGF0aF9HVUlMRV9DT05GSUc9 L2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi9n dWlsZS1jb25maWcKYWNfY3ZfcGF0aF9HWklQPS9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEy eHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vZ3ppcAphY19jdl9wYXRoX0xJQkdDUllQVF9DT05G SUc9L2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jp bi9saWJnY3J5cHQtY29uZmlnCmFjX2N2X3BhdGhfTVNHRk1UPS9nbnUvc3RvcmUvMzJuY3draGpt enlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vbXNnZm10CmFjX2N2X3BhdGhfTVNH TUVSR0U9L2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxl L2Jpbi9tc2dtZXJnZQphY19jdl9wYXRoX1NFRD0vZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2Jx Mnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL3NlZAphY19jdl9wYXRoX1hHRVRURVhUPS9nbnUv c3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4veGdldHRl eHQKYWNfY3ZfcGF0aF9YWj0vZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgw cmg3LXByb2ZpbGUvYmluL3h6CmFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0vZ251L3N0b3Jl LzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL3BrZy1jb25maWcK YWNfY3ZfcGF0aF9pbnN0YWxsPScvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3Iz OXgwcmg3LXByb2ZpbGUvYmluL2luc3RhbGwgLWMnCmFjX2N2X3BhdGhfbWtkaXI9L2dudS9zdG9y ZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi9ta2RpcgphY19j dl9wcm9nX0FXSz1nYXdrCmFjX2N2X3Byb2dfQ1BQPSdnY2MgLUUnCmFjX2N2X3Byb2dfQ1hYQ1BQ PSdnKysgLUUnCmFjX2N2X3Byb2dfRU1BQ1M9ZW1hY3MKYWNfY3ZfcHJvZ19hY19jdF9DQz1nY2MK YWNfY3ZfcHJvZ19hY19jdF9DWFg9ZysrCmFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPXJhbmxpYgph Y19jdl9wcm9nX2NjX2M4OT0KYWNfY3ZfcHJvZ19jY19nPXllcwphY19jdl9wcm9nX2N4eF9nPXll cwphY19jdl9wcm9nX21ha2VfbWFrZV9zZXQ9eWVzCmFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0 ZW5zaW9uc19fPXllcwphY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz1ubwphY19jdl9zeXNfbGFy Z2VmaWxlX0NDPW5vCmFjbF9jdl9oYXJkY29kZV9kaXJlY3Q9bm8KYWNsX2N2X2hhcmRjb2RlX2xp YmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKYWNsX2N2X2hhcmRjb2Rl X2xpYmRpcl9zZXBhcmF0b3I9CmFjbF9jdl9oYXJkY29kZV9taW51c19MPW5vCmFjbF9jdl9saWJl eHQ9YQphY2xfY3ZfbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKYWNsX2N2X2xpYnJhcnlfbmFtZXNf c3BlYz0nJGxpYm5hbWUkc2hyZXh0JwphY2xfY3ZfcGF0aF9MRD0vZ251L3N0b3JlLzMybmN3a2hq bXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL2xkCmFjbF9jdl9wcm9nX2dudV9s ZD15ZXMKYWNsX2N2X3JwYXRoPWRvbmUKYWNsX2N2X3NobGliZXh0PXNvCmFjbF9jdl93bD0tV2ws CmFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPWdjYzMKYW1fY3ZfQ1hYX2RlcGVu ZGVuY2llc19jb21waWxlcl90eXBlPWdjYzMKYW1fY3ZfbGlzcGRpcj0nJHtkYXRhZGlyfS9lbWFj cy9zaXRlLWxpc3AnCmFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcwphbV9j dl9wcm9nX2NjX2Nfbz15ZXMKZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PW5vCmd0X2N2 X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT1ubwpndF9jdl9mdW5jX2dudWdldHRleHQx X2xpYmM9eWVzCmd1aXhfY3ZfY3VycmVudF9sb2NhbHN0YXRlZGlyPW5vbmUKZ3VpeF9jdl9saWJj X2hhc19tb3VudD15ZXMKZ3VpeF9jdl9saWJnY3J5cHRfbGliZGlyPS9nbnUvc3RvcmUvN3dmYnBy cDFiOWIyNWNybGlkZzZoN2I2aHBpYjJiOTktbGliZ2NyeXB0LTEuNi41L2xpYgpndWl4X2N2X2xp YmdjcnlwdF91c2FibGVfcD15ZXMKZ3VpeF9jdl9saWJ6X2xpYmRpcj0vZ251L3N0b3JlL2hzeGhm bWpnaDhtNGMwcGF2cTNnZDNnY3JuOHpyZ3hqLXpsaWItMS4yLjgvbGliCnBrZ19jdl9HVUlMRV9D RkxBR1M9Jy1wdGhyZWFkIC1JL2dudS9zdG9yZS9oeWsyaTdiOG13YnJiaXlxazVzZ3JmZ2RzOXp2 Y3JuNS1ndWlsZS0yLjAuMTEvaW5jbHVkZS9ndWlsZS8yLjAnCnBrZ19jdl9HVUlMRV9MSUJTPSct TC9nbnUvc3RvcmUvaHlrMmk3Yjhtd2JyYml5cWs1c2dyZmdkczl6dmNybjUtZ3VpbGUtMi4wLjEx L2xpYiAtTC9nbnUvc3RvcmUvbXk0YXo3MWd6OGlxZDR3OGtiMzRrcTd2bGszZmN2aG0tbGliZ2Mt Ny40LjIvbGliIC1sZ3VpbGUtMi4wIC1sZ2MnCnBrZ19jdl9TUUxJVEUzX0NGTEFHUz0tSS9nbnUv c3RvcmUveTdoOGdmODkwcWFqNmYyM3J5c2h3eGQzcjl5OTZjbmMtc3FsaXRlLTMuMTAuMC9pbmNs dWRlCnBrZ19jdl9TUUxJVEUzX0xJQlM9Jy1ML2dudS9zdG9yZS95N2g4Z2Y4OTBxYWo2ZjIzcnlz aHd4ZDNyOXk5NmNuYy1zcWxpdGUtMy4xMC4wL2xpYiAtbHNxbGl0ZTMnCgojIyAtLS0tLS0tLS0t LS0tLS0tLSAjIwojIyBPdXRwdXQgdmFyaWFibGVzLiAjIwojIyAtLS0tLS0tLS0tLS0tLS0tLSAj IwoKQUNMT0NBTD0nJHtTSEVMTH0gL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC9i dWlsZC1hdXgvbWlzc2luZyBhY2xvY2FsLTEuMTUnCkFNREVQQkFDS1NMQVNIPSdcJwpBTURFUF9G QUxTRT0nIycKQU1ERVBfVFJVRT0nJwpBTVRBUj0nJCR7VEFSLXRhcn0nCkFNX0JBQ0tTTEFTSD0n XCcKQU1fREVGQVVMVF9WPSckKEFNX0RFRkFVTFRfVkVSQk9TSVRZKScKQU1fREVGQVVMVF9WRVJC T1NJVFk9JzAnCkFNX1Y9JyQoViknCkFVVE9DT05GPScke1NIRUxMfSAvaG9tZS9zYXBpZW50ZWNo L0Rldi9ndWl4L2d1aXhfd2lwL2J1aWxkLWF1eC9taXNzaW5nIGF1dG9jb25mJwpBVVRPSEVBREVS PScke1NIRUxMfSAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL2J1aWxkLWF1eC9t aXNzaW5nIGF1dG9oZWFkZXInCkFVVE9NQUtFPScke1NIRUxMfSAvaG9tZS9zYXBpZW50ZWNoL0Rl di9ndWl4L2d1aXhfd2lwL2J1aWxkLWF1eC9taXNzaW5nIGF1dG9tYWtlLTEuMTUnCkFXSz0nZ2F3 aycKQlVJTERfREFFTU9OX0ZBTFNFPScjJwpCVUlMRF9EQUVNT05fT0ZGTE9BRF9GQUxTRT0nIycK QlVJTERfREFFTU9OX09GRkxPQURfVFJVRT0nJwpCVUlMRF9EQUVNT05fVFJVRT0nJwpCVUlMRF9T WVNDQUxMU19NT0RVTEVfRkFMU0U9JyMnCkJVSUxEX1NZU0NBTExTX01PRFVMRV9UUlVFPScnCkJa SVAyPScvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUv YmluL2J6aXAyJwpDQU5fUlVOX1RFU1RTX0ZBTFNFPScjJwpDQU5fUlVOX1RFU1RTX1RSVUU9JycK Q0M9J2djYycKQ0NERVBNT0RFPSdkZXBtb2RlPWdjYzMnCkNGTEFHUz0nLWcgLU8yJwpDUFA9J2dj YyAtRScKQ1BQRkxBR1M9JycKQ1hYPSdnKysnCkNYWENQUD0nZysrIC1FJwpDWFhERVBNT0RFPSdk ZXBtb2RlPWdjYzMnCkNYWEZMQUdTPSctZyAtTzInCkNZR1BBVEhfVz0nZWNobycKREVGUz0nLURI QVZFX0NPTkZJR19IJwpERVBESVI9Jy5kZXBzJwpET1Q9JyR7U0hFTEx9IC9ob21lL3NhcGllbnRl Y2gvRGV2L2d1aXgvZ3VpeF93aXAvYnVpbGQtYXV4L21pc3NpbmcgZG90JwpET1RfVVNFUl9QUk9H UkFNPScvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUv YmluL2RvdCcKRUNIT19DPScnCkVDSE9fTj0nLW4nCkVDSE9fVD0nJwpFR1JFUD0nL2dudS9zdG9y ZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi9ncmVwIC1FJwpF TUFDUz0nZW1hY3MnCkVNQUNTTE9BRFBBVEg9JycKRVhFRVhUPScnCkdFVFRFWFRfTUFDUk9fVkVS U0lPTj0nMC4xOCcKR01TR0ZNVD0nL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNy Mzl4MHJoNy1wcm9maWxlL2Jpbi9tc2dmbXQnCkdNU0dGTVRfMDE1PScvZ251L3N0b3JlLzMybmN3 a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL21zZ2ZtdCcKR1JFUD0nL2du dS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi9ncmVw JwpHVUlMRD0nL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9m aWxlL2Jpbi9ndWlsZCcKR1VJTEU9Jy9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYz cjM5eDByaDctcHJvZmlsZS9iaW4vZ3VpbGUnCkdVSUxFX0NGTEFHUz0nLXB0aHJlYWQgLUkvZ251 L3N0b3JlL2h5azJpN2I4bXdicmJpeXFrNXNncmZnZHM5enZjcm41LWd1aWxlLTIuMC4xMS9pbmNs dWRlL2d1aWxlLzIuMCcKR1VJTEVfQ09ORklHPScvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2Jx Mnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL2d1aWxlLWNvbmZpZycKR1VJTEVfTElCUz0nLUwv Z251L3N0b3JlL2h5azJpN2I4bXdicmJpeXFrNXNncmZnZHM5enZjcm41LWd1aWxlLTIuMC4xMS9s aWIgLUwvZ251L3N0b3JlL215NGF6NzFnejhpcWQ0dzhrYjM0a3E3dmxrM2ZjdmhtLWxpYmdjLTcu NC4yL2xpYiAtbGd1aWxlLTIuMCAtbGdjJwpHVUlMRV9UT09MUz0nL2dudS9zdG9yZS8zMm5jd2to am16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi9ndWlsZCcKR1VJWF9URVNUX1JP T1Q9Jy9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAnCkdaSVA9Jy9n bnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vZ3pp cCcKSEFWRV9FTUFDU19GQUxTRT0nIycKSEFWRV9FTUFDU19UUlVFPScnCkhBVkVfR1VJTEVfSlNP Tl9GQUxTRT0nIycKSEFWRV9HVUlMRV9KU09OX1RSVUU9JycKSEVMUDJNQU49JyR7U0hFTEx9IC9o b21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvYnVpbGQtYXV4L21pc3NpbmcgaGVscDJt YW4nCklOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCklOU1RBTExfUFJPR1JBTT0nJHtJ TlNUQUxMfScKSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCklOU1RBTExfU1JGSV8zN19GQUxT RT0nJwpJTlNUQUxMX1NSRklfMzdfVFJVRT0nIycKSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSckKGlu c3RhbGxfc2gpIC1jIC1zJwpJTlRMTElCUz0nJwpJTlRMX01BQ09TWF9MSUJTPScnCkxERkxBR1M9 JycKTElCR0NSWVBUPScvZ251L3N0b3JlLzd3ZmJwcnAxYjliMjVjcmxpZGc2aDdiNmhwaWIyYjk5 LWxpYmdjcnlwdC0xLjYuNS9saWIvbGliZ2NyeXB0JwpMSUJHQ1JZUFRfQ0ZMQUdTPScnCkxJQkdD UllQVF9DT05GSUc9Jy9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDct cHJvZmlsZS9iaW4vbGliZ2NyeXB0LWNvbmZpZycKTElCR0NSWVBUX0xJQkRJUj0nL2dudS9zdG9y ZS83d2ZicHJwMWI5YjI1Y3JsaWRnNmg3YjZocGliMmI5OS1saWJnY3J5cHQtMS42LjUvbGliJwpM SUJHQ1JZUFRfTElCUz0nLUwvZ251L3N0b3JlLzd3ZmJwcnAxYjliMjVjcmxpZGc2aDdiNmhwaWIy Yjk5LWxpYmdjcnlwdC0xLjYuNS9saWIgLWxnY3J5cHQnCkxJQkdDUllQVF9QUkVGSVg9J25vJwpM SUJJQ09OVj0nLWxpY29udicKTElCSU5UTD0nJwpMSUJPQkpTPScnCkxJQlM9JycKTElCWj0nL2du dS9zdG9yZS9oc3hoZm1qZ2g4bTRjMHBhdnEzZ2QzZ2Nybjh6cmd4ai16bGliLTEuMi44L2xpYi9s aWJ6JwpMVExJQklDT05WPSctbGljb252JwpMVExJQklOVEw9JycKTFRMSUJPQkpTPScnCk1BS0VJ TkZPPScke1NIRUxMfSAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL2J1aWxkLWF1 eC9taXNzaW5nIG1ha2VpbmZvJwpNS0RJUl9QPScvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2Jx Mnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvYmluL21rZGlyIC1wJwpNU0dGTVQ9Jy9nbnUvc3RvcmUv MzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vbXNnZm10JwpNU0dG TVRfMDE1PScvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2Zp bGUvYmluL21zZ2ZtdCcKTVNHTUVSR0U9Jy9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3 bGYzcjM5eDByaDctcHJvZmlsZS9iaW4vbXNnbWVyZ2UnCk5JWFBLR1M9JycKTklYX0hBU0g9JycK TklYX0lOU1RBTlRJQVRFPSduaXgtaW5zdGFudGlhdGUnCk5JWF9QUkVGSVg9JycKT0JKRVhUPSdv JwpQQUNLQUdFPSdndWl4JwpQQUNLQUdFX0JVR1JFUE9SVD0nYnVnLWd1aXhAZ251Lm9yZycKUEFD S0FHRV9OQU1FPSdHTlUgR3VpeCcKUEFDS0FHRV9TVFJJTkc9J0dOVSBHdWl4IDAuMTAuMCcKUEFD S0FHRV9UQVJOQU1FPSdndWl4JwpQQUNLQUdFX1VSTD0naHR0cDovL3d3dy5nbnUub3JnL3NvZnR3 YXJlL2d1aXgvJwpQQUNLQUdFX1ZFUlNJT049JzAuMTAuMCcKUEFUSF9TRVBBUkFUT1I9JzonClBL R19DT05GSUc9Jy9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJv ZmlsZS9iaW4vcGtnLWNvbmZpZycKUEtHX0NPTkZJR19MSUJESVI9JycKUEtHX0NPTkZJR19QQVRI PScvZ251L3N0b3JlLzMybmN3a2hqbXp5cTdqN2JxMnh6N2xmM3IzOXgwcmg3LXByb2ZpbGUvbGli L3BrZ2NvbmZpZzo6L2hvbWUvc2FwaWVudGVjaC8uZ3VpeC1wcm9maWxlL2xpYi9wa2djb25maWcn ClBPU1VCPSdwbycKUkFOTElCPSdyYW5saWInClNFRD0nL2dudS9zdG9yZS8zMm5jd2toam16eXE3 ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi9zZWQnClNFVF9NQUtFPScnClNIRUxMPScv YmluL3NoJwpTUUxJVEUzX0NGTEFHUz0nLUkvZ251L3N0b3JlL3k3aDhnZjg5MHFhajZmMjNyeXNo d3hkM3I5eTk2Y25jLXNxbGl0ZS0zLjEwLjAvaW5jbHVkZScKU1FMSVRFM19MSUJTPSctTC9nbnUv c3RvcmUveTdoOGdmODkwcWFqNmYyM3J5c2h3eGQzcjl5OTZjbmMtc3FsaXRlLTMuMTAuMC9saWIg LWxzcWxpdGUzJwpTVFJJUD0nJwpVU0VfTkxTPSd5ZXMnClZFUlNJT049JzAuMTAuMCcKWEdFVFRF WFQ9Jy9nbnUvc3RvcmUvMzJuY3draGptenlxN2o3YnEyeHo3bGYzcjM5eDByaDctcHJvZmlsZS9i aW4veGdldHRleHQnClhHRVRURVhUXzAxNT0nL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4 ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi94Z2V0dGV4dCcKWEdFVFRFWFRfRVhUUkFfT1BUSU9O Uz0nJwpYWj0nL2dudS9zdG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9m aWxlL2Jpbi94eicKYWNfY3RfQ0M9J2djYycKYWNfY3RfQ1hYPSdnKysnCmFtX19FWEVFWFRfRkFM U0U9JycKYW1fX0VYRUVYVF9UUlVFPScjJwphbV9fZmFzdGRlcENDX0ZBTFNFPScjJwphbV9fZmFz dGRlcENDX1RSVUU9JycKYW1fX2Zhc3RkZXBDWFhfRkFMU0U9JyMnCmFtX19mYXN0ZGVwQ1hYX1RS VUU9JycKYW1fX2luY2x1ZGU9J2luY2x1ZGUnCmFtX19pc3JjPScnCmFtX19sZWFkaW5nX2RvdD0n LicKYW1fX25vZGVwPSdfbm8nCmFtX19xdW90ZT0nJwphbV9fdGFyPSckJHtUQVItdGFyfSBjaG9m IC0gIiQkdGFyZGlyIicKYW1fX3VudGFyPSckJHtUQVItdGFyfSB4ZiAtJwpiYXNoY29tcGxldGlv bmRpcj0nJHtzeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24uZCcKYmluZGlyPScke2V4ZWNfcHJl Zml4fS9iaW4nCmJ1aWxkPSd4ODZfNjQtdW5rbm93bi1saW51eC1nbnUnCmJ1aWxkX2FsaWFzPScn CmJ1aWxkX2NwdT0neDg2XzY0JwpidWlsZF9vcz0nbGludXgtZ251JwpidWlsZF92ZW5kb3I9J3Vu a25vd24nCmRhdGFkaXI9JyR7ZGF0YXJvb3RkaXJ9JwpkYXRhcm9vdGRpcj0nJHtwcmVmaXh9L3No YXJlJwpkb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0VfVEFSTkFNRX0nCmR2aWRp cj0nJHtkb2NkaXJ9JwplbWFjc3VpZGlyPScke3ByZWZpeH0vc2hhcmUvZ3VpbGUvc2l0ZS8yLjAv Z3VpeC9lbWFjcycKZXhlY19wcmVmaXg9JyR7cHJlZml4fScKZ3VpbGVtb2R1bGVkaXI9JyR7cHJl Zml4fS9zaGFyZS9ndWlsZS9zaXRlLzIuMCcKZ3VpeF9sb2NhbHN0YXRlZGlyPScvdXNyL2xvY2Fs L3ZhcicKZ3VpeF9zYmluZGlyPScvdXNyL2xvY2FsL3NiaW4nCmd1aXhfc3lzY29uZmRpcj0nL3Vz ci9sb2NhbC9ldGMnCmd1aXhfc3lzdGVtPSd4ODZfNjQtbGludXgnCmhvc3Q9J3g4Nl82NC11bmtu b3duLWxpbnV4LWdudScKaG9zdF9hbGlhcz0nJwpob3N0X2NwdT0neDg2XzY0Jwpob3N0X29zPSds aW51eC1nbnUnCmhvc3RfdmVuZG9yPSd1bmtub3duJwpodG1sZGlyPScke2RvY2Rpcn0nCmluY2x1 ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlJwppbmZvZGlyPScke2RhdGFyb290ZGlyfS9pbmZvJwpp bnN0YWxsX3NoPScke1NIRUxMfSAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL2J1 aWxkLWF1eC9pbnN0YWxsLXNoJwpsaWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKbGliZXhlY2Rp cj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycKbGlzcGRpcj0nJHtkYXRhZGlyfS9lbWFjcy9zaXRl LWxpc3AnCmxvY2FsZWRpcj0nJHtkYXRhcm9vdGRpcn0vbG9jYWxlJwpsb2NhbHN0YXRlZGlyPSck e3ByZWZpeH0vdmFyJwptYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicKbWtkaXJfcD0nL2dudS9z dG9yZS8zMm5jd2toam16eXE3ajdicTJ4ejdsZjNyMzl4MHJoNy1wcm9maWxlL2Jpbi9ta2RpciAt cCcKb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJwpwZGZkaXI9JyR7ZG9jZGlyfScKcHJlZml4 PScvdXNyL2xvY2FsJwpwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSdzLHgseCwnCnBzZGlyPScke2Rv Y2Rpcn0nCnNiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCnNoYXJlZHN0YXRlZGlyPScke3By ZWZpeH0vY29tJwpzdG9yZWRpcj0nL2dudS9zdG9yZScKc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0 YycKdGFyZ2V0X2FsaWFzPScnCgojIyAtLS0tLS0tLS0tLSAjIwojIyBjb25mZGVmcy5oLiAjIwoj IyAtLS0tLS0tLS0tLSAjIwoKLyogY29uZmRlZnMuaCAqLwojZGVmaW5lIFBBQ0tBR0VfTkFNRSAi R05VIEd1aXgiCiNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJndWl4IgojZGVmaW5lIFBBQ0tBR0Vf VkVSU0lPTiAiMC4xMC4wIgojZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJHTlUgR3VpeCAwLjEwLjAi CiNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImJ1Zy1ndWl4QGdudS5vcmciCiNkZWZpbmUgUEFD S0FHRV9VUkwgImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ndWl4LyIKI2RlZmluZSBQQUNL QUdFICJndWl4IgojZGVmaW5lIFZFUlNJT04gIjAuMTAuMCIKI2RlZmluZSBTVERDX0hFQURFUlMg MQojZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQojZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCiNk ZWZpbmUgSEFWRV9TVERMSUJfSCAxCiNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCiNkZWZpbmUgSEFW RV9NRU1PUllfSCAxCiNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQojZGVmaW5lIEhBVkVfSU5UVFlQ RVNfSCAxCiNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCiNkZWZpbmUgSEFWRV9VTklTVERfSCAxCiNk ZWZpbmUgX19FWFRFTlNJT05TX18gMQojZGVmaW5lIF9BTExfU09VUkNFIDEKI2RlZmluZSBfR05V X1NPVVJDRSAxCiNkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEKI2RlZmluZSBfVEFO REVNX1NPVVJDRSAxCiNkZWZpbmUgRU5BQkxFX05MUyAxCiNkZWZpbmUgSEFWRV9HRVRURVhUIDEK I2RlZmluZSBIQVZFX0RDR0VUVEVYVCAxCiNkZWZpbmUgSEFWRV9CWkxJQl9IIDEKI2RlZmluZSBO SVhfVkVSU0lPTiAiMC4wLjAiCiNkZWZpbmUgU1lTVEVNICJ4ODZfNjQtbGludXgiCiNkZWZpbmUg SEFWRV9DSFJPT1QgMQojZGVmaW5lIEhBVkVfVU5TSEFSRSAxCiNkZWZpbmUgSEFWRV9TQ0hFRF9I IDEKI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKI2RlZmluZSBIQVZFX1NZU19NT1VOVF9IIDEK I2RlZmluZSBIQVZFX1NZU19TWVNDQUxMX0ggMQojZGVmaW5lIEhBVkVfTFVUSU1FUyAxCiNkZWZp bmUgSEFWRV9MQ0hPV04gMQojZGVmaW5lIEhBVkVfUE9TSVhfRkFMTE9DQVRFIDEKI2RlZmluZSBI QVZFX1NDSEVEX1NFVEFGRklOSVRZIDEKI2RlZmluZSBIQVZFX1NUQVRWRlMgMQojZGVmaW5lIEhB VkVfTkFOT1NMRUVQIDEKI2RlZmluZSBIQVZFX1NUUlNJR05BTCAxCiNkZWZpbmUgQ0FOX0xJTktf U1lNTElOSyAxCiNkZWZpbmUgSEFWRV9MT0NBTEUgMQojZGVmaW5lIEhBVkVfU1lTX1BFUlNPTkFM SVRZX0ggMQojZGVmaW5lIEhBVkVfTElOVVhfRlNfSCAxCiNkZWZpbmUgR1VJWF9TVUJTVElUVVRF X1VSTFMgImh0dHBzOi8vbWlycm9yLmh5ZHJhLmdudS5vcmciCiNkZWZpbmUgSEFWRV9EQUVNT05f T0ZGTE9BRF9IT09LIDEKCmNvbmZpZ3VyZTogZXhpdCAwCg== --=_e9a6df70a27b00c7c1a80573c06d6b2d Content-Transfer-Encoding: base64 Content-Type: text/plain; name=test-suite.log Content-Disposition: attachment; filename=test-suite.log; size=194521 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEdOVSBHdWl4IDAuMTAu MDogLi90ZXN0LXN1aXRlLmxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KCiMgVE9UQUw6IDYwNAojIFBBU1M6ICA1ODIKIyBTS0lQOiAgNwojIFhGQUlMOiAwCiMgRkFJ TDogIDE1CiMgWFBBU1M6IDAKIyBFUlJPUjogMAoKLi4gY29udGVudHM6OiA6ZGVwdGg6IDIKClNL SVA6IHRlc3RzL2Jhc2UzMgo9PT09PT09PT09PT09PT09PT0KCnNoOiBuaXgtaGFzaDogY29tbWFu ZCBub3QgZm91bmQKdGVzdC1uYW1lOiBieXRldmVjdG9yLT5iYXNlMzItc3RyaW5nCmxvY2F0aW9u OiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2Jhc2UzMi5zY206NDgK c291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImJ5dGV2ZWN0b3ItPmJhc2UzMi1zdHJpbmciCisg ICAoZm9sZCAobGFtYmRhIChidiBleHBlY3RlZCByZXN1bHQpCisgICAgICAgICAgIChhbmQgcmVz dWx0CisgICAgICAgICAgICAgICAgKHN0cmluZz0/CisgICAgICAgICAgICAgICAgICAoYnl0ZXZl Y3Rvci0+YmFzZTMyLXN0cmluZyBidikKKyAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKSkpCisg ICAgICAgICAjdAorICAgICAgICAgKG1hcCBzdHJpbmctPnV0ZjgKKyAgICAgICAgICAgICAgJygi IiAiZiIgImZvIiAiZm9vIiAiZm9vYiIgImZvb2JhIiAiZm9vYmFyIikpCisgICAgICAgICAnKCIi CisgICAgICAgICAgICJteSIKKyAgICAgICAgICAgIm16eHEiCisgICAgICAgICAgICJtenh3NiIK KyAgICAgICAgICAgIm16eHc2eXEiCisgICAgICAgICAgICJtenh3Nnl0YiIKKyAgICAgICAgICAg Im16eHc2eXRib2kiKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6 IGJhc2UzMi1zdHJpbmctPmJ5dGV2ZWN0b3IKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2 L2d1aXgvZ3VpeF93aXAvdGVzdHMvYmFzZTMyLnNjbTo2NQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0 CisgICAiYmFzZTMyLXN0cmluZy0+Ynl0ZXZlY3RvciIKKyAgIChldmVyeSAobGFtYmRhIChidikK KyAgICAgICAgICAgIChlcXVhbD8KKyAgICAgICAgICAgICAgKGJhc2UzMi1zdHJpbmctPmJ5dGV2 ZWN0b3IKKyAgICAgICAgICAgICAgICAoYnl0ZXZlY3Rvci0+YmFzZTMyLXN0cmluZyBidikpCisg ICAgICAgICAgICAgIGJ2KSkKKyAgICAgICAgICAobWFwIHN0cmluZy0+dXRmOAorICAgICAgICAg ICAgICAgJygiIiAiZiIgImZvIiAiZm9vIiAiZm9vYiIgImZvb2JhIiAiZm9vYmFyIikpKSkKYWN0 dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogbml4LWJhc2UzMi1zdHJpbmct PmJ5dGV2ZWN0b3IKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAv dGVzdHMvYmFzZTMyLnNjbTo3Mwpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAibml4LWJhc2Uz Mi1zdHJpbmctPmJ5dGV2ZWN0b3IiCisgICAoZXZlcnkgKGxhbWJkYSAoYnYpCisgICAgICAgICAg ICAoZXF1YWw/CisgICAgICAgICAgICAgIChuaXgtYmFzZTMyLXN0cmluZy0+Ynl0ZXZlY3Rvcgor ICAgICAgICAgICAgICAgIChieXRldmVjdG9yLT5uaXgtYmFzZTMyLXN0cmluZyBidikpCisgICAg ICAgICAgICAgIGJ2KSkKKyAgICAgICAgICAobWFwIHN0cmluZy0+dXRmOAorICAgICAgICAgICAg ICAgJygiIiAiZiIgImZvIiAiZm9vIiAiZm9vYiIgImZvb2JhIiAiZm9vYmFyIikpKSkKYWN0dWFs LXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogJmludmFsaWQtYmFzZTMyLWNoYXJh Y3Rlcgpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9i YXNlMzIuc2NtOjgxCnNvdXJjZToKKyAodGVzdC1lcXVhbAorICAgIiZpbnZhbGlkLWJhc2UzMi1j aGFyYWN0ZXIiCisgICAjXGUKKyAgIChndWFyZCAoYyAoKGludmFsaWQtYmFzZTMyLWNoYXJhY3Rl cj8gYykKKyAgICAgICAgICAgICAgKGludmFsaWQtYmFzZTMyLWNoYXJhY3Rlci12YWx1ZSBjKSkp CisgICAgICAgICAgKG5peC1iYXNlMzItc3RyaW5nLT5ieXRldmVjdG9yCisgICAgICAgICAgICAo c3RyaW5nLWFwcGVuZCAobWFrZS1zdHJpbmcgNTEgI1xhKSAiZSIpKSkpCmV4cGVjdGVkLXZhbHVl OiBlCmFjdHVhbC12YWx1ZTogZQpyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogc2hhMjU2ICYgYnl0 ZXZlY3Rvci0+bml4LWJhc2UzMi1zdHJpbmcKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2 L2d1aXgvZ3VpeF93aXAvdGVzdHMvYmFzZTMyLnNjbTo5Mgpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0 CisgICAic2hhMjU2ICYgYnl0ZXZlY3Rvci0+bml4LWJhc2UzMi1zdHJpbmciCisgICAobGV0ICgo ZmlsZSAoc2VhcmNoLXBhdGggJWxvYWQtcGF0aCAidGVzdHMvdGVzdC5kcnYiKSkpCisgICAgIChl cXVhbD8KKyAgICAgICAoYnl0ZXZlY3Rvci0+bml4LWJhc2UzMi1zdHJpbmcKKyAgICAgICAgIChz aGEyNTYKKyAgICAgICAgICAgKGNhbGwtd2l0aC1pbnB1dC1maWxlIGZpbGUgZ2V0LWJ5dGV2ZWN0 b3ItYWxsKSkpCisgICAgICAgKGxldCogKChjIChmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAj ZgorICAgICAgICAgICAgICAgICAgICJ+YSAtLXR5cGUgc2hhMjU2IC0tYmFzZTMyIC0tZmxhdCBc In5hXCIiCisgICAgICAgICAgICAgICAgICAgJW5peC1oYXNoCisgICAgICAgICAgICAgICAgICAg ZmlsZSkpCisgICAgICAgICAgICAgIChwIChvcGVuLWlucHV0LXBpcGUgYykpCisgICAgICAgICAg ICAgIChsIChyZWFkLWxpbmUgcCkpKQorICAgICAgICAgKGNsb3NlLXBpcGUgcCkKKyAgICAgICAg IGwpKSkpCnJlc3VsdDogU0tJUAoKClNLSVA6IHRlc3RzL2NwaW8KPT09PT09PT09PT09PT09PQoK dGVzdC1uYW1lOiBmaWxlLT5jcGlvLWhlYWRlciArIHdyaXRlLWNwaW8taGVhZGVyICsgcmVhZC1j cGlvLWhlYWRlcgpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90 ZXN0cy9jcGlvLnNjbTozNwpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiZmlsZS0+Y3Bpby1o ZWFkZXIgKyB3cml0ZS1jcGlvLWhlYWRlciArIHJlYWQtY3Bpby1oZWFkZXIiCisgICAobGV0KiAo KGZpbGUgKHNlYXJjaC1wYXRoICVsb2FkLXBhdGggImd1aXguc2NtIikpCisgICAgICAgICAgKGhl YWRlciAoZmlsZS0+Y3Bpby1oZWFkZXIgZmlsZSkpKQorICAgICAoY2FsbC13aXRoLXZhbHVlcwor ICAgICAgIChsYW1iZGEgKCkgKG9wZW4tYnl0ZXZlY3Rvci1vdXRwdXQtcG9ydCkpCisgICAgICAg KGxhbWJkYSAocG9ydCBnZXQtYnYpCisgICAgICAgICAod3JpdGUtY3Bpby1oZWFkZXIgaGVhZGVy IHBvcnQpCisgICAgICAgICAobGV0ICgocG9ydCAob3Blbi1ieXRldmVjdG9yLWlucHV0LXBvcnQg KGdldC1idikpKSkKKyAgICAgICAgICAgKGVxdWFsPyBoZWFkZXIgKHJlYWQtY3Bpby1oZWFkZXIg cG9ydCkpKSkpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogYml0 LWlkZW50aWNhbCB0byBHTlUgY3BpbydzIG91dHB1dApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVj aC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9jcGlvLnNjbTo0OQpzb3VyY2U6CisgKHRlc3QtYXNz ZXJ0CisgICAiYml0LWlkZW50aWNhbCB0byBHTlUgY3BpbydzIG91dHB1dCIKKyAgIChjYWxsLXdp dGgtdGVtcG9yYXJ5LW91dHB1dC1maWxlCisgICAgIChsYW1iZGEgKGxpbmsgXykKKyAgICAgICAo ZGVsZXRlLWZpbGUgbGluaykKKyAgICAgICAoc3ltbGluayAiY2hib3VpYiIgbGluaykKKyAgICAg ICAobGV0ICgoZmlsZXMgKGNvbnMqICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNh bm9uaWNhbGl6ZS1wYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXJuYW1lIChz ZWFyY2gtcGF0aCAlbG9hZC1wYXRoICJndWl4LnNjbSIpKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpbmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXAgKGNvbXBvc2UKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5vbmljYWxpemUtcGF0aAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXQgc2VhcmNoLXBhdGggJWxvYWQtcGF0aCA8 PikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoImd1aXguc2NtIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJndWl4L2J1aWxkL3N5c2NhbGxzLnNjbSIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3VpeC9wYWNrYWdlcy5zY20iKSkpKSkK KyAgICAgICAgIChjYWxsLXdpdGgtdGVtcG9yYXJ5LW91dHB1dC1maWxlCisgICAgICAgICAgIChs YW1iZGEgKHJlZi1maWxlIF8pCisgICAgICAgICAgICAgKGxldCAoKHBpcGUgKG9wZW4tcGlwZSoK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QRU5fV1JJVEUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICVjcGlvLXByb2dyYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItbyIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICItTyIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlZi1maWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUgiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAibmV3YyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLW51 bGwiKSkpCisgICAgICAgICAgICAgICAoZm9yLWVhY2gKKyAgICAgICAgICAgICAgICAgKGxhbWJk YSAoZmlsZSkgKGZvcm1hdCBwaXBlICJ+YVx4MDAiIGZpbGUpKQorICAgICAgICAgICAgICAgICBm aWxlcykKKyAgICAgICAgICAgICAgIChhbmQgKHplcm8/IChjbG9zZS1waXBlIHBpcGUpKQorICAg ICAgICAgICAgICAgICAgICAoY2FsbC13aXRoLXRlbXBvcmFyeS1vdXRwdXQtZmlsZQorICAgICAg ICAgICAgICAgICAgICAgIChsYW1iZGEgKGZpbGUgcG9ydCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICh3cml0ZS1jcGlvLWFyY2hpdmUgZmlsZXMgcG9ydCkKKyAgICAgICAgICAgICAgICAgICAg ICAgIChjbG9zZS1wb3J0IHBvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAob3IgKGZpbGU9 PyByZWYtZmlsZSBmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aHJvdyAnY3Bp by1hcmNoaXZlcy1kaWZmZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmls ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmLWZpbGUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoc3RhdDpzaXplIChzdGF0IHJlZi1maWxlKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHN0YXQ6c2l6ZSAoc3RhdCBmaWxlKSkpKSkpKSkpKSkpKSkKcmVz dWx0OiBTS0lQCgpyYW5kb20gc2VlZCBmb3IgdGVzdHM6IDE0Njk4MDkzMTEKClNLSVA6IHRlc3Rz L3NuaXgKPT09PT09PT09PT09PT09PQoKdGVzdC1uYW1lOiBmYWN0b3JpemUtdXJpCmxvY2F0aW9u OiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3NuaXguc2NtOjM2CnNv dXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJmYWN0b3JpemUtdXJpIgorICAgKGV2ZXJ5PworICAg ICAobWF0Y2gtbGFtYmRhCisgICAgICAgKCh1cmkgdmVyc2lvbiAnLT4gZXhwZWN0ZWQpCisgICAg ICAgIChlcXVhbD8gKGZhY3Rvcml6ZS11cmkgdXJpIHZlcnNpb24pIGV4cGVjdGVkKSkpCisgICAg ICcoKCJodHRwOi8vZXhhbXBsZS5jb20vZm9vLnRneiIKKyAgICAgICAgIjEuMCIKKyAgICAgICAg LT4KKyAgICAgICAgImh0dHA6Ly9leGFtcGxlLmNvbS9mb28udGd6IikKKyAgICAgICAoImh0dHA6 Ly9leGFtcGxlLmNvbS9mb28tMi44LnRneiIKKyAgICAgICAgIjIuOCIKKyAgICAgICAgLT4KKyAg ICAgICAgKCJodHRwOi8vZXhhbXBsZS5jb20vZm9vLSIgdmVyc2lvbiAiLnRneiIpKQorICAgICAg ICgiaHR0cDovL2V4YW1wbGUuY29tLzIuOC9mb28tMi44LnRneiIKKyAgICAgICAgIjIuOCIKKyAg ICAgICAgLT4KKyAgICAgICAgKCJodHRwOi8vZXhhbXBsZS5jb20vIgorICAgICAgICAgdmVyc2lv bgorICAgICAgICAgIi9mb28tIgorICAgICAgICAgdmVyc2lvbgorICAgICAgICAgIi50Z3oiKSkp KSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogbml4cGtncy0+Z3Vp eC1wYWNrYWdlCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rl c3RzL3NuaXguc2NtOjU0CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJuaXhwa2dzLT5ndWl4 LXBhY2thZ2UiCisgICAobWF0Y2ggKG5peHBrZ3MtPmd1aXgtcGFja2FnZQorICAgICAgICAgICAg JW5peHBrZ3MtZGlyZWN0b3J5CisgICAgICAgICAgICAiZ3VpbGUiKQorICAgICAgICAgICgoJ3Bh Y2thZ2UKKyAgICAgICAgICAgICgnbmFtZSAiZ3VpbGUiKQorICAgICAgICAgICAgKCd2ZXJzaW9u ICg/IHN0cmluZz8pKQorICAgICAgICAgICAgKCdzb3VyY2UgKCdvcmlnaW4gXyAuLi4pKQorICAg ICAgICAgICAgKCdidWlsZC1zeXN0ZW0gXykKKyAgICAgICAgICAgICgnaW5wdXRzICgncXVhc2lx dW90ZSAoaW5wdXRzIC4uLikpKQorICAgICAgICAgICAgKCdwcm9wYWdhdGVkLWlucHV0cyAoJ3F1 YXNpcXVvdGUgKHBpbnB1dHMgLi4uKSkpCisgICAgICAgICAgICAoJ2hvbWUtcGFnZSAoPyBzdHJp bmc/KSkKKyAgICAgICAgICAgICgnc3lub3BzaXMgKD8gc3RyaW5nPykpCisgICAgICAgICAgICAo J2Rlc2NyaXB0aW9uICg/IHN0cmluZz8pKQorICAgICAgICAgICAgKCdsaWNlbnNlICg/IHN5bWJv bD8pKSkKKyAgICAgICAgICAgKGFuZCAobWVtYmVyICcoImxpYmZmaSIgLGxpYmZmaSkgaW5wdXRz KQorICAgICAgICAgICAgICAgIChtZW1iZXIgJygiZ21wIiAsZ21wKSBwaW5wdXRzKQorICAgICAg ICAgICAgICAgICN0KSkKKyAgICAgICAgICAoeCAocGsgJ2ZhaWwgeCAjZikpKSkKcmVzdWx0OiBT S0lQCgoKRkFJTDogdGVzdHMvc3RvcmUKPT09PT09PT09PT09PT09PT0KCnRlc3QtbmFtZTogc3Rv cmUtcGF0aC1oYXNoLXBhcnQKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3Vp eF93aXAvdGVzdHMvc3RvcmUuc2NtOjUxCnNvdXJjZToKKyAodGVzdC1lcXVhbAorICAgInN0b3Jl LXBhdGgtaGFzaC1wYXJ0IgorICAgIjI4M2dxeTM5djNnOWR4ankyNnJ5bmwwemxzODJmbWNnIgor ICAgKHN0b3JlLXBhdGgtaGFzaC1wYXJ0CisgICAgIChzdHJpbmctYXBwZW5kCisgICAgICAgKCVz dG9yZS1wcmVmaXgpCisgICAgICAgIi8yODNncXkzOXYzZzlkeGp5MjZyeW5sMHpsczgyZm1jZy1n dWlsZS0yLjAuNyIpKSkKZXhwZWN0ZWQtdmFsdWU6IDI4M2dxeTM5djNnOWR4ankyNnJ5bmwwemxz ODJmbWNnCmFjdHVhbC12YWx1ZTogMjgzZ3F5Mzl2M2c5ZHhqeTI2cnlubDB6bHM4MmZtY2cKcmVz dWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHN0b3JlLXBhdGgtaGFzaC1wYXJ0ICNmCmxvY2F0aW9uOiAv aG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N0b3JlLnNjbTo1Nwpzb3Vy Y2U6CisgKHRlc3QtZXF1YWwKKyAgICJzdG9yZS1wYXRoLWhhc2gtcGFydCAjZiIKKyAgICNmCisg ICAoc3RvcmUtcGF0aC1oYXNoLXBhcnQKKyAgICAgKHN0cmluZy1hcHBlbmQKKyAgICAgICAoJXN0 b3JlLXByZWZpeCkKKyAgICAgICAiL2Zvby9iYXIvMjgzZ3F5Mzl2M2c5ZHhqeTI2cnlubDB6bHM4 MmZtY2ctZ3VpbGUtMi4wLjciKSkpCmV4cGVjdGVkLXZhbHVlOiAjZgphY3R1YWwtdmFsdWU6ICNm CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBzdG9yZS1wYXRoLXBhY2thZ2UtbmFtZQpsb2NhdGlv bjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zdG9yZS5zY206NjMK c291cmNlOgorICh0ZXN0LWVxdWFsCisgICAic3RvcmUtcGF0aC1wYWNrYWdlLW5hbWUiCisgICAi Z3VpbGUtMi4wLjciCisgICAoc3RvcmUtcGF0aC1wYWNrYWdlLW5hbWUKKyAgICAgKHN0cmluZy1h cHBlbmQKKyAgICAgICAoJXN0b3JlLXByZWZpeCkKKyAgICAgICAiLzI4M2dxeTM5djNnOWR4anky NnJ5bmwwemxzODJmbWNnLWd1aWxlLTIuMC43IikpKQpleHBlY3RlZC12YWx1ZTogZ3VpbGUtMi4w LjcKYWN0dWFsLXZhbHVlOiBndWlsZS0yLjAuNwpyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogc3Rv cmUtcGF0aC1wYWNrYWdlLW5hbWUgI2YKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1 aXgvZ3VpeF93aXAvdGVzdHMvc3RvcmUuc2NtOjY5CnNvdXJjZToKKyAodGVzdC1lcXVhbAorICAg InN0b3JlLXBhdGgtcGFja2FnZS1uYW1lICNmIgorICAgI2YKKyAgIChzdG9yZS1wYXRoLXBhY2th Z2UtbmFtZQorICAgICAiL2Zvby9iYXIvMjgzZ3F5Mzl2M2c5ZHhqeTI2cnlubDB6bHM4MmZtY2ct Z3VpbGUtMi4wLjciKSkKZXhwZWN0ZWQtdmFsdWU6ICNmCmFjdHVhbC12YWx1ZTogI2YKcmVzdWx0 OiBQQVNTCgp0ZXN0LW5hbWU6IGRpcmVjdC1zdG9yZS1wYXRoPwpsb2NhdGlvbjogL2hvbWUvc2Fw aWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zdG9yZS5zY206NzQKc291cmNlOgorICh0 ZXN0LWFzc2VydAorICAgImRpcmVjdC1zdG9yZS1wYXRoPyIKKyAgIChhbmQgKGRpcmVjdC1zdG9y ZS1wYXRoPworICAgICAgICAgIChzdHJpbmctYXBwZW5kCisgICAgICAgICAgICAoJXN0b3JlLXBy ZWZpeCkKKyAgICAgICAgICAgICIvMjgzZ3F5Mzl2M2c5ZHhqeTI2cnlubDB6bHM4MmZtY2ctZ3Vp bGUtMi4wLjciKSkKKyAgICAgICAgKG5vdCAoZGlyZWN0LXN0b3JlLXBhdGg/CisgICAgICAgICAg ICAgICAoc3RyaW5nLWFwcGVuZAorICAgICAgICAgICAgICAgICAoJXN0b3JlLXByZWZpeCkKKyAg ICAgICAgICAgICAgICAgIi8yODNncXkzOXYzZzlkeGp5MjZyeW5sMHpsczgyZm1jZy1ndWlsZS0y LjAuNy9iaW4vZ3VpbGUiKSkpCisgICAgICAgIChub3QgKGRpcmVjdC1zdG9yZS1wYXRoPyAoJXN0 b3JlLXByZWZpeCkpKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6 IHZhbGlkLXBhdGg/IGxpdmUKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3Vp eF93aXAvdGVzdHMvc3RvcmUuc2NtOjg2CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJ2YWxp ZC1wYXRoPyBsaXZlIgorICAgKGxldCAoKHAgKGFkZC10ZXh0LXRvLXN0b3JlICVzdG9yZSAiaGVs bG8iICJoZWxsbywgd29ybGQiKSkpCisgICAgICh2YWxpZC1wYXRoPyAlc3RvcmUgcCkpKQphY3R1 YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiB2YWxpZC1wYXRoPyBmYWxzZQps b2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zdG9yZS5z Y206OTAKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgInZhbGlkLXBhdGg/IGZhbHNlIgorICAg KG5vdCAodmFsaWQtcGF0aD8KKyAgICAgICAgICAlc3RvcmUKKyAgICAgICAgICAoc3RyaW5nLWFw cGVuZAorICAgICAgICAgICAgKCVzdG9yZS1wcmVmaXgpCisgICAgICAgICAgICAiLyIKKyAgICAg ICAgICAgIChtYWtlLXN0cmluZyAzMiAjXGUpCisgICAgICAgICAgICAiLWZvb2JhciIpKSkpCmFj dHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHZhbGlkLXBhdGg/IGVycm9y CmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N0b3Jl LnNjbTo5NQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAidmFsaWQtcGF0aD8gZXJyb3IiCisg ICAod2l0aC1zdG9yZQorICAgICBzCisgICAgIChndWFyZCAoYyAoKG5peC1wcm90b2NvbC1lcnJv cj8gYykgI3QpKQorICAgICAgICAgICAgKHZhbGlkLXBhdGg/IHMgImZvbyIpCisgICAgICAgICAg ICAjZikpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiB2YWxpZC1w YXRoPyByZWNvdmVyeQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dp cC90ZXN0cy9zdG9yZS5zY206MTAxCnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJ2YWxpZC1w YXRoPyByZWNvdmVyeSIKKyAgICh3aXRoLXN0b3JlCisgICAgIHMKKyAgICAgKGxldC1zeW50YXgg KCh0cnVlLWlmLWVycm9yCisgICAgICAgICAgICAgICAgICAgIChzeW50YXgtcnVsZXMgKCkKKyAg ICAgICAgICAgICAgICAgICAgICAoKF8gZXhwKQorICAgICAgICAgICAgICAgICAgICAgICAoZ3Vh cmQgKGMgKChuaXgtcHJvdG9jb2wtZXJyb3I/IGMpICN0KSkgZXhwICNmKSkpKSkKKyAgICAgICAo YW5kICh0cnVlLWlmLWVycm9yICh2YWxpZC1wYXRoPyBzICJmb28iKSkKKyAgICAgICAgICAgICh0 cnVlLWlmLWVycm9yICh2YWxpZC1wYXRoPyBzICJiYXIiKSkKKyAgICAgICAgICAgICh0cnVlLWlm LWVycm9yICh2YWxpZC1wYXRoPyBzICJiYXoiKSkKKyAgICAgICAgICAgICh0cnVlLWlmLWVycm9y ICh2YWxpZC1wYXRoPyBzICJjaGJvdWliIikpCisgICAgICAgICAgICAodmFsaWQtcGF0aD8KKyAg ICAgICAgICAgICAgcworICAgICAgICAgICAgICAoYWRkLXRleHQtdG8tc3RvcmUgcyAidmFsaWQi ICJ5ZWFoIikpKSkpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBo YXNoLXBhcnQtPnBhdGgKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93 aXAvdGVzdHMvc3RvcmUuc2NtOjExOApzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiaGFzaC1w YXJ0LT5wYXRoIgorICAgKGxldCAoKHAgKGFkZC10ZXh0LXRvLXN0b3JlICVzdG9yZSAiaGVsbG8i ICJoZWxsbywgd29ybGQiKSkpCisgICAgIChlcXVhbD8KKyAgICAgICAoaGFzaC1wYXJ0LT5wYXRo ICVzdG9yZSAoc3RvcmUtcGF0aC1oYXNoLXBhcnQgcCkpCisgICAgICAgcCkpKQphY3R1YWwtdmFs dWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBkZWFkLXBhdGhzCmxvY2F0aW9uOiAvaG9t ZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N0b3JlLnNjbToxMjMKc291cmNl OgorICh0ZXN0LWFzc2VydAorICAgImRlYWQtcGF0aHMiCisgICAobGV0ICgocCAoYWRkLXRleHQt dG8tc3RvcmUKKyAgICAgICAgICAgICAgJXN0b3JlCisgICAgICAgICAgICAgICJyYW5kb20tdGV4 dCIKKyAgICAgICAgICAgICAgKHJhbmRvbS10ZXh0KSkpKQorICAgICAoLT5ib29sIChtZW1iZXIg cCAoZGVhZC1wYXRocyAlc3RvcmUpKSkpKQpyYW5kb20gc2VlZCBmb3IgdGVzdHM6IDE0Njk4Mjg3 NDEKZmluZGluZyBnYXJiYWdlIGNvbGxlY3RvciByb290cy4uLgpyZW1vdmluZyBzdGFsZSB0ZW1w b3Jhcnkgcm9vdHMgZmlsZSBgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0 LXRtcC92YXIvNDU3OC90ZW1wcm9vdHMvNDU5MycKZGV0ZXJtaW5pbmcgbGl2ZS9kZWFkIHBhdGhz Li4uCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHBlcm1hbmVudCBy b290CmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N0 b3JlLnNjbToxNDQKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgInBlcm1hbmVudCByb290Igor ICAgKGxldCogKChwICh3aXRoLXN0b3JlCisgICAgICAgICAgICAgICBzdG9yZQorICAgICAgICAg ICAgICAgKGxldCAoKHAgKGFkZC10ZXh0LXRvLXN0b3JlCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICJyYW5kb20tdGV4dCIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgKHJhbmRvbS10ZXh0KSkpKQorICAgICAgICAgICAgICAgICAo YWRkLXBlcm1hbmVudC1yb290IHApCisgICAgICAgICAgICAgICAgIChhZGQtcGVybWFuZW50LXJv b3QgcCkKKyAgICAgICAgICAgICAgICAgcCkpKSkKKyAgICAgKGFuZCAobWVtYmVyIHAgKGxpdmUt cGF0aHMgJXN0b3JlKSkKKyAgICAgICAgICAoYmVnaW4KKyAgICAgICAgICAgIChyZW1vdmUtcGVy bWFuZW50LXJvb3QgcCkKKyAgICAgICAgICAgICgtPmJvb2wgKG1lbWJlciBwIChkZWFkLXBhdGhz ICVzdG9yZSkpKSkpKSkKZmluZGluZyBnYXJiYWdlIGNvbGxlY3RvciByb290cy4uLgpkZXRlcm1p bmluZyBsaXZlL2RlYWQgcGF0aHMuLi4KZmluZGluZyBnYXJiYWdlIGNvbGxlY3RvciByb290cy4u LgpkZXRlcm1pbmluZyBsaXZlL2RlYWQgcGF0aHMuLi4KYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6 IFBBU1MKCnRlc3QtbmFtZTogZGVhZCBwYXRoIGNhbiBiZSBleHBsaWNpdGx5IGNvbGxlY3RlZAps b2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zdG9yZS5z Y206MTU2CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJkZWFkIHBhdGggY2FuIGJlIGV4cGxp Y2l0bHkgY29sbGVjdGVkIgorICAgKGxldCAoKHAgKGFkZC10ZXh0LXRvLXN0b3JlCisgICAgICAg ICAgICAgICVzdG9yZQorICAgICAgICAgICAgICAicmFuZG9tLXRleHQiCisgICAgICAgICAgICAg IChyYW5kb20tdGV4dCkKKyAgICAgICAgICAgICAgJygpKSkpCisgICAgIChsZXQtdmFsdWVzCisg ICAgICAgKCgocGF0aHMgZnJlZWQpIChkZWxldGUtcGF0aHMgJXN0b3JlIChsaXN0IHApKSkpCisg ICAgICAgKGFuZCAoZXF1YWw/IHBhdGhzIChsaXN0IHApKQorICAgICAgICAgICAgKD4gZnJlZWQg MCkKKyAgICAgICAgICAgIChub3QgKGZpbGUtZXhpc3RzPyBwKSkpKSkpCmZpbmRpbmcgZ2FyYmFn ZSBjb2xsZWN0b3Igcm9vdHMuLi4KZGVsZXRpbmcgdW51c2VkIGxpbmtzLi4uCmFjdHVhbC12YWx1 ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGFkZC10ZXh0LXRvLXN0b3JlIHZzLiBkZWxl dGUtcGF0aHMKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVz dHMvc3RvcmUuc2NtOjE2NApzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiYWRkLXRleHQtdG8t c3RvcmUgdnMuIGRlbGV0ZS1wYXRocyIKKyAgICh3aXRoLXN0b3JlCisgICAgIHN0b3JlCisgICAg IChsZXQqICgodGV4dCAocmFuZG9tLXRleHQpKQorICAgICAgICAgICAgKHBhdGggKGFkZC10ZXh0 LXRvLXN0b3JlIHN0b3JlICJkZWxldGUtbWUiIHRleHQpKQorICAgICAgICAgICAgKGRlbGV0ZWQg KGRlbGV0ZS1wYXRocyBzdG9yZSAobGlzdCBwYXRoKSkpCisgICAgICAgICAgICAocGF0aDIgKGFk ZC10ZXh0LXRvLXN0b3JlIHN0b3JlICJkZWxldGUtbWUiIHRleHQpKSkKKyAgICAgICAoYW5kIChz dHJpbmc9PyBwYXRoIHBhdGgyKQorICAgICAgICAgICAgKGVxdWFsPyBkZWxldGVkIChsaXN0IHBh dGgpKQorICAgICAgICAgICAgKHZhbGlkLXBhdGg/IHN0b3JlIHBhdGgpCisgICAgICAgICAgICAo ZmlsZS1leGlzdHM/IHBhdGgpKSkpKQpmaW5kaW5nIGdhcmJhZ2UgY29sbGVjdG9yIHJvb3RzLi4u CnJlbW92aW5nIHN0YWxlIHRlbXBvcmFyeSByb290cyBmaWxlIGAvaG9tZS9zYXBpZW50ZWNoL0Rl di9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3Zhci80NTc4L3RlbXByb290cy80NjA5JwpkZWxldGlu ZyBgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9nemcz NW5rajBkYWZheTdkZHluYjlicXg1MDFkeWs2cy1kZWxldGUtbWUnCmRlbGV0aW5nIGAvaG9tZS9z YXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL3RyYXNoJwpkZWxldGlu ZyB1bnVzZWQgbGlua3MuLi4Kbm90ZTogY3VycmVudGx5IGhhcmQgbGlua2luZyBzYXZlcyAxOS42 NiBNaUIKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogYWRkLXRvLXN0 b3JlIHZzLiBkZWxldGUtcGF0aHMKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgv Z3VpeF93aXAvdGVzdHMvc3RvcmUuc2NtOjE3Nwpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAi YWRkLXRvLXN0b3JlIHZzLiBkZWxldGUtcGF0aHMiCisgICAod2l0aC1zdG9yZQorICAgICBzdG9y ZQorICAgICAobGV0KiAoKGZpbGUgKHNlYXJjaC1wYXRoICVsb2FkLXBhdGggImd1aXguc2NtIikp CisgICAgICAgICAgICAocGF0aCAoYWRkLXRvLXN0b3JlIHN0b3JlICJkZWxldGUtbWUiICN0ICJz aGEyNTYiIGZpbGUpKQorICAgICAgICAgICAgKGRlbGV0ZWQgKGRlbGV0ZS1wYXRocyBzdG9yZSAo bGlzdCBwYXRoKSkpCisgICAgICAgICAgICAocGF0aDIgKGFkZC10by1zdG9yZSBzdG9yZSAiZGVs ZXRlLW1lIiAjdCAic2hhMjU2IiBmaWxlKSkpCisgICAgICAgKGFuZCAoc3RyaW5nPT8gcGF0aCBw YXRoMikKKyAgICAgICAgICAgIChlcXVhbD8gZGVsZXRlZCAobGlzdCBwYXRoKSkKKyAgICAgICAg ICAgICh2YWxpZC1wYXRoPyBzdG9yZSBwYXRoKQorICAgICAgICAgICAgKGZpbGUtZXhpc3RzPyBw YXRoKSkpKSkKZmluZGluZyBnYXJiYWdlIGNvbGxlY3RvciByb290cy4uLgpyZW1vdmluZyBzdGFs ZSB0ZW1wb3Jhcnkgcm9vdHMgZmlsZSBgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dp cC90ZXN0LXRtcC92YXIvNDU3OC90ZW1wcm9vdHMvNDYyMScKZGVsZXRpbmcgYC9ob21lL3NhcGll bnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvNTduaHFsYnF2NWtoNHp3cjJ2 dmRrM3h5aDc0MXlucmktZGVsZXRlLW1lJwpkZWxldGluZyBgL2hvbWUvc2FwaWVudGVjaC9EZXYv Z3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS90cmFzaCcKZGVsZXRpbmcgdW51c2VkIGxpbmtz Li4uCm5vdGU6IGN1cnJlbnRseSBoYXJkIGxpbmtpbmcgc2F2ZXMgMTkuNjYgTWlCCmFjdHVhbC12 YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHJlZmVyZW5jZXMKbG9jYXRpb246IC9o b21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvc3RvcmUuc2NtOjE4OQpzb3Vy Y2U6CisgKHRlc3QtYXNzZXJ0CisgICAicmVmZXJlbmNlcyIKKyAgIChsZXQqICgodDEgKGFkZC10 ZXh0LXRvLXN0b3JlCisgICAgICAgICAgICAgICAgJXN0b3JlCisgICAgICAgICAgICAgICAgInJh bmRvbTEiCisgICAgICAgICAgICAgICAgKHJhbmRvbS10ZXh0KSkpCisgICAgICAgICAgKHQyIChh ZGQtdGV4dC10by1zdG9yZQorICAgICAgICAgICAgICAgICVzdG9yZQorICAgICAgICAgICAgICAg ICJyYW5kb20yIgorICAgICAgICAgICAgICAgIChyYW5kb20tdGV4dCkKKyAgICAgICAgICAgICAg ICAobGlzdCB0MSkpKSkKKyAgICAgKGFuZCAoZXF1YWw/IChsaXN0IHQxKSAocmVmZXJlbmNlcyAl c3RvcmUgdDIpKQorICAgICAgICAgIChlcXVhbD8gKGxpc3QgdDIpIChyZWZlcnJlcnMgJXN0b3Jl IHQxKSkKKyAgICAgICAgICAobnVsbD8gKHJlZmVyZW5jZXMgJXN0b3JlIHQxKSkKKyAgICAgICAg ICAobnVsbD8gKHJlZmVycmVycyAlc3RvcmUgdDIpKSkpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3Vs dDogUEFTUwoKdGVzdC1uYW1lOiByZWZlcmVuY2VzL3N1YnN0aXR1dGVzIG1pc3NpbmcgcmVmZXJl bmNlIGluZm8KbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVz dHMvc3RvcmUuc2NtOjE5OQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAicmVmZXJlbmNlcy9z dWJzdGl0dXRlcyBtaXNzaW5nIHJlZmVyZW5jZSBpbmZvIgorICAgKHdpdGgtc3RvcmUKKyAgICAg cworICAgICAoc2V0LWJ1aWxkLW9wdGlvbnMgcyAjOnVzZS1zdWJzdGl0dXRlcz8gI2YpCisgICAg IChndWFyZCAoYyAoKG5peC1wcm90b2NvbC1lcnJvcj8gYykgI3QpKQorICAgICAgICAgICAgKGxl dCogKChiIChhZGQtdG8tc3RvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHMKKyAgICAgICAg ICAgICAgICAgICAgICAgICJiYXNoIgorICAgICAgICAgICAgICAgICAgICAgICAgI3QKKyAgICAg ICAgICAgICAgICAgICAgICAgICJzaGEyNTYiCisgICAgICAgICAgICAgICAgICAgICAgICAoc2Vh cmNoLWJvb3RzdHJhcC1iaW5hcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2giCisg ICAgICAgICAgICAgICAgICAgICAgICAgICglY3VycmVudC1zeXN0ZW0pKSkpCisgICAgICAgICAg ICAgICAgICAgKGQgKGRlcml2YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHMKKyAgICAg ICAgICAgICAgICAgICAgICAgICJ0aGUtdGhpbmciCisgICAgICAgICAgICAgICAgICAgICAgICBi CisgICAgICAgICAgICAgICAgICAgICAgICAnKCItLWhlbHAiKQorICAgICAgICAgICAgICAgICAg ICAgICAgIzppbnB1dHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGAoKCxiKSkpKSkKKyAgICAg ICAgICAgICAgKHJlZmVyZW5jZXMvc3Vic3RpdHV0ZXMKKyAgICAgICAgICAgICAgICBzCisgICAg ICAgICAgICAgICAgKGxpc3QgKGRlcml2YXRpb24tPm91dHB1dC1wYXRoIGQpIGIpKQorICAgICAg ICAgICAgICAjZikpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTog cmVmZXJlbmNlcy9zdWJzdGl0dXRlcyB3aXRoIHN1YnN0aXR1dGUgaW5mbwpsb2NhdGlvbjogL2hv bWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zdG9yZS5zY206MjExCnNvdXJj ZToKKyAodGVzdC1hc3NlcnQKKyAgICJyZWZlcmVuY2VzL3N1YnN0aXR1dGVzIHdpdGggc3Vic3Rp dHV0ZSBpbmZvIgorICAgKHdpdGgtc3RvcmUKKyAgICAgcworICAgICAoc2V0LWJ1aWxkLW9wdGlv bnMgcyAjOnVzZS1zdWJzdGl0dXRlcz8gI3QpCisgICAgIChsZXQqICgodDEgKGFkZC10ZXh0LXRv LXN0b3JlIHMgInJhbmRvbTEiIChyYW5kb20tdGV4dCkpKQorICAgICAgICAgICAgKHQyIChhZGQt dGV4dC10by1zdG9yZQorICAgICAgICAgICAgICAgICAgcworICAgICAgICAgICAgICAgICAgInJh bmRvbTIiCisgICAgICAgICAgICAgICAgICAocmFuZG9tLXRleHQpCisgICAgICAgICAgICAgICAg ICAobGlzdCB0MSkpKQorICAgICAgICAgICAgKHQzIChhZGQtdGV4dC10by1zdG9yZQorICAgICAg ICAgICAgICAgICAgcworICAgICAgICAgICAgICAgICAgImJ1aWxkIgorICAgICAgICAgICAgICAg ICAgImVjaG8gLW4gJHQyID4gJG91dCIpKQorICAgICAgICAgICAgKGIgKGFkZC10by1zdG9yZQor ICAgICAgICAgICAgICAgICBzCisgICAgICAgICAgICAgICAgICJiYXNoIgorICAgICAgICAgICAg ICAgICAjdAorICAgICAgICAgICAgICAgICAic2hhMjU2IgorICAgICAgICAgICAgICAgICAoc2Vh cmNoLWJvb3RzdHJhcC1iaW5hcnkKKyAgICAgICAgICAgICAgICAgICAiYmFzaCIKKyAgICAgICAg ICAgICAgICAgICAoJWN1cnJlbnQtc3lzdGVtKSkpKQorICAgICAgICAgICAgKGQgKGRlcml2YXRp b24KKyAgICAgICAgICAgICAgICAgcworICAgICAgICAgICAgICAgICAidGhlLXRoaW5nIgorICAg ICAgICAgICAgICAgICBiCisgICAgICAgICAgICAgICAgIGAoIi1lIiAsdDMpCisgICAgICAgICAg ICAgICAgICM6aW5wdXRzCisgICAgICAgICAgICAgICAgIGAoKCxiKSAoLHQzKSAoLHQyKSkKKyAg ICAgICAgICAgICAgICAgIzplbnYtdmFycworICAgICAgICAgICAgICAgICBgKCgidDIiIHVucXVv dGUgdDIpKSkpCisgICAgICAgICAgICAobyAoZGVyaXZhdGlvbi0+b3V0cHV0LXBhdGggZCkpKQor ICAgICAgICh3aXRoLWRlcml2YXRpb24tbmFyaW5mbworICAgICAgICAgZAorICAgICAgICAgKHNo YTI1NiA9PiAoc2hhMjU2IChzdHJpbmctPnV0ZjggdDIpKSkKKyAgICAgICAgIChyZWZlcmVuY2Vz ID0+IChsaXN0IHQyKSkKKyAgICAgICAgIChlcXVhbD8KKyAgICAgICAgICAgKHJlZmVyZW5jZXMv c3Vic3RpdHV0ZXMgcyAobGlzdCBvIHQzIHQyIHQxKSkKKyAgICAgICAgICAgYCgoLHQyKSAoKSAo LHQxKSAoKSkpKSkpKQpzdWJzdGl0dXRlOiB3YXJuaW5nOiBhdXRoZW50aWNhdGlvbiBhbmQgYXV0 aG9yaXphdGlvbiBvZiBzdWJzdGl0dXRlcyBkaXNhYmxlZCEKc3Vic3RpdHV0ZTogZ3VpeCBzdWJz dGl0dXRlOiB3YXJuaW5nOiBBQ0wgZm9yIGFyY2hpdmUgaW1wb3J0cyBzZWVtcyB0byBiZSB1bmlu aXRpYWxpemVkLCBzdWJzdGl0dXRlcyBtYXkgYmUgdW5hdmFpbGFibGUKYWN0dWFsLXZhbHVlOiAj dApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogc3Vic3RpdHV0YWJsZS1wYXRoLWluZm8gd2hlbiBz dWJzdGl0dXRlcyBhcmUgdHVybmVkIG9mZgpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYv Z3VpeC9ndWl4X3dpcC90ZXN0cy9zdG9yZS5zY206MjM1CnNvdXJjZToKKyAodGVzdC1lcXVhbAor ICAgInN1YnN0aXR1dGFibGUtcGF0aC1pbmZvIHdoZW4gc3Vic3RpdHV0ZXMgYXJlIHR1cm5lZCBv ZmYiCisgICAnKCkKKyAgICh3aXRoLXN0b3JlCisgICAgIHMKKyAgICAgKHNldC1idWlsZC1vcHRp b25zIHMgIzp1c2Utc3Vic3RpdHV0ZXM/ICNmKQorICAgICAobGV0KiAoKGIgKGFkZC10by1zdG9y ZQorICAgICAgICAgICAgICAgICBzCisgICAgICAgICAgICAgICAgICJiYXNoIgorICAgICAgICAg ICAgICAgICAjdAorICAgICAgICAgICAgICAgICAic2hhMjU2IgorICAgICAgICAgICAgICAgICAo c2VhcmNoLWJvb3RzdHJhcC1iaW5hcnkKKyAgICAgICAgICAgICAgICAgICAiYmFzaCIKKyAgICAg ICAgICAgICAgICAgICAoJWN1cnJlbnQtc3lzdGVtKSkpKQorICAgICAgICAgICAgKGQgKGRlcml2 YXRpb24KKyAgICAgICAgICAgICAgICAgcworICAgICAgICAgICAgICAgICAidGhlLXRoaW5nIgor ICAgICAgICAgICAgICAgICBiCisgICAgICAgICAgICAgICAgICcoIi0tdmVyc2lvbiIpCisgICAg ICAgICAgICAgICAgICM6aW5wdXRzCisgICAgICAgICAgICAgICAgIGAoKCxiKSkpKQorICAgICAg ICAgICAgKG8gKGRlcml2YXRpb24tPm91dHB1dC1wYXRoIGQpKSkKKyAgICAgICAod2l0aC1kZXJp dmF0aW9uLW5hcmluZm8KKyAgICAgICAgIGQKKyAgICAgICAgIChzdWJzdGl0dXRhYmxlLXBhdGgt aW5mbyBzIChsaXN0IG8pKSkpKSkKZXhwZWN0ZWQtdmFsdWU6ICgpCmFjdHVhbC12YWx1ZTogKCkK cmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHN1YnN0aXR1dGFibGUtcGF0aHMgd2hlbiBzdWJzdGl0 dXRlcyBhcmUgdHVybmVkIG9mZgpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9n dWl4X3dpcC90ZXN0cy9zdG9yZS5zY206MjQ4CnNvdXJjZToKKyAodGVzdC1lcXVhbAorICAgInN1 YnN0aXR1dGFibGUtcGF0aHMgd2hlbiBzdWJzdGl0dXRlcyBhcmUgdHVybmVkIG9mZiIKKyAgICco KQorICAgKHdpdGgtc3RvcmUKKyAgICAgcworICAgICAoc2V0LWJ1aWxkLW9wdGlvbnMgcyAjOnVz ZS1zdWJzdGl0dXRlcz8gI2YpCisgICAgIChsZXQqICgoYiAoYWRkLXRvLXN0b3JlCisgICAgICAg ICAgICAgICAgIHMKKyAgICAgICAgICAgICAgICAgImJhc2giCisgICAgICAgICAgICAgICAgICN0 CisgICAgICAgICAgICAgICAgICJzaGEyNTYiCisgICAgICAgICAgICAgICAgIChzZWFyY2gtYm9v dHN0cmFwLWJpbmFyeQorICAgICAgICAgICAgICAgICAgICJiYXNoIgorICAgICAgICAgICAgICAg ICAgICglY3VycmVudC1zeXN0ZW0pKSkpCisgICAgICAgICAgICAoZCAoZGVyaXZhdGlvbgorICAg ICAgICAgICAgICAgICBzCisgICAgICAgICAgICAgICAgICJ0aGUtdGhpbmciCisgICAgICAgICAg ICAgICAgIGIKKyAgICAgICAgICAgICAgICAgJygiLS12ZXJzaW9uIikKKyAgICAgICAgICAgICAg ICAgIzppbnB1dHMKKyAgICAgICAgICAgICAgICAgYCgoLGIpKSkpCisgICAgICAgICAgICAobyAo ZGVyaXZhdGlvbi0+b3V0cHV0LXBhdGggZCkpKQorICAgICAgICh3aXRoLWRlcml2YXRpb24tbmFy aW5mbworICAgICAgICAgZAorICAgICAgICAgKHN1YnN0aXR1dGFibGUtcGF0aHMgcyAobGlzdCBv KSkpKSkpCmV4cGVjdGVkLXZhbHVlOiAoKQphY3R1YWwtdmFsdWU6ICgpCnJlc3VsdDogUEFTUwoK dGVzdC1uYW1lOiByZXF1aXNpdGVzCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4 L2d1aXhfd2lwL3Rlc3RzL3N0b3JlLnNjbToyNjEKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAg InJlcXVpc2l0ZXMiCisgICAobGV0KiAoKHQxIChhZGQtdGV4dC10by1zdG9yZQorICAgICAgICAg ICAgICAgICVzdG9yZQorICAgICAgICAgICAgICAgICJyYW5kb20xIgorICAgICAgICAgICAgICAg IChyYW5kb20tdGV4dCkKKyAgICAgICAgICAgICAgICAnKCkpKQorICAgICAgICAgICh0MiAoYWRk LXRleHQtdG8tc3RvcmUKKyAgICAgICAgICAgICAgICAlc3RvcmUKKyAgICAgICAgICAgICAgICAi cmFuZG9tMiIKKyAgICAgICAgICAgICAgICAocmFuZG9tLXRleHQpCisgICAgICAgICAgICAgICAg KGxpc3QgdDEpKSkKKyAgICAgICAgICAodDMgKGFkZC10ZXh0LXRvLXN0b3JlCisgICAgICAgICAg ICAgICAgJXN0b3JlCisgICAgICAgICAgICAgICAgInJhbmRvbTMiCisgICAgICAgICAgICAgICAg KHJhbmRvbS10ZXh0KQorICAgICAgICAgICAgICAgIChsaXN0IHQyKSkpCisgICAgICAgICAgKHQ0 IChhZGQtdGV4dC10by1zdG9yZQorICAgICAgICAgICAgICAgICVzdG9yZQorICAgICAgICAgICAg ICAgICJyYW5kb200IgorICAgICAgICAgICAgICAgIChyYW5kb20tdGV4dCkKKyAgICAgICAgICAg ICAgICAobGlzdCB0MSB0MykpKSkKKyAgICAgKGRlZmluZSAoc2FtZT8geCB5KQorICAgICAgIChh bmQgKD0gKGxlbmd0aCB4KSAobGVuZ3RoIHkpKQorICAgICAgICAgICAgKGxzZXQ9IGVxdWFsPyB4 IHkpKSkKKyAgICAgKGFuZCAoc2FtZT8gKHJlcXVpc2l0ZXMgJXN0b3JlIChsaXN0IHQxKSkgKGxp c3QgdDEpKQorICAgICAgICAgIChzYW1lPyAocmVxdWlzaXRlcyAlc3RvcmUgKGxpc3QgdDIpKQor ICAgICAgICAgICAgICAgICAobGlzdCB0MSB0MikpCisgICAgICAgICAgKHNhbWU/IChyZXF1aXNp dGVzICVzdG9yZSAobGlzdCB0MykpCisgICAgICAgICAgICAgICAgIChsaXN0IHQxIHQyIHQzKSkK KyAgICAgICAgICAoc2FtZT8gKHJlcXVpc2l0ZXMgJXN0b3JlIChsaXN0IHQ0KSkKKyAgICAgICAg ICAgICAgICAgKGxpc3QgdDEgdDIgdDMgdDQpKQorICAgICAgICAgIChzYW1lPyAocmVxdWlzaXRl cyAlc3RvcmUgKGxpc3QgdDEgdDIgdDMgdDQpKQorICAgICAgICAgICAgICAgICAobGlzdCB0MSB0 MiB0MyB0NCkpKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGRl cml2ZXJzCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3Rz L3N0b3JlLnNjbToyODEKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImRlcml2ZXJzIgorICAg KGxldCogKChiIChhZGQtdGV4dC10by1zdG9yZQorICAgICAgICAgICAgICAgJXN0b3JlCisgICAg ICAgICAgICAgICAiYnVpbGQiCisgICAgICAgICAgICAgICAiZWNobyAkZm9vID4gJG91dCIKKyAg ICAgICAgICAgICAgICcoKSkpCisgICAgICAgICAgKHMgKGFkZC10by1zdG9yZQorICAgICAgICAg ICAgICAgJXN0b3JlCisgICAgICAgICAgICAgICAiYmFzaCIKKyAgICAgICAgICAgICAgICN0Cisg ICAgICAgICAgICAgICAic2hhMjU2IgorICAgICAgICAgICAgICAgKHNlYXJjaC1ib290c3RyYXAt YmluYXJ5CisgICAgICAgICAgICAgICAgICJiYXNoIgorICAgICAgICAgICAgICAgICAoJWN1cnJl bnQtc3lzdGVtKSkpKQorICAgICAgICAgIChkIChkZXJpdmF0aW9uCisgICAgICAgICAgICAgICAl c3RvcmUKKyAgICAgICAgICAgICAgICJ0aGUtdGhpbmciCisgICAgICAgICAgICAgICBzCisgICAg ICAgICAgICAgICBgKCItZSIgLGIpCisgICAgICAgICAgICAgICAjOmVudi12YXJzCisgICAgICAg ICAgICAgICBgKCgiZm9vIiB1bnF1b3RlIChyYW5kb20tdGV4dCkpKQorICAgICAgICAgICAgICAg IzppbnB1dHMKKyAgICAgICAgICAgICAgIGAoKCxiKSAoLHMpKSkpCisgICAgICAgICAgKG8gKGRl cml2YXRpb24tPm91dHB1dC1wYXRoIGQpKSkKKyAgICAgKGFuZCAoYnVpbGQtZGVyaXZhdGlvbnMg JXN0b3JlIChsaXN0IGQpKQorICAgICAgICAgIChlcXVhbD8KKyAgICAgICAgICAgIChxdWVyeS1k ZXJpdmF0aW9uLW91dHB1dHMKKyAgICAgICAgICAgICAgJXN0b3JlCisgICAgICAgICAgICAgIChk ZXJpdmF0aW9uLWZpbGUtbmFtZSBkKSkKKyAgICAgICAgICAgIChsaXN0IG8pKQorICAgICAgICAg IChlcXVhbD8KKyAgICAgICAgICAgICh2YWxpZC1kZXJpdmVycyAlc3RvcmUgbykKKyAgICAgICAg ICAgIChsaXN0IChkZXJpdmF0aW9uLWZpbGUtbmFtZSBkKSkpKSkpCkAgYnVpbGQtc3RhcnRlZCAv aG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL2tiYXpxMTNr dzA2aWoybXM0YXZid2JqeXg1d2ZmZjFuLXRoZS10aGluZy5kcnYgLSB4ODZfNjQtbGludXggL2hv bWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC92YXIvbG9nL2d1aXgvZHJ2 cy9rYi8vYXpxMTNrdzA2aWoybXM0YXZid2JqeXg1d2ZmZjFuLXRoZS10aGluZy5kcnYuYnoyCkAg YnVpbGQtc3VjY2VlZGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10 bXAvc3RvcmUva2JhenExM2t3MDZpajJtczRhdmJ3Ymp5eDV3ZmZmMW4tdGhlLXRoaW5nLmRydiAt CmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHRvcG9sb2dpY2FsbHkt c29ydGVkLCBvbmUgaXRlbQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4 X3dpcC90ZXN0cy9zdG9yZS5zY206Mjk3CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJ0b3Bv bG9naWNhbGx5LXNvcnRlZCwgb25lIGl0ZW0iCisgICAobGV0KiAoKGEgKGFkZC10ZXh0LXRvLXN0 b3JlICVzdG9yZSAiYSIgImEiKSkKKyAgICAgICAgICAoYiAoYWRkLXRleHQtdG8tc3RvcmUgJXN0 b3JlICJiIiAiYiIgKGxpc3QgYSkpKQorICAgICAgICAgIChjIChhZGQtdGV4dC10by1zdG9yZSAl c3RvcmUgImMiICJjIiAobGlzdCBiKSkpCisgICAgICAgICAgKGQgKGFkZC10ZXh0LXRvLXN0b3Jl ICVzdG9yZSAiZCIgImQiIChsaXN0IGMpKSkKKyAgICAgICAgICAocyAodG9wb2xvZ2ljYWxseS1z b3J0ZWQgJXN0b3JlIChsaXN0IGQpKSkpCisgICAgIChlcXVhbD8gcyAobGlzdCBhIGIgYyBkKSkp KQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiB0b3BvbG9naWNhbGx5 LXNvcnRlZCwgc2V2ZXJhbCBpdGVtcwpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3Vp eC9ndWl4X3dpcC90ZXN0cy9zdG9yZS5zY206MzA1CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAg ICJ0b3BvbG9naWNhbGx5LXNvcnRlZCwgc2V2ZXJhbCBpdGVtcyIKKyAgIChsZXQqICgoYSAoYWRk LXRleHQtdG8tc3RvcmUgJXN0b3JlICJhIiAiYSIpKQorICAgICAgICAgIChiIChhZGQtdGV4dC10 by1zdG9yZSAlc3RvcmUgImIiICJiIiAobGlzdCBhKSkpCisgICAgICAgICAgKGMgKGFkZC10ZXh0 LXRvLXN0b3JlICVzdG9yZSAiYyIgImMiIChsaXN0IGIpKSkKKyAgICAgICAgICAoZCAoYWRkLXRl eHQtdG8tc3RvcmUgJXN0b3JlICJkIiAiZCIgKGxpc3QgYykpKQorICAgICAgICAgIChzMSAodG9w b2xvZ2ljYWxseS1zb3J0ZWQgJXN0b3JlIChsaXN0IGQgYSBjIGIpKSkKKyAgICAgICAgICAoczIg KHRvcG9sb2dpY2FsbHktc29ydGVkICVzdG9yZSAobGlzdCBiIGQgYyBhIGIgZCkpKSkKKyAgICAg KGVxdWFsPyBzMSBzMiAobGlzdCBhIGIgYyBkKSkpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDog UEFTUwoKdGVzdC1uYW1lOiB0b3BvbG9naWNhbGx5LXNvcnRlZCwgbW9yZSBkaWZmaWN1bHQKbG9j YXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvc3RvcmUuc2Nt OjMxNApzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAidG9wb2xvZ2ljYWxseS1zb3J0ZWQsIG1v cmUgZGlmZmljdWx0IgorICAgKGxldCogKChhIChhZGQtdGV4dC10by1zdG9yZSAlc3RvcmUgImEi ICJhIikpCisgICAgICAgICAgKGIgKGFkZC10ZXh0LXRvLXN0b3JlICVzdG9yZSAiYiIgImIiIChs aXN0IGEpKSkKKyAgICAgICAgICAoYyAoYWRkLXRleHQtdG8tc3RvcmUgJXN0b3JlICJjIiAiYyIg KGxpc3QgYikpKQorICAgICAgICAgIChkIChhZGQtdGV4dC10by1zdG9yZSAlc3RvcmUgImQiICJk IiAobGlzdCBjKSkpCisgICAgICAgICAgKHcgKGFkZC10ZXh0LXRvLXN0b3JlICVzdG9yZSAidyIg InciKSkKKyAgICAgICAgICAoeCAoYWRkLXRleHQtdG8tc3RvcmUgJXN0b3JlICJ4IiAieCIgKGxp c3QgdykpKQorICAgICAgICAgICh5IChhZGQtdGV4dC10by1zdG9yZSAlc3RvcmUgInkiICJ5IiAo bGlzdCB4IGQpKSkKKyAgICAgICAgICAoczEgKHRvcG9sb2dpY2FsbHktc29ydGVkICVzdG9yZSAo bGlzdCB5KSkpCisgICAgICAgICAgKHMyICh0b3BvbG9naWNhbGx5LXNvcnRlZCAlc3RvcmUgKGxp c3QgYyB5KSkpCisgICAgICAgICAgKHMzICh0b3BvbG9naWNhbGx5LXNvcnRlZAorICAgICAgICAg ICAgICAgICVzdG9yZQorICAgICAgICAgICAgICAgIChjb25zIHkgKHJlZmVyZW5jZXMgJXN0b3Jl IHkpKSkpKQorICAgICAobGV0KiAoKHgtdGhlbi1kPworICAgICAgICAgICAgICAoZXF1YWw/IChy ZWZlcmVuY2VzICVzdG9yZSB5KSAobGlzdCB4IGQpKSkpCisgICAgICAgKGFuZCAoZXF1YWw/Cisg ICAgICAgICAgICAgIHMxCisgICAgICAgICAgICAgIChpZiB4LXRoZW4tZD8KKyAgICAgICAgICAg ICAgICAobGlzdCB3IHggYSBiIGMgZCB5KQorICAgICAgICAgICAgICAgIChsaXN0IGEgYiBjIGQg dyB4IHkpKSkKKyAgICAgICAgICAgIChlcXVhbD8KKyAgICAgICAgICAgICAgczIKKyAgICAgICAg ICAgICAgKGlmIHgtdGhlbi1kPworICAgICAgICAgICAgICAgIChsaXN0IGEgYiBjIHcgeCBkIHkp CisgICAgICAgICAgICAgICAgKGxpc3QgYSBiIGMgZCB3IHggeSkpKQorICAgICAgICAgICAgKGxz ZXQ9IHN0cmluZz0/IHMxIHMzKSkpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRl c3QtbmFtZTogY3VycmVudC1idWlsZC1vdXRwdXQtcG9ydCwgVVRGLTgKbG9jYXRpb246IC9ob21l L3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvc3RvcmUuc2NtOjMzOApzb3VyY2U6 CisgKHRlc3QtYXNzZXJ0CisgICAiY3VycmVudC1idWlsZC1vdXRwdXQtcG9ydCwgVVRGLTgiCisg ICAoc3RyaW5nLWNvbnRhaW5zCisgICAgICh3aXRoLWZsdWlkcworICAgICAgICgoJWRlZmF1bHQt cG9ydC1lbmNvZGluZyAiVVRGLTgiKSkKKyAgICAgICAoY2FsbC13aXRoLW91dHB1dC1zdHJpbmcK KyAgICAgICAgIChsYW1iZGEgKHBvcnQpCisgICAgICAgICAgIChwYXJhbWV0ZXJpemUKKyAgICAg ICAgICAgICAoKGN1cnJlbnQtYnVpbGQtb3V0cHV0LXBvcnQgcG9ydCkpCisgICAgICAgICAgICAg KGxldCogKChzICJIZXJlXHUyMDE5cyBhIEdyZWVrIGxldHRlcjogXHUwM2JiLiIpCisgICAgICAg ICAgICAgICAgICAgIChkIChidWlsZC1leHByZXNzaW9uLT5kZXJpdmF0aW9uCisgICAgICAgICAg ICAgICAgICAgICAgICAgJXN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgImZvbyIKKyAg ICAgICAgICAgICAgICAgICAgICAgICBgKGRpc3BsYXkgLHMpCisgICAgICAgICAgICAgICAgICAg ICAgICAgIzpndWlsZS1mb3ItYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAocGFja2Fn ZS1kZXJpdmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAlYm9vdHN0cmFwLWd1aWxlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAoJWN1cnJlbnQtc3lzdGVtKSkpKSkKKyAgICAgICAgICAgICAgIChndWFyZCAoYyAoKG5peC1w cm90b2NvbC1lcnJvcj8gYykgI3QpKQorICAgICAgICAgICAgICAgICAgICAgIChidWlsZC1kZXJp dmF0aW9ucyAlc3RvcmUgKGxpc3QgZCkpKSkpKSkpCisgICAgICJIZXJlXHUyMDE5cyBhIEdyZWVr IGxldHRlcjogXHUwM2JiLiIpKQphY3R1YWwtdmFsdWU6IDIzMQpyZXN1bHQ6IFBBU1MKCnRlc3Qt bmFtZTogY3VycmVudC1idWlsZC1vdXRwdXQtcG9ydCwgVVRGLTggKyBnYXJiYWdlCmxvY2F0aW9u OiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N0b3JlLnNjbTozNTQK c291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImN1cnJlbnQtYnVpbGQtb3V0cHV0LXBvcnQsIFVU Ri04ICsgZ2FyYmFnZSIKKyAgIChzdHJpbmctY29udGFpbnMKKyAgICAgKHdpdGgtZmx1aWRzCisg ICAgICAgKCglZGVmYXVsdC1wb3J0LWVuY29kaW5nICJVVEYtOCIpKQorICAgICAgIChjYWxsLXdp dGgtb3V0cHV0LXN0cmluZworICAgICAgICAgKGxhbWJkYSAocG9ydCkKKyAgICAgICAgICAgKHBh cmFtZXRlcml6ZQorICAgICAgICAgICAgICgoY3VycmVudC1idWlsZC1vdXRwdXQtcG9ydCBwb3J0 KSkKKyAgICAgICAgICAgICAobGV0ICgoZCAoYnVpbGQtZXhwcmVzc2lvbi0+ZGVyaXZhdGlvbgor ICAgICAgICAgICAgICAgICAgICAgICAgJXN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICAi Zm9vIgorICAgICAgICAgICAgICAgICAgICAgICAgYChiZWdpbgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHVzZS1tb2R1bGVzIChybnJzIGlvIHBvcnRzKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIChkaXNwbGF5ICJnYXJiYWdlOiAiKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHB1dC1ieXRldmVjdG9yIChjdXJyZW50LW91dHB1dC1wb3J0KSAjdnU4KDEyOCkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAoZGlzcGxheSAibGFtYmRhOiBcdTAzYmJcbiIpKQorICAg ICAgICAgICAgICAgICAgICAgICAgIzpndWlsZS1mb3ItYnVpbGQKKyAgICAgICAgICAgICAgICAg ICAgICAgIChwYWNrYWdlLWRlcml2YXRpb24gJXN0b3JlICVib290c3RyYXAtZ3VpbGUpKSkpCisg ICAgICAgICAgICAgICAoZ3VhcmQgKGMgKChuaXgtcHJvdG9jb2wtZXJyb3I/IGMpICN0KSkKKyAg ICAgICAgICAgICAgICAgICAgICAoYnVpbGQtZGVyaXZhdGlvbnMgJXN0b3JlIChsaXN0IGQpKSkp KSkpKQorICAgICAiZ2FyYmFnZTogP2xhbWJkYTogXHUwM2JiIikpCmFjdHVhbC12YWx1ZTogMjMx CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBsb2ctZmlsZSwgZGVyaXZhdGlvbgpsb2NhdGlvbjog L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zdG9yZS5zY206Mzc0CnNv dXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJsb2ctZmlsZSwgZGVyaXZhdGlvbiIKKyAgIChsZXQq ICgoYiAoYWRkLXRleHQtdG8tc3RvcmUKKyAgICAgICAgICAgICAgICVzdG9yZQorICAgICAgICAg ICAgICAgImJ1aWxkIgorICAgICAgICAgICAgICAgImVjaG8gJGZvbyA+ICRvdXQiCisgICAgICAg ICAgICAgICAnKCkpKQorICAgICAgICAgIChzIChhZGQtdG8tc3RvcmUKKyAgICAgICAgICAgICAg ICVzdG9yZQorICAgICAgICAgICAgICAgImJhc2giCisgICAgICAgICAgICAgICAjdAorICAgICAg ICAgICAgICAgInNoYTI1NiIKKyAgICAgICAgICAgICAgIChzZWFyY2gtYm9vdHN0cmFwLWJpbmFy eQorICAgICAgICAgICAgICAgICAiYmFzaCIKKyAgICAgICAgICAgICAgICAgKCVjdXJyZW50LXN5 c3RlbSkpKSkKKyAgICAgICAgICAoZCAoZGVyaXZhdGlvbgorICAgICAgICAgICAgICAgJXN0b3Jl CisgICAgICAgICAgICAgICAidGhlLXRoaW5nIgorICAgICAgICAgICAgICAgcworICAgICAgICAg ICAgICAgYCgiLWUiICxiKQorICAgICAgICAgICAgICAgIzplbnYtdmFycworICAgICAgICAgICAg ICAgYCgoImZvbyIgdW5xdW90ZSAocmFuZG9tLXRleHQpKSkKKyAgICAgICAgICAgICAgICM6aW5w dXRzCisgICAgICAgICAgICAgICBgKCgsYikgKCxzKSkpKSkKKyAgICAgKGFuZCAoYnVpbGQtZGVy aXZhdGlvbnMgJXN0b3JlIChsaXN0IGQpKQorICAgICAgICAgIChmaWxlLWV4aXN0cz8KKyAgICAg ICAgICAgIChwayAobG9nLWZpbGUgJXN0b3JlIChkZXJpdmF0aW9uLWZpbGUtbmFtZSBkKSkpKSkp KQpAIGJ1aWxkLXN0YXJ0ZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0 LXRtcC9zdG9yZS9zcGdtM3hncThzZjhwbjJyNnM0c3N3cWQxNDk0OXkyNi10aGUtdGhpbmcuZHJ2 IC0geDg2XzY0LWxpbnV4IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10 bXAvdmFyL2xvZy9ndWl4L2RydnMvc3AvL2dtM3hncThzZjhwbjJyNnM0c3N3cWQxNDk0OXkyNi10 aGUtdGhpbmcuZHJ2LmJ6MgpAIGJ1aWxkLXN1Y2NlZWRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9n dWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL3NwZ20zeGdxOHNmOHBuMnI2czRzc3dxZDE0OTQ5 eTI2LXRoZS10aGluZy5kcnYgLQoKOzs7ICgiL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4 X3dpcC90ZXN0LXRtcC92YXIvbG9nL2d1aXgvZHJ2cy9zcC9nbTN4Z3E4c2Y4cG4ycjZzNHNzd3Fk MTQ5NDl5MjYtdGhlLXRoaW5nLmRydi5iejIiKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFT UwoKdGVzdC1uYW1lOiBsb2ctZmlsZSwgb3V0cHV0IGZpbGUgbmFtZQpsb2NhdGlvbjogL2hvbWUv c2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zdG9yZS5zY206Mzg2CnNvdXJjZToK KyAodGVzdC1hc3NlcnQKKyAgICJsb2ctZmlsZSwgb3V0cHV0IGZpbGUgbmFtZSIKKyAgIChsZXQq ICgoYiAoYWRkLXRleHQtdG8tc3RvcmUKKyAgICAgICAgICAgICAgICVzdG9yZQorICAgICAgICAg ICAgICAgImJ1aWxkIgorICAgICAgICAgICAgICAgImVjaG8gJGZvbyA+ICRvdXQiCisgICAgICAg ICAgICAgICAnKCkpKQorICAgICAgICAgIChzIChhZGQtdG8tc3RvcmUKKyAgICAgICAgICAgICAg ICVzdG9yZQorICAgICAgICAgICAgICAgImJhc2giCisgICAgICAgICAgICAgICAjdAorICAgICAg ICAgICAgICAgInNoYTI1NiIKKyAgICAgICAgICAgICAgIChzZWFyY2gtYm9vdHN0cmFwLWJpbmFy eQorICAgICAgICAgICAgICAgICAiYmFzaCIKKyAgICAgICAgICAgICAgICAgKCVjdXJyZW50LXN5 c3RlbSkpKSkKKyAgICAgICAgICAoZCAoZGVyaXZhdGlvbgorICAgICAgICAgICAgICAgJXN0b3Jl CisgICAgICAgICAgICAgICAidGhlLXRoaW5nIgorICAgICAgICAgICAgICAgcworICAgICAgICAg ICAgICAgYCgiLWUiICxiKQorICAgICAgICAgICAgICAgIzplbnYtdmFycworICAgICAgICAgICAg ICAgYCgoImZvbyIgdW5xdW90ZSAocmFuZG9tLXRleHQpKSkKKyAgICAgICAgICAgICAgICM6aW5w dXRzCisgICAgICAgICAgICAgICBgKCgsYikgKCxzKSkpKQorICAgICAgICAgIChvIChkZXJpdmF0 aW9uLT5vdXRwdXQtcGF0aCBkKSkpCisgICAgIChhbmQgKGJ1aWxkLWRlcml2YXRpb25zICVzdG9y ZSAobGlzdCBkKSkKKyAgICAgICAgICAoZmlsZS1leGlzdHM/IChwayAobG9nLWZpbGUgJXN0b3Jl IG8pKSkKKyAgICAgICAgICAoc3RyaW5nPT8KKyAgICAgICAgICAgIChsb2ctZmlsZSAlc3RvcmUg KGRlcml2YXRpb24tZmlsZS1uYW1lIGQpKQorICAgICAgICAgICAgKGxvZy1maWxlICVzdG9yZSBv KSkpKSkKQCBidWlsZC1zdGFydGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAv dGVzdC10bXAvc3RvcmUvNjg4aWo4bnhmaGE3Mnc4eHdza2I1a21nandneTk0aXYtdGhlLXRoaW5n LmRydiAtIHg4Nl82NC1saW51eCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rl c3QtdG1wL3Zhci9sb2cvZ3VpeC9kcnZzLzY4Ly84aWo4bnhmaGE3Mnc4eHdza2I1a21nandneTk0 aXYtdGhlLXRoaW5nLmRydi5iejIKQCBidWlsZC1zdWNjZWVkZWQgL2hvbWUvc2FwaWVudGVjaC9E ZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS82ODhpajhueGZoYTcydzh4d3NrYjVrbWdq d2d5OTRpdi10aGUtdGhpbmcuZHJ2IC0KCjs7OyAoIi9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgv Z3VpeF93aXAvdGVzdC10bXAvdmFyL2xvZy9ndWl4L2RydnMvNjgvOGlqOG54ZmhhNzJ3OHh3c2ti NWttZ2p3Z3k5NGl2LXRoZS10aGluZy5kcnYuYnoyIikKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6 IFBBU1MKCnRlc3QtbmFtZTogbm8gc3Vic3RpdHV0ZXMKbG9jYXRpb246IC9ob21lL3NhcGllbnRl Y2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvc3RvcmUuc2NtOjQwMQpzb3VyY2U6CisgKHRlc3Qt YXNzZXJ0CisgICAibm8gc3Vic3RpdHV0ZXMiCisgICAod2l0aC1zdG9yZQorICAgICBzCisgICAg IChsZXQqICgoZDEgKHBhY2thZ2UtZGVyaXZhdGlvbgorICAgICAgICAgICAgICAgICAgcworICAg ICAgICAgICAgICAgICAgJWJvb3RzdHJhcC1ndWlsZQorICAgICAgICAgICAgICAgICAgKCVjdXJy ZW50LXN5c3RlbSkpKQorICAgICAgICAgICAgKGQyIChwYWNrYWdlLWRlcml2YXRpb24KKyAgICAg ICAgICAgICAgICAgIHMKKyAgICAgICAgICAgICAgICAgICVib290c3RyYXAtZ2xpYmMKKyAgICAg ICAgICAgICAgICAgICglY3VycmVudC1zeXN0ZW0pKSkKKyAgICAgICAgICAgIChvIChtYXAgZGVy aXZhdGlvbi0+b3V0cHV0LXBhdGggKGxpc3QgZDEgZDIpKSkpCisgICAgICAgKHNldC1idWlsZC1v cHRpb25zIHMgIzp1c2Utc3Vic3RpdHV0ZXM/ICNmKQorICAgICAgIChhbmQgKG5vdCAoaGFzLXN1 YnN0aXR1dGVzPyBzIChkZXJpdmF0aW9uLWZpbGUtbmFtZSBkMSkpKQorICAgICAgICAgICAgKG5v dCAoaGFzLXN1YnN0aXR1dGVzPyBzIChkZXJpdmF0aW9uLWZpbGUtbmFtZSBkMikpKQorICAgICAg ICAgICAgKG51bGw/IChzdWJzdGl0dXRhYmxlLXBhdGhzIHMgbykpCisgICAgICAgICAgICAobnVs bD8gKHN1YnN0aXR1dGFibGUtcGF0aC1pbmZvIHMgbykpKSkpKQphY3R1YWwtdmFsdWU6ICN0CnJl c3VsdDogUEFTUwoKdGVzdC1uYW1lOiBidWlsZC10aGluZ3Mgd2l0aCBvdXRwdXQgcGF0aApsb2Nh dGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zdG9yZS5zY206 NDEyCnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJidWlsZC10aGluZ3Mgd2l0aCBvdXRwdXQg cGF0aCIKKyAgICh3aXRoLXN0b3JlCisgICAgIHMKKyAgICAgKGxldCogKChjIChyYW5kb20tdGV4 dCkpCisgICAgICAgICAgICAoZCAoYnVpbGQtZXhwcmVzc2lvbi0+ZGVyaXZhdGlvbgorICAgICAg ICAgICAgICAgICBzCisgICAgICAgICAgICAgICAgICJzdWJzdGl0dXRlLW1lIgorICAgICAgICAg ICAgICAgICBgKGNhbGwtd2l0aC1vdXRwdXQtZmlsZQorICAgICAgICAgICAgICAgICAgICAlb3V0 cHV0CisgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKHApIChkaXNwbGF5ICxjIHApKSkKKyAg ICAgICAgICAgICAgICAgIzpndWlsZS1mb3ItYnVpbGQKKyAgICAgICAgICAgICAgICAgKHBhY2th Z2UtZGVyaXZhdGlvbgorICAgICAgICAgICAgICAgICAgIHMKKyAgICAgICAgICAgICAgICAgICAl Ym9vdHN0cmFwLWd1aWxlCisgICAgICAgICAgICAgICAgICAgKCVjdXJyZW50LXN5c3RlbSkpKSkK KyAgICAgICAgICAgIChvIChkZXJpdmF0aW9uLT5vdXRwdXQtcGF0aCBkKSkpCisgICAgICAgKHNl dC1idWlsZC1vcHRpb25zIHMgIzp1c2Utc3Vic3RpdHV0ZXM/ICNmKQorICAgICAgIChidWlsZC10 aGluZ3MgcyAobGlzdCBvKSkKKyAgICAgICAobm90ICh2YWxpZC1wYXRoPyBzIG8pKSkpKQphY3R1 YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBzdWJzdGl0dXRlIHF1ZXJ5Cmxv Y2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N0b3JlLnNj bTo0MzIKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgInN1YnN0aXR1dGUgcXVlcnkiCisgICAo d2l0aC1zdG9yZQorICAgICBzCisgICAgIChsZXQqICgoZCAocGFja2FnZS1kZXJpdmF0aW9uCisg ICAgICAgICAgICAgICAgIHMKKyAgICAgICAgICAgICAgICAgJWJvb3RzdHJhcC1ndWlsZQorICAg ICAgICAgICAgICAgICAoJWN1cnJlbnQtc3lzdGVtKSkpCisgICAgICAgICAgICAobyAoZGVyaXZh dGlvbi0+b3V0cHV0LXBhdGggZCkpKQorICAgICAgICh3aXRoLWRlcml2YXRpb24tbmFyaW5mbwor ICAgICAgICAgZAorICAgICAgICAgKGZhbHNlLWlmLWV4Y2VwdGlvbgorICAgICAgICAgICAoZGVs ZXRlLWZpbGUtcmVjdXJzaXZlbHkKKyAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZAorICAgICAg ICAgICAgICAgKGdldGVudiAiWERHX0NBQ0hFX0hPTUUiKQorICAgICAgICAgICAgICAgIi9ndWl4 L3N1YnN0aXR1dGUiKSkpCisgICAgICAgICAoc2V0LWJ1aWxkLW9wdGlvbnMKKyAgICAgICAgICAg cworICAgICAgICAgICAjOnVzZS1zdWJzdGl0dXRlcz8KKyAgICAgICAgICAgI3QKKyAgICAgICAg ICAgIzpzdWJzdGl0dXRlLXVybHMKKyAgICAgICAgICAgKCV0ZXN0LXN1YnN0aXR1dGUtdXJscykp CisgICAgICAgICAoYW5kIChoYXMtc3Vic3RpdHV0ZXM/IHMgbykKKyAgICAgICAgICAgICAgKGVx dWFsPworICAgICAgICAgICAgICAgIChsaXN0IG8pCisgICAgICAgICAgICAgICAgKHN1YnN0aXR1 dGFibGUtcGF0aHMgcyAobGlzdCBvKSkpCisgICAgICAgICAgICAgIChtYXRjaCAocGsgJ3NwaSAo c3Vic3RpdHV0YWJsZS1wYXRoLWluZm8gcyAobGlzdCBvKSkpCisgICAgICAgICAgICAgICAgICAg ICAoKCg/IHN1YnN0aXR1dGFibGU/IHMpKQorICAgICAgICAgICAgICAgICAgICAgIChhbmQgKHN0 cmluZz0/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJzdGl0dXRhYmxlLWRlcml2 ZXIgcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlcml2YXRpb24tZmlsZS1uYW1l IGQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGw/IChzdWJzdGl0dXRhYmxlLXJl ZmVyZW5jZXMgcykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXF1YWw/IChzdWJzdGl0 dXRhYmxlLW5hci1zaXplIHMpIDEyMzQpKSkpKSkpKSkKc3Vic3RpdHV0ZTogd2FybmluZzogYXV0 aGVudGljYXRpb24gYW5kIGF1dGhvcml6YXRpb24gb2Ygc3Vic3RpdHV0ZXMgZGlzYWJsZWQhCnN1 YnN0aXR1dGU6IGd1aXggc3Vic3RpdHV0ZTogd2FybmluZzogQUNMIGZvciBhcmNoaXZlIGltcG9y dHMgc2VlbXMgdG8gYmUgdW5pbml0aWFsaXplZCwgc3Vic3RpdHV0ZXMgbWF5IGJlIHVuYXZhaWxh YmxlCgo7OzsgKHNwaSAoIzw8c3Vic3RpdHV0YWJsZT4gcGF0aDogIi9ob21lL3NhcGllbnRlY2gv RGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvMHZ4Z3ZseDAzcXNjcmRzODhzNjVocnM3 MG41amt3MmctZ3VpbGUtYm9vdHN0cmFwLTIuMCIgZGVyaXZlcjogIi9ob21lL3NhcGllbnRlY2gv RGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvYmppaGNoYWlsY2xpcnozMzEwZHF5cGli amcwaGFwcG0tZ3VpbGUtYm9vdHN0cmFwLTIuMC5kcnYiIHJlZnM6ICgpIGRsLXNpemU6IDAgbmFy LXNpemU6IDEyMzQ+KSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTog c3Vic3RpdHV0ZSBxdWVyeSwgYWx0ZXJuYXRpbmcgVVJMcwpsb2NhdGlvbjogL2hvbWUvc2FwaWVu dGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zdG9yZS5zY206NDU2CnNvdXJjZToKKyAodGVz dC1hc3NlcnQKKyAgICJzdWJzdGl0dXRlIHF1ZXJ5LCBhbHRlcm5hdGluZyBVUkxzIgorICAgKGxl dCogKChkICh3aXRoLXN0b3JlCisgICAgICAgICAgICAgICBzCisgICAgICAgICAgICAgICAocGFj a2FnZS1kZXJpdmF0aW9uCisgICAgICAgICAgICAgICAgIHMKKyAgICAgICAgICAgICAgICAgJWJv b3RzdHJhcC1ndWlsZQorICAgICAgICAgICAgICAgICAoJWN1cnJlbnQtc3lzdGVtKSkpKQorICAg ICAgICAgIChvIChkZXJpdmF0aW9uLT5vdXRwdXQtcGF0aCBkKSkpCisgICAgICh3aXRoLWRlcml2 YXRpb24tbmFyaW5mbworICAgICAgIGQKKyAgICAgICAoZmFsc2UtaWYtZXhjZXB0aW9uCisgICAg ICAgICAoZGVsZXRlLWZpbGUtcmVjdXJzaXZlbHkKKyAgICAgICAgICAgKHN0cmluZy1hcHBlbmQK KyAgICAgICAgICAgICAoZ2V0ZW52ICJYREdfQ0FDSEVfSE9NRSIpCisgICAgICAgICAgICAgIi9n dWl4L3N1YnN0aXR1dGUiKSkpCisgICAgICAgKGFuZCAod2l0aC1zdG9yZQorICAgICAgICAgICAg ICBzCisgICAgICAgICAgICAgIChzZXQtYnVpbGQtb3B0aW9ucworICAgICAgICAgICAgICAgIHMK KyAgICAgICAgICAgICAgICAjOnVzZS1zdWJzdGl0dXRlcz8KKyAgICAgICAgICAgICAgICAjdAor ICAgICAgICAgICAgICAgICM6c3Vic3RpdHV0ZS11cmxzCisgICAgICAgICAgICAgICAgKCV0ZXN0 LXN1YnN0aXR1dGUtdXJscykpCisgICAgICAgICAgICAgIChoYXMtc3Vic3RpdHV0ZXM/IHMgbykp CisgICAgICAgICAgICAod2l0aC1zdG9yZQorICAgICAgICAgICAgICBzCisgICAgICAgICAgICAg IChzZXQtYnVpbGQtb3B0aW9ucworICAgICAgICAgICAgICAgIHMKKyAgICAgICAgICAgICAgICAj OnVzZS1zdWJzdGl0dXRlcz8KKyAgICAgICAgICAgICAgICAjdAorICAgICAgICAgICAgICAgICM6 c3Vic3RpdHV0ZS11cmxzCisgICAgICAgICAgICAgICAgKGxpc3QgImh0dHA6Ly9kb2VzLW5vdC1l eGlzdCIpKQorICAgICAgICAgICAgICAobm90IChoYXMtc3Vic3RpdHV0ZXM/IHMgbykpKQorICAg ICAgICAgICAgKHdpdGgtc3RvcmUKKyAgICAgICAgICAgICAgcworICAgICAgICAgICAgICAoc2V0 LWJ1aWxkLW9wdGlvbnMKKyAgICAgICAgICAgICAgICBzCisgICAgICAgICAgICAgICAgIzp1c2Ut c3Vic3RpdHV0ZXM/CisgICAgICAgICAgICAgICAgI3QKKyAgICAgICAgICAgICAgICAjOnN1YnN0 aXR1dGUtdXJscworICAgICAgICAgICAgICAgICgldGVzdC1zdWJzdGl0dXRlLXVybHMpKQorICAg ICAgICAgICAgICAoaGFzLXN1YnN0aXR1dGVzPyBzIG8pKQorICAgICAgICAgICAgKHdpdGgtc3Rv cmUKKyAgICAgICAgICAgICAgcworICAgICAgICAgICAgICAoc2V0LWJ1aWxkLW9wdGlvbnMKKyAg ICAgICAgICAgICAgICBzCisgICAgICAgICAgICAgICAgIzp1c2Utc3Vic3RpdHV0ZXM/CisgICAg ICAgICAgICAgICAgI3QKKyAgICAgICAgICAgICAgICAjOnN1YnN0aXR1dGUtdXJscworICAgICAg ICAgICAgICAgICcoKSkKKyAgICAgICAgICAgICAgKG5vdCAoaGFzLXN1YnN0aXR1dGVzPyBzIG8p KSkpKSkpCnN1YnN0aXR1dGU6IHdhcm5pbmc6IGF1dGhlbnRpY2F0aW9uIGFuZCBhdXRob3JpemF0 aW9uIG9mIHN1YnN0aXR1dGVzIGRpc2FibGVkIQpzdWJzdGl0dXRlOiBndWl4IHN1YnN0aXR1dGU6 IHdhcm5pbmc6IEFDTCBmb3IgYXJjaGl2ZSBpbXBvcnRzIHNlZW1zIHRvIGJlIHVuaW5pdGlhbGl6 ZWQsIHN1YnN0aXR1dGVzIG1heSBiZSB1bmF2YWlsYWJsZQpzdWJzdGl0dXRlOiB3YXJuaW5nOiBh dXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbiBvZiBzdWJzdGl0dXRlcyBkaXNhYmxlZCEK c3Vic3RpdHV0ZTogZ3VpeCBzdWJzdGl0dXRlOiB3YXJuaW5nOiBBQ0wgZm9yIGFyY2hpdmUgaW1w b3J0cyBzZWVtcyB0byBiZSB1bmluaXRpYWxpemVkLCBzdWJzdGl0dXRlcyBtYXkgYmUgdW5hdmFp bGFibGUKc3Vic3RpdHV0ZTogQmFja3RyYWNlOgpzdWJzdGl0dXRlOiBJbiBpY2UtOS9ib290LTku c2NtOgpzdWJzdGl0dXRlOiAgMTU3OiA5IFtjYXRjaCAjdCAjPGNhdGNoLWNsb3N1cmUgOGM4M2Uw PiAuLi5dCnN1YnN0aXR1dGU6IEluIHVua25vd24gZmlsZToKc3Vic3RpdHV0ZTogICAgPzogOCBb YXBwbHktc21vYi8xICM8Y2F0Y2gtY2xvc3VyZSA4YzgzZTA+XQpzdWJzdGl0dXRlOiBJbiBpY2Ut OS9ib290LTkuc2NtOgpzdWJzdGl0dXRlOiAgIDYzOiA3IFtjYWxsLXdpdGgtcHJvbXB0IHByb21w dDAgLi4uXQpzdWJzdGl0dXRlOiBJbiBpY2UtOS9ldmFsLnNjbToKc3Vic3RpdHV0ZTogIDQzMjog NiBbZXZhbCAjICNdCnN1YnN0aXR1dGU6IEluIGljZS05L2Jvb3QtOS5zY206CnN1YnN0aXR1dGU6 IDI0MDE6IDUgW3NhdmUtbW9kdWxlLWV4Y3Vyc2lvbiAjPHByb2NlZHVyZSA4ZTg5NDAgYXQgaWNl LTkvYm9vdC05LnNjbTo0MDQ1OjMgKCk+XQpzdWJzdGl0dXRlOiA0MDUwOiA0IFsjPHByb2NlZHVy ZSA4ZTg5NDAgYXQgaWNlLTkvYm9vdC05LnNjbTo0MDQ1OjMgKCk+XQpzdWJzdGl0dXRlOiAxNzI0 OiAzIFslc3RhcnQtc3RhY2sgbG9hZC1zdGFjayAjPHByb2NlZHVyZSA4ZmE4MjAgYXQgaWNlLTkv Ym9vdC05LnNjbTo0MDQxOjEwICgpPl0Kc3Vic3RpdHV0ZTogMTcyOTogMiBbIzxwcm9jZWR1cmUg OGZmZWEwICgpPl0Kc3Vic3RpdHV0ZTogSW4gdW5rbm93biBmaWxlOgpzdWJzdGl0dXRlOiAgICA/ OiAxIFtwcmltaXRpdmUtbG9hZCAiL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC9z Y3JpcHRzL2d1aXgiXQpzdWJzdGl0dXRlOiBJbiBndWl4L3VpLnNjbToKc3Vic3RpdHV0ZTogMTIw OTogMCBbcnVuLWd1aXgtY29tbWFuZCBzdWJzdGl0dXRlICItLXF1ZXJ5Il0Kc3Vic3RpdHV0ZTog CnN1YnN0aXR1dGU6IGd1aXgvdWkuc2NtOjEyMDk6NjogSW4gcHJvY2VkdXJlIHJ1bi1ndWl4LWNv bW1hbmQ6CnN1YnN0aXR1dGU6IGd1aXgvdWkuc2NtOjEyMDk6NjogdW5tYXRjaGVkIGxpbmUgIjxo dG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9XCJyZWZyZXNoXCIgY29udGVudD1cIjA7dXJsPWh0 dHA6Ly93d3cuZG5zcnNlYXJjaC5jb20vaW5kZXgucGhwP29yaWdVUkw9aHR0cDovL2RvZXMtbm90 LWV4aXN0L25peC1jYWNoZS1pbmZvJmJjPVwiLz48L2hlYWQ+PGJvZHk+PHNjcmlwdCB0eXBlPVwi dGV4dC9qYXZhc2NyaXB0XCI+d2luZG93LmxvY2F0aW9uPVwiaHR0cDovL3d3dy5kbnNyc2VhcmNo LmNvbS9pbmRleC5waHA/b3JpZ1VSTD1cIitlc2NhcGUod2luZG93LmxvY2F0aW9uKStcIiZyPVwi K2VzY2FwZShkb2N1bWVudC5yZWZlcnJlcikrXCImYmM9XCI7PC9zY3JpcHQ+PC9ib2R5PjwvaHRt bD4iCmFjdHVhbC12YWx1ZTogI2YKYWN0dWFsLWVycm9yOgorIChzcmZpLTM0CisgICAjPGNvbmRp dGlvbiAmbml4LXByb3RvY29sLWVycm9yIFttZXNzYWdlOiAic3Vic3RpdHV0ZXIgYHN1YnN0aXR1 dGUnIGRpZWQgdW5leHBlY3RlZGx5IiBzdGF0dXM6IDFdIGFjNmU0MD4pCnJlc3VsdDogRkFJTAoK dGVzdC1uYW1lOiBzdWJzdGl0dXRlCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4 L2d1aXhfd2lwL3Rlc3RzL3N0b3JlLnNjbTo0ODgKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAg InN1YnN0aXR1dGUiCisgICAod2l0aC1zdG9yZQorICAgICBzCisgICAgIChsZXQqICgoYyAocmFu ZG9tLXRleHQpKQorICAgICAgICAgICAgKGQgKGJ1aWxkLWV4cHJlc3Npb24tPmRlcml2YXRpb24K KyAgICAgICAgICAgICAgICAgcworICAgICAgICAgICAgICAgICAic3Vic3RpdHV0ZS1tZSIKKyAg ICAgICAgICAgICAgICAgYChjYWxsLXdpdGgtb3V0cHV0LWZpbGUKKyAgICAgICAgICAgICAgICAg ICAgJW91dHB1dAorICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChwKSAoZXhpdCAxKSAoZGlz cGxheSAsYyBwKSkpCisgICAgICAgICAgICAgICAgICM6Z3VpbGUtZm9yLWJ1aWxkCisgICAgICAg ICAgICAgICAgIChwYWNrYWdlLWRlcml2YXRpb24KKyAgICAgICAgICAgICAgICAgICBzCisgICAg ICAgICAgICAgICAgICAgJWJvb3RzdHJhcC1ndWlsZQorICAgICAgICAgICAgICAgICAgICglY3Vy cmVudC1zeXN0ZW0pKSkpCisgICAgICAgICAgICAobyAoZGVyaXZhdGlvbi0+b3V0cHV0LXBhdGgg ZCkpKQorICAgICAgICh3aXRoLWRlcml2YXRpb24tc3Vic3RpdHV0ZQorICAgICAgICAgZAorICAg ICAgICAgYworICAgICAgICAgKHNldC1idWlsZC1vcHRpb25zCisgICAgICAgICAgIHMKKyAgICAg ICAgICAgIzp1c2Utc3Vic3RpdHV0ZXM/CisgICAgICAgICAgICN0CisgICAgICAgICAgICM6c3Vi c3RpdHV0ZS11cmxzCisgICAgICAgICAgICgldGVzdC1zdWJzdGl0dXRlLXVybHMpKQorICAgICAg ICAgKGFuZCAoaGFzLXN1YnN0aXR1dGVzPyBzIG8pCisgICAgICAgICAgICAgIChidWlsZC1kZXJp dmF0aW9ucyBzIChsaXN0IGQpKQorICAgICAgICAgICAgICAoZXF1YWw/CisgICAgICAgICAgICAg ICAgYworICAgICAgICAgICAgICAgIChjYWxsLXdpdGgtaW5wdXQtZmlsZSBvIGdldC1zdHJpbmct YWxsKSkpKSkpKQpzdWJzdGl0dXRlOiB3YXJuaW5nOiBhdXRoZW50aWNhdGlvbiBhbmQgYXV0aG9y aXphdGlvbiBvZiBzdWJzdGl0dXRlcyBkaXNhYmxlZCEKc3Vic3RpdHV0ZTogZ3VpeCBzdWJzdGl0 dXRlOiB3YXJuaW5nOiBBQ0wgZm9yIGFyY2hpdmUgaW1wb3J0cyBzZWVtcyB0byBiZSB1bmluaXRp YWxpemVkLCBzdWJzdGl0dXRlcyBtYXkgYmUgdW5hdmFpbGFibGUKQCBzdWJzdGl0dXRlci1zdGFy dGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvMnl6 ZDZjbXk3Zmg5emFqdnk4aGIwa2kzajYxa3E2eHEtc3Vic3RpdHV0ZS1tZSAvaG9tZS9zYXBpZW50 ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL25peC9zY3JpcHRzL3N1YnN0aXR1dGUKd2FybmluZzogYXV0 aGVudGljYXRpb24gYW5kIGF1dGhvcml6YXRpb24gb2Ygc3Vic3RpdHV0ZXMgZGlzYWJsZWQhCmd1 aXggc3Vic3RpdHV0ZTogd2FybmluZzogQUNMIGZvciBhcmNoaXZlIGltcG9ydHMgc2VlbXMgdG8g YmUgdW5pbml0aWFsaXplZCwgc3Vic3RpdHV0ZXMgbWF5IGJlIHVuYXZhaWxhYmxlCkRvd25sb2Fk aW5nIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvMnl6 ZDZjbXk3Zmg5emFqdnk4aGIwa2kzajYxa3E2eHEtc3Vic3RpdHV0ZS1tZSAoMUtpQiBpbnN0YWxs ZWQpLi4uCg0bW0sgZXhhbXBsZS5uYXIgIDE3NkIgICAgICAgICAgICAgICAgICAgICAwQi9zIDAw OjAwIFsjIyMjIyMjIyMjIyMjIyMjIyMjI10gMTAwLjAlCkAgc3Vic3RpdHV0ZXItc3VjY2VlZGVk IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvMnl6ZDZj bXk3Zmg5emFqdnk4aGIwa2kzajYxa3E2eHEtc3Vic3RpdHV0ZS1tZQphY3R1YWwtdmFsdWU6ICN0 CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBzdWJzdGl0dXRlICsgYnVpbGQtdGhpbmdzIHdpdGgg b3V0cHV0IHBhdGgKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAv dGVzdHMvc3RvcmUuc2NtOjUwNwpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAic3Vic3RpdHV0 ZSArIGJ1aWxkLXRoaW5ncyB3aXRoIG91dHB1dCBwYXRoIgorICAgKHdpdGgtc3RvcmUKKyAgICAg cworICAgICAobGV0KiAoKGMgKHJhbmRvbS10ZXh0KSkKKyAgICAgICAgICAgIChkIChidWlsZC1l eHByZXNzaW9uLT5kZXJpdmF0aW9uCisgICAgICAgICAgICAgICAgIHMKKyAgICAgICAgICAgICAg ICAgInN1YnN0aXR1dGUtbWUiCisgICAgICAgICAgICAgICAgIGAoY2FsbC13aXRoLW91dHB1dC1m aWxlCisgICAgICAgICAgICAgICAgICAgICVvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgKGxh bWJkYSAocCkgKGV4aXQgMSkgKGRpc3BsYXkgLGMgcCkpKQorICAgICAgICAgICAgICAgICAjOmd1 aWxlLWZvci1idWlsZAorICAgICAgICAgICAgICAgICAocGFja2FnZS1kZXJpdmF0aW9uCisgICAg ICAgICAgICAgICAgICAgcworICAgICAgICAgICAgICAgICAgICVib290c3RyYXAtZ3VpbGUKKyAg ICAgICAgICAgICAgICAgICAoJWN1cnJlbnQtc3lzdGVtKSkpKQorICAgICAgICAgICAgKG8gKGRl cml2YXRpb24tPm91dHB1dC1wYXRoIGQpKSkKKyAgICAgICAod2l0aC1kZXJpdmF0aW9uLXN1YnN0 aXR1dGUKKyAgICAgICAgIGQKKyAgICAgICAgIGMKKyAgICAgICAgIChzZXQtYnVpbGQtb3B0aW9u cworICAgICAgICAgICBzCisgICAgICAgICAgICM6dXNlLXN1YnN0aXR1dGVzPworICAgICAgICAg ICAjdAorICAgICAgICAgICAjOnN1YnN0aXR1dGUtdXJscworICAgICAgICAgICAoJXRlc3Qtc3Vi c3RpdHV0ZS11cmxzKSkKKyAgICAgICAgIChhbmQgKGhhcy1zdWJzdGl0dXRlcz8gcyBvKQorICAg ICAgICAgICAgICAoYnVpbGQtdGhpbmdzIHMgKGxpc3QgbykpCisgICAgICAgICAgICAgICh2YWxp ZC1wYXRoPyBzIG8pCisgICAgICAgICAgICAgIChlcXVhbD8KKyAgICAgICAgICAgICAgICBjCisg ICAgICAgICAgICAgICAgKGNhbGwtd2l0aC1pbnB1dC1maWxlIG8gZ2V0LXN0cmluZy1hbGwpKSkp KSkpCnN1YnN0aXR1dGU6IHdhcm5pbmc6IGF1dGhlbnRpY2F0aW9uIGFuZCBhdXRob3JpemF0aW9u IG9mIHN1YnN0aXR1dGVzIGRpc2FibGVkIQpzdWJzdGl0dXRlOiBndWl4IHN1YnN0aXR1dGU6IHdh cm5pbmc6IEFDTCBmb3IgYXJjaGl2ZSBpbXBvcnRzIHNlZW1zIHRvIGJlIHVuaW5pdGlhbGl6ZWQs IHN1YnN0aXR1dGVzIG1heSBiZSB1bmF2YWlsYWJsZQpAIHN1YnN0aXR1dGVyLXN0YXJ0ZWQgL2hv bWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9hbnJqeWpxbjNn OG5ua3dyaGxzOG5kNWJnMHI1azA4Mi1zdWJzdGl0dXRlLW1lIC9ob21lL3NhcGllbnRlY2gvRGV2 L2d1aXgvZ3VpeF93aXAvbml4L3NjcmlwdHMvc3Vic3RpdHV0ZQp3YXJuaW5nOiBhdXRoZW50aWNh dGlvbiBhbmQgYXV0aG9yaXphdGlvbiBvZiBzdWJzdGl0dXRlcyBkaXNhYmxlZCEKZ3VpeCBzdWJz dGl0dXRlOiB3YXJuaW5nOiBBQ0wgZm9yIGFyY2hpdmUgaW1wb3J0cyBzZWVtcyB0byBiZSB1bmlu aXRpYWxpemVkLCBzdWJzdGl0dXRlcyBtYXkgYmUgdW5hdmFpbGFibGUKRG93bmxvYWRpbmcgL2hv bWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9hbnJqeWpxbjNn OG5ua3dyaGxzOG5kNWJnMHI1azA4Mi1zdWJzdGl0dXRlLW1lICgxS2lCIGluc3RhbGxlZCkuLi4K DRtbSyBleGFtcGxlLm5hciAgMTc2QiAgICAgICAgICAgICAgICAgICAgIDBCL3MgMDA6MDAgWyMj IyMjIyMjIyMjIyMjIyMjIyMjXSAxMDAuMCUKQCBzdWJzdGl0dXRlci1zdWNjZWVkZWQgL2hvbWUv c2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9hbnJqeWpxbjNnOG5u a3dyaGxzOG5kNWJnMHI1azA4Mi1zdWJzdGl0dXRlLW1lCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0 OiBQQVNTCgp0ZXN0LW5hbWU6IHN1YnN0aXR1dGUsIGNvcnJ1cHQgb3V0cHV0IGhhc2gKbG9jYXRp b246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvc3RvcmUuc2NtOjUy Nwpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAic3Vic3RpdHV0ZSwgY29ycnVwdCBvdXRwdXQg aGFzaCIKKyAgICh3aXRoLXN0b3JlCisgICAgIHMKKyAgICAgKGxldCogKChjICJoZWxsbywgd29y bGQiKQorICAgICAgICAgICAgKGQgKGJ1aWxkLWV4cHJlc3Npb24tPmRlcml2YXRpb24KKyAgICAg ICAgICAgICAgICAgcworICAgICAgICAgICAgICAgICAiY29ycnVwdC1zdWJzdGl0dXRlIgorICAg ICAgICAgICAgICAgICBgKG1rZGlyICVvdXRwdXQpCisgICAgICAgICAgICAgICAgICM6Z3VpbGUt Zm9yLWJ1aWxkCisgICAgICAgICAgICAgICAgIChwYWNrYWdlLWRlcml2YXRpb24KKyAgICAgICAg ICAgICAgICAgICBzCisgICAgICAgICAgICAgICAgICAgJWJvb3RzdHJhcC1ndWlsZQorICAgICAg ICAgICAgICAgICAgICglY3VycmVudC1zeXN0ZW0pKSkpCisgICAgICAgICAgICAobyAoZGVyaXZh dGlvbi0+b3V0cHV0LXBhdGggZCkpKQorICAgICAgICh3aXRoLWRlcml2YXRpb24tc3Vic3RpdHV0 ZQorICAgICAgICAgZAorICAgICAgICAgYworICAgICAgICAgKHNoYTI1NiA9PiAobWFrZS1ieXRl dmVjdG9yIDMyIDApKQorICAgICAgICAgKHNldC1idWlsZC1vcHRpb25zCisgICAgICAgICAgIHMK KyAgICAgICAgICAgIzp1c2Utc3Vic3RpdHV0ZXM/CisgICAgICAgICAgICN0CisgICAgICAgICAg ICM6ZmFsbGJhY2s/CisgICAgICAgICAgICNmCisgICAgICAgICAgICM6c3Vic3RpdHV0ZS11cmxz CisgICAgICAgICAgICgldGVzdC1zdWJzdGl0dXRlLXVybHMpKQorICAgICAgICAgKGFuZCAoaGFz LXN1YnN0aXR1dGVzPyBzIG8pCisgICAgICAgICAgICAgIChndWFyZCAoYyAoKG5peC1wcm90b2Nv bC1lcnJvcj8gYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAocGsgJ2NvcnJ1cHQgYykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAobm90ICh6ZXJvPyAobml4LXByb3RvY29sLWVycm9yLXN0 YXR1cyBjKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgIChidWlsZC1kZXJpdmF0aW9ucyBzIChs aXN0IGQpKQorICAgICAgICAgICAgICAgICAgICAgI2YpKSkpKSkKc3Vic3RpdHV0ZTogd2Fybmlu ZzogYXV0aGVudGljYXRpb24gYW5kIGF1dGhvcml6YXRpb24gb2Ygc3Vic3RpdHV0ZXMgZGlzYWJs ZWQhCnN1YnN0aXR1dGU6IGd1aXggc3Vic3RpdHV0ZTogd2FybmluZzogQUNMIGZvciBhcmNoaXZl IGltcG9ydHMgc2VlbXMgdG8gYmUgdW5pbml0aWFsaXplZCwgc3Vic3RpdHV0ZXMgbWF5IGJlIHVu YXZhaWxhYmxlCkAgc3Vic3RpdHV0ZXItc3RhcnRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4 L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL2JtZGxtaWNtczdtdzU3MXNpcTdnc2ppcDRhczY0NTg2 LWNvcnJ1cHQtc3Vic3RpdHV0ZSAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL25p eC9zY3JpcHRzL3N1YnN0aXR1dGUKd2FybmluZzogYXV0aGVudGljYXRpb24gYW5kIGF1dGhvcml6 YXRpb24gb2Ygc3Vic3RpdHV0ZXMgZGlzYWJsZWQhCmd1aXggc3Vic3RpdHV0ZTogd2FybmluZzog QUNMIGZvciBhcmNoaXZlIGltcG9ydHMgc2VlbXMgdG8gYmUgdW5pbml0aWFsaXplZCwgc3Vic3Rp dHV0ZXMgbWF5IGJlIHVuYXZhaWxhYmxlCkRvd25sb2FkaW5nIC9ob21lL3NhcGllbnRlY2gvRGV2 L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvYm1kbG1pY21zN213NTcxc2lxN2dzamlwNGFz NjQ1ODYtY29ycnVwdC1zdWJzdGl0dXRlICgxS2lCIGluc3RhbGxlZCkuLi4KDRtbSyBleGFtcGxl Lm5hciAgMTI4QiAgICAgICAgICAgICAgICAgICAgIDBCL3MgMDA6MDAgWyMjIyMjIyMjIyMjIyMj IyMjIyMjXSAxMDAuMCUKQCBzdWJzdGl0dXRlci1mYWlsZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYv Z3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9ibWRsbWljbXM3bXc1NzFzaXE3Z3NqaXA0YXM2 NDU4Ni1jb3JydXB0LXN1YnN0aXR1dGUgMCBoYXNoIG1pc21hdGNoIGluIGRvd25sb2FkZWQgcGF0 aCBgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9ibWRs bWljbXM3bXc1NzFzaXE3Z3NqaXA0YXM2NDU4Ni1jb3JydXB0LXN1YnN0aXR1dGUnOiBleHBlY3Rl ZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLCBnb3QgYjhmNzNhNmViMjgwZTYzMTY5YjFkZTJhNWI1ZTE1NDY3NmZlMWFkYTY4 NWYxZTVjNzE4M2NiYjJjMWRjZDUzNQoKOzs7IChjb3JydXB0ICM8Y29uZGl0aW9uICZuaXgtcHJv dG9jb2wtZXJyb3IgW21lc3NhZ2U6ICJzb21lIHN1YnN0aXR1dGVzIGZvciB0aGUgb3V0cHV0cyBv ZiBkZXJpdmF0aW9uIGAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1w L3N0b3JlL3lwM3BmZzI1MTBiNWRtN2lsc2wxbnJyeTFqNXEzd3czLWNvcnJ1cHQtc3Vic3RpdHV0 ZS5kcnYnIGZhaWxlZCAodXN1YWxseSBoYXBwZW5zIGR1ZSB0byBuZXR3b3JraW5nIGlzc3Vlcyk7 IHRyeSBgLS1mYWxsYmFjaycgdG8gYnVpbGQgZGVyaXZhdGlvbiBmcm9tIHNvdXJjZSAiIHN0YXR1 czogMV0gMWFmYTdiMD4pCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6 IHN1YnN0aXR1dGUgLS1mYWxsYmFjawpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3Vp eC9ndWl4X3dpcC90ZXN0cy9zdG9yZS5zY206NTU3CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAg ICJzdWJzdGl0dXRlIC0tZmFsbGJhY2siCisgICAod2l0aC1zdG9yZQorICAgICBzCisgICAgIChs ZXQqICgodCAocmFuZG9tLXRleHQpKQorICAgICAgICAgICAgKGQgKGJ1aWxkLWV4cHJlc3Npb24t PmRlcml2YXRpb24KKyAgICAgICAgICAgICAgICAgcworICAgICAgICAgICAgICAgICAic3Vic3Rp dHV0ZS1tZS1ub3QiCisgICAgICAgICAgICAgICAgIGAoY2FsbC13aXRoLW91dHB1dC1maWxlCisg ICAgICAgICAgICAgICAgICAgICVvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAo cCkgKGRpc3BsYXkgLHQgcCkpKQorICAgICAgICAgICAgICAgICAjOmd1aWxlLWZvci1idWlsZAor ICAgICAgICAgICAgICAgICAocGFja2FnZS1kZXJpdmF0aW9uCisgICAgICAgICAgICAgICAgICAg cworICAgICAgICAgICAgICAgICAgICVib290c3RyYXAtZ3VpbGUKKyAgICAgICAgICAgICAgICAg ICAoJWN1cnJlbnQtc3lzdGVtKSkpKQorICAgICAgICAgICAgKG8gKGRlcml2YXRpb24tPm91dHB1 dC1wYXRoIGQpKSkKKyAgICAgICAod2l0aC1kZXJpdmF0aW9uLW5hcmluZm8KKyAgICAgICAgIGQK KyAgICAgICAgIChzZXQtYnVpbGQtb3B0aW9ucworICAgICAgICAgICBzCisgICAgICAgICAgICM6 dXNlLXN1YnN0aXR1dGVzPworICAgICAgICAgICAjdAorICAgICAgICAgICAjOnN1YnN0aXR1dGUt dXJscworICAgICAgICAgICAoJXRlc3Qtc3Vic3RpdHV0ZS11cmxzKSkKKyAgICAgICAgIChhbmQg KGhhcy1zdWJzdGl0dXRlcz8gcyBvKQorICAgICAgICAgICAgICAoZ3VhcmQgKGMgKChuaXgtcHJv dG9jb2wtZXJyb3I/IGMpCisgICAgICAgICAgICAgICAgICAgICAgICAgKHNldC1idWlsZC1vcHRp b25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAjOnVzZS1zdWJzdGl0dXRlcz8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICN0Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAjOnN1YnN0aXR1dGUtdXJscworICAgICAgICAgICAg ICAgICAgICAgICAgICAgKCV0ZXN0LXN1YnN0aXR1dGUtdXJscykKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICM6ZmFsbGJhY2s/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAjdCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAoYW5kIChidWlsZC1kZXJpdmF0aW9ucyBzIChsaXN0IGQp KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxdWFsPworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWxs LXdpdGgtaW5wdXQtZmlsZSBvIGdldC1zdHJpbmctYWxsKSkpKSkKKyAgICAgICAgICAgICAgICAg ICAgIChidWlsZC1kZXJpdmF0aW9ucyBzIChsaXN0IGQpKQorICAgICAgICAgICAgICAgICAgICAg I2YpKSkpKSkKc3Vic3RpdHV0ZTogd2FybmluZzogYXV0aGVudGljYXRpb24gYW5kIGF1dGhvcml6 YXRpb24gb2Ygc3Vic3RpdHV0ZXMgZGlzYWJsZWQhCnN1YnN0aXR1dGU6IGd1aXggc3Vic3RpdHV0 ZTogd2FybmluZzogQUNMIGZvciBhcmNoaXZlIGltcG9ydHMgc2VlbXMgdG8gYmUgdW5pbml0aWFs aXplZCwgc3Vic3RpdHV0ZXMgbWF5IGJlIHVuYXZhaWxhYmxlCkAgc3Vic3RpdHV0ZXItc3RhcnRl ZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL2Qyamhi a2l4dzQ3NWFsc2s3MzhoZmlxMmp5d2Fnc2htLXN1YnN0aXR1dGUtbWUtbm90IC9ob21lL3NhcGll bnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvbml4L3NjcmlwdHMvc3Vic3RpdHV0ZQp3YXJuaW5nOiBh dXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbiBvZiBzdWJzdGl0dXRlcyBkaXNhYmxlZCEK Z3VpeCBzdWJzdGl0dXRlOiB3YXJuaW5nOiBBQ0wgZm9yIGFyY2hpdmUgaW1wb3J0cyBzZWVtcyB0 byBiZSB1bmluaXRpYWxpemVkLCBzdWJzdGl0dXRlcyBtYXkgYmUgdW5hdmFpbGFibGUKRG93bmxv YWRpbmcgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9k MmpoYmtpeHc0NzVhbHNrNzM4aGZpcTJqeXdhZ3NobS1zdWJzdGl0dXRlLW1lLW5vdCAoMUtpQiBp bnN0YWxsZWQpLi4uCmd1aXggc3Vic3RpdHV0ZTogZXJyb3I6IG9wZW4tZmlsZTogTm8gc3VjaCBm aWxlIG9yIGRpcmVjdG9yeTogIi9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVz dC10bXAvdmFyLzQ1Nzgvc3Vic3RpdHV0ZXItZGF0YS9leGFtcGxlLm5hciIKQCBzdWJzdGl0dXRl ci1mYWlsZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9y ZS9kMmpoYmtpeHc0NzVhbHNrNzM4aGZpcTJqeXdhZ3NobS1zdWJzdGl0dXRlLW1lLW5vdCAyNTYg ZmV0Y2hpbmcgcGF0aCBgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRt cC9zdG9yZS9kMmpoYmtpeHc0NzVhbHNrNzM4aGZpcTJqeXdhZ3NobS1zdWJzdGl0dXRlLW1lLW5v dCcgZmFpbGVkIHdpdGggZXhpdCBjb2RlIDEKQCBzdWJzdGl0dXRlci1zdGFydGVkIC9ob21lL3Nh cGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvZDJqaGJraXh3NDc1YWxz azczOGhmaXEyanl3YWdzaG0tc3Vic3RpdHV0ZS1tZS1ub3QgL2hvbWUvc2FwaWVudGVjaC9EZXYv Z3VpeC9ndWl4X3dpcC9uaXgvc2NyaXB0cy9zdWJzdGl0dXRlCndhcm5pbmc6IGF1dGhlbnRpY2F0 aW9uIGFuZCBhdXRob3JpemF0aW9uIG9mIHN1YnN0aXR1dGVzIGRpc2FibGVkIQpndWl4IHN1YnN0 aXR1dGU6IHdhcm5pbmc6IEFDTCBmb3IgYXJjaGl2ZSBpbXBvcnRzIHNlZW1zIHRvIGJlIHVuaW5p dGlhbGl6ZWQsIHN1YnN0aXR1dGVzIG1heSBiZSB1bmF2YWlsYWJsZQpEb3dubG9hZGluZyAvaG9t ZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL2Qyamhia2l4dzQ3 NWFsc2s3MzhoZmlxMmp5d2Fnc2htLXN1YnN0aXR1dGUtbWUtbm90ICgxS2lCIGluc3RhbGxlZCku Li4KZ3VpeCBzdWJzdGl0dXRlOiBlcnJvcjogb3Blbi1maWxlOiBObyBzdWNoIGZpbGUgb3IgZGly ZWN0b3J5OiAiL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC92YXIv NDU3OC9zdWJzdGl0dXRlci1kYXRhL2V4YW1wbGUubmFyIgpAIHN1YnN0aXR1dGVyLWZhaWxlZCAv aG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL2Qyamhia2l4 dzQ3NWFsc2s3MzhoZmlxMmp5d2Fnc2htLXN1YnN0aXR1dGUtbWUtbm90IDI1NiBmZXRjaGluZyBw YXRoIGAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL2Qy amhia2l4dzQ3NWFsc2s3MzhoZmlxMmp5d2Fnc2htLXN1YnN0aXR1dGUtbWUtbm90JyBmYWlsZWQg d2l0aCBleGl0IGNvZGUgMQpAIGJ1aWxkLXN0YXJ0ZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3Vp eC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9kbjQ0ejloZHYxZmhwdzRjY3JzMmtjaXMzcDNmczht bS1zdWJzdGl0dXRlLW1lLW5vdC5kcnYgLSB4ODZfNjQtbGludXggL2hvbWUvc2FwaWVudGVjaC9E ZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC92YXIvbG9nL2d1aXgvZHJ2cy9kbi8vNDR6OWhkdjFm aHB3NGNjcnMya2NpczNwM2ZzOG1tLXN1YnN0aXR1dGUtbWUtbm90LmRydi5iejIKQCBidWlsZC1z dWNjZWVkZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9y ZS9kbjQ0ejloZHYxZmhwdzRjY3JzMmtjaXMzcDNmczhtbS1zdWJzdGl0dXRlLW1lLW5vdC5kcnYg LQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBleHBvcnQvaW1wb3J0 IHNldmVyYWwgcGF0aHMKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93 aXAvdGVzdHMvc3RvcmUuc2NtOjU4OQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiZXhwb3J0 L2ltcG9ydCBzZXZlcmFsIHBhdGhzIgorICAgKGxldCogKCh0ZXh0cyAodW5mb2xkCisgICAgICAg ICAgICAgICAgICAgKGN1dCA+PSA8PiAxMCkKKyAgICAgICAgICAgICAgICAgICAobGFtYmRhIF8g KHJhbmRvbS10ZXh0KSkKKyAgICAgICAgICAgICAgICAgICAjezErfSMKKyAgICAgICAgICAgICAg ICAgICAwKSkKKyAgICAgICAgICAoZmlsZXMgKG1hcCAoY3V0IGFkZC10ZXh0LXRvLXN0b3JlICVz dG9yZSAidGV4dCIgPD4pCisgICAgICAgICAgICAgICAgICAgICAgdGV4dHMpKQorICAgICAgICAg IChkdW1wIChjYWxsLXdpdGgtYnl0ZXZlY3Rvci1vdXRwdXQtcG9ydAorICAgICAgICAgICAgICAg ICAgKGN1dCBleHBvcnQtcGF0aHMgJXN0b3JlIGZpbGVzIDw+KSkpKQorICAgICAoZGVsZXRlLXBh dGhzICVzdG9yZSBmaWxlcykKKyAgICAgKGFuZCAoZXZlcnkgKG5lZ2F0ZSBmaWxlLWV4aXN0cz8p IGZpbGVzKQorICAgICAgICAgIChsZXQqICgoc291cmNlIChvcGVuLWJ5dGV2ZWN0b3ItaW5wdXQt cG9ydCBkdW1wKSkKKyAgICAgICAgICAgICAgICAgKGltcG9ydGVkIChpbXBvcnQtcGF0aHMgJXN0 b3JlIHNvdXJjZSkpKQorICAgICAgICAgICAgKGFuZCAoZXF1YWw/IGltcG9ydGVkIGZpbGVzKQor ICAgICAgICAgICAgICAgICAoZXZlcnkgZmlsZS1leGlzdHM/IGZpbGVzKQorICAgICAgICAgICAg ICAgICAoZXF1YWw/CisgICAgICAgICAgICAgICAgICAgdGV4dHMKKyAgICAgICAgICAgICAgICAg ICAobWFwIChsYW1iZGEgKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWxsLXdp dGgtaW5wdXQtZmlsZSBmaWxlIGdldC1zdHJpbmctYWxsKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgIGZpbGVzKSkpKSkpKQpmaW5kaW5nIGdhcmJhZ2UgY29sbGVjdG9yIHJvb3RzLi4uCmRlbGV0 aW5nIHVudXNlZCBsaW5rcy4uLgphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1u YW1lOiBleHBvcnQvaW1wb3J0IHBhdGhzLCBlbnN1cmUgdG9wb2xvZ2ljYWwgb3JkZXIKbG9jYXRp b246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvc3RvcmUuc2NtOjYw OQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiZXhwb3J0L2ltcG9ydCBwYXRocywgZW5zdXJl IHRvcG9sb2dpY2FsIG9yZGVyIgorICAgKGxldCogKChmaWxlMCAoYWRkLXRleHQtdG8tc3RvcmUg JXN0b3JlICJiYXoiIChyYW5kb20tdGV4dCkpKQorICAgICAgICAgIChmaWxlMSAoYWRkLXRleHQt dG8tc3RvcmUKKyAgICAgICAgICAgICAgICAgICAlc3RvcmUKKyAgICAgICAgICAgICAgICAgICAi Zm9vIgorICAgICAgICAgICAgICAgICAgIChyYW5kb20tdGV4dCkKKyAgICAgICAgICAgICAgICAg ICAobGlzdCBmaWxlMCkpKQorICAgICAgICAgIChmaWxlMiAoYWRkLXRleHQtdG8tc3RvcmUKKyAg ICAgICAgICAgICAgICAgICAlc3RvcmUKKyAgICAgICAgICAgICAgICAgICAiYmFyIgorICAgICAg ICAgICAgICAgICAgIChyYW5kb20tdGV4dCkKKyAgICAgICAgICAgICAgICAgICAobGlzdCBmaWxl MSkpKQorICAgICAgICAgIChmaWxlcyAobGlzdCBmaWxlMSBmaWxlMikpCisgICAgICAgICAgKGR1 bXAxIChjYWxsLXdpdGgtYnl0ZXZlY3Rvci1vdXRwdXQtcG9ydAorICAgICAgICAgICAgICAgICAg IChjdXRlIGV4cG9ydC1wYXRocyAlc3RvcmUgKGxpc3QgZmlsZTEgZmlsZTIpIDw+KSkpCisgICAg ICAgICAgKGR1bXAyIChjYWxsLXdpdGgtYnl0ZXZlY3Rvci1vdXRwdXQtcG9ydAorICAgICAgICAg ICAgICAgICAgIChjdXRlIGV4cG9ydC1wYXRocyAlc3RvcmUgKGxpc3QgZmlsZTIgZmlsZTEpIDw+ KSkpKQorICAgICAoZGVsZXRlLXBhdGhzICVzdG9yZSBmaWxlcykKKyAgICAgKGFuZCAoZXZlcnkg KG5lZ2F0ZSBmaWxlLWV4aXN0cz8pIGZpbGVzKQorICAgICAgICAgIChieXRldmVjdG9yPT8gZHVt cDEgZHVtcDIpCisgICAgICAgICAgKGxldCogKChzb3VyY2UgKG9wZW4tYnl0ZXZlY3Rvci1pbnB1 dC1wb3J0IGR1bXAxKSkKKyAgICAgICAgICAgICAgICAgKGltcG9ydGVkIChpbXBvcnQtcGF0aHMg JXN0b3JlIHNvdXJjZSkpKQorICAgICAgICAgICAgKGFuZCAoZXF1YWw/IGltcG9ydGVkIChsaXN0 IGZpbGUxIGZpbGUyKSkKKyAgICAgICAgICAgICAgICAgKGV2ZXJ5IGZpbGUtZXhpc3RzPyBmaWxl cykKKyAgICAgICAgICAgICAgICAgKGVxdWFsPyAobGlzdCBmaWxlMCkgKHJlZmVyZW5jZXMgJXN0 b3JlIGZpbGUxKSkKKyAgICAgICAgICAgICAgICAgKGVxdWFsPyAobGlzdCBmaWxlMSkgKHJlZmVy ZW5jZXMgJXN0b3JlIGZpbGUyKSkpKSkpKQpmaW5kaW5nIGdhcmJhZ2UgY29sbGVjdG9yIHJvb3Rz Li4uCmRlbGV0aW5nIHVudXNlZCBsaW5rcy4uLgphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFT UwoKdGVzdC1uYW1lOiBleHBvcnQvaW1wb3J0IGluY29tcGxldGUKbG9jYXRpb246IC9ob21lL3Nh cGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvc3RvcmUuc2NtOjYzMQpzb3VyY2U6Cisg KHRlc3QtYXNzZXJ0CisgICAiZXhwb3J0L2ltcG9ydCBpbmNvbXBsZXRlIgorICAgKGxldCogKChm aWxlMCAoYWRkLXRleHQtdG8tc3RvcmUgJXN0b3JlICJiYXoiIChyYW5kb20tdGV4dCkpKQorICAg ICAgICAgIChmaWxlMSAoYWRkLXRleHQtdG8tc3RvcmUKKyAgICAgICAgICAgICAgICAgICAlc3Rv cmUKKyAgICAgICAgICAgICAgICAgICAiZm9vIgorICAgICAgICAgICAgICAgICAgIChyYW5kb20t dGV4dCkKKyAgICAgICAgICAgICAgICAgICAobGlzdCBmaWxlMCkpKQorICAgICAgICAgIChmaWxl MiAoYWRkLXRleHQtdG8tc3RvcmUKKyAgICAgICAgICAgICAgICAgICAlc3RvcmUKKyAgICAgICAg ICAgICAgICAgICAiYmFyIgorICAgICAgICAgICAgICAgICAgIChyYW5kb20tdGV4dCkKKyAgICAg ICAgICAgICAgICAgICAobGlzdCBmaWxlMSkpKQorICAgICAgICAgIChkdW1wIChjYWxsLXdpdGgt Ynl0ZXZlY3Rvci1vdXRwdXQtcG9ydAorICAgICAgICAgICAgICAgICAgKGN1dGUgZXhwb3J0LXBh dGhzICVzdG9yZSAobGlzdCBmaWxlMikgPD4pKSkpCisgICAgIChkZWxldGUtcGF0aHMgJXN0b3Jl IChsaXN0IGZpbGUwIGZpbGUxIGZpbGUyKSkKKyAgICAgKGd1YXJkIChjICgobml4LXByb3RvY29s LWVycm9yPyBjKQorICAgICAgICAgICAgICAgIChhbmQgKG5vdCAoemVybz8gKG5peC1wcm90b2Nv bC1lcnJvci1zdGF0dXMgYykpKQorICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1jb250YWlu cworICAgICAgICAgICAgICAgICAgICAgICAobml4LXByb3RvY29sLWVycm9yLW1lc3NhZ2UgYykK KyAgICAgICAgICAgICAgICAgICAgICAgIm5vdCB2YWxpZCIpKSkpCisgICAgICAgICAgICAoaW1w b3J0LXBhdGhzCisgICAgICAgICAgICAgICVzdG9yZQorICAgICAgICAgICAgICAob3Blbi1ieXRl dmVjdG9yLWlucHV0LXBvcnQgZHVtcCkpKSkpCmZpbmRpbmcgZ2FyYmFnZSBjb2xsZWN0b3Igcm9v dHMuLi4KZGVsZXRpbmcgdW51c2VkIGxpbmtzLi4uCmFjdHVhbC12YWx1ZTogOTcKcmVzdWx0OiBQ QVNTCgp0ZXN0LW5hbWU6IGV4cG9ydC9pbXBvcnQgcmVjdXJzaXZlCmxvY2F0aW9uOiAvaG9tZS9z YXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N0b3JlLnNjbTo2NDgKc291cmNlOgor ICh0ZXN0LWFzc2VydAorICAgImV4cG9ydC9pbXBvcnQgcmVjdXJzaXZlIgorICAgKGxldCogKChm aWxlMCAoYWRkLXRleHQtdG8tc3RvcmUgJXN0b3JlICJiYXoiIChyYW5kb20tdGV4dCkpKQorICAg ICAgICAgIChmaWxlMSAoYWRkLXRleHQtdG8tc3RvcmUKKyAgICAgICAgICAgICAgICAgICAlc3Rv cmUKKyAgICAgICAgICAgICAgICAgICAiZm9vIgorICAgICAgICAgICAgICAgICAgIChyYW5kb20t dGV4dCkKKyAgICAgICAgICAgICAgICAgICAobGlzdCBmaWxlMCkpKQorICAgICAgICAgIChmaWxl MiAoYWRkLXRleHQtdG8tc3RvcmUKKyAgICAgICAgICAgICAgICAgICAlc3RvcmUKKyAgICAgICAg ICAgICAgICAgICAiYmFyIgorICAgICAgICAgICAgICAgICAgIChyYW5kb20tdGV4dCkKKyAgICAg ICAgICAgICAgICAgICAobGlzdCBmaWxlMSkpKQorICAgICAgICAgIChkdW1wIChjYWxsLXdpdGgt Ynl0ZXZlY3Rvci1vdXRwdXQtcG9ydAorICAgICAgICAgICAgICAgICAgKGN1dGUgZXhwb3J0LXBh dGhzCisgICAgICAgICAgICAgICAgICAgICAgICAlc3RvcmUKKyAgICAgICAgICAgICAgICAgICAg ICAgIChsaXN0IGZpbGUyKQorICAgICAgICAgICAgICAgICAgICAgICAgPD4KKyAgICAgICAgICAg ICAgICAgICAgICAgICM6cmVjdXJzaXZlPworICAgICAgICAgICAgICAgICAgICAgICAgI3QpKSkp CisgICAgIChkZWxldGUtcGF0aHMgJXN0b3JlIChsaXN0IGZpbGUwIGZpbGUxIGZpbGUyKSkKKyAg ICAgKGxldCAoKGltcG9ydGVkCisgICAgICAgICAgICAgKGltcG9ydC1wYXRocworICAgICAgICAg ICAgICAgJXN0b3JlCisgICAgICAgICAgICAgICAob3Blbi1ieXRldmVjdG9yLWlucHV0LXBvcnQg ZHVtcCkpKSkKKyAgICAgICAoYW5kIChlcXVhbD8gaW1wb3J0ZWQgKGxpc3QgZmlsZTAgZmlsZTEg ZmlsZTIpKQorICAgICAgICAgICAgKGV2ZXJ5IGZpbGUtZXhpc3RzPyAobGlzdCBmaWxlMCBmaWxl MSBmaWxlMikpCisgICAgICAgICAgICAoZXF1YWw/IChsaXN0IGZpbGUwKSAocmVmZXJlbmNlcyAl c3RvcmUgZmlsZTEpKQorICAgICAgICAgICAgKGVxdWFsPyAobGlzdCBmaWxlMSkgKHJlZmVyZW5j ZXMgJXN0b3JlIGZpbGUyKSkpKSkpCmZpbmRpbmcgZ2FyYmFnZSBjb2xsZWN0b3Igcm9vdHMuLi4K ZGVsZXRpbmcgdW51c2VkIGxpbmtzLi4uCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0 ZXN0LW5hbWU6IHdyaXRlLWZpbGUgJiBleHBvcnQtcGF0aCB5aWVsZCB0aGUgc2FtZSByZXN1bHQK bG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvc3RvcmUu c2NtOjY2NApzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAid3JpdGUtZmlsZSAmIGV4cG9ydC1w YXRoIHlpZWxkIHRoZSBzYW1lIHJlc3VsdCIKKyAgIChydW4td2l0aC1zdG9yZQorICAgICAlc3Rv cmUKKyAgICAgKG1sZXQqICVzdG9yZS1tb25hZAorICAgICAgICAgICAgKChkcnYxIChwYWNrYWdl LT5kZXJpdmF0aW9uICVib290c3RyYXAtZ3VpbGUpKQorICAgICAgICAgICAgIChvdXQxIC0+IChk ZXJpdmF0aW9uLT5vdXRwdXQtcGF0aCBkcnYxKSkKKyAgICAgICAgICAgICAoZGF0YSAtPgorICAg ICAgICAgICAgICAgICAgICh1bmZvbGQKKyAgICAgICAgICAgICAgICAgICAgIChjdXQgPj0gPD4g MjYpCisgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChpKSAocmFuZG9tLWJ5dGV2ZWN0b3Ig MTI4KSkKKyAgICAgICAgICAgICAgICAgICAgICN7MSt9IworICAgICAgICAgICAgICAgICAgICAg MCkpCisgICAgICAgICAgICAgKGJ1aWxkIC0+CisgICAgICAgICAgICAgICAgICAgIChnZXhwIChi ZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2UtbW9kdWxlcyAocm5ycyBpbyBw b3J0cykgKHNyZmkgc3JmaS0xKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmaW5lIGxldHRlcnMKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKG1hcCAobGFtYmRhIChpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoaW50ZWdlci0+Y2hhcgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgrIGkgKGNoYXItPmludGVnZXIgI1xhKSkpKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW90YSAyNikpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGRlZmluZSAodG91Y2ggZmlsZSBkYXRhKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2FsbC13aXRoLW91dHB1dC1maWxlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsYW1iZGEgKHBvcnQpIChwdXQtYnl0ZXZlY3RvciBwb3J0IGRhdGEpKSkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobWtkaXIgKHVuZ2V4cCBvdXRwdXQpKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNoZGlyICh1bmdleHAgb3V0cHV0KSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChmb3ItZWFjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0b3VjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIChkcm9wIGxl dHRlcnMgMTApICh0YWtlIGxldHRlcnMgMTApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobGlzdCAodW5nZXhwLXNwbGljaW5nIGRhdGEpKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICN0KSkpKQorICAgICAgICAgICAgIChkcnYyIChnZXhwLT5kZXJpdmF0aW9uICJi dW5jaCIgYnVpbGQpKQorICAgICAgICAgICAgIChvdXQyIC0+IChkZXJpdmF0aW9uLT5vdXRwdXQt cGF0aCBkcnYyKSkKKyAgICAgICAgICAgICAoaXRlbS1pbmZvIC0+IChzdG9yZS1saWZ0IHF1ZXJ5 LXBhdGgtaW5mbykpKQorICAgICAgICAgICAgKG1iZWdpbgorICAgICAgICAgICAgICAlc3RvcmUt bW9uYWQKKyAgICAgICAgICAgICAgKGJ1aWx0LWRlcml2YXRpb25zIChsaXN0IGRydjEgZHJ2Mikp CisgICAgICAgICAgICAgIChmb2xkbSAlc3RvcmUtbW9uYWQKKyAgICAgICAgICAgICAgICAgICAg IChsYW1iZGEgKGl0ZW0gcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAoZGVmaW5lIHJl Zi1oYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgKGxldC12YWx1ZXMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICgoKHBvcnQgZ2V0KSAob3Blbi1zaGEyNTYtcG9ydCkpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHdyaXRlLWZpbGUgaXRlbSBwb3J0KQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNsb3NlLXBvcnQgcG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIChnZXQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgKD4+PSAoaXRlbS1pbmZvIGl0ZW0p CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoaW5mbykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChyZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGFuZCByZXN1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0 ZXZlY3Rvcj0/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aC1p bmZvLWhhc2ggaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl Zi1oYXNoKSkpKSkpCisgICAgICAgICAgICAgICAgICAgICAjdAorICAgICAgICAgICAgICAgICAg ICAgKGxpc3Qgb3V0MSBvdXQyKSkpKQorICAgICAjOmd1aWxlLWZvci1idWlsZAorICAgICAoJWd1 aWxlLWZvci1idWlsZCkpKQpAIGJ1aWxkLXN0YXJ0ZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3Vp eC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9uMXBrbWFiNXc0bjFhaGF6NTgwaG42OWthcG4zNmps OS1idW5jaC5kcnYgLSB4ODZfNjQtbGludXggL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4 X3dpcC90ZXN0LXRtcC92YXIvbG9nL2d1aXgvZHJ2cy9uMS8vcGttYWI1dzRuMWFoYXo1ODBobjY5 a2FwbjM2amw5LWJ1bmNoLmRydi5iejIKQCBidWlsZC1zdWNjZWVkZWQgL2hvbWUvc2FwaWVudGVj aC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9uMXBrbWFiNXc0bjFhaGF6NTgwaG42 OWthcG4zNmpsOS1idW5jaC5kcnYgLQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVz dC1uYW1lOiBpbXBvcnQgY29ycnVwdCBwYXRoCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rl di9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N0b3JlLnNjbTo3MzAKc291cmNlOgorICh0ZXN0LWFzc2Vy dAorICAgImltcG9ydCBjb3JydXB0IHBhdGgiCisgICAobGV0KiAoKHRleHQgKHJhbmRvbS10ZXh0 KSkKKyAgICAgICAgICAoZmlsZSAoYWRkLXRleHQtdG8tc3RvcmUgJXN0b3JlICJ0ZXh0IiB0ZXh0 KSkKKyAgICAgICAgICAoZHVtcCAoY2FsbC13aXRoLWJ5dGV2ZWN0b3Itb3V0cHV0LXBvcnQKKyAg ICAgICAgICAgICAgICAgIChjdXQgZXhwb3J0LXBhdGhzICVzdG9yZSAobGlzdCBmaWxlKSA8Pikp KSkKKyAgICAgKGRlbGV0ZS1wYXRocyAlc3RvcmUgKGxpc3QgZmlsZSkpCisgICAgIChsZXQqICgo aW5kZXggKHF1b3RpZW50IChieXRldmVjdG9yLWxlbmd0aCBkdW1wKSA0KSkKKyAgICAgICAgICAg IChieXRlIChieXRldmVjdG9yLXU4LXJlZiBkdW1wIGluZGV4KSkpCisgICAgICAgKGJ5dGV2ZWN0 b3ItdTgtc2V0ISBkdW1wIGluZGV4IChsb2d4b3IgMjU1IGJ5dGUpKSkKKyAgICAgKGFuZCAobm90 IChmaWxlLWV4aXN0cz8gZmlsZSkpCisgICAgICAgICAgKGd1YXJkIChjICgobml4LXByb3RvY29s LWVycm9yPyBjKQorICAgICAgICAgICAgICAgICAgICAgKHBrICdjIGMpCisgICAgICAgICAgICAg ICAgICAgICAoYW5kIChub3QgKHplcm8/IChuaXgtcHJvdG9jb2wtZXJyb3Itc3RhdHVzIGMpKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1jb250YWlucworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChuaXgtcHJvdG9jb2wtZXJyb3ItbWVzc2FnZSBjKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJjb3JydXB0IikpKSkKKyAgICAgICAgICAgICAgICAgKGxldCog KChzb3VyY2UgKG9wZW4tYnl0ZXZlY3Rvci1pbnB1dC1wb3J0IGR1bXApKQorICAgICAgICAgICAg ICAgICAgICAgICAgKGltcG9ydGVkIChpbXBvcnQtcGF0aHMgJXN0b3JlIHNvdXJjZSkpKQorICAg ICAgICAgICAgICAgICAgIChwayAnY29ycnVwdC1pbXBvcnRlZCBpbXBvcnRlZCkKKyAgICAgICAg ICAgICAgICAgICAjZikpKSkpCmZpbmRpbmcgZ2FyYmFnZSBjb2xsZWN0b3Igcm9vdHMuLi4KZGVs ZXRpbmcgdW51c2VkIGxpbmtzLi4uCgo7OzsgKGMgIzxjb25kaXRpb24gJm5peC1wcm90b2NvbC1l cnJvciBbbWVzc2FnZTogInNpZ25lZCBoYXNoIGRvZXNuJ3QgbWF0Y2ggYWN0dWFsIGNvbnRlbnRz IG9mIGltcG9ydGVkIGFyY2hpdmU7IGFyY2hpdmUgY291bGQgYmUgY29ycnVwdCwgb3Igc29tZW9u ZSBpcyB0cnlpbmcgdG8gaW1wb3J0IGEgVHJvamFuIGhvcnNlIiBzdGF0dXM6IDFdIDE3MzE3ZTA+ KQphY3R1YWwtdmFsdWU6IDgwCnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiByZWdpc3Rlci1wYXRo CmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N0b3Jl LnNjbTo3NTMKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgInJlZ2lzdGVyLXBhdGgiCisgICAo bGV0ICgoZmlsZSAoc3RyaW5nLWFwcGVuZAorICAgICAgICAgICAgICAgICAoJXN0b3JlLXByZWZp eCkKKyAgICAgICAgICAgICAgICAgIi8iCisgICAgICAgICAgICAgICAgIChtYWtlLXN0cmluZyAz MiAjXGYpCisgICAgICAgICAgICAgICAgICItZmFrZSIpKSkKKyAgICAgKHdoZW4gKHZhbGlkLXBh dGg/ICVzdG9yZSBmaWxlKQorICAgICAgICAgICAoZGVsZXRlLXBhdGhzICVzdG9yZSAobGlzdCBm aWxlKSkpCisgICAgIChmYWxzZS1pZi1leGNlcHRpb24gKGRlbGV0ZS1maWxlIGZpbGUpKQorICAg ICAobGV0ICgocmVmIChhZGQtdGV4dC10by1zdG9yZQorICAgICAgICAgICAgICAgICAgJXN0b3Jl CisgICAgICAgICAgICAgICAgICAicmVmLW9mLWZha2UiCisgICAgICAgICAgICAgICAgICAocmFu ZG9tLXRleHQpKSkKKyAgICAgICAgICAgKGRydiAoc3RyaW5nLWFwcGVuZCBmaWxlICIuZHJ2Iikp KQorICAgICAgIChjYWxsLXdpdGgtb3V0cHV0LWZpbGUKKyAgICAgICAgIGZpbGUKKyAgICAgICAg IChjdXQgZGlzcGxheSAiVGhpcyBpcyBhIGZha2Ugc3RvcmUgaXRlbS5cbiIgPD4pKQorICAgICAg IChyZWdpc3Rlci1wYXRoCisgICAgICAgICBmaWxlCisgICAgICAgICAjOnJlZmVyZW5jZXMKKyAg ICAgICAgIChsaXN0IHJlZikKKyAgICAgICAgICM6ZGVyaXZlcgorICAgICAgICAgZHJ2KQorICAg ICAgIChhbmQgKHZhbGlkLXBhdGg/ICVzdG9yZSBmaWxlKQorICAgICAgICAgICAgKGVxdWFsPyAo cmVmZXJlbmNlcyAlc3RvcmUgZmlsZSkgKGxpc3QgcmVmKSkKKyAgICAgICAgICAgIChudWxsPyAo dmFsaWQtZGVyaXZlcnMgJXN0b3JlIGZpbGUpKQorICAgICAgICAgICAgKG51bGw/IChyZWZlcnJl cnMgJXN0b3JlIGZpbGUpKSkpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3Qt bmFtZTogdmVyaWZ5LXN0b3JlCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1 aXhfd2lwL3Rlc3RzL3N0b3JlLnNjbTo3NzMKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgInZl cmlmeS1zdG9yZSIKKyAgIChsZXQqICgodGV4dCAocmFuZG9tLXRleHQpKQorICAgICAgICAgIChm aWxlMSAoYWRkLXRleHQtdG8tc3RvcmUgJXN0b3JlICJmb28iIHRleHQpKQorICAgICAgICAgIChm aWxlMiAoYWRkLXRleHQtdG8tc3RvcmUKKyAgICAgICAgICAgICAgICAgICAlc3RvcmUKKyAgICAg ICAgICAgICAgICAgICAiYmFyIgorICAgICAgICAgICAgICAgICAgIChyYW5kb20tdGV4dCkKKyAg ICAgICAgICAgICAgICAgICAobGlzdCBmaWxlMSkpKSkKKyAgICAgKGFuZCAocGsgJ3ZlcmlmeTEg KHZlcmlmeS1zdG9yZSAlc3RvcmUpKQorICAgICAgICAgIChiZWdpbgorICAgICAgICAgICAgKGRl bGV0ZS1maWxlIGZpbGUxKQorICAgICAgICAgICAgKG5vdCAocGsgJ3ZlcmlmeTIgKHZlcmlmeS1z dG9yZSAlc3RvcmUpKSkpCisgICAgICAgICAgKGJlZ2luCisgICAgICAgICAgICAoY2FsbC13aXRo LW91dHB1dC1maWxlCisgICAgICAgICAgICAgIGZpbGUxCisgICAgICAgICAgICAgIChsYW1iZGEg KHBvcnQpIChkaXNwbGF5IHRleHQgcG9ydCkpKQorICAgICAgICAgICAgKHBrICd2ZXJpZnkzICh2 ZXJpZnktc3RvcmUgJXN0b3JlKSkpKSkpCnJlYWRpbmcgdGhlIE5peCBzdG9yZS4uLgoKOzs7ICh2 ZXJpZnkxICN0KQpyZWFkaW5nIHRoZSBOaXggc3RvcmUuLi4KcGF0aCBgL2hvbWUvc2FwaWVudGVj aC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS82N2dkYzhycW4xcTBqN2FxcjBrNWNu aHlreGZuNXNhaS1mb28nIGRpc2FwcGVhcmVkLCBidXQgaXQgc3RpbGwgaGFzIHZhbGlkIHJlZmVy cmVycyEKCjs7OyAodmVyaWZ5MiAjZikKcmVhZGluZyB0aGUgTml4IHN0b3JlLi4uCgo7OzsgKHZl cmlmeTMgI3QpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHZlcmlm eS1zdG9yZSArIGNoZWNrLWNvbnRlbnRzCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9n dWl4L2d1aXhfd2lwL3Rlc3RzL3N0b3JlLnNjbTo3OTAKc291cmNlOgorICh0ZXN0LWFzc2VydAor ICAgInZlcmlmeS1zdG9yZSArIGNoZWNrLWNvbnRlbnRzIgorICAgKHdpdGgtc3RvcmUKKyAgICAg cworICAgICAobGV0KiAoKHRleHQgKHJhbmRvbS10ZXh0KSkKKyAgICAgICAgICAgIChkcnYgKGJ1 aWxkLWV4cHJlc3Npb24tPmRlcml2YXRpb24KKyAgICAgICAgICAgICAgICAgICBzCisgICAgICAg ICAgICAgICAgICAgImNvcnJ1cHQiCisgICAgICAgICAgICAgICAgICAgYChsZXQgKChvdXQgKGFz c29jLXJlZiAlb3V0cHV0cyAib3V0IikpKQorICAgICAgICAgICAgICAgICAgICAgIChjYWxsLXdp dGgtb3V0cHV0LWZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dAorICAgICAgICAgICAg ICAgICAgICAgICAgKGxhbWJkYSAocG9ydCkgKGRpc3BsYXkgLHRleHQgcG9ydCkpKQorICAgICAg ICAgICAgICAgICAgICAgICN0KQorICAgICAgICAgICAgICAgICAgICM6Z3VpbGUtZm9yLWJ1aWxk CisgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtZGVyaXZhdGlvbgorICAgICAgICAgICAgICAg ICAgICAgcworICAgICAgICAgICAgICAgICAgICAgJWJvb3RzdHJhcC1ndWlsZQorICAgICAgICAg ICAgICAgICAgICAgKCVjdXJyZW50LXN5c3RlbSkpKSkKKyAgICAgICAgICAgIChmaWxlIChkZXJp dmF0aW9uLT5vdXRwdXQtcGF0aCBkcnYpKSkKKyAgICAgICAod2l0aC1kZXJpdmF0aW9uLXN1YnN0 aXR1dGUKKyAgICAgICAgIGRydgorICAgICAgICAgdGV4dAorICAgICAgICAgKGFuZCAoYnVpbGQt ZGVyaXZhdGlvbnMgcyAobGlzdCBkcnYpKQorICAgICAgICAgICAgICAodmVyaWZ5LXN0b3JlIHMg IzpjaGVjay1jb250ZW50cz8gI3QpCisgICAgICAgICAgICAgIChiZWdpbgorICAgICAgICAgICAg ICAgIChjaG1vZCBmaWxlIDQyMCkKKyAgICAgICAgICAgICAgICAoY2FsbC13aXRoLW91dHB1dC1m aWxlCisgICAgICAgICAgICAgICAgICBmaWxlCisgICAgICAgICAgICAgICAgICAobGFtYmRhIChw b3J0KSAoZGlzcGxheSAiY29ycnVwdCEiIHBvcnQpKSkKKyAgICAgICAgICAgICAgICAjdCkKKyAg ICAgICAgICAgICAgKG5vdCAodmVyaWZ5LXN0b3JlIHMgIzpjaGVjay1jb250ZW50cz8gI3QpKQor ICAgICAgICAgICAgICAoZGVsZXRlLXBhdGhzIHMgKGxpc3QgZmlsZSkpKSkpKSkKc3Vic3RpdHV0 ZTogd2FybmluZzogYXV0aGVudGljYXRpb24gYW5kIGF1dGhvcml6YXRpb24gb2Ygc3Vic3RpdHV0 ZXMgZGlzYWJsZWQhCnN1YnN0aXR1dGU6IGd1aXggc3Vic3RpdHV0ZTogd2FybmluZzogQUNMIGZv ciBhcmNoaXZlIGltcG9ydHMgc2VlbXMgdG8gYmUgdW5pbml0aWFsaXplZCwgc3Vic3RpdHV0ZXMg bWF5IGJlIHVuYXZhaWxhYmxlCmZldGNoaW5nIHBhdGggYC9ob21lL3NhcGllbnRlY2gvRGV2L2d1 aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvOWpqNmhmbWt3aHlubHNqcHIyNnFsZjZ3eDMwOHIz MjItY29ycnVwdCcuLi4Kd2FybmluZzogYXV0aGVudGljYXRpb24gYW5kIGF1dGhvcml6YXRpb24g b2Ygc3Vic3RpdHV0ZXMgZGlzYWJsZWQhCmd1aXggc3Vic3RpdHV0ZTogd2FybmluZzogQUNMIGZv ciBhcmNoaXZlIGltcG9ydHMgc2VlbXMgdG8gYmUgdW5pbml0aWFsaXplZCwgc3Vic3RpdHV0ZXMg bWF5IGJlIHVuYXZhaWxhYmxlCkRvd25sb2FkaW5nIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgv Z3VpeF93aXAvdGVzdC10bXAvc3RvcmUvOWpqNmhmbWt3aHlubHNqcHIyNnFsZjZ3eDMwOHIzMjIt Y29ycnVwdCAoMUtpQiBpbnN0YWxsZWQpLi4uCg0bW0sgZXhhbXBsZS5uYXIgIDE3NkIgICAgICAg ICAgICAgICAgICAgICAgMEIvcyAwMDowMCBbIyMjIyMjIyMjIyMjIyMjIyMjIyNdIDEwMC4wJQpy ZWFkaW5nIHRoZSBOaXggc3RvcmUuLi4KY2hlY2tpbmcgcGF0aCBleGlzdGVuY2UuLi4KY2hlY2tp bmcgaGFzaGVzLi4uCnJlYWRpbmcgdGhlIE5peCBzdG9yZS4uLgpjaGVja2luZyBwYXRoIGV4aXN0 ZW5jZS4uLgpjaGVja2luZyBoYXNoZXMuLi4KcGF0aCBgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3Vp eC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS85amo2aGZta3doeW5sc2pwcjI2cWxmNnd4MzA4cjMy Mi1jb3JydXB0JyB3YXMgbW9kaWZpZWQhIGV4cGVjdGVkIGhhc2ggYDNmZmI3NzFkOGMzY2JhYzk4 ZDU0NWJmMmIwZWFhN2MwYWFiNjkxYWZkMWNmMDJmNGI4ODA4Mjc4NDgzN2I2YzMnLCBnb3QgYGUw OWM0ODBlMmU5MzMzNmNkM2M0NWFhMTI5ZjgxYTBkN2JhNTZjNDEwYjg0OWQ3Nzc5YTgxMzYwNzQ0 MTNiM2QnCmZpbmRpbmcgZ2FyYmFnZSBjb2xsZWN0b3Igcm9vdHMuLi4KcmVtb3Zpbmcgc3RhbGUg dGVtcG9yYXJ5IHJvb3RzIGZpbGUgYC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAv dGVzdC10bXAvdmFyLzQ1NzgvdGVtcHJvb3RzLzQ5MjAnCmRlbGV0aW5nIGAvaG9tZS9zYXBpZW50 ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlLzlqajZoZm1rd2h5bmxzanByMjZx bGY2d3gzMDhyMzIyLWNvcnJ1cHQnCmRlbGV0aW5nIGAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4 L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL3RyYXNoJwpkZWxldGluZyB1bnVzZWQgbGlua3MuLi4K bm90ZTogY3VycmVudGx5IGhhcmQgbGlua2luZyBzYXZlcyAxOS42NiBNaUIKYWN0dWFsLXZhbHVl OiAoL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS85amo2 aGZta3doeW5sc2pwcjI2cWxmNnd4MzA4cjMyMi1jb3JydXB0KQpyZXN1bHQ6IFBBU1MKCnRlc3Qt bmFtZTogYnVpbGQtdGhpbmdzLCBjaGVjayBtb2RlCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNo L0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N0b3JlLnNjbTo4MjcKc291cmNlOgorICh0ZXN0LWFz c2VydAorICAgImJ1aWxkLXRoaW5ncywgY2hlY2sgbW9kZSIKKyAgICh3aXRoLXN0b3JlCisgICAg IHN0b3JlCisgICAgIChjYWxsLXdpdGgtdGVtcG9yYXJ5LW91dHB1dC1maWxlCisgICAgICAgKGxh bWJkYSAoZW50cm9weSBlbnRyb3B5LXBvcnQpCisgICAgICAgICAod3JpdGUgKHJhbmRvbS10ZXh0 KSBlbnRyb3B5LXBvcnQpCisgICAgICAgICAoZm9yY2Utb3V0cHV0IGVudHJvcHktcG9ydCkKKyAg ICAgICAgIChsZXQqICgoZHJ2IChidWlsZC1leHByZXNzaW9uLT5kZXJpdmF0aW9uCisgICAgICAg ICAgICAgICAgICAgICAgIHN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICJub24tZGV0ZXJt aW5pc3RpYyIKKyAgICAgICAgICAgICAgICAgICAgICAgYChiZWdpbgorICAgICAgICAgICAgICAg ICAgICAgICAgICAodXNlLW1vZHVsZXMgKHJucnMgaW8gcG9ydHMpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAobGV0ICgob3V0IChhc3NvYy1yZWYgJW91dHB1dHMgIm91dCIpKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY2FsbC13aXRoLW91dHB1dC1maWxlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs YW1iZGEgKHBvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbGwtd2l0aC1pbnB1dC1maWxlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsZW50cm9weQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0LXN0cmluZy1hbGwpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcG9ydCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0 KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIzpndWlsZS1mb3ItYnVpbGQKKyAgICAgICAgICAg ICAgICAgICAgICAgKHBhY2thZ2UtZGVyaXZhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAg IHN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgJWJvb3RzdHJhcC1ndWlsZQorICAgICAg ICAgICAgICAgICAgICAgICAgICglY3VycmVudC1zeXN0ZW0pKSkpCisgICAgICAgICAgICAgICAg KGZpbGUgKGRlcml2YXRpb24tPm91dHB1dC1wYXRoIGRydikpKQorICAgICAgICAgICAoYW5kIChi dWlsZC10aGluZ3MKKyAgICAgICAgICAgICAgICAgIHN0b3JlCisgICAgICAgICAgICAgICAgICAo bGlzdCAoZGVyaXZhdGlvbi1maWxlLW5hbWUgZHJ2KSkpCisgICAgICAgICAgICAgICAgKGJlZ2lu CisgICAgICAgICAgICAgICAgICAod3JpdGUgKHJhbmRvbS10ZXh0KSBlbnRyb3B5LXBvcnQpCisg ICAgICAgICAgICAgICAgICAoZm9yY2Utb3V0cHV0IGVudHJvcHktcG9ydCkKKyAgICAgICAgICAg ICAgICAgIChndWFyZCAoYyAoKG5peC1wcm90b2NvbC1lcnJvcj8gYykKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHBrICdkZXRlcm1pbmlzbS1leGNlcHRpb24gYykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGFuZCAobm90ICh6ZXJvPyAobml4LXByb3RvY29sLWVycm9yLXN0 YXR1cyBjKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1jb250 YWlucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5peC1wcm90b2NvbC1l cnJvci1tZXNzYWdlIGMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGV0 ZXJtaW5pc3RpYyIpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1aWxkLXRoaW5ncwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsaXN0IChkZXJpdmF0aW9uLWZpbGUtbmFtZSBkcnYpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGJ1aWxkLW1vZGUgY2hlY2spKQorICAgICAgICAgICAgICAgICAgICAgICAgICNm KSkpKSkpKSkKc3Vic3RpdHV0ZTogd2FybmluZzogYXV0aGVudGljYXRpb24gYW5kIGF1dGhvcml6 YXRpb24gb2Ygc3Vic3RpdHV0ZXMgZGlzYWJsZWQhCnN1YnN0aXR1dGU6IGd1aXggc3Vic3RpdHV0 ZTogd2FybmluZzogQUNMIGZvciBhcmNoaXZlIGltcG9ydHMgc2VlbXMgdG8gYmUgdW5pbml0aWFs aXplZCwgc3Vic3RpdHV0ZXMgbWF5IGJlIHVuYXZhaWxhYmxlCmJ1aWxkaW5nIHBhdGgocykgYC9o b21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvc2pjbTJ6bDBi eGJ6a3dwYm5qbGI5a3pmZnNsMjA1OGotbm9uLWRldGVybWluaXN0aWMnCmNoZWNraW5nIHBhdGgo cykgYC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvc2pj bTJ6bDBieGJ6a3dwYm5qbGI5a3pmZnNsMjA1OGotbm9uLWRldGVybWluaXN0aWMnCndhcm5pbmc6 IHJld3JpdGluZyBoYXNoZXMgaW4gYC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAv dGVzdC10bXAvc3RvcmUvc2pjbTJ6bDBieGJ6a3dwYm5qbGI5a3pmZnNsMjA1OGotbm9uLWRldGVy bWluaXN0aWMnOyBjcm9zcyBmaW5nZXJzCgo7OzsgKGRldGVybWluaXNtLWV4Y2VwdGlvbiAjPGNv bmRpdGlvbiAmbml4LXByb3RvY29sLWVycm9yIFttZXNzYWdlOiAiZGVyaXZhdGlvbiBgL2hvbWUv c2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS95eGk1a3Yxc3pxOGNh MzB4ZGJqc3M4Z2RwcjB2cWZhay1ub24tZGV0ZXJtaW5pc3RpYy5kcnYnIG1heSBub3QgYmUgZGV0 ZXJtaW5pc3RpYzogb3V0cHV0IGAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rl c3QtdG1wL3N0b3JlL3NqY20yemwwYnhiemt3cGJuamxiOWt6ZmZzbDIwNThqLW5vbi1kZXRlcm1p bmlzdGljJyBkaWZmZXJzIiBzdGF0dXM6IDFdIDI0MDUzZjA+KQphY3R1YWwtdmFsdWU6IDk5CnJl c3VsdDogUEFTUwoKdGVzdC1uYW1lOiBidWlsZCBtdWx0aXBsZSB0aW1lcwpsb2NhdGlvbjogL2hv bWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zdG9yZS5zY206ODY0CnNvdXJj ZToKKyAodGVzdC1hc3NlcnQKKyAgICJidWlsZCBtdWx0aXBsZSB0aW1lcyIKKyAgICh3aXRoLXN0 b3JlCisgICAgIHN0b3JlCisgICAgIChzZXQtYnVpbGQtb3B0aW9ucworICAgICAgIHN0b3JlCisg ICAgICAgIzpyb3VuZHMKKyAgICAgICAyCisgICAgICAgIzp1c2Utc3Vic3RpdHV0ZXM/CisgICAg ICAgI2YpCisgICAgIChjYWxsLXdpdGgtdGVtcG9yYXJ5LW91dHB1dC1maWxlCisgICAgICAgKGxh bWJkYSAoZW50cm9weSBlbnRyb3B5LXBvcnQpCisgICAgICAgICAod3JpdGUgKHJhbmRvbS10ZXh0 KSBlbnRyb3B5LXBvcnQpCisgICAgICAgICAoZm9yY2Utb3V0cHV0IGVudHJvcHktcG9ydCkKKyAg ICAgICAgIChsZXQqICgoZHJ2IChidWlsZC1leHByZXNzaW9uLT5kZXJpdmF0aW9uCisgICAgICAg ICAgICAgICAgICAgICAgIHN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICJub24tZGV0ZXJt aW5pc3RpYyIKKyAgICAgICAgICAgICAgICAgICAgICAgYChiZWdpbgorICAgICAgICAgICAgICAg ICAgICAgICAgICAodXNlLW1vZHVsZXMgKHJucnMgaW8gcG9ydHMpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAobGV0ICgob3V0IChhc3NvYy1yZWYgJW91dHB1dHMgIm91dCIpKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY2FsbC13aXRoLW91dHB1dC1maWxlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs YW1iZGEgKHBvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbGwtd2l0aC1pbnB1dC1maWxlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsZW50cm9weQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0LXN0cmluZy1hbGwpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNhbGwtd2l0aC1vdXRwdXQtZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICxlbnRyb3B5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAocG9y dCkgKHdyaXRlICdmb29iYXIgcG9ydCkpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg I3QpKQorICAgICAgICAgICAgICAgICAgICAgICAjOmd1aWxlLWZvci1idWlsZAorICAgICAgICAg ICAgICAgICAgICAgICAocGFja2FnZS1kZXJpdmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAg ICAgc3RvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAlYm9vdHN0cmFwLWd1aWxlCisgICAg ICAgICAgICAgICAgICAgICAgICAgKCVjdXJyZW50LXN5c3RlbSkpKSkKKyAgICAgICAgICAgICAg ICAoZmlsZSAoZGVyaXZhdGlvbi0+b3V0cHV0LXBhdGggZHJ2KSkpCisgICAgICAgICAgIChndWFy ZCAoYyAoKG5peC1wcm90b2NvbC1lcnJvcj8gYykKKyAgICAgICAgICAgICAgICAgICAgICAocGsg J211bHRpcGxlLWJ1aWxkIGMpCisgICAgICAgICAgICAgICAgICAgICAgKGFuZCAobm90ICh6ZXJv PyAobml4LXByb3RvY29sLWVycm9yLXN0YXR1cyBjKSkpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAoc3RyaW5nLWNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuaXgt cHJvdG9jb2wtZXJyb3ItbWVzc2FnZSBjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi ZGV0ZXJtaW5pc3RpYyIpKSkpCisgICAgICAgICAgICAgICAgICAoY3VycmVudC1idWlsZC1vdXRw dXQtcG9ydCAoY3VycmVudC1lcnJvci1wb3J0KSkKKyAgICAgICAgICAgICAgICAgIChidWlsZC10 aGluZ3MKKyAgICAgICAgICAgICAgICAgICAgc3RvcmUKKyAgICAgICAgICAgICAgICAgICAgKGxp c3QgKGRlcml2YXRpb24tZmlsZS1uYW1lIGRydikpKQorICAgICAgICAgICAgICAgICAgI2YpKSkp KSkKQCBidWlsZC1zdGFydGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVz dC10bXAvc3RvcmUvc2w1MjJpazBqaTNtOGNpN3hsZGZicDU2cGxuNHp6dnAtbm9uLWRldGVybWlu aXN0aWMuZHJ2IC0geDg2XzY0LWxpbnV4IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93 aXAvdGVzdC10bXAvdmFyL2xvZy9ndWl4L2RydnMvc2wvLzUyMmlrMGppM204Y2k3eGxkZmJwNTZw bG40enp2cC1ub24tZGV0ZXJtaW5pc3RpYy5kcnYuYnoyCkAgYnVpbGQtc3RhcnRlZCAvaG9tZS9z YXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL3NsNTIyaWswamkzbThj aTd4bGRmYnA1NnBsbjR6enZwLW5vbi1kZXRlcm1pbmlzdGljLmRydiAtIHg4Nl82NC1saW51eCAv aG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3Zhci9sb2cvZ3VpeC9k cnZzL3NsLy81MjJpazBqaTNtOGNpN3hsZGZicDU2cGxuNHp6dnAtbm9uLWRldGVybWluaXN0aWMu ZHJ2LmJ6MgpvdXRwdXQgPy9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10 bXAvc3RvcmUvYXNnMzBobG1jcGo0Y3hhanN2bWJ6azZoY3JnOHhuajYtbm9uLWRldGVybWluaXN0 aWM/IG9mID8vaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3Jl L3NsNTIyaWswamkzbThjaTd4bGRmYnA1NnBsbjR6enZwLW5vbi1kZXRlcm1pbmlzdGljLmRydj8g ZGlmZmVycyBmcm9tIHByZXZpb3VzIHJvdW5kCkAgYnVpbGQtZmFpbGVkIC9ob21lL3NhcGllbnRl Y2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvc2w1MjJpazBqaTNtOGNpN3hsZGZi cDU2cGxuNHp6dnAtbm9uLWRldGVybWluaXN0aWMuZHJ2IC0gMSBvdXRwdXQgPy9ob21lL3NhcGll bnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvYXNnMzBobG1jcGo0Y3hhanN2 bWJ6azZoY3JnOHhuajYtbm9uLWRldGVybWluaXN0aWM/IG9mID8vaG9tZS9zYXBpZW50ZWNoL0Rl di9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL3NsNTIyaWswamkzbThjaTd4bGRmYnA1NnBs bjR6enZwLW5vbi1kZXRlcm1pbmlzdGljLmRydj8gZGlmZmVycyBmcm9tIHByZXZpb3VzIHJvdW5k Cgo7OzsgKG11bHRpcGxlLWJ1aWxkICM8Y29uZGl0aW9uICZuaXgtcHJvdG9jb2wtZXJyb3IgW21l c3NhZ2U6ICJidWlsZCBvZiBgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0 LXRtcC9zdG9yZS9zbDUyMmlrMGppM204Y2k3eGxkZmJwNTZwbG40enp2cC1ub24tZGV0ZXJtaW5p c3RpYy5kcnYnIGZhaWxlZCIgc3RhdHVzOiAxXSAxYWU3YTIwPikKYWN0dWFsLXZhbHVlOiA5Nwpy ZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogc3RvcmUtbG93ZXIKbG9jYXRpb246IC9ob21lL3NhcGll bnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvc3RvcmUuc2NtOjkwMgpzb3VyY2U6CisgKHRl c3QtZXF1YWwKKyAgICJzdG9yZS1sb3dlciIKKyAgICJMb3dlcmVkLiIKKyAgIChsZXQqICgoYWRk IChzdG9yZS1sb3dlciB0ZXh0LWZpbGUpKQorICAgICAgICAgIChmaWxlIChhZGQgJXN0b3JlICJm b28iICJMb3dlcmVkLiIpKSkKKyAgICAgKGNhbGwtd2l0aC1pbnB1dC1maWxlIGZpbGUgZ2V0LXN0 cmluZy1hbGwpKSkKZXhwZWN0ZWQtdmFsdWU6IExvd2VyZWQuCmFjdHVhbC12YWx1ZTogTG93ZXJl ZC4KcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGN1cnJlbnQtc3lzdGVtCmxvY2F0aW9uOiAvaG9t ZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N0b3JlLnNjbTo5MDgKc291cmNl OgorICh0ZXN0LWVxdWFsCisgICAiY3VycmVudC1zeXN0ZW0iCisgICAiYmFyIgorICAgKHBhcmFt ZXRlcml6ZQorICAgICAoKCVjdXJyZW50LXN5c3RlbSAiZnJvYiIpKQorICAgICAocnVuLXdpdGgt c3RvcmUKKyAgICAgICAlc3RvcmUKKyAgICAgICAobWJlZ2luCisgICAgICAgICAlc3RvcmUtbW9u YWQKKyAgICAgICAgIChzZXQtY3VycmVudC1zeXN0ZW0gImJhciIpCisgICAgICAgICAoY3VycmVu dC1zeXN0ZW0pKQorICAgICAgICM6c3lzdGVtCisgICAgICAgImZvbyIpKSkKZXhwZWN0ZWQtdmFs dWU6IGJhcgphY3R1YWwtdmFsdWU6IGJhcgpyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogcXVlcnkt cGF0aC1pbmZvCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rl c3RzL3N0b3JlLnNjbTo5MTcKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgInF1ZXJ5LXBhdGgt aW5mbyIKKyAgIChsZXQqICgocmVmIChhZGQtdGV4dC10by1zdG9yZSAlc3RvcmUgInJlZiIgImZv byIpKQorICAgICAgICAgIChpdGVtIChhZGQtdGV4dC10by1zdG9yZQorICAgICAgICAgICAgICAg ICAgJXN0b3JlCisgICAgICAgICAgICAgICAgICAiaXRlbSIKKyAgICAgICAgICAgICAgICAgICJi YXIiCisgICAgICAgICAgICAgICAgICAobGlzdCByZWYpKSkKKyAgICAgICAgICAoaW5mbyAocXVl cnktcGF0aC1pbmZvICVzdG9yZSBpdGVtKSkpCisgICAgIChhbmQgKGVxdWFsPyAocGF0aC1pbmZv LXJlZmVyZW5jZXMgaW5mbykgKGxpc3QgcmVmKSkKKyAgICAgICAgICAoZXF1YWw/CisgICAgICAg ICAgICAocGF0aC1pbmZvLWhhc2ggaW5mbykKKyAgICAgICAgICAgIChzaGEyNTYKKyAgICAgICAg ICAgICAgKHN0cmluZy0+dXRmOAorICAgICAgICAgICAgICAgIChjYWxsLXdpdGgtb3V0cHV0LXN0 cmluZworICAgICAgICAgICAgICAgICAgKGN1dCB3cml0ZS1maWxlIGl0ZW0gPD4pKSkpKSkpKQph Y3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBwYXRoLWluZm8tZGVyaXZl cgpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zdG9y ZS5zY206OTI3CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJwYXRoLWluZm8tZGVyaXZlciIK KyAgIChsZXQqICgoYiAoYWRkLXRleHQtdG8tc3RvcmUKKyAgICAgICAgICAgICAgICVzdG9yZQor ICAgICAgICAgICAgICAgImJ1aWxkIgorICAgICAgICAgICAgICAgImVjaG8gJGZvbyA+ICRvdXQi CisgICAgICAgICAgICAgICAnKCkpKQorICAgICAgICAgIChzIChhZGQtdG8tc3RvcmUKKyAgICAg ICAgICAgICAgICVzdG9yZQorICAgICAgICAgICAgICAgImJhc2giCisgICAgICAgICAgICAgICAj dAorICAgICAgICAgICAgICAgInNoYTI1NiIKKyAgICAgICAgICAgICAgIChzZWFyY2gtYm9vdHN0 cmFwLWJpbmFyeQorICAgICAgICAgICAgICAgICAiYmFzaCIKKyAgICAgICAgICAgICAgICAgKCVj dXJyZW50LXN5c3RlbSkpKSkKKyAgICAgICAgICAoZCAoZGVyaXZhdGlvbgorICAgICAgICAgICAg ICAgJXN0b3JlCisgICAgICAgICAgICAgICAidGhlLXRoaW5nIgorICAgICAgICAgICAgICAgcwor ICAgICAgICAgICAgICAgYCgiLWUiICxiKQorICAgICAgICAgICAgICAgIzplbnYtdmFycworICAg ICAgICAgICAgICAgYCgoImZvbyIgdW5xdW90ZSAocmFuZG9tLXRleHQpKSkKKyAgICAgICAgICAg ICAgICM6aW5wdXRzCisgICAgICAgICAgICAgICBgKCgsYikgKCxzKSkpKQorICAgICAgICAgIChv IChkZXJpdmF0aW9uLT5vdXRwdXQtcGF0aCBkKSkpCisgICAgIChhbmQgKGJ1aWxkLWRlcml2YXRp b25zICVzdG9yZSAobGlzdCBkKSkKKyAgICAgICAgICAobm90IChwYXRoLWluZm8tZGVyaXZlciAo cXVlcnktcGF0aC1pbmZvICVzdG9yZSBiKSkpCisgICAgICAgICAgKHN0cmluZz0/CisgICAgICAg ICAgICAoZGVyaXZhdGlvbi1maWxlLW5hbWUgZCkKKyAgICAgICAgICAgIChwYXRoLWluZm8tZGVy aXZlciAocXVlcnktcGF0aC1pbmZvICVzdG9yZSBvKSkpKSkpCkAgYnVpbGQtc3RhcnRlZCAvaG9t ZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL2o1YXBkMTVkM21h OXNoMzFwMzE3cWZzMXl3Yncwa2ptLXRoZS10aGluZy5kcnYgLSB4ODZfNjQtbGludXggL2hvbWUv c2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC92YXIvbG9nL2d1aXgvZHJ2cy9q NS8vYXBkMTVkM21hOXNoMzFwMzE3cWZzMXl3Yncwa2ptLXRoZS10aGluZy5kcnYuYnoyCkAgYnVp bGQtc3VjY2VlZGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAv c3RvcmUvajVhcGQxNWQzbWE5c2gzMXAzMTdxZnMxeXdidzBram0tdGhlLXRoaW5nLmRydiAtCmFj dHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgoKU0tJUDogdGVzdHMvZ2V4cAo9PT09PT09PT09 PT09PT09Cgp0ZXN0LW5hbWU6IG5vIHJlZnMKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2 L2d1aXgvZ3VpeF93aXAvdGVzdHMvZ2V4cC5zY206NzEKc291cmNlOgorICh0ZXN0LWVxdWFsCisg ICAibm8gcmVmcyIKKyAgICcoZGlzcGxheSAiaGVsbG8hIikKKyAgIChsZXQgKChleHAgKGdleHAg KGRpc3BsYXkgImhlbGxvISIpKSkpCisgICAgIChhbmQgKGdleHA/IGV4cCkKKyAgICAgICAgICAo bnVsbD8gKGdleHAtaW5wdXRzIGV4cCkpCisgICAgICAgICAgKGdleHAtPnNleHAqIGV4cCkpKSkK ZXhwZWN0ZWQtdmFsdWU6IChkaXNwbGF5IGhlbGxvISkKYWN0dWFsLXZhbHVlOiAoZGlzcGxheSBo ZWxsbyEpCnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiB1bnF1b3RlCmxvY2F0aW9uOiAvaG9tZS9z YXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2dleHAuc2NtOjc4CnNvdXJjZToKKyAo dGVzdC1lcXVhbAorICAgInVucXVvdGUiCisgICAnKGRpc3BsYXkgYChmb28gLCgrIDIgMykpKQor ICAgKGxldCAoKGV4cCAoZ2V4cCAoZGlzcGxheSBgKGZvbyAsKCsgMiAzKSkpKSkpCisgICAgIChh bmQgKGdleHA/IGV4cCkKKyAgICAgICAgICAobnVsbD8gKGdleHAtaW5wdXRzIGV4cCkpCisgICAg ICAgICAgKGdleHAtPnNleHAqIGV4cCkpKSkKZXhwZWN0ZWQtdmFsdWU6IChkaXNwbGF5IChxdWFz aXF1b3RlIChmb28gKHVucXVvdGUgKCsgMiAzKSkpKSkKYWN0dWFsLXZhbHVlOiAoZGlzcGxheSAo cXVhc2lxdW90ZSAoZm9vICh1bnF1b3RlICgrIDIgMykpKSkpCnJlc3VsdDogUEFTUwoKdGVzdC1u YW1lOiBvbmUgaW5wdXQgcGFja2FnZQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3Vp eC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNjbTo4NQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAi b25lIGlucHV0IHBhY2thZ2UiCisgICAobGV0ICgoZXhwIChnZXhwIChkaXNwbGF5ICh1bmdleHAg Y29yZXV0aWxzKSkpKSkKKyAgICAgKGFuZCAoZ2V4cD8gZXhwKQorICAgICAgICAgIChtYXRjaCAo Z2V4cC1pbnB1dHMgZXhwKQorICAgICAgICAgICAgICAgICAoKChwICJvdXQiKSkgKGVxPyBwIGNv cmV1dGlscykpKQorICAgICAgICAgIChlcXVhbD8KKyAgICAgICAgICAgIGAoZGlzcGxheQorICAg ICAgICAgICAgICAgLChkZXJpdmF0aW9uLT5vdXRwdXQtcGF0aAorICAgICAgICAgICAgICAgICAg KHBhY2thZ2UtZGVyaXZhdGlvbiAlc3RvcmUgY29yZXV0aWxzKSkpCisgICAgICAgICAgICAoZ2V4 cC0+c2V4cCogZXhwKSkpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFt ZTogb25lIGlucHV0IG9yaWdpbgpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9n dWl4X3dpcC90ZXN0cy9nZXhwLnNjbTo5NQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAib25l IGlucHV0IG9yaWdpbiIKKyAgIChsZXQgKChleHAgKGdleHAgKGRpc3BsYXkgKHVuZ2V4cCAocGFj a2FnZS1zb3VyY2UgY29yZXV0aWxzKSkpKSkpCisgICAgIChhbmQgKGdleHA/IGV4cCkKKyAgICAg ICAgICAobWF0Y2ggKGdleHAtaW5wdXRzIGV4cCkKKyAgICAgICAgICAgICAgICAgKCgobyAib3V0 IikpIChlcT8gbyAocGFja2FnZS1zb3VyY2UgY29yZXV0aWxzKSkpKQorICAgICAgICAgIChlcXVh bD8KKyAgICAgICAgICAgIGAoZGlzcGxheQorICAgICAgICAgICAgICAgLChkZXJpdmF0aW9uLT5v dXRwdXQtcGF0aAorICAgICAgICAgICAgICAgICAgKHBhY2thZ2Utc291cmNlLWRlcml2YXRpb24K KyAgICAgICAgICAgICAgICAgICAgJXN0b3JlCisgICAgICAgICAgICAgICAgICAgIChwYWNrYWdl LXNvdXJjZSBjb3JldXRpbHMpKSkpCisgICAgICAgICAgICAoZ2V4cC0+c2V4cCogZXhwKSkpKSkK YWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogb25lIGxvY2FsIGZpbGUK bG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvZ2V4cC5z Y206MTA2CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJvbmUgbG9jYWwgZmlsZSIKKyAgIChs ZXQqICgoZmlsZSAoc2VhcmNoLXBhdGggJWxvYWQtcGF0aCAiZ3VpeC5zY20iKSkKKyAgICAgICAg ICAobG9jYWwgKGxvY2FsLWZpbGUgZmlsZSkpCisgICAgICAgICAgKGV4cCAoZ2V4cCAoZGlzcGxh eSAodW5nZXhwIGxvY2FsKSkpKQorICAgICAgICAgIChpbnRkIChhZGQtdG8tc3RvcmUKKyAgICAg ICAgICAgICAgICAgICVzdG9yZQorICAgICAgICAgICAgICAgICAgKGJhc2VuYW1lIGZpbGUpCisg ICAgICAgICAgICAgICAgICAjZgorICAgICAgICAgICAgICAgICAgInNoYTI1NiIKKyAgICAgICAg ICAgICAgICAgIGZpbGUpKSkKKyAgICAgKGFuZCAoZ2V4cD8gZXhwKQorICAgICAgICAgIChtYXRj aCAoZ2V4cC1pbnB1dHMgZXhwKQorICAgICAgICAgICAgICAgICAoKCh4ICJvdXQiKSkgKGVxPyB4 IGxvY2FsKSkpCisgICAgICAgICAgKGVxdWFsPyBgKGRpc3BsYXkgLGludGQpIChnZXhwLT5zZXhw KiBleHApKSkpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBvbmUg bG9jYWwgZmlsZSwgc3ltbGluawpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9n dWl4X3dpcC90ZXN0cy9nZXhwLnNjbToxMTgKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgIm9u ZSBsb2NhbCBmaWxlLCBzeW1saW5rIgorICAgKGxldCAoKGZpbGUgKHNlYXJjaC1wYXRoICVsb2Fk LXBhdGggImd1aXguc2NtIikpCisgICAgICAgICAobGluayAodG1wbmFtKSkpCisgICAgIChkeW5h bWljLXdpbmQKKyAgICAgICAoY29uc3QgI3QpCisgICAgICAgKGxhbWJkYSAoKQorICAgICAgICAg KHN5bWxpbmsgKGNhbm9uaWNhbGl6ZS1wYXRoIGZpbGUpIGxpbmspCisgICAgICAgICAobGV0KiAo KGxvY2FsIChsb2NhbC1maWxlIGxpbmsgIm15LWZpbGUiICM6cmVjdXJzaXZlPyAjZikpCisgICAg ICAgICAgICAgICAgKGV4cCAoZ2V4cCAoZGlzcGxheSAodW5nZXhwIGxvY2FsKSkpKQorICAgICAg ICAgICAgICAgIChpbnRkIChhZGQtdG8tc3RvcmUgJXN0b3JlICJteS1maWxlIiAjZiAic2hhMjU2 IiBmaWxlKSkpCisgICAgICAgICAgIChhbmQgKGdleHA/IGV4cCkKKyAgICAgICAgICAgICAgICAo bWF0Y2ggKGdleHAtaW5wdXRzIGV4cCkKKyAgICAgICAgICAgICAgICAgICAgICAgKCgoeCAib3V0 IikpIChlcT8geCBsb2NhbCkpKQorICAgICAgICAgICAgICAgIChlcXVhbD8gYChkaXNwbGF5ICxp bnRkKSAoZ2V4cC0+c2V4cCogZXhwKSkpKSkKKyAgICAgICAobGFtYmRhICgpCisgICAgICAgICAo ZmFsc2UtaWYtZXhjZXB0aW9uIChkZWxldGUtZmlsZSBsaW5rKSkpKSkpCmFjdHVhbC12YWx1ZTog I3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGxvY2FsLWZpbGUsIHJlbGF0aXZlIGZpbGUgbmFt ZQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhw LnNjbToxMzcKc291cmNlOgorICh0ZXN0LWVxdWFsCisgICAibG9jYWwtZmlsZSwgcmVsYXRpdmUg ZmlsZSBuYW1lIgorICAgKGNhbm9uaWNhbGl6ZS1wYXRoCisgICAgIChzZWFyY2gtcGF0aCAlbG9h ZC1wYXRoICJndWl4L2Jhc2UzMi5zY20iKSkKKyAgIChsZXQgKChkaXJlY3RvcnkKKyAgICAgICAg ICAgKGRpcm5hbWUKKyAgICAgICAgICAgICAoc2VhcmNoLXBhdGgKKyAgICAgICAgICAgICAgICVs b2FkLXBhdGgKKyAgICAgICAgICAgICAgICJndWl4L2J1aWxkLXN5c3RlbS9nbnUuc2NtIikpKSkK KyAgICAgKHdpdGgtZGlyZWN0b3J5LWV4Y3Vyc2lvbgorICAgICAgIGRpcmVjdG9yeQorICAgICAg IChsZXQgKChmaWxlIChsb2NhbC1maWxlICIuLi9ndWl4L2Jhc2UzMi5zY20iKSkpCisgICAgICAg ICAobG9jYWwtZmlsZS1hYnNvbHV0ZS1maWxlLW5hbWUgZmlsZSkpKSkpCmV4cGVjdGVkLXZhbHVl OiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL2d1aXgvYmFzZTMyLnNjbQphY3R1 YWwtdmFsdWU6IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvZ3VpeC9iYXNlMzIu c2NtCnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBsb2NhbC1maWxlLCAjOnNlbGVjdD8KbG9jYXRp b246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvZ2V4cC5zY206MTQ1 CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJsb2NhbC1maWxlLCAjOnNlbGVjdD8iCisgICAo cnVuLXdpdGgtc3RvcmUKKyAgICAgJXN0b3JlCisgICAgIChtbGV0KiAlc3RvcmUtbW9uYWQKKyAg ICAgICAgICAgICgoc2VsZWN0PworICAgICAgICAgICAgICAgLT4KKyAgICAgICAgICAgICAgIChs YW1iZGEgKGZpbGUgc3RhdCkKKyAgICAgICAgICAgICAgICAgKG1lbWJlcgorICAgICAgICAgICAg ICAgICAgIChiYXNlbmFtZSBmaWxlKQorICAgICAgICAgICAgICAgICAgICcoImd1aXguc2NtIiAi dGVzdHMiICJnZXhwLnNjbSIpKSkpCisgICAgICAgICAgICAgKGZpbGUgLT4KKyAgICAgICAgICAg ICAgICAgICAobG9jYWwtZmlsZQorICAgICAgICAgICAgICAgICAgICAgIi4uIgorICAgICAgICAg ICAgICAgICAgICAgImRpcmVjdG9yeSIKKyAgICAgICAgICAgICAgICAgICAgICM6cmVjdXJzaXZl PworICAgICAgICAgICAgICAgICAgICAgI3QKKyAgICAgICAgICAgICAgICAgICAgICM6c2VsZWN0 PworICAgICAgICAgICAgICAgICAgICAgc2VsZWN0PykpCisgICAgICAgICAgICAgKGRpciAobG93 ZXItb2JqZWN0IGZpbGUpKSkKKyAgICAgICAgICAgIChyZXR1cm4KKyAgICAgICAgICAgICAgKGFu ZCAoc3RvcmUtcGF0aD8gZGlyKQorICAgICAgICAgICAgICAgICAgIChlcXVhbD8KKyAgICAgICAg ICAgICAgICAgICAgIChzY2FuZGlyIGRpcikKKyAgICAgICAgICAgICAgICAgICAgICcoIi4iICIu LiIgImd1aXguc2NtIiAidGVzdHMiKSkKKyAgICAgICAgICAgICAgICAgICAoZXF1YWw/CisgICAg ICAgICAgICAgICAgICAgICAoc2NhbmRpciAoc3RyaW5nLWFwcGVuZCBkaXIgIi90ZXN0cyIpKQor ICAgICAgICAgICAgICAgICAgICAgJygiLiIgIi4uIiAiZ2V4cC5zY20iKSkpKSkKKyAgICAgIzpn dWlsZS1mb3ItYnVpbGQKKyAgICAgKCVndWlsZS1mb3ItYnVpbGQpKSkKYWN0dWFsLXZhbHVlOiAj dApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogb25lIHBsYWluIGZpbGUKbG9jYXRpb246IC9ob21l L3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvZ2V4cC5zY206MTYwCnNvdXJjZToK KyAodGVzdC1hc3NlcnQKKyAgICJvbmUgcGxhaW4gZmlsZSIKKyAgIChsZXQqICgoZmlsZSAocGxh aW4tZmlsZSAiaGkiICJIZWxsbywgd29ybGQhIikpCisgICAgICAgICAgKGV4cCAoZ2V4cCAoZGlz cGxheSAodW5nZXhwIGZpbGUpKSkpCisgICAgICAgICAgKGV4cGVjdGVkCisgICAgICAgICAgICAo YWRkLXRleHQtdG8tc3RvcmUgJXN0b3JlICJoaSIgIkhlbGxvLCB3b3JsZCEiKSkpCisgICAgIChh bmQgKGdleHA/IGV4cCkKKyAgICAgICAgICAobWF0Y2ggKGdleHAtaW5wdXRzIGV4cCkKKyAgICAg ICAgICAgICAgICAgKCgoeCAib3V0IikpIChlcT8geCBmaWxlKSkpCisgICAgICAgICAgKGVxdWFs PyBgKGRpc3BsYXkgLGV4cGVjdGVkKSAoZ2V4cC0+c2V4cCogZXhwKSkpKSkKYWN0dWFsLXZhbHVl OiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogc2FtZSBpbnB1dCB0d2ljZQpsb2NhdGlvbjog L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNjbToxNzAKc291 cmNlOgorICh0ZXN0LWFzc2VydAorICAgInNhbWUgaW5wdXQgdHdpY2UiCisgICAobGV0ICgoZXhw IChnZXhwIChiZWdpbgorICAgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5ICh1bmdleHAgY29y ZXV0aWxzKSkKKyAgICAgICAgICAgICAgICAgICAgICAoZGlzcGxheSAodW5nZXhwIGNvcmV1dGls cykpKSkpKQorICAgICAoYW5kIChnZXhwPyBleHApCisgICAgICAgICAgKG1hdGNoIChnZXhwLWlu cHV0cyBleHApCisgICAgICAgICAgICAgICAgICgoKHAgIm91dCIpKSAoZXE/IHAgY29yZXV0aWxz KSkpCisgICAgICAgICAgKGxldCAoKGUgYChkaXNwbGF5CisgICAgICAgICAgICAgICAgICAgICAg LChkZXJpdmF0aW9uLT5vdXRwdXQtcGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNr YWdlLWRlcml2YXRpb24gJXN0b3JlIGNvcmV1dGlscykpKSkpCisgICAgICAgICAgICAoZXF1YWw/ IGAoYmVnaW4gLGUgLGUpIChnZXhwLT5zZXhwKiBleHApKSkpKSkKYWN0dWFsLXZhbHVlOiAjdApy ZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogdHdvIGlucHV0IHBhY2thZ2VzLCBvbmUgZGVyaXZhdGlv biwgb25lIGZpbGUKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAv dGVzdHMvZ2V4cC5zY206MTgyCnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJ0d28gaW5wdXQg cGFja2FnZXMsIG9uZSBkZXJpdmF0aW9uLCBvbmUgZmlsZSIKKyAgIChsZXQqICgoZHJ2IChidWls ZC1leHByZXNzaW9uLT5kZXJpdmF0aW9uCisgICAgICAgICAgICAgICAgICVzdG9yZQorICAgICAg ICAgICAgICAgICAiZm9vIgorICAgICAgICAgICAgICAgICAnYmFyCisgICAgICAgICAgICAgICAg ICM6Z3VpbGUtZm9yLWJ1aWxkCisgICAgICAgICAgICAgICAgIChwYWNrYWdlLWRlcml2YXRpb24g JXN0b3JlICVib290c3RyYXAtZ3VpbGUpKSkKKyAgICAgICAgICAodHh0IChhZGQtdGV4dC10by1z dG9yZSAlc3RvcmUgImZvbyIgIkhlbGxvLCB3b3JsZCEiKSkKKyAgICAgICAgICAoZXhwIChnZXhw IChiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAoZGlzcGxheSAodW5nZXhwIGNvcmV1dGls cykpCisgICAgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5ICh1bmdleHAgJWJvb3RzdHJhcC1n dWlsZSkpCisgICAgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5ICh1bmdleHAgZHJ2KSkKKyAg ICAgICAgICAgICAgICAgICAgICAgKGRpc3BsYXkgKHVuZ2V4cCB0eHQpKSkpKSkKKyAgICAgKGRl ZmluZSAobWF0Y2gtaW5wdXQgdGhpbmcpCisgICAgICAgKG1hdGNoLWxhbWJkYQorICAgICAgICAg KChkcnYtb3ItcGtnIF8gLi4uKSAoZXE/IHRoaW5nIGRydi1vci1wa2cpKSkpCisgICAgIChhbmQg KGdleHA/IGV4cCkKKyAgICAgICAgICAoPSA0IChsZW5ndGggKGdleHAtaW5wdXRzIGV4cCkpKQor ICAgICAgICAgIChldmVyeSAobGFtYmRhIChpbnB1dCkKKyAgICAgICAgICAgICAgICAgICAoZmlu ZCAobWF0Y2gtaW5wdXQgaW5wdXQpIChnZXhwLWlucHV0cyBleHApKSkKKyAgICAgICAgICAgICAg ICAgKGxpc3QgZHJ2IGNvcmV1dGlscyAlYm9vdHN0cmFwLWd1aWxlIHR4dCkpCisgICAgICAgICAg KGxldCAoKGUwIGAoZGlzcGxheQorICAgICAgICAgICAgICAgICAgICAgICAsKGRlcml2YXRpb24t Pm91dHB1dC1wYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLWRlcml2YXRp b24gJXN0b3JlIGNvcmV1dGlscykpKSkKKyAgICAgICAgICAgICAgICAoZTEgYChkaXNwbGF5Cisg ICAgICAgICAgICAgICAgICAgICAgICwoZGVyaXZhdGlvbi0+b3V0cHV0LXBhdGgKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtZGVyaXZhdGlvbiAlc3RvcmUgJWJvb3RzdHJhcC1n dWlsZSkpKSkKKyAgICAgICAgICAgICAgICAoZTIgYChkaXNwbGF5ICwoZGVyaXZhdGlvbi0+b3V0 cHV0LXBhdGggZHJ2KSkpCisgICAgICAgICAgICAgICAgKGUzIGAoZGlzcGxheSAsdHh0KSkpCisg ICAgICAgICAgICAoZXF1YWw/CisgICAgICAgICAgICAgIGAoYmVnaW4gLGUwICxlMSAsZTIgLGUz KQorICAgICAgICAgICAgICAoZ2V4cC0+c2V4cCogZXhwKSkpKSkpCmFjdHVhbC12YWx1ZTogI3QK cmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHVuZ2V4cCArIHVuZ2V4cC1uYXRpdmUKbG9jYXRpb246 IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvZ2V4cC5zY206MjEwCnNv dXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJ1bmdleHAgKyB1bmdleHAtbmF0aXZlIgorICAgKGxl dCogKChleHAgKGdleHAgKGxpc3QgKHVuZ2V4cC1uYXRpdmUgJWJvb3RzdHJhcC1ndWlsZSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICh1bmdleHAgY29yZXV0aWxzKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHVuZ2V4cC1uYXRpdmUgZ2xpYmMpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAodW5nZXhwIGJpbnV0aWxzKSkpKQorICAgICAgICAgICh0YXJnZXQgIm1pcHM2NGVs LWxpbnV4IikKKyAgICAgICAgICAoZ3VpbGUgKGRlcml2YXRpb24tPm91dHB1dC1wYXRoCisgICAg ICAgICAgICAgICAgICAgKHBhY2thZ2UtZGVyaXZhdGlvbiAlc3RvcmUgJWJvb3RzdHJhcC1ndWls ZSkpKQorICAgICAgICAgIChjdSAoZGVyaXZhdGlvbi0+b3V0cHV0LXBhdGgKKyAgICAgICAgICAg ICAgICAocGFja2FnZS1jcm9zcy1kZXJpdmF0aW9uCisgICAgICAgICAgICAgICAgICAlc3RvcmUK KyAgICAgICAgICAgICAgICAgIGNvcmV1dGlscworICAgICAgICAgICAgICAgICAgdGFyZ2V0KSkp CisgICAgICAgICAgKGxpYmMgKGRlcml2YXRpb24tPm91dHB1dC1wYXRoCisgICAgICAgICAgICAg ICAgICAocGFja2FnZS1kZXJpdmF0aW9uICVzdG9yZSBnbGliYykpKQorICAgICAgICAgIChidSAo ZGVyaXZhdGlvbi0+b3V0cHV0LXBhdGgKKyAgICAgICAgICAgICAgICAocGFja2FnZS1jcm9zcy1k ZXJpdmF0aW9uICVzdG9yZSBiaW51dGlscyB0YXJnZXQpKSkpCisgICAgIChhbmQgKGxzZXQ9IGVx dWFsPworICAgICAgICAgICAgICAgICBgKCgsJWJvb3RzdHJhcC1ndWlsZSAib3V0IikgKCxnbGli YyAib3V0IikpCisgICAgICAgICAgICAgICAgIChnZXhwLW5hdGl2ZS1pbnB1dHMgZXhwKSkKKyAg ICAgICAgICAobHNldD0gZXF1YWw/CisgICAgICAgICAgICAgICAgIGAoKCxjb3JldXRpbHMgIm91 dCIpICgsYmludXRpbHMgIm91dCIpKQorICAgICAgICAgICAgICAgICAoZ2V4cC1pbnB1dHMgZXhw KSkKKyAgICAgICAgICAoZXF1YWw/CisgICAgICAgICAgICBgKGxpc3QgLGd1aWxlICxjdSAsbGli YyAsYnUpCisgICAgICAgICAgICAoZ2V4cC0+c2V4cCogZXhwIHRhcmdldCkpKSkpCmFjdHVhbC12 YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHVuZ2V4cCArIHVuZ2V4cC1uYXRpdmUs IG5lc3RlZApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0 cy9nZXhwLnNjbToyMzMKc291cmNlOgorICh0ZXN0LWVxdWFsCisgICAidW5nZXhwICsgdW5nZXhw LW5hdGl2ZSwgbmVzdGVkIgorICAgKGxpc3QgYCgoLCVib290c3RyYXAtZ3VpbGUgIm91dCIpKQor ICAgICAgICAgJzw+CisgICAgICAgICBgKCgsY29yZXV0aWxzICJvdXQiKSkpCisgICAobGV0KiAo KGV4cCAoZ2V4cCAobGlzdCAodW5nZXhwLW5hdGl2ZSAoZ2V4cCAodW5nZXhwIGNvcmV1dGlscykp KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuZ2V4cCAlYm9vdHN0cmFwLWd1aWxlKSkp KSkKKyAgICAgKGxpc3QgKGdleHAtaW5wdXRzIGV4cCkKKyAgICAgICAgICAgJzw+CisgICAgICAg ICAgIChnZXhwLW5hdGl2ZS1pbnB1dHMgZXhwKSkpKQpleHBlY3RlZC12YWx1ZTogKCgoIzxwYWNr YWdlIGd1aWxlLWJvb3RzdHJhcEAyLjAgZ251L3BhY2thZ2VzL2Jvb3RzdHJhcC5zY206Mjc3IDEx MTQwYzA+IG91dCkpIDw+ICgoIzxwYWNrYWdlIGNvcmV1dGlsc0A4LjI0IGdudS9wYWNrYWdlcy9i YXNlLnNjbToyNDQgMmRmMDZjMD4gb3V0KSkpCmFjdHVhbC12YWx1ZTogKCgoIzxwYWNrYWdlIGd1 aWxlLWJvb3RzdHJhcEAyLjAgZ251L3BhY2thZ2VzL2Jvb3RzdHJhcC5zY206Mjc3IDExMTQwYzA+ IG91dCkpIDw+ICgoIzxwYWNrYWdlIGNvcmV1dGlsc0A4LjI0IGdudS9wYWNrYWdlcy9iYXNlLnNj bToyNDQgMmRmMDZjMD4gb3V0KSkpCnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBpbnB1dCBsaXN0 CmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2dleHAu c2NtOjIzOQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiaW5wdXQgbGlzdCIKKyAgIChsZXQg KChleHAgKGdleHAgKGRpc3BsYXkKKyAgICAgICAgICAgICAgICAgICAgICAnKHVuZ2V4cCAobGlz dCAlYm9vdHN0cmFwLWd1aWxlIGNvcmV1dGlscykpKSkpCisgICAgICAgICAoZ3VpbGUgKGRlcml2 YXRpb24tPm91dHB1dC1wYXRoCisgICAgICAgICAgICAgICAgICAocGFja2FnZS1kZXJpdmF0aW9u ICVzdG9yZSAlYm9vdHN0cmFwLWd1aWxlKSkpCisgICAgICAgICAoY3UgKGRlcml2YXRpb24tPm91 dHB1dC1wYXRoCisgICAgICAgICAgICAgICAocGFja2FnZS1kZXJpdmF0aW9uICVzdG9yZSBjb3Jl dXRpbHMpKSkpCisgICAgIChhbmQgKGxzZXQ9IGVxdWFsPworICAgICAgICAgICAgICAgICBgKCgs JWJvb3RzdHJhcC1ndWlsZSAib3V0IikgKCxjb3JldXRpbHMgIm91dCIpKQorICAgICAgICAgICAg ICAgICAoZ2V4cC1pbnB1dHMgZXhwKSkKKyAgICAgICAgICAoZXF1YWw/CisgICAgICAgICAgICBg KGRpc3BsYXkgJygsZ3VpbGUgLGN1KSkKKyAgICAgICAgICAgIChnZXhwLT5zZXhwKiBleHApKSkp KQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBpbnB1dCBsaXN0ICsg dW5nZXhwLW5hdGl2ZQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dp cC90ZXN0cy9nZXhwLnNjbToyNTIKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImlucHV0IGxp c3QgKyB1bmdleHAtbmF0aXZlIgorICAgKGxldCogKCh0YXJnZXQgIm1pcHM2NGVsLWxpbnV4IikK KyAgICAgICAgICAoZXhwIChnZXhwIChkaXNwbGF5CisgICAgICAgICAgICAgICAgICAgICAgIChj b25zICcodW5nZXhwLW5hdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlz dCAlYm9vdHN0cmFwLWd1aWxlIGNvcmV1dGlscykpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICcodW5nZXhwIChsaXN0IGdsaWJjIGJpbnV0aWxzKSkpKSkpCisgICAgICAgICAgKGd1aWxl IChkZXJpdmF0aW9uLT5vdXRwdXQtcGF0aAorICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLWRl cml2YXRpb24gJXN0b3JlICVib290c3RyYXAtZ3VpbGUpKSkKKyAgICAgICAgICAoY3UgKGRlcml2 YXRpb24tPm91dHB1dC1wYXRoCisgICAgICAgICAgICAgICAgKHBhY2thZ2UtZGVyaXZhdGlvbiAl c3RvcmUgY29yZXV0aWxzKSkpCisgICAgICAgICAgKHhsaWJjIChkZXJpdmF0aW9uLT5vdXRwdXQt cGF0aAorICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLWNyb3NzLWRlcml2YXRpb24gJXN0b3Jl IGdsaWJjIHRhcmdldCkpKQorICAgICAgICAgICh4YnUgKGRlcml2YXRpb24tPm91dHB1dC1wYXRo CisgICAgICAgICAgICAgICAgIChwYWNrYWdlLWNyb3NzLWRlcml2YXRpb24gJXN0b3JlIGJpbnV0 aWxzIHRhcmdldCkpKSkKKyAgICAgKGFuZCAobHNldD0gZXF1YWw/CisgICAgICAgICAgICAgICAg IGAoKCwlYm9vdHN0cmFwLWd1aWxlICJvdXQiKSAoLGNvcmV1dGlscyAib3V0IikpCisgICAgICAg ICAgICAgICAgIChnZXhwLW5hdGl2ZS1pbnB1dHMgZXhwKSkKKyAgICAgICAgICAobHNldD0gZXF1 YWw/CisgICAgICAgICAgICAgICAgIGAoKCxnbGliYyAib3V0IikgKCxiaW51dGlscyAib3V0Iikp CisgICAgICAgICAgICAgICAgIChnZXhwLWlucHV0cyBleHApKQorICAgICAgICAgIChlcXVhbD8K KyAgICAgICAgICAgIGAoZGlzcGxheSAoY29ucyAnKCxndWlsZSAsY3UpICcoLHhsaWJjICx4YnUp KSkKKyAgICAgICAgICAgIChnZXhwLT5zZXhwKiBleHAgdGFyZ2V0KSkpKSkKYWN0dWFsLXZhbHVl OiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogaW5wdXQgbGlzdCBzcGxpY2luZwpsb2NhdGlv bjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNjbToyNzQK c291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImlucHV0IGxpc3Qgc3BsaWNpbmciCisgICAobGV0 KiAoKGlucHV0cworICAgICAgICAgICAgKGxpc3QgKGdleHAtaW5wdXQgZ2xpYmMgImRlYnVnIikK KyAgICAgICAgICAgICAgICAgICVib290c3RyYXAtZ3VpbGUpKQorICAgICAgICAgIChvdXRwdXRz CisgICAgICAgICAgICAobGlzdCAoZGVyaXZhdGlvbi0+b3V0cHV0LXBhdGgKKyAgICAgICAgICAg ICAgICAgICAgKHBhY2thZ2UtZGVyaXZhdGlvbiAlc3RvcmUgZ2xpYmMpCisgICAgICAgICAgICAg ICAgICAgICJkZWJ1ZyIpCisgICAgICAgICAgICAgICAgICAoZGVyaXZhdGlvbi0+b3V0cHV0LXBh dGgKKyAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtZGVyaXZhdGlvbiAlc3RvcmUgJWJvb3Rz dHJhcC1ndWlsZSkpKSkKKyAgICAgICAgICAoZXhwIChnZXhwIChsaXN0ICh1bmdleHAtc3BsaWNp bmcgKGNvbnMgKCsgMiAzKSBpbnB1dHMpKSkpKSkKKyAgICAgKGFuZCAobHNldD0gZXF1YWw/Cisg ICAgICAgICAgICAgICAgIGAoKCxnbGliYyAiZGVidWciKSAoLCVib290c3RyYXAtZ3VpbGUgIm91 dCIpKQorICAgICAgICAgICAgICAgICAoZ2V4cC1pbnB1dHMgZXhwKSkKKyAgICAgICAgICAoZXF1 YWw/CisgICAgICAgICAgICAoZ2V4cC0+c2V4cCogZXhwKQorICAgICAgICAgICAgYChsaXN0ICxA KGNvbnMgNSBvdXRwdXRzKSkpKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0 LW5hbWU6IGlucHV0IGxpc3Qgc3BsaWNpbmcgKyB1bmdleHAtbmF0aXZlLXNwbGljaW5nCmxvY2F0 aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2dleHAuc2NtOjI4 OApzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiaW5wdXQgbGlzdCBzcGxpY2luZyArIHVuZ2V4 cC1uYXRpdmUtc3BsaWNpbmciCisgICAobGV0KiAoKGlucHV0cworICAgICAgICAgICAgKGxpc3Qg KGdleHAtaW5wdXQgZ2xpYmMgImRlYnVnIikKKyAgICAgICAgICAgICAgICAgICVib290c3RyYXAt Z3VpbGUpKQorICAgICAgICAgIChleHAgKGdleHAgKGxpc3QgKHVuZ2V4cC1uYXRpdmUtc3BsaWNp bmcgKGNvbnMgKCsgMiAzKSBpbnB1dHMpKSkpKSkKKyAgICAgKGFuZCAobHNldD0gZXF1YWw/Cisg ICAgICAgICAgICAgICAgIGAoKCxnbGliYyAiZGVidWciKSAoLCVib290c3RyYXAtZ3VpbGUgIm91 dCIpKQorICAgICAgICAgICAgICAgICAoZ2V4cC1uYXRpdmUtaW5wdXRzIGV4cCkpCisgICAgICAg ICAgKG51bGw/IChnZXhwLWlucHV0cyBleHApKQorICAgICAgICAgIChlcXVhbD8KKyAgICAgICAg ICAgIChnZXhwLT5zZXhwKiBleHApCisgICAgICAgICAgICAoZ2V4cC0+c2V4cCogZXhwICJtaXBz NjRlbC1saW51eCIpKSkpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1l OiBvdXRwdXQgbGlzdApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dp cC90ZXN0cy9nZXhwLnNjbToyOTgKc291cmNlOgorICh0ZXN0LWVxdWFsCisgICAib3V0cHV0IGxp c3QiCisgICAyCisgICAobGV0ICgoZXhwIChnZXhwIChiZWdpbgorICAgICAgICAgICAgICAgICAg ICAgIChta2RpciAodW5nZXhwIG91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgICAgKG1rZGly ICh1bmdleHAgb3V0cHV0ICJiYXIiKSkpKSkpCisgICAgIChsZW5ndGggKGdleHAtb3V0cHV0cyBl eHApKSkpCmV4cGVjdGVkLXZhbHVlOiAyCmFjdHVhbC12YWx1ZTogMgpyZXN1bHQ6IFBBU1MKCnRl c3QtbmFtZTogb3V0cHV0IGxpc3QsIGNvbWJpbmVkIGdleHBzCmxvY2F0aW9uOiAvaG9tZS9zYXBp ZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2dleHAuc2NtOjMwNApzb3VyY2U6CisgKHRl c3QtYXNzZXJ0CisgICAib3V0cHV0IGxpc3QsIGNvbWJpbmVkIGdleHBzIgorICAgKGxldCogKChl eHAwIChnZXhwIChta2RpciAodW5nZXhwIG91dHB1dCkpKSkKKyAgICAgICAgICAoZXhwMSAoZ2V4 cCAobWtkaXIgKHVuZ2V4cCBvdXRwdXQgImZvbyIpKSkpCisgICAgICAgICAgKGV4cDIgKGdleHAg KGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAoZGlzcGxheSAiaGkhIikKKyAgICAgICAg ICAgICAgICAgICAgICAgICh1bmdleHAgZXhwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICh1 bmdleHAgZXhwMSkpKSkpCisgICAgIChhbmQgKGxzZXQ9IGVxdWFsPworICAgICAgICAgICAgICAg ICAoYXBwZW5kIChnZXhwLW91dHB1dHMgZXhwMCkgKGdleHAtb3V0cHV0cyBleHAxKSkKKyAgICAg ICAgICAgICAgICAgKGdleHAtb3V0cHV0cyBleHAyKSkKKyAgICAgICAgICAoPSAyIChsZW5ndGgg KGdleHAtb3V0cHV0cyBleHAyKSkpKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0 ZXN0LW5hbWU6IG91dHB1dCBsaXN0LCBjb21iaW5lZCBnZXhwcywgZHVwbGljYXRlIG91dHB1dAps b2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNj bTozMTMKc291cmNlOgorICh0ZXN0LWVxdWFsCisgICAib3V0cHV0IGxpc3QsIGNvbWJpbmVkIGdl eHBzLCBkdXBsaWNhdGUgb3V0cHV0IgorICAgMQorICAgKGxldCogKChleHAwIChnZXhwIChta2Rp ciAodW5nZXhwIG91dHB1dCkpKSkKKyAgICAgICAgICAoZXhwMSAoZ2V4cCAoYmVnaW4gKG1rZGly ICh1bmdleHAgb3V0cHV0KSkgKHVuZ2V4cCBleHAwKSkpKQorICAgICAgICAgIChleHAyIChnZXhw IChiZWdpbiAobWtkaXIgKHVuZ2V4cCBvdXRwdXQpKSAodW5nZXhwIGV4cDEpKSkpKQorICAgICAo bGVuZ3RoIChnZXhwLW91dHB1dHMgZXhwMikpKSkKZXhwZWN0ZWQtdmFsdWU6IDEKYWN0dWFsLXZh bHVlOiAxCnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBvdXRwdXQgbGlzdCArIHVuZ2V4cC1zcGxp Y2luZyBsaXN0LCBjb21iaW5lZCBnZXhwcwpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYv Z3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNjbTozMjAKc291cmNlOgorICh0ZXN0LWFzc2VydAor ICAgIm91dHB1dCBsaXN0ICsgdW5nZXhwLXNwbGljaW5nIGxpc3QsIGNvbWJpbmVkIGdleHBzIgor ICAgKGxldCogKChleHAwIChnZXhwIChta2RpciAodW5nZXhwIG91dHB1dCkpKSkKKyAgICAgICAg ICAoZXhwMSAoZ2V4cCAobWtkaXIgKHVuZ2V4cCBvdXRwdXQgImZvbyIpKSkpCisgICAgICAgICAg KGV4cDIgKGdleHAgKGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAoZGlzcGxheSAiaGkh IikKKyAgICAgICAgICAgICAgICAgICAgICAgICh1bmdleHAtc3BsaWNpbmcgKGxpc3QgZXhwMCBl eHAxKSkpKSkpCisgICAgIChhbmQgKGxzZXQ9IGVxdWFsPworICAgICAgICAgICAgICAgICAoYXBw ZW5kIChnZXhwLW91dHB1dHMgZXhwMCkgKGdleHAtb3V0cHV0cyBleHAxKSkKKyAgICAgICAgICAg ICAgICAgKGdleHAtb3V0cHV0cyBleHAyKSkKKyAgICAgICAgICAoPSAyIChsZW5ndGggKGdleHAt b3V0cHV0cyBleHAyKSkpKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5h bWU6IGdleHAtPmZpbGUKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93 aXAvdGVzdHMvZ2V4cC5zY206MzMwCnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJnZXhwLT5m aWxlIgorICAgKHJ1bi13aXRoLXN0b3JlCisgICAgICVzdG9yZQorICAgICAobWxldCogJXN0b3Jl LW1vbmFkCisgICAgICAgICAgICAoKGV4cCAtPgorICAgICAgICAgICAgICAgICAgKGdleHAgKGRp c3BsYXkgKHVuZ2V4cCAlYm9vdHN0cmFwLWd1aWxlKSkpKQorICAgICAgICAgICAgIChndWlsZSAo cGFja2FnZS1maWxlICVib290c3RyYXAtZ3VpbGUpKQorICAgICAgICAgICAgIChzZXhwIChnZXhw LT5zZXhwIGV4cCkpCisgICAgICAgICAgICAgKGRydiAoZ2V4cC0+ZmlsZSAiZm9vIiBleHApKQor ICAgICAgICAgICAgIChvdXQgLT4gKGRlcml2YXRpb24tPm91dHB1dC1wYXRoIGRydikpCisgICAg ICAgICAgICAgKGRvbmUgKGJ1aWx0LWRlcml2YXRpb25zIChsaXN0IGRydikpKQorICAgICAgICAg ICAgIChyZWZzICgoc3RvcmUtbGlmdCByZWZlcmVuY2VzKSBvdXQpKSkKKyAgICAgICAgICAgIChy ZXR1cm4KKyAgICAgICAgICAgICAgKGFuZCAoZXF1YWw/IHNleHAgKGNhbGwtd2l0aC1pbnB1dC1m aWxlIG91dCByZWFkKSkKKyAgICAgICAgICAgICAgICAgICAoZXF1YWw/IChsaXN0IGd1aWxlKSBy ZWZzKSkpKQorICAgICAjOmd1aWxlLWZvci1idWlsZAorICAgICAoJWd1aWxlLWZvci1idWlsZCkp KQpyYW5kb20gc2VlZCBmb3IgdGVzdHM6IDE0Njk4MjgxNzkKQCBidWlsZC1zdGFydGVkIC9ob21l L3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvYnI2Y21ibXcyZDB5 NTc4ZmhrMjA0MW5tanlhMXhibjMtZm9vLmRydiAtIHg4Nl82NC1saW51eCAvaG9tZS9zYXBpZW50 ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3Zhci9sb2cvZ3VpeC9kcnZzL2JyLy82Y21i bXcyZDB5NTc4ZmhrMjA0MW5tanlhMXhibjMtZm9vLmRydi5iejIKQCBidWlsZC1zdWNjZWVkZWQg L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9icjZjbWJt dzJkMHk1NzhmaGsyMDQxbm1qeWExeGJuMy1mb28uZHJ2IC0KYWN0dWFsLXZhbHVlOiAjdApyZXN1 bHQ6IFBBU1MKCnRlc3QtbmFtZTogZ2V4cC0+ZGVyaXZhdGlvbgpsb2NhdGlvbjogL2hvbWUvc2Fw aWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNjbTozNDEKc291cmNlOgorICh0 ZXN0LWFzc2VydAorICAgImdleHAtPmRlcml2YXRpb24iCisgICAocnVuLXdpdGgtc3RvcmUKKyAg ICAgJXN0b3JlCisgICAgIChtbGV0KiAlc3RvcmUtbW9uYWQKKyAgICAgICAgICAgICgoZmlsZSAo dGV4dC1maWxlICJmb28iICJIZWxsbywgd29ybGQhIikpCisgICAgICAgICAgICAgKGV4cCAtPgor ICAgICAgICAgICAgICAgICAgKGdleHAgKGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAg IChta2RpciAodW5nZXhwIG91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGRp ciAodW5nZXhwIG91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzeW1saW5rCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICh1bmdleHAgJWJvb3RzdHJhcC1ndWlsZSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIvYmluL2d1aWxlIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiZm9vIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWxpbmsgKHVuZ2V4cCBmaWxl KSAodW5nZXhwIG91dHB1dCAiMm5kIikpKSkpCisgICAgICAgICAgICAgKGRydiAoZ2V4cC0+ZGVy aXZhdGlvbiAiZm9vIiBleHApKQorICAgICAgICAgICAgIChvdXQgLT4gKGRlcml2YXRpb24tPm91 dHB1dC1wYXRoIGRydikpCisgICAgICAgICAgICAgKG91dDIgLT4gKGRlcml2YXRpb24tPm91dHB1 dC1wYXRoIGRydiAiMm5kIikpCisgICAgICAgICAgICAgKGRvbmUgKGJ1aWx0LWRlcml2YXRpb25z IChsaXN0IGRydikpKQorICAgICAgICAgICAgIChyZWZzICgoc3RvcmUtbGlmdCByZWZlcmVuY2Vz KSBvdXQpKQorICAgICAgICAgICAgIChyZWZzMiAoKHN0b3JlLWxpZnQgcmVmZXJlbmNlcykgb3V0 MikpCisgICAgICAgICAgICAgKGd1aWxlIChwYWNrYWdlLWZpbGUgJWJvb3RzdHJhcC1ndWlsZSAi YmluL2d1aWxlIikpKQorICAgICAgICAgICAgKHJldHVybgorICAgICAgICAgICAgICAoYW5kIChz dHJpbmc9PworICAgICAgICAgICAgICAgICAgICAgKHJlYWRsaW5rIChzdHJpbmctYXBwZW5kIG91 dCAiL2ZvbyIpKQorICAgICAgICAgICAgICAgICAgICAgZ3VpbGUpCisgICAgICAgICAgICAgICAg ICAgKHN0cmluZz0/IChyZWFkbGluayBvdXQyKSBmaWxlKQorICAgICAgICAgICAgICAgICAgIChl cXVhbD8gcmVmcyAobGlzdCAoZGlybmFtZSAoZGlybmFtZSBndWlsZSkpKSkKKyAgICAgICAgICAg ICAgICAgICAoZXF1YWw/IHJlZnMyIChsaXN0IGZpbGUpKSkpKQorICAgICAjOmd1aWxlLWZvci1i dWlsZAorICAgICAoJWd1aWxlLWZvci1idWlsZCkpKQpAIGJ1aWxkLXN0YXJ0ZWQgL2hvbWUvc2Fw aWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS96bWhtdzk2OHdnaXZzamx2 dzVxdzNsMnhscTVpY2F6Ni1mb28uZHJ2IC0geDg2XzY0LWxpbnV4IC9ob21lL3NhcGllbnRlY2gv RGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvdmFyL2xvZy9ndWl4L2RydnMvem0vL2htdzk2OHdn aXZzamx2dzVxdzNsMnhscTVpY2F6Ni1mb28uZHJ2LmJ6MgpAIGJ1aWxkLXN1Y2NlZWRlZCAvaG9t ZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL3ptaG13OTY4d2dp dnNqbHZ3NXF3M2wyeGxxNWljYXo2LWZvby5kcnYgLQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDog UEFTUwoKdGVzdC1uYW1lOiBnZXhwLT5kZXJpdmF0aW9uIHZzLiBncmFmdHMKbG9jYXRpb246IC9o b21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvZ2V4cC5zY206MzY1CnNvdXJj ZToKKyAodGVzdC1hc3NlcnQKKyAgICJnZXhwLT5kZXJpdmF0aW9uIHZzLiBncmFmdHMiCisgICAo cnVuLXdpdGgtc3RvcmUKKyAgICAgJXN0b3JlCisgICAgIChtbGV0KiAlc3RvcmUtbW9uYWQKKyAg ICAgICAgICAgICgoZ3JhZnQ/IChzZXQtZ3JhZnRpbmcgI2YpKQorICAgICAgICAgICAgIChwMCAt PgorICAgICAgICAgICAgICAgICAoZHVtbXktcGFja2FnZQorICAgICAgICAgICAgICAgICAgICJk dW1teSIKKyAgICAgICAgICAgICAgICAgICAoYXJndW1lbnRzICcoIzppbXBsaWNpdC1pbnB1dHM/ ICNmKSkpKQorICAgICAgICAgICAgIChyIC0+IChwYWNrYWdlIChpbmhlcml0IHAwKSAobmFtZSAi RHVNTVkiKSkpCisgICAgICAgICAgICAgKHAxIC0+IChwYWNrYWdlIChpbmhlcml0IHAwKSAocmVw bGFjZW1lbnQgcikpKQorICAgICAgICAgICAgIChleHAwIC0+CisgICAgICAgICAgICAgICAgICAg KGdleHAgKGZyb2IgKHVuZ2V4cCBwMCkgKHVuZ2V4cCBvdXRwdXQpKSkpCisgICAgICAgICAgICAg KGV4cDEgLT4KKyAgICAgICAgICAgICAgICAgICAoZ2V4cCAoZnJvYiAodW5nZXhwIHAxKSAodW5n ZXhwIG91dHB1dCkpKSkKKyAgICAgICAgICAgICAodm9pZCAoc2V0LWd1aWxlLWZvci1idWlsZCAl Ym9vdHN0cmFwLWd1aWxlKSkKKyAgICAgICAgICAgICAoZHJ2MCAoZ2V4cC0+ZGVyaXZhdGlvbiAi dCIgZXhwMCAjOmdyYWZ0PyAjdCkpCisgICAgICAgICAgICAgKGRydjEgKGdleHAtPmRlcml2YXRp b24gInQiIGV4cDEgIzpncmFmdD8gI3QpKQorICAgICAgICAgICAgIChkcnYxKiAoZ2V4cC0+ZGVy aXZhdGlvbiAidCIgZXhwMSAjOmdyYWZ0PyAjZikpCisgICAgICAgICAgICAgKF8gKHNldC1ncmFm dGluZyBncmFmdD8pKSkKKyAgICAgICAgICAgIChyZXR1cm4KKyAgICAgICAgICAgICAgKGFuZCAo bm90IChzdHJpbmc9PworICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVyaXZhdGlvbi0+b3V0 cHV0LXBhdGggZHJ2MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlcml2YXRpb24tPm91 dHB1dC1wYXRoIGRydjEpKSkKKyAgICAgICAgICAgICAgICAgICAoc3RyaW5nPT8KKyAgICAgICAg ICAgICAgICAgICAgIChkZXJpdmF0aW9uLT5vdXRwdXQtcGF0aCBkcnYwKQorICAgICAgICAgICAg ICAgICAgICAgKGRlcml2YXRpb24tPm91dHB1dC1wYXRoIGRydjEqKSkpKSkKKyAgICAgIzpndWls ZS1mb3ItYnVpbGQKKyAgICAgKCVndWlsZS1mb3ItYnVpbGQpKSkKYWN0dWFsLXZhbHVlOiAjdApy ZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogZ2V4cC0+ZGVyaXZhdGlvbiwgY29tcG9zZWQgZ2V4cHMK bG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvZ2V4cC5z Y206Mzg0CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJnZXhwLT5kZXJpdmF0aW9uLCBjb21w b3NlZCBnZXhwcyIKKyAgIChydW4td2l0aC1zdG9yZQorICAgICAlc3RvcmUKKyAgICAgKG1sZXQq ICVzdG9yZS1tb25hZAorICAgICAgICAgICAgKChleHAwIC0+CisgICAgICAgICAgICAgICAgICAg KGdleHAgKGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobWtkaXIgKHVuZ2V4cCBv dXRwdXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoZGlyICh1bmdleHAgb3V0cHV0 KSkpKSkKKyAgICAgICAgICAgICAoZXhwMSAtPgorICAgICAgICAgICAgICAgICAgIChnZXhwIChz eW1saW5rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAodW5nZXhwICVib290c3RyYXAtZ3VpbGUpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIvYmluL2d1aWxlIikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICJmb28iKSkpCisgICAgICAgICAgICAgKGV4cCAtPgorICAgICAgICAgICAgICAgICAg KGdleHAgKGJlZ2luICh1bmdleHAgZXhwMCkgKHVuZ2V4cCBleHAxKSkpKQorICAgICAgICAgICAg IChkcnYgKGdleHAtPmRlcml2YXRpb24gImZvbyIgZXhwKSkKKyAgICAgICAgICAgICAob3V0IC0+ IChkZXJpdmF0aW9uLT5vdXRwdXQtcGF0aCBkcnYpKQorICAgICAgICAgICAgIChkb25lIChidWls dC1kZXJpdmF0aW9ucyAobGlzdCBkcnYpKSkKKyAgICAgICAgICAgICAoZ3VpbGUgKHBhY2thZ2Ut ZmlsZSAlYm9vdHN0cmFwLWd1aWxlICJiaW4vZ3VpbGUiKSkpCisgICAgICAgICAgICAocmV0dXJu CisgICAgICAgICAgICAgIChzdHJpbmc9PworICAgICAgICAgICAgICAgIChyZWFkbGluayAoc3Ry aW5nLWFwcGVuZCBvdXQgIi9mb28iKSkKKyAgICAgICAgICAgICAgICBndWlsZSkpKQorICAgICAj Omd1aWxlLWZvci1idWlsZAorICAgICAoJWd1aWxlLWZvci1idWlsZCkpKQpAIGJ1aWxkLXN0YXJ0 ZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9kN2E4 cWx5cDJzdm56M2F5cTFnMzhieDRsY3ltYjRoNi1mb28uZHJ2IC0geDg2XzY0LWxpbnV4IC9ob21l L3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvdmFyL2xvZy9ndWl4L2RydnMv ZDcvL2E4cWx5cDJzdm56M2F5cTFnMzhieDRsY3ltYjRoNi1mb28uZHJ2LmJ6MgpAIGJ1aWxkLXN1 Y2NlZWRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3Jl L2Q3YThxbHlwMnN2bnozYXlxMWczOGJ4NGxjeW1iNGg2LWZvby5kcnYgLQphY3R1YWwtdmFsdWU6 ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBnZXhwLT5kZXJpdmF0aW9uLCBkZWZhdWx0IHN5 c3RlbQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9n ZXhwLnNjbTo0MDAKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImdleHAtPmRlcml2YXRpb24s IGRlZmF1bHQgc3lzdGVtIgorICAgKHJ1bi13aXRoLXN0b3JlCisgICAgICVzdG9yZQorICAgICAo bGV0ICgoc3lzdGVtICglY3VycmVudC1zeXN0ZW0pKQorICAgICAgICAgICAobWRydiAocGFyYW1l dGVyaXplCisgICAgICAgICAgICAgICAgICAgKCglY3VycmVudC1zeXN0ZW0gImZvb2JhcjY0LWxp bnV4IikpCisgICAgICAgICAgICAgICAgICAgKGdleHAtPmRlcml2YXRpb24KKyAgICAgICAgICAg ICAgICAgICAgICJmb28iCisgICAgICAgICAgICAgICAgICAgICAoZ2V4cCAobWtkaXIgKHVuZ2V4 cCBvdXRwdXQpKSkpKSkpCisgICAgICAgKG1sZXQgJXN0b3JlLW1vbmFkCisgICAgICAgICAgICAg KChkcnYgbWRydikpCisgICAgICAgICAgICAgKHJldHVybgorICAgICAgICAgICAgICAgKHN0cmlu Zz0/IHN5c3RlbSAoZGVyaXZhdGlvbi1zeXN0ZW0gZHJ2KSkpKSkKKyAgICAgIzpndWlsZS1mb3It YnVpbGQKKyAgICAgKCVndWlsZS1mb3ItYnVpbGQpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6 IFBBU1MKCnRlc3QtbmFtZTogZ2V4cC0+ZGVyaXZhdGlvbiwgbG9jYWwtZmlsZQpsb2NhdGlvbjog L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNjbTo0MTEKc291 cmNlOgorICh0ZXN0LWFzc2VydAorICAgImdleHAtPmRlcml2YXRpb24sIGxvY2FsLWZpbGUiCisg ICAocnVuLXdpdGgtc3RvcmUKKyAgICAgJXN0b3JlCisgICAgIChtbGV0KiAlc3RvcmUtbW9uYWQK KyAgICAgICAgICAgICgoZmlsZSAtPiAoc2VhcmNoLXBhdGggJWxvYWQtcGF0aCAiZ3VpeC5zY20i KSkKKyAgICAgICAgICAgICAoaW50ZCAoaW50ZXJuZWQtZmlsZSBmaWxlICM6cmVjdXJzaXZlPyAj ZikpCisgICAgICAgICAgICAgKGxvY2FsIC0+IChsb2NhbC1maWxlIGZpbGUpKQorICAgICAgICAg ICAgIChleHAgLT4KKyAgICAgICAgICAgICAgICAgIChnZXhwIChiZWdpbgorICAgICAgICAgICAg ICAgICAgICAgICAgICAoc3RhdCAodW5nZXhwIGxvY2FsKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgKHN5bWxpbmsgKHVuZ2V4cCBsb2NhbCkgKHVuZ2V4cCBvdXRwdXQpKSkpKQorICAgICAg ICAgICAgIChkcnYgKGdleHAtPmRlcml2YXRpb24gImxvY2FsLWZpbGUiIGV4cCkpKQorICAgICAg ICAgICAgKG1iZWdpbgorICAgICAgICAgICAgICAlc3RvcmUtbW9uYWQKKyAgICAgICAgICAgICAg KGJ1aWx0LWRlcml2YXRpb25zIChsaXN0IGRydikpCisgICAgICAgICAgICAgIChyZXR1cm4KKyAg ICAgICAgICAgICAgICAoc3RyaW5nPT8KKyAgICAgICAgICAgICAgICAgIChyZWFkbGluayAoZGVy aXZhdGlvbi0+b3V0cHV0LXBhdGggZHJ2KSkKKyAgICAgICAgICAgICAgICAgIGludGQpKSkpCisg ICAgICM6Z3VpbGUtZm9yLWJ1aWxkCisgICAgICglZ3VpbGUtZm9yLWJ1aWxkKSkpCkAgYnVpbGQt c3RhcnRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3Jl L2g5MWFyZ3hjazcweWhuM2szOHFjbHFyN2IxbWNxa3k3LWxvY2FsLWZpbGUuZHJ2IC0geDg2XzY0 LWxpbnV4IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvdmFyL2xv Zy9ndWl4L2RydnMvaDkvLzFhcmd4Y2s3MHlobjNrMzhxY2xxcjdiMW1jcWt5Ny1sb2NhbC1maWxl LmRydi5iejIKQCBidWlsZC1zdWNjZWVkZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4 X3dpcC90ZXN0LXRtcC9zdG9yZS9oOTFhcmd4Y2s3MHlobjNrMzhxY2xxcjdiMW1jcWt5Ny1sb2Nh bC1maWxlLmRydiAtCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGdl eHAtPmRlcml2YXRpb24sIGNyb3NzLWNvbXBpbGF0aW9uCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50 ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2dleHAuc2NtOjQyNQpzb3VyY2U6CisgKHRlc3Qt YXNzZXJ0CisgICAiZ2V4cC0+ZGVyaXZhdGlvbiwgY3Jvc3MtY29tcGlsYXRpb24iCisgICAocnVu LXdpdGgtc3RvcmUKKyAgICAgJXN0b3JlCisgICAgIChtbGV0KiAlc3RvcmUtbW9uYWQKKyAgICAg ICAgICAgICgodGFyZ2V0IC0+ICJtaXBzNjRlbC1saW51eCIpCisgICAgICAgICAgICAgKGV4cCAt PgorICAgICAgICAgICAgICAgICAgKGdleHAgKGxpc3QgKHVuZ2V4cCBjb3JldXRpbHMpICh1bmdl eHAgb3V0cHV0KSkpKQorICAgICAgICAgICAgICh4ZHJ2IChnZXhwLT5kZXJpdmF0aW9uICJmb28i IGV4cCAjOnRhcmdldCB0YXJnZXQpKQorICAgICAgICAgICAgIChyZWZzICgoc3RvcmUtbGlmdCBy ZWZlcmVuY2VzKQorICAgICAgICAgICAgICAgICAgICAoZGVyaXZhdGlvbi1maWxlLW5hbWUgeGRy dikpKQorICAgICAgICAgICAgICh4Y3UgKHBhY2thZ2UtPmNyb3NzLWRlcml2YXRpb24gY29yZXV0 aWxzIHRhcmdldCkpCisgICAgICAgICAgICAgKGN1IChwYWNrYWdlLT5kZXJpdmF0aW9uIGNvcmV1 dGlscykpKQorICAgICAgICAgICAgKHJldHVybgorICAgICAgICAgICAgICAoYW5kIChtZW1iZXIg KGRlcml2YXRpb24tZmlsZS1uYW1lIHhjdSkgcmVmcykKKyAgICAgICAgICAgICAgICAgICAobm90 IChtZW1iZXIgKGRlcml2YXRpb24tZmlsZS1uYW1lIGN1KSByZWZzKSkpKSkKKyAgICAgIzpndWls ZS1mb3ItYnVpbGQKKyAgICAgKCVndWlsZS1mb3ItYnVpbGQpKSkKYWN0dWFsLXZhbHVlOiAjdApy ZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogZ2V4cC0+ZGVyaXZhdGlvbiwgdW5nZXhwLW5hdGl2ZQps b2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNj bTo0MzkKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImdleHAtPmRlcml2YXRpb24sIHVuZ2V4 cC1uYXRpdmUiCisgICAocnVuLXdpdGgtc3RvcmUKKyAgICAgJXN0b3JlCisgICAgIChtbGV0KiAl c3RvcmUtbW9uYWQKKyAgICAgICAgICAgICgodGFyZ2V0IC0+ICJtaXBzNjRlbC1saW51eCIpCisg ICAgICAgICAgICAgKGV4cCAtPgorICAgICAgICAgICAgICAgICAgKGdleHAgKGxpc3QgKHVuZ2V4 cC1uYXRpdmUgY29yZXV0aWxzKSAodW5nZXhwIG91dHB1dCkpKSkKKyAgICAgICAgICAgICAoeGRy diAoZ2V4cC0+ZGVyaXZhdGlvbiAiZm9vIiBleHAgIzp0YXJnZXQgdGFyZ2V0KSkKKyAgICAgICAg ICAgICAoZHJ2IChnZXhwLT5kZXJpdmF0aW9uICJmb28iIGV4cCkpKQorICAgICAgICAgICAgKHJl dHVybgorICAgICAgICAgICAgICAoc3RyaW5nPT8KKyAgICAgICAgICAgICAgICAoZGVyaXZhdGlv bi1maWxlLW5hbWUgZHJ2KQorICAgICAgICAgICAgICAgIChkZXJpdmF0aW9uLWZpbGUtbmFtZSB4 ZHJ2KSkpKQorICAgICAjOmd1aWxlLWZvci1idWlsZAorICAgICAoJWd1aWxlLWZvci1idWlsZCkp KQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBnZXhwLT5kZXJpdmF0 aW9uLCB1bmdleHAgKyB1bmdleHAtbmF0aXZlCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rl di9ndWl4L2d1aXhfd2lwL3Rlc3RzL2dleHAuc2NtOjQ0OQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0 CisgICAiZ2V4cC0+ZGVyaXZhdGlvbiwgdW5nZXhwICsgdW5nZXhwLW5hdGl2ZSIKKyAgIChydW4t d2l0aC1zdG9yZQorICAgICAlc3RvcmUKKyAgICAgKG1sZXQqICVzdG9yZS1tb25hZAorICAgICAg ICAgICAgKCh0YXJnZXQgLT4gIm1pcHM2NGVsLWxpbnV4IikKKyAgICAgICAgICAgICAoZXhwIC0+ CisgICAgICAgICAgICAgICAgICAoZ2V4cCAobGlzdCAodW5nZXhwLW5hdGl2ZSBjb3JldXRpbHMp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5nZXhwIGdsaWJjKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHVuZ2V4cCBvdXRwdXQpKSkpCisgICAgICAgICAgICAgKHhk cnYgKGdleHAtPmRlcml2YXRpb24gImZvbyIgZXhwICM6dGFyZ2V0IHRhcmdldCkpCisgICAgICAg ICAgICAgKHJlZnMgKChzdG9yZS1saWZ0IHJlZmVyZW5jZXMpCisgICAgICAgICAgICAgICAgICAg IChkZXJpdmF0aW9uLWZpbGUtbmFtZSB4ZHJ2KSkpCisgICAgICAgICAgICAgKHhnbGliYyAocGFj a2FnZS0+Y3Jvc3MtZGVyaXZhdGlvbiBnbGliYyB0YXJnZXQpKQorICAgICAgICAgICAgIChjdSAo cGFja2FnZS0+ZGVyaXZhdGlvbiBjb3JldXRpbHMpKSkKKyAgICAgICAgICAgIChyZXR1cm4KKyAg ICAgICAgICAgICAgKGFuZCAobWVtYmVyIChkZXJpdmF0aW9uLWZpbGUtbmFtZSBjdSkgcmVmcykK KyAgICAgICAgICAgICAgICAgICAobWVtYmVyIChkZXJpdmF0aW9uLWZpbGUtbmFtZSB4Z2xpYmMp IHJlZnMpKSkpCisgICAgICM6Z3VpbGUtZm9yLWJ1aWxkCisgICAgICglZ3VpbGUtZm9yLWJ1aWxk KSkpCmFjdHVhbC12YWx1ZTogKC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVz dC10bXAvc3RvcmUvaXpxOWxycHY0ejl4YWFzbGs3OWF5aWRjdjVsaXNuOTAtZ2xpYmMtMi4yMi5k cnYgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9zYWpu Zno3OW5oZGk0bDhhNDY0YzloaHY0dmYwZ2F5Mi1jb3JldXRpbHMtOC4yNC5kcnYpCnJlc3VsdDog UEFTUwoKdGVzdC1uYW1lOiBnZXhwLT5kZXJpdmF0aW9uLCB1bmdleHAtbmF0aXZlICsgY29tcG9z ZWQgZ2V4cHMKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVz dHMvZ2V4cC5zY206NDYzCnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJnZXhwLT5kZXJpdmF0 aW9uLCB1bmdleHAtbmF0aXZlICsgY29tcG9zZWQgZ2V4cHMiCisgICAocnVuLXdpdGgtc3RvcmUK KyAgICAgJXN0b3JlCisgICAgIChtbGV0KiAlc3RvcmUtbW9uYWQKKyAgICAgICAgICAgICgodGFy Z2V0IC0+ICJtaXBzNjRlbC1saW51eCIpCisgICAgICAgICAgICAgKGV4cDAgLT4gKGdleHAgKGxp c3QgMSAyICh1bmdleHAgY29yZXV0aWxzKSkpKQorICAgICAgICAgICAgIChleHAgLT4gKGdleHAg KGxpc3QgMCAodW5nZXhwLW5hdGl2ZSBleHAwKSkpKQorICAgICAgICAgICAgICh4ZHJ2IChnZXhw LT5kZXJpdmF0aW9uICJmb28iIGV4cCAjOnRhcmdldCB0YXJnZXQpKQorICAgICAgICAgICAgIChk cnYgKGdleHAtPmRlcml2YXRpb24gImZvbyIgZXhwKSkpCisgICAgICAgICAgICAocmV0dXJuCisg ICAgICAgICAgICAgIChzdHJpbmc9PworICAgICAgICAgICAgICAgIChkZXJpdmF0aW9uLWZpbGUt bmFtZSBkcnYpCisgICAgICAgICAgICAgICAgKGRlcml2YXRpb24tZmlsZS1uYW1lIHhkcnYpKSkp CisgICAgICM6Z3VpbGUtZm9yLWJ1aWxkCisgICAgICglZ3VpbGUtZm9yLWJ1aWxkKSkpCmFjdHVh bC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGdleHAtPmRlcml2YXRpb24sIHN0 b3JlIGNvcHkKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVz dHMvZ2V4cC5zY206NDc0CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJnZXhwLT5kZXJpdmF0 aW9uLCBzdG9yZSBjb3B5IgorICAgKHJ1bi13aXRoLXN0b3JlCisgICAgICVzdG9yZQorICAgICAo bGV0ICgoYnVpbGQtb25lCisgICAgICAgICAgICAgKGdleHAgKGNhbGwtd2l0aC1vdXRwdXQtZmls ZQorICAgICAgICAgICAgICAgICAgICAgKHVuZ2V4cCBvdXRwdXQpCisgICAgICAgICAgICAgICAg ICAgICAobGFtYmRhIChwb3J0KSAoZGlzcGxheSAiVGhpcyBpcyB0aGUgb25lLiIgcG9ydCkpKSkp CisgICAgICAgICAgIChidWlsZC10d28KKyAgICAgICAgICAgICAobGFtYmRhIChvbmUpCisgICAg ICAgICAgICAgICAoZ2V4cCAoYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgKG1rZGlyICh1 bmdleHAgb3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN5bWxpbmsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAodW5nZXhwIG9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAo c3RyaW5nLWFwcGVuZCAodW5nZXhwIG91dHB1dCkgIi9vbmUiKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgKGNhbGwtd2l0aC1vdXRwdXQtZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgIChz dHJpbmctYXBwZW5kICh1bmdleHAgb3V0cHV0KSAiL3R3byIpCisgICAgICAgICAgICAgICAgICAg ICAgICAgKGxhbWJkYSAocG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5 ICJUaGlzIGlzIHRoZSBzZWNvbmQgb25lLiIgcG9ydCkpKSkpKSkKKyAgICAgICAgICAgKGJ1aWxk LWRydgorICAgICAgICAgICAgIChnZXhwIChiZWdpbgorICAgICAgICAgICAgICAgICAgICAgKHVz ZS1tb2R1bGVzIChndWl4IGJ1aWxkIHN0b3JlLWNvcHkpKQorICAgICAgICAgICAgICAgICAgICAg KG1rZGlyICh1bmdleHAgb3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgIChwb3B1bGF0ZS1z dG9yZSAnKCJncmFwaCIpICh1bmdleHAgb3V0cHV0KSkpKSkpCisgICAgICAgKG1sZXQqICVzdG9y ZS1tb25hZAorICAgICAgICAgICAgICAoKG9uZSAoZ2V4cC0+ZGVyaXZhdGlvbiAib25lIiBidWls ZC1vbmUpKQorICAgICAgICAgICAgICAgKHR3byAoZ2V4cC0+ZGVyaXZhdGlvbiAidHdvIiAoYnVp bGQtdHdvIG9uZSkpKQorICAgICAgICAgICAgICAgKGRydiAoZ2V4cC0+ZGVyaXZhdGlvbgorICAg ICAgICAgICAgICAgICAgICAgICJzdG9yZS1jb3B5IgorICAgICAgICAgICAgICAgICAgICAgIGJ1 aWxkLWRydgorICAgICAgICAgICAgICAgICAgICAgICM6cmVmZXJlbmNlcy1ncmFwaHMKKyAgICAg ICAgICAgICAgICAgICAgICBgKCgiZ3JhcGgiICx0d28pKQorICAgICAgICAgICAgICAgICAgICAg ICM6bW9kdWxlcworICAgICAgICAgICAgICAgICAgICAgICcoKGd1aXggYnVpbGQgc3RvcmUtY29w eSkgKGd1aXggYnVpbGQgdXRpbHMpKSkpCisgICAgICAgICAgICAgICAob2s/IChidWlsdC1kZXJp dmF0aW9ucyAobGlzdCBkcnYpKSkKKyAgICAgICAgICAgICAgIChvdXQgLT4gKGRlcml2YXRpb24t Pm91dHB1dC1wYXRoIGRydikpKQorICAgICAgICAgICAgICAobGV0ICgob25lIChkZXJpdmF0aW9u LT5vdXRwdXQtcGF0aCBvbmUpKQorICAgICAgICAgICAgICAgICAgICAodHdvIChkZXJpdmF0aW9u LT5vdXRwdXQtcGF0aCB0d28pKSkKKyAgICAgICAgICAgICAgICAocmV0dXJuCisgICAgICAgICAg ICAgICAgICAoYW5kIG9rPworICAgICAgICAgICAgICAgICAgICAgICAoZmlsZS1leGlzdHM/IChz dHJpbmctYXBwZW5kIG91dCAiLyIgb25lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUt ZXhpc3RzPyAoc3RyaW5nLWFwcGVuZCBvdXQgIi8iIHR3bykpCisgICAgICAgICAgICAgICAgICAg ICAgIChmaWxlLWV4aXN0cz8gKHN0cmluZy1hcHBlbmQgb3V0ICIvIiB0d28gIi90d28iKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgKHN0cmluZz0/CisgICAgICAgICAgICAgICAgICAgICAgICAg KHJlYWRsaW5rIChzdHJpbmctYXBwZW5kIG91dCAiLyIgdHdvICIvb25lIikpCisgICAgICAgICAg ICAgICAgICAgICAgICAgb25lKSkpKSkpCisgICAgICM6Z3VpbGUtZm9yLWJ1aWxkCisgICAgICgl Z3VpbGUtZm9yLWJ1aWxkKSkpCkAgYnVpbGQtc3RhcnRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9n dWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlLzZxaDl2d3NhODZybW5jNHBxYjRmamFqM3lkYml5 MzAxLW1vZHVsZS1pbXBvcnQuZHJ2IC0geDg2XzY0LWxpbnV4IC9ob21lL3NhcGllbnRlY2gvRGV2 L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvdmFyL2xvZy9ndWl4L2RydnMvNnEvL2g5dndzYTg2cm1u YzRwcWI0ZmphajN5ZGJpeTMwMS1tb2R1bGUtaW1wb3J0LmRydi5iejIKQCBidWlsZC1zdWNjZWVk ZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS82cWg5 dndzYTg2cm1uYzRwcWI0ZmphajN5ZGJpeTMwMS1tb2R1bGUtaW1wb3J0LmRydiAtCkAgYnVpbGQt c3RhcnRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3Jl LzZ5Y2cyc3dsbXJhczh3NjAxbnN6dnBxY2FubGltZmI5LW9uZS5kcnYgLSB4ODZfNjQtbGludXgg L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC92YXIvbG9nL2d1aXgv ZHJ2cy82eS8vY2cyc3dsbXJhczh3NjAxbnN6dnBxY2FubGltZmI5LW9uZS5kcnYuYnoyCkAgYnVp bGQtc3VjY2VlZGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAv c3RvcmUvNnljZzJzd2xtcmFzOHc2MDFuc3p2cHFjYW5saW1mYjktb25lLmRydiAtCkAgYnVpbGQt c3RhcnRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3Jl L3B4cGJnZnl4eWM4cWd6d3N3cjk1MGhtODRqajA0cGhtLW1vZHVsZS1pbXBvcnQtY29tcGlsZWQu ZHJ2IC0geDg2XzY0LWxpbnV4IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVz dC10bXAvdmFyL2xvZy9ndWl4L2RydnMvcHgvL3BiZ2Z5eHljOHFnendzd3I5NTBobTg0amowNHBo bS1tb2R1bGUtaW1wb3J0LWNvbXBpbGVkLmRydi5iejIKQCBidWlsZC1zdWNjZWVkZWQgL2hvbWUv c2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9weHBiZ2Z5eHljOHFn endzd3I5NTBobTg0amowNHBobS1tb2R1bGUtaW1wb3J0LWNvbXBpbGVkLmRydiAtCkAgYnVpbGQt c3RhcnRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3Jl L2hsejBmNzZ4c25nenhtMDk2c2s1Mm00MjFwM3BrNnZ4LXR3by5kcnYgLSB4ODZfNjQtbGludXgg L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC92YXIvbG9nL2d1aXgv ZHJ2cy9obC8vejBmNzZ4c25nenhtMDk2c2s1Mm00MjFwM3BrNnZ4LXR3by5kcnYuYnoyCkAgYnVp bGQtc3VjY2VlZGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAv c3RvcmUvaGx6MGY3Nnhzbmd6eG0wOTZzazUybTQyMXAzcGs2dngtdHdvLmRydiAtCkAgYnVpbGQt c3RhcnRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3Jl L21manJ6ZjExcTcwcmMxOWpteXJyNmlpczUxc2oxMTMwLXN0b3JlLWNvcHkuZHJ2IC0geDg2XzY0 LWxpbnV4IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvdmFyL2xv Zy9ndWl4L2RydnMvbWYvL2pyemYxMXE3MHJjMTlqbXlycjZpaXM1MXNqMTEzMC1zdG9yZS1jb3B5 LmRydi5iejIKYC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3Rv cmUvOTRscHMwdmtranBjYzRiMHJudzludmptMmp4eThkdzItb25lJyAtPiBgL2hvbWUvc2FwaWVu dGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS8wbG5yeXE1a20xMjMyYWpxeXo5 YmlwdnA2bnJyOXNjZi1zdG9yZS1jb3B5L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dp cC90ZXN0LXRtcC9zdG9yZS85NGxwczB2a2tqcGNjNGIwcm53OW52am0yanh5OGR3Mi1vbmUnCmAv aG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL2ZwNXF2ODQ4 eGRycXBmN2Z4Yng1bThydzQ2d2hxdzJkLXR3by9vbmUnIC0+IGAvaG9tZS9zYXBpZW50ZWNoL0Rl di9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlLzBsbnJ5cTVrbTEyMzJhanF5ejliaXB2cDZu cnI5c2NmLXN0b3JlLWNvcHkvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3Qt dG1wL3N0b3JlL2ZwNXF2ODQ4eGRycXBmN2Z4Yng1bThydzQ2d2hxdzJkLXR3by9vbmUnCmAvaG9t ZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL2ZwNXF2ODQ4eGRy cXBmN2Z4Yng1bThydzQ2d2hxdzJkLXR3by90d28nIC0+IGAvaG9tZS9zYXBpZW50ZWNoL0Rldi9n dWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlLzBsbnJ5cTVrbTEyMzJhanF5ejliaXB2cDZucnI5 c2NmLXN0b3JlLWNvcHkvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1w L3N0b3JlL2ZwNXF2ODQ4eGRycXBmN2Z4Yng1bThydzQ2d2hxdzJkLXR3by90d28nCkAgYnVpbGQt c3VjY2VlZGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3Rv cmUvbWZqcnpmMTFxNzByYzE5am15cnI2aWlzNTFzajExMzAtc3RvcmUtY29weS5kcnYgLQphY3R1 YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBpbXBvcnRlZC1maWxlcwpsb2Nh dGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNjbTo1 MDkKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImltcG9ydGVkLWZpbGVzIgorICAgKHJ1bi13 aXRoLXN0b3JlCisgICAgICVzdG9yZQorICAgICAobWxldCogJXN0b3JlLW1vbmFkCisgICAgICAg ICAgICAoKGZpbGVzIC0+CisgICAgICAgICAgICAgICAgICAgIGAoKCJ4IgorICAgICAgICAgICAg ICAgICAgICAgICB1bnF1b3RlCisgICAgICAgICAgICAgICAgICAgICAgIChzZWFyY2gtcGF0aCAl bG9hZC1wYXRoICJpY2UtOS9xLnNjbSIpKQorICAgICAgICAgICAgICAgICAgICAgICgiYS9iL2Mi CisgICAgICAgICAgICAgICAgICAgICAgIHVucXVvdGUKKyAgICAgICAgICAgICAgICAgICAgICAg KHNlYXJjaC1wYXRoICVsb2FkLXBhdGggImd1aXgvZGVyaXZhdGlvbnMuc2NtIikpCisgICAgICAg ICAgICAgICAgICAgICAgKCJwL3EiCisgICAgICAgICAgICAgICAgICAgICAgIHVucXVvdGUKKyAg ICAgICAgICAgICAgICAgICAgICAgKHNlYXJjaC1wYXRoICVsb2FkLXBhdGggImd1aXguc2NtIikp CisgICAgICAgICAgICAgICAgICAgICAgKCJwL3oiCisgICAgICAgICAgICAgICAgICAgICAgIHVu cXVvdGUKKyAgICAgICAgICAgICAgICAgICAgICAgKHNlYXJjaC1wYXRoICVsb2FkLXBhdGggImd1 aXgvc3RvcmUuc2NtIikpKSkKKyAgICAgICAgICAgICAoZHJ2IChpbXBvcnRlZC1maWxlcyBmaWxl cykpKQorICAgICAgICAgICAgKG1iZWdpbgorICAgICAgICAgICAgICAlc3RvcmUtbW9uYWQKKyAg ICAgICAgICAgICAgKGJ1aWx0LWRlcml2YXRpb25zIChsaXN0IGRydikpCisgICAgICAgICAgICAg IChsZXQgKChkaXIgKGRlcml2YXRpb24tPm91dHB1dC1wYXRoIGRydikpKQorICAgICAgICAgICAg ICAgIChyZXR1cm4KKyAgICAgICAgICAgICAgICAgIChldmVyeSAobWF0Y2gtbGFtYmRhCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKHBhdGggLiBzb3VyY2UpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGVxdWFsPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbGwt d2l0aC1pbnB1dC1maWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmct YXBwZW5kIGRpciAiLyIgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0 LWJ5dGV2ZWN0b3ItYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbGwtd2l0 aC1pbnB1dC1maWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQtYnl0ZXZlY3Rvci1hbGwpKSkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgZmlsZXMpKSkpKQorICAgICAjOmd1aWxlLWZvci1idWlsZAor ICAgICAoJWd1aWxlLWZvci1idWlsZCkpKQpAIGJ1aWxkLXN0YXJ0ZWQgL2hvbWUvc2FwaWVudGVj aC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS8xMzVrZzk4NnpsMm4yM3dnbmF5eGlr NXpiN2s5M2szYi1maWxlLWltcG9ydC5kcnYgLSB4ODZfNjQtbGludXggL2hvbWUvc2FwaWVudGVj aC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC92YXIvbG9nL2d1aXgvZHJ2cy8xMy8vNWtnOTg2 emwybjIzd2duYXl4aWs1emI3azkzazNiLWZpbGUtaW1wb3J0LmRydi5iejIKQCBidWlsZC1zdWNj ZWVkZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS8x MzVrZzk4NnpsMm4yM3dnbmF5eGlrNXpiN2s5M2szYi1maWxlLWltcG9ydC5kcnYgLQphY3R1YWwt dmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBnZXhwLW1vZHVsZXMgJiB1bmdleHAK bG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvZ2V4cC5z Y206NTI5CnNvdXJjZToKKyAodGVzdC1lcXVhbAorICAgImdleHAtbW9kdWxlcyAmIHVuZ2V4cCIK KyAgICcoKGJhcikgKGZvbykpCisgICAoKEBAIChndWl4IGdleHApIGdleHAtbW9kdWxlcykKKyAg ICAoZ2V4cCAoZm9vICh1bmdleHAKKyAgICAgICAgICAgICAgICAgKHdpdGgtaW1wb3J0ZWQtbW9k dWxlcyAnKChmb28pKSAoZ2V4cCArKSkpCisgICAgICAgICAgICAgICAodW5nZXhwLW5hdGl2ZQor ICAgICAgICAgICAgICAgICAod2l0aC1pbXBvcnRlZC1tb2R1bGVzICcoKGJhcikpIChnZXhwIC0p KSkpKSkpCmV4cGVjdGVkLXZhbHVlOiAoKGJhcikgKGZvbykpCmFjdHVhbC12YWx1ZTogKChiYXIp IChmb28pKQpyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogZ2V4cC1tb2R1bGVzICYgdW5nZXhwLXNw bGljaW5nCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3Rz L2dleHAuc2NtOjUzNQpzb3VyY2U6CisgKHRlc3QtZXF1YWwKKyAgICJnZXhwLW1vZHVsZXMgJiB1 bmdleHAtc3BsaWNpbmciCisgICAnKChmb28pIChiYXIpKQorICAgKChAQCAoZ3VpeCBnZXhwKSBn ZXhwLW1vZHVsZXMpCisgICAgKGdleHAgKGZvbyAodW5nZXhwLXNwbGljaW5nCisgICAgICAgICAg ICAgICAgIChsaXN0ICh3aXRoLWltcG9ydGVkLW1vZHVsZXMgJygoZm9vKSkgKGdleHAgKykpCisg ICAgICAgICAgICAgICAgICAgICAgICh3aXRoLWltcG9ydGVkLW1vZHVsZXMgJygoYmFyKSkgKGdl eHAgLSkpKSkpKSkpCmV4cGVjdGVkLXZhbHVlOiAoKGZvbykgKGJhcikpCmFjdHVhbC12YWx1ZTog KChmb28pIChiYXIpKQpyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogZ2V4cC0+ZGVyaXZhdGlvbiAj Om1vZHVsZXMKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVz dHMvZ2V4cC5zY206NTQxCnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJnZXhwLT5kZXJpdmF0 aW9uICM6bW9kdWxlcyIKKyAgIChydW4td2l0aC1zdG9yZQorICAgICAlc3RvcmUKKyAgICAgKG1s ZXQqICVzdG9yZS1tb25hZAorICAgICAgICAgICAgKChidWlsZCAtPgorICAgICAgICAgICAgICAg ICAgICAoZ2V4cCAoYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXNlLW1vZHVs ZXMgKGd1aXggYnVpbGQgdXRpbHMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChta2Rp ci1wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodW5nZXhwIG91dHB1dCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIi9ndWlsZS9ndWl4L25peCIpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICN0KSkpCisgICAgICAgICAgICAgKGRydiAoZ2V4cC0+ZGVyaXZhdGlvbgorICAg ICAgICAgICAgICAgICAgICAidGVzdC13aXRoLW1vZHVsZXMiCisgICAgICAgICAgICAgICAgICAg IGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICM6bW9kdWxlcworICAgICAgICAgICAgICAgICAg ICAnKChndWl4IGJ1aWxkIHV0aWxzKSkpKSkKKyAgICAgICAgICAgIChtYmVnaW4KKyAgICAgICAg ICAgICAgJXN0b3JlLW1vbmFkCisgICAgICAgICAgICAgIChidWlsdC1kZXJpdmF0aW9ucyAobGlz dCBkcnYpKQorICAgICAgICAgICAgICAobGV0KiAoKHAgKGRlcml2YXRpb24tPm91dHB1dC1wYXRo IGRydikpCisgICAgICAgICAgICAgICAgICAgICAocyAoc3RhdCAoc3RyaW5nLWFwcGVuZCBwICIv Z3VpbGUvZ3VpeC9uaXgiKSkpKQorICAgICAgICAgICAgICAgIChyZXR1cm4gKGVxPyAoc3RhdDp0 eXBlIHMpICdkaXJlY3RvcnkpKSkpKQorICAgICAjOmd1aWxlLWZvci1idWlsZAorICAgICAoJWd1 aWxlLWZvci1idWlsZCkpKQpAIGJ1aWxkLXN0YXJ0ZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3Vp eC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS82bHFwN2Y5NjR6Yml2aWluaTIwN2JsZnc0M2JjcDZq ay10ZXN0LXdpdGgtbW9kdWxlcy5kcnYgLSB4ODZfNjQtbGludXggL2hvbWUvc2FwaWVudGVjaC9E ZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC92YXIvbG9nL2d1aXgvZHJ2cy82bC8vcXA3Zjk2NHpi aXZpaW5pMjA3YmxmdzQzYmNwNmprLXRlc3Qtd2l0aC1tb2R1bGVzLmRydi5iejIKQCBidWlsZC1z dWNjZWVkZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9y ZS82bHFwN2Y5NjR6Yml2aWluaTIwN2JsZnc0M2JjcDZqay10ZXN0LXdpdGgtbW9kdWxlcy5kcnYg LQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBnZXhwLT5kZXJpdmF0 aW9uICYgd2l0aC1pbXBvcnRlZC1tb2R1bGVzCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rl di9ndWl4L2d1aXhfd2lwL3Rlc3RzL2dleHAuc2NtOjU1NQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0 CisgICAiZ2V4cC0+ZGVyaXZhdGlvbiAmIHdpdGgtaW1wb3J0ZWQtbW9kdWxlcyIKKyAgIChydW4t d2l0aC1zdG9yZQorICAgICAlc3RvcmUKKyAgICAgKG1sZXQqICVzdG9yZS1tb25hZAorICAgICAg ICAgICAgKChidWlsZCAtPgorICAgICAgICAgICAgICAgICAgICAod2l0aC1pbXBvcnRlZC1tb2R1 bGVzCisgICAgICAgICAgICAgICAgICAgICAgJygoZ3VpeCBidWlsZCB1dGlscykpCisgICAgICAg ICAgICAgICAgICAgICAgKGdleHAgKGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAodXNlLW1vZHVsZXMgKGd1aXggYnVpbGQgdXRpbHMpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKG1rZGlyLXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmlu Zy1hcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5nZXhwIG91dHB1 dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2d1aWxlL2d1aXgvbml4Iikp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdCkpKSkKKyAgICAgICAgICAgICAoZHJ2 IChnZXhwLT5kZXJpdmF0aW9uICJ0ZXN0LXdpdGgtbW9kdWxlcyIgYnVpbGQpKSkKKyAgICAgICAg ICAgIChtYmVnaW4KKyAgICAgICAgICAgICAgJXN0b3JlLW1vbmFkCisgICAgICAgICAgICAgIChi dWlsdC1kZXJpdmF0aW9ucyAobGlzdCBkcnYpKQorICAgICAgICAgICAgICAobGV0KiAoKHAgKGRl cml2YXRpb24tPm91dHB1dC1wYXRoIGRydikpCisgICAgICAgICAgICAgICAgICAgICAocyAoc3Rh dCAoc3RyaW5nLWFwcGVuZCBwICIvZ3VpbGUvZ3VpeC9uaXgiKSkpKQorICAgICAgICAgICAgICAg IChyZXR1cm4gKGVxPyAoc3RhdDp0eXBlIHMpICdkaXJlY3RvcnkpKSkpKQorICAgICAjOmd1aWxl LWZvci1idWlsZAorICAgICAoJWd1aWxlLWZvci1idWlsZCkpKQphY3R1YWwtdmFsdWU6ICN0CnJl c3VsdDogUEFTUwoKdGVzdC1uYW1lOiBnZXhwLT5kZXJpdmF0aW9uICYgbmVzdGVkIHdpdGgtaW1w b3J0ZWQtbW9kdWxlcwpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dp cC90ZXN0cy9nZXhwLnNjbTo1NzAKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImdleHAtPmRl cml2YXRpb24gJiBuZXN0ZWQgd2l0aC1pbXBvcnRlZC1tb2R1bGVzIgorICAgKHJ1bi13aXRoLXN0 b3JlCisgICAgICVzdG9yZQorICAgICAobWxldCogJXN0b3JlLW1vbmFkCisgICAgICAgICAgICAo KGJ1aWxkMQorICAgICAgICAgICAgICAgLT4KKyAgICAgICAgICAgICAgICh3aXRoLWltcG9ydGVk LW1vZHVsZXMKKyAgICAgICAgICAgICAgICAgJygoZ3VpeCBidWlsZCB1dGlscykpCisgICAgICAg ICAgICAgICAgIChnZXhwIChiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICh1c2UtbW9k dWxlcyAoZ3VpeCBidWlsZCB1dGlscykpCisgICAgICAgICAgICAgICAgICAgICAgICAgKG1rZGly LXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kICh1bmdleHAgb3V0 cHV0KSAiL2d1aWxlL2d1aXgvbml4IikpCisgICAgICAgICAgICAgICAgICAgICAgICAgI3QpKSkp CisgICAgICAgICAgICAgKGJ1aWxkMgorICAgICAgICAgICAgICAgLT4KKyAgICAgICAgICAgICAg ICh3aXRoLWltcG9ydGVkLW1vZHVsZXMKKyAgICAgICAgICAgICAgICAgJygoZ3VpeCBidWlsZCBi b3VybmlzaCkpCisgICAgICAgICAgICAgICAgIChnZXhwIChiZWdpbgorICAgICAgICAgICAgICAg ICAgICAgICAgICh1c2UtbW9kdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgKGd1aXgg YnVpbGQgYm91cm5pc2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtIGJhc2Ug Y29tcGlsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVuZ2V4cC1uYXRpdmUgYnVpbGQx KQorICAgICAgICAgICAgICAgICAgICAgICAgIChjYWxsLXdpdGgtb3V0cHV0LWZpbGUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kICh1bmdleHAgb3V0cHV0KSAiL2Ii KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAocG9ydCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHdyaXRlIChyZWFkLWFuZC1jb21waWxlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVuLWlucHV0LXN0cmluZyAiY2QgL2ZvbyIpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6ZnJvbQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAlYm91cm5pc2gtbGFuZ3VhZ2UKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIzp0bworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnc2NoZW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcG9ydCkpKSkpKSkKKyAgICAgICAgICAgICAoZHJ2IChnZXhwLT5kZXJpdmF0aW9uICJ0ZXN0 LXdpdGgtbW9kdWxlcyIgYnVpbGQyKSkpCisgICAgICAgICAgICAobWJlZ2luCisgICAgICAgICAg ICAgICVzdG9yZS1tb25hZAorICAgICAgICAgICAgICAoYnVpbHQtZGVyaXZhdGlvbnMgKGxpc3Qg ZHJ2KSkKKyAgICAgICAgICAgICAgKGxldCogKChwIChkZXJpdmF0aW9uLT5vdXRwdXQtcGF0aCBk cnYpKQorICAgICAgICAgICAgICAgICAgICAgKHMgKHN0YXQgKHN0cmluZy1hcHBlbmQgcCAiL2d1 aWxlL2d1aXgvbml4IikpKQorICAgICAgICAgICAgICAgICAgICAgKGIgKHN0cmluZy1hcHBlbmQg cCAiL2IiKSkpCisgICAgICAgICAgICAgICAgKHJldHVybgorICAgICAgICAgICAgICAgICAgKGFu ZCAoZXE/IChzdGF0OnR5cGUgcykgJ2RpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICAgICAgICAg KGVxdWFsPworICAgICAgICAgICAgICAgICAgICAgICAgICcoY2hkaXIgIi9mb28iKQorICAgICAg ICAgICAgICAgICAgICAgICAgIChjYWxsLXdpdGgtaW5wdXQtZmlsZSBiIHJlYWQpKSkpKSkpCisg ICAgICM6Z3VpbGUtZm9yLWJ1aWxkCisgICAgICglZ3VpbGUtZm9yLWJ1aWxkKSkpCkAgYnVpbGQt c3RhcnRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3Jl L3IzaWNzYzhya2t4NDJncXljc2kyazQzcWRmamw1YTh6LW1vZHVsZS1pbXBvcnQuZHJ2IC0geDg2 XzY0LWxpbnV4IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvdmFy L2xvZy9ndWl4L2RydnMvcjMvL2ljc2M4cmtreDQyZ3F5Y3NpMms0M3FkZmpsNWE4ei1tb2R1bGUt aW1wb3J0LmRydi5iejIKQCBidWlsZC1zdWNjZWVkZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3Vp eC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9yM2ljc2M4cmtreDQyZ3F5Y3NpMms0M3FkZmpsNWE4 ei1tb2R1bGUtaW1wb3J0LmRydiAtCkAgYnVpbGQtc3RhcnRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rl di9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL3doN2FwaWhyYzgyY3AyOGFybTJuNnhmeGN4 NjEyNXpjLW1vZHVsZS1pbXBvcnQtY29tcGlsZWQuZHJ2IC0geDg2XzY0LWxpbnV4IC9ob21lL3Nh cGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvdmFyL2xvZy9ndWl4L2RydnMvd2gv LzdhcGlocmM4MmNwMjhhcm0ybjZ4ZnhjeDYxMjV6Yy1tb2R1bGUtaW1wb3J0LWNvbXBpbGVkLmRy di5iejIKQCBidWlsZC1zdWNjZWVkZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dp cC90ZXN0LXRtcC9zdG9yZS93aDdhcGlocmM4MmNwMjhhcm0ybjZ4ZnhjeDYxMjV6Yy1tb2R1bGUt aW1wb3J0LWNvbXBpbGVkLmRydiAtCkAgYnVpbGQtc3RhcnRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rl di9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL3FtcXNoOHcxYmQ4cGJ4cnJtYzJrN3ZpeXlm ZG0yanpiLXRlc3Qtd2l0aC1tb2R1bGVzLmRydiAtIHg4Nl82NC1saW51eCAvaG9tZS9zYXBpZW50 ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3Zhci9sb2cvZ3VpeC9kcnZzL3FtLy9xc2g4 dzFiZDhwYnhycm1jMms3dml5eWZkbTJqemItdGVzdC13aXRoLW1vZHVsZXMuZHJ2LmJ6MgpAIGJ1 aWxkLXN1Y2NlZWRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1w L3N0b3JlL3FtcXNoOHcxYmQ4cGJ4cnJtYzJrN3ZpeXlmZG0yanpiLXRlc3Qtd2l0aC1tb2R1bGVz LmRydiAtCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGdleHAtPmRl cml2YXRpb24gIzpyZWZlcmVuY2VzLWdyYXBocwpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9E ZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNjbTo1OTkKc291cmNlOgorICh0ZXN0LWFzc2Vy dAorICAgImdleHAtPmRlcml2YXRpb24gIzpyZWZlcmVuY2VzLWdyYXBocyIKKyAgIChydW4td2l0 aC1zdG9yZQorICAgICAlc3RvcmUKKyAgICAgKG1sZXQqICVzdG9yZS1tb25hZAorICAgICAgICAg ICAgKChvbmUgKHRleHQtZmlsZSAib25lIiAocmFuZG9tLXRleHQpKSkKKyAgICAgICAgICAgICAo dHdvIChnZXhwLT5kZXJpdmF0aW9uCisgICAgICAgICAgICAgICAgICAgICJ0d28iCisgICAgICAg ICAgICAgICAgICAgIChnZXhwIChzeW1saW5rICh1bmdleHAgb25lKSAodW5nZXhwIG91dHB1dCAi Y2hib3VpYiIpKSkpKQorICAgICAgICAgICAgIChidWlsZCAtPgorICAgICAgICAgICAgICAgICAg ICAod2l0aC1pbXBvcnRlZC1tb2R1bGVzCisgICAgICAgICAgICAgICAgICAgICAgJygoZ3VpeCBi dWlsZCBzdG9yZS1jb3B5KSAoZ3VpeCBidWlsZCB1dGlscykpCisgICAgICAgICAgICAgICAgICAg ICAgKGdleHAgKGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXNlLW1vZHVs ZXMgKGd1aXggYnVpbGQgc3RvcmUtY29weSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAod2l0aC1vdXRwdXQtdG8tZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo dW5nZXhwIG91dHB1dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAo KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3cml0ZSAoY2FsbC13aXRoLWlu cHV0LWZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3Vp bGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZC1yZWZl cmVuY2UtZ3JhcGgpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2l0aC1vdXRw dXQtdG8tZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5nZXhwIG91dHB1 dCAib25lIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3cml0ZSAoY2FsbC13aXRoLWlucHV0LWZp bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib25lIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQtcmVmZXJlbmNlLWdy YXBoKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdpdGgtb3V0cHV0LXRvLWZp bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuZ2V4cCBvdXRwdXQgInR3byIp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAod3JpdGUgKGNhbGwtd2l0aC1pbnB1dC1maWxlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR3byIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkLXJlZmVyZW5jZS1ncmFwaCkpKSkp KSkpCisgICAgICAgICAgICAgKGRydiAoZ2V4cC0+ZGVyaXZhdGlvbgorICAgICAgICAgICAgICAg ICAgICAicmVmLWdyYXBocyIKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQKKyAgICAgICAgICAg ICAgICAgICAgIzpyZWZlcmVuY2VzLWdyYXBocworICAgICAgICAgICAgICAgICAgICBgKCgib25l IiAsb25lKQorICAgICAgICAgICAgICAgICAgICAgICgidHdvIiAsdHdvICJjaGJvdWliIikKKyAg ICAgICAgICAgICAgICAgICAgICAoImd1aWxlIiAsJWJvb3RzdHJhcC1ndWlsZSkpKSkKKyAgICAg ICAgICAgICAob2s/IChidWlsdC1kZXJpdmF0aW9ucyAobGlzdCBkcnYpKSkKKyAgICAgICAgICAg ICAoZ3VpbGUtZHJ2CisgICAgICAgICAgICAgICAocGFja2FnZS0+ZGVyaXZhdGlvbiAlYm9vdHN0 cmFwLWd1aWxlKSkKKyAgICAgICAgICAgICAoYmFzaCAoaW50ZXJuZWQtZmlsZQorICAgICAgICAg ICAgICAgICAgICAgKHNlYXJjaC1ib290c3RyYXAtYmluYXJ5CisgICAgICAgICAgICAgICAgICAg ICAgICJiYXNoIgorICAgICAgICAgICAgICAgICAgICAgICAoJWN1cnJlbnQtc3lzdGVtKSkKKyAg ICAgICAgICAgICAgICAgICAgICJiYXNoIgorICAgICAgICAgICAgICAgICAgICAgIzpyZWN1cnNp dmU/CisgICAgICAgICAgICAgICAgICAgICAjdCkpCisgICAgICAgICAgICAgKGctb25lIC0+IChk ZXJpdmF0aW9uLT5vdXRwdXQtcGF0aCBkcnYgIm9uZSIpKQorICAgICAgICAgICAgIChnLXR3byAt PiAoZGVyaXZhdGlvbi0+b3V0cHV0LXBhdGggZHJ2ICJ0d28iKSkKKyAgICAgICAgICAgICAoZy1n dWlsZSAtPiAoZGVyaXZhdGlvbi0+b3V0cHV0LXBhdGggZHJ2KSkpCisgICAgICAgICAgICAocmV0 dXJuCisgICAgICAgICAgICAgIChhbmQgb2s/CisgICAgICAgICAgICAgICAgICAgKGVxdWFsPwor ICAgICAgICAgICAgICAgICAgICAgKGNhbGwtd2l0aC1pbnB1dC1maWxlIGctb25lIHJlYWQpCisg ICAgICAgICAgICAgICAgICAgICAobGlzdCBvbmUpKQorICAgICAgICAgICAgICAgICAgIChsc2V0 PSBzdHJpbmc9PworICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FsbC13aXRoLWlucHV0LWZp bGUgZy10d28gcmVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3Qgb25lCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZXJpdmF0aW9uLT5vdXRwdXQtcGF0aCB0d28g ImNoYm91aWIiKSkpCisgICAgICAgICAgICAgICAgICAgKGxzZXQ9IHN0cmluZz0/CisgICAgICAg ICAgICAgICAgICAgICAgICAgIChjYWxsLXdpdGgtaW5wdXQtZmlsZSBnLWd1aWxlIHJlYWQpCisg ICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IChkZXJpdmF0aW9uLT5vdXRwdXQtcGF0aCBn dWlsZS1kcnYpIGJhc2gpKSkpKQorICAgICAjOmd1aWxlLWZvci1idWlsZAorICAgICAoJWd1aWxl LWZvci1idWlsZCkpKQpAIGJ1aWxkLXN0YXJ0ZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9n dWl4X3dpcC90ZXN0LXRtcC9zdG9yZS95aTBuaWc3NHluYnpqbTQ3ZnJkNHB2Z2wwaG1xODB3NS10 d28uZHJ2IC0geDg2XzY0LWxpbnV4IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAv dGVzdC10bXAvdmFyL2xvZy9ndWl4L2RydnMveWkvLzBuaWc3NHluYnpqbTQ3ZnJkNHB2Z2wwaG1x ODB3NS10d28uZHJ2LmJ6MgpAIGJ1aWxkLXN1Y2NlZWRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9n dWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL3lpMG5pZzc0eW5iemptNDdmcmQ0cHZnbDBobXE4 MHc1LXR3by5kcnYgLQpAIGJ1aWxkLXN0YXJ0ZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9n dWl4X3dpcC90ZXN0LXRtcC9zdG9yZS80aXdrbTBndzRxaGhubjZ4YXpzZ254N2xoYzZpd3phbS1y ZWYtZ3JhcGhzLmRydiAtIHg4Nl82NC1saW51eCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1 aXhfd2lwL3Rlc3QtdG1wL3Zhci9sb2cvZ3VpeC9kcnZzLzRpLy93a20wZ3c0cWhobm42eGF6c2du eDdsaGM2aXd6YW0tcmVmLWdyYXBocy5kcnYuYnoyCkAgYnVpbGQtc3VjY2VlZGVkIC9ob21lL3Nh cGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvNGl3a20wZ3c0cWhobm42 eGF6c2dueDdsaGM2aXd6YW0tcmVmLWdyYXBocy5kcnYgLQphY3R1YWwtdmFsdWU6ICN0CnJlc3Vs dDogUEFTUwoKdGVzdC1uYW1lOiBnZXhwLT5kZXJpdmF0aW9uICM6YWxsb3dlZC1yZWZlcmVuY2Vz CmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2dleHAu c2NtOjY0Mwpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiZ2V4cC0+ZGVyaXZhdGlvbiAjOmFs bG93ZWQtcmVmZXJlbmNlcyIKKyAgIChydW4td2l0aC1zdG9yZQorICAgICAlc3RvcmUKKyAgICAg KG1sZXQgJXN0b3JlLW1vbmFkCisgICAgICAgICAgICgoZHJ2IChnZXhwLT5kZXJpdmF0aW9uCisg ICAgICAgICAgICAgICAgICAgImFsbG93ZWQtcmVmcyIKKyAgICAgICAgICAgICAgICAgICAoZ2V4 cCAoYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChta2RpciAodW5nZXhwIG91dHB1 dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hkaXIgKHVuZ2V4cCBvdXRwdXQpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWxpbmsgKHVuZ2V4cCBvdXRwdXQpICJzZWxm IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeW1saW5rICh1bmdleHAgJWJvb3RzdHJh cC1ndWlsZSkgImd1aWxlIikpKQorICAgICAgICAgICAgICAgICAgICM6YWxsb3dlZC1yZWZlcmVu Y2VzCisgICAgICAgICAgICAgICAgICAgKGxpc3QgIm91dCIgJWJvb3RzdHJhcC1ndWlsZSkpKSkK KyAgICAgICAgICAgKGJ1aWx0LWRlcml2YXRpb25zIChsaXN0IGRydikpKQorICAgICAjOmd1aWxl LWZvci1idWlsZAorICAgICAoJWd1aWxlLWZvci1idWlsZCkpKQpAIGJ1aWxkLXN0YXJ0ZWQgL2hv bWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9xcjNwbGFuMHp4 djYzN2Q1MmY4a2c3cGljaXJtZG1tYy1hbGxvd2VkLXJlZnMuZHJ2IC0geDg2XzY0LWxpbnV4IC9o b21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvdmFyL2xvZy9ndWl4L2Ry dnMvcXIvLzNwbGFuMHp4djYzN2Q1MmY4a2c3cGljaXJtZG1tYy1hbGxvd2VkLXJlZnMuZHJ2LmJ6 MgpAIGJ1aWxkLXN1Y2NlZWRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rl c3QtdG1wL3N0b3JlL3FyM3BsYW4wenh2NjM3ZDUyZjhrZzdwaWNpcm1kbW1jLWFsbG93ZWQtcmVm cy5kcnYgLQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBnZXhwLT5k ZXJpdmF0aW9uICM6YWxsb3dlZC1yZWZlcmVuY2VzLCBzcGVjaWZpYyBvdXRwdXQKbG9jYXRpb246 IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvZ2V4cC5zY206NjU1CnNv dXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJnZXhwLT5kZXJpdmF0aW9uICM6YWxsb3dlZC1yZWZl cmVuY2VzLCBzcGVjaWZpYyBvdXRwdXQiCisgICAocnVuLXdpdGgtc3RvcmUKKyAgICAgJXN0b3Jl CisgICAgIChtbGV0KiAlc3RvcmUtbW9uYWQKKyAgICAgICAgICAgICgoaW4gKGdleHAtPmRlcml2 YXRpb24KKyAgICAgICAgICAgICAgICAgICAidGhpbmciCisgICAgICAgICAgICAgICAgICAgKGdl eHAgKGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobWtkaXIgKHVuZ2V4cCBvdXRw dXQgIm9rIikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobWtkaXIgKHVuZ2V4cCBvdXRw dXQgIm5vdC1vayIpKSkpKSkKKyAgICAgICAgICAgICAoZHJ2IChnZXhwLT5kZXJpdmF0aW9uCisg ICAgICAgICAgICAgICAgICAgICJhbGxvd2VkLXJlZnMiCisgICAgICAgICAgICAgICAgICAgIChn ZXhwIChiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwayAodW5nZXhwIGluICJu b3Qtb2siKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWtkaXIgKHVuZ2V4cCBvdXRw dXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGRpciAodW5nZXhwIG91dHB1dCkp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWxpbmsgKHVuZ2V4cCBvdXRwdXQpICJz ZWxmIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3ltbGluayAodW5nZXhwIGluICJv ayIpICJvayIpKSkKKyAgICAgICAgICAgICAgICAgICAgIzphbGxvd2VkLXJlZmVyZW5jZXMKKyAg ICAgICAgICAgICAgICAgICAgKGxpc3QgIm91dCIgKGdleHAtaW5wdXQgaW4gIm9rIikpKSkpCisg ICAgICAgICAgICAoYnVpbHQtZGVyaXZhdGlvbnMgKGxpc3QgZHJ2KSkpCisgICAgICM6Z3VpbGUt Zm9yLWJ1aWxkCisgICAgICglZ3VpbGUtZm9yLWJ1aWxkKSkpCkAgYnVpbGQtc3RhcnRlZCAvaG9t ZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL3lrOTdidjdyY2J6 bHYzajc5YjltMnZyOHY3aDk5aHI3LXRoaW5nLmRydiAtIHg4Nl82NC1saW51eCAvaG9tZS9zYXBp ZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3Zhci9sb2cvZ3VpeC9kcnZzL3lrLy85 N2J2N3JjYnpsdjNqNzliOW0ydnI4djdoOTlocjctdGhpbmcuZHJ2LmJ6MgpAIGJ1aWxkLXN1Y2Nl ZWRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL3lr OTdidjdyY2J6bHYzajc5YjltMnZyOHY3aDk5aHI3LXRoaW5nLmRydiAtCkAgYnVpbGQtc3RhcnRl ZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlL2Jmcmo0 cTE0cXhjNWJ2c3kxOTM4cWk2cmdiMHh6c3F5LWFsbG93ZWQtcmVmcy5kcnYgLSB4ODZfNjQtbGlu dXggL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC92YXIvbG9nL2d1 aXgvZHJ2cy9iZi8vcmo0cTE0cXhjNWJ2c3kxOTM4cWk2cmdiMHh6c3F5LWFsbG93ZWQtcmVmcy5k cnYuYnoyCgo7OzsgKCIvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1w L3N0b3JlL2hsMmNtZDUxM2tuOXNhNnBiZjR6cjNrN3NhNzhxNWZmLXRoaW5nLW5vdC1vayIpCkAg YnVpbGQtc3VjY2VlZGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10 bXAvc3RvcmUvYmZyajRxMTRxeGM1YnZzeTE5MzhxaTZyZ2IweHpzcXktYWxsb3dlZC1yZWZzLmRy diAtCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGdleHAtPmRlcml2 YXRpb24gIzphbGxvd2VkLXJlZmVyZW5jZXMsIGRpc2FsbG93ZWQKbG9jYXRpb246IC9ob21lL3Nh cGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvZ2V4cC5zY206NjcyCnNvdXJjZToKKyAo dGVzdC1hc3NlcnQKKyAgICJnZXhwLT5kZXJpdmF0aW9uICM6YWxsb3dlZC1yZWZlcmVuY2VzLCBk aXNhbGxvd2VkIgorICAgKGxldCAoKGRydiAocnVuLXdpdGgtc3RvcmUKKyAgICAgICAgICAgICAg ICAlc3RvcmUKKyAgICAgICAgICAgICAgICAoZ2V4cC0+ZGVyaXZhdGlvbgorICAgICAgICAgICAg ICAgICAgImFsbG93ZWQtcmVmcyIKKyAgICAgICAgICAgICAgICAgIChnZXhwIChiZWdpbgorICAg ICAgICAgICAgICAgICAgICAgICAgICAobWtkaXIgKHVuZ2V4cCBvdXRwdXQpKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2hkaXIgKHVuZ2V4cCBvdXRwdXQpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAoc3ltbGluayAodW5nZXhwICVib290c3RyYXAtZ3VpbGUpICJndWlsZSIpKSkK KyAgICAgICAgICAgICAgICAgICM6YWxsb3dlZC1yZWZlcmVuY2VzCisgICAgICAgICAgICAgICAg ICAnKCkpKSkpCisgICAgIChndWFyZCAoYyAoKG5peC1wcm90b2NvbC1lcnJvcj8gYykgI3QpKQor ICAgICAgICAgICAgKGJ1aWxkLWRlcml2YXRpb25zICVzdG9yZSAobGlzdCBkcnYpKQorICAgICAg ICAgICAgI2YpKSkKQCBidWlsZC1zdGFydGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3Vp eF93aXAvdGVzdC10bXAvc3RvcmUvZjJ3YnM2c2twZ25tbGp2NGNkZHp4MDVnY3gyNmI2bjUtYWxs b3dlZC1yZWZzLmRydiAtIHg4Nl82NC1saW51eCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1 aXhfd2lwL3Rlc3QtdG1wL3Zhci9sb2cvZ3VpeC9kcnZzL2YyLy93YnM2c2twZ25tbGp2NGNkZHp4 MDVnY3gyNmI2bjUtYWxsb3dlZC1yZWZzLmRydi5iejIKb3V0cHV0IChgL2hvbWUvc2FwaWVudGVj aC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9pbHpxeTZycmx3ZHdzYTkzOWsxejVt YWlwYTFnMjAyaS1hbGxvd2VkLXJlZnMnKSBpcyBub3QgYWxsb3dlZCB0byByZWZlciB0byBwYXRo IGAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlLzB2eGd2 bHgwM3FzY3Jkczg4czY1aHJzNzBuNWprdzJnLWd1aWxlLWJvb3RzdHJhcC0yLjAnCkAgYnVpbGQt ZmFpbGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUv ZjJ3YnM2c2twZ25tbGp2NGNkZHp4MDVnY3gyNmI2bjUtYWxsb3dlZC1yZWZzLmRydiAtIDEgb3V0 cHV0IChgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9p bHpxeTZycmx3ZHdzYTkzOWsxejVtYWlwYTFnMjAyaS1hbGxvd2VkLXJlZnMnKSBpcyBub3QgYWxs b3dlZCB0byByZWZlciB0byBwYXRoIGAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lw L3Rlc3QtdG1wL3N0b3JlLzB2eGd2bHgwM3FzY3Jkczg4czY1aHJzNzBuNWprdzJnLWd1aWxlLWJv b3RzdHJhcC0yLjAnCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGdl eHAtPmRlcml2YXRpb24gIzpkaXNhbGxvd2VkLXJlZmVyZW5jZXMsIGFsbG93ZWQKbG9jYXRpb246 IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvZ2V4cC5zY206Njg0CnNv dXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJnZXhwLT5kZXJpdmF0aW9uICM6ZGlzYWxsb3dlZC1y ZWZlcmVuY2VzLCBhbGxvd2VkIgorICAgKHJ1bi13aXRoLXN0b3JlCisgICAgICVzdG9yZQorICAg ICAobWxldCAlc3RvcmUtbW9uYWQKKyAgICAgICAgICAgKChkcnYgKGdleHAtPmRlcml2YXRpb24K KyAgICAgICAgICAgICAgICAgICAiZGlzYWxsb3dlZC1yZWZzIgorICAgICAgICAgICAgICAgICAg IChnZXhwIChiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1rZGlyICh1bmdleHAg b3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGRpciAodW5nZXhwIG91dHB1 dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3ltbGluayAodW5nZXhwIG91dHB1dCkg InNlbGYiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWxpbmsgKHVuZ2V4cCAlYm9v dHN0cmFwLWd1aWxlKSAiZ3VpbGUiKSkpCisgICAgICAgICAgICAgICAgICAgIzpkaXNhbGxvd2Vk LXJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICAgICAnKCkpKSkKKyAgICAgICAgICAgKGJ1aWx0 LWRlcml2YXRpb25zIChsaXN0IGRydikpKQorICAgICAjOmd1aWxlLWZvci1idWlsZAorICAgICAo JWd1aWxlLWZvci1idWlsZCkpKQpAIGJ1aWxkLXN0YXJ0ZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYv Z3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9uM2hoY2p6aWduajdjemg1M3NjYndqbTdtY3hh Mjd5ay1kaXNhbGxvd2VkLXJlZnMuZHJ2IC0geDg2XzY0LWxpbnV4IC9ob21lL3NhcGllbnRlY2gv RGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvdmFyL2xvZy9ndWl4L2RydnMvbjMvL2hoY2p6aWdu ajdjemg1M3NjYndqbTdtY3hhMjd5ay1kaXNhbGxvd2VkLXJlZnMuZHJ2LmJ6MgpAIGJ1aWxkLXN1 Y2NlZWRlZCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3Jl L24zaGhjanppZ25qN2N6aDUzc2Nid2ptN21jeGEyN3lrLWRpc2FsbG93ZWQtcmVmcy5kcnYgLQph Y3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBnZXhwLT5kZXJpdmF0aW9u ICM6ZGlzYWxsb3dlZC1yZWZlcmVuY2VzCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9n dWl4L2d1aXhfd2lwL3Rlc3RzL2dleHAuc2NtOjY5Ngpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0Cisg ICAiZ2V4cC0+ZGVyaXZhdGlvbiAjOmRpc2FsbG93ZWQtcmVmZXJlbmNlcyIKKyAgIChsZXQgKChk cnYgKHJ1bi13aXRoLXN0b3JlCisgICAgICAgICAgICAgICAgJXN0b3JlCisgICAgICAgICAgICAg ICAgKGdleHAtPmRlcml2YXRpb24KKyAgICAgICAgICAgICAgICAgICJkaXNhbGxvd2VkLXJlZnMi CisgICAgICAgICAgICAgICAgICAoZ2V4cCAoYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgKG1rZGlyICh1bmdleHAgb3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo ZGlyICh1bmdleHAgb3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWxpbmsg KHVuZ2V4cCAlYm9vdHN0cmFwLWd1aWxlKSAiZ3VpbGUiKSkpCisgICAgICAgICAgICAgICAgICAj OmRpc2FsbG93ZWQtcmVmZXJlbmNlcworICAgICAgICAgICAgICAgICAgKGxpc3QgJWJvb3RzdHJh cC1ndWlsZSkpKSkpCisgICAgIChndWFyZCAoYyAoKG5peC1wcm90b2NvbC1lcnJvcj8gYykgI3Qp KQorICAgICAgICAgICAgKGJ1aWxkLWRlcml2YXRpb25zICVzdG9yZSAobGlzdCBkcnYpKQorICAg ICAgICAgICAgI2YpKSkKQCBidWlsZC1zdGFydGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgv Z3VpeF93aXAvdGVzdC10bXAvc3RvcmUveTZoNmkyZDB2YjR3aG44YmZ2eWw1dmZmMTdoOXJzMTkt ZGlzYWxsb3dlZC1yZWZzLmRydiAtIHg4Nl82NC1saW51eCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9n dWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3Zhci9sb2cvZ3VpeC9kcnZzL3k2Ly9oNmkyZDB2YjR3aG44 YmZ2eWw1dmZmMTdoOXJzMTktZGlzYWxsb3dlZC1yZWZzLmRydi5iejIKb3V0cHV0IChgL2hvbWUv c2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRtcC9zdG9yZS9qejFxMzJuNnF4eXZp NmRreXdsMDI4eTZmdmRmc2kxay1kaXNhbGxvd2VkLXJlZnMnKSBpcyBub3QgYWxsb3dlZCB0byBy ZWZlciB0byBwYXRoIGAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1w L3N0b3JlLzB2eGd2bHgwM3FzY3Jkczg4czY1aHJzNzBuNWprdzJnLWd1aWxlLWJvb3RzdHJhcC0y LjAnCkAgYnVpbGQtZmFpbGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVz dC10bXAvc3RvcmUveTZoNmkyZDB2YjR3aG44YmZ2eWw1dmZmMTdoOXJzMTktZGlzYWxsb3dlZC1y ZWZzLmRydiAtIDEgb3V0cHV0IChgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90 ZXN0LXRtcC9zdG9yZS9qejFxMzJuNnF4eXZpNmRreXdsMDI4eTZmdmRmc2kxay1kaXNhbGxvd2Vk LXJlZnMnKSBpcyBub3QgYWxsb3dlZCB0byByZWZlciB0byBwYXRoIGAvaG9tZS9zYXBpZW50ZWNo L0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3N0b3JlLzB2eGd2bHgwM3FzY3Jkczg4czY1aHJz NzBuNWprdzJnLWd1aWxlLWJvb3RzdHJhcC0yLjAnCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQ QVNTCgp0ZXN0LW5hbWU6IGdleHAtPnNjcmlwdApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9E ZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNjbTo3MTYKc291cmNlOgorICh0ZXN0LWFzc2Vy dAorICAgImdleHAtPnNjcmlwdCIKKyAgIChydW4td2l0aC1zdG9yZQorICAgICAlc3RvcmUKKyAg ICAgKG1sZXQqICVzdG9yZS1tb25hZAorICAgICAgICAgICAgKChuIC0+IChyYW5kb20gKGV4cHQg MiA1MCkpKQorICAgICAgICAgICAgIChleHAgLT4KKyAgICAgICAgICAgICAgICAgIChnZXhwIChz eXN0ZW0qCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHVuZ2V4cCAlYm9vdHN0cmFwLWd1aWxlKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICIvYmluL2d1aWxlIikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIi1jIgorICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0LT5zdHJpbmcgJyhkaXNw bGF5IChleHB0ICh1bmdleHAgbikgMikpKSkpKQorICAgICAgICAgICAgIChkcnYgKGdleHAtPnNj cmlwdAorICAgICAgICAgICAgICAgICAgICAiZ3VpbGUtdGhpbmciCisgICAgICAgICAgICAgICAg ICAgIGV4cAorICAgICAgICAgICAgICAgICAgICAjOmd1aWxlCisgICAgICAgICAgICAgICAgICAg ICVib290c3RyYXAtZ3VpbGUpKQorICAgICAgICAgICAgIChvdXQgLT4gKGRlcml2YXRpb24tPm91 dHB1dC1wYXRoIGRydikpCisgICAgICAgICAgICAgKGRvbmUgKGJ1aWx0LWRlcml2YXRpb25zIChs aXN0IGRydikpKSkKKyAgICAgICAgICAgIChsZXQqICgocGlwZSAob3Blbi1pbnB1dC1waXBlIG91 dCkpCisgICAgICAgICAgICAgICAgICAgKHN0ciAoZ2V0LXN0cmluZy1hbGwgcGlwZSkpKQorICAg ICAgICAgICAgICAocmV0dXJuCisgICAgICAgICAgICAgICAgKGFuZCAoemVybz8gKGNsb3NlLXBp cGUgcGlwZSkpCisgICAgICAgICAgICAgICAgICAgICAoPSAoZXhwdCBuIDIpIChzdHJpbmctPm51 bWJlciBzdHIpKSkpKSkKKyAgICAgIzpndWlsZS1mb3ItYnVpbGQKKyAgICAgKCVndWlsZS1mb3It YnVpbGQpKSkKcmVzdWx0OiBTS0lQCgp0ZXN0LW5hbWU6IHByb2dyYW0tZmlsZQpsb2NhdGlvbjog L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNjbTo3MzMKc291 cmNlOgorICh0ZXN0LWFzc2VydAorICAgInByb2dyYW0tZmlsZSIKKyAgIChydW4td2l0aC1zdG9y ZQorICAgICAlc3RvcmUKKyAgICAgKGxldCogKChuIChyYW5kb20gKGV4cHQgMiA1MCkpKQorICAg ICAgICAgICAgKGV4cCAod2l0aC1pbXBvcnRlZC1tb2R1bGVzCisgICAgICAgICAgICAgICAgICAg JygoZ3VpeCBidWlsZCB1dGlscykpCisgICAgICAgICAgICAgICAgICAgKGdleHAgKGJlZ2luCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAodXNlLW1vZHVsZXMgKGd1aXggYnVpbGQgdXRpbHMp KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpc3BsYXkgKHVuZ2V4cCBuKSkpKSkpCisg ICAgICAgICAgICAoZmlsZSAocHJvZ3JhbS1maWxlCisgICAgICAgICAgICAgICAgICAgICJwcm9n cmFtIgorICAgICAgICAgICAgICAgICAgICBleHAKKyAgICAgICAgICAgICAgICAgICAgIzpndWls ZQorICAgICAgICAgICAgICAgICAgICAlYm9vdHN0cmFwLWd1aWxlKSkpCisgICAgICAgKG1sZXQq ICVzdG9yZS1tb25hZAorICAgICAgICAgICAgICAoKGRydiAobG93ZXItb2JqZWN0IGZpbGUpKQor ICAgICAgICAgICAgICAgKG91dCAtPiAoZGVyaXZhdGlvbi0+b3V0cHV0LXBhdGggZHJ2KSkpCisg ICAgICAgICAgICAgIChtYmVnaW4KKyAgICAgICAgICAgICAgICAlc3RvcmUtbW9uYWQKKyAgICAg ICAgICAgICAgICAoYnVpbHQtZGVyaXZhdGlvbnMgKGxpc3QgZHJ2KSkKKyAgICAgICAgICAgICAg ICAobGV0KiAoKHBpcGUgKG9wZW4taW5wdXQtcGlwZSBvdXQpKQorICAgICAgICAgICAgICAgICAg ICAgICAoc3RyIChnZXQtc3RyaW5nLWFsbCBwaXBlKSkpCisgICAgICAgICAgICAgICAgICAocmV0 dXJuCisgICAgICAgICAgICAgICAgICAgIChhbmQgKHplcm8/IChjbG9zZS1waXBlIHBpcGUpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICg9IG4gKHN0cmluZy0+bnVtYmVyIHN0cikpKSkpKSkp CisgICAgICM6Z3VpbGUtZm9yLWJ1aWxkCisgICAgICglZ3VpbGUtZm9yLWJ1aWxkKSkpCnJlc3Vs dDogU0tJUAoKdGVzdC1uYW1lOiBzY2hlbWUtZmlsZQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVj aC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNjbTo3NTAKc291cmNlOgorICh0ZXN0LWFz c2VydAorICAgInNjaGVtZS1maWxlIgorICAgKHJ1bi13aXRoLXN0b3JlCisgICAgICVzdG9yZQor ICAgICAobGV0KiAoKHRleHQgKHBsYWluLWZpbGUgImZvbyIgIkhlbGxvLCB3b3JsZCEiKSkKKyAg ICAgICAgICAgIChzY2hlbWUKKyAgICAgICAgICAgICAgKHNjaGVtZS1maWxlCisgICAgICAgICAg ICAgICAgImJhciIKKyAgICAgICAgICAgICAgICAoZ2V4cCAobGlzdCAiZm9vIiAodW5nZXhwIHRl eHQpKSkpKSkKKyAgICAgICAobWxldCogJXN0b3JlLW1vbmFkCisgICAgICAgICAgICAgICgoZHJ2 IChsb3dlci1vYmplY3Qgc2NoZW1lKSkKKyAgICAgICAgICAgICAgICh0ZXh0IChsb3dlci1vYmpl Y3QgdGV4dCkpCisgICAgICAgICAgICAgICAob3V0IC0+IChkZXJpdmF0aW9uLT5vdXRwdXQtcGF0 aCBkcnYpKSkKKyAgICAgICAgICAgICAgKG1iZWdpbgorICAgICAgICAgICAgICAgICVzdG9yZS1t b25hZAorICAgICAgICAgICAgICAgIChidWlsdC1kZXJpdmF0aW9ucyAobGlzdCBkcnYpKQorICAg ICAgICAgICAgICAgIChtbGV0ICVzdG9yZS1tb25hZAorICAgICAgICAgICAgICAgICAgICAgICgo cmVmcyAoKHN0b3JlLWxpZnQgcmVmZXJlbmNlcykgb3V0KSkpCisgICAgICAgICAgICAgICAgICAg ICAgKHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCAoZXF1YWw/IHJlZnMgKGxp c3QgdGV4dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcXVhbD8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBgKGxpc3QgImZvbyIgLHRleHQpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNhbGwtd2l0aC1pbnB1dC1maWxlIG91dCByZWFkKSkpKSkpKSkK KyAgICAgIzpndWlsZS1mb3ItYnVpbGQKKyAgICAgKCVndWlsZS1mb3ItYnVpbGQpKSkKQCBidWls ZC1zdGFydGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3Rv cmUvYzhpbDUwNjFqMHF3YmdqNmxyNXluMTBpdzFncDhqY2gtYmFyLmRydiAtIHg4Nl82NC1saW51 eCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3Zhci9sb2cvZ3Vp eC9kcnZzL2M4Ly9pbDUwNjFqMHF3YmdqNmxyNXluMTBpdzFncDhqY2gtYmFyLmRydi5iejIKQCBi dWlsZC1zdWNjZWVkZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0LXRt cC9zdG9yZS9jOGlsNTA2MWowcXdiZ2o2bHI1eW4xMGl3MWdwOGpjaC1iYXIuZHJ2IC0KYWN0dWFs LXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogdGV4dC1maWxlKgpsb2NhdGlvbjog L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNjbTo3NjMKc291 cmNlOgorICh0ZXN0LWFzc2VydAorICAgInRleHQtZmlsZSoiCisgICAobGV0ICgocmVmZXJlbmNl cyAoc3RvcmUtbGlmdCByZWZlcmVuY2VzKSkpCisgICAgIChydW4td2l0aC1zdG9yZQorICAgICAg ICVzdG9yZQorICAgICAgIChtbGV0KiAlc3RvcmUtbW9uYWQKKyAgICAgICAgICAgICAgKChkcnYg KHBhY2thZ2UtPmRlcml2YXRpb24gJWJvb3RzdHJhcC1ndWlsZSkpCisgICAgICAgICAgICAgICAo Z3VpbGUgLT4gKGRlcml2YXRpb24tPm91dHB1dC1wYXRoIGRydikpCisgICAgICAgICAgICAgICAo ZmlsZSAodGV4dC1maWxlICJiYXIiICJUaGlzIGlzIGJhci4iKSkKKyAgICAgICAgICAgICAgICh0 ZXh0ICh0ZXh0LWZpbGUqCisgICAgICAgICAgICAgICAgICAgICAgICJmb28iCisgICAgICAgICAg ICAgICAgICAgICAgICVib290c3RyYXAtZ3VpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIi9i aW4vZ3VpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAoZ2V4cC1pbnB1dCAlYm9vdHN0cmFw LWd1aWxlICJvdXQiKQorICAgICAgICAgICAgICAgICAgICAgICAiL2Jpbi9ndWlsZSAiCisgICAg ICAgICAgICAgICAgICAgICAgIGRydgorICAgICAgICAgICAgICAgICAgICAgICAiL2Jpbi9ndWls ZSAiCisgICAgICAgICAgICAgICAgICAgICAgIGZpbGUpKQorICAgICAgICAgICAgICAgKGRvbmUg KGJ1aWx0LWRlcml2YXRpb25zIChsaXN0IHRleHQpKSkKKyAgICAgICAgICAgICAgIChvdXQgLT4g KGRlcml2YXRpb24tPm91dHB1dC1wYXRoIHRleHQpKQorICAgICAgICAgICAgICAgKHJlZnMgKHJl ZmVyZW5jZXMgb3V0KSkpCisgICAgICAgICAgICAgIChyZXR1cm4KKyAgICAgICAgICAgICAgICAo YW5kIChsc2V0PSBzdHJpbmc9PyByZWZzIChsaXN0IGd1aWxlIGZpbGUpKQorICAgICAgICAgICAg ICAgICAgICAgKGVxdWFsPworICAgICAgICAgICAgICAgICAgICAgICAoY2FsbC13aXRoLWlucHV0 LWZpbGUgb3V0IGdldC1zdHJpbmctYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5n LWFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWxlCisgICAgICAgICAgICAgICAg ICAgICAgICAgIi9iaW4vZ3VpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWxlCisg ICAgICAgICAgICAgICAgICAgICAgICAgIi9iaW4vZ3VpbGUgIgorICAgICAgICAgICAgICAgICAg ICAgICAgIGd1aWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgIi9iaW4vZ3VpbGUgIgorICAg ICAgICAgICAgICAgICAgICAgICAgIGZpbGUpKSkpKQorICAgICAgICM6Z3VpbGUtZm9yLWJ1aWxk CisgICAgICAgKHBhY2thZ2UtZGVyaXZhdGlvbiAlc3RvcmUgJWJvb3RzdHJhcC1ndWlsZSkpKSkK QCBidWlsZC1zdGFydGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10 bXAvc3RvcmUvaGtuZHhtNWk1bDF6Y3piaWF2cWJrODRxcmRtaWx6NmctZm9vLmRydiAtIHg4Nl82 NC1saW51eCAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3QtdG1wL3Zhci9s b2cvZ3VpeC9kcnZzL2hrLy9uZHhtNWk1bDF6Y3piaWF2cWJrODRxcmRtaWx6NmctZm9vLmRydi5i ejIKQCBidWlsZC1zdWNjZWVkZWQgL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90 ZXN0LXRtcC9zdG9yZS9oa25keG01aTVsMXpjemJpYXZxYms4NHFyZG1pbHo2Zy1mb28uZHJ2IC0K YWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogbWl4ZWQtdGV4dC1maWxl CmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2dleHAu c2NtOjc4Nwpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAibWl4ZWQtdGV4dC1maWxlIgorICAg KHJ1bi13aXRoLXN0b3JlCisgICAgICVzdG9yZQorICAgICAobWxldCogJXN0b3JlLW1vbmFkCisg ICAgICAgICAgICAoKGZpbGUgLT4KKyAgICAgICAgICAgICAgICAgICAobWl4ZWQtdGV4dC1maWxl CisgICAgICAgICAgICAgICAgICAgICAibWl4ZWQiCisgICAgICAgICAgICAgICAgICAgICAiZXhw b3J0IFBBVEg9IgorICAgICAgICAgICAgICAgICAgICAgJWJvb3RzdHJhcC1ndWlsZQorICAgICAg ICAgICAgICAgICAgICAgIi9iaW4iKSkKKyAgICAgICAgICAgICAoZHJ2IChsb3dlci1vYmplY3Qg ZmlsZSkpCisgICAgICAgICAgICAgKG91dCAtPiAoZGVyaXZhdGlvbi0+b3V0cHV0LXBhdGggZHJ2 KSkKKyAgICAgICAgICAgICAoZ3VpbGUtZHJ2CisgICAgICAgICAgICAgICAocGFja2FnZS0+ZGVy aXZhdGlvbiAlYm9vdHN0cmFwLWd1aWxlKSkKKyAgICAgICAgICAgICAoZ3VpbGUgLT4gKGRlcml2 YXRpb24tPm91dHB1dC1wYXRoIGd1aWxlLWRydikpKQorICAgICAgICAgICAgKG1iZWdpbgorICAg ICAgICAgICAgICAlc3RvcmUtbW9uYWQKKyAgICAgICAgICAgICAgKGJ1aWx0LWRlcml2YXRpb25z IChsaXN0IGRydikpCisgICAgICAgICAgICAgIChtbGV0ICVzdG9yZS1tb25hZAorICAgICAgICAg ICAgICAgICAgICAoKHJlZnMgKChzdG9yZS1saWZ0IHJlZmVyZW5jZXMpIG91dCkpKQorICAgICAg ICAgICAgICAgICAgICAocmV0dXJuCisgICAgICAgICAgICAgICAgICAgICAgKGFuZCAoc3RyaW5n PT8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgImV4cG9ydCBQ QVRIPSIgZ3VpbGUgIi9iaW4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FsbC13 aXRoLWlucHV0LWZpbGUgb3V0IGdldC1zdHJpbmctYWxsKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIChlcXVhbD8gcmVmcyAobGlzdCBndWlsZSkpKSkpKSkKKyAgICAgIzpndWlsZS1mb3It YnVpbGQKKyAgICAgKCVndWlsZS1mb3ItYnVpbGQpKSkKQCBidWlsZC1zdGFydGVkIC9ob21lL3Nh cGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvaDNjbjFjZmR6cHNiem45 Y3lmZzQ3amJzODc0NGdtd2YtbWl4ZWQuZHJ2IC0geDg2XzY0LWxpbnV4IC9ob21lL3NhcGllbnRl Y2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvdmFyL2xvZy9ndWl4L2RydnMvaDMvL2NuMWNm ZHpwc2J6bjljeWZnNDdqYnM4NzQ0Z213Zi1taXhlZC5kcnYuYnoyCkAgYnVpbGQtc3VjY2VlZGVk IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvaDNjbjFj ZmR6cHNiem45Y3lmZzQ3amJzODc0NGdtd2YtbWl4ZWQuZHJ2IC0KYWN0dWFsLXZhbHVlOiAjdApy ZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogZ2V4cC0+ZGVyaXZhdGlvbiB2cy4gJWN1cnJlbnQtdGFy Z2V0LXN5c3RlbQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90 ZXN0cy9nZXhwLnNjbTo4MDIKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImdleHAtPmRlcml2 YXRpb24gdnMuICVjdXJyZW50LXRhcmdldC1zeXN0ZW0iCisgICAobGV0ICgobXZhbCAoZ2V4cC0+ ZGVyaXZhdGlvbgorICAgICAgICAgICAgICAgICAiZm9vIgorICAgICAgICAgICAgICAgICAoZ2V4 cCAoYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAobWtkaXIgKHVuZ2V4cCBvdXRwdXQp KQorICAgICAgICAgICAgICAgICAgICAgICAgIChmb28gKHVuZ2V4cC1uYXRpdmUgZ251LW1ha2Up KSkpCisgICAgICAgICAgICAgICAgICM6dGFyZ2V0CisgICAgICAgICAgICAgICAgICNmKSkpCisg ICAgIChwYXJhbWV0ZXJpemUKKyAgICAgICAoKCVjdXJyZW50LXRhcmdldC1zeXN0ZW0gImZvb29v byIpKQorICAgICAgIChkZXJpdmF0aW9uPyAocnVuLXdpdGgtc3RvcmUgJXN0b3JlIG12YWwpKSkp KQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBsb3dlci1vYmplY3QK bG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvZ2V4cC5z Y206ODEzCnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJsb3dlci1vYmplY3QiCisgICAocnVu LXdpdGgtc3RvcmUKKyAgICAgJXN0b3JlCisgICAgIChtbGV0ICVzdG9yZS1tb25hZAorICAgICAg ICAgICAoKGRydjEgKGxvd2VyLW9iamVjdCAlYm9vdHN0cmFwLWd1aWxlKSkKKyAgICAgICAgICAg IChkcnYyIChsb3dlci1vYmplY3QgKHBhY2thZ2Utc291cmNlIGNvcmV1dGlscykpKQorICAgICAg ICAgICAgKGl0ZW0gKGxvd2VyLW9iamVjdCAocGxhaW4tZmlsZSAiZm9vIiAiSGVsbG8hIikpKSkK KyAgICAgICAgICAgKHJldHVybgorICAgICAgICAgICAgIChhbmQgKGRlcml2YXRpb24/IGRydjEp CisgICAgICAgICAgICAgICAgICAoZGVyaXZhdGlvbj8gZHJ2MikKKyAgICAgICAgICAgICAgICAg IChzdG9yZS1wYXRoPyBpdGVtKSkpKQorICAgICAjOmd1aWxlLWZvci1idWlsZAorICAgICAoJWd1 aWxlLWZvci1idWlsZCkpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1l OiBsb3dlci1vYmplY3QsIGNvbXB1dGVkLWZpbGUKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gv RGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvZ2V4cC5zY206ODIwCnNvdXJjZToKKyAodGVzdC1hc3Nl cnQKKyAgICJsb3dlci1vYmplY3QsIGNvbXB1dGVkLWZpbGUiCisgICAocnVuLXdpdGgtc3RvcmUK KyAgICAgJXN0b3JlCisgICAgIChsZXQqICgodGV4dCAocGxhaW4tZmlsZSAiZm9vIiAiSGVsbG8h IikpCisgICAgICAgICAgICAoZXhwIChnZXhwIChiZWdpbgorICAgICAgICAgICAgICAgICAgICAg ICAgIChta2RpciAodW5nZXhwIG91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKHN5 bWxpbmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bmdleHAgJWJvb3RzdHJhcC1ndWls ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kICh1bmdleHAgb3V0 cHV0KSAiL2d1aWxlIikpCisgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWxpbmsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICh1bmdleHAgdGV4dCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzdHJpbmctYXBwZW5kICh1bmdleHAgb3V0cHV0KSAiL3RleHQiKSkpKSkKKyAgICAg ICAgICAgIChjb21wdXRlZCAoY29tcHV0ZWQtZmlsZSAiY29tcHV0ZWQiIGV4cCkpKQorICAgICAg IChtbGV0KiAlc3RvcmUtbW9uYWQKKyAgICAgICAgICAgICAgKCh0ZXh0IChsb3dlci1vYmplY3Qg dGV4dCkpCisgICAgICAgICAgICAgICAoZ3VpbGUtZHJ2IChsb3dlci1vYmplY3QgJWJvb3RzdHJh cC1ndWlsZSkpCisgICAgICAgICAgICAgICAoY29tcC1kcnYgKGxvd2VyLW9iamVjdCBjb21wdXRl ZCkpCisgICAgICAgICAgICAgICAoY29tcCAtPiAoZGVyaXZhdGlvbi0+b3V0cHV0LXBhdGggY29t cC1kcnYpKSkKKyAgICAgICAgICAgICAgKG1iZWdpbgorICAgICAgICAgICAgICAgICVzdG9yZS1t b25hZAorICAgICAgICAgICAgICAgIChidWlsdC1kZXJpdmF0aW9ucyAobGlzdCBjb21wLWRydikp CisgICAgICAgICAgICAgICAgKHJldHVybgorICAgICAgICAgICAgICAgICAgKGFuZCAoc3RyaW5n PT8KKyAgICAgICAgICAgICAgICAgICAgICAgICAocmVhZGxpbmsgKHN0cmluZy1hcHBlbmQgY29t cCAiL2d1aWxlIikpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGRlcml2YXRpb24tPm91dHB1 dC1wYXRoIGd1aWxlLWRydikpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc9PworICAg ICAgICAgICAgICAgICAgICAgICAgIChyZWFkbGluayAoc3RyaW5nLWFwcGVuZCBjb21wICIvdGV4 dCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQpKSkpKSkKKyAgICAgIzpndWlsZS1m b3ItYnVpbGQKKyAgICAgKCVndWlsZS1mb3ItYnVpbGQpKSkKQCBidWlsZC1zdGFydGVkIC9ob21l L3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3RvcmUvZmRobGk2bnpkazc2 NDNza2xpYWNhMGZsenZyZjJ4eDgtY29tcHV0ZWQuZHJ2IC0geDg2XzY0LWxpbnV4IC9ob21lL3Nh cGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvdmFyL2xvZy9ndWl4L2RydnMvZmQv L2hsaTZuemRrNzY0M3NrbGlhY2EwZmx6dnJmMnh4OC1jb21wdXRlZC5kcnYuYnoyCkAgYnVpbGQt c3VjY2VlZGVkIC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdC10bXAvc3Rv cmUvZmRobGk2bnpkazc2NDNza2xpYWNhMGZsenZyZjJ4eDgtY29tcHV0ZWQuZHJ2IC0KYWN0dWFs LXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogcHJpbnRlcgpsb2NhdGlvbjogL2hv bWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9nZXhwLnNjbTo4MzkKc291cmNl OgorICh0ZXN0LWFzc2VydAorICAgInByaW50ZXIiCisgICAoc3RyaW5nLW1hdGNoCisgICAgICJe IzxnZXhwIFxcKHN0cmluZy1hcHBlbmQgLiojPHBhY2thZ2UgY29yZXV0aWxzLiogXCIvYmluL3Vu YW1lXCJcXCkgW1s6eGRpZ2l0Ol1dKz4kIgorICAgICAod2l0aC1vdXRwdXQtdG8tc3RyaW5nCisg ICAgICAgKGxhbWJkYSAoKQorICAgICAgICAgKHdyaXRlIChnZXhwIChzdHJpbmctYXBwZW5kICh1 bmdleHAgY29yZXV0aWxzKSAiL2Jpbi91bmFtZSIpKSkpKSkpCmFjdHVhbC12YWx1ZTogIygjPGdl eHAgKHN0cmluZy1hcHBlbmQgIzxnZXhwLWlucHV0ICM8cGFja2FnZSBjb3JldXRpbHNAOC4yNCBn bnUvcGFja2FnZXMvYmFzZS5zY206MjQ0IDJkZjA2YzA+Om91dD4gIi9iaW4vdW5hbWUiKSAyYTZh ZDIwPiAoMCAuIDEyMikpCnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBwcmludGVyIHZzLiB1bmdl eHAtc3BsaWNpbmcKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAv dGVzdHMvZ2V4cC5zY206ODQ4CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJwcmludGVyIHZz LiB1bmdleHAtc3BsaWNpbmciCisgICAoc3RyaW5nLW1hdGNoCisgICAgICJeIzxnZXhwIC4qIFtb OnhkaWdpdDpdXSs+JCIKKyAgICAgKHdpdGgtb3V0cHV0LXRvLXN0cmluZworICAgICAgIChsYW1i ZGEgKCkKKyAgICAgICAgICh3cml0ZSAoZ2V4cCAoYmVnaW4gKHVuZ2V4cC1zcGxpY2luZyAoZ2V4 cCAoKSkpKSkpKSkpKQphY3R1YWwtdmFsdWU6ICMoIzxnZXhwICAyNmIxY2MwPiAoMCAuIDE2KSkK cmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHN1Z2FyCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNo L0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2dleHAuc2NtOjg1Ngpzb3VyY2U6CisgKHRlc3QtZXF1 YWwKKyAgICJzdWdhciIKKyAgICcoZ2V4cCAoZm9vICh1bmdleHAgYmFyKQorICAgICAgICAgICAg ICAgKHVuZ2V4cCBiYXogIm91dCIpCisgICAgICAgICAgICAgICAodW5nZXhwIChjaGJvdWliIDQy KSkKKyAgICAgICAgICAgICAgICh1bmdleHAtc3BsaWNpbmcgKGxpc3QgeCB5IHopKQorICAgICAg ICAgICAgICAgKHVuZ2V4cC1uYXRpdmUgZm9vKQorICAgICAgICAgICAgICAgKHVuZ2V4cC1uYXRp dmUgZm9vICJvdXQiKQorICAgICAgICAgICAgICAgKHVuZ2V4cC1uYXRpdmUgKGNoYm91aWIgNDIp KQorICAgICAgICAgICAgICAgKHVuZ2V4cC1uYXRpdmUtc3BsaWNpbmcgKGxpc3QgeCB5IHopKSkp CisgICAnKGdleHAgKGZvbyAodW5nZXhwIGJhcikKKyAgICAgICAgICAgICAgICh1bmdleHAgYmF6 ICJvdXQiKQorICAgICAgICAgICAgICAgKHVuZ2V4cCAoY2hib3VpYiA0MikpCisgICAgICAgICAg ICAgICAodW5nZXhwLXNwbGljaW5nIChsaXN0IHggeSB6KSkKKyAgICAgICAgICAgICAgICh1bmdl eHAtbmF0aXZlIGZvbykKKyAgICAgICAgICAgICAgICh1bmdleHAtbmF0aXZlIGZvbyAib3V0IikK KyAgICAgICAgICAgICAgICh1bmdleHAtbmF0aXZlIChjaGJvdWliIDQyKSkKKyAgICAgICAgICAg ICAgICh1bmdleHAtbmF0aXZlLXNwbGljaW5nIChsaXN0IHggeSB6KSkpKSkKZXhwZWN0ZWQtdmFs dWU6IChnZXhwIChmb28gKHVuZ2V4cCBiYXIpICh1bmdleHAgYmF6IG91dCkgKHVuZ2V4cCAoY2hi b3VpYiA0MikpICh1bmdleHAtc3BsaWNpbmcgKGxpc3QgeCB5IHopKSAodW5nZXhwLW5hdGl2ZSBm b28pICh1bmdleHAtbmF0aXZlIGZvbyBvdXQpICh1bmdleHAtbmF0aXZlIChjaGJvdWliIDQyKSkg KHVuZ2V4cC1uYXRpdmUtc3BsaWNpbmcgKGxpc3QgeCB5IHopKSkpCmFjdHVhbC12YWx1ZTogKGdl eHAgKGZvbyAodW5nZXhwIGJhcikgKHVuZ2V4cCBiYXogb3V0KSAodW5nZXhwIChjaGJvdWliIDQy KSkgKHVuZ2V4cC1zcGxpY2luZyAobGlzdCB4IHkgeikpICh1bmdleHAtbmF0aXZlIGZvbykgKHVu Z2V4cC1uYXRpdmUgZm9vIG91dCkgKHVuZ2V4cC1uYXRpdmUgKGNoYm91aWIgNDIpKSAodW5nZXhw LW5hdGl2ZS1zcGxpY2luZyAobGlzdCB4IHkgeikpKSkKcmVzdWx0OiBQQVNTCgoKRkFJTDogdGVz dHMvc3lzY2FsbHMKPT09PT09PT09PT09PT09PT09PT0KCnRlc3QtbmFtZTogbW91bnQsIEVOT0VO VApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zeXNj YWxscy5zY206MzgKc291cmNlOgorICh0ZXN0LWVxdWFsCisgICAibW91bnQsIEVOT0VOVCIKKyAg IEVOT0VOVAorICAgKGNhdGNoICdzeXN0ZW0tZXJyb3IKKyAgICAgICAgICAobGFtYmRhICgpCisg ICAgICAgICAgICAobW91bnQgIi9kZXYvbnVsbCIgIi9kb2VzLW5vdC1leGlzdCIgImV4dDIiKQor ICAgICAgICAgICAgI2YpCisgICAgICAgICAgKGNvbXBvc2Ugc3lzdGVtLWVycm9yLWVycm5vIGxp c3QpKSkKZXhwZWN0ZWQtdmFsdWU6IDIKYWN0dWFsLXZhbHVlOiAyCnJlc3VsdDogUEFTUwoKdGVz dC1uYW1lOiB1bW91bnQsIEVOT0VOVC9FUEVSTQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9E ZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zeXNjYWxscy5zY206NDYKc291cmNlOgorICh0ZXN0LWFz c2VydAorICAgInVtb3VudCwgRU5PRU5UL0VQRVJNIgorICAgKGNhdGNoICdzeXN0ZW0tZXJyb3IK KyAgICAgICAgICAobGFtYmRhICgpICh1bW91bnQgIi9kb2VzLW5vdC1leGlzdCIpICNmKQorICAg ICAgICAgIChsYW1iZGEgYXJncworICAgICAgICAgICAgKG1lbXYgKHN5c3RlbS1lcnJvci1lcnJu byBhcmdzKQorICAgICAgICAgICAgICAgICAgKGxpc3QgRVBFUk0gRU5PRU5UKSkpKSkKYWN0dWFs LXZhbHVlOiAoMSAyKQpyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogbW91bnQtcG9pbnRzCmxvY2F0 aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N5c2NhbGxzLnNj bTo1NQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAibW91bnQtcG9pbnRzIgorICAgKGFueSAo Y3V0ZSBtZW1iZXIgPD4gKG1vdW50LXBvaW50cykpCisgICAgICAgICcoIi8iICIvcHJvYyIgIi9z eXMiICIvZGV2IikpKQphY3R1YWwtdmFsdWU6ICgvIC9zeXMva2VybmVsL3NlY3VyaXR5IC9kZXYv c2htIC9kZXYvcHRzIC9zeXMvZnMvY2dyb3VwIC9zeXMvZnMvY2dyb3VwL3N5c3RlbWQgL3N5cy9m cy9wc3RvcmUgL3N5cy9mcy9jZ3JvdXAvY3B1LGNwdWFjY3QgL3N5cy9mcy9jZ3JvdXAvY3B1c2V0 IC9zeXMvZnMvY2dyb3VwL25ldF9jbHMgL3N5cy9mcy9jZ3JvdXAvZGV2aWNlcyAvc3lzL2ZzL2Nn cm91cC9mcmVlemVyIC9zeXMvZnMvY2dyb3VwL21lbW9yeSAvc3lzL2ZzL2Nncm91cC9waWRzIC9z eXMvZnMvY2dyb3VwL2Jsa2lvIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyAvZGV2L2h1Z2VwYWdl cyAvZGV2L21xdWV1ZSAvc3lzL2tlcm5lbC9jb25maWcgL3RtcCAvcnVuL3VzZXIvMTAwMCAvbW50 IC9zeXMvZnMvZnVzZS9jb25uZWN0aW9ucykKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHN3YXBv biwgRU5PRU5UL0VQRVJNCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhf d2lwL3Rlc3RzL3N5c2NhbGxzLnNjbTo2MQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAic3dh cG9uLCBFTk9FTlQvRVBFUk0iCisgICAoY2F0Y2ggJ3N5c3RlbS1lcnJvcgorICAgICAgICAgIChs YW1iZGEgKCkgKHN3YXBvbiAiL2RvZXMtbm90LWV4aXN0IikgI2YpCisgICAgICAgICAgKGxhbWJk YSBhcmdzCisgICAgICAgICAgICAobWVtdiAoc3lzdGVtLWVycm9yLWVycm5vIGFyZ3MpCisgICAg ICAgICAgICAgICAgICAobGlzdCBFUEVSTSBFTk9FTlQpKSkpKQphY3R1YWwtdmFsdWU6ICgxIDIp CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBzd2Fwb2ZmLCBFTk9FTlQvRUlOVkFML0VQRVJNCmxv Y2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N5c2NhbGxz LnNjbTo2OQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAic3dhcG9mZiwgRU5PRU5UL0VJTlZB TC9FUEVSTSIKKyAgIChjYXRjaCAnc3lzdGVtLWVycm9yCisgICAgICAgICAgKGxhbWJkYSAoKSAo c3dhcG9mZiAiL2RvZXMtbm90LWV4aXN0IikgI2YpCisgICAgICAgICAgKGxhbWJkYSBhcmdzCisg ICAgICAgICAgICAobWVtdiAoc3lzdGVtLWVycm9yLWVycm5vIGFyZ3MpCisgICAgICAgICAgICAg ICAgICAobGlzdCBFUEVSTSBFSU5WQUwgRU5PRU5UKSkpKSkKYWN0dWFsLXZhbHVlOiAoMSAyMiAy KQpyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogbWtkdGVtcCEKbG9jYXRpb246IC9ob21lL3NhcGll bnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvc3lzY2FsbHMuc2NtOjc3CnNvdXJjZToKKyAo dGVzdC1hc3NlcnQKKyAgICJta2R0ZW1wISIKKyAgIChsZXQqICgodG1wIChvciAoZ2V0ZW52ICJU TVBESVIiKSAiL3RtcCIpKQorICAgICAgICAgIChkaXIgKG1rZHRlbXAhCisgICAgICAgICAgICAg ICAgIChzdHJpbmctYXBwZW5kIHRtcCAiL2d1aXgtdGVzdC1YWFhYWFgiKSkpKQorICAgICAoYW5k IChmaWxlLWV4aXN0cz8gZGlyKSAoYmVnaW4gKHJtZGlyIGRpcikgI3QpKSkpCmFjdHVhbC12YWx1 ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHN0YXRmcywgRU5PRU5UCmxvY2F0aW9uOiAv aG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N5c2NhbGxzLnNjbTo4NQpz b3VyY2U6CisgKHRlc3QtZXF1YWwKKyAgICJzdGF0ZnMsIEVOT0VOVCIKKyAgIEVOT0VOVAorICAg KGNhdGNoICdzeXN0ZW0tZXJyb3IKKyAgICAgICAgICAobGFtYmRhICgpIChzdGF0ZnMgIi9kb2Vz LW5vdC1leGlzdCIpKQorICAgICAgICAgIChjb21wb3NlIHN5c3RlbS1lcnJvci1lcnJubyBsaXN0 KSkpCmV4cGVjdGVkLXZhbHVlOiAyCmFjdHVhbC12YWx1ZTogMgpyZXN1bHQ6IFBBU1MKCnRlc3Qt bmFtZTogc3RhdGZzCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lw L3Rlc3RzL3N5c2NhbGxzLnNjbTo5Mgpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAic3RhdGZz IgorICAgKGxldCAoKGZzIChzdGF0ZnMgIi8iKSkpCisgICAgIChhbmQgKGZpbGUtc3lzdGVtPyBm cykKKyAgICAgICAgICAoPiAoZmlsZS1zeXN0ZW0tYmxvY2stc2l6ZSBmcykgMCkKKyAgICAgICAg ICAoPj0gKGZpbGUtc3lzdGVtLWJsb2Nrcy1hdmFpbGFibGUgZnMpIDApCisgICAgICAgICAgKD49 IChmaWxlLXN5c3RlbS1ibG9ja3MtZnJlZSBmcykKKyAgICAgICAgICAgICAgKGZpbGUtc3lzdGVt LWJsb2Nrcy1hdmFpbGFibGUgZnMpKSkpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoK dGVzdC1uYW1lOiBjbG9uZQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4 X3dpcC90ZXN0cy9zeXNjYWxscy5zY206MTA5CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJj bG9uZSIKKyAgIChtYXRjaCAoY2xvbmUgKGxvZ2lvciBDTE9ORV9ORVdVU0VSIFNJR0NITEQpKQor ICAgICAgICAgICgwIChwcmltaXRpdmUtZXhpdCA0MikpCisgICAgICAgICAgKHBpZCAoYW5kIChu b3QgKGVxdWFsPworICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWRsaW5rICh1c2VyLW5h bWVzcGFjZSBwaWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWRsaW5rICh1c2Vy LW5hbWVzcGFjZSAoZ2V0cGlkKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgKG1hdGNoICh3YWl0 cGlkIHBpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoXyAuIHN0YXR1cykgKD0gNDIg KHN0YXR1czpleGl0LXZhbCBzdGF0dXMpKSkpKSkpKQphY3R1YWwtdmFsdWU6ICNmCmFjdHVhbC1l cnJvcjoKKyAoc3lzdGVtLWVycm9yCisgICAiY2xvbmUiCisgICAifmQ6IH5BIgorICAgKDI2ODQz NTQ3MyAiT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQiKQorICAgKDEpKQpyZXN1bHQ6IEZBSUwKCnRl c3QtbmFtZTogc2V0bnMKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93 aXAvdGVzdHMvc3lzY2FsbHMuc2NtOjEyMgpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAic2V0 bnMiCisgICAobWF0Y2ggKGNsb25lIChsb2dpb3IgQ0xPTkVfTkVXVVNFUiBTSUdDSExEKSkKKyAg ICAgICAgICAoMCAocHJpbWl0aXZlLWV4aXQgMCkpCisgICAgICAgICAgKGNsb25lLXBpZAorICAg ICAgICAgICAgKG1hdGNoIChwaXBlKQorICAgICAgICAgICAgICAgICAgICgoaW4gLiBvdXQpCisg ICAgICAgICAgICAgICAgICAgIChtYXRjaCAocHJpbWl0aXZlLWZvcmspCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAoMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZSBpbikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FsbC13aXRoLWlucHV0LWZpbGUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh1c2VyLW5hbWVzcGFjZSBjbG9uZS1waWQpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChwb3J0KSAoc2V0bnMgKHBvcnQtPmZk ZXMgcG9ydCkgMCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3cml0ZSAnZG9uZSBv dXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlIG91dCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocHJpbWl0aXZlLWV4aXQgMCkpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAoZm9yay1waWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlIG91 dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWQgaW4pCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsZXQgKChyZXN1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoYW5kIChlcXVhbD8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHJlYWRsaW5rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHVzZXItbmFtZXNwYWNlIGNsb25lLXBpZCkpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkbGluaworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2VyLW5hbWVzcGFjZSBmb3JrLXBpZCkpKSkp KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3YWl0cGlkIGNsb25lLXBpZCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2FpdHBpZCBmb3JrLXBpZCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpKSkpKSkpKQphY3R1YWwtdmFsdWU6ICNmCmFj dHVhbC1lcnJvcjoKKyAoc3lzdGVtLWVycm9yCisgICAiY2xvbmUiCisgICAifmQ6IH5BIgorICAg KDI2ODQzNTQ3MyAiT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQiKQorICAgKDEpKQpyZXN1bHQ6IEZB SUwKCnRlc3QtbmFtZTogcGl2b3Qtcm9vdApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYv Z3VpeC9ndWl4X3dpcC90ZXN0cy9zeXNjYWxscy5zY206MTUxCnNvdXJjZToKKyAodGVzdC1hc3Nl cnQKKyAgICJwaXZvdC1yb290IgorICAgKG1hdGNoIChwaXBlKQorICAgICAgICAgICgoaW4gLiBv dXQpCisgICAgICAgICAgIChtYXRjaCAoY2xvbmUgKGxvZ2lvciBDTE9ORV9ORVdVU0VSIENMT05F X05FV05TIFNJR0NITEQpKQorICAgICAgICAgICAgICAgICAgKDAKKyAgICAgICAgICAgICAgICAg ICAoY2xvc2UgaW4pCisgICAgICAgICAgICAgICAgICAgKGNhbGwtd2l0aC10ZW1wb3JhcnktZGly ZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChyb290KQorICAgICAgICAgICAg ICAgICAgICAgICAobGV0ICgocHV0LW9sZCAoc3RyaW5nLWFwcGVuZCByb290ICIvcmVhbC1yb290 IikpKQorICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VudCAibm9uZSIgcm9vdCAidG1wZnMi KQorICAgICAgICAgICAgICAgICAgICAgICAgIChta2RpciBwdXQtb2xkKQorICAgICAgICAgICAg ICAgICAgICAgICAgIChjYWxsLXdpdGgtb3V0cHV0LWZpbGUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzdHJpbmctYXBwZW5kIHJvb3QgIi90ZXN0IikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsYW1iZGEgKHBvcnQpIChkaXNwbGF5ICJ0ZXN0aW5nXG4iIHBvcnQpKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAocGl2b3Qtcm9vdCByb290IHB1dC1vbGQpCisgICAgICAgICAg ICAgICAgICAgICAgICAgKHdyaXRlIChmaWxlLWV4aXN0cz8gIi90ZXN0Iikgb3V0KQorICAgICAg ICAgICAgICAgICAgICAgICAgIChjbG9zZSBvdXQpKSkpCisgICAgICAgICAgICAgICAgICAgKHBy aW1pdGl2ZS1leGl0IDApKQorICAgICAgICAgICAgICAgICAgKHBpZCAoY2xvc2Ugb3V0KQorICAg ICAgICAgICAgICAgICAgICAgICAobGV0ICgocmVzdWx0IChyZWFkIGluKSkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgKGNsb3NlIGluKQorICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQg KHplcm8/IChtYXRjaCAod2FpdHBpZCBwaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgoXyAuIHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChzdGF0dXM6ZXhpdC12YWwgc3RhdHVzKSkpKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGVxPyAjdCByZXN1bHQpKSkpKSkpKQphY3R1YWwtdmFsdWU6 ICNmCmFjdHVhbC1lcnJvcjoKKyAoc3lzdGVtLWVycm9yCisgICAiY2xvbmUiCisgICAifmQ6IH5B IgorICAgKDI2ODU2NjU0NSAiT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQiKQorICAgKDEpKQpyZXN1 bHQ6IEZBSUwKCnRlc3QtbmFtZTogZmNudGwtZmxvY2sgd2FpdApsb2NhdGlvbjogL2hvbWUvc2Fw aWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zeXNjYWxscy5zY206MTgwCnNvdXJjZToK KyAodGVzdC1lcXVhbAorICAgImZjbnRsLWZsb2NrIHdhaXQiCisgICA0MgorICAgKGxldCAoKGZp bGUgKG9wZW4tZmlsZSB0ZW1wLWZpbGUgIncwYiIpKSkKKyAgICAgKGZjbnRsLWZsb2NrIGZpbGUg J3dyaXRlLWxvY2spCisgICAgIChtYXRjaCAocHJpbWl0aXZlLWZvcmspCisgICAgICAgICAgICAo MAorICAgICAgICAgICAgIChkeW5hbWljLXdpbmQKKyAgICAgICAgICAgICAgIChjb25zdCAjdCkK KyAgICAgICAgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgICAgICAgICAgKGxldCAoKGZpbGUg KG9wZW4tZmlsZSB0ZW1wLWZpbGUgInIwYiIpKSkKKyAgICAgICAgICAgICAgICAgICAoZmNudGwt ZmxvY2sgZmlsZSAncmVhZC1sb2NrKQorICAgICAgICAgICAgICAgICAgIChwcmltaXRpdmUtZXhp dCAocmVhZCBmaWxlKSkpCisgICAgICAgICAgICAgICAgIChwcmltaXRpdmUtZXhpdCAxKSkKKyAg ICAgICAgICAgICAgIChsYW1iZGEgKCkgKHByaW1pdGl2ZS1leGl0IDIpKSkpCisgICAgICAgICAg ICAocGlkIChkaXNwbGF5ICJoZWxsbywgd29ybGQhIiBmaWxlKQorICAgICAgICAgICAgICAgICAo Zm9yY2Utb3V0cHV0IGZpbGUpCisgICAgICAgICAgICAgICAgIChzbGVlcCAxKQorICAgICAgICAg ICAgICAgICAoc2VlayBmaWxlIDAgU0VFS19TRVQpCisgICAgICAgICAgICAgICAgICh0cnVuY2F0 ZS1maWxlIGZpbGUgMCkKKyAgICAgICAgICAgICAgICAgKHdyaXRlIDQyIGZpbGUpCisgICAgICAg ICAgICAgICAgIChmb3JjZS1vdXRwdXQgZmlsZSkKKyAgICAgICAgICAgICAgICAgKGZjbnRsLWZs b2NrIGZpbGUgJ3VubG9jaykKKyAgICAgICAgICAgICAgICAgKG1hdGNoICh3YWl0cGlkIHBpZCkK KyAgICAgICAgICAgICAgICAgICAgICAgICgoXyAuIHN0YXR1cykKKyAgICAgICAgICAgICAgICAg ICAgICAgICAobGV0ICgocmVzdWx0IChzdGF0dXM6ZXhpdC12YWwgc3RhdHVzKSkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2xvc2UtcG9ydCBmaWxlKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVzdWx0KSkpKSkpKQpleHBlY3RlZC12YWx1ZTogNDIKYWN0dWFsLXZhbHVlOiA0 MgpyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogZmNudGwtZmxvY2sgbm9uLWJsb2NraW5nCmxvY2F0 aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N5c2NhbGxzLnNj bToyMTkKc291cmNlOgorICh0ZXN0LWVxdWFsCisgICAiZmNudGwtZmxvY2sgbm9uLWJsb2NraW5n IgorICAgRUFHQUlOCisgICAobWF0Y2ggKHBpcGUpCisgICAgICAgICAgKChpbnB1dCAuIG91dHB1 dCkKKyAgICAgICAgICAgKG1hdGNoIChwcmltaXRpdmUtZm9yaykKKyAgICAgICAgICAgICAgICAg ICgwCisgICAgICAgICAgICAgICAgICAgKGR5bmFtaWMtd2luZAorICAgICAgICAgICAgICAgICAg ICAgKGNvbnN0ICN0KQorICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKQorICAgICAgICAg ICAgICAgICAgICAgICAoY2xvc2UtcG9ydCBvdXRwdXQpCisgICAgICAgICAgICAgICAgICAgICAg IChyZWFkLWNoYXIgaW5wdXQpCisgICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChmaWxlIChv cGVuLWZpbGUgdGVtcC1maWxlICJ3MCIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAoY2F0 Y2ggJ2Zsb2NrLWVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEg KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmNudGwtZmxvY2sgZmlsZSAn d3JpdGUtbG9jayAjOndhaXQ/ICNmKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxhbWJkYSAoa2V5IGVycm5vKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw cmltaXRpdmUtZXhpdCAocGsgJ2Vycm5vIGVycm5vKSkpKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgKHByaW1pdGl2ZS1leGl0IC0xKSkKKyAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkg KHByaW1pdGl2ZS1leGl0IC0yKSkpKQorICAgICAgICAgICAgICAgICAgKHBpZCAoY2xvc2UtcG9y dCBpbnB1dCkKKyAgICAgICAgICAgICAgICAgICAgICAgKGxldCAoKGZpbGUgKG9wZW4tZmlsZSB0 ZW1wLWZpbGUgIncwIikpKQorICAgICAgICAgICAgICAgICAgICAgICAgIChmY250bC1mbG9jayBm aWxlICd3cml0ZS1sb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAgICh3cml0ZSAnZ3JlZW4t bGlnaHQgb3V0cHV0KQorICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JjZS1vdXRwdXQgb3V0 cHV0KQorICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaCAod2FpdHBpZCBwaWQpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoXyAuIHN0YXR1cykKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsZXQgKChyZXN1bHQgKHN0YXR1czpleGl0LXZhbCBzdGF0dXMp KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZjbnRsLWZsb2NrIGZpbGUg J3VubG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlLXBvcnQg ZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KSkpKSkpKSkp Cgo7OzsgKGVycm5vIDExKQpleHBlY3RlZC12YWx1ZTogMTEKYWN0dWFsLXZhbHVlOiAxMQpyZXN1 bHQ6IFBBU1MKCnRlc3QtbmFtZTogYWxsLW5ldHdvcmstaW50ZXJmYWNlLW5hbWVzCmxvY2F0aW9u OiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N5c2NhbGxzLnNjbToy NjEKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImFsbC1uZXR3b3JrLWludGVyZmFjZS1uYW1l cyIKKyAgIChtYXRjaCAoYWxsLW5ldHdvcmstaW50ZXJmYWNlLW5hbWVzKQorICAgICAgICAgICgo KD8gc3RyaW5nPyBuYW1lcykgLi4xKSAobWVtYmVyICJsbyIgbmFtZXMpKSkpCmFjdHVhbC12YWx1 ZTogKGxvIGVucDBzMjUgd2xwMnMwKQpyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogbmV0d29yay1p bnRlcmZhY2UtbmFtZXMKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93 aXAvdGVzdHMvc3lzY2FsbHMuc2NtOjI2Ngpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAibmV0 d29yay1pbnRlcmZhY2UtbmFtZXMiCisgICAobWF0Y2ggKG5ldHdvcmstaW50ZXJmYWNlLW5hbWVz KQorICAgICAgICAgICgoKD8gc3RyaW5nPyBuYW1lcykgLi4xKQorICAgICAgICAgICAobHNldDw9 CisgICAgICAgICAgICAgc3RyaW5nPT8KKyAgICAgICAgICAgICBuYW1lcworICAgICAgICAgICAg IChhbGwtbmV0d29yay1pbnRlcmZhY2UtbmFtZXMpKSkpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3Vs dDogUEFTUwoKdGVzdC1uYW1lOiBuZXR3b3JrLWludGVyZmFjZS1mbGFncwpsb2NhdGlvbjogL2hv bWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zeXNjYWxscy5zY206MjcxCnNv dXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJuZXR3b3JrLWludGVyZmFjZS1mbGFncyIKKyAgIChs ZXQqICgoc29jayAoc29ja2V0IEFGX0lORVQgU09DS19TVFJFQU0gMCkpCisgICAgICAgICAgKGZs YWdzIChuZXR3b3JrLWludGVyZmFjZS1mbGFncyBzb2NrICJsbyIpKSkKKyAgICAgKGNsb3NlLXBv cnQgc29jaykKKyAgICAgKGFuZCAobm90ICh6ZXJvPyAobG9nYW5kIGZsYWdzIElGRl9MT09QQkFD SykpKQorICAgICAgICAgIChub3QgKHplcm8/IChsb2dhbmQgZmxhZ3MgSUZGX1VQKSkpKSkpCmFj dHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGxvb3BiYWNrLW5ldHdvcmst aW50ZXJmYWNlPwpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90 ZXN0cy9zeXNjYWxscy5zY206Mjc4CnNvdXJjZToKKyAodGVzdC1lcXVhbAorICAgImxvb3BiYWNr LW5ldHdvcmstaW50ZXJmYWNlPyIKKyAgIEVOT0RFVgorICAgKGFuZCAobG9vcGJhY2stbmV0d29y ay1pbnRlcmZhY2U/ICJsbyIpCisgICAgICAgIChjYXRjaCAnc3lzdGVtLWVycm9yCisgICAgICAg ICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAgICAgIChsb29wYmFjay1uZXR3b3JrLWlu dGVyZmFjZT8gIm5vbmV4aXN0ZW50IikKKyAgICAgICAgICAgICAgICAgI2YpCisgICAgICAgICAg ICAgICAobGFtYmRhIGFyZ3MgKHN5c3RlbS1lcnJvci1lcnJubyBhcmdzKSkpKSkKZXhwZWN0ZWQt dmFsdWU6IDE5CmFjdHVhbC12YWx1ZTogMTkKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHNldC1u ZXR3b3JrLWludGVyZmFjZS1mbGFncwpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3Vp eC9ndWl4X3dpcC90ZXN0cy9zeXNjYWxscy5zY206Mjg5CnNvdXJjZToKKyAodGVzdC1hc3NlcnQK KyAgICJzZXQtbmV0d29yay1pbnRlcmZhY2UtZmxhZ3MiCisgICAobGV0ICgoc29jayAoc29ja2V0 IEFGX0lORVQgU09DS19TVFJFQU0gMCkpKQorICAgICAoY2F0Y2ggJ3N5c3RlbS1lcnJvcgorICAg ICAgICAgICAgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAoc2V0LW5ldHdvcmstaW50ZXJmYWNl LWZsYWdzIHNvY2sgImxvIiBJRkZfVVApKQorICAgICAgICAgICAgKGxhbWJkYSBhcmdzCisgICAg ICAgICAgICAgIChjbG9zZS1wb3J0IHNvY2spCisgICAgICAgICAgICAgIChtZW12IChzeXN0ZW0t ZXJyb3ItZXJybm8gYXJncykKKyAgICAgICAgICAgICAgICAgICAgKGxpc3QgRVBFUk0gRUFDQ0VT KSkpKSkpCmFjdHVhbC12YWx1ZTogKDEgMTMpCnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBuZXR3 b3JrLWludGVyZmFjZS1hZGRyZXNzIGxvCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9n dWl4L2d1aXhfd2lwL3Rlc3RzL3N5c2NhbGxzLnNjbToyOTkKc291cmNlOgorICh0ZXN0LWVxdWFs CisgICAibmV0d29yay1pbnRlcmZhY2UtYWRkcmVzcyBsbyIKKyAgIChtYWtlLXNvY2tldC1hZGRy ZXNzCisgICAgIEFGX0lORVQKKyAgICAgKGluZXQtcHRvbiBBRl9JTkVUICIxMjcuMC4wLjEiKQor ICAgICAwKQorICAgKGxldCogKChzb2NrIChzb2NrZXQgQUZfSU5FVCBTT0NLX1NUUkVBTSAwKSkK KyAgICAgICAgICAoYWRkciAobmV0d29yay1pbnRlcmZhY2UtYWRkcmVzcyBzb2NrICJsbyIpKSkK KyAgICAgKGNsb3NlLXBvcnQgc29jaykKKyAgICAgYWRkcikpCmV4cGVjdGVkLXZhbHVlOiAjKDIg MjEzMDcwNjQzMyAwKQphY3R1YWwtdmFsdWU6ICMoMiAyMTMwNzA2NDMzIDApCnJlc3VsdDogUEFT UwoKdGVzdC1uYW1lOiBzZXQtbmV0d29yay1pbnRlcmZhY2UtYWRkcmVzcwpsb2NhdGlvbjogL2hv bWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9zeXNjYWxscy5zY206MzA3CnNv dXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJzZXQtbmV0d29yay1pbnRlcmZhY2UtYWRkcmVzcyIK KyAgIChsZXQgKChzb2NrIChzb2NrZXQgQUZfSU5FVCBTT0NLX1NUUkVBTSAwKSkpCisgICAgIChj YXRjaCAnc3lzdGVtLWVycm9yCisgICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAg IChzZXQtbmV0d29yay1pbnRlcmZhY2UtYWRkcmVzcworICAgICAgICAgICAgICAgIHNvY2sKKyAg ICAgICAgICAgICAgICAibm9uZXhpc3RlbnQiCisgICAgICAgICAgICAgICAgKG1ha2Utc29ja2V0 LWFkZHJlc3MKKyAgICAgICAgICAgICAgICAgIEFGX0lORVQKKyAgICAgICAgICAgICAgICAgIChp bmV0LXB0b24gQUZfSU5FVCAiMTI3LjEyLjE0LjE1IikKKyAgICAgICAgICAgICAgICAgIDApKSkK KyAgICAgICAgICAgIChsYW1iZGEgYXJncworICAgICAgICAgICAgICAoY2xvc2UtcG9ydCBzb2Nr KQorICAgICAgICAgICAgICAobWVtdiAoc3lzdGVtLWVycm9yLWVycm5vIGFyZ3MpCisgICAgICAg ICAgICAgICAgICAgIChsaXN0IEVQRVJNIEVBQ0NFUykpKSkpKQphY3R1YWwtdmFsdWU6ICgxIDEz KQpyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogbmV0d29yay1pbnRlcmZhY2VzIHJldHVybnMgb25l IG9yIG1vcmUgaW50ZXJmYWNlcwpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9n dWl4X3dpcC90ZXN0cy9zeXNjYWxscy5zY206MzIxCnNvdXJjZToKKyAodGVzdC1lcXVhbAorICAg Im5ldHdvcmstaW50ZXJmYWNlcyByZXR1cm5zIG9uZSBvciBtb3JlIGludGVyZmFjZXMiCisgICAn KCN0ICN0ICN0KQorICAgKG1hdGNoIChuZXR3b3JrLWludGVyZmFjZXMpCisgICAgICAgICAgKChp bnRlcmZhY2VzIC4uMSkKKyAgICAgICAgICAgKGxpc3QgKGV2ZXJ5IGludGVyZmFjZT8gaW50ZXJm YWNlcykKKyAgICAgICAgICAgICAgICAgKGV2ZXJ5IHN0cmluZz8gKG1hcCBpbnRlcmZhY2UtbmFt ZSBpbnRlcmZhY2VzKSkKKyAgICAgICAgICAgICAgICAgKGV2ZXJ5IChsYW1iZGEgKHNvY2thZGRy KQorICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgKHZlY3Rvcj8gc29ja2FkZHIpIChub3Qg c29ja2FkZHIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIChtYXAgaW50ZXJmYWNlLWFkZHJl c3MgaW50ZXJmYWNlcykpKSkpKQpleHBlY3RlZC12YWx1ZTogKCN0ICN0ICN0KQphY3R1YWwtdmFs dWU6ICgjdCAjdCAjdCkKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IG5ldHdvcmstaW50ZXJmYWNl cyByZXR1cm5zICJsbyIKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93 aXAvdGVzdHMvc3lzY2FsbHMuc2NtOjMzMwpzb3VyY2U6CisgKHRlc3QtZXF1YWwKKyAgICJuZXR3 b3JrLWludGVyZmFjZXMgcmV0dXJucyBcImxvXCIiCisgICAobGlzdCAjdAorICAgICAgICAgKG1h a2Utc29ja2V0LWFkZHJlc3MKKyAgICAgICAgICAgQUZfSU5FVAorICAgICAgICAgICAoaW5ldC1w dG9uIEFGX0lORVQgIjEyNy4wLjAuMSIpCisgICAgICAgICAgIDApKQorICAgKG1hdGNoIChmaWx0 ZXIKKyAgICAgICAgICAgIChsYW1iZGEgKGludGVyZmFjZSkKKyAgICAgICAgICAgICAgKHN0cmlu Zz0/ICJsbyIgKGludGVyZmFjZS1uYW1lIGludGVyZmFjZSkpKQorICAgICAgICAgICAgKG5ldHdv cmstaW50ZXJmYWNlcykpCisgICAgICAgICAgKChsb29wYmFja3MgLi4xKQorICAgICAgICAgICAo bGlzdCAoZXZlcnkgKGxhbWJkYSAobG8pCisgICAgICAgICAgICAgICAgICAgICAgICAgIChub3Qg KHplcm8/IChsb2dhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ RkZfTE9PUEJBQ0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50 ZXJmYWNlLWZsYWdzIGxvKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BiYWNrcykK KyAgICAgICAgICAgICAgICAgKG1hdGNoIChmaW5kIChsYW1iZGEgKGxvKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoPSBBRl9JTkVUCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzb2NrYWRkcjpmYW0gKGludGVyZmFjZS1hZGRyZXNzIGxvKSkpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbG9vcGJhY2tzKQorICAgICAgICAgICAgICAgICAgICAg ICAgKCNmICNmKQorICAgICAgICAgICAgICAgICAgICAgICAgKGxvIChpbnRlcmZhY2UtYWRkcmVz cyBsbykpKSkpKSkKZXhwZWN0ZWQtdmFsdWU6ICgjdCAjKDIgMjEzMDcwNjQzMyAwKSkKYWN0dWFs LXZhbHVlOiAoI3QgIygyIDIxMzA3MDY0MzMgMCkpCnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiB0 Y2dldGF0dHIgRU5PVFRZCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhf d2lwL3Rlc3RzL3N5c2NhbGxzLnNjbTozNDgKc291cmNlOgorICh0ZXN0LWVxdWFsCisgICAidGNn ZXRhdHRyIEVOT1RUWSIKKyAgIEVOT1RUWQorICAgKGNhdGNoICdzeXN0ZW0tZXJyb3IKKyAgICAg ICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAoY2FsbC13aXRoLWlucHV0LWZpbGUKKyAgICAg ICAgICAgICAgIi9kZXYvbnVsbCIKKyAgICAgICAgICAgICAgKGxhbWJkYSAocG9ydCkgKHRjZ2V0 YXR0ciAoZmlsZW5vIHBvcnQpKSkpKQorICAgICAgICAgIChjb21wb3NlIHN5c3RlbS1lcnJvci1l cnJubyBsaXN0KSkpCmV4cGVjdGVkLXZhbHVlOiAyNQphY3R1YWwtdmFsdWU6IDI1CnJlc3VsdDog UEFTUwoKdGVzdC1uYW1lOiB0Y2dldGF0dHIKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2 L2d1aXgvZ3VpeF93aXAvdGVzdHMvc3lzY2FsbHMuc2NtOjM2Mgpzb3VyY2U6CisgKHRlc3QtYXNz ZXJ0CisgICAidGNnZXRhdHRyIgorICAgKGxldCAoKHRlcm1pb3MgKHRjZ2V0YXR0ciAwKSkpCisg ICAgIChhbmQgKHRlcm1pb3M/IHRlcm1pb3MpCisgICAgICAgICAgKD4gKHRlcm1pb3MtaW5wdXQt c3BlZWQgdGVybWlvcykgMCkKKyAgICAgICAgICAoPiAodGVybWlvcy1vdXRwdXQtc3BlZWQgdGVy bWlvcykgMCkpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogdGNz ZXRhdHRyCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3Rz L3N5c2NhbGxzLnNjbTozNjgKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgInRjc2V0YXR0ciIK KyAgIChsZXQgKChmaXJzdCAodGNnZXRhdHRyIDApKSkKKyAgICAgKHRjc2V0YXR0ciAwICh0Y3Nl dGF0dHItYWN0aW9uIFRDU0FOT1cpIGZpcnN0KQorICAgICAoZXF1YWw/IGZpcnN0ICh0Y2dldGF0 dHIgMCkpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogdGVybWlu YWwtd2luZG93LXNpemUgRU5PVFRZCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4 L2d1aXhfd2lwL3Rlc3RzL3N5c2NhbGxzLnNjbTozNzMKc291cmNlOgorICh0ZXN0LWFzc2VydAor ICAgInRlcm1pbmFsLXdpbmRvdy1zaXplIEVOT1RUWSIKKyAgIChjYWxsLXdpdGgtaW5wdXQtZmls ZQorICAgICAiL2Rldi9udWxsIgorICAgICAobGFtYmRhIChwb3J0KQorICAgICAgIChjYXRjaCAn c3lzdGVtLWVycm9yCisgICAgICAgICAgICAgIChsYW1iZGEgKCkgKHRlcm1pbmFsLXdpbmRvdy1z aXplIHBvcnQpKQorICAgICAgICAgICAgICAobGFtYmRhIGFyZ3MKKyAgICAgICAgICAgICAgICAo bWVtdiAoc3lzdGVtLWVycm9yLWVycm5vIGFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgKGxp c3QgRU5PVFRZIEVJTlZBTCkpKSkpKSkKYWN0dWFsLXZhbHVlOiAoMjUgMjIpCnJlc3VsdDogUEFT UwoKdGVzdC1uYW1lOiB0ZXJtaW5hbC1jb2x1bW5zCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNo L0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3N5c2NhbGxzLnNjbTozODQKc291cmNlOgorICh0ZXN0 LWFzc2VydAorICAgInRlcm1pbmFsLWNvbHVtbnMiCisgICAoPiAodGVybWluYWwtY29sdW1ucykg MCkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHRlcm1pbmFsLWNv bHVtbnMgbm9uLWZpbGUgcG9ydApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9n dWl4X3dpcC90ZXN0cy9zeXNjYWxscy5zY206Mzg3CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAg ICJ0ZXJtaW5hbC1jb2x1bW5zIG5vbi1maWxlIHBvcnQiCisgICAoPiAodGVybWluYWwtY29sdW1u cworICAgICAgICAob3Blbi1pbnB1dC1zdHJpbmcKKyAgICAgICAgICAiSm9pbiB1cyBub3csIHNo YXJlIHRoZSBzb2Z0d2FyZSEiKSkKKyAgICAgIDApKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDog UEFTUwoKClNLSVA6IHRlc3RzL2dyZW1saW4KPT09PT09PT09PT09PT09PT09PQoKdGVzdC1uYW1l OiBlbGYtZHluYW1pYy1pbmZvLW5lZWRlZCwgZXhlY3V0YWJsZQpsb2NhdGlvbjogL2hvbWUvc2Fw aWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9ncmVtbGluLnNjbTo0NApzb3VyY2U6Cisg KHRlc3QtYXNzZXJ0CisgICAiZWxmLWR5bmFtaWMtaW5mby1uZWVkZWQsIGV4ZWN1dGFibGUiCisg ICAobGV0KiAoKGVsZiAoY2FsbC13aXRoLWlucHV0LWZpbGUgJWd1aWxlLWV4ZWN1dGFibGUgcmVh ZC1lbGYpKQorICAgICAgICAgIChkeW5pbmZvIChlbGYtZHluYW1pYy1pbmZvIGVsZikpKQorICAg ICAob3IgKG5vdCBkeW5pbmZvKQorICAgICAgICAgKGxzZXQ8PQorICAgICAgICAgICBzdHJpbmc9 PworICAgICAgICAgICAobGlzdCAoc3RyaW5nLWFwcGVuZCAibGliZ3VpbGUtIiAoZWZmZWN0aXZl LXZlcnNpb24pKQorICAgICAgICAgICAgICAgICAibGliZ2MiCisgICAgICAgICAgICAgICAgICJs aWJ1bmlzdHJpbmciCisgICAgICAgICAgICAgICAgICJsaWJmZmkiKQorICAgICAgICAgICAobWFw IChsYW1iZGEgKGxpYikKKyAgICAgICAgICAgICAgICAgIChzdHJpbmctdGFrZSBsaWIgKHN0cmlu Zy1jb250YWlucyBsaWIgIi5zbyIpKSkKKyAgICAgICAgICAgICAgICAoZWxmLWR5bmFtaWMtaW5m by1uZWVkZWQgZHluaW5mbykpKSkpKQpyZXN1bHQ6IFNLSVAKCnRlc3QtbmFtZTogZXhwYW5kLW9y aWdpbgpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9n cmVtbGluLnNjbTo1NQpzb3VyY2U6CisgKHRlc3QtZXF1YWwKKyAgICJleHBhbmQtb3JpZ2luIgor ICAgJygiT09PLy4uL2xpYiIKKyAgICAgIk9PTyIKKyAgICAgIi4uL09PTy9iYXIvT09PL2JheiIK KyAgICAgIk9SSUdJTi9mb28iKQorICAgKG1hcCAoY3V0IGV4cGFuZC1vcmlnaW4gPD4gIk9PTyIp CisgICAgICAgICcoIiRPUklHSU4vLi4vbGliIgorICAgICAgICAgICIke09SSUdJTn0iCisgICAg ICAgICAgIi4uLyR7T1JJR0lOfS9iYXIvJE9SSUdJTi9iYXoiCisgICAgICAgICAgIk9SSUdJTi9m b28iKSkpCmV4cGVjdGVkLXZhbHVlOiAoT09PLy4uL2xpYiBPT08gLi4vT09PL2Jhci9PT08vYmF6 IE9SSUdJTi9mb28pCmFjdHVhbC12YWx1ZTogKE9PTy8uLi9saWIgT09PIC4uL09PTy9iYXIvT09P L2JheiBPUklHSU4vZm9vKQpyZXN1bHQ6IFBBU1MKCgpGQUlMOiB0ZXN0cy9saW50Cj09PT09PT09 PT09PT09PT0KCnRlc3QtbmFtZTogZGVzY3JpcHRpb246IG5vdCBhIHN0cmluZwpsb2NhdGlvbjog L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbToxNDUKc291 cmNlOgorICh0ZXN0LWFzc2VydAorICAgImRlc2NyaXB0aW9uOiBub3QgYSBzdHJpbmciCisgICAo LT5ib29sCisgICAgIChzdHJpbmctY29udGFpbnMKKyAgICAgICAod2l0aC13YXJuaW5ncworICAg ICAgICAgKGxldCAoKHBrZyAoZHVtbXktcGFja2FnZSAieCIgKGRlc2NyaXB0aW9uICdmb29iYXIp KSkpCisgICAgICAgICAgIChjaGVjay1kZXNjcmlwdGlvbi1zdHlsZSBwa2cpKSkKKyAgICAgICAi aW52YWxpZCBkZXNjcmlwdGlvbiIpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRl c3QtbmFtZTogZGVzY3JpcHRpb246IG5vdCBlbXB0eQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVj aC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbToxNTMKc291cmNlOgorICh0ZXN0LWFz c2VydAorICAgImRlc2NyaXB0aW9uOiBub3QgZW1wdHkiCisgICAoLT5ib29sCisgICAgIChzdHJp bmctY29udGFpbnMKKyAgICAgICAod2l0aC13YXJuaW5ncworICAgICAgICAgKGxldCAoKHBrZyAo ZHVtbXktcGFja2FnZSAieCIgKGRlc2NyaXB0aW9uICIiKSkpKQorICAgICAgICAgICAoY2hlY2st ZGVzY3JpcHRpb24tc3R5bGUgcGtnKSkpCisgICAgICAgImRlc2NyaXB0aW9uIHNob3VsZCBub3Qg YmUgZW1wdHkiKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGRl c2NyaXB0aW9uOiB2YWxpZCBUZXhpbmZvIG1hcmt1cApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVj aC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbToxNjEKc291cmNlOgorICh0ZXN0LWFz c2VydAorICAgImRlc2NyaXB0aW9uOiB2YWxpZCBUZXhpbmZvIG1hcmt1cCIKKyAgICgtPmJvb2wK KyAgICAgKHN0cmluZy1jb250YWlucworICAgICAgICh3aXRoLXdhcm5pbmdzCisgICAgICAgICAo Y2hlY2stZGVzY3JpcHRpb24tc3R5bGUKKyAgICAgICAgICAgKGR1bW15LXBhY2thZ2UgIngiIChk ZXNjcmlwdGlvbiAiZntvb31iQHIiKSkpKQorICAgICAgICJUZXhpbmZvIG1hcmt1cCBpbiBkZXNj cmlwdGlvbiBpcyBpbnZhbGlkIikpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVz dC1uYW1lOiBkZXNjcmlwdGlvbjogZG9lcyBub3Qgc3RhcnQgd2l0aCBhbiB1cHBlci1jYXNlIGxl dHRlcgpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9s aW50LnNjbToxNjgKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImRlc2NyaXB0aW9uOiBkb2Vz IG5vdCBzdGFydCB3aXRoIGFuIHVwcGVyLWNhc2UgbGV0dGVyIgorICAgKC0+Ym9vbAorICAgICAo c3RyaW5nLWNvbnRhaW5zCisgICAgICAgKHdpdGgtd2FybmluZ3MKKyAgICAgICAgIChsZXQgKChw a2cgKGR1bW15LXBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAieCIKKyAgICAgICAgICAg ICAgICAgICAgICAoZGVzY3JpcHRpb24gImJhZCBkZXNjcmlwdGlvbi4iKSkpKQorICAgICAgICAg ICAoY2hlY2stZGVzY3JpcHRpb24tc3R5bGUgcGtnKSkpCisgICAgICAgImRlc2NyaXB0aW9uIHNo b3VsZCBzdGFydCB3aXRoIGFuIHVwcGVyLWNhc2UgbGV0dGVyIikpKQphY3R1YWwtdmFsdWU6ICN0 CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBkZXNjcmlwdGlvbjogbWF5IHN0YXJ0IHdpdGggYSBk aWdpdApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9s aW50LnNjbToxNzYKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImRlc2NyaXB0aW9uOiBtYXkg c3RhcnQgd2l0aCBhIGRpZ2l0IgorICAgKHN0cmluZy1udWxsPworICAgICAod2l0aC13YXJuaW5n cworICAgICAgIChsZXQgKChwa2cgKGR1bW15LXBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAg IngiCisgICAgICAgICAgICAgICAgICAgIChkZXNjcmlwdGlvbiAiMi1jb21wb25lbnQgbGlicmFy eS4iKSkpKQorICAgICAgICAgKGNoZWNrLWRlc2NyaXB0aW9uLXN0eWxlIHBrZykpKSkpCmFjdHVh bC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGRlc2NyaXB0aW9uOiBtYXkgc3Rh cnQgd2l0aCBsb3dlci1jYXNlIHBhY2thZ2UgbmFtZQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVj aC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbToxODMKc291cmNlOgorICh0ZXN0LWFz c2VydAorICAgImRlc2NyaXB0aW9uOiBtYXkgc3RhcnQgd2l0aCBsb3dlci1jYXNlIHBhY2thZ2Ug bmFtZSIKKyAgIChzdHJpbmctbnVsbD8KKyAgICAgKHdpdGgtd2FybmluZ3MKKyAgICAgICAobGV0 ICgocGtnIChkdW1teS1wYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICJ4IgorICAgICAgICAg ICAgICAgICAgICAoZGVzY3JpcHRpb24gInggaXMgYSBkdW1teSBwYWNrYWdlLiIpKSkpCisgICAg ICAgICAoY2hlY2stZGVzY3JpcHRpb24tc3R5bGUgcGtnKSkpKSkKYWN0dWFsLXZhbHVlOiAjdApy ZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogZGVzY3JpcHRpb246IHR3byBzcGFjZXMgYWZ0ZXIgZW5k IG9mIHNlbnRlbmNlCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lw L3Rlc3RzL2xpbnQuc2NtOjE5MApzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiZGVzY3JpcHRp b246IHR3byBzcGFjZXMgYWZ0ZXIgZW5kIG9mIHNlbnRlbmNlIgorICAgKC0+Ym9vbAorICAgICAo c3RyaW5nLWNvbnRhaW5zCisgICAgICAgKHdpdGgtd2FybmluZ3MKKyAgICAgICAgIChsZXQgKChw a2cgKGR1bW15LXBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAieCIKKyAgICAgICAgICAg ICAgICAgICAgICAoZGVzY3JpcHRpb24gIkJhZC4gUXVpdGUgYmFkLiIpKSkpCisgICAgICAgICAg IChjaGVjay1kZXNjcmlwdGlvbi1zdHlsZSBwa2cpKSkKKyAgICAgICAic2VudGVuY2VzIGluIGRl c2NyaXB0aW9uIHNob3VsZCBiZSBmb2xsb3dlZCBieSB0d28gc3BhY2VzIikpKQphY3R1YWwtdmFs dWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBkZXNjcmlwdGlvbjogZW5kLW9mLXNlbnRl bmNlIGRldGVjdGlvbiB3aXRoIGFiYnJldmlhdGlvbnMKbG9jYXRpb246IC9ob21lL3NhcGllbnRl Y2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvbGludC5zY206MTk4CnNvdXJjZToKKyAodGVzdC1h c3NlcnQKKyAgICJkZXNjcmlwdGlvbjogZW5kLW9mLXNlbnRlbmNlIGRldGVjdGlvbiB3aXRoIGFi YnJldmlhdGlvbnMiCisgICAoc3RyaW5nLW51bGw/CisgICAgICh3aXRoLXdhcm5pbmdzCisgICAg ICAgKGxldCAoKHBrZyAoZHVtbXktcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAieCIKKyAg ICAgICAgICAgICAgICAgICAgKGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgIkUu Zy4gRm9vLCBpLmUuIEJhciByZXNwLiBCYXogKGEuay5hLiBEVkQpLiIpKSkpCisgICAgICAgICAo Y2hlY2stZGVzY3JpcHRpb24tc3R5bGUgcGtnKSkpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6 IFBBU1MKCnRlc3QtbmFtZTogc3lub3BzaXM6IG5vdCBhIHN0cmluZwpsb2NhdGlvbjogL2hvbWUv c2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbToyMDYKc291cmNlOgor ICh0ZXN0LWFzc2VydAorICAgInN5bm9wc2lzOiBub3QgYSBzdHJpbmciCisgICAoLT5ib29sCisg ICAgIChzdHJpbmctY29udGFpbnMKKyAgICAgICAod2l0aC13YXJuaW5ncworICAgICAgICAgKGxl dCAoKHBrZyAoZHVtbXktcGFja2FnZSAieCIgKHN5bm9wc2lzICNmKSkpKQorICAgICAgICAgICAo Y2hlY2stc3lub3BzaXMtc3R5bGUgcGtnKSkpCisgICAgICAgImludmFsaWQgc3lub3BzaXMiKSkp CmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHN5bm9wc2lzOiBub3Qg ZW1wdHkKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMv bGludC5zY206MjE0CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJzeW5vcHNpczogbm90IGVt cHR5IgorICAgKC0+Ym9vbAorICAgICAoc3RyaW5nLWNvbnRhaW5zCisgICAgICAgKHdpdGgtd2Fy bmluZ3MKKyAgICAgICAgIChsZXQgKChwa2cgKGR1bW15LXBhY2thZ2UgIngiIChzeW5vcHNpcyAi IikpKSkKKyAgICAgICAgICAgKGNoZWNrLXN5bm9wc2lzLXN0eWxlIHBrZykpKQorICAgICAgICJz eW5vcHNpcyBzaG91bGQgbm90IGJlIGVtcHR5IikpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDog UEFTUwoKdGVzdC1uYW1lOiBzeW5vcHNpczogZG9lcyBub3Qgc3RhcnQgd2l0aCBhbiB1cHBlci1j YXNlIGxldHRlcgpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90 ZXN0cy9saW50LnNjbToyMjIKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgInN5bm9wc2lzOiBk b2VzIG5vdCBzdGFydCB3aXRoIGFuIHVwcGVyLWNhc2UgbGV0dGVyIgorICAgKC0+Ym9vbAorICAg ICAoc3RyaW5nLWNvbnRhaW5zCisgICAgICAgKHdpdGgtd2FybmluZ3MKKyAgICAgICAgIChsZXQg KChwa2cgKGR1bW15LXBhY2thZ2UgIngiIChzeW5vcHNpcyAiYmFkIHN5bm9wc2lzLiIpKSkpCisg ICAgICAgICAgIChjaGVjay1zeW5vcHNpcy1zdHlsZSBwa2cpKSkKKyAgICAgICAic3lub3BzaXMg c2hvdWxkIHN0YXJ0IHdpdGggYW4gdXBwZXItY2FzZSBsZXR0ZXIiKSkpCmFjdHVhbC12YWx1ZTog I3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHN5bm9wc2lzOiBtYXkgc3RhcnQgd2l0aCBhIGRp Z2l0CmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2xp bnQuc2NtOjIzMApzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAic3lub3BzaXM6IG1heSBzdGFy dCB3aXRoIGEgZGlnaXQiCisgICAoc3RyaW5nLW51bGw/CisgICAgICh3aXRoLXdhcm5pbmdzCisg ICAgICAgKGxldCAoKHBrZyAoZHVtbXktcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAieCIK KyAgICAgICAgICAgICAgICAgICAgKHN5bm9wc2lzICI1LWRpbWVuc2lvbmFsIGZyb2JuaWNhdG9y IikpKSkKKyAgICAgICAgIChjaGVjay1zeW5vcHNpcy1zdHlsZSBwa2cpKSkpKQphY3R1YWwtdmFs dWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBzeW5vcHNpczogZW5kcyB3aXRoIGEgcGVy aW9kCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2xp bnQuc2NtOjIzNwpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAic3lub3BzaXM6IGVuZHMgd2l0 aCBhIHBlcmlvZCIKKyAgICgtPmJvb2wKKyAgICAgKHN0cmluZy1jb250YWlucworICAgICAgICh3 aXRoLXdhcm5pbmdzCisgICAgICAgICAobGV0ICgocGtnIChkdW1teS1wYWNrYWdlICJ4IiAoc3lu b3BzaXMgIkJhZCBzeW5vcHNpcy4iKSkpKQorICAgICAgICAgICAoY2hlY2stc3lub3BzaXMtc3R5 bGUgcGtnKSkpCisgICAgICAgIm5vIHBlcmlvZCBhbGxvd2VkIGF0IHRoZSBlbmQgb2YgdGhlIHN5 bm9wc2lzIikpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBzeW5v cHNpczogZW5kcyB3aXRoICdldGMuJwpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3Vp eC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbToyNDUKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAg InN5bm9wc2lzOiBlbmRzIHdpdGggJ2V0Yy4nIgorICAgKHN0cmluZy1udWxsPworICAgICAod2l0 aC13YXJuaW5ncworICAgICAgIChsZXQgKChwa2cgKGR1bW15LXBhY2thZ2UgIngiIChzeW5vcHNp cyAiRm9vLCBiYXIsIGV0Yy4iKSkpKQorICAgICAgICAgKGNoZWNrLXN5bm9wc2lzLXN0eWxlIHBr ZykpKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHN5bm9wc2lz OiBzdGFydHMgd2l0aCAnQScKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3Vp eF93aXAvdGVzdHMvbGludC5zY206MjUxCnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJzeW5v cHNpczogc3RhcnRzIHdpdGggJ0EnIgorICAgKC0+Ym9vbAorICAgICAoc3RyaW5nLWNvbnRhaW5z CisgICAgICAgKHdpdGgtd2FybmluZ3MKKyAgICAgICAgIChsZXQgKChwa2cgKGR1bW15LXBhY2th Z2UKKyAgICAgICAgICAgICAgICAgICAgICAieCIKKyAgICAgICAgICAgICAgICAgICAgICAoc3lu b3BzaXMgIkEgYmFkIHN5bm9wXHUwMTVkaXMiKSkpKQorICAgICAgICAgICAoY2hlY2stc3lub3Bz aXMtc3R5bGUgcGtnKSkpCisgICAgICAgIm5vIGFydGljbGUgYWxsb3dlZCBhdCB0aGUgYmVnaW5u aW5nIG9mIHRoZSBzeW5vcHNpcyIpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRl c3QtbmFtZTogc3lub3BzaXM6IHN0YXJ0cyB3aXRoICdBbicKbG9jYXRpb246IC9ob21lL3NhcGll bnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvbGludC5zY206MjU5CnNvdXJjZToKKyAodGVz dC1hc3NlcnQKKyAgICJzeW5vcHNpczogc3RhcnRzIHdpdGggJ0FuJyIKKyAgICgtPmJvb2wKKyAg ICAgKHN0cmluZy1jb250YWlucworICAgICAgICh3aXRoLXdhcm5pbmdzCisgICAgICAgICAobGV0 ICgocGtnIChkdW1teS1wYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgIngiCisgICAgICAg ICAgICAgICAgICAgICAgKHN5bm9wc2lzICJBbiBhd2Z1bCBzeW5vcHNpcyIpKSkpCisgICAgICAg ICAgIChjaGVjay1zeW5vcHNpcy1zdHlsZSBwa2cpKSkKKyAgICAgICAibm8gYXJ0aWNsZSBhbGxv d2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN5bm9wc2lzIikpKQphY3R1YWwtdmFsdWU6ICN0 CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBzeW5vcHNpczogc3RhcnRzIHdpdGggJ2EnCmxvY2F0 aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2xpbnQuc2NtOjI2 Nwpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAic3lub3BzaXM6IHN0YXJ0cyB3aXRoICdhJyIK KyAgICgtPmJvb2wKKyAgICAgKHN0cmluZy1jb250YWlucworICAgICAgICh3aXRoLXdhcm5pbmdz CisgICAgICAgICAobGV0ICgocGtnIChkdW1teS1wYWNrYWdlICJ4IiAoc3lub3BzaXMgImEgYmFk IHN5bm9wc2lzIikpKSkKKyAgICAgICAgICAgKGNoZWNrLXN5bm9wc2lzLXN0eWxlIHBrZykpKQor ICAgICAgICJubyBhcnRpY2xlIGFsbG93ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3lub3Bz aXMiKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHN5bm9wc2lz OiBzdGFydHMgd2l0aCAnYW4nCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1 aXhfd2lwL3Rlc3RzL2xpbnQuc2NtOjI3NQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAic3lu b3BzaXM6IHN0YXJ0cyB3aXRoICdhbiciCisgICAoLT5ib29sCisgICAgIChzdHJpbmctY29udGFp bnMKKyAgICAgICAod2l0aC13YXJuaW5ncworICAgICAgICAgKGxldCAoKHBrZyAoZHVtbXktcGFj a2FnZQorICAgICAgICAgICAgICAgICAgICAgICJ4IgorICAgICAgICAgICAgICAgICAgICAgIChz eW5vcHNpcyAiYW4gYXdmdWwgc3lub3BzaXMiKSkpKQorICAgICAgICAgICAoY2hlY2stc3lub3Bz aXMtc3R5bGUgcGtnKSkpCisgICAgICAgIm5vIGFydGljbGUgYWxsb3dlZCBhdCB0aGUgYmVnaW5u aW5nIG9mIHRoZSBzeW5vcHNpcyIpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRl c3QtbmFtZTogc3lub3BzaXM6IHRvbyBsb25nCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rl di9ndWl4L2d1aXhfd2lwL3Rlc3RzL2xpbnQuc2NtOjI4Mwpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0 CisgICAic3lub3BzaXM6IHRvbyBsb25nIgorICAgKC0+Ym9vbAorICAgICAoc3RyaW5nLWNvbnRh aW5zCisgICAgICAgKHdpdGgtd2FybmluZ3MKKyAgICAgICAgIChsZXQgKChwa2cgKGR1bW15LXBh Y2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAieCIKKyAgICAgICAgICAgICAgICAgICAgICAo c3lub3BzaXMgKG1ha2Utc3RyaW5nIDgwICNceCkpKSkpCisgICAgICAgICAgIChjaGVjay1zeW5v cHNpcy1zdHlsZSBwa2cpKSkKKyAgICAgICAic3lub3BzaXMgc2hvdWxkIGJlIGxlc3MgdGhhbiA4 MCBjaGFyYWN0ZXJzIGxvbmciKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0 LW5hbWU6IHN5bm9wc2lzOiBzdGFydCB3aXRoIHBhY2thZ2UgbmFtZQpsb2NhdGlvbjogL2hvbWUv c2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbToyOTEKc291cmNlOgor ICh0ZXN0LWFzc2VydAorICAgInN5bm9wc2lzOiBzdGFydCB3aXRoIHBhY2thZ2UgbmFtZSIKKyAg ICgtPmJvb2wKKyAgICAgKHN0cmluZy1jb250YWlucworICAgICAgICh3aXRoLXdhcm5pbmdzCisg ICAgICAgICAobGV0ICgocGtnIChkdW1teS1wYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAg IngiCisgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgImZvbyIpCisgICAgICAgICAgICAgICAg ICAgICAgKHN5bm9wc2lzICJmb28sIGEgbmljZSBwYWNrYWdlIikpKSkKKyAgICAgICAgICAgKGNo ZWNrLXN5bm9wc2lzLXN0eWxlIHBrZykpKQorICAgICAgICJzeW5vcHNpcyBzaG91bGQgbm90IHN0 YXJ0IHdpdGggdGhlIHBhY2thZ2UgbmFtZSIpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBB U1MKCnRlc3QtbmFtZTogc3lub3BzaXM6IHN0YXJ0IHdpdGggcGFja2FnZSBuYW1lIHByZWZpeAps b2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNj bTozMDAKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgInN5bm9wc2lzOiBzdGFydCB3aXRoIHBh Y2thZ2UgbmFtZSBwcmVmaXgiCisgICAoc3RyaW5nLW51bGw/CisgICAgICh3aXRoLXdhcm5pbmdz CisgICAgICAgKGxldCAoKHBrZyAoZHVtbXktcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAi YXJiIgorICAgICAgICAgICAgICAgICAgICAoc3lub3BzaXMgIkFyYml0cmFyeSBwcmVjaXNpb24i KSkpKQorICAgICAgICAgKGNoZWNrLXN5bm9wc2lzLXN0eWxlIHBrZykpKSkpCmFjdHVhbC12YWx1 ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHN5bm9wc2lzOiBzdGFydCB3aXRoIGFiYnJl dmlhdGlvbgpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0 cy9saW50LnNjbTozMDcKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgInN5bm9wc2lzOiBzdGFy dCB3aXRoIGFiYnJldmlhdGlvbiIKKyAgIChzdHJpbmctbnVsbD8KKyAgICAgKHdpdGgtd2Fybmlu Z3MKKyAgICAgICAobGV0ICgocGtnIChkdW1teS1wYWNrYWdlCisgICAgICAgICAgICAgICAgICAg ICJ1dWNwIgorICAgICAgICAgICAgICAgICAgICAoc3lub3BzaXMgIlVVQ1AgaW1wbGVtZW50YXRp b24iKQorICAgICAgICAgICAgICAgICAgICAoZGVzY3JpcHRpb24gIkltYWdpbmUgdGhpcyBpcyBU YXlsb3IgVVVDUC4iKSkpKQorICAgICAgICAgKGNoZWNrLXN5bm9wc2lzLXN0eWxlIHBrZykpKSkp CmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGlucHV0czogcGtnLWNv bmZpZyBpcyBwcm9iYWJseSBhIG5hdGl2ZSBpbnB1dApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVj aC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbTozMTYKc291cmNlOgorICh0ZXN0LWFz c2VydAorICAgImlucHV0czogcGtnLWNvbmZpZyBpcyBwcm9iYWJseSBhIG5hdGl2ZSBpbnB1dCIK KyAgICgtPmJvb2wKKyAgICAgKHN0cmluZy1jb250YWlucworICAgICAgICh3aXRoLXdhcm5pbmdz CisgICAgICAgICAobGV0ICgocGtnIChkdW1teS1wYWNrYWdlCisgICAgICAgICAgICAgICAgICAg ICAgIngiCisgICAgICAgICAgICAgICAgICAgICAgKGlucHV0cyBgKCgicGtnLWNvbmZpZyIgLHBr Zy1jb25maWcpKSkpKSkKKyAgICAgICAgICAgKGNoZWNrLWlucHV0cy1zaG91bGQtYmUtbmF0aXZl IHBrZykpKQorICAgICAgICIncGtnLWNvbmZpZycgc2hvdWxkIHByb2JhYmx5IGJlIGEgbmF0aXZl IGlucHV0IikpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBpbnB1 dHM6IGdsaWI6YmluIGlzIHByb2JhYmx5IGEgbmF0aXZlIGlucHV0CmxvY2F0aW9uOiAvaG9tZS9z YXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2xpbnQuc2NtOjMyNQpzb3VyY2U6Cisg KHRlc3QtYXNzZXJ0CisgICAiaW5wdXRzOiBnbGliOmJpbiBpcyBwcm9iYWJseSBhIG5hdGl2ZSBp bnB1dCIKKyAgICgtPmJvb2wKKyAgICAgKHN0cmluZy1jb250YWlucworICAgICAgICh3aXRoLXdh cm5pbmdzCisgICAgICAgICAobGV0ICgocGtnIChkdW1teS1wYWNrYWdlCisgICAgICAgICAgICAg ICAgICAgICAgIngiCisgICAgICAgICAgICAgICAgICAgICAgKGlucHV0cyBgKCgiZ2xpYiIgLGds aWIgImJpbiIpKSkpKSkKKyAgICAgICAgICAgKGNoZWNrLWlucHV0cy1zaG91bGQtYmUtbmF0aXZl IHBrZykpKQorICAgICAgICInZ2xpYjpiaW4nIHNob3VsZCBwcm9iYWJseSBiZSBhIG5hdGl2ZSBp bnB1dCIpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogcGF0Y2hl czogZmlsZSBuYW1lcwpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dp cC90ZXN0cy9saW50LnNjbTozMzQKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgInBhdGNoZXM6 IGZpbGUgbmFtZXMiCisgICAoLT5ib29sCisgICAgIChzdHJpbmctY29udGFpbnMKKyAgICAgICAo d2l0aC13YXJuaW5ncworICAgICAgICAgKGxldCAoKHBrZyAoZHVtbXktcGFja2FnZQorICAgICAg ICAgICAgICAgICAgICAgICJ4IgorICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UKKyAgICAg ICAgICAgICAgICAgICAgICAgIChkdW1teS1vcmlnaW4KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgKHBhdGNoZXMgKGxpc3QgIi9wYXRoL3RvL3kucGF0Y2giKSkpKSkpKQorICAgICAgICAgICAo Y2hlY2stcGF0Y2gtZmlsZS1uYW1lcyBwa2cpKSkKKyAgICAgICAiZmlsZSBuYW1lcyBvZiBwYXRj aGVzIHNob3VsZCBzdGFydCB3aXRoIHRoZSBwYWNrYWdlIG5hbWUiKSkpCmFjdHVhbC12YWx1ZTog I3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHBhdGNoZXM6IG5vdCBmb3VuZApsb2NhdGlvbjog L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbTozNDUKc291 cmNlOgorICh0ZXN0LWFzc2VydAorICAgInBhdGNoZXM6IG5vdCBmb3VuZCIKKyAgICgtPmJvb2wK KyAgICAgKHN0cmluZy1jb250YWlucworICAgICAgICh3aXRoLXdhcm5pbmdzCisgICAgICAgICAo bGV0ICgocGtnIChkdW1teS1wYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgIngiCisgICAg ICAgICAgICAgICAgICAgICAgKHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgKGR1bW15 LW9yaWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2hlcworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsaXN0IChzZWFyY2gtcGF0Y2gKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJ0aGlzLXBhdGNoLWRvZXMtbm90LWV4aXN0ISIpKSkpKSkpKQorICAg ICAgICAgICAoY2hlY2stcGF0Y2gtZmlsZS1uYW1lcyBwa2cpKSkKKyAgICAgICAicGF0Y2ggbm90 IGZvdW5kIikpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBkZXJp dmF0aW9uOiBpbnZhbGlkIGFyZ3VtZW50cwpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYv Z3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbTozNTcKc291cmNlOgorICh0ZXN0LWFzc2VydAor ICAgImRlcml2YXRpb246IGludmFsaWQgYXJndW1lbnRzIgorICAgKC0+Ym9vbAorICAgICAoc3Ry aW5nLWNvbnRhaW5zCisgICAgICAgKHdpdGgtd2FybmluZ3MKKyAgICAgICAgIChsZXQgKChwa2cg KGR1bW15LXBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAieCIKKyAgICAgICAgICAgICAg ICAgICAgICAoYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAnKCM6aW1wb3J0ZWQt bW9kdWxlcyAoaW52YWxpZC1tb2R1bGUpKSkpKSkKKyAgICAgICAgICAgKGNoZWNrLWRlcml2YXRp b24gcGtnKSkpCisgICAgICAgImZhaWxlZCB0byBjcmVhdGUgZGVyaXZhdGlvbiIpKSkKYWN0dWFs LXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogbGljZW5zZTogaW52YWxpZCBsaWNl bnNlCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2xp bnQuc2NtOjM2Nwpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAibGljZW5zZTogaW52YWxpZCBs aWNlbnNlIgorICAgKHN0cmluZy1jb250YWlucworICAgICAod2l0aC13YXJuaW5ncworICAgICAg IChjaGVjay1saWNlbnNlIChkdW1teS1wYWNrYWdlICJ4IiAobGljZW5zZSAjZikpKSkKKyAgICAg ImludmFsaWQgbGljZW5zZSIpKQphY3R1YWwtdmFsdWU6IDYzCnJlc3VsdDogUEFTUwoKdGVzdC1u YW1lOiBob21lLXBhZ2U6IHdyb25nIGhvbWUtcGFnZQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVj aC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbTozNzMKc291cmNlOgorICh0ZXN0LWFz c2VydAorICAgImhvbWUtcGFnZTogd3JvbmcgaG9tZS1wYWdlIgorICAgKC0+Ym9vbAorICAgICAo c3RyaW5nLWNvbnRhaW5zCisgICAgICAgKHdpdGgtd2FybmluZ3MKKyAgICAgICAgIChsZXQgKChw a2cgKHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAoaW5oZXJpdCAoZHVtbXktcGFja2Fn ZSAieCIpKQorICAgICAgICAgICAgICAgICAgICAgIChob21lLXBhZ2UgI2YpKSkpCisgICAgICAg ICAgIChjaGVjay1ob21lLXBhZ2UgcGtnKSkpCisgICAgICAgImludmFsaWQiKSkpCmFjdHVhbC12 YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGhvbWUtcGFnZTogaW52YWxpZCBVUkkK bG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvbGludC5z Y206MzgzCnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJob21lLXBhZ2U6IGludmFsaWQgVVJJ IgorICAgKC0+Ym9vbAorICAgICAoc3RyaW5nLWNvbnRhaW5zCisgICAgICAgKHdpdGgtd2Fybmlu Z3MKKyAgICAgICAgIChsZXQgKChwa2cgKHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAo aW5oZXJpdCAoZHVtbXktcGFja2FnZSAieCIpKQorICAgICAgICAgICAgICAgICAgICAgIChob21l LXBhZ2UgImZvb2JhciIpKSkpCisgICAgICAgICAgIChjaGVjay1ob21lLXBhZ2UgcGtnKSkpCisg ICAgICAgImludmFsaWQgaG9tZSBwYWdlIFVSTCIpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6 IFBBU1MKCnRlc3QtbmFtZTogaG9tZS1wYWdlOiBob3N0IG5vdCBmb3VuZApsb2NhdGlvbjogL2hv bWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbTozOTMKc291cmNl OgorICh0ZXN0LWFzc2VydAorICAgImhvbWUtcGFnZTogaG9zdCBub3QgZm91bmQiCisgICAoLT5i b29sCisgICAgIChzdHJpbmctY29udGFpbnMKKyAgICAgICAod2l0aC13YXJuaW5ncworICAgICAg ICAgKGxldCAoKHBrZyAocGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgIChpbmhlcml0IChk dW1teS1wYWNrYWdlICJ4IikpCisgICAgICAgICAgICAgICAgICAgICAgKGhvbWUtcGFnZSAiaHR0 cDovL2RvZXMtbm90LWV4aXN0IikpKSkKKyAgICAgICAgICAgKGNoZWNrLWhvbWUtcGFnZSBwa2cp KSkKKyAgICAgICAiZG9tYWluIG5vdCBmb3VuZCIpKSkKYWN0dWFsLXZhbHVlOiAjZgpyZXN1bHQ6 IEZBSUwKCnRlc3QtbmFtZTogaG9tZS1wYWdlOiBDb25uZWN0aW9uIHJlZnVzZWQKbG9jYXRpb246 IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvbGludC5zY206NDA0CnNv dXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJob21lLXBhZ2U6IENvbm5lY3Rpb24gcmVmdXNlZCIK KyAgICgtPmJvb2wKKyAgICAgKHN0cmluZy1jb250YWlucworICAgICAgICh3aXRoLXdhcm5pbmdz CisgICAgICAgICAobGV0ICgocGtnIChwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgKGlu aGVyaXQgKGR1bW15LXBhY2thZ2UgIngiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoaG9tZS1w YWdlICVsb2NhbC11cmwpKSkpCisgICAgICAgICAgIChjaGVjay1ob21lLXBhZ2UgcGtnKSkpCisg ICAgICAgIkNvbm5lY3Rpb24gcmVmdXNlZCIpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBB U1MKCnRlc3QtbmFtZTogaG9tZS1wYWdlOiAyMDAKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gv RGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvbGludC5zY206NDE1CnNvdXJjZToKKyAodGVzdC1lcXVh bAorICAgImhvbWUtcGFnZTogMjAwIgorICAgIiIKKyAgICh3aXRoLXdhcm5pbmdzCisgICAgICh3 aXRoLWh0dHAtc2VydmVyCisgICAgICAgMjAwCisgICAgICAgJWxvbmctc3RyaW5nCisgICAgICAg KGxldCAoKHBrZyAocGFja2FnZQorICAgICAgICAgICAgICAgICAgICAoaW5oZXJpdCAoZHVtbXkt cGFja2FnZSAieCIpKQorICAgICAgICAgICAgICAgICAgICAoaG9tZS1wYWdlICVsb2NhbC11cmwp KSkpCisgICAgICAgICAoY2hlY2staG9tZS1wYWdlIHBrZykpKSkpCmV4cGVjdGVkLXZhbHVlOiAK YWN0dWFsLXZhbHVlOiAKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGhvbWUtcGFnZTogMjAwIGJ1 dCBzaG9ydCBsZW5ndGgKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93 aXAvdGVzdHMvbGludC5zY206NDI1CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJob21lLXBh Z2U6IDIwMCBidXQgc2hvcnQgbGVuZ3RoIgorICAgKC0+Ym9vbAorICAgICAoc3RyaW5nLWNvbnRh aW5zCisgICAgICAgKHdpdGgtd2FybmluZ3MKKyAgICAgICAgICh3aXRoLWh0dHAtc2VydmVyCisg ICAgICAgICAgIDIwMAorICAgICAgICAgICAiVGhpcyBpcyB0b28gc21hbGwuIgorICAgICAgICAg ICAobGV0ICgocGtnIChwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAoaW5oZXJpdCAo ZHVtbXktcGFja2FnZSAieCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgKGhvbWUtcGFnZSAl bG9jYWwtdXJsKSkpKQorICAgICAgICAgICAgIChjaGVjay1ob21lLXBhZ2UgcGtnKSkpKQorICAg ICAgICJzdXNwaWNpb3VzbHkgc21hbGwiKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNT Cgp0ZXN0LW5hbWU6IGhvbWUtcGFnZTogNDA0CmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rl di9ndWl4L2d1aXhfd2lwL3Rlc3RzL2xpbnQuc2NtOjQzNwpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0 CisgICAiaG9tZS1wYWdlOiA0MDQiCisgICAoLT5ib29sCisgICAgIChzdHJpbmctY29udGFpbnMK KyAgICAgICAod2l0aC13YXJuaW5ncworICAgICAgICAgKHdpdGgtaHR0cC1zZXJ2ZXIKKyAgICAg ICAgICAgNDA0CisgICAgICAgICAgICVsb25nLXN0cmluZworICAgICAgICAgICAobGV0ICgocGtn IChwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAoaW5oZXJpdCAoZHVtbXktcGFja2Fn ZSAieCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgKGhvbWUtcGFnZSAlbG9jYWwtdXJsKSkp KQorICAgICAgICAgICAgIChjaGVjay1ob21lLXBhZ2UgcGtnKSkpKQorICAgICAgICJub3QgcmVh Y2hhYmxlOiA0MDQiKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6 IHNvdXJjZS1maWxlLW5hbWUKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3Vp eF93aXAvdGVzdHMvbGludC5zY206NDQ4CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJzb3Vy Y2UtZmlsZS1uYW1lIgorICAgKC0+Ym9vbAorICAgICAoc3RyaW5nLWNvbnRhaW5zCisgICAgICAg KHdpdGgtd2FybmluZ3MKKyAgICAgICAgIChsZXQgKChwa2cgKGR1bW15LXBhY2thZ2UKKyAgICAg ICAgICAgICAgICAgICAgICAieCIKKyAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiAiMy4y LjEiKQorICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAg ICAgIChvcmlnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZCB1cmwtZmV0Y2gp CisgICAgICAgICAgICAgICAgICAgICAgICAgICh1cmkgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20v My4yLjEudGFyLmd6IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNoYTI1NiAlbnVsbC1z aGEyNTYpKSkpKSkKKyAgICAgICAgICAgKGNoZWNrLXNvdXJjZS1maWxlLW5hbWUgcGtnKSkpCisg ICAgICAgImZpbGUgbmFtZSBzaG91bGQgY29udGFpbiB0aGUgcGFja2FnZSBuYW1lIikpKQphY3R1 YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBzb3VyY2UtZmlsZS1uYW1lOiB2 IHByZWZpeApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0 cy9saW50LnNjbTo0NjIKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgInNvdXJjZS1maWxlLW5h bWU6IHYgcHJlZml4IgorICAgKC0+Ym9vbAorICAgICAoc3RyaW5nLWNvbnRhaW5zCisgICAgICAg KHdpdGgtd2FybmluZ3MKKyAgICAgICAgIChsZXQgKChwa2cgKGR1bW15LXBhY2thZ2UKKyAgICAg ICAgICAgICAgICAgICAgICAieCIKKyAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiAiMy4y LjEiKQorICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAg ICAgIChvcmlnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZCB1cmwtZmV0Y2gp CisgICAgICAgICAgICAgICAgICAgICAgICAgICh1cmkgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20v djMuMi4xLnRhci5neiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzaGEyNTYgJW51bGwt c2hhMjU2KSkpKSkpCisgICAgICAgICAgIChjaGVjay1zb3VyY2UtZmlsZS1uYW1lIHBrZykpKQor ICAgICAgICJmaWxlIG5hbWUgc2hvdWxkIGNvbnRhaW4gdGhlIHBhY2thZ2UgbmFtZSIpKSkKYWN0 dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogc291cmNlLWZpbGUtbmFtZTog YmFkIGNoZWNrb3V0CmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lw L3Rlc3RzL2xpbnQuc2NtOjQ3Ngpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAic291cmNlLWZp bGUtbmFtZTogYmFkIGNoZWNrb3V0IgorICAgKC0+Ym9vbAorICAgICAoc3RyaW5nLWNvbnRhaW5z CisgICAgICAgKHdpdGgtd2FybmluZ3MKKyAgICAgICAgIChsZXQgKChwa2cgKGR1bW15LXBhY2th Z2UKKyAgICAgICAgICAgICAgICAgICAgICAieCIKKyAgICAgICAgICAgICAgICAgICAgICAodmVy c2lvbiAiMy4yLjEiKQorICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UKKyAgICAgICAgICAg ICAgICAgICAgICAgIChvcmlnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZCBn aXQtZmV0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1cmkgKGdpdC1yZWZlcmVuY2UK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cmwgImh0dHA6Ly93d3cuZXhhbXBs ZS5jb20veC5naXQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1pdCAi MCIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNoYTI1NiAlbnVsbC1zaGEyNTYpKSkp KSkKKyAgICAgICAgICAgKGNoZWNrLXNvdXJjZS1maWxlLW5hbWUgcGtnKSkpCisgICAgICAgImZp bGUgbmFtZSBzaG91bGQgY29udGFpbiB0aGUgcGFja2FnZSBuYW1lIikpKQphY3R1YWwtdmFsdWU6 ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBzb3VyY2UtZmlsZS1uYW1lOiBnb29kIGNoZWNr b3V0CmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2xp bnQuc2NtOjQ5Mgpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAic291cmNlLWZpbGUtbmFtZTog Z29vZCBjaGVja291dCIKKyAgIChub3QgKC0+Ym9vbAorICAgICAgICAgIChzdHJpbmctY29udGFp bnMKKyAgICAgICAgICAgICh3aXRoLXdhcm5pbmdzCisgICAgICAgICAgICAgIChsZXQgKChwa2cg KGR1bW15LXBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4IgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHZlcnNpb24gIjMuMi4xIikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yaWdpbgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXRob2QgZ2l0LWZldGNoKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICh1cmkgKGdpdC1yZWZlcmVuY2UKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHVybCAiaHR0cDovL2dpdC5leGFtcGxlLmNvbS94Lmdp dCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXQgIjAiKSkp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUtbmFtZSAoc3RyaW5nLWFwcGVu ZCAieC0iIHZlcnNpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaGEyNTYg JW51bGwtc2hhMjU2KSkpKSkpCisgICAgICAgICAgICAgICAgKGNoZWNrLXNvdXJjZS1maWxlLW5h bWUgcGtnKSkpCisgICAgICAgICAgICAiZmlsZSBuYW1lIHNob3VsZCBjb250YWluIHRoZSBwYWNr YWdlIG5hbWUiKSkpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBz b3VyY2UtZmlsZS1uYW1lOiB2YWxpZApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3Vp eC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbTo1MTAKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAg InNvdXJjZS1maWxlLW5hbWU6IHZhbGlkIgorICAgKG5vdCAoLT5ib29sCisgICAgICAgICAgKHN0 cmluZy1jb250YWlucworICAgICAgICAgICAgKHdpdGgtd2FybmluZ3MKKyAgICAgICAgICAgICAg KGxldCAoKHBrZyAoZHVtbXktcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIngi CisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiAiMy4yLjEiKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo b3JpZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZCB1cmwtZmV0Y2gp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVyaSAiaHR0cDovL3d3dy5leGFtcGxl LmNvbS94LTMuMi4xLnRhci5neiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNo YTI1NiAlbnVsbC1zaGEyNTYpKSkpKSkKKyAgICAgICAgICAgICAgICAoY2hlY2stc291cmNlLWZp bGUtbmFtZSBwa2cpKSkKKyAgICAgICAgICAgICJmaWxlIG5hbWUgc2hvdWxkIGNvbnRhaW4gdGhl IHBhY2thZ2UgbmFtZSIpKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5h bWU6IHNvdXJjZTogMjAwCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhf d2lwL3Rlc3RzL2xpbnQuc2NtOjUyNgpzb3VyY2U6CisgKHRlc3QtZXF1YWwKKyAgICJzb3VyY2U6 IDIwMCIKKyAgICIiCisgICAod2l0aC13YXJuaW5ncworICAgICAod2l0aC1odHRwLXNlcnZlcgor ICAgICAgIDIwMAorICAgICAgICVsb25nLXN0cmluZworICAgICAgIChsZXQgKChwa2cgKHBhY2th Z2UKKyAgICAgICAgICAgICAgICAgICAgKGluaGVyaXQgKGR1bW15LXBhY2thZ2UgIngiKSkKKyAg ICAgICAgICAgICAgICAgICAgKHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgIChvcmlnaW4K KyAgICAgICAgICAgICAgICAgICAgICAgIChtZXRob2QgdXJsLWZldGNoKQorICAgICAgICAgICAg ICAgICAgICAgICAgKHVyaSAlbG9jYWwtdXJsKQorICAgICAgICAgICAgICAgICAgICAgICAgKHNo YTI1NiAlbnVsbC1zaGEyNTYpKSkpKSkKKyAgICAgICAgIChjaGVjay1zb3VyY2UgcGtnKSkpKSkK ZXhwZWN0ZWQtdmFsdWU6IAphY3R1YWwtdmFsdWU6IApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTog c291cmNlOiAyMDAgYnV0IHNob3J0IGxlbmd0aApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9E ZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbTo1MzkKc291cmNlOgorICh0ZXN0LWFzc2Vy dAorICAgInNvdXJjZTogMjAwIGJ1dCBzaG9ydCBsZW5ndGgiCisgICAoLT5ib29sCisgICAgIChz dHJpbmctY29udGFpbnMKKyAgICAgICAod2l0aC13YXJuaW5ncworICAgICAgICAgKHdpdGgtaHR0 cC1zZXJ2ZXIKKyAgICAgICAgICAgMjAwCisgICAgICAgICAgICJUaGlzIGlzIHRvbyBzbWFsbC4i CisgICAgICAgICAgIChsZXQgKChwa2cgKHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAg IChpbmhlcml0IChkdW1teS1wYWNrYWdlICJ4IikpCisgICAgICAgICAgICAgICAgICAgICAgICAo c291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChvcmlnaW4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobWV0aG9kIHVybC1mZXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAodXJpICVsb2NhbC11cmwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNoYTI1 NiAlbnVsbC1zaGEyNTYpKSkpKSkKKyAgICAgICAgICAgICAoY2hlY2stc291cmNlIHBrZykpKSkK KyAgICAgICAic3VzcGljaW91c2x5IHNtYWxsIikpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDog UEFTUwoKdGVzdC1uYW1lOiBzb3VyY2U6IDQwNApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9E ZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbTo1NTQKc291cmNlOgorICh0ZXN0LWFzc2Vy dAorICAgInNvdXJjZTogNDA0IgorICAgKC0+Ym9vbAorICAgICAoc3RyaW5nLWNvbnRhaW5zCisg ICAgICAgKHdpdGgtd2FybmluZ3MKKyAgICAgICAgICh3aXRoLWh0dHAtc2VydmVyCisgICAgICAg ICAgIDQwNAorICAgICAgICAgICAlbG9uZy1zdHJpbmcKKyAgICAgICAgICAgKGxldCAoKHBrZyAo cGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgKGluaGVyaXQgKGR1bW15LXBhY2thZ2Ug IngiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgKG9yaWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXRob2QgdXJs LWZldGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cmkgJWxvY2FsLXVybCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2hhMjU2ICVudWxsLXNoYTI1NikpKSkpKQorICAg ICAgICAgICAgIChjaGVjay1zb3VyY2UgcGtnKSkpKQorICAgICAgICJub3QgcmVhY2hhYmxlOiA0 MDQiKSkpCmFjdHVhbC12YWx1ZTogI3QKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGN2ZQpsb2Nh dGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbTo1 NjgKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImN2ZSIKKyAgIChtb2NrICgoZ3VpeCBzY3Jp cHRzIGxpbnQpCisgICAgICAgICAgcGFja2FnZS12dWxuZXJhYmlsaXRpZXMKKyAgICAgICAgICAo Y29uc3QgJygpKSkKKyAgICAgICAgIChzdHJpbmctbnVsbD8KKyAgICAgICAgICAgKHdpdGgtd2Fy bmluZ3MKKyAgICAgICAgICAgICAoY2hlY2stdnVsbmVyYWJpbGl0aWVzIChkdW1teS1wYWNrYWdl ICJ4IikpKSkpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBjdmU6 IG9uZSB2dWxuZXJhYmlsaXR5CmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1 aXhfd2lwL3Rlc3RzL2xpbnQuc2NtOjU3Mwpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiY3Zl OiBvbmUgdnVsbmVyYWJpbGl0eSIKKyAgIChtb2NrICgoZ3VpeCBzY3JpcHRzIGxpbnQpCisgICAg ICAgICAgcGFja2FnZS12dWxuZXJhYmlsaXRpZXMKKyAgICAgICAgICAobGFtYmRhIChwYWNrYWdl KQorICAgICAgICAgICAgKGxpc3QgKG1ha2Utc3RydWN0CisgICAgICAgICAgICAgICAgICAgIChA QCAoZ3VpeCBjdmUpIDx2dWxuZXJhYmlsaXR5PikKKyAgICAgICAgICAgICAgICAgICAgMAorICAg ICAgICAgICAgICAgICAgICAiQ1ZFLTIwMTUtMTIzNCIKKyAgICAgICAgICAgICAgICAgICAgKGxp c3QgKGNvbnMgKHBhY2thZ2UtbmFtZSBwYWNrYWdlKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAocGFja2FnZS12ZXJzaW9uIHBhY2thZ2UpKSkpKSkpCisgICAgICAgICAoc3RyaW5n LWNvbnRhaW5zCisgICAgICAgICAgICh3aXRoLXdhcm5pbmdzCisgICAgICAgICAgICAgKGNoZWNr LXZ1bG5lcmFiaWxpdGllcworICAgICAgICAgICAgICAgKGR1bW15LXBhY2thZ2UgInBpIiAodmVy c2lvbiAiMy4xNCIpKSkpCisgICAgICAgICAgICJ2dWxuZXJhYmxlIHRvIENWRS0yMDE1LTEyMzQi KSkpCmFjdHVhbC12YWx1ZTogNzYKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGN2ZTogb25lIHBh dGNoZWQgdnVsbmVyYWJpbGl0eQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9n dWl4X3dpcC90ZXN0cy9saW50LnNjbTo1ODUKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImN2 ZTogb25lIHBhdGNoZWQgdnVsbmVyYWJpbGl0eSIKKyAgIChtb2NrICgoZ3VpeCBzY3JpcHRzIGxp bnQpCisgICAgICAgICAgcGFja2FnZS12dWxuZXJhYmlsaXRpZXMKKyAgICAgICAgICAobGFtYmRh IChwYWNrYWdlKQorICAgICAgICAgICAgKGxpc3QgKG1ha2Utc3RydWN0CisgICAgICAgICAgICAg ICAgICAgIChAQCAoZ3VpeCBjdmUpIDx2dWxuZXJhYmlsaXR5PikKKyAgICAgICAgICAgICAgICAg ICAgMAorICAgICAgICAgICAgICAgICAgICAiQ1ZFLTIwMTUtMTIzNCIKKyAgICAgICAgICAgICAg ICAgICAgKGxpc3QgKGNvbnMgKHBhY2thZ2UtbmFtZSBwYWNrYWdlKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocGFja2FnZS12ZXJzaW9uIHBhY2thZ2UpKSkpKSkpCisgICAgICAg ICAoc3RyaW5nLW51bGw/CisgICAgICAgICAgICh3aXRoLXdhcm5pbmdzCisgICAgICAgICAgICAg KGNoZWNrLXZ1bG5lcmFiaWxpdGllcworICAgICAgICAgICAgICAgKGR1bW15LXBhY2thZ2UKKyAg ICAgICAgICAgICAgICAgInBpIgorICAgICAgICAgICAgICAgICAodmVyc2lvbiAiMy4xNCIpCisg ICAgICAgICAgICAgICAgIChzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAoZHVtbXktb3JpZ2lu CisgICAgICAgICAgICAgICAgICAgICAocGF0Y2hlcyAobGlzdCAiL2EvYi9waS1DVkUtMjAxNS0x MjM0LnBhdGNoIikpKSkpKSkpKSkKYWN0dWFsLXZhbHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3Qt bmFtZTogY3ZlOiBwYXRjaGVkIHZ1bG5lcmFiaWxpdHkgaW4gcmVwbGFjZW1lbnQKbG9jYXRpb246 IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvbGludC5zY206NjAyCnNv dXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJjdmU6IHBhdGNoZWQgdnVsbmVyYWJpbGl0eSBpbiBy ZXBsYWNlbWVudCIKKyAgIChtb2NrICgoZ3VpeCBzY3JpcHRzIGxpbnQpCisgICAgICAgICAgcGFj a2FnZS12dWxuZXJhYmlsaXRpZXMKKyAgICAgICAgICAobGFtYmRhIChwYWNrYWdlKQorICAgICAg ICAgICAgKGxpc3QgKG1ha2Utc3RydWN0CisgICAgICAgICAgICAgICAgICAgIChAQCAoZ3VpeCBj dmUpIDx2dWxuZXJhYmlsaXR5PikKKyAgICAgICAgICAgICAgICAgICAgMAorICAgICAgICAgICAg ICAgICAgICAiQ1ZFLTIwMTUtMTIzNCIKKyAgICAgICAgICAgICAgICAgICAgKGxpc3QgKGNvbnMg KHBhY2thZ2UtbmFtZSBwYWNrYWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo cGFja2FnZS12ZXJzaW9uIHBhY2thZ2UpKSkpKSkpCisgICAgICAgICAoc3RyaW5nLW51bGw/Cisg ICAgICAgICAgICh3aXRoLXdhcm5pbmdzCisgICAgICAgICAgICAgKGNoZWNrLXZ1bG5lcmFiaWxp dGllcworICAgICAgICAgICAgICAgKGR1bW15LXBhY2thZ2UKKyAgICAgICAgICAgICAgICAgInBp IgorICAgICAgICAgICAgICAgICAodmVyc2lvbiAiMy4xNCIpCisgICAgICAgICAgICAgICAgIChz b3VyY2UgKGR1bW15LW9yaWdpbikpCisgICAgICAgICAgICAgICAgIChyZXBsYWNlbWVudAorICAg ICAgICAgICAgICAgICAgIChkdW1teS1wYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAicGki CisgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiAiMy4xNCIpCisgICAgICAgICAgICAgICAg ICAgICAoc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgIChkdW1teS1vcmlnaW4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAocGF0Y2hlcworICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxpc3QgIi9hL2IvcGktQ1ZFLTIwMTUtMTIzNC5wYXRjaCIpKSkpKSkpKSkpKSkKYWN0dWFsLXZh bHVlOiAjdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogZm9ybWF0dGluZzogbG9uZWx5IHBhcmVu dGhlc2VzCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3Rz L2xpbnQuc2NtOjYyMQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiZm9ybWF0dGluZzogbG9u ZWx5IHBhcmVudGhlc2VzIgorICAgKHN0cmluZy1jb250YWlucworICAgICAod2l0aC13YXJuaW5n cworICAgICAgIChjaGVjay1mb3JtYXR0aW5nCisgICAgICAgICAoZHVtbXktcGFja2FnZSAidWds eSBhcyBoZWxsISIpKSkKKyAgICAgImxvbmVseSIpKQphY3R1YWwtdmFsdWU6IDEwMQpyZXN1bHQ6 IFBBU1MKCnRlc3QtbmFtZTogZm9ybWF0dGluZzogdGFidWxhdGlvbgpsb2NhdGlvbjogL2hvbWUv c2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9saW50LnNjbTo2MzEKc291cmNlOgor ICh0ZXN0LWFzc2VydAorICAgImZvcm1hdHRpbmc6IHRhYnVsYXRpb24iCisgICAoc3RyaW5nLWNv bnRhaW5zCisgICAgICh3aXRoLXdhcm5pbmdzCisgICAgICAgKGNoZWNrLWZvcm1hdHRpbmcKKyAg ICAgICAgIChkdW1teS1wYWNrYWdlICJsZWF2ZSB0aGUgdGFiIGhlcmU6XHQiKSkpCisgICAgICJ0 YWJ1bGF0aW9uIikpCmFjdHVhbC12YWx1ZTogODIKcmVzdWx0OiBQQVNTCgp0ZXN0LW5hbWU6IGZv cm1hdHRpbmc6IHRyYWlsaW5nIHdoaXRlIHNwYWNlCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNo L0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2xpbnQuc2NtOjYzNwpzb3VyY2U6CisgKHRlc3QtYXNz ZXJ0CisgICAiZm9ybWF0dGluZzogdHJhaWxpbmcgd2hpdGUgc3BhY2UiCisgICAoc3RyaW5nLWNv bnRhaW5zCisgICAgICh3aXRoLXdhcm5pbmdzCisgICAgICAgKGNoZWNrLWZvcm1hdHRpbmcgKGR1 bW15LXBhY2thZ2UgIngiKSkpCisgICAgICJ0cmFpbGluZyB3aGl0ZSBzcGFjZSIpKQphY3R1YWwt dmFsdWU6IDYzCnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBmb3JtYXR0aW5nOiBsb25nIGxpbmUK bG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvbGludC5z Y206NjQ0CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJmb3JtYXR0aW5nOiBsb25nIGxpbmUi CisgICAoc3RyaW5nLWNvbnRhaW5zCisgICAgICh3aXRoLXdhcm5pbmdzCisgICAgICAgKGNoZWNr LWZvcm1hdHRpbmcgKGR1bW15LXBhY2thZ2UgIngiKSkpCisgICAgICJ0b28gbG9uZyIpKQphY3R1 YWwtdmFsdWU6IDc4CnJlc3VsdDogUEFTUwoKdGVzdC1uYW1lOiBmb3JtYXR0aW5nOiBhbHJpZ2h0 CmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2xpbnQu c2NtOjY1Mgpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiZm9ybWF0dGluZzogYWxyaWdodCIK KyAgIChzdHJpbmctbnVsbD8KKyAgICAgKHdpdGgtd2FybmluZ3MKKyAgICAgICAoY2hlY2stZm9y bWF0dGluZyAoZHVtbXktcGFja2FnZSAieCIpKSkpKQphY3R1YWwtdmFsdWU6ICN0CnJlc3VsdDog UEFTUwoKcmFuZG9tIHNlZWQgZm9yIHRlc3RzOiAxNDY5ODI3NjQ3CgpGQUlMOiB0ZXN0cy9jb250 YWluZXJzCj09PT09PT09PT09PT09PT09PT09PT0KCnRlc3QtbmFtZTogY2FsbC13aXRoLWNvbnRh aW5lciwgZXhpdCB3aXRoIDAgd2hlbiB0aGVyZSBpcyBubyBlcnJvcgpsb2NhdGlvbjogL2hvbWUv c2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90ZXN0cy9jb250YWluZXJzLnNjbTo0MApzb3Vy Y2U6CisgKHRlc3QtYXNzZXJ0CisgICAiY2FsbC13aXRoLWNvbnRhaW5lciwgZXhpdCB3aXRoIDAg d2hlbiB0aGVyZSBpcyBubyBlcnJvciIKKyAgICh6ZXJvPyAoY2FsbC13aXRoLWNvbnRhaW5lcgor ICAgICAgICAgICAgJygpCisgICAgICAgICAgICAoY29uc3QgI3QpCisgICAgICAgICAgICAjOm5h bWVzcGFjZXMKKyAgICAgICAgICAgICcodXNlcikpKSkKYWN0dWFsLXZhbHVlOiAjZgphY3R1YWwt ZXJyb3I6CisgKHN5c3RlbS1lcnJvcgorICAgImNsb25lIgorICAgIn5kOiB+QSIKKyAgICgyNjg0 MzU0NzMgIk9wZXJhdGlvbiBub3QgcGVybWl0dGVkIikKKyAgICgxKSkKcmVzdWx0OiBGQUlMCgp0 ZXN0LW5hbWU6IGNhbGwtd2l0aC1jb250YWluZXIsIHVzZXIgbmFtZXNwYWNlCmxvY2F0aW9uOiAv aG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL2NvbnRhaW5lcnMuc2NtOjQ1 CnNvdXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJjYWxsLXdpdGgtY29udGFpbmVyLCB1c2VyIG5h bWVzcGFjZSIKKyAgICh6ZXJvPyAoY2FsbC13aXRoLWNvbnRhaW5lcgorICAgICAgICAgICAgJygp CisgICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAgIChhc3NlcnQtZXhpdAorICAg ICAgICAgICAgICAgIChhbmQgKHplcm8/IChnZXR1aWQpKSAoemVybz8gKGdldGdpZCkpKSkpCisg ICAgICAgICAgICAjOm5hbWVzcGFjZXMKKyAgICAgICAgICAgICcodXNlcikpKSkKYWN0dWFsLXZh bHVlOiAjZgphY3R1YWwtZXJyb3I6CisgKHN5c3RlbS1lcnJvcgorICAgImNsb25lIgorICAgIn5k OiB+QSIKKyAgICgyNjg0MzU0NzMgIk9wZXJhdGlvbiBub3QgcGVybWl0dGVkIikKKyAgICgxKSkK cmVzdWx0OiBGQUlMCgp0ZXN0LW5hbWU6IGNhbGwtd2l0aC1jb250YWluZXIsIHV0cyBuYW1lc3Bh Y2UKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvY29u dGFpbmVycy5zY206NTQKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImNhbGwtd2l0aC1jb250 YWluZXIsIHV0cyBuYW1lc3BhY2UiCisgICAoemVybz8gKGNhbGwtd2l0aC1jb250YWluZXIKKyAg ICAgICAgICAgICcoKQorICAgICAgICAgICAgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAoc2V0 aG9zdG5hbWUgInRlc3QtY29udGFpbmVyIikKKyAgICAgICAgICAgICAgKHByaW1pdGl2ZS1leGl0 IDApKQorICAgICAgICAgICAgIzpuYW1lc3BhY2VzCisgICAgICAgICAgICAnKHVzZXIgdXRzKSkp KQphY3R1YWwtdmFsdWU6ICNmCmFjdHVhbC1lcnJvcjoKKyAoc3lzdGVtLWVycm9yCisgICAiY2xv bmUiCisgICAifmQ6IH5BIgorICAgKDMzNTU0NDMzNyAiT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQi KQorICAgKDEpKQpyZXN1bHQ6IEZBSUwKCnRlc3QtbmFtZTogY2FsbC13aXRoLWNvbnRhaW5lciwg cGlkIG5hbWVzcGFjZQpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dp cC90ZXN0cy9jb250YWluZXJzLnNjbTo2NQpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiY2Fs bC13aXRoLWNvbnRhaW5lciwgcGlkIG5hbWVzcGFjZSIKKyAgICh6ZXJvPyAoY2FsbC13aXRoLWNv bnRhaW5lcgorICAgICAgICAgICAgJygpCisgICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAg ICAgICAgIChtYXRjaCAocHJpbWl0aXZlLWZvcmspCisgICAgICAgICAgICAgICAgICAgICAoMCAo YXNzZXJ0LWV4aXQgKD0gMiAoZ2V0cGlkKSkpKQorICAgICAgICAgICAgICAgICAgICAgKHBpZCAo cHJpbWl0aXZlLWV4aXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2ggKHdhaXRw aWQgcGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF8gLiBzdGF0dXMp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdHVzOmV4aXQtdmFsIHN0 YXR1cykpKSkpKSkKKyAgICAgICAgICAgICM6bmFtZXNwYWNlcworICAgICAgICAgICAgJyh1c2Vy IHBpZCkpKSkKYWN0dWFsLXZhbHVlOiAjZgphY3R1YWwtZXJyb3I6CisgKHN5c3RlbS1lcnJvcgor ICAgImNsb25lIgorICAgIn5kOiB+QSIKKyAgICg4MDUzMDYzODUgIk9wZXJhdGlvbiBub3QgcGVy bWl0dGVkIikKKyAgICgxKSkKcmVzdWx0OiBGQUlMCgp0ZXN0LW5hbWU6IGNhbGwtd2l0aC1jb250 YWluZXIsIG1udCBuYW1lc3BhY2UKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgv Z3VpeF93aXAvdGVzdHMvY29udGFpbmVycy5zY206ODEKc291cmNlOgorICh0ZXN0LWFzc2VydAor ICAgImNhbGwtd2l0aC1jb250YWluZXIsIG1udCBuYW1lc3BhY2UiCisgICAoemVybz8gKGNhbGwt d2l0aC1jb250YWluZXIKKyAgICAgICAgICAgICcoKCJub25lIiBkZXZpY2UgIi90ZXN0aW5nIiAi dG1wZnMiICgpICNmICNmKSkKKyAgICAgICAgICAgIChsYW1iZGEgKCkKKyAgICAgICAgICAgICAg KGFzc2VydC1leGl0IChmaWxlLWV4aXN0cz8gIi90ZXN0aW5nIikpKQorICAgICAgICAgICAgIzpu YW1lc3BhY2VzCisgICAgICAgICAgICAnKHVzZXIgbW50KSkpKQphY3R1YWwtdmFsdWU6ICNmCmFj dHVhbC1lcnJvcjoKKyAoc3lzdGVtLWVycm9yCisgICAiY2xvbmUiCisgICAifmQ6IH5BIgorICAg KDI2ODU2NjU0NSAiT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQiKQorICAgKDEpKQpyZXN1bHQ6IEZB SUwKCnRlc3QtbmFtZTogY2FsbC13aXRoLWNvbnRhaW5lciwgbW50IG5hbWVzcGFjZSwgd3Jvbmcg YmluZCBtb3VudApsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90 ZXN0cy9jb250YWluZXJzLnNjbTo4OQpzb3VyY2U6CisgKHRlc3QtZXF1YWwKKyAgICJjYWxsLXdp dGgtY29udGFpbmVyLCBtbnQgbmFtZXNwYWNlLCB3cm9uZyBiaW5kIG1vdW50IgorICAgYChzeXN0 ZW0tZXJyb3IgLEVOT0VOVCkKKyAgIChjYXRjaCAnc3lzdGVtLWVycm9yCisgICAgICAgICAgKGxh bWJkYSAoKQorICAgICAgICAgICAgKGNhbGwtd2l0aC1jb250YWluZXIKKyAgICAgICAgICAgICAg JygoIi9kb2VzLW5vdC1leGlzdCIKKyAgICAgICAgICAgICAgICAgZGV2aWNlCisgICAgICAgICAg ICAgICAgICIvZm9vIgorICAgICAgICAgICAgICAgICAibm9uZSIKKyAgICAgICAgICAgICAgICAg KGJpbmQtbW91bnQpCisgICAgICAgICAgICAgICAgICNmCisgICAgICAgICAgICAgICAgICNmKSkK KyAgICAgICAgICAgICAgKGNvbnN0ICN0KQorICAgICAgICAgICAgICAjOm5hbWVzcGFjZXMKKyAg ICAgICAgICAgICAgJyh1c2VyIG1udCkpKQorICAgICAgICAgIChsYW1iZGEgYXJncworICAgICAg ICAgICAgKGxpc3QgJ3N5c3RlbS1lcnJvciAoc3lzdGVtLWVycm9yLWVycm5vIGFyZ3MpKSkpKQpl eHBlY3RlZC12YWx1ZTogKHN5c3RlbS1lcnJvciAyKQphY3R1YWwtdmFsdWU6IChzeXN0ZW0tZXJy b3IgMSkKcmVzdWx0OiBGQUlMCgp0ZXN0LW5hbWU6IGNhbGwtd2l0aC1jb250YWluZXIsIGFsbCBu YW1lc3BhY2VzCmxvY2F0aW9uOiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rl c3RzL2NvbnRhaW5lcnMuc2NtOjEwMgpzb3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAiY2FsbC13 aXRoLWNvbnRhaW5lciwgYWxsIG5hbWVzcGFjZXMiCisgICAoemVybz8gKGNhbGwtd2l0aC1jb250 YWluZXIKKyAgICAgICAgICAgICcoKQorICAgICAgICAgICAgKGxhbWJkYSAoKSAocHJpbWl0aXZl LWV4aXQgMCkpKSkpCmFjdHVhbC12YWx1ZTogI2YKYWN0dWFsLWVycm9yOgorIChzeXN0ZW0tZXJy b3IKKyAgICJjbG9uZSIKKyAgICJ+ZDogfkEiCisgICAoMjA4MDUwNTg3MyAiT3BlcmF0aW9uIG5v dCBwZXJtaXR0ZWQiKQorICAgKDEpKQpyZXN1bHQ6IEZBSUwKCnRlc3QtbmFtZTogY29udGFpbmVy LWV4Y3Vyc2lvbgpsb2NhdGlvbjogL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC90 ZXN0cy9jb250YWluZXJzLnNjbToxMDkKc291cmNlOgorICh0ZXN0LWFzc2VydAorICAgImNvbnRh aW5lci1leGN1cnNpb24iCisgICAoY2FsbC13aXRoLXRlbXBvcmFyeS1kaXJlY3RvcnkKKyAgICAg KGxhbWJkYSAocm9vdCkKKyAgICAgICAobWF0Y2ggKGxpc3QgKHBpcGUpIChwaXBlKSkKKyAgICAg ICAgICAgICAgKCgoc3RhcnQtaW4gLiBzdGFydC1vdXQpIChlbmQtaW4gLiBlbmQtb3V0KSkKKyAg ICAgICAgICAgICAgIChkZWZpbmUgKGNvbnRhaW5lcikKKyAgICAgICAgICAgICAgICAgKGNsb3Nl IGVuZC1vdXQpCisgICAgICAgICAgICAgICAgIChjbG9zZSBzdGFydC1pbikKKyAgICAgICAgICAg ICAgICAgKHdyaXRlICdyZWFkeSBzdGFydC1vdXQpCisgICAgICAgICAgICAgICAgIChjbG9zZSBz dGFydC1vdXQpCisgICAgICAgICAgICAgICAgIChyZWFkIGVuZC1pbikKKyAgICAgICAgICAgICAg ICAgKGNsb3NlIGVuZC1pbikpCisgICAgICAgICAgICAgICAoZGVmaW5lIChuYW1lc3BhY2VzIHBp ZCkKKyAgICAgICAgICAgICAgICAgKGxldCAoKHBpZCAobnVtYmVyLT5zdHJpbmcgcGlkKSkpCisg ICAgICAgICAgICAgICAgICAgKG1hcCAobGFtYmRhIChucykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgKHJlYWRsaW5rIChzdHJpbmctYXBwZW5kICIvcHJvYy8iIHBpZCAiL25zLyIgbnMpKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICcoInVzZXIiICJpcGMiICJ1dHMiICJuZXQiICJwaWQi ICJtbnQiKSkpKQorICAgICAgICAgICAgICAgKGxldCogKChwaWQgKHJ1bi1jb250YWluZXIgcm9v dCAnKCkgJW5hbWVzcGFjZXMgMSBjb250YWluZXIpKQorICAgICAgICAgICAgICAgICAgICAgIChj b250YWluZXItbmFtZXNwYWNlcyAobmFtZXNwYWNlcyBwaWQpKQorICAgICAgICAgICAgICAgICAg ICAgIChyZXN1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgIChiZWdpbgorICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2xvc2Ugc3RhcnQtb3V0KQorICAgICAgICAgICAgICAgICAgICAgICAg ICAocmVhZCBzdGFydC1pbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlIHN0YXJ0 LWluKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29udGFpbmVyLWV4Y3Vyc2lvbgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsYW1iZGEgKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaCAocHJpbWl0 aXZlLWZvcmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFzc2VydC1leGl0CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxdWFsPworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLW5hbWVzcGFjZXMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lc3BhY2VzIChnZXRwaWQpKSkpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JrLXBpZAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoICh3YWl0cGlkIGZvcmstcGlkKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoXyAuIHN0YXR1 cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaW1p dGl2ZS1leGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHN0YXR1czpleGl0LXZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RhdHVzKSkpKSkpKSkpKSkKKyAgICAgICAgICAgICAgICAgKGNsb3Nl IGVuZC1pbikKKyAgICAgICAgICAgICAgICAgKHdyaXRlICdkb25lIGVuZC1vdXQpCisgICAgICAg ICAgICAgICAgIChjbG9zZSBlbmQtb3V0KQorICAgICAgICAgICAgICAgICAod2FpdHBpZCBwaWQp CisgICAgICAgICAgICAgICAgICh6ZXJvPyByZXN1bHQpKSkpKSkpCmFjdHVhbC12YWx1ZTogI2YK YWN0dWFsLWVycm9yOgorIChzeXN0ZW0tZXJyb3IKKyAgICJjbG9uZSIKKyAgICJ+ZDogfkEiCisg ICAoMjA4MDUwNTg3MyAiT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQiKQorICAgKDEpKQpyZXN1bHQ6 IEZBSUwKCgpTS0lQOiB0ZXN0cy9weXBpCj09PT09PT09PT09PT09PT0KCnRlc3QtbmFtZTogZ3Vp eC1wYWNrYWdlLT5weXBpLW5hbWUsIG9sZCBVUkwgc3R5bGUKbG9jYXRpb246IC9ob21lL3NhcGll bnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvdGVzdHMvcHlwaS5zY206NzYKc291cmNlOgorICh0ZXN0 LWVxdWFsCisgICAiZ3VpeC1wYWNrYWdlLT5weXBpLW5hbWUsIG9sZCBVUkwgc3R5bGUiCisgICAi cHN1dGlsIgorICAgKGd1aXgtcGFja2FnZS0+cHlwaS1uYW1lCisgICAgIChkdW1teS1wYWNrYWdl CisgICAgICAgImZvbyIKKyAgICAgICAoc291cmNlCisgICAgICAgICAoZHVtbXktb3JpZ2luCisg ICAgICAgICAgICh1cmkgImh0dHBzOi8vcHlwaS5pby9wYWNrYWdlcy9zb3VyY2UvcC9wc3V0aWwv cHN1dGlsLTQuMy4wLnRhci5neiIpKSkpKSkKZXhwZWN0ZWQtdmFsdWU6IHBzdXRpbAphY3R1YWwt dmFsdWU6IHBzdXRpbApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogZ3VpeC1wYWNrYWdlLT5weXBp LW5hbWUsIG5ldyBVUkwgc3R5bGUKbG9jYXRpb246IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgv Z3VpeF93aXAvdGVzdHMvcHlwaS5zY206ODQKc291cmNlOgorICh0ZXN0LWVxdWFsCisgICAiZ3Vp eC1wYWNrYWdlLT5weXBpLW5hbWUsIG5ldyBVUkwgc3R5bGUiCisgICAiY2VydGJvdCIKKyAgIChn dWl4LXBhY2thZ2UtPnB5cGktbmFtZQorICAgICAoZHVtbXktcGFja2FnZQorICAgICAgICJmb28i CisgICAgICAgKHNvdXJjZQorICAgICAgICAgKGR1bW15LW9yaWdpbgorICAgICAgICAgICAodXJp ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9hMi8zYi80NzU2ZTZhMGNlYjE0ZTA4 NDA0MmEyYTY1YzYxNWQ2OGQyNTYyMWM2ZmQ0NDZkMGZjMTBkMTRjNGNlN2QvY2VydGJvdC0wLjgu MS50YXIuZ3oiKSkpKSkpCmV4cGVjdGVkLXZhbHVlOiBjZXJ0Ym90CmFjdHVhbC12YWx1ZTogY2Vy dGJvdApyZXN1bHQ6IFBBU1MKCnRlc3QtbmFtZTogcHlwaS0+Z3VpeC1wYWNrYWdlCmxvY2F0aW9u OiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3B5cGkuc2NtOjkyCnNv dXJjZToKKyAodGVzdC1hc3NlcnQKKyAgICJweXBpLT5ndWl4LXBhY2thZ2UiCisgICAobW9jayAo KGd1aXggaW1wb3J0IHV0aWxzKQorICAgICAgICAgIHVybC1mZXRjaAorICAgICAgICAgIChsYW1i ZGEgKHVybCBmaWxlLW5hbWUpCisgICAgICAgICAgICAobWF0Y2ggdXJsCisgICAgICAgICAgICAg ICAgICAgKCJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2Zvby9qc29uIgorICAgICAgICAg ICAgICAgICAgICAod2l0aC1vdXRwdXQtdG8tZmlsZQorICAgICAgICAgICAgICAgICAgICAgIGZp bGUtbmFtZQorICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkgKGRpc3BsYXkgdGVzdC1q c29uKSkpKQorICAgICAgICAgICAgICAgICAgICgiaHR0cHM6Ly9leGFtcGxlLmNvbS9mb28tMS4w LjAudGFyLmd6IgorICAgICAgICAgICAgICAgICAgICAoYmVnaW4KKyAgICAgICAgICAgICAgICAg ICAgICAobWtkaXIgImZvby0xLjAuMCIpCisgICAgICAgICAgICAgICAgICAgICAgKHdpdGgtb3V0 cHV0LXRvLWZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJmb28tMS4wLjAvcmVxdWlyZW1l bnRzLnR4dCIKKyAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkgKGRpc3BsYXkgdGVz dC1yZXF1aXJlbWVudHMpKSkKKyAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtKiAidGFyIiAi Y3p2ZiIgZmlsZS1uYW1lICJmb28tMS4wLjAvIikKKyAgICAgICAgICAgICAgICAgICAgICAoZGVs ZXRlLWZpbGUtcmVjdXJzaXZlbHkgImZvby0xLjAuMCIpCisgICAgICAgICAgICAgICAgICAgICAg KHNldCEgdGVzdC1zb3VyY2UtaGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgKGNhbGwtd2l0 aC1pbnB1dC1maWxlIGZpbGUtbmFtZSBwb3J0LXNoYTI1NikpKSkKKyAgICAgICAgICAgICAgICAg ICAoImh0dHBzOi8vZXhhbXBsZS5jb20vZm9vLTEuMC4wLXB5Mi5weTMtbm9uZS1hbnkud2hsIgor ICAgICAgICAgICAgICAgICAgICAjZikKKyAgICAgICAgICAgICAgICAgICAoXyAoZXJyb3IgIlVu ZXhwZWN0ZWQgVVJMOiAiIHVybCkpKSkpCisgICAgICAgICAobWF0Y2ggKHB5cGktPmd1aXgtcGFj a2FnZSAiZm9vIikKKyAgICAgICAgICAgICAgICAoKCdwYWNrYWdlCisgICAgICAgICAgICAgICAg ICAoJ25hbWUgInB5dGhvbi1mb28iKQorICAgICAgICAgICAgICAgICAgKCd2ZXJzaW9uICIxLjAu MCIpCisgICAgICAgICAgICAgICAgICAoJ3NvdXJjZQorICAgICAgICAgICAgICAgICAgICgnb3Jp Z2luCisgICAgICAgICAgICAgICAgICAgICgnbWV0aG9kICd1cmwtZmV0Y2gpCisgICAgICAgICAg ICAgICAgICAgICgndXJpCisgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZAorICAg ICAgICAgICAgICAgICAgICAgICAiaHR0cHM6Ly9leGFtcGxlLmNvbS9mb28tIgorICAgICAgICAg ICAgICAgICAgICAgICB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICIudGFyLmd6Iikp CisgICAgICAgICAgICAgICAgICAgICgnc2hhMjU2ICgnYmFzZTMyICg/IHN0cmluZz8gaGFzaCkp KSkpCisgICAgICAgICAgICAgICAgICAoJ2J1aWxkLXN5c3RlbSAncHl0aG9uLWJ1aWxkLXN5c3Rl bSkKKyAgICAgICAgICAgICAgICAgICgnaW5wdXRzCisgICAgICAgICAgICAgICAgICAgKCdxdWFz aXF1b3RlCisgICAgICAgICAgICAgICAgICAgICgoInB5dGhvbi1iYXIiICgndW5xdW90ZSAncHl0 aG9uLWJhcikpCisgICAgICAgICAgICAgICAgICAgICAoInB5dGhvbi1iYXoiICgndW5xdW90ZSAn cHl0aG9uLWJheikpCisgICAgICAgICAgICAgICAgICAgICAoInB5dGhvbi1zZXR1cHRvb2xzIgor ICAgICAgICAgICAgICAgICAgICAgICgndW5xdW90ZSAncHl0aG9uLXNldHVwdG9vbHMpKSkpKQor ICAgICAgICAgICAgICAgICAgKCdob21lLXBhZ2UgImh0dHA6Ly9leGFtcGxlLmNvbSIpCisgICAg ICAgICAgICAgICAgICAoJ3N5bm9wc2lzICJzdW1tYXJ5IikKKyAgICAgICAgICAgICAgICAgICgn ZGVzY3JpcHRpb24gInN1bW1hcnkiKQorICAgICAgICAgICAgICAgICAgKCdsaWNlbnNlICdsZ3Bs Mi4wKSkKKyAgICAgICAgICAgICAgICAgKHN0cmluZz0/CisgICAgICAgICAgICAgICAgICAgKGJ5 dGV2ZWN0b3ItPm5peC1iYXNlMzItc3RyaW5nIHRlc3Qtc291cmNlLWhhc2gpCisgICAgICAgICAg ICAgICAgICAgaGFzaCkpCisgICAgICAgICAgICAgICAgKHggKHBrICdmYWlsIHggI2YpKSkpKQpm b28tMS4wLjAvCmZvby0xLjAuMC9yZXF1aXJlbWVudHMudHh0CmFjdHVhbC12YWx1ZTogI3QKcmVz dWx0OiBQQVNTCgp0ZXN0LW5hbWU6IHB5cGktPmd1aXgtcGFja2FnZSwgd2hlZWxzCmxvY2F0aW9u OiAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rlc3RzL3B5cGkuc2NtOjE0MQpz b3VyY2U6CisgKHRlc3QtYXNzZXJ0CisgICAicHlwaS0+Z3VpeC1wYWNrYWdlLCB3aGVlbHMiCisg ICAobW9jayAoKGd1aXggaW1wb3J0IHV0aWxzKQorICAgICAgICAgIHVybC1mZXRjaAorICAgICAg ICAgIChsYW1iZGEgKHVybCBmaWxlLW5hbWUpCisgICAgICAgICAgICAobWF0Y2ggdXJsCisgICAg ICAgICAgICAgICAgICAgKCJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2Zvby9qc29uIgor ICAgICAgICAgICAgICAgICAgICAod2l0aC1vdXRwdXQtdG8tZmlsZQorICAgICAgICAgICAgICAg ICAgICAgIGZpbGUtbmFtZQorICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkgKGRpc3Bs YXkgdGVzdC1qc29uKSkpKQorICAgICAgICAgICAgICAgICAgICgiaHR0cHM6Ly9leGFtcGxlLmNv bS9mb28tMS4wLjAudGFyLmd6IgorICAgICAgICAgICAgICAgICAgICAoYmVnaW4KKyAgICAgICAg ICAgICAgICAgICAgICAobWtkaXIgImZvby0xLjAuMCIpCisgICAgICAgICAgICAgICAgICAgICAg KHdpdGgtb3V0cHV0LXRvLWZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJmb28tMS4wLjAv cmVxdWlyZW1lbnRzLnR4dCIKKyAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkgKGRp c3BsYXkgdGVzdC1yZXF1aXJlbWVudHMpKSkKKyAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVt KiAidGFyIiAiY3p2ZiIgZmlsZS1uYW1lICJmb28tMS4wLjAvIikKKyAgICAgICAgICAgICAgICAg ICAgICAoZGVsZXRlLWZpbGUtcmVjdXJzaXZlbHkgImZvby0xLjAuMCIpCisgICAgICAgICAgICAg ICAgICAgICAgKHNldCEgdGVzdC1zb3VyY2UtaGFzaAorICAgICAgICAgICAgICAgICAgICAgICAg KGNhbGwtd2l0aC1pbnB1dC1maWxlIGZpbGUtbmFtZSBwb3J0LXNoYTI1NikpKSkKKyAgICAgICAg ICAgICAgICAgICAoImh0dHBzOi8vZXhhbXBsZS5jb20vZm9vLTEuMC4wLXB5Mi5weTMtbm9uZS1h bnkud2hsIgorICAgICAgICAgICAgICAgICAgICAoYmVnaW4KKyAgICAgICAgICAgICAgICAgICAg ICAobWtkaXIgImZvby0xLjAuMC5kaXN0LWluZm8iKQorICAgICAgICAgICAgICAgICAgICAgICh3 aXRoLW91dHB1dC10by1maWxlCisgICAgICAgICAgICAgICAgICAgICAgICAiZm9vLTEuMC4wLmRp c3QtaW5mby9tZXRhZGF0YS5qc29uIgorICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAo KSAoZGlzcGxheSB0ZXN0LW1ldGFkYXRhKSkpCisgICAgICAgICAgICAgICAgICAgICAgKGxldCAo KHppcC1maWxlIChzdHJpbmctYXBwZW5kIGZpbGUtbmFtZSAiLnppcCIpKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgIChzeXN0ZW0qCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ6aXAiCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHppcC1maWxlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICJmb28tMS4wLjAuZGlzdC1pbmZvL21ldGFkYXRhLmpzb24iKQorICAgICAgICAgICAgICAg ICAgICAgICAgKHJlbmFtZS1maWxlIHppcC1maWxlIGZpbGUtbmFtZSkpCisgICAgICAgICAgICAg ICAgICAgICAgKGRlbGV0ZS1maWxlLXJlY3Vyc2l2ZWx5ICJmb28tMS4wLjAuZGlzdC1pbmZvIikp KQorICAgICAgICAgICAgICAgICAgIChfIChlcnJvciAiVW5leHBlY3RlZCBVUkw6ICIgdXJsKSkp KSkKKyAgICAgICAgIChtYXRjaCAocHlwaS0+Z3VpeC1wYWNrYWdlICJmb28iKQorICAgICAgICAg ICAgICAgICgoJ3BhY2thZ2UKKyAgICAgICAgICAgICAgICAgICgnbmFtZSAicHl0aG9uLWZvbyIp CisgICAgICAgICAgICAgICAgICAoJ3ZlcnNpb24gIjEuMC4wIikKKyAgICAgICAgICAgICAgICAg ICgnc291cmNlCisgICAgICAgICAgICAgICAgICAgKCdvcmlnaW4KKyAgICAgICAgICAgICAgICAg ICAgKCdtZXRob2QgJ3VybC1mZXRjaCkKKyAgICAgICAgICAgICAgICAgICAgKCd1cmkKKyAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICJo dHRwczovL2V4YW1wbGUuY29tL2Zvby0iCisgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24K KyAgICAgICAgICAgICAgICAgICAgICAgIi50YXIuZ3oiKSkKKyAgICAgICAgICAgICAgICAgICAg KCdzaGEyNTYgKCdiYXNlMzIgKD8gc3RyaW5nPyBoYXNoKSkpKSkKKyAgICAgICAgICAgICAgICAg ICgnYnVpbGQtc3lzdGVtICdweXRob24tYnVpbGQtc3lzdGVtKQorICAgICAgICAgICAgICAgICAg KCdpbnB1dHMKKyAgICAgICAgICAgICAgICAgICAoJ3F1YXNpcXVvdGUKKyAgICAgICAgICAgICAg ICAgICAgKCgicHl0aG9uLWJhciIgKCd1bnF1b3RlICdweXRob24tYmFyKSkKKyAgICAgICAgICAg ICAgICAgICAgICgicHl0aG9uLWJheiIgKCd1bnF1b3RlICdweXRob24tYmF6KSkKKyAgICAgICAg ICAgICAgICAgICAgICgicHl0aG9uLXNldHVwdG9vbHMiCisgICAgICAgICAgICAgICAgICAgICAg KCd1bnF1b3RlICdweXRob24tc2V0dXB0b29scykpKSkpCisgICAgICAgICAgICAgICAgICAoJ2hv bWUtcGFnZSAiaHR0cDovL2V4YW1wbGUuY29tIikKKyAgICAgICAgICAgICAgICAgICgnc3lub3Bz aXMgInN1bW1hcnkiKQorICAgICAgICAgICAgICAgICAgKCdkZXNjcmlwdGlvbiAic3VtbWFyeSIp CisgICAgICAgICAgICAgICAgICAoJ2xpY2Vuc2UgJ2xncGwyLjApKQorICAgICAgICAgICAgICAg ICAoc3RyaW5nPT8KKyAgICAgICAgICAgICAgICAgICAoYnl0ZXZlY3Rvci0+bml4LWJhc2UzMi1z dHJpbmcgdGVzdC1zb3VyY2UtaGFzaCkKKyAgICAgICAgICAgICAgICAgICBoYXNoKSkKKyAgICAg ICAgICAgICAgICAoeCAocGsgJ2ZhaWwgeCAjZikpKSkpCnJlc3VsdDogU0tJUAoKcmFuZG9tIHNl ZWQgZm9yIHRlc3RzOiAxNDY5ODI3MTQ2CgpGQUlMOiB0ZXN0cy9ndWl4LWRvd25sb2FkCj09PT09 PT09PT09PT09PT09PT09PT09PT0KCisgZ3VpeCBkb3dubG9hZCAtLXZlcnNpb24KZ3VpeCBkb3du bG9hZCAoR05VIEd1aXgpIDAuMTAuMApDb3B5cmlnaHQgKEMpIDIwMTYgdGhlIEd1aXggYXV0aG9y cwpMaWNlbnNlIEdQTHYzKzogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUu b3JnL2xpY2Vuc2VzL2dwbC5odG1sPgpUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJl ZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC4KVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRv IHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4KKyBndWl4IGRvd25sb2FkIGh0dHA6Ly9kb2Vz Lm5vdC9leGlzdAphY2NlcHRlZCBjb25uZWN0aW9uIGZyb20gcGlkIDY5ODksIHVzZXIgc2FwaWVu dGVjaAoKU3RhcnRpbmcgZG93bmxvYWQgb2YgL3RtcC9ndWl4LWZpbGUuNTRPUVFOCkZyb20gaHR0 cDovL2RvZXMubm90L2V4aXN0Li4uCg0bW0sgZXhpc3QgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDBCL3MgMDA6MDAgfCAwQiB0cmFuc2ZlcnJlZA0bW0sgZXhp c3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5MEtpQi9zIDAwOjAw IHwgMzE5QiB0cmFuc2ZlcnJlZAovaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3Rl c3QtdG1wL3N0b3JlL2hpNWhtZmwxMTdicmk1Yzc5aTk2ZmI3eW1pcDRjYjQzLWV4aXN0CjFpcG1i ampnaWYxZjZhNzdqOTFzMnk5ODl5NnNnazNmaDRqaXljYnFxczZ2Mmk4MjdsN3MKKyBmYWxzZQou L3Rlc3QtZW52OiBsaW5lIDE6ICA2OTgwIFRlcm1pbmF0ZWQgICAgICAgICAgICAgICIvaG9tZS9z YXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL3ByZS1pbnN0LWVudiIgIi9ob21lL3NhcGllbnRl Y2gvRGV2L2d1aXgvZ3VpeF93aXAvZ3VpeC1kYWVtb24iIC0tZGlzYWJsZS1jaHJvb3QgLS1zdWJz dGl0dXRlLXVybHM9IiRHVUlYX0JJTkFSWV9TVUJTVElUVVRFX1VSTCIKRkFJTCB0ZXN0cy9ndWl4 LWRvd25sb2FkLnNoIChleGl0IHN0YXR1czogMSkKCkZBSUw6IHRlc3RzL2d1aXgtZW52aXJvbm1l bnQtY29udGFpbmVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgorIHNl dCAtZQorIGd1aXggZW52aXJvbm1lbnQgLS12ZXJzaW9uCmd1aXggZW52aXJvbm1lbnQgKEdOVSBH dWl4KSAwLjEwLjAKQ29weXJpZ2h0IChDKSAyMDE2IHRoZSBHdWl4IGF1dGhvcnMKTGljZW5zZSBH UEx2Mys6IEdOVSBHUEwgdmVyc2lvbiAzIG9yIGxhdGVyIDxodHRwOi8vZ251Lm9yZy9saWNlbnNl cy9ncGwuaHRtbD4KVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdl IGFuZCByZWRpc3RyaWJ1dGUgaXQuClRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50 IHBlcm1pdHRlZCBieSBsYXcuCisgZ3VpbGUgLWMgJygoQEAgKGd1aXggc2NyaXB0cyBlbnZpcm9u bWVudCkgYXNzZXJ0LWNvbnRhaW5lci1mZWF0dXJlcykpJworIHRtcGRpcj10LWd1aXgtZW52aXJv bm1lbnQtMTEyOTgKKyB0cmFwICdybSAtciAiJHRtcGRpciInIEVYSVQKKyBta2RpciB0LWd1aXgt ZW52aXJvbm1lbnQtMTEyOTgKKyBndWl4IGVudmlyb25tZW50IC0tY29udGFpbmVyIC0tYWQtaG9j IC0tYm9vdHN0cmFwIGd1aWxlLWJvb3RzdHJhcCAtLSBndWlsZSAtYyAnKGV4aXQgNDIpJwphY2Nl cHRlZCBjb25uZWN0aW9uIGZyb20gcGlkIDExMzEwLCB1c2VyIHNhcGllbnRlY2gKZ3VpeCBlbnZp cm9ubWVudDogZXJyb3I6IGNsb25lOiAyMDgwNTA1ODczOiBPcGVyYXRpb24gbm90IHBlcm1pdHRl ZAorIHRlc3QgMSA9IDQyCisgcm0gLXIgdC1ndWl4LWVudmlyb25tZW50LTExMjk4Ci4vdGVzdC1l bnY6IGxpbmUgMTogMTEyOTcgVGVybWluYXRlZCAgICAgICAgICAgICAgIi9ob21lL3NhcGllbnRl Y2gvRGV2L2d1aXgvZ3VpeF93aXAvcHJlLWluc3QtZW52IiAiL2hvbWUvc2FwaWVudGVjaC9EZXYv Z3VpeC9ndWl4X3dpcC9ndWl4LWRhZW1vbiIgLS1kaXNhYmxlLWNocm9vdCAtLXN1YnN0aXR1dGUt dXJscz0iJEdVSVhfQklOQVJZX1NVQlNUSVRVVEVfVVJMIgpGQUlMIHRlc3RzL2d1aXgtZW52aXJv bm1lbnQtY29udGFpbmVyLnNoIChleGl0IHN0YXR1czogMSkKCg== --=_e9a6df70a27b00c7c1a80573c06d6b2d-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 30 09:07:40 2016 Received: (at 24108) by debbugs.gnu.org; 30 Jul 2016 13:07:40 +0000 Received: from localhost ([127.0.0.1]:51256 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTTzQ-0005PR-Fk for submit@debbugs.gnu.org; Sat, 30 Jul 2016 09:07:40 -0400 Received: from eggs.gnu.org ([208.118.235.92]:40081) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTTzO-0005PE-L7 for 24108@debbugs.gnu.org; Sat, 30 Jul 2016 09:07:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bTTzE-00040N-SO for 24108@debbugs.gnu.org; Sat, 30 Jul 2016 09:07:33 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_40,RP_MATCHES_RCVD autolearn=disabled version=3.3.2 Received: from fencepost.gnu.org ([2001:4830:134:3::e]:44777) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bTTzE-00040J-OX; Sat, 30 Jul 2016 09:07:28 -0400 Received: from reverse-83.fdn.fr ([80.67.176.83]:59926 helo=pluto) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1bTTzE-0005wI-1r; Sat, 30 Jul 2016 09:07:28 -0400 From: ludo@gnu.org (Ludovic =?utf-8?Q?Court=C3=A8s?=) To: sapientech@openmailbox.org Subject: Re: bug#24108: guix make tests failure References: <4c03321977ef605cc34a23986d83ce47@openmailbox.org> X-URL: http://www.fdn.fr/~lcourtes/ X-Revolutionary-Date: 13 Thermidor an 224 de la =?utf-8?Q?R=C3=A9volution?= X-PGP-Key-ID: 0x090B11993D9AEBB5 X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5 X-OS: x86_64-unknown-linux-gnu Date: Sat, 30 Jul 2016 15:07:25 +0200 In-Reply-To: <4c03321977ef605cc34a23986d83ce47@openmailbox.org> (sapientech@openmailbox.org's message of "Fri, 29 Jul 2016 19:26:10 -0400") Message-ID: <874m77e0ky.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2001:4830:134:3::e X-Spam-Score: -6.3 (------) X-Debbugs-Envelope-To: 24108 Cc: 24108@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -6.3 (------) Hi, sapientech@openmailbox.org skribis: > test-name: substitute query, alternating URLs > location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:456 [...] > substitute: guix/ui.scm:1209:6: In procedure run-guix-command: > substitute: guix/ui.scm:1209:6: unmatched line "window.location=3D\"http://www.dnsrsearch.com/i= ndex.php?origURL=3D\"+escape(window.location)+\"&r=3D\"+escape(document.ref= errer)+\"&bc=3D\";" It seems there=E2=80=99s a DNS hijacker in place where domain names such as =E2=80=9Cdoes-not-exist=E2=80=9D (used in this and other tests) are resolve= d to some ISP-specific host or something. This explains this and more of the other test failures you are seeing; this is unsupported. > test-name: clone > location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:109 > source: > + (test-assert > + "clone" > + (match (clone (logior CLONE_NEWUSER SIGCHLD)) > + (0 (primitive-exit 42)) > + (pid (and (not (equal? > + (readlink (user-namespace pid)) > + (readlink (user-namespace (getpid))))) > + (match (waitpid pid) > + ((_ . status) (=3D 42 (status:exit-val status= )))))))) > actual-value: #f > actual-error: > + (system-error > + "clone" > + "~d: ~A" > + (268435473 "Operation not permitted") > + (1)) > result: FAIL What does =E2=80=9Cuname -srv=E2=80=9D report on this machine? It seems th= is kernel does not support namespaces. Thanks, Ludo=E2=80=99. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 30 13:44:18 2016 Received: (at 24108) by debbugs.gnu.org; 30 Jul 2016 17:44:18 +0000 Received: from localhost ([127.0.0.1]:51665 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTYJ8-0003Gx-8c for submit@debbugs.gnu.org; Sat, 30 Jul 2016 13:44:18 -0400 Received: from mail.openmailbox.org ([62.4.1.34]:41197) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTYJ6-0003Go-0e for 24108@debbugs.gnu.org; Sat, 30 Jul 2016 13:44:17 -0400 Received: by mail.openmailbox.org (Postfix, from userid 20002) id 7ED54206572; Sat, 30 Jul 2016 19:43:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=openmailbox.org; s=openmailbox; t=1469900614; bh=PRKGjXWPebuQ/BBXgGMnsJnahwyHWDYsuQ+JxRTMZ98=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=T0eSSn5OGD6DCbQyPJE5qQE1qxqGx2TiFKwD3f3GuBWkfnc33Qsdcge8TIht2Gewm 1oZI2gjSswAgFayqUkyd0Xq1Th1uFVPKMFJqiaFdsqH8v9NmBSV+irNsDe1WTQJdcO 7eOI2vORYaYki4vBMNQk0skwOcRPBDPBtc0PGM64= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on h3 X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=NO_RECEIVED,NO_RELAYS, T_DKIM_INVALID,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Date: Sat, 30 Jul 2016 10:43:12 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=openmailbox.org; s=openmailbox; t=1469900612; bh=PRKGjXWPebuQ/BBXgGMnsJnahwyHWDYsuQ+JxRTMZ98=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=HtgacKJ68gOgcqQV38/69E9rh54xsmT6wJlMMnThkCU6OecbOUA2Y9xGgA3F0K+tV Nfe7GiwOSSgqxS3FwkzEK4d2LXAfT9MXKUBe/5WiGfDxuDCPA4YlagvOMwb7iPm/3o e5g2UAiNwGnv26uOQ2aqdrlJdsEZmco4uxUmnGXE= From: Dylan Jeffers To: ludo@gnu.org (Ludovic =?UTF-8?B?Q291cnTDqHM=?=) Subject: Re: bug#24108: guix make tests failure Message-ID: <20160730104312.2166ffa5@openmailbox.org> In-Reply-To: <874m77e0ky.fsf@gnu.org> References: <4c03321977ef605cc34a23986d83ce47@openmailbox.org> <874m77e0ky.fsf@gnu.org> X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.28; x86_64-unknown-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.0 (--) X-Debbugs-Envelope-To: 24108 Cc: 24108@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.0 (--) On Sat, 30 Jul 2016 15:07:25 +0200 ludo@gnu.org (Ludovic Court=C3=A8s) wrote: > Hi, >=20 > sapientech@openmailbox.org skribis: >=20 > > test-name: substitute query, alternating URLs > > location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:456 =20 >=20 > [...] >=20 > > substitute: guix/ui.scm:1209:6: In procedure run-guix-command: > > substitute: guix/ui.scm:1209:6: unmatched line " > http-equiv=3D\"refresh\" > > content=3D\"0;url=3Dhttp://www.dnsrsearch.com/index.php?origURL=3Dhttp:= //does-not-exist/nix-cache-info&bc=3D\"/>" =20 >=20 > It seems there=E2=80=99s a DNS hijacker in place where domain names such = as > =E2=80=9Cdoes-not-exist=E2=80=9D (used in this and other tests) are resol= ved to some > ISP-specific host or something. This explains this and more of the > other test failures you are seeing; this is unsupported. >=20 > > test-name: clone > > location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:109 > > source: > > + (test-assert > > + "clone" > > + (match (clone (logior CLONE_NEWUSER SIGCHLD)) > > + (0 (primitive-exit 42)) > > + (pid (and (not (equal? > > + (readlink (user-namespace pid)) > > + (readlink (user-namespace (getpid))))) > > + (match (waitpid pid) > > + ((_ . status) (=3D 42 (status:exit-val > > status)))))))) actual-value: #f > > actual-error: > > + (system-error > > + "clone" > > + "~d: ~A" > > + (268435473 "Operation not permitted") > > + (1)) > > result: FAIL =20 >=20 > What does =E2=80=9Cuname -srv=E2=80=9D report on this machine? It seems = this kernel > does not support namespaces. >=20 > Thanks, > Ludo=E2=80=99. Hi Ludo, Thanks for getting back so quick. Output of uname -srv: Linux 4.6.4-gnu-201607192040-1-grsec #1 SMP PREEMPT Wed Jul 20 15:37:34 UYT 2016 It is a security enhanced kernel, so that may be the issue. Let me know if there is a workaround for this kernel, or whether i should fall-back to an lts, or standard kernel. Best, Dylan From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 30 17:32:10 2016 Received: (at 24108) by debbugs.gnu.org; 30 Jul 2016 21:32:10 +0000 Received: from localhost ([127.0.0.1]:51863 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTbre-0000Dh-AP for submit@debbugs.gnu.org; Sat, 30 Jul 2016 17:32:10 -0400 Received: from eggs.gnu.org ([208.118.235.92]:58481) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTbrc-0000DU-Kk for 24108@debbugs.gnu.org; Sat, 30 Jul 2016 17:32:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bTbrT-00064t-Ez for 24108@debbugs.gnu.org; Sat, 30 Jul 2016 17:32:03 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD autolearn=disabled version=3.3.2 Received: from fencepost.gnu.org ([2001:4830:134:3::e]:50138) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bTbrT-00064p-Br; Sat, 30 Jul 2016 17:31:59 -0400 Received: from reverse-83.fdn.fr ([80.67.176.83]:60278 helo=pluto) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1bTbrQ-0007gf-TN; Sat, 30 Jul 2016 17:31:57 -0400 From: ludo@gnu.org (Ludovic =?utf-8?Q?Court=C3=A8s?=) To: Dylan Jeffers Subject: Re: bug#24108: guix make tests failure References: <4c03321977ef605cc34a23986d83ce47@openmailbox.org> <874m77e0ky.fsf@gnu.org> <20160730104312.2166ffa5@openmailbox.org> X-URL: http://www.fdn.fr/~lcourtes/ X-Revolutionary-Date: 13 Thermidor an 224 de la =?utf-8?Q?R=C3=A9volution?= X-PGP-Key-ID: 0x090B11993D9AEBB5 X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5 X-OS: x86_64-unknown-linux-gnu Date: Sat, 30 Jul 2016 23:31:54 +0200 In-Reply-To: <20160730104312.2166ffa5@openmailbox.org> (Dylan Jeffers's message of "Sat, 30 Jul 2016 10:43:12 -0700") Message-ID: <87bn1ebynp.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2001:4830:134:3::e X-Spam-Score: -6.3 (------) X-Debbugs-Envelope-To: 24108 Cc: 24108@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -6.3 (------) Dylan Jeffers skribis: > On Sat, 30 Jul 2016 15:07:25 +0200 > ludo@gnu.org (Ludovic Court=C3=A8s) wrote: [...] >> > test-name: clone >> > location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:109 >> > source: >> > + (test-assert >> > + "clone" >> > + (match (clone (logior CLONE_NEWUSER SIGCHLD)) >> > + (0 (primitive-exit 42)) >> > + (pid (and (not (equal? >> > + (readlink (user-namespace pid)) >> > + (readlink (user-namespace (getpid))))) >> > + (match (waitpid pid) >> > + ((_ . status) (=3D 42 (status:exit-val >> > status)))))))) actual-value: #f >> > actual-error: >> > + (system-error >> > + "clone" >> > + "~d: ~A" >> > + (268435473 "Operation not permitted") >> > + (1)) >> > result: FAIL=20=20 >>=20 >> What does =E2=80=9Cuname -srv=E2=80=9D report on this machine? It seems= this kernel >> does not support namespaces. >>=20 >> Thanks, >> Ludo=E2=80=99. > > Hi Ludo, > > Thanks for getting back so quick. > Output of uname -srv: Linux 4.6.4-gnu-201607192040-1-grsec #1 SMP > PREEMPT Wed Jul 20 15:37:34 UYT 2016 These tests are skipped when user namespaces are not supported, as per this condition: (define perform-container-tests? (and (user-namespace-supported?) (unprivileged-user-namespace-supported?))) =E2=80=A6 which is true iff (1) /proc/self/ns/user exists, and (2) /proc/sys/kernel/unprivileged_userns_clone does not exist, or it exists and contains =E2=80=9C1=E2=80=9D. Do these files exist on this system? Maybe we should just ignore EPERM from (clone CLONE_NEWUSER) but it=E2=80= =99s annoying to annotate every single test that uses it. >From a user viewpoint, this test failure simply mean that you cannot use the =E2=80=98--container=E2=80=99 option =E2=80=98guix environment=E2=80=99= on your system. Thanks, Ludo=E2=80=99. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 30 20:40:51 2016 Received: (at 24108) by debbugs.gnu.org; 31 Jul 2016 00:40:51 +0000 Received: from localhost ([127.0.0.1]:51876 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTeoE-0004Sp-Vd for submit@debbugs.gnu.org; Sat, 30 Jul 2016 20:40:51 -0400 Received: from mail2.openmailbox.org ([62.4.1.33]:41991) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTeoC-0004Sf-Oz for 24108@debbugs.gnu.org; Sat, 30 Jul 2016 20:40:49 -0400 Received: by mail2.openmailbox.org (Postfix, from userid 1001) id 725C7109CE7; Sun, 31 Jul 2016 02:40:47 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=openmailbox.org; s=openmailbox; t=1469925647; bh=4+8a6YTFebjhXBt+RPBUBKDYWB7i2A5wJo43iZHwOdc=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=ghJc92IWKwRY9W7jRPdNN3kRGd76/rFkwlKFIwk/NLZu4fSPXXafArfiQILO2fj3f WiTa7JjTfDsPQ+Ln61qqqdpv5T32Re/fxEQEqr0oQtkZ+qTtoMMJin+q1yAFhISbUZ kqJqTIUM0AyCXD+fLJHzIRnCa5K8BlMfqiikkwBc= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on h3 X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=NO_RECEIVED,NO_RELAYS, T_DKIM_INVALID,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Date: Sat, 30 Jul 2016 17:40:27 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=openmailbox.org; s=openmailbox; t=1469925646; bh=4+8a6YTFebjhXBt+RPBUBKDYWB7i2A5wJo43iZHwOdc=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=Y+nKHMQMt+FJMWu9Rth8k/ZLvo2TcdCoJks/gwTc9cbF886hq6QycX/4ao9hHlTkz 0x40Q+mBPbKiDc9kD7mUysXnUvDDroZq9YPwZxQqRyV2lUXLkI4YRvSMuYmkMqOXZu MXMXWec6PJhLNFlPdkFtriPpyk+5unKlj4f9ZF+o= From: Dylan Jeffers To: ludo@gnu.org (Ludovic =?UTF-8?B?Q291cnTDqHM=?=) Subject: Re: bug#24108: guix make tests failure Message-ID: <20160730174027.0551e855@openmailbox.org> In-Reply-To: <87bn1ebynp.fsf@gnu.org> References: <4c03321977ef605cc34a23986d83ce47@openmailbox.org> <874m77e0ky.fsf@gnu.org> <20160730104312.2166ffa5@openmailbox.org> <87bn1ebynp.fsf@gnu.org> X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.28; x86_64-unknown-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.0 (--) X-Debbugs-Envelope-To: 24108 Cc: 24108@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.0 (--) On Sat, 30 Jul 2016 23:31:54 +0200 ludo@gnu.org (Ludovic Court=C3=A8s) wrote: > Dylan Jeffers skribis: >=20 > > On Sat, 30 Jul 2016 15:07:25 +0200 > > ludo@gnu.org (Ludovic Court=C3=A8s) wrote: =20 >=20 > [...] >=20 > >> > test-name: clone > >> > location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:109 > >> > source: > >> > + (test-assert > >> > + "clone" > >> > + (match (clone (logior CLONE_NEWUSER SIGCHLD)) > >> > + (0 (primitive-exit 42)) > >> > + (pid (and (not (equal? > >> > + (readlink (user-namespace pid)) > >> > + (readlink (user-namespace > >> > (getpid))))) > >> > + (match (waitpid pid) > >> > + ((_ . status) (=3D 42 (status:exit-val > >> > status)))))))) actual-value: #f > >> > actual-error: > >> > + (system-error > >> > + "clone" > >> > + "~d: ~A" > >> > + (268435473 "Operation not permitted") > >> > + (1)) > >> > result: FAIL =20 > >>=20 > >> What does =E2=80=9Cuname -srv=E2=80=9D report on this machine? It see= ms this > >> kernel does not support namespaces. > >>=20 > >> Thanks, > >> Ludo=E2=80=99. =20 > > > > Hi Ludo, > > > > Thanks for getting back so quick. > > Output of uname -srv: Linux 4.6.4-gnu-201607192040-1-grsec #1 SMP > > PREEMPT Wed Jul 20 15:37:34 UYT 2016 =20 >=20 > These tests are skipped when user namespaces are not supported, as per > this condition: >=20 > (define perform-container-tests? > (and (user-namespace-supported?) > (unprivileged-user-namespace-supported?))) >=20 > =E2=80=A6 which is true iff (1) /proc/self/ns/user exists, and (2) > /proc/sys/kernel/unprivileged_userns_clone does not exist, or it > exists and contains =E2=80=9C1=E2=80=9D. >=20 > Do these files exist on this system? (1) /proc/self/ns/user exists, and (2) /proc/sys/kernel/unpriviledged_userns_clone D.N.E Ideas on the best approach to allow the build to succeed? I also have had issues with qemu, so it makes sense that vm/container stuff both have issues. I have a feeling its due to the grsec kernel. https://wiki.archlinux.org/index.php/Grsecurity_Patchset talks a bit about userspace/namespace hardening + issues with xen and virtbox. Going to reboot with an lts kernel and try again. Will post update... Best, Dylan Best, Dylan From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 30 21:54:21 2016 Received: (at 24108) by debbugs.gnu.org; 31 Jul 2016 01:54:21 +0000 Received: from localhost ([127.0.0.1]:51883 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTfxN-0006D2-Nz for submit@debbugs.gnu.org; Sat, 30 Jul 2016 21:54:21 -0400 Received: from mail.openmailbox.org ([62.4.1.34]:54092) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTfxL-0006Cp-6h for 24108@debbugs.gnu.org; Sat, 30 Jul 2016 21:54:19 -0400 Received: by mail.openmailbox.org (Postfix, from userid 20002) id 28ED220651E; Sun, 31 Jul 2016 03:53:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=openmailbox.org; s=openmailbox; t=1469930017; bh=avj2IuzDe3Ri0qXFIRr6YhIjvP/yPCg1aUDD4lxybCU=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=RECv6AW04tqoDYk1kq5VNXeOlpgucRry4DrarRILdCbPJV7CmewUH4ZVFssRg75tU bE7cvC3Dksu9BJ0PrgA8cxY+H9RoR1Pwwdpe9ZSEbsmjr6fHfsX120iNYbpCZ/CVCC UPkWJiAwgxfLqrg9CpopffMLhXvCetCJ/R8ngL5s= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on h4 X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=NO_RECEIVED,NO_RELAYS, T_DKIM_INVALID,T_FILL_THIS_FORM_SHORT,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Date: Sat, 30 Jul 2016 18:53:05 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=openmailbox.org; s=openmailbox; t=1469930009; bh=avj2IuzDe3Ri0qXFIRr6YhIjvP/yPCg1aUDD4lxybCU=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=nYoI7mOJq23jSIIn2z9Ao0S1LFkzIXvJLCbggAmZrqaN44mAde7qO7AV435FQPaSF e0+IXWC1PbCKJEEGsi4Orp8shHJzFp8A1jAstefUq5knfvzSDdhowasYCIk8SPUjof cb0tSBYjJnIj2mbLD4mBmQlWO6osVHnun3j7OSI4= From: Dylan Jeffers To: ludo@gnu.org (Ludovic =?UTF-8?B?Q291cnTDqHM=?=) Subject: Re: bug#24108: guix make tests failure Message-ID: <20160730185305.0c8cfe59@openmailbox.org> In-Reply-To: <20160730174027.0551e855@openmailbox.org> References: <4c03321977ef605cc34a23986d83ce47@openmailbox.org> <874m77e0ky.fsf@gnu.org> <20160730104312.2166ffa5@openmailbox.org> <87bn1ebynp.fsf@gnu.org> <20160730174027.0551e855@openmailbox.org> X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.28; x86_64-unknown-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/RfwZ3bl.=e6TtpTaWZdR65C" X-Debbugs-Envelope-To: 24108 Cc: 24108@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --MP_/RfwZ3bl.=e6TtpTaWZdR65C Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Sat, 30 Jul 2016 17:40:27 -0700 Dylan Jeffers wrote: > On Sat, 30 Jul 2016 23:31:54 +0200 > ludo@gnu.org (Ludovic Court=C3=A8s) wrote: >=20 > > Dylan Jeffers skribis: > > =20 > > > On Sat, 30 Jul 2016 15:07:25 +0200 > > > ludo@gnu.org (Ludovic Court=C3=A8s) wrote: =20 > >=20 > > [...] > > =20 > > >> > test-name: clone > > >> > location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:109 > > >> > source: > > >> > + (test-assert > > >> > + "clone" > > >> > + (match (clone (logior CLONE_NEWUSER SIGCHLD)) > > >> > + (0 (primitive-exit 42)) > > >> > + (pid (and (not (equal? > > >> > + (readlink (user-namespace pid)) > > >> > + (readlink (user-namespace > > >> > (getpid))))) > > >> > + (match (waitpid pid) > > >> > + ((_ . status) (=3D 42 > > >> > (status:exit-val status)))))))) actual-value: #f > > >> > actual-error: > > >> > + (system-error > > >> > + "clone" > > >> > + "~d: ~A" > > >> > + (268435473 "Operation not permitted") > > >> > + (1)) > > >> > result: FAIL =20 > > >>=20 > > >> What does =E2=80=9Cuname -srv=E2=80=9D report on this machine? It s= eems this > > >> kernel does not support namespaces. > > >>=20 > > >> Thanks, > > >> Ludo=E2=80=99. =20 > > > > > > Hi Ludo, > > > > > > Thanks for getting back so quick. > > > Output of uname -srv: Linux 4.6.4-gnu-201607192040-1-grsec #1 SMP > > > PREEMPT Wed Jul 20 15:37:34 UYT 2016 =20 > >=20 > > These tests are skipped when user namespaces are not supported, as > > per this condition: > >=20 > > (define perform-container-tests? > > (and (user-namespace-supported?) > > (unprivileged-user-namespace-supported?))) > >=20 > > =E2=80=A6 which is true iff (1) /proc/self/ns/user exists, and (2) > > /proc/sys/kernel/unprivileged_userns_clone does not exist, or it > > exists and contains =E2=80=9C1=E2=80=9D. > >=20 > > Do these files exist on this system? =20 >=20 > (1) /proc/self/ns/user exists, and > (2) /proc/sys/kernel/unpriviledged_userns_clone D.N.E >=20 > Ideas on the best approach to allow the build to succeed? >=20 > I also have had issues with qemu, so it makes sense that vm/container > stuff both have issues. I have a feeling its due to the > grsec kernel. > https://wiki.archlinux.org/index.php/Grsecurity_Patchset talks a > bit about userspace/namespace hardening + issues with xen and > virtbox. Going to reboot with an lts kernel and try again. Will post > update... >=20 > Best, > Dylan >=20 > Best, > Dylan After changing kernel, and stopping paxd.service, build still failed :( It looks like the failed tests are different though (see attachment) Dylan --MP_/RfwZ3bl.=e6TtpTaWZdR65C Content-Type: text/x-log Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=config.log This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by GNU Guix configure 0.10.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ ./configure ## --------- ## ## Platform. ## ## --------- ## hostname = freetop uname -m = x86_64 uname -r = 4.6.4-gnu-1 uname -s = Linux uname -v = #1 SMP PREEMPT Wed Jul 20 05:58:11 UYT 2016 /usr/bin/uname -p = unknown /bin/uname -X = unknown /bin/arch = unknown /usr/bin/arch -k = unknown /usr/convex/getsysinfo = unknown /usr/bin/hostinfo = unknown /bin/machine = unknown /usr/bin/oslevel = unknown /bin/universe = unknown PATH: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin PATH: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/sbin PATH: /usr/local/sbin PATH: /usr/local/bin PATH: /usr/bin PATH: /usr/lib/jvm/default/bin PATH: /usr/bin/site_perl PATH: /usr/bin/vendor_perl PATH: /usr/bin/core_perl PATH: /home/sapientech/.guix-profile/bin PATH: /home/sapientech/.guix-profile/sbin ## ----------- ## ## Core tests. ## ## ----------- ## configure:2574: checking for a BSD-compatible install configure:2642: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/install -c configure:2653: checking whether build environment is sane configure:2708: result: yes configure:2859: checking for a thread-safe mkdir -p configure:2898: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/mkdir -p configure:2905: checking for gawk configure:2921: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/gawk configure:2932: result: gawk configure:2943: checking whether make sets $(MAKE) configure:2965: result: yes configure:2994: checking whether make supports nested variables configure:3011: result: yes configure:3150: checking whether make supports nested variables configure:3167: result: yes configure:3194: checking for style of include used by make configure:3222: result: GNU configure:3293: checking for gcc configure:3309: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/gcc configure:3320: result: gcc configure:3549: checking for C compiler version configure:3558: gcc --version >&5 gcc (GCC) 4.9.3 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. configure:3569: $? = 0 configure:3558: gcc -v >&5 Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/gnu/store/sjvcirri2bg7q5hlrkaywhmxllik0cfx-gcc-4.9.3/libexec/gcc/x86_64-unknown-linux-gnu/4.9.3/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: Thread model: posix gcc version 4.9.3 (GCC) configure:3569: $? = 0 configure:3558: gcc -V >&5 gcc: error: unrecognized command line option '-V' gcc: fatal error: no input files compilation terminated. configure:3569: $? = 1 configure:3558: gcc -qversion >&5 gcc: error: unrecognized command line option '-qversion' gcc: fatal error: no input files compilation terminated. configure:3569: $? = 1 configure:3589: checking whether the C compiler works configure:3611: gcc conftest.c >&5 configure:3615: $? = 0 configure:3663: result: yes configure:3666: checking for C compiler default output file name configure:3668: result: a.out configure:3674: checking for suffix of executables configure:3681: gcc -o conftest conftest.c >&5 configure:3685: $? = 0 configure:3707: result: configure:3729: checking whether we are cross compiling configure:3737: gcc -o conftest conftest.c >&5 configure:3741: $? = 0 configure:3748: ./conftest configure:3752: $? = 0 configure:3767: result: no configure:3772: checking for suffix of object files configure:3794: gcc -c conftest.c >&5 configure:3798: $? = 0 configure:3819: result: o configure:3823: checking whether we are using the GNU C compiler configure:3842: gcc -c conftest.c >&5 configure:3842: $? = 0 configure:3851: result: yes configure:3860: checking whether gcc accepts -g configure:3880: gcc -c -g conftest.c >&5 configure:3880: $? = 0 configure:3921: result: yes configure:3938: checking for gcc option to accept ISO C89 configure:4001: gcc -c -g -O2 conftest.c >&5 configure:4001: $? = 0 configure:4014: result: none needed configure:4039: checking whether gcc understands -c and -o together configure:4061: gcc -c conftest.c -o conftest2.o configure:4064: $? = 0 configure:4061: gcc -c conftest.c -o conftest2.o configure:4064: $? = 0 configure:4076: result: yes configure:4095: checking dependency style of gcc configure:4206: result: gcc3 configure:4227: checking how to run the C preprocessor configure:4258: gcc -E conftest.c configure:4258: $? = 0 configure:4272: gcc -E conftest.c conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:4272: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | /* end confdefs.h. */ | #include configure:4297: result: gcc -E configure:4317: gcc -E conftest.c configure:4317: $? = 0 configure:4331: gcc -E conftest.c conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:4331: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | /* end confdefs.h. */ | #include configure:4360: checking for grep that handles long lines and -e configure:4418: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/grep configure:4423: checking for egrep configure:4485: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/grep -E configure:4490: checking for ANSI C header files configure:4510: gcc -c -g -O2 conftest.c >&5 configure:4510: $? = 0 configure:4583: gcc -o conftest -g -O2 conftest.c >&5 configure:4583: $? = 0 configure:4583: ./conftest configure:4583: $? = 0 configure:4594: result: yes configure:4607: checking for sys/types.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for sys/stat.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for stdlib.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for string.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for memory.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for strings.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for inttypes.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for stdint.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4607: checking for unistd.h configure:4607: gcc -c -g -O2 conftest.c >&5 configure:4607: $? = 0 configure:4607: result: yes configure:4620: checking minix/config.h usability configure:4620: gcc -c -g -O2 conftest.c >&5 conftest.c:54:26: fatal error: minix/config.h: No such file or directory #include ^ compilation terminated. configure:4620: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | /* end confdefs.h. */ | #include | #ifdef HAVE_SYS_TYPES_H | # include | #endif | #ifdef HAVE_SYS_STAT_H | # include | #endif | #ifdef STDC_HEADERS | # include | # include | #else | # ifdef HAVE_STDLIB_H | # include | # endif | #endif | #ifdef HAVE_STRING_H | # if !defined STDC_HEADERS && defined HAVE_MEMORY_H | # include | # endif | # include | #endif | #ifdef HAVE_STRINGS_H | # include | #endif | #ifdef HAVE_INTTYPES_H | # include | #endif | #ifdef HAVE_STDINT_H | # include | #endif | #ifdef HAVE_UNISTD_H | # include | #endif | #include configure:4620: result: no configure:4620: checking minix/config.h presence configure:4620: gcc -E conftest.c conftest.c:21:26: fatal error: minix/config.h: No such file or directory #include ^ compilation terminated. configure:4620: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | /* end confdefs.h. */ | #include configure:4620: result: no configure:4620: checking for minix/config.h configure:4620: result: no configure:4641: checking whether it is safe to define __EXTENSIONS__ configure:4659: gcc -c -g -O2 conftest.c >&5 configure:4659: $? = 0 configure:4666: result: yes configure:4689: checking whether NLS is requested configure:4698: result: yes configure:4739: checking for msgfmt configure: trying /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt... 0 translated messages. configure:4771: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt configure:4780: checking for gmsgfmt configure:4811: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt configure:4862: checking for xgettext configure: trying /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xgettext... /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xgettext: warning: file '/dev/null' extension '' is unknown; will try C configure:4894: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xgettext configure:4940: checking for msgmerge configure: trying /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgmerge... configure:4971: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgmerge configure:5008: checking build system type configure:5022: result: x86_64-unknown-linux-gnu configure:5042: checking host system type configure:5055: result: x86_64-unknown-linux-gnu configure:5099: checking for ld used by GCC configure:5163: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/ld configure:5170: checking if the linker (/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/ld) is GNU ld configure:5183: result: yes configure:5190: checking for shared library run path origin configure:5203: result: done configure:5775: checking for CFPreferencesCopyAppValue configure:5793: gcc -o conftest -g -O2 conftest.c -Wl,-framework -Wl,CoreFoundation >&5 conftest.c:26:42: fatal error: CoreFoundation/CFPreferences.h: No such file or directory #include ^ compilation terminated. configure:5793: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define __EXTENSIONS__ 1 | #define _ALL_SOURCE 1 | #define _GNU_SOURCE 1 | #define _POSIX_PTHREAD_SEMANTICS 1 | #define _TANDEM_SOURCE 1 | /* end confdefs.h. */ | #include | int | main () | { | CFPreferencesCopyAppValue(NULL, NULL) | ; | return 0; | } configure:5802: result: no configure:5809: checking for CFLocaleCopyCurrent configure:5827: gcc -o conftest -g -O2 conftest.c -Wl,-framework -Wl,CoreFoundation >&5 conftest.c:26:37: fatal error: CoreFoundation/CFLocale.h: No such file or directory #include ^ compilation terminated. configure:5827: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define __EXTENSIONS__ 1 | #define _ALL_SOURCE 1 | #define _GNU_SOURCE 1 | #define _POSIX_PTHREAD_SEMANTICS 1 | #define _TANDEM_SOURCE 1 | /* end confdefs.h. */ | #include | int | main () | { | CFLocaleCopyCurrent(); | ; | return 0; | } configure:5836: result: no configure:5885: checking for GNU gettext in libc configure:5905: gcc -o conftest -g -O2 conftest.c >&5 configure:5905: $? = 0 configure:5914: result: yes configure:6705: checking whether to use NLS configure:6707: result: yes configure:6710: checking where the gettext function comes from configure:6721: result: libc configure:6787: checking for sed configure:6805: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/sed configure:6817: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/sed configure:6867: checking for the Guix system type configure:6869: result: x86_64-linux configure:6923: checking for the store directory configure:6925: result: /gnu/store configure:6947: checking the length of the installed socket file name configure:6954: result: 40 configure:6958: checking for unit test root directory configure:6965: result: /home/sapientech/Dev/guix/guix_wip/test-tmp configure:6970: checking the length of the socket file name used in tests configure:6977: result: 75 configure:6981: checking the length of a typical hash bang line configure:6988: result: 73 configure:6993: checking the length of a hash bang line used in tests configure:7000: result: 112 configure:7094: checking for pkg-config configure:7112: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/pkg-config configure:7124: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/pkg-config configure:7149: checking pkg-config is at least version 0.9.0 configure:7152: result: yes configure:7162: checking for GUILE configure:7169: $PKG_CONFIG --exists --print-errors "guile-2.0 >= 2.0.7" configure:7172: $? = 0 configure:7186: $PKG_CONFIG --exists --print-errors "guile-2.0 >= 2.0.7" configure:7189: $? = 0 configure:7247: result: yes configure:7253: checking for guile configure:7271: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile configure:7283: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile configure:7293: checking for guild configure:7311: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guild configure:7323: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guild configure:7337: checking for guile configure:7367: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile configure:7396: checking for Guile version >= 2.0 configure:7417: result: 2.0.11 configure:7422: checking for guild configure:7452: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guild configure:7464: checking for guile-config configure:7482: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile-config configure:7494: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile-config configure:7549: checking if (json) is available configure:7556: result: yes configure:7572: checking whether /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile provides feature 'regex' configure:7576: result: yes configure:7572: checking whether /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile provides feature 'posix' configure:7576: result: yes configure:7572: checking whether /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile provides feature 'socket' configure:7576: result: yes configure:7572: checking whether /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile provides feature 'net-db' configure:7576: result: yes configure:7572: checking whether /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile provides feature 'threads' configure:7576: result: yes configure:7587: checking whether (srfi srfi-37) is affected by http://bugs.gnu.org/13176 configure:7603: result: no configure:7616: checking whether libc provides 'mount' configure:7631: result: yes configure:7645: checking for gzip configure:7663: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/gzip configure:7675: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/gzip configure:7685: checking for bzip2 configure:7703: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/bzip2 configure:7715: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/bzip2 configure:7725: checking for xz configure:7743: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xz configure:7755: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xz configure:7783: checking for nix-instantiate configure:7816: result: no configure:7823: checking for nix-hash configure:7856: result: no configure:7881: checking for Nixpkgs source tree configure:7888: result: not found configure:7932: checking for libgcrypt-config configure:7950: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/libgcrypt-config configure:7962: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/libgcrypt-config configure:7970: checking libgcrypt's library directory configure:7981: result: /gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib configure:7993: checking for libgcrypt shared library name configure:7995: result: /gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib/libgcrypt configure:8001: checking whether /gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib/libgcrypt can be dynamically loaded configure:8016: result: yes configure:8025: checking zlib's library directory configure:8032: result: /gnu/store/hsxhfmjgh8m4c0pavq3gd3gcrn8zrgxj-zlib-1.2.8/lib configure:8041: checking for zlib's shared library name configure:8043: result: /gnu/store/hsxhfmjgh8m4c0pavq3gd3gcrn8zrgxj-zlib-1.2.8/lib/libz configure:8134: checking whether to build daemon configure:8136: result: yes configure:8197: checking for g++ configure:8213: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/g++ configure:8224: result: g++ configure:8251: checking for C++ compiler version configure:8260: g++ --version >&5 g++ (GCC) 4.9.3 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. configure:8271: $? = 0 configure:8260: g++ -v >&5 Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/gnu/store/sjvcirri2bg7q5hlrkaywhmxllik0cfx-gcc-4.9.3/libexec/gcc/x86_64-unknown-linux-gnu/4.9.3/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: Thread model: posix gcc version 4.9.3 (GCC) configure:8271: $? = 0 configure:8260: g++ -V >&5 g++: error: unrecognized command line option '-V' g++: fatal error: no input files compilation terminated. configure:8271: $? = 1 configure:8260: g++ -qversion >&5 g++: error: unrecognized command line option '-qversion' g++: fatal error: no input files compilation terminated. configure:8271: $? = 1 configure:8275: checking whether we are using the GNU C++ compiler configure:8294: g++ -c conftest.cpp >&5 configure:8294: $? = 0 configure:8303: result: yes configure:8312: checking whether g++ accepts -g configure:8332: g++ -c -g conftest.cpp >&5 configure:8332: $? = 0 configure:8373: result: yes configure:8398: checking dependency style of g++ configure:8509: result: gcc3 configure:8537: checking whether g++ supports C++11 configure:8561: g++ -c -std=c++11 -g -O2 conftest.cpp >&5 configure:8561: $? = 0 configure:8570: result: yes configure:8621: checking for ranlib configure:8637: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/ranlib configure:8648: result: ranlib configure:8680: checking for special C compiler options needed for large files configure:8725: result: no configure:8731: checking for _FILE_OFFSET_BITS value needed for large files configure:8756: g++ -c -g -O2 conftest.cpp >&5 configure:8756: $? = 0 configure:8788: result: no configure:8874: checking for BZ2_bzWriteOpen in -lbz2 configure:8899: g++ -o conftest -g -O2 conftest.cpp -lbz2 >&5 configure:8899: $? = 0 configure:8908: result: yes configure:8921: checking how to run the C++ preprocessor configure:8948: g++ -E conftest.cpp configure:8948: $? = 0 configure:8962: g++ -E conftest.cpp conftest.cpp:29:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:8962: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define __EXTENSIONS__ 1 | #define _ALL_SOURCE 1 | #define _GNU_SOURCE 1 | #define _POSIX_PTHREAD_SEMANTICS 1 | #define _TANDEM_SOURCE 1 | #define ENABLE_NLS 1 | #define HAVE_GETTEXT 1 | #define HAVE_DCGETTEXT 1 | /* end confdefs.h. */ | #include configure:8987: result: g++ -E configure:9007: g++ -E conftest.cpp configure:9007: $? = 0 configure:9021: g++ -E conftest.cpp conftest.cpp:29:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:9021: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "GNU Guix" | #define PACKAGE_TARNAME "guix" | #define PACKAGE_VERSION "0.10.0" | #define PACKAGE_STRING "GNU Guix 0.10.0" | #define PACKAGE_BUGREPORT "bug-guix@gnu.org" | #define PACKAGE_URL "http://www.gnu.org/software/guix/" | #define PACKAGE "guix" | #define VERSION "0.10.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define __EXTENSIONS__ 1 | #define _ALL_SOURCE 1 | #define _GNU_SOURCE 1 | #define _POSIX_PTHREAD_SEMANTICS 1 | #define _TANDEM_SOURCE 1 | #define ENABLE_NLS 1 | #define HAVE_GETTEXT 1 | #define HAVE_DCGETTEXT 1 | /* end confdefs.h. */ | #include configure:9052: checking bzlib.h usability configure:9052: g++ -c -g -O2 conftest.cpp >&5 configure:9052: $? = 0 configure:9052: result: yes configure:9052: checking bzlib.h presence configure:9052: g++ -E conftest.cpp configure:9052: $? = 0 configure:9052: result: yes configure:9052: checking for bzlib.h configure:9052: result: yes configure:9067: checking for SQLITE3 configure:9074: $PKG_CONFIG --exists --print-errors "sqlite3 >= 3.6.19" configure:9077: $? = 0 configure:9091: $PKG_CONFIG --exists --print-errors "sqlite3 >= 3.6.19" configure:9094: $? = 0 configure:9152: result: yes configure:9193: checking for gcry_md_open in -lgcrypt configure:9218: g++ -o conftest -g -O2 conftest.cpp -lgcrypt >&5 configure:9218: $? = 0 configure:9227: result: yes configure:9235: checking gcrypt.h usability configure:9235: g++ -c -g -O2 conftest.cpp >&5 configure:9235: $? = 0 configure:9235: result: yes configure:9235: checking gcrypt.h presence configure:9235: g++ -E conftest.cpp configure:9235: $? = 0 configure:9235: result: yes configure:9235: checking for gcrypt.h configure:9235: result: yes configure:9253: checking for chroot configure:9253: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9253: $? = 0 configure:9253: result: yes configure:9253: checking for unshare configure:9253: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9253: $? = 0 configure:9253: result: yes configure:9265: checking sched.h usability configure:9265: g++ -c -g -O2 conftest.cpp >&5 configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking sched.h presence configure:9265: g++ -E conftest.cpp configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking for sched.h configure:9265: result: yes configure:9265: checking sys/param.h usability configure:9265: g++ -c -g -O2 conftest.cpp >&5 configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking sys/param.h presence configure:9265: g++ -E conftest.cpp configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking for sys/param.h configure:9265: result: yes configure:9265: checking sys/mount.h usability configure:9265: g++ -c -g -O2 conftest.cpp >&5 configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking sys/mount.h presence configure:9265: g++ -E conftest.cpp configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking for sys/mount.h configure:9265: result: yes configure:9265: checking sys/syscall.h usability configure:9265: g++ -c -g -O2 conftest.cpp >&5 configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking sys/syscall.h presence configure:9265: g++ -E conftest.cpp configure:9265: $? = 0 configure:9265: result: yes configure:9265: checking for sys/syscall.h configure:9265: result: yes configure:9284: checking for lutimes configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9284: checking for lchown configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9284: checking for posix_fallocate configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9284: checking for sched_setaffinity configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9284: checking for statvfs configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9284: checking for nanosleep configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9284: checking for strsignal configure:9284: g++ -o conftest -g -O2 conftest.cpp >&5 configure:9284: $? = 0 configure:9284: result: yes configure:9294: checking whether it is possible to create a link to a symlink configure:9298: result: yes configure:9317: checking locale usability configure:9317: g++ -c -g -O2 conftest.cpp >&5 configure:9317: $? = 0 configure:9317: result: yes configure:9317: checking locale presence configure:9317: g++ -E conftest.cpp configure:9317: $? = 0 configure:9317: result: yes configure:9317: checking for locale configure:9317: result: yes configure:9337: checking sys/personality.h usability configure:9337: g++ -c -g -O2 conftest.cpp >&5 configure:9337: $? = 0 configure:9337: result: yes configure:9337: checking sys/personality.h presence configure:9337: g++ -E conftest.cpp configure:9337: $? = 0 configure:9337: result: yes configure:9337: checking for sys/personality.h configure:9337: result: yes configure:9350: checking linux/fs.h usability configure:9350: g++ -c -g -O2 conftest.cpp >&5 configure:9350: $? = 0 configure:9350: result: yes configure:9350: checking linux/fs.h presence configure:9350: g++ -E conftest.cpp configure:9350: $? = 0 configure:9350: result: yes configure:9350: checking for linux/fs.h configure:9350: result: yes configure:9361: checking if (gnutls) is available configure:9368: result: yes configure:9379: checking for default substitute URLs configure:9381: result: https://mirror.hydra.gnu.org configure:9391: checking whether Guile's custom binary input ports support 'setvbuf' configure:9405: result: yes configure:9417: checking for unit test root directory configure:9424: result: /home/sapientech/Dev/guix/guix_wip/test-tmp configure:9433: checking for guile configure:9463: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile configure:9471: checking the current installation's localstatedir configure:9485: result: /usr/local/var configure:9563: checking for dot configure:9581: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/dot configure:9594: result: /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/dot configure:9609: checking for emacs configure:9625: found /gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/emacs configure:9636: result: emacs configure:9660: checking where .elc files should go configure:9673: $EMACS -batch -Q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' conftest.out configure:9676: $? = 0 configure:9689: result: ${datadir}/emacs/site-lisp configure:9820: checking that generated files are newer than configure configure:9826: result: done configure:9881: creating ./config.status ## ---------------------- ## ## Running config.status. ## ## ---------------------- ## This file was extended by GNU Guix config.status 0.10.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = CONFIG_HEADERS = CONFIG_LINKS = CONFIG_COMMANDS = $ ./config.status on freetop config.status:992: creating nix/scripts/list-runtime-roots config.status:992: creating nix/scripts/substitute config.status:992: creating nix/scripts/guix-authenticate config.status:992: creating nix/scripts/offload config.status:992: creating Makefile config.status:992: creating po/guix/Makefile.in config.status:992: creating po/packages/Makefile.in config.status:992: creating guix/config.scm config.status:992: creating scripts/guix config.status:992: creating test-env config.status:992: creating pre-inst-env config.status:992: creating emacs/guix-config.el config.status:992: creating emacs/guix-helper.scm config.status:992: creating nix/config.h config.status:1173: nix/config.h is unchanged config.status:1221: executing depfiles commands config.status:1221: executing po-directories commands ## ---------------- ## ## Cache variables. ## ## ---------------- ## ac_cv_build=x86_64-unknown-linux-gnu ac_cv_c_compiler_gnu=yes ac_cv_cxx_compiler_gnu=yes ac_cv_env_CCC_set= ac_cv_env_CCC_value= ac_cv_env_CC_set= ac_cv_env_CC_value= ac_cv_env_CFLAGS_set= ac_cv_env_CFLAGS_value= ac_cv_env_CPPFLAGS_set= ac_cv_env_CPPFLAGS_value= ac_cv_env_CPP_set= ac_cv_env_CPP_value= ac_cv_env_CXXCPP_set= ac_cv_env_CXXCPP_value= ac_cv_env_CXXFLAGS_set= ac_cv_env_CXXFLAGS_value= ac_cv_env_CXX_set= ac_cv_env_CXX_value= ac_cv_env_EMACSLOADPATH_set= ac_cv_env_EMACSLOADPATH_value= ac_cv_env_EMACS_set= ac_cv_env_EMACS_value= ac_cv_env_GUILE_CFLAGS_set= ac_cv_env_GUILE_CFLAGS_value= ac_cv_env_GUILE_LIBS_set= ac_cv_env_GUILE_LIBS_value= ac_cv_env_LDFLAGS_set= ac_cv_env_LDFLAGS_value= ac_cv_env_LIBS_set= ac_cv_env_LIBS_value= ac_cv_env_PKG_CONFIG_LIBDIR_set= ac_cv_env_PKG_CONFIG_LIBDIR_value= ac_cv_env_PKG_CONFIG_PATH_set=set ac_cv_env_PKG_CONFIG_PATH_value=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/lib/pkgconfig::/home/sapientech/.guix-profile/lib/pkgconfig ac_cv_env_PKG_CONFIG_set= ac_cv_env_PKG_CONFIG_value= ac_cv_env_SQLITE3_CFLAGS_set= ac_cv_env_SQLITE3_CFLAGS_value= ac_cv_env_SQLITE3_LIBS_set= ac_cv_env_SQLITE3_LIBS_value= ac_cv_env_build_alias_set= ac_cv_env_build_alias_value= ac_cv_env_host_alias_set= ac_cv_env_host_alias_value= ac_cv_env_target_alias_set= ac_cv_env_target_alias_value= ac_cv_func_chroot=yes ac_cv_func_lchown=yes ac_cv_func_lutimes=yes ac_cv_func_nanosleep=yes ac_cv_func_posix_fallocate=yes ac_cv_func_sched_setaffinity=yes ac_cv_func_statvfs=yes ac_cv_func_strsignal=yes ac_cv_func_unshare=yes ac_cv_guix_cbips_support_setvbuf=yes ac_cv_guix_cxx11_support=yes ac_cv_guix_hash_bang_length=73 ac_cv_guix_socket_file_name_length=40 ac_cv_guix_srfi_37_broken=no ac_cv_guix_test_hash_bang_length=112 ac_cv_guix_test_root=/home/sapientech/Dev/guix/guix_wip/test-tmp ac_cv_guix_test_socket_file_name_length=75 ac_cv_header_bzlib_h=yes ac_cv_header_gcrypt_h=yes ac_cv_header_inttypes_h=yes ac_cv_header_linux_fs_h=yes ac_cv_header_locale=yes ac_cv_header_memory_h=yes ac_cv_header_minix_config_h=no ac_cv_header_sched_h=yes ac_cv_header_stdc=yes ac_cv_header_stdint_h=yes ac_cv_header_stdlib_h=yes ac_cv_header_string_h=yes ac_cv_header_strings_h=yes ac_cv_header_sys_mount_h=yes ac_cv_header_sys_param_h=yes ac_cv_header_sys_personality_h=yes ac_cv_header_sys_stat_h=yes ac_cv_header_sys_syscall_h=yes ac_cv_header_sys_types_h=yes ac_cv_header_unistd_h=yes ac_cv_host=x86_64-unknown-linux-gnu ac_cv_lib_bz2_BZ2_bzWriteOpen=yes ac_cv_lib_gcrypt_gcry_md_open=yes ac_cv_objext=o ac_cv_path_BZIP2=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/bzip2 ac_cv_path_DOT_USER_PROGRAM=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/dot ac_cv_path_EGREP='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/grep -E' ac_cv_path_GMSGFMT=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt ac_cv_path_GREP=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/grep ac_cv_path_GUILD=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guild ac_cv_path_GUILE=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile ac_cv_path_GUILE_CONFIG=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile-config ac_cv_path_GZIP=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/gzip ac_cv_path_LIBGCRYPT_CONFIG=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/libgcrypt-config ac_cv_path_MSGFMT=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt ac_cv_path_MSGMERGE=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgmerge ac_cv_path_SED=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/sed ac_cv_path_XGETTEXT=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xgettext ac_cv_path_XZ=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xz ac_cv_path_ac_pt_PKG_CONFIG=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/pkg-config ac_cv_path_install='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/install -c' ac_cv_path_mkdir=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/mkdir ac_cv_prog_AWK=gawk ac_cv_prog_CPP='gcc -E' ac_cv_prog_CXXCPP='g++ -E' ac_cv_prog_EMACS=emacs ac_cv_prog_ac_ct_CC=gcc ac_cv_prog_ac_ct_CXX=g++ ac_cv_prog_ac_ct_RANLIB=ranlib ac_cv_prog_cc_c89= ac_cv_prog_cc_g=yes ac_cv_prog_cxx_g=yes ac_cv_prog_make_make_set=yes ac_cv_safe_to_define___extensions__=yes ac_cv_sys_file_offset_bits=no ac_cv_sys_largefile_CC=no acl_cv_hardcode_direct=no acl_cv_hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' acl_cv_hardcode_libdir_separator= acl_cv_hardcode_minus_L=no acl_cv_libext=a acl_cv_libname_spec='lib$name' acl_cv_library_names_spec='$libname$shrext' acl_cv_path_LD=/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/ld acl_cv_prog_gnu_ld=yes acl_cv_rpath=done acl_cv_shlibext=so acl_cv_wl=-Wl, am_cv_CC_dependencies_compiler_type=gcc3 am_cv_CXX_dependencies_compiler_type=gcc3 am_cv_lispdir='${datadir}/emacs/site-lisp' am_cv_make_support_nested_variables=yes am_cv_prog_cc_c_o=yes gt_cv_func_CFLocaleCopyCurrent=no gt_cv_func_CFPreferencesCopyAppValue=no gt_cv_func_gnugettext1_libc=yes guix_cv_current_localstatedir=/usr/local/var guix_cv_libc_has_mount=yes guix_cv_libgcrypt_libdir=/gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib guix_cv_libgcrypt_usable_p=yes guix_cv_libz_libdir=/gnu/store/hsxhfmjgh8m4c0pavq3gd3gcrn8zrgxj-zlib-1.2.8/lib pkg_cv_GUILE_CFLAGS='-pthread -I/gnu/store/hyk2i7b8mwbrbiyqk5sgrfgds9zvcrn5-guile-2.0.11/include/guile/2.0' pkg_cv_GUILE_LIBS='-L/gnu/store/hyk2i7b8mwbrbiyqk5sgrfgds9zvcrn5-guile-2.0.11/lib -L/gnu/store/my4az71gz8iqd4w8kb34kq7vlk3fcvhm-libgc-7.4.2/lib -lguile-2.0 -lgc' pkg_cv_SQLITE3_CFLAGS=-I/gnu/store/y7h8gf890qaj6f23ryshwxd3r9y96cnc-sqlite-3.10.0/include pkg_cv_SQLITE3_LIBS='-L/gnu/store/y7h8gf890qaj6f23ryshwxd3r9y96cnc-sqlite-3.10.0/lib -lsqlite3' ## ----------------- ## ## Output variables. ## ## ----------------- ## ACLOCAL='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing aclocal-1.15' AMDEPBACKSLASH='\' AMDEP_FALSE='#' AMDEP_TRUE='' AMTAR='$${TAR-tar}' AM_BACKSLASH='\' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' AM_DEFAULT_VERBOSITY='0' AM_V='$(V)' AUTOCONF='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing autoconf' AUTOHEADER='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing autoheader' AUTOMAKE='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing automake-1.15' AWK='gawk' BUILD_DAEMON_FALSE='#' BUILD_DAEMON_OFFLOAD_FALSE='#' BUILD_DAEMON_OFFLOAD_TRUE='' BUILD_DAEMON_TRUE='' BUILD_SYSCALLS_MODULE_FALSE='#' BUILD_SYSCALLS_MODULE_TRUE='' BZIP2='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/bzip2' CAN_RUN_TESTS_FALSE='#' CAN_RUN_TESTS_TRUE='' CC='gcc' CCDEPMODE='depmode=gcc3' CFLAGS='-g -O2' CPP='gcc -E' CPPFLAGS='' CXX='g++' CXXCPP='g++ -E' CXXDEPMODE='depmode=gcc3' CXXFLAGS='-g -O2' CYGPATH_W='echo' DEFS='-DHAVE_CONFIG_H' DEPDIR='.deps' DOT='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing dot' DOT_USER_PROGRAM='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/dot' ECHO_C='' ECHO_N='-n' ECHO_T='' EGREP='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/grep -E' EMACS='emacs' EMACSLOADPATH='' EXEEXT='' GETTEXT_MACRO_VERSION='0.18' GMSGFMT='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt' GMSGFMT_015='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt' GREP='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/grep' GUILD='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guild' GUILE='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile' GUILE_CFLAGS='-pthread -I/gnu/store/hyk2i7b8mwbrbiyqk5sgrfgds9zvcrn5-guile-2.0.11/include/guile/2.0' GUILE_CONFIG='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guile-config' GUILE_LIBS='-L/gnu/store/hyk2i7b8mwbrbiyqk5sgrfgds9zvcrn5-guile-2.0.11/lib -L/gnu/store/my4az71gz8iqd4w8kb34kq7vlk3fcvhm-libgc-7.4.2/lib -lguile-2.0 -lgc' GUILE_TOOLS='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/guild' GUIX_TEST_ROOT='/home/sapientech/Dev/guix/guix_wip/test-tmp' GZIP='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/gzip' HAVE_EMACS_FALSE='#' HAVE_EMACS_TRUE='' HAVE_GUILE_JSON_FALSE='#' HAVE_GUILE_JSON_TRUE='' HELP2MAN='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing help2man' INSTALL_DATA='${INSTALL} -m 644' INSTALL_PROGRAM='${INSTALL}' INSTALL_SCRIPT='${INSTALL}' INSTALL_SRFI_37_FALSE='' INSTALL_SRFI_37_TRUE='#' INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' INTLLIBS='' INTL_MACOSX_LIBS='' LDFLAGS='' LIBGCRYPT='/gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib/libgcrypt' LIBGCRYPT_CFLAGS='' LIBGCRYPT_CONFIG='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/libgcrypt-config' LIBGCRYPT_LIBDIR='/gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib' LIBGCRYPT_LIBS='-L/gnu/store/7wfbprp1b9b25crlidg6h7b6hpib2b99-libgcrypt-1.6.5/lib -lgcrypt' LIBGCRYPT_PREFIX='no' LIBICONV='-liconv' LIBINTL='' LIBOBJS='' LIBS='' LIBZ='/gnu/store/hsxhfmjgh8m4c0pavq3gd3gcrn8zrgxj-zlib-1.2.8/lib/libz' LTLIBICONV='-liconv' LTLIBINTL='' LTLIBOBJS='' MAKEINFO='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/missing makeinfo' MKDIR_P='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/mkdir -p' MSGFMT='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt' MSGFMT_015='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgfmt' MSGMERGE='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/msgmerge' NIXPKGS='' NIX_HASH='' NIX_INSTANTIATE='nix-instantiate' NIX_PREFIX='' OBJEXT='o' PACKAGE='guix' PACKAGE_BUGREPORT='bug-guix@gnu.org' PACKAGE_NAME='GNU Guix' PACKAGE_STRING='GNU Guix 0.10.0' PACKAGE_TARNAME='guix' PACKAGE_URL='http://www.gnu.org/software/guix/' PACKAGE_VERSION='0.10.0' PATH_SEPARATOR=':' PKG_CONFIG='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/pkg-config' PKG_CONFIG_LIBDIR='' PKG_CONFIG_PATH='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/lib/pkgconfig::/home/sapientech/.guix-profile/lib/pkgconfig' POSUB='po' RANLIB='ranlib' SED='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/sed' SET_MAKE='' SHELL='/bin/sh' SQLITE3_CFLAGS='-I/gnu/store/y7h8gf890qaj6f23ryshwxd3r9y96cnc-sqlite-3.10.0/include' SQLITE3_LIBS='-L/gnu/store/y7h8gf890qaj6f23ryshwxd3r9y96cnc-sqlite-3.10.0/lib -lsqlite3' STRIP='' USE_NLS='yes' VERSION='0.10.0' XGETTEXT='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xgettext' XGETTEXT_015='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xgettext' XGETTEXT_EXTRA_OPTIONS='' XZ='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/xz' ac_ct_CC='gcc' ac_ct_CXX='g++' am__EXEEXT_FALSE='' am__EXEEXT_TRUE='#' am__fastdepCC_FALSE='#' am__fastdepCC_TRUE='' am__fastdepCXX_FALSE='#' am__fastdepCXX_TRUE='' am__include='include' am__isrc='' am__leading_dot='.' am__nodep='_no' am__quote='' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' bashcompletiondir='${sysconfdir}/bash_completion.d' bindir='${exec_prefix}/bin' build='x86_64-unknown-linux-gnu' build_alias='' build_cpu='x86_64' build_os='linux-gnu' build_vendor='unknown' datadir='${datarootdir}' datarootdir='${prefix}/share' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' dvidir='${docdir}' emacsuidir='${prefix}/share/guile/site/2.0/guix/emacs' exec_prefix='${prefix}' guilemoduledir='${prefix}/share/guile/site/2.0' guix_localstatedir='/usr/local/var' guix_sbindir='/usr/local/sbin' guix_sysconfdir='/usr/local/etc' guix_system='x86_64-linux' host='x86_64-unknown-linux-gnu' host_alias='' host_cpu='x86_64' host_os='linux-gnu' host_vendor='unknown' htmldir='${docdir}' includedir='${prefix}/include' infodir='${datarootdir}/info' install_sh='${SHELL} /home/sapientech/Dev/guix/guix_wip/build-aux/install-sh' libdir='${exec_prefix}/lib' libexecdir='${exec_prefix}/libexec' lispdir='${datadir}/emacs/site-lisp' localedir='${datarootdir}/locale' localstatedir='${prefix}/var' mandir='${datarootdir}/man' mkdir_p='/gnu/store/20qsgil18h1k3znqx52wjzy1kfiwqgdp-profile/bin/mkdir -p' oldincludedir='/usr/include' pdfdir='${docdir}' prefix='/usr/local' program_transform_name='s,x,x,' psdir='${docdir}' sbindir='${exec_prefix}/sbin' sharedstatedir='${prefix}/com' storedir='/gnu/store' sysconfdir='${prefix}/etc' target_alias='' ## ----------- ## ## confdefs.h. ## ## ----------- ## /* confdefs.h */ #define PACKAGE_NAME "GNU Guix" #define PACKAGE_TARNAME "guix" #define PACKAGE_VERSION "0.10.0" #define PACKAGE_STRING "GNU Guix 0.10.0" #define PACKAGE_BUGREPORT "bug-guix@gnu.org" #define PACKAGE_URL "http://www.gnu.org/software/guix/" #define PACKAGE "guix" #define VERSION "0.10.0" #define STDC_HEADERS 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_SYS_STAT_H 1 #define HAVE_STDLIB_H 1 #define HAVE_STRING_H 1 #define HAVE_MEMORY_H 1 #define HAVE_STRINGS_H 1 #define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 #define HAVE_UNISTD_H 1 #define __EXTENSIONS__ 1 #define _ALL_SOURCE 1 #define _GNU_SOURCE 1 #define _POSIX_PTHREAD_SEMANTICS 1 #define _TANDEM_SOURCE 1 #define ENABLE_NLS 1 #define HAVE_GETTEXT 1 #define HAVE_DCGETTEXT 1 #define HAVE_BZLIB_H 1 #define NIX_VERSION "0.0.0" #define SYSTEM "x86_64-linux" #define HAVE_CHROOT 1 #define HAVE_UNSHARE 1 #define HAVE_SCHED_H 1 #define HAVE_SYS_PARAM_H 1 #define HAVE_SYS_MOUNT_H 1 #define HAVE_SYS_SYSCALL_H 1 #define HAVE_LUTIMES 1 #define HAVE_LCHOWN 1 #define HAVE_POSIX_FALLOCATE 1 #define HAVE_SCHED_SETAFFINITY 1 #define HAVE_STATVFS 1 #define HAVE_NANOSLEEP 1 #define HAVE_STRSIGNAL 1 #define CAN_LINK_SYMLINK 1 #define HAVE_LOCALE 1 #define HAVE_SYS_PERSONALITY_H 1 #define HAVE_LINUX_FS_H 1 #define GUIX_SUBSTITUTE_URLS "https://mirror.hydra.gnu.org" #define HAVE_DAEMON_OFFLOAD_HOOK 1 configure: exit 0 --MP_/RfwZ3bl.=e6TtpTaWZdR65C Content-Type: application/octet-stream; name=config.status Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=config.status IyEgL2Jpbi9zaAojIEdlbmVyYXRlZCBieSBjb25maWd1cmUuCiMgUnVuIHRoaXMgZmlsZSB0byBy ZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgojIENvbXBpbGVyIG91dHB1dCBwcm9k dWNlZCBieSBjb25maWd1cmUsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCiMgY29uZmlndXJlLCBpcyBp biBjb25maWcubG9nIGlmIGl0IGV4aXN0cy4KCmRlYnVnPWZhbHNlCmFjX2NzX3JlY2hlY2s9ZmFs c2UKYWNfY3Nfc2lsZW50PWZhbHNlCgpTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQpleHBv cnQgU0hFTEwKIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIyMgTTRzaCBJbml0aWFsaXphdGlv bi4gIyMKIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKCiMgQmUgbW9yZSBCb3VybmUgY29tcGF0 aWJsZQpEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCmlmIHRlc3QgLW4g IiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhl biA6CiAgZW11bGF0ZSBzaAogIE5VTExDTUQ9OgogICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2gg ZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAogICMgaXMgY29udHJhcnkgdG8g b3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCiAgYWxpYXMgLWcgJyR7MSsiJEAifSc9 JyIkQCInCiAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKZWxzZQogIGNhc2UgYChzZXQgLW8pIDI+L2Rl di9udWxsYCBpbiAjKAogICpwb3NpeCopIDoKICAgIHNldCAtbyBwb3NpeCA7OyAjKAogICopIDoK ICAgICA7Owplc2FjCmZpCgoKYXNfbmw9JwonCmV4cG9ydCBhc19ubAojIFByaW50aW5nIGEgbG9u ZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgphc19lY2hvPSdcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJwphc19lY2hvPSRhc19l Y2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KYXNfZWNobz0kYXNfZWNobyRhc19l Y2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KIyBQcmVmZXIgYSBrc2ggc2hlbGwg YnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCiMgYnV0 IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCmlmIHRlc3QgLXogIiRCQVNI X1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19l Y2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KICBhc19lY2hvPSdwcmludCAt ciAtLScKICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKZWxpZiAodGVzdCAiWGBwcmludGYgJXMg JGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgogIGFzX2VjaG89J3By aW50ZiAlc1xuJwogIGFzX2VjaG9fbj0ncHJpbnRmICVzJwplbHNlCiAgaWYgdGVzdCAiWGAoL3Vz ci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8i OyB0aGVuCiAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwi JwogICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJwogIGVsc2UKICAgIGFzX2VjaG9fYm9k eT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCiAgICBhc19lY2hvX25fYm9keT0nZXZh bAogICAgICBhcmc9JDE7CiAgICAgIGNhc2UgJGFyZyBpbiAjKAogICAgICAqIiRhc19ubCIqKQoJ ZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7Cglhcmc9YGV4cHIgIlgkYXJnIiA6ICIu KiRhc19ubFxcKC4qXFwpImA7OwogICAgICBlc2FjOwogICAgICBleHByICJYJGFyZyIgOiAiWFxc KC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCiAgICAnCiAgICBleHBvcnQgYXNfZWNob19uX2JvZHkK ICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCiAgZmkKICBleHBv cnQgYXNfZWNob19ib2R5CiAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJwpm aQoKIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCmlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Ir c2V0fSIgIT0gc2V0OyB0aGVuCiAgUEFUSF9TRVBBUkFUT1I9OgogIChQQVRIPScvYmluOy9iaW4n OyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKICAgIChQQVRIPScv YmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CiAgICAg IFBBVEhfU0VQQVJBVE9SPSc7JwogIH0KZmkKCgojIElGUwojIFdlIG5lZWQgc3BhY2UsIHRhYiBh bmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcwojIHRoZXJl IHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KIyAo SWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlz YWJsZSB3b3JkCiMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKSUZT PSIgIiIJJGFzX25sIgoKIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdl IGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KYXNfbXlzZWxmPQpjYXNlICQwIGluICMo KAogICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9 JFBBVEhfU0VQQVJBVE9SCmZvciBhc19kaXIgaW4gJFBBVEgKZG8KICBJRlM9JGFzX3NhdmVfSUZT CiAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgIHRlc3QgLXIgIiRhc19kaXIvJDAi ICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCiAgZG9uZQpJRlM9JGFzX3NhdmVfSUZT CgogICAgIDs7CmVzYWMKIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5 IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJwojIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0 byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgog IGFzX215c2VsZj0kMApmaQppZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCiAgJGFzX2Vj aG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4g YWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKICBleGl0IDEKZmkKCiMgVW5zZXQgdmFyaWFibGVzIHRo YXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KIyBwcmUtMy4w IFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwg ZXhpdCAxIgojIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhl cmUuICAnKCgnIGNvdWxkCiMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCmZvciBhc192 YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFy K3NldH0gPSB4c2V0IFwKICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251 bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKZG9uZQpQUzE9JyQgJwpQUzI9Jz4gJwpQUzQ9 JysgJwoKIyBOTFMgbnVpc2FuY2VzLgpMQ19BTEw9QwpleHBvcnQgTENfQUxMCkxBTkdVQUdFPUMK ZXhwb3J0IExBTkdVQUdFCgojIENEUEFUSC4KKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYx ICYmIHVuc2V0IENEUEFUSAoKCiMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9H X0ZEXQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBPdXRwdXQg ImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5kIExP R19GRCBhcmUKIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVm ZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCiMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2lu ZyAxIGlmIHRoYXQgd2FzIDAuCmFzX2ZuX2Vycm9yICgpCnsKICBhc19zdGF0dXM9JDE7IHRlc3Qg JGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQogIGlmIHRlc3QgIiQ0IjsgdGhlbgogICAg YXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3Rh Y2s9JGFzX2xpbmVub19zdGFjawogICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogZXJyb3I6ICQyIiA+JiQ0CiAgZmkKICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIi ID4mMgogIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cwp9ICMgYXNfZm5fZXJyb3IKCgojIGFzX2ZuX3Nl dF9zdGF0dXMgU1RBVFVTCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBTZXQgJD8gdG8gU1RB VFVTLCB3aXRob3V0IGZvcmtpbmcuCmFzX2ZuX3NldF9zdGF0dXMgKCkKewogIHJldHVybiAkMQp9 ICMgYXNfZm5fc2V0X3N0YXR1cwoKIyBhc19mbl9leGl0IFNUQVRVUwojIC0tLS0tLS0tLS0tLS0t LS0tCiMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAi c2V0IC1lIiBjb250ZXh0Lgphc19mbl9leGl0ICgpCnsKICBzZXQgK2UKICBhc19mbl9zZXRfc3Rh dHVzICQxCiAgZXhpdCAkMQp9ICMgYXNfZm5fZXhpdAoKIyBhc19mbl91bnNldCBWQVIKIyAtLS0t LS0tLS0tLS0tLS0KIyBQb3J0YWJseSB1bnNldCBWQVIuCmFzX2ZuX3Vuc2V0ICgpCnsKICB7IGV2 YWwgJDE9OyB1bnNldCAkMTt9Cn0KYXNfdW5zZXQ9YXNfZm5fdW5zZXQKIyBhc19mbl9hcHBlbmQg VkFSIFZBTFVFCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFwcGVuZCB0aGUgdGV4dCBpbiBW QUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UK IyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6 ZWQgbGluZWFyIGdyb3d0aCBvdmVyCiMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUg dHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKIyBpbXBsZW1lbnRhdGlv bnMuCmlmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIp IDI+L2Rldi9udWxsOyB0aGVuIDoKICBldmFsICdhc19mbl9hcHBlbmQgKCkKICB7CiAgICBldmFs ICQxKz1cJDIKICB9JwplbHNlCiAgYXNfZm5fYXBwZW5kICgpCiAgewogICAgZXZhbCAkMT1cJCQx XCQyCiAgfQpmaSAjIGFzX2ZuX2FwcGVuZAoKIyBhc19mbl9hcml0aCBBUkcuLi4KIyAtLS0tLS0t LS0tLS0tLS0tLS0KIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywg YW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCiMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50 YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cwojIG11c3Qg YmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgppZiAoZXZhbCAidGVzdCBcJCgoIDEg KyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKICBldmFsICdhc19mbl9hcml0aCAoKQog IHsKICAgIGFzX3ZhbD0kKCggJCogKSkKICB9JwplbHNlCiAgYXNfZm5fYXJpdGggKCkKICB7CiAg ICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAogIH0KZmkgIyBhc19mbl9hcml0 aAoKCmlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCiAgIHRlc3QgIlhgZXhw ciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCiAgYXNfZXhwcj1leHByCmVsc2UK ICBhc19leHByPWZhbHNlCmZpCgppZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYm IHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCiAgYXNfYmFzZW5hbWU9 YmFzZW5hbWUKZWxzZQogIGFzX2Jhc2VuYW1lPWZhbHNlCmZpCgppZiAoYXNfZGlyPWBkaXJuYW1l IC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICBh c19kaXJuYW1lPWRpcm5hbWUKZWxzZQogIGFzX2Rpcm5hbWU9ZmFsc2UKZmkKCmFzX21lPWAkYXNf YmFzZW5hbWUgLS0gIiQwIiB8fAokYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8q JCcgXHwgXAoJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCgkgWCIkMCIgOiAnWFwoL1wpJyBcfCAu IDI+L2Rldi9udWxsIHx8CiRhc19lY2hvIFgvIiQwIiB8CiAgICBzZWQgJy9eLipcL1woW14vXVte L10qXClcLyokL3sKCSAgICBzLy9cMS8KCSAgICBxCgkgIH0KCSAgL15YXC9cKFwvXC9cKSQvewoJ ICAgIHMvL1wxLwoJICAgIHEKCSAgfQoJICAvXlhcL1woXC9cKS4qL3sKCSAgICBzLy9cMS8KCSAg ICBxCgkgIH0KCSAgcy8uKi8uLzsgcSdgCgojIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3Rl ciBSYW5nZXMuCmFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Jwphc19j cl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKYXNfY3JfTGV0dGVycz0kYXNf Y3JfbGV0dGVycyRhc19jcl9MRVRURVJTCmFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKYXNfY3Jf YWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCgpFQ0hPX0M9IEVDSE9fTj0gRUNIT19U PQpjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAotbiopCiAgY2FzZSBgZWNobyAneHlcYydgIGlu CiAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCiAg eHkpICBFQ0hPX0M9J1xjJzs7CiAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4x YCA+IC9kZXYvbnVsbAogICAgICAgRUNIT19UPScJJzs7CiAgZXNhYzs7CiopCiAgRUNIT19OPSct bic7Owplc2FjCgpybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQppZiB0ZXN0IC1k IGNvbmYkJC5kaXI7IHRoZW4KICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCmVsc2UKICBy bSAtZiBjb25mJCQuZGlyCiAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbApmaQppZiAoZWNo byA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCiAgaWYgbG4gLXMgY29uZiQkLmZpbGUg Y29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCiAgICBhc19sbl9zPSdsbiAtcycKICAgICMgLi4uIGJ1 dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CiAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZp bGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgogICAgIyAyKSBESkdQUCA8IDIuMDQgaGFz IG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCiAgICAj IEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXBSJy4KICAgIGxuIC1z IGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5l eGUgfHwKICAgICAgYXNfbG5fcz0nY3AgLXBSJwogIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQk IDI+L2Rldi9udWxsOyB0aGVuCiAgICBhc19sbl9zPWxuCiAgZWxzZQogICAgYXNfbG5fcz0nY3Ag LXBSJwogIGZpCmVsc2UKICBhc19sbl9zPSdjcCAtcFInCmZpCnJtIC1mIGNvbmYkJCBjb25mJCQu ZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKcm1kaXIgY29uZiQkLmRpciAy Pi9kZXYvbnVsbAoKCiMgYXNfZm5fbWtkaXJfcAojIC0tLS0tLS0tLS0tLS0KIyBDcmVhdGUgIiRh c19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCmFz X2ZuX21rZGlyX3AgKCkKewoKICBjYXNlICRhc19kaXIgaW4gIygKICAtKikgYXNfZGlyPS4vJGFz X2Rpcjs7CiAgZXNhYwogIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwg ewogICAgYXNfZGlycz0KICAgIHdoaWxlIDo7IGRvCiAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAog ICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxc XFwnJy9nImA7OyAjJygKICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKICAgICAgZXNhYwogICAg ICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgogICAgICBhc19kaXI9YCRhc19kaXJuYW1l IC0tICIkYXNfZGlyIiB8fAokYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14v XVteL10qLyokJyBcfCBcCgkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAoJIFgiJGFz X2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9k ZXYvbnVsbCB8fAokYXNfZWNobyBYIiRhc19kaXIiIHwKICAgIHNlZCAnL15YXCguKlteL11cKVwv XC8qW14vXVteL10qXC8qJC97CgkgICAgcy8vXDEvCgkgICAgcQoJICB9CgkgIC9eWFwoXC9cL1wp W14vXS4qL3sKCSAgICBzLy9cMS8KCSAgICBxCgkgIH0KCSAgL15YXChcL1wvXCkkL3sKCSAgICBz Ly9cMS8KCSAgICBxCgkgIH0KCSAgL15YXChcL1wpLiovewoJICAgIHMvL1wxLwoJICAgIHEKCSAg fQoJICBzLy4qLy4vOyBxJ2AKICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKICAgIGRv bmUKICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKICB9IHx8 IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVj dG9yeSAkYXNfZGlyIgoKCn0gIyBhc19mbl9ta2Rpcl9wCmlmIG1rZGlyIC1wIC4gMj4vZGV2L251 bGw7IHRoZW4KICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCmVsc2UKICB0ZXN0IC1k IC4vLXAgJiYgcm1kaXIgLi8tcAogIGFzX21rZGlyX3A9ZmFsc2UKZmkKCgojIGFzX2ZuX2V4ZWN1 dGFibGVfcCBGSUxFCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUZXN0IGlmIEZJTEUgaXMg YW4gZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCmFzX2ZuX2V4ZWN1dGFibGVfcCAoKQp7CiAgdGVz dCAtZiAiJDEiICYmIHRlc3QgLXggIiQxIgp9ICMgYXNfZm5fZXhlY3V0YWJsZV9wCmFzX3Rlc3Rf eD0ndGVzdCAteCcKYXNfZXhlY3V0YWJsZV9wPWFzX2ZuX2V4ZWN1dGFibGVfcAoKIyBTZWQgZXhw cmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgphc190cl9jcHA9 ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2Ny X2FsbnVtXSVfJWcnIgoKIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZh bGlkIHZhcmlhYmxlIG5hbWUuCmFzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNf Y3JfYWxudW1dJV8lZyciCgoKZXhlYyA2PiYxCiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tICMjCiMjIE1haW4gYm9keSBvZiAkQ09ORklHX1NUQVRVUyBzY3JpcHQuICMjCiMj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiMgU2F2ZSB0aGUgbG9nIG1l c3NhZ2UsIHRvIGtlZXAgJDAgYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bwojIHJlcG9ydCBh Y3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIK IyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KYWNfbG9nPSIKVGhpcyBmaWxlIHdhcyBl eHRlbmRlZCBieSBHTlUgR3VpeCAkYXNfbWUgMC4xMC4wLCB3aGljaCB3YXMKZ2VuZXJhdGVkIGJ5 IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCgogIENPTkZJ R19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hF QURFUlMKICBDT05GSUdfTElOS1MgICAgPSAkQ09ORklHX0xJTktTCiAgQ09ORklHX0NPTU1BTkRT ID0gJENPTkZJR19DT01NQU5EUwogICQgJDAgJEAKCm9uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4p IDI+L2Rldi9udWxsIHwgc2VkIDFxYAoiCgojIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMg bWFkZSBmb3IuCmNvbmZpZ19maWxlcz0iIG5peC9zY3JpcHRzL2xpc3QtcnVudGltZS1yb290cyBu aXgvc2NyaXB0cy9zdWJzdGl0dXRlIG5peC9zY3JpcHRzL2d1aXgtYXV0aGVudGljYXRlIG5peC9z Y3JpcHRzL29mZmxvYWQgTWFrZWZpbGUgcG8vZ3VpeC9NYWtlZmlsZS5pbiBwby9wYWNrYWdlcy9N YWtlZmlsZS5pbiBndWl4L2NvbmZpZy5zY20gc2NyaXB0cy9ndWl4IHRlc3QtZW52OmJ1aWxkLWF1 eC90ZXN0LWVudi5pbiBwcmUtaW5zdC1lbnY6YnVpbGQtYXV4L3ByZS1pbnN0LWVudi5pbiBlbWFj cy9ndWl4LWNvbmZpZy5lbCBlbWFjcy9ndWl4LWhlbHBlci5zY20iCmNvbmZpZ19oZWFkZXJzPSIg bml4L2NvbmZpZy5oIgpjb25maWdfY29tbWFuZHM9IiBkZXBmaWxlcyBwby1kaXJlY3RvcmllcyIK CmFjX2NzX3VzYWdlPSJcClxgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNv bmZpZ3VyYXRpb24gYWN0aW9ucwpmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJl bnQgY29uZmlndXJhdGlvbi4gIFVubGVzcyB0aGUgZmlsZXMKYW5kIGFjdGlvbnMgYXJlIHNwZWNp ZmllZCBhcyBUQUdzLCBhbGwgYXJlIGluc3RhbnRpYXRlZCBieSBkZWZhdWx0LgoKVXNhZ2U6ICQw IFtPUFRJT05dLi4uIFtUQUddLi4uCgogIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxw LCB0aGVuIGV4aXQKICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBj b25maWd1cmF0aW9uIHNldHRpbmdzLCB0aGVuIGV4aXQKICAgICAgLS1jb25maWcgICAgIHByaW50 IGNvbmZpZ3VyYXRpb24sIHRoZW4gZXhpdAogIC1xLCAtLXF1aWV0LCAtLXNpbGVudAogICAgICAg ICAgICAgICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCiAgLWQsIC0tZGVidWcg ICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCiAgICAgIC0tcmVjaGVjayAgICB1cGRh dGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucwogICAgICAt LWZpbGU9RklMRVs6VEVNUExBVEVdCiAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUg Y29uZmlndXJhdGlvbiBmaWxlIEZJTEUKICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCiAg ICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklM RQoKQ29uZmlndXJhdGlvbiBmaWxlczoKJGNvbmZpZ19maWxlcwoKQ29uZmlndXJhdGlvbiBoZWFk ZXJzOgokY29uZmlnX2hlYWRlcnMKCkNvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiRjb25maWdfY29t bWFuZHMKClJlcG9ydCBidWdzIHRvIDxidWctZ3VpeEBnbnUub3JnPi4KR05VIEd1aXggaG9tZSBw YWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2d1aXgvPi4KR2VuZXJhbCBoZWxwIHVz aW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uIgoKYWNfY3Nf Y29uZmlnPSInUEtHX0NPTkZJR19QQVRIPS9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndq enkxa2Zpd3FnZHAtcHJvZmlsZS9saWIvcGtnY29uZmlnOjovaG9tZS9zYXBpZW50ZWNoLy5ndWl4 LXByb2ZpbGUvbGliL3BrZ2NvbmZpZyciCmFjX2NzX3ZlcnNpb249IlwKR05VIEd1aXggY29uZmln LnN0YXR1cyAwLjEwLjAKY29uZmlndXJlZCBieSAuL2NvbmZpZ3VyZSwgZ2VuZXJhdGVkIGJ5IEdO VSBBdXRvY29uZiAyLjY5LAogIHdpdGggb3B0aW9ucyBcIiRhY19jc19jb25maWdcIgoKQ29weXJp Z2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpUaGlzIGNvbmZpZy5z dGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24KZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9k aWZ5IGl0LiIKCmFjX3B3ZD0nL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcCcKc3Jj ZGlyPScuJwpJTlNUQUxMPScvZ251L3N0b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3anp5MWtmaXdx Z2RwLXByb2ZpbGUvYmluL2luc3RhbGwgLWMnCk1LRElSX1A9Jy9nbnUvc3RvcmUvMjBxc2dpbDE4 aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9iaW4vbWtkaXIgLXAnCkFXSz0nZ2F3aycK dGVzdCAtbiAiJEFXSyIgfHwgQVdLPWF3awojIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRo ZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCmFjX25lZWRfZGVmYXVsdHM9Ogp3aGls ZSB0ZXN0ICQjICE9IDAKZG8KICBjYXNlICQxIGluCiAgLS0qPT8qKQogICAgYWNfb3B0aW9uPWBl eHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKICAgIGFjX29wdGFyZz1gZXhwciAiWCQxIiA6ICdY W149XSo9XCguKlwpJ2AKICAgIGFjX3NoaWZ0PToKICAgIDs7CiAgLS0qPSkKICAgIGFjX29wdGlv bj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCiAgICBhY19vcHRhcmc9CiAgICBhY19zaGlm dD06CiAgICA7OwogICopCiAgICBhY19vcHRpb249JDEKICAgIGFjX29wdGFyZz0kMgogICAgYWNf c2hpZnQ9c2hpZnQKICAgIDs7CiAgZXNhYwoKICBjYXNlICRhY19vcHRpb24gaW4KICAjIEhhbmRs aW5nIG9mIHRoZSBvcHRpb25zLgogIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAt LXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQogICAgYWNfY3NfcmVjaGVjaz06 IDs7CiAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAt LXZlIHwgLS12IHwgLVYgKQogICAgJGFzX2VjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7Owog IC0tY29uZmlnIHwgLS1jb25maSB8IC0tY29uZiB8IC0tY29uIHwgLS1jbyB8IC0tYyApCiAgICAk YXNfZWNobyAiJGFjX2NzX2NvbmZpZyI7IGV4aXQgOzsKICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1k ZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQogICAgZGVidWc9OiA7OwogIC0tZmlsZSB8IC0tZmlsIHwg LS1maSB8IC0tZiApCiAgICAkYWNfc2hpZnQKICAgIGNhc2UgJGFjX29wdGFyZyBpbgogICAgKlwn KikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwn Jy9nImAgOzsKICAgICcnKSBhc19mbl9lcnJvciAkPyAibWlzc2luZyBmaWxlIGFyZ3VtZW50IiA7 OwogICAgZXNhYwogICAgYXNfZm5fYXBwZW5kIENPTkZJR19GSUxFUyAiICckYWNfb3B0YXJnJyIK ICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OwogIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVh ZCB8IC0taGVhICkKICAgICRhY19zaGlmdAogICAgY2FzZSAkYWNfb3B0YXJnIGluCiAgICAqXCcq KSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcn L2ciYCA7OwogICAgZXNhYwogICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19v cHRhcmcnIgogICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CiAgLS1oZSB8IC0taCkKICAgICMg Q29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCiAgICBhc19mbl9lcnJvciAkPyAi YW1iaWd1b3VzIG9wdGlvbjogXGAkMScKVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1h dGlvbi4iOzsKICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKICAgICRhc19lY2hvICIkYWNfY3NfdXNh Z2UiOyBleGl0IDs7CiAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAt LXF1IHwgLS1xIFwKICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAt LXNpbCB8IC0tc2kgfCAtLXMpCiAgICBhY19jc19zaWxlbnQ9OiA7OwoKICAjIFRoaXMgaXMgYW4g ZXJyb3IuCiAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCQxJwpU cnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgOzsKCiAgKikgYXNfZm5fYXBw ZW5kIGFjX2NvbmZpZ190YXJnZXRzICIgJDEiCiAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7 OwoKICBlc2FjCiAgc2hpZnQKZG9uZQoKYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9CgppZiAkYWNf Y3Nfc2lsZW50OyB0aGVuCiAgZXhlYyA2Pi9kZXYvbnVsbAogIGFjX2NvbmZpZ3VyZV9leHRyYV9h cmdzPSIkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1zaWxlbnQiCmZpCgppZiAkYWNfY3NfcmVj aGVjazsgdGhlbgogIHNldCBYIC9iaW4vc2ggJy4vY29uZmlndXJlJyAgJ1BLR19DT05GSUdfUEFU SD0vZ251L3N0b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3anp5MWtmaXdxZ2RwLXByb2ZpbGUvbGli L3BrZ2NvbmZpZzo6L2hvbWUvc2FwaWVudGVjaC8uZ3VpeC1wcm9maWxlL2xpYi9wa2djb25maWcn ICRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgogIHNo aWZ0CiAgJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPS9iaW4vc2ggJCoiID4mNgogIENP TkZJR19TSEVMTD0nL2Jpbi9zaCcKICBleHBvcnQgQ09ORklHX1NIRUxMCiAgZXhlYyAiJEAiCmZp CgpleGVjIDU+PmNvbmZpZy5sb2cKewogIGVjaG8KICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMg LztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAojIyBSdW5uaW5nICRhc19tZS4gIyMKX0FT Qk9YCiAgJGFzX2VjaG8gIiRhY19sb2ciCn0gPiY1CgojCiMgSU5JVC1DT01NQU5EUwojCkFNREVQ X1RSVUU9IiIgYWNfYXV4X2Rpcj0iYnVpbGQtYXV4IgojIENhcHR1cmUgdGhlIHZhbHVlIG9mIG9i c29sZXRlIEFMTF9MSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlCiAgICAjIFBP RklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMsIENBVEFMT0dTLiBC dXQgaGlkZSBpdAogICAgIyBmcm9tIGF1dG9tYWtlIDwgMS41LgogICAgZXZhbCAnT0JTT0xFVEVf QUxMX0xJTkdVQVMnJz0iIicKICAgICMgQ2FwdHVyZSB0aGUgdmFsdWUgb2YgTElOR1VBUyBiZWNh dXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZSBDQVRBTE9HUy4KICAgIExJTkdVQVM9IiVVTlNFVCUi CgoKCiMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgpmb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNf Y29uZmlnX3RhcmdldHMKZG8KICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluCiAgICAiZGVwZmls ZXMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVwZmlsZXMiIDs7CiAgICAi cG8tZGlyZWN0b3JpZXMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgcG8tZGly ZWN0b3JpZXMiIDs7CiAgICAibml4L2NvbmZpZy5oIikgQ09ORklHX0hFQURFUlM9IiRDT05GSUdf SEVBREVSUyBuaXgvY29uZmlnLmgiIDs7CiAgICAibml4L3NjcmlwdHMvbGlzdC1ydW50aW1lLXJv b3RzIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG5peC9zY3JpcHRzL2xpc3QtcnVudGlt ZS1yb290cyIgOzsKICAgICJuaXgvc2NyaXB0cy9zdWJzdGl0dXRlIikgQ09ORklHX0ZJTEVTPSIk Q09ORklHX0ZJTEVTIG5peC9zY3JpcHRzL3N1YnN0aXR1dGUiIDs7CiAgICAibml4L3NjcmlwdHMv Z3VpeC1hdXRoZW50aWNhdGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbml4L3Njcmlw dHMvZ3VpeC1hdXRoZW50aWNhdGUiIDs7CiAgICAibml4L3NjcmlwdHMvb2ZmbG9hZCIpIENPTkZJ R19GSUxFUz0iJENPTkZJR19GSUxFUyBuaXgvc2NyaXB0cy9vZmZsb2FkIiA7OwogICAgIk1ha2Vm aWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OwogICAgInBvL2d1 aXgvTWFrZWZpbGUuaW4iKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcG8vZ3VpeC9NYWtl ZmlsZS5pbiIgOzsKICAgICJwby9wYWNrYWdlcy9NYWtlZmlsZS5pbiIpIENPTkZJR19GSUxFUz0i JENPTkZJR19GSUxFUyBwby9wYWNrYWdlcy9NYWtlZmlsZS5pbiIgOzsKICAgICJndWl4L2NvbmZp Zy5zY20iKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3VpeC9jb25maWcuc2NtIiA7Owog ICAgInNjcmlwdHMvZ3VpeCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzY3JpcHRzL2d1 aXgiIDs7CiAgICAidGVzdC1lbnYiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC1l bnY6YnVpbGQtYXV4L3Rlc3QtZW52LmluIiA7OwogICAgInByZS1pbnN0LWVudiIpIENPTkZJR19G SUxFUz0iJENPTkZJR19GSUxFUyBwcmUtaW5zdC1lbnY6YnVpbGQtYXV4L3ByZS1pbnN0LWVudi5p biIgOzsKICAgICJlbWFjcy9ndWl4LWNvbmZpZy5lbCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19G SUxFUyBlbWFjcy9ndWl4LWNvbmZpZy5lbCIgOzsKICAgICJlbWFjcy9ndWl4LWhlbHBlci5zY20i KSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZW1hY3MvZ3VpeC1oZWxwZXIuc2NtIiA7OwoK ICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3Rhcmdl dCciICIkTElORU5PIiA1OzsKICBlc2FjCmRvbmUKCgojIElmIHRoZSB1c2VyIGRpZCBub3QgdXNl IHRoZSBhcmd1bWVudHMgdG8gc3BlY2lmeSB0aGUgaXRlbXMgdG8gaW5zdGFudGlhdGUsCiMgdGhl biB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUg bm90LgojIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJl Y2F1c2Ugb2YgYW4gZXh0cmVtZWx5CiMgYml6YXJyZSBidWcgb24gU3VuT1MgNC4xLjMuCmlmICRh Y19uZWVkX2RlZmF1bHRzOyB0aGVuCiAgdGVzdCAiJHtDT05GSUdfRklMRVMrc2V0fSIgPSBzZXQg fHwgQ09ORklHX0ZJTEVTPSRjb25maWdfZmlsZXMKICB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3Nl dH0iID0gc2V0IHx8IENPTkZJR19IRUFERVJTPSRjb25maWdfaGVhZGVycwogIHRlc3QgIiR7Q09O RklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1h bmRzCmZpCgojIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1h a2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFz b24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAojIGNyZWF0aW5nIGFu ZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCiMg SG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KIyBOb3RlIHRoYXQgdGhlcmUg aXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVh bmVkOgojIGFmdGVyIGl0cyBjcmVhdGlvbiBidXQgYmVmb3JlIGl0cyBuYW1lIGhhcyBiZWVuIGFz c2lnbmVkIHRvIGAkdG1wJy4KJGRlYnVnIHx8CnsKICB0bXA9IGFjX3RtcD0KICB0cmFwICdleGl0 X3N0YXR1cz0kPwogIDogIiR7YWNfdG1wOj0kdG1wfSIKICB7IHRlc3QgISAtZCAiJGFjX3RtcCIg fHwgcm0gLWZyICIkYWNfdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cwonIDAKICB0cmFwICdh c19mbl9leGl0IDEnIDEgMiAxMyAxNQp9CiMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9y eSBmb3IgdG1wIGZpbGVzLgoKewogIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29u ZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgogIHRlc3QgLWQgIiR0bXAiCn0gIHx8CnsKICB0bXA9 Li9jb25mJCQtJFJBTkRPTQogICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiKQp9IHx8IGFzX2Zu X2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJ TkVOTyIgNQphY190bXA9JHRtcAoKIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxF UyBzZWN0aW9uLgojIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09O RklHX0ZJTEVTLgojIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3Rh dHVzIGNvbmZpZy5oJy4KaWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KCgphY19jcj1g ZWNobyBYIHwgdHIgWCAnXDAxNSdgCiMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRl IGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KIyBCdXQgd2Uga25vdyBvZiBubyBvdGhl ciBzaGVsbCB3aGVyZSBhY19jciB3b3VsZCBiZSBlbXB0eSBhdCB0aGlzCiMgcG9pbnQsIHNvIHdl IGNhbiB1c2UgYSBiYXNoaXNtIGFzIGEgZmFsbGJhY2suCmlmIHRlc3QgIngkYWNfY3IiID0geDsg dGhlbgogIGV2YWwgYWNfY3I9XCRcJ1xcclwnCmZpCmFjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4g eyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKaWYgdGVzdCAiJGFjX2Nz X2F3a19jciIgPSAiYSR7YWNfY3J9YiI7IHRoZW4KICBhY19jc19hd2tfY3I9J1xccicKZWxzZQog IGFjX2NzX2F3a19jcj0kYWNfY3IKZmkKCmVjaG8gJ0JFR0lOIHsnID4iJGFjX3RtcC9zdWJzMS5h d2siICYmCmNhdCA+PiIkYWNfdG1wL3N1YnMxLmF3ayIgPDxcX0FDQVdLICYmClNbImFtX19FWEVF WFRfRkFMU0UiXT0iIgpTWyJhbV9fRVhFRVhUX1RSVUUiXT0iIyIKU1siTFRMSUJPQkpTIl09IiIK U1siTElCT0JKUyJdPSIiClNbImVtYWNzdWlkaXIiXT0iJHtwcmVmaXh9L3NoYXJlL2d1aWxlL3Np dGUvMi4wL2d1aXgvZW1hY3MiClNbIkhBVkVfRU1BQ1NfRkFMU0UiXT0iIyIKU1siSEFWRV9FTUFD U19UUlVFIl09IiIKU1sibGlzcGRpciJdPSIke2RhdGFkaXJ9L2VtYWNzL3NpdGUtbGlzcCIKU1si RU1BQ1NMT0FEUEFUSCJdPSIiClNbIkVNQUNTIl09ImVtYWNzIgpTWyJET1RfVVNFUl9QUk9HUkFN Il09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9i aW4vZG90IgpTWyJIRUxQMk1BTiJdPSIke1NIRUxMfSAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4 L2d1aXhfd2lwL2J1aWxkLWF1eC9taXNzaW5nIGhlbHAybWFuIgpTWyJET1QiXT0iJHtTSEVMTH0g L2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC9idWlsZC1hdXgvbWlzc2luZyBkb3Qi ClNbIkJVSUxEX0RBRU1PTl9PRkZMT0FEX0ZBTFNFIl09IiMiClNbIkJVSUxEX0RBRU1PTl9PRkZM T0FEX1RSVUUiXT0iIgpTWyJCVUlMRF9EQUVNT05fRkFMU0UiXT0iIyIKU1siQlVJTERfREFFTU9O X1RSVUUiXT0iIgpTWyJHVUlYX1RFU1RfUk9PVCJdPSIvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4 L2d1aXhfd2lwL3Rlc3QtdG1wIgpTWyJMSUJHQ1JZUFRfTElCUyJdPSItTC9nbnUvc3RvcmUvN3dm YnBycDFiOWIyNWNybGlkZzZoN2I2aHBpYjJiOTktbGliZ2NyeXB0LTEuNi41L2xpYiAtbGdjcnlw dCIKU1siTElCR0NSWVBUX0NGTEFHUyJdPSIiClNbIlNRTElURTNfTElCUyJdPSItTC9nbnUvc3Rv cmUveTdoOGdmODkwcWFqNmYyM3J5c2h3eGQzcjl5OTZjbmMtc3FsaXRlLTMuMTAuMC9saWIgLWxz cWxpdGUzIgpTWyJTUUxJVEUzX0NGTEFHUyJdPSItSS9nbnUvc3RvcmUveTdoOGdmODkwcWFqNmYy M3J5c2h3eGQzcjl5OTZjbmMtc3FsaXRlLTMuMTAuMC9pbmNsdWRlIgpTWyJDWFhDUFAiXT0iZysr IC1FIgpTWyJSQU5MSUIiXT0icmFubGliIgpTWyJhbV9fZmFzdGRlcENYWF9GQUxTRSJdPSIjIgpT WyJhbV9fZmFzdGRlcENYWF9UUlVFIl09IiIKU1siQ1hYREVQTU9ERSJdPSJkZXBtb2RlPWdjYzMi ClNbImFjX2N0X0NYWCJdPSJnKysiClNbIkNYWEZMQUdTIl09Ii1nIC1PMiIKU1siQ1hYIl09Imcr KyIKU1siTElCWiJdPSIvZ251L3N0b3JlL2hzeGhmbWpnaDhtNGMwcGF2cTNnZDNnY3JuOHpyZ3hq LXpsaWItMS4yLjgvbGliL2xpYnoiClNbIkxJQkdDUllQVF9MSUJESVIiXT0iL2dudS9zdG9yZS83 d2ZicHJwMWI5YjI1Y3JsaWRnNmg3YjZocGliMmI5OS1saWJnY3J5cHQtMS42LjUvbGliIgpTWyJM SUJHQ1JZUFRfUFJFRklYIl09Im5vIgpTWyJMSUJHQ1JZUFQiXT0iL2dudS9zdG9yZS83d2ZicHJw MWI5YjI1Y3JsaWRnNmg3YjZocGliMmI5OS1saWJnY3J5cHQtMS42LjUvbGliL2xpYmdjcnlwdCIK U1siTElCR0NSWVBUX0NPTkZJRyJdPSIvZ251L3N0b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3anp5 MWtmaXdxZ2RwLXByb2ZpbGUvYmluL2xpYmdjcnlwdC1jb25maWciClNbIk5JWFBLR1MiXT0iIgpT WyJOSVhfSEFTSCJdPSIiClNbIk5JWF9JTlNUQU5USUFURSJdPSJuaXgtaW5zdGFudGlhdGUiClNb Ik5JWF9QUkVGSVgiXT0iIgpTWyJYWiJdPSIvZ251L3N0b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3 anp5MWtmaXdxZ2RwLXByb2ZpbGUvYmluL3h6IgpTWyJCWklQMiJdPSIvZ251L3N0b3JlLzIwcXNn aWwxOGgxazN6bnF4NTJ3anp5MWtmaXdxZ2RwLXByb2ZpbGUvYmluL2J6aXAyIgpTWyJHWklQIl09 Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9iaW4v Z3ppcCIKU1siQlVJTERfU1lTQ0FMTFNfTU9EVUxFX0ZBTFNFIl09IiMiClNbIkJVSUxEX1NZU0NB TExTX01PRFVMRV9UUlVFIl09IiIKU1siSU5TVEFMTF9TUkZJXzM3X0ZBTFNFIl09IiIKU1siSU5T VEFMTF9TUkZJXzM3X1RSVUUiXT0iIyIKU1siSEFWRV9HVUlMRV9KU09OX0ZBTFNFIl09IiMiClNb IkhBVkVfR1VJTEVfSlNPTl9UUlVFIl09IiIKU1siR1VJTEVfVE9PTFMiXT0iL2dudS9zdG9yZS8y MHFzZ2lsMThoMWszem5xeDUyd2p6eTFrZml3cWdkcC1wcm9maWxlL2Jpbi9ndWlsZCIKU1siR1VJ TEVfQ09ORklHIl09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAt cHJvZmlsZS9iaW4vZ3VpbGUtY29uZmlnIgpTWyJHVUlMRCJdPSIvZ251L3N0b3JlLzIwcXNnaWwx OGgxazN6bnF4NTJ3anp5MWtmaXdxZ2RwLXByb2ZpbGUvYmluL2d1aWxkIgpTWyJHVUlMRSJdPSIv Z251L3N0b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3anp5MWtmaXdxZ2RwLXByb2ZpbGUvYmluL2d1 aWxlIgpTWyJHVUlMRV9MSUJTIl09Ii1ML2dudS9zdG9yZS9oeWsyaTdiOG13YnJiaXlxazVzZ3Jm Z2RzOXp2Y3JuNS1ndWlsZS0yLjAuMTEvbGliIC1ML2dudS9zdG9yZS9teTRhejcxZ3o4aXFkNHc4 a2IzNGtxN3ZsazNmY3ZobS1saWJnYy03LjQuMi9saWIgLWxndWlsZS0yLjAgLWxnYyIKU1siR1VJ TEVfQ0ZMQUdTIl09Ii1wdGhyZWFkIC1JL2dudS9zdG9yZS9oeWsyaTdiOG13YnJiaXlxazVzZ3Jm Z2RzOXp2Y3JuNS1ndWlsZS0yLjAuMTEvaW5jbHVkZS9ndWlsZS8yLjAiClNbIlBLR19DT05GSUdf TElCRElSIl09IiIKU1siUEtHX0NPTkZJR19QQVRIIl09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFr M3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9saWIvcGtnY29uZmlnOjovaG9tZS9zYXBpZW50 ZWNoLy5ndWl4LXByb2ZpbGUvbGliL3BrZ2NvbmZpZyIKU1siUEtHX0NPTkZJRyJdPSIvZ251L3N0 b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3anp5MWtmaXdxZ2RwLXByb2ZpbGUvYmluL3BrZy1jb25m aWciClNbIkNBTl9SVU5fVEVTVFNfRkFMU0UiXT0iIyIKU1siQ0FOX1JVTl9URVNUU19UUlVFIl09 IiIKU1siZ3VpeF9zYmluZGlyIl09Ii91c3IvbG9jYWwvc2JpbiIKU1siZ3VpeF9zeXNjb25mZGly Il09Ii91c3IvbG9jYWwvZXRjIgpTWyJndWl4X2xvY2Fsc3RhdGVkaXIiXT0iL3Vzci9sb2NhbC92 YXIiClNbImJhc2hjb21wbGV0aW9uZGlyIl09IiR7c3lzY29uZmRpcn0vYmFzaF9jb21wbGV0aW9u LmQiClNbInN0b3JlZGlyIl09Ii9nbnUvc3RvcmUiClNbImd1aXhfc3lzdGVtIl09Ing4Nl82NC1s aW51eCIKU1siU0VEIl09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3Fn ZHAtcHJvZmlsZS9iaW4vc2VkIgpTWyJndWlsZW1vZHVsZWRpciJdPSIke3ByZWZpeH0vc2hhcmUv Z3VpbGUvc2l0ZS8yLjAiClNbIlBPU1VCIl09InBvIgpTWyJMVExJQklOVEwiXT0iIgpTWyJMSUJJ TlRMIl09IiIKU1siSU5UTExJQlMiXT0iIgpTWyJMVExJQklDT05WIl09Ii1saWNvbnYiClNbIkxJ QklDT05WIl09Ii1saWNvbnYiClNbIklOVExfTUFDT1NYX0xJQlMiXT0iIgpTWyJob3N0X29zIl09 ImxpbnV4LWdudSIKU1siaG9zdF92ZW5kb3IiXT0idW5rbm93biIKU1siaG9zdF9jcHUiXT0ieDg2 XzY0IgpTWyJob3N0Il09Ing4Nl82NC11bmtub3duLWxpbnV4LWdudSIKU1siYnVpbGRfb3MiXT0i bGludXgtZ251IgpTWyJidWlsZF92ZW5kb3IiXT0idW5rbm93biIKU1siYnVpbGRfY3B1Il09Ing4 Nl82NCIKU1siYnVpbGQiXT0ieDg2XzY0LXVua25vd24tbGludXgtZ251IgpTWyJYR0VUVEVYVF9F WFRSQV9PUFRJT05TIl09IiIKU1siTVNHTUVSR0UiXT0iL2dudS9zdG9yZS8yMHFzZ2lsMThoMWsz em5xeDUyd2p6eTFrZml3cWdkcC1wcm9maWxlL2Jpbi9tc2dtZXJnZSIKU1siWEdFVFRFWFRfMDE1 Il09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9i aW4veGdldHRleHQiClNbIlhHRVRURVhUIl09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1 Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9iaW4veGdldHRleHQiClNbIkdNU0dGTVRfMDE1Il09Ii9n bnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9iaW4vbXNn Zm10IgpTWyJNU0dGTVRfMDE1Il09Ii9nbnUvc3RvcmUvMjBxc2dpbDE4aDFrM3pucXg1Mndqenkx a2Zpd3FnZHAtcHJvZmlsZS9iaW4vbXNnZm10IgpTWyJHTVNHRk1UIl09Ii9nbnUvc3RvcmUvMjBx c2dpbDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9iaW4vbXNnZm10IgpTWyJNU0dG TVQiXT0iL2dudS9zdG9yZS8yMHFzZ2lsMThoMWszem5xeDUyd2p6eTFrZml3cWdkcC1wcm9maWxl L2Jpbi9tc2dmbXQiClNbIkdFVFRFWFRfTUFDUk9fVkVSU0lPTiJdPSIwLjE4IgpTWyJVU0VfTkxT Il09InllcyIKU1siRUdSRVAiXT0iL2dudS9zdG9yZS8yMHFzZ2lsMThoMWszem5xeDUyd2p6eTFr Zml3cWdkcC1wcm9maWxlL2Jpbi9ncmVwIC1FIgpTWyJHUkVQIl09Ii9nbnUvc3RvcmUvMjBxc2dp bDE4aDFrM3pucXg1Mndqenkxa2Zpd3FnZHAtcHJvZmlsZS9iaW4vZ3JlcCIKU1siQ1BQIl09Imdj YyAtRSIKU1siYW1fX2Zhc3RkZXBDQ19GQUxTRSJdPSIjIgpTWyJhbV9fZmFzdGRlcENDX1RSVUUi XT0iIgpTWyJDQ0RFUE1PREUiXT0iZGVwbW9kZT1nY2MzIgpTWyJhbV9fbm9kZXAiXT0iX25vIgpT WyJBTURFUEJBQ0tTTEFTSCJdPSJcXCIKU1siQU1ERVBfRkFMU0UiXT0iIyIKU1siQU1ERVBfVFJV RSJdPSIiClNbImFtX19xdW90ZSJdPSIiClNbImFtX19pbmNsdWRlIl09ImluY2x1ZGUiClNbIkRF UERJUiJdPSIuZGVwcyIKU1siT0JKRVhUIl09Im8iClNbIkVYRUVYVCJdPSIiClNbImFjX2N0X0ND Il09ImdjYyIKU1siQ1BQRkxBR1MiXT0iIgpTWyJMREZMQUdTIl09IiIKU1siQ0ZMQUdTIl09Ii1n IC1PMiIKU1siQ0MiXT0iZ2NjIgpTWyJBTV9CQUNLU0xBU0giXT0iXFwiClNbIkFNX0RFRkFVTFRf VkVSQk9TSVRZIl09IjAiClNbIkFNX0RFRkFVTFRfViJdPSIkKEFNX0RFRkFVTFRfVkVSQk9TSVRZ KSIKU1siQU1fViJdPSIkKFYpIgpTWyJhbV9fdW50YXIiXT0iJCR7VEFSLXRhcn0geGYgLSIKU1si YW1fX3RhciJdPSIkJHtUQVItdGFyfSBjaG9mIC0gXCIkJHRhcmRpclwiIgpTWyJBTVRBUiJdPSIk JHtUQVItdGFyfSIKU1siYW1fX2xlYWRpbmdfZG90Il09Ii4iClNbIlNFVF9NQUtFIl09IiIKU1si QVdLIl09Imdhd2siClNbIm1rZGlyX3AiXT0iL2dudS9zdG9yZS8yMHFzZ2lsMThoMWszem5xeDUy d2p6eTFrZml3cWdkcC1wcm9maWxlL2Jpbi9ta2RpciAtcCIKU1siTUtESVJfUCJdPSIvZ251L3N0 b3JlLzIwcXNnaWwxOGgxazN6bnF4NTJ3anp5MWtmaXdxZ2RwLXByb2ZpbGUvYmluL21rZGlyIC1w IgpTWyJJTlNUQUxMX1NUUklQX1BST0dSQU0iXT0iJChpbnN0YWxsX3NoKSAtYyAtcyIKU1siU1RS SVAiXT0iIgpTWyJpbnN0YWxsX3NoIl09IiR7U0hFTEx9IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1 aXgvZ3VpeF93aXAvYnVpbGQtYXV4L2luc3RhbGwtc2giClNbIk1BS0VJTkZPIl09IiR7U0hFTEx9 IC9ob21lL3NhcGllbnRlY2gvRGV2L2d1aXgvZ3VpeF93aXAvYnVpbGQtYXV4L21pc3NpbmcgbWFr ZWluZm8iClNbIkFVVE9IRUFERVIiXT0iJHtTSEVMTH0gL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3Vp eC9ndWl4X3dpcC9idWlsZC1hdXgvbWlzc2luZyBhdXRvaGVhZGVyIgpTWyJBVVRPTUFLRSJdPSIk e1NIRUxMfSAvaG9tZS9zYXBpZW50ZWNoL0Rldi9ndWl4L2d1aXhfd2lwL2J1aWxkLWF1eC9taXNz aW5nIGF1dG9tYWtlLTEuMTUiClNbIkFVVE9DT05GIl09IiR7U0hFTEx9IC9ob21lL3NhcGllbnRl Y2gvRGV2L2d1aXgvZ3VpeF93aXAvYnVpbGQtYXV4L21pc3NpbmcgYXV0b2NvbmYiClNbIkFDTE9D QUwiXT0iJHtTSEVMTH0gL2hvbWUvc2FwaWVudGVjaC9EZXYvZ3VpeC9ndWl4X3dpcC9idWlsZC1h dXgvbWlzc2luZyBhY2xvY2FsLTEuMTUiClNbIlZFUlNJT04iXT0iMC4xMC4wIgpTWyJQQUNLQUdF Il09Imd1aXgiClNbIkNZR1BBVEhfVyJdPSJlY2hvIgpTWyJhbV9faXNyYyJdPSIiClNbIklOU1RB TExfREFUQSJdPSIke0lOU1RBTEx9IC1tIDY0NCIKU1siSU5TVEFMTF9TQ1JJUFQiXT0iJHtJTlNU QUxMfSIKU1siSU5TVEFMTF9QUk9HUkFNIl09IiR7SU5TVEFMTH0iClNbInRhcmdldF9hbGlhcyJd PSIiClNbImhvc3RfYWxpYXMiXT0iIgpTWyJidWlsZF9hbGlhcyJdPSIiClNbIkxJQlMiXT0iIgpT WyJFQ0hPX1QiXT0iIgpTWyJFQ0hPX04iXT0iLW4iClNbIkVDSE9fQyJdPSIiClNbIkRFRlMiXT0i LURIQVZFX0NPTkZJR19IIgpTWyJtYW5kaXIiXT0iJHtkYXRhcm9vdGRpcn0vbWFuIgpTWyJsb2Nh bGVkaXIiXT0iJHtkYXRhcm9vdGRpcn0vbG9jYWxlIgpTWyJsaWJkaXIiXT0iJHtleGVjX3ByZWZp eH0vbGliIgpTWyJwc2RpciJdPSIke2RvY2Rpcn0iClNbInBkZmRpciJdPSIke2RvY2Rpcn0iClNb ImR2aWRpciJdPSIke2RvY2Rpcn0iClNbImh0bWxkaXIiXT0iJHtkb2NkaXJ9IgpTWyJpbmZvZGly Il09IiR7ZGF0YXJvb3RkaXJ9L2luZm8iClNbImRvY2RpciJdPSIke2RhdGFyb290ZGlyfS9kb2Mv JHtQQUNLQUdFX1RBUk5BTUV9IgpTWyJvbGRpbmNsdWRlZGlyIl09Ii91c3IvaW5jbHVkZSIKU1si aW5jbHVkZWRpciJdPSIke3ByZWZpeH0vaW5jbHVkZSIKU1sibG9jYWxzdGF0ZWRpciJdPSIke3By ZWZpeH0vdmFyIgpTWyJzaGFyZWRzdGF0ZWRpciJdPSIke3ByZWZpeH0vY29tIgpTWyJzeXNjb25m ZGlyIl09IiR7cHJlZml4fS9ldGMiClNbImRhdGFkaXIiXT0iJHtkYXRhcm9vdGRpcn0iClNbImRh dGFyb290ZGlyIl09IiR7cHJlZml4fS9zaGFyZSIKU1sibGliZXhlY2RpciJdPSIke2V4ZWNfcHJl Zml4fS9saWJleGVjIgpTWyJzYmluZGlyIl09IiR7ZXhlY19wcmVmaXh9L3NiaW4iClNbImJpbmRp ciJdPSIke2V4ZWNfcHJlZml4fS9iaW4iClNbInByb2dyYW1fdHJhbnNmb3JtX25hbWUiXT0icyx4 LHgsIgpTWyJwcmVmaXgiXT0iL3Vzci9sb2NhbCIKU1siZXhlY19wcmVmaXgiXT0iJHtwcmVmaXh9 IgpTWyJQQUNLQUdFX1VSTCJdPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3VpeC8iClNb IlBBQ0tBR0VfQlVHUkVQT1JUIl09ImJ1Zy1ndWl4QGdudS5vcmciClNbIlBBQ0tBR0VfU1RSSU5H Il09IkdOVSBHdWl4IDAuMTAuMCIKU1siUEFDS0FHRV9WRVJTSU9OIl09IjAuMTAuMCIKU1siUEFD S0FHRV9UQVJOQU1FIl09Imd1aXgiClNbIlBBQ0tBR0VfTkFNRSJdPSJHTlUgR3VpeCIKU1siUEFU SF9TRVBBUkFUT1IiXT0iOiIKU1siU0hFTEwiXT0iL2Jpbi9zaCIKX0FDQVdLCmNhdCA+PiIkYWNf dG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYKICBmb3IgKGtleSBpbiBTKSBTX2lzX3NldFtrZXld ID0gMQogIEZTID0gIgciCgp9CnsKICBsaW5lID0gJCAwCiAgbmZpZWxkcyA9IHNwbGl0KGxpbmUs IGZpZWxkLCAiQCIpCiAgc3Vic3RlZCA9IDAKICBsZW4gPSBsZW5ndGgoZmllbGRbMV0pCiAgZm9y IChpID0gMjsgaSA8IG5maWVsZHM7IGkrKykgewogICAga2V5ID0gZmllbGRbaV0KICAgIGtleWxl biA9IGxlbmd0aChrZXkpCiAgICBpZiAoU19pc19zZXRba2V5XSkgewogICAgICB2YWx1ZSA9IFNb a2V5XQogICAgICBsaW5lID0gc3Vic3RyKGxpbmUsIDEsIGxlbikgIiIgdmFsdWUgIiIgc3Vic3Ry KGxpbmUsIGxlbiArIGtleWxlbiArIDMpCiAgICAgIGxlbiArPSBsZW5ndGgodmFsdWUpICsgbGVu Z3RoKGZpZWxkWysraV0pCiAgICAgIHN1YnN0ZWQgPSAxCiAgICB9IGVsc2UKICAgICAgbGVuICs9 IDEgKyBrZXlsZW4KICB9CgogIHByaW50IGxpbmUKfQoKX0FDQVdLCmlmIHNlZCAicy8kYWNfY3Iv LyIgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgogIHNlZCAicy8kYWNfY3JcJC8v OyBzLyRhY19jci8kYWNfY3NfYXdrX2NyL2ciCmVsc2UKICBjYXQKZmkgPCAiJGFjX3RtcC9zdWJz MS5hd2siID4gIiRhY190bXAvc3Vicy5hd2siIFwKICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQg bm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1CmZpICMgdGVzdCAt biAiJENPTkZJR19GSUxFUyIKCiMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfSEVBREVS UyBzZWN0aW9uLgojIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09O RklHX0hFQURFUlMuCiMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5z dGF0dXMgTWFrZWZpbGUnLgppZiB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiOyB0aGVuCmNhdCA+ IiRhY190bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fApCRUdJTiB7CkRbIlBBQ0tBR0VfTkFN RSJdPSIgXCJHTlUgR3VpeFwiIgpEWyJQQUNLQUdFX1RBUk5BTUUiXT0iIFwiZ3VpeFwiIgpEWyJQ QUNLQUdFX1ZFUlNJT04iXT0iIFwiMC4xMC4wXCIiCkRbIlBBQ0tBR0VfU1RSSU5HIl09IiBcIkdO VSBHdWl4IDAuMTAuMFwiIgpEWyJQQUNLQUdFX0JVR1JFUE9SVCJdPSIgXCJidWctZ3VpeEBnbnUu b3JnXCIiCkRbIlBBQ0tBR0VfVVJMIl09IiBcImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9n dWl4L1wiIgpEWyJQQUNLQUdFIl09IiBcImd1aXhcIiIKRFsiVkVSU0lPTiJdPSIgXCIwLjEwLjBc IiIKRFsiU1REQ19IRUFERVJTIl09IiAxIgpEWyJIQVZFX1NZU19UWVBFU19IIl09IiAxIgpEWyJI QVZFX1NZU19TVEFUX0giXT0iIDEiCkRbIkhBVkVfU1RETElCX0giXT0iIDEiCkRbIkhBVkVfU1RS SU5HX0giXT0iIDEiCkRbIkhBVkVfTUVNT1JZX0giXT0iIDEiCkRbIkhBVkVfU1RSSU5HU19IIl09 IiAxIgpEWyJIQVZFX0lOVFRZUEVTX0giXT0iIDEiCkRbIkhBVkVfU1RESU5UX0giXT0iIDEiCkRb IkhBVkVfVU5JU1REX0giXT0iIDEiCkRbIl9fRVhURU5TSU9OU19fIl09IiAxIgpEWyJfQUxMX1NP VVJDRSJdPSIgMSIKRFsiX0dOVV9TT1VSQ0UiXT0iIDEiCkRbIl9QT1NJWF9QVEhSRUFEX1NFTUFO VElDUyJdPSIgMSIKRFsiX1RBTkRFTV9TT1VSQ0UiXT0iIDEiCkRbIkVOQUJMRV9OTFMiXT0iIDEi CkRbIkhBVkVfR0VUVEVYVCJdPSIgMSIKRFsiSEFWRV9EQ0dFVFRFWFQiXT0iIDEiCkRbIkhBVkVf QlpMSUJfSCJdPSIgMSIKRFsiTklYX1ZFUlNJT04iXT0iIFwiMC4wLjBcIiIKRFsiU1lTVEVNIl09 IiBcIng4Nl82NC1saW51eFwiIgpEWyJIQVZFX0NIUk9PVCJdPSIgMSIKRFsiSEFWRV9VTlNIQVJF Il09IiAxIgpEWyJIQVZFX1NDSEVEX0giXT0iIDEiCkRbIkhBVkVfU1lTX1BBUkFNX0giXT0iIDEi CkRbIkhBVkVfU1lTX01PVU5UX0giXT0iIDEiCkRbIkhBVkVfU1lTX1NZU0NBTExfSCJdPSIgMSIK RFsiSEFWRV9MVVRJTUVTIl09IiAxIgpEWyJIQVZFX0xDSE9XTiJdPSIgMSIKRFsiSEFWRV9QT1NJ WF9GQUxMT0NBVEUiXT0iIDEiCkRbIkhBVkVfU0NIRURfU0VUQUZGSU5JVFkiXT0iIDEiCkRbIkhB VkVfU1RBVFZGUyJdPSIgMSIKRFsiSEFWRV9OQU5PU0xFRVAiXT0iIDEiCkRbIkhBVkVfU1RSU0lH TkFMIl09IiAxIgpEWyJDQU5fTElOS19TWU1MSU5LIl09IiAxIgpEWyJIQVZFX0xPQ0FMRSJdPSIg MSIKRFsiSEFWRV9TWVNfUEVSU09OQUxJVFlfSCJdPSIgMSIKRFsiSEFWRV9MSU5VWF9GU19IIl09 IiAxIgpEWyJHVUlYX1NVQlNUSVRVVEVfVVJMUyJdPSIgXCJodHRwczovL21pcnJvci5oeWRyYS5n bnUub3JnXCIiCkRbIkhBVkVfREFFTU9OX09GRkxPQURfSE9PSyJdPSIgMSIKICBmb3IgKGtleSBp biBEKSBEX2lzX3NldFtrZXldID0gMQogIEZTID0gIgciCn0KL15bXHQgXSojW1x0IF0qKGRlZmlu ZXx1bmRlZilbXHQgXStbX2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5P UFFSU1RVVldYWVpdW19hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BR UlNUVVZXWFlaMDEyMzQ1Njc4OV0qKFtcdCAoXXwkKS8gewogIGxpbmUgPSAkIDAKICBzcGxpdChs aW5lLCBhcmcsICIgIikKICBpZiAoYXJnWzFdID09ICIjIikgewogICAgZGVmdW5kZWYgPSBhcmdb Ml0KICAgIG1hYzEgPSBhcmdbM10KICB9IGVsc2UgewogICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJn WzFdLCAyKQogICAgbWFjMSA9IGFyZ1syXQogIH0KICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMp CiAgbWFjcm8gPSBtYWMyWzFdCiAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUs IGRlZnVuZGVmKSAtIDEpCiAgaWYgKERfaXNfc2V0W21hY3JvXSkgewogICAgIyBQcmVzZXJ2ZSB0 aGUgd2hpdGUgc3BhY2Ugc3Vycm91bmRpbmcgdGhlICIjIi4KICAgIHByaW50IHByZWZpeCAiZGVm aW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KICAgIG5leHQKICB9IGVsc2UgewogICAgIyBS ZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFt cGxlLAogICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZp bmVkIGFuZCByZXF1aXJlZAogICAgIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdp bGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCiAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikg ewogICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCiAgICAgIG5l eHQKICAgIH0KICB9Cn0KeyBwcmludCB9Cl9BQ0FXSwogIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBu b3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQpmaSAjIHRlc3Qg LW4gIiRDT05GSUdfSEVBREVSUyIKCgpldmFsIHNldCBYICIgIDpGICRDT05GSUdfRklMRVMgIDpI ICRDT05GSUdfSEVBREVSUyAgICA6QyAkQ09ORklHX0NPTU1BTkRTIgpzaGlmdApmb3IgYWNfdGFn CmRvCiAgY2FzZSAkYWNfdGFnIGluCiAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51 ZTs7CiAgZXNhYwogIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCiAgOltGSExdKjoqKTs7CiAgOkwq IHwgOkMqOiopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHRhZyBcYCRhY190YWcnIiAiJExJTkVO TyIgNTs7CiAgOltGSF0tKSBhY190YWc9LTotOzsKICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRh Y190YWcuaW47OwogIGVzYWMKICBhY19zYXZlX0lGUz0kSUZTCiAgSUZTPToKICBzZXQgeCAkYWNf dGFnCiAgSUZTPSRhY19zYXZlX0lGUwogIHNoaWZ0CiAgYWNfZmlsZT0kMQogIHNoaWZ0CgogIGNh c2UgJGFjX21vZGUgaW4KICA6TCkgYWNfc291cmNlPSQxOzsKICA6W0ZIXSkKICAgIGFjX2ZpbGVf aW5wdXRzPQogICAgZm9yIGFjX2YKICAgIGRvCiAgICAgIGNhc2UgJGFjX2YgaW4KICAgICAgLSkg YWNfZj0iJGFjX3RtcC9zdGRpbiI7OwogICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0 IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQoJICMgKGlmIHRoZSBw YXRoIGlzIG5vdCBhYnNvbHV0ZSkuICBUaGUgYWJzb2x1dGUgcGF0aCBjYW5ub3QgYmUgRE9TLXN0 eWxlLAoJICMgYmVjYXVzZSAkYWNfZiBjYW5ub3QgY29udGFpbiBgOicuCgkgdGVzdCAtZiAiJGFj X2YiIHx8CgkgICBjYXNlICRhY19mIGluCgkgICBbXFwvJF0qKSBmYWxzZTs7CgkgICAqKSB0ZXN0 IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CgkgICBlc2FjIHx8 CgkgICBhc19mbl9lcnJvciAxICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRM SU5FTk8iIDU7OwogICAgICBlc2FjCiAgICAgIGNhc2UgJGFjX2YgaW4gKlwnKikgYWNfZj1gJGFz X2VjaG8gIiRhY19mIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7IGVzYWMKICAgICAgYXNf Zm5fYXBwZW5kIGFjX2ZpbGVfaW5wdXRzICIgJyRhY19mJyIKICAgIGRvbmUKCiAgICAjIExldCdz IHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUu LCBkb24ndAogICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byBy ZWFkOgogICAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAg Ki8KICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKCSAgJGFzX2VjaG8gIiQq IiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCglgJyBieSBjb25maWd1cmUuJwog ICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgogICAgICBjb25maWd1cmVfaW5wdXQ9 IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CiRhc19lY2hvICIkYXNf bWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQogICAgZmkKICAgICMgTmV1dHJhbGl6ZSBzcGVj aWFsIGNoYXJhY3RlcnMgaW50ZXJwcmV0ZWQgYnkgc2VkIGluIHJlcGxhY2VtZW50IHN0cmluZ3Mu CiAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygKICAgICpcJiogfCAqXHwqIHwgKlxcKiAp CiAgICAgICBhY19zZWRfY29uZl9pbnB1dD1gJGFzX2VjaG8gIiRjb25maWd1cmVfaW5wdXQiIHwK ICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKAogICAgKikgYWNfc2VkX2NvbmZf aW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dDs7CiAgICBlc2FjCgogICAgY2FzZSAkYWNfdGFnIGluCiAg ICAqOi06KiB8ICo6LSkgY2F0ID4iJGFjX3RtcC9zdGRpbiIgXAogICAgICB8fCBhc19mbl9lcnJv ciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsKICAgIGVzYWMK ICAgIDs7CiAgZXNhYwoKICBhY19kaXI9YCRhc19kaXJuYW1lIC0tICIkYWNfZmlsZSIgfHwKJGFz X2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKCSBY IiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAoJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkk JyBcfCBcCgkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiRhc19l Y2hvIFgiJGFjX2ZpbGUiIHwKICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8q JC97CgkgICAgcy8vXDEvCgkgICAgcQoJICB9CgkgIC9eWFwoXC9cL1wpW14vXS4qL3sKCSAgICBz Ly9cMS8KCSAgICBxCgkgIH0KCSAgL15YXChcL1wvXCkkL3sKCSAgICBzLy9cMS8KCSAgICBxCgkg IH0KCSAgL15YXChcL1wpLiovewoJICAgIHMvL1wxLwoJICAgIHEKCSAgfQoJICBzLy4qLy4vOyBx J2AKICBhc19kaXI9IiRhY19kaXIiOyBhc19mbl9ta2Rpcl9wCiAgYWNfYnVpbGRkaXI9LgoKY2Fz ZSAiJGFjX2RpciIgaW4KLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFj X3RvcF9idWlsZF9wcmVmaXg9IDs7CiopCiAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNf ZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3Rvcnkg aW4gJGFjX2Rpcl9zdWZmaXguCiAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19k aXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCiAgY2FzZSAkYWNfdG9w X2J1aWxkZGlyX3N1YiBpbgogICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxk X3ByZWZpeD0gOzsKICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1 Yi8gOzsKICBlc2FjIDs7CmVzYWMKYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCmFjX2Fic19i dWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0 eToKYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CgpjYXNlICRzcmNkaXIgaW4K ICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCiAgICBhY19zcmNkaXI9LgogICAgYWNf dG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgogICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFj X3B3ZCA7OwogIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KICAgIGFjX3Ny Y2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CiAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKICAg IGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKICAqKSAjIFJlbGF0aXZlIG5hbWUuCiAgICBh Y19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKICAgIGFj X3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCiAgICBhY19hYnNfdG9wX3Ny Y2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKZXNhYwphY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3Ny Y2RpciRhY19kaXJfc3VmZml4CgoKICBjYXNlICRhY19tb2RlIGluCiAgOkYpCiAgIwogICMgQ09O RklHX0ZJTEUKICAjCgogIGNhc2UgJElOU1RBTEwgaW4KICBbXFwvJF0qIHwgPzpbXFwvXSogKSBh Y19JTlNUQUxMPSRJTlNUQUxMIDs7CiAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZp eCRJTlNUQUxMIDs7CiAgZXNhYwogIGFjX01LRElSX1A9JE1LRElSX1AKICBjYXNlICRNS0RJUl9Q IGluCiAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKICAqLyopIGFjX01LRElSX1A9JGFjX3RvcF9i dWlsZF9wcmVmaXgkTUtESVJfUCA7OwogIGVzYWMKIyBJZiB0aGUgdGVtcGxhdGUgZG9lcyBub3Qg a25vdyBhYm91dCBkYXRhcm9vdGRpciwgZXhwYW5kIGl0LgojIEZJWE1FOiBUaGlzIGhhY2sgc2hv dWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KYWNfZGF0YXJvb3RkaXJfaGFj az07IGFjX2RhdGFyb290ZGlyX3NlZW49CmFjX3NlZF9kYXRhcm9vdD0nCi9kYXRhcm9vdGRpci8g ewogIHAKICBxCn0KL0BkYXRhZGlyQC9wCi9AZG9jZGlyQC9wCi9AaW5mb2RpckAvcAovQGxvY2Fs ZWRpckAvcAovQG1hbmRpckAvcCcKY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJv b3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgoqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9z ZWVuPXllczs7CipAZGF0YWRpckAqfCpAZG9jZGlyQCp8KkBpbmZvZGlyQCp8KkBsb2NhbGVkaXJA KnwqQG1hbmRpckAqKQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog V0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRp ciBzZXR0aW5nIiA+JjUKJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRz IHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQogIGFjX2Rh dGFyb290ZGlyX2hhY2s9JwogIHMmQGRhdGFkaXJAJiR7ZGF0YXJvb3RkaXJ9JmcKICBzJkBkb2Nk aXJAJiR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0VfVEFSTkFNRX0mZwogIHMmQGluZm9kaXJA JiR7ZGF0YXJvb3RkaXJ9L2luZm8mZwogIHMmQGxvY2FsZWRpckAmJHtkYXRhcm9vdGRpcn0vbG9j YWxlJmcKICBzJkBtYW5kaXJAJiR7ZGF0YXJvb3RkaXJ9L21hbiZnCiAgcyZcJHtkYXRhcm9vdGRp cn0mJHtwcmVmaXh9L3NoYXJlJmcnIDs7CmVzYWMKYWNfc2VkX2V4dHJhPSIvXlsJIF0qVlBBVEhb CSBdKj1bCSBdKi97CmgKcy8vLwpzL14vOi8Kcy9bCSBdKiQvOi8Kcy86XCQoc3JjZGlyKTovOi9n CnMvOlwke3NyY2Rpcn06LzovZwpzLzpAc3JjZGlyQDovOi9nCnMvXjoqLy8Kcy86KiQvLwp4CnMv XCg9WwkgXSpcKS4qL1wxLwpHCnMvXG4vLwpzL15bXj1dKj1bCSBdKiQvLwp9Cgo6dAovQFthLXpB LVpfXVthLXpBLVpfMC05XSpALyFiCnN8QGNvbmZpZ3VyZV9pbnB1dEB8JGFjX3NlZF9jb25mX2lu cHV0fDt0IHQKcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CnMmQHRv cF9idWlsZF9wcmVmaXhAJiRhY190b3BfYnVpbGRfcHJlZml4Jjt0IHQKcyZAc3JjZGlyQCYkYWNf c3JjZGlyJjt0IHQKcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdApzJkB0b3Bfc3Jj ZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0CnMmQGFic190b3Bfc3JjZGlyQCYkYWNfYWJzX3RvcF9z cmNkaXImO3QgdApzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKcyZAYWJzX2J1aWxkZGly QCYkYWNfYWJzX2J1aWxkZGlyJjt0IHQKcyZAYWJzX3RvcF9idWlsZGRpckAmJGFjX2Fic190b3Bf YnVpbGRkaXImO3QgdApzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CnMmQE1LRElSX1BAJiRh Y19NS0RJUl9QJjt0IHQKJGFjX2RhdGFyb290ZGlyX2hhY2sKIgpldmFsIHNlZCBcIlwkYWNfc2Vk X2V4dHJhXCIgIiRhY19maWxlX2lucHV0cyIgfCAkQVdLIC1mICIkYWNfdG1wL3N1YnMuYXdrIiBc CiAgPiRhY190bXAvb3V0IHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19m aWxlIiAiJExJTkVOTyIgNQoKdGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJv b3RkaXJfc2VlbiIgJiYKICB7IGFjX291dD1gc2VkIC1uICcvXCR7ZGF0YXJvb3RkaXJ9L3AnICIk YWNfdG1wL291dCJgOyB0ZXN0IC1uICIkYWNfb3V0IjsgfSAmJgogIHsgYWNfb3V0PWBzZWQgLW4g Jy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnIFwKICAgICAgIiRhY190bXAvb3V0ImA7IHRl c3QgLXogIiRhY19vdXQiOyB9ICYmCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFy aWFibGUgXGBkYXRhcm9vdGRpcicKd2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNl IG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjUKJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzog JGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3Rk aXInCndoaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMg ZGVmaW5lZCIgPiYyO30KCiAgcm0gLWYgIiRhY190bXAvc3RkaW4iCiAgY2FzZSAkYWNfZmlsZSBp bgogIC0pIGNhdCAiJGFjX3RtcC9vdXQiICYmIHJtIC1mICIkYWNfdG1wL291dCI7OwogICopIHJt IC1mICIkYWNfZmlsZSIgJiYgbXYgIiRhY190bXAvb3V0IiAiJGFjX2ZpbGUiOzsKICBlc2FjIFwK ICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8i IDUKIDs7CiAgOkgpCiAgIwogICMgQ09ORklHX0hFQURFUgogICMKICBpZiB0ZXN0IHgiJGFjX2Zp bGUiICE9IHgtOyB0aGVuCiAgICB7CiAgICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0 ICAqLyIgXAogICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRh Y19maWxlX2lucHV0cyIKICAgIH0gPiIkYWNfdG1wL2NvbmZpZy5oIiBcCiAgICAgIHx8IGFzX2Zu X2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQogICAgaWYg ZGlmZiAiJGFjX2ZpbGUiICIkYWNfdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4K ICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfZmlsZSBp cyB1bmNoYW5nZWQiID4mNQokYXNfZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQi ID4mNjt9CiAgICBlbHNlCiAgICAgIHJtIC1mICIkYWNfZmlsZSIKICAgICAgbXYgIiRhY190bXAv Y29uZmlnLmgiICIkYWNfZmlsZSIgXAoJfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVh dGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CiAgICBmaQogIGVsc2UKICAgICRhc19lY2hvICIvKiAk Y29uZmlndXJlX2lucHV0ICAqLyIgXAogICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2Rl ZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAogICAgICB8fCBhc19mbl9lcnJvciAkPyAi Y291bGQgbm90IGNyZWF0ZSAtIiAiJExJTkVOTyIgNQogIGZpCiMgQ29tcHV0ZSAiJGFjX2ZpbGUi J3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgpfYW1fYXJnPSIkYWNfZmlsZSIKX2FtX3N0YW1w X2NvdW50PTEKZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCiAgY2FzZSAk X2FtX2hlYWRlciBpbgogICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKICAgICAgYnJlYWsgOzsK ICAgICogKQogICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFg IDs7CiAgZXNhYwpkb25lCmVjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gJGFzX2Rpcm5h bWUgLS0gIiRfYW1fYXJnIiB8fAokYXNfZXhwciBYIiRfYW1fYXJnIiA6ICdYXCguKlteL11cKS8v KlteL11bXi9dKi8qJCcgXHwgXAoJIFgiJF9hbV9hcmciIDogJ1hcKC8vXClbXi9dJyBcfCBcCgkg WCIkX2FtX2FyZyIgOiAnWFwoLy9cKSQnIFx8IFwKCSBYIiRfYW1fYXJnIiA6ICdYXCgvXCknIFx8 IC4gMj4vZGV2L251bGwgfHwKJGFzX2VjaG8gWCIkX2FtX2FyZyIgfAogICAgc2VkICcvXlhcKC4q W14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKCSAgICBzLy9cMS8KCSAgICBxCgkgIH0KCSAgL15Y XChcL1wvXClbXi9dLiovewoJICAgIHMvL1wxLwoJICAgIHEKCSAgfQoJICAvXlhcKFwvXC9cKSQv ewoJICAgIHMvL1wxLwoJICAgIHEKCSAgfQoJICAvXlhcKFwvXCkuKi97CgkgICAgcy8vXDEvCgkg ICAgcQoJICB9CgkgIHMvLiovLi87IHEnYC9zdGFtcC1oJF9hbV9zdGFtcF9jb3VudAogOzsKCiAg OkMpICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGV4ZWN1dGluZyAk YWNfZmlsZSBjb21tYW5kcyIgPiY1CiRhc19lY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmls ZSBjb21tYW5kcyIgPiY2O30KIDs7CiAgZXNhYwoKCiAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGlu CiAgICAiZGVwZmlsZXMiOkMpIHRlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IHsKICAjIE9s ZGVyIEF1dG9jb25mIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdo ZW4gZmlsZXMKICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUg YW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCiAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCiAg Y2FzZSAkQ09ORklHX0ZJTEVTIGluCiAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIg OzsKICAqKSAgIHNldCB4ICRDT05GSUdfRklMRVMgOzsKICBlc2FjCiAgc2hpZnQKICBmb3IgbWYK ICBkbwogICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmls ZS4KICAgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCiAgICAjIENoZWNrIHdo ZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgogICAg IyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkICdNYWtlZmlsZS5pbicsIGJ1 dAogICAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRo ZSBmaWxlIGNvbnRlbnQuCiAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91 Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcwogICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBh ZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KICAgICMgR3JlcCdp bmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5l CiAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3Rh bmQgYXQgbGVhc3QgNDAwMC4KICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9t YWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgZGly cGFydD1gJGFzX2Rpcm5hbWUgLS0gIiRtZiIgfHwKJGFzX2V4cHIgWCIkbWYiIDogJ1hcKC4qW14v XVwpLy8qW14vXVteL10qLyokJyBcfCBcCgkgWCIkbWYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCgkg WCIkbWYiIDogJ1hcKC8vXCkkJyBcfCBcCgkgWCIkbWYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYv bnVsbCB8fAokYXNfZWNobyBYIiRtZiIgfAogICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9d W14vXSpcLyokL3sKCSAgICBzLy9cMS8KCSAgICBxCgkgIH0KCSAgL15YXChcL1wvXClbXi9dLiov ewoJICAgIHMvL1wxLwoJICAgIHEKCSAgfQoJICAvXlhcKFwvXC9cKSQvewoJICAgIHMvL1wxLwoJ ICAgIHEKCSAgfQoJICAvXlhcKFwvXCkuKi97CgkgICAgcy8vXDEvCgkgICAgcQoJICB9CgkgIHMv LiovLi87IHEnYAogICAgZWxzZQogICAgICBjb250aW51ZQogICAgZmkKICAgICMgRXh0cmFjdCB0 aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCiAgICAj IGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyAnbWFrZScuCiAgICBERVBESVI9YHNl ZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAogICAgdGVzdCAteiAiJERFUERJUiIgJiYg Y29udGludWUKICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8 ICIkbWYiYAogICAgdGVzdCAteiAiJGFtX19pbmNsdWRlIiAmJiBjb250aW51ZQogICAgYW1fX3F1 b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKICAgICMgRmluZCBhbGwg ZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKICAg ICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNl IGl0IGlzIHRoZQogICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikg dG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKICAgICMgZXhwYW5zaW9uLgogICAgZm9yIGZpbGUg aW4gYHNlZCAtbiAiCiAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIp LipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAoJIHNlZCAtZSAncy9cJChERVBESVIp LyciJERFUERJUiInL2cnYDsgZG8KICAgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlz dHMuCiAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQogICAgICBmZGly PWAkYXNfZGlybmFtZSAtLSAiJGZpbGUiIHx8CiRhc19leHByIFgiJGZpbGUiIDogJ1hcKC4qW14v XVwpLy8qW14vXVteL10qLyokJyBcfCBcCgkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwK CSBYIiRmaWxlIiA6ICdYXCgvL1wpJCcgXHwgXAoJIFgiJGZpbGUiIDogJ1hcKC9cKScgXHwgLiAy Pi9kZXYvbnVsbCB8fAokYXNfZWNobyBYIiRmaWxlIiB8CiAgICBzZWQgJy9eWFwoLipbXi9dXClc L1wvKlteL11bXi9dKlwvKiQvewoJICAgIHMvL1wxLwoJICAgIHEKCSAgfQoJICAvXlhcKFwvXC9c KVteL10uKi97CgkgICAgcy8vXDEvCgkgICAgcQoJICB9CgkgIC9eWFwoXC9cL1wpJC97CgkgICAg cy8vXDEvCgkgICAgcQoJICB9CgkgIC9eWFwoXC9cKS4qL3sKCSAgICBzLy9cMS8KCSAgICBxCgkg IH0KCSAgcy8uKi8uLzsgcSdgCiAgICAgIGFzX2Rpcj0kZGlycGFydC8kZmRpcjsgYXNfZm5fbWtk aXJfcAogICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgogICAgICBlY2hvICcj IGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKICAgIGRvbmUKICBkb25lCn0KIDs7CiAgICAicG8t ZGlyZWN0b3JpZXMiOkMpCiAgICBmb3IgYWNfZmlsZSBpbiAkQ09ORklHX0ZJTEVTOyBkbwogICAg ICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iCiAgICAgIGNhc2UgIiRh Y19maWxlIiBpbgogICAgICAgICo6KikgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyU6 LiolJSdgIDs7CiAgICAgIGVzYWMKICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZp bGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCiAgICAgIGNhc2UgIiRhY19maWxl IiBpbiAqL01ha2VmaWxlLmluKQogICAgICAgICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgog ICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKICAg ICAgICBhY19kaXJfc3VmZml4PSIvYGVjaG8gIiRhY19kaXIifHNlZCAncyVeXC4vJSUnYCIKICAg ICAgICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8c2VkICdzJS9bXi9dKiUuLi8lZydg CiAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGly LgogICAgICAgICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KICAgICAg ICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBhY19naXZlbl9zcmNkaXI9IiRzcmNkaXIi CiAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KICAgICAgICAgIC4pICB0b3Bfc3Jj ZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKICAgICAgICAgIC8qKSB0b3Bfc3Jj ZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OwogICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19k b3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKICAgICAgICBlc2FjCiAgICAgICAgIyBUcmVhdCBhIGRp cmVjdG9yeSBhcyBhIFBPIGRpcmVjdG9yeSBpZiBhbmQgb25seSBpZiBpdCBoYXMgYQogICAgICAg ICMgUE9URklMRVMuaW4gZmlsZS4gVGhpcyBhbGxvd3MgcGFja2FnZXMgdG8gaGF2ZSBtdWx0aXBs ZSBQTwogICAgICAgICMgZGlyZWN0b3JpZXMgdW5kZXIgZGlmZmVyZW50IG5hbWVzIG9yIGluIGRp ZmZlcmVudCBsb2NhdGlvbnMuCiAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8k YWNfZGlyL1BPVEZJTEVTLmluIjsgdGhlbgogICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklM RVMiCiAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcg JGFjX2Rpci9QT1RGSUxFUyIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIKICAg ICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAt ZSAiL14jL2QiIC1lICIvXlsgCV0qXCQvZCIgLWUgInMsLiosICAgICAkdG9wX3NyY2Rpci8mIFxc XFwsIiB8IHNlZCAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgPiAiJGFjX2Rpci9QT1RGSUxFUyIK ICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKICAgICAgICAgICMgQUxMX0xJ TkdVQVMsIFBPRklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMgZGVw ZW5kCiAgICAgICAgICAjIG9uICRhY19kaXIgYnV0IGRvbid0IGRlcGVuZCBvbiB1c2VyLXNwZWNp ZmllZCBjb25maWd1cmF0aW9uCiAgICAgICAgICAjIHBhcmFtZXRlcnMuCiAgICAgICAgICBpZiB0 ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KICAgICAgICAg ICAgIyBUaGUgTElOR1VBUyBmaWxlIGNvbnRhaW5zIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1 YWdlcy4KICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhl bgogICAgICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBzZXR0aW5n IEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIgfHwgZWNobyAic2V0dGlu ZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiCiAgICAgICAgICAgIGZp CiAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIk YWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCiAgICAgICAgICAgICMgSGlkZSB0aGUg QUxMX0xJTkdVQVMgYXNzaWdtZW50IGZyb20gYXV0b21ha2UgPCAxLjUuCiAgICAgICAgICAgIGV2 YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKICAgICAgICAgICAgUE9NQUtFRklMRURF UFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgogICAgICAgICAgZWxzZQogICAgICAgICAgICAj IFRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyB3YXMgZ2l2ZW4gaW4gY29uZmlndXJlLmlu LgogICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9t YWtlIDwgMS41LgogICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRPQlNPTEVURV9BTExf TElOR1VBUycKICAgICAgICAgIGZpCiAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUwogICAgICAg ICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQo bGFuZykucG8pCiAgICAgICAgICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUwogICAgICAgICAgIyBh cyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUp CiAgICAgICAgICAjIENvbXB1dGUgRFVNTVlQT0ZJTEVTCiAgICAgICAgICAjIGFzICAgICAgJChm b3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkKICAgICAgICAgICMgQ29t cHV0ZSBHTU9GSUxFUwogICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9M SU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykuZ21vKQogICAgICAgICAgY2FzZSAiJGFjX2dpdmVu X3NyY2RpciIgaW4KICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OwogICAgICAgICAgICAqKSBz cmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7CiAgICAgICAgICBlc2FjCiAgICAgICAgICBQT0ZJTEVT PQogICAgICAgICAgVVBEQVRFUE9GSUxFUz0KICAgICAgICAgIERVTU1ZUE9GSUxFUz0KICAgICAg ICAgIEdNT0ZJTEVTPQogICAgICAgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbwogICAg ICAgICAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcucG8iCiAgICAgICAgICAg IFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKICAgICAgICAg ICAgRFVNTVlQT0ZJTEVTPSIkRFVNTVlQT0ZJTEVTICRsYW5nLm5vcCIKICAgICAgICAgICAgR01P RklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIgogICAgICAgICAgZG9uZQogICAg ICAgICAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBM SU5HVUFTCiAgICAgICAgICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgogICAgICAgICAgSU5TVF9M SU5HVUFTPQogICAgICAgICAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgogICAgICAg ICAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbwogICAgICAgICAgICAgIHVz ZWl0PW5vCiAgICAgICAgICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhl bgogICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCiAgICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgog ICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVk bGFuZ3VhZ2VzOyBkbwogICAgICAgICAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFs b2cgaWYgZGVzaXJlZGxhbmcgaXMKICAgICAgICAgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVz ZW50bGFuZywgb3IKICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxh bmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAogICAgICAgICAgICAgICAgIyAgICAgIHByZXNlbnRs YW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCiAgICAgICAgICAgICAg ICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRh bG9nKS4KICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KICAgICAgICAgICAg ICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OwogICAgICAgICAgICAgICAgZXNhYwog ICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhl bgogICAgICAgICAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFu ZyIKICAgICAgICAgICAgICBmaQogICAgICAgICAgICBkb25lCiAgICAgICAgICBmaQogICAgICAg ICAgQ0FUQUxPR1M9CiAgICAgICAgICBpZiB0ZXN0IC1uICIkSU5TVF9MSU5HVUFTIjsgdGhlbgog ICAgICAgICAgICBmb3IgbGFuZyBpbiAkSU5TVF9MSU5HVUFTOyBkbwogICAgICAgICAgICAgIENB VEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgogICAgICAgICAgICBkb25lCiAgICAgICAgICBm aQogICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRh Y19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCiAgICAg ICAgICBzZWQgLWUgIi9eUE9URklMRVMgPS9yICRhY19kaXIvUE9URklMRVMiIC1lICIvXiMgTWFr ZXZhcnMvciAkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTWFrZXZhcnMiIC1lICJzfEBQT0ZJTEVT QHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUg InN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9G SUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xAUE9NQUtFRklMRURF UFNAfCRQT01BS0VGSUxFREVQU3xnIiAiJGFjX2Rpci9NYWtlZmlsZS5pbiIgPiAiJGFjX2Rpci9N YWtlZmlsZSIKICAgICAgICAgIGZvciBmIGluICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIiL1J1 bGVzLSo7IGRvCiAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgogICAgICAgICAgICAg IGNhc2UgIiRmIiBpbgogICAgICAgICAgICAgICAgKi5vcmlnIHwgKi5iYWsgfCAqfikgOzsKICAg ICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OwogICAgICAg ICAgICAgIGVzYWMKICAgICAgICAgICAgZmkKICAgICAgICAgIGRvbmUKICAgICAgICBmaQogICAg ICAgIDs7CiAgICAgIGVzYWMKICAgIGRvbmUgOzsKICAgICJuaXgvc2NyaXB0cy9saXN0LXJ1bnRp bWUtcm9vdHMiOkYpIGNobW9kICt4IG5peC9zY3JpcHRzL2xpc3QtcnVudGltZS1yb290cyA7Owog ICAgIm5peC9zY3JpcHRzL3N1YnN0aXR1dGUiOkYpIGNobW9kICt4IG5peC9zY3JpcHRzL3N1YnN0 aXR1dGUgOzsKICAgICJuaXgvc2NyaXB0cy9ndWl4LWF1dGhlbnRpY2F0ZSI6RikgY2htb2QgK3gg bml4L3NjcmlwdHMvZ3VpeC1hdXRoZW50aWNhdGUgOzsKICAgICJuaXgvc2NyaXB0cy9vZmZsb2Fk IjpGKSBjaG1vZCAreCBuaXgvc2NyaXB0cy9vZmZsb2FkIDs7CiAgICAic2NyaXB0cy9ndWl4IjpG KSBjaG1vZCAreCBzY3JpcHRzL2d1aXggOzsKICAgICJ0ZXN0LWVudiI6RikgY2htb2QgK3ggdGVz dC1lbnYgOzsKICAgICJwcmUtaW5zdC1lbnYiOkYpIGNobW9kICt4IHByZS1pbnN0LWVudiA7OwoK ICBlc2FjCmRvbmUgIyBmb3IgYWNfdGFnCgoKYXNfZm5fZXhpdCAwCg== --MP_/RfwZ3bl.=e6TtpTaWZdR65C Content-Type: text/x-log Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=test-suite.log ======================================= GNU Guix 0.10.0: ./test-suite.log ======================================= # TOTAL: 604 # PASS: 582 # SKIP: 19 # XFAIL: 0 # FAIL: 3 # XPASS: 0 # ERROR: 0 .. contents:: :depth: 2 SKIP: tests/base32 ================== sh: nix-hash: command not found test-name: bytevector->base32-string location: /home/sapientech/Dev/guix/guix_wip/tests/base32.scm:48 source: + (test-assert + "bytevector->base32-string" + (fold (lambda (bv expected result) + (and result + (string=? + (bytevector->base32-string bv) + expected))) + #t + (map string->utf8 + '("" "f" "fo" "foo" "foob" "fooba" "foobar")) + '("" + "my" + "mzxq" + "mzxw6" + "mzxw6yq" + "mzxw6ytb" + "mzxw6ytboi"))) actual-value: #t result: PASS test-name: base32-string->bytevector location: /home/sapientech/Dev/guix/guix_wip/tests/base32.scm:65 source: + (test-assert + "base32-string->bytevector" + (every (lambda (bv) + (equal? + (base32-string->bytevector + (bytevector->base32-string bv)) + bv)) + (map string->utf8 + '("" "f" "fo" "foo" "foob" "fooba" "foobar")))) actual-value: #t result: PASS test-name: nix-base32-string->bytevector location: /home/sapientech/Dev/guix/guix_wip/tests/base32.scm:73 source: + (test-assert + "nix-base32-string->bytevector" + (every (lambda (bv) + (equal? + (nix-base32-string->bytevector + (bytevector->nix-base32-string bv)) + bv)) + (map string->utf8 + '("" "f" "fo" "foo" "foob" "fooba" "foobar")))) actual-value: #t result: PASS test-name: &invalid-base32-character location: /home/sapientech/Dev/guix/guix_wip/tests/base32.scm:81 source: + (test-equal + "&invalid-base32-character" + #\e + (guard (c ((invalid-base32-character? c) + (invalid-base32-character-value c))) + (nix-base32-string->bytevector + (string-append (make-string 51 #\a) "e")))) expected-value: e actual-value: e result: PASS test-name: sha256 & bytevector->nix-base32-string location: /home/sapientech/Dev/guix/guix_wip/tests/base32.scm:92 source: + (test-assert + "sha256 & bytevector->nix-base32-string" + (let ((file (search-path %load-path "tests/test.drv"))) + (equal? + (bytevector->nix-base32-string + (sha256 + (call-with-input-file file get-bytevector-all))) + (let* ((c (format + #f + "~a --type sha256 --base32 --flat \"~a\"" + %nix-hash + file)) + (p (open-input-pipe c)) + (l (read-line p))) + (close-pipe p) + l)))) result: SKIP SKIP: tests/cpio ================ test-name: file->cpio-header + write-cpio-header + read-cpio-header location: /home/sapientech/Dev/guix/guix_wip/tests/cpio.scm:37 source: + (test-assert + "file->cpio-header + write-cpio-header + read-cpio-header" + (let* ((file (search-path %load-path "guix.scm")) + (header (file->cpio-header file))) + (call-with-values + (lambda () (open-bytevector-output-port)) + (lambda (port get-bv) + (write-cpio-header header port) + (let ((port (open-bytevector-input-port (get-bv)))) + (equal? header (read-cpio-header port))))))) actual-value: #t result: PASS test-name: bit-identical to GNU cpio's output location: /home/sapientech/Dev/guix/guix_wip/tests/cpio.scm:49 source: + (test-assert + "bit-identical to GNU cpio's output" + (call-with-temporary-output-file + (lambda (link _) + (delete-file link) + (symlink "chbouib" link) + (let ((files (cons* "/" + (canonicalize-path + (dirname (search-path %load-path "guix.scm"))) + link + (map (compose + canonicalize-path + (cut search-path %load-path <>)) + '("guix.scm" + "guix/build/syscalls.scm" + "guix/packages.scm"))))) + (call-with-temporary-output-file + (lambda (ref-file _) + (let ((pipe (open-pipe* + OPEN_WRITE + %cpio-program + "-o" + "-O" + ref-file + "-H" + "newc" + "--null"))) + (for-each + (lambda (file) (format pipe "~a\x00" file)) + files) + (and (zero? (close-pipe pipe)) + (call-with-temporary-output-file + (lambda (file port) + (write-cpio-archive files port) + (close-port port) + (or (file=? ref-file file) + (throw 'cpio-archives-differ + files + ref-file + file + (stat:size (stat ref-file)) + (stat:size (stat file)))))))))))))) result: SKIP random seed for tests: 1469939214 SKIP: tests/snix ================ test-name: factorize-uri location: /home/sapientech/Dev/guix/guix_wip/tests/snix.scm:36 source: + (test-assert + "factorize-uri" + (every? + (match-lambda + ((uri version '-> expected) + (equal? (factorize-uri uri version) expected))) + '(("http://example.com/foo.tgz" + "1.0" + -> + "http://example.com/foo.tgz") + ("http://example.com/foo-2.8.tgz" + "2.8" + -> + ("http://example.com/foo-" version ".tgz")) + ("http://example.com/2.8/foo-2.8.tgz" + "2.8" + -> + ("http://example.com/" + version + "/foo-" + version + ".tgz"))))) actual-value: #t result: PASS test-name: nixpkgs->guix-package location: /home/sapientech/Dev/guix/guix_wip/tests/snix.scm:54 source: + (test-assert + "nixpkgs->guix-package" + (match (nixpkgs->guix-package + %nixpkgs-directory + "guile") + (('package + ('name "guile") + ('version (? string?)) + ('source ('origin _ ...)) + ('build-system _) + ('inputs ('quasiquote (inputs ...))) + ('propagated-inputs ('quasiquote (pinputs ...))) + ('home-page (? string?)) + ('synopsis (? string?)) + ('description (? string?)) + ('license (? symbol?))) + (and (member '("libffi" ,libffi) inputs) + (member '("gmp" ,gmp) pinputs) + #t)) + (x (pk 'fail x #f)))) result: SKIP FAIL: tests/store ================= test-name: store-path-hash-part location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:51 source: + (test-equal + "store-path-hash-part" + "283gqy39v3g9dxjy26rynl0zls82fmcg" + (store-path-hash-part + (string-append + (%store-prefix) + "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7"))) expected-value: 283gqy39v3g9dxjy26rynl0zls82fmcg actual-value: 283gqy39v3g9dxjy26rynl0zls82fmcg result: PASS test-name: store-path-hash-part #f location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:57 source: + (test-equal + "store-path-hash-part #f" + #f + (store-path-hash-part + (string-append + (%store-prefix) + "/foo/bar/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7"))) expected-value: #f actual-value: #f result: PASS test-name: store-path-package-name location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:63 source: + (test-equal + "store-path-package-name" + "guile-2.0.7" + (store-path-package-name + (string-append + (%store-prefix) + "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7"))) expected-value: guile-2.0.7 actual-value: guile-2.0.7 result: PASS test-name: store-path-package-name #f location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:69 source: + (test-equal + "store-path-package-name #f" + #f + (store-path-package-name + "/foo/bar/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7")) expected-value: #f actual-value: #f result: PASS test-name: direct-store-path? location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:74 source: + (test-assert + "direct-store-path?" + (and (direct-store-path? + (string-append + (%store-prefix) + "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7")) + (not (direct-store-path? + (string-append + (%store-prefix) + "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7/bin/guile"))) + (not (direct-store-path? (%store-prefix))))) actual-value: #t result: PASS test-name: valid-path? live location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:86 source: + (test-assert + "valid-path? live" + (let ((p (add-text-to-store %store "hello" "hello, world"))) + (valid-path? %store p))) actual-value: #t result: PASS test-name: valid-path? false location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:90 source: + (test-assert + "valid-path? false" + (not (valid-path? + %store + (string-append + (%store-prefix) + "/" + (make-string 32 #\e) + "-foobar")))) actual-value: #t result: PASS test-name: valid-path? error location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:95 source: + (test-assert + "valid-path? error" + (with-store + s + (guard (c ((nix-protocol-error? c) #t)) + (valid-path? s "foo") + #f))) actual-value: #t result: PASS test-name: valid-path? recovery location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:101 source: + (test-assert + "valid-path? recovery" + (with-store + s + (let-syntax ((true-if-error + (syntax-rules () + ((_ exp) + (guard (c ((nix-protocol-error? c) #t)) exp #f))))) + (and (true-if-error (valid-path? s "foo")) + (true-if-error (valid-path? s "bar")) + (true-if-error (valid-path? s "baz")) + (true-if-error (valid-path? s "chbouib")) + (valid-path? + s + (add-text-to-store s "valid" "yeah")))))) actual-value: #t result: PASS test-name: hash-part->path location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:118 source: + (test-assert + "hash-part->path" + (let ((p (add-text-to-store %store "hello" "hello, world"))) + (equal? + (hash-part->path %store (store-path-hash-part p)) + p))) actual-value: #t result: PASS test-name: dead-paths location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:123 source: + (test-assert + "dead-paths" + (let ((p (add-text-to-store + %store + "random-text" + (random-text)))) + (->bool (member p (dead-paths %store))))) random seed for tests: 1469938959 finding garbage collector roots... removing stale temporary roots file `/home/sapientech/Dev/guix/guix_wip/test-tmp/var/11072/temproots/11095' determining live/dead paths... actual-value: #t result: PASS test-name: permanent root location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:144 source: + (test-assert + "permanent root" + (let* ((p (with-store + store + (let ((p (add-text-to-store + store + "random-text" + (random-text)))) + (add-permanent-root p) + (add-permanent-root p) + p)))) + (and (member p (live-paths %store)) + (begin + (remove-permanent-root p) + (->bool (member p (dead-paths %store))))))) finding garbage collector roots... determining live/dead paths... finding garbage collector roots... determining live/dead paths... actual-value: #t result: PASS test-name: dead path can be explicitly collected location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:156 source: + (test-assert + "dead path can be explicitly collected" + (let ((p (add-text-to-store + %store + "random-text" + (random-text) + '()))) + (let-values + (((paths freed) (delete-paths %store (list p)))) + (and (equal? paths (list p)) + (> freed 0) + (not (file-exists? p)))))) finding garbage collector roots... deleting unused links... actual-value: #t result: PASS test-name: add-text-to-store vs. delete-paths location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:164 source: + (test-assert + "add-text-to-store vs. delete-paths" + (with-store + store + (let* ((text (random-text)) + (path (add-text-to-store store "delete-me" text)) + (deleted (delete-paths store (list path))) + (path2 (add-text-to-store store "delete-me" text))) + (and (string=? path path2) + (equal? deleted (list path)) + (valid-path? store path) + (file-exists? path))))) finding garbage collector roots... removing stale temporary roots file `/home/sapientech/Dev/guix/guix_wip/test-tmp/var/11072/temproots/11111' deleting `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/r11ng87nwwzjwb5qxkyg8nbayhwrqfxr-delete-me' deleting `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/trash' deleting unused links... note: currently hard linking saves 26.30 MiB actual-value: #t result: PASS test-name: add-to-store vs. delete-paths location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:177 source: + (test-assert + "add-to-store vs. delete-paths" + (with-store + store + (let* ((file (search-path %load-path "guix.scm")) + (path (add-to-store store "delete-me" #t "sha256" file)) + (deleted (delete-paths store (list path))) + (path2 (add-to-store store "delete-me" #t "sha256" file))) + (and (string=? path path2) + (equal? deleted (list path)) + (valid-path? store path) + (file-exists? path))))) finding garbage collector roots... removing stale temporary roots file `/home/sapientech/Dev/guix/guix_wip/test-tmp/var/11072/temproots/11115' deleting `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/57nhqlbqv5kh4zwr2vvdk3xyh741ynri-delete-me' deleting `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/trash' deleting unused links... note: currently hard linking saves 26.30 MiB actual-value: #t result: PASS test-name: references location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:189 source: + (test-assert + "references" + (let* ((t1 (add-text-to-store + %store + "random1" + (random-text))) + (t2 (add-text-to-store + %store + "random2" + (random-text) + (list t1)))) + (and (equal? (list t1) (references %store t2)) + (equal? (list t2) (referrers %store t1)) + (null? (references %store t1)) + (null? (referrers %store t2))))) actual-value: #t result: PASS test-name: references/substitutes missing reference info location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:199 source: + (test-assert + "references/substitutes missing reference info" + (with-store + s + (set-build-options s #:use-substitutes? #f) + (guard (c ((nix-protocol-error? c) #t)) + (let* ((b (add-to-store + s + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + s + "the-thing" + b + '("--help") + #:inputs + `((,b))))) + (references/substitutes + s + (list (derivation->output-path d) b)) + #f)))) actual-value: #t result: PASS test-name: references/substitutes with substitute info location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:211 source: + (test-assert + "references/substitutes with substitute info" + (with-store + s + (set-build-options s #:use-substitutes? #t) + (let* ((t1 (add-text-to-store s "random1" (random-text))) + (t2 (add-text-to-store + s + "random2" + (random-text) + (list t1))) + (t3 (add-text-to-store + s + "build" + "echo -n $t2 > $out")) + (b (add-to-store + s + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + s + "the-thing" + b + `("-e" ,t3) + #:inputs + `((,b) (,t3) (,t2)) + #:env-vars + `(("t2" unquote t2)))) + (o (derivation->output-path d))) + (with-derivation-narinfo + d + (sha256 => (sha256 (string->utf8 t2))) + (references => (list t2)) + (equal? + (references/substitutes s (list o t3 t2 t1)) + `((,t2) () (,t1) ())))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable actual-value: #t result: PASS test-name: substitutable-path-info when substitutes are turned off location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:235 source: + (test-equal + "substitutable-path-info when substitutes are turned off" + '() + (with-store + s + (set-build-options s #:use-substitutes? #f) + (let* ((b (add-to-store + s + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + s + "the-thing" + b + '("--version") + #:inputs + `((,b)))) + (o (derivation->output-path d))) + (with-derivation-narinfo + d + (substitutable-path-info s (list o)))))) expected-value: () actual-value: () result: PASS test-name: substitutable-paths when substitutes are turned off location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:248 source: + (test-equal + "substitutable-paths when substitutes are turned off" + '() + (with-store + s + (set-build-options s #:use-substitutes? #f) + (let* ((b (add-to-store + s + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + s + "the-thing" + b + '("--version") + #:inputs + `((,b)))) + (o (derivation->output-path d))) + (with-derivation-narinfo + d + (substitutable-paths s (list o)))))) expected-value: () actual-value: () result: PASS test-name: requisites location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:261 source: + (test-assert + "requisites" + (let* ((t1 (add-text-to-store + %store + "random1" + (random-text) + '())) + (t2 (add-text-to-store + %store + "random2" + (random-text) + (list t1))) + (t3 (add-text-to-store + %store + "random3" + (random-text) + (list t2))) + (t4 (add-text-to-store + %store + "random4" + (random-text) + (list t1 t3)))) + (define (same? x y) + (and (= (length x) (length y)) + (lset= equal? x y))) + (and (same? (requisites %store (list t1)) (list t1)) + (same? (requisites %store (list t2)) + (list t1 t2)) + (same? (requisites %store (list t3)) + (list t1 t2 t3)) + (same? (requisites %store (list t4)) + (list t1 t2 t3 t4)) + (same? (requisites %store (list t1 t2 t3 t4)) + (list t1 t2 t3 t4))))) actual-value: #t result: PASS test-name: derivers location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:281 source: + (test-assert + "derivers" + (let* ((b (add-text-to-store + %store + "build" + "echo $foo > $out" + '())) + (s (add-to-store + %store + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + %store + "the-thing" + s + `("-e" ,b) + #:env-vars + `(("foo" unquote (random-text))) + #:inputs + `((,b) (,s)))) + (o (derivation->output-path d))) + (and (build-derivations %store (list d)) + (equal? + (query-derivation-outputs + %store + (derivation-file-name d)) + (list o)) + (equal? + (valid-derivers %store o) + (list (derivation-file-name d)))))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/v90wk11vk033yirgdz1lwq3j5rharim2-the-thing.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/v9//0wk11vk033yirgdz1lwq3j5rharim2-the-thing.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/v90wk11vk033yirgdz1lwq3j5rharim2-the-thing.drv - actual-value: #t result: PASS test-name: topologically-sorted, one item location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:297 source: + (test-assert + "topologically-sorted, one item" + (let* ((a (add-text-to-store %store "a" "a")) + (b (add-text-to-store %store "b" "b" (list a))) + (c (add-text-to-store %store "c" "c" (list b))) + (d (add-text-to-store %store "d" "d" (list c))) + (s (topologically-sorted %store (list d)))) + (equal? s (list a b c d)))) actual-value: #t result: PASS test-name: topologically-sorted, several items location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:305 source: + (test-assert + "topologically-sorted, several items" + (let* ((a (add-text-to-store %store "a" "a")) + (b (add-text-to-store %store "b" "b" (list a))) + (c (add-text-to-store %store "c" "c" (list b))) + (d (add-text-to-store %store "d" "d" (list c))) + (s1 (topologically-sorted %store (list d a c b))) + (s2 (topologically-sorted %store (list b d c a b d)))) + (equal? s1 s2 (list a b c d)))) actual-value: #t result: PASS test-name: topologically-sorted, more difficult location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:314 source: + (test-assert + "topologically-sorted, more difficult" + (let* ((a (add-text-to-store %store "a" "a")) + (b (add-text-to-store %store "b" "b" (list a))) + (c (add-text-to-store %store "c" "c" (list b))) + (d (add-text-to-store %store "d" "d" (list c))) + (w (add-text-to-store %store "w" "w")) + (x (add-text-to-store %store "x" "x" (list w))) + (y (add-text-to-store %store "y" "y" (list x d))) + (s1 (topologically-sorted %store (list y))) + (s2 (topologically-sorted %store (list c y))) + (s3 (topologically-sorted + %store + (cons y (references %store y))))) + (let* ((x-then-d? + (equal? (references %store y) (list x d)))) + (and (equal? + s1 + (if x-then-d? + (list w x a b c d y) + (list a b c d w x y))) + (equal? + s2 + (if x-then-d? + (list a b c w x d y) + (list a b c d w x y))) + (lset= string=? s1 s3))))) actual-value: #t result: PASS test-name: current-build-output-port, UTF-8 location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:338 source: + (test-assert + "current-build-output-port, UTF-8" + (string-contains + (with-fluids + ((%default-port-encoding "UTF-8")) + (call-with-output-string + (lambda (port) + (parameterize + ((current-build-output-port port)) + (let* ((s "Here\u2019s a Greek letter: \u03bb.") + (d (build-expression->derivation + %store + "foo" + `(display ,s) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system))))) + (guard (c ((nix-protocol-error? c) #t)) + (build-derivations %store (list d)))))))) + "Here\u2019s a Greek letter: \u03bb.")) actual-value: 231 result: PASS test-name: current-build-output-port, UTF-8 + garbage location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:354 source: + (test-assert + "current-build-output-port, UTF-8 + garbage" + (string-contains + (with-fluids + ((%default-port-encoding "UTF-8")) + (call-with-output-string + (lambda (port) + (parameterize + ((current-build-output-port port)) + (let ((d (build-expression->derivation + %store + "foo" + `(begin + (use-modules (rnrs io ports)) + (display "garbage: ") + (put-bytevector (current-output-port) #vu8(128)) + (display "lambda: \u03bb\n")) + #:guile-for-build + (package-derivation %store %bootstrap-guile)))) + (guard (c ((nix-protocol-error? c) #t)) + (build-derivations %store (list d)))))))) + "garbage: ?lambda: \u03bb")) actual-value: 231 result: PASS test-name: log-file, derivation location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:374 source: + (test-assert + "log-file, derivation" + (let* ((b (add-text-to-store + %store + "build" + "echo $foo > $out" + '())) + (s (add-to-store + %store + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + %store + "the-thing" + s + `("-e" ,b) + #:env-vars + `(("foo" unquote (random-text))) + #:inputs + `((,b) (,s))))) + (and (build-derivations %store (list d)) + (file-exists? + (pk (log-file %store (derivation-file-name d))))))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/rhr8cv3lsaggxr61wc87j2gji63fg5dg-the-thing.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/rh//r8cv3lsaggxr61wc87j2gji63fg5dg-the-thing.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/rhr8cv3lsaggxr61wc87j2gji63fg5dg-the-thing.drv - ;;; ("/home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/rh/r8cv3lsaggxr61wc87j2gji63fg5dg-the-thing.drv.bz2") actual-value: #t result: PASS test-name: log-file, output file name location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:386 source: + (test-assert + "log-file, output file name" + (let* ((b (add-text-to-store + %store + "build" + "echo $foo > $out" + '())) + (s (add-to-store + %store + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + %store + "the-thing" + s + `("-e" ,b) + #:env-vars + `(("foo" unquote (random-text))) + #:inputs + `((,b) (,s)))) + (o (derivation->output-path d))) + (and (build-derivations %store (list d)) + (file-exists? (pk (log-file %store o))) + (string=? + (log-file %store (derivation-file-name d)) + (log-file %store o))))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/fraav0ksxx6cj46x708wp3vqfr6n81p3-the-thing.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/fr//aav0ksxx6cj46x708wp3vqfr6n81p3-the-thing.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/fraav0ksxx6cj46x708wp3vqfr6n81p3-the-thing.drv - ;;; ("/home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/fr/aav0ksxx6cj46x708wp3vqfr6n81p3-the-thing.drv.bz2") actual-value: #t result: PASS test-name: no substitutes location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:401 source: + (test-assert + "no substitutes" + (with-store + s + (let* ((d1 (package-derivation + s + %bootstrap-guile + (%current-system))) + (d2 (package-derivation + s + %bootstrap-glibc + (%current-system))) + (o (map derivation->output-path (list d1 d2)))) + (set-build-options s #:use-substitutes? #f) + (and (not (has-substitutes? s (derivation-file-name d1))) + (not (has-substitutes? s (derivation-file-name d2))) + (null? (substitutable-paths s o)) + (null? (substitutable-path-info s o)))))) actual-value: #t result: PASS test-name: build-things with output path location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:412 source: + (test-assert + "build-things with output path" + (with-store + s + (let* ((c (random-text)) + (d (build-expression->derivation + s + "substitute-me" + `(call-with-output-file + %output + (lambda (p) (display ,c p))) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (o (derivation->output-path d))) + (set-build-options s #:use-substitutes? #f) + (build-things s (list o)) + (not (valid-path? s o))))) actual-value: #t result: PASS test-name: substitute query location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:432 source: + (test-assert + "substitute query" + (with-store + s + (let* ((d (package-derivation + s + %bootstrap-guile + (%current-system))) + (o (derivation->output-path d))) + (with-derivation-narinfo + d + (false-if-exception + (delete-file-recursively + (string-append + (getenv "XDG_CACHE_HOME") + "/guix/substitute"))) + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (and (has-substitutes? s o) + (equal? + (list o) + (substitutable-paths s (list o))) + (match (pk 'spi (substitutable-path-info s (list o))) + (((? substitutable? s)) + (and (string=? + (substitutable-deriver s) + (derivation-file-name d)) + (null? (substitutable-references s)) + (equal? (substitutable-nar-size s) 1234))))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable ;;; (spi (#< path: "/home/sapientech/Dev/guix/guix_wip/test-tmp/store/0vxgvlx03qscrds88s65hrs70n5jkw2g-guile-bootstrap-2.0" deriver: "/home/sapientech/Dev/guix/guix_wip/test-tmp/store/bjihchailclirz3310dqypibjg0happm-guile-bootstrap-2.0.drv" refs: () dl-size: 0 nar-size: 1234>)) actual-value: #t result: PASS test-name: substitute query, alternating URLs location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:456 source: + (test-assert + "substitute query, alternating URLs" + (let* ((d (with-store + s + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (o (derivation->output-path d))) + (with-derivation-narinfo + d + (false-if-exception + (delete-file-recursively + (string-append + (getenv "XDG_CACHE_HOME") + "/guix/substitute"))) + (and (with-store + s + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (has-substitutes? s o)) + (with-store + s + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (list "http://does-not-exist")) + (not (has-substitutes? s o))) + (with-store + s + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (has-substitutes? s o)) + (with-store + s + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + '()) + (not (has-substitutes? s o))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable substitute: Backtrace: substitute: In ice-9/boot-9.scm: substitute: 157: 9 [catch #t # ...] substitute: In unknown file: substitute: ?: 8 [apply-smob/1 #] substitute: In ice-9/boot-9.scm: substitute: 63: 7 [call-with-prompt prompt0 ...] substitute: In ice-9/eval.scm: substitute: 432: 6 [eval # #] substitute: In ice-9/boot-9.scm: substitute: 2401: 5 [save-module-excursion #] substitute: 4050: 4 [#] substitute: 1724: 3 [%start-stack load-stack ...] substitute: 1729: 2 [#] substitute: In unknown file: substitute: ?: 1 [primitive-load "/home/sapientech/Dev/guix/guix_wip/scripts/guix"] substitute: In guix/ui.scm: substitute: 1209: 0 [run-guix-command substitute "--query"] substitute: substitute: guix/ui.scm:1209:6: In procedure run-guix-command: substitute: guix/ui.scm:1209:6: unmatched line "" actual-value: #f actual-error: + (srfi-34 + #) result: FAIL test-name: substitute location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:488 source: + (test-assert + "substitute" + (with-store + s + (let* ((c (random-text)) + (d (build-expression->derivation + s + "substitute-me" + `(call-with-output-file + %output + (lambda (p) (exit 1) (display ,c p))) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (o (derivation->output-path d))) + (with-derivation-substitute + d + c + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (and (has-substitutes? s o) + (build-derivations s (list d)) + (equal? + c + (call-with-input-file o get-string-all))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable @ substituter-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/9m7hnf6014kkxv5s5blpc2vj1q02i5iw-substitute-me /home/sapientech/Dev/guix/guix_wip/nix/scripts/substitute warning: authentication and authorization of substitutes disabled! guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable Downloading /home/sapientech/Dev/guix/guix_wip/test-tmp/store/9m7hnf6014kkxv5s5blpc2vj1q02i5iw-substitute-me (1KiB installed)...  example.nar 176B 0B/s 00:00 [####################] 100.0% @ substituter-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/9m7hnf6014kkxv5s5blpc2vj1q02i5iw-substitute-me actual-value: #t result: PASS test-name: substitute + build-things with output path location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:507 source: + (test-assert + "substitute + build-things with output path" + (with-store + s + (let* ((c (random-text)) + (d (build-expression->derivation + s + "substitute-me" + `(call-with-output-file + %output + (lambda (p) (exit 1) (display ,c p))) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (o (derivation->output-path d))) + (with-derivation-substitute + d + c + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (and (has-substitutes? s o) + (build-things s (list o)) + (valid-path? s o) + (equal? + c + (call-with-input-file o get-string-all))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable @ substituter-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/np2fa5ssidgms7n82jiz1rdnpsarvi8m-substitute-me /home/sapientech/Dev/guix/guix_wip/nix/scripts/substitute warning: authentication and authorization of substitutes disabled! guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable Downloading /home/sapientech/Dev/guix/guix_wip/test-tmp/store/np2fa5ssidgms7n82jiz1rdnpsarvi8m-substitute-me (1KiB installed)...  example.nar 176B 0B/s 00:00 [####################] 100.0% @ substituter-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/np2fa5ssidgms7n82jiz1rdnpsarvi8m-substitute-me actual-value: #t result: PASS test-name: substitute, corrupt output hash location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:527 source: + (test-assert + "substitute, corrupt output hash" + (with-store + s + (let* ((c "hello, world") + (d (build-expression->derivation + s + "corrupt-substitute" + `(mkdir %output) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (o (derivation->output-path d))) + (with-derivation-substitute + d + c + (sha256 => (make-bytevector 32 0)) + (set-build-options + s + #:use-substitutes? + #t + #:fallback? + #f + #:substitute-urls + (%test-substitute-urls)) + (and (has-substitutes? s o) + (guard (c ((nix-protocol-error? c) + (pk 'corrupt c) + (not (zero? (nix-protocol-error-status c))))) + (build-derivations s (list d)) + #f)))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable @ substituter-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/bmdlmicms7mw571siq7gsjip4as64586-corrupt-substitute /home/sapientech/Dev/guix/guix_wip/nix/scripts/substitute warning: authentication and authorization of substitutes disabled! guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable Downloading /home/sapientech/Dev/guix/guix_wip/test-tmp/store/bmdlmicms7mw571siq7gsjip4as64586-corrupt-substitute (1KiB installed)...  example.nar 128B 0B/s 00:00 [####################] 100.0% @ substituter-failed /home/sapientech/Dev/guix/guix_wip/test-tmp/store/bmdlmicms7mw571siq7gsjip4as64586-corrupt-substitute 0 hash mismatch in downloaded path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/bmdlmicms7mw571siq7gsjip4as64586-corrupt-substitute': expected 0000000000000000000000000000000000000000000000000000000000000000, got b8f73a6eb280e63169b1de2a5b5e154676fe1ada685f1e5c7183cbb2c1dcd535 ;;; (corrupt #) actual-value: #t result: PASS test-name: substitute --fallback location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:557 source: + (test-assert + "substitute --fallback" + (with-store + s + (let* ((t (random-text)) + (d (build-expression->derivation + s + "substitute-me-not" + `(call-with-output-file + %output + (lambda (p) (display ,t p))) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (o (derivation->output-path d))) + (with-derivation-narinfo + d + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (and (has-substitutes? s o) + (guard (c ((nix-protocol-error? c) + (set-build-options + s + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls) + #:fallback? + #t) + (and (build-derivations s (list d)) + (equal? + t + (call-with-input-file o get-string-all))))) + (build-derivations s (list d)) + #f)))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable @ substituter-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not /home/sapientech/Dev/guix/guix_wip/nix/scripts/substitute warning: authentication and authorization of substitutes disabled! guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable Downloading /home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not (1KiB installed)... guix substitute: error: open-file: No such file or directory: "/home/sapientech/Dev/guix/guix_wip/test-tmp/var/11072/substituter-data/example.nar" @ substituter-failed /home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not 256 fetching path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not' failed with exit code 1 @ substituter-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not /home/sapientech/Dev/guix/guix_wip/nix/scripts/substitute warning: authentication and authorization of substitutes disabled! guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable Downloading /home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not (1KiB installed)... guix substitute: error: open-file: No such file or directory: "/home/sapientech/Dev/guix/guix_wip/test-tmp/var/11072/substituter-data/example.nar" @ substituter-failed /home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not 256 fetching path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/mkppidiyv2nwgq5d7gywffzd3l7zvk02-substitute-me-not' failed with exit code 1 @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/5gni6qwzkn84rzf3zyg83pwgnh1y26mr-substitute-me-not.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/5g//ni6qwzkn84rzf3zyg83pwgnh1y26mr-substitute-me-not.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/5gni6qwzkn84rzf3zyg83pwgnh1y26mr-substitute-me-not.drv - actual-value: #t result: PASS test-name: export/import several paths location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:589 source: + (test-assert + "export/import several paths" + (let* ((texts (unfold + (cut >= <> 10) + (lambda _ (random-text)) + #{1+}# + 0)) + (files (map (cut add-text-to-store %store "text" <>) + texts)) + (dump (call-with-bytevector-output-port + (cut export-paths %store files <>)))) + (delete-paths %store files) + (and (every (negate file-exists?) files) + (let* ((source (open-bytevector-input-port dump)) + (imported (import-paths %store source))) + (and (equal? imported files) + (every file-exists? files) + (equal? + texts + (map (lambda (file) + (call-with-input-file file get-string-all)) + files))))))) finding garbage collector roots... deleting unused links... actual-value: #t result: PASS test-name: export/import paths, ensure topological order location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:609 source: + (test-assert + "export/import paths, ensure topological order" + (let* ((file0 (add-text-to-store %store "baz" (random-text))) + (file1 (add-text-to-store + %store + "foo" + (random-text) + (list file0))) + (file2 (add-text-to-store + %store + "bar" + (random-text) + (list file1))) + (files (list file1 file2)) + (dump1 (call-with-bytevector-output-port + (cute export-paths %store (list file1 file2) <>))) + (dump2 (call-with-bytevector-output-port + (cute export-paths %store (list file2 file1) <>)))) + (delete-paths %store files) + (and (every (negate file-exists?) files) + (bytevector=? dump1 dump2) + (let* ((source (open-bytevector-input-port dump1)) + (imported (import-paths %store source))) + (and (equal? imported (list file1 file2)) + (every file-exists? files) + (equal? (list file0) (references %store file1)) + (equal? (list file1) (references %store file2))))))) finding garbage collector roots... deleting unused links... actual-value: #t result: PASS test-name: export/import incomplete location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:631 source: + (test-assert + "export/import incomplete" + (let* ((file0 (add-text-to-store %store "baz" (random-text))) + (file1 (add-text-to-store + %store + "foo" + (random-text) + (list file0))) + (file2 (add-text-to-store + %store + "bar" + (random-text) + (list file1))) + (dump (call-with-bytevector-output-port + (cute export-paths %store (list file2) <>)))) + (delete-paths %store (list file0 file1 file2)) + (guard (c ((nix-protocol-error? c) + (and (not (zero? (nix-protocol-error-status c))) + (string-contains + (nix-protocol-error-message c) + "not valid")))) + (import-paths + %store + (open-bytevector-input-port dump))))) finding garbage collector roots... deleting unused links... actual-value: 97 result: PASS test-name: export/import recursive location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:648 source: + (test-assert + "export/import recursive" + (let* ((file0 (add-text-to-store %store "baz" (random-text))) + (file1 (add-text-to-store + %store + "foo" + (random-text) + (list file0))) + (file2 (add-text-to-store + %store + "bar" + (random-text) + (list file1))) + (dump (call-with-bytevector-output-port + (cute export-paths + %store + (list file2) + <> + #:recursive? + #t)))) + (delete-paths %store (list file0 file1 file2)) + (let ((imported + (import-paths + %store + (open-bytevector-input-port dump)))) + (and (equal? imported (list file0 file1 file2)) + (every file-exists? (list file0 file1 file2)) + (equal? (list file0) (references %store file1)) + (equal? (list file1) (references %store file2)))))) finding garbage collector roots... deleting unused links... actual-value: #t result: PASS test-name: write-file & export-path yield the same result location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:664 source: + (test-assert + "write-file & export-path yield the same result" + (run-with-store + %store + (mlet* %store-monad + ((drv1 (package->derivation %bootstrap-guile)) + (out1 -> (derivation->output-path drv1)) + (data -> + (unfold + (cut >= <> 26) + (lambda (i) (random-bytevector 128)) + #{1+}# + 0)) + (build -> + (gexp (begin + (use-modules (rnrs io ports) (srfi srfi-1)) + (let () + (define letters + (map (lambda (i) + (string + (integer->char + (+ i (char->integer #\a))))) + (iota 26))) + (define (touch file data) + (call-with-output-file + file + (lambda (port) (put-bytevector port data)))) + (mkdir (ungexp output)) + (chdir (ungexp output)) + (for-each + touch + (append (drop letters 10) (take letters 10)) + (list (ungexp-splicing data))) + #t)))) + (drv2 (gexp->derivation "bunch" build)) + (out2 -> (derivation->output-path drv2)) + (item-info -> (store-lift query-path-info))) + (mbegin + %store-monad + (built-derivations (list drv1 drv2)) + (foldm %store-monad + (lambda (item result) + (define ref-hash + (let-values + (((port get) (open-sha256-port))) + (write-file item port) + (close-port port) + (get))) + (>>= (item-info item) + (lambda (info) + (return + (and result + (bytevector=? + (path-info-hash info) + ref-hash)))))) + #t + (list out1 out2)))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/dfxcp3x2qxk908lrmd58zgwalqapacnr-bunch.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/df//xcp3x2qxk908lrmd58zgwalqapacnr-bunch.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/dfxcp3x2qxk908lrmd58zgwalqapacnr-bunch.drv - actual-value: #t result: PASS test-name: import corrupt path location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:730 source: + (test-assert + "import corrupt path" + (let* ((text (random-text)) + (file (add-text-to-store %store "text" text)) + (dump (call-with-bytevector-output-port + (cut export-paths %store (list file) <>)))) + (delete-paths %store (list file)) + (let* ((index (quotient (bytevector-length dump) 4)) + (byte (bytevector-u8-ref dump index))) + (bytevector-u8-set! dump index (logxor 255 byte))) + (and (not (file-exists? file)) + (guard (c ((nix-protocol-error? c) + (pk 'c c) + (and (not (zero? (nix-protocol-error-status c))) + (string-contains + (nix-protocol-error-message c) + "corrupt")))) + (let* ((source (open-bytevector-input-port dump)) + (imported (import-paths %store source))) + (pk 'corrupt-imported imported) + #f))))) finding garbage collector roots... deleting unused links... ;;; (c #) actual-value: 80 result: PASS test-name: register-path location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:753 source: + (test-assert + "register-path" + (let ((file (string-append + (%store-prefix) + "/" + (make-string 32 #\f) + "-fake"))) + (when (valid-path? %store file) + (delete-paths %store (list file))) + (false-if-exception (delete-file file)) + (let ((ref (add-text-to-store + %store + "ref-of-fake" + (random-text))) + (drv (string-append file ".drv"))) + (call-with-output-file + file + (cut display "This is a fake store item.\n" <>)) + (register-path + file + #:references + (list ref) + #:deriver + drv) + (and (valid-path? %store file) + (equal? (references %store file) (list ref)) + (null? (valid-derivers %store file)) + (null? (referrers %store file)))))) finding garbage collector roots... deleting unused links... actual-value: #t result: PASS test-name: verify-store location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:773 source: + (test-assert + "verify-store" + (let* ((text (random-text)) + (file1 (add-text-to-store %store "foo" text)) + (file2 (add-text-to-store + %store + "bar" + (random-text) + (list file1)))) + (and (pk 'verify1 (verify-store %store)) + (begin + (delete-file file1) + (not (pk 'verify2 (verify-store %store)))) + (begin + (call-with-output-file + file1 + (lambda (port) (display text port))) + (pk 'verify3 (verify-store %store)))))) reading the Nix store... ;;; (verify1 #t) reading the Nix store... path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/b2x6jn5drxda6ym1kbwyqfjhdn3qr4xc-foo' disappeared, but it still has valid referrers! ;;; (verify2 #f) reading the Nix store... ;;; (verify3 #t) actual-value: #t result: PASS test-name: verify-store + check-contents location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:790 source: + (test-assert + "verify-store + check-contents" + (with-store + s + (let* ((text (random-text)) + (drv (build-expression->derivation + s + "corrupt" + `(let ((out (assoc-ref %outputs "out"))) + (call-with-output-file + out + (lambda (port) (display ,text port))) + #t) + #:guile-for-build + (package-derivation + s + %bootstrap-guile + (%current-system)))) + (file (derivation->output-path drv))) + (with-derivation-substitute + drv + text + (and (build-derivations s (list drv)) + (verify-store s #:check-contents? #t) + (begin + (chmod file 420) + (call-with-output-file + file + (lambda (port) (display "corrupt!" port))) + #t) + (not (verify-store s #:check-contents? #t)) + (delete-paths s (list file))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable fetching path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/1x27y6gc0pxd2z6731c3nlfmnkpsnjlz-corrupt'... warning: authentication and authorization of substitutes disabled! guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable Downloading /home/sapientech/Dev/guix/guix_wip/test-tmp/store/1x27y6gc0pxd2z6731c3nlfmnkpsnjlz-corrupt (1KiB installed)...  example.nar 176B 0B/s 00:00 [####################] 100.0% reading the Nix store... checking path existence... checking hashes... reading the Nix store... checking path existence... checking hashes... path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/1x27y6gc0pxd2z6731c3nlfmnkpsnjlz-corrupt' was modified! expected hash `03b9a1aa33de49627f23936e1d4298f852a8b2df398441ffcef3a1e9a0dbda19', got `e09c480e2e93336cd3c45aa129f81a0d7ba56c410b849d7779a8136074413b3d' finding garbage collector roots... removing stale temporary roots file `/home/sapientech/Dev/guix/guix_wip/test-tmp/var/11072/temproots/11405' deleting `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/1x27y6gc0pxd2z6731c3nlfmnkpsnjlz-corrupt' deleting `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/trash' deleting unused links... note: currently hard linking saves 26.30 MiB actual-value: (/home/sapientech/Dev/guix/guix_wip/test-tmp/store/1x27y6gc0pxd2z6731c3nlfmnkpsnjlz-corrupt) result: PASS test-name: build-things, check mode location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:827 source: + (test-assert + "build-things, check mode" + (with-store + store + (call-with-temporary-output-file + (lambda (entropy entropy-port) + (write (random-text) entropy-port) + (force-output entropy-port) + (let* ((drv (build-expression->derivation + store + "non-deterministic" + `(begin + (use-modules (rnrs io ports)) + (let ((out (assoc-ref %outputs "out"))) + (call-with-output-file + out + (lambda (port) + (display + (call-with-input-file + ,entropy + get-string-all) + port))) + #t)) + #:guile-for-build + (package-derivation + store + %bootstrap-guile + (%current-system)))) + (file (derivation->output-path drv))) + (and (build-things + store + (list (derivation-file-name drv))) + (begin + (write (random-text) entropy-port) + (force-output entropy-port) + (guard (c ((nix-protocol-error? c) + (pk 'determinism-exception c) + (and (not (zero? (nix-protocol-error-status c))) + (string-contains + (nix-protocol-error-message c) + "deterministic")))) + (build-things + store + (list (derivation-file-name drv)) + (build-mode check)) + #f)))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable building path(s) `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/3k339gx6rl9lsa74p4il7yvfi1jiv8xh-non-deterministic' checking path(s) `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/3k339gx6rl9lsa74p4il7yvfi1jiv8xh-non-deterministic' warning: rewriting hashes in `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/3k339gx6rl9lsa74p4il7yvfi1jiv8xh-non-deterministic'; cross fingers ;;; (determinism-exception #) actual-value: 99 result: PASS test-name: build multiple times location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:864 source: + (test-assert + "build multiple times" + (with-store + store + (set-build-options + store + #:rounds + 2 + #:use-substitutes? + #f) + (call-with-temporary-output-file + (lambda (entropy entropy-port) + (write (random-text) entropy-port) + (force-output entropy-port) + (let* ((drv (build-expression->derivation + store + "non-deterministic" + `(begin + (use-modules (rnrs io ports)) + (let ((out (assoc-ref %outputs "out"))) + (call-with-output-file + out + (lambda (port) + (display + (call-with-input-file + ,entropy + get-string-all) + port) + (call-with-output-file + ,entropy + (lambda (port) (write 'foobar port))))) + #t)) + #:guile-for-build + (package-derivation + store + %bootstrap-guile + (%current-system)))) + (file (derivation->output-path drv))) + (guard (c ((nix-protocol-error? c) + (pk 'multiple-build c) + (and (not (zero? (nix-protocol-error-status c))) + (string-contains + (nix-protocol-error-message c) + "deterministic")))) + (current-build-output-port (current-error-port)) + (build-things + store + (list (derivation-file-name drv))) + #f)))))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/yvsdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/yv//sdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv.bz2 @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/yvsdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/yv//sdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv.bz2 output ?/home/sapientech/Dev/guix/guix_wip/test-tmp/store/8l03iryrwim00ydbifhfja8cgi8fyc8c-non-deterministic? of ?/home/sapientech/Dev/guix/guix_wip/test-tmp/store/yvsdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv? differs from previous round @ build-failed /home/sapientech/Dev/guix/guix_wip/test-tmp/store/yvsdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv - 1 output ?/home/sapientech/Dev/guix/guix_wip/test-tmp/store/8l03iryrwim00ydbifhfja8cgi8fyc8c-non-deterministic? of ?/home/sapientech/Dev/guix/guix_wip/test-tmp/store/yvsdm01vn5yzikz2lpz5hyrxq6av9mdx-non-deterministic.drv? differs from previous round ;;; (multiple-build #) actual-value: 97 result: PASS test-name: store-lower location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:902 source: + (test-equal + "store-lower" + "Lowered." + (let* ((add (store-lower text-file)) + (file (add %store "foo" "Lowered."))) + (call-with-input-file file get-string-all))) expected-value: Lowered. actual-value: Lowered. result: PASS test-name: current-system location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:908 source: + (test-equal + "current-system" + "bar" + (parameterize + ((%current-system "frob")) + (run-with-store + %store + (mbegin + %store-monad + (set-current-system "bar") + (current-system)) + #:system + "foo"))) expected-value: bar actual-value: bar result: PASS test-name: query-path-info location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:917 source: + (test-assert + "query-path-info" + (let* ((ref (add-text-to-store %store "ref" "foo")) + (item (add-text-to-store + %store + "item" + "bar" + (list ref))) + (info (query-path-info %store item))) + (and (equal? (path-info-references info) (list ref)) + (equal? + (path-info-hash info) + (sha256 + (string->utf8 + (call-with-output-string + (cut write-file item <>)))))))) actual-value: #t result: PASS test-name: path-info-deriver location: /home/sapientech/Dev/guix/guix_wip/tests/store.scm:927 source: + (test-assert + "path-info-deriver" + (let* ((b (add-text-to-store + %store + "build" + "echo $foo > $out" + '())) + (s (add-to-store + %store + "bash" + #t + "sha256" + (search-bootstrap-binary + "bash" + (%current-system)))) + (d (derivation + %store + "the-thing" + s + `("-e" ,b) + #:env-vars + `(("foo" unquote (random-text))) + #:inputs + `((,b) (,s)))) + (o (derivation->output-path d))) + (and (build-derivations %store (list d)) + (not (path-info-deriver (query-path-info %store b))) + (string=? + (derivation-file-name d) + (path-info-deriver (query-path-info %store o)))))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/9n78vph0n1dn1fwxfnkn7apqv6afpff7-the-thing.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/9n//78vph0n1dn1fwxfnkn7apqv6afpff7-the-thing.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/9n78vph0n1dn1fwxfnkn7apqv6afpff7-the-thing.drv - actual-value: #t result: PASS SKIP: tests/gexp ================ test-name: no refs location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:71 source: + (test-equal + "no refs" + '(display "hello!") + (let ((exp (gexp (display "hello!")))) + (and (gexp? exp) + (null? (gexp-inputs exp)) + (gexp->sexp* exp)))) expected-value: (display hello!) actual-value: (display hello!) result: PASS test-name: unquote location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:78 source: + (test-equal + "unquote" + '(display `(foo ,(+ 2 3))) + (let ((exp (gexp (display `(foo ,(+ 2 3)))))) + (and (gexp? exp) + (null? (gexp-inputs exp)) + (gexp->sexp* exp)))) expected-value: (display (quasiquote (foo (unquote (+ 2 3))))) actual-value: (display (quasiquote (foo (unquote (+ 2 3))))) result: PASS test-name: one input package location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:85 source: + (test-assert + "one input package" + (let ((exp (gexp (display (ungexp coreutils))))) + (and (gexp? exp) + (match (gexp-inputs exp) + (((p "out")) (eq? p coreutils))) + (equal? + `(display + ,(derivation->output-path + (package-derivation %store coreutils))) + (gexp->sexp* exp))))) actual-value: #t result: PASS test-name: one input origin location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:95 source: + (test-assert + "one input origin" + (let ((exp (gexp (display (ungexp (package-source coreutils)))))) + (and (gexp? exp) + (match (gexp-inputs exp) + (((o "out")) (eq? o (package-source coreutils)))) + (equal? + `(display + ,(derivation->output-path + (package-source-derivation + %store + (package-source coreutils)))) + (gexp->sexp* exp))))) actual-value: #t result: PASS test-name: one local file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:106 source: + (test-assert + "one local file" + (let* ((file (search-path %load-path "guix.scm")) + (local (local-file file)) + (exp (gexp (display (ungexp local)))) + (intd (add-to-store + %store + (basename file) + #f + "sha256" + file))) + (and (gexp? exp) + (match (gexp-inputs exp) + (((x "out")) (eq? x local))) + (equal? `(display ,intd) (gexp->sexp* exp))))) actual-value: #t result: PASS test-name: one local file, symlink location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:118 source: + (test-assert + "one local file, symlink" + (let ((file (search-path %load-path "guix.scm")) + (link (tmpnam))) + (dynamic-wind + (const #t) + (lambda () + (symlink (canonicalize-path file) link) + (let* ((local (local-file link "my-file" #:recursive? #f)) + (exp (gexp (display (ungexp local)))) + (intd (add-to-store %store "my-file" #f "sha256" file))) + (and (gexp? exp) + (match (gexp-inputs exp) + (((x "out")) (eq? x local))) + (equal? `(display ,intd) (gexp->sexp* exp))))) + (lambda () + (false-if-exception (delete-file link)))))) actual-value: #t result: PASS test-name: local-file, relative file name location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:137 source: + (test-equal + "local-file, relative file name" + (canonicalize-path + (search-path %load-path "guix/base32.scm")) + (let ((directory + (dirname + (search-path + %load-path + "guix/build-system/gnu.scm")))) + (with-directory-excursion + directory + (let ((file (local-file "../guix/base32.scm"))) + (local-file-absolute-file-name file))))) expected-value: /home/sapientech/Dev/guix/guix_wip/guix/base32.scm actual-value: /home/sapientech/Dev/guix/guix_wip/guix/base32.scm result: PASS test-name: local-file, #:select? location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:145 source: + (test-assert + "local-file, #:select?" + (run-with-store + %store + (mlet* %store-monad + ((select? + -> + (lambda (file stat) + (member + (basename file) + '("guix.scm" "tests" "gexp.scm")))) + (file -> + (local-file + ".." + "directory" + #:recursive? + #t + #:select? + select?)) + (dir (lower-object file))) + (return + (and (store-path? dir) + (equal? + (scandir dir) + '("." ".." "guix.scm" "tests")) + (equal? + (scandir (string-append dir "/tests")) + '("." ".." "gexp.scm"))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: one plain file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:160 source: + (test-assert + "one plain file" + (let* ((file (plain-file "hi" "Hello, world!")) + (exp (gexp (display (ungexp file)))) + (expected + (add-text-to-store %store "hi" "Hello, world!"))) + (and (gexp? exp) + (match (gexp-inputs exp) + (((x "out")) (eq? x file))) + (equal? `(display ,expected) (gexp->sexp* exp))))) actual-value: #t result: PASS test-name: same input twice location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:170 source: + (test-assert + "same input twice" + (let ((exp (gexp (begin + (display (ungexp coreutils)) + (display (ungexp coreutils)))))) + (and (gexp? exp) + (match (gexp-inputs exp) + (((p "out")) (eq? p coreutils))) + (let ((e `(display + ,(derivation->output-path + (package-derivation %store coreutils))))) + (equal? `(begin ,e ,e) (gexp->sexp* exp)))))) actual-value: #t result: PASS test-name: two input packages, one derivation, one file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:182 source: + (test-assert + "two input packages, one derivation, one file" + (let* ((drv (build-expression->derivation + %store + "foo" + 'bar + #:guile-for-build + (package-derivation %store %bootstrap-guile))) + (txt (add-text-to-store %store "foo" "Hello, world!")) + (exp (gexp (begin + (display (ungexp coreutils)) + (display (ungexp %bootstrap-guile)) + (display (ungexp drv)) + (display (ungexp txt)))))) + (define (match-input thing) + (match-lambda + ((drv-or-pkg _ ...) (eq? thing drv-or-pkg)))) + (and (gexp? exp) + (= 4 (length (gexp-inputs exp))) + (every (lambda (input) + (find (match-input input) (gexp-inputs exp))) + (list drv coreutils %bootstrap-guile txt)) + (let ((e0 `(display + ,(derivation->output-path + (package-derivation %store coreutils)))) + (e1 `(display + ,(derivation->output-path + (package-derivation %store %bootstrap-guile)))) + (e2 `(display ,(derivation->output-path drv))) + (e3 `(display ,txt))) + (equal? + `(begin ,e0 ,e1 ,e2 ,e3) + (gexp->sexp* exp)))))) actual-value: #t result: PASS test-name: ungexp + ungexp-native location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:210 source: + (test-assert + "ungexp + ungexp-native" + (let* ((exp (gexp (list (ungexp-native %bootstrap-guile) + (ungexp coreutils) + (ungexp-native glibc) + (ungexp binutils)))) + (target "mips64el-linux") + (guile (derivation->output-path + (package-derivation %store %bootstrap-guile))) + (cu (derivation->output-path + (package-cross-derivation + %store + coreutils + target))) + (libc (derivation->output-path + (package-derivation %store glibc))) + (bu (derivation->output-path + (package-cross-derivation %store binutils target)))) + (and (lset= equal? + `((,%bootstrap-guile "out") (,glibc "out")) + (gexp-native-inputs exp)) + (lset= equal? + `((,coreutils "out") (,binutils "out")) + (gexp-inputs exp)) + (equal? + `(list ,guile ,cu ,libc ,bu) + (gexp->sexp* exp target))))) actual-value: #t result: PASS test-name: ungexp + ungexp-native, nested location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:233 source: + (test-equal + "ungexp + ungexp-native, nested" + (list `((,%bootstrap-guile "out")) + '<> + `((,coreutils "out"))) + (let* ((exp (gexp (list (ungexp-native (gexp (ungexp coreutils))) + (ungexp %bootstrap-guile))))) + (list (gexp-inputs exp) + '<> + (gexp-native-inputs exp)))) expected-value: (((# out)) <> ((# out))) actual-value: (((# out)) <> ((# out))) result: PASS test-name: input list location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:239 source: + (test-assert + "input list" + (let ((exp (gexp (display + '(ungexp (list %bootstrap-guile coreutils))))) + (guile (derivation->output-path + (package-derivation %store %bootstrap-guile))) + (cu (derivation->output-path + (package-derivation %store coreutils)))) + (and (lset= equal? + `((,%bootstrap-guile "out") (,coreutils "out")) + (gexp-inputs exp)) + (equal? + `(display '(,guile ,cu)) + (gexp->sexp* exp))))) actual-value: #t result: PASS test-name: input list + ungexp-native location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:252 source: + (test-assert + "input list + ungexp-native" + (let* ((target "mips64el-linux") + (exp (gexp (display + (cons '(ungexp-native + (list %bootstrap-guile coreutils)) + '(ungexp (list glibc binutils)))))) + (guile (derivation->output-path + (package-derivation %store %bootstrap-guile))) + (cu (derivation->output-path + (package-derivation %store coreutils))) + (xlibc (derivation->output-path + (package-cross-derivation %store glibc target))) + (xbu (derivation->output-path + (package-cross-derivation %store binutils target)))) + (and (lset= equal? + `((,%bootstrap-guile "out") (,coreutils "out")) + (gexp-native-inputs exp)) + (lset= equal? + `((,glibc "out") (,binutils "out")) + (gexp-inputs exp)) + (equal? + `(display (cons '(,guile ,cu) '(,xlibc ,xbu))) + (gexp->sexp* exp target))))) actual-value: #t result: PASS test-name: input list splicing location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:274 source: + (test-assert + "input list splicing" + (let* ((inputs + (list (gexp-input glibc "debug") + %bootstrap-guile)) + (outputs + (list (derivation->output-path + (package-derivation %store glibc) + "debug") + (derivation->output-path + (package-derivation %store %bootstrap-guile)))) + (exp (gexp (list (ungexp-splicing (cons (+ 2 3) inputs)))))) + (and (lset= equal? + `((,glibc "debug") (,%bootstrap-guile "out")) + (gexp-inputs exp)) + (equal? + (gexp->sexp* exp) + `(list ,@(cons 5 outputs)))))) actual-value: #t result: PASS test-name: input list splicing + ungexp-native-splicing location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:288 source: + (test-assert + "input list splicing + ungexp-native-splicing" + (let* ((inputs + (list (gexp-input glibc "debug") + %bootstrap-guile)) + (exp (gexp (list (ungexp-native-splicing (cons (+ 2 3) inputs)))))) + (and (lset= equal? + `((,glibc "debug") (,%bootstrap-guile "out")) + (gexp-native-inputs exp)) + (null? (gexp-inputs exp)) + (equal? + (gexp->sexp* exp) + (gexp->sexp* exp "mips64el-linux"))))) actual-value: #t result: PASS test-name: output list location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:298 source: + (test-equal + "output list" + 2 + (let ((exp (gexp (begin + (mkdir (ungexp output)) + (mkdir (ungexp output "bar")))))) + (length (gexp-outputs exp)))) expected-value: 2 actual-value: 2 result: PASS test-name: output list, combined gexps location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:304 source: + (test-assert + "output list, combined gexps" + (let* ((exp0 (gexp (mkdir (ungexp output)))) + (exp1 (gexp (mkdir (ungexp output "foo")))) + (exp2 (gexp (begin + (display "hi!") + (ungexp exp0) + (ungexp exp1))))) + (and (lset= equal? + (append (gexp-outputs exp0) (gexp-outputs exp1)) + (gexp-outputs exp2)) + (= 2 (length (gexp-outputs exp2)))))) actual-value: #t result: PASS test-name: output list, combined gexps, duplicate output location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:313 source: + (test-equal + "output list, combined gexps, duplicate output" + 1 + (let* ((exp0 (gexp (mkdir (ungexp output)))) + (exp1 (gexp (begin (mkdir (ungexp output)) (ungexp exp0)))) + (exp2 (gexp (begin (mkdir (ungexp output)) (ungexp exp1))))) + (length (gexp-outputs exp2)))) expected-value: 1 actual-value: 1 result: PASS test-name: output list + ungexp-splicing list, combined gexps location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:320 source: + (test-assert + "output list + ungexp-splicing list, combined gexps" + (let* ((exp0 (gexp (mkdir (ungexp output)))) + (exp1 (gexp (mkdir (ungexp output "foo")))) + (exp2 (gexp (begin + (display "hi!") + (ungexp-splicing (list exp0 exp1)))))) + (and (lset= equal? + (append (gexp-outputs exp0) (gexp-outputs exp1)) + (gexp-outputs exp2)) + (= 2 (length (gexp-outputs exp2)))))) actual-value: #t result: PASS test-name: gexp->file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:330 source: + (test-assert + "gexp->file" + (run-with-store + %store + (mlet* %store-monad + ((exp -> + (gexp (display (ungexp %bootstrap-guile)))) + (guile (package-file %bootstrap-guile)) + (sexp (gexp->sexp exp)) + (drv (gexp->file "foo" exp)) + (out -> (derivation->output-path drv)) + (done (built-derivations (list drv))) + (refs ((store-lift references) out))) + (return + (and (equal? sexp (call-with-input-file out read)) + (equal? (list guile) refs)))) + #:guile-for-build + (%guile-for-build))) random seed for tests: 1469938558 @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/br6cmbmw2d0y578fhk2041nmjya1xbn3-foo.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/br//6cmbmw2d0y578fhk2041nmjya1xbn3-foo.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/br6cmbmw2d0y578fhk2041nmjya1xbn3-foo.drv - actual-value: #t result: PASS test-name: gexp->derivation location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:341 source: + (test-assert + "gexp->derivation" + (run-with-store + %store + (mlet* %store-monad + ((file (text-file "foo" "Hello, world!")) + (exp -> + (gexp (begin + (mkdir (ungexp output)) + (chdir (ungexp output)) + (symlink + (string-append + (ungexp %bootstrap-guile) + "/bin/guile") + "foo") + (symlink (ungexp file) (ungexp output "2nd"))))) + (drv (gexp->derivation "foo" exp)) + (out -> (derivation->output-path drv)) + (out2 -> (derivation->output-path drv "2nd")) + (done (built-derivations (list drv))) + (refs ((store-lift references) out)) + (refs2 ((store-lift references) out2)) + (guile (package-file %bootstrap-guile "bin/guile"))) + (return + (and (string=? + (readlink (string-append out "/foo")) + guile) + (string=? (readlink out2) file) + (equal? refs (list (dirname (dirname guile)))) + (equal? refs2 (list file))))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/zmhmw968wgivsjlvw5qw3l2xlq5icaz6-foo.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/zm//hmw968wgivsjlvw5qw3l2xlq5icaz6-foo.drv.bz2 warning: rewriting hashes in `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/pysmjhfk9v7lfq97asqxzn1fxk5rqykr-foo'; cross fingers @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/zmhmw968wgivsjlvw5qw3l2xlq5icaz6-foo.drv - actual-value: #t result: PASS test-name: gexp->derivation vs. grafts location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:365 source: + (test-assert + "gexp->derivation vs. grafts" + (run-with-store + %store + (mlet* %store-monad + ((graft? (set-grafting #f)) + (p0 -> + (dummy-package + "dummy" + (arguments '(#:implicit-inputs? #f)))) + (r -> (package (inherit p0) (name "DuMMY"))) + (p1 -> (package (inherit p0) (replacement r))) + (exp0 -> + (gexp (frob (ungexp p0) (ungexp output)))) + (exp1 -> + (gexp (frob (ungexp p1) (ungexp output)))) + (void (set-guile-for-build %bootstrap-guile)) + (drv0 (gexp->derivation "t" exp0 #:graft? #t)) + (drv1 (gexp->derivation "t" exp1 #:graft? #t)) + (drv1* (gexp->derivation "t" exp1 #:graft? #f)) + (_ (set-grafting graft?))) + (return + (and (not (string=? + (derivation->output-path drv0) + (derivation->output-path drv1))) + (string=? + (derivation->output-path drv0) + (derivation->output-path drv1*))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation, composed gexps location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:384 source: + (test-assert + "gexp->derivation, composed gexps" + (run-with-store + %store + (mlet* %store-monad + ((exp0 -> + (gexp (begin + (mkdir (ungexp output)) + (chdir (ungexp output))))) + (exp1 -> + (gexp (symlink + (string-append + (ungexp %bootstrap-guile) + "/bin/guile") + "foo"))) + (exp -> + (gexp (begin (ungexp exp0) (ungexp exp1)))) + (drv (gexp->derivation "foo" exp)) + (out -> (derivation->output-path drv)) + (done (built-derivations (list drv))) + (guile (package-file %bootstrap-guile "bin/guile"))) + (return + (string=? + (readlink (string-append out "/foo")) + guile))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/d7a8qlyp2svnz3ayq1g38bx4lcymb4h6-foo.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/d7//a8qlyp2svnz3ayq1g38bx4lcymb4h6-foo.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/d7a8qlyp2svnz3ayq1g38bx4lcymb4h6-foo.drv - actual-value: #t result: PASS test-name: gexp->derivation, default system location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:400 source: + (test-assert + "gexp->derivation, default system" + (run-with-store + %store + (let ((system (%current-system)) + (mdrv (parameterize + ((%current-system "foobar64-linux")) + (gexp->derivation + "foo" + (gexp (mkdir (ungexp output))))))) + (mlet %store-monad + ((drv mdrv)) + (return + (string=? system (derivation-system drv))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation, local-file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:411 source: + (test-assert + "gexp->derivation, local-file" + (run-with-store + %store + (mlet* %store-monad + ((file -> (search-path %load-path "guix.scm")) + (intd (interned-file file #:recursive? #f)) + (local -> (local-file file)) + (exp -> + (gexp (begin + (stat (ungexp local)) + (symlink (ungexp local) (ungexp output))))) + (drv (gexp->derivation "local-file" exp))) + (mbegin + %store-monad + (built-derivations (list drv)) + (return + (string=? + (readlink (derivation->output-path drv)) + intd)))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation, cross-compilation location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:425 source: + (test-assert + "gexp->derivation, cross-compilation" + (run-with-store + %store + (mlet* %store-monad + ((target -> "mips64el-linux") + (exp -> + (gexp (list (ungexp coreutils) (ungexp output)))) + (xdrv (gexp->derivation "foo" exp #:target target)) + (refs ((store-lift references) + (derivation-file-name xdrv))) + (xcu (package->cross-derivation coreutils target)) + (cu (package->derivation coreutils))) + (return + (and (member (derivation-file-name xcu) refs) + (not (member (derivation-file-name cu) refs))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation, ungexp-native location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:439 source: + (test-assert + "gexp->derivation, ungexp-native" + (run-with-store + %store + (mlet* %store-monad + ((target -> "mips64el-linux") + (exp -> + (gexp (list (ungexp-native coreutils) (ungexp output)))) + (xdrv (gexp->derivation "foo" exp #:target target)) + (drv (gexp->derivation "foo" exp))) + (return + (string=? + (derivation-file-name drv) + (derivation-file-name xdrv)))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation, ungexp + ungexp-native location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:449 source: + (test-assert + "gexp->derivation, ungexp + ungexp-native" + (run-with-store + %store + (mlet* %store-monad + ((target -> "mips64el-linux") + (exp -> + (gexp (list (ungexp-native coreutils) + (ungexp glibc) + (ungexp output)))) + (xdrv (gexp->derivation "foo" exp #:target target)) + (refs ((store-lift references) + (derivation-file-name xdrv))) + (xglibc (package->cross-derivation glibc target)) + (cu (package->derivation coreutils))) + (return + (and (member (derivation-file-name cu) refs) + (member (derivation-file-name xglibc) refs)))) + #:guile-for-build + (%guile-for-build))) actual-value: (/home/sapientech/Dev/guix/guix_wip/test-tmp/store/izq9lrpv4z9xaaslk79ayidcv5lisn90-glibc-2.22.drv /home/sapientech/Dev/guix/guix_wip/test-tmp/store/sajnfz79nhdi4l8a464c9hhv4vf0gay2-coreutils-8.24.drv) result: PASS test-name: gexp->derivation, ungexp-native + composed gexps location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:463 source: + (test-assert + "gexp->derivation, ungexp-native + composed gexps" + (run-with-store + %store + (mlet* %store-monad + ((target -> "mips64el-linux") + (exp0 -> (gexp (list 1 2 (ungexp coreutils)))) + (exp -> (gexp (list 0 (ungexp-native exp0)))) + (xdrv (gexp->derivation "foo" exp #:target target)) + (drv (gexp->derivation "foo" exp))) + (return + (string=? + (derivation-file-name drv) + (derivation-file-name xdrv)))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation, store copy location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:474 source: + (test-assert + "gexp->derivation, store copy" + (run-with-store + %store + (let ((build-one + (gexp (call-with-output-file + (ungexp output) + (lambda (port) (display "This is the one." port))))) + (build-two + (lambda (one) + (gexp (begin + (mkdir (ungexp output)) + (symlink + (ungexp one) + (string-append (ungexp output) "/one")) + (call-with-output-file + (string-append (ungexp output) "/two") + (lambda (port) + (display "This is the second one." port))))))) + (build-drv + (gexp (begin + (use-modules (guix build store-copy)) + (mkdir (ungexp output)) + (populate-store '("graph") (ungexp output)))))) + (mlet* %store-monad + ((one (gexp->derivation "one" build-one)) + (two (gexp->derivation "two" (build-two one))) + (drv (gexp->derivation + "store-copy" + build-drv + #:references-graphs + `(("graph" ,two)) + #:modules + '((guix build store-copy) (guix build utils)))) + (ok? (built-derivations (list drv))) + (out -> (derivation->output-path drv))) + (let ((one (derivation->output-path one)) + (two (derivation->output-path two))) + (return + (and ok? + (file-exists? (string-append out "/" one)) + (file-exists? (string-append out "/" two)) + (file-exists? (string-append out "/" two "/two")) + (string=? + (readlink (string-append out "/" two "/one")) + one)))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: imported-files location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:509 source: + (test-assert + "imported-files" + (run-with-store + %store + (mlet* %store-monad + ((files -> + `(("x" + unquote + (search-path %load-path "ice-9/q.scm")) + ("a/b/c" + unquote + (search-path %load-path "guix/derivations.scm")) + ("p/q" + unquote + (search-path %load-path "guix.scm")) + ("p/z" + unquote + (search-path %load-path "guix/store.scm")))) + (drv (imported-files files))) + (mbegin + %store-monad + (built-derivations (list drv)) + (let ((dir (derivation->output-path drv))) + (return + (every (match-lambda + ((path . source) + (equal? + (call-with-input-file + (string-append dir "/" path) + get-bytevector-all) + (call-with-input-file + source + get-bytevector-all)))) + files))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp-modules & ungexp location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:529 source: + (test-equal + "gexp-modules & ungexp" + '((bar) (foo)) + ((@@ (guix gexp) gexp-modules) + (gexp (foo (ungexp + (with-imported-modules '((foo)) (gexp +))) + (ungexp-native + (with-imported-modules '((bar)) (gexp -))))))) expected-value: ((bar) (foo)) actual-value: ((bar) (foo)) result: PASS test-name: gexp-modules & ungexp-splicing location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:535 source: + (test-equal + "gexp-modules & ungexp-splicing" + '((foo) (bar)) + ((@@ (guix gexp) gexp-modules) + (gexp (foo (ungexp-splicing + (list (with-imported-modules '((foo)) (gexp +)) + (with-imported-modules '((bar)) (gexp -)))))))) expected-value: ((foo) (bar)) actual-value: ((foo) (bar)) result: PASS test-name: gexp->derivation #:modules location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:541 source: + (test-assert + "gexp->derivation #:modules" + (run-with-store + %store + (mlet* %store-monad + ((build -> + (gexp (begin + (use-modules (guix build utils)) + (mkdir-p + (string-append + (ungexp output) + "/guile/guix/nix")) + #t))) + (drv (gexp->derivation + "test-with-modules" + build + #:modules + '((guix build utils))))) + (mbegin + %store-monad + (built-derivations (list drv)) + (let* ((p (derivation->output-path drv)) + (s (stat (string-append p "/guile/guix/nix")))) + (return (eq? (stat:type s) 'directory))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation & with-imported-modules location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:555 source: + (test-assert + "gexp->derivation & with-imported-modules" + (run-with-store + %store + (mlet* %store-monad + ((build -> + (with-imported-modules + '((guix build utils)) + (gexp (begin + (use-modules (guix build utils)) + (mkdir-p + (string-append + (ungexp output) + "/guile/guix/nix")) + #t)))) + (drv (gexp->derivation "test-with-modules" build))) + (mbegin + %store-monad + (built-derivations (list drv)) + (let* ((p (derivation->output-path drv)) + (s (stat (string-append p "/guile/guix/nix")))) + (return (eq? (stat:type s) 'directory))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation & nested with-imported-modules location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:570 source: + (test-assert + "gexp->derivation & nested with-imported-modules" + (run-with-store + %store + (mlet* %store-monad + ((build1 + -> + (with-imported-modules + '((guix build utils)) + (gexp (begin + (use-modules (guix build utils)) + (mkdir-p + (string-append (ungexp output) "/guile/guix/nix")) + #t)))) + (build2 + -> + (with-imported-modules + '((guix build bournish)) + (gexp (begin + (use-modules + (guix build bournish) + (system base compile)) + (ungexp-native build1) + (call-with-output-file + (string-append (ungexp output) "/b") + (lambda (port) + (write (read-and-compile + (open-input-string "cd /foo") + #:from + %bournish-language + #:to + 'scheme) + port))))))) + (drv (gexp->derivation "test-with-modules" build2))) + (mbegin + %store-monad + (built-derivations (list drv)) + (let* ((p (derivation->output-path drv)) + (s (stat (string-append p "/guile/guix/nix"))) + (b (string-append p "/b"))) + (return + (and (eq? (stat:type s) 'directory) + (equal? + '(chdir "/foo") + (call-with-input-file b read))))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation #:references-graphs location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:599 source: + (test-assert + "gexp->derivation #:references-graphs" + (run-with-store + %store + (mlet* %store-monad + ((one (text-file "one" (random-text))) + (two (gexp->derivation + "two" + (gexp (symlink (ungexp one) (ungexp output "chbouib"))))) + (build -> + (with-imported-modules + '((guix build store-copy) (guix build utils)) + (gexp (begin + (use-modules (guix build store-copy)) + (with-output-to-file + (ungexp output) + (lambda () + (write (call-with-input-file + "guile" + read-reference-graph)))) + (with-output-to-file + (ungexp output "one") + (lambda () + (write (call-with-input-file + "one" + read-reference-graph)))) + (with-output-to-file + (ungexp output "two") + (lambda () + (write (call-with-input-file + "two" + read-reference-graph)))))))) + (drv (gexp->derivation + "ref-graphs" + build + #:references-graphs + `(("one" ,one) + ("two" ,two "chbouib") + ("guile" ,%bootstrap-guile)))) + (ok? (built-derivations (list drv))) + (guile-drv + (package->derivation %bootstrap-guile)) + (bash (interned-file + (search-bootstrap-binary + "bash" + (%current-system)) + "bash" + #:recursive? + #t)) + (g-one -> (derivation->output-path drv "one")) + (g-two -> (derivation->output-path drv "two")) + (g-guile -> (derivation->output-path drv))) + (return + (and ok? + (equal? + (call-with-input-file g-one read) + (list one)) + (lset= string=? + (call-with-input-file g-two read) + (list one + (derivation->output-path two "chbouib"))) + (lset= string=? + (call-with-input-file g-guile read) + (list (derivation->output-path guile-drv) bash))))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/gnc6nwd3yi5vdbldw4xvb21hyqypj2qk-two.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/gn//c6nwd3yi5vdbldw4xvb21hyqypj2qk-two.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/gnc6nwd3yi5vdbldw4xvb21hyqypj2qk-two.drv - @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/drinqd82fbs5xmay5xii7lgivxl6bb1a-ref-graphs.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/dr//inqd82fbs5xmay5xii7lgivxl6bb1a-ref-graphs.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/drinqd82fbs5xmay5xii7lgivxl6bb1a-ref-graphs.drv - actual-value: #t result: PASS test-name: gexp->derivation #:allowed-references location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:643 source: + (test-assert + "gexp->derivation #:allowed-references" + (run-with-store + %store + (mlet %store-monad + ((drv (gexp->derivation + "allowed-refs" + (gexp (begin + (mkdir (ungexp output)) + (chdir (ungexp output)) + (symlink (ungexp output) "self") + (symlink (ungexp %bootstrap-guile) "guile"))) + #:allowed-references + (list "out" %bootstrap-guile)))) + (built-derivations (list drv))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/qr3plan0zxv637d52f8kg7picirmdmmc-allowed-refs.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/qr//3plan0zxv637d52f8kg7picirmdmmc-allowed-refs.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/qr3plan0zxv637d52f8kg7picirmdmmc-allowed-refs.drv - actual-value: #t result: PASS test-name: gexp->derivation #:allowed-references, specific output location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:655 source: + (test-assert + "gexp->derivation #:allowed-references, specific output" + (run-with-store + %store + (mlet* %store-monad + ((in (gexp->derivation + "thing" + (gexp (begin + (mkdir (ungexp output "ok")) + (mkdir (ungexp output "not-ok")))))) + (drv (gexp->derivation + "allowed-refs" + (gexp (begin + (pk (ungexp in "not-ok")) + (mkdir (ungexp output)) + (chdir (ungexp output)) + (symlink (ungexp output) "self") + (symlink (ungexp in "ok") "ok"))) + #:allowed-references + (list "out" (gexp-input in "ok"))))) + (built-derivations (list drv))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: gexp->derivation #:allowed-references, disallowed location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:672 source: + (test-assert + "gexp->derivation #:allowed-references, disallowed" + (let ((drv (run-with-store + %store + (gexp->derivation + "allowed-refs" + (gexp (begin + (mkdir (ungexp output)) + (chdir (ungexp output)) + (symlink (ungexp %bootstrap-guile) "guile"))) + #:allowed-references + '())))) + (guard (c ((nix-protocol-error? c) #t)) + (build-derivations %store (list drv)) + #f))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/f2wbs6skpgnmljv4cddzx05gcx26b6n5-allowed-refs.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/f2//wbs6skpgnmljv4cddzx05gcx26b6n5-allowed-refs.drv.bz2 output (`/home/sapientech/Dev/guix/guix_wip/test-tmp/store/ilzqy6rrlwdwsa939k1z5maipa1g202i-allowed-refs') is not allowed to refer to path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/0vxgvlx03qscrds88s65hrs70n5jkw2g-guile-bootstrap-2.0' @ build-failed /home/sapientech/Dev/guix/guix_wip/test-tmp/store/f2wbs6skpgnmljv4cddzx05gcx26b6n5-allowed-refs.drv - 1 output (`/home/sapientech/Dev/guix/guix_wip/test-tmp/store/ilzqy6rrlwdwsa939k1z5maipa1g202i-allowed-refs') is not allowed to refer to path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/0vxgvlx03qscrds88s65hrs70n5jkw2g-guile-bootstrap-2.0' actual-value: #t result: PASS test-name: gexp->derivation #:disallowed-references, allowed location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:684 source: + (test-assert + "gexp->derivation #:disallowed-references, allowed" + (run-with-store + %store + (mlet %store-monad + ((drv (gexp->derivation + "disallowed-refs" + (gexp (begin + (mkdir (ungexp output)) + (chdir (ungexp output)) + (symlink (ungexp output) "self") + (symlink (ungexp %bootstrap-guile) "guile"))) + #:disallowed-references + '()))) + (built-derivations (list drv))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/n3hhcjzignj7czh53scbwjm7mcxa27yk-disallowed-refs.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/n3//hhcjzignj7czh53scbwjm7mcxa27yk-disallowed-refs.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/n3hhcjzignj7czh53scbwjm7mcxa27yk-disallowed-refs.drv - actual-value: #t result: PASS test-name: gexp->derivation #:disallowed-references location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:696 source: + (test-assert + "gexp->derivation #:disallowed-references" + (let ((drv (run-with-store + %store + (gexp->derivation + "disallowed-refs" + (gexp (begin + (mkdir (ungexp output)) + (chdir (ungexp output)) + (symlink (ungexp %bootstrap-guile) "guile"))) + #:disallowed-references + (list %bootstrap-guile))))) + (guard (c ((nix-protocol-error? c) #t)) + (build-derivations %store (list drv)) + #f))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/y6h6i2d0vb4whn8bfvyl5vff17h9rs19-disallowed-refs.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/y6//h6i2d0vb4whn8bfvyl5vff17h9rs19-disallowed-refs.drv.bz2 output (`/home/sapientech/Dev/guix/guix_wip/test-tmp/store/jz1q32n6qxyvi6dkywl028y6fvdfsi1k-disallowed-refs') is not allowed to refer to path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/0vxgvlx03qscrds88s65hrs70n5jkw2g-guile-bootstrap-2.0' @ build-failed /home/sapientech/Dev/guix/guix_wip/test-tmp/store/y6h6i2d0vb4whn8bfvyl5vff17h9rs19-disallowed-refs.drv - 1 output (`/home/sapientech/Dev/guix/guix_wip/test-tmp/store/jz1q32n6qxyvi6dkywl028y6fvdfsi1k-disallowed-refs') is not allowed to refer to path `/home/sapientech/Dev/guix/guix_wip/test-tmp/store/0vxgvlx03qscrds88s65hrs70n5jkw2g-guile-bootstrap-2.0' actual-value: #t result: PASS test-name: gexp->script location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:716 source: + (test-assert + "gexp->script" + (run-with-store + %store + (mlet* %store-monad + ((n -> (random (expt 2 50))) + (exp -> + (gexp (system* + (string-append + (ungexp %bootstrap-guile) + "/bin/guile") + "-c" + (object->string '(display (expt (ungexp n) 2)))))) + (drv (gexp->script + "guile-thing" + exp + #:guile + %bootstrap-guile)) + (out -> (derivation->output-path drv)) + (done (built-derivations (list drv)))) + (let* ((pipe (open-input-pipe out)) + (str (get-string-all pipe))) + (return + (and (zero? (close-pipe pipe)) + (= (expt n 2) (string->number str)))))) + #:guile-for-build + (%guile-for-build))) result: SKIP test-name: program-file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:733 source: + (test-assert + "program-file" + (run-with-store + %store + (let* ((n (random (expt 2 50))) + (exp (with-imported-modules + '((guix build utils)) + (gexp (begin + (use-modules (guix build utils)) + (display (ungexp n)))))) + (file (program-file + "program" + exp + #:guile + %bootstrap-guile))) + (mlet* %store-monad + ((drv (lower-object file)) + (out -> (derivation->output-path drv))) + (mbegin + %store-monad + (built-derivations (list drv)) + (let* ((pipe (open-input-pipe out)) + (str (get-string-all pipe))) + (return + (and (zero? (close-pipe pipe)) + (= n (string->number str)))))))) + #:guile-for-build + (%guile-for-build))) result: SKIP test-name: scheme-file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:750 source: + (test-assert + "scheme-file" + (run-with-store + %store + (let* ((text (plain-file "foo" "Hello, world!")) + (scheme + (scheme-file + "bar" + (gexp (list "foo" (ungexp text)))))) + (mlet* %store-monad + ((drv (lower-object scheme)) + (text (lower-object text)) + (out -> (derivation->output-path drv))) + (mbegin + %store-monad + (built-derivations (list drv)) + (mlet %store-monad + ((refs ((store-lift references) out))) + (return + (and (equal? refs (list text)) + (equal? + `(list "foo" ,text) + (call-with-input-file out read)))))))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: text-file* location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:763 source: + (test-assert + "text-file*" + (let ((references (store-lift references))) + (run-with-store + %store + (mlet* %store-monad + ((drv (package->derivation %bootstrap-guile)) + (guile -> (derivation->output-path drv)) + (file (text-file "bar" "This is bar.")) + (text (text-file* + "foo" + %bootstrap-guile + "/bin/guile " + (gexp-input %bootstrap-guile "out") + "/bin/guile " + drv + "/bin/guile " + file)) + (done (built-derivations (list text))) + (out -> (derivation->output-path text)) + (refs (references out))) + (return + (and (lset= string=? refs (list guile file)) + (equal? + (call-with-input-file out get-string-all) + (string-append + guile + "/bin/guile " + guile + "/bin/guile " + guile + "/bin/guile " + file))))) + #:guile-for-build + (package-derivation %store %bootstrap-guile)))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/hkndxm5i5l1zczbiavqbk84qrdmilz6g-foo.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/hk//ndxm5i5l1zczbiavqbk84qrdmilz6g-foo.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/hkndxm5i5l1zczbiavqbk84qrdmilz6g-foo.drv - actual-value: #t result: PASS test-name: mixed-text-file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:787 source: + (test-assert + "mixed-text-file" + (run-with-store + %store + (mlet* %store-monad + ((file -> + (mixed-text-file + "mixed" + "export PATH=" + %bootstrap-guile + "/bin")) + (drv (lower-object file)) + (out -> (derivation->output-path drv)) + (guile-drv + (package->derivation %bootstrap-guile)) + (guile -> (derivation->output-path guile-drv))) + (mbegin + %store-monad + (built-derivations (list drv)) + (mlet %store-monad + ((refs ((store-lift references) out))) + (return + (and (string=? + (string-append "export PATH=" guile "/bin") + (call-with-input-file out get-string-all)) + (equal? refs (list guile))))))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/h3cn1cfdzpsbzn9cyfg47jbs8744gmwf-mixed.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/h3//cn1cfdzpsbzn9cyfg47jbs8744gmwf-mixed.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/h3cn1cfdzpsbzn9cyfg47jbs8744gmwf-mixed.drv - actual-value: #t result: PASS test-name: gexp->derivation vs. %current-target-system location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:802 source: + (test-assert + "gexp->derivation vs. %current-target-system" + (let ((mval (gexp->derivation + "foo" + (gexp (begin + (mkdir (ungexp output)) + (foo (ungexp-native gnu-make)))) + #:target + #f))) + (parameterize + ((%current-target-system "fooooo")) + (derivation? (run-with-store %store mval))))) actual-value: #t result: PASS test-name: lower-object location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:813 source: + (test-assert + "lower-object" + (run-with-store + %store + (mlet %store-monad + ((drv1 (lower-object %bootstrap-guile)) + (drv2 (lower-object (package-source coreutils))) + (item (lower-object (plain-file "foo" "Hello!")))) + (return + (and (derivation? drv1) + (derivation? drv2) + (store-path? item)))) + #:guile-for-build + (%guile-for-build))) actual-value: #t result: PASS test-name: lower-object, computed-file location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:820 source: + (test-assert + "lower-object, computed-file" + (run-with-store + %store + (let* ((text (plain-file "foo" "Hello!")) + (exp (gexp (begin + (mkdir (ungexp output)) + (symlink + (ungexp %bootstrap-guile) + (string-append (ungexp output) "/guile")) + (symlink + (ungexp text) + (string-append (ungexp output) "/text"))))) + (computed (computed-file "computed" exp))) + (mlet* %store-monad + ((text (lower-object text)) + (guile-drv (lower-object %bootstrap-guile)) + (comp-drv (lower-object computed)) + (comp -> (derivation->output-path comp-drv))) + (mbegin + %store-monad + (built-derivations (list comp-drv)) + (return + (and (string=? + (readlink (string-append comp "/guile")) + (derivation->output-path guile-drv)) + (string=? + (readlink (string-append comp "/text")) + text)))))) + #:guile-for-build + (%guile-for-build))) @ build-started /home/sapientech/Dev/guix/guix_wip/test-tmp/store/fdhli6nzdk7643skliaca0flzvrf2xx8-computed.drv - x86_64-linux /home/sapientech/Dev/guix/guix_wip/test-tmp/var/log/guix/drvs/fd//hli6nzdk7643skliaca0flzvrf2xx8-computed.drv.bz2 @ build-succeeded /home/sapientech/Dev/guix/guix_wip/test-tmp/store/fdhli6nzdk7643skliaca0flzvrf2xx8-computed.drv - actual-value: #t result: PASS test-name: printer location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:839 source: + (test-assert + "printer" + (string-match + "^#$" + (with-output-to-string + (lambda () + (write (gexp (string-append (ungexp coreutils) "/bin/uname"))))))) actual-value: #(#:out> "/bin/uname") 5c2f630> (0 . 122)) result: PASS test-name: printer vs. ungexp-splicing location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:848 source: + (test-assert + "printer vs. ungexp-splicing" + (string-match + "^#$" + (with-output-to-string + (lambda () + (write (gexp (begin (ungexp-splicing (gexp ()))))))))) actual-value: #(# (0 . 16)) result: PASS test-name: sugar location: /home/sapientech/Dev/guix/guix_wip/tests/gexp.scm:856 source: + (test-equal + "sugar" + '(gexp (foo (ungexp bar) + (ungexp baz "out") + (ungexp (chbouib 42)) + (ungexp-splicing (list x y z)) + (ungexp-native foo) + (ungexp-native foo "out") + (ungexp-native (chbouib 42)) + (ungexp-native-splicing (list x y z)))) + '(gexp (foo (ungexp bar) + (ungexp baz "out") + (ungexp (chbouib 42)) + (ungexp-splicing (list x y z)) + (ungexp-native foo) + (ungexp-native foo "out") + (ungexp-native (chbouib 42)) + (ungexp-native-splicing (list x y z))))) expected-value: (gexp (foo (ungexp bar) (ungexp baz out) (ungexp (chbouib 42)) (ungexp-splicing (list x y z)) (ungexp-native foo) (ungexp-native foo out) (ungexp-native (chbouib 42)) (ungexp-native-splicing (list x y z)))) actual-value: (gexp (foo (ungexp bar) (ungexp baz out) (ungexp (chbouib 42)) (ungexp-splicing (list x y z)) (ungexp-native foo) (ungexp-native foo out) (ungexp-native (chbouib 42)) (ungexp-native-splicing (list x y z)))) result: PASS SKIP: tests/syscalls ==================== test-name: mount, ENOENT location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:38 source: + (test-equal + "mount, ENOENT" + ENOENT + (catch 'system-error + (lambda () + (mount "/dev/null" "/does-not-exist" "ext2") + #f) + (compose system-error-errno list))) expected-value: 2 actual-value: 2 result: PASS test-name: umount, ENOENT/EPERM location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:46 source: + (test-assert + "umount, ENOENT/EPERM" + (catch 'system-error + (lambda () (umount "/does-not-exist") #f) + (lambda args + (memv (system-error-errno args) + (list EPERM ENOENT))))) actual-value: (1 2) result: PASS test-name: mount-points location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:55 source: + (test-assert + "mount-points" + (any (cute member <> (mount-points)) + '("/" "/proc" "/sys" "/dev"))) actual-value: (/ /sys/kernel/security /dev/shm /dev/pts /sys/fs/cgroup /sys/fs/cgroup/systemd /sys/fs/pstore /sys/fs/cgroup/freezer /sys/fs/cgroup/cpuset /sys/fs/cgroup/cpu,cpuacct /sys/fs/cgroup/blkio /sys/fs/cgroup/memory /sys/fs/cgroup/net_cls /sys/fs/cgroup/pids /sys/fs/cgroup/devices /proc/sys/fs/binfmt_misc /dev/mqueue /sys/kernel/debug /dev/hugepages /sys/kernel/config /tmp /run/user/1000) result: PASS test-name: swapon, ENOENT/EPERM location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:61 source: + (test-assert + "swapon, ENOENT/EPERM" + (catch 'system-error + (lambda () (swapon "/does-not-exist") #f) + (lambda args + (memv (system-error-errno args) + (list EPERM ENOENT))))) actual-value: (1 2) result: PASS test-name: swapoff, ENOENT/EINVAL/EPERM location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:69 source: + (test-assert + "swapoff, ENOENT/EINVAL/EPERM" + (catch 'system-error + (lambda () (swapoff "/does-not-exist") #f) + (lambda args + (memv (system-error-errno args) + (list EPERM EINVAL ENOENT))))) actual-value: (1 22 2) result: PASS test-name: mkdtemp! location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:77 source: + (test-assert + "mkdtemp!" + (let* ((tmp (or (getenv "TMPDIR") "/tmp")) + (dir (mkdtemp! + (string-append tmp "/guix-test-XXXXXX")))) + (and (file-exists? dir) (begin (rmdir dir) #t)))) actual-value: #t result: PASS test-name: statfs, ENOENT location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:85 source: + (test-equal + "statfs, ENOENT" + ENOENT + (catch 'system-error + (lambda () (statfs "/does-not-exist")) + (compose system-error-errno list))) expected-value: 2 actual-value: 2 result: PASS test-name: statfs location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:92 source: + (test-assert + "statfs" + (let ((fs (statfs "/"))) + (and (file-system? fs) + (> (file-system-block-size fs) 0) + (>= (file-system-blocks-available fs) 0) + (>= (file-system-blocks-free fs) + (file-system-blocks-available fs))))) actual-value: #t result: PASS test-name: clone location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:109 source: + (test-assert + "clone" + (match (clone (logior CLONE_NEWUSER SIGCHLD)) + (0 (primitive-exit 42)) + (pid (and (not (equal? + (readlink (user-namespace pid)) + (readlink (user-namespace (getpid))))) + (match (waitpid pid) + ((_ . status) (= 42 (status:exit-val status)))))))) result: SKIP test-name: setns location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:122 source: + (test-assert + "setns" + (match (clone (logior CLONE_NEWUSER SIGCHLD)) + (0 (primitive-exit 0)) + (clone-pid + (match (pipe) + ((in . out) + (match (primitive-fork) + (0 + (close in) + (call-with-input-file + (user-namespace clone-pid) + (lambda (port) (setns (port->fdes port) 0))) + (write 'done out) + (close out) + (primitive-exit 0)) + (fork-pid + (close out) + (read in) + (let ((result + (and (equal? + (readlink + (user-namespace clone-pid)) + (readlink + (user-namespace fork-pid)))))) + (waitpid clone-pid) + (waitpid fork-pid) + result)))))))) result: SKIP test-name: pivot-root location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:151 source: + (test-assert + "pivot-root" + (match (pipe) + ((in . out) + (match (clone (logior CLONE_NEWUSER CLONE_NEWNS SIGCHLD)) + (0 + (close in) + (call-with-temporary-directory + (lambda (root) + (let ((put-old (string-append root "/real-root"))) + (mount "none" root "tmpfs") + (mkdir put-old) + (call-with-output-file + (string-append root "/test") + (lambda (port) (display "testing\n" port))) + (pivot-root root put-old) + (write (file-exists? "/test") out) + (close out)))) + (primitive-exit 0)) + (pid (close out) + (let ((result (read in))) + (close in) + (and (zero? (match (waitpid pid) + ((_ . status) + (status:exit-val status)))) + (eq? #t result)))))))) result: SKIP test-name: fcntl-flock wait location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:180 source: + (test-equal + "fcntl-flock wait" + 42 + (let ((file (open-file temp-file "w0b"))) + (fcntl-flock file 'write-lock) + (match (primitive-fork) + (0 + (dynamic-wind + (const #t) + (lambda () + (let ((file (open-file temp-file "r0b"))) + (fcntl-flock file 'read-lock) + (primitive-exit (read file))) + (primitive-exit 1)) + (lambda () (primitive-exit 2)))) + (pid (display "hello, world!" file) + (force-output file) + (sleep 1) + (seek file 0 SEEK_SET) + (truncate-file file 0) + (write 42 file) + (force-output file) + (fcntl-flock file 'unlock) + (match (waitpid pid) + ((_ . status) + (let ((result (status:exit-val status))) + (close-port file) + result))))))) expected-value: 42 actual-value: 42 result: PASS test-name: fcntl-flock non-blocking location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:219 source: + (test-equal + "fcntl-flock non-blocking" + EAGAIN + (match (pipe) + ((input . output) + (match (primitive-fork) + (0 + (dynamic-wind + (const #t) + (lambda () + (close-port output) + (read-char input) + (let ((file (open-file temp-file "w0"))) + (catch 'flock-error + (lambda () + (fcntl-flock file 'write-lock #:wait? #f)) + (lambda (key errno) + (primitive-exit (pk 'errno errno))))) + (primitive-exit -1)) + (lambda () (primitive-exit -2)))) + (pid (close-port input) + (let ((file (open-file temp-file "w0"))) + (fcntl-flock file 'write-lock) + (write 'green-light output) + (force-output output) + (match (waitpid pid) + ((_ . status) + (let ((result (status:exit-val status))) + (fcntl-flock file 'unlock) + (close-port file) + result))))))))) ;;; (errno 11) expected-value: 11 actual-value: 11 result: PASS test-name: all-network-interface-names location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:261 source: + (test-assert + "all-network-interface-names" + (match (all-network-interface-names) + (((? string? names) ..1) (member "lo" names)))) actual-value: (lo enp0s25 wlp2s0) result: PASS test-name: network-interface-names location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:266 source: + (test-assert + "network-interface-names" + (match (network-interface-names) + (((? string? names) ..1) + (lset<= + string=? + names + (all-network-interface-names))))) actual-value: #t result: PASS test-name: network-interface-flags location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:271 source: + (test-assert + "network-interface-flags" + (let* ((sock (socket AF_INET SOCK_STREAM 0)) + (flags (network-interface-flags sock "lo"))) + (close-port sock) + (and (not (zero? (logand flags IFF_LOOPBACK))) + (not (zero? (logand flags IFF_UP)))))) actual-value: #t result: PASS test-name: loopback-network-interface? location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:278 source: + (test-equal + "loopback-network-interface?" + ENODEV + (and (loopback-network-interface? "lo") + (catch 'system-error + (lambda () + (loopback-network-interface? "nonexistent") + #f) + (lambda args (system-error-errno args))))) expected-value: 19 actual-value: 19 result: PASS test-name: set-network-interface-flags location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:289 source: + (test-assert + "set-network-interface-flags" + (let ((sock (socket AF_INET SOCK_STREAM 0))) + (catch 'system-error + (lambda () + (set-network-interface-flags sock "lo" IFF_UP)) + (lambda args + (close-port sock) + (memv (system-error-errno args) + (list EPERM EACCES)))))) actual-value: (1 13) result: PASS test-name: network-interface-address lo location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:299 source: + (test-equal + "network-interface-address lo" + (make-socket-address + AF_INET + (inet-pton AF_INET "127.0.0.1") + 0) + (let* ((sock (socket AF_INET SOCK_STREAM 0)) + (addr (network-interface-address sock "lo"))) + (close-port sock) + addr)) expected-value: #(2 2130706433 0) actual-value: #(2 2130706433 0) result: PASS test-name: set-network-interface-address location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:307 source: + (test-assert + "set-network-interface-address" + (let ((sock (socket AF_INET SOCK_STREAM 0))) + (catch 'system-error + (lambda () + (set-network-interface-address + sock + "nonexistent" + (make-socket-address + AF_INET + (inet-pton AF_INET "127.12.14.15") + 0))) + (lambda args + (close-port sock) + (memv (system-error-errno args) + (list EPERM EACCES)))))) actual-value: (1 13) result: PASS test-name: network-interfaces returns one or more interfaces location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:321 source: + (test-equal + "network-interfaces returns one or more interfaces" + '(#t #t #t) + (match (network-interfaces) + ((interfaces ..1) + (list (every interface? interfaces) + (every string? (map interface-name interfaces)) + (every (lambda (sockaddr) + (or (vector? sockaddr) (not sockaddr))) + (map interface-address interfaces)))))) expected-value: (#t #t #t) actual-value: (#t #t #t) result: PASS test-name: network-interfaces returns "lo" location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:333 source: + (test-equal + "network-interfaces returns \"lo\"" + (list #t + (make-socket-address + AF_INET + (inet-pton AF_INET "127.0.0.1") + 0)) + (match (filter + (lambda (interface) + (string=? "lo" (interface-name interface))) + (network-interfaces)) + ((loopbacks ..1) + (list (every (lambda (lo) + (not (zero? (logand + IFF_LOOPBACK + (interface-flags lo))))) + loopbacks) + (match (find (lambda (lo) + (= AF_INET + (sockaddr:fam (interface-address lo)))) + loopbacks) + (#f #f) + (lo (interface-address lo))))))) expected-value: (#t #(2 2130706433 0)) actual-value: (#t #(2 2130706433 0)) result: PASS test-name: tcgetattr ENOTTY location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:348 source: + (test-equal + "tcgetattr ENOTTY" + ENOTTY + (catch 'system-error + (lambda () + (call-with-input-file + "/dev/null" + (lambda (port) (tcgetattr (fileno port))))) + (compose system-error-errno list))) expected-value: 25 actual-value: 25 result: PASS test-name: tcgetattr location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:362 source: + (test-assert + "tcgetattr" + (let ((termios (tcgetattr 0))) + (and (termios? termios) + (> (termios-input-speed termios) 0) + (> (termios-output-speed termios) 0)))) actual-value: #t result: PASS test-name: tcsetattr location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:368 source: + (test-assert + "tcsetattr" + (let ((first (tcgetattr 0))) + (tcsetattr 0 (tcsetattr-action TCSANOW) first) + (equal? first (tcgetattr 0)))) actual-value: #t result: PASS test-name: terminal-window-size ENOTTY location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:373 source: + (test-assert + "terminal-window-size ENOTTY" + (call-with-input-file + "/dev/null" + (lambda (port) + (catch 'system-error + (lambda () (terminal-window-size port)) + (lambda args + (memv (system-error-errno args) + (list ENOTTY EINVAL))))))) actual-value: (25 22) result: PASS test-name: terminal-columns location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:384 source: + (test-assert + "terminal-columns" + (> (terminal-columns) 0)) actual-value: #t result: PASS test-name: terminal-columns non-file port location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:387 source: + (test-assert + "terminal-columns non-file port" + (> (terminal-columns + (open-input-string + "Join us now, share the software!")) + 0)) actual-value: #t result: PASS SKIP: tests/gremlin =================== test-name: elf-dynamic-info-needed, executable location: /home/sapientech/Dev/guix/guix_wip/tests/gremlin.scm:44 source: + (test-assert + "elf-dynamic-info-needed, executable" + (let* ((elf (call-with-input-file %guile-executable read-elf)) + (dyninfo (elf-dynamic-info elf))) + (or (not dyninfo) + (lset<= + string=? + (list (string-append "libguile-" (effective-version)) + "libgc" + "libunistring" + "libffi") + (map (lambda (lib) + (string-take lib (string-contains lib ".so"))) + (elf-dynamic-info-needed dyninfo)))))) result: SKIP test-name: expand-origin location: /home/sapientech/Dev/guix/guix_wip/tests/gremlin.scm:55 source: + (test-equal + "expand-origin" + '("OOO/../lib" + "OOO" + "../OOO/bar/OOO/baz" + "ORIGIN/foo") + (map (cut expand-origin <> "OOO") + '("$ORIGIN/../lib" + "${ORIGIN}" + "../${ORIGIN}/bar/$ORIGIN/baz" + "ORIGIN/foo"))) expected-value: (OOO/../lib OOO ../OOO/bar/OOO/baz ORIGIN/foo) actual-value: (OOO/../lib OOO ../OOO/bar/OOO/baz ORIGIN/foo) result: PASS FAIL: tests/lint ================ test-name: description: not a string location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:145 source: + (test-assert + "description: not a string" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (description 'foobar)))) + (check-description-style pkg))) + "invalid description"))) actual-value: #t result: PASS test-name: description: not empty location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:153 source: + (test-assert + "description: not empty" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (description "")))) + (check-description-style pkg))) + "description should not be empty"))) actual-value: #t result: PASS test-name: description: valid Texinfo markup location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:161 source: + (test-assert + "description: valid Texinfo markup" + (->bool + (string-contains + (with-warnings + (check-description-style + (dummy-package "x" (description "f{oo}b@r")))) + "Texinfo markup in description is invalid"))) actual-value: #t result: PASS test-name: description: does not start with an upper-case letter location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:168 source: + (test-assert + "description: does not start with an upper-case letter" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (description "bad description.")))) + (check-description-style pkg))) + "description should start with an upper-case letter"))) actual-value: #t result: PASS test-name: description: may start with a digit location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:176 source: + (test-assert + "description: may start with a digit" + (string-null? + (with-warnings + (let ((pkg (dummy-package + "x" + (description "2-component library.")))) + (check-description-style pkg))))) actual-value: #t result: PASS test-name: description: may start with lower-case package name location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:183 source: + (test-assert + "description: may start with lower-case package name" + (string-null? + (with-warnings + (let ((pkg (dummy-package + "x" + (description "x is a dummy package.")))) + (check-description-style pkg))))) actual-value: #t result: PASS test-name: description: two spaces after end of sentence location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:190 source: + (test-assert + "description: two spaces after end of sentence" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (description "Bad. Quite bad.")))) + (check-description-style pkg))) + "sentences in description should be followed by two spaces"))) actual-value: #t result: PASS test-name: description: end-of-sentence detection with abbreviations location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:198 source: + (test-assert + "description: end-of-sentence detection with abbreviations" + (string-null? + (with-warnings + (let ((pkg (dummy-package + "x" + (description + "E.g. Foo, i.e. Bar resp. Baz (a.k.a. DVD).")))) + (check-description-style pkg))))) actual-value: #t result: PASS test-name: synopsis: not a string location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:206 source: + (test-assert + "synopsis: not a string" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (synopsis #f)))) + (check-synopsis-style pkg))) + "invalid synopsis"))) actual-value: #t result: PASS test-name: synopsis: not empty location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:214 source: + (test-assert + "synopsis: not empty" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (synopsis "")))) + (check-synopsis-style pkg))) + "synopsis should not be empty"))) actual-value: #t result: PASS test-name: synopsis: does not start with an upper-case letter location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:222 source: + (test-assert + "synopsis: does not start with an upper-case letter" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (synopsis "bad synopsis.")))) + (check-synopsis-style pkg))) + "synopsis should start with an upper-case letter"))) actual-value: #t result: PASS test-name: synopsis: may start with a digit location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:230 source: + (test-assert + "synopsis: may start with a digit" + (string-null? + (with-warnings + (let ((pkg (dummy-package + "x" + (synopsis "5-dimensional frobnicator")))) + (check-synopsis-style pkg))))) actual-value: #t result: PASS test-name: synopsis: ends with a period location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:237 source: + (test-assert + "synopsis: ends with a period" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (synopsis "Bad synopsis.")))) + (check-synopsis-style pkg))) + "no period allowed at the end of the synopsis"))) actual-value: #t result: PASS test-name: synopsis: ends with 'etc.' location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:245 source: + (test-assert + "synopsis: ends with 'etc.'" + (string-null? + (with-warnings + (let ((pkg (dummy-package "x" (synopsis "Foo, bar, etc.")))) + (check-synopsis-style pkg))))) actual-value: #t result: PASS test-name: synopsis: starts with 'A' location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:251 source: + (test-assert + "synopsis: starts with 'A'" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (synopsis "A bad synop\u015dis")))) + (check-synopsis-style pkg))) + "no article allowed at the beginning of the synopsis"))) actual-value: #t result: PASS test-name: synopsis: starts with 'An' location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:259 source: + (test-assert + "synopsis: starts with 'An'" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (synopsis "An awful synopsis")))) + (check-synopsis-style pkg))) + "no article allowed at the beginning of the synopsis"))) actual-value: #t result: PASS test-name: synopsis: starts with 'a' location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:267 source: + (test-assert + "synopsis: starts with 'a'" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" (synopsis "a bad synopsis")))) + (check-synopsis-style pkg))) + "no article allowed at the beginning of the synopsis"))) actual-value: #t result: PASS test-name: synopsis: starts with 'an' location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:275 source: + (test-assert + "synopsis: starts with 'an'" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (synopsis "an awful synopsis")))) + (check-synopsis-style pkg))) + "no article allowed at the beginning of the synopsis"))) actual-value: #t result: PASS test-name: synopsis: too long location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:283 source: + (test-assert + "synopsis: too long" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (synopsis (make-string 80 #\x))))) + (check-synopsis-style pkg))) + "synopsis should be less than 80 characters long"))) actual-value: #t result: PASS test-name: synopsis: start with package name location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:291 source: + (test-assert + "synopsis: start with package name" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (name "foo") + (synopsis "foo, a nice package")))) + (check-synopsis-style pkg))) + "synopsis should not start with the package name"))) actual-value: #t result: PASS test-name: synopsis: start with package name prefix location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:300 source: + (test-assert + "synopsis: start with package name prefix" + (string-null? + (with-warnings + (let ((pkg (dummy-package + "arb" + (synopsis "Arbitrary precision")))) + (check-synopsis-style pkg))))) actual-value: #t result: PASS test-name: synopsis: start with abbreviation location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:307 source: + (test-assert + "synopsis: start with abbreviation" + (string-null? + (with-warnings + (let ((pkg (dummy-package + "uucp" + (synopsis "UUCP implementation") + (description "Imagine this is Taylor UUCP.")))) + (check-synopsis-style pkg))))) actual-value: #t result: PASS test-name: inputs: pkg-config is probably a native input location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:316 source: + (test-assert + "inputs: pkg-config is probably a native input" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (inputs `(("pkg-config" ,pkg-config)))))) + (check-inputs-should-be-native pkg))) + "'pkg-config' should probably be a native input"))) actual-value: #t result: PASS test-name: inputs: glib:bin is probably a native input location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:325 source: + (test-assert + "inputs: glib:bin is probably a native input" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (inputs `(("glib" ,glib "bin")))))) + (check-inputs-should-be-native pkg))) + "'glib:bin' should probably be a native input"))) actual-value: #t result: PASS test-name: patches: file names location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:334 source: + (test-assert + "patches: file names" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (source + (dummy-origin + (patches (list "/path/to/y.patch"))))))) + (check-patch-file-names pkg))) + "file names of patches should start with the package name"))) actual-value: #t result: PASS test-name: patches: not found location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:345 source: + (test-assert + "patches: not found" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (source + (dummy-origin + (patches + (list (search-patch + "this-patch-does-not-exist!")))))))) + (check-patch-file-names pkg))) + "patch not found"))) actual-value: #t result: PASS test-name: derivation: invalid arguments location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:357 source: + (test-assert + "derivation: invalid arguments" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (arguments + '(#:imported-modules (invalid-module)))))) + (check-derivation pkg))) + "failed to create derivation"))) actual-value: #t result: PASS test-name: license: invalid license location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:367 source: + (test-assert + "license: invalid license" + (string-contains + (with-warnings + (check-license (dummy-package "x" (license #f)))) + "invalid license")) actual-value: 63 result: PASS test-name: home-page: wrong home-page location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:373 source: + (test-assert + "home-page: wrong home-page" + (->bool + (string-contains + (with-warnings + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page #f)))) + (check-home-page pkg))) + "invalid"))) actual-value: #t result: PASS test-name: home-page: invalid URI location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:383 source: + (test-assert + "home-page: invalid URI" + (->bool + (string-contains + (with-warnings + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page "foobar")))) + (check-home-page pkg))) + "invalid home page URL"))) actual-value: #t result: PASS test-name: home-page: host not found location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:393 source: + (test-assert + "home-page: host not found" + (->bool + (string-contains + (with-warnings + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page "http://does-not-exist")))) + (check-home-page pkg))) + "domain not found"))) actual-value: #f result: FAIL test-name: home-page: Connection refused location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:404 source: + (test-assert + "home-page: Connection refused" + (->bool + (string-contains + (with-warnings + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page %local-url)))) + (check-home-page pkg))) + "Connection refused"))) actual-value: #t result: PASS test-name: home-page: 200 location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:415 source: + (test-equal + "home-page: 200" + "" + (with-warnings + (with-http-server + 200 + %long-string + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page %local-url)))) + (check-home-page pkg))))) expected-value: actual-value: result: PASS test-name: home-page: 200 but short length location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:425 source: + (test-assert + "home-page: 200 but short length" + (->bool + (string-contains + (with-warnings + (with-http-server + 200 + "This is too small." + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page %local-url)))) + (check-home-page pkg)))) + "suspiciously small"))) actual-value: #t result: PASS test-name: home-page: 404 location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:437 source: + (test-assert + "home-page: 404" + (->bool + (string-contains + (with-warnings + (with-http-server + 404 + %long-string + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page %local-url)))) + (check-home-page pkg)))) + "not reachable: 404"))) actual-value: #t result: PASS test-name: source-file-name location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:448 source: + (test-assert + "source-file-name" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (version "3.2.1") + (source + (origin + (method url-fetch) + (uri "http://www.example.com/3.2.1.tar.gz") + (sha256 %null-sha256)))))) + (check-source-file-name pkg))) + "file name should contain the package name"))) actual-value: #t result: PASS test-name: source-file-name: v prefix location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:462 source: + (test-assert + "source-file-name: v prefix" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (version "3.2.1") + (source + (origin + (method url-fetch) + (uri "http://www.example.com/v3.2.1.tar.gz") + (sha256 %null-sha256)))))) + (check-source-file-name pkg))) + "file name should contain the package name"))) actual-value: #t result: PASS test-name: source-file-name: bad checkout location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:476 source: + (test-assert + "source-file-name: bad checkout" + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (version "3.2.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "http://www.example.com/x.git") + (commit "0"))) + (sha256 %null-sha256)))))) + (check-source-file-name pkg))) + "file name should contain the package name"))) actual-value: #t result: PASS test-name: source-file-name: good checkout location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:492 source: + (test-assert + "source-file-name: good checkout" + (not (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (version "3.2.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "http://git.example.com/x.git") + (commit "0"))) + (file-name (string-append "x-" version)) + (sha256 %null-sha256)))))) + (check-source-file-name pkg))) + "file name should contain the package name")))) actual-value: #t result: PASS test-name: source-file-name: valid location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:510 source: + (test-assert + "source-file-name: valid" + (not (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package + "x" + (version "3.2.1") + (source + (origin + (method url-fetch) + (uri "http://www.example.com/x-3.2.1.tar.gz") + (sha256 %null-sha256)))))) + (check-source-file-name pkg))) + "file name should contain the package name")))) actual-value: #t result: PASS test-name: source: 200 location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:526 source: + (test-equal + "source: 200" + "" + (with-warnings + (with-http-server + 200 + %long-string + (let ((pkg (package + (inherit (dummy-package "x")) + (source + (origin + (method url-fetch) + (uri %local-url) + (sha256 %null-sha256)))))) + (check-source pkg))))) expected-value: actual-value: result: PASS test-name: source: 200 but short length location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:539 source: + (test-assert + "source: 200 but short length" + (->bool + (string-contains + (with-warnings + (with-http-server + 200 + "This is too small." + (let ((pkg (package + (inherit (dummy-package "x")) + (source + (origin + (method url-fetch) + (uri %local-url) + (sha256 %null-sha256)))))) + (check-source pkg)))) + "suspiciously small"))) actual-value: #t result: PASS test-name: source: 404 location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:554 source: + (test-assert + "source: 404" + (->bool + (string-contains + (with-warnings + (with-http-server + 404 + %long-string + (let ((pkg (package + (inherit (dummy-package "x")) + (source + (origin + (method url-fetch) + (uri %local-url) + (sha256 %null-sha256)))))) + (check-source pkg)))) + "not reachable: 404"))) actual-value: #t result: PASS test-name: cve location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:568 source: + (test-assert + "cve" + (mock ((guix scripts lint) + package-vulnerabilities + (const '())) + (string-null? + (with-warnings + (check-vulnerabilities (dummy-package "x")))))) actual-value: #t result: PASS test-name: cve: one vulnerability location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:573 source: + (test-assert + "cve: one vulnerability" + (mock ((guix scripts lint) + package-vulnerabilities + (lambda (package) + (list (make-struct + (@@ (guix cve) ) + 0 + "CVE-2015-1234" + (list (cons (package-name package) + (package-version package))))))) + (string-contains + (with-warnings + (check-vulnerabilities + (dummy-package "pi" (version "3.14")))) + "vulnerable to CVE-2015-1234"))) actual-value: 76 result: PASS test-name: cve: one patched vulnerability location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:585 source: + (test-assert + "cve: one patched vulnerability" + (mock ((guix scripts lint) + package-vulnerabilities + (lambda (package) + (list (make-struct + (@@ (guix cve) ) + 0 + "CVE-2015-1234" + (list (cons (package-name package) + (package-version package))))))) + (string-null? + (with-warnings + (check-vulnerabilities + (dummy-package + "pi" + (version "3.14") + (source + (dummy-origin + (patches (list "/a/b/pi-CVE-2015-1234.patch")))))))))) actual-value: #t result: PASS test-name: cve: patched vulnerability in replacement location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:602 source: + (test-assert + "cve: patched vulnerability in replacement" + (mock ((guix scripts lint) + package-vulnerabilities + (lambda (package) + (list (make-struct + (@@ (guix cve) ) + 0 + "CVE-2015-1234" + (list (cons (package-name package) + (package-version package))))))) + (string-null? + (with-warnings + (check-vulnerabilities + (dummy-package + "pi" + (version "3.14") + (source (dummy-origin)) + (replacement + (dummy-package + "pi" + (version "3.14") + (source + (dummy-origin + (patches + (list "/a/b/pi-CVE-2015-1234.patch")))))))))))) actual-value: #t result: PASS test-name: formatting: lonely parentheses location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:621 source: + (test-assert + "formatting: lonely parentheses" + (string-contains + (with-warnings + (check-formatting + (dummy-package "ugly as hell!"))) + "lonely")) actual-value: 101 result: PASS test-name: formatting: tabulation location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:631 source: + (test-assert + "formatting: tabulation" + (string-contains + (with-warnings + (check-formatting + (dummy-package "leave the tab here:\t"))) + "tabulation")) actual-value: 82 result: PASS test-name: formatting: trailing white space location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:637 source: + (test-assert + "formatting: trailing white space" + (string-contains + (with-warnings + (check-formatting (dummy-package "x"))) + "trailing white space")) actual-value: 63 result: PASS test-name: formatting: long line location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:644 source: + (test-assert + "formatting: long line" + (string-contains + (with-warnings + (check-formatting (dummy-package "x"))) + "too long")) actual-value: 78 result: PASS test-name: formatting: alright location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:652 source: + (test-assert + "formatting: alright" + (string-null? + (with-warnings + (check-formatting (dummy-package "x"))))) actual-value: #t result: PASS random seed for tests: 1469937910 SKIP: tests/containers ====================== test-name: call-with-container, exit with 0 when there is no error location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:40 source: + (test-assert + "call-with-container, exit with 0 when there is no error" + (zero? (call-with-container + '() + (const #t) + #:namespaces + '(user)))) result: SKIP test-name: call-with-container, user namespace location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:45 source: + (test-assert + "call-with-container, user namespace" + (zero? (call-with-container + '() + (lambda () + (assert-exit + (and (zero? (getuid)) (zero? (getgid))))) + #:namespaces + '(user)))) result: SKIP test-name: call-with-container, uts namespace location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:54 source: + (test-assert + "call-with-container, uts namespace" + (zero? (call-with-container + '() + (lambda () + (sethostname "test-container") + (primitive-exit 0)) + #:namespaces + '(user uts)))) result: SKIP test-name: call-with-container, pid namespace location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:65 source: + (test-assert + "call-with-container, pid namespace" + (zero? (call-with-container + '() + (lambda () + (match (primitive-fork) + (0 (assert-exit (= 2 (getpid)))) + (pid (primitive-exit + (match (waitpid pid) + ((_ . status) + (status:exit-val status))))))) + #:namespaces + '(user pid)))) result: SKIP test-name: call-with-container, mnt namespace location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:81 source: + (test-assert + "call-with-container, mnt namespace" + (zero? (call-with-container + '(("none" device "/testing" "tmpfs" () #f #f)) + (lambda () + (assert-exit (file-exists? "/testing"))) + #:namespaces + '(user mnt)))) result: SKIP test-name: call-with-container, mnt namespace, wrong bind mount location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:89 source: + (test-equal + "call-with-container, mnt namespace, wrong bind mount" + `(system-error ,ENOENT) + (catch 'system-error + (lambda () + (call-with-container + '(("/does-not-exist" + device + "/foo" + "none" + (bind-mount) + #f + #f)) + (const #t) + #:namespaces + '(user mnt))) + (lambda args + (list 'system-error (system-error-errno args))))) result: SKIP test-name: call-with-container, all namespaces location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:102 source: + (test-assert + "call-with-container, all namespaces" + (zero? (call-with-container + '() + (lambda () (primitive-exit 0))))) result: SKIP test-name: container-excursion location: /home/sapientech/Dev/guix/guix_wip/tests/containers.scm:109 source: + (test-assert + "container-excursion" + (call-with-temporary-directory + (lambda (root) + (match (list (pipe) (pipe)) + (((start-in . start-out) (end-in . end-out)) + (define (container) + (close end-out) + (close start-in) + (write 'ready start-out) + (close start-out) + (read end-in) + (close end-in)) + (define (namespaces pid) + (let ((pid (number->string pid))) + (map (lambda (ns) + (readlink (string-append "/proc/" pid "/ns/" ns))) + '("user" "ipc" "uts" "net" "pid" "mnt")))) + (let* ((pid (run-container root '() %namespaces 1 container)) + (container-namespaces (namespaces pid)) + (result + (begin + (close start-out) + (read start-in) + (close start-in) + (container-excursion + pid + (lambda () + (match (primitive-fork) + (0 + (assert-exit + (equal? + container-namespaces + (namespaces (getpid))))) + (fork-pid + (match (waitpid fork-pid) + ((_ . status) + (primitive-exit + (status:exit-val + status))))))))))) + (close end-in) + (write 'done end-out) + (close end-out) + (waitpid pid) + (zero? result))))))) result: SKIP SKIP: tests/pypi ================ test-name: guix-package->pypi-name, old URL style location: /home/sapientech/Dev/guix/guix_wip/tests/pypi.scm:76 source: + (test-equal + "guix-package->pypi-name, old URL style" + "psutil" + (guix-package->pypi-name + (dummy-package + "foo" + (source + (dummy-origin + (uri "https://pypi.io/packages/source/p/psutil/psutil-4.3.0.tar.gz")))))) expected-value: psutil actual-value: psutil result: PASS test-name: guix-package->pypi-name, new URL style location: /home/sapientech/Dev/guix/guix_wip/tests/pypi.scm:84 source: + (test-equal + "guix-package->pypi-name, new URL style" + "certbot" + (guix-package->pypi-name + (dummy-package + "foo" + (source + (dummy-origin + (uri "https://pypi.python.org/packages/a2/3b/4756e6a0ceb14e084042a2a65c615d68d25621c6fd446d0fc10d14c4ce7d/certbot-0.8.1.tar.gz")))))) expected-value: certbot actual-value: certbot result: PASS test-name: pypi->guix-package location: /home/sapientech/Dev/guix/guix_wip/tests/pypi.scm:92 source: + (test-assert + "pypi->guix-package" + (mock ((guix import utils) + url-fetch + (lambda (url file-name) + (match url + ("https://pypi.python.org/pypi/foo/json" + (with-output-to-file + file-name + (lambda () (display test-json)))) + ("https://example.com/foo-1.0.0.tar.gz" + (begin + (mkdir "foo-1.0.0") + (with-output-to-file + "foo-1.0.0/requirements.txt" + (lambda () (display test-requirements))) + (system* "tar" "czvf" file-name "foo-1.0.0/") + (delete-file-recursively "foo-1.0.0") + (set! test-source-hash + (call-with-input-file file-name port-sha256)))) + ("https://example.com/foo-1.0.0-py2.py3-none-any.whl" + #f) + (_ (error "Unexpected URL: " url))))) + (match (pypi->guix-package "foo") + (('package + ('name "python-foo") + ('version "1.0.0") + ('source + ('origin + ('method 'url-fetch) + ('uri + (string-append + "https://example.com/foo-" + version + ".tar.gz")) + ('sha256 ('base32 (? string? hash))))) + ('build-system 'python-build-system) + ('inputs + ('quasiquote + (("python-bar" ('unquote 'python-bar)) + ("python-baz" ('unquote 'python-baz)) + ("python-setuptools" + ('unquote 'python-setuptools))))) + ('home-page "http://example.com") + ('synopsis "summary") + ('description "summary") + ('license 'lgpl2.0)) + (string=? + (bytevector->nix-base32-string test-source-hash) + hash)) + (x (pk 'fail x #f))))) foo-1.0.0/ foo-1.0.0/requirements.txt actual-value: #t result: PASS test-name: pypi->guix-package, wheels location: /home/sapientech/Dev/guix/guix_wip/tests/pypi.scm:141 source: + (test-assert + "pypi->guix-package, wheels" + (mock ((guix import utils) + url-fetch + (lambda (url file-name) + (match url + ("https://pypi.python.org/pypi/foo/json" + (with-output-to-file + file-name + (lambda () (display test-json)))) + ("https://example.com/foo-1.0.0.tar.gz" + (begin + (mkdir "foo-1.0.0") + (with-output-to-file + "foo-1.0.0/requirements.txt" + (lambda () (display test-requirements))) + (system* "tar" "czvf" file-name "foo-1.0.0/") + (delete-file-recursively "foo-1.0.0") + (set! test-source-hash + (call-with-input-file file-name port-sha256)))) + ("https://example.com/foo-1.0.0-py2.py3-none-any.whl" + (begin + (mkdir "foo-1.0.0.dist-info") + (with-output-to-file + "foo-1.0.0.dist-info/metadata.json" + (lambda () (display test-metadata))) + (let ((zip-file (string-append file-name ".zip"))) + (system* + "zip" + zip-file + "foo-1.0.0.dist-info/metadata.json") + (rename-file zip-file file-name)) + (delete-file-recursively "foo-1.0.0.dist-info"))) + (_ (error "Unexpected URL: " url))))) + (match (pypi->guix-package "foo") + (('package + ('name "python-foo") + ('version "1.0.0") + ('source + ('origin + ('method 'url-fetch) + ('uri + (string-append + "https://example.com/foo-" + version + ".tar.gz")) + ('sha256 ('base32 (? string? hash))))) + ('build-system 'python-build-system) + ('inputs + ('quasiquote + (("python-bar" ('unquote 'python-bar)) + ("python-baz" ('unquote 'python-baz)) + ("python-setuptools" + ('unquote 'python-setuptools))))) + ('home-page "http://example.com") + ('synopsis "summary") + ('description "summary") + ('license 'lgpl2.0)) + (string=? + (bytevector->nix-base32-string test-source-hash) + hash)) + (x (pk 'fail x #f))))) result: SKIP random seed for tests: 1469933106 FAIL: tests/guix-download ========================= + guix download --version guix download (GNU Guix) 0.10.0 Copyright (C) 2016 the Guix authors License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. + guix download http://does.not/exist accepted connection from pid 13292, user sapientech Starting download of /tmp/guix-file.zUVDhl >From http://does.not/exist...  exist 0B/s 00:00 | 0B transferred  exist 320KiB/s 00:00 | 319B transferred /home/sapientech/Dev/guix/guix_wip/test-tmp/store/hi5hmfl117bri5c79i96fb7ymip4cb43-exist 1ipmbjjgif1f6a77j91s2y989y6sgk3fh4jiycbqqs6v2i827l7s + false ./test-env: line 1: 13275 Terminated "/home/sapientech/Dev/guix/guix_wip/pre-inst-env" "/home/sapientech/Dev/guix/guix_wip/guix-daemon" --disable-chroot --substitute-urls="$GUIX_BINARY_SUBSTITUTE_URL" FAIL tests/guix-download.sh (exit status: 1) SKIP: tests/guix-environment-container ====================================== + set -e + guix environment --version guix environment (GNU Guix) 0.10.0 Copyright (C) 2016 the Guix authors License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. + guile -c '((@@ (guix scripts environment) assert-container-features))' error: cannot create container: user namespaces unavailable error: is your kernel version < 3.10? + exit 77 ./test-env: line 1: 15698 Terminated "/home/sapientech/Dev/guix/guix_wip/pre-inst-env" "/home/sapientech/Dev/guix/guix_wip/guix-daemon" --disable-chroot --substitute-urls="$GUIX_BINARY_SUBSTITUTE_URL" SKIP tests/guix-environment-container.sh (exit status: 77) --MP_/RfwZ3bl.=e6TtpTaWZdR65C-- From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 31 06:53:45 2016 Received: (at 24108) by debbugs.gnu.org; 31 Jul 2016 10:53:45 +0000 Received: from localhost ([127.0.0.1]:51943 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bToNN-0002O5-K7 for submit@debbugs.gnu.org; Sun, 31 Jul 2016 06:53:45 -0400 Received: from eggs.gnu.org ([208.118.235.92]:43558) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bToNL-0002No-AF for 24108@debbugs.gnu.org; Sun, 31 Jul 2016 06:53:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bToNA-0008Mk-PY for 24108@debbugs.gnu.org; Sun, 31 Jul 2016 06:53:37 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-0.5 required=5.0 tests=BAYES_50,RP_MATCHES_RCVD autolearn=disabled version=3.3.2 Received: from fencepost.gnu.org ([2001:4830:134:3::e]:56491) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bToNA-0008MV-Ll; Sun, 31 Jul 2016 06:53:32 -0400 Received: from reverse-83.fdn.fr ([80.67.176.83]:34838 helo=pluto) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1bToN8-0004wF-1Q; Sun, 31 Jul 2016 06:53:30 -0400 From: ludo@gnu.org (Ludovic =?utf-8?Q?Court=C3=A8s?=) To: Dylan Jeffers Subject: Re: bug#24108: guix make tests failure References: <4c03321977ef605cc34a23986d83ce47@openmailbox.org> <874m77e0ky.fsf@gnu.org> <20160730104312.2166ffa5@openmailbox.org> <87bn1ebynp.fsf@gnu.org> <20160730174027.0551e855@openmailbox.org> <20160730185305.0c8cfe59@openmailbox.org> X-URL: http://www.fdn.fr/~lcourtes/ X-Revolutionary-Date: 14 Thermidor an 224 de la =?utf-8?Q?R=C3=A9volution?= X-PGP-Key-ID: 0x090B11993D9AEBB5 X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5 X-OS: x86_64-unknown-linux-gnu Date: Sun, 31 Jul 2016 12:53:26 +0200 In-Reply-To: <20160730185305.0c8cfe59@openmailbox.org> (Dylan Jeffers's message of "Sat, 30 Jul 2016 18:53:05 -0700") Message-ID: <87d1lu84ex.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2001:4830:134:3::e X-Spam-Score: -6.3 (------) X-Debbugs-Envelope-To: 24108 Cc: 24108@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -6.3 (------) Hello, Dylan Jeffers skribis: [...] > > > These tests are skipped when user namespaces are not supported, as > > > per this condition: > > >=20 > > > (define perform-container-tests? > > > (and (user-namespace-supported?) > > > (unprivileged-user-namespace-supported?))) > > >=20 > > > =E2=80=A6 which is true iff (1) /proc/self/ns/user exists, and (2) > > > /proc/sys/kernel/unprivileged_userns_clone does not exist, or it > > > exists and contains =E2=80=9C1=E2=80=9D. > > >=20 > > > Do these files exist on this system?=20=20 >> >> (1) /proc/self/ns/user exists, and >> (2) /proc/sys/kernel/unpriviledged_userns_clone D.N.E They do not exist now with the new =E2=80=98test-suite.log=E2=80=99 that yo= u posted, but they did exist before (with the Grsec kernel), otherwise the user namespaces tests would have been skipped. >> Ideas on the best approach to allow the build to succeed? >>=20 >> I also have had issues with qemu, so it makes sense that vm/container >> stuff both have issues. I have a feeling its due to the >> grsec kernel. >> https://wiki.archlinux.org/index.php/Grsecurity_Patchset talks a >> bit about userspace/namespace hardening + issues with xen and >> virtbox. Going to reboot with an lts kernel and try again. Will post >> update... >>=20 >> Best, >> Dylan >>=20 >> Best, >> Dylan > > After changing kernel, and stopping paxd.service, build still > failed :( [...] > test-name: clone > location: /home/sapientech/Dev/guix/guix_wip/tests/syscalls.scm:109 > source: > + (test-assert > + "clone" > + (match (clone (logior CLONE_NEWUSER SIGCHLD)) > + (0 (primitive-exit 42)) > + (pid (and (not (equal? > + (readlink (user-namespace pid)) > + (readlink (user-namespace (getpid))))) > + (match (waitpid pid) > + ((_ . status) (=3D 42 (status:exit-val status= )))))))) > result: SKIP This and other container-related tests are now properly skipped. > test-name: home-page: host not found > location: /home/sapientech/Dev/guix/guix_wip/tests/lint.scm:393 > source: > + (test-assert > + "home-page: host not found" > + (->bool > + (string-contains > + (with-warnings > + (let ((pkg (package > + (inherit (dummy-package "x")) > + (home-page "http://does-not-exist")))) > + (check-home-page pkg))) > + "domain not found"))) > actual-value: #f > result: FAIL This and the remaining failures are due to DNS hijacking, so nothing we can do about it. You=E2=80=99d have to use a well-behaved DNS server (e.g., =E2=80=9Cecho nameserver 8.8.8.8 > /etc/resolv.conf=E2=80=9D to use Google= =E2=80=99s name server) to work around that. Thanks, Ludo=E2=80=99. From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 31 06:55:04 2016 Received: (at request) by debbugs.gnu.org; 31 Jul 2016 10:55:04 +0000 Received: from localhost ([127.0.0.1]:51947 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bToOd-0002QH-Vg for submit@debbugs.gnu.org; Sun, 31 Jul 2016 06:55:04 -0400 Received: from eggs.gnu.org ([208.118.235.92]:43752) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bToOd-0002Pj-6E for request@debbugs.gnu.org; Sun, 31 Jul 2016 06:55:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bToOT-00006B-93 for request@debbugs.gnu.org; Sun, 31 Jul 2016 06:54:58 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD autolearn=disabled version=3.3.2 Received: from fencepost.gnu.org ([2001:4830:134:3::e]:56501) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bToOT-00005z-63 for request@debbugs.gnu.org; Sun, 31 Jul 2016 06:54:53 -0400 Received: from reverse-83.fdn.fr ([80.67.176.83]:34844 helo=pluto) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1bToOR-0004y1-6l for request@debbugs.gnu.org; Sun, 31 Jul 2016 06:54:51 -0400 From: ludo@gnu.org (Ludovic =?utf-8?Q?Court=C3=A8s?=) To: request@debbugs.gnu.org Subject: retitle X-URL: http://www.fdn.fr/~lcourtes/ X-Revolutionary-Date: 14 Thermidor an 224 de la =?utf-8?Q?R=C3=A9volution?= X-PGP-Key-ID: 0x090B11993D9AEBB5 X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5 X-OS: x86_64-unknown-linux-gnu Date: Sun, 31 Jul 2016 12:54:49 +0200 Message-ID: <878twi84cm.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2001:4830:134:3::e X-Spam-Score: -6.3 (------) X-Debbugs-Envelope-To: request X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -6.3 (------) retitle 24108 CLONE_NEWUSER tests fail with EPERM instead of being skipped on Grsecurity kernels thanks From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 09 09:58:51 2020 Received: (at control) by debbugs.gnu.org; 9 Jul 2020 13:58:51 +0000 Received: from localhost ([127.0.0.1]:41420 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jtX4O-0000CN-QL for submit@debbugs.gnu.org; Thu, 09 Jul 2020 09:58:51 -0400 Received: from eggs.gnu.org ([209.51.188.92]:48724) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jtX4M-0000CB-Op for control@debbugs.gnu.org; Thu, 09 Jul 2020 09:58:34 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:56600) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jtX4H-0006xF-FO for control@debbugs.gnu.org; Thu, 09 Jul 2020 09:58:29 -0400 Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=34234 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jtX4G-00089C-Fq for control@debbugs.gnu.org; Thu, 09 Jul 2020 09:58:28 -0400 Date: Thu, 09 Jul 2020 15:58:27 +0200 Message-Id: <877dvcbxj0.fsf@gnu.org> To: control@debbugs.gnu.org From: =?utf-8?Q?Ludovic_Court=C3=A8s?= Subject: control message for bug #24108 MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) tags 24108 notabug close 24108 quit From unknown Fri Sep 05 19:18:46 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Fri, 07 Aug 2020 11:24:04 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator