From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 88128CA0EED for ; Mon, 25 Aug 2025 01:39:32 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uqMAr-0001xv-6h; Sun, 24 Aug 2025 21:39:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uqMAp-0001xh-Ev for grub-devel@gnu.org; Sun, 24 Aug 2025 21:39:03 -0400 Received: from mail-il1-x130.google.com ([2607:f8b0:4864:20::130]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uqMAk-0005vt-EM for grub-devel@gnu.org; Sun, 24 Aug 2025 21:39:03 -0400 Received: by mail-il1-x130.google.com with SMTP id e9e14a558f8ab-3ea8b3a6454so10769255ab.1 for ; Sun, 24 Aug 2025 18:38:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756085937; x=1756690737; darn=gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SRCrUBsvZHqxWuw0ZRy+9QqjXeVlAkK6ffnCMDacw38=; b=VJF5of9AVGooiANsiQj2UAg/EfdBTAG+XI5Fvb35kJYYOS/NwD6OOObLMELWK9y9eF uiG++nAMGPQplr1vZdB8UXa49GshvJIuq4JV5jzR4GGo7Jjy/G+kQtaHTpKbGr/12H7g nJiE91onzx5tDLme9a5Nly/JCM4lRPF4QrA2Hy0pFjvPNUWNyuVmbrFY8RATFJJLRHO0 aoE8M1TQURzqWARgqe/bA5MSIWX8NVpGwzExVIL6O6LSRoRpF6ksqvdbu13D0BDyumcs SMZ6IntaupO/UU7KkNA5jqbitb1YlLAChECEODkjdEyjPlYcrQaDxtSbT9+Npaid7+Ad uSPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756085937; x=1756690737; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SRCrUBsvZHqxWuw0ZRy+9QqjXeVlAkK6ffnCMDacw38=; b=iQuIUOzFtH+LiBlLSnSdGw5lsqbggxIdO3Bz3DiWeg0HOyl7Hyr1Fls1qrDVZrRLd2 VaPDFP2rtpVNIpOvlGPmpEKBJl9FMGgXDH+P1Q7Ed+B3Snq6JhCMwgMbZXfO9r5qOBCi +aW8Hm3sIRef0PPIyEcQudnxaLVRbMFPYB2vS0crokICoeKJBBOdw8b1xJ1kKDQ6LQn1 hbkxWcccuTbX61CfHmsIjfcCGhJCxQ5yFzRmxhFYdRE2Cvx0vqRy02/IipHLLspB0PP1 /Wza9o+QaMGGuuhK3rBDT5zFwS7ppzH6Tr82gbITbpuRuaxmGFNw5EVvzzK5vFIAY8H8 k/jQ== X-Gm-Message-State: AOJu0YyPn1g/bdgy8xMPx5MAVqbA0JI9bhcP1HEpIW36Xt89Qj3oXG6U OUyj2soI5XvMnLSxG0RALiDl8Vl54T+wTj2uw2M8AgdYi2RqVIW05zCqxeYRJVAv X-Gm-Gg: ASbGncvbOkqLVO7ReLZy15OQPip5M0VUpghIsWEtDUfTyu4xQoGjVIdmaP7jiqKTJny rWZVH5bW8K/lExIBX7/TCtG5slSL+g+BIkelFTHcpjhm2/EF2GS5Ju/AdNrPBH7zgyildfJEAzK hoVuTribtrJERPSqThCOUOMJD8CsX4fPEXGXKe9QAfcfJv2Vpzs9k6ENvL+cOfwKysd6lk5scGb 2yPVYyxUIqwnd8zuCO7O/gO/MrhkrVm38vBu/TKMTWeRhSrqBUs0EIUgpmbI1m5cSGFAgi6hwj9 ls2WNGoLz6vEQC6j5Np4n78ArVM3XqbE2Sifr+rltrjTLhO6DyZCDVm4Bqbb6VPYIqWYWpvN0wS 15cIptb6qCiRubQ57TraoeRpM/q6srxBxxUwvTpHq4jQPvMJJ3Q+M8MzVlOzCYiHFs9bbLNHbA1 yMzoWD30YNMMxyGE6RbdTy X-Google-Smtp-Source: AGHT+IGe8dnYmYaLIopJimb/CclRxt+LBhKhM6/xD7XVNxYx6sAbMCJXSKfFdzZreSp2mgL56O7VHg== X-Received: by 2002:a92:cd85:0:b0:3e5:70b0:4f9c with SMTP id e9e14a558f8ab-3e932311b41mr151666015ab.6.1756085935369; Sun, 24 Aug 2025 18:38:55 -0700 (PDT) Received: from a9342.home.local (204-144-198-4.cgn.imoncommunications.net. [204.144.198.4]) by smtp.gmail.com with ESMTPSA id e9e14a558f8ab-3eb18693d2esm29847175ab.42.2025.08.24.18.38.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Aug 2025 18:38:54 -0700 (PDT) From: Andrew Hamilton To: grub-devel@gnu.org Cc: daniel.kiper@oracle.com, ghetman@gmail.com, Andrew Hamilton Subject: [PATCH v2 1/1] bootstrap: Ensure shallow GNULIB clone Works on Newer GIT Date: Sun, 24 Aug 2025 20:38:41 -0500 Message-Id: <20250825013841.60952-2-adhamilt@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250825013841.60952-1-adhamilt@gmail.com> References: <20250825013841.60952-1-adhamilt@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::130; envelope-from=adhamilt@gmail.com; helo=mail-il1-x130.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org VXBkYXRlIHRoZSBib290c3RyYXAgc2NyaXB0IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBuZXdlciB2 ZXJzaW9ucwpvZiBHSVQgdGhhdCBjaGFuZ2VkIHRoZSBnaXQgY2xvbmUgLWggb3V0cHV0IGZyb20g Y29udGFpbmluZzoKIi0tZGVwdGgiCnRvOgoiLS1bbm8tXWRlcHRoIgpUaGlzIGJvb3RzdHJhcCBz Y3JpcHQgaXMgcHVsbGVkIHRoZSBsYXRlc3QgR05VTElCIHZlcnNpb24KZnJvbSBHTlVMSUIgR0lU LCBjb21taXQgOWExYTYzODUKVGhpcyBjaGFuZ2UgYXZvaWRzIGEgZnVsbCBjbG9uZSBvbiBHTlVM SUIsIHNhdmluZwpzb21ldGhpbmcgbGlrZSA1MCBNQi4KCkZpeGVzOiBodHRwczovL3NhdmFubmFo LmdudS5vcmcvYnVncy8/NjYzNTcKClNpZ25lZC1vZmYtYnk6IEFuZHJldyBIYW1pbHRvbiA8YWRo YW1pbHRAZ21haWwuY29tPgotLS0KIGJvb3RzdHJhcCB8IDE5ODAgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMjQ2 IGluc2VydGlvbnMoKyksIDczNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9ib290c3RyYXAg Yi9ib290c3RyYXAKaW5kZXggZGMyMjM4ZjRhLi5kYzlmYjQzODMgMTAwNzU1Ci0tLSBhL2Jvb3Rz dHJhcAorKysgYi9ib290c3RyYXAKQEAgLTEsMzQgKzEsNjcgQEAKICMhIC9iaW4vc2gKLSMgUHJp bnQgYSB2ZXJzaW9uIHN0cmluZy4KLXNjcmlwdHZlcnNpb249MjAyMi0wMS0yNi4wNTsgIyBVVEMK KyMgRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZIQogCiAjIEJvb3RzdHJhcCB0 aGlzIHBhY2thZ2UgZnJvbSBjaGVja2VkLW91dCBzb3VyY2VzLgogCi0jIENvcHlyaWdodCAoQykg MjAwMy0yMDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorc2NyaXB0dmVyc2lvbj0y MDI1LTA2LTEwLjAyOyAjIFVUQwogCisjIENvcHlyaWdodCAoQykgMjAwMy0yMDI1IEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIwogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQog IyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgogIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCisjCiAj IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgogIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBPcmln aW5hbGx5IHdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuICBUaGUgY2Fub25pY2FsIHZlcnNpb24gb2Yg dGhpcworIyBzY3JpcHQgaXMgbWFpbnRhaW5lZCBhcyB0b3AvYm9vdHN0cmFwIGluIGdudWxpYi4g SG93ZXZlciwgdG8gYmUKKyMgdXNlZnVsIHRvIHlvdXIgcGFja2FnZSwgeW91IHNob3VsZCBwbGFj ZSBhIGNvcHkgb2YgaXQgdW5kZXIgdmVyc2lvbgorIyBjb250cm9sIGluIHRoZSB0b3AtbGV2ZWwg ZGlyZWN0b3J5IG9mIHlvdXIgcGFja2FnZS4gIFRoZSBpbnRlbnQgaXMKKyMgdGhhdCBhbGwgY3Vz dG9taXphdGlvbiBjYW4gYmUgZG9uZSB3aXRoIGEgYm9vdHN0cmFwLmNvbmYgZmlsZSBhbHNvCisj IG1haW50YWluZWQgaW4geW91ciB2ZXJzaW9uIGNvbnRyb2w7IGdudWxpYiBjb21lcyB3aXRoIGEg dGVtcGxhdGUKKyMgYnVpbGQtYXV4L2Jvb3RzdHJhcC5jb25mIHRvIGdldCB5b3Ugc3RhcnRlZC4K IAorIyBQbGVhc2UgcmVwb3J0IGJ1Z3Mgb3IgcHJvcG9zZSBwYXRjaGVzIHRvIGJ1Zy1nbnVsaWJA Z251Lm9yZy4KKworbWU9IiQwIgorbWVkaXI9YGRpcm5hbWUgIiRtZSJgCisKKyMgUmVhZCB0aGUg ZnVuY3Rpb24gbGlicmFyeSBhbmQgdGhlIGNvbmZpZ3VyYXRpb24uCisKKyMgQSBsaWJyYXJ5IG9m IHNoZWxsIGZ1bmN0aW9ucyBmb3IgYXV0b3B1bGwuc2gsIGF1dG9nZW4uc2gsIGFuZCBib290c3Ry YXAuCisKK3NjcmlwdGxpYnZlcnNpb249MjAyNS0wNi0xMC4wMjsgIyBVVEMKKworIyBDb3B5cmln aHQgKEMpIDIwMDMtMjAyNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKICMgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICMg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgogCiAjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQYXVsIEVnZ2VydC4gIFRo ZSBjYW5vbmljYWwgdmVyc2lvbiBvZiB0aGlzCi0jIHNjcmlwdCBpcyBtYWludGFpbmVkIGFzIGJ1 aWxkLWF1eC9ib290c3RyYXAgaW4gZ251bGliLCBob3dldmVyLCB0bwotIyBiZSB1c2VmdWwgdG8g eW91ciBwcm9qZWN0LCB5b3Ugc2hvdWxkIHBsYWNlIGEgY29weSBvZiBpdCB1bmRlcgotIyB2ZXJz aW9uIGNvbnRyb2wgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgeW91ciBwcm9qZWN0LiAg VGhlCisjIHNjcmlwdCBpcyBtYWludGFpbmVkIGFzIHRvcC9ib290c3RyYXAtZnVuY2xpYi5zaCBp biBnbnVsaWIuICBIb3dldmVyLAorIyB0byBiZSB1c2VmdWwgdG8geW91ciBwYWNrYWdlLCB5b3Ug c2hvdWxkIHBsYWNlIGEgY29weSBvZiBpdCB1bmRlcgorIyB2ZXJzaW9uIGNvbnRyb2wgaW4gdGhl IHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgeW91ciBwYWNrYWdlLiAgVGhlCiAjIGludGVudCBpcyB0 aGF0IGFsbCBjdXN0b21pemF0aW9uIGNhbiBiZSBkb25lIHdpdGggYSBib290c3RyYXAuY29uZgog IyBmaWxlIGFsc28gbWFpbnRhaW5lZCBpbiB5b3VyIHZlcnNpb24gY29udHJvbDsgZ251bGliIGNv bWVzIHdpdGggYQogIyB0ZW1wbGF0ZSBidWlsZC1hdXgvYm9vdHN0cmFwLmNvbmYgdG8gZ2V0IHlv dSBzdGFydGVkLgogCi0jIFBsZWFzZSByZXBvcnQgYnVncyBvciBwcm9wb3NlIHBhdGNoZXMgdG8g YnVnLWdudWxpYkBnbnUub3JnLgotCiBubD0nCiAnCiAKQEAgLTM2LDg2ICs2OSwxMyBAQCBubD0n CiBMQ19BTEw9QwogZXhwb3J0IExDX0FMTAogCi0jIEVuc3VyZSB0aGF0IENEUEFUSCBpcyBub3Qg c2V0LiAgT3RoZXJ3aXNlLCB0aGUgb3V0cHV0IGZyb20gY2QKLSMgd291bGQgY2F1c2UgdHJvdWJs ZSBpbiBhdCBsZWFzdCBvbmUgdXNlIGJlbG93LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAy PiYxICYmIHVuc2V0IENEUEFUSAotCi1sb2NhbF9nbF9kaXI9Z2wKLQogIyBIb25vciAkUEVSTCwg YnV0IHdvcmsgZXZlbiBpZiB0aGVyZSBpcyBub25lLgogUEVSTD0iJHtQRVJMLXBlcmx9IgogCi1t ZT0kMAotCiBkZWZhdWx0X2dudWxpYl91cmw9aHR0cHM6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9n aXQvZ251bGliLmdpdAogCi11c2FnZSgpIHsKLSAgY2F0IDw8RU9GCi1Vc2FnZTogJG1lIFtPUFRJ T05dLi4uCi1Cb290c3RyYXAgdGhpcyBwYWNrYWdlIGZyb20gdGhlIGNoZWNrZWQtb3V0IHNvdXJj ZXMuCi0KLU9wdGlvbnM6Ci0gLS1nbnVsaWItc3JjZGlyPURJUk5BTUUgIHNwZWNpZnkgdGhlIGxv Y2FsIGRpcmVjdG9yeSB3aGVyZSBnbnVsaWIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc291 cmNlcyByZXNpZGUuICBVc2UgdGhpcyBpZiB5b3UgYWxyZWFkeQotICAgICAgICAgICAgICAgICAg ICAgICAgICBoYXZlIGdudWxpYiBzb3VyY2VzIG9uIHlvdXIgbWFjaGluZSwgYW5kCi0gICAgICAg ICAgICAgICAgICAgICAgICAgIGRvIG5vdCB3YW50IHRvIHdhc3RlIHlvdXIgYmFuZHdpZHRoIGRv d25sb2FkaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW0gYWdhaW4uICBEZWZhdWx0 cyB0byBcJEdOVUxJQl9TUkNESVIKLSAtLWJvb3RzdHJhcC1zeW5jICAgICAgICAgaWYgdGhpcyBi b290c3RyYXAgc2NyaXB0IGlzIG5vdCBpZGVudGljYWwgdG8KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhlIHZlcnNpb24gaW4gdGhlIGxvY2FsIGdudWxpYiBzb3VyY2VzLAotICAgICAgICAg ICAgICAgICAgICAgICAgICB1cGRhdGUgdGhpcyBzY3JpcHQsIGFuZCB0aGVuIHJlc3RhcnQgaXQg d2l0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAvYmluL3NoIG9yIHRoZSBzaGVsbCBcJENP TkZJR19TSEVMTAotIC0tbm8tYm9vdHN0cmFwLXN5bmMgICAgICBkbyBub3QgY2hlY2sgd2hldGhl ciBib290c3RyYXAgaXMgb3V0IG9mIHN5bmMKLSAtLWNvcHkgICAgICAgICAgICAgICAgICAgY29w eSBmaWxlcyBpbnN0ZWFkIG9mIGNyZWF0aW5nIHN5bWJvbGljIGxpbmtzCi0gLS1mb3JjZSAgICAg ICAgICAgICAgICAgIGF0dGVtcHQgdG8gYm9vdHN0cmFwIGV2ZW4gaWYgdGhlIHNvdXJjZXMgc2Vl bQotICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgdG8gaGF2ZSBiZWVuIGNoZWNrZWQgb3V0 Ci0gLS1uby1naXQgICAgICAgICAgICAgICAgIGRvIG5vdCB1c2UgZ2l0IHRvIHVwZGF0ZSBnbnVs aWIuICBSZXF1aXJlcyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC0tZ251bGliLXNy Y2RpciBwb2ludCB0byBhIGNvcnJlY3QgZ251bGliIHNuYXBzaG90Ci0gLS1za2lwLXBvICAgICAg ICAgICAgICAgIGRvIG5vdCBkb3dubG9hZCBwbyBmaWxlcwotRU9GCi0gIGJvb3RzdHJhcF9wcmlu dF9vcHRpb25fdXNhZ2VfaG9vawotICBjYXQgPDxFT0YKLUlmIHRoZSBmaWxlICRtZS5jb25mIGV4 aXN0cyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhpcyBzY3JpcHQsIGl0cwotY29udGVudHMg YXJlIHJlYWQgYXMgc2hlbGwgdmFyaWFibGVzIHRvIGNvbmZpZ3VyZSB0aGUgYm9vdHN0cmFwLgot Ci1Gb3IgYnVpbGQgcHJlcmVxdWlzaXRlcywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UgXCRB VVRPQ09ORiBhbmQgXCRBTVRBUgotYXJlIGhvbm9yZWQuCi0KLUdudWxpYiBzb3VyY2VzIGNhbiBi ZSBmZXRjaGVkIGluIHZhcmlvdXMgd2F5czoKLQotICogSWYgdGhpcyBwYWNrYWdlIGlzIGluIGEg Z2l0IHJlcG9zaXRvcnkgd2l0aCBhICdnbnVsaWInIHN1Ym1vZHVsZQotICAgY29uZmlndXJlZCwg dGhlbiB0aGF0IHN1Ym1vZHVsZSBpcyBpbml0aWFsaXplZCBhbmQgdXBkYXRlZCBhbmQgc291cmNl cwotICAgYXJlIGZldGNoZWQgZnJvbSB0aGVyZS4gIElmIFwkR05VTElCX1NSQ0RJUiBpcyBzZXQg KGRpcmVjdGx5IG9yIHZpYQotICAgLS1nbnVsaWItc3JjZGlyKSBhbmQgaXMgYSBnaXQgcmVwb3Np dG9yeSwgdGhlbiBpdCBpcyB1c2VkIGFzIGEgcmVmZXJlbmNlLgotCi0gKiBPdGhlcndpc2UsIGlm IFwkR05VTElCX1NSQ0RJUiBpcyBzZXQgKGRpcmVjdGx5IG9yIHZpYSAtLWdudWxpYi1zcmNkaXIp LAotICAgdGhlbiBzb3VyY2VzIGFyZSBmZXRjaGVkIGZyb20gdGhhdCBsb2NhbCBkaXJlY3Rvcnku ICBJZiBpdCBpcyBhIGdpdAotICAgcmVwb3NpdG9yeSBhbmQgXCRHTlVMSUJfUkVWSVNJT04gaXMg c2V0LCB0aGVuIHRoYXQgcmV2aXNpb24gaXMgY2hlY2tlZAotICAgb3V0LgotCi0gKiBPdGhlcndp c2UsIGlmIHRoaXMgcGFja2FnZSBpcyBpbiBhIGdpdCByZXBvc2l0b3J5IHdpdGggYSAnZ251bGli JwotICAgc3VibW9kdWxlIGNvbmZpZ3VyZWQsIHRoZW4gdGhhdCBzdWJtb2R1bGUgaXMgaW5pdGlh bGl6ZWQgYW5kIHVwZGF0ZWQgYW5kCi0gICBzb3VyY2VzIGFyZSBmZXRjaGVkIGZyb20gdGhlcmUu Ci0KLSAqIE90aGVyd2lzZSwgaWYgdGhlICdnbnVsaWInIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlz dCwgR251bGliIHNvdXJjZXMgYXJlCi0gICBjbG9uZWQgaW50byB0aGF0IGRpcmVjdG9yeSB1c2lu ZyBnaXQgZnJvbSBcJEdOVUxJQl9VUkwsIGRlZmF1bHRpbmcgdG8KLSAgICRkZWZhdWx0X2dudWxp Yl91cmwuCi0gICBJZiBcJEdOVUxJQl9SRVZJU0lPTiBpcyBzZXQsIHRoZW4gdGhhdCByZXZpc2lv biBpcyBjaGVja2VkIG91dC4KLQotICogT3RoZXJ3aXNlLCB0aGUgZXhpc3RpbmcgR251bGliIHNv dXJjZXMgaW4gdGhlICdnbnVsaWInIGRpcmVjdG9yeSBhcmUKLSAgIHVzZWQuICBJZiBpdCBpcyBh IGdpdCByZXBvc2l0b3J5IGFuZCBcJEdOVUxJQl9SRVZJU0lPTiBpcyBzZXQsIHRoZW4gdGhhdAot ICAgcmV2aXNpb24gaXMgY2hlY2tlZCBvdXQuCi0KLUlmIHlvdSBtYWludGFpbiBhIHBhY2thZ2Ug YW5kIHdhbnQgdG8gcGluIGEgcGFydGljdWxhciByZXZpc2lvbiBvZiB0aGUKLUdudWxpYiBzb3Vy Y2VzIHRoYXQgaGFzIGJlZW4gdGVzdGVkIHdpdGggeW91ciBwYWNrYWdlLCB0aGVuIHRoZXJlIGFy ZSB0d28KLXBvc3NpYmxlIGFwcHJvYWNoZXM6IGVpdGhlciBjb25maWd1cmUgYSAnZ251bGliJyBz dWJtb2R1bGUgd2l0aCB0aGUKLWFwcHJvcHJpYXRlIHJldmlzaW9uLCBvciBzZXQgXCRHTlVMSUJf UkVWSVNJT04gKGFuZCBpZiBuZWNlc3NhcnkKLVwkR05VTElCX1VSTCkgaW4gJG1lLmNvbmYuCi0K LVJ1bm5pbmcgd2l0aG91dCBhcmd1bWVudHMgd2lsbCBzdWZmaWNlIGluIG1vc3QgY2FzZXMuCi1F T0YKLX0KLQotY29weXJpZ2h0X3llYXI9YGVjaG8gIiRzY3JpcHR2ZXJzaW9uIiB8IHNlZCAtZSAn cy9bXjAtOV0uKi8vJ2AKKyMgQ29weXJpZ2h0IHllYXIsIGZvciB0aGUgLS12ZXJzaW9uIG91dHB1 dC4KK2NvcHlyaWdodF95ZWFyPWBlY2hvICIkc2NyaXB0bGlidmVyc2lvbiIgfCBzZWQgLWUgJ3Mv W14wLTldLiovLydgCiBjb3B5cmlnaHQ9IkNvcHlyaWdodCAoQykgJHtjb3B5cmlnaHRfeWVhcn0g RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBMaWNlbnNlIEdQTHYzKzogR05VIEdQTCB2 ZXJzaW9uIDMgb3IgbGF0ZXIgPGh0dHBzOi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbD4uCiBU aGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJp YnV0ZSBpdC4KQEAgLTE0OCw5ICsxMDgsMTMgQEAgd2Fybl8gKCkKICMgZGllIFdPUkQxLi4uCiBk aWUoKSB7IHdhcm5fICIkQCI7IGV4aXQgMTsgfQogCi0jIENvbmZpZ3VyYXRpb24uCisjIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25maWd1cmF0aW9uLiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKworIyBEaXJlY3RvcnkgdGhhdCBjb250YWlucyBwYWNrYWdlLXNwZWNp ZmljIGdudWxpYiBtb2R1bGVzIGFuZC9vciBvdmVycmlkZXMuCitsb2NhbF9nbF9kaXI9Z2wKIAog IyBOYW1lIG9mIHRoZSBNYWtlZmlsZS5hbQorIyBYWFggTm90IHVzZWQuCiBnbnVsaWJfbWs9Z251 bGliLm1rCiAKICMgTGlzdCBvZiBnbnVsaWIgbW9kdWxlcyBuZWVkZWQuCkBAIC0xNTksMjEgKzEy MywyMCBAQCBnbnVsaWJfbW9kdWxlcz0KICMgQW55IGdudWxpYiBmaWxlcyBuZWVkZWQgdGhhdCBh cmUgbm90IGluIG1vZHVsZXMuCiBnbnVsaWJfZmlsZXM9CiAKLTogJHtBVVRPUE9JTlQ9YXV0b3Bv aW50fQotOiAke0FVVE9SRUNPTkY9YXV0b3JlY29uZn0KLQogIyBBIGZ1bmN0aW9uIHRvIGJlIGNh bGxlZCBmb3IgZWFjaCB1bnJlY29nbml6ZWQgb3B0aW9uLiAgUmV0dXJucyAwIGlmCiAjIHRoZSBv cHRpb24gaW4gJDEgaGFzIGJlZW4gcHJvY2Vzc2VkIGJ5IHRoZSBmdW5jdGlvbi4gIFJldHVybnMg MSBpZgogIyB0aGUgb3B0aW9uIGhhcyBub3QgYmVlbiBwcm9jZXNzZWQgYnkgdGhlIGZ1bmN0aW9u LiAgT3ZlcnJpZGUgaXQgdmlhCiAjIHlvdXIgb3duIGRlZmluaXRpb24gaW4gYm9vdHN0cmFwLmNv bmYKLQogYm9vdHN0cmFwX29wdGlvbl9ob29rKCkgeyByZXR1cm4gMTsgfQogCiAjIEEgZnVuY3Rp b24gdG8gYmUgY2FsbGVkIGluIG9yZGVyIHRvIHByaW50IHRoZSAtLWhlbHAgaW5mb3JtYXRpb24K ICMgY29ycmVzcG9uZGluZyB0byB1c2VyLWRlZmluZWQgY29tbWFuZC1saW5lIG9wdGlvbnMuCi0K IGJvb3RzdHJhcF9wcmludF9vcHRpb25fdXNhZ2VfaG9vaygpIHsgOjsgfQogCisjIEEgZnVuY3Rp b24gdG8gYmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgYXV0b3B1bGwuc2guCisjIE92ZXJyaWRlIGl0 IHZpYSB5b3VyIG93biBkZWZpbml0aW9uIGluIGJvb3RzdHJhcC5jb25mLgorYm9vdHN0cmFwX3Bv c3RfcHVsbF9ob29rKCkgeyA6OyB9CisKICMgQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgcmlnaHQg YWZ0ZXIgZ251bGliLXRvb2wgaXMgcnVuLgogIyBPdmVycmlkZSBpdCB2aWEgeW91ciBvd24gZGVm aW5pdGlvbiBpbiBib290c3RyYXAuY29uZi4KIGJvb3RzdHJhcF9wb3N0X2ltcG9ydF9ob29rKCkg eyA6OyB9CkBAIC0xODksNyArMTUyLDggQEAgcG9fZG93bmxvYWRfY29tbWFuZF9mb3JtYXQ9XAog IndnZXQgLS1taXJyb3IgLS1sZXZlbD0xIC1uZCAtbnYgLUEucG8gLVAgJyVzJyBcCiAgaHR0cHM6 Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL2xhdGVzdC8lcy8iCiAKLSMgUHJlZmVyIGEgbm9uLWVt cHR5IHRhcm5hbWUgKDR0aCBhcmd1bWVudCBvZiBBQ19JTklUIGlmIGdpdmVuKSwgZWxzZQorIyBX aGVuIGV4dHJhY3RpbmcgdGhlIHBhY2thZ2UgbmFtZSBmcm9tIGFuIEFDX0lOSVQgaW52b2NhdGlv biwKKyMgcHJlZmVyIGEgbm9uLWVtcHR5IHRhcm5hbWUgKDR0aCBhcmd1bWVudCBvZiBBQ19JTklU IGlmIGdpdmVuKSwgZWxzZQogIyBmYWxsIGJhY2sgdG8gdGhlIHBhY2thZ2UgbmFtZSAoMXN0IGFy Z3VtZW50IHdpdGggbXVuZ2luZykuCiBleHRyYWN0X3BhY2thZ2VfbmFtZT0nCiAgIC9eQUNfSU5J VChcWyovewpAQCAtMjAxLDE3ICsxNjUsMjAgQEAgZXh0cmFjdF9wYWNrYWdlX25hbWU9JwogICAg ICAgIHEKICAgICAgfQogICAgICBzL1tdLCldLiovLwotICAgICBzL15HTlUgLy8KLSAgICAgeS9B QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8KLSAg ICAgcy9bXmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OV9dLy0vZwogICAgICBw CiAgIH0KICcKLXBhY2thZ2U9JCgke0FVVE9DT05GOi1hdXRvY29uZn0gLS10cmFjZSBBQ19JTklU OlwkNCBjb25maWd1cmUuYWMgMj4vZGV2L251bGwpCitub3JtYWxpemVfcGFja2FnZV9uYW1lPScK KyAgcy9eR05VIC8vCisgIHkvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamts bW5vcHFyc3R1dnd4eXovCisgIHMvW15hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3 ODlfXS8tL2cKKycKK3BhY2thZ2U9JCgke0FVVE9DT05GOi1hdXRvY29uZn0gLS10cmFjZSAnQUNf SU5JVDokNCcgY29uZmlndXJlLmFjIDI+L2Rldi9udWxsKQogaWYgdGVzdCAteiAiJHBhY2thZ2Ui OyB0aGVuCiAgIHBhY2thZ2U9JChzZWQgLW4gIiRleHRyYWN0X3BhY2thZ2VfbmFtZSIgY29uZmln dXJlLmFjKSBcCiAgICAgICB8fCBkaWUgJ2Nhbm5vdCBmaW5kIHBhY2thZ2UgbmFtZSBpbiBjb25m aWd1cmUuYWMnCiBmaQorcGFja2FnZT0kKGVjaG8gIiRwYWNrYWdlIiB8IHNlZCAiJG5vcm1hbGl6 ZV9wYWNrYWdlX25hbWUiKQogZ251bGliX25hbWU9bGliJHBhY2thZ2UKIAogYnVpbGRfYXV4PWJ1 aWxkLWF1eApAQCAtMjQ3LDE1ICsyMTQsMTMgQEAgQ09QWVJJR0hUX0hPTERFUj0nRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuJwogTVNHSURfQlVHU19BRERSRVNTPWJ1Zy0kcGFja2FnZUBn bnUub3JnCiAKICMgRmlsZXMgd2UgZG9uJ3Qgd2FudCB0byBpbXBvcnQuCisjIFhYWCBOb3QgdXNl ZC4KIGV4Y2x1ZGVkX2ZpbGVzPQogCiAjIEZpbGUgdGhhdCBzaG91bGQgZXhpc3QgaW4gdGhlIHRv cCBkaXJlY3Rvcnkgb2YgYSBjaGVja2VkIG91dCBoaWVyYXJjaHksCiAjIGJ1dCBub3QgaW4gYSBk aXN0cmlidXRpb24gdGFyYmFsbC4KIGNoZWNrb3V0X29ubHlfZmlsZT1SRUFETUUtaGFja2luZwog Ci0jIFdoZXRoZXIgdG8gdXNlIGNvcGllcyBpbnN0ZWFkIG9mIHN5bWxpbmtzLgotY29weT1mYWxz ZQotCiAjIFNldCB0aGlzIHRvICcuY3ZzaWdub3JlIC5naXRpZ25vcmUnIGluIGJvb3RzdHJhcC5j b25mIGlmIHlvdSB3YW50CiAjIHRob3NlIGZpbGVzIHRvIGJlIGdlbmVyYXRlZCBpbiBkaXJlY3Rv cmllcyBsaWtlIGxpYi8sIG00LywgYW5kIHBvLy4KICMgT3Igc2V0IGl0IHRvICdhdXRvJyB0byBt YWtlIHRoaXMgc2NyaXB0IHNlbGVjdCB3aGljaCB0byB1c2UgYmFzZWQKQEAgLTI2Niw4ICsyMzEs MTMgQEAgdmNfaWdub3JlPWF1dG8KICMgZGVmYXVsdC4KIGJvb3RzdHJhcF9zeW5jPWZhbHNlCiAK LSMgVXNlIGdpdCB0byB1cGRhdGUgZ251bGliIHNvdXJjZXMKLXVzZV9naXQ9dHJ1ZQorIyBPdmVy cmlkZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBpZiBuZWNlc3NhcnkuCisjIE1ha2Ugc3Vy ZSB0aGF0IGJvb3RzdHJhcC5jb25mIGlzIHNvdXJjZWQgZnJvbSB0aGUgY3VycmVudCBkaXJlY3Rv cnkKKyMgaWYgd2Ugd2VyZSBpbnZva2VkIGFzICJzaCBib290c3RyYXAiLgorY29uZmZpbGU9YGRp cm5hbWUgIiRtZSJgL2Jvb3RzdHJhcC5jb25mCit0ZXN0IC1yICIkY29uZmZpbGUiICYmIC4gIiRj b25mZmlsZSIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJ1aWxkLXRpbWUgcHJlcmVx dWlzaXRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGNoZWNrX2V4aXN0cygpIHsKICAg aWYgdGVzdCAiJDEiID0gIi0tdmVyYm9zZSI7IHRoZW4KQEAgLTI4NCw2ICsyNTQsMjAyIEBAIGNo ZWNrX2V4aXN0cygpIHsKICAgdGVzdCAkPyAtbHQgMTI2CiB9CiAKKyMgTm90ZSB0aGlzIGRldmlh dGVzIGZyb20gdGhlIHZlcnNpb24gY29tcGFyaXNvbiBpbiBhdXRvbWFrZQorIyBpbiB0aGF0IGl0 IHRyZWF0cyAxLjUgPCAxLjUuMCwgYW5kIHRyZWF0cyAxLjQuNGEgPCAxLjQtcDNhCisjIGJ1dCB0 aGlzIHNob3VsZCBzdWZmaWNlIGFzIHdlIHdvbid0IGJlIHNwZWNpZnlpbmcgb2xkCisjIHZlcnNp b24gZm9ybWF0cyBvciByZWR1bmRhbnQgdHJhaWxpbmcgLjAgaW4gYm9vdHN0cmFwLmNvbmYuCisj IElmIHdlIGRpZCB3YW50IGZ1bGwgY29tcGF0aWJpbGl0eSB0aGVuIHdlIHNob3VsZCBwcm9iYWJs eQorIyB1c2UgbTRfdmVyc2lvbl9jb21wYXJlIGZyb20gYXV0b2NvbmYuCitzb3J0X3ZlcigpIHsg IyBzb3J0IC1WIGlzIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlCisgIHZlcjE9IiQxIgorICB2ZXIy PSIkMiIKKworICAjIHNwbGl0IG9uICcuJyBhbmQgY29tcGFyZSBlYWNoIGNvbXBvbmVudAorICBp PTEKKyAgd2hpbGUgOiA7IGRvCisgICAgcDE9JChlY2hvICIkdmVyMSIgfCBjdXQgLWQuIC1mJGkp CisgICAgcDI9JChlY2hvICIkdmVyMiIgfCBjdXQgLWQuIC1mJGkpCisgICAgaWYgWyAhICIkcDEi IF07IHRoZW4KKyAgICAgIGVjaG8gIiQxICQyIgorICAgICAgYnJlYWsKKyAgICBlbGlmIFsgISAi JHAyIiBdOyB0aGVuCisgICAgICBlY2hvICIkMiAkMSIKKyAgICAgIGJyZWFrCisgICAgZWxpZiBb ICEgIiRwMSIgPSAiJHAyIiBdOyB0aGVuCisgICAgICBpZiBbICIkcDEiIC1ndCAiJHAyIiBdIDI+ L2Rldi9udWxsOyB0aGVuICMgbnVtZXJpYyBjb21wYXJpc29uCisgICAgICAgIGVjaG8gIiQyICQx IgorICAgICAgZWxpZiBbICIkcDIiIC1ndCAiJHAxIiBdIDI+L2Rldi9udWxsOyB0aGVuICMgbnVt ZXJpYyBjb21wYXJpc29uCisgICAgICAgIGVjaG8gIiQxICQyIgorICAgICAgZWxzZSAjIG51bWVy aWMsIHRoZW4gbGV4aWNvZ3JhcGhpYyBjb21wYXJpc29uCisgICAgICAgIGxwPSQocHJpbnRmICIl c1xuJXNcbiIgIiRwMSIgIiRwMiIgfCBMQU5HPUMgc29ydCAtbiB8IHRhaWwgLW4xKQorICAgICAg ICBpZiBbICIkbHAiID0gIiRwMiIgXTsgdGhlbgorICAgICAgICAgIGVjaG8gIiQxICQyIgorICAg ICAgICBlbHNlCisgICAgICAgICAgZWNobyAiJDIgJDEiCisgICAgICAgIGZpCisgICAgICBmaQor ICAgICAgYnJlYWsKKyAgICBmaQorICAgIGk9JCgoJGkrMSkpCisgIGRvbmUKK30KKworZ2V0X3Zl cnNpb25fc2VkPScKKyMgTW92ZSB2ZXJzaW9uIHRvIHN0YXJ0IG9mIGxpbmUuCitzLy4qW3YgXVwo WzAtOV1cKS9cMS8KKworIyBTa2lwIGxpbmVzIHRoYXQgZG8gbm90IHN0YXJ0IHdpdGggdmVyc2lv bi4KKy9eWzAtOV0vIWQKKworIyBSZW1vdmUgY2hhcmFjdGVycyBhZnRlciB0aGUgdmVyc2lvbi4K K3MvW14uYS16MC05LV0uKi8vCisKKyMgVGhlIGZpcnN0IGNvbXBvbmVudCBtdXN0IGJlIGRpZ2l0 cyBvbmx5Lgorcy9eXChbMC05XSpcKVthLXotXS4qL1wxLworCisjdGhlIGZvbGxvd2luZyBlc3Nl bnRpYWxseSBkb2VzIHMvNS4wMDUvNS41Lworcy9cLjAqXChbMS05XVwpLy5cMS9nCitwCitxJwor CitnZXRfdmVyc2lvbigpIHsKKyAgYXBwPSQxCisKKyAgJGFwcCAtLXZlcnNpb24gPi9kZXYvbnVs bCAyPiYxIHx8IHsgJGFwcCAtLXZlcnNpb247IHJldHVybiAxOyB9CisKKyAgJGFwcCAtLXZlcnNp b24gMj4mMSB8IHNlZCAtbiAiJGdldF92ZXJzaW9uX3NlZCIKK30KKworY2hlY2tfdmVyc2lvbnMo KSB7CisgIHJldD0wCisKKyAgd2hpbGUgcmVhZCBhcHAgcmVxX3ZlcjsgZG8KKyAgICAjIFdlIG9u bHkgbmVlZCBsaWJ0b29saXplIGZyb20gdGhlIGxpYnRvb2wgcGFja2FnZS4KKyAgICBpZiB0ZXN0 ICIkYXBwIiA9IGxpYnRvb2w7IHRoZW4KKyAgICAgIGFwcD1saWJ0b29saXplCisgICAgZmkKKyAg ICAjIEV4ZW1wdCBnaXQgaWYgZ2l0IGlzIG5vdCBuZWVkZWQuCisgICAgaWYgdGVzdCAiJGFwcCIg PSBnaXQ7IHRoZW4KKyAgICAgICRjaGVja19naXQgfHwgY29udGludWUKKyAgICBmaQorICAgICMg SG9ub3IgJEFQUCB2YXJpYWJsZXMgKCRUQVIsICRBVVRPQ09ORiwgZXRjLikKKyAgICBhcHB2YXI9 JChlY2hvICRhcHAgfCBMQ19BTEw9QyB0ciAnW2Etel0tJyAnW0EtWl1fJykKKyAgICB0ZXN0ICIk YXBwdmFyIiA9IFRBUiAmJiBhcHB2YXI9QU1UQVIKKyAgICBjYXNlICRhcHB2YXIgaW4KKyAgICAg ICAgR1pJUCkgOzsgIyBEbyBub3QgdXNlICRHWklQOiAgaXQgY29udGFpbnMgZ3ppcCBvcHRpb25z LgorICAgICAgICBQRVJMOjoqKSA7OyAjIEtlZXAgcGVybCBtb2R1bGVzIGFzLWlzCisgICAgICAg ICopIGV2YWwgImFwcD1cJHskYXBwdmFyLSRhcHB9IiA7OworICAgIGVzYWMKKworICAgICMgSGFu ZGxlIHRoZSBzdGlsbC1leHBlcmltZW50YWwgQXV0b21ha2UtTkcgcHJvZ3JhbXMgc3BlY2lhbGx5 LgorICAgICMgVGhleSByZW1haW4gbmFtZWQgYXMgdGhlIG1haW5zdHJlYW0gQXV0b21ha2UgcHJv Z3JhbXMgKCJhdXRvbWFrZSIsCisgICAgIyBhbmQgImFjbG9jYWwiKSB0byBhdm9pZCBncmF0dWl0 b3VzIGluY29tcGF0aWJpbGl0aWVzIHdpdGgKKyAgICAjIHByZWV4aXN0aW5nIHVzYWdlcyAoYnks IHNheSwgYXV0b3JlY29uZiwgb3IgY3VzdG9tIGF1dG9nZW4uc2gKKyAgICAjIHNjcmlwdHMpLCBi dXQgY29ycmVjdGx5IGlkZW50aWZ5IHRoZW1zZWx2ZXMgKGFzIGJlaW5nIHBhcnQgb2YKKyAgICAj ICJHTlUgYXV0b21ha2UtbmciKSB3aGVuIGFza2VkIHRoZWlyIHZlcnNpb24uCisgICAgY2FzZSAk YXBwIGluCisgICAgICBhdXRvbWFrZS1uZ3xhY2xvY2FsLW5nKQorICAgICAgICBhcHA9JHthcHAl LW5nfQorICAgICAgICAoJGFwcCAtLXZlcnNpb24gfCBncmVwICcoR05VIGF1dG9tYWtlLW5nKScp ID4vZGV2L251bGwgMj4mMSB8fCB7CisgICAgICAgICAgd2Fybl8gIkVycm9yOiAnJGFwcCcgbm90 IGZvdW5kIG9yIG5vdCBmcm9tIEF1dG9tYWtlLU5HIgorICAgICAgICAgIHJldD0xCisgICAgICAg ICAgY29udGludWUKKyAgICAgICAgfSA7OworICAgICAgIyBBbm90aGVyIGNoZWNrIGlzIGZvciBw ZXJsIG1vZHVsZXMuICBUaGVzZSBjYW4gYmUgd3JpdHRlbiBhcworICAgICAgIyBlLmcuIHBlcmw6 OlhNTDo6WFBhdGggaW4gY2FzZSBvZiBYTUw6OlhQYXRoIG1vZHVsZSwgZXRjLgorICAgICAgcGVy bDo6KikKKyAgICAgICAgIyBFeHRyYWN0IG1vZHVsZSBuYW1lCisgICAgICAgIGFwcD0iJHthcHAj cGVybDo6fSIKKyAgICAgICAgaWYgISAkUEVSTCAtbSIkYXBwIiAtZSAnZXhpdCAwJyA+L2Rldi9u dWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICB3YXJuXyAiRXJyb3I6IHBlcmwgbW9kdWxlICckYXBw JyBub3QgZm91bmQiCisgICAgICAgICAgcmV0PTEKKyAgICAgICAgZmkKKyAgICAgICAgY29udGlu dWUKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgaWYgWyAiJHJlcV92ZXIiID0gIi0iIF07IHRo ZW4KKyAgICAgICMgTWVyZWx5IHJlcXVpcmUgYXBwIHRvIGV4aXN0OyBub3QgYWxsIHByZXJlcSBh cHBzIGFyZSB3ZWxsLWJlaGF2ZWQKKyAgICAgICMgc28gd2UgaGF2ZSB0byByZWx5IG9uICQ/IHJh dGhlciB0aGFuIGdldF92ZXJzaW9uLgorICAgICAgaWYgISBjaGVja19leGlzdHMgLS12ZXJib3Nl ICRhcHA7IHRoZW4KKyAgICAgICAgd2Fybl8gIkVycm9yOiAnJGFwcCcgbm90IGZvdW5kIgorICAg ICAgICByZXQ9MQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICAjIFJlcXVpcmUgYXBwIHRvIHBy b2R1Y2UgYSBuZXcgZW5vdWdoIHZlcnNpb24gc3RyaW5nLgorICAgICAgaW5zdF92ZXI9JChnZXRf dmVyc2lvbiAkYXBwKQorICAgICAgaWYgWyAhICIkaW5zdF92ZXIiIF07IHRoZW4KKyAgICAgICAg d2Fybl8gIkVycm9yOiAnJGFwcCcgbm90IGZvdW5kIgorICAgICAgICByZXQ9MQorICAgICAgZWxz ZQorICAgICAgICBsYXRlc3RfdmVyPSQoc29ydF92ZXIgJHJlcV92ZXIgJGluc3RfdmVyIHwgY3V0 IC1kJyAnIC1mMikKKyAgICAgICAgaWYgWyAhICIkbGF0ZXN0X3ZlciIgPSAiJGluc3RfdmVyIiBd OyB0aGVuCisgICAgICAgICAgd2FybmZfICclc1xuJyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICJFcnJvcjogJyRhcHAnIHZlcnNpb24gPT0g JGluc3RfdmVyIGlzIHRvbyBvbGQiICBcCisgICAgICAgICAgICAgICIgICAgICAgJyRhcHAnIHZl cnNpb24gPj0gJHJlcV92ZXIgaXMgcmVxdWlyZWQiCisgICAgICAgICAgcmV0PTEKKyAgICAgICAg ZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIHJldHVybiAkcmV0Cit9CisKK3ByaW50 X3ZlcnNpb25zKCkgeworICBlY2hvICJQcm9ncmFtICAgIE1pbl92ZXJzaW9uIgorICBlY2hvICIt LS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICBwcmludGYgJXMgIiRidWlsZHJlcSIKKyAgZWNobyAi LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgIyBjYW4ndCBkZXBlbmQgb24gY29sdW1uIC10Cit9 CisKKyMgY2hlY2tfYnVpbGRfcHJlcmVxdWlzaXRlcyBjaGVja19naXQKK2NoZWNrX2J1aWxkX3By ZXJlcXVpc2l0ZXMoKQoreworICBjaGVja19naXQ9IiQxIgorCisgICMgZ251bGliLXRvb2wgcmVx dWlyZXMgYXQgbGVhc3QgYXV0b21ha2UgYW5kIGF1dG9jb25mLgorICAjIElmIGVpdGhlciBpcyBu b3QgbGlzdGVkLCBhZGQgaXQgKHdpdGggbWluaW11bSB2ZXJzaW9uKSBhcyBhIHByZXJlcXVpc2l0 ZS4KKyAgY2FzZSAkYnVpbGRyZXEgaW4KKyAgICAqYXV0b21ha2UqKSA7OworICAgICopIGJ1aWxk cmVxPSJhdXRvbWFrZSAxLjkKKyRidWlsZHJlcSIgOzsKKyAgZXNhYworICBjYXNlICRidWlsZHJl cSBpbgorICAgICphdXRvY29uZiopIDs7CisgICAgKikgYnVpbGRyZXE9ImF1dG9jb25mIDIuNTkK KyRidWlsZHJlcSIgOzsKKyAgZXNhYworCisgICMgV2hlbiB3ZSBjYW4gZGVkdWNlIHRoYXQgZ251 bGliLXRvb2wgd2lsbCByZXF1aXJlIHBhdGNoLAorICAjIGFuZCB3aGVuIHBhdGNoIGlzIG5vdCBh bHJlYWR5IGxpc3RlZCBhcyBhIHByZXJlcXVpc2l0ZSwgYWRkIGl0LCB0b28uCisgIGlmIHRlc3Qg LWQgIiRsb2NhbF9nbF9kaXIiIFwKKyAgICAgJiYgISBmaW5kICIkbG9jYWxfZ2xfZGlyIiAtbmFt ZSAnKi5kaWZmJyAtZXhlYyBmYWxzZSB7fSArOyB0aGVuCisgICAgY2FzZSAkYnVpbGRyZXEgaW4K KyAgICAgICpwYXRjaCopIDs7CisgICAgICAqKSBidWlsZHJlcT0icGF0Y2ggLQorJGJ1aWxkcmVx IiA7OworICAgIGVzYWMKKyAgZmkKKworICBpZiAhIHByaW50ZiAnJXMnICIkYnVpbGRyZXEiIHwg Y2hlY2tfdmVyc2lvbnM7IHRoZW4KKyAgICBlY2hvID4mMgorICAgIGlmIHRlc3QgLWYgUkVBRE1F LXByZXJlcTsgdGhlbgorICAgICAgZGllICJTZWUgUkVBRE1FLXByZXJlcSBmb3IgaG93IHRvIGdl dCB0aGUgcHJlcmVxdWlzaXRlIHByb2dyYW1zIgorICAgIGVsc2UKKyAgICAgIGRpZSAiUGxlYXNl IGluc3RhbGwgdGhlIHByZXJlcXVpc2l0ZSBwcm9ncmFtcyIKKyAgICBmaQorICBmaQorCisgICMg V2FybiB0aGUgdXNlciBpZiBhdXRvbTR0ZSBhcHBlYXJzIHRvIGJlIGJyb2tlbjsgdGhpcyBjYXVz ZXMga25vd24KKyAgIyBpc3N1ZXMgd2l0aCBhdCBsZWFzdCBnZXR0ZXh0IDAuMTguMy4KKyAgcHJv YmU9JChlY2hvICdtNF9xdW90ZShbaGldKScgfCBhdXRvbTR0ZSAtbCBNNHN1Z2FyIC10ICdtNF9x dW90ZTokJScgLSkKKyAgaWYgdGVzdCAieCRwcm9iZSIgIT0geGhpOyB0aGVuCisgICAgd2Fybl8g IldBUk5JTkc6IHlvdXIgYXV0b200dGUgd3JhcHBlciBlYXRzIHN0ZGluOyIKKyAgICB3YXJuXyAi aWYgYm9vdHN0cmFwIGZhaWxzLCBjb25zaWRlciB1cGdyYWRpbmcgeW91ciBhdXRvdG9vbHMiCisg IGZpCit9CisKICMgZmluZF90b29sIEVOVlZBUiBOQU1FUy4uLgogIyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAjIFNlYXJjaCBmb3IgYSByZXF1aXJlZCBwcm9ncmFtLiAgVXNlIHRoZSB2YWx1 ZSBvZiBFTlZWQVIsIGlmIHNldCwKQEAgLTMxMywxNyArNDc5LDU0MSBAQCBmaW5kX3Rvb2wgKCkK ICAgZXZhbCAiZXhwb3J0ICRmaW5kX3Rvb2xfZW52dmFyIgogfQogCi0jIFN0cmlwIGJsYW5rIGFu ZCBjb21tZW50IGxpbmVzIHRvIGxlYXZlIHNpZ25pZmljYW50IGVudHJpZXMuCi1naXRpZ25vcmVf ZW50cmllcygpIHsKLSAgc2VkICcvXiMvZDsgL14kL2QnICIkQCIKKyMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tIFByZXBhcmluZyBHTlVMSUJfU1JDRElSIGZvciB1c2UuIC0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIyBUaGlzIGlzIHBhcnQgb2YgYXV0b3B1bGwuc2gsIGJ1dCBib290c3RyYXAgbmVlZHMg aXQgdG9vLCBmb3Igc2VsZi11cGdyYWRpbmcuCisKKyMgY2xlYW51cF9nbnVsaWIgZmFpbHMsIHJl bW92aW5nIHRoZSBkaXJlY3RvcnkgJGdudWxpYl9wYXRoIGZpcnN0LgorY2xlYW51cF9nbnVsaWIo KSB7CisgIHN0YXR1cz0kPworICBybSAtZnIgIiRnbnVsaWJfcGF0aCIKKyAgZXhpdCAkc3RhdHVz CiB9CiAKLSMgSWYgJFNUUiBpcyBub3QgYWxyZWFkeSBvbiBhIGxpbmUgYnkgaXRzZWxmIGluICRG SUxFLCBpbnNlcnQgaXQgYXQgdGhlIHN0YXJ0LgotIyBFbnRyaWVzIGFyZSBpbnNlcnRlZCBhdCB0 aGUgc3RhcnQgb2YgdGhlIGlnbm9yZSBsaXN0IHRvIGVuc3VyZSBleGlzdGluZwotIyBlbnRyaWVz IHN0YXJ0aW5nIHdpdGggISBhcmUgbm90IG92ZXJyaWRkZW4uICBTdWNoIGVudHJpZXMgc3VwcG9y dAotIyB3aGl0ZWxpc3RpbmcgZXhjZXB0aW9ucyBhZnRlciBhIG1vcmUgZ2VuZXJpYyBibGFja2xp c3QgcGF0dGVybi4KLWluc2VydF9pZl9hYnNlbnQoKSB7Ci0gIGZpbGU9JDEKK2dpdF9tb2R1bGVz X2NvbmZpZyAoKSB7CisgIHRlc3QgLWYgLmdpdG1vZHVsZXMgJiYgZ2l0IGNvbmZpZyAtLWZpbGUg LmdpdG1vZHVsZXMgIiRAIgorfQorCitwcmVwYXJlX0dOVUxJQl9TUkNESVIgKCkKK3sKKyAgaWYg dGVzdCAtbiAiJEdOVUxJQl9TUkNESVIiOyB0aGVuCisgICAgIyBVc2UgR05VTElCX1NSQ0RJUiBk aXJlY3RseS4KKyAgICAjIFdlIGFscmVhZHkgY2hlY2tlZCB0aGF0ICRHTlVMSUJfU1JDRElSIHJl ZmVyZW5jZXMgYSBkaXJlY3RvcnkuCisgICAgIyBWZXJpZnkgdGhhdCBpdCBjb250YWlucyBhIGdu dWxpYiBjaGVja291dC4KKyAgICB0ZXN0IC1mICIkR05VTElCX1NSQ0RJUi9nbnVsaWItdG9vbCIg XAorICAgICAgfHwgZGllICJFcnJvcjogLS1nbnVsaWItc3JjZGlyIG9yIFwkR05VTElCX1NSQ0RJ UiBpcyBzcGVjaWZpZWQsIiBcCisgICAgICAgICAgICAgImJ1dCBkb2VzIG5vdCBjb250YWluIGdu dWxpYi10b29sIgorICAgIGlmIHRlc3QgLW4gIiRHTlVMSUJfUkVWSVNJT04iICYmICR1c2VfZ2l0 OyB0aGVuCisgICAgICAjIFRoZSAnZ2l0IGNoZWNrb3V0ICIkR05VTElCX1JFVklTSU9OIicgY29t bWFuZCBzdWNjZWVkcyBpZiB0aGUKKyAgICAgICMgR05VTElCX1JFVklTSU9OIGlzIGEgY29tbWl0 IGhhc2ggdGhhdCBleGlzdHMgbG9jYWxseSwgb3IgaWYgaXQgaXMKKyAgICAgICMgYnJhbmNoIG5h bWUgdGhhdCBjYW4gYmUgZmV0Y2hlZCBmcm9tIG9yaWdpbi4gSXQgZmFpbHMsIGhvd2V2ZXIsCisg ICAgICAjIGlmIHRoZSBHTlVMSUJfUkVWSVNJT04gaXMgYSBjb21taXQgaGFzaCB0aGF0IG9ubHkg ZXhpc3RzIGluCisgICAgICAjIG9yaWdpbi4gSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIGEgJ2dpdCBm ZXRjaCcgYW5kIHRoZW4gcmV0cnkKKyAgICAgICMgJ2dpdCBjaGVja291dCAiJEdOVUxJQl9SRVZJ U0lPTiInLgorICAgICAgZ2l0IC1DICIkR05VTElCX1NSQ0RJUiIgY2hlY2tvdXQgIiRHTlVMSUJf UkVWSVNJT04iIDI+L2Rldi9udWxsIFwKKyAgICAgIHx8IHsgZ2l0IC1DICIkR05VTElCX1NSQ0RJ UiIgZmV0Y2ggb3JpZ2luIFwKKyAgICAgICAgICAgJiYgZ2l0IC1DICIkR05VTElCX1NSQ0RJUiIg Y2hlY2tvdXQgIiRHTlVMSUJfUkVWSVNJT04iOyB9IFwKKyAgICAgIHx8IGV4aXQgJD8KKyAgICBm aQorICBlbHNlCisgICAgaWYgISAkdXNlX2dpdDsgdGhlbgorICAgICAgZGllICJFcnJvcjogLS1u by1naXQgaXMgc3BlY2lmaWVkLCIgXAorICAgICAgICAgICJidXQgbmVpdGhlciAtLWdudWxpYi1z cmNkaXIgbm9yIFwkR05VTElCX1NSQ0RJUiBpcyBzcGVjaWZpZWQiCisgICAgZmkKKyAgICBpZiBn aXQgc3VibW9kdWxlIC1oIHwgZ3JlcCAtLSAtLXJlZmVyZW5jZSA+IC9kZXYvbnVsbDsgdGhlbgor ICAgICAgOgorICAgIGVsc2UKKyAgICAgIGRpZSAiZ2l0IHZlcnNpb24gaXMgdG9vIG9sZCwgZ2l0 ID49IDEuNi40IGlzIHJlcXVpcmVkIgorICAgIGZpCisgICAgZ251bGliX3BhdGg9JChnaXRfbW9k dWxlc19jb25maWcgc3VibW9kdWxlLmdudWxpYi5wYXRoKQorICAgIGlmIHRlc3QgLW4gIiRnbnVs aWJfcGF0aCI7IHRoZW4KKyAgICAgICMgQSBzdWJtb2R1bGUgJ2dudWxpYicgaXMgY29uZmlndXJl ZC4KKyAgICAgICMgR2V0IGdudWxpYiBmaWxlcy4gIFBvcHVsYXRlICRnbnVsaWJfcGF0aCwgdXBk YXRpbmcgdGhlIHN1Ym1vZHVsZS4KKyAgICAgIGlmIHRlc3QgLW4gIiRHTlVMSUJfUkVGRElSIiAm JiB0ZXN0IC1kICIkR05VTElCX1JFRkRJUiIvLmdpdDsgdGhlbgorICAgICAgICAjIFVzZSBHTlVM SUJfUkVGRElSIGFzIGEgcmVmZXJlbmNlLgorICAgICAgICBlY2hvICIkMDogZ2V0dGluZyBnbnVs aWIgZmlsZXMuLi4iCisgICAgICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlZmVy ZW5jZSAiJEdOVUxJQl9SRUZESVIiICIkZ251bGliX3BhdGgiXAorICAgICAgICAgIHx8IGV4aXQg JD8KKyAgICAgIGVsc2UKKyAgICAgICAgIyBHTlVMSUJfUkVGRElSIGlzIG5vdCBzZXQgb3Igbm90 IHVzYWJsZS4gSWdub3JlIGl0LgorICAgICAgICBpZiBnaXRfbW9kdWxlc19jb25maWcgc3VibW9k dWxlLmdudWxpYi51cmwgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgIGVjaG8gIiQwOiBnZXR0 aW5nIGdudWxpYiBmaWxlcy4uLiIKKyAgICAgICAgICBnaXQgc3VibW9kdWxlIGluaXQgLS0gIiRn bnVsaWJfcGF0aCIgfHwgZXhpdCAkPworICAgICAgICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0t ICIkZ251bGliX3BhdGgiIHx8IGV4aXQgJD8KKyAgICAgICAgZWxzZQorICAgICAgICAgIGRpZSAi RXJyb3I6IHN1Ym1vZHVsZSAnZ251bGliJyBoYXMgbm8gY29uZmlndXJlZCB1cmwiCisgICAgICAg IGZpCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGdudWxpYl9wYXRoPSdnbnVsaWInCisgICAg ICBpZiB0ZXN0ICEgLWQgIiRnbnVsaWJfcGF0aCI7IHRoZW4KKyAgICAgICAgIyBUaGUgc3ViZGly ZWN0b3J5ICdnbnVsaWInIGRvZXMgbm90IHlldCBleGlzdC4gQ2xvbmUgaW50byBpdC4KKyAgICAg ICAgZWNobyAiJDA6IGdldHRpbmcgZ251bGliIGZpbGVzLi4uIgorICAgICAgICB0cmFwIGNsZWFu dXBfZ251bGliIEhVUCBJTlQgUElQRSBURVJNCisgICAgICAgIGdudWxpYl91cmw9JHtHTlVMSUJf VVJMOi0kZGVmYXVsdF9nbnVsaWJfdXJsfQorICAgICAgICBpZiB0ZXN0IC1uICIkR05VTElCX1JF RkRJUiIgJiYgdGVzdCAtZCAiJEdOVUxJQl9SRUZESVIiLy5naXQ7IHRoZW4KKyAgICAgICAgICAj IFVzZSBHTlVMSUJfUkVGRElSIGFzIGEgcmVmZXJlbmNlLgorICAgICAgICAgIGdpdCBjbG9uZSAi JEdOVUxJQl9SRUZESVIiICIkZ251bGliX3BhdGgiIFwKKyAgICAgICAgICAmJiBnaXQgLUMgIiRn bnVsaWJfcGF0aCIgcmVtb3RlIHNldC11cmwgb3JpZ2luICIkZ251bGliX3VybCIgXAorICAgICAg ICAgICYmIGlmIHRlc3QgLXogIiRHTlVMSUJfUkVWSVNJT04iOyB0aGVuCisgICAgICAgICAgICAg ICBnaXQgLUMgIiRnbnVsaWJfcGF0aCIgcHVsbCBvcmlnaW4gXAorICAgICAgICAgICAgICAgJiYg eworICAgICAgICAgICAgICAgICAjIFdlIHdhbnQgdGhlIGRlZmF1bHQgYnJhbmNoIG9mICIkZ251 bGliX3VybCIgKHNpbmNlIHRoYXQncworICAgICAgICAgICAgICAgICAjIHRoZSBiZWhhdmlvdXIg aWYgR05VTElCX1JFRkRJUiBpcyBub3Qgc3BlY2lmaWVkKSwgbm90IHRoZQorICAgICAgICAgICAg ICAgICAjIGN1cnJlbnQgYnJhbmNoIG9mICIkR05VTElCX1JFRkRJUiIuCisgICAgICAgICAgICAg ICAgIGRlZmF1bHRfYnJhbmNoPWBMQ19BTEw9QyBnaXQgLUMgIiRnbnVsaWJfcGF0aCIgXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZSBzaG93IG9y aWdpbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtbiAtZSAncy9e ICpIRUFEIGJyYW5jaDogLy9wJ2AKKyAgICAgICAgICAgICAgICAgdGVzdCAtbiAiJGRlZmF1bHRf YnJhbmNoIiB8fCBkZWZhdWx0X2JyYW5jaD0nbWFzdGVyJworICAgICAgICAgICAgICAgICBnaXQg LUMgIiRnbnVsaWJfcGF0aCIgY2hlY2tvdXQgIiRkZWZhdWx0X2JyYW5jaCIKKyAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAjIFRoZSAnZ2l0IGNoZWNr b3V0ICIkR05VTElCX1JFVklTSU9OIicgY29tbWFuZCBzdWNjZWVkcyBpZiB0aGUKKyAgICAgICAg ICAgICAgICMgR05VTElCX1JFVklTSU9OIGlzIGEgY29tbWl0IGhhc2ggdGhhdCBleGlzdHMgbG9j YWxseSwgb3IgaWYgaXQKKyAgICAgICAgICAgICAgICMgaXMgYSBicmFuY2ggbmFtZSB0aGF0IGNh biBiZSBmZXRjaGVkIGZyb20gb3JpZ2luLiBJdCBmYWlscywKKyAgICAgICAgICAgICAgICMgaG93 ZXZlciwgaWYgdGhlIEdOVUxJQl9SRVZJU0lPTiBpcyBhIGNvbW1pdCBoYXNoIHRoYXQgb25seQor ICAgICAgICAgICAgICAgIyBleGlzdHMgaW4gb3JpZ2luLiBJbiB0aGlzIGNhc2UsIHdlIG5lZWQg YSAnZ2l0IGZldGNoJyBhbmQgdGhlbgorICAgICAgICAgICAgICAgIyByZXRyeSAnZ2l0IGNoZWNr b3V0ICIkR05VTElCX1JFVklTSU9OIicuCisgICAgICAgICAgICAgICBnaXQgLUMgIiRnbnVsaWJf cGF0aCIgY2hlY2tvdXQgIiRHTlVMSUJfUkVWSVNJT04iIDI+L2Rldi9udWxsIFwKKyAgICAgICAg ICAgICAgIHx8IHsgZ2l0IC1DICIkZ251bGliX3BhdGgiIGZldGNoIG9yaWdpbiBcCisgICAgICAg ICAgICAgICAgICAgICYmIGdpdCAtQyAiJGdudWxpYl9wYXRoIiBjaGVja291dCAiJEdOVUxJQl9S RVZJU0lPTiI7IH0KKyAgICAgICAgICAgICBmaSBcCisgICAgICAgICAgfHwgY2xlYW51cF9nbnVs aWIKKyAgICAgICAgZWxzZQorICAgICAgICAgICMgR05VTElCX1JFRkRJUiBpcyBub3Qgc2V0IG9y IG5vdCB1c2FibGUuIElnbm9yZSBpdC4KKyAgICAgICAgICBzaGFsbG93PSctLWRlcHRoIDInCisg ICAgICAgICAgaWYgdGVzdCAteiAiJEdOVUxJQl9SRVZJU0lPTiI7IHRoZW4KKyAgICAgICAgICAg IGdpdCBjbG9uZSAkc2hhbGxvdyAiJGdudWxpYl91cmwiICIkZ251bGliX3BhdGgiIFwKKyAgICAg ICAgICAgICAgfHwgY2xlYW51cF9nbnVsaWIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAj IE9ubHkgd2FudCBhIHNoYWxsb3cgY2hlY2tvdXQgb2YgJEdOVUxJQl9SRVZJU0lPTiwgYnV0IGdp dCBkb2VzIG5vdAorICAgICAgICAgICAgIyBzdXBwb3J0IGNsb25pbmcgYnkgY29tbWl0IGhhc2gu IFNvIGF0dGVtcHQgYSBzaGFsbG93IGZldGNoIGJ5CisgICAgICAgICAgICAjIGNvbW1pdCBoYXNo IHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgZGF0YSBkb3dubG9hZGVkIGFuZCBjaGFuZ2VzCisg ICAgICAgICAgICAjIG5lZWRlZCB0byBiZSBwcm9jZXNzZWQsIHdoaWNoIGNhbiBkcmFzdGljYWxs eSByZWR1Y2UgZG93bmxvYWQgYW5kCisgICAgICAgICAgICAjIHByb2Nlc3NpbmcgdGltZSBmb3Ig Y2hlY2tvdXQuIElmIHRoZSBmZXRjaCBieSBjb21taXQgZmFpbHMsIGEKKyAgICAgICAgICAgICMg c2hhbGxvdyBmZXRjaCBjYW5ub3QgYmUgcGVyZm9ybWVkIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cg d2hhdCB0aGUKKyAgICAgICAgICAgICMgZGVwdGggb2YgdGhlIGNvbW1pdCBpcyB3aXRob3V0IGZl dGNoaW5nIGFsbCBjb21taXRzLiBTbyBmYWxsIGJhY2sKKyAgICAgICAgICAgICMgdG8gZmV0Y2hp bmcgYWxsIGNvbW1pdHMuCisgICAgICAgICAgICAjICRHTlVMSUJfUkVWSVNJT04gY2FuIGJlIGEg Y29tbWl0IGlkLCBhIHRhZyBuYW1lLCBvciBhIGJyYW5jaCBuYW1lLgorICAgICAgICAgICAgbWtk aXIgLXAgIiRnbnVsaWJfcGF0aCIKKyAgICAgICAgICAgICMgVXNlIGEgLWMgb3B0aW9uIHRvIHNp bGVuY2UgYW4gYW5ub3lpbmcgbWVzc2FnZQorICAgICAgICAgICAgIyAiaGludDogVXNpbmcgJ21h c3RlcicgYXMgdGhlIG5hbWUgZm9yIHRoZSBpbml0aWFsIGJyYW5jaC4iCisgICAgICAgICAgICAj IChjZi4gPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzY1NTI0NTEyLz4pLgor ICAgICAgICAgICAgZ2l0IC1DICIkZ251bGliX3BhdGgiIC1jIGluaXQuZGVmYXVsdEJyYW5jaD1t YXN0ZXIgaW5pdAorICAgICAgICAgICAgZ2l0IC1DICIkZ251bGliX3BhdGgiIHJlbW90ZSBhZGQg b3JpZ2luICIkZ251bGliX3VybCIKKyAgICAgICAgICAgIGlmIGdpdCAtQyAiJGdudWxpYl9wYXRo IiBmZXRjaCAkc2hhbGxvdyBvcmlnaW4gIiRHTlVMSUJfUkVWSVNJT04iCisgICAgICAgICAgICB0 aGVuCisgICAgICAgICAgICAgICMgImdpdCBmZXRjaCIgb2YgdGhlIHNwZWNpZmljIGNvbW1pdCBz dWNjZWVkZWQuCisgICAgICAgICAgICAgIGdpdCAtQyAiJGdudWxpYl9wYXRoIiByZXNldCAtLWhh cmQgRkVUQ0hfSEVBRCBcCisgICAgICAgICAgICAgICAgfHwgY2xlYW51cF9nbnVsaWIKKyAgICAg ICAgICAgICAgIyAiZ2l0IGZldGNoIiBkb2VzIG5vdCBmZXRjaCB0YWdzIChhdCBsZWFzdCBpbiBn aXQgdmVyc2lvbiAyLjQzKS4KKyAgICAgICAgICAgICAgIyBJZiAkR05VTElCX1JFVklTSU9OIGlz IGEgdGFnIChub3QgYSBjb21taXQgaWQgb3IgYnJhbmNoIG5hbWUpLAorICAgICAgICAgICAgICAj IGFkZCB0aGUgdGFnIGV4cGxpY2l0bHkuCisgICAgICAgICAgICAgIHJldmlzaW9uPWBnaXQgLUMg IiRnbnVsaWJfcGF0aCIgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolSGAKKyAgICAgICAgICAgICAg YnJhbmNoPWBMQ19BTEw9QyBnaXQgLUMgIiRnbnVsaWJfcGF0aCIgcmVtb3RlIHNob3cgb3JpZ2lu IFwKKyAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtbiAtZSAncy9eICAgIFwoW14gXSpcKSAq IHRyYWNrZWQkL1wxL3AnYAorICAgICAgICAgICAgICB0ZXN0ICIkcmV2aXNpb24iID0gIiRHTlVM SUJfUkVWSVNJT04iIFwKKyAgICAgICAgICAgICAgICB8fCB0ZXN0ICIkYnJhbmNoIiA9ICIkR05V TElCX1JFVklTSU9OIiBcCisgICAgICAgICAgICAgICAgfHwgZ2l0IC1DICIkZ251bGliX3BhdGgi IHRhZyAiJEdOVUxJQl9SRVZJU0lPTiIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg IyBGZXRjaCB0aGUgZW50aXJlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgIGdpdCAtQyAiJGdu dWxpYl9wYXRoIiBmZXRjaCBvcmlnaW4gXAorICAgICAgICAgICAgICAgIHx8IGNsZWFudXBfZ251 bGliCisgICAgICAgICAgICAgIGdpdCAtQyAiJGdudWxpYl9wYXRoIiBjaGVja291dCAiJEdOVUxJ Ql9SRVZJU0lPTiIgXAorICAgICAgICAgICAgICAgIHx8IGNsZWFudXBfZ251bGliCisgICAgICAg ICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIHRyYXAgLSBIVVAgSU5U IFBJUEUgVEVSTQorICAgICAgZWxzZQorICAgICAgICAjIFRoZSBzdWJkaXJlY3RvcnkgJ2dudWxp YicgYWxyZWFkeSBleGlzdHMuCisgICAgICAgIGlmIHRlc3QgLW4gIiRHTlVMSUJfUkVWSVNJT04i OyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtZCAiJGdudWxpYl9wYXRoLy5naXQiOyB0aGVuCisg ICAgICAgICAgICAjIFRoZSAnZ2l0IGNoZWNrb3V0ICIkR05VTElCX1JFVklTSU9OIicgY29tbWFu ZCBzdWNjZWVkcyBpZiB0aGUKKyAgICAgICAgICAgICMgR05VTElCX1JFVklTSU9OIGlzIGEgY29t bWl0IGhhc2ggdGhhdCBleGlzdHMgbG9jYWxseSwgb3IgaWYgaXQKKyAgICAgICAgICAgICMgaXMg YSBicmFuY2ggbmFtZSB0aGF0IGNhbiBiZSBmZXRjaGVkIGZyb20gb3JpZ2luLiBJdCBmYWlscywK KyAgICAgICAgICAgICMgaG93ZXZlciwgaWYgdGhlIEdOVUxJQl9SRVZJU0lPTiBpcyBhIGNvbW1p dCBoYXNoIHRoYXQgb25seQorICAgICAgICAgICAgIyBleGlzdHMgaW4gb3JpZ2luLiBJbiB0aGlz IGNhc2UsIHdlIG5lZWQgYSAnZ2l0IGZldGNoJyBhbmQgdGhlbgorICAgICAgICAgICAgIyByZXRy eSAnZ2l0IGNoZWNrb3V0ICIkR05VTElCX1JFVklTSU9OIicuCisgICAgICAgICAgICBnaXQgLUMg IiRnbnVsaWJfcGF0aCIgY2hlY2tvdXQgIiRHTlVMSUJfUkVWSVNJT04iIDI+L2Rldi9udWxsIFwK KyAgICAgICAgICAgIHx8IHsgZ2l0IC1DICIkZ251bGliX3BhdGgiIGZldGNoIG9yaWdpbiBcCisg ICAgICAgICAgICAgICAgICYmIGdpdCAtQyAiJGdudWxpYl9wYXRoIiBjaGVja291dCAiJEdOVUxJ Ql9SRVZJU0lPTiI7IH0gXAorICAgICAgICAgICAgfHwgZXhpdCAkPworICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgIGRpZSAiRXJyb3I6IEdOVUxJQl9SRVZJU0lPTiBpcyBzcGVjaWZpZWQgaW4g Ym9vdHN0cmFwLmNvbmYsIiBcCisgICAgICAgICAgICAgICAgImJ1dCAnJGdudWxpYl9wYXRoJyBj b250YWlucyBubyBnaXQgaGlzdG9yeSIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAg ZmkKKyAgICBmaQorICAgICMgVmVyaWZ5IHRoYXQgJGdudWxpYl9wYXRoIGNvbnRhaW5zIGEgZ251 bGliIGNoZWNrb3V0LgorICAgIHRlc3QgLWYgIiRnbnVsaWJfcGF0aC9nbnVsaWItdG9vbCIgXAor ICAgICAgfHwgZGllICJFcnJvcjogJyRnbnVsaWJfcGF0aCcgaXMgc3VwcG9zZWQgdG8gY29udGFp biBhIGdudWxpYiBjaGVja291dCwiIFwKKyAgICAgICAgICAgICAiYnV0IGRvZXMgbm90IGNvbnRh aW4gZ251bGliLXRvb2wiCisgICAgR05VTElCX1NSQ0RJUj0kZ251bGliX3BhdGgKKyAgZmkKKyAg IyAkR05VTElCX1NSQ0RJUiBub3cgcG9pbnRzIHRvIHRoZSB2ZXJzaW9uIG9mIGdudWxpYiB0byB1 c2UsIGFuZAorICAjIHdlIG5vIGxvbmdlciBuZWVkIHRvIHVzZSBnaXQgb3IgJGdudWxpYl9wYXRo IGJlbG93IGhlcmUuCit9CisKKyMgLS0tLS0tLS0gVXBncmFkaW5nIGJvb3RzdHJhcCB0byB0aGUg dmVyc2lvbiBmb3VuZCBpbiBHTlVMSUJfU1JDRElSLiAtLS0tLS0tLQorCit1cGdyYWRlX2Jvb3Rz dHJhcCAoKQoreworICBpZiB0ZXN0IC1mICIkbWVkaXIiL2Jvb3RzdHJhcC1mdW5jbGliLnNoOyB0 aGVuCisgICAgdXBkYXRlX2xpYj10cnVlCisgICAgeyBjbXAgLXMgIiRtZWRpciIvYm9vdHN0cmFw ICIkR05VTElCX1NSQ0RJUi90b3AvYm9vdHN0cmFwIiBcCisgICAgICAmJiBjbXAgLXMgIiRtZWRp ciIvYm9vdHN0cmFwLWZ1bmNsaWIuc2ggXAorICAgICAgICAgICAgICAgICIkR05VTElCX1NSQ0RJ Ui90b3AvYm9vdHN0cmFwLWZ1bmNsaWIuc2giIFwKKyAgICAgICYmIGNtcCAtcyAiJG1lZGlyIi9h dXRvcHVsbC5zaCAiJEdOVUxJQl9TUkNESVIvdG9wL2F1dG9wdWxsLnNoIiBcCisgICAgICAmJiBj bXAgLXMgIiRtZWRpciIvYXV0b2dlbi5zaCAiJEdOVUxJQl9TUkNESVIvdG9wL2F1dG9nZW4uc2gi OyBcCisgICAgfQorICBlbHNlCisgICAgdXBkYXRlX2xpYj1mYWxzZQorICAgIGNtcCAtcyAiJG1l ZGlyIi9ib290c3RyYXAgIiRHTlVMSUJfU1JDRElSL2J1aWxkLWF1eC9ib290c3RyYXAiCisgIGZp IHx8IHsKKyAgICBpZiAkdXBkYXRlX2xpYjsgdGhlbgorICAgICAgZWNobyAiJDA6IHVwZGF0aW5n IGJvb3RzdHJhcCAmIGNvbXBhbmlvbnMgYW5kIHJlc3RhcnRpbmcuLi4iCisgICAgZWxzZQorICAg ICAgZWNobyAiJDA6IHVwZGF0aW5nIGJvb3RzdHJhcCBhbmQgcmVzdGFydGluZy4uLiIKKyAgICBm aQorICAgIGNhc2UgJChzaCAtYyAnZWNobyAiJDEiJyAtLSBhKSBpbgorICAgICAgYSkgaWdub3Jl ZD0tLTs7CisgICAgICAqKSBpZ25vcmVkPWlnbm9yZWQ7OworICAgIGVzYWMKKyAgICB1PSR1cGRh dGVfbGliCisgICAgZXhlYyBzaCAtYyBcCisgICAgICAneyBpZiAnJHUnICYmIHRlc3QgLWYgIiQx IjsgdGhlbiBjcCAiJDEiICIkMyI7IGVsc2UgY3AgIiQyIiAiJDMiOyBmaTsgfSAmJgorICAgICAg IHsgaWYgJyR1JyAmJiB0ZXN0IC1mICIkNCI7IHRoZW4gY3AgIiQ0IiAiJDUiOyBlbHNlIHJtIC1m ICIkNSI7IGZpOyB9ICYmCisgICAgICAgeyBpZiAnJHUnICYmIHRlc3QgLWYgIiQ2IjsgdGhlbiBj cCAiJDYiICIkNyI7IGVsc2Ugcm0gLWYgIiQ3IjsgZmk7IH0gJiYKKyAgICAgICB7IGlmICckdScg JiYgdGVzdCAtZiAiJDgiOyB0aGVuIGNwICIkOCIgIiQ5IjsgZWxzZSBybSAtZiAiJDkiOyBmaTsg fSAmJgorICAgICAgIHNoaWZ0ICYmIHNoaWZ0ICYmIHNoaWZ0ICYmIHNoaWZ0ICYmIHNoaWZ0ICYm CisgICAgICAgc2hpZnQgJiYgc2hpZnQgJiYgc2hpZnQgJiYgc2hpZnQgJiYKKyAgICAgICBleGVj ICIke0NPTkZJR19TSEVMTC0vYmluL3NofSIgIiRAIicgXAorICAgICAgJGlnbm9yZWQgXAorICAg ICAgIiRHTlVMSUJfU1JDRElSL3RvcC9ib290c3RyYXAiICIkR05VTElCX1NSQ0RJUi9idWlsZC1h dXgvYm9vdHN0cmFwIiBcCisgICAgICAiJG1lZGlyL2Jvb3RzdHJhcCIgXAorICAgICAgIiRHTlVM SUJfU1JDRElSL3RvcC9ib290c3RyYXAtZnVuY2xpYi5zaCIgIiRtZWRpci9ib290c3RyYXAtZnVu Y2xpYi5zaCIgXAorICAgICAgIiRHTlVMSUJfU1JDRElSL3RvcC9hdXRvcHVsbC5zaCIgIiRtZWRp ci9hdXRvcHVsbC5zaCIgXAorICAgICAgIiRHTlVMSUJfU1JDRElSL3RvcC9hdXRvZ2VuLnNoIiAi JG1lZGlyL2F1dG9nZW4uc2giIFwKKyAgICAgICIkMCIgIiRAIiAtLW5vLWJvb3RzdHJhcC1zeW5j CisgIH0KK30KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lmIHRlc3QgeCIkZ251bGliX21v ZHVsZXMkZ251bGliX2ZpbGVzJGdudWxpYl9leHRyYV9maWxlcyIgPSB4OyB0aGVuCisgIHVzZV9n bnVsaWI9ZmFsc2UKK2Vsc2UKKyAgdXNlX2dudWxpYj10cnVlCitmaQorCisjIC0tLS0tLS0tIEZl dGNoIGF1eGlsaWFyeSBmaWxlcyBmcm9tIHRoZSBuZXR3b3JrLiAgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKworYXV0b3B1bGxfdXNhZ2UoKSB7CisgIGNhdCA8PEVPRgorVXNhZ2U6ICRtZSBb T1BUSU9OXS4uLgorQm9vdHN0cmFwIHRoaXMgcGFja2FnZSBmcm9tIHRoZSBjaGVja2VkLW91dCBz b3VyY2VzLCBwaGFzZSAxOgorUHVsbCBmaWxlcyBmcm9tIHRoZSBuZXR3b3JrLgorCitPcHRpb25h bCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgIEdOVUxJQl9TUkNESVIgICAgICAgICAgICBTcGVj aWZpZXMgdGhlIGxvY2FsIGRpcmVjdG9yeSB3aGVyZSBnbnVsaWIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNvdXJjZXMgcmVzaWRlLiAgVXNlIHRoaXMgaWYgeW91IGFscmVhZHkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhhdmUgZ251bGliIHNvdXJjZXMgb24geW91ciBtYWNoaW5l LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHVzZSB0aGVzZSBz b3VyY2VzLgorICBHTlVMSUJfUkVGRElSICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsb2NhbCBk aXJlY3Rvcnkgd2hlcmUgYSBnbnVsaWIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9z aXRvcnkgKHdpdGggYSAuZ2l0IHN1YmRpcmVjdG9yeSkgcmVzaWRlcy4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIFVzZSB0aGlzIGlmIHlvdSBhbHJlYWR5IGhhdmUgZ251bGliIHNvdXJjZXMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBoaXN0b3J5IG9uIHlvdXIgbWFjaGluZSwg YW5kIGRvIG5vdCB3YW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB3YXN0ZSB5b3Vy IGJhbmR3aWR0aCBkb3dubG9hZGluZyB0aGVtIGFnYWluLgorICBHTlVMSUJfVVJMICAgICAgICAg ICAgICAgVVJMIG9mIHRoZSBnbnVsaWIgcmVwb3NpdG9yeS4gIFRoZSBkZWZhdWx0IGlzCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAkZGVmYXVsdF9nbnVsaWJfdXJsLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2hpY2ggaXMgR251bGliJ3MgdXBzdHJlYW0gcmVwb3NpdG9yeS4KKwor T3B0aW9uczoKKworICAtLWJvb3RzdHJhcC1zeW5jICAgICAgICAgSWYgdGhpcyBib290c3RyYXAg c2NyaXB0IGlzIG5vdCBpZGVudGljYWwgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo ZSB2ZXJzaW9uIGluIHRoZSBsb2NhbCBnbnVsaWIgc291cmNlcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVwZGF0ZSB0aGlzIHNjcmlwdCwgYW5kIHRoZW4gcmVzdGFydCBpdCB3aXRoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAvYmluL3NoIG9yIHRoZSBzaGVsbCBcJENPTkZJR19T SEVMTC4KKyAgLS1uby1ib290c3RyYXAtc3luYyAgICAgIERvIG5vdCBjaGVjayB3aGV0aGVyIGJv b3RzdHJhcCBpcyBvdXQgb2Ygc3luYy4KKworICAtLWZvcmNlICAgICAgICAgICAgICAgICAgQXR0 ZW1wdCB0byBib290c3RyYXAgZXZlbiBpZiB0aGUgc291cmNlcyBzZWVtCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBub3QgdG8gaGF2ZSBiZWVuIGNoZWNrZWQgb3V0LgorICAtLW5vLWdpdCAg ICAgICAgICAgICAgICAgRG8gbm90IHVzZSBnaXQgdG8gdXBkYXRlIGdudWxpYi4gIFJlcXVpcmVz IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwkR05VTElCX1NSQ0RJUiBwb2ludHMg dG8gYSBnbnVsaWIgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0 aGUgY29ycmVjdCByZXZpc2lvbi4KKyAgLS1za2lwLXBvICAgICAgICAgICAgICAgIERvIG5vdCBk b3dubG9hZCAqLnBvIGZpbGVzLgorRU9GCisgIGJvb3RzdHJhcF9wcmludF9vcHRpb25fdXNhZ2Vf aG9vaworICBjYXQgPDxFT0YKK0lmIHRoZSBmaWxlIGJvb3RzdHJhcC5jb25mIGV4aXN0cyBpbiB0 aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhpcyBzY3JpcHQsIGl0cworY29udGVudHMgYXJlIHJlYWQg YXMgc2hlbGwgdmFyaWFibGVzIHRvIGNvbmZpZ3VyZSB0aGUgYm9vdHN0cmFwLgorCitGb3IgYnVp bGQgcHJlcmVxdWlzaXRlcywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UgXCRBVVRPQ09ORiBh bmQgXCRBTVRBUgorYXJlIGhvbm9yZWQuCisKK0dudWxpYiBzb3VyY2VzIGNhbiBiZSBmZXRjaGVk IGluIHZhcmlvdXMgd2F5czoKKworICogSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdOVUxJ Ql9TUkNESVIgaXMgc2V0LCB0aGVuIHNvdXJjZXMgYXJlCisgICBmZXRjaGVkIGZyb20gdGhhdCBs b2NhbCBkaXJlY3RvcnkuICBJZiBpdCBpcyBhIGdpdCByZXBvc2l0b3J5IGFuZCB0aGUKKyAgIGNv bmZpZ3VyYXRpb24gdmFyaWFibGUgR05VTElCX1JFVklTSU9OIGlzIHNldCBpbiBib290c3RyYXAu Y29uZiwgdGhlbgorICAgdGhhdCByZXZpc2lvbiBpcyBjaGVja2VkIG91dC4KKworICogT3RoZXJ3 aXNlLCBpZiB0aGlzIHBhY2thZ2UgaXMgaW4gYSBnaXQgcmVwb3NpdG9yeSB3aXRoIGEgJ2dudWxp YicKKyAgIHN1Ym1vZHVsZSBjb25maWd1cmVkLCB0aGVuIHRoYXQgc3VibW9kdWxlIGlzIGluaXRp YWxpemVkIGFuZCB1cGRhdGVkCisgICBhbmQgc291cmNlcyBhcmUgZmV0Y2hlZCBmcm9tIHRoZXJl LiAgSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisgICBHTlVMSUJfUkVGRElSIGlzIHNldCBh bmQgaXMgYSBnaXQgcmVwb3NpdG9yeSwgdGhlbiBpdCBpcyB1c2VkIGFzIGEKKyAgIHJlZmVyZW5j ZS4KKworICogT3RoZXJ3aXNlLCBpZiB0aGUgJ2dudWxpYicgZGlyZWN0b3J5IGRvZXMgbm90IGV4 aXN0LCBHbnVsaWIgc291cmNlcworICAgYXJlIGNsb25lZCBpbnRvIHRoYXQgZGlyZWN0b3J5IHVz aW5nIGdpdCBmcm9tIFwkR05VTElCX1VSTCwgZGVmYXVsdGluZworICAgdG8gJGRlZmF1bHRfZ251 bGliX3VybDsgaWYgR05VTElCX1JFRkRJUiBpcyBzZXQgYW5kIGlzIGEgZ2l0IHJlcG9zaXRvcnkK KyAgIGl0cyBjb250ZW50cyBtYXkgYmUgdXNlZCB0byBhY2NlbGVyYXRlIHRoZSBwcm9jZXNzLgor ICAgSWYgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgR05VTElCX1JFVklTSU9OIGlzIHNldCBp biBib290c3RyYXAuY29uZiwKKyAgIHRoZW4gdGhhdCByZXZpc2lvbiBpcyBjaGVja2VkIG91dC4K KworICogT3RoZXJ3aXNlLCB0aGUgZXhpc3RpbmcgR251bGliIHNvdXJjZXMgaW4gdGhlICdnbnVs aWInIGRpcmVjdG9yeSBhcmUKKyAgIHVzZWQuICBJZiBpdCBpcyBhIGdpdCByZXBvc2l0b3J5IGFu ZCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICAgR05VTElCX1JFVklTSU9OIGlzIHNldCBp biBib290c3RyYXAuY29uZiwgdGhlbiB0aGF0IHJldmlzaW9uIGlzCisgICBjaGVja2VkIG91dC4K KworSWYgeW91IG1haW50YWluIGEgcGFja2FnZSBhbmQgd2FudCB0byBwaW4gYSBwYXJ0aWN1bGFy IHJldmlzaW9uIG9mIHRoZQorR251bGliIHNvdXJjZXMgdGhhdCBoYXMgYmVlbiB0ZXN0ZWQgd2l0 aCB5b3VyIHBhY2thZ2UsIHRoZW4gdGhlcmUgYXJlCit0d28gcG9zc2libGUgYXBwcm9hY2hlczog ZWl0aGVyIGNvbmZpZ3VyZSBhICdnbnVsaWInIHN1Ym1vZHVsZSB3aXRoIHRoZQorYXBwcm9wcmlh dGUgcmV2aXNpb24sIG9yIHNldCBHTlVMSUJfUkVWSVNJT04gKGFuZCBpZiBuZWNlc3NhcnkKK0dO VUxJQl9VUkwpIGluIGJvb3RzdHJhcC5jb25mLgorCitSdW5uaW5nIHdpdGhvdXQgYXJndW1lbnRz IHdpbGwgc3VmZmljZSBpbiBtb3N0IGNhc2VzLgorRU9GCit9CisKKyMgRmV0Y2ggYXV4aWxpYXJ5 IGZpbGVzIHRoYXQgYXJlIG9taXR0ZWQgZnJvbSB0aGUgdmVyc2lvbiBjb250cm9sCisjIHJlcG9z aXRvcnkgb2YgdGhpcyBwYWNrYWdlLgorYXV0b3B1bGwoKQoreworICAjIEVuc3VyZSB0aGF0IENE UEFUSCBpcyBub3Qgc2V0LiAgT3RoZXJ3aXNlLCB0aGUgb3V0cHV0IGZyb20gY2QKKyAgIyB3b3Vs ZCBjYXVzZSB0cm91YmxlIGluIGF0IGxlYXN0IG9uZSB1c2UgYmVsb3cuCisgICh1bnNldCBDRFBB VEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworICAjIFBhcnNlIG9wdGlvbnMu CisKKyAgIyBVc2UgZ2l0IHRvIHVwZGF0ZSBnbnVsaWIgc291cmNlcworICB1c2VfZ2l0PXRydWUK KworICBmb3Igb3B0aW9uCisgIGRvCisgICAgY2FzZSAkb3B0aW9uIGluCisgICAgLS1oZWxwKQor ICAgICAgYXV0b3B1bGxfdXNhZ2UKKyAgICAgIHJldHVybjs7CisgICAgLS12ZXJzaW9uKQorICAg ICAgc2V0IC1lCisgICAgICBlY2hvICJhdXRvcHVsbC5zaCAkc2NyaXB0bGlidmVyc2lvbiIKKyAg ICAgIGVjaG8gIiRjb3B5cmlnaHQiCisgICAgICByZXR1cm4gMAorICAgICAgOzsKKyAgICAtLXNr aXAtcG8pCisgICAgICBTS0lQX1BPPXQ7OworICAgIC0tZm9yY2UpCisgICAgICBjaGVja291dF9v bmx5X2ZpbGU9OzsKKyAgICAtLWJvb3RzdHJhcC1zeW5jKQorICAgICAgYm9vdHN0cmFwX3N5bmM9 dHJ1ZTs7CisgICAgLS1uby1ib290c3RyYXAtc3luYykKKyAgICAgIGJvb3RzdHJhcF9zeW5jPWZh bHNlOzsKKyAgICAtLW5vLWdpdCkKKyAgICAgIHVzZV9naXQ9ZmFsc2U7OworICAgICopCisgICAg ICBib290c3RyYXBfb3B0aW9uX2hvb2sgJG9wdGlvbiB8fCBkaWUgIiRvcHRpb246IHVua25vd24g b3B0aW9uIjs7CisgICAgZXNhYworICBkb25lCisKKyAgJHVzZV9naXQgfHwgdGVzdCAtbiAiJEdO VUxJQl9TUkNESVIiIFwKKyAgICB8fCBkaWUgIkVycm9yOiAtLW5vLWdpdCByZXF1aXJlcyBcJEdO VUxJQl9TUkNESVIgZW52aXJvbm1lbnQgdmFyaWFibGUiIFwKKyAgICAgICAgICAgIm9yIC0tZ251 bGliLXNyY2RpciBvcHRpb24iCisgIHRlc3QgLXogIiRHTlVMSUJfU1JDRElSIiB8fCB0ZXN0IC1k ICIkR05VTElCX1NSQ0RJUiIgXAorICAgIHx8IGRpZSAiRXJyb3I6IFwkR05VTElCX1NSQ0RJUiBl bnZpcm9ubWVudCB2YXJpYWJsZSIgXAorICAgICAgICAgICAib3IgLS1nbnVsaWItc3JjZGlyIG9w dGlvbiBpcyBzcGVjaWZpZWQsIiBcCisgICAgICAgICAgICJidXQgZG9lcyBub3QgZGVub3RlIGEg ZGlyZWN0b3J5IgorCisgIGlmIHRlc3QgLW4gIiRjaGVja291dF9vbmx5X2ZpbGUiICYmIHRlc3Qg ISAtciAiJGNoZWNrb3V0X29ubHlfZmlsZSI7IHRoZW4KKyAgICBkaWUgIlJ1bm5pbmcgdGhpcyBz Y3JpcHQgZnJvbSBhIG5vbi1jaGVja2VkLW91dCBkaXN0cmlidXRpb24gaXMgcmlza3kuIgorICBm aQorCisgIGNoZWNrX2J1aWxkX3ByZXJlcXVpc2l0ZXMgJHVzZV9naXQKKworICBpZiAkdXNlX2du dWxpYiB8fCAkYm9vdHN0cmFwX3N5bmM7IHRoZW4KKyAgICBwcmVwYXJlX0dOVUxJQl9TUkNESVIK KyAgICBpZiAkYm9vdHN0cmFwX3N5bmM7IHRoZW4KKyAgICAgIHVwZ3JhZGVfYm9vdHN0cmFwICIk QCIKKyAgICBmaQorICBmaQorCisgICMgRmluZCBzaGExc3VtLCBuYW1lZCBnc2hhMXN1bSBvbiBN YWNQb3J0cywgc2hhc3VtIG9uIE1hYyBPUyBYIDEwLjYuCisgICMgQWxzbyBmaW5kIHRoZSBjb21w YXRpYmxlIHNoYTEgdXRpbGl0eSBvbiB0aGUgQlNEcworICBpZiB0ZXN0IHgiJFNLSVBfUE8iID0g eDsgdGhlbgorICAgIGZpbmRfdG9vbCBTSEExU1VNIHNoYTFzdW0gZ3NoYTFzdW0gc2hhc3VtIHNo YTEKKyAgZmkKKworICAjIFNlZSBpZiB3ZSBjYW4gdXNlIGdudWxpYidzIGdpdC1tZXJnZS1jaGFu Z2Vsb2cgbWVyZ2UgZHJpdmVyLgorICBpZiAkdXNlX2dpdCAmJiB0ZXN0IC1kIC5naXQgJiYgY2hl Y2tfZXhpc3RzIGdpdDsgdGhlbgorICAgIGlmIGdpdCBjb25maWcgbWVyZ2UubWVyZ2UtY2hhbmdl bG9nLmRyaXZlciA+L2Rldi9udWxsIDsgdGhlbgorICAgICAgOgorICAgIGVsaWYgY2hlY2tfZXhp c3RzIGdpdC1tZXJnZS1jaGFuZ2Vsb2c7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiBpbml0aWFsaXpp bmcgZ2l0LW1lcmdlLWNoYW5nZWxvZyBkcml2ZXIiCisgICAgICBnaXQgY29uZmlnIG1lcmdlLm1l cmdlLWNoYW5nZWxvZy5uYW1lICdHTlUtc3R5bGUgQ2hhbmdlTG9nIG1lcmdlIGRyaXZlcicKKyAg ICAgIGdpdCBjb25maWcgbWVyZ2UubWVyZ2UtY2hhbmdlbG9nLmRyaXZlciAnZ2l0LW1lcmdlLWNo YW5nZWxvZyAlTyAlQSAlQicKKyAgICBlbHNlCisgICAgICBlY2hvICIkMDogY29uc2lkZXIgaW5z dGFsbGluZyBnaXQtbWVyZ2UtY2hhbmdlbG9nIGZyb20gZ251bGliIgorICAgIGZpCisgIGZpCisK KyAgY2FzZSAkU0tJUF9QTyBpbgorICAnJykKKyAgICBpZiB0ZXN0IC1kIHBvOyB0aGVuCisgICAg ICB1cGRhdGVfcG9fZmlsZXMgcG8gJHBhY2thZ2UgfHwgcmV0dXJuCisgICAgZmkKKworICAgIGlm IHRlc3QgLWQgcnVudGltZS1wbzsgdGhlbgorICAgICAgdXBkYXRlX3BvX2ZpbGVzIHJ1bnRpbWUt cG8gJHBhY2thZ2UtcnVudGltZSB8fCByZXR1cm4KKyAgICBmaTs7CisgIGVzYWMKKworICAjIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorCisgIGJvb3RzdHJhcF9wb3N0X3B1bGxfaG9vayBcCisgICAgfHwg ZGllICJib290c3RyYXBfcG9zdF9wdWxsX2hvb2sgZmFpbGVkIgorCisgICMgRG9uJ3QgcHJvY2Vl ZCBpZiB0aGVyZSBhcmUgdW5pbml0aWFsaXplZCBzdWJtb2R1bGVzLiAgSW4gcGFydGljdWxhciwK KyAgIyBhdXRvZ2VuLnNoIHdpbGwgcmVtb3ZlIGRhbmdsaW5nIGxpbmtzLCB3aGljaCBtaWdodCBi ZSBsaW5rcyBpbnRvCisgICMgdW5pbml0aWFsaXplZCBzdWJtb2R1bGVzLgorICAjIEJ1dCBpdCdz IE9LIGlmIHRoZSAnZ251bGliJyBzdWJtb2R1bGUgaXMgdW5pbml0aWFsaXplZCwgYXMgbG9uZyBh cworICAjIEdOVUxJQl9TUkNESVIgaXMgc2V0LgorICBpZiAkdXNlX2dpdDsgdGhlbgorICAgICMg VW5pbml0aWFsaXplZCBzdWJtb2R1bGVzIGFyZSBsaXN0ZWQgd2l0aCBhbiBpbml0aWFsIGRhc2gu CisgICAgdW5pbml0aWFsaXplZD1gZ2l0IHN1Ym1vZHVsZSB8IGdyZXAgJ14tJyB8IGF3ayAneyBw cmludCAkMiB9J2AKKyAgICBpZiB0ZXN0IC1uICIkR05VTElCX1NSQ0RJUiI7IHRoZW4KKyAgICAg IHVuaW5pdGlhbGl6ZWQ9YGVjaG8gIiR1bmluaXRpYWxpemVkIiB8IGdyZXAgLXYgJ15nbnVsaWIk J2AKKyAgICBmaQorICAgIGlmIHRlc3QgLW4gIiR1bmluaXRpYWxpemVkIjsgdGhlbgorICAgICAg dW5pbml0X2NvbW1hPWBlY2hvICIkdW5pbml0aWFsaXplZCIgfCB0ciAnXG4nICcsJyB8IHNlZCAt ZSAnc3wsJHwufCdgCisgICAgICBkaWUgIlNvbWUgZ2l0IHN1Ym1vZHVsZXMgYXJlIG5vdCBpbml0 aWFsaXplZDogIiR1bmluaXRfY29tbWEgXAorICAgICAgICAgICJFaXRoZXIgdXNlIG9wdGlvbiAn LS1uby1naXQnLCIgXAorICAgICAgICAgICJvciBydW4gJ2dpdCBzdWJtb2R1bGUgdXBkYXRlIC0t aW5pdCcgYW5kIGJvb3RzdHJhcCBhZ2Fpbi4iCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0IC1m ICIkbWVkaXIiL2F1dG9nZW4uc2g7IHRoZW4KKyAgICBlY2hvICIkMDogZG9uZS4gIE5vdyB5b3Ug Y2FuIHJ1biAnJG1lZGlyL2F1dG9nZW4uc2gnLiIKKyAgZmkKK30KKworIyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSBHZXQgdHJhbnNsYXRpb25zLiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorCitkb3dubG9hZF9wb19maWxlcygpIHsKKyAgc3ViZGlyPSQxCisgIGRvbWFpbj0k MgorICBlY2hvICIkbWU6IGdldHRpbmcgdHJhbnNsYXRpb25zIGludG8gJHN1YmRpciBmb3IgJGRv bWFpbi4uLiIKKyAgY21kPSQocHJpbnRmICIkcG9fZG93bmxvYWRfY29tbWFuZF9mb3JtYXQiICIk c3ViZGlyIiAiJGRvbWFpbiIpCisgIGV2YWwgIiRjbWQiCit9CisKKyMgTWlycm9yIC5wbyBmaWxl cyB0byAkcG9fZGlyLy5yZWZlcmVuY2UgYW5kIGNvcHkgb25seSB0aGUgbmV3CisjIG9yIG1vZGlm aWVkIG9uZXMgaW50byAkcG9fZGlyLiAgQWxzbyB1cGRhdGUgJHBvX2Rpci9MSU5HVUFTLgorIyBO b3RlIHBvIGZpbGVzIHRoYXQgZXhpc3QgbG9jYWxseSBvbmx5IGFyZSBsZWZ0IGluICRwb19kaXIg YnV0IHdpbGwKKyMgbm90IGJlIGluY2x1ZGVkIGluIExJTkdVQVMgYW5kIGhlbmNlIHdpbGwgbm90 IGJlIGRpc3RyaWJ1dGVkLgordXBkYXRlX3BvX2ZpbGVzKCkgeworICAjIERpcmVjdG9yeSBjb250 YWluaW5nIHByaW1hcnkgLnBvIGZpbGVzLgorICAjIE92ZXJ3cml0ZSB0aGVtIG9ubHkgd2hlbiB3 ZSdyZSBzdXJlIGEgLnBvIGZpbGUgaXMgbmV3LgorICBwb19kaXI9JDEKKyAgZG9tYWluPSQyCisK KyAgIyBNaXJyb3IgKi5wbyBmaWxlcyBpbnRvIHRoaXMgZGlyLgorICAjIFVzdWFsbHkgY29udGFp bnMgKi5zMSBjaGVja3N1bSBmaWxlcy4KKyAgcmVmX3BvX2Rpcj0iJHBvX2Rpci8ucmVmZXJlbmNl IgorCisgIHRlc3QgLWQgJHJlZl9wb19kaXIgfHwgbWtkaXIgJHJlZl9wb19kaXIgfHwgcmV0dXJu CisgIGRvd25sb2FkX3BvX2ZpbGVzICRyZWZfcG9fZGlyICRkb21haW4gXAorICAgICYmIGxzICIk cmVmX3BvX2RpciIvKi5wbyAyPi9kZXYvbnVsbCB8CisgICAgICBzZWQgJ3N8LiovfHw7IHN8XC5w byR8fCcgPiAiJHBvX2Rpci9MSU5HVUFTIiB8fCByZXR1cm4KKworICBmb3IgcG8gaW4geCAkKGxz ICRyZWZfcG9fZGlyIHwgc2VkIC1uICdzL1wucG8kLy9wJyk7IGRvCisgICAgY2FzZSAkcG8gaW4g eCkgY29udGludWU7OyBlc2FjCisgICAgbmV3X3BvPSIkcmVmX3BvX2Rpci8kcG8ucG8iCisgICAg Y2tzdW1fZmlsZT0iJHJlZl9wb19kaXIvJHBvLnMxIgorICAgIGlmICEgdGVzdCAtZiAiJGNrc3Vt X2ZpbGUiIHx8CisgICAgICAgICEgdGVzdCAtZiAiJHBvX2Rpci8kcG8ucG8iIHx8CisgICAgICAg ICEgJFNIQTFTVU0gLWMgIiRja3N1bV9maWxlIiA8ICIkbmV3X3BvIiA+IC9kZXYvbnVsbCAyPiYx OyB0aGVuCisgICAgICBlY2hvICIkbWU6IHVwZGF0ZWQgJHBvX2Rpci8kcG8ucG8uLi4iCisgICAg ICBjcCAiJG5ld19wbyIgIiRwb19kaXIvJHBvLnBvIiBcCisgICAgICAgICAgJiYgJFNIQTFTVU0g PCAiJG5ld19wbyIgPiAiJGNrc3VtX2ZpbGUiIHx8IHJldHVybgorICAgIGZpCisgIGRvbmUKK30K KworIyAtLS0tLS0tLSBHZW5lcmF0ZSBmaWxlcyBhdXRvbWF0aWNhbGx5IGZyb20gZXhpc3Rpbmcg c291cmNlcy4gIC0tLS0tLS0tLS0tLS0tCisKK2F1dG9nZW5fdXNhZ2UoKSB7CisgIGNhdCA8PEVP RgorVXNhZ2U6ICRtZSBbT1BUSU9OXS4uLgorQm9vdHN0cmFwIHRoaXMgcGFja2FnZSBmcm9tIHRo ZSBjaGVja2VkLW91dCBzb3VyY2VzLCBwaGFzZSAyOgorR2VuZXJhdGUgZmlsZXMgZnJvbSBsb2Nh bCBmaWxlcyAobm8gbmV0d29yayBhY2Nlc3MpLgorCitPcHRpb25hbCBlbnZpcm9ubWVudCB2YXJp YWJsZXM6CisgIEdOVUxJQl9TUkNESVIgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxvY2FsIGRp cmVjdG9yeSB3aGVyZSBnbnVsaWIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMg cmVzaWRlLiAgVXNlIHRoaXMgaWYgeW91IGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIGhhdmUgZ251bGliIHNvdXJjZXMgb24geW91ciBtYWNoaW5lLCBhbmQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHVzZSB0aGVzZSBzb3VyY2VzLgorCitPcHRpb25z OgorICAtLWNvcHkgICAgICAgICAgICAgICAgICAgQ29weSBmaWxlcyBpbnN0ZWFkIG9mIGNyZWF0 aW5nIHN5bWJvbGljIGxpbmtzLgorICAtLWZvcmNlICAgICAgICAgICAgICAgICAgQXR0ZW1wdCB0 byBib290c3RyYXAgZXZlbiBpZiB0aGUgc291cmNlcyBzZWVtCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBub3QgdG8gaGF2ZSBiZWVuIGNoZWNrZWQgb3V0LgorRU9GCisgIGJvb3RzdHJhcF9w cmludF9vcHRpb25fdXNhZ2VfaG9vaworICBjYXQgPDxFT0YKK0lmIHRoZSBmaWxlIGJvb3RzdHJh cC5jb25mIGV4aXN0cyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhpcyBzY3JpcHQsIGl0cwor Y29udGVudHMgYXJlIHJlYWQgYXMgc2hlbGwgdmFyaWFibGVzIHRvIGNvbmZpZ3VyZSB0aGUgYm9v dHN0cmFwLgorCitGb3IgYnVpbGQgcHJlcmVxdWlzaXRlcywgZW52aXJvbm1lbnQgdmFyaWFibGVz IGxpa2UgXCRBVVRPQ09ORiBhbmQgXCRBTVRBUgorYXJlIGhvbm9yZWQuCisKK0dudWxpYiBzb3Vy Y2VzIGFyZSBhc3N1bWVkIHRvIGJlIHByZXNlbnQ6CisgICogaW4gXCRHTlVMSUJfU1JDRElSLCBp ZiB0aGF0IGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwKKyAgKiBvdGhlcndpc2UsIGluIHRo ZSAnZ251bGliJyBzdWJtb2R1bGUsIGlmIHN1Y2ggYSBzdWJtb2R1bGUgaXMgY29uZmlndXJlZCwK KyAgKiBvdGhlcndpc2UsIGluIHRoZSAnZ251bGliJyBzdWJkaXJlY3RvcnkuCisKK1J1bm5pbmcg d2l0aG91dCBhcmd1bWVudHMgd2lsbCBzdWZmaWNlIGluIG1vc3QgY2FzZXMuCitFT0YKK30KKwor Cit2ZXJzaW9uX2NvbnRyb2xsZWRfZmlsZSgpIHsKKyAgcGFyZW50PSQxCisgIGZpbGU9JDIKKyAg aWYgdGVzdCAtZCAuZ2l0OyB0aGVuCisgICAgZ2l0IHJtIC1uICIkZmlsZSIgPiAvZGV2L251bGwg Mj4mMQorICBlbGlmIHRlc3QgLWQgLnN2bjsgdGhlbgorICAgIHN2biBsb2cgLXIgSEVBRCAiJGZp bGUiID4gL2Rldi9udWxsIDI+JjEKKyAgZWxpZiB0ZXN0IC1kIENWUzsgdGhlbgorICAgIGdyZXAg LUYgIi8ke2ZpbGUjIyovfS8iICIkcGFyZW50L0NWUy9FbnRyaWVzIiAyPi9kZXYvbnVsbCB8Cisg ICAgICAgICAgICAgZ3JlcCAnXi9bXi9dKi9bMC05XScgPiAvZGV2L251bGwKKyAgZWxzZQorICAg IHdhcm5fICJubyB2ZXJzaW9uIGNvbnRyb2wgZm9yICRmaWxlPyIKKyAgICBmYWxzZQorICBmaQor fQorCisjIFN0cmlwIGJsYW5rIGFuZCBjb21tZW50IGxpbmVzIHRvIGxlYXZlIHNpZ25pZmljYW50 IGVudHJpZXMuCitnaXRpZ25vcmVfZW50cmllcygpIHsKKyAgc2VkICcvXiMvZDsgL14kL2QnICIk QCIKK30KKworIyBJZiAkU1RSIGlzIG5vdCBhbHJlYWR5IG9uIGEgbGluZSBieSBpdHNlbGYgaW4g JEZJTEUsIGluc2VydCBpdCBhdCB0aGUgc3RhcnQuCisjIEVudHJpZXMgYXJlIGluc2VydGVkIGF0 IHRoZSBzdGFydCBvZiB0aGUgaWdub3JlIGxpc3QgdG8gZW5zdXJlIGV4aXN0aW5nCisjIGVudHJp ZXMgc3RhcnRpbmcgd2l0aCAhIGFyZSBub3Qgb3ZlcnJpZGRlbi4gIFN1Y2ggZW50cmllcyBzdXBw b3J0CisjIHdoaXRlbGlzdGluZyBleGNlcHRpb25zIGFmdGVyIGEgbW9yZSBnZW5lcmljIGJsYWNr bGlzdCBwYXR0ZXJuLgoraW5zZXJ0X2lmX2Fic2VudCgpIHsKKyAgZmlsZT0kMQogICBzdHI9JDIK ICAgdGVzdCAtZiAkZmlsZSB8fCB0b3VjaCAkZmlsZQogICB0ZXN0IC1yICRmaWxlIHx8IGRpZSAi RXJyb3I6IGZhaWxlZCB0byByZWFkIGlnbm9yZSBmaWxlOiAkZmlsZSIKQEAgLTM3NCw3ICsxMDY0 LDcgQEAgc3ltbGlua190b19kaXIoKQogICAgICAgZm9yIGRvdF9pZyBpbiB4ICR2Y19pZ25vcmU7 IGRvCiAgICAgICAgIHRlc3QgJGRvdF9pZyA9IHggJiYgY29udGludWUKICAgICAgICAgaWc9JHBh cmVudC8kZG90X2lnCi0gICAgICAgIGluc2VydF92Y19pZ25vcmUgJGlnICIke2RzdF9kaXIjIyov fSIKKyAgICAgICAgaW5zZXJ0X3ZjX2lnbm9yZSAkaWcgIiR7ZHN0X2RpciMjKi99LyIKICAgICAg IGRvbmUKICAgICBmaQogCkBAIC00MjMsNjk2ICsxMTEzLDUxOCBAQCBzeW1saW5rX3RvX2Rpcigp CiAgIH0KIH0KIAotIyBPdmVycmlkZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBpZiBuZWNl c3NhcnkuCi0jIE1ha2Ugc3VyZSB0aGF0IGJvb3RzdHJhcC5jb25mIGlzIHNvdXJjZWQgZnJvbSB0 aGUgY3VycmVudCBkaXJlY3RvcnkKLSMgaWYgd2Ugd2VyZSBpbnZva2VkIGFzICJzaCBib290c3Ry YXAiLgotY2FzZSAiJDAiIGluCi0gICovKikgdGVzdCAtciAiJDAuY29uZiIgJiYgLiAiJDAuY29u ZiIgOzsKLSAgKikgdGVzdCAtciAiJDAuY29uZiIgJiYgLiAuLyIkMC5jb25mIiA7OwotZXNhYwot Ci1pZiB0ZXN0ICIkdmNfaWdub3JlIiA9IGF1dG87IHRoZW4KLSAgdmNfaWdub3JlPQotICB0ZXN0 IC1kIC5naXQgJiYgdmNfaWdub3JlPS5naXRpZ25vcmUKLSAgdGVzdCAtZCBDVlMgJiYgdmNfaWdu b3JlPSIkdmNfaWdub3JlIC5jdnNpZ25vcmUiCi1maQorIyBSZWdlbmVyYXRlIGFsbCBhdXRvZ2Vu ZXJhdGFibGUgZmlsZXMgdGhhdCBhcmUgb21pdHRlZCBmcm9tIHRoZQorIyB2ZXJzaW9uIGNvbnRy b2wgcmVwb3NpdG9yeS4gIEluIHBhcnRpY3VsYXIsIHJlZ2VuZXJhdGUgYWxsCisjIGFjbG9jYWwu bTQsIGNvbmZpZy5oLmluLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlIGZpbGVzIHdpdGggbmV3Cisj IHZlcnNpb25zIG9mIGF1dG9jb25mIG9yIGF1dG9tYWtlLgorYXV0b2dlbigpCit7CisgICMgRW5z dXJlIHRoYXQgQ0RQQVRIIGlzIG5vdCBzZXQuICBPdGhlcndpc2UsIHRoZSBvdXRwdXQgZnJvbSBj ZAorICAjIHdvdWxkIGNhdXNlIHRyb3VibGUgaW4gYXQgbGVhc3Qgb25lIHVzZSBiZWxvdy4KKyAg KHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisgICMgRW52 aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgbWF5IGJlIHNldCBieSB0aGUgdXNlci4KKyAgOiAiJHtB VVRPUE9JTlQ9YXV0b3BvaW50fSIKKyAgOiAiJHtBVVRPUkVDT05GPWF1dG9yZWNvbmZ9IgorCisg IGlmIHRlc3QgIiR2Y19pZ25vcmUiID0gYXV0bzsgdGhlbgorICAgIHZjX2lnbm9yZT0KKyAgICB0 ZXN0IC1kIC5naXQgJiYgdmNfaWdub3JlPS5naXRpZ25vcmUKKyAgICB0ZXN0IC1kIENWUyAmJiB2 Y19pZ25vcmU9IiR2Y19pZ25vcmUgLmN2c2lnbm9yZSIKKyAgZmkKIAotaWYgdGVzdCB4IiRnbnVs aWJfbW9kdWxlcyRnbnVsaWJfZmlsZXMkZ251bGliX2V4dHJhX2ZpbGVzIiA9IHg7IHRoZW4KLSAg dXNlX2dudWxpYj1mYWxzZQotZWxzZQotICB1c2VfZ251bGliPXRydWUKLWZpCiAKLSMgVHJhbnNs YXRlIGNvbmZpZ3VyYXRpb24gaW50byBpbnRlcm5hbCBmb3JtLgorICAjIFBhcnNlIG9wdGlvbnMu CisKKyAgIyBXaGV0aGVyIHRvIHVzZSBjb3BpZXMgaW5zdGVhZCBvZiBzeW1saW5rcy4KKyAgY29w eT1mYWxzZQorCisgIGZvciBvcHRpb24KKyAgZG8KKyAgICBjYXNlICRvcHRpb24gaW4KKyAgICAt LWhlbHApCisgICAgICBhdXRvZ2VuX3VzYWdlCisgICAgICByZXR1cm47OworICAgIC0tdmVyc2lv bikKKyAgICAgIHNldCAtZQorICAgICAgZWNobyAiYXV0b2dlbi5zaCAkc2NyaXB0bGlidmVyc2lv biIKKyAgICAgIGVjaG8gIiRjb3B5cmlnaHQiCisgICAgICByZXR1cm4gMAorICAgICAgOzsKKyAg ICAtLWZvcmNlKQorICAgICAgY2hlY2tvdXRfb25seV9maWxlPTs7CisgICAgLS1jb3B5KQorICAg ICAgY29weT10cnVlOzsKKyAgICAqKQorICAgICAgYm9vdHN0cmFwX29wdGlvbl9ob29rICRvcHRp b24gfHwgZGllICIkb3B0aW9uOiB1bmtub3duIG9wdGlvbiI7OworICAgIGVzYWMKKyAgZG9uZQog Ci0jIFBhcnNlIG9wdGlvbnMuCisgIHRlc3QgLXogIiRHTlVMSUJfU1JDRElSIiB8fCB0ZXN0IC1k ICIkR05VTElCX1NSQ0RJUiIgXAorICAgIHx8IGRpZSAiRXJyb3I6IFwkR05VTElCX1NSQ0RJUiBl bnZpcm9ubWVudCB2YXJpYWJsZSBvciAtLWdudWxpYi1zcmNkaXIiIFwKKyAgICAgICAgICAgIm9w dGlvbiBpcyBzcGVjaWZpZWQsIGJ1dCBkb2VzIG5vdCBkZW5vdGUgYSBkaXJlY3RvcnkiCiAKLWZv ciBvcHRpb24KLWRvCi0gIGNhc2UgJG9wdGlvbiBpbgotICAtLWhlbHApCi0gICAgdXNhZ2UKLSAg ICBleGl0OzsKLSAgLS12ZXJzaW9uKQotICAgIHNldCAtZQotICAgIGVjaG8gImJvb3RzdHJhcCAk c2NyaXB0dmVyc2lvbiIKLSAgICBlY2hvICIkY29weXJpZ2h0IgotICAgIGV4aXQgMAotICAgIDs7 Ci0gIC0tZ251bGliLXNyY2Rpcj0qKQotICAgIEdOVUxJQl9TUkNESVI9JHtvcHRpb24jLS1nbnVs aWItc3JjZGlyPX07OwotICAtLXNraXAtcG8pCi0gICAgU0tJUF9QTz10OzsKLSAgLS1mb3JjZSkK LSAgICBjaGVja291dF9vbmx5X2ZpbGU9OzsKLSAgLS1jb3B5KQotICAgIGNvcHk9dHJ1ZTs7Ci0g IC0tYm9vdHN0cmFwLXN5bmMpCi0gICAgYm9vdHN0cmFwX3N5bmM9dHJ1ZTs7Ci0gIC0tbm8tYm9v dHN0cmFwLXN5bmMpCi0gICAgYm9vdHN0cmFwX3N5bmM9ZmFsc2U7OwotICAtLW5vLWdpdCkKLSAg ICB1c2VfZ2l0PWZhbHNlOzsKLSAgKikKLSAgICBib290c3RyYXBfb3B0aW9uX2hvb2sgJG9wdGlv biB8fCBkaWUgIiRvcHRpb246IHVua25vd24gb3B0aW9uIjs7Ci0gIGVzYWMKLWRvbmUKKyAgaWYg dGVzdCAtbiAiJGNoZWNrb3V0X29ubHlfZmlsZSIgJiYgdGVzdCAhIC1yICIkY2hlY2tvdXRfb25s eV9maWxlIjsgdGhlbgorICAgIGRpZSAiUnVubmluZyB0aGlzIHNjcmlwdCBmcm9tIGEgbm9uLWNo ZWNrZWQtb3V0IGRpc3RyaWJ1dGlvbiBpcyByaXNreS4iCisgIGZpCiAKLSR1c2VfZ2l0IHx8IHRl c3QgLWQgIiRHTlVMSUJfU1JDRElSIiBcCi0gIHx8IGRpZSAiRXJyb3I6IC0tbm8tZ2l0IHJlcXVp cmVzIC0tZ251bGliLXNyY2RpciIKKyAgaWYgJHVzZV9nbnVsaWI7IHRoZW4KKyAgICBpZiB0ZXN0 IC16ICIkR05VTElCX1NSQ0RJUiI7IHRoZW4KKyAgICAgIGdudWxpYl9wYXRoPSQodGVzdCAtZiAu Z2l0bW9kdWxlcyAmJgorICAgICAgICAgICAgICAgICAgICBnaXQgY29uZmlnIC0tZmlsZSAuZ2l0 bW9kdWxlcyBzdWJtb2R1bGUuZ251bGliLnBhdGgpCisgICAgICB0ZXN0IC16ICIkZ251bGliX3Bh dGgiICYmIGdudWxpYl9wYXRoPWdudWxpYgorICAgICAgR05VTElCX1NSQ0RJUj0kZ251bGliX3Bh dGgKKyAgICBmaQorICBmaQogCi1pZiB0ZXN0IC1uICIkY2hlY2tvdXRfb25seV9maWxlIiAmJiB0 ZXN0ICEgLXIgIiRjaGVja291dF9vbmx5X2ZpbGUiOyB0aGVuCi0gIGRpZSAiQm9vdHN0cmFwcGlu ZyBmcm9tIGEgbm9uLWNoZWNrZWQtb3V0IGRpc3RyaWJ1dGlvbiBpcyByaXNreS4iCi1maQorICAj IERpZSBpZiB0aGVyZSBpcyBubyBBQ19DT05GSUdfQVVYX0RJUigkYnVpbGRfYXV4KSBsaW5lIGlu IGNvbmZpZ3VyZS5hYy4KKyAgZm91bmRfYXV4X2Rpcj1ubworICBncmVwICdeWwkgXSpBQ19DT05G SUdfQVVYX0RJUihcWyciJGJ1aWxkX2F1eCInXSknIGNvbmZpZ3VyZS5hYyBcCisgICAgICA+L2Rl di9udWxsICYmIGZvdW5kX2F1eF9kaXI9eWVzCisgIGdyZXAgJ15bCSBdKkFDX0NPTkZJR19BVVhf RElSKCciJGJ1aWxkX2F1eCInKScgY29uZmlndXJlLmFjIFwKKyAgICAgID4vZGV2L251bGwgJiYg Zm91bmRfYXV4X2Rpcj15ZXMKKyAgdGVzdCAkZm91bmRfYXV4X2RpciA9IHllcyBcCisgICAgfHwg ZGllICJjb25maWd1cmUuYWMgbGFja3MgJ0FDX0NPTkZJR19BVVhfRElSKFskYnVpbGRfYXV4XSkn OyBhZGQgaXQiCisKKyAgIyBJZiAkYnVpbGRfYXV4IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdCBu b3csIG90aGVyd2lzZSBzb21lIGJpdHMKKyAgIyBiZWxvdyB3aWxsIG1hbGZ1bmN0aW9uLiAgSWYg Y3JlYXRpbmcgaXQsIGFsc28gbWFyayBpdCBhcyBpZ25vcmVkLgorICBpZiB0ZXN0ICEgLWQgJGJ1 aWxkX2F1eDsgdGhlbgorICAgIG1rZGlyICRidWlsZF9hdXgKKyAgICBmb3IgZG90X2lnIGluIHgg JHZjX2lnbm9yZTsgZG8KKyAgICAgIHRlc3QgJGRvdF9pZyA9IHggJiYgY29udGludWUKKyAgICAg IGluc2VydF92Y19pZ25vcmUgJGRvdF9pZyAkYnVpbGRfYXV4LworICAgIGRvbmUKKyAgZmkKIAot IyBEaWUgaWYgdGhlcmUgaXMgbm8gQUNfQ09ORklHX0FVWF9ESVIoJGJ1aWxkX2F1eCkgbGluZSBp biBjb25maWd1cmUuYWMuCi1mb3VuZF9hdXhfZGlyPW5vCi1ncmVwICdeWwkgXSpBQ19DT05GSUdf QVVYX0RJUihcWyciJGJ1aWxkX2F1eCInXF0pJyBjb25maWd1cmUuYWMgXAotICAgID4vZGV2L251 bGwgJiYgZm91bmRfYXV4X2Rpcj15ZXMKLWdyZXAgJ15bCSBdKkFDX0NPTkZJR19BVVhfRElSKCci JGJ1aWxkX2F1eCInKScgY29uZmlndXJlLmFjIFwKLSAgICA+L2Rldi9udWxsICYmIGZvdW5kX2F1 eF9kaXI9eWVzCi10ZXN0ICRmb3VuZF9hdXhfZGlyID0geWVzIFwKLSAgfHwgZGllICJjb25maWd1 cmUuYWMgbGFja3MgJ0FDX0NPTkZJR19BVVhfRElSKFskYnVpbGRfYXV4XSknOyBhZGQgaXQiCi0K LSMgSWYgJGJ1aWxkX2F1eCBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXQgbm93LCBvdGhlcndpc2Ug c29tZSBiaXRzCi0jIGJlbG93IHdpbGwgbWFsZnVuY3Rpb24uICBJZiBjcmVhdGluZyBpdCwgYWxz byBtYXJrIGl0IGFzIGlnbm9yZWQuCi1pZiB0ZXN0ICEgLWQgJGJ1aWxkX2F1eDsgdGhlbgotICBt a2RpciAkYnVpbGRfYXV4Ci0gIGZvciBkb3RfaWcgaW4geCAkdmNfaWdub3JlOyBkbwotICAgIHRl c3QgJGRvdF9pZyA9IHggJiYgY29udGludWUKLSAgICBpbnNlcnRfdmNfaWdub3JlICRkb3RfaWcg JGJ1aWxkX2F1eAotICBkb25lCi1maQorICBjaGVja19idWlsZF9wcmVyZXF1aXNpdGVzIGZhbHNl CiAKLSMgTm90ZSB0aGlzIGRldmlhdGVzIGZyb20gdGhlIHZlcnNpb24gY29tcGFyaXNvbiBpbiBh dXRvbWFrZQotIyBpbiB0aGF0IGl0IHRyZWF0cyAxLjUgPCAxLjUuMCwgYW5kIHRyZWF0cyAxLjQu NGEgPCAxLjQtcDNhCi0jIGJ1dCB0aGlzIHNob3VsZCBzdWZmaWNlIGFzIHdlIHdvbid0IGJlIHNw ZWNpZnlpbmcgb2xkCi0jIHZlcnNpb24gZm9ybWF0cyBvciByZWR1bmRhbnQgdHJhaWxpbmcgLjAg aW4gYm9vdHN0cmFwLmNvbmYuCi0jIElmIHdlIGRpZCB3YW50IGZ1bGwgY29tcGF0aWJpbGl0eSB0 aGVuIHdlIHNob3VsZCBwcm9iYWJseQotIyB1c2UgbTRfdmVyc2lvbl9jb21wYXJlIGZyb20gYXV0 b2NvbmYuCi1zb3J0X3ZlcigpIHsgIyBzb3J0IC1WIGlzIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxl Ci0gIHZlcjE9IiQxIgotICB2ZXIyPSIkMiIKLQotICAjIHNwbGl0IG9uICcuJyBhbmQgY29tcGFy ZSBlYWNoIGNvbXBvbmVudAotICBpPTEKLSAgd2hpbGUgOiA7IGRvCi0gICAgcDE9JChlY2hvICIk dmVyMSIgfCBjdXQgLWQuIC1mJGkpCi0gICAgcDI9JChlY2hvICIkdmVyMiIgfCBjdXQgLWQuIC1m JGkpCi0gICAgaWYgWyAhICIkcDEiIF07IHRoZW4KLSAgICAgIGVjaG8gIiQxICQyIgotICAgICAg YnJlYWsKLSAgICBlbGlmIFsgISAiJHAyIiBdOyB0aGVuCi0gICAgICBlY2hvICIkMiAkMSIKLSAg ICAgIGJyZWFrCi0gICAgZWxpZiBbICEgIiRwMSIgPSAiJHAyIiBdOyB0aGVuCi0gICAgICBpZiBb ICIkcDEiIC1ndCAiJHAyIiBdIDI+L2Rldi9udWxsOyB0aGVuICMgbnVtZXJpYyBjb21wYXJpc29u Ci0gICAgICAgIGVjaG8gIiQyICQxIgotICAgICAgZWxpZiBbICIkcDIiIC1ndCAiJHAxIiBdIDI+ L2Rldi9udWxsOyB0aGVuICMgbnVtZXJpYyBjb21wYXJpc29uCi0gICAgICAgIGVjaG8gIiQxICQy IgotICAgICAgZWxzZSAjIG51bWVyaWMsIHRoZW4gbGV4aWNvZ3JhcGhpYyBjb21wYXJpc29uCi0g ICAgICAgIGxwPSQocHJpbnRmICIkcDFcbiRwMlxuIiB8IExBTkc9QyBzb3J0IC1uIHwgdGFpbCAt bjEpCi0gICAgICAgIGlmIFsgIiRscCIgPSAiJHAyIiBdOyB0aGVuCi0gICAgICAgICAgZWNobyAi JDEgJDIiCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBlY2hvICIkMiAkMSIKLSAgICAgICAgZmkK LSAgICAgIGZpCi0gICAgICBicmVhawotICAgIGZpCi0gICAgaT0kKCgkaSsxKSkKLSAgZG9uZQot fQotCi1nZXRfdmVyc2lvbl9zZWQ9JwotIyBNb3ZlIHZlcnNpb24gdG8gc3RhcnQgb2YgbGluZS4K LXMvLipbdiBdXChbMC05XVwpL1wxLwotCi0jIFNraXAgbGluZXMgdGhhdCBkbyBub3Qgc3RhcnQg d2l0aCB2ZXJzaW9uLgotL15bMC05XS8hZAotCi0jIFJlbW92ZSBjaGFyYWN0ZXJzIGFmdGVyIHRo ZSB2ZXJzaW9uLgotcy9bXi5hLXowLTktXS4qLy8KKyAgdXNlX2xpYnRvb2w9MAorICAjIFdlJ2Qg bGlrZSB0byB1c2UgZ3JlcCAtRSwgdG8gc2VlIGlmIGFueSBvZiBMVF9JTklULAorICAjIEFDX1BS T0dfTElCVE9PTCwgQU1fUFJPR19MSUJUT09MIGlzIHVzZWQgaW4gY29uZmlndXJlLmFjLAorICAj IGJ1dCB0aGF0J3Mgbm90IHBvcnRhYmxlIGVub3VnaCAoZS5nLiwgZm9yIFNvbGFyaXMpLgorICBn cmVwICdeWwkgXSpBW0NNXV9QUk9HX0xJQlRPT0wnIGNvbmZpZ3VyZS5hYyA+L2Rldi9udWxsIFwK KyAgICAmJiB1c2VfbGlidG9vbD0xCisgIGdyZXAgJ15bCSBdKkxUX0lOSVQnIGNvbmZpZ3VyZS5h YyA+L2Rldi9udWxsIFwKKyAgICAmJiB1c2VfbGlidG9vbD0xCisgIGlmIHRlc3QgJHVzZV9saWJ0 b29sID0gMTsgdGhlbgorICAgIGZpbmRfdG9vbCBMSUJUT09MSVpFIGdsaWJ0b29saXplIGxpYnRv b2xpemUKKyAgZmkKIAotIyBUaGUgZmlyc3QgY29tcG9uZW50IG11c3QgYmUgZGlnaXRzIG9ubHku Ci1zL15cKFswLTldKlwpW2Etei1dLiovXDEvCisgIGlmICR1c2VfZ251bGliOyB0aGVuCisgICAg Z251bGliX3Rvb2w9JEdOVUxJQl9TUkNESVIvZ251bGliLXRvb2wKKyAgICA8JGdudWxpYl90b29s IHx8IHJldHVybgorICBmaQogCi0jdGhlIGZvbGxvd2luZyBlc3NlbnRpYWxseSBkb2VzIHMvNS4w MDUvNS41Lwotcy9cLjAqXChbMS05XVwpLy5cMS9nCi1wCi1xJworICAjIE5PVEU6IHdlIGhhdmUg dG8gYmUgY2FyZWZ1bCB0byBydW4gYm90aCBhdXRvcG9pbnQgYW5kIGxpYnRvb2xpemUKKyAgIyBi ZWZvcmUgZ251bGliLXRvb2wsIHNpbmNlIGdudWxpYi10b29sIGlzIGxpa2VseSB0byBwcm92aWRl IG5ld2VyCisgICMgdmVyc2lvbnMgb2YgZmlsZXMgImluc3RhbGxlZCIgYnkgdGhlc2UgdHdvIHBy b2dyYW1zLgorICAjIFRoZW4sICphZnRlciogZ251bGliLXRvb2wgKHNlZSBiZWxvdyksIHdlIGhh dmUgdG8gYmUgY2FyZWZ1bCB0bworICAjIHJ1biBhdXRvcmVjb25mIGluIHN1Y2ggYSB3YXkgdGhh dCBpdCBkb2VzIG5vdCBydW4gZWl0aGVyIG9mIHRoZXNlCisgICMgdHdvIGp1c3QtcHJlLXJ1biBw cm9ncmFtcy4KIAotZ2V0X3ZlcnNpb24oKSB7Ci0gIGFwcD0kMQorICAjIEltcG9ydCBmcm9tIGdl dHRleHQuCisgIHdpdGhfZ2V0dGV4dD15ZXMKKyAgZ3JlcCAnXlsJIF0qQU1fR05VX0dFVFRFWFRf VkVSU0lPTignIGNvbmZpZ3VyZS5hYyA+L2Rldi9udWxsIHx8IFwKKyAgICAgIHdpdGhfZ2V0dGV4 dD1ubwogCi0gICRhcHAgLS12ZXJzaW9uID4vZGV2L251bGwgMj4mMSB8fCB7ICRhcHAgLS12ZXJz aW9uOyByZXR1cm4gMTsgfQorICBpZiB0ZXN0ICR3aXRoX2dldHRleHQgPSB5ZXMgfHwgdGVzdCAk dXNlX2xpYnRvb2wgPSAxOyB0aGVuCiAKLSAgJGFwcCAtLXZlcnNpb24gMj4mMSB8IHNlZCAtbiAi JGdldF92ZXJzaW9uX3NlZCIKLX0KKyAgICB0ZW1wYmFzZT0uYm9vdHN0cmFwJCQKKyAgICB0cmFw ICJybSAtZiAkdGVtcGJhc2UuMCAkdGVtcGJhc2UuMSIgSFVQIElOVCBQSVBFIFRFUk0KIAotY2hl Y2tfdmVyc2lvbnMoKSB7Ci0gIHJldD0wCisgICAgPiAkdGVtcGJhc2UuMCA+ICR0ZW1wYmFzZS4x ICYmCisgICAgZmluZCAuICEgLXR5cGUgZCAtcHJpbnQgfCBzb3J0ID4gJHRlbXBiYXNlLjAgfHwg cmV0dXJuCiAKLSAgd2hpbGUgcmVhZCBhcHAgcmVxX3ZlcjsgZG8KLSAgICAjIFdlIG9ubHkgbmVl ZCBsaWJ0b29saXplIGZyb20gdGhlIGxpYnRvb2wgcGFja2FnZS4KLSAgICBpZiB0ZXN0ICIkYXBw IiA9IGxpYnRvb2w7IHRoZW4KLSAgICAgIGFwcD1saWJ0b29saXplCisgICAgaWYgdGVzdCAkd2l0 aF9nZXR0ZXh0ID0geWVzOyB0aGVuCisgICAgICAjIFJlbGVhc2VkIGF1dG9wb2ludCBoYXMgdGhl IHRlbmRlbmN5IHRvIGluc3RhbGwgbWFjcm9zIHRoYXQgaGF2ZSBiZWVuCisgICAgICAjIG9ic29s ZXRlZCBpbiBjdXJyZW50IGdudWxpYiwgc28gcnVuIHRoaXMgYmVmb3JlIGdudWxpYi10b29sLgor ICAgICAgZWNobyAiJDA6ICRBVVRPUE9JTlQgLS1mb3JjZSIKKyAgICAgICRBVVRPUE9JTlQgLS1m b3JjZSB8fCByZXR1cm4KICAgICBmaQotICAgICMgRXhlbXB0IGdpdCBpZiAtLW5vLWdpdCBpcyBp biBlZmZlY3QuCi0gICAgaWYgdGVzdCAiJGFwcCIgPSBnaXQ7IHRoZW4KLSAgICAgICR1c2VfZ2l0 IHx8IGNvbnRpbnVlCi0gICAgZmkKLSAgICAjIEhvbm9yICRBUFAgdmFyaWFibGVzICgkVEFSLCAk QVVUT0NPTkYsIGV0Yy4pCi0gICAgYXBwdmFyPSQoZWNobyAkYXBwIHwgTENfQUxMPUMgdHIgJ1th LXpdLScgJ1tBLVpdXycpCi0gICAgdGVzdCAiJGFwcHZhciIgPSBUQVIgJiYgYXBwdmFyPUFNVEFS Ci0gICAgY2FzZSAkYXBwdmFyIGluCi0gICAgICAgIEdaSVApIDs7ICMgRG8gbm90IHVzZSAkR1pJ UDogIGl0IGNvbnRhaW5zIGd6aXAgb3B0aW9ucy4KLSAgICAgICAgUEVSTDo6KikgOzsgIyBLZWVw IHBlcmwgbW9kdWxlcyBhcy1pcwotICAgICAgICAqKSBldmFsICJhcHA9XCR7JGFwcHZhci0kYXBw fSIgOzsKLSAgICBlc2FjCiAKLSAgICAjIEhhbmRsZSB0aGUgc3RpbGwtZXhwZXJpbWVudGFsIEF1 dG9tYWtlLU5HIHByb2dyYW1zIHNwZWNpYWxseS4KLSAgICAjIFRoZXkgcmVtYWluIG5hbWVkIGFz IHRoZSBtYWluc3RyZWFtIEF1dG9tYWtlIHByb2dyYW1zICgiYXV0b21ha2UiLAotICAgICMgYW5k ICJhY2xvY2FsIikgdG8gYXZvaWQgZ3JhdHVpdG91cyBpbmNvbXBhdGliaWxpdGllcyB3aXRoCi0g ICAgIyBwcmUtZXhpc3RpbmcgdXNhZ2VzIChieSwgc2F5LCBhdXRvcmVjb25mLCBvciBjdXN0b20g YXV0b2dlbi5zaAotICAgICMgc2NyaXB0cyksIGJ1dCBjb3JyZWN0bHkgaWRlbnRpZnkgdGhlbXNl bHZlcyAoYXMgYmVpbmcgcGFydCBvZgotICAgICMgIkdOVSBhdXRvbWFrZS1uZyIpIHdoZW4gYXNr ZWQgdGhlaXIgdmVyc2lvbi4KLSAgICBjYXNlICRhcHAgaW4KLSAgICAgIGF1dG9tYWtlLW5nfGFj bG9jYWwtbmcpCi0gICAgICAgIGFwcD0ke2FwcCUtbmd9Ci0gICAgICAgICgkYXBwIC0tdmVyc2lv biB8IGdyZXAgJyhHTlUgYXV0b21ha2UtbmcpJykgPi9kZXYvbnVsbCAyPiYxIHx8IHsKLSAgICAg ICAgICB3YXJuXyAiRXJyb3I6ICckYXBwJyBub3QgZm91bmQgb3Igbm90IGZyb20gQXV0b21ha2Ut TkciCi0gICAgICAgICAgcmV0PTEKLSAgICAgICAgICBjb250aW51ZQotICAgICAgICB9IDs7Ci0g ICAgICAjIEFub3RoZXIgY2hlY2sgaXMgZm9yIHBlcmwgbW9kdWxlcy4gIFRoZXNlIGNhbiBiZSB3 cml0dGVuIGFzCi0gICAgICAjIGUuZy4gcGVybDo6WE1MOjpYUGF0aCBpbiBjYXNlIG9mIFhNTDo6 WFBhdGggbW9kdWxlLCBldGMuCi0gICAgICBwZXJsOjoqKQotICAgICAgICAjIEV4dHJhY3QgbW9k dWxlIG5hbWUKLSAgICAgICAgYXBwPSIke2FwcCNwZXJsOjp9IgotICAgICAgICBpZiAhICRQRVJM IC1tIiRhcHAiIC1lICdleGl0IDAnID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgICAgIHdh cm5fICJFcnJvcjogcGVybCBtb2R1bGUgJyRhcHAnIG5vdCBmb3VuZCIKLSAgICAgICAgICByZXQ9 MQotICAgICAgICBmaQotICAgICAgICBjb250aW51ZQotICAgICAgICA7OwotICAgIGVzYWMKLSAg ICBpZiBbICIkcmVxX3ZlciIgPSAiLSIgXTsgdGhlbgotICAgICAgIyBNZXJlbHkgcmVxdWlyZSBh cHAgdG8gZXhpc3Q7IG5vdCBhbGwgcHJlcmVxIGFwcHMgYXJlIHdlbGwtYmVoYXZlZAotICAgICAg IyBzbyB3ZSBoYXZlIHRvIHJlbHkgb24gJD8gcmF0aGVyIHRoYW4gZ2V0X3ZlcnNpb24uCi0gICAg ICBpZiAhIGNoZWNrX2V4aXN0cyAtLXZlcmJvc2UgJGFwcDsgdGhlbgotICAgICAgICB3YXJuXyAi RXJyb3I6ICckYXBwJyBub3QgZm91bmQiCi0gICAgICAgIHJldD0xCi0gICAgICBmaQotICAgIGVs c2UKLSAgICAgICMgUmVxdWlyZSBhcHAgdG8gcHJvZHVjZSBhIG5ldyBlbm91Z2ggdmVyc2lvbiBz dHJpbmcuCi0gICAgICBpbnN0X3Zlcj0kKGdldF92ZXJzaW9uICRhcHApCi0gICAgICBpZiBbICEg IiRpbnN0X3ZlciIgXTsgdGhlbgotICAgICAgICB3YXJuXyAiRXJyb3I6ICckYXBwJyBub3QgZm91 bmQiCi0gICAgICAgIHJldD0xCi0gICAgICBlbHNlCi0gICAgICAgIGxhdGVzdF92ZXI9JChzb3J0 X3ZlciAkcmVxX3ZlciAkaW5zdF92ZXIgfCBjdXQgLWQnICcgLWYyKQotICAgICAgICBpZiBbICEg IiRsYXRlc3RfdmVyIiA9ICIkaW5zdF92ZXIiIF07IHRoZW4KLSAgICAgICAgICB3YXJuZl8gJyVz XG4nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg ICAgIkVycm9yOiAnJGFwcCcgdmVyc2lvbiA9PSAkaW5zdF92ZXIgaXMgdG9vIG9sZCIgIFwKLSAg ICAgICAgICAgICAgIiAgICAgICAnJGFwcCcgdmVyc2lvbiA+PSAkcmVxX3ZlciBpcyByZXF1aXJl ZCIKLSAgICAgICAgICByZXQ9MQotICAgICAgICBmaQotICAgICAgZmkKKyAgICAjIEF1dG9yZWNv bmYgcnVucyBhY2xvY2FsIGJlZm9yZSBsaWJ0b29saXplLCB3aGljaCBjYXVzZXMgc3B1cmlvdXMK KyAgICAjIHdhcm5pbmdzIGlmIHRoZSBpbml0aWFsIGFjbG9jYWwgaXMgY29uZnVzZWQgYnkgdGhl IGxpYnRvb2xpemVkCisgICAgIyAob3Igd29yc2Ugb3V0LW9mLWRhdGUpIG1hY3JvIGRpcmVjdG9y eS4KKyAgICAjIGxpYnRvb2xpemUgMS45YiBhZGRlZCB0aGUgLS1pbnN0YWxsIG9wdGlvbjsgYnV0 IHdlIHN1cHBvcnQgYmFjaworICAgICMgdG8gbGlidG9vbGl6ZSAxLjUuMjIsIHdoZXJlIHRoZSBp bnN0YWxsIGFjdGlvbiB3YXMgZGVmYXVsdC4KKyAgICBpZiB0ZXN0ICR1c2VfbGlidG9vbCA9IDE7 IHRoZW4KKyAgICAgIGluc3RhbGw9CisgICAgICBjYXNlICQoJExJQlRPT0xJWkUgLS1oZWxwKSBp bgorICAgICAgICAqLS1pbnN0YWxsKikgaW5zdGFsbD0tLWluc3RhbGwgOzsKKyAgICAgIGVzYWMK KyAgICAgIGVjaG8gInJ1bm5pbmc6ICRMSUJUT09MSVpFICRpbnN0YWxsIC0tY29weSIKKyAgICAg ICRMSUJUT09MSVpFICRpbnN0YWxsIC0tY29weQogICAgIGZpCi0gIGRvbmUKLQotICByZXR1cm4g JHJldAotfQotCi1wcmludF92ZXJzaW9ucygpIHsKLSAgZWNobyAiUHJvZ3JhbSAgICBNaW5fdmVy c2lvbiIKLSAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKLSAgcHJpbnRmICVzICIkYnVp bGRyZXEiCi0gIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0gICMgY2FuJ3QgZGVwZW5k IG9uIGNvbHVtbiAtdAotfQotCi0jIEZpbmQgc2hhMXN1bSwgbmFtZWQgZ3NoYTFzdW0gb24gTWFj UG9ydHMsIHNoYXN1bSBvbiBNYWMgT1MgWCAxMC42LgotIyBBbHNvIGZpbmQgdGhlIGNvbXBhdGli bGUgc2hhMSB1dGlsaXR5IG9uIHRoZSBCU0RzCi1pZiB0ZXN0IHgiJFNLSVBfUE8iID0geDsgdGhl bgotICBmaW5kX3Rvb2wgU0hBMVNVTSBzaGExc3VtIGdzaGExc3VtIHNoYXN1bSBzaGExCi1maQot Ci11c2VfbGlidG9vbD0wCi0jIFdlJ2QgbGlrZSB0byB1c2UgZ3JlcCAtRSwgdG8gc2VlIGlmIGFu eSBvZiBMVF9JTklULAotIyBBQ19QUk9HX0xJQlRPT0wsIEFNX1BST0dfTElCVE9PTCBpcyB1c2Vk IGluIGNvbmZpZ3VyZS5hYywKLSMgYnV0IHRoYXQncyBub3QgcG9ydGFibGUgZW5vdWdoIChlLmcu LCBmb3IgU29sYXJpcykuCi1ncmVwICdeWwkgXSpBW0NNXV9QUk9HX0xJQlRPT0wnIGNvbmZpZ3Vy ZS5hYyA+L2Rldi9udWxsIFwKLSAgJiYgdXNlX2xpYnRvb2w9MQotZ3JlcCAnXlsJIF0qTFRfSU5J VCcgY29uZmlndXJlLmFjID4vZGV2L251bGwgXAotICAmJiB1c2VfbGlidG9vbD0xCi1pZiB0ZXN0 ICR1c2VfbGlidG9vbCA9IDE7IHRoZW4KLSAgZmluZF90b29sIExJQlRPT0xJWkUgZ2xpYnRvb2xp emUgbGlidG9vbGl6ZQotZmkKLQotIyBnbnVsaWItdG9vbCByZXF1aXJlcyBhdCBsZWFzdCBhdXRv bWFrZSBhbmQgYXV0b2NvbmYuCi0jIElmIGVpdGhlciBpcyBub3QgbGlzdGVkLCBhZGQgaXQgKHdp dGggbWluaW11bSB2ZXJzaW9uKSBhcyBhIHByZXJlcXVpc2l0ZS4KLWNhc2UgJGJ1aWxkcmVxIGlu Ci0gICphdXRvbWFrZSopIDs7Ci0gICopIGJ1aWxkcmVxPSJhdXRvbWFrZSAxLjkKLSRidWlsZHJl cSIgOzsKLWVzYWMKLWNhc2UgJGJ1aWxkcmVxIGluCi0gICphdXRvY29uZiopIDs7Ci0gICopIGJ1 aWxkcmVxPSJhdXRvY29uZiAyLjU5Ci0kYnVpbGRyZXEiIDs7Ci1lc2FjCiAKLSMgV2hlbiB3ZSBj YW4gZGVkdWNlIHRoYXQgZ251bGliLXRvb2wgd2lsbCByZXF1aXJlIHBhdGNoLAotIyBhbmQgd2hl biBwYXRjaCBpcyBub3QgYWxyZWFkeSBsaXN0ZWQgYXMgYSBwcmVyZXF1aXNpdGUsIGFkZCBpdCwg dG9vLgotaWYgdGVzdCAtZCAiJGxvY2FsX2dsX2RpciIgXAotICAgICYmICEgZmluZCAiJGxvY2Fs X2dsX2RpciIgLW5hbWUgJyouZGlmZicgLWV4ZWMgZmFsc2Uge30gKzsgdGhlbgotICBjYXNlICRi dWlsZHJlcSBpbgotICAgICpwYXRjaCopIDs7Ci0gICAgKikgYnVpbGRyZXE9InBhdGNoIC0KLSRi dWlsZHJlcSIgOzsKLSAgZXNhYwotZmkKKyAgICBmaW5kIC4gISAtdHlwZSBkIC1wcmludCB8IHNv cnQgPiR0ZW1wYmFzZS4xCisgICAgb2xkX0lGUz0kSUZTCisgICAgSUZTPSRubAorICAgIGZvciBm aWxlIGluICQoY29tbSAtMTMgJHRlbXBiYXNlLjAgJHRlbXBiYXNlLjEpOyBkbworICAgICAgSUZT PSRvbGRfSUZTCisgICAgICBwYXJlbnQ9JHtmaWxlJS8qfQorICAgICAgdmVyc2lvbl9jb250cm9s bGVkX2ZpbGUgIiRwYXJlbnQiICIkZmlsZSIgfHwgeworICAgICAgICBmb3IgZG90X2lnIGluIHgg JHZjX2lnbm9yZTsgZG8KKyAgICAgICAgICB0ZXN0ICRkb3RfaWcgPSB4ICYmIGNvbnRpbnVlCisg ICAgICAgICAgaWc9JHBhcmVudC8kZG90X2lnCisgICAgICAgICAgaW5zZXJ0X3ZjX2lnbm9yZSAi JGlnIiAiJHtmaWxlIyMqL30iCisgICAgICAgIGRvbmUKKyAgICAgIH0KKyAgICBkb25lCisgICAg SUZTPSRvbGRfSUZTCiAKLWlmICEgcHJpbnRmICIkYnVpbGRyZXEiIHwgY2hlY2tfdmVyc2lvbnM7 IHRoZW4KLSAgZWNobyA+JjIKLSAgaWYgdGVzdCAtZiBSRUFETUUtcHJlcmVxOyB0aGVuCi0gICAg ZGllICJTZWUgUkVBRE1FLXByZXJlcSBmb3IgaG93IHRvIGdldCB0aGUgcHJlcmVxdWlzaXRlIHBy b2dyYW1zIgotICBlbHNlCi0gICAgZGllICJQbGVhc2UgaW5zdGFsbCB0aGUgcHJlcmVxdWlzaXRl IHByb2dyYW1zIgorICAgIHJtIC1mICR0ZW1wYmFzZS4wICR0ZW1wYmFzZS4xCisgICAgdHJhcCAt IEhVUCBJTlQgUElQRSBURVJNCiAgIGZpCi1maQotCi0jIFdhcm4gdGhlIHVzZXIgaWYgYXV0b200 dGUgYXBwZWFycyB0byBiZSBicm9rZW47IHRoaXMgY2F1c2VzIGtub3duCi0jIGlzc3VlcyB3aXRo IGF0IGxlYXN0IGdldHRleHQgMC4xOC4zLgotcHJvYmU9JChlY2hvICdtNF9xdW90ZShbaGldKScg fCBhdXRvbTR0ZSAtbCBNNHN1Z2FyIC10ICdtNF9xdW90ZTokJScgLSkKLWlmIHRlc3QgIngkcHJv YmUiICE9IHhoaTsgdGhlbgotICB3YXJuXyAiV0FSTklORzogeW91ciBhdXRvbTR0ZSB3cmFwcGVy IGVhdHMgc3RkaW47IgotICB3YXJuXyAiaWYgYm9vdHN0cmFwIGZhaWxzLCBjb25zaWRlciB1cGdy YWRpbmcgeW91ciBhdXRvdG9vbHMiCi1maQogCi1lY2hvICIkMDogQm9vdHN0cmFwcGluZyBmcm9t IGNoZWNrZWQtb3V0ICRwYWNrYWdlIHNvdXJjZXMuLi4iCisgICMgSW1wb3J0IGZyb20gZ251bGli LgorCisgIGlmICR1c2VfZ251bGliOyB0aGVuCisgICAgZ251bGliX3Rvb2xfb3B0aW9ucz0iXAor ICAgICAtLW5vLWNoYW5nZWxvZ1wKKyAgICAgLS1hdXgtZGlyPSRidWlsZF9hdXhcCisgICAgIC0t ZG9jLWJhc2U9JGRvY19iYXNlXAorICAgICAtLWxpYj0kZ251bGliX25hbWVcCisgICAgIC0tbTQt YmFzZT0kbTRfYmFzZS9cCisgICAgIC0tc291cmNlLWJhc2U9JHNvdXJjZV9iYXNlL1wKKyAgICAg LS10ZXN0cy1iYXNlPSR0ZXN0c19iYXNlXAorICAgICAtLWxvY2FsLWRpcj0kbG9jYWxfZ2xfZGly XAorICAgICAkZ251bGliX3Rvb2xfb3B0aW9uX2V4dHJhc1wKKyAgICAiCisgICAgaWYgdGVzdCAk dXNlX2xpYnRvb2wgPSAxOyB0aGVuCisgICAgICBjYXNlICIkZ251bGliX3Rvb2xfb3B0aW9ucyAi IGluCisgICAgICAgIConIC0tbGlidG9vbCAnKikgOzsKKyAgICAgICAgKikgZ251bGliX3Rvb2xf b3B0aW9ucz0iJGdudWxpYl90b29sX29wdGlvbnMgLS1saWJ0b29sIiA7OworICAgICAgZXNhYwor ICAgIGZpCisgICAgZWNobyAiJDA6ICRnbnVsaWJfdG9vbCAkZ251bGliX3Rvb2xfb3B0aW9ucyAt LWltcG9ydCAuLi4iCisgICAgJGdudWxpYl90b29sICRnbnVsaWJfdG9vbF9vcHRpb25zIC0taW1w b3J0ICRnbnVsaWJfbW9kdWxlcyBcCisgICAgICB8fCBkaWUgImdudWxpYi10b29sIGZhaWxlZCIK KworICAgIGlmIHRlc3QgJHdpdGhfZ2V0dGV4dCA9IHllcyAmJiB0ZXN0ICEgLWYgJG00X2Jhc2Uv Z2V0dGV4dC5tNDsgdGhlbgorICAgICAgIyBUaGUgZ251bGliLXRvb2wgaW52b2NhdGlvbiBoYXMg cmVtb3ZlZCAkbTRfYmFzZS9nZXR0ZXh0Lm00LCB0aGF0IHRoZQorICAgICAgIyBBVVRPUE9JTlQg aW52b2NhdGlvbiBoYWQgaW5zdGFsbGVkLiBUaGlzIGNhbiBvY2N1ciB3aGVuIHRoZSBnbnVsaWIK KyAgICAgICMgbW9kdWxlICdnZXR0ZXh0JyB3YXMgcHJldmlvdXNseSBwcmVzZW50IGJ1dCBpcyBu b3cgbm90IHByZXNlbnQgYW55IG1vcmUuCisgICAgICAjIFJlcGVhdCB0aGUgQVVUT1BPSU5UIGlu dm9jYXRpb24gYW5kIHRoZSBnbnVsaWItdG9vbCBpbnZvY2F0aW9uLgorCisgICAgICBlY2hvICIk MDogJEFVVE9QT0lOVCAtLWZvcmNlIgorICAgICAgJEFVVE9QT0lOVCAtLWZvcmNlIHx8IHJldHVy bgorCisgICAgICBlY2hvICIkMDogJGdudWxpYl90b29sICRnbnVsaWJfdG9vbF9vcHRpb25zIC0t aW1wb3J0IC4uLiIKKyAgICAgICRnbnVsaWJfdG9vbCAkZ251bGliX3Rvb2xfb3B0aW9ucyAtLWlt cG9ydCAkZ251bGliX21vZHVsZXMgXAorICAgICAgICB8fCBkaWUgImdudWxpYi10b29sIGZhaWxl ZCIKKyAgICBmaQogCi0jIFNlZSBpZiB3ZSBjYW4gdXNlIGdudWxpYidzIGdpdC1tZXJnZS1jaGFu Z2Vsb2cgbWVyZ2UgZHJpdmVyLgotaWYgJHVzZV9naXQgJiYgdGVzdCAtZCAuZ2l0ICYmIGNoZWNr X2V4aXN0cyBnaXQ7IHRoZW4KLSAgaWYgZ2l0IGNvbmZpZyBtZXJnZS5tZXJnZS1jaGFuZ2Vsb2cu ZHJpdmVyID4vZGV2L251bGwgOyB0aGVuCi0gICAgOgotICBlbGlmIGNoZWNrX2V4aXN0cyBnaXQt bWVyZ2UtY2hhbmdlbG9nOyB0aGVuCi0gICAgZWNobyAiJDA6IGluaXRpYWxpemluZyBnaXQtbWVy Z2UtY2hhbmdlbG9nIGRyaXZlciIKLSAgICBnaXQgY29uZmlnIG1lcmdlLm1lcmdlLWNoYW5nZWxv Zy5uYW1lICdHTlUtc3R5bGUgQ2hhbmdlTG9nIG1lcmdlIGRyaXZlcicKLSAgICBnaXQgY29uZmln IG1lcmdlLm1lcmdlLWNoYW5nZWxvZy5kcml2ZXIgJ2dpdC1tZXJnZS1jaGFuZ2Vsb2cgJU8gJUEg JUInCi0gIGVsc2UKLSAgICBlY2hvICIkMDogY29uc2lkZXIgaW5zdGFsbGluZyBnaXQtbWVyZ2Ut Y2hhbmdlbG9nIGZyb20gZ251bGliIgorICAgIGZvciBmaWxlIGluICRnbnVsaWJfZmlsZXM7IGRv CisgICAgICBzeW1saW5rX3RvX2RpciAiJEdOVUxJQl9TUkNESVIiICRmaWxlIFwKKyAgICAgICAg fHwgZGllICJmYWlsZWQgdG8gc3ltbGluayAkZmlsZSIKKyAgICBkb25lCiAgIGZpCi1maQogCisg IGJvb3RzdHJhcF9wb3N0X2ltcG9ydF9ob29rIFwKKyAgICB8fCBkaWUgImJvb3RzdHJhcF9wb3N0 X2ltcG9ydF9ob29rIGZhaWxlZCIKKworICAjIFJlbW92ZSBhbnkgZGFuZ2xpbmcgc3ltbGluayBt YXRjaGluZyAiKi5tNCIgb3IgIiouW2NoXSIgaW4gc29tZQorICAjIGdudWxpYi1wb3B1bGF0ZWQg ZGlyZWN0b3JpZXMuICBTdWNoIC5tNCBmaWxlcyB3b3VsZCBjYXVzZSBhY2xvY2FsIHRvIGZhaWwu CisgICMgVGhlIGZvbGxvd2luZyByZXF1aXJlcyBHTlUgZmluZCA0LjIuMyBvciBuZXdlci4gIENv bnNpZGVyaW5nIHRoZSB1c3VhbAorICAjIHBvcnRhYmlsaXR5IGNvbnN0cmFpbnRzIG9mIHRoaXMg c2NyaXB0LCB0aGF0IG1heSBzZWVtIGEgdmVyeSBkZW1hbmRpbmcKKyAgIyByZXF1aXJlbWVudCwg YnV0IGl0IHNob3VsZCBiZSBvay4gIElnbm9yZSBhbnkgZmFpbHVyZSwgd2hpY2ggaXMgZmluZSwK KyAgIyBzaW5jZSB0aGlzIGlzIG9ubHkgYSBjb252ZW5pZW5jZSB0byBoZWxwIGRldmVsb3BlcnMg YXZvaWQgdGhlIHJlbGF0aXZlbHkKKyAgIyB1bnVzdWFsIGNhc2UgaW4gd2hpY2ggYSBzeW1saW5r ZWQtdG8gLm00IGZpbGUgaXMgZ2l0LXJlbW92ZWQgZnJvbSBnbnVsaWIKKyAgIyBiZXR3ZWVuIHN1 Y2Nlc3NpdmUgcnVucyBvZiB0aGlzIHNjcmlwdC4KKyAgZmluZCAiJG00X2Jhc2UiICIkc291cmNl X2Jhc2UiIFwKKyAgICAtZGVwdGggXCggLW5hbWUgJyoubTQnIC1vIC1uYW1lICcqLltjaF0nIFwp IFwKKyAgICAtdHlwZSBsIC14dHlwZSBsIC1kZWxldGUgPiAvZGV2L251bGwgMj4mMQorCisgICMg SW52b2tlIGF1dG9yZWNvbmYgd2l0aCAtLWZvcmNlIC0taW5zdGFsbCB0byBlbnN1cmUgdXBncmFk ZXMgb2YgdG9vbHMKKyAgIyBzdWNoIGFzIHlsd3JhcC4KKyAgQVVUT1JFQ09ORkZMQUdTPSItLXZl cmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgJEFDTE9DQUxfRkxBR1MiCisgIEFVVE9SRUNPTkZGTEFH Uz0iJEFVVE9SRUNPTkZGTEFHUyAtLW5vLXJlY3Vyc2l2ZSIKKworICAjIFRlbGwgYXV0b3JlY29u ZiBub3QgdG8gaW52b2tlIGF1dG9wb2ludCBvciBsaWJ0b29saXplOyB0aGV5IHdlcmUgcnVuIGFi b3ZlLgorICBlY2hvICJydW5uaW5nOiBBVVRPUE9JTlQ9dHJ1ZSBMSUJUT09MSVpFPXRydWUgJEFV VE9SRUNPTkYgJEFVVE9SRUNPTkZGTEFHUyIKKyAgQVVUT1BPSU5UPXRydWUgTElCVE9PTElaRT10 cnVlICRBVVRPUkVDT05GICRBVVRPUkVDT05GRkxBR1MgXAorICAgIHx8IGRpZSAiYXV0b3JlY29u ZiBmYWlsZWQiCisKKyAgIyBHZXQgc29tZSBleHRyYSBmaWxlcyBmcm9tIGdudWxpYiwgb3ZlcnJp ZGluZyBleGlzdGluZyBmaWxlcy4KKyAgZm9yIGZpbGUgaW4gJGdudWxpYl9leHRyYV9maWxlczsg ZG8KKyAgICBjYXNlICRmaWxlIGluCisgICAgICAqL0lOU1RBTEwpIGRzdD1JTlNUQUxMOzsKKyAg ICAgIGJ1aWxkLWF1eC8qKSBkc3Q9JGJ1aWxkX2F1eC8ke2ZpbGUjYnVpbGQtYXV4L307OworICAg ICAgKikgZHN0PSRmaWxlOzsKKyAgICBlc2FjCisgICAgc3ltbGlua190b19kaXIgIiRHTlVMSUJf U1JDRElSIiAkZmlsZSAkZHN0IFwKKyAgICAgIHx8IGRpZSAiZmFpbGVkIHRvIHN5bWxpbmsgJGZp bGUiCisgIGRvbmUKIAotY2xlYW51cF9nbnVsaWIoKSB7Ci0gIHN0YXR1cz0kPwotICBybSAtZnIg IiRnbnVsaWJfcGF0aCIKLSAgZXhpdCAkc3RhdHVzCi19CisgIGlmIHRlc3QgJHdpdGhfZ2V0dGV4 dCA9IHllczsgdGhlbgorICAgICMgQ3JlYXRlIGdldHRleHQgY29uZmlndXJhdGlvbi4KKyAgICBl Y2hvICIkMDogQ3JlYXRpbmcgcG8vTWFrZXZhcnMgZnJvbSBwby9NYWtldmFycy50ZW1wbGF0ZSAu Li4iCisgICAgcm0gLWYgcG8vTWFrZXZhcnMKKyAgICBzZWQgJworICAgICAgL15FWFRSQV9MT0NB TEVfQ0FURUdPUklFUyAqPS9zLz0uKi89ICciJEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTIicvCisg ICAgICAvXkNPUFlSSUdIVF9IT0xERVIgKj0vcy89LiovPSAnIiRDT1BZUklHSFRfSE9MREVSIicv CisgICAgICAvXk1TR0lEX0JVR1NfQUREUkVTUyAqPS9zfD0uKnw9ICciJE1TR0lEX0JVR1NfQURE UkVTUyInfAorICAgICAgL15YR0VUVEVYVF9PUFRJT05TICo9L3sKKyAgICAgICAgcy8kLyBcXC8K KyAgICAgICAgYVwKKyAgICAgICAgICAgICciJFhHRVRURVhUX09QVElPTlMiJyAkJHtlbmRfb2Zf eGdldHRleHRfb3B0aW9ucyt9CisgICAgICB9CisgICAgJyBwby9NYWtldmFycy50ZW1wbGF0ZSA+ cG8vTWFrZXZhcnMgXAorICAgICAgfHwgZGllICdjYW5ub3QgZ2VuZXJhdGUgcG8vTWFrZXZhcnMn CisKKyAgICAjIElmIHRoZSAnZ2V0dGV4dCcgbW9kdWxlIGlzIGluIHVzZSwgZ3JhYiB0aGUgbGF0 ZXN0IE1ha2VmaWxlLmluLmluLgorICAgICMgSWYgb25seSB0aGUgJ2dldHRleHQtaCcgbW9kdWxl IGlzIGluIHVzZSwgYXNzdW1lIGF1dG9wb2ludCBhbHJlYWR5CisgICAgIyBwdXQgdGhlIGNvcnJl Y3QgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaW50byBwbGFjZS4KKyAgICBjYXNlICRnbnVsaWJfbW9k dWxlcyBpbgorICAgICAgKmdldHRleHQtaCopIDs7CisgICAgICAqZ2V0dGV4dCopCisgICAgICAg IGNwICRHTlVMSUJfU1JDRElSL2J1aWxkLWF1eC9wby9NYWtlZmlsZS5pbi5pbiBwby9NYWtlZmls ZS5pbi5pbiBcCisgICAgICAgICAgfHwgZGllICJjYW5ub3QgY3JlYXRlIHBvL01ha2VmaWxlLmlu LmluIgorICAgICAgICA7OworICAgIGVzYWMKIAotZ2l0X21vZHVsZXNfY29uZmlnICgpIHsKLSAg dGVzdCAtZiAuZ2l0bW9kdWxlcyAmJiBnaXQgY29uZmlnIC0tZmlsZSAuZ2l0bW9kdWxlcyAiJEAi Ci19CisgICAgaWYgdGVzdCAtZCBydW50aW1lLXBvOyB0aGVuCisgICAgICAjIFNpbWlsYXJseSBm b3IgcnVudGltZS1wby9NYWtldmFycywgYnV0IG5vdCBxdWl0ZSB0aGUgc2FtZS4KKyAgICAgIHJt IC1mIHJ1bnRpbWUtcG8vTWFrZXZhcnMKKyAgICAgIHNlZCAnCisgICAgICAgIC9eRE9NQUlOICo9 Liovcy89LiovPSAnIiRwYWNrYWdlIictcnVudGltZS8KKyAgICAgICAgL15zdWJkaXIgKj0uKi9z Lz0uKi89IHJ1bnRpbWUtcG8vCisgICAgICAgIC9eTVNHSURfQlVHU19BRERSRVNTICo9L3MvPS4q Lz0gYnVnLSciJHBhY2thZ2UiJ0BnbnUub3JnLworICAgICAgICAvXlhHRVRURVhUX09QVElPTlMg Kj0veworICAgICAgICAgIHMvJC8gXFwvCisgICAgICAgICAgYVwKKyAgICAgICAgICAgICAgJyIk WEdFVFRFWFRfT1BUSU9OU19SVU5USU1FIicgJCR7ZW5kX29mX3hnZXR0ZXh0X29wdGlvbnMrfQor ICAgICAgICB9CisgICAgICAnIHBvL01ha2V2YXJzLnRlbXBsYXRlID5ydW50aW1lLXBvL01ha2V2 YXJzIFwKKyAgICAgIHx8IGRpZSAnY2Fubm90IGdlbmVyYXRlIHJ1bnRpbWUtcG8vTWFrZXZhcnMn CiAKLWlmICR1c2VfZ251bGliOyB0aGVuCi0gIGlmICR1c2VfZ2l0OyB0aGVuCi0gICAgZ251bGli X3BhdGg9JChnaXRfbW9kdWxlc19jb25maWcgc3VibW9kdWxlLmdudWxpYi5wYXRoKQotICAgIHRl c3QgLXogIiRnbnVsaWJfcGF0aCIgJiYgZ251bGliX3BhdGg9Z251bGliCisgICAgICAjIENvcHkg aWRlbnRpY2FsIGZpbGVzIGZyb20gcG8gdG8gcnVudGltZS1wby4KKyAgICAgIGNwIC1wIHBvL01h a2VmaWxlLmluLmluIHBvLyotcXVvdCBwby8qLmhlYWRlciBwby8qLnNlZCBwby8qLnNpbiBydW50 aW1lLXBvCisgICAgZmkKICAgZmkKIAotICAjIEdldCBnbnVsaWIgZmlsZXMuICBQb3B1bGF0ZSAk R05VTElCX1NSQ0RJUiwgcG9zc2libHkgdXBkYXRpbmcgYQotICAjIHN1Ym1vZHVsZSwgZm9yIHVz ZSBpbiB0aGUgcmVzdCBvZiB0aGUgc2NyaXB0LgotCi0gIGNhc2UgJHtHTlVMSUJfU1JDRElSLS19 IGluCi0gIC0pCi0gICAgIyBOb3RlIHRoYXQgJHVzZV9naXQgaXMgbmVjZXNzYXJpbHkgdHJ1ZSBp biB0aGlzIGNhc2UuCi0gICAgaWYgZ2l0X21vZHVsZXNfY29uZmlnIHN1Ym1vZHVsZS5nbnVsaWIu dXJsID4vZGV2L251bGw7IHRoZW4KLSAgICAgIGVjaG8gIiQwOiBnZXR0aW5nIGdudWxpYiBmaWxl cy4uLiIKLSAgICAgIGdpdCBzdWJtb2R1bGUgaW5pdCAtLSAiJGdudWxpYl9wYXRoIiB8fCBleGl0 ICQ/Ci0gICAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLSAiJGdudWxpYl9wYXRoIiB8fCBleGl0 ICQ/Ci0KLSAgICBlbGlmIFsgISAtZCAiJGdudWxpYl9wYXRoIiBdOyB0aGVuCi0gICAgICBlY2hv ICIkMDogZ2V0dGluZyBnbnVsaWIgZmlsZXMuLi4iCi0KLSAgICAgIHRyYXAgY2xlYW51cF9nbnVs aWIgMSAyIDEzIDE1Ci0KLSAgICAgIHNoYWxsb3c9Ci0gICAgICBpZiB0ZXN0IC16ICIkR05VTElC X1JFVklTSU9OIjsgdGhlbgotICAgICAgICBnaXQgY2xvbmUgLWggMj4mMSB8IGdyZXAgLS0gLS1k ZXB0aCA+IC9kZXYvbnVsbCAmJiBzaGFsbG93PSctLWRlcHRoIDInCi0gICAgICAgIGdpdCBjbG9u ZSAkc2hhbGxvdyAke0dOVUxJQl9VUkw6LSRkZWZhdWx0X2dudWxpYl91cmx9ICIkZ251bGliX3Bh dGgiIFwKLSAgICAgICAgICB8fCBjbGVhbnVwX2dudWxpYgotICAgICAgZWxzZQotICAgICAgICBn aXQgZmV0Y2ggLWggMj4mMSB8IGdyZXAgLS0gLS1kZXB0aCA+IC9kZXYvbnVsbCAmJiBzaGFsbG93 PSctLWRlcHRoIDInCi0gICAgICAgIG1rZGlyIC1wICIkZ251bGliX3BhdGgiCi0gICAgICAgICMg T25seSB3YW50IGEgc2hhbGxvdyBjaGVja291dCBvZiAkR05VTElCX1JFVklTSU9OLCBidXQgZ2l0 IGRvZXMgbm90Ci0gICAgICAgICMgc3VwcG9ydCBjbG9uaW5nIGJ5IGNvbW1pdCBoYXNoLiBTbyBh dHRlbXB0IGEgc2hhbGxvdyBmZXRjaCBieSBjb21taXQKLSAgICAgICAgIyBoYXNoIHRvIG1pbmlt aXplIHRoZSBhbW91bnQgb2YgZGF0YSBkb3dubG9hZGVkIGFuZCBjaGFuZ2VzIG5lZWRlZCB0bwot ICAgICAgICAjIGJlIHByb2Nlc3NlZCwgd2hpY2ggY2FuIGRyYXN0aWNhbGx5IHJlZHVjZSBkb3du bG9hZCBhbmQgcHJvY2Vzc2luZwotICAgICAgICAjIHRpbWUgZm9yIGNoZWNrb3V0LiBJZiB0aGUg ZmV0Y2ggYnkgY29tbWl0IGZhaWxzLCBhIHNoYWxsb3cgZmV0Y2ggY2FuCi0gICAgICAgICMgbm90 IGJlIHBlcmZvcm1lZCBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IHdoYXQgdGhlIGRlcHRoIG9mIHRo ZSBjb21taXQKLSAgICAgICAgIyBpcyB3aXRob3V0IGZldGNoaW5nIGFsbCBjb21taXRzLiBTbyBm YWxsYmFjayB0byBmZXRjaGluZyBhbGwgY29tbWl0cy4KLSAgICAgICAgZ2l0IC1DICIkZ251bGli X3BhdGgiIGluaXQKLSAgICAgICAgZ2l0IC1DICIkZ251bGliX3BhdGgiIHJlbW90ZSBhZGQgb3Jp Z2luICR7R05VTElCX1VSTDotJGRlZmF1bHRfZ251bGliX3VybH0KLSAgICAgICAgZ2l0IC1DICIk Z251bGliX3BhdGgiIGZldGNoICRzaGFsbG93IG9yaWdpbiAiJEdOVUxJQl9SRVZJU0lPTiIgXAot ICAgICAgICAgIHx8IGdpdCAtQyAiJGdudWxpYl9wYXRoIiBmZXRjaCBvcmlnaW4gXAotICAgICAg ICAgIHx8IGNsZWFudXBfZ251bGliCi0gICAgICAgIGdpdCAtQyAiJGdudWxpYl9wYXRoIiByZXNl dCAtLWhhcmQgRkVUQ0hfSEVBRAotICAgICAgZmkKKyAgYm9vdHN0cmFwX2VwaWxvZ3VlCiAKLSAg ICAgIHRyYXAgLSAxIDIgMTMgMTUKLSAgICBmaQotICAgIEdOVUxJQl9TUkNESVI9JGdudWxpYl9w YXRoCi0gICAgOzsKLSAgKikKLSAgICAjIFVzZSBHTlVMSUJfU1JDRElSIGRpcmVjdGx5IG9yIGFz IGEgcmVmZXJlbmNlLgotICAgIGlmICR1c2VfZ2l0ICYmIHRlc3QgLWQgIiRHTlVMSUJfU1JDRElS Ii8uZ2l0ICYmIFwKLSAgICAgICAgICBnaXRfbW9kdWxlc19jb25maWcgc3VibW9kdWxlLmdudWxp Yi51cmwgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgZWNobyAiJDA6IGdldHRpbmcgZ251bGliIGZp bGVzLi4uIgotICAgICAgaWYgZ2l0IHN1Ym1vZHVsZSAtaHxncmVwIC0tIC0tcmVmZXJlbmNlID4g L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICMgUHJlZmVyIHRoZSBvbmUtbGluZXIgYXZhaWxhYmxl IGluIGdpdCAxLjYuNCBvciBuZXdlci4KLSAgICAgICAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1p bml0IC0tcmVmZXJlbmNlICIkR05VTElCX1NSQ0RJUiIgXAotICAgICAgICAgICIkZ251bGliX3Bh dGgiIHx8IGV4aXQgJD8KLSAgICAgIGVsc2UKLSAgICAgICAgIyBUaGlzIGZhbGxiYWNrIGFsbG93 cyBhdCBsZWFzdCBnaXQgMS41LjUuCi0gICAgICAgIGlmIHRlc3QgLWYgIiRnbnVsaWJfcGF0aCIv Z251bGliLXRvb2w7IHRoZW4KLSAgICAgICAgICAjIFNpbmNlIGZpbGUgYWxyZWFkeSBleGlzdHMs IGFzc3VtZSBzdWJtb2R1bGUgaW5pdCBhbHJlYWR5IGNvbXBsZXRlLgotICAgICAgICAgIGdpdCBz dWJtb2R1bGUgdXBkYXRlIC0tICIkZ251bGliX3BhdGgiIHx8IGV4aXQgJD8KLSAgICAgICAgZWxz ZQotICAgICAgICAgICMgT2xkZXIgZ2l0IGNhbid0IGNsb25lIGludG8gYW4gZW1wdHkgZGlyZWN0 b3J5LgotICAgICAgICAgIHJtZGlyICIkZ251bGliX3BhdGgiIDI+L2Rldi9udWxsCi0gICAgICAg ICAgZ2l0IGNsb25lIC0tcmVmZXJlbmNlICIkR05VTElCX1NSQ0RJUiIgXAotICAgICAgICAgICAg IiQoZ2l0X21vZHVsZXNfY29uZmlnIHN1Ym1vZHVsZS5nbnVsaWIudXJsKSIgIiRnbnVsaWJfcGF0 aCIgXAotICAgICAgICAgICAgJiYgZ2l0IHN1Ym1vZHVsZSBpbml0IC0tICIkZ251bGliX3BhdGgi IFwKLSAgICAgICAgICAgICYmIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tICIkZ251bGliX3BhdGgi IFwKLSAgICAgICAgICAgIHx8IGV4aXQgJD8KLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgICBH TlVMSUJfU1JDRElSPSRnbnVsaWJfcGF0aAotICAgIGZpCi0gICAgOzsKLSAgZXNhYworICBlY2hv ICIkMDogZG9uZS4gIE5vdyB5b3UgY2FuIHJ1biAnLi9jb25maWd1cmUnLiIKK30KIAotICBpZiB0 ZXN0IC1kICIkR05VTElCX1NSQ0RJUiIvLmdpdCAmJiB0ZXN0IC1uICIkR05VTElCX1JFVklTSU9O IiBcCi0gICAgICYmICEgZ2l0X21vZHVsZXNfY29uZmlnIHN1Ym1vZHVsZS5nbnVsaWIudXJsID4v ZGV2L251bGw7IHRoZW4KLSAgICAoY2QgIiRHTlVMSUJfU1JDRElSIiAmJiBnaXQgY2hlY2tvdXQg IiRHTlVMSUJfUkVWSVNJT04iKSB8fCBjbGVhbnVwX2dudWxpYgotICBmaQorIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAKLSAgIyAkR05VTElCX1NSQ0RJUiBub3cgcG9pbnRzIHRvIHRoZSB2ZXJzaW9u IG9mIGdudWxpYiB0byB1c2UsIGFuZAotICAjIHdlIG5vIGxvbmdlciBuZWVkIHRvIHVzZSBnaXQg b3IgJGdudWxpYl9wYXRoIGJlbG93IGhlcmUuCisjIExvY2FsIFZhcmlhYmxlczoKKyMgZXZhbDog KGFkZC1ob29rICdiZWZvcmUtc2F2ZS1ob29rICd0aW1lLXN0YW1wIG5pbCB0KQorIyB0aW1lLXN0 YW1wLXN0YXJ0OiAic2NyaXB0bGlidmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJVkt JTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDMCIKKyMgdGltZS1z dGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CiAKLSAgaWYgJGJvb3RzdHJhcF9zeW5jOyB0aGVu Ci0gICAgY21wIC1zICIkMCIgIiRHTlVMSUJfU1JDRElSL2J1aWxkLWF1eC9ib290c3RyYXAiIHx8 IHsKLSAgICAgIGVjaG8gIiQwOiB1cGRhdGluZyBib290c3RyYXAgYW5kIHJlc3RhcnRpbmcuLi4i Ci0gICAgICBjYXNlICQoc2ggLWMgJ2VjaG8gIiQxIicgLS0gYSkgaW4KLSAgICAgICAgYSkgaWdu b3JlZD0tLTs7Ci0gICAgICAgICopIGlnbm9yZWQ9aWdub3JlZDs7Ci0gICAgICBlc2FjCi0gICAg ICBleGVjIHNoIC1jIFwKLSAgICAgICAgJ2NwICIkMSIgIiQyIiAmJiBzaGlmdCAmJiBleGVjICIk e0NPTkZJR19TSEVMTC0vYmluL3NofSIgIiRAIicgXAotICAgICAgICAkaWdub3JlZCAiJEdOVUxJ Ql9TUkNESVIvYnVpbGQtYXV4L2Jvb3RzdHJhcCIgXAotICAgICAgICAiJDAiICIkQCIgLS1uby1i b290c3RyYXAtc3luYwotICAgIH0KLSAgZmkKK3VzYWdlKCkgeworICBjYXQgPDxFT0YKK1VzYWdl OiAkbWUgW09QVElPTl0uLi4KK0Jvb3RzdHJhcCB0aGlzIHBhY2thZ2UgZnJvbSB0aGUgY2hlY2tl ZC1vdXQgc291cmNlcy4KIAotICBnbnVsaWJfdG9vbD0kR05VTElCX1NSQ0RJUi9nbnVsaWItdG9v bAotICA8JGdudWxpYl90b29sIHx8IGV4aXQgJD8KLWZpCitPcHRpb25hbCBlbnZpcm9ubWVudCB2 YXJpYWJsZXM6CisgIEdOVUxJQl9TUkNESVIgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxvY2Fs IGRpcmVjdG9yeSB3aGVyZSBnbnVsaWIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJj ZXMgcmVzaWRlLiAgVXNlIHRoaXMgaWYgeW91IGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIGhhdmUgZ251bGliIHNvdXJjZXMgb24geW91ciBtYWNoaW5lLCBhbmQKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHVzZSB0aGVzZSBzb3VyY2VzLgorICBHTlVM SUJfUkVGRElSICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsb2NhbCBkaXJlY3Rvcnkgd2hlcmUg YSBnbnVsaWIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgKHdpdGggYSAu Z2l0IHN1YmRpcmVjdG9yeSkgcmVzaWRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVz ZSB0aGlzIGlmIHlvdSBhbHJlYWR5IGhhdmUgZ251bGliIHNvdXJjZXMKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFuZCBoaXN0b3J5IG9uIHlvdXIgbWFjaGluZSwgYW5kIGRvIG5vdCB3YW50 CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB3YXN0ZSB5b3VyIGJhbmR3aWR0aCBkb3du bG9hZGluZyB0aGVtIGFnYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSB1c2Vk IGZvciBwaGFzZSAxICgtLXB1bGwpLgorICBHTlVMSUJfVVJMICAgICAgICAgICAgICAgVVJMIG9m IHRoZSBnbnVsaWIgcmVwb3NpdG9yeS4gIFRoZSBkZWZhdWx0IGlzCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAkZGVmYXVsdF9nbnVsaWJfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2hpY2ggaXMgR251bGliJ3MgdXBzdHJlYW0gcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE9ubHkgdXNlZCBmb3IgcGhhc2UgMSAoLS1wdWxsKS4KIAotIyBHZXQgdHJh bnNsYXRpb25zLgorT3B0aW9uczoKIAotZG93bmxvYWRfcG9fZmlsZXMoKSB7Ci0gIHN1YmRpcj0k MQotICBkb21haW49JDIKLSAgZWNobyAiJG1lOiBnZXR0aW5nIHRyYW5zbGF0aW9ucyBpbnRvICRz dWJkaXIgZm9yICRkb21haW4uLi4iCi0gIGNtZD0kKHByaW50ZiAiJHBvX2Rvd25sb2FkX2NvbW1h bmRfZm9ybWF0IiAiJHN1YmRpciIgIiRkb21haW4iKQotICBldmFsICIkY21kIgotfQorICAtLXB1 bGwgICAgICAgICAgICAgICAgICAgRG8gcGhhc2UgMTogUHVsbCBmaWxlcyBmcm9tIHRoZSBuZXR3 b3JrLgorICAtLWdlbiAgICAgICAgICAgICAgICAgICAgRG8gcGhhc2UgMjogR2VuZXJhdGUgZmls ZXMgZnJvbSBsb2NhbCBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vIG5ldHdv cmsgYWNjZXNzKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChUaGUgZGVmYXVsdCBpcyB0 byBkbyBib3RoIHBoYXNlcy4pCisKKyAgLS1nbnVsaWItc3JjZGlyPURJUk5BTUUgIFNwZWNpZmll cyB0aGUgbG9jYWwgZGlyZWN0b3J5IHdoZXJlIGdudWxpYgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgc291cmNlcyByZXNpZGUuICBVc2UgdGhpcyBpZiB5b3UgYWxyZWFkeQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgaGF2ZSBnbnVsaWIgc291cmNlcyBvbiB5b3VyIG1hY2hpbmUsIGFu ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgdG8gdXNlIHRoZXNlIHNvdXJj ZXMuICBEZWZhdWx0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gXCRHTlVMSUJfU1JD RElSLgorICAtLWdudWxpYi1yZWZkaXI9RElSTkFNRSAgU3BlY2lmaWVzIHRoZSBsb2NhbCBkaXJl Y3Rvcnkgd2hlcmUgYSBnbnVsaWIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRv cnkgKHdpdGggYSAuZ2l0IHN1YmRpcmVjdG9yeSkgcmVzaWRlcy4KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVzZSB0aGlzIGlmIHlvdSBhbHJlYWR5IGhhdmUgZ251bGliIHNvdXJjZXMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBoaXN0b3J5IG9uIHlvdXIgbWFjaGluZSwgYW5k IGRvIG5vdCB3YW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB3YXN0ZSB5b3VyIGJh bmR3aWR0aCBkb3dubG9hZGluZyB0aGVtIGFnYWluLgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgRGVmYXVsdHMgdG8gXCRHTlVMSUJfUkVGRElSLgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgT25seSB1c2VkIGZvciBwaGFzZSAxICgtLXB1bGwpLgorCisgIC0tYm9vdHN0cmFwLXN5bmMg ICAgICAgICBJZiB0aGlzIGJvb3RzdHJhcCBzY3JpcHQgaXMgbm90IGlkZW50aWNhbCB0bworICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZlcnNpb24gaW4gdGhlIGxvY2FsIGdudWxpYiBz b3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRoaXMgc2NyaXB0LCBh bmQgdGhlbiByZXN0YXJ0IGl0IHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC9iaW4v c2ggb3IgdGhlIHNoZWxsIFwkQ09ORklHX1NIRUxMLgorICAtLW5vLWJvb3RzdHJhcC1zeW5jICAg ICAgRG8gbm90IGNoZWNrIHdoZXRoZXIgYm9vdHN0cmFwIGlzIG91dCBvZiBzeW5jLgorCisgIC0t Y29weSAgICAgICAgICAgICAgICAgICBDb3B5IGZpbGVzIGluc3RlYWQgb2YgY3JlYXRpbmcgc3lt Ym9saWMgbGlua3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHVzZWQgZm9yIHBo YXNlIDIgKC0tZ2VuKS4KKyAgLS1mb3JjZSAgICAgICAgICAgICAgICAgIEF0dGVtcHQgdG8gYm9v dHN0cmFwIGV2ZW4gaWYgdGhlIHNvdXJjZXMgc2VlbQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgbm90IHRvIGhhdmUgYmVlbiBjaGVja2VkIG91dC4KKyAgLS1uby1naXQgICAgICAgICAgICAg ICAgIERvIG5vdCB1c2UgZ2l0IHRvIHVwZGF0ZSBnbnVsaWIuICBSZXF1aXJlcyB0aGF0CisgICAg ICAgICAgICAgICAgICAgICAgICAgICBcJEdOVUxJQl9TUkNESVIgb3IgdGhlIC0tZ251bGliLXNy Y2RpciBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyB0byBhIGdudWxp YiByZXBvc2l0b3J5IHdpdGggdGhlIGNvcnJlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldmlzaW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSB1c2VkIGZvciBwaGFz ZSAxICgtLXB1bGwpLgorICAtLXNraXAtcG8gICAgICAgICAgICAgICAgRG8gbm90IGRvd25sb2Fk ICoucG8gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHVzZWQgZm9yIHBo YXNlIDEgKC0tcHVsbCkuCitFT0YKKyAgYm9vdHN0cmFwX3ByaW50X29wdGlvbl91c2FnZV9ob29r CisgIGNhdCA8PEVPRgorSWYgdGhlIGZpbGUgYm9vdHN0cmFwLmNvbmYgZXhpc3RzIGluIHRoZSBz YW1lIGRpcmVjdG9yeSBhcyB0aGlzIHNjcmlwdCwgaXRzCitjb250ZW50cyBhcmUgcmVhZCBhcyBz aGVsbCB2YXJpYWJsZXMgdG8gY29uZmlndXJlIHRoZSBib290c3RyYXAuCiAKLSMgTWlycm9yIC5w byBmaWxlcyB0byAkcG9fZGlyLy5yZWZlcmVuY2UgYW5kIGNvcHkgb25seSB0aGUgbmV3Ci0jIG9y IG1vZGlmaWVkIG9uZXMgaW50byAkcG9fZGlyLiAgQWxzbyB1cGRhdGUgJHBvX2Rpci9MSU5HVUFT LgotIyBOb3RlIHBvIGZpbGVzIHRoYXQgZXhpc3QgbG9jYWxseSBvbmx5IGFyZSBsZWZ0IGluICRw b19kaXIgYnV0IHdpbGwKLSMgbm90IGJlIGluY2x1ZGVkIGluIExJTkdVQVMgYW5kIGhlbmNlIHdp bGwgbm90IGJlIGRpc3RyaWJ1dGVkLgotdXBkYXRlX3BvX2ZpbGVzKCkgewotICAjIERpcmVjdG9y eSBjb250YWluaW5nIHByaW1hcnkgLnBvIGZpbGVzLgotICAjIE92ZXJ3cml0ZSB0aGVtIG9ubHkg d2hlbiB3ZSdyZSBzdXJlIGEgLnBvIGZpbGUgaXMgbmV3LgotICBwb19kaXI9JDEKLSAgZG9tYWlu PSQyCitGb3IgYnVpbGQgcHJlcmVxdWlzaXRlcywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2Ug XCRBVVRPQ09ORiBhbmQgXCRBTVRBUgorYXJlIGhvbm9yZWQuCiAKLSAgIyBNaXJyb3IgKi5wbyBm aWxlcyBpbnRvIHRoaXMgZGlyLgotICAjIFVzdWFsbHkgY29udGFpbnMgKi5zMSBjaGVja3N1bSBm aWxlcy4KLSAgcmVmX3BvX2Rpcj0iJHBvX2Rpci8ucmVmZXJlbmNlIgorR251bGliIHNvdXJjZXMg Y2FuIGJlIGZldGNoZWQgaW4gdmFyaW91cyB3YXlzOgogCi0gIHRlc3QgLWQgJHJlZl9wb19kaXIg fHwgbWtkaXIgJHJlZl9wb19kaXIgfHwgcmV0dXJuCi0gIGRvd25sb2FkX3BvX2ZpbGVzICRyZWZf cG9fZGlyICRkb21haW4gXAotICAgICYmIGxzICIkcmVmX3BvX2RpciIvKi5wbyAyPi9kZXYvbnVs bCB8Ci0gICAgICBzZWQgJ3N8LiovfHw7IHN8XC5wbyR8fCcgPiAiJHBvX2Rpci9MSU5HVUFTIiB8 fCByZXR1cm4KKyAqIElmIEdOVUxJQl9TUkNESVIgaXMgc2V0IChlaXRoZXIgYXMgYW4gZW52aXJv bm1lbnQgdmFyaWFibGUgb3IgdmlhIHRoZQorICAgLS1nbnVsaWItc3JjZGlyIG9wdGlvbiksIHRo ZW4gc291cmNlcyBhcmUgZmV0Y2hlZCBmcm9tIHRoYXQgbG9jYWwKKyAgIGRpcmVjdG9yeS4gIElm IGl0IGlzIGEgZ2l0IHJlcG9zaXRvcnkgYW5kIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisg ICBHTlVMSUJfUkVWSVNJT04gaXMgc2V0IGluIGJvb3RzdHJhcC5jb25mLCB0aGVuIHRoYXQgcmV2 aXNpb24gaXMKKyAgIGNoZWNrZWQgb3V0LgogCi0gIGxhbmdzPSQoY2QgJHJlZl9wb19kaXIgJiYg ZWNobyAqLnBvIHwgc2VkICdzL1wucG8vL2cnKQotICB0ZXN0ICIkbGFuZ3MiID0gJyonICYmIGxh bmdzPXgKLSAgZm9yIHBvIGluICRsYW5nczsgZG8KLSAgICBjYXNlICRwbyBpbiB4KSBjb250aW51 ZTs7IGVzYWMKLSAgICBuZXdfcG89IiRyZWZfcG9fZGlyLyRwby5wbyIKLSAgICBja3N1bV9maWxl PSIkcmVmX3BvX2Rpci8kcG8uczEiCi0gICAgaWYgISB0ZXN0IC1mICIkY2tzdW1fZmlsZSIgfHwK LSAgICAgICAgISB0ZXN0IC1mICIkcG9fZGlyLyRwby5wbyIgfHwKLSAgICAgICAgISAkU0hBMVNV TSAtYyAiJGNrc3VtX2ZpbGUiIDwgIiRuZXdfcG8iID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAg ICAgIGVjaG8gIiRtZTogdXBkYXRlZCAkcG9fZGlyLyRwby5wby4uLiIKLSAgICAgIGNwICIkbmV3 X3BvIiAiJHBvX2Rpci8kcG8ucG8iIFwKLSAgICAgICAgICAmJiAkU0hBMVNVTSA8ICIkbmV3X3Bv IiA+ICIkY2tzdW1fZmlsZSIgfHwgcmV0dXJuCi0gICAgZmkKLSAgZG9uZQotfQorICogT3RoZXJ3 aXNlLCBpZiB0aGlzIHBhY2thZ2UgaXMgaW4gYSBnaXQgcmVwb3NpdG9yeSB3aXRoIGEgJ2dudWxp YicKKyAgIHN1Ym1vZHVsZSBjb25maWd1cmVkLCB0aGVuIHRoYXQgc3VibW9kdWxlIGlzIGluaXRp YWxpemVkIGFuZCB1cGRhdGVkCisgICBhbmQgc291cmNlcyBhcmUgZmV0Y2hlZCBmcm9tIHRoZXJl LiAgSWYgR05VTElCX1JFRkRJUiBpcyBzZXQgKGVpdGhlcgorICAgYXMgYW4gZW52aXJvbm1lbnQg dmFyaWFibGUgb3IgdmlhIHRoZSAtLWdudWxpYi1yZWZkaXIgb3B0aW9uKSBhbmQgaXMKKyAgIGEg Z2l0IHJlcG9zaXRvcnksIHRoZW4gaXQgaXMgdXNlZCBhcyBhIHJlZmVyZW5jZS4KKworICogT3Ro ZXJ3aXNlLCBpZiB0aGUgJ2dudWxpYicgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LCBHbnVsaWIg c291cmNlcworICAgYXJlIGNsb25lZCBpbnRvIHRoYXQgZGlyZWN0b3J5IHVzaW5nIGdpdCBmcm9t IFwkR05VTElCX1VSTCwgZGVmYXVsdGluZworICAgdG8gJGRlZmF1bHRfZ251bGliX3VybDsgaWYg R05VTElCX1JFRkRJUiBpcyBzZXQgYW5kIGlzIGEgZ2l0IHJlcG9zaXRvcnkKKyAgIGl0cyBjb250 ZW50cyBtYXkgYmUgdXNlZCB0byBhY2NlbGVyYXRlIHRoZSBwcm9jZXNzLgorICAgSWYgdGhlIGNv bmZpZ3VyYXRpb24gdmFyaWFibGUgR05VTElCX1JFVklTSU9OIGlzIHNldCBpbiBib290c3RyYXAu Y29uZiwKKyAgIHRoZW4gdGhhdCByZXZpc2lvbiBpcyBjaGVja2VkIG91dC4KIAotY2FzZSAkU0tJ UF9QTyBpbgotJycpCi0gIGlmIHRlc3QgLWQgcG87IHRoZW4KLSAgICB1cGRhdGVfcG9fZmlsZXMg cG8gJHBhY2thZ2UgfHwgZXhpdAotICBmaQorICogT3RoZXJ3aXNlLCB0aGUgZXhpc3RpbmcgR251 bGliIHNvdXJjZXMgaW4gdGhlICdnbnVsaWInIGRpcmVjdG9yeSBhcmUKKyAgIHVzZWQuICBJZiBp dCBpcyBhIGdpdCByZXBvc2l0b3J5IGFuZCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICAg R05VTElCX1JFVklTSU9OIGlzIHNldCBpbiBib290c3RyYXAuY29uZiwgdGhlbiB0aGF0IHJldmlz aW9uIGlzCisgICBjaGVja2VkIG91dC4KIAotICBpZiB0ZXN0IC1kIHJ1bnRpbWUtcG87IHRoZW4K LSAgICB1cGRhdGVfcG9fZmlsZXMgcnVudGltZS1wbyAkcGFja2FnZS1ydW50aW1lIHx8IGV4aXQK LSAgZmk7OwotZXNhYworSWYgeW91IG1haW50YWluIGEgcGFja2FnZSBhbmQgd2FudCB0byBwaW4g YSBwYXJ0aWN1bGFyIHJldmlzaW9uIG9mIHRoZQorR251bGliIHNvdXJjZXMgdGhhdCBoYXMgYmVl biB0ZXN0ZWQgd2l0aCB5b3VyIHBhY2thZ2UsIHRoZW4gdGhlcmUgYXJlCit0d28gcG9zc2libGUg YXBwcm9hY2hlczogZWl0aGVyIGNvbmZpZ3VyZSBhICdnbnVsaWInIHN1Ym1vZHVsZSB3aXRoIHRo ZQorYXBwcm9wcmlhdGUgcmV2aXNpb24sIG9yIHNldCBHTlVMSUJfUkVWSVNJT04gKGFuZCBpZiBu ZWNlc3NhcnkKK0dOVUxJQl9VUkwpIGluIGJvb3RzdHJhcC5jb25mLgogCi12ZXJzaW9uX2NvbnRy b2xsZWRfZmlsZSgpIHsKLSAgcGFyZW50PSQxCi0gIGZpbGU9JDIKLSAgaWYgdGVzdCAtZCAuZ2l0 OyB0aGVuCi0gICAgZ2l0IHJtIC1uICIkZmlsZSIgPiAvZGV2L251bGwgMj4mMQotICBlbGlmIHRl c3QgLWQgLnN2bjsgdGhlbgotICAgIHN2biBsb2cgLXIgSEVBRCAiJGZpbGUiID4gL2Rldi9udWxs IDI+JjEKLSAgZWxpZiB0ZXN0IC1kIENWUzsgdGhlbgotICAgIGdyZXAgLUYgIi8ke2ZpbGUjIyov fS8iICIkcGFyZW50L0NWUy9FbnRyaWVzIiAyPi9kZXYvbnVsbCB8Ci0gICAgICAgICAgICAgZ3Jl cCAnXi9bXi9dKi9bMC05XScgPiAvZGV2L251bGwKLSAgZWxzZQotICAgIHdhcm5fICJubyB2ZXJz aW9uIGNvbnRyb2wgZm9yICRmaWxlPyIKLSAgICBmYWxzZQotICBmaQorUnVubmluZyB3aXRob3V0 IGFyZ3VtZW50cyB3aWxsIHN1ZmZpY2UgaW4gbW9zdCBjYXNlcy4KK0VPRgogfQogCi0jIE5PVEU6 IHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCB0byBydW4gYm90aCBhdXRvcG9pbnQgYW5kIGxpYnRvb2xp emUKLSMgYmVmb3JlIGdudWxpYi10b29sLCBzaW5jZSBnbnVsaWItdG9vbCBpcyBsaWtlbHkgdG8g cHJvdmlkZSBuZXdlcgotIyB2ZXJzaW9ucyBvZiBmaWxlcyAiaW5zdGFsbGVkIiBieSB0aGVzZSB0 d28gcHJvZ3JhbXMuCi0jIFRoZW4sICphZnRlciogZ251bGliLXRvb2wgKHNlZSBiZWxvdyksIHdl IGhhdmUgdG8gYmUgY2FyZWZ1bCB0bwotIyBydW4gYXV0b3JlY29uZiBpbiBzdWNoIGEgd2F5IHRo YXQgaXQgZG9lcyBub3QgcnVuIGVpdGhlciBvZiB0aGVzZQotIyB0d28ganVzdC1wcmUtcnVuIHBy b2dyYW1zLgotCi0jIEltcG9ydCBmcm9tIGdldHRleHQuCi13aXRoX2dldHRleHQ9eWVzCi1ncmVw ICdeWwkgXSpBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKCcgY29uZmlndXJlLmFjID4vZGV2L251bGwg fHwgXAotICAgIHdpdGhfZ2V0dGV4dD1ubworIyBQYXJzZSBvcHRpb25zLgogCi1pZiB0ZXN0ICR3 aXRoX2dldHRleHQgPSB5ZXMgfHwgdGVzdCAkdXNlX2xpYnRvb2wgPSAxOyB0aGVuCisjIFdoZXRo ZXIgdG8gcHVsbCBhbmQgZ2VuZXJhdGUuCitwdWxsPWZhbHNlCitnZW49ZmFsc2UKIAotICB0ZW1w YmFzZT0uYm9vdHN0cmFwJCQKLSAgdHJhcCAicm0gLWYgJHRlbXBiYXNlLjAgJHRlbXBiYXNlLjEi IDEgMiAxMyAxNQorIyBXaGV0aGVyIHRvIHVzZSBjb3BpZXMgaW5zdGVhZCBvZiBzeW1saW5rcy4K K2NvcHk9ZmFsc2UKIAotICA+ICR0ZW1wYmFzZS4wID4gJHRlbXBiYXNlLjEgJiYKLSAgZmluZCAu ICEgLXR5cGUgZCAtcHJpbnQgfCBzb3J0ID4gJHRlbXBiYXNlLjAgfHwgZXhpdAorIyBVc2UgZ2l0 IHRvIHVwZGF0ZSBnbnVsaWIgc291cmNlcwordXNlX2dpdD10cnVlCiAKLSAgaWYgdGVzdCAkd2l0 aF9nZXR0ZXh0ID0geWVzOyB0aGVuCi0gICAgIyBSZWxlYXNlZCBhdXRvcG9pbnQgaGFzIHRoZSB0 ZW5kZW5jeSB0byBpbnN0YWxsIG1hY3JvcyB0aGF0IGhhdmUgYmVlbgotICAgICMgb2Jzb2xldGVk IGluIGN1cnJlbnQgZ251bGliLCBzbyBydW4gdGhpcyBiZWZvcmUgZ251bGliLXRvb2wuCi0gICAg ZWNobyAiJDA6ICRBVVRPUE9JTlQgLS1mb3JjZSIKLSAgICAkQVVUT1BPSU5UIC0tZm9yY2UgfHwg ZXhpdAotICBmaQorZm9yIG9wdGlvbgorZG8KKyAgY2FzZSAkb3B0aW9uIGluCisgIC0taGVscCkK KyAgICB1c2FnZQorICAgIGV4aXQ7OworICAtLXZlcnNpb24pCisgICAgc2V0IC1lCisgICAgZWNo byAiYm9vdHN0cmFwICRzY3JpcHR2ZXJzaW9uIGxpYiAkc2NyaXB0bGlidmVyc2lvbiIKKyAgICBl Y2hvICIkY29weXJpZ2h0IgorICAgIGV4aXQgMAorICAgIDs7CisgIC0tcHVsbCkKKyAgICBwdWxs PXRydWU7OworICAtLWdlbikKKyAgICBnZW49dHJ1ZTs7CisgIC0tZ251bGliLXNyY2Rpcj0qKQor ICAgIEdOVUxJQl9TUkNESVI9JHtvcHRpb24jLS1nbnVsaWItc3JjZGlyPX07OworICAtLWdudWxp Yi1yZWZkaXI9KikKKyAgICBHTlVMSUJfUkVGRElSPSR7b3B0aW9uIy0tZ251bGliLXJlZmRpcj19 OzsKKyAgLS1za2lwLXBvKQorICAgIFNLSVBfUE89dDs7CisgIC0tZm9yY2UpCisgICAgY2hlY2tv dXRfb25seV9maWxlPTs7CisgIC0tY29weSkKKyAgICBjb3B5PXRydWU7OworICAtLWJvb3RzdHJh cC1zeW5jKQorICAgIGJvb3RzdHJhcF9zeW5jPXRydWU7OworICAtLW5vLWJvb3RzdHJhcC1zeW5j KQorICAgIGJvb3RzdHJhcF9zeW5jPWZhbHNlOzsKKyAgLS1uby1naXQpCisgICAgdXNlX2dpdD1m YWxzZTs7CisgICopCisgICAgYm9vdHN0cmFwX29wdGlvbl9ob29rICRvcHRpb24gfHwgZGllICIk b3B0aW9uOiB1bmtub3duIG9wdGlvbiI7OworICBlc2FjCitkb25lCiAKLSAgIyBBdXRvcmVjb25m IHJ1bnMgYWNsb2NhbCBiZWZvcmUgbGlidG9vbGl6ZSwgd2hpY2ggY2F1c2VzIHNwdXJpb3VzCi0g ICMgd2FybmluZ3MgaWYgdGhlIGluaXRpYWwgYWNsb2NhbCBpcyBjb25mdXNlZCBieSB0aGUgbGli dG9vbGl6ZWQKLSAgIyAob3Igd29yc2Ugb3V0LW9mLWRhdGUpIG1hY3JvIGRpcmVjdG9yeS4KLSAg IyBsaWJ0b29saXplIDEuOWIgYWRkZWQgdGhlIC0taW5zdGFsbCBvcHRpb247IGJ1dCB3ZSBzdXBw b3J0IGJhY2sKLSAgIyB0byBsaWJ0b29saXplIDEuNS4yMiwgd2hlcmUgdGhlIGluc3RhbGwgYWN0 aW9uIHdhcyBkZWZhdWx0LgotICBpZiB0ZXN0ICR1c2VfbGlidG9vbCA9IDE7IHRoZW4KLSAgICBp bnN0YWxsPQotICAgIGNhc2UgJCgkTElCVE9PTElaRSAtLWhlbHApIGluCi0gICAgICAqLS1pbnN0 YWxsKikgaW5zdGFsbD0tLWluc3RhbGwgOzsKLSAgICBlc2FjCi0gICAgZWNobyAicnVubmluZzog JExJQlRPT0xJWkUgJGluc3RhbGwgLS1jb3B5IgotICAgICRMSUJUT09MSVpFICRpbnN0YWxsIC0t Y29weQotICBmaQorIyBEZWZhdWx0IGlzIHRvIGRvIGJvdGguCiskcHVsbCB8fCAkZ2VuIHx8IHB1 bGw9dHJ1ZSBnZW49dHJ1ZQogCi0gIGZpbmQgLiAhIC10eXBlIGQgLXByaW50IHwgc29ydCA+JHRl bXBiYXNlLjEKLSAgb2xkX0lGUz0kSUZTCi0gIElGUz0kbmwKLSAgZm9yIGZpbGUgaW4gJChjb21t IC0xMyAkdGVtcGJhc2UuMCAkdGVtcGJhc2UuMSk7IGRvCi0gICAgSUZTPSRvbGRfSUZTCi0gICAg cGFyZW50PSR7ZmlsZSUvKn0KLSAgICB2ZXJzaW9uX2NvbnRyb2xsZWRfZmlsZSAiJHBhcmVudCIg IiRmaWxlIiB8fCB7Ci0gICAgICBmb3IgZG90X2lnIGluIHggJHZjX2lnbm9yZTsgZG8KLSAgICAg ICAgdGVzdCAkZG90X2lnID0geCAmJiBjb250aW51ZQotICAgICAgICBpZz0kcGFyZW50LyRkb3Rf aWcKLSAgICAgICAgaW5zZXJ0X3ZjX2lnbm9yZSAiJGlnIiAiJHtmaWxlIyMqL30iCi0gICAgICBk b25lCi0gICAgfQotICBkb25lCi0gIElGUz0kb2xkX0lGUworJHVzZV9naXQgfHwgdGVzdCAtbiAi JEdOVUxJQl9TUkNESVIiIFwKKyAgfHwgZGllICJFcnJvcjogLS1uby1naXQgcmVxdWlyZXMgXCRH TlVMSUJfU1JDRElSIGVudmlyb25tZW50IHZhcmlhYmxlIiBcCisgICAgICAgICAib3IgLS1nbnVs aWItc3JjZGlyIG9wdGlvbiIKK3Rlc3QgLXogIiRHTlVMSUJfU1JDRElSIiB8fCB0ZXN0IC1kICIk R05VTElCX1NSQ0RJUiIgXAorICB8fCBkaWUgIkVycm9yOiBcJEdOVUxJQl9TUkNESVIgZW52aXJv bm1lbnQgdmFyaWFibGUgb3IgLS1nbnVsaWItc3JjZGlyIiBcCisgICAgICAgICAib3B0aW9uIGlz IHNwZWNpZmllZCwgYnV0IGRvZXMgbm90IGRlbm90ZSBhIGRpcmVjdG9yeSIKIAotICBybSAtZiAk dGVtcGJhc2UuMCAkdGVtcGJhc2UuMQotICB0cmFwIC0gMSAyIDEzIDE1CitpZiB0ZXN0IC1uICIk Y2hlY2tvdXRfb25seV9maWxlIiAmJiB0ZXN0ICEgLXIgIiRjaGVja291dF9vbmx5X2ZpbGUiOyB0 aGVuCisgIGRpZSAiQm9vdHN0cmFwcGluZyBmcm9tIGEgbm9uLWNoZWNrZWQtb3V0IGRpc3RyaWJ1 dGlvbiBpcyByaXNreS4iCiBmaQogCi0jIEltcG9ydCBmcm9tIGdudWxpYi4KLQotaWYgJHVzZV9n bnVsaWI7IHRoZW4KLSAgZ251bGliX3Rvb2xfb3B0aW9ucz0iXAotICAgLS1uby1jaGFuZ2Vsb2dc Ci0gICAtLWF1eC1kaXI9JGJ1aWxkX2F1eFwKLSAgIC0tZG9jLWJhc2U9JGRvY19iYXNlXAotICAg LS1saWI9JGdudWxpYl9uYW1lXAotICAgLS1tNC1iYXNlPSRtNF9iYXNlL1wKLSAgIC0tc291cmNl LWJhc2U9JHNvdXJjZV9iYXNlL1wKLSAgIC0tdGVzdHMtYmFzZT0kdGVzdHNfYmFzZVwKLSAgIC0t bG9jYWwtZGlyPSRsb2NhbF9nbF9kaXJcCi0gICAkZ251bGliX3Rvb2xfb3B0aW9uX2V4dHJhc1wK LSAgIgotICBpZiB0ZXN0ICR1c2VfbGlidG9vbCA9IDE7IHRoZW4KLSAgICBjYXNlICIkZ251bGli X3Rvb2xfb3B0aW9ucyAiIGluCi0gICAgICAqJyAtLWxpYnRvb2wgJyopIDs7Ci0gICAgICAqKSBn bnVsaWJfdG9vbF9vcHRpb25zPSIkZ251bGliX3Rvb2xfb3B0aW9ucyAtLWxpYnRvb2wiIDs7Ci0g ICAgZXNhYwotICBmaQotICBlY2hvICIkMDogJGdudWxpYl90b29sICRnbnVsaWJfdG9vbF9vcHRp b25zIC0taW1wb3J0IC4uLiIKLSAgJGdudWxpYl90b29sICRnbnVsaWJfdG9vbF9vcHRpb25zIC0t aW1wb3J0ICRnbnVsaWJfbW9kdWxlcyBcCi0gICAgfHwgZGllICJnbnVsaWItdG9vbCBmYWlsZWQi CitjaGVja19idWlsZF9wcmVyZXF1aXNpdGVzICR1c2VfZ2l0CiAKLSAgZm9yIGZpbGUgaW4gJGdu dWxpYl9maWxlczsgZG8KLSAgICBzeW1saW5rX3RvX2RpciAiJEdOVUxJQl9TUkNESVIiICRmaWxl IFwKLSAgICAgIHx8IGRpZSAiZmFpbGVkIHRvIHN5bWxpbmsgJGZpbGUiCi0gIGRvbmUKK2lmICRi b290c3RyYXBfc3luYzsgdGhlbgorICBwcmVwYXJlX0dOVUxJQl9TUkNESVIKKyAgdXBncmFkZV9i b290c3RyYXAgIiRAIgorICAjIFNpbmNlIHdlIGhhdmUgbm93IHVwZ3JhZGVkIGlmIG5lZWRlZCwg bm8gbmVlZCB0byB0cnkgaXQgYSBzZWNvbmQgdGltZSBiZWxvdy4KKyAgYm9vdHN0cmFwX3N5bmM9 ZmFsc2UKIGZpCiAKLWJvb3RzdHJhcF9wb3N0X2ltcG9ydF9ob29rIFwKLSAgfHwgZGllICJib290 c3RyYXBfcG9zdF9pbXBvcnRfaG9vayBmYWlsZWQiCitlY2hvICIkMDogQm9vdHN0cmFwcGluZyBm cm9tIGNoZWNrZWQtb3V0ICRwYWNrYWdlIHNvdXJjZXMuLi4iCiAKLSMgRG9uJ3QgcHJvY2VlZCBp ZiB0aGVyZSBhcmUgdW5pbml0aWFsaXplZCBzdWJtb2R1bGVzLiAgSW4gcGFydGljdWxhciwKLSMg dGhlIG5leHQgc3RlcCB3aWxsIHJlbW92ZSBkYW5nbGluZyBsaW5rcywgd2hpY2ggbWlnaHQgYmUg bGlua3MgaW50bwotIyB1bmluaXRpYWxpemVkIHN1Ym1vZHVsZXMuCi0jCi0jIFVuaW5pdGlhbGl6 ZWQgc3VibW9kdWxlcyBhcmUgbGlzdGVkIHdpdGggYW4gaW5pdGlhbCBkYXNoLgotaWYgJHVzZV9n aXQgJiYgZ2l0IHN1Ym1vZHVsZSB8IGdyZXAgJ14tJyA+L2Rldi9udWxsOyB0aGVuCi0gIGRpZSAi c29tZSBnaXQgc3VibW9kdWxlcyBhcmUgbm90IGluaXRpYWxpemVkLiAiICAgICBcCi0gICAgICAi UnVuICdnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQnIGFuZCBib290c3RyYXAgYWdhaW4uIgor IyBQYXNzIEdOVUxJQl9TUkNESVIgYW5kIEdOVUxJQl9SRUZESVIgdG8gYW55IHN1YnNpZGlhcnkg Y29tbWFuZHMgdGhhdCBjYXJlLgorZXhwb3J0IEdOVUxJQl9TUkNESVIKK2V4cG9ydCBHTlVMSUJf UkVGRElSCisKK2lmICRwdWxsICYmIHsgJHVzZV9naXQgfHwgdGVzdCAteiAiJFNLSVBfUE8iOyB9 OyB0aGVuCisgIGF1dG9wdWxsIFwKKyAgICAgIGBpZiAkYm9vdHN0cmFwX3N5bmM7IHRoZW4KKyAg ICAgICAgIGVjaG8gJyAtLWJvb3RzdHJhcC1zeW5jJworICAgICAgIGVsc2UKKyAgICAgICAgIGVj aG8gJyAtLW5vLWJvb3RzdHJhcC1zeW5jJworICAgICAgIGZpYCBcCisgICAgICBgaWYgdGVzdCAt eiAiJGNoZWNrb3V0X29ubHlfZmlsZSI7IHRoZW4gZWNobyAnIC0tZm9yY2UnOyBmaWAgXAorICAg ICAgYGlmICEgJHVzZV9naXQ7IHRoZW4gZWNobyAnIC0tbm8tZ2l0JzsgZmlgIFwKKyAgICAgIGBp ZiB0ZXN0IC1uICIkU0tJUF9QTyI7IHRoZW4gZWNobyAnIC0tc2tpcC1wbyc7IGZpYCBcCisgICAg fHwgZGllICJjb3VsZCBub3QgZmV0Y2ggYXV4aWxpYXJ5IGZpbGVzIgogZmkKIAotIyBSZW1vdmUg YW55IGRhbmdsaW5nIHN5bWxpbmsgbWF0Y2hpbmcgIioubTQiIG9yICIqLltjaF0iIGluIHNvbWUK LSMgZ251bGliLXBvcHVsYXRlZCBkaXJlY3Rvcmllcy4gIFN1Y2ggLm00IGZpbGVzIHdvdWxkIGNh dXNlIGFjbG9jYWwgdG8gZmFpbC4KLSMgVGhlIGZvbGxvd2luZyByZXF1aXJlcyBHTlUgZmluZCA0 LjIuMyBvciBuZXdlci4gIENvbnNpZGVyaW5nIHRoZSB1c3VhbAotIyBwb3J0YWJpbGl0eSBjb25z dHJhaW50cyBvZiB0aGlzIHNjcmlwdCwgdGhhdCBtYXkgc2VlbSBhIHZlcnkgZGVtYW5kaW5nCi0j IHJlcXVpcmVtZW50LCBidXQgaXQgc2hvdWxkIGJlIG9rLiAgSWdub3JlIGFueSBmYWlsdXJlLCB3 aGljaCBpcyBmaW5lLAotIyBzaW5jZSB0aGlzIGlzIG9ubHkgYSBjb252ZW5pZW5jZSB0byBoZWxw IGRldmVsb3BlcnMgYXZvaWQgdGhlIHJlbGF0aXZlbHkKLSMgdW51c3VhbCBjYXNlIGluIHdoaWNo IGEgc3ltbGlua2VkLXRvIC5tNCBmaWxlIGlzIGdpdC1yZW1vdmVkIGZyb20gZ251bGliCi0jIGJl dHdlZW4gc3VjY2Vzc2l2ZSBydW5zIG9mIHRoaXMgc2NyaXB0LgotZmluZCAiJG00X2Jhc2UiICIk c291cmNlX2Jhc2UiIFwKLSAgLWRlcHRoIFwoIC1uYW1lICcqLm00JyAtbyAtbmFtZSAnKi5bY2hd JyBcKSBcCi0gIC10eXBlIGwgLXh0eXBlIGwgLWRlbGV0ZSA+IC9kZXYvbnVsbCAyPiYxCi0KLSMg SW52b2tlIGF1dG9yZWNvbmYgd2l0aCAtLWZvcmNlIC0taW5zdGFsbCB0byBlbnN1cmUgdXBncmFk ZXMgb2YgdG9vbHMKLSMgc3VjaCBhcyB5bHdyYXAuCi1BVVRPUkVDT05GRkxBR1M9Ii0tdmVyYm9z ZSAtLWluc3RhbGwgLS1mb3JjZSAtSSAkbTRfYmFzZSAkQUNMT0NBTF9GTEFHUyIKLQotIyBTb21l IHN5c3RlbXMgKFJIRUwgNSkgYXJlIHVzaW5nIGFuY2llbnQgYXV0b3Rvb2xzLCBmb3Igd2hpY2gg dGhlCi0jIC0tbm8tcmVjdXJzaXZlIG9wdGlvbiBoYWQgbm90IGJlZW4gaW52ZW50ZWQuICBEZXRl Y3QgdGhhdCBsYWNrIGFuZAotIyBvbWl0IHRoZSBvcHRpb24gd2hlbiBpdCdzIG5vdCBzdXBwb3J0 ZWQuICBGSVhNRSBpbiAyMDE3OiByZW1vdmUgdGhpcwotIyBoYWNrIHdoZW4gUkhFTCA1IGF1dG90 b29scyBhcmUgdXBkYXRlZCwgb3Igd2hlbiB0aGV5IGJlY29tZSBpcnJlbGV2YW50LgotY2FzZSAk KCRBVVRPUkVDT05GIC0taGVscCkgaW4KLSAgKi0tbm8tcmVjdXJzaXZlKikgQVVUT1JFQ09ORkZM QUdTPSIkQVVUT1JFQ09ORkZMQUdTIC0tbm8tcmVjdXJzaXZlIjs7Ci1lc2FjCi0KLSMgVGVsbCBh dXRvcmVjb25mIG5vdCB0byBpbnZva2UgYXV0b3BvaW50IG9yIGxpYnRvb2xpemU7IHRoZXkgd2Vy ZSBydW4gYWJvdmUuCi1lY2hvICJydW5uaW5nOiBBVVRPUE9JTlQ9dHJ1ZSBMSUJUT09MSVpFPXRy dWUgJEFVVE9SRUNPTkYgJEFVVE9SRUNPTkZGTEFHUyIKLUFVVE9QT0lOVD10cnVlIExJQlRPT0xJ WkU9dHJ1ZSAkQVVUT1JFQ09ORiAkQVVUT1JFQ09ORkZMQUdTIFwKLSAgfHwgZGllICJhdXRvcmVj b25mIGZhaWxlZCIKLQotIyBHZXQgc29tZSBleHRyYSBmaWxlcyBmcm9tIGdudWxpYiwgb3ZlcnJp ZGluZyBleGlzdGluZyBmaWxlcy4KLWZvciBmaWxlIGluICRnbnVsaWJfZXh0cmFfZmlsZXM7IGRv Ci0gIGNhc2UgJGZpbGUgaW4KLSAgKi9JTlNUQUxMKSBkc3Q9SU5TVEFMTDs7Ci0gIGJ1aWxkLWF1 eC8qKSBkc3Q9JGJ1aWxkX2F1eC8ke2ZpbGUjYnVpbGQtYXV4L307OwotICAqKSBkc3Q9JGZpbGU7 OwotICBlc2FjCi0gIHN5bWxpbmtfdG9fZGlyICIkR05VTElCX1NSQ0RJUiIgJGZpbGUgJGRzdCBc Ci0gICAgfHwgZGllICJmYWlsZWQgdG8gc3ltbGluayAkZmlsZSIKLWRvbmUKLQotaWYgdGVzdCAk d2l0aF9nZXR0ZXh0ID0geWVzOyB0aGVuCi0gICMgQ3JlYXRlIGdldHRleHQgY29uZmlndXJhdGlv bi4KLSAgZWNobyAiJDA6IENyZWF0aW5nIHBvL01ha2V2YXJzIGZyb20gcG8vTWFrZXZhcnMudGVt cGxhdGUgLi4uIgotICBybSAtZiBwby9NYWtldmFycwotICBzZWQgJwotICAgIC9eRVhUUkFfTE9D QUxFX0NBVEVHT1JJRVMgKj0vcy89LiovPSAnIiRFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyInLwot ICAgIC9eQ09QWVJJR0hUX0hPTERFUiAqPS9zLz0uKi89ICciJENPUFlSSUdIVF9IT0xERVIiJy8K LSAgICAvXk1TR0lEX0JVR1NfQUREUkVTUyAqPS9zfD0uKnw9ICciJE1TR0lEX0JVR1NfQUREUkVT UyInfAotICAgIC9eWEdFVFRFWFRfT1BUSU9OUyAqPS97Ci0gICAgICBzLyQvIFxcLwotICAgICAg YVwKLSAgICAgICAgICAnIiRYR0VUVEVYVF9PUFRJT05TIicgJCR7ZW5kX29mX3hnZXR0ZXh0X29w dGlvbnMrfQotICAgIH0KLSAgJyBwby9NYWtldmFycy50ZW1wbGF0ZSA+cG8vTWFrZXZhcnMgXAot ICAgIHx8IGRpZSAnY2Fubm90IGdlbmVyYXRlIHBvL01ha2V2YXJzJwotCi0gICMgSWYgdGhlICdn ZXR0ZXh0JyBtb2R1bGUgaXMgaW4gdXNlLCBncmFiIHRoZSBsYXRlc3QgTWFrZWZpbGUuaW4uaW4u Ci0gICMgSWYgb25seSB0aGUgJ2dldHRleHQtaCcgbW9kdWxlIGlzIGluIHVzZSwgYXNzdW1lIGF1 dG9wb2ludCBhbHJlYWR5Ci0gICMgcHV0IHRoZSBjb3JyZWN0IHZlcnNpb24gb2YgdGhpcyBmaWxl IGludG8gcGxhY2UuCi0gIGNhc2UgJGdudWxpYl9tb2R1bGVzIGluCi0gICpnZXR0ZXh0LWgqKSA7 OwotICAqZ2V0dGV4dCopCi0gICAgY3AgJEdOVUxJQl9TUkNESVIvYnVpbGQtYXV4L3BvL01ha2Vm aWxlLmluLmluIHBvL01ha2VmaWxlLmluLmluIFwKLSAgICAgIHx8IGRpZSAiY2Fubm90IGNyZWF0 ZSBwby9NYWtlZmlsZS5pbi5pbiIKLSAgICA7OwotICBlc2FjCi0KLSAgaWYgdGVzdCAtZCBydW50 aW1lLXBvOyB0aGVuCi0gICAgIyBTaW1pbGFybHkgZm9yIHJ1bnRpbWUtcG8vTWFrZXZhcnMsIGJ1 dCBub3QgcXVpdGUgdGhlIHNhbWUuCi0gICAgcm0gLWYgcnVudGltZS1wby9NYWtldmFycwotICAg IHNlZCAnCi0gICAgICAvXkRPTUFJTiAqPS4qL3MvPS4qLz0gJyIkcGFja2FnZSInLXJ1bnRpbWUv Ci0gICAgICAvXnN1YmRpciAqPS4qL3MvPS4qLz0gcnVudGltZS1wby8KLSAgICAgIC9eTVNHSURf QlVHU19BRERSRVNTICo9L3MvPS4qLz0gYnVnLSciJHBhY2thZ2UiJ0BnbnUub3JnLwotICAgICAg L15YR0VUVEVYVF9PUFRJT05TICo9L3sKLSAgICAgICAgcy8kLyBcXC8KLSAgICAgICAgYVwKLSAg ICAgICAgICAgICciJFhHRVRURVhUX09QVElPTlNfUlVOVElNRSInICQke2VuZF9vZl94Z2V0dGV4 dF9vcHRpb25zK30KLSAgICAgIH0KLSAgICAnIHBvL01ha2V2YXJzLnRlbXBsYXRlID5ydW50aW1l LXBvL01ha2V2YXJzIFwKLSAgICB8fCBkaWUgJ2Nhbm5vdCBnZW5lcmF0ZSBydW50aW1lLXBvL01h a2V2YXJzJwotCi0gICAgIyBDb3B5IGlkZW50aWNhbCBmaWxlcyBmcm9tIHBvIHRvIHJ1bnRpbWUt cG8uCi0gICAgKGNkIHBvICYmIGNwIC1wIE1ha2VmaWxlLmluLmluICotcXVvdCAqLmhlYWRlciAq LnNlZCAqLnNpbiAuLi9ydW50aW1lLXBvKQotICBmaQoraWYgJGdlbjsgdGhlbgorICBhdXRvZ2Vu IFwKKyAgICAgIGBpZiAkY29weTsgdGhlbiBlY2hvICcgLS1jb3B5JzsgZmlgIFwKKyAgICAgIGBp ZiB0ZXN0IC16ICIkY2hlY2tvdXRfb25seV9maWxlIjsgdGhlbiBlY2hvICcgLS1mb3JjZSc7IGZp YCBcCisgICAgfHwgZGllICJjb3VsZCBub3QgZ2VuZXJhdGUgYXV4aWxpYXJ5IGZpbGVzIgogZmkK IAotYm9vdHN0cmFwX2VwaWxvZ3VlCi0KLWVjaG8gIiQwOiBkb25lLiAgTm93IHlvdSBjYW4gcnVu ICcuL2NvbmZpZ3VyZScuIgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICMgTG9jYWwgVmFyaWFi bGVzOgotIyBldmFsOiAoYWRkLWhvb2sgJ2JlZm9yZS1zYXZlLWhvb2sgJ3RpbWUtc3RhbXApCisj IGV2YWw6IChhZGQtaG9vayAnYmVmb3JlLXNhdmUtaG9vayAndGltZS1zdGFtcCBuaWwgdCkKICMg dGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgotIyB0aW1lLXN0YW1wLWZvcm1hdDog IiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlWS0lMDJtLSUwMmQu JTAySCIKICMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMwIgogIyB0aW1lLXN0YW1wLWVuZDog IjsgIyBVVEMiCiAjIEVuZDoKLS0gCjIuMzkuNQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkdydWItZGV2ZWwgbWFpbGluZyBsaXN0CkdydWItZGV2ZWxA Z251Lm9yZwpodHRwczovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9ncnViLWRldmVs Cg==