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 X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT, WEIRD_QUOTING autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1FC84C433E0 for ; Fri, 8 Jan 2021 05:00:53 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 696AD22E02 for ; Fri, 8 Jan 2021 05:00:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 696AD22E02 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:33706 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kxjtL-00039P-BV for qemu-devel@archiver.kernel.org; Fri, 08 Jan 2021 00:00:51 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:52330) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kxjPR-0007Y4-Ka for qemu-devel@nongnu.org; Thu, 07 Jan 2021 23:29:57 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:25185) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kxjPM-00058Q-5m for qemu-devel@nongnu.org; Thu, 07 Jan 2021 23:29:57 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1610080192; x=1641616192; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6++1ARGKiMRdP9/z/z/SAlztyKOKSyVgJMEAgm4uuBw=; b=wwSUVkQdsPw4aZVBsOsXnrWsIjVbnKg2EfYJBpcfgsATNAoT5zoKBTtY Q8VtKxmC6OA3MsJyvom2sLM0CXDeYYCFoF/5euDL1GuICGDnUDBhr3sBW MuORlOZKGWQHeFJ84//AY3bdeK8BzjM53stkmt2PfLh80QHeQOj9Hp3d/ g=; Received: from unknown (HELO ironmsg-SD-alpha.qualcomm.com) ([10.53.140.30]) by alexa-out-sd-01.qualcomm.com with ESMTP; 07 Jan 2021 20:29:14 -0800 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg-SD-alpha.qualcomm.com with ESMTP; 07 Jan 2021 20:29:14 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 52A98E7B; Thu, 7 Jan 2021 22:29:14 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v6 20/35] Hexagon (target/hexagon) generator phase 2 - generate header files Date: Thu, 7 Jan 2021 22:28:51 -0600 Message-Id: <1610080146-14968-21-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1610080146-14968-1-git-send-email-tsimpson@quicinc.com> References: <1610080146-14968-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.38; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-01.qualcomm.com X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.248, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ale@rev.ng, bcain@quicinc.com, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, philmd@redhat.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" UHl0aG9uIHNjcmlwdHMgZ2VuZXJhdGUgdGhlIGZvbGxvd2luZyBmaWxlcwogICAgaGVscGVyX3By b3Rvc19nZW5lcmF0ZWQuaAogICAgICAgIEZvciBlYWNoIGluc3RydWN0aW9uIHdlIGNyZWF0ZSBE RUZfSEVMUEVSIGZ1bmN0aW9uIHByb3RvdHlwZQogICAgaGVscGVyX2Z1bmNzX2dlbmVyYXRlZC5o CiAgICAgICAgRm9yIGVhY2ggaW5zdHJ1Y3Rpb24gd2UgY3JlYXRlIHRoZSBoZWxwZXIgZnVuY3Rp b24gZGVmaW5pdGlvbgogICAgdGNnX2Z1bmNzX2dlbmVyYXRlZC5oCiAgICAgICAgRm9yIGVhY2gg aW5zdHJ1Y3Rpb24gd2UgY3JlYXRlIFRDRyBjb2RlIHRvIGdlbmVyYXRlIGNhbGwgdG8gaGVscGVy CiAgICB0Y2dfZnVuY190YWJsZV9nZW5lcmF0ZWQuaAogICAgICAgIFRhYmxlIG9mIGZ1bmN0aW9u IHBvaW50ZXJzIGluZGV4ZWQgYnkgb3Bjb2RlCiAgICBzaG9ydGNvZGVfZ2VuZXJhdGVkLmgKICAg ICAgICBHZW5lcmF0ZSBhIHRhYmxlIG9mIGluc3RydWN0aW9uICJzaG9ydGNvZGUiIHNlbWFudGlj cwogICAgb3Bjb2Rlc19kZWZfZ2VuZXJhdGVkLmgKICAgICAgICBHaXZlcyBhIGxpc3Qgb2YgYWxs IHRoZSBvcGNvZGVzCiAgICBvcF9hdHRyaWJzX2dlbmVyYXRlZC5oCiAgICAgICAgTGlzdHMgYWxs IHRoZSBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGluc3RydWN0aW9uCiAgICBvcF9y ZWdzX2dlbmVyYXRlZC5oCiAgICAgICAgTGlzdHMgdGhlIHJlZ2lzdGVyIGFuZCBpbW1lZGlhdGUg b3BlcmFuZHMgZm9yIGVhY2ggaW5zdHJ1Y3Rpb24KICAgIHByaW50aW5zbl9nZW5lcmF0ZWQuaAog ICAgICAgIERhdGEgZm9yIHByaW50aW5nIChkaXNhc3NlbWJsaW5nKSBlYWNoIGluc3RydWN0aW9u IChmb3JtYXQKICAgICAgICBzdHJpbmcgKyBvcGVyYW5kcykKClNpZ25lZC1vZmYtYnk6IFRheWxv ciBTaW1wc29uIDx0c2ltcHNvbkBxdWljaW5jLmNvbT4KLS0tCiB0YXJnZXQvaGV4YWdvbi9nZW5f aGVscGVyX2Z1bmNzLnB5ICAgfCAyMjAgKysrKysrKysrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9n ZW5faGVscGVyX3Byb3Rvcy5weSAgfCAxNTAgKysrKysrKysrKwogdGFyZ2V0L2hleGFnb24vZ2Vu X29wX2F0dHJpYnMucHkgICAgIHwgIDQwICsrKwogdGFyZ2V0L2hleGFnb24vZ2VuX29wX3JlZ3Mu cHkgICAgICAgIHwgMTExICsrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9nZW5fb3Bjb2Rlc19kZWYu cHkgICAgfCAgMzcgKysrCiB0YXJnZXQvaGV4YWdvbi9nZW5fcHJpbnRpbnNuLnB5ICAgICAgfCAx NzQgKysrKysrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9nZW5fc2hvcnRjb2RlLnB5ICAgICAgfCAg NjMgKysrKysKIHRhcmdldC9oZXhhZ29uL2dlbl90Y2dfZnVuY190YWJsZS5weSB8ICA1OCArKysr CiB0YXJnZXQvaGV4YWdvbi9nZW5fdGNnX2Z1bmNzLnB5ICAgICAgfCA1MzIgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIHRhcmdldC9oZXhhZ29uL2hleF9jb21tb24ucHkgICAg ICAgICB8IDIxNiArKysrKysrKysrKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgMTYwMSBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA3NTUgdGFyZ2V0L2hleGFnb24vZ2VuX2hlbHBlcl9mdW5j cy5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHRhcmdldC9oZXhhZ29uL2dlbl9oZWxwZXJfcHJvdG9z LnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUgdGFyZ2V0L2hleGFnb24vZ2VuX29wX2F0dHJpYnMucHkK IGNyZWF0ZSBtb2RlIDEwMDc1NSB0YXJnZXQvaGV4YWdvbi9nZW5fb3BfcmVncy5weQogY3JlYXRl IG1vZGUgMTAwNzU1IHRhcmdldC9oZXhhZ29uL2dlbl9vcGNvZGVzX2RlZi5weQogY3JlYXRlIG1v ZGUgMTAwNzU1IHRhcmdldC9oZXhhZ29uL2dlbl9wcmludGluc24ucHkKIGNyZWF0ZSBtb2RlIDEw MDc1NSB0YXJnZXQvaGV4YWdvbi9nZW5fc2hvcnRjb2RlLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUg dGFyZ2V0L2hleGFnb24vZ2VuX3RjZ19mdW5jX3RhYmxlLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUg dGFyZ2V0L2hleGFnb24vZ2VuX3RjZ19mdW5jcy5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHRhcmdl dC9oZXhhZ29uL2hleF9jb21tb24ucHkKCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9nZW5f aGVscGVyX2Z1bmNzLnB5IGIvdGFyZ2V0L2hleGFnb24vZ2VuX2hlbHBlcl9mdW5jcy5weQpuZXcg ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hODkzYjNjCi0tLSAvZGV2L251bGwKKysr IGIvdGFyZ2V0L2hleGFnb24vZ2VuX2hlbHBlcl9mdW5jcy5weQpAQCAtMCwwICsxLDIyMCBAQAor IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCisjIworIyMgIENvcHlyaWdodChjKSAyMDE5LTIwMjAg UXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMj CisjIyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyMjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIyAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMjCisjIyAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyMjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisjIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyMjCisjIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIyMKKworaW1wb3J0IHN5 cworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgaGV4X2NvbW1vbgorCisjIworIyMg SGVscGVycyBmb3IgZ2VuX2hlbHBlcl9mdW5jdGlvbgorIyMKK2RlZiBnZW5fZGVjbF9lYShmKToK KyAgICBmLndyaXRlKCIgICAgdWludDMyX3QgRUE7XG4iKQorCitkZWYgZ2VuX2hlbHBlcl9yZXR1 cm5fdHlwZShmLHJlZ3R5cGUscmVnaWQscmVnbm8pOgorICAgIGlmIHJlZ25vID4gMSA6IGYud3Jp dGUoIiwgIikKKyAgICBmLndyaXRlKCJpbnQzMl90IikKKworZGVmIGdlbl9oZWxwZXJfcmV0dXJu X3R5cGVfcGFpcihmLHJlZ3R5cGUscmVnaWQscmVnbm8pOgorICAgIGlmIHJlZ25vID4gMSA6IGYu d3JpdGUoIiwgIikKKyAgICBmLndyaXRlKCJpbnQ2NF90IikKKworZGVmIGdlbl9oZWxwZXJfYXJn KGYscmVndHlwZSxyZWdpZCxyZWdubyk6CisgICAgaWYgcmVnbm8gPiAwIDogZi53cml0ZSgiLCAi ICkKKyAgICBmLndyaXRlKCJpbnQzMl90ICVzJXNWIiAlIChyZWd0eXBlLHJlZ2lkKSkKKworZGVm IGdlbl9oZWxwZXJfYXJnX25ldyhmLHJlZ3R5cGUscmVnaWQscmVnbm8pOgorICAgIGlmIHJlZ25v ID49IDAgOiBmLndyaXRlKCIsICIgKQorICAgIGYud3JpdGUoImludDMyX3QgJXMlc04iICUgKHJl Z3R5cGUscmVnaWQpKQorCitkZWYgZ2VuX2hlbHBlcl9hcmdfcGFpcihmLHJlZ3R5cGUscmVnaWQs cmVnbm8pOgorICAgIGlmIHJlZ25vID49IDAgOiBmLndyaXRlKCIsICIpCisgICAgZi53cml0ZSgi aW50NjRfdCAlcyVzViIgJSAocmVndHlwZSxyZWdpZCkpCisKK2RlZiBnZW5faGVscGVyX2FyZ19v cG4oZixyZWd0eXBlLHJlZ2lkLGksdGFnKToKKyAgICBpZiAoaGV4X2NvbW1vbi5pc19wYWlyKHJl Z2lkKSk6CisgICAgICAgIGdlbl9oZWxwZXJfYXJnX3BhaXIoZixyZWd0eXBlLHJlZ2lkLGkpCisg ICAgZWxpZiAoaGV4X2NvbW1vbi5pc19zaW5nbGUocmVnaWQpKToKKyAgICAgICAgaWYgaGV4X2Nv bW1vbi5pc19vbGRfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZ2VuX2hl bHBlcl9hcmcoZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgICAgIGVsaWYgaGV4X2NvbW1vbi5pc19u ZXdfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZ2VuX2hlbHBlcl9hcmdf bmV3KGYscmVndHlwZSxyZWdpZCxpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQo IkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKyAgICBl bHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQs dG9zcyxudW1yZWdzKQorCitkZWYgZ2VuX2hlbHBlcl9hcmdfaW1tKGYsaW1tbGV0dCk6CisgICAg Zi53cml0ZSgiLCBpbnQzMl90ICVzIiAlIChoZXhfY29tbW9uLmltbV9uYW1lKGltbWxldHQpKSkK KworZGVmIGdlbl9oZWxwZXJfZGVzdF9kZWNsKGYscmVndHlwZSxyZWdpZCxyZWdubyxzdWJmaWVs ZD0iIik6CisgICAgZi53cml0ZSgiICAgIGludDMyX3QgJXMlc1YlcyA9IDA7XG4iICUgXAorICAg ICAgICAocmVndHlwZSxyZWdpZCxzdWJmaWVsZCkpCisKK2RlZiBnZW5faGVscGVyX2Rlc3RfZGVj bF9wYWlyKGYscmVndHlwZSxyZWdpZCxyZWdubyxzdWJmaWVsZD0iIik6CisgICAgZi53cml0ZSgi ICAgIGludDY0X3QgJXMlc1YlcyA9IDA7XG4iICUgXAorICAgICAgICAocmVndHlwZSxyZWdpZCxz dWJmaWVsZCkpCisKK2RlZiBnZW5faGVscGVyX2Rlc3RfZGVjbF9vcG4oZixyZWd0eXBlLHJlZ2lk LGkpOgorICAgIGlmIChoZXhfY29tbW9uLmlzX3BhaXIocmVnaWQpKToKKyAgICAgICAgZ2VuX2hl bHBlcl9kZXN0X2RlY2xfcGFpcihmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICBlbGlmIChoZXhfY29t bW9uLmlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBnZW5faGVscGVyX2Rlc3RfZGVjbChmLHJl Z3R5cGUscmVnaWQsaSkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBh cnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCitkZWYgZ2VuX2hlbHBlcl9yZXR1 cm4oZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBmLndyaXRlKCIgICAgcmV0dXJuICVzJXNW O1xuIiAlIChyZWd0eXBlLHJlZ2lkKSkKKworZGVmIGdlbl9oZWxwZXJfcmV0dXJuX3BhaXIoZixy ZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBmLndyaXRlKCIgICAgcmV0dXJuICVzJXNWO1xuIiAl IChyZWd0eXBlLHJlZ2lkKSkKKworZGVmIGdlbl9oZWxwZXJfcmV0dXJuX29wbihmLCByZWd0eXBl LCByZWdpZCwgaSk6CisgICAgaWYgKGhleF9jb21tb24uaXNfcGFpcihyZWdpZCkpOgorICAgICAg ICBnZW5faGVscGVyX3JldHVybl9wYWlyKGYscmVndHlwZSxyZWdpZCxpKQorICAgIGVsaWYgKGhl eF9jb21tb24uaXNfc2luZ2xlKHJlZ2lkKSk6CisgICAgICAgIGdlbl9oZWxwZXJfcmV0dXJuKGYs cmVndHlwZSxyZWdpZCxpKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIg cGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisKKyMjCisjIyBHZW5lcmF0ZSB0 aGUgVENHIGNvZGUgdG8gY2FsbCB0aGUgaGVscGVyCisjIyAgICAgRm9yIEEyX2FkZDogUmQzMj1h ZGQoUnMzMixSdDMyKSwgeyBSZFY9UnNWK1J0Vjt9CisjIyAgICAgV2UgcHJvZHVjZToKKyMjICAg ICAgIGludDMyX3QgSEVMUEVSKEEyX2FkZCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludDMyX3Qg UnNWLCBpbnQzMl90IFJ0VikKKyMjICAgICAgIHsKKyMjICAgICAgICAgICB1aW50MzJfdCBzbG90 IF9fYXR0cmlidXRlX18odW51c2VkKSkgPSA0OworIyMgICAgICAgICAgIGludDMyX3QgUmRWID0g MDsKKyMjICAgICAgICAgICB7IFJkVj1Sc1YrUnRWO30KKyMjICAgICAgICAgICBDT1VOVF9IRUxQ RVIoQTJfYWRkKTsKKyMjICAgICAgICAgICByZXR1cm4gUmRWOworIyMgICAgICAgfQorIyMKK2Rl ZiBnZW5faGVscGVyX2Z1bmN0aW9uKGYsIHRhZywgdGFncmVncywgdGFnaW1tcyk6CisgICAgcmVn cyA9IHRhZ3JlZ3NbdGFnXQorICAgIGltbXMgPSB0YWdpbW1zW3RhZ10KKworICAgIG51bXJlc3Vs dHMgPSAwCisgICAgbnVtc2NhbGFycmVzdWx0cyA9IDAKKyAgICBudW1zY2FsYXJyZWFkd3JpdGUg PSAwCisgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAg IGlmIChoZXhfY29tbW9uLmlzX3dyaXR0ZW4ocmVnaWQpKToKKyAgICAgICAgICAgIG51bXJlc3Vs dHMgKz0gMQorICAgICAgICAgICAgaWYgKGhleF9jb21tb24uaXNfc2NhbGFyX3JlZyhyZWd0eXBl KSk6CisgICAgICAgICAgICAgICAgbnVtc2NhbGFycmVzdWx0cyArPSAxCisgICAgICAgIGlmICho ZXhfY29tbW9uLmlzX3JlYWR3cml0ZShyZWdpZCkpOgorICAgICAgICAgICAgaWYgKGhleF9jb21t b24uaXNfc2NhbGFyX3JlZyhyZWd0eXBlKSk6CisgICAgICAgICAgICAgICAgbnVtc2NhbGFycmVh ZHdyaXRlICs9IDEKKworICAgIGlmIChudW1zY2FsYXJyZXN1bHRzID4gMSk6CisgICAgICAgICMj IFRoZSBoZWxwZXIgaXMgYm9ndXMgd2hlbiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHJlc3VsdAor ICAgICAgICBmLndyaXRlKCJ2b2lkIEhFTFBFUiglcykoQ1BVSGV4YWdvblN0YXRlICplbnYpIHsg Qk9HVVNfSEVMUEVSKCVzKTsgfVxuIgorICAgICAgICAgICAgICAgICUgKHRhZywgdGFnKSkKKyAg ICBlbHNlOgorICAgICAgICAjIyBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIGlzIHRo ZSB0eXBlIG9mIHRoZSBkZXN0aW5hdGlvbgorICAgICAgICAjIyByZWdpc3RlcgorICAgICAgICBp PTAKKyAgICAgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAg ICAgICAgICBpZiAoaGV4X2NvbW1vbi5pc193cml0dGVuKHJlZ2lkKSk6CisgICAgICAgICAgICAg ICAgaWYgKGhleF9jb21tb24uaXNfcGFpcihyZWdpZCkpOgorICAgICAgICAgICAgICAgICAgICBn ZW5faGVscGVyX3JldHVybl90eXBlX3BhaXIoZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgICAgICAg ICAgICAgZWxpZiAoaGV4X2NvbW1vbi5pc19zaW5nbGUocmVnaWQpKToKKyAgICAgICAgICAgICAg ICAgICAgZ2VuX2hlbHBlcl9yZXR1cm5fdHlwZShmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAg ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBh cnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorICAgICAgICAgICAgaSArPSAxCisK KyAgICAgICAgaWYgKG51bXNjYWxhcnJlc3VsdHMgPT0gMCk6CisgICAgICAgICAgICBmLndyaXRl KCJ2b2lkIikKKyAgICAgICAgZi53cml0ZSgiIEhFTFBFUiglcykoQ1BVSGV4YWdvblN0YXRlICpl bnYiICUgdGFnKQorCisgICAgICAgIGkgPSAxCisKKyAgICAgICAgIyMgQXJndW1lbnRzIHRvIHRo ZSBoZWxwZXIgZnVuY3Rpb24gYXJlIHRoZSBzb3VyY2UgcmVncyBhbmQgaW1tZWRpYXRlcworICAg ICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgICAg IGlmIChoZXhfY29tbW9uLmlzX3JlYWQocmVnaWQpKToKKyAgICAgICAgICAgICAgICBnZW5faGVs cGVyX2FyZ19vcG4oZixyZWd0eXBlLHJlZ2lkLGksdGFnKQorICAgICAgICAgICAgICAgIGkgKz0g MQorICAgICAgICBmb3IgaW1tbGV0dCxiaXRzLGltbXNoaWZ0IGluIGltbXM6CisgICAgICAgICAg ICBnZW5faGVscGVyX2FyZ19pbW0oZixpbW1sZXR0KQorICAgICAgICAgICAgaSArPSAxCisgICAg ICAgIGlmIGhleF9jb21tb24ubmVlZF9zbG90KHRhZyk6CisgICAgICAgICAgICBpZiBpID4gMDog Zi53cml0ZSgiLCAiKQorICAgICAgICAgICAgZi53cml0ZSgidWludDMyX3Qgc2xvdCIpCisgICAg ICAgICAgICBpICs9IDEKKyAgICAgICAgaWYgaGV4X2NvbW1vbi5uZWVkX3BhcnQxKHRhZyk6Cisg ICAgICAgICAgICBpZiBpID4gMDogZi53cml0ZSgiLCAiKQorICAgICAgICAgICAgZi53cml0ZSgi dWludDMyX3QgcGFydDEiKQorICAgICAgICBmLndyaXRlKCIpXG57XG4iKQorICAgICAgICBpZiAo bm90IGhleF9jb21tb24ubmVlZF9zbG90KHRhZykpOgorICAgICAgICAgICAgZi53cml0ZSgiICAg IHVpbnQzMl90IHNsb3QgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSA0O1xuIiApCisgICAgICAg IGlmIGhleF9jb21tb24ubmVlZF9lYSh0YWcpOiBnZW5fZGVjbF9lYShmKQorICAgICAgICAjIyBE ZWNsYXJlIHRoZSByZXR1cm4gdmFyaWFibGUKKyAgICAgICAgaT0wCisgICAgICAgIGZvciByZWd0 eXBlLHJlZ2lkLHRvc3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICAgICAgaWYgKGhleF9jb21t b24uaXNfd3JpdGVvbmx5KHJlZ2lkKSk6CisgICAgICAgICAgICAgICAgZ2VuX2hlbHBlcl9kZXN0 X2RlY2xfb3BuKGYscmVndHlwZSxyZWdpZCxpKQorICAgICAgICAgICAgaSArPSAxCisKKyAgICAg ICAgaWYgJ0FfRlBPUCcgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ106CisgICAgICAgICAg ICBmLndyaXRlKCcgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7XG4nKTsKKworICAgICAgICBmLndy aXRlKCIgICAgJXNcbiIgJSBoZXhfY29tbW9uLnNlbWRpY3RbdGFnXSkKKworICAgICAgICBpZiAn QV9GUE9QJyBpbiBoZXhfY29tbW9uLmF0dHJpYmRpY3RbdGFnXToKKyAgICAgICAgICAgIGYud3Jp dGUoJyAgICBhcmNoX2Zwb3BfZW5kKGVudik7XG4nKTsKKworICAgICAgICAjIyBTYXZlL3JldHVy biB0aGUgcmV0dXJuIHZhcmlhYmxlCisgICAgICAgIGZvciByZWd0eXBlLHJlZ2lkLHRvc3MsbnVt cmVncyBpbiByZWdzOgorICAgICAgICAgICAgaWYgKGhleF9jb21tb24uaXNfd3JpdHRlbihyZWdp ZCkpOgorICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfcmV0dXJuX29wbihmLCByZWd0eXBlLCBy ZWdpZCwgaSkKKyAgICAgICAgZi53cml0ZSgifVxuXG4iKQorICAgICAgICAjIyBFbmQgb2YgdGhl IGhlbHBlciBkZWZpbml0aW9uCisKK2RlZiBtYWluKCk6CisgICAgaGV4X2NvbW1vbi5yZWFkX3Nl bWFudGljc19maWxlKHN5cy5hcmd2WzFdKQorICAgIGhleF9jb21tb24ucmVhZF9hdHRyaWJzX2Zp bGUoc3lzLmFyZ3ZbMl0pCisgICAgaGV4X2NvbW1vbi5yZWFkX292ZXJyaWRlc19maWxlKHN5cy5h cmd2WzNdKQorICAgIGhleF9jb21tb24uY2FsY3VsYXRlX2F0dHJpYnMoKQorICAgIHRhZ3JlZ3Mg PSBoZXhfY29tbW9uLmdldF90YWdyZWdzKCkKKyAgICB0YWdpbW1zID0gaGV4X2NvbW1vbi5nZXRf dGFnaW1tcygpCisKKyAgICB3aXRoIG9wZW4oc3lzLmFyZ3ZbNF0sICd3JykgYXMgZjoKKyAgICAg ICAgZm9yIHRhZyBpbiBoZXhfY29tbW9uLnRhZ3M6CisgICAgICAgICAgICAjIyBTa2lwIHRoZSBw cml2IGluc3RydWN0aW9ucworICAgICAgICAgICAgaWYgKCAiQV9QUklWIiBpbiBoZXhfY29tbW9u LmF0dHJpYmRpY3RbdGFnXSApIDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAg ICAgIyMgU2tpcCB0aGUgZ3Vlc3QgaW5zdHJ1Y3Rpb25zCisgICAgICAgICAgICBpZiAoICJBX0dV RVNUIiBpbiBoZXhfY29tbW9uLmF0dHJpYmRpY3RbdGFnXSApIDoKKyAgICAgICAgICAgICAgICBj b250aW51ZQorICAgICAgICAgICAgIyMgU2tpcCB0aGUgZGlhZyBpbnN0cnVjdGlvbnMKKyAgICAg ICAgICAgIGlmICggdGFnID09ICJZNl9kaWFnIiApIDoKKyAgICAgICAgICAgICAgICBjb250aW51 ZQorICAgICAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWcwIiApIDoKKyAgICAgICAgICAgICAg ICBjb250aW51ZQorICAgICAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWcxIiApIDoKKyAgICAg ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgKCBoZXhfY29tbW9uLnNraXBfcWVt dV9oZWxwZXIodGFnKSApOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAg IGdlbl9oZWxwZXJfZnVuY3Rpb24oZiwgdGFnLCB0YWdyZWdzLCB0YWdpbW1zKQorCitpZiBfX25h bWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFn b24vZ2VuX2hlbHBlcl9wcm90b3MucHkgYi90YXJnZXQvaGV4YWdvbi9nZW5faGVscGVyX3Byb3Rv cy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MDIxOWZkCi0tLSAvZGV2 L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vZ2VuX2hlbHBlcl9wcm90b3MucHkKQEAgLTAsMCAr MSwxNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBDb3B5cmlnaHQoYykg MjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVz ZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv cgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIworIyMgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMjCisK K2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0IGhleF9jb21tb24K KworIyMKKyMjIEhlbHBlcnMgZm9yIGdlbl9oZWxwZXJfcHJvdG90eXBlCisjIworZGVmX2hlbHBl cl90eXBlcyA9IHsKKyAgICAnTicgOiAnczMyJywKKyAgICAnTycgOiAnczMyJywKKyAgICAnUCcg OiAnczMyJywKKyAgICAnTScgOiAnczMyJywKKyAgICAnQycgOiAnczMyJywKKyAgICAnUicgOiAn czMyJywKKyAgICAnVicgOiAncHRyJywKKyAgICAnUScgOiAncHRyJworfQorCitkZWZfaGVscGVy X3R5cGVzX3BhaXIgPSB7CisgICAgJ1InIDogJ3M2NCcsCisgICAgJ0MnIDogJ3M2NCcsCisgICAg J1MnIDogJ3M2NCcsCisgICAgJ0cnIDogJ3M2NCcsCisgICAgJ1YnIDogJ3B0cicsCisgICAgJ1En IDogJ3B0cicKK30KKworZGVmIGdlbl9kZWZfaGVscGVyX29wbihmLCB0YWcsIHJlZ3R5cGUsIHJl Z2lkLCB0b3NzLCBudW1yZWdzLCBpKToKKyAgICBpZiAoaGV4X2NvbW1vbi5pc19wYWlyKHJlZ2lk KSk6CisgICAgICAgIGYud3JpdGUoIiwgJXMiICUgKGRlZl9oZWxwZXJfdHlwZXNfcGFpcltyZWd0 eXBlXSkpCisgICAgZWxpZiAoaGV4X2NvbW1vbi5pc19zaW5nbGUocmVnaWQpKToKKyAgICAgICAg Zi53cml0ZSgiLCAlcyIgJSAoZGVmX2hlbHBlcl90eXBlc1tyZWd0eXBlXSkpCisgICAgZWxzZToK KyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3Ms bnVtcmVncykKKworIyMKKyMjIEdlbmVyYXRlIHRoZSBERUZfSEVMUEVSIHByb3RvdHlwZSBmb3Ig YW4gaW5zdHJ1Y3Rpb24KKyMjICAgICBGb3IgQTJfYWRkOiBSZDMyPWFkZChSczMyLFJ0MzIpCisj IyAgICAgV2UgcHJvZHVjZToKKyMjICAgICAgICAgREVGX0hFTFBFUl8zKEEyX2FkZCwgczMyLCBl bnYsIHMzMiwgczMyKQorIyMKK2RlZiBnZW5faGVscGVyX3Byb3RvdHlwZShmLCB0YWcsIHRhZ3Jl Z3MsIHRhZ2ltbXMpOgorICAgIHJlZ3MgPSB0YWdyZWdzW3RhZ10KKyAgICBpbW1zID0gdGFnaW1t c1t0YWddCisKKyAgICBudW1yZXN1bHRzID0gMAorICAgIG51bXNjYWxhcnJlc3VsdHMgPSAwCisg ICAgbnVtc2NhbGFycmVhZHdyaXRlID0gMAorICAgIGZvciByZWd0eXBlLHJlZ2lkLHRvc3MsbnVt cmVncyBpbiByZWdzOgorICAgICAgICBpZiAoaGV4X2NvbW1vbi5pc193cml0dGVuKHJlZ2lkKSk6 CisgICAgICAgICAgICBudW1yZXN1bHRzICs9IDEKKyAgICAgICAgICAgIGlmIChoZXhfY29tbW9u LmlzX3NjYWxhcl9yZWcocmVndHlwZSkpOgorICAgICAgICAgICAgICAgIG51bXNjYWxhcnJlc3Vs dHMgKz0gMQorICAgICAgICBpZiAoaGV4X2NvbW1vbi5pc19yZWFkd3JpdGUocmVnaWQpKToKKyAg ICAgICAgICAgIGlmIChoZXhfY29tbW9uLmlzX3NjYWxhcl9yZWcocmVndHlwZSkpOgorICAgICAg ICAgICAgICAgIG51bXNjYWxhcnJlYWR3cml0ZSArPSAxCisKKyAgICBpZiAobnVtc2NhbGFycmVz dWx0cyA+IDEpOgorICAgICAgICAjIyBUaGUgaGVscGVyIGlzIGJvZ3VzIHdoZW4gdGhlcmUgaXMg bW9yZSB0aGFuIG9uZSByZXN1bHQKKyAgICAgICAgZi53cml0ZSgnREVGX0hFTFBFUl8xKCVzLCB2 b2lkLCBlbnYpXG4nICUgdGFnKQorICAgIGVsc2U6CisgICAgICAgICMjIEZpZ3VyZSBvdXQgaG93 IG1hbnkgYXJndW1lbnRzIHRoZSBoZWxwZXIgd2lsbCB0YWtlCisgICAgICAgIGlmIChudW1zY2Fs YXJyZXN1bHRzID09IDApOgorICAgICAgICAgICAgZGVmX2hlbHBlcl9zaXplID0gbGVuKHJlZ3Mp K2xlbihpbW1zKStudW1zY2FsYXJyZWFkd3JpdGUrMQorICAgICAgICAgICAgaWYgaGV4X2NvbW1v bi5uZWVkX3BhcnQxKHRhZyk6IGRlZl9oZWxwZXJfc2l6ZSArPSAxCisgICAgICAgICAgICBpZiBo ZXhfY29tbW9uLm5lZWRfc2xvdCh0YWcpOiBkZWZfaGVscGVyX3NpemUgKz0gMQorICAgICAgICAg ICAgZi53cml0ZSgnREVGX0hFTFBFUl8lcyglcycgJSAoZGVmX2hlbHBlcl9zaXplLCB0YWcpKQor ICAgICAgICAgICAgIyMgVGhlIHJldHVybiB0eXBlIGlzIHZvaWQKKyAgICAgICAgICAgIGYud3Jp dGUoJywgdm9pZCcgKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVmX2hlbHBlcl9zaXpl ID0gbGVuKHJlZ3MpK2xlbihpbW1zKStudW1zY2FsYXJyZWFkd3JpdGUKKyAgICAgICAgICAgIGlm IGhleF9jb21tb24ubmVlZF9wYXJ0MSh0YWcpOiBkZWZfaGVscGVyX3NpemUgKz0gMQorICAgICAg ICAgICAgaWYgaGV4X2NvbW1vbi5uZWVkX3Nsb3QodGFnKTogZGVmX2hlbHBlcl9zaXplICs9IDEK KyAgICAgICAgICAgIGYud3JpdGUoJ0RFRl9IRUxQRVJfJXMoJXMnICUgKGRlZl9oZWxwZXJfc2l6 ZSwgdGFnKSkKKworICAgICAgICAjIyBHZW5lcmF0ZSB0aGUgcWVtdSBERUZfSEVMUEVSIHR5cGUg Zm9yIGVhY2ggcmVzdWx0CisgICAgICAgIGk9MAorICAgICAgICBmb3IgcmVndHlwZSxyZWdpZCx0 b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgICAgIGlmIChoZXhfY29tbW9uLmlzX3dyaXR0 ZW4ocmVnaWQpKToKKyAgICAgICAgICAgICAgICBnZW5fZGVmX2hlbHBlcl9vcG4oZiwgdGFnLCBy ZWd0eXBlLCByZWdpZCwgdG9zcywgbnVtcmVncywgaSkKKyAgICAgICAgICAgICAgICBpICs9IDEK KworICAgICAgICAjIyBQdXQgdGhlIGVudiBiZXR3ZWVuIHRoZSBvdXRwdXRzIGFuZCBpbnB1dHMK KyAgICAgICAgZi53cml0ZSgnLCBlbnYnICkKKyAgICAgICAgaSArPSAxCisKKyAgICAgICAgIyMg R2VuZXJhdGUgdGhlIHFlbXUgdHlwZSBmb3IgZWFjaCBpbnB1dCBvcGVyYW5kIChyZWdzIGFuZCBp bW1lZGlhdGVzKQorICAgICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVn czoKKyAgICAgICAgICAgIGlmIChoZXhfY29tbW9uLmlzX3JlYWQocmVnaWQpKToKKyAgICAgICAg ICAgICAgICBnZW5fZGVmX2hlbHBlcl9vcG4oZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgdG9zcywg bnVtcmVncywgaSkKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgZm9yIGltbWxldHQs Yml0cyxpbW1zaGlmdCBpbiBpbW1zOgorICAgICAgICAgICAgZi53cml0ZSgiLCBzMzIiKQorCisg ICAgICAgICMjIEFkZCB0aGUgYXJndW1lbnRzIGZvciB0aGUgaW5zdHJ1Y3Rpb24gc2xvdCBhbmQg cGFydDEgKGlmIG5lZWRlZCkKKyAgICAgICAgaWYgaGV4X2NvbW1vbi5uZWVkX3Nsb3QodGFnKTog Zi53cml0ZSgnLCBpMzInICkKKyAgICAgICAgaWYgaGV4X2NvbW1vbi5uZWVkX3BhcnQxKHRhZyk6 IGYud3JpdGUoJyAsIGkzMicgKQorICAgICAgICBmLndyaXRlKCcpXG4nKQorCitkZWYgbWFpbigp OgorICAgIGhleF9jb21tb24ucmVhZF9zZW1hbnRpY3NfZmlsZShzeXMuYXJndlsxXSkKKyAgICBo ZXhfY29tbW9uLnJlYWRfYXR0cmlic19maWxlKHN5cy5hcmd2WzJdKQorICAgIGhleF9jb21tb24u cmVhZF9vdmVycmlkZXNfZmlsZShzeXMuYXJndlszXSkKKyAgICBoZXhfY29tbW9uLmNhbGN1bGF0 ZV9hdHRyaWJzKCkKKyAgICB0YWdyZWdzID0gaGV4X2NvbW1vbi5nZXRfdGFncmVncygpCisgICAg dGFnaW1tcyA9IGhleF9jb21tb24uZ2V0X3RhZ2ltbXMoKQorCisgICAgd2l0aCBvcGVuKHN5cy5h cmd2WzRdLCAndycpIGFzIGY6CisgICAgICAgIGZvciB0YWcgaW4gaGV4X2NvbW1vbi50YWdzOgor ICAgICAgICAgICAgIyMgU2tpcCB0aGUgcHJpdiBpbnN0cnVjdGlvbnMKKyAgICAgICAgICAgIGlm ICggIkFfUFJJViIgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ10gKSA6CisgICAgICAgICAg ICAgICAgY29udGludWUKKyAgICAgICAgICAgICMjIFNraXAgdGhlIGd1ZXN0IGluc3RydWN0aW9u cworICAgICAgICAgICAgaWYgKCAiQV9HVUVTVCIgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3Rh Z10gKSA6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMjIFNraXAgdGhl IGRpYWcgaW5zdHJ1Y3Rpb25zCisgICAgICAgICAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZyIgKSA6 CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmICggdGFnID09ICJZNl9k aWFnMCIgKSA6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmICggdGFn ID09ICJZNl9kaWFnMSIgKSA6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAg ICAgaWYgKCBoZXhfY29tbW9uLnNraXBfcWVtdV9oZWxwZXIodGFnKSApOgorICAgICAgICAgICAg ICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGdlbl9oZWxwZXJfcHJvdG90eXBlKGYsIHRhZywg dGFncmVncywgdGFnaW1tcykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWlu KCkKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2dlbl9vcF9hdHRyaWJzLnB5IGIvdGFyZ2V0 L2hleGFnb24vZ2VuX29wX2F0dHJpYnMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw MDAwMC4uODg0M2U0NQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2dlbl9vcF9h dHRyaWJzLnB5CkBAIC0wLDAgKzEsNDAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMK KyMjICBDb3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJ bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyMjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvcgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKyMjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZwor aW1wb3J0IGhleF9jb21tb24KKworZGVmIG1haW4oKToKKyAgICBoZXhfY29tbW9uLnJlYWRfc2Vt YW50aWNzX2ZpbGUoc3lzLmFyZ3ZbMV0pCisgICAgaGV4X2NvbW1vbi5yZWFkX2F0dHJpYnNfZmls ZShzeXMuYXJndlsyXSkKKyAgICBoZXhfY29tbW9uLmNhbGN1bGF0ZV9hdHRyaWJzKCkKKworICAg ICMjCisgICAgIyMgR2VuZXJhdGUgdGhlIG9wX2F0dHJpYnNfZ2VuZXJhdGVkLmggZmlsZQorICAg ICMjICAgICBMaXN0cyBhbGwgdGhlIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggaW5z dHJ1Y3Rpb24KKyAgICAjIworICAgIHdpdGggb3BlbihzeXMuYXJndlszXSwgJ3cnKSBhcyBmOgor ICAgICAgICBmb3IgdGFnIGluIGhleF9jb21tb24udGFnczoKKyAgICAgICAgICAgIGYud3JpdGUo J09QX0FUVFJJQiglcyxBVFRSSUJTKCVzKSlcbicgJSBcCisgICAgICAgICAgICAgICAgKHRhZywg JywnLmpvaW4oc29ydGVkKGhleF9jb21tb24uYXR0cmliZGljdFt0YWddKSkpKQorCitpZiBfX25h bWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFn b24vZ2VuX29wX3JlZ3MucHkgYi90YXJnZXQvaGV4YWdvbi9nZW5fb3BfcmVncy5weQpuZXcgZmls ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZDFlOTkwCi0tLSAvZGV2L251bGwKKysrIGIv dGFyZ2V0L2hleGFnb24vZ2VuX29wX3JlZ3MucHkKQEAgLTAsMCArMSwxMTEgQEAKKyMhL3Vzci9i aW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBDb3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21t IElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIworIyMgIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyMgIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisj IworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMjCisKK2ltcG9ydCBzeXMKK2ltcG9y dCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0IGhleF9jb21tb24KKworIyMKKyMjIEdlbmVyYXRl IHRoZSBvcF9yZWdzX2dlbmVyYXRlZC5oIGZpbGUKKyMjICAgICBMaXN0cyB0aGUgcmVnaXN0ZXIg YW5kIGltbWVkaWF0ZSBvcGVyYW5kcyBmb3IgZWFjaCBpbnN0cnVjdGlvbgorIyMKK2RlZiBjYWxj dWxhdGVfcmVnaWRfcmVnKHRhZyk6CisgICAgZGVmIGxldHRlcl9pbmMoeCk6IHJldHVybiBjaHIo b3JkKHgpKzEpCisgICAgb3JkZXJlZF9pbXBscmVncyA9IFsgJ1NQJywnRlAnLCdMUicgXQorICAg IHNyY2RzdF9sZXR0ID0gJ1gnCisgICAgc3JjX2xldHQgPSAnUycKKyAgICBkc3RfbGV0dCA9ICdE JworICAgIHJldHN0ciA9ICIiCisgICAgbWFwZGljdCA9IHt9CisgICAgZm9yIHJlZyBpbiBvcmRl cmVkX2ltcGxyZWdzOgorICAgICAgICByZWdfcmQgPSAwCisgICAgICAgIHJlZ193ciA9IDAKKyAg ICAgICAgaWYgKCdBX0lNUExJQ0lUX1dSSVRFU18nK3JlZykgaW4gaGV4X2NvbW1vbi5hdHRyaWJk aWN0W3RhZ106IHJlZ193ciA9IDEKKyAgICAgICAgaWYgcmVnX3JkIGFuZCByZWdfd3I6CisgICAg ICAgICAgICByZXRzdHIgKz0gc3JjZHN0X2xldHQKKyAgICAgICAgICAgIG1hcGRpY3Rbc3JjZHN0 X2xldHRdID0gcmVnCisgICAgICAgICAgICBzcmNkc3RfbGV0dCA9IGxldHRlcl9pbmMoc3JjZHN0 X2xldHQpCisgICAgICAgIGVsaWYgcmVnX3JkOgorICAgICAgICAgICAgcmV0c3RyICs9IHNyY19s ZXR0CisgICAgICAgICAgICBtYXBkaWN0W3NyY19sZXR0XSA9IHJlZworICAgICAgICAgICAgc3Jj X2xldHQgPSBsZXR0ZXJfaW5jKHNyY19sZXR0KQorICAgICAgICBlbGlmIHJlZ193cjoKKyAgICAg ICAgICAgIHJldHN0ciArPSBkc3RfbGV0dAorICAgICAgICAgICAgbWFwZGljdFtkc3RfbGV0dF0g PSByZWcKKyAgICAgICAgICAgIGRzdF9sZXR0ID0gbGV0dGVyX2luYyhkc3RfbGV0dCkKKyAgICBy ZXR1cm4gcmV0c3RyLG1hcGRpY3QKKworZGVmIGNhbGN1bGF0ZV9yZWdpZF9sZXR0ZXJzKHRhZyk6 CisgICAgcmV0c3RyLG1hcGRpY3QgPSBjYWxjdWxhdGVfcmVnaWRfcmVnKHRhZykKKyAgICByZXR1 cm4gcmV0c3RyCisKK2RlZiBzdHJpcF9yZWdfcHJlZml4KHgpOgorICAgIHk9eC5yZXBsYWNlKCdV UkVHLicsJycpCisgICAgeT15LnJlcGxhY2UoJ01SRUcuJywnJykKKyAgICByZXR1cm4geS5yZXBs YWNlKCdHUkVHLicsJycpCisKK2RlZiBtYWluKCk6CisgICAgaGV4X2NvbW1vbi5yZWFkX3NlbWFu dGljc19maWxlKHN5cy5hcmd2WzFdKQorICAgIGhleF9jb21tb24ucmVhZF9hdHRyaWJzX2ZpbGUo c3lzLmFyZ3ZbMl0pCisgICAgdGFncmVncyA9IGhleF9jb21tb24uZ2V0X3RhZ3JlZ3MoKQorICAg IHRhZ2ltbXMgPSBoZXhfY29tbW9uLmdldF90YWdpbW1zKCkKKworICAgIHdpdGggb3BlbihzeXMu YXJndlszXSwgJ3cnKSBhcyBmOgorICAgICAgICBmb3IgdGFnIGluIGhleF9jb21tb24udGFnczoK KyAgICAgICAgICAgIHJlZ3MgPSB0YWdyZWdzW3RhZ10KKyAgICAgICAgICAgIHJyZWdzID0gW10K KyAgICAgICAgICAgIHdyZWdzID0gW10KKyAgICAgICAgICAgIHJlZ2lkcyA9ICIiCisgICAgICAg ICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgICAg ICAgICBpZiBoZXhfY29tbW9uLmlzX3JlYWQocmVnaWQpOgorICAgICAgICAgICAgICAgICAgICBp ZiByZWdpZFswXSBub3QgaW4gcmVnaWRzOiByZWdpZHMgKz0gcmVnaWRbMF0KKyAgICAgICAgICAg ICAgICAgICAgcnJlZ3MuYXBwZW5kKHJlZ3R5cGUrcmVnaWQrbnVtcmVncykKKyAgICAgICAgICAg ICAgICBpZiBoZXhfY29tbW9uLmlzX3dyaXR0ZW4ocmVnaWQpOgorICAgICAgICAgICAgICAgICAg ICB3cmVncy5hcHBlbmQocmVndHlwZStyZWdpZCtudW1yZWdzKQorICAgICAgICAgICAgICAgICAg ICBpZiByZWdpZFswXSBub3QgaW4gcmVnaWRzOiByZWdpZHMgKz0gcmVnaWRbMF0KKyAgICAgICAg ICAgIGZvciBhdHRyaWIgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ106CisgICAgICAgICAg ICAgICAgaWYgaGV4X2NvbW1vbi5hdHRyaWJpbmZvW2F0dHJpYl1bJ3JyZWcnXToKKyAgICAgICAg ICAgICAgICAgICAgcnJlZ3MuYXBwZW5kKHN0cmlwX3JlZ19wcmVmaXgoYXR0cmliaW5mb1thdHRy aWJdWydycmVnJ10pKQorICAgICAgICAgICAgICAgIGlmIGhleF9jb21tb24uYXR0cmliaW5mb1th dHRyaWJdWyd3cmVnJ106CisgICAgICAgICAgICAgICAgICAgIHdyZWdzLmFwcGVuZChzdHJpcF9y ZWdfcHJlZml4KGF0dHJpYmluZm9bYXR0cmliXVsnd3JlZyddKSkKKyAgICAgICAgICAgIHJlZ2lk cyArPSBjYWxjdWxhdGVfcmVnaWRfbGV0dGVycyh0YWcpCisgICAgICAgICAgICBmLndyaXRlKCdS RUdJTkZPKCVzLCIlcyIsXHQvKlJEOiovXHQiJXMiLFx0LypXUjoqL1x0IiVzIilcbicgJSBcCisg ICAgICAgICAgICAgICAgKHRhZyxyZWdpZHMsIiwiLmpvaW4ocnJlZ3MpLCIsIi5qb2luKHdyZWdz KSkpCisKKyAgICAgICAgZm9yIHRhZyBpbiBoZXhfY29tbW9uLnRhZ3M6CisgICAgICAgICAgICBp bW1zID0gdGFnaW1tc1t0YWddCisgICAgICAgICAgICBmLndyaXRlKCAnSU1NSU5GTyglcycgJSB0 YWcpCisgICAgICAgICAgICBpZiBub3QgaW1tczoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcn JywndScsMCwwLCdVJywwLDAnJycpCisgICAgICAgICAgICBmb3Igc2lnbixzaXplLHNoYW10IGlu IGltbXM6CisgICAgICAgICAgICAgICAgaWYgc2lnbiA9PSAncic6IHNpZ24gPSAncycKKyAgICAg ICAgICAgICAgICBpZiBub3Qgc2hhbXQ6CisgICAgICAgICAgICAgICAgICAgIHNoYW10ID0gIjAi CisgICAgICAgICAgICAgICAgZi53cml0ZSgnJycsJyVzJywlcywlcycnJyAlIChzaWduLHNpemUs c2hhbXQpKQorICAgICAgICAgICAgaWYgbGVuKGltbXMpID09IDE6CisgICAgICAgICAgICAgICAg aWYgc2lnbi5pc3VwcGVyKCk6CisgICAgICAgICAgICAgICAgICAgIG15dSA9ICd1JworICAgICAg ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG15dSA9ICdVJworICAgICAgICAg ICAgICAgIGYud3JpdGUoJycnLCclcycsMCwwJycnICUgbXl1KQorICAgICAgICAgICAgZi53cml0 ZSgnKVxuJykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAt LWdpdCBhL3RhcmdldC9oZXhhZ29uL2dlbl9vcGNvZGVzX2RlZi5weSBiL3RhcmdldC9oZXhhZ29u L2dlbl9vcGNvZGVzX2RlZi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5m NWJkMzg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vZ2VuX29wY29kZXNfZGVm LnB5CkBAIC0wLDAgKzEsMzcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBD b3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFs bCBSaWdodHMgUmVzZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyMjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisj IworIyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKyMjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0 IGhleF9jb21tb24KKworZGVmIG1haW4oKToKKyAgICBoZXhfY29tbW9uLnJlYWRfc2VtYW50aWNz X2ZpbGUoc3lzLmFyZ3ZbMV0pCisKKyAgICAjIworICAgICMjIEdlbmVyYXRlIHRoZSBvcGNvZGVz X2RlZl9nZW5lcmF0ZWQuaCBmaWxlCisgICAgIyMgICAgIEdpdmVzIGEgbGlzdCBvZiBhbGwgdGhl IG9wY29kZXMKKyAgICAjIworICAgIHdpdGggb3BlbihzeXMuYXJndlszXSwgJ3cnKSBhcyBmOgor ICAgICAgICBmb3IgdGFnIGluIGhleF9jb21tb24udGFnczoKKyAgICAgICAgICAgIGYud3JpdGUg KCAiT1BDT0RFKCVzKSxcbiIgJSAodGFnKSApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6 CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9nZW5fcHJpbnRpbnNuLnB5 IGIvdGFyZ2V0L2hleGFnb24vZ2VuX3ByaW50aW5zbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp bmRleCAwMDAwMDAwLi41Mjc2MTIyCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24v Z2VuX3ByaW50aW5zbi5weQpAQCAtMCwwICsxLDE3NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u MworCisjIworIyMgIENvcHlyaWdodChjKSAyMDE5LTIwMjAgUXVhbGNvbW0gSW5ub3ZhdGlvbiBD ZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMjCisjIyAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMj ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorIyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyMjCisjIyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMjCisjIyAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyMjICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgorIyMKKworaW1wb3J0IHN5cworaW1wb3J0IHJlCitpbXBvcnQg c3RyaW5nCitpbXBvcnQgaGV4X2NvbW1vbgorCisjIworIyMgR2VuZXJhdGUgdGhlIHByaW50aW5z bl9nZW5lcmF0ZWQuaCBmaWxlCisjIyAgICAgRGF0YSBmb3IgcHJpbnRpbmcgZWFjaCBpbnN0cnVj dGlvbiAoZm9ybWF0IHN0cmluZyArIG9wZXJhbmRzKQorIyMKK2RlZiByZWdwcmludGVyKG0pOgor ICAgIHN0ciA9IG0uZ3JvdXAoMSkKKyAgICBzdHIgKz0gIjoiLmpvaW4oWyIlZCJdKmxlbihtLmdy b3VwKDIpKSkKKyAgICBzdHIgKz0gbS5ncm91cCgzKQorICAgIGlmICgnUycgaW4gbS5ncm91cCgx KSkgYW5kIChsZW4obS5ncm91cCgyKSkgPT0gMSk6CisgICAgICAgIHN0ciArPSAiLyVzIgorICAg IGVsaWYgKCdDJyBpbiBtLmdyb3VwKDEpKSBhbmQgKGxlbihtLmdyb3VwKDIpKSA9PSAxKToKKyAg ICAgICAgc3RyICs9ICIvJXMiCisgICAgcmV0dXJuIHN0cgorCitkZWYgc3BhY2lmeShzKToKKyAg ICAjIFJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgYW55IG9wZXJhdG9yIHRoYXQgY29u dGFpbnMgJz0nIGNoYXJhY3RlcjoKKyAgICBvcHN3aXRoZXF1YWxfcmUgPSAnWy0rXiZ8ITw+PV0/ PScKKyAgICAjIFJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgYW55IGFzc2lnbm1lbnQg b3BlcmF0b3IuCisgICAgYXNzaWdubWVudF9yZSA9ICdbLSteJnxdPz0nCisKKyAgICAjIE91dCBv ZiB0aGUgb3BlcmF0b3JzIHRoYXQgY29udGFpbiB0aGUgPSBzaWduLCBpZiB0aGUgb3BlcmF0b3Ig aXMgYWxzbyBhbgorICAgICMgYXNzaWdubWVudCwgc3BhY2VzIHdpbGwgYmUgYWRkZWQgYXJvdW5k IGl0LCB1bmxlc3MgaXQncyBlbmNsb3NlZCB3aXRoaW4KKyAgICAjIHBhcmVudGhlc2VzLCBvciBz cGFjZXMgYXJlIGFscmVhZHkgcHJlc2VudC4KKworICAgIGVxdWFscyA9IHJlLmNvbXBpbGUob3Bz d2l0aGVxdWFsX3JlKQorICAgIGFzc2lnbiA9IHJlLmNvbXBpbGUoYXNzaWdubWVudF9yZSkKKwor ICAgIHNsZW4gPSBsZW4ocykKKyAgICBwYXJlbl9jb3VudCA9IHt9CisgICAgaSA9IDAKKyAgICBw YyA9IDAKKyAgICB3aGlsZSBpIDwgc2xlbjoKKyAgICAgICAgYyA9IHNbaV0KKyAgICAgICAgaWYg YyA9PSAnKCc6CisgICAgICAgICAgICBwYyArPSAxCisgICAgICAgIGVsaWYgYyA9PSAnKSc6Cisg ICAgICAgICAgICBwYyAtPSAxCisgICAgICAgIHBhcmVuX2NvdW50W2ldID0gcGMKKyAgICAgICAg aSArPSAxCisKKyAgICAjIEl0ZXJhdGUgb3ZlciBhbGwgb3BlcmF0b3JzIHRoYXQgY29udGFpbiB0 aGUgZXF1YWwgc2lnbi4gSWYgYW55CisgICAgIyBtYXRjaCBpcyBhbHNvIGFuIGFzc2lnbm1lbnQg b3BlcmF0b3IsIGFkZCBzcGFjZXMgYXJvdW5kIGl0IGlmCisgICAgIyB0aGUgcGFyZW50aGVzaXMg Y291bnQgaXMgMC4KKyAgICBwb3MgPSAwCisgICAgb3V0ID0gW10KKyAgICBmb3IgbSBpbiBlcXVh bHMuZmluZGl0ZXIocyk6CisgICAgICAgIG1zID0gbS5zdGFydCgpCisgICAgICAgIG1lID0gbS5l bmQoKQorICAgICAgICAjIHQgaXMgdGhlIHN0cmluZyB0aGF0IG1hdGNoZWQgb3Bzd2l0aGVxdWFs X3JlLgorICAgICAgICB0ID0gbS5zdHJpbmdbbXM6bWVdCisgICAgICAgIG91dCArPSBzW3Bvczpt c10KKyAgICAgICAgcG9zID0gbWUKKyAgICAgICAgaWYgcGFyZW5fY291bnRbbXNdID09IDA6Cisg ICAgICAgICAgICAjIENoZWNrIGlmIHRoZSBlbnRpcmUgc3RyaW5nIHQgaXMgYW4gYXNzaWdubWVu dC4KKyAgICAgICAgICAgIGFtID0gYXNzaWduLm1hdGNoKHQpCisgICAgICAgICAgICBpZiBhbSBh bmQgbGVuKGFtLmdyb3VwKDApKSA9PSBtZS1tczoKKyAgICAgICAgICAgICAgICAjIERvbid0IGFk ZCBzcGFjZXMgaWYgdGhleSBhcmUgYWxyZWFkeSB0aGVyZS4KKyAgICAgICAgICAgICAgICBpZiBt cyA+IDAgYW5kIHNbbXMtMV0gIT0gJyAnOgorICAgICAgICAgICAgICAgICAgICBvdXQuYXBwZW5k KCcgJykKKyAgICAgICAgICAgICAgICBvdXQgKz0gdAorICAgICAgICAgICAgICAgIGlmIG1lIDwg c2xlbiBhbmQgc1ttZV0gIT0gJyAnOgorICAgICAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKCcg JykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIElmIHRoaXMgaXMgbm90IGFu IGFzc2lnbm1lbnQsIGp1c3QgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQKKyAgICAgICAgIyBzdHJp bmcuCisgICAgICAgIG91dCArPSB0CisKKyAgICAjIEFwcGVuZCB0aGUgcmVtYWluaW5nIHBhcnQg b2YgdGhlIHN0cmluZy4KKyAgICBvdXQgKz0gc1twb3M6bGVuKHMpXQorICAgIHJldHVybiAnJy5q b2luKG91dCkKKworZGVmIG1haW4oKToKKyAgICBoZXhfY29tbW9uLnJlYWRfc2VtYW50aWNzX2Zp bGUoc3lzLmFyZ3ZbMV0pCisgICAgaGV4X2NvbW1vbi5yZWFkX2F0dHJpYnNfZmlsZShzeXMuYXJn dlsyXSkKKworICAgIGltbWV4dF9jYXNlcmUgPSByZS5jb21waWxlKHInSU1NRVhUXCgoW0EtWmEt el0pJykKKworICAgIHdpdGggb3BlbihzeXMuYXJndlszXSwgJ3cnKSBhcyBmOgorICAgICAgICBm b3IgdGFnIGluIGhleF9jb21tb24udGFnczoKKyAgICAgICAgICAgIGlmIG5vdCBoZXhfY29tbW9u LmJlaGRpY3RbdGFnXTogY29udGludWUKKyAgICAgICAgICAgIGV4dGVuZGFibGVfdXBwZXJfaW1t ID0gRmFsc2UKKyAgICAgICAgICAgIGV4dGVuZGFibGVfbG93ZXJfaW1tID0gRmFsc2UKKyAgICAg ICAgICAgIG0gPSBpbW1leHRfY2FzZXJlLnNlYXJjaChoZXhfY29tbW9uLnNlbWRpY3RbdGFnXSkK KyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgaWYgbS5ncm91cCgxKS5pc3VwcGVy KCk6CisgICAgICAgICAgICAgICAgICAgIGV4dGVuZGFibGVfdXBwZXJfaW1tID0gVHJ1ZQorICAg ICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGV4dGVuZGFibGVfbG93ZXJf aW1tID0gVHJ1ZQorICAgICAgICAgICAgYmVoID0gaGV4X2NvbW1vbi5iZWhkaWN0W3RhZ10KKyAg ICAgICAgICAgIGJlaCA9IGhleF9jb21tb24ucmVncmUuc3ViKHJlZ3ByaW50ZXIsYmVoKQorICAg ICAgICAgICAgYmVoID0gaGV4X2NvbW1vbi5hYnNpbW1yZS5zdWIociIjJXMweCV4IixiZWgpCisg ICAgICAgICAgICBiZWggPSBoZXhfY29tbW9uLnJlbGltbXJlLnN1YihyIlBDKyVzJWQiLGJlaCkK KyAgICAgICAgICAgIGJlaCA9IHNwYWNpZnkoYmVoKQorICAgICAgICAgICAgIyBQcmludCBvdXQg YSBsaXRlcmFsICIlcyIgYXQgdGhlIGVuZCwgdXNlZCB0byBtYXRjaCBlbXB0eSBzdHJpbmcKKyAg ICAgICAgICAgICMgc28gQyB3b24ndCBjb21wbGFpbiBhdCB1cworICAgICAgICAgICAgaWYgKCJB X1ZFQ1giIGluIGhleF9jb21tb24uYXR0cmliZGljdFt0YWddKToKKyAgICAgICAgICAgICAgICBt YWNuYW1lID0gIkRFRl9WRUNYX1BSSU5USU5GTyIKKyAgICAgICAgICAgIGVsc2U6IG1hY25hbWUg PSAiREVGX1BSSU5USU5GTyIKKyAgICAgICAgICAgIGYud3JpdGUoJyVzKCVzLCIlcyUlcyInICUg KG1hY25hbWUsdGFnLGJlaCkpCisgICAgICAgICAgICByZWdzX29yX2ltbXMgPSBcCisgICAgICAg ICAgICAgICAgaGV4X2NvbW1vbi5yZWdfb3JfaW1tcmUuZmluZGFsbChoZXhfY29tbW9uLmJlaGRp Y3RbdGFnXSkKKyAgICAgICAgICAgIHJpID0gMAorICAgICAgICAgICAgc2VlbnJlZ3MgPSB7fQor ICAgICAgICAgICAgZm9yIGFsbHJlZ3MsYSxiLGMsZCxhbGxpbW0saW1tbGV0dCxiaXRzLGltbXNo aWZ0IGluIHJlZ3Nfb3JfaW1tczoKKyAgICAgICAgICAgICAgICBpZiBhOgorICAgICAgICAgICAg ICAgICAgICAjcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgYiBpbiBzZWVucmVnczoK KyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ25vID0gc2VlbnJlZ3NbYl0KKyAgICAgICAgICAg ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ25vID0gcmkKKyAgICAg ICAgICAgICAgICAgICAgaWYgbGVuKGIpID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBm LndyaXRlKCcsIGluc24tPnJlZ25vWyVkXScgJSByZWdubykKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmICdTJyBpbiBhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJywg c3JlZzJzdHIoaW5zbi0+cmVnbm9bJWRdKScgJSByZWdubykKKyAgICAgICAgICAgICAgICAgICAg ICAgIGVsaWYgJ0MnIGluIGE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgn LCBjcmVnMnN0cihpbnNuLT5yZWdub1slZF0pJyAlIHJlZ25vKQorICAgICAgICAgICAgICAgICAg ICBlbGlmIGxlbihiKSA9PSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLCBp bnNuLT5yZWdub1slZF0gKyAxLCBpbnNuLT5yZWdub1slZF0nICUgXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChyZWdubyxyZWdubykpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiUHV0IHNvbWUgc3R1ZmYgdG8gaGFuZGxlIHF1 YWRzIGhlcmUiKQorICAgICAgICAgICAgICAgICAgICBpZiBiIG5vdCBpbiBzZWVucmVnczoKKyAg ICAgICAgICAgICAgICAgICAgICAgIHNlZW5yZWdzW2JdID0gcmkKKyAgICAgICAgICAgICAgICAg ICAgICAgIHJpICs9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg ICAjaW1tZWRpYXRlCisgICAgICAgICAgICAgICAgICAgIGlmIChpbW1sZXR0LmlzdXBwZXIoKSk6 CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHRlbmRhYmxlX3VwcGVyX2ltbToKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiBpbW1sZXR0IGluICdyUic6CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyxpbnNuLT5leHRlbnNpb25fdmFsaWQ/IiMjIjoi IicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZi53cml0ZSgnLGluc24tPmV4dGVuc2lvbl92YWxpZD8iIyI6IiInKQor ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmLndyaXRlKCcsIiInKQorICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSAxCisgICAgICAg ICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHRlbmRhYmxl X2xvd2VyX2ltbToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbW1sZXR0IGluICdy Uic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyxpbnNuLT5leHRl bnNpb25fdmFsaWQ/IiMjIjoiIicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLGluc24tPmV4dGVuc2lv bl92YWxpZD8iIyI6IiInKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCcsIiInKQorICAgICAgICAgICAgICAgICAgICAg ICAgaWkgPSAwCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJywgaW5zbi0+aW1tZWRbJWRd JyAlIGlpKQorICAgICAgICAgICAgIyBhcHBlbmQgZW1wdHkgc3RyaW5nIHNvIHRoZXJlIGlzIGF0 IGxlYXN0IG9uZSBtb3JlIGFyZworICAgICAgICAgICAgZi53cml0ZSgnLCIiKVxuJykKKworaWYg X19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3RhcmdldC9o ZXhhZ29uL2dlbl9zaG9ydGNvZGUucHkgYi90YXJnZXQvaGV4YWdvbi9nZW5fc2hvcnRjb2RlLnB5 Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyMDk0NWIKLS0tIC9kZXYvbnVs bAorKysgYi90YXJnZXQvaGV4YWdvbi9nZW5fc2hvcnRjb2RlLnB5CkBAIC0wLDAgKzEsNjMgQEAK KyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBDb3B5cmlnaHQoYykgMjAxOS0yMDIw IFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisj IworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyMgIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIworIyMgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMjCisKK2ltcG9ydCBz eXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0IGhleF9jb21tb24KKworZGVmIGdl bl9zaG9ydGNvZGUoZiwgdGFnKToKKyAgICBmLndyaXRlKCdERUZfU0hPUlRDT0RFKCVzLCAlcylc bicgJSAodGFnLCBoZXhfY29tbW9uLnNlbWRpY3RbdGFnXSkpCisKK2RlZiBtYWluKCk6CisgICAg aGV4X2NvbW1vbi5yZWFkX3NlbWFudGljc19maWxlKHN5cy5hcmd2WzFdKQorICAgIGhleF9jb21t b24ucmVhZF9hdHRyaWJzX2ZpbGUoc3lzLmFyZ3ZbMl0pCisgICAgaGV4X2NvbW1vbi5jYWxjdWxh dGVfYXR0cmlicygpCisgICAgdGFncmVncyA9IGhleF9jb21tb24uZ2V0X3RhZ3JlZ3MoKQorICAg IHRhZ2ltbXMgPSBoZXhfY29tbW9uLmdldF90YWdpbW1zKCkKKworICAgICMjCisgICAgIyMgR2Vu ZXJhdGUgdGhlIHNob3J0Y29kZV9nZW5lcmF0ZWQuaCBmaWxlCisgICAgIyMKKyAgICB3aXRoIG9w ZW4oc3lzLmFyZ3ZbM10sICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgiI2lmbmRlZiBERUZf U0hPUlRDT0RFXG4iKQorICAgICAgICBmLndyaXRlKCIjZGVmaW5lIERFRl9TSE9SVENPREUoVEFH LFNIT1JUQ09ERSkgICAgLyogTm90aGluZyAqL1xuIikKKyAgICAgICAgZi53cml0ZSgiI2VuZGlm XG4iKQorCisgICAgICAgIGZvciB0YWcgaW4gaGV4X2NvbW1vbi50YWdzOgorICAgICAgICAgICAg IyMgU2tpcCB0aGUgcHJpdiBpbnN0cnVjdGlvbnMKKyAgICAgICAgICAgIGlmICggIkFfUFJJViIg aW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ10gKSA6CisgICAgICAgICAgICAgICAgY29udGlu dWUKKyAgICAgICAgICAgICMjIFNraXAgdGhlIGd1ZXN0IGluc3RydWN0aW9ucworICAgICAgICAg ICAgaWYgKCAiQV9HVUVTVCIgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ10gKSA6CisgICAg ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMjIFNraXAgdGhlIGRpYWcgaW5zdHJ1 Y3Rpb25zCisgICAgICAgICAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZyIgKSA6CisgICAgICAgICAg ICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmICggdGFnID09ICJZNl9kaWFnMCIgKSA6Cisg ICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmICggdGFnID09ICJZNl9kaWFn MSIgKSA6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZ2VuX3Nob3J0 Y29kZShmLCB0YWcpCisKKyAgICAgICAgZi53cml0ZSgiI3VuZGVmIERFRl9TSE9SVENPREVcbiIp CisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS90 YXJnZXQvaGV4YWdvbi9nZW5fdGNnX2Z1bmNfdGFibGUucHkgYi90YXJnZXQvaGV4YWdvbi9nZW5f dGNnX2Z1bmNfdGFibGUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDgx MmZkOAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2dlbl90Y2dfZnVuY190YWJs ZS5weQpAQCAtMCwwICsxLDU4IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKKyMjCisjIyAg Q29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBB bGwgUmlnaHRzIFJlc2VydmVkLgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisjIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgTGljZW5zZSwgb3IKKyMjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor IyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyMjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIyMKKyMjICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisjIworCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2ltcG9y dCBoZXhfY29tbW9uCisKK2RlZiBtYWluKCk6CisgICAgaGV4X2NvbW1vbi5yZWFkX3NlbWFudGlj c19maWxlKHN5cy5hcmd2WzFdKQorICAgIGhleF9jb21tb24ucmVhZF9hdHRyaWJzX2ZpbGUoc3lz LmFyZ3ZbMl0pCisgICAgaGV4X2NvbW1vbi5jYWxjdWxhdGVfYXR0cmlicygpCisgICAgdGFncmVn cyA9IGhleF9jb21tb24uZ2V0X3RhZ3JlZ3MoKQorICAgIHRhZ2ltbXMgPSBoZXhfY29tbW9uLmdl dF90YWdpbW1zKCkKKworICAgIHdpdGggb3BlbihzeXMuYXJndlszXSwgJ3cnKSBhcyBmOgorICAg ICAgICBmLndyaXRlKCIjaWZuZGVmIEhFWEFHT05fRlVOQ19UQUJMRV9IXG4iKQorICAgICAgICBm LndyaXRlKCIjZGVmaW5lIEhFWEFHT05fRlVOQ19UQUJMRV9IXG5cbiIpCisKKyAgICAgICAgZi53 cml0ZSgiY29uc3QgU2VtYW50aWNJbnNuIG9wY29kZV9nZW5wdHJbWFhfTEFTVF9PUENPREVdID0g e1xuIikKKyAgICAgICAgZm9yIHRhZyBpbiBoZXhfY29tbW9uLnRhZ3M6CisgICAgICAgICAgICAj IyBTa2lwIHRoZSBwcml2IGluc3RydWN0aW9ucworICAgICAgICAgICAgaWYgKCAiQV9QUklWIiBp biBoZXhfY29tbW9uLmF0dHJpYmRpY3RbdGFnXSApIDoKKyAgICAgICAgICAgICAgICBjb250aW51 ZQorICAgICAgICAgICAgIyMgU2tpcCB0aGUgZ3Vlc3QgaW5zdHJ1Y3Rpb25zCisgICAgICAgICAg ICBpZiAoICJBX0dVRVNUIiBpbiBoZXhfY29tbW9uLmF0dHJpYmRpY3RbdGFnXSApIDoKKyAgICAg ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyMgU2tpcCB0aGUgZGlhZyBpbnN0cnVj dGlvbnMKKyAgICAgICAgICAgIGlmICggdGFnID09ICJZNl9kaWFnIiApIDoKKyAgICAgICAgICAg ICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWcwIiApIDoKKyAg ICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWcx IiApIDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmLndyaXRlKCIg ICAgWyVzXSA9IGdlbmVyYXRlXyVzLFxuIiAlICh0YWcsIHRhZykpCisgICAgICAgIGYud3JpdGUo In07XG5cbiIpCisKKyAgICAgICAgZi53cml0ZSgiI2VuZGlmICAgIC8qIEhFWEFHT05fRlVOQ19U QUJMRV9IICovXG4iKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpk aWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vZ2VuX3RjZ19mdW5jcy5weSBiL3RhcmdldC9oZXhh Z29uL2dlbl90Y2dfZnVuY3MucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u YWE4NDZkMgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2dlbl90Y2dfZnVuY3Mu cHkKQEAgLTAsMCArMSw1MzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBD b3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFs bCBSaWdodHMgUmVzZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyMjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisj IworIyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKyMjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0 IGhleF9jb21tb24KKworIyMKKyMjIEhlbHBlcnMgZm9yIGdlbl90Y2dfZnVuYworIyMKK2RlZiBn ZW5fZGVjbF9lYV90Y2coZiwgdGFnKToKKyAgICBpZiAoJ0FfQ09OREVYRUMnIGluIGhleF9jb21t b24uYXR0cmliZGljdFt0YWddIG9yCisgICAgICAgICdBX0xPQUQnIGluIGhleF9jb21tb24uYXR0 cmliZGljdFt0YWddKToKKyAgICAgICAgZi53cml0ZSgiICAgIFRDR3YgRUEgPSB0Y2dfdGVtcF9s b2NhbF9uZXcoKTtcbiIpCisgICAgZWxzZToKKyAgICAgICAgZi53cml0ZSgiICAgIFRDR3YgRUEg PSB0Y2dfdGVtcF9uZXcoKTtcbiIpCisKK2RlZiBnZW5fZnJlZV9lYV90Y2coZik6CisgICAgZi53 cml0ZSgiICAgIHRjZ190ZW1wX2ZyZWUoRUEpO1xuIikKKworZGVmIGdlbnB0cl9kZWNsX3BhaXJf d3JpdGVibGUoZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgcmVnbm8pOgorICAgIHJlZ049IiVzJXNO IiAlIChyZWd0eXBlLHJlZ2lkKQorICAgIGYud3JpdGUoIiAgICBUQ0d2X2k2NCAlcyVzViA9IHRj Z190ZW1wX2xvY2FsX25ld19pNjQoKTtcbiIgJSBcCisgICAgICAgIChyZWd0eXBlLCByZWdpZCkp CisgICAgaWYgKHJlZ3R5cGUgPT0gIkMiKToKKyAgICAgICAgZi53cml0ZSgiICAgIGNvbnN0IGlu dCAlcyA9IGluc24tPnJlZ25vWyVkXSArIEhFWF9SRUdfU0EwO1xuIiAlIFwKKyAgICAgICAgICAg IChyZWdOLCByZWdubykpCisgICAgZWxzZToKKyAgICAgICAgZi53cml0ZSgiICAgIGNvbnN0IGlu dCAlcyA9IGluc24tPnJlZ25vWyVkXTtcbiIgJSAocmVnTiwgcmVnbm8pKQorICAgIGlmICgnQV9D T05ERVhFQycgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ10pOgorICAgICAgICBmLndyaXRl KCIgICAgaWYgKCFpc19wcmVsb2FkZWQoY3R4LCAlcykpIHtcbiIgJSByZWdOKQorICAgICAgICBm LndyaXRlKCIgICAgICAgIHRjZ19nZW5fbW92X3RsKGhleF9uZXdfdmFsdWVbJXNdLCBoZXhfZ3By WyVzXSk7XG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVnTiwgcmVnTikp CisgICAgICAgIGYud3JpdGUoIiAgICB9XG4iKQorICAgICAgICBmLndyaXRlKCIgICAgaWYgKCFp c19wcmVsb2FkZWQoY3R4LCAlcyArIDEpKSB7XG4iICUgcmVnTikKKyAgICAgICAgZi53cml0ZSgi ICAgICAgICB0Y2dfZ2VuX21vdl90bChoZXhfbmV3X3ZhbHVlWyVzICsgMV0sIGhleF9ncHJbJXMg KyAxXSk7XG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVnTiwgcmVnTikp CisgICAgICAgIGYud3JpdGUoIiAgICB9XG4iKQorCitkZWYgZ2VucHRyX2RlY2xfd3JpdGVibGUo ZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgcmVnbm8pOgorICAgIHJlZ049IiVzJXNOIiAlIChyZWd0 eXBlLHJlZ2lkKQorICAgIGYud3JpdGUoIiAgICBUQ0d2ICVzJXNWID0gdGNnX3RlbXBfbG9jYWxf bmV3KCk7XG4iICUgXAorICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgIGlmIChyZWd0eXBl ID09ICJDIik6CisgICAgICAgIGYud3JpdGUoIiAgICBjb25zdCBpbnQgJXMgPSBpbnNuLT5yZWdu b1slZF0gKyBIRVhfUkVHX1NBMDtcbiIgJSBcCisgICAgICAgICAgICAocmVnTiwgcmVnbm8pKQor ICAgIGVsc2U6CisgICAgICAgIGYud3JpdGUoIiAgICBjb25zdCBpbnQgJXMgPSBpbnNuLT5yZWdu b1slZF07XG4iICUgKHJlZ04sIHJlZ25vKSkKKyAgICBpZiAoJ0FfQ09OREVYRUMnIGluIGhleF9j b21tb24uYXR0cmliZGljdFt0YWddKToKKyAgICAgICAgZi53cml0ZSgiICAgIGlmICghaXNfcHJl bG9hZGVkKGN0eCwgJXMpKSB7XG4iICUgcmVnTikKKyAgICAgICAgZi53cml0ZSgiICAgICAgICB0 Y2dfZ2VuX21vdl90bChoZXhfbmV3X3ZhbHVlWyVzXSwgaGV4X2dwclslc10pO1xuIiAlIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ04sIHJlZ04pKQorICAgICAgICBmLndyaXRl KCIgICAgfVxuIikKKworZGVmIGdlbnB0cl9kZWNsKGYsIHRhZywgcmVndHlwZSwgcmVnaWQsIHJl Z25vKToKKyAgICByZWdOPSIlcyVzTiIgJSAocmVndHlwZSxyZWdpZCkKKyAgICBpZiAocmVndHlw ZSA9PSAiUiIpOgorICAgICAgICBpZiAocmVnaWQgaW4geyJzcyIsICJ0dCJ9KToKKyAgICAgICAg ICAgIGYud3JpdGUoIiAgICBUQ0d2X2k2NCAlcyVzViA9IHRjZ190ZW1wX2xvY2FsX25ld19pNjQo KTtcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgICAg IGYud3JpdGUoIiAgICBjb25zdCBpbnQgJXMgPSBpbnNuLT5yZWdub1slZF07XG4iICUgXAorICAg ICAgICAgICAgICAgIChyZWdOLCByZWdubykpCisgICAgICAgIGVsaWYgKHJlZ2lkIGluIHsiZGQi LCAiZWUiLCAieHgiLCAieXkifSk6CisgICAgICAgICAgICBnZW5wdHJfZGVjbF9wYWlyX3dyaXRl YmxlKGYsIHRhZywgcmVndHlwZSwgcmVnaWQsIHJlZ25vKQorICAgICAgICBlbGlmIChyZWdpZCBp biB7InMiLCAidCIsICJ1IiwgInYifSk6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgVENHdiAl cyVzViA9IGhleF9ncHJbaW5zbi0+cmVnbm9bJWRdXTtcbiIgJSBcCisgICAgICAgICAgICAgICAg KHJlZ3R5cGUsIHJlZ2lkLCByZWdubykpCisgICAgICAgIGVsaWYgKHJlZ2lkIGluIHsiZCIsICJl IiwgIngiLCAieSJ9KToKKyAgICAgICAgICAgIGdlbnB0cl9kZWNsX3dyaXRlYmxlKGYsIHRhZywg cmVndHlwZSwgcmVnaWQsIHJlZ25vKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQo IkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisgICAgZWxpZiAocmVndHlw ZSA9PSAiUCIpOgorICAgICAgICBpZiAocmVnaWQgaW4geyJzIiwgInQiLCAidSIsICJ2In0pOgor ICAgICAgICAgICAgZi53cml0ZSgiICAgIFRDR3YgJXMlc1YgPSBoZXhfcHJlZFtpbnNuLT5yZWdu b1slZF1dO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQsIHJlZ25vKSkK KyAgICAgICAgZWxpZiAocmVnaWQgaW4geyJkIiwgImUiLCAieCJ9KToKKyAgICAgICAgICAgIGdl bnB0cl9kZWNsX3dyaXRlYmxlKGYsIHRhZywgcmVndHlwZSwgcmVnaWQsIHJlZ25vKQorICAgICAg ICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlw ZSwgcmVnaWQpCisgICAgZWxpZiAocmVndHlwZSA9PSAiQyIpOgorICAgICAgICBpZiAocmVnaWQg PT0gInNzIik6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgVENHdl9pNjQgJXMlc1YgPSB0Y2df dGVtcF9sb2NhbF9uZXdfaTY0KCk7XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0eXBlLCBy ZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgY29uc3QgaW50ICVzID0gaW5zbi0+cmVn bm9bJWRdICsgSEVYX1JFR19TQTA7XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWdOLCByZWdu bykpCisgICAgICAgIGVsaWYgKHJlZ2lkID09ICJkZCIpOgorICAgICAgICAgICAgZ2VucHRyX2Rl Y2xfcGFpcl93cml0ZWJsZShmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCByZWdubykKKyAgICAgICAg ZWxpZiAocmVnaWQgPT0gInMiKToKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBUQ0d2ICVzJXNW ID0gdGNnX3RlbXBfbG9jYWxfbmV3KCk7XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0eXBl LCByZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgY29uc3QgaW50ICVzJXNOID0gaW5z bi0+cmVnbm9bJWRdICsgSEVYX1JFR19TQTA7XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0 eXBlLCByZWdpZCwgcmVnbm8pKQorICAgICAgICBlbGlmIChyZWdpZCA9PSAiZCIpOgorICAgICAg ICAgICAgZ2VucHRyX2RlY2xfd3JpdGVibGUoZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgcmVnbm8p CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAi LCByZWd0eXBlLCByZWdpZCkKKyAgICBlbGlmIChyZWd0eXBlID09ICJNIik6CisgICAgICAgIGlm IChyZWdpZCA9PSAidSIpOgorICAgICAgICAgICAgZi53cml0ZSgiICAgIGNvbnN0IGludCAlcyVz TiA9IGluc24tPnJlZ25vWyVkXTtcbiIlIFwKKyAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVn aWQsIHJlZ25vKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBUQ0d2ICVzJXNWID0gaGV4X2dw clslcyVzTiArIEhFWF9SRUdfTTBdO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAocmVndHlwZSwg cmVnaWQsIHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50 KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorICAgIGVsc2U6CisgICAg ICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorCitkZWYg Z2VucHRyX2RlY2xfbmV3KGYscmVndHlwZSxyZWdpZCxyZWdubyk6CisgICAgaWYgKHJlZ3R5cGUg PT0gIk4iKToKKyAgICAgICAgaWYgKHJlZ2lkIGluIHsicyIsICJ0In0pOgorICAgICAgICAgICAg Zi53cml0ZSgiICAgIFRDR3YgJXMlc04gPSBoZXhfbmV3X3ZhbHVlW2luc24tPnJlZ25vWyVkXV07 XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCwgcmVnbm8pKQorICAgICAg ICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlw ZSwgcmVnaWQpCisgICAgZWxpZiAocmVndHlwZSA9PSAiUCIpOgorICAgICAgICBpZiAocmVnaWQg aW4geyJ0IiwgInUiLCAidiJ9KToKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBUQ0d2ICVzJXNO ID0gaGV4X25ld19wcmVkX3ZhbHVlW2luc24tPnJlZ25vWyVkXV07XG4iICUgXAorICAgICAgICAg ICAgICAgIChyZWd0eXBlLCByZWdpZCwgcmVnbm8pKQorICAgICAgICBlbHNlOgorICAgICAgICAg ICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisgICAgZWxz ZToKKyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQp CisKK2RlZiBnZW5wdHJfZGVjbF9vcG4oZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgdG9zcywgbnVt cmVncywgaSk6CisgICAgaWYgKGhleF9jb21tb24uaXNfcGFpcihyZWdpZCkpOgorICAgICAgICBn ZW5wdHJfZGVjbChmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCBpKQorICAgIGVsaWYgKGhleF9jb21t b24uaXNfc2luZ2xlKHJlZ2lkKSk6CisgICAgICAgIGlmIGhleF9jb21tb24uaXNfb2xkX3ZhbChy ZWd0eXBlLCByZWdpZCwgdGFnKToKKyAgICAgICAgICAgIGdlbnB0cl9kZWNsKGYsdGFnLCByZWd0 eXBlLCByZWdpZCwgaSkKKyAgICAgICAgZWxpZiBoZXhfY29tbW9uLmlzX25ld192YWwocmVndHlw ZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBnZW5wdHJfZGVjbF9uZXcoZixyZWd0eXBlLHJl Z2lkLGkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBh cnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorICAgIGVsc2U6CisgICAgICAgIHBy aW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisK K2RlZiBnZW5wdHJfZGVjbF9pbW0oZixpbW1sZXR0KToKKyAgICBpZiAoaW1tbGV0dC5pc3VwcGVy KCkpOgorICAgICAgICBpID0gMQorICAgIGVsc2U6CisgICAgICAgIGkgPSAwCisgICAgZi53cml0 ZSgiICAgIGludCAlcyA9IGluc24tPmltbWVkWyVkXTtcbiIgJSBcCisgICAgICAgIChoZXhfY29t bW9uLmltbV9uYW1lKGltbWxldHQpLCBpKSkKKworZGVmIGdlbnB0cl9mcmVlKGYscmVndHlwZSxy ZWdpZCxyZWdubyk6CisgICAgaWYgKHJlZ3R5cGUgPT0gIlIiKToKKyAgICAgICAgaWYgKHJlZ2lk IGluIHsiZGQiLCAic3MiLCAidHQiLCAieHgiLCAieXkifSk6CisgICAgICAgICAgICBmLndyaXRl KCIgICAgdGNnX3RlbXBfZnJlZV9pNjQoJXMlc1YpO1xuIiAlIChyZWd0eXBlLCByZWdpZCkpCisg ICAgICAgIGVsaWYgKHJlZ2lkIGluIHsiZCIsICJlIiwgIngiLCAieSJ9KToKKyAgICAgICAgICAg IGYud3JpdGUoIiAgICB0Y2dfdGVtcF9mcmVlKCVzJXNWKTtcbiIgJSAocmVndHlwZSwgcmVnaWQp KQorICAgICAgICBlbGlmIChyZWdpZCBub3QgaW4geyJzIiwgInQiLCAidSIsICJ2In0pOgorICAg ICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkKQorICAg IGVsaWYgKHJlZ3R5cGUgPT0gIlAiKToKKyAgICAgICAgaWYgKHJlZ2lkIGluIHsiZCIsICJlIiwg IngifSk6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgdGNnX3RlbXBfZnJlZSglcyVzVik7XG4i ICUgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgZWxpZiAocmVnaWQgbm90IGluIHsicyIsICJ0 IiwgInUiLCAidiJ9KToKKyAgICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIs cmVndHlwZSxyZWdpZCkKKyAgICBlbGlmIChyZWd0eXBlID09ICJDIik6CisgICAgICAgIGlmIChy ZWdpZCBpbiB7ImRkIiwgInNzIn0pOgorICAgICAgICAgICAgZi53cml0ZSgiICAgIHRjZ190ZW1w X2ZyZWVfaTY0KCVzJXNWKTtcbiIgJSAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICBlbGlmIChy ZWdpZCBpbiB7ImQiLCAicyJ9KToKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICB0Y2dfdGVtcF9m cmVlKCVzJXNWKTtcbiIgJSAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICBlbHNlOgorICAgICAg ICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkKQorICAgIGVs aWYgKHJlZ3R5cGUgPT0gIk0iKToKKyAgICAgICAgaWYgKHJlZ2lkICE9ICJ1Iik6CisgICAgICAg ICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdpZCkKKyAgICBl bHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdp ZCkKKworZGVmIGdlbnB0cl9mcmVlX25ldyhmLHJlZ3R5cGUscmVnaWQscmVnbm8pOgorICAgIGlm IChyZWd0eXBlID09ICJOIik6CisgICAgICAgIGlmIChyZWdpZCBub3QgaW4geyJzIiwgInQifSk6 CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdp ZCkKKyAgICBlbGlmIChyZWd0eXBlID09ICJQIik6CisgICAgICAgIGlmIChyZWdpZCBub3QgaW4g eyJ0IiwgInUiLCAidiJ9KToKKyAgICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6 ICIsIHJlZ3R5cGUsIHJlZ2lkKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJCYWQgcmVnaXN0 ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorCitkZWYgZ2VucHRyX2ZyZWVfb3BuKGYscmVn dHlwZSxyZWdpZCxpLHRhZyk6CisgICAgaWYgKGhleF9jb21tb24uaXNfcGFpcihyZWdpZCkpOgor ICAgICAgICBnZW5wdHJfZnJlZShmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICBlbGlmIChoZXhfY29t bW9uLmlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBpZiBoZXhfY29tbW9uLmlzX29sZF92YWwo cmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBnZW5wdHJfZnJlZShmLHJlZ3R5cGUs cmVnaWQsaSkKKyAgICAgICAgZWxpZiBoZXhfY29tbW9uLmlzX25ld192YWwocmVndHlwZSwgcmVn aWQsIHRhZyk6CisgICAgICAgICAgICBnZW5wdHJfZnJlZV9uZXcoZixyZWd0eXBlLHJlZ2lkLGkp CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAi LHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJC YWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisKK2RlZiBn ZW5wdHJfc3JjX3JlYWQoZixyZWd0eXBlLHJlZ2lkKToKKyAgICBpZiAocmVndHlwZSA9PSAiUiIp OgorICAgICAgICBpZiAocmVnaWQgaW4geyJzcyIsICJ0dCIsICJ4eCIsICJ5eSJ9KToKKyAgICAg ICAgICAgIGYud3JpdGUoIiAgICB0Y2dfZ2VuX2NvbmNhdF9pMzJfaTY0KCVzJXNWLCBoZXhfZ3By WyVzJXNOXSxcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkLCByZWd0eXBl LCByZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBoZXhfZ3ByWyVzJXNOICsgMV0pO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAocmVn dHlwZSwgcmVnaWQpKQorICAgICAgICBlbGlmIChyZWdpZCBpbiB7IngiLCAieSJ9KToKKyAgICAg ICAgICAgIGYud3JpdGUoIiAgICB0Y2dfZ2VuX21vdl90bCglcyVzViwgaGV4X2dwclslcyVzTl0p O1xuIiAlIFwKKyAgICAgICAgICAgICAgICAocmVndHlwZSxyZWdpZCxyZWd0eXBlLHJlZ2lkKSkK KyAgICAgICAgZWxpZiAocmVnaWQgbm90IGluIHsicyIsICJ0IiwgInUiLCAidiJ9KToKKyAgICAg ICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorICAg IGVsaWYgKHJlZ3R5cGUgPT0gIlAiKToKKyAgICAgICAgaWYgKHJlZ2lkID09ICJ4Iik6CisgICAg ICAgICAgICBmLndyaXRlKCIgICAgdGNnX2dlbl9tb3ZfdGwoJXMlc1YsIGhleF9wcmVkWyVzJXNO XSk7XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCwgcmVndHlwZSwgcmVn aWQpKQorICAgICAgICBlbGlmIChyZWdpZCBub3QgaW4geyJzIiwgInQiLCAidSIsICJ2In0pOgor ICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQp CisgICAgZWxpZiAocmVndHlwZSA9PSAiQyIpOgorICAgICAgICBpZiAocmVnaWQgPT0gInNzIik6 CisgICAgICAgICAgICBmLndyaXRlKCIgICAgaWYgKCVzJXNOID09IEhFWF9SRUdfUDNfMCkge1xu IiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCkp CisgICAgICAgICAgICBmLndyaXRlKCIgICAgICAgIFRDR3YgcDNfMCA9IHRjZ190ZW1wX25ldygp O1xuIikKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgZ2VuX3JlYWRfcDNfMChwM18wKTtc biIpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgICAgIHRjZ19nZW5fY29uY2F0X2kzMl9pNjQo JXMlc1YsXG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ3R5cGUs IHJlZ2lkKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgICAgIHAzXzAsXG4iKQorICAg ICAgICAgICAgZi53cml0ZSgiICAgICAgICAgICAgaGV4X2dwclslcyVzTiArIDFdKTtcbiIgJSBc CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAg ICAgICAgICAgZi53cml0ZSgiICAgICAgICB0Y2dfdGVtcF9mcmVlKHAzXzApO1xuIikKKyAgICAg ICAgICAgIGYud3JpdGUoIiAgICB9IGVsc2Uge1xuIikKKyAgICAgICAgICAgIGYud3JpdGUoIiAg ICAgICAgdGNnX2dlbl9jb25jYXRfaTMyX2k2NCglcyVzVixcbiIgJSBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0 ZSgiICAgICAgICAgICAgaGV4X2dwclslcyVzTl0sXG4iICUgXAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAg ICAgICAgICAgIGhleF9ncHJbJXMlc04gKyAxXSk7XG4iICUgXAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAg ICB9XG4iKQorICAgICAgICBlbGlmIChyZWdpZCA9PSAicyIpOgorICAgICAgICAgICAgZi53cml0 ZSgiICAgIGlmICglcyVzTiA9PSBIRVhfUkVHX1AzXzApIHtcbiIgJSBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0 ZSgiICAgICAgICBnZW5fcmVhZF9wM18wKCVzJXNWKTtcbiIgJSBcCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0ZSgi ICAgIH0gZWxzZSB7XG4iKQorICAgICAgICAgICAgZi53cml0ZSgiICAgICAgICB0Y2dfZ2VuX21v dl90bCglcyVzViwgaGV4X2dwclslcyVzTl0pO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCwgcmVndHlwZSwgcmVnaWQpKQorICAgICAgICAg ICAgZi53cml0ZSgiICAgIH1cbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgi QmFkIHJlZ2lzdGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdpZCkKKyAgICBlbGlmIChyZWd0eXBl ID09ICJNIik6CisgICAgICAgIGlmIChyZWdpZCAhPSAidSIpOgorICAgICAgICAgICAgcHJpbnQo IkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisgICAgZWxzZToKKyAgICAg ICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisKK2RlZiBn ZW5wdHJfc3JjX3JlYWRfbmV3KGYscmVndHlwZSxyZWdpZCk6CisgICAgaWYgKHJlZ3R5cGUgPT0g Ik4iKToKKyAgICAgICAgaWYgKHJlZ2lkIG5vdCBpbiB7InMiLCAidCJ9KToKKyAgICAgICAgICAg IHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorICAgIGVsaWYg KHJlZ3R5cGUgPT0gIlAiKToKKyAgICAgICAgaWYgKHJlZ2lkIG5vdCBpbiB7InQiLCAidSIsICJ2 In0pOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwg cmVnaWQpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwg cmVndHlwZSwgcmVnaWQpCisKK2RlZiBnZW5wdHJfc3JjX3JlYWRfb3BuKGYscmVndHlwZSxyZWdp ZCx0YWcpOgorICAgIGlmIChoZXhfY29tbW9uLmlzX3BhaXIocmVnaWQpKToKKyAgICAgICAgZ2Vu cHRyX3NyY19yZWFkKGYscmVndHlwZSxyZWdpZCkKKyAgICBlbGlmIChoZXhfY29tbW9uLmlzX3Np bmdsZShyZWdpZCkpOgorICAgICAgICBpZiBoZXhfY29tbW9uLmlzX29sZF92YWwocmVndHlwZSwg cmVnaWQsIHRhZyk6CisgICAgICAgICAgICBnZW5wdHJfc3JjX3JlYWQoZixyZWd0eXBlLHJlZ2lk KQorICAgICAgICBlbGlmIGhleF9jb21tb24uaXNfbmV3X3ZhbChyZWd0eXBlLCByZWdpZCwgdGFn KToKKyAgICAgICAgICAgIGdlbnB0cl9zcmNfcmVhZF9uZXcoZixyZWd0eXBlLHJlZ2lkKQorICAg ICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0 eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJl Z2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCitkZWYgZ2VuX2hl bHBlcl9jYWxsX29wbihmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKToK KyAgICBpZiAoaSA+IDApOiBmLndyaXRlKCIsICIpCisgICAgaWYgKGhleF9jb21tb24uaXNfcGFp cihyZWdpZCkpOgorICAgICAgICBmLndyaXRlKCIlcyVzViIgJSAocmVndHlwZSxyZWdpZCkpCisg ICAgZWxpZiAoaGV4X2NvbW1vbi5pc19zaW5nbGUocmVnaWQpKToKKyAgICAgICAgaWYgaGV4X2Nv bW1vbi5pc19vbGRfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZi53cml0 ZSgiJXMlc1YiICUgKHJlZ3R5cGUscmVnaWQpKQorICAgICAgICBlbGlmIGhleF9jb21tb24uaXNf bmV3X3ZhbChyZWd0eXBlLCByZWdpZCwgdGFnKToKKyAgICAgICAgICAgIGYud3JpdGUoIiVzJXNO IiAlIChyZWd0eXBlLHJlZ2lkKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJC YWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisgICAgZWxz ZToKKyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRv c3MsbnVtcmVncykKKworZGVmIGdlbl9oZWxwZXJfZGVjbF9pbW0oZixpbW1sZXR0KToKKyAgICBm LndyaXRlKCIgICAgVENHdiB0Y2d2XyVzID0gdGNnX2NvbnN0X3RsKCVzKTtcbiIgJSBcCisgICAg ICAgIChoZXhfY29tbW9uLmltbV9uYW1lKGltbWxldHQpLCBoZXhfY29tbW9uLmltbV9uYW1lKGlt bWxldHQpKSkKKworZGVmIGdlbl9oZWxwZXJfY2FsbF9pbW0oZixpbW1sZXR0KToKKyAgICBmLndy aXRlKCIsIHRjZ3ZfJXMiICUgaGV4X2NvbW1vbi5pbW1fbmFtZShpbW1sZXR0KSkKKworZGVmIGdl bl9oZWxwZXJfZnJlZV9pbW0oZixpbW1sZXR0KToKKyAgICBmLndyaXRlKCIgICAgdGNnX3RlbXBf ZnJlZSh0Y2d2XyVzKTtcbiIgJSBoZXhfY29tbW9uLmltbV9uYW1lKGltbWxldHQpKQorCitkZWYg Z2VucHRyX2RzdF93cml0ZV9wYWlyKGYsIHRhZywgcmVndHlwZSwgcmVnaWQpOgorICAgIGlmICgn QV9DT05ERVhFQycgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ10pOgorICAgICAgICBmLndy aXRlKCIgICAgZ2VuX2xvZ19wcmVkaWNhdGVkX3JlZ193cml0ZV9wYWlyKCVzJXNOLCAlcyVzViwg aW5zbi0+c2xvdCk7XG4iICUgXAorICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkLCByZWd0eXBl LCByZWdpZCkpCisgICAgZWxzZToKKyAgICAgICAgZi53cml0ZSgiICAgIGdlbl9sb2dfcmVnX3dy aXRlX3BhaXIoJXMlc04sICVzJXNWKTtcbiIgJSBcCisgICAgICAgICAgICAocmVndHlwZSwgcmVn aWQsIHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICBmLndyaXRlKCIgICAgY3R4X2xvZ19yZWdfd3JpdGVf cGFpcihjdHgsICVzJXNOKTtcbiIgJSBcCisgICAgICAgIChyZWd0eXBlLCByZWdpZCkpCisKK2Rl ZiBnZW5wdHJfZHN0X3dyaXRlKGYsIHRhZywgcmVndHlwZSwgcmVnaWQpOgorICAgIGlmIChyZWd0 eXBlID09ICJSIik6CisgICAgICAgIGlmIChyZWdpZCBpbiB7ImRkIiwgInh4IiwgInl5In0pOgor ICAgICAgICAgICAgZ2VucHRyX2RzdF93cml0ZV9wYWlyKGYsIHRhZywgcmVndHlwZSwgcmVnaWQp CisgICAgICAgIGVsaWYgKHJlZ2lkIGluIHsiZCIsICJlIiwgIngiLCAieSJ9KToKKyAgICAgICAg ICAgIGlmICgnQV9DT05ERVhFQycgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ10pOgorICAg ICAgICAgICAgICAgIGYud3JpdGUoIiAgICBnZW5fbG9nX3ByZWRpY2F0ZWRfcmVnX3dyaXRlKCVz JXNOLCAlcyVzVixcbiIgJSBcCisgICAgICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCwg cmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGluc24tPnNsb3QpO1xuIikKKyAgICAgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICAgICAgZi53cml0ZSgiICAgIGdlbl9sb2dfcmVnX3dyaXRlKCVzJXNOLCAlcyVz Vik7XG4iICUgXAorICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQsIHJlZ3R5cGUs IHJlZ2lkKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBjdHhfbG9nX3JlZ193cml0ZShjdHgs ICVzJXNOKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAg ICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5 cGUsIHJlZ2lkKQorICAgIGVsaWYgKHJlZ3R5cGUgPT0gIlAiKToKKyAgICAgICAgaWYgKHJlZ2lk IGluIHsiZCIsICJlIiwgIngifSk6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgZ2VuX2xvZ19w cmVkX3dyaXRlKCVzJXNOLCAlcyVzVik7XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0eXBl LCByZWdpZCwgcmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0ZSgiICAgIGN0eF9s b2dfcHJlZF93cml0ZShjdHgsICVzJXNOKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJlZ3R5 cGUsIHJlZ2lkKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0 ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorICAgIGVsaWYgKHJlZ3R5cGUgPT0gIkMiKToK KyAgICAgICAgaWYgKHJlZ2lkID09ICJkZCIpOgorICAgICAgICAgICAgZi53cml0ZSgiICAgIGlm ICglcyVzTiA9PSBIRVhfUkVHX1AzXzApIHtcbiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0ZSgiICAgICAg ICBUQ0d2IHZhbDMyID0gdGNnX3RlbXBfbmV3KCk7XG4iKQorICAgICAgICAgICAgZi53cml0ZSgi ICAgICAgICB0Y2dfZ2VuX2V4dHJsX2k2NF9pMzIodmFsMzIsICVzJXNWKTtcbiIgJSBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAg ICAgZi53cml0ZSgiICAgICAgICBnZW5fd3JpdGVfcDNfMCh2YWwzMik7XG4iKQorICAgICAgICAg ICAgZi53cml0ZSgiICAgICAgICB0Y2dfZ2VuX2V4dHJoX2k2NF9pMzIodmFsMzIsICVzJXNWKTtc biIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQp KQorICAgICAgICAgICAgZi53cml0ZSgiICAgICAgICBnZW5fbG9nX3JlZ193cml0ZSglcyVzTiAr IDEsIHZhbDMyKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVn dHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0ZSgiICAgICAgICB0Y2dfdGVtcF9mcmVl KHZhbDMyKTtcbiIpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgICAgIGN0eF9sb2dfcmVnX3dy aXRlKGN0eCwgJXMlc04gKyAxKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0ZSgiICAgIH0gZWxzZSB7 XG4iKQorICAgICAgICAgICAgZi53cml0ZSgiICAgICAgICBnZW5fbG9nX3JlZ193cml0ZV9wYWly KCVzJXNOLCAlcyVzVik7XG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHJlZ3R5cGUsIHJlZ2lkLCByZWd0eXBlLCByZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIg ICAgICAgIGN0eF9sb2dfcmVnX3dyaXRlX3BhaXIoY3R4LCAlcyVzTik7XG4iICUgXAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgICAg IGYud3JpdGUoIiAgICB9XG4iKQorICAgICAgICBlbGlmIChyZWdpZCA9PSAiZCIpOgorICAgICAg ICAgICAgZi53cml0ZSgiICAgIGlmICglcyVzTiA9PSBIRVhfUkVHX1AzXzApIHtcbiIgJSBcCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAg ICAgICAgZi53cml0ZSgiICAgICAgICBnZW5fd3JpdGVfcDNfMCglcyVzVik7XG4iICUgXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAg ICAgIGYud3JpdGUoIiAgICB9IGVsc2Uge1xuIikKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICAg ICAgZ2VuX2xvZ19yZWdfd3JpdGUoJXMlc04sICVzJXNWKTtcbiIgJSBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQsIHJlZ3R5cGUsIHJlZ2lkKSkKKyAg ICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgY3R4X2xvZ19yZWdfd3JpdGUoY3R4LCAlcyVzTik7 XG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lk KSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICB9XG4iKQorICAgICAgICBlbHNlOgorICAgICAg ICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisgICAg ZWxzZToKKyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVn aWQpCisKK2RlZiBnZW5wdHJfZHN0X3dyaXRlX29wbihmLHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgor ICAgIGlmIChoZXhfY29tbW9uLmlzX3BhaXIocmVnaWQpKToKKyAgICAgICAgZ2VucHRyX2RzdF93 cml0ZShmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkKQorICAgIGVsaWYgKGhleF9jb21tb24uaXNfc2lu Z2xlKHJlZ2lkKSk6CisgICAgICAgIGdlbnB0cl9kc3Rfd3JpdGUoZiwgdGFnLCByZWd0eXBlLCBy ZWdpZCkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJl Z3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCisjIworIyMgR2VuZXJhdGUgdGhlIFRDRyBjb2Rl IHRvIGNhbGwgdGhlIGhlbHBlcgorIyMgICAgIEZvciBBMl9hZGQ6IFJkMzI9YWRkKFJzMzIsUnQz MiksIHsgUmRWPVJzVitSdFY7fQorIyMgICAgIFdlIHByb2R1Y2U6CisjIyAgICBzdGF0aWMgdm9p ZCBnZW5lcmF0ZV9BMl9hZGQoKQorIyMgICAgICAgICAgICAgICAgICAgIENQVUhleGFnb25TdGF0 ZSAqZW52CisjIyAgICAgICAgICAgICAgICAgICAgRGlzYXNDb250ZXh0ICpjdHgsCisjIyAgICAg ICAgICAgICAgICAgICAgSW5zbiAqaW5zbiwKKyMjICAgICAgICAgICAgICAgICAgICBQYWNrZXQg KnBrdCkKKyMjICAgICAgIHsKKyMjICAgICAgICAgICBUQ0d2IFJkViA9IHRjZ190ZW1wX2xvY2Fs X25ldygpOworIyMgICAgICAgICAgIGNvbnN0IGludCBSZE4gPSBpbnNuLT5yZWdub1swXTsKKyMj ICAgICAgICAgICBUQ0d2IFJzViA9IGhleF9ncHJbaW5zbi0+cmVnbm9bMV1dOworIyMgICAgICAg ICAgIFRDR3YgUnRWID0gaGV4X2dwcltpbnNuLT5yZWdub1syXV07CisjIyAgICAgICAgICAgPEdF Tj4KKyMjICAgICAgICAgICBnZW5fbG9nX3JlZ193cml0ZShSZE4sIFJkVik7CisjIyAgICAgICAg ICAgY3R4X2xvZ19yZWdfd3JpdGUoY3R4LCBSZE4pOworIyMgICAgICAgICAgIHRjZ190ZW1wX2Zy ZWUoUmRWKTsKKyMjICAgICAgIH0KKyMjCisjIyAgICAgICB3aGVyZSA8R0VOPiBkZXBlbmRzIG9u IGhleF9jb21tb24uc2tpcF9xZW11X2hlbHBlcih0YWcpCisjIyAgICAgICBpZiBoZXhfY29tbW9u LnNraXBfcWVtdV9oZWxwZXIodGFnKSBpcyBUcnVlCisjIyAgICAgICA8R0VOPiAgaXMgZkdFTl9U Q0dfQTJfYWRkKHsgUmRWPVJzVitSdFY7fSk7CisjIyAgICAgICBpZiBoZXhfY29tbW9uLnNraXBf cWVtdV9oZWxwZXIodGFnKSBpcyBGYWxzZQorIyMgICAgICAgPEdFTj4gIGlzIGdlbl9oZWxwZXJf QTJfYWRkKFJkViwgY3B1X2VudiwgUnNWLCBSdFYpOworIyMKK2RlZiBnZW5fdGNnX2Z1bmMoZiwg dGFnLCByZWdzLCBpbW1zKToKKyAgICBmLndyaXRlKCJzdGF0aWMgdm9pZCBnZW5lcmF0ZV8lcyhc biIgJXRhZykKKyAgICBmLndyaXRlKCIgICAgICAgICAgICAgICAgQ1BVSGV4YWdvblN0YXRlICpl bnYsXG4iKQorICAgIGYud3JpdGUoIiAgICAgICAgICAgICAgICBEaXNhc0NvbnRleHQgKmN0eCxc biIpCisgICAgZi53cml0ZSgiICAgICAgICAgICAgICAgIEluc24gKmluc24sXG4iKQorICAgIGYu d3JpdGUoIiAgICAgICAgICAgICAgICBQYWNrZXQgKnBrdClcbiIpCisgICAgZi53cml0ZSgne1xu JykKKyAgICBpZiBoZXhfY29tbW9uLm5lZWRfZWEodGFnKTogZ2VuX2RlY2xfZWFfdGNnKGYsIHRh ZykKKyAgICBpPTAKKyAgICAjIyBEZWNsYXJlIGFsbCB0aGUgb3BlcmFuZHMgKHJlZ3MgYW5kIGlt bWVkaWF0ZXMpCisgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6Cisg ICAgICAgIGdlbnB0cl9kZWNsX29wbihmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCB0b3NzLCBudW1y ZWdzLCBpKQorICAgICAgICBpICs9IDEKKyAgICBmb3IgaW1tbGV0dCxiaXRzLGltbXNoaWZ0IGlu IGltbXM6CisgICAgICAgIGdlbnB0cl9kZWNsX2ltbShmLGltbWxldHQpCisKKyAgICBpZiAnQV9Q UklWJyBpbiBoZXhfY29tbW9uLmF0dHJpYmRpY3RbdGFnXToKKyAgICAgICAgZi53cml0ZSgnICAg IGZDSEVDS0ZPUlBSSVYoKTtcbicpCisgICAgaWYgJ0FfR1VFU1QnIGluIGhleF9jb21tb24uYXR0 cmliZGljdFt0YWddOgorICAgICAgICBmLndyaXRlKCcgICAgZkNIRUNLRk9SR1VFU1QoKTtcbicp CisKKyAgICAjIyBSZWFkIGFsbCB0aGUgaW5wdXRzCisgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9z cyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgIGlmIChoZXhfY29tbW9uLmlzX3JlYWQocmVnaWQp KToKKyAgICAgICAgICAgIGdlbnB0cl9zcmNfcmVhZF9vcG4oZixyZWd0eXBlLHJlZ2lkLHRhZykK KworICAgIGlmICggaGV4X2NvbW1vbi5za2lwX3FlbXVfaGVscGVyKHRhZykgKToKKyAgICAgICAg Zi53cml0ZSgiICAgIGZHRU5fVENHXyVzKCVzKTtcbiIgJSAodGFnLCBoZXhfY29tbW9uLnNlbWRp Y3RbdGFnXSkpCisgICAgZWxzZToKKyAgICAgICAgIyMgR2VuZXJhdGUgdGhlIGNhbGwgdG8gdGhl IGhlbHBlcgorICAgICAgICBmb3IgaW1tbGV0dCxiaXRzLGltbXNoaWZ0IGluIGltbXM6CisgICAg ICAgICAgICBnZW5faGVscGVyX2RlY2xfaW1tKGYsaW1tbGV0dCkKKyAgICAgICAgaWYgaGV4X2Nv bW1vbi5uZWVkX3BhcnQxKHRhZyk6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgVENHdiBwYXJ0 MSA9IHRjZ19jb25zdF90bChpbnNuLT5wYXJ0MSk7XG4iKQorICAgICAgICBpZiBoZXhfY29tbW9u Lm5lZWRfc2xvdCh0YWcpOgorICAgICAgICAgICAgZi53cml0ZSgiICAgIFRDR3Ygc2xvdCA9IHRj Z19jb25zdF90bChpbnNuLT5zbG90KTtcbiIpCisgICAgICAgIGYud3JpdGUoIiAgICBnZW5faGVs cGVyXyVzKCIgJSAodGFnKSkKKyAgICAgICAgaT0wCisgICAgICAgICMjIElmIHRoZXJlIGlzIGEg c2NhbGFyIHJlc3VsdCwgaXQgaXMgdGhlIHJldHVybiB0eXBlCisgICAgICAgIGZvciByZWd0eXBl LHJlZ2lkLHRvc3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICAgICAgaWYgKGhleF9jb21tb24u aXNfd3JpdHRlbihyZWdpZCkpOgorICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfY2FsbF9vcG4o ZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgdG9zcywgbnVtcmVncywgaSkKKyAgICAgICAgICAgICAg ICBpICs9IDEKKyAgICAgICAgaWYgKGkgPiAwKTogZi53cml0ZSgiLCAiKQorICAgICAgICBmLndy aXRlKCJjcHVfZW52IikKKyAgICAgICAgaT0xCisgICAgICAgIGZvciByZWd0eXBlLHJlZ2lkLHRv c3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICAgICAgaWYgKGhleF9jb21tb24uaXNfcmVhZChy ZWdpZCkpOgorICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfY2FsbF9vcG4oZiwgdGFnLCByZWd0 eXBlLCByZWdpZCwgdG9zcywgbnVtcmVncywgaSkKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAg ICAgICAgZm9yIGltbWxldHQsYml0cyxpbW1zaGlmdCBpbiBpbW1zOgorICAgICAgICAgICAgZ2Vu X2hlbHBlcl9jYWxsX2ltbShmLGltbWxldHQpCisKKyAgICAgICAgaWYgaGV4X2NvbW1vbi5uZWVk X3Nsb3QodGFnKTogZi53cml0ZSgiLCBzbG90IikKKyAgICAgICAgaWYgaGV4X2NvbW1vbi5uZWVk X3BhcnQxKHRhZyk6IGYud3JpdGUoIiwgcGFydDEiICkKKyAgICAgICAgZi53cml0ZSgiKTtcbiIp CisgICAgICAgIGlmIGhleF9jb21tb24ubmVlZF9zbG90KHRhZyk6CisgICAgICAgICAgICBmLndy aXRlKCIgICAgdGNnX3RlbXBfZnJlZShzbG90KTtcbiIpCisgICAgICAgIGlmIGhleF9jb21tb24u bmVlZF9wYXJ0MSh0YWcpOgorICAgICAgICAgICAgZi53cml0ZSgiICAgIHRjZ190ZW1wX2ZyZWUo cGFydDEpO1xuIikKKyAgICAgICAgZm9yIGltbWxldHQsYml0cyxpbW1zaGlmdCBpbiBpbW1zOgor ICAgICAgICAgICAgZ2VuX2hlbHBlcl9mcmVlX2ltbShmLGltbWxldHQpCisKKyAgICAjIyBXcml0 ZSBhbGwgdGhlIG91dHB1dHMKKyAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4g cmVnczoKKyAgICAgICAgaWYgKGhleF9jb21tb24uaXNfd3JpdHRlbihyZWdpZCkpOgorICAgICAg ICAgICAgZ2VucHRyX2RzdF93cml0ZV9vcG4oZixyZWd0eXBlLCByZWdpZCwgdGFnKQorCisgICAg IyMgRnJlZSBhbGwgdGhlIG9wZXJhbmRzIChyZWdzIGFuZCBpbW1lZGlhdGVzKQorICAgIGlmIGhl eF9jb21tb24ubmVlZF9lYSh0YWcpOiBnZW5fZnJlZV9lYV90Y2coZikKKyAgICBmb3IgcmVndHlw ZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgZ2VucHRyX2ZyZWVfb3BuKGYs cmVndHlwZSxyZWdpZCxpLHRhZykKKyAgICAgICAgaSArPSAxCisKKyAgICBmLndyaXRlKCJ9XG5c biIpCisKK2RlZiBnZW5fZGVmX3RjZ19mdW5jKGYsIHRhZywgdGFncmVncywgdGFnaW1tcyk6Cisg ICAgcmVncyA9IHRhZ3JlZ3NbdGFnXQorICAgIGltbXMgPSB0YWdpbW1zW3RhZ10KKworICAgIGdl bl90Y2dfZnVuYyhmLCB0YWcsIHJlZ3MsIGltbXMpCisKK2RlZiBtYWluKCk6CisgICAgaGV4X2Nv bW1vbi5yZWFkX3NlbWFudGljc19maWxlKHN5cy5hcmd2WzFdKQorICAgIGhleF9jb21tb24ucmVh ZF9hdHRyaWJzX2ZpbGUoc3lzLmFyZ3ZbMl0pCisgICAgaGV4X2NvbW1vbi5yZWFkX292ZXJyaWRl c19maWxlKHN5cy5hcmd2WzNdKQorICAgIGhleF9jb21tb24uY2FsY3VsYXRlX2F0dHJpYnMoKQor ICAgIHRhZ3JlZ3MgPSBoZXhfY29tbW9uLmdldF90YWdyZWdzKCkKKyAgICB0YWdpbW1zID0gaGV4 X2NvbW1vbi5nZXRfdGFnaW1tcygpCisKKyAgICB3aXRoIG9wZW4oc3lzLmFyZ3ZbNF0sICd3Jykg YXMgZjoKKyAgICAgICAgZi53cml0ZSgiI2lmbmRlZiBIRVhBR09OX1RDR19GVU5DU19IXG4iKQor ICAgICAgICBmLndyaXRlKCIjZGVmaW5lIEhFWEFHT05fVENHX0ZVTkNTX0hcblxuIikKKworICAg ICAgICBmb3IgdGFnIGluIGhleF9jb21tb24udGFnczoKKyAgICAgICAgICAgICMjIFNraXAgdGhl IHByaXYgaW5zdHJ1Y3Rpb25zCisgICAgICAgICAgICBpZiAoICJBX1BSSVYiIGluIGhleF9jb21t b24uYXR0cmliZGljdFt0YWddICkgOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg ICAgICAjIyBTa2lwIHRoZSBndWVzdCBpbnN0cnVjdGlvbnMKKyAgICAgICAgICAgIGlmICggIkFf R1VFU1QiIGluIGhleF9jb21tb24uYXR0cmliZGljdFt0YWddICkgOgorICAgICAgICAgICAgICAg IGNvbnRpbnVlCisgICAgICAgICAgICAjIyBTa2lwIHRoZSBkaWFnIGluc3RydWN0aW9ucworICAg ICAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWciICkgOgorICAgICAgICAgICAgICAgIGNvbnRp bnVlCisgICAgICAgICAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZzAiICkgOgorICAgICAgICAgICAg ICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZzEiICkgOgorICAg ICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGdlbl9kZWZfdGNnX2Z1bmMoZiwg dGFnLCB0YWdyZWdzLCB0YWdpbW1zKQorCisgICAgICAgIGYud3JpdGUoIiNlbmRpZiAgICAvKiBI RVhBR09OX1RDR19GVU5DU19IICovXG4iKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgor ICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vaGV4X2NvbW1vbi5weSBiL3Rh cmdldC9oZXhhZ29uL2hleF9jb21tb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw MDAwMC4uMjZmOTYyNAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2hleF9jb21t b24ucHkKQEAgLTAsMCArMSwyMTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMj ICBDb3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMu IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyMjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLCBvcgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKyMjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworZnJv bSBpbyBpbXBvcnQgU3RyaW5nSU8KKworYmVoZGljdCA9IHt9ICAgICAgICAgICMgdGFnIC0+YmVo YXZpb3IKK3NlbWRpY3QgPSB7fSAgICAgICAgICAjIHRhZyAtPiBzZW1hbnRpY3MKK2F0dHJpYmRp Y3QgPSB7fSAgICAgICAjIHRhZyAtPiBhdHRyaWJ1dGVzCittYWNyb3MgPSB7fSAgICAgICAgICAg IyBtYWNybyAtPiBtYWNybyBpbmZvcm1hdGlvbi4uLgorYXR0cmliaW5mbyA9IHt9ICAgICAgICMg UmVnaXN0ZXIgaW5mb3JtYXRpb24gYW5kIG1pc2MKK3RhZ3MgPSBbXSAgICAgICAgICAgICAjIGxp c3Qgb2YgYWxsIHRhZ3MKK292ZXJyaWRlcyA9IHt9ICAgICAgICAjIHRhZ3Mgd2l0aCBoZWxwZXIg b3ZlcnJpZGVzCisKKyMgV2Ugc2hvdWxkIGRvIHRoaXMgYXMgYSBoYXNoIGZvciBwZXJmb3JtYW5j ZSwKKyMgYnV0IHRvIGtlZXAgb3JkZXIgbGV0J3Mga2VlcCBpdCBhcyBhIGxpc3QuCitkZWYgdW5p cXVpZnkoc2VxKToKKyAgICBzZWVuID0gc2V0KCkKKyAgICBzZWVuX2FkZCA9IHNlZW4uYWRkCisg ICAgcmV0dXJuIFt4IGZvciB4IGluIHNlcSBpZiB4IG5vdCBpbiBzZWVuIGFuZCBub3Qgc2Vlbl9h ZGQoeCldCisKK3JlZ3JlID0gcmUuY29tcGlsZSgKKyAgICByIigoPzwhRFVQKVtNTk9SQ1BRWFNH VlpBXSkoW3N0dXZ3eHl6ZGVmZ10rKShbLl0/W0xsSGhdPykoXGQrUz8pIikKK2ltbXJlID0gcmUu Y29tcGlsZShyIlsjXShbclJzU3VVbV0pKFxkKykoPzpbOl0oXGQrKSk/IikKK3JlZ19vcl9pbW1y ZSA9IFwKKyAgICByZS5jb21waWxlKHIiKCgoPzwhRFVQKVtNTlJDT1BRWFNHVlpBXSkoW3N0dXZ3 eHl6ZGVmZ10rKSIgKyBcCisgICAgICAgICAgICAgICAgIihbLl0/W0xsSGhdPykoXGQrUz8pKXwo WyNdKFtyUnNTdVVtXSkoXGQrKVs6XT8oXGQrKT8pIikKK3JlbGltbXJlID0gcmUuY29tcGlsZShy IlsjXShbclJdKShcZCspKD86WzpdKFxkKykpPyIpCithYnNpbW1yZSA9IHJlLmNvbXBpbGUociJb I10oW3NTdVVtXSkoXGQrKSg/Ols6XShcZCspKT8iKQorCitmaW5pc2hlZF9tYWNyb3MgPSBzZXQo KQorCitkZWYgZXhwYW5kX21hY3JvX2F0dHJpYnMobWFjcm8sYWxsbWFjX3JlKToKKyAgICBpZiBt YWNyby5rZXkgbm90IGluIGZpbmlzaGVkX21hY3JvczoKKyAgICAgICAgIyBHZXQgYSBsaXN0IG9m IGFsbCB0aGluZ3MgdGhhdCBtaWdodCBiZSBtYWNyb3MKKyAgICAgICAgbCA9IGFsbG1hY19yZS5m aW5kYWxsKG1hY3JvLmJlaCkKKyAgICAgICAgZm9yIHN1Ym1hY3JvIGluIGw6CisgICAgICAgICAg ICBpZiBub3Qgc3VibWFjcm86IGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgbWFjcm9zW3N1 Ym1hY3JvXToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxkbid0IGZpbmQg bWFjcm86IDwlcz4iICUgbCkKKyAgICAgICAgICAgIG1hY3JvLmF0dHJpYnMgfD0gZXhwYW5kX21h Y3JvX2F0dHJpYnMoCisgICAgICAgICAgICAgICAgbWFjcm9zW3N1Ym1hY3JvXSwgYWxsbWFjX3Jl KQorICAgICAgICAgICAgZmluaXNoZWRfbWFjcm9zLmFkZChtYWNyby5rZXkpCisgICAgcmV0dXJu IG1hY3JvLmF0dHJpYnMKKworaW1tZXh0cmUgPSByZS5jb21waWxlKHInZihNVVNUXyk/SU1NRVhU WyhdKFtVdVNzUnJdKScpCitkZWYgY2FsY3VsYXRlX2F0dHJpYnMoKToKKyAgICAjIFJlY3Vyc2Ug ZG93biBtYWNyb3MsIGZpbmQgYXR0cmlidXRlcyBmcm9tIHN1Yi1tYWNyb3MKKyAgICBtYWNyb1Zh bHVlcyA9IGxpc3QobWFjcm9zLnZhbHVlcygpKQorICAgIGFsbG1hY3Jvc19yZXN0ciA9ICJ8Ii5q b2luKHNldChbIG0ucmUucGF0dGVybiBmb3IgbSBpbiBtYWNyb1ZhbHVlcyBdKSkKKyAgICBhbGxt YWNyb3NfcmUgPSByZS5jb21waWxlKGFsbG1hY3Jvc19yZXN0cikKKyAgICBmb3IgbWFjcm8gaW4g bWFjcm9WYWx1ZXM6CisgICAgICAgIGV4cGFuZF9tYWNyb19hdHRyaWJzKG1hY3JvLGFsbG1hY3Jv c19yZSkKKyAgICAjIEFwcGVuZCBhdHRyaWJ1dGVzIHRvIGFsbCBpbnN0cnVjdGlvbnMKKyAgICBm b3IgdGFnIGluIHRhZ3M6CisgICAgICAgIGZvciBtYWNuYW1lIGluIGFsbG1hY3Jvc19yZS5maW5k YWxsKHNlbWRpY3RbdGFnXSk6CisgICAgICAgICAgICBpZiBub3QgbWFjbmFtZTogY29udGludWUK KyAgICAgICAgICAgIG1hY3JvID0gbWFjcm9zW21hY25hbWVdCisgICAgICAgICAgICBhdHRyaWJk aWN0W3RhZ10gfD0gc2V0KG1hY3JvLmF0dHJpYnMpCisKK2RlZiBTRU1BTlRJQ1ModGFnLCBiZWgs IHNlbSk6CisgICAgI3ByaW50IHRhZyxiZWgsc2VtCisgICAgYmVoZGljdFt0YWddID0gYmVoCisg ICAgc2VtZGljdFt0YWddID0gc2VtCisgICAgYXR0cmliZGljdFt0YWddID0gc2V0KCkKKyAgICB0 YWdzLmFwcGVuZCh0YWcpICAgICAgICAjIGRpY3RzIGhhdmUgbm8gb3JkZXIsIHRoaXMgaXMgZm9y IG9yZGVyCisKK2RlZiBBVFRSSUJVVEVTKHRhZywgYXR0cmlic3RyaW5nKToKKyAgICBhdHRyaWJz dHJpbmcgPSBcCisgICAgICAgIGF0dHJpYnN0cmluZy5yZXBsYWNlKCJBVFRSSUJTIiwiIikucmVw bGFjZSgiKCIsIiIpLnJlcGxhY2UoIikiLCIiKQorICAgIGlmIG5vdCBhdHRyaWJzdHJpbmc6Cisg ICAgICAgIHJldHVybgorICAgIGF0dHJpYnMgPSBhdHRyaWJzdHJpbmcuc3BsaXQoIiwiKQorICAg IGZvciBhdHRyaWIgaW4gYXR0cmliczoKKyAgICAgICAgYXR0cmliZGljdFt0YWddLmFkZChhdHRy aWIuc3RyaXAoKSkKKworY2xhc3MgTWFjcm8ob2JqZWN0KToKKyAgICBfX3Nsb3RzX18gPSBbJ2tl eScsJ25hbWUnLCAnYmVoJywgJ2F0dHJpYnMnLCAncmUnXQorICAgIGRlZiBfX2luaXRfXyhzZWxm LCBuYW1lLCBiZWgsIGF0dHJpYnMpOgorICAgICAgICBzZWxmLmtleSA9IG5hbWUKKyAgICAgICAg c2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmJlaCA9IGJlaAorICAgICAgICBzZWxmLmF0 dHJpYnMgPSBzZXQoYXR0cmlicykKKyAgICAgICAgc2VsZi5yZSA9IHJlLmNvbXBpbGUoIlxcYiIg KyBuYW1lICsgIlxcYiIpCisKK2RlZiBNQUNST0FUVFJJQihtYWNuYW1lLGJlaCxhdHRyaWJzdHJp bmcpOgorICAgIGF0dHJpYnN0cmluZyA9IGF0dHJpYnN0cmluZy5yZXBsYWNlKCIoIiwiIikucmVw bGFjZSgiKSIsIiIpCisgICAgaWYgYXR0cmlic3RyaW5nOgorICAgICAgICBhdHRyaWJzID0gYXR0 cmlic3RyaW5nLnNwbGl0KCIsIikKKyAgICBlbHNlOgorICAgICAgICBhdHRyaWJzID0gW10KKyAg ICBtYWNyb3NbbWFjbmFtZV0gPSBNYWNybyhtYWNuYW1lLGJlaCxhdHRyaWJzKQorCitkZWYgY29t cHV0ZV90YWdfcmVncyh0YWcpOgorICAgIHJldHVybiB1bmlxdWlmeShyZWdyZS5maW5kYWxsKGJl aGRpY3RbdGFnXSkpCisKK2RlZiBjb21wdXRlX3RhZ19pbW1lZGlhdGVzKHRhZyk6CisgICAgcmV0 dXJuIHVuaXF1aWZ5KGltbXJlLmZpbmRhbGwoYmVoZGljdFt0YWddKSkKKworIyMKKyMjICB0YWdy ZWdzIGlzIHRoZSBtYWluIGRhdGEgc3RydWN0dXJlIHdlJ2xsIHVzZQorIyMgIHRhZ3JlZ3NbdGFn XSB3aWxsIGNvbnRhaW4gdGhlIHJlZ2lzdGVycyB1c2VkIGJ5IGFuIGluc3RydWN0aW9uCisjIyAg V2l0aGluIGVhY2ggZW50cnksIHdlJ2xsIHVzZSB0aGUgcmVndHlwZSBhbmQgcmVnaWQgZmllbGRz CisjIyAgICAgIHJlZ3R5cGUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nCisjIyAgICAgICAg ICBDICAgICAgICAgICAgICAgIGNvbnRyb2wgcmVnaXN0ZXIKKyMjICAgICAgICAgIE4gICAgICAg ICAgICAgICAgbmV3IHJlZ2lzdGVyIHZhbHVlCisjIyAgICAgICAgICBQICAgICAgICAgICAgICAg IHByZWRpY2F0ZSByZWdpc3RlcgorIyMgICAgICAgICAgUiAgICAgICAgICAgICAgICBHUFIgcmVn aXN0ZXIKKyMjICAgICAgICAgIE0gICAgICAgICAgICAgICAgbW9kaWZpZXIgcmVnaXN0ZXIKKyMj ICAgICAgcmVnaWQgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nCisjIyAgICAgICAgICBkLCBl ICAgICAgICAgICAgIGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisjIyAgICAgICAgICBkZCAgICAgICAg ICAgICAgIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHBhaXIKKyMjICAgICAgICAgIHMsIHQsIHUsIHYs IHcgICAgc291cmNlIHJlZ2lzdGVyCisjIyAgICAgICAgICBzcywgdHQsIHV1LCB2diAgIHNvdXJj ZSByZWdpc3RlciBwYWlyCisjIyAgICAgICAgICB4LCB5ICAgICAgICAgICAgIHJlYWQtd3JpdGUg cmVnaXN0ZXIKKyMjICAgICAgICAgIHh4LCB5eSAgICAgICAgICAgcmVhZC13cml0ZSByZWdpc3Rl ciBwYWlyCisjIworZGVmIGdldF90YWdyZWdzKCk6CisgICAgcmV0dXJuIGRpY3QoemlwKHRhZ3Ms IGxpc3QobWFwKGNvbXB1dGVfdGFnX3JlZ3MsIHRhZ3MpKSkpCisKK2RlZiBnZXRfdGFnaW1tcygp OgorICAgIHJldHVybiBkaWN0KHppcCh0YWdzLCBsaXN0KG1hcChjb21wdXRlX3RhZ19pbW1lZGlh dGVzLCB0YWdzKSkpKQorCitkZWYgaXNfcGFpcihyZWdpZCk6CisgICAgcmV0dXJuIGxlbihyZWdp ZCkgPT0gMgorCitkZWYgaXNfc2luZ2xlKHJlZ2lkKToKKyAgICByZXR1cm4gbGVuKHJlZ2lkKSA9 PSAxCisKK2RlZiBpc193cml0dGVuKHJlZ2lkKToKKyAgICByZXR1cm4gcmVnaWRbMF0gaW4gImRl eHkiCisKK2RlZiBpc193cml0ZW9ubHkocmVnaWQpOgorICAgIHJldHVybiByZWdpZFswXSBpbiAi ZGUiCisKK2RlZiBpc19yZWFkKHJlZ2lkKToKKyAgICByZXR1cm4gcmVnaWRbMF0gaW4gInN0dXZ3 eHkiCisKK2RlZiBpc19yZWFkd3JpdGUocmVnaWQpOgorICAgIHJldHVybiByZWdpZFswXSBpbiAi eHkiCisKK2RlZiBpc19zY2FsYXJfcmVnKHJlZ3R5cGUpOgorICAgIHJldHVybiByZWd0eXBlIGlu ICJSUEMiCisKK2RlZiBpc19vbGRfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgIHJldHVy biByZWd0eXBlK3JlZ2lkKydWJyBpbiBzZW1kaWN0W3RhZ10KKworZGVmIGlzX25ld192YWwocmVn dHlwZSwgcmVnaWQsIHRhZyk6CisgICAgcmV0dXJuIHJlZ3R5cGUrcmVnaWQrJ04nIGluIHNlbWRp Y3RbdGFnXQorCitkZWYgbmVlZF9zbG90KHRhZyk6CisgICAgaWYgKCdBX0NPTkRFWEVDJyBpbiBh dHRyaWJkaWN0W3RhZ10gb3IKKyAgICAgICAgJ0FfU1RPUkUnIGluIGF0dHJpYmRpY3RbdGFnXSBv cgorICAgICAgICAnQV9MT0FEJyBpbiBhdHRyaWJkaWN0W3RhZ10pOgorICAgICAgICByZXR1cm4g MQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAwCisKK2RlZiBuZWVkX3BhcnQxKHRhZyk6Cisg ICAgcmV0dXJuIHJlLmNvbXBpbGUociJmUEFSVDEiKS5zZWFyY2goc2VtZGljdFt0YWddKQorCitk ZWYgbmVlZF9lYSh0YWcpOgorICAgIHJldHVybiByZS5jb21waWxlKHIiXGJFQVxiIikuc2VhcmNo KHNlbWRpY3RbdGFnXSkKKworZGVmIHNraXBfcWVtdV9oZWxwZXIodGFnKToKKyAgICByZXR1cm4g dGFnIGluIG92ZXJyaWRlcy5rZXlzKCkKKworZGVmIGltbV9uYW1lKGltbWxldHQpOgorICAgIHJl dHVybiAiJXNpViIgJSBpbW1sZXR0CisKK2RlZiByZWFkX3NlbWFudGljc19maWxlKG5hbWUpOgor ICAgIGV2YWxfbGluZSA9ICIiCisgICAgZm9yIGxpbmUgaW4gb3BlbihuYW1lLCAncnQnKS5yZWFk bGluZXMoKToKKyAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgiIyIpOgorICAgICAgICAg ICAgZXZhbF9saW5lICs9IGxpbmUKKyAgICAgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoIlxcXG4i KToKKyAgICAgICAgICAgICAgICBldmFsX2xpbmUucnN0cmlwKCJcXFxuIikKKyAgICAgICAgICAg IGVsc2U6CisgICAgICAgICAgICAgICAgZXZhbChldmFsX2xpbmUuc3RyaXAoKSkKKyAgICAgICAg ICAgICAgICBldmFsX2xpbmUgPSAiIgorCitkZWYgcmVhZF9hdHRyaWJzX2ZpbGUobmFtZSk6Cisg ICAgYXR0cmlicmUgPSByZS5jb21waWxlKHInREVGX0FUVFJJQlwoKFtBLVphLXowLTlfXSspLCAo W14sXSopLCAnICsKKyAgICAgICAgICAgIHInIihbQS1aYS16MC05X1wuXSopIiwgIihbQS1aYS16 MC05X1wuXSopIlwpJykKKyAgICBmb3IgbGluZSBpbiBvcGVuKG5hbWUsICdydCcpLnJlYWRsaW5l cygpOgorICAgICAgICBpZiBub3QgYXR0cmlicmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICBj b250aW51ZQorICAgICAgICAoYXR0cmliX2Jhc2UsZGVzY3IscnJlZyx3cmVnKSA9IGF0dHJpYnJl LmZpbmRhbGwobGluZSlbMF0KKyAgICAgICAgYXR0cmliX2Jhc2UgPSAnQV8nICsgYXR0cmliX2Jh c2UKKyAgICAgICAgYXR0cmliaW5mb1thdHRyaWJfYmFzZV0gPSB7J3JyZWcnOnJyZWcsICd3cmVn Jzp3cmVnLCAnZGVzY3InOmRlc2NyfQorCitkZWYgcmVhZF9vdmVycmlkZXNfZmlsZShuYW1lKToK KyAgICBvdmVycmlkZXJlID0gcmUuY29tcGlsZSgiI2RlZmluZSBmR0VOX1RDR18oW0EtWmEtejAt OV9dKylcKC4qIikKKyAgICBmb3IgbGluZSBpbiBvcGVuKG5hbWUsICdydCcpLnJlYWRsaW5lcygp OgorICAgICAgICBpZiBub3Qgb3ZlcnJpZGVyZS5tYXRjaChsaW5lKToKKyAgICAgICAgICAgIGNv bnRpbnVlCisgICAgICAgIHRhZyA9IG92ZXJyaWRlcmUuZmluZGFsbChsaW5lKVswXQorICAgICAg ICBvdmVycmlkZXNbdGFnXSA9IFRydWUKLS0gCjIuNy40Cgo=